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

View File

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

View File

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

View File

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

View File

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

View File

@ -1361,12 +1361,6 @@ BSX.ToUpper cmp #'a'
eor #$20
.9 rts
*--------------------------------------
.LIST ON
BSX.SIZE .EQ *-BSX.JMPX
.LIST OFF
.BS $F000-*
*--------------------------------------
MAN
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.DST .EQ *
.INB usr/src/basic.fx/basic.s.x
.EP
.INB usr/src/basic.fx/basic.s.xm
.EP
*--------------------------------------
MAN
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
MAN
SAVE USR/SRC/PRODOS.FX/PRODOS.S.CCLK
LOAD USR/SRC/PRODOS.FX/PRODOS.S
SAVE usr/src/prodos.fx/prodos.s.cclk
LOAD usr/src/prodos.fx/prodos.s
ASM

View File

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

View File

@ -15,10 +15,47 @@ ILDR.START jsr MLI check for file 'atinit'
jsr ILDR.LoadFile
bcc .1
jmp ILDR.MLIERR
.9 jmp ILDR.MLIERR
.1 lda RROMBNK2 enable ROM
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
*--------------------------------------
@ -90,7 +127,6 @@ ILDR.ENUMPM .DO PM
jsr setvid
jsr setkbd
jsr home
jmp sysentry go run interpreter
.9 jsr MLI no .SYSTEM found, so quit.
@ -327,6 +363,13 @@ ILDR.LCBits .HS 8040201008040201
ILDR.GFINFO .DA #10 PARAM CNT
.DA ILDR.ATINIT
.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
.BS 2 Filename

View File

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

View File

@ -26,20 +26,16 @@ LDR.MSG.IIgs .AT "IIgs"
LDR.MSG.Unknown .AT "Unknown"
LDR.MSG.CLK .AT "?Clk"
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
atalkset inc LDR.BootFlag set = 1 for appletalk rts
prostart lda unitnum
sta LDR.MLIOL.P+1
.DO READCAT=1
sta LDR.MLIRB.P+1
.FIN
cld
bit RROMBNK2
sta CLR80DISP
sta CLR80STORE
@ -157,11 +153,6 @@ m128k sta idapple Save MACHID in temp location
lda #$01 patch for the gs rom
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
ldy #MLI
lda /MLI
@ -271,22 +262,47 @@ LDR.Common jsr LDR.BlkDevScan
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
beq LDR.ReadRoot taken if normal boot.
beq LDR.SetPrefix taken if normal boot.
bit RROMBNK2
rts return to caller at setup entry point.
*--------------------------------------
LDR.ReadRoot lda LDR.MLIOL.P+1 place boot devnum in globals
sta devnum last device used
jsr MLI
LDR.SetPrefix jsr MLI
.DA #MLIONLINE
.DA LDR.MLIOL.P
bcs .9
lda pbuf+1 get volume name length.
and #$0F strip devnum
and #$0F strip SDDDxxxx
beq .9
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
bcs .9
.DO READCAT=1
stz dst
lda /dbuf
ldy #$02 read directory into buffer
ldx #0
jsr CROUT
.1 sta dst+1
sta LDR.MLIRB.P+3 Data buf HI
sty LDR.MLIRB.P+4 Blk Num LO
stx LDR.MLIRB.P+5 Blk Num HI
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
ldx #PAKME.ILDR-PAKME.Table
ldy #ILDR.START
lda /ILDR.START
jsr X.Unpak.XatYA
jmp ILDR.START
.9 ldx #LDR.MSG.ROOTERR
.9 ldx #LDR.MSG.PFXERR
jsr LDR.PrintX
bra *
*--------------------------------------
@ -576,16 +566,13 @@ LDR.ClkDevXCLK bit RROMBNK2
lda $DFFF
cmp #$CD
bne .9
lda $D8F0
bit $F851
cmp #$AD
beq .1
.9 rts
.9 bit $F851
rts
.1 lda #'X'
.1 bit $F851
lda #'X'
ldx PAKME.XCLK
ldy PAKME.XCLK+1
*--------------------------------------
@ -624,14 +611,38 @@ LDR.SetupRAM lda DEVCNT
lda /$FF00
jsr X.Unpak.XatYA
lda RAMX.PAK
bne .1
sta SETWRITEAUX
ldx #PAKME.RAMX-PAKME.Table
ldy #$0200
lda /$0200
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
sta DEVPTRS3D2
@ -1304,13 +1315,6 @@ LDR.MLIOL.P .DA #2
LDR.MLISETP.P .DA #1
.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.U .DA #$00 unit number (code for smartport stat)
.DA LDR.SPStatusBuf

