CON _clkmode = xtal1 + pll16x _xinfreq = 5_000_000 VAR byte Cog word keydown[7] byte key_head byte key_tail byte keycount word coincount byte keybuffer[10] long Stack[10] PUB start(a,b) ' : Count keycount := 0 key_head := 0 key_tail := 0 coincount := 0 beep(30000,100) Cog := cognew(pollKeys(), @Stack) if Cog < 0 beep(20000,100) PUB key : retval if coincount <> 0 coincount-- retval := 65 elseif keycount <> 0 retval := keybuffer[key_head] key_head++ if key_head => 10 key_head := 0 keycount-- else retval := 0 PUB pollKeys() | Count dira[15]~~ dira[7..13] := 0 WordFill(@keydown, 0, 7) repeat ' Metal buttons dira[8..13]~~ outa[8..13] := 0 WaitCnt(80_000 + Cnt) repeat Count from 0 to 5 if keydown[Count] == 0 dira[8+Count] := 0 WaitCnt(800 + Cnt) if ina[8+Count] == 0 if Count == 5 keybuffer[key_tail] := 32 else keybuffer[key_tail] := Count + 49 keycount++ key_tail++ if key_tail => 10 key_tail := 0 keydown[Count] := 200 else keydown[Count]-- ' Coin Slot if keydown[6] == 0 if ina[7] == 1 keydown[6] := 100 else if ina[7] == 0 keydown[6]-- if keydown[6] == 0 coincount++ PRI beep(freq, len) { A = 90909 B = 80972 C = 76482 D = 68143 E = 60698 F = 57307 G = 51020 } repeat len !outa[15] WaitCnt(freq + Cnt)