Que tal foreros!. Hoy quiero presentarle mi proyecto, se trata de ingenieria inversa en una placa madre de una fotocopiadora (no pude encontrar cual).
A pesar que mi campo son los PICs, esto es una novedad para mi, y es muy interesante.
Imagenes de la placa:

Previo a todo esfuerzo, busque informacion acerca de los integrados:
* Procesador Hitachi HD63B03 (ejecuta el set completo del Motorola 6803, y tiene algunos agregados), XT 8MHz
* EEPROM Hitachi HN27256 (32 KB, con ventana)
* RAM Hitachi HM6116 (16 KB SRAM)
* NVRAM Seiko S2210R (64 x 4 bits)
* PIAs Mitsubishi 82C55A (3 puertos x 8 bits)
Una vez finalizado el analisis de todo, me encontre con que era viable dedicarle un tiempito a esto. En especial porque tiene 5 PIAs, lo cual nos da una hipotetica cantidad de 120 pines a controlar.
Primero, estuve toda una tarde haciendo el mapa de memoria, el cual no esta completo, pero me sirve para lo que pienso usar:
| Start | End | Periferico |
| 0000h | 07FFh | RAM |
| 0800h | 0FFFh | ??? |
| 1000h | 103Fh | NVRAM |
| 2000h | - | PIA 4C PORTA (I/O) |
| 2001h | - | PIA 4C PORTB (I/O) |
| 2002h | - | PIA 4C PORTC (I/O) |
| 2003h | - | PIA 4C CONTROL (DDR) |
| 2004h | 2FFFh | MIRROR PIA 4C |
| 3000h | - | PIA 4B PORTA (I/O) |
| 3001h | - | PIA 4B PORTB (I/O) |
| 3002h | - | PIA 4B PORTC (I/O) |
| 3003h | - | PIA 4B CONTROL (DDR) |
| 3004h | 3FFFh | MIRROR PIA 4B |
| 4000h | - | PIA 4D PORTA (I/O) |
| 4001h | - | PIA 4D PORTB (I/O) |
| 4002h | - | PIA 4D PORTC (I/O) |
| 4003h | - | PIA 4D CONTROL (DDR) |
| 4004h | 4FFFh | MIRROR PIA 4D |
| 5000h | - | PIA 4F PORTA (I/O) |
| 5001h | - | PIA 4F PORTB (I/O) |
| 5002h | - | PIA 4F PORTC (I/O) |
| 5003h | - | PIA 4F CONTROL (DDR) |
| 5004h | 5FFFh | MIRROR PIA 4F |
| 6000h | - | PIA 4E PORTA (I/O) |
| 6001h | - | PIA 4E PORTB (I/O) |
| 6002h | - | PIA 4E PORTC (I/O) |
| 6003h | - | PIA 4E CONTROL (DDR) |
| 6004h | 6FFFh | MIRROR PIA 4E |
| 7000h | 7FFFh | ??? |
| 8000h | 8FFFh | ROM |
Luego, trate de leer la EEPROM para corroborar si en la posicion 0xFFFE y 0xFFFF estaba cargado la direccion del vector reset (tal cual como indica el Datasheet).
Para eso, me fui a mi escuela, y conecte la placa con un analizador logico.

Evidentemente, cuando el micro pide 0xFFFE y 0xFFFF, se lee 0x80 y 0x00 respectivamente, lo cual genera la posicion en memoria 0x8000, coincidente con el principio de la ROM en mi mapa de memoria.

