MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 1 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00001 ; list p=12f683,b=4,n=0 ; declare processor, tabs, and lines/page 00002 00003 ;********************************************************************** 00004 ; Copyright (C) 2005,2006,2007,2008 Dwayne Forsyth 00005 ; 00006 ; This program is free software; you can redistribute it and/or 00007 ; modify it under the terms of the GNU General Public License 00008 ; as published by the Free Software Foundation; either version 2 00009 ; of the License, or (at your option) any later version. 00010 ; 00011 ; This program is distributed in the hope that it will be useful, 00012 ; but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00014 ; GNU General Public License for more details. 00015 ; 00016 ; You should have received a copy of the GNU General Public License 00017 ; along with this program; if not, write to the 00018 ; 00019 ; Free Software Foundation, Inc. 00020 ; 51 Franklin Street, Fifth Floor 00021 ; Boston, MA 02110-1301, USA. 00022 ; 00023 ;********************************************************************** 00024 ; 00025 ; This is a merger of a number of Blinkie programs I created for different 00026 ; www.2DKits.com boards. The current goal of this code is to support all 00027 ; the 12F683 based boards, and then eventually adding of the 16F688 boards. 00028 ; 00029 ; 4RBG /w common anode (ufo and clear 5mm) .... Working 00030 ; 4RBG /w common Cathode (milk 5mm) ........... Working 00031 ; 6 BI /w bi-color LEDs. ...................... Working 00032 ; - update all for new mult patterns in eeprom logic. 00033 ; 6 BI /w mono LEDs. .......................... Working 00034 ; - want to add brightness patterns 00035 ; - update all for new mult patterns in eeprom logic. 00036 ; badge 6 bi-color plus 1 mono, no IR ......... Working 00037 ; - update all for new mult patterns in eeprom logic. 00038 ; badge 7 LED /w mono LEDs, no IR ............. Working 00039 ; - update all for new mult patterns in eeprom logic. 00040 ; 19 LED Stick ................................ Working 00041 ; 19 circle /w mono............................ Working 00042 ; - update to move Led regs to page 2 like RGB Stick, re move 4 bit hack. 00043 ; 19 circle /w bi-color........................ Working 00044 ; - update to move Led regs to page 2 like RGB Stick, re move 4 bit hack. 00045 ; RGB Stick ................................... Draft 00046 ; 3x3 /w mono ................................. Need 00047 ; 3x3 /w bi-color ............................. Draft 00048 ; 00049 ; Dwayne Forsyth wrote the original code, Dwayne pulled a number of updates, 00050 ; code cleanup, and patterns from Dave Holle. 00051 ; MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 2 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00052 ;********************************************************************** 00053 ; 00054 ; Filename: generic_683.asm 00055 ; Date: 04/05/2007 00056 ; 00057 ; Author: Dwayne Forsyth 00058 ; email: Dwayne@2DKits.com 00059 ; Company: www.2DKits.com 00060 ; 502 Rue Orleanais 00061 ; Deer Park, IL 60010 00062 ; 00063 ; Help from: Dave Holle 00064 ; 7N204 Parkside Ave 00065 ; Itasca, IL 60143 00066 ; 00067 ;********************************************************************** 00068 00069 errorlevel -302 ; suppress banking messages 2007 30C4 00070 __CONFIG _CP_OFF & _CPD_OFF & _BOD_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT & _MCLRE_OFF & _ FCMEN_OFF & _IESO_OFF 00071 00072 ; '__CONFIG' directive is used to embed configuration data within .asm file. 00073 ; The labels following the directive are located in the respective .inc file. 00074 ; See respective data sheet for additional information on configuration word. 00075 00076 ; this SIM_DEBUG disables the buttons and IR inputs so the code will run the patterns. 00077 ; #define SIM_DEBUG 00078 00079 ;********************************* 00080 ; 4RBG /w common anode (ufo and clear 5mm) 00081 ;********************************* 00082 ;#define RGB4 00083 ;#define PATTERN1 00084 ;#define PATTERN2 00085 ;#define PATTERN3 00086 ;#define PATTERN4 00087 ;#define PATTERN20 00088 ;#define DISPLAY_1BIT_C 00089 ;#define DISPLAY_2BIT_C 00090 ;#define ENABLE_IR 00091 ;#include ; processor specific variable definitions 00092 ; LIST P=PIC12F683 00093 ;NUM_TAB equ d'14' ;highest pattern table number 00094 00095 ;********************************* 00096 ; 4RBG /w common Cathode (milk 5mm and 10mm) 00097 ;********************************* 00098 ;#define RGB4 00099 ;#define Common_Cathode 00100 ;#define PATTERN1 00101 ;#define PATTERN2 00102 ;#define PATTERN3 00103 ;#define PATTERN4 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 3 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00104 ;#define PATTERN20 00105 ;#define DISPLAY_1BIT_C 00106 ;#define DISPLAY_2BIT_C 00107 ;#define ENABLE_IR 00108 ;#include ; processor specific variable definitions 00109 ; LIST P=PIC12F683 00110 ; NUM_TAB equ d'14' ;highest pattern table number 00111 00112 ;********************************* 00113 ; 6 BI /w bi-color LEDs. 00114 ;********************************* 00115 ;#define BI6 00116 ;#define BIN2LED 00117 ;#define PATTERN1 00118 ;#define PATTERN3 00119 ;#define DISPLAY_1BIT_C 00120 ;#define DISPLAY_2BIT_C 00121 ;#define ENABLE_IR 00122 ;#include ; processor specific variable definitions 00123 ; LIST P=PIC12F683 00124 ; NUM_TAB equ d'14' ;highest pattern table number 00125 00126 ;********************************* 00127 ; 6 BI /w mono LEDs. 00128 ;********************************* 00129 ;#define BI6 00130 ;#define MONO 00131 ;#define FLIPBYTE 00132 ;#define PATTERN5 00133 ;#define PATTERN11 00134 ;#define DISPLAY_1BIT_A 00135 ;#define DISPLAY_2BIT_A 00136 ;#define ENABLE_IR 00137 ;#include ; processor specific variable definitions 00138 ; LIST P=PIC12F683 00139 ;NUM_TAB equ d'17' ;highest pattern table number 00140 00141 ;********************************* 00142 ; badge 6 bi-color plus 1 mono LEDs. 00143 ;********************************* 00144 ;#define BI6 00145 ;#define BIN2LED 00146 ;#define PATTERN10 00147 ;#define PATTERN3 00148 ;#define BADGE 00149 ;#define DISPLAY_1BIT_C 00150 ;#define DISPLAY_2BIT_C 00151 ;#include ; processor specific variable definitions 00152 ; LIST P=PIC12F683 00153 ;NUM_TAB equ d'14' ;highest pattern table number 00154 00155 ;********************************* 00156 ; badge 6 mono LEDs. MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 4 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00157 ;********************************* 00158 ;#define BI6 00159 ;#define MONO 00160 ;#define BADGE 00161 ;#define PATTERN5 00162 ;#define PATTERN11 00163 ;#define FLIPBYTE 00164 ;#define DISPLAY_1BIT_A 00165 ;#define DISPLAY_2BIT_A 00166 ;#include ; processor specific variable definitions 00167 ; LIST P=PIC12F683 00168 ;NUM_TAB equ d'19' ;highest pattern table number 00169 00170 ;#define DREW ; special pattern in EEProm for Drew 00171 00172 ;********************************* 00173 ; 19 LED Stick 00174 ;********************************* 00175 ;#define S19 00176 ;#define PATTERN6 00177 ;#define PATTERN7 00178 ;#define PATTERN8 00179 ;#define FLIPBYTE 00180 ;#define DISPLAY_1BIT_D 00181 ;#define ENABLE_IR 00182 ;#include ; processor specific variable definitions 00183 ; LIST P=PIC12F683 00184 ;NUM_TAB equ d'23' ;highest pattern table number 00185 00186 ;********************************* 00187 ; 19 Circle bicolor 00188 ;********************************* 00189 ;#define C19 00190 ;#define PATTERN9 00191 ;#define PATTERN12 00192 ;#define PATTERN13 00193 ;#define BIN2LED 00194 ;#define RANDOM 00195 ;#define DEDICATED_BUTTON 00196 ;#define DISPLAY_1BIT_B 00197 ;#define DISPLAY_2BIT_D 00198 ;#define ENABLE_IR 00199 ;#include ; processor specific variable definitions 00200 ; LIST P=PIC16F688 00201 ;NUM_TAB equ d'25' ;highest pattern table number 00202 00203 ;********************************* 00204 ; 19 Circle mono 00205 ;********************************* 00206 ;#define C19 00207 ;#define MONO 00208 ;#define PATTERN9 00209 ;#define PATTERN12 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 5 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00210 ;#define PATTERN14 00211 ;#define RANDOM 00212 ;#define BIN2LED 00213 ;#define DEDICATED_BUTTON 00214 ;#define DISPLAY_1BIT_B 00215 ;#define DISPLAY_2BIT_E 00216 ;#define ENABLE_IR 00217 ;#define STROBE_C0 00218 ;#define STROBE_C1 00219 ;#include ; processor specific variable definitions 00220 ; LIST P=PIC16F688 00221 ;NUM_TAB equ d'25' ;highest pattern table number 00222 00223 ;********************************* 00224 ; 3x3 matrix Bi-color 00225 ;********************************* 00226 ;#define M3X3 00227 ;#define PATTERN6 00228 ;#define PATTERN19 00229 ;#define PATTERN21 00230 ;#define BIN2LED 00231 ;#define DISPLAY_1BIT_F 00232 ;#define ENABLE_IR 00233 ;#define MULTIBUTTON 00234 ;#define RANDOM 00235 ;#include ; processor specific variable definitions 00236 ; LIST P=PIC12F683 00237 ;NUM_TAB equ d'14' ;highest pattern table number 00238 00239 ;********************************* 00240 ; 3x3 matrix mono 00241 ;********************************* 00242 #define M3X3 00243 #define MONO 00244 #define PATTERN6 00245 #define PATTERN19 00246 #define PATTERN21 00247 #define BIN2LED 00248 #define DISPLAY_1BIT_F 00249 #define ENABLE_IR 00250 #define MULTIBUTTON 00251 #define RANDOM 00252 #include ; processor specific variable definitions 00001 LIST 00002 ; P12F683.INC Standard Header File, Version 1.00 Microchip Technology, Inc. 00348 LIST 00253 LIST P=PIC12F683 0000000E 00254 NUM_TAB equ d'14' ;highest pattern table number 00255 00256 ;********************************* 00257 ; RGB Stick 00258 ;********************************* 00259 ;#define SRGB MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 6 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00260 ;#define PATTERN15 00261 ;#define PATTERN16 00262 ;#define PATTERN17 00263 ;#define PATTERN18 00264 ;#define DEDICATED_BUTTON 00265 ;#define DEDICATED_BUTTON2 00266 ;#define DISPLAY_1BIT_E 00267 ;#define ENABLE_IR 00268 ;#define STROBE_C0 00269 ;#define STROBE_C1 00270 ;#define STROBE_C2 00271 ;#define STROBE_C3 00272 ;#define STROBE_C4 00273 ;#define STROBE_C5 00274 ;#include ; processor specific variable definitions 00275 ; LIST P=PIC16F688 00276 ;NUM_TAB equ d'15' ;highest pattern table number 00277 00278 00279 ;********************************************************************** 00280 ; Macros 00281 ;********************************************************************** 00282 ; bank select macros 00283 setbank0 macro 00284 bcf STATUS,RP0 ; select bank 0 00285 bcf STATUS,RP1 00286 endm 00287 00288 setbank1 macro 00289 bsf STATUS,RP0 ; select bank 1 00290 bcf STATUS,RP1 00291 endm 00292 00000021 00293 mem = 21 000000A0 00294 mem3 = 0xa0 00295 00296 var macro name 00297 name equ mem 00298 mem = mem + 1 00299 if (mem >= mem2) 00300 error 'Too much var space used' 00301 endif 00302 endm 00303 00304 dupvar macro name, name2 00305 name equ name2 00306 endm 00307 0000007F 00308 mem2 = 0x7F 00309 var_all_bank macro name 00310 name equ mem2 00311 mem2 = mem2 - 1 00312 if (mem >= mem2) MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 7 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00313 error 'Too much var space used' 00314 endm 00315 000000A0 00316 mem3 = 0xa0 00317 var_bank2 macro name 00318 name equ mem3 00319 mem3 = mem3 + 1 00320 if (mem3 >= 0xef) 00321 error 'Too much var space used' 00322 endm 00323 00000000 00324 patternc = 0 00325 start_pattern macro typem, delaym 00326 noexpand 00327 table#v(patternc) 00328 if (typem == 1) || (typem == 6) || (typem == 0x15) 00329 leng = (endpat#v(patternc)-$-3)/3 ;tbltype1,speed,length 00330 else 00331 if (typem == 3) || (typem == 0x0b) || (typem == 0x10) || (typem == 0x13) || (typem == 0x14) 00332 leng = (endpat#v(patternc)-$-3)/2 ;tbltype1,speed,length 00333 else 00334 if (typem == 9) || (typem == 0x0e) 00335 leng =(endpat#v(patternc)-$-3)/5 ;tbltype1,speed,length 00336 else 00337 if (typem == 0x0a) 00338 leng =(endpat#v(patternc)-$-3)/4 ;tbltype1,speed,length 00339 else 00340 if (typem == 0x0d) 00341 leng =(endpat#v(patternc)-$-3)/(9+1) ;tbltype1,speed,length 00342 else 00343 if (typem == 0x0f) || (typem == 0x12) 00344 leng =(endpat#v(patternc)-$-3)/(6) ;tbltype1,speed,length 00345 else 00346 if (typem == 0x11) 00347 leng = (endpat#v(patternc)-$-3)/(9+4) ;tbltype1,speed,length 00348 else 00349 leng =(endpat#v(patternc)-$-3) 00350 endif 00351 endif 00352 endif 00353 endif 00354 endif 00355 endif 00356 endif 00357 expand 00358 if ($ < 0x2100) 00359 dt typem,delaym,(leng) 00360 else 00361 de typem,delaym,(leng) 00362 endif 00363 endm 00364 00365 storedata macro stuff MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 8 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00366 if ($ < 0x2100) 00367 dt stuff 00368 else 00369 de stuff 00370 endif 00371 endm 00372 00373 end_pattern macro 00374 endpat#v(patternc) 00375 patternc = patternc + 1 00376 endm 00377 00378 mult_nop macro nup_count 00379 local i = nup_count 00380 while i > 3 00381 call Lcontinue ;4 cycles 00382 i -= 4 00383 endw 00384 while i > 1 00385 goto $+1 ;2 cycles 00386 i -= 2 00387 endw 00388 if i > 0 00389 nop ;1 cycle 00390 endif 00391 endm 00392 00393 LedOut macro word,reg_dir,port 00394 movfw TMR0 00395 subwf word,w 00396 btfss STATUS,C 00397 bsf reg_dir, port 00398 endm 00399 00400 LedOutInd macro word,reg_dir,port 00401 movlw word 00402 movwf FSR ; set indirect pointer to word 00403 movfw TMR0 00404 subwf INDF,w 00405 btfss STATUS,C 00406 bsf reg_dir, port 00407 endm 00408 00409 LedOutL macro word,reg_dir,port 00410 swapf word,w 00411 movwf temp4 00412 movfw TMR0 00413 subwf temp4,w 00414 btfss STATUS,C 00415 bsf reg_dir, port 00416 endm 00417 00418 LedOutH macro word,reg_dir,port MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 9 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00419 nop 00420 nop 00421 movfw TMR0 00422 subwf word,w 00423 btfss STATUS,C 00424 bsf reg_dir, port 00425 endm 00426 00427 state_tbl macro num,zero,one,flag 00428 Lstate#v(num) 00429 #ifndef MULTIBUTTON 00430 if (flag == 0) 00431 clrf button 00432 movlw 0x30 00433 movwf butcount 00434 endif 00435 if (flag == 1) 00436 bsf button,0 00437 endif 00438 #endif 00439 btfsc IR_in,0 00440 goto Lstate#v(num)a 00441 00442 movlw zero 00443 movwf instate 00444 00445 goto Lcontinue 00446 00447 Lstate#v(num)a 00448 movlw one 00449 movwf instate 00450 00451 goto Lcontinue 00452 endm 00453 00454 state2_tbl macro num, name, offset 00455 Lstate#v(num) 00456 ; save the 1st half of word 00457 movf IR_in,w ; save 1st half 00458 movwf IR_lhalf 00459 incf instate,f 00460 00461 goto Lcontinue 00462 00463 Lstate#v(num+1) 00464 ; save the 2nd half of word 00465 ; check for protocal error should get 01 or 10 00466 movf IR_lhalf,w 00467 xorwf IR_in,w 00468 btfss STATUS,Z 00469 goto Lstate#v(num+1)a 00470 clrf instate ; error state = zero 00471 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 10 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00472 goto Lcontinue 00473 00474 ; set the correct bit in output vars. 00475 Lstate#v(num+1)a 00476 btfsc IR_in,0 00477 bcf name,offset 00478 btfss IR_in,0 00479 bsf name,offset 00480 00481 incf instate,f 00482 goto Lcontinue 00483 endm 00484 00485 entry macro a0,a1,a2 00486 dt a0,a1,a2 00487 endm 00488 00489 tbltype1 macro speed,length 00490 if (length > 2) && (length < d'256') 00491 dt 0x01,speed,length 00492 else 00493 error 'pattern length must be > 2 and < 256' 00494 endif 00495 endm 00496 00497 make_mtab macro numtab 00498 local i = 0 00499 while i <= numtab 00500 dt HIGH table#v(i), LOW table#v(i) 00501 i += 1 00502 endw 00503 endm 00504 00505 make_state_jump_table macro max_state 00506 local i = 0 00507 while i <= max_state 00508 dt HIGH Lstate#v(i), LOW Lstate#v(i) 00509 i += 1 00510 endw 00511 endm 00512 00513 00514 #ifdef __12F683 00000005 00515 PORTA EQU GPIO 00000085 00516 TRISA EQU TRISIO 00000007 00517 NOT_RAPU EQU NOT_GPPU 00518 #endif 00519 00520 00521 ; ++-------- A7 A6 unimplemented (0) 00522 ; || +------ A4 IR LED output (0) 00523 ; || |+----- A3 detector/button input (1) 00524 ; || || MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 11 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00525 ; b'00101111' ;set LED matrix pins to input (tri-stated) 00526 ; | ||| 00527 ; +--+++-- LED matrix on A5 A2 A1 A0 (1) 00528 00529 ;********************************************************************** 0000 00530 ORG 0x000 ; processor reset vector 00531 ;********************************************************************** 0000 2D71 00532 goto main ; go to beginning of program 00533 00534 ;********************************************************************** 0004 00535 ORG 0x004 ; interrupt vector location 00536 ;********************************************************************** 00537 var_all_bank w_temp ; variable used for context saving 0000007F M w_temp equ mem2 0000007E M mem2 = mem2 - 1 M if (mem >= mem2) M error 'Too much var space used' 00538 var_all_bank status_temp ; variable used for context saving 0000007E M status_temp equ mem2 0000007D M mem2 = mem2 - 1 M if (mem >= mem2) M error 'Too much var space used' 00539 00540 #ifdef __16F688 00541 var_all_bank fsr_save 00542 var_all_bank pclath_temp 00543 #endif 00544 00545 #ifdef SIM_DEBUG 00546 var T_PORTA 00547 #endif 00548 00549 var nextf ; flags for timing loops 00000021 M nextf equ mem 00000022 M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 00550 ; bit 0 is one display cycle (890 usec) 00551 ; bit 1 is about 1 minute 00552 var dcycle ; stobe counter [0-3] 00000022 M dcycle equ mem 00000023 M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 00553 var count1 ; lower bit counter 00000023 M count1 equ mem 00000024 M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 00554 var count2 ; higher bit counter. MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 12 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00000024 M count2 equ mem 00000025 M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 00555 00556 #ifdef __12F683 0004 00FF 00557 movwf w_temp ; copy W to TEMP register 0005 0E03 00558 swapf STATUS,w ; Swap status to be saved into W 0006 0183 00559 clrf STATUS ; Bank 0 0007 00FE 00560 movwf status_temp ; save off contents of PCLATH register 00561 #else 00562 movwf w_temp ; save off current W register contents 00563 movf STATUS,w ; move status register into W register 00564 movwf status_temp ; save off contents of STATUS register 00565 movf PCLATH,w ; move pclath register into W register 00566 movwf pclath_temp ; save off contents of PCLATH register 00567 movf FSR,w 00568 movwf fsr_save 00569 #endif 00570 0008 00571 here 00572 setbank0 0008 1283 M bcf STATUS,RP0 ; select bank 0 0009 1303 M bcf STATUS,RP1 000A 3000 008A 00573 pageselw here 00574 ; 00575 ; set tick interupt to 889ms for IR RC5 protocal 1/2 digit. 00576 ; an Interupt every 889us /w 8mhz internal osc 00577 ; 00578 00579 #define TICK_VALUE D'35' 00580 000C 3023 00581 movlw TICK_VALUE 000D 0081 00582 movwf TMR0 00583 ; 00584 ; increment the stobe and duration counters 00585 ; 00586 000E 0AA2 00587 incf dcycle,f 00588 00589 #ifdef RGB4 00590 movlw 0x04 00591 #else 00592 #ifdef BI6 00593 movlw 0x04 00594 #else 00595 #ifdef S19 00596 movlw 0x05 00597 #else 00598 #ifdef C19 00599 movlw 0x07 00600 #else MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 13 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00601 #ifdef M3X3 000F 3005 00602 movlw 0x05 00603 #else 00604 #ifdef SRGB 00605 movlw 0x07 00606 #else 00607 error "unknown board strobe type" 00608 #endif 00609 #endif 00610 #endif 00611 #endif 00612 #endif 00613 #endif 00614 0010 0222 00615 subwf dcycle,w 0011 1803 00616 btfsc STATUS,C 0012 01A2 00617 clrf dcycle 00618 0013 1421 00619 bsf nextf,0 00620 0014 0FA3 00621 incfsz count1,f 0015 2819 00622 goto skip1 00623 0016 0FA4 00624 incfsz count2,f 0017 2819 00625 goto skip1 00626 0018 14A1 00627 bsf nextf,1 00628 0019 00629 skip1 00630 0019 0857 00631 movf scount,w ; F22 001A 3E00 00632 addlw 0 ; F23 001B 1903 00633 btfsc STATUS,Z ; F24 001C 2838 00634 goto send_nothing ; F25 00635 001D 1C48 00636 btfss tx_1,0 ; F26 001E 2836 00637 goto send_zero ; F27 00638 00639 ;-------------------------------------------------------------------------------------- 001F 00640 send_one ; we are slaming the 36K IR siginal, its like a busy wait! 00641 ;-------------------------------------------------------------------------------------- 00642 var repeat 00000025 M repeat equ mem 00000026 M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 00643 #ifdef S19 00644 setbank1 00645 movlw b'00011010' ;set A0 & A5 led to output 00646 movwf TRISA 00647 setbank0 00648 #define IRBIT 0 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 14 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00649 #else 00650 #ifdef M3X3 00651 setbank1 001F 1683 M bsf STATUS,RP0 ; select bank 1 0020 1303 M bcf STATUS,RP1 0021 3039 00652 movlw b'00111001' ;set A1 & A2 led to output 0022 0085 00653 movwf TRISA 00654 setbank0 0023 1283 M bcf STATUS,RP0 ; select bank 0 0024 1303 M bcf STATUS,RP1 00655 #define IRBIT 1 00656 #else 00657 #ifdef SRGB 00658 #define IRBIT 1 00659 #else 00660 #define IRBIT 4 00661 #endif 00662 #endif 00663 #endif 00664 0025 1485 00665 bsf PORTA,IRBIT ; A01 00666 0026 22C7 00667 call get_next_tx_bit ; 2 + 11 cycles A04-A16 00668 ; mult_nop d'9' ; A17-A25 0027 3001 00669 movlw 01h 0028 22D1 00670 call qdelay ; 6 + (1 * 3) = 9 ; A17-A25 0029 0000 00671 nop 00672 002A 301E 00673 movlw 0x1E ; C26 (23) 002B 00A5 00674 movwf repeat ; C27 002C 00675 repeat_loop 002C 1085 00676 bcf PORTA,IRBIT ; D01 00677 00678 ; mult_nop d'26' ; D02-D27 002D 3007 00679 movlw 07h 002E 22D1 00680 call qdelay ; 6 + (7 * 3) = 27 ; D02-D27 00681 002F 1485 00682 bsf PORTA,IRBIT ; E01 (27) 00683 00684 ; mult_nop d'23' ; E02-E24 0030 3006 00685 movlw 06h ; 6+(6 * 3) = 22 ; E02-E24 0031 22D1 00686 call qdelay 00687 0032 0BA5 00688 decfsz repeat,f ; E25 (24) 0033 282C 00689 goto repeat_loop ; E26/E27 00690 0034 1085 00691 bcf PORTA,IRBIT 0035 2850 00692 goto exit_tx 00693 00694 ;-------------------------------------------------------------------------------------- 0036 00695 send_zero ; we are going to release all the CPU time to the main line for display. 00696 ;-------------------------------------------------------------------------------------- 00697 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 15 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0036 22C7 00698 call get_next_tx_bit ; 2 + 11 cycles A04-A16 0037 2839 00699 goto drive_main_leds 00700 00701 ;-------------------------------------------------------------------------------------- 0038 00702 send_nothing ; Drive the main LEDs. 00703 ;-------------------------------------------------------------------------------------- 00704 0038 22BC 00705 call read_ir_in 00706 #ifdef DEDICATED_BUTTON 00707 call read_button_in 00708 #endif 00709 ; goto drive_main_leds 00710 00711 ;-------------------------------------------------------------------------------------- 0039 00712 drive_main_leds ; Drive the main LEDs. 00713 ;-------------------------------------------------------------------------------------- 00714 var fcount 00000026 M fcount equ mem 00000027 M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 00715 #ifndef S19 00716 #ifndef C19 00717 #ifndef SRGB 00718 #ifndef M3X3 00719 var Ar_reg 00720 var Ag_reg 00721 var Ab_reg 00722 var Br_reg 00723 var Bg_reg 00724 var Bb_reg 00725 var Cr_reg 00726 var Cg_reg 00727 var Cb_reg 00728 var Dr_reg 00729 var Dg_reg 00730 var Db_reg 00731 #endif 00732 #endif 00733 #endif 00734 #endif 00735 00736 #ifdef BADGE 00737 var Center_reg 00738 #endif 00739 #ifdef M3X3 00740 var A0_A1_reg 00000027 M A0_A1_reg equ mem 00000028 M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 16 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00741 var A0_A2_reg 00000028 M A0_A2_reg equ mem 00000029 M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 00742 var A0_A4_reg 00000029 M A0_A4_reg equ mem 0000002A M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 00743 var A0_A5_reg 0000002A M A0_A5_reg equ mem 0000002B M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 00744 var A1_A0_reg 0000002B M A1_A0_reg equ mem 0000002C M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 00745 var A1_A2_reg 0000002C M A1_A2_reg equ mem 0000002D M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 00746 var A1_A4_reg 0000002D M A1_A4_reg equ mem 0000002E M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 00747 var A1_A5_reg 0000002E M A1_A5_reg equ mem 0000002F M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 00748 var A2_A0_reg 0000002F M A2_A0_reg equ mem 00000030 M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 00749 var A2_A1_reg 00000030 M A2_A1_reg equ mem 00000031 M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 17 LOC OBJECT CODE LINE SOURCE TEXT VALUE M endif 00750 var A2_A4_reg 00000031 M A2_A4_reg equ mem 00000032 M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 00751 var A2_A5_reg 00000032 M A2_A5_reg equ mem 00000033 M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 00752 var A4_A0_reg 00000033 M A4_A0_reg equ mem 00000034 M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 00753 var A4_A1_reg 00000034 M A4_A1_reg equ mem 00000035 M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 00754 var A4_A2_reg 00000035 M A4_A2_reg equ mem 00000036 M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 00755 var A4_A5_reg 00000036 M A4_A5_reg equ mem 00000037 M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 00756 var A5_A0_reg 00000037 M A5_A0_reg equ mem 00000038 M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 00757 var A5_A1_reg 00000038 M A5_A1_reg equ mem 00000039 M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 00758 var A5_A2_reg 00000039 M A5_A2_reg equ mem 0000003A M mem = mem + 1 M if (mem >= mem2) MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 18 LOC OBJECT CODE LINE SOURCE TEXT VALUE M error 'Too much var space used' M endif 00759 var A5_A4_reg 0000003A M A5_A4_reg equ mem 0000003B M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 00760 #endif 00761 #ifdef S19 00762 var A0_A1_reg 00763 var A0_A2_reg 00764 var A0_A4_reg 00765 var A0_A5_reg 00766 var A1_A0_reg 00767 var A1_A2_reg 00768 var A1_A4_reg 00769 var A1_A5_reg 00770 var A2_A0_reg 00771 var A2_A1_reg 00772 var A2_A4_reg 00773 var A2_A5_reg 00774 var A4_A0_reg 00775 var A4_A1_reg 00776 var A4_A2_reg 00777 var A4_A5_reg 00778 var A5_A0_reg 00779 var A5_A1_reg 00780 var A5_A2_reg 00781 var A5_A4_reg 00782 #endif 00783 #ifdef C19 00784 var temp4 00785 var A0_A1_reg 00786 var A0_A2_reg 00787 var A0_C0_reg 00788 var A0_C1_reg 00789 var A0_C2_reg 00790 var A0_C4_reg 00791 var A1_A2_reg 00792 var A1_C0_reg 00793 var A1_C1_reg 00794 var A1_C2_reg 00795 var A1_C4_reg 00796 var A2_C0_reg 00797 var A2_C1_reg 00798 var A2_C2_reg 00799 var A2_C4_reg 00800 var C0_C1_reg 00801 var C0_C2_reg 00802 var C0_C4_reg 00803 var C1_C2_reg 00804 var C1_C4_reg MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 19 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00805 var C2_C4_reg 00806 #endif 00807 #ifdef SRGB 00808 ; 00809 ; The shifter pattern needs the colored LEDs defined sequentially 00810 ; 00811 var_bank2 C5_C3_reg ; 01 R 00812 var_bank2 C2_C3_reg ; 02 R 00813 var_bank2 C0_C4_reg ; 03 R 00814 var_bank2 C5_C4_reg ; 04 R 00815 var_bank2 C3_C5_reg ; 05 R 00816 var_bank2 C4_C5_reg ; 06 R 00817 var_bank2 A2_C0_reg ; 07 R 00818 var_bank2 C3_C0_reg ; 08 R 00819 var_bank2 C0_A2_reg ; 09 R 00820 var_bank2 C3_A2_reg ; 10 R 00821 var_bank2 A2_C2_reg ; 11 R 00822 var_bank2 C3_C2_reg ; 12 R 00823 var_bank2 A2_C1_reg ; 13 R 00824 var_bank2 C3_C1_reg ; 14 R 00825 00826 var_bank2 A2_C3_reg ; 01 G 00827 var_bank2 C0_C3_reg ; 02 G 00828 var_bank2 A2_C4_reg ; 03 G 00829 var_bank2 C3_C4_reg ; 04 G 00830 var_bank2 C0_C5_reg ; 05 G 00831 var_bank2 A2_C5_reg ; 06 G 00832 var_bank2 C4_C0_reg ; 07 G 00833 var_bank2 C5_C0_reg ; 08 G 00834 var_bank2 C4_A2_reg ; 09 G 00835 var_bank2 C5_A2_reg ; 10 G 00836 var_bank2 C4_C2_reg ; 11 G 00837 var_bank2 C5_C2_reg ; 12 G 00838 var_bank2 C4_C1_reg ; 13 G 00839 var_bank2 C5_C1_reg ; 14 G 00840 00841 var_bank2 C1_C3_reg ; 01 B ? 00842 var_bank2 C4_C3_reg 00843 var_bank2 C2_C4_reg ; 03 B 00844 var_bank2 C1_C4_reg ; 04 B 00845 var_bank2 C1_C5_reg ; 05 B 00846 var_bank2 C2_C5_reg ; 06 B 00847 var_bank2 C2_C0_reg ; 07 B 00848 var_bank2 C1_C0_reg ; 08 B 00849 var_bank2 C2_A2_reg ; 09 B 00850 var_bank2 C1_A2_reg ; 10 B 00851 var_bank2 C1_C2_reg ; 11 B 00852 var_bank2 C0_C2_reg 00853 var_bank2 C2_C1_reg ; 13 B ? 00854 var_bank2 C0_C1_reg ; 14 B 00855 00856 #endif 00857 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 20 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00858 00859 var_all_bank Ax_dir 0000007D M Ax_dir equ mem2 0000007C M mem2 = mem2 - 1 M if (mem >= mem2) M error 'Too much var space used' 00860 #ifdef C19 00861 var_all_bank Cx_dir 00862 #endif 00863 #ifdef SRGB 00864 var_all_bank Cx_dir 00865 #endif 00866 00867 ; 00868 ; This is the number of times the display logic should cycle before exiting. It's been hand timed from t he 00869 ; start of the interupt to the end to be around 800usec. This leaves 90 usec for the main loop. 00870 ; The 19 stick has an extra display line strobe cycle. 00871 ; 00872 #ifdef RGB4 00873 movlw 0x36 00874 #else 00875 #ifdef BI6 00876 movlw 0x3a 00877 #else 00878 #ifdef S19 00879 movlw 0x30 00880 #else 00881 #ifdef C19 00882 movlw 0x18 00883 #else 00884 #ifdef M3X3 0039 302E 00885 movlw 0x2E 00886 #else 00887 #ifdef SRGB 00888 movlw 0x18 00889 #else 00890 error "unknown board delaytimer" 00891 #endif 00892 #endif 00893 #endif 00894 #endif 00895 #endif 00896 #endif 00897 00898 00899 003A 00A6 00900 movwf fcount 00901 00902 #ifdef C19 00903 movlw b'00101000' ;set LED matrix pins to input (tri-stated) 00904 movwf Ax_dir 00905 clrf Cx_dir ;set LED matrix pins to input (tri-stated) MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 21 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00906 #else 00907 #ifdef SRGB 00908 movlw b'00111000' ;set LED matrix pins to input (tri-stated) 00909 movwf Ax_dir 00910 clrf Cx_dir ;set LED matrix pins to input (tri-stated) 00911 #else 003B 3008 00912 movlw b'00001000' ;set LED matrix pins to input (tri-stated) 003C 00FD 00913 movwf Ax_dir 00914 #endif 00915 #endif 00916 00917 ; clrf dcycle ; DDF 00918 003D 0822 00919 movf dcycle,w ; testing for 0 003E 1903 00920 btfsc STATUS,Z 003F 2058 00921 call display_cycle0 00922 0040 3001 00923 movlw 0x01 ; testing for 1 0041 0222 00924 subwf dcycle,w 0042 1903 00925 btfsc STATUS,Z 0043 2074 00926 call display_cycle1 00927 0044 3002 00928 movlw 0x02 ; testing for 2 0045 0222 00929 subwf dcycle,w 0046 1903 00930 btfsc STATUS,Z 0047 2090 00931 call display_cycle2 00932 0048 3003 00933 movlw 0x03 ; testing for 3 0049 0222 00934 subwf dcycle,w 004A 1903 00935 btfsc STATUS,Z 004B 20AC 00936 call display_cycle3 00937 00938 #ifdef S19 00939 movlw 0x04 ; testing for 4 00940 subwf dcycle,w 00941 btfsc STATUS,Z 00942 call display_cycle4 00943 #endif 00944 #ifdef M3X3 004C 3004 00945 movlw 0x04 ; testing for 4 004D 0222 00946 subwf dcycle,w 004E 1903 00947 btfsc STATUS,Z 004F 20C8 00948 call display_cycle4 00949 #endif 00950 #ifdef C19 00951 movlw 0x04 ; testing for 4 00952 subwf dcycle,w 00953 btfsc STATUS,Z 00954 call display_cycle4 00955 00956 movlw 0x05 ; testing for 5 00957 subwf dcycle,w 00958 btfsc STATUS,Z MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 22 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00959 call display_cycle5 00960 00961 movlw 0x06 ; testing for 6 00962 subwf dcycle,w 00963 btfsc STATUS,Z 00964 call display_cycle6 00965 00966 #endif 00967 #ifdef SRGB 00968 movlw 0x04 ; testing for 4 00969 subwf dcycle,w 00970 btfsc STATUS,Z 00971 call display_cycle4 00972 00973 movlw 0x05 ; testing for 5 00974 subwf dcycle,w 00975 btfsc STATUS,Z 00976 call display_cycle5 00977 00978 movlw 0x06 ; testing for 6 00979 subwf dcycle,w 00980 btfsc STATUS,Z 00981 call display_cycle6 00982 00983 #endif 00984 00985 ;-------------------------------------------------------------------------------------- 0050 00986 exit_tx 00987 ;-------------------------------------------------------------------------------------- 00988 00989 #ifdef MULTIBUTTON 0050 3037 00990 movlw b'00110111' 0051 0085 00991 movwf PORTA 00992 #else 00993 clrf PORTA ;DDF debug hack ; turn all the LED off 00994 #endif 00995 #ifndef __12F683 00996 clrf PORTC ;DDF debug hack ; turn all the LED off 00997 #endif 00998 00999 01000 ; clear timer0 interupt 0052 110B 01001 bcf INTCON,T0IF 01002 01003 ; restore state, return form interupt 01004 0053 01005 exit_int 01006 #ifdef __12F683 0053 0E7E 01007 swapf status_temp,w 0054 0083 01008 movwf STATUS 0055 0EFF 01009 swapf w_temp,f 0056 0E7F 01010 swapf w_temp,w 01011 #else MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 23 LOC OBJECT CODE LINE SOURCE TEXT VALUE 01012 movf fsr_save,w 01013 movwf FSR 01014 movf pclath_temp,w ; retrieve copy of PCLATH register 01015 movwf PCLATH ; restore pre-isr PCLATH register contents 01016 movf status_temp,w ; retrieve copy of STATUS register 01017 movwf STATUS ; restore pre-isr STATUS register contents 01018 swapf w_temp,f 01019 swapf w_temp,w ; restore pre-isr W register content 01020 #endif 0057 0009 01021 retfie ; return from interrupt 01022 01023 #define DEBOUNCE 0x10 01024 ;-------------------------------------------------------------------------------------- 0058 01025 display_cycle0 01026 ;-------------------------------------------------------------------------------------- 01027 01028 #ifdef STROBE_C3 01029 call strobe_c3 01030 decfsz fcount,f 01031 goto display_cycle0 01032 01033 01034 call get_state_tbl_hi_address 01035 call strobe_c3 01036 call get_state_tbl_low_address 01037 call strobe_c3 01038 call go_state_table 01039 call strobe_c3 01040 call set_max_state 01041 call strobe_c3 01042 #else 0058 20E4 01043 call strobe_a0 0059 0BA6 01044 decfsz fcount,f 005A 2858 01045 goto display_cycle0 01046 01047 005B 2161 01048 call get_state_tbl_hi_address 005C 20E4 01049 call strobe_a0 005D 2167 01050 call get_state_tbl_low_address 005E 20E4 01051 call strobe_a0 005F 2175 01052 call go_state_table 0060 20E4 01053 call strobe_a0 0061 22C0 01054 call set_max_state 0062 20E4 01055 call strobe_a0 01056 #ifdef M3X3 01057 #ifdef SIM_DEBUG 01058 btfsc T_PORTA,2 ; button on? 01059 #else 0063 1985 01060 btfsc PORTA,3 ; button on? 01061 #endif 0064 286D 01062 goto b0_off 01063 0065 3010 01064 movlw DEBOUNCE ; greater then 30? MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 24 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0066 0245 01065 subwf button2,w 0067 1803 01066 btfsc STATUS,C 0068 286B 01067 goto b0_set 01068 0069 0AC5 01069 incf button2,f ; debouncing.... 006A 2873 01070 goto b0_return 01071 006B 01072 b0_set 006B 1542 01073 bsf button,2 006C 2873 01074 goto b0_return 01075 006D 01076 b0_off 006D 0845 01077 movfw button2 ; zero? 006E 1903 01078 btfsc STATUS,Z 006F 2872 01079 goto b0_clr 01080 0070 03C5 01081 decf button2,f ; debouncing.... 0071 2873 01082 goto b0_return 01083 0072 01084 b0_clr 0072 1142 01085 bcf button,2 01086 0073 01087 b0_return 01088 #endif 01089 #endif 0073 0008 01090 return 01091 01092 ;-------------------------------------------------------------------------------------- 0074 01093 display_cycle1 01094 ;-------------------------------------------------------------------------------------- 01095 01096 #ifdef STROBE_C5 01097 call strobe_c5 01098 decfsz fcount,f 01099 goto display_cycle1 01100 01101 call get_state_tbl_hi_address 01102 call strobe_c5 01103 call get_state_tbl_low_address 01104 call strobe_c5 01105 call go_state_table 01106 call strobe_c5 01107 call set_max_state 01108 call strobe_c5 01109 #else 0074 20FD 01110 call strobe_a1 0075 0BA6 01111 decfsz fcount,f 0076 2874 01112 goto display_cycle1 01113 0077 2161 01114 call get_state_tbl_hi_address 0078 20FD 01115 call strobe_a1 0079 2167 01116 call get_state_tbl_low_address 007A 20FD 01117 call strobe_a1 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 25 LOC OBJECT CODE LINE SOURCE TEXT VALUE 007B 2175 01118 call go_state_table 007C 20FD 01119 call strobe_a1 007D 22C0 01120 call set_max_state 007E 20FD 01121 call strobe_a1 01122 01123 #ifdef M3X3 01124 #ifdef SIM_DEBUG 01125 btfsc T_PORTA,1 ; button on? 01126 #else 007F 1985 01127 btfsc PORTA,3 ; button on? 01128 #endif 0080 2889 01129 goto b1_off 01130 0081 3010 01131 movlw DEBOUNCE ; greater then 30? 0082 0246 01132 subwf button3,w 0083 1803 01133 btfsc STATUS,C 0084 2887 01134 goto b1_set 01135 0085 0AC6 01136 incf button3,f ; debouncing.... 0086 288F 01137 goto b1_return 01138 0087 01139 b1_set 0087 15C2 01140 bsf button,3 0088 288F 01141 goto b1_return 01142 0089 01143 b1_off 0089 0846 01144 movfw button3 ; zero? 008A 1903 01145 btfsc STATUS,Z 008B 288E 01146 goto b1_clr 01147 008C 03C6 01148 decf button3,f ; debouncing.... 008D 288F 01149 goto b1_return 01150 008E 01151 b1_clr 008E 11C2 01152 bcf button,3 01153 008F 01154 b1_return 01155 #endif 01156 #endif 008F 0008 01157 return 01158 01159 ;-------------------------------------------------------------------------------------- 0090 01160 display_cycle2 01161 ;-------------------------------------------------------------------------------------- 01162 0090 2116 01163 call strobe_a2 0091 0BA6 01164 decfsz fcount,f 0092 2890 01165 goto display_cycle2 01166 0093 2161 01167 call get_state_tbl_hi_address 0094 2116 01168 call strobe_a2 0095 2167 01169 call get_state_tbl_low_address 0096 2116 01170 call strobe_a2 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 26 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0097 2175 01171 call go_state_table 0098 2116 01172 call strobe_a2 0099 22C0 01173 call set_max_state 009A 2116 01174 call strobe_a2 01175 01176 #ifdef M3X3 01177 #ifdef SIM_DEBUG 01178 btfsc T_PORTA,4 ; button on? 01179 #else 009B 1985 01180 btfsc PORTA,3 ; button on? 01181 #endif 009C 28A5 01182 goto b2_off 01183 009D 3010 01184 movlw DEBOUNCE ; greater then 30? 009E 0247 01185 subwf button4,w 009F 1803 01186 btfsc STATUS,C 00A0 28A3 01187 goto b2_set 01188 00A1 0AC7 01189 incf button4,f ; debouncing.... 00A2 28AB 01190 goto b2_return 01191 00A3 01192 b2_set 00A3 1642 01193 bsf button,4 00A4 28AB 01194 goto b2_return 01195 00A5 01196 b2_off 00A5 0847 01197 movfw button4 ; zero? 00A6 1903 01198 btfsc STATUS,Z 00A7 28AA 01199 goto b2_clr 01200 00A8 03C7 01201 decf button4,f ; debouncing.... 00A9 28AB 01202 goto b2_return 01203 00AA 01204 b2_clr 00AA 1242 01205 bcf button,4 01206 00AB 01207 b2_return 01208 #endif 01209 00AB 0008 01210 return 01211 01212 ;-------------------------------------------------------------------------------------- 00AC 01213 display_cycle3 01214 ;-------------------------------------------------------------------------------------- 01215 01216 #ifdef STROBE_C0 01217 call strobe_c0 01218 decfsz fcount,f 01219 goto display_cycle3 01220 01221 call get_state_tbl_hi_address 01222 call strobe_c0 01223 call get_state_tbl_low_address MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 27 LOC OBJECT CODE LINE SOURCE TEXT VALUE 01224 call strobe_c0 01225 call go_state_table 01226 call strobe_c0 01227 call set_max_state 01228 call strobe_c0 01229 01230 return 01231 #else 00AC 2148 01232 call strobe_a5 00AD 0BA6 01233 decfsz fcount,f 00AE 28AC 01234 goto display_cycle3 01235 00AF 2161 01236 call get_state_tbl_hi_address 00B0 2148 01237 call strobe_a5 00B1 2167 01238 call get_state_tbl_low_address 00B2 2148 01239 call strobe_a5 00B3 2175 01240 call go_state_table 00B4 2148 01241 call strobe_a5 00B5 22C0 01242 call set_max_state 00B6 2148 01243 call strobe_a5 01244 01245 #ifdef M3X3 01246 #ifdef SIM_DEBUG 01247 btfsc T_PORTA,0 ; button on? 01248 #else 00B7 1985 01249 btfsc PORTA,3 ; button on? 01250 #endif 00B8 28C1 01251 goto b3_off 01252 00B9 3010 01253 movlw DEBOUNCE ; greater then 30? 00BA 0243 01254 subwf button0,w 00BB 1803 01255 btfsc STATUS,C 00BC 28BF 01256 goto b3_set 01257 00BD 0AC3 01258 incf button0,f ; debouncing.... 00BE 28C7 01259 goto b3_return 01260 00BF 01261 b3_set 00BF 1442 01262 bsf button,0 00C0 28C7 01263 goto b3_return 01264 00C1 01265 b3_off 00C1 0843 01266 movfw button0 ; zero? 00C2 1903 01267 btfsc STATUS,Z 00C3 28C6 01268 goto b3_clr 01269 00C4 03C3 01270 decf button0,f ; debouncing.... 00C5 28C7 01271 goto b3_return 01272 00C6 01273 b3_clr 00C6 1042 01274 bcf button,0 01275 00C7 01276 b3_return MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 28 LOC OBJECT CODE LINE SOURCE TEXT VALUE 01277 #endif 01278 00C7 0008 01279 return 01280 #endif 01281 01282 01283 #ifdef M3X3 01284 ;-------------------------------------------------------------------------------------- 00C8 01285 display_cycle4 01286 ;-------------------------------------------------------------------------------------- 01287 00C8 212F 01288 call strobe_a4 00C9 0BA6 01289 decfsz fcount,f 00CA 28C8 01290 goto display_cycle4 01291 00CB 2161 01292 call get_state_tbl_hi_address 00CC 212F 01293 call strobe_a4 00CD 2167 01294 call get_state_tbl_low_address 00CE 212F 01295 call strobe_a4 00CF 2175 01296 call go_state_table 00D0 212F 01297 call strobe_a4 00D1 22C0 01298 call set_max_state 00D2 212F 01299 call strobe_a4 01300 01301 #ifdef M3X3 01302 #ifdef SIM_DEBUG 01303 btfsc T_PORTA,1 ; button on? 01304 #else 00D3 1985 01305 btfsc PORTA,3 ; button on? 01306 #endif 00D4 28DD 01307 goto b4_off 01308 00D5 3010 01309 movlw DEBOUNCE ; greater then 30? 00D6 0244 01310 subwf button1,w 00D7 1803 01311 btfsc STATUS,C 00D8 28DB 01312 goto b4_set 01313 00D9 0AC4 01314 incf button1,f ; debouncing.... 00DA 28E3 01315 goto b4_return 01316 00DB 01317 b4_set 00DB 14C2 01318 bsf button,1 00DC 28E3 01319 goto b4_return 01320 00DD 01321 b4_off 00DD 0844 01322 movfw button1 ; zero? 00DE 1903 01323 btfsc STATUS,Z 00DF 28E2 01324 goto b4_clr 01325 00E0 03C4 01326 decf button1,f ; debouncing.... 00E1 28E3 01327 goto b4_return 01328 00E2 01329 b4_clr MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 29 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00E2 10C2 01330 bcf button,1 01331 00E3 01332 b4_return 01333 #endif 01334 00E3 0008 01335 return 01336 #endif 01337 01338 #ifdef S19 01339 ;-------------------------------------------------------------------------------------- 01340 display_cycle4 01341 ;-------------------------------------------------------------------------------------- 01342 01343 call strobe_a4 01344 decfsz fcount,f 01345 goto display_cycle4 01346 01347 call get_state_tbl_hi_address 01348 call strobe_a4 01349 call get_state_tbl_low_address 01350 call strobe_a4 01351 call go_state_table 01352 call strobe_a4 01353 call set_max_state 01354 call strobe_a4 01355 01356 return 01357 #endif 01358 #ifdef STROBE_C1 01359 ;-------------------------------------------------------------------------------------- 01360 display_cycle4 01361 ;-------------------------------------------------------------------------------------- 01362 01363 call strobe_c1 01364 decfsz fcount,f 01365 goto display_cycle4 01366 01367 call get_state_tbl_hi_address 01368 call strobe_c1 01369 call get_state_tbl_low_address 01370 call strobe_c1 01371 call go_state_table 01372 call strobe_c1 01373 call set_max_state 01374 call strobe_c1 01375 01376 return 01377 01378 ;-------------------------------------------------------------------------------------- 01379 display_cycle5 01380 ;-------------------------------------------------------------------------------------- 01381 01382 call strobe_c2 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 30 LOC OBJECT CODE LINE SOURCE TEXT VALUE 01383 decfsz fcount,f 01384 goto display_cycle5 01385 01386 call get_state_tbl_hi_address 01387 call strobe_c2 01388 call get_state_tbl_low_address 01389 call strobe_c2 01390 call go_state_table 01391 call strobe_c2 01392 call set_max_state 01393 call strobe_c2 01394 01395 return 01396 01397 ;-------------------------------------------------------------------------------------- 01398 display_cycle6 01399 ;-------------------------------------------------------------------------------------- 01400 01401 call strobe_c4 01402 decfsz fcount,f 01403 goto display_cycle6 01404 01405 call get_state_tbl_hi_address 01406 call strobe_c4 01407 call get_state_tbl_low_address 01408 call strobe_c4 01409 call go_state_table 01410 call strobe_c4 01411 call set_max_state 01412 call strobe_c4 01413 01414 return 01415 #endif 01416 01417 #ifdef RGB4 01418 #include 01419 #else 01420 #ifdef BI6 01421 #include 01422 #else 01423 #ifdef S19 01424 #include 01425 #else 01426 #ifdef C19 01427 #include 01428 #else 01429 #ifdef M3X3 01430 #include 00001 ;-------------------------------------------------------------------------------------- 00E4 00002 strobe_a0 00003 ;-------------------------------------------------------------------------------------- 00004 LedOut A1_A0_reg,Ax_dir,1 ;LED A1-A0 00E4 0801 M movfw TMR0 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 31 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00E5 022B M subwf A1_A0_reg,w 00E6 1C03 M btfss STATUS,C 00E7 14FD M bsf Ax_dir, 1 00005 LedOut A2_A0_reg,Ax_dir,2 ;LED A2-A0 00E8 0801 M movfw TMR0 00E9 022F M subwf A2_A0_reg,w 00EA 1C03 M btfss STATUS,C 00EB 157D M bsf Ax_dir, 2 00006 LedOut A4_A0_reg,Ax_dir,4 ;LED A4-A0 00EC 0801 M movfw TMR0 00ED 0233 M subwf A4_A0_reg,w 00EE 1C03 M btfss STATUS,C 00EF 167D M bsf Ax_dir, 4 00007 LedOut A5_A0_reg,Ax_dir,5 ;LED A5-A0 00F0 0801 M movfw TMR0 00F1 0237 M subwf A5_A0_reg,w 00F2 1C03 M btfss STATUS,C 00F3 16FD M bsf Ax_dir, 5 00008 00009 setbank1 00F4 1683 M bsf STATUS,RP0 ; select bank 1 00F5 1303 M bcf STATUS,RP1 00F6 087D 00010 movf Ax_dir,w ;set portA direction 00F7 0085 00011 movwf TRISA 00012 setbank0 00F8 1283 M bcf STATUS,RP0 ; select bank 0 00F9 1303 M bcf STATUS,RP1 00013 00014 00FA 3036 00015 movlw b'00110110' 00FB 0085 00016 movwf PORTA 00017 00FC 0008 00018 return 00019 00020 ;-------------------------------------------------------------------------------------- 00FD 00021 strobe_a1 00022 ;-------------------------------------------------------------------------------------- 00023 LedOut A0_A1_reg,Ax_dir,0 ;LED A0-A1 00FD 0801 M movfw TMR0 00FE 0227 M subwf A0_A1_reg,w 00FF 1C03 M btfss STATUS,C 0100 147D M bsf Ax_dir, 0 00024 LedOut A2_A1_reg,Ax_dir,2 ;LED A2-A1 0101 0801 M movfw TMR0 0102 0230 M subwf A2_A1_reg,w 0103 1C03 M btfss STATUS,C 0104 157D M bsf Ax_dir, 2 00025 LedOut A4_A1_reg,Ax_dir,4 ;LED A4-A1 0105 0801 M movfw TMR0 0106 0234 M subwf A4_A1_reg,w 0107 1C03 M btfss STATUS,C 0108 167D M bsf Ax_dir, 4 00026 LedOut A5_A1_reg,Ax_dir,5 ;LED A5-A1 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 32 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0109 0801 M movfw TMR0 010A 0238 M subwf A5_A1_reg,w 010B 1C03 M btfss STATUS,C 010C 16FD M bsf Ax_dir, 5 00027 00028 setbank1 010D 1683 M bsf STATUS,RP0 ; select bank 1 010E 1303 M bcf STATUS,RP1 010F 087D 00029 movf Ax_dir,w ;set portA direction 0110 0085 00030 movwf TRISA 00031 setbank0 0111 1283 M bcf STATUS,RP0 ; select bank 0 0112 1303 M bcf STATUS,RP1 00032 0113 3035 00033 movlw b'00110101' 0114 0085 00034 movwf PORTA 0115 0008 00035 return 00036 00037 ;-------------------------------------------------------------------------------------- 0116 00038 strobe_a2 00039 ;-------------------------------------------------------------------------------------- 00040 LedOut A0_A2_reg,Ax_dir,0 ;LED A0-A2 0116 0801 M movfw TMR0 0117 0228 M subwf A0_A2_reg,w 0118 1C03 M btfss STATUS,C 0119 147D M bsf Ax_dir, 0 00041 LedOut A1_A2_reg,Ax_dir,1 ;LED A1-A2 011A 0801 M movfw TMR0 011B 022C M subwf A1_A2_reg,w 011C 1C03 M btfss STATUS,C 011D 14FD M bsf Ax_dir, 1 00042 LedOut A4_A2_reg,Ax_dir,4 ;LED A4-A2 011E 0801 M movfw TMR0 011F 0235 M subwf A4_A2_reg,w 0120 1C03 M btfss STATUS,C 0121 167D M bsf Ax_dir, 4 00043 LedOut A5_A2_reg,Ax_dir,5 ;LED A5-A2 0122 0801 M movfw TMR0 0123 0239 M subwf A5_A2_reg,w 0124 1C03 M btfss STATUS,C 0125 16FD M bsf Ax_dir, 5 00044 00045 setbank1 0126 1683 M bsf STATUS,RP0 ; select bank 1 0127 1303 M bcf STATUS,RP1 0128 087D 00046 movf Ax_dir,w ;set portA direction 0129 0085 00047 movwf TRISA 00048 setbank0 012A 1283 M bcf STATUS,RP0 ; select bank 0 012B 1303 M bcf STATUS,RP1 00049 012C 3033 00050 movlw b'00110011' 012D 0085 00051 movwf PORTA MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 33 LOC OBJECT CODE LINE SOURCE TEXT VALUE 012E 0008 00052 return 00053 00054 ;-------------------------------------------------------------------------------------- 012F 00055 strobe_a4 00056 ;-------------------------------------------------------------------------------------- 00057 LedOut A0_A4_reg,Ax_dir,0 ;LED A0-A4 012F 0801 M movfw TMR0 0130 0229 M subwf A0_A4_reg,w 0131 1C03 M btfss STATUS,C 0132 147D M bsf Ax_dir, 0 00058 LedOut A1_A4_reg,Ax_dir,1 ;LED A1-A4 0133 0801 M movfw TMR0 0134 022D M subwf A1_A4_reg,w 0135 1C03 M btfss STATUS,C 0136 14FD M bsf Ax_dir, 1 00059 LedOut A2_A4_reg,Ax_dir,2 ;LED A2-A4 0137 0801 M movfw TMR0 0138 0231 M subwf A2_A4_reg,w 0139 1C03 M btfss STATUS,C 013A 157D M bsf Ax_dir, 2 00060 LedOut A5_A4_reg,Ax_dir,5 ;LED A5-A4 013B 0801 M movfw TMR0 013C 023A M subwf A5_A4_reg,w 013D 1C03 M btfss STATUS,C 013E 16FD M bsf Ax_dir, 5 00061 00062 00063 setbank1 013F 1683 M bsf STATUS,RP0 ; select bank 1 0140 1303 M bcf STATUS,RP1 0141 087D 00064 movf Ax_dir,w ;set portA direction 0142 0085 00065 movwf TRISA 00066 setbank0 0143 1283 M bcf STATUS,RP0 ; select bank 0 0144 1303 M bcf STATUS,RP1 00067 0145 3027 00068 movlw b'00100111' 0146 0085 00069 movwf PORTA 00070 0147 0008 00071 return 00072 00073 ;-------------------------------------------------------------------------------------- 0148 00074 strobe_a5 00075 ;-------------------------------------------------------------------------------------- 00076 LedOut A0_A5_reg,Ax_dir,0 ;LED A0-A5 0148 0801 M movfw TMR0 0149 022A M subwf A0_A5_reg,w 014A 1C03 M btfss STATUS,C 014B 147D M bsf Ax_dir, 0 00077 LedOut A1_A5_reg,Ax_dir,1 ;LED A1-A5 014C 0801 M movfw TMR0 014D 022E M subwf A1_A5_reg,w 014E 1C03 M btfss STATUS,C MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 34 LOC OBJECT CODE LINE SOURCE TEXT VALUE 014F 14FD M bsf Ax_dir, 1 00078 LedOut A2_A5_reg,Ax_dir,2 ;LED A2-A5 0150 0801 M movfw TMR0 0151 0232 M subwf A2_A5_reg,w 0152 1C03 M btfss STATUS,C 0153 157D M bsf Ax_dir, 2 00079 LedOut A4_A5_reg,Ax_dir,4 ;LED A4-A5 0154 0801 M movfw TMR0 0155 0236 M subwf A4_A5_reg,w 0156 1C03 M btfss STATUS,C 0157 167D M bsf Ax_dir, 4 00080 00081 setbank1 0158 1683 M bsf STATUS,RP0 ; select bank 1 0159 1303 M bcf STATUS,RP1 015A 087D 00082 movf Ax_dir,w ;set portA direction 015B 0085 00083 movwf TRISA 00084 setbank0 015C 1283 M bcf STATUS,RP0 ; select bank 0 015D 1303 M bcf STATUS,RP1 00085 015E 3017 00086 movlw b'00010111' 015F 0085 00087 movwf PORTA 00088 0160 0008 00089 return 01431 #else 01432 #ifdef SRGB 01433 #include 01434 #else 01435 error "unknown board strobe type" 01436 #endif 01437 #endif 01438 #endif 01439 #endif 01440 #endif 01441 #endif 01442 01443 01444 ;************************************************************************************** 01445 ; 01446 ; State Machine 01447 ; 01448 ;************************************************************************************** 01449 01450 var instate 0000003B M instate equ mem 0000003C M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 01451 var max_instate 0000003C M max_instate equ mem 0000003D M mem = mem + 1 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 35 LOC OBJECT CODE LINE SOURCE TEXT VALUE M if (mem >= mem2) M error 'Too much var space used' M endif 01452 var IR_in 0000003D M IR_in equ mem 0000003E M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 01453 var command 0000003E M command equ mem 0000003F M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 01454 var address 0000003F M address equ mem 00000040 M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 01455 var toggle 00000040 M toggle equ mem 00000041 M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 01456 var IR_lhalf 00000041 M IR_lhalf equ mem 00000042 M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 01457 var button 00000042 M button equ mem 00000043 M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 01458 #ifdef M3X3 01459 var button0 00000043 M button0 equ mem 00000044 M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 01460 var button1 00000044 M button1 equ mem 00000045 M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 01461 var button2 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 36 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00000045 M button2 equ mem 00000046 M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 01462 var button3 00000046 M button3 equ mem 00000047 M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 01463 var button4 00000047 M button4 equ mem 00000048 M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 01464 #endif 01465 var tx_1 00000048 M tx_1 equ mem 00000049 M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 01466 var pindex2 00000049 M pindex2 equ mem 0000004A M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 01467 var IR_in_good 0000004A M IR_in_good equ mem 0000004B M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 01468 var butcount 0000004B M butcount equ mem 0000004C M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 01469 01470 ;-------------------------------------------------------------------------------------- 0161 01471 get_state_tbl_hi_address ; 17 cycles 01472 ;-------------------------------------------------------------------------------------- 01473 var tbl2_hi 0000004C M tbl2_hi equ mem 0000004D M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 01474 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 37 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0161 1003 01475 bcf STATUS,0 ; clear carry flag ; 1 0162 0D3B 01476 rlf instate,w ; entry = table * 2 ; 2 0163 00C9 01477 movwf pindex2 ; 3 0164 216E 01478 call table_lookup2 ; 14 (9+2) 0165 00CC 01479 movwf tbl2_hi ; 15 0166 0008 01480 return ; 16/17 01481 01482 ;-------------------------------------------------------------------------------------- 0167 01483 get_state_tbl_low_address ; 18 cycles 01484 ;-------------------------------------------------------------------------------------- 01485 var tbl2_low 0000004D M tbl2_low equ mem 0000004E M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 01486 0167 1003 01487 bcf STATUS,0 ; clear carry flag (just in case) ; 1 0168 0D3B 01488 rlf instate,w ; entry = table * 2 + 1 ; 2 0169 3E01 01489 addlw 1 ; 3 016A 00C9 01490 movwf pindex2 ; 4 016B 216E 01491 call table_lookup2 ; 15 (9+2) 016C 00CD 01492 movwf tbl2_low ; 16 016D 0008 01493 return ; 17/18 01494 01495 ;********************************************************************** 016E 01496 table_lookup2 ; 9 cycles 01497 ;********************************************************************** 016E 3001 01498 movlw HIGH state_jump_table ; 1 016F 008A 01499 movwf PCLATH ; 2 0170 0849 01500 movf pindex2,w ; 3 0171 3E79 01501 addlw LOW state_jump_table ; 4 0172 1803 01502 btfsc STATUS,0 ; check carry flag ; 5 0173 0A8A 01503 incf PCLATH,f ; 6 0174 0082 01504 movwf PCL ; 7 + 2 01505 01506 ;********************************************************************** 0175 01507 go_state_table ; 18 cycles 01508 ;********************************************************************** 01509 0175 084C 01510 movf tbl2_hi,w ; 1 0176 008A 01511 movwf PCLATH ; 2 0177 084D 01512 movf tbl2_low,w ; 3 0178 0082 01513 movwf PCL ; 4 01514 01515 ;********************************************************************** 0179 01516 state_jump_table 01517 ;********************************************************************** 01518 make_state_jump_table d'31' 0000 M local i = 0 M while i <= d'31' 0179 3401 34B9 M dt HIGH Lstate0, LOW Lstate0 00000001 M i += 1 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 38 LOC OBJECT CODE LINE SOURCE TEXT VALUE 017B 3401 34C1 M dt HIGH Lstate1, LOW Lstate1 00000002 M i += 1 017D 3401 34C9 M dt HIGH Lstate2, LOW Lstate2 00000003 M i += 1 017F 3401 34D1 M dt HIGH Lstate3, LOW Lstate3 00000004 M i += 1 0181 3401 34D9 M dt HIGH Lstate4, LOW Lstate4 00000005 M i += 1 0183 3401 34E1 M dt HIGH Lstate5, LOW Lstate5 00000006 M i += 1 0185 3401 34E9 M dt HIGH Lstate6, LOW Lstate6 00000007 M i += 1 0187 3401 34F4 M dt HIGH Lstate7, LOW Lstate7 00000008 M i += 1 0189 3401 34F8 M dt HIGH Lstate8, LOW Lstate8 00000009 M i += 1 018B 3402 3404 M dt HIGH Lstate9, LOW Lstate9 0000000A M i += 1 018D 3402 3408 M dt HIGH Lstate10, LOW Lstate10 0000000B M i += 1 018F 3402 3414 M dt HIGH Lstate11, LOW Lstate11 0000000C M i += 1 0191 3402 3418 M dt HIGH Lstate12, LOW Lstate12 0000000D M i += 1 0193 3402 3424 M dt HIGH Lstate13, LOW Lstate13 0000000E M i += 1 0195 3402 3428 M dt HIGH Lstate14, LOW Lstate14 0000000F M i += 1 0197 3402 3434 M dt HIGH Lstate15, LOW Lstate15 00000010 M i += 1 0199 3402 3438 M dt HIGH Lstate16, LOW Lstate16 00000011 M i += 1 019B 3402 3444 M dt HIGH Lstate17, LOW Lstate17 00000012 M i += 1 019D 3402 3448 M dt HIGH Lstate18, LOW Lstate18 00000013 M i += 1 019F 3402 3454 M dt HIGH Lstate19, LOW Lstate19 00000014 M i += 1 01A1 3402 3458 M dt HIGH Lstate20, LOW Lstate20 00000015 M i += 1 01A3 3402 3464 M dt HIGH Lstate21, LOW Lstate21 00000016 M i += 1 01A5 3402 3468 M dt HIGH Lstate22, LOW Lstate22 00000017 M i += 1 01A7 3402 3474 M dt HIGH Lstate23, LOW Lstate23 00000018 M i += 1 01A9 3402 3478 M dt HIGH Lstate24, LOW Lstate24 00000019 M i += 1 01AB 3402 3484 M dt HIGH Lstate25, LOW Lstate25 0000001A M i += 1 01AD 3402 3488 M dt HIGH Lstate26, LOW Lstate26 0000001B M i += 1 01AF 3402 3494 M dt HIGH Lstate27, LOW Lstate27 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 39 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0000001C M i += 1 01B1 3402 3498 M dt HIGH Lstate28, LOW Lstate28 0000001D M i += 1 01B3 3402 34A4 M dt HIGH Lstate29, LOW Lstate29 0000001E M i += 1 01B5 3402 34A8 M dt HIGH Lstate30, LOW Lstate30 0000001F M i += 1 01B7 3402 34B4 M dt HIGH Lstate31, LOW Lstate31 00000020 M i += 1 M endw 01519 01520 state_tbl 0, 6, 1, 0 01B9 M Lstate0 M #ifndef MULTIBUTTON M if (0 == 0) M clrf button M movlw 0x30 M movwf butcount M endif M if (0 == 1) M bsf button,0 M endif M #endif 01B9 183D M btfsc IR_in,0 01BA 29BE M goto Lstate0a M 01BB 3006 M movlw 6 01BC 00BB M movwf instate M 01BD 2AB6 M goto Lcontinue M 01BE M Lstate0a 01BE 3001 M movlw 1 01BF 00BB M movwf instate M 01C0 2AB6 M goto Lcontinue 01521 state_tbl 1, 0, 2, -1 01C1 M Lstate1 M #ifndef MULTIBUTTON M if (-1 == 0) M clrf button M movlw 0x30 M movwf butcount M endif M if (-1 == 1) M bsf button,0 M endif M #endif 01C1 183D M btfsc IR_in,0 01C2 29C6 M goto Lstate1a M 01C3 3000 M movlw 0 01C4 00BB M movwf instate MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 40 LOC OBJECT CODE LINE SOURCE TEXT VALUE M 01C5 2AB6 M goto Lcontinue M 01C6 M Lstate1a 01C6 3002 M movlw 2 01C7 00BB M movwf instate M 01C8 2AB6 M goto Lcontinue 01522 state_tbl 2, 0, 3, -1 01C9 M Lstate2 M #ifndef MULTIBUTTON M if (-1 == 0) M clrf button M movlw 0x30 M movwf butcount M endif M if (-1 == 1) M bsf button,0 M endif M #endif 01C9 183D M btfsc IR_in,0 01CA 29CE M goto Lstate2a M 01CB 3000 M movlw 0 01CC 00BB M movwf instate M 01CD 2AB6 M goto Lcontinue M 01CE M Lstate2a 01CE 3003 M movlw 3 01CF 00BB M movwf instate M 01D0 2AB6 M goto Lcontinue 01523 state_tbl 3, 4, 3, -1 01D1 M Lstate3 M #ifndef MULTIBUTTON M if (-1 == 0) M clrf button M movlw 0x30 M movwf butcount M endif M if (-1 == 1) M bsf button,0 M endif M #endif 01D1 183D M btfsc IR_in,0 01D2 29D6 M goto Lstate3a M 01D3 3004 M movlw 4 01D4 00BB M movwf instate M 01D5 2AB6 M goto Lcontinue M MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 41 LOC OBJECT CODE LINE SOURCE TEXT VALUE 01D6 M Lstate3a 01D6 3003 M movlw 3 01D7 00BB M movwf instate M 01D8 2AB6 M goto Lcontinue 01524 state_tbl 4, 0, 5, -1 01D9 M Lstate4 M #ifndef MULTIBUTTON M if (-1 == 0) M clrf button M movlw 0x30 M movwf butcount M endif M if (-1 == 1) M bsf button,0 M endif M #endif 01D9 183D M btfsc IR_in,0 01DA 29DE M goto Lstate4a M 01DB 3000 M movlw 0 01DC 00BB M movwf instate M 01DD 2AB6 M goto Lcontinue M 01DE M Lstate4a 01DE 3005 M movlw 5 01DF 00BB M movwf instate M 01E0 2AB6 M goto Lcontinue 01525 state_tbl 5, 7, 0, -1 01E1 M Lstate5 M #ifndef MULTIBUTTON M if (-1 == 0) M clrf button M movlw 0x30 M movwf butcount M endif M if (-1 == 1) M bsf button,0 M endif M #endif 01E1 183D M btfsc IR_in,0 01E2 29E6 M goto Lstate5a M 01E3 3007 M movlw 7 01E4 00BB M movwf instate M 01E5 2AB6 M goto Lcontinue M 01E6 M Lstate5a 01E6 3000 M movlw 0 01E7 00BB M movwf instate MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 42 LOC OBJECT CODE LINE SOURCE TEXT VALUE M 01E8 2AB6 M goto Lcontinue 01526 01E9 01527 Lstate6 01528 01E9 183D 01529 btfsc IR_in,0 01EA 29F2 01530 goto Lstate6a 01531 01EB 3000 01532 movlw 0 01EC 074B 01533 addwf butcount,w 01ED 1903 01534 btfsc STATUS,Z 01EE 29F1 01535 goto Lstate6b 01536 01EF 0BCB 01537 decfsz butcount,f 01F0 2AB6 01538 goto Lcontinue 01539 01F1 01540 Lstate6b 01541 01542 #ifndef MULTIBUTTON 01543 bsf button,0 01544 #endif 01F1 2AB6 01545 goto Lcontinue 01546 01F2 01547 Lstate6a 01F2 01BB 01548 clrf instate 01F3 2AB6 01549 goto Lcontinue 01550 01551 state2_tbl 7, toggle, 0 01F4 M Lstate7 M ; save the 1st half of word 01F4 083D M movf IR_in,w ; save 1st half 01F5 00C1 M movwf IR_lhalf 01F6 0ABB M incf instate,f M 01F7 2AB6 M goto Lcontinue M 01F8 M Lstate8 M ; save the 2nd half of word M ; check for protocal error should get 01 or 10 01F8 0841 M movf IR_lhalf,w 01F9 063D M xorwf IR_in,w 01FA 1D03 M btfss STATUS,Z 01FB 29FE M goto Lstate8a 01FC 01BB M clrf instate ; error state = zero M 01FD 2AB6 M goto Lcontinue M M ; set the correct bit in output vars. 01FE M Lstate8a 01FE 183D M btfsc IR_in,0 01FF 1040 M bcf toggle,0 0200 1C3D M btfss IR_in,0 0201 1440 M bsf toggle,0 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 43 LOC OBJECT CODE LINE SOURCE TEXT VALUE M 0202 0ABB M incf instate,f 0203 2AB6 M goto Lcontinue 01552 state2_tbl 9, address, 4 0204 M Lstate9 M ; save the 1st half of word 0204 083D M movf IR_in,w ; save 1st half 0205 00C1 M movwf IR_lhalf 0206 0ABB M incf instate,f M 0207 2AB6 M goto Lcontinue M 0208 M Lstate10 M ; save the 2nd half of word M ; check for protocal error should get 01 or 10 0208 0841 M movf IR_lhalf,w 0209 063D M xorwf IR_in,w 020A 1D03 M btfss STATUS,Z 020B 2A0E M goto Lstate10a 020C 01BB M clrf instate ; error state = zero M 020D 2AB6 M goto Lcontinue M M ; set the correct bit in output vars. 020E M Lstate10a 020E 183D M btfsc IR_in,0 020F 123F M bcf address,4 0210 1C3D M btfss IR_in,0 0211 163F M bsf address,4 M 0212 0ABB M incf instate,f 0213 2AB6 M goto Lcontinue 01553 state2_tbl d'11', address, 3 0214 M Lstate11 M ; save the 1st half of word 0214 083D M movf IR_in,w ; save 1st half 0215 00C1 M movwf IR_lhalf 0216 0ABB M incf instate,f M 0217 2AB6 M goto Lcontinue M 0218 M Lstate12 M ; save the 2nd half of word M ; check for protocal error should get 01 or 10 0218 0841 M movf IR_lhalf,w 0219 063D M xorwf IR_in,w 021A 1D03 M btfss STATUS,Z 021B 2A1E M goto Lstate12a 021C 01BB M clrf instate ; error state = zero M 021D 2AB6 M goto Lcontinue M M ; set the correct bit in output vars. MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 44 LOC OBJECT CODE LINE SOURCE TEXT VALUE 021E M Lstate12a 021E 183D M btfsc IR_in,0 021F 11BF M bcf address,3 0220 1C3D M btfss IR_in,0 0221 15BF M bsf address,3 M 0222 0ABB M incf instate,f 0223 2AB6 M goto Lcontinue 01554 state2_tbl d'13', address, 2 0224 M Lstate13 M ; save the 1st half of word 0224 083D M movf IR_in,w ; save 1st half 0225 00C1 M movwf IR_lhalf 0226 0ABB M incf instate,f M 0227 2AB6 M goto Lcontinue M 0228 M Lstate14 M ; save the 2nd half of word M ; check for protocal error should get 01 or 10 0228 0841 M movf IR_lhalf,w 0229 063D M xorwf IR_in,w 022A 1D03 M btfss STATUS,Z 022B 2A2E M goto Lstate14a 022C 01BB M clrf instate ; error state = zero M 022D 2AB6 M goto Lcontinue M M ; set the correct bit in output vars. 022E M Lstate14a 022E 183D M btfsc IR_in,0 022F 113F M bcf address,2 0230 1C3D M btfss IR_in,0 0231 153F M bsf address,2 M 0232 0ABB M incf instate,f 0233 2AB6 M goto Lcontinue 01555 state2_tbl d'15', address, 1 0234 M Lstate15 M ; save the 1st half of word 0234 083D M movf IR_in,w ; save 1st half 0235 00C1 M movwf IR_lhalf 0236 0ABB M incf instate,f M 0237 2AB6 M goto Lcontinue M 0238 M Lstate16 M ; save the 2nd half of word M ; check for protocal error should get 01 or 10 0238 0841 M movf IR_lhalf,w 0239 063D M xorwf IR_in,w 023A 1D03 M btfss STATUS,Z 023B 2A3E M goto Lstate16a MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 45 LOC OBJECT CODE LINE SOURCE TEXT VALUE 023C 01BB M clrf instate ; error state = zero M 023D 2AB6 M goto Lcontinue M M ; set the correct bit in output vars. 023E M Lstate16a 023E 183D M btfsc IR_in,0 023F 10BF M bcf address,1 0240 1C3D M btfss IR_in,0 0241 14BF M bsf address,1 M 0242 0ABB M incf instate,f 0243 2AB6 M goto Lcontinue 01556 state2_tbl d'17', address, 0 0244 M Lstate17 M ; save the 1st half of word 0244 083D M movf IR_in,w ; save 1st half 0245 00C1 M movwf IR_lhalf 0246 0ABB M incf instate,f M 0247 2AB6 M goto Lcontinue M 0248 M Lstate18 M ; save the 2nd half of word M ; check for protocal error should get 01 or 10 0248 0841 M movf IR_lhalf,w 0249 063D M xorwf IR_in,w 024A 1D03 M btfss STATUS,Z 024B 2A4E M goto Lstate18a 024C 01BB M clrf instate ; error state = zero M 024D 2AB6 M goto Lcontinue M M ; set the correct bit in output vars. 024E M Lstate18a 024E 183D M btfsc IR_in,0 024F 103F M bcf address,0 0250 1C3D M btfss IR_in,0 0251 143F M bsf address,0 M 0252 0ABB M incf instate,f 0253 2AB6 M goto Lcontinue 01557 state2_tbl d'19', command, 5 0254 M Lstate19 M ; save the 1st half of word 0254 083D M movf IR_in,w ; save 1st half 0255 00C1 M movwf IR_lhalf 0256 0ABB M incf instate,f M 0257 2AB6 M goto Lcontinue M 0258 M Lstate20 M ; save the 2nd half of word MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 46 LOC OBJECT CODE LINE SOURCE TEXT VALUE M ; check for protocal error should get 01 or 10 0258 0841 M movf IR_lhalf,w 0259 063D M xorwf IR_in,w 025A 1D03 M btfss STATUS,Z 025B 2A5E M goto Lstate20a 025C 01BB M clrf instate ; error state = zero M 025D 2AB6 M goto Lcontinue M M ; set the correct bit in output vars. 025E M Lstate20a 025E 183D M btfsc IR_in,0 025F 12BE M bcf command,5 0260 1C3D M btfss IR_in,0 0261 16BE M bsf command,5 M 0262 0ABB M incf instate,f 0263 2AB6 M goto Lcontinue 01558 state2_tbl d'21', command, 4 0264 M Lstate21 M ; save the 1st half of word 0264 083D M movf IR_in,w ; save 1st half 0265 00C1 M movwf IR_lhalf 0266 0ABB M incf instate,f M 0267 2AB6 M goto Lcontinue M 0268 M Lstate22 M ; save the 2nd half of word M ; check for protocal error should get 01 or 10 0268 0841 M movf IR_lhalf,w 0269 063D M xorwf IR_in,w 026A 1D03 M btfss STATUS,Z 026B 2A6E M goto Lstate22a 026C 01BB M clrf instate ; error state = zero M 026D 2AB6 M goto Lcontinue M M ; set the correct bit in output vars. 026E M Lstate22a 026E 183D M btfsc IR_in,0 026F 123E M bcf command,4 0270 1C3D M btfss IR_in,0 0271 163E M bsf command,4 M 0272 0ABB M incf instate,f 0273 2AB6 M goto Lcontinue 01559 state2_tbl d'23', command, 3 0274 M Lstate23 M ; save the 1st half of word 0274 083D M movf IR_in,w ; save 1st half 0275 00C1 M movwf IR_lhalf 0276 0ABB M incf instate,f MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 47 LOC OBJECT CODE LINE SOURCE TEXT VALUE M 0277 2AB6 M goto Lcontinue M 0278 M Lstate24 M ; save the 2nd half of word M ; check for protocal error should get 01 or 10 0278 0841 M movf IR_lhalf,w 0279 063D M xorwf IR_in,w 027A 1D03 M btfss STATUS,Z 027B 2A7E M goto Lstate24a 027C 01BB M clrf instate ; error state = zero M 027D 2AB6 M goto Lcontinue M M ; set the correct bit in output vars. 027E M Lstate24a 027E 183D M btfsc IR_in,0 027F 11BE M bcf command,3 0280 1C3D M btfss IR_in,0 0281 15BE M bsf command,3 M 0282 0ABB M incf instate,f 0283 2AB6 M goto Lcontinue 01560 state2_tbl d'25', command, 2 0284 M Lstate25 M ; save the 1st half of word 0284 083D M movf IR_in,w ; save 1st half 0285 00C1 M movwf IR_lhalf 0286 0ABB M incf instate,f M 0287 2AB6 M goto Lcontinue M 0288 M Lstate26 M ; save the 2nd half of word M ; check for protocal error should get 01 or 10 0288 0841 M movf IR_lhalf,w 0289 063D M xorwf IR_in,w 028A 1D03 M btfss STATUS,Z 028B 2A8E M goto Lstate26a 028C 01BB M clrf instate ; error state = zero M 028D 2AB6 M goto Lcontinue M M ; set the correct bit in output vars. 028E M Lstate26a 028E 183D M btfsc IR_in,0 028F 113E M bcf command,2 0290 1C3D M btfss IR_in,0 0291 153E M bsf command,2 M 0292 0ABB M incf instate,f 0293 2AB6 M goto Lcontinue 01561 state2_tbl d'27', command, 1 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 48 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0294 M Lstate27 M ; save the 1st half of word 0294 083D M movf IR_in,w ; save 1st half 0295 00C1 M movwf IR_lhalf 0296 0ABB M incf instate,f M 0297 2AB6 M goto Lcontinue M 0298 M Lstate28 M ; save the 2nd half of word M ; check for protocal error should get 01 or 10 0298 0841 M movf IR_lhalf,w 0299 063D M xorwf IR_in,w 029A 1D03 M btfss STATUS,Z 029B 2A9E M goto Lstate28a 029C 01BB M clrf instate ; error state = zero M 029D 2AB6 M goto Lcontinue M M ; set the correct bit in output vars. 029E M Lstate28a 029E 183D M btfsc IR_in,0 029F 10BE M bcf command,1 02A0 1C3D M btfss IR_in,0 02A1 14BE M bsf command,1 M 02A2 0ABB M incf instate,f 02A3 2AB6 M goto Lcontinue 01562 state2_tbl d'29', command, 0 02A4 M Lstate29 M ; save the 1st half of word 02A4 083D M movf IR_in,w ; save 1st half 02A5 00C1 M movwf IR_lhalf 02A6 0ABB M incf instate,f M 02A7 2AB6 M goto Lcontinue M 02A8 M Lstate30 M ; save the 2nd half of word M ; check for protocal error should get 01 or 10 02A8 0841 M movf IR_lhalf,w 02A9 063D M xorwf IR_in,w 02AA 1D03 M btfss STATUS,Z 02AB 2AAE M goto Lstate30a 02AC 01BB M clrf instate ; error state = zero M 02AD 2AB6 M goto Lcontinue M M ; set the correct bit in output vars. 02AE M Lstate30a 02AE 183D M btfsc IR_in,0 02AF 103E M bcf command,0 02B0 1C3D M btfss IR_in,0 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 49 LOC OBJECT CODE LINE SOURCE TEXT VALUE 02B1 143E M bsf command,0 M 02B2 0ABB M incf instate,f 02B3 2AB6 M goto Lcontinue 01563 02B4 01564 Lstate31 02B4 01BB 01565 clrf instate 02B5 144A 01566 bsf IR_in_good,0 01567 02B6 01568 Lcontinue 02B6 0008 01569 return 01570 01571 ;-------------------------------------------------------------------------------------- 02B7 01572 read_button_in ; 5 cycles 01573 ;-------------------------------------------------------------------------------------- 01574 ; Portability : hardcoded button port 01575 ; 01576 02B7 1042 01577 bcf button,0 ; 1 02B8 10C2 01578 bcf button,1 ; 1 01579 #ifndef SIM_DEBUG 01580 #ifdef DEDICATED_BUTTON2 01581 btfss PORTA,5 ; 2 ; stick has 2 buttons. 01582 bsf button,1 ; 3 01583 btfss PORTA,4 ; 2 01584 bsf button,0 ; 3 01585 #else 02B9 1E85 01586 btfss PORTA,5 ; 2 02BA 1442 01587 bsf button,0 ; 3 01588 #endif 01589 #endif 02BB 0008 01590 return 01591 01592 ;-------------------------------------------------------------------------------------- 02BC 01593 read_ir_in ; 5 cycles 01594 ;-------------------------------------------------------------------------------------- 01595 02BC 103D 01596 bcf IR_in,0 ; 1 01597 #ifndef SIM_DEBUG 02BD 1985 01598 btfsc PORTA,3 ; 2 01599 #endif 02BE 143D 01600 bsf IR_in,0 ; 3 01601 01602 ; movf tx_1,w ; loopback for testing HACK!! ;1 01603 ; xorlw 0x01 ; loopback for testing HACK!! ;2 01604 ; movwf IR_in ; loopback for testing HACK!! ;3 02BF 0008 01605 return ; 4/5 01606 01607 ;-------------------------------------------------------------------------------------- 02C0 01608 set_max_state ; 5-7 cycles 01609 ;-------------------------------------------------------------------------------------- 02C0 083C 01610 movf max_instate,w 02C1 023B 01611 subwf instate,w MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 50 LOC OBJECT CODE LINE SOURCE TEXT VALUE 02C2 1C03 01612 btfss STATUS,C 02C3 2AC6 01613 goto smi_l1 02C4 083B 01614 movf instate,w 02C5 00BC 01615 movwf max_instate 02C6 01616 smi_l1 02C6 0008 01617 return 01618 01619 ;-------------------------------------------------------------------------------------- 02C7 01620 get_next_tx_bit ; 11 cycles 01621 ;-------------------------------------------------------------------------------------- 01622 02C7 1048 01623 bcf tx_1,0 ;1 02C8 03D7 01624 decf scount,f ;2 02C9 1003 01625 bcf STATUS, C ; clear carry bit ;3 02CA 0CD6 01626 rrf out3,f ;4 02CB 0CD5 01627 rrf out2,f ;5 02CC 0CD4 01628 rrf out1,f ;6 02CD 0CD3 01629 rrf out0,f ;7 02CE 1803 01630 btfsc STATUS, C ;8 02CF 1448 01631 bsf tx_1,0 ;9 01632 01633 ; movf tx_1,w ; loopback for testing HACK!! 01634 ; xorlw 0x01 ; loopback for testing HACK!! 01635 ; movwf tx_1 ; loopback for testing HACK!! 01636 ; mult_nop d'6' ; for debuging 01637 02D0 0008 01638 return ;10/11 01639 01640 ;********************************************************************** 02D1 01641 qdelay 01642 ;********************************************************************** 01643 var qcount 0000004E M qcount equ mem 0000004F M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 01644 02D1 00CE 01645 movwf qcount 02D2 01646 delay_loop2 02D2 0BCE 01647 decfsz qcount,1 02D3 2AD2 01648 goto delay_loop2 02D4 0008 01649 return 01650 ;********************************************************************** 02D5 01651 rf_command_out 01652 ;********************************************************************** 01653 01654 var out_address 0000004F M out_address equ mem 00000050 M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 51 LOC OBJECT CODE LINE SOURCE TEXT VALUE 01655 var out_command 00000050 M out_command equ mem 00000051 M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 01656 var out_toggle 00000051 M out_toggle equ mem 00000052 M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 01657 var out_pattern 00000052 M out_pattern equ mem 00000053 M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 01658 var out0 00000053 M out0 equ mem 00000054 M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 01659 var out1 00000054 M out1 equ mem 00000055 M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 01660 var out2 00000055 M out2 equ mem 00000056 M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 01661 var out3 00000056 M out3 equ mem 00000057 M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 01662 var scount 00000057 M scount equ mem 00000058 M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 01663 02D5 01D4 01664 clrf out1 02D6 01D5 01665 clrf out2 02D7 01D6 01666 clrf out3 01667 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 52 LOC OBJECT CODE LINE SOURCE TEXT VALUE 01668 ; start flag 02D8 30A0 01669 movlw B'10100000' 02D9 00D3 01670 movwf out0 01671 01672 01673 ; toggle bit 02DA 09D1 01674 comf out_toggle,f ; toggle the toggle flag 02DB 1C51 01675 btfss out_toggle,0 02DC 1454 01676 bsf out1,0 02DD 1851 01677 btfsc out_toggle,0 02DE 14D4 01678 bsf out1,1 01679 01680 ; address bits 02DF 1E4F 01681 btfss out_address,4 02E0 1554 01682 bsf out1,2 02E1 1A4F 01683 btfsc out_address,4 02E2 15D4 01684 bsf out1,3 01685 02E3 1DCF 01686 btfss out_address,3 02E4 1654 01687 bsf out1,4 02E5 19CF 01688 btfsc out_address,3 02E6 16D4 01689 bsf out1,5 01690 02E7 1D4F 01691 btfss out_address,2 02E8 1754 01692 bsf out1,6 02E9 194F 01693 btfsc out_address,2 02EA 17D4 01694 bsf out1,7 01695 02EB 1CCF 01696 btfss out_address,1 02EC 1455 01697 bsf out2,0 02ED 18CF 01698 btfsc out_address,1 02EE 14D5 01699 bsf out2,1 01700 02EF 1C4F 01701 btfss out_address,0 02F0 1555 01702 bsf out2,2 02F1 184F 01703 btfsc out_address,0 02F2 15D5 01704 bsf out2,3 01705 01706 ; command bits 02F3 1ED0 01707 btfss out_command,5 02F4 1655 01708 bsf out2,4 02F5 1AD0 01709 btfsc out_command,5 02F6 16D5 01710 bsf out2,5 01711 02F7 1E50 01712 btfss out_command,4 02F8 1755 01713 bsf out2,6 02F9 1A50 01714 btfsc out_command,4 02FA 17D5 01715 bsf out2,7 01716 02FB 1DD0 01717 btfss out_command,3 02FC 1456 01718 bsf out3,0 02FD 19D0 01719 btfsc out_command,3 02FE 14D6 01720 bsf out3,1 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 53 LOC OBJECT CODE LINE SOURCE TEXT VALUE 01721 02FF 1D50 01722 btfss out_command,2 0300 1556 01723 bsf out3,2 0301 1950 01724 btfsc out_command,2 0302 15D6 01725 bsf out3,3 01726 0303 1CD0 01727 btfss out_command,1 0304 1656 01728 bsf out3,4 0305 18D0 01729 btfsc out_command,1 0306 16D6 01730 bsf out3,5 01731 0307 1C50 01732 btfss out_command,0 0308 1756 01733 bsf out3,6 0309 1850 01734 btfsc out_command,0 030A 17D6 01735 bsf out3,7 01736 030B 3021 01737 movlw 0x21 030C 00D7 01738 movwf scount 01739 030D 0008 01740 return 01741 01742 #ifdef BIN2LED 01743 ;********************************************************************** 030E 01744 bin2led 01745 ;********************************************************************** 01746 var b2l_out_hi 00000058 M b2l_out_hi equ mem 00000059 M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 01747 var b2l_out_low 00000059 M b2l_out_low equ mem 0000005A M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 01748 var b2l_lcount 0000005A M b2l_lcount equ mem 0000005B M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 01749 var b2l_in_red 0000005B M b2l_in_red equ mem 0000005C M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 01750 var b2l_in_green 0000005C M b2l_in_green equ mem 0000005D M mem = mem + 1 M if (mem >= mem2) MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 54 LOC OBJECT CODE LINE SOURCE TEXT VALUE M error 'Too much var space used' M endif 01751 030E 01D8 01752 clrf b2l_out_hi 030F 01D9 01753 clrf b2l_out_low 0310 3008 01754 movlw 0x08 0311 00DA 01755 movwf b2l_lcount 0312 01756 b2l_loop 0312 1003 01757 bcf STATUS, C 0313 0CDC 01758 rrf b2l_in_green,f 0314 0DD9 01759 rlf b2l_out_low,f 0315 0DD8 01760 rlf b2l_out_hi,f 0316 0CDB 01761 rrf b2l_in_red,f 0317 0DD9 01762 rlf b2l_out_low,f 0318 0DD8 01763 rlf b2l_out_hi,f 01764 0319 0BDA 01765 decfsz b2l_lcount,f 031A 2B12 01766 goto b2l_loop 031B 0008 01767 return 01768 #endif 01769 01770 #ifdef FLIPBYTE 01771 ;********************************************************************** 01772 flipbyte 01773 ;********************************************************************** 01774 var flip_in 01775 var flip_out 01776 var flip_lcount 01777 01778 movwf flip_in 01779 clrf flip_out 01780 movlw 0x08 01781 movwf flip_lcount 01782 fbyte_loop 01783 bcf STATUS, C 01784 rrf flip_in,f 01785 rlf flip_out,f 01786 01787 decfsz flip_lcount,f 01788 goto fbyte_loop 01789 01790 movfw flip_out 01791 return 01792 #endif 01793 01794 ;********************************************************************** 031C 01795 delay 01796 ;********************************************************************** 01797 01798 var delay_count 0000005D M delay_count equ mem 0000005E M mem = mem + 1 M if (mem >= mem2) MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 55 LOC OBJECT CODE LINE SOURCE TEXT VALUE M error 'Too much var space used' M endif 01799 01800 ; movlw 0ffh 031C 00DD 01801 movwf delay_count 031D 01802 delay_loop 031D 0000 01803 nop 031E 0BDD 01804 decfsz delay_count,1 031F 2B1D 01805 goto delay_loop 0320 0008 01806 return 01807 01808 ;********************************************************************** 0321 01809 next_pattern 01810 ;********************************************************************** 0321 0AE5 01811 incf pattern,f 0322 0865 01812 movf pattern,w 0323 3C0F 01813 sublw NUM_TAB+1 ; max pattern? 0324 1903 01814 btfsc STATUS,2 ; z bit check 0325 01E5 01815 clrf pattern ; reset to zero 0326 0865 01816 movfw pattern 0327 00D2 01817 movwf out_pattern 0328 01FC 01818 clrf pindex 0329 0008 01819 return 01820 01821 ;********************************************************************** 032A 01822 past_pattern 01823 ;********************************************************************** 032A 03E5 01824 decf pattern,f 032B 0865 01825 movf pattern,w 032C 3E01 01826 addlw 1 ; max pattern? 032D 1D03 01827 btfss STATUS,2 ; z bit check 032E 2B32 01828 goto past_exit 032F 300E 01829 movlw NUM_TAB 0330 00E5 01830 movwf pattern 0331 00D2 01831 movwf out_pattern 0332 01832 past_exit 0332 01FC 01833 clrf pindex 0333 0008 01834 return 01835 01836 ;********************************************************************** 0334 01837 set_pattern ;set pattern from IR 01838 ;********************************************************************** 01839 ; extra logic because all the different blinkes talk to each other, but 01840 ; do not have the same number of patterns. So if blinkie "A" sents a 01841 ; pattern 22 to blinkie "B" which only has 10 patterns, Blinkie "B" 01842 ; starts to show pattern 2. (22 % 10 a mod function.) But to make 01843 ; things fair in blinkie wars, it will transmit pattern 22 to other 01844 ; blinkies. 01845 ;********************************************************************** 01846 0334 083E 01847 movfw command 0335 00E5 01848 movwf pattern 0336 00D2 01849 movwf out_pattern MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 56 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0337 01850 set_loop 0337 3EF1 01851 addlw 0xff-NUM_TAB 0338 1C03 01852 btfss STATUS, C 0339 2B3E 01853 goto set_exit 01854 033A 300E 01855 movlw NUM_TAB 033B 02E5 01856 subwf pattern,f 033C 0865 01857 movfw pattern 033D 2B37 01858 goto set_loop 01859 033E 01860 set_exit 033E 01FC 01861 clrf pindex 033F 0008 01862 return 01863 01864 ;********************************************************************** 0340 01865 strobe_delay 01866 ;********************************************************************** 01867 01868 var strobe_count 0000005E M strobe_count equ mem 0000005F M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 01869 0340 00DE 01870 movwf strobe_count 0341 01871 strobe_delay1 0341 1021 01872 bcf nextf,0 01873 0342 01874 strobe_delay2 0342 1C21 01875 btfss nextf,0 0343 2B42 01876 goto strobe_delay2 01877 0344 0BDE 01878 decfsz strobe_count,f 0345 2B41 01879 goto strobe_delay1 01880 0346 0008 01881 return 01882 01883 ;********************************************************************** 0347 01884 display_pattern_id 01885 ;********************************************************************** 0347 0A65 01886 incf pattern,w ; W = pattern + 1 01887 #ifdef SRGB 01888 movwf in1 01889 clrf in0 01890 clrf in2 01891 clrf in3 01892 clrf in4 01893 clrf in5 01894 #else 0348 00E7 01895 movwf in0 01896 #endif 01897 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 57 LOC OBJECT CODE LINE SOURCE TEXT VALUE 01898 #ifdef S19 01899 call flipbyte 01900 movwf in0 01901 #endif 01902 #ifdef BI6 01903 #ifdef MONO 01904 call flipbyte 01905 movwf in0 01906 #else 01907 movwf b2l_in_green 01908 clrf b2l_in_red 01909 call bin2led 01910 movf b2l_out_hi,w 01911 movwf in0 01912 movf b2l_out_low,w 01913 movwf in1 01914 #endif 01915 #endif 01916 01917 #ifdef M3X3 0349 00DC 01918 movwf b2l_in_green 034A 01DB 01919 clrf b2l_in_red 034B 230E 01920 call bin2led 034C 0858 01921 movf b2l_out_hi,w 034D 00E7 01922 movwf in0 034E 0859 01923 movf b2l_out_low,w 034F 00E8 01924 movwf in1 01925 #endif 01926 01927 #ifdef C19 01928 ; outer ring hars the pattern number 01929 movwf b2l_in_red 01930 clrf b2l_in_green 01931 call bin2led 01932 movf b2l_out_hi,w 01933 movwf in0 01934 movf b2l_out_low,w 01935 movwf in1 01936 01937 ; center LED turned on 01938 clrf in2 01939 clrf in3 01940 movlw b'00001100' 01941 movwf in4 01942 01943 ; middle ring on if demo mode 01944 btfss demo_mode,0 01945 goto skip4 01946 01947 comf in3 01948 movlw b'11111100' 01949 movwf in4 01950 skip4 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 58 LOC OBJECT CODE LINE SOURCE TEXT VALUE 01951 01952 #endif 01953 01954 #ifdef M3X3 0350 01E9 01955 clrf in2 01956 0351 30E0 01957 movlw b'11100000' 0352 186C 01958 btfsc demo_mode,0 0353 00E9 01959 movwf in2 01960 #endif 01961 01962 #ifdef S19 01963 clrf in1 01964 clrf in2 01965 01966 movlw b'11100000' 01967 btfsc demo_mode,0 01968 movwf in2 01969 #else 01970 #ifdef BI6 01971 #ifdef MONO 01972 btfsc demo_mode,0 01973 bsf in0,2 01974 #else ; bicolor 01975 btfsc demo_mode,0 01976 bsf in1,4 01977 #endif ; end Mono/bicolor 01978 #endif ; end BI 01979 #endif ; end S19/BI6 01980 01981 #ifdef RGB4 01982 btfsc demo_mode,0 01983 bsf in1,7 01984 #endif 01985 #ifdef SRGB 01986 movlw b'00111000' 01987 btfsc demo_mode,0 01988 movwf in4 01989 #endif 01990 0354 30FF 01991 movlw 0xFF 0355 2495 01992 call display_1bit 01993 0356 01E7 01994 clrf in0 0357 01E8 01995 clrf in1 0358 01E9 01996 clrf in2 0359 3001 01997 movlw 0x01 035A 2495 01998 call display_1bit 035B 0008 01999 return 02000 02001 ;********************************************************************** 035C 02002 setup_pattern_table 02003 ;********************************************************************** MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 59 LOC OBJECT CODE LINE SOURCE TEXT VALUE 02004 var tbl_hi 0000005F M tbl_hi equ mem 00000060 M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 02005 var tbl_low 00000060 M tbl_low equ mem 00000061 M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 02006 var setup_pattern_temp 00000061 M setup_pattern_temp equ mem 00000062 M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 02007 var temp_high 00000062 M temp_high equ mem 00000063 M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 02008 02009 ;stop2 02010 ; movf pattern,w 02011 ; btfss STATUS,Z 02012 ; goto slabel1 02013 ; 02014 ; if patten is zero, check eeprom and verify 1st entry is not a 0x00 02015 ; if it is switch to next pattern. 02016 02017 ; clrw 02018 ; call read_eeprom 02019 ; movwf setup_pattern_temp 02020 02021 ; clrf demo_mode 02022 ; btfsc setup_pattern_temp,7 02023 ; bsf demo_mode,0 02024 02025 ; movfw setup_pattern_temp 02026 ; btfss STATUS,Z 02027 ; goto sreturn 02028 02029 ; call next_pattern 02030 ; goto stop2 02031 02032 ;slabel1 02033 ; 02034 ; Set the pattern (table) 02035 ; 035C 3005 02036 movlw HIGH MasterTable MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 60 LOC OBJECT CODE LINE SOURCE TEXT VALUE 035D 00DF 02037 movwf tbl_hi 035E 30F3 02038 movlw LOW MasterTable 035F 00E0 02039 movwf tbl_low 02040 02041 ; get the high address for the pattern table 0360 1003 02042 bcf STATUS,0 ; clear carry flag 0361 0D65 02043 rlf pattern,w ; entry = table * 2 0362 00FC 02044 movwf pindex 0363 138B 02045 bcf INTCON, GIE ; disable INTs 0364 25E6 02046 call table_lookup 0365 178B 02047 bsf INTCON, GIE ; enable INTs 0366 00E2 02048 movwf temp_high ; can't put it in tbl_high yet 02049 02050 ; get the low address for the pattern table 0367 1403 02051 bsf STATUS,0 ; set carry 0368 0D65 02052 rlf pattern,w ; entry = table * 2 + 1 0369 00FC 02053 movwf pindex 036A 138B 02054 bcf INTCON, GIE ; disable INTs 036B 25E6 02055 call table_lookup 036C 178B 02056 bsf INTCON, GIE ; enable INTs 036D 00E0 02057 movwf tbl_low 02058 036E 0862 02059 movf temp_high,w 036F 00DF 02060 movwf tbl_hi 02061 0370 02062 sreturn 0370 0008 02063 return 02064 02065 ;********************************************************************** 0371 02066 get_next_pattern_entry 02067 ;********************************************************************** 02068 var pclath_save 00000063 M pclath_save equ mem 00000064 M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 02069 var temp2 00000064 M temp2 equ mem 00000065 M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 02070 02071 ; if hi address is 0x21 pattern is in eeprom 0371 3021 02072 movlw 0x21 0372 025F 02073 subwf tbl_hi,w 0373 1D03 02074 btfss STATUS,Z 0374 2B79 02075 goto glabel1 02076 02077 ; table in eeprom 0375 0860 02078 movfw tbl_low 0376 077C 02079 addwf pindex,w MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 61 LOC OBJECT CODE LINE SOURCE TEXT VALUE 02080 0377 23A2 02081 call read_eeprom 02082 0378 2B8B 02083 goto greturn 02084 02085 02086 ; table in program memory 0379 02087 glabel1 0379 138B 02088 bcf INTCON, GIE ; disable INTs 037A 080A 02089 movfw PCLATH 037B 00E3 02090 movwf pclath_save 02091 037C 085F 02092 movfw tbl_hi 037D 077B 02093 addwf pindex1,w 037E 00F3 02094 movwf offset_hi 02095 037F 1003 02096 bcf STATUS,C 0380 0860 02097 movfw tbl_low 0381 077C 02098 addwf pindex,w 0382 00F4 02099 movwf offset_low 02100 0383 1803 02101 btfsc STATUS,C 0384 0AF3 02102 incf offset_hi,f 0385 25ED 02103 call jump_address 02104 0386 00E4 02105 movwf temp2 0387 0863 02106 movfw pclath_save 0388 008A 02107 movwf PCLATH 0389 0864 02108 movfw temp2 038A 178B 02109 bsf INTCON, GIE ; enable INTs 02110 038B 02111 greturn 038B 0FFC 02112 incfsz pindex,f 038C 2B8E 02113 goto gskip 038D 0AFB 02114 incf pindex1,f 038E 02115 gskip 038E 0008 02116 return 02117 02118 02119 ;********************************************************************** 038F 02120 write_eeprom 02121 ; expects EEPROM address and data in pindex and input 02122 ; makes sure previous write (if any) has completed before proceeding 02123 ;********************************************************************** 02124 setbank1 038F 1683 M bsf STATUS,RP0 ; select bank 1 0390 1303 M bcf STATUS,RP1 02125 0391 189C 02126 btfsc EECON1,WR ;wait for WR to clear 0392 2B91 02127 goto $-1 02128 0393 138B 02129 bcf INTCON, GIE ; disable INTs 0394 151C 02130 bsf EECON1,WREN ;enable writes MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 62 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0395 087C 02131 movf pindex,w ;set address 0396 009B 02132 movwf EEADR 0397 087A 02133 movf input,w ;set data 0398 009A 02134 movwf EEDAT 0399 3055 02135 movlw 0x55 ;EECON2 = 0x55 ;unlock sequence 039A 009D 02136 movwf EECON2 039B 30AA 02137 movlw 0xAA ;EECON2 = 0xAA ;unlock sequence 039C 009D 02138 movwf EECON2 039D 149C 02139 bsf EECON1,WR ;initiate a write cycle 039E 178B 02140 bsf INTCON, GIE ; enable INT 02141 02142 setbank0 039F 1283 M bcf STATUS,RP0 ; select bank 0 03A0 1303 M bcf STATUS,RP1 03A1 0008 02143 return 02144 02145 02146 ;********************************************************************** 03A2 02147 read_eeprom 02148 ; expects EEPROM address in W 02149 ; returns EEPROM data in W 02150 ; makes sure previous write (if any) has completed before proceeding 02151 ;********************************************************************** 03A2 138B 02152 bcf INTCON, GIE ; disable INTs 02153 setbank1 03A3 1683 M bsf STATUS,RP0 ; select bank 1 03A4 1303 M bcf STATUS,RP1 02154 03A5 189C 02155 btfsc EECON1,WR ;wait for WR to clear 03A6 2BA5 02156 goto $-1 02157 03A7 111C 02158 bcf EECON1,WREN ;disable writes 03A8 009B 02159 movwf EEADR ;EEADR = W 03A9 139C 02160 bcf EECON1,7 ;clear EEPGD 03AA 141C 02161 bsf EECON1,RD ;initiate a read cycle 03AB 081A 02162 movf EEDAT,w ;W = EEDAT 02163 02164 setbank0 03AC 1283 M bcf STATUS,RP0 ; select bank 0 03AD 1303 M bcf STATUS,RP1 03AE 178B 02165 bsf INTCON, GIE ; enable INT 03AF 0008 02166 return 02167 02168 ;********************************************************************** 03B0 02169 read_demo_mode 02170 ;********************************************************************** 03B0 3097 02171 movlw LOW demo_store 03B1 23A2 02172 call read_eeprom 03B2 00EC 02173 movwf demo_mode 03B3 0008 02174 return 02175 02176 ;********************************************************************** 03B4 02177 toggle_demo MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 63 LOC OBJECT CODE LINE SOURCE TEXT VALUE 02178 ;********************************************************************** 03B4 23B0 02179 call read_demo_mode 02180 03B5 1C6C 02181 btfss demo_mode,0 ; 03B6 2BB9 02182 goto tdemo_on 02183 02184 ; toggle off 03B7 106C 02185 bcf demo_mode,0 03B8 2BBA 02186 goto tdemo_cont 02187 03B9 02188 tdemo_on 03B9 146C 02189 bsf demo_mode,0 02190 03BA 02191 tdemo_cont 03BA 3097 02192 movlw LOW demo_store 03BB 00FC 02193 movwf pindex 03BC 086C 02194 movfw demo_mode 03BD 00FA 02195 movwf input 03BE 238F 02196 call write_eeprom 02197 03BF 2347 02198 call display_pattern_id 03C0 2347 02199 call display_pattern_id 02200 03C1 0008 02201 return 02202 02203 ;********************************************************************** 03C2 02204 pattern_driver 02205 ;********************************************************************** 02206 02207 var pattern 00000065 M pattern equ mem 00000066 M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 02208 var tbltype 00000066 M tbltype equ mem 00000067 M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 02209 var in0 00000067 M in0 equ mem 00000068 M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 02210 var in1 00000068 M in1 equ mem 00000069 M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 64 LOC OBJECT CODE LINE SOURCE TEXT VALUE 02211 var in2 00000069 M in2 equ mem 0000006A M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 02212 #ifdef C19 02213 var in3 02214 var in4 02215 var in5 02216 var in6 02217 var in7 02218 var in8 02219 var in9 02220 #endif 02221 #ifdef SRGB 02222 var in3 02223 var in4 02224 var in5 02225 var in6 02226 var in7 02227 var in8 02228 var in9 02229 var in10 02230 var in11 02231 var in12 02232 #endif 02233 #ifdef BADGE 02234 var in3 02235 #endif 02236 var speed 0000006A M speed equ mem 0000006B M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 02237 var pspeed 0000006B M pspeed equ mem 0000006C M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 02238 var demo_mode 0000006C M demo_mode equ mem 0000006D M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 02239 var psize 0000006D M psize equ mem 0000006E M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 65 LOC OBJECT CODE LINE SOURCE TEXT VALUE M endif 02240 02241 ; need to be able to access from page1 & page2 for eeprom read/write 02242 var_all_bank pindex ; pattern index 0000007C M pindex equ mem2 0000007B M mem2 = mem2 - 1 M if (mem >= mem2) M error 'Too much var space used' 02243 var_all_bank pindex1 ; pattern index 0000007B M pindex1 equ mem2 0000007A M mem2 = mem2 - 1 M if (mem >= mem2) M error 'Too much var space used' 02244 var_all_bank input 0000007A M input equ mem2 00000079 M mem2 = mem2 - 1 M if (mem >= mem2) M error 'Too much var space used' 02245 03C2 02246 ptop 02247 02248 03C2 235C 02249 call setup_pattern_table 02250 03C3 01FC 02251 clrf pindex 03C4 01FB 02252 clrf pindex1 02253 02254 ; load the table type (Currently only 1 type) 03C5 2371 02255 call get_next_pattern_entry 03C6 00E6 02256 movwf tbltype 03C7 13E6 02257 bcf tbltype,7 ; using top bit for demo mode. 02258 02259 ; load the speed (someday this will be a table type 1 only thing.) 03C8 2371 02260 call get_next_pattern_entry 03C9 00EB 02261 movwf pspeed 03CA 0AEB 02262 incf pspeed,f ; adjust so 0 is fastest, not treated like speed 256 02263 02264 ; load the table size 03CB 2371 02265 call get_next_pattern_entry ;4rgb 03CC 00ED 02266 movwf psize ;4rgb 02267 03CD 02268 ploop0 02269 ; 02270 ; Check for IR command in 02271 ; 03CD 1C4A 02272 btfss IR_in_good,0 03CE 2BEB 02273 goto button_check 02274 03CF 02275 blinkie_check 03CF 3007 02276 movlw 0x07 ; blinkines use address 0x07 (Experimental) 03D0 023F 02277 subwf address,w 03D1 1D03 02278 btfss STATUS,Z 03D2 2BD6 02279 goto remote_check MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 66 LOC OBJECT CODE LINE SOURCE TEXT VALUE 02280 03D3 2334 02281 call set_pattern 03D4 01CA 02282 clrf IR_in_good 03D5 2BC2 02283 goto ptop 02284 03D6 02285 remote_check 03D6 08BF 02286 movf address,f ; remote giving "0" for address (TV)? 03D7 1D03 02287 btfss STATUS,Z 03D8 2BEB 02288 goto button_check 02289 03D9 3020 02290 movlw 0x20 ; remote curser right (pattern ++) 03DA 023E 02291 subwf command,w 03DB 1903 02292 btfsc STATUS,Z 03DC 2321 02293 call next_pattern 02294 03DD 3021 02295 movlw 0x21 ; remote curser left (pattern --) 03DE 023E 02296 subwf command,w 03DF 1903 02297 btfsc STATUS,Z 03E0 232A 02298 call past_pattern 02299 03E1 3000 02300 movlw 0x00 ; remote "0" key (pattern = 0) 03E2 023E 02301 subwf command,w 03E3 1903 02302 btfsc STATUS,Z 03E4 01E5 02303 clrf pattern 02304 03E5 300C 02305 movlw 0x0c ; remote on/off key (togle demo mode!) 03E6 023E 02306 subwf command,w 03E7 1903 02307 btfsc STATUS,Z 03E8 23B4 02308 call toggle_demo 02309 03E9 01CA 02310 clrf IR_in_good 03EA 2BC2 02311 goto ptop 02312 03EB 02313 button_check 02314 ; ploop1 02315 03EB 0842 02316 movfw button ; if any putton pressed show pattern id 03EC 1903 02317 btfsc STATUS,Z 03ED 2C05 02318 goto ploop2 02319 03EE 2347 02320 call display_pattern_id 03EF 2347 02321 call display_pattern_id 02322 03F0 02323 ploop1a 02324 02325 #ifdef M3X3 03F0 3003 02326 movlw 0x03 ; if button 3 & 4 presses 03F1 0242 02327 subwf button,w 03F2 1903 02328 btfsc STATUS,Z 03F3 2DAF 02329 goto mode_loop 02330 03F4 300C 02331 movlw 0x0C ; if button 1 & 2 presses 03F5 0242 02332 subwf button,w MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 67 LOC OBJECT CODE LINE SOURCE TEXT VALUE 03F6 1903 02333 btfsc STATUS,Z 03F7 23B4 02334 call toggle_demo 02335 02336 #endif 02337 03F8 1842 02338 btfsc button,0 ; if button 3 pressed inc pattern 03F9 2BFD 02339 goto ploop1up 02340 03FA 18C2 02341 btfsc button,1 ; if button 4 pressed dec pattern 03FB 2C01 02342 goto ploop1down 02343 03FC 2BC2 02344 goto ptop 02345 03FD 02346 ploop1up 03FD 2321 02347 call next_pattern 03FE 2347 02348 call display_pattern_id 03FF 2347 02349 call display_pattern_id 0400 2BF0 02350 goto ploop1a 02351 0401 02352 ploop1down 0401 232A 02353 call past_pattern 0402 2347 02354 call display_pattern_id 0403 2347 02355 call display_pattern_id 0404 2BF0 02356 goto ploop1a 0405 02357 ploop2 02358 02359 #ifdef PATTERN1 02360 movlw 0x01 ; pattern1 02361 subwf tbltype,w 02362 btfsc STATUS,Z 02363 call table_type_1 02364 #endif 02365 02366 #ifdef PATTERN2 02367 movlw 0x02 ; pattern2 02368 subwf tbltype,w 02369 btfsc STATUS,Z 02370 call table_type_2 02371 #endif 02372 02373 #ifdef PATTERN3 02374 movlw 0x03 ; pattern3 02375 subwf tbltype,w 02376 btfsc STATUS,Z 02377 call table_type_3 02378 #endif 02379 02380 #ifdef PATTERN4 02381 movlw 0x04 ; pattern4 02382 subwf tbltype,w 02383 btfsc STATUS,Z 02384 call table_type_4 02385 #endif MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 68 LOC OBJECT CODE LINE SOURCE TEXT VALUE 02386 02387 #ifdef PATTERN5 02388 movlw 0x05 ; pattern5 02389 subwf tbltype,w 02390 btfsc STATUS,Z 02391 call table_type_5 02392 #endif 02393 02394 #ifdef PATTERN6 0405 3006 02395 movlw 0x06 ; pattern6 0406 0266 02396 subwf tbltype,w 0407 1903 02397 btfsc STATUS,Z 0408 242C 02398 call table_type_6 02399 #endif 02400 02401 #ifdef PATTERN7 02402 movlw 0x07 ; pattern7 02403 subwf tbltype,w 02404 btfsc STATUS,Z 02405 call table_type_7 02406 #endif 02407 02408 #ifdef PATTERN8 02409 movlw 0x08 ; pattern8 02410 subwf tbltype,w 02411 btfsc STATUS,Z 02412 call table_type_8 02413 #endif 02414 02415 #ifdef PATTERN9 02416 movlw 0x09 ; pattern9 02417 subwf tbltype,w 02418 btfsc STATUS,Z 02419 call table_type_9 02420 #endif 02421 02422 #ifdef PATTERN10 02423 movlw 0x0A ; pattern10 02424 subwf tbltype,w 02425 btfsc STATUS,Z 02426 call table_type_10 02427 #endif 02428 02429 #ifdef PATTERN11 02430 movlw 0x0B ; pattern11 02431 subwf tbltype,w 02432 btfsc STATUS,Z 02433 call table_type_11 02434 #endif 02435 02436 #ifdef PATTERN12 02437 movlw 0x0C ; pattern12 02438 subwf tbltype,w MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 69 LOC OBJECT CODE LINE SOURCE TEXT VALUE 02439 btfsc STATUS,Z 02440 call table_type_12 02441 #endif 02442 02443 #ifdef PATTERN13 02444 movlw 0x0D ; pattern13 02445 subwf tbltype,w 02446 btfsc STATUS,Z 02447 call table_type_13 02448 #endif 02449 02450 #ifdef PATTERN14 02451 movlw 0x0E ; pattern14 02452 subwf tbltype,w 02453 btfsc STATUS,Z 02454 call table_type_14 02455 #endif 02456 02457 #ifdef PATTERN15 02458 movlw 0x0F ; pattern15 02459 subwf tbltype,w 02460 btfsc STATUS,Z 02461 call table_type_15 02462 #endif 02463 02464 #ifdef PATTERN16 02465 movlw 0x10 ; pattern16 02466 subwf tbltype,w 02467 pageselw table_type_16 02468 btfsc STATUS,Z 02469 call table_type_16 02470 pageselw pattern_driver 02471 #endif 02472 02473 #ifdef PATTERN17 02474 movlw 0x11 ; pattern17 02475 subwf tbltype,w 02476 btfsc STATUS,Z 02477 call table_type_17 02478 #endif 02479 02480 #ifdef PATTERN18 02481 movlw 0x12 ; pattern18 02482 subwf tbltype,w 02483 pageselw table_type_18 02484 btfsc STATUS,Z 02485 call table_type_18 02486 pageselw pattern_driver 02487 #endif 02488 02489 #ifdef PATTERN19 0409 3013 02490 movlw 0x13 ; pattern19 040A 0266 02491 subwf tbltype,w MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 70 LOC OBJECT CODE LINE SOURCE TEXT VALUE 040B 3004 008A 02492 pageselw table_type_19 040D 1903 02493 btfsc STATUS,Z 040E 243D 02494 call table_type_19 040F 3003 008A 02495 pageselw pattern_driver 02496 #endif 02497 02498 #ifdef PATTERN20 02499 movlw 0x14 ; pattern20 02500 subwf tbltype,w 02501 pageselw table_type_20 02502 btfsc STATUS,Z 02503 call table_type_20 02504 pageselw pattern_driver 02505 #endif 02506 02507 #ifdef PATTERN21 0411 3015 02508 movlw 0x15 ; pattern21 0412 0266 02509 subwf tbltype,w 0413 3006 008A 02510 pageselw table_type_21 0415 1903 02511 btfsc STATUS,Z 0416 2611 02512 call table_type_21 0417 3003 008A 02513 pageselw pattern_driver 02514 #endif 02515 02516 02517 02518 ; make sure we are not sending a IR signel 0419 0857 02519 movf scount,w ; F22 041A 3E00 02520 addlw 0 ; F23 041B 1D03 02521 btfss STATUS,Z ; F24 041C 2C29 02522 goto ploop3 02523 02524 ; count down till net IR signel 041D 1CA1 02525 btfss nextf,1 041E 2C29 02526 goto ploop3 02527 041F 10A1 02528 bcf nextf,1 0420 1C6C 02529 btfss demo_mode,0 0421 2C24 02530 goto ploop2a 02531 0422 2321 02532 call next_pattern 0423 2BC2 02533 goto ptop 02534 0424 02535 ploop2a 02536 ; send an IR signel 02537 #ifdef ENABLE_IR 0424 3007 02538 movlw 0x07 ; address 0x07 "Experimental" 0425 00CF 02539 movwf out_address 0426 0852 02540 movfw out_pattern 0427 00D0 02541 movwf out_command ; copy out_pettern 02542 0428 22D5 02543 call rf_command_out 02544 #endif MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 71 LOC OBJECT CODE LINE SOURCE TEXT VALUE 02545 0429 02546 ploop3 0429 0BED 02547 decfsz psize,f ;check for end of pattern (4rgb) 042A 2BCD 02548 goto ploop0 02549 042B 2BC2 02550 goto ptop 02551 02552 #ifdef PATTERN1 02553 ;********************************************************************** 02554 table_type_1 02555 ;********************************************************************** 02556 ; 76543210 <-- bits 02557 ; AABBCCDD <-- LEDs 02558 ; 01010101 <-- stays on for 1 unit - b'01' 02559 ; 10101010 <-- stays on for 2 units - b'10' 02560 ; 11111111 <-- stays on for 3 units - b'11' 02561 02562 ; in0 red 02563 ; in1 green 02564 ; in2 blu 02565 02566 call get_next_pattern_entry 02567 movwf in0 02568 02569 call get_next_pattern_entry 02570 movwf in1 02571 02572 call get_next_pattern_entry ;4rgb 02573 movwf in2 ;4rgb 02574 02575 movf pspeed,w 02576 movwf speed 02577 call display_2bit 02578 02579 return 02580 #endif 02581 02582 #ifdef PATTERN2 02583 ;********************************************************************** 02584 table_type_2 02585 ;********************************************************************** 02586 02587 var delay1 02588 var fad 02589 var color 02590 var fad2 02591 02592 incf delay1,f 02593 02594 movf delay1,w ; testing for 0 02595 btfss STATUS,Z 02596 goto cf_loop2 02597 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 72 LOC OBJECT CODE LINE SOURCE TEXT VALUE 02598 movlw TICK_VALUE ; we are using timer0 for the counts, 0 through tick value is LED off. 02599 movwf delay1 02600 02601 ; 02602 ; select a pattern 02603 ; 02604 comf fad,f 02605 movf fad,w ; testing for 0 02606 incf color,f 02607 02608 cf_loop2 02609 movf delay1,w ; fading up 02610 btfsc fad,0 02611 comf delay1,w ; dafinf down 02612 movwf fad2 02613 02614 movlw 0x03 ; greater then 3? 02615 subwf color,w 02616 btfsc STATUS,C 02617 clrf color 02618 02619 02620 movlw 0x00 ; testing for 0 02621 subwf color,w 02622 btfss STATUS,Z 02623 goto next1 02624 02625 movfw fad2 02626 movwf Ar_reg 02627 movwf Br_reg 02628 movwf Cr_reg 02629 movwf Dr_reg 02630 02631 next1 02632 movlw 0x01 ; testing for 1 02633 subwf color,w 02634 btfss STATUS,Z 02635 goto next2 02636 02637 movfw fad2 02638 movwf Ag_reg 02639 movwf Bg_reg 02640 movwf Cg_reg 02641 movwf Dg_reg 02642 02643 next2 02644 movlw 0x02 ; testing for 2 02645 subwf color,w 02646 btfss STATUS,Z 02647 goto next3 02648 02649 movfw fad2 02650 movwf Ab_reg MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 73 LOC OBJECT CODE LINE SOURCE TEXT VALUE 02651 movwf Bb_reg 02652 movwf Cb_reg 02653 movwf Db_reg 02654 02655 next3 02656 movfw pspeed 02657 call strobe_delay 02658 02659 return 02660 #endif 02661 02662 02663 #ifdef PATTERN3 02664 ;********************************************************************** 02665 table_type_3 02666 ;********************************************************************** 02667 ; 02668 ; 2 bytes 02669 ; 02670 ; RRRRGGGG BBBBCDDD 02671 ; 02672 ; RRRR = bit of red LEDs to turn on 02673 ; GGGG = bit of red LEDs to turn on 02674 ; BBBB = bit of red LEDs to turn on 02675 ; CDDD = a repeat counter. 02676 ; 02677 ; For badge blinkies 02678 ; C is 13th LED 02679 ; DDD = is repeat count 02680 02681 var p2count 02682 02683 call get_next_pattern_entry 02684 movwf in0 02685 02686 call get_next_pattern_entry 02687 movwf in1 02688 02689 #ifdef BADGE 02690 movlw b'00000111' 02691 #else 02692 movlw b'00001111' 02693 #endif 02694 andwf in1,w 02695 movwf p2count 02696 incf p2count,f 02697 rlf p2count,f 02698 rlf p2count,f 02699 02700 p2loop 02701 movfw pspeed 02702 call display_1bit 02703 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 74 LOC OBJECT CODE LINE SOURCE TEXT VALUE 02704 decfsz p2count,f 02705 goto p2loop 02706 02707 return 02708 #endif 02709 02710 02711 #ifdef PATTERN4 02712 ;********************************************************************** 02713 table_type_4 02714 ;********************************************************************** 02715 02716 ;use delay1 02717 ;use fad 02718 ;use color 02719 02720 02721 incf delay1,f 02722 02723 movf delay1,w ; testing for 0 02724 btfss STATUS,Z 02725 goto cf_loop2a 02726 02727 movlw TICK_VALUE ; we are using timer0 for the counts, 0 through tick value is LED off. 02728 movwf delay1 02729 02730 ; 02731 ; select a pattern 02732 ; 02733 comf fad,f 02734 movf fad,w ; testing for 0 02735 btfss fad,0 02736 incf color,f 02737 02738 cf_loop2a 02739 movf delay1,w ; fading up 02740 btfsc fad,0 02741 comf delay1,w ; dafinf down 02742 02743 movwf Ar_reg 02744 movwf Ag_reg 02745 movwf Ab_reg 02746 movwf Br_reg 02747 movwf Bg_reg 02748 movwf Bb_reg 02749 movwf Cr_reg 02750 movwf Cg_reg 02751 movwf Cb_reg 02752 movwf Dr_reg 02753 movwf Dg_reg 02754 movwf Db_reg 02755 02756 btfsc color,0 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 75 LOC OBJECT CODE LINE SOURCE TEXT VALUE 02757 clrf Ar_reg 02758 btfsc color,1 02759 clrf Ag_reg 02760 btfsc color,2 02761 clrf Ab_reg 02762 btfsc color,0 02763 clrf Br_reg 02764 btfsc color,1 02765 clrf Bg_reg 02766 btfsc color,2 02767 clrf Bb_reg 02768 btfsc color,0 02769 clrf Cr_reg 02770 btfsc color,1 02771 clrf Cg_reg 02772 btfsc color,2 02773 clrf Cb_reg 02774 btfsc color,0 02775 clrf Dr_reg 02776 btfsc color,1 02777 clrf Dg_reg 02778 btfsc color,2 02779 clrf Db_reg 02780 02781 btfsc color,3 02782 clrf Ar_reg 02783 btfsc color,3 02784 clrf Ag_reg 02785 btfsc color,3 02786 clrf Ab_reg 02787 02788 btfsc color,4 02789 clrf Br_reg 02790 btfsc color,4 02791 clrf Bg_reg 02792 btfsc color,4 02793 clrf Bb_reg 02794 02795 btfsc color,5 02796 clrf Cr_reg 02797 btfsc color,5 02798 clrf Cg_reg 02799 btfsc color,5 02800 clrf Cb_reg 02801 02802 btfsc color,6 02803 clrf Dr_reg 02804 btfsc color,6 02805 clrf Dg_reg 02806 btfsc color,6 02807 clrf Db_reg 02808 02809 movlw 0x20 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 76 LOC OBJECT CODE LINE SOURCE TEXT VALUE 02810 call strobe_delay 02811 02812 return 02813 #endif 02814 02815 #ifdef PATTERN5 02816 ;********************************************************************** 02817 table_type_5 02818 ;********************************************************************** 02819 ; 02820 ; 1 bytes 02821 ; 02822 ; ABCDEFX = 7 bits for LEDs. 02823 ; 02824 02825 var p2count 02826 02827 call get_next_pattern_entry 02828 movwf in0 02829 02830 movlw 0x04 ; call display 4 times, speed thing 02831 movwf p2count 02832 02833 p2loop 02834 movfw pspeed 02835 call display_1bit 02836 02837 decfsz p2count,f 02838 goto p2loop 02839 02840 return 02841 #endif 02842 02843 #ifdef PATTERN6 02844 ;********************************************************************** 042C 02845 table_type_6 02846 ;********************************************************************** 02847 ; 02848 ; 3 bytes 02849 ; 02850 ; AAAAAAAA AAAAAAAA AAADDDDD 02851 ; 02852 ; A = 19 bits of LED 02853 ; DDDDD = a repeat counter. 02854 02855 var p2count 0000006E M p2count equ mem 0000006F M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 02856 042C 2371 02857 call get_next_pattern_entry MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 77 LOC OBJECT CODE LINE SOURCE TEXT VALUE 042D 00E7 02858 movwf in0 02859 042E 2371 02860 call get_next_pattern_entry 042F 00E8 02861 movwf in1 02862 0430 2371 02863 call get_next_pattern_entry 0431 00E9 02864 movwf in2 02865 0432 301F 02866 movlw b'00011111' 0433 0569 02867 andwf in2,w 0434 00EE 02868 movwf p2count 0435 0AEE 02869 incf p2count,f 0436 0DEE 02870 rlf p2count,f 0437 0DEE 02871 rlf p2count,f 02872 0438 02873 p2loop 0438 086B 02874 movfw pspeed 0439 2495 02875 call display_1bit 02876 043A 0BEE 02877 decfsz p2count,f 043B 2C38 02878 goto p2loop 02879 043C 0008 02880 return 02881 #endif 02882 02883 #define BRIGHT1 0x40 02884 #define BRIGHT2 0xA0 02885 02886 #ifdef PATTERN7 02887 ;********************************************************************** 02888 table_type_7 02889 ;********************************************************************** 02890 ; 02891 ; 1 bytes 02892 ; 02893 ; ABBCCCCC 02894 ; 02895 ; A = shire Right/Left 02896 ; BB = two bit intensity to shift on 02897 ; CCCCC = Number of shifts to loop 02898 ; 02899 ; if CCCCC = 0x11111, specical case: turn all LEDs off. 02900 ; 02901 02902 var t7count 02903 02904 call get_next_pattern_entry 02905 movwf in0 02906 02907 movlw b'00011111' 02908 andwf in0,w 02909 movwf t7count 02910 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 78 LOC OBJECT CODE LINE SOURCE TEXT VALUE 02911 movlw b'00011111' ; if shiftcount is 31, then clear all LEDs 02912 subwf t7count,w 02913 btfss STATUS,Z 02914 goto t7_loop 02915 02916 clrf in0 ; quick way to clear all the LEDS. 02917 clrf in1 02918 clrf in2 02919 call display_1bit 02920 goto t7_return 02921 02922 02923 t7_loop 02924 btfsc in0,7 02925 goto t7_set19 02926 ; 02927 ; set LED 1 02928 movfw A1_A4_reg ; 18 -> 19 02929 movwf A4_A1_reg 02930 02931 movfw A2_A1_reg ; 17 -> 18 02932 movwf A1_A4_reg 02933 02934 movfw A1_A2_reg ; 16 -> 17 02935 movwf A2_A1_reg 02936 02937 movfw A2_A4_reg ; 15 -> 16 02938 movwf A1_A2_reg 02939 02940 movfw A4_A2_reg ; 14 -> 15 02941 movwf A2_A4_reg 02942 02943 movfw A0_A1_reg ; 13 -> 14 02944 movwf A4_A2_reg 02945 02946 movfw A1_A0_reg ; 12 -> 13 02947 movwf A0_A1_reg 02948 02949 movfw A0_A4_reg ; 11 -> 12 02950 movwf A1_A0_reg 02951 02952 movfw A4_A0_reg ; 10 -> 11 02953 movwf A0_A4_reg 02954 02955 movfw A0_A2_reg ; 09 -> 10 02956 movwf A4_A0_reg 02957 02958 movfw A2_A0_reg ; 08 -> 09 02959 movwf A0_A2_reg 02960 02961 movfw A5_A1_reg ; 07 -> 08 02962 movwf A2_A0_reg 02963 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 79 LOC OBJECT CODE LINE SOURCE TEXT VALUE 02964 movfw A1_A5_reg ; 06 -> 07 02965 movwf A5_A1_reg 02966 02967 movfw A5_A4_reg ; 05 -> 06 02968 movwf A1_A5_reg 02969 02970 movfw A4_A5_reg ; 04 -> 05 02971 movwf A5_A4_reg 02972 02973 movfw A5_A2_reg ; 03 -> 04 02974 movwf A4_A5_reg 02975 02976 movfw A2_A5_reg ; 02 -> 03 02977 movwf A5_A2_reg 02978 02979 movfw A5_A0_reg ; 01 -> 02 02980 movwf A2_A5_reg 02981 02982 clrf A5_A0_reg 02983 movlw BRIGHT1 02984 btfsc in0,5 02985 addwf A5_A0_reg,f 02986 movlw BRIGHT2 02987 btfsc in0,6 02988 addwf A5_A0_reg,f 02989 goto t7_cont 02990 ; 02991 ; set LED 19 02992 t7_set19 02993 movfw A2_A5_reg ; 02 -> 01 02994 movwf A5_A0_reg 02995 02996 movfw A5_A2_reg ; 03 -> 02 02997 movwf A2_A5_reg 02998 02999 movfw A4_A5_reg ; 04 -> 03 03000 movwf A5_A2_reg 03001 03002 movfw A5_A4_reg ; 05 -> 04 03003 movwf A4_A5_reg 03004 03005 movfw A1_A5_reg ; 06 -> 05 03006 movwf A5_A4_reg 03007 03008 movfw A5_A1_reg ; 07 -> 06 03009 movwf A1_A5_reg 03010 03011 movfw A2_A0_reg ; 08 -> 07 03012 movwf A5_A1_reg 03013 03014 movfw A0_A2_reg ; 09 -> 08 03015 movwf A2_A0_reg 03016 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 80 LOC OBJECT CODE LINE SOURCE TEXT VALUE 03017 movfw A4_A0_reg ; 10 -> 09 03018 movwf A0_A2_reg 03019 03020 movfw A0_A4_reg ; 11 -> 10 03021 movwf A4_A0_reg 03022 03023 movfw A1_A0_reg ; 12 -> 11 03024 movwf A0_A4_reg 03025 03026 movfw A0_A1_reg ; 13 -> 12 03027 movwf A1_A0_reg 03028 03029 movfw A4_A2_reg ; 14 -> 13 03030 movwf A0_A1_reg 03031 03032 movfw A2_A4_reg ; 15 -> 14 03033 movwf A4_A2_reg 03034 03035 movfw A1_A2_reg ; 16 -> 15 03036 movwf A2_A4_reg 03037 03038 movfw A2_A1_reg ; 17 -> 16 03039 movwf A1_A2_reg 03040 03041 movfw A1_A4_reg ; 18 -> 17 03042 movwf A2_A1_reg 03043 03044 movfw A4_A1_reg ; 19 -> 18 03045 movwf A1_A4_reg 03046 03047 clrf A4_A1_reg 03048 movlw BRIGHT1 03049 btfsc in0,5 03050 addwf A4_A1_reg,f 03051 movlw BRIGHT2 03052 btfsc in0,6 03053 addwf A4_A1_reg,f 03054 03055 t7_cont 03056 03057 movf pspeed,w 03058 call strobe_delay 03059 ; 03060 ; This is a quick hack, because without this button presses are not seen for minutes 03061 ; This early exit might impact the pattern getting displayed. 03062 ; 03063 btfsc button,0 ; if putton pressed show pattern id 03064 goto t7_return 03065 03066 btfsc IR_in_good,0 03067 goto t7_return 03068 03069 decfsz t7count,f MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 81 LOC OBJECT CODE LINE SOURCE TEXT VALUE 03070 goto t7_loop 03071 03072 t7_return 03073 return 03074 #endif 03075 03076 #ifdef PATTERN19 03077 ;********************************************************************** 043D 03078 table_type_19 03079 ;********************************************************************** 03080 ; 03081 ; 1 bytes 03082 ; 03083 ; ABBCDDEE xxxxFFFF 03084 ; 03085 ; A = shift Right/Left 03086 ; BB = Color1/Color2/Both 03087 ; C = Row/Col 03088 ; DD = two bit Red intensity to shift on 03089 ; EE = two bit Green intensity to shift on 03090 ; FFFF = Number of shifts to loop 03091 ; 03092 ; if FFFF = 0x11111, specical case: turn all LEDs off. 03093 ; 03094 03095 var t7count 0000006F M t7count equ mem 00000070 M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 03096 043D 2371 03097 call get_next_pattern_entry 043E 00E7 03098 movwf in0 03099 043F 2371 03100 call get_next_pattern_entry 0440 00E8 03101 movwf in1 03102 0441 300F 03103 movlw b'00001111' 0442 0568 03104 andwf in1,w 0443 00EF 03105 movwf t7count 03106 0444 300F 03107 movlw b'00001111' ; if shiftcount is 15, then clear all LEDs 0445 026F 03108 subwf t7count,w 0446 1D03 03109 btfss STATUS,Z 0447 2C4D 03110 goto t7_loop 03111 0448 01E7 03112 clrf in0 ; quick way to clear all the LEDS. 0449 01E8 03113 clrf in1 044A 01E9 03114 clrf in2 044B 2495 03115 call display_1bit 044C 2C8A 03116 goto t7_return 03117 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 82 LOC OBJECT CODE LINE SOURCE TEXT VALUE 03118 044D 03119 t7_loop 044D 1BE7 03120 btfsc in0,7 ; sift right or left? 044E 2C69 03121 goto t7_set19 03122 ; 03123 ; set LED 1 044F 1F67 03124 btfss in0,6 ; Green? 0450 2C68 03125 goto r_green_skip 0451 0834 03126 movfw A4_A1_reg ; 08G -> 09G 0452 00BA 03127 movwf A5_A4_reg 03128 0453 082B 03129 movfw A1_A0_reg ; 07G -> 08G 0454 00B4 03130 movwf A4_A1_reg 03131 0455 0839 03132 movfw A5_A2_reg ; 06G -> 07G 0456 00AB 03133 movwf A1_A0_reg 03134 0457 0835 03135 movfw A4_A2_reg ; 05G -> 06G 0458 00B9 03136 movwf A5_A2_reg 03137 0459 082F 03138 movfw A2_A0_reg ; 04G -> 05G 045A 00B5 03139 movwf A4_A2_reg 03140 045B 0838 03141 movfw A5_A1_reg ; 03G -> 04G 045C 00AF 03142 movwf A2_A0_reg 03143 045D 0837 03144 movfw A5_A0_reg ; 02G -> 03G 045E 00B8 03145 movwf A5_A1_reg 03146 045F 0833 03147 movfw A4_A0_reg ; 01G -> 02G 0460 00B7 03148 movwf A5_A0_reg 03149 0461 01B3 03150 clrf A4_A0_reg 0462 3040 03151 movlw BRIGHT1 0463 1867 03152 btfsc in0,0 0464 07B3 03153 addwf A4_A0_reg,f 0465 30A0 03154 movlw BRIGHT2 0466 18E7 03155 btfsc in0,1 0467 07B3 03156 addwf A4_A0_reg,f 0468 03157 r_green_skip 03158 #ifndef MONO 03159 ; 03160 ; set LED 1 03161 btfss in0,5 ; Red ? 03162 goto r_red_skip 03163 movfw A1_A4_reg ; 08R -> 09R 03164 movwf A4_A5_reg 03165 03166 movfw A0_A1_reg ; 07R -> 08R 03167 movwf A1_A4_reg 03168 03169 movfw A2_A5_reg ; 06R -> 07R 03170 movwf A0_A1_reg MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 83 LOC OBJECT CODE LINE SOURCE TEXT VALUE 03171 03172 movfw A2_A4_reg ; 05R -> 06R 03173 movwf A2_A5_reg 03174 03175 movfw A0_A2_reg ; 04R -> 05R 03176 movwf A2_A4_reg 03177 03178 movfw A1_A5_reg ; 03R -> 04R 03179 movwf A0_A2_reg 03180 03181 movfw A0_A5_reg ; 02R -> 03R 03182 movwf A1_A5_reg 03183 03184 movfw A0_A4_reg ; 01R -> 02R 03185 movwf A0_A5_reg 03186 03187 clrf A0_A4_reg 03188 movlw BRIGHT1 03189 btfsc in0,2 03190 addwf A0_A4_reg,f 03191 movlw BRIGHT2 03192 btfsc in0,3 03193 addwf A0_A4_reg,f 03194 #endif 0468 03195 r_red_skip 0468 2C82 03196 goto t7_cont 03197 03198 ; 03199 ; set LED 19 0469 03200 t7_set19 03201 0469 1F67 03202 btfss in0,6 ; Green? 046A 2C82 03203 goto l_green_skip 03204 046B 0837 03205 movfw A5_A0_reg ; 02G -> 01G 046C 00B3 03206 movwf A4_A0_reg 03207 046D 0838 03208 movfw A5_A1_reg ; 03G -> 02G 046E 00B7 03209 movwf A5_A0_reg 03210 046F 082F 03211 movfw A2_A0_reg ; 04G -> 03G 0470 00B8 03212 movwf A5_A1_reg 03213 0471 0835 03214 movfw A4_A2_reg ; 05G -> 04G 0472 00AF 03215 movwf A2_A0_reg 03216 0473 0839 03217 movfw A5_A2_reg ; 06G -> 05G 0474 00B5 03218 movwf A4_A2_reg 03219 0475 082B 03220 movfw A1_A0_reg ; 07G -> 06G 0476 00B9 03221 movwf A5_A2_reg 03222 0477 0834 03223 movfw A4_A1_reg ; 08G -> 07G MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 84 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0478 00AB 03224 movwf A1_A0_reg 03225 0479 083A 03226 movfw A5_A4_reg ; 09G -> 08G 047A 00B4 03227 movwf A4_A1_reg 03228 047B 01BA 03229 clrf A5_A4_reg 047C 3040 03230 movlw BRIGHT1 047D 1867 03231 btfsc in0,0 047E 07BA 03232 addwf A5_A4_reg,f 047F 30A0 03233 movlw BRIGHT2 0480 18E7 03234 btfsc in0,1 0481 07BA 03235 addwf A5_A4_reg,f 0482 03236 l_green_skip 03237 03238 #ifndef MONO 03239 03240 btfss in0,5 ; Red? 03241 goto l_red_skip 03242 03243 movfw A0_A5_reg ; 02R -> 01R 03244 movwf A0_A4_reg 03245 03246 movfw A1_A5_reg ; 03R -> 02R 03247 movwf A0_A5_reg 03248 03249 movfw A0_A2_reg ; 04R -> 03R 03250 movwf A1_A5_reg 03251 03252 movfw A2_A4_reg ; 05R -> 04R 03253 movwf A0_A2_reg 03254 03255 movfw A2_A5_reg ; 06R -> 05R 03256 movwf A2_A4_reg 03257 03258 movfw A0_A1_reg ; 07R -> 06R 03259 movwf A2_A5_reg 03260 03261 movfw A1_A4_reg ; 08R -> 07R 03262 movwf A0_A1_reg 03263 03264 movfw A4_A5_reg ; 09R -> 08R 03265 movwf A1_A4_reg 03266 03267 clrf A4_A5_reg 03268 movlw BRIGHT1 03269 btfsc in0,2 03270 addwf A4_A5_reg,f 03271 movlw BRIGHT2 03272 btfsc in0,3 03273 addwf A4_A5_reg,f 03274 03275 #endif 0482 03276 l_red_skip MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 85 LOC OBJECT CODE LINE SOURCE TEXT VALUE 03277 0482 03278 t7_cont 03279 0482 086B 03280 movf pspeed,w 0483 2340 03281 call strobe_delay 03282 ; 03283 ; This is a quick hack, because without this button presses are not seen for minutes 03284 ; This early exit might impact the pattern getting displayed. 03285 ; 0484 1842 03286 btfsc button,0 ; if putton pressed show pattern id 0485 2C8A 03287 goto t7_return 03288 0486 184A 03289 btfsc IR_in_good,0 0487 2C8A 03290 goto t7_return 03291 0488 0BEF 03292 decfsz t7count,f 0489 2C4D 03293 goto t7_loop 03294 048A 03295 t7_return 048A 0008 03296 return 03297 #endif 03298 03299 03300 #ifdef PATTERN8 03301 ;********************************************************************** 03302 table_type_8 ; - 19 LED fader 03303 ;********************************************************************** 03304 03305 var delay1 03306 var fad 03307 var color 03308 03309 03310 incf delay1,f 03311 03312 movf delay1,w ; testing for 0 03313 btfss STATUS,Z 03314 goto cf8_loop2a 03315 03316 movlw TICK_VALUE ; we are using timer0 for the counts, 0 through tick value is LED off. 03317 movwf delay1 03318 03319 ; 03320 ; select a pattern 03321 ; 03322 comf fad,f 03323 movf fad,w ; testing for 0 03324 btfss fad,0 03325 incf color,f 03326 03327 movlw 0xFD ; testing for greater then 3 03328 addwf color,w 03329 btfsc STATUS,C MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 86 LOC OBJECT CODE LINE SOURCE TEXT VALUE 03330 clrf color 03331 03332 #ifdef M3X3 03333 nop 03334 cf8_loop2a 03335 clrf A4_A0_reg ; 1G 03336 clrf A5_A0_reg ; 2G 03337 clrf A5_A1_reg ; 3G 03338 clrf A2_A0_reg ; 4G 03339 clrf A4_A2_reg ; 5G 03340 clrf A5_A2_reg ; 6G 03341 clrf A1_A0_reg ; 7G 03342 clrf A4_A1_reg ; 8G 03343 clrf A5_A4_reg ; 9G 03344 clrf A0_A4_reg ; 1R 03345 clrf A0_A5_reg ; 2R 03346 clrf A1_A5_reg ; 3R 03347 clrf A0_A2_reg ; 4R 03348 clrf A2_A4_reg ; 5R 03349 clrf A2_A5_reg ; 6R 03350 clrf A0_A1_reg ; 7R 03351 clrf A1_A4_reg ; 8R 03352 clrf A4_A5_reg ; 9R 03353 03354 movf delay1,w ; fading up 03355 btfsc fad,0 03356 comf delay1,w ; fading down 03357 03358 btfsc color,0 03359 goto t8_skip_r 03360 03361 movwf A4_A0_reg ; 1G 03362 movwf A5_A0_reg ; 2G 03363 movwf A5_A1_reg ; 3G 03364 movwf A2_A0_reg ; 4G 03365 movwf A4_A2_reg ; 5G 03366 movwf A5_A2_reg ; 6G 03367 movwf A1_A0_reg ; 7G 03368 movwf A4_A1_reg ; 8G 03369 movwf A5_A4_reg ; 9G 03370 03371 t8_skip_r 03372 btfsc color,1 03373 goto t8_skip_g 03374 03375 movwf A0_A4_reg ; 1R 03376 movwf A0_A5_reg ; 2R 03377 movwf A1_A5_reg ; 3R 03378 movwf A0_A2_reg ; 4R 03379 movwf A2_A4_reg ; 5R 03380 movwf A2_A5_reg ; 6R 03381 movwf A0_A1_reg ; 7R 03382 movwf A1_A4_reg ; 8R MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 87 LOC OBJECT CODE LINE SOURCE TEXT VALUE 03383 movwf A4_A5_reg ; 9R 03384 t8_skip_g 03385 03386 #else 03387 03388 nop 03389 cf8_loop2a 03390 movf delay1,w ; fading up 03391 btfsc fad,0 03392 comf delay1,w ; fading down 03393 03394 movwf A5_A0_reg ; 01 03395 movwf A2_A5_reg ; 02 03396 movwf A5_A2_reg ; 03 03397 movwf A4_A5_reg ; 04 03398 movwf A5_A4_reg ; 05 03399 movwf A1_A5_reg ; 06 03400 movwf A5_A1_reg ; 07 03401 movwf A2_A0_reg ; 08 03402 movwf A0_A2_reg ; 09 03403 movwf A4_A0_reg ; 10 03404 movwf A0_A4_reg ; 11 03405 movwf A1_A0_reg ; 12 03406 movwf A0_A1_reg ; 13 03407 movwf A4_A2_reg ; 14 03408 movwf A2_A4_reg ; 15 03409 movwf A1_A2_reg ; 16 03410 movwf A2_A1_reg ; 17 03411 movwf A1_A4_reg ; 18 03412 movwf A4_A1_reg ; 19 03413 #endif 03414 03415 movlw 0x03 03416 call strobe_delay 03417 03418 return 03419 #endif 03420 03421 #ifdef PATTERN9 03422 ;********************************************************************** 03423 table_type_9 03424 ;********************************************************************** 03425 ; 03426 ; 5 bytes 03427 ; 00000000 00000000 00111111 11111111 111111XX 03428 ; 11223344 55667788 99001122 33445566 778899XX 03429 ; RGRGRGRG RGRGRGRG RGRGRGRG RGRGRGRG RGRGRGXX 03430 ; 03431 ; XX = a repeat counter. 03432 03433 var p2count 03434 03435 call get_next_pattern_entry MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 88 LOC OBJECT CODE LINE SOURCE TEXT VALUE 03436 movwf in0 03437 03438 call get_next_pattern_entry 03439 movwf in1 03440 03441 call get_next_pattern_entry 03442 movwf in2 03443 03444 call get_next_pattern_entry 03445 movwf in3 03446 03447 call get_next_pattern_entry 03448 movwf in4 03449 03450 movlw b'00000011' 03451 andwf in4,w 03452 movwf p2count 03453 incf p2count,f 03454 rlf p2count,f 03455 rlf p2count,f 03456 03457 p2loop 03458 movfw pspeed 03459 call display_1bit 03460 03461 decfsz p2count,f 03462 goto p2loop 03463 03464 return 03465 #endif 03466 03467 #ifdef PATTERN10 03468 ;********************************************************************** 03469 table_type_10 03470 ;********************************************************************** 03471 ; 76543210 <-- bits 03472 ; AABBCCDD <-- LEDs 03473 ; 01010101 <-- stays on for 1 unit - b'01' 03474 ; 10101010 <-- stays on for 2 units - b'10' 03475 ; 11111111 <-- stays on for 3 units - b'11' 03476 03477 ; in0 LEDs 0,1 03478 ; in1 LEDs 2,3 03479 ; in2 LEDs 4,5 03480 ; in3 LED 6 03481 03482 call get_next_pattern_entry 03483 movwf in0 03484 03485 call get_next_pattern_entry 03486 movwf in1 03487 03488 call get_next_pattern_entry ;4rgb MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 89 LOC OBJECT CODE LINE SOURCE TEXT VALUE 03489 movwf in2 ;4rgb 03490 03491 call get_next_pattern_entry ;4rgb 03492 movwf in3 ;4rgb 03493 03494 03495 03496 movf pspeed,w 03497 movwf speed 03498 call display_2bit 03499 03500 return 03501 #endif 03502 03503 #ifdef PATTERN11 03504 ;********************************************************************** 03505 table_type_11 03506 ;********************************************************************** 03507 ; 76543210 <-- bits 03508 ; AABBCCDD <-- LEDs 03509 ; 01010101 <-- stays on for 1 unit - b'01' 03510 ; 10101010 <-- stays on for 2 units - b'10' 03511 ; 11111111 <-- stays on for 3 units - b'11' 03512 03513 ; in0 LEDs 0,1,3,4 03514 ; in1 LEDs 5,6,C 03515 03516 call get_next_pattern_entry 03517 movwf in0 03518 03519 call get_next_pattern_entry 03520 movwf in1 03521 03522 movf pspeed,w 03523 movwf speed 03524 call display_2bit 03525 03526 return 03527 #endif 03528 03529 #ifdef RANDOM 03530 03531 ;********************************************************************** 048B 03532 gen_random 03533 ;********************************************************************** 03534 03535 var random 00000070 M random equ mem 00000071 M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 03536 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 90 LOC OBJECT CODE LINE SOURCE TEXT VALUE 048B 0D70 03537 RLF random,W 048C 0D70 03538 RLF random,W 048D 1A70 03539 BTFSC random,4 048E 3A01 03540 XORLW 1 048F 1AF0 03541 BTFSC random,5 0490 3A01 03542 XORLW 1 0491 19F0 03543 BTFSC random,3 0492 3A01 03544 XORLW 1 0493 00F0 03545 MOVWF random 0494 0008 03546 return 03547 #endif 03548 03549 #ifdef PATTERN12 03550 ;********************************************************************** 03551 table_type_12 03552 ;********************************************************************** 03553 ; 03554 ; 5 bytes 03555 ; 00000000 00000000 00111111 11111111 111111XX 03556 ; 11223344 55667788 99001122 33445566 778899XX 03557 ; RGRGRGRG RGRGRGRG RGRGRGRG RGRGRGRG RGRGRGXX 03558 ; 03559 ; XX = a repeat counter. 03560 03561 call gen_random 03562 movwf in3 03563 03564 call gen_random 03565 movwf in0 03566 03567 call gen_random 03568 movwf in2 03569 03570 call gen_random 03571 movwf in1 03572 03573 call gen_random 03574 movwf in4 03575 03576 movfw pspeed 03577 call display_1bit 03578 03579 return 03580 #endif 03581 03582 #ifdef PATTERN13 03583 ;********************************************************************** 03584 table_type_13 03585 ;********************************************************************** 03586 ; 03587 ; 10 bytes 03588 ; 11112222 33334444 55556666 77778888 99990000 11112222 33334444 55556666 77778888 9999XXXX 03589 ; MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 91 LOC OBJECT CODE LINE SOURCE TEXT VALUE 03590 ; XX = a repeat counter. 03591 03592 call get_next_pattern_entry 03593 movwf in0 03594 03595 call get_next_pattern_entry 03596 movwf in1 03597 03598 call get_next_pattern_entry 03599 movwf in2 03600 03601 call get_next_pattern_entry 03602 movwf in3 03603 03604 call get_next_pattern_entry 03605 movwf in4 03606 03607 call get_next_pattern_entry 03608 movwf in5 03609 03610 call get_next_pattern_entry 03611 movwf in6 03612 03613 call get_next_pattern_entry 03614 movwf in7 03615 03616 call get_next_pattern_entry 03617 movwf in8 03618 03619 call get_next_pattern_entry 03620 movwf in9 03621 03622 movlw b'00001111' 03623 andwf in9,w 03624 movwf p2count 03625 incf p2count,f 03626 rlf p2count,f 03627 rlf p2count,f 03628 03629 p3loop 03630 movfw pspeed 03631 call display_2bit 03632 03633 decfsz p2count,f 03634 goto p3loop 03635 03636 return 03637 #endif 03638 03639 #ifdef PATTERN14 03640 ;********************************************************************** 03641 table_type_14 03642 ;********************************************************************** MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 92 LOC OBJECT CODE LINE SOURCE TEXT VALUE 03643 ; 03644 ; 5 bytes 03645 ; 11223344 55667788 99001122 33445566 778899XX 03646 ; 03647 ; XX = a repeat counter. 03648 03649 call get_next_pattern_entry 03650 movwf in0 03651 03652 call get_next_pattern_entry 03653 movwf in1 03654 03655 call get_next_pattern_entry 03656 movwf in2 03657 03658 call get_next_pattern_entry 03659 movwf in3 03660 03661 call get_next_pattern_entry 03662 movwf in4 03663 03664 movlw b'00000011' 03665 andwf in4,w 03666 movwf p2count 03667 incf p2count,f 03668 rlf p2count,f 03669 rlf p2count,f 03670 03671 p3loop 03672 movfw pspeed 03673 call display_2bit 03674 03675 decfsz p2count,f 03676 goto p3loop 03677 03678 return 03679 #endif 03680 03681 #ifdef PATTERN15 03682 ;********************************************************************** 03683 table_type_15 03684 ;********************************************************************** 03685 ; 03686 ; 6 bytes 03687 ; 0 1 2 3 4 5 03688 ; DDRRRRRR RRRRRRRR XXGGGGGG GGGGGGGG XXBBBBBB BBBBBBBB 03689 ; xx111110 00000000 xx111110 00000000 xx111110 00000000 03690 ; xx432109 87654321 xx432109 87654321 xx432109 87654321 03691 ; 03692 ; DD = delay counter 03693 ; XX = not used 03694 var p2count 03695 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 93 LOC OBJECT CODE LINE SOURCE TEXT VALUE 03696 call get_next_pattern_entry 03697 movwf in0 03698 03699 call get_next_pattern_entry 03700 movwf in1 03701 03702 call get_next_pattern_entry 03703 movwf in2 03704 03705 call get_next_pattern_entry 03706 movwf in3 03707 03708 call get_next_pattern_entry 03709 movwf in4 03710 03711 call get_next_pattern_entry 03712 movwf in5 03713 03714 movlw b'11000000' 03715 andwf in0,w 03716 movwf p2count 03717 bcf STATUS, C 03718 rrf p2count,f 03719 rrf p2count,f 03720 rrf p2count,f 03721 rrf p2count,f 03722 rrf p2count,f 03723 rrf p2count,f 03724 incf p2count,f 03725 03726 p3loop 03727 movfw pspeed 03728 call display_1bit 03729 03730 decfsz p2count,f 03731 goto p3loop 03732 03733 return 03734 #endif 03735 03736 #ifdef PATTERN17 03737 ;********************************************************************** 03738 table_type_17 03739 ;********************************************************************** 03740 ; 03741 ; 13 bytes 03742 ; 03743 ; AAAABBBB 03744 ; 03745 ; A = shire Right/Left 03746 ; BB = two bit intensity to shift on 03747 ; CCCCC = Number of shifts to loop 03748 ; MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 94 LOC OBJECT CODE LINE SOURCE TEXT VALUE 03749 ; if CCCCC = 0x11111, specical case: turn all LEDs off. 03750 ; 03751 03752 03753 call get_next_pattern_entry 03754 movwf in0 03755 03756 call get_next_pattern_entry 03757 movwf in1 03758 03759 call get_next_pattern_entry 03760 movwf in2 03761 03762 call get_next_pattern_entry 03763 movwf in3 03764 03765 call get_next_pattern_entry 03766 movwf in4 03767 03768 call get_next_pattern_entry 03769 movwf in5 03770 03771 call get_next_pattern_entry 03772 movwf in6 03773 03774 call get_next_pattern_entry 03775 movwf in7 03776 03777 call get_next_pattern_entry 03778 movwf in8 03779 03780 call get_next_pattern_entry 03781 movwf in9 03782 03783 call get_next_pattern_entry 03784 movwf in10 03785 03786 call get_next_pattern_entry 03787 movwf in11 03788 03789 call get_next_pattern_entry 03790 movwf p2count 03791 incf p2count,f 03792 03793 p17_loop 03794 03795 btfsc in0,7 03796 goto p17_fader 03797 03798 movfw pspeed 03799 call display_1bit 03800 03801 decfsz p2count,f MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 95 LOC OBJECT CODE LINE SOURCE TEXT VALUE 03802 goto p17_loop 03803 03804 return 03805 03806 p17_fader 03807 03808 pageselw rgb_stick_expand2 03809 call rgb_stick_expand2 03810 pageselw p17_fader 03811 03812 movf pspeed,w 03813 call strobe_delay 03814 03815 ; 03816 ; This is a quick hack, because without this button presses are not seen for minutes 03817 ; This early exit might impact the pattern getting displayed. 03818 ; 03819 btfsc button,0 ; if putton pressed show pattern id 03820 goto t17_return 03821 03822 btfsc IR_in_good,0 03823 goto t17_return 03824 03825 decfsz p2count,f 03826 goto p17_loop 03827 03828 t17_return 03829 return 03830 03831 #endif 03832 03833 #ifdef DISPLAY_1BIT_A 03834 ;********************************************************************** 03835 display_1bit ; Mono 6 LEDs, Badge LED add center (IR) for 7 03836 ;********************************************************************** 03837 03838 movwf speed ;w has the speed/delay 03839 03840 clrf Ar_reg 03841 btfsc in0,7 03842 comf Ar_reg,f 03843 03844 clrf Ag_reg 03845 btfsc in0,5 03846 comf Ag_reg,f 03847 03848 clrf Ab_reg 03849 btfsc in0,3 03850 comf Ab_reg,f 03851 03852 clrf Cr_reg 03853 btfsc in0,6 03854 comf Cr_reg,f MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 96 LOC OBJECT CODE LINE SOURCE TEXT VALUE 03855 03856 clrf Cg_reg 03857 btfsc in0,4 03858 comf Cg_reg,f 03859 03860 clrf Cb_reg 03861 btfsc in0,2 03862 comf Cb_reg,f 03863 03864 #ifdef BADGE 03865 clrf Center_reg 03866 btfsc in0,1 03867 comf Center_reg,f 03868 #endif 03869 03870 03871 movf speed,w 03872 call strobe_delay 03873 03874 return 03875 #endif 03876 #ifdef DISPLAY_1BIT_B 03877 ;********************************************************************** 03878 display_1bit ; 19 Circle LEDs (38 LEDs) 03879 ;********************************************************************** 03880 03881 movwf speed ;w has the speed/delay 03882 03883 clrf A1_A2_reg ; 1 03884 clrf A1_C0_reg ; 2 03885 clrf A2_C0_reg ; 3 03886 clrf A2_C1_reg ; 4 03887 clrf C0_C1_reg ; 5 03888 clrf C0_C2_reg ; 6 03889 clrf C0_C4_reg ; 7 03890 clrf C1_C4_reg ; 8 03891 clrf A0_C1_reg ; 9 03892 clrf A0_C0_reg ; 10 03893 clrf A0_A2_reg ; 11 03894 clrf A0_A1_reg ; 12 03895 clrf A1_C2_reg ; 13 03896 clrf A1_C1_reg ; 14 03897 clrf A2_C2_reg ; 15 03898 clrf A2_C4_reg ; 16 03899 clrf A0_C4_reg ; 17 03900 clrf A0_C2_reg ; 18 03901 clrf A1_C4_reg ; 19 03902 clrf C1_C2_reg ; no LED 03903 clrf C2_C4_reg ; no LED 03904 03905 #ifndef MONO 03906 movlw 0xf0 03907 btfsc in2,1 ; 12R MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 97 LOC OBJECT CODE LINE SOURCE TEXT VALUE 03908 iorwf A0_A1_reg,f 03909 03910 movlw 0xf0 03911 btfsc in2,3 ; 11R 03912 iorwf A0_A2_reg,f 03913 03914 movlw 0xf0 03915 btfsc in2,5 ; 10R 03916 iorwf A0_C0_reg,f 03917 03918 movlw 0xf0 03919 btfsc in2,7 ; 9R 03920 iorwf A0_C1_reg,f 03921 03922 movlw 0xf0 03923 btfsc in4,5 ; 18R 03924 iorwf A0_C2_reg,f 03925 03926 movlw 0xf0 03927 btfsc in4,7 ; 17R 03928 iorwf A0_C4_reg,f 03929 #endif 03930 03931 movlw 0x0f 03932 btfsc in2,0 ; 12G 03933 iorwf A0_A1_reg,f 03934 03935 #ifndef MONO 03936 movlw 0xf0 03937 btfsc in0,7 ; 1R 03938 iorwf A1_A2_reg,f 03939 03940 movlw 0xf0 03941 btfsc in0,5 ; 2R 03942 iorwf A1_C0_reg,f 03943 03944 movlw 0xf0 03945 btfsc in3,5 03946 iorwf A1_C1_reg,f ; 14R 03947 03948 movlw 0xf0 03949 btfsc in3,7 ; 13R 03950 iorwf A1_C2_reg,f 03951 03952 movlw 0xf0 03953 btfsc in4,3 ; 19R 03954 iorwf A1_C4_reg,f 03955 #endif 03956 03957 movlw 0x0f 03958 btfsc in2,2 ; 11G 03959 iorwf A0_A2_reg,f 03960 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 98 LOC OBJECT CODE LINE SOURCE TEXT VALUE 03961 movlw 0x0f 03962 btfsc in0,6 ; 1G 03963 iorwf A1_A2_reg,f 03964 03965 #ifndef MONO 03966 movlw 0xf0 03967 btfsc in0,3 ; 3R 03968 iorwf A2_C0_reg,f 03969 03970 movlw 0xf0 03971 btfsc in0,1 ; 4R 03972 iorwf A2_C1_reg,f 03973 03974 movlw 0xf0 03975 btfsc in3,3 ; 15R 03976 iorwf A2_C2_reg,f 03977 03978 movlw 0xf0 03979 btfsc in3,1 ; 16R 03980 iorwf A2_C4_reg,f 03981 #endif 03982 03983 movlw 0x0f 03984 btfsc in2,4 ; 10G 03985 iorwf A0_C0_reg,f 03986 03987 movlw 0x0f 03988 btfsc in0,4 ; 2G 03989 iorwf A1_C0_reg,f 03990 03991 movlw 0x0f 03992 btfsc in0,2 ; 3G 03993 iorwf A2_C0_reg,f 03994 03995 #ifndef MONO 03996 movlw 0xf0 03997 btfsc in1,7 ; 5R 03998 iorwf C0_C1_reg,f 03999 04000 movlw 0xf0 04001 btfsc in1,5 ; 6R 04002 iorwf C0_C2_reg,f 04003 04004 movlw 0xf0 04005 btfsc in1,3 ; 7R 04006 iorwf C0_C4_reg,f 04007 #endif 04008 04009 movlw 0x0f 04010 btfsc in2,6 ; 9G 04011 iorwf A0_C1_reg,f 04012 04013 movlw 0x0f MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 99 LOC OBJECT CODE LINE SOURCE TEXT VALUE 04014 btfsc in3,4 ; 14G 04015 iorwf A1_C1_reg,f 04016 04017 movlw 0x0f 04018 btfsc in0,0 ; 4G 04019 iorwf A2_C1_reg,f 04020 04021 movlw 0x0f 04022 btfsc in1,6 ; 5G 04023 iorwf C0_C1_reg,f 04024 04025 04026 #ifndef MONO 04027 movlw 0xf0 04028 btfsc in1,1 ; 8R 04029 iorwf C1_C4_reg,f 04030 #endif 04031 04032 movlw 0x0f 04033 btfsc in4,4 04034 iorwf A0_C2_reg,f ; 18G 04035 04036 movlw 0x0f 04037 btfsc in3,6 ; 13G 04038 iorwf A1_C2_reg,f 04039 04040 movlw 0x0f 04041 btfsc in3,2 04042 iorwf A2_C2_reg,f ; 15G 04043 04044 movlw 0x0f 04045 btfsc in1,4 ; 6G 04046 iorwf C0_C2_reg,f 04047 04048 movlw 0x0f 04049 btfsc in4,6 ; 17G 04050 iorwf A0_C4_reg,f 04051 04052 movlw 0x0f 04053 btfsc in4,2 ; 19G 04054 iorwf A1_C4_reg,f 04055 04056 movlw 0x0f 04057 btfsc in3,0 ; 16G 04058 iorwf A2_C4_reg,f 04059 04060 movlw 0x0f 04061 btfsc in1,2 ; 7G 04062 iorwf C0_C4_reg,f 04063 04064 movlw 0x0f 04065 btfsc in1,0 04066 iorwf C1_C4_reg,f ; 8G MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 100 LOC OBJECT CODE LINE SOURCE TEXT VALUE 04067 04068 04069 movf speed,w 04070 call strobe_delay 04071 04072 return 04073 #endif 04074 #ifdef DISPLAY_1BIT_C 04075 ;********************************************************************** 04076 display_1bit ; 12 LEDs, BI6 & 4RGB Badge LED add center (IR) for 13 04077 ;********************************************************************** 04078 04079 movwf speed ;w has the speed/delay 04080 04081 clrf Ar_reg 04082 btfsc in0,7 04083 comf Ar_reg,f 04084 04085 clrf Ag_reg 04086 btfsc in0,3 04087 comf Ag_reg,f 04088 04089 clrf Ab_reg 04090 btfsc in1,7 04091 comf Ab_reg,f 04092 04093 clrf Br_reg 04094 btfsc in0,6 04095 comf Br_reg,f 04096 04097 clrf Bg_reg 04098 btfsc in0,2 04099 comf Bg_reg,f 04100 04101 clrf Bb_reg 04102 btfsc in1,6 04103 comf Bb_reg,f 04104 04105 clrf Cr_reg 04106 btfsc in0,5 04107 comf Cr_reg,f 04108 04109 clrf Cg_reg 04110 btfsc in0,1 04111 comf Cg_reg,f 04112 04113 clrf Cb_reg 04114 btfsc in1,5 04115 comf Cb_reg,f 04116 04117 clrf Dr_reg 04118 btfsc in0,4 04119 comf Dr_reg,f MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 101 LOC OBJECT CODE LINE SOURCE TEXT VALUE 04120 04121 clrf Dg_reg 04122 btfsc in0,0 04123 comf Dg_reg,f 04124 04125 clrf Db_reg 04126 btfsc in1,4 04127 comf Db_reg,f 04128 04129 #ifdef BADGE 04130 clrf Center_reg 04131 btfsc in1,3 04132 comf Center_reg,f 04133 #endif 04134 04135 movf speed,w 04136 call strobe_delay 04137 04138 return 04139 #endif 04140 #ifdef DISPLAY_1BIT_D 04141 ;********************************************************************** 04142 display_1bit ; 20 LEDs 04143 ;********************************************************************** 04144 04145 movwf speed ;w has the speed/delay 04146 04147 clrf A0_A5_reg ; IR 04148 04149 clrf A5_A0_reg ; 01 04150 btfsc in0,7 04151 comf A5_A0_reg,f 04152 04153 clrf A2_A5_reg ; 02 04154 btfsc in0,6 04155 comf A2_A5_reg,f 04156 04157 clrf A5_A2_reg ; 03 04158 btfsc in0,5 04159 comf A5_A2_reg,f 04160 04161 clrf A4_A5_reg ; 04 04162 btfsc in0,4 04163 comf A4_A5_reg,f 04164 04165 clrf A5_A4_reg ; 05 04166 btfsc in0,3 04167 comf A5_A4_reg,f 04168 04169 clrf A1_A5_reg ; 06 04170 btfsc in0,2 04171 comf A1_A5_reg,f 04172 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 102 LOC OBJECT CODE LINE SOURCE TEXT VALUE 04173 clrf A5_A1_reg ; 07 04174 btfsc in0,1 04175 comf A5_A1_reg,f 04176 04177 clrf A2_A0_reg ; 08 04178 btfsc in0,0 04179 comf A2_A0_reg,f 04180 04181 clrf A0_A2_reg ; 09 04182 btfsc in1,7 04183 comf A0_A2_reg,f 04184 04185 clrf A4_A0_reg ; 10 04186 btfsc in1,6 04187 comf A4_A0_reg,f 04188 04189 clrf A0_A4_reg ; 11 04190 btfsc in1,5 04191 comf A0_A4_reg,f 04192 04193 clrf A1_A0_reg ; 12 04194 btfsc in1,4 04195 comf A1_A0_reg,f 04196 04197 clrf A0_A1_reg ; 13 04198 btfsc in1,3 04199 comf A0_A1_reg,f 04200 04201 clrf A4_A2_reg ; 14 04202 btfsc in1,2 04203 comf A4_A2_reg,f 04204 04205 clrf A2_A4_reg ; 15 04206 btfsc in1,1 04207 comf A2_A4_reg,f 04208 04209 clrf A1_A2_reg ; 16 04210 btfsc in1,0 04211 comf A1_A2_reg,f 04212 04213 clrf A2_A1_reg ; 17 04214 btfsc in2,7 04215 comf A2_A1_reg,f 04216 04217 clrf A1_A4_reg ; 18 04218 btfsc in2,6 04219 comf A1_A4_reg,f 04220 04221 clrf A4_A1_reg ; 19 04222 btfsc in2,5 04223 comf A4_A1_reg,f 04224 04225 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 103 LOC OBJECT CODE LINE SOURCE TEXT VALUE 04226 movf speed,w 04227 call strobe_delay 04228 04229 return 04230 #endif 04231 04232 #ifdef DISPLAY_1BIT_F 04233 ;********************************************************************** 0495 04234 display_1bit ; 20 LEDs 3x3 04235 ;********************************************************************** 04236 0495 00EA 04237 movwf speed ;w has the speed/delay 04238 0496 01B3 04239 clrf A4_A0_reg ; 1G 0497 1BE7 04240 btfsc in0,7 0498 09B3 04241 comf A4_A0_reg,f 04242 0499 01B7 04243 clrf A5_A0_reg ; 2G 049A 1AE7 04244 btfsc in0,5 049B 09B7 04245 comf A5_A0_reg,f 04246 049C 01B8 04247 clrf A5_A1_reg ; 3G 049D 19E7 04248 btfsc in0,3 049E 09B8 04249 comf A5_A1_reg,f 04250 049F 01AF 04251 clrf A2_A0_reg ; 4G 04A0 18E7 04252 btfsc in0,1 04A1 09AF 04253 comf A2_A0_reg,f 04254 04A2 01B5 04255 clrf A4_A2_reg ; 5G 04A3 1BE8 04256 btfsc in1,7 04A4 09B5 04257 comf A4_A2_reg,f 04258 04A5 01B9 04259 clrf A5_A2_reg ; 6G 04A6 1AE8 04260 btfsc in1,5 04A7 09B9 04261 comf A5_A2_reg,f 04262 04A8 01AB 04263 clrf A1_A0_reg ; 7G 04A9 19E8 04264 btfsc in1,3 04AA 09AB 04265 comf A1_A0_reg,f 04266 04AB 01B4 04267 clrf A4_A1_reg ; 8G 04AC 18E8 04268 btfsc in1,1 04AD 09B4 04269 comf A4_A1_reg,f 04270 04AE 01BA 04271 clrf A5_A4_reg ; 9G 04AF 1BE9 04272 btfsc in2,7 04B0 09BA 04273 comf A5_A4_reg,f 04274 04275 #ifdef MONO 04B1 01A9 04276 clrf A0_A4_reg ; 1R 04B2 01AA 04277 clrf A0_A5_reg ; 2R 04B3 01AE 04278 clrf A1_A5_reg ; 3R MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 104 LOC OBJECT CODE LINE SOURCE TEXT VALUE 04B4 01A8 04279 clrf A0_A2_reg ; 4R 04B5 01B1 04280 clrf A2_A4_reg ; 5R 04B6 01B2 04281 clrf A2_A5_reg ; 6R 04B7 01A7 04282 clrf A0_A1_reg ; 7R 04B8 01AD 04283 clrf A1_A4_reg ; 8R 04B9 01B6 04284 clrf A4_A5_reg ; 9R 04285 04286 #else 04287 04288 clrf A0_A4_reg ; 1R 04289 btfsc in0,6 04290 comf A0_A4_reg,f 04291 04292 clrf A0_A5_reg ; 2R 04293 btfsc in0,4 04294 comf A0_A5_reg,f 04295 04296 clrf A1_A5_reg ; 3R 04297 btfsc in0,2 04298 comf A1_A5_reg,f 04299 04300 clrf A0_A2_reg ; 4R 04301 btfsc in0,0 04302 comf A0_A2_reg,f 04303 04304 clrf A2_A4_reg ; 5R 04305 btfsc in1,6 04306 comf A2_A4_reg,f 04307 04308 clrf A2_A5_reg ; 6R 04309 btfsc in1,4 04310 comf A2_A5_reg,f 04311 04312 clrf A0_A1_reg ; 7R 04313 btfsc in1,2 04314 comf A0_A1_reg,f 04315 04316 clrf A1_A4_reg ; 8R 04317 btfsc in1,0 04318 comf A1_A4_reg,f 04319 04320 clrf A4_A5_reg ; 9R 04321 btfsc in2,6 04322 comf A4_A5_reg,f 04323 #endif 04324 04BA 01AC 04325 clrf A1_A2_reg ; 16 IR 04BB 01B0 04326 clrf A2_A1_reg ; 17 IR 04327 04328 04329 04BC 086A 04330 movf speed,w 04BD 2340 04331 call strobe_delay MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 105 LOC OBJECT CODE LINE SOURCE TEXT VALUE 04332 04BE 0008 04333 return 04334 #endif 04335 04336 #ifdef DISPLAY_2BIT_A 04337 ;********************************************************************** 04338 display_2bit 04339 ;********************************************************************** 04340 movf speed,w ;enter here if repeat count is in speed 04341 display_w_2bit ;enter here if repeat count is in W reg 04342 04343 ; 76543210 <-- bits 04344 ; AABBCCDD <-- LEDs 04345 ; 01010101 <-- stays on for 1 unit - b'01' 04346 ; 10101010 <-- stays on for 2 units - b'10' 04347 ; 11111111 <-- stays on for 3 units - b'11' 04348 04349 ; in0 LEDs 1,2,3,4 04350 ; in1 LEDs 5,6,C 04351 04352 04353 clrf Ar_reg 04354 movlw BRIGHT1 04355 btfsc in0,6 04356 addwf Ar_reg,f 04357 movlw BRIGHT2 04358 btfsc in0,7 04359 addwf Ar_reg,f 04360 04361 clrf Ag_reg 04362 movlw BRIGHT1 04363 btfsc in0,2 04364 addwf Ag_reg,f 04365 movlw BRIGHT2 04366 btfsc in0,3 04367 addwf Ag_reg,f 04368 04369 clrf Ab_reg 04370 movlw BRIGHT1 04371 btfsc in1,6 04372 addwf Ab_reg,f 04373 movlw BRIGHT2 04374 btfsc in1,7 04375 addwf Ab_reg,f 04376 04377 clrf Cr_reg 04378 movlw BRIGHT1 04379 btfsc in0,4 04380 addwf Cr_reg,f 04381 movlw BRIGHT2 04382 btfsc in0,5 04383 addwf Cr_reg,f 04384 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 106 LOC OBJECT CODE LINE SOURCE TEXT VALUE 04385 clrf Cg_reg 04386 movlw BRIGHT1 04387 btfsc in0,0 04388 addwf Cg_reg,f 04389 movlw BRIGHT2 04390 btfsc in0,1 04391 addwf Cg_reg,f 04392 04393 clrf Cb_reg 04394 movlw BRIGHT1 04395 btfsc in1,4 04396 addwf Cb_reg,f 04397 movlw BRIGHT2 04398 btfsc in1,5 04399 addwf Cb_reg,f 04400 04401 #ifdef BADGE 04402 clrf Center_reg 04403 movlw BRIGHT1 04404 btfsc in1,2 04405 addwf Center_reg,f 04406 movlw BRIGHT2 04407 btfsc in1,3 04408 addwf Center_reg,f 04409 #endif 04410 04411 movf speed,w 04412 call strobe_delay 04413 movf speed,w 04414 call strobe_delay 04415 movf speed,w 04416 call strobe_delay 04417 04418 return 04419 #endif 04420 04421 #ifdef DISPLAY_2BIT_C 04422 ;********************************************************************** 04423 display_2bit 04424 ;********************************************************************** 04425 movf speed,w ;enter here if repeat count is in speed 04426 display_w_2bit ;enter here if repeat count is in W reg 04427 04428 ; 76543210 <-- bits 04429 ; AABBCCDD <-- LEDs 04430 ; 01010101 <-- stays on for 1 unit - b'01' 04431 ; 10101010 <-- stays on for 2 units - b'10' 04432 ; 11111111 <-- stays on for 3 units - b'11' 04433 04434 ; in0 red 04435 ; in1 green 04436 ; in2 blue 04437 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 107 LOC OBJECT CODE LINE SOURCE TEXT VALUE 04438 clrf Ar_reg 04439 movlw BRIGHT1 04440 btfsc in0,6 04441 addwf Ar_reg,f 04442 movlw BRIGHT2 04443 btfsc in0,7 04444 addwf Ar_reg,f 04445 04446 clrf Ag_reg 04447 movlw BRIGHT1 04448 btfsc in1,6 04449 addwf Ag_reg,f 04450 movlw BRIGHT2 04451 btfsc in1,7 04452 addwf Ag_reg,f 04453 04454 clrf Ab_reg 04455 movlw BRIGHT1 04456 btfsc in2,6 04457 addwf Ab_reg,f 04458 movlw BRIGHT2 04459 btfsc in2,7 04460 addwf Ab_reg,f 04461 04462 clrf Br_reg 04463 movlw BRIGHT1 04464 btfsc in0,4 04465 addwf Br_reg,f 04466 movlw BRIGHT2 04467 btfsc in0,5 04468 addwf Br_reg,f 04469 04470 clrf Bg_reg 04471 movlw BRIGHT1 04472 btfsc in1,4 04473 addwf Bg_reg,f 04474 movlw BRIGHT2 04475 btfsc in1,5 04476 addwf Bg_reg,f 04477 04478 clrf Bb_reg 04479 movlw BRIGHT1 04480 btfsc in2,4 04481 addwf Bb_reg,f 04482 movlw BRIGHT2 04483 btfsc in2,5 04484 addwf Bb_reg,f 04485 04486 clrf Cr_reg 04487 movlw BRIGHT1 04488 btfsc in0,2 04489 addwf Cr_reg,f 04490 movlw BRIGHT2 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 108 LOC OBJECT CODE LINE SOURCE TEXT VALUE 04491 btfsc in0,3 04492 addwf Cr_reg,f 04493 04494 clrf Cg_reg 04495 movlw BRIGHT1 04496 btfsc in1,2 04497 addwf Cg_reg,f 04498 movlw BRIGHT2 04499 btfsc in1,3 04500 addwf Cg_reg,f 04501 04502 clrf Cb_reg 04503 movlw BRIGHT1 04504 btfsc in2,2 04505 addwf Cb_reg,f 04506 movlw BRIGHT2 04507 btfsc in2,3 04508 addwf Cb_reg,f 04509 04510 clrf Dr_reg 04511 movlw BRIGHT1 04512 btfsc in0,0 04513 addwf Dr_reg,f 04514 movlw BRIGHT2 04515 btfsc in0,1 04516 addwf Dr_reg,f 04517 04518 clrf Dg_reg 04519 movlw BRIGHT1 04520 btfsc in1,0 04521 addwf Dg_reg,f 04522 movlw BRIGHT2 04523 btfsc in1,1 04524 addwf Dg_reg,f 04525 04526 clrf Db_reg 04527 movlw BRIGHT1 04528 btfsc in2,0 04529 addwf Db_reg,f 04530 movlw BRIGHT2 04531 btfsc in2,1 04532 addwf Db_reg,f 04533 04534 #ifdef BADGE 04535 clrf Center_reg 04536 movlw BRIGHT1 04537 btfsc in3,6 04538 addwf Center_reg,f 04539 movlw BRIGHT2 04540 btfsc in3,7 04541 addwf Center_reg,f 04542 #endif 04543 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 109 LOC OBJECT CODE LINE SOURCE TEXT VALUE 04544 movf speed,w 04545 call strobe_delay 04546 movf speed,w 04547 call strobe_delay 04548 movf speed,w 04549 call strobe_delay 04550 04551 return 04552 #endif 04553 04554 #define BRIGHT1H 0xA0 04555 #define BRIGHT2H 0x40 04556 #define BRIGHT1L 0x0A 04557 #define BRIGHT2L 0x04 04558 04559 04560 #ifdef DISPLAY_2BIT_D 04561 ;********************************************************************** 04562 display_2bit ; 19 Circle LEDs (38 LEDs) 04563 ;********************************************************************** 04564 04565 movwf speed ;w has the speed/delay 04566 04567 clrf A1_A2_reg ; 1 04568 clrf A1_C0_reg ; 2 04569 clrf A2_C0_reg ; 3 04570 clrf A2_C1_reg ; 4 04571 clrf C0_C1_reg ; 5 04572 clrf C0_C2_reg ; 6 04573 clrf C0_C4_reg ; 7 04574 clrf C1_C4_reg ; 8 04575 clrf A0_C1_reg ; 9 04576 clrf A0_C0_reg ; 10 04577 clrf A0_A2_reg ; 11 04578 clrf A0_A1_reg ; 12 04579 clrf A1_C2_reg ; 13 04580 clrf A1_C1_reg ; 14 04581 clrf A2_C2_reg ; 15 04582 clrf A2_C4_reg ; 16 04583 clrf A0_C4_reg ; 17 04584 clrf A0_C2_reg ; 18 04585 clrf A1_C4_reg ; 19 04586 clrf C1_C2_reg ; no LED 04587 clrf C2_C4_reg ; no LED 04588 04589 movlw BRIGHT1H 04590 btfsc in0,7 ; 1R (high bit) 04591 addwf A1_A2_reg,f 04592 movlw BRIGHT2H 04593 btfsc in0,6 ; 1R (low bit) 04594 addwf A1_A2_reg,f 04595 04596 movlw BRIGHT1L MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 110 LOC OBJECT CODE LINE SOURCE TEXT VALUE 04597 btfsc in0,5 ; 1G (high bit) 04598 addwf A1_A2_reg,f 04599 movlw BRIGHT2L 04600 btfsc in0,4 ; 1G (low bit) 04601 addwf A1_A2_reg,f 04602 04603 movlw BRIGHT1H 04604 btfsc in0,3 ; 2R (high bit) 04605 addwf A1_C0_reg,f 04606 movlw BRIGHT2H 04607 btfsc in0,2 ; 2R (low bit) 04608 addwf A1_C0_reg,f 04609 04610 movlw BRIGHT1L 04611 btfsc in0,1 ; 2G (high bit) 04612 addwf A1_C0_reg,f 04613 movlw BRIGHT2L 04614 btfsc in0,0 ; 2G (low bit) 04615 addwf A1_C0_reg,f 04616 04617 movlw BRIGHT1H 04618 btfsc in1,7 ; 3R (high bit) 04619 addwf A2_C0_reg,f 04620 movlw BRIGHT2H 04621 btfsc in1,6 ; 3R (low bit) 04622 addwf A2_C0_reg,f 04623 04624 movlw BRIGHT1L 04625 btfsc in1,5 ; 3G (high bit) 04626 addwf A2_C0_reg,f 04627 movlw BRIGHT2L 04628 btfsc in1,4 ; 3G (low bit) 04629 addwf A2_C0_reg,f 04630 04631 movlw BRIGHT1H 04632 btfsc in1,3 ; 4R (high bit) 04633 addwf A2_C1_reg,f 04634 movlw BRIGHT2H 04635 btfsc in1,2 ; 4R (low bit) 04636 addwf A2_C1_reg,f 04637 04638 movlw BRIGHT1L 04639 btfsc in1,1 ; 4G (high bit) 04640 addwf A2_C1_reg,f 04641 movlw BRIGHT2L 04642 btfsc in1,0 ; 4G (low bit) 04643 addwf A2_C1_reg,f 04644 04645 movlw BRIGHT1H 04646 btfsc in2,7 ; 5R (high bit) 04647 addwf C0_C1_reg,f 04648 movlw BRIGHT2H 04649 btfsc in2,6 ; 5R (low bit) MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 111 LOC OBJECT CODE LINE SOURCE TEXT VALUE 04650 addwf C0_C1_reg,f 04651 04652 movlw BRIGHT1L 04653 btfsc in2,5 ; 5G (high bit) 04654 addwf C0_C1_reg,f 04655 movlw BRIGHT2L 04656 btfsc in2,4 ; 5G (low bit) 04657 addwf C0_C1_reg,f 04658 04659 movlw BRIGHT1H 04660 btfsc in2,3 ; 6R (high bit) 04661 addwf C0_C2_reg,f 04662 movlw BRIGHT2H 04663 btfsc in2,2 ; 6R (low bit) 04664 addwf C0_C2_reg,f 04665 04666 movlw BRIGHT1L 04667 btfsc in2,1 ; 6G (high bit) 04668 addwf C0_C2_reg,f 04669 movlw BRIGHT2L 04670 btfsc in2,0 ; 6G (low bit) 04671 addwf C0_C2_reg,f 04672 04673 movlw BRIGHT1H 04674 btfsc in3,7 ; 7R (high bit) 04675 addwf C0_C4_reg,f 04676 movlw BRIGHT2H 04677 btfsc in3,6 ; 7R (low bit) 04678 addwf C0_C4_reg,f 04679 04680 movlw BRIGHT1L 04681 btfsc in3,5 ; 7G (high bit) 04682 addwf C0_C4_reg,f 04683 movlw BRIGHT2L 04684 btfsc in3,4 ; 7G (low bit) 04685 addwf C0_C4_reg,f 04686 04687 movlw BRIGHT1H 04688 btfsc in3,3 ; 8R (high bit) 04689 addwf C1_C4_reg,f 04690 movlw BRIGHT2H 04691 btfsc in3,2 ; 8R (low bit) 04692 addwf C1_C4_reg,f 04693 04694 movlw BRIGHT1L 04695 btfsc in3,1 ; 8G (high bit) 04696 addwf C1_C4_reg,f 04697 movlw BRIGHT2L 04698 btfsc in3,0 ; 8G (low bit) 04699 addwf C1_C4_reg,f 04700 04701 movlw BRIGHT1H 04702 btfsc in4,7 ; 9R (high bit) MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 112 LOC OBJECT CODE LINE SOURCE TEXT VALUE 04703 addwf A0_C1_reg,f 04704 movlw BRIGHT2H 04705 btfsc in4,6 ; 9R (low bit) 04706 addwf A0_C1_reg,f 04707 04708 movlw BRIGHT1L 04709 btfsc in4,5 ; 9G (high bit) 04710 addwf A0_C1_reg,f 04711 movlw BRIGHT2L 04712 btfsc in4,4 ; 9G (low bit) 04713 addwf A0_C1_reg,f 04714 04715 movlw BRIGHT1H 04716 btfsc in4,3 ; 10R (high bit) 04717 addwf A0_C0_reg,f 04718 movlw BRIGHT2H 04719 btfsc in4,2 ; 10R (low bit) 04720 addwf A0_C0_reg,f 04721 04722 movlw BRIGHT1L 04723 btfsc in4,1 ; 10G (high bit) 04724 addwf A0_C0_reg,f 04725 movlw BRIGHT2L 04726 btfsc in4,0 ; 10G (low bit) 04727 addwf A0_C0_reg,f 04728 04729 movlw BRIGHT1H 04730 btfsc in5,7 ; 11R (high bit) 04731 addwf A0_A2_reg,f 04732 movlw BRIGHT2H 04733 btfsc in5,6 ; 11R (low bit) 04734 addwf A0_A2_reg,f 04735 04736 movlw BRIGHT1L 04737 btfsc in5,5 ; 11G (high bit) 04738 addwf A0_A2_reg,f 04739 movlw BRIGHT2L 04740 btfsc in5,4 ; 11G (low bit) 04741 addwf A0_A2_reg,f 04742 04743 movlw BRIGHT1H 04744 btfsc in5,3 ; 12R (high bit) 04745 addwf A0_A1_reg,f 04746 movlw BRIGHT2H 04747 btfsc in5,2 ; 12R (low bit) 04748 addwf A0_A1_reg,f 04749 04750 movlw BRIGHT1L 04751 btfsc in5,1 ; 12G (high bit) 04752 addwf A0_A1_reg,f 04753 movlw BRIGHT2L 04754 btfsc in5,0 ; 12G (low bit) 04755 addwf A0_A1_reg,f MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 113 LOC OBJECT CODE LINE SOURCE TEXT VALUE 04756 04757 movlw BRIGHT1H 04758 btfsc in6,7 ; 13R (high bit) 04759 addwf A1_C2_reg,f 04760 movlw BRIGHT2H 04761 btfsc in6,6 ; 13R (low bit) 04762 addwf A1_C2_reg,f 04763 04764 movlw BRIGHT1L 04765 btfsc in6,5 ; 13G (high bit) 04766 addwf A1_C2_reg,f 04767 movlw BRIGHT2L 04768 btfsc in6,4 ; 13G (low bit) 04769 addwf A1_C2_reg,f 04770 04771 movlw BRIGHT1H 04772 btfsc in6,3 ; 14R (high bit) 04773 addwf A1_C1_reg,f 04774 movlw BRIGHT2H 04775 btfsc in6,2 ; 14R (low bit) 04776 addwf A1_C1_reg,f 04777 04778 movlw BRIGHT1L 04779 btfsc in6,1 ; 14G (high bit) 04780 addwf A1_C1_reg,f 04781 movlw BRIGHT2L 04782 btfsc in6,0 ; 14G (low bit) 04783 addwf A1_C1_reg,f 04784 04785 movlw BRIGHT1H 04786 btfsc in7,7 ; 15R (high bit) 04787 addwf A2_C2_reg,f 04788 movlw BRIGHT2H 04789 btfsc in7,6 ; 15R (low bit) 04790 addwf A2_C2_reg,f 04791 04792 movlw BRIGHT1L 04793 btfsc in7,5 ; 15G (high bit) 04794 addwf A2_C2_reg,f 04795 movlw BRIGHT2L 04796 btfsc in7,4 ; 15G (low bit) 04797 addwf A2_C2_reg,f 04798 04799 movlw BRIGHT1H 04800 btfsc in7,3 ; 16R (high bit) 04801 addwf A2_C4_reg,f 04802 movlw BRIGHT2H 04803 btfsc in7,2 ; 16R (low bit) 04804 addwf A2_C4_reg,f 04805 04806 movlw BRIGHT1L 04807 btfsc in7,1 ; 16G (high bit) 04808 addwf A2_C4_reg,f MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 114 LOC OBJECT CODE LINE SOURCE TEXT VALUE 04809 movlw BRIGHT2L 04810 btfsc in7,0 ; 16G (low bit) 04811 addwf A2_C4_reg,f 04812 04813 movlw BRIGHT1H 04814 btfsc in8,7 ; 17R (high bit) 04815 addwf A0_C4_reg,f 04816 movlw BRIGHT2H 04817 btfsc in8,6 ; 17R (low bit) 04818 addwf A0_C4_reg,f 04819 04820 movlw BRIGHT1L 04821 btfsc in8,5 ; 17G (high bit) 04822 addwf A0_C4_reg,f 04823 movlw BRIGHT2L 04824 btfsc in8,4 ; 17G (low bit) 04825 addwf A0_C4_reg,f 04826 04827 movlw BRIGHT1H 04828 btfsc in8,3 ; 18R (high bit) 04829 addwf A0_C2_reg,f 04830 movlw BRIGHT2H 04831 btfsc in8,2 ; 18R (low bit) 04832 addwf A0_C2_reg,f 04833 04834 movlw BRIGHT1L 04835 btfsc in8,1 ; 18G (high bit) 04836 addwf A0_C2_reg,f 04837 movlw BRIGHT2L 04838 btfsc in8,0 ; 18G (low bit) 04839 addwf A0_C2_reg,f 04840 04841 movlw BRIGHT1H 04842 btfsc in9,7 ; 19R (high bit) 04843 addwf A1_C4_reg,f 04844 movlw BRIGHT2H 04845 btfsc in9,6 ; 19R (low bit) 04846 addwf A1_C4_reg,f 04847 04848 movlw BRIGHT1L 04849 btfsc in9,5 ; 19G (high bit) 04850 addwf A1_C4_reg,f 04851 movlw BRIGHT2L 04852 btfsc in9,4 ; 19G (low bit) 04853 addwf A1_C4_reg,f 04854 04855 movf speed,w 04856 call strobe_delay 04857 04858 return 04859 #endif 04860 04861 #ifdef DISPLAY_2BIT_E MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 115 LOC OBJECT CODE LINE SOURCE TEXT VALUE 04862 ;********************************************************************** 04863 display_2bit ; 19 Circle LEDs (38 LEDs) 04864 ;********************************************************************** 04865 04866 movwf speed ;w has the speed/delay 04867 04868 clrf A1_A2_reg ; 1 04869 clrf A1_C0_reg ; 2 04870 clrf A2_C0_reg ; 3 04871 clrf A2_C1_reg ; 4 04872 clrf C0_C1_reg ; 5 04873 clrf C0_C2_reg ; 6 04874 clrf C0_C4_reg ; 7 04875 clrf C1_C4_reg ; 8 04876 clrf A0_C1_reg ; 9 04877 clrf A0_C0_reg ; 10 04878 clrf A0_A2_reg ; 11 04879 clrf A0_A1_reg ; 12 04880 clrf A1_C2_reg ; 13 04881 clrf A1_C1_reg ; 14 04882 clrf A2_C2_reg ; 15 04883 clrf A2_C4_reg ; 16 04884 clrf A0_C4_reg ; 17 04885 clrf A0_C2_reg ; 18 04886 clrf A1_C4_reg ; 19 04887 clrf C1_C2_reg ; no LED 04888 clrf C2_C4_reg ; no LED 04889 04890 movlw BRIGHT1L 04891 btfsc in0,7 ; 1R (high bit) 04892 addwf A1_A2_reg,f 04893 movlw BRIGHT2L 04894 btfsc in0,6 ; 1R (low bit) 04895 addwf A1_A2_reg,f 04896 04897 04898 movlw BRIGHT1L 04899 btfsc in0,5 ; 2R (high bit) 04900 addwf A1_C0_reg,f 04901 movlw BRIGHT2L 04902 btfsc in0,4 ; 2R (low bit) 04903 addwf A1_C0_reg,f 04904 04905 movlw BRIGHT1L 04906 btfsc in0,3 ; 3R (high bit) 04907 addwf A2_C0_reg,f 04908 movlw BRIGHT2L 04909 btfsc in0,2 ; 3R (low bit) 04910 addwf A2_C0_reg,f 04911 04912 movlw BRIGHT1L 04913 btfsc in0,1 ; 4R (high bit) 04914 addwf A2_C1_reg,f MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 116 LOC OBJECT CODE LINE SOURCE TEXT VALUE 04915 movlw BRIGHT2L 04916 btfsc in0,0 ; 4R (low bit) 04917 addwf A2_C1_reg,f 04918 04919 movlw BRIGHT1L 04920 btfsc in1,7 ; 5R (high bit) 04921 addwf C0_C1_reg,f 04922 movlw BRIGHT2L 04923 btfsc in1,6 ; 5R (low bit) 04924 addwf C0_C1_reg,f 04925 04926 movlw BRIGHT1L 04927 btfsc in1,5 ; 6R (high bit) 04928 addwf C0_C2_reg,f 04929 movlw BRIGHT2L 04930 btfsc in1,4 ; 6R (low bit) 04931 addwf C0_C2_reg,f 04932 04933 movlw BRIGHT1L 04934 btfsc in1,3 ; 7R (high bit) 04935 addwf C0_C4_reg,f 04936 movlw BRIGHT2L 04937 btfsc in1,2 ; 7R (low bit) 04938 addwf C0_C4_reg,f 04939 04940 movlw BRIGHT1L 04941 btfsc in1,1 ; 8R (high bit) 04942 addwf C1_C4_reg,f 04943 movlw BRIGHT2L 04944 btfsc in1,0 ; 8R (low bit) 04945 addwf C1_C4_reg,f 04946 04947 movlw BRIGHT1L 04948 btfsc in2,7 ; 9R (high bit) 04949 addwf A0_C1_reg,f 04950 movlw BRIGHT2L 04951 btfsc in2,6 ; 9R (low bit) 04952 addwf A0_C1_reg,f 04953 04954 movlw BRIGHT1L 04955 btfsc in2,5 ; 10R (high bit) 04956 addwf A0_C0_reg,f 04957 movlw BRIGHT2L 04958 btfsc in2,4 ; 10R (low bit) 04959 addwf A0_C0_reg,f 04960 04961 movlw BRIGHT1L 04962 btfsc in2,3 ; 11R (high bit) 04963 addwf A0_A2_reg,f 04964 movlw BRIGHT2L 04965 btfsc in2,2 ; 11R (low bit) 04966 addwf A0_A2_reg,f 04967 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 117 LOC OBJECT CODE LINE SOURCE TEXT VALUE 04968 movlw BRIGHT1L 04969 btfsc in2,1 ; 12R (high bit) 04970 addwf A0_A1_reg,f 04971 movlw BRIGHT2L 04972 btfsc in2,0 ; 12R (low bit) 04973 addwf A0_A1_reg,f 04974 04975 movlw BRIGHT1L 04976 btfsc in3,7 ; 13R (high bit) 04977 addwf A1_C2_reg,f 04978 movlw BRIGHT2L 04979 btfsc in3,6 ; 13R (low bit) 04980 addwf A1_C2_reg,f 04981 04982 movlw BRIGHT1L 04983 btfsc in3,5 ; 14R (high bit) 04984 addwf A1_C1_reg,f 04985 movlw BRIGHT2L 04986 btfsc in3,4 ; 14R (low bit) 04987 addwf A1_C1_reg,f 04988 04989 movlw BRIGHT1L 04990 btfsc in3,3 ; 15R (high bit) 04991 addwf A2_C2_reg,f 04992 movlw BRIGHT2L 04993 btfsc in3,2 ; 15R (low bit) 04994 addwf A2_C2_reg,f 04995 04996 movlw BRIGHT1L 04997 btfsc in3,1 ; 16R (high bit) 04998 addwf A2_C4_reg,f 04999 movlw BRIGHT2L 05000 btfsc in3,0 ; 16R (low bit) 05001 addwf A2_C4_reg,f 05002 05003 movlw BRIGHT1L 05004 btfsc in4,7 ; 17R (high bit) 05005 addwf A0_C4_reg,f 05006 movlw BRIGHT2L 05007 btfsc in4,6 ; 17R (low bit) 05008 addwf A0_C4_reg,f 05009 05010 movlw BRIGHT1L 05011 btfsc in4,5 ; 18R (high bit) 05012 addwf A0_C2_reg,f 05013 movlw BRIGHT2L 05014 btfsc in4,4 ; 18R (low bit) 05015 addwf A0_C2_reg,f 05016 05017 movlw BRIGHT1L 05018 btfsc in4,3 ; 19R (high bit) 05019 addwf A1_C4_reg,f 05020 movlw BRIGHT2L MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 118 LOC OBJECT CODE LINE SOURCE TEXT VALUE 05021 btfsc in4,2 ; 19R (low bit) 05022 addwf A1_C4_reg,f 05023 05024 movf speed,w 05025 call strobe_delay 05026 05027 return 05028 #endif 05029 05030 #ifdef DISPLAY_1BIT_E 05031 ;********************************************************************** 05032 display_1bit ; RGB Stick (14 * 3 = 42 LEDs 05033 ;********************************************************************** 05034 var temp4 05035 05036 movwf speed ;w has the speed/delay 05037 05038 ; set all var 0xA0 to 0xEF to zero 05039 movlw 0xA0 05040 movwf FSR 05041 05042 movlw 0x50 05043 movwf temp4 05044 05045 clr_loop 05046 05047 clrf INDF 05048 incf FSR,f 05049 decfsz temp4,f 05050 goto clr_loop 05051 05052 pageselw rgb_stick_expand 05053 call rgb_stick_expand 05054 pageselw display_1bit 05055 05056 movf speed,w 05057 call strobe_delay 05058 05059 return 05060 #endif 05061 05062 ;********************************************************************** 05063 ; IR Tester 05064 ;********************************************************************** 04BF 05065 IR_Tester 04BF 05066 itop 04BF 3002 05067 movlw 0x02 04C0 023B 05068 subwf instate,w 04C1 1C03 05069 btfss STATUS,C 04C2 0103 05070 clrw 04C3 00E7 05071 movwf in0 05072 04C4 3000 05073 movlw 0x00 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 119 LOC OBJECT CODE LINE SOURCE TEXT VALUE 04C5 00E8 05074 movwf in1 05075 04C6 3001 05076 movlw 0x01 04C7 2495 05077 call display_1bit 05078 05079 ; 05080 ; Check for push button 05081 ; 04C8 05082 ibutton 04C8 0842 05083 movf button,w 04C9 1903 05084 btfsc STATUS,Z 04CA 2CF9 05085 goto iloop1 04CB 01BC 05086 clrf max_instate 04CC 01BB 05087 clrf instate 05088 04CD 0857 05089 movf scount,w ; if sending an IR command ignore button 04CE 3E00 05090 addlw 0 ; not sure if needed 04CF 1D03 05091 btfss STATUS,Z 04D0 2CC8 05092 goto ibutton 05093 04D1 0842 05094 movf button,w ; 2st 8 bits are the buttons 04D2 00E8 05095 movwf in1 04D3 01E7 05096 clrf in0 ; next 8 are zero 05097 ; movlw 0x80 05098 ; movwf in2 ; led 17 is on 05099 05100 04D4 3001 05101 movlw 0x01 04D5 2495 05102 call display_1bit 05103 05104 ; send an IR signel 04D6 01CF 05105 clrf out_address ; address 0x00 "TV remote" 05106 05107 #ifdef M3X3 05108 04D7 3003 05109 movlw 0x03 ; if button 3 & 4 presses 04D8 0242 05110 subwf button,w 04D9 1903 05111 btfsc STATUS,Z 04DA 2DAF 05112 goto mode_loop 05113 04DB 1842 05114 btfsc button,0 ; if button 3 pressed 04DC 2CE5 05115 goto send_chan_up 05116 04DD 18C2 05117 btfsc button,1 ; if button 4 pressed 04DE 2CE9 05118 goto send_chan_down 05119 04DF 1942 05120 btfsc button,2 ; if button 1 pressed 04E0 2CED 05121 goto send_vol_up 05122 04E1 19C2 05123 btfsc button,3 ; if button 2 pressed 04E2 2CF1 05124 goto send_vol_down 05125 04E3 1A42 05126 btfsc button,4 ; if button 5 pressed MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 120 LOC OBJECT CODE LINE SOURCE TEXT VALUE 04E4 2CF5 05127 goto send_on_off 05128 04E5 05129 send_chan_up 04E5 3020 05130 movlw 0x20 04E6 00D0 05131 movwf out_command ; code 0x0c (on/off) 04E7 22D5 05132 call rf_command_out 04E8 2CC8 05133 goto ibutton 05134 04E9 05135 send_chan_down 04E9 3021 05136 movlw 0x21 04EA 00D0 05137 movwf out_command ; code 0x0c (on/off) 04EB 22D5 05138 call rf_command_out 04EC 2CC8 05139 goto ibutton 05140 04ED 05141 send_vol_up 04ED 3010 05142 movlw 0x10 04EE 00D0 05143 movwf out_command ; code 0x0c (on/off) 04EF 22D5 05144 call rf_command_out 04F0 2CC8 05145 goto ibutton 05146 04F1 05147 send_vol_down 04F1 3011 05148 movlw 0x11 04F2 00D0 05149 movwf out_command ; code 0x0c (on/off) 04F3 22D5 05150 call rf_command_out 04F4 2CC8 05151 goto ibutton 05152 05153 #endif 05154 04F5 05155 send_on_off 04F5 300C 05156 movlw 0x0c 04F6 00D0 05157 movwf out_command ; code 0x0c (on/off) 04F7 22D5 05158 call rf_command_out 04F8 2CC8 05159 goto ibutton 05160 05161 05162 ; 05163 ; Check for IR Command 05164 ; 04F9 05165 iloop1 04F9 1C4A 05166 btfss IR_in_good,0 04FA 2CBF 05167 goto itop 04FB 01CA 05168 clrf IR_in_good 05169 05170 ; flash all LEDs Red 04FC 30F0 05171 movlw 0xF0 04FD 00E7 05172 movwf in0 04FE 01E8 05173 clrf in1 05174 04FF 307F 05175 movlw 0x7f 0500 2495 05176 call display_1bit 05177 05178 ; flash all LEDs off 0501 01E7 05179 clrf in0 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 121 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0502 01E8 05180 clrf in1 05181 0503 303F 05182 movlw 0x3f 0504 2495 05183 call display_1bit 05184 05185 ; flash all LEDs Red 0505 30F0 05186 movlw 0xF0 0506 00E7 05187 movwf in0 0507 01E8 05188 clrf in1 05189 0508 307F 05190 movlw 0x7f 0509 2495 05191 call display_1bit 05192 05193 ; display command and address 050A 083E 05194 movf command,w 050B 00E7 05195 movwf in0 050C 083F 05196 movf address,w 050D 00E8 05197 movwf in1 05198 050E 30FF 05199 movlw 0xff 050F 2495 05200 call display_1bit 0510 30FF 05201 movlw 0xff 0511 2495 05202 call display_1bit 0512 01BC 05203 clrf max_instate 0513 01BB 05204 clrf instate 05205 0514 2CBF 05206 goto itop 05207 05208 #ifdef M3X3 05209 ;********************************************************************** 0515 05210 Dice 05211 ;********************************************************************** 05212 var temp 00000071 M temp equ mem 00000072 M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 05213 0515 2559 05214 call roll_dice 0516 05215 dice_loop 05216 0516 3003 05217 movlw 0x03 ; if button 3 & 4 presses 0517 0242 05218 subwf button,w 0518 1903 05219 btfsc STATUS,Z 0519 2DAF 05220 goto mode_loop 05221 051A 1842 05222 btfsc button,0 ; if button 1 pressed 051B 2559 05223 call roll_dice 05224 051C 3001 05225 movlw 0x01 051D 0271 05226 subwf temp,w 051E 1903 05227 btfsc STATUS,Z MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 122 LOC OBJECT CODE LINE SOURCE TEXT VALUE 051F 2D36 05228 goto diplay_1 05229 0520 3002 05230 movlw 0x02 0521 0271 05231 subwf temp,w 0522 1903 05232 btfsc STATUS,Z 0523 2D3B 05233 goto diplay_2 05234 0524 3003 05235 movlw 0x03 0525 0271 05236 subwf temp,w 0526 1903 05237 btfsc STATUS,Z 0527 2D40 05238 goto diplay_3 05239 0528 3004 05240 movlw 0x04 0529 0271 05241 subwf temp,w 052A 1903 05242 btfsc STATUS,Z 052B 2D46 05243 goto diplay_4 05244 052C 3005 05245 movlw 0x05 052D 0271 05246 subwf temp,w 052E 1903 05247 btfsc STATUS,Z 052F 2D4C 05248 goto diplay_5 05249 0530 3006 05250 movlw 0x06 0531 0271 05251 subwf temp,w 0532 1903 05252 btfsc STATUS,Z 0533 2D51 05253 goto diplay_6 05254 05255 ; get random number 0-7 re-roll if we get a 0 or 7. 0534 2559 05256 call roll_dice 0535 2D16 05257 goto dice_loop 05258 05259 0536 05260 diplay_1 0536 01E7 05261 clrf in0 0537 30C0 05262 movlw b'11000000' 0538 00E8 05263 movwf in1 0539 01E9 05264 clrf in2 053A 2D56 05265 goto dice_display_digit 05266 053B 05267 diplay_2 053B 300C 05268 movlw b'00001100' 053C 00E7 05269 movwf in0 053D 00E8 05270 movwf in1 053E 01E9 05271 clrf in2 053F 2D56 05272 goto dice_display_digit 05273 0540 05274 diplay_3 0540 300C 05275 movlw b'00001100' 0541 00E7 05276 movwf in0 0542 30CC 05277 movlw b'11001100' 0543 00E8 05278 movwf in1 0544 01E9 05279 clrf in2 0545 2D56 05280 goto dice_display_digit MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 123 LOC OBJECT CODE LINE SOURCE TEXT VALUE 05281 0546 05282 diplay_4 0546 30CC 05283 movlw b'11001100' 0547 00E7 05284 movwf in0 0548 00E9 05285 movwf in2 0549 300C 05286 movlw b'00001100' 054A 00E8 05287 movwf in1 054B 2D56 05288 goto dice_display_digit 05289 054C 05290 diplay_5 054C 30CC 05291 movlw b'11001100' 054D 00E7 05292 movwf in0 054E 00E8 05293 movwf in1 054F 00E8 05294 movwf in1 0550 2D56 05295 goto dice_display_digit 05296 0551 05297 diplay_6 0551 30CF 05298 movlw b'11001111' 0552 00E7 05299 movwf in0 0553 00E9 05300 movwf in2 0554 303C 05301 movlw b'00111100' 0555 00E8 05302 movwf in1 05303 0556 05304 dice_display_digit 0556 30FF 05305 movlw 0xff 0557 2495 05306 call display_1bit 05307 0558 2D16 05308 goto dice_loop 05309 05310 #endif 05311 0559 05312 roll_dice 0559 0AE4 05313 incf temp2,f 055A 248B 05314 call gen_random 055B 3055 05315 movlw b'01010101' 055C 00E7 05316 movwf in0 055D 00E8 05317 movwf in1 055E 00E9 05318 movwf in2 05319 055F 30FF 05320 movlw 0xff 0560 2495 05321 call display_1bit 05322 0561 30AA 05323 movlw b'10101010' 0562 00E7 05324 movwf in0 0563 00E8 05325 movwf in1 0564 00E9 05326 movwf in2 05327 0565 30FF 05328 movlw 0xff 0566 2495 05329 call display_1bit 05330 0567 1842 05331 btfsc button,0 ; if button 1 pressed 0568 2D59 05332 goto roll_dice 05333 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 124 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0569 0870 05334 movfw random 056A 0723 05335 addwf count1,w 056B 0764 05336 addwf temp2,w 056C 00F1 05337 movwf temp 056D 0CF1 05338 rrf temp,f 056E 3007 05339 movlw 0x07 056F 05F1 05340 andwf temp,f 05341 0570 0008 05342 return 05343 05344 05345 05346 ; 05347 ; M A I N 05348 ; 05349 ;********************************************************************** 0571 05350 main 05351 ;********************************************************************** 05352 0571 0185 05353 clrf PORTA 0572 0181 05354 clrf TMR0 0573 01E5 05355 clrf pattern 0574 01D7 05356 clrf scount 0575 01C0 05357 clrf toggle 0576 01BF 05358 clrf address 0577 01BE 05359 clrf command 0578 01C1 05360 clrf IR_lhalf 0579 01BB 05361 clrf instate 057A 01BC 05362 clrf max_instate 057B 01CA 05363 clrf IR_in_good 057C 01A2 05364 clrf dcycle 057D 01A3 05365 clrf count1 057E 01A4 05366 clrf count2 05367 #ifdef PATTERN2 05368 clrf delay1 05369 clrf fad 05370 clrf color 05371 #endif 05372 #ifndef C19 05373 #ifndef M3X3 05374 #ifdef MONO 05375 clrf Br_reg 05376 clrf Bg_reg 05377 clrf Bb_reg 05378 clrf Dr_reg 05379 clrf Dg_reg 05380 clrf Db_reg 05381 #endif 05382 #endif 05383 #endif 05384 057F 3007 05385 movlw 0x07 0580 0099 05386 movwf CMCON0 ;turn off comparator MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 125 LOC OBJECT CODE LINE SOURCE TEXT VALUE 05387 05388 setbank1 0581 1683 M bsf STATUS,RP0 ; select bank 1 0582 1303 M bcf STATUS,RP1 05389 05390 ; set up TMR0 & pullups 05391 ; +---------- disable pullups (1) 05392 ; |+--------- interrupt edge select (don't care) 05393 ; ||+-------- TMR0 source = internal clock (0) 05394 ; |||+------- TMR0 source edge select (don't care) 05395 ; ||||+------ assign prescaler to TMR0 (0) 05396 ; |||||+++--- prescaler set to 8X (010) 05397 ; |||||||| 0583 3082 05398 movlw b'10000010' 0584 0081 05399 movwf OPTION_REG 05400 05401 #ifdef C19 05402 ; enable pullups on portA 05403 bcf OPTION_REG,NOT_RAPU 05404 05405 ; input on A5 05406 clrf WPUA ; disable all pullups 05407 bsf WPUA,5 ; enable pullup A5 05408 #endif 05409 05410 #ifdef SRGB 05411 ; enable pullups on portA 05412 bcf OPTION_REG,NOT_RAPU 05413 05414 ; input on A5 05415 clrf WPUA ; disable all pullups 05416 bsf WPUA,5 ; enable pullup A5 05417 bsf WPUA,4 ; enable pullup A4 05418 #endif 05419 0585 3070 05420 movlw b'01110000' ;switch to 8 MHz clock 0586 048F 05421 iorwf OSCCON,f 05422 0587 019F 05423 clrf ANSEL ;set pins to digital 05424 05425 #ifdef __16F688 05426 ; setup timer0 05427 ; bcf OPTION_REG,T0CS 05428 #endif 05429 05430 setbank0 0588 1283 M bcf STATUS,RP0 ; select bank 0 0589 1303 M bcf STATUS,RP1 05431 058A 01C2 05432 clrf button 05433 05434 #ifdef RANDOM 058B 301D 05435 movlw 0x1D MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 126 LOC OBJECT CODE LINE SOURCE TEXT VALUE 058C 00F0 05436 movwf random 05437 #endif 05438 05439 ; enable timer0 interupt 058D 168B 05440 bsf INTCON,T0IE 058E 178B 05441 bsf INTCON,GIE 05442 058F 05443 loop_ddf 05444 ; flash all LEDs on This kills some time, allowing us to sample the button and IR-Rx 058F 30FF 05445 movlw b'11111111' 05446 0590 00E7 05447 movwf in0 0591 00E8 05448 movwf in1 0592 00E9 05449 movwf in2 05450 #ifdef C19 05451 movwf in3 05452 movwf in4 05453 #endif 05454 #ifdef SRGB 05455 movwf in3 05456 movwf in4 05457 movwf in5 05458 #endif 05459 0593 30FF 05460 movlw 0xff 0594 2495 05461 call display_1bit 0595 30FF 05462 movlw 0xff 0596 2495 05463 call display_1bit 05464 05465 #ifdef M3X3 ; have to wait for the IR to go high, and the buttons to de-bounce on 3x3 po werup 0597 30FF 05466 movlw 0xff 0598 2495 05467 call display_1bit 0599 30FF 05468 movlw 0xff 059A 2495 05469 call display_1bit 05470 #endif 05471 05472 05473 ; Trun all the LEDs off 059B 01E7 05474 clrf in0 059C 01E8 05475 clrf in1 059D 01E9 05476 clrf in2 05477 #ifdef C19 05478 clrf in3 05479 clrf in4 05480 #endif 05481 #ifdef SRGB 05482 clrf in3 05483 clrf in4 05484 clrf in5 05485 #endif 05486 059E 30FF 05487 movlw 0xff MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 127 LOC OBJECT CODE LINE SOURCE TEXT VALUE 059F 2495 05488 call display_1bit 05A0 30FF 05489 movlw 0xff 05A1 2495 05490 call display_1bit 05A2 30FF 05491 movlw 0xff 05A3 2495 05492 call display_1bit 05493 05A4 23B0 05494 call read_demo_mode 05495 05A5 0842 05496 movfw button 05A6 00E8 05497 movwf in1 05A7 30FF 05498 movlw 0xff 05A8 2495 05499 call display_1bit 05A9 30FF 05500 movlw 0xff 05AA 2495 05501 call display_1bit 05502 05503 05504 #ifndef M3X3 05505 ; if button pressed durring powerup run IR_Tester 05506 ; else run pattern driver 05507 ; 05508 btfss button,0 05509 goto pattern_driver 05510 call toggle_demo 05511 #ifdef ENABLE_IR 05512 goto IR_Tester 05513 #else 05514 goto pattern_driver 05515 #endif 05516 #else 05517 ; 05518 ; 3X3 mode selection logic 05519 ; 05520 var mode 00000072 M mode equ mem 00000073 M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 05521 #define MAX_MODE 3 05AB 01F2 05522 clrf mode 05523 05AC 0842 05524 movfw button ; if no button go to pattern mode. 05AD 1903 05525 btfsc STATUS,Z 05AE 2BC2 05526 goto pattern_driver 05527 05AF 05528 mode_loop 05529 05530 ; 05531 ; Dsiplay the Mode in LEDs 7,8 and 9 05532 ; 05AF 01E7 05533 clrf in0 05B0 0A72 05534 incf mode,w 05B1 00DC 05535 movwf b2l_in_green MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 128 LOC OBJECT CODE LINE SOURCE TEXT VALUE 05B2 01DB 05536 clrf b2l_in_red 05B3 230E 05537 call bin2led 05B4 0858 05538 movf b2l_out_hi,w 05B5 00E8 05539 movwf in1 05B6 0859 05540 movf b2l_out_low,w 05B7 00E9 05541 movwf in2 05B8 0CE8 05542 rrf in1,f 05B9 0CE9 05543 rrf in2,f 05BA 0CE8 05544 rrf in1,f 05BB 0CE9 05545 rrf in2,f 05BC 0CE8 05546 rrf in1,f 05BD 0CE9 05547 rrf in2,f 05BE 0CE8 05548 rrf in1,f 05BF 0CE9 05549 rrf in2,f 05550 05C0 30FF 05551 movlw 0xff 05C1 2495 05552 call display_1bit 05553 05C2 30FF 05554 movlw 0xff 05C3 2495 05555 call display_1bit 05556 05C4 1842 05557 btfsc button,0 ; if button 1 pressed inc pattern 05C5 25D8 05558 call next_mode 05559 05C6 18C2 05560 btfsc button,1 ; if button 2 pressed dec pattern 05C7 25DE 05561 call past_mode 05562 ; 05563 ; missing bound check on up/down of pattern. 05564 ; 05C8 1A42 05565 btfsc button,4 ; if button 5 try to exit 05C9 2DCB 05566 goto mode_loop2 05567 05CA 2DAF 05568 goto mode_loop 05569 05CB 05570 mode_loop2 05571 05CB 3000 05572 movlw 0x00 ; mode=0 05CC 0272 05573 subwf mode,w 05CD 1903 05574 btfsc STATUS,Z 05CE 2BC2 05575 goto pattern_driver 05576 05CF 3001 05577 movlw 0x01 ; mode=1 05D0 0272 05578 subwf mode,w 05D1 1903 05579 btfsc STATUS,Z 05D2 2CBF 05580 goto IR_Tester 05581 05582 05D3 3002 05583 movlw 0x02 ; mode=2 05D4 0272 05584 subwf mode,w 05D5 1903 05585 btfsc STATUS,Z 05D6 2D15 05586 goto Dice 05587 05588 ; movlw 0x02 ; mode=3 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 129 LOC OBJECT CODE LINE SOURCE TEXT VALUE 05589 ; subwf mode,w 05590 ; btfsc STATUS,Z 05591 ; goto TicTacToe 05592 05D7 2DAF 05593 goto mode_loop 05594 05595 ;********************************************************************** 05D8 05596 next_mode 05597 ;********************************************************************** 05D8 0AF2 05598 incf mode,f 05D9 0872 05599 movf mode,w 05DA 3C03 05600 sublw MAX_MODE ; max pattern? 05DB 1903 05601 btfsc STATUS,2 ; z bit check 05DC 01F2 05602 clrf mode ; reset to zero 05DD 0008 05603 return 05604 05605 ;********************************************************************** 05DE 05606 past_mode 05607 ;********************************************************************** 05DE 03F2 05608 decf mode,f 05DF 0872 05609 movf mode,w 05E0 3E01 05610 addlw 1 ; max pattern? 05E1 1D03 05611 btfss STATUS,2 ; z bit check 05E2 2DE5 05612 goto mode_past_exit 05E3 3002 05613 movlw MAX_MODE-1 05E4 00F2 05614 movwf mode 05E5 05615 mode_past_exit 05E5 0008 05616 return 05617 05618 05619 #endif 05620 05621 ;********************************************************************** 05E6 05622 table_lookup 05623 ;********************************************************************** 05E6 085F 05624 movf tbl_hi,w 05E7 008A 05625 movwf PCLATH 05E8 087C 05626 movf pindex,w 05E9 0760 05627 addwf tbl_low,w 05EA 1803 05628 btfsc STATUS,0 ; check carry flag 05EB 0A8A 05629 incf PCLATH,f 05EC 0082 05630 movwf PCL 05631 05632 ;********************************************************************** 05ED 05633 jump_address 05634 ;********************************************************************** 05635 ; Portability : clean 05636 ; 05637 var offset_hi 00000073 M offset_hi equ mem 00000074 M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 130 LOC OBJECT CODE LINE SOURCE TEXT VALUE M endif 05638 var offset_low 00000074 M offset_low equ mem 00000075 M mem = mem + 1 M if (mem >= mem2) M error 'Too much var space used' M endif 05639 05ED 080A 05640 movf PCLATH,w 05EE 00E3 05641 movwf pclath_save 05EF 0873 05642 movf offset_hi,w 05F0 008A 05643 movwf PCLATH 05644 05F1 0874 05645 movf offset_low, w 05F2 0082 05646 movwf PCL 05647 05648 05649 ;********************************************************************** 05F3 05650 MasterTable 05651 ;********************************************************************** 05652 make_mtab NUM_TAB 0000 M local i = 0 M while i <= NUM_TAB 05F3 3406 3465 M dt HIGH table0, LOW table0 00000001 M i += 1 05F5 3406 3480 M dt HIGH table1, LOW table1 00000002 M i += 1 05F7 3406 348F M dt HIGH table2, LOW table2 00000003 M i += 1 05F9 3406 349E M dt HIGH table3, LOW table3 00000004 M i += 1 05FB 3406 34A7 M dt HIGH table4, LOW table4 00000005 M i += 1 05FD 3406 34C5 M dt HIGH table5, LOW table5 00000006 M i += 1 05FF 3406 34CE M dt HIGH table6, LOW table6 00000007 M i += 1 0601 3406 34EC M dt HIGH table7, LOW table7 00000008 M i += 1 0603 3406 34FB M dt HIGH table8, LOW table8 00000009 M i += 1 0605 3407 3440 M dt HIGH table9, LOW table9 0000000A M i += 1 0607 3407 3447 M dt HIGH table10, LOW table10 0000000B M i += 1 0609 3421 3401 M dt HIGH table11, LOW table11 0000000C M i += 1 060B 3421 343D M dt HIGH table12, LOW table12 0000000D M i += 1 060D 3421 3449 M dt HIGH table13, LOW table13 0000000E M i += 1 060F 3421 348B M dt HIGH table14, LOW table14 0000000F M i += 1 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 131 LOC OBJECT CODE LINE SOURCE TEXT VALUE M endw 05653 05654 05655 #ifdef PATTERN16 05656 #define BRIGHT1_lo 0x04 05657 #define BRIGHT2_lo 0x0A 05658 #define BRIGHT1_hi 0x40 05659 #define BRIGHT2_hi 0xA0 05660 05661 ;********************************************************************** 05662 table_type_16 05663 ;********************************************************************** 05664 ; 05665 ; 1 bytes 05666 ; 05667 ; ABBCCCCC 05668 ; 05669 ; A = shire Right/Left 05670 ; BB = two bit intensity to shift on 05671 ; CCCCC = Number of shifts to loop 05672 ; 05673 ; if CCCCC = 0x11111, specical case: turn all LEDs off. 05674 05675 var t7count 05676 var t17_loop 05677 05678 pageselw get_next_pattern_entry 05679 call get_next_pattern_entry 05680 movwf in0 05681 05682 call get_next_pattern_entry 05683 movwf in1 05684 pageselw table_type_16 05685 05686 movlw b'00011111' 05687 andwf in0,w 05688 movwf t7count 05689 05690 movlw b'00011111' ; if shiftcount is 31, then clear all LEDs 05691 subwf t7count,w 05692 btfss STATUS,Z 05693 goto t7_loop_red 05694 05695 clrf in0 ; quick way to clear all the LEDS. 05696 clrf in1 05697 clrf in2 05698 clrf in3 05699 clrf in4 05700 clrf in5 05701 pageselw display_1bit 05702 call display_1bit 05703 pageselw table_type_16 05704 goto t7_return MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 132 LOC OBJECT CODE LINE SOURCE TEXT VALUE 05705 05706 t7_loop_red 05707 btfsc in0,7 05708 goto t7_set19_red 05709 05710 call red_up 05711 goto t7_loop_green 05712 05713 t7_set19_red 05714 05715 call red_down 05716 05717 t7_loop_green 05718 btfsc in0,6 05719 goto t7_set19_green 05720 05721 call green_up 05722 05723 goto t7_loop_blue 05724 ; 05725 ; set LED 19 05726 t7_set19_green 05727 05728 call green_down 05729 05730 t7_loop_blue 05731 05732 btfsc in0,5 05733 goto t7_set19_blue 05734 05735 call blue_up 05736 05737 goto t7_cont 05738 ; 05739 ; set LED 19 05740 t7_set19_blue 05741 call blue_dowm 05742 t7_cont 05743 pageselw strobe_delay 05744 movf pspeed,w 05745 call strobe_delay 05746 pageselw t7_cont 05747 ; 05748 ; This is a quick hack, because without this button presses are not seen for minutes 05749 ; This early exit might impact the pattern getting displayed. 05750 ; 05751 btfsc button,0 ; if putton pressed show pattern id 05752 goto t7_return 05753 05754 btfsc IR_in_good,0 05755 goto t7_return 05756 05757 decfsz t7count,f MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 133 LOC OBJECT CODE LINE SOURCE TEXT VALUE 05758 goto t7_loop_red 05759 05760 t7_return 05761 return 05762 05763 ;********************************************************************** 05764 red_up 05765 ;********************************************************************** 05766 05767 movlw 0x0d 05768 movwf t17_loop 05769 05770 movlw A2_C1_reg ; index = 13 R 05771 movwf FSR 05772 05773 red_up_loop 05774 movfw INDF ; load R [index] 05775 incf FSR,f ; index ++ 05776 movwf INDF ; store R [index] 05777 05778 decf FSR,f ; index - 2 05779 decf FSR,f 05780 05781 decfsz t17_loop,f 05782 goto red_up_loop 05783 ; 05784 ; 01 Red 05785 ; 05786 incf FSR,f 05787 clrf INDF 05788 movlw BRIGHT1 05789 btfsc in1,6 05790 addwf INDF,f ;01 05791 movlw BRIGHT2 05792 btfsc in1,7 05793 addwf INDF,f ;01 05794 05795 return 05796 05797 ;********************************************************************** 05798 red_down 05799 ;********************************************************************** 05800 05801 movlw 0x0d 05802 movwf t17_loop 05803 05804 movlw C2_C3_reg ; index = 02 R 05805 movwf FSR 05806 05807 red_down_loop 05808 movfw INDF ; load R [index] 05809 decf FSR,f ; index - 1 05810 movwf INDF ; store R [index] MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 134 LOC OBJECT CODE LINE SOURCE TEXT VALUE 05811 05812 incf FSR,f ; index + 2 05813 incf FSR,f 05814 05815 decfsz t17_loop,f 05816 goto red_down_loop 05817 ; 05818 ; 14 Red 05819 ; 05820 decf FSR,f 05821 clrf INDF 05822 movlw BRIGHT1 05823 btfsc in1,6 05824 addwf INDF,f ;01 05825 movlw BRIGHT2 05826 btfsc in1,7 05827 addwf INDF,f ;01 05828 05829 return 05830 05831 ;********************************************************************** 05832 green_up 05833 ;********************************************************************** 05834 05835 movlw 0x0d 05836 movwf t17_loop 05837 05838 movlw C4_C1_reg ; index = 13 G 05839 movwf FSR 05840 05841 green_up_loop 05842 movfw INDF ; load G [index] 05843 incf FSR,f ; index ++ 05844 movwf INDF ; store G [index] 05845 05846 decf FSR,f ; index - 2 05847 decf FSR,f 05848 05849 decfsz t17_loop,f 05850 goto green_up_loop 05851 ; 05852 ; 01 Green 05853 ; 05854 incf FSR,f 05855 clrf INDF 05856 movlw BRIGHT1 05857 btfsc in1,4 05858 addwf INDF,f ;01 05859 movlw BRIGHT2 05860 btfsc in1,5 05861 addwf INDF,f ;01 05862 05863 return MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 135 LOC OBJECT CODE LINE SOURCE TEXT VALUE 05864 05865 ;********************************************************************** 05866 green_down 05867 ;********************************************************************** 05868 05869 movlw 0x0d 05870 movwf t17_loop 05871 05872 movlw C0_C3_reg ; index = 02 Green 05873 movwf FSR 05874 05875 green_down_loop 05876 movfw INDF ; load R [index] 05877 decf FSR,f ; index - 1 05878 movwf INDF ; store R [index] 05879 05880 incf FSR,f ; index + 2 05881 incf FSR,f 05882 05883 decfsz t17_loop,f 05884 goto green_down_loop 05885 ; 05886 ; 14 Green 05887 ; 05888 decf FSR,f 05889 clrf INDF 05890 movlw BRIGHT1 05891 btfsc in1,4 05892 addwf INDF,f ;01 05893 movlw BRIGHT2 05894 btfsc in1,5 05895 addwf INDF,f ;01 05896 05897 return 05898 05899 05900 ;********************************************************************** 05901 blue_up 05902 ;********************************************************************** 05903 05904 movlw 0x0d 05905 movwf t17_loop 05906 05907 movlw C2_C1_reg ; index = 13 G 05908 movwf FSR 05909 05910 blue_up_loop 05911 movfw INDF ; load G [index] 05912 incf FSR,f ; index ++ 05913 movwf INDF ; store G [index] 05914 05915 decf FSR,f ; index - 2 05916 decf FSR,f MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 136 LOC OBJECT CODE LINE SOURCE TEXT VALUE 05917 05918 decfsz t17_loop,f 05919 goto blue_up_loop 05920 ; 05921 ; 01 blue 05922 ; 05923 incf FSR,f 05924 clrf INDF 05925 movlw BRIGHT1 05926 btfsc in1,2 05927 addwf INDF,f ;01 05928 movlw BRIGHT2 05929 btfsc in1,3 05930 addwf INDF,f ;01 05931 05932 return 05933 05934 05935 ;********************************************************************** 05936 blue_dowm 05937 ;********************************************************************** 05938 05939 movlw 0x0d 05940 movwf t17_loop 05941 05942 movlw C4_C3_reg ; index = 02 Blue 05943 movwf FSR 05944 05945 blue_down_loop 05946 movfw INDF ; load R [index] 05947 decf FSR,f ; index - 1 05948 movwf INDF ; store R [index] 05949 05950 incf FSR,f ; index + 2 05951 incf FSR,f 05952 05953 decfsz t17_loop,f 05954 goto blue_down_loop 05955 ; 05956 ; 14 Green 05957 ; 05958 decf FSR,f 05959 clrf INDF 05960 movlw BRIGHT1 05961 btfsc in1,2 05962 addwf INDF,f ;01 05963 movlw BRIGHT2 05964 btfsc in1,3 05965 addwf INDF,f ;01 05966 05967 return 05968 05969 ;********************************************************************** MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 137 LOC OBJECT CODE LINE SOURCE TEXT VALUE 05970 rgb_stick_expand ; this is a nice chunk of code without jumps to sit on the 11 bit boundry 05971 ;********************************************************************** 05972 05973 movlw A2_C0_reg 05974 movwf FSR 05975 movlw 0xff 05976 btfsc in1,6 ; R7 05977 movwf INDF 05978 05979 movlw A2_C1_reg 05980 movwf FSR 05981 movlw 0xff 05982 btfsc in0,4 ; R13 05983 movwf INDF 05984 05985 movlw A2_C2_reg 05986 movwf FSR 05987 movlw 0xff 05988 btfsc in0,2 ; R11 05989 movwf INDF 05990 05991 movlw A2_C3_reg 05992 movwf FSR 05993 movlw 0xff 05994 btfsc in3,0 ; G1 05995 movwf INDF 05996 05997 movlw A2_C4_reg 05998 movwf FSR 05999 movlw 0xff 06000 btfsc in3,2 ; 3G 06001 movwf INDF 06002 06003 movlw A2_C5_reg 06004 movwf FSR 06005 movlw 0xff 06006 btfsc in3,5 ; 6G 06007 movwf INDF 06008 06009 movlw C0_C1_reg 06010 movwf FSR 06011 movlw 0xff 06012 btfsc in4,5 ; 14B 06013 movwf INDF 06014 06015 movlw C0_C2_reg 06016 movwf FSR 06017 movlw 0xff 06018 btfsc in4,3 ; 12B 06019 movwf INDF 06020 06021 movlw C0_C3_reg 06022 movwf FSR MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 138 LOC OBJECT CODE LINE SOURCE TEXT VALUE 06023 movlw 0xff 06024 btfsc in3,1 ; 2G 06025 movwf INDF 06026 06027 movlw C0_C4_reg 06028 movwf FSR 06029 movlw 0xff 06030 btfsc in1,2 ; 3R 06031 movwf INDF 06032 06033 movlw C0_C5_reg 06034 movwf FSR 06035 movlw 0xff 06036 btfsc in3,4 ; 5G 06037 movwf INDF 06038 06039 movlw C1_C2_reg 06040 movwf FSR 06041 movlw 0xff 06042 btfsc in4,2 ; 11B 06043 movwf INDF 06044 06045 movlw C1_C3_reg 06046 movwf FSR 06047 movlw 0xff 06048 btfsc in5,0 ; 1B 06049 movwf INDF 06050 06051 movlw C1_C4_reg 06052 movwf FSR 06053 movlw 0xff 06054 btfsc in5,3 ; 4B 06055 movwf INDF 06056 06057 movlw C1_C5_reg 06058 movwf FSR 06059 movlw 0xff 06060 btfsc in5,4 ; 5B 06061 movwf INDF 06062 06063 movlw C2_C3_reg 06064 movwf FSR 06065 movlw 0xff 06066 btfsc in1,1 ; 2R 06067 movwf INDF 06068 06069 movlw C2_C4_reg 06070 movwf FSR 06071 movlw 0xff 06072 btfsc in5,2 ; 3B 06073 movwf INDF 06074 06075 movlw C2_C5_reg MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 139 LOC OBJECT CODE LINE SOURCE TEXT VALUE 06076 movwf FSR 06077 movlw 0xff 06078 btfsc in5,5 ; 6B 06079 movwf INDF 06080 06081 movlw C3_C4_reg 06082 movwf FSR 06083 movlw 0xff 06084 btfsc in3,3 ; 4G 06085 movwf INDF 06086 06087 movlw C3_C5_reg 06088 movwf FSR 06089 movlw 0xff 06090 btfsc in1,4 ; 5R 06091 movwf INDF 06092 06093 movlw C4_C5_reg 06094 movwf FSR 06095 movlw 0xff 06096 btfsc in1,5 ; 6R 06097 movwf INDF 06098 06099 movlw C0_A2_reg 06100 movwf FSR 06101 movlw 0xff 06102 btfsc in0,0 ; 9R 06103 movwf INDF 06104 06105 movlw C1_A2_reg 06106 movwf FSR 06107 movlw 0xff 06108 btfsc in4,1 ; 10B 06109 movwf INDF 06110 06111 movlw C2_A2_reg 06112 movwf FSR 06113 movlw 0xff 06114 btfsc in4,0 ; 9B 06115 movwf INDF 06116 06117 movlw C3_A2_reg 06118 movwf FSR 06119 movlw 0xff 06120 btfsc in0,1 ; 10R 06121 movwf INDF 06122 06123 movlw C4_A2_reg 06124 movwf FSR 06125 movlw 0xff 06126 btfsc in2,0 ; 9G 06127 movwf INDF 06128 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 140 LOC OBJECT CODE LINE SOURCE TEXT VALUE 06129 movlw C5_A2_reg 06130 movwf FSR 06131 movlw 0xff 06132 btfsc in2,1 ; 10G 06133 movwf INDF 06134 06135 movlw C1_C0_reg 06136 movwf FSR 06137 movlw 0xff 06138 btfsc in5,7 ; 8B 06139 movwf INDF 06140 06141 movlw C2_C0_reg 06142 movwf FSR 06143 movlw 0xff 06144 btfsc in5,6 ; 7B 06145 movwf INDF 06146 06147 movlw C3_C0_reg 06148 movwf FSR 06149 movlw 0xff 06150 btfsc in1,7 ; 8R 06151 movwf INDF 06152 06153 movlw C4_C0_reg 06154 movwf FSR 06155 movlw 0xff 06156 btfsc in3,6 06157 movwf INDF ; 7G 06158 06159 movlw C5_C0_reg 06160 movwf FSR 06161 movlw 0xff 06162 btfsc in3,7 06163 movwf INDF ; 8G 06164 06165 movlw C2_C1_reg 06166 movwf FSR 06167 movlw 0xff 06168 btfsc in4,4 ; 13B 06169 movwf INDF 06170 06171 movlw C3_C1_reg 06172 movwf FSR 06173 movlw 0xff 06174 btfsc in0,5 ; 14R 06175 movwf INDF 06176 06177 movlw C4_C1_reg 06178 movwf FSR 06179 movlw 0xff 06180 btfsc in2,4 ; 13G 06181 movwf INDF MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 141 LOC OBJECT CODE LINE SOURCE TEXT VALUE 06182 06183 movlw C5_C1_reg 06184 movwf FSR 06185 movlw 0xff 06186 btfsc in2,5 ; 14G 06187 movwf INDF 06188 06189 movlw C3_C2_reg 06190 movwf FSR 06191 movlw 0xff 06192 btfsc in0,3 ; 12R 06193 movwf INDF 06194 06195 movlw C4_C2_reg 06196 movwf FSR 06197 movlw 0xff 06198 btfsc in2,2 ; 11G 06199 movwf INDF 06200 06201 movlw C5_C2_reg 06202 movwf FSR 06203 movlw 0xff 06204 btfsc in2,3 ; 12G 06205 movwf INDF 06206 06207 movlw C4_C3_reg 06208 movwf FSR 06209 movlw 0xff 06210 btfsc in5,1 ; 2B 06211 movwf INDF 06212 06213 movlw C5_C3_reg 06214 movwf FSR 06215 movlw 0xff 06216 btfsc in1,0 ; 1R 06217 movwf INDF 06218 06219 movlw C5_C4_reg 06220 movwf FSR 06221 movlw 0xff 06222 btfsc in1,3 ; 4R 06223 movwf INDF 06224 06225 return 06226 06227 ;********************************************************************** 06228 rgb_stick_expand2 ; this is a nice chunk of code without jumps to sit on the 11 bit boundry 06229 ;********************************************************************** 06230 06231 ;1R 0x0f 06232 movlw C5_C3_reg 06233 movwf FSR 06234 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 142 LOC OBJECT CODE LINE SOURCE TEXT VALUE 06235 btfsc in1,0 06236 incf INDF,f 06237 06238 btfsc in7,0 06239 decf INDF,f 06240 06241 ;2R 0xf0 06242 movlw C2_C3_reg 06243 movwf FSR 06244 06245 btfsc in1,1 06246 incf INDF,f 06247 06248 btfsc in7,1 06249 decf INDF,f 06250 06251 06252 ;3R 0xf0 06253 movlw C0_C4_reg 06254 movwf FSR 06255 06256 btfsc in1,2 06257 incf INDF,f 06258 06259 btfsc in7,2 06260 decf INDF,f 06261 06262 ;4R 0x0f 06263 movlw C5_C4_reg 06264 movwf FSR 06265 06266 btfsc in1,3 06267 incf INDF,f 06268 06269 btfsc in7,3 06270 decf INDF,f 06271 06272 ;5R 0xf0 06273 movlw C3_C5_reg 06274 movwf FSR 06275 06276 btfsc in1,4 06277 incf INDF,f 06278 06279 btfsc in7,4 06280 decf INDF,f 06281 06282 ;6R 0xf0 06283 movlw C4_C5_reg 06284 movwf FSR 06285 06286 btfsc in1,5 06287 incf INDF,f MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 143 LOC OBJECT CODE LINE SOURCE TEXT VALUE 06288 06289 btfsc in7,5 06290 decf INDF,f 06291 06292 ;7R 0xf0 06293 movlw A2_C0_reg 06294 movwf FSR 06295 06296 btfsc in1,6 06297 incf INDF,f 06298 06299 btfsc in7,6 06300 decf INDF,f 06301 06302 ;8R 0x0f 06303 movlw C3_C0_reg 06304 movwf FSR 06305 06306 btfsc in1,7 06307 incf INDF,f 06308 06309 btfsc in7,7 06310 decf INDF,f 06311 06312 ;9R 0x0f 06313 movlw C0_A2_reg 06314 movwf FSR 06315 06316 btfsc in0,0 06317 incf INDF,f 06318 06319 btfsc in6,0 06320 decf INDF,f 06321 06322 ;10R 0x0f 06323 movlw C3_A2_reg 06324 movwf FSR 06325 06326 btfsc in0,1 06327 incf INDF,f 06328 06329 btfsc in6,1 06330 decf INDF,f 06331 06332 ;11R 0xf0 06333 movlw A2_C2_reg 06334 movwf FSR 06335 06336 btfsc in0,2 06337 incf INDF,f 06338 06339 btfsc in6,2 06340 decf INDF,f MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 144 LOC OBJECT CODE LINE SOURCE TEXT VALUE 06341 06342 ;12R 0x0f 06343 movlw C3_C2_reg 06344 movwf FSR 06345 06346 btfsc in0,3 06347 incf INDF,f 06348 06349 btfsc in6,3 06350 decf INDF,f 06351 06352 ;13R 0xf0 06353 movlw A2_C1_reg 06354 movwf FSR 06355 06356 btfsc in0,4 06357 incf INDF,f 06358 06359 btfsc in6,4 06360 decf INDF,f 06361 06362 ;14R 0x0f 06363 movlw C3_C1_reg 06364 movwf FSR 06365 06366 btfsc in0,5 06367 incf INDF,f 06368 06369 btfsc in6,5 06370 decf INDF,f 06371 06372 ;1G 0xf0 06373 movlw A2_C3_reg 06374 movwf FSR 06375 06376 btfsc in3,0 06377 incf INDF,f 06378 06379 btfsc in9,0 06380 decf INDF,f 06381 06382 ;2G 0xf0 06383 movlw C0_C3_reg 06384 movwf FSR 06385 06386 btfsc in3,1 06387 incf INDF,f 06388 06389 btfsc in9,1 06390 decf INDF,f 06391 06392 ;3G 0xf0 06393 movlw A2_C4_reg MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 145 LOC OBJECT CODE LINE SOURCE TEXT VALUE 06394 movwf FSR 06395 06396 btfsc in3,2 06397 incf INDF,f 06398 06399 btfsc in9,2 06400 decf INDF,f 06401 06402 ;4G 0xf0 06403 movlw C3_C4_reg 06404 movwf FSR 06405 06406 btfsc in3,3 06407 incf INDF,f 06408 06409 btfsc in9,3 06410 decf INDF,f 06411 06412 ;5G 0xf0 06413 movlw C0_C5_reg 06414 movwf FSR 06415 06416 btfsc in3,4 06417 incf INDF,f 06418 06419 btfsc in9,4 06420 decf INDF,f 06421 06422 ;6G 0xf0 06423 movlw A2_C5_reg 06424 movwf FSR 06425 06426 btfsc in3,5 06427 incf INDF,f 06428 06429 btfsc in9,5 06430 decf INDF,f 06431 06432 ;7G 0x0f 06433 movlw C4_C0_reg 06434 movwf FSR 06435 06436 btfsc in3,6 06437 incf INDF,f 06438 06439 btfsc in9,6 06440 decf INDF,f 06441 06442 ;8G 0x0f 06443 movlw C5_C0_reg 06444 movwf FSR 06445 06446 btfsc in3,7 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 146 LOC OBJECT CODE LINE SOURCE TEXT VALUE 06447 incf INDF,f 06448 06449 btfsc in9,7 06450 decf INDF,f 06451 06452 ;9G 0x0f 06453 movlw C4_A2_reg 06454 movwf FSR 06455 06456 btfsc in2,0 06457 incf INDF,f 06458 06459 btfsc in8,0 06460 decf INDF,f 06461 06462 ;10G 0x0f 06463 movlw C5_A2_reg 06464 movwf FSR 06465 06466 btfsc in2,1 06467 incf INDF,f 06468 06469 btfsc in8,1 06470 decf INDF,f 06471 06472 ;11G 0x0f 06473 movlw C4_C2_reg 06474 movwf FSR 06475 06476 btfsc in2,2 06477 incf INDF,f 06478 06479 btfsc in8,2 06480 decf INDF,f 06481 06482 ;12G 0x0f 06483 movlw C5_C2_reg 06484 movwf FSR 06485 06486 btfsc in2,3 06487 incf INDF,f 06488 06489 btfsc in8,3 06490 decf INDF,f 06491 06492 ;13G 0x0f 06493 movlw C4_C1_reg 06494 movwf FSR 06495 06496 btfsc in2,4 06497 incf INDF,f 06498 06499 btfsc in8,4 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 147 LOC OBJECT CODE LINE SOURCE TEXT VALUE 06500 decf INDF,f 06501 06502 ;14G 0x0f 06503 movlw C5_C1_reg 06504 movwf FSR 06505 06506 btfsc in2,5 06507 incf INDF,f 06508 06509 btfsc in8,5 06510 decf INDF,f 06511 06512 ;1B 0xf0 06513 movlw C1_C3_reg 06514 movwf FSR 06515 06516 btfsc in5,0 06517 incf INDF,f 06518 06519 btfsc in11,0 06520 decf INDF,f 06521 06522 ;2B 0x0f 06523 movlw C4_C3_reg 06524 movwf FSR 06525 06526 btfsc in5,1 06527 incf INDF,f 06528 06529 btfsc in11,1 06530 decf INDF,f 06531 06532 ;3B 0xf0 06533 movlw C2_C4_reg 06534 movwf FSR 06535 06536 btfsc in5,2 06537 incf INDF,f 06538 06539 btfsc in11,2 06540 decf INDF,f 06541 06542 ;4B 0xf0 06543 movlw C1_C4_reg 06544 movwf FSR 06545 06546 btfsc in5,3 06547 incf INDF,f 06548 06549 btfsc in11,3 06550 decf INDF,f 06551 06552 ;5B 0xf0 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 148 LOC OBJECT CODE LINE SOURCE TEXT VALUE 06553 movlw C1_C5_reg 06554 movwf FSR 06555 06556 btfsc in5,4 06557 incf INDF,f 06558 06559 btfsc in11,4 06560 decf INDF,f 06561 06562 ;6B 0xf0 06563 movlw C2_C5_reg 06564 movwf FSR 06565 06566 btfsc in5,5 06567 incf INDF,f 06568 06569 btfsc in11,5 06570 decf INDF,f 06571 06572 ;7B 0x0f 06573 movlw C2_C0_reg 06574 movwf FSR 06575 06576 btfsc in5,6 06577 incf INDF,f 06578 06579 btfsc in11,6 06580 decf INDF,f 06581 06582 ;8B 0x0f 06583 movlw C1_C0_reg 06584 movwf FSR 06585 06586 btfsc in5,7 06587 incf INDF,f 06588 06589 btfsc in11,7 06590 decf INDF,f 06591 06592 ;9B 0x0f 06593 movlw C2_A2_reg 06594 movwf FSR 06595 06596 btfsc in4,0 06597 incf INDF,f 06598 06599 btfsc in10,0 06600 decf INDF,f 06601 06602 ;10B 0x0f 06603 movlw C1_A2_reg 06604 movwf FSR 06605 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 149 LOC OBJECT CODE LINE SOURCE TEXT VALUE 06606 btfsc in4,1 06607 incf INDF,f 06608 06609 btfsc in10,1 06610 decf INDF,f 06611 06612 ;11B 0xf0 06613 movlw C1_C2_reg 06614 movwf FSR 06615 06616 btfsc in4,2 06617 incf INDF,f 06618 06619 btfsc in10,2 06620 decf INDF,f 06621 06622 ;12B 0xf0 06623 movlw C0_C2_reg 06624 movwf FSR 06625 06626 btfsc in4,3 06627 incf INDF,f 06628 06629 btfsc in10,3 06630 decf INDF,f 06631 06632 ;13B 0x0f 06633 movlw C2_C1_reg 06634 movwf FSR 06635 06636 btfsc in4,4 06637 incf INDF,f 06638 06639 btfsc in10,4 06640 decf INDF,f 06641 06642 ;14B 0xf0 06643 movlw C0_C1_reg 06644 movwf FSR 06645 06646 btfsc in4,5 06647 incf INDF,f 06648 06649 btfsc in10,5 06650 decf INDF,f 06651 06652 return 06653 06654 #endif 06655 06656 #ifdef PATTERN18 06657 ;********************************************************************** 06658 table_type_18 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 150 LOC OBJECT CODE LINE SOURCE TEXT VALUE 06659 ;********************************************************************** 06660 ; 06661 ; 6 bytes 06662 ; 0 1 2 3 4 5 06663 ; DDRRRRRR RRRRRRRR DDGGGGGG GGGGGGGG DDBBBBBB BBBBBBBB 06664 ; xx111110 00000000 xx111110 00000000 xx111110 00000000 06665 ; xx432109 87654321 xx432109 87654321 xx432109 87654321 06666 ; 06667 ; DDDDDD = delay counter 06668 ; XX = not used 06669 06670 pageselw get_next_pattern_entry 06671 call get_next_pattern_entry 06672 movwf in0 06673 06674 call get_next_pattern_entry 06675 movwf in1 06676 06677 call get_next_pattern_entry 06678 movwf in2 06679 06680 call get_next_pattern_entry 06681 movwf in3 06682 06683 call get_next_pattern_entry 06684 movwf in4 06685 06686 call get_next_pattern_entry 06687 movwf in5 06688 06689 pageselw table_type_18 06690 ; collected the 6 bits for the delay counter 06691 06692 clrf p2count 06693 06694 btfsc in0,7 06695 bsf p2count,0 06696 06697 btfsc in0,6 06698 bsf p2count,1 06699 06700 btfsc in2,7 06701 bsf p2count,2 06702 06703 btfsc in2,6 06704 bsf p2count,3 06705 06706 btfsc in4,7 06707 bsf p2count,4 06708 06709 btfsc in4,6 06710 bsf p2count,5 06711 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 151 LOC OBJECT CODE LINE SOURCE TEXT VALUE 06712 p18_loop 06713 ; run through the up/down bits. 06714 06715 ;1R 0x0f 06716 movlw C5_C3_reg 06717 movwf FSR 06718 06719 btfsc in1,0 06720 call p18_led_up 06721 btfss in1,0 06722 call p18_led_down 06723 06724 ;2R 0xf0 06725 movlw C2_C3_reg 06726 movwf FSR 06727 06728 btfsc in1,1 06729 call p18_led_up 06730 btfss in1,1 06731 call p18_led_down 06732 06733 ;3R 0xf0 06734 movlw C0_C4_reg 06735 movwf FSR 06736 06737 btfsc in1,2 06738 call p18_led_up 06739 btfss in1,2 06740 call p18_led_down 06741 06742 ;4R 0x0f 06743 movlw C5_C4_reg 06744 movwf FSR 06745 06746 btfsc in1,3 06747 call p18_led_up 06748 btfss in1,3 06749 call p18_led_down 06750 06751 ;5R 0xf0 06752 movlw C3_C5_reg 06753 movwf FSR 06754 06755 btfsc in1,4 06756 call p18_led_up 06757 btfss in1,4 06758 call p18_led_down 06759 06760 ;6R 0xf0 06761 movlw C4_C5_reg 06762 movwf FSR 06763 06764 btfsc in1,5 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 152 LOC OBJECT CODE LINE SOURCE TEXT VALUE 06765 call p18_led_up 06766 btfss in1,5 06767 call p18_led_down 06768 06769 06770 ;7R 0xf0 06771 movlw A2_C0_reg 06772 movwf FSR 06773 06774 btfsc in1,6 06775 call p18_led_up 06776 btfss in1,6 06777 call p18_led_down 06778 06779 ;8R 0x0f 06780 movlw C3_C0_reg 06781 movwf FSR 06782 06783 btfsc in1,7 06784 call p18_led_up 06785 btfss in1,7 06786 call p18_led_down 06787 06788 06789 ;9R 0x0f 06790 movlw C0_A2_reg 06791 movwf FSR 06792 06793 btfsc in0,0 06794 call p18_led_up 06795 btfss in0,0 06796 call p18_led_down 06797 06798 06799 ;10R 0x0f 06800 movlw C3_A2_reg 06801 movwf FSR 06802 06803 btfsc in0,1 06804 call p18_led_up 06805 btfss in0,1 06806 call p18_led_down 06807 06808 06809 ;11R 0xf0 06810 movlw A2_C2_reg 06811 movwf FSR 06812 06813 btfsc in0,2 06814 call p18_led_up 06815 btfss in0,2 06816 call p18_led_down 06817 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 153 LOC OBJECT CODE LINE SOURCE TEXT VALUE 06818 ;12R 0x0f 06819 movlw C3_C2_reg 06820 movwf FSR 06821 06822 btfsc in0,3 06823 call p18_led_up 06824 btfss in0,3 06825 call p18_led_down 06826 06827 ;13R 0xf0 06828 movlw A2_C1_reg 06829 movwf FSR 06830 06831 btfsc in0,4 06832 call p18_led_up 06833 btfss in0,4 06834 call p18_led_down 06835 06836 06837 ;14R 0x0f 06838 movlw C3_C1_reg 06839 movwf FSR 06840 06841 btfsc in0,5 06842 call p18_led_up 06843 btfss in0,5 06844 call p18_led_down 06845 06846 ;1G 0xf0 06847 movlw A2_C3_reg 06848 movwf FSR 06849 06850 btfsc in3,0 06851 call p18_led_up 06852 btfss in3,0 06853 call p18_led_down 06854 06855 06856 ;2G 0xf0 06857 movlw C0_C3_reg 06858 movwf FSR 06859 06860 btfsc in3,1 06861 call p18_led_up 06862 btfss in3,1 06863 call p18_led_down 06864 06865 06866 ;3G 0xf0 06867 movlw A2_C4_reg 06868 movwf FSR 06869 06870 btfsc in3,2 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 154 LOC OBJECT CODE LINE SOURCE TEXT VALUE 06871 call p18_led_up 06872 btfss in3,2 06873 call p18_led_down 06874 06875 ;4G 0xf0 06876 movlw C3_C4_reg 06877 movwf FSR 06878 06879 btfsc in3,3 06880 call p18_led_up 06881 btfss in3,3 06882 call p18_led_down 06883 06884 ;5G 0xf0 06885 movlw C0_C5_reg 06886 movwf FSR 06887 06888 btfsc in3,4 06889 call p18_led_up 06890 btfss in3,4 06891 call p18_led_down 06892 06893 ;6G 0xf0 06894 movlw A2_C5_reg 06895 movwf FSR 06896 06897 btfsc in3,5 06898 call p18_led_up 06899 btfss in3,5 06900 call p18_led_down 06901 06902 06903 ;7G 0x0f 06904 movlw C4_C0_reg 06905 movwf FSR 06906 06907 btfsc in3,6 06908 call p18_led_up 06909 btfss in3,6 06910 call p18_led_down 06911 06912 06913 ;8G 0x0f 06914 movlw C5_C0_reg 06915 movwf FSR 06916 06917 btfsc in3,7 06918 call p18_led_up 06919 btfss in3,7 06920 call p18_led_down 06921 06922 ;9G 0x0f 06923 movlw C4_A2_reg MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 155 LOC OBJECT CODE LINE SOURCE TEXT VALUE 06924 movwf FSR 06925 06926 btfsc in2,0 06927 call p18_led_up 06928 btfss in2,0 06929 call p18_led_down 06930 06931 06932 ;10G 0x0f 06933 movlw C5_A2_reg 06934 movwf FSR 06935 06936 btfsc in2,1 06937 call p18_led_up 06938 btfss in2,1 06939 call p18_led_down 06940 06941 ;11G 0x0f 06942 movlw C4_C2_reg 06943 movwf FSR 06944 06945 btfsc in2,2 06946 call p18_led_up 06947 btfss in2,2 06948 call p18_led_down 06949 06950 ;12G 0x0f 06951 movlw C5_C2_reg 06952 movwf FSR 06953 06954 btfsc in2,3 06955 call p18_led_up 06956 btfss in2,3 06957 call p18_led_down 06958 06959 06960 ;13G 0x0f 06961 movlw C4_C1_reg 06962 movwf FSR 06963 06964 btfsc in2,4 06965 call p18_led_up 06966 btfss in2,4 06967 call p18_led_down 06968 06969 ;14G 0x0f 06970 movlw C5_C1_reg 06971 movwf FSR 06972 06973 btfsc in2,5 06974 call p18_led_up 06975 btfss in2,5 06976 call p18_led_down MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 156 LOC OBJECT CODE LINE SOURCE TEXT VALUE 06977 06978 06979 ;1B 0xf0 06980 movlw C1_C3_reg 06981 movwf FSR 06982 06983 btfsc in5,0 06984 call p18_led_up 06985 btfss in5,0 06986 call p18_led_down 06987 06988 06989 ;2B 0x0f 06990 movlw C4_C3_reg 06991 movwf FSR 06992 06993 btfsc in5,1 06994 call p18_led_up 06995 btfss in5,1 06996 call p18_led_down 06997 06998 ;3B 0xf0 06999 movlw C2_C4_reg 07000 movwf FSR 07001 07002 btfsc in5,2 07003 call p18_led_up 07004 btfss in5,2 07005 call p18_led_down 07006 07007 ;4B 0xf0 07008 movlw C1_C4_reg 07009 movwf FSR 07010 07011 btfsc in5,3 07012 call p18_led_up 07013 btfss in5,3 07014 call p18_led_down 07015 07016 07017 ;5B 0xf0 07018 movlw C1_C5_reg 07019 movwf FSR 07020 07021 btfsc in5,4 07022 call p18_led_up 07023 btfss in5,4 07024 call p18_led_down 07025 07026 07027 ;6B 0xf0 07028 movlw C2_C5_reg 07029 movwf FSR MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 157 LOC OBJECT CODE LINE SOURCE TEXT VALUE 07030 07031 btfsc in5,5 07032 call p18_led_up 07033 btfss in5,5 07034 call p18_led_down 07035 07036 ;7B 0x0f 07037 movlw C2_C0_reg 07038 movwf FSR 07039 07040 btfsc in5,6 07041 call p18_led_up 07042 btfss in5,6 07043 call p18_led_down 07044 07045 ;8B 0x0f 07046 movlw C1_C0_reg 07047 movwf FSR 07048 07049 btfsc in5,7 07050 call p18_led_up 07051 btfss in5,7 07052 call p18_led_down 07053 07054 07055 ;9B 0x0f 07056 movlw C2_A2_reg 07057 movwf FSR 07058 07059 btfsc in4,0 07060 call p18_led_up 07061 btfss in4,0 07062 call p18_led_down 07063 07064 07065 ;10B 0x0f 07066 movlw C1_A2_reg 07067 movwf FSR 07068 07069 btfsc in4,1 07070 call p18_led_up 07071 btfss in4,1 07072 call p18_led_down 07073 07074 07075 ;11B 0xf0 07076 movlw C1_C2_reg 07077 movwf FSR 07078 07079 btfsc in4,2 07080 call p18_led_up 07081 btfss in4,2 07082 call p18_led_down MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 158 LOC OBJECT CODE LINE SOURCE TEXT VALUE 07083 07084 07085 ;12B 0xf0 07086 movlw C0_C2_reg 07087 movwf FSR 07088 07089 btfsc in4,3 07090 call p18_led_up 07091 btfss in4,3 07092 call p18_led_down 07093 07094 07095 ;13B 0x0f 07096 movlw C2_C1_reg 07097 movwf FSR 07098 07099 btfsc in4,4 07100 call p18_led_up 07101 btfss in4,4 07102 call p18_led_down 07103 07104 07105 ;14B 0xf0 07106 movlw C0_C1_reg 07107 movwf FSR 07108 07109 btfsc in4,5 07110 call p18_led_up 07111 btfss in4,5 07112 call p18_led_down 07113 07114 pageselw strobe_delay 07115 movf pspeed,w 07116 call strobe_delay 07117 pageselw table_type_18 07118 07119 ; This is a quick hack, because without this button presses are not seen for minutes 07120 ; This early exit might impact the pattern getting displayed. 07121 ; 07122 btfsc button,0 ; if putton pressed show pattern id 07123 goto t18_exit 07124 07125 btfsc IR_in_good,0 07126 goto t18_exit 07127 07128 decfsz p2count,f 07129 goto p18_loop 07130 07131 t18_exit 07132 return 07133 07134 ;********************************************************************** 07135 p18_led_up MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 159 LOC OBJECT CODE LINE SOURCE TEXT VALUE 07136 ;********************************************************************** 07137 07138 incf INDF,f 07139 btfsc STATUS,Z 07140 comf INDF,f 07141 return 07142 07143 ;********************************************************************** 07144 p18_led_down 07145 ;********************************************************************** 07146 07147 movf INDF,f 07148 btfss STATUS,Z 07149 decf INDF,f 07150 return 07151 07152 #endif 07153 #ifdef PATTERN20 07154 ;********************************************************************** 07155 table_type_20 07156 ;********************************************************************** 07157 ; 07158 ; 6 bytes 07159 ; 0 1 07160 ; RRRRGGGG BBBBDDDD 07161 ; xx111110 00000000 07162 ; xx432109 87654321 07163 ; 07164 ; DDDD = delay counter 07165 07166 pageselw get_next_pattern_entry 07167 call get_next_pattern_entry 07168 movwf in0 07169 07170 call get_next_pattern_entry 07171 movwf in1 07172 07173 ; collected the 6 bits for the delay counter 07174 07175 clrf p2count 07176 07177 btfsc in1,3 07178 bsf p2count,7 07179 07180 btfsc in1,2 07181 bsf p2count,6 07182 07183 btfsc in1,1 07184 bsf p2count,5 07185 07186 btfsc in1,0 07187 bsf p2count,4 07188 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 160 LOC OBJECT CODE LINE SOURCE TEXT VALUE 07189 p20_loop 07190 ; run through the up/down bits. 07191 07192 ;1R 0x0f 07193 movlw Ar_reg 07194 movwf FSR 07195 07196 btfsc in0,7 07197 call p18_led_up 07198 btfss in0,7 07199 call p18_led_down 07200 07201 ;2R 0xf0 07202 movlw Br_reg 07203 movwf FSR 07204 07205 btfsc in0,6 07206 call p18_led_up 07207 btfss in0,6 07208 call p18_led_down 07209 07210 ;3R 0xf0 07211 movlw Cr_reg 07212 movwf FSR 07213 07214 btfsc in0,5 07215 call p18_led_up 07216 btfss in0,5 07217 call p18_led_down 07218 07219 ;4R 0x0f 07220 movlw Dr_reg 07221 movwf FSR 07222 07223 btfsc in0,4 07224 call p18_led_up 07225 btfss in0,4 07226 call p18_led_down 07227 07228 ;1G 0xf0 07229 movlw Ag_reg 07230 movwf FSR 07231 07232 btfsc in0,3 07233 call p18_led_up 07234 btfss in0,3 07235 call p18_led_down 07236 07237 07238 ;2G 0xf0 07239 movlw Bg_reg 07240 movwf FSR 07241 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 161 LOC OBJECT CODE LINE SOURCE TEXT VALUE 07242 btfsc in0,2 07243 call p18_led_up 07244 btfss in0,2 07245 call p18_led_down 07246 07247 07248 ;3G 0xf0 07249 movlw Cg_reg 07250 movwf FSR 07251 07252 btfsc in0,1 07253 call p18_led_up 07254 btfss in0,1 07255 call p18_led_down 07256 07257 ;4G 0xf0 07258 movlw Dg_reg 07259 movwf FSR 07260 07261 btfsc in0,0 07262 call p18_led_up 07263 btfss in0,0 07264 call p18_led_down 07265 07266 ;1B 0xf0 07267 movlw Ab_reg 07268 movwf FSR 07269 07270 btfsc in1,7 07271 call p18_led_up 07272 btfss in1,7 07273 call p18_led_down 07274 07275 07276 ;2B 0x0f 07277 movlw Bb_reg 07278 movwf FSR 07279 07280 btfsc in1,6 07281 call p18_led_up 07282 btfss in1,6 07283 call p18_led_down 07284 07285 ;3B 0xf0 07286 movlw Cb_reg 07287 movwf FSR 07288 07289 btfsc in1,5 07290 call p18_led_up 07291 btfss in1,5 07292 call p18_led_down 07293 07294 ;4B 0xf0 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 162 LOC OBJECT CODE LINE SOURCE TEXT VALUE 07295 movlw Db_reg 07296 movwf FSR 07297 07298 btfsc in1,4 07299 call p18_led_up 07300 btfss in1,4 07301 call p18_led_down 07302 07303 movf pspeed,w 07304 call strobe_delay 07305 07306 07307 ; This is a quick hack, because without this button presses are not seen for minutes 07308 ; This early exit might impact the pattern getting displayed. 07309 ; 07310 btfsc button,0 ; if putton pressed show pattern id 07311 goto t20_exit 07312 07313 btfsc IR_in_good,0 07314 goto t20_exit 07315 07316 decfsz p2count,f 07317 goto p20_loop 07318 07319 t20_exit 07320 return 07321 07322 ;********************************************************************** 07323 p18_led_up 07324 ;********************************************************************** 07325 07326 incf INDF,f 07327 btfsc STATUS,Z 07328 comf INDF,f 07329 return 07330 07331 ;********************************************************************** 07332 p18_led_down 07333 ;********************************************************************** 07334 07335 movf INDF,f 07336 btfss STATUS,Z 07337 decf INDF,f 07338 return 07339 07340 #endif 07341 #ifdef PATTERN20 07342 ;********************************************************************** 07343 table_type_20 07344 ;********************************************************************** 07345 ; 07346 ; 6 bytes 07347 ; 0 1 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 163 LOC OBJECT CODE LINE SOURCE TEXT VALUE 07348 ; RRRRGGGG BBBBDDDD 07349 ; xx111110 00000000 07350 ; xx432109 87654321 07351 ; 07352 ; DDDD = delay counter 07353 07354 pageselw get_next_pattern_entry 07355 call get_next_pattern_entry 07356 movwf in0 07357 07358 call get_next_pattern_entry 07359 movwf in1 07360 07361 ; collected the 6 bits for the delay counter 07362 07363 clrf p2count 07364 07365 btfsc in1,3 07366 bsf p2count,7 07367 07368 btfsc in1,2 07369 bsf p2count,6 07370 07371 btfsc in1,1 07372 bsf p2count,5 07373 07374 btfsc in1,0 07375 bsf p2count,4 07376 07377 p20_loop 07378 ; run through the up/down bits. 07379 07380 ;1R 0x0f 07381 movlw Ar_reg 07382 movwf FSR 07383 07384 btfsc in0,7 07385 call p18_led_up 07386 btfss in0,7 07387 call p18_led_down 07388 07389 ;2R 0xf0 07390 movlw Br_reg 07391 movwf FSR 07392 07393 btfsc in0,6 07394 call p18_led_up 07395 btfss in0,6 07396 call p18_led_down 07397 07398 ;3R 0xf0 07399 movlw Cr_reg 07400 movwf FSR MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 164 LOC OBJECT CODE LINE SOURCE TEXT VALUE 07401 07402 btfsc in0,5 07403 call p18_led_up 07404 btfss in0,5 07405 call p18_led_down 07406 07407 ;4R 0x0f 07408 movlw Dr_reg 07409 movwf FSR 07410 07411 btfsc in0,4 07412 call p18_led_up 07413 btfss in0,4 07414 call p18_led_down 07415 07416 ;1G 0xf0 07417 movlw Ag_reg 07418 movwf FSR 07419 07420 btfsc in0,3 07421 call p18_led_up 07422 btfss in0,3 07423 call p18_led_down 07424 07425 07426 ;2G 0xf0 07427 movlw Bg_reg 07428 movwf FSR 07429 07430 btfsc in0,2 07431 call p18_led_up 07432 btfss in0,2 07433 call p18_led_down 07434 07435 07436 ;3G 0xf0 07437 movlw Cg_reg 07438 movwf FSR 07439 07440 btfsc in0,1 07441 call p18_led_up 07442 btfss in0,1 07443 call p18_led_down 07444 07445 ;4G 0xf0 07446 movlw Dg_reg 07447 movwf FSR 07448 07449 btfsc in0,0 07450 call p18_led_up 07451 btfss in0,0 07452 call p18_led_down 07453 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 165 LOC OBJECT CODE LINE SOURCE TEXT VALUE 07454 ;1B 0xf0 07455 movlw Ab_reg 07456 movwf FSR 07457 07458 btfsc in1,7 07459 call p18_led_up 07460 btfss in1,7 07461 call p18_led_down 07462 07463 07464 ;2B 0x0f 07465 movlw Bb_reg 07466 movwf FSR 07467 07468 btfsc in1,6 07469 call p18_led_up 07470 btfss in1,6 07471 call p18_led_down 07472 07473 ;3B 0xf0 07474 movlw Cb_reg 07475 movwf FSR 07476 07477 btfsc in1,5 07478 call p18_led_up 07479 btfss in1,5 07480 call p18_led_down 07481 07482 ;4B 0xf0 07483 movlw Db_reg 07484 movwf FSR 07485 07486 btfsc in1,4 07487 call p18_led_up 07488 btfss in1,4 07489 call p18_led_down 07490 07491 movf pspeed,w 07492 call strobe_delay 07493 07494 07495 ; This is a quick hack, because without this button presses are not seen for minutes 07496 ; This early exit might impact the pattern getting displayed. 07497 ; 07498 btfsc button,0 ; if putton pressed show pattern id 07499 goto t20_exit 07500 07501 btfsc IR_in_good,0 07502 goto t20_exit 07503 07504 decfsz p2count,f 07505 goto p20_loop 07506 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 166 LOC OBJECT CODE LINE SOURCE TEXT VALUE 07507 t20_exit 07508 return 07509 07510 ;********************************************************************** 07511 p18_led_up 07512 ;********************************************************************** 07513 07514 incf INDF,f 07515 btfsc STATUS,Z 07516 comf INDF,f 07517 return 07518 07519 ;********************************************************************** 07520 p18_led_down 07521 ;********************************************************************** 07522 07523 movf INDF,f 07524 btfss STATUS,Z 07525 decf INDF,f 07526 return 07527 07528 #endif 07529 #ifdef PATTERN20 07530 ;********************************************************************** 07531 table_type_20 07532 ;********************************************************************** 07533 ; 07534 ; 6 bytes 07535 ; 0 1 07536 ; RRRRGGGG BBBBDDDD 07537 ; xx111110 00000000 07538 ; xx432109 87654321 07539 ; 07540 ; DDDD = delay counter 07541 07542 pageselw get_next_pattern_entry 07543 call get_next_pattern_entry 07544 movwf in0 07545 07546 call get_next_pattern_entry 07547 movwf in1 07548 07549 ; collected the 6 bits for the delay counter 07550 07551 clrf p2count 07552 07553 btfsc in1,3 07554 bsf p2count,7 07555 07556 btfsc in1,2 07557 bsf p2count,6 07558 07559 btfsc in1,1 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 167 LOC OBJECT CODE LINE SOURCE TEXT VALUE 07560 bsf p2count,5 07561 07562 btfsc in1,0 07563 bsf p2count,4 07564 07565 p20_loop 07566 ; run through the up/down bits. 07567 07568 ;1R 0x0f 07569 movlw Ar_reg 07570 movwf FSR 07571 07572 btfsc in0,7 07573 call p18_led_up 07574 btfss in0,7 07575 call p18_led_down 07576 07577 ;2R 0xf0 07578 movlw Br_reg 07579 movwf FSR 07580 07581 btfsc in0,6 07582 call p18_led_up 07583 btfss in0,6 07584 call p18_led_down 07585 07586 ;3R 0xf0 07587 movlw Cr_reg 07588 movwf FSR 07589 07590 btfsc in0,5 07591 call p18_led_up 07592 btfss in0,5 07593 call p18_led_down 07594 07595 ;4R 0x0f 07596 movlw Dr_reg 07597 movwf FSR 07598 07599 btfsc in0,4 07600 call p18_led_up 07601 btfss in0,4 07602 call p18_led_down 07603 07604 ;1G 0xf0 07605 movlw Ag_reg 07606 movwf FSR 07607 07608 btfsc in0,3 07609 call p18_led_up 07610 btfss in0,3 07611 call p18_led_down 07612 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 168 LOC OBJECT CODE LINE SOURCE TEXT VALUE 07613 07614 ;2G 0xf0 07615 movlw Bg_reg 07616 movwf FSR 07617 07618 btfsc in0,2 07619 call p18_led_up 07620 btfss in0,2 07621 call p18_led_down 07622 07623 07624 ;3G 0xf0 07625 movlw Cg_reg 07626 movwf FSR 07627 07628 btfsc in0,1 07629 call p18_led_up 07630 btfss in0,1 07631 call p18_led_down 07632 07633 ;4G 0xf0 07634 movlw Dg_reg 07635 movwf FSR 07636 07637 btfsc in0,0 07638 call p18_led_up 07639 btfss in0,0 07640 call p18_led_down 07641 07642 ;1B 0xf0 07643 movlw Ab_reg 07644 movwf FSR 07645 07646 btfsc in1,7 07647 call p18_led_up 07648 btfss in1,7 07649 call p18_led_down 07650 07651 07652 ;2B 0x0f 07653 movlw Bb_reg 07654 movwf FSR 07655 07656 btfsc in1,6 07657 call p18_led_up 07658 btfss in1,6 07659 call p18_led_down 07660 07661 ;3B 0xf0 07662 movlw Cb_reg 07663 movwf FSR 07664 07665 btfsc in1,5 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 169 LOC OBJECT CODE LINE SOURCE TEXT VALUE 07666 call p18_led_up 07667 btfss in1,5 07668 call p18_led_down 07669 07670 ;4B 0xf0 07671 movlw Db_reg 07672 movwf FSR 07673 07674 btfsc in1,4 07675 call p18_led_up 07676 btfss in1,4 07677 call p18_led_down 07678 07679 movf pspeed,w 07680 call strobe_delay 07681 07682 07683 ; This is a quick hack, because without this button presses are not seen for minutes 07684 ; This early exit might impact the pattern getting displayed. 07685 ; 07686 btfsc button,0 ; if putton pressed show pattern id 07687 goto t20_exit 07688 07689 btfsc IR_in_good,0 07690 goto t20_exit 07691 07692 decfsz p2count,f 07693 goto p20_loop 07694 07695 t20_exit 07696 return 07697 07698 ;********************************************************************** 07699 p18_led_up 07700 ;********************************************************************** 07701 07702 incf INDF,f 07703 btfsc STATUS,Z 07704 comf INDF,f 07705 return 07706 07707 ;********************************************************************** 07708 p18_led_down 07709 ;********************************************************************** 07710 07711 movf INDF,f 07712 btfss STATUS,Z 07713 decf INDF,f 07714 return 07715 07716 #endif 07717 07718 #ifdef PATTERN21 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 170 LOC OBJECT CODE LINE SOURCE TEXT VALUE 07719 ;********************************************************************** 0611 07720 table_type_21 07721 ;********************************************************************** 07722 ; 07723 ; 6 bytes 07724 ; 0 1 07725 ; RGRGRGRG RGRGRGRG RGRGRGRG 07726 ; 11223344 55667788 99DDDDDD 07727 ; 07728 ; DDDD = delay counter 07729 0611 3003 008A 07730 pageselw get_next_pattern_entry 0613 2371 07731 call get_next_pattern_entry 0614 00E7 07732 movwf in0 07733 0615 2371 07734 call get_next_pattern_entry 0616 00E8 07735 movwf in1 07736 0617 2371 07737 call get_next_pattern_entry 0618 00E9 07738 movwf in2 07739 07740 ; collected the 6 bits for the delay counter 07741 0619 303F 07742 movlw b'00111111' 061A 0569 07743 andwf in2,w 061B 00EE 07744 movwf p2count 061C 0DEE 07745 rlf p2count,f 061D 0DEE 07746 rlf p2count,f 07747 061E 07748 p21_loop 07749 ; run through the up/down bits. 07750 07751 #ifndef MONO 07752 ;1R 07753 movlw A0_A4_reg 07754 movwf FSR 07755 07756 btfsc in0,7 07757 call p18_led_up 07758 btfss in0,7 07759 call p18_led_down 07760 07761 ;2R 07762 movlw A0_A5_reg 07763 movwf FSR 07764 07765 btfsc in0,5 07766 call p18_led_up 07767 btfss in0,5 07768 call p18_led_down 07769 07770 ;3R 07771 movlw A1_A5_reg MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 171 LOC OBJECT CODE LINE SOURCE TEXT VALUE 07772 movwf FSR 07773 07774 btfsc in0,3 07775 call p18_led_up 07776 btfss in0,3 07777 call p18_led_down 07778 07779 ;4R 07780 movlw A0_A2_reg 07781 movwf FSR 07782 07783 btfsc in0,1 07784 call p18_led_up 07785 btfss in0,1 07786 call p18_led_down 07787 07788 ;5R 07789 movlw A2_A4_reg 07790 movwf FSR 07791 07792 btfsc in1,7 07793 call p18_led_up 07794 btfss in1,7 07795 call p18_led_down 07796 07797 07798 ;6R 07799 movlw A2_A5_reg 07800 movwf FSR 07801 07802 btfsc in1,5 07803 call p18_led_up 07804 btfss in1,5 07805 call p18_led_down 07806 07807 07808 ;7R 07809 movlw A0_A1_reg 07810 movwf FSR 07811 07812 btfsc in1,3 07813 call p18_led_up 07814 btfss in1,3 07815 call p18_led_down 07816 07817 ;8R 07818 movlw A1_A4_reg 07819 movwf FSR 07820 07821 btfsc in1,1 07822 call p18_led_up 07823 btfss in1,1 07824 call p18_led_down MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 172 LOC OBJECT CODE LINE SOURCE TEXT VALUE 07825 07826 ;9R 07827 movlw A4_A5_reg 07828 movwf FSR 07829 07830 btfsc in2,7 07831 call p18_led_up 07832 btfss in2,7 07833 call p18_led_down 07834 #endif 07835 07836 07837 ;1G 061E 3033 07838 movlw A4_A0_reg 061F 0084 07839 movwf FSR 07840 0620 1B67 07841 btfsc in0,6 0621 265D 07842 call p18_led_up 0622 1F67 07843 btfss in0,6 0623 2661 07844 call p18_led_down 07845 07846 ;2G 0624 3037 07847 movlw A5_A0_reg 0625 0084 07848 movwf FSR 07849 0626 1A67 07850 btfsc in0,4 0627 265D 07851 call p18_led_up 0628 1E67 07852 btfss in0,4 0629 2661 07853 call p18_led_down 07854 07855 ;3G 062A 3038 07856 movlw A5_A1_reg 062B 0084 07857 movwf FSR 07858 062C 1967 07859 btfsc in0,2 062D 265D 07860 call p18_led_up 062E 1D67 07861 btfss in0,2 062F 2661 07862 call p18_led_down 07863 07864 ;4G 0630 302F 07865 movlw A2_A0_reg 0631 0084 07866 movwf FSR 07867 0632 1867 07868 btfsc in0,0 0633 265D 07869 call p18_led_up 0634 1C67 07870 btfss in0,0 0635 2661 07871 call p18_led_down 07872 07873 ;5G 0636 3035 07874 movlw A4_A2_reg 0637 0084 07875 movwf FSR 07876 0638 1B68 07877 btfsc in1,6 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 173 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0639 265D 07878 call p18_led_up 063A 1F68 07879 btfss in1,6 063B 2661 07880 call p18_led_down 07881 07882 ;6G 063C 3039 07883 movlw A5_A2_reg 063D 0084 07884 movwf FSR 07885 063E 1A68 07886 btfsc in1,4 063F 265D 07887 call p18_led_up 0640 1E68 07888 btfss in1,4 0641 2661 07889 call p18_led_down 07890 07891 ;7G 0642 302B 07892 movlw A1_A0_reg 0643 0084 07893 movwf FSR 07894 0644 1968 07895 btfsc in1,2 0645 265D 07896 call p18_led_up 0646 1D68 07897 btfss in1,2 0647 2661 07898 call p18_led_down 07899 07900 ;8G 0648 3034 07901 movlw A4_A1_reg 0649 0084 07902 movwf FSR 07903 064A 1868 07904 btfsc in1,0 064B 265D 07905 call p18_led_up 064C 1C68 07906 btfss in1,0 064D 2661 07907 call p18_led_down 07908 07909 ;9G 064E 303A 07910 movlw A5_A4_reg 064F 0084 07911 movwf FSR 07912 0650 1B69 07913 btfsc in2,6 0651 265D 07914 call p18_led_up 0652 1F69 07915 btfss in2,6 0653 2661 07916 call p18_led_down 07917 0654 086B 07918 movf pspeed,w 0655 2340 07919 call strobe_delay 07920 07921 07922 ; This is a quick hack, because without this button presses are not seen for minutes 07923 ; This early exit might impact the pattern getting displayed. 07924 ; 0656 1842 07925 btfsc button,0 ; if putton pressed show pattern id 0657 2E5C 07926 goto t21_exit 07927 0658 184A 07928 btfsc IR_in_good,0 0659 2E5C 07929 goto t21_exit 07930 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 174 LOC OBJECT CODE LINE SOURCE TEXT VALUE 065A 0BEE 07931 decfsz p2count,f 065B 2E1E 07932 goto p21_loop 07933 065C 07934 t21_exit 065C 0008 07935 return 07936 07937 ;********************************************************************** 065D 07938 p18_led_up 07939 ;********************************************************************** 07940 065D 0A80 07941 incf INDF,f 065E 1903 07942 btfsc STATUS,Z 065F 0980 07943 comf INDF,f 0660 0008 07944 return 07945 07946 ;********************************************************************** 0661 07947 p18_led_down 07948 ;********************************************************************** 07949 0661 0880 07950 movf INDF,f 0662 1D03 07951 btfss STATUS,Z 0663 0380 07952 decf INDF,f 0664 0008 07953 return 07954 07955 #endif 07956 07957 07958 ;********************************************************************** 0665 07959 table0 ; dummy entry, actual data for pattern 0 is in the EEPROM 07960 ;********************************************************************** 07961 07962 #ifdef RGB4 07963 #include <4rgb_patterns.asm> 07964 #endif 07965 07966 #ifdef SRGB 07967 #include 07968 #endif 07969 07970 #ifdef BI6 07971 #ifdef MONO 07972 #ifdef BADGE 07973 #include <6led+c_patterns.asm> 07974 #else 07975 #include <6led_patterns.asm> 07976 #endif 07977 #else 07978 #ifdef BADGE 07979 #include <6bi+c_patterns.asm> 07980 #else 07981 #include <6bi_patterns.asm> 07982 #endif 07983 #endif MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 175 LOC OBJECT CODE LINE SOURCE TEXT VALUE 07984 #endif 07985 07986 #ifdef M3X3 07987 #include <3x3_patterns.asm> 00001 ;********************************************************************** 00002 ; Copyright (C) 2005,2006,2007 Dwayne Forsyth 00003 ; 00004 ; This program is free software; you can redistribute it and/or 00005 ; modify it under the terms of the GNU General Public License 00006 ; as published by the Free Software Foundation; either version 2 00007 ; of the License, or (at your option) any later version. 00008 ; 00009 ; This program is distributed in the hope that it will be useful, 00010 ; but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00012 ; GNU General Public License for more details. 00013 ; 00014 ; You should have received a copy of the GNU General Public License 00015 ; along with this program; if not, write to the 00016 ; 00017 ; Free Software Foundation, Inc. 00018 ; 51 Franklin Street, Fifth Floor 00019 ; Boston, MA 02110-1301, USA. 00020 ; 00021 ;********************************************************************** 00022 00023 00024 ;********************************************************************** 00025 ; DF1 - walker 00026 ;********************************************************************** 00027 start_pattern 0x13 , 0x40 M expand M if ($ < 0x2100) 0665 3413 3440 340C M dt 0x13,0x40,(leng) M else M de 0x13,0x40,(leng) M endif 0668 34BF 3401 00028 dt b'10111111', b'00000001' ; left shift /w set hi 1 time 066A 34B0 3409 00029 dt b'10110000', b'00001001' ; left shift /w clear 9 times. 00030 066C 34DF 3401 00031 dt b'11011111', b'00000001' ; left shift /w set hi 1 time 066E 34D0 3409 00032 dt b'11010000', b'00001001' ; left shift /w clear 9 times. 00033 0670 34FF 3401 00034 dt b'11111111', b'00000001' ; left shift /w set hi 1 time 0672 34F0 3409 00035 dt b'11110000', b'00001001' ; left shift /w clear 9 times. 00036 0674 343F 3401 00037 dt b'00111111', b'00000001' ; left shift /w set hi 1 time 0676 3430 3409 00038 dt b'00110000', b'00001001' ; left shift /w clear 9 times. 00039 0678 345F 3401 00040 dt b'01011111', b'00000001' ; left shift /w set hi 1 time 067A 3450 3409 00041 dt b'01010000', b'00001001' ; left shift /w clear 9 times. 00042 067C 347F 3401 00043 dt b'01111111', b'00000001' ; left shift /w set hi 1 time MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 176 LOC OBJECT CODE LINE SOURCE TEXT VALUE 067E 3470 3409 00044 dt b'01110000', b'00001001' ; left shift /w clear 9 times. 00045 end_pattern 0680 M endpat0 00000001 M patternc = patternc + 1 00046 00047 #ifdef MONO 00048 ;********************************************************************** 00049 ; DF1 - clasic 00050 ;********************************************************************** 00051 start_pattern 6, 0x30 M expand M if ($ < 0x2100) 0680 3406 3430 3404 M dt 6,0x30,(leng) M else M de 6,0x30,(leng) M endif 00052 ; 1 2 3 4 5 6 7 8 9 0683 3480 3400 3480 00053 dt b'10000000', b'00000000', b'10000000' ; L19 0686 3420 3402 3400 00054 dt b'00100000', b'00000010', b'00000000' ; L19 0689 3408 3408 3400 00055 dt b'00001000', b'00001000', b'00000000' ; L19 068C 3402 3420 3400 00056 dt b'00000010', b'00100000', b'00000000' ; L19 00057 end_pattern 068F M endpat1 00000002 M patternc = patternc + 1 00058 #else 00059 ;********************************************************************** 00060 ; DF1 - clasic 00061 ;********************************************************************** 00062 start_pattern 6, 0x30 00063 ; 1 2 3 4 5 6 7 8 9 00064 dt b'01000000', b'00000000', b'01000000' ; L19 00065 dt b'00010000', b'00000001', b'00000000' ; L19 00066 dt b'00000100', b'00000100', b'00000000' ; L19 00067 dt b'00000001', b'00010000', b'00000000' ; L19 00068 end_pattern 00069 #endif 00070 00071 00072 ;********************************************************************** 00073 ; DF1 - new fader 00074 ;********************************************************************** 00075 start_pattern 0x15, 0x10 M expand M if ($ < 0x2100) 068F 3415 3410 3404 M dt 0x15,0x10,(leng) M else M de 0x15,0x10,(leng) M endif 00076 ; 1 2 3 4 5 6 7 8 9 0692 3455 3455 345F 00077 dt b'01010101', b'01010101', b'01011111' ; L19 00078 #ifndef MONO 00079 dt b'10101010', b'10101010', b'10011111' ; L19 00080 #endif MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 177 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0695 3400 3400 341F 00081 dt b'00000000', b'00000000', b'00011111' ; L19 0698 3400 34C0 340F 00082 dt b'00000000', b'11000000', b'00001111' ; L19 069B 34FF 34FF 34DF 00083 dt b'11111111', b'11111111', b'11011111' ; L19 00084 end_pattern 069E M endpat2 00000003 M patternc = patternc + 1 00085 00086 ;********************************************************************** 00087 ; DF1 - new fader 00088 ;********************************************************************** 00089 start_pattern 0x15, 0x03 M expand M if ($ < 0x2100) 069E 3415 3403 3402 M dt 0x15,0x03,(leng) M else M de 0x15,0x03,(leng) M endif 00090 ; 1 2 3 4 5 6 7 8 9 06A1 3455 3455 347F 00091 dt b'01010101', b'01010101', b'01111111' ; L19 06A4 3400 3400 343F 00092 dt b'00000000', b'00000000', b'00111111' ; L19 00093 #ifndef MONO 00094 dt b'10101010', b'10101010', b'10111111' ; L19 00095 dt b'00000000', b'00000000', b'00111111' ; L19 00096 dt b'11111111', b'11111111', b'11111111' ; L19 00097 dt b'00000000', b'00000000', b'00111111' ; L19 00098 #endif 00099 end_pattern 06A7 M endpat3 00000004 M patternc = patternc + 1 00100 ;********************************************************************** 00101 ; DF1 - new fader 00102 ;********************************************************************** 00103 start_pattern 0x15, 0x03 M expand M if ($ < 0x2100) 06A7 3415 3403 3409 M dt 0x15,0x03,(leng) M else M de 0x15,0x03,(leng) M endif 06AA 3404 3400 341F 00104 dt b'00000100', b'00000000', b'00011111' ; L19 06AD 3404 3400 341F 00105 dt b'00000100', b'00000000', b'00011111' ; L19 06B0 341C 3410 341F 00106 dt b'00011100', b'00010000', b'00011111' ; L19 06B3 3478 3470 345F 00107 dt b'01111000', b'01110000', b'01011111' ; L19 06B6 34E1 34E1 34DF 00108 dt b'11100001', b'11100001', b'11011111' ; L19 06B9 3483 3487 349F 00109 dt b'10000011', b'10000111', b'10011111' ; L19 06BC 3402 340E 341F 00110 dt b'00000010', b'00001110', b'00011111' ; L19 06BF 3400 3408 341F 00111 dt b'00000000', b'00001000', b'00011111' ; L19 06C2 3400 3400 343F 00112 dt b'00000000', b'00000000', b'00111111' ; L19 00113 end_pattern 06C5 M endpat4 00000005 M patternc = patternc + 1 00114 00115 ;********************************************************************** MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 178 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00116 ; DF4 - on off 00117 ;********************************************************************** 00118 start_pattern 6, 0x30 M expand M if ($ < 0x2100) 06C5 3406 3430 3402 M dt 6,0x30,(leng) M else M de 6,0x30,(leng) M endif 06C8 3455 3455 3440 00119 dt 0x55, 0x55, 0x40 ; 1 06CB 34AA 34AA 34A0 00120 dt 0xAA, 0xAA, 0xA0 ; 2 00121 end_pattern 06CE M endpat5 00000006 M patternc = patternc + 1 00122 00123 ;********************************************************************** 00124 ; DF6 - center 00125 ;********************************************************************** 00126 start_pattern 6, 0x30 M expand M if ($ < 0x2100) 06CE 3406 3430 3409 M dt 6,0x30,(leng) M else M de 6,0x30,(leng) M endif 00127 ; 1 2 3 4 5 6 7 8 9 06D1 3480 3400 3440 00128 dt b'10000000', b'00000000', b'01000000' ; L19 06D4 3440 3400 3480 00129 dt b'01000000', b'00000000', b'10000000' ; L19 06D7 3420 3401 3400 00130 dt b'00100000', b'00000001', b'00000000' ; L19 06DA 3410 3402 3400 00131 dt b'00010000', b'00000010', b'00000000' ; L19 06DD 3408 3404 3400 00132 dt b'00001000', b'00000100', b'00000000' ; L19 06E0 3404 3408 3400 00133 dt b'00000100', b'00001000', b'00000000' ; L19 06E3 3402 3410 3400 00134 dt b'00000010', b'00010000', b'00000000' ; L19 06E6 3401 3420 3400 00135 dt b'00000001', b'00100000', b'00000000' ; L19 06E9 3400 34C0 3400 00136 dt b'00000000', b'11000000', b'00000000' ; L19 00137 end_pattern 06EC M endpat6 00000007 M patternc = patternc + 1 00138 00139 ;********************************************************************** 00140 ; DF8 - chaser 00141 ;********************************************************************** 00142 start_pattern 6, 0x10 M expand M if ($ < 0x2100) 06EC 3406 3410 3404 M dt 6,0x10,(leng) M else M de 6,0x10,(leng) M endif 06EF 3411 3411 3400 00143 dt 0x11, 0x11, 0x00 ; L18 06F2 3422 3422 3420 00144 dt 0x22, 0x22, 0x20 ; L17 06F5 3444 3444 3440 00145 dt 0x44, 0x44, 0x40 ; L16 06F8 3488 3488 3480 00146 dt 0x88, 0x88, 0x80 ; L15 MPASM 5.14 GENERIC.ASM 6-10-2008 21:56:02 PAGE 179 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00147 end_pattern 06FB M endpat7 00000008 M patternc = patternc + 1 00148 ;********************************************************************** 00149 ; DF8 - forward/backward chaser 00150 ;********************************************************************** 00151 start_pattern 6, 0x17 M expand M if ($ < 0x2100) 06FB 3406 3417 3416 M dt 6,0x17,(leng) M else M de 6,0x17,(leng) M endif 06FE 3411 3411 3400 00152 dt 0x11, 0x11, 0x00 ; L18 0701 3422 3422 3420 00153 dt 0x22, 0x22, 0x20 ; L17 0704 3444 3444 3440 00154 dt 0x44, 0x44, 0x40 ; L16 0707 3488 3488 3480 00155 dt 0x88, 0x88, 0x80 ; L15 070A 3411 3411 3400 00156 dt 0x11, 0x11, 0x00 ; L18 070D 3422 3422 3420 00157 dt 0x22, 0x22, 0x20 ; L17 0710 3444 3444 3440 00158 dt 0x44, 0x44, 0x40 ; L16 0713 3488 3488 3480 00159 dt 0x88, 0x88, 0x80 ; L15 0716 3411 3411 3400 00160 dt 0x11, 0x11, 0x00 ; L18 0719 3422 3422 3420 00161 dt 0x22, 0x22, 0x20 ; L17 071C 3444 3444 3440 00162 dt 0x44, 0x44, 0x40 ; L16 071F 3488 3488 3480 00163 dt 0x88, 0x88, 0x80 ; L15 0722 3444 3444 3440 00164 dt 0x44, 0x44, 0x40 ; L16 0725 3422 3422 3420 00165 dt 0x22, 0x22, 0x20 ; L17 0728 3411 3411 3400 00166 dt 0x11, 0x11, 0x00 ; 072B 3488 3488 3480 00167 dt 0x88, 0x88, 0x80 ; L15 072E 3444 3444 3440 00168 dt 0x44, 0x44, 0x40 ; L16 0731 3422 3422 3420 00169 dt 0x22, 0x22, 0x20 ; L17 0734 3411 3411 3400 00170 dt 0x11, 0x11, 0x00 ; 0737 3488 3488 3480 00171 dt 0x88, 0x88, 0x80 ; L15 073A 3444 3444 3440 00172 dt 0x44, 0x44, 0x40 ; L16 073D 3422 3422 3420 00173 dt 0x22, 0x22, 0x20 ; L17 00174 end_pattern 0740 M endpat8