mirror of https://github.com/A2osX/A2osX.git
ProDOS.FX:Modified SELECTOR....more to come
This commit is contained in:
parent
c5e3cf4425
commit
5c26012b7f
Binary file not shown.
|
@ -1,16 +1,34 @@
|
||||||
NEW
|
NEW
|
||||||
AUTO 3,1
|
AUTO 3,1
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* object code = sel_1
|
VolListPtr .EQ $65
|
||||||
* Bird's Better Bye at org = dispadr
|
*
|
||||||
|
SelectedIndex .EQ $67 name counter
|
||||||
|
filecount .EQ $68 # of displayable files in directory
|
||||||
|
FilenameLen .EQ $69 length of filename
|
||||||
|
|
||||||
|
bInSubDir .EQ $6B directory level
|
||||||
|
FilenamePtr .EQ $6C filename storage pointer (16 bit)
|
||||||
|
*
|
||||||
|
DirEntLen .EQ $6E directory entry length
|
||||||
|
DirEntPerBlk .EQ $6F directory entries/block
|
||||||
|
FileCntInDir .EQ $70 directory file count (16 bit)
|
||||||
|
*
|
||||||
|
blkfl .EQ $72 block flag / file counter
|
||||||
|
ScrollIndex .EQ $73 index # of top name in display
|
||||||
|
*--------------------------------------
|
||||||
|
SEL1.FileBuf .EQ $1800 1k
|
||||||
|
SEL1.DirEntry .EQ $1C00 512b
|
||||||
|
SEL1.filetypes .EQ $1F00
|
||||||
|
SEL1.Filenames .EQ $2000
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
SEL1.START cld
|
SEL1.START cld
|
||||||
bit RROMBNK2 read ROM
|
bit 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
|
||||||
|
@ -21,21 +39,19 @@ SEL1.START cld
|
||||||
jsr GP.TOOLBOX reset MEMTABL
|
jsr GP.TOOLBOX reset MEMTABL
|
||||||
|
|
||||||
lda #$02
|
lda #$02
|
||||||
sta smparms init set mark parms pcount.
|
sta SEL1.SetMarkP init set mark parms pcount.
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* drive selector
|
ldx DEVCNT
|
||||||
*--------------------------------------
|
|
||||||
ldx DEVCNT get device count and
|
|
||||||
|
|
||||||
.1 lda DEVLST,x
|
.1 lda DEVLST,x
|
||||||
and #$F0
|
and #$F0
|
||||||
cmp DEVNUM
|
cmp DEVNUM
|
||||||
beq SEL1.VolName
|
beq SEL1.GetVol
|
||||||
|
|
||||||
dex
|
dex
|
||||||
bra .1
|
bra .1
|
||||||
|
*--------------------------------------
|
||||||
SEL1.NextVol ldx lstpntr get device list pointer.
|
SEL1.NextVol ldx VolListPtr get device list pointer.
|
||||||
bne .1
|
bne .1
|
||||||
|
|
||||||
ldx DEVCNT get device count.
|
ldx DEVCNT get device count.
|
||||||
|
@ -43,232 +59,241 @@ SEL1.NextVol ldx lstpntr get device list pointer.
|
||||||
|
|
||||||
.1 dex
|
.1 dex
|
||||||
lda DEVLST,x get unit number from list.
|
lda DEVLST,x get unit number from list.
|
||||||
|
*--------------------------------------
|
||||||
SEL1.VolName stx lstpntr
|
SEL1.GetVol stx VolListPtr
|
||||||
sta ol_unit store unit number for online.
|
sta SEL1.OnLineP+1 store unit number for online.
|
||||||
jsr MLI
|
jsr MLI
|
||||||
.DA #MLIONLINE
|
.DA #MLIONLINE
|
||||||
.DA ol_parms
|
.DA SEL1.OnLineP
|
||||||
bcs SEL1.NextVol error check.
|
bcs SEL1.NextVol error check.
|
||||||
|
|
||||||
stz dlevel haven't read root directory yet.
|
stz bInSubDir 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 SEL1.NextVol if 0, then try next unit.
|
beq SEL1.NextVol if 0, then try next unit.
|
||||||
|
|
||||||
|
* clc
|
||||||
|
|
||||||
adc #$02 add 2 to length.
|
adc #$02 add 2 to length.
|
||||||
tax name length in x.
|
tax name length in x.
|
||||||
|
|
||||||
vnam1 stx pbuf save the name length
|
SEL1.OpenDir stx pbuf save the name length
|
||||||
lda #$2F '/'
|
lda #'/'
|
||||||
sta pbuf+1 slash before and
|
sta pbuf+1 slash before and
|
||||||
sta pbuf,x after name.
|
sta pbuf,x after name.
|
||||||
stz pbuf+1,x null after complete name.
|
stz pbuf+1,x now "/VOLNAME/0
|
||||||
|
|
||||||
* open and read directory
|
|
||||||
|
|
||||||
jsr MLI
|
jsr MLI
|
||||||
.DA #MLIOPEN
|
.DA #MLIOPEN
|
||||||
.DA op_parms
|
.DA SEL1.OpenP
|
||||||
bcc L5D7F good open.
|
bcc SEL1.EnumDir good open.
|
||||||
|
|
||||||
lda dlevel trying to open root directory ?
|
lda bInSubDir trying to open root directory ?
|
||||||
beq SEL1.NextVol 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 SEL1.FullPath.. and stay at same level.
|
||||||
stx pbuf
|
stx pbuf
|
||||||
jmp keyloop
|
jmp keyloop
|
||||||
|
*--------------------------------------
|
||||||
|
SEL1.EnumDir stz filecount zero file count.
|
||||||
|
|
||||||
L5D7F inc dlevel
|
lda #1 File Ref Num=1
|
||||||
stz filecount zero file count.
|
sta SEL1.ReadP+1 store in read
|
||||||
lda op_refn get file reference number
|
sta SEL1.SetMarkP+1 and setmark parm lists.
|
||||||
sta rd_refn store in read
|
|
||||||
sta sm_refn and setmark parm lists.
|
stz SEL1.ReadP+2
|
||||||
|
lda /SEL1.DirEntry
|
||||||
|
sta SEL1.ReadP+3
|
||||||
|
|
||||||
lda #$2B set read parm list for
|
lda #$2B set read parm list for
|
||||||
sta rd_reqlen directory header length.
|
sta SEL1.ReadP+4 directory header length.
|
||||||
stz rd_reqlen+1
|
stz SEL1.ReadP+5
|
||||||
|
|
||||||
jsr SEL1.ReadEntry read directory
|
jsr SEL1.ReadEntry read directory
|
||||||
bcs L5DB3
|
bcs SEL1.CloseDir1
|
||||||
|
|
||||||
ldx #$03
|
ldx #$03
|
||||||
|
|
||||||
L5D9A lda sysentry+$23,x copy directory info
|
.1 lda SEL1.DirEntry+$23,x copy directory info
|
||||||
sta entlen,x to zero page.
|
sta DirEntLen,x to zero page.
|
||||||
dex
|
dex
|
||||||
bpl L5D9A
|
bpl .1
|
||||||
|
|
||||||
sta rd_reqlen put entry length in read parm list.
|
sta SEL1.ReadP+4 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 SEL1.SetMarkP+3 zero out msb's of file position
|
||||||
stz fpos_hi in setmark parm list.
|
stz SEL1.SetMarkP+4 in setmark parm list.
|
||||||
lda filecnt any files in directory ?
|
|
||||||
ora filecnt+1
|
|
||||||
bne L5DB5 if so, continue
|
|
||||||
|
|
||||||
L5DB3 bra L5E29 else go close directory file.
|
SEL1.EnumDirNext
|
||||||
|
lda FileCntInDir
|
||||||
|
ora FileCntInDir+1
|
||||||
|
beq SEL1.CloseDir
|
||||||
|
|
||||||
L5DB5 bit filecnt+1 check msb of file count.
|
SEL1.EnumDirNext1
|
||||||
bmi L5DB3 if set then done.
|
|
||||||
|
|
||||||
L5DB9 lda fpos_mid get mid byte of setmark file position.
|
.1 lda #$01 reset lsb
|
||||||
and #$FE reset lsb
|
trb SEL1.SetMarkP+3
|
||||||
sta fpos_mid and save.
|
|
||||||
ldy blkfl block file counter
|
ldy blkfl block file counter
|
||||||
lda #$00
|
lda #$00
|
||||||
cpy entblk have we read all entries in this block ?
|
cpy DirEntPerBlk have we read all entries in this block ?
|
||||||
bcc L5DCE if not, continue.
|
bcc .3 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 SEL1.SetMarkP+3
|
||||||
|
|
||||||
* set up setmark parameters for next file to be read.
|
.2 inc SEL1.SetMarkP+3
|
||||||
* if transfer to second sector, handle it.
|
|
||||||
|
|
||||||
L5DCC inc fpos_mid
|
.3 dey decrement file block counter
|
||||||
|
|
||||||
L5DCE dey decrement file block counter
|
|
||||||
clc
|
clc
|
||||||
bmi L5DD8
|
bmi .4
|
||||||
|
|
||||||
adc entlen add entry length to acc.
|
adc DirEntLen add entry length to acc.
|
||||||
bcc L5DCE determine if we flopped into 2nd half of
|
bcc .3 determine if we flopped into 2nd half of
|
||||||
bcs L5DCC block, if so inc mid byte position.
|
bcs .2 block, if so inc mid byte position.
|
||||||
|
|
||||||
L5DD8 adc #$04 add 4 and put in
|
.4 adc #$04 add 4 and put in
|
||||||
sta fpos_lo low byte of setmark.
|
sta SEL1.SetMarkP+2 low byte of setmark.
|
||||||
jsr MLI call mli
|
jsr MLI call mli
|
||||||
.DA #MLISETMARK
|
.DA #MLISETMARK
|
||||||
.DA #smparms parameters address = $0060
|
.DA SEL1.SetMarkP
|
||||||
.HS 00
|
bcs SEL1.CloseDir
|
||||||
bcs L5DB3 error
|
|
||||||
|
|
||||||
jsr SEL1.ReadEntry
|
jsr SEL1.ReadEntry
|
||||||
bcs L5DB3 error.
|
SEL1.CloseDir1 bcs SEL1.CloseDir
|
||||||
|
|
||||||
inc blkfl increase count of files read.
|
inc blkfl increase count of files read.
|
||||||
lda sysentry file type/length.
|
lda SEL1.DirEntry file type/length.
|
||||||
and #$F0 mask off high nibble.
|
and #$F0 mask off high nibble.
|
||||||
beq L5DB9 deleted file, try next one.
|
beq SEL1.EnumDirNext1
|
||||||
|
|
||||||
dec filecnt decrement low file count.
|
lda FileCntInDir
|
||||||
bne L5DF8
|
bne .5
|
||||||
|
|
||||||
dec filecnt+1 and high if necessary.
|
dec FileCntInDir+1
|
||||||
|
|
||||||
L5DF8 ror sysentry+$1E check access bit.
|
.5 dec FileCntInDir
|
||||||
bcc L5DB5 if no read, try next file.
|
|
||||||
|
|
||||||
lda sysentry+$10 get file type.
|
ror SEL1.DirEntry+$1E check access bit.
|
||||||
cmp #$0F directory file ?
|
bcc SEL1.EnumDirNext if no read, try next file.
|
||||||
beq L5E08 then continue.
|
|
||||||
|
|
||||||
cmp #$FF system file ?
|
lda SEL1.DirEntry+$10 get file type.
|
||||||
bne L5DB5 no, read next file.
|
ldx filecount get valid files read.
|
||||||
|
inx
|
||||||
|
beq SEL1.CloseDir
|
||||||
|
|
||||||
L5E08 ldx filecount get valid files read.
|
stx filecount
|
||||||
cpx #$80 if greater than size of filename buffer
|
|
||||||
bcs L5E29 then close directory
|
|
||||||
|
|
||||||
sta filetyps,x else store filetype in zero page
|
dex
|
||||||
jsr namecalc and go set up storage area.
|
|
||||||
ldy #$0F
|
|
||||||
|
|
||||||
L5E15 lda sysentry,y get byte of filename
|
sta SEL1.filetypes,x else store filetype in zero page
|
||||||
sta (fnstore),y store in directed area
|
jsr SEL1.SetFNPtrX and go set up storage area.
|
||||||
|
|
||||||
|
ldy #15
|
||||||
|
|
||||||
|
.6 lda SEL1.DirEntry,y get byte of filename
|
||||||
|
sta (FilenamePtr),y store in directed area
|
||||||
dey
|
dey
|
||||||
bpl L5E15
|
bpl .6
|
||||||
|
|
||||||
iny y = 0
|
|
||||||
and #$0F mask off low nibble (name length)
|
and #$0F mask off low nibble (name length)
|
||||||
sta (fnstore),y restore in name buffer
|
sta (FilenamePtr) restore in name buffer
|
||||||
inc filecount increment valid file counter
|
bra SEL1.EnumDirNext
|
||||||
bne L5DB5 get next file (branch always)
|
|
||||||
|
|
||||||
L5E26 jmp SEL1.NextVol error. try next unit.
|
L5E26 jmp SEL1.NextVol error. try next unit.
|
||||||
|
*--------------------------------------
|
||||||
L5E29 jsr MLI close directory file
|
SEL1.CloseDir jsr MLI close directory file
|
||||||
.DA #MLICLOSE
|
.DA #MLICLOSE
|
||||||
.DA cl_parms
|
.DA SEL1.CloseP
|
||||||
bcs L5E26 error.
|
bcs L5E26 error.
|
||||||
|
|
||||||
jsr settxt use full screen for windows
|
jsr settxt use full screen for windows
|
||||||
jsr home
|
jsr home
|
||||||
|
|
||||||
lda #$17 cursor at bottom of screen.
|
lda #$17 cursor at bottom of screen.
|
||||||
jsr TABV set vertical position.
|
jsr TABV set vertical position.
|
||||||
ldy #$00
|
|
||||||
lda #$14 horizontal position.
|
lda #$14 horizontal position.
|
||||||
jsr sethorz print message.
|
sta ch
|
||||||
jsr homecurs cursor to upper/left.
|
|
||||||
|
ldy #0 Footer
|
||||||
|
jsr SET1.MsgOutY
|
||||||
|
lda #$99
|
||||||
|
jsr cout cursor to upper/left.
|
||||||
|
|
||||||
ldx #$00
|
ldx #$00
|
||||||
|
|
||||||
L5E48 lda pbuf+1,x
|
.1 lda pbuf+1,x
|
||||||
beq showfiles
|
beq .2
|
||||||
|
|
||||||
jsr output
|
jsr SEL1.COut
|
||||||
inx
|
inx
|
||||||
bne L5E48
|
bne .1
|
||||||
|
|
||||||
showfiles stz valcnt
|
.2 stz SelectedIndex
|
||||||
stz topname init top filename index.
|
stz ScrollIndex init top filename index.
|
||||||
lda filecount # of valid files.
|
ldx filecount # of valid files.
|
||||||
beq keyloop if no files.
|
beq keyloop if no files.
|
||||||
|
|
||||||
cmp #$15 more than what will fit on screen ?
|
cpx #21 more than what will fit on screen ?
|
||||||
bcc L5E61 no.
|
bcc .3 no.
|
||||||
|
|
||||||
lda #$14 limit to 20 files on the screen.
|
ldx #20 limit to 20 files on the screen.
|
||||||
|
|
||||||
L5E61 sta gp_cnt
|
.3 lda #2 set window dimensions
|
||||||
lda #$02 set window dimensions
|
|
||||||
sta wndtop
|
sta wndtop
|
||||||
sta wndlft
|
sta wndlft
|
||||||
lda #$16
|
|
||||||
|
lda #22
|
||||||
sta wndwdth
|
sta wndwdth
|
||||||
sta wndbot
|
sta wndbot
|
||||||
|
|
||||||
L5E6F jsr nameprnt output filename to screen
|
.4 phx
|
||||||
inc valcnt
|
|
||||||
dec gp_cnt file counter.
|
jsr SEL1.PrintFN
|
||||||
bne L5E6F continue printing names.
|
inc SelectedIndex
|
||||||
|
|
||||||
|
plx
|
||||||
|
dex
|
||||||
|
bne .4
|
||||||
|
|
||||||
stz valcnt
|
stz SelectedIndex
|
||||||
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 SEL1.PrintFN print old name in normal.
|
||||||
ldx valcnt get old name number.
|
ldx SelectedIndex
|
||||||
beq L5EAA if already at the top name
|
beq L5EAA if already at the top name
|
||||||
|
|
||||||
dec valcnt else fix index.
|
dec SelectedIndex
|
||||||
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 ScrollIndex 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 SEL1.PrintFN print old name in normal.
|
||||||
ldx valcnt get old name number.
|
ldx SelectedIndex
|
||||||
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 SelectedIndex
|
||||||
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 ScrollIndex 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.
|
|
||||||
jsr nameprnt output last filename.
|
|
||||||
|
|
||||||
|
L5EAA jsr setinv set inverse text mode.
|
||||||
|
jsr SEL1.PrintFN 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.
|
||||||
|
|
||||||
|
@ -292,214 +317,220 @@ L5ECB cmp #$89 tab ?
|
||||||
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.
|
||||||
|
|
||||||
* pop a directory level
|
jsr SEL1.FullPath.. CD ..
|
||||||
|
jmp SEL1.OpenDir
|
||||||
jsr popdir
|
*--------------------------------------
|
||||||
dec dlevel
|
|
||||||
bra L5EF1
|
|
||||||
|
|
||||||
popdir ldx pbuf
|
|
||||||
|
|
||||||
L5EDD dex
|
|
||||||
lda pbuf,x
|
|
||||||
cmp #$2F slash
|
|
||||||
bne L5EDD
|
|
||||||
|
|
||||||
cpx #$01
|
|
||||||
bne L5EEC
|
|
||||||
|
|
||||||
ldx pbuf
|
|
||||||
L5EEC rts
|
|
||||||
|
|
||||||
L5EED jmp SEL1.NextVol set up new unit number.
|
L5EED jmp SEL1.NextVol set up new unit number.
|
||||||
|
*--------------------------------------
|
||||||
|
L5EF4 ldy SelectedIndex
|
||||||
|
lda SEL1.filetypes,y get file type.
|
||||||
|
cmp #S.FI.T.DIR
|
||||||
|
bne .1 branch if directory.
|
||||||
|
|
||||||
L5EF0 inx
|
jsr SEL1.SetFullPath
|
||||||
|
bcs L5EED
|
||||||
L5EF1 jmp vnam1 get new directory info.
|
|
||||||
|
|
||||||
* run selected file
|
|
||||||
|
|
||||||
L5EF4 jsr MLI
|
|
||||||
.DA #MLISETPREFIX
|
|
||||||
.DA pf_parms
|
|
||||||
bcs L5EED error.
|
|
||||||
|
|
||||||
ldx valcnt get name number.
|
|
||||||
jsr namecalc set up name storage area (on return y=0)
|
|
||||||
|
|
||||||
ldx pbuf get prefix length.
|
|
||||||
|
|
||||||
L5F04 iny start at y = 1.
|
|
||||||
lda (fnstore),y get character of name.
|
|
||||||
inx
|
inx
|
||||||
sta pbuf,x store in prefix buffer.
|
|
||||||
cpy namelen check length of name.
|
|
||||||
bcc L5F04 loop until all transferred.
|
|
||||||
|
|
||||||
stx pbuf put prefix length into buffer.
|
jmp SEL1.OpenDir get new directory info.
|
||||||
ldy valcnt get file number.
|
|
||||||
lda filetyps,y get file type.
|
.1 cmp #S.FI.T.SYS
|
||||||
bpl L5EF0 branch if directory.
|
bne keyloop
|
||||||
|
|
||||||
|
jsr SEL1.SetFullPath
|
||||||
|
bcs L5EED
|
||||||
|
|
||||||
|
jsr MLI open file
|
||||||
|
.DA #MLIOPEN
|
||||||
|
.DA SEL1.OpenP
|
||||||
|
bcs L5EED
|
||||||
|
|
||||||
|
lda SEL1.OpenP+5 move reference number
|
||||||
|
sta SEL1.ReadP+1 for read.
|
||||||
|
|
||||||
|
lda #$20
|
||||||
|
sta SEL1.ReadP+3 read at $2000
|
||||||
|
|
||||||
|
dec SEL1.ReadP+5 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
|
||||||
|
.DA SEL1.CloseP
|
||||||
|
plp restore status from read.
|
||||||
|
bcs L5EED if any errors.
|
||||||
|
|
||||||
jsr settxt reset to full window.
|
jsr settxt reset to full window.
|
||||||
jsr home makes for no flash.
|
jsr home makes for no flash.
|
||||||
lda #$95 ctrl-u
|
lda #$95 ctrl-u
|
||||||
jsr cout turn off 80 columns.
|
jsr cout turn off 80 columns.
|
||||||
|
|
||||||
jsr MLI open file
|
jmp $2000 execute selected system file.
|
||||||
.DA #MLIOPEN
|
*--------------------------------------
|
||||||
.DA op_parms
|
SET1.MsgOutY lda SEL1.Footer,y
|
||||||
bcs L5EED if error.
|
beq .8
|
||||||
|
|
||||||
lda op_refn move reference number
|
|
||||||
sta rd_refn for read.
|
|
||||||
|
|
||||||
* 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
|
|
||||||
.DA cl_parms
|
|
||||||
plp restore status from read.
|
|
||||||
bcs L5EED if any errors.
|
|
||||||
jmp sysentry execute selected system file.
|
|
||||||
|
|
||||||
* output messages. on entry: acc = horizontal position,
|
|
||||||
* y = index to message teminated by 0.
|
|
||||||
|
|
||||||
sethorz sta ch
|
|
||||||
|
|
||||||
msgout lda dsp2msg,y
|
|
||||||
beq L5F57
|
|
||||||
|
|
||||||
jsr cout
|
jsr cout
|
||||||
iny
|
iny
|
||||||
bne msgout
|
bne SET1.MsgOutY
|
||||||
|
|
||||||
L5F57 rts
|
.8 rts
|
||||||
|
*--------------------------------------
|
||||||
* name pointer calculator for name storage area
|
SEL1.PrintFN ldx SelectedIndex
|
||||||
|
|
||||||
namecalc stz fnstore+1 init high byte of 16-bit shift
|
|
||||||
txa
|
|
||||||
asl shift to high nibble
|
|
||||||
rol fnstore+1
|
|
||||||
asl
|
|
||||||
rol fnstore+1
|
|
||||||
asl
|
|
||||||
rol fnstore+1
|
|
||||||
asl
|
|
||||||
rol fnstore+1
|
|
||||||
sta fnstore low pointer
|
|
||||||
lda /iobuf
|
|
||||||
clc
|
|
||||||
adc fnstore+1
|
|
||||||
sta fnstore+1
|
|
||||||
|
|
||||||
ldy #$00
|
|
||||||
lda (fnstore),y file name length
|
|
||||||
sta namelen
|
|
||||||
rts
|
|
||||||
|
|
||||||
* output a filename line
|
|
||||||
|
|
||||||
nameprnt lda #$02
|
|
||||||
sta ch80col horizontal position = 2.
|
|
||||||
ldx valcnt filename number
|
|
||||||
txa
|
txa
|
||||||
sec
|
sec
|
||||||
sbc topname calculate line # to display name
|
sbc ScrollIndex calculate line # to display name
|
||||||
inc
|
inc
|
||||||
inc
|
inc
|
||||||
jsr TABV set vertical position.
|
jsr TABV set vertical position.
|
||||||
lda filetyps,x get filetype (x is unchanged by tabv).
|
|
||||||
bmi L5F99 branch if system file.
|
lda SEL1.filetypes,x get filetype (x is unchanged by tabv).
|
||||||
|
cmp #S.FI.T.DIR
|
||||||
|
bne .1 branch if not a DIR
|
||||||
|
|
||||||
stz ch80col adjust cursor position.
|
stz ch80col adjust cursor position.
|
||||||
lda invflg ave current inverse setting
|
lda invflg Save current inverse setting
|
||||||
pha
|
pha
|
||||||
ldy #fldrmsg-dsp2msg
|
ldy #SEL1.DirIcon-SEL1.Footer
|
||||||
jsr msgout display the folder.
|
jsr SET1.MsgOutY display the folder.
|
||||||
pla restore inverse setting.
|
pla restore inverse setting.
|
||||||
sta invflg
|
sta invflg
|
||||||
|
|
||||||
L5F99 jsr outsp output a space.
|
.1 lda #$03
|
||||||
jsr namecalc calc name location.
|
sta ch80col
|
||||||
|
|
||||||
|
jsr SEL1.SPOut output a space.
|
||||||
|
jsr SEL1.SetFNPtrX calc name location.
|
||||||
|
|
||||||
L5F9F iny y = 1 (first time).
|
ldy #0
|
||||||
lda (fnstore),y get name character.
|
|
||||||
jsr output put on screen.
|
|
||||||
cpy namelen end of name ?
|
|
||||||
bcc L5F9F no.
|
|
||||||
|
|
||||||
outsp lda #$A0
|
.2 iny
|
||||||
.HS 2C BIT ABS
|
lda (FilenamePtr),y get name character.
|
||||||
|
jsr SEL1.COut put on screen.
|
||||||
|
cpy FilenameLen end of name ?
|
||||||
|
bcc .2 no.
|
||||||
|
|
||||||
homecurs lda #$99
|
SEL1.SPOut lda #' ' SPACE
|
||||||
|
|
||||||
output ora #$80 set high bit.
|
SEL1.COut ora #$80 set high bit.
|
||||||
jmp cout output to screen.
|
jmp cout output to screen.
|
||||||
|
|
||||||
SEL1.ReadEntry jsr SEL1.Read
|
SEL1.ReadEntry jsr SEL1.Read
|
||||||
bcs SEL1.Read.RTS
|
bcs SEL1.Read.RTS
|
||||||
|
|
||||||
ldy #sysentry
|
ldy #SEL1.DirEntry
|
||||||
lda /sysentry
|
lda /SEL1.DirEntry
|
||||||
ldx #2
|
ldx #2
|
||||||
jmp GP.TOOLBOX
|
jmp GP.TOOLBOX
|
||||||
|
*--------------------------------------
|
||||||
SEL1.Read jsr MLI mli read call
|
SEL1.Read jsr MLI mli read call
|
||||||
.DA #MLIREAD
|
.DA #MLIREAD
|
||||||
.DA rd_parms
|
.DA SEL1.ReadP
|
||||||
SEL1.Read.RTS rts
|
SEL1.Read.RTS rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
SEL1.SetFullPath
|
||||||
|
jsr MLI
|
||||||
|
.DA #MLISETPREFIX
|
||||||
|
.DA SEL1.SetPrefixP
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
ldx SelectedIndex
|
||||||
|
jsr SEL1.SetFNPtrX set up name storage area (on return y=0)
|
||||||
|
|
||||||
|
ldx pbuf get prefix length.
|
||||||
|
ldy #0
|
||||||
|
|
||||||
|
.1 iny start at y = 1.
|
||||||
|
lda (FilenamePtr),y get character of name.
|
||||||
|
inx
|
||||||
|
sta pbuf,x store in prefix buffer.
|
||||||
|
cpy FilenameLen check length of name.
|
||||||
|
bcc .1 loop until all transferred.
|
||||||
|
|
||||||
|
stx pbuf put prefix length into buffer.
|
||||||
|
|
||||||
|
inc bInSubDir
|
||||||
|
|
||||||
|
clc
|
||||||
|
|
||||||
|
.9 rts
|
||||||
|
*--------------------------------------
|
||||||
|
SEL1.FullPath.. ldx pbuf
|
||||||
|
|
||||||
|
.1 dex
|
||||||
|
lda pbuf,x
|
||||||
|
cmp #'/'
|
||||||
|
bne .1
|
||||||
|
|
||||||
|
cpx #$01
|
||||||
|
bne .9
|
||||||
|
|
||||||
|
ldx pbuf
|
||||||
|
|
||||||
|
.9 dec bInSubDir
|
||||||
|
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
SEL1.SetFNPtrX lda /SEL1.Filenames/16
|
||||||
|
sta FilenamePtr+1
|
||||||
|
txa
|
||||||
|
|
||||||
|
ldx #4
|
||||||
|
|
||||||
|
.1 asl
|
||||||
|
rol FilenamePtr+1
|
||||||
|
dex
|
||||||
|
bne .1
|
||||||
|
|
||||||
|
sta FilenamePtr
|
||||||
|
|
||||||
|
lda (FilenamePtr)
|
||||||
|
sta FilenameLen
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
* data area
|
* data area
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
dsp2msg .AS -"RETURN: Select | TAB: Chg Vol | ESC: Back"
|
SEL1.Footer .AS -"RETURN:Select,TAB:Chg Vol,ESC:Back"
|
||||||
.HS 00
|
.HS 00
|
||||||
|
|
||||||
fldrmsg .HS 0F inverse control code
|
SEL1.DirIcon .HS 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 #3 3 parms
|
SEL1.OpenP .DA #3 Param Count
|
||||||
.DA pbuf pathname
|
.DA pbuf pathname
|
||||||
.DA op_buf file buffer
|
.DA SEL1.FileBuf file buffer
|
||||||
op_refn .HS 00 reference number
|
.HS 01 reference number
|
||||||
|
*--------------------------------------
|
||||||
cl_parms .HS 01 1 parm
|
SEL1.CloseP .DA #1 Param Count
|
||||||
.HS 00 reference number.
|
.HS 01 reference number.
|
||||||
|
*--------------------------------------
|
||||||
ol_parms .HS 02 2 parms
|
SEL1.OnLineP .DA #2 Param Count
|
||||||
ol_unit .HS 60 unit number, default = s6, d1
|
.HS 60 unit number, default = s6, d1
|
||||||
.DA pbuf+1 data buffer
|
.DA pbuf+1 data buffer
|
||||||
|
*--------------------------------------
|
||||||
pf_parms .DA #01 one parm
|
SEL1.SetPrefixP .DA #1 Param Count
|
||||||
.DA pbuf pathname
|
.DA pbuf pathname
|
||||||
|
*--------------------------------------
|
||||||
rd_parms .DA #04 4 parms
|
SEL1.ReadP .DA #4 Param Count
|
||||||
rd_refn .HS 01 reference number
|
|
||||||
.DA sysentry data buffer
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.LIST ON
|
.LIST ON
|
||||||
SEL1.LEN .EQ *-SEL1.START
|
SEL1.LEN .EQ *-SEL1.START
|
||||||
.LIST OFF
|
.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
|
.DUMMY
|
||||||
rd_reqlen .BS 2 requested length
|
.BS 1 RefNum
|
||||||
|
.BS 2 MemPtr
|
||||||
|
.BS 2 requested length
|
||||||
.BS 2 actual length
|
.BS 2 actual length
|
||||||
|
|
||||||
|
SEL1.SetMarkP .BS 1 Param Count
|
||||||
|
.BS 1 RefNum
|
||||||
|
.BS 3 FPos
|
||||||
.ED
|
.ED
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
MAN
|
MAN
|
||||||
|
|
|
@ -13,6 +13,9 @@ NEW
|
||||||
* (as other replacement quit code is supposed to do) because GQuit checks
|
* (as other replacement quit code is supposed to do) because GQuit checks
|
||||||
* this to see if this version of quit code is available.
|
* this to see if this version of quit code is available.
|
||||||
|
|
||||||
|
op_buf .EQ $1C00 open file buffer (selector)
|
||||||
|
|
||||||
|
|
||||||
SEL2.START
|
SEL2.START
|
||||||
GQdisp lda RRAMWRAMBNK1 read/write LC bank 1
|
GQdisp lda RRAMWRAMBNK1 read/write LC bank 1
|
||||||
clc
|
clc
|
||||||
|
|
|
@ -88,29 +88,6 @@ zpt .EQ $48 highly used zero page index pointer
|
||||||
datptr .EQ $4A ptr to data area of buffer.
|
datptr .EQ $4A ptr to data area of buffer.
|
||||||
sos .EQ $4C sos buffer pointer.
|
sos .EQ $4C sos buffer pointer.
|
||||||
usrbuf .EQ $4E data ptr in user buffer.
|
usrbuf .EQ $4E data ptr in user buffer.
|
||||||
|
|
||||||
* zero page variables for Bird's Better Bye
|
|
||||||
|
|
||||||
smparms .EQ $60 set mark parms
|
|
||||||
sm_refn .EQ $61 file reference number
|
|
||||||
fpos_lo .EQ $62 new file position (3 bytes)
|
|
||||||
fpos_mid .EQ $63
|
|
||||||
fpos_hi .EQ $64
|
|
||||||
lstpntr .EQ $65 device list pointer (16 bit)
|
|
||||||
valcnt .EQ $67 name counter
|
|
||||||
|
|
||||||
filecount .EQ $68 # of displayable files in directory
|
|
||||||
namelen .EQ $69 length of filename
|
|
||||||
gp_cnt .EQ $6A general purpose counter
|
|
||||||
dlevel .EQ $6B directory level
|
|
||||||
fnstore .EQ $6C filename storage pointer (16 bit)
|
|
||||||
entlen .EQ $6E directory entry length
|
|
||||||
entblk .EQ $6F directory entries/block
|
|
||||||
filecnt .EQ $70 directory file count (16 bit)
|
|
||||||
blkfl .EQ $72 block flag / file counter
|
|
||||||
topname .EQ $73 index # of top name in display
|
|
||||||
filetyps .EQ $74 128 byte table of filetypes
|
|
||||||
errnum .EQ $DE
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
auxsp .EQ $0101
|
auxsp .EQ $0101
|
||||||
RAMXDRV .EQ $0200 load address for aux bank /RAM driver
|
RAMXDRV .EQ $0200 load address for aux bank /RAM driver
|
||||||
|
@ -128,7 +105,6 @@ vblock1 .EQ $0E00 ramdisk directory block
|
||||||
volbuf .EQ $0F00 volume buffer
|
volbuf .EQ $0F00 volume buffer
|
||||||
iobuf .EQ $1400 i/o buffer
|
iobuf .EQ $1400 i/o buffer
|
||||||
fbuf .EQ $1800 FCB buffer
|
fbuf .EQ $1800 FCB buffer
|
||||||
op_buf .EQ $1C00 open file buffer (selector)
|
|
||||||
sysentry .EQ $2000 .SYS file load address
|
sysentry .EQ $2000 .SYS file load address
|
||||||
|
|
||||||
xfer .EQ $C314
|
xfer .EQ $C314
|
||||||
|
|
Loading…
Reference in New Issue