microchip
santiago22@centrum.cz
santiago22@centrum.cz
Pondělí Březen 28 17:46:10 CEST 2005
Zacinam se ucit s microchip MPlabem 7.x Zacinam ho nenavidet, stahl jsem z internetu nekolik asm souboru a ani jeden se mi nepodarilo prelozit. Kdyz jsem vychytal vsechny chyby a errory tak mi sice nahlasil ze build succeeded bez warningu a erroru ale jaksi vysledny hex soubor ma jen 30B oproti 1KB jak by ho spravne v porovnani s existujicim hex souborem od puvodniho autora mel mit. Mohl by jste se nekdo zkusit prelozit prilozeny asm soubor a rict mi kde delam chybu? Dekuju. Prikladam i puvodni hex soubor od autora a muj i jeho lst soubor.
Ludek A. Tomasek
------------- další část ---------------
;
; CREATED BY ACKMAN APPE V3c.0
;
; ADAPTADOR DE MANDO DE PSX PARA AMIGA CON EMULACION DE PAD CD32
; PROCESADOR PIC16F84/10 MHZ
;
;bug en la rutina de comunicacion con el pad solucionado...
;
DEVICE 16C84, XT_OSC, PROTECT_OFF, WDT_OFF
; LITERALS
; REGISTROS
TX_D EQU 0X10 ;CONTIENE EL BYTE A TRANSMITIR AL PAD PSX
OUT EQU 0X11 ;CONTIENE EL BYTE A PONER EN EL JOYSTIC DE AMIGA EN MODO NORMAL
FLAG EQU 0X12 ;REGISTRO DE FLAG INTERNOS DEL PROGRAMA
CONT3 EQU 0X13 ;CONTADOR GENERICO 3
CONT2 EQU 0X14 ;CONTADOR GENERICO 2
CONT1 EQU 0X15 ;CONTADOR GENERICO 1
CD32TX EQU 0X16 ;CONTIENE EL DATO A TRANSMITIR AL AMIGA EN MODO CD32
BYTE2 EQU 0X17 ;CONTIENE EL SEGUNDO BYTE UTIL RECIBIDO DEL PAD PSX
BYTE1 EQU 0X18 ;CONTIENE EL PRIMER BYTE UTIL RECIBIDO DEL PAD PSX
BYTE EQU 0X19 ;CONTIENE EL BYTE QUE SE ESTA RECIBIENDO DEL PAD PSX
ALMACENS EQU 0X1A ;CONTIENE EL VALOR DEL STATUS DURANTE LAS IRQ
ALMACENW EQU 0X1B ;CONTIEN EL VALOR DE W DURANTE LAS IRQ
FIREVEL EQU 0X1C ;CONTIEN LA VELOCIDAD DEL AUTOFIRE A MAS VALOR= MENOS VELOCIDAD
CD32TXB EQU 0X1D ;REGISTRO DE RESGUARDO DE VALOR A TRANSMITIR EN MODO CD32
; PORTA
DATA EQU 0X00 ;PIN 17 ENTRADA DE DATOS DEL PAD PSX
COMM EQU 0X01 ;PIN 18 SALIDA DE DATOS AL PAD PSX
CLK EQU 0X02 ;PIN 1 SALIDA DE SINCRONISMO AL PAD
ATT EQU 0X03 ;PIN 2 SALIDA DE ENABLE AL PAD, PARA LLAMAR SU ATENCION
ACK EQU 0X04 ;PIN 3 ENTRADA DE RECONOCIMIENTO DEL PAD
; PORTB MODO NORMAL CD32
FIRE2 EQU 0X00 ;PIN 6 NO USE ENABLE CD32
UP EQU 0X01 ;PIN 7 UP --
LEFT EQU 0X02 ;PIN 8 LEFT --
DOWN EQU 0X03 ;PIN 9 DOWN --
RIGHT EQU 0X04 ;PIN 10 RIGHT --
FIRE1 EQU 0X05 ;PIN 11 FIRE 1 DATA OUT
FIRE0 EQU 0X06 ;PIN 12 FIRE 1 CLOCK IN
NCONN EQU 0X07 ;PIN 13 -- --
;
STATUS EQU 3 ; REGISTRO DE ESTADO
PORTA EQU 5 ; REGISTRO DEL PUERTO A
PORTB EQU 6 ; REGISTRO DEL PUERTO B
TRISA EQU H'85' ; REGISTRO DE FUNCION PUERTO A 1=IN, 0=OUT
TRISB EQU H'86' ; REGISTRO DE FUNCION PUERTO B 1=IN, 0=OUT
RP1 EQU 6 ; REGISTRO DE SELECCION DE BANCO, JUNTO CON RP0
RP0 EQU 5 ; IDEM RP1 00=B0, 01=B1, 10=B2, 11=B3
OPTION EQU H'81' ; REGISTRO DE OPCIONES
INTCON EQU H'0B' ; REGISTRO DE ESTADO DE INTERRUPCIONES
Z EQU H'02' ; INDICADOR DE ZERO DE REGISTRO STATUS
C EQU H'00' ; INDICADOR DE ACARREO DE 8 BIT
DC EQU H'01' ; INDICADOR DE ACARREO DE LOS 4 BIT DE MENOS PESO
TMR0 EQU H'01' ; REGISTRO DEL TEMPORIZADOR PRINCIPAL
;**** BITS DEL REGISTRO DE OPCIONES OPTION
RBPU EQU 7 ;BIT DE CONEXION DE CARGAS PULL-UP PORTB (1=QUITADAS)
INTEDG EQU 6 ;TIPO DE FLANCO DE INTERRUPCION EXTERNA (1= ASCENDENTE)
T0CS EQU 5 ;FUENTE DE RELOG PARA TMR0 (1=EXTERNO)
T0SE EQU 4 ;TIPO DE FLANCO PARA TMR0 (1=DESCENDENTE)
PSA EQU 3 ;ASIGNACION DEL DIVISOR (1=WDT; 0=TMR0)
PS2 EQU 2 ;VALOR DEL PREDIVISOR
PS1 EQU 1 ;
PS0 EQU 0 ;
;**** BITS DEL REGISTRO DE INTERRUPCIONES INTCON
GIE EQU 7 ;BIT DE HABILITACION DE INTERRUPCIONES
PEIE EQU 6 ;BIT DE ACTIVACION DEL COMPARADOR
T0IE EQU 5 ;BIT ACTIVACION DE INTERRUPCION DE TMR0
INTE EQU 4 ;BIT ACTIVACION DE INTERRUPCION EXTERNA
RBIE EQU 3 ;BIT DE ACTIVACION DE PORTB
T0IF EQU 2 ;FLAG REBOSAMIENTO DE TMR0
INTF EQU 1 ;FLAG DE ESTADO INTERRUPCION EXTERNA
RBIF EQU 0 ;FLAG DE ESTADO INTERRUPCION PORTB
NOP
CALL PUERTOS
CALL DEFECTO
GOTO MAIN
CD32OUT: ;RUTINA DE ATENCION A IRQ
MOVWF ALMACENW ;GUARDA CONTENIDO DE W
BSF STATUS,RP0 ;PONE FIRE0 COMO ENTRADA
BSF PORTB,FIRE0 ;PONER FIRE0 COMO ENTRADA DE RELOG
BCF STATUS,RP0
WCLKE: BTFSC PORTB,FIRE2 ;ESPERA A QUE LA LINEA DE RELOG ESTE A 1
GOTO SALIR32 ;Y COMPRUEBA QUE NO SE HAYA TERMINADO LA TRANSMISION
BTFSS PORTB,FIRE0
GOTO WCLKE
TX32A: BTFSS CD32TX,0
BCF PORTB,FIRE1 ;MANDA 0
BTFSC CD32TX,0
BSF PORTB,FIRE1 ;MANDA 1
RRF CD32TX,F ;ROTA EL BYTE A MANDAR
WCLKU: BTFSC PORTB,FIRE2 ;ESPERA QUE LA LINEA DE RELOG ESTE A 0
GOTO SALIR32
BTFSC PORTB,FIRE0
GOTO WCLKU
GOTO WCLKE ;REPITE LA RUTINA
SALIR32:
BSF STATUS,RP0 ;RESTABLECE F0 COMO SALIDA
BCF PORTB,FIRE0
BCF STATUS,RP0
; MOVF OUT,W ;COLOCA LOS DATOS EN LA SALIDA COMO ANTES DE LA IRQ
; MOVWF PORTB
MOVF CD32TXB,W ;RESTABLECE EL REGISTRO CD32TX, POR SI SE PRODUCE OTRA IRQ TEMPRANA
MOVWF CD32TX
SWAPF ALMACENW,F ;RESTAURA EL VALOR DE W COMO ANTES DE LA IRQ
SWAPF ALMACENW,W ;
BCF INTCON,INTF ;BORRA EL FLAG DE INTERRUPCION EXTERNA
RETFIE
MAIN:
CALL PAD
CALL BIGDELAY
CALL BIGDELAY
CALL JOYOUT
CALL BIGDELAY
CALL PREP32
CALL BIGDELAY
GOTO MAIN
PAD: ;RUTINA DE LECTURA DE DATOS DEL PAD
BCF PORTA,ATT ;LLAMA LA ATENCION DEL PAD
CALL BIGDELAY ;ESPERA UN POCO
MOVLW 0X01 ;MANDA UN 01 AL PAD PARA RESETEARLO
MOVWF TX_D
CALL TX_RX
CALL BIGDELAY ;ESPERA OTRO POCO
MOVLW 0X42 ;MANDA UN 42 PARA PEDIR LOS DATOS DEL PAD
MOVWF TX_D
CALL TX_RX ; SIMULTANEAMENTE SE RECIBE EL TIPO DE PAD CONECTADO
; 0X41=PAD DIGITAL/ 0X23=NEGCOM/ 0X73=ANALOGICO ROJO
; 0X53=ANALOGICO VERDE/ 0X23=RATON PSX
;**** PROXIMAMENTE SE DEBERIA HACER COMPATIBILIDAD*****
CALL BIGDELAY ;ESPERA UN POCO
CALL TX_RX ; SE ENVIA UN DATO VACIO FF
;SIMULTANEAMENTE SE RECIBE UN 0X5A INDICANDO QUE SE VA A TRANSMITIR
CALL BIGDELAY ;SE ESPERA OTRO POCO MAS
CALL TX_RX ;SE RECIBE EL PRIMER BYTE UTIL
MOVF BYTE,W
MOVWF BYTE1 ;Y SE GUARDA EN EL REGISTRO BYTE1
CALL BIGDELAY ;OTRA PAUSA
CALL TX_RX ;SE RECIBE EL SEGUNDO BYTE UTIL
MOVF BYTE,W
MOVWF BYTE2 ;Y SE GUARDA EN EL REGISTRO BYTE2
CALL BIGDELAY ;OTRA PEQUEŃA PAUSA
BSF PORTA,ATT ;SE DEJA LIBRE EL PAD, SE LE LIBERA DE ATENCION
RETURN
; CRONOCGRAMA DEL PROTOCOLO PARA MANDAR Y RECIBIR UN BYTE
; BIT0 BIT1 BIT2 BIT3 BIT4 BIT5 BIT6 BIT7
;clock---___---___---___---___---___---___---___---___------------
;data ---000000111111222222333333444444555555666666777777---------
; * * * * * * * *
;comm ---000000111111222222333333444444555555666666777777---------
;ack ------------------------------------------------------___---
; |-4ľS-|
TX_RX: ;RUTINA QUE TRANSMITE Y RECIBE SIMULTANEAMENTE UN BYTE AL PAD
MOVLW 0X08 ;PONE EL NUMERO DE BIT A TRANSMITIR EN EL CONTADOR 3
MOVWF CONT3
LOOP_1:
BCF PORTA,CLK ;PONE A NIVEL BAJO LA LINEA DE RELOG
BTFSC TX_D,0 ;PONE EL VALOR ADECUADO EN LA LINEA COMM
BSF PORTA,COMM
BTFSS TX_D,0
BCF PORTA,COMM
RRF TX_D,F ;ROTA EL BYTE A MANDAR
RRF BYTE,F ;ROTA EL BYTE A RECIBIR
NOP ;ESPERA SIN HACER NADA AL MENOS 1.5 uS
NOP
NOP
NOP
NOP
NOP
BCF BYTE,7
BSF PORTA,CLK ;PONE A UNO LA LINEA DE RELOG
BTFSC PORTA,DATA ;LEE EL DATO PRESENTE EN LA LINEA DATA
BSF BYTE,7
; BSF PORTA,CLK ;PONE A UNO LA LINEA DE RELOG
NOP ;ESPERA SI HACER NADA AL MENOS 1.5uD
NOP
NOP
NOP
NOP
NOP
DECFSZ CONT3,F ;COMPRUEBA SI ERA EL ULTIMO BIT
GOTO LOOP_1 ;SI NO ES EL ULTIMO LEE EL SIGUIENTE
MOVLW 0XFF ;SI ES EL ULTIMO CARGA FF EN EL REGISTRO A TRANSMITIR
MOVWF TX_D
BSF PORTA,COMM ;Y DEJA LA LINEA COMM A NIVEL ALTO
RETURN
; CONTENIDO DE LOS BYTES TRANSMITIDOS POR EL PAD DIGITAL Y ANALOGICO ROJO
; BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
;BYTE1 IZQDA ABAJO DRCHA ARRBA STAR - - SELECT
;BITE2 (|_|) (X) (O) (/\) R1 L1 R2 L2
; CONTENIDO DEL BYTE DE TRANSMISION AL AMIGA EN MODO CD32
; BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
;CD32TX PLAY << >> VERDE AMRLL ROJO
;EQU START L1 R1 (|_|) (/\) (X)
;EL BOTON AZUL NO ES NECESARIO TRANSMITIRLO QUE EQUIVALE A (O)
JOYOUT:
MOVLW 0XFF
MOVWF OUT
BTFSS BYTE1,4 ;SI SE PULSA ARRIBA
BCF OUT,UP
BTFSS BYTE1,5 ;SI SE PULSA DERECHA
BCF OUT,RIGHT
BTFSS BYTE1,6 ;SI SE PULSA ABAJO
BCF OUT,DOWN
BTFSS BYTE1,7 ;SI SE PULSA IZQUIERDA
BCF OUT,LEFT
BTFSS BYTE2,1 ;SI SE PULSA R2
CALL AUTOFIRE
BTFSS BYTE2,5 ;SI SE PULSA (O)
BCF OUT,FIRE1
BTFSS BYTE2,6 ;SI SE PULSA (X)
BCF OUT,FIRE0
MOVF OUT,W
MOVWF PORTB
RETURN
AUTOFIRE:
DECFSZ FIREVEL,F
RETURN
BCF BYTE2,6
MOVLW 0X04 ;ESTE VALOR AJUSTA LA VELOCIDAD DE AUTOFIRE -=+VEL
MOVWF FIREVEL
RETURN
;
PREP32:
;RUTINA TRADUCTORA DE PSX A PROTOCOLO CD32
BSF CD32TX,6
BSF CD32TX,7
BTFSS BYTE1,3 ;SI SE PULSA STAR
BCF CD32TX,5 ;EQUIVALE A PLAY/PAUSA
BTFSS BYTE2,2 ;SI SE PULSA L1
BCF CD32TX,4 ;EQUVALE A <<
BTFSS BYTE2,3 ;SI SE PULSA R1
BCF CD32TX,3 ;EQUVALE A >>
BTFSS BYTE2,4 ;SI SE PULSA TRIANGULO
BCF CD32TX,1 ;EQUVALE A AMARILLO
BTFSS BYTE2,7 ;SI SE PULSA CUADRADO
BCF CD32TX,2 ;EQUIVALE A VERDE
BTFSS BYTE2,6 ;SI SE PULSA (X)
BCF CD32TX,0 ;EQUIVALE A ROJO
BTFSC BYTE1,3 ;SI NO SE PULSA STAR
BSF CD32TX,5 ;EQUIVALE A PLAY/PAUSA
BTFSC BYTE2,2 ;SI NO SE PULSA L1
BSF CD32TX,4 ;EQUVALE A <<
BTFSC BYTE2,3 ;SI NO SE PULSA R1
BSF CD32TX,3 ;EQUVALE A >>
BTFSC BYTE2,4 ;SI NO SE PULSA TRIANGULO
BSF CD32TX,1 ;EQUVALE A AMARILLO
BTFSC BYTE2,7 ;SI NO SE PULSA CUADRADO
BSF CD32TX,2 ;EQUIVALE A VERDE
BTFSC BYTE2,6 ;SI NO SE PULSA (X)
BSF CD32TX,0 ;EQUIVALE A ROJO
MOVF CD32TX,W
MOVWF CD32TXB
RETURN
PUERTOS:
;ASIGNACION DE LAS PATILLAS DE I/O
BSF STATUS,RP0
BSF PORTA,DATA
BCF PORTA,COMM
BCF PORTA,CLK
BCF PORTA,ATT
BCF PORTB,FIRE0
BCF PORTB,FIRE1
BSF PORTB,FIRE2
BCF PORTB,UP
BCF PORTB,DOWN
BCF PORTB,LEFT
BCF PORTB,RIGHT
BCF OPTION,INTEDG
BSF OPTION,RBPU
BCF STATUS,RP0
RETURN
DEFECTO:
;ASIGNACION DE VALORES POR DEFECTO A REGISTROS Y PATILLAS
;INICIALIZACION DE INTERRUPCIONES
BSF PORTA,ATT
BSF PORTA,CLK
BSF PORTA,COMM
MOVLW 0X02
MOVWF FIREVEL
BCF INTCON,INTF
BSF INTCON,GIE
BSF INTCON,INTE
RETURN
DELAY:
MOVWF CONT1
LOOP1:
DECFSZ CONT1,F
GOTO LOOP1
RETURN
BIGDELAY:
MOVLW 0X0A
MOVWF CONT2
MOVLW 0X0A
LOOP2:
CALL DELAY
DECFSZ CONT2,F
GOTO LOOP2
RETURN
END
------------- další část ---------------
:1000000000009220A2201F289B008316061783124F
:1000100006181628061F0828161C8612161886169B
:10002000960C06181628061B112808288316061396
:1000300083121D0896009B0E1B0E8B1009002720B3
:10004000AF20AF205C20AF207520AF201F28851186
:10005000AF20013090003D20AF20423090003D2085
:10006000AF203D20AF203D2019089800AF203D2053
:1000700019089700AF208515080008309300051176
:1000800010188514101C8510900C990C00000000AD
:1000900000000000000000009913051505189917CD
:1000A000000000000000000000000000930B3F284B
:1000B000FF30900085140800FF309100181E911049
:1000C000981E1112181F9111981F1111971C6F2063
:1000D000971E9112171F11131108860008009C0B20
:1000E0000800171304309C00080016179617981D77
:1000F0009612171D1612971D9611171E9610971F10
:100100001611171F16109819961617191616971903
:100110009615171A9614971B1615171B1614160802
:100120009D0008008316051485100511851106131E
:100130008612061486108611061106120113811705
:100140008312080085150515851402309C008B105C
:100150008B170B1608009500950BAC2808000A3089
:1001600094000A30AB20940BB2280800FF3FFF3FF9
:10400000FF3FFF3FFF3FFF3FFF3FFF3FFF3FF93FC6
:00000001FF
------------- další část ---------------
MPASM 4.00 Released PSX2.ASM 3-28-2005 17:39:52 PAGE 1
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00001 ;
; CREATED BY ACKMAN APPE V3c.0
;
; ADAPTADOR DE MANDO DE PSX PARA AMIGA CON EMULACION DE PAD CD32
;
PROCESADOR PIC16F84/10 MHZ
;
;bug en la rutina de comunicacion con el pad solucionado...
;
00002 END
MPASM 4.00 Released PSX2.ASM 3-28-2005 17:39:52 PAGE 2
SYMBOL TABLE
LABEL VALUE
__16F84A 00000001
MEMORY USAGE MAP ('X' = Used, '-' = Unused)
All other memory blocks unused.
Program Memory Words Used: 0
Program Memory Words Free: 1024
Errors : 0
Warnings : 0 reported, 0 suppressed
Messages : 0 reported, 0 suppressed
------------- další část ---------------
#PIC V1.0 (c)1997 J.Petroglou LIST FILE
#file: appe_v3dma.asm
#date: Fri Jul 14 17:37:16 2000
#pic : PIC16C84
ADDR CODE SRCLINE SOURCECODE
0000 000001 ;
0000 000002 ; CREATED BY ACKMAN APPE V3c.0
0000 000003 ;
0000 000004 ; ADAPTADOR DE MANDO DE PSX PARA AMIGA CON EMULACION DE PAD CD32
0000 000005 ; PROCESADOR PIC16F84/10 MHZ
0000 000006 ;
0000 000007 ;bug en la rutina de comunicacion con el pad solucionado...
0000 000008 ;
0000 000009 DEVICE 16C84, XT_OSC, PROTECT_OFF, WDT_OFF
0000 000010
0000 000011 ; LITERALS
0000 000012
0000 000013 ; REGISTROS
0000 000014 TX_D EQU 0X10 ;CONTIENE EL BYTE A TRANSMITIR AL PAD PSX
0000 000015 OUT EQU 0X11 ;CONTIENE EL BYTE A PONER EN EL JOYSTIC DE AMIGA EN MODO NORMAL
0000 000016 FLAG EQU 0X12 ;REGISTRO DE FLAG INTERNOS DEL PROGRAMA
0000 000017 CONT3 EQU 0X13 ;CONTADOR GENERICO 3
0000 000018 CONT2 EQU 0X14 ;CONTADOR GENERICO 2
0000 000019 CONT1 EQU 0X15 ;CONTADOR GENERICO 1
0000 000020 CD32TX EQU 0X16 ;CONTIENE EL DATO A TRANSMITIR AL AMIGA EN MODO CD32
0000 000021 BYTE2 EQU 0X17 ;CONTIENE EL SEGUNDO BYTE UTIL RECIBIDO DEL PAD PSX
0000 000022 BYTE1 EQU 0X18 ;CONTIENE EL PRIMER BYTE UTIL RECIBIDO DEL PAD PSX
0000 000023 BYTE EQU 0X19 ;CONTIENE EL BYTE QUE SE ESTA RECIBIENDO DEL PAD PSX
0000 000024 ALMACENS EQU 0X1A ;CONTIENE EL VALOR DEL STATUS DURANTE LAS IRQ
0000 000025 ALMACENW EQU 0X1B ;CONTIEN EL VALOR DE W DURANTE LAS IRQ
0000 000026 FIREVEL EQU 0X1C ;CONTIEN LA VELOCIDAD DEL AUTOFIRE A MAS VALOR= MENOS VELOCIDAD
0000 000027 CD32TXB EQU 0X1D ;REGISTRO DE RESGUARDO DE VALOR A TRANSMITIR EN MODO CD32
0000 000028
0000 000029 ; PORTA
0000 000030 DATA EQU 0X00 ;PIN 17 ENTRADA DE DATOS DEL PAD PSX
0000 000031 COMM EQU 0X01 ;PIN 18 SALIDA DE DATOS AL PAD PSX
0000 000032 CLK EQU 0X02 ;PIN 1 SALIDA DE SINCRONISMO AL PAD
0000 000033 ATT EQU 0X03 ;PIN 2 SALIDA DE ENABLE AL PAD, PARA LLAMAR SU ATENCION
0000 000034 ACK EQU 0X04 ;PIN 3 ENTRADA DE RECONOCIMIENTO DEL PAD
0000 000035
0000 000036 ; PORTB MODO NORMAL CD32
0000 000037 FIRE2 EQU 0X00 ;PIN 6 NO USE ENABLE CD32
0000 000038 UP EQU 0X01 ;PIN 7 UP --
0000 000039 LEFT EQU 0X02 ;PIN 8 LEFT --
0000 000040 DOWN EQU 0X03 ;PIN 9 DOWN --
0000 000041 RIGHT EQU 0X04 ;PIN 10 RIGHT --
0000 000042 FIRE1 EQU 0X05 ;PIN 11 FIRE 1 DATA OUT
0000 000043 FIRE0 EQU 0X06 ;PIN 12 FIRE 1 CLOCK IN
0000 000044 NCONN EQU 0X07 ;PIN 13 -- --
0000 000045
0000 000046
0000 000047
0000 000048 ;
0000 000049 STATUS EQU 3 ; REGISTRO DE ESTADO
0000 000050 PORTA EQU 5 ; REGISTRO DEL PUERTO A
0000 000051 PORTB EQU 6 ; REGISTRO DEL PUERTO B
0000 000052 TRISA EQU H'85' ; REGISTRO DE FUNCION PUERTO A 1=IN, 0=OUT
0000 000053 TRISB EQU H'86' ; REGISTRO DE FUNCION PUERTO B 1=IN, 0=OUT
0000 000054 RP1 EQU 6 ; REGISTRO DE SELECCION DE BANCO, JUNTO CON RP0
0000 000055 RP0 EQU 5 ; IDEM RP1 00=B0, 01=B1, 10=B2, 11=B3
0000 000056 OPTION EQU H'81' ; REGISTRO DE OPCIONES
0000 000057 INTCON EQU H'0B' ; REGISTRO DE ESTADO DE INTERRUPCIONES
0000 000058 Z EQU H'02' ; INDICADOR DE ZERO DE REGISTRO STATUS
0000 000059 C EQU H'00' ; INDICADOR DE ACARREO DE 8 BIT
0000 000060 DC EQU H'01' ; INDICADOR DE ACARREO DE LOS 4 BIT DE MENOS PESO
0000 000061 TMR0 EQU H'01' ; REGISTRO DEL TEMPORIZADOR PRINCIPAL
0000 000062 ;**** BITS DEL REGISTRO DE OPCIONES OPTION
0000 000063 RBPU EQU 7 ;BIT DE CONEXION DE CARGAS PULL-UP PORTB (1=QUITADAS)
0000 000064 INTEDG EQU 6 ;TIPO DE FLANCO DE INTERRUPCION EXTERNA (1= ASCENDENTE)
0000 000065 T0CS EQU 5 ;FUENTE DE RELOG PARA TMR0 (1=EXTERNO)
0000 000066 T0SE EQU 4 ;TIPO DE FLANCO PARA TMR0 (1=DESCENDENTE)
0000 000067 PSA EQU 3 ;ASIGNACION DEL DIVISOR (1=WDT; 0=TMR0)
0000 000068 PS2 EQU 2 ;VALOR DEL PREDIVISOR
0000 000069 PS1 EQU 1 ;
0000 000070 PS0 EQU 0 ;
0000 000071 ;**** BITS DEL REGISTRO DE INTERRUPCIONES INTCON
0000 000072 GIE EQU 7 ;BIT DE HABILITACION DE INTERRUPCIONES
0000 000073 PEIE EQU 6 ;BIT DE ACTIVACION DEL COMPARADOR
0000 000074 T0IE EQU 5 ;BIT ACTIVACION DE INTERRUPCION DE TMR0
0000 000075 INTE EQU 4 ;BIT ACTIVACION DE INTERRUPCION EXTERNA
0000 000076 RBIE EQU 3 ;BIT DE ACTIVACION DE PORTB
0000 000077 T0IF EQU 2 ;FLAG REBOSAMIENTO DE TMR0
0000 000078 INTF EQU 1 ;FLAG DE ESTADO INTERRUPCION EXTERNA
0000 000079 RBIF EQU 0 ;FLAG DE ESTADO INTERRUPCION PORTB
0000 000080
0000 0000 000081 NOP
0001 2092 000082 CALL PUERTOS
0002 20A2 000083 CALL DEFECTO
0003 281F 000084 GOTO MAIN
0004 000085
0004 000086 CD32OUT: ;RUTINA DE ATENCION A IRQ
0004 009B 000087 MOVWF ALMACENW ;GUARDA CONTENIDO DE W
0005 1683 000088 BSF STATUS,RP0 ;PONE FIRE0 COMO ENTRADA
0006 1706 000089 BSF PORTB,FIRE0 ;PONER FIRE0 COMO ENTRADA DE RELOG
0007 1283 000090 BCF STATUS,RP0
0008 000091
0008 1806 000092 WCLKE: BTFSC PORTB,FIRE2 ;ESPERA A QUE LA LINEA DE RELOG ESTE A 1
0009 2816 000093 GOTO SALIR32 ;Y COMPRUEBA QUE NO SE HAYA TERMINADO LA TRANSMISION
000A 1F06 000094 BTFSS PORTB,FIRE0
000B 2808 000095 GOTO WCLKE
000C 000096
000C 1C16 000097 TX32A: BTFSS CD32TX,0
000D 1286 000098 BCF PORTB,FIRE1 ;MANDA 0
000E 1816 000099 BTFSC CD32TX,0
000F 1686 000100 BSF PORTB,FIRE1 ;MANDA 1
0010 0C96 000101 RRF CD32TX,F ;ROTA EL BYTE A MANDAR
0011 000102
0011 1806 000103 WCLKU: BTFSC PORTB,FIRE2 ;ESPERA QUE LA LINEA DE RELOG ESTE A 0
0012 2816 000104 GOTO SALIR32
0013 1B06 000105 BTFSC PORTB,FIRE0
0014 2811 000106 GOTO WCLKU
0015 2808 000107 GOTO WCLKE ;REPITE LA RUTINA
0016 000108
0016 000109 SALIR32:
0016 1683 000110 BSF STATUS,RP0 ;RESTABLECE F0 COMO SALIDA
0017 1306 000111 BCF PORTB,FIRE0
0018 1283 000112 BCF STATUS,RP0
0019 000113 ; MOVF OUT,W ;COLOCA LOS DATOS EN LA SALIDA COMO ANTES DE LA IRQ
0019 000114 ; MOVWF PORTB
0019 081D 000115 MOVF CD32TXB,W ;RESTABLECE EL REGISTRO CD32TX, POR SI SE PRODUCE OTRA IRQ TEMPRANA
001A 0096 000116 MOVWF CD32TX
001B 0E9B 000117 SWAPF ALMACENW,F ;RESTAURA EL VALOR DE W COMO ANTES DE LA IRQ
001C 0E1B 000118 SWAPF ALMACENW,W ;
001D 108B 000119 BCF INTCON,INTF ;BORRA EL FLAG DE INTERRUPCION EXTERNA
001E 0009 000120 RETFIE
001F 000121
001F 000122 MAIN:
001F 2027 000123 CALL PAD
0020 20AF 000124 CALL BIGDELAY
0021 20AF 000125 CALL BIGDELAY
0022 205C 000126 CALL JOYOUT
0023 20AF 000127 CALL BIGDELAY
0024 2075 000128 CALL PREP32
0025 20AF 000129 CALL BIGDELAY
0026 281F 000130 GOTO MAIN
0027 000131
0027 000132 PAD: ;RUTINA DE LECTURA DE DATOS DEL PAD
0027 1185 000133 BCF PORTA,ATT ;LLAMA LA ATENCION DEL PAD
0028 20AF 000134 CALL BIGDELAY ;ESPERA UN POCO
0029 3001 000135 MOVLW 0X01 ;MANDA UN 01 AL PAD PARA RESETEARLO
002A 0090 000136 MOVWF TX_D
002B 203D 000137 CALL TX_RX
002C 20AF 000138 CALL BIGDELAY ;ESPERA OTRO POCO
002D 3042 000139 MOVLW 0X42 ;MANDA UN 42 PARA PEDIR LOS DATOS DEL PAD
002E 0090 000140 MOVWF TX_D
002F 203D 000141 CALL TX_RX ; SIMULTANEAMENTE SE RECIBE EL TIPO DE PAD CONECTADO
0030 000142 ; 0X41=PAD DIGITAL/ 0X23=NEGCOM/ 0X73=ANALOGICO ROJO
0030 000143 ; 0X53=ANALOGICO VERDE/ 0X23=RATON PSX
0030 000144 ;**** PROXIMAMENTE SE DEBERIA HACER COMPATIBILIDAD*****
0030 20AF 000145 CALL BIGDELAY ;ESPERA UN POCO
0031 203D 000146 CALL TX_RX ; SE ENVIA UN DATO VACIO FF
0032 000147 ;SIMULTANEAMENTE SE RECIBE UN 0X5A INDICANDO QUE SE VA A TRANSMITIR
0032 20AF 000148 CALL BIGDELAY ;SE ESPERA OTRO POCO MAS
0033 203D 000149 CALL TX_RX ;SE RECIBE EL PRIMER BYTE UTIL
0034 0819 000150 MOVF BYTE,W
0035 0098 000151 MOVWF BYTE1 ;Y SE GUARDA EN EL REGISTRO BYTE1
0036 20AF 000152 CALL BIGDELAY ;OTRA PAUSA
0037 203D 000153 CALL TX_RX ;SE RECIBE EL SEGUNDO BYTE UTIL
0038 0819 000154 MOVF BYTE,W
0039 0097 000155 MOVWF BYTE2 ;Y SE GUARDA EN EL REGISTRO BYTE2
003A 20AF 000156 CALL BIGDELAY ;OTRA PEQUEŃA PAUSA
003B 1585 000157 BSF PORTA,ATT ;SE DEJA LIBRE EL PAD, SE LE LIBERA DE ATENCION
003C 0008 000158 RETURN
003D 000159
003D 000160
003D 000161
003D 000162
003D 000163 ; CRONOCGRAMA DEL PROTOCOLO PARA MANDAR Y RECIBIR UN BYTE
003D 000164 ; BIT0 BIT1 BIT2 BIT3 BIT4 BIT5 BIT6 BIT7
003D 000165 ;clock---___---___---___---___---___---___---___---___------------
003D 000166 ;data ---000000111111222222333333444444555555666666777777---------
003D 000167 ; * * * * * * * *
003D 000168 ;comm ---000000111111222222333333444444555555666666777777---------
003D 000169 ;ack ------------------------------------------------------___---
003D 000170 ; |-4ľS-|
003D 000171
003D 000172 TX_RX: ;RUTINA QUE TRANSMITE Y RECIBE SIMULTANEAMENTE UN BYTE AL PAD
003D 3008 000173 MOVLW 0X08 ;PONE EL NUMERO DE BIT A TRANSMITIR EN EL CONTADOR 3
003E 0093 000174 MOVWF CONT3
003F 000175 LOOP_1:
003F 1105 000176 BCF PORTA,CLK ;PONE A NIVEL BAJO LA LINEA DE RELOG
0040 1810 000177 BTFSC TX_D,0 ;PONE EL VALOR ADECUADO EN LA LINEA COMM
0041 1485 000178 BSF PORTA,COMM
0042 1C10 000179 BTFSS TX_D,0
0043 1085 000180 BCF PORTA,COMM
0044 0C90 000181 RRF TX_D,F ;ROTA EL BYTE A MANDAR
0045 0C99 000182 RRF BYTE,F ;ROTA EL BYTE A RECIBIR
0046 0000 000183 NOP ;ESPERA SIN HACER NADA AL MENOS 1.5 uS
0047 0000 000184 NOP
0048 0000 000185 NOP
0049 0000 000186 NOP
004A 0000 000187 NOP
004B 0000 000188 NOP
004C 1399 000189 BCF BYTE,7
004D 1505 000190 BSF PORTA,CLK ;PONE A UNO LA LINEA DE RELOG
004E 1805 000191 BTFSC PORTA,DATA ;LEE EL DATO PRESENTE EN LA LINEA DATA
004F 1799 000192 BSF BYTE,7
0050 000193 ; BSF PORTA,CLK ;PONE A UNO LA LINEA DE RELOG
0050 0000 000194 NOP ;ESPERA SI HACER NADA AL MENOS 1.5uD
0051 0000 000195 NOP
0052 0000 000196 NOP
0053 0000 000197 NOP
0054 0000 000198 NOP
0055 0000 000199 NOP
0056 000200
0056 0B93 000201 DECFSZ CONT3,F ;COMPRUEBA SI ERA EL ULTIMO BIT
0057 283F 000202 GOTO LOOP_1 ;SI NO ES EL ULTIMO LEE EL SIGUIENTE
0058 30FF 000203 MOVLW 0XFF ;SI ES EL ULTIMO CARGA FF EN EL REGISTRO A TRANSMITIR
0059 0090 000204 MOVWF TX_D
005A 1485 000205 BSF PORTA,COMM ;Y DEJA LA LINEA COMM A NIVEL ALTO
005B 0008 000206 RETURN
005C 000207
005C 000208
005C 000209 ; CONTENIDO DE LOS BYTES TRANSMITIDOS POR EL PAD DIGITAL Y ANALOGICO ROJO
005C 000210 ; BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
005C 000211 ;BYTE1 IZQDA ABAJO DRCHA ARRBA STAR - - SELECT
005C 000212 ;BITE2 (|_|) (X) (O) (/\) R1 L1 R2 L2
005C 000213
005C 000214
005C 000215 ; CONTENIDO DEL BYTE DE TRANSMISION AL AMIGA EN MODO CD32
005C 000216 ; BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
005C 000217 ;CD32TX PLAY << >> VERDE AMRLL ROJO
005C 000218 ;EQU START L1 R1 (|_|) (/\) (X)
005C 000219
005C 000220
005C 000221
005C 000222 ;EL BOTON AZUL NO ES NECESARIO TRANSMITIRLO QUE EQUIVALE A (O)
005C 000223
005C 000224 JOYOUT:
005C 30FF 000225 MOVLW 0XFF
005D 0091 000226 MOVWF OUT
005E 1E18 000227 BTFSS BYTE1,4 ;SI SE PULSA ARRIBA
005F 1091 000228 BCF OUT,UP
0060 1E98 000229 BTFSS BYTE1,5 ;SI SE PULSA DERECHA
0061 1211 000230 BCF OUT,RIGHT
0062 1F18 000231 BTFSS BYTE1,6 ;SI SE PULSA ABAJO
0063 1191 000232 BCF OUT,DOWN
0064 1F98 000233 BTFSS BYTE1,7 ;SI SE PULSA IZQUIERDA
0065 1111 000234 BCF OUT,LEFT
0066 1C97 000235 BTFSS BYTE2,1 ;SI SE PULSA R2
0067 206F 000236 CALL AUTOFIRE
0068 1E97 000237 BTFSS BYTE2,5 ;SI SE PULSA (O)
0069 1291 000238 BCF OUT,FIRE1
006A 1F17 000239 BTFSS BYTE2,6 ;SI SE PULSA (X)
006B 1311 000240 BCF OUT,FIRE0
006C 0811 000241 MOVF OUT,W
006D 0086 000242 MOVWF PORTB
006E 0008 000243 RETURN
006F 000244 AUTOFIRE:
006F 0B9C 000245 DECFSZ FIREVEL,F
0070 0008 000246 RETURN
0071 1317 000247 BCF BYTE2,6
0072 3004 000248 MOVLW 0X04 ;ESTE VALOR AJUSTA LA VELOCIDAD DE AUTOFIRE -=+VEL
0073 009C 000249 MOVWF FIREVEL
0074 0008 000250 RETURN
0075 000251
0075 000252 ;
0075 000253 PREP32:
0075 000254 ;RUTINA TRADUCTORA DE PSX A PROTOCOLO CD32
0075 1716 000255 BSF CD32TX,6
0076 1796 000256 BSF CD32TX,7
0077 1D98 000257 BTFSS BYTE1,3 ;SI SE PULSA STAR
0078 1296 000258 BCF CD32TX,5 ;EQUIVALE A PLAY/PAUSA
0079 1D17 000259 BTFSS BYTE2,2 ;SI SE PULSA L1
007A 1216 000260 BCF CD32TX,4 ;EQUVALE A <<
007B 1D97 000261 BTFSS BYTE2,3 ;SI SE PULSA R1
007C 1196 000262 BCF CD32TX,3 ;EQUVALE A >>
007D 1E17 000263 BTFSS BYTE2,4 ;SI SE PULSA TRIANGULO
007E 1096 000264 BCF CD32TX,1 ;EQUVALE A AMARILLO
007F 1F97 000265 BTFSS BYTE2,7 ;SI SE PULSA CUADRADO
0080 1116 000266 BCF CD32TX,2 ;EQUIVALE A VERDE
0081 1F17 000267 BTFSS BYTE2,6 ;SI SE PULSA (X)
0082 1016 000268 BCF CD32TX,0 ;EQUIVALE A ROJO
0083 1998 000269 BTFSC BYTE1,3 ;SI NO SE PULSA STAR
0084 1696 000270 BSF CD32TX,5 ;EQUIVALE A PLAY/PAUSA
0085 1917 000271 BTFSC BYTE2,2 ;SI NO SE PULSA L1
0086 1616 000272 BSF CD32TX,4 ;EQUVALE A <<
0087 1997 000273 BTFSC BYTE2,3 ;SI NO SE PULSA R1
0088 1596 000274 BSF CD32TX,3 ;EQUVALE A >>
0089 1A17 000275 BTFSC BYTE2,4 ;SI NO SE PULSA TRIANGULO
008A 1496 000276 BSF CD32TX,1 ;EQUVALE A AMARILLO
008B 1B97 000277 BTFSC BYTE2,7 ;SI NO SE PULSA CUADRADO
008C 1516 000278 BSF CD32TX,2 ;EQUIVALE A VERDE
008D 1B17 000279 BTFSC BYTE2,6 ;SI NO SE PULSA (X)
008E 1416 000280 BSF CD32TX,0 ;EQUIVALE A ROJO
008F 0816 000281 MOVF CD32TX,W
0090 009D 000282 MOVWF CD32TXB
0091 0008 000283 RETURN
0092 000284
0092 000285 PUERTOS:
0092 000286 ;ASIGNACION DE LAS PATILLAS DE I/O
0092 000287
0092 1683 000288 BSF STATUS,RP0
0093 1405 000289 BSF PORTA,DATA
0094 1085 000290 BCF PORTA,COMM
0095 1105 000291 BCF PORTA,CLK
0096 1185 000292 BCF PORTA,ATT
0097 1306 000293 BCF PORTB,FIRE0
0098 1286 000294 BCF PORTB,FIRE1
0099 1406 000295 BSF PORTB,FIRE2
009A 1086 000296 BCF PORTB,UP
009B 1186 000297 BCF PORTB,DOWN
009C 1106 000298 BCF PORTB,LEFT
009D 1206 000299 BCF PORTB,RIGHT
009E 1301 000300 BCF OPTION,INTEDG
009F 1781 000301 BSF OPTION,RBPU
00A0 1283 000302 BCF STATUS,RP0
00A1 000303
00A1 0008 000304 RETURN
00A2 000305
00A2 000306 DEFECTO:
00A2 000307 ;ASIGNACION DE VALORES POR DEFECTO A REGISTROS Y PATILLAS
00A2 000308 ;INICIALIZACION DE INTERRUPCIONES
00A2 1585 000309 BSF PORTA,ATT
00A3 1505 000310 BSF PORTA,CLK
00A4 1485 000311 BSF PORTA,COMM
00A5 3002 000312 MOVLW 0X02
00A6 009C 000313 MOVWF FIREVEL
00A7 108B 000314 BCF INTCON,INTF
00A8 178B 000315 BSF INTCON,GIE
00A9 160B 000316 BSF INTCON,INTE
00AA 000317
00AA 0008 000318 RETURN
00AB 000319
00AB 000320 DELAY:
00AB 0095 000321 MOVWF CONT1
00AC 000322 LOOP1:
00AC 0B95 000323 DECFSZ CONT1,F
00AD 28AC 000324 GOTO LOOP1
00AE 0008 000325 RETURN
00AF 000326 BIGDELAY:
00AF 300A 000327 MOVLW 0X0A
00B0 0094 000328 MOVWF CONT2
00B1 300A 000329 MOVLW 0X0A
00B2 000330 LOOP2:
00B2 20AB 000331 CALL DELAY
00B3 0B94 000332 DECFSZ CONT2,F
00B4 28B2 000333 GOTO LOOP2
00B5 0008 000334 RETURN
00B6 000335 END
Used Symbols
-----------------------------------------
TX_D 00000010
OUT 00000011
FLAG 00000012
CONT3 00000013
CONT2 00000014
CONT1 00000015
CD32TX 00000016
BYTE2 00000017
BYTE1 00000018
BYTE 00000019
ALMACENS 0000001A
ALMACENW 0000001B
FIREVEL 0000001C
CD32TXB 0000001D
DATA 00000000
COMM 00000001
CLK 00000002
ATT 00000003
ACK 00000004
FIRE2 00000000
UP 00000001
LEFT 00000002
DOWN 00000003
RIGHT 00000004
FIRE1 00000005
FIRE0 00000006
NCONN 00000007
STATUS 00000003
PORTA 00000005
PORTB 00000006
TRISA 00000085
TRISB 00000086
RP1 00000006
RP0 00000005
OPTION 00000081
INTCON 0000000B
Z 00000002
C 00000000
DC 00000001
TMR0 00000001
RBPU 00000007
INTEDG 00000006
T0CS 00000005
T0SE 00000004
PSA 00000003
PS2 00000002
PS1 00000001
PS0 00000000
GIE 00000007
PEIE 00000006
T0IE 00000005
INTE 00000004
RBIE 00000003
T0IF 00000002
INTF 00000001
RBIF 00000000
CD32OUT 00000004
WCLKE 00000008
TX32A 0000000C
WCLKU 00000011
SALIR32 00000016
MAIN 0000001F
PAD 00000027
TX_RX 0000003D
LOOP_1 0000003F
JOYOUT 0000005C
AUTOFIRE 0000006F
PREP32 00000075
PUERTOS 00000092
DEFECTO 000000A2
DELAY 000000AB
LOOP1 000000AC
BIGDELAY 000000AF
LOOP2 000000B2
Used Defines
-----------------------------------------
PROGRAM MEMORY USAGE TABLE: '-' = not used 'X' = used
0000 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX
0040 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX
0080 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXX----------
00C0 : ---------------- ---------------- ---------------- ----------------
0100 : ---------------- ---------------- ---------------- ----------------
0140 : ---------------- ---------------- ---------------- ----------------
0180 : ---------------- ---------------- ---------------- ----------------
01C0 : ---------------- ---------------- ---------------- ----------------
0200 : ---------------- ---------------- ---------------- ----------------
0240 : ---------------- ---------------- ---------------- ----------------
0280 : ---------------- ---------------- ---------------- ----------------
02C0 : ---------------- ---------------- ---------------- ----------------
0300 : ---------------- ---------------- ---------------- ----------------
0340 : ---------------- ---------------- ---------------- ----------------
0380 : ---------------- ---------------- ---------------- ----------------
03C0 : ---------------- ---------------- ---------------- ----------------
Program Memory Words Used: 0182
Program Memory Words Free: 0842
Errors: 0
Další informace o konferenci Hw-list