Página principal

Viejos montajes - Boot loader Z80


Abriendo un cajón me he encontrado con un viejo montaje que hice en el siglo pasado, sobre 1989. Era la época del Z80, era el micro que llevaba el spectrum, MSX1 y algún otro modelo, fue el rey de los 80. Yo tenía un spectrum donde hacía montajes, controladores PIO, grabadores de EPROM y otros muchos.
Un día me animé  hacer una placa donde incorporaba un Z80,un  Z80PIO, dos memorias  2114 que en total sumaban 1K, y una EPROM 2716 de 2K. Era una placa para hacer unas practicas de programación del Z80. Mi primera práctica era la mas clásica de todas, hacer parpadear un LED colocado en el PIOZ80.

Los pasos para pasar los programas a la EPROM eran los siguientes:
-Realizaba el programa ensamblador en el spectrum.
-Programaba la EPROM en el spectrum mediante un programador casero que me hice.
-Lo quitabas del programador y lo insertaba en la placa.
-Si con suerte te funcionaba bien.
-Pero si no te funcionaba tenías quitar la EPROM de la placa, borrarla mediante una lampara ultravioleta  y volver al primer paso.

Como podéis imaginar se tardaba muchísimo, era todo tedioso.
A la cuarta vez de hacer lo mismo, se te quitaba las ganas de hacer mas prácticas.
Pensando una forma mas fácil de trabajar, llegue a la conclusión, que grabar los programas que querías ejecutar en la EPROM era un atraso. Lo mas fácil era ejecutarlos en la RAM. ¿Pero como poner los programas a ejecutar en la RAM?. Encontré la solución, hacer un programa cargador en la EPROM y que pusiese el programa en la RAM y lo ejecutase. El programa en la EPROM era fijo, no debería volver a tocar la EPROM servía para todos los programas que hiciera.
Retoque un código de un programa que emulaba RS232  y lo adapte al PIOZ80. Era de una revista llamada Micromanía, muchos montajes para el spectrum los saque de allí.
Por aquel entonces tenía un PC con monitor verde. Entre los programas que tenía, había un programa ensamblador cruzado para el Z80. Este lo utilice para crear el fichero binario, y mediante la conexión serie lo mandaba a la placa que lo ejecutaba. Era muy fácil hacer prácticas y los resultados eran casi inmediatos.
Como veréis en el montaje, no existe adaptador RS232 a la entrada PIOZ80, el caso es que en el caso de aquel PC con monitor verde funcionaba sin problemas, cosa que con otros ordenadores no llegó a funcionar.

Imagen del circuito.


Pulsa en el esquema para ampliar.


CODIGO FUENTE DE LA PLACA Z80

CARGA PROGRAMAS DEL RS232-1200BAUDIOS A LA POSICION 8000 Y LO EJECUTA.

0379 3E00                             ld      a, 0                            

037B D33F                             out     (3Fh), a                        

037D D32F                             out     (2Fh), a                        

037F 3EFF                             ld      a, 0FFh ; <void>                

0381 D37F                             out     (7Fh), a                        

0383 3EFE                             ld      a, 0FEh ; '_' ; <void>          

0385 D37F                             out     (7Fh), a                        

0387 3EFF                             ld      a, 0FFh ; <void>                

0389 D36F                             out     (6Fh), a                        

038B 3E00                             ld      a, 0                            

038D D36F                             out     (6Fh), a                        

038F 210080                           ld      hl, 8000h                       

0392 110004                           ld      de, 400h ; <void>               

0395 F3                               di                                     

0396                  loc_0_396: ; <void>                                     

0396                                                          ; CODE XREF: 03C

0396 0E3F                             ld      c, 3Fh ; '?' ; <void>           

0398 0601                             ld      b, 1                            

039A ED41                             out     (c), b                          

039C                  loc_0_39C:

039C                                                          ; CODE XREF: 03A

039C ED78                             in      a, (c)

039E FE03                             cp      3

03A0 20FA                             jr      nz, loc_0_39C

03A2 3E06                             ld      a, 6

03A4                  loc_0_3A4:

03A4                                                          ; CODE XREF: 03A

03A4 3D                               dec     a

03A5 20FD                             jr      nz, loc_0_3A4

03A7 3E00                             ld      a, 0

03A9 ED79                             out     (c), a

03AB 0680                             ld      b, 80h ; 'Ç' ; <void>

03AD                  loc_0_3AD:

03AD                                                          ; CODE XREF: 03B

03AD 3E16                             ld      a, 16h

03AF                  loc_0_3AF:

03AF                                                          ; CODE XREF:

03AF 3D                               dec     a

03B0 20FD                             jr      nz, loc_0_3AF

03B2 ED78                             in      a, (c)

03B4 1F                               rra

03B5 1F                               rra

03B6 CB18                             rr      b

03B8 30F3                             jr      nc, loc_0_3AD

03BA 3E14                             ld      a, 14h

03BC                  loc_0_3BC:

03BC                                                          ; CODE XREF:

03BC 3D                               dec     a

03BD 20FD                             jr      nz, loc_0_3BC

03BF 3EFF                             ld      a, 0FFh ; <void>

03C1 90                               sub     b

03C2 D32F                             out     (2Fh), a

03C4 77                               ld      (hl), a

03C5 23                               inc     hl

03C6 1B                               dec     de

03C7 7A                               ld      a, d

03C8 B3                               or      e

03C9 20CB                             jr      nz, loc_0_396

03CB FB                               ei

03CC 00                               nop

03CD C30080                           jp      unk_0_7CF+7831h

Programa Boot loader grabado en la EPROM

Un saludo.
SETA43