diff options
| -rw-r--r-- | main.asm | 87 | 
1 files changed, 86 insertions, 1 deletions
| @@ -70196,7 +70196,92 @@ DeterminePaletteID:  	ld a, [hl]  	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  	db PAL_MEWMON    ; MISSINGNO | 
