ProDOSFX:Fixes in Loaders, BASICFX:fix an issue while launching from A2osX

This commit is contained in:
burniouf 2022-04-27 21:24:41 +02:00
parent 225566cca4
commit daeea23549
28 changed files with 417 additions and 269 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -475,7 +475,7 @@ L9D1C lda #$05
L9D1F jmp BS.ERROUT L9D1F jmp BS.ERROUT
L9D22 lda #$FF L9D22 lda #$FF
sta BS.CAR.EICB sta BS.CAT.EICB
jsr BS.GetFTableIdx jsr BS.GetFTableIdx
@ -489,7 +489,7 @@ L9D22 lda #$FF
lda GP.SBUFADR lda GP.SBUFADR
sec sec
L9D45 inc BS.CAR.EICB L9D45 inc BS.CAT.EICB
sbc BS.CAT.EL sbc BS.CAT.EL
bcs L9D45 bcs L9D45
@ -914,7 +914,7 @@ BS.KW.FRE stz BS.TXTTAB
sec sec
sbc AS.ARRAYEND+1 sbc AS.ARRAYEND+1
cmp #$07 cmp #$07
bcc LA07D bcc .1
sbc #$03 sbc #$03
sta XBBD9 sta XBBD9
@ -927,11 +927,11 @@ BS.KW.FRE stz BS.TXTTAB
sbc AS.STRINGSTART+1 sbc AS.STRINGSTART+1
adc #$01 adc #$01
cmp XBBD9 cmp XBBD9
bcs LA07D bcs .1
sta XBBD9 sta XBBD9
LA07D lda AS.HIMEM+1 .1 lda AS.HIMEM+1
sta BS.MEMSIZE+1 sta BS.MEMSIZE+1
lda AS.HIMEM lda AS.HIMEM

View File

@ -5,13 +5,13 @@ BS.GetSysBuf lda #$04
LA1FB sta XBBB5 LA1FB sta XBBB5
jsr BS.KW.FRE jsr BS.KW.FRE
bcs LA24E bcs .99
lda AS.STRINGSTART+1 lda AS.STRINGSTART+1
sbc AS.ARRAYEND+1 sbc AS.ARRAYEND+1
cmp XBBB5 cmp XBBB5
lda #BS.E.NOBUFFER lda #BS.E.NOBUFFER
bcc LA24E bcc .98
lda AS.STRINGSTART+1 lda AS.STRINGSTART+1
sta ZP.PCH sta ZP.PCH
@ -48,8 +48,8 @@ LA1FB sta XBBB5
sta BS.BUFPAGE sta BS.BUFPAGE
rts rts
LA24E sec .98 sec
rts .99 rts
XBBB5 .BS 1 XBBB5 .BS 1
*-------------------------------------- *--------------------------------------
@ -943,7 +943,7 @@ LAB63 cmp #$FF
rts rts
LAB6F pha LAB6F pha
jsr LB562 jsr BS.CloseAll
jsr LB36B jsr LB36B
stz GP.ParamA stz GP.ParamA
@ -980,10 +980,10 @@ BS.KW.CHAIN jsr LA411
ldx XBBEA ldx XBBEA
dex dex
stx AS.HIMEM+1 stx AS.HIMEM+1
jsr LAC22 jsr BS.LoadBAS
ldx BS.AS.HIMEMSave ldx BS.AS.HIMEMSave
stx AS.HIMEM+1 stx AS.HIMEM+1
bcs LAC33 bcs BS.LoadBAS0.RTS
jsr AS.CLEAR1 jsr AS.CLEAR1
jsr LA480 jsr LA480
@ -997,17 +997,17 @@ BS.KW.RUN stz GP.IFILACTV
lsr lsr
bcc LABF4 bcc LABF4
jsr LAC1D jsr BS.LoadBAS0
bcs LAC33 bcs BS.LoadBAS0.RTS
jsr AS.CLEAR1 jsr AS.CLEAR1
LABE6 sta AS.ERRFLG LABE6 sta AS.ERRFLG
jsr LACB6 jsr BS.SetRunLineNum
jsr BS.SaveCSWKSW jsr BS.SaveCSWKSW
jsr LABF4 jsr LABF4
jmp AS.NEXTSTMT jmp AS.NEXTSTMT
*--------------------------------------
LABF4 jsr AS.NORMAL LABF4 jsr AS.NORMAL
lda #$A3 lda #$A3
sta X9F65 sta X9F65
@ -1018,20 +1018,56 @@ LABF4 jsr AS.NORMAL
jsr BS.SetState jsr BS.SetState
jmp BS.SYNERR jmp BS.SYNERR
*-------------------------------------- *--------------------------------------
BS.KW.LOAD jsr LAC1D BS.KW.LOAD jsr BS.LoadBAS0
bcs LAC33 bcs BS.LoadBAS0.RTS
BS.ENTRY jsr AS.CLEAR1 BS.ENTRY jsr AS.CLEAR1
jsr BS.SetState0 jsr BS.SetState0
stz ZP.CH stz ZP.CH
jmp AS.RESTART1 jmp AS.RESTART1
*--------------------------------------
BS.LoadBAS0 jsr BS.CloseAll
BS.LoadBAS0.RTS bcs BS.LoadBAS.RTS
LAC1D jsr LB562 BS.LoadBAS lda #$01
bcs LAC33 ldx #$FC
jsr BS.CheckFTypeXAccessA
bcs BS.LoadBAS.RTS
LAC22 jsr LAC34 jsr BS.MLIGetEOF
bcs LAC33 bcs BS.LoadBAS.RTS
lda AS.PGRMSTART
sta GP.MLIRW.DATAPTR
adc GP.SBUFADR
sta GP.ParamA
lda AS.PGRMSTART+1
sta GP.MLIRW.DATAPTR+1
adc GP.SBUFADR+1
sta GP.ParamA+1
bcs .1
cmp AS.HIMEM+1
.1 lda #BS.E.TOOLARGE
bcs BS.LoadBAS.RTS
ldx GP.SBUFADR
ldy GP.SBUFADR+1
jsr BS.ReadXYBytes
bcs BS.LoadBAS.RTS
jsr BS.MLIClose
bcs BS.LoadBAS.RTS
jsr LAC80
ldx GP.ParamA+1
ldy GP.ParamA
stx AS.PGRMEND+1
sty AS.PGRMEND
sty AS.ARRAYSTART sty AS.ARRAYSTART
sty AS.VARSTART sty AS.VARSTART
@ -1040,50 +1076,13 @@ LAC22 jsr LAC34
stx AS.VARSTART+1 stx AS.VARSTART+1
stx AS.ARRAYEND+1 stx AS.ARRAYEND+1
LAC33 rts BS.LoadBAS.RTS rts
*--------------------------------------
LAC34 lda #$01
ldx #$FC
jsr BS.CheckFTypeXAccessA
bcs LAC33
jsr BS.MLIGetEOF
bcs LAC33
lda AS.PGRMSTART
sta GP.MLIRW.DATAPTR
adc GP.SBUFADR
sta GP.ParamA
lda AS.PGRMSTART+1
sta GP.MLIRW.DATAPTR+1
adc GP.SBUFADR+1
sta GP.ParamA+1
bcs LAC5E
cmp AS.HIMEM+1
LAC5E lda #BS.E.TOOLARGE
bcs LAC33
ldx GP.SBUFADR
ldy GP.SBUFADR+1
jsr BS.ReadXYBytes
bcs LAC33
jsr BS.MLIClose
bcs LAC33
jsr LAC80
ldx GP.ParamA+1
ldy GP.ParamA
stx AS.PGRMEND+1
sty AS.PGRMEND
rts
LAC80 sec LAC80 sec
lda AS.PGRMSTART lda AS.PGRMSTART
sbc GP.FIAUXTYPE sbc GP.FIAUXTYPE
sta ZP.A1L sta ZP.A1L
lda AS.PGRMSTART+1 lda AS.PGRMSTART+1
sbc GP.FIAUXTYPE+1 sbc GP.FIAUXTYPE+1
sta ZP.A1H sta ZP.A1H
@ -1113,7 +1112,8 @@ LAC98 stx ZP.PCL
clc clc
bcc LAC98 bcc LAC98
LACB6 lda GP.FoundBITS+1 BS.SetRunLineNum
lda GP.FoundBITS+1
and #CMDBITS1.LINE and #CMDBITS1.LINE
clc clc
beq LACD9 beq LACD9

