Autor Tema: Ingenieria inversa en placa de Fotocopiadora  (Leído 4940 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado cocus

  • PIC10
  • *
  • Mensajes: 9
Ingenieria inversa en placa de Fotocopiadora
« en: 04 de Noviembre de 2012, 17:20:42 »
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:
StartEndPeriferico
0000h07FFhRAM
0800h0FFFh???
1000h103FhNVRAM
2000h-PIA 4C PORTA (I/O)
2001h-PIA 4C PORTB (I/O)
2002h-PIA 4C PORTC (I/O)
2003h-PIA 4C CONTROL (DDR)
2004h2FFFhMIRROR 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)
3004h3FFFhMIRROR 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)
4004h4FFFhMIRROR 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)
5004h5FFFhMIRROR 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)
6004h6FFFhMIRROR PIA 4E
7000h7FFFh???
8000h8FFFhROM

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:
Código: ASM
  1. processor   hd6303
  2.         include memory_map.asm
  3.         include processor.asm
  4.        
  5.         ; --------------------------------------------------------------------------
  6.         ;  Main
  7.         ; --------------------------------------------------------------------------
  8.        
  9.         org MEM_MAP_ROM_BOTTOM
  10. main:
  11.        
  12.         ; preload the data in the PIA 4C ports
  13.         ldaa #$AA
  14.         staa MEM_MAP_PIA_4C_PORTA
  15.         staa MEM_MAP_PIA_4B_PORTB
  16.         staa MEM_MAP_PIA_4D_PORTA
  17.         staa MEM_MAP_PIA_4F_PORTB
  18.         staa MEM_MAP_PIA_4E_PORTA
  19.        
  20.         ldaa #$55
  21.         staa MEM_MAP_PIA_4C_PORTB
  22.         staa MEM_MAP_PIA_4B_PORTA
  23.         staa MEM_MAP_PIA_4D_PORTB
  24.         staa MEM_MAP_PIA_4F_PORTA
  25.         staa MEM_MAP_PIA_4E_PORTB
  26.  
  27.        
  28.         ; setup PIA 4C with all outputs
  29.         ldaa #$80
  30.         staa MEM_MAP_PIA_4C_CONTROL
  31.         staa MEM_MAP_PIA_4B_CONTROL
  32.         staa MEM_MAP_PIA_4D_CONTROL
  33.         staa MEM_MAP_PIA_4F_CONTROL
  34.         staa MEM_MAP_PIA_4E_CONTROL
  35.  
  36.        
  37.         jmp .                           ; endless loop
el memory_map.asm:
Código: ASM
  1. ; --------------------------------------------------------------------------
  2. ;  memory map for board
  3. ; --------------------------------------------------------------------------
  4.  
  5. ; RAM address
  6. MEM_MAP_RAM_BOTTOM                      EQU $0000
  7. MEM_MAP_RAM_TOP                         EQU $07FF
  8.  
  9. ; ROM address
  10. MEM_MAP_ROM_BOTTOM                      EQU $8000
  11. MEM_MAP_ROM_TOP                         EQU $FFFF
  12.  
  13. ; PIA 4C
  14. MEM_MAP_PIA_4C_PORTA            EQU $2000
  15. MEM_MAP_PIA_4C_PORTB            EQU $2001
  16. MEM_MAP_PIA_4C_PORTC            EQU $2002
  17. MEM_MAP_PIA_4C_CONTROL          EQU $2003
  18.  
  19. ; PIA 4B
  20. MEM_MAP_PIA_4B_PORTA            EQU $3000
  21. MEM_MAP_PIA_4B_PORTB            EQU $3001
  22. MEM_MAP_PIA_4B_PORTC            EQU $3002
  23. MEM_MAP_PIA_4B_CONTROL          EQU $3003
  24.  
  25. ; PIA 4D
  26. MEM_MAP_PIA_4D_PORTA            EQU $4000
  27. MEM_MAP_PIA_4D_PORTB            EQU $4001
  28. MEM_MAP_PIA_4D_PORTC            EQU $4002
  29. MEM_MAP_PIA_4D_CONTROL          EQU $4003
  30.  
  31. ; PIA 4F
  32. MEM_MAP_PIA_4F_PORTA            EQU $5000
  33. MEM_MAP_PIA_4F_PORTB            EQU $5001
  34. MEM_MAP_PIA_4F_PORTC            EQU $5002
  35. MEM_MAP_PIA_4F_CONTROL          EQU $5003
  36.  
  37. ; PIA 4E
  38. MEM_MAP_PIA_4E_PORTA            EQU $6000
  39. MEM_MAP_PIA_4E_PORTB            EQU $6001
  40. MEM_MAP_PIA_4E_PORTC            EQU $6002
  41. MEM_MAP_PIA_4E_CONTROL          EQU $6003

