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

View File

@ -8,7 +8,7 @@ NEW
.INB inc/macros.i .INB inc/macros.i
.INB inc/a2osx.i .INB inc/a2osx.i
.INB inc/io.i .INB inc/io.i
.INB inc/monitor.i .INB inc/rom.ii.i
.INB inc/mli.i .INB inc/mli.i
.INB inc/mli.e.i .INB inc/mli.e.i
.INB inc/zp.i .INB inc/zp.i
@ -55,15 +55,15 @@ A2osX.Init0 >LDYAI $2000
*-------------------------------------- *--------------------------------------
A2osX.Init1 ldx #$FF init 6502 stack to highest A2osX.Init1 ldx #$FF init 6502 stack to highest
txs txs
bit RROMBNK1 bit IO.RROMBNK1
jsr HOME jsr ROM.HOME
>LDYAI MSG.INIT0 >LDYAI MSG.INIT0
jsr PrintFYA jsr PrintFYA
>LDYAI MSG.SYSMEM >LDYAI MSG.SYSMEM
jsr PrintFYA jsr PrintFYA
lda MACHID lda GP.MACHID
and #MACHID.M and #MACHID.M
cmp #MACHID.M.128 cmp #MACHID.M.128
beq A2osX.Init1.128 beq A2osX.Init1.128
@ -72,7 +72,7 @@ A2osX.Init1 ldx #$FF init 6502 stack to highest
bra * bra *
*-------------------------------------- *--------------------------------------
A2osX.Init1.128 jsr MLI A2osX.Init1.128 jsr MLI
.DA #MLIGETPREFIX .DA #MLI.GETPREFIX
.DA MLIGETPREFIX01 .DA MLIGETPREFIX01
bcs * bcs *
@ -120,10 +120,10 @@ A2osX.Init1.128 jsr MLI
.2 >LDYAI MSG.CPU.OK .2 >LDYAI MSG.CPU.OK
jsr PrintFYA 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 jsr MLI Make sure all files are closed
.DA #MLICLOSE .DA #MLI.CLOSE
.DA MLICLOSE01 .DA MLICLOSE01
bcs * bcs *
*-------------------------------------- *--------------------------------------
@ -146,8 +146,8 @@ A2osX.RamDrv >LDYAI MSG.RAMDRV
.8 jsr PrintFYA .8 jsr PrintFYA
*-------------------------------------- *--------------------------------------
A2osX.SetupQC lda RRAMWRAMBNK2 A2osX.SetupQC lda IO.RRAMWRAMBNK2
lda RRAMWRAMBNK2 lda IO.RRAMWRAMBNK2
ldx #0 ldx #0
.1 lda A2osX.QC.B.Start,x Still at $2xxx !!! not moved to $1xxx .1 lda A2osX.QC.B.Start,x Still at $2xxx !!! not moved to $1xxx
@ -159,7 +159,7 @@ A2osX.SetupQC lda RRAMWRAMBNK2
inx inx
bne .1 bne .1
lda RROMBNK1 lda IO.RROMBNK1
*-------------------------------------- *--------------------------------------
A2osX.EnumPM >LDYAI MSG.PMENUM do this After SetupQC, a PM could override QC A2osX.EnumPM >LDYAI MSG.PMENUM do this After SetupQC, a PM could override QC
jsr PrintFYA jsr PrintFYA
@ -172,7 +172,7 @@ A2osX.MLIQuit >LDYAI MSG.INIT0OK
stz $280 Quit to A2osX stz $280 Quit to A2osX
jsr MLI jsr MLI
.DA #MLIQUIT .DA #MLI.QUIT
.DA MLIQUIT01 .DA MLIQUIT01
bra * bra *
*-------------------------------------- *--------------------------------------
@ -191,7 +191,7 @@ A2osX.Screen80 lda #$8C Reset 80 col screen ($0C:HOME)
stx Logo.Filename stx Logo.Filename
jsr MLI jsr MLI
.DA #MLIOPEN .DA #MLI.OPEN
.DA MLIOPEN00 .DA MLIOPEN00
bcs .99 bcs .99
@ -199,7 +199,7 @@ A2osX.Screen80 lda #$8C Reset 80 col screen ($0C:HOME)
sta MLIREAD00+1 sta MLIREAD00+1
sta MLICLOSE00+1 sta MLICLOSE00+1
jsr MLI jsr MLI
.DA #MLIREAD .DA #MLI.READ
.DA MLIREAD00 .DA MLIREAD00
bcs .98 bcs .98
@ -207,30 +207,31 @@ A2osX.Screen80 lda #$8C Reset 80 col screen ($0C:HOME)
bra A2osX.ScreenDLGR bra A2osX.ScreenDLGR
.98 jsr MLI .98 jsr MLI
.DA #MLICLOSE .DA #MLI.CLOSE
.DA MLICLOSE00 .DA MLICLOSE00
.99 rts .99 rts
*-------------------------------------- *--------------------------------------
A2osX.ScreenDLGR A2osX.ScreenDLGR
lda #20 lda #20
sta WNDTOP sta ZP.WNDTOP
sta CV sta ZP.CV
jsr VTAB jsr ROM.VTAB
sta SETALTCHAR sta IO.SETALTCHAR
sta CLRHIRES sta IO.CLRHIRES
sta SETMIXED sta IO.SETMIXED
sta SET80DISP sta IO.SET80DISP
sta SET80STORE sta IO.SET80STORE
sta CLRPAGE2 sta IO.CLRPAGE2
bit RDIOUDIS bit IO.RDIOUDIS
sta SETIOUDIS sta IO.SETIOUDIS
sta SETDHIRES sta IO.SETDHIRES
bmi .10 bmi .10
sta CLRIOUDIS
.10 sta CLRTEXT sta IO.CLRIOUDIS
.10 sta IO.CLRTEXT
lda #A2osX.LOGOLOAD+S.BM lda #A2osX.LOGOLOAD+S.BM
sta TmpPtr1 sta TmpPtr1
@ -255,7 +256,7 @@ A2osX.ScreenDLGR
tax tax
lda PALETTE.AUX,x lda PALETTE.AUX,x
sta SETPAGE2 sta IO.SETPAGE2
sta (TmpPtr2),y sta (TmpPtr2),y
pla pla
@ -265,7 +266,7 @@ A2osX.ScreenDLGR
lsr lsr
tax tax
lda PALETTE.MAIN,x lda PALETTE.MAIN,x
sta CLRPAGE2 sta IO.CLRPAGE2
sta (TmpPtr2),y sta (TmpPtr2),y
iny iny
@ -292,7 +293,7 @@ A2osX.ScreenDLGR
asl asl
asl asl
asl asl
sta SETPAGE2 sta IO.SETPAGE2
ora (TmpPtr2),y ora (TmpPtr2),y
sta (TmpPtr2),y sta (TmpPtr2),y
@ -307,7 +308,7 @@ A2osX.ScreenDLGR
asl asl
asl asl
asl asl
sta CLRPAGE2 sta IO.CLRPAGE2
ora (TmpPtr2),y ora (TmpPtr2),y
sta (TmpPtr2),y sta (TmpPtr2),y
@ -332,17 +333,17 @@ A2osX.ScreenDLGR
*-------------------------------------- *--------------------------------------
DisableRamDRV php DisableRamDRV php
sei sei
lda DEVPTRS3D2 lda GP.DEVPTRS3D2
cmp DEVPTRS S0D1=NOVEV cmp GP.DEVPTRS S0D1=NOVEV
bne .1 bne .1
lda DEVPTRS3D2+1 lda GP.DEVPTRS3D2+1
cmp DEVPTRS+1 S0D1=NODEV cmp GP.DEVPTRS+1 S0D1=NODEV
beq .9 S3D2=NODEV, nothing to do 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 and #$F3
cmp #$B3 cmp #$B3
beq .3 beq .3
@ -356,26 +357,26 @@ DisableRamDRV php
sec sec
rts rts
.3 cpx DEVCNT .3 cpx GP.DEVCNT
beq .5 beq .5
.4 lda DEVLST+1,x .4 lda GP.DEVLST+1,x
sta DEVLST,x sta GP.DEVLST,x
inx inx
cpx DEVCNT cpx GP.DEVCNT
bne .4 bne .4
.5 ldx DEVCNT .5 ldx GP.DEVCNT
stz DEVLST,x stz GP.DEVLST,x
dec DEVCNT dec GP.DEVCNT
lda DEVPTRS lda GP.DEVPTRS
sta DEVPTRS3D2 sta GP.DEVPTRS3D2
lda DEVPTRS+1 lda GP.DEVPTRS+1
sta DEVPTRS3D2+1 sta GP.DEVPTRS3D2+1
plp plp
jsr MLI jsr MLI
.DA #MLIONLINE .DA #MLI.ONLINE
.DA MLIONLINE01 .DA MLIONLINE01
clc Success!! clc Success!!
rts rts
@ -411,12 +412,12 @@ EnumPM ldx #0
jsr PrintFYA jsr PrintFYA
jsr MLI jsr MLI
.DA #MLISETPREFIX .DA #MLI.SETPREFIX
.DA MLISETPREFIX02 .DA MLISETPREFIX02
bcs .19 bcs .19
jsr MLI jsr MLI
.DA #MLIOPEN .DA #MLI.OPEN
.DA MLIOPEN01 .DA MLIOPEN01
bcc .10 bcc .10
@ -431,7 +432,7 @@ EnumPM ldx #0
sta MLICLOSE01+1 sta MLICLOSE01+1
.2 jsr MLI .2 jsr MLI
.DA #MLIREAD .DA #MLI.READ
.DA MLIREAD01 .DA MLIREAD01
bcs .98 bcs .98
@ -496,12 +497,12 @@ EnumPM ldx #0
rts rts
.8 jsr MLI .8 jsr MLI
.DA #MLICLOSE .DA #MLI.CLOSE
.DA MLICLOSE01 .DA MLICLOSE01
bcs .99 bcs .99
jsr MLI jsr MLI
.DA #MLISETPREFIX .DA #MLI.SETPREFIX
.DA MLISETPREFIX01 .DA MLISETPREFIX01
.99 rts .99 rts
@ -559,7 +560,7 @@ LoadPM ldy #$1c
jsr PrintFYA jsr PrintFYA
jsr MLI jsr MLI
.DA #MLIOPEN .DA #MLI.OPEN
.DA MLIOPEN02 .DA MLIOPEN02
bcs .99 bcs .99
@ -568,7 +569,7 @@ LoadPM ldy #$1c
sta MLICLOSE02+1 sta MLICLOSE02+1
jsr MLI jsr MLI
.DA #MLIREAD .DA #MLI.READ
.DA MLIREAD02 .DA MLIREAD02
bcs .98 bcs .98
@ -583,7 +584,7 @@ LoadPM ldy #$1c
rts rts
.9 jsr MLI .9 jsr MLI
.DA #MLICLOSE .DA #MLI.CLOSE
.DA MLICLOSE02 .DA MLICLOSE02
.99 rts .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 bcc .1
rts rts
*--------------------------------------
VLINE.C16 lda CB.Cache+S.CB.X1 VLINE.C16 lda CB.Cache+S.CB.X1
lsr CB.Cache+S.CB.X1+1 divide by 4 lsr CB.Cache+S.CB.X1+1 divide by 4
ror 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 #%00110100,#%10110100,#%00110101,#%10110101,#%00110110,#%10110110,#%00110111,#%10110111
.DA #%00111000,#%10111000,#%00111001,#%10111001,#%00111010,#%10111010,#%00111011,#%10111011 .DA #%00111000,#%10111000,#%00111001,#%10111001,#%00111010,#%10111010,#%00111011,#%10111011
.DA #%00111100,#%10111100,#%00111101,#%10111101,#%00111110,#%10111110,#%00111111,#%10111111 .DA #%00111100,#%10111100,#%00111101,#%10111101,#%00111110,#%10111110,#%00111111,#%10111111
*--------------------------------------
.LIST ON
X.OSD.LEN .EQ *-X.OSD X.OSD.LEN .EQ *-X.OSD
.LIST OFF
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE usr/src/drv/dhgr.drv.s.osd SAVE usr/src/drv/dhgr.drv.s.osd

View File