View File

@ -380,7 +380,7 @@ LB087 lda #BS.E.NODEV
sec sec
rts rts
*-------------------------------------- *--------------------------------------
BS.KW.BYE jsr LB562 BS.KW.BYE jsr BS.CloseAll
jsr LB36B jsr LB36B
jsr BS.RAMReset jsr BS.RAMReset
* lda #$65 * lda #$65
@ -573,16 +573,15 @@ BS.ReadDirEnt lda #$59
jsr BS.MLIRead jsr BS.MLIRead
bcs LB203 bcs LB203
ldx #$03 lda $27D
sta BS.CAT.EPB
LB1EA lda $27C,x
sta BS.CAT.EL,x
dex
bpl LB1EA
lda $27C
sta BS.CAT.EL
sta GP.MLIRW.COUNT sta GP.MLIRW.COUNT
lda #$01 lda #$01
sta BS.CAR.EICB sta BS.CAT.EICB
stz GP.SBUFADR+1 stz GP.SBUFADR+1
stz GP.SBUFADR+2 stz GP.SBUFADR+2
@ -630,13 +629,13 @@ LB23D lda #BS.E.LOCKED
LB241 lda GP.SBUFADR+1 LB241 lda GP.SBUFADR+1
and #$FE and #$FE
sta GP.SBUFADR+1 sta GP.SBUFADR+1
ldy BS.CAR.EICB ldy BS.CAT.EICB
lda #$00 lda #$00
cpy BS.CAT.EPB cpy BS.CAT.EPB
bcc LB25D bcc LB25D
tay tay
sty BS.CAR.EICB sty BS.CAT.EICB
inc GP.SBUFADR+1 inc GP.SBUFADR+1
LB25A inc GP.SBUFADR+1 LB25A inc GP.SBUFADR+1
@ -658,17 +657,17 @@ LB268 adc #$04
jsr BS.MLIRead jsr BS.MLIRead
bcs LB28D bcs LB28D
inc BS.CAR.EICB inc BS.CAT.EICB
lda DIRENTBUF lda DIRENTBUF
and #$F0 and #$F0
beq LB241 beq LB241
lda BS.CAT.FileCnt * lda BS.CAT.FileCnt
bne .1 * bne .1
dec BS.CAT.FileCnt+1 * dec BS.CAT.FileCnt+1
.1 dec BS.CAT.FileCnt *.1 dec BS.CAT.FileCnt
LB28D rts LB28D rts
*-------------------------------------- *--------------------------------------
@ -805,7 +804,7 @@ LB36B lda GP.EXECACTV
sta GP.EXECFILE sta GP.EXECFILE
ldx #$08 ldx #$08
lda BS.REFNUMs,x lda BS.REFNUMs,x
jsr LB515 jsr BS.CloseA
LB37B rts LB37B rts
*-------------------------------------- *--------------------------------------
@ -1053,12 +1052,12 @@ LB508 rts
*-------------------------------------- *--------------------------------------
BS.KW.CLOSE lda GP.FoundBITS BS.KW.CLOSE lda GP.FoundBITS
and #CMDBITS0.FN1 and #CMDBITS0.FN1
beq LB562 beq BS.CloseAll
jsr BS.CheckFilename jsr BS.CheckFilename
bcs LB4B1 bcs LB4B1
LB515 sta GP.MLICF.REFNUM BS.CloseA sta GP.MLICF.REFNUM
lda BS.BUFPAGEs-1,x lda BS.BUFPAGEs-1,x
sta BS.BUFPAGE sta BS.BUFPAGE
bit GP.EXECFILE bit GP.EXECFILE
@ -1094,13 +1093,13 @@ LB53F stz MLI.LEVEL
LB55E dec GP.OPENCNT LB55E dec GP.OPENCNT
rts rts
*-------------------------------------- *--------------------------------------
LB562 ldx GP.OPENCNT BS.CloseAll ldx GP.OPENCNT
beq LB573 beq LB573
stx GP.EXECFILE stx GP.EXECFILE
lda BS.REFNUMs,x lda BS.REFNUMs,x
jsr LB515 jsr BS.CloseA
bcc LB562 bcc BS.CloseAll
LB572 rts LB572 rts
@ -1111,7 +1110,7 @@ LB573 stz GP.MLICF.REFNUM
jmp BS.MLIClose jmp BS.MLIClose
*-------------------------------------- *--------------------------------------
BS.KW.POSITION jsr BS.CheckFilename BS.KW.POSITION jsr BS.CheckFilename
bcs LB5EF bcs LB5F0
sta GP.MLIRW.REFNUM sta GP.MLIRW.REFNUM
sta GP.NEWLREF sta GP.NEWLREF
@ -1135,17 +1134,17 @@ LB592 lda GP.FoundBITS+1
LB5AD lda #$EF LB5AD lda #$EF
sta GP.MLIRW.COUNT sta GP.MLIRW.COUNT
stz GP.MLIRW.COUNT+1 stz GP.MLIRW.COUNT+1
stz GP.MLIRW.DATAPTR
stz GP.MLIRW.DATAPTR
lda #$02 lda #$02
sta GP.MLIRW.DATAPTR+1 sta GP.MLIRW.DATAPTR+1
lda #$7F lda #$7F
sta GP.NLINEMASK sta GP.NLINEMASK
lda #MLI.C.NEWLINE lda #MLI.C.NEWLINE
jsr GP.GOSYSTEM jsr GP.GOSYSTEM
bcs LB5EF bcs LB5F0
LB5CB lda GP.ParamF LB5CB lda GP.ParamF
ora GP.ParamF+1 ora GP.ParamF+1
@ -1153,7 +1152,7 @@ LB5CB lda GP.ParamF
beq LB5F0 beq LB5F0
jsr BS.MLIRead jsr BS.MLIRead
bcs LB5EF bcs LB5F0
lda GP.ParamF lda GP.ParamF
sbc #$00 sbc #$00
@ -1164,7 +1163,7 @@ LB5CB lda GP.ParamF
bcs LB5CB bcs LB5CB
LB5ED lda #BS.E.INVOPT LB5ED lda #BS.E.INVOPT
LB5EF sec sec
LB5F0 rts LB5F0 rts
*-------------------------------------- *--------------------------------------
LB5F1 lda BS.RecordSize LB5F1 lda BS.RecordSize

View File

@ -189,8 +189,8 @@ BS.CATWIDTH .BS 1
BS.CAT.EL .BS 1 BS.CAT.EL .BS 1
BS.CAT.EPB .BS 1 BS.CAT.EPB .BS 1
BS.CAT.FileCnt .BS 2 *BS.CAT.FileCnt .BS 2
BS.CAR.EICB .BS 1 BS.CAT.EICB .BS 1
*-------------------------------------- *--------------------------------------
.LIST ON .LIST ON
BS.FREESPACE .EQ $BC17-* BS.FREESPACE .EQ $BC17-*

View File

@ -343,12 +343,12 @@ LDR.ShrinkRAM stz bRAMFlag
dex dex
bpl .2 bpl .2
.9 sec No $BF device found at S3D2 .8 clc No $BF device found
.99 rts dont use LC !!!!
.8 clc
rts rts
.9 sec
.99 rts
.3 jsr LDR.GFInfoRAM .3 jsr LDR.GFInfoRAM
bcs .99 bcs .99

View File

@ -1361,12 +1361,6 @@ BSX.ToUpper cmp #'a'
eor #$20 eor #$20
.9 rts .9 rts
*--------------------------------------
.LIST ON
BSX.SIZE .EQ *-BSX.JMPX
.LIST OFF
.BS $F000-*
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE usr/src/basic.fx/basic.s.x SAVE usr/src/basic.fx/basic.s.x

View File

