MPASM 03.80.03 Internal AKEPIC1.ASM 9-28-2004 15:08:50 PAGE 1 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00001 ; PIC firmware for ake PIC1 (based on trump... btw ther is a mistake in note-offs for trump) 00002 ; 2nd bug : ExtLatCAddrA ... 00003 ; 00004 ; by Johannes Taelman 00005 ; 00006 ; changes: 00007 ; - 20040923: removed PWM 00008 ; - 20040923: corrected all-notes-off 00009 00010 list p=18f252 ;list directive to define processor 00011 #include ;processor specific definitions 00001 LIST 00002 ; P18F252.INC Standard Header File, Version 1.4 Microchip Technology, Inc. 00809 LIST 00012 00013 ; #define simulate 1 ; enable simulation 00014 ; #define heartbeat 1 ; enable heatbeats 00015 ;****************************************************************************** 00016 ;Configuration bits 00017 ; The __CONFIG directive defines configuration data within the .ASM file. 00018 ; The labels following the directive are defined in the P18F252.INC file. 00019 ; The PIC18FXX2 Data Sheet explains the functions of the configuration bits. 00020 ; Change the following lines to suit your application. 00021 300000 FEFF 00022 __CONFIG _CONFIG1H, _OSCS_OFF_1H & _HSPLL_OSC_1H 00023 __CONFIG _CONFIG2L, _BOR_OFF_2L & _PWRT_OFF_2L 300002 FEFD 00024 __CONFIG _CONFIG2H, _WDT_OFF_2H 300004 FEFF 00025 __CONFIG _CONFIG3H, _CCP2MX_OFF_3H 300006 FFFA 00026 __CONFIG _CONFIG4L, _STVR_OFF_4L & _LVP_OFF_4L & _DEBUG_OFF_4L 00027 __CONFIG _CONFIG5L, _CP0_OFF_5L & _CP1_OFF_5L & _CP2_OFF_5L & _CP3_OFF_5L 300008 FFFF 00028 __CONFIG _CONFIG5H, _CPB_OFF_5H & _CPD_OFF_5H 00029 __CONFIG _CONFIG6L, _WRT0_OFF_6L & _WRT1_OFF_6L & _WRT2_OFF_6L & _WRT3_OFF_6L 30000A FFFF 00030 __CONFIG _CONFIG6H, _WRTC_OFF_6H & _WRTB_OFF_6H & _WRTD_OFF_6H 00031 __CONFIG _CONFIG7L, _EBTR0_OFF_7L & _EBTR1_OFF_7L & _EBTR2_OFF_7L & _EBTR3_OFF_7L 30000C FFFF 00032 __CONFIG _CONFIG7H, _EBTRB_OFF_7H 00033 00034 00035 00036 ;---------------------------------------------------------------------------- 00037 ;Constants 00038 00039 ;SPBRG_VAL EQU 027h ;set baud rate 31250 for 20Mhz clock 0000004F 00040 SPBRG_VAL EQU 04Fh ;set baud rate 31250 for 40Mhz clock 00041 00000010 00042 TX_BUF_LEN EQU 010h ;length of transmit circular buffer 00000010 00043 RX_BUF_LEN EQU TX_BUF_LEN ;length of receive circular buffer 00044 00045 ;---------------------------------------------------------------------------- 00046 ;Bit Definitions 00047 00000000 00048 TxBufFull EQU 0 ;bit indicates Tx buffer is full 00000001 00049 TxBufEmpty EQU 1 ;bit indicates Tx buffer is empty 00000002 00050 RxBufFull EQU 2 ;bit indicates Rx buffer is full MPASM 03.80.03 Internal AKEPIC1.ASM 9-28-2004 15:08:50 PAGE 2 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00000003 00051 RxBufEmpty EQU 3 ;bit indicates Rx buffer is empty 00052 ;ReceivedCR EQU 4 ;bit indicates character received 00053 00054 ;---------------------------------------------------------------------------- 00055 ;Variables 00056 00057 CBLOCK 0x000 00000000 00058 WREG_TEMP ;to save WREG during interrupt 00000001 00059 STATUS_TEMP ;to save STATUS during interrupt 00000002 00060 BSR_TEMP ;to save BSR during interrupt 00000003 00061 FSR0H_TEMP ;to save FSR0H during interrupt 00000004 00062 FSR0L_TEMP ;to save FSR0L during interrupt 00000005 00063 FSR0H_SHADOW ;to save FSR0H during high interrupt 00000006 00064 FSR0L_SHADOW ;to save FSR0L during high interrupt 00000007 00065 MidiInByte ; Rcv'd Byte 00000008 00066 MidiByte0 ; status 00000009 00067 MidiByte1 ; data1 0000000A 00068 MidiByte2 ; data2 0000000B 00069 MidiCurData ; current data byte index 0000000C 00070 MidiNumData ; expected data bytes 0000000D 00071 MidiTestByte ; for testing only 0000000E 00072 TmpM ; non-ISR scratch 0000000F 00073 TmpT ; non-ISR scratch 00074 00075 00000010 00076 LatWriteState ; 0=do nothing 00077 ; 1=set data 00078 ; 2=set addr 00079 ; 2=release addr 00080 00000011 00081 FifoRdIndx; 00000012 00082 FifoWrIndx; 00000013 00083 ErrorLed; 00000014 00084 TISRData; 00000015 00085 TISRAddrA; 00000016 00086 TISRAddrC; 00087 ENDC 00088 00089 CBLOCK 0x40 ; 00000040 00090 Flags ;byte for indicator flag bits 00000041 00091 TempData ;temporary data in main routines 00000042 00092 TempRxData ;temporary data in Rx buffer routines 00000043 00093 TempTxData ;temporary data in Tx buffer routines 00000044 00094 TxStartPtrH ;pointer to start of data in Tx buffer 00000045 00095 TxStartPtrL ;pointer to start of data in Tx buffer 00000046 00096 TxEndPtrH ;pointer to end of data in Tx buffer 00000047 00097 TxEndPtrL ;pointer to end of data in Tx buffer 00000048 00098 RxStartPtrH ;pointer to start of data in Rx buffer 00000049 00099 RxStartPtrL ;pointer to start of data in Rx buffer 0000004A 00100 RxEndPtrH ;pointer to end of data in Rx buffer 0000004B 00101 RxEndPtrL ;pointer to end of data in Rx buffer 0000004C 00102 TxBuffer:TX_BUF_LEN ;Tx buffer for data to transmit 0000005C 00103 RxBuffer:RX_BUF_LEN ;Rx buffer for received data MPASM 03.80.03 Internal AKEPIC1.ASM 9-28-2004 15:08:50 PAGE 3 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00104 ENDC 00105 00106 CBLOCK 0xA0 000000A0 00107 ExtLatAData ; external latch A data 000000A1 00108 ExtLatAAddrA ; external latch A address port A 000000A2 00109 ExtLatAAddrC ; external latch A address port C 000000A3 00110 ExtLatAdummy ; to align data by 4 00111 000000A4 00112 ExtLatBData 000000A5 00113 ExtLatBAddrA 000000A6 00114 ExtLatBAddrC 000000A7 00115 ExtLatBdummy 00116 000000A8 00117 ExtLatCData 000000A9 00118 ExtLatCAddrA 000000AA 00119 ExtLatCAddrC 000000AB 00120 ExtLatCdummy 00121 000000AC 00122 ExtLatDData 000000AD 00123 ExtLatDAddrA 000000AE 00124 ExtLatDAddrC 000000AF 00125 ExtLatDdummy 00126 00127 000000B0 00128 ExtLatEData 000000B1 00129 ExtLatEAddrA 000000B2 00130 ExtLatEAddrC 000000B3 00131 ExtLatEdummy 00132 000000B4 00133 ExtLatFData 000000B5 00134 ExtLatFAddrA 000000B6 00135 ExtLatFAddrC 000000B7 00136 ExtLatFdummy 00137 000000B8 00138 ExtLatGData 000000B9 00139 ExtLatGAddrA 000000BA 00140 ExtLatGAddrC 000000BB 00141 ExtLatGdummy 00142 000000BC 00143 ExtLatHData 000000BD 00144 ExtLatHAddrA 000000BE 00145 ExtLatHAddrC 000000BF 00146 ExtLatHdummy 00147 000000C0 00148 ExtLatIData 000000C1 00149 ExtLatIAddrA 000000C2 00150 ExtLatIAddrC 000000C3 00151 ExtLatIdummy 00152 00153 ENDC 00154 00155 CBLOCK 0xF0 ; fifo from main to timer ISR 000000F0 00156 Fifo0LatPtr MPASM 03.80.03 Internal AKEPIC1.ASM 9-28-2004 15:08:50 PAGE 4 LOC OBJECT CODE LINE SOURCE TEXT VALUE 000000F1 00157 Fifo1LatPtr 000000F2 00158 Fifo2LatPtr 000000F3 00159 Fifo3LatPtr 000000F4 00160 Fifo4LatPtr 000000F5 00161 Fifo5LatPtr 000000F6 00162 Fifo6LatPtr 000000F7 00163 Fifo7LatPtr 000000F8 00164 Fifo8LatPtr 000000F9 00165 Fifo9LatPtr 000000FA 00166 Fifo10LatPtr 000000FB 00167 Fifo11LatPtr 000000FC 00168 Fifo12LatPtr 000000FD 00169 Fifo13LatPtr 000000FE 00170 Fifo14LatPtr 000000FF 00171 Fifo15LatPtr 00172 ENDC 00173 00174 ;---------------------------------------------------------------------------- 00175 ;This code executes when a reset occurs. 00176 000000 00177 ORG 0x0000 ;place code at reset vector 00178 000000 D058 00179 ResetVector: bra Main ;go to beginning of program 00180 00181 ;---------------------------------------------------------------------------- 00182 ;This code executes when a high priority interrupt occurs. 00183 000008 00184 ORG 0x0008 00185 000008 D02B 00186 HighInt: bra HighIntCode ;go to high priority interrupt routine 00187 00188 ;---------------------------------------------------------------------------- 00189 ;This code executes when a low priority interrupt occurs. 00190 000018 00191 ORG 0x0018 00192 000018 CFD8 F001 00193 LowInt: movff STATUS,STATUS_TEMP ;save STATUS register 00001C CFE8 F000 00194 movff WREG,WREG_TEMP ;save working register 000020 CFE0 F002 00195 movff BSR,BSR_TEMP ;save BSR register 000024 CFEA F003 00196 movff FSR0H,FSR0H_TEMP ;save FSR0H register 000028 CFE9 F004 00197 movff FSR0L,FSR0L_TEMP ;save FSR0L register 00198 00199 ;test other interrupt flags here 00200 00002C AA9E 00201 btfss PIR1,RCIF ;test for RCIF receive interrupt flag 00002E D002 00202 bra LowInt1 ;if RCIF is not set, done with test 000030 BA9D 00203 btfsc PIE1,RCIE ;else test if Rx interrupt enabled 000032 D01F 00204 bra GetData ;if so, go get received data 000034 00205 LowInt1: 000034 A89E 00206 btfss PIR1,TXIF ;test for TXIF transmit interrupt flag 000036 D002 00207 bra LowInt2 ;if TXIF is not set, done with test 000038 B89D 00208 btfsc PIE1,TXIE ;else test if Tx interrupt is enabled 00003A D001 00209 bra PutData ;if so, go transmit data MPASM 03.80.03 Internal AKEPIC1.ASM 9-28-2004 15:08:50 PAGE 5 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00210 00211 ;can do special error handling here - an unexpected interrupt occurred 00212 00003C 00FF 00213 LowInt2: reset ;error if no valid interrupt so reset 00214 00215 ;------------------------------------ 00216 ;Read data from the transmit buffer and put into transmit register. 00217 00003E A240 00218 PutData: btfss Flags,TxBufEmpty ;check if transmit buffer is empty 000040 D002 00219 bra PutDat1 ;if not then go transmit 000042 989D 00220 bcf PIE1,TXIE ;else disable Tx interrupt 000044 D002 00221 bra EndLowInt 00222 000046 D91E 00223 PutDat1: rcall GetTxBuffer ;get data from transmit buffer 000048 6EAD 00224 movwf TXREG ;and transmit 00225 00226 ;------------------------------------ 00227 ;End of low priority interrupt routine restores context. 00228 00004A C004 FFE9 00229 EndLowInt: movff FSR0L_TEMP,FSR0L ;restore FSR0L register 00004E C003 FFEA 00230 movff FSR0H_TEMP,FSR0H ;restore FSR0H register 000052 C002 FFE0 00231 movff BSR_TEMP,BSR ;restore BSR register 000056 C000 FFE8 00232 movff WREG_TEMP,WREG ;restore working register 00005A C001 FFD8 00233 movff STATUS_TEMP,STATUS ;restore STATUS register 00005E 0010 00234 retfie 00235 00236 ;---------------------------------------------------------------------------- 00237 ;High priority interrupt routine. 00238 000060 CFEA F005 00239 HighIntCode: movff FSR0H,FSR0H_SHADOW ;save FSR0H register 000064 CFE9 F006 00240 movff FSR0L,FSR0L_SHADOW ;save FSR0L register 00241 00242 ;test other interrupt flags here 00243 000068 A2A1 00244 btfss PIR2,TMR3IF ;test for Timer3 receive interrupt flag 00006A D002 00245 bra HighInt1 ;if RCIF is not set, done with test 00006C B2A0 00246 btfsc PIE2,TMR3IE ;else test if Timer3 interrupt enabled 00006E D156 00247 bra Timer3ISR ;if so, go get received data 00248 00249 ;can do special error handling here - an unexpected interrupt occurred 000070 00250 HighInt1: 000070 00FF 00251 reset ;error if no valid interrupt so reset 00252 00253 ;------------------------------------ 00254 ;Get received data and write into receive buffer. 00255 000072 00256 GetData: 00257 ; btg LATA,1; ; toggle LATA:1 = HEARTBEAT 000072 B2AB 00258 btfsc RCSTA,OERR ;if overrun error 000074 D007 00259 bra ErrOERR ;then go handle error 000076 B4AB 00260 btfsc RCSTA,FERR ;if framing error 000078 D00B 00261 bra ErrFERR ;then go handle error 00007A B440 00262 btfsc Flags,RxBufFull ;if buffer full MPASM 03.80.03 Internal AKEPIC1.ASM 9-28-2004 15:08:50 PAGE 6 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00007C D010 00263 bra ErrRxOver ;then go handle error 00264 00265 ; btg LATA,1; ; toggle LATA:1 = HEARTBEAT 00266 00007E 50AE 00267 movf RCREG,W ;get received data 00268 ; xorlw 0x0d ;compare with 00269 ; btfsc STATUS,Z ;check if the same 00270 ; bsf Flags,ReceivedCR ;indicate character received 00271 ; xorlw 0x0d ;change back to valid data 000080 D8E4 00272 rcall PutRxBuffer ;and put in buffer 000082 D7E3 00273 bra EndLowInt 00274 00275 ;error because OERR overrun error bit is set 00276 ;can do special error handling here - this code simply clears and continues 00277 000084 98AB 00278 ErrOERR: bcf RCSTA,CREN ;reset the receiver logic 000086 88AB 00279 bsf RCSTA,CREN ;enable reception again 000088 6813 00280 setf ErrorLed; error LED 00008A 0EFA 00281 movlw 0xFA; ; MIDI RT Start 00008C D8BE 00282 rcall PutTxBuffer ;put data in transmit buffer 00008E D7DD 00283 bra EndLowInt 00284 00285 ;error because FERR framing error bit is set 00286 ;can do special error handling here - this code simply clears and continues 00287 000090 50AE 00288 ErrFERR: movf RCREG,W ;discard received data that has error 000092 98AB 00289 bcf RCSTA,CREN ;reset the receiver logic 000094 88AB 00290 bsf RCSTA,CREN ;enable reception again 000096 6813 00291 setf ErrorLed; error LED 000098 0EFB 00292 movlw 0xFB; ; MIDI RT Continue 00009A D8B7 00293 rcall PutTxBuffer ;put data in transmit buffer 00009C D7D6 00294 bra EndLowInt 00295 00296 ;error because receive buffer is full 00297 ;can do special error handling here - this code checks and discards the data 00298 00009E 50AE 00299 ErrRxOver: movf RCREG,W ;discard received data 00300 ; xorlw 0x0d ;but compare with 00301 ; btfsc STATUS,Z ;check if the same 00302 ; bsf Flags,ReceivedCR ;indicate character received 0000A0 6813 00303 setf ErrorLed; error LED 0000A2 0EFB 00304 movlw 0xFB; ; MIDI RT Start 0000A4 D8B2 00305 rcall PutTxBuffer ;put data in transmit buffer 0000A6 D7D1 00306 bra EndLowInt 00307 00308 ;------------------------------------ 00309 ;End of high priority interrupt routine restores context. 00310 0000A8 C006 FFE9 00311 EndHighInt: movff FSR0L_SHADOW,FSR0L ;restore FSR0L register 0000AC C005 FFEA 00312 movff FSR0H_SHADOW,FSR0H ;restore FSR0H register 0000B0 0011 00313 retfie FAST ;return and restore context 00314 00315 ;---------------------------------------------------------------------------- MPASM 03.80.03 Internal AKEPIC1.ASM 9-28-2004 15:08:50 PAGE 7 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00316 ;Main routine checks for for reception of a and then calls a routine to 00317 ; move the data to transmit back. 00318 0000B2 00319 Main: 0000B2 6889 00320 setf LATA ; Address strobes high 0000B4 6A8A 00321 clrf LATB ; All outputs low 0000B6 688B 00322 setf LATC ; All outputs high 00323 0000B8 6A92 00324 clrf TRISA ; Config PORTA as all outputs 0000BA 6A93 00325 clrf TRISB ; Config PORTB as all outputs 0000BC 0E80 00326 movlw 0x80 ; 0000BE 6E94 00327 movwf TRISC ; Config PORTC all outputs + tristate for serial rx 0000C0 0E07 00328 movlw 0x07 ; init adc 0000C2 6EC1 00329 movwf ADCON1 ; init adc 0000C4 6AC2 00330 clrf ADCON0 ; poweroff adc 0000C6 6A92 00331 clrf TRISA ; Config PORTA again as all outputs 00332 0000C8 6889 00333 setf LATA ; Address strobes high 0000CA 6A8A 00334 clrf LATB ; All outputs low 0000CC 688B 00335 setf LATC ; All outputs high 00336 0000CE 0000 00337 nop 0000D0 0000 00338 nop 0000D2 0000 00339 nop 0000D4 0000 00340 nop 0000D6 0000 00341 nop 0000D8 0000 00342 nop 0000DA 0000 00343 nop 0000DC 0000 00344 nop 0000DE 6A89 00345 clrf LATA 0000E0 6A8A 00346 clrf LATB 0000E2 0000 00347 nop 0000E4 0000 00348 nop 0000E6 0000 00349 nop 0000E8 0000 00350 nop 0000EA 0000 00351 nop 0000EC 0000 00352 nop 0000EE 0000 00353 nop 0000F0 0000 00354 nop 0000F2 6889 00355 setf LATA ; Address strobes high 0000F4 688B 00356 setf LATC ; All outputs low 00357 0000F6 6BA0 00358 clrf ExtLatAData; 0000F8 6BA4 00359 clrf ExtLatBData; 0000FA 6BA8 00360 clrf ExtLatCData; 0000FC 6BAC 00361 clrf ExtLatDData; 0000FE 6BB0 00362 clrf ExtLatEData; 000100 6BB4 00363 clrf ExtLatFData; 000102 6BB4 00364 clrf ExtLatFData; 000104 6BB8 00365 clrf ExtLatGData; 000106 6BBC 00366 clrf ExtLatHData; 000108 6BC0 00367 clrf ExtLatIData; 00368 MPASM 03.80.03 Internal AKEPIC1.ASM 9-28-2004 15:08:50 PAGE 8 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00010A 0E3F 00369 movlw 03Fh; 00010C 6FA1 00370 movwf ExtLatAAddrA; 00010E 0E0C 00371 movlw 00Ch; 000110 6FA2 00372 movwf ExtLatAAddrC; 00373 000112 0E3F 00374 movlw 03Fh; 000114 6FA5 00375 movwf ExtLatBAddrA; 000116 0E0A 00376 movlw 00Ah; 000118 6FA6 00377 movwf ExtLatBAddrC; 00378 00011A 0E3F 00379 movlw 03Fh; 00011C 6FA9 00380 movwf ExtLatCAddrA; 00011E 0E06 00381 movlw 006h; 000120 6FAA 00382 movwf ExtLatCAddrC; 00383 000122 0E3E 00384 movlw 03Eh; 000124 6FC1 00385 movwf ExtLatIAddrA; 000126 0E0E 00386 movlw 00Eh; 000128 6FC2 00387 movwf ExtLatIAddrC; 00388 00012A 0E3D 00389 movlw 03Dh; 00012C 6FBD 00390 movwf ExtLatHAddrA; 00012E 0E0E 00391 movlw 00Eh; 000130 6FBE 00392 movwf ExtLatHAddrC; 00393 000132 0E3B 00394 movlw 03Bh; 000134 6FB9 00395 movwf ExtLatGAddrA; 000136 0E0E 00396 movlw 00Eh; 000138 6FBA 00397 movwf ExtLatGAddrC; 00398 00013A 0E37 00399 movlw 037h; 00013C 6FB5 00400 movwf ExtLatFAddrA; 00013E 0E0E 00401 movlw 00Eh; 000140 6FB6 00402 movwf ExtLatFAddrC; 00403 000142 0E2F 00404 movlw 02Fh; 000144 6FB1 00405 movwf ExtLatEAddrA; 000146 0E0E 00406 movlw 00Eh; 000148 6FB2 00407 movwf ExtLatEAddrC; 00408 00014A 0E1F 00409 movlw 01Fh; 00014C 6FAD 00410 movwf ExtLatDAddrA; 00014E 0E0E 00411 movlw 00Eh; 000150 6FAE 00412 movwf ExtLatDAddrC; 00413 000152 0EA0 00414 movlw ExtLatAData; 000154 6FF0 00415 movwf Fifo0LatPtr; 000156 0EA4 00416 movlw ExtLatBData; 000158 6FF1 00417 movwf Fifo1LatPtr; 00015A 0EA8 00418 movlw ExtLatCData; 00015C 6FF2 00419 movwf Fifo2LatPtr; 00015E 0EAC 00420 movlw ExtLatDData; 000160 6FF3 00421 movwf Fifo3LatPtr; MPASM 03.80.03 Internal AKEPIC1.ASM 9-28-2004 15:08:50 PAGE 9 LOC OBJECT CODE LINE SOURCE TEXT VALUE 000162 0EB0 00422 movlw ExtLatEData; 000164 6FF4 00423 movwf Fifo4LatPtr; 000166 0EB4 00424 movlw ExtLatFData; 000168 6FF5 00425 movwf Fifo5LatPtr; 00016A 0EB8 00426 movlw ExtLatGData; 00016C 6FF6 00427 movwf Fifo6LatPtr; 00016E 0EBC 00428 movlw ExtLatHData; 000170 6FF7 00429 movwf Fifo7LatPtr; 000172 0EC0 00430 movlw ExtLatIData; 000174 6FF8 00431 movwf Fifo8LatPtr; 000176 0EA0 00432 movlw ExtLatAData; 000178 6FF9 00433 movwf Fifo9LatPtr; 00017A 0EA4 00434 movlw ExtLatBData; 00017C 6FFA 00435 movwf Fifo10LatPtr; 00017E 0EA8 00436 movlw ExtLatCData; 000180 6FFB 00437 movwf Fifo11LatPtr; 000182 0EAC 00438 movlw ExtLatDData; 000184 6FFC 00439 movwf Fifo12LatPtr; 000186 0EB0 00440 movlw ExtLatEData; 000188 6FFD 00441 movwf Fifo13LatPtr; 00018A 0EB4 00442 movlw ExtLatFData; 00018C 6FFE 00443 movwf Fifo14LatPtr; 00018E 0EB8 00444 movlw ExtLatGData; 000190 6FFF 00445 movwf Fifo15LatPtr; 00446 00447 ; pwm init 00448 ; movlw 0x80; 00449 ; movwf PR2; 00450 ; movlw 0x00; 00451 ; movwf CCPR1L; 00452 ; movlw 0x01; 00453 ; movwf TMR2; 00454 ; movlw 0x04; 00455 ; movwf T2CON; 00456 ; movlw 0x0C; 00457 ; movwf CCP1CON; 00458 000192 808B 00459 bsf LATC,0 ; Light error LED on powerup 00460 ; Wait a second with ALoop and BLoop 000194 680E 00461 setf TmpM 000196 00462 BLoop1: 000196 0EFF 00463 movlw 0xff; 000198 00464 ALoop1: 000198 2EE8 00465 decfsz WREG; 00019A EFCC F000 00466 goto ALoop1 00019E 2E0E 00467 decfsz TmpM; 0001A0 EFCB F000 00468 goto BLoop1 0001A4 908B 00469 bcf LATC,0 ; Been patient enough, dim error LED and start 00470 0001A6 0EF0 00471 movlw Fifo0LatPtr; 0001A8 6E11 00472 movwf FifoRdIndx; 0001AA 0EF5 00473 movlw Fifo5LatPtr; 0001AC 6E12 00474 movwf FifoWrIndx; MPASM 03.80.03 Internal AKEPIC1.ASM 9-28-2004 15:08:50 PAGE 10 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0001AE EE00 F000 00475 lfsr FSR0 ,0000h 0001B2 EE10 F000 00476 lfsr FSR1 ,0000h 0001B6 D804 00477 rcall SetupSerial ;set up serial port and buffers 0001B8 D8AC 00478 rcall SetupTimer3 00479 0001BA 00480 MainLoop: 00481 ;do other stuff here 00482 ; btg LATC,3; ; toggle LATC:3 = IDLE HEARTBEAT 00483 ; btg LATA,0; ; toggle LATA:0 = IDLE HEARTBEAT 00484 00485 #ifdef simulate 00486 nop; your chance to schedule midi cmd 00487 movff MidiTestByte,WREG; 00488 rcall MidiInParser; 00489 rcall Timer3ISR 00490 #endif 00491 0001BA ECC4 F001 00492 call PollMidiIn; 00493 0001BE D7FD 00494 bra MainLoop ;go wait for more data 00495 00496 ;---------------------------------------------------------------------------- 00497 ;Set up serial port and buffers. 00498 0001C0 0E80 00499 SetupSerial: movlw 0x80 ;set tris bits for Tx and RX 0001C2 1294 00500 iorwf TRISC,F 0001C4 0E4F 00501 movlw SPBRG_VAL ;set baud rate 0001C6 6EAF 00502 movwf SPBRG 0001C8 0E04 00503 movlw 0x04 ;no transmission, high baud rate 00504 ;0x24 ;enable transmission and high baud rate 0001CA 6EAC 00505 movwf TXSTA 0001CC 0E90 00506 movlw 0x90 ;enable serial port and reception 0001CE 6EAB 00507 movwf RCSTA 0001D0 6A40 00508 clrf Flags ;clear all flags 00509 0001D2 D809 00510 rcall InitTxBuffer ;initialize transmit buffer 0001D4 D811 00511 rcall InitRxBuffer ;initialize receive buffer 00512 0001D6 0E30 00513 movlw 0x30 ;enable Tx and Rx interrupts 0001D8 6E9D 00514 movwf PIE1 0001DA 0E00 00515 movlw 0x00 ;set Rx low and Tx low priority 0001DC 6E9F 00516 movwf IPR1 0001DE 8ED0 00517 bsf RCON,IPEN ;enable interrupt priorities 0001E0 0EC0 00518 movlw 0xc0 ;enable global high and low ints 0001E2 6EF2 00519 movwf INTCON 0001E4 0012 00520 return 00521 00522 ;---------------------------------------------------------------------------- 00523 ;Circular buffer routines. 00524 00525 ;---------------------------------------------------------------------------- 00526 ;Initialize transmit buffer. 00527 MPASM 03.80.03 Internal AKEPIC1.ASM 9-28-2004 15:08:50 PAGE 11 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0001E6 0E00 00528 InitTxBuffer: movlw HIGH TxBuffer ;take high address of transmit buffer 0001E8 6E44 00529 movwf TxStartPtrH ;and place in transmit start pointer 0001EA 6E46 00530 movwf TxEndPtrH ;and place in transmit end pointer 0001EC 0E4C 00531 movlw LOW TxBuffer ;take low address of transmit buffer 0001EE 6E45 00532 movwf TxStartPtrL ;and place in transmit start pointer 0001F0 6E47 00533 movwf TxEndPtrL ;and place in transmit end pointer 0001F2 9040 00534 bcf Flags,TxBufFull ;indicate Tx buffer is not full 0001F4 8240 00535 bsf Flags,TxBufEmpty ;indicate Tx buffer is empty 0001F6 0012 00536 return 00537 00538 ;---------------------------------------------- 00539 ;Initialize receive buffer. 00540 0001F8 0E00 00541 InitRxBuffer: movlw HIGH RxBuffer ;take high address of receive buffer 0001FA 6E48 00542 movwf RxStartPtrH ;and place in receive start pointer 0001FC 6E4A 00543 movwf RxEndPtrH ;and place in receive end pointer 0001FE 0E5C 00544 movlw LOW RxBuffer ;take low address of receive buffer 000200 6E49 00545 movwf RxStartPtrL ;and place in receive start pointer 000202 6E4B 00546 movwf RxEndPtrL ;and place in receive end pointer 000204 9440 00547 bcf Flags,RxBufFull ;indicate Rx buffer is not full 000206 8640 00548 bsf Flags,RxBufEmpty ;indicate Rx buffer is empty 000208 0012 00549 return 00550 00551 ;---------------------------------------------------------------------------- 00552 ;Add a byte (in WREG) to the end of the transmit buffer. 00553 00020A 989D 00554 PutTxBuffer: bcf PIE1,TXIE ;disable Tx interrupt to avoid conflict 00020C B040 00555 btfsc Flags,TxBufFull ;check if transmit buffer full 00020E D01B 00556 bra ErrTxBufFull ;go handle error if full 00557 000210 C046 FFEA 00558 movff TxEndPtrH,FSR0H ;put EndPointer into FSR0 000214 C047 FFE9 00559 movff TxEndPtrL,FSR0L ;put EndPointer into FSR0 000218 6EEE 00560 movwf POSTINC0 ;copy data to buffer 00561 00562 ;test if buffer pointer needs to wrap around to beginning of buffer memory 00563 00021A 0E00 00564 movlw HIGH (TxBuffer+TX_BUF_LEN) ;get last address of buffer 00021C 62EA 00565 cpfseq FSR0H ;and compare with end pointer 00021E D005 00566 bra PutTxBuf1 ;skip low bytes if high bytes not equal 000220 0E5C 00567 movlw LOW (TxBuffer+TX_BUF_LEN) ;get last address of buffer 000222 62E9 00568 cpfseq FSR0L ;and compare with end pointer 000224 D002 00569 bra PutTxBuf1 ;go save new pointer if at end 000226 EE00 F04C 00570 lfsr 0,TxBuffer ;point to beginning of buffer if at end 00571 00022A CFEA F046 00572 PutTxBuf1: movff FSR0H,TxEndPtrH ;save new EndPointer high byte 00022E CFE9 F047 00573 movff FSR0L,TxEndPtrL ;save new EndPointer low byte 00574 00575 ;test if buffer is full 00576 000232 5044 00577 movf TxStartPtrH,W ;get start pointer 000234 6246 00578 cpfseq TxEndPtrH ;and compare with end pointer 000236 D004 00579 bra PutTxBuf2 ;skip low bytes if high bytes not equal 000238 5045 00580 movf TxStartPtrL,W ;get start pointer MPASM 03.80.03 Internal AKEPIC1.ASM 9-28-2004 15:08:50 PAGE 12 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00023A 6247 00581 cpfseq TxEndPtrL ;and compare with end pointer 00023C D001 00582 bra PutTxBuf2 00023E 8040 00583 bsf Flags,TxBufFull ;if same then indicate buffer full 00584 000240 9240 00585 PutTxBuf2: bcf Flags,TxBufEmpty ;Tx buffer cannot be empty 000242 889D 00586 bsf PIE1,TXIE ;enable transmit interrupt 000244 0012 00587 return 00588 00589 ;error because attempting to store new data and the buffer is full 00590 ;can do special error handling here - this code simply ignores the byte 00591 000246 889D 00592 ErrTxBufFull: bsf PIE1,TXIE ;enable transmit interrupt 000248 0012 00593 return ;no save of data because buffer is full 00594 00595 ;---------------------------------------------- 00596 ;Add a byte (in WREG) to the end of the receive buffer. 00597 00024A B440 00598 PutRxBuffer: btfsc Flags,RxBufFull ;check if receive buffer full 00024C D01A 00599 bra ErrRxBufFull ;go handle error if full 00600 00024E C04A FFEA 00601 movff RxEndPtrH,FSR0H ;put EndPointer into FSR0 000252 C04B FFE9 00602 movff RxEndPtrL,FSR0L ;put EndPointer into FSR0 000256 6EEE 00603 movwf POSTINC0 ;copy data to buffer 00604 00605 ;test if buffer pointer needs to wrap around to beginning of buffer memory 00606 000258 0E00 00607 movlw HIGH (RxBuffer+RX_BUF_LEN) ;get last address of buffer 00025A 62EA 00608 cpfseq FSR0H ;and compare with end pointer 00025C D005 00609 bra PutRxBuf1 ;skip low bytes if high bytes not equal 00025E 0E6C 00610 movlw LOW (RxBuffer+RX_BUF_LEN) ;get last address of buffer 000260 62E9 00611 cpfseq FSR0L ;and compare with end pointer 000262 D002 00612 bra PutRxBuf1 ;go save new pointer if not at end 000264 EE00 F05C 00613 lfsr 0,RxBuffer ;point to beginning of buffer if at end 00614 000268 CFEA F04A 00615 PutRxBuf1: movff FSR0H,RxEndPtrH ;save new EndPointer high byte 00026C CFE9 F04B 00616 movff FSR0L,RxEndPtrL ;save new EndPointer low byte 00617 00618 ;test if buffer is full 00619 000270 5048 00620 movf RxStartPtrH,W ;get start pointer 000272 624A 00621 cpfseq RxEndPtrH ;and compare with end pointer 000274 D004 00622 bra PutRxBuf2 ;skip low bytes if high bytes not equal 000276 5049 00623 movf RxStartPtrL,W ;get start pointer 000278 624B 00624 cpfseq RxEndPtrL ;and compare with end pointer 00027A D001 00625 bra PutRxBuf2 00027C 8440 00626 bsf Flags,RxBufFull ;if same then indicate buffer full 00627 00027E 9640 00628 PutRxBuf2: bcf Flags,RxBufEmpty ;Rx buffer cannot be empty 000280 0012 00629 return 00630 00631 ;error because attempting to store new data and the buffer is full 00632 ;can do special error handling here - this code simply ignores the byte 00633 MPASM 03.80.03 Internal AKEPIC1.ASM 9-28-2004 15:08:50 PAGE 13 LOC OBJECT CODE LINE SOURCE TEXT VALUE 000282 0012 00634 ErrRxBufFull: return ;no save of data because buffer is full 00635 00636 ;---------------------------------------------- 00637 ;Remove and return (in WREG) the byte at the start of the transmit buffer. 00638 000284 B240 00639 GetTxBuffer: btfsc Flags,TxBufEmpty ;check if transmit buffer empty 000286 D01C 00640 bra ErrTxBufEmpty ;go handle error if empty 00641 000288 C044 FFEA 00642 movff TxStartPtrH,FSR0H ;put StartPointer into FSR0 00028C C045 FFE9 00643 movff TxStartPtrL,FSR0L ;put StartPointer into FSR0 000290 CFEE F043 00644 movff POSTINC0,TempTxData ;save data from buffer 00645 00646 ;test if buffer pointer needs to wrap around to beginning of buffer memory 00647 000294 0E00 00648 movlw HIGH (TxBuffer+TX_BUF_LEN) ;get last address of buffer 000296 62EA 00649 cpfseq FSR0H ;and compare with start pointer 000298 D005 00650 bra GetTxBuf1 ;skip low bytes if high bytes not equal 00029A 0E5C 00651 movlw LOW (TxBuffer+TX_BUF_LEN) ;get last address of buffer 00029C 62E9 00652 cpfseq FSR0L ;and compare with start pointer 00029E D002 00653 bra GetTxBuf1 ;go save new pointer if at end 0002A0 EE00 F04C 00654 lfsr 0,TxBuffer ;point to beginning of buffer if at end 00655 0002A4 CFEA F044 00656 GetTxBuf1: movff FSR0H,TxStartPtrH ;save new StartPointer value 0002A8 CFE9 F045 00657 movff FSR0L,TxStartPtrL ;save new StartPointer value 00658 00659 ;test if buffer is now empty 00660 0002AC 5046 00661 movf TxEndPtrH,W ;get end pointer 0002AE 6244 00662 cpfseq TxStartPtrH ;and compare with start pointer 0002B0 D004 00663 bra GetTxBuf2 ;skip low bytes if high bytes not equal 0002B2 5047 00664 movf TxEndPtrL,W ;get end pointer 0002B4 6245 00665 cpfseq TxStartPtrL ;and compare with start pointer 0002B6 D001 00666 bra GetTxBuf2 0002B8 8240 00667 bsf Flags,TxBufEmpty ;if same then indicate buffer empty 00668 0002BA 9040 00669 GetTxBuf2: bcf Flags,TxBufFull ;Tx buffer cannot be full 0002BC 5043 00670 movf TempTxData,W ;restore data from buffer 0002BE 0012 00671 return 00672 00673 ;error because attempting to read data from an empty buffer 00674 ;can do special error handling here - this code simply returns zero 00675 0002C0 0C00 00676 ErrTxBufEmpty: retlw 0 ;buffer empty, return zero 00677 00678 ;---------------------------------------------- 00679 ;Remove and return (in WREG) the byte at the start of the receive buffer. 00680 0002C2 9A9D 00681 GetRxBuffer: bcf PIE1,RCIE ;disable Rx interrupt to avoid conflict 0002C4 B640 00682 btfsc Flags,RxBufEmpty ;check if receive buffer empty 0002C6 D01D 00683 bra ErrRxBufEmpty ;go handle error if empty 00684 0002C8 C048 FFEA 00685 movff RxStartPtrH,FSR0H ;put StartPointer into FSR0 0002CC C049 FFE9 00686 movff RxStartPtrL,FSR0L ;put StartPointer into FSR0 MPASM 03.80.03 Internal AKEPIC1.ASM 9-28-2004 15:08:50 PAGE 14 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0002D0 CFEE F042 00687 movff POSTINC0,TempRxData ;save data from buffer 00688 00689 ;test if buffer pointer needs to wrap around to beginning of buffer memory 00690 0002D4 0E00 00691 movlw HIGH (RxBuffer+RX_BUF_LEN) ;get last address of buffer 0002D6 62EA 00692 cpfseq FSR0H ;and compare with start pointer 0002D8 D005 00693 bra GetRxBuf1 ;skip low bytes if high bytes not equal 0002DA 0E6C 00694 movlw LOW (RxBuffer+RX_BUF_LEN) ;get last address of buffer 0002DC 62E9 00695 cpfseq FSR0L ;and compare with start pointer 0002DE D002 00696 bra GetRxBuf1 ;go save new pointer if at end 0002E0 EE00 F05C 00697 lfsr 0,RxBuffer ;point to beginning of buffer if at end 00698 0002E4 CFEA F048 00699 GetRxBuf1: movff FSR0H,RxStartPtrH ;save new StartPointer value 0002E8 CFE9 F049 00700 movff FSR0L,RxStartPtrL ;save new StartPointer value 00701 00702 ;test if buffer is now empty 00703 0002EC 504A 00704 movf RxEndPtrH,W ;get end pointer 0002EE 6248 00705 cpfseq RxStartPtrH ;and compare with start pointer 0002F0 D004 00706 bra GetRxBuf2 ;skip low bytes if high bytes not equal 0002F2 504B 00707 movf RxEndPtrL,W ;get end pointer 0002F4 6249 00708 cpfseq RxStartPtrL ; and compare with start pointer 0002F6 D001 00709 bra GetRxBuf2 0002F8 8640 00710 bsf Flags,RxBufEmpty ;if same then indicate buffer empty 00711 0002FA 9440 00712 GetRxBuf2: bcf Flags,RxBufFull ;Rx buffer cannot be full 0002FC 5042 00713 movf TempRxData,W ;restore data from buffer 0002FE 8A9D 00714 bsf PIE1,RCIE ;enable receive interrupt 000300 0012 00715 return 00716 00717 ;error because attempting to read data from an empty buffer 00718 ;can do special error handling here - this code simply returns zero 00719 000302 8A9D 00720 ErrRxBufEmpty: bsf PIE1,RCIE ;enable receive interrupt 000304 0C00 00721 retlw 0 ;buffer empty, return zero 00722 00723 ;---------------------------------------------------------------------------- 00724 ;Move data from receive buffer to transmit buffer to echo the line back. 00725 000306 00726 CopyRxToTx: 00727 ; bcf Flags,ReceivedCR ;clear received indicator 000306 B640 00728 Copy1: btfsc Flags,RxBufEmpty ;check if Rx buffer is empty 000308 0012 00729 return ;if so then return 00030A DFDB 00730 rcall GetRxBuffer ;get data from receive buffer 00731 ; movwf TempData ;save data 00030C DF7E 00732 rcall PutTxBuffer ;put data in transmit buffer 00733 ; movf TempData,W ;restore data 00734 ; xorlw 0x0d ;compare with 00735 ; bnz Copy1 ;if not the same then move another byte 00030E D7FB 00736 bra Copy1 000310 0012 00737 return 00738 00739 ;---------------------------------------------------------------------------- MPASM 03.80.03 Internal AKEPIC1.ASM 9-28-2004 15:08:50 PAGE 15 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00740 ; Timer3 setup 00741 000312 00742 SetupTimer3: 000312 0E01 00743 movlw 0x01 000314 6EB1 00744 movwf T3CON ; timer3 on, other bits cleared 000316 82A2 00745 bsf IPR2,1 ; timer3 = high priority interrupt 000318 82A0 00746 bsf PIE2,1 ; timer3 interrupt enable 00031A 0012 00747 return 00748 00749 00031C 00750 Timer3ISR: 00031C 92A1 00751 bcf PIR2,TMR3IF ; clear interrupt flag 00031E 0EE0 00752 movlw 0E0h ;0x7F; 0xA0 000320 6EB2 00753 movwf TMR3L ; preset timer 000322 68B3 00754 setf TMR3H ; preset timer 00755 00756 ; bsf LATC,1; ; LATC:1 = TIMER ISR HEARTBEAT 00757 #ifdef heartbeat 00758 bsf LATC,0; ; LATC:5 = TIMER ISR HEARTBEAT 00759 #endif 00760 ; pseudocode: 00761 ; if state = 1 00762 ; set data bus 00763 ; increment state 00764 ; end 00765 ; if state = 2 00766 ; set addr bus 00767 ; increment state 00768 ; end 00769 ; if state = 3 00770 ; reset addr bus 00771 ; increment state 00772 ; end 00773 ; 00774 ; if data on fifo 00775 ; set state=1 00776 ; copy fifo data 00777 ; end 00778 00779 ; state selector 000324 5010 00780 movf LatWriteState,0; 000326 E01A 00781 bz T3ISRProcessFifo; 000328 06E8 00782 decf WREG; 00032A E008 00783 bz T3ISR_LWS1; 00032C 06E8 00784 decf WREG; 00032E E00A 00785 bz T3ISR_LWS2; 000330 06E8 00786 decf WREG; 000332 E00E 00787 bz T3ISR_LWS3; 000334 06E8 00788 decf WREG; 00789 ; shouldn't get here 000336 6813 00790 setf ErrorLed; 000338 6A10 00791 clrf LatWriteState; 00033A D010 00792 bra T3ISRProcessFifo; MPASM 03.80.03 Internal AKEPIC1.ASM 9-28-2004 15:08:50 PAGE 16 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00793 00033C 00794 T3ISR_LWS1: 00795 ; bsf LATC,0; ; errorLED heartbeat 00796 ; btg LATC,3; ; LATC:1 = TIMER ISR HEARTBEAT 00033C 2A10 00797 incf LatWriteState 00033E C014 FF8A 00798 movff TISRData,LATB; 000342 D021 00799 bra TISRDone; 00800 000344 00801 T3ISR_LWS2: 000344 2A10 00802 incf LatWriteState 000346 C015 FF89 00803 movff TISRAddrA,LATA; 00034A C016 FF8B 00804 movff TISRAddrC,LATC; 00034E D01B 00805 bra TISRDone; 00806 000350 00807 T3ISR_LWS3: 000350 6A10 00808 clrf LatWriteState 000352 0E3F 00809 movlw 03Fh; 000354 6E89 00810 movwf LATA; 000356 0E0E 00811 movlw 00Eh; 000358 6E8B 00812 movwf LATC; 00035A D015 00813 bra TISRDone; 00814 00035C 00815 T3ISRProcessFifo: 00035C EE00 F000 00816 lfsr FSR0 ,0000h 000360 5011 00817 movf FifoRdIndx, W; 000362 5C12 00818 subwf FifoWrIndx, W ; result in w 000364 E010 00819 bz TISRDone; no new task on cmd queue 000366 C011 FFE9 00820 movff FifoRdIndx, FSR0L; 00036A 2A11 00821 incf FifoRdIndx; 00036C E102 00822 bnz NoWrap; 00036E 0EF0 00823 movlw Fifo0LatPtr; Wrap to start 000370 6E11 00824 movwf FifoRdIndx; 000372 00825 NoWrap: 000372 50EF 00826 movf INDF0, 0; W = ExtLatPtr 000374 6EE9 00827 movwf FSR0L; 000376 CFEE F014 00828 movff POSTINC0,TISRData; 00037A CFEE F015 00829 movff POSTINC0,TISRAddrA; 00037E CFEE F016 00830 movff POSTINC0,TISRAddrC; 000382 0E01 00831 movlw 1; 000384 6E10 00832 movwf LatWriteState; 000386 00833 TISRDone: 00834 ; bcf LATC,1; ; heatbeat 00835 #ifdef heartbeat 00836 bcf LATC,1; ; heatbeat 00837 #endif 00838 #ifdef simulate 00839 return ; OUTSIDE ISR *WARNING* FOR SIMULATION ONLY 00840 #endif 000386 D690 00841 bra EndHighInt ; resume 00842 00843 ;---------------------------------------------------------------------------- 00844 ; MIDI Input parser 00845 ; MPASM 03.80.03 Internal AKEPIC1.ASM 9-28-2004 15:08:50 PAGE 17 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00846 ; pseudocode: 00847 ; 00848 ; MidiInParser: 00849 ; if (inByte & 0x80) 00850 ; MidiStatus = inByte 00851 ; goto MidiInStatus 00852 ; else 00853 ; goto MidiInData 00854 ; return 00855 ; 00856 ; MidiInStatus: 00857 ; Look up # databytes 00858 ; 1000xxxx -> 2 (noteOn) 00859 ; 1001xxxx -> 2 (noteOff) 00860 ; 1010xxxx -> 2 (polyKeyPr) 00861 ; 1011xxxx -> 2 (ctrlChange) 00862 ; 1100xxxx -> 1 (pgmChg 00863 ; 1101xxxx -> 1 (chnlPr) 00864 ; 1110xxxx -> 0 (System Common Messages -> ignore) 00865 ; 1111xxxx -> 0 (SysEx) 00866 ; 00867 ; store in MidiNumData 00868 ; MidiCurDataBytes=0 00869 ; return 00870 ; 00871 ; MidiInData: 00872 ; If (CurDBytes==0) 00873 ; MidiData1=inByte 00874 ; If (CurDBytes==1) 00875 ; MidiData2=inByte 00876 ; CurDBytes++; 00877 ; 00878 ; If (CurDBytes>MidiNumData) 00879 ; If (MidiStatus==NoteOn) 00880 ; If (channel = x) 00881 ; ... 00882 ; ... 00883 ; 00884 ; If (MidiStatus==NoteOff) 00885 ; If (channel = x) 00886 ; ... 00887 ; 00888 ; goto MidiInStatus 00889 000388 00890 PollMidiIn: 000388 B640 00891 btfsc Flags,RxBufEmpty ;check if Rx buffer is empty 00038A 0012 00892 return ;if so then return 00038C DF9A 00893 rcall GetRxBuffer ;get data from receive buffer 00038E 00894 MidiInParser: 00038E 6E07 00895 movwf MidiInByte; 000390 AE07 00896 btfss MidiInByte,7; 000392 D00C 00897 bra MidiInData; ; jump if it wasn't a status byte 000394 6E08 00898 movwf MidiByte0; MPASM 03.80.03 Internal AKEPIC1.ASM 9-28-2004 15:08:50 PAGE 18 LOC OBJECT CODE LINE SOURCE TEXT VALUE 000396 00899 MidiInStatus: 000396 0E00 00900 movlw 0; 000398 6A0B 00901 clrf MidiCurData; 00039A AC08 00902 btfss MidiByte0,6; 00039C D004 00903 bra MidiInStatus2words; 00039E AA08 00904 btfss MidiByte0,5; 0003A0 0E01 00905 movlw 1; 0003A2 6E0C 00906 movwf MidiNumData; 0003A4 D002 00907 bra MidiInStatusEnd; 0003A6 00908 MidiInStatus2words: 0003A6 0E02 00909 movlw 2; 0003A8 6E0C 00910 movwf MidiNumData; 0003AA 00911 MidiInStatusEnd: 0003AA 0012 00912 return 00913 0003AC 00914 MidiInData: 0003AC 660B 00915 tstfsz MidiCurData; 0003AE D001 00916 bra MidiInDataM2; 0003B0 D004 00917 bra MidiInDataM1; 0003B2 00918 MidiInDataM2: 00919 ; 2nd byte 0003B2 C007 F00A 00920 movff MidiInByte,MidiByte2; 0003B6 6A0B 00921 clrf MidiCurData; 0003B8 D008 00922 bra MidiInAction2Bytes; 0003BA 00923 MidiInDataM1: 0003BA C007 F009 00924 movff MidiInByte,MidiByte1; 0003BE 2A0B 00925 incf MidiCurData,1; 0003C0 500B 00926 movf MidiCurData,0; 0003C2 5C0C 00927 subwf MidiNumData,0; 0003C4 E001 00928 bz MidiInAction1Byte; 0003C6 0012 00929 return; 00930 0003C8 00931 MidiInAction1Byte: 0003C8 0012 00932 return; 00933 0003CA 00934 MidiInAction2Bytes: 0003CA 0E98 00935 movlw 098h; noteOn, ch 8 0003CC 5C08 00936 subwf MidiByte0,0; 0003CE E007 00937 bz MidiInNoteOn; 0003D0 0E88 00938 movlw 088h; noteOff, ch 8 0003D2 5C08 00939 subwf MidiByte0,0; 0003D4 E022 00940 bz MidiInNoteOff; 0003D6 0EB8 00941 movlw 0B8h; cc, ch 8 0003D8 5C08 00942 subwf MidiByte0,0; 0003DA E03E 00943 bz MidiInCC; 0003DC 0012 00944 return; 00945 0003DE 00946 MidiInNoteOn: ;************** 00947 ; lookup timer #, read from table in PM:0Fvv 0003DE 500A 00948 movf MidiByte2,0; 0003E0 E01C 00949 bz MidiInNoteOff; ; velocity=0 -> NOTE OFF 00950 ; bsf LATC,0; ; errorLED heartbeat 0003E2 0E10 00951 movlw 10h; MPASM 03.80.03 Internal AKEPIC1.ASM 9-28-2004 15:08:50 PAGE 19 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0003E4 6EF7 00952 movwf TBLPTRH; page = note number to latch pointer table 0003E6 C009 FFF6 00953 MOVFF MidiByte1,TBLPTRL 0003EA 0008 00954 TBLRD* ; read into TABLAT 0003EC 50F5 00955 movf TABLAT,0 0003EE E032 00956 bz MidiInNoteOn2; 00957 ; bcf LATC,0; ; errorLED heartbeat 0003F0 6E0F 00958 movwf TmpT ; TmpT = Latch pointer 00959 ; modify data with OR mask 0003F2 EE20 F000 00960 lfsr FSR2 ,0000h 0003F6 C00F FFD9 00961 movff TmpT, FSR2L; 0003FA 2AF7 00962 incf TBLPTRH; page = note number to OR mask table 0003FC 0008 00963 TBLRD* ; read into TABLAT 0003FE 50F5 00964 movf TABLAT,0; 000400 12DF 00965 iorwf INDF2; 00966 ; add to fifo 000402 C012 FFD9 00967 movff FifoWrIndx, FSR2L; 000406 C00F FFDE 00968 movff TmpT,POSTINC2; 00969 ; update FifoWrIndex 00040A 50D9 00970 movf FSR2L,0; 00040C E003 00971 bz NoWrap2; corrected: was: bnz 00040E CFD9 F012 00972 movff FSR2L, FifoWrIndx; 000412 0012 00973 return 000414 00974 NoWrap2 000414 0EF0 00975 movlw Fifo0LatPtr; Wrap to start 000416 6E12 00976 movwf FifoWrIndx; 000418 0012 00977 return 00978 00041A 00979 MidiInNoteOff: ;************** 00980 ; lookup timer #, read from table in PM:0Fvv 00041A 0E10 00981 movlw 10h; 00041C 6EF7 00982 movwf TBLPTRH; page = note number to latch pointer table 00041E C009 FFF6 00983 MOVFF MidiByte1,TBLPTRL 000422 0008 00984 TBLRD* ; read into TABLAT 000424 50F5 00985 movf TABLAT,0 000426 E017 00986 bz MidiInNoteOff2; 000428 6E0F 00987 movwf TmpT ; TmpT = Latch pointer 00988 ; modify data with OR mask 00042A EE20 F000 00989 lfsr FSR2 ,0000h 00042E C00F FFD9 00990 movff TmpT, FSR2L; 000432 2AF7 00991 incf TBLPTRH; page = note number to OR mask table 000434 2AF7 00992 incf TBLPTRH; page = note number to AND mask table 000436 0008 00993 TBLRD* ; read into TABLAT 000438 50F5 00994 movf TABLAT,0; 00043A 16DF 00995 andwf INDF2; 00996 ; add to fifo 00043C C012 FFD9 00997 movff FifoWrIndx, FSR2L; 000440 C00F FFDE 00998 movff TmpT,POSTINC2; 00999 ; update FifoWrIndex 000444 50D9 01000 movf FSR2L,0; 000446 E003 01001 bz NoWrap3; corrected: was: bnz 000448 CFD9 F012 01002 movff FSR2L, FifoWrIndx; 00044C 0012 01003 return 00044E 01004 NoWrap3 MPASM 03.80.03 Internal AKEPIC1.ASM 9-28-2004 15:08:50 PAGE 20 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00044E 0EF0 01005 movlw Fifo0LatPtr; Wrap to start 000450 6E12 01006 movwf FifoWrIndx; 000452 0012 01007 return 01008 000454 01009 MidiInNoteOn2 000454 0012 01010 return 000456 01011 MidiInNoteOff2 000456 0012 01012 return 01013 000458 01014 MidiInCC 000458 0E7B 01015 movlw 0x7B; CC NotesOff, ch F 00045A 5C09 01016 subwf MidiByte1,0; 00045C E001 01017 bz MidiInCCAllNotesOff; 00045E 0012 01018 return 01019 000460 01020 MidiInCCAllNotesOff: 000460 6BA0 01021 clrf ExtLatAData; 000462 6BA4 01022 clrf ExtLatBData; 000464 6BA8 01023 clrf ExtLatCData; 000466 6BAC 01024 clrf ExtLatDData; 000468 6BB0 01025 clrf ExtLatEData; 00046A 6BB4 01026 clrf ExtLatFData; 00046C 6BB8 01027 clrf ExtLatGData; 00046E 6BBC 01028 clrf ExtLatHData; 000470 6BC0 01029 clrf ExtLatIData; 01030 000472 0EA0 01031 movlw ExtLatAData; 000474 6FF0 01032 movwf Fifo0LatPtr; 000476 0EA4 01033 movlw ExtLatBData; 000478 6FF1 01034 movwf Fifo1LatPtr; 00047A 0EA8 01035 movlw ExtLatCData; 00047C 6FF2 01036 movwf Fifo2LatPtr; 00047E 0EAC 01037 movlw ExtLatDData; 000480 6FF3 01038 movwf Fifo3LatPtr; 000482 0EB0 01039 movlw ExtLatEData; 000484 6FF4 01040 movwf Fifo4LatPtr; 000486 0EB4 01041 movlw ExtLatFData; 000488 6FF5 01042 movwf Fifo5LatPtr; 00048A 0EB8 01043 movlw ExtLatGData; 00048C 6FF6 01044 movwf Fifo6LatPtr; 00048E 0EBC 01045 movlw ExtLatHData; 000490 6FF7 01046 movwf Fifo7LatPtr; 000492 0EC0 01047 movlw ExtLatIData; 000494 6FF8 01048 movwf Fifo8LatPtr; 000496 0EA0 01049 movlw ExtLatAData; 000498 6FF9 01050 movwf Fifo9LatPtr; 01051 00049A 0EF0 01052 movlw Fifo0LatPtr; 00049C 6E11 01053 movwf FifoRdIndx; 00049E 0EF9 01054 movlw Fifo9LatPtr; 0004A0 6E12 01055 movwf FifoWrIndx; 01056 0004A2 0EF0 01057 movlw Fifo0LatPtr; MPASM 03.80.03 Internal AKEPIC1.ASM 9-28-2004 15:08:50 PAGE 21 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0004A4 6E11 01058 movwf FifoRdIndx; 0004A6 0EF9 01059 movlw Fifo9LatPtr; 0004A8 6E12 01060 movwf FifoWrIndx; 01061 0004AA 0012 01062 return 01063 01064 ;************************************************************* 01065 ; latch pointer per note 001000 01066 org 1000h ; 001000 01067 NoteLatchPtr: 001000 0000 0000 0000 01068 DB 0,0,0,0,0,0,0,0; 0..7 0000 001008 0000 0000 0000 01069 DB 0,0,0,0,0,0,0,0; 8..15 0000 001010 0000 A000 A0A0 01070 DB 0 , 0 ,0 ,ExtLatAData,ExtLatAData,ExtLatAData,ExtLatAData,ExtL atAData; 16..23 A0A0 001018 A0A0 A4A0 A4A4 01071 DB ExtLatAData,ExtLatAData,ExtLatAData,ExtLatBData,ExtLatBData,ExtLatBData,ExtLatBData,ExtL atBData; 24..31 A4A4 001020 A4A4 A8A4 A8A8 01072 DB ExtLatBData,ExtLatBData,ExtLatBData,ExtLatCData,ExtLatCData,ExtLatCData,ExtLatCData,ExtL atCData; 32.. A8A8 001028 A8A8 00A8 0000 01073 DB ExtLatCData,ExtLatCData,ExtLatCData, 0 ,0 ,0 ,0 ,0 ; 40.. 0000 001030 AC00 ACAC ACAC 01074 DB 0 ,ExtLatDData,ExtLatDData,ExtLatDData,ExtLatDData,ExtLatDData,ExtLatDData,ExtL atDData; 48.. ACAC 001038 B0AC B0B0 B0B0 01075 DB ExtLatDData,ExtLatEData,ExtLatEData,ExtLatEData,ExtLatEData,ExtLatEData,ExtLatEData,ExtL atEData; 56.. B0B0 001040 B4B0 B4B4 B4B4 01076 DB ExtLatEData,ExtLatFData,ExtLatFData,ExtLatFData,ExtLatFData,ExtLatFData,ExtLatFData,ExtL atFData; 64.. B4B4 001048 B8B4 B8B8 B8B8 01077 DB ExtLatFData,ExtLatGData,ExtLatGData,ExtLatGData,ExtLatGData,ExtLatGData,ExtLatGData,ExtL atGData; 72.. B8B8 001050 BCB8 BCBC BCBC 01078 DB ExtLatGData,ExtLatHData,ExtLatHData,ExtLatHData,ExtLatHData,ExtLatHData,ExtLatHData,ExtL atHData; 80.. BCBC 001058 C0BC C0C0 C0C0 01079 DB ExtLatHData,ExtLatIData,ExtLatIData,ExtLatIData,ExtLatIData,ExtLatIData,ExtLatIData,ExtL atIData; 88.. C0C0 001060 00C0 0000 0000 01080 DB ExtLatIData,0,0,0,0,0,0,0; 96.. 0000 001068 0000 0000 0000 01081 DB 0,0,0,0,0,0,0,0; 104.. 0000 001070 0000 0000 0000 01082 DB 0,0,0,0,0,0,0,0; 112.. 0000 001078 0000 0000 0000 01083 DB 0,0,0,0,0,0,0,0; 120..127 0000 01084 MPASM 03.80.03 Internal AKEPIC1.ASM 9-28-2004 15:08:50 PAGE 22 LOC OBJECT CODE LINE SOURCE TEXT VALUE 001100 01085 org 1100h ; 001100 01086 NoteLatchOnOrMask: 001100 0000 0000 0000 01087 DB 0,0,0,0,0,0,0,0; 0..7 0000 001108 0000 0000 0000 01088 DB 0,0,0,0,0,0,0,0; 8.. 0000 001110 0000 8000 2040 01089 DB 0x00,0x00,0x00,0x80,0x40,0x20,0x10,0x08; 16.. 0810 001118 0204 8001 2040 01090 DB 0x04,0x02,0x01,0x80,0x40,0x20,0x10,0x08; 24.. 0810 001120 0204 8001 2040 01091 DB 0x04,0x02,0x01,0x80,0x40,0x20,0x10,0x08; 32.. 0810 001128 0204 0001 0000 01092 DB 0x04,0x02,0x01,0x00,0x00,0x00,0x00,0x00; 40.. 0000 01093 01094 ; hmmm the wiring is upside-down 01095 ; DB 0x00,0x80,0x40,0x20,0x10,0x08,0x04,0x02; 40.. 01096 ; DB 0x01,0x80,0x40,0x20,0x10,0x08,0x04,0x02; 48.. 01097 ; DB 0x01,0x80,0x40,0x20,0x10,0x08,0x04,0x02; 56.. 01098 ; DB 0x01,0x80,0x40,0x20,0x10,0x08,0x04,0x02; 64.. 01099 ; DB 0x01,0x80,0x40,0x20,0x10,0x08,0x04,0x02; 72.. 01100 ; DB 0x01,0x80,0x40,0x20,0x10,0x08,0x04,0x02; 80.. 01101 ; DB 0x01,0x80,0x40,0x20,0x10,0x08,0x04,0x02; 88.. 01102 ; DB 0x01,0,0,0,0,0,0,0; 96.. 01103 001130 0100 0402 1008 01104 DB 0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40; 48.. 4020 001138 0180 0402 1008 01105 DB 0x80,0x01,0x02,0x04,0x08,0x10,0x20,0x40; 56.. 4020 001140 0180 0402 1008 01106 DB 0x80,0x01,0x02,0x04,0x08,0x10,0x20,0x40; 64.. 4020 001148 0180 0402 1008 01107 DB 0x80,0x01,0x02,0x04,0x08,0x10,0x20,0x40; 72.. 4020 001150 0180 0402 1008 01108 DB 0x80,0x01,0x02,0x04,0x08,0x10,0x20,0x40; 80.. 4020 001158 0180 0402 1008 01109 DB 0x80,0x01,0x02,0x04,0x08,0x10,0x20,0x40; 88.. 4020 001160 0080 0000 0000 01110 DB 0x80,0,0,0,0,0,0,0; 96.. 0000 01111 001168 0000 0000 0000 01112 DB 0,0,0,0,0,0,0,0; 104.. 0000 001170 0000 0000 0000 01113 DB 0,0,0,0,0,0,0,0; 112.. 0000 001178 0000 0000 0000 01114 DB 0,0,0,0,0,0,0,0; 120..127 0000 01115 001200 01116 org 1200h ; 001200 01117 NoteLatchOffAndMask: 001200 FFFF FFFF FFFF 01118 DB 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF; 0..7 FFFF 001208 FFFF FFFF FFFF 01119 DB 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF; 8.. FFFF MPASM 03.80.03 Internal AKEPIC1.ASM 9-28-2004 15:08:50 PAGE 23 LOC OBJECT CODE LINE SOURCE TEXT VALUE 01120 001210 FFFF 7FFF DBBF 01121 DB 0xFF,0xFF,0xFF,0x7F,0xBF,0xDB,0xE7,0xF7; 16.. F7E7 001218 FDFB 7FFE DBBF 01122 DB 0xFB,0xFD,0xFE,0x7F,0xBF,0xDB,0xE7,0xF7; 24.. F7E7 001220 FDFB 7FFE DBBF 01123 DB 0xFB,0xFD,0xFE,0x7F,0xBF,0xDB,0xE7,0xF7; 32.. F7E7 001228 FDFB FFFE FFFF 01124 DB 0xFB,0xFD,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF; 40.. FFFF 01125 01126 ; hmmm the wiring is upside-down 01127 ; DB 0xFF,0x7F,0xBF,0xDB,0xE7,0xF7,0xFB,0xFD; 40.. 01128 ; DB 0xFE,0x7F,0xBF,0xDB,0xE7,0xF7,0xFB,0xFD; 48.. 01129 ; DB 0xFE,0x7F,0xBF,0xDB,0xE7,0xF7,0xFB,0xFD;56.. 01130 ; DB 0xFE,0x7F,0xBF,0xDB,0xE7,0xF7,0xFB,0xFD; 64.. 01131 ; DB 0xFE,0x7F,0xBF,0xDB,0xE7,0xF7,0xFB,0xFD; 72.. 01132 ; DB 0xFE,0x7F,0xBF,0xDB,0xE7,0xF7,0xFB,0xFD; 80.. 01133 ; DB 0xFE,0x7F,0xBF,0xDB,0xE7,0xF7,0xFB,0xFD; 88.. 01134 ; DB 0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF; 96.. 01135 001230 FEFF FBFD EFF7 01136 DB 0xFF,0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF; 48.. BFDF 001238 FE7F FBFD EFF7 01137 DB 0x7F,0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF; 56.. BFDF 001240 FE7F FBFD EFF7 01138 DB 0x7F,0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF; 64.. BFDF 001248 FE7F FBFD EFF7 01139 DB 0x7F,0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF; 72.. BFDF 001250 FE7F FBFD EFF7 01140 DB 0x7F,0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF; 80.. BFDF 001258 FE7F FBFD EFF7 01141 DB 0x7F,0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF; 88.. BFDF 001260 FF7F FFFF FFFF 01142 DB 0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF; 96.. FFFF 01143 001268 FFFF FFFF FFFF 01144 DB 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF; 104.. FFFF 001270 FFFF FFFF FFFF 01145 DB 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF; 112.. FFFF 001278 FFFF FFFF FFFF 01146 DB 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF; 120..127 FFFF 01147 01148 01149 END MPASM 03.80.03 Internal AKEPIC1.ASM 9-28-2004 15:08:50 PAGE 24 SYMBOL TABLE LABEL VALUE A 00000000 ACCESS 00000000 ACKDT 00000005 ACKEN 00000004 ACKSTAT 00000006 ADCON0 00000FC2 ADCON1 00000FC1 ADCS0 00000006 ADCS1 00000007 ADCS2 00000006 ADDEN 00000003 ADFM 00000007 ADIE 00000006 ADIF 00000006 ADIP 00000006 ADON 00000000 ADRESH 00000FC4 ADRESL 00000FC3 ALoop1 00000198 AN0 00000000 AN1 00000001 AN2 00000002 AN3 00000003 AN4 00000005 BANKED 00000001 BCLIE 00000003 BCLIF 00000003 BCLIP 00000003 BF 00000000 BLoop1 00000196 BOR 00000000 BRGH 00000002 BSR 00000FE0 BSR_TEMP 00000002 C 00000000 CCP1 00000002 CCP1CON 00000FBD CCP1IE 00000002 CCP1IF 00000002 CCP1IP 00000002 CCP1M0 00000000 CCP1M1 00000001 CCP1M2 00000002 CCP1M3 00000003 CCP1X 00000005 CCP1Y 00000004 CCP2 00000001 CCP2A 00000003 CCP2CON 00000FBA CCP2IE 00000000 CCP2IF 00000000 CCP2IP 00000000 CCP2M0 00000000 MPASM 03.80.03 Internal AKEPIC1.ASM 9-28-2004 15:08:50 PAGE 25 SYMBOL TABLE LABEL VALUE CCP2M1 00000001 CCP2M2 00000002 CCP2M3 00000003 CCP2X 00000005 CCP2Y 00000004 CCPR1H 00000FBF CCPR1L 00000FBE CCPR2H 00000FBC CCPR2L 00000FBB CFGS 00000006 CHS0 00000003 CHS1 00000004 CHS2 00000005 CK 00000006 CKE 00000006 CKP 00000004 CLKO 00000006 CREN 00000004 CSRC 00000007 Copy1 00000306 CopyRxToTx 00000306 D 00000005 DATA_ADDRESS 00000005 DC 00000001 DC1B0 00000004 DC1B1 00000005 DC2B0 00000004 DC2B1 00000005 DDRA TRISA DDRB TRISB DDRC TRISC DONE 00000002 D_A 00000005 EEADR 00000FA9 EECON1 00000FA6 EECON2 00000FA7 EEDATA 00000FA8 EEIE 00000004 EEIF 00000004 EEIP 00000004 EEPGD 00000007 EndHighInt 000000A8 EndLowInt 0000004A ErrFERR 00000090 ErrOERR 00000084 ErrRxBufEmpty 00000302 ErrRxBufFull 00000282 ErrRxOver 0000009E ErrTxBufEmpty 000002C0 ErrTxBufFull 00000246 ErrorLed 00000013 ExtLatAAddrA 000000A1 ExtLatAAddrC 000000A2 MPASM 03.80.03 Internal AKEPIC1.ASM 9-28-2004 15:08:50 PAGE 26 SYMBOL TABLE LABEL VALUE ExtLatAData 000000A0 ExtLatAdummy 000000A3 ExtLatBAddrA 000000A5 ExtLatBAddrC 000000A6 ExtLatBData 000000A4 ExtLatBdummy 000000A7 ExtLatCAddrA 000000A9 ExtLatCAddrC 000000AA ExtLatCData 000000A8 ExtLatCdummy 000000AB ExtLatDAddrA 000000AD ExtLatDAddrC 000000AE ExtLatDData 000000AC ExtLatDdummy 000000AF ExtLatEAddrA 000000B1 ExtLatEAddrC 000000B2 ExtLatEData 000000B0 ExtLatEdummy 000000B3 ExtLatFAddrA 000000B5 ExtLatFAddrC 000000B6 ExtLatFData 000000B4 ExtLatFdummy 000000B7 ExtLatGAddrA 000000B9 ExtLatGAddrC 000000BA ExtLatGData 000000B8 ExtLatGdummy 000000BB ExtLatHAddrA 000000BD ExtLatHAddrC 000000BE ExtLatHData 000000BC ExtLatHdummy 000000BF ExtLatIAddrA 000000C1 ExtLatIAddrC 000000C2 ExtLatIData 000000C0 ExtLatIdummy 000000C3 FAST 00000001 FERR 00000002 FREE 00000004 FSR0 00000000 FSR0H 00000FEA FSR0H_SHADOW 00000005 FSR0H_TEMP 00000003 FSR0L 00000FE9 FSR0L_SHADOW 00000006 FSR0L_TEMP 00000004 FSR1 00000001 FSR1H 00000FE2 FSR1L 00000FE1 FSR2 00000002 FSR2H 00000FDA FSR2L 00000FD9 Fifo0LatPtr 000000F0 Fifo10LatPtr 000000FA Fifo11LatPtr 000000FB MPASM 03.80.03 Internal AKEPIC1.ASM 9-28-2004 15:08:50 PAGE 27 SYMBOL TABLE LABEL VALUE Fifo12LatPtr 000000FC Fifo13LatPtr 000000FD Fifo14LatPtr 000000FE Fifo15LatPtr 000000FF Fifo1LatPtr 000000F1 Fifo2LatPtr 000000F2 Fifo3LatPtr 000000F3 Fifo4LatPtr 000000F4 Fifo5LatPtr 000000F5 Fifo6LatPtr 000000F6 Fifo7LatPtr 000000F7 Fifo8LatPtr 000000F8 Fifo9LatPtr 000000F9 FifoRdIndx 00000011 FifoWrIndx 00000012 Flags 00000040 GCEN 00000007 GIE 00000007 GIEH 00000007 GIEL 00000006 GO 00000002 GO_DONE 00000002 GetData 00000072 GetRxBuf1 000002E4 GetRxBuf2 000002FA GetRxBuffer 000002C2 GetTxBuf1 000002A4 GetTxBuf2 000002BA GetTxBuffer 00000284 HighInt 00000008 HighInt1 00000070 HighIntCode 00000060 I2C_DAT 00000005 I2C_READ 00000002 I2C_START 00000003 I2C_STOP 00000004 INDF0 00000FEF INDF1 00000FE7 INDF2 00000FDF INT0 00000000 INT0E 00000004 INT0F 00000001 INT0IE 00000004 INT0IF 00000001 INT1 00000001 INT1IE 00000003 INT1IF 00000000 INT1IP 00000006 INT2 00000002 INT2IE 00000004 INT2IF 00000001 INT2IP 00000007 INTCON 00000FF2 MPASM 03.80.03 Internal AKEPIC1.ASM 9-28-2004 15:08:50 PAGE 28 SYMBOL TABLE LABEL VALUE INTCON1 00000FF2 INTCON2 00000FF1 INTCON3 00000FF0 INTEDG0 00000006 INTEDG1 00000005 INTEDG2 00000004 IPEN 00000007 IPR1 00000F9F IPR2 00000FA2 IRVST 00000005 InitRxBuffer 000001F8 InitTxBuffer 000001E6 LATA 00000F89 LATB 00000F8A LATC 00000F8B LVDCON 00000FD2 LVDEN 00000004 LVDIE 00000002 LVDIF 00000002 LVDIN 00000005 LVDIP 00000002 LVDL0 00000000 LVDL1 00000001 LVDL2 00000002 LVDL3 00000003 LatWriteState 00000010 LowInt 00000018 LowInt1 00000034 LowInt2 0000003C Main 000000B2 MainLoop 000001BA MidiByte0 00000008 MidiByte1 00000009 MidiByte2 0000000A MidiCurData 0000000B MidiInAction1Byte 000003C8 MidiInAction2Bytes 000003CA MidiInByte 00000007 MidiInCC 00000458 MidiInCCAllNotesOff 00000460 MidiInData 000003AC MidiInDataM1 000003BA MidiInDataM2 000003B2 MidiInNoteOff 0000041A MidiInNoteOff2 00000456 MidiInNoteOn 000003DE MidiInNoteOn2 00000454 MidiInParser 0000038E MidiInStatus 00000396 MidiInStatus2words 000003A6 MidiInStatusEnd 000003AA MidiNumData 0000000C MidiTestByte 0000000D MPASM 03.80.03 Internal AKEPIC1.ASM 9-28-2004 15:08:50 PAGE 29 SYMBOL TABLE LABEL VALUE N 00000004 NOT_A 00000005 NOT_ADDRESS 00000005 NOT_BOR 00000000 NOT_DONE 00000002 NOT_PD 00000002 NOT_POR 00000001 NOT_RBPU 00000007 NOT_RC8 00000006 NOT_RI 00000004 NOT_T1SYNC 00000002 NOT_T3SYNC 00000002 NOT_TO 00000003 NOT_TX8 00000006 NOT_W 00000002 NOT_WRITE 00000002 NoWrap 00000372 NoWrap2 00000414 NoWrap3 0000044E NoteLatchOffAndMask 00001200 NoteLatchOnOrMask 00001100 NoteLatchPtr 00001000 OERR 00000001 OSC2 00000006 OSCCON 00000FD3 OV 00000003 P 00000004 PCFG0 00000000 PCFG1 00000001 PCFG2 00000002 PCFG3 00000003 PCL 00000FF9 PCLATH 00000FFA PCLATU 00000FFB PD 00000002 PEIE 00000006 PEN 00000002 PIE1 00000F9D PIE2 00000FA0 PIR1 00000F9E PIR2 00000FA1 PLUSW0 00000FEB PLUSW1 00000FE3 PLUSW2 00000FDB POR 00000001 PORTA 00000F80 PORTB 00000F81 PORTC 00000F82 POSTDEC0 00000FED POSTDEC1 00000FE5 POSTDEC2 00000FDD POSTINC0 00000FEE POSTINC1 00000FE6 MPASM 03.80.03 Internal AKEPIC1.ASM 9-28-2004 15:08:50 PAGE 30 SYMBOL TABLE LABEL VALUE POSTINC2 00000FDE PR2 00000FCB PREINC0 00000FEC PREINC1 00000FE4 PREINC2 00000FDC PRODH 00000FF4 PRODL 00000FF3 PSA 00000003 PSPIE 00000007 PSPIF 00000007 PSPIP 00000007 PollMidiIn 00000388 PutDat1 00000046 PutData 0000003E PutRxBuf1 00000268 PutRxBuf2 0000027E PutRxBuffer 0000024A PutTxBuf1 0000022A PutTxBuf2 00000240 PutTxBuffer 0000020A R 00000002 RA0 00000000 RA1 00000001 RA2 00000002 RA3 00000003 RA4 00000004 RA5 00000005 RA6 00000006 RB0 00000000 RB1 00000001 RB2 00000002 RB3 00000003 RB4 00000004 RB5 00000005 RB6 00000006 RB7 00000007 RBIE 00000003 RBIF 00000000 RBIP 00000000 RBPU 00000007 RC0 00000000 RC1 00000001 RC2 00000002 RC3 00000003 RC4 00000004 RC5 00000005 RC6 00000006 RC7 00000007 RC8_9 00000006 RC9 00000006 RCD8 00000000 RCEN 00000003 RCIE 00000005 MPASM 03.80.03 Internal AKEPIC1.ASM 9-28-2004 15:08:50 PAGE 31 SYMBOL TABLE LABEL VALUE RCIF 00000005 RCIP 00000005 RCON 00000FD0 RCREG 00000FAE RCSTA 00000FAB RD 00000000 RD16 00000007 READ_WRITE 00000002 RI 00000004 RSEN 00000001 RX 00000007 RX9 00000006 RX9D 00000000 RX_BUF_LEN 00000010 R_W 00000002 ResetVector 00000000 RxBufEmpty 00000003 RxBufFull 00000002 RxBuffer 0000005C RxEndPtrH 0000004A RxEndPtrL 0000004B RxStartPtrH 00000048 RxStartPtrL 00000049 S 00000003 SCK 00000003 SCL 00000003 SCS 00000000 SDA 00000004 SDI 00000004 SDO 00000005 SEN 00000000 SMP 00000007 SPBRG 00000FAF SPBRG_VAL 0000004F SPEN 00000007 SREN 00000005 SS 00000005 SSPADD 00000FC8 SSPBUF 00000FC9 SSPCON1 00000FC6 SSPCON2 00000FC5 SSPEN 00000005 SSPIE 00000003 SSPIF 00000003 SSPIP 00000003 SSPM0 00000000 SSPM1 00000001 SSPM2 00000002 SSPM3 00000003 SSPOV 00000006 SSPSTAT 00000FC7 STATUS 00000FD8 STATUS_TEMP 00000001 MPASM 03.80.03 Internal AKEPIC1.ASM 9-28-2004 15:08:50 PAGE 32 SYMBOL TABLE LABEL VALUE STKFUL 00000007 STKPTR 00000FFC STKUNF 00000006 SWDTE 00000000 SWDTEN 00000000 SYNC 00000004 SetupSerial 000001C0 SetupTimer3 00000312 T08BIT 00000006 T0CKI 00000004 T0CON 00000FD5 T0CS 00000005 T0IE 00000005 T0IF 00000002 T0IP 00000002 T0PS0 00000000 T0PS1 00000001 T0PS2 00000002 T0SE 00000004 T1CKI 00000000 T1CKPS0 00000004 T1CKPS1 00000005 T1CON 00000FCD T1INSYNC 00000002 T1OSCEN 00000003 T1OSI 00000001 T1OSO 00000000 T1SYNC 00000002 T2CKPS0 00000000 T2CKPS1 00000001 T2CON 00000FCA T3CCP1 00000003 T3CCP2 00000006 T3CKPS0 00000004 T3CKPS1 00000005 T3CON 00000FB1 T3INSYNC 00000002 T3ISRProcessFifo 0000035C T3ISR_LWS1 0000033C T3ISR_LWS2 00000344 T3ISR_LWS3 00000350 T3SYNC 00000002 TABLAT 00000FF5 TBLPTRH 00000FF7 TBLPTRL 00000FF6 TBLPTRU 00000FF8 TISRAddrA 00000015 TISRAddrC 00000016 TISRData 00000014 TISRDone 00000386 TMR0H 00000FD7 TMR0IE 00000005 TMR0IF 00000002 MPASM 03.80.03 Internal AKEPIC1.ASM 9-28-2004 15:08:50 PAGE 33 SYMBOL TABLE LABEL VALUE TMR0IP 00000002 TMR0L 00000FD6 TMR0ON 00000007 TMR1CS 00000001 TMR1H 00000FCF TMR1IE 00000000 TMR1IF 00000000 TMR1IP 00000000 TMR1L 00000FCE TMR1ON 00000000 TMR2 00000FCC TMR2IE 00000001 TMR2IF 00000001 TMR2IP 00000001 TMR2ON 00000002 TMR3CS 00000001 TMR3H 00000FB3 TMR3IE 00000001 TMR3IF 00000001 TMR3IP 00000001 TMR3L 00000FB2 TMR3ON 00000000 TO 00000003 TOSH 00000FFE TOSL 00000FFD TOSU 00000FFF TOUTPS0 00000003 TOUTPS1 00000004 TOUTPS2 00000005 TOUTPS3 00000006 TRISA 00000F92 TRISB 00000F93 TRISC 00000F94 TRMT 00000001 TX 00000006 TX8_9 00000006 TX9 00000006 TX9D 00000000 TXD8 00000000 TXEN 00000005 TXIE 00000004 TXIF 00000004 TXIP 00000004 TXREG 00000FAD TXSTA 00000FAC TX_BUF_LEN 00000010 TempData 00000041 TempRxData 00000042 TempTxData 00000043 Timer3ISR 0000031C TmpM 0000000E TmpT 0000000F TxBufEmpty 00000001 MPASM 03.80.03 Internal AKEPIC1.ASM 9-28-2004 15:08:50 PAGE 34 SYMBOL TABLE LABEL VALUE TxBufFull 00000000 TxBuffer 0000004C TxEndPtrH 00000046 TxEndPtrL 00000047 TxStartPtrH 00000044 TxStartPtrL 00000045 UA 00000001 VREFM 00000002 VREFP 00000003 W 00000000 WCOL 00000007 WDTCON 00000FD1 WR 00000001 WREG 00000FE8 WREG_TEMP 00000000 WREN 00000002 WRERR 00000003 Z 00000002 _BORV_20_2L 000000FF _BORV_27_2L 000000FB _BORV_42_2L 000000F7 _BORV_45_2L 000000F3 _BOR_OFF_2L 000000FD _BOR_ON_2L 000000FF _CCP2MX_OFF_3H 000000FE _CCP2MX_ON_3H 000000FF _CONFIG1H 00300001 _CONFIG1L 00300000 _CONFIG2H 00300003 _CONFIG2L 00300002 _CONFIG3H 00300005 _CONFIG3L 00300004 _CONFIG4H 00300007 _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 _CP2_OFF_5L 000000FF _CP2_ON_5L 000000FB _CP3_OFF_5L 000000FF _CP3_ON_5L 000000F7 _CPB_OFF_5H 000000FF _CPB_ON_5H 000000BF _CPD_OFF_5H 000000FF _CPD_ON_5H 0000007F _DEBUG_OFF_4L 000000FF MPASM 03.80.03 Internal AKEPIC1.ASM 9-28-2004 15:08:50 PAGE 35 SYMBOL TABLE LABEL VALUE _DEBUG_ON_4L 0000007F _DEVID1 003FFFFE _DEVID2 003FFFFF _EBTR0_OFF_7L 000000FF _EBTR0_ON_7L 000000FE _EBTR1_OFF_7L 000000FF _EBTR1_ON_7L 000000FD _EBTR2_OFF_7L 000000FF _EBTR2_ON_7L 000000FB _EBTR3_OFF_7L 000000FF _EBTR3_ON_7L 000000F7 _EBTRB_OFF_7H 000000FF _EBTRB_ON_7H 000000BF _ECIO_OSC_1H 000000FD _EC_OSC_1H 000000FC _HSPLL_OSC_1H 000000FE _HS_OSC_1H 000000FA _IDLOC0 00200000 _IDLOC1 00200001 _IDLOC2 00200002 _IDLOC3 00200003 _IDLOC4 00200004 _IDLOC5 00200005 _IDLOC6 00200006 _IDLOC7 00200007 _LP_OSC_1H 000000F8 _LVP_OFF_4L 000000FB _LVP_ON_4L 000000FF _OSCS_OFF_1H 000000FF _OSCS_ON_1H 000000DF _PWRT_OFF_2L 000000FF _PWRT_ON_2L 000000FE _RCIO_OSC_1H 000000FF _RC_OSC_1H 000000FB _STVR_OFF_4L 000000FE _STVR_ON_4L 000000FF _WDTPS_128_2H 000000FF _WDTPS_16_2H 000000F9 _WDTPS_1_2H 000000F1 _WDTPS_2_2H 000000F3 _WDTPS_32_2H 000000FB _WDTPS_4_2H 000000F5 _WDTPS_64_2H 000000FD _WDTPS_8_2H 000000F7 _WDT_OFF_2H 000000FE _WDT_ON_2H 000000FF _WRT0_OFF_6L 000000FF _WRT0_ON_6L 000000FE _WRT1_OFF_6L 000000FF _WRT1_ON_6L 000000FD _WRT2_OFF_6L 000000FF _WRT2_ON_6L 000000FB _WRT3_OFF_6L 000000FF MPASM 03.80.03 Internal AKEPIC1.ASM 9-28-2004 15:08:50 PAGE 36 SYMBOL TABLE LABEL VALUE _WRT3_ON_6L 000000F7 _WRTB_OFF_6H 000000FF _WRTB_ON_6H 000000BF _WRTC_OFF_6H 000000FF _WRTC_ON_6H 000000DF _WRTD_OFF_6H 000000FF _WRTD_ON_6H 0000007F _XT_OSC_1H 000000F9 __18F252 00000001 MEMORY USAGE MAP ('X' = Used, '-' = Unused) 0000 : XX------XX------ --------XXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0040 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0080 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 00C0 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0100 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0140 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0180 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 01C0 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0200 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0240 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0280 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 02C0 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0300 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0340 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0380 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 03C0 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0400 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0440 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0480 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXX---- ---------------- 1000 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 1040 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 1100 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 1140 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 1200 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 1240 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0000 : XXXXXXXXXXXXXX-- ---------------- ---------------- ---------------- All other memory blocks unused. Program Memory Bytes Used: 1574 Program Memory Bytes Free: 31194 Errors : 0 Warnings : 0 reported, 0 suppressed Messages : 0 reported, 0 suppressed