From 58dc012831f49d7dbcbd9e7280180a3e791a0fcf Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Sat, 28 Sep 2019 12:24:46 +0200 Subject: [PATCH] fixed RSSTAT usage conflict --- bin/basic_generic.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_ram_lowmem.s | 71 +++++++++++++++++++++++++----- c64/kernal/f4a5.load.s | 4 +- c64/kernal/lvs_helpers.s | 2 - c64/kernal/readst.s | 3 +- c64/kernal/scnkey.s | 19 -------- c64/kernal/vector_real.s | 11 +++-- 10 files changed, 68 insertions(+), 42 deletions(-) diff --git a/bin/basic_generic.rom b/bin/basic_generic.rom index fb2f7c1915b6c3f86dbdd2b2de2684014bfa7eb6..1a3e9780e91b94c6f7e382837f4e961c336fe256 100644 GIT binary patch delta 51 zcmZp0XmHrDi-oE0-{w6m%*=v)|D1wc9laTrTAlp=fnNbAe1V-ujNSSF(hUmE|2IFD Hm1P0|FYFb_ delta 51 zcmZp0XmHrDi-k$y+vYti%*=uc-<*P69laTrTAlp=fnNbAe1V-ujQ#4jr5hBke%t(5 HR+b3>4HXr5 diff --git a/bin/kernal_generic.rom b/bin/kernal_generic.rom index 8868de5b9709b4c9a095b598049029b485875ffe..8b262ddfe7fef2b1bd83190127238ef71b0ffbe5 100644 GIT binary patch delta 1422 zcmYjRUrbY17{B*iN()*k)Y1xKKN-=2V`0NZmYD%jp^`J0hz4KGjb@=U@UX>2_A+s? z%&8@nV>V9rr>>{Ye>V&DCCNlq(Y{I<%(9!qQZ%Q|IgAfJyKEn@>$>4l6xw8Xlo0ZL%wH9T zykEjH?2JKA5)_GA$R^Dm)RQDN8f@0cE+^tMaa-h6Tof9}_nKY1#fcCKb6$lP-Mp^- z;&ktn$LiJwwsO~|{F*ycH@0$@46kfFS=Q7e=Q!Duy^EIP&li7(5yfqSg@ny9;ux*r zHxQna$fwzJ?2luOTErRVWOy$|3p8-}@hUxd>_jfB)dPysj$TJ|7O=cZI`TW%O7bwj zitX<&0JekdEcn7o57`cta-a)^_;5BP*6>7Bv)~+tgU|dN^pilrIkYa5cZ^4xC_Tu+ zgOFxP48V)k6klMJ@YgZ5Z74~oj3wOJ@Xs3E;b@eyBxuFqCg-p}o05iSVk&7f#xiY+ zZQ8{v6%i8#*V1&c7($Zv@!!weF7l#a`(3jL7JyhR%z<#*75gJ-rf$=cYKSgrx z{0zS-4{(R1x~+>OlCQcRKh%1-;RJPM@SvnBa7+C`RiqdiT3bGZGDe)V!U07LV!8|& zf~uvhC8bZP=|c8ecas-|7P84)O`6Qx4YafJ$1b}3OBWt0iNjo*rA`L9ZEmv+*oOxq zxtCNzrWBlz9V1X3!&_owCX0!!9gd6R5xs{Ae1~9v{K52ic#RJ!5v$$jLgm^~M|o|D zF+O_F_$spb*8S(-ponJZ99p{1d$echOY0(^Y+vh@QiKEOezgAr~hq9;(QeAW#E~T2ZUg3fmwML3|y;5(K<7GGNif$wMr*?g@TROLI8K{dXQQi!Y+S!qUH z@w?mf>vrE2RE5Hu?A|Qb736T>BZtwg%VQ?RNhd*+Zh|xsOE^fxIAwpZFVLyd-6^q9Zlby>NiIJ#=`16yt3%o zCfN8t1ZA)rYRDOD#jdkSTo}cl$@nW77sqk$B92SAaSfl6@ysd~WIX#62N%hNwY2Qz j8os;OY2!L8xXw2@d@_np(h_9Pyuk1bGbx`|N~8Y)KUk0` delta 1401 zcmYjQZA@EL7``7ZEij}7q2;6NJ0w_`KXBEIWx7H5D&#n}!WQtya^rL~lV$Ob;vYAI zMYFA>^DGR}CEX1dDcS@Aack#dU}T|2vg$(ArDjA|bjzmwu)TJqT+eMw^v^lZ`+eT$ zeb1T3GmSIX6bvM=Pf@OFQ2=1nMt%v%hPE+`8 zK!hDJ5aS>vhy~{>cQRreHz<)VUv$_RE*tl>n2w7=FaA_nQ$vDl?>Wfv7df~w%fwhX z?;~#?12-k~eaJQi<`{Y^hW}7Dv5t8P@64$o&zaE*Kf;vcEP=I@$u?!1Zs4{MYL@U@ zIji(nbL}dI)%+~No*1d2VbQ$^DLmJgN2>}1pPvaRJeL?waB{d`+fSSEZEZb0`f(A^ zZ{i(A?;1&wN-&GwlZ>AWH($GpwCT*p-T9sy-bn#E| zjnf?xe7!07GP#>2HW>Fr}K5@q9 zJ;vC__2^=p8~ngEe8tZ9a)j_)*cvMSPFaaZwp*;e1pKXn)dZSP5c(^C$XhD7nY9s( zYz{jsY73__W_v1oZ_cJN(eQ&L`?V&p$!NxpOZ7@puzmw8bT4f4Ye)-ZS2-j`aD%Rr z0W*GGw_hQzG5%cFQ#uXD#j~UVcV?I{D#A*Hn=96r(5A_xFdr^(QQk|WwdC^Bd?3#G zrLfWBaWJ*2Xf1|awEx@Q}JS1 z;fBR?j;Ut?`4+dragMRs5Vc`Lg&T7h^1h+fdcNM3Ldpa-7*DUU!s$eV|07jbXmSP#LZpv;O0uE~d+7kswTCE*zeZ-eSYDo@8T}>^rNHDZnyIz56 zN?0UYB`hFvT-GeehMunf)Wn8wl|EaDeh<0IcoX*%FO3gECq7}UtJx=_(kOacM8hI7 zB++mPB@?JUj*g3HC4weJbmu;LHG+M{s_H-E=vrvN#17Q41JAMOXcQflkV$j}d5WW` KTjDXPD*7)p*oT?` diff --git a/bin/kernal_mega65.rom b/bin/kernal_mega65.rom index 312e66d1d43ef93a2156c8f5f36b128f9d4b247c..a39fd8ac8beed2787d9270b6ef07caaae81a1031 100644 GIT binary patch delta 922 zcmYjQU1(ED7|osAByDXpZESnfn)a)UwXKS+vY@QHMyd273)0{aR&fz=X zOrNvQsSO)T9URVbm`uSb<}*S~iM9EO*D$TX-YhioA(76dN}Qe`ZGX!i89Rw*l&vu} z3XN=!>4WfZq{B=^+tPX1JgXX}ts;FsgJu$KiX1BKH^W#mZ17xi-EfVd3y>7LeM*(+ zo*=Zp)kHdeu>u4?Yp6I~@;}$MM~@I_WWEZAFwUYC_lq%|ND9Q+pl!9#z#_I^Fg9iT zM~JgK%WKKKBzv~}_||To5Z#78=+D9V91P^(T<&+b!GBqXrLzNoz8latCg`m(qOXk} z$isDuNnEo4dh}Or>_XMEFRCe2J&hUkm#EaIzUkszyNe9ST)Ty&=c+_6eN;xk#|I$J z!!H&mf^iNHW|RT>vRvE?k0WJOquNr}~KpA_V<<>z@ebSp*@VmPOS zhS<;5HSB2hVQDN0Jqz^l%=a4rn!s_Z!Pfg!RwdD57xf~STM}KgV}ac<+S>A|;K*X| ztL%^oj2usBq@BxA+awzX|-shU`@< z-06|q?s>iJ`oy~nL^obLL*7g%e)9=Ugb8-n{*y4t7VInJ_vx^~>m{l%)hxz@gfU=- zi8Rhq8W8^Uk}o$=7pXIomz2edP(t#O;;)kYjXK%knijP5)|~8!rUS+5KB9|&$f|Y~ zkfe4N5U6_#s7c*ZK&|TT0@|ehwusoa+In>CuKm$|EF-Ifq?II=$l)UIAaS|q{)~$r z%S47tT>`6g?7(+*(BWA(mc*S{GhcUyp8;EXl?{|5-C|vKKf$447W>0G;ViS%IfZWa zYaIv@J5|?!9>aC<%Kwsnd!R`PUBPdIW%+pMDn94a^*^kVIju_3o16}E+LNY#Bx!n% c24|^{(+4v&&gs1*-NK^v+e{h0_2bIaX98lJ7XSbN delta 944 zcmYk5ZAep57{~8DcXOM$TAF&7P9KX(tw@rf2-Ku-#Gx0n7b)oWLS4d&BC3xIT#+)- zPGB!2vbIR!#)bKz6-o9XxAa7!i`zXOjvAesd$@ekzr$#;2Ge^(yYb2gEVG+=f?vL zCM4tyO~9H-w!y6D>{b(0(>~69S-vgzXB*EOLW(Vy=q68t*p0|WwNCJ5^?AT~th!2sWc||Be z$@sj(wFhZfXyIJYnuH5UXiLJmFOjurlU z8VVbfZY23TC9jt;Vt#Qsh2)giBbvp(5J^zujz;?z!UP&zLp;)zwE`%NUV?Zc#y)6RtOp& zHhN9)B*w0h?d3Z>Xr>Z$0oTVrLM3Y2XbRjxE@#@Uku2lp zxQyj^pey?jPx2ib*tG3-xR+Pc)KJI&z9{=5jM9hS-npz@X`AyjOrdO&@nbl_MXV)t z{6Vs*1o%R7yrhg}bd@~I|2)xa_m)fktL()XtRCvW#)kYv>B2=d6cE`zCP@#m^%+L~(-Rog`SgF3UDu`(r`$4|2ApEdT%j diff --git a/bin/kernal_ultimate64.rom b/bin/kernal_ultimate64.rom index 571c7efbd62559f0a3289cf323f1ebc8e383d04a..65ec49a3a98dcb4cdc55dce72fe26c7011c6d773 100644 GIT binary patch delta 1089 zcmYjQUrbw77{B-2mI52lF=}twN{>jeC1xQr%W%U$;tb7l)ctX&*)%sXnww>N*o#9S zCQE2lwl0+e9pKb@)8blplbTLvS;m8sxsoiYL2=QN%|!M9Gr70da=5GIdP+Ov%e}wv ze82Pi&i8Mycd$1xWaiBz-~+<2cidY&0P6`PdH7ondI`Q{c5$5r0WaIz8!B$2-&0f@y2&uc9Pf*yYs1&AT4C7;EaZ*bLM*$ zBJ|@_<7x1-hIei~_`aP40o4u>sG_>HKk1R~h3setMa*0*b z>x-a$%W>FGhUv{%SsD5XysZl3-pII8`(f%e0Dmyhf+k*uPiv@Ni%uw8$^y?BFlr=d z)GlEdgQn|j2+uTa16MTsd(*MfW1ls=(NV?J1^+3E0)-jN{ZU@@jR`zG!LQibEi}P8 zNG}Z8UaH@~A(HsM6mm!M4_h0HH`$%Lqtj`S;bMjm4GL*%`QZYssARsu4K7-98E!6< z7ijHktN~`xbC-TfNn+8yYp+^_2UPTn`v0UMN@+p!_RlZ1xIQ~O7P>e-G5N{B9k0xD zbq-E3i6?kYM1AXc#d$Q@&fD0YZ}jL@r7p~*E&}+1erxtB4VN|)msbt|k0ma8dYo-~ z{6^cFvU%#}gO7k>{`54se^Ursjwd*H2EXUn`__maGkh^$-1n7aTmacHbDqndXR;62 zY-T_DQjal#0Fc?NhfA{=vt)s1beeRn#9j!1vc)MJT6Pzt>Nb8 z4t4}T-+Z#~lrB}v{XpR$MOOJp1@ZFB6$ItO737u=RZypVu!6ee0~-kI%`U3w*tW~j zQt-;>Kqts-^2SVob3hbPLqS9>h2+Pz2^QO&$Da6UNit|3I;@tt3~|#%aMRL9C+M`$ zI`ot1B(&pE=aFu;NLkiGxo4hVOARY67<3lt3a%7`Rq(qd`iF;e&{&l$(a3&ZBvA$D z|3vO}Jh!#g;@zO{!7sMJCw21b2@w8ojqcIO2s5+Slr3LhzcqV}&#+x|U+B1vwftD0 zCSix<7Vb#KmYpfd|vi;3o%Z%6o*SSjIGbO6! z;LyDy4dT&EDRZLb4g1bPlH7wxG08|#aYjt>0vswoBxucmz=&{Y-DuXO1l+rt=1}az z4#=Luk9EB3ag+2mI7qT*Ku*wX(D4tNGpzR;fiQ-%9q)ke3wY<&gClMd0aRNdRBg>r zvhc5B9l^7k=)HRV(7iz|xL%0Zpq0=+JZ!+)nrv4R`=mtL2A6(AizWO--*%farME*j zHnx7pDtNxL7u+QHm(Jtn{m<3vhWYQ9ZUvR7X8%3Pi&9MB;b$d$)akX;np+`F7v}Jtx+)`rs^Cj~N z-4dYMqL6dcAJi;RH~(|(J|(jC1{Yd!7#eq5D+|;we5`xd3qxgipoo4dQVyv(rYp@5 z{YWC#ZJ%E5^L%nP_R+-T)bz*yKOdG7Xz%LS-Jr^Itu9Wth^Ki@L?fGc-sG-SFbq zU0rMlkGY;5jaHI1DJi9-FXY-KkdHGLx%@>Y|0kQ*_Mv1Y$%Ml|W%GV6$7)vD4nvh3 z&{|~nQW!j7oK6R4-3)moXQ3g$3~728VluRj`JR3@il6T}GxBCdZc<+cItM9os7D%z zS6^x%s2*-0pL(c)2GoNM6i^S;5hgtzs@UDT%LS`J^#T|G+LmC_621UL5w%xE1gn`3 zTE1kl(|!E$4I-Np)9PSp1SKNGnT1)s{mNIj7G`;k4bV-XQy1&|w(XCNxJ&j4cjemj z7)?Lr>G$p?sLMca6C@GzR0W+YpvoE=DWg$>7K=zB=q5pLZQ?o4(~tT{JTEf>!`vY! IYuk-~0i@dVMgRZ+ diff --git a/c64/aliases/,aliases_ram_lowmem.s b/c64/aliases/,aliases_ram_lowmem.s index 1866304e..70df9d2c 100644 --- a/c64/aliases/,aliases_ram_lowmem.s +++ b/c64/aliases/,aliases_ram_lowmem.s @@ -104,17 +104,45 @@ .label CNTDN = $A5 // -- NOT IMPLEMENTED -- .label BUFPNT = $A6 // -- NOT IMPLEMENTED -- .label INBIT = $A7 // -- NOT IMPLEMENTED -- - .label BITCI = $A8 // -- NOT IMPLEMENTED -- - .label RINONE = $A9 // -- NOT IMPLEMENTED -- - .label RIDDATA = $AA // -- NOT IMPLEMENTED -- - .label RIPRTY = $AB // -- NOT IMPLEMENTED -- + +// #if CONFIG_EXTENDED_SCNKEY + + // Reuse RS232 variables, since they should not be used by other things. + // Carefully avoid $A7 which is used by 64NET + .label KeyQuantity = $A8 // 1 byte + .label BufferNew = $A9 // 3 bytes + +// #endif // CONFIG_EXTENDED_SCNKEY +// .label BITCI = $A8 // -- NOT IMPLEMENTED -- +// .label RINONE = $A9 // -- NOT IMPLEMENTED -- +// .label RIDDATA = $AA // -- NOT IMPLEMENTED -- +// .label RIPRTY = $AB // -- NOT IMPLEMENTED -- + .label SAL = $AC // $AC-$AD -- NOT IMPLEMENTED -- (implemented screen part) .label EAL = $AE // $AE-$AF -- NOT IMPLEMENTED -- [!] used also by screen editor, for temporary color storage when scrolling .label CMP0 = $B0 // $B0-$B1 temporary tape storage, [!] here used for BRK instruction address .label TAPE1 = $B2 // $B2-$B3 tape buffer pointer - .label BITTS = $B4 // -- NOT IMPLEMENTED -- + +// #if CONFIG_EXTENDED_SCNKEY + + // Reuse RS232 variables, since they should not be used by other things. + // This one should be initialized in cinit to $FF + .label BufferQuantity = $B4 // 1 byte + +// #endif // CONFIG_EXTENDED_SCNKEY +// .label BITTS = $B4 // -- NOT IMPLEMENTED -- + .label NXTBIT = $B5 // -- NOT IMPLEMENTED -- - .label RODATA = $B6 // -- NOT IMPLEMENTED -- + +// #if CONFIG_EXTENDED_SCNKEY + + // Reuse RS232 variables, since they should not be used by other things. + // Carefully avoiding $A7 which is used by 64NET + .label TempZP = $B6 // 1 byte + +// #endif // CONFIG_EXTENDED_SCNKEY +// .label RODATA = $B6 // -- NOT IMPLEMENTED -- + .label FNLEN = $B7 // current file name length .label LA = $B8 // current logical_file number .label SA = $B9 // current secondary address @@ -163,6 +191,15 @@ // .label BUF = $200 // $200-$250, BASIC line editor input buffer (81 bytes) + +// #if CONFIG_EXTENDED_SCNKEY + + // $250-$258 is the 81st - 88th characters in BASIC input, a carry over from VIC-20 + // and not used on C64, so safe for us to use, probably. + .label ScanResult = $250 // 8 bytes + +// #endif // CONFIG_EXTENDED_SCNKEY + // [!] XXX document $251-$258 usage .label LAT = $259 // $259-$262, logical file numbers (table, 10 bytes) .label FAT = $263 // $263-$26C, device numbers (table, 10 bytes) @@ -183,12 +220,22 @@ .label KEYLOG = $28F // $28F-$290 routine to setup keyboard decoding .label MODE = $291 // flag, is case switch allowed .label AUTODN = $292 // -- NOT IMPLEMENTED -- screen scroll disable - .label M51CRT = $293 // -- NOT IMPLEMENTED -- mock 6551 - .label M51CDR = $294 // -- NOT IMPLEMENTED -- mock 6551 - .label M51AJB = $295 // $295-$296 -- NOT IMPLEMENTED -- mock 6551 - .label RSSTAT = $297 // -- NOT IMPLEMENTED -- mock 6551, RS-232 status - .label BITNUM = $298 // -- NOT IMPLEMENTED -- - .label BAUDOF = $299 // $299-$29A -- NOT IMPLEMENTED -- + +// #if CONFIG_EXTENDED_SCNKEY + + // Reuse RS232 variables, since they should not be used by other things. + // This one should be initialized in cinit to $FF + .label BufferOld = $293 // 3 bytes + .label Buffer = $297 // 4 bytes + +// #endif // CONFIG_EXTENDED_SCNKEY +// .label M51CRT = $293 // -- NOT IMPLEMENTED -- mock 6551 +// .label M51CDR = $294 // -- NOT IMPLEMENTED -- mock 6551 +// .label M51AJB = $295 // $295-$296 -- NOT IMPLEMENTED -- mock 6551 +// .label RSSTAT = $297 // -- NOT IMPLEMENTED -- mock 6551, RS-232 status +// .label BITNUM = $298 // -- NOT IMPLEMENTED -- +// .label BAUDOF = $299 // $299-$29A -- NOT IMPLEMENTED -- + .label RIDBE = $29B // -- NOT IMPLEMENTED -- .label RIDBS = $29C // -- NOT IMPLEMENTED -- .label RODBS = $29D // -- NOT IMPLEMENTED -- diff --git a/c64/kernal/f4a5.load.s b/c64/kernal/f4a5.load.s index 87e43c10..e1cccc1d 100644 --- a/c64/kernal/f4a5.load.s +++ b/c64/kernal/f4a5.load.s @@ -97,7 +97,7 @@ LOAD: // Get load address and store it if secondary address is zero jsr iec_rx_byte bcc !+ - jmp lvs_file_not_found_error // XXX deduplicate with other jumps in this routine + jmp kernalerror_FILE_NOT_FOUND // XXX deduplicate with other jumps in this routine !: ldx SA beq !+ @@ -105,7 +105,7 @@ LOAD: !: jsr iec_rx_byte bcc !+ - jmp lvs_file_not_found_error // XXX deduplicate with other jumps in this routine + jmp kernalerror_FILE_NOT_FOUND // XXX deduplicate with other jumps in this routine !: ldx SA beq !+ diff --git a/c64/kernal/lvs_helpers.s b/c64/kernal/lvs_helpers.s index b4984825..ef47ebf4 100644 --- a/c64/kernal/lvs_helpers.s +++ b/c64/kernal/lvs_helpers.s @@ -164,8 +164,6 @@ lvs_illegal_device_number: jsr kernalstatus_DEVICE_NOT_FOUND jmp kernalerror_ILLEGAL_DEVICE_NUMBER -.label lvs_file_not_found_error = kernalerror_FILE_NOT_FOUND - lvs_load_verify_error: // XXX should we really return BASIC error code here? lda VERCKK diff --git a/c64/kernal/readst.s b/c64/kernal/readst.s index cb313166..10a7d11f 100644 --- a/c64/kernal/readst.s +++ b/c64/kernal/readst.s @@ -18,7 +18,8 @@ READST: // This is RS-232 device - according to 'Compute's Mapping the Commodore 64' page 239 // it reads status from RSSTAT - lda RSSTAT + // XXX 'lda RSSTAT' not possible due to extended scnkey, fix it! + lda #$FF rts !: // According to 'Compute's Mapping the Commodore 64' page 239, it usually retrieves diff --git a/c64/kernal/scnkey.s b/c64/kernal/scnkey.s index f4468cb2..ac22a7ca 100644 --- a/c64/kernal/scnkey.s +++ b/c64/kernal/scnkey.s @@ -46,25 +46,6 @@ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ - // // ZERO PAGE Varibles - // $250-$258 is the 81st - 88th characters in BASIC input, a carry over from VIC-20 - // and not used on C64, so safe for us to use, probably. - // (Compute's Mapping the 64 p51) - .label ScanResult = $250 // 8 bytes - // Other variables are in RS232 ZP locations for now - // (Carefully avoiding $A7 which is used by 64NET) - .label BufferNew = $A9 // 3 bytes - .label KeyQuantity = $A8 // 1 byte - .label TempZP = $B6 // 1 byte - - // Reuse RS232 variables, since they should not be used - // by other things - // These are initialised in cinit all to $FF - .label BufferOld = $293 // 3 bytes - .label Buffer = $297 // 4 bytes - .label BufferQuantity = $B4 // 1 byte - - // Operational Variables .const MaxKeyRollover = 3 diff --git a/c64/kernal/vector_real.s b/c64/kernal/vector_real.s index ed6640fa..b3540f9c 100644 --- a/c64/kernal/vector_real.s +++ b/c64/kernal/vector_real.s @@ -1,10 +1,9 @@ vector_real: - // Temporary storage location - checked on real C64 that this is the + // Use MEMUSS as temporary storage location - checked on real C64 that this is the // address originally used; after calling VECTOR and checking zero page // area afterwards, the address could be found there - .label _caller_arr_ptr = MEMUSS // According to 'Compute's Mapping the Commodore 64' page 237, // the CBM implementation does not disable IRQs - yet, the @@ -17,20 +16,20 @@ vector_real: // Prepare the user data pointer - strange order to reduce risk // of potential similarity to the original routine - sty _caller_arr_ptr + 1 - stx _caller_arr_ptr + 0 + sty MEMUSS + 1 + stx MEMUSS + 0 // Select routine variant - store or restore vectors ldy #$1F bcc vector_restore lda CINV, y - sta (_caller_arr_ptr), y + sta (MEMUSS), y bcs vector_end_loop // branch always vector_restore: - lda (_caller_arr_ptr), y + lda (MEMUSS), y sta CINV, y // FALLTROUGH