View File

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

View File

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

View File

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

View File

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

View File

@ -580,7 +580,7 @@ XDOS.Online jsr mvdbufr figure out how big buffer has to be.
ldy #$01
lda (A3L),y if 0 then cbytes=$100 else $010 for one
and #$F0 device. mask out unused nibble.
sta devnum last device used.
sta DEVNUM last device used.
beq .1 branch if all devices.
lda #$10 cbytes = $010
@ -600,14 +600,14 @@ XDOS.Online jsr mvdbufr figure out how big buffer has to be.
bne .3
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.
jsr mvdevnums get list of currently recognized dev's.
.4 phx save index to last item on list
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.
lda namptr inc pointer for next device
clc
@ -693,7 +693,7 @@ online1.OK lda VCBs,x get volume name count
bpl .1
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.
sta (usrbuf),y
@ -714,7 +714,7 @@ tstfnf cmp #MLI.E.FNOTFND 'file not found' is ok
cmp #$0D
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.
bcs H351D
@ -1010,7 +1010,7 @@ drevise1 lda bkbitflg (bit 5 = backup needed)
tsb d_attr mark entry as backupable
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.
ldx d_entblk+1

View File

@ -314,7 +314,7 @@ XDOS.FindVol jsr XDOS.FindVolInVCBOrDev
dex
bpl .1
lda devnum setup device # for this directory
lda DEVNUM setup device # for this directory
sta d_dev
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
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
L395F lda pathbuf,y test for end of name.
@ -361,7 +361,7 @@ XDOS.FindVolInVCBOrDev
tay set ptr to volume name
L396F sty vnptr and save.
sta devnum zero out dev# until vcb located.
sta DEVNUM zero out dev# until vcb located.
lda #VCB0
@ -392,7 +392,7 @@ L398A cmp pathbuf,y is it the same as requested vol name?
plx restore pointer to matching vcb.
stx vcbptr save it for future reference.
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
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
sta namptr
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.
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).
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.
jsr XDOS.FindVCBForDevNum find vcb that claims this dev (if any).
@ -501,12 +501,12 @@ L3A2D lda DEVLST,x active device list.
rts
*--------------------------------------
XDOS.FindVCBForDevNum
lda #VCB0 look for vcb for devnum
lda #VCB0 look for vcb for DEVNUM
ldy #$FF
.1 tax new index to next vcb
lda VCBs+VCB.DEV,x check all devnums
cmp devnum is this the vcb?
cmp DEVNUM is this the vcb?
beq .7
lda VCBs,x is this a free vcb?
@ -623,7 +623,7 @@ L3ACE lda gbuf+4,y
pla get length again
sta VCBs,x and save.
lda devnum last device used.
lda DEVNUM last device used.
sta VCBs+VCB.DEV,x save device # and
ldy #0

View File

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

View File

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

View File

@ -24,7 +24,7 @@ L4B39 lda d_attr make sure ok to destroy file.
lda #MLI.E.LOCKED access error
jsr GP.P8errv
L4B45 lda devnum last device used.
L4B45 lda DEVNUM last device used.
jsr twrprot1 test for write protected hardware
bcs L4B66 before going thru deallocation.
@ -789,6 +789,30 @@ XRW.DEBUG.PBYTEx
.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
*--------------------------------------
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
MAN
SAVE USR/SRC/PRODOS.FX/PRODOS.S.XDOS.F
LOAD USR/SRC/PRODOS.FX/PRODOS.S
SAVE usr/src/prodos.fx/prodos.s.xdos.f
LOAD usr/src/prodos.fx/prodos.s
ASM

View File

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

View File

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