summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpikalaxalt <PikalaxALT@gmail.com>2016-06-06 08:23:52 -0400
committerpikalaxalt <PikalaxALT@gmail.com>2016-06-06 08:23:52 -0400
commit0e9d0481b897c6afe7cd7c0ea5c23562379ad8ca (patch)
tree43666c9c14e9e8eddcaf9591c1bb3d61e420c59f
parent7ee526b05e7eede42729697f1641dd1fd9829bf0 (diff)
Printer-related labels
-rwxr-xr-xengine/menu/main_menu.asm2
-rw-r--r--engine/menu/options.asm4
-rwxr-xr-xengine/oak_speech.asm4
-rw-r--r--engine/printer.asm856
-rwxr-xr-xengine/printer/serial.asm620
-rwxr-xr-xengine/unknown_ea3ea.asm10
-rw-r--r--home.asm10
-rw-r--r--home/serial.asm10
-rw-r--r--hram.asm2
-rwxr-xr-xwram.asm40
10 files changed, 789 insertions, 769 deletions
diff --git a/engine/menu/main_menu.asm b/engine/menu/main_menu.asm
index 48346a02..3f1ca0e8 100755
--- a/engine/menu/main_menu.asm
+++ b/engine/menu/main_menu.asm
@@ -128,7 +128,7 @@ InitOptions: ; 5bff (1:5bff)
ld a,3 ; medium speed
ld [wOptions],a
ld a,64 ; audio?
- ld [wd498], a
+ ld [wPrinterSettings], a
ret
Func_5cc1: ; 5cc1 (1:5cc1)
diff --git a/engine/menu/options.asm b/engine/menu/options.asm
index 5d3c82cb..4b8eb883 100644
--- a/engine/menu/options.asm
+++ b/engine/menu/options.asm
@@ -272,7 +272,7 @@ OptionsMenu_GBPrinterBrightness: ; 41e0c (10:5e0c)
ld a, d
.asm_41e2e
ld b, a
- ld [wd498], a
+ ld [wPrinterSettings], a
.asm_41e32
ld b, $0
ld hl, GBPrinterOptionStringsPointerTable
@@ -305,7 +305,7 @@ DarkestPrintText: ; 41e72 (10:5e72)
db "DARKEST @"
Func_41e7b: ; 41e7b (10:5e7b)
- ld a, [wd498]
+ ld a, [wPrinterSettings]
and a
jr z, .asm_41e93
cp $20
diff --git a/engine/oak_speech.asm b/engine/oak_speech.asm
index 5cbfbee1..6b43574a 100755
--- a/engine/oak_speech.asm
+++ b/engine/oak_speech.asm
@@ -5,7 +5,7 @@ SetDefaultNames: ; 5e27 (1:5e27)
push af
ld a, [wd732]
push af
- ld a, [wd498]
+ ld a, [wPrinterSettings]
push af
ld hl, wPlayerName
ld bc, wBoxDataEnd - wPlayerName
@@ -20,7 +20,7 @@ SetDefaultNames: ; 5e27 (1:5e27)
ld [wd496], a
ld [wd497], a
pop af
- ld [wd498], a
+ ld [wPrinterSettings], a
pop af
ld [wd732], a
pop af
diff --git a/engine/printer.asm b/engine/printer.asm
index 51a5c9ed..aa5c6ced 100644
--- a/engine/printer.asm
+++ b/engine/printer.asm
@@ -1,614 +1,4 @@
-Func_e8783: ; e8783 (3a:4783)
- ld a, 9
-Func_e8785:
- push af
- ld hl, wOverworldMap
- lb bc, 4, 13
- xor a
- call Func_e8a2e
- xor a
- ld [rSB], a
- ld [rSC], a
- ld [wUnknownSerialFlag_d49b], a
- ld hl, wUnknownSerialFlag_d49a
- set 0, [hl]
- ld a, [wd498]
- ld [wcae3], a
- pop af
- ld [wcaf4], a
- ret
-
-; e87a8
-Func_e87a8: ; e87a8 (3a:47a8)
- ld a, [wOverworldMap]
- ld e, a
- ld d, 0
- ld hl, Jumptable_e87b7
- add hl, de
- add hl, de
- ld a, [hli]
- ld h, [hl]
- ld l, a
- jp [hl]
-
-Jumptable_e87b7:
- dw Func_e87fd
- dw Func_e88c9
- dw Func_e88a6
- dw Func_e881f
- dw Func_e8906
- dw Func_e88b4
- dw Func_e884b
- dw Func_e8906
- dw Func_e88a6
- dw Func_e8864
- dw Func_e8906
- dw Func_e88a6
- dw Func_e8927
- dw Func_e87e9
- dw Func_e87f3
- dw Func_e88a6
- dw Func_e8889
- dw Func_e87f7
- dw Func_e8936
- dw Func_e8939
-
-Func_e87df:
- ld hl, wOverworldMap
- inc [hl]
- ret
-
-Func_e87e4:
- ld hl, wOverworldMap
- dec [hl]
- ret
-
-Func_e87e9:
- xor a
- ld [wc971], a
- ld hl, wOverworldMap
- set 7, [hl]
- ret
-
-Func_e87f3:
- call Func_e87df
- ret
-
-Func_e87f7:
- ld a, $01
- ld [wOverworldMap], a
- ret
-
-Func_e87fd:
- call Func_e8981
- ld hl, Data_e8a3a
- call Func_e8968
- xor a
- ld [wc976], a
- ld [wc977], a
- ld a, [wcaf4]
- ld [wc6e9], a
- call Func_e87df
- call Func_e8949
- ld a, $01
- ld [wPrinterStatusIndicator], a
- ret
-
-Func_e881f:
- call Func_e8981
- ld hl, wc6e9
- ld a, [hl]
- and a
- jr z, Func_e884b
- ld hl, Data_e8a46
- call Func_e8968
- call Func_e89e6
- ld a, $80
- ld [wc976], a
- ld a, $02
- ld [wc977], a
- call Func_e899f
- call Func_e87df
- call Func_e8949
- ld a, $02
- ld [wPrinterStatusIndicator], a
- ret
-
-Func_e884b:
- ld a, $06
- ld [wOverworldMap], a
- ld hl, Data_e8a4c
- call Func_e8968
- xor a
- ld [wc976], a
- ld [wc977], a
- call Func_e87df
- call Func_e8949
- ret
-
-Func_e8864:
- call Func_e8981
- ld hl, Data_e8a40
- call Func_e8968
- call Func_e89cf
- ld a, $04
- ld [wc976], a
- ld a, $00
- ld [wc977], a
- call Func_e899f
- call Func_e87df
- call Func_e8949
- ld a, $03
- ld [wPrinterStatusIndicator], a
- ret
-
-Func_e8889:
- call Func_e8981
- ld hl, Data_e8a3a
- call Func_e8968
- xor a
- ld [wc976], a
- ld [wc977], a
- ld a, [wcaf4]
- ld [wc6e9], a
- call Func_e87df
- call Func_e8949
- ret
-
-Func_e88a6:
- ld hl, wc973
- inc [hl]
- ld a, [hl]
- cp a, $06
- ret c
- xor a
- ld [hl], a
- call Func_e87df
- ret
-
-Func_e88b4:
- ld hl, wc973
- inc [hl]
- ld a, [hl]
- cp a, $06
- ret c
- xor a
- ld [hl], a
- ld hl, wc6e9
- dec [hl]
- call Func_e87e4
- call Func_e87e4
- ret
-
-Func_e88c9:
- ld a, [wUnknownSerialFlag_d49b]
- and a
- ret nz
- ld a, [wc970]
- cp a, $ff
- jr nz, .asm_e88dc
- ld a, [wc971]
- cp a, $ff
- jr z, .asm_e88f8
-.asm_e88dc
- ld a, [wc970]
- cp a, $81
- jr nz, .asm_e88f8
- ld a, [wc971]
- cp a, $00
- jr nz, .asm_e88f8
- ld hl, wUnknownSerialFlag_d49a
- set 1, [hl]
- ld a, $05
- ld [wc972], a
- call Func_e87df
- ret
-
-.asm_e88f8
- ld a, $ff
- ld [wc970], a
- ld [wc971], a
- ld a, $0e
- ld [wOverworldMap], a
- ret
-
-Func_e8906:
- ld a, [wUnknownSerialFlag_d49b]
- and a
- ret nz
- ld a, [wc971]
- and a, $f0
- jr nz, .asm_e8921
- ld a, [wc971]
- and a, $01
- jr nz, .asm_e891d
- call Func_e87df
- ret
-
-.asm_e891d
- call Func_e87e4
- ret
-
-.asm_e8921
- ld a, $12
- ld [wOverworldMap], a
- ret
-
-Func_e8927:
- ld a, [wUnknownSerialFlag_d49b]
- and a
- ret nz
- ld a, [wc971]
- and a, $f3
- ret nz
- call Func_e87df
- ret
-
-Func_e8936:
- call Func_e87df
-Func_e8939:
- ld a, [wUnknownSerialFlag_d49b]
- and a
- ret nz
- ld a, [wc971]
- and a, $f0
- ret nz
- xor a
- ld [wOverworldMap], a
- ret
-
-Func_e8949:
-.asm_e8949
- ld a, [wUnknownSerialFlag_d49b]
- and a
- jr nz, .asm_e8949
- xor a
- ld [wc974], a
- ld [wc975], a
- ld a, $01
- ld [wUnknownSerialFlag_d49b], a
- ld a, $88
- ld [rSB], a
- ld a, $01
- ld [rSC], a
- ld a, $81
- ld [rSC], a
- ret
-
-Func_e8968:
- ld a, [hli]
- ld [wc6ea], a
- ld a, [hli]
- ld [wc6eb], a
- ld a, [hli]
- ld [wc6ec], a
- ld a, [hli]
- ld [wc6ed], a
- ld a, [hli]
- ld [wc6ee], a
- ld a, [hl]
- ld [wc6ef], a
- ret
-
-Func_e8981:
- xor a
- ld hl, wc6ea
- ld [hli], a
- ld [hli], a
- ld [hli], a
- ld [hl], a
- ld hl, wc6ee
- ld [hli], a
- ld [hl], a
- xor a
- ld [wc976], a
- ld [wc977], a
- ld hl, wc6f0
- ld bc, $0280
- call Func_e8a2e
- ret
-
-Func_e899f:
- ld hl, $0000
- ld bc, $0004
- ld de, wc6ea
- call Func_e89c2
- ld a, [wc976]
- ld c, a
- ld a, [wc977]
- ld b, a
- ld de, wc6f0
- call Func_e89c2
- ld a, l
- ld [wc6ee], a
- ld a, h
- ld [wc6ef], a
- ret
-
-Func_e89c2:
-.asm_e89c2
- ld a, [de]
- inc de
- add l
- jr nc, .asm_e89c8
- inc h
-.asm_e89c8
- ld l, a
- dec bc
- ld a, c
- or b
- jr nz, .asm_e89c2
- ret
-
-Func_e89cf:
- ld a, $01
- ld [wc6f0], a
- ld a, [wcae2]
- ld [wc6f1], a
- ld a, $e4
- ld [wc6f2], a
- ld a, [wcae3]
- ld [wc6f3], a
- ret
-
-Func_e89e6:
- ld a, [wc6e9]
- ld b, a
- ld a, [wcaf4]
- sub b
- ld hl, wPrinterTileBuffer
- ld de, $0028
-.asm_e89f4
- and a
- jr z, .asm_e89fb
- add hl, de
- dec a
- jr .asm_e89f4
-
-.asm_e89fb
- ld e, l
- ld d, h
- ld hl, wc6f0
- ld c, $28
-.asm_e8a02
- ld a, [de]
- inc de
- push bc
- push de
- push hl
- swap a
- ld d, a
- and a, $f0
- ld e, a
- ld a, d
- and a, $0f
- ld d, a
- and a, $08
- ld a, d
- jr nz, .asm_e8a1a
- or a, $90
- jr .asm_e8a1c
-
-.asm_e8a1a
- or a, $80
-.asm_e8a1c
- ld d, a
- ld bc, $3a01
- call CopyVideoData
- pop hl
- ld de, $0010
- add hl, de
- pop de
- pop bc
- dec c
- jr nz, .asm_e8a02
- ret
-
-Func_e8a2e: ; e8a2e (3a:4a2e)
- push de
- ld e, a
-.asm_e8a30
- ld [hl], e
- inc hl
- dec bc
- ld a, c
- or b
- jr nz, .asm_e8a30
- ld a, e
- pop de
- ret
-
-Data_e8a3a:
- db $01, $00, $00, $00, $01, $00
-Data_e8a40:
- db $02, $00, $04, $00, $00, $00
-Data_e8a46:
- db $04, $00, $80, $02, $00, $00
-Data_e8a4c:
- db $04, $00, $00, $00, $04, $00
-Data_e8a52:
- db $08, $00, $00, $00, $08, $00
-Data_e8a58:
- db $0f, $00, $00, $00, $0f, $00
-
-Func_e8a5e: ; e8a5e (3a:4a5e)
- ld a, [wUnknownSerialFlag_d49b]
- ld e, a
- ld d, 0
- ld hl, Jumptable_e8a6d
- add hl, de
- add hl, de
- ld a, [hli]
- ld h, [hl]
- ld l, a
- jp [hl]
-
-Jumptable_e8a6d:
- dw Func_e8ab2
- dw Func_e8ab3
- dw Func_e8abc
- dw Func_e8ac6
- dw Func_e8ad0
- dw Func_e8ada
- dw Func_e8ae4
- dw Func_e8b0f
- dw Func_e8b19
- dw Func_e8b23
- dw Func_e8b2c
- dw Func_e8b3a
- dw Func_e8ab3
- dw Func_e8b44
- dw Func_e8b4d
- dw Func_e8b4d
- dw Func_e8b4d
- dw Func_e8b44
- dw Func_e8b4d
- dw Func_e8b23
- dw Func_e8b2c
- dw Func_e8b6a
- dw Func_e8ab3
- dw Func_e8b56
- dw Func_e8b4d
- dw Func_e8b4d
- dw Func_e8b4d
- dw Func_e8b56
- dw Func_e8b4d
- dw Func_e8b23
- dw Func_e8b2c
- dw Func_e8b3a
-
-Func_e8aad:
- ld hl, wUnknownSerialFlag_d49b
- inc [hl]
- ret
-
-Func_e8ab2:
- ret
-
-Func_e8ab3:
- ld a, $33
- call Func_e8b5f
- call Func_e8aad
- ret
-
-Func_e8abc:
- ld a, [wc6ea]
- call Func_e8b5f
- call Func_e8aad
- ret
-
-Func_e8ac6:
- ld a, [wc6eb]
- call Func_e8b5f
- call Func_e8aad
- ret
-
-Func_e8ad0:
- ld a, [wc6ec]
- call Func_e8b5f
- call Func_e8aad
- ret
-
-Func_e8ada:
- ld a, [wc6ed]
- call Func_e8b5f
- call Func_e8aad
- ret
-
-Func_e8ae4:
- ld hl, wc976
- ld e, [hl]
- inc hl
- ld d, [hl]
- ld a, e
- or d
- jr z, .asm_e8b0c
- dec de
- ld [hl], d
- dec hl
- ld [hl], e
- ld a, [wc974]
- ld e, a
- ld a, [wc975]
- ld d, a
- ld hl, wc6f0
- add hl, de
- inc de
- ld a, e
- ld [wc974], a
- ld a, d
- ld [wc975], a
- ld a, [hl]
- call Func_e8b5f
- ret
-
-.asm_e8b0c
- call Func_e8aad
-Func_e8b0f:
- ld a, [wc6ee]
- call Func_e8b5f
- call Func_e8aad
- ret
-
-Func_e8b19:
- ld a, [wc6ef]
- call Func_e8b5f
- call Func_e8aad
- ret
-
-Func_e8b23:
- ld a, $00
- call Func_e8b5f
- call Func_e8aad
- ret
-
-Func_e8b2c:
- ld a, [rSB]
- ld [wc970], a
- ld a, $00
- call Func_e8b5f
- call Func_e8aad
- ret
-
-Func_e8b3a:
- ld a, [rSB]
- ld [wc971], a
- xor a
- ld [wUnknownSerialFlag_d49b], a
- ret
-
-Func_e8b44:
- ld a, $0f
- call Func_e8b5f
- call Func_e8aad
- ret
-
-Func_e8b4d:
- ld a, $00
- call Func_e8b5f
- call Func_e8aad
- ret
-
-Func_e8b56:
- ld a, $08
- call Func_e8b5f
- call Func_e8aad
- ret
-
-Func_e8b5f:
- ld [rSB], a
- ld a, $01
- ld [rSC], a
- ld a, $81
- ld [rSC], a
- ret
-
-Func_e8b6a:
- ld a, [rSB]
- ld [wc971], a
- xor a
- ld [wUnknownSerialFlag_d49b], a
- ret
+INCLUDE "engine/printer/serial.asm"
Func_e8b74: ; e8b74 (3a:4b74)
ld a, [wUpdateSpritesEnabled]
@@ -616,12 +6,12 @@ Func_e8b74: ; e8b74 (3a:4b74)
xor a
ld [wUpdateSpritesEnabled], a
ld [$ffdb], a
- call Func_e8f24
+ call Printer_PlayPrinterMusic
ld a, [rIE]
push af
xor a
ld [rIF], a
- ld a, $09
+ ld a, $9
ld [rIE], a
xor a
ld [$ffba], a
@@ -637,11 +27,11 @@ Func_e8b74: ; e8b74 (3a:4b74)
ld a, $13
.asm_e8ba0
ld [wcae2], a
- call Func_e8efc
+ call Printer_CopyTileMapToPrinterTileBuffer
call ClearScreen
callab Func_401c2
callab Func_4027c
- ld a, $01
+ ld a, $1
ld [$ffba], a
call Func_e8c0c
jr c, .asm_e8bf4
@@ -649,44 +39,44 @@ Func_e8b74: ; e8b74 (3a:4b74)
and a
jr z, .asm_e8bf4
xor a
- ld [wUnknownSerialFlag_d49a], a
- ld [wUnknownSerialFlag_d49b], a
- ld c, $0c
+ ld [wPrinterConnectionOpen], a
+ ld [wPrinterOpcode], a
+ ld c, $c
call DelayFrames
call SaveScreenTilesToBuffer1
xor a
ld [$ffba], a
call Func_e8c50
- ld a, $07
+ ld a, $7
call Func_e8785
- ld a, $03
+ ld a, $3
ld [wcae2], a
- call Func_e8efc
+ call Printer_CopyTileMapToPrinterTileBuffer
call LoadScreenTilesFromBuffer1
- ld a, $01
+ ld a, $1
ld [$ffba], a
call Func_e8c0c
.asm_e8bf4
xor a
- ld [wUnknownSerialFlag_d49a], a
- ld [wUnknownSerialFlag_d49b], a
+ ld [wPrinterConnectionOpen], a
+ ld [wPrinterOpcode], a
xor a
ld [rIF], a
pop af
ld [rIE], a
call Func_0f3d
- call Func_e8f3b
+ call Printer_PlayMapMusic
pop af
ld [wUpdateSpritesEnabled], a
ret
Func_e8c0c:
- call Func_e8f16
+ call Printer_ResetJoypadHRAM
.asm_e8c0f
call JoypadLowSensitivity
- call Func_e8eca
+ call Printer_CheckPressingB
jr c, .asm_e8c2e
- ld a, [wc6e8]
+ ld a, [wPrinterReceiveJumptableIndex]
bit 7, a
jr nz, .asm_e8c2c
call Func_e87a8
@@ -709,16 +99,16 @@ Func_e8c30:
ld [wcaf5], a
ld a, h
ld [wcaf6], a
- ld a, $00
+ ld a, $0
rla ; copy carry flag state to bit 0
ld [wcaf9], a
and a
jr z, .asm_e8c4d
- ld a, $05
+ ld a, $5
jr .asm_e8c4f
.asm_e8c4d
- ld a, $09
+ ld a, $9
.asm_e8c4f
ret
@@ -730,24 +120,24 @@ Func_e8c50:
Func_e8c5c:
xor a
ld [$ffdb], a
- call Func_e8f24
+ call Printer_PlayPrinterMusic
call Func_e910a
ld a, [rIE]
push af
xor a
ld [rIF], a
- ld a, $09
+ ld a, $9
ld [rIE], a
call Func_e8783
ld a, $13
ld [wcae2], a
- call Func_e8efc
- call Func_e8f16
+ call Printer_CopyTileMapToPrinterTileBuffer
+ call Printer_ResetJoypadHRAM
.asm_e8c7d
call JoypadLowSensitivity
- call Func_e8eca
+ call Printer_CheckPressingB
jr c, .asm_e8c9a
- ld a, [wc6e8]
+ ld a, [wPrinterReceiveJumptableIndex]
bit 7, a
jr nz, .asm_e8c9a
call Func_e87a8
@@ -758,69 +148,69 @@ Func_e8c5c:
.asm_e8c9a
xor a
- ld [wUnknownSerialFlag_d49a], a
- ld [wUnknownSerialFlag_d49b], a
- call Func_e8f09
+ ld [wPrinterConnectionOpen], a
+ ld [wPrinterOpcode], a
+ call Printer_CopyTileMapFromPrinterTileBuffer
xor a
ld [rIF], a
pop af
ld [rIE], a
call Func_0f3d
- call Func_e8f3b
+ call Printer_PlayMapMusic
ret
Func_e8cb1:
xor a
ld [$ffdb], a
- call Func_e8f24
+ call Printer_PlayPrinterMusic
call _DisplayDiploma
ld a, [rIE]
push af
xor a
ld [rIF], a
- ld a, $09
+ ld a, $9
ld [rIE], a
call Func_e8783
ld a, $10
ld [wcae2], a
- call Func_e8efc
+ call Printer_CopyTileMapToPrinterTileBuffer
call Func_e8d11
jr c, .asm_e8cfa
xor a
- ld [wUnknownSerialFlag_d49a], a
- ld [wUnknownSerialFlag_d49b], a
- ld c, $0c
+ ld [wPrinterConnectionOpen], a
+ ld [wPrinterOpcode], a
+ ld c, $c
call DelayFrames
call SaveScreenTilesToBuffer1
xor a
ld [$ffba], a
call Func_e9ad3
call Func_e8783
- ld a, $03
+ ld a, $3
ld [wcae2], a
- call Func_e8efc
+ call Printer_CopyTileMapToPrinterTileBuffer
call LoadScreenTilesFromBuffer1
call Func_e8d11
.asm_e8cfa
xor a
- ld [wUnknownSerialFlag_d49a], a
- ld [wUnknownSerialFlag_d49b], a
- call Func_e8f09
+ ld [wPrinterConnectionOpen], a
+ ld [wPrinterOpcode], a
+ call Printer_CopyTileMapFromPrinterTileBuffer
xor a
ld [rIF], a
pop af
ld [rIE], a
call Func_0f3d
- call Func_e8f3b
+ call Printer_PlayMapMusic
ret
Func_e8d11:
- call Func_e8f16
+ call Printer_ResetJoypadHRAM
.asm_e8d14
call JoypadLowSensitivity
- call Func_e8eca
+ call Printer_CheckPressingB
jr c, .asm_e8d33
- ld a, [wc6e8]
+ ld a, [wPrinterReceiveJumptableIndex]
bit 7, a
jr nz, .asm_e8d31
call Func_e87a8
@@ -847,13 +237,13 @@ Func_e8d35:: ; e8d35 (3a:4e79)
push af
xor a
ld [wUpdateSpritesEnabled], a
- ld [hItemCounter], a
- call Func_e8f24
+ ld [hCanceledPrinting], a
+ call Printer_PlayPrinterMusic
ld a, [rIE]
push af
xor a
ld [rIF], a
- ld a, $09
+ ld a, $9
ld [rIE], a
call SaveScreenTilesToBuffer1
xor a
@@ -862,64 +252,64 @@ Func_e8d35:: ; e8d35 (3a:4e79)
call Func_e8783
ld a, $10
ld [wcae2], a
- call Func_e8efc
+ call Printer_CopyTileMapToPrinterTileBuffer
call LoadScreenTilesFromBuffer1
call Func_e8dfb
jr c, .asm_e8ddc
xor a
- ld [wUnknownSerialFlag_d49a], a
- ld [wUnknownSerialFlag_d49b], a
+ ld [wPrinterConnectionOpen], a
+ ld [wPrinterOpcode], a
ld c, 12
call DelayFrames
xor a
ld [H_AUTOBGTRANSFERENABLED], a
call Func_e98ec
call Func_e8783
- ld a, $00
+ ld a, $0
ld [wcae2], a
- call Func_e8efc
+ call Printer_CopyTileMapToPrinterTileBuffer
call LoadScreenTilesFromBuffer1
call Func_e8dfb
jr c, .asm_e8ddc
xor a
- ld [wUnknownSerialFlag_d49a], a
- ld [wUnknownSerialFlag_d49b], a
+ ld [wPrinterConnectionOpen], a
+ ld [wPrinterOpcode], a
ld c, 12
call DelayFrames
xor a
ld [H_AUTOBGTRANSFERENABLED], a
call Func_e9907
call Func_e8783
- ld a, $00
+ ld a, $0
ld [wcae2], a
- call Func_e8efc
+ call Printer_CopyTileMapToPrinterTileBuffer
call LoadScreenTilesFromBuffer1
call Func_e8dfb
jr c, .asm_e8ddc
xor a
- ld [wUnknownSerialFlag_d49a], a
- ld [wUnknownSerialFlag_d49b], a
+ ld [wPrinterConnectionOpen], a
+ ld [wPrinterOpcode], a
ld c, 12
call DelayFrames
xor a
ld [H_AUTOBGTRANSFERENABLED], a
call Func_e9922
call Func_e8783
- ld a, $03
+ ld a, $3
ld [wcae2], a
- call Func_e8efc
+ call Printer_CopyTileMapToPrinterTileBuffer
call LoadScreenTilesFromBuffer1
call Func_e8dfb
.asm_e8ddc
xor a
- ld [wUnknownSerialFlag_d49a], a
- ld [wUnknownSerialFlag_d49b], a
+ ld [wPrinterConnectionOpen], a
+ ld [wPrinterOpcode], a
xor a
ld [rIF], a
pop af
ld [rIE], a
call Func_0f3d
- call Func_e8f3b
+ call Printer_PlayMapMusic
pop af
ld [wUpdateSpritesEnabled], a
ret
@@ -930,12 +320,12 @@ Func_e8df4: ; e8df4
ret
Func_e8dfb: ; e8dfb
- call Func_e8f16
+ call Printer_ResetJoypadHRAM
.asm_e8dfe
call JoypadLowSensitivity
- call Func_e8eca
+ call Printer_CheckPressingB
jr c, .asm_e8e1d
- ld a, [wOverworldMap]
+ ld a, [wPrinterReceiveJumptableIndex]
bit 7, a
jr nz, .asm_e8e1b
call Func_e87a8
@@ -958,25 +348,25 @@ String_e8e1f: ; e8e1f
Func_e8e24: ; e8e24
xor a
- ld [hItemCounter], a
- call Func_e8f24
+ ld [hCanceledPrinting], a
+ call Printer_PlayPrinterMusic
call Func_ea3ea
ld a, [rIE]
push af
xor a
ld [rIF], a
- ld a, $09
+ ld a, $9
ld [rIE], a
call Func_e8783
ld a, $13
ld [wcae2], a
- call Func_e8efc
- call Func_e8f16
+ call Printer_CopyTileMapToPrinterTileBuffer
+ call Printer_ResetJoypadHRAM
.asm_e8e45
call JoypadLowSensitivity
- call Func_e8eca
+ call Printer_CheckPressingB
jr c, .asm_e8e62
- ld a, [wOverworldMap]
+ ld a, [wPrinterReceiveJumptableIndex]
bit 7, a
jr nz, .asm_e8e62
call Func_e87a8
@@ -987,15 +377,15 @@ Func_e8e24: ; e8e24
.asm_e8e62
xor a
- ld [wUnknownSerialFlag_d49a], a
- ld [wUnknownSerialFlag_d49b], a
- call Func_e8f09
+ ld [wPrinterConnectionOpen], a
+ ld [wPrinterOpcode], a
+ call Printer_CopyTileMapFromPrinterTileBuffer
xor a
ld [rIF], a
pop af
ld [rIE], a
call Func_0f3d
- call Func_e8f3b
+ call Printer_PlayMapMusic
ret
Func_e8e79: ; e8e79 (3a:4e79)
@@ -1008,17 +398,17 @@ Func_e8e79: ; e8e79 (3a:4e79)
push af
xor a
ld [rIF], a
- ld a, $09
+ ld a, $9
ld [rIE], a
call Func_e8783
ld a, $13
ld [wcae2], a
ld a, $1
ld [H_AUTOBGTRANSFERENABLED], a
- call Func_e8efc
+ call Printer_CopyTileMapToPrinterTileBuffer
call Func_ea573
.asm_e8e9c
- ld a, [wOverworldMap]
+ ld a, [wPrinterReceiveJumptableIndex]
bit 7, a
jr nz, .asm_e8eae
call Func_ea5d1
@@ -1028,10 +418,10 @@ Func_e8e79: ; e8e79 (3a:4e79)
.asm_e8eae
xor a
- ld [wUnknownSerialFlag_d49a], a
- ld [wUnknownSerialFlag_d49b], a
+ ld [wPrinterConnectionOpen], a
+ ld [wPrinterOpcode], a
ld hl, wOAMBuffer + 32 * 4
- ld bc, $0020
+ ld bc, 8 * 4
xor a
call FillMemory
xor a
@@ -1044,54 +434,54 @@ Func_e8e79: ; e8e79 (3a:4e79)
pop af
ret
-Func_e8eca: ; e8eca (3a:4eca)
+Printer_CheckPressingB: ; e8eca (3a:4eca)
ld a, [hJoyHeld]
and B_BUTTON
- jr nz, .asm_e8ed2
+ jr nz, .quit
and a
ret
-.asm_e8ed2
- ld a, [wOverworldMap]
- cp $0c
- jr nz, .asm_e8ef6
-.asm_e8ed9
- ld a, [wUnknownSerialFlag_d49b]
+.quit
+ ld a, [wPrinterReceiveJumptableIndex]
+ cp $c
+ jr nz, .already_done
+.wait_current_task
+ ld a, [wPrinterOpcode]
and a
- jr nz, .asm_e8ed9
+ jr nz, .wait_current_task
ld a, $16
- ld [wUnknownSerialFlag_d49b], a
+ ld [wPrinterOpcode], a
ld a, $88
ld [rSB], a
- ld a, $01
+ ld a, $1
ld [rSC], a
ld a, $81
ld [rSC], a
-.asm_e8ef0
- ld a, [wUnknownSerialFlag_d49b]
+.wait_send_cancel
+ ld a, [wPrinterOpcode]
and a
- jr nz, .asm_e8ef0
-.asm_e8ef6
- ld a, $01
- ld [hItemCounter], a
+ jr nz, .wait_send_cancel
+.already_done
+ ld a, $1
+ ld [hCanceledPrinting], a
scf
ret
-Func_e8efc: ; e8efc (3a:4efc)
+Printer_CopyTileMapToPrinterTileBuffer: ; e8efc (3a:4efc)
coord hl, 0, 0
coord de, 0, 0, wPrinterTileBuffer
ld bc, SCREEN_HEIGHT * SCREEN_WIDTH
call CopyData
ret
-Func_e8f09: ; e8f09 (3a:4f09)
+Printer_CopyTileMapFromPrinterTileBuffer: ; e8f09 (3a:4f09)
coord hl, 0, 0, wPrinterTileBuffer
coord de, 0, 0
ld bc, SCREEN_HEIGHT * SCREEN_WIDTH
call CopyData
ret
-Func_e8f16: ; e8f16 (3a:4f16)
+Printer_ResetJoypadHRAM: ; e8f16 (3a:4f16)
xor a
ld [hJoyLast], a
ld [hJoyReleased], a
@@ -1101,8 +491,8 @@ Func_e8f16: ; e8f16 (3a:4f16)
ld [hJoy6], a
ret
-Func_e8f24: ; e8f24 (3a:4f24)
- call Func_e8f42
+Printer_PlayPrinterMusic: ; e8f24 (3a:4f24)
+ call Printer_FadeOutMusicAndWait
ld a, [wAudioROMBank]
ld [wAudioSavedROMBank], a
ld a, BANK(Music_GBPrinter)
@@ -1112,19 +502,19 @@ Func_e8f24: ; e8f24 (3a:4f24)
call PlaySound
ret
-Func_e8f3b: ; e8f3b (3a:4f3b)
- call Func_e8f42
+Printer_PlayMapMusic: ; e8f3b (3a:4f3b)
+ call Printer_FadeOutMusicAndWait
call PlayDefaultMusic
ret
-Func_e8f42: ; e8f42 (3a:4f42)
+Printer_FadeOutMusicAndWait: ; e8f42 (3a:4f42)
ld a, $4
ld [wAudioFadeOutControl], a
call StopAllMusic
-.asm_e8f4a
+.wait_music_stop
ld a, [wAudioFadeOutControl]
and a
- jr nz, .asm_e8f4a
+ jr nz, .wait_music_stop
ret
GBPrinter_CheckForErrors: ; e8f51 (3a:4f51)
@@ -1139,7 +529,7 @@ GBPrinter_CheckForErrors: ; e8f51 (3a:4f51)
.check_other_errors
ld a, [wc971]
- and $e0
+ and %11100000
ret z
bit 7, a
jr nz, .error1
@@ -1176,7 +566,7 @@ GBPrinter_UpdateStatusMessage:
pop af
ld e, a
ld d, $0
- ld hl, Table_e8fca
+ ld hl, .PrinterStatusMessages
add hl, de
add hl, de
ld e, [hl]
@@ -1185,7 +575,7 @@ GBPrinter_UpdateStatusMessage:
coord hl, 1, 7
call PlaceString
coord hl, 2, 15
- ld de, String_e8fb8
+ ld de, .PressBToCancel
call PlaceString
ld a, $1
ld [H_AUTOBGTRANSFERENABLED], a
@@ -1193,10 +583,10 @@ GBPrinter_UpdateStatusMessage:
ld [wPrinterStatusIndicator], a
ret
-String_e8fb8:
+.PressBToCancel:
db "Press B to Cancel@"
-Table_e8fca:
+.PrinterStatusMessages:
dw .Blank
dw .CheckingLink
dw .Transmitting
@@ -1257,7 +647,7 @@ Func_e910a:
call Func_e91b5
coord hl, 19, 0
call Func_e91b5
- ld a, $04
+ ld a, $4
coord hl, 0, 0
ld [hl], a
coord hl, 0, 17
@@ -1312,9 +702,9 @@ Func_e910a:
Func_e91a9:
ld c, SCREEN_WIDTH / 2
.asm_e91ab
- ld [hl], $00
+ ld [hl], $0
inc hl
- ld [hl], $01
+ ld [hl], $1
inc hl
dec c
jr nz, .asm_e91ab
@@ -1324,9 +714,9 @@ Func_e91b5:
ld c, SCREEN_HEIGHT / 2
ld de, SCREEN_WIDTH
.asm_e91ba
- ld [hl], $02
+ ld [hl], $2
add hl, de
- ld [hl], $03
+ ld [hl], $3
add hl, de
dec c
jr nz, .asm_e91ba
@@ -1427,7 +817,7 @@ Func_e988a:
ld [hl], a
coord hl, 4, 9
ld de, wBoxSpecies
- ld c, $03
+ ld c, $3
call Func_e994e
ret
diff --git a/engine/printer/serial.asm b/engine/printer/serial.asm
new file mode 100755
index 00000000..0c9a70ed
--- /dev/null
+++ b/engine/printer/serial.asm
@@ -0,0 +1,620 @@
+Func_e8783: ; e8783 (3a:4783)
+ ld a, 9
+Func_e8785:
+ push af
+ ld hl, wPrinterData
+ ld bc, wPrinterDataEnd - wPrinterData
+ xor a
+ call Printer_FillMemory
+ xor a
+ ld [rSB], a
+ ld [rSC], a
+ ld [wPrinterOpcode], a
+ ld hl, wPrinterConnectionOpen
+ set 0, [hl]
+ ld a, [wPrinterSettings]
+ ld [wPrinterSettingsTempCopy], a
+ pop af
+ ld [wcaf4], a
+ ret
+
+; e87a8
+Func_e87a8: ; e87a8 (3a:47a8)
+ ld a, [wPrinterReceiveJumptableIndex]
+ 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]
+
+.Jumptable:
+ dw Printer_InitSerial ; 00
+ dw Func_e88c9 ; 01
+ dw Func_e88a6 ; 02
+ dw Func_e881f ; 03
+ dw Func_e8906 ; 04
+ dw Func_e88b4 ; 05
+ dw Func_e884b ; 06
+ dw Func_e8906 ; 07
+ dw Func_e88a6 ; 08
+ dw Func_e8864 ; 09
+ dw Func_e8906 ; 0a
+ dw Func_e88a6 ; 0b
+ dw Func_e8927 ; 0c
+ dw Printer_Quit ; 0d
+ dw Printer_Next_ ; 0e
+ dw Func_e88a6 ; 10
+ dw Func_e8889 ; 11
+ dw Printer_LoopBack ; 12
+ dw Func_e8936 ; 13
+ dw Func_e8939 ; 14
+
+Printer_Next:
+ ld hl, wPrinterReceiveJumptableIndex
+ inc [hl]
+ ret
+
+Printer_Back:
+ ld hl, wPrinterReceiveJumptableIndex
+ dec [hl]
+ ret
+
+Printer_Quit:
+ xor a
+ ld [wc971], a
+ ld hl, wPrinterReceiveJumptableIndex
+ set 7, [hl]
+ ret
+
+Printer_Next_:
+ call Printer_Next
+ ret
+
+Printer_LoopBack:
+ ld a, $1
+ ld [wPrinterReceiveJumptableIndex], a
+ ret
+
+Printer_InitSerial:
+ call Func_e8981
+ ld hl, PrinterDataPacket1
+ call Func_e8968
+ xor a
+ ld [wPrinterDataSize], a
+ ld [wPrinterDataSize + 1], a
+ ld a, [wcaf4]
+ ld [wc6e9], a
+ call Printer_Next
+ call Func_e8949
+ ld a, $1
+ ld [wPrinterStatusIndicator], a
+ ret
+
+Func_e881f:
+ call Func_e8981
+ ld hl, wc6e9
+ ld a, [hl]
+ and a
+ jr z, Func_e884b
+ ld hl, PrinterDataPacket3
+ call Func_e8968
+ call Func_e89e6
+ ld a, $80
+ ld [wPrinterDataSize], a
+ ld a, $2
+ ld [wPrinterDataSize + 1], a
+ call ComputePrinterChecksum
+ call Printer_Next
+ call Func_e8949
+ ld a, $2
+ ld [wPrinterStatusIndicator], a
+ ret
+
+Func_e884b:
+ ld a, $6
+ ld [wPrinterReceiveJumptableIndex], a
+ ld hl, PrinterDataPacket4
+ call Func_e8968
+ xor a
+ ld [wPrinterDataSize], a
+ ld [wPrinterDataSize + 1], a
+ call Printer_Next
+ call Func_e8949
+ ret
+
+Func_e8864:
+ call Func_e8981
+ ld hl, PrinterDataPacket2
+ call Func_e8968
+ call Func_e89cf
+ ld a, $4
+ ld [wPrinterDataSize], a
+ ld a, $0
+ ld [wPrinterDataSize + 1], a
+ call ComputePrinterChecksum
+ call Printer_Next
+ call Func_e8949
+ ld a, $3
+ ld [wPrinterStatusIndicator], a
+ ret
+
+Func_e8889:
+ call Func_e8981
+ ld hl, PrinterDataPacket1
+ call Func_e8968
+ xor a
+ ld [wPrinterDataSize], a
+ ld [wPrinterDataSize + 1], a
+ ld a, [wcaf4]
+ ld [wc6e9], a
+ call Printer_Next
+ call Func_e8949
+ ret
+
+Func_e88a6:
+ ld hl, wc973
+ inc [hl]
+ ld a, [hl]
+ cp a, $6
+ ret c
+ xor a
+ ld [hl], a
+ call Printer_Next
+ ret
+
+Func_e88b4:
+ ld hl, wc973
+ inc [hl]
+ ld a, [hl]
+ cp a, $6
+ ret c
+ xor a
+ ld [hl], a
+ ld hl, wc6e9
+ dec [hl]
+ call Printer_Back
+ call Printer_Back
+ ret
+
+Func_e88c9:
+ ld a, [wPrinterOpcode]
+ and a
+ ret nz
+ ld a, [wc970]
+ cp a, $ff
+ jr nz, .asm_e88dc
+ ld a, [wc971]
+ cp a, $ff
+ jr z, .asm_e88f8
+.asm_e88dc
+ ld a, [wc970]
+ cp a, $81
+ jr nz, .asm_e88f8
+ ld a, [wc971]
+ cp a, $0
+ jr nz, .asm_e88f8
+ ld hl, wPrinterConnectionOpen
+ set 1, [hl]
+ ld a, $5
+ ld [wc972], a
+ call Printer_Next
+ ret
+
+.asm_e88f8
+ ld a, $ff
+ ld [wc970], a
+ ld [wc971], a
+ ld a, $e
+ ld [wPrinterReceiveJumptableIndex], a
+ ret
+
+Func_e8906:
+ ld a, [wPrinterOpcode]
+ and a
+ ret nz
+ ld a, [wc971]
+ and a, $f0
+ jr nz, .asm_e8921
+ ld a, [wc971]
+ and a, $1
+ jr nz, .asm_e891d
+ call Printer_Next
+ ret
+
+.asm_e891d
+ call Printer_Back
+ ret
+
+.asm_e8921
+ ld a, $12
+ ld [wPrinterReceiveJumptableIndex], a
+ ret
+
+Func_e8927:
+ ld a, [wPrinterOpcode]
+ and a
+ ret nz
+ ld a, [wc971]
+ and a, $f3
+ ret nz
+ call Printer_Next
+ ret
+
+Func_e8936:
+ call Printer_Next
+Func_e8939:
+ ld a, [wPrinterOpcode]
+ and a
+ ret nz
+ ld a, [wc971]
+ and a, $f0
+ ret nz
+ xor a
+ ld [wPrinterReceiveJumptableIndex], a
+ ret
+
+Func_e8949:
+.wait_printer_operation
+ ld a, [wPrinterOpcode]
+ and a
+ jr nz, .wait_printer_operation
+ xor a
+ ld [wc974], a
+ ld [wc975], 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
+
+Func_e8968:
+ ld a, [hli]
+ ld [wPrinterDataHeader], a
+ ld a, [hli]
+ ld [wPrinterDataHeader + 1], a
+ ld a, [hli]
+ ld [wPrinterDataHeader + 2], a
+ ld a, [hli]
+ ld [wPrinterDataHeader + 3], a
+ ld a, [hli]
+ ld [wPrinterChecksum], a
+ ld a, [hl]
+ ld [wPrinterChecksum + 1], a
+ ret
+
+Func_e8981:
+ xor a
+ ld hl, wPrinterDataHeader
+ ld [hli], a
+ ld [hli], a
+ ld [hli], a
+ ld [hl], a
+ ld hl, wPrinterChecksum
+ ld [hli], a
+ ld [hl], a
+ xor a
+ ld [wPrinterDataSize], a
+ ld [wPrinterDataSize + 1], a
+ ld hl, wPrinterSerialReceived
+ ld bc, $280
+ call Printer_FillMemory
+ ret
+
+ComputePrinterChecksum:
+ ld hl, $0
+ ld bc, $4
+ ld de, wPrinterDataHeader
+ call .AddToChecksum
+ ld a, [wPrinterDataSize]
+ ld c, a
+ ld a, [wPrinterDataSize + 1]
+ ld b, a
+ ld de, wPrinterSerialReceived
+ call .AddToChecksum
+ ld a, l
+ ld [wPrinterChecksum], a
+ ld a, h
+ ld [wPrinterChecksum + 1], a
+ ret
+
+.AddToChecksum:
+.loop
+ ld a, [de]
+ inc de
+ add l
+ jr nc, .no_carry
+ inc h
+.no_carry
+ ld l, a
+ dec bc
+ ld a, c
+ or b
+ jr nz, .loop
+ ret
+
+Func_e89cf:
+ ld a, $1
+ ld [wPrinterSerialReceived], a
+ ld a, [wcae2]
+ ld [wPrinterStatusReceived], a
+ ld a, $e4
+ ld [wc6f2], a
+ ld a, [wPrinterSettingsTempCopy]
+ ld [wc6f3], a
+ ret
+
+Func_e89e6:
+ ld a, [wc6e9]
+ ld b, a
+ ld a, [wcaf4]
+ sub b
+ ld hl, wPrinterTileBuffer
+ ld de, $28
+.asm_e89f4
+ and a
+ jr z, .asm_e89fb
+ add hl, de
+ dec a
+ jr .asm_e89f4
+
+.asm_e89fb
+ ld e, l
+ ld d, h
+ ld hl, wPrinterSerialReceived
+ ld c, $28
+.asm_e8a02
+ ld a, [de]
+ inc de
+ push bc
+ push de
+ push hl
+ swap a
+ ld d, a
+ and a, $f0
+ ld e, a
+ ld a, d
+ and a, $f
+ ld d, a
+ and a, $8
+ ld a, d
+ jr nz, .asm_e8a1a
+ or a, $90
+ jr .asm_e8a1c
+
+.asm_e8a1a
+ or a, $80
+.asm_e8a1c
+ ld d, a
+ ld bc, $3a01
+ call CopyVideoData
+ pop hl
+ ld de, $10
+ add hl, de
+ pop de
+ pop bc
+ dec c
+ jr nz, .asm_e8a02
+ ret
+
+Printer_FillMemory: ; e8a2e (3a:4a2e)
+ 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
+
+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
+
+PrinterSerial_: ; e8a5e (3a:4a5e)
+ ld a, [wPrinterOpcode]
+ 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]
+
+.Jumptable:
+ dw .Nop
+
+ dw .SignalTransmissionStart
+ dw .SendHeaderByte1
+ dw .SendHeaderByte2
+ dw .SendHeaderByte3
+ dw .SendHeaderByte4
+ dw .DataByte
+ dw .SendChecksumLo
+ dw .SendChecksumHi
+ dw .SignalTransmissionEnd
+ dw .Receive1
+ dw .Receive2
+
+ dw .SignalTransmissionStart
+ dw .Send_0F
+ dw .Send_00
+ dw .Send_00
+ dw .Send_00
+ dw .Send_0F
+ dw .Send_00
+ dw .SignalTransmissionEnd
+ dw .Receive1
+ dw .Receive2_
+
+ dw .SignalTransmissionStart
+ dw .SignalQuit
+ dw .Send_00
+ dw .Send_00
+ dw .Send_00
+ dw .SignalQuit
+ dw .Send_00
+ dw .SignalTransmissionEnd
+ dw .Receive1
+ dw .Receive2
+
+.NextInstruction:
+ ld hl, wPrinterOpcode
+ inc [hl]
+ ret
+
+.Nop:
+ ret
+
+.SignalTransmissionStart:
+ ld a, $33
+ call .SendByte
+ call .NextInstruction
+ ret
+
+.SendHeaderByte1:
+ ld a, [wPrinterDataHeader]
+ call .SendByte
+ call .NextInstruction
+ ret
+
+.SendHeaderByte2:
+ ld a, [wPrinterDataHeader + 1]
+ call .SendByte
+ call .NextInstruction
+ ret
+
+.SendHeaderByte3:
+ ld a, [wPrinterDataHeader + 2]
+ call .SendByte
+ call .NextInstruction
+ ret
+
+.SendHeaderByte4:
+ ld a, [wPrinterDataHeader + 3]
+ call .SendByte
+ call .NextInstruction
+ ret
+
+.DataByte:
+ ld hl, wPrinterDataSize
+ ld e, [hl]
+ inc hl
+ ld d, [hl]
+ ld a, e
+ or d
+ jr z, .sent_last_byte
+ dec de
+ ld [hl], d
+ dec hl
+ ld [hl], e
+ ld a, [wc974]
+ ld e, a
+ ld a, [wc975]
+ ld d, a
+ ld hl, wPrinterSerialReceived
+ add hl, de
+ inc de
+ ld a, e
+ ld [wc974], a
+ ld a, d
+ ld [wc975], a
+ ld a, [hl]
+ call .SendByte
+ ret
+
+.sent_last_byte
+ call .NextInstruction
+.SendChecksumLo:
+ ld a, [wPrinterChecksum]
+ call .SendByte
+ call .NextInstruction
+ ret
+
+.SendChecksumHi:
+ ld a, [wPrinterChecksum + 1]
+ call .SendByte
+ call .NextInstruction
+ ret
+
+.SignalTransmissionEnd:
+ ld a, $0
+ call .SendByte
+ call .NextInstruction
+ ret
+
+.Receive1:
+ ld a, [rSB]
+ ld [wc970], a
+ ld a, $0
+ call .SendByte
+ call .NextInstruction
+ ret
+
+.Receive2:
+ ld a, [rSB]
+ ld [wc971], a
+ xor a
+ ld [wPrinterOpcode], a
+ ret
+
+.Send_0F:
+ ld a, $f
+ call .SendByte
+ call .NextInstruction
+ ret
+
+.Send_00:
+ ld a, $0
+ call .SendByte
+ call .NextInstruction
+ ret
+
+.SignalQuit:
+ ld a, $8
+ call .SendByte
+ call .NextInstruction
+ ret
+
+.SendByte:
+ ld [rSB], a
+ ld a, $1
+ ld [rSC], a
+ ld a, $81
+ ld [rSC], a
+ ret
+
+.Receive2_:
+ ld a, [rSB]
+ ld [wc971], a
+ xor a
+ ld [wPrinterOpcode], a
+ ret
diff --git a/engine/unknown_ea3ea.asm b/engine/unknown_ea3ea.asm
index c00785b4..39f3de7e 100755
--- a/engine/unknown_ea3ea.asm
+++ b/engine/unknown_ea3ea.asm
@@ -398,7 +398,7 @@ Func_ea6d2: ; ea6d2 (3a:66d2)
ld a, [$c971]
cp a, $00
jr nz, .asm_ea6fb
- ld hl, wUnknownSerialFlag_d49a
+ ld hl, wPrinterConnectionOpen
set 1, [hl]
call Func_ea606
ret
@@ -441,7 +441,7 @@ Func_ea721: ; ea721 (3a:6721)
Func_ea72f: ; ea72f (3a:672f)
call Func_ea606
Func_ea732: ; ea732 (3a:6732)
- ld a, [wUnknownSerialFlag_d49b]
+ ld a, [wPrinterOpcode]
and a
ret nz
ld a, [$c971]
@@ -452,7 +452,7 @@ Func_ea732: ; ea732 (3a:6732)
ret
Func_ea742: ; ea742 (3a:6742)
- ld a, [wUnknownSerialFlag_d49b]
+ ld a, [wPrinterOpcode]
and a
jr nz, .asm_ea74a
and a
@@ -464,11 +464,11 @@ Func_ea742: ; ea742 (3a:6742)
Func_ea74c: ; ea74c (3a:674c)
.asm_ea74c
- ld a, [wUnknownSerialFlag_d49b]
+ ld a, [wPrinterOpcode]
and a
jr nz, .asm_ea74c
ld a, $01
- ld [wUnknownSerialFlag_d49b], a
+ ld [wPrinterOpcode], a
xor a
ld [$c974], a
ld [$c975], a
diff --git a/home.asm b/home.asm
index 426812e4..50469047 100644
--- a/home.asm
+++ b/home.asm
@@ -2120,15 +2120,15 @@ ChooseFlyDestination:: ; 2f9a (0:2f9a)
res 4, [hl]
jpba LoadTownMap_Fly
-Func_2fa7:: ; 2fa7 (0:2fa7)
- homecall Func_e8a5e
+PrinterSerial:: ; 2fa7 (0:2fa7)
+ homecall PrinterSerial_
ret
SerialFunction:: ; 2fb7 (0:2fb7)
- ld a, [wUnknownSerialFlag_d49a]
+ ld a, [wPrinterConnectionOpen]
bit 0, a
ret z
- ld a, [wUnknownSerialFlag_d49b]
+ ld a, [wPrinterOpcode]
and a
ret nz
ld hl, wOverworldMap+650
@@ -2139,7 +2139,7 @@ SerialFunction:: ; 2fb7 (0:2fb7)
xor a
ld [hl], a
ld a, $0c
- ld [wUnknownSerialFlag_d49b], a
+ ld [wPrinterOpcode], a
ld a, $88
ld [rSB], a
ld a, $1
diff --git a/home/serial.asm b/home/serial.asm
index c8e64f38..c8c7cbe9 100644
--- a/home/serial.asm
+++ b/home/serial.asm
@@ -3,9 +3,9 @@ Serial:: ; 1f78 (0:1f78)
push bc
push de
push hl
- ld a, [wUnknownSerialFlag_d49a]
- bit 0,a
- jp nz,Func_2162
+ ld a, [wPrinterConnectionOpen]
+ bit 0, a
+ jp nz, PrinterSerial__
ld a, [hSerialConnectionStatus]
inc a
jr z, .connectionNotYetEstablished
@@ -314,8 +314,8 @@ Serial_TryEstablishingExternallyClockedConnection:: ; 22fa (0:22fa)
ld [rSC], a
ret
-Func_2162:: ; 2162 (0:2162)
- call Func_2fa7
+PrinterSerial__:: ; 2162 (0:2162)
+ call PrinterSerial
pop hl
pop de
pop bc
diff --git a/hram.asm b/hram.asm
index 5138b239..0b5cb8b0 100644
--- a/hram.asm
+++ b/hram.asm
@@ -271,6 +271,8 @@ H_CURRENTSPRITEOFFSET EQU $FFDA ; multiple of $10
hItemCounter EQU $FFDB
+hCanceledPrinting EQU $FFDB
+
hGymGateIndex EQU $FFDB
hGymTrashCanRandNumMask EQU $FFDB
diff --git a/wram.asm b/wram.asm
index bff4283f..d967a8e8 100755
--- a/wram.asm
+++ b/wram.asm
@@ -420,13 +420,17 @@ wYellowIntroAnimatedObjectStructPointer:: ; c636
; c698
ds 80
-wTempPic::
+wTempPic:: ; c6e8
+wPrinterData:: ; c6e8
wOverworldMap:: ; c6e8
; ds 1300
-wc6e8:: ; c6e8
+wPrinterReceiveJumptableIndex:: ; c6e8
ds 1
wc6e9:: ; c6e9
ds 1
+
+; Printer data header
+wPrinterDataHeader:: ; c6ea
wc6ea:: ; c6ea
ds 1
wc6eb:: ; c6eb
@@ -435,14 +439,18 @@ wc6ec:: ; c6ec
ds 1
wc6ed:: ; c6ed
ds 1
-wc6ee:: ; c6ee
- ds 1
-wc6ef:: ; c6ef
- ds 1
-wc6f0:: ; c6f0
+wPrinterChecksum:: ; c6ee
+ dw
+
+wPrinterSerialReceived:: ; c6f0
ds 1
-wc6f1:: ; c6f1
+wPrinterStatusReceived:: ; c6f1
+; bit 7: set if error 1 (battery low)
+; bit 6: set if error 4 (too hot or cold)
+; bit 5: set if error 3 (paper jammed or empty)
+; if this and the previous byte are both $ff: error 2 (connection error)
ds 1
+
wc6f2:: ; c6f2
ds 1
wc6f3:: ; c6f3
@@ -472,20 +480,20 @@ wc974:: ; c974
ds 1
wc975:: ; c975
ds 1
-wc976:: ; c976
- ds 1
-wc977:: ; c977
- ds 1
+wPrinterDataSize:: ; c976
+ dw
wPrinterTileBuffer:: ; c978
ds SCREEN_HEIGHT * SCREEN_WIDTH
wPrinterStatusIndicator:: ; cae0
ds 2
wcae2:: ; cae2
ds 1
-wcae3:: ; cae3
+wPrinterSettingsTempCopy:: ; cae3
ds 17
wcaf4:: ; caf4
ds 1
+wPrinterDataEnd:: ; caf5
+
wcaf5:: ; caf5
ds 1
wcaf6:: ; caf6
@@ -2780,11 +2788,11 @@ wPreventBlackout:: ds 1 ; d492
wd495:: ds 1
wd496:: ds 1
wd497:: ds 1
-wd498:: ds 1
+wPrinterSettings:: ds 1
wUnknownSerialFlag_d499:: ds 1 ; d498
-wUnknownSerialFlag_d49a:: ds 1 ; d499
-wUnknownSerialFlag_d49b:: ds 1 ; d49a
+wPrinterConnectionOpen:: ds 1 ; d499
+wPrinterOpcode:: ds 1 ; d49a
wd49c:: ds 1 ; d49b
ds 19