Programación Específica > Microcontroladores
Mejorar el Mod8 para PS2
(1/1)
Meta:
Hola.
Me gustaría contactar con el que documentó este ASM del PIC12C508 si tiene un diagrama de flujo para entenderlo mejor. Ya que utiliza retardos y para verlo en el MPLAB es un tostón. Su e-mail abajo no funciona.
--- Código: Text ---;+-------------------------------------------------------------------------+;¦ 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 TRANSMISIONETI_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 VECESSUB_04CETI_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 ENTRADASETI_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 YETI_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 DVDETI_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 DVDETI_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 TABLAETI_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=03HTABLA 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
Saludos.
Navegación
Ir a la versión completa