summaryrefslogtreecommitdiff
path: root/src/home/printer.asm
blob: 9b4ce596411d08ba28d378f7aa51384cc615677b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
; serial transfer-related
SendPrinterPacket:
	push hl
	ld hl, wce64
	; Preamble
	ld a, $88
	ld [hli], a          ; [wce64] ← $88
	ld a, $33
	ld [hli], a          ; [wce65] ← $33

	; Header
	ld [hl], d           ; [wce66] ← d
	inc hl
	ld [hl], e           ; [wce67] ← e
	inc hl
	ld [hl], c           ; [wce68] ← c
	inc hl
	ld [hl], b           ; [wce69] ← b
	inc hl

	pop de
	ld [hl], e           ; [wPrinterPacketDataPtr] ← l
	inc hl
	ld [hl], d           ; [wce6b] ← h
	inc hl
	ld de, $ff45
	ld [hl], e           ; [wce6c] ← $45
	inc hl
	ld [hl], d           ; [wce6d] ← $ff
	ld hl, wSerialDataPtr
	ld [hl], LOW(wce64)  ; [wSerialDataPtr] ← $64
	inc hl
	ld [hl], HIGH(wce64) ; [wSerialDataPtr] ← $ce
	call Func_0e8e
	ld a, $1
	ld [wce63], a        ; [wce63] ← 1
	call Func_31fc
.asm_315d
	call DoFrame
	ld a, [wce63]
	or a
	jr nz, .asm_315d
	call ResetSerial

	ld bc, 1500
.asm_316c
	dec bc
	ld a, b
	or c
	jr nz, .asm_316c

	ld a, [wce6e]
	cp $81
	jr nz, .asm_3182
	ld a, [wPrinterStatus]
	ld l, a
	and $f1
	ld a, l
	ret z
	scf
	ret

.asm_3182
	ld a, $ff
	ld [wPrinterStatus], a
	scf
	ret

Func_3189:
	ld hl, PointerTable_3190
	dec a
	jp JumpToFunctionInTable

PointerTable_3190:
	dw Func_31a8
	dw Func_31a8
	dw Func_31a8
	dw Func_31a8
	dw Func_31a8
	dw Func_31b0
	dw Func_31ca
	dw Func_31dd
	dw Func_31e5
	dw Func_31ef
	dw Func_31ea
	dw Func_31f2

Func_31a8:
	call Func_31fc
Func_31ab:
	ld hl, wce63
	inc [hl]
	ret

Func_31b0:
	call Func_31ab
	ld hl, wce68
	ld a, [hli]
	or [hl]
	jr nz, .set_data_ptr
	call Func_31ab
	jr Func_31dd

.set_data_ptr
	ld hl, wPrinterPacketDataPtr
	ld de, wSerialDataPtr
	ld a, [hli]
	ld [de], a
	inc de
	ld a, [hl]
	ld [de], a
;	fallthrough

Func_31ca:
	call Func_31fc
	ld hl, wce68
	ld a, [hl]
	dec [hl]
	or a
	jr nz, .asm_31d8
	inc hl
	dec [hl]
	dec hl
.asm_31d8
	ld a, [hli]
	or [hl]
	jr z, Func_31ab
	ret

Func_31dd:
	ld a, [wce6c]
Func_31e0:
	call Func_3212
	jr Func_31ab

Func_31e5:
	ld a, [wce6d]
	jr Func_31e0

Func_31ea:
	ldh a, [rSB]
	ld [wce6e], a
Func_31ef:
	xor a
	jr Func_31e0

Func_31f2:
	ldh a, [rSB]
	ld [wPrinterStatus], a
	xor a
	ld [wce63], a
	ret

Func_31fc:
	ld hl, wSerialDataPtr
	ld e, [hl]
	inc hl
	ld d, [hl]
	ld a, [de]
	inc de
	ld [hl], d
	dec hl
	ld [hl], e
	ld e, a

	ld hl, wce6c
	add [hl]
	ld [hli], a
	ld a, $0
	adc [hl]
	ld [hl], a
	ld a, e
;	fallthrough

Func_3212:
	ldh [rSB], a
	ld a, SC_INTERNAL
	ldh [rSC], a
	ld a, SC_START | SC_INTERNAL
	ldh [rSC], a
	ret