Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   ASM y Microcontroladores (https://www.clubdelphi.com/foros/forumdisplay.php?f=44)
-   -   En contrar ASM del 12f508/509 del chip de PSX (https://www.clubdelphi.com/foros/showthread.php?t=58182)

REHome 11-07-2008 10:59:44

En contrar ASM del 12f508/509 del chip de PSX
 
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.

REHome 29-03-2012 01:17:44

El código es este:
Código:

    ;+-------------------------------------------------------------------------+
    ;¦ 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.


La franja horaria es GMT +2. Ahora son las 06:36:03.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi