Kernel version 0.9 : Adding MAKEBOOT Script to generate A2OSX.BOOT media

many bugfixes in LS,CAT, FILEENUM....moved UsrBuf256 off $200 (now $C00)
getting corrupted by ProDOS/regular Clock Drivers (not KM.*)
CHTYP in progress mainly for : CHTYP /A2OSX.BOOT/A2OSX.SYSTEM SYS
(S-CMASM 2.0 is unable to generate .SYS files)
This commit is contained in:
Rémy GIBERT 2017-04-03 17:35:03 +02:00
parent 957066af35
commit e274c5593b
10 changed files with 196 additions and 225 deletions

View File

@ -187,7 +187,7 @@ CS.RUN.PRINT sty BytesRead Y,A = Bytes read
.12 ldy #bSuppress .12 ldy #bSuppress
lda (pData),y lda (pData),y
bpl .8 bpl .13
ldy #bPrintedBlankLine ldy #bPrintedBlankLine
lda (pData),y lda (pData),y
@ -197,7 +197,9 @@ CS.RUN.PRINT sty BytesRead Y,A = Bytes read
.11 lda #$ff .11 lda #$ff
sta (pData),y sta (pData),y
bra .8 bne .1
.13 clc
rts
.1 ldy #bPrintedBlankLine .1 ldy #bPrintedBlankLine
lda #0 lda #0
@ -212,7 +214,7 @@ CS.RUN.PRINT sty BytesRead Y,A = Bytes read
bcs .6 bcs .6
cmp #13 Allow printing of CR even if not bPrintAll cmp #13 Allow printing of CR even if not bPrintAll
beq .6 beq .4
ldy #bPrintAll ldy #bPrintAll
lda (pData),y lda (pData),y
@ -242,6 +244,11 @@ CS.RUN.PRINT sty BytesRead Y,A = Bytes read
bra .7 bra .7
.4 lda #13
>SYSCALL PutCA
bcs .9
lda #10
.6 >SYSCALL PutCA .6 >SYSCALL PutCA
bcs .9 bcs .9

View File

