Blame | Last modification | View Log | Download | RSS feed
MPASM 5.68 MAIN.ASM 9-3-2018 10:12:20 PAGE 1
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00001
00002 list p=18f4420
00003 #include p18f4420.inc
00001 LIST
00002
00003 ;==========================================================================
00004 ; Build date : May 15 2016
00005 ; MPASM PIC18F4420 processor include
00006 ;
00007 ; (c) Copyright 1999-2016 Microchip Technology, All rights reserved
00008 ;==========================================================================
00009
01447 LIST
00004 #include defs.inc
00327 LIST
00005 #include equ.inc
00145 LIST
00006
00007
00008 Startup code 0x0000
000000 EF?? F??? 00009 goto Start
000004 0000 00010 nop
00011
00012 HighISR code 0x0008
000008 B2F2 00013 btfsc INTCON, INT0IF
00000A D??? 00014 rcall KbdInt ; INT0 -> dato da tastiera
00000C B2F0 00015 btfsc INTCON3, INT2IF
00000E 00FF 00016 reset ; INT2 -> reset
000010 92F2 00017 bcf INTCON, INT0IF ; resetta flag INT0
000012 0011 00018 retfie FAST
00019
00020 LowISR code 0x0018
000018 A0F0 00021 btfss INTCON3, INT1IF
00001A 0010 00022 retfie ; INT non generato da INT1 (linea DRQ)
00001C 90F0 00023 bcf INTCON3, INT1IF
00001E 8E?? 00024 bsf KFRFlag, KFRFULL ; segnala registri da leggere
000020 0010 00025 retfie
00026
00027
00028 code
00029
000000 00030 KbdInt:
000000 D??? 00031 rcall RxKeyb ; riceve byte da tastiera
00032 SCLOCKL ; disabilita TX da tastiera
000002 988A M bcf LATB, KCLKO
000004 B0?? 00033 btfsc KStatus, KRESET ; test reset
000006 00FF 00034 reset ; ricevuto reset in -> reset
000008 B2?? 00035 btfsc KStatus, KTIMEO ; test timeout
00000A 0012 00036 return ; scarta dato ricevuto se timeout
00000C AE?? 00037 btfss KStatus, KBRX ; test ricezione full
00000E 0012 00038 return ; ricezione incompleta -> scarta dato
00039 ldw KStatus ; test errore ricezione
000010 50?? M movf KStatus, w
MPASM 5.68 MAIN.ASM 9-3-2018 10:12:20 PAGE 2
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
000012 0B0C 00040 andlw KBRXERR
000014 E0?? 00041 bz KbdInt10 ; dato ricevuto OK
000016 0EFE 00042 movlw KBD_RESEND ; richiesta di re-invio alla tastiera
000018 D??? 00043 rcall TxKeyb
00001A B0?? 00044 btfsc KStatus, KRESET ; test reset
00001C 00FF 00045 reset ; ricevuto reset in -> reset
00001E 0012 00046 return ; ignora altri errori
00047
000020 00048 KbdInt10:
000020 0E00 00049 movlw 0x00 ; scarta codice 00 (overrun)
000022 5C?? 00050 subwf KBuf, W
000024 E0?? 00051 bz KbdInt99
000026 0EFF 00052 movlw 0xFF ; scarta codice FF (overrun/error)
000028 5C?? 00053 subwf KBuf, W
00002A E0?? 00054 bz KbdInt99
00002C 0EFE 00055 movlw KBD_RESEND ; scarta richiesta resend
00002E 5C?? 00056 subwf KBuf, W
000030 E0?? 00057 bz KbdInt99
000032 0EFA 00058 movlw KBD_ACK ; scarta ACK
000034 5C?? 00059 subwf KBuf, W
000036 E0?? 00060 bz KbdInt99
000038 0EAA 00061 movlw KBD_BAT ; scarta BAT
00003A 5C?? 00062 subwf KBuf, W
00003C E1?? 00063 bnz KbdInt11
00003E 8C?? 00064 bsf KbdFlag, KBBAT
000040 88?? 00065 bsf KbdFlag, KBBAT2
000042 9E?? 00066 bcf KbdFlag2, KBNOBAT
000044 D??? 00067 bra KbdInt99
00068
000046 00069 KbdInt11:
000046 0EFC 00070 movlw KBD_NOBAT ; scarta BAT failure
000048 5C?? 00071 subwf KBuf, W
00004A E1?? 00072 bnz KbdInt12
00004C 9C?? 00073 bcf KbdFlag, KBBAT
00004E 98?? 00074 bcf KbdFlag, KBBAT2
000050 8E?? 00075 bsf KbdFlag2, KBNOBAT
00076
000052 00077 KbdInt99:
00078 SCLOCKH ; abilita TX da tastiera
000052 888A M bsf LATB, KCLKO
000054 0012 00079 return
00080
000056 00081 KbdInt12: ; inserisce byte in coda
000056 0EF5 00082 movlw (RXBUFLEN - 9) ; lascia un limite di guardia di 8 bytes
000058 5C?? 00083 subwf RxCnt,W ; RxCnt - (RXBUFLEN - 9))
00005A B0D8 00084 btfsc STATUS, C ; C = 0 -> OK - spazio disponibile in coda
00005C 8E?? 00085 bsf RxFlag, RXOVR ; segnala condizione overrun
00086 ldw KBuf ; memorizza byte in coda
00005E 50?? M movf KBuf, w
000060 6EDE 00087 movwf POSTINC2
000062 2A?? 00088 incf RxCnt, f ; incrementa contatore bytes in coda
000064 0E3E 00089 movlw LOW(RxBufEnd) ; coda circolare - test puntatore
000066 5CD9 00090 subwf FSR2L, W ; FSR2L - LOW(RxBufEnd)
MPASM 5.68 MAIN.ASM 9-3-2018 10:12:20 PAGE 3
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
000068 0E01 00091 movlw HIGH(RxBufEnd) ; limite superiore H
00006A 58DA 00092 subwfb FSR2H, W ; FSR2H - HIGH(RxBufEnd)
00006C B0D8 00093 btfsc STATUS, C ; C = 0 se FSR2 < RxBufEnd
00006E EE20 F040 00094 lfsr FSR2, RxBuffer ; reimposta puntatore a inizio buffer
00095
000072 00096 KbdInt20:
000072 AE?? 00097 btfss RxFlag, RXOVR ; se in condizioni di overrun disabilita TX
000074 D??? 00098 bra KbdInt99 ; riabilita trasmissione da tastiera
000076 0012 00099 return ; esce con CLK OUT LOW
00100
000078 00101 RxKeyb:
000078 6A?? 00102 clrf KStatus ; azzera status
00007A 0E08 00103 movlw D'8' ; contatore 8 bit
00007C 6E?? 00104 movwf KCnt
00007E 0E01 00105 movlw D'1' ; parity bit (odd)
000080 6E?? 00106 movwf KPar
000082 0E01 00107 movlw TMR0P4 ; TMR0 stop, prescaler = 4
000084 6ED5 00108 movwf T0CON ; modo 16 bit
000086 94F2 00109 bcf INTCON, TMR0IF ; azzera flag timeout
000088 0E9E 00110 movlw HIGH(T20MS) ; imposta timeout
00008A 6ED7 00111 movwf TMR0H ; caricare prima TMR0H
00008C 6E?? 00112 movwf T0CntH
00008E 0E58 00113 movlw LOW(T20MS)
000090 6ED6 00114 movwf TMR0L ; carica TMR0L/H
000092 6E?? 00115 movwf T0CntL
000094 8ED5 00116 bsf T0CON, TMR0ON ; start Timer 0
00117
000096 00118 RxKeyb1: ; attesa CLK IN -> LOW
000096 D??? 00119 rcall GetLine
000098 E6?? 00120 bmi RxKeyb1 ; CLK IN = HIGH - loop
00121
00009A 00122 RxKeyb2: ; loop attesa CLK IN -> HIGH
00009A D??? 00123 rcall GetLine
00009C E7?? 00124 bpl RxKeyb2 ; CLK IN = LOW - loop
00125
00009E 00126 RxKeyb3: ; loop attesa CLK IN -> LOW
00009E D??? 00127 rcall GetLine
0000A0 E6?? 00128 bmi RxKeyb3 ; CLK IN = HIGH - loop
0000A2 E3?? 00129 bnc RxKeyb4 ; no parity se DATA IN = LOW
0000A4 2A?? 00130 incf KPar, f ; incrementa parity
0000A6 80D8 00131 bsf STATUS, C ; forza CARRY = 1 (DATA IN = HIGH)
00132
0000A8 00133 RxKeyb4: ; aggiorna KBuf
0000A8 32?? 00134 rrcf KBuf, f ; KBuf<7> = CARRY
0000AA 2E?? 00135 decfsz KCnt, f ; decrementa contatore 8 bit
0000AC D??? 00136 bra RxKeyb2 ; loop 8 bit
00137
0000AE 00138 RxKeyb5: ; attesa CLK IN -> HIGH
0000AE D??? 00139 rcall GetLine
0000B0 E7?? 00140 bpl RxKeyb5 ; CLK IN = LOW - loop
00141
0000B2 00142 RxKeyb6: ; attesa CLK IN -> LOW
0000B2 D??? 00143 rcall GetLine
MPASM 5.68 MAIN.ASM 9-3-2018 10:12:20 PAGE 4
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
0000B4 E6?? 00144 bmi RxKeyb6 ; CLK IN = HIGH - loop
0000B6 34?? 00145 rlcf KCnt, W ; C = parity bit -> W<0> = parity bit
0000B8 1A?? 00146 xorwf KPar, f ; confronto parity ricevuta con parity calcolata
0000BA 30?? 00147 rrcf KPar, W ; C = confronto parity
0000BC E3?? 00148 bnc RxKeyb7 ; C = 0 -> parity OK
0000BE 84?? 00149 bsf KStatus, KPARY ; imposta errore parity
00150
0000C0 00151 RxKeyb7: ; attesa CLK IN -> HIGH
0000C0 D??? 00152 rcall GetLine
0000C2 E7?? 00153 bpl RxKeyb7 ; CLK IN = LOW - loop
00154
0000C4 00155 RxKeyb8: ; attesa CLK IN -> LOW
0000C4 D??? 00156 rcall GetLine
0000C6 E6?? 00157 bmi RxKeyb8 ; CLK IN = HIGH - loop
0000C8 E2?? 00158 bc RxKeyb9 ; C = 1 -> stop bit OK
0000CA 86?? 00159 bsf KStatus, KSTOP ; segnala errore bit stop errato
00160
0000CC 00161 RxKeyb9: ; attesa CLK IN -> HIGH - fine trasmissione
0000CC D??? 00162 rcall GetLine
0000CE E7?? 00163 bpl RxKeyb9 ; CLK IN = LOW - loop
0000D0 8E?? 00164 bsf KStatus, KBRX ; segnala ricezione completata
0000D2 9ED5 00165 bcf T0CON, TMR0ON ; stop Timer 0
0000D4 94F2 00166 bcf INTCON, TMR0IF ; azzera flag timeout
0000D6 0012 00167 return
00168
0000D8 00169 GetLine:
0000D8 B4F2 00170 btfsc INTCON, TMR0IF ; test timeout
0000DA D??? 00171 bra GetLine2 ; timeout
00172 ldw PORTB
0000DC 5081 M movf PORTB, w
0000DE 0B0D 00173 andlw RBMASK ; maschera bit utili
0000E0 6E?? 00174 movwf TmpB ; salva temporaneo
00175 ldw PORTB
0000E2 5081 M movf PORTB, w
0000E4 0B0D 00176 andlw RBMASK ; maschera bit utili
0000E6 62?? 00177 cpfseq TmpB ; confronta con lettura precedente
0000E8 D??? 00178 bra GetLine ; attesa linee stabili o timeout
0000EA A4?? 00179 btfss TmpB, RESIN ; test asserzione reset da host
0000EC D??? 00180 bra GetLine1 ; reset da host
0000EE 98D8 00181 bcf STATUS, N ; N = 0 se CLK IN = LOW
0000F0 B6?? 00182 btfsc TmpB, KCLKIN
0000F2 88D8 00183 bsf STATUS, N ; N = 1 se CLK IN = HIGH
0000F4 90D8 00184 bcf STATUS, C ; C = 0 se DATA IN = LOW
0000F6 B0?? 00185 btfsc TmpB, KDATAIN
0000F8 80D8 00186 bsf STATUS, C ; C = 1 se DATA IN = HIGH
0000FA 0012 00187 return ; C = DATA IN, N = CLK IN
00188
0000FC 00189 GetLine1:
0000FC 80?? 00190 bsf KStatus, KRESET ; segnala reset
0000FE 0006 00191 pop ; scarta indirizzo di ritorno
000100 0012 00192 return ; uscita
00193
000102 00194 GetLine2:
MPASM 5.68 MAIN.ASM 9-3-2018 10:12:20 PAGE 5
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
000102 82?? 00195 bsf KStatus, KTIMEO ; segnala timeout
000104 9ED5 00196 bcf T0CON, TMR0ON ; stop Timer 0
000106 94F2 00197 bcf INTCON, TMR0IF ; azzera flag timeout
000108 0006 00198 pop ; scarta indirizzo di ritorno
00010A 0012 00199 return ; uscita
00200
00201
00010C 00202 TxKeyb:
00010C 6E?? 00203 movwf KBuf ; salva dato da trasmettere
00010E 6A?? 00204 clrf KStatus ; azzera status
000110 0E08 00205 movlw TMR0P0 ; TMR0 stop, no prescaler, modo 16 bit
000112 6ED5 00206 movwf T0CON
000114 94F2 00207 bcf INTCON, TMR0IF ; azzera flag timeout
000116 0EFE 00208 movlw HIGH(T100US) ; imposta timeout 100us
000118 6ED7 00209 movwf TMR0H ; caricare prima TMR0H
00011A 0E0C 00210 movlw LOW(T100US)
00011C 6ED6 00211 movwf TMR0L ; carica TMR0L/H
00011E 0E08 00212 movlw D'8' ; contatore 8 bit
000120 6E?? 00213 movwf KCnt
000122 0E01 00214 movlw D'1' ; parity bit (odd)
000124 6E?? 00215 movwf KPar
00216 SCLOCKL ; CLK OUT -> LOW - request to send
000126 988A M bcf LATB, KCLKO
000128 8ED5 00217 bsf T0CON, TMR0ON ; start Timer 0
00218
00012A 00219 TxKeyb1: ; ritardo 100us
00012A A4F2 00220 btfss INTCON, TMR0IF
00012C D??? 00221 bra TxKeyb1 ; loop ritardo
00222 SDATAL ; DATA OUT -> LOW (start bit)
00012E 9A8A M bcf LATB, KDATAO
000130 9ED5 00223 bcf T0CON, TMR0ON ; stop Timer 0
000132 94F2 00224 bcf INTCON, TMR0IF ; azzera flag timeout
000134 0E01 00225 movlw TMR0P4 ; TMR0 stop, prescaler = 4
000136 6ED5 00226 movwf T0CON ; modo 16 bit
000138 0E9E 00227 movlw HIGH(T20MS) ; imposta timeout
00013A 6ED7 00228 movwf TMR0H ; caricare prima TMR0H
00013C 0E58 00229 movlw LOW(T20MS)
00013E 6ED6 00230 movwf TMR0L ; carica TMR0L/H
000140 8ED5 00231 bsf T0CON, TMR0ON ; start Timer 0
00232 SCLOCKH ; CLK OUT -> HIGH (rilascia clock)
000142 888A M bsf LATB, KCLKO
00233
000144 00234 TxKeyb2: ; attesa CLK IN -> LOW
000144 D??? 00235 rcall GetLine
000146 E6?? 00236 bmi TxKeyb2 ; CLK IN = HIGH -> loop
00237
000148 00238 TxKeyb3: ; loop 8 bit
000148 32?? 00239 rrcf KBuf ; C = KBuf<0> - bit da inviare
00014A E3?? 00240 bnc TxKeyb4 ; C = 0 -> DATA OUT = LOW
00014C 2A?? 00241 incf KPar, f ; C = 1 -> aggiorna parity
00242 SDATAH ; DATA OUT = HIGH
00014E 8A8A M bsf LATB, KDATAO
000150 D??? 00243 bra TxKeyb5
MPASM 5.68 MAIN.ASM 9-3-2018 10:12:20 PAGE 6
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00244
000152 00245 TxKeyb4:
00246 SDATAL ; DATA OUT = LOW
000152 9A8A M bcf LATB, KDATAO
00247
000154 00248 TxKeyb5: ; invia bit
000154 D??? 00249 rcall GetLine ; attende CLK IN -> HIGH
000156 E7?? 00250 bpl TxKeyb5 ; CLK IN = LOW -> loop
00251
000158 00252 TxKeyb6:
000158 D??? 00253 rcall GetLine ; attende CLK IN -> LOW
00015A E6?? 00254 bmi TxKeyb6 ; CLK IN = HIGH -> loop
00015C 2E?? 00255 decfsz KCnt, f ; decrementa contatore 8 bit
00015E D??? 00256 bra TxKeyb3 ; loop 8 bit
000160 32?? 00257 rrcf KPar, f ; C = KPar<0> -> parity bit
000162 E3?? 00258 bnc TxKeyb7 ; C = 0 -> DATA OUT = LOW
00259 SDATAH ; DATA OUT = HIGH
000164 8A8A M bsf LATB, KDATAO
000166 D??? 00260 bra TxKeyb8
00261
000168 00262 TxKeyb7:
00263 SDATAL ; DATA OUT = LOW
000168 9A8A M bcf LATB, KDATAO
00264
00016A 00265 TxKeyb8:
00016A D??? 00266 rcall GetLine ; attende CLK IN -> HIGH
00016C E7?? 00267 bpl TxKeyb8 ; CLK IN = LOW -> loop
00268
00016E 00269 TxKeyb9:
00016E D??? 00270 rcall GetLine ; attende CLK IN -> LOW
000170 E6?? 00271 bmi TxKeyb9 ; CLK IN = HIGH -> loop
00272 SDATAH ; DATA OUT -> HIGH - stop bit
000172 8A8A M bsf LATB, KDATAO
00273
000174 00274 TxKeyb10:
000174 D??? 00275 rcall GetLine ; attende CLK IN -> HIGH
000176 E7?? 00276 bpl TxKeyb10 ; CLK IN = LOW -> loop
00277
000178 00278 TxKeyb11:
000178 D??? 00279 rcall GetLine ; attende CLK IN -> LOW
00017A E6?? 00280 bmi TxKeyb11 ; CLK IN = HIGH -> loop
00017C E3?? 00281 bnc TxKeyb12 ; C = 0 -> DATA IN = LOW - ack bit ok
00017E 88?? 00282 bsf KStatus, KBACK ; segnala errore ack bit
00283
000180 00284 TxKeyb12:
000180 D??? 00285 rcall GetLine ; attende CLK IN -> HIGH
000182 E7?? 00286 bpl TxKeyb12 ; CLK IN = LOW -> loop
000184 8C?? 00287 bsf KStatus, KBTX ; segnala trasmissione completata
000186 9ED5 00288 bcf T0CON, TMR0ON ; stop Timer 0
000188 94F2 00289 bcf INTCON, TMR0IF ; azzera flag timeout
00018A 0012 00290 return
00291
00018C 00292 GetKbd:
MPASM 5.68 MAIN.ASM 9-3-2018 10:12:20 PAGE 7
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00018C EC?? F??? 00293 call RxKeyb ; ricezione entro timeout
000190 B0?? 00294 btfsc KStatus, KRESET ; test reset
000192 00FF 00295 reset ; ricevuto reset in -> reset
000194 B2?? 00296 btfsc KStatus, KTIMEO ; test timeout
000196 D??? 00297 bra GetKbd10 ; errore ricezione
00298 ldw KStatus ; test errore ricezione
000198 50?? M movf KStatus, w
00019A 0B0C 00299 andlw KBRXERR
00019C E1?? 00300 bnz GetKbd10 ; dato ricevuto errato
00019E 90D8 00301 bcf STATUS, C ; C = = -> OK
0001A0 0012 00302 return
0001A2 00303 GetKbd10:
0001A2 80D8 00304 bsf STATUS, C ; C = 1 -> errore
0001A4 0012 00305 return
00306
0001A6 00307 SendLed:
0001A6 0EED 00308 movlw KBD_SETLED
0001A8 D??? 00309 rcall SendKbd
0001AA E2?? 00310 bc SendKbd10
00311 ldw LedSt
0001AC 50?? M movf LedSt, w
00312
0001AE 00313 SendKbd:
0001AE D??? 00314 rcall TxKeyb
0001B0 B0?? 00315 btfsc KStatus, KRESET ; test reset
0001B2 00FF 00316 reset ; ricevuto reset in -> reset
0001B4 B2?? 00317 btfsc KStatus, KTIMEO ; test timeout
0001B6 D??? 00318 bra SendKbd10 ; errore
0001B8 AC?? 00319 btfss KStatus, KBTX ; test trasmissione OK
0001BA D??? 00320 bra SendKbd10 ; trasmissione fallita - errore
0001BC AC?? 00321 btfss KStatus, KBTX ; test trasmissione OK
0001BE D??? 00322 bra SendKbd10 ; trasmissione fallita - errore
0001C0 B8?? 00323 btfsc KStatus, KBACK ; test errore ACK
0001C2 D??? 00324 bra SendKbd10 ; errore ACK
0001C4 D??? 00325 rcall GetKbd ; ricezione da tastiera
0001C6 E2?? 00326 bc SendKbd10 ; errore ricezione
0001C8 0EFA 00327 movlw KBD_ACK ; test ACK tastiera
0001CA 62?? 00328 cpfseq KBuf
0001CC D??? 00329 bra SendKbd10 ; errore
0001CE 90D8 00330 bcf STATUS, C ; C = = -> OK
0001D0 0012 00331 return
0001D2 00332 SendKbd10:
0001D2 80D8 00333 bsf STATUS, C ; C = 1 -> errore
0001D4 0012 00334 return
00335
0001D6 00336 InitIO:
0001D6 9CD0 00337 bcf RCON, 6
0001D8 82D0 00338 bsf RCON, 1
0001DA 6AF2 00339 clrf INTCON ; disabilita interrupt
0001DC 6AF1 00340 clrf INTCON2 ; RB0, RB1, RB2 int su fronte negativo
0001DE 6AF0 00341 clrf INTCON3
0001E0 6A9E 00342 clrf PIR1
0001E2 6AA1 00343 clrf PIR2
MPASM 5.68 MAIN.ASM 9-3-2018 10:12:20 PAGE 8
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
0001E4 6A9D 00344 clrf PIE1
0001E6 6AA0 00345 clrf PIE2
0001E8 6AC2 00346 clrf ADCON0 ; disabilita modulo A/D
0001EA 6892 00347 setf DDRA ; tutte le porte in input
0001EC 6893 00348 setf DDRB
0001EE 6894 00349 setf DDRC
0001F0 6895 00350 setf DDRD
0001F2 6896 00351 setf DDRE
0001F4 0E0F 00352 movlw B'00001111' ; tutte le porte I/O sono digitali
0001F6 6EC1 00353 movwf ADCON1
0001F8 6889 00354 setf LATA ; tutte le porte I/O a livello alto
0001FA 688A 00355 setf LATB
0001FC 688B 00356 setf LATC
0001FE 688C 00357 setf LATD
000200 6A8D 00358 clrf LATE ; porta RE a livello basso in uscita
000202 0EC3 00359 movlw B'11000011' ; RA<0:1> input, le altre output
000204 6E92 00360 movwf DDRA
000206 0ECF 00361 movlw B'11001111' ; RB<4:5> in output, le altre in input
000208 6E93 00362 movwf DDRB
00020A 6A94 00363 clrf DDRC ; porta C in uscita
00020C 9C8B 00364 bcf LATC, KBVOFF ; resetta alimentazione tastiera
00020E 6A96 00365 clrf DDRE ; porta E in uscita
000210 6AF8 00366 clrf TBLPTRU ; FLASH solo < 64K
000212 D??? 00367 rcall InitData ; inizializza variabili
00368
000214 00369 Init1: ; attesa linea reset in alta
000214 A481 00370 btfss PORTB, RESIN
000216 D??? 00371 bra Init1
00372
000218 8ED0 00373 bsf RCON, IPEN ; abilita int. priorizzati
00021A 9EF1 00374 bcf INTCON2, RBPU ; disabilita pull-up su porta B
00021C 8EF0 00375 bsf INTCON3, INT2IP ; alta priority per INT2 su RB2 (reset in)
00021E 9CF0 00376 bcf INTCON3, INT1IP ; bassa priority per INT1 su RB1 (linea DRQ)
000220 88F2 00377 bsf INTCON, INT0IE ; abilita INT0 su RB0 high priority (DATA IN)
000222 86F0 00378 bsf INTCON3, INT1IE ; abilita INT1 su RB1 (linea DRQ)
000224 88F0 00379 bsf INTCON3, INT2IE ; abilita INT2 su RB2 (linea reset in)
000226 8C8B 00380 bsf LATC, KBVOFF ; termina impulso negativo VCC tastiera
000228 0E0C 00381 movlw LOW(T100US) ; imposta ritardo 100us
00022A 6E?? 00382 movwf T0CntL
00022C 0EFE 00383 movlw HIGH(T100US)
00022E 6E?? 00384 movwf T0CntH
000230 D??? 00385 rcall Delay_us ; ritardo 100us
000232 9E8B 00386 bcf LATC, KBVON ; attiva alimentazione tastiera
000234 0E9C 00387 movlw LOW(T20US) ; imposta ritardo 20us
000236 6E?? 00388 movwf T0CntL
000238 0EFF 00389 movlw HIGH(T20US)
00023A 6E?? 00390 movwf T0CntH
00023C D??? 00391 rcall Delay_us ; ritardo 20us
00023E 8E8B 00392 bsf LATC, KBVON ; termina impulso negativo
000240 0EB0 00393 movlw LOW(T40MS) ; imposta ritardo 40ms per stabilizzare VCC
000242 6E?? 00394 movwf T0CntL
000244 0E3C 00395 movlw HIGH(T40MS)
000246 6E?? 00396 movwf T0CntH
MPASM 5.68 MAIN.ASM 9-3-2018 10:12:20 PAGE 9
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
000248 D??? 00397 rcall Delay_ms ; ritardo 40ms
00024A 92F2 00398 bcf INTCON, INT0IF ; resetta flag INT0 (eventuali impulsi spuri)
00024C 0E07 00399 movlw TMR0P256 ; TMR0 stop, prescaler = 256, modo 16 bit
00024E 6ED5 00400 movwf T0CON
000250 94F2 00401 bcf INTCON, TMR0IF ; azzera flag timeout
000252 0E8D 00402 movlw HIGH(T1500MS) ; imposta timeout 1500ms
000254 6ED7 00403 movwf TMR0H ; caricare prima TMR0H
000256 0E90 00404 movlw LOW(T1500MS)
000258 6ED6 00405 movwf TMR0L ; carica TMR0L/H
00025A 8ED5 00406 bsf T0CON, TMR0ON ; start Timer 0
00407
00025C 00408 Init2: ; loop attesa tastiera entro timeout 1500ms
00025C B4F2 00409 btfsc INTCON, TMR0IF
00025E D??? 00410 bra Init4 ; timeout
000260 B2F0 00411 btfsc INTCON3, INT2IF
000262 00FF 00412 reset ; INT2 -> reset
000264 A2F2 00413 btfss INTCON, INT0IF
000266 D??? 00414 bra Init2 ; loop
000268 9ED5 00415 bcf T0CON, TMR0ON ; stop Timer 0
00026A 94F2 00416 bcf INTCON, TMR0IF ; azzera flag timeout
00026C EC?? F??? 00417 call RxKeyb ; INT0 -> riceve dato da tastiera
000270 B0?? 00418 btfsc KStatus, KRESET ; test reset
000272 00FF 00419 reset ; ricevuto reset in -> reset
000274 B2?? 00420 btfsc KStatus, KTIMEO ; test timeout
000276 D??? 00421 bra Init4 ; scarta dato ricevuto se timeout
000278 AE?? 00422 btfss KStatus, KBRX ; test ricezione full
00027A D??? 00423 bra Init4 ; ricezione incompleta -> scarta dato
00424 ldw KStatus ; test errore ricezione
00027C 50?? M movf KStatus, w
00027E 0B0C 00425 andlw KBRXERR
000280 E1?? 00426 bnz Init4 ; dato ricevuto errato
000282 0EAA 00427 movlw KBD_BAT ; test BAT OK
000284 62?? 00428 cpfseq KBuf
000286 D??? 00429 bra KNoBAT ; no BAT OK !
000288 8C?? 00430 bsf KbdFlag, KBBAT ; imposta flag BAT OK
00028A 88?? 00431 bsf KbdFlag, KBBAT2 ; imposta flag BAT OK
00028C D??? 00432 bra Init3
00433
00028E 00434 KNoBAT:
00028E 0EFC 00435 movlw KBD_NOBAT ; test BAT failure
000290 62?? 00436 cpfseq KBuf
000292 D??? 00437 bra Init3
000294 8E?? 00438 bsf KbdFlag2, KBNOBAT ; imposta flag BAT FAILURE
00439
000296 00440 Init3:
000296 8E?? 00441 bsf KbdFlag, KBFND ; imposta flag tastiera presente
00442
000298 00443 Init4: ; KBFND indica tastiera prsente - se il flag e' resettato
00444 ; occorre fare ulteriore verifica della tastiera
000298 9ED5 00445 bcf T0CON, TMR0ON ; stop Timer 0
00029A 94F2 00446 bcf INTCON, TMR0IF ; azzera flag timeout
00029C 92F2 00447 bcf INTCON, INT0IF ; resetta flag INT0
00029E AE?? 00448 btfss KbdFlag, KBFND ; se tastiera presente salta ulteriore verifica
MPASM 5.68 MAIN.ASM 9-3-2018 10:12:20 PAGE 10
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
0002A0 D??? 00449 rcall KbVerf ; verifica tastiera
0002A2 92F2 00450 bcf INTCON, INT0IF ; resetta flag INT0
0002A4 AE?? 00451 btfss KbdFlag, KBFND ; se tastiera presente la inizializza
0002A6 D??? 00452 bra Init10 ; altrimenti esce
0002A8 AC?? 00453 btfss KbdFlag, KBBAT ; tastiera ok ?
0002AA D??? 00454 bra Init10 ; no -> esce
00455
00456 ; a questo punto tastiera presente e funzionante
00457 ; si legge ID tastiera
0002AC 92F2 00458 bcf INTCON, INT0IF ; resetta flag INT0
0002AE 0EF2 00459 movlw KBD_GETID
0002B0 EC?? F??? 00460 call SendKbd
0002B4 E2?? 00461 bc Init6 ; errore
0002B6 EC?? F??? 00462 call GetKbd ; riceve ID LOW
0002BA E2?? 00463 bc Init6 ; errore
00464 ldw KBuf
0002BC 50?? M movf KBuf, w
0002BE 6E?? 00465 movwf KbdIDL ; salva ID LOW
0002C0 EC?? F??? 00466 call GetKbd ; riceve ID LOW
0002C4 E2?? 00467 bc Init6 ; errore
00468 ldw KBuf
0002C6 50?? M movf KBuf, w
0002C8 6E?? 00469 movwf KbdIDH ; salva ID HIGH
0002CA 0EAB 00470 movlw KBD_IDL ; test ID
0002CC 62?? 00471 cpfseq KbdIDL
0002CE D??? 00472 bra Init6 ; ID LOW errato
0002D0 0E83 00473 movlw KBD_IDH ; test ID
0002D2 62?? 00474 cpfseq KbdIDH
0002D4 D??? 00475 bra Init6 ; ID HIGH errato
0002D6 8A?? 00476 bsf KbdFlag, KBVID ; imposta flag ID valido
00477
0002D8 00478 Init6:
0002D8 92F2 00479 bcf INTCON, INT0IF ; resetta flag INT0
0002DA 0EED 00480 movlw KBD_SETLED ; spegne LED
0002DC EC?? F??? 00481 call SendKbd
0002E0 E2?? 00482 bc Init61
0002E2 0E00 00483 movlw 0x00
0002E4 EC?? F??? 00484 call SendKbd
0002E8 E2?? 00485 bc Init61
0002EA 80?? 00486 bsf KbdFlag, KBLEDOK
00487
0002EC 00488 Init61:
0002EC 92F2 00489 bcf INTCON, INT0IF ; resetta flag INT0
0002EE 0EF0 00490 movlw KBD_SETSC ; imposta scancode 02
0002F0 EC?? F??? 00491 call SendKbd
0002F4 E2?? 00492 bc Init62
0002F6 0E02 00493 movlw 0x02
0002F8 EC?? F??? 00494 call SendKbd
0002FC E2?? 00495 bc Init62
0002FE 82?? 00496 bsf KbdFlag, KBSCOK
00497
000300 00498 Init62:
000300 92F2 00499 bcf INTCON, INT0IF ; resetta flag INT0
MPASM 5.68 MAIN.ASM 9-3-2018 10:12:20 PAGE 11
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
000302 0EF3 00500 movlw KBD_TYPERATE ; imposta typerate
000304 EC?? F??? 00501 call SendKbd
000308 E2?? 00502 bc Init63
00030A 0E0B 00503 movlw KBD_DEFRATE
00030C EC?? F??? 00504 call SendKbd
000310 E2?? 00505 bc Init63
000312 86?? 00506 bsf KbdFlag, KBRATE
00507
000314 00508 Init63:
000314 92F2 00509 bcf INTCON, INT0IF ; resetta flag INT0
000316 0EF4 00510 movlw KBD_ENABLE ; abilita scanning tastiera
000318 EC?? F??? 00511 call SendKbd
00031C E2?? 00512 bc Init10
00031E 84?? 00513 bsf KbdFlag, KBENABLE
00514
000320 00515 Init10:
00516 SCLOCKL ; disabilita TX da tastiera
000320 988A M bcf LATB, KCLKO
000322 0E03 00517 movlw 0x03 ; registro KFR 3
000324 6E8D 00518 movwf LATE
00519 ldw KbdFlag
000326 50?? M movf KbdFlag, w
000328 EC?? F??? 00520 call KFRWrite
00032C 92F2 00521 bcf INTCON, INT0IF ; resetta flag INT0
00032E 90F0 00522 bcf INTCON3, INT1IF ; resetta flag INT1
000330 92F0 00523 bcf INTCON3, INT2IF ; resetta flag INT2
000332 8EF2 00524 bsf INTCON, GIEH ; abilita INT high priority
000334 8CF2 00525 bsf INTCON, GIEL ; abilita INT low priority
000336 0012 00526 return
00527
000338 00528 InitData:
000338 EE00 F000 00529 lfsr FSR0, 0x0 ; azzera RAM banco 0, 1 & 2
00033C 0E03 00530 movlw 0x03 ; banco 3 non esiste !
00531
00033E 00532 InitData1:
00033E 6AEE 00533 clrf POSTINC0
000340 62EA 00534 cpfseq FSR0H
000342 D??? 00535 bra InitData1
00536
000344 0E04 00537 movlw 0x04 ; contatore registri
000346 6E?? 00538 movwf KFRRdCnt
000348 6A8D 00539 clrf LATE ; azzera indirizzo KFR
00034A 6A95 00540 clrf DDRD ; porta D in uscita
00034C 6A8C 00541 clrf LATD ; porta D tutti i bit bassi
00542
00034E 00543 InitData2:
00034E 0000 00544 nop ; scrittura su registro
000350 0000 00545 nop
000352 928B 00546 bcf LATC, KFRWE ; impulso write
000354 0000 00547 nop
000356 828B 00548 bsf LATC, KFRWE
000358 0000 00549 nop
00035A 2A8D 00550 incf LATE,f ; incrementa indirizzo
MPASM 5.68 MAIN.ASM 9-3-2018 10:12:20 PAGE 12
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00035C 2E?? 00551 decfsz KFRRdCnt, f ; loop
00035E D??? 00552 bra InitData2
000360 EE20 F040 00553 lfsr FSR2, RxBuffer ; imposta puntatore iniziale testa buffer RX
000364 EE10 F040 00554 lfsr FSR1, RxBuffer ; imposta puntatore iniziale coda buffer RX
000368 0E3E 00555 movlw LOW(TxBuffer) ; imposta puntatore Head, Tail TX a inizio buffer
00036A 6E?? 00556 movwf TxHeadL
00036C 6E?? 00557 movwf TxTailL
00036E 0E01 00558 movlw HIGH(TxBuffer)
000370 6E?? 00559 movwf TxHeadH
000372 6E?? 00560 movwf TxTailH
000374 0012 00561 return
00562
000376 00563 Delay_ms:
000376 0E01 00564 movlw TMR0P4 ; TMR0 stop, prescaler = 4, modo 16 bit
000378 D??? 00565 bra Delay_xx
00566
00037A 00567 Delay_us:
00037A 0E08 00568 movlw TMR0P0 ; TMR0 stop, no prescaler, modo 16 bit
00037C 00569 Delay_xx:
00037C 6ED5 00570 movwf T0CON
00037E 94F2 00571 bcf INTCON, TMR0IF ; azzera flag timeout
00572 ldw T0CntH ; imposta timeout high
000380 50?? M movf T0CntH, w
000382 6ED7 00573 movwf TMR0H ; caricare prima TMR0H
00574 ldw T0CntL
000384 50?? M movf T0CntL, w
000386 6ED6 00575 movwf TMR0L ; carica TMR0L/H
000388 8ED5 00576 bsf T0CON, TMR0ON ; start Timer 0
00577
00038A 00578 Delay_xx1: ; loop
00038A A4F2 00579 btfss INTCON, TMR0IF ; attende flag overflow
00038C D??? 00580 bra Delay_xx1 ; loop ritardo
00038E 9ED5 00581 bcf T0CON, TMR0ON ; stop Timer 0
000390 94F2 00582 bcf INTCON, TMR0IF ; azzera flag timeout
000392 0012 00583 return
00584
000394 00585 KbVerf:
000394 0EEE 00586 movlw KBD_ECHO ; test tastiera tramite ECHO
000396 EC?? F??? 00587 call TxKeyb
00039A B0?? 00588 btfsc KStatus, KRESET ; test reset
00039C 00FF 00589 reset ; ricevuto reset in -> reset
00039E B2?? 00590 btfsc KStatus, KTIMEO ; test timeout
0003A0 0012 00591 return ; tastiera non presente
0003A2 AC?? 00592 btfss KStatus, KBTX ; test trasmissione OK
0003A4 0012 00593 return ; trasmissione fallita - si assume NO tastiera
0003A6 EC?? F??? 00594 call RxKeyb ; ricezione ECHO entro timeout
0003AA B0?? 00595 btfsc KStatus, KRESET ; test reset
0003AC 00FF 00596 reset ; ricevuto reset in -> reset
0003AE B2?? 00597 btfsc KStatus, KTIMEO ; test timeout
0003B0 0012 00598 return ; tastiera non presente
0003B2 8E?? 00599 bsf KbdFlag, KBFND ; si assume tastiera presente
0003B4 AE?? 00600 btfss KStatus, KBRX ; test ricezione full
0003B6 0012 00601 return ; ricezione incompleta -> failure tastiera
MPASM 5.68 MAIN.ASM 9-3-2018 10:12:20 PAGE 13
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00602 ldw KStatus ; test errore ricezione
0003B8 50?? M movf KStatus, w
0003BA 0B0C 00603 andlw KBRXERR
0003BC E1?? 00604 bnz KbVerf2 ; dato ricevuto errato -> failure tastiera
0003BE 0EEE 00605 movlw KBD_ECHO ; test ECHO
0003C0 62?? 00606 cpfseq KBuf
0003C2 0012 00607 return ; failure tastiera
0003C4 8C?? 00608 bsf KbdFlag, KBBAT ; imposta flag BAT OK
0003C6 00609 KbVerf2:
0003C6 0012 00610 return
00611
0003C8 00612 KbdProc:
0003C8 0E00 00613 movlw 0x00 ; test presenza bytes nella coda di ricezione
0003CA 5C?? 00614 subwf RxCnt, W
0003CC E1?? 00615 bnz KbdProc0 ; coda non vuota
0003CE 9E?? 00616 bcf RxFlag, RXOVR ; rimuove blocco TX (coda vuota)
00617 SCLOCKH ; abilita TX da tastiera
0003D0 888A M bsf LATB, KCLKO
0003D2 0012 00618 return
0003D4 00619 KbdProc0:
0003D4 BE?? 00620 btfsc TxFlag, TXOVR ; buffer TX pronto ?
0003D6 0012 00621 return ; NO - attende posto
00622 ldw POSTINC1 ; legge byte da coda -> FSR1 ptr coda di ricezio
ne
0003D8 50E6 M movf POSTINC1, w
0003DA 6E?? 00623 movwf RxData
0003DC 9EF2 00624 bcf INTCON, GIEH ; disabilita INT
0003DE 9CF2 00625 bcf INTCON, GIEL
0003E0 06?? 00626 decf RxCnt, F ; aggiorna contatore bytes in coda
0003E2 9E?? 00627 bcf RxFlag, RXOVR ; rimuove blocco TX (coda vuota)
00628 SCLOCKH ; abilita TX da tastiera
0003E4 888A M bsf LATB, KCLKO
0003E6 8EF2 00629 bsf INTCON, GIEH ; abilita INT
0003E8 8CF2 00630 bsf INTCON, GIEL
00631 ; si assume che TBLPTR non cambia entro il ciclo
0003EA A8?? 00632 btfss RxFlag, RXEXT1 ; sequenza E1 pending ?
0003EC D??? 00633 bra KbdProc1 ; NO
0003EE 0009 00634 tblrd *+ ; legge byte da memoria ed incrementa ptr
00635 ldw TABLAT
0003F0 50F5 M movf TABLAT, w
0003F2 5C?? 00636 subwf RxData, W ; confronta con dato ricevuto
0003F4 A4D8 00637 btfss STATUS, Z ; Z = 1 se coincide
0003F6 86?? 00638 bsf RxFlag, RXE1ERR ; segnala errore in sequenza E1
0003F8 2E?? 00639 decfsz E1Cnt, F ; decrementa contatore
0003FA D??? 00640 bra UpdBufPtr
0003FC 00641 E1Test:
0003FC A6?? 00642 btfss RxFlag, RXE1ERR ; errore nella sequenza E1 ?
0003FE D??? 00643 bra PauseKey ; NO - tasto PAUSE premuto
000400 00644 ClrRX: ; termina scansione corrente - inizio nuova
000400 0E80 00645 movlw RXMASK ; azzera tutti i flag ricezione
000402 16?? 00646 andwf RxFlag, F
000404 00647 UpdBufPtr:
000404 0E3E 00648 movlw LOW(RxBufEnd) ; coda circolare - test puntatore
MPASM 5.68 MAIN.ASM 9-3-2018 10:12:20 PAGE 14
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
000406 5CE1 00649 subwf FSR1L, W ; FSR1L - LOW(RxBufEnd)
000408 0E01 00650 movlw HIGH(RxBufEnd) ; FSR1H - HIGH(RxBufEnd)
00040A 58E2 00651 subwfb FSR1H, W ; C = 0 se FSR1 < RxBufEnd
00040C B0D8 00652 btfsc STATUS, C ; OK
00040E EE10 F040 00653 lfsr FSR1, RxBuffer ; reimposta puntatore a inizio buffer
000412 0012 00654 return
000414 00655 PauseKey:
000414 0E09 00656 movlw PAUSECODE ; imposta codice tasto PAUSE
000416 6E?? 00657 movwf RxCode
000418 D??? 00658 rcall GetKeyTbl
00041A D??? 00659 bra KbdProc14 ; gestione tasti toggle
00041C 00660 KbdProc1:
00041C 0EF0 00661 movlw KBD_BRK ; test break
00041E 5C?? 00662 subwf RxData, W
000420 E1?? 00663 bnz KbdProc2
000422 8C?? 00664 bsf RxFlag, RXBRK ; F0 break pending
000424 D??? 00665 bra UpdBufPtr
000426 00666 KbdProc2:
000426 0EE0 00667 movlw KBD_EXT ; test codice esteso
000428 5C?? 00668 subwf RxData, W
00042A E1?? 00669 bnz KbdProc3
00042C 0E80 00670 movlw RXMASK ; azzera tutti i flag ricezione
00042E 16?? 00671 andwf RxFlag, F
000430 8A?? 00672 bsf RxFlag, RXEXT ; imposta E0 pending
000432 D??? 00673 bra UpdBufPtr
000434 00674 KbdProc3:
000434 0EE1 00675 movlw KBD_EXT1 ; test codice esteso
000436 5C?? 00676 subwf RxData, W
000438 E1?? 00677 bnz KbdProc4
00043A 0E80 00678 movlw RXMASK ; azzera tutti i flag ricezione
00043C 16?? 00679 andwf RxFlag, F
00043E 88?? 00680 bsf RxFlag, RXEXT1 ; imposta E1 pending
000440 0E?? 00681 movlw LOW EXT1TBL ; imposta ptr tabella sequenza E1
000442 6EF6 00682 movwf TBLPTRL
000444 0E?? 00683 movlw HIGH EXT1TBL
000446 6EF7 00684 movwf TBLPTRH
000448 0E07 00685 movlw E1SEQCNT ; imposta numero bytes sequenza E1
00044A 6E?? 00686 movwf E1Cnt
00044C D??? 00687 bra UpdBufPtr
00044E 00688 KbdProc4:
00044E AA?? 00689 btfss RxFlag, RXEXT ; codice esteso E0 pending ?
000450 D??? 00690 bra KbdProc6 ; NO - codice normale o break
000452 0E?? 00691 movlw LOW EXTTBL ; imposta ptr tabella sequenza E0
000454 6EF6 00692 movwf TBLPTRL
000456 0E?? 00693 movlw HIGH EXTTBL
000458 6EF7 00694 movwf TBLPTRH
00045A 68?? 00695 setf E1Cnt ; indice tabella E0 (inizializzato a 0xFF)
00045C 00696 KbdProc5:
00045C 2A?? 00697 incf E1Cnt, F ; update indice
00045E 0009 00698 tblrd *+ ; legge byte da memoria ed incrementa ptr
000460 0EFF 00699 movlw 0xFF ; test fine tabella
000462 5CF5 00700 subwf TABLAT, W
000464 E0?? 00701 bz ClrRX ; termina sequenza
MPASM 5.68 MAIN.ASM 9-3-2018 10:12:20 PAGE 15
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00702 ldw TABLAT
000466 50F5 M movf TABLAT, w
000468 5C?? 00703 subwf RxData, W ; confronta con dato ricevuto
00046A E1?? 00704 bnz KbdProc5 ; loop next
00705 ; trovato codice esteso
00046C 0E?? 00706 movlw LOW EXTRLTBL ; imposta ptr tabella rilocazione E0
00046E 24?? 00707 addwf E1Cnt, W ; aggiunge indice
000470 6EF6 00708 movwf TBLPTRL
000472 0E?? 00709 movlw HIGH EXTRLTBL
000474 6EF7 00710 movwf TBLPTRH
000476 6AE8 00711 clrf WREG
000478 22F7 00712 addwfc TBLPTRH, F
00047A 0009 00713 tblrd *+ ; codice rilocato
00714 ldw TABLAT
00047C 50F5 M movf TABLAT, w
00047E D??? 00715 bra KbdProc10
000480 00716 KbdProc6: ; codice normale
000480 0E?? 00717 movlw LOW DEFTBL ; imposta ptr tabella sequenza normale
000482 6EF6 00718 movwf TBLPTRL
000484 0E?? 00719 movlw HIGH DEFTBL
000486 6EF7 00720 movwf TBLPTRH
000488 68?? 00721 setf E1Cnt ; indice tabella (inizializzato a 0xFF)
00048A 00722 KbdProc7:
00048A 2A?? 00723 incf E1Cnt, F ; update indice
00048C 0009 00724 tblrd *+ ; legge byte da memoria ed incrementa ptr
00048E 0EFF 00725 movlw 0xFF ; test fine tabella
000490 5CF5 00726 subwf TABLAT, W
000492 E0?? 00727 bz KbdProc8 ; codice da non rilocare
00728 ldw TABLAT
000494 50F5 M movf TABLAT, w
000496 5C?? 00729 subwf RxData, W ; confronta con dato ricevuto
000498 E1?? 00730 bnz KbdProc7 ; loop next
00731 ; trovato codice da rilocare
00049A 0E?? 00732 movlw LOW DEFRLTBL ; imposta ptr tabella rilocazione
00049C 24?? 00733 addwf E1Cnt, W ; aggiunge indice
00049E 6EF6 00734 movwf TBLPTRL
0004A0 0E?? 00735 movlw HIGH DEFRLTBL
0004A2 6EF7 00736 movwf TBLPTRH
0004A4 6AE8 00737 clrf WREG
0004A6 22F7 00738 addwfc TBLPTRH, F
0004A8 0009 00739 tblrd *+ ; codice rilocato
00740 ldw TABLAT
0004AA 50F5 M movf TABLAT, w
0004AC D??? 00741 bra KbdProc10
0004AE 00742 KbdProc8: ; rilocazione degli scan code 70..7E in 60..6E
0004AE 0E70 00743 movlw 0x70
0004B0 5C?? 00744 subwf RxData, W
00745 ldw RxData ; W = codice non rilocato
0004B2 50?? M movf RxData, w
0004B4 E3?? 00746 bnc KbdProc10 ; OK (< 70)
0004B6 0E7F 00747 movlw 0x7F ; max. codice di scansione 0x7E
0004B8 5C?? 00748 subwf RxData, W
0004BA E2?? 00749 bc ClrRX ; codice non valido (>= 7F) - azzera ed esce
MPASM 5.68 MAIN.ASM 9-3-2018 10:12:20 PAGE 16
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
0004BC 0E10 00750 movlw 0x10 ; rilocazione codice in 60..6E
0004BE 5C?? 00751 subwf RxData, W ; W = codice rilocato
0004C0 00752 KbdProc10: ; IN -> W = codice
0004C0 6E?? 00753 movwf E1Cnt ; codice
0004C2 0E?? 00754 movlw LOW CVTTBL ; imposta ptr tabella conversione
0004C4 24?? 00755 addwf E1Cnt, W ; aggiunge indice
0004C6 6EF6 00756 movwf TBLPTRL
0004C8 0E?? 00757 movlw HIGH CVTTBL
0004CA 6EF7 00758 movwf TBLPTRH
0004CC 6AE8 00759 clrf WREG
0004CE 22F7 00760 addwfc TBLPTRH, F
0004D0 0009 00761 tblrd *+ ; codice rilocato
00762 ldw TABLAT
0004D2 50F5 M movf TABLAT, w
0004D4 6E?? 00763 movwf RxCode ; nuovo codice
0004D6 E6?? 00764 bmi ClrRX ; codice non valido - azzera flag ed esce
0004D8 0E7B 00765 movlw ('z' + 1) ; massimo codice 7A ('z')
0004DA 5C?? 00766 subwf RxCode, W
0004DC E2?? 00767 bc ClrRX ; codice non valido
00768
00769 ; RxCode contiene ora un codice compreso tra 00 e 7A
00770 ; codici 00 - 41 utilizzati per accesso tabella KEYTBL
00771 ; codici 42 - 56 utilizzati per accesso mappe US/IT
00772 ; codici 57 - 60 non validi
00773 ; codici 61 - 7A lettere 'a'..'z'
00774 ; codici 00 - 05 -> flag shift/alt/ctrl
00775 ; codici 06 - 09 -> tasti toggle (LOCK e PAUSE)
00776
0004DE 9C?? 00777 bcf TxFlag, SKPCTLB ; azzera flag skip SHIFT/ALT/CTL
0004E0 9A?? 00778 bcf TxFlag, SKPALTB
0004E2 98?? 00779 bcf TxFlag, SKPSHFB
0004E4 9C?? 00780 bcf MapCfg, MAPALPHA ; tasto non alfabetico
0004E6 0E61 00781 movlw 'a' ; test carattere alfabetico
0004E8 5C?? 00782 subwf RxCode, W
0004EA E3?? 00783 bnc MKeyTst ; no alpha - test codice mappe US/IT
0004EC 6A?? 00784 clrf TxData0 ; flag codice ASCII
00785 ldw RxCode ; 'a'..'z'
0004EE 50?? M movf RxCode, w
0004F0 6E?? 00786 movwf TxData1 ; codice ASCII tasto
0004F2 0E20 00787 movlw 0x20 ; converte in maiuscolo
0004F4 5C?? 00788 subwf RxCode, W ; 'A'..'Z'
0004F6 6E?? 00789 movwf Caps
0004F8 8C?? 00790 bsf MapCfg, MAPALPHA ; tasto alfabetico
0004FA D??? 00791 bra KbdProc40 ; gestione tasto alpha
00792
0004FC 00793 MKeyTst:
0004FC 0E42 00794 movlw MAPCODE ; test codice in 42..56 (mappe US/IT)
0004FE 5C?? 00795 subwf RxCode, W
000500 E3?? 00796 bnc NKeyTst ; CODE < MAPCODE - no tasto mappe US/IT
000502 6E?? 00797 movwf RxData ; salva CODE - MAPCODE (indice 0)
000504 0E57 00798 movlw (MAPCODEMAX + 1)
000506 5C?? 00799 subwf RxCode, W
000508 E3?? 00800 bnc MapTst ; CODE < MAPCODEMAX + 1 - tasto mappe US/IT
MPASM 5.68 MAIN.ASM 9-3-2018 10:12:20 PAGE 17
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00050A D??? 00801 bra ClrRX ; codice non valido
00050C 00802 MapTst:
00803 ; gestione mappe US/IT
00050C 90D8 00804 bcf STATUS, C ; azzera carry
00050E 36?? 00805 rlcf RxData, f ; * 2
000510 88?? 00806 bsf TxFlag, SKPSHFB ; skip test SHIFT
000512 BE?? 00807 btfsc MapCfg, MAPITB ; configurazione mappa IT ?
000514 D??? 00808 bra ITMap ; SI
000516 BE?? 00809 btfsc ShfSt, ASHFB ; SHIFT ?
000518 2A?? 00810 incf RxData, F ; SI - incrementa indice
00051A 0E?? 00811 movlw LOW USTBL ; imposta ptr tabella conversione mappa US
00051C 24?? 00812 addwf RxData, W ; aggiunge indice
00051E 6EF6 00813 movwf TBLPTRL
000520 0E?? 00814 movlw HIGH USTBL
000522 6EF7 00815 movwf TBLPTRH
000524 6AE8 00816 clrf WREG
000526 22F7 00817 addwfc TBLPTRH, F
000528 0008 00818 tblrd * ; codice tasto
00819 ldw TABLAT
00052A 50F5 M movf TABLAT, w
00052C 6E?? 00820 movwf TxData1 ; codice tasto
00052E 6A?? 00821 clrf TxData0 ; flag ASCII
000530 D??? 00822 bra KbdProc41 ; gestione tasto
000532 00823 ITMap:
000532 0E00 00824 movlw 0x00
000534 6E?? 00825 movwf TxData1
000536 6A?? 00826 clrf TxData0
000538 D??? 00827 bra KbdProc41 ; gestione tasto
00828
00053A 00829 NKeyTst:
00830 ; gestione tasti NO-REPEAT: PWR, SLEEP, WAKEUP, APP
00831 ; L-GUI, R-GUI, ESC, PRINT SCRN
00053A 0E18 00832 movlw WAKECODE
00053C 5C?? 00833 subwf RxCode, W
00053E E3?? 00834 bnc NMITst ; RxCode < WAKECODE
000540 6E?? 00835 movwf RxData ; RxData = RxCode - WAKECODE
000542 0E20 00836 movlw (ESCCODE + 1)
000544 5C?? 00837 subwf RxCode, W
000546 E2?? 00838 bc NMITst ; RxCode >= (ESCCODE + 1)
000548 0E?? 00839 movlw LOW RPTTBL ; imposta ptr tabella flag RPTTBL
00054A 24?? 00840 addwf RxData, W ; aggiunge indice
00054C 6EF6 00841 movwf TBLPTRL
00054E 0E?? 00842 movlw HIGH RPTTBL
000550 6EF7 00843 movwf TBLPTRH
000552 6AE8 00844 clrf WREG
000554 22F7 00845 addwfc TBLPTRH, F
000556 0008 00846 tblrd * ; flag tasto
00847 ldw TABLAT
000558 50F5 M movf TABLAT, w
00055A 6E?? 00848 movwf RxData ; flag
00055C BC?? 00849 btfsc RxFlag, RXBRK ; test tasto rilasciato
00055E D??? 00850 bra NKeyRls ; SI
000560 14?? 00851 andwf RptSt, W ; flag tasto premuto attivo ?
MPASM 5.68 MAIN.ASM 9-3-2018 10:12:20 PAGE 18
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
000562 E0?? 00852 bz NKeySet ; NO - prima attivazione
000564 D??? 00853 bra ClrRX ; tasto repeat - scarta codice
000566 00854 NKeySet:
00855 ldw RxData ; set bit in RptSt
000566 50?? M movf RxData, w
000568 12?? 00856 iorwf RptSt, F
00056A E1?? 00857 bnz NMITst
00056C 00858 NKeyRls:
00056C 1C?? 00859 comf RxData, W ; complementa maschera per azzerare bit
00056E 16?? 00860 andwf RptSt, F ; azzera bit
00861
000570 00862 NMITst:
00863 ; CTRL + BREAK, ALT + SYSREQ, WAKE UP, PWR, SLEEP sono tasti NMI
00864 ; vengono rilevati solo dopo il loro rilascio
000570 D??? 00865 rcall GetKeyTbl
000572 52?? 00866 movf TxData1, F ; test se codice = 0
000574 E1?? 00867 bnz NMITst1
000576 D??? 00868 bra ClrRX ; tasto nullo - scarta codice
000578 00869 NMITst1:
000578 0EC0 00870 movlw 0xC0 ; test tasto NMI
00057A 5C?? 00871 subwf TxData0, W ; flag tasto
00057C E1?? 00872 bnz KbdProc12 ; no tasto NMI
00057E AC?? 00873 btfss RxFlag, RXBRK ; codice break ?
000580 D??? 00874 bra ClrRX ; NO - scarta codice
000582 9C?? 00875 bcf RxFlag, RXBRK ; azzera flag
000584 D??? 00876 bra KbdProc60 ; gestione tasto NMI
00877
000586 00878 KbdProc12:
00879 ; gestione tasti SHIFT/ALT/CTRL
00880 ; TxData0 = flag tasto
00881 ; TxData1 = codice tasto
000586 0E80 00882 movlw 0x80 ; test invio status flag
000588 5C?? 00883 subwf TxData0, W
00058A E1?? 00884 bnz KbdProc14 ; no SHIFT/ALT/CTRL
00885 ldw CtlSt ; salva flag attuali
00058C 50?? M movf CtlSt, w
00058E 6E?? 00886 movwf TCtlSt
000590 0EC0 00887 movlw (ASHFM | ALTCTLM) ; maschera bit necessari
000592 14?? 00888 andwf ShfSt, W
000594 6E?? 00889 movwf TShfSt
00890 ldw TxData1 ; flag tasto
000596 50?? M movf TxData1, w
000598 6E?? 00891 movwf RxData ; flag attuale
00059A 1C?? 00892 comf RxData, W ; complementa maschera per azzerare bit
00059C 16?? 00893 andwf CtlSt, F ; azzera bit
00894 ldw RxData ; carica maschera bit attivi
00059E 50?? M movf RxData, w
0005A0 AC?? 00895 btfss RxFlag, RXBRK ; lascia bit azzerati se tasto rilasciato
0005A2 12?? 00896 iorwf CtlSt, F ; tasto premuto: imposta bit
0005A4 9E?? 00897 bcf CtlSt, AALTB ; azzera bit di ALT e CTRL
0005A6 9C?? 00898 bcf CtlSt, ACTLB
0005A8 0E24 00899 movlw ALTKM ; test L-ALT OR R-ALT
0005AA 14?? 00900 andwf CtlSt, W
MPASM 5.68 MAIN.ASM 9-3-2018 10:12:20 PAGE 19
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
0005AC A4D8 00901 btfss STATUS, Z ; Z = 1 -> no ALT
0005AE 8E?? 00902 bsf CtlSt, AALTB ; imposta bit ALT (L o R)
0005B0 0E12 00903 movlw CTRLKM ; test L-CTRL OR R-CTRL
0005B2 14?? 00904 andwf CtlSt, W
0005B4 A4D8 00905 btfss STATUS, Z ; Z = 1 -> no CTRL
0005B6 8C?? 00906 bsf CtlSt, ACTLB ; imposta bit CTRL (L o R)
0005B8 9E?? 00907 bcf ShfSt, ASHFB ; azzera bit SHIFT
0005BA 9C?? 00908 bcf ShfSt, ALTCTLB ; azzera bit ALT OR CTRL
0005BC 0E09 00909 movlw SHIFTKM ; test L-SHIFT OR R-SHIFT
0005BE 14?? 00910 andwf CtlSt, W
0005C0 A4D8 00911 btfss STATUS, Z ; Z = 1 -> no SHIFT
0005C2 8E?? 00912 bsf ShfSt, ASHFB ; imposta bit SHIFT (L o R)
0005C4 0EC0 00913 movlw ALLALTCTLM ; test ALT OR CTRL
0005C6 14?? 00914 andwf CtlSt, W
0005C8 A4D8 00915 btfss STATUS, Z ; Z = 1 -> no ALT OR CTRL
0005CA 8C?? 00916 bsf ShfSt, ALTCTLB ; imposta bit ALT OR CTRL (L o R)
00917 ldw CtlSt ; confronta flag attuali con flag precedenti
0005CC 50?? M movf CtlSt, w
0005CE 62?? 00918 cpfseq TCtlSt
0005D0 D??? 00919 bra KbdProc13 ; flag cambiato
0005D2 0EC0 00920 movlw (ASHFM | ALTCTLM)
0005D4 14?? 00921 andwf ShfSt, W ; maschera bit necessari
0005D6 5C?? 00922 subwf TShfSt, W ; confronta con vecchio flag
0005D8 E1?? 00923 bnz KbdProc13 ; flag cambiato
0005DA D??? 00924 bra ClrRX ; flag non cambiati -> scarta codice
0005DC 00925 KbdProc13: ; invia nuovi flag all' host
00926 ; formato -> 100000<76-ShfSt> + CtlSt
00927 ldw CtlSt
0005DC 50?? M movf CtlSt, w
0005DE 6E?? 00928 movwf TxData1
00929 ldw ShfSt ; trasla bit 7 e 6 in bit 1 e 0
0005E0 50?? M movf ShfSt, w
0005E2 6E?? 00930 movwf RxData
0005E4 42?? 00931 rrncf RxData, F ; bit 6
0005E6 42?? 00932 rrncf RxData, F ; bit 5
0005E8 42?? 00933 rrncf RxData, F ; bit 4
0005EA 42?? 00934 rrncf RxData, F ; bit 3
0005EC 42?? 00935 rrncf RxData, F ; bit 2
0005EE 40?? 00936 rrncf RxData, W ; bit 1 -> W
0005F0 0B03 00937 andlw B'00000011'
0005F2 12?? 00938 iorwf TxData0, F
00939
0005F4 00940 PutKey: ; inserisce word codice tasto nella coda TX
0005F4 0EE0 00941 movlw (TXMAXCNT - 1) ; test spazio disponibile
0005F6 5C?? 00942 subwf TxCnt, W ; W = TxCnt - (TMAXCNT - 1)
0005F8 B0D8 00943 btfsc STATUS, C ; W >= 0 -> C = 1
0005FA 8E?? 00944 bsf TxFlag, TXOVR ; segnala overrun buffer TX
00945 ldw TxHeadL ; imposta ptr head al buffer
0005FC 50?? M movf TxHeadL, w
0005FE 6EE9 00946 movwf FSR0L
00947 ldw TxHeadH
000600 50?? M movf TxHeadH, w
000602 6EEA 00948 movwf FSR0H
MPASM 5.68 MAIN.ASM 9-3-2018 10:12:20 PAGE 20
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00949 ldw TxData0 ; primo byte in coda
000604 50?? M movf TxData0, w
000606 6EEE 00950 movwf POSTINC0
00951 ldw TxData1 ; secondo byte in coda
000608 50?? M movf TxData1, w
00060A 6EEE 00952 movwf POSTINC0
00060C 2A?? 00953 incf TxCnt, F ; aggiorna contatore word nel buffer TX
00954 ldw FSR0L ; aggiorna ptr
00060E 50E9 M movf FSR0L, w
000610 6E?? 00955 movwf TxHeadL
00956 ldw FSR0H
000612 50EA M movf FSR0H, w
000614 6E?? 00957 movwf TxHeadH
000616 0E00 00958 movlw LOW(TxBufEnd) ; coda circolare - test puntatore
000618 5C?? 00959 subwf TxHeadL, W ; TxHeadL - LOW(TxBufEnd)
00061A 0E03 00960 movlw HIGH(TxBufEnd) ; TxHeadH - HIGH(TxBufEnd)
00061C 58?? 00961 subwfb TxHeadH, W ; C = 0 se TxHead < TxBufEnd
00061E A0D8 00962 btfss STATUS, C ; test buffer
000620 D??? 00963 bra ClrRX ; C = 0 -> OK
000622 0E3E 00964 movlw LOW(TxBuffer) ; reimposta puntatore a inizio buffer
000624 6E?? 00965 movwf TxHeadL
000626 0E01 00966 movlw HIGH(TxBuffer)
000628 6E?? 00967 movwf TxHeadH
00062A D??? 00968 bra ClrRX ; azzera flag ed esce
00969
00062C 00970 KbdProc14:
00971 ; gestione tasti TOGGLE
00062C 0E90 00972 movlw 0x90 ; test invio toggle
00062E 5C?? 00973 subwf TxData0, W ; test tasti LOCK o PAUSE
000630 E1?? 00974 bnz KbdProc16
00975 ldw TglSt ; salva flag toggle attuali
000632 50?? M movf TglSt, w
000634 6E?? 00976 movwf TTglSt
00977 ldw LockSt
000636 50?? M movf LockSt, w
000638 6E?? 00978 movwf TLockSt
00063A 0E09 00979 movlw PAUSECODE ; test PAUSE
00063C 5C?? 00980 subwf RxCode, W
00063E E1?? 00981 bnz NoPause ; no tasto PAUSE
000640 78?? 00982 btg TglSt, PAUSB ; toggle bit ad ogni pressione PAUSE
000642 D??? 00983 bra KbdProc15
000644 00984 NoPause:
000644 BC?? 00985 btfsc RxFlag, RXBRK ; test tasto rilasciato
000646 D??? 00986 bra ToggleRls ; SI
000648 14?? 00987 andwf LockSt, W ; flag tasto premuto attivo ?
00064A E0?? 00988 bz ToggleBit ; NO - prima attivazione
00064C D??? 00989 bra ClrRX ; tasto repeat - scarta codice
00064E 00990 ToggleBit:
00991 ldw TxData1 ; toggle bit in TglSt
00064E 50?? M movf TxData1, w
000650 1A?? 00992 xorwf TglSt, F
000652 12?? 00993 iorwf LockSt, F ; setta bit in LockSt
000654 E1?? 00994 bnz TstLock
MPASM 5.68 MAIN.ASM 9-3-2018 10:12:20 PAGE 21
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
000656 00995 ToggleRls:
000656 1C?? 00996 comf TxData1, W ; complementa maschera per azzerare bit
000658 16?? 00997 andwf LockSt, F ; azzera bit
00065A 00998 TstLock:
00999 ldw TglSt ; confronta con toggle precedente
00065A 50?? M movf TglSt, w
00065C 5C?? 01000 subwf TTglSt, W
00065E E1?? 01001 bnz LedUpd
000660 D??? 01002 bra ClrRX ; toggle non modificato - scarta codice
000662 01003 LedUpd:
000662 EC?? F??? 01004 call SetLed1
000666 A0?? 01005 btfss KbdFlag, KBLEDOK ; comando LED riuscito
000668 D??? 01006 bra ClrRX ; ignora tasto ed esce
00066A 01007 KbdProc15: ; invia toggle ad host
01008 ; formato -> 10010000 + TglSt
01009 ldw TglSt
00066A 50?? M movf TglSt, w
00066C 6E?? 01010 movwf TxData1
00066E D??? 01011 bra PutKey
01012
000670 01013 KbdProc16:
01014 ; gestione tasti tastierino numerico (KP)
000670 0E20 01015 movlw KP0CODE
000672 5C?? 01016 subwf RxCode, W
000674 E3?? 01017 bnc KbdProc20 ; no tasto numerico
000676 0E2B 01018 movlw INSCODE
000678 5C?? 01019 subwf RxCode, W
00067A E2?? 01020 bc KbdProc20 ; no tasto numerico
01021 ; se NUM-LOCK OFF i tasti numerici diventano tasti cursore (escluso 5)
00067C AC?? 01022 btfss TglSt, NUMLB
00067E D??? 01023 bra KbdProc18 ; NUM-LOCK OFF -> converte in codice cursore
01024 ; se NUM-LOCK ON e premuto il solo tasto SHIFT converte in codice cursore
000680 AE?? 01025 btfss ShfSt, ASHFB
000682 D??? 01026 bra KbdProc20 ; no SHIFT -> tasto numerico
000684 BC?? 01027 btfsc ShfSt, ALTCTLB ; premuti ALT e/o CTRL ?
000686 D??? 01028 bra KbdProc20 ; si - tasto numerico
000688 88?? 01029 bsf TxFlag, SKPSHFB ; flag skip test SHIFT
00068A 8A?? 01030 bsf TxFlag, SKPALTB ; flag skip test ALT
00068C 8C?? 01031 bsf TxFlag, SKPCTLB ; flag skip test CTRL
01032
00068E 01033 KbdProc18:
00068E 0E0B 01034 movlw CRSLEN ; converte in codice tasto cursore
000690 26?? 01035 addwf RxCode, F
000692 D??? 01036 rcall GetKeyTbl ; legge nuovamente codice/flag tasto
000694 52?? 01037 movf TxData1, F ; test se codice tasto = 0
000696 E1?? 01038 bnz KbdProc20
000698 D??? 01039 bra ClrRX ; scarta codice nullo
01040
00069A 01041 KbdProc20:
01042 ; toggle tasto INSERT - soltanto senza SHIFT/ALT/CTRL
00069A 0E2B 01043 movlw INSCODE
00069C 5C?? 01044 subwf RxCode, W
00069E E1?? 01045 bnz KbdProc22
MPASM 5.68 MAIN.ASM 9-3-2018 10:12:20 PAGE 22
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
0006A0 B8?? 01046 btfsc TxFlag, SKPSHFB ; INSERT su tastierino numerico ?
0006A2 D??? 01047 bra KbdProc21 ; si - non testa SHIFT
0006A4 0EC0 01048 movlw SHFALL
0006A6 14?? 01049 andwf ShfSt, W ; test SHIFT/ALT/CTRL
0006A8 E1?? 01050 bnz KbdProc22 ; no toggle
0006AA 01051 KbdProc21:
0006AA BC?? 01052 btfsc RxFlag, RXBRK ; test tasto rilasciato
0006AC D??? 01053 bra KbdProc22
0006AE 74?? 01054 btg TglSt, INSTB ; toggle bit INSERT
01055
0006B0 01056 KbdProc22:
01057 ; imposta flag in TglSt per ESC e PRINT SCRN
0006B0 0E1E 01058 movlw PRTCODE
0006B2 5C?? 01059 subwf RxCode, W
0006B4 E0?? 01060 bz KbdProc23
0006B6 0E1F 01061 movlw ESCCODE
0006B8 5C?? 01062 subwf RxCode, W
0006BA E1?? 01063 bnz KbdProc24
0006BC 01064 KbdProc23:
0006BC 0E03 01065 movlw ESCPRNM ; imposta flag ESC e PRINT SCRN
0006BE 14?? 01066 andwf RptSt, W ; da RptSt a TglSt
0006C0 12?? 01067 iorwf TglSt, F
01068
0006C2 01069 KbdProc24:
01070 ; gestione tasti CR, TAB, SHIFT-CR, SHIFT-TAB, '<' e '>' mappa IT
0006C2 0E0A 01071 movlw CRCODE
0006C4 5C?? 01072 subwf RxCode, W
0006C6 E3?? 01073 bnc KbdProc26 ; RxCode < CRCODE
0006C8 0E10 01074 movlw KPBARCODE
0006CA 5C?? 01075 subwf RxCode, W
0006CC E2?? 01076 bc KbdProc26 ; RxCode >= KPBARCODE
0006CE AE?? 01077 btfss ShfSt, ASHFB ; SHIFT ?
0006D0 D??? 01078 bra KbdProc25 ; NO
0006D2 BC?? 01079 btfsc ShfSt, ALTCTLB ; CTRL/ALT ?
0006D4 D??? 01080 bra KbdProc25 ; SI
0006D6 2A?? 01081 incf RxCode, F ; SHIFT -> increnmenta codice
0006D8 01082 KbdProc25:
0006D8 D??? 01083 rcall GetKeyTbl ; legge nuovamente codice/flag tasto
0006DA 52?? 01084 movf TxData1, F ; test se codice tasto = 0
0006DC E1?? 01085 bnz KbdProc50 ; gestione tasto
0006DE D??? 01086 bra ClrRX ; scarta codice nullo
01087
0006E0 01088 KbdProc26:
01089 ; tasti funzione - a questo punto CODE < MAPCODE (42)
0006E0 0E36 01090 movlw FNCCODE ; range tasti funzione 36..41
0006E2 5C?? 01091 subwf RxCode, W
0006E4 E3?? 01092 bnc KbdProc50 ; gestione tasti per codici < FNCCODE (36)
01093
01094 ; FX -> A0..AB
01095 ; SHIFT + FX -> AC..B7
01096 ; CTL + FX -> B8..C3
01097 ; ALT + FX -> C4..CF
01098 ; CTL + SHIFT + FX -> D0..DB
MPASM 5.68 MAIN.ASM 9-3-2018 10:12:20 PAGE 23
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
01099 ; CTL + ALT + FX -> DC..E7
01100 ; ALT + SHIFT + FX -> E8..F3
01101 ; CTL + ALT + SHIFT + FX -> F4..FF
01102
0006E6 AE?? 01103 btfss ShfSt, ASHFB
0006E8 D??? 01104 bra FnNoShf
0006EA 0E0C 01105 movlw D'12' ; SHIFT + Fx
0006EC AC?? 01106 btfss ShfSt, ALTCTLB ; ALT o CTRL ?
0006EE D??? 01107 bra FnAdd ; no - SHIFT + FX
0006F0 0E30 01108 movlw D'48'
0006F2 AE?? 01109 btfss CtlSt, AALTB ; ALT ?
0006F4 D??? 01110 bra FnAdd ; no - SHIFT + CTRL + Fx
0006F6 0E48 01111 movlw D'72'
0006F8 AC?? 01112 btfss CtlSt, ACTLB ; CTRL ?
0006FA D??? 01113 bra FnAdd ; no - SHIFT + ALT + Fx
0006FC 0E54 01114 movlw D'84' ; SHIFT + ALT + CTRL + Fx
0006FE D??? 01115 bra FnAdd
000700 01116 FnNoShf:
000700 0E00 01117 movlw D'0' ; Fx
000702 AC?? 01118 btfss ShfSt, ALTCTLB ; ALT o CTRL ?
000704 D??? 01119 bra FnAdd ; no - FX
000706 0E18 01120 movlw D'24'
000708 AE?? 01121 btfss CtlSt, AALTB ; ALT ?
00070A D??? 01122 bra FnAdd ; no - CTRL + Fx
00070C 0E24 01123 movlw D'36'
00070E AC?? 01124 btfss CtlSt, ACTLB ; CTRL ?
000710 D??? 01125 bra FnAdd ; no - ALT + Fx
000712 0E3C 01126 movlw D'60' ; ALT + CTRL + Fx
000714 01127 FnAdd:
000714 26?? 01128 addwf TxData1, F
000716 D??? 01129 bra KeySnd ; tasti funzione inviati senza altri test
01130
000718 01131 KbdProc40: ; gestione tasto alfabetico
01132 ldw Caps ; 'A'..'Z'
000718 50?? M movf Caps, w
00071A 01133 KbdProc41: ; gestione tasto ASCII non-alpha
00071A 6E?? 01134 movwf RxData ; codice tasto attuale (TxData1)
00071C 0E40 01135 movlw '@'
00071E 5C?? 01136 subwf RxData, W
000720 E3?? 01137 bnc KbdProc50 ; key < '@' (40)
000722 0E60 01138 movlw '`'
000724 5C?? 01139 subwf RxData, W
000726 E2?? 01140 bc KbdProc50 ; key >= '`' (60)
000728 AE?? 01141 btfss CtlSt, AALTB ; ALT ?
00072A D??? 01142 bra KbdProc42 ; NO
00072C 0E1F 01143 movlw 0x1F
00072E 14?? 01144 andwf RxData, W ; converte in 00..1F
000730 0F60 01145 addlw 0x60 ; converte in 60..7F
000732 6E?? 01146 movwf TxData1 ; codice controllo
000734 0EA0 01147 movlw 0xA0 ; flag codice controllo
000736 6E?? 01148 movwf TxData0
000738 D??? 01149 bra KbdProc50
00073A 01150 KbdProc42:
MPASM 5.68 MAIN.ASM 9-3-2018 10:12:20 PAGE 24
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00073A AC?? 01151 btfss CtlSt, ACTLB ; CTRL ?
00073C D??? 01152 bra KbdProc43 ; NO
00073E 0E1F 01153 movlw 0x1F
000740 14?? 01154 andwf RxData, W ; converte in 00..1F
000742 6E?? 01155 movwf TxData1 ; codice ASCII
000744 6A?? 01156 clrf TxData0 ; flag codice ASCII
000746 D??? 01157 bra KbdProc50
000748 01158 KbdProc43:
01159 ; test SHIFT / CAPS-LOCK per tasti alfabetici
000748 AC?? 01160 btfss MapCfg, MAPALPHA
00074A D??? 01161 bra KbdProc50 ; no tasto alfabetico
01162 ldw ShfSt ; SHIFT
00074C 50?? M movf ShfSt, w
00074E 18?? 01163 xorwf TglSt, W ; confronta con CAPS LOCK
000750 0B80 01164 andlw 0x80 ; interessa bit 7 soltanto
000752 E0?? 01165 bz KbdProc50 ; o NO SHIFT oppure CAPS LOCK + SHIFT -> a..z
01166 ldw Caps ; o SHIFT oppure CAPS LOCK -> A..Z
000754 50?? M movf Caps, w
000756 6E?? 01167 movwf TxData1
01168
000758 01169 KbdProc50:
01170 ; ALT 0..9 -> 30..39
01171 ; CTRL 0..9 -> 40..49
01172 ; CTRL + ALT 0..9 -> 50..59
000758 BE?? 01173 btfsc TxData0, 7
00075A D??? 01174 bra Key10 ; codice di controllo
00075C 0E30 01175 movlw '0' ; test tasto numerico
00075E 5C?? 01176 subwf TxData1, W
000760 6E?? 01177 movwf RxData ; 0..9
000762 E3?? 01178 bnc Key06
000764 0E3A 01179 movlw ('9' + 1)
000766 5C?? 01180 subwf TxData1, W
000768 E2?? 01181 bc Key06
00076A AE?? 01182 btfss CtlSt, AALTB ; ALT ?
00076C D??? 01183 bra Key01 ; NO
00076E 0E30 01184 movlw ALTKEY0 ; ALT + 0..9
000770 BC?? 01185 btfsc CtlSt, ACTLB ; CTRL + ALT ?
000772 0E50 01186 movlw ALTCTLKEY0 ; CTRL + ALT + 0..9
000774 D??? 01187 bra Key02
000776 01188 Key01:
000776 AC?? 01189 btfss CtlSt, ACTLB ; CTRL ?
000778 D??? 01190 bra KeySnd ; NO - lascia inalterato il tasto
00077A 0E40 01191 movlw CTLKEY0 ; CTRL + 0..9
00077C 01192 Key02:
00077C 24?? 01193 addwf RxData, W
00077E 6E?? 01194 movwf TxData1 ; codice controllo
000780 0EA0 01195 movlw 0xA0 ; flag codice controllo
000782 6E?? 01196 movwf TxData0
000784 D??? 01197 bra KeySnd ; invia tasto
000786 01198 Key06:
000786 0E1B 01199 movlw KB_ESCAPE ; ESC, TAB, +, -
000788 5C?? 01200 subwf TxData1, W
00078A E0?? 01201 bz Key10
MPASM 5.68 MAIN.ASM 9-3-2018 10:12:20 PAGE 25
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00078C 0E09 01202 movlw KB_TAB
00078E 5C?? 01203 subwf TxData1, W
000790 E0?? 01204 bz Key10
000792 0E2B 01205 movlw '+'
000794 5C?? 01206 subwf TxData1, W
000796 E0?? 01207 bz Key10
000798 0E2D 01208 movlw '-'
00079A 5C?? 01209 subwf TxData1, W
00079C E1?? 01210 bnz KeySnd
00079E 01211 Key10:
00079E 0E70 01212 movlw SKPALL ; tasti cursore da tastierino numerico
0007A0 14?? 01213 andwf TxFlag, W ; non vengono testati per SHIFT/CTRL/ALT
0007A2 0870 01214 sublw SKPALL
0007A4 E0?? 01215 bz KeySnd
0007A6 0E?? 01216 movlw LOW SPCKEY ; imposta ptr tabella tasti speciali
0007A8 6EF6 01217 movwf TBLPTRL
0007AA 0E?? 01218 movlw HIGH SPCKEY
0007AC 6EF7 01219 movwf TBLPTRH
0007AE 68?? 01220 setf E1Cnt ; indice tabella (inizializzato a 0xFF)
0007B0 01221 Key11:
0007B0 2A?? 01222 incf E1Cnt, F ; update indice
0007B2 0009 01223 tblrd *+ ; legge byte da memoria ed incrementa ptr
0007B4 0EFF 01224 movlw 0xFF ; test fine tabella
0007B6 5CF5 01225 subwf TABLAT, W
0007B8 E0?? 01226 bz KeySnd ; termina sequenza
01227 ldw TxData1 ; confronta con tasto
0007BA 50?? M movf TxData1, w
0007BC 5CF5 01228 subwf TABLAT, W
0007BE E1?? 01229 bnz Key11 ; loop
0007C0 0EC0 01230 movlw B'11000000'
0007C2 14?? 01231 andwf CtlSt, W ; test ALT e/o CTRL
0007C4 E0?? 01232 bz Key13 ; test SHIFT
0007C6 08C0 01233 sublw B'11000000' ; CTRL + ALT ?
0007C8 E1?? 01234 bnz Key12 ; NO
0007CA 0E03 01235 movlw 0x03 ; CTRL + ALT
0007CC D??? 01236 bra Key15
0007CE 01237 Key12:
0007CE 0E01 01238 movlw 0x01
0007D0 BE?? 01239 btfsc CtlSt, AALTB
0007D2 D??? 01240 bra Key15 ; ALT
0007D4 0E02 01241 movlw 0x02
0007D6 D??? 01242 bra Key15 ; CTRL
0007D8 01243 Key13:
0007D8 AE?? 01244 btfss ShfSt, ASHFB
0007DA D??? 01245 bra KeySnd ; no SHIFT - non modifica tasto
0007DC 0E00 01246 movlw 0x00
0007DE 01247 Key15:
0007DE 90D8 01248 bcf STATUS, C
0007E0 36?? 01249 rlcf E1Cnt, F
0007E2 36?? 01250 rlcf E1Cnt, F ; * 4
0007E4 26?? 01251 addwf E1Cnt, F
0007E6 0E?? 01252 movlw LOW SPCKEY2 ; imposta ptr tabella SPCKEY2
0007E8 24?? 01253 addwf E1Cnt, W ; aggiunge indice
MPASM 5.68 MAIN.ASM 9-3-2018 10:12:20 PAGE 26
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
0007EA 6EF6 01254 movwf TBLPTRL
0007EC 0E?? 01255 movlw HIGH SPCKEY2
0007EE 6EF7 01256 movwf TBLPTRH
0007F0 6AE8 01257 clrf WREG
0007F2 22F7 01258 addwfc TBLPTRH, F
0007F4 0009 01259 tblrd *+ ; codice
01260 ldw TABLAT
0007F6 50F5 M movf TABLAT, w
0007F8 E0?? 01261 bz KeySnd ; tasto null
0007FA 6E?? 01262 movwf TxData1
0007FC 0E?? 01263 movlw LOW SPCKEY3 ; imposta ptr tabella SPCKEY3
0007FE 24?? 01264 addwf E1Cnt, W ; aggiunge indice
000800 6EF6 01265 movwf TBLPTRL
000802 0E?? 01266 movlw HIGH SPCKEY3
000804 6EF7 01267 movwf TBLPTRH
000806 6AE8 01268 clrf WREG
000808 22F7 01269 addwfc TBLPTRH, F
00080A 0009 01270 tblrd *+ ; codice
01271 ldw TABLAT
00080C 50F5 M movf TABLAT, w
00080E 6E?? 01272 movwf TxData0
000810 0EC0 01273 movlw 0xC0
000812 5C?? 01274 subwf TxData0, W
000814 E0?? 01275 bz KbdProc60
01276
000816 01277 KeySnd:
000816 BC?? 01278 btfsc RxFlag, RXBRK ; test tasto rilasciato
000818 8C?? 01279 bsf TxData0, KEYRLS ; SI - imposta bit rilascio
00081A A8?? 01280 btfss TxData0, KEYTGL ; invia flag toggle low ?
00081C D??? 01281 bra PutKey ; NO
01282 ldw TglSt
00081E 50?? M movf TglSt, w
000820 0B0F 01283 andlw B'00001111'
000822 12?? 01284 iorwf TxData0, F ; 4 bit bassi corrispondono ai 4 bit di TglSt
000824 D??? 01285 bra PutKey
01286
000826 01287 KbdProc60:
01288 ; setta NMI all' host
000826 6A?? 01289 clrf Caps ; contatore temporaneo
000828 01290 KbdProc61:
000828 A280 01291 btfss PORTA, HLNMI ; host busy
00082A D??? 01292 bra NMISnd ; NMI non attivo - attiva
00082C 3E?? 01293 incfsz Caps, F ; attende host libero
00082E D??? 01294 bra KbdProc61
000830 EF?? F??? 01295 goto ClrRX ; scarta codice NMI
000834 01296 NMISnd:
000834 0E02 01297 movlw 0x02 ; porta NMI
000836 6E8D 01298 movwf LATE ; indirizzo KFR
01299 ldw TxData1 ; codice NMI
000838 50?? M movf TxData1, w
00083A D??? 01300 rcall KFRWrite ; codice in porta NMI
00083C 9882 01301 bcf PORTC, KFRSSN ; attiva NMI host
00083E 0000 01302 nop
MPASM 5.68 MAIN.ASM 9-3-2018 10:12:20 PAGE 27
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
000840 8882 01303 bsf PORTC, KFRSSN
000842 D??? 01304 bra ClrRX
01305
000844 01306 GetKeyTbl:
000844 0E?? 01307 movlw LOW KEYTBL ; imposta ptr tabella conversione KEYTBL
000846 24?? 01308 addwf RxCode, W ; aggiunge indice
000848 6EF6 01309 movwf TBLPTRL
00084A 0E?? 01310 movlw HIGH KEYTBL
00084C 6EF7 01311 movwf TBLPTRH
00084E 6AE8 01312 clrf WREG
000850 22F7 01313 addwfc TBLPTRH, F
000852 0008 01314 tblrd * ; codice tasto
01315 ldw TABLAT
000854 50F5 M movf TABLAT, w
000856 6E?? 01316 movwf TxData1 ; codice tasto
000858 0E?? 01317 movlw LOW FLGTBL ; imposta ptr tabella conversione FLGTBL
00085A 24?? 01318 addwf RxCode, W ; aggiunge indice
00085C 6EF6 01319 movwf TBLPTRL
00085E 0E?? 01320 movlw HIGH FLGTBL
000860 6EF7 01321 movwf TBLPTRH
000862 6AE8 01322 clrf WREG
000864 22F7 01323 addwfc TBLPTRH, F
000866 0008 01324 tblrd * ; flag tasto
01325 ldw TABLAT
000868 50F5 M movf TABLAT, w
00086A 6E?? 01326 movwf TxData0 ; flag tasto
00086C 0012 01327 return
01328
01329
00086E 01330 KFRWrite:
00086E 6E8C 01331 movwf LATD ; byte da scrivere nel registro
000870 6A95 01332 clrf DDRD ; porta D in uscita
000872 0000 01333 nop
000874 0000 01334 nop ; dato stabile
000876 928B 01335 bcf LATC, KFRWE ; impulso write
000878 0000 01336 nop
00087A 828B 01337 bsf LATC, KFRWE
00087C 0000 01338 nop
00087E 0012 01339 return
01340
000880 01341 KFRRead:
000880 6895 01342 setf DDRD ; Porta D input
000882 6A8D 01343 clrf LATE ; indirizzo file reg. = 0
000884 0E04 01344 movlw 0x04 ; contatore registri
000886 6E?? 01345 movwf KFRRdCnt
000888 EE?? F0?? 01346 lfsr FSR0, KFRRd0 ; puntatore registro 0
00088C 01347 KFRRead1:
00088C 908B 01348 bcf LATC, KFRRD ; lettura registro
00088E 0000 01349 nop
000890 0000 01350 nop
000892 01351 KFRRead2:
01352 ldw PORTD ; legge porta D
000892 5083 M movf PORTD, w
MPASM 5.68 MAIN.ASM 9-3-2018 10:12:20 PAGE 28
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
000894 6283 01353 cpfseq PORTD ; attende dato stabile
000896 D??? 01354 bra KFRRead2
000898 808B 01355 bsf LATC, KFRRD ; linea lettura alta
00089A 6EEE 01356 movwf POSTINC0 ; memorizza dato registro
00089C 2A8D 01357 incf LATE, f ; incrementa indirizzo
00089E 2E?? 01358 decfsz KFRRdCnt, f ; loop
0008A0 D??? 01359 bra KFRRead1
0008A2 6A8D 01360 clrf LATE
0008A4 9E?? 01361 bcf KFRFlag, KFRFULL ; azzera flag richiesta servizio
0008A6 0EE1 01362 movlw 0xE1 ; set lock led
0008A8 5C?? 01363 subwf KFRRd0, W
0008AA E1?? 01364 bnz Cmd0
0008AC D??? 01365 rcall SetLed
0008AE 6A?? 01366 clrf KFRRd3 ; errore ?
0008B0 B0?? 01367 btfsc KbdFlag, KBLEDOK
0008B2 68?? 01368 setf KFRRd3
0008B4 D??? 01369 bra CmdRsp
0008B6 01370 Cmd0:
0008B6 0EC1 01371 movlw 0xC1 ; start scanning
0008B8 5C?? 01372 subwf KFRRd0, W
0008BA E1?? 01373 bnz Cmd1
01374 SCLOCKH
0008BC 888A M bsf LATB, KCLKO
0008BE D??? 01375 bra CmdEnd
0008C0 01376 Cmd1:
0008C0 0EC2 01377 movlw 0xC2 ; RESET
0008C2 5C?? 01378 subwf KFRRd0, W
0008C4 E1?? 01379 bnz Cmd2
0008C6 9EF2 01380 bcf INTCON, GIEH ; disabilita INT high priority
0008C8 9CF2 01381 bcf INTCON, GIEL ; disabilita INT low priority
0008CA 9C8B 01382 bcf LATC, KBVOFF ; impulso negativo VCC tastiera
0008CC 0E07 01383 movlw TMR0P256 ; TMR0 stop, prescaler = 256, modo 16 bit
0008CE 6ED5 01384 movwf T0CON
0008D0 94F2 01385 bcf INTCON, TMR0IF ; azzera flag timeout
0008D2 0E8D 01386 movlw HIGH(T1500MS) ; imposta timeout 1500ms
0008D4 6ED7 01387 movwf TMR0H ; caricare prima TMR0H
0008D6 0E90 01388 movlw LOW(T1500MS)
0008D8 6ED6 01389 movwf TMR0L ; carica TMR0L/H
0008DA 8ED5 01390 bsf T0CON, TMR0ON ; start Timer 0
0008DC 01391 Wait1:
0008DC A4F2 01392 btfss INTCON, TMR0IF
0008DE D??? 01393 bra Wait1 ; timeout
01394
01395 ;bsf LATC, KBVOFF
0008E0 968B 01396 bcf LATC, KFRSRP ; azzera linea DRQ verso host
0008E2 0000 01397 nop
0008E4 0000 01398 nop
0008E6 868B 01399 bsf LATC, KFRSRP
0008E8 00FF 01400 reset
0008EA 01401 Cmd2:
0008EA D??? 01402 bra CmdEnd
0008EC 01403 CmdRsp:
0008EC 0E03 01404 movlw 0x03
MPASM 5.68 MAIN.ASM 9-3-2018 10:12:20 PAGE 29
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
0008EE 6E8D 01405 movwf LATE
01406 ldw KFRRd3
0008F0 50?? M movf KFRRd3, w
0008F2 D??? 01407 rcall KFRWrite
0008F4 D??? 01408 bra CmdEnd
01409
0008F6 01410 CmdEnd:
0008F6 968B 01411 bcf LATC, KFRSRP ; azzera linea DRQ verso host
0008F8 0000 01412 nop
0008FA 0000 01413 nop
0008FC 868B 01414 bsf LATC, KFRSRP
0008FE 0012 01415 return
01416
000900 01417 SetLed:
01418 ldw TglSt
000900 50?? M movf TglSt, w
000902 6E?? 01419 movwf TTglSt
01420 ldw KFRRd1
000904 50?? M movf KFRRd1, w
000906 6E?? 01421 movwf TglSt
000908 01422 SetLed1:
01423 ldw TglSt
000908 50?? M movf TglSt, w
00090A 6E?? 01424 movwf LedSt
00090C 42?? 01425 rrncf LedSt, F
00090E 42?? 01426 rrncf LedSt, F
000910 42?? 01427 rrncf LedSt, F
000912 42?? 01428 rrncf LedSt, F
000914 40?? 01429 rrncf LedSt, W
000916 0B07 01430 andlw B'00000111'
000918 6E?? 01431 movwf LedSt
01432 ldw LATB ; salva porta B
00091A 508A M movf LATB, w
00091C 6E?? 01433 movwf TPortB
01434 SCLOCKL ; inibisce TX da tastiera
00091E 988A M bcf LATB, KCLKO
000920 9EF2 01435 bcf INTCON, GIEH ; disabilita INT high priority
000922 9CF2 01436 bcf INTCON, GIEL ; disabilita INT low priority
000924 EC?? F??? 01437 call SendLed
000928 A8?? 01438 btfss TPortB, KCLKO ; disabilita TX da tast. se era disabilitato
01439 SCLOCKL
00092A 988A M bcf LATB, KCLKO
00092C 92F2 01440 bcf INTCON, INT0IF ; resetta flag INT0
00092E 8EF2 01441 bsf INTCON, GIEH ; abilita INT high priority
000930 8CF2 01442 bsf INTCON, GIEL ; abilita INT low priority
000932 E3?? 01443 bnc SetLed2 ; comando LED riuscito
01444 ldw TTglSt ; errore -> ignora tasto
000934 50?? M movf TTglSt, w
000936 6E?? 01445 movwf TglSt ; reimposta flag toggle precedente
01446 ldw TLockSt
000938 50?? M movf TLockSt, w
00093A 6E?? 01447 movwf LockSt
00093C 90?? 01448 bcf KbdFlag, KBLEDOK ; comando LED fallito
MPASM 5.68 MAIN.ASM 9-3-2018 10:12:20 PAGE 30
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00093E 0012 01449 return ; fail
000940 01450 SetLed2:
000940 80?? 01451 bsf KbdFlag, KBLEDOK
000942 0012 01452 return
01453
000944 01454 SndProc: ; invia word nella coda TX ad host
000944 B080 01455 btfsc PORTA, HLINT ; host busy ?
000946 0012 01456 return ; si
01457 ldw TxTailL ; imposta ptr head al buffer
000948 50?? M movf TxTailL, w
00094A 6EE9 01458 movwf FSR0L
01459 ldw TxTailH
00094C 50?? M movf TxTailH, w
00094E 6EEA 01460 movwf FSR0H
01461 ldw POSTINC0
000950 50EE M movf POSTINC0, w
000952 6E?? 01462 movwf TxData0
01463 ldw POSTINC0
000954 50EE M movf POSTINC0, w
000956 6E?? 01464 movwf TxData1
000958 6A8D 01465 clrf LATE ; indirizzo KFR = 0
01466 ldw TxData0 ; flag tasto
00095A 50?? M movf TxData0, w
00095C D??? 01467 rcall KFRWrite
00095E 0E01 01468 movlw 0x01 ; indirizzo KFR = 1
000960 6E8D 01469 movwf LATE
01470 ldw TxData1 ; codice tasto
000962 50?? M movf TxData1, w
000964 D??? 01471 rcall KFRWrite
000966 9A82 01472 bcf PORTC, KFRSSI ; attiva INT host
000968 0000 01473 nop
00096A 8A82 01474 bsf PORTC, KFRSSI
00096C 06?? 01475 decf TxCnt, F ; aggiorna contatore word nel buffer TX
01476 ldw FSR0L ; aggiorna ptr
00096E 50E9 M movf FSR0L, w
000970 6E?? 01477 movwf TxTailL
01478 ldw FSR0H
000972 50EA M movf FSR0H, w
000974 6E?? 01479 movwf TxTailH
000976 0E00 01480 movlw LOW(TxBufEnd) ; coda circolare - test puntatore
000978 5C?? 01481 subwf TxTailL, W ; TxTailL - LOW(TxBufEnd)
00097A 0E03 01482 movlw HIGH(TxBufEnd) ; TxTailH - HIGH(TxBufEnd)
00097C 58?? 01483 subwfb TxTailH, W ; C = 0 se TxTail < TxBufEnd
00097E A0D8 01484 btfss STATUS, C ; test buffer
000980 0012 01485 return ; C = 0 -> OK
000982 0E3E 01486 movlw LOW(TxBuffer) ; reimposta puntatore a inizio buffer
000984 6E?? 01487 movwf TxTailL
000986 0E01 01488 movlw HIGH(TxBuffer)
000988 6E?? 01489 movwf TxTailH
00098A 0012 01490 return
01491
00098C 01492 Start:
00098C 0100 01493 movlb 0x00
MPASM 5.68 MAIN.ASM 9-3-2018 10:12:20 PAGE 31
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00098E EC?? F??? 01494 call InitIO
000992 9A89 01495 bcf LATA, RA5 ; bit READY
01496
000994 01497 Main:
000994 A88A 01498 btfss LATB, KCLKO ; se TX disabilitato salta
000996 D??? 01499 bra Main2
000998 EC?? F??? 01500 call KbdProc
00099C 66?? 01501 tstfsz TxCnt ; coda TX vuota
00099E D??? 01502 rcall SndProc ; invia word codice ad host
0009A0 01503 Main2:
0009A0 BE?? 01504 btfsc KFRFlag, KFRFULL ; host richiede servizio ?
0009A2 D??? 01505 rcall KFRRead ; si - lettura registro KFR
0009A4 D??? 01506 bra Main
01507
01508 #include romtbl.inc
00001
00002 ;NOLIST
00003
00004
00005 RomTbl code_pack
00006 ; Fill
000000 00 00 00 00 00 00007 dw 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
00 00 00 00 00
00 00 00 00 00
00
00008
00009 ; mappa codici ASCII tastiera USA
000010 00010 USTBL:
000010 60 7E 00011 DB "`", "~"
000012 31 21 00012 DB "1", "!"
000014 32 40 00013 DB "2", "@"
000016 34 24 00014 DB "4", "$"
000018 33 23 00015 DB "3", "#"
00001A 35 25 00016 DB "5", "%"
00001C 36 5E 00017 DB "6", "^"
00001E 37 26 00018 DB "7", "&"
000020 38 2A 00019 DB "8", "*"
000022 2C 3C 00020 DB ",", "<"
000024 30 29 00021 DB "0", ")"
000026 39 28 00022 DB "9", "("
000028 2E 3E 00023 DB ".", ">"
00002A 2F 3F 00024 DB "/", "?"
00002C 3B 3A 00025 DB ";", ":"
00002E 2D 5F 00026 DB "-", "_"
000030 27 22 00027 DB "'", "\""
000032 5B 7B 00028 DB "[", "{"
000034 3D 2B 00029 DB "=", "+"
000036 5D 7D 00030 DB "]", "}"
000038 5C 7C 00031 DB "\\", "|"
00032
00033 ; tabella tasti speciali SHIFT, ALT, CTRL, CTRL+ALT
00003A 00034 SPCKEY2:
00003A 01 02 03 04 00035 DB KB_SHIFTPRT, KB_ALTPRT, KB_CTLPRT, KB_ALTCTLPRT
MPASM 5.68 MAIN.ASM 9-3-2018 10:12:20 PAGE 32
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00003E 05 06 07 08 00036 DB KB_SHIFTHOME, KB_ALTHOME, KB_CTLHOME, KB_ALTCTLHOME
000042 09 0A 0B 0C 00037 DB KB_SHIFTINS, KB_ALTINS, KB_CTLINS, KB_ALTCTLINS
000046 0D 0E 0F 10 00038 DB KB_SHIFTPGUP, KB_ALTPGUP, KB_CTLPGUP, KB_ALTCTLPGUP
00004A 11 12 13 14 00039 DB KB_SHIFTPGDWN, KB_ALTPGDWN, KB_CTLPGDWN, KB_ALTCTLPGDWN
00004E 15 16 17 80 00040 DB KB_SHIFTEND, KB_ALTEND, KB_CTLEND, KB_ALTCTLEND
000052 18 19 1A 81 00041 DB KB_SHIFTDEL, KB_ALTDEL, KB_CTLDEL, KB_ALTCTLDEL
000056 1B 1C 1D 82 00042 DB KB_SHIFTBKS, KB_ALTBKS, KB_CTLBKS, KB_ALTCTLBKS
00005A 00 1E 1F 88 00043 DB 0x00, KB_ALTESC, KB_CTLESC, KB_ALTCT
LESC
00005E 00 20 21 22 00044 DB 0x00, KB_ALTTAB, KB_CTLTAB, KB_ALTCT
LTAB
000062 00 23 24 25 00045 DB 0x00, KB_ALTPLUS, KB_CTLPLUS, KB_ALTCT
LPLUS
000066 00 26 27 28 00046 DB 0x00, KB_ALTMINUS, KB_CTLMINUS, KB_ALTCTLMINUS
00047
00048 ; tabella flag tasti speciali SHIFT, ALT, CTRL, CTRL+ALT
00006A 00049 SPCKEY3:
00006A A0 A0 A0 A0 00050 DB 0xA0, 0xA0, 0xA0, 0xA0
00006E A0 A0 A0 A0 00051 DB 0xA0, 0xA0, 0xA0, 0xA0
000072 A0 A0 A0 A0 00052 DB 0xA0, 0xA0, 0xA0, 0xA0
000076 A0 A0 A0 A0 00053 DB 0xA0, 0xA0, 0xA0, 0xA0
00007A A0 A0 A0 A0 00054 DB 0xA0, 0xA0, 0xA0, 0xA0
00007E A0 A0 A0 C0 00055 DB 0xA0, 0xA0, 0xA0, 0xC0
000082 A0 A0 A0 C0 00056 DB 0xA0, 0xA0, 0xA0, 0xC0
000086 A0 A0 A0 C0 00057 DB 0xA0, 0xA0, 0xA0, 0xC0
00008A A0 A0 A0 C0 00058 DB 0xA0, 0xA0, 0xA0, 0xC0
00008E A0 A0 A0 A0 00059 DB 0xA0, 0xA0, 0xA0, 0xA0
000092 A0 A0 A0 A0 00060 DB 0xA0, 0xA0, 0xA0, 0xA0
000096 A0 A0 A0 A0 00061 DB 0xA0, 0xA0, 0xA0, 0xA0
00062
00063 ; tabella tasti speciali
00009A 00064 SPCKEY:
00009A 83 00065 DB KB_PRTSCN
00009B 85 00066 DB KB_HOME
00009C 86 00067 DB KB_INSERT
00009D 88 00068 DB KB_PGUP
00009E 8A 00069 DB KB_PGDOWN
00009F 8C 00070 DB KB_END
0000A0 8E 00071 DB KB_DELETE
0000A1 90 00072 DB KB_BACKSPACE
0000A2 1B 00073 DB KB_ESCAPE
0000A3 09 00074 DB KB_TAB
0000A4 2B 00075 DB '+'
0000A5 2D 00076 DB '-'
0000A6 FF 00077 DB 0xFF
00078
00079 ; SEQUENZA E0 12 E0 7C PRTSCR DOWN (SIMULA SHIFT *)
00080 ; SEQUENZA E0 F0 7C E0 F0 12 PRTSCR UP
00081 ; SEQUENXA E1 14 77 E1 F0 14 F0 77 PAUSE (SIMULA L-CTRL NUMLOCK)
00082 ; E1 indica tasti no-repeat
00083
00084 ; PRIORITA' MODIFICATORI: ALT CTRL SHIFT CAPS/NUMLOCK
00085
MPASM 5.68 MAIN.ASM 9-3-2018 10:12:20 PAGE 33
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00086 ; Tabella codici prefissati da E1 - Tasto PAUSE (solo make)
00087 ; scan code: E1 14 77 E1 F0 14 F0 77 - di seguito la sequenza aspettata
0000A7 00088 EXT1TBL:
0000A7 14 77 E1 F0 14 00089 db 0x14, 0x77, 0xE1, 0xF0, 0x14, 0xF0, 0x77
F0 77
00090
00091 ; Tabella codici estesi (prefisso E0)
00092 ; NOTA: codice make PRNT -> E0 12 E0 7C (simula SHIFT *)
00093 ; codice break PRNT -> E0 F0 7C E0 F0 12
00094 ; Tutte le sequenze E0 12 / E0 F0 12 / E0 59 / E0 F0 59
00095 ; vengono scartate
00096 ; Per la combinazione CTRL BREAK (E0 7E E0 F0 7E) viene analizzata
00097 ; solo la parte che simula il rilascio (E0 F0 7E)
0000AE 00098 EXTTBL:
0000AE 7C 00099 DB 0x7C ; PRNT RILOCATO $00
0000AF 11 00100 DB 0x11 ; R-ALT RILOCATO $10
0000B0 14 00101 DB 0x14 ; R-CTRL RILOCATO $0F
0000B1 70 00102 DB 0x70 ; INS RILOCATO $13
0000B2 71 00103 DB 0x71 ; DEL RILOCATO $08
0000B3 6C 00104 DB 0x6C ; HOME RILOCATO $17
0000B4 69 00105 DB 0x69 ; END RILOCATO $18
0000B5 7A 00106 DB 0x7A ; PG-DOWN RILOCATO $19
0000B6 7D 00107 DB 0x7D ; PG-UP RILOCATO $20
0000B7 75 00108 DB 0x75 ; CSR-UP RILOCATO $28
0000B8 6B 00109 DB 0x6B ; CSR-LEFT RILOCATO $30
0000B9 72 00110 DB 0x72 ; CSR-DOWN RILOCATO $38
0000BA 74 00111 DB 0x74 ; CSR-RIGHT RILOCATO $39
0000BB 5A 00112 DB 0x5A ; KP-ENTER RILOCATO $5A
0000BC 4A 00113 DB 0x4A ; KP / RILOCATO $5F
0000BD 1F 00114 DB 0x1F ; L=GUI RILOCATO $1F
0000BE 27 00115 DB 0x27 ; R-GUI RILOCATO $27
0000BF 2F 00116 DB 0x2F ; APPS RILOCATO $2F
0000C0 37 00117 DB 0x37 ; PWR RILOCATO $37
0000C1 3F 00118 DB 0x3F ; SLEEP RILOCATO $3F
0000C2 5E 00119 DB 0x5E ; WAKE RILOCATO $5E
0000C3 7E 00120 DB 0x7E ; CTRL-BREAK RILOCATO $48
0000C4 FF 00121 DB 0xFF ; FINE TABELLA
00122
00123 ; Tabella rilocazione codici estesi (prefisso E0)
0000C5 00124 EXTRLTBL:
0000C5 00 00125 DB 0x00 ; PRNT RILOCATO $00
0000C6 10 00126 DB 0x10 ; R-ALT RILOCATO $10
0000C7 0F 00127 DB 0x0F ; R-CTRL RILOCATO $0F
0000C8 13 00128 DB 0x13 ; INS RILOCATO $13
0000C9 08 00129 DB 0x08 ; DEL RILOCATO $08
0000CA 17 00130 DB 0x17 ; HOME RILOCATO $17
0000CB 18 00131 DB 0x18 ; END RILOCATO $18
0000CC 19 00132 DB 0x19 ; PG-DOWN RILOCATO $19
0000CD 20 00133 DB 0x20 ; PG-UP RILOCATO $20
0000CE 28 00134 DB 0x28 ; CSR-UP RILOCATO $28
0000CF 30 00135 DB 0x30 ; CSR-LEFT RILOCATO $30
0000D0 38 00136 DB 0x38 ; CSR-DOWN RILOCATO $38
0000D1 39 00137 DB 0x39 ; CSR-RIGHT RILOCATO $39
MPASM 5.68 MAIN.ASM 9-3-2018 10:12:20 PAGE 34
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
0000D2 5A 00138 DB 0x5A ; KP-ENTER RILOCATO $5A
0000D3 5F 00139 DB 0x5F ; KP / RILOCATO $5F
0000D4 1F 00140 DB 0x1F ; L=GUI RILOCATO $1F
0000D5 27 00141 DB 0x27 ; R-GUI RILOCATO $27
0000D6 2F 00142 DB 0x2F ; APPS RILOCATO $2F
0000D7 37 00143 DB 0x37 ; PWR RILOCATO $37
0000D8 3F 00144 DB 0x3F ; SLEEP RILOCATO $3F
0000D9 5E 00145 DB 0x5E ; WAKE RILOCATO $5E
0000DA 48 00146 DB 0x48 ; CTRL-BREAK RILOCATO $48
00147
00148 ; Codici normali da rilocare
00149 ; I codici da 70 a 7E vanno rilocati in 60 - 6E
0000DB 00150 DEFTBL:
0000DB 83 00151 DB 0x83 ; F7 RILOCATO $02
0000DC 84 00152 DB 0x84 ; ALT SYSREQ RILOCATO $40
0000DD 66 00153 DB 0x66 ; BACKSPACE RILOCATO $47
0000DE 69 00154 DB 0x69 ; KP 1 RILOCATO $4F
0000DF 6B 00155 DB 0x6B ; KP 4 RILOCATO $50
0000E0 6C 00156 DB 0x6C ; KP 7 RILOCATO $51
0000E1 61 00157 DB 0x61 ; IT <> RILOCATO $53 (TASTO 45)
0000E2 FF 00158 DB 0xFF ; FINE TABELLA
00159
00160 ; Tabella rilocazione codici normali
0000E3 00161 DEFRLTBL:
0000E3 02 00162 DB 0x02 ; F7 RILOCATO $02
0000E4 40 00163 DB 0x40 ; ALT SYSREQ RILOCATO $40
0000E5 47 00164 DB 0x47 ; BACKSPACE RILOCATO $47
0000E6 4F 00165 DB 0x4F ; KP 1 RILOCATO $4F
0000E7 50 00166 DB 0x50 ; KP 4 RILOCATO $50
0000E8 51 00167 DB 0x51 ; KP 7 RILOCATO $51
0000E9 53 00168 DB 0x53 ; IT <> RILOCATO $53
00169
00170 ; seconda tabella di conversione (da codice scansione rilocato a semi ASCII)
00171 ; indice accesso da 00 a 6E
00172 ; la tabella ritorna un codice tra 00 e 7A esclusi 0B, 0F e range 57..60
00173 ; i codici relativi alle lettere a..z vengono restituiti come 'a'..'z'
00174 ; i codici 42..56 sono quelli da distinguere tra mappa US e mappa IT
00175 ; i valori 0xFF indicano codice non valido
0000EA 00176 CVTTBL
0000EA 1E 00177 DB PRTCODE ; 00 *PRNT
0000EB 3E 00178 DB 0x3E ; 01 F9
0000EC 3C 00179 DB 0x3C ; 02 *F7
0000ED 3A 00180 DB 0x3A ; 03 F5
0000EE 38 00181 DB 0x38 ; 04 F3
0000EF 36 00182 DB FNCCODE ; 05 F1
0000F0 37 00183 DB 0x37 ; 06 F2
0000F1 41 00184 DB 0x41 ; 07 F12
0000F2 35 00185 DB 0x35 ; 08 *DEL
0000F3 3F 00186 DB 0x3F ; 09 F10
0000F4 3D 00187 DB 0x3D ; 0A F8
0000F5 3B 00188 DB 0x3B ; 0B F6
0000F6 39 00189 DB 0x39 ; 0C F4
0000F7 0E 00190 DB 0x0E ; 0D TAB
MPASM 5.68 MAIN.ASM 9-3-2018 10:12:20 PAGE 35
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
0000F8 42 00191 DB 0x42 ; 0E `~ IT \|
0000F9 04 00192 DB 0x04 ; 0F *R-CTRL
0000FA 05 00193 DB 0x05 ; 10 *R-ALT
0000FB 02 00194 DB 0x02 ; 11 L- ALT
0000FC 00 00195 DB 0x00 ; 12 L-SHIFT
0000FD 2B 00196 DB INSCODE ; 13 *INS
0000FE 01 00197 DB 0x01 ; 14 L-CTRL
0000FF 71 00198 DB 'q' ; 15 qQ
000100 43 00199 DB 0x43 ; 16 1! IT 1!
000101 32 00200 DB 0x32 ; 17 *HOME
000102 2C 00201 DB 0x2C ; 18 *END
000103 2E 00202 DB 0x2E ; 19 *PG-DOWN
000104 7A 00203 DB 'z' ; 1A zZ
000105 73 00204 DB 's' ; 1B sS
000106 61 00205 DB 'a' ; 1C aA
000107 77 00206 DB 'w' ; 1D wW
000108 44 00207 DB 0x44 ; 1E 2@ IT 2"
000109 1C 00208 DB 0x1C ; 1F *L-GUI
00010A 34 00209 DB 0x34 ; 20 *PG-UP
00010B 63 00210 DB 'c' ; 21 cC
00010C 78 00211 DB 'x' ; 22 xX
00010D 64 00212 DB 'd' ; 23 dD
00010E 65 00213 DB 'e' ; 24 eE
00010F 45 00214 DB 0x45 ; 25 4$ IT 4$
000110 46 00215 DB 0x46 ; 26 3# IT 3 LIRA
000111 1B 00216 DB 0x1B ; 27 *R-GUI
000112 33 00217 DB 0x33 ; 28 *CSR-UP
000113 14 00218 DB 0x14 ; 29 SPACE
000114 76 00219 DB 'v' ; 2A vV
000115 66 00220 DB 'f' ; 2B fF
000116 74 00221 DB 't' ; 2C tT
000117 72 00222 DB 'r' ; 2D rR
000118 47 00223 DB 0x47 ; 2E 5% IT 5% (EURO)
000119 1D 00224 DB 0x1D ; 2F *APPS
00011A 2F 00225 DB 0x2F ; 30 *CSR-LEFT
00011B 6E 00226 DB 'n' ; 31 nN
00011C 62 00227 DB 'b' ; 32 bB
00011D 68 00228 DB 'h' ; 33 hH
00011E 67 00229 DB 'g' ; 34 gG
00011F 79 00230 DB 'y' ; 35 yY
000120 48 00231 DB 0x48 ; 36 6^ IT 6&
000121 1A 00232 DB 0x1A ; 37 *PWR
000122 2D 00233 DB 0x2D ; 38 *CSR-DOWN
000123 31 00234 DB 0x31 ; 39 *CSR-RIGHT
000124 6D 00235 DB 'm' ; 3A mM
000125 6A 00236 DB 'j' ; 3B jJ
000126 75 00237 DB 'u' ; 3C uU
000127 49 00238 DB 0x49 ; 3D 7& IT 7/
000128 4A 00239 DB 0x4A ; 3E 8* IT 8(
000129 19 00240 DB 0x19 ; 3F *SLEEP
00012A 17 00241 DB SYSCODE ; 40 *ALT SYSREQ
00012B 4B 00242 DB 0x4B ; 41 ,< IT ,:
00012C 6B 00243 DB 'k' ; 42 kK
MPASM 5.68 MAIN.ASM 9-3-2018 10:12:20 PAGE 36
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00012D 69 00244 DB 'i' ; 43 iI
00012E 6F 00245 DB 'o' ; 44 oO
00012F 4C 00246 DB 0x4C ; 45 0) IT 0=
000130 4D 00247 DB 0x4D ; 46 9( IT 9)
000131 15 00248 DB 0x15 ; 47 *BACKSPACE
000132 16 00249 DB CBRKCODE ; 48 *CTRL-BREAK
000133 4E 00250 DB 0x4E ; 49 .> IT .:
000134 4F 00251 DB 0x4F ; 4A /? IT -_
000135 6C 00252 DB 'l' ; 4B lL
000136 50 00253 DB 0x50 ; 4C ;: IT oc@
000137 70 00254 DB 'p' ; 4D pP
000138 51 00255 DB 0x51 ; 4E -_ IT '?
000139 21 00256 DB 0x21 ; 4F *KP 1
00013A 24 00257 DB 0x24 ; 50 *KP 4
00013B 27 00258 DB 0x27 ; 51 *KP 7
00013C 52 00259 DB 0x52 ; 52 '" IT ao#
00013D 0C 00260 DB 0x0C ; 53 *IT <>
00013E 53 00261 DB 0x53 ; 54 [{ IT ee[{
00013F 54 00262 DB 0x54 ; 55 =+ IT i^
000140 FF 00263 DB 0xFF ; 56
000141 FF 00264 DB 0xFF ; 57
000142 06 00265 DB CAPSCODE ; 58 CAPS LOCK
000143 03 00266 DB 0x03 ; 59 R-SHIFT
000144 0A 00267 DB CRCODE ; 5A ENTER <*KP ENTER>
000145 55 00268 DB 0x55 ; 5B ]} IT +*]}
000146 FF 00269 DB 0xFF ; 5C
000147 56 00270 DB 0x56 ; 5D \| IT paragrafo u
000148 18 00271 DB 0x18 ; 5E *WAKE
000149 10 00272 DB KPBARCODE ; 5F *<KP />
00014A 20 00273 DB KP0CODE ; 60 *KP 0
00014B 2A 00274 DB 0x2A ; 61 *KP .
00014C 22 00275 DB 0x22 ; 62 *KP 2
00014D 25 00276 DB 0x25 ; 63 *KP 5
00014E 26 00277 DB 0x26 ; 64 *KP 6
00014F 28 00278 DB 0x28 ; 65 *KP 8
000150 1F 00279 DB ESCCODE ; 66 *ESC
000151 07 00280 DB 0x07 ; 67 *NUM-LOCK
000152 40 00281 DB 0x40 ; 68 *F11
000153 11 00282 DB 0x11 ; 69 *KP +
000154 23 00283 DB 0x23 ; 6A *KP 3
000155 12 00284 DB 0x12 ; 6B *KP -
000156 13 00285 DB 0x13 ; 6C *KP *
000157 29 00286 DB 0x29 ; 6D *KP 9
000158 08 00287 DB 0x08 ; 6E *SCROLL-LOCK
000159 FF 00288 DB 0xFF
00289
00290 ; tabella flag RptSt per tasti NO REPEAT
00015A 00291 RPTTBL:
00015A 20 00292 DB WAKEM ; WAKE UP
00015B 40 00293 DB SLEEPM ; SLEEP
00015C 80 00294 DB PWRM ; POWER
00015D 08 00295 DB RGUIM ; R-GUI
00015E 10 00296 DB LGUIM ; L-GUI
MPASM 5.68 MAIN.ASM 9-3-2018 10:12:20 PAGE 37
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
00015F 04 00297 DB GUIAPPM ; GUI APP
000160 01 00298 DB PRINTM ; PRINT SCRN
000161 02 00299 DB ESCAPEM ; ESC
00300
00301 ; tabella conversione codici restituiti da CVTTBL a tasti effettivi
000162 00302 KEYTBL:
00303 ; questi indici impostano i flag di CtlSt e ShfSt
00304 ; rispecchiano lo stato di pressione/rilascio tasti SHIFT,ALT e CTRL
000162 01 00305 DB LSHFM ; 00 L-SHIFT
000163 02 00306 DB LCTLM ; 01 L-CTRL
000164 04 00307 DB LALTM ; 02 L-ALT
000165 08 00308 DB RSHFM ; 03 R-SHIFT
000166 10 00309 DB RCTLM ; 04 R-CTRL
000167 20 00310 DB RALTM ; 05 R-ALT
00311
00312 ; questi indici impostano i flag di TglSt
00313 ; rispecchiano lo stato dei tasti CAPS-LOCK/NUM-LOCK/SCROLL-LOCK/PAUSE
00314 ; NOTA: PAUSE non ha codice di rilascio
000168 80 00315 DB CAPSM ; 06 CAPS-LOCK
000169 40 00316 DB NUMLM ; 07 NUM-LOCK
00016A 20 00317 DB SCRLM ; 08 SCROLL-LOCK
00318 ; il tasto PAUSE va trattato come un tasto toggle
00016B 10 00319 DB PAUSM ; 09 PAUSE
00320
00321 ; i tasti seguenti vanno testati con lo shift
00016C 0D 00322 DB KB_CR ; 0A ENTER
00016D 8D 00323 DB KB_SHCR ; 0B SHIFT ENTER
00016E 3C 00324 DB '<' ; 0C IT <
00016F 3E 00325 DB '>' ; 0D SHIFT IT >
000170 09 00326 DB KB_TAB ; 0E TAB
000171 89 00327 DB KB_SHTAB ; 0F SHIFT TAB
00328
00329 ; questi indici non vanno trattati eccetto ESC/PRINT SCRN
00330 ; per il tasto esc va impostato il flag premuto/rilasciato
000172 2F 00331 DB '/' ; 10 KP /
000173 2B 00332 DB '+' ; 11 KP +
000174 2D 00333 DB '-' ; 12 KP -
000175 2A 00334 DB '*' ; 13 KP *
000176 20 00335 DB ' ' ; 14 SPACE
000177 90 00336 DB KB_BACKSPACE ; 15 BACKSPACE
000178 83 00337 DB KB_CTRLBREAK ; 16 CTRL BREAK
000179 84 00338 DB KB_ALTSYSREQ ; 17 ALT SYS REQ
00017A 85 00339 DB KB_WAKE ; 18 WAKE
00017B 86 00340 DB KB_SLEEP ; 19 SLEEP
00017C 87 00341 DB KB_PWR ; 1A PWR
00017D 80 00342 DB KB_RIGHTGUI ; 1B R-GUI
00017E 81 00343 DB KB_LEFTGUI ; 1C L-GUI
00017F 82 00344 DB KB_GUIMENU ; 1D APPS/MENU
000180 83 00345 DB KB_PRTSCN ; 1E PRTSCN/SYSRQ
000181 1B 00346 DB KB_ESCAPE ; 1F ESC
00347
00348 ; tasti numerici vanno trattati specialmente
000182 30 00349 DB '0' ; 20 KP 0
MPASM 5.68 MAIN.ASM 9-3-2018 10:12:20 PAGE 38
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
000183 31 00350 DB '1' ; 21 KP 1
000184 32 00351 DB '2' ; 22 KP 2
000185 33 00352 DB '3' ; 23 KP 3
000186 34 00353 DB '4' ; 24 KP 4
000187 35 00354 DB '5' ; 25 KP 5
000188 36 00355 DB '6' ; 26 KP 6
000189 37 00356 DB '7' ; 27 KP 7
00018A 38 00357 DB '8' ; 28 KP 8
00018B 39 00358 DB '9' ; 29 KP 9
00018C 2E 00359 DB '.' ; 2A KP .
00360
00361 ; tasti cursore: INSERT va trattato specialmente (toggle bit)
00018D 86 00362 DB KB_INSERT ; 2B INS
00018E 8C 00363 DB KB_END ; 2C END
00018F 8B 00364 DB KB_CSRDOWN ; 2D CSR DOWN
000190 8A 00365 DB KB_PGDOWN ; 2E PG DOWN
000191 8F 00366 DB KB_CSRLEFT ; 2F CSR LEFT
000192 00 00367 DB 0x00 ; 30 - TASTO NULL
000193 87 00368 DB KB_CSRRIGHT ; 31 CSR RIGHT
000194 85 00369 DB KB_HOME ; 32 HOME
000195 84 00370 DB KB_CSRUP ; 33 CSR UP
000196 88 00371 DB KB_PGUP ; 34 PG UP
000197 8E 00372 DB KB_DELETE ; 35 DEL
00373
00374 ; tasti funzione
000198 A0 00375 DB KB_F1 ; 36 F1
000199 A1 00376 DB KB_F2 ; 37 F2
00019A A2 00377 DB KB_F3 ; 38 F3
00019B A3 00378 DB KB_F4 ; 39 F4
00019C A4 00379 DB KB_F5 ; 3A F5
00019D A5 00380 DB KB_F6 ; 3B F6
00019E A6 00381 DB KB_F7 ; 3C F7
00019F A7 00382 DB KB_F8 ; 3D F8
0001A0 A8 00383 DB KB_F9 ; 3E F9
0001A1 A9 00384 DB KB_F10 ; 3F F10
0001A2 AA 00385 DB KB_F11 ; 40 F11
0001A3 AB 00386 DB KB_F12 ; 41 F12
00387
00388 ; tabella flag codice corrispondente a KEYTBL
00389 ; 0x00 -> codice ASCII
00390 ; 0x10 -> codice ASCII + flag toggle 4 bit low
00391 ; 0x80 -> invia status shift/alt/ctrl
00392 ; 0x90 -> invia status toggle
00393 ; 0xA0 -> codice di controllo
00394 ; 0xB0 -> codice di controllo + flag toggle 4 bit low
00395 ; 0xC0 -> codice tasto NMI
0001A4 00396 FLGTBL:
00397 ; questi valori non sono usati - il tasto viene trattato a parte
0001A4 80 00398 DB 0x80 ; 00 L-SHIFT
0001A5 80 00399 DB 0x80 ; 01 L-CTRL
0001A6 80 00400 DB 0x80 ; 02 L-ALT
0001A7 80 00401 DB 0x80 ; 03 R-SHIFT
0001A8 80 00402 DB 0x80 ; 04 R-CTRL
MPASM 5.68 MAIN.ASM 9-3-2018 10:12:20 PAGE 39
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
0001A9 80 00403 DB 0x80 ; 05 R-ALT
0001AA 90 00404 DB 0x90 ; 06 CAPS-LOCK
0001AB 90 00405 DB 0x90 ; 07 NUM-LOCK
0001AC 90 00406 DB 0x90 ; 08 SCROLL-LOCK
0001AD 90 00407 DB 0x90 ; 09 PAUSE
0001AE 00 00408 DB 0x00 ; 0A ENTER
0001AF A0 00409 DB 0xA0 ; 0B SHIFT ENTER
0001B0 00 00410 DB 0x00 ; 0C IT <
0001B1 00 00411 DB 0x00 ; 0D SHIFT IT >
0001B2 00 00412 DB 0x00 ; 0E TAB
0001B3 A0 00413 DB 0xA0 ; 0F SHIFT TAB
0001B4 00 00414 DB 0x00 ; 10 KP /
0001B5 00 00415 DB 0x00 ; 11 KP +
0001B6 00 00416 DB 0x00 ; 12 KP -
0001B7 00 00417 DB 0x00 ; 13 KP *
0001B8 00 00418 DB 0x00 ; 14 SPACE
0001B9 A0 00419 DB 0xA0 ; 15 BACKSPACE
0001BA C0 00420 DB 0xC0 ; 16 CTRL BREAK
0001BB C0 00421 DB 0xC0 ; 17 ALT SYS REQ
0001BC C0 00422 DB 0xC0 ; 18 WAKE
0001BD C0 00423 DB 0xC0 ; 19 SLEEP
0001BE C0 00424 DB 0xC0 ; 1A PWR
0001BF A0 00425 DB 0xA0 ; 1B R-GUI
0001C0 A0 00426 DB 0xA0 ; 1C L-GUI
0001C1 A0 00427 DB 0xA0 ; 1D APPS/MENU
0001C2 B0 00428 DB 0xB0 ; 1E PRTSCN/SYSRQ
0001C3 10 00429 DB 0x10 ; 1F ESC
0001C4 00 00430 DB 0x00 ; 20 KP 0
0001C5 00 00431 DB 0x00 ; 21 KP 1
0001C6 00 00432 DB 0x00 ; 22 KP 2
0001C7 00 00433 DB 0x00 ; 23 KP 3
0001C8 00 00434 DB 0x00 ; 24 KP 4
0001C9 00 00435 DB 0x00 ; 25 KP 5
0001CA 00 00436 DB 0x00 ; 26 KP 6
0001CB 00 00437 DB 0x00 ; 27 KP 7
0001CC 00 00438 DB 0x00 ; 28 KP 8
0001CD 00 00439 DB 0x00 ; 29 KP 9
0001CE 00 00440 DB 0x00 ; 2A KP .
0001CF B0 00441 DB 0xB0 ; 2B INS
0001D0 A0 00442 DB 0xA0 ; 2C END
0001D1 A0 00443 DB 0xA0 ; 2D CSR DOWN
0001D2 A0 00444 DB 0xA0 ; 2E PG DOWN
0001D3 A0 00445 DB 0xA0 ; 2F CSR LEFT
0001D4 A0 00446 DB 0xA0 ; 30 - TASTO NULL
0001D5 A0 00447 DB 0xA0 ; 31 CSR RIGHT
0001D6 A0 00448 DB 0xA0 ; 32 HOME
0001D7 A0 00449 DB 0xA0 ; 33 CSR UP
0001D8 A0 00450 DB 0xA0 ; 34 PG UP
0001D9 A0 00451 DB 0xA0 ; 35 DEL
0001DA A0 00452 DB 0xA0 ; 36 F1
0001DB A0 00453 DB 0xA0 ; 37 F2
0001DC A0 00454 DB 0xA0 ; 38 F3
0001DD A0 00455 DB 0xA0 ; 39 F4
MPASM 5.68 MAIN.ASM 9-3-2018 10:12:20 PAGE 40
LOC OBJECT CODE LINE SOURCE TEXT
VALUE
0001DE A0 00456 DB 0xA0 ; 3A F5
0001DF A0 00457 DB 0xA0 ; 3B F6
0001E0 A0 00458 DB 0xA0 ; 3C F7
0001E1 A0 00459 DB 0xA0 ; 3D F8
0001E2 A0 00460 DB 0xA0 ; 3E F9
0001E3 A0 00461 DB 0xA0 ; 3F F10
0001E4 A0 00462 DB 0xA0 ; 40 F11
0001E5 A0 00463 DB 0xA0 ; 41 F12
00464
01509
01510 end
MPASM 5.68 MAIN.ASM 9-3-2018 10:12:20 PAGE 41
SYMBOL TABLE
LABEL VALUE
A 00000000
AALTB 00000007
AALTM 00000080
ABDEN 00000000
ABDOVF 00000007
ACCESS 00000000
ACKDT 00000005
ACKEN 00000004
ACKSTAT 00000006
ACQT0 00000003
ACQT1 00000004
ACQT2 00000005
ACTLB 00000006
ACTLM 00000040
ADCON0 00000FC2
ADCON1 00000FC1
ADCON2 00000FC0
ADCS0 00000000
ADCS1 00000001
ADCS2 00000002
ADDEN 00000003
ADEN 00000003
ADFM 00000007
ADIE 00000006
ADIF 00000006
ADIP 00000006
ADMSK1 00000001
ADMSK2 00000002
ADMSK3 00000003
ADMSK4 00000004
ADMSK5 00000005
ADON 00000000
ADRES 00000FC3
ADRESH 00000FC4
ADRESL 00000FC3
ALLALTCTLM 000000C0
ALTCTLB 00000006
ALTCTLKEY0 00000050
ALTCTLM 00000040
ALTKEY0 00000030
ALTKM 00000024
AN0 00000000
AN1 00000001
AN10 00000001
AN11 00000004
AN12 00000000
AN2 00000002
AN3 00000003
AN4 00000005
AN5 00000000
AN6 00000001
AN7 00000002
AN8 00000002
MPASM 5.68 MAIN.ASM 9-3-2018 10:12:20 PAGE 42
SYMBOL TABLE
LABEL VALUE
AN9 00000003
ASHFB 00000007
ASHFM 00000080
BANKED 00000001
BAUDCON 00000FB8
BAUDCTL 00000FB8
BCLIE 00000003
BCLIF 00000003
BCLIP 00000003
BF 00000000
BGST 00000005
BOR 00000000
BRG16 00000003
BRGH 00000002
BSR 00000FE0
C 00000000
C1INV 00000004
C1OUT_CMCON 00000006
C1OUT_PORTA 00000004
C2INV 00000005
C2OUT_CMCON 00000007
C2OUT_PORTA 00000005
CAPSB 00000007
CAPSCODE 00000006
CAPSM 00000080
CBRKCODE 00000016
CCP1 00000002
CCP1CON 00000FBD
CCP1IE 00000002
CCP1IF 00000002
CCP1IP 00000002
CCP1M0 00000000
CCP1M1 00000001
CCP1M2 00000002
CCP1M3 00000003
CCP1X 00000005
CCP1Y 00000004
CCP2CON 00000FBA
CCP2IE 00000000
CCP2IF 00000000
CCP2IP 00000000
CCP2M0 00000000
CCP2M1 00000001
CCP2M2 00000002
CCP2M3 00000003
CCP2X 00000005
CCP2Y 00000004
CCP2_PORTB 00000003
CCP2_PORTC 00000001
CCPR1 00000FBE
CCPR1H 00000FBF
CCPR1L 00000FBE
CCPR2 00000FBB
MPASM 5.68 MAIN.ASM 9-3-2018 10:12:20 PAGE 43
SYMBOL TABLE
LABEL VALUE
CCPR2H 00000FBC
CCPR2L 00000FBB
CFGS 00000006
CHS0 00000002
CHS1 00000003
CHS2 00000004
CHS3 00000005
CIS 00000003
CK 00000006
CKE 00000006
CKP 00000004
CLKI 00000007
CLKO 00000006
CM0 00000000
CM1 00000001
CM2 00000002
CMCON 00000FB4
CMIE 00000006
CMIF 00000006
CMIP 00000006
CNTMSTMR0 (0x10000 - ((count * D'625')) / D'32')
CNTTMR0 (0x10000 - ((count * D'1250')))
CNTUSTMR0 (0x10000 - (count * 5))
CRCODE 0000000A
CREN 00000004
CRSLEN 0000000B
CS 00000002
CSRC 00000007
CTLKEY0 00000040
CTRLKM 00000012
CVR0 00000000
CVR1 00000001
CVR2 00000002
CVR3 00000003
CVRCON 00000FB5
CVREF 00000002
CVREN 00000007
CVROE 00000006
CVRR 00000005
CVRSS 00000004
CVTTBL 000000EA
Caps 0000002C
ClrRX 00000400
Cmd0 000008B6
Cmd1 000008C0
Cmd2 000008EA
CmdEnd 000008F6
CmdRsp 000008EC
CtlSt 00000022
D 00000005
DC 00000001
DC1B0 00000004
DC1B1 00000005
MPASM 5.68 MAIN.ASM 9-3-2018 10:12:20 PAGE 44
SYMBOL TABLE
LABEL VALUE
DC2B0 00000004
DC2B1 00000005
DDRA TRISA
DDRB TRISB
DDRC TRISC
DDRD TRISD
DDRE TRISE
DEFRLTBL 000000E3
DEFTBL 000000DB
DONE 00000001
D_A 00000005
D_NOT_A 00000005
Delay_ms 00000376
Delay_us 0000037A
Delay_xx 0000037C
Delay_xx1 0000038A
E1Cnt 0000000A
E1PtrH 00000009
E1PtrL 00000008
E1SEQCNT 00000007
E1Test 000003FC
ECCP1AS 00000FB6
ECCP1DEL 00000FB7
ECCPAS 00000FB6
ECCPAS0 00000004
ECCPAS1 00000005
ECCPAS2 00000006
ECCPASE 00000007
EEADR 00000FA9
EECON1 00000FA6
EECON2 00000FA7
EEDATA 00000FA8
EEIE 00000004
EEIF 00000004
EEIP 00000004
EEPGD 00000007
ESCAPEM 00000002
ESCB 00000001
ESCCODE 0000001F
ESCM 00000002
ESCPRNM 00000003
EXT1TBL 000000A7
EXTRLTBL 000000C5
EXTTBL 000000AE
FAST 00000001
FERR 00000002
FLGTBL 000001A4
FLT0 00000000
FLTS 00000002
FNCCODE 00000036
FREE 00000004
FSR0 00000000
FSR0H 00000FEA
MPASM 5.68 MAIN.ASM 9-3-2018 10:12:20 PAGE 45
SYMBOL TABLE
LABEL VALUE
FSR0L 00000FE9
FSR1 00000001
FSR1H 00000FE2
FSR1L 00000FE1
FSR2 00000002
FSR2H 00000FDA
FSR2L 00000FD9
FnAdd 00000714
FnNoShf 00000700
GCEN 00000007
GIE 00000007
GIEH 00000007
GIEL 00000006
GIE_GIEH 00000007
GO 00000001
GO_DONE 00000001
GO_NOT_DONE 00000001
GUIAPPM 00000004
GetKbd 0000018C
GetKbd10 000001A2
GetKeyTbl 00000844
GetLine 000000D8
GetLine1 000000FC
GetLine2 00000102
HDRQIN 00000001
HLINT 00000000
HLNMI 00000001
HLVDCON 00000FD2
HLVDEN 00000004
HLVDIE 00000002
HLVDIF 00000002
HLVDIN 00000005
HLVDIP 00000002
HLVDL0 00000000
HLVDL1 00000001
HLVDL2 00000002
HLVDL3 00000003
IBF 00000007
IBOV 00000005
IDLEN 00000007
INDF0 00000FEF
INDF1 00000FE7
INDF2 00000FDF
INSCODE 0000002B
INSTB 00000002
INSTM 00000004
INT0 00000000
INT0E 00000004
INT0F 00000001
INT0IE 00000004
INT0IF 00000001
INT1 00000001
INT1E 00000003
MPASM 5.68 MAIN.ASM 9-3-2018 10:12:20 PAGE 46
SYMBOL TABLE
LABEL VALUE
INT1F 00000000
INT1IE 00000003
INT1IF 00000000
INT1IP 00000006
INT1P 00000006
INT2 00000002
INT2E 00000004
INT2F 00000001
INT2IE 00000004
INT2IF 00000001
INT2IP 00000007
INT2P 00000007
INTCON 00000FF2
INTCON2 00000FF1
INTCON3 00000FF0
INTEDG0 00000006
INTEDG1 00000005
INTEDG2 00000004
INTSRC 00000007
IOFS 00000002
IPEN 00000007
IPR1 00000F9F
IPR2 00000FA2
IRCF0 00000004
IRCF1 00000005
IRCF2 00000006
IRVST 00000005
ITMap 00000532
IVRST 00000005
Init1 00000214
Init10 00000320
Init2 0000025C
Init3 00000296
Init4 00000298
Init6 000002D8
Init61 000002EC
Init62 00000300
Init63 00000314
InitData 00000338
InitData1 0000033E
InitData2 0000034E
InitIO 000001D6
KBACK 00000004
KBBAT 00000006
KBBAT2 00000004
KBD_ACK 000000FA
KBD_BAT 000000AA
KBD_BRK 000000F0
KBD_DEFRATE 0000000B
KBD_DEFRATE2 00000037
KBD_ECHO 000000EE
KBD_ENABLE 000000F4
KBD_EXT 000000E0
MPASM 5.68 MAIN.ASM 9-3-2018 10:12:20 PAGE 47
SYMBOL TABLE
LABEL VALUE
KBD_EXT1 000000E1
KBD_GETID 000000F2
KBD_IDH 00000083
KBD_IDL 000000AB
KBD_NOBAT 000000FC
KBD_RESEND 000000FE
KBD_RESET 000000FF
KBD_SETLED 000000ED
KBD_SETSC 000000F0
KBD_TYPERATE 000000F3
KBENABLE 00000002
KBFND 00000007
KBI0 00000004
KBI1 00000005
KBI2 00000006
KBI3 00000007
KBLEDOK 00000000
KBNOBAT 00000007
KBRATE 00000003
KBRX 00000007
KBRXERR 0000000C
KBSCOK 00000001
KBTX 00000006
KBVID 00000005
KBVOFF 00000006
KBVON 00000007
KB_ALTBKS 0000001C
KB_ALTCTLBKS 00000082
KB_ALTCTLDEL 00000081
KB_ALTCTLEND 00000080
KB_ALTCTLESC 00000088
KB_ALTCTLHOME 00000008
KB_ALTCTLINS 0000000C
KB_ALTCTLMINUS 00000028
KB_ALTCTLPGDWN 00000014
KB_ALTCTLPGUP 00000010
KB_ALTCTLPLUS 00000025
KB_ALTCTLPRT 00000004
KB_ALTCTLTAB 00000022
KB_ALTDEL 00000019
KB_ALTEND 00000016
KB_ALTESC 0000001E
KB_ALTHOME 00000006
KB_ALTINS 0000000A
KB_ALTMINUS 00000026
KB_ALTPGDWN 00000012
KB_ALTPGUP 0000000E
KB_ALTPLUS 00000023
KB_ALTPRT 00000002
KB_ALTSYSREQ 00000084
KB_ALTTAB 00000020
KB_BACKSPACE 00000090
KB_CR 0000000D
MPASM 5.68 MAIN.ASM 9-3-2018 10:12:20 PAGE 48
SYMBOL TABLE
LABEL VALUE
KB_CSRDOWN 0000008B
KB_CSRLEFT 0000008F
KB_CSRRIGHT 00000087
KB_CSRUP 00000084
KB_CTLBKS 0000001D
KB_CTLDEL 0000001A
KB_CTLEND 00000017
KB_CTLESC 0000001F
KB_CTLHOME 00000007
KB_CTLINS 0000000B
KB_CTLMINUS 00000027
KB_CTLPGDWN 00000013
KB_CTLPGUP 0000000F
KB_CTLPLUS 00000024
KB_CTLPRT 00000003
KB_CTLTAB 00000021
KB_CTRLBREAK 00000083
KB_DELETE 0000008E
KB_END 0000008C
KB_ESCAPE 0000001B
KB_F1 000000A0
KB_F10 000000A9
KB_F11 000000AA
KB_F12 000000AB
KB_F2 000000A1
KB_F3 000000A2
KB_F4 000000A3
KB_F5 000000A4
KB_F6 000000A5
KB_F7 000000A6
KB_F8 000000A7
KB_F9 000000A8
KB_GUIMENU 00000082
KB_HOME 00000085
KB_INSERT 00000086
KB_LEFTGUI 00000081
KB_PGDOWN 0000008A
KB_PGUP 00000088
KB_PRTSCN 00000083
KB_PWR 00000087
KB_RIGHTGUI 00000080
KB_SHCR 0000008D
KB_SHIFTBKS 0000001B
KB_SHIFTDEL 00000018
KB_SHIFTEND 00000015
KB_SHIFTHOME 00000005
KB_SHIFTINS 00000009
KB_SHIFTPGDWN 00000011
KB_SHIFTPGUP 0000000D
KB_SHIFTPRT 00000001
KB_SHTAB 00000089
KB_SLEEP 00000086
KB_TAB 00000009
MPASM 5.68 MAIN.ASM 9-3-2018 10:12:20 PAGE 49
SYMBOL TABLE
LABEL VALUE
KB_WAKE 00000085
KBuf 0000001B
KCLKIN 00000003
KCLKO 00000004
KCnt 00000018
KDATAIN 00000000
KDATAO 00000005
KEYCTL 00000007
KEYCTL2 00000005
KEYRLS 00000006
KEYTBL 00000162
KEYTGL 00000004
KFRFULL 00000007
KFRFlag 00000002
KFRRD 00000000
KFRRd0 00000004
KFRRd1 00000005
KFRRd2 00000006
KFRRd3 00000007
KFRRdCnt 00000003
KFRRead 00000880
KFRRead1 0000088C
KFRRead2 00000892
KFRSRP 00000003
KFRSSI 00000005
KFRSSN 00000004
KFRWE 00000001
KFRWrite 0000086E
KNoBAT 0000028E
KP0CODE 00000020
KPARY 00000002
KPBARCODE 00000010
KPar 00000019
KRESET 00000000
KSTOP 00000003
KStatus 0000001A
KTIMEO 00000001
KbVerf 00000394
KbVerf2 000003C6
KbdFlag 0000001D
KbdFlag2 0000001E
KbdIDH 00000001
KbdIDL 00000000
KbdInt 00000000
KbdInt10 00000020
KbdInt11 00000046
KbdInt12 00000056
KbdInt20 00000072
KbdInt99 00000052
KbdProc 000003C8
KbdProc0 000003D4
KbdProc1 0000041C
KbdProc10 000004C0
MPASM 5.68 MAIN.ASM 9-3-2018 10:12:20 PAGE 50
SYMBOL TABLE
LABEL VALUE
KbdProc12 00000586
KbdProc13 000005DC
KbdProc14 0000062C
KbdProc15 0000066A
KbdProc16 00000670
KbdProc18 0000068E
KbdProc2 00000426
KbdProc20 0000069A
KbdProc21 000006AA
KbdProc22 000006B0
KbdProc23 000006BC
KbdProc24 000006C2
KbdProc25 000006D8
KbdProc26 000006E0
KbdProc3 00000434
KbdProc4 0000044E
KbdProc40 00000718
KbdProc41 0000071A
KbdProc42 0000073A
KbdProc43 00000748
KbdProc5 0000045C
KbdProc50 00000758
KbdProc6 00000480
KbdProc60 00000826
KbdProc61 00000828
KbdProc7 0000048A
KbdProc8 000004AE
Key01 00000776
Key02 0000077C
Key06 00000786
Key10 0000079E
Key11 000007B0
Key12 000007CE
Key13 000007D8
Key15 000007DE
KeySnd 00000816
LALTB 00000002
LALTM 00000004
LATA 00000F89
LATA0 00000000
LATA1 00000001
LATA2 00000002
LATA3 00000003
LATA4 00000004
LATA5 00000005
LATA6 00000006
LATA7 00000007
LATB 00000F8A
LATB0 00000000
LATB1 00000001
LATB2 00000002
LATB3 00000003
LATB4 00000004
MPASM 5.68 MAIN.ASM 9-3-2018 10:12:20 PAGE 51
SYMBOL TABLE
LABEL VALUE
LATB5 00000005
LATB6 00000006
LATB7 00000007
LATC 00000F8B
LATC0 00000000
LATC1 00000001
LATC2 00000002
LATC3 00000003
LATC4 00000004
LATC5 00000005
LATC6 00000006
LATC7 00000007
LATD 00000F8C
LATD0 00000000
LATD1 00000001
LATD2 00000002
LATD3 00000003
LATD4 00000004
LATD5 00000005
LATD6 00000006
LATD7 00000007
LATE 00000F8D
LATE0 00000000
LATE1 00000001
LATE2 00000002
LCTLB 00000001
LCTLM 00000002
LGUIM 00000010
LSHFB 00000000
LSHFM 00000001
LVDCON 00000FD2
LVDEN 00000004
LVDIE 00000002
LVDIF 00000002
LVDIN 00000005
LVDIP 00000002
LVDL0 00000000
LVDL1 00000001
LVDL2 00000002
LVDL3 00000003
LVV0 00000000
LVV1 00000001
LVV2 00000002
LVV3 00000003
LedSt 00000026
LedUpd 00000662
LockSt 00000025
MAPALPHA 00000006
MAPCODE 00000042
MAPCODEMAX 00000056
MAPITB 00000007
MCLR 00000003
MKeyTst 000004FC
MPASM 5.68 MAIN.ASM 9-3-2018 10:12:20 PAGE 52
SYMBOL TABLE
LABEL VALUE
Main 00000994
Main2 000009A0
MapCfg 0000002B
MapTst 0000050C
N 00000004
NKeyRls 0000056C
NKeySet 00000566
NKeyTst 0000053A
NMISnd 00000834
NMITst 00000570
NMITst1 00000578
NOT_A 00000005
NOT_ADDRESS 00000005
NOT_BOR 00000000
NOT_CS 00000002
NOT_DONE 00000001
NOT_MCLR 00000003
NOT_PD 00000002
NOT_POR 00000001
NOT_RBPU 00000007
NOT_RD 00000000
NOT_RI 00000004
NOT_SS 00000005
NOT_T1SYNC 00000002
NOT_T3SYNC 00000002
NOT_TO 00000003
NOT_W 00000002
NOT_WR 00000001
NOT_WRITE 00000002
NUMLB 00000006
NUMLM 00000040
NVCODE 00000060
NoPause 00000644
OBF 00000006
OERR 00000001
OSC1 00000007
OSC2 00000006
OSCCON 00000FD3
OSCFIE 00000007
OSCFIF 00000007
OSCFIP 00000007
OSCTUNE 00000F9B
OSTS 00000003
OV 00000003
P 00000004
P1A 00000002
P1B 00000005
P1C 00000006
P1D 00000007
P1M0 00000006
P1M1 00000007
PAUSB 00000004
PAUSECODE 00000009
MPASM 5.68 MAIN.ASM 9-3-2018 10:12:20 PAGE 53
SYMBOL TABLE
LABEL VALUE
PAUSM 00000010
PC 00000FF9
PCFG0 00000000
PCFG1 00000001
PCFG2 00000002
PCFG3 00000003
PCL 00000FF9
PCLATH 00000FFA
PCLATU 00000FFB
PD 00000002
PDC0 00000000
PDC1 00000001
PDC2 00000002
PDC3 00000003
PDC4 00000004
PDC5 00000005
PDC6 00000006
PEIE 00000006
PEIE_GIEL 00000006
PEN 00000002
PGC 00000006
PGD 00000007
PGM 00000005
PIE1 00000F9D
PIE2 00000FA0
PIR1 00000F9E
PIR2 00000FA1
PLLEN 00000006
PLUSW0 00000FEB
PLUSW1 00000FE3
PLUSW2 00000FDB
POR 00000001
PORTA 00000F80
PORTB 00000F81
PORTC 00000F82
PORTD 00000F83
PORTE 00000F84
POSTDEC0 00000FED
POSTDEC1 00000FE5
POSTDEC2 00000FDD
POSTINC0 00000FEE
POSTINC1 00000FE6
POSTINC2 00000FDE
PR2 00000FCB
PREINC0 00000FEC
PREINC1 00000FE4
PREINC2 00000FDC
PRINTM 00000001
PRNSCB 00000000
PRNSCM 00000001
PROD 00000FF3
PRODH 00000FF4
PRODL 00000FF3
MPASM 5.68 MAIN.ASM 9-3-2018 10:12:20 PAGE 54
SYMBOL TABLE
LABEL VALUE
PRSEN 00000007
PRTCODE 0000001E
PSA 00000003
PSP0 00000000
PSP1 00000001
PSP2 00000002
PSP3 00000003
PSP4 00000004
PSP5 00000005
PSP6 00000006
PSP7 00000007
PSPIE 00000007
PSPIF 00000007
PSPIP 00000007
PSPMODE 00000004
PSSAC0 00000002
PSSAC1 00000003
PSSBD0 00000000
PSSBD1 00000001
PWM1CON 00000FB7
PWRM 00000080
PauseKey 00000414
PutKey 000005F4
R 00000002
RA0 00000000
RA1 00000001
RA2 00000002
RA3 00000003
RA4 00000004
RA5 00000005
RA6 00000006
RA7 00000007
RALTB 00000005
RALTM 00000020
RB0 00000000
RB1 00000001
RB2 00000002
RB3 00000003
RB4 00000004
RB5 00000005
RB6 00000006
RB7 00000007
RBIE 00000003
RBIF 00000000
RBIP 00000000
RBMASK 0000000D
RBPU 00000007
RC0 00000000
RC1 00000001
RC2 00000002
RC3 00000003
RC4 00000004
RC5 00000005
MPASM 5.68 MAIN.ASM 9-3-2018 10:12:20 PAGE 55
SYMBOL TABLE
LABEL VALUE
RC6 00000006
RC7 00000007
RCEN 00000003
RCIDL 00000006
RCIE 00000005
RCIF 00000005
RCIP 00000005
RCMT 00000006
RCON 00000FD0
RCREG 00000FAE
RCSTA 00000FAB
RCTLB 00000004
RCTLM 00000010
RD 00000000
RD0 00000000
RD1 00000001
RD16 00000007
RD2 00000002
RD3 00000003
RD4 00000004
RD5 00000005
RD6 00000006
RD7 00000007
RE0 00000000
RE1 00000001
RE2 00000002
RE3 00000003
RESIN 00000002
RGUIM 00000008
RI 00000004
RPTTBL 0000015A
RSEN 00000001
RSHFB 00000003
RSHFM 00000008
RX 00000007
RX9 00000006
RX9D 00000000
RXBRK 00000006
RXBUFLEN 000000FE
RXDTP 00000005
RXE1ERR 00000003
RXEXT 00000005
RXEXT1 00000004
RXMASK 00000080
RXOVR 00000007
R_NOT_W 00000002
R_W 00000002
RptSt 0000002A
RxBufEnd 0000013E
RxBuffer 00000040
RxCnt 0000000C
RxCode 0000001F
RxData 0000000B
MPASM 5.68 MAIN.ASM 9-3-2018 10:12:20 PAGE 56
SYMBOL TABLE
LABEL VALUE
RxFlag 0000000D
RxKeyb 00000078
RxKeyb1 00000096
RxKeyb2 0000009A
RxKeyb3 0000009E
RxKeyb4 000000A8
RxKeyb5 000000AE
RxKeyb6 000000B2
RxKeyb7 000000C0
RxKeyb8 000000C4
RxKeyb9 000000CC
S 00000003
SBOREN 00000006
SCK 00000003
SCKP 00000004
SCL 00000003
SCLOCKH
SCLOCKL
SCRLB 00000005
SCRLM 00000020
SCS0 00000000
SCS1 00000001
SDA 00000004
SDATAH
SDATAL
SDI 00000004
SDO 00000005
SEN 00000000
SENDB 00000003
SHFALL 000000C0
SHIFTKM 00000009
SKPALL 00000070
SKPALTB 00000005
SKPCTLB 00000006
SKPSHFB 00000004
SLEEPM 00000040
SMP 00000007
SP0 00000000
SP1 00000001
SP2 00000002
SP3 00000003
SP4 00000004
SPBRG 00000FAF
SPBRGH 00000FB0
SPCKEY 0000009A
SPCKEY2 0000003A
SPCKEY3 0000006A
SPEN 00000007
SREN 00000005
SS 00000005
SSPADD 00000FC8
SSPBUF 00000FC9
SSPCON1 00000FC6
MPASM 5.68 MAIN.ASM 9-3-2018 10:12:20 PAGE 57
SYMBOL TABLE
LABEL VALUE
SSPCON2 00000FC5
SSPEN 00000005
SSPIE 00000003
SSPIF 00000003
SSPIP 00000003
SSPM0 00000000
SSPM1 00000001
SSPM2 00000002
SSPM3 00000003
SSPOV 00000006
SSPSTAT 00000FC7
STATUS 00000FD8
STKFUL 00000007
STKOVF 00000007
STKPTR 00000FFC
STKUNF 00000006
SWDTE 00000000
SWDTEN 00000000
SYNC 00000004
SYSCODE 00000017
SendKbd 000001AE
SendKbd10 000001D2
SendLed 000001A6
SetLed 00000900
SetLed1 00000908
SetLed2 00000940
ShfSt 00000020
SndProc 00000944
Start 0000098C
T016BIT 00000006
T08BIT 00000006
T0CKI 00000004
T0CON 00000FD5
T0CS 00000005
T0CntH 00000017
T0CntL 00000016
T0IE 00000005
T0IF 00000002
T0PS0 00000000
T0PS1 00000001
T0PS2 00000002
T0PS3 00000003
T0SE 00000004
T100US 0000FE0C
T13CKI 00000000
T1500MS 00008D90
T1CKI 00000000
T1CKPS0 00000004
T1CKPS1 00000005
T1CON 00000FCD
T1OSCEN 00000003
T1OSI 00000001
T1OSO 00000000
MPASM 5.68 MAIN.ASM 9-3-2018 10:12:20 PAGE 58
SYMBOL TABLE
LABEL VALUE
T1RUN 00000006
T1SYNC 00000002
T20MS 00009E58
T20US 0000FF9C
T2CKPS0 00000000
T2CKPS1 00000001
T2CON 00000FCA
T2OUTPS0 00000003
T2OUTPS1 00000004
T2OUTPS2 00000005
T2OUTPS3 00000006
T3CCP1 00000003
T3CCP2 00000006
T3CKPS0 00000004
T3CKPS1 00000005
T3CON 00000FB1
T3SYNC 00000002
T40MS 00003CB0
TABLAT 00000FF5
TBLPTR 00000FF6
TBLPTRH 00000FF7
TBLPTRL 00000FF6
TBLPTRU 00000FF8
TCtlSt 00000023
TLockSt 00000028
TMR0 00000FD6
TMR0H 00000FD7
TMR0IE 00000005
TMR0IF 00000002
TMR0IP 00000002
TMR0L 00000FD6
TMR0ON 00000007
TMR0P0 00000008
TMR0P256 00000007
TMR0P4 00000001
TMR1 00000FCE
TMR1CS 00000001
TMR1H 00000FCF
TMR1IE 00000000
TMR1IF 00000000
TMR1IP 00000000
TMR1L 00000FCE
TMR1ON 00000000
TMR2 00000FCC
TMR2IE 00000001
TMR2IF 00000001
TMR2IP 00000001
TMR2ON 00000002
TMR3 00000FB2
TMR3CS 00000001
TMR3H 00000FB3
TMR3IE 00000001
TMR3IF 00000001
MPASM 5.68 MAIN.ASM 9-3-2018 10:12:20 PAGE 59
SYMBOL TABLE
LABEL VALUE
TMR3IP 00000001
TMR3L 00000FB2
TMR3ON 00000000
TO 00000003
TOPRAM 00000300
TOS 00000FFD
TOSH 00000FFE
TOSL 00000FFD
TOSU 00000FFF
TOUTPS0 00000003
TOUTPS1 00000004
TOUTPS2 00000005
TOUTPS3 00000006
TPortB 00000029
TRISA 00000F92
TRISA0 00000000
TRISA1 00000001
TRISA2 00000002
TRISA3 00000003
TRISA4 00000004
TRISA5 00000005
TRISA6 00000006
TRISA7 00000007
TRISB 00000F93
TRISB0 00000000
TRISB1 00000001
TRISB2 00000002
TRISB3 00000003
TRISB4 00000004
TRISB5 00000005
TRISB6 00000006
TRISB7 00000007
TRISC 00000F94
TRISC0 00000000
TRISC1 00000001
TRISC2 00000002
TRISC3 00000003
TRISC4 00000004
TRISC5 00000005
TRISC6 00000006
TRISC7 00000007
TRISD 00000F95
TRISD0 00000000
TRISD1 00000001
TRISD2 00000002
TRISD3 00000003
TRISD4 00000004
TRISD5 00000005
TRISD6 00000006
TRISD7 00000007
TRISE 00000F96
TRISE0 00000000
TRISE1 00000001
MPASM 5.68 MAIN.ASM 9-3-2018 10:12:20 PAGE 60
SYMBOL TABLE
LABEL VALUE
TRISE2 00000002
TRMT 00000001
TShfSt 00000024
TTglSt 00000027
TUN0 00000000
TUN1 00000001
TUN2 00000002
TUN3 00000003
TUN4 00000004
TX 00000006
TX9 00000006
TX9D 00000000
TXBUFLEN 000001C2
TXCKP 00000004
TXEN 00000005
TXIE 00000004
TXIF 00000004
TXIP 00000004
TXMAXCNT 000000E1
TXOVR 00000007
TXREG 00000FAD
TXSTA 00000FAC
TglSt 00000021
TmpB 0000001C
ToggleBit 0000064E
ToggleRls 00000656
TstLock 0000065A
TxBufEnd 00000300
TxBuffer 0000013E
TxCnt 00000013
TxData0 00000014
TxData1 00000015
TxFlag 00000012
TxHeadH 0000000F
TxHeadL 0000000E
TxKeyb 0000010C
TxKeyb1 0000012A
TxKeyb10 00000174
TxKeyb11 00000178
TxKeyb12 00000180
TxKeyb2 00000144
TxKeyb3 00000148
TxKeyb4 00000152
TxKeyb5 00000154
TxKeyb6 00000158
TxKeyb7 00000168
TxKeyb8 0000016A
TxKeyb9 0000016E
TxTailH 00000011
TxTailL 00000010
UA 00000001
USTBL 00000010
UpdBufPtr 00000404
MPASM 5.68 MAIN.ASM 9-3-2018 10:12:20 PAGE 61
SYMBOL TABLE
LABEL VALUE
VCFG0 00000004
VCFG1 00000005
VDIRMAG 00000007
VPP 00000003
VREFN 00000002
VREFP 00000003
W 00000000
WAKECODE 00000018
WAKEM 00000020
WCOL 00000007
WDTCON 00000FD1
WR 00000001
WREG 00000FE8
WREN 00000002
WRERR 00000003
WUE 00000001
Wait1 000008DC
Z 00000002
_BOREN_NOSLP_2L 000000FD
_BOREN_OFF_2L 000000F9
_BOREN_ON_2L 000000FB
_BOREN_SBORDIS_2L 000000FF
_BORV_0_2L 000000E7
_BORV_1_2L 000000EF
_BORV_2_2L 000000F7
_BORV_3_2L 000000FF
_CCP2MX_PORTBE_3H 000000FE
_CCP2MX_PORTC_3H 000000FF
_CONFIG1H 00300001
_CONFIG2H 00300003
_CONFIG2L 00300002
_CONFIG3H 00300005
_CONFIG4L 00300006
_CONFIG5H 00300009
_CONFIG5L 00300008
_CONFIG6H 0030000B
_CONFIG6L 0030000A
_CONFIG7H 0030000D
_CONFIG7L 0030000C
_CP0_OFF_5L 000000FF
_CP0_ON_5L 000000FE
_CP1_OFF_5L 000000FF
_CP1_ON_5L 000000FD
_CPB_OFF_5H 000000FF
_CPB_ON_5H 000000BF
_CPD_OFF_5H 000000FF
_CPD_ON_5H 0000007F
_DEBUG_OFF_4L 000000FF
_DEBUG_ON_4L 0000007F
_DEVID1 003FFFFE
_DEVID2 003FFFFF
_EBTR0_OFF_7L 000000FF
_EBTR0_ON_7L 000000FE
MPASM 5.68 MAIN.ASM 9-3-2018 10:12:20 PAGE 62
SYMBOL TABLE
LABEL VALUE
_EBTR1_OFF_7L 000000FF
_EBTR1_ON_7L 000000FD
_EBTRB_OFF_7H 000000FF
_EBTRB_ON_7H 000000BF
_FCMEN_OFF_1H 000000BF
_FCMEN_ON_1H 000000FF
_IDLOC0 00200000
_IDLOC1 00200001
_IDLOC2 00200002
_IDLOC3 00200003
_IDLOC4 00200004
_IDLOC5 00200005
_IDLOC6 00200006
_IDLOC7 00200007
_IESO_OFF_1H 0000007F
_IESO_ON_1H 000000FF
_LPT1OSC_OFF_3H 000000FB
_LPT1OSC_ON_3H 000000FF
_LVP_OFF_4L 000000FB
_LVP_ON_4L 000000FF
_MCLRE_OFF_3H 0000007F
_MCLRE_ON_3H 000000FF
_OSC_ECIO6_1H 000000F5
_OSC_EC_1H 000000F4
_OSC_HSPLL_1H 000000F6
_OSC_HS_1H 000000F2
_OSC_INTIO67_1H 000000F8
_OSC_INTIO7_1H 000000F9
_OSC_LP_1H 000000F0
_OSC_RCIO6_1H 000000F7
_OSC_RC_1H 000000F3
_OSC_XT_1H 000000F1
_PBADEN_OFF_3H 000000FD
_PBADEN_ON_3H 000000FF
_PWRT_OFF_2L 000000FF
_PWRT_ON_2L 000000FE
_STVREN_OFF_4L 000000FE
_STVREN_ON_4L 000000FF
_WDTPS_1024_2H 000000F5
_WDTPS_128_2H 000000EF
_WDTPS_16384_2H 000000FD
_WDTPS_16_2H 000000E9
_WDTPS_1_2H 000000E1
_WDTPS_2048_2H 000000F7
_WDTPS_256_2H 000000F1
_WDTPS_2_2H 000000E3
_WDTPS_32768_2H 000000FF
_WDTPS_32_2H 000000EB
_WDTPS_4096_2H 000000F9
_WDTPS_4_2H 000000E5
_WDTPS_512_2H 000000F3
_WDTPS_64_2H 000000ED
_WDTPS_8192_2H 000000FB
MPASM 5.68 MAIN.ASM 9-3-2018 10:12:20 PAGE 63
SYMBOL TABLE
LABEL VALUE
_WDTPS_8_2H 000000E7
_WDT_OFF_2H 000000FE
_WDT_ON_2H 000000FF
_WRT0_OFF_6L 000000FF
_WRT0_ON_6L 000000FE
_WRT1_OFF_6L 000000FF
_WRT1_ON_6L 000000FD
_WRTB_OFF_6H 000000FF
_WRTB_ON_6H 000000BF
_WRTC_OFF_6H 000000FF
_WRTC_ON_6H 000000DF
_WRTD_OFF_6H 000000FF
_WRTD_ON_6H 0000007F
_XINST_OFF_4L 000000BF
_XINST_ON_4L 000000FF
__18F4420 00000001
bmi bn
bpl bnn
ldw
Errors : 0
Warnings : 0 reported, 0 suppressed
Messages : 0 reported, 0 suppressed