Desensamblado del 8modchip.hex de psx2

;***************************************************************************
;* 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
pues eso este tio necesita un aplauso de todo el foro, para que ahora a nadie se le ocurra preguntar como funciona el chip...;) de **** madre...que nunca se pierda ni una pluma de las alas de la libertad...
Ok, de aki lo uniko mejorable por el momento es el tema swap kon metodoEA y protegidos.

eso estaria asociado al modo3 si no me ekivoko, se trata de konvinar la salida y entrada del CD kon la activacion del chip, aver si podemos ponernos de akuerdo pa solucionarlo
y mejorar el neo3 antes ke salga ;)
Hola,Sería muy interesante que alguien portara el codigo asm de este archivo para poder usarlo en un pic16f84/p /a, para hacer pruebas y no joder 200 pelas en cada prueba, ya que el 16f84 se puede regrabar, aparte dispone de mas E/S para alguna otra utilidad.

Quiero felicitar a benito y manolo por esta grandiosa información, por fin ahora sabemos como funciona el modchip, y lo mas importante es que podemos hacer nuestras modificaciones. Aunque todaviá hay cosas que no estan del todo claras por falta de información complementaria que sería sin duda de gran utilidad a la hora de realizar nuestras modificaciones. Me refiero por ejemplo a en el modo 3, el famoso EA, hay fos ciclos que se repiten 80 veces, esto supuestamente son para habrir y cerrar la bandeja por medio de la comunicacion con el chip del lector a traves de swapx y swapy.
Me gustaría saber que tipo de comunicacion es esta y que orden esta dando y si hay algun otro tipo de orden para el DVD por medio de estos dos cables de comunicación. O simplemente el ciclo de 80 veces es lo que tarda la bandeja en habrirse (se puede variar la velocidad?).
Si disponeis de mas información pls postearla en el foro o por mail. Un saludo y mil gracias por la info.
Para todos:
***********
He enviado a jiXo un nuevo desensamblado del 8modchip.hex más depurado para que lo ponga en la página.
He añadido comentarios más comprensibles en la opción 2
y opción 3, así como los tiempos de las pausas y ancho de los bits. Por tanto olvidaros del publicado en el foro
y centraros en el último.
Ademas he puesto el mpasm.exe e includes correspondientes
para que podais generar el hex partiendo del asm
Estoy porteando el código para migrarlo a un Pic16f84 y
en cuanto lo termine será publico.

Para Haute:
***********
Lo que hace en la opcion 3 es:
------------------------------
1) El modchip fuerza a la consola para que expulse la bandeja del dvd.
(No he provado a modificar el numero de envios, para
no quemar mas 12c508 lo, haré cuando lo tenga en 16f84)

2) Hace una pausa para que la bandeja del dvd esté 4 segundos abierta y tengamos tiempo de poner el juego.
(si modificas este tiempo y lo pones por ejemplo a
8 segundos, el juego luego no te carga, no he provado
con otros valores).

3) El modchip fuerza a la consola para que introduzca la
bandeja del dvd

4) El modchip se deshabilita y ya podemos ejecutar el juego
de ps2 con el menu del AR1.3
-----------------------------------------------------------
Gracias por tu esfuerzo, creo comprender como fuerza el modchip al motor de la bandeja, corrigeme si me equivoco pero creo que es un motor de pulsos, luego variando el tiempo entre el estado "on" y "off", se le podra hacer que cierra y habra mas despacio, creo que disminuyendo el tiempo.
Creo que se esta muy cerca, no de eliminar el swap, sino de eliminar el ar2. Tu que opinas, tengo varias ideas pero me falta algo de información respecto a la doble protección de los de ps2 y el porque de los juegos EA (que es lo que les hace diferentes).
he modificado el retardo da la bandeja y no me carga si no pones lo de defecto...porke es soy un poko cafre con programacion y no tengo ganas de volver a estudiarme ensamblador era un palo oye cuando lo tengas para el pic16f84 me lo envias ke te ayudare a hacer pruebas y dime si quieres ke haga algo en especial soy mas electronico que programador...;)...alienboy2@wanadoo.es...creo que lo que nos falta es una vez que ya sabemos mas o menos como trabaja el chip, seria muy interesante como ya comentabais saber el funcionamiento y las reacciones de la ps2 y sobre todo del procedimiento de esta al leer un cd de ps1 y sobre todo de ps2
Yo he conseguido unas imagenes que a lo mejor os podrian interesar :)

