;------------------------------------------------------
; Hola a todos:
; Como veo que jiXo aún no ha puesto en download el
; fichero que le envié‚ os pongo aquí la nueva versión
; del desensamblado.
; El texto queda algo alterado al pegarlo aquí, es
; preferible que useis el del myc.zip cuando lo publiquen
; El próximo envío será con el microcontrolador PIC16F84.
;-------------------------------------------------------
;***************************************************************************
;* MYC.ASM * DESENSAMBLADO DE 8MODCHIP.HEX PARA PSX2 POR MANOLO Y COMPA¥IA *
;***************************************************************************
; NOTA:
;* 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
call PAUSAWX1MSG ;ENTRE TRANSMISION Y TRANSMISION
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