diff --git a/A2OSX.BOOT.po b/A2OSX.BOOT.po index e285501c..e78acb33 100644 Binary files a/A2OSX.BOOT.po and b/A2OSX.BOOT.po differ diff --git a/A2OSX.SRC.po b/A2OSX.SRC.po index bf5fbaa4..6c8ff891 100644 Binary files a/A2OSX.SRC.po and b/A2OSX.SRC.po differ diff --git a/BIN/EDIT.S.CTRL.txt b/BIN/EDIT.S.CTRL.txt index d3970fef..96ff1c17 100644 --- a/BIN/EDIT.S.CTRL.txt +++ b/BIN/EDIT.S.CTRL.txt @@ -550,6 +550,7 @@ Prompt.Save cmp #3 lda (pData),y beq .11 >SYSCALL SYS.FreeMemA + .11 >LDYA pData >SYSCALL SYS.NewPStrYA diff --git a/BIN/EDIT.S.txt b/BIN/EDIT.S.txt index a89c1292..fc3d5ac6 100644 --- a/BIN/EDIT.S.txt +++ b/BIN/EDIT.S.txt @@ -96,92 +96,39 @@ J.CTRL .DA Ctrl.Invalid .DA Ctrl.Invalid .DA 0 *-------------------------------------- -CS.INIT stz hFile - stz TmpFilename - stz TmpLen - stz TmpLen+1 - - lda #$ff +CS.INIT lda #$ff ldy #bSaved sta (pData),y >SYSCALL SYS.GetArgC cmp #1 - beq .1 + beq .1 No arg, new file.... lda #1 >SYSCALL SYS.GetArgA >SYSCALL SYS.GetFullPathYA - stx TmpFilename - - >SYSCALL SYS.LoadFileYA - bcs .1 - - stx hFile - >STYA TmpLen - -.1 >LDYA TmpLen - iny - bne .2 - inc - -.2 >PUSHYA - >PUSHBI S.MEM.F.INIT0 - >SYSCALL SYS.GetMem - bcs .98 - - >STYA ZPPTR2 txa - ldy #hBuffer - sta (pData),y - - lda hFile - beq .7 - - >SYSCALL SYS.GetMemPtrA - >STYA ZPPTR1 - - >LDYA TmpLen - >STYA TmpCount - - ldy #0 - -.5 jsr DecTmpCount - beq .6 - lda (ZPPTR1),y - sta (ZPPTR2),y - iny - bne .5 - inc ZPPTR1+1 - inc ZPPTR2+1 - bra .5 - -.6 lda hFile - >SYSCALL SYS.FreeMemA - -.7 ldy #FileLen - lda TmpLen - sta (pData),y - iny - lda TmpLen+1 - sta (pData),y - - lda TmpFilename ldy #hFileName sta (pData),y - lda (pPs) + jsr LoadFile + bcc .8 if CS, Failed to load file, keep name, but new file.... + +.1 >PUSHWI 1 buffer size = 0 (+ 1 for ending 0) + >PUSHBI S.MEM.F.INIT0 + >SYSCALL SYS.GetMem + bcs .9 + + txa + ldy #hBuffer FileLen already set to 0 + sta (pData),y + +.8 lda (pPs) ora #S.PS.F.EVENT Now accept events sta (pPs) clc - rts - -.98 lda hFile - beq .99 - >SYSCALL SYS.FreeMemA - sec -.99 rts +.9 rts *-------------------------------------- CS.RUN ldy #bCancel lda (pData),y @@ -391,25 +338,81 @@ CS.QUIT ldy #hBuffer >SYSCALL SYS.CoutA .9 rts *-------------------------------------- -SaveFile >PUSHWI 0 Aux type - >PUSHBI 4 type=TXT - >PUSHBI $C3 access=RW +LoadFile >PUSHWI 0 Aux type + >PUSHBI 4 S.FILEINFO.TYPE.TXT + >PUSHBI SYS.FOPEN.R ldy #hFileName lda (pData),y - >SYSCALL SYS.GetMemPtrA - >PUSHYA - >SYSCALL SYS.MLICreateFile - bcc .1 - cmp #$47 File Exists error? - bne .9 no, sec;rts -.1 ldy #hFileName - lda (pData),y >SYSCALL SYS.GetMemPtrA - >SYSCALL SYS.MLIOpenYA + + >PUSHYA + >SYSCALL SYS.LoadFile bcs .9 - sta hFile - stx TmpByte + + stx hMem + >STYA TmpLen + iny + bne .2 + inc +1 for ending zero + +.2 >PUSHYA + >PUSHBI S.MEM.F.INIT0 + >SYSCALL SYS.GetMem + bcs .98 + + >STYA ZPPTR2 + txa + ldy #hBuffer + sta (pData),y + + lda hMem + + >SYSCALL SYS.GetMemPtrA + >STYA ZPPTR1 + + >LDYA TmpLen + >STYA TmpCount + + ldy #0 + +.5 jsr DecTmpCount + beq .6 + lda (ZPPTR1),y + sta (ZPPTR2),y + iny + bne .5 + inc ZPPTR1+1 + inc ZPPTR2+1 + bra .5 + +.6 lda hMem + >SYSCALL SYS.FreeMemA + +.7 ldy #FileLen + lda TmpLen + sta (pData),y + iny + lda TmpLen+1 + sta (pData),y + +.98 pha + lda hMem + beq .9 + >SYSCALL SYS.FreeMemA + pla + sec +.9 rts +*-------------------------------------- +SaveFile >PUSHWI 0 Aux type + >PUSHBI 4 S.FILEINFO.TYPE.TXT + >PUSHBI SYS.FOPEN.X+SYS.FOPEN.W + ldy #hFileName + lda (pData),y + + >SYSCALL SYS.GetMemPtrA + + >PUSHYA ldy #FileLen+1 >PUSHB (pData),y @@ -421,21 +424,7 @@ SaveFile >PUSHWI 0 Aux type >SYSCALL SYS.GetMemPtrA >PUSHYA - >PUSHB hFile - >SYSCALL SYS.MLIWrite - bcs .99 - - jsr .99 - clc - rts - -.99 pha - lda hFile - >SYSCALL SYS.MLICloseA - lda TmpByte - >SYSCALL SYS.FreeMemA - pla -.9 sec + >SYSCALL SYS.SaveFile rts *-------------------------------------- DecTmpCount lda TmpCount @@ -492,7 +481,7 @@ MSG.HELP >PSTRING "All commands: (* = Not yet implemented)" .HS 00 EscChars >PSTRING "DBAC" EscAscii .HS 04080A0B15 -hFile .BS 1 +hMem .BS 1 TmpFilename .BS 1 TmpByte .BS 1 TmpLen .BS 2 diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index 415a67f6..cb09d41e 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -37,20 +37,6 @@ ZPDRV .EQ $80 ZPBIN .EQ $90 ZPLIB .EQ $A0 32 bytes for TCPIP *-------------------------------------- -R.VCPU16 .EQ $F0 -R.AX .EQ R.VCPU16 -R.AL .EQ R.VCPU16 -R.AH .EQ R.VCPU16+$1 -R.BX .EQ R.VCPU16+$2 -R.BL .EQ R.VCPU16+$2 -R.BH .EQ R.VCPU16+$3 -R.CX .EQ R.VCPU16+$4 -R.CL .EQ R.VCPU16+$4 -R.CH .EQ R.VCPU16+$5 -R.DX .EQ R.VCPU16+$6 -R.DL .EQ R.VCPU16+$6 -R.DH .EQ R.VCPU16+$7 -*-------------------------------------- * Memory Map *-------------------------------------- A2osX.SaveSM .EQ $100 Aux @@ -234,6 +220,8 @@ SYS.GetDevByNameYA .EQ $84 SYS.GetDevInfoA .EQ $86 SYS.GetKeyboardEvent .EQ $88 +SYS.MKNOD .EQ $8C +SYS.MKFIFO .EQ $8E *-------------------------------------- SYS.ExecProcessNewEnvYA .EQ $90 SYS.ExecProcessYA .EQ $92 @@ -247,11 +235,9 @@ SYS.Sleep .EQ $9C SYS.CheckPrefixYA .EQ $A0 SYS.FileSearch .EQ $A2 SYS.GetFullPathYA .EQ $A4 -SYS.LoadFileYA .EQ $A6 +SYS.LoadFile .EQ $A6 -SYS.ListDirInitYA .EQ $AA -SYS.ListDirNextA .EQ $AC -SYS.ListDirCloseA .EQ $AE +SYS.SaveFile .EQ $A8 *-------------------------------------- SYS.AddNetCfg .EQ $B0 SYS.SetNetCfg .EQ $B2 @@ -281,7 +267,7 @@ SYS.FOPEN.A .EQ $04 Append SYS.FOPEN.T .EQ $08 Open/Append in Text mode SYS.FOPEN.X .EQ $80 Create if not exists -SYS.FCLOSE .EQ $E2 +SYS.FCLOSEA .EQ $E2 SYS.FREAD .EQ $E4 SYS.FWRITE .EQ $E6 @@ -295,13 +281,13 @@ SYS.FEOF .EQ $EE SYS.REMOVE .EQ $F0 SYS.RENAME .EQ $F2 -SYS.OPENDIRYA .EQ $F4 -SYS.READDIRA .EQ $F6 +SYS.STAT .EQ $F4 +SYS.FSTAT .EQ $F6 -SYS.CLOSEDIRA .EQ $F8 -SYS.MKDIRYA .EQ $FA -SYS.MKNOD .EQ $FC -SYS.MKFIFO .EQ $FE +SYS.OPENDIRYA .EQ $F8 +SYS.READDIRA .EQ $FA +SYS.CLOSEDIRA .EQ $FC +SYS.MKDIRYA .EQ $FE *-------------------------------------- * ProDOS ERROR CODES : $00->$5F * Lib ERROR CODES : $80->$BF diff --git a/INC/PRODOS.I.txt b/INC/PRODOS.I.txt index 75eac668..d68193a0 100644 --- a/INC/PRODOS.I.txt +++ b/INC/PRODOS.I.txt @@ -47,11 +47,13 @@ S.FILEINFO.ACCESS.RN .EQ $40 S.FILEINFO.ACCESS.D .EQ $80 S.FILEINFO.ACCESS.FULL .EQ $C3 S.FILEINFO.TYPE .EQ $04 +S.FILEINFO.TYPE.TXT .EQ $04 S.FILEINFO.TYPE.DIR .EQ $0F S.FILEINFO.TYPE.SYS .EQ $FF S.FILEINFO.AUXTYPE .EQ $05 S.FILEINFO.TOTALBLOCKS .EQ $05 S.FILEINFO.STORETYPE .EQ $07 +S.FILEINFO.STORETYPE.STD .EQ $01 S.FILEINFO.STORETYPE.DIR .EQ $0D S.FILEINFO.BLOCKSUSED .EQ $08 S.FILEINFO.MODDATE .EQ $0A diff --git a/SYS/KERNEL.S.FILE.txt b/SYS/KERNEL.S.FILE.txt index 7f32d8b3..9ca6927e 100644 --- a/SYS/KERNEL.S.FILE.txt +++ b/SYS/KERNEL.S.FILE.txt @@ -13,8 +13,8 @@ AUTO 6 * In : * PULLW = PATH (PSTR) * PULLB = MODE -* SYS.FOPEN.R .EQ $01 //Ignored (No ProDOS equivalent) -* SYS.FOPEN.W .EQ $02 //Ignored (No ProDOS equivalent) +* SYS.FOPEN.R .EQ $01 if R and !exists -> ERROR +* SYS.FOPEN.W .EQ $02 if W and !exists -> CREATE * SYS.FOPEN.A .EQ $04 Append * SYS.FOPEN.T .EQ $08 Open/Append in Text mode * SYS.FOPEN.X .EQ $80 Create if not exists @@ -31,18 +31,19 @@ S.FOPEN jsr S.PFTCHECKPATHSTK >PULLW S.FOPEN.AUXTYPE >MLICALL MLIGETFILEINFO + >DEBUG bcc .10 Already Exists bit S.FOPEN.MODE Create if not exists ? bpl .9 No, return MLI error - lda #$C3 Yes, Create... + lda #S.FILEINFO.ACCESS.FULL Yes, Create... sta MLICALL.PARAMS+3 Access lda S.FOPEN.TYPE sta MLICALL.PARAMS+4 File type >LDYA S.FOPEN.AUXTYPE >STYA MLICALL.PARAMS+5 Aux type - lda #$01 Storage=Standard Files + lda #S.FILEINFO.STORETYPE.STD sta MLICALL.PARAMS+7 >MLICALL MLICREATE bcc .10 @@ -293,6 +294,16 @@ S.RENAME jsr S.PFTCHECKPATHYA >MLICALL MLIRENAME rts *-------------------------------------- +S.STAT jsr S.PFTCHECKPATHYA + + + rts +*-------------------------------------- +S.FSTAT jsr S.PFTCHECKFILEA + + + rts +*-------------------------------------- FIL.SetupPrt1A jsr S.GetMemPtrA >STYA ZPQuickPtr1 ldy #S.FILE.PRODOS.REF diff --git a/SYS/KERNEL.S.FIO.txt b/SYS/KERNEL.S.FIO.txt index 10f261da..9fa5d112 100644 --- a/SYS/KERNEL.S.FIO.txt +++ b/SYS/KERNEL.S.FIO.txt @@ -133,6 +133,42 @@ S.GetFullPathYA >STYA ZPQuickPtr3 Ptr1 & 2 used by StrCpy .9 sec rts *-------------------------------------- +* S.LoadFile +* in : +* PULLW = PATH (Handled by.... +* PULLB = MODE ... +* PULLB = TYPE ... +* PULLW = AUXTYPE ...FOPEN) +* out : +* Y,A = File Length +* X = hMem of Loaded File +*-------------------------------------- +S.LoadFile jsr S.FOPEN + bcs .9 + + sta S.LoadFile.hFile + + jsr S.FSTATA + >PUSHW S.LoadFile.Mem + + >PUSHW S.LoadFile.Len + + >PUSHB S.LoadFile.hFile + jsr S.FREAD + bcs .99 + + jsr .99 + clc + rts + +.99 pha + lda S.LoadFile.hFile + jsr S.FCLOSEA + pla + sec + +.9 rts +*-------------------------------------- * S.LoadFileYA * in : * Y,A = FilePath (PSTRING) @@ -192,14 +228,47 @@ S.LoadFileYA jsr S.MLIOpenYA .99 sec rts *-------------------------------------- -S.LoadFile.hRef .BS 1 -S.LoadFile.hBuf .BS 1 +* PULLW = SrcPtr +* PULLW = SrcLen +* PULLW = PATH (Handled by.... +* PULLB = MODE ... +* PULLB = TYPE ... +* PULLW = AUXTYPE ...FOPEN) +*-------------------------------------- +S.SaveFile >PULLW S.LoadFile.Mem + >PULLW S.LoadFile.Len + + jsr S.FOPEN + bcs .9 + + sta S.LoadFile.hFile + + >PUSHW S.LoadFile.Mem + + >PUSHW S.LoadFile.Len + + >PUSHB S.LoadFile.hFile + jsr S.FWRITE + bcs .99 + + jsr .99 + clc + rts + +.99 pha + lda S.LoadFile.hFile + jsr S.FCLOSEA + pla + sec + +.9 rts +*-------------------------------------- +S.LoadFile.Filename .BS 2 +S.LoadFile.hFile .BS 1 S.LoadFile.hMem .BS 1 S.LoadFile.Mem .BS 2 S.LoadFile.Len .BS 2 *-------------------------------------- -TmpFileName .BS 16 -*-------------------------------------- MAN SAVE SYS/KERNEL.S.FIO LOAD SYS/KERNEL.S diff --git a/SYS/KERNEL.S.JMP.txt b/SYS/KERNEL.S.JMP.txt index 43a00eac..caa18b33 100644 --- a/SYS/KERNEL.S.JMP.txt +++ b/SYS/KERNEL.S.JMP.txt @@ -101,7 +101,7 @@ KERNEL.SYSCALL .DA S.GetMem $00 .DA S.FileSearch .DA S.GetFullPathYA .DA S.LoadFileYA - .DA 0 + .DA S.SaveFile .DA 0 .DA 0 .DA 0 @@ -144,12 +144,12 @@ KERNEL.SYSCALL .DA S.GetMem $00 *-------------------------------------- .DA S.REMOVEYA $F0 .DA S.RENAME + .DA S.STAT + .DA S.FSTAT .DA S.OPENDIRYA .DA S.READDIRA .DA S.CLOSEDIRA .DA S.MKDIRYA - .DA 0 - .DA 0 *-------------------------------------- KERNEL.SYSCALL.FLAGS .DA 0 $00 diff --git a/SYS/KERNEL.S.txt b/SYS/KERNEL.S.txt index 3b98f332..1bbf340c 100644 --- a/SYS/KERNEL.S.txt +++ b/SYS/KERNEL.S.txt @@ -69,6 +69,8 @@ A2osX.D001 .EQ * .INB SYS/KERNEL.S.ARG .INB SYS/KERNEL.S.ENV .INB SYS/KERNEL.S.EVT + .INB SYS/KERNEL.S.TSK + .INB SYS/KERNEL.S.PS .EP A2osX.D001.END .EQ * *-------------------------------------- @@ -91,8 +93,6 @@ A2osX.E000 .EQ * .INB SYS/KERNEL.S.BIN .INB SYS/KERNEL.S.DRV .INB SYS/KERNEL.S.LIB - .INB SYS/KERNEL.S.TSK - .INB SYS/KERNEL.S.PS *-------------------------------------- .INB SYS/KERNEL.S.PFT .INB SYS/KERNEL.S.FILE