From a1a858a701cf215c001693e5669077a974ac114f Mon Sep 17 00:00:00 2001 From: Daniele Verducci su MatissePenguin Date: Sun, 7 Feb 2021 11:01:58 +0100 Subject: [PATCH] Reading ps/2 keyboard, but somehow, keycodes are decremented by 1 --- assets/misc/ps2_modeset_2_to_ascii.ods | Bin 0 -> 15076 bytes .../z80-assembly/os/drivers/ps2_keyboard.asm | 21 +- .../os/drivers/ps2_keyboard_scancodeset2.asm | 264 +++++++++--------- .../software/z80-assembly/os/main.asm | 16 +- 4 files changed, 156 insertions(+), 145 deletions(-) create mode 100644 assets/misc/ps2_modeset_2_to_ascii.ods diff --git a/assets/misc/ps2_modeset_2_to_ascii.ods b/assets/misc/ps2_modeset_2_to_ascii.ods new file mode 100644 index 0000000000000000000000000000000000000000..03f3b89278bcc358007c5a808a53e65da2928cfb GIT binary patch literal 15076 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

  • 76>Rh%;Y^29Gw56B+An@ zn`{53jhvdd^g7nakS$J6>EUVk=JLA0-5{T~Nzh16f`Vv-nSwJ>Oty>;8K6M{yGVnWWHmA_%2*g_jl_*sX740Bdi-_7iWrL8j?**erWL9-F1Wrx4 zv{iLI+N0atnBBu zBNLTkBFV6nsvyy7_^;O?vkW3iR!ZwiBt0^83_oSyk^`A4AcjDRw`xX4Eh1$y|Dk7&B7h5O!oo-XyyRb3XR_^mTI=W3nW+xQ?KLR4#JZ zR@Gc7mw6$x0=&X-aUU}Geyute;l>laYhT3BwxdJFS{z_+}V!31&r6XE+)$t>V}wpC)c6N8y9nxzMuEG?yB9ZJzUfgTpIU z4P?gkVwwL%8|-WrrL0EUk1_%0ro{&=7}7hSgDUXL3fc3>n=*wx0_tAMu+jdcJDJ8PS&nbXu!U1ou{C z7h%O@bp;wzk&e`>ypeNjxZj84@nNGPN68@Ba2l*ED$~ZL6@vfy!t`Mn~KCGmuY6QV7> zNCXx-h|oN2f|BtCWJCFGsSoD|BHUYO0?)QK_{M;!y)zJYj45zHv=IKPF#mAy$iKQ2 z_RiW^pmMzDE_&BFhCqrnhc&r3_aUN`pC`td7vcdFHt-;XZKVQD39*Aygmc_VW(I>^ zB`tbTY}b}#X6qXfRnO+=JxR^|{x|-1Ff5m+PuAc&*5I4ac)cLYTu@f$DL={Bq0xvp zq+2;E_9|1B49`$S^OR~@66A#SLG!3rL@vs54 z%qmXUn>6~NauWPDWVRo8j39}vP%8^R(Nf?Ez~eMCh2)VZ7IP_wyp5=TO*>zy^0DNN zbdHgy5uNmUa2)dX{I1B`SG=2r?m@439AO7b6E#qnbj9jb9TwwKEC5GD%Y}cXObdyk>LpqJ$n$s&^paVBabxhmN5?2_`DL@~KUM z^-`kEe(`E)io^b<%wqLo*8yqeysrDDqG?>*B8#8HrvCMYz@hcL?O43|Vl3n+Dhy#NaO8H+N#R535<8VI{&^4F(YFfgB5BrzsM&7JFFE|~plAqjpyF!_j zwUY@Ks7z02xfIT@xjI>?_QXb1v-o*bb$0;g{03lmU^{vF`1o8~@lH|=qk^mJDv4dO zqR~DIDm&|zQ`@dgzlk6NjpyS=ejYb?9&wW4+VGL#nh>mr$Jl$xY>1r?J<8rfw+hCs z9!KmX*U>g#NV&~#G3Keh^T!m?H2L^XP-bxIXN#mQMkBF@2i0C4SG9{L_2uURv*|>n zT`bNax^^I9Ia||m503RFE2|ZH_K;MK>|Hx7AuN@jqCU9eKq?eO5xZl!ch!bM-`btr z)QFru-m^D0Mr2sQ9=ZvP4tzr|TR}`7KR?ImUw?^d-1Gar%t-~;<<&w00QHprZJC3A zU*>EKY%NSpoSYdQjZMds#%+T>AO~OYhL}t&2{1uGI8u+aS?2YyhpIy`U1g$fbj2pA z0*fk+^X7JH#8@|Do3hRf@V`ejl=UjJ8PQOTNSHSt(eZRJwiU1PtSq(A5oHowS_T#8 z(YCwU(sJvihA?o#TTeC?P`hVd^U8lE?Vaaxkboa-iiL(Dj1jW9-Sx)hp4f&lRRcPo za0804%+liG50(-@^qOUxZEU5*3V`+mp|_K=<#;&$~gIkvt8Td zDq<}#QE2uUf6#PAq#|DX+k8#;<}(oQQ9{svjS_yF&&kBu*}~TBUva{jrk2wR7rO7J zUc%*xTqKEXyD2Kq;Ez;FaBCxIy9Ne<7nElS2FHCczxYur`a8%*WJg&3 zq*0h!yD+=t@B|(R{7W7XkX@G_^A^y$FUoO=IGIFrmLH#*silrM1&0HxS?~Nb6M zJgM}b9Ad%YQCG9i2&pR8sTGZVBJ`ifEu~i4TdnZ>6QVv(5Z76hok9)pBnO2<7k}1O z>wg2_I;|2WSCjF!>_@;mvJu7d~ zD0UT99XE|V$oD27%a~r|KO+GRe4&v=n*!srA!fMBEwD>#I>IN@WG>*q278%c=g z)K4@$kMb6OzL_Nr;zbqMacQi{RmN#-J zBA`SmKM4kzv`YrH6N|zc5^Z~PFrb$Q-YqYxF}1h$06w3e-k{t*SHo!8Jeo~&nPtS# zORdvWyblzR!F40~X~Li!iEIV(IliU@{D#mkI=G7Hb2FlLWE%t$m^Xfl=#gQzZ08nFDJ=R+9ISUpr3Cj?#z8v4J~Hz)rtnSrd%&3y40% z2Vn^hry`A4Ou{7jt`30Y^#Fm#4Tirm)(R;N^Tgi14HtHW1E+o!;hrd9bQxzkSv=jT>Q5{&1 ziIBZNL$?2D5v@XY$kd5AxDnOP5_tR#?s*Df41)OmA$7T78hkSpS?qm2F0D!T7lKj_f}u?OxYC@XYiAaOJWH~(TW|gzz0ww3yf55rS}!J!Vs$2r z&vGYG%PxiymzS3hjz^GWK64gH<+DfzAKGzOgmvuhZa!DsidWy67i3P9HCx85YHq5I z-`T8LKO|A+$zl4mnr;u({?NzeUC$Qj=z2~BBDxX>z$%q{Unh+Jexz=m{C!g3Y?)ij#a}YbJ^lS*B;7@=-8XL1dzSn0m?_d%q{Tek zjLqBPgnY;z-Qa-l(Yy~np>8cHNbdB7{&o^c1}}&tDI$hPi-J!#akWgA_8))u77i;wdt`@O2(D0K1@+wlk3Nm;C(M%?)4%Zy*bi!c9`)YoKEEpXmu)*%ZeXhe zL>x7h_XtZ?TMW1hZfKXufw%GG%`;E}XRB*qiO;J{;-#y$kaebN76(6gj|S!Bga*y# zBBk!K+d5`%|iXYI3DDV(~ghxzm8dwf(=H`T3~i3b8bx1{$_1{8FQR>8{CqA1^)lC@@?xtC?*Xg|_w zTK5hGlwWTef8t$U4B7ept3HCk4N}eezDUx8|F${^C_3Pux0=11{!jAnjc5Of`p?Z| ze?XMqoBy=6>_4^qfdT-2lf?cIZlwRq!TU3J@2_+C1NT2$+x|Fq_!~WcaQXgO%U?%R z`Zrqs%TtfWK9{fYtQ2xRt z{P#8dZ{VNHRKF{Xe~2W-d(8g-)*Js5_2;PncM0ncA*A|qLF+$pe-3wl2ep3)#QR>+ z|8