diff options
Diffstat (limited to 'engine/printer/serial.asm')
-rwxr-xr-x | engine/printer/serial.asm | 645 |
1 files changed, 0 insertions, 645 deletions
diff --git a/engine/printer/serial.asm b/engine/printer/serial.asm deleted file mode 100755 index 37ed2990b..000000000 --- a/engine/printer/serial.asm +++ /dev/null @@ -1,645 +0,0 @@ -Printer_StartTransmission: ; 84000 - ld hl, wGameboyPrinterRAM - ld bc, wGameboyPrinterRAMEnd - wGameboyPrinterRAM - xor a - call Printer_ByteFill - xor a - ld [rSB], a - ld [rSC], a - ld [wPrinterOpcode], a - ld hl, wPrinterConnectionOpen - set 0, [hl] - ld a, [GBPrinter] - ld [wGBPrinterSettings], a - xor a - ld [wJumptableIndex], a - ret -; 84022 - -PrinterJumptableIteration: ; 84022 - ld a, [wJumptableIndex] - ld e, a - ld d, 0 - ld hl, .Jumptable - add hl, de - add hl, de - ld a, [hli] - ld h, [hl] - ld l, a - jp hl -; 84031 - - -.Jumptable: ; 84031 (21:4031) - - dw Print_InitPrinterHandshake ; 00 - dw Printer_CheckConnectionStatus ; 01 - dw Printer_WaitSerial ; 02 - dw Printer_StartTransmittingTilemap ; 03 - dw Printer_TransmissionLoop ; 04 - dw Printer_WaitSerialAndLoopBack2 ; 05 - - dw Printer_EndTilemapTransmission ; 06 - dw Printer_TransmissionLoop ; 07 - dw Printer_WaitSerial ; 08 - dw Printer_SignalSendHeader ; 09 - dw Printer_TransmissionLoop ; 0a - dw Printer_WaitSerial ; 0b - dw Printer_WaitUntilFinished ; 0c - dw Printer_Quit ; 0d - - dw Printer_NextSection_ ; 0e - dw Printer_WaitSerial ; 0f - dw Printer_SignalLoopBack ; 10 - dw Printer_SectionOne ; 11 - dw Printer_WaitLoopBack ; 12 - dw Printer_WaitLoopBack_ ; 13 - - -Printer_NextSection: ; 84059 (21:4059) - ld hl, wJumptableIndex - inc [hl] - ret - -Printer_PrevSection: ; 8405e (21:405e) - ld hl, wJumptableIndex - dec [hl] - ret - -Printer_Quit: ; 84063 (21:4063) - xor a - ld [wPrinterStatusFlags], a - ld hl, wJumptableIndex - set 7, [hl] - ret - -Printer_NextSection_: ; 8406d (21:406d) - call Printer_NextSection - ret - -Printer_SectionOne: ; 84071 (21:4071) - ld a, $1 - ld [wJumptableIndex], a - ret - -Print_InitPrinterHandshake: ; 84077 (21:4077) - call Printer_ResetData - ld hl, PrinterDataPacket1 - call Printer_CopyPacket - xor a - ld [wPrinterSendByteCounter], a - ld [wPrinterSendByteCounter + 1], a - ld a, [wPrinterQueueLength] - ld [wPrinterRowIndex], a - call Printer_NextSection - call Printer_WaitHandshake - ld a, PRINTER_STATUS_CHECKING - ld [wPrinterStatus], a - ret - -Printer_StartTransmittingTilemap: ; 84099 (21:4099) - call Printer_ResetData - ; check ??? - ld hl, wPrinterRowIndex - ld a, [hl] - and a - jr z, Printer_EndTilemapTransmission - ; send packet 3 - ld hl, PrinterDataPacket3 ; signal start of transmission - call Printer_CopyPacket - ; prepare to send 40 tiles - call Printer_Convert2RowsTo2bpp - ld a, (40 tiles) % $100 - ld [wPrinterSendByteCounter], a - ld a, (40 tiles) / $100 - ld [wPrinterSendByteCounter + 1], a - ; compute the checksum - call Printer_ComputeChecksum - call Printer_NextSection - call Printer_WaitHandshake - ld a, PRINTER_STATUS_TRANSMITTING - ld [wPrinterStatus], a - ret - -Printer_EndTilemapTransmission: ; 840c5 (21:40c5) - ; ensure that we go from here to routine 7 - ld a, $6 - ld [wJumptableIndex], a - ; send packet 4 - ld hl, PrinterDataPacket4 ; signal no transmission - call Printer_CopyPacket - ; send no tile data - xor a - ld [wPrinterSendByteCounter], a - ld [wPrinterSendByteCounter + 1], a - call Printer_NextSection - call Printer_WaitHandshake - ret - -Printer_SignalSendHeader: ; 840de (21:40de) - call Printer_ResetData - ld hl, PrinterDataPacket2 ; signal request print - call Printer_CopyPacket - ; prepare to send 1 tile - call Printer_StageHeaderForSend - ld a, 4 % $100 - ld [wPrinterSendByteCounter], a - ld a, 4 / $100 - ld [wPrinterSendByteCounter + 1], a - ; compute the checksum - call Printer_ComputeChecksum - call Printer_NextSection - call Printer_WaitHandshake - ld a, PRINTER_STATUS_PRINTING - ld [wPrinterStatus], a - ret - -Printer_SignalLoopBack: ; 84103 (21:4103) - call Printer_ResetData - ; send packet 1 - ld hl, PrinterDataPacket1 ; signal no transmission - call Printer_CopyPacket - ; send no tile data - xor a - ld [wPrinterSendByteCounter], a - ld [wPrinterSendByteCounter + 1], a - ld a, [wPrinterQueueLength] - ld [wPrinterRowIndex], a - call Printer_NextSection - call Printer_WaitHandshake - ret - -Printer_WaitSerial: ; 84120 (21:4120) - ld hl, wPrinterSerialFrameDelay - inc [hl] - ld a, [hl] - cp $6 - ret c - xor a - ld [hl], a - call Printer_NextSection - ret - -Printer_WaitSerialAndLoopBack2: ; 8412e (21:412e) - ld hl, wPrinterSerialFrameDelay - inc [hl] - ld a, [hl] - cp $6 - ret c - xor a - ld [hl], a - ld hl, wPrinterRowIndex - dec [hl] - call Printer_PrevSection - call Printer_PrevSection - ret - -Printer_CheckConnectionStatus: ; 84143 (21:4143) - ld a, [wPrinterOpcode] - and a - ret nz - ld a, [wPrinterHandshake] - cp $ff - jr nz, .printer_connected - ld a, [wPrinterStatusFlags] - cp $ff - jr z, .printer_error - -.printer_connected - ld a, [wPrinterHandshake] - cp $81 - jr nz, .printer_error - ld a, [wPrinterStatusFlags] - cp $0 - jr nz, .printer_error - ld hl, wPrinterConnectionOpen - set 1, [hl] - ld a, $5 - ld [wHandshakeFrameDelay], a - call Printer_NextSection - ret - -.printer_error - ld a, $ff - ld [wPrinterHandshake], a - ld [wPrinterStatusFlags], a - ld a, $e - ld [wJumptableIndex], a - ret - -Printer_TransmissionLoop: ; 84180 (21:4180) - ld a, [wPrinterOpcode] - and a - ret nz - ld a, [wPrinterStatusFlags] - and $f0 - jr nz, .enter_wait_loop - ld a, [wPrinterStatusFlags] - and $1 - jr nz, .cycle_back - call Printer_NextSection - ret - -.cycle_back - call Printer_PrevSection - ret - -.enter_wait_loop - ld a, $12 ; Printer_WaitLoopBack - ld [wJumptableIndex], a - ret - -Printer_WaitUntilFinished: ; 841a1 (21:41a1) - ld a, [wPrinterOpcode] - and a - ret nz - ld a, [wPrinterStatusFlags] - and $f3 - ret nz - call Printer_NextSection - ret - -Printer_WaitLoopBack: ; 841b0 (21:41b0) - call Printer_NextSection -Printer_WaitLoopBack_: ; 841b3 (21:41b3) - ld a, [wPrinterOpcode] - and a - ret nz - ld a, [wPrinterStatusFlags] - and $f0 - ret nz - xor a - ld [wJumptableIndex], a - ret - -Printer_WaitHandshake: ; 841c3 (21:41c3) -.loop - ld a, [wPrinterOpcode] - and a - jr nz, .loop - xor a - ld [wPrinterSendByteOffset], a - ld [wPrinterSendByteOffset + 1], a - ld a, $1 - ld [wPrinterOpcode], a - ld a, $88 - ld [rSB], a - ld a, $1 - ld [rSC], a - ld a, $81 - ld [rSC], a - ret - -Printer_CopyPacket: ; 841e2 (21:41e2) - ld a, [hli] - ld [wca82], a - ld a, [hli] - ld [wca83], a - ld a, [hli] - ld [wca84], a - ld a, [hli] - ld [wca85], a - ld a, [hli] - ld [wPrinterChecksum], a - ld a, [hl] - ld [wPrinterChecksum + 1], a - ret - -Printer_ResetData: ; 841fb (21:41fb) - xor a - ld hl, wca82 - ld [hli], a - ld [hli], a - ld [hli], a - ld [hl], a - ld hl, wPrinterChecksum - ld [hli], a - ld [hl], a - xor a - ld [wPrinterSendByteCounter], a - ld [wPrinterSendByteCounter + 1], a - ld hl, wGameboyPrinterRAM - ld bc, wGameboyPrinter2bppSourceEnd - wGameboyPrinter2bppSource - call Printer_ByteFill - ret - -Printer_ComputeChecksum: ; 84219 (21:4219) - ld hl, 0 - ld bc, 4 - ld de, wca82 - call .ComputeChecksum - ld a, [wPrinterSendByteCounter] - ld c, a - ld a, [wPrinterSendByteCounter + 1] - ld b, a - ld de, wGameboyPrinterRAM - call .ComputeChecksum - ld a, l - ld [wPrinterChecksum], a - ld a, h - ld [wPrinterChecksum + 1], a - ret - -.ComputeChecksum: ; 8423c (21:423c) -.loop - ld a, [de] - inc de - add l - jr nc, .no_overflow - inc h -.no_overflow - ld l, a - dec bc - ld a, c - or b - jr nz, .loop - ret - -Printer_StageHeaderForSend: ; 84249 (21:4249) - ld a, $1 - ld [wGameboyPrinter2bppSource + 0], a - ld a, [wcbfa] - ld [wGameboyPrinter2bppSource + 1], a - ld a, %11100100 - ld [wGameboyPrinter2bppSource + 2], a - ld a, [wGBPrinterSettings] - ld [wGameboyPrinter2bppSource + 3], a - ret - -Printer_Convert2RowsTo2bpp: ; 84260 (21:4260) - ; de = wPrinterTileMapBuffer + 2 * SCREEN_WIDTH * ([wPrinterQueueLength] - [wPrinterRowIndex]) - ld a, [wPrinterRowIndex] - xor $ff - ld d, a - ld a, [wPrinterQueueLength] - inc a - add d - ld hl, wPrinterTileMapBuffer - ld de, 2 * SCREEN_WIDTH -.loop1 - and a - jr z, .okay1 - add hl, de - dec a - jr .loop1 -.okay1 - ld e, l - ld d, h - ld hl, wGameboyPrinter2bppSource - ld c, 2 * SCREEN_WIDTH -.loop2 - ld a, [de] - inc de - push bc - push de - push hl - ; convert tile index to vram address - swap a - ld d, a - and $f0 - ld e, a - ld a, d - and $f - ld d, a - and $8 - ld a, d - jr nz, .vtiles_8xxx - or $90 - jr .got_vtile_addr - -.vtiles_8xxx - or $80 -.got_vtile_addr - ld d, a - ; copy 1 vtile to hl - lb bc, BANK(Printer_Convert2RowsTo2bpp), 1 - call Request2bpp - pop hl - ld de, 1 tiles - add hl, de - pop de - pop bc - dec c - jr nz, .loop2 - ret - -Printer_ByteFill: ; 842ab - push de - ld e, a -.loop - ld [hl], e - inc hl - dec bc - ld a, c - or b - jr nz, .loop - ld a, e - pop de - ret -; 842b7 - -PrinterDataPacket1: - db 1, 0, $00, 0 - dw 1 -PrinterDataPacket2: - db 2, 0, $04, 0 - dw 0 -PrinterDataPacket3: - db 4, 0, $80, 2 - dw 0 -PrinterDataPacket4: - db 4, 0, $00, 0 - dw 4 -PrinterDataPacket5: ; unused - db 8, 0, $00, 0 - dw 8 -PrinterDataPacket6: ; unused - db 15, 0, $00, 0 - dw 15 -; 842db - -_PrinterReceive:: ; 842db - ld a, [wPrinterOpcode] - add a - ld e, a - ld d, 0 - ld hl, .Jumptable - add hl, de - ld a, [hli] - ld h, [hl] - ld l, a - jp hl -; 842ea - - -.Jumptable: ; 842ea (21:42ea) - dw Printer_DoNothing ; 00 - - dw Printer_Send0x33 ; 01 - dw Printer_Sendwca82 ; 02 - dw Printer_Sendwca83 ; 03 - dw Printer_Sendwca84 ; 04 - dw Printer_Sendwca85 ; 05 - dw Printer_SendNextByte ; 06 - dw Printer_SendwPrinterChecksumLo ; 07 - dw Printer_SendwPrinterChecksumHi ; 08 - dw Printer_Send0x00 ; 09 - dw Printer_ReceiveTowPrinterHandshakeAndSend0x00 ; 0a - dw Printer_ReceiveTowPrinterStatusFlagsAndExitSendLoop ; 0b - - dw Printer_Send0x33 ; 0c triggered by AskSerial - dw Printer_Send0x0f ; 0d - dw Printer_Send0x00_ ; 0e - dw Printer_Send0x00_ ; 0f - dw Printer_Send0x00_ ; 10 - dw Printer_Send0x0f ; 11 - dw Printer_Send0x00_ ; 12 - dw Printer_Send0x00 ; 13 - dw Printer_ReceiveTowPrinterHandshakeAndSend0x00 ; 14 - dw Printer_ReceiveTowPrinterStatusFlagsAndExitSendLoop_ ; 15 - - dw Printer_Send0x33 ; 16 triggered by pressing B - dw Printer_Send0x08 ; 17 - dw Printer_Send0x00_ ; 18 - dw Printer_Send0x00_ ; 19 - dw Printer_Send0x00_ ; 1a - dw Printer_Send0x08 ; 1b - dw Printer_Send0x00_ ; 1c - dw Printer_Send0x00 ; 1d - dw Printer_ReceiveTowPrinterHandshakeAndSend0x00 ; 1e - dw Printer_ReceiveTowPrinterStatusFlagsAndExitSendLoop ; 1f - - -Printer_NextInstruction: ; 8432a (21:432a) - ld hl, wPrinterOpcode - inc [hl] - ret - -Printer_DoNothing: ; 8432f (21:432f) - ret - -Printer_Send0x33: ; 84330 (21:4330) - ld a, $33 - call Printer_SerialSend - call Printer_NextInstruction - ret - -Printer_Sendwca82: ; 84339 (21:4339) - ld a, [wca82] - call Printer_SerialSend - call Printer_NextInstruction - ret - -Printer_Sendwca83: ; 84343 (21:4343) - ld a, [wca83] - call Printer_SerialSend - call Printer_NextInstruction - ret - -Printer_Sendwca84: ; 8434d (21:434d) - ld a, [wca84] - call Printer_SerialSend - call Printer_NextInstruction - ret - -Printer_Sendwca85: ; 84357 (21:4357) - ld a, [wca85] - call Printer_SerialSend - call Printer_NextInstruction - ret - -Printer_SendNextByte: ; 84361 (21:4361) - ; decrement 16-bit counter - ld hl, wPrinterSendByteCounter - ld a, [hli] - ld d, [hl] - ld e, a - or d - jr z, .done - dec de - ld [hl], d - dec hl - ld [hl], e - - ld a, [wPrinterSendByteOffset] - ld e, a - ld a, [wPrinterSendByteOffset + 1] - ld d, a - ld hl, wGameboyPrinterRAM - add hl, de - inc de - ld a, e - ld [wPrinterSendByteOffset], a - ld a, d - ld [wPrinterSendByteOffset + 1], a - ld a, [hl] - call Printer_SerialSend - ret - -.done - call Printer_NextInstruction -Printer_SendwPrinterChecksumLo: ; 8438b (21:438b) - ld a, [wPrinterChecksum] - call Printer_SerialSend - call Printer_NextInstruction - ret - -Printer_SendwPrinterChecksumHi: ; 84395 (21:4395) - ld a, [wPrinterChecksum + 1] - call Printer_SerialSend - call Printer_NextInstruction - ret - -Printer_Send0x00: ; 8439f (21:439f) - ld a, $0 - call Printer_SerialSend - call Printer_NextInstruction - ret - -Printer_ReceiveTowPrinterHandshakeAndSend0x00: ; 843a8 (21:43a8) - ld a, [rSB] - ld [wPrinterHandshake], a - ld a, $0 - call Printer_SerialSend - call Printer_NextInstruction - ret - -Printer_ReceiveTowPrinterStatusFlagsAndExitSendLoop: ; 843b6 (21:43b6) - ld a, [rSB] - ld [wPrinterStatusFlags], a - xor a - ld [wPrinterOpcode], a - ret - -Printer_Send0x0f: ; 843c0 (21:43c0) - ld a, $f - call Printer_SerialSend - call Printer_NextInstruction - ret - -Printer_Send0x00_: ; 843c9 (21:43c9) - ld a, $0 - call Printer_SerialSend - call Printer_NextInstruction - ret - -Printer_Send0x08: ; 843d2 (21:43d2) - ld a, $8 - call Printer_SerialSend - call Printer_NextInstruction - ret - -Printer_SerialSend: ; 843db (21:43db) - ld [rSB], a - ld a, $1 ; switch to internal clock - ld [rSC], a - ld a, $81 ; start transfer - ld [rSC], a - ret - -Printer_ReceiveTowPrinterStatusFlagsAndExitSendLoop_: ; 843e6 (21:43e6) - ld a, [rSB] - ld [wPrinterStatusFlags], a - xor a - ld [wPrinterOpcode], a - ret |