Lo malo es que no las Encuentro :(

Se Trata de un punto de la Placa Base Donde solo una vez la PS2 conprueva los juegos de la PS2 i con un simple bloqueo,envio de datos podriamos hacer el mod-chip definitivo :)

Las Fotografias y el pequeno esquema lo hicieron paradox para el SWAP-TRIC , asi con unos componentes y un led sabias cuando la PS2 hacia las señales de Comprobacion de los Juegos PS2 y podrias hacer el SWAP-TRIC con muchisima Precision :)


Creeis que esas Fotografias os podrias ser Utiles para el Mod-chip . Sy decis que sy contactad con migo y os lo mando via e-mail.

xavieeee@terra.es


Una ultima Cosa ,

Las señales de compropacion ponia en el documento que eran vastante fuertes y creo que eran analogicas.


Un salu2 al foro

Y en especial a manolo y benito Que son unos Mostruos ;)
Joder que vien porque las tenia muy escondidas por mi PC :)

Os voy a poner el Readme.txt para que os agais una idea de lo util que puede llegar a ser XD


-------------------------
PS2 CDVD Check "detector"
-------------------------

Este pequeño circuito, enciende un diodo LED cuando la PS2 está verificando la autenticidad
del CDVD (PS2 o PSX). Este circuito noes necesario para seguir correctamente el método de
"Swap-Trick", pero te sera util para todo el mundo que intente saltar la proteccion de
arranque, tanto de la PSX como de a PS2.

Se trata de un simple Detector de Pico (Peak Detector), conectado a la lines TP1, por la
que transita un tren de pulsos positivos, solamente durante la comprobación de la autenticidad
del CDVD.

El circuito no tiene ninguna dificultad, lo único digno de reseñar es la conexión al pin
del TP1, debido a su reducida dimensión.

En la figura, también se indica, donde puedes obtener la alimentación para el circuito, pero
obviamente puedes elegir cualquier otro punto, siempre y cuendo tengas cuidado con la polaridad.


NOTA1: Evidentemente ni yo(el traductor) ni el creador nos hacemos responsables de ...bla,bla,bla...

NOTA2: Este circuito ha sido testeado solo con CD, en teoria funcionara también con DVD.
cualquier infprmación sobre este tema sera bien recibida.

NOTA3: En la linea de al lado a TP1 transita toda las señales entre la lógica de bajo
nivel del DDVD y la lógica de alto nivel de la consola

NOTA de FRank: Pos eso gracias a B.A.D./Paradox, por su incansable busqueda de inforamción..
lo que nos hace más libres al resto de personas, THX B/P

: B.A.D/Paradox



Y Gracias a este Punto y Alguien que mida las Señales en determinados compacs podriamos hacer el Chip Perfecto con 2000 Cosas XD :) Por Ejemplo

DVD Multiregion

Arranque directo PS2

Arranque Directo PSX (Actualmente Es Posible )

Eliminar El Asqueroso Action-Replay XD ;)

Y muchas Cosas Mas que Podremos anadirle ;) Gracias al Bloqueo , Envio de Datos .



Una ultima cosa ,Sy quereis que os Ayude en lo que sea :-|
Azedmelo Saber :-)

Venga Un Salu2 a todo el Foro
;------------------------------------------------------
; 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
seria bueno facilitar un pekeño ZIP kon el prog y tuto necesario para modificar el hex, y kolgarlo de la web a modo de facilitar la programacion y el konocimiento del proyecto, algo asi komo linux.
Originalmente enviado por atg
seria bueno facilitar un pekeño ZIP kon el prog y tuto necesario para modificar el hex, y kolgarlo de la web a modo de facilitar la programacion y el konocimiento del proyecto, algo asi komo linux.


Bueno, jiglesias me habia mandado tb el compilador para subirlo junto al asm, pero he pensado q toda la peña interesada en estos temas ya lo tendría y sería una molestia tener q bajarselo todo para pillar solamente el código. De todas formas en la web de microchips (www.microchips.com creo) puedes bajarte gratuitamente el compilador con todas las librerias y toda clase de utilidades para la programación de los pics...
Esto empezo muy caliente pero parece que se ha enfriado.
propongo que los interesados que parecen ser 3 o 4 nos pongamos en contacto para intentar llevar esto a buen camino.
Bien por medio de mail o por este foro.
Disponemos de la grandiosa informacion y trabajo que esta realizando jiglesias, pero creo que hace falta mas información. Creo que puntos interesantes para comentar son los que propongo a continuación que podeis reafirmar y añadir:

- ¿Que es lo que hace la consola al arrancar juegos psx? pero paso por paso, a ser posible con tiempos y numero de comprobaciones.