@ -58,7 +58,7 @@ SETPIXEL.MONO.XOR
eor Mono.Masks,x eor Mono.Masks,x
sta (ZPBasePtr) sta (ZPBasePtr)
rts rts
*--------------------------------------
SETPIXEL.C16 lda CB.Cache+S.CB.X1 SETPIXEL.C16 lda CB.Cache+S.CB.X1
lsr CB.Cache+S.CB.X1+1 divide by 4 lsr CB.Cache+S.CB.X1+1 divide by 4
ror ror
@ -67,9 +67,9 @@ SETPIXEL.C16 lda CB.Cache+S.CB.X1
tay Y=X/4 (range 0->139) tay Y=X/4 (range 0->139)
ldx CB.Cache+S.CB.Y1 ldx CB.Cache+S.CB.Y1
*--------------------------------------
* Y = PixelX (0,139), X = PixelY (0,191) * Y = PixelX (0,139), X = PixelY (0,191)
*--------------------------------------
SETPIXEL.C16.YX lda DIV7.0,y PixelX MOD 7 (range 0->19) SETPIXEL.C16.YX lda DIV7.0,y PixelX MOD 7 (range 0->19)
asl times 2 (range 0->38) asl times 2 (range 0->38)
* clc * 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.MASK .BS 81 81 because of sta LBUF.DATA+1,x!!!
LBUF.DATA .BS 81 LBUF.DATA .BS 81
*LBUF.MASK .EQ $240
*LBUF.DATA .EQ $2A0
*-------------------------------------- *--------------------------------------
DIB .DA #0 DIB .DA #0
.DA #0,#0,#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.SCRNDEVS .EQ $11D0 0=console, 1-8=VT100, 9=GFX
A2osX.ASCREEN .EQ $11DA Active Screen A2osX.ASCREEN .EQ $11DA Active Screen
* 5 bytes
A2osX.KVER .EQ $11E0 A2osX.KVER .EQ $11E0 WORD
* 1 byte
A2osX.IRQMode .EQ $11E3 A2osX.IRQMode .EQ $11E3
A2osX.ATLKSID .EQ $11E4 A2osX.ATLKSID .EQ $11E4
A2osX.FSID .EQ $11E5 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 * Software Switches
*-------------------------------------- *--------------------------------------
KBD .EQ $C000 R IO.KBD .EQ $C000 R
CLR80STORE .EQ $C000 W IO.CLR80STORE .EQ $C000 W
SET80STORE .EQ $C001 W IO.SET80STORE .EQ $C001 W
CLRREADAUX .EQ $C002 W IO.CLRREADAUX .EQ $C002 W
SETREADAUX .EQ $C003 W IO.SETREADAUX .EQ $C003 W
CLRWRITEAUX .EQ $C004 W IO.CLRWRITEAUX .EQ $C004 W
SETWRITEAUX .EQ $C005 W IO.SETWRITEAUX .EQ $C005 W
CLRCXROM .EQ $C006 W IO.CLRCXROM .EQ $C006 W
SETCXROM .EQ $C007 W IO.SETCXROM .EQ $C007 W
CLRALTZP .EQ $C008 W IO.CLRALTZP .EQ $C008 W
SETALTZP .EQ $C009 W IO.SETALTZP .EQ $C009 W
CLRC3ROM .EQ $C00A W IO.CLRC3ROM .EQ $C00A W
SETC3ROM .EQ $C00B W IO.SETC3ROM .EQ $C00B W
CLR80DISP .EQ $C00C W IO.CLR80DISP .EQ $C00C W
SET80DISP .EQ $C00D W IO.SET80DISP .EQ $C00D W
CLRALTCHAR .EQ $C00E W IO.CLRALTCHAR .EQ $C00E W
SETALTCHAR .EQ $C00F W IO.SETALTCHAR .EQ $C00F W
KBDSTROBE .EQ $C010 W IO.KBDSTROBE .EQ $C010 W
RDLCBNK2 .EQ $C011 R IO.RDLCBNK2 .EQ $C011 R
RDLCRAM .EQ $C012 R IO.RDLCRAM .EQ $C012 R
RDREADAUX .EQ $C013 R IO.RDREADAUX .EQ $C013 R
RDWRITEAUX .EQ $C014 R IO.RDWRITEAUX .EQ $C014 R
RDCXROM .EQ $C015 R IO.RDCXROM .EQ $C015 R
RDALTZP .EQ $C016 R IO.RDALTZP .EQ $C016 R
RDC3ROM .EQ $C017 R IO.RDC3ROM .EQ $C017 R
RD80STORE .EQ $C018 R IO.RD80STORE .EQ $C018 R
VBL .EQ $C019 R IO.VBL .EQ $C019 R
RDTEXT .EQ $C01A R IO.RDTEXT .EQ $C01A R
RDMIXED .EQ $C01B R IO.RDMIXED .EQ $C01B R
RDPAGE2 .EQ $C01C R IO.RDPAGE2 .EQ $C01C R
RDHIRES .EQ $C01D R IO.RDHIRES .EQ $C01D R
RDALTCHAR .EQ $C01E R IO.RDALTCHAR .EQ $C01E R
RD80DISP .EQ $C01F R IO.RD80DISP .EQ $C01F R
*TAPEOUT .EQ $C020 W *IO.TAPEOUT .EQ $C020 W
newvideo .EQ $C029 video mode select IO.SPEAKER .EQ $C030 W, toggle speaker diaphragm
SPEAKER .EQ $C030 W, toggle speaker diaphragm *IO.STROBE .EQ $C040 R, generate .5 uS low pulse @ Game pin 5
*STROBE .EQ $C040 R, generate .5 uS low pulse @ Game pin 5 *IO.RDVBLIIC .EQ $C05A R, VBL switch Status (IIc)
*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 *IO.PADDLE0 .EQ $C064 R, bit 7 = status of pdl-0 timer
SETTEXT .EQ $C051 W *IO.PADDLE1 .EQ $C065 R, bit 7 = status of pdl-1 timer
CLRMIXED .EQ $C052 W *IO.PADDLE2 .EQ $C066 R, bit 7 = status of pdl-2 timer
SETMIXED .EQ $C053 W *IO.PADDLE3 .EQ $C067 R, bit 7 = status of pdl-3 timer
CLRPAGE2 .EQ $C054 W
SETPAGE2 .EQ $C055 W
CLRHIRES .EQ $C056 W
SETHIRES .EQ $C057 W
*SETAN0 .EQ $C058 W, Set annunciator-0 output to 0 *IO.PDLTRIG .EQ $C070 W, trigger paddles
*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
SETDHIRES .EQ $C05E W, if IOUDIS Set, turn on double-hires IO.SETIOUDIS .EQ $C07E W, enable DHIRES & disable $C058-5F
CLRDHIRES .EQ $C05F W, if IOUDIS Set, turn off double-hires IO.RDIOUDIS .EQ $C07E R, bit 7 = IOUDIS status
IO.CLRIOUDIS .EQ $C07F W, disable DHIRES & enable $C058-5F
*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
*-------------------------------------- *--------------------------------------
*RRAMBNK2 .EQ $C080 R *IO.RRAMBNK2 .EQ $C080 R
RROMWRAMBNK2 .EQ $C081 RR IO.RROMWRAMBNK2 .EQ $C081 RR
RROMBNK2 .EQ $C082 R IO.RROMBNK2 .EQ $C082 R
RRAMWRAMBNK2 .EQ $C083 RR IO.RRAMWRAMBNK2 .EQ $C083 RR
*RRAMBNK1 .EQ $C088 R *IO.RRAMBNK1 .EQ $C088 R
*RROMWRAMBNK1 .EQ $C089 RR *IO.RROMWRAMBNK1 .EQ $C089 RR
RROMBNK1 .EQ $C08A R IO.RROMBNK1 .EQ $C08A R
RRAMWRAMBNK1 .EQ $C08B RR 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 MAN
SAVE INC/IO.I SAVE inc/io.i

View File

@ -2,9 +2,11 @@ NEW
AUTO 3,1 AUTO 3,1
.LIST OFF .LIST OFF
*-------------------------------------- *--------------------------------------
IO.IIGS.INTEN .EQ $C041 R,W IO.GS.NEWVIDEO .EQ $C029 R,W video mode select
IO.IIGS.INTFLAG .EQ $C046 R IO.GS.INTEN .EQ $C041 R,W
IO.IIGS.CLRVBLINT .EQ $C047 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 .MA TKCALL
ldx ##TK.]1 ldx ##TK.]1

View File

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

View File

