Add routine that sends SGB packets

The delaying routine Wait7000, called after each single packet sending
is disassembled too.
This commit is contained in:
sawakita 2012-11-01 18:56:12 +01:00
parent 95a2c2a6da
commit d9c77261a1

View file

@ -70196,7 +70196,92 @@ DeterminePaletteID:
ld a, [hl] ld a, [hl]
ret ret
INCBIN "baserom.gbc",$71FB6,$725C8-$71FB6 INCBIN "baserom.gbc",$71FB6,$71FEB-$71FB6
SendSGBPacket: ;$5feb
;check number of packets
ld a,[hl]
and a,$07
ret z
; store number of packets in B
ld b,a
.loop2\@
; save B for later use
push bc
; load a non-zero value in $fff9 to disable the routine that checks actual
; joypad input (said routine, located at $15f, does nothing if $fff9 is not
; zero)
ld a,$01
ld [$fff9],a
; send RESET signal (P14=LOW, P15=LOW)
xor a
ld [$ff00],a
; set P14=HIGH, P15=HIGH
ld a,$30
ld [$ff00],a
;load length of packets (16 bytes)
ld b,$10
.nextByte\@
;set bit counter (8 bits per byte)
ld e,$08
; get next byte in the packet
ld a,[hli]
ld d,a
.nextBit0\@
bit 0,d
; if 0th bit is not zero set P14=HIGH,P15=LOW (send bit 1)
ld a,$10
jr nz,.next0\@
; else (if 0th bit is zero) set P14=LOW,P15=HIGH (send bit 0)
ld a,$20
.next0\@
ld [$ff00],a
; must set P14=HIGH,P15=HIGH between each "pulse"
ld a,$30
ld [$ff00],a
; rotation will put next bit in 0th position (so we can always use command
; "bit 0,d" to fetch the bit that has to be sent)
rr d
; decrease bit counter so we know when we have sent all 8 bits of current byte
dec e
jr nz,.nextBit0\@
dec b
jr nz,.nextByte\@
; send bit 1 as a "stop bit" (end of parameter data)
ld a,$20
ld [$ff00],a
; set P14=HIGH,P15=HIGH
ld a,$30
ld [$ff00],a
xor a
ld [$fff9],a
; wait for about 70000 cycles
call Wait7000
; restore (previously pushed) number of packets
pop bc
dec b
; return if there are no more packets
ret z
; else send 16 more bytes
jr .loop2\@
INCBIN "baserom.gbc",$7202B,$7214A-$7202B
Wait7000: ;$614a
; each loop takes about 10 cycles so this routine actually loops through 70000
; cycles.
ld de,$1b58 ; = 7000
.loop\@
nop
nop
nop
dec de
ld a,d
or e
jr nz,.loop\@
ret
INCBIN "baserom.gbc",$72156,$725C8-$72156
MonsterPalettes: ; 65C8 MonsterPalettes: ; 65C8
db PAL_MEWMON ; MISSINGNO db PAL_MEWMON ; MISSINGNO