diff options
Diffstat (limited to 'home/sgb.asm')
-rwxr-xr-x | home/sgb.asm | 277 |
1 files changed, 277 insertions, 0 deletions
diff --git a/home/sgb.asm b/home/sgb.asm new file mode 100755 index 0000000..49f8a00 --- /dev/null +++ b/home/sgb.asm @@ -0,0 +1,277 @@ +FarSendSGBPackets: ; 0x12a1 +; send 16*b bytes at a:hl via the joypad register + ld [hROMBankBuffer], a + ld a, [hLoadedROMBank] + push af + ld a, [hROMBankBuffer] + ld [hLoadedROMBank], a + ld [MBC5RomBank], a + ld a, [hl] + and $7 + jr z, .quit + ld b, a + ld c, $0 +.loop + push bc + ld a, $0 + ld [$ff00+c], a + ld a, $30 + ld [$ff00+c], a + ld b, $10 +.inner_loop + ld e, $8 + ld a, [hli] + ld d, a +.innermost_loop + bit 0, d + ld a, $10 + jr nz, .got_data + ld a, $20 +.got_data + ld [$ff00+c], a + ld a, $30 + ld [$ff00+c], a + rr d + dec e + jr nz, .innermost_loop + dec b + jr nz, .inner_loop + ld a, $20 + ld [$ff00+c], a + ld a, $30 + ld [$ff00+c], a + pop bc + dec b + jr z, .quit + call SGBWait7000 + jr .loop + +.quit + pop af + ld [hLoadedROMBank], a + ld [MBC5RomBank], a + ret + +SGBWait7000: ; 0x12ec + ld de, 7000 +.asm_12ef + nop + nop + nop + dec de + ld a, d + or e + jr nz, .asm_12ef + ret + +InitSGB: ; 0x12f8 + ld a, BANK(Data_38010) + ld hl, Data_38010 + call FarSendSGBPackets + call SGBWait7000 + ld a, [rJOYP] + and $3 + cp $3 + jr nz, .asm_1346 + ld a, $20 + ld [rJOYP], a + ld a, [rJOYP] + ld a, [rJOYP] + ld a, $30 + ld [rJOYP], a + ld a, $10 + ld [rJOYP], a + ld a, [rJOYP] + ld a, [rJOYP] + ld a, [rJOYP] + ld a, [rJOYP] + ld a, [rJOYP] + ld a, [rJOYP] + ld a, $30 + ld [rJOYP], a + ld a, [rJOYP] + ld a, [rJOYP] + ld a, [rJOYP] + ld a, [rJOYP] + and $3 + cp $3 + jr nz, .asm_1346 + ld a, BANK(Data_38000) + ld hl, Data_38000 + call FarSendSGBPackets + call SGBWait7000 + and a + ret + +.asm_1346 + ld a, BANK(Data_38000) + ld hl, Data_38000 + call FarSendSGBPackets + call SGBWait7000 + scf + ret + +FarSendSGBPacket_BGMapRows: ; 0x1353 + ld [hROMBankBuffer], a + ld a, [hLoadedROMBank] + push af + ld a, [hROMBankBuffer] + ld [hLoadedROMBank], a + ld [MBC5RomBank], a + push af + push hl + ld a, $e4 + ld [rBGP], a + ld de, $0010 + add hl, de + ld de, vTiles1 ; tiles + call LocalCopyData + ld hl, vBGMap0 ; bgmap + ld de, $000c + ld a, $80 + ld c, $d +.row + ld b, $14 +.col + ld [hli], a + inc a + dec b + jr nz, .col + add hl, de + dec c + jr nz, .row + ld a, $81 + ld [rLCDC], a + ld bc, $0005 + call SGBWait1750 + pop hl + pop af + call FarSendSGBPackets + ld bc, $0006 + call SGBWait1750 + ld a, [hBGP] + ld [rBGP], a + ld a, [hLCDC] + ld [rLCDC], a + pop af + ld [hLoadedROMBank], a + ld [MBC5RomBank], a + ret + +SendSGBBorder: ; 0x13a8 + ld a, [hSGBFlag] + and a + ret z + ld bc, $0078 + call SGBWait1750 + call SignalStartSGBBorderTransmission + ld a, BANK(Data_3a9e6) + ld hl, Data_3a9e6 + call FarSendSGBPackets + ld bc, $0004 + call SGBWait1750 + ld a, BANK(Data_3a9f6) + ld hl, Data_3a9f6 + call FarSendSGBPackets + ld bc, $0004 + call SGBWait1750 + ld a, BANK(Data_3aa06) + ld hl, Data_3aa06 + call FarSendSGBPackets + ld bc, $0004 + call SGBWait1750 + ld a, BANK(Data_3aa16) + ld hl, Data_3aa16 + call FarSendSGBPackets + ld bc, $0004 + call SGBWait1750 + ld a, BANK(Data_3aa26) + ld hl, Data_3aa26 + call FarSendSGBPackets + ld bc, $0004 + call SGBWait1750 + ld a, BANK(Data_3aa36) + ld hl, Data_3aa36 + call FarSendSGBPackets + ld bc, $0004 + call SGBWait1750 + ld a, BANK(Data_3aa46) + ld hl, Data_3aa46 + call FarSendSGBPackets + ld bc, $0004 + call SGBWait1750 + ld a, BANK(Data_3aa56) + ld hl, Data_3aa56 + call FarSendSGBPackets + ld bc, $0004 + call SGBWait1750 + ld bc, Data_39166 - Data_38156 - $10 + ld a, BANK(Data_38156) + ld hl, Data_38156 + call FarSendSGBPacket_BGMapRows + ld bc, $0004 + call SGBWait1750 + ld bc, Data_3a176 - Data_39166 - $10 + ld a, BANK(Data_39166) + ld hl, Data_39166 + call FarSendSGBPacket_BGMapRows + ld bc, $0004 + call SGBWait1750 + ld bc, Data_3a9e6 - Data_3a176 - $10 + ld a, BANK(Data_3a176) + ld hl, Data_3a176 + call FarSendSGBPacket_BGMapRows + ld bc, $0004 + call SGBWait1750 + ld bc, Data_38156 - Data_380a6 - $10 + ld a, BANK(Data_380a6) + ld hl, Data_380a6 + call FarSendSGBPacket_BGMapRows + ld bc, $0004 + call SGBWait1750 + ld bc, Data_3809a - Data_38030 - $10 + ld a, BANK(Data_38030) + ld hl, Data_38030 + call FarSendSGBPacket_BGMapRows + ld bc, $0004 + call SGBWait1750 + ld a, BANK(Data_38020) + ld hl, Data_38020 + call FarSendSGBPackets + ld bc, $0004 + call SGBWait1750 + ret + +SignalStartSGBBorderTransmission: ; 0x1489 + ld a, [hSGBFlag] + and a + ret z + ld a, [hSGBInit] + and a + ret nz + ld a, BANK(Data_3aa66) + ld hl, Data_3aa66 + call FarSendSGBPackets + ld bc, $0004 + call SGBWait1750 + ld a, $ff + ld [hSGBInit], a + ret + +SGBNormal: ; 0x14a4 + ld a, [hSGBFlag] + and a + ret z + ld bc, $0002 + call SGBWait1750 + ld a, [hSGBInit] + and a + ret z + ld a, BANK(Data_3aa76) + ld hl, Data_3aa76 + call FarSendSGBPackets + ld bc, $0004 + call SGBWait1750 + xor a + ld [hSGBInit], a + ret |