From 9fd0297e519530d6c9308bf637be70f942d5896d Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Sun, 29 Sep 2019 22:09:33 +0200 Subject: [PATCH] added temporary handling of double LOAD/SAVE entries in Kernal --- Makefile | 2 +- STATUS.md | 6 ++++-- bin/basic_generic.rom | Bin 8192 -> 8192 bytes bin/basic_mega65.rom | Bin 8192 -> 8192 bytes bin/basic_ultimate64.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/f49e.interop | 2 ++ c64/kernal/f49e.load_int.s | 13 +++++++++++++ c64/kernal/f5dd.interop | 2 ++ c64/kernal/f5dd.save_int.s | 12 ++++++++++++ c64/kernal/jumptable/ffd5.jload.s | 2 +- c64/kernal/jumptable/ffd8.jsave.s | 2 +- 14 files changed, 36 insertions(+), 5 deletions(-) create mode 100644 c64/kernal/f49e.interop create mode 100644 c64/kernal/f49e.load_int.s create mode 100644 c64/kernal/f5dd.interop create mode 100644 c64/kernal/f5dd.save_int.s diff --git a/Makefile b/Makefile index d4751fce..afec2b7e 100644 --- a/Makefile +++ b/Makefile @@ -189,7 +189,7 @@ test_mega65: build/kernal_mega65.rom build/basic_mega65.rom build/symbols_mega65 test_ultimate64: build/kernal_ultimate64.rom build/basic_ultimate64.rom build/symbols_ultimate64.vs x64 -kernal build/kernal_ultimate64.rom -basic build/basic_ultimate64.rom -moncommands build/symbols_ultimate64.vs -8 empty.d64 -test_m65: build/newc65 +test_m65: build/newc65.rom m65 -b ../mega65-core/bin/mega65r1.bit -k ../mega65-core/bin/KICKUP.M65 -R build/newc65.rom -4 testremote: build/kernal_generic.rom build/basic_generic.rom build/symbols_generic.vs diff --git a/STATUS.md b/STATUS.md index 472daf2b..9c26e41b 100644 --- a/STATUS.md +++ b/STATUS.md @@ -126,8 +126,10 @@ NOTE: Even the 'DONE' routines won't support features described as missing in on | `$FFCC` | `$F333` | `CLRCHN` | DONE | | | `$FFCF` | `$F157` | `CHRIN` | PARTIAL | | | `$FFD2` | `$F1CA` | `CHROUT` | PARTIAL | | -| `$FFD5` | `$F4A5` | `LOAD` | PARTIAL | no VERIFY support, no STOP key, check $F49E addr | -| `$FFD8` | `$F5ED` | `SAVE` | NOT DONE | check $F5DD location | +| `$FFD5` | `$F49E` | `LOAD` | PARTIAL | not yet clear what's this entry doing | +| `($0330)` | `$F4A5` | `LOAD` | PARTIAL | no VERIFY support, no STOP key, check $F49E addr | +| `$FFD8` | `$F5DD` | `SAVE` | NOT DONE | | +| `($0332)` | `$F5ED` | `SAVE` | NOT DONE | | | `$FFDB` | | `SETTIM` | DONE | | | `$FFDE` | | `RDTIM` | DONE | | | `$FFE1` | `$F6ED` | `STOP` | DONE | | diff --git a/bin/basic_generic.rom b/bin/basic_generic.rom index 1a3e9780e91b94c6f7e382837f4e961c336fe256..f1d719c8d8b0a08dccdd5716d66b190fdfba521d 100644 GIT binary patch delta 19 bcmZp0XmHqYmxWDx)l!S6I-4J}$VvkMP&Nmx delta 19 bcmZp0XmHqYmxWDt)l!S6dYd1!$VvkMP*?}C diff --git a/bin/basic_mega65.rom b/bin/basic_mega65.rom index f992e1d8130f73ccb117f79d784e5e97fde3e914..e12993d3c5ef1183c4009fc561bad6ad673d22db 100644 GIT binary patch delta 43 zcmV+`0M!40K!8B7egzSZ{z6hkK}!IoI?4a=4rLZ7F|Fbg(%@~uI B62AZd delta 43 zcmV+`0M!40K!8B7egzRA_CiucK}!IoI?4a=4 B66F8@ diff --git a/bin/basic_ultimate64.rom b/bin/basic_ultimate64.rom index bbeab1f391903479d4a14cceaa3fad92ef7fbfba..a870b4ac262af372a8394c776d09ce493f3e8475 100644 GIT binary patch delta 61 zcmV-D0K)%(K!8B7q67y+|D~`XL;sVh1o{Gw{*$EzGX^WFr8wm*v)%>a0TGV=LQ+LR TO8})h$^Y;VAdddC&<8LWR_hyf delta 61 zcmV-D0K)%(K!8B7q67!k_NA~O)%KIA1o{FX_LHRrGX^cHr8wm-v)%>a0TCefLQ+LR TO8})h$^Y;VARzX$&<8LWZCo2F diff --git a/bin/kernal_generic.rom b/bin/kernal_generic.rom index 8b262ddfe7fef2b1bd83190127238ef71b0ffbe5..d5c4c797b52ebe04da2ab04b51cefff58d4604f9 100644 GIT binary patch delta 1646 zcmYjReN0nV6z_YlAAo|bd_55CWs6(O%p{_*#w8METJ^^Gv6;Ed?Iy(8C}!C(kw2En zBCi?+QoT5pIagl#3}x%m1rt}8e}KeT6U@tqpM&8RVTqag`uf^uVbI-6VKHfXf9JgW z&ikEne&;mRG}VNMjd>x%Xf|jyj5=SCKZFn1>Ts>8rYxQGmxvDJmfB^@L_6;h&LJM$ z(I?s=9>;zYze4JbvN9J;Bguzo3@eQ>Mq_k?YW);w(1VYK0H}Qm>U1y^!+)C&f>J$f zlkS7Aw6736o_2V;Jl!rdkDyn>pPTQp?<9KM7KSV6(!ts|iEQQISPV4H@bIqQvoGhl zc~fuF!=v0ZM}7#dO8Rq7TBj*f#pogwJ?NDCf;+1bJW|P9z@~~e5~b3*=(enbiZ~d4 z0zRbi@B-6Y$A+JH972E+kpet|8z%sY1=mA87BmR$)XgJMtj-%SsRCB@ad1-2R%Vk6 zbFfZFQLE1!MGEUeBnC`S(o>nDIPcSnxGAFtz1NM5(<({NkSC&%imxK@Eh0`~Sd4}iS5)a(40#Awk#n&1q1uNE|9 z$a^(Ho+NQrBhQZ0#Lj9#G+W|X3=U3b&OR6$Jhs}xlmE8YocuXXN8k_yzPC@*D>VbA98xilE7_)RLMk2|< zaRSo;(Y z6t7)QQv~JHWaMnB&kP<-lN0P#$(V^2DX>)tgw15?;3O>p9?G}({$WPst?*JRXlQL^L(GVii!!oFw19>b*-<$n)7HvnEHZWQ*(ANPFlr=M zSb8OE{tC6=Gi)iXWKQ6frH40vni8`@dsu}71X)Ax&mlha-W&p<-E+th+BJu&LObV> zE3{)4;fYc^iD+K3x+H(f9XiccvGM|U(AavK^?0Ch$^-MKdd}qZFFURa%2Td9iSAq zm)Dw$RdTBe|55%KvkY%v`gXPgT{>087#5a3TzF$($W`?~Om{SbW%!`Ia+#ihM`qwg z9q!g)MGAImFqMR-$6>V&hhnfnhsSmJ3y#>!D=%wsGy$I{piQrLaP^g3{c;X|tU~WN T?2P+IL<2Gy&gpgO*VO+2)yD#? delta 1592 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 Uwg71iIfq>W6@(tOBsMqnAI)rC_y7O^ delta 1919 zcmYjRe@qj16u;gT3Mg0b!v-0#w1RRTYw>2%~w%yZZ6KnQpK>&Rz z>hXx5u_fiLNL3r|S%^n8s*a!~qLsp-Kx(PE3$K4>Cmy9D2pL|=f1(Ux#*+2}%8|+4 zL*0@!8}0S$P2HxRVtU%b%%^BAS}-}aT0~dTc4KZ{}_G4fiLOGnv@Y+M+O%ifOIaj>ma)~G66_-m;E>vDAL2Squvv@l8 zqi8G=cXz}OAzohBN}SbDDm+CxISbJCzI30JI_uEqB9pJlE^IeKDaR4eyb5S`D}+Kf zDJ%yTz+90aJ{@j%Xk}(J0p{!MW%~jBdmQZr^nEuW`~gwH`v!kobPURPqv&vf)7+`W zZ4-14IwKy3SMu@ihWbTx$3NZXBR*Dwo-0tRZh4^5ANym?-ZI}<$1B+fQhaOym2oa8j^ZVn zv&#J)>tz~*@kRhoV8bR|ry3rq10L#Dy=NkR91h1b$QQ_|V$!9ps!K=7-fu{{zzr^vqqdI(ASOfl2c;VogR#BCO~g5lJCd#dU2qcR7;LZ-3z}lkymX3m{Y* z?c1$grqD;i++`u%MmSHC=v4UTjmz*RwMov@eIU2<=u z?^7z$SFL!!wB{bz=nS(d z_MN0aA+Xf;4-=Nwz9V5Fdv(In+p7{*p?!P8DzE2C)86+r+VfdJsPj$yuUiHD(S5Hlg z0j52W{WQX6g1bOH3nYOS1mQElSAhtVF~5Wa0awmnT%Rsc@S|Vg# zJ&I!Jl?9XdNL1EXN*!C&q_7dK1MHe6g`OTA02a%n(LoP|*MSDOv+BhNh0?1l%BsqZ zo3?I58!D?15lcEVmK3ye6W@)>$SID2X$a_@6;+$cHtYg8fm0;egDcC{%UiI~hN{Xf z=q-X91o3eL82-+x2jswx%KzLDV-9C6)!;FoEr-?9T!%dADHs%7CtAWB%wM$FC}K?j zUlj2P5!Z%slMjbOxGRXyi1>~l-xl$Z55LDa^K}K>IDRpKXNWjUtkF|71ys#)3hxQv UJrb@C*t{%36U3BQGO;l5FQ~?ih5!Hn diff --git a/bin/kernal_ultimate64.rom b/bin/kernal_ultimate64.rom index 65ec49a3a98dcb4cdc55dce72fe26c7011c6d773..8b59fe0892c66ac4de153037cac97a540f561d69 100644 GIT binary patch delta 1726 zcmYjSZA?>F7{0x?rND-?2=szLkIav@*&>QgmMsw@O3^cM1&x?(xrM1Cw2 zleRMoqMv4Q1<6gUKu^2_G|-#I2d}BO64sSbn$4 zy5hO81Xjnu-6!B$1ZPlTUNdeM&~p#KsO&BShodI@sC}$~S+<}{M4#o|Bj1USTeT`m z=aax&G2BZ>!ADWtVZ5VI$Sa;m*lDInrtpV>n-l1ezNUTsdcn!E1re{Gg9mU{Gzz29*cdN~}hF z>naRI@F*E#!g=852%Hc!SqK6Y=t9AgW2*1b#+A117%UQ>J{iei#s$IO(ToLVWALk3 zK<&8iy6e4v`7SeL^$zicCxaa%n33TRG5aW}kHHl&bfTv0_^p@%YkoId?^1b)fhl&Y zOJ!mfr+5lF#Kq|_1-}$&hP$Av1^wxwww>E;JFG2xo58MD8z4Ny?2mlGmFwVF`8K3Q zrEG~qyk03iu+!GEs{@x3aF3`2VC(iK#l<$*WovyGtRc8*BiJExQxGo~bW=*Ey)_fh zgzBhr*~c zqL0Z;BV&UjsqFqlK~4}Z2YJ#t1zz^1!8$P;I3t2b8?xQNGiCom){tv(??eTbe zM7O5u+iz-&7f+l$cYbJizWF#=H#H4s&B6yf| zj?mB%@7zTFPn^e?T}-#vbNLd-9#p84c@hkc=E$EfDdfjb;7!Q{??v+uI%Zun9-~_u zETsl!0-7r`!==t z3ACkjeR()RGnmxAA_nKcoDzq766o{N`VwwHr}oJ-)8Hc*JOub8f;0xRk=5L!dKNyA z!_-_jo+UM=wE2<3YfNO+Vc7D9K>+)r_^L0z@kXZ?Ha+crX!X-nQ3b`T?VU7bhs|j; zsaZE3GJL8sT~BgX`63SyJWqnQ>EG zy#2{g(kDB8&N1hAtlUq|dx&0YzL%K)OEn+f4gES#~Ms%e`HH3Cl9&J9BWb^$8NS*@N()su2EZX0m zvw*)XXPNxAoK@$4FK0FQ_hl?3RT^TP6YnH73(_|ePe#Poj_nju~c38G#hijI` z2MWhjTAHo%q+kWAs^0(F4T+Vpidb}7tbZmfTnZhyVMX~Ute)Hm(4)cX{o4!zuBuy7 zB$!t>VC}VMbQDylu$1ZrcOLi?Yp(#>1T3Gdmh0uvW&{t^(L!4uOri9F8by-o46PJeo~A zQ@K5TC6)a)Ru!dg9RH1!*B8TIq?zeE4RsG$d88Yd&=I3$trUk{Y1l5ok0rP%2``B- znSiGwut|b_7jle7@>KZ1}GMNh5TI@keo%ZJ#4ZM*at1# z6e9H!-K802`o$ruR>|tFjKPv9YUx<=D2xh2Tk;~Bg548#1D7wc_;KWUlx{8jV&n3d zrL3>?Y=wxw>gxO3|y7Sov3{P7DdVQD1Tfi%m~y=z)L>d)xsU5YxKsFj*0OQp5fOp ze_gomZDoS_p%39w76#Fa|eeKVc_mK)-0OgSHPJ7y(odm|urj z(kQ{D6d%a^PQBz&WPS&C+@HduH%S;f6HOxzmrh3-!;WNTelmu0B+~B}7{@TYZH>S` zsf?pZf|D6Bu$+;>5{Y-3>x93dT$aaNe56e}eXjn~yn8c;1!jKK ziNk+5aMY+TrH3o5wm=*vv@jYc=i)&oR0?QMx!`Ixh8{UAI7`h11DUWRnVnN-lbO}< zha~e>#i^-sk%2#=Q+Xu3ERTZ2M3X0DuDlLilB1H|JZq}_IILy2`ZBxkp)Nveii?=# zG1^ePcv(0J>%;f}-!2{?{-{%3_T$Nl${+S0?LO9Xy!S-gJ*(Hi<{Mc-Wp6RCcG8d< z`mOkLW$n)i{+y8SQuvQCur_hy+PP4S3ra$z)!WIKwS#tZZTXzU;N>|lg=ziQpMS>) z>Qk-E_;t>u-QiDP0vnJb%Ng6}Eb7 zw#OrDHOkm+oh_=|0#VI@Bjb+ diff --git a/c64/kernal/f49e.interop b/c64/kernal/f49e.interop new file mode 100644 index 00000000..e3e2a1b3 --- /dev/null +++ b/c64/kernal/f49e.interop @@ -0,0 +1,2 @@ +This is a well-known address of a heavily used Kernal routine, it has to be the same so our ROM is compatible. + diff --git a/c64/kernal/f49e.load_int.s b/c64/kernal/f49e.load_int.s new file mode 100644 index 00000000..837d896c --- /dev/null +++ b/c64/kernal/f49e.load_int.s @@ -0,0 +1,13 @@ + +// +// XXX Note: something unusual was done with LOAD routine - although the vector at $330 points to $F4A5, +// the Kernal jump table points to $F49E (see also Mapping the C64, page 76). By experimenting +// I have already discovered that $F4A5 performs indirect jump via ($0330) vector, but it must +// be doing a little bit more - not sure yet, what. Something similar is done with SAVE. +// +// This has to be clarified. +// + +LOAD_INT: + jmp (ILOAD) + diff --git a/c64/kernal/f5dd.interop b/c64/kernal/f5dd.interop new file mode 100644 index 00000000..e3e2a1b3 --- /dev/null +++ b/c64/kernal/f5dd.interop @@ -0,0 +1,2 @@ +This is a well-known address of a heavily used Kernal routine, it has to be the same so our ROM is compatible. + diff --git a/c64/kernal/f5dd.save_int.s b/c64/kernal/f5dd.save_int.s new file mode 100644 index 00000000..7ef54a41 --- /dev/null +++ b/c64/kernal/f5dd.save_int.s @@ -0,0 +1,12 @@ + +// +// XXX Note: something unusual was done with LOAD routine - although the vector at $330 points to $F4A5, +// the Kernal jump table points to $F49E (see also Mapping the C64, page 76). By experimenting +// I have already discovered that $F4A5 performs indirect jump via ($0330) vector, but it must +// be doing a little bit more - not sure yet, what. Something similar is done with SAVE. +// +// This has to be clarified. +// + +SAVE_INT: + jmp (ISAVE) diff --git a/c64/kernal/jumptable/ffd5.jload.s b/c64/kernal/jumptable/ffd5.jload.s index b632434d..ef66f320 100644 --- a/c64/kernal/jumptable/ffd5.jload.s +++ b/c64/kernal/jumptable/ffd5.jload.s @@ -1,4 +1,4 @@ // load RAM from a device // C64 Programmer's Reference Guide Page 272 - jmp LOAD + jmp LOAD_INT diff --git a/c64/kernal/jumptable/ffd8.jsave.s b/c64/kernal/jumptable/ffd8.jsave.s index 1ac529e4..1213f478 100644 --- a/c64/kernal/jumptable/ffd8.jsave.s +++ b/c64/kernal/jumptable/ffd8.jsave.s @@ -1,4 +1,4 @@ // SAVE RAM to device // C64 Programmer's Reference Guide Page 273 - jmp SAVE + jmp SAVE_INT