@ -236,7 +236,8 @@ LDR.GP.DST .EQ *
LDR.AUX.SRC .PH $E000 LDR.AUX.SRC .PH $E000
LDR.AUX.DST .EQ * LDR.AUX.DST .EQ *
.INB usr/src/basic.fx/basic.s.x .INB usr/src/basic.fx/basic.s.x
.EP .INB usr/src/basic.fx/basic.s.xm
.EP
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE usr/src/basic.fx/basic.s SAVE usr/src/basic.fx/basic.s

View File

@ -52,6 +52,6 @@ savestate .HS 00 state of the state register
*-------------------------------------- *--------------------------------------
CCLK.LEN .EQ *-CCLK.START CCLK.LEN .EQ *-CCLK.START
MAN MAN
SAVE USR/SRC/PRODOS.FX/PRODOS.S.CCLK SAVE usr/src/prodos.fx/prodos.s.cclk
LOAD USR/SRC/PRODOS.FX/PRODOS.S LOAD usr/src/prodos.fx/prodos.s
ASM ASM

View File

@ -148,6 +148,12 @@ GP.MLICONT sec
*.3 lda p8areg restore acc *.3 lda p8areg restore acc
* rti exit * rti exit
*--------------------------------------
GP.TOOLBOX bit RRAMWRAMBNK1
bit RRAMWRAMBNK1
jsr XDOS.TOOLBOX
bit RROMBNK2
rts
*-------------------------------------- *--------------------------------------
.LIST ON .LIST ON
GP.FREE2 .EQ $BFEB-* GP.FREE2 .EQ $BFEB-*
@ -170,6 +176,6 @@ kversion .HS 23 represents release 2.0.3
*-------------------------------------- *--------------------------------------
GP.LEN .EQ *-GP.START GP.LEN .EQ *-GP.START
MAN MAN
SAVE USR/SRC/PRODOS.FX/PRODOS.S.GP SAVE usr/src/prodos.fx/prodos.s.gp
LOAD USR/SRC/PRODOS.FX/PRODOS.S LOAD usr/src/prodos.fx/prodos.s
ASM ASM

View File

@ -15,10 +15,47 @@ ILDR.START jsr MLI check for file 'atinit'
jsr ILDR.LoadFile jsr ILDR.LoadFile
bcc .1 bcc .1
jmp ILDR.MLIERR .9 jmp ILDR.MLIERR
.1 lda RROMBNK2 enable ROM .1 lda RROMBNK2 enable ROM
jsr sysentry execute ATinit jsr sysentry execute ATinit
*--------------------------------------
.DO READCAT=1
lda LDR.MLIOL.P+1 Boot unitnum
sta ILDR.MLIRB.P+1
stz dst
lda /dbuf
ldy #$02 read directory into buffer
ldx #0
.2 sta dst+1
sta ILDR.MLIRB.P+3 Data buf HI
sty ILDR.MLIRB.P+4 Blk Num LO
stx ILDR.MLIRB.P+5 Blk Num HI
jsr MLI
.DA #MLIREADBLOCK
.DA ILDR.MLIRB.P
bcs .9
ldy #$03 get next block# from link
lda (dst),y
tax
dey
ora (dst),y 00 00 -> Last Block
beq .8
lda (dst),y
tay
lda dst+1
inc
inc add $200 to buffer pointer
cmp /dbuf+$800 until it points past end of buffer.
bcc .2 if ok, read next block.
.8 .FIN
*-------------------------------------- *--------------------------------------
* BOOT block read 4 directory blocks at dbuf=$C00 -> $13FF * BOOT block read 4 directory blocks at dbuf=$C00 -> $13FF
*-------------------------------------- *--------------------------------------
@ -90,7 +127,6 @@ ILDR.ENUMPM .DO PM
jsr setvid jsr setvid
jsr setkbd jsr setkbd
jsr home jsr home
jmp sysentry go run interpreter jmp sysentry go run interpreter
.9 jsr MLI no .SYSTEM found, so quit. .9 jsr MLI no .SYSTEM found, so quit.
@ -327,6 +363,13 @@ ILDR.LCBits .HS 8040201008040201
ILDR.GFINFO .DA #10 PARAM CNT ILDR.GFINFO .DA #10 PARAM CNT
.DA ILDR.ATINIT .DA ILDR.ATINIT
.BS S.FI-3 .BS S.FI-3
*--------------------------------------
.DO READCAT=1
ILDR.MLIRB.P .DA #3
.DA #0 unit number
.DA 0 2 byte data buffer
.DA 0 2 byte block number
.FIN
*-------------------------------------- *--------------------------------------
ILDR.OPEN .DA #3 PARAM CNT ILDR.OPEN .DA #3 PARAM CNT
.BS 2 Filename .BS 2 Filename

View File

@ -90,6 +90,6 @@ irqv .DA * PATCHED with ROM vector by LDR
IRQ.LEN .EQ *-IRQ IRQ.LEN .EQ *-IRQ
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE USR/SRC/PRODOS.FX/PRODOS.S.IRQ SAVE usr/src/prodos.fx/prodos.s.irq
LOAD USR/SRC/PRODOS.FX/PRODOS.S LOAD usr/src/prodos.fx/prodos.s
ASM ASM

View File

