From 62e9b4484369e2dd35d3982e067a821f6e689b83 Mon Sep 17 00:00:00 2001 From: Bobbi Webber-Manners Date: Sun, 27 Oct 2019 19:19:50 -0400 Subject: [PATCH] DIR command can handle filenames with $ now --- SOFTCARD80.ASM#040000 | 49 +++++++++++++++++++++++++++--------------- SOFTCARD80.BIN#041000 | Bin 43011 -> 43011 bytes zapple2.po | Bin 819200 -> 819200 bytes 3 files changed, 32 insertions(+), 17 deletions(-) diff --git a/SOFTCARD80.ASM#040000 b/SOFTCARD80.ASM#040000 index 2d98431..9d11716 100644 --- a/SOFTCARD80.ASM#040000 +++ b/SOFTCARD80.ASM#040000 @@ -20,8 +20,6 @@ ; BDOS TODOs ; ---------- ; TODO: Get STAT to work -; TODO: Get PIP to work - PIP creates a temp file with extension $$$, -; which ProDOS can not handle ; TODO: F_WRITE bug turns out to be bug in ProDOS 2.5.0a7 (SET_MARK) ; TODO: Maybe I should eliminate use of "EX AF,AF'" in BDOS since CP/M apps may ; expect exclusive use of alternate register set. @@ -556,7 +554,7 @@ BDOSINIT DI ; Make sure interrupts are off LD (FRN2),A ; ... LD (FRN3),A ; ... LD (FRN4),A ; ... - LD HL,0080H ; Initialize DMAADDR to 0080H + LD HL,FILEBUF ; Initialize DMAADDR to 0080H LD (DMAADDR),HL ; ... LD HL,0000H ; Initialize LOGVEC & ROVEC to 0000H LD (LOGVEC),HL ; ... @@ -642,13 +640,11 @@ C_READ LD HL,RDKEY ; We are going to call RDKEY LD (SOFTCARD),A ; Do it! LD A,(AREG) ; Grab the return value PUSH AF ; Preserve A (and F) - LD HL,COUT ; Echo the character using COUT LD (ADDR),HL ; ... LD A,1 ; CMD=1 means call 6502 sub LD (CMD),A ; ... LD (SOFTCARD),A ; Do it! - POP AF ; Restore A (and F) AND 7FH ; Mask high bit LD L,A ; Copy A to L @@ -1948,6 +1944,8 @@ N2H2 OR 0F0H ; ; TODO: Parse * wildcard and generate FCB with ?s ; TODO: Implement REN, SAVE commands ; TODO: Implement support for ^C in C_READ +; TODO: Fix DIR command to use C_WRITE not C_WRITESTR ($s!!). +; TODO: Why is DIR command giving partial results? ; Get a line of text from the console & handle it CCP @@ -2380,19 +2378,19 @@ RCL1 CALL F_READ ; Read records until done CALL F_CLOSE ; Close the file LD DE,LMSG ; Print 'Loaded' CALL C_WRITESTR ; ... - LD HL,0080H ; Reset DMAADDR to 0080H + LD HL,FILEBUF ; Reset DMAADDR to 0080H LD (DMAADDR),HL ; ... CALL PROGSTRT ; Run user program at 0100H LD E,13 ; Print carriage return CALL C_WRITE ; ... - LD HL,0080H ; Reset DMAADDR to 0080H + LD HL,FILEBUF ; Reset DMAADDR to 0080H LD (DMAADDR),HL ; ... RET ; RCOERR LD DE,NFMSG ; 'Not found' message CALL C_WRITESTR ; ... RET ; RCLERR CALL F_CLOSE ; Close the file - LD HL,0080H ; Reset DMAADDR to 0080H + LD HL,FILEBUF ; Reset DMAADDR to 0080H LD (DMAADDR),HL ; ... LD DE,REMSG ; 'Read error' message CALL C_WRITESTR ; ... @@ -2409,7 +2407,7 @@ REMSG DEFM 'Read error' ; Show disk directory ; Use FCB1 for directory search -DIRECT LD HL,0080H ; Reset DMAADDR to 0080H +DIRECT LD HL,FILEBUF ; Reset DMAADDR to 0080H LD (DMAADDR),HL ; ... LD E,13 ; Carriage return @@ -2429,19 +2427,36 @@ DIRL1 LD DE,FCB1 ; Default FCB address 2 JP DIRL1 ; Loop for all files in dir ; Print a directory entry in FILEBUF -PRDIRENT LD A,13 ; Terminate string - LD (FILEBUF+12),A ; - LD A,'$' ; - LD (FILEBUF+13),A ; Print to console - LD DE,FILEBUF+1 ; - CALL C_WRITESTR ; - RET +PRDIRENT PUSH HL ; + LD HL,FILEBUF ; + LD C,0 ; +PRDL1 LD E,(HL) ; + PUSH HL ; + CALL C_WRITE ; + POP HL ; + INC HL ; + INC C ; + LD A,9 ; 8+1 because we already incremented + CP C ; + JP Z,PRDS2 ; Jump to routine to print the '.' +PRDS1 LD A,12 ; 8+3+1 because we already incremented + CP C ; + JP NZ,PRDL1 ; + LD E,13 ; + CALL C_WRITE ; + POP HL ; + RET ; +PRDS2 LD E,'.' ; + PUSH HL ; + CALL C_WRITE ; + POP HL ; + JP PRDS1 ; ; Erase file(s) ; Pattern for erase is in FCB1 ; TODO: Should prompt Y/N if wildcards used ; TODO: Not working with wildcards for some reason!! -ERASE LD HL,0080H ; Reset DMAADDR to 0080H +ERASE LD HL,FILEBUF ; Reset DMAADDR to 0080H LD (DMAADDR),HL ; ... LD DE,FCB1 ; Pass address of FCB1 diff --git a/SOFTCARD80.BIN#041000 b/SOFTCARD80.BIN#041000 index a23dce2ff1c3a2a6b73294579a4bc20ac4b6f570..688bafd58198dbd10f644ff3d14919dded21c760 100644 GIT binary patch delta 1302 zcmZuwe{2(F7{2QY*rg5{!d#ds{We&oMrKYxtkOi65TedWG|@jm8#HDF1%JdW{sfwCNi!txv~#7l12$Orhz5~T^wfmUt8brdIPi2q|d$g zywANqp6_mO)-gEi_^!R7aYCajM?$s39-TbW(7MXH^-N@Y8gj=P$2H-ECY;oSboRla zcX|FNB1bm9;MZtDDpX239hR%LJTD4fj_206+P=n!U}{KJ&fvx1D6aH12@4qg&bYwe zn4Xs_eXI3KpD*a;(3rN8>v07~NiEX6ej1}6?I(AN!D(Etyi-JDq*H8dS;U@2Ojn2u z(-CS8Lx)dAlp*`YC;1HdM)YpAhC*-JMJ|blP1wmS6idY;O~Nl&7{kRQzTz%7t;ucI zur6H3XqGI9t72!{9Vf{oW56u1JPFJBt|+BquY1XXV_!U za3xAp5o-$ivA>wC!{4NI9dpKKGwOtKJg(` ze5;M#x;wE|x;y_{tlGtZGj7BJ&2{swJ-&~%zhdoiJ$COs7O-#=Ge1t-=TcnOBXAqf zKX(nM=AXIRA{XwYwz)sHm;6c!M6;5#i{G(`QATTP=I9j>=2|Di zSs~%`WkhBAxPP6JXj>paF3L_oAkGhpl zggfH5Z81s4^>+?vXuU$WDX_^K3Jt2cQ;G+;4K~-O(5p+_Mw^qAnLn1e%{Dix%>22; zb=q83nRyXIy->~6O;4|eddZZ6`%|iCFGu^qyD6Gdb9+>8fKCs22N)b>aE!qqgU=Wo zXE4Md!obHsWDsQ#V{ku!Sw;g~6Zcvf;!?XiRsLj-L`Pcn@q zWPv5W_+=v8U?o76PbI=m;0NltOQ-6$kJQF6G6#g;MP7PG@)K zobg16t)wrN#U^;7c3Gx+v@2OJvXPDSMKtOGPu+E9c8WA6nREX0{ona7-}$>oEZrlP z2j$j+CY4MN^0`i~8LzgM*o`CC6m7A_uN2g&uwI1?Dr}4{xqgymJFw)dXii{~5>peI z2NUfV230W*Qrkj z`z2RB-5yD<2D&|!T#eB_sgAY0#`t@1(=saEm*D8D6cvxg(3SiVB)fX}YFMQ5Es#_B zop26r2`%9NF!wV5GLtVdHZ5z5T?=X1X|ev$3{ohchkwY&OftR~iX5Mzg2ggfFVjvA z$;73^AIluYmYSGXCZ{H`3KJ9Mp}-`z(!}n_L*gV>Wnxiz=$nr5IW3}bb`{w1fQ&jk z3b&Ubm#B6F#G}OB3O^I}Fnk4+816Dd*7!8grB|r4BD%ueipG^Ix#XDhCzR`DeSQt4$2y=343f5@5=k$ o?#Un5n&+XzG_;mG#41g62_fp7L=#O!Y|xky6#R%;{0J)` z^!jma@7=*A7@cXFbb~I{n$V$%j+RcY>;;Btlwf0;(ZryO!%Y8c>+@c3U>2G@zkA-_ z^SkHky?VX8*UNwPt#PHbjbY}P)>j9Y)CXfsXgj-g5p!v|tDPa21?X+H2p7lk$CnZ5~a+UxYP6Ub@qN!sLaJ zyN`cYb`S9H$?kssePv(--Rr(B-NpQ0I(x2cRBOiU(TG|@*<@q|u|z-SZ;Rj3#Y%hx zrQY5vb8Dhxa}>sTJxW|s?o8AM+&Y~biju2K++F?ks0s#1;3_E1-uJdQRD_v6=uf=X@IcC8{{dtiewSS19b@InSd zTUdd(O`O;_-YyadL^`Q2nKD2k6A#cOOTb+(C7|$vA{0$~nW!iagQq4OJMM<6SvuF} ze&@UA=eu?&B!)ubrEi7i)^?7&&b2-NU~BtSUI^y}9?SvO048Me0(!yW9@SZ6OsY+K z#^|F?w9RSlJ)@a%C(50559#6oT^!cMk<9%w=uMuVph^Vwj1>~B6e+D%(k!Y}YYV(A zc5*z|=IYuh zW9xB(kJ?A~%f92Jo_fEG2WejvZQGn6o&;e?HrG^`8BwV5o{atUSQI_M`{`#<)Vb4Y z3^&+$uE~=I%x09zmGbG0VvvY~qKRChplOTpSk-qaUxC;Q

b9hKJ==~c<{$VoD{{PZt7BFp_B5PZt4 z3Zgv{UmJKhj&`+du_gZ`()&;*5=R64o&>>uy{m&`OEUDfNr8*Q#r1&y+e7(h zF{EE!NGZMp@cK&e4a4iQ;v31#X=sRd{E(o36SQ|bh3&bm^ejPRA4IKIt~~2={+#@k&K7szUa|xKTyfRJ@6`sHeo+cjI3dOHukl;_?L-EH6v|! zoH};Wc^#37faW>Eu`{6HJPT+!zb0)Eqny+uDxBwijy)DOaLDY@WTj1=r!>RUt(gG> zuzC=_K8Sp0rLr#LqQ;iA+^1TV&*n{+ZaI&(pZQaJ@kWUiJ}OqaTi$_x;5V&OGz>5I z{rtaQ1e}H09LK@e1rI=1+{pl6m<2C;Z!+L0%sMZCf7P1|xC^r;$0C}JMgMVcGSFZJ zfVD7?3alCj)whq^`^8rvwONCmu$`aYh7v$F!Jp6G@r$v{%6W9pCaMbPC7Sve ZHHDi~2&@sz31;qHVD3zFs`=Kh{{a-=IeY*B