;***************************************************************************
;* MYC.ASM * DESENSAMBLADO DE 8MODCHIP.HEX PARA PSX2 POR MANOLO Y COMPAÑIA *
;***************************************************************************
;
; NOTA:
;* El objeto de realizar el desensamblado y comentado del codigo 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.
;* Desconozo quien es el autor del hex original pero le felicito por su
; programa.
;
;************************************
;* ESQUEMA DE CONEXIONES PIC12C509A *
;************************************
;
; ******** ********
; * **** *
; +5V **1 8** MASA
; * *
; SWAPX **2 GPIO5 GPIO0 7** DVDIN=0 ; * *
; DVDOUT=1 **3 GPIO4 GPIO1 6** TXSCEE
; * *
; /RESET=0 **4 GPIO3 GPIO2 5** SWAPY
; * *
; ******************
;
;
; * DVDOUT IGUAL A 1 CUANDO LA BANDEJA DEL DVD ESTA SALIENDO
; * DVDIN IGUAL A 0 CUANDO LA BANDEJA DEL DVD ESTA ENTRANDO
; * TXSCEE ES POR DONDE ENVIA VIA SERIE "SCEE"
; * SWAPX SOLO LO UTILIZA CON LA OPCION 3
; * SWAPY SOLO LO UTILIZA CON LA OPCION 3
;--------------------------------------------------------------------------
;
;******************************************************************
;* LAS DISTINTAS OPCIONES DEL PROGRAMA CON EL RESET DE LA CONSOLA *
;******************************************************************
;* OPCION 1 (RESET NO PULSADO)
; --------
; PARA JUEGOS ORIGINALES (PSX1 DIRECTOS) Y (PSX2 CON ACTION REPLAY 1.3)
;
;* OPCION 2 (RESET PULSADO DESPUES DE 2 SEG. Y SOLTADO ANTES DE 3 SEG.)
; --------
; PARA JUEGOS COPIADOS (PSX1 DIRECTOS) Y (PSX2 CON AR1.3)
;
;* OPCION 3 (RESET PULSADO DESPUES DE 2 SEG. Y SOLTADO DESPUES DE 3 SEG.)
; --------
; PARA JUEGOS CON PROTECCION ANTIMODCHIP (PSX1 DIRECTOS) Y (PSX2 AR1.3)
;--------------------------------------------------------------------------
;***********************************
;* 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 REGISTRO
option ;
movlw 255 ;PONE TODOS LOS PUERTOS
movwf RAM_15 ;EN ALTO Y RAM_15
tris GPIO ;
;--------------------------------------------------------------------------
;**********************************
;* PAUSA DE ENCENDIDO DE *
;* (6x50x199)+(5x50x199)+(14x199) *
;**********************************
movlw 2 ;
movwf RAM_0D ;
ETI_107 call PAUSA50X199 ;
decfsz RAM_0D,F ;
goto ETI_107 ;
movlw 6 ;
movwf RAM_0D ;
ETI_10C call PAUSA50X199 ;
decfsz RAM_0D,F ;
goto ETI_10C ;
movlw 14 ;
call PAUSAWX199 ;
;--------------------------------------------------------------------------
;****************************
;* OPCION1 RESET NO PULSADO *
;****************************
btfsc GPIO,3 ;SI EL RESET NO ESTA PULSADO
goto OPCION1 ;SALTA A OPCION1
;*******************************************************
;* OPCION2 RESET PULSADO Y SOLTADO ANTES DE 3 SEGUNDOS *
;*******************************************************
movlw 150 ;
movwf RAM_0D ;
ETI_115 btfsc GPIO,3 ;
goto OPCION2 ;SALTA A OPCION2 AL LEVANTAR EL RESET
call PAUSA50X199 ;
decfsz RAM_0D,F ;
goto ETI_115 ;
;*********************************************************
;* OPCION3 RESET PULSADO Y SOLTADO DESPUES DE 3 SEGUNDOS *
;*********************************************************
goto OPCION3 ;SI CONTINUA PULSADO SALTA A OPCION3
;--------------------------------------------------------------------------
;**************************
;* DESHABILITA EL MODCHIP *
;**************************
OPCION1
movlw b'00111111' ;PONE TODOS LOS
tris GPIO ;PUERTOS EN ALTO
sleep ;DESHABILITA EL MODCHIP
;--------------------------------------------------------------------------
;************************************************************************
;* OPCION 2 (RESET PULSADO DESPUES DE 2 SEG. Y SOLTADO ANTES DE 3 SEG.) *
;* PARA JUEGOS COPIADOS (PSX1 DIRECTOS) Y (PSX2 CON AR1.3) *
;************************************************************************
OPCION2
bcf GPIO,1 ;INICIALIZA PUERTO TXSERIE EN ALTO
bcf RAM_15,1 ;
movf RAM_15,W ;
tris GPIO ;
call PAUSA50X199 ;PAUSA 50x199
movlw 100 ;
movwf RAM_0C ;
ETI_122
btfsc GPIO,0 ;
goto ETI_04C ;
clrf RAM_14 ;INICIALIZA PUNTERO A TABLA Y
call ENVIASCEE ;TRANSMITE VIA SERIE 'SCEE'
call SUB_04C ;
goto ETI_122 ;
SUB_04C
ETI_04C
btfsc GPIO,0 ;SI PIN 7 = 1
goto ETI_050 ;SALTA A ETI_050
decfsz RAM_0C,F ;SI RAM_OC <> 00H
retlw 3 ;RETORNA CON W=03H SINO CONTINUA
ETI_050 movlw b'00111111' ;INICIALIZA TODOS PUERTOS
tris GPIO ;COMO ENTRADAS
ETI_052
btfss GPIO,4 ;ESPERA A QUE SE INICIE LA
goto ETI_052 ;APERTURA DE LA BANDEJA DVD
movlw 250 ;ESPERAMOS UN TIEMPO A LA CONSOLA PARA
call PAUSAWX199 ;QUE ABRA 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 ;ESPERA A QUE SE ABRA DEL TODO
movlw 24 ;PAUSA DE (24x250x199) APROXIMADAMENTE 4SG.
movwf RAM_0B ;ESPERAMOS UN TIEMPO A LA CONSOLA PARA
ETI_05C movlw 250 ;QUE META EL DVD
call PAUSAWX199 ;
decfsz RAM_0B,F ;
goto ETI_05C ;
btfsc GPIO,0 ;SI LA BANDAJA DEL DVD ESTA TODAVIA FUERA
goto ETI_052 ;REPITE LA OPERACION
goto OPCION2 ;CUANDO EL DVD ESTA DENTRO SALTA OPCION2
;--------------------------------------------------------------------------
;**************************************************************************
;* OPCION 3 (RESET PULSADO DESPUES DE 2 SEG. Y SOLTADO DESPUES DE 3 SEG.) *
;* PARA JUEGOS CON PROTECCION ANTIMODCHIP (PSX1 DIRECTOS) Y (PSX2 AR1.3) *
;**************************************************************************
OPCION3
btfss GPIO,3 ;ESPERA A QUE SOLTEMOS EL
goto OPCION3 ;BOTON DE RESET
movlw 255 ;PONE RAM_15 Y TODOS
movwf RAM_15 ;LOS PUERTOS
tris GPIO ;EN ALTO
movlw 80 ;80 VECES HAREMOS
movwf RAM_0B ;LA OPERACION
ETI_132
movlw b'00100100' ;
movwf GPIO ;
movlw b'11011011' ;
tris GPIO ;
movlw 10 ;PAUSA DE 10x199
call PAUSAWX199 ;
movlw b'00100000' ;
movwf GPIO ;
movlw b'00011011' ;
tris GPIO ;
movlw 10 ;PAUSA DE 10x199
call PAUSAWX199 ;
decfsz RAM_0B,F ;CONTINUA HASTA
goto ETI_132 ;TERMINAR 80 VECES
movlw b'00111111' ;
tris GPIO ;
movlw 16 ;PAUSA DE (16x250x199)
movwf RAM_0B ;
ETI_144 movlw 250 ;
call PAUSAWX199 ;
decfsz RAM_0B,F ;
goto ETI_144 ;
movlw 80 ;80 VECES HAREMOS
movwf RAM_0B ;LA OPERACION
ETI_14A
movlw b'00010100' ;
movwf GPIO ;
movlw b'11101011' ;
tris GPIO ;
movlw 10 ;PAUSA DE 10x199
call PAUSAWX199 ;
movlw b'00010000' ;
movwf GPIO ;
movlw b'11101011' ;
tris GPIO ;
movlw 10 ;PAUSA DE 10x199
call PAUSAWX199 ;
decfsz RAM_0B,F ;CONTINUA HASTA
goto ETI_14A ;TERMINAR 80 VECES
movlw b'00111111' ;PONE TODOS LOS PUERTOS EN
tris GPIO ;ALTO (ES INUTIL, LO HACE TAMBIEN OPTION1)
goto OPCION1 ;DESHABILITA AL MODCHIP
;--------------------------------------------------------------------------
;******************************
;* TRANSMITE VIA SERIE 'SCEE' *
;******************************
ENVIASCEE
movwf RAM_0D ;SALVA W EN RAM_0D (INUTIL PUES NO LO USA)
movlw 72 ;ESPACIO ENTRE BYTES
call PAUSAWX199 ;
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 ;ANCHO DEL BIT DE START
call PAUSAWX199 ;
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 ;ANCHO DEL BIT
call PAUSAWX199 ;
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 ;ANCHO DE LOS 2 BITS DE STOP
call PAUSAWX199 ;
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 ;
retlw 83 ;H'53' b'01010011' 'S'
retlw 67 ;H'43' b'01000011' 'C'
retlw 69 ;H'45' b'01000101' 'E'
retlw 69 ;H'45' b'01000101' 'E'
;--------------------------------------------------------------------------
;*********************
;* PAUSA DE (50x199) *
;*********************
PAUSA50X199
movlw 50
;********************
;* PAUSA DE (Wx199) *
;********************
PAUSAWX199
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
de **** madre...que nunca se pierda ni una pluma de las alas de la libertad...