@ -8,12 +8,16 @@ AUTO 6
.OR $2000 .OR $2000
.TF /A2OSX.BUILD/BIN/CHTYP .TF /A2OSX.BUILD/BIN/CHTYP
*-------------------------------------- *--------------------------------------
.INB INC/MACROS.I .INB /A2OSX.BUILD/INC/MACROS.I
.INB INC/A2OSX.I .INB /A2OSX.BUILD/INC/A2OSX.I
*--------------------------------------
X.COPY.TO.DEST .EQ 0
X.DELETE.SOURCE .EQ 0
*-------------------------------------- *--------------------------------------
ZPPtr1 .EQ ZPBIN ZPPtr1 .EQ ZPBIN
ZPPtr2 .EQ ZPBIN+2 ZPPtr2 .EQ ZPBIN+2
ZPPtr3 .EQ ZPBIN+4 ZPFileName .EQ ZPBIN+4
ZPFileStat .EQ ZPBIN+6
*-------------------------------------- *--------------------------------------
* File Header (16 Bytes) * File Header (16 Bytes)
*-------------------------------------- *--------------------------------------
@ -36,214 +40,143 @@ CS.START cld
L.MSG.USAGE .DA MSG.USAGE L.MSG.USAGE .DA MSG.USAGE
L.MSG.OK .DA MSG.OK L.MSG.OK .DA MSG.OK
L.MSG.ERR .DA MSG.ERR L.MSG.ERR .DA MSG.ERR
L.FullPath .DA FullPath L.STAT .DA STAT
L.PRODOS.FT.TXT .DA PRODOS.FT.TXT-1 L.PRODOS.FT.TXT .DA PRODOS.FT.TXT-1
.DA 0 .DA 0
*-------------------------------------- *--------------------------------------
CS.INIT ldy #S.PS.hARGS CS.INIT >SYSCALL GetArgC
lda (pPs),y sta ArgCount
beq .98
>PUSHA
>PUSHBI $20 Push SEP=' '
>PUSHBI 0 Push 0 for getting CMD & ARGS
>SYSCALL PStrGetTkn
bcs .99
ldy #hArg1
sta (pData),y
txa
beq .98
ldy #hArg2
sta (pData),y
jsr GetHexFileTypeA .1 dec ArgCount
bcs .99
ldy #hArg1
lda (pData),y
>SYSCALL GetMemPtrA
>STYA ZPPtr1
lda (ZPPtr1)
beq .98 beq .98
lda ArgCount
>SYSCALL GetArgA
>STYA ZPPtr1
lda (ZPPtr1)
cmp #2
bne .4
ldy #1 ldy #1
lda (ZPPtr1),y lda (ZPPtr1),y
cmp #'/' cmp #'-'
bne .10 bne .4
ldy #S.PS.hARGS iny
lda (pPs),y lda (ZPPtr1),y
bra .3
.10 ldy #S.PS.hARGS
lda (pPs),y
>PUSHA
ldy #S.PS.hPREFIX
lda (pPs),y
>PUSHA
>SYSCALL PStrCat
sta hDIRPATH
.3 >SYSCALL GetMemPtrA
>SYSCALL ListDirInitYA
bcs .99
ldy #hS.LISTDIR
sta (pData),y
lda (pPs)
ora #S.PS.F.EVENT Now accept events
sta (pPs)
clc
rts
.98 >LDYA L.MSG.USAGE
>SYSCALL PStrOutYA
.99 lda #SYSMGR.ERRSYN
sec
rts
*--------------------------------------
CS.RUN ldy #bCANCEL
lda (pData),y
beq .10
sec ldx OptionList
rts
.10 ldy #bSTOP .2 cmp OptionList,x
lda (pData),y beq .3
beq .1 dex
clc
.99 rts
.1 ldy #hS.LISTDIR
lda (pData),y
>SYSCALL ListDirNextA
bcs .99
pha
>SYSCALL GetMemPtrA
>STYA ZPPtr1
lda (ZPPtr1)
pha
and #$0F
sta (ZPPtr1) Adjust Filename len
pla
and #$F0
bne .8 skip VOLHeader ($f),DIRHeader ($e),DIR ($d)
ldy #hS.LISTDIR
lda (pData),y
>SYSCALL GetMemPtrA
>STYA ZPPtr2
ldy #S.LISTDIR.hPATH
lda (ZPPtr2),y
>SYSCALL GetMemPtrA
>STYA ZPPtr2
lda (ZPPtr2)
tax
tay
.2 lda (ZPPtr2),y
sta FullPath,y
dey
bne .2 bne .2
ldy #0 bra .98
.3 inx
iny
lda (ZPPtr1),y
sta FullPath,x
tya
cmp (ZPPtr1)
bne .3
stx FullPath .3 ldy OptionVars-1,x
lda #$80
sta (pData),y
bra .1
>LDYA L.FullPath .4 >LDYA ZPPtr1
>SYSCALL PStrOutYA jsr InitSrcDirYA
bcs .9
>LDYA L.FullPath bra .1 scan for any other args
>SYSCALL MLIGetFileInfoYA
bcs .5
>STYA ZPPtr3
.98 >LDYA L.MSG.USAGE
>LDYA L.MSG.OK >SYSCALL PPrintFYA
>SYSCALL PStrOutYA .99 lda #SYSMGR.ERRSYN
bra .8 sec
.9 rts
.5 >PUSHA
>LDYA L.MSG.ERR
>SYSCALL PStrOutYA
.8 pla
>SYSCALL FreeMemA
clc
rts
*-------------------------------------- *--------------------------------------
CS.DOEVENT ldy #S.EVT.hDEV is Event from active IN device? CS.RUN >SYSCALL GetC
lda (pEvent),y bcs .10 no char
ldy #S.PS.hStdIn
cmp (pPs),y
bne .9
lda (pEvent)
and #S.EVT.F.KEY is it a KEY event?
beq .9
ldy #S.EVT.DATAHI is it an O or SAPPLE key ?
lda (pEvent),y
bne .9
ldy #S.EVT.DATALO
lda (pEvent),y
cmp #$03 Ctrl-C cmp #$03 Ctrl-C
bne .1 beq .92 Abort....
cmp #$13 Ctrl-S
bne .10
lda #$FF ldy #bPause
ldy #bCANCEL
sta (pData),y
bra .8
.1 cmp #$13 Ctrl-S
bne .8
ldy #bSTOP
lda (pData),y lda (pData),y
eor #$FF eor #$ff
sta (pData),y sta (pData),y
bne .80
.10 ldy #bPause
lda (pData),y
bne .80 Pause...
jsr GetEntry
bcs .9
ldy #hFilter
lda (pData),y
beq .4 No filter....
>SYSCALL GetMemPtrA
>PUSHYA
>PUSHW ZPFileName
>SYSCALL PStrMatch
bcs .8 no match, skip....
.4 ldy #S.STAT.P.DRIVE
lda (ZPFileStat),y ProDOS Device ?
bne .5
ldy #S.STAT.P.TYPE
lda (ZPFileStat),y
cmp #$0F Directory ?
bne .6
.8 clc jmp CS.RUN.DIR
.5 jmp CS.RUN.DEV
.6 jmp CS.RUN.FILE
.9 jsr LeaveSubDir
bcs .92
jsr BasePath..
.8 jsr GetNextEntry
.80 clc
rts rts
.9 sec .92 lda #0
sec
.99 rts
*--------------------------------------
CS.RUN.DEV
.8 jsr GetNextEntry
clc
.9 rts
*--------------------------------------
CS.RUN.DIR
.8 jsr GetNextEntry
clc
.9 rts
*--------------------------------------
CS.RUN.FILE
.8 jsr GetNextEntry
clc
.9 rts
*--------------------------------------
CS.DOEVENT sec
rts rts
*-------------------------------------- *--------------------------------------
CS.QUIT ldy #hS.LISTDIR CS.QUIT jsr LeaveSubDir
lda (pData),y bcc CS.QUIT
beq .1
>SYSCALL ListDirCloseA
.1 ldy #hDIRPATH ldy #hFilter
lda (pData),y
beq .2
>SYSCALL FreeMemA
.2 ldy #hArg2
lda (pData),y lda (pData),y
beq .3 beq .3
>SYSCALL FreeMemA >SYSCALL FreeMemA
.3 ldy #hArg1 .3 clc
lda (pData),y
beq .8
>SYSCALL FreeMemA
.8 clc
rts rts
*-------------------------------------- *--------------------------------------
GetHexFileTypeA >SYSCALL GetMemPtrA GetHexFileTypeA >SYSCALL GetMemPtrA
@ -254,7 +187,7 @@ GetHexFileTypeA >SYSCALL GetMemPtrA
ldy #1 ldy #1
lda (ZPPtr1),y lda (ZPPtr1),y
cmp #'$' cmp #'%'
bne .1 bne .1
iny iny
@ -317,12 +250,19 @@ GetHexFileTypeA >SYSCALL GetMemPtrA
.9 sec .9 sec
rts rts
*--------------------------------------
.INB /A2OSX.SRC/BIN/X.FILEENUM.S
*-------------------------------------- *--------------------------------------
CS.END CS.END
MSG.USAGE >PSTR "Usage : CHTYP [File *,? wildcards allowed] [File type : $xx or SYS,TXT....]\n" *--------------------------------------
OptionList >PSTR "R"
OptionVars .DA #bRecurse
*--------------------------------------
MSG.USAGE >PSTR "Usage : CHTYP <-R> [File *,? wildcards allowed] [File type : %HH, SYS,TXT....]\n"
MSG.OK >PSTR " [Ok]\n" MSG.OK >PSTR " [Ok]\n"
MSG.ERR >PSTR " [%h]\n" MSG.ERR >PSTR " [%h]\n"
FullPath .BS 64 STAT .BS S.STAT
ArgCount .BS 1
Tmp .BS 1 Tmp .BS 1
*-------------------------------------- *--------------------------------------
PRODOS.FT.COUNT .EQ 7 PRODOS.FT.COUNT .EQ 7
@ -338,12 +278,14 @@ PRODOS.FT.TXT .AS "TXT"
.DUMMY .DUMMY
.OR 0 .OR 0
DS.START DS.START
hDIRPATH .BS 1 Index .BS 1
hS.LISTDIR .BS 1 hDIRs .BS X.MAX.RECURSE
hArg1 .BS 1 hDIRENTs .BS X.MAX.RECURSE
hArg2 .BS 1 oDIRENTs .BS X.MAX.RECURSE*2
bSTOP .BS 1 hSrcBasePath .BS 1
bCANCEL .BS 1 hFilter .BS 1
bPause .BS 1
bRecurse .BS 1
HexFileType .BS 1 HexFileType .BS 1
DS.END DS.END
.ED .ED

