con _xinfreq = 5_000_000 _clkmode = xtal1 + pll16X obj Serio: "parallax serial terminal" i2crw : "romengine[1]" kb: "keyboard" decstr: "strtodec" sound : "synth" var byte chardata, volume, menupoint byte space, counter2, chardata2, txbyte, databyte, counter3 byte i2csys, i2cdata, datapoint, TPCS[20] long address, addresspointer, programstartadd, gleanval2, gleanval3, gleanval4, gleanval5 ,counter,days, hours, minutes, seconds word wordvar, ram[1000], tempd, rampointer, tempval, tempval2, programdata[4000], tempval3, tempval4, gleanval pub initialize serio.startrxtx(3,4,0,2400) kb.start(22, 23) serio.char(erase[0]) serio.char(erase[1]) waitcnt(clkfreq * 2 + cnt) repeat 10 tempd := lookupz(counter: "Welcome to") serio.char(tempd) counter++ counter := 0 serio.char(nextline[0]) serio.char(nextline[1]) serio.char(nextline[2]) repeat 15 tempd := lookupz(counter: "StarRider V 3.1") serio.char(tempd) counter++ waitcnt(clkfreq + cnt) serio.char(erase[0]) serio.char(erase[1]) counter := 0 checki2c password menupoint := 1 serio.char(erase[0]) serio.char(erase[1]) mainloop pub mainloop repeat if menupoint == 1 program if menupoint == 2 run if menupoint == 3 options if menupoint == 4 rebootsys if menupoint == 11 programdevice if menupoint == 12 editor if menupoint == 13 writeline if menupoint == 15 runprogram if menupoint == 16 runloop if menupoint == 17 rebootprogram pub program chardata := 0 serio.char(erase[0]) serio.char(erase[1]) repeat 15 tempd := lookupz(counter: "Program Device ") serio.char(tempd) counter++ counter := 0 repeat chardata := 0 readkb if chardata == 193 menupoint := 2 return if chardata == 192 menupoint := 4 return if chardata == 13 menupoint := 11 quit pub run chardata := 0 serio.char(erase[0]) serio.char(erase[1]) counter := 0 repeat 11 tempd := lookupz(counter: "Run Program") serio.char(tempd) counter++ counter := 0 repeat chardata := 0 readkb if chardata == 193 menupoint := 3 return if chardata == 192 menupoint := 1 return if chardata == 13 menupoint := 15 return pub options chardata := 0 serio.char(erase[0]) serio.char(erase[1]) counter := 0 repeat 7 tempd := lookupz(counter: "Options") serio.char(tempd) counter++ counter := 0 repeat chardata := 0 readkb if chardata == 193 menupoint := 4 return if chardata == 192 menupoint := 2 return if chardata == 13 menupoint := 51 return pub rebootsys chardata := 0 serio.char(erase[0]) serio.char(erase[1]) counter := 0 repeat 6 tempd := lookupz(counter: "Reboot") serio.char(tempd) counter++ counter := 0 repeat chardata := 0 readkb if chardata == 193 menupoint := 1 return if chardata == 192 menupoint := 3 return if chardata == 13 menupoint := 17 quit pub rebootprogram chardata := 0 serio.char(erase[0]) serio.char(erase[1]) counter := 0 repeat 20 tempd := lookupz(counter: "Reboot? y= Yes n= No") serio.char(tempd) counter++ counter := 0 repeat chardata := 0 readkb if chardata == "y" reboot if chardata == "n" menupoint := 4 return pub programdevice serio.char(erase[0]) serio.char(erase[1]) counter := 0 repeat 20 tpcs[counter] := 0 counter++ counter := 0 repeat 14 tempd := lookupz(counter: "Type in file #") serio.char(tempd) counter++ counter := 0 repeat chardata := 0 readkb if chardata == "1" address := 32_000 quit if chardata == "2" address := 36_000 quit if chardata == "3" quit address := 40_000 if chardata == 203 menupoint := 1 return counter := 0 serio.char(erase[0]) serio.char(erase[1]) repeat 19 tempd := lookupz(counter: "Erasing data... ") serio.char(tempd) counter++ counter := 0 repeat 4000 i2crw.writebyte( address, 0) address++ serio.char(erase[0]) serio.char(erase[1]) address := address - 4000 menupoint := 12 pub editor serio.char(erase[0]) serio.char(erase[1]) waitcnt(clkfreq/100 + cnt) chardata := 0 repeat chardata := 0 readkb if chardata == 13 menupoint := 13 return elseif chardata == 203 counter := 0 counter2 := 0 counter3 := 0 menupoint := 1 quit elseif chardata == 193 elseif chardata == 200 serio.char(backspace[0]) serio.char(backspace[1]) counter-- chardata := 0 elseif chardata == 192 if chardata > 0 tpcs[counter] := chardata serio.char(tpcs[counter]) counter++ pub writeline serio.char(erase[0]) serio.char(erase[1]) gleanval := 0 gleanval2 := 0 gleanval3 := 0 gleanval4 := 0 if tpcs[0] == "g" AND tpcs[1] == "o" and tpcs[2] == "s" and tpcs[3] == "u" and tpcs[4] == "b" gleanval := 7 gleanval2 := decstr.convert(tpcs[5], tpcs[6], tpcs[7], tpcs[8]) i2crw.writeword(address, gleanval) address++ address++ i2crw.writeword(address, gleanval2) address++ address++ if tpcs[0] == "i" AND tpcs[1] == "n" and tpcs[2] == "p" and tpcs[3] == "o" and tpcs[4] == "r" and tpcs[5] == "t" gleanval := 5 if tpcs[5] == "a" gleanval2 := "a" elseif tpcs[5] == "b" gleanval2 := "b" elseif tpcs[5] == "c" gleanval2 := "c" gleanval3 := decstr.convert(tpcs[7], tpcs[8], tpcs[9], tpcs[10]) i2crw.writeword(address, gleanval) address++ address++ i2crw.writeword(address, gleanval2) address++ address++ i2crw.writeword(address, gleanval3) address++ address++ if tpcs[0] == "v" and tpcs[1] == "a" AND tpcs[2] == "r" and tpcs[3] == "=" gleanval := 6 gleanval2 := decstr.convert(tpcs[5], tpcs[6], tpcs[7], tpcs[8]) gleanval3 := decstr.convert(tpcs[10], tpcs[11], tpcs[12], tpcs[13]) i2crw.writeword(address, gleanval) address++ address++ i2crw.writeword(address, gleanval2) address++ address++ i2crw.writeword(address, gleanval3) address++ address++ if tpcs[0] == "o" and tpcs[1] == "u" AND tpcs[2] == "t" and tpcs[3] == "p" and tpcs[4] == "o" AND tpcs[5] == "r" and tpcs[6] == "t" gleanval := 1 if tpcs[5] == "a" gleanval2 := "a" elseif tpcs[5] == "b" gleanval2 := "b" elseif tpcs[5] == "c" gleanval2 := "c" gleanval3 := decstr.convert(tpcs[7], tpcs[8], tpcs[9], tpcs[10]) i2crw.writeword(address, gleanval) address++ address++ i2crw.writeword(address, gleanval2) address++ address++ i2crw.writeword(address, gleanval3) address++ address++ if tpcs[0] == "p" and tpcs[1] == "i" AND tpcs[2] == "n" and tpcs[3] == "o" AND tpcs[4] == "u" and tpcs[5] == "t" gleanval := 2 gleanval2 := decstr.convert(tpcs[7], tpcs[8], tpcs[9], tpcs[10]) gleanval3 := decstr.convert(tpcs[12], tpcs[13], tpcs[14], tpcs[15]) i2crw.writeword(address, gleanval) address++ address++ i2crw.writeword(address, gleanval2) address++ address++ i2crw.writeword(address, gleanval3) address++ address++ if tpcs[0] == "i" and tpcs[1] == "n" AND tpcs[2] == "p" and tpcs[3] == "i" and tpcs[4] == "n" gleanval := 3 gleanval2 := decstr.convert(tpcs[6], tpcs[7], tpcs[8], tpcs[9]) gleanval3 := decstr.convert(tpcs[11], tpcs[12], tpcs[13], tpcs[14]) i2crw.writeword(address, gleanval) address++ address++ i2crw.writeword(address, gleanval2) address++ address++ i2crw.writeword(address, gleanval3) address++ address++ if tpcs[0] == "s" and tpcs[1] == "e" AND tpcs[2] == "r" and tpcs[3] == "s" and tpcs[4] == "t" AND tpcs[5] == "a" and tpcs[6] == "r" and tpcs[7] == "t" gleanval := 8 gleanval2 := decstr.convert("0", "0", "0",tpcs[9]) gleanval3 := decstr.convert("0", "0", "0", tpcs[11]) gleanval4 := decstr.convert(tpcs[13], tpcs[14], tpcs[15], tpcs[16]) i2crw.writeword(address, gleanval) address++ address++ i2crw.writeword(address, gleanval2) address++ address++ i2crw.writeword(address, gleanval3) address++ address++ i2crw.writeword(address, gleanval4) address++ address++ if tpcs[0] == "s" and tpcs[1] == "e" AND tpcs[2] == "r" and tpcs[3] == "o" and tpcs[4] == "u" AND tpcs[5] == "t" and tpcs[6] == "d" AND tpcs[7] == "e" and tpcs[8] == "c" gleanval := 9 gleanval2 := decstr.convert(tpcs[10], tpcs[11], tpcs[12], tpcs[13]) i2crw.writeword(address, gleanval) address++ address++ i2crw.writeword(address, gleanval2) address++ address++ if tpcs[0] == "s"and tpcs[1] == "t" AND tpcs[2] == "o" and tpcs[3] == "p" gleanval := 4 gleanval2 := decstr.convert(tpcs[5], tpcs[6], tpcs[7], tpcs[8]) i2crw.writeword(address, gleanval) address++ address++ i2crw.writeword(address, gleanval2) address++ address++ if tpcs[0] == "l" and tpcs[1] == "i" AND tpcs[2] == "n" and tpcs[3] == "e" and tpcs[4] == "#" gleanval := 64_001 gleanval2 := decstr.convert(tpcs[6], tpcs[7], tpcs[8], tpcs[9]) i2crw.writeword(address, gleanval) address++ address++ i2crw.writeword(address, gleanval2) address++ address++ if tpcs[0] == "+" and tpcs[1] == "v" AND tpcs[2] == "a" and tpcs[3] == "r" gleanval := 11 gleanval2 := decstr.convert(tpcs[5], tpcs[6], tpcs[7], tpcs[8]) gleanval3 := decstr.convert(tpcs[10], tpcs[11], tpcs[12], tpcs[13]) gleanval4 := decstr.convert(tpcs[15], tpcs[16], tpcs[17], tpcs[18]) i2crw.writeword(address, gleanval) address++ address++ i2crw.writeword(address, gleanval2) address++ address++ i2crw.writeword(address, gleanval3) address++ address++ if tpcs[0] == "-" and tpcs[1] == "v" AND tpcs[2] == "a" and tpcs[3] == "r" gleanval := 12 gleanval2 := decstr.convert(tpcs[5], tpcs[6], tpcs[7], tpcs[8]) gleanval3 := decstr.convert(tpcs[10], tpcs[11], tpcs[12], tpcs[13]) gleanval4 := decstr.convert(tpcs[15], tpcs[16], tpcs[17], tpcs[18]) i2crw.writeword(address, gleanval) address++ address++ i2crw.writeword(address, gleanval2) address++ address++ i2crw.writeword(address, gleanval3) address++ address++ if tpcs[0] == "*" and tpcs[1] == "v" AND tpcs[2] == "a" and tpcs[3] == "r" gleanval := 13 gleanval2 := decstr.convert(tpcs[5], tpcs[6], tpcs[7], tpcs[8]) gleanval3 := decstr.convert(tpcs[10], tpcs[11], tpcs[12], tpcs[13]) gleanval4 := decstr.convert(tpcs[15], tpcs[16], tpcs[17], tpcs[18]) i2crw.writeword(address, gleanval) address++ address++ i2crw.writeword(address, gleanval2) address++ address++ i2crw.writeword(address, gleanval3) address++ address++ if tpcs[0] == "/" and tpcs[1] == "v" AND tpcs[2] == "a" and tpcs[3] == "r" gleanval := 14 gleanval2 := decstr.convert(tpcs[5], tpcs[6], tpcs[7], tpcs[8]) gleanval3 := decstr.convert(tpcs[10], tpcs[11], tpcs[12], tpcs[13]) gleanval4 := decstr.convert(tpcs[15], tpcs[16], tpcs[17], tpcs[18]) i2crw.writeword(address, gleanval) address++ address++ i2crw.writeword(address, gleanval2) address++ address++ i2crw.writeword(address, gleanval3) address++ address++ if tpcs[0] == "i" and tpcs[1] == "f" AND tpcs[2] == "v" and tpcs[3] == "a" and tpcs[4] == "r" and tpcs[5] == "=" gleanval := 3 gleanval2 := decstr.convert(tpcs[7], tpcs[8], tpcs[9], tpcs[10]) gleanval3 := decstr.convert(tpcs[12], tpcs[13], tpcs[14], tpcs[15]) i2crw.writeword(address, gleanval) address++ address++ i2crw.writeword(address, gleanval2) address++ address++ i2crw.writeword(address, gleanval3) address++ address++ serio.dec(gleanval) serio.char(" ") serio.dec(gleanval2) serio.char(" ") serio.dec(gleanval3) serio.char(" ") serio.dec(gleanval4) waitcnt(clkfreq + cnt) counter := 0 serio.char(erase[0]) serio.char(erase[1]) menupoint := 12 pub runprogram serio.char(erase[0]) serio.char(erase[1]) counter := 0 repeat 20 tempd := lookupz(counter: "Type in file number ") serio.char(tempd) counter++ repeat chardata := 0 readkb if chardata == "1" address := 32_000 quit if chardata == "2" address := 36_000 quit if chardata == "3" address := 40_000 quit if chardata == 203 menupoint := 2 return counter := 0 serio.char(erase[0]) serio.char(erase[1]) repeat 20 tempd := lookupz(counter: "Loading Program.... ") serio.char(tempd) counter++ counter := 0 repeat 4000 programdata[counter] := i2crw.readword(address) counter++ address++ address++ serio.char(erase[0]) serio.char(erase[1]) counter := 0 address := 0 menupoint := 16 pub runloop repeat chardata := 0 readkb if chardata == 203 outa[0..20]~ dira[0..20]~ serio.startrxtx(3,4,0,2400) waitcnt(clkfreq/2 + cnt) menupoint := 2 return tempd := programdata[counter] if tempd == 1 counter++ tempval := programdata[counter] counter++ tempval2 := programdata[counter] rampointer := tempval2 tempval2 := ram[rampointer] if tempval == "a" dira[0..7]~~ outa[tempval2]~~ if tempval == "b" dira[7..15]~~ outa[tempval2]~~ if tempval == "c" dira[16..23]~~ outa[tempval2]~~ tempval := 0 tempval2 := 0 counter++ if tempd == 2 counter++ tempval := programdata[counter] counter++ rampointer := programdata[counter] tempval2 := ram[rampointer] if tempval2 == 1 dira[tempval]~~ outa[tempval]~~ if tempval2 == 0 dira[tempval]~ outa[tempval]~ counter++ if tempd == 3 counter++ tempval := programdata[counter] counter++ tempval2 := programdata[counter] dira[tempval]~ rampointer := tempval2 ram[rampointer] := ina[tempval] counter++ if tempd == 4 counter++ tempval := programdata[counter] waitcnt(clkfreq/1000 * tempval + cnt) counter++ if tempd == 6 counter++ tempval := programdata[counter] counter++ tempval2 := programdata[counter] rampointer := tempval2 ram[rampointer] := tempval counter++ if tempd == 7 counter++ tempval := programdata[counter] counter := 0 repeat tempval2 := programdata[counter] counter++ if tempval2 == 64_001 tempval2 := programdata[counter] counter++ if tempval2 == tempval quit if tempd == 8 counter++ tempval := programdata[counter] counter++ tempval2 := programdata[counter] counter++ tempval3 := programdata[counter] counter++ serio.startrxtx(tempval, tempval2, 0, tempval3) waitcnt(clkfreq/2 + cnt) if tempd == 9 counter++ tempval := programdata[counter] counter++ rampointer := tempval ram[rampointer] := tempval2 serio.dec(tempval2) if tempd == 10 counter++ tempval := programdata[counter] counter++ tempval2 := programdata[counter] Rampointer := tempval tempval := ram[rampointer] rampointer := tempval2 tempval2 := ram[rampointer] if tempval == tempval2 counter++ quit else repeat counter++ if programdata[counter] == 64_000 counter++ quit if tempd == 64_000 counter++ if tempd == 64_001 counter++ counter++ pub password serio.char(erase[0]) serio.char(erase[1]) repeat 17 tempd := lookupz(counter: "Enter Password...") serio.char(tempd) counter++ waitcnt(clkfreq/2 + cnt) serio.char(nextline[0]) serio.char(nextline[1]) serio.char(nextline[2]) counter := 0 repeat chardata := 0 readkb if chardata > 0 TPCS[counter] := chardata serio.char("*") counter++ if chardata == 13 counter := 0 if TPCS[0] == "h" and TPCS[1] == "o" and TPCS[2] == "l"and TPCS[3] == "l" and TPCS[4] == "y" quit else serio.char(erase[0]) serio.char(erase[1]) repeat 15 tempd := lookupz(counter: "Wrong Password!") serio.char(tempd) counter++ waitcnt(clkfreq + cnt) reboot pub readkb if kb.gotKey chardata := kb.getKey pri checki2c counter := 0 address := 32_001 serio.char(erase[0]) serio.char(erase[1]) i2crw.writebyte( address, "A") waitcnt(clkfreq/100 + cnt) i2cdata := i2crw.readbyte(address) waitcnt(clkfreq/100 + cnt) if i2cdata == "A" repeat 20 tempd := lookupz(counter: "Memory device found ") serio.char(tempd) counter++ else repeat 20 tempd := lookupz(counter: "EEPROM not found ") serio.char(tempd) counter++ waitcnt(clkfreq * 2 + cnt) counter := 0 serio.char(erase[0]) serio.char(erase[1]) dat erase byte 254, 81 nextline byte 254, 69, 60 firstline byte 254, 69, 0 backspace byte 254, 78