y por ultimo el processor.asm:
Código: ASM
  1. ; --------------------------------------------------------------------------
  2. ;  HD6303 support
  3. ; --------------------------------------------------------------------------
  4.  
  5. ; Interrupt vectors
  6. HD6303_INT_RES          EQU $FFFE
  7. HD6303_INT_TRAP         EQU $FFEE
  8. HD6303_INT_NMI          EQU $FFFC
  9. HD6303_INT_SWI          EQU $FFFA
  10. HD6303_INT_IRQ1         EQU $FFF8
  11. HD6303_INT_ICI          EQU $FFF6
  12. HD6303_INT_OCI          EQU $FFF4
  13. HD6303_INT_TOI          EQU $FFF2
  14. HD6303_INT_CMI          EQU $FFEC
  15. HD6303_INT_IRQ2         EQU $FFEA
  16. HD6303_INT_SIO          EQU $FFF0
  17.  
  18. ; Ports (0 in DDR is input, 1 in DDR is output)
  19. HD6303_PORT2_DDR        EQU $0001
  20. HD6303_PORT2_DATA       EQU $0003
  21. ;HD6303_PORT5_DDR       EQU $0001
  22. HD6303_PORT5_DATA       EQU $0015
  23. HD6303_PORT6_DDR        EQU $0016
  24. HD6303_PORT6_DATA       EQU $0017
  25.  
  26. ; RAM Control
  27. HD6303_RAM_CONTROL      EQU $0014
  28.  
  29. ; Timer 1
  30. TCSR1                           EQU $0008
  31. FRC                                     EQU $0009
  32. OCR                                     EQU $0019
  33.  
  34. ; Timer 2
  35. T2CNT                           EQU $001D
  36. TCONR                           EQU $001C
  37. 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!!!
« Última modificación: 04 de Noviembre de 2012, 17:23:09 por cocus »

Desconectado MENSAJERO324

  • PIC10
  • *
  • Mensajes: 2
Re: Ingenieria inversa en placa de Fotocopiadora
« Respuesta #1 en: 08 de Noviembre de 2012, 23:08:37 »
soy un principiante en pic y me parece tenaz lo que haces ,  espero algun dia mejorar lo que haces , aunque no entendí nada  :shock: :mrgreen: :-/ :D ((:-)) ((:-)) ((:-)) ((:-)) ((:-)) ((:-)) ((:-)) ((:-)) ((:-)) ((:-)) ((:-)) ((:-)) ((:-))

Desconectado hector915

  • PIC12
  • **
  • Mensajes: 78
    • Blog Personal.
Re: Ingenieria inversa en placa de Fotocopiadora
« Respuesta #2 en: 05 de Abril de 2013, 20:04:31 »
Saludos ,me gustaria saber si tienes documentos sobre ingenieria inversa en circuitos y prototipos electronicos hasta ahora solo eh visto el material de Joe Grand dado en las vegas,por favor si tuvieras material te lo agradeceria,Especialmente metodologias para hacer un buen reversing.

Gracias por su atencion. :lol: 8)
if you can imagine it, you can embed it