@ -26,20 +26,16 @@ LDR.MSG.IIgs .AT "IIgs"
LDR.MSG.Unknown .AT "Unknown" LDR.MSG.Unknown .AT "Unknown"
LDR.MSG.CLK .AT "?Clk" LDR.MSG.CLK .AT "?Clk"
LDR.MSG.RAM .AT "/RAM" LDR.MSG.RAM .AT "/RAM"
LDR.MSG.ROOTERR .AT "ERR reading CATALOG" LDR.MSG.PFXERR .AT "ERR setting prefix"
*-------------------------------------- *--------------------------------------
p16start inc LDR.BootFlag set = 2 for GQuit rts p16start inc LDR.BootFlag set = 2 for GQuit rts
atalkset inc LDR.BootFlag set = 1 for appletalk rts atalkset inc LDR.BootFlag set = 1 for appletalk rts
prostart lda unitnum prostart lda unitnum
sta LDR.MLIOL.P+1 sta LDR.MLIOL.P+1
.DO READCAT=1
sta LDR.MLIRB.P+1
.FIN
cld cld
bit RROMBNK2 bit RROMBNK2
sta CLR80DISP sta CLR80DISP
sta CLR80STORE sta CLR80STORE
@ -157,11 +153,6 @@ m128k sta idapple Save MACHID in temp location
lda #$01 patch for the gs rom lda #$01 patch for the gs rom
trb statereg to force off intcxrom trb statereg to force off intcxrom
ldx #PAKME.ILDR-PAKME.Table
ldy #ILDR.START
lda /ILDR.START
jsr X.Unpak.XatYA
ldx #PAKME.GP-PAKME.Table ldx #PAKME.GP-PAKME.Table
ldy #MLI ldy #MLI
lda /MLI lda /MLI
@ -271,22 +262,47 @@ LDR.Common jsr LDR.BlkDevScan
jsr LDR.SetupRAM jsr LDR.SetupRAM
*-------------------------------------- *--------------------------------------
lda LDR.MLIOL.P+1 Boot unitnum
sta DEVNUM
ldx DEVCNT
.1 lda DEVLST,x
eor DEVNUM
and #$f0
beq .2
dex
bpl .1
brk
.2 lda DEVLST,x
pha
.3 lda DEVLST+1,x
sta DEVLST,x
cpx DEVCNT
inx
bcc .3
pla
ldx DEVCNT
sta DEVLST,x
lda LDR.BootFlag get setup entry point flag lda LDR.BootFlag get setup entry point flag
beq LDR.ReadRoot taken if normal boot. beq LDR.SetPrefix taken if normal boot.
bit RROMBNK2 bit RROMBNK2
rts return to caller at setup entry point. rts return to caller at setup entry point.
*-------------------------------------- *--------------------------------------
LDR.ReadRoot lda LDR.MLIOL.P+1 place boot devnum in globals LDR.SetPrefix jsr MLI
sta devnum last device used
jsr MLI
.DA #MLIONLINE .DA #MLIONLINE
.DA LDR.MLIOL.P .DA LDR.MLIOL.P
bcs .9 bcs .9
lda pbuf+1 get volume name length. lda pbuf+1 get volume name length.
and #$0F strip devnum and #$0F strip SDDDxxxx
beq .9 beq .9
inc add 1 for leading '/' inc add 1 for leading '/'
@ -299,42 +315,16 @@ LDR.ReadRoot lda LDR.MLIOL.P+1 place boot devnum in globals
.DA LDR.MLISETP.P .DA LDR.MLISETP.P
bcs .9 bcs .9
.DO READCAT=1 jsr CROUT
stz dst
lda /dbuf
ldy #$02 read directory into buffer
ldx #0
.1 sta dst+1 ldx #PAKME.ILDR-PAKME.Table
sta LDR.MLIRB.P+3 Data buf HI ldy #ILDR.START
sty LDR.MLIRB.P+4 Blk Num LO lda /ILDR.START
stx LDR.MLIRB.P+5 Blk Num HI jsr X.Unpak.XatYA
jsr MLI
.DA #MLIREADBLOCK
.DA LDR.MLIRB.P
bcs .9
ldy #$03 get next block# from link
lda (dst),y
tax
dey
ora (dst),y 00 00 -> Last Block
beq .8
lda (dst),y
tay
lda dst+1
inc
inc add $200 to buffer pointer
cmp /dbuf+$800 until it points past end of buffer.
bcc .1 if ok, read next block.
.FIN
.8 jsr CROUT
jmp ILDR.START jmp ILDR.START
.9 ldx #LDR.MSG.ROOTERR .9 ldx #LDR.MSG.PFXERR
jsr LDR.PrintX jsr LDR.PrintX
bra * bra *
*-------------------------------------- *--------------------------------------
@ -576,16 +566,13 @@ LDR.ClkDevXCLK bit RROMBNK2
lda $DFFF lda $DFFF
cmp #$CD cmp #$CD
bne .9
lda $D8F0
bit $F851
cmp #$AD
beq .1 beq .1
.9 rts .9 bit $F851
rts
.1 lda #'X' .1 bit $F851
lda #'X'
ldx PAKME.XCLK ldx PAKME.XCLK
ldy PAKME.XCLK+1 ldy PAKME.XCLK+1
*-------------------------------------- *--------------------------------------
@ -624,14 +611,38 @@ LDR.SetupRAM lda DEVCNT
lda /$FF00 lda /$FF00
jsr X.Unpak.XatYA jsr X.Unpak.XatYA
lda RAMX.PAK
bne .1
sta SETWRITEAUX sta SETWRITEAUX
ldx #PAKME.RAMX-PAKME.Table ldx #PAKME.RAMX-PAKME.Table
ldy #$0200 ldy #$0200
lda /$0200 lda /$0200
jsr X.Unpak.XatYA jsr X.Unpak.XatYA
bra .7
.1 ldx #PAKME.RAMX-PAKME.Table
ldy #$0800
lda /$0800
jsr X.Unpak.XatYA
sta SETWRITEAUX
sta CLRWRITEAUX ldx #$FE
.2 lda $900,x
sta $300,x
dex
txa
bne .2
.3 lda $800,x
sta $200,x
inx
bne .3
.7 sta CLRWRITEAUX
lda #RAMDRV put driver address into lda #RAMDRV put driver address into
sta DEVPTRS3D2 sta DEVPTRS3D2
@ -1304,13 +1315,6 @@ LDR.MLIOL.P .DA #2
LDR.MLISETP.P .DA #1 LDR.MLISETP.P .DA #1
.DA pbuf .DA pbuf
.DO READCAT=1
LDR.MLIRB.P .DA #3
.DA #0 unit number
.DA 0 2 byte data buffer
.DA 0 2 byte block number
.FIN
LDR.SPStatus.P .DA #$03 # of parms LDR.SPStatus.P .DA #$03 # of parms
LDR.SPStatus.U .DA #$00 unit number (code for smartport stat) LDR.SPStatus.U .DA #$00 unit number (code for smartport stat)
.DA LDR.SPStatusBuf .DA LDR.SPStatusBuf

View File

@ -3,24 +3,32 @@ NEW
RAM.START RAM.START
RAMDRV cld no decimal. RAMDRV cld no decimal.
ldx #$0B save 13 bytes of parms ldx #$0B save 13 bytes of parms
.1 lda A1L,x .1 lda A1L,x
sta a1l1,x sta a1l1,x
dex dex
bpl .1 bpl .1
ldx #$01 ldx #$01
.2 lda passit,x save xfer vectors .2 lda passit,x save xfer vectors
sta sp1,x sta sp1,x
dex dex
bpl .2 bpl .2
lda A4L get command. lda A4L get command.
beq stat 0 = status beq stat 0 = status
cmp #$04 check for command too high. cmp #$04 check for command too high.
bcs ioerr if it is, i/o error bcs ioerr if it is, i/o error
eor #$03 eor #$03
sta A4L 0=format, 2=read, 1=write sta A4L 0=format, 2=read, 1=write
beq format beq format
ldy bloknml+1 check for large block number. ldy bloknml+1 check for large block number.
bne ioerr too big. bne ioerr too big.
lda bloknml block # lda bloknml block #
bmi ioerr largest block number is $7F bmi ioerr largest block number is $7F
@ -31,25 +39,33 @@ RAMDRV cld no decimal.
format lda #RAMXDRV card entry point format lda #RAMXDRV card entry point
sta passit sta passit
lda /RAMXDRV lda /RAMXDRV
gocard sta passit+1 also used by 'mainwrt' gocard sta passit+1 also used by 'mainwrt'
sec direction ram -> card sec direction ram -> card
clv start with original zero page clv start with original zero page
jmp xfer transfer control jmp xfer transfer control
ioerr lda #$27 ioerr lda #$27
bne H2D41 bne H2D41
lda #$2B write protect error. lda #$2B write protect error.
H2D41 sec flags error H2D41 sec flags error
bcs H2D47 bcs H2D47
noerr .EQ * noerr .EQ *
stat lda #$00 stat lda #$00
clc clc
H2D47 php save status H2D47 php save status
pha and error code. pha and error code.
ldx #$0B restore 13 byes of parms ldx #$0B restore 13 byes of parms
H2D4B lda a1l1,x H2D4B lda a1l1,x
sta A1L,x sta A1L,x
dex dex
bpl H2D4B bpl H2D4B
lda sp1 restore xfer parms. lda sp1 restore xfer parms.
bit $6060 addr $FF58 must = rts ($60) as in ROM bit $6060 addr $FF58 must = rts ($60) as in ROM
sta passit sta passit
@ -58,23 +74,30 @@ H2D4B lda a1l1,x
pla restore error code pla restore error code
plp and status. plp and status.
rts rts
mainwrt sta SETWRITEAUX write to alt 48K mainwrt sta SETWRITEAUX write to alt 48K
ldy #$00 ldy #$00
H2D6A lda (A1L),y pointers set in card by 'setptr' H2D6A lda (A1L),y pointers set in card by 'setptr'
sta (A4L),y sta (A4L),y
lda (A2L),y lda (A2L),y
sta (A3L),y sta (A3L),y
dey dey
bne H2D6A bne H2D6A
sta CLRWRITEAUX write to main 48K. sta CLRWRITEAUX write to main 48K.
lda #donewrt done writing card lda #donewrt done writing card
sta passit sta passit
lda /donewrt lda /donewrt
jmp gocard jmp gocard
sp1 .HS 0000
a1l1 .BS 13 13 bytes of storage
*-------------------------------------- *--------------------------------------
RAM.LEN .EQ *-RAM.START RAM.LEN .EQ *-RAM.START
.DUMMY
sp1 .HS 0000
a1l1 .BS 13 13 bytes of storage
.ED
*--------------------------------------
MAN MAN
SAVE usr/src/prodos.fx/prodos.s.ram SAVE usr/src/prodos.fx/prodos.s.ram
LOAD usr/src/prodos.fx/prodos.s LOAD usr/src/prodos.fx/prodos.s

