Fix some flag bugs in INC and DEC
[fpgaboy.git] / flashprog.asm
CommitLineData
efc8cc5d
JW
1 SECTION "wee",HOME[$0]
2 ld hl, $D000
3 ld sp, hl
4
5 xor a
6 ld [$FF60], a
7 ld [$FF61], a
8 ld [$FF62], a
9
10 ld a, $50 ; Clear SR
11 ld [$FF65], a
12
13 call unlock+$D800
14 xor a
15 ld d, a
16 ld e, a
17 call erase+$D800
18
19 xor a
20 ld d, a
21 ld e, a
22
23loop: ld a, $04
24 cp d
25 jr z,done
26
27 xor a
28 ld c, a ; Count
29
30ifl: call program+$D800
31 xor a
32 cp c
33 jr nz, ifl
34ifldone:
35
36 ld a, $70
37 ld [$FF65], a
38 ld a, [$FF65] ; Load from the status register
39 call puthex+$D800
40
41; ld a, $2E ;.
42; call putc+$D800
43
44 inc de
45 jr loop
46done:
47 rst $00
48
49putc:
50 push af
51.wport:
52 ld a,[$FF53]
53 and $01
54 jr nz,.wport
55 pop af
56 ld [$FF52],a
57 ret
58
59puthex:
60 push hl
61 ld hl, hexdig+$D800
62 push hl
63 push af
64 swap a
65 and $0F
66 add l
67 ld l, a
68 ld a, [hl]
69 call putc+$D800
70 pop af
71 and $0F
72 pop hl
73 add l
74 ld l, a
75 ld a, [hl]
76 pop hl
77 jr putc
78
79hexdig:
80 db "0123456789ABCDEF"
81
82unlock:
83 ld a, $55
84 call putc+$D800
85 ld a, $60 ; Unlock the device
86 ld [$FF65], a
87 ld a, $D0
88 ld [$FF65], a
89 call waitrdy+$D800
90 ld a, [$FF65]
91 call puthex+$D800
92 ret
93
94erase:
95 ld a, $45
96 call putc+$D800
97 ld a, d
98 ld [$FF60], a
99 ld a, e
100 ld [$FF61], a
101 xor a
102 ld [$FF62], a
103 ld a, $20 ; Unlock the device
104 ld [$FF65], a
105 ld a, $D0
106 ld [$FF65], a
107 call waitrdy+$D800
108 ld a, [$FF65]
109 call puthex+$D800
110 ret
111
112; need to save d, e, and c
113program:
114 ld a, d
115 ld [$FF60], a
116 ld a, e
117 ld [$FF61], a
118 ld a, c
119 ld [$FF62], a
120 ld a, $40
121 ld [$FF65], a
122 ld a, d
123 ld [$FF60], a
124 ld a, e
125 ld [$FF61], a
126 ld a, c
127 ld [$FF62], a
128 ld a, [$FF63]
129 ld b, a
130 ld a, d
131 ld [$FF60], a
132 ld a, e
133 ld [$FF61], a
134 ld a, c
135 ld [$FF62], a
136 ld a, b
137 ld [$FF65], a
138 call waitrdy+$D800
139 inc c
140 ret
141
142waitrdy:
143 ld a, $70 ; Wait status register.
144 ld [$FF65], a
145.wrl: ld a, [$FF65] ; Wait for bit 7 to come back on again.
146 bit 7,a
147 jr z, .wrl
148 ret
149
150 section "a", HOME[$FF]
151 nop
This page took 0.030245 seconds and 4 git commands to generate.