• Domingo 28 de Abril de 2024, 23:35

Autor Tema:  Mejorar el Mod8 para PS2  (Leído 1159 veces)

Meta

  • Miembro MUY activo
  • ***
  • Mensajes: 140
    • Ver Perfil
Mejorar el Mod8 para PS2
« en: Domingo 13 de Julio de 2008, 02:34 »
0
Hola.

Me gustaría contactar con el que documentó este ASM del PIC12C508 si tiene un diagrama de flujo para entenderlo mejor. Ya que utiliza retardos y para verlo en el MPLAB es un tostón. Su e-mail abajo no funciona.


Código: Text
  1. ;+-------------------------------------------------------------------------+
  2. ;¦ MYC.ASM ¦ DESENSAMBLADO DE 8MODCHIP.HEX PARA PSX2 POR MANOLO Y COMPAÑIA ¦
  3. ;+-------------------------------------------------------------------------+
  4.  
  5. ;  NOTA:
  6. ;* Para visualizar este fichero correctamente, usa el edit del dos
  7. ;  o el bloc de notas del windows con el tipo de fuente 'terminal'
  8. ;* El objeto de realizar el desensamblado y comentado del código fuente,
  9. ;  del 8modchip.hex es con el fin de que todos conozcamos como funciona
  10. ;  y podamos perfeccionarlo y modificarlo entre todos a nuestro antojo.
  11. ;* Espero que al publicarlo en el foro, las mentes pensantes colaboren.
  12. ;* Desconozco quien es el autor del hex original pero le felicito por su
  13. ;  programa.
  14. ;* Según aparezcan nuevas versiones del modchip se irán desensamblando
  15. ;  y publicando.
  16. ;* Por favor poner vuestras experiencias en el foro para que lo vea todo
  17. ;  el mundo.
  18. ;* los tiempos de las rutinas son muy críticos.
  19. ;* El codigo está más ordenado que en el 8modchip.hex pero es el mismo
  20. ;  únicamete se han suprimido los caracteres de la tabla que no se usan
  21. ;  para la versión europea.
  22. ;* Sugerencias de assembler o hard: jiglesias@arrakis.es
  23. ;--------------------------------------------------------------------------
  24.  
  25. ;                   +----------------------------------+
  26. ;                   ¦ ESQUEMA DE CONEXIONES PIC12C509A ¦
  27. ;                   +----------------------------------+
  28. ;
  29. ;                            +------+  +------+
  30. ;                            ¦      +--+      ¦
  31. ;                       +5V ¦¦1  PIC12C509A  8¦¦ MASA
  32. ;                            ¦                ¦
  33. ;                     SWAPX ¦¦2 GPIO5  GPIO0 7¦¦ DVDIN=0                      
  34. ;                            ¦                ¦
  35. ;                  DVDOUT=1 ¦¦3 GPIO4  GPIO1 6¦¦ TXSCEE    
  36. ;                            ¦                ¦
  37. ;                  /RESET=0 ¦¦4 GPIO3  GPIO2 5¦¦ SWAPY    
  38. ;                            ¦                ¦
  39. ;                            +----------------+
  40. ;          
  41. ; 1 - +5VCC  - SIN COMENTARIOS
  42. ; 2 - SWAPX  - SOLO LO USA LA OPCION 3 PARA LA APERTURA Y CIERRE DEL DVD
  43. ; 3 - DVDOUT - ES IGUAL A 1 CUANDO LA BANDEJA DEL DVD ESTA SALIENDO
  44. ; 4 - /RESET - ES IGUAL A 0 CUANDO PULSAMOS EL RESET DE LA PS2
  45. ; 5 - SWAPY  - SOLO LO USA LA OPCION 3 PARA LA APERTURA Y CIERRE DEL DVD
  46. ; 6 - TXSCEE - ES POR DONDE TRANSMITE VIA SERIE "SCEE"
  47. ; 7 - DVDIN  - ES IGUAL A 0 CUANDO LA BANDEJA DEL DVD ESTA ENTRANDO
  48. ; 8 - MASA   - SIN COMENTARIOS
  49. ;--------------------------------------------------------------------------
  50.  
  51. ;+---------------------------------+
  52. ;¦ PROCESADOR A EMPLEAR PIC12C509A ¦
  53. ;+---------------------------------+
  54. P509A EQU 1          ;0=PIC12C508A 1=PIC12C509A
  55.  IF        P509A
  56.  list      p=12c509A
  57.  include   "p12c509A.inc"
  58.  ELSE
  59.  list      p=12c508A
  60.  include   "p12c508A.inc"
  61.  ENDIF
  62.  
  63. ;+-----------------------------------+
  64. ;¦ FUSIBLES, WASDOG, OSCILADOR ETC.. ¦
  65. ;+-----------------------------------+
  66.  __FUSES _MCLRE_OFF & _CP_OFF & _WDT_OFF & _IntRC_OSC
  67.  
  68. ;+------------------+
  69. ;¦ NOTACION DECIMAL ¦
  70. ;+------------------+
  71.  radix   dec
  72. ;--------------------------------------------------------------------------
  73.  
  74. ;+--------------------------+
  75. ;¦ VARIABLES DE RAM INTERNA ¦
  76. ;+--------------------------+
  77.  cblock 0x0B
  78.         RAM_0B  ;CONTADOR PAUSA
  79.         RAM_0C  ;CONTADOR CARGA DEL DVD
  80.         RAM_0D  ;CONTADOR PAUSA
  81.         RAM_0E  ;CANTIDAD DE BYTES A ENVIAR DE LA TABLA
  82.         RAM_0F  ;CANTIDAD DE BITS A ENVIAR DEL BYTE
  83.         RAM_10  ;NO UTILIZADA
  84.         RAM_11  ;CONTADOR W EN PAUSA Wx199
  85.         RAM_12  ;CONTADOR 199 EN PAUSA Wx199
  86.         RAM_13  ;BYTE LEIDO DE LA TABLA
  87.         RAM_14  ;PUNTERO DEL BYTE DE LA TABLA
  88.         RAM_15  ;MASCARA ESTADO DE LOS BIT DEL PUERTO
  89.  endc
  90. ;--------------------------------------------------------------------------
  91.  
  92. ;+-----------------+
  93. ;¦ VECTOR DE RESET ¦
  94. ;+-----------------+
  95.     org 0x00
  96.         movwf   OSCCAL          ;CALIBRA EL OSCILADOR INTERNO
  97.         goto    COMIENZO        ;SALTA LA COMIENZO DEL PROGRAMA
  98. ;--------------------------------------------------------------------------
  99.  
  100. ;+--------------------------------------+
  101. ;¦ VERSION DEL PROGRAMA (CODIGO INUTIL) ¦
  102. ;+--------------------------------------+
  103.         retlw   'M'
  104.         retlw   'A'
  105.         retlw   'N'
  106.         retlw   'O'
  107.         retlw   'L'
  108.         retlw   'O'
  109.         retlw   ' '
  110.         retlw   'Y'
  111.         retlw   ' '
  112.         retlw   'C'
  113.         retlw   'O'
  114.         retlw   'M'
  115.         retlw   'P'
  116.         retlw   'A'
  117.         retlw   'Ñ'
  118.         retlw   'I'
  119.         retlw   'A'
  120. ;--------------------------------------------------------------------------
  121.  
  122. ;+-----------------------+
  123. ;¦ COMIENZO DEL PROGRAMA ¦
  124. ;+-----------------------+
  125. COMIENZO
  126.         movlw   b'11000010'     ;CONFIGURA TMR0 PRESCALER = 1:8
  127.         option                  ;OSCILADOR = 4MHZ
  128.  
  129.         movlw   255             ;INICIALIZA TODOS LOS PUERTOS
  130.         movwf   RAM_15          ;EN ALTO Y RAM_15
  131.     tris    GPIO        ;
  132. ;--------------------------------------------------------------------------
  133.  
  134. ;+----------------------------------------+
  135. ;¦ PAUSA DE ENCENDIDO DE 414 MILISEGUNDOS ¦
  136. ;+----------------------------------------+
  137.         movlw   2               ;100 MILISEGUNDOS
  138.         movwf   RAM_0D          ;
  139. ETI_107 call    PAUSA50MSG      ;       +
  140.         decfsz  RAM_0D,F        ;
  141.         goto    ETI_107         ;
  142.         movlw   6               ;300 MILISEGUNDOS
  143.         movwf   RAM_0D          ;
  144. ETI_10C call    PAUSA50MSG      ;       +
  145.         decfsz  RAM_0D,F        ;
  146.         goto    ETI_10C         ;
  147.         movlw   14              ;14 MILISEGUNDOS
  148.         call    PAUSAWX1MSG     ;
  149. ;--------------------------------------------------------------------------
  150.  
  151. ;+------------------------------------------------------------------+
  152. ;¦ LECTURA DE LAS 3 OPCIONES CON EL PULSADOR DE RESET DE LA CONSOLA ¦
  153. ;+------------------------------------------------------------------+
  154. ;OPCION1 EL RESET NO HA SIDO PULSADO
  155. ;-----------------------------------
  156.         btfsc   GPIO,3          ;SI EL RESET NO ESTA PULSADO
  157.         goto    OPCION1         ;SALTA A OPCION1
  158.  
  159. ;OPCION2 EL RESET HA SIDO PULSADO Y SE HA SOLTADO ANTES DE 7,5 SEGUNDOS
  160. ;----------------------------------------------------------------------
  161.         movlw   150             ;
  162.         movwf   RAM_0D          ;
  163. ETI_115 btfsc   GPIO,3          ;
  164.         goto    OPCION2         ;SALTA A OPCION2 AL LEVANTAR EL RESET
  165.         call    PAUSA50MSG      ;
  166.         decfsz  RAM_0D,F        ;
  167.         goto    ETI_115         ;
  168.  
  169. ;OPCION3 EL RESET HA SIDO PULSADO Y NO SE HA SOLTADO ANTES DE 7,5 SEGUNDOS
  170. ;-------------------------------------------------------------------------
  171.         goto    OPCION3         ;SI CONTINUA PULSADO SALTA A OPCION3
  172. ;--------------------------------------------------------------------------
  173.  
  174. ;+---------------------------------------------------+
  175. ;¦ OPCION 1 (RESET NO PULSADO) EL MODCHIP SE         ¦
  176. ;¦ DESHABILITA Y SOLO PODEMOS USAR JUEGOS ORIGINALES ¦
  177. ;+---------------------------------------------------+
  178. OPCION1
  179.         movlw   b'00111111'     ;INICIALIZA TODOS LOS
  180.         tris    GPIO            ;PUERTOS EN ALTO Y
  181.         sleep                   ;DESHABILITA EL MODCHIP
  182. ;--------------------------------------------------------------------------
  183.  
  184. ;+------------------------------------------------------------------------+
  185. ;¦ OPCION 2 (RESET PULSADO DESPUES DE 1 SEG. Y SOLTADO ANTES DE 7,5 SEG.) ¦
  186. ;¦ JUEGOS (PSX1 DIRECTOS) Y (PSX2 SIN PROTECCION ANTIMODCHIP CON AR1.3)   ¦
  187. ;+------------------------------------------------------------------------+
  188. OPCION2
  189.         bcf     GPIO,1          ;INICIALIZA PUERTO TXSERIE EN ALTO
  190.         bcf     RAM_15,1        ;
  191.         movf    RAM_15,W        ;
  192.     tris    GPIO        ;
  193.  
  194.         call    PAUSA50MSG      ;PAUSA CADA 100 TRANSMISIONES
  195.  
  196.         movlw   100             ;100 VECES
  197.         movwf   RAM_0C          ;REPETIRA LA TRANSMISION
  198. ETI_122
  199.         btfsc   GPIO,0          ;SI EN ESTOS MOMENTOS LA BANDEJA DEL
  200.         goto    ETI_04C         ;DVD YA ESTA DENTRO TRANSMITE SCEE
  201.  
  202.         clrf    RAM_14          ;INICIALIZA PUNTERO A TABLA Y
  203.         call    ENVIASCEE       ;TRANSMITE VIA SERIE 100 VECES 'SCEE'
  204.         call    SUB_04C         ;LUEGO ESPERARA A QUE METAMOS OTRO JUEGO
  205.         goto    ETI_122         ;ANTES DE VOLVER A TRANSMITIR 100 VECES
  206. SUB_04C
  207. ETI_04C
  208.         btfsc   GPIO,0          ;SI EN ESTOS MOMENTOS LA BANDEJA DEL
  209.         goto    ETI_050         ;DVD AUN NO ESTA DENTRO SALE
  210.         decfsz  RAM_0C,F        ;SI YA ESTA DENTRO RETORNA HASTA
  211.         retlw   3               ;TRANSMITIR LAS 100 VECES 'SCEE'
  212.  
  213. ETI_050 movlw   b'00111111'     ;INICIALIZA TODOS PUERTOS
  214.         tris    GPIO            ;COMO ENTRADAS
  215. ETI_052
  216.         btfss   GPIO,4          ;ESPERA A QUE PULSEMOS LA APERTURA
  217.         goto    ETI_052         ;DE LA BANDEJA DEL DVD
  218.  
  219.         movlw   250             ;ESPERAMOS UN TIEMPO A LA CONSOLA PARA
  220.         call    PAUSAWX1MSG     ;QUE TERMINE DE ABRIR LA BANDEJA DEL DVD
  221.  
  222.         btfss   GPIO,4          ;SI LA BANDEJA DEL DVD TODAVIA NO ESTA
  223.         goto    ETI_052         ;ABRIENDOSE REPITE LA OPERACION
  224.  
  225. ETI_058
  226.         btfsc   GPIO,4          ;SI LA BANDEJA DEL DVD ESTA ABRIENDOSE
  227.         goto    ETI_058         ;SE ASEGURA A QUE SE ABRA DEL TODO
  228.  
  229.         movlw   24              ;PAUSA DE 6 SEGUNDOS PARA QUE
  230.         movwf   RAM_0B          ;PONGAMOS EL JUEGO EN LA BANDEJA Y
  231. ETI_05C movlw   250             ;PULSEMOS EL BOTON PARA INTRIDUCIRLO
  232.         call    PAUSAWX1MSG     ;EN LA CONSOLA
  233.         decfsz  RAM_0B,F        ;
  234.         goto    ETI_05C         ;
  235.  
  236.         btfsc   GPIO,0          ;SI LA BANDEJA DEL DVD ESTA TODAVIA FUERA
  237.         goto    ETI_052         ;REPITE LA OPERACION
  238.  
  239.         goto    OPCION2         ;CUANDO EL DVD YA ESTA DENTRO SALTA OPCION2
  240.                                 ;Y COMIENZAN LAS TRANSMISIONES DE 'SCEE'
  241. ;--------------------------------------------------------------------------
  242.  
  243. ;+--------------------------------------------------------------------------+
  244. ;¦ OPCION 3 (RESET PULSADO DESPUES DE 1 SEG. Y SOLTADO DESPUES DE 7,5 SEG.) ¦
  245. ;¦ JUEGOS PSX2 CON PROTECCION ANTIMODCHIP CON AR1.3                         ¦
  246. ;+--------------------------------------------------------------------------+
  247. OPCION3
  248.         btfss   GPIO,3          ;ESPERA A QUE SOLTEMOS EL
  249.         goto    OPCION3         ;BOTON DE RESET
  250.  
  251.         movlw   255             ;INICIALIZA RAM_15 Y TODOS
  252.         movwf   RAM_15          ;LOS PUERTOS
  253.         tris    GPIO            ;EN ALTO
  254.  
  255.         movlw   80              ;EL MODCHIP FUERZA A LA CONSOLA
  256.         movwf   RAM_0B          ;PARA QUE EXPULSE LA BANDEJA DEL DVD
  257. ETI_132 movlw   b'00100100'     ;                 "
  258.         movwf   GPIO            ;                 "
  259.         movlw   b'11011011'     ;                 "
  260.         tris    GPIO            ;                 "
  261.         movlw   10              ;                 "
  262.         call    PAUSAWX1MSG     ;                 "
  263.         movlw   b'00100000'     ;                 "
  264.         movwf   GPIO            ;                 "
  265.         movlw   b'00011011'     ;                 "
  266.         tris    GPIO            ;                 "
  267.         movlw   10              ;                 "
  268.         call    PAUSAWX1MSG     ;                 "
  269.         decfsz  RAM_0B,F        ;                 "
  270.         goto    ETI_132         ;                 "
  271.         movlw   b'00111111'     ;                 "
  272.         tris    GPIO            ;                 "
  273.  
  274.         movlw   16              ;PAUSA PARA QUE LA BANDEJA DEL DVD
  275.         movwf   RAM_0B          ;ESTE 4 SEGUNDOS ABIERTA Y NOS DE
  276. ETI_144 movlw   250             ;TIEMPO A PONER EL JUEGO EN ELLA
  277.         call    PAUSAWX1MSG     ;                 "
  278.         decfsz  RAM_0B,F        ;                 "
  279.         goto    ETI_144         ;                 "
  280.  
  281.         movlw   80              ;EL MODCHIP FUERZA A LA CONSOLA
  282.         movwf   RAM_0B          ;PARA QUE INTRODUZCA LA BANDEJA DEL DVD
  283. ETI_14A movlw   b'00010100'     ;                 "
  284.         movwf   GPIO            ;                 "
  285.         movlw   b'11101011'     ;                 "
  286.         tris    GPIO            ;                 "
  287.         movlw   10              ;                 "
  288.         call    PAUSAWX1MSG     ;                 "
  289.         movlw   b'00010000'     ;                 "
  290.         movwf   GPIO            ;                 "
  291.         movlw   b'11101011'     ;                 "
  292.         tris    GPIO            ;                 "
  293.         movlw   10              ;                 "
  294.         call    PAUSAWX1MSG     ;                 "
  295.         decfsz  RAM_0B,F        ;                 "
  296.         goto    ETI_14A         ;                 "
  297.         movlw   b'00111111'     ;                 "
  298.         tris    GPIO            ;                 "
  299.  
  300.         goto    OPCION1         ;DESHABILITA AL MODCHIP Y YA PODEMOS
  301.                                 ;EJECUTAR EL JUEGO CON EL MENU DEL AR1.3
  302. ;--------------------------------------------------------------------------
  303.  
  304. ;+---------------------------------------------------------------------+
  305. ;¦ TRANSMITE VIA SERIE 'SCEE' CON 8 BIT DE DATOS Y 2 DE STOP A 250 BPS ¦
  306. ;+---------------------------------------------------------------------+
  307. ENVIASCEE
  308.         movwf   RAM_0D          ;SALVA W EN RAM_0D (INUTIL PUES NO LO USA)
  309.  
  310.         movlw   72              ;72 MILISEGUNDOS DE ESPACIO ENTRE BYTES
  311.         call    PAUSAWX1MSG     ;
  312.  
  313.         movlw   4               ;ENVIAREMOS 4 BYTES
  314.         movwf   RAM_0E          ;DE LA TABLA
  315. ETI_068
  316.         movf    RAM_14,W        ;LEEMOS 1 BYTE DE
  317.         call    TABLA           ;LA TABLA
  318.         movwf   RAM_13          ;EN RAM_13
  319.         comf    RAM_13,F        ;
  320.  
  321.         movlw   8               ;ENVIAREMOS 8
  322.         movwf   RAM_0F          ;BITS DE CADA BYTE
  323.  
  324.         bsf     RAM_15,1        ;ENVIA EL BIT DE START VIA SERIE
  325.         movf    RAM_15,W        ;
  326.     tris    GPIO        ;
  327.  
  328.         movlw   4               ;4 MILISEGUNDOS DEL ANCHO DEL BIT DE START
  329.         call    PAUSAWX1MSG     ;
  330.  
  331. ETI_073
  332.         rrf     RAM_13,F        ;ENVIA 1 BIT DEL BYTE VIA SERIE
  333.         movlw   b'11111000'     ;
  334.     movwf   GPIO        ;
  335.         btfsc   STATUS,0        ;
  336.         bsf     RAM_15,1        ;
  337.         btfss   STATUS,0        ;
  338.         bcf     RAM_15,1        ;
  339.         movf    RAM_15,W        ;
  340.     tris    GPIO        ;
  341.  
  342.         movlw   4               ;4 MILISEGUNDOS DEL ANCHO DEL BIT
  343.         call    PAUSAWX1MSG     ;
  344.  
  345.         decfsz  RAM_0F,F        ;CONTINUAMOS HASTA
  346.         goto    ETI_073         ;ENVIAR LOS 8 BITS DEL BYTE
  347.  
  348.         bcf     RAM_15,1        ;ENVIA 2 BITS DE STOP
  349.         movf    RAM_15,W        ;
  350.     tris    GPIO        ;
  351.  
  352.         movlw   8               ;8 MILISEGUNDOS DEL ANCHO DE
  353.         call    PAUSAWX1MSG     ;LOS 2 BITS DE STOP
  354.  
  355.         incf    RAM_14,F        ;INCREMENTA PUNTERO DE LA TABLA
  356.  
  357.         decfsz  RAM_0E,F        ;CONTINUA HASTA
  358.         goto    ETI_068         ;ENVIAR LOS 4 BYTES DE LA TABLA
  359.         retlw   3               ;RETORNA CON W=03H
  360. TABLA   addwf   PCL,F           ;TABLA PARA LA PS2 EUROPEA
  361.         retlw   'S'
  362.         retlw   'C'
  363.         retlw   'E'
  364.         retlw   'E'
  365. ;--------------------------------------------------------------------------
  366.  
  367. ;+--------------------------+
  368. ;¦ PAUSA DE 50 MILISEGUNDOS ¦
  369. ;+--------------------------+
  370. PAUSA50MSG
  371.         movlw   50              
  372. ;+------------------------------+
  373. ;¦ PAUSA DE (W x 1 MILISEGUNDO) ¦
  374. ;+------------------------------+
  375. PAUSAWX1MSG
  376.         movwf   RAM_11          
  377. ETI_042 movlw   199            
  378.         movwf   RAM_12          
  379. ETI_044 nop                    
  380.         clrwdt                  
  381.         decfsz  RAM_12,F        
  382.         goto    ETI_044        
  383.         nop                    
  384.         decfsz  RAM_11,F        
  385.         goto    ETI_042        
  386.         retlw   3              
  387. ;--------------------------------------------------------------------------
  388.  
  389.     end
  390.  
  391.  

Saludos.