View File

@ -338,7 +338,7 @@ R01 .HS 00 page requested
BITMAP .HS 00FFFFFF blocks 0-7 used BITMAP .HS 00FFFFFF blocks 0-7 used
.HS FFFFFFFF .HS FFFFFFFF
.HS FFFFFFFF .HS FFFFFFFF
.HS FFFFFFFE .HS FFFFFFFE block 127 used (IRQV)
VDIR .HS F3 storage type = F, name length = 3 VDIR .HS F3 storage type = F, name length = 3
.AS "RAM" .AS "RAM"
access .DA #$C3 destroy, rename, read enabled access .DA #$C3 destroy, rename, read enabled
@ -346,7 +346,7 @@ access .DA #$C3 destroy, rename, read enabled
.HS 0D .HS 0D
.HS 0000 .HS 0000
.HS 0300 block 3 .HS 0300 block 3
.HS 7F 128 blocks .DA #128 128 blocks
exitcard lda RRAMWRAMBNK1 restore language card exitcard lda RRAMWRAMBNK1 restore language card
lda RRAMWRAMBNK1 lda RRAMWRAMBNK1

View File

@ -1,58 +1,61 @@
NEW NEW
AUTO 3,1 AUTO 3,1
*--------------------------------------
* object code = sel_1 * object code = sel_1
* Bird's Better Bye at org = dispadr * Bird's Better Bye at org = dispadr
*-------------------------------------- *--------------------------------------
SEL1.START SEL1.START cld
birdbye cld bit RROMBNK2 read ROM
lda RROMBNK2 read ROM
stz softev stz softev
lda #$10 set reset vector to 'dispadr' lda #$10 set reset vector to 'dispadr'
sta softev+1 sta softev+1
jsr setpwrc create power-up byte jsr setpwrc create power-up byte
lda #$A0 lda #$A0
jsr $C300 initialize 80 column text card jsr $C300 initialize 80 column text card
ldx #$17
* set up memory bitmap in global page * set up memory bitmap in global page
L5D16 stz MEMTABL,x P8 memory bitmap ldx #0
dex jsr GP.TOOLBOX reset MEMTABL
bpl L5D16
inc MEMTABL+$17 protect global page
lda #$CF protect zero page, stack and page 1
sta MEMTABL
lda #$02 lda #$02
sta smparms init set mark parms pcount. sta smparms init set mark parms pcount.
*--------------------------------------
* drive selector * drive selector
*--------------------------------------
ldx DEVCNT get device count and ldx DEVCNT get device count and
stx lstpntr store in zero page.
lda devnum get last slot/drive .1 lda DEVLST,x
bne volname and #$F0
cmp DEVNUM
beq SEL1.VolName
dex
bra .1
SEL1.NextVol ldx lstpntr get device list pointer.
bne .1
ds2 ldx lstpntr get device list pointer.
lda DEVLST,x get unit number from list.
cpx #$01 make sure it's real.
bcs L5D3F if so, change list pointer.
ldx DEVCNT get device count. ldx DEVCNT get device count.
inx inx
L5D3F dex decrement list pointer and restore.
stx lstpntr .1 dex
lda DEVLST,x get unit number from list.
* get and store volume name SEL1.VolName stx lstpntr
sta ol_unit store unit number for online.
volname sta ol_unit store unit number for online.
jsr MLI jsr MLI
.DA #MLIONLINE .DA #MLIONLINE
.DA ol_parms .DA ol_parms
bcs ds2 error check. bcs SEL1.NextVol error check.
stz dlevel haven't read root directory yet. stz dlevel haven't read root directory yet.
lda pbuf+1 load description byte. lda pbuf+1 load description byte.
and #$0F mask for name length. and #$0F mask for name length.
beq ds2 if 0, then try next unit. beq SEL1.NextVol if 0, then try next unit.
adc #$02 add 2 to length. adc #$02 add 2 to length.
tax name length in x. tax name length in x.
@ -64,13 +67,14 @@ vnam1 stx pbuf save the name length
* open and read directory * open and read directory
jsr MLI jsr MLI
.DA #MLIOPEN .DA #MLIOPEN
.DA op_parms .DA op_parms
bcc L5D7F good open. bcc L5D7F good open.
lda dlevel trying to open root directory ? lda dlevel trying to open root directory ?
beq ds2 yes, just move to next volume. beq SEL1.NextVol yes, just move to next volume.
jsr bell1 no, generate bell tone jsr bell1 no, generate bell tone
jsr popdir and stay at same level. jsr popdir and stay at same level.
stx pbuf stx pbuf
@ -82,9 +86,9 @@ L5D7F inc dlevel
sta rd_refn store in read sta rd_refn store in read
sta sm_refn and setmark parm lists. sta sm_refn and setmark parm lists.
lda #$2B set read parm list for lda #$2B set read parm list for
sta dhdr_len directory header length. sta rd_reqlen directory header length.
stz dhdr_len+1 stz rd_reqlen+1
jsr doread read directory jsr SEL1.ReadEntry read directory
bcs L5DB3 bcs L5DB3
ldx #$03 ldx #$03
@ -94,7 +98,7 @@ L5D9A lda sysentry+$23,x copy directory info
dex dex
bpl L5D9A bpl L5D9A
sta dhdr_len put entry length in read parm list. sta rd_reqlen put entry length in read parm list.
lda #$01 set block file counter to 1. lda #$01 set block file counter to 1.
sta blkfl sta blkfl
stz fpos_mid zero out msb's of file position stz fpos_mid zero out msb's of file position
@ -102,6 +106,7 @@ L5D9A lda sysentry+$23,x copy directory info
lda filecnt any files in directory ? lda filecnt any files in directory ?
ora filecnt+1 ora filecnt+1
bne L5DB5 if so, continue bne L5DB5 if so, continue
L5DB3 bra L5E29 else go close directory file. L5DB3 bra L5E29 else go close directory file.
L5DB5 bit filecnt+1 check msb of file count. L5DB5 bit filecnt+1 check msb of file count.
@ -114,6 +119,7 @@ L5DB9 lda fpos_mid get mid byte of setmark file position.
lda #$00 lda #$00
cpy entblk have we read all entries in this block ? cpy entblk have we read all entries in this block ?
bcc L5DCE if not, continue. bcc L5DCE if not, continue.
tay if so, zero y-reg and tay if so, zero y-reg and
sty blkfl reset block counter / flag sty blkfl reset block counter / flag
inc fpos_mid inc fpos_mid
@ -122,6 +128,7 @@ L5DB9 lda fpos_mid get mid byte of setmark file position.
* if transfer to second sector, handle it. * if transfer to second sector, handle it.
L5DCC inc fpos_mid L5DCC inc fpos_mid
L5DCE dey decrement file block counter L5DCE dey decrement file block counter
clc clc
bmi L5DD8 bmi L5DD8
@ -133,33 +140,38 @@ L5DCE dey decrement file block counter
L5DD8 adc #$04 add 4 and put in L5DD8 adc #$04 add 4 and put in
sta fpos_lo low byte of setmark. sta fpos_lo low byte of setmark.
jsr MLI call mli jsr MLI call mli
.DA #MLISETMARK .DA #MLISETMARK
.DA #smparms parameters address = $0060 .DA #smparms parameters address = $0060
.HS 00 .HS 00
bcs L5DB3 error bcs L5DB3 error
jsr doread jsr SEL1.ReadEntry
bcs L5DB3 error. bcs L5DB3 error.
inc blkfl increase count of files read. inc blkfl increase count of files read.
lda sysentry file type/length. lda sysentry file type/length.
and #$F0 mask off high nibble. and #$F0 mask off high nibble.
beq L5DB9 deleted file, try next one. beq L5DB9 deleted file, try next one.
dec filecnt decrement low file count. dec filecnt decrement low file count.
bne L5DF8 bne L5DF8
dec filecnt+1 and high if necessary. dec filecnt+1 and high if necessary.
L5DF8 ror sysentry+$1E check access bit. L5DF8 ror sysentry+$1E check access bit.
bcc L5DB5 if no read, try next file. bcc L5DB5 if no read, try next file.
lda sysentry+$10 get file type. lda sysentry+$10 get file type.
cmp #$0F directory file ? cmp #$0F directory file ?
beq L5E08 then continue. beq L5E08 then continue.
cmp #$FF system file ? cmp #$FF system file ?
bne L5DB5 no, read next file. bne L5DB5 no, read next file.
L5E08 ldx filecount get valid files read. L5E08 ldx filecount get valid files read.
cpx #$80 if greater than size of filename buffer cpx #$80 if greater than size of filename buffer
bcs L5E29 then close directory bcs L5E29 then close directory
sta filetyps,x else store filetype in zero page sta filetyps,x else store filetype in zero page
jsr namecalc and go set up storage area. jsr namecalc and go set up storage area.
ldy #$0F ldy #$0F
@ -175,7 +187,7 @@ L5E15 lda sysentry,y get byte of filename
inc filecount increment valid file counter inc filecount increment valid file counter
bne L5DB5 get next file (branch always) bne L5DB5 get next file (branch always)
L5E26 jmp ds2 error. try next unit. L5E26 jmp SEL1.NextVol error. try next unit.
L5E29 jsr MLI close directory file L5E29 jsr MLI close directory file
.DA #MLICLOSE .DA #MLICLOSE
@ -195,6 +207,7 @@ L5E29 jsr MLI close directory file
L5E48 lda pbuf+1,x L5E48 lda pbuf+1,x
beq showfiles beq showfiles
jsr output jsr output
inx inx
bne L5E48 bne L5E48
@ -203,9 +216,12 @@ showfiles stz valcnt
stz topname init top filename index. stz topname init top filename index.
lda filecount # of valid files. lda filecount # of valid files.
beq keyloop if no files. beq keyloop if no files.
cmp #$15 more than what will fit on screen ? cmp #$15 more than what will fit on screen ?
bcc L5E61 no. bcc L5E61 no.
lda #$14 limit to 20 files on the screen. lda #$14 limit to 20 files on the screen.
L5E61 sta gp_cnt L5E61 sta gp_cnt
lda #$02 set window dimensions lda #$02 set window dimensions
sta wndtop sta wndtop
@ -213,50 +229,66 @@ L5E61 sta gp_cnt
lda #$16 lda #$16
sta wndwdth sta wndwdth
sta wndbot sta wndbot
L5E6F jsr nameprnt output filename to screen L5E6F jsr nameprnt output filename to screen
inc valcnt inc valcnt
dec gp_cnt file counter. dec gp_cnt file counter.
bne L5E6F continue printing names. bne L5E6F continue printing names.
stz valcnt stz valcnt
beq L5EAA if last file, it needs to be inverse. beq L5EAA if last file, it needs to be inverse.
uparrow jsr nameprnt print old name in normal. uparrow jsr nameprnt print old name in normal.
ldx valcnt get old name number. ldx valcnt get old name number.
beq L5EAA if already at the top name beq L5EAA if already at the top name
dec valcnt else fix index. dec valcnt else fix index.
lda cv current cursor line. lda cv current cursor line.
cmp #$02 at top line of window ? cmp #$02 at top line of window ?
bne L5EAA no, move up normally. bne L5EAA no, move up normally.
dec topname fix offset index dec topname fix offset index
lda #$16 else sroll windows down a line. lda #$16 else sroll windows down a line.
bne L5EA7 branch always. bne L5EA7 branch always.
dnarrow jsr nameprnt print old name in normal. dnarrow jsr nameprnt print old name in normal.
ldx valcnt get old name number. ldx valcnt get old name number.
inx add one. inx add one.
cpx filecount cpx filecount
bcs L5EAA if already at last filename bcs L5EAA if already at last filename
stx valcnt else update index. stx valcnt else update index.
lda cv current cursor line. lda cv current cursor line.
cmp #$15 at bottom line of window ? cmp #$15 at bottom line of window ?
bne L5EAA no, move cursor normally. bne L5EAA no, move cursor normally.
inc topname update offset index inc topname update offset index
lda #$17 else scroll up a line. lda #$17 else scroll up a line.
L5EA7 jsr cout L5EA7 jsr cout
L5EAA jsr setinv set inverse text mode. L5EAA jsr setinv set inverse text mode.
jsr nameprnt output last filename. jsr nameprnt output last filename.
keyloop lda kbd get keyboard input. keyloop lda kbd get keyboard input.
bpl keyloop loop until key pressed. bpl keyloop loop until key pressed.
sta KBDSTROBE clear strobe. sta KBDSTROBE clear strobe.
jsr setnorm set normal text mode. jsr setnorm set normal text mode.
ldx filecount are any files displayed ? ldx filecount are any files displayed ?
beq L5ECB no, don't accept arrow keys or return. beq L5ECB no, don't accept arrow keys or return.
cmp #$8D return ? cmp #$8D return ?
beq L5EF4 then run selected file. beq L5EF4 then run selected file.
cmp #$8A down ? cmp #$8A down ?
beq dnarrow move down a name. beq dnarrow move down a name.
cmp #$8B up ? cmp #$8B up ?
beq uparrow move up a name. beq uparrow move up a name.
L5ECB cmp #$89 tab ? L5ECB cmp #$89 tab ?
beq L5EED new volume. beq L5EED new volume.
cmp #$9B esc ? cmp #$9B esc ?
bne keyloop no, try again else pop up a directory. bne keyloop no, try again else pop up a directory.
@ -279,7 +311,7 @@ L5EDD dex
ldx pbuf ldx pbuf
L5EEC rts L5EEC rts
L5EED jmp ds2 set up new unit number. L5EED jmp SEL1.NextVol set up new unit number.
L5EF0 inx L5EF0 inx
@ -287,7 +319,7 @@ L5EF1 jmp vnam1 get new directory info.
* run selected file * run selected file
L5EF4 jsr MLI L5EF4 jsr MLI
.DA #MLISETPREFIX .DA #MLISETPREFIX
.DA pf_parms .DA pf_parms
bcs L5EED error. bcs L5EED error.
@ -321,10 +353,14 @@ L5F04 iny start at y = 1.
lda op_refn move reference number lda op_refn move reference number
sta rd_refn for read. sta rd_refn for read.
lda #$FF read the entire file.
sta dhdr_len * lda #$FF read the entire file.
sta dhdr_len+1 * sta rd_reqlen
jsr doread read selected file. * sta rd_reqlen+1
dec rd_reqlen+1 was $002B, now $FF2B
jsr SEL1.Read read selected file.
php save possible error. php save possible error.
jsr MLI close file. ignore any error from close jsr MLI close file. ignore any error from close
.DA #MLICLOSE .DA #MLICLOSE
@ -337,11 +373,14 @@ L5F04 iny start at y = 1.
* y = index to message teminated by 0. * y = index to message teminated by 0.
sethorz sta ch sethorz sta ch
msgout lda dsp2msg,y msgout lda dsp2msg,y
beq L5F57 beq L5F57
jsr cout jsr cout
iny iny
bne msgout bne msgout
L5F57 rts L5F57 rts
* name pointer calculator for name storage area * name pointer calculator for name storage area
@ -361,6 +400,7 @@ namecalc stz fnstore+1 init high byte of 16-bit shift
clc clc
adc fnstore+1 adc fnstore+1
sta fnstore+1 sta fnstore+1
ldy #$00 ldy #$00
lda (fnstore),y file name length lda (fnstore),y file name length
sta namelen sta namelen
@ -379,6 +419,7 @@ nameprnt lda #$02
jsr TABV set vertical position. jsr TABV set vertical position.
lda filetyps,x get filetype (x is unchanged by tabv). lda filetyps,x get filetype (x is unchanged by tabv).
bmi L5F99 branch if system file. bmi L5F99 branch if system file.
stz ch80col adjust cursor position. stz ch80col adjust cursor position.
lda invflg ave current inverse setting lda invflg ave current inverse setting
pha pha
@ -397,31 +438,39 @@ L5F9F iny y = 1 (first time).
bcc L5F9F no. bcc L5F9F no.
outsp lda #$A0 outsp lda #$A0
bne L5FB1 branch always. .HS 2C BIT ABS
homecurs lda #$99 homecurs lda #$99
output ora #$80 set high bit.
L5FB1 jmp cout output to screen.
doread jsr MLI mli read call output ora #$80 set high bit.
jmp cout output to screen.
SEL1.ReadEntry jsr SEL1.Read
bcs SEL1.Read.RTS
ldy #sysentry
lda /sysentry
ldx #2
jmp GP.TOOLBOX
SEL1.Read jsr MLI mli read call
.DA #MLIREAD .DA #MLIREAD
.DA rd_parms .DA rd_parms
rts SEL1.Read.RTS rts
*--------------------------------------
* data area * data area
*--------------------------------------
dsp2msg .AS -"RETURN: Select | TAB: Chg Vol | ESC: Back"
.HS 00
dsp2msg .AS -"RETURN: Select | TAB: Chg Vol | " fldrmsg .HS 0F inverse control code
.AS -"ESC: Back"
.DA #$00
fldrmsg .DA #$0F inverse control code
.HS 1B enable mousetext .HS 1B enable mousetext
.AS -"XY" folder characters .AS -"XY" folder characters
.HS 18 disable mousetext .HS 18 disable mousetext
.HS 0E normal control code .HS 0E normal control code
.HS 00 .HS 00
*--------------------------------------
op_parms .DA #$03 3 parms op_parms .DA #3 3 parms
.DA pbuf pathname .DA pbuf pathname
.DA op_buf file buffer .DA op_buf file buffer
op_refn .HS 00 reference number op_refn .HS 00 reference number
@ -439,17 +488,20 @@ pf_parms .DA #01 one parm
rd_parms .DA #04 4 parms rd_parms .DA #04 4 parms
rd_refn .HS 01 reference number rd_refn .HS 01 reference number
.DA sysentry data buffer .DA sysentry data buffer
*--------------------------------------
.LIST ON
SEL1.LEN .EQ *-SEL1.START
.LIST OFF
*--------------------------------------
* these last 2 parms (4 bytes) may extend past $300 length limit since * these last 2 parms (4 bytes) may extend past $300 length limit since
* the request count is set prior to using the parm block and the transfer * the request count is set prior to using the parm block and the transfer
* count isn't used at all (except by prodos) * count isn't used at all (except by prodos)
*--------------------------------------
.DUMMY .DUMMY
.BS 2 requested length rd_reqlen .BS 2 requested length
.BS 2 actual length .BS 2 actual length
dhdr_len .BS 1 directory header length (actually uses 2 bytes)
.ED .ED
*-------------------------------------- *--------------------------------------
SEL1.LEN .EQ *-SEL1.START
MAN MAN
SAVE usr/src/prodos.fx/prodos.s.sel1 SAVE usr/src/prodos.fx/prodos.s.sel1
LOAD usr/src/prodos.fx/prodos.s LOAD usr/src/prodos.fx/prodos.s

