Kernel 0.94

This commit is contained in:
Rémy GIBERT 2020-08-27 17:34:55 +02:00
parent d665c03158
commit 5ba9494dc8
5 changed files with 264 additions and 217 deletions

View File

@ -606,8 +606,8 @@ onlinerr rts
online1 jsr fnddvcb see if it has already been logged in.
bcs olinerr1 branch if vcb is full.
ldx #$00 read in root (volume) directory
lda #$02
ldx #$00 read in root (volume) directory
jsr XDOS.ReadGBufAX read it into general purpose buffer.
ldx vcbptr index to the vcb entry.
bcc volfound branch if read was ok.
@ -622,7 +622,15 @@ online1 jsr fnddvcb see if it has already been logged in.
rtrnerr tya error value.
bcs olinerr1 branch if unable to read.
volfound lda VCBs,x has it been logged in before?
volfound .DO LOWERCASE=1
lda gbuf+$23
sta h_entln
lda gbuf+$24
sta h_maxent
jsr XDOS.UnpackGBuf
.FIN
lda VCBs,x has it been logged in before?
beq H349E if not.
lda VCBs+VCB.OFCNT,x it has, are there active files?
@ -744,12 +752,20 @@ clrdir sta gbuf+2,x
inx
bne clrdir
.DO LOWERCASE=1
jsr XDOS.WriteGBufDir
.ELSE
jsr XDOS.WriteGBuf write prepared directory extension.
.FIN
bcs H351D if error
lda own_blk
ldx own_blk+1
.DO LOWERCASE=1
jsr XDOS.ReadGBufAXDir
.ELSE
jsr XDOS.ReadGBufAX read in parent directory block
.FIN
ldx own_ent and calc entry address.
lda /gbuf
sta zpt+1
@ -775,7 +791,11 @@ H3588 lda (zpt),y
eor #$18 done with usage/eof update?
bne H3588 branch if not.
.DO LOWERCASE=1
jsr XDOS.WriteGBufDir
.ELSE
jsr XDOS.WriteGBuf go update parent.
.FIN
bcs crerr2
jmp XDOS.Create
@ -832,10 +852,6 @@ crname lda pathbuf,x move local name as filename
dey
bne crname
.DO LOWERCASE=1
jsr XDOS.LC2UCBM
.FIN
ldy #$03 index to 'access' parameter
lda (A3L),y
sta d_attr
@ -969,9 +985,13 @@ drevise1 lda bkbitflg (bit 5 = backup needed)
lda d_dev get device # of directory
sta devnum to be revised
lda d_entblk and address of direcotry block.
lda d_entblk and address of directory block.
ldx d_entblk+1
.DO LOWERCASE=1
jsr XDOS.ReadGBufAXDir
.ELSE
jsr XDOS.ReadGBufAX read block into general purpose buffer
.FIN
bcs crerr3
jsr entcalc fix up ptr to entry location within gbuf.
@ -992,12 +1012,20 @@ drevise1 lda bkbitflg (bit 5 = backup needed)
cmp bloknml+1
beq uphead branch if they are the same block.
H36E0 jsr XDOS.WriteGBuf go write updated directory block.
H36E0 .DO LOWERCASE=1
jsr XDOS.WriteGBufDir
.ELSE
jsr XDOS.WriteGBuf go write updated directory block.
.FIN
bcs crerr3
lda d_head get address of header block and
ldx d_head+1
.DO LOWERCASE=1
jsr XDOS.ReadGBufAXDir
.ELSE
jsr XDOS.ReadGBufAX go read in header block to modify.
.FIN
bcs crerr3
uphead ldy #$01 update current # of files in this dir.
@ -1010,7 +1038,11 @@ H36F2 lda h_fcnt,y
lda h_attr also update header's attributes.
sta gbuf+34
.DO LOWERCASE=1
jsr XDOS.WriteGBufDir
.ELSE
jsr XDOS.WriteGBuf go write updated header
.FIN
bcs H375A
ripple lda gbuf+4 test for 'root' directory because
@ -1025,7 +1057,11 @@ ripple lda gbuf+4 test for 'root' directory because
lda gbuf+39 get addr of parent entry's dir block
ldx gbuf+40
.DO LOWERCASE=1
jsr XDOS.ReadGBufAXDir
.ELSE
jsr XDOS.ReadGBufAX read it
.FIN
bcs H375A
jsr entcalc get indirect ptr to parent entry in gbuf
@ -1042,23 +1078,29 @@ H3732 lda p8date,x
dex
bpl H3732
H373B jsr XDOS.WriteGBuf write updated entry back to disk.
H373B .DO LOWERCASE=1
jsr XDOS.WriteGBufDir
.ELSE
jsr XDOS.WriteGBuf write updated entry back to disk.
.FIN
bcs H375A if error.
ldy #$25 compare current block # to this
ldy #$26 compare current block # to this
lda (zpt),y entry's header block.
iny
tax
dey
lda (zpt),y block as header.
cmp bloknml are low addresses the same?
sta bloknml
bne H3751 branch if entry doesn't reside in same
lda (zpt),y block as header.
cmp bloknml+1 are high address the same?
cpx bloknml+1 are high address the same?
beq ripple they are the same, continue to root dir.
H3751 lda (zpt),y not same so read in this dir's header.
sta bloknml+1
jsr XDOS.ReadGBuf
H3751 .DO LOWERCASE=1
jsr XDOS.ReadGBufAXDir
.ELSE
jsr XDOS.ReadGBufAX
.FIN
bcc ripple continue if read was good
H375A rts