Ahora, procedo a buscar un buen compilador de assembly para el HD6303. En el pdf se hacia mencion hasta un compilador en C, pero no lo encontre. Por lo tanto, termine usando el
DASM.
Cree un fuente en assembly, una especie de "definicion" para el HD6303, y un helper del mapa de memoria.
aca esta el test1.asm:
processor hd6303
include memory_map.asm
include processor.asm
; --------------------------------------------------------------------------
; Main
; --------------------------------------------------------------------------
org MEM_MAP_ROM_BOTTOM
main:
; preload the data in the PIA 4C ports
ldaa #$AA
staa MEM_MAP_PIA_4C_PORTA
staa MEM_MAP_PIA_4B_PORTB
staa MEM_MAP_PIA_4D_PORTA
staa MEM_MAP_PIA_4F_PORTB
staa MEM_MAP_PIA_4E_PORTA
ldaa #$55
staa MEM_MAP_PIA_4C_PORTB
staa MEM_MAP_PIA_4B_PORTA
staa MEM_MAP_PIA_4D_PORTB
staa MEM_MAP_PIA_4F_PORTA
staa MEM_MAP_PIA_4E_PORTB
; setup PIA 4C with all outputs
ldaa #$80
staa MEM_MAP_PIA_4C_CONTROL
staa MEM_MAP_PIA_4B_CONTROL
staa MEM_MAP_PIA_4D_CONTROL
staa MEM_MAP_PIA_4F_CONTROL
staa MEM_MAP_PIA_4E_CONTROL
jmp . ; endless loop
el memory_map.asm:
; --------------------------------------------------------------------------
; memory map for board
; --------------------------------------------------------------------------
; RAM address
MEM_MAP_RAM_BOTTOM EQU $0000
MEM_MAP_RAM_TOP EQU $07FF
; ROM address
MEM_MAP_ROM_BOTTOM EQU $8000
MEM_MAP_ROM_TOP EQU $FFFF
; PIA 4C
MEM_MAP_PIA_4C_PORTA EQU $2000
MEM_MAP_PIA_4C_PORTB EQU $2001
MEM_MAP_PIA_4C_PORTC EQU $2002
MEM_MAP_PIA_4C_CONTROL EQU $2003
; PIA 4B
MEM_MAP_PIA_4B_PORTA EQU $3000
MEM_MAP_PIA_4B_PORTB EQU $3001
MEM_MAP_PIA_4B_PORTC EQU $3002
MEM_MAP_PIA_4B_CONTROL EQU $3003
; PIA 4D
MEM_MAP_PIA_4D_PORTA EQU $4000
MEM_MAP_PIA_4D_PORTB EQU $4001
MEM_MAP_PIA_4D_PORTC EQU $4002
MEM_MAP_PIA_4D_CONTROL EQU $4003
; PIA 4F
MEM_MAP_PIA_4F_PORTA EQU $5000
MEM_MAP_PIA_4F_PORTB EQU $5001
MEM_MAP_PIA_4F_PORTC EQU $5002
MEM_MAP_PIA_4F_CONTROL EQU $5003
; PIA 4E
MEM_MAP_PIA_4E_PORTA EQU $6000
MEM_MAP_PIA_4E_PORTB EQU $6001
MEM_MAP_PIA_4E_PORTC EQU $6002
MEM_MAP_PIA_4E_CONTROL EQU $6003
y por ultimo el processor.asm:
; --------------------------------------------------------------------------
; HD6303 support
; --------------------------------------------------------------------------
; Interrupt vectors
HD6303_INT_RES EQU $FFFE
HD6303_INT_TRAP EQU $FFEE
HD6303_INT_NMI EQU $FFFC
HD6303_INT_SWI EQU $FFFA
HD6303_INT_IRQ1 EQU $FFF8
HD6303_INT_ICI EQU $FFF6
HD6303_INT_OCI EQU $FFF4
HD6303_INT_TOI EQU $FFF2
HD6303_INT_CMI EQU $FFEC
HD6303_INT_IRQ2 EQU $FFEA
HD6303_INT_SIO EQU $FFF0
; Ports (0 in DDR is input, 1 in DDR is output)
HD6303_PORT2_DDR EQU $0001
HD6303_PORT2_DATA EQU $0003
;HD6303_PORT5_DDR EQU $0001
HD6303_PORT5_DATA EQU $0015
HD6303_PORT6_DDR EQU $0016
HD6303_PORT6_DATA EQU $0017
; RAM Control
HD6303_RAM_CONTROL EQU $0014
; Timer 1
TCSR1 EQU $0008
FRC EQU $0009
OCR EQU $0019
; Timer 2
T2CNT EQU $001D
TCONR EQU $001C
TCSR3 EQU $001B
Luego, hice un grabador de memorias FLASH, con un PIC 18F4550 (conectado por usb).
Dado que la memoria flash que use, es de 2MBit, pude conectar "todos los pines" directamente al pic, sin necesidad de usar multiplexores.
El codigo es muy simple, y lo fui haciendo mientras leia el datasheet de la memoria.
Al compilar el archivo assembly que copie arriba, lo grabe en la direccion 0 de la Flash. Luego, en la direccion 0xFFFE y 0xFFFF grabe 2 bytes (0x80 y 0x00 respectivamente), asi el micro salta a la direccion 0x0000 de la Flash (esto es por el mapa de memoria).
Volvi a la escuela, y probe de nuevo con el analizador logico:

Para mi sorpresa, funciono PERFECTO!
Ahora lo que quiero hacer, es encontrar la forma en que la placa reiniciaba "de forma normal" al micro, ya que no la pude encontrar, y hasta ahora lo estoy haciendo "mal" tirando un cable a Vcc.
Ademas, quisiera saber si alguno de ustedes conoce algun compilador de C para el Motorola 6800, o bien, algunos ejemplos en ASM para controlar PIAs, LCD alfanumerico (basados en HD48750), etc.
Espero que les haya gustado el proyecto. Ire actualizando cualquier novedad!
Saludos!!!