View File

@ -126,11 +126,11 @@ CS.RUN >SYSCALL GetC
lda (pData),y lda (pData),y
eor #$ff eor #$ff
sta (pData),y sta (pData),y
bne .8 bne .80
.10 ldy #bPause .10 ldy #bPause
lda (pData),y lda (pData),y
bne .8 Pause... bne .80 Pause...
jsr GetEntry jsr GetEntry
bcs .9 bcs .9
@ -171,7 +171,7 @@ CS.RUN >SYSCALL GetC
jsr BasePath.. jsr BasePath..
.8 jsr GetNextEntry .8 jsr GetNextEntry
clc .80 clc
rts rts
.92 lda #0 .92 lda #0

View File

@ -447,12 +447,11 @@ CS.RUN.CopyStart
>PUSHBI SYS.FOpen.R >PUSHBI SYS.FOpen.R
ldy #hSrcBasePath ldy #hSrcBasePath
jsr CS.RUN.GetFilePath jsr CS.RUN.GetFilePath
>PUSHWI UsrBuf256 >PUSHWI UsrBuf256
>SYSCALL FOpen >SYSCALL FOpen
bcs .99 bcs .99
ldy #hSrcFile ldy #hSrcFile
sta (pData),y sta (pData),y
@ -467,7 +466,6 @@ CS.RUN.CopyStart
jsr CS.RUN.GetFilePath jsr CS.RUN.GetFilePath
>PUSHWI UsrBuf256 >PUSHWI UsrBuf256
>SYSCALL FOpen >SYSCALL FOpen
bcs .9 bcs .9
@ -523,7 +521,7 @@ CS.RUN.Copy stz .90+1
lda #'.' lda #'.'
>SYSCALL PutCA >SYSCALL PutCA
rts rts
.9 ldy #CopyRC .9 ldy #CopyRC
sta (pData),y sta (pData),y
@ -628,10 +626,12 @@ CS.QUIT jsr LeaveSubDir
.2 ldy #hFilter .2 ldy #hFilter
lda (pData),y lda (pData),y
beq .8 beq .8
>SYSCALL FreeMemA * >SYSCALL FreeMemA
.8 clc .8 clc
rts rts
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE /A2OSX.SRC/BIN/X.CPMVRM.S SAVE /A2OSX.SRC/BIN/X.CPMVRM.S
LOAD /A2OSX.SRC/BIN/CP.S
ASM

