Mejorar el Mod8 para PS2

Iniciado por Meta, 13 Julio 2008, 02:46 AM

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

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.


;+-------------------------------------------------------------------------+
;¦ 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 TRANSMISION
ETI_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 VECES
SUB_04C
ETI_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 ENTRADAS
ETI_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 Y
ETI_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 DVD
ETI_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 DVD
ETI_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 TABLA
ETI_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=03H
TABLA   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.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/