@ -8,37 +8,37 @@ MLI.MAXPATH .EQ 64
*-------------------------------------- *--------------------------------------
* PRODOS Defines * PRODOS Defines
*-------------------------------------- *--------------------------------------
MLIALLOCIRQ .EQ $40 MLI.ALLOCIRQ .EQ $40
MLIDEALLOCIRQ .EQ $41 MLI.DEALLOCIRQ .EQ $41
MLIATALK .EQ $42 MLI.ATALK .EQ $42
MLIQUIT .EQ $65 MLI.QUIT .EQ $65
MLIREADBLOCK .EQ $80 MLI.READBLOCK .EQ $80
MLIWRITEBLOCK .EQ $81 MLI.WRITEBLOCK .EQ $81
MLIGETTIME .EQ $82 MLI.GETTIME .EQ $82
MLICREATE .EQ $C0 MLI.CREATE .EQ $C0
MLIDESTROY .EQ $C1 MLI.DESTROY .EQ $C1
MLIRENAME .EQ $C2 MLI.RENAME .EQ $C2
MLISETFILEINFO .EQ $C3 MLI.SFINFO .EQ $C3
MLIGETFILEINFO .EQ $C4 MLI.GFINFO .EQ $C4
MLIONLINE .EQ $C5 MLI.ONLINE .EQ $C5
MLISETPREFIX .EQ $C6 MLI.SETPREFIX .EQ $C6
MLIGETPREFIX .EQ $C7 MLI.GETPREFIX .EQ $C7
MLIOPEN .EQ $C8 MLI.OPEN .EQ $C8
MLINEWLINE .EQ $C9 MLI.NEWLINE .EQ $C9
MLIREAD .EQ $CA MLI.READ .EQ $CA
MLIWRITE .EQ $CB MLI.WRITE .EQ $CB
MLICLOSE .EQ $CC MLI.CLOSE .EQ $CC
MLIFLUSH .EQ $CD MLI.FLUSH .EQ $CD
MLISETMARK .EQ $CE MLI.SETMARK .EQ $CE
MLIGETMARK .EQ $CF MLI.GETMARK .EQ $CF
MLISETEOF .EQ $D0 MLI.SETEOF .EQ $D0
MLIGETEOF .EQ $D1 MLI.GETEOF .EQ $D1
MLISETBUF .EQ $D2 MLI.SETBUF .EQ $D2
MLIGETBUF .EQ $D3 MLI.GETBUF .EQ $D3
* ProDOS FX * ProDOS FX
MLISETFILEINFOEX .EQ $D4 MLI.SFINFOEX .EQ $D4
MLIGETFILEINFOEX .EQ $D5 MLI.GFINFOEX .EQ $D5
MLIACL .EQ $D6 MLI.ACL .EQ $D6
*-------------------------------------- *--------------------------------------
* 7 6 5 4 3 2 1 0 * 7 6 5 4 3 2 1 0
* +--+--+--+--+--+--+--+--+ * +--+--+--+--+--+--+--+--+
@ -123,12 +123,12 @@ TBX.EnumBlk .EQ 2
TBX.EnumNext .EQ 4 TBX.EnumNext .EQ 4
*-------------------------------------- *--------------------------------------
MLI .EQ $BF00 MLI .EQ $BF00
*JSPARE .EQ $BF03 GP.DISPATCH .EQ $BF03
DATETIME .EQ $BF06 GP.CLOCK .EQ $BF06
SYSERR .EQ $BF09 GP.SYSERR .EQ $BF09
*SYSDEATH .EQ $BF0C GP.SYSDEATH .EQ $BF0C
*SERR .EQ $BF0F GP.ERROR .EQ $BF0F
DEVPTRS .EQ $BF10 GP.DEVPTRS .EQ $BF10
*DEVPTRS0D1 .EQ $BF10 *DEVPTRS0D1 .EQ $BF10
*DEVPTRS1D1 .EQ $BF12 *DEVPTRS1D1 .EQ $BF12
*DEVPTRS2D1 .EQ $BF14 *DEVPTRS2D1 .EQ $BF14
@ -140,35 +140,36 @@ DEVPTRS .EQ $BF10
*DEVPTRS0D2 .EQ $BF20 *DEVPTRS0D2 .EQ $BF20
*DEVPTRS1D2 .EQ $BF22 *DEVPTRS1D2 .EQ $BF22
*DEVPTRS2D2 .EQ $BF24 *DEVPTRS2D2 .EQ $BF24
DEVPTRS3D2 .EQ $BF26 GP.DEVPTRS3D2 .EQ $BF26
*DEVPTRS4D2 .EQ $BF28 *DEVPTRS4D2 .EQ $BF28
*DEVPTRS5D2 .EQ $BF2A *DEVPTRS5D2 .EQ $BF2A
*DEVPTRS6D2 .EQ $BF2C *DEVPTRS6D2 .EQ $BF2C
*DEVPTRS7D2 .EQ $BF2E *DEVPTRS7D2 .EQ $BF2E
DEVNUM .EQ $BF30 GP.DEVNUM .EQ $BF30
DEVCNT .EQ $BF31 0 -> 13 GP.DEVCNT .EQ $BF31 0 -> 13
DEVLST .EQ $BF32 -> $BF3F GP.DEVLST .EQ $BF32 -> $BF3F
*DEVLST0END .EQ $BF40 A 0 was added to ensure list ended with 0 if 14 devices in list *DEVLST0END .EQ $BF40 A 0 was added to ensure list ended with 0 if 14 devices in list
*PRODOSCOPYRIGHT .EQ $BF41 ;free->$BF4B *PRODOSCOPYRIGHT .EQ $BF41 ;free->$BF4B
MLIENTRY .EQ $BF4B to bypass ATLK hook GP.MLIENTRY .EQ $BF4B to bypass ATLK hook
MEMTABL .EQ $BF58 -> $BF6F GP.MEMTABL .EQ $BF58 -> $BF6F
*GL.BUFF .EQ $BF70 GB.BUFTABL .EQ $BF70
*INTRUPT1 .EQ $BF80 *INTRUPT1 .EQ $BF80
*INTRUPT2 .EQ $BF82 *INTRUPT2 .EQ $BF82
*INTRUPT3 .EQ $BF84 *INTRUPT3 .EQ $BF84
*INTRUPT4 .EQ $BF86 *INTRUPT4 .EQ $BF86
DATELO .EQ $BF90 GP.DATE .EQ $BF90
TIMELO .EQ $BF92 GP.TIME .EQ $BF92
LEVEL .EQ $BF94 GP.FLEVEL .EQ $BF94
*BUBIT .EQ $BF95 GP.BUBIT .EQ $BF95
*SPARE1 .EQ $BF96 *SPARE1 .EQ $BF96
MACHID .EQ $BF98 GP.NEWPFXPTR .EQ $BF97
GP.MACHID .EQ $BF98
MACHID.T .EQ %11001000 MACHID.T .EQ %11001000
*MACHID.T.II .EQ %00000000 *MACHID.T.II .EQ %00000000
*MACHID.T.IIp .EQ %01000000 *MACHID.T.IIp .EQ %01000000
MACHID.T.IIe .EQ %10000000 MACHID.T.IIe .EQ %10000000
MACHID.T.IIc .EQ %10001000 MACHID.T.IIc .EQ %10001000
*MACHID.T.III .EQ %11000000 *MACHID.T.III .EQ %11000000
MACHID.M .EQ %00110000 MACHID.M .EQ %00110000
MACHID.M.128 .EQ %00110000 MACHID.M.128 .EQ %00110000
*MACHID.M.64 .EQ %00100000 *MACHID.M.64 .EQ %00100000
@ -176,14 +177,15 @@ MACHID.M.128 .EQ %00110000
*MACHID.SPARE .EQ %00000100 *MACHID.SPARE .EQ %00000100
MACHID.COL80 .EQ %00000010 MACHID.COL80 .EQ %00000010
MACHID.CLK .EQ %00000001 MACHID.CLK .EQ %00000001
*SLTBYT .EQ $BF99 GP.SLTBYT .EQ $BF99
*PFIXPTR .EQ $BF9A GP.PFXPTR .EQ $BF9A
*MLIACTV .EQ $BF9B GP.MLIACTV .EQ $BF9B
*CMDADR .EQ $BF9C *CMDADR .EQ $BF9C
*SAVEX .EQ $BF9E *SAVEX .EQ $BF9E
*SAVEY .EQ $BF9F *SAVEY .EQ $BF9F
*-------------------------------------- *--------------------------------------
* code $BFA0 -> $BFF3 * GP.MLIEXIT $BFA0
* GP.MLICONT $BFB7
*-------------------------------------- *--------------------------------------
*BNKBYT1 .EQ $BFF4 *BNKBYT1 .EQ $BFF4
*BNKBYT2 .EQ $BFF5 *BNKBYT2 .EQ $BFF5
@ -191,7 +193,7 @@ MACHID.CLK .EQ %00000001
*IBAKVER .EQ $BFFC *IBAKVER .EQ $BFFC
*IVERSION .EQ $BFFD *IVERSION .EQ $BFFD
*KBAKVER .EQ $BFFE *KBAKVER .EQ $BFFE
*KVERSION .EQ $BFFF GP.KVER .EQ $BFFF
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE inc/mli.i 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 * ProDOS Reserved ZP Location 00-1F,56-FF
*-------------------------------------- *--------------------------------------
WNDLFT .EQ $20 SCROLL WINDOW LEFT ZP.WNDLFT .EQ $20 SCROLL WINDOW LEFT
WNDWDTH .EQ $21 SCROLL WINDOW WIDTH ZP.WNDWDTH .EQ $21 SCROLL WINDOW WIDTH
WNDTOP .EQ $22 SCROLL WINDOW TOP ZP.WNDTOP .EQ $22 SCROLL WINDOW TOP
WNDBOT .EQ $23 SCROLL WINDOW BOTTOM ZP.WNDBOT .EQ $23 SCROLL WINDOW BOTTOM
CH .EQ $24 CURSOR HORIZONTAL ZP.CH .EQ $24 CURSOR HORIZONTAL
CV .EQ $25 CURSOR VERTICAL ZP.CV .EQ $25 CURSOR VERTICAL
GBASL .EQ $26 LORES BASE LOW ZP.GBASL .EQ $26 LORES BASE LOW
GBASH .EQ $27 LORES BASE HIGH ZP.GBASH .EQ $27 LORES BASE HIGH
BASL .EQ $28 TEXT BASE LOW ZP.BASL .EQ $28 TEXT BASE LOW
BASH .EQ $29 TEXT BASE HIGH ZP.BASH .EQ $29 TEXT BASE HIGH
BEND .EQ $2C LORES RIGHT END H LINE ZP.BEND .EQ $2C LORES RIGHT END H LINE
VBOT .EQ $2D LORES BOTTOM OF V LINE ZP.VBOT .EQ $2D LORES BOTTOM OF V LINE
COLOR .EQ $30 LORES COLOR ZP.COLOR .EQ $30 LORES COLOR
INVFLG .EQ $32 NORMAL/INVERSE /FLASH (FF,7F,3F) ZP.INVFLG .EQ $32 NORMAL/INVERSE /FLASH (FF,7F,3F)
PROMPT .EQ $33 HOLDS PROMPT SYMBOL ZP.PROMPT .EQ $33 HOLDS PROMPT SYMBOL
CSWL .EQ $36 OUTPUT CHARACTER HOOK LOW ZP.CSWL .EQ $36 OUTPUT CHARACTER HOOK LOW
CSWH .EQ $37 OUTPUT CHARACTER HOOK HIGH ZP.CSWH .EQ $37 OUTPUT CHARACTER HOOK HIGH
KSWL .EQ $38 INPUT CHARACTER HOOOK LOW ZP.KSWL .EQ $38 INPUT CHARACTER HOOOK LOW
KSWH .EQ $39 INPUT CHARACTER HOOK HIGH ZP.KSWH .EQ $39 INPUT CHARACTER HOOK HIGH
RNDL .EQ $4E RANDOM NUMBER LOW ZP.PCL .EQ $3A
RNDH .EQ $4F RANDOM NUMBER HIGH 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 MAN
SAVE inc/zp.i SAVE inc/zp.i

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,162 @@
NEW NEW
AUTO 3,1 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 XDOS.FindDirOrVol
jsr XDOS.FindFileOrVol jsr XDOS.FindFileOrVol
bcs .99 bcs .99
@ -62,8 +218,8 @@ XDOS.CheckPath jsr XDOS.FindVol
lda #$D0 fake directory file lda #$D0 fake directory file
sta d_stor sta d_stor
lda gbuf+2 check forward link. lda XDOS.GBuf+2 check forward link.
ora gbuf+3 if non-zero, assume full sized directory ora XDOS.GBuf+3 if non-zero, assume full sized directory
bne .3 else assume it's the slot 3 /RAM volume bne .3 else assume it's the slot 3 /RAM volume
lda #$02 so reset eof and blocks_used fields 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 L37E2 dec entcnth should be at least one
L37EB sta entcntl keep a running count. L37EB sta entcntl keep a running count.
lda /gbuf reset indirect pointer lda /XDOS.GBuf reset indirect pointer
sta zpt+1 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). 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. 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 .DO LOWERCASE=1
jsr XDOS.ReadGBufAXDir jsr XDOS.ReadGBufAXDir
.ELSE .ELSE
@ -117,13 +273,13 @@ L37FC ldx gbuf+3 acc has value for block# (low).
*-------------------------------------- *--------------------------------------
errfnf lda nofree was any free entry found? errfnf lda nofree was any free entry found?
bne fnf0 bne fnf0
lda gbuf+2 test link lda XDOS.GBuf+2 test link
bne L3814 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'. beq fnf0 report 'not found'.
L3814 sta d_entblk L3814 sta d_entblk
lda gbuf+3 lda XDOS.GBuf+3
sta d_entblk+1 assume 1st entry of next block sta d_entblk+1 assume 1st entry of next block
lda #$01 is free for use. lda #$01 is free for use.
sta d_entnum mark as valid (for create) 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 .DO LOWERCASE=1
jsr XDOS.ReadGBufAXDir jsr XDOS.ReadGBufAXDir
.ELSE .ELSE
jsr XDOS.ReadGBufAX read subdirectory into gbuf. jsr XDOS.ReadGBufAX read subdirectory into XDOS.GBuf.
.FIN .FIN
bcs lookfil0.RTS if error. 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. sta entcntl directory.
lda gbuf+38 lda XDOS.GBuf+38
sta entcnth sta entcnth
*-------------------------------------- *--------------------------------------
* Check if $75 at VOL/DIR entry + $14 * Check if $75 at VOL/DIR entry + $14
* (8 bytes reserved) * (8 bytes reserved)
*-------------------------------------- *--------------------------------------
.DO LOWERCASE=0 .DO LOWERCASE=0
lda gbuf+20 make sure password is disabled lda XDOS.GBuf+20 make sure password is disabled
ldx #$00 ldx #$00
sec sec
@ -197,7 +353,7 @@ movhead jsr movhed0 move directory info.
movhed0 ldx #9 move this directory info movhed0 ldx #9 move this directory info
.1 lda gbuf+$1C,x .1 lda XDOS.GBuf+$1C,x
sta h_credt,x sta h_credt,x
dex dex
bpl .1 bpl .1
@ -205,14 +361,14 @@ movhed0 ldx #9 move this directory info
.DO ACL=1 .DO ACL=1
ldx #7 ldx #7
lda gbuf+$14 lda XDOS.GBuf+$14
cmp #$57 cmp #$57
bne .20 bne .20
lda gbuf+$15 lda XDOS.GBuf+$15
bne .20 bne .20
.2 lda gbuf+$14,x .2 lda XDOS.GBuf+$14,x
sta h_acl,x sta h_acl,x
dex dex
bpl .2 bpl .2
@ -225,14 +381,14 @@ movhed0 ldx #9 move this directory info
.21 .FIN .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 and #$F0
eor #$F0 test header type. eor #$F0 test header type.
beq .8 branch if root beq .8 branch if root
ldx #$03 otherwise, save owner info about 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 sta own_blk,x
dex dex
bpl .3 bpl .3
@ -245,9 +401,9 @@ filfound lda h_maxent figure out which entry # this is
adc #$00 = entry # (carry was set) adc #$00 = entry # (carry was set)
sta d_entnum sta d_entnum
lda bloknml and indicate block # of this directory lda ZP.BLKNUM and indicate block # of this directory
sta d_entblk sta d_entblk
lda bloknml+1 lda ZP.BLKNUM+1
sta d_entblk+1 sta d_entblk+1
* clc done by ADC #$00 * clc done by ADC #$00
@ -258,7 +414,7 @@ XDOS.LookupNameInDirBlk
lda h_maxent reset count of files per block lda h_maxent reset count of files per block
sta cntent 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 bcs .4 branch if this block contains a header
@ -279,14 +435,14 @@ XDOS.LookupNameInDirBlk
sta namcnt save name length as counter. sta namcnt save name length as counter.
ldx namptr get index to current path. 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. bne .4 no, inc to next entry.
.3 inx (first) next letter index .3 inx (first) next letter index
iny iny
lda (zpt),y compare names letter by letter lda (zpt),y compare names letter by letter
cmp pathbuf,x cmp XDOS.PathBuf,x
bne .4 bne .4
dec namcnt all letters compared? dec namcnt all letters compared?
@ -315,63 +471,63 @@ XDOS.FindVol jsr XDOS.FindVolInVCBOrDev
dex dex
bpl .1 bpl .1
lda DEVNUM setup device # for this directory lda GP.DEVNUM setup device # for this directory
sta d_dev sta d_dev
jsr movhed0 setup other header info from directory jsr movhed0 setup other header info from directory
ldy #$01 in gbuf and clean up misc info. ldy #$01 in XDOS.GBuf and clean up misc info.
ldx vcbptr ldx XDOS.VCBPtr
inx 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, 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 sta h_bmap,y
lda bloknml,y directory's disk address, lda ZP.BLKNUM,y directory's disk address,
sta d_head,y sta d_head,y
lda h_fcnt,y and setting up a counter for the # of lda h_fcnt,y and setting up a counter for the # of
sta entcntl,y files in this directory. sta entcntl,y files in this directory.
dex dex
dey dey
bpl .2 bpl .2
*--------------------------------------
nxtpname jsr nxtpnam1 get new namptr in y and namlen in acc. nxtpname jsr nxtpnam1 get new namptr in y and namlen in acc.
sty namptr save new pathname pointer. sty namptr save new pathname pointer.
rts (status reg according to accumulator) rts (status reg according to accumulator)
*--------------------------------------
nxtpnam1 ldy namptr inc pathname pointer to next name nxtpnam1 ldy namptr inc pathname pointer to next name
lda pathbuf,y in the path. lda XDOS.PathBuf,y in the path.
sec sec
adc namptr if this addition results in zero, adc namptr if this addition results in zero,
tay then prefixed directory has been moved 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 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 clc no errors
novolume rts novolume rts
*-------------------------------------- *--------------------------------------
XDOS.FindVolInVCBOrDev XDOS.FindVolInVCBOrDev
lda #$00 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? bit prfxflg is this a prefixed path?
bpl L396F branch if it is bpl L396F branch if it is
tay set ptr to volume name tay set ptr to volume name
L396F sty vnptr and save. L396F sty L39D4+1 and save.
sta DEVNUM zero out dev# until vcb located. sta GP.DEVNUM zero out dev# until vcb located.
lda #VCB0 lda #XDOS.VCB0
L3975 pha acc now used as vcb lookup index. L3975 pha acc now used as vcb lookup index.
tax index pointer to x. 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. 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. pla now adj vcb index to next vcb entry.
clc clc
adc #VCB 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. 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 bne L397C branch if not
inx inx
iny next character iny next character
lda VCBs,x lda XDOS.VCBs,x
dec namcnt last character? dec namcnt last character?
bpl L398A if not. bpl L398A if not.
plx restore pointer to matching vcb. plx restore pointer to matching vcb.
stx vcbptr save it for future reference. stx XDOS.VCBPtr save it for future reference.
lda VCBs+VCB.DEV,x get it's device # lda XDOS.VCBs+VCB.DEV,x get it's device #
sta DEVNUM and save it. sta GP.DEVNUM and save it.
lda #$02 assume prefix is not used and lda #$02 assume prefix is not used and
ldx #$00 that root directory is to be used. ldx #$00 that root directory is to be used.
pha pha
lda vnptr = 0 if no prefix. lda L39D4+1 = 0 if no prefix.
L39AC tay if prefix then find ptr to prefixed L39AC tay if prefix then find ptr to prefixed
sta namptr dir name. save path ptr. sta namptr dir name. save path ptr.
beq L39C2 branch if no prefix. beq L39C2 branch if no prefix.
sec 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. bcc L39AC branch if another dir in prefix.
pla pla
@ -430,17 +586,18 @@ L39C2 pla
jsr XDOS.CheckVolName compare dir name with path name. jsr XDOS.CheckVolName compare dir name with path name.
bcc L39F0 if they match, stop looking. bcc L39F0 if they match, stop looking.
L39CC ldx vcbptr check if current (matched) vcb is active L39CC ldx XDOS.VCBPtr check if current (matched) vcb is active
lda VCBs+VCB.OFCNT,x i.e. does it have open files? lda XDOS.VCBs+VCB.OFCNT,x i.e. does it have open files?
bne L39ED report not found if active. 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 sta namptr
jsr mvdevnums copy all device #'s to be examined. 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. 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. L39E5 lda loklst,x to search for the requested volume.
bne L39F4 branch if we've a device to look at. 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 sec error
L39F0 rts 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. L39F4 cmp loklst,x of prospective devices.
beq L39FE branch if match. beq L39FE branch if match.
@ -460,21 +617,21 @@ L39F4 cmp loklst,x of prospective devices.
dex look until found. dex look until found.
bpl L39F4 always taken (usually) unless 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. stz loklst,x mark this one as tested.
jsr XDOS.FindVCBForDevNum find vcb that claims this dev (if any). jsr XDOS.FindVCBForDevNum find vcb that claims this dev (if any).
bcs L3A29 branch if vcb full. 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. 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. 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 ldx #$00
.DO LOWERCASE=1 .DO LOWERCASE=1
jsr XDOS.ReadGBufAXDir jsr XDOS.ReadGBufAXDir
@ -490,48 +647,48 @@ L3A16 lda #$02 go read root dir into gbuf
bcs L39E2 if not bcs L39E2 if not
L3A29 rts 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. and #$F0 strip device type info.
sta loklst,x copy them to a temp workspace sta loklst,x copy them to a temp workspace
dex dex
bpl L3A2D bpl .1
ldx DEVCNT ldx GP.DEVCNT
rts rts
*-------------------------------------- *--------------------------------------
XDOS.FindVCBForDevNum XDOS.FindVCBForDevNum
lda #VCB0 look for vcb for DEVNUM lda #XDOS.VCB0 look for vcb for GP.DEVNUM
ldy #$FF ldy #$FF
.1 tax new index to next vcb .1 tax new index to next vcb
lda VCBs+VCB.DEV,x check all devnums lda XDOS.VCBs+VCB.DEV,x check all devnums
cmp DEVNUM is this the vcb? cmp GP.DEVNUM is this the vcb?
beq .7 beq .7
lda VCBs,x is this a free vcb? lda XDOS.VCBs,x is this a free vcb?
bne .3 if not bne .3 if not
iny iny
bne .3 already found a free one bne .3 already found a free one
stx vcbptr save first free VCB stx XDOS.VCBPtr save first free VCB
.3 txa .3 txa
clc inc index to next vcb clc inc index to next vcb
adc #VCB adc #VCB
bcc .1 bcc .1
ldx vcbptr get found free if any ldx XDOS.VCBPtr get found free if any
tya any free vcb's available? 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 .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. beq .5 no, kick this one out.
txa next vcb txa next vcb
@ -543,10 +700,10 @@ XDOS.FindVCBForDevNum
* sec * sec
rts rts
.5 stz VCBs,x free this entry .5 stz XDOS.VCBs,x free this entry
stz VCBs+VCB.DEV,x stz XDOS.VCBs+VCB.DEV,x
.7 stx vcbptr save entry index. .7 stx XDOS.VCBPtr save entry index.
.8 clc no error. .8 clc no error.
rts rts
@ -555,33 +712,33 @@ XDOS.CheckVolName
ldx #$00 index to directory name. ldx #$00 index to directory name.
ldy namptr index to pathname. 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? cmp #$E0 is it a directory?
bcc L3A90 if not. bcc .1 if not.
and #$0F isolate name length and and #$0F isolate name length and
sta namcnt save as a counter. 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 rts
L3A92 lda gbuf+4,x next char .2 lda XDOS.GBuf+4,x next char
L3A95 cmp pathbuf,y .3 cmp XDOS.PathBuf,y
bne L3A90 if not the same. bne .1 if not the same.
inx check next char inx check next char
iny iny
dec namcnt dec namcnt
bpl L3A92 if more to compare. bpl .2 if more to compare.
clc match found clc match found
XDOS.CheckVolName.RTS XDOS.CheckVolName.RTS
rts rts
*-------------------------------------- *--------------------------------------
XDOS.VCBMount ldx vcbptr previously logged in volume? XDOS.VCBMount ldx XDOS.VCBPtr previously logged in volume?
lda VCBs,x (acc = 0?) lda XDOS.VCBs,x (acc = 0?)
beq XDOS.VCBMountAtX no, go prepare vcb. beq XDOS.VCBMountAtX no, go prepare vcb.
jsr XDOS.VCBCmpGBUF does vcb match vol read? jsr XDOS.VCBCmpGBUF does vcb match vol read?
@ -590,16 +747,16 @@ XDOS.VCBMount ldx vcbptr previously logged in volume?
XDOS.VCBMountAtX XDOS.VCBMountAtX
ldy #VCB zero out vcb entry ldy #VCB zero out vcb entry
L3AB2 stz VCBs,x L3AB2 stz XDOS.VCBs,x
inx inx
dey dey
bne L3AB2 bne L3AB2
lda gbuf pointer to previous dir block lda XDOS.GBuf pointer to previous dir block
ora gbuf+1 must be null ora XDOS.GBuf+1 must be null
bne tsterr bne tsterr
lda gbuf+4 test for header lda XDOS.GBuf+4 test for header
and #$E0 and #$E0
cmp #$E0 cmp #$E0
bne tsterr bne tsterr
@ -607,30 +764,30 @@ L3AB2 stz VCBs,x
jsr tstdupvol does a duplicate with open files jsr tstdupvol does a duplicate with open files
bcs L3B04 already exist? branch if yes. 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 and #$0F strip root marker
tay tay
pha pha
* clc * clc
adc vcbptr adc XDOS.VCBPtr
tax tax
L3ACE lda gbuf+4,y L3ACE lda XDOS.GBuf+4,y
sta VCBs,x sta XDOS.VCBs,x
dex dex
dey dey
bne L3ACE bne L3ACE
pla get length again pla get length again
sta VCBs,x and save. sta XDOS.VCBs,x and save.
lda DEVNUM last device used. lda GP.DEVNUM last device used.
sta VCBs+VCB.DEV,x save device # and sta XDOS.VCBs+VCB.DEV,x save device # and
ldy #0 ldy #0
.1 lda gbuf+39,y .1 lda XDOS.GBuf+39,y
sta VCBs+VCB.BMAP,x copy BMAP+TBLK sta XDOS.VCBs+VCB.BMAP,x copy BMAP+TBLK
iny iny
inx inx
cpy #4 cpy #4
@ -643,43 +800,43 @@ tsterr lda #MLI.E.NOTPRODOS not tree or dir, unrecognized type
sec sec
rts rts
*-------------------------------------- *--------------------------------------
XDOS.VCBCmpGBUF lda gbuf+4 with name in directory. XDOS.VCBCmpGBUF lda XDOS.GBuf+4 with name in directory.
and #$0F and #$0F
cmp VCBs,x are they the same length? cmp XDOS.VCBs,x are they the same length?
stx xvcbptr (see rev note #23) stx .1+1 xvcbptr : see rev note #23
bne .9 if not the same. bne .9 if not the same.
tay tay
clc clc
adc xvcbptr .1 adc #$FF xvcbptr : SELF MODIFIED
tax tax
.1 lda gbuf+4,y .2 lda XDOS.GBuf+4,y
cmp VCBs,x cmp XDOS.VCBs,x
bne .9 if not the same. bne .9 if not the same.
dex dex
dey dey
bne .1 bne .2
clc indicate match. clc indicate match.
.HS B0 BCS .HS B0 BCS
.9 sec .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 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 L3B2C tax
jsr XDOS.VCBCmpGBUF jsr XDOS.VCBCmpGBUF
bcs L3B41 if no match. 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. bne L3B4B cannot look at this volume.
stz VCBs,x take duplicate offline if no open files stz XDOS.VCBs,x take duplicate offline if no open files
stz VCBs+VCB.DEV,x stz XDOS.VCBs+VCB.DEV,x
* clc ok to log in new volume. * clc ok to log in new volume.
rts rts
@ -691,14 +848,14 @@ L3B41 txa index to next vcb
clc clc
rts rts
L3B4B sta duplflag duplicate has been found. L3B4B sta XDOS.VCBDupFlag duplicate has been found.
stx vcbentry save pointer to conflicting vcb. stx XDOS.VCBDupEnt save pointer to conflicting vcb.
sec error. sec error.
rts rts
*-------------------------------------- *--------------------------------------
tstfrblk ldx vcbptr test if enough free blocks available for request. tstfrblk ldx XDOS.VCBPtr test if enough free blocks available for request.
lda VCBs+VCB.FBLK+1,x check if proper count for this volume. lda XDOS.VCBs+VCB.FBLK+1,x check if proper count for this volume.
ora VCBs+VCB.FBLK,x ora XDOS.VCBs+VCB.FBLK,x
bne L3BAD branch if count is non-zero. bne L3BAD branch if count is non-zero.
tkfrecnt jsr cntbms get # of bitmaps tkfrecnt jsr cntbms get # of bitmaps
@ -712,12 +869,12 @@ tkfrecnt jsr cntbms get # of bitmaps
jsr upbmap update volume bitmap. jsr upbmap update volume bitmap.
bcs L3BC1 if error. bcs L3BC1 if error.
ldx vcbptr get address of 1st bitmap ldx XDOS.VCBPtr get address of 1st bitmap
lda VCBs+VCB.BMAP,x lda XDOS.VCBs+VCB.BMAP,x
sta bloknml sta ZP.BLKNUM
lda VCBs+VCB.BMAP+1,x lda XDOS.VCBs+VCB.BMAP+1,x
sta bloknml+1 sta ZP.BLKNUM+1
L3B81 jsr XDOS.ReadGBuf use general buffer for temp space to L3B81 jsr XDOS.ReadGBuf use general buffer for temp space to
bcs L3BC1 count free blocks (bits). 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? dec bmcnt was that the last bitmap?
bmi L3B96 if so, go change fcb so not done again. bmi L3B96 if so, go change fcb so not done again.
inc bloknml inc ZP.BLKNUM
bne L3B81 bne L3B81
inc bloknml+1 inc ZP.BLKNUM+1
bra L3B81 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 lda nofree
bmi L3BBE if no free space was found. 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 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 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. sec on this volume.
sbc reql sbc reql
lda VCBs+VCB.FBLK+1,x lda XDOS.VCBs+VCB.FBLK+1,x
sbc reqh sbc reqh
bcc L3BBE bcc L3BBE
@ -756,15 +913,15 @@ L3BAD lda VCBs+VCB.FBLK,x compare total available free blocks
L3BBE lda #MLI.E.VOLFULL L3BBE lda #MLI.E.VOLFULL
sec sec
L3BC1 rts L3BC1 rts
*--------------------------------------
count ldy #$00 count ldy #$00
L3BC4 lda gbuf,y bit pattern. L3BC4 lda XDOS.GBuf,y bit pattern.
beq L3BCC don't count beq L3BCC don't count
jsr cntfree 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 beq L3BD4
jsr cntfree jsr cntfree
@ -785,7 +942,7 @@ L3BD4 iny
sta nofree sta nofree
L3BEE rts L3BEE rts
*--------------------------------------
cntfree asl count the # of bits in this byte cntfree asl count the # of bits in this byte
bcc L3BFA bcc L3BFA
@ -797,10 +954,10 @@ cntfree asl count the # of bits in this byte
L3BFA ora #$00 L3BFA ora #$00
bne cntfree loop until all bits counted bne cntfree loop until all bits counted
rts rts
*--------------------------------------
cntbms ldx vcbptr cntbms ldx XDOS.VCBPtr
ldy VCBs+VCB.TBLK+1,x return the # of bitmaps ldy XDOS.VCBs+VCB.TBLK+1,x return the # of bitmaps
lda VCBs+VCB.TBLK,x possible with the total count lda XDOS.VCBs+VCB.TBLK,x possible with the total count
bne L3C0B found in the vcb. bne L3C0B found in the vcb.
dey adj for bitmap block boundary dey adj for bitmap block boundary

View File

@ -3,8 +3,8 @@ NEW
*-------------------------------------- *--------------------------------------
XDOS.DeallocAX stx bmcnt high address of block. XDOS.DeallocAX stx bmcnt high address of block.
* pha save low address. * pha save low address.
ldx vcbptr check that bitmap block address is ldx XDOS.VCBPtr check that bitmap block address is
ldy VCBs+VCB.TBLK+1,x valid given the total # of blocks ldy XDOS.VCBs+VCB.TBLK+1,x valid given the total # of blocks
cpy bmcnt on the volume. cpy bmcnt on the volume.
* pla * pla
bcc L3C8C branch if invalid bcc L3C8C branch if invalid
@ -42,9 +42,9 @@ XDOS.DeallocAX stx bmcnt high address of block.
bcs L3C8B error. bcs L3C8B error.
lda bmcnt get map # 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 lda bmadev
jsr gtbmap read it into buffer jsr gtbmap read it into buffer
bcs L3C8B bcs L3C8B
@ -54,12 +54,12 @@ L3C64 ldy bmptr index to byte
lda nofree (get indiviual bit) lda nofree (get indiviual bit)
bcc bmbufhi branch if on page 1 of bitmap bcc bmbufhi branch if on page 1 of bitmap
ora bmbuf+$100,y ora XDOS.BMBuf+$100,y
sta bmbuf+$100,y sta XDOS.BMBuf+$100,y
bcs L3C7D always. bcs L3C7D always.
bmbufhi ora bmbuf,y this address + 2 is used as an absolute reference to bmbuf high byte. bmbufhi ora XDOS.BMBuf,y this address + 2 is used as an absolute reference to XDOS.BMBuf high byte.
sta bmbuf,y sta XDOS.BMBuf,y
L3C7D lda #$80 mark bitmap as modified L3C7D lda #$80 mark bitmap as modified
tsb bmastat tsb bmastat
@ -82,7 +82,7 @@ alc1blk jsr fndbmap get address of bitmap.
L3C95 ldy #$00 begin search at start of bitmap block. L3C95 ldy #$00 begin search at start of bitmap block.
sty half which half (page) to search sty half which half (page) to search
L3C9A lda bmbuf,y L3C9A lda XDOS.BMBuf,y
bne L3CB9 free blocks indicated by 'on' bits bne L3CB9 free blocks indicated by 'on' bits
iny iny
@ -91,7 +91,7 @@ L3C9A lda bmbuf,y
inc half now search page 2. inc half now search page 2.
inc basval base value = base address / 2048. 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 bne L3CB9
iny iny
@ -120,10 +120,10 @@ L3CB9 sty bmptr save index pointer to valid bit group.
lda half lda half
beq L3CDB branch if allocating from 1st 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. 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 L3CDE rol find left most 'on' bit
bcs L3CE4 if found. 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 ? ldx half which half of bitmap ?
bne L3CF4 if page 2. bne L3CF4 if page 2.
sta bmbuf,y sta XDOS.BMBuf,y
beq L3CF7 always. 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. L3CF7 lda #$80 indicate map is modified.
tsb bmastat tsb bmastat
ldx vcbptr subtract 1 from total free vcb blocks ldx XDOS.VCBPtr subtract 1 from total free vcb blocks
lda VCBs+VCB.FBLK,x to account for newly allocated block. lda XDOS.VCBs+VCB.FBLK,x to account for newly allocated block.
bne .7 bne .7
dec VCBs+VCB.FBLK+1,x dec XDOS.VCBs+VCB.FBLK+1,x
.7 dec VCBs+VCB.FBLK,x .7 dec XDOS.VCBs+VCB.FBLK,x
lda scrtch return address in y,a of newly lda scrtch return address in y,a of newly
ldy scrtch+1 allocated block. ldy scrtch+1 allocated block.
clc no errors. clc no errors.
rts rts
*-------------------------------------- *--------------------------------------
nxtbmap ldx vcbptr inc to next bitmap, but 1st make sure there is another one. nxtbmap ldx XDOS.VCBPtr inc to next bitmap, but 1st make sure there is another one.
lda VCBs+VCB.TBLK+1,x lda XDOS.VCBs+VCB.TBLK+1,x
lsr lsr
lsr lsr
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. 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 jsr upbmap
fndbmap ldy vcbptr fndbmap ldy XDOS.VCBPtr
lda VCBs+VCB.DEV,y get device #. lda XDOS.VCBs+VCB.DEV,y get device #.
cmp bmadev does this map match this device ? cmp bmadev does this map match this device ?
beq L3D4A yes. beq L3D4A yes.
jsr upbmap otherwise, save other volume's bitmap jsr upbmap otherwise, save other volume's bitmap
bcs L3D5F bcs L3D5F
ldy vcbptr ldy XDOS.VCBPtr
lda VCBs+VCB.DEV,y lda XDOS.VCBs+VCB.DEV,y
sta bmadev and read in fresh bitmap for this dev. sta bmadev and read in fresh bitmap for this dev.
L3D4A ldy bmastat is it already modified ? 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. jsr gtbmap otherwise read in fresh bitmap.
bcs L3D5F if error. bcs L3D5F if error.
L3D54 ldy vcbptr get relative block # of bitmap. L3D54 ldy XDOS.VCBPtr get relative block # of bitmap.
lda VCBs+VCB.BMAPIDX,y lda XDOS.VCBs+VCB.BMAPIDX,y
asl 2 pages per block asl 2 pages per block
sta basval sta basval
@ -211,14 +211,14 @@ upbmap clc
*-------------------------------------- *--------------------------------------
gtbmap sta bmadev read bitmap specified by dev and vcb. gtbmap sta bmadev read bitmap specified by dev and vcb.
ldy vcbptr get lowest map # with free blocks in it ldy XDOS.VCBPtr get lowest map # with free blocks in it
lda VCBs+VCB.BMAPIDX,y lda XDOS.VCBs+VCB.BMAPIDX,y
sta bmacmap associate offset with bitmap ctrl block. sta bmacmap associate offset with bitmap ctrl block.
clc add this # to the base address of 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. sta bmadadr is address of bitmap to be used.
lda VCBs+VCB.BMAP+1,y lda XDOS.VCBs+VCB.BMAP+1,y
adc #$00 adc #$00
sta bmadadr+1 sta bmadadr+1
@ -226,23 +226,23 @@ gtbmap sta bmadev read bitmap specified by dev and vcb.
.HS 2C BIT ABS .HS 2C BIT ABS
wrtbmap lda #$02 write command. wrtbmap lda #$02 write command.
sta A4L sta ZP.CMDNUM
lda DEVNUM save current dev # lda GP.DEVNUM save current dev #
pha pha
lda bmadev get bitmap's dev # lda bmadev get bitmap's dev #
sta DEVNUM sta GP.DEVNUM
lda bmadadr and disk address lda bmadadr and disk address
sta bloknml sta ZP.BLKNUM
lda bmadadr+1 lda bmadadr+1
sta bloknml+1 sta ZP.BLKNUM+1
lda /bmbuf lda /XDOS.BMBuf
* lda bmbufhi+2 address of the buffer (low = 0) * lda bmbufhi+2 address of the buffer (low = 0)
jsr XDOS.RWBlock jsr XDOS.RWBlock
plx keep A=error code if CS plx keep A=error code if CS
stx DEVNUM stx GP.DEVNUM
L3DB6 rts L3DB6 rts
*-------------------------------------- *--------------------------------------
@ -253,7 +253,7 @@ XDOS.WriteGBufDir
.FIN .FIN
*-------------------------------------- *--------------------------------------
XDOS.ReadGBuf_d_frst 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 ldx d_frst+1
.DO LOWERCASE=1 .DO LOWERCASE=1
XDOS.ReadGBufAXDir XDOS.ReadGBufAXDir
@ -261,35 +261,35 @@ XDOS.ReadGBufAXDir
bcc XDOS.UnpackGBuf bcc XDOS.UnpackGBuf
rts rts
.FIN .FIN
XDOS.ReadGBufAX sta bloknml XDOS.ReadGBufAX sta ZP.BLKNUM
stx bloknml+1 stx ZP.BLKNUM+1
XDOS.ReadGBuf lda #$01 read command. XDOS.ReadGBuf lda #$01 read command.
.HS 2C BIT ABS .HS 2C BIT ABS
XDOS.WriteGBuf lda #$02 write command XDOS.WriteGBuf lda #$02 write command
sta A4L pass to device handler. sta ZP.A4L pass to device handler.
lda /gbuf general buffer. lda /XDOS.GBuf general buffer.
XDOS.RWBlock sta buf+1 buffer high. XDOS.RWBlock sta ZP.BUFPTR+1 buffer high.
stz buf buffer low (always on page boundary) 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 lda #$FF indicates reg call made to dev handler
sta ioaccess 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. jmp XDOS.DevCall call the driver.
*-------------------------------------- *--------------------------------------
.DO LOWERCASE=1 .DO LOWERCASE=1
XDOS.CheckAndUnpackGBuf XDOS.CheckAndUnpackGBuf
lda gbuf+$23 lda XDOS.GBuf+$23
sta h_entln sta h_entln
ldy gbuf+$24 ldy XDOS.GBuf+$24
sty h_maxent sty h_maxent
cmp #$27 cmp #$27
bne .9 bne .9
@ -379,8 +379,8 @@ XDOS.GetMark ldx fcbptr index to open fcb.
ldy #$02 index to user's mark parameter. ldy #$02 index to user's mark parameter.
.1 lda FCBs+FCB.MARK,x transfer current position .1 lda XDOS.FCBs+FCB.MARK,x transfer current position
sta (A3L),y to user's parameter list sta (ZP.A3L),y to user's parameter list
inx inx
iny iny
cpy #$05 transfer 3 bytes cpy #$05 transfer 3 bytes
@ -399,11 +399,11 @@ XDOS.SetMark ldy #$04 index to user's desired position.
inx inx
sec indicate comparisons are necessary. 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 sta tposll-2,y
bcc .2 branch if mark < eof bcc .2 branch if mark < eof
cmp FCBs+FCB.EOF,x cmp XDOS.FCBs+FCB.EOF,x
bcc .2 branch if mark qualifies. bcc .2 branch if mark qualifies.
bne L3DFD branch if mark > eof (invalid position) 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. bne .1 branch if more.
rdposn ldy fcbptr test to see if new position is 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 and #$FE
sta scrtch sta scrtch
lda tposlh middle byte of new position 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. bcs L3E44 of current position.
lda tposhi make sure within the same 64k. 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. bne L3E44 branch if not.
jmp svmark if so, adj fcb, position ptr and return. 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. beq L3E50 0 = invalid file type.
cmp #$04 tree class file? 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. jmp dirmark no, test for dir type.
L3E50 ldy #$A4 clear illegal filetype entry in fcb L3E50 ldy #$A4 clear illegal filetype entry in fcb
sta FCBs,y sta XDOS.FCBs,y
lda #MLI.E.BADREF and report error lda #MLI.E.BADREF and report error
sec sec
rts 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. 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 and #FCB.F.DBLKMOD if previous data was modified then
beq L3E6B disk must be updated. 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. bcs L3ED4 if error.
L3E6B ldy fcbptr test to see if current index block 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 and #$FE position is within 128k of the
sta scrtch beginning of current sapling level sta scrtch beginning of current sapling level
lda tposhi chunk. lda tposhi chunk.
@ -479,12 +479,12 @@ L3E89 lda tposlh is new position < 512 ?
ora tposhi ora tposhi
bne L3EEF no, mark both data and index block as bne L3EEF no, mark both data and index block as
lda FCBs+FCB.1stBLK,y unallocated. 1st block is only block lda XDOS.FCBs+FCB.1stBLK,y unallocated. 1st block is only block
sta bloknml and it's data. sta ZP.BLKNUM and it's data.
lda FCBs+FCB.1stBLK+1,y high block address. lda XDOS.FCBs+FCB.1stBLK+1,y high block address.
jmp rnewpos go read in block and set statuses. 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. and #FCB.F.IBLKMOD was modified.
beq L3EA9 read in over it if current up to date. 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 L3EEF lda #$03 show neither index or data block alloc'd
bra L3F18 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) lda (zpt),y (high address)
sta bloknml+1 sta ZP.BLKNUM+1
dec zpt+1 dec zpt+1
* jsr rfcbidx read in sapling level * jsr rfcbidx read in sapling level
lda #$01 prepare to read index block : read command lda #$01 prepare to read index block : read command
sta A4L sta ZP.CMDNUM
ldx #zpt address of current index buffer. ldx #zpt address of current index buffer.
@ -591,11 +591,11 @@ L3F49 sta (datptr),y
dec datptr+1 dec datptr+1
rts 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) lda (zpt),y (high address)
dec zpt+1 dec zpt+1
rnewpos sta bloknml+1 rnewpos sta ZP.BLKNUM+1
jsr XDOS.ReadFCB.DBLK jsr XDOS.ReadFCB.DBLK
bcs L3F86 if error. bcs L3F86 if error.
@ -606,10 +606,10 @@ svmark ldy fcbptr update position in fcb
iny iny
ldx #$02 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. sta oldmark,x fails later.
lda tposll,x lda tposll,x
sta FCBs+FCB.MARK,y sta XDOS.FCBs+FCB.MARK,y
dey dey
dex move 3 byte position marker dex move 3 byte position marker
bpl L3F68 bpl L3F68
@ -627,16 +627,16 @@ dirmark cmp #$0D is it a directory ?
beq L3F9C yes... beq L3F9C yes...
lda #MLI.E.INCFF no, so compatability problem. 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. L3F9C lda scrtch recover results of previous subtraction.
lsr use difference as counter for how many lsr use difference as counter for how many
sta cntent blocks must be read to get to new pos'n. 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. cmp tposlh indicated by carry.
lda FCBs+FCB.MARK+2,y lda XDOS.FCBs+FCB.MARK+2,y
sbc tposhi sbc tposhi
bcc L3FB9 if set, position forward. otherwise, bcc L3FB9 if set, position forward. otherwise,
@ -660,7 +660,7 @@ L3FB9 ldy #$02 position is forward from current.
beq svmark branch always. beq svmark branch always.
*-------------------------------------- *--------------------------------------
dirpos1 lda (datptr),y get link address of previous or next 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 cmp #$01 test for null byte into carry
iny but first be sure there is a link. iny but first be sure there is a link.
lda (datptr),y get the rest of the 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 L3FD6 rts
L3FD8 sta bloknml+1 L3FD8 sta ZP.BLKNUM+1
*-------------------------------------- *--------------------------------------
XDOS.ReadFCB.DBLK XDOS.ReadFCB.DBLK
lda #$01 read command lda #$01 read command
sta A4L sta ZP.CMDNUM
ldx #datptr points at address of data buffer. ldx #datptr points at address of data buffer.
@ -686,17 +686,17 @@ XDOS.ReadFCB.DBLK
bcs L3FF2 error. bcs L3FF2 error.
ldy fcbptr ldy fcbptr
lda bloknml lda ZP.BLKNUM
sta FCBs+FCB.DBLK,y save block # just read in fcb. sta XDOS.FCBs+FCB.DBLK,y save block # just read in fcb.
lda bloknml+1 lda ZP.BLKNUM+1
sta FCBs+FCB.DBLK+1,y sta XDOS.FCBs+FCB.DBLK+1,y
* clc * clc
L3FF2 rts L3FF2 rts
*-------------------------------------- *--------------------------------------
*rfcbidx lda #$01 prepare to read index block : read command *rfcbidx lda #$01 prepare to read index block : read command
* sta A4L * sta ZP.CMDNUM
* ldx #zpt address of current index buffer. * ldx #zpt address of current index buffer.
@ -704,10 +704,10 @@ L3FF2 rts
* bcs L400C error * bcs L400C error
* ldy fcbptr * ldy fcbptr
* lda bloknml * lda ZP.BLKNUM
* sta FCBs+FCB.IBLK,y save block address of this index in fcb * sta XDOS.FCBs+FCB.IBLK,y save block address of this index in fcb
* lda bloknml+1 * lda ZP.BLKNUM+1
* sta FCBs+FCB.IBLK+1,y * sta XDOS.FCBs+FCB.IBLK+1,y
** clc ** clc
@ -728,33 +728,33 @@ rfcbfst lda #$01 read command.
ldx #zpt rd block into index portion of file buf 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. lda XDOS.FCBs,y get disk block address from fcb.
sta bloknml block 0 not legal sta ZP.BLKNUM block 0 not legal
bne .1 bne .1
lda FCBs+1,y high address of disk block lda XDOS.FCBs+1,y high address of disk block
bne .2 bne .2
lda #$0C Block = $0000, allocation error. lda #$0C Block = $0000, allocation error.
jsr GP.SysDeath doesn't return... jsr GP.SYSDEATH doesn't return...
.1 lda FCBs+1,y .1 lda XDOS.FCBs+1,y
.2 sta bloknml+1 .2 sta ZP.BLKNUM+1
*-------------------------------------- *--------------------------------------
fileio1 lda $00,x get memory address of buffer from 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 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 jsr XDOS.FCBDevIDSelect
lda #$FF also, set to indicate reg call made to lda #$FF also, set to indicate reg call made to
sta ioaccess device handler. sta ioaccess device handler.
lda DEVNUM transfer device # for dispatcher lda GP.DEVNUM transfer device # for dispatcher
sta unitnum to convert to unit #. sta ZP.UNITNUM to convert to unit #.
stz p8error clear global error code. stz GP.ERROR clear global error code.
jmp XDOS.DevCall call the driver. jmp XDOS.DevCall call the driver.
*-------------------------------------- *--------------------------------------
wfcbdat ldx #datptr point at memory address with x and wfcbdat ldx #datptr point at memory address with x and
@ -782,8 +782,8 @@ wfcbidx jsr upbmap update bitmap.
*-------------------------------------- *--------------------------------------
XDOS.ResetFCBStatus XDOS.ResetFCBStatus
ldx fcbptr ldx fcbptr
and FCBs+FCB.F,x and XDOS.FCBs+FCB.F,x
sta FCBs+FCB.F,x sta XDOS.FCBs+FCB.F,x
L4096 rts L4096 rts
*-------------------------------------- *--------------------------------------
@ -808,7 +808,7 @@ L40AD lda fcbflg if this byte <> 0 then free fcb found
L40B9 ldy #FCB L40B9 ldy #FCB
L40BD stz FCBs,x but clean it first. L40BD stz XDOS.FCBs,x but clean it first.
inx inx
dey dey
bne L40BD bne L40BD
@ -818,7 +818,7 @@ L40BD stz FCBs,x but clean it first.
ldx fcbptr ldx fcbptr
L40CB lda d_dev,y move ownership info. 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. inx order of both the fcb and directory entry buffer.
iny iny
cpy #6 cpy #6
@ -835,7 +835,7 @@ L40CB lda d_dev,y move ownership info.
and #$01 read enabled bit 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. and #$02 check for write enabled request.
beq L40F7 branch for open as read-only 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 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 lda fcbptr
ora ofcbtbl,x this is done via a translation table ora ofcbtbl,x this is done via a translation table
tay between directory info and fcb. tay between directory info and fcb.
lda d_frst,x lda d_frst,x
sta FCBs,y sta XDOS.FCBs,y
dex dex
bpl L4101 last loop stores hi address of 1st block 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 ldx fcbptr
lda cntent this was set up by 'tstopen'. 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. jsr alcbuffr go allocate buffer in memory tables.
bcs L4147 if errors. bcs L4147 if errors.
ldx fcbptr ldx fcbptr
jsr XDOS.GetFCBBufX rtn addr of bufs in data & index ptrs. jsr XDOS.GetFCBBufX rtn addr of bufs in data & index ptrs.
lda flevel mark level at which lda GP.FLEVEL mark level at which
sta FCBs+FCB.FLEVEL,x file was opened. 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 ? cmp #$04 is it a tree file ?
bcs L415E no, assume a directory. bcs L415E no, assume a directory.
lda #$FF fool the position routine into giving 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. ldy #$02 etc. set desired position to 0.
lda #$00 lda #$00
@ -891,8 +891,8 @@ L413C sta tposll,y
L4147 pha save error code. L4147 pha save error code.
ldx fcbptr free buffer space. ldx fcbptr free buffer space.
stz FCBs,x necessary to release fcb also. stz XDOS.FCBs,x necessary to release fcb also.
lda FCBs+FCB.BUFID,x lda XDOS.FCBs+FCB.BUFID,x
beq L4156 if no bufnum, ok because never alloc'd. beq L4156 if no bufnum, ok because never alloc'd.
jsr relbuffr go release buffer. 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. L415E jsr XDOS.ReadFCB.DBLK read in 1st block of directory file.
bcs L4147 return error after freeing buffer & fcb. bcs L4147 return error after freeing buffer & fcb.
L4163 ldx vcbptr index to vcb. L4163 ldx XDOS.VCBPtr index to vcb.
inc VCBs+VCB.OFCNT,x add 1 to # of files currently open inc XDOS.VCBs+VCB.OFCNT,x add 1 to # of files currently open
ldx fcbptr index to fcb. 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 ldy #$05
sta (A3L),y sta (ZP.A3L),y
* clc open is successful * clc open is successful
rts rts
*-------------------------------------- *--------------------------------------
@ -926,7 +926,7 @@ L4188 tay index to next fcb.
inc cntent inc cntent
L4191 lda FCBs,y is this fcb in use ? L4191 lda XDOS.FCBs,y is this fcb in use ?
bne L41A3 yes. bne L41A3 yes.
txa if not, should we claim it ? 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. tay and put it back in y.
ldx #$06 index to directory entry owner info. 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. cmp d_dev-1,x the same file again.
bne L41C1 if not, then next fcb. 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. bne L41A9 loop to check all owner info.
inc totent file is already open, now see 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). and #$02 if so report file busy (with carry set).
beq L41C1 branch if this file is read access only. beq L41C1 branch if this file is read access only.
@ -969,10 +969,10 @@ L41C1 tya calc position of next fcb.
*-------------------------------------- *--------------------------------------
XDOS.UpdateFCBIBlk XDOS.UpdateFCBIBlk
ldy fcbptr ldy fcbptr
lda bloknml lda ZP.BLKNUM
sta FCBs+FCB.IBLK,y save block address of this index in fcb sta XDOS.FCBs+FCB.IBLK,y save block address of this index in fcb
lda bloknml+1 lda ZP.BLKNUM+1
sta FCBs+FCB.IBLK+1,y sta XDOS.FCBs+FCB.IBLK+1,y
rts rts
*-------------------------------------- *--------------------------------------
MAN 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 bcc L4205 branch if result mark < eof. adjust
ldy fcbptr request to read until just before eof. 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 sbc tposll
sta cbytes sta cbytes
sta rwreql sta rwreql
lda FCBs+FCB.EOF+1,y lda XDOS.FCBs+FCB.EOF+1,y
sbc tposlh sbc tposlh
sta cbytes+1 sta cbytes+1
sta rwreqh sta rwreqh
@ -96,7 +96,7 @@ L427B bcs L4249
jsr XDOS.Tpos2Y get index to next block address jsr XDOS.Tpos2Y get index to next block address
lda (zpt),y get low address lda (zpt),y get low address
sta bloknml sta ZP.BLKNUM
inc zpt+1 inc zpt+1
cmp (zpt),y are hi and low address the same? cmp (zpt),y are hi and low address the same?
bne L4299 no, it's a real block address. bne L4299 no, it's a real block address.
@ -112,12 +112,12 @@ L4299 lda (zpt),y get high address
L429C dec zpt+1 L429C dec zpt+1
bcs L4249 if no block to read. bcs L4249 if no block to read.
sta bloknml+1 sta ZP.BLKNUM+1
lda ioaccess has 1st call gone to device yet ? lda ioaccess has 1st call gone to device yet ?
beq L4249 no, go thru normal route beq L4249 no, go thru normal route
lda datptr+1 reset hi buffer address for dev handler lda datptr+1 reset hi buffer address for dev handler
sta buf+1 sta ZP.BUFPTR+1
jsr XDOS.DevCall jsr XDOS.DevCall
bcc L424E no errors, branch always. bcc L424E no errors, branch always.
@ -135,11 +135,11 @@ rwdone ldy #$06 return total # of bytes actually read
sec derived from cbytes-rwreq. sec derived from cbytes-rwreq.
lda cbytes lda cbytes
sbc rwreql sbc rwreql
sta (A3L),y sta (ZP.A3L),y
iny iny
lda cbytes+1 lda cbytes+1
sbc rwreqh sbc rwreqh
sta (A3L),y sta (ZP.A3L),y
jmp rdposn leave with valid position in fcb. jmp rdposn leave with valid position in fcb.
*-------------------------------------- *--------------------------------------
preprw ldy fcbptr adj pointer to user's buffer to make 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 sbc tposll
sta usrbuf sta usrbuf
bcs L42E9 if no adjustment to hi address needed bcs L42E9 if no adjustment to hi address needed
dec usrbuf+1 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 clc
beq L42F9 if new line not enabled. beq L42F9 if new line not enabled.
sec carry indicates new line enabled sec carry indicates new line enabled
sta nlmask 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. sta nlchar accesible spot.
L42F9 ldy tposll index to 1st data. L42F9 ldy tposll index to 1st data.
@ -278,9 +280,9 @@ XDOS.ReadDir jsr rdposn
ldy #$00 provide dummy back pointer for future ldy #$00 provide dummy back pointer for future
ldx fcbptr re-position. x = hi byte of last block 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 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 inx
iny inc indexes to do both hi and low bytes iny inc indexes to do both hi and low bytes
cpy #$02 cpy #$02
@ -292,27 +294,27 @@ L43B7 rts
L43B8 jmp errfix1 report how much xfer'd before error. L43B8 jmp errfix1 report how much xfer'd before error.
*-------------------------------------- *--------------------------------------
mvcbytes ldy #$04 move request count to a more accessable location mvcbytes ldy #$04 move request count to a more accessable location
lda (A3L),y lda (ZP.A3L),y
sta cbytes sta cbytes
sta rwreql sta rwreql
iny iny
lda (A3L),y lda (ZP.A3L),y
sta cbytes+1 sta cbytes+1
sta rwreqh sta rwreqh
ldy fcbptr return y = val(fcbptr), 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... clc and carry clear...
rts rts
*-------------------------------------- *--------------------------------------
mvdbufr ldy #$02 move the pointer to user's buffer 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 sta usrbuf z-page area
iny iny
lda (A3L),y lda (ZP.A3L),y
sta usrbuf+1 sta usrbuf+1
gfcbstyp ldy fcbptr return storage type gfcbstyp ldy fcbptr return storage type
lda FCBs+FCB.STYPE,y lda XDOS.FCBs+FCB.STYPE,y
rts rts
*-------------------------------------- *--------------------------------------
* this subroutine adds the requested byte count to mark and returns sum * 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 calcmrk ldx #$00
ldy fcbptr ldy fcbptr
clc clc
L43EE lda FCBs+FCB.MARK,y L43EE lda XDOS.FCBs+FCB.MARK,y
sta tposll,x sta tposll,x
sta oldmark,x sta oldmark,x
adc cbytes,x adc cbytes,x
@ -339,7 +341,7 @@ L43EE lda FCBs+FCB.MARK,y
bne L43EE always. bne L43EE always.
eoftest lda scrtch,x new mark in scrtch. 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. bcc L4414 no, proceed.
bne L4414 yes, adjust 'cbytes' request bne L4414 yes, adjust 'cbytes' request
@ -352,9 +354,9 @@ L4414 rts
werreof jsr plus2fcb reset eof to pre-error position. werreof jsr plus2fcb reset eof to pre-error position.
L4418 lda oldeof,x place oldeof back into fcb 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 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 sta scrtch,x and copy mark to scrtch for test of
dey eof less than mark. dey eof less than mark.
dex 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. 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 sta oldeof,x
bcc L4442 and if carry set... bcc L4442 and if carry set...
lda scrtch,x then copy scrtch to fcb's eof. lda scrtch,x then copy scrtch to fcb's eof.
sta FCBs+FCB.EOF,y sta XDOS.FCBs+FCB.EOF,y
L4442 dey L4442 dey
dex copy all 3 bytes dex copy all 3 bytes
@ -468,9 +470,9 @@ L44B8 jsr alcwblk go allocate for data block.
sta (zpt),y store low address. sta (zpt),y store low address.
ldy fcbptr update fcb to indicate that this block 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. txa get high address again.
sta FCBs+FCB.DBLK+1,y sta XDOS.FCBs+FCB.DBLK+1,y
L44E9 jsr preprw L44E9 jsr preprw
jsr wrtpart jsr wrtpart
@ -583,9 +585,9 @@ L457A jsr alcwblk get another block address for the sap
sta (zpt),y save hi address sta (zpt),y save hi address
dec zpt+1 dec zpt+1
ldy fcbptr make newly allocated block the current 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 txa
sta FCBs+FCB.IBLK,y sta XDOS.FCBs+FCB.IBLK,y
jsr wfcbfst save new top of tree jsr wfcbfst save new top of tree
bcs L45B1 bcs L45B1
*-------------------------------------- *--------------------------------------
@ -617,18 +619,18 @@ swapdown jsr alcwblk make current seed into a sapling, allocate a block befo
bcs .9 return errors. bcs .9 return errors.
ldy fcbptr get previous first block 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 pha save temporarily while swapping in new
lda scrtch top index. get new block address (low) lda scrtch top index. get new block address (low)
tax tax
sta FCBs+FCB.1stBLK,y sta XDOS.FCBs+FCB.1stBLK,y
lda FCBs+FCB.1stBLK+1,y lda XDOS.FCBs+FCB.1stBLK+1,y
pha pha
lda scrtch+1 and high address too lda scrtch+1 and high address too
sta FCBs+FCB.1stBLK+1,y sta XDOS.FCBs+FCB.1stBLK+1,y
sta FCBs+FCB.IBLK+1,y make new top also the current index in sta XDOS.FCBs+FCB.IBLK+1,y make new top also the current index in
txa memory. get low address again. 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 inc zpt+1 make previous the 1st entry in sub index
pla pla
sta (zpt) sta (zpt)
@ -641,7 +643,7 @@ swapdown jsr alcwblk make current seed into a sapling, allocate a block befo
lda #FCB.F.STMOD lda #FCB.F.STMOD
jsr XDOS.SetFCBStatus jsr XDOS.SetFCBStatus
inc FCBs+FCB.STYPE,x inc XDOS.FCBs+FCB.STYPE,x
* clc no error * clc no error
.9 rts .9 rts
@ -652,10 +654,10 @@ alcwblk jsr alc1blk
lda #FCB.F.UMOD lda #FCB.F.UMOD
jsr XDOS.SetFCBStatus jsr XDOS.SetFCBStatus
inc FCBs+FCB.UBLK,x inc XDOS.FCBs+FCB.UBLK,x
bne .9 bne .9
inc FCBs+FCB.UBLK+1,x inc XDOS.FCBs+FCB.UBLK+1,x
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
@ -666,15 +668,15 @@ tstwprot jsr XDOS.GetFCBStatus check for 'never been modified' condition
jsr XDOS.FCBDevIDSelect 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 pha
lda bloknml save the current block values lda ZP.BLKNUM save the current block values
pha pha
stz A4L stz ZP.CMDNUM
stz bloknml zero the block # stz ZP.BLKNUM zero the block #
stz bloknml+1 stz ZP.BLKNUM+1
jsr XDOS.DevCall jsr XDOS.DevCall
bcs .1 branch if write protect error 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. lda #$00 otherwise, assume no errors.
.1 plx .1 plx
stx bloknml restore the block # stx ZP.BLKNUM restore the block #
plx plx
stx bloknml+1 stx ZP.BLKNUM+1
tstwprot.RTS rts tstwprot.RTS rts
*-------------------------------------- *--------------------------------------

