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 | ; ---------------------------------------------------------------------------
|
---|
11 | NUM_ROM EQU 6 ; 16
|
---|
12 |
|
---|
13 | include 'firmware.i'
|
---|
14 | include 'hardware.i'
|
---|
15 |
|
---|
16 | ORG $4000
|
---|
17 | inicio
|
---|
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 ; Nº 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 ; Nº 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 : Nº de ROM (0 - 31)
|
---|
69 | ; HL : Puntero a los 16 KBs de la ROM
|
---|
70 | ; ---------------------------------------------------------------------------
|
---|
71 | write_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 : Nº 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 | ; ---------------------------------------------------------------------------
|
---|
113 | test_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 | ; ---------------------------------------------------------------------------
|
---|
149 | espera_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 | ; ---------------------------------------------------------------------------
|
---|
168 | rom_data
|
---|
169 | ; incbin 'qcmd.rom'
|
---|
170 | incbin 'parados.rom'
|
---|
171 |
|
---|
172 | ; ---------------------------------------------------------------------------
|
---|
173 | END
|
---|