From 6e03017d25150508888d16ddc03fe3e9af97cb8d Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Tue, 9 Jan 2024 13:35:08 -0800 Subject: [PATCH] Use CONIO for ?TERMINAL and KEY words. Prepare Apple /// support for FORTH --- images/apple/PLFORTH.PO | Bin 143360 -> 143360 bytes src/libsrc/apple/conio.pla | 35 ++++++++++++++++++++++++++--------- src/toolsrc/plforth.pla | 19 +++++++++++-------- 3 files changed, 37 insertions(+), 17 deletions(-) diff --git a/images/apple/PLFORTH.PO b/images/apple/PLFORTH.PO index fef4d41e9dbee092a214c1cbcc9721de5152048a..4f6a5c20362c66fc3c9d6fb3789468e6c5c904a1 100755 GIT binary patch delta 6015 zcmZwK3wRS{zQ^%5(@98aXiL+Uwxn&6rfGVit#Vf`O+!js(j=sz+{zjevEb2G)T*GS zb3k!fbQwlGuBhF`BfG8_gf0t;sJQGFU0GPsBOqvzA}ANFH&}6({Z5NMyZaoT=QH#B z|KE4snM`K-kd7X6N00f%YmAa}NY}N-&IL(x9MbhdjLrF}nAnxHc)HPWUYpmNl_eZ< zsL3A@i>yKnbtFVWQE@xb*7abk-!N>HBcY)#D7w>ys3m%5iFb(2+NW)HLyDfWKodb#;N+ z7Ya5;y}@Y5BI+dtMqdM0WWI}Hj#KW>KP9&~<(j%cz^vyxopP-|;ujk-wC%SHiLY`R zy@5a|YJQoqkkjm`j(CH<+TtOCe_e&UMWUzjUt2p0-w;w=P3(_Mf4@-n2O9mc^W+nS zaox}b-X?$5Op5Q^W~Oj+!o?PSnx#nAi`cb{jr1gXO8<56jv`}e|LDDp z&h;4Ts@4;1PD6dwZwSjh#%ll6x?n86nd%{r(L2>k^)kgek8wsYS{I0QQ*7`UXV%sQ z{IPc_HhD}Df7tJh#*R_#^q6Wwk*WS@$2qFXVv{ezkl*}0)nf$~&pcynk;9)}8U4}Aq89}SQ)f&IqWtbZaP)#m0%3J2E(qyET1=T16mVPaiFgMUgL7h!*Z#s4!($PgQY>Dl==B(i?0X58;)Fn5RMu~?%Q=YXk9Y&ILySD%_4iv%b*a*5 zQC#U9QXr0t{?KLJ`JFBPL2<$~|7`I+^Ntsrygr{l92G;dgiwm*nW4xO!TTak70Z)@ zGa7`OeAt#aA{z151?qxR#g#PHI1Q7{lL*lgL%BIb$Ssjv<>pzWs*(gB@mgY8iR^Ev zi;5e`JZrv)XeVi_4-cskC8ox(*XM5(t7(}^NY@SGcy23P2+Uuz- zl`IjMVxB|x#48ORPYWrjBB6S=U))9thGur$L;kWXQO~^lzG>nC8hb_z)*F$5 z&ck#rj*z2~P*6Ngc9t8-H8o-zMQORIG3w{Z5r3c>T|TJ4VsJlYRe3^nWSa1ONNz1R zl0(6cvlQ*+CcUVs>9|03s63%A>gzD(2yv-AAzbb2uo8_G#->1BV^ri(EbAJ3WSzmV zQrmlUBHN@7CmEJ?)ql9eVA!MW{3vQD*3x=PraQ%ANijxd!_d zXX@gjR8G{kQ0PH(EYWve!{;bOb~#FaI#(OK2G!EiqvsZl(jiy>nE9+T#x&D z*X1R{8Dii(+WJqLjNKK@(Vg12pHyb_<%O-HJTcg6zv<&*^n6X?8bT z8DzeecB){wev~|Llzyl*aA^N}TKJUfs=mBAG85d@`a%7RhljG>{C0gk)?FyIvkRWP zG%!P-EVcZ1np_jmHXqj?m%XP7263c*fnDcMMGWz}BK-!w!3|_NVzd4fqz00NdsU|X zu%rzCwz=UEmD(Nq$j(yYH&TF>bRn6l`MlkMs= zR~Y)VSIM3|!84J-XDaD`+x73co|}*tHj3zJE$7Rd{ajG6O^vKbuSn%#7VF&i|IAG6F9!b3TprN&emRow&G6M!d23m;SPOhr z8-FEFNIdD%^Z7z5whQSzghNO}VM7r{p%%?(!!oRdhE6<-Uf7&Ma$!6|n1dGFiB(vG zEhs1uQZ<$oh`96^;Whjfmtc1Z>3ZCZo%jang+iK)>F9up4d}uSypI!*+(H_R42;KJ z*od?E4wfSRCy6_71S36hAecaiIW&y$_1eX+i(zD%UHXa&6n6SLP!_kEEiHKMxzS#Xhk~?;S?^xSRte&Sg{P< zIDpfzR0_$1QC*9^St`j&rdf2IJU=!e?og&A3$;Gkp@fo!62(Ha;a2*~=-)?Pg$J<) z>*#MymX+<~*U^o)Z~zB!6g@bL^USrTaJm$s*x*JP#=wi3IGbq*VmfAH0b0<8WzgrW z#A>X8mLk+AQY3XlimX1v;+yHcgjcW&$M7l6At_ZTR%F4BLR4TJsu7>YrU}=i3UzU+ ztgc9vm6g=1@i3mG|9kq~^xvZ1kHh#FCvX;DA!(>kHVqZ(-l4LxpL_uC;|M;&3C2um zvXYo46bn*eO%rh?laLELJSfLVOhh&6(u6uAEm>WVmZsi@`_qQ1KTESH+ZlU}vEAfu z^4r*tEUQrStjS7|RVbw>$0&@&)tH1DOheEb=e84?IB2%jqWpw>9a?ZBZbmzn;a(`X zA3wtyXm|wc@k=~~jd+&zUSPd0@^-v}*YQW}!C&wm4#wGhh+{Z`Q#g%2e2ojZ2xGcX z%t(b5*|5QZVw9x|wIbc3j3ST4RhWco)HBw=ScE(ib1)C{5nssWMzmrHZpU3%j{C6+ z4`K}-#d`b-|BGMax7fl7wx-MK%juHxDm6d0mA!bM{^#kk@+J9O{0&kD9|mS5W$^tE zCFCF%MHxaJmmw=xldIrIErN((24-U(V$5C2+@7BwN$qL?!I1V~02GLZ)dTqpuR zs@0L1$;ue=L{wuc>ghMIMmSC}1G8wvGA-&NnoFo}$35u4a>mxs?<8-)Z>itPl$E{Y z{dfc9IcHvKW6Mw$3+b zPtyMtwqOVSUD;{MZuZ^T7B#+~;ysEZ*$%Zg+o7BzC*(+K3JP+Js)zlR7@K2OC$O)< zw46jW%ziH8u^dUcK8L%9JJ5lZSc~;|8ZTiNcIOE7&75R)e@>eEe>oQAP>zVJM{+Fc zaTj0DO=YkiK}^Ri%w^(y#%>@l#!YBLJMO~W zh+{eK$0|I8wH)`1O;%sPW?O>t61`p6jc)8i56(oIGB2#64`va3#iIBD|Q2X$WFEqL_&}h~Wk-MjLL$QWk$APgb5L{{~yI z4Lk5E{=oQqj2|W+MGsEo@&12G_#9s|;d`!3%IEt+a=uWr^JT?B9zm|jPf(-zvN{{h z`406uwB$RKR>tnmPf*sfU&owB$uE+-$iFA==J-AMGrfKJF1436Pm=%6I+8sut44c* zVzzVpVa0Id!3F;Juawz^T4{GFquGzQyVMzWS)E0`o4sNmrmSGjO02>fXpB8(w1^L97)P>_Id0b z>+HW^+t Otdz}$ZL(SVzUZIYB0hQm delta 5991 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 TT{KxrSt1*Cn`NVPz3_hl20}b6 diff --git a/src/libsrc/apple/conio.pla b/src/libsrc/apple/conio.pla index 6d92bea..6de3e35 100644 --- a/src/libsrc/apple/conio.pla +++ b/src/libsrc/apple/conio.pla @@ -80,6 +80,7 @@ word = $0850,$08D0,$0950,$09D0,$0A50,$0AD0,$0B50,$0BD0 byte textbwmode[] = 2, 16, 0 byte textclrmode[] = 2, 16, 1 byte grcharset[] = 1, 0, $7F, $7F, $7F, $7F, $00, $00, $00, $00 +byte a3keyqueue = 0 // // Random number for Apple 1 and III. // @@ -153,6 +154,12 @@ end def a1keypressed return ^$D011 >= 128 ?? ^$D011 :: 0 end +def a1getkey + while not a1keypressed + randnum = randnum + 123 + loop + return getc() +end def a12echo(state) return 0 end @@ -278,8 +285,24 @@ def dev_status(devnum, code, list) end def a3keypressed byte count + dev_status(cmdsys.devcons, 5, @count) - return count + if count and !a3keyqueue + a3keyqueue = getc + fin + return a3keyqueue | $80 +end +def a3getkey + byte keycode + repeat + randnum = randnum + 123 + if !a3keyqueue + a3keypressed + fin + keycode = a3keyqueue + until keycode + a3keyqueue = 0 + return keycode end def a3echo(state) return dev_control(cmdsys.devcons, 11, @state) @@ -362,12 +385,6 @@ end // // Apple 1 and III combined routines. // -def a13getkey - while not conio:keypressed() - randnum = randnum + 123 - loop - return getc() -end def a13rnd randnum = (randnum << 1) + randnum + 123 return randnum & $7FFF @@ -378,7 +395,7 @@ end when MACHID & MACHID_MODEL is MACHID_III conio:keypressed = @a3keypressed - conio:getkey = @a13getkey + conio:getkey = @a3getkey conio:echo = @a3echo conio:home = @a3home conio:gotoxy = @a3gotoxy @@ -391,7 +408,7 @@ when MACHID & MACHID_MODEL break is MACHID_I conio:keypressed = @a1keypressed - conio:getkey = @a13getkey + conio:getkey = @a1getkey conio:home = @a1home conio:gotoxy = @a1gotoxy conio:viewport = @a1viewport diff --git a/src/toolsrc/plforth.pla b/src/toolsrc/plforth.pla index dbec5bc..681b721 100644 --- a/src/toolsrc/plforth.pla +++ b/src/toolsrc/plforth.pla @@ -107,7 +107,7 @@ predef _componly_#0, _interponly_#0, _immediate_#0, _exit_#0, _pad_#1, _trailing predef _tors_(a)#0, _fromrs_#1, _toprs_#1, _lookup_#1 predef _cmove_(a,b,c)#0, _move_(a,b,c)#0, _fill_(a,b,c)#0, _plasma_(a)#0 predef _var_(a)#0, _const_(a)#0, _lit_#1, _slit_#1, _find_(a)#2 -predef _tick_#0, _forget_#0, _terminal_#1, _prat_(a)#0 +predef _tick_#0, _forget_#0, _terminal_#1, _key_#1, _prat_(a)#0 predef _blank_#0, _char_#0, _str_#0, _prstr_#0, _prpstr_#0 predef _prval_(a)#0, _prbyte_(a)#0, _prhex_(a)#0, _accept_(a,b)#1, _type_(a,b)#0 predef _vlist_#0, _tron_#0, _troff_#0, _stepon_#0, _stepoff_#0 @@ -508,7 +508,7 @@ word = @d_literal, 0, @_terminal_ // KEY char d_key = "KEY" byte = 0 -word = @d_terminal, 0, @getc +word = @d_terminal, 0, @_key_ // ACCEPT char d_accept = "ACCEPT" byte = 0 @@ -932,18 +932,18 @@ end def _execword_(dentry)#0 when conio:keypressed() is $83 // CTRL-C - getc // Clear KB + conio:getkey() // Clear KB brkhandle(dentry) break is $94 // CTRL-T - getc // Clear KB strobe + conio:getkey() // Clear KB state = state ^ trace_flag break wend if state & trace_flag showtrace(dentry) if state & step_flag - if getc == $03 // CTRL-C + if conio:getkey() == $03 // CTRL-C brkhandle(dentry) fin fin @@ -1539,7 +1539,10 @@ def _accept_(a,b)#1 return len end def _terminal_#1 - return ^$C000 > 127 + return conio:keypressed() > 127 +end +def _key_#1 + return conio:getkey() end def _word_(a)#1 word wordptr @@ -1747,7 +1750,7 @@ def _show_#0 w = *pfa fin if conio:keypressed() - getc; getc + conio:getkey(); conio:getkey() fin loop fin @@ -1847,7 +1850,7 @@ def typelist(typestr, typemask, type)#0 puts(" ") fin puts(d) - if conio:keypressed(); getc; getc; fin + if conio:keypressed(); conio:getkey(); conio:getkey(); fin fin d = *_lfa_(d) loop