From 455ca2ee56b796a3ffdb1f3460920598282d5be8 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Sat, 19 Oct 2019 13:00:28 +0200 Subject: [PATCH] more startup initialization fixes --- STATUS.md | 8 +++---- 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/aliases/,aliases_config.s | 1 - c64/kernal/clrchn_real.s | 2 +- c64/kernal/init/cint_real.s | 3 --- c64/kernal/init/e5a0.setup_vicii.s | 25 ++++++++++++-------- c64/kernal/interrupts/fce2.hw_entry_reset.s | 5 ++-- 12 files changed, 22 insertions(+), 22 deletions(-) diff --git a/STATUS.md b/STATUS.md index a535689f..7579756b 100644 --- a/STATUS.md +++ b/STATUS.md @@ -98,10 +98,10 @@ NOTE: Even the 'DONE' routines won't support features described as missing in on | Address | Unofficial | Name | Status | Remarks | | :-------: | :--------: | :---------- | :------: | :--------------------------------------------------: | -| `($028F)` | | `KEYLOG` | DONE | works differently on purpose, to improve kb scanning | -| `$FF81` | `$FF5B` | `CINT` | DONE | | +| `($028F)` | | `KEYLOG` | DONE | | +| `$FF81` | `$FF5B` | `CINT` | PARTIAL | probably incomplete, to be checked | | `$FF84` | `$FDA3` | `IOINIT` | PARTIAL | CIA initialization incomplete | -| `$FF87` | `$FD50` | `RAMTAS` | DONE | | +| `$FF87` | `$FD50` | `RAMTAS` | PARTIAL | probably shouldn't touch VIC and CIA's | | `$FF8A` | `$FD15` | `RESTOR` | DONE | | | `$FF8D` | `$FD1A` | `VECTOR` | DONE | | | `$FF90` | | `SETMSG` | DONE | | @@ -156,7 +156,7 @@ Not all of them - only these we want to have implemented. | :-------: | :------------------ | :------: | :------------------------------------------------: | | `$E544` | clear screen | DONE | | | `$E50C` | set cursor position | PARTIAL | | -| `$E5A0` | setup VIC II & IO | PARTIAL | | +| `$E5A0` | setup VIC II & IO | DONE | | | `$EA31` | default IRQ | PARTIAL | | | `$EA7E` | ack CIA1 + below | DONE | | | `$EA81` | ret from IRQ/NMI | DONE | | diff --git a/bin/basic_generic.rom b/bin/basic_generic.rom index 89242f1bdb61bb7ddb0cf07bdcbc760735d8dc70..62534b2457d423f89bc7d5aa521cb8f44c5c3fb5 100644 GIT binary patch delta 47 zcmZp0XmHrDij7U<=h6)d8k;w;r86>CZIYDnAP3<&n{57C^QDnAWGxCsXU delta 35 qcmZp0XmHrT%g)%enUCFFLO{dCHO$pVA=u9`AlSn{M00Yg{A>WPf(ilv diff --git a/bin/kernal_generic.rom b/bin/kernal_generic.rom index 15295fdd254e3033fb43e329a0f710b8c408c001..ae78c8eab543dd76f8c2401fb2ab7e957aa00bc8 100644 GIT binary patch delta 1533 zcmY*ZeN0nV6z{vGeSBE^7%e;m^ILpM`da}-oasm}P)OOey>eItd zUy&6aP+)w?P4k|ec8^aFCl&OG1jiMqQxYMaGQs@blqA8VPKc^SOGpq738Z$IrNClx zv@zt)OtLf*mau4%fDlXq;-&?S6=vaCeTivOvDrPgVVjrtuuU94C}+ZE4C%6hfGUYB z2e;1izSVSRf$;M!%*{Q|kqdvr-h| zcPm9XgQv=BMV-Jnoxr8@GZCj|%AXw}aesbf9W^DUjW|K>D!e;w&GD_upJc+f3 z=|t>@5@JUxj+tB24$lZD2A^o)5qv1S*X)#B>0L~WGsLyzzSd(#Qje{5!)P+n#r$PSonRgk zMQS*k4ShRz@v*E$yYXD^JI1IzEX>%K63U{z*NgGnE2{BRUHxc(`dfg0?2eyphh99F z53@)MlTN-$28^n*u9(|`_Tl`34Y*bRCb?X{ezg|u2;vI`b%a!~z(#rTyDQ;`Cu2GXv`Bm=F(XL#vuLN}Al;lHXzY{r$M&Dl&iQ~z)S}-a{G=|)Q*i|P z#dQAB#<^1aBb4$YkSQAYM{Fzc$m8E%d9=JiLG+6NCVJfwOjrYA1Z9U%V@!bPVVoaK zs9FmPRsJj)Cx;7*%TFojyn^lrk*uKTEc)gJiY%e-ASzVRws~Y!QH_c^6(q&bG6jzn V=BHFEXf2*DT%mtYeg4nU$iF(B&lUgx delta 1473 zcmY*ZX>1cm6!wlCU(|^Wak4oa#toD>4Z@+30upVLD3L4}0m29fRmB#n%8{sgs44+| zl!`1(lb9x*AQ7Yp<9bmxC6y!E!U`xyA>eQ=hbk=63IR4G>alUKcO7cnS+{?>TJ5}< z_jbOS_rCA#Y1q>cKB2S2_?mT^s^*prEeLv7H?H-1)~t8oYdSAz&0uHVwvEf>KuNHQ z@o@d3A>L2>*aHj=TQl)~gkyY}-zM@`{6!+K_e0U|6nTx`E;8(ij??>2F)y)Vm=S7PWvL1m=|0HqjFHQ zABs<{nV_DGQ=){ujz!cfc(-HWQn(|Fnqw+LJJicikfApbwB=w52n=-2z{@iH5*KL(zCOi`N%u!~fQUt`hq^d) zWS}vQ>kSL+R~4G^4b!}ZA#ON6O>BZE9Xd3Z@ zk_EWlR9)(pe`MbdRz6-F>AY*Mf&Y)Z&ehAv)`TpgGAB7YCy#;$(}!i#yWzZ;xu z26q|7h%lla9>&9S_fZdV?YwnPB=-W6 zKbz94MX3ZQz{*(8f~%6~iy1YCp?UAt{h*-a^g$2IpXq{R)1_q72qn2AK&la1Rdexw zFc#RTglVz{`|ygw8mbnz6_(`_d<%gHUr-$^{<`p0%7%X`EL+j2!rn^q3>$*GUgT_e zRz1M2Bs?7_VkN|uBf3pj)pSZEz{xWqKFS9RHDZj;Dxg;tFG#5`urqNUIcJ>O| zmt?p>>+@g%hb0g!R(V-PKHLSuRqi~h#-sKob2bIH$}pQkvp8dKGX7$DfXTPaF&GR0w7J?`Psu}a zO>$0-pGue@TCI>dza@9Yuoj(-F`Nj!uH+cC8IP8fI2wk~ zFX>L}A8zBg^)?}>hVl8(&yz>*Nm|r|pOm~&;9`^fQ#M8T?lKIYDZ+K7b;tY6?Z9v^ zm_5`E2k~S%oJSN&bowo60J91m$OPT!ZCviCUrQwGex7R;ut#YpD(=-oZ-$I;qpIJa zfeWouP&$RWW5}tXrYU4oP@{r&$|#;eCu8{B W{BqqQ8CBp1^Go$!<>BA$>3;y$=&(Ql diff --git a/bin/kernal_mega65.rom b/bin/kernal_mega65.rom index c8395834882e1e7c24e5065c4648f4f930c70c88..e4fa473e69fac98fd7c4c7228572a2bee083765a 100644 GIT binary patch delta 1450 zcmYjReQXnD7{B(~ZYwEV_jxVDy~~7lIOd9qoBuc+;v_E;H6kB6E+H{B8Hpc+k3_@% z*by?*W!pOwhJlQxM|LD6o%=&OAxwgkYan|^b%G2*LYwFx?6$SLyNz`|*MX8;?tahj zes|CN{NCqz+Zx*%qZe%4<~MfK1{wl&fri>GO|=1rT(kY~LB1vZN(9UOp&( zBk*X~VyYLDq|AhCPcbyk&38UeJL{;tI^?GE)leywi$gq>SA{%Oc7zZORZ@ItN#VL! zyfRxLV6Q!pXx?U#ObK^9nn*i7tro$X;i&^{*YC1(U;LF1Nn4x#*oHEMYO|3@K1UyGIY3@;zGW#N`pS93 zQRdTw13_M3uq`Ds;xz$n(BxOKmwfF0+!mXMg-p7uJ_2s97(pX?l*MUXz&O+I3Ht>U z)s*ejIWRb`AeF@x3;n)jh+5|0-N5m|*{j{N#|Ou+c8?#wlAu$mn=JH~=RP@> zMhmm>X-`@jMpIf2$wDq=4x_Zb{M<7SPiOXQOtp$Xp{JwE=>0Sh#8Xn)084I5qjg!l zXI}ii{lc*yg%iyXb|5HmBb2CE)H=ng*2H$1aKq!GU1*AYQS#zZ5dFC|rK)85lH{j1B`Sp5$?RrgbBW)|%xPW()2?BbmDhRssQ?h43RyN^m8k6PyjU zcmnO1i%i6BF&z6plDF5$zMm6Ovfo=zT1vllxRzMBh+bM_Ns+Z>wPbHuN4YVF_#`ss z@PPhwf<`fdM~I!@?HSS0T@CG>7Nl#`EsaqZ)q7^7#D{ksMdOc7tY>PSzM)^O;9c} zp$0}Lpy#CD!~`y1fT8%(<6QwgXg1tv0#}eTo-Oup?Zq*JT(LKjY{{;bcyp5JXg<+= z7%>_wWZF~21vT`?3_7TV^JJzOXj1I0@&~n`7=bA{Cq?+3f;oD>pQ{!qi%GUaxfd-^ zM!M|PM{$Z=@@}*5({W~csM~qbLhhG8Tk3{CYv%vkp{@a)?_Uhp;ajA9%{wpEo4LYy zQe>+bi8@eF!|jWv7+i)|#$23xurp^1mmjBkooN>yAmKIFE%W5lXX=jz4Cz<J>M2NeTWFh|t$5utPaTS4b1~glYvVAY4Q3sT?SzHo1*DlpYENi@(5R zDxGx2d7f5V;jA*ll{62+0xO*guex(dqmIsFR^a2@))}RM=F3c|+l-Zbz-^Cl5ln8r zX0im(=A?;wsewypaMqAraB@n0=A^SIJ1w1rGv>33D(6@dKU~CTG~7c@SCrYNH2gM+ lRjjM@YOQ{@bv@f!!{XaX?4H5SWdCHC5g4XezyE0R!M~9GvlRdU delta 1430 zcmYjRZ%hpV?)x<<>v{Lh`t+ZB2tDBHC*8~$=KiI@n z`QRE#gApD^vC)#vEpbgqju<0HZL3D9OEo??rM9B6hC9=K&;<^6Ps-8RLmQLL?r-M( z-p+64&AjH?=GxE&r^ml;{nqsa>NlXc5F9_thW(os=> z?X$5?LZfO?o0qBA+VYvow*hM_W2&t!kBRO%4j)lo`qS+w{n=N`D_y!5R#O*WRk`1c zF+qfe31v{f+q>7Hx!K$BTLP+0xS3FfB~2NThTt4+;0s^hZwg}IjG($jB*M@Hl1NcZ zRN~rQmQbd&i@FQWo$cbgIJ->WaJ^^GIQxxjgfFNz1E&LmXd}*;YLl*uP+_QRNGbi? z`;}99hC;@?<)5K%rxb*%W{4vRQzT@%+b8=)IA>^^nd@}lum(CuvSzv~=OOHPifgA^ z`lhb6Pqp+7Uuz$3xe{SdVs}(%A4VeSp6<2X^UR2_{u%u=dqw3fBlJ$V(E+QCP%%mf z?{a7&<6(kF>C5$PPHj09hnXqd+7VXavrW4@hakIz=ocIu;}|f!Ix&^leXvy>nz;)JAvYf8SBC*git53zoj3dFELn zZletat;PLO5Tei@CB5d$f2oy%yFob z4T-0)&w%<#*_#Ty5Cg-iBk<*pnMkyHLQ5ZQmYmxB`aH&5! z+P9SqAM{ffh>9cEd*0;_Vg3CuDVuyiyt z9qfs`@ZJ@J@rMsN&_CqaIH_f_47|tMEnCY#-25Ep;PBcF%S#chi(06YB}o1xNlvS7 zyd{+`YuGtRPADhvn)$M{+*NOo$FrozAjjyb(gJ7PARB17w4yA>X!3JSi@2t0j;u%! V?<8?WyT@dkXtVjuhyRX^{|8N)sK)>R diff --git a/bin/kernal_ultimate64.rom b/bin/kernal_ultimate64.rom index a69028efb8ddb5df81d702bc5663be9c9c757955..65b2cde4b0a5501dc7a2fba03dffc96d48217a06 100644 GIT binary patch delta 1136 zcmXX_e@t6d6n;NwOL2?>EqxU`4&mXtjUUBn5M>EsS-Nr6gpv(3!5Ymhris6n42^$a z+}jMUNW7Tfbg@4B61qrIMxu7cB`!u+!p74PL$(r)Qlf+`l>+zG+1C3S|9SW1o_o%B zzVm%=v}?30c7r#HStSM{UgH0-IoF=*<2*gbTG~3=+-)5#haYcgWAH+WkIi8)ywJax z>f}s}vY=Kfi)wk4k*-UNu$+pr(sh57ky|b>>b&Kj@m6)*tww7@m1^`_s78%iLxLKu z2szZKF$8L;UPY%0wD_j<3mV+SHw-;E?{qe8kU-k*mANnnyHWu!h}l4bRSj}4Y!I0l z2lY=&PBzkWT}|T?M*sbF1QrO8oLo7>tn9Z`%&P?IGjNMQiJp;7QN{~(c*7`KZ;^l$ z2}}nrDiLA8uY8oQ1RoYn`A#g9(zj<$afx!Z9oRK+=D@IqUowg8%G~>= zFW9P+B*Y}+Bcz#4s^*yx=XeW0VLrs}#qXI9Ss&EWCGT1^f4ozZw&Puzv=e_AC(Xy$ z<++1p(Fd++GncX5egOB{A7eLg z$lky@@T~o{s^eKd2q~bfb-HFi&*6uJM!KJ8gcqH;+}b3%tc`i6yrm;>b5&QDYJ7#b zXltAh8f$j6z%(4ppxqg2pGjR$y1QXq;y7$Or^$t)4NTMqE>x2(7Cq}|VUOT(2Vz_2 zZaXsEBg=B({0PK|$_JTII9-6V1sE&9+l7H36TS#mZHz80`de`~aAzC3*Zo2`C%aK6 zzR%f?tBrfvU-6^HMjm-m_;Y99;4q=6mb-p^YWP$ep?;h&!pS^6VMuqPY*HderAW+3 zjfq@&om3goQ)Oh{vN}+l+EO~NYHprRO__R&tz!7eJ>YpKHxT5)6v6#J!W$ZNWOPLR zG3_OwlKdDo?LBlMOVYCRBRaaCu&O-zB&#eLmeV{sf-mjCO^YdH+Dc&62%cgzsb*2l zCi3ON4%tP22r5a8r}UNc)Sj=_HSC)rC_<1yLpuaD|Aju=LirtZNkdi*b+02)L;V^$ sN0319w{>-5J3(C}=;DL>`Ct=|UeBVT0xC;|lQQFHm=oIX|0Y-e0}~wvrT_o{ delta 1121 zcmXX_ZA@EL7``9SQk1PgKW=4(m+)ahP?W@F%VxInkqXCc0U_Xzd6OBfu8H#_j%HKMHizhZtUuaA+bxANr@6uD;=EEV5#Re{<-JPeb0NI z=RD7IMh}c0h%SmIYgUVb6)%au+qZLv`vgyC*I*Zd{zC_k^!pA!-Gr|f_4C6Ril6K8 zl6``i)2{2~+D*MI!YMbDo3NOS@X8H2QWY%MBiDisJz@%i9<0?PT+pt|K*E2S>TL<)SHk`o|79&K4awU3>2esr_2wpboUZDU4A1#7|lF^MKD=_S+t(>7sL1 zD#xCn%0|pfmCe{*oUjb?i}UTJGiH7OC(1vybknFec1&Q%A5^@{-@%Vo_SFuMNrB-v z(n%3*u4^%+y?Z~jhrVR6#P{*<4>b6f%HDB=D%slrXAzKK_Yp#d+UaYzh z@0tJGl@ag>(YAM4%}npo=4SkA~}DKT25WWl;J zRA6Z>Sl$XFU_{?OgW*N~c< z0R0bZPBpQ0O;7ubCjxW$P&IURtPTZ)5aZYOKfluy_GApc1{7l=AvrhB@_ZkYZ%J8J zendTMahoopb6IVvcsVViUOZQgTf79B@5Qlhg3hE-P3c+WSVxtsA(!f5Z-rSE6`4@l zG)wL)HFZtX1YKe?6j6d&|3nw>q3uod2}KTyylbeDqCtu#2qHQBbxlou8$o+Wz#|5l b#XyUQp3S18c~qJVB~(u4I6uAnZ(`*?v_t`6 diff --git a/c64/aliases/,aliases_config.s b/c64/aliases/,aliases_config.s index 1e84c2a9..77ebc752 100644 --- a/c64/aliases/,aliases_config.s +++ b/c64/aliases/,aliases_config.s @@ -130,7 +130,6 @@ #if CONFIG_CPU_WDC_65C02 || CONFIG_CPU_CSG_65CE02 || CONFIG_CPU_WDC_65816 #define HAS_BCD_SAFE_INTERRUPTS -#define HAS_BCD_SAFE_RESET .pseudocommand phx { .byte $DA } .pseudocommand phy { .byte $5A } diff --git a/c64/kernal/clrchn_real.s b/c64/kernal/clrchn_real.s index b12177af..6c97cc4d 100644 --- a/c64/kernal/clrchn_real.s +++ b/c64/kernal/clrchn_real.s @@ -25,7 +25,7 @@ clrchn_real: // Handle IEC output device jsr UNLSN !: -clrchn_reset: // entry needed by CHRIN +clrchn_reset: // entry needed by setup_vicii // Set input device number to keyboard lda #$00 sta DFLTN diff --git a/c64/kernal/init/cint_real.s b/c64/kernal/init/cint_real.s index 54b03723..82cbc77f 100644 --- a/c64/kernal/init/cint_real.s +++ b/c64/kernal/init/cint_real.s @@ -114,9 +114,6 @@ cint_brk: // entry for BRK and STOP+RESTORE - XXX, where should it start? // Put non-zero value in MODE to enable case switch ldx #$00 stx MODE - - // Set default I/O devices (see SCINIT description at http://sta.c64.org/cbm64krnfunc.html) - jsr clrchn_reset // Fallthrough/jump to screen clear routine (Compute's Mapping the 64 p215) jmp clear_screen diff --git a/c64/kernal/init/e5a0.setup_vicii.s b/c64/kernal/init/e5a0.setup_vicii.s index 2f8c321a..3cc68a93 100644 --- a/c64/kernal/init/e5a0.setup_vicii.s +++ b/c64/kernal/init/e5a0.setup_vicii.s @@ -1,4 +1,11 @@ +// +// Well-known Kernal routine, described in: +// +// - [CM64] Compute's Mapping the Commodore 64 - page 215 +// + + setup_vicii: // XXX it should also set default devices @@ -21,12 +28,12 @@ setup_vicii: stx VIC_CLKRATE - // Set up default IO values - Compute's Mapping the 64 - // - page 129 - VIC_SCROLY - // - pages 140-144 - VIC_SCROLX - // - pages 145-146 - VIC_YMCSB + // Set up default IO values + // - [CM64] page 129 - VIC_SCROLY + // - [CM64] pages 140-144 - VIC_SCROLX + // - [CM64] pages 145-146 - VIC_YMCSB - lda #$9B + lda #$1B // according to [CM64] page 137 some software assumes oldest bit is 0 sta VIC_SCROLY lda #$C8 sta VIC_SCROLX // 40 column etc @@ -35,14 +42,12 @@ setup_vicii: lda #$0F sta VIC_IRQ // clear all interrupts - - // XXX initialize $D012 (VIC_RASTER) - which values to use? - - // We use a different colour scheme of white text on all blue lda #$06 sta VIC_EXTCOL sta VIC_BGCOL0 - rts + // Setup default I/O devices + + jmp clrchn_reset diff --git a/c64/kernal/interrupts/fce2.hw_entry_reset.s b/c64/kernal/interrupts/fce2.hw_entry_reset.s index ed498dfc..f04dd653 100644 --- a/c64/kernal/interrupts/fce2.hw_entry_reset.s +++ b/c64/kernal/interrupts/fce2.hw_entry_reset.s @@ -6,9 +6,8 @@ hw_entry_reset: // The GPL program at https://github.com/Klaus2m5/6502_65C02_functional_tests/blob/master/6502_functional_test.a65 // uses the following initial reset sequence, affirmed by c64 PRG p269 -#if !HAS_BCD_SAFE_RESET - cld // for CPUs having undefined D flag after reset -#endif + + cld // for CPUs might clear D flag - but it is possible this is called manually ldx #$FF txs sei