View File

@ -270,8 +270,8 @@ GetEntry ldy #index
lda (ZPFileName) Empty !!! lda (ZPFileName) Empty !!!
bne .8 bne .8
txa * txa
>SYSCALL FreeMemA * >SYSCALL FreeMemA
sec sec
rts rts

Binary file not shown.

Binary file not shown.

View File

@ -50,8 +50,6 @@ A2osX.SaveSX .EQ $101 Aux
* Aux $200 -> 3FD : /RAM Driver * Aux $200 -> 3FD : /RAM Driver
* Aux $3FE -> 3FF : IRQ Vector * Aux $3FE -> 3FF : IRQ Vector
*-------------------------------------- *--------------------------------------
UsrBuf256 .EQ $0200 Main
*--------------------------------------
*D.STACK.BASE .EQ $0300 $03EF... *D.STACK.BASE .EQ $0300 $03EF...
D.STACK.TOP .EQ $03F0 ...Down to $0300 D.STACK.TOP .EQ $03F0 ...Down to $0300
*-------------------------------------- *--------------------------------------
@ -60,9 +58,9 @@ D.STACK.TOP .EQ $03F0 ...Down to $0300
* Main/Aux $400 -> $7FF : Console Screen * Main/Aux $400 -> $7FF : Console Screen
* Main/Aux $800 -> $BFF : System Screen * Main/Aux $800 -> $BFF : System Screen
*-------------------------------------- *--------------------------------------
KrnBuf256 .EQ $0C00 Main UsrBuf256 .EQ $0C00 Main
*-------------------------------------- *--------------------------------------
* .EQ $0D00 KrnBuf256 .EQ $0D00 Main
*-------------------------------------- *--------------------------------------
K.MLI.PARAMS .EQ $0E00 Main, 18 bytes min for GetFileInfo K.MLI.PARAMS .EQ $0E00 Main, 18 bytes min for GetFileInfo
K.MLI.PATH .EQ K.MLI.PARAMS+18 K.MLI.PATH .EQ K.MLI.PARAMS+18