View File

@ -111,7 +111,11 @@ L37EB sta entcntl keep a running count.
beq errdir then not all entries were acct'd for.
L37FC ldx gbuf+3 acc has value for block# (low).
jsr XDOS.ReadGBufAX go read the next linked directory.
.DO LOWERCASE=1
jsr XDOS.ReadGBufAXDir
.ELSE
jsr XDOS.ReadGBufAX go read the next linked directory.
.FIN
bcc L37C9 if no error.
rts return error in acc.
@ -148,16 +152,20 @@ namfound jsr nxtpname adj index to next name in path.
cmp #$D0 is it a subdirectory?
bne errpath1 error if not.
ldy #$11 get address of 1st subdirectory block
ldy #$12 get address of 1st subdirectory block
lda (zpt),y
sta bloknml (no checking done for a valid block#)
iny
sta d_head save as file's header block too
sta d_head+1 save as file's header block too
tax
dey
lda (zpt),y
sta bloknml+1
sta d_head+1
sta d_head
jsr XDOS.ReadGBuf read subdirectory into gbuf.
.DO LOWERCASE=1
jsr XDOS.ReadGBufAXDir
.ELSE
jsr XDOS.ReadGBufAX read subdirectory into gbuf.
.FIN
bcs lookfil0.RTS if error.
lda gbuf+37 get the # of files contained in this
@ -272,37 +280,8 @@ isname and #$0F strip byte (is checked by 'filfound')
cmpname inx (first) next letter index
iny
.DO LOWERCASE=1
phy
cpy #8 CS if MIN_VERSION to use
ldy #$1D MIN_VERSION
lda (zpt),y
bpl .4 no lowercase information
bcs .1
ply
and whichbit,y
beq .5 UPPERCASE
bra .2
.1 dey VERSION
lda (zpt),y
ply
and whichbit-8,y
beq .5
.2 lda (zpt),y
jsr XDOS.ToLower
bra .6
.4 ply
.FIN
.5 lda (zpt),y compare names letter by letter
.6 cmp pathbuf,x
lda (zpt),y compare names letter by letter
cmp pathbuf,x
bne L38F8
dec namcnt all letters compared?
@ -409,30 +388,44 @@ 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 #
lda VCBs+VCB.DEV,x get it's device #
sta devnum and save it.
stz bloknml+1 assume prefix is not used and
lda #$02 that root directory is to be used.
sta bloknml
lda #$02 assume prefix is not used and
ldx #$00 that root directory is to be used.
pha
lda vnptr = 0 if no prefix.
L39AC tay if prefix then find ptr to prefixed
sta namptr dir name. save path ptr.
beq L39C2 branch if no prefix.
sec
adc pathbuf,y inc to next dir in prefix path.
bcc L39AC branch if another dir in prefix.
pla
lda p_blok volume verification will occur at
sta bloknml subdirectory level.
lda p_blok+1
sta bloknml+1
pha
ldx p_blok+1 subdirectory level.
* verify volume name
L39C2 jsr XDOS.ReadGBuf read in directory (or prefix dir)
L39C2 pla
jsr XDOS.ReadGBufAX read in directory (or prefix dir)
bcs L39CC if error then look on other devices.
.DO LOWERCASE=1
lda gbuf+$23
sta h_entln
lda gbuf+$24
sta h_maxent
jsr XDOS.UnpackGBuf
.FIN
jsr XDOS.CheckVolName compare dir name with path name.
bcc L39F0 if they match, stop looking.
@ -478,7 +471,11 @@ L39FE sta devnum preserve device to be checked next.
L3A16 lda #$02 go read root dir into gbuf
ldx #$00
.DO LOWERCASE=1
jsr XDOS.ReadGBufAXDir
.ELSE
jsr XDOS.ReadGBufAX
.FIN
bcs L39E2 ignore if unable to read.
jsr logvcb go log in volume name.
@ -561,27 +558,7 @@ XDOS.CheckVolName
L3A90 sec indicate not found
rts
L3A92 .DO LOWERCASE=1
lda gbuf+$21 MIN_VERSION
bpl .8
cpx #8
bcs .1
and whichbit,x
beq .8
bra .2
.1 lda gbuf+$20 VERSION
and whichbit-8,x
beq .8
.2 lda gbuf+4,x
jsr XDOS.ToLower
bra L3A95
.8 .FIN
lda gbuf+4,x next char
L3A92 lda gbuf+4,x next char
L3A95 cmp pathbuf,y
bne L3A90 if not the same.
@ -628,11 +605,7 @@ L3AB2 stz VCBs,x
ora vcbptr
tax
L3ACE .DO LOWERCASE=1
jsr XDOS.GetVolNameCharGBufY
.ELSE
lda gbuf+4,y
.FIN
L3ACE lda gbuf+4,y
sta VCBs,x
dex
dey
@ -685,12 +658,7 @@ cmpvcb lda gbuf+4 with name in directory.
ora xvcbptr
tax
L3B18 .DO LOWERCASE=1
jsr XDOS.GetVolNameCharGBufY
.ELSE
lda gbuf+4,y
.FIN
L3B18 lda gbuf+4,y
cmp VCBs,x
L3B1E sec anticipate different names.
@ -755,7 +723,7 @@ tkfrecnt jsr cntbms get # of bitmaps
lda VCBs+VCB.BMAP+1,x
sta bloknml+1
L3B81 jsr XDOS.ReadGBuf use general buffer for temp space to
L3B81 jsr XDOS.ReadGBuf use general buffer for temp space to
bcs L3BC1 count free blocks (bits).
jsr count
@ -835,8 +803,8 @@ L3BFA ora #$00
rts
cntbms ldx vcbptr
ldy VCBs+VCB.TBLK+1,x return the # of bitmaps
lda VCBs+VCB.TBLK,x possible with the total count
ldy VCBs+VCB.TBLK+1,x return the # of bitmaps
lda VCBs+VCB.TBLK,x possible with the total count
bne L3C0B found in the vcb.
dey adj for bitmap block boundary

View File

@ -237,11 +237,22 @@ wrtbmap lda #$02 write command.
txa error code
L3DB6 rts
*--------------------------------------
.DO LOWERCASE=1
XDOS.WriteGBufDir
jsr XDOS.PackGBuf
bra XDOS.WriteGBuf
.FIN
*--------------------------------------
XDOS.ReadGBuf_d_frst
lda d_frst read 1st block of directory into gbuf
ldx d_frst+1
.DO LOWERCASE=1
XDOS.ReadGBufAXDir
jsr XDOS.ReadGBufAX
bcc XDOS.UnpackGBuf
rts
.FIN
XDOS.ReadGBufAX sta bloknml
stx bloknml+1
@ -275,6 +286,131 @@ XDOS.RWBlock php no interrupts
.9 plp file i/o error. restore interrupts.
sec
rts
*--------------------------------------
.DO LOWERCASE=1
XDOS.UnpackGBuf jsr XDOS.Pack.Init
.1 lda (zpt)
and #$0F
beq .6
ldy #$1D MIN_VERSION
lda (zpt),y
bpl .6 no lowercase information
lda (zpt)
and #$0F
tay
.2 cpy #8 CS if MIN_VERSION to use
phy
bcs .3
ldy #$1D MIN_VERSION
lda (zpt),y
ply
and whichbit,y
beq .5
bra .4
.3 ldy #$1C VERSION
lda (zpt),y
ply
and whichbit-8,y
beq .5
.4 lda (zpt),y
eor #$20 to lowercase
sta (zpt),y
.5 dey
bne .2
.6 jsr XDOS.Pack.Next
dex
bne .1
rts
*--------------------------------------
XDOS.PackGBuf jsr XDOS.Pack.Init
.1 lda (zpt)
and #$0F
beq .6
stz XDOS.PackGBuf.Bitmap
stz XDOS.PackGBuf.Bitmap+1
tay
.2 lda (zpt),y
cmp #'A'
bcc .5
cmp #'Z'+1
bcs .5
eor #$20 to uppercase
sta (zpt),y
cpy #8 CS if MIN_VERSION to use
bcs .3
lda whichbit,y
tsb XDOS.PackGBuf.Bitmap
bra .4
.3 lda whichbit-8,y
tsb XDOS.PackGBuf.Bitmap+1
.4 lda #$80
tsb XDOS.PackGBuf.Bitmap+1
.5 dey
bne .2
ldy #$1C VERSION
lda XDOS.PackGBuf.Bitmap
sta (zpt),y
iny MIN_VERSION
lda XDOS.PackGBuf.Bitmap+1
sta (zpt),y
.6 jsr XDOS.Pack.Next
dex
bne .1
rts
*--------------------------------------
XDOS.Pack.Init lda #4
sta zpt
lda /gbuf
sta zpt+1
ldx h_maxent
beq *
rts
*--------------------------------------
XDOS.Pack.Next lda h_entln
clc
adc zpt
sta zpt
bcc .8
inc zpt+1
.8 rts
XDOS.PackGBuf.Bitmap .BS 2
.FIN
*--------------------------------------
XDOS.GetMark ldx fcbptr index to open fcb.

View File

@ -137,7 +137,11 @@ L4723 lda FCBs,y note: this code depends on the defined
lda d_head read the directory header for this file
ldx d_head+1
.DO LOWERCASE=1
jsr XDOS.ReadGBufAXDir
.ELSE
jsr XDOS.ReadGBufAX into the general purpose buffer.
.FIN
bcs L46E6 if error.
jsr movhed0 move header info.
@ -604,7 +608,11 @@ XDOS.ACL jsr XDOS.FindDirOrVol
dex
bpl .1
.DO LOWERCASE=1
jmp XDOS.WriteGBufDir
.ELSE
jmp XDOS.WriteGBuf
.FIN
.2 ldy #S.FIEX.ACL+7+3
@ -784,61 +792,19 @@ L4ABE lda pathbuf,y move local name to dir entry workspace.
jsr XDOS.UpdateHdr
bcs L4A74
L4AF0 .DO LOWERCASE=1
jsr XDOS.LC2UCBM
.FIN
jmp drevise1 end by updating all path directories.
L4AF0 jmp drevise1 end by updating all path directories.
*--------------------------------------
XDOS.UpdateHdr .DO LOWERCASE=1
stz gbuf+$20 VERSION
stz gbuf+$21 MIN VERSION
XDOS.UpdateHdr ldx #$00
ldx #$00
.1 sta gbuf+4,x
.1 sta gbuf+4,x
inx
iny
lda pathbuf,y
beq .8
cmp #'a'
bcc .1
cmp #'z'+1
bcs .1
pha
cpx #8
bcs .2
lda whichbit,x
tsb gbuf+$21
bra .3
.2 lda whichbit-8,x
tsb gbuf+$20
.3 lda #$80
tsb gbuf+$21
pla
eor #$20
bra .1
.8 jmp XDOS.WriteGBuf write changed header block.
bne .1
.DO LOWERCASE=1
jmp XDOS.WriteGBufDir
.ELSE
ldx #$00
L4AF5 sta gbuf+4,x
inx
iny
lda pathbuf,y
bne L4AF5
jmp XDOS.WriteGBuf write changed header block.
.FIN
*--------------------------------------

View File

@ -114,7 +114,11 @@ L4BCF cmp #$D0 is this a directory file ?
bne L4C1Abis if so, access error.
L4BF6 sta gbuf+4 make it an invalid subdirectory
.DO LOWERCASE=1
jsr XDOS.WriteGBufDir
.ELSE
jsr XDOS.WriteGBuf
.FIN
bcs L4C1A
L4BFE lda gbuf+2 get forward link.
@ -602,42 +606,6 @@ L4EB8 lda (usrbuf),y move all 4 pages of the buffer to
cmembit.CLCRTS
clc no errors
L4EC7 rts
*--------------------------------------
.DO LOWERCASE=1
XDOS.LC2UCBM stz d_sosver
stz d_comp
lda d_stor
and #$0F
tay
.1 lda d_stor,y
cmp #'a'
bcc .4
cmp #'z'+1
bcs .4
eor #$20
sta d_stor,y
cpy #8
bcs .2
lda whichbit,y
tsb d_comp
bra .3
.2 lda whichbit-8,y
tsb d_sosver
.3 lda #$80
tsb d_comp
.4 dey
bne .1
rts
.FIN
*--------------------------------------
XDOS.IsValidChar
cmp #'0'
@ -666,39 +634,6 @@ XDOS.IsValidFirstChar.RTS
XDOS.IsValidFirstChar.SEC
sec
rts
*--------------------------------------
.DO LOWERCASE=1
XDOS.GetVolNameCharGBufY
bit gbuf+$21
bpl .8
cpy #8
bcs .2
lda whichbit,y
bit gbuf+$21
beq .8
bra .7
.2 lda whichbit-8,y
bit gbuf+$20
beq .8
.7 lda gbuf+4,y
jmp XDOS.ToLower
.8 lda gbuf+4,y
rts
.FIN
*--------------------------------------
.DO LOWERCASE=1
XDOS.ToLower cmp #'A'
bcc .8
cmp #'Z'+1
bcs .8
eor #$20
.8 rts
.FIN
*--------------------------------------
* move 3 pages of dispatcher from 'displc2' to 'dispadr'
* this move routine must be resident above $E000 at all times