En contrar ASM del 12f508/509 del chip de PSX

Iniciado por Meta, 11 Julio 2008, 11:16 AM

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

Meta

Hola:

¿Alguien tiene a estas alturas el .asm del chip de PSX de cualquier versión?

Quiero analizar el código por curiosidad. La verdad me cuesta encontrar ese sea .hex o .asm.

Saludos.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/


Meta

El código es este:
    ;+-------------------------------------------------------------------------+
    ;¦ 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


A alguien le puede ayudar.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/