diff options
author | PikalaxALT <PikalaxALT@gmail.com> | 2016-01-29 18:36:31 -0500 |
---|---|---|
committer | PikalaxALT <PikalaxALT@gmail.com> | 2016-01-29 18:36:31 -0500 |
commit | 2bf93c5905319e9181f87b3f83cd3bce7b9feeca (patch) | |
tree | 3ebf17c8879e5d6243d81aac8f1c36eb226fac26 /home/copy2.asm | |
parent | ed3f9395f6d45f6554ed9d9c49c41ea86a8e2447 (diff) |
Import stuff from pokecrystal; diff gold and silver
Diffstat (limited to 'home/copy2.asm')
-rw-r--r-- | home/copy2.asm | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/home/copy2.asm b/home/copy2.asm new file mode 100644 index 00000000..538be572 --- /dev/null +++ b/home/copy2.asm @@ -0,0 +1,135 @@ +CopyBytes:: ; 0x3026 +; copy bc bytes from hl to de + inc b ; we bail the moment b hits 0, so include the last run + inc c ; same thing; include last byte + jr .HandleLoop +.CopyByte + ld a, [hli] + ld [de], a + inc de +.HandleLoop + dec c + jr nz, .CopyByte + dec b + jr nz, .CopyByte + ret + +SwapBytes:: ; 0x3034 +; swap bc bytes between hl and de +.Loop + ; stash [hl] away on the stack + ld a, [hl] + push af + + ; copy a byte from [de] to [hl] + ld a, [de] + ld [hli], a + + ; retrieve the previous value of [hl]; put it in [de] + pop af + ld [de], a + inc de + + ; handle loop stuff + dec bc + ld a, b + or c + jr nz, .Loop + ret + +ByteFill:: ; 0x3041 +; fill bc bytes with the value of a, starting at hl + inc b ; we bail the moment b hits 0, so include the last run + inc c ; same thing; include last byte + jr .HandleLoop +.PutByte + ld [hli], a +.HandleLoop + dec c + jr nz, .PutByte + dec b + jr nz, .PutByte + ret + +GetFarByte:: ; 0x304d +; retrieve a single byte from a:hl, and return it in a. + ; bankswitch to new bank + ld [hBuffer], a + ld a, [hROMBank] + push af + ld a, [hBuffer] + rst Bankswitch + + ; get byte from new bank + ld a, [hl] + ld [hBuffer], a + + ; bankswitch to previous bank + pop af + rst Bankswitch + + ; return retrieved value in a + ld a, [hBuffer] + ret + +GetFarHalfword:: ; 0x305d +; retrieve a halfword from a:hl, and return it in hl. + ; bankswitch to new bank + ld [hBuffer], a + ld a, [hROMBank] + push af + ld a, [hBuffer] + rst Bankswitch + + ; get halfword from new bank, put it in hl + ld a, [hli] + ld h, [hl] + ld l, a + + ; bankswitch to previous bank and return + pop af + rst Bankswitch + ret +; 0x306b + +FarCopyWRAM:: ; 306b + ld [hBuffer], a + ld a, [rSVBK] + push af + ld a, [hBuffer] + ld [rSVBK], a + + call CopyBytes + + pop af + ld [rSVBK], a + ret +; 307b + +GetFarWRAMByte:: ; 307b + ld [hBuffer], a + ld a, [rSVBK] + push af + ld a, [hBuffer] + ld [rSVBK], a + ld a, [hl] + ld [hBuffer], a + pop af + ld [rSVBK], a + ld a, [hBuffer] + ret +; 308d + +GetFarWRAMWord:: ; 308d + ld [hBuffer], a + ld a, [rSVBK] + push af + ld a, [hBuffer] + ld [rSVBK], a + ld a, [hli] + ld h, [hl] + ld l, a + pop af + ld [rSVBK], a + ret +; 309d |