source: avrstuff/CPC stuff/gordon/manager/flashrom.s@ 7dcccbc

main
Last change on this file since 7dcccbc was 7dcccbc, checked in by Adrien Destugues <pulkomandy@…>, 12 years ago

Add WIP code for the manager (and ROM testing)

git-svn-id: svn://pulkomandy.tk/avrstuff@78 c6672c3c-f6b6-47f9-9001-1fd6b12fecbe

  • Property mode set to 100644
File size: 5.0 KB
Line 
1; ---------------------------------------------------------------------------
2; Mini-Rom Install for MegaFlash (c) SyX 2011
3;
4; Based in the example sourcecode post in CPCWiki by
5; (C) Dr. Stefan W. Stumpferl
6; (Cr) TFM of FutureSoft 2011
7;
8; This routine can be used for foreign programs,
9; but this remark must be left as it is.
10; ---------------------------------------------------------------------------
11NUM_ROM EQU 6 ; 16
12
13 include 'firmware.i'
14 include 'hardware.i'
15
16 ORG $4000
17inicio
18 ; 1 .- Indicamos que se ponga el MegaFlash en modo de escritura y se pulse una tecla
19 ; Ponemos el border Negro
20 LD BC,0 * 256 + 0
21 CALL SCR_SET_BORDER
22
23 CALL espera_tecla
24
25 ; Ponemos el border Blanco
26 LD BC,16 * 256 + 16
27 CALL SCR_SET_BORDER
28
29 ; Esperamos al refresco
30 CALL MC_WAIT_FLYBACK
31 HALT
32
33 ; 2.- Escribimos la ROM en el MegaFlash
34 LD A,NUM_ROM ; de ROM en el MegaFlash
35 LD HL,rom_data ; Puntero a los datos de la ROM
36 CALL write_rom
37
38 ; 3.- Indicamos que la ROM fue escrita, la comprobamos e indicamos el resultado de la comprobación
39 ; Ponemos el border Blanco
40 LD BC,26 * 256 + 26
41 CALL SCR_SET_BORDER
42
43 CALL espera_tecla
44
45 ; 4.- Indicamos que se ponga el MegaFlash en modo lectura y esperamos a una tecla antes de reiniciar.
46 LD A,NUM_ROM ; de ROM en el MegaFlash
47 LD HL,rom_data ; Puntero a los datos de la ROM
48 CALL test_rom
49 JR C,.error_test
50 ; Ponemos el border Verde
51 LD BC,18 * 256 + 18
52 CALL SCR_SET_BORDER
53 JR .exit
54.error_test
55 ; Ponemos el border Rojo
56 LD BC,6 * 256 + 6
57 CALL SCR_SET_BORDER
58.exit
59 CALL espera_tecla
60
61 ; Despaginamos el MegaFlash
62 CALL $0000
63
64; ---------------------------------------------------------------------------
65; Copiamos una ROM de 16 KBs al MegaFlash
66;
67; Entradas:
68; A : de ROM (0 - 31)
69; HL : Puntero a los 16 KBs de la ROM
70; ---------------------------------------------------------------------------
71write_rom
72 DI ; Desactivamos las interrupciones
73
74 LD B,>UPPER_ROM_SELECT
75 OUT (C),A ; Seleccionamos la ROM del MegaFlash que vamos a escribir
76
77 LD BC,GATE_ARRAY + MODE_Y_ROM + LOWER_OFF + UPPER_ON + MODE_2
78 OUT (C),C
79
80 LD DE,RAM_P3 ; Dirección de destino es $C000
81
82.copy_256_bytes
83 LD BC,$0100
84 LDIR ; Copiamos 256 bytes de RAM al MegaFlash (buffer MegaFlash)
85
86 LD C,$20 ; El MegaFlash necesita tiempo para borrar y escribir
87.espera_32_ms ; >>> 32 * 256 Loops * 4 ys = 32 ms
88 DJNZ .espera_32_ms
89 DEC C
90 JR NZ,.espera_32_ms
91
92 ; Comprobamos que se hayan copiado los 16KBs de la ROM
93 LD A,D
94 OR E
95 JR NZ,.copy_256_bytes ; En caso contrario copiamos el siguiente bloque de 256 bytes
96
97 LD BC,UPPER_ROM_SELECT ; Seleccionamos la ROM del Basic
98 OUT (C),C
99
100 EI ; Reactivamos las interrupciones
101
102 RET
103
104; ---------------------------------------------------------------------------
105; Comprobamos que la ROM se escribió correctamente en el MegaFlash
106;
107; Entradas:
108; A : de ROM (0 - 31)
109; HL : Puntero a los 16 KBs de la ROM
110; Salidas:
111; Carry flag activo en caso de Error
112; ---------------------------------------------------------------------------
113test_rom
114 DI ; Desactivamos las interrupciones
115
116 LD B,>UPPER_ROM_SELECT
117 OUT (C),A ; Seleccionamos la ROM del MegaFlash que vamos a comprobar
118
119 LD BC,GATE_ARRAY + MODE_Y_ROM + LOWER_OFF + UPPER_ON + MODE_2
120 OUT (C),C
121
122 LD DE,RAM_P3 ; Dirección de origen de la ROM
123.bucle_de_comprobacion
124 LD A,(DE)
125 CP (HL)
126 JR NZ,.error_comprobacion
127 INC HL
128 INC DE
129 LD A,D
130 OR E
131 JR NZ,.bucle_de_comprobacion
132
133 LD BC,UPPER_ROM_SELECT ; Seleccionamos la ROM del Basic
134 OUT (C),C
135 EI ; Reactivamos las interrupciones
136
137 XOR A
138 RET
139
140.error_comprobacion
141 LD BC,UPPER_ROM_SELECT ; Seleccionamos la ROM del Basic
142 OUT (C),C
143 EI ; Reactivamos las interrupciones
144
145 SCF
146 RET
147
148; ---------------------------------------------------------------------------
149espera_tecla
150 ; Reiniciamos el Key Manager
151 CALL KM_RESET
152
153 ; Esperamos a que no haya ninguna tecla pulsada
154.bucle_espera_tecla
155 CALL KM_READ_KEY
156 JR C,.bucle_espera_tecla
157
158 ; Esperamos al refresco
159 CALL MC_WAIT_FLYBACK
160 HALT
161
162 ; Esperamos a que se pulse una tecla
163 CALL KM_WAIT_KEY
164
165 RET
166
167; ---------------------------------------------------------------------------
168rom_data
169; incbin 'qcmd.rom'
170 incbin 'parados.rom'
171
172; ---------------------------------------------------------------------------
173 END
Note: See TracBrowser for help on using the repository browser.