From 570daa7f231d549a947f59aacfc87cdd2fa616ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Fri, 18 Sep 2020 17:06:12 +0200 Subject: [PATCH] Kernel 0.94 --- ProDOS.FX/ProDOS.S.XDOS.A.txt | 60 +++++++++-------- ProDOS.FX/ProDOS.S.XDOS.C.txt | 113 ++++++++++++++++---------------- ProDOS.FX/ProDOS.S.XDOS.D.txt | 35 +++++----- ProDOS.FX/ProDOS.S.XDOS.E.txt | 118 +++++++++++++++++++--------------- ProDOS.FX/ProDOS.S.XDOS.F.txt | 24 +++---- ProDOS.FX/ProDOS.S.txt | 11 ++-- 6 files changed, 188 insertions(+), 173 deletions(-) diff --git a/ProDOS.FX/ProDOS.S.XDOS.A.txt b/ProDOS.FX/ProDOS.S.XDOS.A.txt index 954062f1..ade1bfa7 100644 --- a/ProDOS.FX/ProDOS.S.XDOS.A.txt +++ b/ProDOS.FX/ProDOS.S.XDOS.A.txt @@ -251,9 +251,10 @@ sysdeath1 tax death error code. adc #$06 inc to alpha a-f .3 ldy #deathmsg.LEN + ora #$80 sta $400,y - lda #' ' + lda #" " .4 iny sta $400,y @@ -284,7 +285,7 @@ XDOS.bfmgr lda XDOS.CmdFlags,x translate into command address. nopath asl cmdtemp test for refnum processing bcc nopreref - jsr findfcb set pointers to fcb and vcb of file + jsr XDOS.GetFCB set pointers to fcb and vcb of file bcs errorsys nopreref asl cmdtemp check for necessity of time stamp @@ -504,11 +505,11 @@ H33B3 inx gotprfx clc no error rts *-------------------------------------- -findfcb ldy #$01 index to ref# +XDOS.GetFCB ldy #$01 index to ref# lda (A3L),y is it a valid file# ? beq badref must not be 0. - cmp #$09 must be 1 to 8 only. + cmp #FCB.MAX+1 bcs badref pha @@ -518,35 +519,41 @@ findfcb ldy #$01 index to ref# ror ror multiply by 32. sta fcbptr used as an index to fcb - tay + tax pla restore ref# in acc - cmp FCBs,y + cmp FCBs+FCB.ID,x bne errnoref +*-------------------------------------- +XDOS.GetFCBBufX lda FCBs+FCB.BUFID,x get page address of file buffer. + + tay index into global buffer table. + lda buftbl-1,y + sta bufaddrh -fndfcbuf lda FCBs+FCB.BUFID,y get page address of file buffer. - jsr getbufadr get file's address into bufaddrl,h - ldx bufaddrh (y=fcbptr preserved) beq fcbdead fcb corrupted - stx datptr+1 save ptr to data area of buffer - inx - inx index block always 2 pages after data - stx zpt+1 + sta datptr+1 save ptr to data area of buffer + inc + inc index block always 2 pages after data + sta zpt+1 - lda FCBs+FCB.DEVID,y also set up device # - sta devnum - lda bufaddrl + lda buftbl-2,y ???? ALWAYS 0 + + sta bufaddrl sta datptr index and data buffers always on sta zpt page boundaries. + lda FCBs+FCB.DEVID,x also set up device # + sta devnum + lda #VCB0 -fndfvol tax search for associated vcb - lda VCBs+VCB.DEV,x - cmp FCBs+FCB.DEVID,y is this vcb the same device? +fndfvol tay search for associated vcb + lda VCBs+VCB.DEV,y + cmp FCBs+FCB.DEVID,x is this vcb the same device? beq tstvopen if it is, make sure volume is active. -nxtfvol txa adjust index to next vcb. +nxtfvol tya adjust index to next vcb. clc adc #VCB bcc fndfvol loop until volume found. @@ -555,16 +562,17 @@ nxtfvol txa adjust index to next vcb. .HS 2C BIT ABS fcbdead lda #$0B fcb error so + jsr sysdeath kill the system. -tstvopen lda VCBs,x make sure this vcb is open. +tstvopen lda VCBs,y make sure this vcb is open. beq nxtfvol branch if it is not active. - stx vcbptr save ptr to good vcb. - clc no error - rts -errnoref lda #$00 put a zero into this fcb to - sta FCBs,y show free fcb. + sty vcbptr save ptr to good vcb. + clc no error + rts Y = VCBPtr, X = FCBPtr + +errnoref stz FCBs,x badref lda #MLI.E.BADREF requested refnum is sec illegal (out of range) diff --git a/ProDOS.FX/ProDOS.S.XDOS.C.txt b/ProDOS.FX/ProDOS.S.XDOS.C.txt index 6adf77eb..3e7ed016 100644 --- a/ProDOS.FX/ProDOS.S.XDOS.C.txt +++ b/ProDOS.FX/ProDOS.S.XDOS.C.txt @@ -529,7 +529,7 @@ L3EA9 ldx levels be sure there is a top index plp restore z-flag. bne L3F18 go mark all as dummy. - jsr clrstats clr status bits 0,1,2 (index/data/alloc) + jsr XDOS.ClrFCBStatus clr status bits 0,1,2 (index/data/alloc) dex check for seed beq L3E89 if seed, check for position < 512. @@ -546,7 +546,7 @@ L3EA9 ldx levels be sure there is a top index L3ED4 rts -posindex jsr clrstats clr all alloc requirements for previous +posindex jsr XDOS.ClrFCBStatus clr all alloc requirements for previous jsr rfcbfst position. get highest level index block bcs L3ED4 @@ -599,7 +599,7 @@ L3F18 ldy fcbptr set status to show what's missing jsr zeroindex zero index block in user's i/o buffer bra svmark - +*-------------------------------------- zeroindex lda #$00 tay L3F30 sta (zpt),y zero out the index half of the user's @@ -614,7 +614,7 @@ L3F37 sta (zpt),y dec zpt+1 restore proper address rts - +*-------------------------------------- zipdata lda #$00 tay L3F42 sta (datptr),y zero out data area @@ -629,17 +629,17 @@ L3F49 sta (datptr),y dec datptr+1 rts - +*-------------------------------------- L3F51 sta bloknml get data block of new position lda (zpt),y (high address) dec zpt+1 rnewpos sta bloknml+1 - jsr rfcbdat + jsr XDOS.ReadFCB.DBLK bcs L3F86 if error. - jsr clrstats show whole chain is allocated. - + jsr XDOS.ClrFCBStatus show whole chain is allocated. +*-------------------------------------- svmark ldy fcbptr update position in fcb iny iny @@ -661,12 +661,6 @@ L3F68 lda FCBs+FCB.MARK,y save old mark in case calling routine sta sos+1 L3F86 rts carry set if error *-------------------------------------- -clrstats ldy fcbptr clear allocation states for data block - lda FCBs+FCB.F,y and both levels of indexes/ - and #$F8 - sta FCBs+FCB.F,y indicates that either they exist now - rts or unnecessary for current position. -*-------------------------------------- dirmark cmp #$0D is it a directory ? beq L3F9C yes... @@ -712,12 +706,13 @@ L3FD6 sec error. rts L3FD8 sta bloknml+1 - -* read file's data block - -rfcbdat lda #$01 read command +*-------------------------------------- +XDOS.ReadFCB.DBLK + lda #$01 read command sta A4L + ldx #datptr points at address of data buffer. + jsr fileio1 go do file input. bcs L3FF2 error. @@ -726,11 +721,16 @@ rfcbdat lda #$01 read command sta FCBs+FCB.DBLK,y save block # just read in fcb. lda bloknml+1 sta FCBs+FCB.DBLK+1,y -L3FF2 rts +* clc + +L3FF2 rts +*-------------------------------------- rfcbidx lda #$01 prepare to read index block : read command sta A4L - ldx #$48 address of current index buffer. + + ldx #zpt address of current index buffer. + jsr fileio1 go read index block. bcs L400C error @@ -826,37 +826,33 @@ L40AB lda #MLI.E.FCBFULL fcb full error. sec rts -L40AD ldy fcbptr get address of 1st free fcb found. - lda fcbflg if this byte <> 0 then free fcb found +L40AD lda fcbflg if this byte <> 0 then free fcb found beq L40AB and available for use. -L40B9 ldx #$1F assign fcb, + ldx fcbptr get address of 1st free fcb found. - lda #0 +L40B9 ldy #FCB -L40BD sta FCBs,y but clean it first. +L40BD stz FCBs,x but clean it first. + inx + dey + bne L40BD + + ldy #0 + + ldx fcbptr + +L40CB lda d_dev,y move ownership info. + sta FCBs+FCB.DEVID,x note: this code depends upon the defined + inx order of both the fcb and directory entry buffer. iny - dex - bpl L40BD - - lda #$06 start claiming it by moving in file info - tax using x as source index - ora fcbptr and y as destination (fcb). - tay - -L40CB lda d_dev-1,x move ownership info. - sta FCBs,y note: this code depends upon the defined - dey order of both the fcb and directory - dex entry buffer. + cpy #6 bne L40CB lda d_stor get storage type and - lsr strip off file name length - lsr by dividing by 16. - lsr - lsr + jsr XDOS.SetFCBSType tax save in x for later comparison - sta FCBs+FCB.STYPE,y and in fcb for future access. + lda d_attr get file's attributes and use it and #$03 as a default access request. cpx #$0D if directory, don't allow write enable. @@ -889,21 +885,23 @@ L4101 sta bloknml+1 of file and current usage count. bpl L4101 last loop stores hi address of 1st block sta bloknml and this is the low one. - ldy fcbptr + ldx fcbptr lda cntent this was set up by 'tstopen'. - sta FCBs,y claim fcb for this file. + sta FCBs,x claim fcb for this file. jsr alcbuffr go allocate buffer in memory tables. bcs L4147 if errors. - jsr fndfcbuf rtn addr of bufs in data & index ptrs. + ldx fcbptr + jsr XDOS.GetFCBBufX rtn addr of bufs in data & index ptrs. lda flevel mark level at which - sta FCBs+FCB.FLEVEL,y file was opened. - lda FCBs+FCB.STYPE,y file must be positioned at beginning. + sta FCBs+FCB.FLEVEL,x file was opened. + + lda FCBs+FCB.STYPE,x file must be positioned at beginning. cmp #$04 is it a tree file ? bcs L415E no, assume a directory. lda #$FF fool the position routine into giving - sta FCBs+FCB.MARK+2,y a valid position with preloaded data, + sta FCBs+FCB.MARK+2,x a valid position with preloaded data, ldy #$02 etc. set desired position to 0. lda #$00 @@ -918,28 +916,24 @@ L413C sta tposll,y L4147 pha save error code. ldx fcbptr free buffer space. + stz FCBs,x necessary to release fcb also. lda FCBs+FCB.BUFID,x beq L4156 if no bufnum, ok because never alloc'd. jsr relbuffr go release buffer. - ldx fcbptr -L4156 stz FCBs,x necessary to release fcb also. - pla error code. +L4156 pla error code. sec rts -L415E jsr rfcbdat read in 1st block of directory file. +L415E jsr XDOS.ReadFCB.DBLK read in 1st block of directory file. bcs L4147 return error after freeing buffer & fcb. L4163 ldx vcbptr index to vcb. inc VCBs+VCB.OFCNT,x add 1 to # of files currently open -* sec and indicate that this volume has at -* ror VCBs+VCB.OF,x least 1 file active. - - ldy fcbptr index to fcb. - lda FCBs,y return ref # to user. + ldx fcbptr index to fcb. + lda FCBs,x return ref # to user. ldy #$05 sta (A3L),y * clc open is successful @@ -956,7 +950,7 @@ L4188 tay index to next fcb. inc cntent -L4191 lda FCBs,y is this fcb in use ? +L4191 lda FCBs,y is this fcb in use ? bne L41A3 yes. txa if not, should we claim it ? @@ -972,7 +966,7 @@ L41A3 tya add offset to index to ownership info tay and put it back in y. ldx #$06 index to directory entry owner info. -L41A9 lda FCBs,y all bytes must match to say that it's +L41A9 lda FCBs,y all bytes must match to say that it's cmp d_dev-1,x the same file again. bne L41C1 if not, then next fcb. @@ -984,6 +978,7 @@ L41A9 lda FCBs,y all bytes must match to say that it's lda FCBs+FCB.ACCESS,y if it's already opened for write. and #$02 if so report file busy (with carry set). and #$02 if so report file busy (with carry set). beq L41C1 branch if this file is read access only. + sec rts diff --git a/ProDOS.FX/ProDOS.S.XDOS.D.txt b/ProDOS.FX/ProDOS.S.XDOS.D.txt index 8552d036..47faa420 100644 --- a/ProDOS.FX/ProDOS.S.XDOS.D.txt +++ b/ProDOS.FX/ProDOS.S.XDOS.D.txt @@ -41,7 +41,7 @@ L4210 jsr valdbuf validate user's data buffer range. cmp #$04 and find out if it's a tree or other. bcc L421F branch if a tree file - jmp dread otherwise assume it's a directory. + jmp XDOS.ReadDir otherwise assume it's a directory. L421F jsr rdposn set up data pointer. bcs L4202 errors. @@ -56,7 +56,7 @@ L421F jsr rdposn set up data pointer. beq L421F sta cmdtemp save bulk block count. - jsr gfcbstat make sure current data area doesn't + jsr XDOS.GetFCBStatus make sure current data area doesn't and #$40 need writing before resetting ptr to bne L421F read into user's area. branch if data @@ -251,17 +251,16 @@ fxdatptr lda datptr put current user buffer address back to normal sta usrbuf lda datptr+1 sta usrbuf+1 bank pair byte should be moved also. - ldy fcbptr restore buffer address - jmp fndfcbuf -* read directory file - -dread jsr rdposn + ldx fcbptr restore buffer address + jmp XDOS.GetFCBBufX +*-------------------------------------- +XDOS.ReadDir jsr rdposn bcs L43B8 pass back any errors. jsr preprw prepare for transfer. jsr readpart move data to user's buffer. - bvc dread repeat until request is satisfied. + bvc XDOS.ReadDir repeat until request is satisfied. jsr rwdone update fcb as to new position. bcc L43B6 branch if done with no errors. @@ -412,7 +411,7 @@ L4472 jsr mvdbufr move the user's buffer ptr to bfm zero L4479 jsr rdposn bcs L44A2 - jsr gfcbstat + jsr XDOS.GetFCBStatus and #$07 beq L44E9 @@ -427,7 +426,7 @@ L4487 iny indexes and data block ? jsr tstfrblk bcs L44A2 pass back any errors. - jsr gfcbstat now get more specific. + jsr XDOS.GetFCBStatus now get more specific. and #$04 are we lacking a tree top ? beq L44AC no, test for lack of sapling level index @@ -441,7 +440,7 @@ L44A2 pha save error. sec rts -L44AC jsr gfcbstat get status byte again. +L44AC jsr XDOS.GetFCBStatus get status byte again. and #$02 do we need a sapling level index block ? beq L44B8 no, assume it's just a data block needed @@ -451,10 +450,11 @@ L44AC jsr gfcbstat get status byte again. L44B8 jsr alcwblk go allocate for data block. bcs L44A2 - jsr gfcbstat clear allocation required bits in status - ora #$80 but first indicate index block is dirty. - and #$F8 - sta FCBs+FCB.F,y + jsr XDOS.ClrFCBStatus clear allocation required bits in status + + lda #FCB.F.IBLKMOD indicate index block is dirty. + jsr XDOS.SetFCBStatus + lda tposhi calculate position within index block. lsr lda tposlh @@ -467,6 +467,7 @@ L44B8 jsr alcwblk go allocate for data block. dec zpt+1 restore pointer to lower page of index lda scrtch block. get low block address. sta (zpt),y store low address. + ldy fcbptr update fcb to indicate that this block sta FCBs+FCB.DBLK,y is allocated. txa get high address again. @@ -646,11 +647,11 @@ alcwblk jsr alc1blk .9 rts *-------------------------------------- -tstwprot jsr gfcbstat check for 'never been modified' condition +tstwprot jsr XDOS.GetFCBStatus check for 'never been modified' condition and #$F0 bne tstwprot.8 ordinary rts if known write ok. - lda FCBs+FCB.DEVID,y get file's dev #. + lda FCBs+FCB.DEVID,x get file's dev #. sta devnum get current status of block device. twrprot1 sta unitnum make the device status call diff --git a/ProDOS.FX/ProDOS.S.XDOS.E.txt b/ProDOS.FX/ProDOS.S.XDOS.E.txt index 6c374f6b..80bb4e69 100644 --- a/ProDOS.FX/ProDOS.S.XDOS.E.txt +++ b/ProDOS.FX/ProDOS.S.XDOS.E.txt @@ -9,12 +9,12 @@ XDOS.Close ldy #$01 close all ? * lda #$00 start at the beginning. L4654 sta fcbptr save current low byte of pointer. - tay get the level at which the file - lda FCBs+FCB.FLEVEL,y was opened. + tax get the level at which the file + lda FCBs+FCB.FLEVEL,x was opened. cmp flevel if file's level is < global level bcc L4675 then don't close. - lda FCBs,y is this reference file open ? + lda FCBs+FCB.ID,x is this reference file open ? beq L4675 no, try next. jsr flush2 clean it out... @@ -39,8 +39,8 @@ L4675 lda fcbptr inc pointer to next fcb L4683 jsr flush1 flush file 1st (including updating bcs L46B6 bitmap). branch if errors. -close2 ldy fcbptr - lda FCBs+FCB.BUFID,y release file buffer +close2 ldx fcbptr + lda FCBs+FCB.BUFID,x release file buffer jsr relbuffr bcs L46B6 @@ -67,8 +67,8 @@ XDOS.Flush ldy #$01 flush all ? * lda #$00 start at the beginning. L46C3 sta fcbptr save current low byte of pointer. - tay index to ref #. - lda FCBs,y is this reference file open ? + tax index to ref #. + lda FCBs,x is this reference file open ? beq L46D1 no, try next. jsr flush2 clean it out... @@ -85,51 +85,53 @@ L46D9 clc sec report error now L46E0 rts - -flush2 jsr fndfcbuf must set up vcb & buffer locations 1st. +*-------------------------------------- +flush2 jsr XDOS.GetFCBBufX must set up vcb & buffer locations 1st. bcc L46F1 branch if no error. + L46E6 jmp glberr error so check for close or flush all. flush1 stz cferr for normal refnum flush, clear global error. - jsr findfcb setup pointer to fcb user references. + jsr XDOS.GetFCB setup pointer to fcb user references. bcs L46E6 return any errors. -L46F1 lda FCBs+FCB.ACCESS,y test to see if file is modified. +L46F1 lda FCBs+FCB.ACCESS,x test to see if file is modified. and #$02 is it write enabled ? beq L46D9 branch if 'read only' - lda FCBs+FCB.DIRTY,y has eof been modified ? + lda FCBs+FCB.DIRTY,x has eof been modified ? bmi L4704 if yes. - jsr gfcbstat has data been modified ? + jsr XDOS.GetFCBStatus has data been modified ? and #$70 (was written to while it's been open?) beq L46D9 if not. -L4704 jsr gfcbstat +L4704 jsr XDOS.GetFCBStatus and #$40 does current data buffer need to be beq L4710 written ? branch if not. jsr wfcbdat if so, go write it. bcs L46E6 if error. -L4710 jsr gfcbstat check to see if the index block (tree +L4710 jsr XDOS.GetFCBStatus check to see if the index block (tree and #$80 files only) needs to be written. beq L471C branch if not. jsr wfcbidx bcs L46E6 return any errors. -L471C lda #$06 prepare to update directory - tax - ora fcbptr - tay -L4723 lda FCBs,y note: this code depends on the defined - sta d_dev-1,x order of the file control block and the - dey temporary directory area in 'work space' - dex - bne L4723 +L471C ldx fcbptr + + lda FCBs+FCB.DEVID,x + sta devnum A = d_dev + ldy #0 - sta devnum +L4723 lda FCBs+FCB.DEVID,x note: this code depends on the defined + sta d_dev,y order of the file control block and the + inx temporary directory area in 'work space' + iny + cpy #6 + bne L4723 lda d_head read the directory header for this file ldx d_head+1 @@ -159,26 +161,27 @@ L4755 jsr entcalc set up pointer to entry. jsr moventry move entry to temp entry buffer in - ldy fcbptr 'work space'. update 'blocks used' count - lda FCBs+FCB.UBLK,y + ldx fcbptr 'work space'. update 'blocks used' count + lda FCBs+FCB.UBLK,x sta d_usage - lda FCBs+FCB.UBLK+1,y + lda FCBs+FCB.UBLK+1,x sta d_usage+1 - ldx #$00 and move in end of file mark whether + ldy #0 and move in end of file mark whether -L476C lda FCBs+FCB.EOF,y needed or not. - sta d_eof,x - inx - cpx #$03 move all 3 bytes +L476C lda FCBs+FCB.EOF,x needed or not. + sta d_eof,y + iny + cpy #$03 move all 3 bytes beq L4780 - lda FCBs+FCB.1stBLK,y also move in the address of the file's - sta d_filid,x first block since it might have changed - iny since the file first opened. + lda FCBs+FCB.1stBLK,x also move in the address of the file's + sta d_filid,y first block since it might have changed + inx since the file first opened. bne L476C branch always. -L4780 lda FCBs+FCB.STYPE-2,y the last thing to update is storage +L4780 ldx fcbptr + lda FCBs+FCB.STYPE,x the last thing to update is storage asl type (y=fcbptr+2). shift into high asl nibble. asl @@ -219,14 +222,27 @@ glberr ldy #$01 L47C1 pla rts - -gfcbstat ldy fcbptr index to fcb. - lda FCBs+FCB.F,y return status byte. +*-------------------------------------- +XDOS.SetFCBSType + lsr + lsr + lsr + lsr + ldy fcbptr and save it in fcb. + sta FCBs+FCB.STYPE,y + rts +*-------------------------------------- +XDOS.ClrFCBStatus + ldy fcbptr clear allocation states for data block + lda FCBs+FCB.F,y and both levels of indexes/ + and #$F8 + sta FCBs+FCB.F,y indicates that either they exist now + rts or unnecessary for current position. +*-------------------------------------- +XDOS.GetFCBStatus + ldx fcbptr index to fcb. + lda FCBs+FCB.F,x return status byte. rts - -L47CA lda #MLI.E.LOCKED access error - sec -L47CD rts *-------------------------------------- XDOS.SetFCBStatus ldx fcbptr @@ -234,6 +250,10 @@ XDOS.SetFCBStatus sta FCBs+FCB.F,x rts *-------------------------------------- +L47CA lda #MLI.E.LOCKED access error + sec +L47CD rts +*-------------------------------------- XDOS.SetEOF jsr gfcbstyp can only move end of tree, sapling or seed. cmp #$04 tree type ? bcs L47CA if not then access error @@ -386,13 +406,9 @@ L48C2 lda firstbl,x bne L48C2 without disturbing carry. lda stortyp get possibly modified storage type - lsr - lsr - lsr - lsr - ldy fcbptr and save it in fcb. - sta FCBs+FCB.STYPE,y - jsr clrstats make it look as though position has + jsr XDOS.SetFCBSType + + jsr XDOS.ClrFCBStatus make it look as though position has jsr dvcbrev nothing allocated, update total blocks ldy fcbptr in fcb and correct position. iny diff --git a/ProDOS.FX/ProDOS.S.XDOS.F.txt b/ProDOS.FX/ProDOS.S.XDOS.F.txt index 1c4fc268..e33b43a0 100644 --- a/ProDOS.FX/ProDOS.S.XDOS.F.txt +++ b/ProDOS.FX/ProDOS.S.XDOS.F.txt @@ -493,17 +493,13 @@ L4DFE dex set proper bits to 1 L4E1E lda #MLI.E.BADBUF buffer is in use or not legal sec rts - -getbufadr tax index into global buffer table. +*-------------------------------------- +relbuffr tax index into global buffer table. lda buftbl-2,x sta bufaddrl lda buftbl-1,x sta bufaddrh - rts - -relbuffr jsr getbufadr preserve buffer address in 'bufaddr' - tay returns high buffer address in acc. - beq L4E54 branch if unallocated buffer space. + beq relbuffr.8 branch if unallocated buffer space. stz buftbl-1,x take address out of buffer list. stz buftbl-2,x (x was set up by getbufadr) @@ -514,15 +510,15 @@ freebuf ldx bufaddrh get hi buffer address inx inx -L4E43 dex drop to next lower page. +.1 dex drop to next lower page. jsr cmembit get bit and position to memtable of eor #$FF this page. invert mask. and MEMTABL,y mark address as free space. sta MEMTABL,y cpx bufaddrh all pages freed ? - bne L4E43 no. + bne .1 no. -L4E54 clc no error. +relbuffr.8 clc no error. rts *-------------------------------------- * calculate memory allocation bit position. @@ -605,7 +601,7 @@ L4EB8 lda (usrbuf),y move all 4 pages of the buffer to inc usrbuf+1 dex bpl L4EB8 -cmembit.CLCRTS +XDOS.SetBuf.CLCRTS clc no errors L4EC7 rts *-------------------------------------- @@ -617,9 +613,9 @@ XDOS.IsValidChar XDOS.IsValidFirstChar .DO ENHFILENAME=1 cmp #'.' - beq cmembit.CLCRTS + beq XDOS.SetBuf.CLCRTS cmp #'_' - beq cmembit.CLCRTS + beq XDOS.SetBuf.CLCRTS .FIN cmp #'A' bcc XDOS.IsValidFirstChar.SEC @@ -817,7 +813,7 @@ whichbit .HS 8040201008040201 ofcbtbl .HS 0C0D1819151617 inftabl .HS 1E101F2080939421 .HS 22232418191A1B -deathmsg .AS "SYS ERR-$0" +deathmsg .AS -"SYS ERR-$0" deathmsg.LEN .EQ *-deathmsg *-------------------------------------- XDOS.DATA .DUMMY diff --git a/ProDOS.FX/ProDOS.S.txt b/ProDOS.FX/ProDOS.S.txt index 400b7d31..26cdb6ca 100644 --- a/ProDOS.FX/ProDOS.S.txt +++ b/ProDOS.FX/ProDOS.S.txt @@ -132,14 +132,13 @@ pathbuf .EQ $D700 XDOS.ClockDrv .EQ $D742 prefixbuf .EQ $D742+125 *-------------------------------------- +FCB.MAX .EQ 8 FCBs .EQ $D800 FCB.ID .EQ 0 -FCB.DEVID .EQ 1 - - - - - +FCB.DEVID .EQ 1 d_dev -> d_dev+5 +FCB.DIRHBLK .EQ 2 2 bytes +FCB.DIREBLK .EQ 4 2 bytes +FCB.DIRENUM .EQ 6 FCB.STYPE .EQ 7 FCB.F .EQ 8 FCB.F.STMOD .EQ %00001000