View File

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

View File

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

View File

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

View File

@ -5,157 +5,46 @@ NEW
.OR $2000 .OR $2000
.TF PRODOS,TSYS .TF PRODOS,TSYS
*-------------------------------------- *--------------------------------------
KVER .EQ 23 release 2.0.3
*--------------------------------------
READCAT .EQ 1 Boot Block read Catalog at $C00 READCAT .EQ 1 Boot Block read Catalog at $C00
ENHFILENAME .EQ 1 ENHFILENAME .EQ 1
LOWERCASE .EQ 1 LOWERCASE .EQ 1
ACL .EQ 1 ACL .EQ 1
LOGO .EQ 1 LOGO .EQ 1
PM .EQ 1 AUXLC .EQ 0
*-------------------------------------- M.PM .EQ 1
NSC.IOBASE .EQ $C300 M.RAM .EQ 1
*-------------------------------------- *--------------------------------------
.INB inc/zp.i .INB inc/zp.i
.INB inc/io.i .INB inc/io.i
.INB inc/io.iigs.i
.INB inc/io.d2.i .INB inc/io.d2.i
.INB inc/monitor.i
.INB inc/mli.i .INB inc/mli.i
.INB inc/mli.e.i .INB inc/mli.e.i
.INB inc/rom.ii.i
.INB inc/rom.iie.i
.INB inc/rom.iigs.i
*-------------------------------------- *--------------------------------------
MMStartUp .EQ $0202 ILDR .EQ $0800
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
vmode .EQ $04FB video firmware operating mode GP .EQ $BF00
ch80col .EQ $057B 80 column ch position XRW .EQ $D000
CLK .EQ $D742
dbuf .EQ $0C00 8 page directory buffer XDOS.PathBuf .EQ $D700
vblock1 .EQ $0E00 ramdisk directory block *XDOS.prefixbuf .EQ $D742+125
volbuf .EQ $0F00 volume buffer XDOS.FCBs .EQ $D800 8 opened files
iobuf .EQ $1400 i/o buffer XDOS.VCBs .EQ $D900 10 mounted vols
fbuf .EQ $1800 FCB buffer XDOS.BMBuf .EQ $DA00 512 byte bitmap buffer
sysentry .EQ $2000 .SYS file load address XDOS.GBuf .EQ $DC00 general purpose 512 byte block buffer
xfer .EQ $C314 XDOS .EQ $DE00
*--------------------------------------
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
FCB.FLEVEL .EQ 27 RAM .EQ $FF00
FCB.DIRTY .EQ 28 IRQ .EQ $FF9B
RAMX .EQ $0200
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
*-------------------------------------- *--------------------------------------
.DUMMY .DUMMY
.OR $10 .OR $10
@ -172,6 +61,8 @@ ZPBLLenBits .BS 1
.ED .ED
*-------------------------------------- *--------------------------------------
.INB usr/src/prodos.fx/prodos.s.ldr .INB usr/src/prodos.fx/prodos.s.ldr
X.Unpak.XatYAX .DO AUXLC=1
.FIN
X.Unpak.XatYA sty ZPOutBufPtr X.Unpak.XatYA sty ZPOutBufPtr
sta ZPOutBufPtr+1 sta ZPOutBufPtr+1
lda PAKME.Table,x lda PAKME.Table,x
@ -179,118 +70,137 @@ X.Unpak.XatYA sty ZPOutBufPtr
lda PAKME.Table+1,x lda PAKME.Table+1,x
sta ZPInBufPtr+1 sta ZPInBufPtr+1
.INB usr/src/shared/x.unpak.s .INB usr/src/shared/x.unpak.s
.DO LOGO .DO LOGO=1
.INB usr/src/prodos.fx/prodos.s.logo .INB usr/src/prodos.fx/prodos.s.logo
.FIN .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 ILDR.PAK .DA #0
.DA ILDR.LEN .DA ILDR.LEN
.PH $800
.INB usr/src/prodos.fx/prodos.s.ildr .INB usr/src/prodos.fx/prodos.s.ildr
.EP
GP.PAK .DA #0 GP.PAK .DA #0
.DA GP.LEN .DA GP.LEN
.PH $BF00
.INB usr/src/prodos.fx/prodos.s.gp .INB usr/src/prodos.fx/prodos.s.gp
.EP
XRW.PAK .DA #0 XRW.PAK .DA #0
.DA XRW.LEN .DA XRW.LEN
.PH $D000
.INB usr/src/prodos.fx/prodos.s.xrw .INB usr/src/prodos.fx/prodos.s.xrw
.EP
XDOS.PAK .DA #0 XDOS.PAK .DA #0
.DA XDOS.LEN .DA XDOS.LEN
.PH $DE00
.INB usr/src/prodos.fx/prodos.s.xdos.a .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.b
.INB usr/src/prodos.fx/prodos.s.xdos.c .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.d
.INB usr/src/prodos.fx/prodos.s.xdos.e .INB usr/src/prodos.fx/prodos.s.xdos.e
.INB usr/src/prodos.fx/prodos.s.xdos.f .INB usr/src/prodos.fx/prodos.s.xdos.f
.EP
IRQ.PAK .DA #0 IRQ.PAK .DA #0
.DA IRQ.LEN .DA IRQ.LEN
.PH $FF9B
.INB usr/src/prodos.fx/prodos.s.irq .INB usr/src/prodos.fx/prodos.s.irq
.EP
.DO M.RAM=1
RAM.PAK .DA #0 RAM.PAK .DA #0
.DA RAM.LEN .DA RAM.LEN
.PH $FF00
.INB usr/src/prodos.fx/prodos.s.ram .INB usr/src/prodos.fx/prodos.s.ram
.EP
RAMX.PAK .DA #0 RAMX.PAK .DA #0
.DA RAMX.LEN .DA RAMX.LEN
.PH $200
.INB usr/src/prodos.fx/prodos.s.ramx .INB usr/src/prodos.fx/prodos.s.ramx
.EP .FIN
DCLK.PAK .DA #0 DCLK.PAK .DA #0
.DA DCLK.LEN .DA DCLK.LEN
.PH XDOS.ClockDrv
.INB usr/src/prodos.fx/prodos.s.dclk .INB usr/src/prodos.fx/prodos.s.dclk
.EP
NCLK.PAK .DA #0 NCLK.PAK .DA #0
.DA NCLK.LEN .DA NCLK.LEN
.PH XDOS.ClockDrv
.INB usr/src/prodos.fx/prodos.s.nclk .INB usr/src/prodos.fx/prodos.s.nclk
.EP
TCLK.PAK .DA #0 TCLK.PAK .DA #0
.DA TCLK.LEN .DA TCLK.LEN
.PH XDOS.ClockDrv
.INB usr/src/prodos.fx/prodos.s.tclk .INB usr/src/prodos.fx/prodos.s.tclk
.EP
XCLK.PAK .DA #0 XCLK.PAK .DA #0
.DA XCLK.LEN .DA XCLK.LEN
.PH XDOS.ClockDrv
.INB usr/src/prodos.fx/prodos.s.xclk .INB usr/src/prodos.fx/prodos.s.xclk
.EP
CCLK.PAK .DA #0 CCLK.PAK .DA #0
.DA CCLK.LEN .DA CCLK.LEN
.PH XDOS.ClockDrv
.INB usr/src/prodos.fx/prodos.s.cclk .INB usr/src/prodos.fx/prodos.s.cclk
.EP
SEL1.PAK .DA #0 SEL1.PAK .DA #0
.DA SEL1.LEN .DA SEL1.LEN
.PH $1000
.INB usr/src/prodos.fx/prodos.s.sel1 .INB usr/src/prodos.fx/prodos.s.sel1
.EP
SEL2.PAK .DA #0 SEL2.PAK .DA #0
.DA SEL2.LEN .DA SEL2.LEN
.PH $1000
.INB usr/src/prodos.fx/prodos.s.sel2 .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 .AS "PAKME" TAG
.DA $2000 BIN ORG .DA $2000 BIN ORG
.DA #14 Chunk Count .DA #PAKME.ID/2 Chunk Count
.DA PAKME.Table Chunks .DA PAKME.Table Chunks
*-------------------------------------- *--------------------------------------
MAN 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 lda CORE.EvtCount
bne .1 bne .1
*-------------------------------------- *--------------------------------------
.4 bit OPENAPPLE .4 bit IO.OPENAPPLE
bpl .8 bpl .8
lda KBD lda IO.KBD
bpl .8 bpl .8
cmp #"0" cmp #"0"
@ -114,7 +114,7 @@ CORE.Events jsr CORE.GetEvents
cmp #"9"+1 cmp #"9"+1
bcs .8 bcs .8
sta KBDSTROBE sta IO.KBDSTROBE
and #$0F and #$0F
@ -140,14 +140,14 @@ CORE.Quit php
lda IRQ.INTNUM lda IRQ.INTNUM
sta K.MLI.PARAMS+1 sta K.MLI.PARAMS+1
>MLICALL MLIDEALLOCIRQ >MLICALL MLI.DEALLOCIRQ
bit RDIOUDIS bit IO.RDIOUDIS
sta SETIOUDIS sta IO.SETIOUDIS
sta CLRDHIRES sta IO.CLRDHIRES
bmi .1 bmi .1
sta CLRIOUDIS sta IO.CLRIOUDIS
.1 ldx #5 .1 ldx #5
@ -156,7 +156,7 @@ CORE.Quit php
bpl .2 bpl .2
lda #4 lda #4
ldx #MLIQUIT ldx #MLI.QUIT
jmp GP.MLICall jmp GP.MLICall
*-------------------------------------- *--------------------------------------
CORE.UpdPPS tax save RC From INIT or RUN CORE.UpdPPS tax save RC From INIT or RUN
@ -213,7 +213,7 @@ CORE.GetEvents lda #K.S.EVT
dec IRQ.Tick dec IRQ.Tick
bra .2 bra .2
.1 lda VBL get VLINE status .1 lda IO.VBL get VLINE status
tax tax
eor CORE.VBLState eor CORE.VBLState
bpl .8 no change,no tick bpl .8 no change,no tick
@ -500,7 +500,7 @@ CORE.IRQGS .OP 65816
phk phk
plb plb
stz IO.IIGS.CLRVBLINT stz IO.GS.CLRVBLINT
jsr CORE.IRQ.Switch jsr CORE.IRQ.Switch