- Lo mismo pero para los juegos de psx2.

- El punto famoso (hardware) de la transmision del code de zona "SCEE" es valido tanto para el check de juegos psx como psx2?

- Realmente sabe alguien que es lo que hacen algunos juegos para detectar el modchip? ¿Leen la transmision por el punto famoso de transmision "SCEE" y si hay mas transmisiones de las necesarias es que lo ha detectado? Sugerencias. Solo se me ocurre que puede ser por este punto.

- Esto que comento ahora es una duda que lleva a una conclusion:
Recordaremos que en el modchip de la psx normal, cuando metias un juego original, el modchip bloqueaba los datos de zona que podia leer del cd y por eso no se solapaban ni mezclaban con los que mandaba el modchip.
Bueno pues el modchip8 no bloquea esta información, digamos que siempre la manda, es por lo cual funcionando el modchip8 en modo normal (psxbakups, psx2bakups ar2)no es capaz de leer los cds originales de psx, puesto que se solapa la información, pero en cambio y he aqui e kit de la cuestión que los originales de psx2 si funcionan, lo que nos lleva a pensar que el codigo que se envia por ese punto "SCEE", se la suda un poco en el modo de aranke de juegos de psx2. ¿porque en este caso no se solapa la info y sigue funcionando?. Digamos que el metodo tiene que ser diferente. Sugerencias.
Hola Jiglesias, podrías enviarme el fichero (serna_m@tsm.es) que le enviaste a Jixo para colgar en la web y que no va a poner?, he intentado bajarme de microchip no sé cuantas veces el mpasm y no lo consigo.
Si no quieres empezar a enviar el fichero por mail, podrías colgarlo en alguna otra pagina?
Estoy muy interesado en migrarlo al 16f84, no se mucho, pero si lo suficiente para empezar.
Gracias y un saludo
Por que no nos reunimos como dice "haute" via email o como sea posible hasi hacer el Mod-chip .

De paso que os escrivo este mensaje os voy a Escrivir Mis Ideas Para el Futuro Mod-chip ;)


- Sobre el famoso punto Harware que encontre coger algun aparato de Medicion ( Osciloscopio ... ) para medir los impulsos que manda el lector en determinados compacs o DVDs que pongas y despues descodificar la emision y Poder enganar a la Consola con envio , Bloqueo de Datos con mod-chip .

-( Sy es posible)analizar las funciones de la PS2 al recivir determinados compacs pero de forma exsaustiva y segura para poder hacer un chip extremadamente eficiente y final ( Osea que arranquen sin action Replay ).

- Muy Posible hacer un nuevo mod-chip que puedan arrancar todos los juegos como el modo EA pero de manera normal y unica . me explico

en vez de hacer metodo normal y metodo EA ( muy pesado ) modificar el mod-chip con el arranque del metodo normal y las funciones del Metodo EA

Antiguos Metodos

Arranque - Tipo

Normal - Normal

EA - EA

Nuevo

Arranque - Tipo

Normal - EA


Pos eso que modificando el Codigo por ahora seria posible ese metodo y todos los juegos serian conpatibles de una manera sencilla ;)

Si quereis contactar conmigo My email es

xavieeee@terra.es


Bueno un salu2
Antes de nada pido paciencia a todos aquellos que me
estais bombardeando con preguntas por email. No tengo
tiempo para responder hasta acabar con la nueva versión.
Además Benito no colabora mucho (Dice que está de lo suyo..)
Esta MADRUGADA enviaré a jiXO Un fichero hex con su fuente.
compatible con las conexiones del 8modchip pero para el microcontrolador 16F84.
Será necesario tambien un cristal de cuarzo de 4MHZ
hasta que descubramos un pin de la consola de donde
tomarlo.
El chip es unas 600pts. más caro que el 12C509A pero lo podemos grabar y borrar un monton de veces.
Además el puerto de entrada por el que leo el reset de la consola es bidireccional, con lo cual en la siguiente versión estudiaré como hacer más comoda la carga con el AR1.3 sin tener que estar con el dedo tanto tiempo en el reset, al poder programar este puerto como salida puedo simular la pulsación con el programa.
Os recuerdo que en el 12C509A el pin por donde lee el reset
es solo de entrada.
Otra ventaja del 16F84 es que nos quedan 6 puertos
bidireccionales libres para controlar más señales de
la consola y en su versión "A" soporta 20MHZ.

¡Bueno chicos, darle al osciloscopio y frecuencimetro e ir buscando en la consola un pin que tenga menos de 20MHZ y
más de 4MHZ!.
15 respuestas