{{ Magical Wand Clock Controller }} {{ (c) Chris Merck & Kyle Bassett 2007 }} {{ GPL }} CON Demo = false ' Demo Board Proto = true ' Proto Board Hydra = false ' Hydra 'use 80MHz CPU clock speed: _CLKMODE = XTAL1 + PLL16X _XINFREQ = 5_000_000 keyPins = (Hydra & 13) | ((Demo | Proto) & 26) MSG_MAX = 256 bspKey = $C8 escape = $CB OBJ term : "FullDuplexSerial" key : "comboKeyboard" VAR byte fwd long Stack[9] 'Stack space for new cog byte msg[MSG_MAX] long msg_len DAT 'msg byte 'byte " Hello, World! " 'byte "0123456789012345" 'byte "The quick brown fox jumped over the lazy dog." 'msg_end byte 'byte 0 PUB main | colNo, cnt_sav, frame_c, k key.start(keyPins) ' Start keyboard driver msg_len := 3 msg[0] := " " dira[0..7]~~ dira[11]~ outa[0..7]~ 'turn all LEDs off frame_c := 0 {outa[0..3]~~ waitcnt(100_000 + cnt) outa[0..3]~} cognew(sync,@Stack) repeat repeat until fwd 'outa[6]~~ waitcnt(10_000 + cnt) 'outa[6]~ 'place code for displaying text: repeat 15 waitcnt(50_000 + cnt) colNo := 0 repeat 5*16 cnt_sav := cnt if colNo // 5 <> 4 outa := font.BYTE[4*msg.BYTE[(colNo/5+frame_c)//(msg_len)] + (3-colNo//5)] >< 8 & $000000FF colNo++ waitcnt(30_000 + cnt) outa[0..7]~ repeat until (cnt - cnt_sav) > 35_000 repeat until not fwd 'outa[7]~~ waitcnt(10_000 + cnt) 'outa[7]~ 'back swing... we have time to do things here if key.peekkey <> 0 k := key.getkey if k == bspKey msg_len-- elseif k == escape msg[msg_len := 0] := " " else msg[msg_len++] := k frame_c++ PUB sync | short_cnt , o_short_cnt, long_cnt fwd := false 'turn on 0..7 when 11 goes high ' not ina[11] means the Interrupter is being blocked repeat 'Short Wing repeat until ina[11] 'falling edge of Interrupter o_short_cnt := short_cnt short_cnt := 0 repeat short_cnt++ if 2 * short_cnt > o_short_cnt AND not fwd fwd := true until not ina[11] 'leading edge of Interrupter 'Long Wing repeat until ina[11] 'falling edge of Interrupter long_cnt := 0 repeat long_cnt++ if long_cnt > 1200 AND fwd fwd := false until not ina[11] 'leading edge of Interrupter if ||long_cnt < ||short_cnt 'check for inversion repeat until ina[11] repeat until not ina[11] repeat until ina[11] repeat until not ina[11] repeat until ina[11] repeat until not ina[11] DAT font long long $FFFFFFFF ' 0 long $FFFFFFFF ' 1 long $FFFFFFFF ' 2 long $FFFFFFFF ' 3 long $FFFFFFFF ' 4 long $FFFFFFFF ' 5 long $FFFFFFFF ' 6 long $FFFFFFFF ' 7 long $FFFFFFFF ' 8 long $FFFFFFFF ' 9 long $FFFFFFFF ' 10 long $FFFFFFFF ' 11 long $FFFFFFFF ' 12 long $FFFFFFFF ' 13 long $FFFFFFFF ' 14 long $FFFFFFFF ' 15 long $FFFFFFFF ' 16 long $FFFFFFFF ' 17 long $FFFFFFFF ' 18 long $FFFFFFFF ' 19 long $FFFFFFFF ' 20 long $FFFFFFFF ' 21 long $FFFFFFFF ' 22 long $FFFFFFFF ' 23 long $FFFFFFFF ' 24 long $FFFFFFFF ' 25 long $FFFFFFFF ' 26 long $FFFFFFFF ' 27 long $FFFFFFFF ' 28 long $FFFFFFFF ' 29 long $FFFFFFFF ' 30 long $FFFFFFFF ' 31 long $00000000 ' SP long $00FBF300 ' ! long $FFFFFFFF ' 34 long $FFFFFFFF ' 35 long $FFFFFFFF ' 36 long $FFFFFFFF ' 37 long $FFFFFFFF ' 38 long $FFFFFFFF ' 39 long $FFFFFFFF ' 40 long $FFFFFFFF ' 41 long $FFFFFFFF ' 42 long $FFFFFFFF ' 43 long $05060000 ' , long $FFFFFFFF ' 45 long $FFFFFFFF ' 46 long $FFFFFFFF ' 47 long $7EB18D7E ' 0 long $0 ' 1 long $0 ' 2 long $0 ' 3 long $0 ' 4 long $0 ' 5 long $0 ' 6 long $0 ' 7 long $0 ' 8 long $0 ' 9 long $FFFFFFFF ' 58 long $FFFFFFFF ' 59 long $FFFFFFFF ' 60 long $FFFFFFFF ' 61 long $FFFFFFFF ' 62 long $FFFFFFFF ' 63 long $FFFFFFFF ' 64 long $7F90907F ' A long $FF91916E ' B long $7E818142 ' C long $FF81423C ' D long $6E919146 ' E long $FF909080 ' F long $7E818546 ' G long $FF1010FF ' H long $81FF8181 ' I long $060101FE ' J long $FF244381 ' K long $FF010101 ' L long $FF4040FF ' M long $FF300CFF ' N long $7E81817E ' O long $FF909060 ' P long $7E81827D ' Q long $FF989462 ' R long $6291914E ' S long $80FF8080 ' T long $FF0101FF ' U long $FE0101FE ' V long $FF0202FF ' W long $97181897 ' X long $F00909FE ' Y long $8799A1C1 ' Z long $FFFFFFFF ' 91 long $FFFFFFFF ' 92 long $FFFFFFFF ' 93 long $FFFFFFFF ' 94 long $FFFFFFFF ' 95 long $FFFFFFFF ' 96 long $0215150F ' a long $FF111106 ' b long $1E29291A ' c long $0E1111FF ' d long $1E29291A ' e long $107F9040 ' f long $3249493E ' g long $FF10100F ' h long $006F0000 ' i long $0201015E ' j long $FF040A11 ' k long $0081FF01 ' l long $3F10103F ' m long $1F20201F ' n long $1E21211E ' o long $7F484830 ' p long $3048487F ' q long $0F10100E ' r long $32494926 ' s long $107E1100 ' t long $3F01013F ' u long $3E01013E ' v long $3F02023F ' w long $33040433 ' x long $7009097E ' y long $23252931 ' z long $FFFFFFFF ' 123 long $FFFFFFFF ' 124 long $FFFFFFFF ' 125 long $FFFFFFFF ' 126 long $FFFFFFFF ' 127