View File

@ -4,11 +4,11 @@ NEW
* CONTROL SECTION : * CONTROL SECTION :
.LIST ON .LIST ON
*-------------------------------------- *--------------------------------------
C1 .EQ MAIN.S *C1 .EQ MAIN.S
C2 .EQ AUX.S *C2 .EQ AUX.S
C3 .EQ D1.S *C3 .EQ D1.S
C4 .EQ D2.S *C4 .EQ D2.S
C5 .EQ E0.S *C5 .EQ E0.S
*-------------------------------------- *--------------------------------------
.LIST OFF .LIST OFF
.DO MAIN.S>$BC0 .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 K.MLI.PARAMS+2
>STYA ZPPtr2 >STYA ZPPtr2
>MLICALL MLIONLINE >MLICALL MLI.ONLINE
bcs DIRENT.RTS bcs DIRENT.RTS
>LDYAI 16+S.STAT*18+1 14*(Vols+Stat) + 4*(PFT+Stat) + \0 >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 >LDYAI K.MLI.PATH
>STYA K.MLI.PARAMS+1 >STYA K.MLI.PARAMS+1
>MLICALL MLIGETFILEINFO >MLICALL MLI.GFINFO
sta K.S.STAT+S.STAT.P.DEVSTATUS sta K.S.STAT+S.STAT.P.DEVSTATUS
bcs .3 bcs .3
@ -190,7 +190,7 @@ K.ReadDir.DIR sta K.MLI.PARAMS+1 A=#S.DIR.PRODOS.REF
lda /512 lda /512
sta K.MLI.PARAMS+5 sta K.MLI.PARAMS+5
>MLICALL MLIREAD Read A block from directory >MLICALL MLI.READ Read A block from directory
bcs .99 bcs .99
ldy #S.FD.DIR.EL Check if first run.... ldy #S.FD.DIR.EL Check if first run....

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -4,7 +4,7 @@ NEW
* called directly by IRQ Vector $FFFE in AuxLC * called directly by IRQ Vector $FFFE in AuxLC
* Must keep: * Must keep:
* A,X,Y * A,X,Y
* SETREADAUX * IO.SETREADAUX
* if we are here, Aux ZP/Stack already On * if we are here, Aux ZP/Stack already On
* Exit with RTI * Exit with RTI
* if A2osX Drivers cannot clear IRQ, * if A2osX Drivers cannot clear IRQ,
@ -26,29 +26,29 @@ IRQ.Handler cld
stx IRQ.5+1 stx IRQ.5+1
sty IRQ.4+1 sty IRQ.4+1
lda RD80STORE lda IO.RD80STORE
and RDPAGE2 and IO.RDPAGE2
pha pha
sta CLRPAGE2 sta IO.CLRPAGE2
lda RDREADAUX lda IO.RDREADAUX
pha 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 pha
sta CLRWRITEAUX Driver may R/W in screen holes sta IO.CLRWRITEAUX Driver may R/W in screen holes
lda MSLOT Save MSLOT lda MSLOT Save MSLOT
sta IRQ.2+2 sta IRQ.2+2
* lda RDCXROM C100-C7ff state * lda IO.RDCXROM C100-C7ff state
* pha * 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 IRQ.JSR jsr CORE.IRQ.DEV SELF MODIFIED
* ldx #CLRCXROM * ldx #IO.CLRCXROM
* pla Get CXROM State * pla Get CXROM State
* bpl .3 * bpl .3
@ -64,26 +64,26 @@ IRQ.JSR jsr CORE.IRQ.DEV SELF MODIFIED
eor #$C0 ....mmm...not looking like Cn.... eor #$C0 ....mmm...not looking like Cn....
bne IRQ.3 bne IRQ.3
sta CLRC8ROM Release $C800 sta IO.CLRC8ROM Release $C800
IRQ.2 lda $ff00 SELF MODIFIED IRQ.2 lda $ff00 SELF MODIFIED
IRQ.3 pla Must keep Carry IRQ.3 pla Must keep Carry
bpl .1 bpl .1
sta SETWRITEAUX sta IO.SETWRITEAUX
clv coming for AUX.....cancel switch clv coming for AUX.....cancel switch
.1 pla .1 pla
bpl .2 bpl .2
sta SETREADAUX sta IO.SETREADAUX
clv coming for AUX.....cancel switch clv coming for AUX.....cancel switch
.2 pla .2 pla
bpl .3 bpl .3
sta SETPAGE2 sta IO.SETPAGE2
.3 bvc IRQ.4 if not V, skip task switching .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 .DA K.FreeMem K.FreeStkObj
*-------------------------------------- *--------------------------------------
* LO Byte : * LO Byte :
* #RRAMWRAMBNK1,#RRAMWRAMBNK2 * #IO.RRAMWRAMBNK1,#IO.RRAMWRAMBNK2
* HI Byte : * HI Byte :
* Flags (ROOT....) * Flags (ROOT....)
*-------------------------------------- *--------------------------------------
K.SYSCALL.BANK .DA #RRAMWRAMBNK1 $00 K.SYSCALL.BANK .DA #IO.RRAMWRAMBNK1 $00
.DA #0 .DA #0
.DA #RRAMWRAMBNK1 .DA #IO.RRAMWRAMBNK1
.DA #0 .DA #0
.DA #RRAMWRAMBNK1 .DA #IO.RRAMWRAMBNK1
.DA #0 .DA #0
.DA #RRAMWRAMBNK1 .DA #IO.RRAMWRAMBNK1
.DA #0 .DA #0
.DA #RRAMWRAMBNK1 .DA #IO.RRAMWRAMBNK1
.DA #0 .DA #0
.DA #RRAMWRAMBNK1 .DA #IO.RRAMWRAMBNK1
.DA #0 .DA #0
.DA #RRAMWRAMBNK1 .DA #IO.RRAMWRAMBNK1
.DA #0 .DA #0
.DA #RRAMWRAMBNK1 .DA #IO.RRAMWRAMBNK1
.DA #0 .DA #0
.DA #RRAMWRAMBNK1 $10 .DA #IO.RRAMWRAMBNK1 $10
.DA #0 .DA #0
.DA #RRAMWRAMBNK1 .DA #IO.RRAMWRAMBNK1
.DA #0 .DA #0
.DA #RRAMWRAMBNK1 .DA #IO.RRAMWRAMBNK1
.DA #0 .DA #0
.DA #RRAMWRAMBNK1 .DA #IO.RRAMWRAMBNK1
.DA #0 .DA #0
.DA #RRAMWRAMBNK1 .DA #IO.RRAMWRAMBNK1
.DA #0 .DA #0
.DA #RRAMWRAMBNK1 .DA #IO.RRAMWRAMBNK1
.DA #0 .DA #0
.DA #RRAMWRAMBNK1 .DA #IO.RRAMWRAMBNK1
.DA #0 .DA #0
.DA #RRAMWRAMBNK1 .DA #IO.RRAMWRAMBNK1
.DA #0 .DA #0
.DA #RRAMWRAMBNK1 $20 : STDIO .DA #IO.RRAMWRAMBNK1 $20 : STDIO
.DA #0 .DA #0
.DA #RRAMWRAMBNK1 .DA #IO.RRAMWRAMBNK1
.DA #0 .DA #0
.DA #RRAMWRAMBNK1 .DA #IO.RRAMWRAMBNK1
.DA #0 .DA #0
.DA #RRAMWRAMBNK1 .DA #IO.RRAMWRAMBNK1
.DA #0 .DA #0
.DA #RRAMWRAMBNK1 .DA #IO.RRAMWRAMBNK1
.DA #0 .DA #0
.DA #RRAMWRAMBNK1 .DA #IO.RRAMWRAMBNK1
.DA #0 .DA #0
.DA #RRAMWRAMBNK1 .DA #IO.RRAMWRAMBNK1
.DA #0 .DA #0
.DA #RRAMWRAMBNK1 .DA #IO.RRAMWRAMBNK1
.DA #0 .DA #0
.DA #RRAMWRAMBNK1 $30 .DA #IO.RRAMWRAMBNK1 $30
.DA #0 .DA #0
.DA #RRAMWRAMBNK1 .DA #IO.RRAMWRAMBNK1
.DA #0 .DA #0
.DA #RRAMWRAMBNK1 .DA #IO.RRAMWRAMBNK1
.DA #0 .DA #0
.DA #RRAMWRAMBNK1 .DA #IO.RRAMWRAMBNK1
.DA #0 .DA #0
.DA #RRAMWRAMBNK1 .DA #IO.RRAMWRAMBNK1
.DA #0 .DA #0
.DA #RRAMWRAMBNK1 .DA #IO.RRAMWRAMBNK1
.DA #0 .DA #0
.DA #RRAMWRAMBNK1 .DA #IO.RRAMWRAMBNK1
.DA #0 .DA #0
.DA #RRAMWRAMBNK1 .DA #IO.RRAMWRAMBNK1
.DA #0 .DA #0
.DA #RRAMWRAMBNK1 $40 .DA #IO.RRAMWRAMBNK1 $40
.DA #0 .DA #0
.DA #RRAMWRAMBNK1 .DA #IO.RRAMWRAMBNK1
.DA #0 .DA #0
.DA #RRAMWRAMBNK1 .DA #IO.RRAMWRAMBNK1
.DA #0 .DA #0
.DA #RRAMWRAMBNK1 .DA #IO.RRAMWRAMBNK1
.DA #0 .DA #0
.DA #RRAMWRAMBNK1 .DA #IO.RRAMWRAMBNK1
.DA #0 .DA #0
.DA #RRAMWRAMBNK1 .DA #IO.RRAMWRAMBNK1
.DA #0 .DA #0
.DA #RRAMWRAMBNK1 .DA #IO.RRAMWRAMBNK1
.DA #0 .DA #0
.DA #RRAMWRAMBNK1 .DA #IO.RRAMWRAMBNK1
.DA #0 .DA #0
.DA #RRAMWRAMBNK1 $50 .DA #IO.RRAMWRAMBNK1 $50
.DA #0 .DA #0
.DA #RRAMWRAMBNK1 .DA #IO.RRAMWRAMBNK1
.DA #0 .DA #0
.DA #RRAMWRAMBNK1 .DA #IO.RRAMWRAMBNK1
.DA #0 .DA #0
.DA #RRAMWRAMBNK1 .DA #IO.RRAMWRAMBNK1
.DA #0 .DA #0
.DA #RRAMWRAMBNK1 $58 : PRODOS .DA #IO.RRAMWRAMBNK1 $58 : PRODOS
.DA #0 .DA #0
.DA #RRAMWRAMBNK1 .DA #IO.RRAMWRAMBNK1
.DA #0 .DA #0
.DA #RRAMWRAMBNK1 .DA #IO.RRAMWRAMBNK1
.DA #0 .DA #0
.DA #RRAMWRAMBNK1 .DA #IO.RRAMWRAMBNK1
.DA #0 .DA #0
*-------------------------------------- *--------------------------------------
.DA #RRAMWRAMBNK2 $60 : MOUNT .DA #IO.RRAMWRAMBNK2 $60 : MOUNT
.DA #0 .DA #0
.DA #RRAMWRAMBNK2 .DA #IO.RRAMWRAMBNK2
.DA #0 .DA #0
.DA #RRAMWRAMBNK2 $64 : STKOBJ .DA #IO.RRAMWRAMBNK2 $64 : STKOBJ
.DA #0 .DA #0
.DA #RRAMWRAMBNK2 .DA #IO.RRAMWRAMBNK2
.DA #0 .DA #0
.DA #RRAMWRAMBNK2 $68 : ARG .DA #IO.RRAMWRAMBNK2 $68 : ARG
.DA #0 .DA #0
.DA #RRAMWRAMBNK2 .DA #IO.RRAMWRAMBNK2
.DA #0 .DA #0
.DA #RRAMWRAMBNK2 .DA #IO.RRAMWRAMBNK2
.DA #0 .DA #0
.DA #RRAMWRAMBNK2 .DA #IO.RRAMWRAMBNK2
.DA #0 .DA #0
.DA #RRAMWRAMBNK2 $70 : STDLIB .DA #IO.RRAMWRAMBNK2 $70 : STDLIB
.DA #0 .DA #0
.DA #RRAMWRAMBNK2 .DA #IO.RRAMWRAMBNK2
.DA #0 .DA #0
.DA #RRAMWRAMBNK2 .DA #IO.RRAMWRAMBNK2
.DA #0 .DA #0
.DA #RRAMWRAMBNK2 .DA #IO.RRAMWRAMBNK2
.DA #0 .DA #0
.DA #RRAMWRAMBNK2 .DA #IO.RRAMWRAMBNK2
.DA #0 .DA #0
.DA #RRAMWRAMBNK2 .DA #IO.RRAMWRAMBNK2
.DA #0 .DA #0
.DA #RRAMWRAMBNK2 .DA #IO.RRAMWRAMBNK2
.DA #0 .DA #0
.DA #RRAMWRAMBNK2 .DA #IO.RRAMWRAMBNK2
.DA #0 .DA #0
.DA #RRAMWRAMBNK2 $80 : STRING .DA #IO.RRAMWRAMBNK2 $80 : STRING
.DA #0 .DA #0
.DA #RRAMWRAMBNK2 .DA #IO.RRAMWRAMBNK2
.DA #0 .DA #0
.DA #RRAMWRAMBNK2 .DA #IO.RRAMWRAMBNK2
.DA #0 .DA #0
.DA #RRAMWRAMBNK2 .DA #IO.RRAMWRAMBNK2
.DA #0 .DA #0
.DA #RRAMWRAMBNK2 .DA #IO.RRAMWRAMBNK2
.DA #0 .DA #0
.DA #RRAMWRAMBNK2 .DA #IO.RRAMWRAMBNK2
.DA #0 .DA #0
.DA #RRAMWRAMBNK2 .DA #IO.RRAMWRAMBNK2
.DA #0 .DA #0
.DA #RRAMWRAMBNK2 .DA #IO.RRAMWRAMBNK2
.DA #0 .DA #0
.DA #RRAMWRAMBNK1 $90 : DEV .DA #IO.RRAMWRAMBNK1 $90 : DEV
.DA #0 .DA #0
.DA #RRAMWRAMBNK1 .DA #IO.RRAMWRAMBNK1
.DA #0 .DA #0
.DA #RRAMWRAMBNK1 .DA #IO.RRAMWRAMBNK1
.DA #0 .DA #0
.DA #RRAMWRAMBNK1 .DA #IO.RRAMWRAMBNK1
.DA #0 .DA #0
.DA #RRAMWRAMBNK2 $98 : BIN .DA #IO.RRAMWRAMBNK2 $98 : BIN
.DA #0 .DA #0
.DA #RRAMWRAMBNK2 .DA #IO.RRAMWRAMBNK2
.DA #0 .DA #0
.DA #RRAMWRAMBNK2 .DA #IO.RRAMWRAMBNK2
.DA #0 .DA #0
.DA #RRAMWRAMBNK2 .DA #IO.RRAMWRAMBNK2
.DA #0 .DA #0
.DA #RRAMWRAMBNK2 $A0 : PS .DA #IO.RRAMWRAMBNK2 $A0 : PS
.DA #0 .DA #0
.DA #RRAMWRAMBNK2 .DA #IO.RRAMWRAMBNK2
.DA #0 .DA #0
.DA #RRAMWRAMBNK2 .DA #IO.RRAMWRAMBNK2
.DA #0 .DA #0
.DA #RRAMWRAMBNK2 .DA #IO.RRAMWRAMBNK2
.DA #0 .DA #0
.DA #RRAMWRAMBNK2 .DA #IO.RRAMWRAMBNK2
.DA #0 .DA #0
.DA #RRAMWRAMBNK2 .DA #IO.RRAMWRAMBNK2
.DA #0 .DA #0
.DA #RRAMWRAMBNK2 .DA #IO.RRAMWRAMBNK2
.DA #0 .DA #0
.DA #RRAMWRAMBNK2 .DA #IO.RRAMWRAMBNK2
.DA #0 .DA #0
.DA #0 $B0 : STRV .DA #0 $B0 : STRV
@ -440,26 +440,26 @@ K.SYSCALL.BANK .DA #RRAMWRAMBNK1 $00
K.SYSCALL2 bit K.SYSCALL.BANK,x Get Target BNK K.SYSCALL2 bit K.SYSCALL.BANK,x Get Target BNK
bvc K.SYSCALL2.BANK bvc K.SYSCALL2.BANK
K.SYSCALL2.AUX sta SETREADAUX MAIN to AUX Mem API K.SYSCALL2.AUX sta IO.SETREADAUX MAIN to AUX Mem API
sta SETWRITEAUX sta IO.SETWRITEAUX
jsr K.SYSCALL.JMP jsr K.SYSCALL.JMP
sta CLRREADAUX sta IO.CLRREADAUX
sta CLRWRITEAUX sta IO.CLRWRITEAUX
rts rts
K.SYSCALL2.MAIN sta CLRREADAUX Coming from KERNEL in AUX... K.SYSCALL2.MAIN sta IO.CLRREADAUX Coming from KERNEL in AUX...
sta CLRWRITEAUX sta IO.CLRWRITEAUX
jsr .1 jsr .1
sta SETREADAUX sta IO.SETREADAUX
sta SETWRITEAUX sta IO.SETWRITEAUX
rts rts
.1 bit K.SYSCALL.BANK,x Get Target LC BNK .1 bit K.SYSCALL.BANK,x Get Target LC BNK
K.SYSCALL2.BANK bpl K.SYSCALL.JMP 0, E000, no BNK change K.SYSCALL2.BANK bpl K.SYSCALL.JMP 0, E000, no BNK change
sta .7+1 sta .7+1
lda $D000 #RRAMWRAMBNK1 or #RRAMWRAMBNK2 lda $D000 #IO.RRAMWRAMBNK1 or #IO.RRAMWRAMBNK2
cmp K.SYSCALL.BANK,x cmp K.SYSCALL.BANK,x
beq .7 beq .7
@ -468,14 +468,14 @@ K.SYSCALL2.BANK bpl K.SYSCALL.JMP 0, E000, no BNK change
lda K.SYSCALL.BANK,x lda K.SYSCALL.BANK,x
tax get Target BNK in x tax get Target BNK in x
bit $C000,x switch to Target BNK bit $C000,x switch to Target BNK
bit $C000,x * bit $C000,x
jsr .6 jsr .6
stx .5+1 Save X stx .5+1 Save X
plx get back Source BNK plx get back Source BNK
bit $C000,x switch to Target BNK bit $C000,x switch to Target BNK
bit $C000,x * bit $C000,x
.5 ldx #$ff SELF MODIFIED .5 ldx #$ff SELF MODIFIED
rts rts
@ -498,11 +498,11 @@ K.SYSCALL.JMPX2 clc
JMPXA >PULLA JMPXA >PULLA
K.SYSCALL.JMPX sta SETREADAUX K.SYSCALL.JMPX sta IO.SETREADAUX
sta SETWRITEAUX sta IO.SETWRITEAUX
jsr JMPX jsr JMPX
sta CLRREADAUX sta IO.CLRREADAUX
sta CLRWRITEAUX sta IO.CLRWRITEAUX
rts rts
*-------------------------------------- *--------------------------------------
MAN MAN

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -12,8 +12,8 @@ NEW
* S.TIME filled with System date/time * S.TIME filled with System date/time
*\-------------------------------------- *\--------------------------------------
K.Time >PULLW FORPNT K.Time >PULLW FORPNT
>MLICALL MLIGETTIME >MLICALL MLI.GETTIME
>LDYAI DATELO >LDYAI GP.DATE
>STYA TXTPTR >STYA TXTPTR
ldx #SYS.PTime2Time ldx #SYS.PTime2Time
jmp K.SYSCALL.JMPX 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 stz K.MLI.PARAMS+3+S.FIEX.ACL read mode
>MLICALL MLIACL >MLICALL MLI.ACL
bcs .9 bcs .9
lda (pStack) lda (pStack)
@ -215,7 +215,7 @@ K.ChOwn jsr PFT.CheckPath2
.2 lda #$57 write mode .2 lda #$57 write mode
sta K.MLI.PARAMS+3+S.FIEX.ACL sta K.MLI.PARAMS+3+S.FIEX.ACL
>MLICALL MLIACL >MLICALL MLI.ACL
.9 >RET 4 .9 >RET 4
*-------------------------------------- *--------------------------------------

View File

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