From 66bb51c6463a45a2934cd1eef948f8bb75028a01 Mon Sep 17 00:00:00 2001 From: Bobbi Webber-Manners Date: Sun, 14 Nov 2021 17:28:48 -0500 Subject: [PATCH] Merge PR 147 'Startup reads prefix to CMDBUF' --- applecorn.po | Bin 819200 -> 819200 bytes auxmem.init.s | 2 +- mainmem.init.s | 68 ++++----------- mainmem.menu.s | 230 ++++++++++++++++++++++++------------------------- 4 files changed, 130 insertions(+), 170 deletions(-) diff --git a/applecorn.po b/applecorn.po index f2569b1cd77a627ce010402aaa6fda3fc686d316..dfdc79482d8621357a79d1b8cd4e807af7f32201 100644 GIT binary patch delta 8790 zcmeGge|Qwtad%&G?-C6;10iQXeFR!bKuH4Vp+Ry$lDp$dLoRt2ZL90|wcmFIY^$x* zR&18GhgP!jw9pj|eCf4H7kS5`)nMzDixJ3$fY*v`zl2}@s9#bEt~FXsYw5hb3npm$ zfBPlhUf$bzGxKKV&6}AWMX6MjN~0~yahFT@#=IGq3CbHnHJ|)wXV(2Yvqbnw@I&z9 z@7eIPb?(f<(HSSX5P1bN)8KcudsdbPTq>RY3Nll-Duf9wK8 z&p@V!tMumZQhj>(CjEi%GF=ES*GYJVi(J;NZ&Lq;^p)y+$oqskg7iMsMEVN#T|{2c z)|cQb#d2*+30`7bN5fTYz1CZT$sE`a!G`3WVC4F_5mAl`@hxuCMutBgRNiM9%qg=m zaeR}iTj*T7k*&vIm3*w-G#g(#?JcSx*!tX0+{$kmpgcp#2c61nyhFn4XgmzOwK<>1 zC1QDJ-RJQ}v8p`ipVn<(|1T8Vl7J_ARogI%4!4~{_qgU;Yx-gJ>vwBO?OV1TR*sxQ=J zxLZIMc_h$cY#^H&BRTAanxvGvQxTXOsqq>>PDT<=s{{0#x$58e=K>AYfFmc#Y~t$}=Rt=|4#cOM0#HS_>aiLD6e>6 z3@Lqr0BRqj>YZHQm#KOeC65OUA6Ni@Kgs}q%QpWOg@IAE&VvqjpC@GcdNcx{Ic%_E}V4oj^r7 z#Zxr4j}ri=-p6Rfmh_uW#mzdX8l&vzRNc$>II^1>*C;2Pc3tqWr_v4<1iGCC&Ft~9 zSA)NX=4z2Le0hswjZqZxBoz}8>!5bSS>%QscHQj>`DfLIl1l2b2hD6!?lrED3LOIZ zqtCcDEoyZgSFkEADp)O}M@H2g5IR;}$0gQRWsYJmcbNWh4x@XQr(P4r+$JhKn!-^O zFK9NW_j|0{5j3WTz?i9QT>ws_y^hy)!Q4AKYCJVY)cRAdc<&?Ho%8TaV)^vgk}5=6 ze?fIoeG-hT?xG~CS!45Xk#{0ilBzFp9>4FQzcQ|a$;;g^xyHqM>F`0S_EL6)4j-cG z5z6}L@L{U{WbN+JY#|Y;8-^YM5UAz6(eq=pp6WKj-7(7JZc`B!ej|KOS>p8Ia({P1W<%`>3989r8(^ zVI%KwS~;2(PoQn(y^argU;rO^$Co5VPEs`OW!~(syZy}j#3D17B~ZAWb)j$t`Ag7n zLUbcBuV*aC1w*N95-twvq6~47d>l09LoBYkBSLrUk?_(x9@h3=gJ-tv^CtZ%Nf%@n z>qEmmNImXjN6~N+sjvFjF*MwZQg-$-8a{#`R?nBYKoBiN^ODF6a9c@t`)~JMte!D1 zmOy*D5O>@&T($u&TgW$FHhWsv23<_91~y-mRd5@DyNv{H!(IjZ7*qJ{xDSANyQt}P z!F>2h$|Zc&H@u62gih9jKqmn9pxrEqK(Ad|`?YvRQ&zKq{Of!&1Q(GT*`|J=mkZA@v|?e-X7GLhaqC{V-xF?a~GK za@(J&XD$1aHg5s0s08H}af_$DxtoF$fhgcbY7#N<+g{Xu1YI~1U5p*q+7{rFmece? z7Et&3;l?BXm;6jXW?|;Y*9J`+xJbU9=dDeBkzCRo^>zf5EN~UnwvM)18PT|&b50-b z43Ztp_~%31KTnRk^63*EXZ=`9I=OAS7!x+<0&HCwOE&{IW7!LxN~5Tl>MB5 zpym(}r(HSW%#6kCI8ElKD#u;oSE>5tbL@{){mMChnzx=~uV|$exHO%5$CU7JW_Bm2 zYSecM6#Ico3-^%*6n<{ZJlt?#M;*v@WkDaV9MM*K0 z&HC$=e7KHwmyU;Fj+jO1cWk{N(Kd}$;-Z2H{K>Y}=A$n&;Bp6<^`-#(!AEX4C{r|QGY*=g;gg}Ah20^i)-@iVX% zf2}^eVsMbptKzR|D;Htcv$6a*SX24yjMj-d>ESHhBY3YXK-XE~4$efK_V&-wv@4fRb_L z^8z9b4Uwq{(ad@NJTEXM#ip+&w>I?jCog+~JBn^2q@`Rx6G$zLIT?QB#o zjoLc`|*?M6Y1@*QlXE~W2$i@+z zh2#4y?2C|Ha))&iGvOq_%(-MkXMW9g5__INTsLY`{e9k zlUWcSYH3QAnR&_CW=?XMnLVfsIc1l;#}1ybJtx46YCy}44>iG?b7n#|D$J&$^bp&eX;-xR&t?i=vkQbDse z>qdONYz_ z4if74sZI%ZYY7ecz zQ_4=&$DjUv8m~F}Gi#M++uyW_VoVU7`{4^Rx|D-gr-@Fiz_T1Dcr*mg&C$C)St<%S zrre`uB}!XV9;lT-TB3cR-pKMLZt`eBPBoqc{hlr8S>e69gf z*OQG{>U{e)d!8s>-uV&5QPGymDOY#?yczrOb27%M|HC$jrc~H>Om;ygyC7EYWU>n~ z*#(*Gf=qTnCc7Zr@cBO31-Z}}GbXzr6S@#&+hiAHvI}B$Mkc!;lUE(rgmpX`EI jeUksxF37F+<e{d7mnY;UJJ=w%RAU0NQLN+GX*g(Jr8(D(mFH(2Q#l4x<%LA_lHE<1~Y5GO2Te=~B~9#x3=I zZzVZ)lHPy!&y78j_U-q+_x*U^ulGL7@-kUornhJ0Kj!3iE}Eaq$scfQ+2CJ~Wc=hv z1`l5Wz6ieTJrlmR-Xj?}Tw;S2_i#IV8$^7L|7PKORh(BH6%W;_FH%C(wbVz{jxgsC zkFHe@PD0cagb&uJTY{@pKDb(aKDb8Zg6mWEFFyeC<>n~;-5E(&w9j59yaLph%b6nj(&&f z_RmDErQc$Lnb=lHU-=TmF`mFr_xg*8}YNxIDxjoP5OvPrp3KaiI2DLchlJ z{UxD~5plOqZ-N~F;8Q8!x7j|N+euVR&k*%IeUrUM&ya9-`x&C&qjKUrU;Cj3agk5Y zr;n4ie_->muM%C51*fD*gzhGhz@di2cYHwDV)YnFuIjQ@Juz(+VJluHkuJ6XD8+*$ zWHa2RL$1~K5ZXz!HbM_F9+&nL{XzLR4!g>^w3m~<DNQ-)n68noOYM| zG5h&Xj!T=aJn8}m(2M*oLpG6U8SezxC)=NIS8H8<_gx$OhMbuFf|)6nH0mqETsJ44 zYtok_#b306DP5BkA9gaOTT1;bP$aTw1Jk0TIgql?Ys`y=rg)LME^&QQo-lVHfy1cp zj?bJs|4NhdL98emM=l@pa%-6=p^ z#a%v^Sfb2+5ElnJnq7Vgw$2KXbbLsF1i^f_nnV3W&9i(Z)}-6SA+}ZuXY@tU{)%}1 zCoJcHs|__7qMl{&rhQ>!=C^9y2O5u6nb}$t1uL|3C|D^be7Xa2q}bW$N~cPnKanZ! z3iwoBg6t}e`1Hk)(Q9@-OHQbv;HsTJB*$M!@XyD0ul~0+$0~yBj#UQhKC1kvlBIih zSEJ!hfSo0$Hi$-Ji1s&WZ=+EI(P)$Q4jPT4gk5_Vjb1`f2Np|AOh`|>IV)5GF(Ih6 zZg-QVbO5qNT5Ek#B#KU+Lo6(YnaJ-kk-be*MYbomK;?~%K;}`2g7b0A`2=u2EegA) z=dw|M699Ae5wp<=P!-A6z|hZaMiDF9U3^H5@xjUM*KA?)|e<1Bwgq}n60_u7Tbq%1d z^Qh}0(%w|=TZ+GAJ5OBOwYQYDOL65gP_Bv@A{he_0zO7#2%L->2)vBOQP(9jX(^SD z^eab~;?h8zOx7LR<%WEM+zoDxLuO&h6Iy+y4Lm1L&1q~%JSzUl7q05|${FB6sGX2D ztK8}<8RewSOGGnWm0o0F^!}7EN}71e?njjM6?jgv{sBK$jKHjk1!_YI)hY#Vr=vo% zB>ah(+oE6723jB{GGQFL{lBoBOkZ1pzFq{rtuE2?VaHFh9oJYm4;1}^{2-NIrWI1< zMg=Z*!m{<#ETmU!{lv&iESnP1QK(ZlwR2FVZZg|FepCCEvbqwNCsj+!ZzXiQ1GLm_ zp;_u$xr~*(2Km0}^ym0ptdLP3)X~s~R#hDTBKcU_RK4;CY4S|NVjv#M0GfBPqJU>H z5`Tgk1XPq;mAC-TO}1rt*@|h|MjO~fGdslm4smXWb|E!Rar`wi;(w)#s64d{msVSA zwb-U|WblbhSRm&?4BDM49)&SVQgi2bOv)v16z3_km*avt)7Xjt|B?m&O!AYJ+~v6F z^T=gijJ$O@t_HnA%dxZY;-)UpWKjnk2-1pl4Jhv~$BS&nrriB23Ofs?;b|!f$Et7z@cVTYUR(R(W{pS2!-?u)1aaQ6SwqPA zapeh3fJcR>Zx(->`mmVVY6zii41Z~2D@@2u5KfA(8ZQh0)&Yjdu<`+`D2bKNu+EBi zHjCFhVxh+&scW55q{?f~iT71`;V_2d!+heljM}Tbl4Cpk4fEU6M@*uv5z6yU6c^Jf zuey|0dk?ShLS@S8TO%B<_QvHgDZ=8sTNva5$Q1OfvmEN25Mr|V4u_0QO#A5P$lJT%^Gb%!G%5q4q zwkJI&ITRaw(qrLva_D*a4}N&u1Ws^nQ35M)@l#`P{PzUwM88K;$KYzKoy)*3Xx(1rJk9mg1 z#i|w-eI^}ffthRGA?->lIQ%uQ`5_#b^*n9ZYqD3Udp~WF?+TA~d&G+^p( znZO3w;$VkmOO<`hgaQB<8eAc9(Xc#mq{cEW0kW_{*foK+CWRel=Ii2$c^T!--Lf1oW$+$grj{xX?_SV|C-WjKUR|v238H!l!YAKTu)7T9xWipqi`PU zsp%{r&&#)+P;R@qy)_Qdzk4F7dr=G&&oCAwGJ0yv(#ti8`6C9G_&^$Y|7xo_{(|d( zOFX0uJ%m5xtCaqS@zcT`pR(c+yfXjOvaND@me#L4_XyO~GeolPBT!q;!>uG6t|k(U ze+*gv>#XX0gWXh~AX=!Oev4>(`{{O~?dzxiM6{Rs=?+$sqT7H3$L`D4g%++Xtrm&F z!`37IwDq_|t;faV1U!r5!V?E+W|VTh^K0-@o?qU(aTT6z%QZF~yF%lT)T3qo@Y~AH zIy{emK#A7j!k67RbDpHBLiUMgXhyWJ=Q1@m^}T*MiM=KKBZf7XFH?H9B$1U{b@;wn z7g>P-a$CZWP0keg^K%)E@&IMEB)UanZ}ft)aXsF~#}s`%cJPLUuI#GEnHl{8jVTrN zcp-oE3!#rFU#-X0xiO1a`6tE!vnc#~3sVReG9`+Yck8j?ILyjZ11nFzZ0Gq1$2-nI zRSYjy^ai|=-^U*JWI6ml7?*~&hPScTVx?>Y-oX2ma~ts7d-+5qlN3(vr#PyUQ#|b< zrvwToCZ^yz3&|!V94~~uY+TGQVUI%P)&{(W?@=mU_!8)4ku7S(+ih>> IENTMAIN ; IENTMAIN does not do CLI @@ -37,7 +40,18 @@ SETPRFX LDA #GPFXCMD STA DRVBUF2 ; was $0301 DEC :OPC7 BNE :L1 -RTSINST RTS +RTSINST LDA CMDPATH + BEQ :GETPFX ; CMDPATH empty + LDA CMDPATH+1 + CMP #'/' + BEQ :GETPFXDONE ; CMDPATH already absolute path +:GETPFX JSR MLI + DB $C7 ; Get Prefix + DW :GETADDR +:GETPFXDONE RTS +:GETADDR HEX 01 ; One parameter + DW CMDPATH ; Get prefix to CMDPATH + * Disconnect /RAM ramdrive to avoid aux corruption * Stolen from Beagle Bros Extra K @@ -90,55 +104,3 @@ RESET TSX >>> XF2AUX,AUXMOS RTS - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/mainmem.menu.s b/mainmem.menu.s index 3fef041..a767af9 100644 --- a/mainmem.menu.s +++ b/mainmem.menu.s @@ -6,17 +6,17 @@ * 13-Nov-2021 List of selected ROMs kept locally. -ROMMAX EQU $0382 -ROMTHIS EQU $0383 -ROMADDRS EQU $0384 ; List of ROM filename addresses +ROMMAX EQU $0382 +ROMTHIS EQU $0383 +ROMADDRS EQU $0384 ; List of ROM filename addresses -ROMMENU JSR HOME ; Clear screen - LDX #0 -:LP0 LDA TITLE1,X ; Print title - BEQ :LP1 - JSR COUT1 - INX - BNE :LP0 +ROMMENU JSR HOME ; Clear screen + LDX #0 +:LP0 LDA TITLE1,X ; Print title + BEQ :LP1 + JSR COUT1 + INX + BNE :LP0 :LP1 * LDA #TITLE1 * STA A1H * JSR PRSTRA1 - JSR CROUT + JSR CROUT * TEMP -* LDA #$00 -* JMP :KEYOK +; LDA #$00 +; JMP :KEYOK * TEMP * JSR CROUT * LDA #0, '2'->1 etc. - CMP #8 - BCC :KEYOK - JSR BELL ; Invalid - beep - BRA :KEYIN ; Go again -:KEYOK STA USERSEL ; Record selection +:KEYIN LDA $C000 ; Kdb data / strobe + BPL :KEYIN ; Wait for keystroke + STA $C010 ; Clear strobe + AND #$7F + SEC + SBC #'1' ; '1'->0, '2'->1 etc. + CMP #8 + BCC :KEYOK + JSR BELL ; Invalid - beep + BRA :KEYIN ; Go again +:KEYOK STA USERSEL ; Record selection * Make list of ROMs - LDX #63 - LDA #0 -:INITLP1 STA ROMADDRS,X - DEX - BPL :INITLP1 - STX ROMTHIS ; Current ROM=none - LDY USERSEL ; Index to ROM to load - LDA #0 ; Load it to bank 0 - CPY #6 - BCC :INITROM2 ; <6, single ROM - LDA #1 ; Load to bank 1 and 0 - CPY #7 - BCC :INITROM2 ; =7, two ROMs - LDA #7 ; Load to bank 7 to 0 - LDY #0 ; Starting at ROM 0 -:INITROM2 STA ROMMAX - ASL A - TAX ; X=>ROM address table - TYA - ASL A - TAY ; Y=>ROM addresses -:INITROM3 LDA ROMLIST+0,Y - STA ROMADDRS+0,X - LDA ROMLIST+1,Y - STA ROMADDRS+1,X - INY - INY - DEX - DEX - BPL :INITROM3 - RTS + LDX #63 + LDA #0 +:INITLP1 STA ROMADDRS,X + DEX + BPL :INITLP1 + STX ROMTHIS ; Current ROM=none + LDY USERSEL ; Index to ROM to load + LDA #0 ; Load it to bank 0 + CPY #6 + BCC :INITROM2 ; <6, single ROM + LDA #1 ; Load to bank 1 and 0 + CPY #7 + BCC :INITROM2 ; =7, two ROMs + LDA #7 ; Load to bank 7 to 0 + LDY #0 ; Starting at ROM 0 +:INITROM2 STA ROMMAX + ASL A + TAX ; X=>ROM address table + TYA + ASL A + TAY ; Y=>ROM addresses +:INITROM3 LDA ROMLIST+0,Y + STA ROMADDRS+0,X + LDA ROMLIST+1,Y + STA ROMADDRS+1,X + INY + INY + DEX + DEX + BPL :INITROM3 + RTS -SELECTROM >>> ENTMAIN - CMP ROMTHIS - BEQ :SELECTDONE ; Already selected - CMP ROMMAX - BCC :GETROM - BNE :SELECTDONE ; Out of range -:GETROM PHA - ASL A - TAX - LDA ROMADDRS+0,X ; ROM filename - STA OPENPL+1 - LDA ROMADDRS+1,X - STA OPENPL+2 - LDA #$80 ; Load address $8000 - LDX #$00 - SEC ; Aux memory - JSR LOADCODE ; Try and fetch it - PLA ; Get bank back - BCS :SELECTDONE ; Failed - STA ROMTHIS ; It is paged in -:SELECTDONE >>> XF2AUX,ROMSELDONE +SELECTROM >>> ENTMAIN + CMP ROMTHIS + BEQ :SELECTDONE ; Already selected + CMP ROMMAX + BCC :GETROM + BNE :SELECTDONE ; Out of range +:GETROM PHA + ASL A + TAX + LDA ROMADDRS+0,X ; ROM filename + STA OPENPL+1 + LDA ROMADDRS+1,X + STA OPENPL+2 + LDA #$80 ; Load address $8000 + LDX #$00 + SEC ; Aux memory + JSR LOADCODE ; Try and fetch it + PLA ; Get bank back + BCS :SELECTDONE ; Failed + STA ROMTHIS ; It is paged in +:SELECTDONE >>> XF2AUX,ROMSELDONE ** Print a string pointed to by A1L/A1H @@ -133,10 +133,10 @@ SELECTROM >>> ENTMAIN *:NULL PLY * RTS -TITLE1 ASC "** APPLECORN **" - DB $8D,$8D -TITLE2 ASC "Choose a BBC Micro ROM:" - DB $8D,$8D +TITLE1 ASC "** APPLECORN **" + DB $8D,$8D +TITLE2 ASC "Choose a BBC Micro ROM:" + DB $8D,$8D *MSGTBL DW MSG1 * DW MSG2 @@ -147,46 +147,44 @@ TITLE2 ASC "Choose a BBC Micro ROM:" * DW MSG7 * DW MSG8 -MSG1 ASC " 1. BBC BASIC" - DB $8D,$8D -MSG2 ASC " 2. Acornsoft COMAL" - DB $8D,$8D -MSG3 ASC " 3. Acornsoft Lisp" - DB $8D,$8D -MSG4 ASC " 4. Acornsoft Forth" - DB $8D,$8D -MSG5 ASC " 5. Acornsoft MicroProlog" - DB $8D,$8D -MSG6 ASC " 6. Acornsoft BCPL" - DB $8D,$8D -MSG7 ASC " 7. Acornsoft ISO Pascal (2 ROMs)" - DB $8D,$8D -MSG8 ASC " 8. Everything! (8 ROMs)" - DB $8D - DB $00 +MSG1 ASC " 1. BBC BASIC" + DB $8D,$8D +MSG2 ASC " 2. Acornsoft COMAL" + DB $8D,$8D +MSG3 ASC " 3. Acornsoft Lisp" + DB $8D,$8D +MSG4 ASC " 4. Acornsoft Forth" + DB $8D,$8D +MSG5 ASC " 5. Acornsoft MicroProlog" + DB $8D,$8D +MSG6 ASC " 6. Acornsoft BCPL" + DB $8D,$8D +MSG7 ASC " 7. Acornsoft ISO Pascal (2 ROMs)" + DB $8D,$8D +MSG8 ASC " 8. Everything! (8 ROMs)" + DB $8D + DB $00 -ROMLIST DW ROM1 - DW ROM2 - DW ROM3 - DW ROM4 - DW ROM5 - DW ROM6 - DW ROM7 - DW ROM8 - -ROM1 STR "BASIC2.ROM" -ROM2 STR "COMAL.ROM" -ROM3 STR "LISP501.ROM" -ROM4 STR "FORTH103.ROM" -ROM5 STR "MPROLOG310.ROM" -ROM6 STR "BCPL700.ROM" -ROM7 STR "PASCAL110A.ROM" -ROM8 STR "PASCAL110B.ROM" - -USERSEL DB $00 +ROMLIST DW ROM1 + DW ROM2 + DW ROM3 + DW ROM4 + DW ROM5 + DW ROM6 + DW ROM7 + DW ROM8 +ROM1 STR "BASIC2.ROM" +ROM2 STR "COMAL.ROM" +ROM3 STR "LISP501.ROM" +ROM4 STR "FORTH103.ROM" +ROM5 STR "MPROLOG310.ROM" +ROM6 STR "BCPL700.ROM" +ROM7 STR "PASCAL110A.ROM" +ROM8 STR "PASCAL110B.ROM" +USERSEL DB $00