View File

@ -437,6 +437,6 @@ button2 .DA #$0B
*-------------------------------------- *--------------------------------------
SEL2.LEN .EQ *-SEL2.START SEL2.LEN .EQ *-SEL2.START
MAN MAN
SAVE USR/SRC/PRODOS.FX/PRODOS.S.SEL2 SAVE usr/src/prodos.fx/prodos.s.sel2
LOAD USR/SRC/PRODOS.FX/PRODOS.S LOAD usr/src/prodos.fx/prodos.s
ASM ASM

View File

@ -113,6 +113,6 @@ yradj .DA #$12 Monday
TCLK.LEN .EQ *-TCLK.START TCLK.LEN .EQ *-TCLK.START
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE USR/SRC/PRODOS.FX/PRODOS.S.TCLK SAVE usr/src/prodos.fx/prodos.s.tclk
LOAD USR/SRC/PRODOS.FX/PRODOS.S LOAD usr/src/prodos.fx/prodos.s
ASM ASM

View File

@ -580,7 +580,7 @@ XDOS.Online jsr mvdbufr figure out how big buffer has to be.
ldy #$01 ldy #$01
lda (A3L),y if 0 then cbytes=$100 else $010 for one lda (A3L),y if 0 then cbytes=$100 else $010 for one
and #$F0 device. mask out unused nibble. and #$F0 device. mask out unused nibble.
sta devnum last device used. sta DEVNUM last device used.
beq .1 branch if all devices. beq .1 branch if all devices.
lda #$10 cbytes = $010 lda #$10 cbytes = $010
@ -600,14 +600,14 @@ XDOS.Online jsr mvdbufr figure out how big buffer has to be.
bne .3 bne .3
sta namptr used as pointer to user buffer. sta namptr used as pointer to user buffer.
lda devnum get device # again. lda DEVNUM get device # again.
bne online1 branch if only 1 device to process. bne online1 branch if only 1 device to process.
jsr mvdevnums get list of currently recognized dev's. jsr mvdevnums get list of currently recognized dev's.
.4 phx save index to last item on list .4 phx save index to last item on list
lda loklst,x lda loklst,x
sta devnum save desired device to look at. sta DEVNUM save desired device to look at.
jsr online1 log this volume and return it's name. jsr online1 log this volume and return it's name.
lda namptr inc pointer for next device lda namptr inc pointer for next device
clc clc
@ -693,7 +693,7 @@ online1.OK lda VCBs,x get volume name count
bpl .1 bpl .1
svdevn ldy namptr index to 1st byte of this entry. svdevn ldy namptr index to 1st byte of this entry.
lda devnum upper nibble = device# and lda DEVNUM upper nibble = device# and
ora (usrbuf),y lower nibble = name length. ora (usrbuf),y lower nibble = name length.
sta (usrbuf),y sta (usrbuf),y
@ -714,7 +714,7 @@ tstfnf cmp #MLI.E.FNOTFND 'file not found' is ok
cmp #$0D cmp #$0D
bne ctyperr report type error if not directory. bne ctyperr report type error if not directory.
tstdspc lda devnum make sure destination device tstdspc lda DEVNUM make sure destination device
jsr twrprot1 is not write protected. jsr twrprot1 is not write protected.
bcs H351D bcs H351D
@ -1010,7 +1010,7 @@ drevise1 lda bkbitflg (bit 5 = backup needed)
tsb d_attr mark entry as backupable tsb d_attr mark entry as backupable
lda d_dev get device # of directory lda d_dev get device # of directory
sta devnum to be revised sta DEVNUM to be revised
lda d_entblk and address of directory block. lda d_entblk and address of directory block.
ldx d_entblk+1 ldx d_entblk+1

