Advertisement
PikalaxALT

Gen 3's LCRNG in GBZ80

Oct 18th, 2021
2,505
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. __addsi3:
  2.     ; *hl = *bc + *de
  3.     push hl
  4.     ld h, d
  5.     ld l, e
  6.     pop de
  7.     ld a, [bc]
  8.     add [hl]
  9.     ld [de], a
  10.     inc bc
  11.     inc de
  12.     inc hl
  13.     ld a, [bc]
  14.     adc [hl]
  15.     ld [de], a
  16.     inc bc
  17.     inc de
  18.     inc hl
  19.     ld a, [bc]
  20.     adc [hl]
  21.     ld [de], a
  22.     inc bc
  23.     inc de
  24.     inc hl
  25.     ld a, [bc]
  26.     adc [hl]
  27.     ld [de], a
  28.     ret
  29.  
  30. __shlsi3:
  31.     ; *hl = *de << b
  32.     ld a, b
  33.     and a
  34.     jr z, .sh0
  35.     cp 32
  36.     jr c, .proceed
  37.     xor a
  38.     ld [hli], a
  39.     ld [hli], a
  40.     ld [hli], a
  41.     ld [hl], a
  42.     scf
  43.     ret
  44. .sh0:
  45.     ld a, [de]
  46.     ld [hli], a
  47.     inc de
  48.     ld a, [de]
  49.     ld [hli], a
  50.     inc de
  51.     ld a, [de]
  52.     ld [hli], a
  53.     inc de
  54.     ld a, [de]
  55.     ld [hl], a
  56.     and a
  57.     ret
  58. .proceed:
  59.     xor a ; reset carry
  60.     push af
  61.     add sp, -4
  62.     push hl
  63.     ld hl, sp + 2
  64.     ld a, [de]
  65.     ld [hli], a
  66.     inc de
  67.     ld a, [de]
  68.     ld [hli], a
  69.     inc de
  70.     ld a, [de]
  71.     ld [hli], a
  72.     inc de
  73.     ld a, [de]
  74.     ld [hl], a
  75. .loop:
  76.     ld hl, sp + 2
  77.     sla [hl]
  78.     inc hl
  79.     rla [hl]
  80.     inc hl
  81.     rla [hl]
  82.     inc hl
  83.     rla [hl]
  84.     push af
  85.     ld hl, sp + 1
  86.     ld a, [hl]
  87.     and $10
  88.     ld hl, sp + 9
  89.     or [hl]
  90.     ld [hl], a
  91.     pop af
  92.     dec b
  93.     jr nz, .loop
  94.     ld hl, sp + 2
  95.     pop de
  96.     ld a, [hli]
  97.     ld [de], a
  98.     inc de
  99.     ld a, [hli]
  100.     ld [de], a
  101.     inc de
  102.     ld a, [hli]
  103.     ld [de], a
  104.     inc de
  105.     ld a, [hl]
  106.     ld [de], a
  107.     add sp, 4
  108.     pop af
  109.     ret
  110.  
  111. __mulsi3:
  112.     ; *hl = *bc * *de
  113.     xor a
  114.     push af
  115.     add sp, -8
  116.     push hl
  117.     ld hl, sp + 2
  118.     xor a
  119.     ld [hli], a
  120.     ld [hli], a
  121.     ld [hli], a
  122.     ld [hli], a
  123.     ld a, [de]
  124.     ld [hli], a
  125.     inc de
  126.     ld a, [de]
  127.     ld [hli], a
  128.     inc de
  129.     ld a, [de]
  130.     ld [hli], a
  131.     inc de
  132.     ld a, [de]
  133.     ld [hl], a
  134.     ld d, 4
  135. .loop:
  136.     ld a, [bc]
  137.     ld e, 8
  138. .loop2:
  139.     push bc
  140.     push de
  141.     rrca
  142.     jr nc, .skip
  143.     ld hl, sp + 10
  144.     ld b, h
  145.     ld c, l
  146.     ld hl, sp + 6
  147.     ld d, h
  148.     ld e, l
  149.     call __addsi3
  150.     push af
  151.     ld hl, sp + 1
  152.     ld a, [hl]
  153.     and $10
  154.     ld hl, sp + 17
  155.     or [hl]
  156.     ld [hl], a
  157.     pop af
  158. .skip:
  159.     ld hl, sp + 10
  160.     ld d, h
  161.     ld e, l
  162.     ld b, 1
  163.     call __shlsi3
  164.     pop de
  165.     pop bc
  166.     dec e
  167.     jr nz, .loop2
  168.     inc bc
  169.     dec b
  170.     jr nz, .loop
  171.     pop de
  172.     ld hl, sp + 0
  173.     ld a, [hli]
  174.     ld [de], a
  175.     inc de
  176.     ld a, [hli]
  177.     ld [de], a
  178.     inc de
  179.     ld a, [hli]
  180.     ld [de], a
  181.     inc de
  182.     ld a, [hl]
  183.     ld [de], a
  184.     add sp, 8
  185.     pop af
  186.     ret
  187.  
  188. Random:
  189.     ld hl, wRngValue
  190.     ld d, h
  191.     ld e, l
  192.     ld bc, .multiplicand
  193.     call __mulsi3
  194.     ld hl, wRngValue
  195.     ld d, h
  196.     ld e, l
  197.     ld bc, .addend
  198.     call __addsi3
  199.     ld hl, wRngValue + 2
  200.     ld a, [hli]
  201.     ld h, [hl]
  202.     ld l, a
  203.     ret
  204. .multiplicand: dl 1103515245
  205. .addend: dl 24691
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement