From 049e8770d2747180e123439507b12fb3af7b0d18 Mon Sep 17 00:00:00 2001 From: Terence Boldt Date: Wed, 23 Feb 2022 22:42:19 -0500 Subject: [PATCH] Fix keyboard input glitch on read --- Apple2/Shell.asm | 2 - Apple2/Shell.bin | Bin 364 -> 359 bytes Apple2/Shell.lst | 178 +++++++++++++++++----------------- RaspberryPi/Apple2-IO-RPi.hdv | Bin 33553920 -> 33553920 bytes 4 files changed, 88 insertions(+), 92 deletions(-) diff --git a/Apple2/Shell.asm b/Apple2/Shell.asm index e6e2871..28af55b 100755 --- a/Apple2/Shell.asm +++ b/Apple2/Shell.asm @@ -185,8 +185,6 @@ finishWrite: rts GetByte: - bit Keyboard ; skip byte read if key pressed - bcc keyPressed lda #$1d ;set read flag low sta OutputFlags,x waitRead: diff --git a/Apple2/Shell.bin b/Apple2/Shell.bin index 32b5d8039b402d34f6663d3aa808b3c8aba7cf35..714ed47c85e67f7529945c9ed53cacbf52ca00a7 100644 GIT binary patch delta 79 zcmaFE^qgrzG-J@j7&&!CMV}yr1cit{3SgGP1BF(V-fC6^PgUXIZw1AP3uPD;C+<_4 Y_*9qi>11I>b2cAEO?e-m$pMTq0QLzOv;Y7A delta 85 zcmaFP^oD6dG-LS07&&z{MV}yr1cit{3SgGP1BF(V-fC6^PgUXIZw0l93uPG9Chk*W f)nPa=L15woUB*|F`54XF0u?poeF7(YGs*w}k@p&7 diff --git a/Apple2/Shell.lst b/Apple2/Shell.lst index 6657ab8..d538c43 100644 --- a/Apple2/Shell.lst +++ b/Apple2/Shell.lst @@ -118,7 +118,7 @@ Current file: Shell.asm 002055 1 C9 00 cmp #$00 002057 1 F0 26 beq endOutput 002059 1 48 pha -00205A 1 20 57 21 jsr ClearCursor +00205A 1 20 52 21 jsr ClearCursor 00205D 1 68 pla 00205E 1 C9 48 cmp #'H' 002060 1 F0 27 beq setColumn @@ -133,25 +133,25 @@ Current file: Shell.asm 002072 1 C9 55 cmp #'U' 002074 1 F0 3F beq moveUp 002076 1 20 ED FD jsr PrintChar -002079 1 20 26 21 jsr SetCursor +002079 1 20 21 21 jsr SetCursor 00207C 1 4C 52 20 jmp DumpOutput 00207F 1 endOutput: 00207F 1 60 rts 002080 1 clearScreen: 002080 1 20 58 FC jsr Home -002083 1 20 26 21 jsr SetCursor +002083 1 20 21 21 jsr SetCursor 002086 1 4C 52 20 jmp DumpOutput 002089 1 setColumn: 002089 1 20 E0 20 jsr GetByte 00208C 1 85 24 sta htab 00208E 1 8D 7B 05 sta htab80 -002091 1 20 26 21 jsr SetCursor +002091 1 20 21 21 jsr SetCursor 002094 1 4C 52 20 jmp DumpOutput 002097 1 setRow: 002097 1 20 E0 20 jsr GetByte 00209A 1 85 25 sta vtab 00209C 1 20 C1 FB jsr BasCalc -00209F 1 20 26 21 jsr SetCursor +00209F 1 20 21 21 jsr SetCursor 0020A2 1 4C 52 20 jmp DumpOutput 0020A5 1 setTop: 0020A5 1 20 E0 20 jsr GetByte @@ -165,7 +165,7 @@ Current file: Shell.asm 0020B5 1 C6 25 dec vtab 0020B7 1 A5 25 lda vtab 0020B9 1 20 C1 FB jsr BasCalc -0020BC 1 20 26 21 jsr SetCursor +0020BC 1 20 21 21 jsr SetCursor 0020BF 1 4C 52 20 jmp DumpOutput 0020C2 1 0020C2 1 SendByte: @@ -189,87 +189,85 @@ Current file: Shell.asm 0020DF 1 60 rts 0020E0 1 0020E0 1 GetByte: -0020E0 1 2C 00 C0 bit Keyboard ; skip byte read if key pressed -0020E3 1 90 10 bcc keyPressed -0020E5 1 A9 1D lda #$1d ;set read flag low -0020E7 1 9D 87 C0 sta OutputFlags,x -0020EA 1 waitRead: -0020EA 1 BD 8B C0 lda InputFlags,x -0020ED 1 2A rol -0020EE 1 90 24 bcc readByte -0020F0 1 2C 00 C0 bit Keyboard ;keypress will abort waiting to read -0020F3 1 10 F5 bpl waitRead -0020F5 1 keyPressed: -0020F5 1 AD 00 C0 lda Keyboard ;send keypress to RPi -0020F8 1 29 7F and #$7f -0020FA 1 9D 8D C0 sta OutputByte,x -0020FD 1 2C 10 C0 bit ClearKeyboard -002100 1 A9 1C lda #$1c ;set write flag low too -002102 1 9D 87 C0 sta OutputFlags,x -002105 1 finishKeyPress: -002105 1 BD 8B C0 lda InputFlags,x -002108 1 2A rol -002109 1 2A rol -00210A 1 90 F9 bcc finishKeyPress -00210C 1 A9 1D lda #$1d ;set flags back for reading -00210E 1 9D 87 C0 sta OutputFlags,x -002111 1 4C EA 20 jmp waitRead -002114 1 readByte: -002114 1 BD 8E C0 lda InputByte,x -002117 1 48 pha -002118 1 A9 1F lda #$1f ;set all flags high -00211A 1 9D 87 C0 sta OutputFlags,x -00211D 1 finishRead: -00211D 1 BD 8B C0 lda InputFlags,x -002120 1 2A rol -002121 1 90 FA bcc finishRead -002123 1 68 pla -002124 1 18 clc ;success -002125 1 end: -002125 1 60 rts -002126 1 -002126 1 SetCursor: -002126 1 AD 7B 05 lda htab80 ;get horizontal location / 2 -002129 1 4A lsr -00212A 1 A8 tay -00212B 1 AD 55 C0 lda TextPage2 -00212E 1 90 03 bcc setChar -002130 1 AD 54 C0 lda TextPage1 -002133 1 setChar: -002133 1 B1 28 lda (BasL),y -002135 1 85 06 sta LastChar ; save so ClearCursor will pick it up -002137 1 C9 E0 cmp #$e0 -002139 1 10 0C bpl lowerCase -00213B 1 C9 C0 cmp #$c0 -00213D 1 10 0D bpl upperCase -00213F 1 C9 A0 cmp #$a0 -002141 1 10 04 bpl symbol -002143 1 C9 80 cmp #$80 -002145 1 10 0A bpl noop -002147 1 symbol: -002147 1 lowerCase: -002147 1 invert: -002147 1 49 80 eor #$80 -002149 1 4C 51 21 jmp storeChar -00214C 1 upperCase: -00214C 1 29 1F and #$1f -00214E 1 4C 51 21 jmp storeChar -002151 1 noop: -002151 1 storeChar: -002151 1 91 28 sta (BasL),y -002153 1 AD 54 C0 lda TextPage1 -002156 1 60 rts -002157 1 -002157 1 ClearCursor: -002157 1 AD 7B 05 lda htab80 ;get horizontal location / 2 -00215A 1 4A lsr -00215B 1 A8 tay -00215C 1 AD 55 C0 lda TextPage2 -00215F 1 90 03 bcc restoreChar -002161 1 AD 54 C0 lda TextPage1 -002164 1 restoreChar: -002164 1 A5 06 lda LastChar -002166 1 91 28 sta (BasL),y -002168 1 AD 54 C0 lda TextPage1 -00216B 1 60 rts -00216B 1 +0020E0 1 A9 1D lda #$1d ;set read flag low +0020E2 1 9D 87 C0 sta OutputFlags,x +0020E5 1 waitRead: +0020E5 1 BD 8B C0 lda InputFlags,x +0020E8 1 2A rol +0020E9 1 90 24 bcc readByte +0020EB 1 2C 00 C0 bit Keyboard ;keypress will abort waiting to read +0020EE 1 10 F5 bpl waitRead +0020F0 1 keyPressed: +0020F0 1 AD 00 C0 lda Keyboard ;send keypress to RPi +0020F3 1 29 7F and #$7f +0020F5 1 9D 8D C0 sta OutputByte,x +0020F8 1 2C 10 C0 bit ClearKeyboard +0020FB 1 A9 1C lda #$1c ;set write flag low too +0020FD 1 9D 87 C0 sta OutputFlags,x +002100 1 finishKeyPress: +002100 1 BD 8B C0 lda InputFlags,x +002103 1 2A rol +002104 1 2A rol +002105 1 90 F9 bcc finishKeyPress +002107 1 A9 1D lda #$1d ;set flags back for reading +002109 1 9D 87 C0 sta OutputFlags,x +00210C 1 4C E5 20 jmp waitRead +00210F 1 readByte: +00210F 1 BD 8E C0 lda InputByte,x +002112 1 48 pha +002113 1 A9 1F lda #$1f ;set all flags high +002115 1 9D 87 C0 sta OutputFlags,x +002118 1 finishRead: +002118 1 BD 8B C0 lda InputFlags,x +00211B 1 2A rol +00211C 1 90 FA bcc finishRead +00211E 1 68 pla +00211F 1 18 clc ;success +002120 1 end: +002120 1 60 rts +002121 1 +002121 1 SetCursor: +002121 1 AD 7B 05 lda htab80 ;get horizontal location / 2 +002124 1 4A lsr +002125 1 A8 tay +002126 1 AD 55 C0 lda TextPage2 +002129 1 90 03 bcc setChar +00212B 1 AD 54 C0 lda TextPage1 +00212E 1 setChar: +00212E 1 B1 28 lda (BasL),y +002130 1 85 06 sta LastChar ; save so ClearCursor will pick it up +002132 1 C9 E0 cmp #$e0 +002134 1 10 0C bpl lowerCase +002136 1 C9 C0 cmp #$c0 +002138 1 10 0D bpl upperCase +00213A 1 C9 A0 cmp #$a0 +00213C 1 10 04 bpl symbol +00213E 1 C9 80 cmp #$80 +002140 1 10 0A bpl noop +002142 1 symbol: +002142 1 lowerCase: +002142 1 invert: +002142 1 49 80 eor #$80 +002144 1 4C 4C 21 jmp storeChar +002147 1 upperCase: +002147 1 29 1F and #$1f +002149 1 4C 4C 21 jmp storeChar +00214C 1 noop: +00214C 1 storeChar: +00214C 1 91 28 sta (BasL),y +00214E 1 AD 54 C0 lda TextPage1 +002151 1 60 rts +002152 1 +002152 1 ClearCursor: +002152 1 AD 7B 05 lda htab80 ;get horizontal location / 2 +002155 1 4A lsr +002156 1 A8 tay +002157 1 AD 55 C0 lda TextPage2 +00215A 1 90 03 bcc restoreChar +00215C 1 AD 54 C0 lda TextPage1 +00215F 1 restoreChar: +00215F 1 A5 06 lda LastChar +002161 1 91 28 sta (BasL),y +002163 1 AD 54 C0 lda TextPage1 +002166 1 60 rts +002166 1 diff --git a/RaspberryPi/Apple2-IO-RPi.hdv b/RaspberryPi/Apple2-IO-RPi.hdv index f54e3f123edd55577c5dc646435ede4c2b5cca81..dd58e11b3c6aeaa0d1bb35f5622552431a8b57e7 100755 GIT binary patch delta 2478 zcmY+^1&~%%96<5?&|N`VO8Q$|N?Ae>q+}NXi6tbY8(caB=~$7H6joSDrKA;*?oLIN z22nay8l?3cX4LV`{LcLEym#l#yqWvr9{-gx4of0Ki`31RGkrwJxsaekqL6g8DwdCl z3HkR5n;sGfi4BB!H{_qk;+uy?r}+QI_|%DO3<_Hr7HC)^P&1)XR3KaK@bH+L!DhjF zkAu&q;OXFyh|zsR|6An@Zg~_8PnZ!E$Px%o*ccVak#Hd@5E;0TkS01%EG#BGZ}ym& zgc{L-EW=`>14xAD@H|2hh8K_+N$?_)A{mk+1yUjvQsX70L0Y6kdSt-M$cRkH4BwX( z*^nJUgd+!DK?HIl7jh#H^5RvzhJ1)beiT4K6vFE$j3RggMNtfIqBu&RBub$)-a;8f zAsS`zHp-zqD&QSdL?u*46~v$_s-Ze+;9b;2E!0LGyob7|hx%xMhG>MwXo99_hURF2 zmS~06cptH7gSKdg_UM3)=!DMbg0A=g-OwE$q6d1S7kZ-)`l28DV*mys4j*9Q9BjWHODPcaVT5s%L>0TYpcNtlc&n2Krm9ADr|OvenOClSD1sj zn1}gTfQ49uukj5QV+oexTP(wJtiVdF!fLF+TCBr*Y`{ir!e(s2R&2v|?7&X!!fx!r zUVMk|u@66BKYqkdIDmsVgu^(3qd11+IDwyW62IVAoWg0G!C9Qcd0fCnT*75s!BzZ* z-|+{o;W}>MCT`(2?%*!&;ZNMh13bhdJjN3|#a|;i`(t4endi*&Ce(zP7ffQ4#Jp&d znq(%qNnui&R3^1~$)qu9O*)g_WH2wAj3$%GY_gcFCY#A_f+pPLFt3;hlhfofxlJCE z*Su<8Gxl;G&RjkbJN1K zG_6c)^S+5SZA@F!&a^ijOh?nnbT(Z~SM!1CX1bdXO%K!4^fJ9oAJfz*W|`UMD>KK;HS^4Tv%oAgi_F*N8?)FfF-y(2W|>)TR+yD$m04}pn6+k| zS#LI&jb@YCY_^!KW}De=c9@-Jm)ULhn7!sZ^S#+;elYvZkLD+Hz#KG(%wcoH95u(x zadX1_Y)+bA%&+E@Ic?6Ev*w&RZ!VaN=90N=u9&OlH}kvs!(21h%?)$Y+%mV#9dp;* aGk==<=7D)=9+}7HiFq2>#NRJ4dHvr-W|G7J delta 2484 zcmY+^36PIv9KiAaAG^+Wkt1^am$j@bMJbeBN3JDH?wgV`RLT|WzH=;=Qn@?a3guQg zD{>#X3XxK|uSMUlnQD4xKHvF0^S;l#Gw;mvCZ*nwOv18KVdWZ^jE#&AoDPH>(gbog ztXVxFA@J`NJ}VFmbPEQ&8~Eq3pgSgDolqo20ai3l=CE6P3^) z)Hc*KHS}N#oeB+)9^XIgzg3aY<~yO7l-Y5?e8HHM4ROIjVI>2bCT2}J6&EZOypR$R zA1oi97!_MEAu**+d@$e0Zt+2+L0Y6k7{ZYr8ITc~kQrI<5F!wXtjLD!co;d56S=Jv!heyo`=`1)b0tUCgR$2YR9xUc>8n1HJJk-a;SrML+b%0KAQX z7=$DY#t;m}Fbu~CjKnC6#u$vnIE=?Tn1G3xgvm(86imf5q+mK`;9b0jnRp)`;6u#9 zY|O!2%)@*vz(@EPpWst0#3C%l5-i0sEXN9bhR?AQtFRhh;7hE*TCBr*Y`{ir!e)Gh zukj7GU@Nv^J9c0vzQuR=9=os`KVT2`VjuS701o014&w-p;zu0Aah$+OoWf7|8K-du zXYmWp;XHoD1^kBJaS?yuPyB^TxQr{fifg!z8@P#ExQ#nV#a-OP{jr?=2{36)T9eL% znQ)WdWH1>`CX?A@F%Ovt6KS%VY$m&T*yJ!dO)it$JYw>gyyj7p&*V1+OhFSeQKpb7 zY@$sO6Jv^+VkXuUHziC-Q_7S!kC`&&ar1;JYs#4?%~PhldD=WuGS)5J72%}jIC!n8E4 zOl#A|v^DKad(*+ZWL`EM%`2vp>1?`~uBMymZeBG#Oi$Cxyk=fEZ=!#+!G{1T)c0GLucRnPR4zX(q)? zH#5w;<~=jhyl*}*ADUTawwYt*nt5ivSztagADd6ir)Hs9WEPtxW~o_bmYWskGxNDw zX;zul<_q(sS!33kb!NTUU^bdfX0!Rqd~LolTg+Co&1^S2%ue&I`ObWAcA4Gg2eZfQ zHT%qdbHE%lhsX#OyN mn!n5?bJ<)mSIsqZ-P|xY%`J1=+%c)L6m!4Jt