From 1f3238ccad6e17a91e0b5ca6619f4ec84766cd7a Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Fri, 4 Oct 2019 21:44:58 +0200 Subject: [PATCH] provided unofficial $E50C routine - for compatibility --- STATUS.md | 25 +++++++++++++------------ bin/basic_mega65.rom | Bin 8192 -> 8192 bytes bin/kernal_generic.rom | Bin 8192 -> 8192 bytes bin/kernal_mega65.rom | Bin 8192 -> 8192 bytes bin/kernal_ultimate64.rom | Bin 8192 -> 8192 bytes c64/kernal/e50a.interop | 4 ++++ c64/kernal/{plot.s => e50a.plot.s} | 5 ++++- 7 files changed, 21 insertions(+), 13 deletions(-) create mode 100644 c64/kernal/e50a.interop rename c64/kernal/{plot.s => e50a.plot.s} (64%) diff --git a/STATUS.md b/STATUS.md index 01af1e7c..d5178191 100644 --- a/STATUS.md +++ b/STATUS.md @@ -136,7 +136,7 @@ NOTE: Even the 'DONE' routines won't support features described as missing in on | `$FFE7` | `$F32F` | `CLALL` | DONE | | | `$FFEA` | | `UDTIM` | DONE | | | `$FFED` | | `SCREEN` | DONE | | -| `$FFF0` | | `PLOT` | PARTIAL | cursor blink not handled | +| `$FFF0` | `$E50A` | `PLOT` | PARTIAL | cursor blink not handled | | `$FFF3` | | `IOBASE` | DONE | | | `($FFFA)` | | NMI vec | PARTIAL | | | `($FFFC)` | | RESET vec | PARTIAL | | @@ -150,16 +150,17 @@ Not all of them - only these we want to have implemented.
-| Address | Name | Status | Remarks | -| :-------: | :---------------- | :------: | :------------------------------------------------: | -| `$E544` | clear screen | DONE | | -| `$E5A0` | setup VIC II & IO | PARTIAL | | -| `$EA31` | default IRQ | PARTIAL | | -| `$EA7E` | ack CIA1 + below | DONE | | -| `$EA81` | ret from IRQ/NMI | DONE | | -| `$FD30` | default vectors | DONE | | -| `$FE47` | default NMI | PARTIAL | | -| `$FE66` | default BRK | DONE | | -| `$FF80` | revision byte | DONE | | +| Address | Name | Status | Remarks | +| :-------: | :------------------ | :------: | :------------------------------------------------: | +| `$E544` | clear screen | DONE | | +| `$E50C` | set cursor position | PARTIAL | cursor blink not handled | +| `$E5A0` | setup VIC II & IO | PARTIAL | | +| `$EA31` | default IRQ | PARTIAL | | +| `$EA7E` | ack CIA1 + below | DONE | | +| `$EA81` | ret from IRQ/NMI | DONE | | +| `$FD30` | default vectors | DONE | | +| `$FE47` | default NMI | PARTIAL | | +| `$FE66` | default BRK | DONE | | +| `$FF80` | revision byte | DONE | |
diff --git a/bin/basic_mega65.rom b/bin/basic_mega65.rom index 2b665a44bdbff98f29822d288b4358848a8d014d..a8762c7b25f6d6b3d12cf6b034e59c75f7823a14 100644 GIT binary patch delta 19 bcmZp0XmHqYk%dkC+tLjR;+wCtXi5VBPjLr# delta 19 bcmZp0XmHqYk%dj^+tLjRN}I2o2u#GmO<&gQK#Vu=wn`m4_#ZZ@{F(Vo=scTIk5XsB5pzi6p7+cJ=7;78n$7-o<3z%cwzuKg zEdAS9L2I=&rGt{s?6(mo-xt%Z^qE}T1!6+iBzjS6X=@Gmh6Z_m1K}f4CdLM{gzqJz zs-=9?ty;4G3j^uZUFl#hf69=a4yFgDE@!_J)n|}34I}Q_L?n*%>0TD668Q+5R-WG1 zZ~`7+EH=2T z4cOubfUFRU>eIY8x0;CuRop<3<-7#rHMq3Gq=*}6S@B17kmvMtnr*gW}^%JWh|4yx9h=VN3*V2ufZ)j84c@r4mS; z#Ggq}dXAgN`-JVfWb6LOl9B1i^yZ=W;xMCPM(U4zZ97TzYPX{3N+78Vi5j^yN)#~SUky~Du>0B1T28*e3Fl#9V^Nz zNEB+6HM$+o&8Ou#kr)b#3^$3M-c6x*l5jxx?5;Qp)V3!B{bE6={V9avv}Jcy8$|t{i&})Jg{VsW6C%aMCvh7>XbMiy zh!l#zA?Gz=_geEI_KA$|Ll=mzpwo~cz1p(xzp<8o*Ky&iulonQ7oo@ho70}|2IKTQ zmFvnGf6iiae#$kBsw7+_(er!W)oK&CR-mVhP1XFD22C&vaDplVaPaAPtJ~)p zO$dAvEe}0b+;7M^Qm$pN-=T*~4_ZOnC%4UYI}WeHWjAx>97DcvGd<^+v9qN?Ez_By z7Rz(xU8%w>3%_ks%`GdYN}%V#23?!ev%EMYp2v9I#%Y^K|=erxR#DO82doR!pLB(GTa7J zyIfXWC(g60+Wm+}PE2Vf#er2fwz~e&2G6ydN#agA773VWtG- zK|$ap5K8!~$7<_Mx@^2?NIGNlkmQ^;VB<=V@fW*I(zfR6c;u$0Rl$~GfA|T5ccl2*H0*V zLH^ZQIPoTSB#HDb`%v5^2{J8~p$SE_!y?Ur%cScVtaf_$;WizdHyNOE;Jiry2OtNM z(hNGG!5v5jh~BHdN8U^>Mk5dtiLq&!=C7m2-{#QCBqW5=J=F(+tL|jKsp9)@DyzQh zIsf&Aq2ZB>V1Oc}7XiHofZmWnt`E`jzUek?yMLSTLbzP$*wfGjRe$8F)}d-8M9F_b zrM&*Aj*126AcIyT!5K*MBOLZ@x(_huf`^7$sksXaxrEx)UJxgc zlM;jkBFT_bcdT~euUTB~PPxWWgMy2c0L2e#!vuob)SVX?PugO(awmd_aOm&$4&XzdW|6O|xul0w=iiCfS_{WI-C6=L3G)v>%l@L}UQR38J;pU=voY9foG%SS5O4E_KRH`#^9UjYu;gI?M#JMC#Y4 z5jZ<|Pp6@lwZN~;4m4JPh_=_lRSMgc`Q!#uZjX%y{634#@KUZ0w9#wEC>b5iPTE@MP!PW%!MscC) QTNf!pQT4I*Z0o)M0Vsc$p8x;= diff --git a/bin/kernal_mega65.rom b/bin/kernal_mega65.rom index e692530224c01f7400eed964459726f3032d7417..b978c8a2f26bbf456d57a200d054f283880c74be 100644 GIT binary patch delta 1156 zcmYjRe`p(39KYT*=~CD3(qBnff4tH$({9BQrPP5KN5mk{Dig*gt$R|$GU7i&q2SPp zy=>G9b#H20tER`@*vSS56}EIva0oMEp)9j*lF2%DFp9d%CAqg5viQAp9m4T=y!UZ-FeTH7Dct0z|DX=U|PnxHG?I~Rv7k#&E7uaxQE-cA~Eh56UA zH0}y@qWT=ZQyNnerxsNC070*o5YMIsY+IhNq~ORpz3U4046#Wx&$OG8f+Fi^ilOB! znT*avw~V3mZ4_qc4-17@5SI&dmwRUwPxra=Rc97osImFyr1KNW_);Yt{biu1b7#35 zqJTX%yz}F8Ido(l>iuhZ%u04$z*CH*#A$bmnEU|olg0OIGj5N@Noi>ncNuiVd-xT= zsXdF|T7L-Qod-(HV%o zmg3AcxHU76;^&!u$%$8T`Vt&UbACKgh=qhl-na>hkwooru|xolN9_Ln6Yd6qZk`-H zJ^C$(o-a^eOBX%Svft&haKxZ%)guk+r((5M_LBjPBV!YZ_<}@5U*IuyDaEe{TA8TR z^hw{IdhpVrP45Bm_k7(0`2zF+r2qdsAbi!BcC~&p-`?@{ho61^#mwy7m&%M;d%Uma z`ayo>9@HU=zxrNw@y8y}wzj9XPTEoRq**Xd?ct8zon8ya7(UAI)q8j$kIx(U zV*?K{yqv}J3|}^|pW$cL>BWwY9rtbggAoe~u^u6|Tfl7=jvKhvNMvM=aNKocq@20^ EA4qKkuLkAV*}aB z>X?^_n_&CvHg#@`N3QgSgBuRoxb+XUe=K7KsiLjusKqNq*m_>#{p^Bf@8T?jBfPx# z?)|>+^WN`zTY6ix`P>3@C-dm$SyN=ei}+544wQD$Hb)D8L#Gi({fjCm%}a~;ug!!w zBw)+TH}H8D8#dhib*_77__=K#X(H&uUF2bV@fInD7dGiVN5C6q189P&_oWzG*hFIt zEt`ZMbsov_(38$o&aacNxh(#fAGy_hG{~(69}m)n+{Vd|-7C&~a0VGT3GFI6hol>Q z@yHYz2n~l2{}8>Dgs>=JuZ2!9AHJTX)sCt{jJK4j1V1OJ8KMjkT2cJL^S5=aHQvR8 zIISE+#^2==WX_379^xs}v8PKD&=`#uSLH!meFcAH(FesRd1;q6dS0)Erg$HLCbGRL zadh6wTBvgerIYxxai%KZ$zzbm_xSi2O{oT!uGl_aP{uWlhfUGtPUycTv_ zH0?RWFPqfo4b(5KN4Z3iPe^;u1kl*;XCiljggXuF(JrqHUMwN#QNpS96xi<;h0E41F50(^C8axf#nLx5>P zasUCUdO(%PG3pY$aV&nuHf#TbcMwWyKJcMwon9z8dJ(e!+{<2p?7IohSc9ms@-%;f zX)|_yEU8U_QyTT*zO8V*fFd@*f6V;*K#ai2_|c9%*SsF|)}{^WiG^BO02smMUFp8o z{R8k1vi(1>f!m?>c6zAP+mYANcPla*tsHX2y~3qg&GFOhh*#(rw*%Qtfr>A0$QkIh zMs)o?2Q|HxUH7R1BTGjU@E9X7M`wZ1{~4cOl)3kHJr2H1!H@1`KU zp$|FAzaR5ge)q|jUwu71GWyNrA7yVi_-2b%R5Tn|Ti0^?79;bq#jEr5Y{jRIK?Wy@ z>HYQq6##p%BNu_YMl6ITQB@Ll4ptB%vP}8xt4lgrcR-5SJe8P_gtAwufgbmx z<{7Ia%txc{esPC{lq*JV6Vj61L>aMfjex>T8Qrs%O_;)nDoCRcG>VXiUi1H4aM@B3 zd^hgOnb989K+jdy9+}qh1%|(1cwrllr|{of_;VeH8D2K=1jDO3E;8}$O?tDk^0^#_ h-7Fjs!Zkwpn1Cxx9MSQqo#=|p5srJTcV$j&{0j#QGm`)S diff --git a/bin/kernal_ultimate64.rom b/bin/kernal_ultimate64.rom index f2e21005026ff3e59d38c8ed18af75497f4ee32c..0eff723afeff861635a9c4e4cc2e400ea86b647e 100644 GIT binary patch delta 1372 zcmYjRe@q)y94~jY1(J2guhB*dZ*G|dM$&*;(6ESxXhWWxanUf7#g`B#Suk0Y82rb9 z>s5l2R39qTUr>9c zGxVRry|mfd#Jm!x0c)K%XusfRE}dn_IX}}6Q_y~?hq>?`L;8D|ewg}vgFbXjN2@6q zao;Ab-}7>bHG!LD{!niI2|=*{IIiytKN6+VKRmn9Z2$Rx%EZ84%S4a7;t-z}K674w(<*8*1w4sVJU zevY5V`()Zyc*7=R^<@)47n)bY8Awpg*{5bS4`lHGP+Ju>nh?sarsHtR zkjU~Of^iD6u{aF~@H@1;=2x8m8k#@I_FMxzSDUq=tWO`?~QsD_r7K6)5<>Q0)#z4l*^ zGc#*W(g39(huVjL+B%>%mZNxMjB*evgJta&*}EV&?JTW715v+cqZT1*A!bqTL8P*{ z6Stm{CJk1+nlu3)`H&O)Qyq2ej+pL(B#6N%S9RN9650su1n|&igb$>H*7C2vsHps^ z=aWxA8ypIK{_uWNJs-i%+lsoA0HLB4JzNOKRdc&RS7@(_PHHHVhMllowD{1S1iiLr zpW~#~?%^ZtW9{dKh?CHJxot;n%AUFrtj zx^?(zMGxB0hzc`u861S|LZpR{NH(AZdkj|_cLZ!5)2Fy4k7-9PZ)#@EYnUF=_{@8x zkshf)Pdfi_@oKm*fv?E;ri{<6;gKX>PvZ|{+^ON|I9^X-R~qlv@Zn|r0{yYl lz2B3^kPj8*^u delta 1370 zcmYjReM}o=7%z9U1EtuZjcV<*IcjlWc>RJ7x<^XRZPfFjZ0O+J7YVn~akC57-2!#GFuhgrE6ar8x7 zoM}!>y6p+(A-F#m!Tr_$o~8@gyC&bxo3j;dNwe?}ETnooquw!IXd|?v;27dBdA{;q z$z1*LDtbx{@NTZ>`svP(qd+!)n;BXRp_96~ zLs@bBj>=#5guGJ*o157Hr9lgSwsWHMJh;_sn+M>NzV2+KS;Y=!Nug!MuDZy|sO5)C za_;9>K(U|j-Z&9I=GKL+B9$4T6h&497rex2&{e#OLEJZr_qCZoyz!tV1H>B#AOPr0 zT%1A&4QOZLL1L<4?vXc@S$#=Z6=ggmGyGNb;AtAY6h}T41CSZclIy~Zyff5pY-=~@-2!*h?vln6VD($ZY8kAqhb{6g zu#}hY+eM<%G<-qFQ_>WCfa71fPylgj zxUDm@8mdy!go-X3Aq9KT;)b}iecSe<6Kbc64;VU%0S6J^%F03FzuG?2B( zcMY}Y`9=J9ESxPdO(a|?-6K-AXVE(!SR9`xZt<*~-Gu(rJIyNLsw0pM5vRh;EE`M{ zafs07((+29{9ZL>lUVFcL0ew%Fc9CbqRjJeY1Rut2LEWs`Y_VEG92Has+%3u{{0{m)?&2TF&A#KFUnVDUyGujk1a+`C* zO%GI{r#q5uUCbz0)U6vR%uz!?^$n4B-!a{5I6KJW0(V1WaYQbF5i(KnMSf#4h+wW= z7t;P7H;T)&(PhCxEEfA}N4oXS|CzIu&j0`b diff --git a/c64/kernal/e50a.interop b/c64/kernal/e50a.interop new file mode 100644 index 00000000..392ddf02 --- /dev/null +++ b/c64/kernal/e50a.interop @@ -0,0 +1,4 @@ +The original reason to move PLOT routine into its original position was to provide support for unofficial $E50C address: + +- it is well known: https://www.lemon64.com/forum/viewtopic.php?t=3296&%3Bstart=15 +- 'Duotris' game calls $E50C during startup screen initialization diff --git a/c64/kernal/plot.s b/c64/kernal/e50a.plot.s similarity index 64% rename from c64/kernal/plot.s rename to c64/kernal/e50a.plot.s index 0f439cde..e72b33d2 100644 --- a/c64/kernal/plot.s +++ b/c64/kernal/e50a.plot.s @@ -11,6 +11,10 @@ PLOT: bcs plot_get + // Note: the 'set' part has to start from $E50C, as this is a known address + // - https://www.lemon64.com/forum/viewtopic.php?t=3296&%3Bstart=15 + // - 'Duotris' game calls $E50C during startup screen initialization + plot_set: sty TBLX stx PNTR @@ -23,4 +27,3 @@ plot_get: ldy TBLX ldx PNTR rts -