From 8d220fb4ddfbe56cde171a5023fc237a34d9c0bf Mon Sep 17 00:00:00 2001 From: Bobbi Webber-Manners Date: Sun, 22 Aug 2021 15:53:05 -0400 Subject: [PATCH] Added *RENAME. --- applecorn.po | Bin 819200 -> 819200 bytes auxmem.oscli.s | 202 +++++++++++++++++++++++++++++++------------------ mainmem.s | 30 +++++++- 3 files changed, 157 insertions(+), 75 deletions(-) diff --git a/applecorn.po b/applecorn.po index f6ee554df38d5620ee35c1e8ad2dd53e97d70a86..023c2480fb9c26d68348fe8d0ee7d8e1dd11e012 100644 GIT binary patch delta 4627 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 bm*$?A=8>1?nU^*rFKuRC+N_eaCzkv_o1&Fu delta 3749 zcmai13se(V8lF3s2_QxuVnqZUkVs|(1iPH2Rz!J7P!t90QoC*A9*@VbN|=( z|M$QDy_0a<9FCh~-0tNyX_jAb@h-0!p26vdgPRWr)!mkn2 zI~5+9R)jr$kq9TE|LCSiVJA-{31;E)<=Gi&Il0RS_ocWD0*RH=u-bUHcY4w+WpKr2 zg+u{=^i~jj4e94Yx*~uK0dG$@IRS_X$dCeZ{Vo4KQ1aR52TKoqA(S0HB31yhA0Utl zqD`|?K_~DxH(WP&=+Cv)=}*Zcak%Ia^bU5uKoPEr{}}t3Tg>sh>gV2f)YcLX)}KO`Y5crg|gx6L2+% z?&x>)xO%_8O)}hOq0C@&?H)*hvSj* z5(qSf>tPmDwzRfiFkfuYpKsTnJZ}2_GpHa7EuhpwT6UMh$U2&^^Pq zxk1jG-Zo52542)4!#fzkfZ4PO%`b%sPhieZ3~gkDH+Ay_R+o(5^M%DoR|@NWE-+{I zM(~XcT7C!`11xRr9apYiyMCk7+9lzP76a0?dorm+z?T}>T?UV5eYLFzme{vB;g+PB z{E_V7dY=vdfrbxj@m+H7ahcG_--)D&8iHUA1hmj%d<{R$U`E5w3>q$jhRIhQyjN}Q zhzmAxJ$j;w$m6Nny;r|N=MKZU1u?vh5m>%kwy2XB?Z<|{to`oRn#hHqo| z3$ji-gXbXB^Bs(!;IA+O!C#fTYm5N+>x@`b!{1=U?KONSBkri-t&CV)!*?-s309(i zjM~;3WhX2OfzYROVRqmiX*g7M1O`W4Vm@kRu&0Z%n-)2grY{+zzi43$*lNV(y?-DI z^&NpT7sjxjG>b7T#>65@Ah0mo6eX8-2_X$cxx8=Ny(~YJj69kPR_5=>sLi(-lrO@# zK+Ncq!@eg^V348DA|%2{8Qq`d$FW%T@&wlSB!0L0vc_3r0Grg~$MRh&F_7&U&+?K= z3}SnfEN@eZT`J22QBqlaMVkr@i7>_w!#t4PwG1&R!2lz|Fk>7m#<9E~E6!&5@vIon z@=DpwC0`V8fRTw0HOvGqHtgM(&Yt?0+@BE<3RE+8sVg8`~R zEOO%46kRk% zU5Lt#!tjC(>=(bpx@SKwJ)c_fE&0yBZ4a_^KUxzU$*&4;-+&sk{zs{an^;_H;%4^$ z6(c9~S~47Xpb3!7!l4 zGgjV8#tn;`xjybWv0rT_jS*(T;w|>6EhM)ZBV&{|SX~NcU{kDtZ3RM?xI(4`^Y9xM&d7>qR52zK1+JFaH zoH@|tO%HdY^5gJ0NHncG0apNA(Um9RbZ@*TsM`GX=(`Lm0*#!6)MO9G&;twi8=SE4 z(-Mn(8b+bNnc#FZ*90d-t+D6iWu`7qjUzf&YqsEX@1x(?%tHnfRE4kKI;8Df{rf5k zS!GddqMgezk64z-O8Y!G+=5YyZL#j?a8<;+#c^m&C5%RzN;n}ojy(bR+3X3D$J-oF zVNAe&a=*%rumO2h!6=*> zrV6IX$Az34jcdAj#5K>Xa6K!$slSG^y8tpuEVe zbot8x?DquFbep@|{QCiI9uq`zDmAU(6>R&GkgD4ubn1%fzjqobx}lTH7c$3kZgp~t zge8x0{va$J%W+)iB83%WIs2?!fUs&T=UXecNqBB7N0r*etrcDz%gXEGa)otcIlEC{ z8WpbktG*MbY3oqo&Ubd{iSnH|@^ScZR?yCoCe9^nbc<158l^^Wr%?&PN8Aj-SI=QH zq242IOrunx?jHl{$E!)8veS_wo%&1gZmaw$ykA0KH$`-;)#$f>H~L396;iOnIu2jq z#a8|k>zSP%VwaWw*czgJwC(9FUG&{fV+uXZda#Ihk_Wf*y(H~xHO>^2+l!j83`^)N zt1(>s*vh*|@e?cGN0vDCq%cBDBU)jEzejStbfR553YGH^s^Ae;@?%)BGS+=J)=%Uw zE}oFtKfBq(9v6h{LdF)nG#Q^DlPTYYhJXU|gX86~_ekUn^mF{aR zq#CJOs>7`Yx9_C8(oM-F1=%NccStuR8*W3FJ1(D;+HrHb`#~wtRxc$>MbaL3+bbQA zDkb##A}UQ?*rj_=rR&lS9qj$QuheCvaQa?vqQ?o+v7zlQEiFiBNhb9?@J2!=6%m@Ox7od2Ucw^14KM$}UU`4#=xy0+?C9%E zDu(>C4Fzea7h~si7tJ(Gsf{6O;|D%iI;A#XaBKY8p${zJy=KdaJ(gpuX|j9kdwYhG zv>Nta7WpOtTnYj6eOZ9nD%y6%-)59+VGz3fc05R#533IAoe~;Bx@q*^v%q zLt9&G+bKOEBFK#k;|L*Rl+IX{u?&+d-DGB7*0QXXvUu$%otv>RJ&p); z1UUxm1NNtH-0o`W%C&8_^6?T71HJup zuk&c{ty_F`v9=+sxTTRU-q$c0R2Ls_n1}nmh9^Nak~V_S;*<-jplW)|Ww~g{`0>V%4}N6cIQ;mTQdW(xWBv>5X^Lk6 diff --git a/auxmem.oscli.s b/auxmem.oscli.s index d8d3fcb..9db59bb 100644 --- a/auxmem.oscli.s +++ b/auxmem.oscli.s @@ -9,21 +9,21 @@ * CLIHND PHX PHY - STX ZP1+0 ; Pointer to CLI + STX ZP1+0 ; Pointer to CLI STY ZP1+1 :L1 LDA (ZP1) - CMP #'*' ; Trim any leading stars + CMP #'*' ; Trim any leading stars BEQ :NEXT - CMP #' ' ; Trim any leading spaces + CMP #' ' ; Trim any leading spaces BEQ :NEXT BRA :TRIMMED :NEXT INC ZP1 BNE :L1 INC ZP1+1 BRA :L1 -:TRIMMED CMP #'|' ; | is comment - BEQ :IEXIT - CMP #$0D ; Carriage return +:TRIMMED CMP #'|' ; | is comment + BEQ :IEXIT2 + CMP #$0D ; Carriage return BEQ :IEXIT LDA #<:QUIT STA ZP2 @@ -32,7 +32,7 @@ CLIHND PHX JSR STRCMP BCS :S1 JSR STARQUIT - BRA :IEXIT +:IEXIT2 BRA :IEXIT :S1 LDA #<:CAT STA ZP2 LDA #>:CAT @@ -72,7 +72,6 @@ CLIHND PHX JSR STRCMP BCS :S6 JSR STARSAVE -:IEXIT BRA :EXIT :S6 LDA #<:RUN STA ZP2 LDA #>:RUN @@ -81,6 +80,7 @@ CLIHND PHX BCS :S7 JSR STARRUN BRA :EXIT +:IEXIT BRA :EXIT :S7 LDA #<:DELETE STA ZP2 LDA #>:DELETE @@ -89,7 +89,15 @@ CLIHND PHX BCS :S8 JSR STARDEL BRA :EXIT -:S8 LDA #<:HELP +:S8 LDA #<:RENAME + STA ZP2 + LDA #>:RENAME + STA ZP2+1 + JSR STRCMP + BCS :S9 + JSR STARREN + BRA :EXIT +:S9 LDA #<:HELP STA ZP2 LDA #>:HELP STA ZP2+1 @@ -97,18 +105,18 @@ CLIHND PHX BCS :ASKROM JSR STARHELP BRA :EXIT -:ASKROM LDA $8006 ; Check for service entry - BPL :UNSUPP ; No service entry - LDA ZP1 ; String in (OSLPTR),Y +:ASKROM LDA $8006 ; Check for service entry + BPL :UNSUPP ; No service entry + LDA ZP1 ; String in (OSLPTR),Y STA OSLPTR LDA ZP1+1 STA OSLPTR+1 LDY #$00 - LDA #$04 ; Service 4 Unrecognized Cmd - LDX #$0F ; ROM slot - JSR $8003 ; Service entry point - TAX ; Check return - BEQ :EXIT ; Call claimed + LDA #$04 ; Service 4 Unrecognized Cmd + LDX #$0F ; ROM slot + JSR $8003 ; Service entry point + TAX ; Check return + BEQ :EXIT ; Call claimed :UNSUPP LDA #<:OSCLIM LDY #>:OSCLIM @@ -149,6 +157,8 @@ CLIHND PHX DB $00 :DELETE ASC 'DELETE' DB $00 +:RENAME ASC 'RENAME' + DB $00 :HELP ASC 'HELP' DB $00 :OSCLIM ASC 'OSCLI(' @@ -184,7 +194,7 @@ STRCMP LDY #$00 STARHELP LDA #<:MSG LDY #>:MSG JSR PRSTR - LDA #$09 ; Language name + LDA #$09 ; Language name LDY #$80 JSR PRSTR LDA #<:MSG2 @@ -202,22 +212,22 @@ STARQUIT >>> XF2MAIN,QUIT * Handle *CAT / *. command (list directory) STARCAT LDA #$05 - JMP JUMPFSCV ; Pass to filing system + JMP JUMPFSCV ; Pass to filing system * Consume spaces in command line. Treat " as space! * Return C set if no space found, C clear otherwise * Command line pointer in (ZP1),Y -EATSPC LDA (ZP1),Y ; Check first char is ... - CMP #' ' ; ... space +EATSPC LDA (ZP1),Y ; Check first char is ... + CMP #' ' ; ... space BEQ :START - CMP #'"' ; Or quote mark + CMP #'"' ; Or quote mark BEQ :START BRA :NOTFND :START INY -:L1 LDA (ZP1),Y ; Eat any additional ... - CMP #' ' ; ... spaces +:L1 LDA (ZP1),Y ; Eat any additional ... + CMP #' ' ; ... spaces BEQ :CONT - CMP #'"' ; Or quote marks + CMP #'"' ; Or quote marks BNE :DONE :CONT INY BRA :L1 @@ -234,7 +244,7 @@ EATWORD LDA (ZP1),Y BEQ :SPC CMP #'"' BEQ :SPC - CMP #$0D ; Carriage return + CMP #$0D ; Carriage return BEQ :EOL INY BRA EATWORD @@ -257,18 +267,18 @@ ADDZP1Y CLC * Decode ASCII hex digit in A * Returns with carry set if bad char, C clear otherwise HEXDIGIT CMP #'F'+1 - BCS :BADCHAR ; char > 'F' + BCS :BADCHAR ; char > 'F' CMP #'A' BCC :S1 - SEC ; 'A' <= char <= 'F' + SEC ; 'A' <= char <= 'F' SBC #'A'-10 CLC RTS :S1 CMP #'9'+1 - BCS :BADCHAR ; '9' < char < 'A' + BCS :BADCHAR ; '9' < char < 'A' CMP #'0' - BCC :BADCHAR ; char < '0' - SEC ; '0' <= char <= '9' + BCC :BADCHAR ; char < '0' + SEC ; '0' <= char <= '9' SBC #'0' CLC RTS @@ -278,24 +288,24 @@ HEXDIGIT CMP #'F'+1 * Decode hex constant on command line * On entry, ZP1 points to command line HEXCONST LDX #$00 -:L1 STZ :BUF,X ; Clear :BUF +:L1 STZ :BUF,X ; Clear :BUF INX CPX #$04 BNE :L1 LDX #$00 LDY #$00 -:L2 LDA (ZP1),Y ; Parse hex digits into - JSR HEXDIGIT ; :BUF, left aligned +:L2 LDA (ZP1),Y ; Parse hex digits into + JSR HEXDIGIT ; :BUF, left aligned BCS :NOTHEX STA :BUF,X INY INX CPX #$04 BNE :L2 - LDA (ZP1),Y ; Peek at next char -:NOTHEX CPX #$00 ; Was it the first digit? - BEQ :ERR ; If so, bad hex constant - CMP #' ' ; If whitespace, then okay + LDA (ZP1),Y ; Peek at next char +:NOTHEX CPX #$00 ; Was it the first digit? + BEQ :ERR ; If so, bad hex constant + CMP #' ' ; If whitespace, then okay BEQ :OK CMP #$0D BEQ :OK @@ -320,38 +330,38 @@ HEXCONST LDX #$00 :ZEROPAD DB $00,$00,$00 :BUF DB $00,$00,$00,$00 -ADDRBUF DW $0000 ; Used by HEXCONST +ADDRBUF DW $0000 ; Used by HEXCONST * Handle *LOAD command * On entry, ZP1 points to command line STARLOAD JSR CLRCB - JSR EATSPC ; Eat leading spaces + JSR EATSPC ; Eat leading spaces BCS :ERR - JSR ADDZP1Y ; Advance ZP1 - LDA ZP1 ; Pointer to filename + JSR ADDZP1Y ; Advance ZP1 + LDA ZP1 ; Pointer to filename STA OSFILECB LDA ZP1+1 STA OSFILECB+1 - JSR EATWORD ; Advance past filename - BCS :NOADDR ; No load address given - LDA #$0D ; Carriage return - STA (ZP1),Y ; Terminate filename + JSR EATWORD ; Advance past filename + BCS :NOADDR ; No load address given + LDA #$0D ; Carriage return + STA (ZP1),Y ; Terminate filename INY - JSR EATSPC ; Eat any whitespace - JSR ADDZP1Y ; Update ZP1 + JSR EATSPC ; Eat any whitespace + JSR ADDZP1Y ; Update ZP1 JSR HEXCONST - BCS :ERR ; Bad hex constant + BCS :ERR ; Bad hex constant LDA ADDRBUF - STA OSFILECB+2 ; Load address LSB + STA OSFILECB+2 ; Load address LSB LDA ADDRBUF+1 - STA OSFILECB+3 ; Load address MSB + STA OSFILECB+3 ; Load address MSB :OSFILE LDX #OSFILECB - LDA #$FF ; OSFILE load flag + LDA #$FF ; OSFILE load flag JSR OSFILE :END RTS -:NOADDR LDA #$FF ; Set OSFILECB+6 to non-zero - STA OSFILECB+6 ; Means use the file's addr +:NOADDR LDA #$FF ; Set OSFILECB+6 to non-zero + STA OSFILECB+6 ; Means use the file's addr BRA :OSFILE :ERR JSR BEEP RTS @@ -359,37 +369,37 @@ STARLOAD JSR CLRCB * Handle *SAVE command * On entry, ZP1 points to command line STARSAVE JSR CLRCB - JSR EATSPC ; Eat leading space + JSR EATSPC ; Eat leading space BCS :ERR - JSR ADDZP1Y ; Advance ZP1 - LDA ZP1 ; Pointer to filename + JSR ADDZP1Y ; Advance ZP1 + LDA ZP1 ; Pointer to filename STA OSFILECB LDA ZP1+1 STA OSFILECB+1 JSR EATWORD - BCS :ERR ; No start address given - LDA #$0D ; Carriage return - STA (ZP1),Y ; Terminate filename + BCS :ERR ; No start address given + LDA #$0D ; Carriage return + STA (ZP1),Y ; Terminate filename INY - JSR EATSPC ; Eat any whitespace - JSR ADDZP1Y ; Update ZP1 + JSR EATSPC ; Eat any whitespace + JSR ADDZP1Y ; Update ZP1 JSR HEXCONST - BCS :ERR ; Bad start address + BCS :ERR ; Bad start address LDA ADDRBUF STA OSFILECB+10 LDA ADDRBUF+1 STA OSFILECB+11 - JSR EATSPC ; Eat any whitespace - JSR ADDZP1Y ; Update ZP1 + JSR EATSPC ; Eat any whitespace + JSR ADDZP1Y ; Update ZP1 JSR HEXCONST - BCS :ERR ; Bad end address + BCS :ERR ; Bad end address LDA ADDRBUF STA OSFILECB+14 LDA ADDRBUF+1 STA OSFILECB+15 LDX #OSFILECB - LDA #$00 ; OSFILE save flag + LDA #$00 ; OSFILE save flag JSR OSFILE :END RTS :ERR JSR BEEP @@ -399,32 +409,76 @@ STARSAVE JSR CLRCB * On entry, ZP1 points to command line STARRUN LDA #$04 JUMPFSCV PHA - JSR EATSPC ; Eat leading space - JSR ADDZP1Y ; Advance ZP1 + JSR EATSPC ; Eat leading space + JSR ADDZP1Y ; Advance ZP1 LDX ZP1+0 LDY ZP1+1 PLA -CALLFSCV JMP (FSCV) ; Hand on to filing system +CALLFSCV JMP (FSCV) ; Hand on to filing system * Handle *DELETE command * On entry, ZP1 points to command line -STARDEL JSR EATSPC ; Eat leading space - JSR ADDZP1Y ; Advance ZP1 +STARDEL JSR EATSPC ; Eat leading space + JSR ADDZP1Y ; Advance ZP1 LDA ZP1 STA OSFILECB+0 LDA ZP1+1 STA OSFILECB+1 JSR EATWORD LDA #$0D - STA (ZP1),Y ; Terminate filename + STA (ZP1),Y ; Terminate filename LDX #OSFILECB - LDA #$06 ; OSFILE delete command + LDA #$06 ; OSFILE delete command JSR OSFILE RTS :ERR JSR BEEP RTS +* Handle *RENAME command +* On entry, ZP1 points to command line +STARREN JSR EATSPC ; Eat leading space + JSR ADDZP1Y ; Advance ZP1 + LDY #$00 +:L1 LDA (ZP1),Y ; Copy arg1 -> MOSFILE + CMP #' ' + BEQ :ENDARG1 + CMP #$0D ; Carriage return + BEQ :ERR + INY + >>> WRTMAIN + STA MOSFILE,Y + >>> WRTAUX + BRA :L1 +:ENDARG1 >>> WRTMAIN + STY MOSFILE ; Length of arg1 + >>> WRTAUX + JSR EATSPC ; Eat space between args + JSR ADDZP1Y ; Advance ZP1 + LDY #$00 +:L2 LDA (ZP1),Y ; Copy arg2 -> MOSFILE + CMP #' ' + BEQ :ENDARG2 + CMP #$0D + BEQ :ENDARG2 + INY + >>> WRTMAIN + STA MOSFILE2,Y + >>> WRTAUX + BRA :L2 +:ENDARG2 >>> WRTMAIN + STY MOSFILE2 ; Length of arg2 + >>> WRTAUX + >>> XF2MAIN,RENFILE +:ERR +* TODO: Handle errors + JSR BEEP + RTS + +STARRENRET + >>> ENTAUX + RTS + * Clear OSFILE control block to zeros CLRCB LDA #$00 LDX #$00 diff --git a/mainmem.s b/mainmem.s index 4a63ece..1316853 100644 --- a/mainmem.s +++ b/mainmem.s @@ -10,6 +10,7 @@ QUITCMD EQU $65 GTIMECMD EQU $82 CREATCMD EQU $C0 DESTCMD EQU $C1 +RENCMD EQU $C2 SFILECMD EQU $C3 GINFOCMD EQU $C4 ONLNCMD EQU $C5 @@ -153,6 +154,24 @@ DESTROY LDA #>> ENTMAIN + JSR RENAME + >>> XF2AUX,STARRENRET + +RENAME LDA #MOSFILE + STA RENPL+2 + LDA #MOSFILE2 + STA RENPL+4 + JSR MLI + DB RENCMD + DW RENPL + RTS + * ProDOS file handling for MOS OSFIND OPEN call * Options in A: $40 'r', $80 'w', $C0 'rw' OFILE >>> ENTMAIN @@ -717,6 +736,10 @@ CREATEPL HEX 07 ; Number of parameters DESTPL HEX 01 ; Number of parameters DW $0000 ; Pointer to filename +RENPL HEX 02 ; Number of parameters + DW $0000 ; Pointer to existing name + DW $0000 ; Pointer to new filename + READPL HEX 04 ; Number of parameters DB $00 ; Reference number DW BLKBUF ; Pointer to data buffer @@ -785,7 +808,12 @@ QUITPL HEX 04 ; Number of parameters DW $0000 * Buffer for Acorn MOS filename -MOSFILE DS 64 ; 64 bytes max prefix/file len +* Pascal string +MOSFILE DS 65 ; 64 bytes max prefix/file len + +* Buffer for second filename (for rename) +* Pascal string +MOSFILE2 DS 65 ; 64 bytes max prefix/file len * Acorn MOS format OSFILE param list FILEBLK