View File

@ -46,6 +46,7 @@ K.FOpen jsr PFT.CheckPathSTK
sta K.MLI.PARAMS+7 sta K.MLI.PARAMS+7
ldx #3 ldx #3
.1 lda DATELO,x .1 lda DATELO,x
sta K.MLI.PARAMS+8,x sta K.MLI.PARAMS+8,x
dex dex
@ -111,7 +112,7 @@ K.FOpen.10 >PUSHWI S.NODE.REG
lda hFILE lda hFILE
clc clc
rts CC rts CC
.98 pha save MLI error .98 pha save MLI error
lda hFILE lda hFILE
jsr K.FCloseA.1 jsr K.FCloseA.1
@ -134,18 +135,18 @@ K.FCloseA jsr PFT.CheckNodeA
sta K.FCloseA.2+1 sta K.FCloseA.2+1
jsr K.GetMemPtrA jsr K.GetMemPtrA
>STYA ZPPtr1 >STYA ZPPtr1
K.FCloseA.1 ldy #S.NODE.REG.REF K.FCloseA.1 ldy #S.NODE.REG.REF
lda (ZPPtr1),y lda (ZPPtr1),y
beq .1 beq .1
sta K.MLI.PARAMS+1 sta K.MLI.PARAMS+1
>MLICALL MLICLOSE >MLICALL MLICLOSE
.1 ldy #S.NODE.REG.IOBUF .1 ldy #S.NODE.REG.IOBUF
lda (ZPPtr1),y lda (ZPPtr1),y
beq K.FCloseA.2 beq K.FCloseA.2
jsr K.FreeMemA jsr K.FreeMemA
K.FCloseA.2 lda #$ff Self Modified K.FCloseA.2 lda #$ff Self Modified
jmp K.FreeMemA jmp K.FreeMemA
*/-------------------------------------- */--------------------------------------
@ -239,28 +240,28 @@ K.FSeek jsr PFT.CheckNodeSTK
>PULLB K.FSeek.FROM >PULLB K.FSeek.FROM
>PULLW K.FSeek.OFFSET >PULLW K.FSeek.OFFSET
>PULLW K.FSeek.OFFSET+2 >PULLW K.FSeek.OFFSET+2
lda K.FSeek.FROM lda K.FSeek.FROM
* cmp #SYS.FSeek.SET =0 * cmp #SYS.FSeek.SET =0
bne .1 bne .1
stz K.MLI.PARAMS+2 stz K.MLI.PARAMS+2
stz K.MLI.PARAMS+3 stz K.MLI.PARAMS+3
stz K.MLI.PARAMS+4 stz K.MLI.PARAMS+4
bra .8 bra .8
.1 cmp #SYS.FSeek.CUR .1 cmp #SYS.FSeek.CUR
bne .2 bne .2
>MLICALL MLIGETMARK >MLICALL MLIGETMARK
bcc .8 bcc .8
rts rts
.2 cmp #SYS.FSeek.END .2 cmp #SYS.FSeek.END
bne .98 bne .98
>MLICALL MLIGETEOF >MLICALL MLIGETEOF
bcs .9 bcs .9
.8 lda K.MLI.PARAMS+2 .8 lda K.MLI.PARAMS+2
adc K.FSeek.OFFSET adc K.FSeek.OFFSET
sta K.MLI.PARAMS+2 sta K.MLI.PARAMS+2
@ -271,7 +272,7 @@ K.FSeek jsr PFT.CheckNodeSTK
adc K.FSeek.OFFSET+2 adc K.FSeek.OFFSET+2
sta K.MLI.PARAMS+4 sta K.MLI.PARAMS+4
bcs .99 Offset out of range! bcs .99 Offset out of range!
>MLICALL MLISETMARK >MLICALL MLISETMARK
.9 rts .9 rts
@ -314,10 +315,10 @@ K.FEOFA jsr PFT.CheckNodeA
bcs .9 bcs .9
>STYA K.FEOFA.MARK >STYA K.FEOFA.MARK
stx K.FEOFA.MARK+2 stx K.FEOFA.MARK+2
>MLICALL MLIGETEOF >MLICALL MLIGETEOF
bcs .9 bcs .9
sec sec
lda K.MLI.PARAMS+2 lda K.MLI.PARAMS+2
sbc K.FEOFA.MARK sbc K.FEOFA.MARK
@ -371,7 +372,7 @@ FILE.SetIOBUF >PUSHWI 1024 get a ProDOS IOBUF
>PUSHBI S.MEM.F.ALIGN+S.MEM.F.NOMOVE >PUSHBI S.MEM.F.ALIGN+S.MEM.F.NOMOVE
jsr K.GetMem jsr K.GetMem
bcs .9 bcs .9
>STYA K.MLI.PARAMS+3 Save Ptr to IOBUF for MLIOPEN call >STYA K.MLI.PARAMS+3 Save Ptr to IOBUF for MLIOPEN call
txa txa
ldy #S.NODE.REG.IOBUF ldy #S.NODE.REG.IOBUF
@ -388,20 +389,20 @@ FILE.SetupPrt1A jsr K.GetMemPtrA
FILE.MLI2STAT lda K.MLI.PARAMS+S.FILEINFO.ACCESS FILE.MLI2STAT lda K.MLI.PARAMS+S.FILEINFO.ACCESS
cmp #S.FILEINFO.ACCESS.FULL cmp #S.FILEINFO.ACCESS.FULL
bne .1 bne .1
lda #S.STAT.MODE.XO+S.STAT.MODE.WO+S.STAT.MODE.RO lda #S.STAT.MODE.XO+S.STAT.MODE.WO+S.STAT.MODE.RO
bra .2 bra .2
.1 and #S.FILEINFO.ACCESS.R .1 and #S.FILEINFO.ACCESS.R
beq .2 beq .2
lda #S.STAT.MODE.XO+S.STAT.MODE.RO lda #S.STAT.MODE.XO+S.STAT.MODE.RO
.2 ldy #S.STAT.MODE .2 ldy #S.STAT.MODE
sta (ZPPtr2),y sta (ZPPtr2),y
ldx #2 ldx #2
ldy #S.STAT.P.TYPE+2 ldy #S.STAT.P.TYPE+2
.3 lda K.MLI.PARAMS+S.FILEINFO.TYPE,x .3 lda K.MLI.PARAMS+S.FILEINFO.TYPE,x
sta (ZPPtr2),y sta (ZPPtr2),y
dey dey

23
_MAKEBOOT.txt Normal file
View File

@ -0,0 +1,23 @@
PR#3
NEW
INC 1
AUTO 6
PREFIX /A2OSX.BUILD
echo \fBuilding A2OSX.BOOT Media...
format S6D1 A2OSX.BOOT
cp PRODOS /A2OSX.BOOT
cp -R SYS /A2OSX.BOOT
cp -R DRV /A2OSX.BOOT
cp -R LIB /A2OSX.BOOT
cp -R SBIN /A2OSX.BOOT
md /A2OSX.BOOT/BIN
cp BIN/* /A2OSX.BOOT/BIN
md /A2OSX.BOOT/ETC
md /A2OSX.BOOT/SRV
md /A2OSX.BOOT/USR
cp A2OSX.SYSTEM /A2OSX.BOOT
cp A2OSX.STARTUP /A2OSX.BOOT
MAN
TEXT MAKEBOOT