MPASM 02.20.04 Intermediate PS_DDR.ASM 4-10-1999 16:43:06 PAGE 1 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00001 ; 00002 ; bmcnv.asm MIDI converter for PSX Controler Ver.DDR 00003 ; for Microchip PIC16F84-10 00004 ; Copyright(C)1999 By H.Kashima 00005 ; 00006 ; 98/12/05 Ver1.0 00007 ; 99/04/10 Ver.DDR 00008 ; 00009 ; PIN I/O 00010 ; 00011 ; RA0: MIDI OUT in 00012 ; 1: n.c. 00013 ; 2: /LED out 00014 ; 3: MIDI IN out 00015 ; 4: n.c. 00016 ; RB0: data in 00017 ; 1: cmd out 00018 ; 2: mode0 in 00019 ; 3: mode1 in 00020 ; 4: /sel1 out 00021 ; 5: /sel2 out 00022 ; 6: clk out 00023 ; 7: ack in 00024 00025 00026 title bmcnv 00027 processor 16f84 Warning[216]: Radix superceded by command line. 00028 radix dec 00029 list c = 110, n = 88 00030 00031 ;#define debug 1 00032 #include 00001 LIST 00002 ; P16F84.INC Standard Header File, Version 2.00 Microchip Technology, Inc. 00136 LIST 00033 2007 3FF2 00034 __CONFIG _CP_OFF & _WDT_OFF & _HS_OSC & _PWRTE_ON 00035 00036 00037 #define BS(x) ( 1 << x ) ; bit set 00038 00039 ; supplyed clock 00040 #define XTAL 8000000 ; supplyed clock 00041 #define RTCLK ( XTAL / 4 ) ; internal timer clock, @500ns 00042 00043 ; PORTA contents 00044 #define P_MOUT 0 00045 #define P_LED 2 00046 #define P_MIN 3 00047 00048 ; PORTB contents 00049 #define P_DAT 0 00050 #define P_CMD 1 00051 #define P_MODE0 2 00052 #define P_MODE1 3 00053 #define P_SEL1 4 00054 #define P_SEL2 5 00055 #define P_CLK 6 00056 #define P_ACK 7 00057 00058 ; PSX_DATA[2] contents 00059 #define PSP0_LEFT 7 00060 #define PSP0_DOWN 6 00061 #define PSP0_RIGHT 5 00062 #define PSP0_UP 4 00063 #define PSP0_START 3 00064 #define PSP0_SELECT 0 00065 00066 ; PSX_DATA[3] contents 00067 #define PSP1_SQUARE 7 00068 #define PSP1_CROSS 6 00069 #define PSP1_CIRCLE 5 00070 #define PSP1_TRIANG 4 00071 #define PSP1_R1 3 00072 #define PSP1_L1 2 00073 #define PSP1_R2 1 00074 #define PSP1_L2 0 00075 00076 ;MODE_F contents 00077 #define M_1PCON 0 ; 1P connected 00078 #define M_2PCON 1 ; 2P connected MPASM 02.20.04 Intermediate PS_DDR.ASM 4-10-1999 16:43:06 PAGE 2 bmcnv LOC OBJECT CODE LINE SOURCE TEXT VALUE 00079 00080 ;PREV_ETC contents 00081 #define M_TURNED 0 ; table direction changed flag 00082 00083 ;LED Delay cycle 00084 #define LED_DELAY 32 00085 00086 ; 00087 ; work area 00088 ; 00089 cblock 0x0c 00090 0000000C 00091 PSX_DAT:8 ; read buffer 00000014 00092 ONTIMR_1P:8 ; condition counter 0000001C 00093 ONTIMR_2P:8 00094 00000024 00095 VAR1, VAR2, VAR3, VAR4, VAR5 ; variables 00000029 00096 VAR6 0000002A 00097 V_WAIT, SDATA, RDATA ; shift registers 0000002D 00098 MODE_F, LEDTMR ; others 00099 00100 endc 00101 ; 00102 ; 00103 ; program code 00104 ; 00105 ; reset vector 00106 ; 0000 00107 org 0x000 0000 2801 00108 goto start 00109 00110 ; interrupt vector 00111 ; 00112 ; org 0x004 00113 ; goto int_sub 00114 00115 ; 00116 ; cold start 00117 ; MCU initialize 00118 ; 0001 00119 start 0001 1683 00120 BANKSEL OPTION_REG ; bank select RP0 = 1 0002 3007 00121 movlw BS(PS2) | BS(PS1) | BS(PS0) Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct. 0003 0081 00122 movwf OPTION_REG ; pullup PORTB, PS=1:256 0004 30F3 00123 movlw b'11110011' ; initialize I/O port Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct. 0005 0085 00124 movwf TRISA 0006 308D 00125 movlw b'10001101' Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct. 0007 0086 00126 movwf TRISB 00127 0008 1283 00128 BANKSEL PORTA ; bank select RP0 = 0 0009 30FF 00129 movlw 0xff 000A 0085 00130 movwf PORTA ; initialize output 000B 0086 00131 movwf PORTB 00132 000C 3020 00133 movlw LED_DELAY 000D 00AE 00134 movwf LEDTMR 000E 01AD 00135 clrf MODE_F 00136 00137 ; 00138 ; Main Loop 00139 ; 000F 1206 00140 mloop bcf PORTB, P_SEL1 ; SEL1 goes low 0010 300C 00141 movlw PSX_DAT ; set buffer top 0011 209D 00142 call GetPSXC ; get data from 1P controler 0012 1606 00143 bsf PORTB, P_SEL1 ; SEL1 goes high 0013 39FF 00144 andlw 0xff ; read error? 0014 1903 00145 btfsc STATUS, Z 0015 2818 00146 goto ml1 ; connected 00147 0016 102D 00148 ml1b bcf MODE_F, M_1PCON ; clear connect flag 0017 2822 00149 goto ml2 00150 0018 00151 ml1 0018 3041 00152 movlw 0x41 0019 020C 00153 subwf PSX_DAT, W 001A 1D03 00154 btfss STATUS, Z ; is DDR controler? 001B 2816 00155 goto ml1b 00156 001C 142D 00157 bsf MODE_F, M_1PCON ; set connect flag MPASM 02.20.04 Intermediate PS_DDR.ASM 4-10-1999 16:43:06 PAGE 3 bmcnv LOC OBJECT CODE LINE SOURCE TEXT VALUE 00158 001D 303C 00159 movlw 60 ; key C3 001E 00A5 00160 movwf VAR2 001F 3014 00161 movlw ONTIMR_1P 0020 00A6 00162 movwf VAR3 0021 2047 00163 call dat2mid 00164 00165 0022 1286 00166 ml2 bcf PORTB, P_SEL2 ; SEL2 goes low 0023 300C 00167 movlw PSX_DAT ; set buffer top 0024 209D 00168 call GetPSXC ; get data from 2P controler 0025 1686 00169 bsf PORTB, P_SEL2 ; SEL2 goes high 0026 39FF 00170 andlw 0xff ; read error? 0027 1903 00171 btfsc STATUS, Z 0028 282B 00172 goto ml3 00173 0029 10AD 00174 ml2b bcf MODE_F, M_2PCON ; clear connect flag 002A 2835 00175 goto ml4 00176 002B 00177 ml3 002B 3041 00178 movlw 0x41 002C 020C 00179 subwf PSX_DAT, W 002D 1D03 00180 btfss STATUS, Z ; is DDR controler? 002E 2829 00181 goto ml2b 00182 002F 14AD 00183 bsf MODE_F, M_2PCON ; set connect flag 00184 0030 3054 00185 movlw 84 ; key C5 0031 00A5 00186 movwf VAR2 0032 301C 00187 movlw ONTIMR_2P 0033 00A6 00188 movwf VAR3 0034 2047 00189 call dat2mid 00190 0035 303C 00191 ml4 movlw 60 ; couter decriment and 0036 00A5 00192 movwf VAR2 ; send note OFF 0037 3014 00193 movlw ONTIMR_1P 0038 00A6 00194 movwf VAR3 0039 207F 00195 call cnt2mid 00196 003A 3054 00197 movlw 84 003B 00A5 00198 movwf VAR2 003C 301C 00199 movlw ONTIMR_2P 003D 00A6 00200 movwf VAR3 003E 207F 00201 call cnt2mid 00202 00203 ; 00204 ; 003F 3020 00205 movlw LED_DELAY ; light timer 0040 022E 00206 subwf LEDTMR, W 0041 1903 00207 btfsc STATUS, Z 0042 2845 00208 goto ml9 00209 0043 0AAE 00210 incf LEDTMR, F ; count up timer 0044 280F 00211 goto mloop 00212 0045 1505 00213 ml9 bsf PORTA, P_LED ; light down LED 00214 0046 280F 00215 goto mloop 00216 00217 00218 ; 00219 ; Subroutines 00220 ; 00221 ; 00222 00223 ; 00224 ; dat2mid 00225 ; VAR2: top note #, VAR3: counter buffer top, VAR4, VAR5, VAR6: local 00226 #define KEYDELAY 32 00227 0047 0826 00228 dat2mid movfw VAR3 0048 0084 00229 movwf FSR 0049 3006 00230 movlw b'00000110' 004A 048E 00231 iorwf PSX_DAT + 2, F 004B 309F 00232 movlw b'10011111' 004C 048F 00233 iorwf PSX_DAT + 3, F 00234 004D 080E 00235 movfw PSX_DAT + 2 ; key exchange for DDR 004E 380F 00236 iorlw b'00001111' ; UP/DOWN/LEFT/RIGHT and 004F 00A8 00237 movwf VAR5 ; TRI/CROS/SQU/CIR 0050 080F 00238 movfw PSX_DAT + 3 0051 380F 00239 iorlw b'00001111' MPASM 02.20.04 Intermediate PS_DDR.ASM 4-10-1999 16:43:06 PAGE 4 bmcnv LOC OBJECT CODE LINE SOURCE TEXT VALUE 0052 00A9 00240 movwf VAR6 00241 0053 30F0 00242 movlw b'11110000' 0054 048E 00243 iorwf PSX_DAT + 2, F 0055 0829 00244 movfw VAR6 0056 058E 00245 andwf PSX_DAT + 2, F 0057 30F0 00246 movlw b'11110000' 0058 048F 00247 iorwf PSX_DAT + 3, F 0059 0828 00248 movfw VAR5 005A 058F 00249 andwf PSX_DAT + 3, F 00250 005B 0D8E 00251 rlf PSX_DAT + 2, F ; copy CROSS bit to LEFT bit 005C 0D8E 00252 rlf PSX_DAT + 2, F 005D 0DA8 00253 rlf VAR5, F 005E 0C8E 00254 rrf PSX_DAT + 2, F 005F 0CA8 00255 rrf VAR5, F 0060 0C8E 00256 rrf PSX_DAT + 2, F 00257 0061 30A9 00258 movlw b'10101001' ; proc mask 0062 00A8 00259 movwf VAR5 0063 30F0 00260 movlw b'11110000' 0064 00A9 00261 movwf VAR6 0065 3010 00262 movlw 16 0066 00A7 00263 movwf VAR4 00264 0067 1C29 00265 d2m0 btfss VAR6, 0 ; activated key? 0068 2877 00266 goto d2m3 00267 0069 180F 00268 btfsc PSX_DAT + 3, 0 ; key check 006A 2876 00269 goto d2m2 00270 006B 0800 00271 movfw INDF 006C 1D03 00272 btfss STATUS, Z ; not pushed? 006D 2874 00273 goto d2m1 00274 006E 3090 00275 movlw 0x90 ; condition changed, NOTE ON 006F 20D3 00276 call MIDIout 0070 0825 00277 movfw VAR2 ; MIDI key value 0071 20D3 00278 call MIDIout 0072 307F 00279 movlw 0x7f ; velocity 127 0073 20D3 00280 call MIDIout 00281 0074 3020 00282 d2m1 movlw KEYDELAY ; reset counter 0075 0080 00283 movwf INDF 00284 0076 0A84 00285 d2m2 incf FSR, F 0077 0C8E 00286 d2m3 rrf PSX_DAT + 2, F 0078 0C8F 00287 rrf PSX_DAT + 3, F 0079 0CA8 00288 rrf VAR5, F 007A 0CA9 00289 rrf VAR6, F 007B 0AA5 00290 incf VAR2, F 007C 0BA7 00291 decfsz VAR4, F 007D 2867 00292 goto d2m0 00293 007E 0008 00294 return 00295 00296 ; 00297 ; cnt2mid 00298 ; VAR2: key note #, VAR3: counter buffer top, VAR4, VAR5, VAR6: local 007F 30A9 00299 cnt2mid movlw b'10101001' ; set activated key 0080 00A8 00300 movwf VAR5 0081 30F0 00301 movlw b'11110000' 0082 00A9 00302 movwf VAR6 0083 0826 00303 movfw VAR3 0084 0084 00304 movwf FSR 0085 3010 00305 movlw 16 0086 00A7 00306 movwf VAR4 00307 0087 1C29 00308 c2m0 btfss VAR6, 0 ; is activated key? 0088 2897 00309 goto c2m1b 00310 0089 0800 00311 movfw INDF ; is counter zero? 008A 1903 00312 btfsc STATUS, Z 008B 2896 00313 goto c2m1 00314 008C 3001 00315 movlw 1 ; counter -1 008D 0280 00316 subwf INDF, F 008E 1D03 00317 btfss STATUS, Z 008F 2896 00318 goto c2m1 00319 0090 3080 00320 movlw 0x80 ; count over, NOTE OFF 0091 20D3 00321 call MIDIout MPASM 02.20.04 Intermediate PS_DDR.ASM 4-10-1999 16:43:06 PAGE 5 bmcnv LOC OBJECT CODE LINE SOURCE TEXT VALUE 0092 0825 00322 movfw VAR2 ; MIDI key value 0093 20D3 00323 call MIDIout 0094 3000 00324 movlw 0x00 ; velocity 0 0095 20D3 00325 call MIDIout 00326 0096 0A84 00327 c2m1 incf FSR, F 0097 0AA5 00328 c2m1b incf VAR2, F 0098 0CA8 00329 rrf VAR5, F 0099 0CA9 00330 rrf VAR6, F 00331 009A 0BA7 00332 decfsz VAR4, F 009B 2887 00333 goto c2m0 00334 009C 0008 00335 return 00336 00337 00338 ; get data from PSX controler 00339 ; W: buffer top 00340 ; variable: FSR, SDATA, RDATA 00341 ; return: PSX_DAT[8] 009D 0084 00342 GetPSXC movwf FSR 009E 3001 00343 movlw 0x01 ; data request command[1] 009F 00AB 00344 movwf SDATA 00A0 20BB 00345 call PSrecv ; send data 00A1 20CC 00346 call PSwAck ; wait ACK 00A2 39FF 00347 andlw 0xff 00A3 1D03 00348 btfss STATUS, Z ; ACK returned? 00A4 34FF 00349 retlw 0xff ; return with error 00350 00A5 3042 00351 movlw 0x42 ; request command[2] 00A6 00AB 00352 movwf SDATA 00A7 20BB 00353 call PSrecv ; send the request 00A8 20CC 00354 call PSwAck ; wait ACK 00355 00A9 082C 00356 movfw RDATA 00AA 0080 00357 movwf INDF ; get controler ID 00AB 0A84 00358 incf FSR, F 00359 00AC 0D2C 00360 rlf RDATA, W ; calculate data length 00AD 3906 00361 andlw 0x06 00AE 00A5 00362 movwf VAR2 00AF 01AB 00363 clrf SDATA 00364 00B0 20BB 00365 gpc1 call PSrecv ; send the request 00B1 20CC 00366 call PSwAck ; wait ACK 00B2 082C 00367 movfw RDATA 00B3 0080 00368 movwf INDF ; store buffer 00B4 0A84 00369 incf FSR, F ; incriment pointer 00B5 0BA5 00370 decfsz VAR2, F 00B6 28B0 00371 goto gpc1 00372 00B7 20BB 00373 call PSrecv ; send the request 00374 ; *not require wait for ACK 00B8 082C 00375 movfw RDATA 00B9 0080 00376 movwf INDF ; store buffer last data 00377 00BA 3400 00378 retlw 0 00379 00380 ; 00381 ; data transfer for PSX 00382 ; send SDATA, return: RDATA 00383 ; variable: VAR1 00BB 3008 00384 PSrecv movlw 8 00BC 00A4 00385 movwf VAR1 00BD 0CAB 00386 psr1 rrf SDATA, F 00BE 1803 00387 btfsc STATUS, C 00BF 28C3 00388 goto psr2 00389 00C0 1306 00390 bcf PORTB, P_CLK ; clock goes low 00C1 1086 00391 bcf PORTB, P_CMD 00C2 28C5 00392 goto psr3 00393 00C3 1306 00394 psr2 bcf PORTB, P_CLK ; clock goes low 00C4 1486 00395 bsf PORTB, P_CMD 00396 00C5 0C06 00397 psr3 rrf PORTB, W ; shift P_DAT => STATUS:C 00C6 0CAC 00398 rrf RDATA, F 00C7 1706 00399 bsf PORTB, P_CLK ; clock goes high 00C8 0000 00400 nop 00C9 0BA4 00401 decfsz VAR1, F 00CA 28BD 00402 goto psr1 00403 MPASM 02.20.04 Intermediate PS_DDR.ASM 4-10-1999 16:43:06 PAGE 6 bmcnv LOC OBJECT CODE LINE SOURCE TEXT VALUE 00CB 0008 00404 return 00405 00406 ; 00407 ; wait ACK with timeout 100us 00408 ; variable: VAR1 00CC 30C8 00409 PSwAck movlw 200 ; wait ACK with timeout 100us 00CD 00A4 00410 movwf VAR1 00CE 1F86 00411 psw1 btfss PORTB, P_ACK 00CF 3400 00412 retlw 0 ; ACK received, return 0 00413 00D0 0BA4 00414 decfsz VAR1, F 00D1 28CE 00415 goto psw1 00416 00D2 34FF 00417 retlw 0xff ; ACK no reaction, return -1 00418 00419 ; 00420 ; send MIDI port 00421 ; output W with 31.25Kbps, S8N1 00D3 00AB 00422 MIDIout movwf SDATA 00D4 01AE 00423 clrf LEDTMR ; light up LED 00D5 1105 00424 bcf PORTA, P_LED 00D6 3008 00425 movlw 8 00D7 00A4 00426 movwf VAR1 00427 00D8 1185 00428 bcf PORTA, P_MIN ; start bit 00D9 3011 00429 movlw 17 00DA 20F3 00430 call wait_W 00DB 0000 00431 nop 00DC 0000 00432 nop 00433 00DD 0CAB 00434 out1 rrf SDATA, F 00DE 1803 00435 btfsc STATUS, C 00DF 28E3 00436 goto out2 00437 00E0 0000 00438 nop 00E1 1185 00439 bcf PORTA, P_MIN 00E2 28E6 00440 goto out3 00441 00E3 1585 00442 out2 bsf PORTA, P_MIN 00E4 0000 00443 nop 00E5 0000 00444 nop 00E6 3010 00445 out3 movlw 16 00E7 20F3 00446 call wait_W 00E8 0BA4 00447 decfsz VAR1, F 00E9 28DD 00448 goto out1 00449 00EA 0000 00450 nop 00EB 0000 00451 nop 00EC 0000 00452 nop 00ED 0000 00453 nop 00EE 0000 00454 nop 00EF 1585 00455 bsf PORTA, P_MIN ; stop bit 00F0 3013 00456 movlw 19 00F1 20F3 00457 call wait_W 00458 00F2 0008 00459 return 00460 00461 ; 00462 ; wait loop (W) 00463 ; cyc = 3W + 4 00F3 00AA 00464 wait_W movwf V_WAIT 00F4 0BAA 00465 wait1 decfsz V_WAIT, F 00F5 28F4 00466 goto wait1 00467 00F6 0008 00468 return 00469 00470 ; 00471 ; wait @128us 00472 ; 00F7 00AA 00473 w128 movwf V_WAIT 00F8 09AA 00474 comf V_WAIT, F 00F9 0A2A 00475 incf V_WAIT, W ; TMR0 = - W 00FA 0081 00476 movwf TMR0 00FB 0801 00477 w128a movfw TMR0 ; TMR0 @128us 00FC 1D03 00478 btfss STATUS, Z 00FD 28FB 00479 goto w128a 00FE 0008 00480 return 00481 00482 end MPASM 02.20.04 Intermediate PS_DDR.ASM 4-10-1999 16:43:06 PAGE 7 bmcnv SYMBOL TABLE LABEL VALUE BS ( 1 << x ) C 00000000 DC 00000001 EEADR 00000009 EECON1 00000088 EECON2 00000089 EEDATA 00000008 EEIE 00000006 EEIF 00000004 F 00000001 FSR 00000004 GIE 00000007 GetPSXC 0000009D INDF 00000000 INTCON 0000000B INTE 00000004 INTEDG 00000006 INTF 00000001 IRP 00000007 KEYDELAY 32 LEDTMR 0000002E LED_DELAY 32 MIDIout 000000D3 MODE_F 0000002D M_1PCON 0 M_2PCON 1 M_TURNED 0 NOT_PD 00000003 NOT_RBPU 00000007 NOT_TO 00000004 ONTIMR_1P 00000014 ONTIMR_2P 0000001C OPTION_REG 00000081 PCL 00000002 PCLATH 0000000A PORTA 00000005 PORTB 00000006 PS0 00000000 PS1 00000001 PS2 00000002 PSA 00000003 PSP0_DOWN 6 PSP0_LEFT 7 PSP0_RIGHT 5 PSP0_SELECT 0 PSP0_START 3 PSP0_UP 4 PSP1_CIRCLE 5 PSP1_CROSS 6 PSP1_L1 2 PSP1_L2 0 PSP1_R1 3 PSP1_R2 1 PSP1_SQUARE 7 PSP1_TRIANG 4 PSX_DAT 0000000C PSrecv 000000BB PSwAck 000000CC P_ACK 7 P_CLK 6 P_CMD 1 P_DAT 0 P_LED 2 P_MIN 3 P_MODE0 2 P_MODE1 3 P_MOUT 0 P_SEL1 4 P_SEL2 5 RBIE 00000003 RBIF 00000000 RD 00000000 RDATA 0000002C RP0 00000005 RP1 00000006 RTCLK ( XTAL / 4 ) SDATA 0000002B STATUS 00000003 T0CS 00000005 T0IE 00000005 T0IF 00000002 T0SE 00000004 MPASM 02.20.04 Intermediate PS_DDR.ASM 4-10-1999 16:43:06 PAGE 8 bmcnv SYMBOL TABLE LABEL VALUE TMR0 00000001 TRISA 00000085 TRISB 00000086 VAR1 00000024 VAR2 00000025 VAR3 00000026 VAR4 00000027 VAR5 00000028 VAR6 00000029 V_WAIT 0000002A W 00000000 WR 00000001 WREN 00000002 WRERR 00000003 XTAL 8000000 Z 00000002 _CP_OFF 00003FFF _CP_ON 0000000F _HS_OSC 00003FFE _LP_OSC 00003FFC _PWRTE_OFF 00003FFF _PWRTE_ON 00003FF7 _RC_OSC 00003FFF _WDT_OFF 00003FFB _WDT_ON 00003FFF _XT_OSC 00003FFD __16F84 00000001 c2m0 00000087 c2m1 00000096 c2m1b 00000097 cnt2mid 0000007F d2m0 00000067 d2m1 00000074 d2m2 00000076 d2m3 00000077 dat2mid 00000047 gpc1 000000B0 ml1 00000018 ml1b 00000016 ml2 00000022 ml2b 00000029 ml3 0000002B ml4 00000035 ml9 00000045 mloop 0000000F out1 000000DD out2 000000E3 out3 000000E6 psr1 000000BD psr2 000000C3 psr3 000000C5 psw1 000000CE start 00000001 w128 000000F7 w128a 000000FB wait1 000000F4 wait_W 000000F3 MEMORY USAGE MAP ('X' = Used, '-' = Unused) 0000 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0040 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0080 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 00C0 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXX- 2000 : -------X-------- ---------------- ---------------- ---------------- All other memory blocks unused. Program Memory Words Used: 255 Program Memory Words Free: 769 Errors : 0 Warnings : 1 reported, 0 suppressed Messages : 3 reported, 0 suppressed