Programación Específica > Microcontroladores

 Mejorar el Mod8 para PS2

(1/1)

Meta:
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 ---;+-------------------------------------------------------------------------+;¦ MYC.ASM ¦ DESENSAMBLADO DE 8MODCHIP.HEX PARA PSX2 POR MANOLO Y COMPAÑIA ¦;+-------------------------------------------------------------------------+ ;  NOTA:;* Para visualizar este fichero correctamente, usa el edit del dos;  o el bloc de notas del windows con el tipo de fuente 'terminal';* El objeto de realizar el desensamblado y comentado del código fuente,;  del 8modchip.hex es con el fin de que todos conozcamos como funciona;  y podamos perfeccionarlo y modificarlo entre todos a nuestro antojo.;* Espero que al publicarlo en el foro, las mentes pensantes colaboren.;* Desconozco quien es el autor del hex original pero le felicito por su;  programa.;* Según aparezcan nuevas versiones del modchip se irán desensamblando;  y publicando.;* Por favor poner vuestras experiencias en el foro para que lo vea todo;  el mundo.;* los tiempos de las rutinas son muy críticos.;* El codigo está más ordenado que en el 8modchip.hex pero es el mismo;  únicamete se han suprimido los caracteres de la tabla que no se usan;  para la versión europea.;* Sugerencias de assembler o hard: jiglesias@arrakis.es;-------------------------------------------------------------------------- ;                   +----------------------------------+;                   ¦ ESQUEMA DE CONEXIONES PIC12C509A ¦;                   +----------------------------------+;;                            +------+  +------+;                            ¦      +--+      ¦;                       +5V ¦¦1  PIC12C509A  8¦¦ MASA;                            ¦                ¦;                     SWAPX ¦¦2 GPIO5  GPIO0 7¦¦ DVDIN=0                      ;                            ¦                ¦;                  DVDOUT=1 ¦¦3 GPIO4  GPIO1 6¦¦ TXSCEE    ;                            ¦                ¦;                  /RESET=0 ¦¦4 GPIO3  GPIO2 5¦¦ SWAPY     ;                            ¦                ¦;                            +----------------+;           ; 1 - +5VCC  - SIN COMENTARIOS; 2 - SWAPX  - SOLO LO USA LA OPCION 3 PARA LA APERTURA Y CIERRE DEL DVD; 3 - DVDOUT - ES IGUAL A 1 CUANDO LA BANDEJA DEL DVD ESTA SALIENDO; 4 - /RESET - ES IGUAL A 0 CUANDO PULSAMOS EL RESET DE LA PS2; 5 - SWAPY  - SOLO LO USA LA OPCION 3 PARA LA APERTURA Y CIERRE DEL DVD; 6 - TXSCEE - ES POR DONDE TRANSMITE VIA SERIE "SCEE"; 7 - DVDIN  - ES IGUAL A 0 CUANDO LA BANDEJA DEL DVD ESTA ENTRANDO; 8 - MASA   - SIN COMENTARIOS;-------------------------------------------------------------------------- ;+---------------------------------+;¦ PROCESADOR A EMPLEAR PIC12C509A ¦;+---------------------------------+P509A EQU 1          ;0=PIC12C508A 1=PIC12C509A IF        P509A list      p=12c509A include   "p12c509A.inc" ELSE list      p=12c508A include   "p12c508A.inc" ENDIF ;+-----------------------------------+;¦ FUSIBLES, WASDOG, OSCILADOR ETC.. ¦;+-----------------------------------+ __FUSES _MCLRE_OFF & _CP_OFF & _WDT_OFF & _IntRC_OSC ;+------------------+;¦ NOTACION DECIMAL ¦;+------------------+ radix   dec;-------------------------------------------------------------------------- ;+--------------------------+;¦ VARIABLES DE RAM INTERNA ¦;+--------------------------+ cblock 0x0B        RAM_0B  ;CONTADOR PAUSA        RAM_0C  ;CONTADOR CARGA DEL DVD        RAM_0D  ;CONTADOR PAUSA        RAM_0E  ;CANTIDAD DE BYTES A ENVIAR DE LA TABLA        RAM_0F  ;CANTIDAD DE BITS A ENVIAR DEL BYTE        RAM_10  ;NO UTILIZADA        RAM_11  ;CONTADOR W EN PAUSA Wx199        RAM_12  ;CONTADOR 199 EN PAUSA Wx199        RAM_13  ;BYTE LEIDO DE LA TABLA        RAM_14  ;PUNTERO DEL BYTE DE LA TABLA        RAM_15  ;MASCARA ESTADO DE LOS BIT DEL PUERTO endc;-------------------------------------------------------------------------- ;+-----------------+;¦ VECTOR DE RESET ¦;+-----------------+    org 0x00        movwf   OSCCAL          ;CALIBRA EL OSCILADOR INTERNO        goto    COMIENZO        ;SALTA LA COMIENZO DEL PROGRAMA;-------------------------------------------------------------------------- ;+--------------------------------------+;¦ VERSION DEL PROGRAMA (CODIGO INUTIL) ¦;+--------------------------------------+        retlw   'M'        retlw   'A'        retlw   'N'        retlw   'O'        retlw   'L'        retlw   'O'        retlw   ' '        retlw   'Y'        retlw   ' '        retlw   'C'        retlw   'O'        retlw   'M'        retlw   'P'        retlw   'A'        retlw   'Ñ'        retlw   'I'        retlw   'A';-------------------------------------------------------------------------- ;+-----------------------+;¦ COMIENZO DEL PROGRAMA ¦;+-----------------------+COMIENZO        movlw   b'11000010'     ;CONFIGURA TMR0 PRESCALER = 1:8        option                  ;OSCILADOR = 4MHZ         movlw   255             ;INICIALIZA TODOS LOS PUERTOS        movwf   RAM_15          ;EN ALTO Y RAM_15    tris    GPIO        ;;-------------------------------------------------------------------------- ;+----------------------------------------+;¦ PAUSA DE ENCENDIDO DE 414 MILISEGUNDOS ¦;+----------------------------------------+        movlw   2               ;100 MILISEGUNDOS        movwf   RAM_0D          ;ETI_107 call    PAUSA50MSG      ;       +        decfsz  RAM_0D,F        ;        goto    ETI_107         ;        movlw   6               ;300 MILISEGUNDOS        movwf   RAM_0D          ;ETI_10C call    PAUSA50MSG      ;       +        decfsz  RAM_0D,F        ;        goto    ETI_10C         ;        movlw   14              ;14 MILISEGUNDOS        call    PAUSAWX1MSG     ;;-------------------------------------------------------------------------- ;+------------------------------------------------------------------+;¦ LECTURA DE LAS 3 OPCIONES CON EL PULSADOR DE RESET DE LA CONSOLA ¦;+------------------------------------------------------------------+;OPCION1 EL RESET NO HA SIDO PULSADO;-----------------------------------        btfsc   GPIO,3          ;SI EL RESET NO ESTA PULSADO        goto    OPCION1         ;SALTA A OPCION1 ;OPCION2 EL RESET HA SIDO PULSADO Y SE HA SOLTADO ANTES DE 7,5 SEGUNDOS;----------------------------------------------------------------------        movlw   150             ;        movwf   RAM_0D          ;ETI_115 btfsc   GPIO,3          ;         goto    OPCION2         ;SALTA A OPCION2 AL LEVANTAR EL RESET        call    PAUSA50MSG      ;        decfsz  RAM_0D,F        ;        goto    ETI_115         ; ;OPCION3 EL RESET HA SIDO PULSADO Y NO SE HA SOLTADO ANTES DE 7,5 SEGUNDOS;-------------------------------------------------------------------------        goto    OPCION3         ;SI CONTINUA PULSADO SALTA A OPCION3;-------------------------------------------------------------------------- ;+---------------------------------------------------+;¦ OPCION 1 (RESET NO PULSADO) EL MODCHIP SE         ¦;¦ DESHABILITA Y SOLO PODEMOS USAR JUEGOS ORIGINALES ¦;+---------------------------------------------------+OPCION1        movlw   b'00111111'     ;INICIALIZA TODOS LOS        tris    GPIO            ;PUERTOS EN ALTO Y        sleep                   ;DESHABILITA EL MODCHIP;-------------------------------------------------------------------------- ;+------------------------------------------------------------------------+;¦ OPCION 2 (RESET PULSADO DESPUES DE 1 SEG. Y SOLTADO ANTES DE 7,5 SEG.) ¦;¦ JUEGOS (PSX1 DIRECTOS) Y (PSX2 SIN PROTECCION ANTIMODCHIP CON AR1.3)   ¦;+------------------------------------------------------------------------+OPCION2        bcf     GPIO,1          ;INICIALIZA PUERTO TXSERIE EN ALTO        bcf     RAM_15,1        ;        movf    RAM_15,W        ;    tris    GPIO        ;         call    PAUSA50MSG      ;PAUSA CADA 100 TRANSMISIONES         movlw   100             ;100 VECES        movwf   RAM_0C          ;REPETIRA LA TRANSMISIONETI_122        btfsc   GPIO,0          ;SI EN ESTOS MOMENTOS LA BANDEJA DEL        goto    ETI_04C         ;DVD YA ESTA DENTRO TRANSMITE SCEE         clrf    RAM_14          ;INICIALIZA PUNTERO A TABLA Y        call    ENVIASCEE       ;TRANSMITE VIA SERIE 100 VECES 'SCEE'        call    SUB_04C         ;LUEGO ESPERARA A QUE METAMOS OTRO JUEGO        goto    ETI_122         ;ANTES DE VOLVER A TRANSMITIR 100 VECESSUB_04CETI_04C        btfsc   GPIO,0          ;SI EN ESTOS MOMENTOS LA BANDEJA DEL        goto    ETI_050         ;DVD AUN NO ESTA DENTRO SALE         decfsz  RAM_0C,F        ;SI YA ESTA DENTRO RETORNA HASTA        retlw   3               ;TRANSMITIR LAS 100 VECES 'SCEE' ETI_050 movlw   b'00111111'     ;INICIALIZA TODOS PUERTOS        tris    GPIO            ;COMO ENTRADASETI_052        btfss   GPIO,4          ;ESPERA A QUE PULSEMOS LA APERTURA        goto    ETI_052         ;DE LA BANDEJA DEL DVD         movlw   250             ;ESPERAMOS UN TIEMPO A LA CONSOLA PARA        call    PAUSAWX1MSG     ;QUE TERMINE DE ABRIR LA BANDEJA DEL DVD         btfss   GPIO,4          ;SI LA BANDEJA DEL DVD TODAVIA NO ESTA        goto    ETI_052         ;ABRIENDOSE REPITE LA OPERACION ETI_058        btfsc   GPIO,4          ;SI LA BANDEJA DEL DVD ESTA ABRIENDOSE        goto    ETI_058         ;SE ASEGURA A QUE SE ABRA DEL TODO         movlw   24              ;PAUSA DE 6 SEGUNDOS PARA QUE        movwf   RAM_0B          ;PONGAMOS EL JUEGO EN LA BANDEJA YETI_05C movlw   250             ;PULSEMOS EL BOTON PARA INTRIDUCIRLO        call    PAUSAWX1MSG     ;EN LA CONSOLA        decfsz  RAM_0B,F        ;        goto    ETI_05C         ;         btfsc   GPIO,0          ;SI LA BANDEJA DEL DVD ESTA TODAVIA FUERA        goto    ETI_052         ;REPITE LA OPERACION         goto    OPCION2         ;CUANDO EL DVD YA ESTA DENTRO SALTA OPCION2                                ;Y COMIENZAN LAS TRANSMISIONES DE 'SCEE' ;-------------------------------------------------------------------------- ;+--------------------------------------------------------------------------+;¦ OPCION 3 (RESET PULSADO DESPUES DE 1 SEG. Y SOLTADO DESPUES DE 7,5 SEG.) ¦;¦ JUEGOS PSX2 CON PROTECCION ANTIMODCHIP CON AR1.3                         ¦;+--------------------------------------------------------------------------+OPCION3        btfss   GPIO,3          ;ESPERA A QUE SOLTEMOS EL        goto    OPCION3         ;BOTON DE RESET         movlw   255             ;INICIALIZA RAM_15 Y TODOS        movwf   RAM_15          ;LOS PUERTOS        tris    GPIO            ;EN ALTO         movlw   80              ;EL MODCHIP FUERZA A LA CONSOLA        movwf   RAM_0B          ;PARA QUE EXPULSE LA BANDEJA DEL DVDETI_132 movlw   b'00100100'     ;                 "        movwf   GPIO            ;                 "        movlw   b'11011011'     ;                 "        tris    GPIO            ;                 "        movlw   10              ;                 "        call    PAUSAWX1MSG     ;                 "        movlw   b'00100000'     ;                 "        movwf   GPIO            ;                 "        movlw   b'00011011'     ;                 "        tris    GPIO            ;                 "        movlw   10              ;                 "        call    PAUSAWX1MSG     ;                 "        decfsz  RAM_0B,F        ;                 "        goto    ETI_132         ;                 "        movlw   b'00111111'     ;                 "        tris    GPIO            ;                 "         movlw   16              ;PAUSA PARA QUE LA BANDEJA DEL DVD         movwf   RAM_0B          ;ESTE 4 SEGUNDOS ABIERTA Y NOS DE ETI_144 movlw   250             ;TIEMPO A PONER EL JUEGO EN ELLA        call    PAUSAWX1MSG     ;                 "        decfsz  RAM_0B,F        ;                 "        goto    ETI_144         ;                 "         movlw   80              ;EL MODCHIP FUERZA A LA CONSOLA        movwf   RAM_0B          ;PARA QUE INTRODUZCA LA BANDEJA DEL DVDETI_14A movlw   b'00010100'     ;                 "        movwf   GPIO            ;                 "        movlw   b'11101011'     ;                 "        tris    GPIO            ;                 "        movlw   10              ;                 "        call    PAUSAWX1MSG     ;                 "        movlw   b'00010000'     ;                 "        movwf   GPIO            ;                 "        movlw   b'11101011'     ;                 "        tris    GPIO            ;                 "        movlw   10              ;                 "        call    PAUSAWX1MSG     ;                 "        decfsz  RAM_0B,F        ;                 "        goto    ETI_14A         ;                 "        movlw   b'00111111'     ;                 "        tris    GPIO            ;                 "         goto    OPCION1         ;DESHABILITA AL MODCHIP Y YA PODEMOS                                ;EJECUTAR EL JUEGO CON EL MENU DEL AR1.3;-------------------------------------------------------------------------- ;+---------------------------------------------------------------------+;¦ TRANSMITE VIA SERIE 'SCEE' CON 8 BIT DE DATOS Y 2 DE STOP A 250 BPS ¦;+---------------------------------------------------------------------+ENVIASCEE        movwf   RAM_0D          ;SALVA W EN RAM_0D (INUTIL PUES NO LO USA)         movlw   72              ;72 MILISEGUNDOS DE ESPACIO ENTRE BYTES        call    PAUSAWX1MSG     ;         movlw   4               ;ENVIAREMOS 4 BYTES        movwf   RAM_0E          ;DE LA TABLAETI_068        movf    RAM_14,W        ;LEEMOS 1 BYTE DE        call    TABLA           ;LA TABLA        movwf   RAM_13          ;EN RAM_13        comf    RAM_13,F        ;         movlw   8               ;ENVIAREMOS 8        movwf   RAM_0F          ;BITS DE CADA BYTE         bsf     RAM_15,1        ;ENVIA EL BIT DE START VIA SERIE        movf    RAM_15,W        ;    tris    GPIO        ;         movlw   4               ;4 MILISEGUNDOS DEL ANCHO DEL BIT DE START        call    PAUSAWX1MSG     ; ETI_073        rrf     RAM_13,F        ;ENVIA 1 BIT DEL BYTE VIA SERIE        movlw   b'11111000'     ;    movwf   GPIO        ;        btfsc   STATUS,0        ;        bsf     RAM_15,1        ;        btfss   STATUS,0        ;        bcf     RAM_15,1        ;        movf    RAM_15,W        ;    tris    GPIO        ;         movlw   4               ;4 MILISEGUNDOS DEL ANCHO DEL BIT        call    PAUSAWX1MSG     ;         decfsz  RAM_0F,F        ;CONTINUAMOS HASTA        goto    ETI_073         ;ENVIAR LOS 8 BITS DEL BYTE         bcf     RAM_15,1        ;ENVIA 2 BITS DE STOP        movf    RAM_15,W        ;    tris    GPIO        ;         movlw   8               ;8 MILISEGUNDOS DEL ANCHO DE        call    PAUSAWX1MSG     ;LOS 2 BITS DE STOP         incf    RAM_14,F        ;INCREMENTA PUNTERO DE LA TABLA         decfsz  RAM_0E,F        ;CONTINUA HASTA        goto    ETI_068         ;ENVIAR LOS 4 BYTES DE LA TABLA        retlw   3               ;RETORNA CON W=03HTABLA   addwf   PCL,F           ;TABLA PARA LA PS2 EUROPEA        retlw   'S'        retlw   'C'        retlw   'E'        retlw   'E';-------------------------------------------------------------------------- ;+--------------------------+;¦ PAUSA DE 50 MILISEGUNDOS ¦;+--------------------------+PAUSA50MSG        movlw   50              ;+------------------------------+;¦ PAUSA DE (W x 1 MILISEGUNDO) ¦;+------------------------------+PAUSAWX1MSG        movwf   RAM_11          ETI_042 movlw   199                     movwf   RAM_12          ETI_044 nop                             clrwdt                          decfsz  RAM_12,F                goto    ETI_044                 nop                             decfsz  RAM_11,F                goto    ETI_042                 retlw   3               ;--------------------------------------------------------------------------     end  
Saludos.

Navegación

[0] Índice de Mensajes

Ir a la versión completa