View File

@ -314,7 +314,7 @@ XDOS.FindVol jsr XDOS.FindVolInVCBOrDev
dex dex
bpl .1 bpl .1
lda devnum setup device # for this directory lda DEVNUM setup device # for this directory
sta d_dev sta d_dev
jsr movhed0 setup other header info from directory jsr movhed0 setup other header info from directory
@ -345,7 +345,7 @@ nxtpnam1 ldy namptr inc pathname pointer to next name
tay then prefixed directory has been moved tay then prefixed directory has been moved
bne L395F to another device. branch if not. bne L395F to another device. branch if not.
lda devnum revise devnum for prefixed directory lda DEVNUM revise DEVNUM for prefixed directory
sta p_dev sta p_dev
L395F lda pathbuf,y test for end of name. L395F lda pathbuf,y test for end of name.
@ -361,7 +361,7 @@ XDOS.FindVolInVCBOrDev
tay set ptr to volume name tay set ptr to volume name
L396F sty vnptr and save. L396F sty vnptr and save.
sta devnum zero out dev# until vcb located. sta DEVNUM zero out dev# until vcb located.
lda #VCB0 lda #VCB0
@ -392,7 +392,7 @@ L398A cmp pathbuf,y is it the same as requested vol name?
plx restore pointer to matching vcb. plx restore pointer to matching vcb.
stx vcbptr save it for future reference. stx vcbptr save it for future reference.
lda VCBs+VCB.DEV,x get it's device # lda VCBs+VCB.DEV,x get it's device #
sta devnum and save it. sta DEVNUM and save it.
lda #$02 assume prefix is not used and lda #$02 assume prefix is not used and
ldx #$00 that root directory is to be used. ldx #$00 that root directory is to be used.
@ -436,7 +436,7 @@ L39CC ldx vcbptr check if current (matched) vcb is active
L39D4 lda vnptr make path ptr same as volume ptr L39D4 lda vnptr make path ptr same as volume ptr
sta namptr sta namptr
jsr mvdevnums copy all device #'s to be examined. jsr mvdevnums copy all device #'s to be examined.
lda devnum log current device 1st before searching lda DEVNUM log current device 1st before searching
bne L39F1 others. bne L39F1 others.
L39E2 ldx DEVCNT scan look list for devices we need L39E2 ldx DEVCNT scan look list for devices we need
@ -461,7 +461,7 @@ L39F4 cmp loklst,x of prospective devices.
bmi L39ED if dev was removed from devlst (/RAM). bmi L39ED if dev was removed from devlst (/RAM).
L39FE sta devnum preserve device to be checked next. L39FE sta DEVNUM preserve device to be checked next.
stz loklst,x mark this one as tested. stz loklst,x mark this one as tested.
jsr XDOS.FindVCBForDevNum find vcb that claims this dev (if any). jsr XDOS.FindVCBForDevNum find vcb that claims this dev (if any).
@ -501,12 +501,12 @@ L3A2D lda DEVLST,x active device list.
rts rts
*-------------------------------------- *--------------------------------------
XDOS.FindVCBForDevNum XDOS.FindVCBForDevNum
lda #VCB0 look for vcb for devnum lda #VCB0 look for vcb for DEVNUM
ldy #$FF ldy #$FF
.1 tax new index to next vcb .1 tax new index to next vcb
lda VCBs+VCB.DEV,x check all devnums lda VCBs+VCB.DEV,x check all devnums
cmp devnum is this the vcb? cmp DEVNUM is this the vcb?
beq .7 beq .7
lda VCBs,x is this a free vcb? lda VCBs,x is this a free vcb?
@ -623,7 +623,7 @@ L3ACE lda gbuf+4,y
pla get length again pla get length again
sta VCBs,x and save. sta VCBs,x and save.
lda devnum last device used. lda DEVNUM last device used.
sta VCBs+VCB.DEV,x save device # and sta VCBs+VCB.DEV,x save device # and
ldy #0 ldy #0

