ProDOS.FX 8M (required for KRNL8M)

This commit is contained in:
burniouf 2023-11-04 15:42:28 +01:00
parent a8cf411cd7
commit e65065228c
72 changed files with 6963 additions and 2459 deletions

Binary file not shown.

View File

@ -21,21 +21,21 @@ A2osX.QC.Start1 sei
txs
cli
bit RROMBNK1
bit IO.RROMBNK1
>LDYAI A2osX.QC
>STYA POWERUP
jsr SETPWRC
>STYA ROM.PWREDUP
jsr ROM.SETPWRC
lda #$01
sta MEMTABL+$17 protect ProDOS MLI Page
sta GP.MEMTABL+$17 protect ProDOS MLI Page
ldx #$16
.1 stz MEMTABL,x Reset ProDOS memory bitmap
.1 stz GP.MEMTABL,x Reset ProDOS memory bitmap
dex
bne .1
lda #$CF protect zero page, stack and page 1
sta MEMTABL
sta GP.MEMTABL
lda #$8C Reset 80 col screen ($0C=FF=HOME)
jsr $C300
@ -164,7 +164,7 @@ A2osX.QC.JMP >DEBUGOA
jmp $2000
*--------------------------------------
A2osX.QC.SetPFX jsr MLI
.DA #MLISETPREFIX
.DA #MLI.SETPREFIX
.DA MLISETPREFIX03
rts
*--------------------------------------
@ -177,7 +177,7 @@ A2osX.QC.Load >LDYAI MSG.LOAD
jsr A2osX.QC.PrintYA
jsr MLI
.DA #MLIOPEN
.DA #MLI.OPEN
.DA MLIOPEN03
bcs .9
@ -186,13 +186,13 @@ A2osX.QC.Load >LDYAI MSG.LOAD
sta MLICLOSE03+1
jsr MLI
.DA #MLIREAD
.DA #MLI.READ
.DA MLIREAD03
php
pha
jsr MLI
.DA #MLICLOSE
.DA #MLI.CLOSE
.DA MLICLOSE03
pla
@ -204,8 +204,8 @@ A2osX.QC.Load >LDYAI MSG.LOAD
clc
jsr A2osX.QC.PrintYA
pla
jsr PRBYTE
jsr CROUT
jsr ROM.PRBYTE
jsr ROM.CROUT
sec
rts
@ -227,7 +227,7 @@ A2osX.QC.PrintYA
.1 lda (TmpPtr1),y
ora #$80
jsr COUT
jsr ROM.COUT
iny
dex
bne .1
@ -235,7 +235,7 @@ A2osX.QC.PrintYA
.9 plp
bcc .99
jsr CROUT
jsr ROM.CROUT
.99 rts
*--------------------------------------

View File

@ -8,7 +8,7 @@ NEW
.INB inc/macros.i
.INB inc/a2osx.i
.INB inc/io.i
.INB inc/monitor.i
.INB inc/rom.ii.i
.INB inc/mli.i
.INB inc/mli.e.i
.INB inc/zp.i
@ -55,15 +55,15 @@ A2osX.Init0 >LDYAI $2000
*--------------------------------------
A2osX.Init1 ldx #$FF init 6502 stack to highest
txs
bit RROMBNK1
jsr HOME
bit IO.RROMBNK1
jsr ROM.HOME
>LDYAI MSG.INIT0
jsr PrintFYA
>LDYAI MSG.SYSMEM
jsr PrintFYA
lda MACHID
lda GP.MACHID
and #MACHID.M
cmp #MACHID.M.128
beq A2osX.Init1.128
@ -72,7 +72,7 @@ A2osX.Init1 ldx #$FF init 6502 stack to highest
bra *
*--------------------------------------
A2osX.Init1.128 jsr MLI
.DA #MLIGETPREFIX
.DA #MLI.GETPREFIX
.DA MLIGETPREFIX01
bcs *
@ -120,10 +120,10 @@ A2osX.Init1.128 jsr MLI
.2 >LDYAI MSG.CPU.OK
jsr PrintFYA
stz LEVEL Back To FILE LEVEL 0
stz GP.FLEVEL Back To FILE LEVEL 0
jsr MLI Make sure all files are closed
.DA #MLICLOSE
.DA #MLI.CLOSE
.DA MLICLOSE01
bcs *
*--------------------------------------
@ -146,8 +146,8 @@ A2osX.RamDrv >LDYAI MSG.RAMDRV
.8 jsr PrintFYA
*--------------------------------------
A2osX.SetupQC lda RRAMWRAMBNK2
lda RRAMWRAMBNK2
A2osX.SetupQC lda IO.RRAMWRAMBNK2
lda IO.RRAMWRAMBNK2
ldx #0
.1 lda A2osX.QC.B.Start,x Still at $2xxx !!! not moved to $1xxx
@ -159,7 +159,7 @@ A2osX.SetupQC lda RRAMWRAMBNK2
inx
bne .1
lda RROMBNK1
lda IO.RROMBNK1
*--------------------------------------
A2osX.EnumPM >LDYAI MSG.PMENUM do this After SetupQC, a PM could override QC
jsr PrintFYA
@ -172,7 +172,7 @@ A2osX.MLIQuit >LDYAI MSG.INIT0OK
stz $280 Quit to A2osX
jsr MLI
.DA #MLIQUIT
.DA #MLI.QUIT
.DA MLIQUIT01
bra *
*--------------------------------------
@ -191,7 +191,7 @@ A2osX.Screen80 lda #$8C Reset 80 col screen ($0C:HOME)
stx Logo.Filename
jsr MLI
.DA #MLIOPEN
.DA #MLI.OPEN
.DA MLIOPEN00
bcs .99
@ -199,7 +199,7 @@ A2osX.Screen80 lda #$8C Reset 80 col screen ($0C:HOME)
sta MLIREAD00+1
sta MLICLOSE00+1
jsr MLI
.DA #MLIREAD
.DA #MLI.READ
.DA MLIREAD00
bcs .98
@ -207,30 +207,31 @@ A2osX.Screen80 lda #$8C Reset 80 col screen ($0C:HOME)
bra A2osX.ScreenDLGR
.98 jsr MLI
.DA #MLICLOSE
.DA #MLI.CLOSE
.DA MLICLOSE00
.99 rts
*--------------------------------------
A2osX.ScreenDLGR
lda #20
sta WNDTOP
sta CV
jsr VTAB
sta ZP.WNDTOP
sta ZP.CV
jsr ROM.VTAB
sta SETALTCHAR
sta CLRHIRES
sta SETMIXED
sta SET80DISP
sta SET80STORE
sta CLRPAGE2
sta IO.SETALTCHAR
sta IO.CLRHIRES
sta IO.SETMIXED
sta IO.SET80DISP
sta IO.SET80STORE
sta IO.CLRPAGE2
bit RDIOUDIS
sta SETIOUDIS
sta SETDHIRES
bit IO.RDIOUDIS
sta IO.SETIOUDIS
sta IO.SETDHIRES
bmi .10
sta CLRIOUDIS
.10 sta CLRTEXT
sta IO.CLRIOUDIS
.10 sta IO.CLRTEXT
lda #A2osX.LOGOLOAD+S.BM
sta TmpPtr1
@ -255,7 +256,7 @@ A2osX.ScreenDLGR
tax
lda PALETTE.AUX,x
sta SETPAGE2
sta IO.SETPAGE2
sta (TmpPtr2),y
pla
@ -265,7 +266,7 @@ A2osX.ScreenDLGR
lsr
tax
lda PALETTE.MAIN,x
sta CLRPAGE2
sta IO.CLRPAGE2
sta (TmpPtr2),y
iny
@ -292,7 +293,7 @@ A2osX.ScreenDLGR
asl
asl
asl
sta SETPAGE2
sta IO.SETPAGE2
ora (TmpPtr2),y
sta (TmpPtr2),y
@ -307,7 +308,7 @@ A2osX.ScreenDLGR
asl
asl
asl
sta CLRPAGE2
sta IO.CLRPAGE2
ora (TmpPtr2),y
sta (TmpPtr2),y
@ -332,17 +333,17 @@ A2osX.ScreenDLGR
*--------------------------------------
DisableRamDRV php
sei
lda DEVPTRS3D2
cmp DEVPTRS S0D1=NOVEV
lda GP.DEVPTRS3D2
cmp GP.DEVPTRS S0D1=NOVEV
bne .1
lda DEVPTRS3D2+1
cmp DEVPTRS+1 S0D1=NODEV
lda GP.DEVPTRS3D2+1
cmp GP.DEVPTRS+1 S0D1=NODEV
beq .9 S3D2=NODEV, nothing to do
.1 ldx DEVCNT
.1 ldx GP.DEVCNT
.2 lda DEVLST,x LOOKING FOR $BF, $BB, $B7, $B3
.2 lda GP.DEVLST,x LOOKING FOR $BF, $BB, $B7, $B3
and #$F3
cmp #$B3
beq .3
@ -356,26 +357,26 @@ DisableRamDRV php
sec
rts
.3 cpx DEVCNT
.3 cpx GP.DEVCNT
beq .5
.4 lda DEVLST+1,x
sta DEVLST,x
.4 lda GP.DEVLST+1,x
sta GP.DEVLST,x
inx
cpx DEVCNT
cpx GP.DEVCNT
bne .4
.5 ldx DEVCNT
stz DEVLST,x
dec DEVCNT
lda DEVPTRS
sta DEVPTRS3D2
lda DEVPTRS+1
sta DEVPTRS3D2+1
.5 ldx GP.DEVCNT
stz GP.DEVLST,x
dec GP.DEVCNT
lda GP.DEVPTRS
sta GP.DEVPTRS3D2
lda GP.DEVPTRS+1
sta GP.DEVPTRS3D2+1
plp
jsr MLI
.DA #MLIONLINE
.DA #MLI.ONLINE
.DA MLIONLINE01
clc Success!!
rts
@ -411,12 +412,12 @@ EnumPM ldx #0
jsr PrintFYA
jsr MLI
.DA #MLISETPREFIX
.DA #MLI.SETPREFIX
.DA MLISETPREFIX02
bcs .19
jsr MLI
.DA #MLIOPEN
.DA #MLI.OPEN
.DA MLIOPEN01
bcc .10
@ -431,7 +432,7 @@ EnumPM ldx #0
sta MLICLOSE01+1
.2 jsr MLI
.DA #MLIREAD
.DA #MLI.READ
.DA MLIREAD01
bcs .98
@ -496,12 +497,12 @@ EnumPM ldx #0
rts
.8 jsr MLI
.DA #MLICLOSE
.DA #MLI.CLOSE
.DA MLICLOSE01
bcs .99
jsr MLI
.DA #MLISETPREFIX
.DA #MLI.SETPREFIX
.DA MLISETPREFIX01
.99 rts
@ -559,7 +560,7 @@ LoadPM ldy #$1c
jsr PrintFYA
jsr MLI
.DA #MLIOPEN
.DA #MLI.OPEN
.DA MLIOPEN02
bcs .99
@ -568,7 +569,7 @@ LoadPM ldy #$1c
sta MLICLOSE02+1
jsr MLI
.DA #MLIREAD
.DA #MLI.READ
.DA MLIREAD02
bcs .98
@ -583,7 +584,7 @@ LoadPM ldy #$1c
rts
.9 jsr MLI
.DA #MLICLOSE
.DA #MLI.CLOSE
.DA MLICLOSE02
.99 rts
*--------------------------------------

698
BIN/ARC.S.txt Normal file
View File

@ -0,0 +1,698 @@
NEW
AUTO 3,1
.LIST OFF
.OP 65C02
.OR $2000
.TF bin/arc
*--------------------------------------
.INB inc/macros.i
.INB inc/a2osx.i
.INB inc/kernel.i
.INB inc/arc.i
.INB inc/mli.e.i
*--------------------------------------
X.ENTER.SUBDIR .EQ 0
X.COPY.TO.DEST .EQ 0
X.DELETE.SOURCE .EQ 0
X.RESET.SRC.DIR .EQ 0 single pass
*--------------------------------------
DBG .EQ 1
*--------------------------------------
.DUMMY
.OR ZPBIN
ZS.START
ZPPtr1 .BS 2
ZPPtr2 .BS 2
ZPFileName .BS 2
ZPFileStat .BS 2
ZPFullPath .BS 2
ZPRelPath .BS 2
bAppend .BS 1
bRecurse .BS 1
bPause .BS 1
ZPAlg .BS 1
ZPInBufPtr .BS 2
ZPOutBufPtr .BS 2
ZPBackPtr .BS 2
ZPStrPtr .BS 2
ZS.END .ED
*--------------------------------------
* File Header (16 Bytes)
*--------------------------------------
CS.START cld
jmp (.1,x)
.DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1
.DA 0
.DA CS.END-CS.START Code Size (without Constants)
.DA DS.END-DS.START Data SegmentSize
.DA #64 Stack Size
.DA #ZS.END-ZS.START Zero Page Size
.DA 0
*--------------------------------------
* Relocation Table
*--------------------------------------
.1 .DA CS.INIT
.DA CS.RUN
.DA CS.DOEVENT
.DA CS.QUIT
L.MSG.USAGE .DA MSG.USAGE
L.MSG.DIR .DA MSG.DIR
L.MSG.FILE .DA MSG.FILE
L.MSG.OK .DA MSG.OK
L.MSG.ERR .DA MSG.ERR
L.MSG.E.IARC .DA MSG.E.IARC
L.ARC.Header .DA ARC.Header
.DO DBG
L.MSG.DBG1 .DA MSG.DBG1
L.MSG.DBG2 .DA MSG.DBG2
L.MSG.DBG3 .DA MSG.DBG3
.FIN
.DA 0
*--------------------------------------
CS.INIT clc
rts
*--------------------------------------
CS.RUN >INC.G ArgIndex
>SYSCALL ArgV
bcs .8
>STYA ZPPtr1
lda (ZPPtr1)
cmp #'-'
bne .4
jsr CS.RUN.CheckOpt
bcs .9
bne CS.RUN
>INC.G ArgIndex -X
>SYSCALL ArgV
bcs .9
>SYSCALL StrDup
bcs .9
txa
>STA.G hIgnore
bra CS.RUN
.9 >LDYA L.MSG.USAGE
>SYSCALL PutS
lda #E.SYN
sec
.99 rts
*--------------------------------------
.4 >LDA.G ArcName
bne .5
>LDA.G ArgIndex
>STA.G ArcName
bra CS.RUN
.5 >LDA.G hSrcBasePath
bne .9
>LDYA ZPPtr1
jsr X.InitSrcDirYA
bcc CS.RUN
rts
.8 >LDA.G ArcName
beq .9
>LDA.G hSrcBasePath
beq .9
*--------------------------------------
>LDYAI 256
>SYSCALL GetMem
bcs .99
>STYA ZPFullPath
txa
>STA.G hSrcFullPath
>LDA.G hSrcBasePath
>SYSCALL GetMemPtr
>STYA ZPPtr1
ldy #$ff
.80 iny
lda (ZPPtr1),y
bne .80
tya
clc
adc ZPFullPath
sta ZPRelPath
lda ZPFullPath+1
adc #0
sta ZPRelPath+1
jsr CS.RUN.OpenArc
.98 bcs .99
>LDYAI CHNK.SIZE
>SYSCALL GetMem
bcs .98
>STYA ZPInBufPtr
txa
>STA.G hSrcBuf
>LDYAI CHNK.SIZE
>SYSCALL GetMem
bcs .98
>STYA ZPOutBufPtr
txa
>STA.G hDstBuf
*--------------------------------------
CS.RUN.LOOP ldy #S.PS.hStdIn
lda (pPS),y
>SYSCALL FEOF
bcs .99
tay
bne .1
>SYSCALL GetChar
bcs .99
cmp #$03 Ctrl-C
beq .99 Abort....
cmp #$13 Ctrl-S
bne .1
lda bPause
eor #$ff
sta bPause
bne CS.RUN.LOOP
.1 lda bPause
bne CS.RUN.LOOP Pause...
*--------------------------------------
jsr X.GetEntry
bcs .9
jsr X.IncludeMatch
bcs .8 no match, skip....
jsr X.IgnoreMatch
bcc .8 match, skip
ldy #S.STAT.MODE+1
lda (ZPFileStat),y
and #$70
beq .6
cmp /S.STAT.MODE.DIR
bne .8
jsr CS.RUN.DIR
bcs .99
bra .8
.6 jsr CS.RUN.FILE
bcs .99
bra .8
.9 jsr X.LeaveSubDir
bcs .90
jsr X.BasePath..
.8 jsr X.GetNextEntry
jmp CS.RUN.LOOP
.90 lda #0
sec
.99 rts
*--------------------------------------
CS.RUN.DEV lda #E.BADPATH
sec
rts
*--------------------------------------
CS.RUN.DIR lda bRecurse
bpl .8
lda (ZPFileName)
cmp #'.'
bne .1
ldy #1
lda (ZPFileName),y
beq .8
cmp #'.'
bne .1
iny
lda (ZPFileName),y
beq .8
.1 jsr CS.RUN.BuildFilePath
>PUSHW L.MSG.DIR
>PUSHW ZPRelPath
>PUSHBI 2
>SYSCALL PrintF
bcs .9
jsr CS.RUN.WriteArcHdrDir
bcs .9
>LDYA ZPFileName
jsr X.EnterSubDirYA
.9 jmp CS.RUN.CheckErr
.8 clc
rts
*--------------------------------------
CS.RUN.FILE jsr CS.RUN.BuildFilePath
>PUSHW ZPFullPath
>LDA.G hArcFile
tay
lda FILEs.hName-1,y
>SYSCALL GetMemPtr
>PUSHYA
>SYSCALL StrCmp
bcc .8
>PUSHW L.MSG.FILE
>PUSHW ZPRelPath
>PUSHBI 2
>SYSCALL PrintF
bcs .9
jsr CS.RUN.WriteArcHdrFile
bcs .9
jsr CS.RUN.OpenFile
bcs .9
.1 lda #'.'
>SYSCALL PutChar
jsr CS.RUN.ReadFile
bcc .2
cmp #MLI.E.EOF
bne .4
jsr CS.RUN.CloseFile
bra .9
.2 jsr CS.RUN.Arc
bcs .3
jsr CS.RUN.WriteArcData
bcc .1
bra .4
.3 jsr CS.RUN.WriteSrcData
bcc .1
.4 pha
jsr CS.RUN.CloseFile
pla
sec
.9 jmp CS.RUN.CheckErr
.8 clc
rts
*--------------------------------------
CS.RUN.CheckErr bcs .1
>LDYA L.MSG.OK
>SYSCALL PutS
rts
.1 pha
>PUSHW L.MSG.ERR
pla
pha
>PUSHA
>PUSHBI 1
>SYSCALL PrintF
pla
sec
rts
*--------------------------------------
CS.RUN.BuildFilePath
>PUSHW ZPFullPath
>LDA.G hSrcBasePath
>SYSCALL GetMemPtr
>PUSHYA
>SYSCALL StrCpy
>PUSHW ZPFullPath
>PUSHW ZPFileName
>SYSCALL StrCat
rts
*--------------------------------------
CS.RUN.OpenFile >PUSHW ZPFullPath
>PUSHBI O.RDONLY
>PUSHBI 0 Type
>PUSHWZ Aux type
>SYSCALL FOpen
bcs .9
>STA.G hFile
.9 rts
*--------------------------------------
CS.RUN.ReadFile >PUSHB.G hFile
>PUSHW ZPInBufPtr
>PUSHWI CHNK.SIZE
>SYSCALL FRead
bcs .9
>STYA.G Shunk.SrcSize
.9 rts
*--------------------------------------
CS.RUN.CloseFile
>LDA.G hFile
>SYSCALL FClose
bcs .9
>STZ.G hFile
.9 rts
*--------------------------------------
CS.RUN.Arc >LDYA.G Shunk.SrcSize
jsr X.Arc
bcs .9
stx ZPAlg
>STYA.G Shunk.DstSize
.9 rts
*--------------------------------------
CS.RUN.OpenArc >LDA.G ArcName
>SYSCALL ArgV
>PUSHYA
bit bAppend
bmi CS.RUN.AppendArc
>PUSHBI O.CREATE+O.WRONLY
>PUSHBI $CF PAK
>PUSHWZ Aux type
>SYSCALL FOpen
bcs .9
>STA.G hArcFile
>PUSHB.G hArcFile
>PUSHW L.ARC.Header
>SYSCALL FPutS
.9
CS.RUN.OpenArc.RTS
rts
*--------------------------------------
CS.RUN.AppendArc
>PUSHBI O.RDWR+O.APPEND
>PUSHBI $CF PAK
>PUSHWZ Aux type
>SYSCALL FOpen
bcs CS.RUN.OpenArc.RTS
>STA.G hArcFile
>PUSHB.G hArcFile
>PUSHLZ
>PUSHBI SEEK.SET
>SYSCALL FSeek
bcs CS.RUN.OpenArc.RTS
>PUSHB.G hArcFile
>PUSHW ZPInBufPtr
>PUSHWI 3
>SYSCALL FRead
bcs .9
cpy #3
bne .99
dey
.2 lda ARC.Header,y
cmp (ZPInBufPtr),y
bne .99
dey
bpl .2
>PUSHB.G hArcFile
>PUSHLZ
>PUSHBI SEEK.END
>SYSCALL FSeek
.9 rts
.99 >LDYA L.MSG.E.IARC
>SYSCALL PutS
lda #E.SYN
sec
rts
*--------------------------------------
CS.RUN.WriteArcHdrDir
lda #CHNK.T.DIR
jsr CS.RUN.WriteArcByteA
bcc CS.RUN.WriteArcHdr
rts
CS.RUN.WriteArcHdrFile
lda #CHNK.T.FILE
jsr CS.RUN.WriteArcByteA
bcs CS.RUN.WriteArcHdr.9
ldy #S.STAT.P.TYPE
jsr CS.RUN.WriteArcByteY
bcs CS.RUN.WriteArcHdr.9
ldy #S.STAT.P.AUXTYPE
jsr CS.RUN.WriteArcByteY
bcs CS.RUN.WriteArcHdr.9
ldy #S.STAT.P.AUXTYPE+1
jsr CS.RUN.WriteArcByteY
bcs CS.RUN.WriteArcHdr.9
CS.RUN.WriteArcHdr
ldy #$ff
.1 iny
lda (ZPRelPath),y
bne .1
tya
jsr CS.RUN.WriteArcByteA
bcs CS.RUN.WriteArcHdr.9
>PUSHB.G hArcFile
>PUSHW ZPRelPath
>SYSCALL FPutS
CS.RUN.WriteArcHdr.9
rts
*--------------------------------------
CS.RUN.WriteSrcData
lda #CHNK.T.DATA
jsr CS.RUN.WriteArcByteA
bcs .9
>LDA.G Shunk.SrcSize
clc
adc #3
pha
>LDA.G Shunk.SrcSize+1
adc #0
sta ZPPtr1+1
pla
jsr CS.RUN.WriteArcByteA
bcs .9
lda ZPPtr1+1
jsr CS.RUN.WriteArcByteA
bcs .9
lda #0 NO COMPRESSION
jsr CS.RUN.WriteArcByteA
bcs .9
>LDA.G Shunk.SrcSize
jsr CS.RUN.WriteArcByteA
bcs .9
>LDA.G Shunk.SrcSize+1
jsr CS.RUN.WriteArcByteA
bcs .9
>PUSHB.G hArcFile
>PUSHW ZPInBufPtr
>PUSHW.G Shunk.SrcSize
>SYSCALL FWrite
.9 rts
*--------------------------------------
CS.RUN.WriteArcData
lda #CHNK.T.DATA
jsr CS.RUN.WriteArcByteA
bcs .9
>LDA.G Shunk.DstSize
jsr CS.RUN.WriteArcByteA
bcs .9
>LDA.G Shunk.DstSize+1
jsr CS.RUN.WriteArcByteA
bcs .9
>PUSHB.G hArcFile
>PUSHW ZPOutBufPtr
>PUSHW.G Shunk.DstSize
>SYSCALL FWrite
.9 rts
*--------------------------------------
CS.RUN.WriteArcByteY
lda (ZPFileStat),y
CS.RUN.WriteArcByteA
pha
>PUSHB.G hArcFile
pla
>PUSHA
>SYSCALL FPutC
rts
*--------------------------------------
CS.DOEVENT sec
rts
*--------------------------------------
CS.QUIT jsr X.LeaveSubDir
bcc CS.QUIT
ldy #hIgnore
jsr .7
ldy #hInclude
jsr .7
ldy #hSrcFullPath
jsr .7
ldy #hDstBuf
jsr .7
ldy #hSrcBuf
jsr .7
>LDA.G hArcFile
beq .1
>SYSCALL FClose
.1 clc
rts
.7 lda (pData),y
beq .8
>SYSCALL FreeMem
.8 rts
*--------------------------------------
CS.RUN.CheckOpt ldy #1
lda (ZPPtr1),y
ldx #OptionVars-OptionList-1
.1 cmp OptionList,x
beq .2
dex
bpl .1
sec
rts
.2 ldy OptionVars,x
beq .8
lda #$ff
sta 0,y
.8 clc
rts
*--------------------------------------
.INB usr/src/shared/x.fileenum.s
.INB usr/src/shared/x.arc.s
*--------------------------------------
OptionList .AS "AaRrXx"
OptionVars .DA #bAppend,#bAppend,#bRecurse,#bRecurse,#0,#0
*--------------------------------------
MSG.USAGE .CS "Usage : ARC Archive [File *,? wildcards allowed]\r\n"
.CS " -A : Append to archive\r\n"
.CS " -R : Recurse subdirectories\r\n"
.CZ " -X <*,? wildcards allowed> : exclude files \r\n"
MSG.OK .CZ "[OK]"
MSG.ERR .CZ "[%h]\r\n"
MSG.E.IARC .CZ "Invalid/corrupt archive"
MSG.DIR .CZ "Reading Dir:%s..."
MSG.FILE .CZ "Adding File:%s..."
ARC.Header .CZ "ARC"
.DO DBG
MSG.DBG1 .CS "\r\n\r\n ULEN:%6u Bits, T:%6u Bits, BL:%6u Bits, TBL:%6u Bits\r\n"
.CS " TopT :%5d, TopTBL :%5d\r\n"
.CZ " STR.Max :%5d, BLL.Max :%5d, BLO.Max :%5D\r\n"
MSG.DBG2 .CS " S.TB.Cnt :%5D, STR.TB.Cnt:%5D, BL.TB.Cnt :%5D\r\n"
.CS " STR.SL.Cnt:%5D, STR.LL.Cnt:%5D, Bits: %d/%d\r\n"
.CS " BLL.SL.Cnt:%5D, BLL.LL.Cnt:%5D, Bits: %d/%d,%d\r\n"
.CZ " %5D %5D %5D %5D %5D %5D %5D %5D %5D %5D %5D %5D\r\n"
MSG.DBG3 .CZ " Output : %6u Bits, %5D Bytes, Alg=%d\r\n"
.FIN
*--------------------------------------
.DUMMY
.OR 0
DS.START
ArgIndex .BS 1
ArcName .BS 1
hSrcFullPath .BS 1
hFile .BS 1
hArcFile .BS 1
hSrcBuf .BS 1
hDstBuf .BS 1
Shunk.SrcSize .BS 2
Shunk.DstSize .BS 2
.INB usr/src/shared/x.fileenum.g
DS.END
.ED
*--------------------------------------
MAN
SAVE usr/src/bin/arc.s
ASM

587
BIN/ARCME.S.txt Normal file
View File

@ -0,0 +1,587 @@
NEW
AUTO 3,1
.LIST OFF
.OP 65C02
.OR $2000
.TF bin/arcme
*--------------------------------------
.INB inc/macros.i
.INB inc/a2osx.i
.INB inc/kernel.i
.INB inc/mli.e.i
.INB inc/arc.i
*--------------------------------------
CHUNK.MAX .EQ 32
DBG .EQ 1
*--------------------------------------
.DUMMY
.OR ZPBIN
ZS.START
ZPSrcFileSize .BS 2
ZPDstTableOfs .BS 2
ZPChunkOfs .BS 2
ZPChunkLen .BS 2
hSrcBuf .BS 1
hDstBuf .BS 1
bPause .BS 1
hSrcFile .BS 1
hDstFile .BS 1
ZPChunkIndex .BS 1
ZPChunkCnt .BS 1
ZPAlg .BS 1
ZPChunkPakedLen .BS 2
ZPChunkNewOfs .BS 2
ZPInBufPtr .BS 2
ZPOutBufPtr .BS 2
ZPBackPtr .BS 2
ZPStrPtr .BS 2
ZS.END .ED
*--------------------------------------
* File Header (16 Bytes)
*--------------------------------------
CS.START cld
jmp (.1,x)
.DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1
.DA 0
.DA CS.END-CS.START Code Size (without Constants)
.DA DS.END-DS.START Data SegmentSize
.DA #64 Stack Size
.DA #ZS.END-ZS.START Zero Page Size
.DA 0
*--------------------------------------
* Relocation Table
*--------------------------------------
.1 .DA CS.INIT
.DA CS.RUN
.DA CS.DOEVENT
.DA CS.QUIT
L.MSG.USAGE .DA MSG.USAGE
L.MSG.SRCFILE .DA MSG.SRCFILE
L.MSG.CHUNK .DA MSG.CHUNK
L.MSG.STORED .DA MSG.STORED
.DA MSG.ARCEDT
.DA MSG.ARCEDBL
.DA MSG.ARCEDTBL
L.MSG.ARCED .DA MSG.ARCED
L.MSG.E.IARC .DA MSG.E.IARC
L.TAG .DA TAG
.DO DBG
L.MSG.DBG1 .DA MSG.DBG1
L.MSG.DBG2 .DA MSG.DBG2
L.MSG.DBG3 .DA MSG.DBG3
.FIN
.DA 0
*--------------------------------------
CS.INIT clc
rts
*--------------------------------------
CS.RUN ldy #S.PS.ARGC
lda (pPS),y
cmp #2
bne .9
jsr CS.RUN.CheckSrcFile
bcs .99
lda #2
>SYSCALL ArgV
>PUSHYA
>PUSHBI O.CREATE+O.WRONLY
>PUSHB.G STATBUF+S.STAT.P.TYPE
>PUSHW.G STATBUF+S.STAT.P.AUXTYPE
>SYSCALL FOpen
bcs .99
sta hDstFile
bra CS.RUN.START
.9 >PUSHW L.MSG.USAGE
>PUSHBI 0
>SYSCALL PrintF
lda #E.SYN
sec
.99 rts
*--------------------------------------
CS.RUN.START >PUSHW L.MSG.SRCFILE
lda #1
>SYSCALL ArgV
>PUSHYA
>PUSHW ZPSrcFileSize
>PUSHW.G ARCME.HEADER+5
>PUSHB.G ARCME.HEADER+7
>PUSHW ZPDstTableOfs
>PUSHBI 9
>SYSCALL PrintF
>LDYA ZPDstTableOfs
jsr CS.RUN.GetSrcBufYA
bcs CS.RUN.RTS
>PUSHB hSrcFile
>PUSHLZ
>PUSHBI SEEK.SET
>SYSCALL FSeek
bcs CS.RUN.RTS
>PUSHB hSrcFile
>PUSHW ZPInBufPtr
>PUSHW ZPDstTableOfs
>SYSCALL FRead
bcs CS.RUN.RTS
>PUSHB hDstFile
>PUSHW ZPInBufPtr
>PUSHW ZPDstTableOfs
>SYSCALL FWrite
bcs CS.RUN.RTS
jsr CS.QUIT.BUF
jsr CS.RUN.WriteTable Write Fake table
bcc CS.RUN.LOOP
CS.RUN.RTS rts
*--------------------------------------
CS.RUN.LOOP ldy #S.PS.hStdIn
lda (pPS),y
>SYSCALL FEOF
bcs CS.RUN.RTS
tay
bne .1
>SYSCALL GetChar
bcs CS.RUN.RTS
cmp #$03 Ctrl-C
beq CS.RUN.RTS Abort....
cmp #$13 Ctrl-S
bne .1
lda bPause
eor #$ff
sta bPause
bne CS.RUN.LOOP
.1 lda bPause
bne CS.RUN.LOOP Pause...
*--------------------------------------
jsr CS.RUN.GetChunk
bcs CS.RUN.RTS
>PUSHW L.MSG.CHUNK
lda ZPChunkIndex
inc
>PUSHA
>PUSHW ZPChunkOfs
>PUSHW ZPChunkLen
>PUSHBI 5
>SYSCALL PrintF
bcs .9
jsr CS.RUN.Arc
bcs .2
jsr CS.RUN.WriteArc
bcc .7
rts
.2 jsr CS.RUN.WriteStore
bcs .9
.7 jsr CS.QUIT.BUF
jsr CS.RUN.UpdateTable
inc ZPChunkIndex
dec ZPChunkCnt
beq .8
jmp CS.RUN.LOOP
.8 jsr CS.RUN.RewriteTable Write modified Table
bcs .9
lda #0
sec
.9 rts
*--------------------------------------
CS.RUN.CheckSrcFile
lda #1
>SYSCALL ArgV
>PUSHYA
>PUSHBI O.RDONLY
>PUSHBI 0 Type
>PUSHWZ Aux type
>SYSCALL FOpen
bcs .99
sta hSrcFile
>PUSHB hSrcFile
>PUSHEA.G STATBUF
>SYSCALL FStat
.99 bcs .9
>LDA.G STATBUF+S.STAT.SIZE+3
dey
ora (pData),y
bne .90
dey
lda (pData),y
sta ZPSrcFileSize+1
dey
lda (pData),y
sta ZPSrcFileSize
jsr CS.RUN.CheckTAG
bcs .9
jsr CS.RUN.GetTable
bcs .9
clc
rts
.90 lda #MLI.E.INCFF
sec
.9
CS.RUN.CheckSrcFile.RTS
rts
*--------------------------------------
CS.RUN.CheckTAG >PUSHB hSrcFile
>PUSHWZ
lda ZPSrcFileSize
sec
sbc #10
tay
lda ZPSrcFileSize+1
sbc #0
>PUSHYA
>PUSHBI SEEK.SET
>SYSCALL FSeek
bcs CS.RUN.CheckSrcFile.RTS
>PUSHB hSrcFile
>PUSHEA.G ARCME.HEADER
>PUSHWI 10
>SYSCALL FRead
bcs CS.RUN.CheckSrcFile.RTS
ldx #4
ldy #ARCME.HEADER+4
.1 lda TAG,x
cmp (pData),y
bne .90
dey
dex
bpl .1
clc
rts
.90 lda #MLI.E.INCFF
sec
.9 rts
*--------------------------------------
CS.RUN.GetTable >LDA.G ARCME.HEADER+8
sec
>SBC.G ARCME.HEADER+5
sta ZPDstTableOfs
>LDA.G ARCME.HEADER+9
>SBC.G ARCME.HEADER+6
sta ZPDstTableOfs+1
>PUSHB hSrcFile
>PUSHWZ
>PUSHW ZPDstTableOfs
>PUSHBI SEEK.SET
>SYSCALL FSeek
bcs .9
>PUSHB hSrcFile
>PUSHEA.G ARCME.TABLE
>LDA.G ARCME.HEADER+7
sta ZPChunkCnt
asl
tay
lda #0
>PUSHYA
>SYSCALL FRead
.9 rts
*--------------------------------------
CS.RUN.GetChunk lda ZPChunkIndex
asl
clc
adc #ARCME.TABLE+1
tay
lda (pData),y
pha
dey
lda (pData),y
sec
ldy #ARCME.HEADER+5
sbc (pData),y
sta ZPChunkOfs
iny
pla
sbc (pData),y
sta ZPChunkOfs+1
>PUSHB hSrcFile
>PUSHWZ
>PUSHW ZPChunkOfs
>PUSHBI SEEK.SET
>SYSCALL FSeek
bcs .9
>PUSHB hSrcFile
>PUSHEA.G CHUNK.HEADER
>PUSHWI S.ARCSHNK.H
>SYSCALL FRead
bcs .9
>LDA.G CHUNK.HEADER+2
iny
ora (pData),y
bne .90
>LDA.G CHUNK.HEADER
sta ZPChunkLen
pha
iny
lda (pData),y
sta ZPChunkLen+1
ply
jsr CS.RUN.GetSrcBufYA
bcs .9
>PUSHB hSrcFile
>PUSHW ZPInBufPtr
>PUSHW ZPChunkLen
>SYSCALL FRead
bcs .9
* clc
rts
.90 lda #MLI.E.INCFF
sec
.9 rts
*--------------------------------------
CS.RUN.GetSrcBufYA
>SYSCALL GetMem
bcs .9
stx hSrcBuf
>STYA ZPInBufPtr
.9 rts
*--------------------------------------
CS.RUN.Arc >LDYA ZPChunkLen
>SYSCALL GetMem
bcs .9
stx hDstBuf
>STYA ZPOutBufPtr
>LDYA ZPChunkLen
jsr X.Arc
* bcs .9
stx ZPAlg
>STYA ZPChunkPakedLen
.9 rts
*--------------------------------------
CS.RUN.RewriteTable
>PUSHB hDstFile
>PUSHWZ
>PUSHW ZPDstTableOfs
>PUSHBI SEEK.SET
>SYSCALL FSeek
bcs CS.RUN.WriteTable.RTS
*--------------------------------------
CS.RUN.WriteTable
>PUSHB hDstFile
>PUSHEA.G ARCME.TABLE
>LDA.G ARCME.HEADER+7
asl
tay
lda #0
>PUSHYA
>SYSCALL FWrite
CS.RUN.WriteTable.RTS
rts
*--------------------------------------
CS.RUN.WriteArc lda hDstFile
>SYSCALL FTell
bcs .9
>PULLW ZPChunkNewOfs
inc pStack
inc pStack
>PUSHB hDstFile
>PUSHW ZPOutBufPtr
>PUSHW ZPChunkPakedLen
>SYSCALL FWrite
bcs .9
>PUSHW L.MSG.ARCED
ldx ZPAlg
>PUSHW L.MSG.STORED,x
>PUSHW ZPChunkPakedLen
>PUSHW ZPChunkNewOfs
>PUSHBI 6
>SYSCALL PrintF
.9
CS.RUN.WriteArc.RTS
rts
*--------------------------------------
CS.RUN.WriteStore
lda hDstFile
>SYSCALL FTell
bcs CS.RUN.WriteArc.RTS
>PULLW ZPChunkNewOfs
inc pStack
inc pStack
>PUSHB hDstFile
>PUSHEA.G CHUNK.HEADER
>PUSHWI S.ARCSHNK.H
>SYSCALL FWrite
bcs .9
>PUSHB hDstFile
>PUSHW ZPInBufPtr
>PUSHW ZPChunkLen
>SYSCALL FWrite
bcs .9
>PUSHW L.MSG.ARCED
ldx ZPAlg
>PUSHW L.MSG.STORED,x
>PUSHW ZPChunkPakedLen
>PUSHW ZPChunkNewOfs
>PUSHBI 6
>SYSCALL PrintF
.9 rts
*--------------------------------------
CS.RUN.UpdateTable
ldy #ARCME.HEADER+6
lda (pData),y
pha
dey
lda (pData),y
pha
lda ZPChunkIndex
asl
clc
adc #ARCME.TABLE
tay
pla
clc
adc ZPChunkNewOfs
sta (pData),y
iny
pla
adc ZPChunkNewOfs+1
sta (pData),y
rts
*--------------------------------------
CS.DOEVENT sec
rts
*--------------------------------------
CS.QUIT lda hDstFile
beq .2
>SYSCALL FClose
.2 lda hSrcFile
beq CS.QUIT.BUF
>SYSCALL FClose
*--------------------------------------
CS.QUIT.BUF lda hDstBuf
beq .1
stz hDstBuf
>SYSCALL FreeMem
.1 lda hSrcBuf
beq .8
stz hSrcBuf
>SYSCALL FreeMem
.8 clc
rts
*--------------------------------------
.INB usr/src/shared/x.arc.s
*--------------------------------------
MSG.USAGE .CZ "Usage : ARCME SourceBIN PackedBIN\r\n"
MSG.SRCFILE .CZ "Source File : %s, Size=%5D, Org=$%H, %d Chunks at $%H.\r\n"
MSG.CHUNK .CZ " Chunk #%02d : Ofs=$%H, Len=%5D ... "
MSG.STORED .CZ "Stored "
MSG.ARCEDT .CZ "ARCed/T "
MSG.ARCEDBL .CZ "ARCed/BL "
MSG.ARCEDTBL .CZ "ARCed/TBL"
MSG.ARCED .CZ "%s : %5D Bytes, New Ofs=$%H\r\n"
.CZ %5D Bytes, New Ofs=$%H\r\n"
MSG.E.IARC .CZ "Invalid/corrupt archive"
TAG .CZ "ARCME"
.DO DBG
MSG.DBG1 .CS "\r\n\r\n ULEN:%6u Bits, T:%6u Bits, BL:%6u Bits, TBL:%6u Bits\r\n"
.CS " TopT :%5d, TopTBL :%5d\r\n"
.CZ " STR.Max :%5d, BLL.Max :%5d, BLO.Max :%5D\r\n"
MSG.DBG2 .CS " S.TB.Cnt :%5D, STR.TB.Cnt:%5D, BL.TB.Cnt :%5D\r\n"
.CS " STR.SL.Cnt:%5D, STR.LL.Cnt:%5D, Bits: %d/%d\r\n"
.CS " BLL.SL.Cnt:%5D, BLL.LL.Cnt:%5D, Bits: %d/%d,%d\r\n"
.CZ " %5D %5D %5D %5D %5D %5D %5D %5D %5D %5D %5D %5D\r\n"
MSG.DBG3 .CZ " Output : %6u Bits, %5D Bytes, Alg=%d\r\n"
.FIN
*--------------------------------------
.DUMMY
.OR 0
DS.START
STATBUF .BS S.STAT
ARCME.HEADER .BS 10
ARCME.TABLE .BS CHUNK.MAX*2
CHUNK.HEADER .BS 4
DS.END .ED
*--------------------------------------
MAN
SAVE usr/src/bin/arcme.s
ASM

490
BIN/UNARC.S.txt Normal file
View File

@ -0,0 +1,490 @@
NEW
AUTO 3,1
.LIST OFF
.OP 65C02
.OR $2000
.TF bin/unarc
*--------------------------------------
.INB inc/macros.i
.INB inc/a2osx.i
.INB inc/mli.e.i
.INB inc/arc.i
*--------------------------------------
.DUMMY
.OR ZPBIN
ZS.START
ZPPtr1 .BS 2
ZPPtr2 .BS 2
ZPInBufPtr .BS 2
ZPOutBufPtr .BS 2
ZPnCnt .BS 2
ZPInMask .BS 1
ZPTOPCnt .BS 1
ZPSTRLenBits .BS 1
ZPBLLenBits .BS 1
ZPBLOfsLBits .BS 1
ZPBLOfsHBits .BS 1
ZPInBufLen .BS 2
ZPOutBufLen .BS 2
ZPFullPathPtr .BS 2
ZPRelPathPtr .BS 2
ZPProgress .BS 1
ZS.END .ED
*--------------------------------------
* File Header (16 Bytes)
*--------------------------------------
CS.START cld
jmp (.1,x)
.DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1
.DA 0
.DA CS.END-CS.START CS
.DA DS.END-DS.START DS
.DA #64 SS
.DA #ZS.END-ZS.START Zero Page Size
.DA 0
*--------------------------------------
* Relocation Table
*--------------------------------------
.1 .DA CS.INIT
.DA CS.RUN
.DA CS.DOEVENT
.DA CS.QUIT
L.MSG.USAGE .DA MSG.USAGE
L.MSG.DIR .DA MSG.DIR
L.MSG.FILE .DA MSG.FILE
L.MSG.OK .DA MSG.OK
L.MSG.E.IARC .DA MSG.E.IARC
L.MSG.SPINNER .DA MSG.SPINNER
.DA 0
*--------------------------------------
CS.INIT clc
rts
*--------------------------------------
CS.RUN stz ZPProgress
>LDYAI CHNK.SIZE
>SYSCALL GetMem
bcc s1
rts
s1
>STYA ZPInBufPtr
txa
>STA.G hInBuf
lda #1
>SYSCALL ArgV
bcs .99
>STYA ZPPtr1 See if first arg is -p
pha
lda (ZPPtr1)
cmp #'-'
bne .1 No dash-arguments
pla
ldy #$01
lda (ZPPtr1),y
cmp #'p'
bne .99 -p is only valid argument
sty ZPProgress
lda #2
>SYSCALL ArgV
bcs .99
bra .11
.1 pla
.11 jsr CS.RUN.OpenArc
bcs .9
>LDYAI 256
>SYSCALL GetMem
bcc .15
rts
.15 >STYA ZPFullPathPtr
txa
>STA.G hFullPath
lda ZPProgress See if -p was provided
beq .2
lda #' ' Space for spinner to eat
>SYSCALL PutChar
lda #3 Have dash-args, check arg #3
bra .3
.2 lda #2 No dash-args, check arg #2
.3 >SYSCALL ArgV
bcc .4
ldy #S.PS.hCWD
lda (pPS),y
>SYSCALL GetMemPtr
.4 jsr CS.RUN.SetupPath
>LDYAI CHNK.SIZE
>SYSCALL GetMem
bcs .9
txa
>STA.G hOutBuf
jsr CS.RUN.LOOP
bcs .9
jsr CS.RUN.TidyUp
lda #0
sec
.9 rts
.99 >PUSHW L.MSG.USAGE
>PUSHBI 0
>SYSCALL PrintF
lda #E.SYN
sec
rts
*--------------------------------------
CS.RUN.SetupPath
>STYA ZPPtr1
ldy #$ff
.2 iny
lda (ZPPtr1),y
sta (ZPFullPathPtr),y
bne .2
dey
lda #'/'
cmp (ZPFullPathPtr),y
beq .3
iny
sta (ZPFullPathPtr),y
.3 tya
sec
adc ZPFullPathPtr
sta ZPRelPathPtr
lda #0
adc ZPFullPathPtr+1
sta ZPRelPathPtr+1
rts
*--------------------------------------
CS.RUN.LOOP jsr CS.RUN.GetByte
bcs .9
.10 cmp #CHNK.T.DIR
bne .1
jsr CS.RUN.GetFileName
bcs .99
ldx #0
jsr CS.RUN.PrintFN
jsr CS.RUN.CheckDir
bcs .99
lda ZPProgress
bne CS.RUN.LOOP
>LDYA L.MSG.OK
>SYSCALL PutS
bra CS.RUN.LOOP
.99 rts
.9 jmp CS.RUN.E.IARC
.1 cmp #CHNK.T.FILE
bne .9
jsr CS.RUN.GetFileType
bcs .99
jsr CS.RUN.GetFileName
bcs .99
ldx #2
jsr CS.RUN.PrintFN
jsr CS.RUN.OpenFile
bcs .99
*--------------------------------------
jsr CS.RUN.GetByte DATA
bcs CS.RUN.Exit eof
.2 cmp #CHNK.T.DATA
bne .3 Could be a 0 byte file
.20 lda ZPProgress
beq .21
jsr CS.RUN.Spinner
bra .22
.21 lda #'.'
>SYSCALL PutChar
.22 jsr CS.RUN.GetByte DataLen LO
bcs .99
sta ZPInBufLen
jsr CS.RUN.GetByte DataLen HI
bcs .99
sta ZPInBufLen+1
jsr CS.RUN.ReadData
bcs .99
lda (ZPInBufPtr) ULEN.LO
sta ZPOutBufLen
ldy #1
lda (ZPInBufPtr),y ULEN.HI
sta ZPOutBufLen+1
>LDA.G hOutBuf
>SYSCALL GetMemPtr
>STYA ZPOutBufPtr
jsr X.UnArc
bcs .9
jsr CS.RUN.WriteFile
bcs .99
jsr CS.RUN.GetByte
bcs CS.RUN.Exit
cmp #CHNK.T.DATA
beq .20
.3 pha
jsr CS.RUN.Exit
pla
jmp .10
*--------------------------------------
CS.RUN.Exit >LDA.G hFile
>SYSCALL FClose
lda ZPProgress
bne .9
>LDYA L.MSG.OK
>SYSCALL PutS
.9 rts
*--------------------------------------
CS.RUN.PrintFN lda ZPProgress
bne .9
>PUSHW L.MSG.DIR,x
>PUSHW ZPFullPathPtr
>PUSHBI 2
>SYSCALL PrintF
.9 rts
*--------------------------------------
CS.RUN.Spinner lda #8 Backspace
>SYSCALL PutChar
>LDYA L.MSG.SPINNER
>STYA ZPPtr2
>LDA.G SpinState
tay
lda (ZPPtr2),y
>SYSCALL PutChar
>INC.G SpinState
cmp #4
bne .9
>STZ.G SpinState
.9 rts
*--------------------------------------
CS.RUN.NewLine lda #C.CR
>SYSCALL PutChar
lda #C.LF
>SYSCALL PutChar
rts
*--------------------------------------
CS.RUN.TidyUp lda ZPProgress
beq .9
lda #8
>SYSCALL PutChar
lda #' '
>SYSCALL PutChar
jsr CS.RUN.NewLine
.9 rts
*--------------------------------------
CS.RUN.OpenArc >PUSHYA
>PUSHBI O.RDONLY
>PUSHBI $CF PAK
>PUSHWZ Aux type
>SYSCALL FOpen
bcs .9
>STA.G hArcFile
>PUSHA
>PUSHW ZPInBufPtr
>PUSHWI 3
>SYSCALL FRead
bcs .9
cpy #3
bne .99
dey
.1 lda MSG.ARC,y
cmp (ZPInBufPtr),y
bne .99
dey
bpl .1
clc
.9 rts
.99
CS.RUN.E.IARC >PUSHW L.MSG.E.IARC
>PUSHBI 0
>SYSCALL PrintF
lda #E.SYN
sec
rts
*--------------------------------------
CS.RUN.GetFileType
>PUSHB.G hArcFile
>PUSHEA.G FileType
>PUSHWI 3
>SYSCALL FRead
rts
*--------------------------------------
CS.RUN.GetFileName
jsr CS.RUN.GetByte
bcs .9
pha
>PUSHB.G hArcFile
>PUSHW ZPRelPathPtr
ply
lda #0
>PUSHYA
>SYSCALL FRead
bcs .9
lda #0
sta (ZPRelPathPtr),y
* clc
.9 rts
*--------------------------------------
CS.RUN.ReadData >PUSHB.G hArcFile
>LDA.G hInBuf
>SYSCALL GetMemPtr
>STYA ZPInBufPtr
>PUSHYA
>PUSHW ZPInBufLen
>SYSCALL FRead
rts
*--------------------------------------
CS.RUN.GetByte >LDA.G hArcFile
>SYSCALL GetC
rts
*--------------------------------------
CS.RUN.CheckDir >PUSHW ZPFullPathPtr
>PUSHEA.G STAT
>SYSCALL Stat
bcc .1
>PUSHW ZPFullPathPtr
>PUSHWI S.STAT.MODE.FO+S.STAT.MODE.FG+S.STAT.MODE.FU
>SYSCALL MKDir
rts
.1 ldy #STAT+S.STAT.MODE+1
lda (pData),y
and #$F0
cmp /S.STAT.MODE.DIR
bne .99
clc
rts
.99 lda #MLI.E.INVPATH
sec
.9 rts
*--------------------------------------
CS.RUN.OpenFile >PUSHW ZPFullPathPtr
>PUSHBI O.CREATE+O.WRONLY+O.TRUNC
>PUSHB.G FileType
>PUSHW.G FileAuxType
>SYSCALL FOpen
bcs .9
>STA.G hFile
.9 rts
*--------------------------------------
CS.RUN.WriteFile
>PUSHB.G hFile
>LDA.G hOutBuf
>SYSCALL GetMemPtr
>PUSHYA
>PUSHW ZPOutBufLen
>SYSCALL FWrite
rts
*--------------------------------------
CS.DOEVENT sec
rts
*--------------------------------------
CS.QUIT >LDA.G hFile
beq .1
>SYSCALL FClose
.1 >LDA.G hFullPath
beq .2
>SYSCALL FreeMem
.2 >LDA.G hOutBuf
beq .3
>SYSCALL FreeMem
.3 >LDA.G hInBuf
beq .4
>SYSCALL FreeMem
.4 >LDA.G hArcFile
beq .8
>SYSCALL FClose
.8 clc
rts
*--------------------------------------
.INB usr/src/shared/x.unarc.s
*--------------------------------------
CS.END
MSG.USAGE .CS "Usage : UNARC [-p] Archive [DstDir]\r\n"
.CZ " -p: Show progress spinner\r\n"
MSG.DIR .CZ "Creating Dir:%s..."
MSG.FILE .CZ "Extracting File:%s..."
MSG.OK .CZ "[OK]"
MSG.E.IARC .CZ "\r\nInvalid/corrupt archive"
MSG.ARC .CS "ARC"
MSG.SPINNER .CS "|/-\"
*--------------------------------------
.DUMMY
.OR 0
DS.START
hArcFile .BS 1
hFullPath .BS 1
hInBuf .BS 1
hOutBuf .BS 1
hFile .BS 1
FileType .BS 1
FileAuxType .BS 2
SpinState .BS 1
STAT .BS S.STAT
DS.END
.ED
*--------------------------------------
MAN
SAVE usr/src/bin/unarc.s
ASM

View File

@ -135,7 +135,7 @@ VLINE.MONO.XOR
bcc .1
rts
*--------------------------------------
VLINE.C16 lda CB.Cache+S.CB.X1
lsr CB.Cache+S.CB.X1+1 divide by 4
ror

View File

@ -789,7 +789,10 @@ SHIFT8.L7 .DA #%00000000,#%10000000,#%00000001,#%10000001,#%00000010,#%10000010
.DA #%00110100,#%10110100,#%00110101,#%10110101,#%00110110,#%10110110,#%00110111,#%10110111
.DA #%00111000,#%10111000,#%00111001,#%10111001,#%00111010,#%10111010,#%00111011,#%10111011
.DA #%00111100,#%10111100,#%00111101,#%10111101,#%00111110,#%10111110,#%00111111,#%10111111
*--------------------------------------
.LIST ON
X.OSD.LEN .EQ *-X.OSD
.LIST OFF
*--------------------------------------
MAN
SAVE usr/src/drv/dhgr.drv.s.osd

View File

@ -58,7 +58,7 @@ SETPIXEL.MONO.XOR
eor Mono.Masks,x
sta (ZPBasePtr)
rts
*--------------------------------------
SETPIXEL.C16 lda CB.Cache+S.CB.X1
lsr CB.Cache+S.CB.X1+1 divide by 4
ror
@ -67,9 +67,9 @@ SETPIXEL.C16 lda CB.Cache+S.CB.X1
tay Y=X/4 (range 0->139)
ldx CB.Cache+S.CB.Y1
*--------------------------------------
* Y = PixelX (0,139), X = PixelY (0,191)
*--------------------------------------
SETPIXEL.C16.YX lda DIV7.0,y PixelX MOD 7 (range 0->19)
asl times 2 (range 0->38)
* clc

View File

@ -628,6 +628,8 @@ BM.Cache .BS S.BM
*--------------------------------------
LBUF.MASK .BS 81 81 because of sta LBUF.DATA+1,x!!!
LBUF.DATA .BS 81
*LBUF.MASK .EQ $240
*LBUF.DATA .EQ $2A0
*--------------------------------------
DIB .DA #0
.DA #0,#0,#0

View File

@ -39,8 +39,9 @@ A2osX.SLEEP .EQ $1010
*--------------------------------------
A2osX.SCRNDEVS .EQ $11D0 0=console, 1-8=VT100, 9=GFX
A2osX.ASCREEN .EQ $11DA Active Screen
A2osX.KVER .EQ $11E0
* 5 bytes
A2osX.KVER .EQ $11E0 WORD
* 1 byte
A2osX.IRQMode .EQ $11E3
A2osX.ATLKSID .EQ $11E4
A2osX.FSID .EQ $11E5

86
INC/ARC.I.txt Normal file
View File

@ -0,0 +1,86 @@
NEW
AUTO 3,1
.LIST OFF
*--------------------------------------
STR.MIN .EQ 3
STR.MID .EQ STR.MIN+7+1
STR.MAX .EQ STR.MID+63
*--------------------------------------
BLL.MIN .EQ 3
BLL.MID .EQ BLL.MIN+3+1
BLL.MAX .EQ BLL.MID+63
*--------------------------------------
BLO.WINDOW.W .EQ 12
BLO.WINDOW .EQ 4095
*--------------------------------------
ARC.B.PREFIX.W .EQ 1
ARC.B.SINGLE .EQ %0 +bbbb.bbbb
ARC.B.STRBL .EQ %1
*--------------------------------------
ARC.B.RAWTOP.W .EQ 1
ARC.B.RAW .EQ %0 +bbbb.bbbb
ARC.B.TOP .EQ %1
*--------------------------------------
ARC.B.STRBL.W .EQ 1
ARC.B.STR .EQ %0 +llll...
ARC.B.BL .EQ %1 +llll... +oooooooooo...
*--------------------------------------
ARC.B.LEN.W .EQ 1
ARC.B.SHORT.B .EQ %0
ARC.B.LONG.B .EQ %1
*--------------------------------------
ARC.B.SHORTSTR.W .EQ 3
ARC.B.SHORTBLL.W .EQ 2
*--------------------------------------
TOP.MIN.CNT .EQ 3
TOP.MAX .EQ 32
*--------------------------------------
ARC.B.TOP0.W .EQ 4
ARC.B.TOP0.B .EQ %0.000
ARC.B.TOP0.M .EQ %0.111
ARC.B.TOP8.W .EQ 5
ARC.B.TOP8.B .EQ %10.000
ARC.B.TOP8.M .EQ %00.111
ARC.B.TOP16.W .EQ 6
ARC.B.TOP16.B .EQ %11.0000
ARC.B.TOP16.M .EQ %00.1111
*--------------------------------------
* Shunk Header
* ULEN (16) : Target Uncompressed Length
* !!! USED TO STOP UNPACK,NO EOF TOKEN !!!
* TBLBITS (16) : sss.ccccc c.lll.oooo
* sss : bitcnt for long STR len, max = 7 bits:127+STR.MID
* cccccc : top count, 0-> 63
* lll : bitcnt for long BL len, max = 7 bits:127+BL.MID
* oooo : bitcnt for long BL ofs, max = 15 bits:32767
*--------------------------------------
S.ARCSHNK.ULEN .EQ 0 Uncompressed length
S.ARCSHNK.TBLBITS .EQ 2
S.ARCSHNK.TOPBYTES .EQ 4 if cccccc > 0
*
S.ARCSHNK.H .EQ 4
* TOP Bytes ...
S.ARCSHNK .EQ S.ARCSHNK.H+TOP.MAX
* DATA ...
*--------------------------------------
CHNK.SIZE .EQ 4096
*--------------------------------------
CHNK.T .EQ 0
CHNK.T.DIR .EQ 1
CHNK.T.FILE .EQ 2
CHNK.T.DATA .EQ 128
*
CHNK.FILE.TYPE .EQ 1
CHNK.FILE.AUXT .EQ 2
CHNK.FILE.FNLEN .EQ 4
*
CHNK.DIR.FNLEN .EQ 1
*
CHNK.DATA.LEN .EQ 1
*--------------------------------------
MAN
SAVE inc/arc.i
LOAD usr/src/bin/arcme.s
ASM

View File

@ -4,94 +4,93 @@ NEW
*--------------------------------------
* Software Switches
*--------------------------------------
KBD .EQ $C000 R
CLR80STORE .EQ $C000 W
SET80STORE .EQ $C001 W
CLRREADAUX .EQ $C002 W
SETREADAUX .EQ $C003 W
CLRWRITEAUX .EQ $C004 W
SETWRITEAUX .EQ $C005 W
CLRCXROM .EQ $C006 W
SETCXROM .EQ $C007 W
CLRALTZP .EQ $C008 W
SETALTZP .EQ $C009 W
CLRC3ROM .EQ $C00A W
SETC3ROM .EQ $C00B W
CLR80DISP .EQ $C00C W
SET80DISP .EQ $C00D W
CLRALTCHAR .EQ $C00E W
SETALTCHAR .EQ $C00F W
KBDSTROBE .EQ $C010 W
RDLCBNK2 .EQ $C011 R
RDLCRAM .EQ $C012 R
RDREADAUX .EQ $C013 R
RDWRITEAUX .EQ $C014 R
RDCXROM .EQ $C015 R
RDALTZP .EQ $C016 R
RDC3ROM .EQ $C017 R
RD80STORE .EQ $C018 R
VBL .EQ $C019 R
RDTEXT .EQ $C01A R
RDMIXED .EQ $C01B R
RDPAGE2 .EQ $C01C R
RDHIRES .EQ $C01D R
RDALTCHAR .EQ $C01E R
RD80DISP .EQ $C01F R
*TAPEOUT .EQ $C020 W
newvideo .EQ $C029 video mode select
SPEAKER .EQ $C030 W, toggle speaker diaphragm
*STROBE .EQ $C040 R, generate .5 uS low pulse @ Game pin 5
*RDVBLIIC .EQ $C05A R, VBL switch Status (IIc)
IO.KBD .EQ $C000 R
IO.CLR80STORE .EQ $C000 W
IO.SET80STORE .EQ $C001 W
IO.CLRREADAUX .EQ $C002 W
IO.SETREADAUX .EQ $C003 W
IO.CLRWRITEAUX .EQ $C004 W
IO.SETWRITEAUX .EQ $C005 W
IO.CLRCXROM .EQ $C006 W
IO.SETCXROM .EQ $C007 W
IO.CLRALTZP .EQ $C008 W
IO.SETALTZP .EQ $C009 W
IO.CLRC3ROM .EQ $C00A W
IO.SETC3ROM .EQ $C00B W
IO.CLR80DISP .EQ $C00C W
IO.SET80DISP .EQ $C00D W
IO.CLRALTCHAR .EQ $C00E W
IO.SETALTCHAR .EQ $C00F W
IO.KBDSTROBE .EQ $C010 W
IO.RDLCBNK2 .EQ $C011 R
IO.RDLCRAM .EQ $C012 R
IO.RDREADAUX .EQ $C013 R
IO.RDWRITEAUX .EQ $C014 R
IO.RDCXROM .EQ $C015 R
IO.RDALTZP .EQ $C016 R
IO.RDC3ROM .EQ $C017 R
IO.RD80STORE .EQ $C018 R
IO.VBL .EQ $C019 R
IO.RDTEXT .EQ $C01A R
IO.RDMIXED .EQ $C01B R
IO.RDPAGE2 .EQ $C01C R
IO.RDHIRES .EQ $C01D R
IO.RDALTCHAR .EQ $C01E R
IO.RD80DISP .EQ $C01F R
*IO.TAPEOUT .EQ $C020 W
IO.SPEAKER .EQ $C030 W, toggle speaker diaphragm
*IO.STROBE .EQ $C040 R, generate .5 uS low pulse @ Game pin 5
*IO.RDVBLIIC .EQ $C05A R, VBL switch Status (IIc)
*IO.EMUBYTE .EQ $C04F WRR, Write once then Read EMUL, Read Version
IO.CLRTEXT .EQ $C050 W
IO.SETTEXT .EQ $C051 W
IO.CLRMIXED .EQ $C052 W
IO.SETMIXED .EQ $C053 W
IO.CLRPAGE2 .EQ $C054 W
IO.SETPAGE2 .EQ $C055 W
IO.CLRHIRES .EQ $C056 W
IO.SETHIRES .EQ $C057 W
*EMUBYTE .EQ $C04F WRR, Write once then Read EMUL, Read Version
*IO.SETAN0 .EQ $C058 W, Set annunciator-0 output to 0
*IO.CLRAN0 .EQ $C059 W, Set annunciator-0 output to 1
*IO.SETAN1 .EQ $C05A W, Set annunciator-1 output to 0
*IO.CLRAN1 .EQ $C05B W, Set annunciator-1 output to 1
*IO.SETAN2 .EQ $C05C W, Set annunciator-2 output to 0
*IO.CLRAN2 .EQ $C05D W, Set annunciator-2 output to 1
IO.SETAN3 .EQ $C05E W, Set annunciator-3 output to 0
IO.CLRAN3 .EQ $C05F W, Set annunciator-3 output to 1
IO.SETDHIRES .EQ $C05E W, if IOUDIS Set, turn on double-hires
IO.CLRDHIRES .EQ $C05F W, if IOUDIS Set, turn off double-hires
*IO.TAPEIN .EQ $C060 R
IO.OPENAPPLE .EQ $C061 R
IO.SOLIDAPPLE .EQ $C062 R
*IO.PB2 .EQ $C063 R
CLRTEXT .EQ $C050 W
SETTEXT .EQ $C051 W
CLRMIXED .EQ $C052 W
SETMIXED .EQ $C053 W
CLRPAGE2 .EQ $C054 W
SETPAGE2 .EQ $C055 W
CLRHIRES .EQ $C056 W
SETHIRES .EQ $C057 W
*IO.PADDLE0 .EQ $C064 R, bit 7 = status of pdl-0 timer
*IO.PADDLE1 .EQ $C065 R, bit 7 = status of pdl-1 timer
*IO.PADDLE2 .EQ $C066 R, bit 7 = status of pdl-2 timer
*IO.PADDLE3 .EQ $C067 R, bit 7 = status of pdl-3 timer
*SETAN0 .EQ $C058 W, Set annunciator-0 output to 0
*CLRAN0 .EQ $C059 W, Set annunciator-0 output to 1
*SETAN1 .EQ $C05A W, Set annunciator-1 output to 0
*CLRAN1 .EQ $C05B W, Set annunciator-1 output to 1
*SETAN2 .EQ $C05C W, Set annunciator-2 output to 0
*CLRAN2 .EQ $C05D W, Set annunciator-2 output to 1
SETAN3 .EQ $C05E W, Set annunciator-3 output to 0
CLRAN3 .EQ $C05F W, Set annunciator-3 output to 1
*IO.PDLTRIG .EQ $C070 W, trigger paddles
SETDHIRES .EQ $C05E W, if IOUDIS Set, turn on double-hires
CLRDHIRES .EQ $C05F W, if IOUDIS Set, turn off double-hires
*TAPEIN .EQ $C060 R
OPENAPPLE .EQ $C061 R
SOLIDAPPLE .EQ $C062 R
*PB2 .EQ $C063 R
*PADDLE0 .EQ $C064 R, bit 7 = status of pdl-0 timer
*PADDLE1 .EQ $C065 R, bit 7 = status of pdl-1 timer
*PADDLE2 .EQ $C066 R, bit 7 = status of pdl-2 timer
*PADDLE3 .EQ $C067 R, bit 7 = status of pdl-3 timer
statereg .EQ $C068 memory state register
*PDLTRIG .EQ $C070 W, trigger paddles
SETIOUDIS .EQ $C07E W, enable DHIRES & disable $C058-5F
RDIOUDIS .EQ $C07E R, bit 7 = IOUDIS status
CLRIOUDIS .EQ $C07F W, disable DHIRES & enable $C058-5F
IO.SETIOUDIS .EQ $C07E W, enable DHIRES & disable $C058-5F
IO.RDIOUDIS .EQ $C07E R, bit 7 = IOUDIS status
IO.CLRIOUDIS .EQ $C07F W, disable DHIRES & enable $C058-5F
*--------------------------------------
*RRAMBNK2 .EQ $C080 R
RROMWRAMBNK2 .EQ $C081 RR
RROMBNK2 .EQ $C082 R
RRAMWRAMBNK2 .EQ $C083 RR
*RRAMBNK1 .EQ $C088 R
*RROMWRAMBNK1 .EQ $C089 RR
RROMBNK1 .EQ $C08A R
RRAMWRAMBNK1 .EQ $C08B RR
*IO.RRAMBNK2 .EQ $C080 R
IO.RROMWRAMBNK2 .EQ $C081 RR
IO.RROMBNK2 .EQ $C082 R
IO.RRAMWRAMBNK2 .EQ $C083 RR
*IO.RRAMBNK1 .EQ $C088 R
*IO.RROMWRAMBNK1 .EQ $C089 RR
IO.RROMBNK1 .EQ $C08A R
IO.RRAMWRAMBNK1 .EQ $C08B RR
*--------------------------------------
CLRC8ROM .EQ $CFFF R, Release C800-CFFF Rom Space for all cards
IO.CLRC8ROM .EQ $CFFF R, Release C800-CFFF Rom Space for all cards
MAN
SAVE INC/IO.I
SAVE inc/io.i

View File

@ -2,9 +2,11 @@ NEW
AUTO 3,1
.LIST OFF
*--------------------------------------
IO.IIGS.INTEN .EQ $C041 R,W
IO.IIGS.INTFLAG .EQ $C046 R
IO.IIGS.CLRVBLINT .EQ $C047 W
IO.GS.NEWVIDEO .EQ $C029 R,W video mode select
IO.GS.INTEN .EQ $C041 R,W
IO.GS.INTFLAG .EQ $C046 R
IO.GS.CLRVBLINT .EQ $C047 W
IO.GS.STATEREG .EQ $C068 R,W memory state register
*--------------------------------------
.MA TKCALL
ldx ##TK.]1

View File

@ -38,89 +38,89 @@ NEW
*--------------------------------------
.MA MLICALL
ldx #]1
.DO ]1=MLIALLOCIRQ
.DO ]1=MLI.ALLOCIRQ
lda #2
.FIN
.DO ]1=MLIDEALLOCIRQ
.DO ]1=MLI.DEALLOCIRQ
lda #1
.FIN
.DO ]1=MLIATALK
.DO ]1=MLI.ATALK
lda #1
.FIN
.DO ]1=MLIREADBLOCK
.DO ]1=MLI.READBLOCK
lda #3
.FIN
.DO ]1=MLIWRITEBLOCK
.DO ]1=MLI.WRITEBLOCK
lda #3
.FIN
.DO ]1=MLICREATE
.DO ]1=MLI.CREATE
lda #7
.FIN
.DO ]1=MLIDESTROY
.DO ]1=MLI.DESTROY
lda #1
.FIN
.DO ]1=MLIRENAME
.DO ]1=MLI.RENAME
lda #2
.FIN
.DO ]1=MLISETFILEINFO
.DO ]1=MLI.SFINFO
lda #7
.FIN
.DO ]1=MLIGETFILEINFO
.DO ]1=MLI.GFINFO
lda #10
.FIN
.DO ]1=MLIONLINE
.DO ]1=MLI.ONLINE
lda #2
.FIN
.DO ]1=MLISETPREFIX
.DO ]1=MLI.SETPREFIX
lda #1
.FIN
.DO ]1=MLIGETPREFIX
.DO ]1=MLI.GETPREFIX
lda #1
.FIN
.DO ]1=MLIOPEN
.DO ]1=MLI.OPEN
lda #3
.FIN
.DO ]1=MLINEWLINE
.DO ]1=MLI.NEWLINE
lda #3
.FIN
.DO ]1=MLIREAD
.DO ]1=MLI.READ
lda #4
.FIN
.DO ]1=MLIWRITE
.DO ]1=MLI.WRITE
lda #4
.FIN
.DO ]1=MLICLOSE
.DO ]1=MLI.CLOSE
lda #1
.FIN
.DO ]1=MLIFLUSH
.DO ]1=MLI.FLUSH
lda #1
.FIN
.DO ]1=MLISETMARK
.DO ]1=MLI.SETMARK
lda #2
.FIN
.DO ]1=MLIGETMARK
.DO ]1=MLI.GETMARK
lda #2
.FIN
.DO ]1=MLISETEOF
.DO ]1=MLI.SETEOF
lda #2
.FIN
.DO ]1=MLIGETEOF
.DO ]1=MLI.GETEOF
lda #2
.FIN
.DO ]1=MLISETBUF
.DO ]1=MLI.SETBUF
lda #2
.FIN
.DO ]1=MLIGETBUF
.DO ]1=MLI.GETBUF
lda #2
.FIN
.DO ]1=MLISETFILEINFOEX
.DO ]1=MLI.SFINFOEX
lda #2
.FIN
.DO ]1=MLIGETFILEINFOEX
.DO ]1=MLI.GFINFOEX
lda #2
.FIN
.DO ]1=MLIACL
.DO ]1=MLI.ACL
lda #2
.FIN

View File

@ -8,37 +8,37 @@ MLI.MAXPATH .EQ 64
*--------------------------------------
* PRODOS Defines
*--------------------------------------
MLIALLOCIRQ .EQ $40
MLIDEALLOCIRQ .EQ $41
MLIATALK .EQ $42
MLIQUIT .EQ $65
MLIREADBLOCK .EQ $80
MLIWRITEBLOCK .EQ $81
MLIGETTIME .EQ $82
MLICREATE .EQ $C0
MLIDESTROY .EQ $C1
MLIRENAME .EQ $C2
MLISETFILEINFO .EQ $C3
MLIGETFILEINFO .EQ $C4
MLIONLINE .EQ $C5
MLISETPREFIX .EQ $C6
MLIGETPREFIX .EQ $C7
MLIOPEN .EQ $C8
MLINEWLINE .EQ $C9
MLIREAD .EQ $CA
MLIWRITE .EQ $CB
MLICLOSE .EQ $CC
MLIFLUSH .EQ $CD
MLISETMARK .EQ $CE
MLIGETMARK .EQ $CF
MLISETEOF .EQ $D0
MLIGETEOF .EQ $D1
MLISETBUF .EQ $D2
MLIGETBUF .EQ $D3
MLI.ALLOCIRQ .EQ $40
MLI.DEALLOCIRQ .EQ $41
MLI.ATALK .EQ $42
MLI.QUIT .EQ $65
MLI.READBLOCK .EQ $80
MLI.WRITEBLOCK .EQ $81
MLI.GETTIME .EQ $82
MLI.CREATE .EQ $C0
MLI.DESTROY .EQ $C1
MLI.RENAME .EQ $C2
MLI.SFINFO .EQ $C3
MLI.GFINFO .EQ $C4
MLI.ONLINE .EQ $C5
MLI.SETPREFIX .EQ $C6
MLI.GETPREFIX .EQ $C7
MLI.OPEN .EQ $C8
MLI.NEWLINE .EQ $C9
MLI.READ .EQ $CA
MLI.WRITE .EQ $CB
MLI.CLOSE .EQ $CC
MLI.FLUSH .EQ $CD
MLI.SETMARK .EQ $CE
MLI.GETMARK .EQ $CF
MLI.SETEOF .EQ $D0
MLI.GETEOF .EQ $D1
MLI.SETBUF .EQ $D2
MLI.GETBUF .EQ $D3
* ProDOS FX
MLISETFILEINFOEX .EQ $D4
MLIGETFILEINFOEX .EQ $D5
MLIACL .EQ $D6
MLI.SFINFOEX .EQ $D4
MLI.GFINFOEX .EQ $D5
MLI.ACL .EQ $D6
*--------------------------------------
* 7 6 5 4 3 2 1 0
* +--+--+--+--+--+--+--+--+
@ -123,12 +123,12 @@ TBX.EnumBlk .EQ 2
TBX.EnumNext .EQ 4
*--------------------------------------
MLI .EQ $BF00
*JSPARE .EQ $BF03
DATETIME .EQ $BF06
SYSERR .EQ $BF09
*SYSDEATH .EQ $BF0C
*SERR .EQ $BF0F
DEVPTRS .EQ $BF10
GP.DISPATCH .EQ $BF03
GP.CLOCK .EQ $BF06
GP.SYSERR .EQ $BF09
GP.SYSDEATH .EQ $BF0C
GP.ERROR .EQ $BF0F
GP.DEVPTRS .EQ $BF10
*DEVPTRS0D1 .EQ $BF10
*DEVPTRS1D1 .EQ $BF12
*DEVPTRS2D1 .EQ $BF14
@ -140,35 +140,36 @@ DEVPTRS .EQ $BF10
*DEVPTRS0D2 .EQ $BF20
*DEVPTRS1D2 .EQ $BF22
*DEVPTRS2D2 .EQ $BF24
DEVPTRS3D2 .EQ $BF26
GP.DEVPTRS3D2 .EQ $BF26
*DEVPTRS4D2 .EQ $BF28
*DEVPTRS5D2 .EQ $BF2A
*DEVPTRS6D2 .EQ $BF2C
*DEVPTRS7D2 .EQ $BF2E
DEVNUM .EQ $BF30
DEVCNT .EQ $BF31 0 -> 13
DEVLST .EQ $BF32 -> $BF3F
GP.DEVNUM .EQ $BF30
GP.DEVCNT .EQ $BF31 0 -> 13
GP.DEVLST .EQ $BF32 -> $BF3F
*DEVLST0END .EQ $BF40 A 0 was added to ensure list ended with 0 if 14 devices in list
*PRODOSCOPYRIGHT .EQ $BF41 ;free->$BF4B
MLIENTRY .EQ $BF4B to bypass ATLK hook
MEMTABL .EQ $BF58 -> $BF6F
*GL.BUFF .EQ $BF70
GP.MLIENTRY .EQ $BF4B to bypass ATLK hook
GP.MEMTABL .EQ $BF58 -> $BF6F
GB.BUFTABL .EQ $BF70
*INTRUPT1 .EQ $BF80
*INTRUPT2 .EQ $BF82
*INTRUPT3 .EQ $BF84
*INTRUPT4 .EQ $BF86
DATELO .EQ $BF90
TIMELO .EQ $BF92
LEVEL .EQ $BF94
*BUBIT .EQ $BF95
GP.DATE .EQ $BF90
GP.TIME .EQ $BF92
GP.FLEVEL .EQ $BF94
GP.BUBIT .EQ $BF95
*SPARE1 .EQ $BF96
MACHID .EQ $BF98
GP.NEWPFXPTR .EQ $BF97
GP.MACHID .EQ $BF98
MACHID.T .EQ %11001000
*MACHID.T.II .EQ %00000000
*MACHID.T.IIp .EQ %01000000
*MACHID.T.IIp .EQ %01000000
MACHID.T.IIe .EQ %10000000
MACHID.T.IIc .EQ %10001000
*MACHID.T.III .EQ %11000000
*MACHID.T.III .EQ %11000000
MACHID.M .EQ %00110000
MACHID.M.128 .EQ %00110000
*MACHID.M.64 .EQ %00100000
@ -176,14 +177,15 @@ MACHID.M.128 .EQ %00110000
*MACHID.SPARE .EQ %00000100
MACHID.COL80 .EQ %00000010
MACHID.CLK .EQ %00000001
*SLTBYT .EQ $BF99
*PFIXPTR .EQ $BF9A
*MLIACTV .EQ $BF9B
GP.SLTBYT .EQ $BF99
GP.PFXPTR .EQ $BF9A
GP.MLIACTV .EQ $BF9B
*CMDADR .EQ $BF9C
*SAVEX .EQ $BF9E
*SAVEY .EQ $BF9F
*--------------------------------------
* code $BFA0 -> $BFF3
* GP.MLIEXIT $BFA0
* GP.MLICONT $BFB7
*--------------------------------------
*BNKBYT1 .EQ $BFF4
*BNKBYT2 .EQ $BFF5
@ -191,7 +193,7 @@ MACHID.CLK .EQ %00000001
*IBAKVER .EQ $BFFC
*IVERSION .EQ $BFFD
*KBAKVER .EQ $BFFE
*KVERSION .EQ $BFFF
GP.KVER .EQ $BFFF
*--------------------------------------
MAN
SAVE inc/mli.i

100
INC/ROM.II.txt Normal file
View File

@ -0,0 +1,100 @@
NEW
AUTO 3,1
*--------------------------------------
* II ROM Calls
*--------------------------------------
ROM.INBUF .EQ $0200
ROM.BRKV .EQ $03F0
ROM.SOFTEV .EQ $03F2
ROM.PWREDUP .EQ $03F4
ROM.AMPJMP .EQ $03F5
ROM.USRJMP .EQ $03F8
ROM.NMIJMP .EQ $03FB
ROM.IRQV .EQ $03FE
ROM.MSLOT .EQ $07F8 $Cn, where n•slot using $C800
*--------------------------------------
ROM.PLOT .EQ $F800 PLOT LORES BLOCK
ROM.HLINE .EQ $F819 HORIZ LORES LINE
ROM.VLINE .EQ $F828 VERTICAL LORES LINE
ROM.CLRSCR .EQ $F832 CLEAR FULL LORES SCREEN
ROM.CLRTOP .EQ $FB36 CLEAR TOP. LORES SCREEN
ROM.GBSCALC .EQ $F847 LORES BASE CALCULATION
ROM.NEXTCOL .EQ $F85F INCREASE LORES COLOR BY 3
ROM.SETCOL .EQ $F864 SET LORES COLOR
ROM.SCRN .EQ $F871 READ LORES SCREEN COLOR
*--------------------------------------
ROM.PRNTAX .EQ $F941 OUTPUT A THEN X. AS HEX
ROM.PRBLNK .EQ $F948 OUTPUT 3 SPACES VIA BOOKS
ROM.PRBL2 .EQ $F94A OUTPUT X BLANKS VIA HOOKS
ROM.ROMIRQ .EQ $FA41 IRQ ENTRY
ROM.BREAKV .EQ $FA59 BREAK VECTOR
ROM.RESETV .EQ $FA62 RESET ENTRY
ROM.REGDSP .EQ $FAD7 DISPLAY WORKING REGISTERS
ROM.PREAD .EQ $FB1E READ GAME PADDLE X
ROM.INIT .EQ $FB2F INITIALIZE TEXT SCREEN
ROM.SETTXT .EQ $FB39 SET UP TEXT SCREEN (NOT 2E!)
ROM.SETGR .EQ $FB40 SET UP GRAPHICS SCREEN
ROM.SETWND .EQ $FB4B SET NORMAL TEXT WINDOW
ROM.TABV .EQ $FB5B
ROM.SETPWRC .EQ $FB6F
ROM.VERSION .EQ $FBB3 MONITOR ROM ID BYTE
ROM.ZIDBYTE .EQ $FBC0 MONITOR ROM ID BYTE
ROM.BASCALC .EQ $FBC1 CALCULATE TEXT BASE ADDRESS (NOT 2E!}
ROM.BELL1 .EQ $FBDD BEEP SPEAKER IF CTRL-G
ROM.BELL2 .EQ $FBE4 BEEP SPEAKER ONCE
ROM.ADVANCE .EQ $FBF4 TEXT CURSOR ONE TO RIGHT
ROM.VIDOUT .EQ $FBFD OUTPUT ASCII TO SCREEN ONLY
ROM.BS .EQ $FC10 BACKSPACE SCREEN
ROM.UP .EQ $FC1A MOVE SCREEN CURSOR UP ONE LINE
ROM.VTAB .EQ $FC22 VERTICAL SCREEN TAB USING CV
ROM.VTABA .EQ $FC24 VERTICAL SCREEN TAB USING A
ROM.ESC1 .EQ $FC66 PROCESS ESCAPE CURSOR MOVES
ROM.CLREOP .EQ $FC42 CLEAR TO END OF PAGE
ROM.HOME .EQ $FC58 CLEAR TEXT SCREEN AND HOME CURSOR
ROM.CR .EQ $FC62 CARRIAGE RETURN TO SCREEN
ROM.LF .EQ $FC66 LINEFEED TO SCREEN ONLY
ROM.SCROLL .EQ $FC70 SCROLL TEXT SCREEN UP ONE
ROM.CLREOL .EQ $FC9C CLEAR TEXT TO END OF LINE
ROM.WAIT .EQ $FCA8 TIME DELAY SET BY ACCUMULATOR
ROM.RDKEY .EQ $FD0C GET INPUT CHARACTER VIA HOOKS
ROM.KEYIN .EQ $FD1B READ THE APPLE KEYBOARD
ROM.RDCHAR .EQ $FD35 GET KEY AND PROCESS ESC A-F
ROM.CANCEL .EQ $FD62 CANCEL KEYBOARD LINE ENTRY
ROM.GETLNZ .EQ $FD67 CR THEN GET KEYBOARD INPUT LINE
ROM.GETLN .EQ $FD6A GET KEYBOARD INPUT LINE
ROM.GETLN1 .EQ $FD6F GET KBD INPUT, NO PROMPT
ROM.CROUT1 .EQ $FD8B CLEAR EOL THEN CR VIA BOOKS
ROM.CROUT .EQ $FD8E OUTPUT CR VIA HOOKS
ROM.PRBYTE .EQ $FDDA OUTPUT FULL A IN HEX TO HOOKS
ROM.PRHEX .EQ $FDE3 OUTPUT LOW A IN HEX TO HOOKS
ROM.COUT .EQ $FDED OUTPUT CHARACTER VIA HOOKS
ROM.COUTL .EQ $FDF0 OUTPUT CHARACTER TO SCREEN
ROM.IDROUTINE .EQ $FE1F RETURNS SYSTEM INFO
ROM.MOVE .EQ $FE2C MOVE BLOCK OF MEMORY
ROM.VERIFY .EQ $FE36 VERIFY BLOCK OF MEMORY
ROM.LIST .EQ $FE5E DISASSEMBLE 20 INSTRUCTIONS
ROM.LIST2 .EQ $FE63 DISASSEMBLE •A• INSTRUCTIONS
ROM.SETINV .EQ $FE80 PRINT INVERSE TEXT TO SCREEN
ROM.SETNORM .EQ $FE84 PRINT NORMAL TEXT TO SCREEN
ROM.SETKBD .EQ $FE89 GRAB INPUT HOOKS FOR KEYBOARD
ROM.SETVID .EQ $FE93 GRAB OUTPUT HOOKS FOR SCREEN
ROM.XBASIC .EQ $FEB0 GO BASIC, DESTROYING OLD
ROM.BASCON .EQ $FEB3 GO BASIC, CONTINUING OLD
ROM.TRACE .EQ $FEC2 START TRACING (OLD ROM ONLY!)
ROM.STEP .EQ $FEC4 SINGLE STEP (OLD ROM ONLY!)
ROM.WRITE .EQ $FECD WRITE TO CASSETTE TAPE
ROM.READ .EQ $FEF0 READ TO CASSETTE TAPE
ROM.PRERR .EQ $FF2D PRINT "ERR" TO OUTPUT HOOK
ROM.BELL .EQ $FF3A OUTPUT BELL TO HOOKS
ROM.IORESR .EQ $FF3F RESTORE ALL WORKING REGISTER
ROM.IOSAVE .EQ $FF4A SAVE ALL WORKING REGISTERS
ROM.RETURN .EQ $FF58 "GUARANTEED" RETURN
ROM.OLDRST .EQ $FF59 OLD RESET, NO AUTOSTART
ROM.MON .EQ $FF65 ENTER MONITOR AND BEEP SPEAKER
ROM.MONZ .EQ $FF69 ENTER MONITOR QUIETLY
ROM.GETNUM .EQ $FFA7 ASCII TO HEX IN 3E & 3F
*--------------------------------------
MAN
SAVE inc/rom.ii.i

19
INC/ROM.IIE.txt Normal file
View File

@ -0,0 +1,19 @@
NEW
AUTO 3,1
*--------------------------------------
* IIe ROM Calls
*--------------------------------------
ROM.OLDCH .EQ $0478+3 LAST CH used by video firmware
ROM.MODE .EQ $04F8+3 video firmware operating mode
ROM.OURCH .EQ $0578+3 80 column CH
ROM.OURCV .EQ $05F8+3 80 column CV
ROM.CHAR .EQ $0678+3 character to be printed/read
ROM.XCOORD .EQ $06F8+3 GOTOXY X-coord (pascal only)
ROM.OLDBASL .EQ $0778+3 last BASL (pascal only)
ROM.OLDBASH .EQ $07F8+3 last BASH (pascal only)
ROM.AUXMOVE .EQ $C311
ROM.XFER .EQ $C314
*--------------------------------------
MAN
SAVE inc/rom.iie.i

47
INC/ROM.IIGS.txt Normal file
View File

@ -0,0 +1,47 @@
NEW
AUTO 3,1
*--------------------------------------
* IIgs Macros & ROM Calls
*--------------------------------------
*--------------------------------------
.MA SHORTMX
sep #$30
.EM
.MA SHORTM
sep #$20
.EM
.MA SHORTX
sep #$10
.EM
.MA LONGMX
rep #$30
.EM
.MA LONGM
rep #$20
.EM
.MA LONGX
rep #$10
.EM
*--------------------------------------
.MA IIGS
ldx ##]1
jsl $E10000
.EM
*--------------------------------------
P8QUIT .EQ $E0D000
GSOS .EQ $E100A8
GSOS2 .EQ $E100B0
OS_BOOT .EQ $E100BD indicates O/S initially booted
*--------------------------------------
MMStartUp .EQ $0202
NewHandle .EQ $0902
PtrToHand .EQ $2802
MessageCenter .EQ $1501
DisposeHandle .EQ $1002
MMShutDown .EQ $0302
ReadTimeHex .EQ $0D03
Int2Hex .EQ $220B
TLTextMountVolume .EQ $1201
*--------------------------------------
MAN
SAVE inc/rom.iigs.i

View File

@ -3,27 +3,41 @@ NEW
*--------------------------------------
* ProDOS Reserved ZP Location 00-1F,56-FF
*--------------------------------------
WNDLFT .EQ $20 SCROLL WINDOW LEFT
WNDWDTH .EQ $21 SCROLL WINDOW WIDTH
WNDTOP .EQ $22 SCROLL WINDOW TOP
WNDBOT .EQ $23 SCROLL WINDOW BOTTOM
CH .EQ $24 CURSOR HORIZONTAL
CV .EQ $25 CURSOR VERTICAL
GBASL .EQ $26 LORES BASE LOW
GBASH .EQ $27 LORES BASE HIGH
BASL .EQ $28 TEXT BASE LOW
BASH .EQ $29 TEXT BASE HIGH
BEND .EQ $2C LORES RIGHT END H LINE
VBOT .EQ $2D LORES BOTTOM OF V LINE
COLOR .EQ $30 LORES COLOR
INVFLG .EQ $32 NORMAL/INVERSE /FLASH (FF,7F,3F)
PROMPT .EQ $33 HOLDS PROMPT SYMBOL
CSWL .EQ $36 OUTPUT CHARACTER HOOK LOW
CSWH .EQ $37 OUTPUT CHARACTER HOOK HIGH
KSWL .EQ $38 INPUT CHARACTER HOOOK LOW
KSWH .EQ $39 INPUT CHARACTER HOOK HIGH
RNDL .EQ $4E RANDOM NUMBER LOW
RNDH .EQ $4F RANDOM NUMBER HIGH
ZP.WNDLFT .EQ $20 SCROLL WINDOW LEFT
ZP.WNDWDTH .EQ $21 SCROLL WINDOW WIDTH
ZP.WNDTOP .EQ $22 SCROLL WINDOW TOP
ZP.WNDBOT .EQ $23 SCROLL WINDOW BOTTOM
ZP.CH .EQ $24 CURSOR HORIZONTAL
ZP.CV .EQ $25 CURSOR VERTICAL
ZP.GBASL .EQ $26 LORES BASE LOW
ZP.GBASH .EQ $27 LORES BASE HIGH
ZP.BASL .EQ $28 TEXT BASE LOW
ZP.BASH .EQ $29 TEXT BASE HIGH
ZP.BEND .EQ $2C LORES RIGHT END H LINE
ZP.VBOT .EQ $2D LORES BOTTOM OF V LINE
ZP.COLOR .EQ $30 LORES COLOR
ZP.INVFLG .EQ $32 NORMAL/INVERSE /FLASH (FF,7F,3F)
ZP.PROMPT .EQ $33 HOLDS PROMPT SYMBOL
ZP.CSWL .EQ $36 OUTPUT CHARACTER HOOK LOW
ZP.CSWH .EQ $37 OUTPUT CHARACTER HOOK HIGH
ZP.KSWL .EQ $38 INPUT CHARACTER HOOOK LOW
ZP.KSWH .EQ $39 INPUT CHARACTER HOOK HIGH
ZP.PCL .EQ $3A
ZP.PCH .EQ $3B
ZP.A1L .EQ $3C
ZP.A1H .EQ $3D
ZP.A2L .EQ $3E
ZP.A2H .EQ $3F
ZP.A3L .EQ $40
ZP.A4L .EQ $42
ZP.CMDNUM .EQ $42
ZP.UNITNUM .EQ $43
ZP.BUFPTR .EQ $44
ZP.BLKNUM .EQ $46
ZP.RNDL .EQ $4E RANDOM NUMBER LOW
ZP.RNDH .EQ $4F RANDOM NUMBER HIGH
*--------------------------------------
MAN
SAVE inc/zp.i

View File

@ -3,8 +3,7 @@ NEW
*--------------------------------------
RTMP.IN.REQ
RTMP.IN.REP
clc
rts
jmp FRM.DiscardIn
*--------------------------------------
MAN
SAVE usr/src/lib/libetalk.s.rtmp

230
ProDOS.FX/PDOS8M.S.txt Normal file
View File

@ -0,0 +1,230 @@
NEW
AUTO 3,1
.LIST OFF
.OP 65816
.OR $2000
.TF PRODOS8M,TSYS
*--------------------------------------
KVER .EQ 30 release 3.0.0
*--------------------------------------
READCAT .EQ 1 Boot Block read Catalog at $C00
ENHFILENAME .EQ 1
LOWERCASE .EQ 1
ACL .EQ 1
LOGO .EQ 1
AUXLC .EQ 1
M.PM .EQ 0
M.RAM .EQ 0
*--------------------------------------
.INB inc/zp.i
.INB inc/io.i
.INB inc/io.iigs.i
.INB inc/io.d2.i
.INB inc/mli.i
.INB inc/mli.e.i
.INB inc/rom.ii.i
.INB inc/rom.iie.i
.INB inc/rom.iigs.i
*--------------------------------------
ILDR .EQ $0800
GP .EQ $BF00
XRW .EQ $D000
CLK .EQ $D742
XDOS.PathBuf .EQ $D700
*XDOS.prefixbuf .EQ $D742+125
XDOS.FCBs .EQ $D800 8 opened files
XDOS.VCBs .EQ $D900 10 mounted vols
XDOS.BMBuf .EQ $DA00 512 byte bitmap buffer
XDOS.GBuf .EQ $DC00 general purpose 512 byte block buffer
XDOS .EQ $DE00
RAM .EQ $FF00
IRQ .EQ $FF9B
RAMX .EQ $0200
*--------------------------------------
.DUMMY
.OR $10
ZPPtr1 .BS 2
ZPPtr2 .BS 2
ZPInBufPtr .BS 2
ZPOutBufPtr .BS 2
ZPnCnt .BS 2
ZPInMask .BS 1
ZPBLOfsLBits .BS 1
ZPBLOfsHBits .BS 1
ZPBLLenBits .BS 1
.ED
*--------------------------------------
.INB usr/src/prodos.fx/prodos.s.ldr
X.Unpak.XatYAX .DO AUXLC=1
stx X.Unpak.XatYAX.X+1
php
sei
sta IO.SETALTZP
tsx
stx $100
ldx $101
txs
X.Unpak.XatYAX.X
ldx #$FF SELF MODIFIED
jsr X.Unpak.XatYA
tsx
stx $101
ldx $100
txs
sta IO.CLRALTZP
plp
rts
.FIN
X.Unpak.XatYA sty ZPOutBufPtr
sta ZPOutBufPtr+1
lda PAKME.Table,x
sta ZPInBufPtr
lda PAKME.Table+1,x
sta ZPInBufPtr+1
.INB usr/src/shared/x.unpak.s
.DO LOGO=1
.INB usr/src/prodos.fx/prodos.s.logo
.FIN
*--------------------------------------
ILDR.PAK .DA #0
.DA ILDR.LEN
.INB usr/src/prodos.fx/prodos.s.ildr
GP.PAK .DA #0
.DA GP.LEN
.INB usr/src/prodos.fx/prodos.s.gp
XRW.PAK .DA #0
.DA XRW.LEN
.INB usr/src/prodos.fx/prodos.s.xrw
XDOS.PAK .DA #0
.DA XDOS.LEN
.INB usr/src/prodos.fx/prodos.s.xdos.a
.INB usr/src/prodos.fx/prodos.s.xdos.b
.INB usr/src/prodos.fx/prodos.s.xdos.c
.INB usr/src/prodos.fx/prodos.s.xdos.d
.INB usr/src/prodos.fx/prodos.s.xdos.e
.INB usr/src/prodos.fx/prodos.s.xdos.f
IRQ.PAK .DA #0
.DA IRQ.LEN
.INB usr/src/prodos.fx/prodos.s.irq
.DO M.RAM=1
RAM.PAK .DA #0
.DA RAM.LEN
.INB usr/src/prodos.fx/prodos.s.ram
RAMX.PAK .DA #0
.DA RAMX.LEN
.INB usr/src/prodos.fx/prodos.s.ramx
.FIN
DCLK.PAK .DA #0
.DA DCLK.LEN
.INB usr/src/prodos.fx/prodos.s.dclk
NCLK.PAK .DA #0
.DA NCLK.LEN
.INB usr/src/prodos.fx/prodos.s.nclk
TCLK.PAK .DA #0
.DA TCLK.LEN
.INB usr/src/prodos.fx/prodos.s.tclk
XCLK.PAK .DA #0
.DA XCLK.LEN
.INB usr/src/prodos.fx/prodos.s.xclk
CCLK.PAK .DA #0
.DA CCLK.LEN
.INB usr/src/prodos.fx/prodos.s.cclk
SEL1.PAK .DA #0
.DA SEL1.LEN
.INB usr/src/prodos.fx/prodos.s.sel1
SEL2.PAK .DA #0
.DA SEL2.LEN
.INB usr/src/prodos.fx/prodos.s.sel2
*--------------------------------------
PAKME.Table
PAKME.ID .SE 0
PAKME.ILDR.ID .EQ PAKME.ID
PAKME.ILDR .DA ILDR.PAK
PAKME.ID .SE PAKME.ID+2
PAKME.GP.ID .EQ PAKME.ID
PAKME.GP .DA GP.PAK
PAKME.ID .SE PAKME.ID+2
PAKME.XRW.ID .EQ PAKME.ID
PAKME.XRW .DA XRW.PAK
PAKME.ID .SE PAKME.ID+2
PAKME.XDOS.ID .EQ PAKME.ID
PAKME.XDOS .DA XDOS.PAK
PAKME.ID .SE PAKME.ID+2
PAKME.IRQ.ID .EQ PAKME.ID
PAKME.IRQ .DA IRQ.PAK
PAKME.ID .SE PAKME.ID+2
.DO M.RAM=1
PAKME.RAM.ID .EQ PAKME.ID
PAKME.RAM .DA RAM.PAK
PAKME.ID .SE PAKME.ID+2
PAKME.RAMX.ID .EQ PAKME.ID
PAKME.RAMX .DA RAMX.PAK
PAKME.ID .SE PAKME.ID+2
.FIN
PAKME.DCLK.ID .EQ PAKME.ID
PAKME.DCLK .DA DCLK.PAK
PAKME.ID .SE PAKME.ID+2
PAKME.NCLK.ID .EQ PAKME.ID
PAKME.NCLK .DA NCLK.PAK
PAKME.ID .SE PAKME.ID+2
PAKME.TCLK.ID .EQ PAKME.ID
PAKME.TCLK .DA TCLK.PAK
PAKME.ID .SE PAKME.ID+2
PAKME.XCLK.ID .EQ PAKME.ID
PAKME.XCLK .DA XCLK.PAK
PAKME.ID .SE PAKME.ID+2
PAKME.CCLK.ID .EQ PAKME.ID
PAKME.CCLK .DA CCLK.PAK
PAKME.ID .SE PAKME.ID+2
PAKME.SEL1.ID .EQ PAKME.ID
PAKME.SEL1 .DA SEL1.PAK
PAKME.ID .SE PAKME.ID+2
PAKME.SEL2.ID .EQ PAKME.ID
PAKME.SEL2 .DA SEL2.PAK
PAKME.ID .SE PAKME.ID+2
*--------------------------------------
.AS "PAKME" TAG
.DA $2000 BIN ORG
.DA #PAKME.ID/2 Chunk Count
.DA PAKME.Table Chunks
*--------------------------------------
MAN
SAVE usr/src/prodos.fx/pdos8m.s
ASM

View File

@ -1,13 +1,15 @@
NEW
AUTO 3,1
*--------------------------------------
CCLK.START >SHORTMX 8 bit mode.
lda statereg state register.
CCLK.START .PH CLK
CCLK.START1 >SHORTMX 8 bit mode.
lda IO.GS.STATEREG state register.
sta savestate save for restore after tool call.
and #$CF clear the read/write aux memory bits.
sta statereg make it real
sta IO.GS.STATEREG make it real
clc set e = 0 to set native mode
xce
xce
>LONGMX 16 bit mode.
lda ##$0000 zero out result space.
pha push 4 words for hex time result
@ -17,22 +19,22 @@ CCLK.START >SHORTMX 8 bit mode.
>IIGS ReadTimeHex
>SHORTM back to 8 bit to get results from stack
lda savestate restore state register
sta statereg
sta IO.GS.STATEREG
pla pull off seconds and ignore
pla
sta p8time minutes
sta GP.TIME minutes
pla
sta p8time+1 hours
sta GP.TIME+1 hours
pla year
.1 cmp #100 out of range?
bcc .2 no, go ahead and store
sbc #$64 else put back in range.
bra .1 try again
.2 sta p8date+1 year
.2 sta GP.DATE+1 year
pla
inc increment day for Prodos 8 format.
sta p8date day
sta GP.DATE day
pla month
inc increment month for Prodos 8 format.
asl shift month as it sits in between
@ -40,9 +42,9 @@ CCLK.START >SHORTMX 8 bit mode.
asl
asl
asl
ora p8date put all but the top bit of month
sta p8date value in the day byte.
rol p8date+1 put hi bit of month in low bit of year
ora GP.DATE put all but the top bit of month
sta GP.DATE value in the day byte.
rol GP.DATE+1 put hi bit of month in low bit of year
pla pull of unused byte
pla pull off day of week. stack now clean.
sec go back to emulation mode
@ -50,7 +52,9 @@ CCLK.START >SHORTMX 8 bit mode.
rts
savestate .HS 00 state of the state register
*--------------------------------------
.LIST ON
.EP
*--------------------------------------
* .LIST ON
CCLK.LEN .EQ *-CCLK.START
.LIST OFF
*--------------------------------------

View File

@ -1,13 +1,15 @@
NEW
AUTO 3,1
*--------------------------------------
* Driver For DS1215
* Driver For Not Slot Clock (DS1215)
*--------------------------------------
* we can safely use $200 (used by TCLK)
*--------------------------------------
DS1215.DATA .EQ $200 Reverted YY MM DD Day HH mm SS CS
*--------------------------------------
DCLK.START php
DCLK.START .PH CLK
DCLK.START1 php
sei
lda $C400
@ -79,19 +81,19 @@ DCLK.START php
asl
asl
ora DS1215.DATA+2 Get DD
sta DATELO
sta GP.DATE
* lda DS1215.DATA Get YY
pla
rol
sta DATELO+1
sta GP.DATE+1
lda DS1215.DATA+5 Get mm
sta TIMELO
sta GP.TIME
lda DS1215.DATA+4 Get HH
sta TIMELO+1
sta GP.TIME+1
stz $C0C0
@ -103,7 +105,9 @@ DCLK.START php
*--------------------------------------
DS1215.SIG .HS 5CA33AC55CA33AC5 Reverted 7->0
*--------------------------------------
.LIST ON
.EP
*--------------------------------------
* .LIST ON
DCLK.LEN .EQ *-DCLK.START
.LIST OFF
*--------------------------------------

View File

@ -1,70 +1,69 @@
NEW
AUTO 3,1
*--------------------------------------
GP.START jmp GP.MLIENTRY $2E00-2EFF moved to $BF00
jspare jmp * will be changed to point to dispatcher.
clockv rts changed to jmp ($4C) if clock present.
.DA XDOS.ClockDrv clock routine entry address.
GP.P8errv jmp XDOS.syserr error reporting hook.
GP.SysDeath jmp XDOS.SysDeath system failure hook.
p8error .DA #0
.DA nodevice
.DA nodevice
.DA nodevice
.DA nodevice
.DA nodevice
.DA nodevice
.DA nodevice
.DA nodevice
.DA nodevice
.DA nodevice
.DA nodevice
.DA nodevice
.DA nodevice
.DA nodevice
.DA nodevice
.DA nodevice
.DA #0 DEVNUM
.DA #$ff DEVCNT : count (-1) active devices
.HS 00000000000000 DEVLST : up to 14 units may be active
GP.START .PH GP
GP.START1 jmp GP.MLIENTRY MLI Entry point
jmp * GP.DISPATCH : will be changed to point to dispatcher.
rts GP.CLOCK : changed to jmp ($4C) if clock present.
.DA CLK clock routine entry address.
jmp XDOS.SysErr GP.SYSERR : error reporting hook.
jmp XDOS.SysDeath GP.SYSDEATH : system failure hook.
.DA #0 GP.ERROR
.DA XDOS.NoDevice GP.DEVPTRS
.DA XDOS.NoDevice
.DA XDOS.NoDevice
.DA XDOS.NoDevice
.DA XDOS.NoDevice
.DA XDOS.NoDevice
.DA XDOS.NoDevice
.DA XDOS.NoDevice
.DA XDOS.NoDevice
.DA XDOS.NoDevice
.DA XDOS.NoDevice
.DA XDOS.NoDevice
.DA XDOS.NoDevice
.DA XDOS.NoDevice
.DA XDOS.NoDevice
.DA XDOS.NoDevice
.DA #0 GP.DEVNUM
.DA #$ff GP.DEVCNT : count (-1) active devices
.HS 00000000000000 GP.DEVLST : up to 14 units may be active
.HS 00000000000000
.DA #0
*--------------------------------------
.AS "(C)APPLE "
.AS "(C)APPLE " 10 bytes, used for VEDRIVE/VSDRIVE
*--------------------------------------
GP.MLIENTRY php
php GP.MLIENTRY
sei
jmp GP.MLICONT
*--------------------------------------
*aftirq sta RRAMWRAMBNK1 read/write RAM bank 1
* jmp fix45 restore $45 after interrupt in LC
*oldacc .DA #0
*afbank .HS 00
GP.TOOLBOX bit IO.RRAMWRAMBNK1
jmp XDOS.TBX
*--------------------------------------
.LIST ON
GP.FREE1 .EQ $BF58-*
.LIST OFF
.BS GP.FREE1
*--------------------------------------
*--------------------------------------
* memory map of lower 48k. each bit represents 1 page.
* protected pages = 1, unprotected = 0
*--------------------------------------
.HS C000000000000000 MEMTABL
.HS C000000000000000 GP.MEMTABL
.HS 0000000000000000
.HS 0000000000000001
*--------------------------------------
* table of buffer addresses for currently open files.
* these can only be changed thru the mli call setbuf.
*--------------------------------------
buftbl .HS 0000 file #1
.HS 0000 file #2
.HS 0000 file #3
.HS 0000 file #4
.HS 0000 file #5
.HS 0000 file #6
.HS 0000 file #7
.HS 0000 file #8
.HS 0000 GB.BUFTABL
.HS 0000
.HS 0000
.HS 0000
.HS 0000
.HS 0000
.HS 0000
.HS 0000
*--------------------------------------
* table of interrupt vectors. these can only be changed
* by the mli call allocate_interrupt. values of the registers
@ -75,31 +74,27 @@ GP.IRQVs .HS 0000 int #1
.HS 0000 int #2
.HS 0000 int #3
.HS 0000 int #4
*--------------------------------------
*p8areg .DA #0 A register savearea
*p8xreg .DA #0 X register savearea
*p8yreg .DA #0 Y register savearea
*p8sreg .DA #0 S register savearea
*p8preg .DA #0 P register savearea
*bankid .DA #1 bank ID byte (ROM/RAM)
*intadr .HS 0000 interrupt return address
*--------------------------------------
.BS 8
*--------------------------------------
p8date .HS 0000 bits 15-9=yr, 8-5=mo, 4-0=day
p8time .HS 0000 bits 12-8=hr, 5-0=min, low-hi format
flevel .DA #0 current file level
bubit .DA #0 backup bit disable, setfileinfo only
*spare1 .DA #0 used to save acc
.DA #0
newpfxptr .DA #0 appletalk alternate prefix ptr
machidbyte .DA #0 machine ID byte
rommap .DA #0 slot ROM bit map
preflag .DA #0 prefix active flag
mliact .DA #0 MLI active flag
mliretn .DA 0 last MLI call return address
mlix .DA #0 MLI X register savearea
mliy .DA #0 MLI Y register savearea
.HS 0000 GP.DATE
.HS 0000 GP.TIME
.DA #0 GP.FLEVEL : current file level
.DA #0 GP.BUBIT : backup bit disable, setfileinfo only
.DA #0 spare1: ProDOS 203 used to save acc
.DA #0 GP.NEWPFXPTR : appletalk alternate prefix ptr
.DA #0 GP.MACHID : machine ID byte
.DA #0 GP.SLTBYT : slot ROM bit map
.DA #0 GP.PFXPTR : prefix active flag
.DA #0 GP.MLIACTV : MLI active flag
.DO AUXLC=0
GP.MLIRTN .DA 0 MLI call return address
GP.MLIX .DA #0 MLI X register savearea
GP.MLIY .DA #0 MLI Y register savearea
.ELSE
GP.MLIEXITX2 pha MLI error
lda GP.BNKBYT1
.FIN
*--------------------------------------
* language card bank switching routines which must reside at $BFA0 because
* workstation software patches this area
@ -107,75 +102,93 @@ mliy .DA #0 MLI Y register savearea
GP.MLIEXIT eor $E000 test for rom enable
beq .1 taken if ram enabled
sta RROMBNK2 read ROM
sta IO.RROMBNK2 read ROM
bne .2 always
.1 lda bnkbyt2 for alternate ram
.1 lda GP.BNKBYT2 for alternate ram
eor $D000 test
beq .2 branch if not alternate ram
lda RRAMWRAMBNK2 else enable alt $D000
lda IO.RRAMWRAMBNK2 else enable alt $D000
.2 pla return code
rti re-enable interrupts and return
*--------------------------------------
GP.MLICONT sec
ror mliact notify interrupt routines MLI active.
GP.MLICONT .DO AUXLC=0
sec
ror GP.MLIACTV notify interrupt routines MLI active.
lda $E000 preserve language card/rom orientation
sta bnkbyt1 for proper restoration when mli exits.
sta GP.BNKBYT1 for proper restoration when mli exits.
lda $D000
sta bnkbyt2
lda RRAMWRAMBNK1 force ram card on
lda RRAMWRAMBNK1 with write allowed
jmp XDOS
sta GP.BNKBYT2
lda IO.RRAMWRAMBNK1 force ram card on
lda IO.RRAMWRAMBNK1 with write allowed
jmp XDOS.MAIN
.ELSE
sty GP.MLIEXIT.Y+1
pla A = Status register
ply
sty GP.MLIEXIT.PCL+1
ply
sty GP.MLIEXIT.PCH+1
ldy $E000
sty GP.BNKBYT1
ldy $D000 Y = BNKBYT2
sta IO.SETALTZP
bit IO.RRAMWRAMBNK1
jmp XDOS.AUX
*--------------------------------------
*GP.IrqExit lda bankid determine state of ram card (ROM/RAM)
*irqxit0
* beq .2 branch if ram card enabled.
* bmi .1 branch if alternate $D000 enabled.
* lsr determine if no ram card present.
* bcc .3 branch if rom only system.
* lda RROMWRAMBNK2 enable rom
* bcs .3 always taken
*.1 lda RRAMWRAMBNK2 enable alternate $D000
*.2 lda #$01 preset bankid for rom.
* sta bankid (reset if ram card interrupt)
*.3 lda p8areg restore acc
* rti exit
* A = Status register
* Y = MLI Error code
*--------------------------------------
GP.TOOLBOX bit RRAMWRAMBNK1
bit RRAMWRAMBNK1
jsr XDOS.TBX
bit RROMBNK2
rts
GP.MLIEXITX sta IO.CLRALTZP
GP.MLIEXIT.PCH ldx #$FF SELF MODIFIED
phx
GP.MLIEXIT.PCL ldx #$FF SELF MODIFIED
phx
phy S reg for RTI
GP.MLIEXIT.X ldx #$FF SELF MODIFIED
GP.MLIEXIT.Y ldy #$FF SELF MODIFIED
bra GP.MLIEXITX2
.FIN
*--------------------------------------
.LIST ON
GP.FREE2 .EQ $BFEB-*
.LIST OFF
.BS GP.FREE2
*--------------------------------------
GP.IRQV bit RRAMWRAMBNK1 ***NEW ROM ONLY IRQ $fffe > $Cxxx space***
bit RRAMWRAMBNK1 Entry used when rom/mainLC/auxLC
GP.IRQV bit IO.RRAMWRAMBNK1 ***NEW ROM ONLY IRQ $fffe > $Cxxx space***
bit IO.RRAMWRAMBNK1 Entry used when rom/mainLC/auxLC
jmp IRQ
*--------------------------------------
bnkbyt1 .DA #0
bnkbyt2 .DA #0
GP.BNKBYT1 .DA #0
GP.BNKBYT2 .DA #0
.HS 00000000 pad to before $BFFA
.DA #4 gsos compatibility byte ($BFFA)
.DA #0 pad
.DA #0 reserved
.DA #0 version # of running interpreter
.DA #0 preserved for System Utilities
kversion .HS 23 represents release 2.0.3
.DA #KVER GP.KVER : represents release 2.0.3
*--------------------------------------
.EP
*--------------------------------------
GP.LEN .EQ *-GP.START
*--------------------------------------
MAN
SAVE usr/src/prodos.fx/prodos.s.gp
LOAD usr/src/prodos.fx/prodos.s
LOAD usr/src/prodos.fx/pdos8m.s
ASM

View File

@ -1,8 +1,18 @@
NEW
AUTO 3,1
*--------------------------------------
ILDR.START jsr MLI check for file 'atinit'
.DA #MLIGETFILEINFO
devid .EQ $12
src .EQ $12
dst .EQ $14
*--------------------------------------
ILDR.DBuf .EQ $0C00
ILDR.IOBuf .EQ $1400
*--------------------------------------
ILDR.START .PH ILDR
ILDR.START1 jsr MLI check for file 'atinit'
.DA #MLI.GFINFO
.DA ILDR.GFINFO
bcs ILDR.ENUMPM
@ -17,18 +27,18 @@ ILDR.START jsr MLI check for file 'atinit'
.9 jmp ILDR.MLIERR
.1 lda RROMBNK2 enable ROM
jsr sysentry execute ATinit
.1 lda IO.RROMBNK2 enable ROM
jsr $2000 execute ATinit
*--------------------------------------
* BOOT block read 4 directory blocks at dbuf=$C00 -> $13FF
*--------------------------------------
ILDR.ENUMPM .DO READCAT=1
lda LDR.MLIOL.P+1 Boot unitnum
lda LDR.MLIOL.P+1 Boot ZP.UNITNUM
sta ILDR.MLIRB.P+1
stz dst
lda /dbuf
lda /ILDR.DBuf
ldy #$02 read directory into buffer
ldx #0
@ -38,11 +48,13 @@ ILDR.ENUMPM .DO READCAT=1
stx ILDR.MLIRB.P+5 Blk Num HI
jsr MLI
.DA #MLIREADBLOCK
.DA #MLI.READBLOCK
.DA ILDR.MLIRB.P
bcs .99
bcc .23
jmp ILDR.MLIERR
ldy #$03 get next block# from link
.23 ldy #$03 get next block# from link
lda (dst),y
tax
dey
@ -54,24 +66,24 @@ ILDR.ENUMPM .DO READCAT=1
lda dst+1
inc
inc add $200 to buffer pointer
cmp /dbuf+$800 until it points past end of buffer.
cmp /ILDR.DBuf+$800 until it points past end of buffer.
bcc .22 if ok, read next block.
.28 .FIN
*--------------------------------------
.DO PM
.DO M.PM=1
jsr ILDR.EnumInit
.1 ldx #S.FI.T.BIN
ldy #ILDR.KMPFX
lda /ILDR.KMPFX
ldy #ILDR.PMPFX
lda /ILDR.PMPFX
clc prefix
jsr ILDR.EnumNext
bcs .8
jsr ILDR.LoadFilePBuf
bcs .99
bcs ILDR.MLIERR
ldx #3
@ -80,9 +92,9 @@ ILDR.ENUMPM .DO READCAT=1
dex
bpl .2
jsr sysentry
jsr $2000
bit RROMBNK2 enable ROM
bit IO.RROMBNK2 enable ROM
ldx #0
@ -91,12 +103,10 @@ ILDR.ENUMPM .DO READCAT=1
inx
cpx #4
bne .3
>DEBUGOA
>DEBUGOA
bra .1
.99 jmp ILDR.MLIERR
.8 .FIN
*--------------------------------------
@ -112,27 +122,27 @@ ILDR.ENUMPM .DO READCAT=1
jsr ILDR.LoadFilePBuf
bcs ILDR.MLIERR
bit RROMBNK2 enable ROM
bit IO.RROMBNK2 enable ROM
bit RDIOUDIS
sta SETIOUDIS
sta CLRDHIRES
bit IO.RDIOUDIS
sta IO.SETIOUDIS
sta IO.CLRDHIRES
bmi .5
sta CLRIOUDIS
sta IO.CLRIOUDIS
.5 sta CLR80DISP
sta CLR80STORE
sta SETTEXT
sta CLRMIXED
jsr init
jsr setvid
jsr setkbd
jsr home
jmp sysentry go run interpreter
.5 sta IO.CLR80DISP
sta IO.CLR80STORE
sta IO.SETTEXT
sta IO.CLRMIXED
jsr ROM.INIT
jsr ROM.SETVID
jsr ROM.SETKBD
jsr ROM.HOME
jmp $2000 go run interpreter
.9 jsr MLI no .SYSTEM found, so quit.
.DA #MLIQUIT
.DA #MLI.QUIT
.DA ILDR.QUIT
*--------------------------------------
ILDR.MLIERR cmp #MLI.E.BADBUF
@ -143,47 +153,47 @@ ILDR.MLIERR cmp #MLI.E.BADBUF
.HS 2C BIT ABS
.1 ldx #ILDR.MSG.SYSLOADERR-ILDR.MSG
bit RROMBNK2
jsr SETINV
bit IO.RROMBNK2
jsr ROM.SETINV
.2 lda ILDR.MSG,x
pha
ora #$80
jsr COUT
jsr ROM.COUT
inx
pla
bpl .2
lda #$A0
jsr COUT
jsr ROM.COUT
ldy #0
.3 iny
lda pbuf,y
jsr COUT
cpy pbuf
lda LDR.PBuf,y
jsr ROM.COUT
cpy LDR.PBuf
bne .3
bra *
*--------------------------------------
ILDR.EnumInit lda /dbuf search directory buffer
ILDR.EnumInit lda /ILDR.DBuf search directory buffer
sta idxl+1
lda #dbuf+4 skip Prev/next Block Ptr
lda #ILDR.DBuf+4 skip Prev/next Block Ptr
sta idxl
lda dbuf+35 EL
lda ILDR.DBuf+35 EL
sta ILDR.EL
lda dbuf+36 EPB
lda ILDR.DBuf+36 EPB
sta ILDR.EPB
sta ILDR.EITB
lda dbuf+37 FCLO
lda ILDR.DBuf+37 FCLO
eor #$ff
sta ILDR.nFC
lda dbuf+38 FCHI
lda ILDR.DBuf+38 FCHI
eor #$ff
sta ILDR.nFC+1
@ -235,12 +245,12 @@ ILDR.EnumNext stx ILDR.FT
bmi .1 $D, $E, or $F...
and #$0F
sta pbuf filename Len
sta LDR.PBuf filename Len
tay
.5 lda (idxl),y
sta pbuf,y
sta LDR.PBuf,y
dey
bne .5
@ -251,16 +261,16 @@ ILDR.EnumNext stx ILDR.FT
bne .1
lda (src) expected prefix/suffix len
cmp pbuf
cmp LDR.PBuf
bcs .1 filename LE prefix/suffix
bit ILDR.bPFXSFX
bpl .12 go check prefix
tay
ldx pbuf
ldx LDR.PBuf
.11 lda pbuf,x
.11 lda LDR.PBuf,x
eor (src),y
asl
bne .1
@ -273,7 +283,7 @@ ILDR.EnumNext stx ILDR.FT
.12 lda (src) expected prefix/suffix len
tay
.13 lda pbuf,y
.13 lda LDR.PBuf,y
eor (src),y
asl
bne .1
@ -285,7 +295,7 @@ ILDR.EnumNext stx ILDR.FT
lda (idxl),y
bpl .10 no lowercase information
ldx pbuf
ldx LDR.PBuf
.6 cpx #8 CS if MIN_VERSION to use
bcs .7
@ -303,9 +313,9 @@ ILDR.EnumNext stx ILDR.FT
and ILDR.LCBits-8,x
beq .9
.8 lda pbuf,x
.8 lda LDR.PBuf,x
eor #$20 to lowercase
sta pbuf,x
sta LDR.PBuf,x
.9 dex
bne .6
@ -314,19 +324,19 @@ ILDR.EnumNext stx ILDR.FT
rts
*--------------------------------------
ILDR.LoadFilePBuf
ldy #pbuf
lda /pbuf
ldy #LDR.PBuf
lda /LDR.PBuf
ILDR.LoadFile sty ILDR.OPEN+1 Filename
sta ILDR.OPEN+2
jsr MLI
.DA #MLIOPEN
.DA #MLI.OPEN
.DA ILDR.OPEN
bcs .9
jsr MLI
.DA #MLIGETEOF
.DA #MLI.GETEOF
.DA ILDR.GETEOF
bcs .9
@ -342,15 +352,15 @@ ILDR.LoadFile sty ILDR.OPEN+1 Filename
lda ILDR.GETEOF+2
bne .99 more than $9F00
.1 jsr MLI
.DA #MLIREAD
.1
jsr MLI
.DA #MLI.READ
.DA ILDR.READ
bcs .9
jsr MLI
.DA #MLICLOSE
.DA #MLI.CLOSE
.DA ILDR.CLOSE
.9 rts
.99 lda #MLI.E.BADBUF
@ -375,7 +385,7 @@ ILDR.MLIRB.P .DA #3
*--------------------------------------
ILDR.OPEN .DA #3 PARAM CNT
.BS 2 Filename
.DA iobuf i/o buffer
.DA ILDR.IOBuf
.HS 01 REF
*--------------------------------------
ILDR.GETEOF .DA #2 PARAM CNT
@ -384,7 +394,7 @@ ILDR.GETEOF .DA #2 PARAM CNT
*--------------------------------------
ILDR.READ .DA #4 PARAM CNT
.HS 01 REF
.DA sysentry
.DA $2000
.DA $9F00 Max file size
.HS 0000
*--------------------------------------
@ -397,14 +407,11 @@ ILDR.QUIT .DA #4 PARAM CNT
.HS 00
.HS 0000
*--------------------------------------
ILDR.ATINIT .DA #6
.AS "ATINIT"
ILDR.KMPFX .DA #3
.AS "PM."
ILDR.SYSTEMSFX .DA #7
.AS ".SYSTEM"
*--------------------------------------
ILDR.LEN .EQ *-ILDR.START
ILDR.ATINIT .PS "ATINIT"
.DO M.PM=1
ILDR.PMPFX .PS "PM."
.FIN
ILDR.SYSTEMSFX .PS ".SYSTEM"
*--------------------------------------
.DUMMY
ILDR.EPB .BS 1
@ -414,8 +421,12 @@ ILDR.FT .BS 1
ILDR.EITB .BS 1
ILDR.bPFXSFX .BS 1
.ED
*--------------------------------------
.EP
*--------------------------------------
ILDR.LEN .EQ *-ILDR.START
*--------------------------------------
MAN
SAVE usr/src/prodos.fx/prodos.s.ildr
LOAD usr/src/prodos.fx/prodos.s
LOAD usr/src/prodos.fx/pdos8m.s
ASM

View File

@ -5,7 +5,9 @@ NEW
* address $FFCB (ROM rts opcode) for rom switching to function.
* $FF9B
*--------------------------------------
IRQ ldx #$FA save 6 bytes of page 0
IRQ.START .PH IRQ
IRQ.START1 ldx #$FA save 6 bytes of page 0
.2 lda $00,x
sta IRQ.ZPSave-$FA,x
@ -35,7 +37,7 @@ IRQ ldx #$FA save 6 bytes of page 0
bne IRQ.Done before system death.
lda #$01 bad irq so
jsr GP.SysDeath kill the system.
jsr GP.SYSDEATH kill the system.
*--------------------------------------
.LIST ON
IRQ.FREE1 .EQ $ffc8-*
@ -43,7 +45,7 @@ IRQ.FREE1 .EQ $ffc8-*
.BS IRQ.FREE1
IRQ.Reset1 sta RROMBNK2
IRQ.ToRomRTS sta IO.RROMBNK2
.DO *=$FFCB
* hits ROM rts at $FFCB
.ELSE
@ -57,7 +59,7 @@ IRQ.Done ldx #$FA
inx
bne .1
* lda CLRC8ROM
* lda IO.CLRC8ROM
*IRQ.DoneCn lda $C100 SELF MODIFIED
* lda IRQ.DoneCn+2
@ -67,11 +69,11 @@ IRQ.Done ldx #$FA
*--------------------------------------
IRQ.GoX jmp (GP.IRQVs,x) interrupt routine x
IRQ.Reset lda /resetv-1
IRQ.Reset lda /ROM.RESETV-1
pha
lda #resetv-1
lda #ROM.RESETV-1
pha
bra IRQ.Reset1
bra IRQ.ToRomRTS
IRQ.Cnt .HS 00 # of unclaimed interrupts.
IRQ.ZPSave .HS 000000000000 6 bytes
@ -82,12 +84,14 @@ IRQ.FREE2 .EQ $fffa-*
.BS IRQ.FREE2
.DA nmivect nmi handler
.DA ROM.NMIJMP nmi handler
.DA IRQ.Reset reset handler
irqv .DA * PATCHED with ROM vector by LDR
.LIST OFF
*--------------------------------------
IRQ.LEN .EQ *-IRQ
.EP
*--------------------------------------
IRQ.LEN .EQ *-IRQ.START
*--------------------------------------
MAN
SAVE usr/src/prodos.fx/prodos.s.irq

View File

@ -1,5 +1,12 @@
NEW
AUTO 3,1
*--------------------------------------
idapple .EQ $0C model machine id
idxl .EQ $10 general use 16 bit index pointer
*--------------------------------------
auxsp .EQ $0101
*--------------------------------------
LDR.PBuf .EQ $0280
*--------------------------------------
.MA DEBUG
:1 bit $C000
@ -14,11 +21,11 @@ NEW
:1 .EQ *
.EM
*--------------------------------------
H2000 jmp prostart
jmp atalkset
jmp p16start
LDR.START jmp LDR.START8
jmp LDR.STARTATK
jmp LDR.START8
*--------------------------------------
LDR.MSG.PRODOS .AT "PRODOS FX 0.94"
LDR.MSG.PRODOS .AT "PRODOS FX 0.95"
LDR.MSG.UNSUPP .AT "UNSUPPORTED HARDWARE"
LDR.MSG.IIe .AT "//e"
LDR.MSG.IIc .AT "//c"
@ -28,21 +35,22 @@ LDR.MSG.CLK .AT "?Clk"
LDR.MSG.RAM .AT "/RAM"
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
LDR.START16 inc LDR.BootFlag set = 2 for GQuit rts
LDR.STARTATK inc LDR.BootFlag set = 1 for appletalk rts
LDR.START8 lda ZP.UNITNUM
sta LDR.MLIOL.P+1
cld
bit RROMBNK2
bit IO.RROMBNK2
sta CLR80DISP
sta CLR80STORE
sta IO.CLR80DISP
sta IO.CLR80STORE
jsr init
jsr setvid
jsr setkbd
jsr home
jsr ROM.INIT
jsr ROM.SETVID
jsr ROM.SETKBD
jsr ROM.HOME
lda #32
@ -56,11 +64,11 @@ prostart lda unitnum
jsr LDR.PrintX
sec
jsr idroutine returns system info
jsr ROM.IDROUTINE returns system info
bcs .2 taken if not a //gs
lda #$80
trb newvideo video mode select
trb IO.GS.NEWVIDEO video mode select
* test for at least a 65c02
@ -73,7 +81,7 @@ prostart lda unitnum
stz auxsp
sta SETALTZP
sta IO.SETALTZP
stz auxsp
lda auxsp
@ -83,7 +91,7 @@ prostart lda unitnum
lda auxsp
beq LDR.UNSUPP.HW
sta CLRALTZP
sta IO.CLRALTZP
lda auxsp
bne LDR.UNSUPP.HW NO 128k
@ -91,7 +99,7 @@ prostart lda unitnum
LDR.CheckROM ldx #LDR.MSG.IIE
lda #MACHID.T.IIe+MACHID.M.128+MACHID.COL80
ldy version check hardware id
ldy ROM.VERSION check hardware id
cpy #$06 apple //e?
beq .1 if yes
@ -101,13 +109,14 @@ LDR.CheckROM ldx #LDR.MSG.IIE
ldx #LDR.MSG.UNKNOWN
bra m128k machine is unknown, Assume //e Enh 128k
.1 ldy zidbyte //c ?
.1 ldy ROM.ZIDBYTE //c ?
bne .2
ldy kbd //c, check for keypress
ldy IO.KBD //c, check for keypress
cpy #$9B escape? (to disable accelerator)
bne .11
sta KBDSTROBE clear keyboard
sta IO.KBDSTROBE clear keyboard
.11 lda #MACHID.T.IIc+MACHID.M.128+MACHID.COL80
ldx #LDR.MSG.IIC
@ -123,7 +132,7 @@ LDR.CheckROM ldx #LDR.MSG.IIE
bra m128k not a //e Enh....
.3 sec
jsr idroutine //gs ????
jsr ROM.IDROUTINE //gs ????
bcs m128k no.....
inc LDR.cortland
@ -151,31 +160,31 @@ m128k sta idapple Save MACHID in temp location
bpl .2
lda #$01 patch for the gs rom
trb statereg to force off intcxrom
trb IO.GS.STATEREG to force off intcxrom
ldx #PAKME.GP-PAKME.Table
ldy #MLI
lda /MLI
ldx #PAKME.GP.ID
ldy #GP
lda /GP
jsr X.Unpak.XatYA
jsr LDR.LCBNK1
ldx #PAKME.XRW-PAKME.Table
ldy #$D000
lda /$D000
jsr X.Unpak.XatYA
ldx #PAKME.XRW.ID
ldy #XRW
lda /XRW
jsr X.Unpak.XatYAX
ldx #0
.1 stz FCBs,x
stz VCBs,x
.1 stz XDOS.FCBs,x
stz XDOS.VCBs,x
inx
bne .1
ldx #PAKME.XDOS-PAKME.Table
ldy #$DE00
lda /$DE00
jsr X.Unpak.XatYA
ldx #PAKME.XDOS.ID
ldy #XDOS
lda /XDOS
jsr X.Unpak.XatYAX
ldx #XDOS.DATA.LEN
@ -183,65 +192,64 @@ m128k sta idapple Save MACHID in temp location
dex
bne .3
ldx #PAKME.IRQ-PAKME.Table
ldy #$FF9B
lda /$FF9B
jsr X.Unpak.XatYA
ldx #PAKME.IRQ.ID
ldy #IRQ
lda /IRQ
jsr X.Unpak.XatYAX
LDR.IRQ lda RROMWRAMBNK2
LDR.IRQ lda IO.RROMWRAMBNK2
ldy irqv interrupt vector
ldx irqv+1 x = high byte
jsr LDR.LCBNK1
sta SETALTZP
sta IO.SETALTZP
sty irqv save irq vector in aux lc
stx irqv+1
sta CLRALTZP
sta IO.CLRALTZP
sty irqv
stx irqv+1 save irq vector in main lc
lda #calldisp
sta jspare+1 P8 system death vector
lda /calldisp
sta jspare+2
lda #XDOS.CallDisp
sta GP.DISPATCH+1 P8 system death vector
lda /XDOS.CallDisp
sta GP.DISPATCH+2
.DO LOWERCASE=0
lda kversion
lda GP.KVER
sta xdosver save current version for dir use
.FIN
lda idapple
sta MACHID
sta GP.MACHID
lda LDR.cortland
beq LDR.II branch if // family
*--------------------------------------
LDR.IIGS sta cortflag
LDR.IIGS sta XDOS.CortFlag
lda #calldisp
sta cortdisp
lda /calldisp
sta cortdisp+1
lda #XDOS.CallDisp
sta XDOS.CortDisp
lda /XDOS.CallDisp
sta XDOS.CortDisp+1
* lda RROMWRAMBNK2
* lda IO.RROMWRAMBNK2
* stz vmode force setvid to reset cursor
* stz ROM.MODE force setvid to reset cursor
* jsr setvid reset output to screen
* jsr LDR.LCBNK1
lda #'C'
ldx PAKME.CCLK
ldy PAKME.CCLK+1
ldx #PAKME.CCLK.ID
jsr LDR.SetupCLK
* ldx #PAKME.SEL2-PAKME.Table
* ldx #PAKME.SEL2.ID
* ldy #$1000
* lda /$1000
* jsr X.Unpak.XatYA
* jsr X.Unpak.XatYAX
ldx #PAKME.SEL2-PAKME.Table
jsr LDR.SetupQC
ldx #PAKME.SEL2.ID
jsr LDR.SetupSEL
*--------------------------------------
lda LDR.BootFlag
bne .1 branch if prodos 8 alone
@ -253,22 +261,24 @@ LDR.IIGS sta cortflag
.1 bra LDR.Common
*--------------------------------------
LDR.II ldx #PAKME.SEL1-PAKME.Table
jsr LDR.SetupQC
LDR.II ldx #PAKME.SEL1.ID
jsr LDR.SetupSEL
jsr LDR.ClkDevScan
*--------------------------------------
LDR.Common jsr LDR.BlkDevScan
.DO M.RAM=1
jsr LDR.SetupRAM
.FIN
*--------------------------------------
lda LDR.MLIOL.P+1 Boot unitnum
sta DEVNUM
lda LDR.MLIOL.P+1 Boot ZP.UNITNUM
sta GP.DEVNUM
ldx DEVCNT
ldx GP.DEVCNT
.1 lda DEVLST,x
eor DEVNUM
.1 lda GP.DEVLST,x
eor GP.DEVNUM
and #$f0
beq .2
@ -277,73 +287,73 @@ LDR.Common jsr LDR.BlkDevScan
brk
.2 lda DEVLST,x
.2 lda GP.DEVLST,x
pha
.3 lda DEVLST+1,x
sta DEVLST,x
cpx DEVCNT
.3 lda GP.DEVLST+1,x
sta GP.DEVLST,x
cpx GP.DEVCNT
inx
bcc .3
pla
ldx DEVCNT
sta DEVLST,x
ldx GP.DEVCNT
sta GP.DEVLST,x
lda LDR.BootFlag get setup entry point flag
beq LDR.SetPrefix taken if normal boot.
bit RROMBNK2
bit IO.RROMBNK2
rts return to caller at setup entry point.
*--------------------------------------
LDR.SetPrefix jsr MLI
.DA #MLIONLINE
.DA #MLI.ONLINE
.DA LDR.MLIOL.P
bcs .9
lda pbuf+1 get volume name length.
lda LDR.PBuf+1 get volume name length.
and #$0F strip SDDDxxxx
beq .9
inc add 1 for leading '/'
sta pbuf save prefix length.
sta LDR.PBuf save prefix length.
lda #'/' place leading '/' in prefix buffer
sta pbuf+1
sta LDR.PBuf+1
jsr MLI
.DA #MLISETPREFIX
.DA #MLI.SETPREFIX
.DA LDR.MLISETP.P
bcs .9
jsr CROUT
jsr ROM.CROUT
ldx #PAKME.ILDR-PAKME.Table
ldy #ILDR.START
lda /ILDR.START
ldx #PAKME.ILDR.ID
ldy #ILDR
lda /ILDR
jsr X.Unpak.XatYA
jmp ILDR.START
jmp ILDR
.9 ldx #LDR.MSG.PFXERR
jsr LDR.PrintX
bra *
*--------------------------------------
LDR.SetupQC bit RRAMWRAMBNK2 read/write RAM bank 2
bit RRAMWRAMBNK2
LDR.SetupSEL bit IO.RRAMWRAMBNK2 read/write RAM bank 2
bit IO.RRAMWRAMBNK2
ldy #$D100
lda /$D100
jsr X.Unpak.XatYA
jsr X.Unpak.XatYAX
lda #$EE byte to distinguish LC bank 2
sta $D000
*--------------------------------------
LDR.LCBNK1 lda RRAMWRAMBNK1 switch in LC bank 1
lda RRAMWRAMBNK1
LDR.LCBNK1 lda IO.RRAMWRAMBNK1 switch in LC bank 1
lda IO.RRAMWRAMBNK1
rts
*--------------------------------------
DS121x.DATA1 .EQ idxl
DS121x.DATA2 .EQ A1L
DS121x.DATA2 .EQ ZP.A1L
*--------------------------------------
LDR.ClkDevScan jsr LDR.IsIIc
bcc LDR.ClkDevNCLK //c only
@ -416,19 +426,20 @@ LDR.ClkDevDCLK php
cld
lda #'D'
ldx PAKME.DCLK
ldy PAKME.DCLK+1
ldx #PAKME.DCLK.ID
jmp LDR.SetupCLK
.9 cld
*--------------------------------------
NSC.IOBASE .EQ $C300
*--------------------------------------
LDR.ClkDevNCLK php
sei
lda RDCXROM
lda IO.RDCXROM
php
sta SETCXROM
sta IO.SETCXROM
sta NSC.IOBASE
* lda $C00B Workaround for Ultrawarp bug
@ -489,7 +500,7 @@ LDR.ClkDevNCLK php
plp
bmi .8
sta CLRCXROM
sta IO.CLRCXROM
.8 plp
*--------------------------------------
@ -505,8 +516,7 @@ LDR.ClkDevNCLK php
bra LDR.ClkDevTCLK
.90 lda #'N'
ldx PAKME.NCLK
ldy PAKME.NCLK+1
ldx #PAKME.NCLK.ID
bra LDR.SetupCLK
*--------------------------------------
LDR.ClkDevTCLK jsr LDR.IsIIc
@ -538,8 +548,7 @@ LDR.ClkDevTCLK jsr LDR.IsIIc
lda $c080,x
lda #'T'
ldx PAKME.TCLK
ldy PAKME.TCLK+1
ldx #PAKME.TCLK.ID
jsr LDR.SetupCLK
lda idxl+1
@ -554,7 +563,7 @@ LDR.ClkDevTCLK jsr LDR.IsIIc
cmp #$C8
bne .1
*--------------------------------------
LDR.ClkDevXCLK bit RROMBNK2
LDR.ClkDevXCLK bit IO.RROMBNK2
sta $C070
bit $FACA
bit $FACA
@ -573,94 +582,95 @@ LDR.ClkDevXCLK bit RROMBNK2
.1 bit $F851
lda #'X'
ldx PAKME.XCLK
ldy PAKME.XCLK+1
ldx #PAKME.XCLK.ID
*--------------------------------------
LDR.SetupCLK stx ZPInBufPtr
sty ZPInBufPtr+1
sta LDR.MSG.CLK
LDR.SetupCLK sta LDR.MSG.CLK
phx
ldx #LDR.MSG.CLK
jsr LDR.PrintX
jsr LDR.LCBNK1
plx
lda #$D742
sta ZPOutBufPtr
lda /$D742
sta ZPOutBufPtr+1
jsr X.Unpak
ldy #CLK
lda /CLK
jsr X.Unpak.XatYAX
lda #$4C enable clock routine by putting a jmp
sta clockv in front of clock vector
sta GP.CLOCK in front of clock vector
lda #MACHID.CLK
tsb MACHID
tsb GP.MACHID
LDR.SetupCLK.RTS
rts
*--------------------------------------
LDR.SetupRAM lda DEVCNT
.DO M.RAM=1
LDR.SetupRAM lda GP.DEVCNT
cmp #13
bcs LDR.SetupCLK.RTS
jsr LDR.LCBNK1
ldx #PAKME.RAM-PAKME.Table
ldy #$FF00
lda /$FF00
jsr X.Unpak.XatYA
ldx #PAKME.RAM.ID
ldy #RAM
lda /RAM
jsr X.Unpak.XatYAX
lda RAMX.PAK
bne .1
sta SETWRITEAUX
sta IO.SETWRITEAUX
ldx #PAKME.RAMX-PAKME.Table
ldy #$0200
lda /$0200
ldx #PAKME.RAMX.ID
ldy #RAMX
lda /RAMX
jsr X.Unpak.XatYA
bra .7
.1 ldx #PAKME.RAMX-PAKME.Table
.1 ldx #PAKME.RAMX.ID
ldy #$0800
lda /$0800
jsr X.Unpak.XatYA
sta SETWRITEAUX
sta IO.SETWRITEAUX
ldx #$FE
.2 lda $900,x
sta $300,x
sta RAMX+$100,x
dex
txa
bne .2
.3 lda $800,x
sta $200,x
sta RAMX,x
inx
bne .3
.7 sta CLRWRITEAUX
.7 sta IO.CLRWRITEAUX
lda #RAMDRV put driver address into
sta DEVPTRS3D2
lda /RAMDRV
sta DEVPTRS3D2+1
lda #RAM put driver address into
sta GP.DEVPTRS3D2
lda /RAM
sta GP.DEVPTRS3D2+1
inc DEVCNT count (-1) active devices
ldx DEVCNT
inc GP.DEVCNT count (-1) active devices
ldx GP.DEVCNT
lda #$BF unit num of /RAM
sta DEVLST,x
sta GP.DEVLST,x
ldx #LDR.MSG.RAM
jmp LDR.PrintX
.FIN
*--------------------------------------
* find all disk devices in system slots and set up address
* and device table in prodos global page.
*--------------------------------------
LDR.BlkDevScan bit RROMBNK2 write protect lc ram.
LDR.BlkDevScan bit IO.RROMBNK2 write protect lc ram.
stz idxl
lda #$C7 search slots from high to low
@ -680,9 +690,9 @@ LDR.BlkDevScan bit RROMBNK2 write protect lc ram.
bne .2 branch if 16 sector disk II.
sta devid =0 since disk ii's have null attributes
lda #XRW.START
lda #XRW
sta LDR.driveradr
lda /XRW.START
lda /XRW
sta LDR.driveradr+1
sec 2 devices
jsr LDR.AddBlkDevs
@ -776,16 +786,16 @@ LDR.AddSPDevs jsr LDR.SetDevID setup the devid byte from attributes
asl
asl
asl
sta unitnum unit number
sta ZP.UNITNUM
stz A4L force a prodos status call
stz ZP.CMDNUM force a prodos status call
stz buf dummy pointer
stz ZP.BUFPTR dummy pointer
lda #$10
sta buf+1 dummy pointer should be <> 0
sta ZP.BUFPTR+1 dummy pointer should be <> 0
stz bloknml # of bytes to transfer
stz bloknml+1
stz ZP.BLKNUM # of bytes to transfer
stz ZP.BLKNUM+1
.1 jsr $0000 SELF MODIFIED
@ -839,9 +849,9 @@ LDR.AddBlkDevs php how many drives (carry).
asl in high nibble.
ora devid combine with attributes.
ldx DEVCNT
ldx GP.DEVCNT
inx put device # into device list.
sta DEVLST,x
sta GP.DEVLST,x
asl now form drive 2 device number, if any.
plp restore # of devices in carry.
@ -849,21 +859,21 @@ LDR.AddBlkDevs php how many drives (carry).
bpl .1 branch if a 1 drive device (e.g. hard drive)
inx else presume that 2nd drive is present.
sta DEVLST,x active device list.
sta GP.DEVLST,x active device list.
.1 stx DEVCNT save updated device count.
.1 stx GP.DEVCNT save updated device count.
asl shift # of drives back into carry.
lda LDR.driveradr get high address of device driver.
sta DEVPTRS,y device driver table 1.
sta GP.DEVPTRS,y device driver table 1.
bcc .2 branch if single drive.
sta DEVPTRS+16,y device driver table 2.
sta GP.DEVPTRS+16,y device driver table 2.
.2 lda LDR.driveradr+1
sta DEVPTRS+1,y
sta GP.DEVPTRS+1,y
bcc .3
sta DEVPTRS+17,y
sta GP.DEVPTRS+17,y
.3
LDR.AddBlkDevs.RTS
@ -895,22 +905,22 @@ LDR.AddExtraBLKDevs
ora #$10
tay
lda DEVPTRS,y device driver table 1
cmp #nodevice
lda GP.DEVPTRS,y device driver table 1
cmp #XDOS.NoDevice
bne .10
lda DEVPTRS+1,y
cmp /nodevice
lda GP.DEVPTRS+1,y
cmp /XDOS.NoDevice
bne .10 Drive 1 & 2 free
jsr LDR.AddY2DEVLST Y = index in DEVPTRS
jsr LDR.AddY2DEVLST Y = index in GP.DEVPTRS
jsr .8
tya
and #$F
tay
.4 jsr LDR.AddY2DEVLST Y = index in DEVPTRS
.4 jsr LDR.AddY2DEVLST Y = index in GP.DEVPTRS
.8 phy
@ -919,9 +929,9 @@ LDR.AddExtraBLKDevs
lda (idxl),y BLK entry point
ply
sta DEVPTRS,y
sta GP.DEVPTRS,y
lda idxl+1
sta DEVPTRS+1,y
sta GP.DEVPTRS+1,y
* clc
@ -979,14 +989,14 @@ LDR.AddExtraSPDevs
lda LDR.SPVect+2
sta XDOS.SPVectHi-1,x
bit RROMBNK2 write protect lc ram.
bit IO.RROMBNK2 write protect lc ram.
jsr LDR.AddY2DEVLST
lda #XDOS.SPREMAP
sta DEVPTRS,y
sta GP.DEVPTRS,y
lda /XDOS.SPREMAP
sta DEVPTRS+1,y
sta GP.DEVPTRS+1,y
.2 inc LDR.SPStatus.U
@ -1009,7 +1019,7 @@ LDR.CheckTClkID ldy #6
LDR.CheckDiskID ldy #5
lda CLRC8ROM switch out $C8 ROMs
lda IO.CLRC8ROM switch out $C8 ROMs
.1 lda (idxl),y compare id bytes
cmp dskid,y
@ -1025,7 +1035,7 @@ LDR.CheckDiskID ldy #5
.8 ldx LDR.SlotIdx
lda sltbit-1,x
tsb rommap mark bit to flag rom present
tsb GP.SLTBYT mark bit to flag rom present
.9 plp
rts
@ -1048,12 +1058,12 @@ LDR.FindFreeDevPtr
LDR.FindFreeDevPtrNext
.1 ldy LDR.DEVPTRS.IDX,x
lda DEVPTRS,y device driver table 1
cmp #nodevice
lda GP.DEVPTRS,y device driver table 1
cmp #XDOS.NoDevice
bne .2
lda DEVPTRS+1,y
cmp /nodevice
lda GP.DEVPTRS+1,y
cmp /XDOS.NoDevice
beq .8
.2 dex
@ -1075,8 +1085,8 @@ LDR.SetDevID ldy #$FE check attributes byte.
sta devid
rts
*--------------------------------------
LDR.AddY2DEVLST inc DEVCNT
ldx DEVCNT
LDR.AddY2DEVLST inc GP.DEVCNT
ldx GP.DEVCNT
tya
asl convert to DSSS0000
@ -1084,7 +1094,7 @@ LDR.AddY2DEVLST inc DEVCNT
asl
ora devid include device attributes
sta DEVLST,x in the active device list.
sta GP.DEVLST,x in the active device list.
rts
*--------------------------------------
@ -1096,7 +1106,7 @@ LDR.Scr80Init phx Save LDR.MSG
php
sei
sta SETC3ROM
sta IO.SETC3ROM
ldx #COL80IDX.Cnt-1
@ -1113,23 +1123,23 @@ LDR.Scr80Init phx Save LDR.MSG
cmp #$80
beq .3
.2 sta CLRC3ROM
.2 sta IO.CLRC3ROM
.3 plp
*--------------------------------------
LDR.Scr80Init2 lda #$8C Reset 80 col screen ($0C:HOME)
jsr $C300
jsr setnorm
jsr home
jsr SETINV
jsr ROM.SETNORM
jsr ROM.HOME
jsr ROM.SETINV
.DO LOGO
.DO LOGO=1
lda #20
sta CV
sta ZP.CV
inc
sta WNDTOP
jsr VTAB
sta ZP.WNDTOP
jsr ROM.TABV
lda #LOGO.PAKED
sta ZPInBufPtr
@ -1142,17 +1152,17 @@ LDR.Scr80Init2 lda #$8C Reset 80 col screen ($0C:HOME)
jsr X.Unpak
sta CLRHIRES
sta SETMIXED
sta IO.CLRHIRES
sta IO.SETMIXED
bit RDIOUDIS
sta SETIOUDIS
sta SETDHIRES
bit IO.RDIOUDIS
sta IO.SETIOUDIS
sta IO.SETDHIRES
bmi .10
sta CLRIOUDIS
sta IO.CLRIOUDIS
.10 sta CLRTEXT
.10 sta IO.CLRTEXT
stz ZPPtr1
lda #$A0
@ -1162,7 +1172,7 @@ LDR.Scr80Init2 lda #$8C Reset 80 col screen ($0C:HOME)
.1 pha
jsr GBSCALC
jsr ROM.GBSCALC
ldy #0
@ -1173,8 +1183,8 @@ LDR.Scr80Init2 lda #$8C Reset 80 col screen ($0C:HOME)
tax
lda PALETTE.AUX,x
sta SETPAGE2
sta (GBASL),y
sta IO.SETPAGE2
sta (ZP.GBASL),y
pla
lsr
@ -1183,8 +1193,8 @@ LDR.Scr80Init2 lda #$8C Reset 80 col screen ($0C:HOME)
lsr
tax
lda PALETTE.MAIN,x
sta CLRPAGE2
sta (GBASL),y
sta IO.CLRPAGE2
sta (ZP.GBASL),y
iny
cpy #40
@ -1210,9 +1220,9 @@ LDR.Scr80Init2 lda #$8C Reset 80 col screen ($0C:HOME)
asl
asl
asl
sta SETPAGE2
ora (GBASL),y
sta (GBASL),y
sta IO.SETPAGE2
ora (ZP.GBASL),y
sta (ZP.GBASL),y
pla
lsr
@ -1225,9 +1235,9 @@ LDR.Scr80Init2 lda #$8C Reset 80 col screen ($0C:HOME)
asl
asl
asl
sta CLRPAGE2
ora (GBASL),y
sta (GBASL),y
sta IO.CLRPAGE2
ora (ZP.GBASL),y
sta (ZP.GBASL),y
iny
cpy #40
@ -1248,37 +1258,37 @@ LDR.Scr80Init2 lda #$8C Reset 80 col screen ($0C:HOME)
.FIN
jsr CLREOL
jsr setnorm
jsr ROM.CLREOL
jsr ROM.SETNORM
ldx #LDR.MSG.PRODOS
jsr LDR.PrintX
plx get back LDR.MSG.machine type
*--------------------------------------
LDR.PrintX bit RROMBNK2
LDR.PrintX bit IO.RROMBNK2
lda INVFLG
lda ZP.INVFLG
pha
jsr SETINV
jsr ROM.SETINV
.1 lda $2000,x
pha
ora #$80
jsr COUT
jsr ROM.COUT
inx
pla
bpl .1
lda #$A0
jsr COUT
jsr ROM.COUT
pla
sta INVFLG
sta CLRPAGE2 for screen holes proper access
sta ZP.INVFLG
sta IO.CLRPAGE2 for screen holes proper access
rts
*--------------------------------------
LDR.IsIIc lda MACHID
LDR.IsIIc lda GP.MACHID
and #MACHID.T
cmp #MACHID.T.IIc
beq .9
@ -1294,11 +1304,11 @@ PALETTE.AUX .HS 00.01.02.03.04.05.06.07
*--------------------------------------
* 16 bytes moved to $03F0 vectors
*--------------------------------------
LDR.3F0 .DA breakv
.DA oldrst
LDR.3F0 .DA ROM.BREAKV
.DA ROM.OLDRST
.DA #$5A powerup byte
jmp oldrst '&' vector
jmp oldrst ctrl-y vector
jmp ROM.OLDRST '&' vector
jmp ROM.OLDRST ctrl-y vector
.HS 004000
.DA GP.IRQV global page interrupt vector
*--------------------------------------
@ -1380,10 +1390,10 @@ COL80VAL .HS 3818012C
*--------------------------------------
LDR.MLIOL.P .DA #2
.DA #$60
.DA pbuf+1
.DA LDR.PBuf+1
LDR.MLISETP.P .DA #1
.DA pbuf
.DA LDR.PBuf
LDR.SPStatus.P .DA #$03 # of parms
LDR.SPStatus.U .DA #$00 unit number (code for smartport stat)
@ -1419,5 +1429,5 @@ LDR.SlotDevCnt .BS 7
*--------------------------------------
MAN
SAVE usr/src/prodos.fx/prodos.s.ldr
LOAD usr/src/prodos.fx/prodos.s
LOAD usr/src/prodos.fx/pdos8m.s
ASM

View File

@ -7,13 +7,15 @@ NEW
*--------------------------------------
DS1216E.DATA .EQ $200 Reverted YY MM DD Day HH mm SS CS
*--------------------------------------
NCLK.START php
NCLK.START .PH CLK
NCLK.START1 php
sei NO IRQ !!!
lda RDCXROM
lda IO.RDCXROM
php
sta SETCXROM
sta IO.SETCXROM
sta NSC.IOBASE
* lda $C00B Workaround for Ultrawarp bug
@ -86,31 +88,33 @@ NCLK.START php
asl
asl
ora DS1216E.DATA+2 Get DD
sta DATELO
sta GP.DATE
* lda DS1216E.DATA Get YY
pla
rol
sta DATELO+1
sta GP.DATE+1
lda DS1216E.DATA+5 Get mm
sta TIMELO
sta GP.TIME
lda DS1216E.DATA+4 Get HH
sta TIMELO+1
sta GP.TIME+1
plp
bmi .8
sta CLRCXROM
sta IO.CLRCXROM
.8 plp
rts
*--------------------------------------
DS1216E.SIG .HS 5CA33AC55CA33AC5 Reverted 7->0
*--------------------------------------
.LIST ON
.EP
*--------------------------------------
* .LIST ON
NCLK.LEN .EQ *-NCLK.START
.LIST OFF
*--------------------------------------

View File

@ -1,10 +1,12 @@
NEW
AUTO 3,1
RAM.START
RAMDRV cld no decimal.
*--------------------------------------
RAM.START .PH RAM
RAM.START1 cld no decimal.
ldx #$0B save 13 bytes of parms
.1 lda A1L,x
.1 lda ZP.A1L,x
sta a1l1,x
dex
bpl .1
@ -16,34 +18,34 @@ RAMDRV cld no decimal.
dex
bpl .2
lda A4L get command.
lda ZP.CMDNUM
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
sta ZP.CMDNUM 0=format, 2=read, 1=write
beq format
ldy bloknml+1 check for large block number.
ldy ZP.BLKNUM+1 check for large block number.
bne ioerr too big.
lda bloknml block #
lda ZP.BLKNUM block #
bmi ioerr largest block number is $7F
* at this point, control is passed to the code in the alternate 64k.
* it it used for read, write and format. after the request is completed,
* control is passed back to 'noerr'.
format lda #RAMXDRV card entry point
format lda #RAMX card entry point
sta passit
lda /RAMXDRV
lda /RAMX
gocard sta passit+1 also used by 'mainwrt'
sec direction ram -> card
clv start with original zero page
jmp xfer transfer control
jmp ROM.XFER transfer control
ioerr lda #$27
bne H2D41
@ -62,7 +64,7 @@ H2D47 php save status
ldx #$0B restore 13 byes of parms
H2D4B lda a1l1,x
sta A1L,x
sta ZP.A1L,x
dex
bpl H2D4B
@ -75,28 +77,30 @@ H2D4B lda a1l1,x
plp and status.
rts
mainwrt sta SETWRITEAUX write to alt 48K
mainwrt sta IO.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
H2D6A lda (ZP.A1L),y pointers set in card by 'setptr'
sta (ZP.A4L),y
lda (ZP.A2L),y
sta (ZP.A3L),y
dey
bne H2D6A
sta CLRWRITEAUX write to main 48K.
sta IO.CLRWRITEAUX write to main 48K.
lda #donewrt done writing card
sta passit
lda /donewrt
jmp gocard
*--------------------------------------
RAM.LEN .EQ *-RAM.START
.DUMMY
sp1 .HS 0000
a1l1 .BS 13 13 bytes of storage
a1l1 .BS 13 13 bytes of storage
.ED
*--------------------------------------
.EP
*--------------------------------------
RAM.LEN .EQ *-RAM.START
*--------------------------------------
MAN
SAVE usr/src/prodos.fx/prodos.s.ram

View File

@ -1,12 +1,15 @@
NEW
AUTO 3,1
* object code = ram_0
*--------------------------------------
RAMX.DBuf .EQ $0C00
RAMX.vblock1 .EQ $0E00 ramdisk directory block
*--------------------------------------
* /RAM driver (aux bank portion)
* this code is packed into $200 length with no room for expansion !!
* (see note at end of this obj)
* after the main /RAM routine has determined that the command is ok and the
* block to be read/written is within range, it transfers control to this
* block to be read/written is within range, it transfers control to this
* aux /RAM routine which remaps the block requested as follows:
* request blocks 0,1: invalid
* 2: returns VDIR (card block 3)
@ -15,13 +18,16 @@ NEW
* $05-$5F: returns card blocks $05-$5F
* $60-$67: returns blocks $68-$7F in bank 1 of language card
* $68-$7F: returns blocks $68-$7F in bank 2 of language card
*--------------------------------------
RAMX.START .PH RAMX
RAMX.START lda RD80STORE read 80 store
RAMX.START1 lda IO.RD80STORE read 80 store
pha save for later
sta CLR80STORE turn off 80 store
sta IO.CLR80STORE turn off 80 store
ldx #$04 move the parameters for use:
L5109 lda A4L,x cmd, unit, bufptr and block (lo)
L5109 lda ZP.CMDNUM,x cmd, unit, bufptr and block (lo)
sta tcmd,x -> tcmd, tunit, R2L, R2H, R01
dex
bpl L5109
@ -29,13 +35,13 @@ L5109 lda A4L,x cmd, unit, bufptr and block (lo)
and formatflg format the volume first time
bne L514F thru, or when requested.
ldx bloknml save R01 during format.
lda /vblock1 block to be cleared.
ldx ZP.BLKNUM save R01 during format.
lda /RAMX.vblock1 block to be cleared.
jsr clrbuf1 clears all buffers.
ldy #$03 format volume in 2 chunks.
L511F lda VDIR,y
sta vblock1+4,y
sta RAMX.vblock1+4,y
dey
bpl L511F
@ -52,7 +58,7 @@ L5130 sta BITMAP,y
ldy #$07 do other chunk
L513B lda access,y
sta vblock1+34,y
sta RAMX.vblock1+34,y
dey
bpl L513B
@ -93,29 +99,29 @@ lcrd txa get R1 back
ora #$10 in secondary bank.
bne L5179 branch always.
L5173 sta RRAMWRAMBNK2 turn on main $D000
sta RRAMWRAMBNK2
L5173 sta IO.RRAMWRAMBNK2 turn on main $D000
sta IO.RRAMWRAMBNK2
L5179 sta R01 restore R1.
lda R2H save R2 for later
pha
ldx R2L
sta SETALTZP use alternate zero page/stack
lda /dbuf set R2 to dbuf
sta IO.SETALTZP use alternate zero page/stack
lda /RAMX.DBuf set R2 to dbuf
sta R2H
lda #dbuf
lda #RAMX.DBuf
sta R2L
jsr setptr set pointers
tay A > 0 from setptr
L5194 lda (A1L),y move A1,A2 to A4,A3
sta (A4L),y
lda (A2L),y
sta (A3L),y
L5194 lda (ZP.A1L),y move A1,A2 to A4,A3
sta (ZP.A4L),y
lda (ZP.A2L),y
sta (ZP.A3L),y
dey
bne L5194
sta CLRALTZP use main zero page/stack
sta IO.CLRALTZP use main zero page/stack
L51A2 stx R2L
pla restore R2
@ -123,8 +129,8 @@ L51A2 stx R2L
plp get direction.
L51AA bcs L51B5 write, done with move.
sta RRAMWRAMBNK1 switch in MLI part of LC
sta RRAMWRAMBNK1
sta IO.RRAMWRAMBNK1 switch in MLI part of LC
sta IO.RRAMWRAMBNK1
jsr blockdo0 read, transfer dbuf to main
L51B5 jmp exitcard
@ -138,24 +144,24 @@ L51B8 jsr blockdo0 transfer main to dbuf.
* language card, so the language card is always switched in. if cmd is 2, a
* write is done (R2->R1); if cmd is 1, a read is done (R1->R2).
blockdo0 lda /dbuf set up R1 = dbuf
blockdo0 lda /RAMX.DBuf set up R1 = dbuf
blockdo1 sta R01
blockdo jsr setptr set pointers.
bcs L51DB it's a write.
sta CLRWRITEAUX transfer buffer directly to main.
sta IO.CLRWRITEAUX transfer buffer directly to main.
tay 0 left from setptr.
L51CC lda (A1L),y transfer A1,A2 to A4,A3
sta (A4L),y
lda (A2L),y
sta (A3L),y
L51CC lda (ZP.A1L),y transfer A1,A2 to A4,A3
sta (ZP.A4L),y
lda (ZP.A2L),y
sta (ZP.A3L),y
dey
bne L51CC
sta SETWRITEAUX back the way it was.
sta IO.SETWRITEAUX back the way it was.
donewrt rts mainwrt returns here
@ -171,34 +177,34 @@ setptr lda tcmd is it read or write ?
bcs L5208 taken if write.
lda R2H destination page
sta A4L+1
sta A3L+1
sta ZP.A4L+1
sta ZP.A3L+1
lda R2L
sta A4L
sta A3L
sta ZP.A4L
sta ZP.A3L
lda R01 source page
sta A1L+1
sta A2L+1
sta ZP.A1L+1
sta ZP.A2L+1
lda #$00 source page aligned
sta A1L
sta A2L
sta ZP.A1L
sta ZP.A2L
beq L5223
L5208 lda R2H source page
sta A1L+1
sta A2L+1
sta ZP.A1L+1
sta ZP.A2L+1
lda R2L
sta A1L
sta A2L
sta ZP.A1L
sta ZP.A2L
lda R01 destination page
sta A4L+1
sta A3L+1
sta ZP.A4L+1
sta ZP.A3L+1
lda #$00 destination page aligned
sta A4L
sta A3L
sta ZP.A4L
sta ZP.A3L
L5223 inc A2L+1
inc A3L+1
L5223 inc ZP.A2L+1
inc ZP.A3L+1
rts
* tzip is called if blocks 0,1,4,5 are requested.
@ -211,15 +217,15 @@ tzip jsr clrbuf0 fill dbuf with 0's
* clrbuf fills the buffer indicated by R01 to 0's.
* should only be called on a read or format.
clrbuf0 lda /dbuf dbuf is temp buffer.
clrbuf0 lda /RAMX.DBuf dbuf is temp buffer.
clrbuf1 sta R01 assign to block.
clrbuf2 jsr setptr set pointers
tay acc = 0
L523A sta (A1L),y
sta (A2L),y
L523A sta (ZP.A1L),y
sta (ZP.A2L),y
dey
bne L523A
@ -239,7 +245,7 @@ L524A cmp #$0F if any page < $F (block 8) requested,
bcc tzip it is invalid.
ldx #$00 x = # of iterations.
lda bloknml use true block #.
lda ZP.BLKNUM use true block #.
cmp #$5D beyond 8k blocks ?
bcc L525B no, do normal
@ -302,7 +308,7 @@ times2 asl acc = 2 * acc
* 16 bytes long; the rest of the block is synthesized. the temporary buffer
* at $800 is used to build/read a full size bitmap block.
tbmap lda /dbuf use temp buffer as block
tbmap lda /RAMX.DBuf use temp buffer as block
sta R01
jsr setptr set pointers, test read/write.
bcs L52A9 branch if it's write.
@ -311,7 +317,7 @@ tbmap lda /dbuf use temp buffer as block
ldy #$0F put real bitmap there
L529B lda BITMAP,y
sta (A1L),y
sta (ZP.A1L),y
dey
bpl L529B
@ -322,7 +328,7 @@ L52A9 jsr blockdo move user buf to temp buf
jsr setptr
ldy #$0F move temp buf to bitmap.
L52B1 lda (A4L),y (pointer set by setptr)
L52B1 lda (ZP.A4L),y (pointer set by setptr)
sta BITMAP,y
dey
bpl L52B1
@ -339,8 +345,10 @@ BITMAP .HS 00FFFFFF blocks 0-7 used
.HS FFFFFFFF
.HS FFFFFFFF
.HS FFFFFFFE block 127 used (IRQV)
VDIR .HS F3 storage type = F, name length = 3
.AS "RAM"
access .DA #$C3 destroy, rename, read enabled
.HS 27 entry length
.HS 0D
@ -348,24 +356,28 @@ access .DA #$C3 destroy, rename, read enabled
.HS 0300 block 3
.DA #128 128 blocks
exitcard lda RRAMWRAMBNK1 restore language card
lda RRAMWRAMBNK1
exitcard lda IO.RRAMWRAMBNK1 restore language card
lda IO.RRAMWRAMBNK1
pla get 80store
bpl L52EA 80store wasn't on
sta SET80STORE enable 80store
sta IO.SET80STORE enable 80store
L52EA jmp bypass jump around passit
passit .HS 0000
bypass lda #noerr set up return to noerr
sta passit
lda /noerr
ex1 sta passit+1 also used by blockwrite
clc transfer card to main
clv use standard zeropage/stack
jmp xfer jmp back from language card.
jmp ROM.XFER jmp back from language card.
*--------------------------------------
.EP
*--------------------------------------
RAMX.LEN .EQ *-RAMX.START
*--------------------------------------
MAN
SAVE usr/src/prodos.fx/prodos.s.ramx
LOAD usr/src/prodos.fx/prodos.s

View File

@ -19,8 +19,10 @@ SEL1.DirBlk .EQ $1C00 512b
SEL1.filetypes .EQ $1F00
SEL1.Filenames .EQ $2000
*--------------------------------------
SEL1.START cld
bit RROMBNK2 read ROM
SEL1.START .PH $1000
SEL1.START1 cld
bit IO.RROMBNK2 read ROM
lda #$A0
jsr $C300 initialize 80 column text card
@ -32,11 +34,11 @@ SEL1.START cld
stz SEL1.BSPathBuf
*--------------------------------------
ldx DEVCNT
ldx GP.DEVCNT
.1 lda DEVLST,x
.1 lda GP.DEVLST,x
and #$F0
cmp DEVNUM
cmp GP.DEVNUM
beq SEL1.GetVol
dex
@ -45,16 +47,16 @@ SEL1.START cld
SEL1.NextVol ldx VolListPtr get device list pointer.
bne .1
ldx DEVCNT get device count.
ldx GP.DEVCNT get device count.
inx
.1 dex
lda DEVLST,x get unit number from list.
lda GP.DEVLST,x get unit number from list.
*--------------------------------------
SEL1.GetVol stx VolListPtr
sta SEL1.OnLineP+1 store unit number for online.
jsr MLI
.DA #MLIONLINE
.DA #MLI.ONLINE
.DA SEL1.OnLineP
bcs SEL1.NextVol error check.
@ -73,14 +75,14 @@ SEL1.OpenDir stx SEL1.PathBuf save the name length
sta SEL1.PathBuf,x after name.
jsr MLI
.DA #MLIOPEN
.DA #MLI.OPEN
.DA SEL1.OpenP
bcc SEL1.EnumDir good open.
lda bInSubDir trying to open root directory ?
beq SEL1.NextVol yes, just move to next volume.
jsr bell1 no, generate bell tone
jsr ROM.BELL1 no, generate bell tone
jsr SEL1.FullPath.. and stay at same level.
stx SEL1.PathBuf
jmp SEL1.KeyLoop
@ -98,7 +100,7 @@ SEL1.EnumDir stz filecount zero file count.
sta SEL1.ReadP+5
SEL1.EnumBlk jsr MLI
.DA #MLIREAD
.DA #MLI.READ
.DA SEL1.ReadP
bcs SEL1.CloseDir
@ -147,14 +149,14 @@ SEL1.EnumDirNext
bne SEL1.EnumDirNext
*--------------------------------------
SEL1.CloseDir jsr MLI close directory file
.DA #MLICLOSE
.DA #MLI.CLOSE
.DA SEL1.CloseP
jsr settxt use full screen for windows
jsr home
jsr ROM.SETTXT use full screen for windows
jsr ROM.HOME
lda #$17 cursor at bottom of screen.
jsr TABV set vertical position.
jsr ROM.TABV set vertical position.
ldy #SEL1.RetIcon-SEL1.Strings
jsr SEL1.IconOutY
@ -163,7 +165,7 @@ SEL1.CloseDir jsr MLI close directory file
jsr SEL1.MsgOutY
lda #$99
jsr cout cursor to upper/left.
jsr ROM.COUT cursor to upper/left.
ldx #$00
ldy SEL1.PathBuf
@ -186,10 +188,10 @@ SEL1.CloseDir jsr MLI close directory file
ldx #20 limit to 20 files on the screen.
.3 lda #2 set window dimensions
sta wndtop
sta ZP.WNDTOP
lda #22
sta wndbot
sta ZP.WNDBOT
.4 phx
@ -208,12 +210,12 @@ SEL1.Up jsr SEL1.PrintFN print old name in normal.
beq L5EAA if already at the top name
dec SelectedIndex
lda cv current cursor line.
cmp #$02 at top line of window ?
lda ZP.CV current cursor line.
cmp #2 at top line of window ?
bne L5EAA no, move up normally.
dec ScrollIndex fix offset index
lda #$16 else sroll windows down a line.
lda #22 else sroll windows down a line.
bne SEL1.Scroll branch always.
*--------------------------------------
SEL1.Down jsr SEL1.PrintFN print old name in normal.
@ -223,21 +225,21 @@ SEL1.Down jsr SEL1.PrintFN print old name in normal.
bcs L5EAA if already at last filename
stx SelectedIndex
lda cv current cursor line.
cmp #$15 at bottom line of window ?
lda ZP.CV current cursor line.
cmp #21 at bottom line of window ?
bne L5EAA no, move cursor normally.
inc ScrollIndex update offset index
lda #$17 else scroll up a line.
lda #23 else scroll up a line.
SEL1.Scroll jsr cout
SEL1.Scroll jsr ROM.COUT
L5EAA jsr SEL1.PrintFNInv output last filename.
*--------------------------------------
SEL1.KeyLoop lda kbd get keyboard input.
SEL1.KeyLoop lda IO.KBD get keyboard input.
bpl SEL1.KeyLoop loop until key pressed.
sta KBDSTROBE clear strobe.
sta IO.KBDSTROBE clear strobe.
ldx filecount are any files displayed ?
beq .1 no, don't accept arrow keys or return.
@ -289,7 +291,7 @@ SEL1.CR ldy SelectedIndex
bcs L5EED
jsr MLI open file
.DA #MLIOPEN
.DA #MLI.OPEN
.DA SEL1.OpenP
bcs L5EED
@ -300,11 +302,11 @@ SEL1.CR ldy SelectedIndex
sta SEL1.ReadP+5 max $9F00
jsr MLI
.DA #MLIREAD
.DA #MLI.READ
.DA SEL1.ReadP
php save possible error.
jsr MLI close file. ignore any error from close
.DA #MLICLOSE
.DA #MLI.CLOSE
.DA SEL1.CloseP
plp restore status from read.
bcs L5EED if any errors.
@ -319,10 +321,10 @@ SEL1.CR ldy SelectedIndex
dex
bpl .7
.8 jsr settxt reset to full window.
jsr home makes for no flash.
.8 jsr ROM.SETTXT reset to full window.
jsr ROM.HOME makes for no flash.
lda #$95 ctrl-u
jsr cout turn off 80 columns.
jsr ROM.COUT turn off 80 columns.
jmp $2000 execute selected system file.
*--------------------------------------
@ -337,12 +339,12 @@ SEL1.PrintFNInv lda #$0F
sbc ScrollIndex calculate line # to display name
inc
inc
jsr TABV set vertical position.
jsr ROM.TABV set vertical position.
lda #$01
sta ch80col
sta ROM.OURCH
lda SEL1.filetypes,x get filetype (x is unchanged by tabv).
lda SEL1.filetypes,x get filetype (x is unchanged by ROM.TABV).
jsr SEL1.CheckType
bmi .1
@ -353,10 +355,10 @@ SEL1.PrintFNInv lda #$0F
.1 jsr SEL1.SetFNPtrX calc name location.
lda #$05
sta ch80col
sta ROM.OURCH
pla normal / inverse
jsr cout
jsr ROM.COUT
jsr SEL1.SPOut output a space.
@ -375,11 +377,11 @@ SEL1.PrintFNInv lda #$0F
* bne .3
jsr SEL1.SPOut
jmp setnorm set normal text mode.
jmp ROM.SETNORM set normal text mode.
*--------------------------------------
SEL1.SetFullPath
jsr MLI
.DA #MLISETPREFIX
.DA #MLI.SETPREFIX
.DA SEL1.SetPrefixP
bcs .9
@ -456,7 +458,7 @@ SEL1.IconOutY phx
.1 lda SEL1.MouseText,x
jsr cout
jsr ROM.COUT
inx
cpx #2
bne .2
@ -481,7 +483,7 @@ SEL1.MsgOutY lda SEL1.Strings,y
SEL1.SPOut lda #' ' SPACE
SEL1.COut ora #$80 set high bit.
jmp cout output to screen.
jmp ROM.COUT output to screen.
*--------------------------------------
* data area
*--------------------------------------
@ -529,7 +531,9 @@ SEL1.SetPrefixP .DA #1 Param Count
SEL1.ReadP .DA #4 Param Count
.HS 01 reference number
*--------------------------------------
.LIST ON
.EP
*--------------------------------------
* .LIST ON
SEL1.LEN .EQ *-SEL1.START
.LIST OFF
*--------------------------------------

View File

@ -1,7 +1,13 @@
NEW
AUTO 3,1
* object code = sel_2
*
*--------------------------------------
SEL2.PBuf .EQ $0280 prefix buffer
SEL2.VBuf .EQ $0F00 volume buffer
SEL2.FBuf .EQ $1C00 open file buffer (selector)
*--------------------------------------
SEL2.SYSLoad .EQ $2000 .SYS file load address
*--------------------------------------
* Alternate program selector segment for P8 when used in conjunction with
* gs/os. This code is used in place of the standard P8 interactive program
* selector when P8 is started up by GQuit. It is called when passing control
@ -12,12 +18,10 @@ NEW
* the freshly loaded app. This code does NOT start with a CLD instruction
* (as other replacement quit code is supposed to do) because GQuit checks
* this to see if this version of quit code is available.
*--------------------------------------
SEL2.START .PH $1000
op_buf .EQ $1C00 open file buffer (selector)
SEL2.START
GQdisp lda RRAMWRAMBNK1 read/write LC bank 1
SEL2.START1 lda IO.RRAMWRAMBNK1 read/write LC bank 1
clc
xce 16 bit native mode.
jmp P8QUIT go to GQuit.
@ -44,7 +48,7 @@ GQdisp lda RRAMWRAMBNK1 read/write LC bank 1
>SHORTM 8 bit accumulator
pha save the switch status.
ldx ##inbuf point to passed prefix.
ldx ##ROM.INBUF point to passed prefix.
jsr copyvol copy the name into the buffer.
pla retrieve the switch status
@ -59,9 +63,10 @@ GQdisp lda RRAMWRAMBNK1 read/write LC bank 1
* prefix is passed at $00/0200 by GQuit.
L6020 jsr MLI set prefix
.DA #$C6
.DA #MLI.SETPREFIX
.DA pfxparms
bcc L602D if prefix ok.
jsr gqerror error handler.
bra L6020 try again
@ -69,19 +74,22 @@ L6020 jsr MLI set prefix
L602D xce native mode (carry clear)
>LONGX 16 bit regs, 8 bit acc.
lda pbuf+1 is the application name
lda SEL2.PBuf+1 is the application name
cmp #$2F a complete pathname ?
bne L603D no, use prefix as volume name
ldx ##pbuf else use the application name.
ldx ##SEL2.PBuf else use the application name.
jsr copyvol copy the volume name to buffer.
L603D sec back to emulation mode.
xce
L603F jsr MLI open the application file
.DA #$C8
.DA #MLI.OPEN
.DA opnparms
bcc L604C if open ok.
jsr gqerror handle error.
bra L603F try again.
L604C lda oprefnum copy ref number to parameter lists
sta eofrefn
sta rdrefnum
@ -90,9 +98,10 @@ L604C lda oprefnum copy ref number to parameter lists
* do a geteof call for how many bytes to read
L6058 jsr MLI get eof
.DA #$D1
.DA #MLI.GETEOF
.DA eofparms
bcc L6065 eof ok.
jsr gqerror handle error.
bra L6058 try again.
@ -102,32 +111,41 @@ L6065 lda eofval
sta rdcount
lda eofval+1
sta rdcount+1
L6071 jsr MLI read
.DA #$CA
.DA #MLI.READ
.DA readparm
bcc L607E read ok
jsr gqerror
bra L6071
L607E jsr MLI close
.DA #$CC
.DA #MLI.CLOSE
.DA closeprm
bcc L608B close ok
jsr gqerror
bra L607E
L608B jsr dolaunch check for possible 2nd pathname.
bne L6099 if none then run program
jsr ckfordrv else make sure the file is online.
bcc L6099 if so then run the program.
lda #$45 volume not found error.
bra L60AB
L6099 lda RROMBNK2 enable ROM
jmp sysentry execute the system application
L6099 lda IO.RROMBNK2 enable ROM
jmp SEL2.SYSLoad execute the system application
gqerror clc
xce 16 bit native mode
>LONGMX
jsr mountvol mount volume.
bcs L60AB if error.
sec back to emulation mode.
xce
rts
@ -158,17 +176,17 @@ L60AB clc native mode
sec emulation mode
xce
jsr MLI quit back to GQuit
.DA #$65
.DA #MLI.QUIT
.DA quitparms
* p8 mount volume
*
* on entry: volbuf = name of volume to mount.
* on entry: SEL2.VBuf = name of volume to mount.
* on exit: carry clear if mount volume displayed and 'return' was pressed.
* carry set if no window displayed or if had window and 'esc' pressed.
mountvol ldy ##$0000 volbuf>>16
ldx ##volbuf set up pointer to volume name.
mountvol ldy ##$0000 SEL2.VBuf>>16
ldx ##SEL2.VBuf set up pointer to volume name.
* if error is 'volume not found' or 'no disk in drive' then display the
* Mount Volume window, otherwise return with carry set.
@ -176,8 +194,10 @@ mountvol ldy ##$0000 volbuf>>16
and ##$00FF mask just in case.
cmp ##$0045 volume not found ?
beq L6101 yes
cmp ##$002F no disk in drive ?
beq L6101 yes
sec indicate error not handled.
rts return with error code still in acc.
@ -212,9 +232,11 @@ L6101 pha save error code in case esc pressed.
plx
cmp ##$0001 which button was pressed ?
bne L613C if Escape pressed.
clc indicate Return was pressed.
pla pull original error code off stack.
rts return with carry clear.
L613C sec indicate Escape was pressed.
pla restore error code.
rts return with carry set.
@ -222,22 +244,24 @@ L613C sec indicate Escape was pressed.
* copy the volume name from the given pathname to the volume name buffer.
*
* inputs: x = length byte of complete pathname containing volume name.
* output: volume name is stored in volbuf.
* output: volume name is stored in SEL2.VBuf.
copyvol lda >1,x get the first slash
sta volbuf+1
sta SEL2.VBuf+1
ldy ##$0002 initialize the length count.
L6148 lda >2,x now copy the volume name up to
cmp #$2F the separating slash.
beq L6156
sta volbuf,y
sta SEL2.VBuf,y
inx
iny
bra L6148
L6156 dey fix character count.
tya length.
sta volbuf store the resultant string length.
sta SEL2.VBuf store the resultant string length.
rts
* translate a filename message from the message center to the currently
@ -246,14 +270,17 @@ L6156 dey fix character count.
* on exit, the z-flag is set if a filename was correctly passed to the
* application elst the z-flag is clear if it couldn't be done.
dolaunch lda sysentry does the app start with a jump ?
dolaunch lda SEL2.SYSLoad does the app start with a jump ?
cmp #$4C
bne L616F no, doesn't follow the convention.
lda #$EE check for the signature bytes.
cmp sysentry+3
cmp SEL2.SYSLoad+3
bne L616F 1st one doesn't match, skip it.
cmp sysentry+4
cmp SEL2.SYSLoad+4
beq L6170 both match, go get a filename message.
L616F rts just return to launch the app.
L6170 lda #$FF put flag conditioning value on
@ -285,6 +312,7 @@ L6170 lda #$FF put flag conditioning value on
pha (still in acc and x regs)
>IIGS MessageCenter
bcs L6203 branch if no message.
pha leave 4 bytes free on stack
pha (will be used as a direct page pointer)
tsc get the stack pointer.
@ -299,28 +327,34 @@ L6170 lda #$FF put flag conditioning value on
ldy ##$0006 get the message command.
lda [$00],y
bne bad_msg if print, then skip it.
lda $00 adjust pointer to filename string.
clc
adc ##$0008
sta $00
bcc L61D1
inc $02
L61D1 lda [$00] get the length of the string.
and ##$00FF mask off high (leaving just the length)
>SHORTM 8 bit accumulator
cmp sysentry+5 check against length of app buffer.
cmp SEL2.SYSLoad+5 check against length of app buffer.
beq L61DF if equal then continue with move.
bcs bad_msg if too long then bad message.
L61DF tay string length.
L61DF tay string length.
L61E0 lda [$00],y get a character.
sta sysentry+6,y store it in the app's filename buffer
sta inbuf,y and in prefix buffer.
sta SEL2.SYSLoad+6,y store it in the app's filename buffer
sta ROM.INBUF,y and in prefix buffer.
dey
bpl L61E0
lda #$00 change flag conditioning value on stack
sta $0D,s to indicate a filename is passed.
bad_msg
>LONGM 16-bit acc.
bad_msg >LONGM 16-bit acc.
pld restore direct register.
pla fix stack because handle and userid
pla still on stack.
@ -329,26 +363,34 @@ bad_msg
pha garbage handle (not used).
pha
>IIGS MessageCenter go delete the message.
L6203 >IIGS DisposeHandle throw away message (handle is on stack)
L620A >IIGS MMShutDown shutdown the memory manager (userid is
sec on stack).
xce back to emulation mode.
pla condition z-flag with value on stack.
bne L6231 then done.
ldx inbuf get length of pathname.
lda #$2F look for slash.
L621B cmp inbuf,x
ldx ROM.INBUF get length of pathname.
lda #$2F look for slash.
L621B cmp ROM.INBUF,x
beq L6225 when found, set prefix.
dex
bne L621B
bra L6231 if no slash, just skip it.
L6225 dex don't include trailing slash.
stx inbuf set new length.
stx ROM.INBUF set new length.
jsr MLI set the P8 prefix.
.DA #$C6
.DA #MLI.SETPREFIX
.DA pfxparms
lda #$00 set z-flag
L6231 rts and go launch the app.
* check for disk volume
@ -360,49 +402,59 @@ L6231 rts and go launch the app.
ckfordrv clc native mode
xce
>LONGX 16-bit regs, 8-bit acc.
ldx ##sysentry+6 point to pathname buffer.
ldx ##SEL2.SYSLoad+6 point to pathname buffer.
jsr copyvol copy volume name to pathname buffer.
.1 sec emulation mode.
xce
jsr MLI get info on the volume.
.DA #$C4
.DA #MLI.GFINFO
.DA gfiparms
bcc .2 branch if volume found,
clc (native mode)
xce
>LONGMX
jsr mountvol else ask user to mount the volume.
jsr mountvol else ask user to mount the volume.
bcc .1 if <return> pressed, then try again.
sec emulation mode.
xce
sec disk not found.
.2 rts
* Prodos 8 parameter lists
pfxparms .DA #01 one parm.
.DA inbuf address of prefix.
pfxparms .DA #01 1 parm.
.DA ROM.INBUF address of prefix.
opnparms .DA #3 3 parms.
.DA pbuf pathname
.DA op_buf i/o buffer
.DA SEL2.PBuf pathname
.DA SEL2.FBuf i/o buffer
oprefnum .HS 00 reference #
eofparms .DA #02 2 parms
eofrefn .HS 00 reference #
eofval .HS 000000 3 byte eof value
readparm .DA #04 4 parms
rdrefnum .HS 00 reference #
.DA sysentry read into $2000 (bank 0).
.DA SEL2.SYSLoad read into $2000 (bank 0).
rdcount .HS 0000 # of bytes to read.
.HS 0000 transfer count
closeprm .DA #1 1 parm
closeref .HS 00 reference #
quitparms .DA #04 4 parms.
.HS 00 quit back to launcher (GQuit)
.HS 0000
.HS 00
.HS 0000
gfiparms .DA #$0A 10 parms
.DA volbuf volume buffer
.DA SEL2.VBuf volume buffer
.DA #0 access
.DA #0 file type
.DA 0 aux type
@ -438,7 +490,12 @@ button1 .DA #$0D
button2 .DA #$0B
.AS "Cancel: Esc"
*--------------------------------------
.EP
*--------------------------------------
* .LIST ON
SEL2.LEN .EQ *-SEL2.START
.LIST OFF
*--------------------------------------
MAN
SAVE usr/src/prodos.fx/prodos.s.sel2
LOAD usr/src/prodos.fx/prodos.s

View File

@ -8,7 +8,9 @@ clkmode .EQ $0538 clock mode
rdtcp .EQ $C108 Thunderclock read entry
wttcp .EQ $C10B Thunderclock write entry
*--------------------------------------
TCLK.START ldx TCLK.Cx2+2 clock slot = $C1.
TCLK.START .PH CLK
ldx TCLK.Cx2+2 clock slot = $C1.
lda clkmode,x save current mode
pha
@ -22,17 +24,17 @@ TCLK.Cx2 jsr rdtcp read month, day of week, day of month
ldx #$04 index for 5 values.
ldy #$0C read minutes 1st, month last.
.1 lda inbuf,y convert values to binary.
.1 lda ROM.INBUF,y convert values to binary.
and #$07 no value > 5 decimal.
sta pcl 'tens' place value
sta ZP.PCL 'tens' place value
asl multiply by 10
asl
adc pcl
adc ZP.PCL
asl
adc inbuf+1,y add to ascii 'ones' place
adc ROM.INBUF+1,y add to ascii 'ones' place
sec and subtract out the ascii
sbc #$B0
sta pcl,x save converted value.
sta ZP.PCL,x save converted value.
dey index to next lowest value
dey
dey
@ -44,8 +46,8 @@ TCLK.Cx2 jsr rdtcp read month, day of week, day of month
ror
ror
ror high bit of month held in carry
ora A1L
sta p8date save low value of date.
ora ZP.A1L
sta GP.DATE save low value of date.
php save high bit of month.
and #$1F isolate day.
adc tdays-1,y (y = month)
@ -59,7 +61,7 @@ TCLK.Cx2 jsr rdtcp read month, day of week, day of month
bcs .3 loop until < 0.
adc #$07 make it in the range of 0-6.
sbc pch the delta provides years offset.
sbc ZP.PCH the delta provides years offset.
bcs .4 branch if positive
adc #$07 else make it positive again.
@ -68,12 +70,12 @@ TCLK.Cx2 jsr rdtcp read month, day of week, day of month
lda yradj,y look up year
plp and combine it with hi bit of month
rol
sta p8date+1 P8 date
sta GP.DATE+1 P8 date
lda A1L+1 hour
sta p8time+1 P8 time
lda A2L minute
sta p8time
lda ZP.A1L+1 hour
sta GP.TIME+1 P8 time
lda ZP.A2L minute
sta GP.TIME
pla restore previous mode.
ldx TCLK.Cx2+2 clock slot = $C1
@ -111,7 +113,9 @@ yradj .DA #$18 Monday
.DA #$19 Wednesday
.DA #$18 Tuesday
*--------------------------------------
.LIST ON
.EP
*--------------------------------------
* .LIST ON
TCLK.LEN .EQ *-TCLK.START
.LIST OFF
*--------------------------------------

View File

@ -8,7 +8,9 @@ NEW
XCLK.API.RTCBUF .EQ $2B0
XCLK.API.RDCLK .EQ $D8F0
*--------------------------------------
XCLK.START php
XCLK.START .PH CLK
XCLK.START1 php
sei
ldx #XCLK.START2xx.L-1
@ -22,21 +24,21 @@ XCLK.START php
lda XCLK.API.RTCBUF+1
and #%01111111 59
jsr XCLK.BCD2BIN
sta TIMELO
sta GP.TIME
* Hour
lda XCLK.API.RTCBUF+2
and #%00111111 23
jsr XCLK.BCD2BIN
sta TIMELO+1
sta GP.TIME+1
* Day
lda XCLK.API.RTCBUF+4
and #%00111111 31
jsr XCLK.BCD2BIN
sta DATELO
sta GP.DATE
* Year
lda XCLK.API.RTCBUF+6 99
jsr XCLK.BCD2BIN
sta DATELO+1
sta GP.DATE+1
* Month
lda XCLK.API.RTCBUF+5
and #%00011111 12
@ -46,8 +48,8 @@ XCLK.START php
asl
asl
asl
tsb DATELO
rol DATELO+1
tsb GP.DATE
rol GP.DATE+1
plp
rts
@ -55,35 +57,37 @@ XCLK.START php
XCLK.BCD2BIN tax
and #$F0
lsr CC
sta PCL temp location
sta ZP.PCL temp location
lsr CC
lsr CC
adc PCL
sta PCL
adc ZP.PCL
sta ZP.PCL
txa
* clc
and #$0F
adc PCL
adc ZP.PCL
rts
XCLK.START2xx bit RROMBNK2
XCLK.START2xx bit IO.RROMBNK2
sta $C070
bit $FACA
bit $FACA
bit $FAFE
jsr XCLK.API.RDCLK
bit $F851
bit RRAMWRAMBNK1
bit RRAMWRAMBNK1
bit IO.RRAMWRAMBNK1
bit IO.RRAMWRAMBNK1
rts
XCLK.START2xx.L .EQ *-XCLK.START2xx
*--------------------------------------
XCLK.CODE2xx .EQ XCLK.API.RTCBUF-XCLK.START2xx.L
*--------------------------------------
.LIST ON
.EP
*--------------------------------------
* .LIST ON
XCLK.LEN .EQ *-XCLK.START
.LIST OFF
*--------------------------------------

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,162 @@
NEW
AUTO 3,1
*--------------------------------------
entcalc jsr XDOS.ZPT.InitGBuf
ldx d_entnum on the entry #.
clc
.1 dex addr = XDOS.GBuf + ((d_entnum-1) * h_entln)
beq crerr3 branch with carry clear = no errors.
jsr XDOS.ZPT.Next
bcc .1
crerr3 rts carry set if error.
*--------------------------------------
drevise lda GP.DATE
beq drevise1 if no clock, then don't mod date/time.
ldx #$03
modtime lda GP.DATE,x move last modification date/time
sta d_moddt,x to entry being updated.
dex
bpl modtime
drevise1 lda bkbitflg (bit 5 = backup needed)
tsb d_attr mark entry as backupable
lda d_dev get device # of directory
sta GP.DEVNUM to be revised
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 XDOS.GBuf.
ldy h_entln now move 'd.' info to directory.
dey
.1 lda d_stor,y
sta (zpt),y
dey
bpl .1
lda d_head is the entry block same as
cmp ZP.BLKNUM the entry's header block?
bne H36E0 if no, go save entry block
lda d_head+1 then maybe, so test high addresses.
cmp ZP.BLKNUM+1
beq uphead branch if they are the same 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.
H36F2 lda h_fcnt,y
sta XDOS.GBuf+37,y (current entry count)
dey
bpl H36F2
lda h_attr also update header's attributes.
sta XDOS.GBuf+34
.DO LOWERCASE=1
jsr XDOS.WriteGBufDir
.ELSE
jsr XDOS.WriteGBuf go write updated header
.FIN
bcs H375A
*--------------------------------------
ripple lda XDOS.GBuf+4 test for 'root' directory because
and #$F0 if it is, then directory revision
eor #$F0 is complete (leaves carry clear).
beq H3770 branch if done.
lda XDOS.GBuf+41 get entry #
sta d_entnum
lda XDOS.GBuf+42 and the length of entries in that dir
sta h_entln
lda XDOS.GBuf+39 get addr of parent entry's dir block
ldx XDOS.GBuf+40
.DO LOWERCASE=1
jsr XDOS.ReadGBufAX no need to pak/unpak....will disturb zpt
.ELSE
jsr XDOS.ReadGBufAX read it
.FIN
bcs H375A
jsr entcalc get indirect ptr to parent entry in XDOS.GBuf
lda GP.DATE don't touch mod
beq H373B if no clock...
ldx #$03 update the modification date & time
ldy #$24 for this entry too
H3732 lda GP.DATE,x
sta (zpt),y
dey
dex
bpl H3732
H373B .DO LOWERCASE=1
jsr XDOS.WriteGBuf
.ELSE
jsr XDOS.WriteGBuf write updated entry back to disk.
.FIN
bcs H375A if error.
ldy #$26 compare current block # to this
lda (zpt),y entry's header block.
tax
dey
lda (zpt),y block as header.
cmp ZP.BLKNUM are low addresses the same?
bne H3751 branch if entry doesn't reside in same
cpx ZP.BLKNUM+1 are high address the same?
beq ripple they are the same, continue to root dir.
H3751 .DO LOWERCASE=1
jsr XDOS.ReadGBufAX
.ELSE
jsr XDOS.ReadGBufAX
.FIN
bcc ripple continue if read was good
H375A rts
H3770 clc no error
rts
*--------------------------------------
XDOS.FindDirOrVol
jsr XDOS.FindFileOrVol
bcs .99
@ -62,8 +218,8 @@ XDOS.CheckPath jsr XDOS.FindVol
lda #$D0 fake directory file
sta d_stor
lda gbuf+2 check forward link.
ora gbuf+3 if non-zero, assume full sized directory
lda XDOS.GBuf+2 check forward link.
ora XDOS.GBuf+3 if non-zero, assume full sized directory
bne .3 else assume it's the slot 3 /RAM volume
lda #$02 so reset eof and blocks_used fields
@ -97,16 +253,16 @@ L37C9 stz totent reset entry counter.
L37E2 dec entcnth should be at least one
L37EB sta entcntl keep a running count.
lda /gbuf reset indirect pointer
lda /XDOS.GBuf reset indirect pointer
sta zpt+1
lda gbuf+2 get link to next dir block
lda XDOS.GBuf+2 get link to next dir block
bne L37FC (if there is one).
cmp gbuf+3 are both zero, i.e. no link? if so,
cmp XDOS.GBuf+3 are both zero, i.e. no link? if so,
beq errdir then not all entries were acct'd for.
L37FC ldx gbuf+3 acc has value for block# (low).
L37FC ldx XDOS.GBuf+3 acc has value for block# (low).
.DO LOWERCASE=1
jsr XDOS.ReadGBufAXDir
.ELSE
@ -117,13 +273,13 @@ L37FC ldx gbuf+3 acc has value for block# (low).
*--------------------------------------
errfnf lda nofree was any free entry found?
bne fnf0
lda gbuf+2 test link
lda XDOS.GBuf+2 test link
bne L3814
cmp gbuf+3 if both are 0 then give up.
cmp XDOS.GBuf+3 if both are 0 then give up.
beq fnf0 report 'not found'.
L3814 sta d_entblk
lda gbuf+3
lda XDOS.GBuf+3
sta d_entblk+1 assume 1st entry of next block
lda #$01 is free for use.
sta d_entnum mark as valid (for create)
@ -160,20 +316,20 @@ namfound jsr nxtpname adj index to next name in path.
.DO LOWERCASE=1
jsr XDOS.ReadGBufAXDir
.ELSE
jsr XDOS.ReadGBufAX read subdirectory into gbuf.
jsr XDOS.ReadGBufAX read subdirectory into XDOS.GBuf.
.FIN
bcs lookfil0.RTS if error.
lda gbuf+37 get the # of files contained in this
lda XDOS.GBuf+37 get the # of files contained in this
sta entcntl directory.
lda gbuf+38
lda XDOS.GBuf+38
sta entcnth
*--------------------------------------
* Check if $75 at VOL/DIR entry + $14
* (8 bytes reserved)
*--------------------------------------
.DO LOWERCASE=0
lda gbuf+20 make sure password is disabled
lda XDOS.GBuf+20 make sure password is disabled
ldx #$00
sec
@ -197,7 +353,7 @@ movhead jsr movhed0 move directory info.
movhed0 ldx #9 move this directory info
.1 lda gbuf+$1C,x
.1 lda XDOS.GBuf+$1C,x
sta h_credt,x
dex
bpl .1
@ -205,14 +361,14 @@ movhed0 ldx #9 move this directory info
.DO ACL=1
ldx #7
lda gbuf+$14
lda XDOS.GBuf+$14
cmp #$57
bne .20
lda gbuf+$15
lda XDOS.GBuf+$15
bne .20
.2 lda gbuf+$14,x
.2 lda XDOS.GBuf+$14,x
sta h_acl,x
dex
bpl .2
@ -225,14 +381,14 @@ movhed0 ldx #9 move this directory info
.21 .FIN
lda gbuf+4 if this is root, then nothing to do
lda XDOS.GBuf+4 if this is root, then nothing to do
and #$F0
eor #$F0 test header type.
beq .8 branch if root
ldx #$03 otherwise, save owner info about
.3 lda gbuf+$27,x this header.
.3 lda XDOS.GBuf+$27,x this header.
sta own_blk,x
dex
bpl .3
@ -245,9 +401,9 @@ filfound lda h_maxent figure out which entry # this is
adc #$00 = entry # (carry was set)
sta d_entnum
lda bloknml and indicate block # of this directory
lda ZP.BLKNUM and indicate block # of this directory
sta d_entblk
lda bloknml+1
lda ZP.BLKNUM+1
sta d_entblk+1
* clc done by ADC #$00
@ -258,7 +414,7 @@ XDOS.LookupNameInDirBlk
lda h_maxent reset count of files per block
sta cntent
jsr XDOS.ZPT.InitGBuf reset indirect pointer to gbuf
jsr XDOS.ZPT.InitGBuf reset indirect pointer to XDOS.GBuf
bcs .4 branch if this block contains a header
@ -279,14 +435,14 @@ XDOS.LookupNameInDirBlk
sta namcnt save name length as counter.
ldx namptr get index to current path.
cmp pathbuf,x are both names the same length?
cmp XDOS.PathBuf,x are both names the same length?
bne .4 no, inc to next entry.
.3 inx (first) next letter index
iny
lda (zpt),y compare names letter by letter
cmp pathbuf,x
cmp XDOS.PathBuf,x
bne .4
dec namcnt all letters compared?
@ -315,63 +471,63 @@ XDOS.FindVol jsr XDOS.FindVolInVCBOrDev
dex
bpl .1
lda DEVNUM setup device # for this directory
lda GP.DEVNUM setup device # for this directory
sta d_dev
jsr movhed0 setup other header info from directory
ldy #$01 in gbuf and clean up misc info.
ldx vcbptr
ldy #$01 in XDOS.GBuf and clean up misc info.
ldx XDOS.VCBPtr
inx
.2 lda VCBs+VCB.TBLK,x misc info includes
.2 lda XDOS.VCBs+VCB.TBLK,x misc info includes
sta h_tblk,y total # of blocks,
lda VCBs+VCB.BMAP,x the address of the 1st bitmap,
lda XDOS.VCBs+VCB.BMAP,x the address of the 1st bitmap,
sta h_bmap,y
lda bloknml,y directory's disk address,
lda ZP.BLKNUM,y directory's disk address,
sta d_head,y
lda h_fcnt,y and setting up a counter for the # of
sta entcntl,y files in this directory.
dex
dey
bpl .2
*--------------------------------------
nxtpname jsr nxtpnam1 get new namptr in y and namlen in acc.
sty namptr save new pathname pointer.
rts (status reg according to accumulator)
*--------------------------------------
nxtpnam1 ldy namptr inc pathname pointer to next name
lda pathbuf,y in the path.
lda XDOS.PathBuf,y in the path.
sec
adc namptr if this addition results in zero,
tay then prefixed directory has been moved
bne L395F to another device. branch if not.
bne .1 to another device. branch if not.
lda DEVNUM revise DEVNUM for prefixed directory
lda GP.DEVNUM revise GP.DEVNUM for prefixed directory
sta p_dev
L395F lda pathbuf,y test for end of name.
.1 lda XDOS.PathBuf,y test for end of name.
clc no errors
novolume rts
*--------------------------------------
XDOS.FindVolInVCBOrDev
lda #$00
ldy preflag use prefix volume name to look up vcb.
ldy GP.PFXPTR use prefix volume name to look up vcb.
bit prfxflg is this a prefixed path?
bpl L396F branch if it is
tay set ptr to volume name
L396F sty vnptr and save.
sta DEVNUM zero out dev# until vcb located.
L396F sty L39D4+1 and save.
sta GP.DEVNUM zero out dev# until vcb located.
lda #VCB0
lda #XDOS.VCB0
L3975 pha acc now used as vcb lookup index.
tax index pointer to x.
lda VCBs,x get vcb volume name length.
lda XDOS.VCBs,x get vcb volume name length.
bne L3987 branch if claimed vcb to be tested.
L397C ldy vnptr restore pointer to requested vol name.
L397C ldy L39D4+1 restore pointer to requested vol name.
pla now adj vcb index to next vcb entry.
clc
adc #VCB
@ -381,33 +537,33 @@ L397C ldy vnptr restore pointer to requested vol name.
L3987 sta namcnt save length of vol name to be compared.
L398A cmp pathbuf,y is it the same as requested vol name?
L398A cmp XDOS.PathBuf,y is it the same as requested vol name?
bne L397C branch if not
inx
iny next character
lda VCBs,x
lda XDOS.VCBs,x
dec namcnt last character?
bpl L398A if not.
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.
stx XDOS.VCBPtr save it for future reference.
lda XDOS.VCBs+VCB.DEV,x get it's device #
sta GP.DEVNUM and save it.
lda #$02 assume prefix is not used and
ldx #$00 that root directory is to be used.
pha
lda vnptr = 0 if no prefix.
lda L39D4+1 = 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.
adc XDOS.PathBuf,y inc to next dir in prefix path.
bcc L39AC branch if another dir in prefix.
pla
@ -430,17 +586,18 @@ L39C2 pla
jsr XDOS.CheckVolName compare dir name with path name.
bcc L39F0 if they match, stop looking.
L39CC ldx vcbptr check if current (matched) vcb is active
lda VCBs+VCB.OFCNT,x i.e. does it have open files?
L39CC ldx XDOS.VCBPtr check if current (matched) vcb is active
lda XDOS.VCBs+VCB.OFCNT,x i.e. does it have open files?
bne L39ED report not found if active.
L39D4 lda vnptr make path ptr same as volume ptr
L39D4 lda #$FF SELF MODIFIED 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 GP.DEVNUM log current device 1st before searching
bne L39F1 others.
L39E2 ldx DEVCNT scan look list for devices we need
L39E2 ldx GP.DEVCNT scan look list for devices we need
L39E5 lda loklst,x to search for the requested volume.
bne L39F4 branch if we've a device to look at.
@ -452,7 +609,7 @@ L39ED lda #MLI.E.VNOTFND no mounted volume
sec error
L39F0 rts
L39F1 ldx DEVCNT now remove the device from the list
L39F1 ldx GP.DEVCNT now remove the device from the list
L39F4 cmp loklst,x of prospective devices.
beq L39FE branch if match.
@ -460,21 +617,21 @@ L39F4 cmp loklst,x of prospective devices.
dex look until found.
bpl L39F4 always taken (usually) unless
bmi L39ED if dev was removed from devlst (/RAM).
bmi L39ED if dev was removed from GP.DEVLST (/RAM).
L39FE sta DEVNUM preserve device to be checked next.
L39FE sta GP.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).
bcs L3A29 branch if vcb full.
lda VCBs,x did we find it or return free vcb?
lda XDOS.VCBs,x did we find it or return free vcb?
beq L3A16 if free vcb.
lda VCBs+VCB.OFCNT,x is this volume active?
lda XDOS.VCBs+VCB.OFCNT,x is this volume active?
bne L39E2 if so, no need to re-log.
L3A16 lda #$02 go read root dir into gbuf
L3A16 lda #$02 go read root dir into XDOS.GBuf
ldx #$00
.DO LOWERCASE=1
jsr XDOS.ReadGBufAXDir
@ -490,48 +647,48 @@ L3A16 lda #$02 go read root dir into gbuf
bcs L39E2 if not
L3A29 rts
*--------------------------------------
mvdevnums ldx DEVCNT copy all dev #'s to be checked.
mvdevnums ldx GP.DEVCNT copy all dev #'s to be checked.
L3A2D lda DEVLST,x active device list.
.1 lda GP.DEVLST,x active device list.
and #$F0 strip device type info.
sta loklst,x copy them to a temp workspace
dex
bpl L3A2D
bpl .1
ldx DEVCNT
ldx GP.DEVCNT
rts
*--------------------------------------
XDOS.FindVCBForDevNum
lda #VCB0 look for vcb for DEVNUM
lda #XDOS.VCB0 look for vcb for GP.DEVNUM
ldy #$FF
.1 tax new index to next vcb
lda VCBs+VCB.DEV,x check all devnums
cmp DEVNUM is this the vcb?
lda XDOS.VCBs+VCB.DEV,x check all devnums
cmp GP.DEVNUM is this the vcb?
beq .7
lda VCBs,x is this a free vcb?
lda XDOS.VCBs,x is this a free vcb?
bne .3 if not
iny
bne .3 already found a free one
stx vcbptr save first free VCB
stx XDOS.VCBPtr save first free VCB
.3 txa
clc inc index to next vcb
adc #VCB
bcc .1
ldx vcbptr get found free if any
ldx XDOS.VCBPtr get found free if any
tya any free vcb's available?
bpl .8 yes, exit with X = vcbptr
bpl .8 yes, exit with X = XDOS.VCBPtr
lda #VCB0 look for an entry to kick out
lda #XDOS.VCB0 look for an entry to kick out
.4 tax
lda VCBs+VCB.OFCNT,x any open files?
lda XDOS.VCBs+VCB.OFCNT,x any open files?
beq .5 no, kick this one out.
txa next vcb
@ -543,10 +700,10 @@ XDOS.FindVCBForDevNum
* sec
rts
.5 stz VCBs,x free this entry
stz VCBs+VCB.DEV,x
.5 stz XDOS.VCBs,x free this entry
stz XDOS.VCBs+VCB.DEV,x
.7 stx vcbptr save entry index.
.7 stx XDOS.VCBPtr save entry index.
.8 clc no error.
rts
@ -555,33 +712,33 @@ XDOS.CheckVolName
ldx #$00 index to directory name.
ldy namptr index to pathname.
lda gbuf+4 get dir name length and type.
lda XDOS.GBuf+4 get dir name length and type.
cmp #$E0 is it a directory?
bcc L3A90 if not.
bcc .1 if not.
and #$0F isolate name length and
sta namcnt save as a counter.
bne L3A95 branch if valid length.
bne .3 branch if valid length.
L3A90 sec indicate not found
.1 sec indicate not found
rts
L3A92 lda gbuf+4,x next char
.2 lda XDOS.GBuf+4,x next char
L3A95 cmp pathbuf,y
bne L3A90 if not the same.
.3 cmp XDOS.PathBuf,y
bne .1 if not the same.
inx check next char
iny
dec namcnt
bpl L3A92 if more to compare.
bpl .2 if more to compare.
clc match found
XDOS.CheckVolName.RTS
rts
*--------------------------------------
XDOS.VCBMount ldx vcbptr previously logged in volume?
lda VCBs,x (acc = 0?)
XDOS.VCBMount ldx XDOS.VCBPtr previously logged in volume?
lda XDOS.VCBs,x (acc = 0?)
beq XDOS.VCBMountAtX no, go prepare vcb.
jsr XDOS.VCBCmpGBUF does vcb match vol read?
@ -590,16 +747,16 @@ XDOS.VCBMount ldx vcbptr previously logged in volume?
XDOS.VCBMountAtX
ldy #VCB zero out vcb entry
L3AB2 stz VCBs,x
L3AB2 stz XDOS.VCBs,x
inx
dey
bne L3AB2
lda gbuf pointer to previous dir block
ora gbuf+1 must be null
lda XDOS.GBuf pointer to previous dir block
ora XDOS.GBuf+1 must be null
bne tsterr
lda gbuf+4 test for header
lda XDOS.GBuf+4 test for header
and #$E0
cmp #$E0
bne tsterr
@ -607,30 +764,30 @@ L3AB2 stz VCBs,x
jsr tstdupvol does a duplicate with open files
bcs L3B04 already exist? branch if yes.
lda gbuf+4 move volume name to vcb.
lda XDOS.GBuf+4 move volume name to vcb.
and #$0F strip root marker
tay
pha
* clc
adc vcbptr
adc XDOS.VCBPtr
tax
L3ACE lda gbuf+4,y
sta VCBs,x
L3ACE lda XDOS.GBuf+4,y
sta XDOS.VCBs,x
dex
dey
bne L3ACE
pla get length again
sta VCBs,x and save.
sta XDOS.VCBs,x and save.
lda DEVNUM last device used.
sta VCBs+VCB.DEV,x save device # and
lda GP.DEVNUM last device used.
sta XDOS.VCBs+VCB.DEV,x save device # and
ldy #0
.1 lda gbuf+39,y
sta VCBs+VCB.BMAP,x copy BMAP+TBLK
.1 lda XDOS.GBuf+39,y
sta XDOS.VCBs+VCB.BMAP,x copy BMAP+TBLK
iny
inx
cpy #4
@ -643,43 +800,43 @@ tsterr lda #MLI.E.NOTPRODOS not tree or dir, unrecognized type
sec
rts
*--------------------------------------
XDOS.VCBCmpGBUF lda gbuf+4 with name in directory.
XDOS.VCBCmpGBUF lda XDOS.GBuf+4 with name in directory.
and #$0F
cmp VCBs,x are they the same length?
stx xvcbptr (see rev note #23)
cmp XDOS.VCBs,x are they the same length?
stx .1+1 xvcbptr : see rev note #23
bne .9 if not the same.
tay
clc
adc xvcbptr
.1 adc #$FF xvcbptr : SELF MODIFIED
tax
.1 lda gbuf+4,y
cmp VCBs,x
.2 lda XDOS.GBuf+4,y
cmp XDOS.VCBs,x
bne .9 if not the same.
dex
dey
bne .1
bne .2
clc indicate match.
.HS B0 BCS
.9 sec
ldx xvcbptr offset to start of vcb (rev note #23)
ldx .1+1 xvcbptr : offset to start of vcb (rev note #23)
rts
*--------------------------------------
tstdupvol lda #VCB0 check for other logged in volumes with the same name.
tstdupvol lda #XDOS.VCB0 check for other logged in volumes with the same name.
L3B2C tax
jsr XDOS.VCBCmpGBUF
bcs L3B41 if no match.
lda VCBs+VCB.OFCNT,x test for any open files.
lda XDOS.VCBs+VCB.OFCNT,x test for any open files.
bne L3B4B cannot look at this volume.
stz VCBs,x take duplicate offline if no open files
stz VCBs+VCB.DEV,x
stz XDOS.VCBs,x take duplicate offline if no open files
stz XDOS.VCBs+VCB.DEV,x
* clc ok to log in new volume.
rts
@ -691,14 +848,14 @@ L3B41 txa index to next vcb
clc
rts
L3B4B sta duplflag duplicate has been found.
stx vcbentry save pointer to conflicting vcb.
L3B4B sta XDOS.VCBDupFlag duplicate has been found.
stx XDOS.VCBDupEnt save pointer to conflicting vcb.
sec error.
rts
*--------------------------------------
tstfrblk ldx vcbptr test if enough free blocks available for request.
lda VCBs+VCB.FBLK+1,x check if proper count for this volume.
ora VCBs+VCB.FBLK,x
tstfrblk ldx XDOS.VCBPtr test if enough free blocks available for request.
lda XDOS.VCBs+VCB.FBLK+1,x check if proper count for this volume.
ora XDOS.VCBs+VCB.FBLK,x
bne L3BAD branch if count is non-zero.
tkfrecnt jsr cntbms get # of bitmaps
@ -712,12 +869,12 @@ tkfrecnt jsr cntbms get # of bitmaps
jsr upbmap update volume bitmap.
bcs L3BC1 if error.
ldx vcbptr get address of 1st bitmap
ldx XDOS.VCBPtr get address of 1st bitmap
lda VCBs+VCB.BMAP,x
sta bloknml
lda VCBs+VCB.BMAP+1,x
sta bloknml+1
lda XDOS.VCBs+VCB.BMAP,x
sta ZP.BLKNUM
lda XDOS.VCBs+VCB.BMAP+1,x
sta ZP.BLKNUM+1
L3B81 jsr XDOS.ReadGBuf use general buffer for temp space to
bcs L3BC1 count free blocks (bits).
@ -726,27 +883,27 @@ L3B81 jsr XDOS.ReadGBuf use general buffer for temp space to
dec bmcnt was that the last bitmap?
bmi L3B96 if so, go change fcb so not done again.
inc bloknml
inc ZP.BLKNUM
bne L3B81
inc bloknml+1
inc ZP.BLKNUM+1
bra L3B81
L3B96 ldx vcbptr mark which block had 1st free space
L3B96 ldx XDOS.VCBPtr mark which block had 1st free space
lda nofree
bmi L3BBE if no free space was found.
sta VCBs+VCB.BMAPIDX,x update the free count.
sta XDOS.VCBs+VCB.BMAPIDX,x update the free count.
lda scrtch+1
sta VCBs+VCB.FBLK+1,x update volume control byte.
sta XDOS.VCBs+VCB.FBLK+1,x update volume control byte.
lda scrtch
sta VCBs+VCB.FBLK,x
sta XDOS.VCBs+VCB.FBLK,x
L3BAD lda VCBs+VCB.FBLK,x compare total available free blocks
L3BAD lda XDOS.VCBs+VCB.FBLK,x compare total available free blocks
sec on this volume.
sbc reql
lda VCBs+VCB.FBLK+1,x
lda XDOS.VCBs+VCB.FBLK+1,x
sbc reqh
bcc L3BBE
@ -756,15 +913,15 @@ L3BAD lda VCBs+VCB.FBLK,x compare total available free blocks
L3BBE lda #MLI.E.VOLFULL
sec
L3BC1 rts
*--------------------------------------
count ldy #$00
L3BC4 lda gbuf,y bit pattern.
L3BC4 lda XDOS.GBuf,y bit pattern.
beq L3BCC don't count
jsr cntfree
L3BCC lda gbuf+$100,y do both pages with same loop
L3BCC lda XDOS.GBuf+$100,y do both pages with same loop
beq L3BD4
jsr cntfree
@ -785,7 +942,7 @@ L3BD4 iny
sta nofree
L3BEE rts
*--------------------------------------
cntfree asl count the # of bits in this byte
bcc L3BFA
@ -797,10 +954,10 @@ cntfree asl count the # of bits in this byte
L3BFA ora #$00
bne cntfree loop until all bits counted
rts
cntbms ldx vcbptr
ldy VCBs+VCB.TBLK+1,x return the # of bitmaps
lda VCBs+VCB.TBLK,x possible with the total count
*--------------------------------------
cntbms ldx XDOS.VCBPtr
ldy XDOS.VCBs+VCB.TBLK+1,x return the # of bitmaps
lda XDOS.VCBs+VCB.TBLK,x possible with the total count
bne L3C0B found in the vcb.
dey adj for bitmap block boundary

View File

@ -3,8 +3,8 @@ NEW
*--------------------------------------
XDOS.DeallocAX stx bmcnt high address of block.
* pha save low address.
ldx vcbptr check that bitmap block address is
ldy VCBs+VCB.TBLK+1,x valid given the total # of blocks
ldx XDOS.VCBPtr check that bitmap block address is
ldy XDOS.VCBs+VCB.TBLK+1,x valid given the total # of blocks
cpy bmcnt on the volume.
* pla
bcc L3C8C branch if invalid
@ -42,9 +42,9 @@ XDOS.DeallocAX stx bmcnt high address of block.
bcs L3C8B error.
lda bmcnt get map #
ldx vcbptr
ldx XDOS.VCBPtr
sta VCBs+VCB.BMAPIDX,x and make it current.
sta XDOS.VCBs+VCB.BMAPIDX,x and make it current.
lda bmadev
jsr gtbmap read it into buffer
bcs L3C8B
@ -54,12 +54,12 @@ L3C64 ldy bmptr index to byte
lda nofree (get indiviual bit)
bcc bmbufhi branch if on page 1 of bitmap
ora bmbuf+$100,y
sta bmbuf+$100,y
ora XDOS.BMBuf+$100,y
sta XDOS.BMBuf+$100,y
bcs L3C7D always.
bmbufhi ora bmbuf,y this address + 2 is used as an absolute reference to bmbuf high byte.
sta bmbuf,y
bmbufhi ora XDOS.BMBuf,y this address + 2 is used as an absolute reference to XDOS.BMBuf high byte.
sta XDOS.BMBuf,y
L3C7D lda #$80 mark bitmap as modified
tsb bmastat
@ -82,7 +82,7 @@ alc1blk jsr fndbmap get address of bitmap.
L3C95 ldy #$00 begin search at start of bitmap block.
sty half which half (page) to search
L3C9A lda bmbuf,y
L3C9A lda XDOS.BMBuf,y
bne L3CB9 free blocks indicated by 'on' bits
iny
@ -91,7 +91,7 @@ L3C9A lda bmbuf,y
inc half now search page 2.
inc basval base value = base address / 2048.
L3CA8 lda bmbuf+$100,y search 2nd half for free block
L3CA8 lda XDOS.BMBuf+$100,y search 2nd half for free block
bne L3CB9
iny
@ -120,10 +120,10 @@ L3CB9 sty bmptr save index pointer to valid bit group.
lda half
beq L3CDB branch if allocating from 1st half.
lda bmbuf+$100,y get pattern from 2nd page.
lda XDOS.BMBuf+$100,y get pattern from 2nd page.
bcs L3CDE always.
L3CDB lda bmbuf,y get bit pattern from 1st page.
L3CDB lda XDOS.BMBuf,y get bit pattern from 1st page.
L3CDE rol find left most 'on' bit
bcs L3CE4 if found.
@ -137,47 +137,47 @@ L3CE4 lsr restore pos'n of all but left most bit.
ldx half which half of bitmap ?
bne L3CF4 if page 2.
sta bmbuf,y
sta XDOS.BMBuf,y
beq L3CF7 always.
L3CF4 sta bmbuf+$100,y update to show allocated block in use.
L3CF4 sta XDOS.BMBuf+$100,y update to show allocated block in use.
L3CF7 lda #$80 indicate map is modified.
tsb bmastat
ldx vcbptr subtract 1 from total free vcb blocks
lda VCBs+VCB.FBLK,x to account for newly allocated block.
ldx XDOS.VCBPtr subtract 1 from total free vcb blocks
lda XDOS.VCBs+VCB.FBLK,x to account for newly allocated block.
bne .7
dec VCBs+VCB.FBLK+1,x
.7 dec VCBs+VCB.FBLK,x
dec XDOS.VCBs+VCB.FBLK+1,x
.7 dec XDOS.VCBs+VCB.FBLK,x
lda scrtch return address in y,a of newly
ldy scrtch+1 allocated block.
clc no errors.
rts
*--------------------------------------
nxtbmap ldx vcbptr inc to next bitmap, but 1st make sure there is another one.
lda VCBs+VCB.TBLK+1,x
nxtbmap ldx XDOS.VCBPtr inc to next bitmap, but 1st make sure there is another one.
lda XDOS.VCBs+VCB.TBLK+1,x
lsr
lsr
lsr
lsr
cmp VCBs+VCB.BMAPIDX,x are there more maps ?
cmp XDOS.VCBs+VCB.BMAPIDX,x are there more maps ?
beq L3D60 if no more to look at.
inc VCBs+VCB.BMAPIDX,x add 1 to current map
inc XDOS.VCBs+VCB.BMAPIDX,x add 1 to current map
jsr upbmap
fndbmap ldy vcbptr
lda VCBs+VCB.DEV,y get device #.
fndbmap ldy XDOS.VCBPtr
lda XDOS.VCBs+VCB.DEV,y get device #.
cmp bmadev does this map match this device ?
beq L3D4A yes.
jsr upbmap otherwise, save other volume's bitmap
bcs L3D5F
ldy vcbptr
lda VCBs+VCB.DEV,y
ldy XDOS.VCBPtr
lda XDOS.VCBs+VCB.DEV,y
sta bmadev and read in fresh bitmap for this dev.
L3D4A ldy bmastat is it already modified ?
@ -186,8 +186,8 @@ L3D4A ldy bmastat is it already modified ?
jsr gtbmap otherwise read in fresh bitmap.
bcs L3D5F if error.
L3D54 ldy vcbptr get relative block # of bitmap.
lda VCBs+VCB.BMAPIDX,y
L3D54 ldy XDOS.VCBPtr get relative block # of bitmap.
lda XDOS.VCBs+VCB.BMAPIDX,y
asl 2 pages per block
sta basval
@ -211,14 +211,14 @@ upbmap clc
*--------------------------------------
gtbmap sta bmadev read bitmap specified by dev and vcb.
ldy vcbptr get lowest map # with free blocks in it
lda VCBs+VCB.BMAPIDX,y
ldy XDOS.VCBPtr get lowest map # with free blocks in it
lda XDOS.VCBs+VCB.BMAPIDX,y
sta bmacmap associate offset with bitmap ctrl block.
clc add this # to the base address of
adc VCBs+VCB.BMAP,y 1st bitmap and save in bmadadr which
adc XDOS.VCBs+VCB.BMAP,y 1st bitmap and save in bmadadr which
sta bmadadr is address of bitmap to be used.
lda VCBs+VCB.BMAP+1,y
lda XDOS.VCBs+VCB.BMAP+1,y
adc #$00
sta bmadadr+1
@ -226,23 +226,23 @@ gtbmap sta bmadev read bitmap specified by dev and vcb.
.HS 2C BIT ABS
wrtbmap lda #$02 write command.
sta A4L
sta ZP.CMDNUM
lda DEVNUM save current dev #
lda GP.DEVNUM save current dev #
pha
lda bmadev get bitmap's dev #
sta DEVNUM
sta GP.DEVNUM
lda bmadadr and disk address
sta bloknml
sta ZP.BLKNUM
lda bmadadr+1
sta bloknml+1
sta ZP.BLKNUM+1
lda /bmbuf
lda /XDOS.BMBuf
* lda bmbufhi+2 address of the buffer (low = 0)
jsr XDOS.RWBlock
plx keep A=error code if CS
stx DEVNUM
stx GP.DEVNUM
L3DB6 rts
*--------------------------------------
@ -253,7 +253,7 @@ XDOS.WriteGBufDir
.FIN
*--------------------------------------
XDOS.ReadGBuf_d_frst
lda d_frst read 1st block of directory into gbuf
lda d_frst read 1st block of directory into XDOS.GBuf
ldx d_frst+1
.DO LOWERCASE=1
XDOS.ReadGBufAXDir
@ -261,35 +261,35 @@ XDOS.ReadGBufAXDir
bcc XDOS.UnpackGBuf
rts
.FIN
XDOS.ReadGBufAX sta bloknml
stx bloknml+1
XDOS.ReadGBufAX sta ZP.BLKNUM
stx ZP.BLKNUM+1
XDOS.ReadGBuf lda #$01 read command.
.HS 2C BIT ABS
XDOS.WriteGBuf lda #$02 write command
sta A4L pass to device handler.
lda /gbuf general buffer.
sta ZP.A4L pass to device handler.
lda /XDOS.GBuf general buffer.
XDOS.RWBlock sta buf+1 buffer high.
stz buf buffer low (always on page boundary)
XDOS.RWBlock sta ZP.BUFPTR+1 buffer high.
stz ZP.BUFPTR buffer low (always on page boundary)
stz p8error clear global error code.
stz GP.ERROR clear global error code.
lda #$FF indicates reg call made to dev handler
sta ioaccess
lda GP.DEVNUM transfer dev # for dispatcher to
sta ZP.UNITNUM convert to unit #.
lda DEVNUM transfer dev # for dispatcher to
sta unitnum convert to unit #.
jmp XDOS.DevCall call the driver.
*--------------------------------------
.DO LOWERCASE=1
XDOS.CheckAndUnpackGBuf
lda gbuf+$23
lda XDOS.GBuf+$23
sta h_entln
ldy gbuf+$24
ldy XDOS.GBuf+$24
sty h_maxent
cmp #$27
bne .9
@ -379,8 +379,8 @@ XDOS.GetMark ldx fcbptr index to open fcb.
ldy #$02 index to user's mark parameter.
.1 lda FCBs+FCB.MARK,x transfer current position
sta (A3L),y to user's parameter list
.1 lda XDOS.FCBs+FCB.MARK,x transfer current position
sta (ZP.A3L),y to user's parameter list
inx
iny
cpy #$05 transfer 3 bytes
@ -399,11 +399,11 @@ XDOS.SetMark ldy #$04 index to user's desired position.
inx
sec indicate comparisons are necessary.
.1 lda (A3L),y move it to 'tpos'
.1 lda (ZP.A3L),y move it to 'tpos'
sta tposll-2,y
bcc .2 branch if mark < eof
cmp FCBs+FCB.EOF,x
cmp XDOS.FCBs+FCB.EOF,x
bcc .2 branch if mark qualifies.
bne L3DFD branch if mark > eof (invalid position)
@ -416,7 +416,7 @@ XDOS.SetMark ldy #$04 index to user's desired position.
bne .1 branch if more.
rdposn ldy fcbptr test to see if new position is
lda FCBs+FCB.MARK+1,y within the same (current) data block.
lda XDOS.FCBs+FCB.MARK+1,y within the same (current) data block.
and #$FE
sta scrtch
lda tposlh middle byte of new position
@ -429,12 +429,12 @@ rdposn ldy fcbptr test to see if new position is
bcs L3E44 of current position.
lda tposhi make sure within the same 64k.
cmp FCBs+FCB.MARK+2,y
cmp XDOS.FCBs+FCB.MARK+2,y
bne L3E44 branch if not.
jmp svmark if so, adj fcb, position ptr and return.
L3E44 lda FCBs+FCB.STYPE,y determine file type for positioning.
L3E44 lda XDOS.FCBs+FCB.STYPE,y determine file type for positioning.
beq L3E50 0 = invalid file type.
cmp #$04 tree class file?
@ -443,14 +443,14 @@ L3E44 lda FCBs+FCB.STYPE,y determine file type for positioning.
jmp dirmark no, test for dir type.
L3E50 ldy #$A4 clear illegal filetype entry in fcb
sta FCBs,y
sta XDOS.FCBs,y
lda #MLI.E.BADREF and report error
sec
rts
L3E59 lda FCBs+FCB.STYPE,y use storage type as # of index levels
L3E59 lda XDOS.FCBs+FCB.STYPE,y use storage type as # of index levels
sta levels since 1=seed, 2=sapling, 3=tree.
lda FCBs+FCB.F,y
lda XDOS.FCBs+FCB.F,y
and #FCB.F.DBLKMOD if previous data was modified then
beq L3E6B disk must be updated.
@ -459,7 +459,7 @@ L3E59 lda FCBs+FCB.STYPE,y use storage type as # of index levels
bcs L3ED4 if error.
L3E6B ldy fcbptr test to see if current index block
lda FCBs+FCB.MARK+2,y is usable by checking if new
lda XDOS.FCBs+FCB.MARK+2,y is usable by checking if new
and #$FE position is within 128k of the
sta scrtch beginning of current sapling level
lda tposhi chunk.
@ -479,12 +479,12 @@ L3E89 lda tposlh is new position < 512 ?
ora tposhi
bne L3EEF no, mark both data and index block as
lda FCBs+FCB.1stBLK,y unallocated. 1st block is only block
sta bloknml and it's data.
lda FCBs+FCB.1stBLK+1,y high block address.
lda XDOS.FCBs+FCB.1stBLK,y unallocated. 1st block is only block
sta ZP.BLKNUM and it's data.
lda XDOS.FCBs+FCB.1stBLK+1,y high block address.
jmp rnewpos go read in block and set statuses.
L3E9D lda FCBs+FCB.F,y check to see if previous index block
L3E9D lda XDOS.FCBs+FCB.F,y check to see if previous index block
and #FCB.F.IBLKMOD was modified.
beq L3EA9 read in over it if current up to date.
@ -536,15 +536,15 @@ posindex jsr XDOS.ClrFCBStatus clr all alloc requirements for previous
L3EEF lda #$03 show neither index or data block alloc'd
bra L3F18
saplevel sta bloknml read in next lower index block.
saplevel sta ZP.BLKNUM read in next lower index block.
lda (zpt),y (high address)
sta bloknml+1
sta ZP.BLKNUM+1
dec zpt+1
* jsr rfcbidx read in sapling level
lda #$01 prepare to read index block : read command
sta A4L
sta ZP.CMDNUM
ldx #zpt address of current index buffer.
@ -591,11 +591,11 @@ L3F49 sta (datptr),y
dec datptr+1
rts
*--------------------------------------
L3F51 sta bloknml get data block of new position
L3F51 sta ZP.BLKNUM get data block of new position
lda (zpt),y (high address)
dec zpt+1
rnewpos sta bloknml+1
rnewpos sta ZP.BLKNUM+1
jsr XDOS.ReadFCB.DBLK
bcs L3F86 if error.
@ -606,10 +606,10 @@ svmark ldy fcbptr update position in fcb
iny
ldx #$02
L3F68 lda FCBs+FCB.MARK,y save old mark in case calling routine
L3F68 lda XDOS.FCBs+FCB.MARK,y save old mark in case calling routine
sta oldmark,x fails later.
lda tposll,x
sta FCBs+FCB.MARK,y
sta XDOS.FCBs+FCB.MARK,y
dey
dex move 3 byte position marker
bpl L3F68
@ -627,16 +627,16 @@ dirmark cmp #$0D is it a directory ?
beq L3F9C yes...
lda #MLI.E.INCFF no, so compatability problem.
jsr GP.P8errv should not have been opened !!!
jsr GP.SYSERR should not have been opened !!!
L3F9C lda scrtch recover results of previous subtraction.
lsr use difference as counter for how many
sta cntent blocks must be read to get to new pos'n.
lda FCBs+FCB.MARK+1,y test for positive direction
lda XDOS.FCBs+FCB.MARK+1,y test for positive direction
cmp tposlh indicated by carry.
lda FCBs+FCB.MARK+2,y
lda XDOS.FCBs+FCB.MARK+2,y
sbc tposhi
bcc L3FB9 if set, position forward. otherwise,
@ -660,7 +660,7 @@ L3FB9 ldy #$02 position is forward from current.
beq svmark branch always.
*--------------------------------------
dirpos1 lda (datptr),y get link address of previous or next
sta bloknml directory block.
sta ZP.BLKNUM directory block.
cmp #$01 test for null byte into carry
iny but first be sure there is a link.
lda (datptr),y get the rest of the link.
@ -674,11 +674,11 @@ dirpos1 lda (datptr),y get link address of previous or next
L3FD6 rts
L3FD8 sta bloknml+1
L3FD8 sta ZP.BLKNUM+1
*--------------------------------------
XDOS.ReadFCB.DBLK
lda #$01 read command
sta A4L
sta ZP.CMDNUM
ldx #datptr points at address of data buffer.
@ -686,17 +686,17 @@ XDOS.ReadFCB.DBLK
bcs L3FF2 error.
ldy fcbptr
lda bloknml
sta FCBs+FCB.DBLK,y save block # just read in fcb.
lda bloknml+1
sta FCBs+FCB.DBLK+1,y
lda ZP.BLKNUM
sta XDOS.FCBs+FCB.DBLK,y save block # just read in fcb.
lda ZP.BLKNUM+1
sta XDOS.FCBs+FCB.DBLK+1,y
* clc
L3FF2 rts
*--------------------------------------
*rfcbidx lda #$01 prepare to read index block : read command
* sta A4L
* sta ZP.CMDNUM
* ldx #zpt address of current index buffer.
@ -704,10 +704,10 @@ L3FF2 rts
* bcs L400C error
* ldy fcbptr
* lda bloknml
* sta FCBs+FCB.IBLK,y save block address of this index in fcb
* lda bloknml+1
* sta FCBs+FCB.IBLK+1,y
* lda ZP.BLKNUM
* sta XDOS.FCBs+FCB.IBLK,y save block address of this index in fcb
* lda ZP.BLKNUM+1
* sta XDOS.FCBs+FCB.IBLK+1,y
** clc
@ -728,33 +728,33 @@ rfcbfst lda #$01 read command.
ldx #zpt rd block into index portion of file buf
*--------------------------------------
dofileio sta A4L command
dofileio sta ZP.CMDNUM command
lda FCBs,y get disk block address from fcb.
sta bloknml block 0 not legal
lda XDOS.FCBs,y get disk block address from fcb.
sta ZP.BLKNUM block 0 not legal
bne .1
lda FCBs+1,y high address of disk block
lda XDOS.FCBs+1,y high address of disk block
bne .2
lda #$0C Block = $0000, allocation error.
jsr GP.SysDeath doesn't return...
jsr GP.SYSDEATH doesn't return...
.1 lda FCBs+1,y
.2 sta bloknml+1
.1 lda XDOS.FCBs+1,y
.2 sta ZP.BLKNUM+1
*--------------------------------------
fileio1 lda $00,x get memory address of buffer from
sta buf page zero pointed to by x register
sta ZP.BUFPTR page zero pointed to by x register
lda $01,x
sta buf+1 and pass address to device handler
sta ZP.BUFPTR+1 and pass address to device handler
jsr XDOS.FCBDevIDSelect
lda #$FF also, set to indicate reg call made to
sta ioaccess device handler.
lda DEVNUM transfer device # for dispatcher
sta unitnum to convert to unit #.
stz p8error clear global error code.
lda GP.DEVNUM transfer device # for dispatcher
sta ZP.UNITNUM to convert to unit #.
stz GP.ERROR clear global error code.
jmp XDOS.DevCall call the driver.
*--------------------------------------
wfcbdat ldx #datptr point at memory address with x and
@ -782,8 +782,8 @@ wfcbidx jsr upbmap update bitmap.
*--------------------------------------
XDOS.ResetFCBStatus
ldx fcbptr
and FCBs+FCB.F,x
sta FCBs+FCB.F,x
and XDOS.FCBs+FCB.F,x
sta XDOS.FCBs+FCB.F,x
L4096 rts
*--------------------------------------
@ -808,7 +808,7 @@ L40AD lda fcbflg if this byte <> 0 then free fcb found
L40B9 ldy #FCB
L40BD stz FCBs,x but clean it first.
L40BD stz XDOS.FCBs,x but clean it first.
inx
dey
bne L40BD
@ -818,7 +818,7 @@ L40BD stz FCBs,x but clean it first.
ldx fcbptr
L40CB lda d_dev,y move ownership info.
sta FCBs+FCB.DEVID,x note: this code depends upon the defined
sta XDOS.FCBs+FCB.DEVID,x note: this code depends upon the defined
inx order of both the fcb and directory entry buffer.
iny
cpy #6
@ -835,7 +835,7 @@ L40CB lda d_dev,y move ownership info.
and #$01 read enabled bit
L40EB sta FCBs+FCB.ACCESS,y
L40EB sta XDOS.FCBs+FCB.ACCESS,y
and #$02 check for write enabled request.
beq L40F7 branch for open as read-only
@ -850,33 +850,33 @@ L40F7 cpx #$04 is it a tree file type ?
L40FF ldx #$06 move address of 1st block of file, end
L4101 sta bloknml+1 of file and current usage count.
L4101 sta ZP.BLKNUM+1 of file and current usage count.
lda fcbptr
ora ofcbtbl,x this is done via a translation table
tay between directory info and fcb.
lda d_frst,x
sta FCBs,y
sta XDOS.FCBs,y
dex
bpl L4101 last loop stores hi address of 1st block
sta bloknml and this is the low one.
sta ZP.BLKNUM and this is the low one.
ldx fcbptr
lda cntent this was set up by 'tstopen'.
sta FCBs,x claim fcb for this file.
sta XDOS.FCBs,x claim fcb for this file.
jsr alcbuffr go allocate buffer in memory tables.
bcs L4147 if errors.
ldx fcbptr
jsr XDOS.GetFCBBufX rtn addr of bufs in data & index ptrs.
lda flevel mark level at which
sta FCBs+FCB.FLEVEL,x file was opened.
lda GP.FLEVEL mark level at which
sta XDOS.FCBs+FCB.FLEVEL,x file was opened.
lda FCBs+FCB.STYPE,x file must be positioned at beginning.
lda XDOS.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,x a valid position with preloaded data,
sta XDOS.FCBs+FCB.MARK+2,x a valid position with preloaded data,
ldy #$02 etc. set desired position to 0.
lda #$00
@ -891,8 +891,8 @@ 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
stz XDOS.FCBs,x necessary to release fcb also.
lda XDOS.FCBs+FCB.BUFID,x
beq L4156 if no bufnum, ok because never alloc'd.
jsr relbuffr go release buffer.
@ -904,13 +904,13 @@ L4156 pla error code.
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
L4163 ldx XDOS.VCBPtr index to vcb.
inc XDOS.VCBs+VCB.OFCNT,x add 1 to # of files currently open
ldx fcbptr index to fcb.
lda FCBs+FCB.ID,x return ref # to user.
lda XDOS.FCBs+FCB.ID,x return ref # to user.
ldy #$05
sta (A3L),y
sta (ZP.A3L),y
* clc open is successful
rts
*--------------------------------------
@ -926,7 +926,7 @@ L4188 tay index to next fcb.
inc cntent
L4191 lda FCBs,y is this fcb in use ?
L4191 lda XDOS.FCBs,y is this fcb in use ?
bne L41A3 yes.
txa if not, should we claim it ?
@ -942,7 +942,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 XDOS.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.
@ -951,7 +951,7 @@ L41A9 lda FCBs,y all bytes must match to say that it's
bne L41A9 loop to check all owner info.
inc totent file is already open, now see
lda FCBs+FCB.ACCESS,y if it's already opened for write. and #$02 if so report file busy (with carry set).
lda XDOS.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.
@ -969,10 +969,10 @@ L41C1 tya calc position of next fcb.
*--------------------------------------
XDOS.UpdateFCBIBlk
ldy fcbptr
lda bloknml
sta FCBs+FCB.IBLK,y save block address of this index in fcb
lda bloknml+1
sta FCBs+FCB.IBLK+1,y
lda ZP.BLKNUM
sta XDOS.FCBs+FCB.IBLK,y save block address of this index in fcb
lda ZP.BLKNUM+1
sta XDOS.FCBs+FCB.IBLK+1,y
rts
*--------------------------------------
MAN

View File

@ -12,11 +12,11 @@ XDOS.Read jsr mvdbufr xfer buffer address and request count
bcc L4205 branch if result mark < eof. adjust
ldy fcbptr request to read until just before eof.
lda FCBs+FCB.EOF,y result = (eof-1) - position
lda XDOS.FCBs+FCB.EOF,y result = (eof-1) - position
sbc tposll
sta cbytes
sta rwreql
lda FCBs+FCB.EOF+1,y
lda XDOS.FCBs+FCB.EOF+1,y
sbc tposlh
sta cbytes+1
sta rwreqh
@ -96,7 +96,7 @@ L427B bcs L4249
jsr XDOS.Tpos2Y get index to next block address
lda (zpt),y get low address
sta bloknml
sta ZP.BLKNUM
inc zpt+1
cmp (zpt),y are hi and low address the same?
bne L4299 no, it's a real block address.
@ -112,12 +112,12 @@ L4299 lda (zpt),y get high address
L429C dec zpt+1
bcs L4249 if no block to read.
sta bloknml+1
sta ZP.BLKNUM+1
lda ioaccess has 1st call gone to device yet ?
beq L4249 no, go thru normal route
lda datptr+1 reset hi buffer address for dev handler
sta buf+1
sta ZP.BUFPTR+1
jsr XDOS.DevCall
bcc L424E no errors, branch always.
@ -135,11 +135,11 @@ rwdone ldy #$06 return total # of bytes actually read
sec derived from cbytes-rwreq.
lda cbytes
sbc rwreql
sta (A3L),y
sta (ZP.A3L),y
iny
lda cbytes+1
sbc rwreqh
sta (A3L),y
sta (ZP.A3L),y
jmp rdposn leave with valid position in fcb.
*--------------------------------------
preprw ldy fcbptr adj pointer to user's buffer to make
@ -148,14 +148,16 @@ preprw ldy fcbptr adj pointer to user's buffer to make
sbc tposll
sta usrbuf
bcs L42E9 if no adjustment to hi address needed
dec usrbuf+1
L42E9 lda FCBs+FCB.NLMASK,y test for new line enabled.
L42E9 lda XDOS.FCBs+FCB.NLMASK,y test for new line enabled.
clc
beq L42F9 if new line not enabled.
sec carry indicates new line enabled
sta nlmask
lda FCBs+FCB.NLBYTE,y move newline character to more
lda XDOS.FCBs+FCB.NLBYTE,y move newline character to more
sta nlchar accesible spot.
L42F9 ldy tposll index to 1st data.
@ -278,9 +280,9 @@ XDOS.ReadDir jsr rdposn
ldy #$00 provide dummy back pointer for future
ldx fcbptr re-position. x = hi byte of last block
L43A6 lda FCBs+FCB.DBLK,x
L43A6 lda XDOS.FCBs+FCB.DBLK,x
sta (datptr),y
stz FCBs+FCB.DBLK,x mark current block as impossible
stz XDOS.FCBs+FCB.DBLK,x mark current block as impossible
inx
iny inc indexes to do both hi and low bytes
cpy #$02
@ -292,27 +294,27 @@ L43B7 rts
L43B8 jmp errfix1 report how much xfer'd before error.
*--------------------------------------
mvcbytes ldy #$04 move request count to a more accessable location
lda (A3L),y
lda (ZP.A3L),y
sta cbytes
sta rwreql
iny
lda (A3L),y
lda (ZP.A3L),y
sta cbytes+1
sta rwreqh
ldy fcbptr return y = val(fcbptr),
lda FCBs+FCB.ACCESS,y a = attributes
lda XDOS.FCBs+FCB.ACCESS,y a = attributes
clc and carry clear...
rts
*--------------------------------------
mvdbufr ldy #$02 move the pointer to user's buffer
lda (A3L),y to the block file manager
lda (ZP.A3L),y to the block file manager
sta usrbuf z-page area
iny
lda (A3L),y
lda (ZP.A3L),y
sta usrbuf+1
gfcbstyp ldy fcbptr return storage type
lda FCBs+FCB.STYPE,y
lda XDOS.FCBs+FCB.STYPE,y
rts
*--------------------------------------
* this subroutine adds the requested byte count to mark and returns sum
@ -325,7 +327,7 @@ gfcbstyp ldy fcbptr return storage type
calcmrk ldx #$00
ldy fcbptr
clc
L43EE lda FCBs+FCB.MARK,y
L43EE lda XDOS.FCBs+FCB.MARK,y
sta tposll,x
sta oldmark,x
adc cbytes,x
@ -339,7 +341,7 @@ L43EE lda FCBs+FCB.MARK,y
bne L43EE always.
eoftest lda scrtch,x new mark in scrtch.
cmp FCBs+FCB.EOF,y is new position > eof ?
cmp XDOS.FCBs+FCB.EOF,y is new position > eof ?
bcc L4414 no, proceed.
bne L4414 yes, adjust 'cbytes' request
@ -352,9 +354,9 @@ L4414 rts
werreof jsr plus2fcb reset eof to pre-error position.
L4418 lda oldeof,x place oldeof back into fcb
sta FCBs+FCB.EOF,y
sta XDOS.FCBs+FCB.EOF,y
lda oldmark,x also reset mark to last best
sta FCBs+FCB.MARK,y write position
sta XDOS.FCBs+FCB.MARK,y write position
sta scrtch,x and copy mark to scrtch for test of
dey eof less than mark.
dex
@ -367,12 +369,12 @@ L4418 lda oldeof,x place oldeof back into fcb
wadjeof jsr plus2fcb get y=fcbptr+2, x=2, a=y.
L4434 lda FCBs+FCB.EOF,y copy eof to old eof
L4434 lda XDOS.FCBs+FCB.EOF,y copy eof to old eof
sta oldeof,x
bcc L4442 and if carry set...
lda scrtch,x then copy scrtch to fcb's eof.
sta FCBs+FCB.EOF,y
sta XDOS.FCBs+FCB.EOF,y
L4442 dey
dex copy all 3 bytes
@ -468,9 +470,9 @@ L44B8 jsr alcwblk go allocate for data block.
sta (zpt),y store low address.
ldy fcbptr update fcb to indicate that this block
sta FCBs+FCB.DBLK,y is allocated.
sta XDOS.FCBs+FCB.DBLK,y is allocated.
txa get high address again.
sta FCBs+FCB.DBLK+1,y
sta XDOS.FCBs+FCB.DBLK+1,y
L44E9 jsr preprw
jsr wrtpart
@ -583,9 +585,9 @@ L457A jsr alcwblk get another block address for the sap
sta (zpt),y save hi address
dec zpt+1
ldy fcbptr make newly allocated block the current
sta FCBs+FCB.IBLK+1,y index block.
sta XDOS.FCBs+FCB.IBLK+1,y index block.
txa
sta FCBs+FCB.IBLK,y
sta XDOS.FCBs+FCB.IBLK,y
jsr wfcbfst save new top of tree
bcs L45B1
*--------------------------------------
@ -617,18 +619,18 @@ swapdown jsr alcwblk make current seed into a sapling, allocate a block befo
bcs .9 return errors.
ldy fcbptr get previous first block
lda FCBs+FCB.1stBLK,y address into index block.
lda XDOS.FCBs+FCB.1stBLK,y address into index block.
pha save temporarily while swapping in new
lda scrtch top index. get new block address (low)
tax
sta FCBs+FCB.1stBLK,y
lda FCBs+FCB.1stBLK+1,y
sta XDOS.FCBs+FCB.1stBLK,y
lda XDOS.FCBs+FCB.1stBLK+1,y
pha
lda scrtch+1 and high address too
sta FCBs+FCB.1stBLK+1,y
sta FCBs+FCB.IBLK+1,y make new top also the current index in
sta XDOS.FCBs+FCB.1stBLK+1,y
sta XDOS.FCBs+FCB.IBLK+1,y make new top also the current index in
txa memory. get low address again.
sta FCBs+FCB.IBLK,y
sta XDOS.FCBs+FCB.IBLK,y
inc zpt+1 make previous the 1st entry in sub index
pla
sta (zpt)
@ -641,7 +643,7 @@ swapdown jsr alcwblk make current seed into a sapling, allocate a block befo
lda #FCB.F.STMOD
jsr XDOS.SetFCBStatus
inc FCBs+FCB.STYPE,x
inc XDOS.FCBs+FCB.STYPE,x
* clc no error
.9 rts
@ -652,10 +654,10 @@ alcwblk jsr alc1blk
lda #FCB.F.UMOD
jsr XDOS.SetFCBStatus
inc FCBs+FCB.UBLK,x
inc XDOS.FCBs+FCB.UBLK,x
bne .9
inc FCBs+FCB.UBLK+1,x
inc XDOS.FCBs+FCB.UBLK+1,x
.9 rts
*--------------------------------------
@ -666,15 +668,15 @@ tstwprot jsr XDOS.GetFCBStatus check for 'never been modified' condition
jsr XDOS.FCBDevIDSelect
twrprot1 sta unitnum make the device status call
twrprot1 sta ZP.UNITNUM make the device status call
lda bloknml+1
lda ZP.BLKNUM+1
pha
lda bloknml save the current block values
lda ZP.BLKNUM save the current block values
pha
stz A4L
stz bloknml zero the block #
stz bloknml+1
stz ZP.CMDNUM
stz ZP.BLKNUM zero the block #
stz ZP.BLKNUM+1
jsr XDOS.DevCall
bcs .1 branch if write protect error
@ -682,9 +684,9 @@ twrprot1 sta unitnum make the device status call
lda #$00 otherwise, assume no errors.
.1 plx
stx bloknml restore the block #
stx ZP.BLKNUM restore the block #
plx
stx bloknml+1
stx ZP.BLKNUM+1
tstwprot.RTS rts
*--------------------------------------

View File

@ -2,7 +2,7 @@ NEW
AUTO 3,1
*--------------------------------------
XDOS.Close ldy #$01 close all ?
lda (A3L),y
lda (ZP.A3L),y
bne XDOS.CloseOne no, just one of them.
sta cferr clear global close error.
@ -10,11 +10,11 @@ XDOS.Close ldy #$01 close all ?
L4654 sta fcbptr save current low byte of pointer.
tax get the level at which the file
lda FCBs+FCB.FLEVEL,x was opened.
cmp flevel if file's level is < global level
lda XDOS.FCBs+FCB.FLEVEL,x was opened.
cmp GP.FLEVEL if file's level is < global level
bcc L4675 then don't close.
lda FCBs+FCB.ID,x is this reference file open ?
lda XDOS.FCBs+FCB.ID,x is this reference file open ?
beq L4675 no, try next.
jsr flush2 clean it out...
@ -23,7 +23,7 @@ L4654 sta fcbptr save current low byte of pointer.
jsr close2 update fcb & vcb
ldy #$01
lda (A3L),y
lda (ZP.A3L),y
beq L4675 no error if close all.
bcs L46B6 close error.
@ -51,17 +51,17 @@ XDOS.CloseOne jsr flush1 flush file 1st (including updating bitmap)
rts
close2 ldx fcbptr
lda FCBs+FCB.BUFID,x release file buffer
lda XDOS.FCBs+FCB.BUFID,x release file buffer
jsr relbuffr
bcs L46B6
jsr XDOS.FCBDevIDSelect
stz FCBs,x free fcb too
stz XDOS.FCBs,x free fcb too
jsr XDOS.FindVCBForDevNum get vcb pointer.
dec VCBs+VCB.OFCNT,x indicate one less file open.
dec XDOS.VCBs+VCB.OFCNT,x indicate one less file open.
L46B4 clc
rts
@ -69,7 +69,7 @@ L46B4 clc
L46B6 bcs L46E6 don't report close all error now.
*--------------------------------------
XDOS.Flush ldy #$01 flush all ?
lda (A3L),y
lda (ZP.A3L),y
bne flush1 no, just one of them.
sta cferr clear global flush error.
@ -77,7 +77,7 @@ XDOS.Flush ldy #$01 flush all ?
L46C3 sta fcbptr save current low byte of pointer.
tax index to ref #.
lda FCBs,x is this reference file open ?
lda XDOS.FCBs,x is this reference file open ?
beq L46D1 no, try next.
jsr flush2 clean it out...
@ -104,11 +104,11 @@ flush1 stz cferr for normal refnum flush, clear global error.
jsr XDOS.GetFCB setup pointer to fcb user references.
bcs L46E6 return any errors.
L46F1 lda FCBs+FCB.ACCESS,x test to see if file is modified.
L46F1 lda XDOS.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,x has eof been modified ?
lda XDOS.FCBs+FCB.DIRTY,x has eof been modified ?
bmi L4704 if yes.
jsr XDOS.GetFCBStatus has data been modified ?
@ -133,7 +133,7 @@ L471C ldy #0
jsr XDOS.FCBDevIDSelect X = FCBPtr
L4723 lda FCBs+FCB.DEVID,x note: this code depends on the defined
L4723 lda XDOS.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
@ -169,26 +169,26 @@ L4755 jsr entcalc set up pointer to entry.
jsr moventry move entry to temp entry buffer in
ldx fcbptr 'work space'. update 'blocks used' count
lda FCBs+FCB.UBLK,x
lda XDOS.FCBs+FCB.UBLK,x
sta d_usage
lda FCBs+FCB.UBLK+1,x
lda XDOS.FCBs+FCB.UBLK+1,x
sta d_usage+1
ldy #0 and move in end of file mark whether
L476C lda FCBs+FCB.EOF,x needed or not.
L476C lda XDOS.FCBs+FCB.EOF,x needed or not.
sta d_eof,y
iny
cpy #$03 move all 3 bytes
beq L4780
lda FCBs+FCB.1stBLK,x also move in the address of the file's
lda XDOS.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 ldx fcbptr
lda FCBs+FCB.STYPE,x the last thing to update is storage
lda XDOS.FCBs+FCB.STYPE,x the last thing to update is storage
asl type (y=fcbptr+2). shift into high
asl nibble.
asl
@ -202,7 +202,7 @@ L4780 ldx fcbptr
bcs glberr error.
ldx fcbptr mark
stz FCBs+FCB.DIRTY,x fcb/directory as undirty.
stz XDOS.FCBs+FCB.DIRTY,x fcb/directory as undirty.
lda d_dev see if bitmap should be written.
cmp bmadev is it in same as current file ?
@ -218,7 +218,7 @@ L47B2 clc
*--------------------------------------
glberr ldy #$01
pha
lda (A3L),y
lda (ZP.A3L),y
bne L47C1 not an 'all' so report now
clc
@ -232,8 +232,8 @@ L47C1 pla
*--------------------------------------
XDOS.FCBDevIDSelect
ldx fcbptr
lda FCBs+FCB.DEVID,x
sta DEVNUM
lda XDOS.FCBs+FCB.DEVID,x
sta GP.DEVNUM
rts
*--------------------------------------
XDOS.SetFCBSType
@ -242,25 +242,25 @@ XDOS.SetFCBSType
lsr
lsr
ldy fcbptr and save it in fcb.
sta FCBs+FCB.STYPE,y
sta XDOS.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/
lda XDOS.FCBs+FCB.F,y and both levels of indexes/
and #$F8
sta FCBs+FCB.F,y indicates that either they exist now
sta XDOS.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.
lda XDOS.FCBs+FCB.F,x return status byte.
rts
*--------------------------------------
XDOS.SetFCBStatus
ldx fcbptr
ora FCBs+FCB.F,x
sta FCBs+FCB.F,x
ora XDOS.FCBs+FCB.F,x
sta XDOS.FCBs+FCB.F,x
rts
*--------------------------------------
L47CA lda #MLI.E.LOCKED access error
@ -276,7 +276,7 @@ XDOS.SetEOF jsr gfcbstyp can only move end of tree, sapling or seed.
asl
asl
sta stortyp may be used later.
lda FCBs+FCB.ACCESS,y
lda XDOS.FCBs+FCB.ACCESS,y
and #$02 is write enabled to set new eof ?
beq L47CA no, access error.
@ -288,7 +288,7 @@ XDOS.SetEOF jsr gfcbstyp can only move end of tree, sapling or seed.
iny upon contraction.
ldx #$02 all 3 bytes of the eof
L47EF lda FCBs+FCB.EOF,y
L47EF lda XDOS.FCBs+FCB.EOF,y
sta oldeof,x
dey
dex
@ -297,7 +297,7 @@ L47EF lda FCBs+FCB.EOF,y
ldy #$04
ldx #$02
L47FD lda (A3L),y position mark to new eof
L47FD lda (ZP.A3L),y position mark to new eof
sta tposll,x
dey
dex
@ -318,8 +318,8 @@ eofset ldy #$04
inx
inx
L481C lda (A3L),y
sta FCBs+FCB.EOF,x
L481C lda (ZP.A3L),y
sta XDOS.FCBs+FCB.EOF,x
dex
dey
cpy #$02 all 3 bytes moved ?
@ -341,7 +341,7 @@ purge jsr flush1 make sure file is current
iny
ldx #$02
L4840 lda FCBs+FCB.MARK,y
L4840 lda XDOS.FCBs+FCB.MARK,y
cmp tposll,x compare until not equal or carry clear.
bcc L485F branch if eof > mark.
@ -355,7 +355,7 @@ L484E ldy fcbptr
ldx #$00
L4853 lda tposll,x fake position, correct position will
sta FCBs+FCB.MARK,y be made below...
sta XDOS.FCBs+FCB.MARK,y be made below...
iny
inx
cpx #$03 move all 3 bytes
@ -393,9 +393,9 @@ L485F jsr tkfrecnt force free block count before releasing
L489F sta dseed+1
L48A2 ldy fcbptr also must pass file's 1st block address.
lda FCBs+FCB.1stBLK,y
lda XDOS.FCBs+FCB.1stBLK,y
sta firstbl
lda FCBs+FCB.1stBLK+1,y
lda XDOS.FCBs+FCB.1stBLK+1,y
sta firstbh
stz deblock lastly, initialize # of blocks to
stz deblock+1 be free'd.
@ -408,10 +408,10 @@ L48A2 ldy fcbptr also must pass file's 1st block address.
ldx #$00
L48C2 lda firstbl,x
sta FCBs+FCB.1stBLK,y move in possible new first file block
lda FCBs+FCB.UBLK,y address. adjust usage count also
sta XDOS.FCBs+FCB.1stBLK,y move in possible new first file block
lda XDOS.FCBs+FCB.UBLK,y address. adjust usage count also
sbc deblock,x
sta FCBs+FCB.UBLK,y
sta XDOS.FCBs+FCB.UBLK,y
iny
inx
txa
@ -429,10 +429,10 @@ L48C2 lda firstbl,x
ldx #$02
L48F2 lda FCBs+FCB.MARK,y tell 'rdposn' to go to correct
L48F2 lda XDOS.FCBs+FCB.MARK,y tell 'rdposn' to go to correct
sta tposll,x
eor #$80 position from incorrect place.
sta FCBs+FCB.MARK,y
sta XDOS.FCBs+FCB.MARK,y
dey
dex
bpl L48F2
@ -470,8 +470,8 @@ XDOS.GetEOF ldx fcbptr index to end of file mark
ldy #$02 and index to user's call parameters
L4924 lda FCBs+FCB.EOF,x
sta (A3L),y
L4924 lda XDOS.FCBs+FCB.EOF,x
sta (ZP.A3L),y
inx
iny
cpy #$05
@ -482,13 +482,13 @@ L4924 lda FCBs+FCB.EOF,x
*--------------------------------------
XDOS.NewLine ldy #$02 adjust newline status for open file.
lda (A3L),y on or off ?
lda (ZP.A3L),y on or off ?
ldx fcbptr it will be 0 if off.
sta FCBs+FCB.NLMASK,x set new line mask
sta XDOS.FCBs+FCB.NLMASK,x set new line mask
iny
lda (A3L),y and move in 'new-line' byte
sta FCBs+FCB.NLBYTE,x
lda (ZP.A3L),y and move in 'new-line' byte
sta XDOS.FCBs+FCB.NLBYTE,x
clc no error possible
rts
@ -513,7 +513,7 @@ XDOS.GetFileInfo
and #$7F strip bit used by setinfo
tax
lda d_stor,x move directory info to call spec. table
sta (A3L),y
sta (ZP.A3L),y
dey
cpy #$03
bcs .2 if all info bytes moved, retn carry clr
@ -526,7 +526,7 @@ XDOS.SetFileInfo
jsr XDOS.FindFile get the file to work on.
bcs L49CF if error.
lda bubit see if backup bit can be cleared
lda GP.BUBIT see if backup bit can be cleared
eor #$20
and d_attr
and #$20
@ -537,7 +537,7 @@ XDOS.SetFileInfo
L49B9 ldx inftabl-3,y get index to corresponding 'd.' table.
bmi L49C3 branch if parameter can't be set.
lda (A3L),y
lda (ZP.A3L),y
sta d_stor,x
L49C3 dey has user's request been satisfied ?
@ -552,7 +552,7 @@ L49C3 dey has user's request been satisfied ?
L49CF rts
L49D0 ldy #$0B
lda (A3L),y was clock null input ?
lda (ZP.A3L),y was clock null input ?
bne XDOS.SetFileInfoEx.8
jmp drevise update with clock also...
@ -564,7 +564,7 @@ XDOS.SetFileInfoEx
ldx #S.FIEX.BLKPTR+2-1
ldy #S.FIEX.BLKPTR+2-1+3
.2 lda (A3L),y
.2 lda (ZP.A3L),y
sta d_stor,x
dey
dex
@ -583,7 +583,7 @@ XDOS.GetFileInfoEx
ldy #S.FIEX.BLKPTR+2-1+3
.2 lda d_stor,x
sta (A3L),y
sta (ZP.A3L),y
dey
dex
bpl .2
@ -592,7 +592,7 @@ XDOS.GetFileInfoEx
ldy #S.FIEX.ACL+7+3
.3 lda h_acl,x
sta (A3L),y
sta (ZP.A3L),y
dey
dex
bpl .3
@ -613,19 +613,19 @@ XDOS.GetFileInfoVol
stz reql force a count of free blocks.
stz reqh
ldx vcbptr
ldx XDOS.VCBPtr
jsr tkfrecnt get a fresh count of free blocks on
ldx vcbptr this volume.
lda VCBs+VCB.FBLK+1,x return total blocks and total in use.
ldx XDOS.VCBPtr this volume.
lda XDOS.VCBs+VCB.FBLK+1,x return total blocks and total in use.
sta reqh 1st transfer 'free' blocks to zpage
lda VCBs+VCB.FBLK,x for later subtraction to determine
lda XDOS.VCBs+VCB.FBLK,x for later subtraction to determine
sta reql the 'used' count.
lda VCBs+VCB.TBLK+1,x transfer to 'd.' table as aux id
lda XDOS.VCBs+VCB.TBLK+1,x transfer to 'd.' table as aux id
sta d_auxid+1 (total block count is considered aux id
pha for the volume)
lda VCBs+VCB.TBLK,x
lda XDOS.VCBs+VCB.TBLK,x
sta d_auxid
sec subtract and report the number of
sbc reql blocks 'in use'
@ -647,13 +647,13 @@ XDOS.ACL jsr XDOS.FindDirOrVol
ldx #7
ldy #S.FIEX.ACL+3
lda (A3L),y
lda (ZP.A3L),y
beq .2
ldy #S.FIEX.ACL+7+3
.1 lda (A3L),y
sta gbuf+$14,x
.1 lda (ZP.A3L),y
sta XDOS.GBuf+$14,x
dey
dex
bpl .1
@ -666,8 +666,8 @@ XDOS.ACL jsr XDOS.FindDirOrVol
.2 ldy #S.FIEX.ACL+7+3
.3 lda gbuf+$14,x
sta (A3L),y
.3 lda XDOS.GBuf+$14,x
sta (ZP.A3L),y
dey
dex
bpl .3
@ -684,13 +684,13 @@ XDOS.Rename jsr XDOS.CheckPath look for source (original) file.
XDOS.RenameVol jsr XDOS.GetRenPath syntax new name.
bcs L49FD rename error.
ldy pathbuf find out if only rootname for new name
ldy XDOS.PathBuf find out if only rootname for new name
iny
lda pathbuf,y must be $FF if volume name only.
lda XDOS.PathBuf,y must be $FF if volume name only.
bne L4A72 if not single name
ldx vcbptr check for open files before changing.
lda VCBs+VCB.OFCNT,x
ldx XDOS.VCBPtr check for open files before changing.
lda XDOS.VCBs+VCB.OFCNT,x
beq L49FF if volume not busy.
lda #MLI.E.OPEN file busy error.
@ -698,18 +698,18 @@ L49FD sec
rts
L49FF ldy #0 get newname's length
lda pathbuf,y
lda XDOS.PathBuf,y
ora #$F0 (root file storage type)
jsr XDOS.UpdateHdr update root directory.
bcs .9 rename error.
ldy #$00
ldx vcbptr update vcb also.
ldx XDOS.VCBPtr update vcb also.
.1 lda pathbuf,y move new name to vcb.
.1 lda XDOS.PathBuf,y move new name to vcb.
beq .8
sta VCBs,x
sta XDOS.VCBs,x
iny next character
inx
bra .1
@ -720,8 +720,8 @@ L49FF ldy #0 get newname's length
XDOS.RenameFileDir
jsr getnamptr set y = 1st char of path, x = 0.
L4A21 lda pathbuf,y move original name to gbuf
sta gbuf,x for later comparison to new name.
L4A21 lda XDOS.PathBuf,y move original name to XDOS.GBuf
sta XDOS.GBuf,x for later comparison to new name.
bmi L4A2D if last character has been moved
iny otherwise, get the next one.
@ -733,9 +733,9 @@ L4A2D jsr XDOS.GetRenPath get new name syntaxed.
jsr getnamptr set y = path, x = 0.
lda pathbuf,y now compare new name with old name
lda XDOS.PathBuf,y now compare new name with old name
L4A38 cmp gbuf,x to make sure they are in the same dir.
L4A38 cmp XDOS.GBuf,x to make sure they are in the same dir.
php save result of comparison.
and #$F0 was last char really a count ?
bne L4A46 if not.
@ -748,26 +748,26 @@ L4A46 plp result of last comparison ?
inx bump pointers.
iny
lda pathbuf,y was it the last character ?
lda XDOS.PathBuf,y was it the last character ?
bne L4A38 if not.
clc no operation, names were the same.
rts
L4A52 ldy rnptr index to last name in the chain.
lda pathbuf,y get last name length.
lda XDOS.PathBuf,y get last name length.
sec
adc rnptr
tay
lda pathbuf,y this byte should be $00 !
lda XDOS.PathBuf,y this byte should be $00 !
bne L4A72 if not, bad path error.
ldx namptr index to last of original name
lda gbuf,x
lda XDOS.GBuf,x
sec
adc namptr
tax
lda gbuf,x this byte should also be $00.
lda XDOS.GBuf,x this byte should also be $00.
beq L4A76 if so, continue processing.
L4A72 lda #MLI.E.INVPATH bad pathname error.
@ -814,12 +814,12 @@ L4AAE jsr XDOS.GetRenPath since both names go into the directory,
bcs L4A74 syntax the new name to get the local
ldy rnptr name address. y = index to local name
ldx pathbuf,y length. adj y to last char of new name.
ldx XDOS.PathBuf,y length. adj y to last char of new name.
tya
adc pathbuf,y
adc XDOS.PathBuf,y
tay
L4ABE lda pathbuf,y move local name to dir entry workspace.
L4ABE lda XDOS.PathBuf,y move local name to dir entry workspace.
sta d_stor,x
dey
dex
@ -828,7 +828,7 @@ L4ABE lda pathbuf,y move local name to dir entry workspace.
lda d_stor preserve file storage type.
and #$F0 strip off old name length.
tax
ora pathbuf,y add in new name's length.
ora XDOS.PathBuf,y add in new name's length.
sta d_stor
cpx #$D0 that file must be changed also.
bne L4AF0 branch if not directory type.
@ -837,7 +837,7 @@ L4ABE lda pathbuf,y move local name to dir entry workspace.
bcs L4A74 errors.
ldy rnptr change the header's name to match the
lda pathbuf,y owner's new name. get local name length.
lda XDOS.PathBuf,y owner's new name. get local name length.
ora #$E0 assume it's a header.
jsr XDOS.UpdateHdr
bcs L4A74
@ -865,9 +865,9 @@ L4B39 lda d_attr make sure ok to destroy file.
bmi L4B45
lda #MLI.E.LOCKED access error
jsr GP.P8errv
jsr GP.SYSERR
L4B45 lda DEVNUM last device used.
L4B45 lda GP.DEVNUM last device used.
jsr twrprot1 test for write protected hardware
bcs L4B66 before going thru deallocation.
@ -928,15 +928,15 @@ L4BA1 dec h_fcnt mark header with one less file.
L4BAF cmp #$01 adjust carry accordingly
rts
dvcbrev ldx vcbptr update block free count in vcb. point to vcb of correct device.
dvcbrev ldx XDOS.VCBPtr update block free count in vcb. point to vcb of correct device.
lda deblock get # of blocks recently freed.
adc VCBs+VCB.FBLK,x
sta VCBs+VCB.FBLK,x update current free block count.
adc XDOS.VCBs+VCB.FBLK,x
sta XDOS.VCBs+VCB.FBLK,x update current free block count.
lda deblock+1
adc VCBs+VCB.FBLK+1,x
sta VCBs+VCB.FBLK+1,x
adc XDOS.VCBs+VCB.FBLK+1,x
sta XDOS.VCBs+VCB.FBLK+1,x
stz VCBs+VCB.BMAPIDX,x force re-scan from 1st bitmap
stz XDOS.VCBs+VCB.BMAPIDX,x force re-scan from 1st bitmap
* lda #0 ?????
@ -950,14 +950,14 @@ L4BCF cmp #$D0 is this a directory file ?
jsr fndbmap make sure a buffer available for bitmap
bcs L4C1A if error.
jsr XDOS.ReadGBuf_d_frst read 1st block of directory into gbuf
jsr XDOS.ReadGBuf_d_frst read 1st block of directory into XDOS.GBuf
bcs L4C1A
lda gbuf+37 do any files exist in this directory ?
ora gbuf+38
lda XDOS.GBuf+37 do any files exist in this directory ?
ora XDOS.GBuf+38
bne L4C1Abis if so, access error.
L4BF6 sta gbuf+4 make it an invalid subdirectory
L4BF6 sta XDOS.GBuf+4 make it an invalid subdirectory
.DO LOWERCASE=1
jsr XDOS.WriteGBufDir
.ELSE
@ -965,17 +965,17 @@ L4BF6 sta gbuf+4 make it an invalid subdirectory
.FIN
bcs L4C1A
L4BFE lda gbuf+2 get forward link.
L4BFE lda XDOS.GBuf+2 get forward link.
cmp #$01 test for null block into carry.
ldx gbuf+3 get the rest of the block address.
ldx XDOS.GBuf+3 get the rest of the block address.
bne L4C0A branch if not null.
bcc L4BCD was the low part null as well ?
L4C0A jsr XDOS.DeallocAX free this block.
bcs L4C1A
lda gbuf+2
ldx gbuf+3
lda XDOS.GBuf+2
ldx XDOS.GBuf+3
jsr XDOS.ReadGBufAX read next DIR block (no need to unpack)
bcc L4BFE loop until all freed
@ -984,7 +984,7 @@ L4C1A rts
L4C1Abis lda #MLI.E.LOCKED access error.
.HS 2C BIT ABS
L4C1B lda #MLI.E.INCFF file incompatible
jsr GP.P8errv
jsr GP.SYSERR
fcbused pha mark fcb as dirty so the directory will be flushed on 'flush'.
phy save regs.
@ -992,7 +992,7 @@ fcbused pha mark fcb as dirty so the directory will be flushed on 'flush
ldy fcbptr
lda #$80 mark fcb as dirty.
sta FCBs+FCB.DIRTY,y save it back
sta XDOS.FCBs+FCB.DIRTY,y save it back
ply and restore regs.
pla
@ -1000,10 +1000,10 @@ fcbused pha mark fcb as dirty so the directory will be flushed on 'flush
*--------------------------------------
XDOS.UpdateHdr ldx #$00
.1 sta gbuf+4,x
.1 sta XDOS.GBuf+4,x
inx
iny
lda pathbuf,y
lda XDOS.PathBuf,y
bne .1
.DO LOWERCASE=1
@ -1016,8 +1016,10 @@ getnamptr ldy #$00 return pointer to 1st name of path.
bit prfxflg is this a prefixed name ?
bmi .1 branch if not.
ldy newpfxptr
ldy GP.NEWPFXPTR
.1 ldx #$00
rts
*--------------------------------------
MAN

View File

@ -2,7 +2,7 @@ NEW
AUTO 3,1
*--------------------------------------
* 'detree' deallocates blocks from tree files. it is assumed that the device has
* been pre-selected and the 'gbuf' may be used.
* been pre-selected and the 'XDOS.GBuf' may be used.
*
* on entry:
* stortype = storage type in upper nibble, lower nibble is undisturbed.
@ -32,7 +32,7 @@ detree lda stortyp which kind of tree ?
bcc L4C59 branch if it is.
lda #$0C block allocation error.
jsr GP.SysDeath P8 system death vector
jsr GP.SYSDEATH P8 system death vector
* seedling file type - make sure first desirable block is the only
* block available in a seedling file.
@ -54,7 +54,7 @@ L4C51 lda dtree can't have any blocks in this range
L4C59 lda #$80
sta topdest for tree top start at end, work backwards.
L4C5E jsr drdfrst read specified first block into gbuf.
L4C5E jsr drdfrst read specified first block into XDOS.GBuf.
bcs L4CC2 return errors.
ldy topdest get current pointer to top indexes.
@ -63,12 +63,12 @@ L4C5E jsr drdfrst read specified first block into gbuf.
ldx #$07 buffer up to 8 sapling index block
L4C6D lda gbuf,y addresses. fetch low block address
L4C6D lda XDOS.GBuf,y addresses. fetch low block address
sta dealbufl,x and save it.
ora gbuf+$100,y is it a real block that is allocated?
ora XDOS.GBuf+$100,y is it a real block that is allocated?
beq L4C81 branch if phantom block.
lda gbuf+$100,y fetch high block address
lda XDOS.GBuf+$100,y fetch high block address
sta dealbufh,x and save it.
dex decrement and test for dealc buf filled.
bmi L4C93 branch if 8 addresses fetched.
@ -91,13 +91,13 @@ L4C93 dey decrement to prepare for next time.
L4C99 stx dtmpx save index to dealc buf.
lda dealbufl,x
sta bloknml
sta ZP.BLKNUM
ora dealbufh,x finished ?
beq L4C5E branch if done with this level.
lda dealbufh,x complete address with high byte,
sta bloknml+1
jsr XDOS.ReadGBuf read sapling level into gbuf.
sta ZP.BLKNUM+1
jsr XDOS.ReadGBuf read sapling level into XDOS.GBuf.
bcs L4CC2 return errors.
jsr dealblk go free all data indexes in this block
@ -116,7 +116,7 @@ L4CC2 rts sapling block numbers.
L4CC3 ldy dtree deallocate all sapling blocks greater
iny than specified block.
jsr dalblk1 (master index in gbuf)
jsr dalblk1 (master index in XDOS.GBuf)
bcs L4CC2 if errors.
jsr XDOS.WriteGBuf write updated master index back to disk.
@ -125,14 +125,14 @@ L4CC3 ldy dtree deallocate all sapling blocks greater
ldy dtree figure out if tree can become sapling.
beq L4CEB branch if it can.
lda gbuf,y otherwise, continue with partial, deallocation of last sapling index.
ora gbuf+$100,y is there such a sapling index block ?
lda XDOS.GBuf,y otherwise, continue with partial, deallocation of last sapling index.
ora XDOS.GBuf+$100,y is there such a sapling index block ?
beq L4CC2 all done if not.
lda gbuf,y
ldx gbuf+$100,y read in sapling level to be modified.
lda XDOS.GBuf,y
ldx XDOS.GBuf+$100,y read in sapling level to be modified.
jsr XDOS.ReadGBufAX read highest sapling index into gbuf.
jsr XDOS.ReadGBufAX read highest sapling index into XDOS.GBuf.
bcc L4CF5
rts
@ -141,7 +141,7 @@ L4CEB jsr shrink shrink tree to sapling
bcs L4CC2
sapdel0 jsr drdfrst read specified sapling level index
bcs L4CC2 into gbuf. branch if error.
bcs L4CC2 into XDOS.GBuf. branch if error.
L4CF5 ldy dsap pointer to last of desirable indexes.
iny inc to 1st undesirable.
@ -156,14 +156,14 @@ L4CF5 ldy dsap pointer to last of desirable indexes.
L4D05 ldy dsap prepare to clean up last data block.
beq L4D1F branch if possibility of making a seed.
L4D0A lda gbuf,y fetch low order data block address.
ora gbuf+$100,y is it a real block ?
L4D0A lda XDOS.GBuf,y fetch low order data block address.
ora XDOS.GBuf+$100,y is it a real block ?
beq L4CC2 if not, then done.
lda gbuf,y
ldx gbuf+$100,y
lda XDOS.GBuf,y
ldx XDOS.GBuf+$100,y
jsr XDOS.ReadGBufAX go read data block into gbuf.
jsr XDOS.ReadGBufAX go read data block into XDOS.GBuf.
bcc L4D2E branch if good read
L4D1E rts or return error.
@ -187,7 +187,7 @@ L4D2E ldy dseed+1 check high byte for no deletion.
L4D39 lda #$00
L4D3B sta gbuf+$100,y zero out unwanted data
L4D3B sta XDOS.GBuf+$100,y zero out unwanted data
iny
bne L4D3B
@ -196,7 +196,7 @@ L4D3B sta gbuf+$100,y zero out unwanted data
ldy dseed
L4D49 sta gbuf,y
L4D49 sta XDOS.GBuf,y
iny
bne L4D49
@ -204,27 +204,27 @@ L4D4F jmp XDOS.WriteGBuf update data block to disk.
L4D52 rts return error status.
drdfrst lda firstbl read specified 1st block into gbuf
drdfrst lda firstbl read specified 1st block into XDOS.GBuf
ldx firstbh
jmp XDOS.ReadGBufAX go read it
*--------------------------------------
* beware that dealloc may bring in a new bitmap block and may destroy
* locations 46 and 47 which are used to point to the current index block.
*--------------------------------------
shrink ldx firstbh first deallocate top index block
phx
lda firstbl
pha save block address of this index block.
jsr XDOS.DeallocAX free it from the bitmap
pla
sta bloknml set master of sapling
sta ZP.BLKNUM set master of sapling
pla index block address.
sta bloknml+1
sta ZP.BLKNUM+1
bcs L4D1E report errors.
lda gbuf get # of new 1st block from old index.
lda XDOS.GBuf get # of new 1st block from old index.
sta firstbl
lda gbuf+$100
lda XDOS.GBuf+$100
sta firstbh
ldy #$00
jsr swapme flip that one entry in old top index.
@ -235,15 +235,15 @@ shrink ldx firstbh first deallocate top index block
jmp XDOS.WriteGBuf write the (deallocated) old top index.
dealblk ldy #$00 start at beginning.
dalblk1 lda bloknml save disk address of gbuf's data.
dalblk1 lda ZP.BLKNUM save disk address of XDOS.GBuf's data.
pha
lda bloknml+1
lda ZP.BLKNUM+1
pha
L4D96 sty saptr save current index.
lda gbuf,y get low address of block to deallocate.
lda XDOS.GBuf,y get low address of block to deallocate.
cmp #$01 test for null block into carry.
ldx gbuf+$100,y get remainder of block address.
ldx XDOS.GBuf+$100,y get remainder of block address.
bne L4DA5 branch if not null.
bcc L4DB0 was the low part null too ?
@ -262,9 +262,9 @@ L4DB0 iny next block address.
L4DB4 tax save error code, if any.
pla restore blocknm (16 bit)
sta bloknml+1
sta ZP.BLKNUM+1
pla
sta bloknml
sta ZP.BLKNUM
txa restore return code
rts
@ -274,11 +274,11 @@ swapme lda delflag swapping or zeroing ?
tax make x = 0.
beq L4DCB zero the index (always taken).
L4DC5 ldx gbuf+$100,y index high
lda gbuf,y index low
L4DCB sta gbuf+$100,y save index high
L4DC5 ldx XDOS.GBuf+$100,y index high
lda XDOS.GBuf,y index low
L4DCB sta XDOS.GBuf+$100,y save index high
txa
sta gbuf,y save index low
sta XDOS.GBuf,y save index low
rts done.
*--------------------------------------
* MEMMGR memory manager
@ -286,7 +286,8 @@ L4DCB sta gbuf+$100,y save index high
* allocate buffer in memory tables
*--------------------------------------
alcbuffr ldy #$04 index to user specified buffer.
alcbufr1 lda (A3L),y this buffer must be on a page boundary.
alcbufr1 lda (ZP.A3L),y this buffer must be on a page boundary.
tax save for validation.
cmp #$08
bcc L4E1E cannot be lower than video !
@ -296,7 +297,7 @@ alcbufr1 lda (A3L),y this buffer must be on a page boundary.
sta datptr+1
dey
lda (A3L),y low address should be zero !
lda (ZP.A3L),y low address should be zero !
sta datptr
bne L4E1E error if not page boundary.
@ -306,8 +307,8 @@ alcbufr1 lda (A3L),y this buffer must be on a page boundary.
inx
L4DED dex test for conflicts.
jsr cmembit test for free buffer space
and MEMTABL,y P8 memory bitmap
jsr XDOS.X2MemTablYA test for free buffer space
and GP.MEMTABL,y
bne L4E1E report memory conflict, if any.
cpx datptr+1 test all 4 pages.
@ -319,19 +320,17 @@ L4DED dex test for conflicts.
inx
L4DFE dex set proper bits to 1
jsr cmembit
ora MEMTABL,y to mark it's allocation.
sta MEMTABL,y
jsr XDOS.MemTablEOR
cpx datptr+1 set all 4 pages
bne L4DFE
ldy fcbptr calculate buffer number
lda FCBs,y
lda XDOS.FCBs,y
asl buffer number = (entnum) * 2.
sta FCBs+FCB.BUFID,y save it in fcb.
sta XDOS.FCBs+FCB.BUFID,y save it in fcb.
tax use entnum * 2 as index to global
lda datptr+1 buffer addr tables. get addr already
sta buftbl-1,x validated as good. store hi addr
sta GB.BUFTABL-1,x validated as good. store hi addr
clc (entnums start at 1, not 0)
rts
@ -341,14 +340,14 @@ L4E1E lda #MLI.E.BADBUF buffer is in use or not legal
rts
*--------------------------------------
relbuffr tax index into global buffer table.
lda buftbl-2,x
lda GB.BUFTABL-2,x
sta bufaddrl
lda buftbl-1,x
lda GB.BUFTABL-1,x
sta bufaddrh
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)
stz GB.BUFTABL-1,x take address out of buffer list.
stz GB.BUFTABL-2,x (x was set up by getbufadr)
freebuf ldx bufaddrh get hi buffer address
inx add 4 pages to account for 1k space.
@ -357,33 +356,13 @@ freebuf ldx bufaddrh get hi buffer address
inx
.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
jsr XDOS.MemTablEOR
cpx bufaddrh all pages freed ?
bne .1 no.
relbuffr.8 clc no error.
rts
*--------------------------------------
* calculate memory allocation bit position.
* on entry: x = high address of buffer, low address assumed zero.
* on exit: acc = allocation bit mask, x = unchanged, y = pointer to memtabl byte
*--------------------------------------
cmembit txa page address
and #$07 which page in any 2k set ?
tay use as index to determine
lda whichbit,y bit position representation.
pha save bit position mask for now.
txa page address.
lsr
lsr determine 2k set
lsr
tay return it in y.
pla restore bit mask. return bit position
rts in a & y, pointer to memtabl in x.
*--------------------------------------
valdbuf lda usrbuf+1 high address of user's buffer
cmp #$02 must be greater than page 2.
bcc L4E1E report bad buffer
@ -406,8 +385,8 @@ L4E76 clc
inx loop thru all affected pages.
vldbuf1 dex check next lower page.
jsr cmembit
and MEMTABL,y if 0 then no conflict.
jsr XDOS.X2MemTabLYA
and GP.MEMTABL,y if 0 then no conflict.
bne L4E1E branch if conflict.
cpx usrbuf+1 was that the last (lowest) page ?
@ -416,12 +395,35 @@ vldbuf1 dex check next lower page.
clc all pages ok.
rts
*--------------------------------------
* calculate memory allocation bit position.
* on entry: x = high address of buffer, low address assumed zero.
* on exit: acc = allocation bit mask, x = unchanged, y = pointer to memtabl byte
*--------------------------------------
XDOS.MemTablEOR jsr XDOS.X2MemTablYA
eor GP.MEMTABL,y
sta GP.MEMTABL,y
rts
*--------------------------------------
XDOS.X2MemTablYA
txa page address
and #$07 which page in any 2k set ?
tay use as index to determine
lda whichbit,y bit position representation.
pha save bit position mask for now.
txa page address.
lsr
lsr determine 2k set
lsr
tay return it in y.
pla restore bit mask. return bit position
rts in a & y, pointer to memtabl in x.
*--------------------------------------
XDOS.GetBuf ldy #$02 give user address of file buffer referenced by refnum.
lda bufaddrl
sta (A3L),y
sta (ZP.A3L),y
iny
lda bufaddrh
sta (A3L),y
sta (ZP.A3L),y
clc no errors possible
rts
*--------------------------------------
@ -482,53 +484,53 @@ XDOS.IsValidFirstChar.SEC
* move 3 pages of dispatcher from 'displc2' to 'dispadr'
* this move routine must be resident above $E000 at all times
*--------------------------------------
calldisp lda RRAMWRAMBNK2 read/write RAM bank 2
lda RRAMWRAMBNK2
XDOS.CallDisp lda IO.RRAMWRAMBNK2 read/write RAM bank 2
lda IO.RRAMWRAMBNK2
stz A1L
stz ZP.A1L
lda #$D1
sta A1L+1
sta ZP.A1L+1
stz A2L
stz ZP.A2L
lda #$10
sta A2L+1
sta ZP.A2L+1
ldy #$00
ldx #$03 3 pages to move.
.1 lda (A1L),y
sta (A2L),y
.1 lda (ZP.A1L),y
sta (ZP.A2L),y
iny
bne .1
inc A1L+1 pointers to next page
inc A2L+1
inc ZP.A1L+1 pointers to next page
inc ZP.A2L+1
dex move all pages needed
bne .1
lda RRAMWRAMBNK1 read/write RAM bank 1
lda RRAMWRAMBNK1 swap mli space back in
lda IO.RRAMWRAMBNK1 read/write RAM bank 1
lda IO.RRAMWRAMBNK1 swap mli space back in
stz mliact MLI active flag
stz GP.MLIACTV MLI active flag
stz softev
stz ROM.SOFTEV
lda #$10 point RESET to dispatch entry
sta softev+1
sta ROM.SOFTEV+1
eor #$A5
sta pwredup power up byte
sta ROM.PWREDUP power up byte
jmp $1000
*--------------------------------------
XDOS.SPREMAP ldx #$03 assume 3 parameters.
lda A4L command number
sta cmdnum
lda ZP.CMDNUM
sta .5
bne .1 taken if not status call
ldy #XDOS.SPStatus set up memory for the status list buffer
sty buf fake up the prodos parameters
sty ZP.BUFPTR fake up the prodos parameters
ldy /XDOS.SPStatus
sty buf+1
stz bloknml set statcode = 0 for simple status call
sty ZP.BUFPTR+1
stz ZP.BLKNUM set statcode = 0 for simple status call
.1 cmp #$03 format command ?
bne .2 no.
@ -537,7 +539,7 @@ XDOS.SPREMAP ldx #$03 assume 3 parameters.
.2 stx XDOS.SPParams set # of parms.
lda unitnum DSSS0000
lda ZP.UNITNUM DSSS0000
lsr turn unit number into an index
lsr
lsr
@ -547,23 +549,23 @@ XDOS.SPREMAP ldx #$03 assume 3 parameters.
lda XDOS.SPUnit-1,x get the smartport unit number and
sta XDOS.SPParams.U store into smartport parm list.
lda XDOS.SPVectLo-1,x
sta sp_vector+1 copy smartport entry address
sta .4+1 copy smartport entry address
lda XDOS.SPVectHi-1,x
sta sp_vector+2
sta .4+2
ldx #$04 copy buffer pointer and block #
.3 lda buf-1,x from prodos parameters
sta XDOS.SPParams.B-1,x to smartport parameter block
.3 lda ZP.BUFPTR-1,x from prodos parameters
sta XDOS.SPParams.B-1,x to smartport parameter block
dex
bne .3
sp_vector jsr $0000 smartport call (entry address gets modified)
cmdnum .HS 00 command #
.4 jsr $0000 smartport call (entry address gets modified)
.5 .HS 00 command #
.DA XDOS.SPParams
bcs .9
ldx cmdnum status call ?
ldx .5 status call ?
bne .9 no...
ldx XDOS.SPStatus+1 else get the block count
@ -588,22 +590,26 @@ XDOS.SPParams.U .HS 00 unit number
XDOS.SPParams.B .HS 0000 data buffer
.HS 000000 block number (3 bytes)
*--------------------------------------
XDOS.TBX jmp (.1,x)
XDOS.TBX bit IO.RRAMWRAMBNK1 Get RW access to LC
jsr .1
jmp IRQ.ToRomRTS
.1 .DA XDOS.TBX.MemReset
.1 jmp (.2,x)
.2 .DA XDOS.TBX.MemReset
.DA XDOS.TBX.EnumBlk
.DA XDOS.TBX.EnumNext
*--------------------------------------
XDOS.TBX.MemReset
ldx #$17
.1 stz MEMTABL,x P8 memory bitmap
.1 stz GP.MEMTABL,x P8 memory bitmap
dex
bne .1
inc MEMTABL+$17 protect global page
inc GP.MEMTABL+$17 protect global page
lda #$CF protect zero page, stack and page 1
sta MEMTABL
sta GP.MEMTABL
rts
*--------------------------------------
XDOS.TBX.EnumBlk
@ -689,7 +695,7 @@ XDOS.TBX.SECRTS sec
rts
*--------------------------------------
XDOS.ZPT.InitGBuf
lda /gbuf
lda /XDOS.GBuf
XDOS.ZPT.InitA sta zpt+1
lda #4
@ -865,8 +871,8 @@ d_dhdr .HS 0000 file directory header block address
scrtch .HS 00000000 scratch area for allocation address conversion.
oldeof .HS 000000 temp used in r/w
oldmark .HS 000000
xvcbptr .HS 00 used in 'cmpvcb' as a temp
vcbptr .HS 00
*xvcbptr .HS 00 used in 'cmpvcb' as a temp
*XDOS.VCBPtr .HS 00
fcbptr .HS 00
fcbflg .HS 00
reql .HS 00
@ -877,13 +883,13 @@ entcntl .HS 00
entcnth .HS 00
cntent .HS 00
nofree .HS 00
bmcnt .HS 00
*bmcnt .HS 00
saptr .HS 00
pathcnt .HS 00
p_dev .HS 00
p_blok .HS 0000
bmptr .HS 00
basval .HS 00
*bmptr .HS 00
*basval .HS 00
half .HS 00
* bitmap info tables
@ -902,15 +908,13 @@ nlmask .HS 00
ioaccess .HS 00 has a call been made to disk device handler ?
cmdtemp .HS 00
bkbitflg .HS 00 used to set or clear backup bit
duplflag .HS 00
vcbentry .HS 00
* xdos temporary variables
namcnt .HS 00
rnptr .HS 00
namptr .HS 00
vnptr .HS 00
*vnptr .HS 00
prfxflg .HS 00
cferr .HS 00
@ -962,10 +966,13 @@ XDOS.DATA.LEN .EQ *-XDOS.DATA
.LIST ON
XDOS.FREE .EQ $FEFD-*-XDOS.DATA.LEN (2.0.3 = $0C)
.LIST OFF
cortdisp .EQ $FEFD
cortflag .EQ $FEFF cortland flag. 1 = Cortland system (must stay within page boundary)
XDOS.CortDisp .EQ $FEFD
XDOS.CortFlag .EQ $FEFF cortland flag. 1 = Cortland system (must stay within page boundary)
*--------------------------------------
.EP
*--------------------------------------
XDOS.LEN .EQ *-XDOS.START
*--------------------------------------
XDOS.LEN .EQ *-XDOS
MAN
SAVE usr/src/prodos.fx/prodos.s.xdos.f
LOAD usr/src/prodos.fx/prodos.s

View File

@ -2,11 +2,13 @@ NEW
AUTO 3,1
*--------------------------------------
* If Called by ProDOS : SEI
* If Called directly from DEVPTRS vectors : ????
* If Called directly from GP.DEVPTRS vectors : ????
*--------------------------------------
XRW.START cld $D8 to flag language card bank 1 (main)
XRW.START .PH XRW
lda unitnum get unit number.
XRW.START1 cld $D8 to flag language card bank 1 (main)
lda ZP.UNITNUM get unit number.
pha
@ -28,7 +30,7 @@ XRW.START cld $D8 to flag language card bank 1 (main)
pla
and #$7F mask off high bit.
sta A2L 0SSS0000 for IO indexing
sta ZP.A2L 0SSS0000 for IO indexing
* make sure other drives in other slots are stopped
@ -52,7 +54,7 @@ XRW.START cld $D8 to flag language card bank 1 (main)
lda XRW.montimeh
bne .1
*--------------------------------------
XRW.Blk2TS lda bloknml
XRW.Blk2TS lda ZP.BLKNUM
sta XRW.ReqTrack
and #7
@ -64,7 +66,7 @@ XRW.Blk2TS lda bloknml
rol
sta XRW.ReqSector
lda bloknml+1
lda ZP.BLKNUM+1
ldx #3
@ -73,7 +75,7 @@ XRW.Blk2TS lda bloknml
dex
bne .1
*--------------------------------------
ldx A2L
ldx ZP.A2L
jsr XRW.ReadMode
jsr XRW.CheckMotorOn
@ -85,7 +87,7 @@ XRW.Blk2TS lda bloknml
lda #$E8 24 up to 0
sta XRW.montimeh
lda unitnum determine drive 1 or 2.
lda ZP.UNITNUM determine drive 1 or 2.
cmp XRW.LastUnitUsed same slot/drive used before ?
sta XRW.LastUnitUsed save it for next time.
php keep results of compare.
@ -97,7 +99,7 @@ XRW.Blk2TS lda bloknml
.3 lda IO.D2.DrvSel1,x
ldx A2L
ldx ZP.A2L
lda IO.D2.DrvOn,x turn on the drive.
plp was it the same drive ?
@ -129,7 +131,7 @@ XRW.Blk2TS lda bloknml
jsr XRW.CheckMotorOn is drive present ?
beq XRW.E.ND
*--------------------------------------
XRW.Cmd lda A4L get command #
XRW.Cmd lda ZP.CMDNUM get command #
bne .1
jsr XRW.TestWP 0 = status
@ -164,13 +166,13 @@ XRW.Cmd lda A4L get command #
bcs XRW.E.IO
.4 inc buf+1
.4 inc ZP.BUFPTR+1
inc XRW.ReqSector
inc XRW.ReqSector
jsr XRW.SectorIO get 2nd half of block
dec buf+1
dec ZP.BUFPTR+1
bcc XRW.E.OK
@ -188,7 +190,7 @@ XRW.E.OK plp RESTORE IRQ STATE
clc
lda #0
XRW.E.EXIT ldx A2L
XRW.E.EXIT ldx ZP.A2L
bit IO.D2.DrvOff,x
rts
*--------------------------------------
@ -237,8 +239,8 @@ XRW.Read txa get slot #
sta rd7+1
sta rd8+1
lda buf modify storage addresses also
ldy buf+1
lda ZP.BUFPTR modify storage addresses also
ldy ZP.BUFPTR+1
sta ref3+1
sty ref3+2
sec
@ -288,14 +290,14 @@ L574A lda IO.D2.RData,x
ldy #$AA
lda #$00
L5757 sta pcl use z-page for keeping checksum
L5757 sta ZP.PCL use z-page for keeping checksum
rd4 ldx IO.D2.RData+$60 warning: self modified
bpl rd4
lda XRW.Nib2FC-$96,x
sta nbuf2-$AA,y save the two-bit groups in nbuf.
eor pcl update checksum.
eor ZP.PCL update checksum.
iny next position in nbuf.
bne L5757 loop for all $56 two-bit groups.
@ -351,7 +353,7 @@ rd8 ldx IO.D2.RData+$60 warning: self modified
eor XRW.Nib2FC-$96,x checksum ok ?
bne L57CC error if not.
ldx A2L test end marks.
ldx ZP.A2L test end marks.
L57C2 lda IO.D2.RData,x
bpl L57C2
@ -365,12 +367,12 @@ L57CC sec
L57CD pla place last byte into user buffer
ldy #$55
sta (buf),y
sta (ZP.BUFPTR),y
.LIST ON
XRW.Read.RTS rts
.LIST OFF
*--------------------------------------
XRW.TestWP ldx A2L
XRW.TestWP ldx ZP.A2L
lda IO.D2.ReadProt,x test for write protected
lda IO.D2.ReadMode,x
rol write protect-->carry-->bit 0=1
@ -399,7 +401,7 @@ XRW.Write lda IO.D2.ReadProt,x (4) PREWRITE MODE
ora IO.D2.WShift,x (4)
ldy nbuf2 (4)
sty pcl (3)
sty ZP.PCL (3)
ldy #6 (2)
nop (2)
@ -436,8 +438,8 @@ L583D eor nbuf2-1,y (4) xor with current (NO MORE PAGE CROSS)
tax (2) index to 7-bit nibl
lda XRW.FC2Nib,x (4) must not cross page boundary
* ldx A2L (3) restore slot index
ldx >A2L (4) absolute reference to zero page
* ldx ZP.A2L (3) restore slot index
ldx >ZP.A2L (4) absolute reference to zero page
sta IO.D2.WLoad,x (5) store encoded byte
lda IO.D2.WShift,x (4) handshake
@ -446,7 +448,7 @@ L583D eor nbuf2-1,y (4) xor with current (NO MORE PAGE CROSS)
* end of write byte loop
lda pcl (3) get prior nibl (from nbuf2)
lda ZP.PCL (3) get prior nibl (from nbuf2)
wrefd1 ldy #$00 (2) warning: load value modified by prenib.
@ -461,17 +463,17 @@ wrefa2 lda $1000,y (4) prior nibl. warning: address modified by prenib.
iny (2) all done with this page ?
bne wrefa1 (3-) loop until page end.
lda pch (3) get next (precalculated & translated) nibl.
lda ZP.PCH (3) get next (precalculated & translated) nibl.
beq L58C0 (2+) branch if code written was page aligned.
lda A2H (3) get byte address of last byte to be written.
lda ZP.A2H (3) get byte address of last byte to be written.
beq L58B3 (2+) branch if only 1 byte left to write.
lsr (2) test for odd or even last byte (carry set/clear)
lda pch (3) restore nibl to acc.
lda ZP.PCH (3) restore nibl to acc.
sta IO.D2.WLoad,x (5)
lda IO.D2.WShift,x (4)
lda A1L (3) = byte 0 of 2nd page xor'd with byte 1 if
lda ZP.A1L (3) = byte 0 of 2nd page xor'd with byte 1 if
nop (2) above test set carry.
iny (2) y=1
bcs L5899 (2+) branch if last byte to be odd.
@ -487,7 +489,7 @@ wrefa4 lda $1100,y (4) warning: modified by prenib
iny (2) got prior nibl, point to next
wrefa5 eor $1100,y (4) warning: modified by prenib
L5899 cpy A2H (3) set carry if this is the last nibl
L5899 cpy ZP.A2H (3) set carry if this is the last nibl
and #$FC (2) strip low 2 bits
tax (2)
lda XRW.FC2Nib,x (4)
@ -501,7 +503,7 @@ wrefa6 lda $1100,y (4) get prior nibl. warning: modified by prenib
L58B1 bcs L58C0 (3) branch always.
L58B3 lda >pch (4) absolute reference to zero page
L58B3 lda >ZP.PCH (4) absolute reference to zero page
sta IO.D2.WLoad,x (5)
lda IO.D2.WShift,x (4)
pha (3) waste 14 micro-seconds total
@ -509,7 +511,7 @@ L58B3 lda >pch (4) absolute reference to zero page
pha (3)
pla (4)
L58C0 ldx A1H (3) use last nibl (anded with $FC) for checksum
L58C0 ldx ZP.A1H (3) use last nibl (anded with $FC) for checksum
lda XRW.FC2Nib,x (4)
wrefd5 ldx #$60 (2) restore slot. warning: modified by prenib
sta IO.D2.WLoad,x (5)
@ -578,7 +580,7 @@ XRW.Wait100usecA
rts
*--------------------------------------
XRW.CheckMotorOn
ldx A2L
ldx ZP.A2L
XRW.CheckMotorOnX
ldy #0 init loop counter.
@ -601,7 +603,7 @@ XRW.ReadAddr ldy #$FC
.LIST OFF
sty XRW.CheckSum init nibble counter to $FCFC
ldx A2L get slot #
ldx ZP.A2L get slot #
.1 iny
bne .2 counter LO
@ -705,7 +707,7 @@ XRW.TrackSelect lda #2
rol A = 0/2
ora A2L
ora ZP.A2L
tay y = n0/n2
lda IO.D2.Ph0On,y PhOn 0/2 for Head0 or 1/3 for Head1
@ -829,7 +831,7 @@ XRW.SeekYA sta XRW.D2Trk-1,x will be current track at the end
jsr XRW.Wait25600usec
XRW.AllPhOff ldy A2L
XRW.AllPhOff ldy ZP.A2L
lda IO.D2.Ph0Off,y
lda IO.D2.Ph0Off+2,y
lda IO.D2.Ph0Off+4,y
@ -847,7 +849,7 @@ XRW.AllPhOff ldy A2L
.10 rts
*--------------------------------------
XRW.SeekPhOnY and #6
ora A2L
ora ZP.A2L
tay
lda IO.D2.Ph0On,y
rts
@ -859,12 +861,12 @@ XRW.SeekPhOnY and #6
* Out:
* A =
*--------------------------------------
XRW.Trk2Qtrk sta pch
XRW.Trk2Qtrk sta ZP.PCH
lda XRW.D2VolNum-1,x
bne .1
.10 lda pch standard SS 4 qtrack stepping
.10 lda ZP.PCH standard SS 4 qtrack stepping
asl
asl
rts
@ -874,7 +876,7 @@ XRW.Trk2Qtrk sta pch
cmp #$85
bcs .10 > 192 ? must be a buggy 254
lsr pch 2 sides
lsr ZP.PCH 2 sides
.2 phx
and #%00000111 stepping
@ -883,7 +885,7 @@ XRW.Trk2Qtrk sta pch
lda #0
clc
.3 adc pch
.3 adc ZP.PCH
dex
bne .3
@ -901,8 +903,8 @@ XRW.Trk2Qtrk sta pch
* on exit: a,x,y undefined. write routine modified to do direct conversion
* of high 6 bits of user's buffer data.
*--------------------------------------
XRW.PreNibble lda buf self-modify the addresses because of
ldy buf+1 the fast timing required.
XRW.PreNibble lda ZP.BUFPTR self-modify the addresses because of
ldy ZP.BUFPTR+1 the fast timing required.
clc all offsets are minus $AA.
adc #$02 the highest set is buf+$AC.
@ -962,40 +964,40 @@ prn3 lda $10AC,y warning: self modified. get byte from highest group.
iny inc to next set.
bne prn1 loop until all $56 nibls formed.
ldy buf now prepare data bytes for write16 subr.
ldy ZP.BUFPTR now prepare data bytes for write16 subr.
dey prepare end address.
sty A2H
lda buf
sty ZP.A2H
lda ZP.BUFPTR
sta wrefd1+1 warning: the following storage addresses
beq L595F starting with 'wref' are refs into code
eor #$FF space, changed by this routine.
tay index to last byte of page in (buf).
lda (buf),y pre-niblize the last byte of the page
lda (ZP.BUFPTR),y pre-niblize the last byte of the page
iny with the first byte of the next page.
eor (buf),y
eor (ZP.BUFPTR),y
and #$FC
tax
lda XRW.FC2Nib,x get disk 7-bit nible equivalent.
L595F sta pch
L595F sta ZP.PCH
beq L596F branch if data to be written is page aligned.
lda A2H check if last byte is even
lda ZP.A2H check if last byte is even
lsr or odd address. shift even/odd -> carry.
lda (buf),y if even, then leave intact.
lda (ZP.BUFPTR),y if even, then leave intact.
bcc L596D branch if odd.
iny if even, then pre-xor with byte 1.
eor (buf),y
L596D sta A1L save result for write routine.
eor (ZP.BUFPTR),y
L596D sta ZP.A1L save result for write routine.
L596F ldy #$FF index to last byte of data to write.
lda (buf),y to be used as a checksum.
lda (ZP.BUFPTR),y to be used as a checksum.
and #$FC strip extra bits
sta A1H and save it.
sta ZP.A1H and save it.
ldy buf+1 now modify address references to
ldy ZP.BUFPTR+1 now modify address references to
sty wrefa1+2 user data.
sty wrefa2+2
@ -1005,7 +1007,7 @@ L596F ldy #$FF index to last byte of data to write.
sty wrefa5+2
sty wrefa6+2
ldx A2L and lastly, index references to
ldx ZP.A2L and lastly, index references to
stx wrefd2+1 controller.
stx wrefd3+1
stx wrefd4+1
@ -1167,7 +1169,12 @@ XRW.FC2Nib .HS 96
.HS 010303FE
.HS 030303FF
*--------------------------------------
.EP
*--------------------------------------
.LIST ON
XRW.LEN .EQ *-XRW.START
.LIST OFF
*--------------------------------------
MAN
SAVE usr/src/prodos.fx/prodos.s.xrw
LOAD usr/src/prodos.fx/prodos.s

View File

@ -5,157 +5,46 @@ NEW
.OR $2000
.TF PRODOS,TSYS
*--------------------------------------
KVER .EQ 23 release 2.0.3
*--------------------------------------
READCAT .EQ 1 Boot Block read Catalog at $C00
ENHFILENAME .EQ 1
LOWERCASE .EQ 1
ACL .EQ 1
LOGO .EQ 1
PM .EQ 1
*--------------------------------------
NSC.IOBASE .EQ $C300
AUXLC .EQ 0
M.PM .EQ 1
M.RAM .EQ 1
*--------------------------------------
.INB inc/zp.i
.INB inc/io.i
.INB inc/io.iigs.i
.INB inc/io.d2.i
.INB inc/monitor.i
.INB inc/mli.i
.INB inc/mli.e.i
.INB inc/rom.ii.i
.INB inc/rom.iie.i
.INB inc/rom.iigs.i
*--------------------------------------
MMStartUp .EQ $0202
NewHandle .EQ $0902
PtrToHand .EQ $2802
MessageCenter .EQ $1501
DisposeHandle .EQ $1002
MMShutDown .EQ $0302
ReadTimeHex .EQ $0D03
Int2Hex .EQ $220B
TLTextMountVolume .EQ $1201
*--------------------------------------
.MA SHORTMX
sep #$30
.EM
.MA SHORTM
sep #$20
.EM
.MA SHORTX
sep #$10
.EM
.MA LONGMX
rep #$30
.EM
.MA LONGM
rep #$20
.EM
.MA LONGX
rep #$10
.EM
*--------------------------------------
.MA IIGS
ldx ##]1
jsl $E10000
.EM
*--------------------------------------
P8QUIT .EQ $E0D000
GSOS .EQ $E100A8
GSOS2 .EQ $E100B0
OS_BOOT .EQ $E100BD indicates O/S initially booted
*--------------------------------------
lookptr .EQ $0A
idapple .EQ $0C model machine id
idxl .EQ $10 general use 16 bit index pointer
devid .EQ $12
src .EQ $12
dst .EQ $14
cnt .EQ $16
cde .EQ $18
ecde .EQ $1A
*--------------------------------------
pcl .EQ $3A
pch .EQ $3B
A1L .EQ $3C
A1H .EQ $3D
A2L .EQ $3E
A2H .EQ $3F
A3L .EQ $40
A4L .EQ $42
unitnum .EQ $43
buf .EQ $44 2-byte data buffer pointer which
*accsav .EQ $45 overlaps accsav (temp acc save byte)
bloknml .EQ $46 used mostly as 16 bit block # pointer
zpt .EQ $48 highly used zero page index pointer
datptr .EQ $4A ptr to data area of buffer.
sos .EQ $4C sos buffer pointer.
usrbuf .EQ $4E data ptr in user buffer.
*--------------------------------------
auxsp .EQ $0101
RAMXDRV .EQ $0200 load address for aux bank /RAM driver
inbuf .EQ $0200 keyboard buffer
pbuf .EQ $0280 prefix buffer
softev .EQ $03F2 RESET vector
pwredup .EQ $03F4 power up byte
nmivect .EQ $03FB nmi handler
ILDR .EQ $0800
vmode .EQ $04FB video firmware operating mode
ch80col .EQ $057B 80 column ch position
GP .EQ $BF00
XRW .EQ $D000
CLK .EQ $D742
dbuf .EQ $0C00 8 page directory buffer
vblock1 .EQ $0E00 ramdisk directory block
volbuf .EQ $0F00 volume buffer
iobuf .EQ $1400 i/o buffer
fbuf .EQ $1800 FCB buffer
sysentry .EQ $2000 .SYS file load address
XDOS.PathBuf .EQ $D700
*XDOS.prefixbuf .EQ $D742+125
XDOS.FCBs .EQ $D800 8 opened files
XDOS.VCBs .EQ $D900 10 mounted vols
XDOS.BMBuf .EQ $DA00 512 byte bitmap buffer
XDOS.GBuf .EQ $DC00 general purpose 512 byte block buffer
xfer .EQ $C314
*--------------------------------------
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 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
FCB.F.UMOD .EQ %00010000
FCB.F.DBLKMOD .EQ %01000000
FCB.F.IBLKMOD .EQ %10000000
FCB.ACCESS .EQ 9
FCB.NLBYTE .EQ 10
FCB.BUFID .EQ 11
FCB.1stBLK .EQ 12 2 bytes
FCB.IBLK .EQ 14 2 bytes
FCB.DBLK .EQ 16 2 bytes
FCB.MARK .EQ 18 3 bytes
FCB.EOF .EQ 21 3 bytes
FCB.UBLK .EQ 24 2 bytes
XDOS .EQ $DE00
FCB.FLEVEL .EQ 27
FCB.DIRTY .EQ 28
RAM .EQ $FF00
IRQ .EQ $FF9B
FCB.NLMASK .EQ 31
*
FCB .EQ 32
*--------------------------------------
VCBs .EQ $D900
* 6 free bytes
VCB0 .EQ 06 range $D906-$DA00
VCB.DEV .EQ 16
VCB.OFCNT .EQ 17
VCB.BMAP .EQ 18 2 bytes
VCB.TBLK .EQ 20 2 bytes
VCB.FBLK .EQ 22 2 bytes
VCB.BMAPIDX .EQ 24
*
VCB .EQ 25
*--------------------------------------
bmbuf .EQ $DA00 512 byte bitmap buffer
gbuf .EQ $DC00 general purpose 512 byte block buffer
RAMX .EQ $0200
*--------------------------------------
.DUMMY
.OR $10
@ -172,6 +61,8 @@ ZPBLLenBits .BS 1
.ED
*--------------------------------------
.INB usr/src/prodos.fx/prodos.s.ldr
X.Unpak.XatYAX .DO AUXLC=1
.FIN
X.Unpak.XatYA sty ZPOutBufPtr
sta ZPOutBufPtr+1
lda PAKME.Table,x
@ -179,118 +70,137 @@ X.Unpak.XatYA sty ZPOutBufPtr
lda PAKME.Table+1,x
sta ZPInBufPtr+1
.INB usr/src/shared/x.unpak.s
.DO LOGO
.DO LOGO=1
.INB usr/src/prodos.fx/prodos.s.logo
.FIN
*--------------------------------------
PAKME.Table
PAKME.ILDR .DA ILDR.PAK
PAKME.GP .DA GP.PAK
PAKME.XRW .DA XRW.PAK
PAKME.XDOS .DA XDOS.PAK
PAKME.IRQ .DA IRQ.PAK
PAKME.RAM .DA RAM.PAK
PAKME.RAMX .DA RAMX.PAK
PAKME.DCLK .DA DCLK.PAK
PAKME.NCLK .DA NCLK.PAK
PAKME.TCLK .DA TCLK.PAK
PAKME.XCLK .DA XCLK.PAK
PAKME.CCLK .DA CCLK.PAK
PAKME.SEL1 .DA SEL1.PAK
PAKME.SEL2 .DA SEL2.PAK
ILDR.PAK .DA #0
.DA ILDR.LEN
.PH $800
.INB usr/src/prodos.fx/prodos.s.ildr
.EP
GP.PAK .DA #0
.DA GP.LEN
.PH $BF00
.INB usr/src/prodos.fx/prodos.s.gp
.EP
XRW.PAK .DA #0
.DA XRW.LEN
.PH $D000
.INB usr/src/prodos.fx/prodos.s.xrw
.EP
XDOS.PAK .DA #0
.DA XDOS.LEN
.PH $DE00
.INB usr/src/prodos.fx/prodos.s.xdos.a
.INB usr/src/prodos.fx/prodos.s.xdos.b
.INB usr/src/prodos.fx/prodos.s.xdos.c
.INB usr/src/prodos.fx/prodos.s.xdos.d
.INB usr/src/prodos.fx/prodos.s.xdos.e
.INB usr/src/prodos.fx/prodos.s.xdos.f
.EP
IRQ.PAK .DA #0
.DA IRQ.LEN
.PH $FF9B
.INB usr/src/prodos.fx/prodos.s.irq
.EP
.DO M.RAM=1
RAM.PAK .DA #0
.DA RAM.LEN
.PH $FF00
.INB usr/src/prodos.fx/prodos.s.ram
.EP
RAMX.PAK .DA #0
.DA RAMX.LEN
.PH $200
.INB usr/src/prodos.fx/prodos.s.ramx
.EP
.FIN
DCLK.PAK .DA #0
.DA DCLK.LEN
.PH XDOS.ClockDrv
.INB usr/src/prodos.fx/prodos.s.dclk
.EP
NCLK.PAK .DA #0
.DA NCLK.LEN
.PH XDOS.ClockDrv
.INB usr/src/prodos.fx/prodos.s.nclk
.EP
TCLK.PAK .DA #0
.DA TCLK.LEN
.PH XDOS.ClockDrv
.INB usr/src/prodos.fx/prodos.s.tclk
.EP
XCLK.PAK .DA #0
.DA XCLK.LEN
.PH XDOS.ClockDrv
.INB usr/src/prodos.fx/prodos.s.xclk
.EP
CCLK.PAK .DA #0
.DA CCLK.LEN
.PH XDOS.ClockDrv
.INB usr/src/prodos.fx/prodos.s.cclk
.EP
SEL1.PAK .DA #0
.DA SEL1.LEN
.PH $1000
.INB usr/src/prodos.fx/prodos.s.sel1
.EP
SEL2.PAK .DA #0
.DA SEL2.LEN
.PH $1000
.INB usr/src/prodos.fx/prodos.s.sel2
.EP
*--------------------------------------
PAKME.Table
PAKME.ID .SE 0
PAKME.ILDR.ID .EQ PAKME.ID
PAKME.ILDR .DA ILDR.PAK
PAKME.ID .SE PAKME.ID+2
PAKME.GP.ID .EQ PAKME.ID
PAKME.GP .DA GP.PAK
PAKME.ID .SE PAKME.ID+2
PAKME.XRW.ID .EQ PAKME.ID
PAKME.XRW .DA XRW.PAK
PAKME.ID .SE PAKME.ID+2
PAKME.XDOS.ID .EQ PAKME.ID
PAKME.XDOS .DA XDOS.PAK
PAKME.ID .SE PAKME.ID+2
PAKME.IRQ.ID .EQ PAKME.ID
PAKME.IRQ .DA IRQ.PAK
PAKME.ID .SE PAKME.ID+2
.DO M.RAM=1
PAKME.RAM.ID .EQ PAKME.ID
PAKME.RAM .DA RAM.PAK
PAKME.ID .SE PAKME.ID+2
PAKME.RAMX.ID .EQ PAKME.ID
PAKME.RAMX .DA RAMX.PAK
PAKME.ID .SE PAKME.ID+2
.FIN
PAKME.DCLK.ID .EQ PAKME.ID
PAKME.DCLK .DA DCLK.PAK
PAKME.ID .SE PAKME.ID+2
PAKME.NCLK.ID .EQ PAKME.ID
PAKME.NCLK .DA NCLK.PAK
PAKME.ID .SE PAKME.ID+2
PAKME.TCLK.ID .EQ PAKME.ID
PAKME.TCLK .DA TCLK.PAK
PAKME.ID .SE PAKME.ID+2
PAKME.XCLK.ID .EQ PAKME.ID
PAKME.XCLK .DA XCLK.PAK
PAKME.ID .SE PAKME.ID+2
PAKME.CCLK.ID .EQ PAKME.ID
PAKME.CCLK .DA CCLK.PAK
PAKME.ID .SE PAKME.ID+2
PAKME.SEL1.ID .EQ PAKME.ID
PAKME.SEL1 .DA SEL1.PAK
PAKME.ID .SE PAKME.ID+2
PAKME.SEL2.ID .EQ PAKME.ID
PAKME.SEL2 .DA SEL2.PAK
PAKME.ID .SE PAKME.ID+2
*--------------------------------------
.AS "PAKME" TAG
.DA $2000 BIN ORG
.DA #14 Chunk Count
.DA #PAKME.ID/2 Chunk Count
.DA PAKME.Table Chunks
*--------------------------------------
MAN

1534
SHARED/X.ARC.S.txt Normal file

File diff suppressed because it is too large Load Diff

352
SHARED/X.UNARC.S.txt Normal file
View File

@ -0,0 +1,352 @@
NEW
AUTO 3,1
*--------------------------------------
* ZPInBufPtr = Ptr to Shunk Data
* ZPOutBufPtr = Ptr to Uncompressed Data
*--------------------------------------
* ZPnCnt = !ZPULen
* ZPPtr1
* ZPPtr2
* ZPInMask
* ZPSTRLenBits
* ZPBLLenBits
* ZPBLOfsLBits
* ZPBLOfsHBits
* ZPTOPCnt
*--------------------------------------
X.UnArc jsr X.UnArc.GetByte ULEN LO
eor #$ff
sta ZPnCnt
jsr X.UnArc.GetByte ULEN HI
eor #$ff
sta ZPnCnt+1
jsr X.UnArc.GetByte TBLBITS LO
sta ZPPtr1
jsr X.UnArc.GetByte TBLBITS HI
sta ZPPtr1+1
ora ZPPtr1
bne X.UnArc.ARC
*--------------------------------------
X.UnArc.STORE ldx ZPnCnt !LEN LO
ldy #0
.1 inx
bne .2
inc ZPnCnt+1
beq .8
.2 lda (ZPInBufPtr),y
sta (ZPOutBufPtr),y
iny
bne .1
inc ZPInBufPtr+1
inc ZPOutBufPtr+1
bra .1
.8 clc
rts
*--------------------------------------
X.UnArc.ARC lda #$80
sta ZPTOPCnt Default to no TOP bytes...
sta ZPSTRLenBits ...and no long length for STR...
sta ZPBLLenBits ...and BL
sta ZPInMask Init Bit shifter
lda ZPPtr1+1
and #%01111111 -llloooo
beq .13 no BL/STR
lsr
lsr
lsr
lsr
sta ZPBLLenBits lll
lda ZPPtr1+1 ----oooo
and #%00001111
ldx #0
cmp #8
bcc .10
* sec
sbc #8
tax
lda #8
.10 sta ZPBLOfsLBits
stx ZPBLOfsHBits
lda ZPPtr1 sss-----
lsr
lsr
lsr
lsr
lsr
beq .13
sta ZPSTRLenBits
.13 lda ZPPtr1+1 c-------
asl
lda ZPPtr1 ---ccccc
and #%00011111
rol
beq X.UnArc.ARC.LOOP
sta ZPTOPCnt
ldx ZPInBufPtr ZPPtr1 = TOP table
stx ZPPtr1
ldx ZPInBufPtr+1
stx ZPPtr1+1
clc
adc ZPInBufPtr skip TOP table
sta ZPInBufPtr
bcc X.UnArc.ARC.LOOP
inc ZPInBufPtr+1
*--------------------------------------
X.UnArc.ARC.LOOP
bit ZPSTRLenBits
bpl X.UnArc.ARC.LOOPBL
.1 jsr X.UnArc.Single
bne .1
clc
rts
*--------------------------------------
X.UnArc.ARC.LOOPBL
jsr X.UnArc.GetBitInC
bcs .60 -> STRBL
jsr X.UnArc.Single
bne X.UnArc.ARC.LOOPBL
clc
rts
*--------------------------------------
* STRBL
*--------------------------------------
.60 jsr X.UnArc.GetBitInC
bcs .70 -> BL
*--------------------------------------
* STR
*--------------------------------------
* bit ZPSTRLenBits
* bmi .63 no long len
jsr X.UnArc.GetBitInC
bcs .61 -> Long Len
.63 ldx #ARC.B.SHORTSTR.W
jsr X.UnArc.GetXBitInA
clc
adc #STR.MIN
bra .62
.61 ldx ZPSTRLenBits
jsr X.UnArc.GetXBitInA
clc
adc #STR.MID
.62 pha STR len
jsr X.UnArc.Single
pla
dec
bne .62
.81 bra .80
*--------------------------------------
* BL
*--------------------------------------
.70 bit ZPBLLenBits
bmi .73 no long len
jsr X.UnArc.GetBitInC
bcs .71 -> Long Len
.73 ldx #ARC.B.SHORTBLL.W
jsr X.UnArc.GetXBitInA
clc
adc #BLL.MIN
bra .72
*--------------------------------------
.71 ldx ZPBLLenBits
jsr X.UnArc.GetXBitInA
clc
adc #BLL.MID
.72 sta ZPPtr2 save BL Len....
* BLOFS
pha
ldy #0
ldx ZPBLOfsHBits
beq .75
jsr X.UnArc.GetXBitInA
tay
.75 jsr X.UnArc.Get8BitInA YA=Offset
clc
adc ZPPtr2 ZPPtr2=BL Len+Offset
sta ZPPtr2
tya
adc #0
sta ZPPtr2+1
lda ZPOutBufPtr
sec
sbc ZPPtr2
sta ZPPtr2
lda ZPOutBufPtr+1
sbc ZPPtr2+1
sta ZPPtr2+1
plx Get Back BL Len
ldy #0
.76 lda (ZPPtr2),y
jsr X.UnArc.PutByte
iny
dex
bne .76
.80 lda ZPnCnt
and ZPnCnt+1
inc
beq .88
jmp X.UnArc.ARC.LOOPBL
.88 clc
rts
*--------------------------------------
X.UnArc.Single bit ZPTOPCnt
bmi .1 no TOP Table
jsr X.UnArc.GetBitInC
bcs .3 ->TOP0
*--------------------------------------
* RAW
*--------------------------------------
.1 jsr X.UnArc.Get8BitInA
bra X.UnArc.PutByte
*--------------------------------------
.3 jsr X.UnArc.GetBitInC
bcs .4 ->TOP8
*--------------------------------------
* TOP0/4
*--------------------------------------
ldx #ARC.B.TOP0.W-1
jsr X.UnArc.GetXBitInA
bra .51
*--------------------------------------
.4 jsr X.UnArc.GetBitInC
bcs .5 ->TOP16
*--------------------------------------
* TOP8
*--------------------------------------
ldx #ARC.B.TOP8.W-2
jsr X.UnArc.GetXBitInA
ora #%1000
bra .51
*--------------------------------------
* TOP16
*--------------------------------------
.5 ldx #ARC.B.TOP16.W-2
jsr X.UnArc.GetXBitInA
ora #%10000
.51 tay
lda (ZPPtr1),y
*--------------------------------------
* fall in PutByte
*--------------------------------------
X.UnArc.PutByte inc ZPnCnt
bne .1
inc ZPnCnt+1
beq .8
.1 sta (ZPOutBufPtr)
inc ZPOutBufPtr
bne .8
inc ZPOutBufPtr+1
.8 rts
*--------------------------------------
X.UnArc.Get8BitInA
ldx #8
X.UnArc.GetXBitInA
lda #0
.1 pha
jsr X.UnArc.GetBitInC
pla
rol
dex
bne .1
rts
*--------------------------------------
X.UnArc.GetBitInC
lda (ZPInBufPtr)
and ZPInMask
cmp #1 CC if bit=0
php
lsr ZPInMask
bcc .8
ror ZPInMask
jsr X.UnArc.NextByte
.8 plp
rts
*--------------------------------------
X.UnArc.GetByte lda (ZPInBufPtr)
X.UnArc.NextByte
inc ZPInBufPtr
bne .8
inc ZPInBufPtr+1
.8 rts
*--------------------------------------
.LIST ON
X.UnArc.Size .EQ *-X.UnArc
.LIST OFF
*--------------------------------------
MAN
SAVE usr/src/shared/x.unarc.s
LOAD usr/src/bin/unarc.s
ASM

View File

@ -102,10 +102,10 @@ CORE.Events jsr CORE.GetEvents
lda CORE.EvtCount
bne .1
*--------------------------------------
.4 bit OPENAPPLE
.4 bit IO.OPENAPPLE
bpl .8
lda KBD
lda IO.KBD
bpl .8
cmp #"0"
@ -114,7 +114,7 @@ CORE.Events jsr CORE.GetEvents
cmp #"9"+1
bcs .8
sta KBDSTROBE
sta IO.KBDSTROBE
and #$0F
@ -140,14 +140,14 @@ CORE.Quit php
lda IRQ.INTNUM
sta K.MLI.PARAMS+1
>MLICALL MLIDEALLOCIRQ
>MLICALL MLI.DEALLOCIRQ
bit RDIOUDIS
sta SETIOUDIS
sta CLRDHIRES
bit IO.RDIOUDIS
sta IO.SETIOUDIS
sta IO.CLRDHIRES
bmi .1
sta CLRIOUDIS
sta IO.CLRIOUDIS
.1 ldx #5
@ -156,7 +156,7 @@ CORE.Quit php
bpl .2
lda #4
ldx #MLIQUIT
ldx #MLI.QUIT
jmp GP.MLICall
*--------------------------------------
CORE.UpdPPS tax save RC From INIT or RUN
@ -213,7 +213,7 @@ CORE.GetEvents lda #K.S.EVT
dec IRQ.Tick
bra .2
.1 lda VBL get VLINE status
.1 lda IO.VBL get VLINE status
tax
eor CORE.VBLState
bpl .8 no change,no tick
@ -500,7 +500,7 @@ CORE.IRQGS .OP 65816
phk
plb
stz IO.IIGS.CLRVBLINT
stz IO.GS.CLRVBLINT
jsr CORE.IRQ.Switch

View File

@ -4,11 +4,11 @@ NEW
* CONTROL SECTION :
.LIST ON
*--------------------------------------
C1 .EQ MAIN.S
C2 .EQ AUX.S
C3 .EQ D1.S
C4 .EQ D2.S
C5 .EQ E0.S
*C1 .EQ MAIN.S
*C2 .EQ AUX.S
*C3 .EQ D1.S
*C4 .EQ D2.S
*C5 .EQ E0.S
*--------------------------------------
.LIST OFF
.DO MAIN.S>$BC0

View File

@ -73,7 +73,7 @@ K.ReadDir.ROOT ldy #S.FD.DIR.FC did we already returned something ?
>STYA K.MLI.PARAMS+2
>STYA ZPPtr2
>MLICALL MLIONLINE
>MLICALL MLI.ONLINE
bcs DIRENT.RTS
>LDYAI 16+S.STAT*18+1 14*(Vols+Stat) + 4*(PFT+Stat) + \0
@ -124,7 +124,7 @@ K.ReadDir.ROOT ldy #S.FD.DIR.FC did we already returned something ?
>LDYAI K.MLI.PATH
>STYA K.MLI.PARAMS+1
>MLICALL MLIGETFILEINFO
>MLICALL MLI.GFINFO
sta K.S.STAT+S.STAT.P.DEVSTATUS
bcs .3
@ -190,7 +190,7 @@ K.ReadDir.DIR sta K.MLI.PARAMS+1 A=#S.DIR.PRODOS.REF
lda /512
sta K.MLI.PARAMS+5
>MLICALL MLIREAD Read A block from directory
>MLICALL MLI.READ Read A block from directory
bcs .99
ldy #S.FD.DIR.EL Check if first run....

View File

@ -136,7 +136,7 @@ DRV.GBLK txa
lda (pFD),y
sta .3+2
jsr GO.ProDOS
jsr GO.MainIC
ldx #5
@ -147,7 +147,7 @@ DRV.GBLK txa
.3 jsr $ffff SELF MODIFIED
jsr GO.A2osX
jsr GO.AuxLC
rts
DRV.BLK.P .BS 6
@ -176,13 +176,13 @@ DRV.SP >STYA pIOCTL
lda (pFD),y
sta .1+2
jsr GO.ProDOS Remapped SP
jsr GO.MainIC Remapped SP
.1 jsr $ffff
.2 .BS 1
.3 .BS 2
jsr GO.A2osX
jsr GO.AuxLC
rts
DRV.SP.Cnt .HS 03030301030101010404

View File

@ -106,10 +106,10 @@ ENVX.SetEnv.I
pla
sta ENVX.hEnv
sta CLRWRITEAUX
sta IO.CLRWRITEAUX
ldy #S.PS.hENV
sta (pPS),y
sta SETWRITEAUX
sta IO.SETWRITEAUX
bra .1 Start over
.22 ldy #$ff

View File

@ -8,12 +8,12 @@ NEW
K.GetErrMsg >PULLW ZPPtr2 Dst Buf
>PULLA Err Code
sta SETREADAUX
sta SETWRITEAUX
sta IO.SETREADAUX
sta IO.SETWRITEAUX
jsr ERRORX.GetErrMsg
sta CLRREADAUX
sta IO.CLRREADAUX
rts
*--------------------------------------
MAN

View File

@ -32,7 +32,7 @@ ERRORX.GetErrMsg
.4 ldy #$ff
sta CLRWRITEAUX
sta IO.CLRWRITEAUX
.5 iny
lda (ZPPtr1),y

View File

@ -1,7 +1,7 @@
NEW
AUTO 3,1
*--------------------------------------
FS.OPEN.REG >MLICALL MLIGETFILEINFO
FS.OPEN.REG >MLICALL MLI.GFINFO
bcs .10
lda IO.Open.TYPE Already Exists
@ -45,13 +45,13 @@ FS.OPEN.REG >MLICALL MLIGETFILEINFO
stz K.MLI.PARAMS+2
stz K.MLI.PARAMS+3
stz K.MLI.PARAMS+4
>MLICALL MLISETEOF no, reset size to 0
>MLICALL MLI.SETEOF no, reset size to 0
bra .4
.3 >MLICALL MLIGETEOF
.3 >MLICALL MLI.GETEOF
bcs FS.OPEN.ERR
>MLICALL MLISETMARK
>MLICALL MLI.SETMARK
.4 bcs FS.OPEN.ERR
.5 lda IO.Open.FLAGS
@ -62,7 +62,7 @@ FS.OPEN.REG >MLICALL MLIGETFILEINFO
sta K.MLI.PARAMS+2
lda #C.CR
sta K.MLI.PARAMS+3
>MLICALL MLINEWLINE
>MLICALL MLI.NEWLINE
bcs FS.OPEN.ERR
.8 lda IO.hFD
@ -83,7 +83,7 @@ FS.OPEN.DIR lda #S.FD.T.DIR
lda K.MLI.PATH+2
beq .8 "/"
>MLICALL MLIGETFILEINFO
>MLICALL MLI.GFINFO
bcs .9
lda K.MLI.PARAMS+S.FI.T
@ -101,10 +101,10 @@ FS.OPEN.DIR lda #S.FD.T.DIR
sec
.9 rts
*--------------------------------------
FS.READ.REG ldx #MLIREAD
FS.READ.REG ldx #MLI.READ
.HS 2C BIT ABS
*--------------------------------------
FS.WRITE.REG ldx #MLIWRITE
FS.WRITE.REG ldx #MLI.WRITE
ldy #S.FD.REG.REF
lda (pFD),y
@ -122,7 +122,7 @@ FS.WRITE.REG ldx #MLIWRITE
rts
*--------------------------------------
FS.EOF.REG >MLICALL MLIGETMARK
FS.EOF.REG >MLICALL MLI.GETMARK
bcs .9
ldy #2
@ -132,7 +132,7 @@ FS.EOF.REG >MLICALL MLIGETMARK
dey
bpl .1
>MLICALL MLIGETEOF
>MLICALL MLI.GETEOF
bcs .9
ldy #2
@ -160,14 +160,14 @@ FS.CLOSE jsr FS.MLICLOSE
FS.MLICREATE sta K.MLI.PARAMS+7 Storage Type
ldx #3
.1 lda DATELO,x
.1 lda GP.DATE,x
sta K.MLI.PARAMS+8,x Create Date/Time
dex
bpl .1
lda #S.FI.A.FULL
sta K.MLI.PARAMS+3 Access
>MLICALL MLICREATE
>MLICALL MLI.CREATE
rts
*--------------------------------------
FS.MLIOPEN >LDYAI 1024 get a ProDOS IOBUF
@ -180,7 +180,7 @@ FS.MLIOPEN >LDYAI 1024 get a ProDOS IOBUF
ldy #S.FD.REG.IOBUF
sta (pFD),y
>MLICALL MLIOPEN
>MLICALL MLI.OPEN
bcs FS.RTS
lda K.MLI.PARAMS+5 get ref_num
@ -198,7 +198,7 @@ FS.MLICLOSE ldy #S.FD.REG.REF
beq .1
sta K.MLI.PARAMS+1
>MLICALL MLICLOSE
>MLICALL MLI.CLOSE
bcs FS.RTS
.1 ldy #S.FD.REG.IOBUF
@ -213,7 +213,7 @@ FS.MLICLOSE ldy #S.FD.REG.REF
FS.Stat bit A2osX.FSID
bmi FS.Stat.FX
FS.Stat.203 >MLICALL MLIGETFILEINFO
FS.Stat.203 >MLICALL MLI.GFINFO
bcs FS.RTS
jsr FS.ClrStat
@ -245,7 +245,7 @@ FS.Stat.203 >MLICALL MLIGETFILEINFO
ldx #K.S.STAT+S.STAT.MTIME
jmp FS.PTime2StatYAX
*--------------------------------------
FS.Stat.FX >MLICALL MLIGETFILEINFOEX
FS.Stat.FX >MLICALL MLI.GFINFOEX
bcc .1
cmp #MLI.E.BADCALL

View File

@ -65,6 +65,7 @@ GP.Sleep php
inc Advance one byte because of return by RTI
bne GP.Sleep2
inx
GP.Sleep2 ldy #S.PS.PC
@ -181,13 +182,13 @@ GP.AtkCall dec IRQ.InKernel
>STYA .1
jsr GO.ProDOS
jsr GO.MainIC
jsr MLI
.DA #MLIATALK
.DA #MLI.ATALK
.1 .DA *
jsr GO.A2osX
jsr GO.AuxLC
inc IRQ.InKernel
rts
@ -268,14 +269,14 @@ GP.GetFAC jsr GP.ROMCALL
GP.RomCall phx
ldx $D000
stx .8+1
bit RROMBNK1
bit IO.RROMBNK1
plx
jsr MATHF
.8 ldx #$ff
bit $C000,x
bit $C000,x
* bit $C000,x
rts
*--------------------------------------
GP.SetARG ldx #FPU.SETARG
@ -338,22 +339,23 @@ GP.lrintf jsr GP.SetFAC
*--------------------------------------
GP.MLICall stx .1
sta K.MLI.PARAMS
jsr GO.ProDOS
jsr GO.MainIC
jsr MLI
.1 .BS 1
.DA K.MLI.PARAMS
jsr GO.A2osX
jsr GO.AuxLC
rts
*--------------------------------------
GO.ProDOS pha
GO.MainIC pha
lda $D000 We re coming from AUXLC, saving bank...
sta GO.A2osX.BNK+1
sta GO.AuxLC.BNK+1
pla
php
clc
.HS 2C bit abs
GO.A2osX php
.HS 2C BIT ABS
GO.AuxLC php
sec
sei
sta GO.EXIT.SaveA+1
stx GO.EXIT.SaveX+1
@ -363,36 +365,40 @@ GO.A2osX php
ply
inx
bne .1
iny
.1 stx GO.EXIT.JMP+1
sty GO.EXIT.JMP+2
bcs GO.A2osX.BNK if CS, go AUXLC
bit RRAMWRAMBNK1 Go MAINLC (ProDOS), always BNK1
* bit RRAMWRAMBNK1
bcs .2 if CS, go AUXLC
tsx
stx SaveSX
ldx SaveSM
txs
sta CLRALTZP
sta IO.CLRALTZP
ldx #IO.RRAMWRAMBNK1 Go MAINLC (ProDOS), always BNK1
bra GO.EXIT
GO.A2osX.BNK ldx #RRAMWRAMBNK1 Self Modified, initialized to BNK1 for INIT3
bit $C000,x
* bit $C000,x
sta SETALTZP
.2 sta IO.SETALTZP
tsx
stx SaveSM
ldx SaveSX
txs
GO.AuxLC.BNK ldx #$FF Self Modified, initialized to BNK1 for INIT3
*--------------------------------------
GO.EXIT pha push P on stack
GO.EXIT bit $C000,x Select Proper LC bank
* bit $C000,x
pha push P on stack
GO.EXIT.SaveY ldy #$ff
GO.EXIT.SaveX ldx #$ff
GO.EXIT.SaveA lda #$ff
plp
GO.EXIT.JMP jmp $FFFF SELF MODIFIED
*--------------------------------------
* Called from ProDOS IRQ Manager (LCBNK1)
@ -407,7 +413,7 @@ GP.IRQ cld
bit IRQ.Skip After A2osX IRQ.H ?
bmi GP.IRQ.Exit
sta SETALTZP switch to aux LC
sta IO.SETALTZP switch to aux LC
tsx
stx SaveSM
ldx SaveSX
@ -419,17 +425,22 @@ GP.IRQ.JSR jsr CORE.IRQ.DEV SELF MODIFIED
stx SaveSX
ldx SaveSM
txs
sta CLRALTZP
sta IO.CLRALTZP
rts
GP.IRQ.Exit stz IRQ.Skip reset flag
sec
rts
*--------------------------------------
*GO.Reset jsr GO.A2osX
*GO.Reset jsr GO.AuxLC
* jmp CORE.Run
*--------------------------------------
*BrkHandler bra *
*--------------------------------------
.LIST ON
.BS $11D0-*
.LIST OFF
*--------------------------------------
* $11D0->$11EF : Public Variables
*--------------------------------------

View File

@ -4,7 +4,7 @@ NEW
Kernel.Init2 sei
ldx #$FF
txs
sta SETALTZP
sta IO.SETALTZP
stx SaveSM
stx SaveSX
@ -16,7 +16,7 @@ Kernel.Init2 sei
dex
bpl .1
sta CLRALTZP
sta IO.CLRALTZP
>LDYAI MSG.Init2
jsr PrintFYA
@ -44,7 +44,7 @@ Kernel.Init2 sei
ldy #0
sta SETWRITEAUX
sta IO.SETWRITEAUX
.2 inx
bne .3
@ -64,20 +64,20 @@ Kernel.Init2 sei
inc ZPPtr2+1
bra .2
.4 sta CLRWRITEAUX
.4 sta IO.CLRWRITEAUX
sta SETALTZP
sta IO.SETALTZP
lda RRAMWRAMBNK2
lda RRAMWRAMBNK2
lda IO.RRAMWRAMBNK2
lda IO.RRAMWRAMBNK2
>LDYA PAKME.D2
>STYA ZPInBufPtr
>LDYAI $D000
jsr A2osX.Unpak
lda RRAMWRAMBNK1
lda RRAMWRAMBNK1
lda IO.RRAMWRAMBNK1
lda IO.RRAMWRAMBNK1
>LDYA PAKME.D1
>STYA ZPInBufPtr
@ -89,9 +89,9 @@ Kernel.Init2 sei
>LDYAI $E000
jsr A2osX.Unpak
lda RROMBNK1
lda IO.RROMBNK1
sta CLRALTZP
sta IO.CLRALTZP
cli
jsr KConfigLoad
@ -105,9 +105,9 @@ Kernel.Init2 sei
*--------------------------------------
>DEBUGOA
*--------------------------------------
Kernel.Init3 sta SETALTZP
lda RRAMWRAMBNK1
lda RRAMWRAMBNK1
Kernel.Init3 sta IO.SETALTZP
lda IO.RRAMWRAMBNK1
lda IO.RRAMWRAMBNK1
lda #$ff Make sure we are in Kernel Mode during setup
sta IRQ.InKernel
@ -118,19 +118,19 @@ Kernel.Init3 sta SETALTZP
lda #K.VER
sta A2osX.KVER+1
sta SETALTCHAR
sta SETMIXED
sta CLRHIRES
sta SET80DISP
sta SET80STORE
sta CLRPAGE2
sta IO.SETALTCHAR
sta IO.SETMIXED
sta IO.CLRHIRES
sta IO.SET80DISP
sta IO.SET80STORE
sta IO.CLRPAGE2
lda RDIOUDIS
sta SETIOUDIS
sta SETDHIRES
lda IO.RDIOUDIS
sta IO.SETIOUDIS
sta IO.SETDHIRES
bmi .10
sta CLRIOUDIS
sta IO.CLRIOUDIS
.10 jsr MemMgrInit
@ -149,7 +149,7 @@ Kernel.Init3 sta SETALTZP
jsr SysCDEVInit
bcs *
* sta CLRMIXED
* sta IO.CLRMIXED
>PUSHWI DEV.CONSOLE
>PUSHBI O.RDWR
@ -215,8 +215,8 @@ Kernel.Init3.Err
KConfigLoad >LDYAI MSG.KCREAD
jsr PrintFYA
jsr MLIENTRY Bypass ATALK
.DA #MLIGETFILEINFOEX
jsr GP.MLIENTRY Bypass ATALK
.DA #MLI.GFINFOEX
.DA pMLIGFIEX
bcc .1
eor #MLI.E.BADCALL
@ -229,7 +229,7 @@ KConfigLoad >LDYAI MSG.KCREAD
ror A2osX.FSID File Present & ProDOS.FX detected
.2 jsr MLI
.DA #MLIOPEN
.DA #MLI.OPEN
.DA pMLIOPEN
bcs .9
@ -237,12 +237,12 @@ KConfigLoad >LDYAI MSG.KCREAD
sta pMLIREAD+1
sta pMLICLOSE+1
jsr MLI
.DA #MLIREAD
.DA #MLI.READ
.DA pMLIREAD
php
pha
jsr MLI
.DA #MLICLOSE
.DA #MLI.CLOSE
.DA pMLICLOSE
pla
plp
@ -271,13 +271,13 @@ MemMgrInit >LDYAI Mem.MHiMem
>STYA Mem.LoMem
stz Mem.LastSlot Reserve Slot #0
sta SETWRITEAUX
sta IO.SETWRITEAUX
>LDYAI Mem.XLoMem
>STYA Mem.LoMem
stz Mem.LastSlot Reserve Slot #0
sta CLRWRITEAUX
sta IO.CLRWRITEAUX
ldx #K.FILE.MAX-1
@ -367,7 +367,7 @@ SysCDEVInit.TTYPtrs
sta FD.TTY+S.FD.DEV.DCBPTR+1
sta ZPPtr1+1
sta SETWRITEAUX
sta IO.SETWRITEAUX
>STYA Mem.HiMem
>STYA Mem.Free
@ -383,7 +383,7 @@ SysCDEVInit.TTYPtrs
lda FD.TTY+S.FD.DEV.DEVID
sta (ZPPtr1)
sta CLRWRITEAUX
sta IO.CLRWRITEAUX
rts
*--------------------------------------
@ -394,13 +394,13 @@ HW.Detect >PUSHWI MSG.HW
>PUSHBI 0
>SYSCALL2 printf
bit RROMBNK1
bit IO.RROMBNK1
stz A2osX.HWType
stz A2osX.HWSubT
sec
jsr $FE1F IIgs ?
jsr $FE1F ROM.IDROUTINE IIgs ?
bcs .2
lda #A2osX.HWType.IIgs
@ -414,7 +414,7 @@ HW.Detect >PUSHWI MSG.HW
.1 sty A2osX.HWSubT
bra .8
.2 lda $FBC0
.2 lda $FBC0 ROM.ZIDBYTE
beq .4 //c
ldx #A2osX.HWType.IIe
@ -435,8 +435,8 @@ HW.Detect >PUSHWI MSG.HW
lda $FBBF
sta A2osX.HWSubT
.8 bit RRAMWRAMBNK1
bit RRAMWRAMBNK1
.8 bit IO.RRAMWRAMBNK1
bit IO.RRAMWRAMBNK1
>PUSHWI MSG.HW.TypeSubT
>PUSHB A2osX.HWType
@ -477,10 +477,10 @@ CPU.Init >PUSHWI MSG.CPU
*--------------------------------------
ldx A2osX.HZ
.1 bit VBL //e : Wait VBL high....
.1 bit IO.VBL //e : Wait VBL high....
bpl .1
.2 lda VBL //e : wait VBL low
.2 lda IO.VBL //e : wait VBL low
bmi .2
.3 pha (3)
@ -499,17 +499,17 @@ CPU.Init >PUSHWI MSG.CPU
.5 pla
eor VBL
eor IO.VBL
bpl .3
lda VBL
lda IO.VBL
bmi .3
bra CPU.InitOK
*--------------------------------------
CPU.Init2c lda RDIOUDIS
CPU.Init2c lda IO.RDIOUDIS
pha
sta CLRIOUDIS
sta IO.CLRIOUDIS
lda IO.IIC.RDVBLMSK
pha Save VBLIRQ enable
@ -517,7 +517,7 @@ CPU.Init2c lda RDIOUDIS
lda IO.IIC.CLRVBLIRQ
.1 bit VBL Wait VBL high....
.1 bit IO.VBL Wait VBL high....
bpl .1
bit IO.IIC.CLRVBLIRQ clear //c IRQ
@ -539,7 +539,7 @@ CPU.Init2c lda RDIOUDIS
inc A2osX.CPUSPEED+1
ldy #0
.5 bit VBL Wait VBL high....
.5 bit IO.VBL Wait VBL high....
bpl .3
bit IO.IIC.CLRVBLIRQ clear //c IRQ
@ -552,7 +552,7 @@ CPU.Init2c lda RDIOUDIS
.8 pla
bpl CPU.InitOk
sta SETIOUDIS
sta IO.SETIOUDIS
*--------------------------------------
CPU.InitOk plp
@ -688,11 +688,11 @@ DevMgrInit >LDYAI MSG.DEV
jsr DevMgr.VXD
lda DEVCNT
lda GP.DEVCNT
sta .1+1
.1 ldx #$ff SELF MODIFIED
lda DEVLST,x
lda GP.DEVLST,x
and #$F0
asl
php Save Drive 1/2 in C
@ -709,9 +709,9 @@ DevMgrInit >LDYAI MSG.DEV
ora #$30
sta FD.BDEV.NAME+1 SnDy
lda DEVPTRS,x
lda GP.DEVPTRS,x
sta FD.BDEV+S.FD.DEV.BUSPTR
lda DEVPTRS+1,x
lda GP.DEVPTRS+1,x
sta FD.BDEV+S.FD.DEV.BUSPTR+1
sta ZPPtr1+1
@ -857,13 +857,13 @@ DevMgr.VXD >LDYAI VSD.PATCH
php
sei
bit RRAMWRAMBNK2
bit RRAMWRAMBNK2
sta CLRALTZP
bit IO.RRAMWRAMBNK2
bit IO.RRAMWRAMBNK2
sta IO.CLRALTZP
.81 ldx $FFFF SELF MODIFIED : Slot0n
sta SETALTZP
bit RRAMWRAMBNK1
bit RRAMWRAMBNK1
sta IO.SETALTZP
bit IO.RRAMWRAMBNK1
bit IO.RRAMWRAMBNK1
lda #A2osX.S.VXD
sta A2osX.S,x
@ -889,14 +889,14 @@ DevMgr.VXD >LDYAI VSD.PATCH
.19 sec
rts
*--------------------------------------
VSD.PATCH bit RRAMWRAMBNK2
VSD.PATCH bit IO.RRAMWRAMBNK2
jsr $D002
bit RRAMWRAMBNK1
bit IO.RRAMWRAMBNK1
rts
*--------------------------------------
VED.PATCH bit RRAMWRAMBNK2
VED.PATCH bit IO.RRAMWRAMBNK2
jsr $D401
bit RRAMWRAMBNK1
bit IO.RRAMWRAMBNK1
rts
*--------------------------------------
* Setup AuxLC $FFFE->Kernel IRQ Handler
@ -915,7 +915,7 @@ IrqMgrInit >LDYAI MSG.IRQ
>LDYAI GP.IRQ
>STYA K.MLI.PARAMS+2
>MLICALL MLIALLOCIRQ
>MLICALL MLI.ALLOCIRQ
bcs .9
lda K.MLI.PARAMS+1
@ -992,7 +992,7 @@ IrqMgrInit >LDYAI MSG.IRQ
sec
bra IrqMgrInit.8
.2 sta CLRPAGE2
.2 sta IO.CLRPAGE2
lda #$60
sta $5fa //c EXTINT COM1:Dont buffer but get IRQ
sta $5fb //c EXTINT COM2:Dont buffer but get IRQ
@ -1128,7 +1128,7 @@ IrqMgr.Mouse stz ZPPtr1 Try finding a Mouse Card...
sta IRQ.n0
bit RROMBNK2 Renable ROM to allow MOUSE II firmware works properly
bit IO.RROMBNK2 Renable ROM to allow MOUSE II firmware works properly
ldy #INITMOUSE
jsr .10
@ -1138,8 +1138,8 @@ IrqMgr.Mouse stz ZPPtr1 Try finding a Mouse Card...
lda #MOUSEMODx.INTVBL+MOUSEMODx.ACTIVE
jsr .10
bit RRAMWRAMBNK1 Back To LC Ram
bit RRAMWRAMBNK1
bit IO.RRAMWRAMBNK1 Back To LC Ram
bit IO.RRAMWRAMBNK1
ldy #SERVEMOUSE
lda (ZPPtr1),y
sta CORE.IRQM+1
@ -1202,11 +1202,11 @@ TskMgrInit >LDYAI MSG.TSK
ldy #S.PS.hENV
sta (pPS),y
sta SETWRITEAUX
sta IO.SETWRITEAUX
lda #0
sta (ZPPtr1) make sure blank!!
sta CLRWRITEAUX
sta IO.CLRWRITEAUX
>PUSHWZ
>PUSHWZ

View File

@ -4,7 +4,7 @@ NEW
* called directly by IRQ Vector $FFFE in AuxLC
* Must keep:
* A,X,Y
* SETREADAUX
* IO.SETREADAUX
* if we are here, Aux ZP/Stack already On
* Exit with RTI
* if A2osX Drivers cannot clear IRQ,
@ -26,29 +26,29 @@ IRQ.Handler cld
stx IRQ.5+1
sty IRQ.4+1
lda RD80STORE
and RDPAGE2
lda IO.RD80STORE
and IO.RDPAGE2
pha
sta CLRPAGE2
sta IO.CLRPAGE2
lda RDREADAUX
lda IO.RDREADAUX
pha
sta CLRREADAUX Make sure we can access FD.Table
sta IO.CLRREADAUX Make sure we can access FD.Table
lda RDWRITEAUX
lda IO.RDWRITEAUX
pha
sta CLRWRITEAUX Driver may R/W in screen holes
sta IO.CLRWRITEAUX Driver may R/W in screen holes
lda MSLOT Save MSLOT
sta IRQ.2+2
* lda RDCXROM C100-C7ff state
* lda IO.RDCXROM C100-C7ff state
* pha
* sta CLRCXROM Enable access to slot C100-C7ff space
* sta IO.CLRCXROM Enable access to slot C100-C7ff space
IRQ.JSR jsr CORE.IRQ.DEV SELF MODIFIED
* ldx #CLRCXROM
* ldx #IO.CLRCXROM
* pla Get CXROM State
* bpl .3
@ -64,26 +64,26 @@ IRQ.JSR jsr CORE.IRQ.DEV SELF MODIFIED
eor #$C0 ....mmm...not looking like Cn....
bne IRQ.3
sta CLRC8ROM Release $C800
sta IO.CLRC8ROM Release $C800
IRQ.2 lda $ff00 SELF MODIFIED
IRQ.3 pla Must keep Carry
bpl .1
sta SETWRITEAUX
sta IO.SETWRITEAUX
clv coming for AUX.....cancel switch
.1 pla
bpl .2
sta SETREADAUX
sta IO.SETREADAUX
clv coming for AUX.....cancel switch
.2 pla
bpl .3
sta SETPAGE2
sta IO.SETPAGE2
.3 bvc IRQ.4 if not V, skip task switching

View File

@ -158,195 +158,195 @@ K.SYSCALL .DA 0 $00 : STAT
.DA K.FreeMem K.FreeStkObj
*--------------------------------------
* LO Byte :
* #RRAMWRAMBNK1,#RRAMWRAMBNK2
* #IO.RRAMWRAMBNK1,#IO.RRAMWRAMBNK2
* HI Byte :
* Flags (ROOT....)
*--------------------------------------
K.SYSCALL.BANK .DA #RRAMWRAMBNK1 $00
K.SYSCALL.BANK .DA #IO.RRAMWRAMBNK1 $00
.DA #0
.DA #RRAMWRAMBNK1
.DA #IO.RRAMWRAMBNK1
.DA #0
.DA #RRAMWRAMBNK1
.DA #IO.RRAMWRAMBNK1
.DA #0
.DA #RRAMWRAMBNK1
.DA #IO.RRAMWRAMBNK1
.DA #0
.DA #RRAMWRAMBNK1
.DA #IO.RRAMWRAMBNK1
.DA #0
.DA #RRAMWRAMBNK1
.DA #IO.RRAMWRAMBNK1
.DA #0
.DA #RRAMWRAMBNK1
.DA #IO.RRAMWRAMBNK1
.DA #0
.DA #RRAMWRAMBNK1
.DA #IO.RRAMWRAMBNK1
.DA #0
.DA #RRAMWRAMBNK1 $10
.DA #IO.RRAMWRAMBNK1 $10
.DA #0
.DA #RRAMWRAMBNK1
.DA #IO.RRAMWRAMBNK1
.DA #0
.DA #RRAMWRAMBNK1
.DA #IO.RRAMWRAMBNK1
.DA #0
.DA #RRAMWRAMBNK1
.DA #IO.RRAMWRAMBNK1
.DA #0
.DA #RRAMWRAMBNK1
.DA #IO.RRAMWRAMBNK1
.DA #0
.DA #RRAMWRAMBNK1
.DA #IO.RRAMWRAMBNK1
.DA #0
.DA #RRAMWRAMBNK1
.DA #IO.RRAMWRAMBNK1
.DA #0
.DA #RRAMWRAMBNK1
.DA #IO.RRAMWRAMBNK1
.DA #0
.DA #RRAMWRAMBNK1 $20 : STDIO
.DA #IO.RRAMWRAMBNK1 $20 : STDIO
.DA #0
.DA #RRAMWRAMBNK1
.DA #IO.RRAMWRAMBNK1
.DA #0
.DA #RRAMWRAMBNK1
.DA #IO.RRAMWRAMBNK1
.DA #0
.DA #RRAMWRAMBNK1
.DA #IO.RRAMWRAMBNK1
.DA #0
.DA #RRAMWRAMBNK1
.DA #IO.RRAMWRAMBNK1
.DA #0
.DA #RRAMWRAMBNK1
.DA #IO.RRAMWRAMBNK1
.DA #0
.DA #RRAMWRAMBNK1
.DA #IO.RRAMWRAMBNK1
.DA #0
.DA #RRAMWRAMBNK1
.DA #IO.RRAMWRAMBNK1
.DA #0
.DA #RRAMWRAMBNK1 $30
.DA #IO.RRAMWRAMBNK1 $30
.DA #0
.DA #RRAMWRAMBNK1
.DA #IO.RRAMWRAMBNK1
.DA #0
.DA #RRAMWRAMBNK1
.DA #IO.RRAMWRAMBNK1
.DA #0
.DA #RRAMWRAMBNK1
.DA #IO.RRAMWRAMBNK1
.DA #0
.DA #RRAMWRAMBNK1
.DA #IO.RRAMWRAMBNK1
.DA #0
.DA #RRAMWRAMBNK1
.DA #IO.RRAMWRAMBNK1
.DA #0
.DA #RRAMWRAMBNK1
.DA #IO.RRAMWRAMBNK1
.DA #0
.DA #RRAMWRAMBNK1
.DA #IO.RRAMWRAMBNK1
.DA #0
.DA #RRAMWRAMBNK1 $40
.DA #IO.RRAMWRAMBNK1 $40
.DA #0
.DA #RRAMWRAMBNK1
.DA #IO.RRAMWRAMBNK1
.DA #0
.DA #RRAMWRAMBNK1
.DA #IO.RRAMWRAMBNK1
.DA #0
.DA #RRAMWRAMBNK1
.DA #IO.RRAMWRAMBNK1
.DA #0
.DA #RRAMWRAMBNK1
.DA #IO.RRAMWRAMBNK1
.DA #0
.DA #RRAMWRAMBNK1
.DA #IO.RRAMWRAMBNK1
.DA #0
.DA #RRAMWRAMBNK1
.DA #IO.RRAMWRAMBNK1
.DA #0
.DA #RRAMWRAMBNK1
.DA #IO.RRAMWRAMBNK1
.DA #0
.DA #RRAMWRAMBNK1 $50
.DA #IO.RRAMWRAMBNK1 $50
.DA #0
.DA #RRAMWRAMBNK1
.DA #IO.RRAMWRAMBNK1
.DA #0
.DA #RRAMWRAMBNK1
.DA #IO.RRAMWRAMBNK1
.DA #0
.DA #RRAMWRAMBNK1
.DA #IO.RRAMWRAMBNK1
.DA #0
.DA #RRAMWRAMBNK1 $58 : PRODOS
.DA #IO.RRAMWRAMBNK1 $58 : PRODOS
.DA #0
.DA #RRAMWRAMBNK1
.DA #IO.RRAMWRAMBNK1
.DA #0
.DA #RRAMWRAMBNK1
.DA #IO.RRAMWRAMBNK1
.DA #0
.DA #RRAMWRAMBNK1
.DA #IO.RRAMWRAMBNK1
.DA #0
*--------------------------------------
.DA #RRAMWRAMBNK2 $60 : MOUNT
.DA #IO.RRAMWRAMBNK2 $60 : MOUNT
.DA #0
.DA #RRAMWRAMBNK2
.DA #IO.RRAMWRAMBNK2
.DA #0
.DA #RRAMWRAMBNK2 $64 : STKOBJ
.DA #IO.RRAMWRAMBNK2 $64 : STKOBJ
.DA #0
.DA #RRAMWRAMBNK2
.DA #IO.RRAMWRAMBNK2
.DA #0
.DA #RRAMWRAMBNK2 $68 : ARG
.DA #IO.RRAMWRAMBNK2 $68 : ARG
.DA #0
.DA #RRAMWRAMBNK2
.DA #IO.RRAMWRAMBNK2
.DA #0
.DA #RRAMWRAMBNK2
.DA #IO.RRAMWRAMBNK2
.DA #0
.DA #RRAMWRAMBNK2
.DA #IO.RRAMWRAMBNK2
.DA #0
.DA #RRAMWRAMBNK2 $70 : STDLIB
.DA #IO.RRAMWRAMBNK2 $70 : STDLIB
.DA #0
.DA #RRAMWRAMBNK2
.DA #IO.RRAMWRAMBNK2
.DA #0
.DA #RRAMWRAMBNK2
.DA #IO.RRAMWRAMBNK2
.DA #0
.DA #RRAMWRAMBNK2
.DA #IO.RRAMWRAMBNK2
.DA #0
.DA #RRAMWRAMBNK2
.DA #IO.RRAMWRAMBNK2
.DA #0
.DA #RRAMWRAMBNK2
.DA #IO.RRAMWRAMBNK2
.DA #0
.DA #RRAMWRAMBNK2
.DA #IO.RRAMWRAMBNK2
.DA #0
.DA #RRAMWRAMBNK2
.DA #IO.RRAMWRAMBNK2
.DA #0
.DA #RRAMWRAMBNK2 $80 : STRING
.DA #IO.RRAMWRAMBNK2 $80 : STRING
.DA #0
.DA #RRAMWRAMBNK2
.DA #IO.RRAMWRAMBNK2
.DA #0
.DA #RRAMWRAMBNK2
.DA #IO.RRAMWRAMBNK2
.DA #0
.DA #RRAMWRAMBNK2
.DA #IO.RRAMWRAMBNK2
.DA #0
.DA #RRAMWRAMBNK2
.DA #IO.RRAMWRAMBNK2
.DA #0
.DA #RRAMWRAMBNK2
.DA #IO.RRAMWRAMBNK2
.DA #0
.DA #RRAMWRAMBNK2
.DA #IO.RRAMWRAMBNK2
.DA #0
.DA #RRAMWRAMBNK2
.DA #IO.RRAMWRAMBNK2
.DA #0
.DA #RRAMWRAMBNK1 $90 : DEV
.DA #IO.RRAMWRAMBNK1 $90 : DEV
.DA #0
.DA #RRAMWRAMBNK1
.DA #IO.RRAMWRAMBNK1
.DA #0
.DA #RRAMWRAMBNK1
.DA #IO.RRAMWRAMBNK1
.DA #0
.DA #RRAMWRAMBNK1
.DA #IO.RRAMWRAMBNK1
.DA #0
.DA #RRAMWRAMBNK2 $98 : BIN
.DA #IO.RRAMWRAMBNK2 $98 : BIN
.DA #0
.DA #RRAMWRAMBNK2
.DA #IO.RRAMWRAMBNK2
.DA #0
.DA #RRAMWRAMBNK2
.DA #IO.RRAMWRAMBNK2
.DA #0
.DA #RRAMWRAMBNK2
.DA #IO.RRAMWRAMBNK2
.DA #0
.DA #RRAMWRAMBNK2 $A0 : PS
.DA #IO.RRAMWRAMBNK2 $A0 : PS
.DA #0
.DA #RRAMWRAMBNK2
.DA #IO.RRAMWRAMBNK2
.DA #0
.DA #RRAMWRAMBNK2
.DA #IO.RRAMWRAMBNK2
.DA #0
.DA #RRAMWRAMBNK2
.DA #IO.RRAMWRAMBNK2
.DA #0
.DA #RRAMWRAMBNK2
.DA #IO.RRAMWRAMBNK2
.DA #0
.DA #RRAMWRAMBNK2
.DA #IO.RRAMWRAMBNK2
.DA #0
.DA #RRAMWRAMBNK2
.DA #IO.RRAMWRAMBNK2
.DA #0
.DA #RRAMWRAMBNK2
.DA #IO.RRAMWRAMBNK2
.DA #0
.DA #0 $B0 : STRV
@ -440,26 +440,26 @@ K.SYSCALL.BANK .DA #RRAMWRAMBNK1 $00
K.SYSCALL2 bit K.SYSCALL.BANK,x Get Target BNK
bvc K.SYSCALL2.BANK
K.SYSCALL2.AUX sta SETREADAUX MAIN to AUX Mem API
sta SETWRITEAUX
K.SYSCALL2.AUX sta IO.SETREADAUX MAIN to AUX Mem API
sta IO.SETWRITEAUX
jsr K.SYSCALL.JMP
sta CLRREADAUX
sta CLRWRITEAUX
sta IO.CLRREADAUX
sta IO.CLRWRITEAUX
rts
K.SYSCALL2.MAIN sta CLRREADAUX Coming from KERNEL in AUX...
sta CLRWRITEAUX
K.SYSCALL2.MAIN sta IO.CLRREADAUX Coming from KERNEL in AUX...
sta IO.CLRWRITEAUX
jsr .1
sta SETREADAUX
sta SETWRITEAUX
sta IO.SETREADAUX
sta IO.SETWRITEAUX
rts
.1 bit K.SYSCALL.BANK,x Get Target LC BNK
K.SYSCALL2.BANK bpl K.SYSCALL.JMP 0, E000, no BNK change
sta .7+1
lda $D000 #RRAMWRAMBNK1 or #RRAMWRAMBNK2
lda $D000 #IO.RRAMWRAMBNK1 or #IO.RRAMWRAMBNK2
cmp K.SYSCALL.BANK,x
beq .7
@ -468,14 +468,14 @@ K.SYSCALL2.BANK bpl K.SYSCALL.JMP 0, E000, no BNK change
lda K.SYSCALL.BANK,x
tax get Target BNK in x
bit $C000,x switch to Target BNK
bit $C000,x
* bit $C000,x
jsr .6
stx .5+1 Save X
plx get back Source BNK
bit $C000,x switch to Target BNK
bit $C000,x
* bit $C000,x
.5 ldx #$ff SELF MODIFIED
rts
@ -498,11 +498,11 @@ K.SYSCALL.JMPX2 clc
JMPXA >PULLA
K.SYSCALL.JMPX sta SETREADAUX
sta SETWRITEAUX
K.SYSCALL.JMPX sta IO.SETREADAUX
sta IO.SETWRITEAUX
jsr JMPX
sta CLRREADAUX
sta CLRWRITEAUX
sta IO.CLRREADAUX
sta IO.CLRWRITEAUX
rts
*--------------------------------------
MAN

View File

@ -54,9 +54,9 @@ K.Realloc >PULLA
>STYA A4L Save MAIN Ptr
lda .7+1
sta SETREADAUX
sta IO.SETREADAUX
jsr MEM.SetA1A2 Setup AUX base & End Ptrs
sta CLRREADAUX
sta IO.CLRREADAUX
clc Aux To Main
jsr XMov
@ -221,10 +221,10 @@ MEM.GetMem.YAX stx MEM.ReqFlags
ldy #S.MEM.REFCNT
sta (ZPMemMgrSPtr),y
lda RDREADAUX
lda IO.RDREADAUX
pha
sta CLRREADAUX
sta IO.CLRREADAUX
ldy #S.PS.PID
lda (pPS),y
@ -235,7 +235,7 @@ MEM.GetMem.YAX stx MEM.ReqFlags
pla
bpl .80
sta SETREADAUX
sta IO.SETREADAUX
.80 clc
@ -535,11 +535,11 @@ Mem.IncRefCnt ldy #S.MEM.REFCNT
* (X,Y unmodified)
*\--------------------------------------
*--------------------------------------
MEM.DupX sta SETREADAUX
sta SETWRITEAUX
MEM.DupX sta IO.SETREADAUX
sta IO.SETWRITEAUX
jsr MEM.Dup
sta CLRREADAUX
sta CLRWRITEAUX
sta IO.CLRREADAUX
sta IO.CLRWRITEAUX
rts
*--------------------------------------
MEM.Dup jsr K.GetMemPtr
@ -589,8 +589,8 @@ MEM.MoveToMain sec
stx .2+1 Save AUX hMem
>STYA A2L Save LEN to copy/move
sta CLRREADAUX Make sure MAIN !!!!
sta CLRWRITEAUX
sta IO.CLRREADAUX Make sure MAIN !!!!
sta IO.CLRWRITEAUX
jsr K.GetMem
bcs MEM.Dup.RTS
@ -598,9 +598,9 @@ MEM.MoveToMain sec
>STYA A4L Save MAIN Ptr
lda .2+1 Get AUX mem Ptr
sta SETREADAUX
sta IO.SETREADAUX
jsr MEM.SetA1A2 Setup AUX base & End Ptrs
sta CLRREADAUX
sta IO.CLRREADAUX
clc Aux To Main
jsr XMov

View File

@ -74,7 +74,7 @@ PIPE.WRITE ldy #S.FD.PIPE.S
lda (pFD),y
tay
sta SETWRITEAUX
sta IO.SETWRITEAUX
.1 inx
bne .2
@ -109,7 +109,7 @@ PIPE.WRITE ldy #S.FD.PIPE.S
sta PIPE.DSTBUF+1
bra .1
.8 sta CLRWRITEAUX
.8 sta IO.CLRWRITEAUX
tya
ldy #S.FD.PIPE.Head
@ -181,7 +181,7 @@ PIPE.READ ldy #S.FD.PIPE.Used+1
lda (pFD),y
tay
sta SETREADAUX
sta IO.SETREADAUX
.1 inx
bne .2
@ -216,7 +216,7 @@ PIPE.READ ldy #S.FD.PIPE.Used+1
sta PIPE.SRCBUF+1 Restore Pipe Buf base
bra .1
.8 sta CLRREADAUX
.8 sta IO.CLRREADAUX
tya
ldy #S.FD.PIPE.Tail

View File

@ -13,7 +13,7 @@ NEW
*\--------------------------------------
K.Online >PULLW K.MLI.PARAMS+2
>PULLB K.MLI.PARAMS+1
>MLICALL MLIONLINE
>MLICALL MLI.ONLINE
rts
*/--------------------------------------
* # ChTyp
@ -29,7 +29,7 @@ K.Online >PULLW K.MLI.PARAMS+2
K.ChTyp jsr PFT.CheckPath1
bcs PRODOS.RET3
>MLICALL MLIGETFILEINFO
>MLICALL MLI.GFINFO
bcs PRODOS.RET3
>PULLB K.MLI.PARAMS+S.FI.T
@ -48,7 +48,7 @@ K.ChTyp jsr PFT.CheckPath1
K.ChAux jsr PFT.CheckPath2
bcs PRODOS.RET4
>MLICALL MLIGETFILEINFO
>MLICALL MLI.GFINFO
bcs PRODOS.RET4
>PULLW K.MLI.PARAMS+S.FI.AUXTYPE
@ -67,12 +67,12 @@ K.ChAux jsr PFT.CheckPath2
K.SetAttr jsr PFT.CheckPath1
bcs PRODOS.RET3
>MLICALL MLIGETFILEINFO
>MLICALL MLI.GFINFO
bcs PRODOS.RET3
>PULLB K.MLI.PARAMS+S.FI.A
PRODOS.SFIRET2 >MLICALL MLISETFILEINFO
PRODOS.SFIRET2 >MLICALL MLI.SFINFO
bra PRODOS.RET2
PRODOS.RET4 inc pStack

View File

@ -292,9 +292,9 @@ PS.CreateChild ldx #0
ldy #S.PS.hENV
sta (PS.NewPSPtr),y
sta SETWRITEAUX
sta IO.SETWRITEAUX
jsr Mem.SetOwner Set Ownership
sta CLRWRITEAUX
sta IO.CLRWRITEAUX
ldy #S.PS.hStdIn
@ -1055,11 +1055,11 @@ K.GetMemStat >STYA ZPPtr1
dex
bpl .1
sta SETREADAUX
sta IO.SETREADAUX
jsr .2
sta CLRREADAUX
sta IO.CLRREADAUX
.2 ldx #7

View File

@ -161,9 +161,9 @@ PWDX.PutPW.1 jsr K.GetmemPtr
bcs .99
ldy #S.PW.UID
sta CLRWRITEAUX
sta IO.CLRWRITEAUX
sta (TXTPTR),y
sta SETWRITEAUX
sta IO.SETWRITEAUX
.13 jsr PWDX.GetRecLen

View File

@ -28,38 +28,38 @@ SHARED.IsDigit.8
clc
rts
*--------------------------------------
SHARED.TXTPTRgY sta CLRREADAUX
SHARED.TXTPTRgY sta IO.CLRREADAUX
lda (TXTPTR),y
sta SETREADAUX
sta IO.SETREADAUX
rts
*--------------------------------------
SHARED.TXTPTRgn sta CLRREADAUX
SHARED.TXTPTRgn sta IO.CLRREADAUX
lda (TXTPTR)
sta SETREADAUX
sta IO.SETREADAUX
beq SHARED.RTS
SHARED.TXTPTRn inc TXTPTR
bne SHARED.RTS
inc TXTPTR+1
rts
*--------------------------------------
SHARED.FORPNTgY sta CLRREADAUX
SHARED.FORPNTgY sta IO.CLRREADAUX
lda (FORPNT),y
sta SETREADAUX
sta IO.SETREADAUX
rts
*--------------------------------------
SHARED.FORPNTpY sta CLRWRITEAUX
SHARED.FORPNTpY sta IO.CLRWRITEAUX
sta (FORPNT),y
sta SETWRITEAUX
sta IO.SETWRITEAUX
rts
*--------------------------------------
SHARED.FORPNTgn sta CLRREADAUX
SHARED.FORPNTgn sta IO.CLRREADAUX
lda (FORPNT)
sta SETREADAUX
sta IO.SETREADAUX
bra SHARED.FORPNTn
*--------------------------------------
SHARED.FORPNTpn sta CLRWRITEAUX
SHARED.FORPNTpn sta IO.CLRWRITEAUX
sta (FORPNT)
sta SETWRITEAUX
sta IO.SETWRITEAUX
SHARED.FORPNTn inc FORPNT
bne SHARED.RTS
inc FORPNT+1
@ -116,9 +116,9 @@ SHARED.PullP2P1 >PULLW ZPPtr2
>PULLW ZPPtr1
rts
*--------------------------------------
SHARED.P3gY sta CLRREADAUX
SHARED.P3gY sta IO.CLRREADAUX
lda (ZPPtr3),y
sta SETREADAUX
sta IO.SETREADAUX
rts
*--------------------------------------
MAN

View File

@ -18,7 +18,7 @@ K.ChMod jsr PFT.CheckPath2
stz K.MLI.PARAMS+3+S.FIEX.ACL read mode
>MLICALL MLIACL
>MLICALL MLI.ACL
bcs .9
>LDYA K.S.STAT+S.STAT.MODE
@ -27,7 +27,7 @@ K.ChMod jsr PFT.CheckPath2
lda #$57 write mode
sta K.MLI.PARAMS+3+S.FIEX.ACL
>MLICALL MLIACL
>MLICALL MLI.ACL
.9 rts
STAT.RET4 inc pStack
@ -66,7 +66,7 @@ K.FStat ldy #2
lda (pFD),y
sta K.MLI.PARAMS+1
>MLICALL MLIGETEOF
>MLICALL MLI.GETEOF
bcs STAT.RTS
ldx #2

View File

@ -501,7 +501,7 @@ K.FFlush jsr PFT.CheckNodeA
lda (pFD)
bne STDIO.IOERR
>MLICALL MLIFLUSH
>MLICALL MLI.FLUSH
.9 rts
*--------------------------------------
@ -549,12 +549,12 @@ K.FSeek ldy #5
bra .8
* SEEK.CUR
.20 >MLICALL MLIGETMARK
.20 >MLICALL MLI.GETMARK
bcc .8
rts
* SEEK.END
.30 >MLICALL MLIGETEOF
.30 >MLICALL MLI.GETEOF
bcs .9
.8 ldy #0
@ -572,13 +572,13 @@ K.FSeek ldy #5
bcs .99 Offset out of range!
.82 >MLICALL MLISETMARK
.82 >MLICALL MLI.SETMARK
bcc .9
cmp #MLI.E.BEYEOF
bne .9
>MLICALL MLISETEOF
>MLICALL MLI.SETEOF
bcc .82
.9 rts
@ -631,7 +631,7 @@ K.FEOF jsr PFT.CheckNodeA
K.FTell jsr PFT.CheckNodeA
bcs .9
>MLICALL MLIGETMARK
>MLICALL MLI.GETMARK
bcs .9
lda #0
@ -658,7 +658,7 @@ K.FTell jsr PFT.CheckNodeA
K.Remove jsr PFT.CheckPathYA
bcs .9
>MLICALL MLIDESTROY
>MLICALL MLI.DESTROY
.9 rts
*/--------------------------------------
* # Rename
@ -694,7 +694,7 @@ K.Rename jsr PFT.CheckPath2
.8 sty K.Buf256
>LDYAI K.Buf256
>STYA K.MLI.PARAMS+3
>MLICALL MLIRENAME
>MLICALL MLI.RENAME
.9 >RET 4
*/--------------------------------------

View File

@ -34,8 +34,8 @@ TERM.WRITE jsr TERM.GetIOCTLBufCntDCB
*--------------------------------------
TERM.TOAUX lda A2osX.ASCREEN
sta SETREADAUX
sta SETWRITEAUX
sta IO.SETREADAUX
sta IO.SETWRITEAUX
cmp (ZPDCBPtr) #S.DCB.TTY.DEVID
@ -47,8 +47,8 @@ TERM.TOAUX lda A2osX.ASCREEN
jsr .8
sta CLRREADAUX
sta CLRWRITEAUX
sta IO.CLRREADAUX
sta IO.CLRWRITEAUX
rts
.8 jmp (TERMX,x)
@ -84,12 +84,12 @@ TERM.GetDCB ldy #S.FD.DEV.DCBPTR
rts
*--------------------------------------
TERM.GetBufByte sta CLRREADAUX
TERM.GetBufByte sta IO.CLRREADAUX
lda (ZPBufPtr)
sta SETREADAUX
sta IO.SETREADAUX
rts
*--------------------------------------
TERM.GetDevName sta CLRREADAUX
TERM.GetDevName sta IO.CLRREADAUX
lda pFD
clc
@ -100,7 +100,7 @@ TERM.GetDevName sta CLRREADAUX
adc /S.FD.DEV
sta TXTPTR+1
sta SETREADAUX
sta IO.SETREADAUX
rts
*--------------------------------------
MAN

View File

@ -46,7 +46,7 @@ TERMX.STATUS tya
.HS 2C BIT ABS
.1 ldy #3
sta CLRWRITEAUX
sta IO.CLRWRITEAUX
.2 lda TERMX.DIB,y
sta (ZPBufPtr),y
@ -79,7 +79,7 @@ TERMX.STATUS tya
jsr TERMX.CheckOA
bmi .7
bit KBD
bit IO.KBD
bmi .8
.7 lda #$ff EOF = TRUE
@ -102,9 +102,9 @@ TERMX.OPEN jsr TERMX.ISOPENED
lda IO.hFD in ZPTMP
sta CLRWRITEAUX
sta IO.CLRWRITEAUX
sta A2osX.SCRNDEVS,x
sta SETWRITEAUX
sta IO.SETWRITEAUX
ldy #S.DCB.TTY.S
lda (ZPDCBPtr),y
@ -115,12 +115,12 @@ TERMX.OPEN jsr TERMX.ISOPENED
*--------------------------------------
TERMX.CONTROL lda (ZPDCBPtr) #S.DCB.TTY.DEVID
sta CLRWRITEAUX
sta IO.CLRWRITEAUX
sta A2osX.ASCREEN
sta SETWRITEAUX
sta IO.SETWRITEAUX
sta SETTEXT
sta CLRMIXED
sta IO.SETTEXT
sta IO.CLRMIXED
jsr TERMX.SCRCPY
@ -139,9 +139,9 @@ TERMX.CLOSE jsr TERMX.ISOPENED
lda (ZPDCBPtr) #S.DCB.TTY.DEVID
tax
sta CLRWRITEAUX
sta IO.CLRWRITEAUX
stz A2osX.SCRNDEVS,x
sta SETWRITEAUX
sta IO.SETWRITEAUX
clc
rts
@ -163,10 +163,10 @@ TERMX.READ bit bActive is screen active?
jsr TERMX.CheckOA
bmi .6 Open apple key, not for us...
lda KBD
lda IO.KBD
bpl .6
sta KBDSTROBE
sta IO.KBDSTROBE
and #$7F
cmp #C.ESC
@ -237,16 +237,16 @@ TERMX.READ bit bActive is screen active?
pla
ldy .8+1
sta CLRWRITEAUX
sta IO.CLRWRITEAUX
sta (ZPBufPtr),y
sta SETWRITEAUX
sta IO.SETWRITEAUX
iny
sty .8+1
bra .70
.8 lda #$ff SELF MODIFIED
sta CLRWRITEAUX
sta IO.CLRWRITEAUX
ldy #S.IOCTL.BYTECNT
sta (ZPIOCTL),y
@ -1118,10 +1118,10 @@ TERMX.ED.2 sty .1+1
bit bActive
bpl .4
sta SETPAGE2
sta IO.SETPAGE2
jsr .7
sta CLRPAGE2
sta IO.CLRPAGE2
jsr .7
.4 ldy #79
@ -1277,7 +1277,7 @@ TERMX.IAC.SDONT ldx #DONT
jsr TERMX.COUT
jmp TERMX.SETM.0
*--------------------------------------
TERMX.CheckOA lda OPENAPPLE
TERMX.CheckOA lda IO.OPENAPPLE
php
bpl .5 Restore Title
@ -1353,14 +1353,14 @@ TERMX.SCR0CPY lda ZPDCBPtr
ldx #78
sta SETPAGE2
sta IO.SETPAGE2
ldy #39
jsr .8
ldx #79
sta CLRPAGE2
sta IO.CLRPAGE2
ldy #39
@ -1409,10 +1409,10 @@ TERMX.COPY.XtoL1
lda SCR.BH,x
sta ZPScrBL2+1
sta SETPAGE2
sta IO.SETPAGE2
jsr .6
sta CLRPAGE2
sta IO.CLRPAGE2
.6 ldy #39
@ -1490,9 +1490,9 @@ SetCharAtY.SCR1 lsr ZPTmpX
bcs .2
sta SETPAGE2
sta IO.SETPAGE2
sta (ZPScrBL1),y
sta CLRPAGE2
sta IO.CLRPAGE2
rts
.2 sta (ZPScrBL1),y

View File

@ -12,8 +12,8 @@ NEW
* S.TIME filled with System date/time
*\--------------------------------------
K.Time >PULLW FORPNT
>MLICALL MLIGETTIME
>LDYAI DATELO
>MLICALL MLI.GETTIME
>LDYAI GP.DATE
>STYA TXTPTR
ldx #SYS.PTime2Time
jmp K.SYSCALL.JMPX

View File

@ -198,7 +198,7 @@ K.ChOwn jsr PFT.CheckPath2
stz K.MLI.PARAMS+3+S.FIEX.ACL read mode
>MLICALL MLIACL
>MLICALL MLI.ACL
bcs .9
lda (pStack)
@ -215,7 +215,7 @@ K.ChOwn jsr PFT.CheckPath2
.2 lda #$57 write mode
sta K.MLI.PARAMS+3+S.FIEX.ACL
>MLICALL MLIACL
>MLICALL MLI.ACL
.9 >RET 4
*--------------------------------------

View File

@ -67,7 +67,7 @@ D1 .DA #0
.DA D1.S
D1.B .PH $D000
.DA #RRAMWRAMBNK1
.DA #IO.RRAMWRAMBNK1
.INB usr/src/sys/kernel.s.stat
.INB usr/src/sys/kernel.s.dirent
.INB usr/src/sys/kernel.s.unistd
@ -83,7 +83,7 @@ D2 .DA #0
.DA D2.S
D2.B .PH $D000
.DA #RRAMWRAMBNK2
.DA #IO.RRAMWRAMBNK2
.INB usr/src/sys/kernel.s.mount
.INB usr/src/sys/kernel.s.stkobj
.INB usr/src/sys/kernel.s.arg

136
SYS/KRNL8M.S.txt Normal file
View File

@ -0,0 +1,136 @@
NEW
AUTO 3,1
.LIST OFF
.OP 65C02
.OR $2000
.TF sys/krnl8m
.INB inc/macros.i
.INB inc/a2osx.i
.INB inc/io.i
.INB inc/io.iic.i
.INB inc/io.iigs.i
.INB inc/mli.i
.INB inc/mli.e.i
.INB inc/net.telnet.i
.INB inc/xy.mouse.i
.INB inc/kernel.i
.INB usr/src/sys/kernel.s.def
.INB usr/src/sys/kernel.s.init
.INB usr/src/shared/x.printf.s
A2osX.Unpak >STYA ZPOutBufPtr
.INB usr/src/shared/x.unpak.s
PAKME.MAIN .DA MAIN
PAKME.AUX .DA AUX
PAKME.D1 .DA D1
PAKME.D2 .DA D2
PAKME.E0 .DA E0
MAIN .DA #0
.DA MAIN.S
MAIN.B .PH $1000
.INB usr/src/sys/kernel.s.gp
.INB usr/src/sys/kernel.s.core
.INB usr/src/sys/kernel.s.drv
.INB usr/src/sys/kernel.s.pft
.INB usr/src/sys/kernel.s.fs
.INB usr/src/sys/kernel.s.mathf
.EP
MAIN.S .EQ *-MAIN.B
AUX .DA #0
.DA AUX.S
AUX.B .PH Mem.XHiMem
.DA SHARED.TXTPTRgn OSD.TXTPTRgn
.INB usr/src/sys/kernel.s.jmpx
.INB usr/src/sys/kernel.s.termx
.INB usr/src/sys/kernel.s.strvx
.INB usr/src/sys/kernel.s.envx
.INB usr/src/sys/kernel.s.timex
.INB usr/src/sys/kernel.s.md5x
.INB usr/src/sys/kernel.s.pwdx
.INB usr/src/sys/kernel.s.slistx
.INB usr/src/sys/kernel.s.blistx
.INB usr/src/sys/kernel.s.errorx
.EP
AUX.S .EQ *-AUX.B
D1 .DA #0
.DA D1.S
D1.B .PH $D000
.DA #IO.RRAMWRAMBNK1
.INB usr/src/sys/kernel.s.stat
.INB usr/src/sys/kernel.s.dirent
.INB usr/src/sys/kernel.s.unistd
.INB usr/src/sys/kernel.s.stdio
.INB usr/src/sys/kernel.s.prodos
.INB usr/src/sys/kernel.s.dev
.INB usr/src/sys/kernel.s.sock
.INB usr/src/sys/kernel.s.pipe
.EP
D1.S .EQ *-D1.B
D2 .DA #0
.DA D2.S
D2.B .PH $D000
.DA #IO.RRAMWRAMBNK2
.INB usr/src/sys/kernel.s.mount
.INB usr/src/sys/kernel.s.stkobj
.INB usr/src/sys/kernel.s.arg
.INB usr/src/sys/kernel.s.error
.INB usr/src/sys/kernel.s.stdlib
.INB usr/src/sys/kernel.s.string
.INB usr/src/sys/kernel.s.bin
.INB usr/src/sys/kernel.s.ps
.EP
D2.S .EQ *-D2.B
E0 .DA #0
.DA E0.S
E0.B .PH $E000
.INB usr/src/sys/kernel.s.jmp
.INB usr/src/sys/kernel.s.irq
.INB usr/src/sys/kernel.s.shared
.INB usr/src/sys/kernel.s.math
.INB usr/src/sys/kernel.s.math16
.INB usr/src/sys/kernel.s.math32
.INB usr/src/sys/kernel.s.term
.INB usr/src/sys/kernel.s.strv
.INB usr/src/sys/kernel.s.env
.INB usr/src/sys/kernel.s.time
.INB usr/src/sys/kernel.s.md5
.INB usr/src/sys/kernel.s.pwd
.INB usr/src/sys/kernel.s.slist
.INB usr/src/sys/kernel.s.mem
DevMgr.Timer .BS 1
DevMgr.Stat .DA DevMgr.FreeMem
DevMgr.Free .DA DevMgr.FreeMem
.DA DevMgr.HiMem
DevMgr.FreeMem .EQ *
.EP
E0.S .EQ *-E0.B
.AS "PAKME" TAG
.DA $2000 BIN ORG
.DA #5 Chunk Count
.DA PAKME.MAIN Chunks
.INB usr/src/sys/kernel.s.ctrl
MAN
SAVE usr/src/sys/krnl8m.s
ASM

View File

@ -130,17 +130,17 @@ RW.CheckRAM3 jsr RW.ONLINE MLI Online at S3D2
clc
.9 rts
*--------------------------------------
RW.DisableRAM lda DEVPTRS3D2
cmp DEVPTRS S0D1=NOVEV
RW.DisableRAM lda GP.DEVPTRS3D2
cmp GP.DEVPTRS S0D1=NOVEV
bne .1
lda DEVPTRS3D2+1
cmp DEVPTRS+1 S0D1=NODEV
lda GP.DEVPTRS3D2+1
cmp GP.DEVPTRS+1 S0D1=NODEV
beq .8 S3D2=NODEV, nothing to do
.1 ldx DEVCNT
.1 ldx GP.DEVCNT
.2 lda DEVLST,x LOOKING FOR $BF, $BB, $B7, $B3
.2 lda GP.DEVLST,x LOOKING FOR $BF, $BB, $B7, $B3
and #$F3
cmp #$B3
beq .3
@ -151,22 +151,22 @@ RW.DisableRAM lda DEVPTRS3D2
sec No device found, exit with error
rts
.3 cpx DEVCNT
.3 cpx GP.DEVCNT
beq .5
.4 lda DEVLST+1,x
sta DEVLST,x
.4 lda GP.DEVLST+1,x
sta GP.DEVLST,x
inx
cpx DEVCNT
cpx GP.DEVCNT
bne .4
.5 ldx DEVCNT
stz DEVLST,x
dec DEVCNT
lda DEVPTRS
sta DEVPTRS3D2
lda DEVPTRS+1
sta DEVPTRS3D2+1
.5 ldx GP.DEVCNT
stz GP.DEVLST,x
dec GP.DEVCNT
lda GP.DEVPTRS
sta GP.DEVPTRS3D2
lda GP.DEVPTRS+1
sta GP.DEVPTRS3D2+1
jsr RW.ONLINE
@ -174,7 +174,7 @@ RW.DisableRAM lda DEVPTRS3D2
rts
*--------------------------------------
RW.ONLINE jsr MLI
.DA #MLIONLINE
.DA #MLI.ONLINE
.DA RW.ONLINEPARAM
rts
*--------------------------------------
@ -190,7 +190,7 @@ RW.DetectHW php
sta .3+1
sta .6+1
sta SETALTZP
sta IO.SETALTZP
ldx #0 start detection at page $00
@ -253,7 +253,7 @@ RW.DetectHW php
dey
bpl .6
sta CLRALTZP
sta IO.CLRALTZP
plp
txa PGCNT > 0 ?
@ -270,8 +270,8 @@ RW.DetectHW php
.9 sec
rts
*--------------------------------------
RW.Install lda RRAMWRAMBNK1
lda RRAMWRAMBNK1
RW.Install lda IO.RRAMWRAMBNK1
lda IO.RRAMWRAMBNK1
ldx #RWDRV.SIZE
@ -292,9 +292,9 @@ RW.Install lda RRAMWRAMBNK1
sta RWDRV.IO1+1
sta RWDRV.EXIT+1
lda RROMBNK1
lda IO.RROMBNK1
sta SETWRITEAUX
sta IO.SETWRITEAUX
ldx #RWDRVX.SIZE
@ -308,16 +308,16 @@ RW.Install lda RRAMWRAMBNK1
sta RWDRVX.XM.IO2+1
sta RWDRVX.XM.IO3+1
sta CLRWRITEAUX
inc DEVCNT
ldx DEVCNT
sta IO.CLRWRITEAUX
inc GP.DEVCNT
ldx GP.DEVCNT
lda #$B0 Slot 3,Drive 2,0=Not Removable, 0=no int, 00=1 Volume
sta DEVLST,x
sta GP.DEVLST,x
lda #RWDRV.START
sta DEVPTRS3D2
sta GP.DEVPTRS3D2
lda /RWDRV.START
sta DEVPTRS3D2+1
sta GP.DEVPTRS3D2+1
clc
rts
@ -329,24 +329,30 @@ RW.Format jsr RW.BLOCK.SET00
lda #0
ror
sta RW.BLOCK2.TB
jsr MLI
.DA #MLIGETTIME
.DA #MLI.GETTIME
.DA 0
ldx #3
.1 lda DATELO,x
.1 lda GP.DATE,x
sta RW.BLOCK2.CT,x
dex
bpl .1
ldx #RW.BLOCK2.END-RW.BLOCK2
.2 lda RW.BLOCK2-1,x
sta RW.BLOCK-1,x
dex
bne .2
jsr MLI Write Block 2,First VOL directory block
.DA #MLIWRITEBLOCK
.DA #MLI.WRITEBLOCK
.DA RW.MLIWRITEBLOCK
bcc .22
rts
*--------------------------------------
.22 jsr RW.BLOCK.SET00
@ -356,9 +362,10 @@ RW.Format jsr RW.BLOCK.SET00
inc RW.MLIWRITEBLOCK.BLK
jsr MLI Write Block 3,Last VOL directory block
.DA #MLIWRITEBLOCK
.DA #MLI.WRITEBLOCK
.DA RW.MLIWRITEBLOCK
bcc .33
rts
*--------------------------------------
.33 lda RW.PGCNT divide RW.PGCNT by 32 to get how many bitmap
@ -373,11 +380,13 @@ RW.Format jsr RW.BLOCK.SET00
lda RW.PGCNT
and #$1F need an extra incomplete bitmap block?
beq .3
inx
.3 stx RW.BITMAPCNT store TOTAL bitmap block needed
.4 lda RW.FBITMAPCNT
beq .49
dec RW.FBITMAPCNT
jsr RW.BLOCK.SETFF
@ -440,7 +449,7 @@ RW.Format jsr RW.BLOCK.SET00
bra .62
.63 jsr MLI Write Block 4,5...
.DA #MLIWRITEBLOCK
.DA #MLI.WRITEBLOCK
.DA RW.MLIWRITEBLOCK
bcs .9
@ -530,12 +539,12 @@ RWDRV.START ldy DRV.COMMAND 0 = Status ?
sbc RWDRV.MAXHI+1
bcs RWDRV.IOERR DRV.BLKNUM >= RW.DRV.SIZE, IO error
bit RD80STORE save 80 Store status
bit IO.RD80STORE save 80 Store status
php Disable IRQ as no vector set in RW Banks
sei
sta CLR80STORE make sure SETREADAUX/SETWRITEAUX effective everywhere
sta IO.CLR80STORE make sure SETREADAUX/SETWRITEAUX effective everywhere
txa Get Back DRV.BLKNUM
asl compute PAGE = blocknumLO *2
@ -561,12 +570,12 @@ RWDRV.IO1 sta RWBankSelect Select RAMWorks Bank
dey Y=CMD, zero if read
bne RWDRV.W non zero, go write
sta SETREADAUX
sta IO.SETREADAUX
ldx #DRV.A2L READ:copy from RAM to BUFF
lda #DRV.BUFF
bra RWDRV.RW
RWDRV.W sta SETWRITEAUX
RWDRV.W sta IO.SETWRITEAUX
ldx #DRV.BUFF
lda #DRV.A2L WRITE:copy from BUFF to RAM
dey Make sure Y=0 for main loop below
@ -588,13 +597,13 @@ RWDRV.RW.DST sta ($FF),y
bcc RWDRV.RW.LOOP
RWDRV.EXIT stz RWBankSelect
sta CLRREADAUX
sta CLRWRITEAUX
sta IO.CLRREADAUX
sta IO.CLRWRITEAUX
plp restore IRQ
bpl RMDRV.CMDSTATUS
sta SET80STORE
sta IO.SET80STORE
RMDRV.CMDSTATUS
RWDRV.MAXLO ldx #$FF return device block count in X,Y...
@ -609,7 +618,7 @@ RWDRV.IOERR lda #MLI.E.IO Carry already set
* X=Page(0/1 or LC),A=Bank
*--------------------------------------
RWDRV.GOAUX pha save BANK
sta SETWRITEAUX
sta IO.SETWRITEAUX
ldy #RWDRVX.XM.SIZE Backup begining of $300 to generate move code
@ -620,13 +629,13 @@ RWDRV.GOAUX pha save BANK
pla restore BANK
sta SETREADAUX
sta IO.SETREADAUX
jsr RWDRVX.START Setup Code in main mem at $300 for data move
* returns : CC=WRITE, CS=READ
sta CLRREADAUX CLRWRITEAUX already triggered by code copy
sta IO.CLRREADAUX IO.CLRWRITEAUX already triggered by code copy
jsr RWDRV.XM.RUN Now execute generated code in main memory
sta SETREADAUX
sta IO.SETREADAUX
jmp RWDRVX.RESTORE
RWDRV.END .EP
@ -651,7 +660,7 @@ RWDRVX.START sta RWDRVX.XM.BANK+1 setup BANK
lsr
php
ldy #RRAMWRAMBNK1
ldy #IO.RRAMWRAMBNK1
txa
beq .1 page 0/1, no need to check BANK
@ -661,7 +670,7 @@ RWDRVX.START sta RWDRVX.XM.BANK+1 setup BANK
ora #$10 Remap $C0 page to $D0 BNK2
ldy #RRAMWRAMBNK2
ldy #IO.RRAMWRAMBNK2
.1 sty RWDRVX.XM.RWLC+1 Save to select proper RW bank later
@ -684,7 +693,7 @@ RWDRVX.START sta RWDRVX.XM.BANK+1 setup BANK
stz RWDRVX.XM.DST+1 WRITE to dst LO = 0
sta RWDRVX.XM.DST+2 WRITE to dst HI = PAGE
.3 sta CLRWRITEAUX
.3 sta IO.CLRWRITEAUX
ldy #RWDRVX.XM.SIZE
@ -713,7 +722,7 @@ RWDRVX.RESTORE ldy #RWDRVX.XM.SIZE Now, restore begining of $300
*--------------------------------------
RWDRVX.XM.START ldy #2 2 pages to copy
RWDRVX.XM.COPY sta CLRALTZP
RWDRVX.XM.COPY sta IO.CLRALTZP
jsr RWDRV.XM.RUN+RWDRVX.XM.SRCLC-RWDRVX.XM.START
sta $C000,x select proper Main/Aux ZP/LC
@ -726,7 +735,7 @@ RWDRVX.XM.SRC lda $FFFF,x
inx
bne RWDRVX.XM.SRC
sta CLRALTZP
sta IO.CLRALTZP
jsr RWDRV.XM.RUN+RWDRVX.XM.DSTLC-RWDRVX.XM.START
sta $C000,x select proper Main/Aux ZP/LC
@ -744,14 +753,14 @@ RWDRVX.XM.DST sta $FFFF,x
dey
bne RWDRVX.XM.COPY
sta CLRALTZP
sta IO.CLRALTZP
RWDRVX.XM.IO3 stz RWBankSelect
*--------------------------------------
RWDRVX.XM.MNLC bit RRAMWRAMBNK1 ProDOS always uses LCBANK1
RWDRVX.XM.MNLC bit IO.RRAMWRAMBNK1 ProDOS always uses LCBANK1
lda #0
ldx #CLRALTZP
ldx #IO.CLRALTZP
rts
*--------------------------------------
@ -763,7 +772,7 @@ RWDRVX.XM.RWLC bit $C000
RWDRVX.XM.BANK lda #$FF
ldx #SETALTZP
ldx #IO.SETALTZP
rts
*--------------------------------------