Total, que puse la dirección 0 a desensamblar, y empecé a ver las primeras líneas de la ROM que todos conocemos:
Código: Seleccionar todo
di
xor a
ld de, $ffff
etc
Como la espera parecía que se iba a hacer larga, seguí mirando ese desensamblado. Entonces, vi un ld (hl), 2 y que eso se repetía para toda la RAM, ¡¡ incluida la vídeo RAM !! Y todos sabemos que el 2 en la vídeo RAM son una serie de líneas verticales de color rojo.
¡¡ Ostras !! Había descubierto sin querer el por qué se ven líneas rojas verticales al arrancar el ordenador. ¡¡ Qué guay !!
Pues nada, hoy he copiado esa rutina a la RAM, y le he añadido unas pausas al bucle para ver cómo se va pintando lentamente, y el resultado es éste:
Código: Seleccionar todo
org 60000
xor a
ld de, $5aff
ld b, a
ld a, 7
out ($fe), a
ld a, $3f
ld i, a
defb 0, 0, 0
defb 0, 0, 0
ld h, d
ld l, e
RAM_FILL
ld (hl), 2
call PAUSA
dec hl
cp h
jr nz, RAM_FILL
RAM_READ
and a
sbc hl, de
add hl, de
inc hl
jr nc, RAM_DONE
dec (hl)
call PAUSA
jr z, RAM_DONE
dec (hl)
call PAUSA
jr z, RAM_READ
RAM_DONE
ret
PAUSA
ld bc, $100
push af
MAS_PAUSA
dec bc
ld a, b
or c
jr nz, MAS_PAUSA
pop af
ret
Veréis cómo arranca el ordenador a cámara lenta. Al final, la pantalla que se forma es ésta:
que se vuelve a borrar, quedando la pantalla en negro y el borde en blanco. Posteriormente la pantalla se vuelve blanca y sale el mensaje de todos conocidos: (c) Sinclair Research Ltd. Esto del mensaje no lo tengo todavía preparado, pero caerá también.
Esta rutina es realmente un chequeo de la RAM. Se graba en toda la RAM el valor 2, luego se decrementa 2 veces dejando toda la RAM por tanto con valor 0.
Bueno, si queréis probar el arranque a cámara lenta, ensamblar el código anterior y ejecutarlo desde el BASIC con RANDOMIZE USR 60000