View File

@ -219,10 +219,10 @@ wrtbmap lda #$02 write command.
sta A4L sta A4L
lda devnum save current dev # lda DEVNUM save current dev #
pha pha
lda bmadev get bitmap's dev # lda bmadev get bitmap's dev #
sta devnum sta DEVNUM
lda bmadadr and disk address lda bmadadr and disk address
sta bloknml sta bloknml
lda bmadadr+1 lda bmadadr+1
@ -233,7 +233,7 @@ wrtbmap lda #$02 write command.
jsr XDOS.RWBlock jsr XDOS.RWBlock
plx keep A=error code if CS plx keep A=error code if CS
stx devnum stx DEVNUM
L3DB6 rts L3DB6 rts
*-------------------------------------- *--------------------------------------
@ -271,7 +271,7 @@ XDOS.RWBlock sta buf+1 buffer high.
lda #$FF indicates reg call made to dev handler lda #$FF indicates reg call made to dev handler
sta ioaccess sta ioaccess
lda devnum transfer dev # for dispatcher to lda DEVNUM transfer dev # for dispatcher to
sta unitnum convert to unit #. sta unitnum convert to unit #.
jmp XDOS.DevCall call the driver. jmp XDOS.DevCall call the driver.
*-------------------------------------- *--------------------------------------
@ -293,7 +293,9 @@ XDOS.CheckAndUnpackGBuf
rts rts
XDOS.UnpackGBuf jsr XDOS.Pack.Init XDOS.UnpackGBuf jsr XDOS.Pack.Init
XDOS.UnpackZPT .EQ *
.1 lda (zpt) .1 lda (zpt)
and #$0F and #$0F
beq .6 beq .6
@ -801,7 +803,7 @@ fileio1 lda $00,x get memory address of buffer from
lda #$FF also, set to indicate reg call made to lda #$FF also, set to indicate reg call made to
sta ioaccess device handler. sta ioaccess device handler.
lda devnum transfer device # for dispatcher lda DEVNUM transfer device # for dispatcher
sta unitnum to convert to unit #. sta unitnum to convert to unit #.
stz p8error clear global error code. stz p8error clear global error code.
jmp XDOS.DevCall call the driver. jmp XDOS.DevCall call the driver.

View File

@ -233,7 +233,7 @@ L47C1 pla
XDOS.FCBDevIDSelect XDOS.FCBDevIDSelect
ldx fcbptr ldx fcbptr
lda FCBs+FCB.DEVID,x lda FCBs+FCB.DEVID,x
sta devnum sta DEVNUM
rts rts
*-------------------------------------- *--------------------------------------
XDOS.SetFCBSType XDOS.SetFCBSType

View File

@ -24,7 +24,7 @@ L4B39 lda d_attr make sure ok to destroy file.
lda #MLI.E.LOCKED access error lda #MLI.E.LOCKED access error
jsr GP.P8errv jsr GP.P8errv
L4B45 lda devnum last device used. L4B45 lda DEVNUM last device used.
jsr twrprot1 test for write protected hardware jsr twrprot1 test for write protected hardware
bcs L4B66 before going thru deallocation. bcs L4B66 before going thru deallocation.
@ -789,6 +789,30 @@ XRW.DEBUG.PBYTEx
.FIN .FIN
*-------------------------------------- *--------------------------------------
XDOS.TOOLBOX jmp (.1,x)
.1 .DA XDOS.TOOLBOX.MEMRESET
.DA XDOS.TOOLBOX.UnpackYA
XDOS.TOOLBOX.MEMRESET
ldx #$17
.1 stz MEMTABL,x P8 memory bitmap
dex
bne .1
inc MEMTABL+$17 protect global page
lda #$CF protect zero page, stack and page 1
sta MEMTABL
rts
XDOS.TOOLBOX.UnpackYA
sty zpt
sta zpt+1
ldx #1
jmp XDOS.UnpackZPT
*--------------------------------------
* data tables * data tables
*-------------------------------------- *--------------------------------------
XDOS.CmdNums .HS D3D4D5D6 table of valid mli command numbers. XDOS.CmdNums .HS D3D4D5D6 table of valid mli command numbers.
@ -1009,6 +1033,6 @@ cortflag .EQ $FEFF cortland flag. 1 = Cortland system (must stay within
*-------------------------------------- *--------------------------------------
XDOS.LEN .EQ *-XDOS XDOS.LEN .EQ *-XDOS
MAN MAN
SAVE USR/SRC/PRODOS.FX/PRODOS.S.XDOS.F SAVE usr/src/prodos.fx/prodos.s.xdos.f
LOAD USR/SRC/PRODOS.FX/PRODOS.S LOAD usr/src/prodos.fx/prodos.s
ASM ASM

View File

@ -5,7 +5,7 @@ NEW
.OR $2000 .OR $2000
.TF PRODOS,TSYS .TF PRODOS,TSYS
*-------------------------------------- *--------------------------------------
READCAT .EQ 0 Boot Block read Catalog at $C00 READCAT .EQ 1 Boot Block read Catalog at $C00
ENHFILENAME .EQ 1 ENHFILENAME .EQ 1
LOWERCASE .EQ 1 LOWERCASE .EQ 1
ACL .EQ 1 ACL .EQ 1

View File

@ -5,7 +5,7 @@ NEW
.OR $2000 .OR $2000
.TF sbin/initd .TF sbin/initd
*-------------------------------------- *--------------------------------------
INITDDBG .EQ 0 INITDDBG .EQ 1
*-------------------------------------- *--------------------------------------
.INB inc/macros.i .INB inc/macros.i
.INB inc/a2osx.i .INB inc/a2osx.i