mirror of
https://github.com/A2osX/A2osX.git
synced 2025-02-20 15:29:07 +00:00
ProDOS.FX 8M (required for KRNL8M)
This commit is contained in:
parent
a8cf411cd7
commit
e65065228c
Binary file not shown.
@ -21,21 +21,21 @@ A2osX.QC.Start1 sei
|
||||
txs
|
||||
|
||||
cli
|
||||
bit RROMBNK1
|
||||
bit IO.RROMBNK1
|
||||
>LDYAI A2osX.QC
|
||||
>STYA POWERUP
|
||||
jsr SETPWRC
|
||||
>STYA ROM.PWREDUP
|
||||
jsr ROM.SETPWRC
|
||||
|
||||
lda #$01
|
||||
sta MEMTABL+$17 protect ProDOS MLI Page
|
||||
sta GP.MEMTABL+$17 protect ProDOS MLI Page
|
||||
ldx #$16
|
||||
|
||||
.1 stz MEMTABL,x Reset ProDOS memory bitmap
|
||||
.1 stz GP.MEMTABL,x Reset ProDOS memory bitmap
|
||||
dex
|
||||
bne .1
|
||||
|
||||
lda #$CF protect zero page, stack and page 1
|
||||
sta MEMTABL
|
||||
sta GP.MEMTABL
|
||||
|
||||
lda #$8C Reset 80 col screen ($0C=FF=HOME)
|
||||
jsr $C300
|
||||
@ -164,7 +164,7 @@ A2osX.QC.JMP >DEBUGOA
|
||||
jmp $2000
|
||||
*--------------------------------------
|
||||
A2osX.QC.SetPFX jsr MLI
|
||||
.DA #MLISETPREFIX
|
||||
.DA #MLI.SETPREFIX
|
||||
.DA MLISETPREFIX03
|
||||
rts
|
||||
*--------------------------------------
|
||||
@ -177,7 +177,7 @@ A2osX.QC.Load >LDYAI MSG.LOAD
|
||||
jsr A2osX.QC.PrintYA
|
||||
|
||||
jsr MLI
|
||||
.DA #MLIOPEN
|
||||
.DA #MLI.OPEN
|
||||
.DA MLIOPEN03
|
||||
bcs .9
|
||||
|
||||
@ -186,13 +186,13 @@ A2osX.QC.Load >LDYAI MSG.LOAD
|
||||
sta MLICLOSE03+1
|
||||
|
||||
jsr MLI
|
||||
.DA #MLIREAD
|
||||
.DA #MLI.READ
|
||||
.DA MLIREAD03
|
||||
|
||||
php
|
||||
pha
|
||||
jsr MLI
|
||||
.DA #MLICLOSE
|
||||
.DA #MLI.CLOSE
|
||||
.DA MLICLOSE03
|
||||
|
||||
pla
|
||||
@ -204,8 +204,8 @@ A2osX.QC.Load >LDYAI MSG.LOAD
|
||||
clc
|
||||
jsr A2osX.QC.PrintYA
|
||||
pla
|
||||
jsr PRBYTE
|
||||
jsr CROUT
|
||||
jsr ROM.PRBYTE
|
||||
jsr ROM.CROUT
|
||||
|
||||
sec
|
||||
rts
|
||||
@ -227,7 +227,7 @@ A2osX.QC.PrintYA
|
||||
|
||||
.1 lda (TmpPtr1),y
|
||||
ora #$80
|
||||
jsr COUT
|
||||
jsr ROM.COUT
|
||||
iny
|
||||
dex
|
||||
bne .1
|
||||
@ -235,7 +235,7 @@ A2osX.QC.PrintYA
|
||||
.9 plp
|
||||
bcc .99
|
||||
|
||||
jsr CROUT
|
||||
jsr ROM.CROUT
|
||||
|
||||
.99 rts
|
||||
*--------------------------------------
|
||||
|
117
A2osX.S.txt
117
A2osX.S.txt
@ -8,7 +8,7 @@ NEW
|
||||
.INB inc/macros.i
|
||||
.INB inc/a2osx.i
|
||||
.INB inc/io.i
|
||||
.INB inc/monitor.i
|
||||
.INB inc/rom.ii.i
|
||||
.INB inc/mli.i
|
||||
.INB inc/mli.e.i
|
||||
.INB inc/zp.i
|
||||
@ -55,15 +55,15 @@ A2osX.Init0 >LDYAI $2000
|
||||
*--------------------------------------
|
||||
A2osX.Init1 ldx #$FF init 6502 stack to highest
|
||||
txs
|
||||
bit RROMBNK1
|
||||
jsr HOME
|
||||
bit IO.RROMBNK1
|
||||
jsr ROM.HOME
|
||||
>LDYAI MSG.INIT0
|
||||
jsr PrintFYA
|
||||
|
||||
>LDYAI MSG.SYSMEM
|
||||
jsr PrintFYA
|
||||
|
||||
lda MACHID
|
||||
lda GP.MACHID
|
||||
and #MACHID.M
|
||||
cmp #MACHID.M.128
|
||||
beq A2osX.Init1.128
|
||||
@ -72,7 +72,7 @@ A2osX.Init1 ldx #$FF init 6502 stack to highest
|
||||
bra *
|
||||
*--------------------------------------
|
||||
A2osX.Init1.128 jsr MLI
|
||||
.DA #MLIGETPREFIX
|
||||
.DA #MLI.GETPREFIX
|
||||
.DA MLIGETPREFIX01
|
||||
bcs *
|
||||
|
||||
@ -120,10 +120,10 @@ A2osX.Init1.128 jsr MLI
|
||||
.2 >LDYAI MSG.CPU.OK
|
||||
jsr PrintFYA
|
||||
|
||||
stz LEVEL Back To FILE LEVEL 0
|
||||
stz GP.FLEVEL Back To FILE LEVEL 0
|
||||
|
||||
jsr MLI Make sure all files are closed
|
||||
.DA #MLICLOSE
|
||||
.DA #MLI.CLOSE
|
||||
.DA MLICLOSE01
|
||||
bcs *
|
||||
*--------------------------------------
|
||||
@ -146,8 +146,8 @@ A2osX.RamDrv >LDYAI MSG.RAMDRV
|
||||
|
||||
.8 jsr PrintFYA
|
||||
*--------------------------------------
|
||||
A2osX.SetupQC lda RRAMWRAMBNK2
|
||||
lda RRAMWRAMBNK2
|
||||
A2osX.SetupQC lda IO.RRAMWRAMBNK2
|
||||
lda IO.RRAMWRAMBNK2
|
||||
|
||||
ldx #0
|
||||
.1 lda A2osX.QC.B.Start,x Still at $2xxx !!! not moved to $1xxx
|
||||
@ -159,7 +159,7 @@ A2osX.SetupQC lda RRAMWRAMBNK2
|
||||
inx
|
||||
bne .1
|
||||
|
||||
lda RROMBNK1
|
||||
lda IO.RROMBNK1
|
||||
*--------------------------------------
|
||||
A2osX.EnumPM >LDYAI MSG.PMENUM do this After SetupQC, a PM could override QC
|
||||
jsr PrintFYA
|
||||
@ -172,7 +172,7 @@ A2osX.MLIQuit >LDYAI MSG.INIT0OK
|
||||
stz $280 Quit to A2osX
|
||||
|
||||
jsr MLI
|
||||
.DA #MLIQUIT
|
||||
.DA #MLI.QUIT
|
||||
.DA MLIQUIT01
|
||||
bra *
|
||||
*--------------------------------------
|
||||
@ -191,7 +191,7 @@ A2osX.Screen80 lda #$8C Reset 80 col screen ($0C:HOME)
|
||||
|
||||
stx Logo.Filename
|
||||
jsr MLI
|
||||
.DA #MLIOPEN
|
||||
.DA #MLI.OPEN
|
||||
.DA MLIOPEN00
|
||||
bcs .99
|
||||
|
||||
@ -199,7 +199,7 @@ A2osX.Screen80 lda #$8C Reset 80 col screen ($0C:HOME)
|
||||
sta MLIREAD00+1
|
||||
sta MLICLOSE00+1
|
||||
jsr MLI
|
||||
.DA #MLIREAD
|
||||
.DA #MLI.READ
|
||||
.DA MLIREAD00
|
||||
bcs .98
|
||||
|
||||
@ -207,30 +207,31 @@ A2osX.Screen80 lda #$8C Reset 80 col screen ($0C:HOME)
|
||||
bra A2osX.ScreenDLGR
|
||||
|
||||
.98 jsr MLI
|
||||
.DA #MLICLOSE
|
||||
.DA #MLI.CLOSE
|
||||
.DA MLICLOSE00
|
||||
.99 rts
|
||||
*--------------------------------------
|
||||
A2osX.ScreenDLGR
|
||||
lda #20
|
||||
sta WNDTOP
|
||||
sta CV
|
||||
jsr VTAB
|
||||
sta ZP.WNDTOP
|
||||
sta ZP.CV
|
||||
jsr ROM.VTAB
|
||||
|
||||
sta SETALTCHAR
|
||||
sta CLRHIRES
|
||||
sta SETMIXED
|
||||
sta SET80DISP
|
||||
sta SET80STORE
|
||||
sta CLRPAGE2
|
||||
sta IO.SETALTCHAR
|
||||
sta IO.CLRHIRES
|
||||
sta IO.SETMIXED
|
||||
sta IO.SET80DISP
|
||||
sta IO.SET80STORE
|
||||
sta IO.CLRPAGE2
|
||||
|
||||
bit RDIOUDIS
|
||||
sta SETIOUDIS
|
||||
sta SETDHIRES
|
||||
bit IO.RDIOUDIS
|
||||
sta IO.SETIOUDIS
|
||||
sta IO.SETDHIRES
|
||||
bmi .10
|
||||
sta CLRIOUDIS
|
||||
|
||||
.10 sta CLRTEXT
|
||||
sta IO.CLRIOUDIS
|
||||
|
||||
.10 sta IO.CLRTEXT
|
||||
|
||||
lda #A2osX.LOGOLOAD+S.BM
|
||||
sta TmpPtr1
|
||||
@ -255,7 +256,7 @@ A2osX.ScreenDLGR
|
||||
tax
|
||||
lda PALETTE.AUX,x
|
||||
|
||||
sta SETPAGE2
|
||||
sta IO.SETPAGE2
|
||||
sta (TmpPtr2),y
|
||||
|
||||
pla
|
||||
@ -265,7 +266,7 @@ A2osX.ScreenDLGR
|
||||
lsr
|
||||
tax
|
||||
lda PALETTE.MAIN,x
|
||||
sta CLRPAGE2
|
||||
sta IO.CLRPAGE2
|
||||
sta (TmpPtr2),y
|
||||
|
||||
iny
|
||||
@ -292,7 +293,7 @@ A2osX.ScreenDLGR
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
sta SETPAGE2
|
||||
sta IO.SETPAGE2
|
||||
ora (TmpPtr2),y
|
||||
sta (TmpPtr2),y
|
||||
|
||||
@ -307,7 +308,7 @@ A2osX.ScreenDLGR
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
sta CLRPAGE2
|
||||
sta IO.CLRPAGE2
|
||||
ora (TmpPtr2),y
|
||||
sta (TmpPtr2),y
|
||||
|
||||
@ -332,17 +333,17 @@ A2osX.ScreenDLGR
|
||||
*--------------------------------------
|
||||
DisableRamDRV php
|
||||
sei
|
||||
lda DEVPTRS3D2
|
||||
cmp DEVPTRS S0D1=NOVEV
|
||||
lda GP.DEVPTRS3D2
|
||||
cmp GP.DEVPTRS S0D1=NOVEV
|
||||
bne .1
|
||||
|
||||
lda DEVPTRS3D2+1
|
||||
cmp DEVPTRS+1 S0D1=NODEV
|
||||
lda GP.DEVPTRS3D2+1
|
||||
cmp GP.DEVPTRS+1 S0D1=NODEV
|
||||
beq .9 S3D2=NODEV, nothing to do
|
||||
|
||||
.1 ldx DEVCNT
|
||||
.1 ldx GP.DEVCNT
|
||||
|
||||
.2 lda DEVLST,x LOOKING FOR $BF, $BB, $B7, $B3
|
||||
.2 lda GP.DEVLST,x LOOKING FOR $BF, $BB, $B7, $B3
|
||||
and #$F3
|
||||
cmp #$B3
|
||||
beq .3
|
||||
@ -356,26 +357,26 @@ DisableRamDRV php
|
||||
sec
|
||||
rts
|
||||
|
||||
.3 cpx DEVCNT
|
||||
.3 cpx GP.DEVCNT
|
||||
beq .5
|
||||
|
||||
.4 lda DEVLST+1,x
|
||||
sta DEVLST,x
|
||||
.4 lda GP.DEVLST+1,x
|
||||
sta GP.DEVLST,x
|
||||
inx
|
||||
cpx DEVCNT
|
||||
cpx GP.DEVCNT
|
||||
bne .4
|
||||
|
||||
.5 ldx DEVCNT
|
||||
stz DEVLST,x
|
||||
dec DEVCNT
|
||||
lda DEVPTRS
|
||||
sta DEVPTRS3D2
|
||||
lda DEVPTRS+1
|
||||
sta DEVPTRS3D2+1
|
||||
.5 ldx GP.DEVCNT
|
||||
stz GP.DEVLST,x
|
||||
dec GP.DEVCNT
|
||||
lda GP.DEVPTRS
|
||||
sta GP.DEVPTRS3D2
|
||||
lda GP.DEVPTRS+1
|
||||
sta GP.DEVPTRS3D2+1
|
||||
|
||||
plp
|
||||
jsr MLI
|
||||
.DA #MLIONLINE
|
||||
.DA #MLI.ONLINE
|
||||
.DA MLIONLINE01
|
||||
clc Success!!
|
||||
rts
|
||||
@ -411,12 +412,12 @@ EnumPM ldx #0
|
||||
jsr PrintFYA
|
||||
|
||||
jsr MLI
|
||||
.DA #MLISETPREFIX
|
||||
.DA #MLI.SETPREFIX
|
||||
.DA MLISETPREFIX02
|
||||
bcs .19
|
||||
|
||||
jsr MLI
|
||||
.DA #MLIOPEN
|
||||
.DA #MLI.OPEN
|
||||
.DA MLIOPEN01
|
||||
bcc .10
|
||||
|
||||
@ -431,7 +432,7 @@ EnumPM ldx #0
|
||||
sta MLICLOSE01+1
|
||||
|
||||
.2 jsr MLI
|
||||
.DA #MLIREAD
|
||||
.DA #MLI.READ
|
||||
.DA MLIREAD01
|
||||
bcs .98
|
||||
|
||||
@ -496,12 +497,12 @@ EnumPM ldx #0
|
||||
rts
|
||||
|
||||
.8 jsr MLI
|
||||
.DA #MLICLOSE
|
||||
.DA #MLI.CLOSE
|
||||
.DA MLICLOSE01
|
||||
bcs .99
|
||||
|
||||
jsr MLI
|
||||
.DA #MLISETPREFIX
|
||||
.DA #MLI.SETPREFIX
|
||||
.DA MLISETPREFIX01
|
||||
|
||||
.99 rts
|
||||
@ -559,7 +560,7 @@ LoadPM ldy #$1c
|
||||
jsr PrintFYA
|
||||
|
||||
jsr MLI
|
||||
.DA #MLIOPEN
|
||||
.DA #MLI.OPEN
|
||||
.DA MLIOPEN02
|
||||
bcs .99
|
||||
|
||||
@ -568,7 +569,7 @@ LoadPM ldy #$1c
|
||||
sta MLICLOSE02+1
|
||||
|
||||
jsr MLI
|
||||
.DA #MLIREAD
|
||||
.DA #MLI.READ
|
||||
.DA MLIREAD02
|
||||
bcs .98
|
||||
|
||||
@ -583,7 +584,7 @@ LoadPM ldy #$1c
|
||||
rts
|
||||
|
||||
.9 jsr MLI
|
||||
.DA #MLICLOSE
|
||||
.DA #MLI.CLOSE
|
||||
.DA MLICLOSE02
|
||||
.99 rts
|
||||
*--------------------------------------
|
||||
|
698
BIN/ARC.S.txt
Normal file
698
BIN/ARC.S.txt
Normal 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
587
BIN/ARCME.S.txt
Normal 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
490
BIN/UNARC.S.txt
Normal 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
|
@ -135,7 +135,7 @@ VLINE.MONO.XOR
|
||||
bcc .1
|
||||
|
||||
rts
|
||||
|
||||
*--------------------------------------
|
||||
VLINE.C16 lda CB.Cache+S.CB.X1
|
||||
lsr CB.Cache+S.CB.X1+1 divide by 4
|
||||
ror
|
||||
|
@ -789,7 +789,10 @@ SHIFT8.L7 .DA #%00000000,#%10000000,#%00000001,#%10000001,#%00000010,#%10000010
|
||||
.DA #%00110100,#%10110100,#%00110101,#%10110101,#%00110110,#%10110110,#%00110111,#%10110111
|
||||
.DA #%00111000,#%10111000,#%00111001,#%10111001,#%00111010,#%10111010,#%00111011,#%10111011
|
||||
.DA #%00111100,#%10111100,#%00111101,#%10111101,#%00111110,#%10111110,#%00111111,#%10111111
|
||||
*--------------------------------------
|
||||
.LIST ON
|
||||
X.OSD.LEN .EQ *-X.OSD
|
||||
.LIST OFF
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE usr/src/drv/dhgr.drv.s.osd
|
||||
|
@ -58,7 +58,7 @@ SETPIXEL.MONO.XOR
|
||||
eor Mono.Masks,x
|
||||
sta (ZPBasePtr)
|
||||
rts
|
||||
|
||||
*--------------------------------------
|
||||
SETPIXEL.C16 lda CB.Cache+S.CB.X1
|
||||
lsr CB.Cache+S.CB.X1+1 divide by 4
|
||||
ror
|
||||
@ -67,9 +67,9 @@ SETPIXEL.C16 lda CB.Cache+S.CB.X1
|
||||
tay Y=X/4 (range 0->139)
|
||||
|
||||
ldx CB.Cache+S.CB.Y1
|
||||
|
||||
*--------------------------------------
|
||||
* Y = PixelX (0,139), X = PixelY (0,191)
|
||||
|
||||
*--------------------------------------
|
||||
SETPIXEL.C16.YX lda DIV7.0,y PixelX MOD 7 (range 0->19)
|
||||
asl times 2 (range 0->38)
|
||||
* clc
|
||||
|
@ -628,6 +628,8 @@ BM.Cache .BS S.BM
|
||||
*--------------------------------------
|
||||
LBUF.MASK .BS 81 81 because of sta LBUF.DATA+1,x!!!
|
||||
LBUF.DATA .BS 81
|
||||
*LBUF.MASK .EQ $240
|
||||
*LBUF.DATA .EQ $2A0
|
||||
*--------------------------------------
|
||||
DIB .DA #0
|
||||
.DA #0,#0,#0
|
||||
|
@ -39,8 +39,9 @@ A2osX.SLEEP .EQ $1010
|
||||
*--------------------------------------
|
||||
A2osX.SCRNDEVS .EQ $11D0 0=console, 1-8=VT100, 9=GFX
|
||||
A2osX.ASCREEN .EQ $11DA Active Screen
|
||||
|
||||
A2osX.KVER .EQ $11E0
|
||||
* 5 bytes
|
||||
A2osX.KVER .EQ $11E0 WORD
|
||||
* 1 byte
|
||||
A2osX.IRQMode .EQ $11E3
|
||||
A2osX.ATLKSID .EQ $11E4
|
||||
A2osX.FSID .EQ $11E5
|
||||
|
86
INC/ARC.I.txt
Normal file
86
INC/ARC.I.txt
Normal 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
|
167
INC/IO.I.txt
167
INC/IO.I.txt
@ -4,94 +4,93 @@ NEW
|
||||
*--------------------------------------
|
||||
* Software Switches
|
||||
*--------------------------------------
|
||||
KBD .EQ $C000 R
|
||||
CLR80STORE .EQ $C000 W
|
||||
SET80STORE .EQ $C001 W
|
||||
CLRREADAUX .EQ $C002 W
|
||||
SETREADAUX .EQ $C003 W
|
||||
CLRWRITEAUX .EQ $C004 W
|
||||
SETWRITEAUX .EQ $C005 W
|
||||
CLRCXROM .EQ $C006 W
|
||||
SETCXROM .EQ $C007 W
|
||||
CLRALTZP .EQ $C008 W
|
||||
SETALTZP .EQ $C009 W
|
||||
CLRC3ROM .EQ $C00A W
|
||||
SETC3ROM .EQ $C00B W
|
||||
CLR80DISP .EQ $C00C W
|
||||
SET80DISP .EQ $C00D W
|
||||
CLRALTCHAR .EQ $C00E W
|
||||
SETALTCHAR .EQ $C00F W
|
||||
KBDSTROBE .EQ $C010 W
|
||||
RDLCBNK2 .EQ $C011 R
|
||||
RDLCRAM .EQ $C012 R
|
||||
RDREADAUX .EQ $C013 R
|
||||
RDWRITEAUX .EQ $C014 R
|
||||
RDCXROM .EQ $C015 R
|
||||
RDALTZP .EQ $C016 R
|
||||
RDC3ROM .EQ $C017 R
|
||||
RD80STORE .EQ $C018 R
|
||||
VBL .EQ $C019 R
|
||||
RDTEXT .EQ $C01A R
|
||||
RDMIXED .EQ $C01B R
|
||||
RDPAGE2 .EQ $C01C R
|
||||
RDHIRES .EQ $C01D R
|
||||
RDALTCHAR .EQ $C01E R
|
||||
RD80DISP .EQ $C01F R
|
||||
*TAPEOUT .EQ $C020 W
|
||||
newvideo .EQ $C029 video mode select
|
||||
SPEAKER .EQ $C030 W, toggle speaker diaphragm
|
||||
*STROBE .EQ $C040 R, generate .5 uS low pulse @ Game pin 5
|
||||
*RDVBLIIC .EQ $C05A R, VBL switch Status (IIc)
|
||||
IO.KBD .EQ $C000 R
|
||||
IO.CLR80STORE .EQ $C000 W
|
||||
IO.SET80STORE .EQ $C001 W
|
||||
IO.CLRREADAUX .EQ $C002 W
|
||||
IO.SETREADAUX .EQ $C003 W
|
||||
IO.CLRWRITEAUX .EQ $C004 W
|
||||
IO.SETWRITEAUX .EQ $C005 W
|
||||
IO.CLRCXROM .EQ $C006 W
|
||||
IO.SETCXROM .EQ $C007 W
|
||||
IO.CLRALTZP .EQ $C008 W
|
||||
IO.SETALTZP .EQ $C009 W
|
||||
IO.CLRC3ROM .EQ $C00A W
|
||||
IO.SETC3ROM .EQ $C00B W
|
||||
IO.CLR80DISP .EQ $C00C W
|
||||
IO.SET80DISP .EQ $C00D W
|
||||
IO.CLRALTCHAR .EQ $C00E W
|
||||
IO.SETALTCHAR .EQ $C00F W
|
||||
IO.KBDSTROBE .EQ $C010 W
|
||||
IO.RDLCBNK2 .EQ $C011 R
|
||||
IO.RDLCRAM .EQ $C012 R
|
||||
IO.RDREADAUX .EQ $C013 R
|
||||
IO.RDWRITEAUX .EQ $C014 R
|
||||
IO.RDCXROM .EQ $C015 R
|
||||
IO.RDALTZP .EQ $C016 R
|
||||
IO.RDC3ROM .EQ $C017 R
|
||||
IO.RD80STORE .EQ $C018 R
|
||||
IO.VBL .EQ $C019 R
|
||||
IO.RDTEXT .EQ $C01A R
|
||||
IO.RDMIXED .EQ $C01B R
|
||||
IO.RDPAGE2 .EQ $C01C R
|
||||
IO.RDHIRES .EQ $C01D R
|
||||
IO.RDALTCHAR .EQ $C01E R
|
||||
IO.RD80DISP .EQ $C01F R
|
||||
*IO.TAPEOUT .EQ $C020 W
|
||||
IO.SPEAKER .EQ $C030 W, toggle speaker diaphragm
|
||||
*IO.STROBE .EQ $C040 R, generate .5 uS low pulse @ Game pin 5
|
||||
*IO.RDVBLIIC .EQ $C05A R, VBL switch Status (IIc)
|
||||
|
||||
*IO.EMUBYTE .EQ $C04F WRR, Write once then Read EMUL, Read Version
|
||||
|
||||
IO.CLRTEXT .EQ $C050 W
|
||||
IO.SETTEXT .EQ $C051 W
|
||||
IO.CLRMIXED .EQ $C052 W
|
||||
IO.SETMIXED .EQ $C053 W
|
||||
IO.CLRPAGE2 .EQ $C054 W
|
||||
IO.SETPAGE2 .EQ $C055 W
|
||||
IO.CLRHIRES .EQ $C056 W
|
||||
IO.SETHIRES .EQ $C057 W
|
||||
|
||||
*EMUBYTE .EQ $C04F WRR, Write once then Read EMUL, Read Version
|
||||
*IO.SETAN0 .EQ $C058 W, Set annunciator-0 output to 0
|
||||
*IO.CLRAN0 .EQ $C059 W, Set annunciator-0 output to 1
|
||||
*IO.SETAN1 .EQ $C05A W, Set annunciator-1 output to 0
|
||||
*IO.CLRAN1 .EQ $C05B W, Set annunciator-1 output to 1
|
||||
*IO.SETAN2 .EQ $C05C W, Set annunciator-2 output to 0
|
||||
*IO.CLRAN2 .EQ $C05D W, Set annunciator-2 output to 1
|
||||
IO.SETAN3 .EQ $C05E W, Set annunciator-3 output to 0
|
||||
IO.CLRAN3 .EQ $C05F W, Set annunciator-3 output to 1
|
||||
|
||||
IO.SETDHIRES .EQ $C05E W, if IOUDIS Set, turn on double-hires
|
||||
IO.CLRDHIRES .EQ $C05F W, if IOUDIS Set, turn off double-hires
|
||||
|
||||
*IO.TAPEIN .EQ $C060 R
|
||||
|
||||
IO.OPENAPPLE .EQ $C061 R
|
||||
IO.SOLIDAPPLE .EQ $C062 R
|
||||
*IO.PB2 .EQ $C063 R
|
||||
|
||||
CLRTEXT .EQ $C050 W
|
||||
SETTEXT .EQ $C051 W
|
||||
CLRMIXED .EQ $C052 W
|
||||
SETMIXED .EQ $C053 W
|
||||
CLRPAGE2 .EQ $C054 W
|
||||
SETPAGE2 .EQ $C055 W
|
||||
CLRHIRES .EQ $C056 W
|
||||
SETHIRES .EQ $C057 W
|
||||
*IO.PADDLE0 .EQ $C064 R, bit 7 = status of pdl-0 timer
|
||||
*IO.PADDLE1 .EQ $C065 R, bit 7 = status of pdl-1 timer
|
||||
*IO.PADDLE2 .EQ $C066 R, bit 7 = status of pdl-2 timer
|
||||
*IO.PADDLE3 .EQ $C067 R, bit 7 = status of pdl-3 timer
|
||||
|
||||
*SETAN0 .EQ $C058 W, Set annunciator-0 output to 0
|
||||
*CLRAN0 .EQ $C059 W, Set annunciator-0 output to 1
|
||||
*SETAN1 .EQ $C05A W, Set annunciator-1 output to 0
|
||||
*CLRAN1 .EQ $C05B W, Set annunciator-1 output to 1
|
||||
*SETAN2 .EQ $C05C W, Set annunciator-2 output to 0
|
||||
*CLRAN2 .EQ $C05D W, Set annunciator-2 output to 1
|
||||
SETAN3 .EQ $C05E W, Set annunciator-3 output to 0
|
||||
CLRAN3 .EQ $C05F W, Set annunciator-3 output to 1
|
||||
*IO.PDLTRIG .EQ $C070 W, trigger paddles
|
||||
|
||||
SETDHIRES .EQ $C05E W, if IOUDIS Set, turn on double-hires
|
||||
CLRDHIRES .EQ $C05F W, if IOUDIS Set, turn off double-hires
|
||||
|
||||
*TAPEIN .EQ $C060 R
|
||||
|
||||
OPENAPPLE .EQ $C061 R
|
||||
SOLIDAPPLE .EQ $C062 R
|
||||
*PB2 .EQ $C063 R
|
||||
|
||||
*PADDLE0 .EQ $C064 R, bit 7 = status of pdl-0 timer
|
||||
*PADDLE1 .EQ $C065 R, bit 7 = status of pdl-1 timer
|
||||
*PADDLE2 .EQ $C066 R, bit 7 = status of pdl-2 timer
|
||||
*PADDLE3 .EQ $C067 R, bit 7 = status of pdl-3 timer
|
||||
statereg .EQ $C068 memory state register
|
||||
*PDLTRIG .EQ $C070 W, trigger paddles
|
||||
|
||||
SETIOUDIS .EQ $C07E W, enable DHIRES & disable $C058-5F
|
||||
RDIOUDIS .EQ $C07E R, bit 7 = IOUDIS status
|
||||
CLRIOUDIS .EQ $C07F W, disable DHIRES & enable $C058-5F
|
||||
IO.SETIOUDIS .EQ $C07E W, enable DHIRES & disable $C058-5F
|
||||
IO.RDIOUDIS .EQ $C07E R, bit 7 = IOUDIS status
|
||||
IO.CLRIOUDIS .EQ $C07F W, disable DHIRES & enable $C058-5F
|
||||
*--------------------------------------
|
||||
*RRAMBNK2 .EQ $C080 R
|
||||
RROMWRAMBNK2 .EQ $C081 RR
|
||||
RROMBNK2 .EQ $C082 R
|
||||
RRAMWRAMBNK2 .EQ $C083 RR
|
||||
*RRAMBNK1 .EQ $C088 R
|
||||
*RROMWRAMBNK1 .EQ $C089 RR
|
||||
RROMBNK1 .EQ $C08A R
|
||||
RRAMWRAMBNK1 .EQ $C08B RR
|
||||
*IO.RRAMBNK2 .EQ $C080 R
|
||||
IO.RROMWRAMBNK2 .EQ $C081 RR
|
||||
IO.RROMBNK2 .EQ $C082 R
|
||||
IO.RRAMWRAMBNK2 .EQ $C083 RR
|
||||
*IO.RRAMBNK1 .EQ $C088 R
|
||||
*IO.RROMWRAMBNK1 .EQ $C089 RR
|
||||
IO.RROMBNK1 .EQ $C08A R
|
||||
IO.RRAMWRAMBNK1 .EQ $C08B RR
|
||||
*--------------------------------------
|
||||
CLRC8ROM .EQ $CFFF R, Release C800-CFFF Rom Space for all cards
|
||||
IO.CLRC8ROM .EQ $CFFF R, Release C800-CFFF Rom Space for all cards
|
||||
MAN
|
||||
SAVE INC/IO.I
|
||||
SAVE inc/io.i
|
||||
|
@ -2,9 +2,11 @@ NEW
|
||||
AUTO 3,1
|
||||
.LIST OFF
|
||||
*--------------------------------------
|
||||
IO.IIGS.INTEN .EQ $C041 R,W
|
||||
IO.IIGS.INTFLAG .EQ $C046 R
|
||||
IO.IIGS.CLRVBLINT .EQ $C047 W
|
||||
IO.GS.NEWVIDEO .EQ $C029 R,W video mode select
|
||||
IO.GS.INTEN .EQ $C041 R,W
|
||||
IO.GS.INTFLAG .EQ $C046 R
|
||||
IO.GS.CLRVBLINT .EQ $C047 W
|
||||
IO.GS.STATEREG .EQ $C068 R,W memory state register
|
||||
*--------------------------------------
|
||||
.MA TKCALL
|
||||
ldx ##TK.]1
|
||||
|
@ -38,89 +38,89 @@ NEW
|
||||
*--------------------------------------
|
||||
.MA MLICALL
|
||||
ldx #]1
|
||||
.DO ]1=MLIALLOCIRQ
|
||||
.DO ]1=MLI.ALLOCIRQ
|
||||
lda #2
|
||||
.FIN
|
||||
.DO ]1=MLIDEALLOCIRQ
|
||||
.DO ]1=MLI.DEALLOCIRQ
|
||||
lda #1
|
||||
.FIN
|
||||
.DO ]1=MLIATALK
|
||||
.DO ]1=MLI.ATALK
|
||||
lda #1
|
||||
.FIN
|
||||
.DO ]1=MLIREADBLOCK
|
||||
.DO ]1=MLI.READBLOCK
|
||||
lda #3
|
||||
.FIN
|
||||
.DO ]1=MLIWRITEBLOCK
|
||||
.DO ]1=MLI.WRITEBLOCK
|
||||
lda #3
|
||||
.FIN
|
||||
.DO ]1=MLICREATE
|
||||
.DO ]1=MLI.CREATE
|
||||
lda #7
|
||||
.FIN
|
||||
.DO ]1=MLIDESTROY
|
||||
.DO ]1=MLI.DESTROY
|
||||
lda #1
|
||||
.FIN
|
||||
.DO ]1=MLIRENAME
|
||||
.DO ]1=MLI.RENAME
|
||||
lda #2
|
||||
.FIN
|
||||
.DO ]1=MLISETFILEINFO
|
||||
.DO ]1=MLI.SFINFO
|
||||
lda #7
|
||||
.FIN
|
||||
.DO ]1=MLIGETFILEINFO
|
||||
.DO ]1=MLI.GFINFO
|
||||
lda #10
|
||||
.FIN
|
||||
.DO ]1=MLIONLINE
|
||||
.DO ]1=MLI.ONLINE
|
||||
lda #2
|
||||
.FIN
|
||||
.DO ]1=MLISETPREFIX
|
||||
.DO ]1=MLI.SETPREFIX
|
||||
lda #1
|
||||
.FIN
|
||||
.DO ]1=MLIGETPREFIX
|
||||
.DO ]1=MLI.GETPREFIX
|
||||
lda #1
|
||||
.FIN
|
||||
.DO ]1=MLIOPEN
|
||||
.DO ]1=MLI.OPEN
|
||||
lda #3
|
||||
.FIN
|
||||
.DO ]1=MLINEWLINE
|
||||
.DO ]1=MLI.NEWLINE
|
||||
lda #3
|
||||
.FIN
|
||||
.DO ]1=MLIREAD
|
||||
.DO ]1=MLI.READ
|
||||
lda #4
|
||||
.FIN
|
||||
.DO ]1=MLIWRITE
|
||||
.DO ]1=MLI.WRITE
|
||||
lda #4
|
||||
.FIN
|
||||
.DO ]1=MLICLOSE
|
||||
.DO ]1=MLI.CLOSE
|
||||
lda #1
|
||||
.FIN
|
||||
.DO ]1=MLIFLUSH
|
||||
.DO ]1=MLI.FLUSH
|
||||
lda #1
|
||||
.FIN
|
||||
.DO ]1=MLISETMARK
|
||||
.DO ]1=MLI.SETMARK
|
||||
lda #2
|
||||
.FIN
|
||||
.DO ]1=MLIGETMARK
|
||||
.DO ]1=MLI.GETMARK
|
||||
lda #2
|
||||
.FIN
|
||||
.DO ]1=MLISETEOF
|
||||
.DO ]1=MLI.SETEOF
|
||||
lda #2
|
||||
.FIN
|
||||
.DO ]1=MLIGETEOF
|
||||
.DO ]1=MLI.GETEOF
|
||||
lda #2
|
||||
.FIN
|
||||
.DO ]1=MLISETBUF
|
||||
.DO ]1=MLI.SETBUF
|
||||
lda #2
|
||||
.FIN
|
||||
.DO ]1=MLIGETBUF
|
||||
.DO ]1=MLI.GETBUF
|
||||
lda #2
|
||||
.FIN
|
||||
|
||||
.DO ]1=MLISETFILEINFOEX
|
||||
.DO ]1=MLI.SFINFOEX
|
||||
lda #2
|
||||
.FIN
|
||||
.DO ]1=MLIGETFILEINFOEX
|
||||
.DO ]1=MLI.GFINFOEX
|
||||
lda #2
|
||||
.FIN
|
||||
.DO ]1=MLIACL
|
||||
.DO ]1=MLI.ACL
|
||||
lda #2
|
||||
.FIN
|
||||
|
||||
|
112
INC/MLI.I.txt
112
INC/MLI.I.txt
@ -8,37 +8,37 @@ MLI.MAXPATH .EQ 64
|
||||
*--------------------------------------
|
||||
* PRODOS Defines
|
||||
*--------------------------------------
|
||||
MLIALLOCIRQ .EQ $40
|
||||
MLIDEALLOCIRQ .EQ $41
|
||||
MLIATALK .EQ $42
|
||||
MLIQUIT .EQ $65
|
||||
MLIREADBLOCK .EQ $80
|
||||
MLIWRITEBLOCK .EQ $81
|
||||
MLIGETTIME .EQ $82
|
||||
MLICREATE .EQ $C0
|
||||
MLIDESTROY .EQ $C1
|
||||
MLIRENAME .EQ $C2
|
||||
MLISETFILEINFO .EQ $C3
|
||||
MLIGETFILEINFO .EQ $C4
|
||||
MLIONLINE .EQ $C5
|
||||
MLISETPREFIX .EQ $C6
|
||||
MLIGETPREFIX .EQ $C7
|
||||
MLIOPEN .EQ $C8
|
||||
MLINEWLINE .EQ $C9
|
||||
MLIREAD .EQ $CA
|
||||
MLIWRITE .EQ $CB
|
||||
MLICLOSE .EQ $CC
|
||||
MLIFLUSH .EQ $CD
|
||||
MLISETMARK .EQ $CE
|
||||
MLIGETMARK .EQ $CF
|
||||
MLISETEOF .EQ $D0
|
||||
MLIGETEOF .EQ $D1
|
||||
MLISETBUF .EQ $D2
|
||||
MLIGETBUF .EQ $D3
|
||||
MLI.ALLOCIRQ .EQ $40
|
||||
MLI.DEALLOCIRQ .EQ $41
|
||||
MLI.ATALK .EQ $42
|
||||
MLI.QUIT .EQ $65
|
||||
MLI.READBLOCK .EQ $80
|
||||
MLI.WRITEBLOCK .EQ $81
|
||||
MLI.GETTIME .EQ $82
|
||||
MLI.CREATE .EQ $C0
|
||||
MLI.DESTROY .EQ $C1
|
||||
MLI.RENAME .EQ $C2
|
||||
MLI.SFINFO .EQ $C3
|
||||
MLI.GFINFO .EQ $C4
|
||||
MLI.ONLINE .EQ $C5
|
||||
MLI.SETPREFIX .EQ $C6
|
||||
MLI.GETPREFIX .EQ $C7
|
||||
MLI.OPEN .EQ $C8
|
||||
MLI.NEWLINE .EQ $C9
|
||||
MLI.READ .EQ $CA
|
||||
MLI.WRITE .EQ $CB
|
||||
MLI.CLOSE .EQ $CC
|
||||
MLI.FLUSH .EQ $CD
|
||||
MLI.SETMARK .EQ $CE
|
||||
MLI.GETMARK .EQ $CF
|
||||
MLI.SETEOF .EQ $D0
|
||||
MLI.GETEOF .EQ $D1
|
||||
MLI.SETBUF .EQ $D2
|
||||
MLI.GETBUF .EQ $D3
|
||||
* ProDOS FX
|
||||
MLISETFILEINFOEX .EQ $D4
|
||||
MLIGETFILEINFOEX .EQ $D5
|
||||
MLIACL .EQ $D6
|
||||
MLI.SFINFOEX .EQ $D4
|
||||
MLI.GFINFOEX .EQ $D5
|
||||
MLI.ACL .EQ $D6
|
||||
*--------------------------------------
|
||||
* 7 6 5 4 3 2 1 0
|
||||
* +--+--+--+--+--+--+--+--+
|
||||
@ -123,12 +123,12 @@ TBX.EnumBlk .EQ 2
|
||||
TBX.EnumNext .EQ 4
|
||||
*--------------------------------------
|
||||
MLI .EQ $BF00
|
||||
*JSPARE .EQ $BF03
|
||||
DATETIME .EQ $BF06
|
||||
SYSERR .EQ $BF09
|
||||
*SYSDEATH .EQ $BF0C
|
||||
*SERR .EQ $BF0F
|
||||
DEVPTRS .EQ $BF10
|
||||
GP.DISPATCH .EQ $BF03
|
||||
GP.CLOCK .EQ $BF06
|
||||
GP.SYSERR .EQ $BF09
|
||||
GP.SYSDEATH .EQ $BF0C
|
||||
GP.ERROR .EQ $BF0F
|
||||
GP.DEVPTRS .EQ $BF10
|
||||
*DEVPTRS0D1 .EQ $BF10
|
||||
*DEVPTRS1D1 .EQ $BF12
|
||||
*DEVPTRS2D1 .EQ $BF14
|
||||
@ -140,35 +140,36 @@ DEVPTRS .EQ $BF10
|
||||
*DEVPTRS0D2 .EQ $BF20
|
||||
*DEVPTRS1D2 .EQ $BF22
|
||||
*DEVPTRS2D2 .EQ $BF24
|
||||
DEVPTRS3D2 .EQ $BF26
|
||||
GP.DEVPTRS3D2 .EQ $BF26
|
||||
*DEVPTRS4D2 .EQ $BF28
|
||||
*DEVPTRS5D2 .EQ $BF2A
|
||||
*DEVPTRS6D2 .EQ $BF2C
|
||||
*DEVPTRS7D2 .EQ $BF2E
|
||||
DEVNUM .EQ $BF30
|
||||
DEVCNT .EQ $BF31 0 -> 13
|
||||
DEVLST .EQ $BF32 -> $BF3F
|
||||
GP.DEVNUM .EQ $BF30
|
||||
GP.DEVCNT .EQ $BF31 0 -> 13
|
||||
GP.DEVLST .EQ $BF32 -> $BF3F
|
||||
*DEVLST0END .EQ $BF40 A 0 was added to ensure list ended with 0 if 14 devices in list
|
||||
*PRODOSCOPYRIGHT .EQ $BF41 ;free->$BF4B
|
||||
MLIENTRY .EQ $BF4B to bypass ATLK hook
|
||||
MEMTABL .EQ $BF58 -> $BF6F
|
||||
*GL.BUFF .EQ $BF70
|
||||
GP.MLIENTRY .EQ $BF4B to bypass ATLK hook
|
||||
GP.MEMTABL .EQ $BF58 -> $BF6F
|
||||
GB.BUFTABL .EQ $BF70
|
||||
*INTRUPT1 .EQ $BF80
|
||||
*INTRUPT2 .EQ $BF82
|
||||
*INTRUPT3 .EQ $BF84
|
||||
*INTRUPT4 .EQ $BF86
|
||||
DATELO .EQ $BF90
|
||||
TIMELO .EQ $BF92
|
||||
LEVEL .EQ $BF94
|
||||
*BUBIT .EQ $BF95
|
||||
GP.DATE .EQ $BF90
|
||||
GP.TIME .EQ $BF92
|
||||
GP.FLEVEL .EQ $BF94
|
||||
GP.BUBIT .EQ $BF95
|
||||
*SPARE1 .EQ $BF96
|
||||
MACHID .EQ $BF98
|
||||
GP.NEWPFXPTR .EQ $BF97
|
||||
GP.MACHID .EQ $BF98
|
||||
MACHID.T .EQ %11001000
|
||||
*MACHID.T.II .EQ %00000000
|
||||
*MACHID.T.IIp .EQ %01000000
|
||||
*MACHID.T.IIp .EQ %01000000
|
||||
MACHID.T.IIe .EQ %10000000
|
||||
MACHID.T.IIc .EQ %10001000
|
||||
*MACHID.T.III .EQ %11000000
|
||||
*MACHID.T.III .EQ %11000000
|
||||
MACHID.M .EQ %00110000
|
||||
MACHID.M.128 .EQ %00110000
|
||||
*MACHID.M.64 .EQ %00100000
|
||||
@ -176,14 +177,15 @@ MACHID.M.128 .EQ %00110000
|
||||
*MACHID.SPARE .EQ %00000100
|
||||
MACHID.COL80 .EQ %00000010
|
||||
MACHID.CLK .EQ %00000001
|
||||
*SLTBYT .EQ $BF99
|
||||
*PFIXPTR .EQ $BF9A
|
||||
*MLIACTV .EQ $BF9B
|
||||
GP.SLTBYT .EQ $BF99
|
||||
GP.PFXPTR .EQ $BF9A
|
||||
GP.MLIACTV .EQ $BF9B
|
||||
*CMDADR .EQ $BF9C
|
||||
*SAVEX .EQ $BF9E
|
||||
*SAVEY .EQ $BF9F
|
||||
*--------------------------------------
|
||||
* code $BFA0 -> $BFF3
|
||||
* GP.MLIEXIT $BFA0
|
||||
* GP.MLICONT $BFB7
|
||||
*--------------------------------------
|
||||
*BNKBYT1 .EQ $BFF4
|
||||
*BNKBYT2 .EQ $BFF5
|
||||
@ -191,7 +193,7 @@ MACHID.CLK .EQ %00000001
|
||||
*IBAKVER .EQ $BFFC
|
||||
*IVERSION .EQ $BFFD
|
||||
*KBAKVER .EQ $BFFE
|
||||
*KVERSION .EQ $BFFF
|
||||
GP.KVER .EQ $BFFF
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE inc/mli.i
|
||||
|
100
INC/ROM.II.txt
Normal file
100
INC/ROM.II.txt
Normal 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
19
INC/ROM.IIE.txt
Normal 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
47
INC/ROM.IIGS.txt
Normal 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
|
56
INC/ZP.I.txt
56
INC/ZP.I.txt
@ -3,27 +3,41 @@ NEW
|
||||
*--------------------------------------
|
||||
* ProDOS Reserved ZP Location 00-1F,56-FF
|
||||
*--------------------------------------
|
||||
WNDLFT .EQ $20 SCROLL WINDOW LEFT
|
||||
WNDWDTH .EQ $21 SCROLL WINDOW WIDTH
|
||||
WNDTOP .EQ $22 SCROLL WINDOW TOP
|
||||
WNDBOT .EQ $23 SCROLL WINDOW BOTTOM
|
||||
CH .EQ $24 CURSOR HORIZONTAL
|
||||
CV .EQ $25 CURSOR VERTICAL
|
||||
GBASL .EQ $26 LORES BASE LOW
|
||||
GBASH .EQ $27 LORES BASE HIGH
|
||||
BASL .EQ $28 TEXT BASE LOW
|
||||
BASH .EQ $29 TEXT BASE HIGH
|
||||
BEND .EQ $2C LORES RIGHT END H LINE
|
||||
VBOT .EQ $2D LORES BOTTOM OF V LINE
|
||||
COLOR .EQ $30 LORES COLOR
|
||||
INVFLG .EQ $32 NORMAL/INVERSE /FLASH (FF,7F,3F)
|
||||
PROMPT .EQ $33 HOLDS PROMPT SYMBOL
|
||||
CSWL .EQ $36 OUTPUT CHARACTER HOOK LOW
|
||||
CSWH .EQ $37 OUTPUT CHARACTER HOOK HIGH
|
||||
KSWL .EQ $38 INPUT CHARACTER HOOOK LOW
|
||||
KSWH .EQ $39 INPUT CHARACTER HOOK HIGH
|
||||
RNDL .EQ $4E RANDOM NUMBER LOW
|
||||
RNDH .EQ $4F RANDOM NUMBER HIGH
|
||||
ZP.WNDLFT .EQ $20 SCROLL WINDOW LEFT
|
||||
ZP.WNDWDTH .EQ $21 SCROLL WINDOW WIDTH
|
||||
ZP.WNDTOP .EQ $22 SCROLL WINDOW TOP
|
||||
ZP.WNDBOT .EQ $23 SCROLL WINDOW BOTTOM
|
||||
ZP.CH .EQ $24 CURSOR HORIZONTAL
|
||||
ZP.CV .EQ $25 CURSOR VERTICAL
|
||||
ZP.GBASL .EQ $26 LORES BASE LOW
|
||||
ZP.GBASH .EQ $27 LORES BASE HIGH
|
||||
ZP.BASL .EQ $28 TEXT BASE LOW
|
||||
ZP.BASH .EQ $29 TEXT BASE HIGH
|
||||
ZP.BEND .EQ $2C LORES RIGHT END H LINE
|
||||
ZP.VBOT .EQ $2D LORES BOTTOM OF V LINE
|
||||
ZP.COLOR .EQ $30 LORES COLOR
|
||||
ZP.INVFLG .EQ $32 NORMAL/INVERSE /FLASH (FF,7F,3F)
|
||||
ZP.PROMPT .EQ $33 HOLDS PROMPT SYMBOL
|
||||
ZP.CSWL .EQ $36 OUTPUT CHARACTER HOOK LOW
|
||||
ZP.CSWH .EQ $37 OUTPUT CHARACTER HOOK HIGH
|
||||
ZP.KSWL .EQ $38 INPUT CHARACTER HOOOK LOW
|
||||
ZP.KSWH .EQ $39 INPUT CHARACTER HOOK HIGH
|
||||
ZP.PCL .EQ $3A
|
||||
ZP.PCH .EQ $3B
|
||||
ZP.A1L .EQ $3C
|
||||
ZP.A1H .EQ $3D
|
||||
ZP.A2L .EQ $3E
|
||||
ZP.A2H .EQ $3F
|
||||
ZP.A3L .EQ $40
|
||||
ZP.A4L .EQ $42
|
||||
|
||||
ZP.CMDNUM .EQ $42
|
||||
ZP.UNITNUM .EQ $43
|
||||
ZP.BUFPTR .EQ $44
|
||||
ZP.BLKNUM .EQ $46
|
||||
|
||||
ZP.RNDL .EQ $4E RANDOM NUMBER LOW
|
||||
ZP.RNDH .EQ $4F RANDOM NUMBER HIGH
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE inc/zp.i
|
||||
|
@ -3,8 +3,7 @@ NEW
|
||||
*--------------------------------------
|
||||
RTMP.IN.REQ
|
||||
RTMP.IN.REP
|
||||
clc
|
||||
rts
|
||||
jmp FRM.DiscardIn
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE usr/src/lib/libetalk.s.rtmp
|
||||
|
230
ProDOS.FX/PDOS8M.S.txt
Normal file
230
ProDOS.FX/PDOS8M.S.txt
Normal 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
|
@ -1,13 +1,15 @@
|
||||
NEW
|
||||
AUTO 3,1
|
||||
*--------------------------------------
|
||||
CCLK.START >SHORTMX 8 bit mode.
|
||||
lda statereg state register.
|
||||
CCLK.START .PH CLK
|
||||
|
||||
CCLK.START1 >SHORTMX 8 bit mode.
|
||||
lda IO.GS.STATEREG state register.
|
||||
sta savestate save for restore after tool call.
|
||||
and #$CF clear the read/write aux memory bits.
|
||||
sta statereg make it real
|
||||
sta IO.GS.STATEREG make it real
|
||||
clc set e = 0 to set native mode
|
||||
xce
|
||||
xce
|
||||
>LONGMX 16 bit mode.
|
||||
lda ##$0000 zero out result space.
|
||||
pha push 4 words for hex time result
|
||||
@ -17,22 +19,22 @@ CCLK.START >SHORTMX 8 bit mode.
|
||||
>IIGS ReadTimeHex
|
||||
>SHORTM back to 8 bit to get results from stack
|
||||
lda savestate restore state register
|
||||
sta statereg
|
||||
sta IO.GS.STATEREG
|
||||
pla pull off seconds and ignore
|
||||
pla
|
||||
sta p8time minutes
|
||||
sta GP.TIME minutes
|
||||
pla
|
||||
sta p8time+1 hours
|
||||
sta GP.TIME+1 hours
|
||||
pla year
|
||||
.1 cmp #100 out of range?
|
||||
bcc .2 no, go ahead and store
|
||||
sbc #$64 else put back in range.
|
||||
bra .1 try again
|
||||
|
||||
.2 sta p8date+1 year
|
||||
.2 sta GP.DATE+1 year
|
||||
pla
|
||||
inc increment day for Prodos 8 format.
|
||||
sta p8date day
|
||||
sta GP.DATE day
|
||||
pla month
|
||||
inc increment month for Prodos 8 format.
|
||||
asl shift month as it sits in between
|
||||
@ -40,9 +42,9 @@ CCLK.START >SHORTMX 8 bit mode.
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
ora p8date put all but the top bit of month
|
||||
sta p8date value in the day byte.
|
||||
rol p8date+1 put hi bit of month in low bit of year
|
||||
ora GP.DATE put all but the top bit of month
|
||||
sta GP.DATE value in the day byte.
|
||||
rol GP.DATE+1 put hi bit of month in low bit of year
|
||||
pla pull of unused byte
|
||||
pla pull off day of week. stack now clean.
|
||||
sec go back to emulation mode
|
||||
@ -50,7 +52,9 @@ CCLK.START >SHORTMX 8 bit mode.
|
||||
rts
|
||||
savestate .HS 00 state of the state register
|
||||
*--------------------------------------
|
||||
.LIST ON
|
||||
.EP
|
||||
*--------------------------------------
|
||||
* .LIST ON
|
||||
CCLK.LEN .EQ *-CCLK.START
|
||||
.LIST OFF
|
||||
*--------------------------------------
|
||||
|
@ -1,13 +1,15 @@
|
||||
NEW
|
||||
AUTO 3,1
|
||||
*--------------------------------------
|
||||
* Driver For DS1215
|
||||
* Driver For Not Slot Clock (DS1215)
|
||||
*--------------------------------------
|
||||
* we can safely use $200 (used by TCLK)
|
||||
*--------------------------------------
|
||||
DS1215.DATA .EQ $200 Reverted YY MM DD Day HH mm SS CS
|
||||
*--------------------------------------
|
||||
DCLK.START php
|
||||
DCLK.START .PH CLK
|
||||
|
||||
DCLK.START1 php
|
||||
sei
|
||||
|
||||
lda $C400
|
||||
@ -79,19 +81,19 @@ DCLK.START php
|
||||
asl
|
||||
asl
|
||||
ora DS1215.DATA+2 Get DD
|
||||
sta DATELO
|
||||
sta GP.DATE
|
||||
|
||||
* lda DS1215.DATA Get YY
|
||||
|
||||
pla
|
||||
rol
|
||||
sta DATELO+1
|
||||
sta GP.DATE+1
|
||||
|
||||
lda DS1215.DATA+5 Get mm
|
||||
sta TIMELO
|
||||
sta GP.TIME
|
||||
|
||||
lda DS1215.DATA+4 Get HH
|
||||
sta TIMELO+1
|
||||
sta GP.TIME+1
|
||||
|
||||
stz $C0C0
|
||||
|
||||
@ -103,7 +105,9 @@ DCLK.START php
|
||||
*--------------------------------------
|
||||
DS1215.SIG .HS 5CA33AC55CA33AC5 Reverted 7->0
|
||||
*--------------------------------------
|
||||
.LIST ON
|
||||
.EP
|
||||
*--------------------------------------
|
||||
* .LIST ON
|
||||
DCLK.LEN .EQ *-DCLK.START
|
||||
.LIST OFF
|
||||
*--------------------------------------
|
||||
|
@ -1,70 +1,69 @@
|
||||
NEW
|
||||
AUTO 3,1
|
||||
*--------------------------------------
|
||||
GP.START jmp GP.MLIENTRY $2E00-2EFF moved to $BF00
|
||||
jspare jmp * will be changed to point to dispatcher.
|
||||
clockv rts changed to jmp ($4C) if clock present.
|
||||
.DA XDOS.ClockDrv clock routine entry address.
|
||||
GP.P8errv jmp XDOS.syserr error reporting hook.
|
||||
GP.SysDeath jmp XDOS.SysDeath system failure hook.
|
||||
p8error .DA #0
|
||||
.DA nodevice
|
||||
.DA nodevice
|
||||
.DA nodevice
|
||||
.DA nodevice
|
||||
.DA nodevice
|
||||
.DA nodevice
|
||||
.DA nodevice
|
||||
.DA nodevice
|
||||
.DA nodevice
|
||||
.DA nodevice
|
||||
.DA nodevice
|
||||
.DA nodevice
|
||||
.DA nodevice
|
||||
.DA nodevice
|
||||
.DA nodevice
|
||||
.DA nodevice
|
||||
.DA #0 DEVNUM
|
||||
.DA #$ff DEVCNT : count (-1) active devices
|
||||
.HS 00000000000000 DEVLST : up to 14 units may be active
|
||||
GP.START .PH GP
|
||||
|
||||
GP.START1 jmp GP.MLIENTRY MLI Entry point
|
||||
jmp * GP.DISPATCH : will be changed to point to dispatcher.
|
||||
rts GP.CLOCK : changed to jmp ($4C) if clock present.
|
||||
.DA CLK clock routine entry address.
|
||||
jmp XDOS.SysErr GP.SYSERR : error reporting hook.
|
||||
jmp XDOS.SysDeath GP.SYSDEATH : system failure hook.
|
||||
.DA #0 GP.ERROR
|
||||
.DA XDOS.NoDevice GP.DEVPTRS
|
||||
.DA XDOS.NoDevice
|
||||
.DA XDOS.NoDevice
|
||||
.DA XDOS.NoDevice
|
||||
.DA XDOS.NoDevice
|
||||
.DA XDOS.NoDevice
|
||||
.DA XDOS.NoDevice
|
||||
.DA XDOS.NoDevice
|
||||
.DA XDOS.NoDevice
|
||||
.DA XDOS.NoDevice
|
||||
.DA XDOS.NoDevice
|
||||
.DA XDOS.NoDevice
|
||||
.DA XDOS.NoDevice
|
||||
.DA XDOS.NoDevice
|
||||
.DA XDOS.NoDevice
|
||||
.DA XDOS.NoDevice
|
||||
.DA #0 GP.DEVNUM
|
||||
.DA #$ff GP.DEVCNT : count (-1) active devices
|
||||
.HS 00000000000000 GP.DEVLST : up to 14 units may be active
|
||||
.HS 00000000000000
|
||||
.DA #0
|
||||
*--------------------------------------
|
||||
.AS "(C)APPLE "
|
||||
.AS "(C)APPLE " 10 bytes, used for VEDRIVE/VSDRIVE
|
||||
*--------------------------------------
|
||||
GP.MLIENTRY php
|
||||
php GP.MLIENTRY
|
||||
sei
|
||||
jmp GP.MLICONT
|
||||
*--------------------------------------
|
||||
*aftirq sta RRAMWRAMBNK1 read/write RAM bank 1
|
||||
* jmp fix45 restore $45 after interrupt in LC
|
||||
*oldacc .DA #0
|
||||
*afbank .HS 00
|
||||
GP.TOOLBOX bit IO.RRAMWRAMBNK1
|
||||
jmp XDOS.TBX
|
||||
*--------------------------------------
|
||||
.LIST ON
|
||||
GP.FREE1 .EQ $BF58-*
|
||||
.LIST OFF
|
||||
.BS GP.FREE1
|
||||
*--------------------------------------
|
||||
*--------------------------------------
|
||||
* memory map of lower 48k. each bit represents 1 page.
|
||||
* protected pages = 1, unprotected = 0
|
||||
|
||||
*--------------------------------------
|
||||
.HS C000000000000000 MEMTABL
|
||||
.HS C000000000000000 GP.MEMTABL
|
||||
.HS 0000000000000000
|
||||
.HS 0000000000000001
|
||||
*--------------------------------------
|
||||
* table of buffer addresses for currently open files.
|
||||
* these can only be changed thru the mli call setbuf.
|
||||
*--------------------------------------
|
||||
buftbl .HS 0000 file #1
|
||||
.HS 0000 file #2
|
||||
.HS 0000 file #3
|
||||
.HS 0000 file #4
|
||||
.HS 0000 file #5
|
||||
.HS 0000 file #6
|
||||
.HS 0000 file #7
|
||||
.HS 0000 file #8
|
||||
.HS 0000 GB.BUFTABL
|
||||
.HS 0000
|
||||
.HS 0000
|
||||
.HS 0000
|
||||
.HS 0000
|
||||
.HS 0000
|
||||
.HS 0000
|
||||
.HS 0000
|
||||
*--------------------------------------
|
||||
* table of interrupt vectors. these can only be changed
|
||||
* by the mli call allocate_interrupt. values of the registers
|
||||
@ -75,31 +74,27 @@ GP.IRQVs .HS 0000 int #1
|
||||
.HS 0000 int #2
|
||||
.HS 0000 int #3
|
||||
.HS 0000 int #4
|
||||
*--------------------------------------
|
||||
*p8areg .DA #0 A register savearea
|
||||
*p8xreg .DA #0 X register savearea
|
||||
*p8yreg .DA #0 Y register savearea
|
||||
*p8sreg .DA #0 S register savearea
|
||||
*p8preg .DA #0 P register savearea
|
||||
*bankid .DA #1 bank ID byte (ROM/RAM)
|
||||
*intadr .HS 0000 interrupt return address
|
||||
*--------------------------------------
|
||||
.BS 8
|
||||
*--------------------------------------
|
||||
p8date .HS 0000 bits 15-9=yr, 8-5=mo, 4-0=day
|
||||
p8time .HS 0000 bits 12-8=hr, 5-0=min, low-hi format
|
||||
flevel .DA #0 current file level
|
||||
bubit .DA #0 backup bit disable, setfileinfo only
|
||||
*spare1 .DA #0 used to save acc
|
||||
.DA #0
|
||||
newpfxptr .DA #0 appletalk alternate prefix ptr
|
||||
machidbyte .DA #0 machine ID byte
|
||||
rommap .DA #0 slot ROM bit map
|
||||
preflag .DA #0 prefix active flag
|
||||
mliact .DA #0 MLI active flag
|
||||
mliretn .DA 0 last MLI call return address
|
||||
mlix .DA #0 MLI X register savearea
|
||||
mliy .DA #0 MLI Y register savearea
|
||||
.HS 0000 GP.DATE
|
||||
.HS 0000 GP.TIME
|
||||
.DA #0 GP.FLEVEL : current file level
|
||||
.DA #0 GP.BUBIT : backup bit disable, setfileinfo only
|
||||
.DA #0 spare1: ProDOS 203 used to save acc
|
||||
.DA #0 GP.NEWPFXPTR : appletalk alternate prefix ptr
|
||||
.DA #0 GP.MACHID : machine ID byte
|
||||
.DA #0 GP.SLTBYT : slot ROM bit map
|
||||
.DA #0 GP.PFXPTR : prefix active flag
|
||||
.DA #0 GP.MLIACTV : MLI active flag
|
||||
.DO AUXLC=0
|
||||
GP.MLIRTN .DA 0 MLI call return address
|
||||
GP.MLIX .DA #0 MLI X register savearea
|
||||
GP.MLIY .DA #0 MLI Y register savearea
|
||||
.ELSE
|
||||
GP.MLIEXITX2 pha MLI error
|
||||
lda GP.BNKBYT1
|
||||
.FIN
|
||||
*--------------------------------------
|
||||
* language card bank switching routines which must reside at $BFA0 because
|
||||
* workstation software patches this area
|
||||
@ -107,75 +102,93 @@ mliy .DA #0 MLI Y register savearea
|
||||
GP.MLIEXIT eor $E000 test for rom enable
|
||||
beq .1 taken if ram enabled
|
||||
|
||||
sta RROMBNK2 read ROM
|
||||
sta IO.RROMBNK2 read ROM
|
||||
bne .2 always
|
||||
|
||||
.1 lda bnkbyt2 for alternate ram
|
||||
.1 lda GP.BNKBYT2 for alternate ram
|
||||
eor $D000 test
|
||||
beq .2 branch if not alternate ram
|
||||
|
||||
lda RRAMWRAMBNK2 else enable alt $D000
|
||||
lda IO.RRAMWRAMBNK2 else enable alt $D000
|
||||
|
||||
.2 pla return code
|
||||
|
||||
rti re-enable interrupts and return
|
||||
*--------------------------------------
|
||||
GP.MLICONT sec
|
||||
ror mliact notify interrupt routines MLI active.
|
||||
GP.MLICONT .DO AUXLC=0
|
||||
|
||||
sec
|
||||
ror GP.MLIACTV notify interrupt routines MLI active.
|
||||
lda $E000 preserve language card/rom orientation
|
||||
sta bnkbyt1 for proper restoration when mli exits.
|
||||
sta GP.BNKBYT1 for proper restoration when mli exits.
|
||||
lda $D000
|
||||
sta bnkbyt2
|
||||
lda RRAMWRAMBNK1 force ram card on
|
||||
lda RRAMWRAMBNK1 with write allowed
|
||||
jmp XDOS
|
||||
sta GP.BNKBYT2
|
||||
lda IO.RRAMWRAMBNK1 force ram card on
|
||||
lda IO.RRAMWRAMBNK1 with write allowed
|
||||
jmp XDOS.MAIN
|
||||
|
||||
.ELSE
|
||||
|
||||
sty GP.MLIEXIT.Y+1
|
||||
|
||||
pla A = Status register
|
||||
|
||||
ply
|
||||
sty GP.MLIEXIT.PCL+1
|
||||
ply
|
||||
sty GP.MLIEXIT.PCH+1
|
||||
|
||||
ldy $E000
|
||||
sty GP.BNKBYT1
|
||||
ldy $D000 Y = BNKBYT2
|
||||
|
||||
sta IO.SETALTZP
|
||||
|
||||
bit IO.RRAMWRAMBNK1
|
||||
jmp XDOS.AUX
|
||||
*--------------------------------------
|
||||
*GP.IrqExit lda bankid determine state of ram card (ROM/RAM)
|
||||
*irqxit0
|
||||
* beq .2 branch if ram card enabled.
|
||||
* bmi .1 branch if alternate $D000 enabled.
|
||||
|
||||
* lsr determine if no ram card present.
|
||||
* bcc .3 branch if rom only system.
|
||||
|
||||
* lda RROMWRAMBNK2 enable rom
|
||||
* bcs .3 always taken
|
||||
|
||||
*.1 lda RRAMWRAMBNK2 enable alternate $D000
|
||||
|
||||
*.2 lda #$01 preset bankid for rom.
|
||||
* sta bankid (reset if ram card interrupt)
|
||||
|
||||
*.3 lda p8areg restore acc
|
||||
* rti exit
|
||||
* A = Status register
|
||||
* Y = MLI Error code
|
||||
*--------------------------------------
|
||||
GP.TOOLBOX bit RRAMWRAMBNK1
|
||||
bit RRAMWRAMBNK1
|
||||
jsr XDOS.TBX
|
||||
bit RROMBNK2
|
||||
rts
|
||||
GP.MLIEXITX sta IO.CLRALTZP
|
||||
|
||||
GP.MLIEXIT.PCH ldx #$FF SELF MODIFIED
|
||||
phx
|
||||
GP.MLIEXIT.PCL ldx #$FF SELF MODIFIED
|
||||
phx
|
||||
|
||||
phy S reg for RTI
|
||||
|
||||
GP.MLIEXIT.X ldx #$FF SELF MODIFIED
|
||||
GP.MLIEXIT.Y ldy #$FF SELF MODIFIED
|
||||
bra GP.MLIEXITX2
|
||||
|
||||
.FIN
|
||||
*--------------------------------------
|
||||
.LIST ON
|
||||
GP.FREE2 .EQ $BFEB-*
|
||||
.LIST OFF
|
||||
.BS GP.FREE2
|
||||
*--------------------------------------
|
||||
GP.IRQV bit RRAMWRAMBNK1 ***NEW ROM ONLY IRQ $fffe > $Cxxx space***
|
||||
bit RRAMWRAMBNK1 Entry used when rom/mainLC/auxLC
|
||||
GP.IRQV bit IO.RRAMWRAMBNK1 ***NEW ROM ONLY IRQ $fffe > $Cxxx space***
|
||||
bit IO.RRAMWRAMBNK1 Entry used when rom/mainLC/auxLC
|
||||
jmp IRQ
|
||||
*--------------------------------------
|
||||
bnkbyt1 .DA #0
|
||||
bnkbyt2 .DA #0
|
||||
GP.BNKBYT1 .DA #0
|
||||
GP.BNKBYT2 .DA #0
|
||||
.HS 00000000 pad to before $BFFA
|
||||
.DA #4 gsos compatibility byte ($BFFA)
|
||||
.DA #0 pad
|
||||
.DA #0 reserved
|
||||
.DA #0 version # of running interpreter
|
||||
.DA #0 preserved for System Utilities
|
||||
kversion .HS 23 represents release 2.0.3
|
||||
.DA #KVER GP.KVER : represents release 2.0.3
|
||||
*--------------------------------------
|
||||
.EP
|
||||
*--------------------------------------
|
||||
GP.LEN .EQ *-GP.START
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE usr/src/prodos.fx/prodos.s.gp
|
||||
LOAD usr/src/prodos.fx/prodos.s
|
||||
LOAD usr/src/prodos.fx/pdos8m.s
|
||||
ASM
|
||||
|
@ -1,8 +1,18 @@
|
||||
NEW
|
||||
AUTO 3,1
|
||||
*--------------------------------------
|
||||
ILDR.START jsr MLI check for file 'atinit'
|
||||
.DA #MLIGETFILEINFO
|
||||
devid .EQ $12
|
||||
|
||||
src .EQ $12
|
||||
dst .EQ $14
|
||||
*--------------------------------------
|
||||
ILDR.DBuf .EQ $0C00
|
||||
ILDR.IOBuf .EQ $1400
|
||||
*--------------------------------------
|
||||
ILDR.START .PH ILDR
|
||||
|
||||
ILDR.START1 jsr MLI check for file 'atinit'
|
||||
.DA #MLI.GFINFO
|
||||
.DA ILDR.GFINFO
|
||||
bcs ILDR.ENUMPM
|
||||
|
||||
@ -17,18 +27,18 @@ ILDR.START jsr MLI check for file 'atinit'
|
||||
|
||||
.9 jmp ILDR.MLIERR
|
||||
|
||||
.1 lda RROMBNK2 enable ROM
|
||||
jsr sysentry execute ATinit
|
||||
.1 lda IO.RROMBNK2 enable ROM
|
||||
jsr $2000 execute ATinit
|
||||
*--------------------------------------
|
||||
* BOOT block read 4 directory blocks at dbuf=$C00 -> $13FF
|
||||
*--------------------------------------
|
||||
ILDR.ENUMPM .DO READCAT=1
|
||||
|
||||
lda LDR.MLIOL.P+1 Boot unitnum
|
||||
lda LDR.MLIOL.P+1 Boot ZP.UNITNUM
|
||||
sta ILDR.MLIRB.P+1
|
||||
|
||||
stz dst
|
||||
lda /dbuf
|
||||
lda /ILDR.DBuf
|
||||
ldy #$02 read directory into buffer
|
||||
ldx #0
|
||||
|
||||
@ -38,11 +48,13 @@ ILDR.ENUMPM .DO READCAT=1
|
||||
stx ILDR.MLIRB.P+5 Blk Num HI
|
||||
|
||||
jsr MLI
|
||||
.DA #MLIREADBLOCK
|
||||
.DA #MLI.READBLOCK
|
||||
.DA ILDR.MLIRB.P
|
||||
bcs .99
|
||||
bcc .23
|
||||
|
||||
jmp ILDR.MLIERR
|
||||
|
||||
ldy #$03 get next block# from link
|
||||
.23 ldy #$03 get next block# from link
|
||||
lda (dst),y
|
||||
tax
|
||||
dey
|
||||
@ -54,24 +66,24 @@ ILDR.ENUMPM .DO READCAT=1
|
||||
lda dst+1
|
||||
inc
|
||||
inc add $200 to buffer pointer
|
||||
cmp /dbuf+$800 until it points past end of buffer.
|
||||
cmp /ILDR.DBuf+$800 until it points past end of buffer.
|
||||
bcc .22 if ok, read next block.
|
||||
|
||||
.28 .FIN
|
||||
*--------------------------------------
|
||||
.DO PM
|
||||
.DO M.PM=1
|
||||
|
||||
jsr ILDR.EnumInit
|
||||
|
||||
.1 ldx #S.FI.T.BIN
|
||||
ldy #ILDR.KMPFX
|
||||
lda /ILDR.KMPFX
|
||||
ldy #ILDR.PMPFX
|
||||
lda /ILDR.PMPFX
|
||||
clc prefix
|
||||
jsr ILDR.EnumNext
|
||||
bcs .8
|
||||
|
||||
jsr ILDR.LoadFilePBuf
|
||||
bcs .99
|
||||
bcs ILDR.MLIERR
|
||||
|
||||
ldx #3
|
||||
|
||||
@ -80,9 +92,9 @@ ILDR.ENUMPM .DO READCAT=1
|
||||
dex
|
||||
bpl .2
|
||||
|
||||
jsr sysentry
|
||||
jsr $2000
|
||||
|
||||
bit RROMBNK2 enable ROM
|
||||
bit IO.RROMBNK2 enable ROM
|
||||
|
||||
ldx #0
|
||||
|
||||
@ -91,12 +103,10 @@ ILDR.ENUMPM .DO READCAT=1
|
||||
inx
|
||||
cpx #4
|
||||
bne .3
|
||||
|
||||
>DEBUGOA
|
||||
|
||||
>DEBUGOA
|
||||
|
||||
bra .1
|
||||
|
||||
.99 jmp ILDR.MLIERR
|
||||
|
||||
.8 .FIN
|
||||
*--------------------------------------
|
||||
@ -112,27 +122,27 @@ ILDR.ENUMPM .DO READCAT=1
|
||||
jsr ILDR.LoadFilePBuf
|
||||
bcs ILDR.MLIERR
|
||||
|
||||
bit RROMBNK2 enable ROM
|
||||
bit IO.RROMBNK2 enable ROM
|
||||
|
||||
bit RDIOUDIS
|
||||
sta SETIOUDIS
|
||||
sta CLRDHIRES
|
||||
bit IO.RDIOUDIS
|
||||
sta IO.SETIOUDIS
|
||||
sta IO.CLRDHIRES
|
||||
bmi .5
|
||||
|
||||
sta CLRIOUDIS
|
||||
sta IO.CLRIOUDIS
|
||||
|
||||
.5 sta CLR80DISP
|
||||
sta CLR80STORE
|
||||
sta SETTEXT
|
||||
sta CLRMIXED
|
||||
jsr init
|
||||
jsr setvid
|
||||
jsr setkbd
|
||||
jsr home
|
||||
jmp sysentry go run interpreter
|
||||
.5 sta IO.CLR80DISP
|
||||
sta IO.CLR80STORE
|
||||
sta IO.SETTEXT
|
||||
sta IO.CLRMIXED
|
||||
jsr ROM.INIT
|
||||
jsr ROM.SETVID
|
||||
jsr ROM.SETKBD
|
||||
jsr ROM.HOME
|
||||
jmp $2000 go run interpreter
|
||||
|
||||
.9 jsr MLI no .SYSTEM found, so quit.
|
||||
.DA #MLIQUIT
|
||||
.DA #MLI.QUIT
|
||||
.DA ILDR.QUIT
|
||||
*--------------------------------------
|
||||
ILDR.MLIERR cmp #MLI.E.BADBUF
|
||||
@ -143,47 +153,47 @@ ILDR.MLIERR cmp #MLI.E.BADBUF
|
||||
.HS 2C BIT ABS
|
||||
.1 ldx #ILDR.MSG.SYSLOADERR-ILDR.MSG
|
||||
|
||||
bit RROMBNK2
|
||||
jsr SETINV
|
||||
bit IO.RROMBNK2
|
||||
jsr ROM.SETINV
|
||||
|
||||
.2 lda ILDR.MSG,x
|
||||
pha
|
||||
ora #$80
|
||||
jsr COUT
|
||||
jsr ROM.COUT
|
||||
inx
|
||||
pla
|
||||
bpl .2
|
||||
|
||||
lda #$A0
|
||||
jsr COUT
|
||||
jsr ROM.COUT
|
||||
|
||||
ldy #0
|
||||
|
||||
.3 iny
|
||||
lda pbuf,y
|
||||
jsr COUT
|
||||
cpy pbuf
|
||||
lda LDR.PBuf,y
|
||||
jsr ROM.COUT
|
||||
cpy LDR.PBuf
|
||||
bne .3
|
||||
|
||||
bra *
|
||||
*--------------------------------------
|
||||
ILDR.EnumInit lda /dbuf search directory buffer
|
||||
ILDR.EnumInit lda /ILDR.DBuf search directory buffer
|
||||
sta idxl+1
|
||||
lda #dbuf+4 skip Prev/next Block Ptr
|
||||
lda #ILDR.DBuf+4 skip Prev/next Block Ptr
|
||||
sta idxl
|
||||
|
||||
lda dbuf+35 EL
|
||||
lda ILDR.DBuf+35 EL
|
||||
sta ILDR.EL
|
||||
|
||||
lda dbuf+36 EPB
|
||||
lda ILDR.DBuf+36 EPB
|
||||
sta ILDR.EPB
|
||||
sta ILDR.EITB
|
||||
|
||||
lda dbuf+37 FCLO
|
||||
lda ILDR.DBuf+37 FCLO
|
||||
eor #$ff
|
||||
sta ILDR.nFC
|
||||
|
||||
lda dbuf+38 FCHI
|
||||
lda ILDR.DBuf+38 FCHI
|
||||
eor #$ff
|
||||
sta ILDR.nFC+1
|
||||
|
||||
@ -235,12 +245,12 @@ ILDR.EnumNext stx ILDR.FT
|
||||
bmi .1 $D, $E, or $F...
|
||||
|
||||
and #$0F
|
||||
sta pbuf filename Len
|
||||
sta LDR.PBuf filename Len
|
||||
|
||||
tay
|
||||
|
||||
.5 lda (idxl),y
|
||||
sta pbuf,y
|
||||
sta LDR.PBuf,y
|
||||
dey
|
||||
bne .5
|
||||
|
||||
@ -251,16 +261,16 @@ ILDR.EnumNext stx ILDR.FT
|
||||
bne .1
|
||||
|
||||
lda (src) expected prefix/suffix len
|
||||
cmp pbuf
|
||||
cmp LDR.PBuf
|
||||
bcs .1 filename LE prefix/suffix
|
||||
|
||||
bit ILDR.bPFXSFX
|
||||
bpl .12 go check prefix
|
||||
|
||||
tay
|
||||
ldx pbuf
|
||||
ldx LDR.PBuf
|
||||
|
||||
.11 lda pbuf,x
|
||||
.11 lda LDR.PBuf,x
|
||||
eor (src),y
|
||||
asl
|
||||
bne .1
|
||||
@ -273,7 +283,7 @@ ILDR.EnumNext stx ILDR.FT
|
||||
.12 lda (src) expected prefix/suffix len
|
||||
tay
|
||||
|
||||
.13 lda pbuf,y
|
||||
.13 lda LDR.PBuf,y
|
||||
eor (src),y
|
||||
asl
|
||||
bne .1
|
||||
@ -285,7 +295,7 @@ ILDR.EnumNext stx ILDR.FT
|
||||
lda (idxl),y
|
||||
bpl .10 no lowercase information
|
||||
|
||||
ldx pbuf
|
||||
ldx LDR.PBuf
|
||||
|
||||
.6 cpx #8 CS if MIN_VERSION to use
|
||||
bcs .7
|
||||
@ -303,9 +313,9 @@ ILDR.EnumNext stx ILDR.FT
|
||||
and ILDR.LCBits-8,x
|
||||
beq .9
|
||||
|
||||
.8 lda pbuf,x
|
||||
.8 lda LDR.PBuf,x
|
||||
eor #$20 to lowercase
|
||||
sta pbuf,x
|
||||
sta LDR.PBuf,x
|
||||
|
||||
.9 dex
|
||||
bne .6
|
||||
@ -314,19 +324,19 @@ ILDR.EnumNext stx ILDR.FT
|
||||
rts
|
||||
*--------------------------------------
|
||||
ILDR.LoadFilePBuf
|
||||
ldy #pbuf
|
||||
lda /pbuf
|
||||
ldy #LDR.PBuf
|
||||
lda /LDR.PBuf
|
||||
|
||||
ILDR.LoadFile sty ILDR.OPEN+1 Filename
|
||||
sta ILDR.OPEN+2
|
||||
|
||||
jsr MLI
|
||||
.DA #MLIOPEN
|
||||
.DA #MLI.OPEN
|
||||
.DA ILDR.OPEN
|
||||
bcs .9
|
||||
|
||||
jsr MLI
|
||||
.DA #MLIGETEOF
|
||||
.DA #MLI.GETEOF
|
||||
.DA ILDR.GETEOF
|
||||
bcs .9
|
||||
|
||||
@ -342,15 +352,15 @@ ILDR.LoadFile sty ILDR.OPEN+1 Filename
|
||||
lda ILDR.GETEOF+2
|
||||
bne .99 more than $9F00
|
||||
|
||||
.1 jsr MLI
|
||||
.DA #MLIREAD
|
||||
.1
|
||||
jsr MLI
|
||||
.DA #MLI.READ
|
||||
.DA ILDR.READ
|
||||
bcs .9
|
||||
|
||||
jsr MLI
|
||||
.DA #MLICLOSE
|
||||
.DA #MLI.CLOSE
|
||||
.DA ILDR.CLOSE
|
||||
|
||||
.9 rts
|
||||
|
||||
.99 lda #MLI.E.BADBUF
|
||||
@ -375,7 +385,7 @@ ILDR.MLIRB.P .DA #3
|
||||
*--------------------------------------
|
||||
ILDR.OPEN .DA #3 PARAM CNT
|
||||
.BS 2 Filename
|
||||
.DA iobuf i/o buffer
|
||||
.DA ILDR.IOBuf
|
||||
.HS 01 REF
|
||||
*--------------------------------------
|
||||
ILDR.GETEOF .DA #2 PARAM CNT
|
||||
@ -384,7 +394,7 @@ ILDR.GETEOF .DA #2 PARAM CNT
|
||||
*--------------------------------------
|
||||
ILDR.READ .DA #4 PARAM CNT
|
||||
.HS 01 REF
|
||||
.DA sysentry
|
||||
.DA $2000
|
||||
.DA $9F00 Max file size
|
||||
.HS 0000
|
||||
*--------------------------------------
|
||||
@ -397,14 +407,11 @@ ILDR.QUIT .DA #4 PARAM CNT
|
||||
.HS 00
|
||||
.HS 0000
|
||||
*--------------------------------------
|
||||
ILDR.ATINIT .DA #6
|
||||
.AS "ATINIT"
|
||||
ILDR.KMPFX .DA #3
|
||||
.AS "PM."
|
||||
ILDR.SYSTEMSFX .DA #7
|
||||
.AS ".SYSTEM"
|
||||
*--------------------------------------
|
||||
ILDR.LEN .EQ *-ILDR.START
|
||||
ILDR.ATINIT .PS "ATINIT"
|
||||
.DO M.PM=1
|
||||
ILDR.PMPFX .PS "PM."
|
||||
.FIN
|
||||
ILDR.SYSTEMSFX .PS ".SYSTEM"
|
||||
*--------------------------------------
|
||||
.DUMMY
|
||||
ILDR.EPB .BS 1
|
||||
@ -414,8 +421,12 @@ ILDR.FT .BS 1
|
||||
ILDR.EITB .BS 1
|
||||
ILDR.bPFXSFX .BS 1
|
||||
.ED
|
||||
*--------------------------------------
|
||||
.EP
|
||||
*--------------------------------------
|
||||
ILDR.LEN .EQ *-ILDR.START
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE usr/src/prodos.fx/prodos.s.ildr
|
||||
LOAD usr/src/prodos.fx/prodos.s
|
||||
LOAD usr/src/prodos.fx/pdos8m.s
|
||||
ASM
|
||||
|
@ -5,7 +5,9 @@ NEW
|
||||
* address $FFCB (ROM rts opcode) for rom switching to function.
|
||||
* $FF9B
|
||||
*--------------------------------------
|
||||
IRQ ldx #$FA save 6 bytes of page 0
|
||||
IRQ.START .PH IRQ
|
||||
|
||||
IRQ.START1 ldx #$FA save 6 bytes of page 0
|
||||
|
||||
.2 lda $00,x
|
||||
sta IRQ.ZPSave-$FA,x
|
||||
@ -35,7 +37,7 @@ IRQ ldx #$FA save 6 bytes of page 0
|
||||
bne IRQ.Done before system death.
|
||||
|
||||
lda #$01 bad irq so
|
||||
jsr GP.SysDeath kill the system.
|
||||
jsr GP.SYSDEATH kill the system.
|
||||
*--------------------------------------
|
||||
.LIST ON
|
||||
IRQ.FREE1 .EQ $ffc8-*
|
||||
@ -43,7 +45,7 @@ IRQ.FREE1 .EQ $ffc8-*
|
||||
|
||||
.BS IRQ.FREE1
|
||||
|
||||
IRQ.Reset1 sta RROMBNK2
|
||||
IRQ.ToRomRTS sta IO.RROMBNK2
|
||||
.DO *=$FFCB
|
||||
* hits ROM rts at $FFCB
|
||||
.ELSE
|
||||
@ -57,7 +59,7 @@ IRQ.Done ldx #$FA
|
||||
inx
|
||||
bne .1
|
||||
|
||||
* lda CLRC8ROM
|
||||
* lda IO.CLRC8ROM
|
||||
|
||||
*IRQ.DoneCn lda $C100 SELF MODIFIED
|
||||
* lda IRQ.DoneCn+2
|
||||
@ -67,11 +69,11 @@ IRQ.Done ldx #$FA
|
||||
*--------------------------------------
|
||||
IRQ.GoX jmp (GP.IRQVs,x) interrupt routine x
|
||||
|
||||
IRQ.Reset lda /resetv-1
|
||||
IRQ.Reset lda /ROM.RESETV-1
|
||||
pha
|
||||
lda #resetv-1
|
||||
lda #ROM.RESETV-1
|
||||
pha
|
||||
bra IRQ.Reset1
|
||||
bra IRQ.ToRomRTS
|
||||
|
||||
IRQ.Cnt .HS 00 # of unclaimed interrupts.
|
||||
IRQ.ZPSave .HS 000000000000 6 bytes
|
||||
@ -82,12 +84,14 @@ IRQ.FREE2 .EQ $fffa-*
|
||||
|
||||
.BS IRQ.FREE2
|
||||
|
||||
.DA nmivect nmi handler
|
||||
.DA ROM.NMIJMP nmi handler
|
||||
.DA IRQ.Reset reset handler
|
||||
irqv .DA * PATCHED with ROM vector by LDR
|
||||
.LIST OFF
|
||||
*--------------------------------------
|
||||
IRQ.LEN .EQ *-IRQ
|
||||
.EP
|
||||
*--------------------------------------
|
||||
IRQ.LEN .EQ *-IRQ.START
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE usr/src/prodos.fx/prodos.s.irq
|
||||
|
@ -1,5 +1,12 @@
|
||||
NEW
|
||||
AUTO 3,1
|
||||
*--------------------------------------
|
||||
idapple .EQ $0C model machine id
|
||||
idxl .EQ $10 general use 16 bit index pointer
|
||||
*--------------------------------------
|
||||
auxsp .EQ $0101
|
||||
*--------------------------------------
|
||||
LDR.PBuf .EQ $0280
|
||||
*--------------------------------------
|
||||
.MA DEBUG
|
||||
:1 bit $C000
|
||||
@ -14,11 +21,11 @@ NEW
|
||||
:1 .EQ *
|
||||
.EM
|
||||
*--------------------------------------
|
||||
H2000 jmp prostart
|
||||
jmp atalkset
|
||||
jmp p16start
|
||||
LDR.START jmp LDR.START8
|
||||
jmp LDR.STARTATK
|
||||
jmp LDR.START8
|
||||
*--------------------------------------
|
||||
LDR.MSG.PRODOS .AT "PRODOS FX 0.94"
|
||||
LDR.MSG.PRODOS .AT "PRODOS FX 0.95"
|
||||
LDR.MSG.UNSUPP .AT "UNSUPPORTED HARDWARE"
|
||||
LDR.MSG.IIe .AT "//e"
|
||||
LDR.MSG.IIc .AT "//c"
|
||||
@ -28,21 +35,22 @@ LDR.MSG.CLK .AT "?Clk"
|
||||
LDR.MSG.RAM .AT "/RAM"
|
||||
LDR.MSG.PFXERR .AT "ERR setting prefix"
|
||||
*--------------------------------------
|
||||
p16start inc LDR.BootFlag set = 2 for GQuit rts
|
||||
atalkset inc LDR.BootFlag set = 1 for appletalk rts
|
||||
prostart lda unitnum
|
||||
LDR.START16 inc LDR.BootFlag set = 2 for GQuit rts
|
||||
LDR.STARTATK inc LDR.BootFlag set = 1 for appletalk rts
|
||||
|
||||
LDR.START8 lda ZP.UNITNUM
|
||||
sta LDR.MLIOL.P+1
|
||||
|
||||
cld
|
||||
bit RROMBNK2
|
||||
bit IO.RROMBNK2
|
||||
|
||||
sta CLR80DISP
|
||||
sta CLR80STORE
|
||||
sta IO.CLR80DISP
|
||||
sta IO.CLR80STORE
|
||||
|
||||
jsr init
|
||||
jsr setvid
|
||||
jsr setkbd
|
||||
jsr home
|
||||
jsr ROM.INIT
|
||||
jsr ROM.SETVID
|
||||
jsr ROM.SETKBD
|
||||
jsr ROM.HOME
|
||||
|
||||
lda #32
|
||||
|
||||
@ -56,11 +64,11 @@ prostart lda unitnum
|
||||
jsr LDR.PrintX
|
||||
|
||||
sec
|
||||
jsr idroutine returns system info
|
||||
jsr ROM.IDROUTINE returns system info
|
||||
bcs .2 taken if not a //gs
|
||||
|
||||
lda #$80
|
||||
trb newvideo video mode select
|
||||
trb IO.GS.NEWVIDEO video mode select
|
||||
|
||||
* test for at least a 65c02
|
||||
|
||||
@ -73,7 +81,7 @@ prostart lda unitnum
|
||||
|
||||
stz auxsp
|
||||
|
||||
sta SETALTZP
|
||||
sta IO.SETALTZP
|
||||
|
||||
stz auxsp
|
||||
lda auxsp
|
||||
@ -83,7 +91,7 @@ prostart lda unitnum
|
||||
lda auxsp
|
||||
beq LDR.UNSUPP.HW
|
||||
|
||||
sta CLRALTZP
|
||||
sta IO.CLRALTZP
|
||||
|
||||
lda auxsp
|
||||
bne LDR.UNSUPP.HW NO 128k
|
||||
@ -91,7 +99,7 @@ prostart lda unitnum
|
||||
LDR.CheckROM ldx #LDR.MSG.IIE
|
||||
lda #MACHID.T.IIe+MACHID.M.128+MACHID.COL80
|
||||
|
||||
ldy version check hardware id
|
||||
ldy ROM.VERSION check hardware id
|
||||
cpy #$06 apple //e?
|
||||
beq .1 if yes
|
||||
|
||||
@ -101,13 +109,14 @@ LDR.CheckROM ldx #LDR.MSG.IIE
|
||||
ldx #LDR.MSG.UNKNOWN
|
||||
bra m128k machine is unknown, Assume //e Enh 128k
|
||||
|
||||
.1 ldy zidbyte //c ?
|
||||
.1 ldy ROM.ZIDBYTE //c ?
|
||||
bne .2
|
||||
|
||||
ldy kbd //c, check for keypress
|
||||
ldy IO.KBD //c, check for keypress
|
||||
cpy #$9B escape? (to disable accelerator)
|
||||
bne .11
|
||||
sta KBDSTROBE clear keyboard
|
||||
|
||||
sta IO.KBDSTROBE clear keyboard
|
||||
|
||||
.11 lda #MACHID.T.IIc+MACHID.M.128+MACHID.COL80
|
||||
ldx #LDR.MSG.IIC
|
||||
@ -123,7 +132,7 @@ LDR.CheckROM ldx #LDR.MSG.IIE
|
||||
bra m128k not a //e Enh....
|
||||
|
||||
.3 sec
|
||||
jsr idroutine //gs ????
|
||||
jsr ROM.IDROUTINE //gs ????
|
||||
bcs m128k no.....
|
||||
|
||||
inc LDR.cortland
|
||||
@ -151,31 +160,31 @@ m128k sta idapple Save MACHID in temp location
|
||||
bpl .2
|
||||
|
||||
lda #$01 patch for the gs rom
|
||||
trb statereg to force off intcxrom
|
||||
trb IO.GS.STATEREG to force off intcxrom
|
||||
|
||||
ldx #PAKME.GP-PAKME.Table
|
||||
ldy #MLI
|
||||
lda /MLI
|
||||
ldx #PAKME.GP.ID
|
||||
ldy #GP
|
||||
lda /GP
|
||||
jsr X.Unpak.XatYA
|
||||
|
||||
jsr LDR.LCBNK1
|
||||
|
||||
ldx #PAKME.XRW-PAKME.Table
|
||||
ldy #$D000
|
||||
lda /$D000
|
||||
jsr X.Unpak.XatYA
|
||||
ldx #PAKME.XRW.ID
|
||||
ldy #XRW
|
||||
lda /XRW
|
||||
jsr X.Unpak.XatYAX
|
||||
|
||||
ldx #0
|
||||
|
||||
.1 stz FCBs,x
|
||||
stz VCBs,x
|
||||
.1 stz XDOS.FCBs,x
|
||||
stz XDOS.VCBs,x
|
||||
inx
|
||||
bne .1
|
||||
|
||||
ldx #PAKME.XDOS-PAKME.Table
|
||||
ldy #$DE00
|
||||
lda /$DE00
|
||||
jsr X.Unpak.XatYA
|
||||
ldx #PAKME.XDOS.ID
|
||||
ldy #XDOS
|
||||
lda /XDOS
|
||||
jsr X.Unpak.XatYAX
|
||||
|
||||
ldx #XDOS.DATA.LEN
|
||||
|
||||
@ -183,65 +192,64 @@ m128k sta idapple Save MACHID in temp location
|
||||
dex
|
||||
bne .3
|
||||
|
||||
ldx #PAKME.IRQ-PAKME.Table
|
||||
ldy #$FF9B
|
||||
lda /$FF9B
|
||||
jsr X.Unpak.XatYA
|
||||
ldx #PAKME.IRQ.ID
|
||||
ldy #IRQ
|
||||
lda /IRQ
|
||||
jsr X.Unpak.XatYAX
|
||||
|
||||
LDR.IRQ lda RROMWRAMBNK2
|
||||
LDR.IRQ lda IO.RROMWRAMBNK2
|
||||
ldy irqv interrupt vector
|
||||
ldx irqv+1 x = high byte
|
||||
|
||||
jsr LDR.LCBNK1
|
||||
|
||||
sta SETALTZP
|
||||
sta IO.SETALTZP
|
||||
sty irqv save irq vector in aux lc
|
||||
stx irqv+1
|
||||
|
||||
sta CLRALTZP
|
||||
sta IO.CLRALTZP
|
||||
sty irqv
|
||||
stx irqv+1 save irq vector in main lc
|
||||
|
||||
lda #calldisp
|
||||
sta jspare+1 P8 system death vector
|
||||
lda /calldisp
|
||||
sta jspare+2
|
||||
lda #XDOS.CallDisp
|
||||
sta GP.DISPATCH+1 P8 system death vector
|
||||
lda /XDOS.CallDisp
|
||||
sta GP.DISPATCH+2
|
||||
.DO LOWERCASE=0
|
||||
lda kversion
|
||||
lda GP.KVER
|
||||
sta xdosver save current version for dir use
|
||||
.FIN
|
||||
lda idapple
|
||||
sta MACHID
|
||||
sta GP.MACHID
|
||||
|
||||
lda LDR.cortland
|
||||
beq LDR.II branch if // family
|
||||
*--------------------------------------
|
||||
LDR.IIGS sta cortflag
|
||||
LDR.IIGS sta XDOS.CortFlag
|
||||
|
||||
lda #calldisp
|
||||
sta cortdisp
|
||||
lda /calldisp
|
||||
sta cortdisp+1
|
||||
lda #XDOS.CallDisp
|
||||
sta XDOS.CortDisp
|
||||
lda /XDOS.CallDisp
|
||||
sta XDOS.CortDisp+1
|
||||
|
||||
* lda RROMWRAMBNK2
|
||||
* lda IO.RROMWRAMBNK2
|
||||
|
||||
* stz vmode force setvid to reset cursor
|
||||
* stz ROM.MODE force setvid to reset cursor
|
||||
* jsr setvid reset output to screen
|
||||
|
||||
* jsr LDR.LCBNK1
|
||||
|
||||
lda #'C'
|
||||
ldx PAKME.CCLK
|
||||
ldy PAKME.CCLK+1
|
||||
ldx #PAKME.CCLK.ID
|
||||
jsr LDR.SetupCLK
|
||||
|
||||
* ldx #PAKME.SEL2-PAKME.Table
|
||||
* ldx #PAKME.SEL2.ID
|
||||
* ldy #$1000
|
||||
* lda /$1000
|
||||
* jsr X.Unpak.XatYA
|
||||
* jsr X.Unpak.XatYAX
|
||||
|
||||
ldx #PAKME.SEL2-PAKME.Table
|
||||
jsr LDR.SetupQC
|
||||
ldx #PAKME.SEL2.ID
|
||||
jsr LDR.SetupSEL
|
||||
*--------------------------------------
|
||||
lda LDR.BootFlag
|
||||
bne .1 branch if prodos 8 alone
|
||||
@ -253,22 +261,24 @@ LDR.IIGS sta cortflag
|
||||
|
||||
.1 bra LDR.Common
|
||||
*--------------------------------------
|
||||
LDR.II ldx #PAKME.SEL1-PAKME.Table
|
||||
jsr LDR.SetupQC
|
||||
LDR.II ldx #PAKME.SEL1.ID
|
||||
jsr LDR.SetupSEL
|
||||
|
||||
jsr LDR.ClkDevScan
|
||||
*--------------------------------------
|
||||
LDR.Common jsr LDR.BlkDevScan
|
||||
|
||||
.DO M.RAM=1
|
||||
jsr LDR.SetupRAM
|
||||
.FIN
|
||||
*--------------------------------------
|
||||
lda LDR.MLIOL.P+1 Boot unitnum
|
||||
sta DEVNUM
|
||||
lda LDR.MLIOL.P+1 Boot ZP.UNITNUM
|
||||
sta GP.DEVNUM
|
||||
|
||||
ldx DEVCNT
|
||||
ldx GP.DEVCNT
|
||||
|
||||
.1 lda DEVLST,x
|
||||
eor DEVNUM
|
||||
.1 lda GP.DEVLST,x
|
||||
eor GP.DEVNUM
|
||||
and #$f0
|
||||
beq .2
|
||||
|
||||
@ -277,73 +287,73 @@ LDR.Common jsr LDR.BlkDevScan
|
||||
|
||||
brk
|
||||
|
||||
.2 lda DEVLST,x
|
||||
.2 lda GP.DEVLST,x
|
||||
pha
|
||||
|
||||
.3 lda DEVLST+1,x
|
||||
sta DEVLST,x
|
||||
cpx DEVCNT
|
||||
.3 lda GP.DEVLST+1,x
|
||||
sta GP.DEVLST,x
|
||||
cpx GP.DEVCNT
|
||||
inx
|
||||
bcc .3
|
||||
|
||||
pla
|
||||
ldx DEVCNT
|
||||
sta DEVLST,x
|
||||
ldx GP.DEVCNT
|
||||
sta GP.DEVLST,x
|
||||
|
||||
lda LDR.BootFlag get setup entry point flag
|
||||
beq LDR.SetPrefix taken if normal boot.
|
||||
|
||||
bit RROMBNK2
|
||||
bit IO.RROMBNK2
|
||||
rts return to caller at setup entry point.
|
||||
*--------------------------------------
|
||||
LDR.SetPrefix jsr MLI
|
||||
.DA #MLIONLINE
|
||||
.DA #MLI.ONLINE
|
||||
.DA LDR.MLIOL.P
|
||||
bcs .9
|
||||
|
||||
lda pbuf+1 get volume name length.
|
||||
lda LDR.PBuf+1 get volume name length.
|
||||
and #$0F strip SDDDxxxx
|
||||
beq .9
|
||||
|
||||
inc add 1 for leading '/'
|
||||
sta pbuf save prefix length.
|
||||
sta LDR.PBuf save prefix length.
|
||||
lda #'/' place leading '/' in prefix buffer
|
||||
sta pbuf+1
|
||||
sta LDR.PBuf+1
|
||||
|
||||
jsr MLI
|
||||
.DA #MLISETPREFIX
|
||||
.DA #MLI.SETPREFIX
|
||||
.DA LDR.MLISETP.P
|
||||
bcs .9
|
||||
|
||||
jsr CROUT
|
||||
jsr ROM.CROUT
|
||||
|
||||
ldx #PAKME.ILDR-PAKME.Table
|
||||
ldy #ILDR.START
|
||||
lda /ILDR.START
|
||||
ldx #PAKME.ILDR.ID
|
||||
ldy #ILDR
|
||||
lda /ILDR
|
||||
jsr X.Unpak.XatYA
|
||||
|
||||
jmp ILDR.START
|
||||
|
||||
jmp ILDR
|
||||
|
||||
.9 ldx #LDR.MSG.PFXERR
|
||||
jsr LDR.PrintX
|
||||
bra *
|
||||
*--------------------------------------
|
||||
LDR.SetupQC bit RRAMWRAMBNK2 read/write RAM bank 2
|
||||
bit RRAMWRAMBNK2
|
||||
LDR.SetupSEL bit IO.RRAMWRAMBNK2 read/write RAM bank 2
|
||||
bit IO.RRAMWRAMBNK2
|
||||
|
||||
ldy #$D100
|
||||
lda /$D100
|
||||
jsr X.Unpak.XatYA
|
||||
jsr X.Unpak.XatYAX
|
||||
|
||||
lda #$EE byte to distinguish LC bank 2
|
||||
sta $D000
|
||||
*--------------------------------------
|
||||
LDR.LCBNK1 lda RRAMWRAMBNK1 switch in LC bank 1
|
||||
lda RRAMWRAMBNK1
|
||||
LDR.LCBNK1 lda IO.RRAMWRAMBNK1 switch in LC bank 1
|
||||
lda IO.RRAMWRAMBNK1
|
||||
rts
|
||||
*--------------------------------------
|
||||
DS121x.DATA1 .EQ idxl
|
||||
DS121x.DATA2 .EQ A1L
|
||||
DS121x.DATA2 .EQ ZP.A1L
|
||||
*--------------------------------------
|
||||
LDR.ClkDevScan jsr LDR.IsIIc
|
||||
bcc LDR.ClkDevNCLK //c only
|
||||
@ -416,19 +426,20 @@ LDR.ClkDevDCLK php
|
||||
cld
|
||||
|
||||
lda #'D'
|
||||
ldx PAKME.DCLK
|
||||
ldy PAKME.DCLK+1
|
||||
ldx #PAKME.DCLK.ID
|
||||
jmp LDR.SetupCLK
|
||||
|
||||
.9 cld
|
||||
*--------------------------------------
|
||||
NSC.IOBASE .EQ $C300
|
||||
*--------------------------------------
|
||||
LDR.ClkDevNCLK php
|
||||
sei
|
||||
|
||||
lda RDCXROM
|
||||
lda IO.RDCXROM
|
||||
php
|
||||
|
||||
sta SETCXROM
|
||||
sta IO.SETCXROM
|
||||
|
||||
sta NSC.IOBASE
|
||||
* lda $C00B Workaround for Ultrawarp bug
|
||||
@ -489,7 +500,7 @@ LDR.ClkDevNCLK php
|
||||
plp
|
||||
bmi .8
|
||||
|
||||
sta CLRCXROM
|
||||
sta IO.CLRCXROM
|
||||
|
||||
.8 plp
|
||||
*--------------------------------------
|
||||
@ -505,8 +516,7 @@ LDR.ClkDevNCLK php
|
||||
bra LDR.ClkDevTCLK
|
||||
|
||||
.90 lda #'N'
|
||||
ldx PAKME.NCLK
|
||||
ldy PAKME.NCLK+1
|
||||
ldx #PAKME.NCLK.ID
|
||||
bra LDR.SetupCLK
|
||||
*--------------------------------------
|
||||
LDR.ClkDevTCLK jsr LDR.IsIIc
|
||||
@ -538,8 +548,7 @@ LDR.ClkDevTCLK jsr LDR.IsIIc
|
||||
lda $c080,x
|
||||
|
||||
lda #'T'
|
||||
ldx PAKME.TCLK
|
||||
ldy PAKME.TCLK+1
|
||||
ldx #PAKME.TCLK.ID
|
||||
jsr LDR.SetupCLK
|
||||
|
||||
lda idxl+1
|
||||
@ -554,7 +563,7 @@ LDR.ClkDevTCLK jsr LDR.IsIIc
|
||||
cmp #$C8
|
||||
bne .1
|
||||
*--------------------------------------
|
||||
LDR.ClkDevXCLK bit RROMBNK2
|
||||
LDR.ClkDevXCLK bit IO.RROMBNK2
|
||||
sta $C070
|
||||
bit $FACA
|
||||
bit $FACA
|
||||
@ -573,94 +582,95 @@ LDR.ClkDevXCLK bit RROMBNK2
|
||||
|
||||
.1 bit $F851
|
||||
lda #'X'
|
||||
ldx PAKME.XCLK
|
||||
ldy PAKME.XCLK+1
|
||||
ldx #PAKME.XCLK.ID
|
||||
*--------------------------------------
|
||||
LDR.SetupCLK stx ZPInBufPtr
|
||||
sty ZPInBufPtr+1
|
||||
|
||||
sta LDR.MSG.CLK
|
||||
LDR.SetupCLK sta LDR.MSG.CLK
|
||||
|
||||
phx
|
||||
|
||||
ldx #LDR.MSG.CLK
|
||||
jsr LDR.PrintX
|
||||
|
||||
jsr LDR.LCBNK1
|
||||
|
||||
plx
|
||||
|
||||
lda #$D742
|
||||
sta ZPOutBufPtr
|
||||
lda /$D742
|
||||
sta ZPOutBufPtr+1
|
||||
jsr X.Unpak
|
||||
ldy #CLK
|
||||
lda /CLK
|
||||
jsr X.Unpak.XatYAX
|
||||
|
||||
lda #$4C enable clock routine by putting a jmp
|
||||
sta clockv in front of clock vector
|
||||
sta GP.CLOCK in front of clock vector
|
||||
|
||||
lda #MACHID.CLK
|
||||
tsb MACHID
|
||||
tsb GP.MACHID
|
||||
LDR.SetupCLK.RTS
|
||||
rts
|
||||
*--------------------------------------
|
||||
LDR.SetupRAM lda DEVCNT
|
||||
.DO M.RAM=1
|
||||
|
||||
LDR.SetupRAM lda GP.DEVCNT
|
||||
cmp #13
|
||||
bcs LDR.SetupCLK.RTS
|
||||
|
||||
jsr LDR.LCBNK1
|
||||
|
||||
ldx #PAKME.RAM-PAKME.Table
|
||||
ldy #$FF00
|
||||
lda /$FF00
|
||||
jsr X.Unpak.XatYA
|
||||
ldx #PAKME.RAM.ID
|
||||
ldy #RAM
|
||||
lda /RAM
|
||||
jsr X.Unpak.XatYAX
|
||||
|
||||
lda RAMX.PAK
|
||||
bne .1
|
||||
|
||||
sta SETWRITEAUX
|
||||
sta IO.SETWRITEAUX
|
||||
|
||||
ldx #PAKME.RAMX-PAKME.Table
|
||||
ldy #$0200
|
||||
lda /$0200
|
||||
ldx #PAKME.RAMX.ID
|
||||
ldy #RAMX
|
||||
lda /RAMX
|
||||
jsr X.Unpak.XatYA
|
||||
bra .7
|
||||
|
||||
.1 ldx #PAKME.RAMX-PAKME.Table
|
||||
.1 ldx #PAKME.RAMX.ID
|
||||
ldy #$0800
|
||||
lda /$0800
|
||||
jsr X.Unpak.XatYA
|
||||
|
||||
sta SETWRITEAUX
|
||||
sta IO.SETWRITEAUX
|
||||
|
||||
ldx #$FE
|
||||
|
||||
.2 lda $900,x
|
||||
sta $300,x
|
||||
sta RAMX+$100,x
|
||||
dex
|
||||
txa
|
||||
bne .2
|
||||
|
||||
.3 lda $800,x
|
||||
sta $200,x
|
||||
sta RAMX,x
|
||||
inx
|
||||
bne .3
|
||||
|
||||
.7 sta CLRWRITEAUX
|
||||
.7 sta IO.CLRWRITEAUX
|
||||
|
||||
lda #RAMDRV put driver address into
|
||||
sta DEVPTRS3D2
|
||||
lda /RAMDRV
|
||||
sta DEVPTRS3D2+1
|
||||
lda #RAM put driver address into
|
||||
sta GP.DEVPTRS3D2
|
||||
lda /RAM
|
||||
sta GP.DEVPTRS3D2+1
|
||||
|
||||
inc DEVCNT count (-1) active devices
|
||||
ldx DEVCNT
|
||||
inc GP.DEVCNT count (-1) active devices
|
||||
ldx GP.DEVCNT
|
||||
lda #$BF unit num of /RAM
|
||||
sta DEVLST,x
|
||||
sta GP.DEVLST,x
|
||||
|
||||
ldx #LDR.MSG.RAM
|
||||
jmp LDR.PrintX
|
||||
.FIN
|
||||
*--------------------------------------
|
||||
* find all disk devices in system slots and set up address
|
||||
* and device table in prodos global page.
|
||||
*--------------------------------------
|
||||
LDR.BlkDevScan bit RROMBNK2 write protect lc ram.
|
||||
LDR.BlkDevScan bit IO.RROMBNK2 write protect lc ram.
|
||||
|
||||
stz idxl
|
||||
lda #$C7 search slots from high to low
|
||||
@ -680,9 +690,9 @@ LDR.BlkDevScan bit RROMBNK2 write protect lc ram.
|
||||
bne .2 branch if 16 sector disk II.
|
||||
|
||||
sta devid =0 since disk ii's have null attributes
|
||||
lda #XRW.START
|
||||
lda #XRW
|
||||
sta LDR.driveradr
|
||||
lda /XRW.START
|
||||
lda /XRW
|
||||
sta LDR.driveradr+1
|
||||
sec 2 devices
|
||||
jsr LDR.AddBlkDevs
|
||||
@ -776,16 +786,16 @@ LDR.AddSPDevs jsr LDR.SetDevID setup the devid byte from attributes
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
sta unitnum unit number
|
||||
sta ZP.UNITNUM
|
||||
|
||||
stz A4L force a prodos status call
|
||||
stz ZP.CMDNUM force a prodos status call
|
||||
|
||||
stz buf dummy pointer
|
||||
stz ZP.BUFPTR dummy pointer
|
||||
lda #$10
|
||||
sta buf+1 dummy pointer should be <> 0
|
||||
sta ZP.BUFPTR+1 dummy pointer should be <> 0
|
||||
|
||||
stz bloknml # of bytes to transfer
|
||||
stz bloknml+1
|
||||
stz ZP.BLKNUM # of bytes to transfer
|
||||
stz ZP.BLKNUM+1
|
||||
|
||||
.1 jsr $0000 SELF MODIFIED
|
||||
|
||||
@ -839,9 +849,9 @@ LDR.AddBlkDevs php how many drives (carry).
|
||||
asl in high nibble.
|
||||
|
||||
ora devid combine with attributes.
|
||||
ldx DEVCNT
|
||||
ldx GP.DEVCNT
|
||||
inx put device # into device list.
|
||||
sta DEVLST,x
|
||||
sta GP.DEVLST,x
|
||||
asl now form drive 2 device number, if any.
|
||||
|
||||
plp restore # of devices in carry.
|
||||
@ -849,21 +859,21 @@ LDR.AddBlkDevs php how many drives (carry).
|
||||
bpl .1 branch if a 1 drive device (e.g. hard drive)
|
||||
|
||||
inx else presume that 2nd drive is present.
|
||||
sta DEVLST,x active device list.
|
||||
sta GP.DEVLST,x active device list.
|
||||
|
||||
.1 stx DEVCNT save updated device count.
|
||||
.1 stx GP.DEVCNT save updated device count.
|
||||
asl shift # of drives back into carry.
|
||||
lda LDR.driveradr get high address of device driver.
|
||||
sta DEVPTRS,y device driver table 1.
|
||||
sta GP.DEVPTRS,y device driver table 1.
|
||||
bcc .2 branch if single drive.
|
||||
|
||||
sta DEVPTRS+16,y device driver table 2.
|
||||
sta GP.DEVPTRS+16,y device driver table 2.
|
||||
|
||||
.2 lda LDR.driveradr+1
|
||||
sta DEVPTRS+1,y
|
||||
sta GP.DEVPTRS+1,y
|
||||
bcc .3
|
||||
|
||||
sta DEVPTRS+17,y
|
||||
sta GP.DEVPTRS+17,y
|
||||
|
||||
.3
|
||||
LDR.AddBlkDevs.RTS
|
||||
@ -895,22 +905,22 @@ LDR.AddExtraBLKDevs
|
||||
ora #$10
|
||||
tay
|
||||
|
||||
lda DEVPTRS,y device driver table 1
|
||||
cmp #nodevice
|
||||
lda GP.DEVPTRS,y device driver table 1
|
||||
cmp #XDOS.NoDevice
|
||||
bne .10
|
||||
|
||||
lda DEVPTRS+1,y
|
||||
cmp /nodevice
|
||||
lda GP.DEVPTRS+1,y
|
||||
cmp /XDOS.NoDevice
|
||||
bne .10 Drive 1 & 2 free
|
||||
|
||||
jsr LDR.AddY2DEVLST Y = index in DEVPTRS
|
||||
jsr LDR.AddY2DEVLST Y = index in GP.DEVPTRS
|
||||
jsr .8
|
||||
|
||||
tya
|
||||
and #$F
|
||||
tay
|
||||
|
||||
.4 jsr LDR.AddY2DEVLST Y = index in DEVPTRS
|
||||
.4 jsr LDR.AddY2DEVLST Y = index in GP.DEVPTRS
|
||||
|
||||
.8 phy
|
||||
|
||||
@ -919,9 +929,9 @@ LDR.AddExtraBLKDevs
|
||||
lda (idxl),y BLK entry point
|
||||
|
||||
ply
|
||||
sta DEVPTRS,y
|
||||
sta GP.DEVPTRS,y
|
||||
lda idxl+1
|
||||
sta DEVPTRS+1,y
|
||||
sta GP.DEVPTRS+1,y
|
||||
|
||||
* clc
|
||||
|
||||
@ -979,14 +989,14 @@ LDR.AddExtraSPDevs
|
||||
lda LDR.SPVect+2
|
||||
sta XDOS.SPVectHi-1,x
|
||||
|
||||
bit RROMBNK2 write protect lc ram.
|
||||
bit IO.RROMBNK2 write protect lc ram.
|
||||
|
||||
jsr LDR.AddY2DEVLST
|
||||
|
||||
lda #XDOS.SPREMAP
|
||||
sta DEVPTRS,y
|
||||
sta GP.DEVPTRS,y
|
||||
lda /XDOS.SPREMAP
|
||||
sta DEVPTRS+1,y
|
||||
sta GP.DEVPTRS+1,y
|
||||
|
||||
.2 inc LDR.SPStatus.U
|
||||
|
||||
@ -1009,7 +1019,7 @@ LDR.CheckTClkID ldy #6
|
||||
|
||||
LDR.CheckDiskID ldy #5
|
||||
|
||||
lda CLRC8ROM switch out $C8 ROMs
|
||||
lda IO.CLRC8ROM switch out $C8 ROMs
|
||||
|
||||
.1 lda (idxl),y compare id bytes
|
||||
cmp dskid,y
|
||||
@ -1025,7 +1035,7 @@ LDR.CheckDiskID ldy #5
|
||||
.8 ldx LDR.SlotIdx
|
||||
|
||||
lda sltbit-1,x
|
||||
tsb rommap mark bit to flag rom present
|
||||
tsb GP.SLTBYT mark bit to flag rom present
|
||||
|
||||
.9 plp
|
||||
rts
|
||||
@ -1048,12 +1058,12 @@ LDR.FindFreeDevPtr
|
||||
LDR.FindFreeDevPtrNext
|
||||
|
||||
.1 ldy LDR.DEVPTRS.IDX,x
|
||||
lda DEVPTRS,y device driver table 1
|
||||
cmp #nodevice
|
||||
lda GP.DEVPTRS,y device driver table 1
|
||||
cmp #XDOS.NoDevice
|
||||
bne .2
|
||||
|
||||
lda DEVPTRS+1,y
|
||||
cmp /nodevice
|
||||
lda GP.DEVPTRS+1,y
|
||||
cmp /XDOS.NoDevice
|
||||
beq .8
|
||||
|
||||
.2 dex
|
||||
@ -1075,8 +1085,8 @@ LDR.SetDevID ldy #$FE check attributes byte.
|
||||
sta devid
|
||||
rts
|
||||
*--------------------------------------
|
||||
LDR.AddY2DEVLST inc DEVCNT
|
||||
ldx DEVCNT
|
||||
LDR.AddY2DEVLST inc GP.DEVCNT
|
||||
ldx GP.DEVCNT
|
||||
tya
|
||||
|
||||
asl convert to DSSS0000
|
||||
@ -1084,7 +1094,7 @@ LDR.AddY2DEVLST inc DEVCNT
|
||||
asl
|
||||
|
||||
ora devid include device attributes
|
||||
sta DEVLST,x in the active device list.
|
||||
sta GP.DEVLST,x in the active device list.
|
||||
|
||||
rts
|
||||
*--------------------------------------
|
||||
@ -1096,7 +1106,7 @@ LDR.Scr80Init phx Save LDR.MSG
|
||||
php
|
||||
sei
|
||||
|
||||
sta SETC3ROM
|
||||
sta IO.SETC3ROM
|
||||
|
||||
ldx #COL80IDX.Cnt-1
|
||||
|
||||
@ -1113,23 +1123,23 @@ LDR.Scr80Init phx Save LDR.MSG
|
||||
cmp #$80
|
||||
beq .3
|
||||
|
||||
.2 sta CLRC3ROM
|
||||
.2 sta IO.CLRC3ROM
|
||||
|
||||
.3 plp
|
||||
*--------------------------------------
|
||||
LDR.Scr80Init2 lda #$8C Reset 80 col screen ($0C:HOME)
|
||||
jsr $C300
|
||||
|
||||
jsr setnorm
|
||||
jsr home
|
||||
jsr SETINV
|
||||
jsr ROM.SETNORM
|
||||
jsr ROM.HOME
|
||||
jsr ROM.SETINV
|
||||
|
||||
.DO LOGO
|
||||
.DO LOGO=1
|
||||
lda #20
|
||||
sta CV
|
||||
sta ZP.CV
|
||||
inc
|
||||
sta WNDTOP
|
||||
jsr VTAB
|
||||
sta ZP.WNDTOP
|
||||
jsr ROM.TABV
|
||||
|
||||
lda #LOGO.PAKED
|
||||
sta ZPInBufPtr
|
||||
@ -1142,17 +1152,17 @@ LDR.Scr80Init2 lda #$8C Reset 80 col screen ($0C:HOME)
|
||||
|
||||
jsr X.Unpak
|
||||
|
||||
sta CLRHIRES
|
||||
sta SETMIXED
|
||||
sta IO.CLRHIRES
|
||||
sta IO.SETMIXED
|
||||
|
||||
bit RDIOUDIS
|
||||
sta SETIOUDIS
|
||||
sta SETDHIRES
|
||||
bit IO.RDIOUDIS
|
||||
sta IO.SETIOUDIS
|
||||
sta IO.SETDHIRES
|
||||
bmi .10
|
||||
|
||||
sta CLRIOUDIS
|
||||
sta IO.CLRIOUDIS
|
||||
|
||||
.10 sta CLRTEXT
|
||||
.10 sta IO.CLRTEXT
|
||||
|
||||
stz ZPPtr1
|
||||
lda #$A0
|
||||
@ -1162,7 +1172,7 @@ LDR.Scr80Init2 lda #$8C Reset 80 col screen ($0C:HOME)
|
||||
|
||||
.1 pha
|
||||
|
||||
jsr GBSCALC
|
||||
jsr ROM.GBSCALC
|
||||
|
||||
ldy #0
|
||||
|
||||
@ -1173,8 +1183,8 @@ LDR.Scr80Init2 lda #$8C Reset 80 col screen ($0C:HOME)
|
||||
tax
|
||||
lda PALETTE.AUX,x
|
||||
|
||||
sta SETPAGE2
|
||||
sta (GBASL),y
|
||||
sta IO.SETPAGE2
|
||||
sta (ZP.GBASL),y
|
||||
|
||||
pla
|
||||
lsr
|
||||
@ -1183,8 +1193,8 @@ LDR.Scr80Init2 lda #$8C Reset 80 col screen ($0C:HOME)
|
||||
lsr
|
||||
tax
|
||||
lda PALETTE.MAIN,x
|
||||
sta CLRPAGE2
|
||||
sta (GBASL),y
|
||||
sta IO.CLRPAGE2
|
||||
sta (ZP.GBASL),y
|
||||
|
||||
iny
|
||||
cpy #40
|
||||
@ -1210,9 +1220,9 @@ LDR.Scr80Init2 lda #$8C Reset 80 col screen ($0C:HOME)
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
sta SETPAGE2
|
||||
ora (GBASL),y
|
||||
sta (GBASL),y
|
||||
sta IO.SETPAGE2
|
||||
ora (ZP.GBASL),y
|
||||
sta (ZP.GBASL),y
|
||||
|
||||
pla
|
||||
lsr
|
||||
@ -1225,9 +1235,9 @@ LDR.Scr80Init2 lda #$8C Reset 80 col screen ($0C:HOME)
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
sta CLRPAGE2
|
||||
ora (GBASL),y
|
||||
sta (GBASL),y
|
||||
sta IO.CLRPAGE2
|
||||
ora (ZP.GBASL),y
|
||||
sta (ZP.GBASL),y
|
||||
|
||||
iny
|
||||
cpy #40
|
||||
@ -1248,37 +1258,37 @@ LDR.Scr80Init2 lda #$8C Reset 80 col screen ($0C:HOME)
|
||||
|
||||
.FIN
|
||||
|
||||
jsr CLREOL
|
||||
jsr setnorm
|
||||
jsr ROM.CLREOL
|
||||
jsr ROM.SETNORM
|
||||
|
||||
ldx #LDR.MSG.PRODOS
|
||||
jsr LDR.PrintX
|
||||
|
||||
plx get back LDR.MSG.machine type
|
||||
*--------------------------------------
|
||||
LDR.PrintX bit RROMBNK2
|
||||
LDR.PrintX bit IO.RROMBNK2
|
||||
|
||||
lda INVFLG
|
||||
lda ZP.INVFLG
|
||||
pha
|
||||
jsr SETINV
|
||||
jsr ROM.SETINV
|
||||
|
||||
.1 lda $2000,x
|
||||
pha
|
||||
ora #$80
|
||||
jsr COUT
|
||||
jsr ROM.COUT
|
||||
inx
|
||||
pla
|
||||
bpl .1
|
||||
|
||||
lda #$A0
|
||||
jsr COUT
|
||||
jsr ROM.COUT
|
||||
|
||||
pla
|
||||
sta INVFLG
|
||||
sta CLRPAGE2 for screen holes proper access
|
||||
sta ZP.INVFLG
|
||||
sta IO.CLRPAGE2 for screen holes proper access
|
||||
rts
|
||||
*--------------------------------------
|
||||
LDR.IsIIc lda MACHID
|
||||
LDR.IsIIc lda GP.MACHID
|
||||
and #MACHID.T
|
||||
cmp #MACHID.T.IIc
|
||||
beq .9
|
||||
@ -1294,11 +1304,11 @@ PALETTE.AUX .HS 00.01.02.03.04.05.06.07
|
||||
*--------------------------------------
|
||||
* 16 bytes moved to $03F0 vectors
|
||||
*--------------------------------------
|
||||
LDR.3F0 .DA breakv
|
||||
.DA oldrst
|
||||
LDR.3F0 .DA ROM.BREAKV
|
||||
.DA ROM.OLDRST
|
||||
.DA #$5A powerup byte
|
||||
jmp oldrst '&' vector
|
||||
jmp oldrst ctrl-y vector
|
||||
jmp ROM.OLDRST '&' vector
|
||||
jmp ROM.OLDRST ctrl-y vector
|
||||
.HS 004000
|
||||
.DA GP.IRQV global page interrupt vector
|
||||
*--------------------------------------
|
||||
@ -1380,10 +1390,10 @@ COL80VAL .HS 3818012C
|
||||
*--------------------------------------
|
||||
LDR.MLIOL.P .DA #2
|
||||
.DA #$60
|
||||
.DA pbuf+1
|
||||
.DA LDR.PBuf+1
|
||||
|
||||
LDR.MLISETP.P .DA #1
|
||||
.DA pbuf
|
||||
.DA LDR.PBuf
|
||||
|
||||
LDR.SPStatus.P .DA #$03 # of parms
|
||||
LDR.SPStatus.U .DA #$00 unit number (code for smartport stat)
|
||||
@ -1419,5 +1429,5 @@ LDR.SlotDevCnt .BS 7
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE usr/src/prodos.fx/prodos.s.ldr
|
||||
LOAD usr/src/prodos.fx/prodos.s
|
||||
LOAD usr/src/prodos.fx/pdos8m.s
|
||||
ASM
|
||||
|
@ -7,13 +7,15 @@ NEW
|
||||
*--------------------------------------
|
||||
DS1216E.DATA .EQ $200 Reverted YY MM DD Day HH mm SS CS
|
||||
*--------------------------------------
|
||||
NCLK.START php
|
||||
NCLK.START .PH CLK
|
||||
|
||||
NCLK.START1 php
|
||||
sei NO IRQ !!!
|
||||
|
||||
lda RDCXROM
|
||||
lda IO.RDCXROM
|
||||
php
|
||||
|
||||
sta SETCXROM
|
||||
sta IO.SETCXROM
|
||||
|
||||
sta NSC.IOBASE
|
||||
* lda $C00B Workaround for Ultrawarp bug
|
||||
@ -86,31 +88,33 @@ NCLK.START php
|
||||
asl
|
||||
asl
|
||||
ora DS1216E.DATA+2 Get DD
|
||||
sta DATELO
|
||||
sta GP.DATE
|
||||
|
||||
* lda DS1216E.DATA Get YY
|
||||
|
||||
pla
|
||||
rol
|
||||
sta DATELO+1
|
||||
sta GP.DATE+1
|
||||
|
||||
lda DS1216E.DATA+5 Get mm
|
||||
sta TIMELO
|
||||
sta GP.TIME
|
||||
|
||||
lda DS1216E.DATA+4 Get HH
|
||||
sta TIMELO+1
|
||||
sta GP.TIME+1
|
||||
|
||||
plp
|
||||
bmi .8
|
||||
|
||||
sta CLRCXROM
|
||||
sta IO.CLRCXROM
|
||||
|
||||
.8 plp
|
||||
rts
|
||||
*--------------------------------------
|
||||
DS1216E.SIG .HS 5CA33AC55CA33AC5 Reverted 7->0
|
||||
*--------------------------------------
|
||||
.LIST ON
|
||||
.EP
|
||||
*--------------------------------------
|
||||
* .LIST ON
|
||||
NCLK.LEN .EQ *-NCLK.START
|
||||
.LIST OFF
|
||||
*--------------------------------------
|
||||
|
@ -1,10 +1,12 @@
|
||||
NEW
|
||||
AUTO 3,1
|
||||
RAM.START
|
||||
RAMDRV cld no decimal.
|
||||
*--------------------------------------
|
||||
RAM.START .PH RAM
|
||||
|
||||
RAM.START1 cld no decimal.
|
||||
ldx #$0B save 13 bytes of parms
|
||||
|
||||
.1 lda A1L,x
|
||||
.1 lda ZP.A1L,x
|
||||
sta a1l1,x
|
||||
dex
|
||||
bpl .1
|
||||
@ -16,34 +18,34 @@ RAMDRV cld no decimal.
|
||||
dex
|
||||
bpl .2
|
||||
|
||||
lda A4L get command.
|
||||
lda ZP.CMDNUM
|
||||
beq stat 0 = status
|
||||
|
||||
cmp #$04 check for command too high.
|
||||
bcs ioerr if it is, i/o error
|
||||
|
||||
eor #$03
|
||||
sta A4L 0=format, 2=read, 1=write
|
||||
sta ZP.CMDNUM 0=format, 2=read, 1=write
|
||||
beq format
|
||||
|
||||
ldy bloknml+1 check for large block number.
|
||||
ldy ZP.BLKNUM+1 check for large block number.
|
||||
bne ioerr too big.
|
||||
|
||||
lda bloknml block #
|
||||
lda ZP.BLKNUM block #
|
||||
bmi ioerr largest block number is $7F
|
||||
|
||||
* at this point, control is passed to the code in the alternate 64k.
|
||||
* it it used for read, write and format. after the request is completed,
|
||||
* control is passed back to 'noerr'.
|
||||
|
||||
format lda #RAMXDRV card entry point
|
||||
format lda #RAMX card entry point
|
||||
sta passit
|
||||
lda /RAMXDRV
|
||||
lda /RAMX
|
||||
|
||||
gocard sta passit+1 also used by 'mainwrt'
|
||||
sec direction ram -> card
|
||||
clv start with original zero page
|
||||
jmp xfer transfer control
|
||||
jmp ROM.XFER transfer control
|
||||
|
||||
ioerr lda #$27
|
||||
bne H2D41
|
||||
@ -62,7 +64,7 @@ H2D47 php save status
|
||||
ldx #$0B restore 13 byes of parms
|
||||
|
||||
H2D4B lda a1l1,x
|
||||
sta A1L,x
|
||||
sta ZP.A1L,x
|
||||
dex
|
||||
bpl H2D4B
|
||||
|
||||
@ -75,28 +77,30 @@ H2D4B lda a1l1,x
|
||||
plp and status.
|
||||
rts
|
||||
|
||||
mainwrt sta SETWRITEAUX write to alt 48K
|
||||
mainwrt sta IO.SETWRITEAUX write to alt 48K
|
||||
ldy #$00
|
||||
|
||||
H2D6A lda (A1L),y pointers set in card by 'setptr'
|
||||
sta (A4L),y
|
||||
lda (A2L),y
|
||||
sta (A3L),y
|
||||
H2D6A lda (ZP.A1L),y pointers set in card by 'setptr'
|
||||
sta (ZP.A4L),y
|
||||
lda (ZP.A2L),y
|
||||
sta (ZP.A3L),y
|
||||
dey
|
||||
bne H2D6A
|
||||
|
||||
sta CLRWRITEAUX write to main 48K.
|
||||
sta IO.CLRWRITEAUX write to main 48K.
|
||||
lda #donewrt done writing card
|
||||
sta passit
|
||||
lda /donewrt
|
||||
jmp gocard
|
||||
*--------------------------------------
|
||||
RAM.LEN .EQ *-RAM.START
|
||||
|
||||
.DUMMY
|
||||
sp1 .HS 0000
|
||||
a1l1 .BS 13 13 bytes of storage
|
||||
a1l1 .BS 13 13 bytes of storage
|
||||
.ED
|
||||
*--------------------------------------
|
||||
.EP
|
||||
*--------------------------------------
|
||||
RAM.LEN .EQ *-RAM.START
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE usr/src/prodos.fx/prodos.s.ram
|
||||
|
@ -1,12 +1,15 @@
|
||||
NEW
|
||||
AUTO 3,1
|
||||
* object code = ram_0
|
||||
*--------------------------------------
|
||||
RAMX.DBuf .EQ $0C00
|
||||
RAMX.vblock1 .EQ $0E00 ramdisk directory block
|
||||
*--------------------------------------
|
||||
* /RAM driver (aux bank portion)
|
||||
* this code is packed into $200 length with no room for expansion !!
|
||||
* (see note at end of this obj)
|
||||
|
||||
* after the main /RAM routine has determined that the command is ok and the
|
||||
* block to be read/written is within range, it transfers control to this
|
||||
* block to be read/written is within range, it transfers control to this
|
||||
* aux /RAM routine which remaps the block requested as follows:
|
||||
* request blocks 0,1: invalid
|
||||
* 2: returns VDIR (card block 3)
|
||||
@ -15,13 +18,16 @@ NEW
|
||||
* $05-$5F: returns card blocks $05-$5F
|
||||
* $60-$67: returns blocks $68-$7F in bank 1 of language card
|
||||
* $68-$7F: returns blocks $68-$7F in bank 2 of language card
|
||||
*--------------------------------------
|
||||
RAMX.START .PH RAMX
|
||||
|
||||
RAMX.START lda RD80STORE read 80 store
|
||||
RAMX.START1 lda IO.RD80STORE read 80 store
|
||||
pha save for later
|
||||
sta CLR80STORE turn off 80 store
|
||||
sta IO.CLR80STORE turn off 80 store
|
||||
|
||||
ldx #$04 move the parameters for use:
|
||||
|
||||
L5109 lda A4L,x cmd, unit, bufptr and block (lo)
|
||||
L5109 lda ZP.CMDNUM,x cmd, unit, bufptr and block (lo)
|
||||
sta tcmd,x -> tcmd, tunit, R2L, R2H, R01
|
||||
dex
|
||||
bpl L5109
|
||||
@ -29,13 +35,13 @@ L5109 lda A4L,x cmd, unit, bufptr and block (lo)
|
||||
and formatflg format the volume first time
|
||||
bne L514F thru, or when requested.
|
||||
|
||||
ldx bloknml save R01 during format.
|
||||
lda /vblock1 block to be cleared.
|
||||
ldx ZP.BLKNUM save R01 during format.
|
||||
lda /RAMX.vblock1 block to be cleared.
|
||||
jsr clrbuf1 clears all buffers.
|
||||
ldy #$03 format volume in 2 chunks.
|
||||
|
||||
L511F lda VDIR,y
|
||||
sta vblock1+4,y
|
||||
sta RAMX.vblock1+4,y
|
||||
dey
|
||||
bpl L511F
|
||||
|
||||
@ -52,7 +58,7 @@ L5130 sta BITMAP,y
|
||||
ldy #$07 do other chunk
|
||||
|
||||
L513B lda access,y
|
||||
sta vblock1+34,y
|
||||
sta RAMX.vblock1+34,y
|
||||
dey
|
||||
bpl L513B
|
||||
|
||||
@ -93,29 +99,29 @@ lcrd txa get R1 back
|
||||
ora #$10 in secondary bank.
|
||||
bne L5179 branch always.
|
||||
|
||||
L5173 sta RRAMWRAMBNK2 turn on main $D000
|
||||
sta RRAMWRAMBNK2
|
||||
L5173 sta IO.RRAMWRAMBNK2 turn on main $D000
|
||||
sta IO.RRAMWRAMBNK2
|
||||
|
||||
L5179 sta R01 restore R1.
|
||||
lda R2H save R2 for later
|
||||
pha
|
||||
ldx R2L
|
||||
sta SETALTZP use alternate zero page/stack
|
||||
lda /dbuf set R2 to dbuf
|
||||
sta IO.SETALTZP use alternate zero page/stack
|
||||
lda /RAMX.DBuf set R2 to dbuf
|
||||
sta R2H
|
||||
lda #dbuf
|
||||
lda #RAMX.DBuf
|
||||
sta R2L
|
||||
jsr setptr set pointers
|
||||
tay A > 0 from setptr
|
||||
|
||||
L5194 lda (A1L),y move A1,A2 to A4,A3
|
||||
sta (A4L),y
|
||||
lda (A2L),y
|
||||
sta (A3L),y
|
||||
L5194 lda (ZP.A1L),y move A1,A2 to A4,A3
|
||||
sta (ZP.A4L),y
|
||||
lda (ZP.A2L),y
|
||||
sta (ZP.A3L),y
|
||||
dey
|
||||
bne L5194
|
||||
|
||||
sta CLRALTZP use main zero page/stack
|
||||
sta IO.CLRALTZP use main zero page/stack
|
||||
|
||||
L51A2 stx R2L
|
||||
pla restore R2
|
||||
@ -123,8 +129,8 @@ L51A2 stx R2L
|
||||
plp get direction.
|
||||
L51AA bcs L51B5 write, done with move.
|
||||
|
||||
sta RRAMWRAMBNK1 switch in MLI part of LC
|
||||
sta RRAMWRAMBNK1
|
||||
sta IO.RRAMWRAMBNK1 switch in MLI part of LC
|
||||
sta IO.RRAMWRAMBNK1
|
||||
jsr blockdo0 read, transfer dbuf to main
|
||||
|
||||
L51B5 jmp exitcard
|
||||
@ -138,24 +144,24 @@ L51B8 jsr blockdo0 transfer main to dbuf.
|
||||
* language card, so the language card is always switched in. if cmd is 2, a
|
||||
* write is done (R2->R1); if cmd is 1, a read is done (R1->R2).
|
||||
|
||||
blockdo0 lda /dbuf set up R1 = dbuf
|
||||
blockdo0 lda /RAMX.DBuf set up R1 = dbuf
|
||||
|
||||
blockdo1 sta R01
|
||||
|
||||
blockdo jsr setptr set pointers.
|
||||
bcs L51DB it's a write.
|
||||
|
||||
sta CLRWRITEAUX transfer buffer directly to main.
|
||||
sta IO.CLRWRITEAUX transfer buffer directly to main.
|
||||
tay 0 left from setptr.
|
||||
|
||||
L51CC lda (A1L),y transfer A1,A2 to A4,A3
|
||||
sta (A4L),y
|
||||
lda (A2L),y
|
||||
sta (A3L),y
|
||||
L51CC lda (ZP.A1L),y transfer A1,A2 to A4,A3
|
||||
sta (ZP.A4L),y
|
||||
lda (ZP.A2L),y
|
||||
sta (ZP.A3L),y
|
||||
dey
|
||||
bne L51CC
|
||||
|
||||
sta SETWRITEAUX back the way it was.
|
||||
sta IO.SETWRITEAUX back the way it was.
|
||||
|
||||
donewrt rts mainwrt returns here
|
||||
|
||||
@ -171,34 +177,34 @@ setptr lda tcmd is it read or write ?
|
||||
bcs L5208 taken if write.
|
||||
|
||||
lda R2H destination page
|
||||
sta A4L+1
|
||||
sta A3L+1
|
||||
sta ZP.A4L+1
|
||||
sta ZP.A3L+1
|
||||
lda R2L
|
||||
sta A4L
|
||||
sta A3L
|
||||
sta ZP.A4L
|
||||
sta ZP.A3L
|
||||
lda R01 source page
|
||||
sta A1L+1
|
||||
sta A2L+1
|
||||
sta ZP.A1L+1
|
||||
sta ZP.A2L+1
|
||||
lda #$00 source page aligned
|
||||
sta A1L
|
||||
sta A2L
|
||||
sta ZP.A1L
|
||||
sta ZP.A2L
|
||||
beq L5223
|
||||
|
||||
L5208 lda R2H source page
|
||||
sta A1L+1
|
||||
sta A2L+1
|
||||
sta ZP.A1L+1
|
||||
sta ZP.A2L+1
|
||||
lda R2L
|
||||
sta A1L
|
||||
sta A2L
|
||||
sta ZP.A1L
|
||||
sta ZP.A2L
|
||||
lda R01 destination page
|
||||
sta A4L+1
|
||||
sta A3L+1
|
||||
sta ZP.A4L+1
|
||||
sta ZP.A3L+1
|
||||
lda #$00 destination page aligned
|
||||
sta A4L
|
||||
sta A3L
|
||||
sta ZP.A4L
|
||||
sta ZP.A3L
|
||||
|
||||
L5223 inc A2L+1
|
||||
inc A3L+1
|
||||
L5223 inc ZP.A2L+1
|
||||
inc ZP.A3L+1
|
||||
rts
|
||||
|
||||
* tzip is called if blocks 0,1,4,5 are requested.
|
||||
@ -211,15 +217,15 @@ tzip jsr clrbuf0 fill dbuf with 0's
|
||||
* clrbuf fills the buffer indicated by R01 to 0's.
|
||||
* should only be called on a read or format.
|
||||
|
||||
clrbuf0 lda /dbuf dbuf is temp buffer.
|
||||
clrbuf0 lda /RAMX.DBuf dbuf is temp buffer.
|
||||
|
||||
clrbuf1 sta R01 assign to block.
|
||||
|
||||
clrbuf2 jsr setptr set pointers
|
||||
tay acc = 0
|
||||
|
||||
L523A sta (A1L),y
|
||||
sta (A2L),y
|
||||
L523A sta (ZP.A1L),y
|
||||
sta (ZP.A2L),y
|
||||
dey
|
||||
bne L523A
|
||||
|
||||
@ -239,7 +245,7 @@ L524A cmp #$0F if any page < $F (block 8) requested,
|
||||
bcc tzip it is invalid.
|
||||
|
||||
ldx #$00 x = # of iterations.
|
||||
lda bloknml use true block #.
|
||||
lda ZP.BLKNUM use true block #.
|
||||
cmp #$5D beyond 8k blocks ?
|
||||
bcc L525B no, do normal
|
||||
|
||||
@ -302,7 +308,7 @@ times2 asl acc = 2 * acc
|
||||
* 16 bytes long; the rest of the block is synthesized. the temporary buffer
|
||||
* at $800 is used to build/read a full size bitmap block.
|
||||
|
||||
tbmap lda /dbuf use temp buffer as block
|
||||
tbmap lda /RAMX.DBuf use temp buffer as block
|
||||
sta R01
|
||||
jsr setptr set pointers, test read/write.
|
||||
bcs L52A9 branch if it's write.
|
||||
@ -311,7 +317,7 @@ tbmap lda /dbuf use temp buffer as block
|
||||
ldy #$0F put real bitmap there
|
||||
|
||||
L529B lda BITMAP,y
|
||||
sta (A1L),y
|
||||
sta (ZP.A1L),y
|
||||
dey
|
||||
bpl L529B
|
||||
|
||||
@ -322,7 +328,7 @@ L52A9 jsr blockdo move user buf to temp buf
|
||||
jsr setptr
|
||||
ldy #$0F move temp buf to bitmap.
|
||||
|
||||
L52B1 lda (A4L),y (pointer set by setptr)
|
||||
L52B1 lda (ZP.A4L),y (pointer set by setptr)
|
||||
sta BITMAP,y
|
||||
dey
|
||||
bpl L52B1
|
||||
@ -339,8 +345,10 @@ BITMAP .HS 00FFFFFF blocks 0-7 used
|
||||
.HS FFFFFFFF
|
||||
.HS FFFFFFFF
|
||||
.HS FFFFFFFE block 127 used (IRQV)
|
||||
|
||||
VDIR .HS F3 storage type = F, name length = 3
|
||||
.AS "RAM"
|
||||
|
||||
access .DA #$C3 destroy, rename, read enabled
|
||||
.HS 27 entry length
|
||||
.HS 0D
|
||||
@ -348,24 +356,28 @@ access .DA #$C3 destroy, rename, read enabled
|
||||
.HS 0300 block 3
|
||||
.DA #128 128 blocks
|
||||
|
||||
exitcard lda RRAMWRAMBNK1 restore language card
|
||||
lda RRAMWRAMBNK1
|
||||
exitcard lda IO.RRAMWRAMBNK1 restore language card
|
||||
lda IO.RRAMWRAMBNK1
|
||||
pla get 80store
|
||||
bpl L52EA 80store wasn't on
|
||||
|
||||
sta SET80STORE enable 80store
|
||||
sta IO.SET80STORE enable 80store
|
||||
L52EA jmp bypass jump around passit
|
||||
|
||||
passit .HS 0000
|
||||
|
||||
bypass lda #noerr set up return to noerr
|
||||
sta passit
|
||||
lda /noerr
|
||||
ex1 sta passit+1 also used by blockwrite
|
||||
clc transfer card to main
|
||||
clv use standard zeropage/stack
|
||||
jmp xfer jmp back from language card.
|
||||
jmp ROM.XFER jmp back from language card.
|
||||
*--------------------------------------
|
||||
.EP
|
||||
*--------------------------------------
|
||||
RAMX.LEN .EQ *-RAMX.START
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE usr/src/prodos.fx/prodos.s.ramx
|
||||
LOAD usr/src/prodos.fx/prodos.s
|
||||
|
@ -19,8 +19,10 @@ SEL1.DirBlk .EQ $1C00 512b
|
||||
SEL1.filetypes .EQ $1F00
|
||||
SEL1.Filenames .EQ $2000
|
||||
*--------------------------------------
|
||||
SEL1.START cld
|
||||
bit RROMBNK2 read ROM
|
||||
SEL1.START .PH $1000
|
||||
|
||||
SEL1.START1 cld
|
||||
bit IO.RROMBNK2 read ROM
|
||||
|
||||
lda #$A0
|
||||
jsr $C300 initialize 80 column text card
|
||||
@ -32,11 +34,11 @@ SEL1.START cld
|
||||
|
||||
stz SEL1.BSPathBuf
|
||||
*--------------------------------------
|
||||
ldx DEVCNT
|
||||
ldx GP.DEVCNT
|
||||
|
||||
.1 lda DEVLST,x
|
||||
.1 lda GP.DEVLST,x
|
||||
and #$F0
|
||||
cmp DEVNUM
|
||||
cmp GP.DEVNUM
|
||||
beq SEL1.GetVol
|
||||
|
||||
dex
|
||||
@ -45,16 +47,16 @@ SEL1.START cld
|
||||
SEL1.NextVol ldx VolListPtr get device list pointer.
|
||||
bne .1
|
||||
|
||||
ldx DEVCNT get device count.
|
||||
ldx GP.DEVCNT get device count.
|
||||
inx
|
||||
|
||||
.1 dex
|
||||
lda DEVLST,x get unit number from list.
|
||||
lda GP.DEVLST,x get unit number from list.
|
||||
*--------------------------------------
|
||||
SEL1.GetVol stx VolListPtr
|
||||
sta SEL1.OnLineP+1 store unit number for online.
|
||||
jsr MLI
|
||||
.DA #MLIONLINE
|
||||
.DA #MLI.ONLINE
|
||||
.DA SEL1.OnLineP
|
||||
bcs SEL1.NextVol error check.
|
||||
|
||||
@ -73,14 +75,14 @@ SEL1.OpenDir stx SEL1.PathBuf save the name length
|
||||
sta SEL1.PathBuf,x after name.
|
||||
|
||||
jsr MLI
|
||||
.DA #MLIOPEN
|
||||
.DA #MLI.OPEN
|
||||
.DA SEL1.OpenP
|
||||
bcc SEL1.EnumDir good open.
|
||||
|
||||
lda bInSubDir trying to open root directory ?
|
||||
beq SEL1.NextVol yes, just move to next volume.
|
||||
|
||||
jsr bell1 no, generate bell tone
|
||||
jsr ROM.BELL1 no, generate bell tone
|
||||
jsr SEL1.FullPath.. and stay at same level.
|
||||
stx SEL1.PathBuf
|
||||
jmp SEL1.KeyLoop
|
||||
@ -98,7 +100,7 @@ SEL1.EnumDir stz filecount zero file count.
|
||||
sta SEL1.ReadP+5
|
||||
|
||||
SEL1.EnumBlk jsr MLI
|
||||
.DA #MLIREAD
|
||||
.DA #MLI.READ
|
||||
.DA SEL1.ReadP
|
||||
bcs SEL1.CloseDir
|
||||
|
||||
@ -147,14 +149,14 @@ SEL1.EnumDirNext
|
||||
bne SEL1.EnumDirNext
|
||||
*--------------------------------------
|
||||
SEL1.CloseDir jsr MLI close directory file
|
||||
.DA #MLICLOSE
|
||||
.DA #MLI.CLOSE
|
||||
.DA SEL1.CloseP
|
||||
|
||||
jsr settxt use full screen for windows
|
||||
jsr home
|
||||
jsr ROM.SETTXT use full screen for windows
|
||||
jsr ROM.HOME
|
||||
|
||||
lda #$17 cursor at bottom of screen.
|
||||
jsr TABV set vertical position.
|
||||
jsr ROM.TABV set vertical position.
|
||||
|
||||
ldy #SEL1.RetIcon-SEL1.Strings
|
||||
jsr SEL1.IconOutY
|
||||
@ -163,7 +165,7 @@ SEL1.CloseDir jsr MLI close directory file
|
||||
jsr SEL1.MsgOutY
|
||||
|
||||
lda #$99
|
||||
jsr cout cursor to upper/left.
|
||||
jsr ROM.COUT cursor to upper/left.
|
||||
|
||||
ldx #$00
|
||||
ldy SEL1.PathBuf
|
||||
@ -186,10 +188,10 @@ SEL1.CloseDir jsr MLI close directory file
|
||||
ldx #20 limit to 20 files on the screen.
|
||||
|
||||
.3 lda #2 set window dimensions
|
||||
sta wndtop
|
||||
sta ZP.WNDTOP
|
||||
|
||||
lda #22
|
||||
sta wndbot
|
||||
sta ZP.WNDBOT
|
||||
|
||||
.4 phx
|
||||
|
||||
@ -208,12 +210,12 @@ SEL1.Up jsr SEL1.PrintFN print old name in normal.
|
||||
beq L5EAA if already at the top name
|
||||
|
||||
dec SelectedIndex
|
||||
lda cv current cursor line.
|
||||
cmp #$02 at top line of window ?
|
||||
lda ZP.CV current cursor line.
|
||||
cmp #2 at top line of window ?
|
||||
bne L5EAA no, move up normally.
|
||||
|
||||
dec ScrollIndex fix offset index
|
||||
lda #$16 else sroll windows down a line.
|
||||
lda #22 else sroll windows down a line.
|
||||
bne SEL1.Scroll branch always.
|
||||
*--------------------------------------
|
||||
SEL1.Down jsr SEL1.PrintFN print old name in normal.
|
||||
@ -223,21 +225,21 @@ SEL1.Down jsr SEL1.PrintFN print old name in normal.
|
||||
bcs L5EAA if already at last filename
|
||||
|
||||
stx SelectedIndex
|
||||
lda cv current cursor line.
|
||||
cmp #$15 at bottom line of window ?
|
||||
lda ZP.CV current cursor line.
|
||||
cmp #21 at bottom line of window ?
|
||||
bne L5EAA no, move cursor normally.
|
||||
|
||||
inc ScrollIndex update offset index
|
||||
lda #$17 else scroll up a line.
|
||||
lda #23 else scroll up a line.
|
||||
|
||||
SEL1.Scroll jsr cout
|
||||
SEL1.Scroll jsr ROM.COUT
|
||||
|
||||
L5EAA jsr SEL1.PrintFNInv output last filename.
|
||||
*--------------------------------------
|
||||
SEL1.KeyLoop lda kbd get keyboard input.
|
||||
SEL1.KeyLoop lda IO.KBD get keyboard input.
|
||||
bpl SEL1.KeyLoop loop until key pressed.
|
||||
|
||||
sta KBDSTROBE clear strobe.
|
||||
sta IO.KBDSTROBE clear strobe.
|
||||
|
||||
ldx filecount are any files displayed ?
|
||||
beq .1 no, don't accept arrow keys or return.
|
||||
@ -289,7 +291,7 @@ SEL1.CR ldy SelectedIndex
|
||||
bcs L5EED
|
||||
|
||||
jsr MLI open file
|
||||
.DA #MLIOPEN
|
||||
.DA #MLI.OPEN
|
||||
.DA SEL1.OpenP
|
||||
bcs L5EED
|
||||
|
||||
@ -300,11 +302,11 @@ SEL1.CR ldy SelectedIndex
|
||||
sta SEL1.ReadP+5 max $9F00
|
||||
|
||||
jsr MLI
|
||||
.DA #MLIREAD
|
||||
.DA #MLI.READ
|
||||
.DA SEL1.ReadP
|
||||
php save possible error.
|
||||
jsr MLI close file. ignore any error from close
|
||||
.DA #MLICLOSE
|
||||
.DA #MLI.CLOSE
|
||||
.DA SEL1.CloseP
|
||||
plp restore status from read.
|
||||
bcs L5EED if any errors.
|
||||
@ -319,10 +321,10 @@ SEL1.CR ldy SelectedIndex
|
||||
dex
|
||||
bpl .7
|
||||
|
||||
.8 jsr settxt reset to full window.
|
||||
jsr home makes for no flash.
|
||||
.8 jsr ROM.SETTXT reset to full window.
|
||||
jsr ROM.HOME makes for no flash.
|
||||
lda #$95 ctrl-u
|
||||
jsr cout turn off 80 columns.
|
||||
jsr ROM.COUT turn off 80 columns.
|
||||
|
||||
jmp $2000 execute selected system file.
|
||||
*--------------------------------------
|
||||
@ -337,12 +339,12 @@ SEL1.PrintFNInv lda #$0F
|
||||
sbc ScrollIndex calculate line # to display name
|
||||
inc
|
||||
inc
|
||||
jsr TABV set vertical position.
|
||||
jsr ROM.TABV set vertical position.
|
||||
|
||||
lda #$01
|
||||
sta ch80col
|
||||
sta ROM.OURCH
|
||||
|
||||
lda SEL1.filetypes,x get filetype (x is unchanged by tabv).
|
||||
lda SEL1.filetypes,x get filetype (x is unchanged by ROM.TABV).
|
||||
jsr SEL1.CheckType
|
||||
bmi .1
|
||||
|
||||
@ -353,10 +355,10 @@ SEL1.PrintFNInv lda #$0F
|
||||
.1 jsr SEL1.SetFNPtrX calc name location.
|
||||
|
||||
lda #$05
|
||||
sta ch80col
|
||||
sta ROM.OURCH
|
||||
|
||||
pla normal / inverse
|
||||
jsr cout
|
||||
jsr ROM.COUT
|
||||
|
||||
jsr SEL1.SPOut output a space.
|
||||
|
||||
@ -375,11 +377,11 @@ SEL1.PrintFNInv lda #$0F
|
||||
* bne .3
|
||||
|
||||
jsr SEL1.SPOut
|
||||
jmp setnorm set normal text mode.
|
||||
jmp ROM.SETNORM set normal text mode.
|
||||
*--------------------------------------
|
||||
SEL1.SetFullPath
|
||||
jsr MLI
|
||||
.DA #MLISETPREFIX
|
||||
.DA #MLI.SETPREFIX
|
||||
.DA SEL1.SetPrefixP
|
||||
bcs .9
|
||||
|
||||
@ -456,7 +458,7 @@ SEL1.IconOutY phx
|
||||
|
||||
.1 lda SEL1.MouseText,x
|
||||
|
||||
jsr cout
|
||||
jsr ROM.COUT
|
||||
inx
|
||||
cpx #2
|
||||
bne .2
|
||||
@ -481,7 +483,7 @@ SEL1.MsgOutY lda SEL1.Strings,y
|
||||
SEL1.SPOut lda #' ' SPACE
|
||||
|
||||
SEL1.COut ora #$80 set high bit.
|
||||
jmp cout output to screen.
|
||||
jmp ROM.COUT output to screen.
|
||||
*--------------------------------------
|
||||
* data area
|
||||
*--------------------------------------
|
||||
@ -529,7 +531,9 @@ SEL1.SetPrefixP .DA #1 Param Count
|
||||
SEL1.ReadP .DA #4 Param Count
|
||||
.HS 01 reference number
|
||||
*--------------------------------------
|
||||
.LIST ON
|
||||
.EP
|
||||
*--------------------------------------
|
||||
* .LIST ON
|
||||
SEL1.LEN .EQ *-SEL1.START
|
||||
.LIST OFF
|
||||
*--------------------------------------
|
||||
|
@ -1,7 +1,13 @@
|
||||
NEW
|
||||
AUTO 3,1
|
||||
* object code = sel_2
|
||||
*
|
||||
*--------------------------------------
|
||||
SEL2.PBuf .EQ $0280 prefix buffer
|
||||
SEL2.VBuf .EQ $0F00 volume buffer
|
||||
SEL2.FBuf .EQ $1C00 open file buffer (selector)
|
||||
*--------------------------------------
|
||||
SEL2.SYSLoad .EQ $2000 .SYS file load address
|
||||
|
||||
*--------------------------------------
|
||||
* Alternate program selector segment for P8 when used in conjunction with
|
||||
* gs/os. This code is used in place of the standard P8 interactive program
|
||||
* selector when P8 is started up by GQuit. It is called when passing control
|
||||
@ -12,12 +18,10 @@ NEW
|
||||
* the freshly loaded app. This code does NOT start with a CLD instruction
|
||||
* (as other replacement quit code is supposed to do) because GQuit checks
|
||||
* this to see if this version of quit code is available.
|
||||
*--------------------------------------
|
||||
SEL2.START .PH $1000
|
||||
|
||||
op_buf .EQ $1C00 open file buffer (selector)
|
||||
|
||||
|
||||
SEL2.START
|
||||
GQdisp lda RRAMWRAMBNK1 read/write LC bank 1
|
||||
SEL2.START1 lda IO.RRAMWRAMBNK1 read/write LC bank 1
|
||||
clc
|
||||
xce 16 bit native mode.
|
||||
jmp P8QUIT go to GQuit.
|
||||
@ -44,7 +48,7 @@ GQdisp lda RRAMWRAMBNK1 read/write LC bank 1
|
||||
>SHORTM 8 bit accumulator
|
||||
|
||||
pha save the switch status.
|
||||
ldx ##inbuf point to passed prefix.
|
||||
ldx ##ROM.INBUF point to passed prefix.
|
||||
jsr copyvol copy the name into the buffer.
|
||||
pla retrieve the switch status
|
||||
|
||||
@ -59,9 +63,10 @@ GQdisp lda RRAMWRAMBNK1 read/write LC bank 1
|
||||
* prefix is passed at $00/0200 by GQuit.
|
||||
|
||||
L6020 jsr MLI set prefix
|
||||
.DA #$C6
|
||||
.DA #MLI.SETPREFIX
|
||||
.DA pfxparms
|
||||
bcc L602D if prefix ok.
|
||||
|
||||
jsr gqerror error handler.
|
||||
bra L6020 try again
|
||||
|
||||
@ -69,19 +74,22 @@ L6020 jsr MLI set prefix
|
||||
|
||||
L602D xce native mode (carry clear)
|
||||
>LONGX 16 bit regs, 8 bit acc.
|
||||
lda pbuf+1 is the application name
|
||||
lda SEL2.PBuf+1 is the application name
|
||||
cmp #$2F a complete pathname ?
|
||||
bne L603D no, use prefix as volume name
|
||||
ldx ##pbuf else use the application name.
|
||||
|
||||
ldx ##SEL2.PBuf else use the application name.
|
||||
jsr copyvol copy the volume name to buffer.
|
||||
L603D sec back to emulation mode.
|
||||
xce
|
||||
L603F jsr MLI open the application file
|
||||
.DA #$C8
|
||||
.DA #MLI.OPEN
|
||||
.DA opnparms
|
||||
bcc L604C if open ok.
|
||||
|
||||
jsr gqerror handle error.
|
||||
bra L603F try again.
|
||||
|
||||
L604C lda oprefnum copy ref number to parameter lists
|
||||
sta eofrefn
|
||||
sta rdrefnum
|
||||
@ -90,9 +98,10 @@ L604C lda oprefnum copy ref number to parameter lists
|
||||
* do a geteof call for how many bytes to read
|
||||
|
||||
L6058 jsr MLI get eof
|
||||
.DA #$D1
|
||||
.DA #MLI.GETEOF
|
||||
.DA eofparms
|
||||
bcc L6065 eof ok.
|
||||
|
||||
jsr gqerror handle error.
|
||||
bra L6058 try again.
|
||||
|
||||
@ -102,32 +111,41 @@ L6065 lda eofval
|
||||
sta rdcount
|
||||
lda eofval+1
|
||||
sta rdcount+1
|
||||
|
||||
L6071 jsr MLI read
|
||||
.DA #$CA
|
||||
.DA #MLI.READ
|
||||
.DA readparm
|
||||
bcc L607E read ok
|
||||
|
||||
jsr gqerror
|
||||
bra L6071
|
||||
|
||||
L607E jsr MLI close
|
||||
.DA #$CC
|
||||
.DA #MLI.CLOSE
|
||||
.DA closeprm
|
||||
bcc L608B close ok
|
||||
|
||||
jsr gqerror
|
||||
bra L607E
|
||||
|
||||
L608B jsr dolaunch check for possible 2nd pathname.
|
||||
bne L6099 if none then run program
|
||||
|
||||
jsr ckfordrv else make sure the file is online.
|
||||
bcc L6099 if so then run the program.
|
||||
|
||||
lda #$45 volume not found error.
|
||||
bra L60AB
|
||||
L6099 lda RROMBNK2 enable ROM
|
||||
jmp sysentry execute the system application
|
||||
|
||||
L6099 lda IO.RROMBNK2 enable ROM
|
||||
jmp SEL2.SYSLoad execute the system application
|
||||
|
||||
gqerror clc
|
||||
xce 16 bit native mode
|
||||
>LONGMX
|
||||
jsr mountvol mount volume.
|
||||
bcs L60AB if error.
|
||||
|
||||
sec back to emulation mode.
|
||||
xce
|
||||
rts
|
||||
@ -158,17 +176,17 @@ L60AB clc native mode
|
||||
sec emulation mode
|
||||
xce
|
||||
jsr MLI quit back to GQuit
|
||||
.DA #$65
|
||||
.DA #MLI.QUIT
|
||||
.DA quitparms
|
||||
|
||||
* p8 mount volume
|
||||
*
|
||||
* on entry: volbuf = name of volume to mount.
|
||||
* on entry: SEL2.VBuf = name of volume to mount.
|
||||
* on exit: carry clear if mount volume displayed and 'return' was pressed.
|
||||
* carry set if no window displayed or if had window and 'esc' pressed.
|
||||
|
||||
mountvol ldy ##$0000 volbuf>>16
|
||||
ldx ##volbuf set up pointer to volume name.
|
||||
mountvol ldy ##$0000 SEL2.VBuf>>16
|
||||
ldx ##SEL2.VBuf set up pointer to volume name.
|
||||
|
||||
* if error is 'volume not found' or 'no disk in drive' then display the
|
||||
* Mount Volume window, otherwise return with carry set.
|
||||
@ -176,8 +194,10 @@ mountvol ldy ##$0000 volbuf>>16
|
||||
and ##$00FF mask just in case.
|
||||
cmp ##$0045 volume not found ?
|
||||
beq L6101 yes
|
||||
|
||||
cmp ##$002F no disk in drive ?
|
||||
beq L6101 yes
|
||||
|
||||
sec indicate error not handled.
|
||||
rts return with error code still in acc.
|
||||
|
||||
@ -212,9 +232,11 @@ L6101 pha save error code in case esc pressed.
|
||||
plx
|
||||
cmp ##$0001 which button was pressed ?
|
||||
bne L613C if Escape pressed.
|
||||
|
||||
clc indicate Return was pressed.
|
||||
pla pull original error code off stack.
|
||||
rts return with carry clear.
|
||||
|
||||
L613C sec indicate Escape was pressed.
|
||||
pla restore error code.
|
||||
rts return with carry set.
|
||||
@ -222,22 +244,24 @@ L613C sec indicate Escape was pressed.
|
||||
* copy the volume name from the given pathname to the volume name buffer.
|
||||
*
|
||||
* inputs: x = length byte of complete pathname containing volume name.
|
||||
* output: volume name is stored in volbuf.
|
||||
* output: volume name is stored in SEL2.VBuf.
|
||||
|
||||
copyvol lda >1,x get the first slash
|
||||
sta volbuf+1
|
||||
sta SEL2.VBuf+1
|
||||
ldy ##$0002 initialize the length count.
|
||||
|
||||
L6148 lda >2,x now copy the volume name up to
|
||||
cmp #$2F the separating slash.
|
||||
beq L6156
|
||||
sta volbuf,y
|
||||
|
||||
sta SEL2.VBuf,y
|
||||
inx
|
||||
iny
|
||||
bra L6148
|
||||
|
||||
L6156 dey fix character count.
|
||||
tya length.
|
||||
sta volbuf store the resultant string length.
|
||||
sta SEL2.VBuf store the resultant string length.
|
||||
rts
|
||||
|
||||
* translate a filename message from the message center to the currently
|
||||
@ -246,14 +270,17 @@ L6156 dey fix character count.
|
||||
* on exit, the z-flag is set if a filename was correctly passed to the
|
||||
* application elst the z-flag is clear if it couldn't be done.
|
||||
|
||||
dolaunch lda sysentry does the app start with a jump ?
|
||||
dolaunch lda SEL2.SYSLoad does the app start with a jump ?
|
||||
cmp #$4C
|
||||
bne L616F no, doesn't follow the convention.
|
||||
|
||||
lda #$EE check for the signature bytes.
|
||||
cmp sysentry+3
|
||||
cmp SEL2.SYSLoad+3
|
||||
bne L616F 1st one doesn't match, skip it.
|
||||
cmp sysentry+4
|
||||
|
||||
cmp SEL2.SYSLoad+4
|
||||
beq L6170 both match, go get a filename message.
|
||||
|
||||
L616F rts just return to launch the app.
|
||||
|
||||
L6170 lda #$FF put flag conditioning value on
|
||||
@ -285,6 +312,7 @@ L6170 lda #$FF put flag conditioning value on
|
||||
pha (still in acc and x regs)
|
||||
>IIGS MessageCenter
|
||||
bcs L6203 branch if no message.
|
||||
|
||||
pha leave 4 bytes free on stack
|
||||
pha (will be used as a direct page pointer)
|
||||
tsc get the stack pointer.
|
||||
@ -299,28 +327,34 @@ L6170 lda #$FF put flag conditioning value on
|
||||
ldy ##$0006 get the message command.
|
||||
lda [$00],y
|
||||
bne bad_msg if print, then skip it.
|
||||
|
||||
lda $00 adjust pointer to filename string.
|
||||
clc
|
||||
adc ##$0008
|
||||
sta $00
|
||||
bcc L61D1
|
||||
|
||||
inc $02
|
||||
L61D1 lda [$00] get the length of the string.
|
||||
and ##$00FF mask off high (leaving just the length)
|
||||
>SHORTM 8 bit accumulator
|
||||
cmp sysentry+5 check against length of app buffer.
|
||||
cmp SEL2.SYSLoad+5 check against length of app buffer.
|
||||
beq L61DF if equal then continue with move.
|
||||
|
||||
bcs bad_msg if too long then bad message.
|
||||
L61DF tay string length.
|
||||
|
||||
L61DF tay string length.
|
||||
|
||||
L61E0 lda [$00],y get a character.
|
||||
sta sysentry+6,y store it in the app's filename buffer
|
||||
sta inbuf,y and in prefix buffer.
|
||||
sta SEL2.SYSLoad+6,y store it in the app's filename buffer
|
||||
sta ROM.INBUF,y and in prefix buffer.
|
||||
dey
|
||||
bpl L61E0
|
||||
|
||||
lda #$00 change flag conditioning value on stack
|
||||
sta $0D,s to indicate a filename is passed.
|
||||
bad_msg
|
||||
>LONGM 16-bit acc.
|
||||
|
||||
bad_msg >LONGM 16-bit acc.
|
||||
pld restore direct register.
|
||||
pla fix stack because handle and userid
|
||||
pla still on stack.
|
||||
@ -329,26 +363,34 @@ bad_msg
|
||||
pha garbage handle (not used).
|
||||
pha
|
||||
>IIGS MessageCenter go delete the message.
|
||||
|
||||
L6203 >IIGS DisposeHandle throw away message (handle is on stack)
|
||||
|
||||
L620A >IIGS MMShutDown shutdown the memory manager (userid is
|
||||
sec on stack).
|
||||
xce back to emulation mode.
|
||||
|
||||
pla condition z-flag with value on stack.
|
||||
bne L6231 then done.
|
||||
ldx inbuf get length of pathname.
|
||||
lda #$2F look for slash.
|
||||
L621B cmp inbuf,x
|
||||
|
||||
ldx ROM.INBUF get length of pathname.
|
||||
lda #$2F look for slash.
|
||||
|
||||
L621B cmp ROM.INBUF,x
|
||||
beq L6225 when found, set prefix.
|
||||
|
||||
dex
|
||||
bne L621B
|
||||
|
||||
bra L6231 if no slash, just skip it.
|
||||
|
||||
L6225 dex don't include trailing slash.
|
||||
stx inbuf set new length.
|
||||
stx ROM.INBUF set new length.
|
||||
jsr MLI set the P8 prefix.
|
||||
.DA #$C6
|
||||
.DA #MLI.SETPREFIX
|
||||
.DA pfxparms
|
||||
lda #$00 set z-flag
|
||||
|
||||
L6231 rts and go launch the app.
|
||||
|
||||
* check for disk volume
|
||||
@ -360,49 +402,59 @@ L6231 rts and go launch the app.
|
||||
ckfordrv clc native mode
|
||||
xce
|
||||
>LONGX 16-bit regs, 8-bit acc.
|
||||
ldx ##sysentry+6 point to pathname buffer.
|
||||
ldx ##SEL2.SYSLoad+6 point to pathname buffer.
|
||||
jsr copyvol copy volume name to pathname buffer.
|
||||
|
||||
.1 sec emulation mode.
|
||||
xce
|
||||
jsr MLI get info on the volume.
|
||||
.DA #$C4
|
||||
.DA #MLI.GFINFO
|
||||
.DA gfiparms
|
||||
bcc .2 branch if volume found,
|
||||
|
||||
clc (native mode)
|
||||
xce
|
||||
>LONGMX
|
||||
jsr mountvol else ask user to mount the volume.
|
||||
jsr mountvol else ask user to mount the volume.
|
||||
bcc .1 if <return> pressed, then try again.
|
||||
|
||||
sec emulation mode.
|
||||
xce
|
||||
sec disk not found.
|
||||
|
||||
.2 rts
|
||||
|
||||
* Prodos 8 parameter lists
|
||||
|
||||
pfxparms .DA #01 one parm.
|
||||
.DA inbuf address of prefix.
|
||||
pfxparms .DA #01 1 parm.
|
||||
.DA ROM.INBUF address of prefix.
|
||||
|
||||
opnparms .DA #3 3 parms.
|
||||
.DA pbuf pathname
|
||||
.DA op_buf i/o buffer
|
||||
.DA SEL2.PBuf pathname
|
||||
.DA SEL2.FBuf i/o buffer
|
||||
oprefnum .HS 00 reference #
|
||||
|
||||
eofparms .DA #02 2 parms
|
||||
eofrefn .HS 00 reference #
|
||||
eofval .HS 000000 3 byte eof value
|
||||
|
||||
readparm .DA #04 4 parms
|
||||
rdrefnum .HS 00 reference #
|
||||
.DA sysentry read into $2000 (bank 0).
|
||||
.DA SEL2.SYSLoad read into $2000 (bank 0).
|
||||
rdcount .HS 0000 # of bytes to read.
|
||||
.HS 0000 transfer count
|
||||
|
||||
closeprm .DA #1 1 parm
|
||||
closeref .HS 00 reference #
|
||||
|
||||
quitparms .DA #04 4 parms.
|
||||
.HS 00 quit back to launcher (GQuit)
|
||||
.HS 0000
|
||||
.HS 00
|
||||
.HS 0000
|
||||
|
||||
gfiparms .DA #$0A 10 parms
|
||||
.DA volbuf volume buffer
|
||||
.DA SEL2.VBuf volume buffer
|
||||
.DA #0 access
|
||||
.DA #0 file type
|
||||
.DA 0 aux type
|
||||
@ -438,7 +490,12 @@ button1 .DA #$0D
|
||||
button2 .DA #$0B
|
||||
.AS "Cancel: Esc"
|
||||
*--------------------------------------
|
||||
.EP
|
||||
*--------------------------------------
|
||||
* .LIST ON
|
||||
SEL2.LEN .EQ *-SEL2.START
|
||||
.LIST OFF
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE usr/src/prodos.fx/prodos.s.sel2
|
||||
LOAD usr/src/prodos.fx/prodos.s
|
||||
|
@ -8,7 +8,9 @@ clkmode .EQ $0538 clock mode
|
||||
rdtcp .EQ $C108 Thunderclock read entry
|
||||
wttcp .EQ $C10B Thunderclock write entry
|
||||
*--------------------------------------
|
||||
TCLK.START ldx TCLK.Cx2+2 clock slot = $C1.
|
||||
TCLK.START .PH CLK
|
||||
|
||||
ldx TCLK.Cx2+2 clock slot = $C1.
|
||||
|
||||
lda clkmode,x save current mode
|
||||
pha
|
||||
@ -22,17 +24,17 @@ TCLK.Cx2 jsr rdtcp read month, day of week, day of month
|
||||
ldx #$04 index for 5 values.
|
||||
ldy #$0C read minutes 1st, month last.
|
||||
|
||||
.1 lda inbuf,y convert values to binary.
|
||||
.1 lda ROM.INBUF,y convert values to binary.
|
||||
and #$07 no value > 5 decimal.
|
||||
sta pcl 'tens' place value
|
||||
sta ZP.PCL 'tens' place value
|
||||
asl multiply by 10
|
||||
asl
|
||||
adc pcl
|
||||
adc ZP.PCL
|
||||
asl
|
||||
adc inbuf+1,y add to ascii 'ones' place
|
||||
adc ROM.INBUF+1,y add to ascii 'ones' place
|
||||
sec and subtract out the ascii
|
||||
sbc #$B0
|
||||
sta pcl,x save converted value.
|
||||
sta ZP.PCL,x save converted value.
|
||||
dey index to next lowest value
|
||||
dey
|
||||
dey
|
||||
@ -44,8 +46,8 @@ TCLK.Cx2 jsr rdtcp read month, day of week, day of month
|
||||
ror
|
||||
ror
|
||||
ror high bit of month held in carry
|
||||
ora A1L
|
||||
sta p8date save low value of date.
|
||||
ora ZP.A1L
|
||||
sta GP.DATE save low value of date.
|
||||
php save high bit of month.
|
||||
and #$1F isolate day.
|
||||
adc tdays-1,y (y = month)
|
||||
@ -59,7 +61,7 @@ TCLK.Cx2 jsr rdtcp read month, day of week, day of month
|
||||
bcs .3 loop until < 0.
|
||||
|
||||
adc #$07 make it in the range of 0-6.
|
||||
sbc pch the delta provides years offset.
|
||||
sbc ZP.PCH the delta provides years offset.
|
||||
bcs .4 branch if positive
|
||||
|
||||
adc #$07 else make it positive again.
|
||||
@ -68,12 +70,12 @@ TCLK.Cx2 jsr rdtcp read month, day of week, day of month
|
||||
lda yradj,y look up year
|
||||
plp and combine it with hi bit of month
|
||||
rol
|
||||
sta p8date+1 P8 date
|
||||
sta GP.DATE+1 P8 date
|
||||
|
||||
lda A1L+1 hour
|
||||
sta p8time+1 P8 time
|
||||
lda A2L minute
|
||||
sta p8time
|
||||
lda ZP.A1L+1 hour
|
||||
sta GP.TIME+1 P8 time
|
||||
lda ZP.A2L minute
|
||||
sta GP.TIME
|
||||
|
||||
pla restore previous mode.
|
||||
ldx TCLK.Cx2+2 clock slot = $C1
|
||||
@ -111,7 +113,9 @@ yradj .DA #$18 Monday
|
||||
.DA #$19 Wednesday
|
||||
.DA #$18 Tuesday
|
||||
*--------------------------------------
|
||||
.LIST ON
|
||||
.EP
|
||||
*--------------------------------------
|
||||
* .LIST ON
|
||||
TCLK.LEN .EQ *-TCLK.START
|
||||
.LIST OFF
|
||||
*--------------------------------------
|
||||
|
@ -8,7 +8,9 @@ NEW
|
||||
XCLK.API.RTCBUF .EQ $2B0
|
||||
XCLK.API.RDCLK .EQ $D8F0
|
||||
*--------------------------------------
|
||||
XCLK.START php
|
||||
XCLK.START .PH CLK
|
||||
|
||||
XCLK.START1 php
|
||||
sei
|
||||
ldx #XCLK.START2xx.L-1
|
||||
|
||||
@ -22,21 +24,21 @@ XCLK.START php
|
||||
lda XCLK.API.RTCBUF+1
|
||||
and #%01111111 59
|
||||
jsr XCLK.BCD2BIN
|
||||
sta TIMELO
|
||||
sta GP.TIME
|
||||
* Hour
|
||||
lda XCLK.API.RTCBUF+2
|
||||
and #%00111111 23
|
||||
jsr XCLK.BCD2BIN
|
||||
sta TIMELO+1
|
||||
sta GP.TIME+1
|
||||
* Day
|
||||
lda XCLK.API.RTCBUF+4
|
||||
and #%00111111 31
|
||||
jsr XCLK.BCD2BIN
|
||||
sta DATELO
|
||||
sta GP.DATE
|
||||
* Year
|
||||
lda XCLK.API.RTCBUF+6 99
|
||||
jsr XCLK.BCD2BIN
|
||||
sta DATELO+1
|
||||
sta GP.DATE+1
|
||||
* Month
|
||||
lda XCLK.API.RTCBUF+5
|
||||
and #%00011111 12
|
||||
@ -46,8 +48,8 @@ XCLK.START php
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
tsb DATELO
|
||||
rol DATELO+1
|
||||
tsb GP.DATE
|
||||
rol GP.DATE+1
|
||||
|
||||
plp
|
||||
rts
|
||||
@ -55,35 +57,37 @@ XCLK.START php
|
||||
XCLK.BCD2BIN tax
|
||||
and #$F0
|
||||
lsr CC
|
||||
sta PCL temp location
|
||||
sta ZP.PCL temp location
|
||||
lsr CC
|
||||
lsr CC
|
||||
adc PCL
|
||||
sta PCL
|
||||
adc ZP.PCL
|
||||
sta ZP.PCL
|
||||
|
||||
txa
|
||||
* clc
|
||||
and #$0F
|
||||
adc PCL
|
||||
adc ZP.PCL
|
||||
|
||||
rts
|
||||
|
||||
XCLK.START2xx bit RROMBNK2
|
||||
XCLK.START2xx bit IO.RROMBNK2
|
||||
sta $C070
|
||||
bit $FACA
|
||||
bit $FACA
|
||||
bit $FAFE
|
||||
jsr XCLK.API.RDCLK
|
||||
bit $F851
|
||||
bit RRAMWRAMBNK1
|
||||
bit RRAMWRAMBNK1
|
||||
bit IO.RRAMWRAMBNK1
|
||||
bit IO.RRAMWRAMBNK1
|
||||
rts
|
||||
|
||||
XCLK.START2xx.L .EQ *-XCLK.START2xx
|
||||
*--------------------------------------
|
||||
XCLK.CODE2xx .EQ XCLK.API.RTCBUF-XCLK.START2xx.L
|
||||
*--------------------------------------
|
||||
.LIST ON
|
||||
.EP
|
||||
*--------------------------------------
|
||||
* .LIST ON
|
||||
XCLK.LEN .EQ *-XCLK.START
|
||||
.LIST OFF
|
||||
*--------------------------------------
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,6 +1,162 @@
|
||||
NEW
|
||||
AUTO 3,1
|
||||
*--------------------------------------
|
||||
entcalc jsr XDOS.ZPT.InitGBuf
|
||||
|
||||
ldx d_entnum on the entry #.
|
||||
|
||||
clc
|
||||
|
||||
.1 dex addr = XDOS.GBuf + ((d_entnum-1) * h_entln)
|
||||
beq crerr3 branch with carry clear = no errors.
|
||||
|
||||
jsr XDOS.ZPT.Next
|
||||
bcc .1
|
||||
|
||||
crerr3 rts carry set if error.
|
||||
*--------------------------------------
|
||||
drevise lda GP.DATE
|
||||
beq drevise1 if no clock, then don't mod date/time.
|
||||
|
||||
ldx #$03
|
||||
|
||||
modtime lda GP.DATE,x move last modification date/time
|
||||
sta d_moddt,x to entry being updated.
|
||||
dex
|
||||
bpl modtime
|
||||
|
||||
drevise1 lda bkbitflg (bit 5 = backup needed)
|
||||
tsb d_attr mark entry as backupable
|
||||
|
||||
lda d_dev get device # of directory
|
||||
sta GP.DEVNUM to be revised
|
||||
|
||||
lda d_entblk and address of directory block.
|
||||
ldx d_entblk+1
|
||||
|
||||
.DO LOWERCASE=1
|
||||
jsr XDOS.ReadGBufAXDir
|
||||
.ELSE
|
||||
jsr XDOS.ReadGBufAX read block into general purpose buffer
|
||||
.FIN
|
||||
bcs crerr3
|
||||
|
||||
jsr entcalc fix up ptr to entry location within XDOS.GBuf.
|
||||
|
||||
ldy h_entln now move 'd.' info to directory.
|
||||
dey
|
||||
|
||||
.1 lda d_stor,y
|
||||
sta (zpt),y
|
||||
dey
|
||||
bpl .1
|
||||
|
||||
lda d_head is the entry block same as
|
||||
cmp ZP.BLKNUM the entry's header block?
|
||||
bne H36E0 if no, go save entry block
|
||||
|
||||
lda d_head+1 then maybe, so test high addresses.
|
||||
cmp ZP.BLKNUM+1
|
||||
beq uphead branch if they are the same block.
|
||||
|
||||
H36E0 .DO LOWERCASE=1
|
||||
jsr XDOS.WriteGBufDir
|
||||
.ELSE
|
||||
jsr XDOS.WriteGBuf go write updated directory block.
|
||||
.FIN
|
||||
bcs crerr3
|
||||
|
||||
lda d_head get address of header block and
|
||||
ldx d_head+1
|
||||
|
||||
.DO LOWERCASE=1
|
||||
jsr XDOS.ReadGBufAXDir
|
||||
.ELSE
|
||||
jsr XDOS.ReadGBufAX go read in header block to modify.
|
||||
.FIN
|
||||
bcs crerr3
|
||||
|
||||
uphead ldy #$01 update current # of files in this dir.
|
||||
|
||||
H36F2 lda h_fcnt,y
|
||||
sta XDOS.GBuf+37,y (current entry count)
|
||||
dey
|
||||
bpl H36F2
|
||||
|
||||
lda h_attr also update header's attributes.
|
||||
sta XDOS.GBuf+34
|
||||
|
||||
.DO LOWERCASE=1
|
||||
jsr XDOS.WriteGBufDir
|
||||
.ELSE
|
||||
jsr XDOS.WriteGBuf go write updated header
|
||||
.FIN
|
||||
bcs H375A
|
||||
*--------------------------------------
|
||||
ripple lda XDOS.GBuf+4 test for 'root' directory because
|
||||
and #$F0 if it is, then directory revision
|
||||
eor #$F0 is complete (leaves carry clear).
|
||||
beq H3770 branch if done.
|
||||
|
||||
lda XDOS.GBuf+41 get entry #
|
||||
sta d_entnum
|
||||
lda XDOS.GBuf+42 and the length of entries in that dir
|
||||
sta h_entln
|
||||
|
||||
lda XDOS.GBuf+39 get addr of parent entry's dir block
|
||||
ldx XDOS.GBuf+40
|
||||
|
||||
.DO LOWERCASE=1
|
||||
jsr XDOS.ReadGBufAX no need to pak/unpak....will disturb zpt
|
||||
.ELSE
|
||||
jsr XDOS.ReadGBufAX read it
|
||||
.FIN
|
||||
bcs H375A
|
||||
|
||||
jsr entcalc get indirect ptr to parent entry in XDOS.GBuf
|
||||
|
||||
lda GP.DATE don't touch mod
|
||||
beq H373B if no clock...
|
||||
|
||||
ldx #$03 update the modification date & time
|
||||
ldy #$24 for this entry too
|
||||
|
||||
H3732 lda GP.DATE,x
|
||||
sta (zpt),y
|
||||
dey
|
||||
dex
|
||||
bpl H3732
|
||||
|
||||
H373B .DO LOWERCASE=1
|
||||
jsr XDOS.WriteGBuf
|
||||
.ELSE
|
||||
jsr XDOS.WriteGBuf write updated entry back to disk.
|
||||
.FIN
|
||||
bcs H375A if error.
|
||||
|
||||
ldy #$26 compare current block # to this
|
||||
lda (zpt),y entry's header block.
|
||||
tax
|
||||
dey
|
||||
lda (zpt),y block as header.
|
||||
cmp ZP.BLKNUM are low addresses the same?
|
||||
bne H3751 branch if entry doesn't reside in same
|
||||
|
||||
cpx ZP.BLKNUM+1 are high address the same?
|
||||
beq ripple they are the same, continue to root dir.
|
||||
|
||||
H3751 .DO LOWERCASE=1
|
||||
jsr XDOS.ReadGBufAX
|
||||
.ELSE
|
||||
jsr XDOS.ReadGBufAX
|
||||
.FIN
|
||||
bcc ripple continue if read was good
|
||||
|
||||
H375A rts
|
||||
|
||||
H3770 clc no error
|
||||
rts
|
||||
*--------------------------------------
|
||||
XDOS.FindDirOrVol
|
||||
jsr XDOS.FindFileOrVol
|
||||
bcs .99
|
||||
@ -62,8 +218,8 @@ XDOS.CheckPath jsr XDOS.FindVol
|
||||
|
||||
lda #$D0 fake directory file
|
||||
sta d_stor
|
||||
lda gbuf+2 check forward link.
|
||||
ora gbuf+3 if non-zero, assume full sized directory
|
||||
lda XDOS.GBuf+2 check forward link.
|
||||
ora XDOS.GBuf+3 if non-zero, assume full sized directory
|
||||
bne .3 else assume it's the slot 3 /RAM volume
|
||||
|
||||
lda #$02 so reset eof and blocks_used fields
|
||||
@ -97,16 +253,16 @@ L37C9 stz totent reset entry counter.
|
||||
|
||||
L37E2 dec entcnth should be at least one
|
||||
L37EB sta entcntl keep a running count.
|
||||
lda /gbuf reset indirect pointer
|
||||
lda /XDOS.GBuf reset indirect pointer
|
||||
sta zpt+1
|
||||
|
||||
lda gbuf+2 get link to next dir block
|
||||
lda XDOS.GBuf+2 get link to next dir block
|
||||
bne L37FC (if there is one).
|
||||
|
||||
cmp gbuf+3 are both zero, i.e. no link? if so,
|
||||
cmp XDOS.GBuf+3 are both zero, i.e. no link? if so,
|
||||
beq errdir then not all entries were acct'd for.
|
||||
|
||||
L37FC ldx gbuf+3 acc has value for block# (low).
|
||||
L37FC ldx XDOS.GBuf+3 acc has value for block# (low).
|
||||
.DO LOWERCASE=1
|
||||
jsr XDOS.ReadGBufAXDir
|
||||
.ELSE
|
||||
@ -117,13 +273,13 @@ L37FC ldx gbuf+3 acc has value for block# (low).
|
||||
*--------------------------------------
|
||||
errfnf lda nofree was any free entry found?
|
||||
bne fnf0
|
||||
lda gbuf+2 test link
|
||||
lda XDOS.GBuf+2 test link
|
||||
bne L3814
|
||||
cmp gbuf+3 if both are 0 then give up.
|
||||
cmp XDOS.GBuf+3 if both are 0 then give up.
|
||||
beq fnf0 report 'not found'.
|
||||
|
||||
L3814 sta d_entblk
|
||||
lda gbuf+3
|
||||
lda XDOS.GBuf+3
|
||||
sta d_entblk+1 assume 1st entry of next block
|
||||
lda #$01 is free for use.
|
||||
sta d_entnum mark as valid (for create)
|
||||
@ -160,20 +316,20 @@ namfound jsr nxtpname adj index to next name in path.
|
||||
.DO LOWERCASE=1
|
||||
jsr XDOS.ReadGBufAXDir
|
||||
.ELSE
|
||||
jsr XDOS.ReadGBufAX read subdirectory into gbuf.
|
||||
jsr XDOS.ReadGBufAX read subdirectory into XDOS.GBuf.
|
||||
.FIN
|
||||
bcs lookfil0.RTS if error.
|
||||
|
||||
lda gbuf+37 get the # of files contained in this
|
||||
lda XDOS.GBuf+37 get the # of files contained in this
|
||||
sta entcntl directory.
|
||||
lda gbuf+38
|
||||
lda XDOS.GBuf+38
|
||||
sta entcnth
|
||||
*--------------------------------------
|
||||
* Check if $75 at VOL/DIR entry + $14
|
||||
* (8 bytes reserved)
|
||||
*--------------------------------------
|
||||
.DO LOWERCASE=0
|
||||
lda gbuf+20 make sure password is disabled
|
||||
lda XDOS.GBuf+20 make sure password is disabled
|
||||
|
||||
ldx #$00
|
||||
sec
|
||||
@ -197,7 +353,7 @@ movhead jsr movhed0 move directory info.
|
||||
|
||||
movhed0 ldx #9 move this directory info
|
||||
|
||||
.1 lda gbuf+$1C,x
|
||||
.1 lda XDOS.GBuf+$1C,x
|
||||
sta h_credt,x
|
||||
dex
|
||||
bpl .1
|
||||
@ -205,14 +361,14 @@ movhed0 ldx #9 move this directory info
|
||||
.DO ACL=1
|
||||
ldx #7
|
||||
|
||||
lda gbuf+$14
|
||||
lda XDOS.GBuf+$14
|
||||
cmp #$57
|
||||
bne .20
|
||||
|
||||
lda gbuf+$15
|
||||
lda XDOS.GBuf+$15
|
||||
bne .20
|
||||
|
||||
.2 lda gbuf+$14,x
|
||||
.2 lda XDOS.GBuf+$14,x
|
||||
sta h_acl,x
|
||||
dex
|
||||
bpl .2
|
||||
@ -225,14 +381,14 @@ movhed0 ldx #9 move this directory info
|
||||
|
||||
.21 .FIN
|
||||
|
||||
lda gbuf+4 if this is root, then nothing to do
|
||||
lda XDOS.GBuf+4 if this is root, then nothing to do
|
||||
and #$F0
|
||||
eor #$F0 test header type.
|
||||
beq .8 branch if root
|
||||
|
||||
ldx #$03 otherwise, save owner info about
|
||||
|
||||
.3 lda gbuf+$27,x this header.
|
||||
.3 lda XDOS.GBuf+$27,x this header.
|
||||
sta own_blk,x
|
||||
dex
|
||||
bpl .3
|
||||
@ -245,9 +401,9 @@ filfound lda h_maxent figure out which entry # this is
|
||||
adc #$00 = entry # (carry was set)
|
||||
sta d_entnum
|
||||
|
||||
lda bloknml and indicate block # of this directory
|
||||
lda ZP.BLKNUM and indicate block # of this directory
|
||||
sta d_entblk
|
||||
lda bloknml+1
|
||||
lda ZP.BLKNUM+1
|
||||
sta d_entblk+1
|
||||
|
||||
* clc done by ADC #$00
|
||||
@ -258,7 +414,7 @@ XDOS.LookupNameInDirBlk
|
||||
lda h_maxent reset count of files per block
|
||||
sta cntent
|
||||
|
||||
jsr XDOS.ZPT.InitGBuf reset indirect pointer to gbuf
|
||||
jsr XDOS.ZPT.InitGBuf reset indirect pointer to XDOS.GBuf
|
||||
|
||||
bcs .4 branch if this block contains a header
|
||||
|
||||
@ -279,14 +435,14 @@ XDOS.LookupNameInDirBlk
|
||||
sta namcnt save name length as counter.
|
||||
|
||||
ldx namptr get index to current path.
|
||||
cmp pathbuf,x are both names the same length?
|
||||
cmp XDOS.PathBuf,x are both names the same length?
|
||||
bne .4 no, inc to next entry.
|
||||
|
||||
.3 inx (first) next letter index
|
||||
iny
|
||||
|
||||
lda (zpt),y compare names letter by letter
|
||||
cmp pathbuf,x
|
||||
cmp XDOS.PathBuf,x
|
||||
bne .4
|
||||
|
||||
dec namcnt all letters compared?
|
||||
@ -315,63 +471,63 @@ XDOS.FindVol jsr XDOS.FindVolInVCBOrDev
|
||||
dex
|
||||
bpl .1
|
||||
|
||||
lda DEVNUM setup device # for this directory
|
||||
lda GP.DEVNUM setup device # for this directory
|
||||
sta d_dev
|
||||
jsr movhed0 setup other header info from directory
|
||||
|
||||
ldy #$01 in gbuf and clean up misc info.
|
||||
ldx vcbptr
|
||||
ldy #$01 in XDOS.GBuf and clean up misc info.
|
||||
ldx XDOS.VCBPtr
|
||||
inx
|
||||
|
||||
.2 lda VCBs+VCB.TBLK,x misc info includes
|
||||
.2 lda XDOS.VCBs+VCB.TBLK,x misc info includes
|
||||
sta h_tblk,y total # of blocks,
|
||||
lda VCBs+VCB.BMAP,x the address of the 1st bitmap,
|
||||
lda XDOS.VCBs+VCB.BMAP,x the address of the 1st bitmap,
|
||||
sta h_bmap,y
|
||||
lda bloknml,y directory's disk address,
|
||||
lda ZP.BLKNUM,y directory's disk address,
|
||||
sta d_head,y
|
||||
lda h_fcnt,y and setting up a counter for the # of
|
||||
sta entcntl,y files in this directory.
|
||||
dex
|
||||
dey
|
||||
bpl .2
|
||||
|
||||
*--------------------------------------
|
||||
nxtpname jsr nxtpnam1 get new namptr in y and namlen in acc.
|
||||
sty namptr save new pathname pointer.
|
||||
rts (status reg according to accumulator)
|
||||
|
||||
*--------------------------------------
|
||||
nxtpnam1 ldy namptr inc pathname pointer to next name
|
||||
lda pathbuf,y in the path.
|
||||
lda XDOS.PathBuf,y in the path.
|
||||
sec
|
||||
adc namptr if this addition results in zero,
|
||||
tay then prefixed directory has been moved
|
||||
bne L395F to another device. branch if not.
|
||||
bne .1 to another device. branch if not.
|
||||
|
||||
lda DEVNUM revise DEVNUM for prefixed directory
|
||||
lda GP.DEVNUM revise GP.DEVNUM for prefixed directory
|
||||
sta p_dev
|
||||
|
||||
L395F lda pathbuf,y test for end of name.
|
||||
.1 lda XDOS.PathBuf,y test for end of name.
|
||||
clc no errors
|
||||
novolume rts
|
||||
*--------------------------------------
|
||||
XDOS.FindVolInVCBOrDev
|
||||
lda #$00
|
||||
ldy preflag use prefix volume name to look up vcb.
|
||||
ldy GP.PFXPTR use prefix volume name to look up vcb.
|
||||
bit prfxflg is this a prefixed path?
|
||||
bpl L396F branch if it is
|
||||
|
||||
tay set ptr to volume name
|
||||
|
||||
L396F sty vnptr and save.
|
||||
sta DEVNUM zero out dev# until vcb located.
|
||||
L396F sty L39D4+1 and save.
|
||||
sta GP.DEVNUM zero out dev# until vcb located.
|
||||
|
||||
lda #VCB0
|
||||
lda #XDOS.VCB0
|
||||
|
||||
L3975 pha acc now used as vcb lookup index.
|
||||
tax index pointer to x.
|
||||
lda VCBs,x get vcb volume name length.
|
||||
lda XDOS.VCBs,x get vcb volume name length.
|
||||
bne L3987 branch if claimed vcb to be tested.
|
||||
|
||||
L397C ldy vnptr restore pointer to requested vol name.
|
||||
L397C ldy L39D4+1 restore pointer to requested vol name.
|
||||
pla now adj vcb index to next vcb entry.
|
||||
clc
|
||||
adc #VCB
|
||||
@ -381,33 +537,33 @@ L397C ldy vnptr restore pointer to requested vol name.
|
||||
|
||||
L3987 sta namcnt save length of vol name to be compared.
|
||||
|
||||
L398A cmp pathbuf,y is it the same as requested vol name?
|
||||
L398A cmp XDOS.PathBuf,y is it the same as requested vol name?
|
||||
bne L397C branch if not
|
||||
|
||||
inx
|
||||
iny next character
|
||||
lda VCBs,x
|
||||
lda XDOS.VCBs,x
|
||||
dec namcnt last character?
|
||||
bpl L398A if not.
|
||||
|
||||
plx restore pointer to matching vcb.
|
||||
stx vcbptr save it for future reference.
|
||||
lda VCBs+VCB.DEV,x get it's device #
|
||||
sta DEVNUM and save it.
|
||||
stx XDOS.VCBPtr save it for future reference.
|
||||
lda XDOS.VCBs+VCB.DEV,x get it's device #
|
||||
sta GP.DEVNUM and save it.
|
||||
|
||||
lda #$02 assume prefix is not used and
|
||||
ldx #$00 that root directory is to be used.
|
||||
|
||||
pha
|
||||
|
||||
lda vnptr = 0 if no prefix.
|
||||
lda L39D4+1 = 0 if no prefix.
|
||||
|
||||
L39AC tay if prefix then find ptr to prefixed
|
||||
sta namptr dir name. save path ptr.
|
||||
beq L39C2 branch if no prefix.
|
||||
|
||||
sec
|
||||
adc pathbuf,y inc to next dir in prefix path.
|
||||
adc XDOS.PathBuf,y inc to next dir in prefix path.
|
||||
bcc L39AC branch if another dir in prefix.
|
||||
|
||||
pla
|
||||
@ -430,17 +586,18 @@ L39C2 pla
|
||||
jsr XDOS.CheckVolName compare dir name with path name.
|
||||
bcc L39F0 if they match, stop looking.
|
||||
|
||||
L39CC ldx vcbptr check if current (matched) vcb is active
|
||||
lda VCBs+VCB.OFCNT,x i.e. does it have open files?
|
||||
L39CC ldx XDOS.VCBPtr check if current (matched) vcb is active
|
||||
lda XDOS.VCBs+VCB.OFCNT,x i.e. does it have open files?
|
||||
bne L39ED report not found if active.
|
||||
|
||||
L39D4 lda vnptr make path ptr same as volume ptr
|
||||
L39D4 lda #$FF SELF MODIFIED vnptr : make path ptr same as volume ptr
|
||||
|
||||
sta namptr
|
||||
jsr mvdevnums copy all device #'s to be examined.
|
||||
lda DEVNUM log current device 1st before searching
|
||||
lda GP.DEVNUM log current device 1st before searching
|
||||
bne L39F1 others.
|
||||
|
||||
L39E2 ldx DEVCNT scan look list for devices we need
|
||||
L39E2 ldx GP.DEVCNT scan look list for devices we need
|
||||
|
||||
L39E5 lda loklst,x to search for the requested volume.
|
||||
bne L39F4 branch if we've a device to look at.
|
||||
@ -452,7 +609,7 @@ L39ED lda #MLI.E.VNOTFND no mounted volume
|
||||
sec error
|
||||
L39F0 rts
|
||||
|
||||
L39F1 ldx DEVCNT now remove the device from the list
|
||||
L39F1 ldx GP.DEVCNT now remove the device from the list
|
||||
|
||||
L39F4 cmp loklst,x of prospective devices.
|
||||
beq L39FE branch if match.
|
||||
@ -460,21 +617,21 @@ L39F4 cmp loklst,x of prospective devices.
|
||||
dex look until found.
|
||||
bpl L39F4 always taken (usually) unless
|
||||
|
||||
bmi L39ED if dev was removed from devlst (/RAM).
|
||||
bmi L39ED if dev was removed from GP.DEVLST (/RAM).
|
||||
|
||||
L39FE sta DEVNUM preserve device to be checked next.
|
||||
L39FE sta GP.DEVNUM preserve device to be checked next.
|
||||
stz loklst,x mark this one as tested.
|
||||
|
||||
jsr XDOS.FindVCBForDevNum find vcb that claims this dev (if any).
|
||||
bcs L3A29 branch if vcb full.
|
||||
|
||||
lda VCBs,x did we find it or return free vcb?
|
||||
lda XDOS.VCBs,x did we find it or return free vcb?
|
||||
beq L3A16 if free vcb.
|
||||
|
||||
lda VCBs+VCB.OFCNT,x is this volume active?
|
||||
lda XDOS.VCBs+VCB.OFCNT,x is this volume active?
|
||||
bne L39E2 if so, no need to re-log.
|
||||
|
||||
L3A16 lda #$02 go read root dir into gbuf
|
||||
L3A16 lda #$02 go read root dir into XDOS.GBuf
|
||||
ldx #$00
|
||||
.DO LOWERCASE=1
|
||||
jsr XDOS.ReadGBufAXDir
|
||||
@ -490,48 +647,48 @@ L3A16 lda #$02 go read root dir into gbuf
|
||||
bcs L39E2 if not
|
||||
L3A29 rts
|
||||
*--------------------------------------
|
||||
mvdevnums ldx DEVCNT copy all dev #'s to be checked.
|
||||
mvdevnums ldx GP.DEVCNT copy all dev #'s to be checked.
|
||||
|
||||
L3A2D lda DEVLST,x active device list.
|
||||
.1 lda GP.DEVLST,x active device list.
|
||||
and #$F0 strip device type info.
|
||||
sta loklst,x copy them to a temp workspace
|
||||
dex
|
||||
bpl L3A2D
|
||||
bpl .1
|
||||
|
||||
ldx DEVCNT
|
||||
ldx GP.DEVCNT
|
||||
rts
|
||||
*--------------------------------------
|
||||
XDOS.FindVCBForDevNum
|
||||
lda #VCB0 look for vcb for DEVNUM
|
||||
lda #XDOS.VCB0 look for vcb for GP.DEVNUM
|
||||
ldy #$FF
|
||||
|
||||
.1 tax new index to next vcb
|
||||
lda VCBs+VCB.DEV,x check all devnums
|
||||
cmp DEVNUM is this the vcb?
|
||||
lda XDOS.VCBs+VCB.DEV,x check all devnums
|
||||
cmp GP.DEVNUM is this the vcb?
|
||||
beq .7
|
||||
|
||||
lda VCBs,x is this a free vcb?
|
||||
lda XDOS.VCBs,x is this a free vcb?
|
||||
bne .3 if not
|
||||
|
||||
iny
|
||||
bne .3 already found a free one
|
||||
|
||||
stx vcbptr save first free VCB
|
||||
stx XDOS.VCBPtr save first free VCB
|
||||
|
||||
.3 txa
|
||||
clc inc index to next vcb
|
||||
adc #VCB
|
||||
bcc .1
|
||||
|
||||
ldx vcbptr get found free if any
|
||||
ldx XDOS.VCBPtr get found free if any
|
||||
|
||||
tya any free vcb's available?
|
||||
bpl .8 yes, exit with X = vcbptr
|
||||
bpl .8 yes, exit with X = XDOS.VCBPtr
|
||||
|
||||
lda #VCB0 look for an entry to kick out
|
||||
lda #XDOS.VCB0 look for an entry to kick out
|
||||
|
||||
.4 tax
|
||||
lda VCBs+VCB.OFCNT,x any open files?
|
||||
lda XDOS.VCBs+VCB.OFCNT,x any open files?
|
||||
beq .5 no, kick this one out.
|
||||
|
||||
txa next vcb
|
||||
@ -543,10 +700,10 @@ XDOS.FindVCBForDevNum
|
||||
* sec
|
||||
rts
|
||||
|
||||
.5 stz VCBs,x free this entry
|
||||
stz VCBs+VCB.DEV,x
|
||||
.5 stz XDOS.VCBs,x free this entry
|
||||
stz XDOS.VCBs+VCB.DEV,x
|
||||
|
||||
.7 stx vcbptr save entry index.
|
||||
.7 stx XDOS.VCBPtr save entry index.
|
||||
|
||||
.8 clc no error.
|
||||
rts
|
||||
@ -555,33 +712,33 @@ XDOS.CheckVolName
|
||||
ldx #$00 index to directory name.
|
||||
ldy namptr index to pathname.
|
||||
|
||||
lda gbuf+4 get dir name length and type.
|
||||
lda XDOS.GBuf+4 get dir name length and type.
|
||||
cmp #$E0 is it a directory?
|
||||
bcc L3A90 if not.
|
||||
bcc .1 if not.
|
||||
|
||||
and #$0F isolate name length and
|
||||
sta namcnt save as a counter.
|
||||
bne L3A95 branch if valid length.
|
||||
bne .3 branch if valid length.
|
||||
|
||||
L3A90 sec indicate not found
|
||||
.1 sec indicate not found
|
||||
rts
|
||||
|
||||
L3A92 lda gbuf+4,x next char
|
||||
.2 lda XDOS.GBuf+4,x next char
|
||||
|
||||
L3A95 cmp pathbuf,y
|
||||
bne L3A90 if not the same.
|
||||
.3 cmp XDOS.PathBuf,y
|
||||
bne .1 if not the same.
|
||||
|
||||
inx check next char
|
||||
iny
|
||||
dec namcnt
|
||||
bpl L3A92 if more to compare.
|
||||
bpl .2 if more to compare.
|
||||
|
||||
clc match found
|
||||
XDOS.CheckVolName.RTS
|
||||
rts
|
||||
*--------------------------------------
|
||||
XDOS.VCBMount ldx vcbptr previously logged in volume?
|
||||
lda VCBs,x (acc = 0?)
|
||||
XDOS.VCBMount ldx XDOS.VCBPtr previously logged in volume?
|
||||
lda XDOS.VCBs,x (acc = 0?)
|
||||
beq XDOS.VCBMountAtX no, go prepare vcb.
|
||||
|
||||
jsr XDOS.VCBCmpGBUF does vcb match vol read?
|
||||
@ -590,16 +747,16 @@ XDOS.VCBMount ldx vcbptr previously logged in volume?
|
||||
XDOS.VCBMountAtX
|
||||
ldy #VCB zero out vcb entry
|
||||
|
||||
L3AB2 stz VCBs,x
|
||||
L3AB2 stz XDOS.VCBs,x
|
||||
inx
|
||||
dey
|
||||
bne L3AB2
|
||||
|
||||
lda gbuf pointer to previous dir block
|
||||
ora gbuf+1 must be null
|
||||
lda XDOS.GBuf pointer to previous dir block
|
||||
ora XDOS.GBuf+1 must be null
|
||||
bne tsterr
|
||||
|
||||
lda gbuf+4 test for header
|
||||
lda XDOS.GBuf+4 test for header
|
||||
and #$E0
|
||||
cmp #$E0
|
||||
bne tsterr
|
||||
@ -607,30 +764,30 @@ L3AB2 stz VCBs,x
|
||||
jsr tstdupvol does a duplicate with open files
|
||||
bcs L3B04 already exist? branch if yes.
|
||||
|
||||
lda gbuf+4 move volume name to vcb.
|
||||
lda XDOS.GBuf+4 move volume name to vcb.
|
||||
and #$0F strip root marker
|
||||
tay
|
||||
pha
|
||||
* clc
|
||||
adc vcbptr
|
||||
adc XDOS.VCBPtr
|
||||
tax
|
||||
|
||||
L3ACE lda gbuf+4,y
|
||||
sta VCBs,x
|
||||
L3ACE lda XDOS.GBuf+4,y
|
||||
sta XDOS.VCBs,x
|
||||
dex
|
||||
dey
|
||||
bne L3ACE
|
||||
|
||||
pla get length again
|
||||
sta VCBs,x and save.
|
||||
sta XDOS.VCBs,x and save.
|
||||
|
||||
lda DEVNUM last device used.
|
||||
sta VCBs+VCB.DEV,x save device # and
|
||||
lda GP.DEVNUM last device used.
|
||||
sta XDOS.VCBs+VCB.DEV,x save device # and
|
||||
|
||||
ldy #0
|
||||
|
||||
.1 lda gbuf+39,y
|
||||
sta VCBs+VCB.BMAP,x copy BMAP+TBLK
|
||||
.1 lda XDOS.GBuf+39,y
|
||||
sta XDOS.VCBs+VCB.BMAP,x copy BMAP+TBLK
|
||||
iny
|
||||
inx
|
||||
cpy #4
|
||||
@ -643,43 +800,43 @@ tsterr lda #MLI.E.NOTPRODOS not tree or dir, unrecognized type
|
||||
sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
XDOS.VCBCmpGBUF lda gbuf+4 with name in directory.
|
||||
XDOS.VCBCmpGBUF lda XDOS.GBuf+4 with name in directory.
|
||||
and #$0F
|
||||
cmp VCBs,x are they the same length?
|
||||
stx xvcbptr (see rev note #23)
|
||||
cmp XDOS.VCBs,x are they the same length?
|
||||
stx .1+1 xvcbptr : see rev note #23
|
||||
bne .9 if not the same.
|
||||
|
||||
tay
|
||||
clc
|
||||
adc xvcbptr
|
||||
.1 adc #$FF xvcbptr : SELF MODIFIED
|
||||
tax
|
||||
|
||||
.1 lda gbuf+4,y
|
||||
cmp VCBs,x
|
||||
.2 lda XDOS.GBuf+4,y
|
||||
cmp XDOS.VCBs,x
|
||||
bne .9 if not the same.
|
||||
|
||||
dex
|
||||
dey
|
||||
bne .1
|
||||
bne .2
|
||||
|
||||
clc indicate match.
|
||||
.HS B0 BCS
|
||||
.9 sec
|
||||
|
||||
ldx xvcbptr offset to start of vcb (rev note #23)
|
||||
ldx .1+1 xvcbptr : offset to start of vcb (rev note #23)
|
||||
rts
|
||||
*--------------------------------------
|
||||
tstdupvol lda #VCB0 check for other logged in volumes with the same name.
|
||||
tstdupvol lda #XDOS.VCB0 check for other logged in volumes with the same name.
|
||||
|
||||
L3B2C tax
|
||||
jsr XDOS.VCBCmpGBUF
|
||||
bcs L3B41 if no match.
|
||||
|
||||
lda VCBs+VCB.OFCNT,x test for any open files.
|
||||
lda XDOS.VCBs+VCB.OFCNT,x test for any open files.
|
||||
bne L3B4B cannot look at this volume.
|
||||
|
||||
stz VCBs,x take duplicate offline if no open files
|
||||
stz VCBs+VCB.DEV,x
|
||||
stz XDOS.VCBs,x take duplicate offline if no open files
|
||||
stz XDOS.VCBs+VCB.DEV,x
|
||||
* clc ok to log in new volume.
|
||||
rts
|
||||
|
||||
@ -691,14 +848,14 @@ L3B41 txa index to next vcb
|
||||
clc
|
||||
rts
|
||||
|
||||
L3B4B sta duplflag duplicate has been found.
|
||||
stx vcbentry save pointer to conflicting vcb.
|
||||
L3B4B sta XDOS.VCBDupFlag duplicate has been found.
|
||||
stx XDOS.VCBDupEnt save pointer to conflicting vcb.
|
||||
sec error.
|
||||
rts
|
||||
*--------------------------------------
|
||||
tstfrblk ldx vcbptr test if enough free blocks available for request.
|
||||
lda VCBs+VCB.FBLK+1,x check if proper count for this volume.
|
||||
ora VCBs+VCB.FBLK,x
|
||||
tstfrblk ldx XDOS.VCBPtr test if enough free blocks available for request.
|
||||
lda XDOS.VCBs+VCB.FBLK+1,x check if proper count for this volume.
|
||||
ora XDOS.VCBs+VCB.FBLK,x
|
||||
bne L3BAD branch if count is non-zero.
|
||||
|
||||
tkfrecnt jsr cntbms get # of bitmaps
|
||||
@ -712,12 +869,12 @@ tkfrecnt jsr cntbms get # of bitmaps
|
||||
jsr upbmap update volume bitmap.
|
||||
bcs L3BC1 if error.
|
||||
|
||||
ldx vcbptr get address of 1st bitmap
|
||||
ldx XDOS.VCBPtr get address of 1st bitmap
|
||||
|
||||
lda VCBs+VCB.BMAP,x
|
||||
sta bloknml
|
||||
lda VCBs+VCB.BMAP+1,x
|
||||
sta bloknml+1
|
||||
lda XDOS.VCBs+VCB.BMAP,x
|
||||
sta ZP.BLKNUM
|
||||
lda XDOS.VCBs+VCB.BMAP+1,x
|
||||
sta ZP.BLKNUM+1
|
||||
|
||||
L3B81 jsr XDOS.ReadGBuf use general buffer for temp space to
|
||||
bcs L3BC1 count free blocks (bits).
|
||||
@ -726,27 +883,27 @@ L3B81 jsr XDOS.ReadGBuf use general buffer for temp space to
|
||||
dec bmcnt was that the last bitmap?
|
||||
bmi L3B96 if so, go change fcb so not done again.
|
||||
|
||||
inc bloknml
|
||||
inc ZP.BLKNUM
|
||||
bne L3B81
|
||||
|
||||
inc bloknml+1
|
||||
inc ZP.BLKNUM+1
|
||||
bra L3B81
|
||||
|
||||
L3B96 ldx vcbptr mark which block had 1st free space
|
||||
L3B96 ldx XDOS.VCBPtr mark which block had 1st free space
|
||||
lda nofree
|
||||
bmi L3BBE if no free space was found.
|
||||
|
||||
sta VCBs+VCB.BMAPIDX,x update the free count.
|
||||
sta XDOS.VCBs+VCB.BMAPIDX,x update the free count.
|
||||
|
||||
lda scrtch+1
|
||||
sta VCBs+VCB.FBLK+1,x update volume control byte.
|
||||
sta XDOS.VCBs+VCB.FBLK+1,x update volume control byte.
|
||||
lda scrtch
|
||||
sta VCBs+VCB.FBLK,x
|
||||
sta XDOS.VCBs+VCB.FBLK,x
|
||||
|
||||
L3BAD lda VCBs+VCB.FBLK,x compare total available free blocks
|
||||
L3BAD lda XDOS.VCBs+VCB.FBLK,x compare total available free blocks
|
||||
sec on this volume.
|
||||
sbc reql
|
||||
lda VCBs+VCB.FBLK+1,x
|
||||
lda XDOS.VCBs+VCB.FBLK+1,x
|
||||
sbc reqh
|
||||
bcc L3BBE
|
||||
|
||||
@ -756,15 +913,15 @@ L3BAD lda VCBs+VCB.FBLK,x compare total available free blocks
|
||||
L3BBE lda #MLI.E.VOLFULL
|
||||
sec
|
||||
L3BC1 rts
|
||||
|
||||
*--------------------------------------
|
||||
count ldy #$00
|
||||
|
||||
L3BC4 lda gbuf,y bit pattern.
|
||||
L3BC4 lda XDOS.GBuf,y bit pattern.
|
||||
beq L3BCC don't count
|
||||
|
||||
jsr cntfree
|
||||
|
||||
L3BCC lda gbuf+$100,y do both pages with same loop
|
||||
L3BCC lda XDOS.GBuf+$100,y do both pages with same loop
|
||||
beq L3BD4
|
||||
|
||||
jsr cntfree
|
||||
@ -785,7 +942,7 @@ L3BD4 iny
|
||||
sta nofree
|
||||
|
||||
L3BEE rts
|
||||
|
||||
*--------------------------------------
|
||||
cntfree asl count the # of bits in this byte
|
||||
bcc L3BFA
|
||||
|
||||
@ -797,10 +954,10 @@ cntfree asl count the # of bits in this byte
|
||||
L3BFA ora #$00
|
||||
bne cntfree loop until all bits counted
|
||||
rts
|
||||
|
||||
cntbms ldx vcbptr
|
||||
ldy VCBs+VCB.TBLK+1,x return the # of bitmaps
|
||||
lda VCBs+VCB.TBLK,x possible with the total count
|
||||
*--------------------------------------
|
||||
cntbms ldx XDOS.VCBPtr
|
||||
ldy XDOS.VCBs+VCB.TBLK+1,x return the # of bitmaps
|
||||
lda XDOS.VCBs+VCB.TBLK,x possible with the total count
|
||||
bne L3C0B found in the vcb.
|
||||
|
||||
dey adj for bitmap block boundary
|
||||
|
@ -3,8 +3,8 @@ NEW
|
||||
*--------------------------------------
|
||||
XDOS.DeallocAX stx bmcnt high address of block.
|
||||
* pha save low address.
|
||||
ldx vcbptr check that bitmap block address is
|
||||
ldy VCBs+VCB.TBLK+1,x valid given the total # of blocks
|
||||
ldx XDOS.VCBPtr check that bitmap block address is
|
||||
ldy XDOS.VCBs+VCB.TBLK+1,x valid given the total # of blocks
|
||||
cpy bmcnt on the volume.
|
||||
* pla
|
||||
bcc L3C8C branch if invalid
|
||||
@ -42,9 +42,9 @@ XDOS.DeallocAX stx bmcnt high address of block.
|
||||
bcs L3C8B error.
|
||||
|
||||
lda bmcnt get map #
|
||||
ldx vcbptr
|
||||
ldx XDOS.VCBPtr
|
||||
|
||||
sta VCBs+VCB.BMAPIDX,x and make it current.
|
||||
sta XDOS.VCBs+VCB.BMAPIDX,x and make it current.
|
||||
lda bmadev
|
||||
jsr gtbmap read it into buffer
|
||||
bcs L3C8B
|
||||
@ -54,12 +54,12 @@ L3C64 ldy bmptr index to byte
|
||||
lda nofree (get indiviual bit)
|
||||
bcc bmbufhi branch if on page 1 of bitmap
|
||||
|
||||
ora bmbuf+$100,y
|
||||
sta bmbuf+$100,y
|
||||
ora XDOS.BMBuf+$100,y
|
||||
sta XDOS.BMBuf+$100,y
|
||||
bcs L3C7D always.
|
||||
|
||||
bmbufhi ora bmbuf,y this address + 2 is used as an absolute reference to bmbuf high byte.
|
||||
sta bmbuf,y
|
||||
bmbufhi ora XDOS.BMBuf,y this address + 2 is used as an absolute reference to XDOS.BMBuf high byte.
|
||||
sta XDOS.BMBuf,y
|
||||
|
||||
L3C7D lda #$80 mark bitmap as modified
|
||||
tsb bmastat
|
||||
@ -82,7 +82,7 @@ alc1blk jsr fndbmap get address of bitmap.
|
||||
L3C95 ldy #$00 begin search at start of bitmap block.
|
||||
sty half which half (page) to search
|
||||
|
||||
L3C9A lda bmbuf,y
|
||||
L3C9A lda XDOS.BMBuf,y
|
||||
bne L3CB9 free blocks indicated by 'on' bits
|
||||
|
||||
iny
|
||||
@ -91,7 +91,7 @@ L3C9A lda bmbuf,y
|
||||
inc half now search page 2.
|
||||
inc basval base value = base address / 2048.
|
||||
|
||||
L3CA8 lda bmbuf+$100,y search 2nd half for free block
|
||||
L3CA8 lda XDOS.BMBuf+$100,y search 2nd half for free block
|
||||
bne L3CB9
|
||||
|
||||
iny
|
||||
@ -120,10 +120,10 @@ L3CB9 sty bmptr save index pointer to valid bit group.
|
||||
lda half
|
||||
beq L3CDB branch if allocating from 1st half.
|
||||
|
||||
lda bmbuf+$100,y get pattern from 2nd page.
|
||||
lda XDOS.BMBuf+$100,y get pattern from 2nd page.
|
||||
bcs L3CDE always.
|
||||
|
||||
L3CDB lda bmbuf,y get bit pattern from 1st page.
|
||||
L3CDB lda XDOS.BMBuf,y get bit pattern from 1st page.
|
||||
L3CDE rol find left most 'on' bit
|
||||
bcs L3CE4 if found.
|
||||
|
||||
@ -137,47 +137,47 @@ L3CE4 lsr restore pos'n of all but left most bit.
|
||||
ldx half which half of bitmap ?
|
||||
bne L3CF4 if page 2.
|
||||
|
||||
sta bmbuf,y
|
||||
sta XDOS.BMBuf,y
|
||||
beq L3CF7 always.
|
||||
|
||||
L3CF4 sta bmbuf+$100,y update to show allocated block in use.
|
||||
L3CF4 sta XDOS.BMBuf+$100,y update to show allocated block in use.
|
||||
|
||||
L3CF7 lda #$80 indicate map is modified.
|
||||
tsb bmastat
|
||||
|
||||
ldx vcbptr subtract 1 from total free vcb blocks
|
||||
lda VCBs+VCB.FBLK,x to account for newly allocated block.
|
||||
ldx XDOS.VCBPtr subtract 1 from total free vcb blocks
|
||||
lda XDOS.VCBs+VCB.FBLK,x to account for newly allocated block.
|
||||
bne .7
|
||||
dec VCBs+VCB.FBLK+1,x
|
||||
.7 dec VCBs+VCB.FBLK,x
|
||||
dec XDOS.VCBs+VCB.FBLK+1,x
|
||||
.7 dec XDOS.VCBs+VCB.FBLK,x
|
||||
|
||||
lda scrtch return address in y,a of newly
|
||||
ldy scrtch+1 allocated block.
|
||||
clc no errors.
|
||||
rts
|
||||
*--------------------------------------
|
||||
nxtbmap ldx vcbptr inc to next bitmap, but 1st make sure there is another one.
|
||||
lda VCBs+VCB.TBLK+1,x
|
||||
nxtbmap ldx XDOS.VCBPtr inc to next bitmap, but 1st make sure there is another one.
|
||||
lda XDOS.VCBs+VCB.TBLK+1,x
|
||||
lsr
|
||||
lsr
|
||||
lsr
|
||||
lsr
|
||||
cmp VCBs+VCB.BMAPIDX,x are there more maps ?
|
||||
cmp XDOS.VCBs+VCB.BMAPIDX,x are there more maps ?
|
||||
beq L3D60 if no more to look at.
|
||||
|
||||
inc VCBs+VCB.BMAPIDX,x add 1 to current map
|
||||
inc XDOS.VCBs+VCB.BMAPIDX,x add 1 to current map
|
||||
jsr upbmap
|
||||
|
||||
fndbmap ldy vcbptr
|
||||
lda VCBs+VCB.DEV,y get device #.
|
||||
fndbmap ldy XDOS.VCBPtr
|
||||
lda XDOS.VCBs+VCB.DEV,y get device #.
|
||||
cmp bmadev does this map match this device ?
|
||||
beq L3D4A yes.
|
||||
|
||||
jsr upbmap otherwise, save other volume's bitmap
|
||||
bcs L3D5F
|
||||
|
||||
ldy vcbptr
|
||||
lda VCBs+VCB.DEV,y
|
||||
ldy XDOS.VCBPtr
|
||||
lda XDOS.VCBs+VCB.DEV,y
|
||||
sta bmadev and read in fresh bitmap for this dev.
|
||||
|
||||
L3D4A ldy bmastat is it already modified ?
|
||||
@ -186,8 +186,8 @@ L3D4A ldy bmastat is it already modified ?
|
||||
jsr gtbmap otherwise read in fresh bitmap.
|
||||
bcs L3D5F if error.
|
||||
|
||||
L3D54 ldy vcbptr get relative block # of bitmap.
|
||||
lda VCBs+VCB.BMAPIDX,y
|
||||
L3D54 ldy XDOS.VCBPtr get relative block # of bitmap.
|
||||
lda XDOS.VCBs+VCB.BMAPIDX,y
|
||||
asl 2 pages per block
|
||||
sta basval
|
||||
|
||||
@ -211,14 +211,14 @@ upbmap clc
|
||||
*--------------------------------------
|
||||
gtbmap sta bmadev read bitmap specified by dev and vcb.
|
||||
|
||||
ldy vcbptr get lowest map # with free blocks in it
|
||||
lda VCBs+VCB.BMAPIDX,y
|
||||
ldy XDOS.VCBPtr get lowest map # with free blocks in it
|
||||
lda XDOS.VCBs+VCB.BMAPIDX,y
|
||||
sta bmacmap associate offset with bitmap ctrl block.
|
||||
clc add this # to the base address of
|
||||
adc VCBs+VCB.BMAP,y 1st bitmap and save in bmadadr which
|
||||
adc XDOS.VCBs+VCB.BMAP,y 1st bitmap and save in bmadadr which
|
||||
sta bmadadr is address of bitmap to be used.
|
||||
|
||||
lda VCBs+VCB.BMAP+1,y
|
||||
lda XDOS.VCBs+VCB.BMAP+1,y
|
||||
adc #$00
|
||||
sta bmadadr+1
|
||||
|
||||
@ -226,23 +226,23 @@ gtbmap sta bmadev read bitmap specified by dev and vcb.
|
||||
.HS 2C BIT ABS
|
||||
wrtbmap lda #$02 write command.
|
||||
|
||||
sta A4L
|
||||
sta ZP.CMDNUM
|
||||
|
||||
lda DEVNUM save current dev #
|
||||
lda GP.DEVNUM save current dev #
|
||||
pha
|
||||
lda bmadev get bitmap's dev #
|
||||
sta DEVNUM
|
||||
sta GP.DEVNUM
|
||||
lda bmadadr and disk address
|
||||
sta bloknml
|
||||
sta ZP.BLKNUM
|
||||
lda bmadadr+1
|
||||
sta bloknml+1
|
||||
sta ZP.BLKNUM+1
|
||||
|
||||
lda /bmbuf
|
||||
lda /XDOS.BMBuf
|
||||
* lda bmbufhi+2 address of the buffer (low = 0)
|
||||
jsr XDOS.RWBlock
|
||||
|
||||
plx keep A=error code if CS
|
||||
stx DEVNUM
|
||||
stx GP.DEVNUM
|
||||
|
||||
L3DB6 rts
|
||||
*--------------------------------------
|
||||
@ -253,7 +253,7 @@ XDOS.WriteGBufDir
|
||||
.FIN
|
||||
*--------------------------------------
|
||||
XDOS.ReadGBuf_d_frst
|
||||
lda d_frst read 1st block of directory into gbuf
|
||||
lda d_frst read 1st block of directory into XDOS.GBuf
|
||||
ldx d_frst+1
|
||||
.DO LOWERCASE=1
|
||||
XDOS.ReadGBufAXDir
|
||||
@ -261,35 +261,35 @@ XDOS.ReadGBufAXDir
|
||||
bcc XDOS.UnpackGBuf
|
||||
rts
|
||||
.FIN
|
||||
XDOS.ReadGBufAX sta bloknml
|
||||
stx bloknml+1
|
||||
XDOS.ReadGBufAX sta ZP.BLKNUM
|
||||
stx ZP.BLKNUM+1
|
||||
|
||||
XDOS.ReadGBuf lda #$01 read command.
|
||||
.HS 2C BIT ABS
|
||||
|
||||
XDOS.WriteGBuf lda #$02 write command
|
||||
|
||||
sta A4L pass to device handler.
|
||||
lda /gbuf general buffer.
|
||||
sta ZP.A4L pass to device handler.
|
||||
lda /XDOS.GBuf general buffer.
|
||||
|
||||
XDOS.RWBlock sta buf+1 buffer high.
|
||||
stz buf buffer low (always on page boundary)
|
||||
XDOS.RWBlock sta ZP.BUFPTR+1 buffer high.
|
||||
stz ZP.BUFPTR buffer low (always on page boundary)
|
||||
|
||||
stz p8error clear global error code.
|
||||
stz GP.ERROR clear global error code.
|
||||
|
||||
lda #$FF indicates reg call made to dev handler
|
||||
sta ioaccess
|
||||
lda GP.DEVNUM transfer dev # for dispatcher to
|
||||
sta ZP.UNITNUM convert to unit #.
|
||||
|
||||
lda DEVNUM transfer dev # for dispatcher to
|
||||
sta unitnum convert to unit #.
|
||||
jmp XDOS.DevCall call the driver.
|
||||
*--------------------------------------
|
||||
.DO LOWERCASE=1
|
||||
|
||||
XDOS.CheckAndUnpackGBuf
|
||||
lda gbuf+$23
|
||||
lda XDOS.GBuf+$23
|
||||
sta h_entln
|
||||
ldy gbuf+$24
|
||||
ldy XDOS.GBuf+$24
|
||||
sty h_maxent
|
||||
cmp #$27
|
||||
bne .9
|
||||
@ -379,8 +379,8 @@ XDOS.GetMark ldx fcbptr index to open fcb.
|
||||
|
||||
ldy #$02 index to user's mark parameter.
|
||||
|
||||
.1 lda FCBs+FCB.MARK,x transfer current position
|
||||
sta (A3L),y to user's parameter list
|
||||
.1 lda XDOS.FCBs+FCB.MARK,x transfer current position
|
||||
sta (ZP.A3L),y to user's parameter list
|
||||
inx
|
||||
iny
|
||||
cpy #$05 transfer 3 bytes
|
||||
@ -399,11 +399,11 @@ XDOS.SetMark ldy #$04 index to user's desired position.
|
||||
inx
|
||||
sec indicate comparisons are necessary.
|
||||
|
||||
.1 lda (A3L),y move it to 'tpos'
|
||||
.1 lda (ZP.A3L),y move it to 'tpos'
|
||||
sta tposll-2,y
|
||||
bcc .2 branch if mark < eof
|
||||
|
||||
cmp FCBs+FCB.EOF,x
|
||||
cmp XDOS.FCBs+FCB.EOF,x
|
||||
bcc .2 branch if mark qualifies.
|
||||
|
||||
bne L3DFD branch if mark > eof (invalid position)
|
||||
@ -416,7 +416,7 @@ XDOS.SetMark ldy #$04 index to user's desired position.
|
||||
bne .1 branch if more.
|
||||
|
||||
rdposn ldy fcbptr test to see if new position is
|
||||
lda FCBs+FCB.MARK+1,y within the same (current) data block.
|
||||
lda XDOS.FCBs+FCB.MARK+1,y within the same (current) data block.
|
||||
and #$FE
|
||||
sta scrtch
|
||||
lda tposlh middle byte of new position
|
||||
@ -429,12 +429,12 @@ rdposn ldy fcbptr test to see if new position is
|
||||
bcs L3E44 of current position.
|
||||
|
||||
lda tposhi make sure within the same 64k.
|
||||
cmp FCBs+FCB.MARK+2,y
|
||||
cmp XDOS.FCBs+FCB.MARK+2,y
|
||||
bne L3E44 branch if not.
|
||||
|
||||
jmp svmark if so, adj fcb, position ptr and return.
|
||||
|
||||
L3E44 lda FCBs+FCB.STYPE,y determine file type for positioning.
|
||||
L3E44 lda XDOS.FCBs+FCB.STYPE,y determine file type for positioning.
|
||||
beq L3E50 0 = invalid file type.
|
||||
|
||||
cmp #$04 tree class file?
|
||||
@ -443,14 +443,14 @@ L3E44 lda FCBs+FCB.STYPE,y determine file type for positioning.
|
||||
jmp dirmark no, test for dir type.
|
||||
|
||||
L3E50 ldy #$A4 clear illegal filetype entry in fcb
|
||||
sta FCBs,y
|
||||
sta XDOS.FCBs,y
|
||||
lda #MLI.E.BADREF and report error
|
||||
sec
|
||||
rts
|
||||
|
||||
L3E59 lda FCBs+FCB.STYPE,y use storage type as # of index levels
|
||||
L3E59 lda XDOS.FCBs+FCB.STYPE,y use storage type as # of index levels
|
||||
sta levels since 1=seed, 2=sapling, 3=tree.
|
||||
lda FCBs+FCB.F,y
|
||||
lda XDOS.FCBs+FCB.F,y
|
||||
and #FCB.F.DBLKMOD if previous data was modified then
|
||||
beq L3E6B disk must be updated.
|
||||
|
||||
@ -459,7 +459,7 @@ L3E59 lda FCBs+FCB.STYPE,y use storage type as # of index levels
|
||||
bcs L3ED4 if error.
|
||||
|
||||
L3E6B ldy fcbptr test to see if current index block
|
||||
lda FCBs+FCB.MARK+2,y is usable by checking if new
|
||||
lda XDOS.FCBs+FCB.MARK+2,y is usable by checking if new
|
||||
and #$FE position is within 128k of the
|
||||
sta scrtch beginning of current sapling level
|
||||
lda tposhi chunk.
|
||||
@ -479,12 +479,12 @@ L3E89 lda tposlh is new position < 512 ?
|
||||
ora tposhi
|
||||
bne L3EEF no, mark both data and index block as
|
||||
|
||||
lda FCBs+FCB.1stBLK,y unallocated. 1st block is only block
|
||||
sta bloknml and it's data.
|
||||
lda FCBs+FCB.1stBLK+1,y high block address.
|
||||
lda XDOS.FCBs+FCB.1stBLK,y unallocated. 1st block is only block
|
||||
sta ZP.BLKNUM and it's data.
|
||||
lda XDOS.FCBs+FCB.1stBLK+1,y high block address.
|
||||
jmp rnewpos go read in block and set statuses.
|
||||
|
||||
L3E9D lda FCBs+FCB.F,y check to see if previous index block
|
||||
L3E9D lda XDOS.FCBs+FCB.F,y check to see if previous index block
|
||||
and #FCB.F.IBLKMOD was modified.
|
||||
beq L3EA9 read in over it if current up to date.
|
||||
|
||||
@ -536,15 +536,15 @@ posindex jsr XDOS.ClrFCBStatus clr all alloc requirements for previous
|
||||
L3EEF lda #$03 show neither index or data block alloc'd
|
||||
bra L3F18
|
||||
|
||||
saplevel sta bloknml read in next lower index block.
|
||||
saplevel sta ZP.BLKNUM read in next lower index block.
|
||||
lda (zpt),y (high address)
|
||||
sta bloknml+1
|
||||
sta ZP.BLKNUM+1
|
||||
dec zpt+1
|
||||
|
||||
* jsr rfcbidx read in sapling level
|
||||
|
||||
lda #$01 prepare to read index block : read command
|
||||
sta A4L
|
||||
sta ZP.CMDNUM
|
||||
|
||||
ldx #zpt address of current index buffer.
|
||||
|
||||
@ -591,11 +591,11 @@ L3F49 sta (datptr),y
|
||||
dec datptr+1
|
||||
rts
|
||||
*--------------------------------------
|
||||
L3F51 sta bloknml get data block of new position
|
||||
L3F51 sta ZP.BLKNUM get data block of new position
|
||||
lda (zpt),y (high address)
|
||||
dec zpt+1
|
||||
|
||||
rnewpos sta bloknml+1
|
||||
rnewpos sta ZP.BLKNUM+1
|
||||
jsr XDOS.ReadFCB.DBLK
|
||||
bcs L3F86 if error.
|
||||
|
||||
@ -606,10 +606,10 @@ svmark ldy fcbptr update position in fcb
|
||||
iny
|
||||
ldx #$02
|
||||
|
||||
L3F68 lda FCBs+FCB.MARK,y save old mark in case calling routine
|
||||
L3F68 lda XDOS.FCBs+FCB.MARK,y save old mark in case calling routine
|
||||
sta oldmark,x fails later.
|
||||
lda tposll,x
|
||||
sta FCBs+FCB.MARK,y
|
||||
sta XDOS.FCBs+FCB.MARK,y
|
||||
dey
|
||||
dex move 3 byte position marker
|
||||
bpl L3F68
|
||||
@ -627,16 +627,16 @@ dirmark cmp #$0D is it a directory ?
|
||||
beq L3F9C yes...
|
||||
|
||||
lda #MLI.E.INCFF no, so compatability problem.
|
||||
jsr GP.P8errv should not have been opened !!!
|
||||
jsr GP.SYSERR should not have been opened !!!
|
||||
|
||||
L3F9C lda scrtch recover results of previous subtraction.
|
||||
lsr use difference as counter for how many
|
||||
sta cntent blocks must be read to get to new pos'n.
|
||||
|
||||
lda FCBs+FCB.MARK+1,y test for positive direction
|
||||
lda XDOS.FCBs+FCB.MARK+1,y test for positive direction
|
||||
cmp tposlh indicated by carry.
|
||||
|
||||
lda FCBs+FCB.MARK+2,y
|
||||
lda XDOS.FCBs+FCB.MARK+2,y
|
||||
sbc tposhi
|
||||
|
||||
bcc L3FB9 if set, position forward. otherwise,
|
||||
@ -660,7 +660,7 @@ L3FB9 ldy #$02 position is forward from current.
|
||||
beq svmark branch always.
|
||||
*--------------------------------------
|
||||
dirpos1 lda (datptr),y get link address of previous or next
|
||||
sta bloknml directory block.
|
||||
sta ZP.BLKNUM directory block.
|
||||
cmp #$01 test for null byte into carry
|
||||
iny but first be sure there is a link.
|
||||
lda (datptr),y get the rest of the link.
|
||||
@ -674,11 +674,11 @@ dirpos1 lda (datptr),y get link address of previous or next
|
||||
|
||||
L3FD6 rts
|
||||
|
||||
L3FD8 sta bloknml+1
|
||||
L3FD8 sta ZP.BLKNUM+1
|
||||
*--------------------------------------
|
||||
XDOS.ReadFCB.DBLK
|
||||
lda #$01 read command
|
||||
sta A4L
|
||||
sta ZP.CMDNUM
|
||||
|
||||
ldx #datptr points at address of data buffer.
|
||||
|
||||
@ -686,17 +686,17 @@ XDOS.ReadFCB.DBLK
|
||||
bcs L3FF2 error.
|
||||
|
||||
ldy fcbptr
|
||||
lda bloknml
|
||||
sta FCBs+FCB.DBLK,y save block # just read in fcb.
|
||||
lda bloknml+1
|
||||
sta FCBs+FCB.DBLK+1,y
|
||||
lda ZP.BLKNUM
|
||||
sta XDOS.FCBs+FCB.DBLK,y save block # just read in fcb.
|
||||
lda ZP.BLKNUM+1
|
||||
sta XDOS.FCBs+FCB.DBLK+1,y
|
||||
|
||||
* clc
|
||||
|
||||
L3FF2 rts
|
||||
*--------------------------------------
|
||||
*rfcbidx lda #$01 prepare to read index block : read command
|
||||
* sta A4L
|
||||
* sta ZP.CMDNUM
|
||||
|
||||
* ldx #zpt address of current index buffer.
|
||||
|
||||
@ -704,10 +704,10 @@ L3FF2 rts
|
||||
* bcs L400C error
|
||||
|
||||
* ldy fcbptr
|
||||
* lda bloknml
|
||||
* sta FCBs+FCB.IBLK,y save block address of this index in fcb
|
||||
* lda bloknml+1
|
||||
* sta FCBs+FCB.IBLK+1,y
|
||||
* lda ZP.BLKNUM
|
||||
* sta XDOS.FCBs+FCB.IBLK,y save block address of this index in fcb
|
||||
* lda ZP.BLKNUM+1
|
||||
* sta XDOS.FCBs+FCB.IBLK+1,y
|
||||
|
||||
** clc
|
||||
|
||||
@ -728,33 +728,33 @@ rfcbfst lda #$01 read command.
|
||||
|
||||
ldx #zpt rd block into index portion of file buf
|
||||
*--------------------------------------
|
||||
dofileio sta A4L command
|
||||
dofileio sta ZP.CMDNUM command
|
||||
|
||||
lda FCBs,y get disk block address from fcb.
|
||||
sta bloknml block 0 not legal
|
||||
lda XDOS.FCBs,y get disk block address from fcb.
|
||||
sta ZP.BLKNUM block 0 not legal
|
||||
bne .1
|
||||
|
||||
lda FCBs+1,y high address of disk block
|
||||
lda XDOS.FCBs+1,y high address of disk block
|
||||
bne .2
|
||||
|
||||
lda #$0C Block = $0000, allocation error.
|
||||
jsr GP.SysDeath doesn't return...
|
||||
jsr GP.SYSDEATH doesn't return...
|
||||
|
||||
.1 lda FCBs+1,y
|
||||
.2 sta bloknml+1
|
||||
.1 lda XDOS.FCBs+1,y
|
||||
.2 sta ZP.BLKNUM+1
|
||||
*--------------------------------------
|
||||
fileio1 lda $00,x get memory address of buffer from
|
||||
sta buf page zero pointed to by x register
|
||||
sta ZP.BUFPTR page zero pointed to by x register
|
||||
lda $01,x
|
||||
sta buf+1 and pass address to device handler
|
||||
sta ZP.BUFPTR+1 and pass address to device handler
|
||||
|
||||
jsr XDOS.FCBDevIDSelect
|
||||
|
||||
lda #$FF also, set to indicate reg call made to
|
||||
sta ioaccess device handler.
|
||||
lda DEVNUM transfer device # for dispatcher
|
||||
sta unitnum to convert to unit #.
|
||||
stz p8error clear global error code.
|
||||
lda GP.DEVNUM transfer device # for dispatcher
|
||||
sta ZP.UNITNUM to convert to unit #.
|
||||
stz GP.ERROR clear global error code.
|
||||
jmp XDOS.DevCall call the driver.
|
||||
*--------------------------------------
|
||||
wfcbdat ldx #datptr point at memory address with x and
|
||||
@ -782,8 +782,8 @@ wfcbidx jsr upbmap update bitmap.
|
||||
*--------------------------------------
|
||||
XDOS.ResetFCBStatus
|
||||
ldx fcbptr
|
||||
and FCBs+FCB.F,x
|
||||
sta FCBs+FCB.F,x
|
||||
and XDOS.FCBs+FCB.F,x
|
||||
sta XDOS.FCBs+FCB.F,x
|
||||
|
||||
L4096 rts
|
||||
*--------------------------------------
|
||||
@ -808,7 +808,7 @@ L40AD lda fcbflg if this byte <> 0 then free fcb found
|
||||
|
||||
L40B9 ldy #FCB
|
||||
|
||||
L40BD stz FCBs,x but clean it first.
|
||||
L40BD stz XDOS.FCBs,x but clean it first.
|
||||
inx
|
||||
dey
|
||||
bne L40BD
|
||||
@ -818,7 +818,7 @@ L40BD stz FCBs,x but clean it first.
|
||||
ldx fcbptr
|
||||
|
||||
L40CB lda d_dev,y move ownership info.
|
||||
sta FCBs+FCB.DEVID,x note: this code depends upon the defined
|
||||
sta XDOS.FCBs+FCB.DEVID,x note: this code depends upon the defined
|
||||
inx order of both the fcb and directory entry buffer.
|
||||
iny
|
||||
cpy #6
|
||||
@ -835,7 +835,7 @@ L40CB lda d_dev,y move ownership info.
|
||||
|
||||
and #$01 read enabled bit
|
||||
|
||||
L40EB sta FCBs+FCB.ACCESS,y
|
||||
L40EB sta XDOS.FCBs+FCB.ACCESS,y
|
||||
and #$02 check for write enabled request.
|
||||
beq L40F7 branch for open as read-only
|
||||
|
||||
@ -850,33 +850,33 @@ L40F7 cpx #$04 is it a tree file type ?
|
||||
|
||||
L40FF ldx #$06 move address of 1st block of file, end
|
||||
|
||||
L4101 sta bloknml+1 of file and current usage count.
|
||||
L4101 sta ZP.BLKNUM+1 of file and current usage count.
|
||||
lda fcbptr
|
||||
ora ofcbtbl,x this is done via a translation table
|
||||
tay between directory info and fcb.
|
||||
lda d_frst,x
|
||||
sta FCBs,y
|
||||
sta XDOS.FCBs,y
|
||||
dex
|
||||
bpl L4101 last loop stores hi address of 1st block
|
||||
|
||||
sta bloknml and this is the low one.
|
||||
sta ZP.BLKNUM and this is the low one.
|
||||
ldx fcbptr
|
||||
lda cntent this was set up by 'tstopen'.
|
||||
sta FCBs,x claim fcb for this file.
|
||||
sta XDOS.FCBs,x claim fcb for this file.
|
||||
jsr alcbuffr go allocate buffer in memory tables.
|
||||
bcs L4147 if errors.
|
||||
|
||||
ldx fcbptr
|
||||
jsr XDOS.GetFCBBufX rtn addr of bufs in data & index ptrs.
|
||||
lda flevel mark level at which
|
||||
sta FCBs+FCB.FLEVEL,x file was opened.
|
||||
lda GP.FLEVEL mark level at which
|
||||
sta XDOS.FCBs+FCB.FLEVEL,x file was opened.
|
||||
|
||||
lda FCBs+FCB.STYPE,x file must be positioned at beginning.
|
||||
lda XDOS.FCBs+FCB.STYPE,x file must be positioned at beginning.
|
||||
cmp #$04 is it a tree file ?
|
||||
bcs L415E no, assume a directory.
|
||||
|
||||
lda #$FF fool the position routine into giving
|
||||
sta FCBs+FCB.MARK+2,x a valid position with preloaded data,
|
||||
sta XDOS.FCBs+FCB.MARK+2,x a valid position with preloaded data,
|
||||
|
||||
ldy #$02 etc. set desired position to 0.
|
||||
lda #$00
|
||||
@ -891,8 +891,8 @@ L413C sta tposll,y
|
||||
L4147 pha save error code.
|
||||
|
||||
ldx fcbptr free buffer space.
|
||||
stz FCBs,x necessary to release fcb also.
|
||||
lda FCBs+FCB.BUFID,x
|
||||
stz XDOS.FCBs,x necessary to release fcb also.
|
||||
lda XDOS.FCBs+FCB.BUFID,x
|
||||
beq L4156 if no bufnum, ok because never alloc'd.
|
||||
|
||||
jsr relbuffr go release buffer.
|
||||
@ -904,13 +904,13 @@ L4156 pla error code.
|
||||
L415E jsr XDOS.ReadFCB.DBLK read in 1st block of directory file.
|
||||
bcs L4147 return error after freeing buffer & fcb.
|
||||
|
||||
L4163 ldx vcbptr index to vcb.
|
||||
inc VCBs+VCB.OFCNT,x add 1 to # of files currently open
|
||||
L4163 ldx XDOS.VCBPtr index to vcb.
|
||||
inc XDOS.VCBs+VCB.OFCNT,x add 1 to # of files currently open
|
||||
|
||||
ldx fcbptr index to fcb.
|
||||
lda FCBs+FCB.ID,x return ref # to user.
|
||||
lda XDOS.FCBs+FCB.ID,x return ref # to user.
|
||||
ldy #$05
|
||||
sta (A3L),y
|
||||
sta (ZP.A3L),y
|
||||
* clc open is successful
|
||||
rts
|
||||
*--------------------------------------
|
||||
@ -926,7 +926,7 @@ L4188 tay index to next fcb.
|
||||
|
||||
inc cntent
|
||||
|
||||
L4191 lda FCBs,y is this fcb in use ?
|
||||
L4191 lda XDOS.FCBs,y is this fcb in use ?
|
||||
bne L41A3 yes.
|
||||
|
||||
txa if not, should we claim it ?
|
||||
@ -942,7 +942,7 @@ L41A3 tya add offset to index to ownership info
|
||||
tay and put it back in y.
|
||||
ldx #$06 index to directory entry owner info.
|
||||
|
||||
L41A9 lda FCBs,y all bytes must match to say that it's
|
||||
L41A9 lda XDOS.FCBs,y all bytes must match to say that it's
|
||||
cmp d_dev-1,x the same file again.
|
||||
bne L41C1 if not, then next fcb.
|
||||
|
||||
@ -951,7 +951,7 @@ L41A9 lda FCBs,y all bytes must match to say that it's
|
||||
bne L41A9 loop to check all owner info.
|
||||
|
||||
inc totent file is already open, now see
|
||||
lda FCBs+FCB.ACCESS,y if it's already opened for write. and #$02 if so report file busy (with carry set).
|
||||
lda XDOS.FCBs+FCB.ACCESS,y if it's already opened for write. and #$02 if so report file busy (with carry set).
|
||||
and #$02 if so report file busy (with carry set).
|
||||
beq L41C1 branch if this file is read access only.
|
||||
|
||||
@ -969,10 +969,10 @@ L41C1 tya calc position of next fcb.
|
||||
*--------------------------------------
|
||||
XDOS.UpdateFCBIBlk
|
||||
ldy fcbptr
|
||||
lda bloknml
|
||||
sta FCBs+FCB.IBLK,y save block address of this index in fcb
|
||||
lda bloknml+1
|
||||
sta FCBs+FCB.IBLK+1,y
|
||||
lda ZP.BLKNUM
|
||||
sta XDOS.FCBs+FCB.IBLK,y save block address of this index in fcb
|
||||
lda ZP.BLKNUM+1
|
||||
sta XDOS.FCBs+FCB.IBLK+1,y
|
||||
rts
|
||||
*--------------------------------------
|
||||
MAN
|
||||
|
@ -12,11 +12,11 @@ XDOS.Read jsr mvdbufr xfer buffer address and request count
|
||||
bcc L4205 branch if result mark < eof. adjust
|
||||
|
||||
ldy fcbptr request to read until just before eof.
|
||||
lda FCBs+FCB.EOF,y result = (eof-1) - position
|
||||
lda XDOS.FCBs+FCB.EOF,y result = (eof-1) - position
|
||||
sbc tposll
|
||||
sta cbytes
|
||||
sta rwreql
|
||||
lda FCBs+FCB.EOF+1,y
|
||||
lda XDOS.FCBs+FCB.EOF+1,y
|
||||
sbc tposlh
|
||||
sta cbytes+1
|
||||
sta rwreqh
|
||||
@ -96,7 +96,7 @@ L427B bcs L4249
|
||||
jsr XDOS.Tpos2Y get index to next block address
|
||||
|
||||
lda (zpt),y get low address
|
||||
sta bloknml
|
||||
sta ZP.BLKNUM
|
||||
inc zpt+1
|
||||
cmp (zpt),y are hi and low address the same?
|
||||
bne L4299 no, it's a real block address.
|
||||
@ -112,12 +112,12 @@ L4299 lda (zpt),y get high address
|
||||
L429C dec zpt+1
|
||||
bcs L4249 if no block to read.
|
||||
|
||||
sta bloknml+1
|
||||
sta ZP.BLKNUM+1
|
||||
lda ioaccess has 1st call gone to device yet ?
|
||||
beq L4249 no, go thru normal route
|
||||
|
||||
lda datptr+1 reset hi buffer address for dev handler
|
||||
sta buf+1
|
||||
sta ZP.BUFPTR+1
|
||||
jsr XDOS.DevCall
|
||||
bcc L424E no errors, branch always.
|
||||
|
||||
@ -135,11 +135,11 @@ rwdone ldy #$06 return total # of bytes actually read
|
||||
sec derived from cbytes-rwreq.
|
||||
lda cbytes
|
||||
sbc rwreql
|
||||
sta (A3L),y
|
||||
sta (ZP.A3L),y
|
||||
iny
|
||||
lda cbytes+1
|
||||
sbc rwreqh
|
||||
sta (A3L),y
|
||||
sta (ZP.A3L),y
|
||||
jmp rdposn leave with valid position in fcb.
|
||||
*--------------------------------------
|
||||
preprw ldy fcbptr adj pointer to user's buffer to make
|
||||
@ -148,14 +148,16 @@ preprw ldy fcbptr adj pointer to user's buffer to make
|
||||
sbc tposll
|
||||
sta usrbuf
|
||||
bcs L42E9 if no adjustment to hi address needed
|
||||
|
||||
dec usrbuf+1
|
||||
|
||||
L42E9 lda FCBs+FCB.NLMASK,y test for new line enabled.
|
||||
L42E9 lda XDOS.FCBs+FCB.NLMASK,y test for new line enabled.
|
||||
clc
|
||||
beq L42F9 if new line not enabled.
|
||||
|
||||
sec carry indicates new line enabled
|
||||
sta nlmask
|
||||
lda FCBs+FCB.NLBYTE,y move newline character to more
|
||||
lda XDOS.FCBs+FCB.NLBYTE,y move newline character to more
|
||||
sta nlchar accesible spot.
|
||||
|
||||
L42F9 ldy tposll index to 1st data.
|
||||
@ -278,9 +280,9 @@ XDOS.ReadDir jsr rdposn
|
||||
ldy #$00 provide dummy back pointer for future
|
||||
ldx fcbptr re-position. x = hi byte of last block
|
||||
|
||||
L43A6 lda FCBs+FCB.DBLK,x
|
||||
L43A6 lda XDOS.FCBs+FCB.DBLK,x
|
||||
sta (datptr),y
|
||||
stz FCBs+FCB.DBLK,x mark current block as impossible
|
||||
stz XDOS.FCBs+FCB.DBLK,x mark current block as impossible
|
||||
inx
|
||||
iny inc indexes to do both hi and low bytes
|
||||
cpy #$02
|
||||
@ -292,27 +294,27 @@ L43B7 rts
|
||||
L43B8 jmp errfix1 report how much xfer'd before error.
|
||||
*--------------------------------------
|
||||
mvcbytes ldy #$04 move request count to a more accessable location
|
||||
lda (A3L),y
|
||||
lda (ZP.A3L),y
|
||||
sta cbytes
|
||||
sta rwreql
|
||||
iny
|
||||
lda (A3L),y
|
||||
lda (ZP.A3L),y
|
||||
sta cbytes+1
|
||||
sta rwreqh
|
||||
ldy fcbptr return y = val(fcbptr),
|
||||
lda FCBs+FCB.ACCESS,y a = attributes
|
||||
lda XDOS.FCBs+FCB.ACCESS,y a = attributes
|
||||
clc and carry clear...
|
||||
rts
|
||||
*--------------------------------------
|
||||
mvdbufr ldy #$02 move the pointer to user's buffer
|
||||
lda (A3L),y to the block file manager
|
||||
lda (ZP.A3L),y to the block file manager
|
||||
sta usrbuf z-page area
|
||||
iny
|
||||
lda (A3L),y
|
||||
lda (ZP.A3L),y
|
||||
sta usrbuf+1
|
||||
|
||||
gfcbstyp ldy fcbptr return storage type
|
||||
lda FCBs+FCB.STYPE,y
|
||||
lda XDOS.FCBs+FCB.STYPE,y
|
||||
rts
|
||||
*--------------------------------------
|
||||
* this subroutine adds the requested byte count to mark and returns sum
|
||||
@ -325,7 +327,7 @@ gfcbstyp ldy fcbptr return storage type
|
||||
calcmrk ldx #$00
|
||||
ldy fcbptr
|
||||
clc
|
||||
L43EE lda FCBs+FCB.MARK,y
|
||||
L43EE lda XDOS.FCBs+FCB.MARK,y
|
||||
sta tposll,x
|
||||
sta oldmark,x
|
||||
adc cbytes,x
|
||||
@ -339,7 +341,7 @@ L43EE lda FCBs+FCB.MARK,y
|
||||
bne L43EE always.
|
||||
|
||||
eoftest lda scrtch,x new mark in scrtch.
|
||||
cmp FCBs+FCB.EOF,y is new position > eof ?
|
||||
cmp XDOS.FCBs+FCB.EOF,y is new position > eof ?
|
||||
bcc L4414 no, proceed.
|
||||
bne L4414 yes, adjust 'cbytes' request
|
||||
|
||||
@ -352,9 +354,9 @@ L4414 rts
|
||||
werreof jsr plus2fcb reset eof to pre-error position.
|
||||
|
||||
L4418 lda oldeof,x place oldeof back into fcb
|
||||
sta FCBs+FCB.EOF,y
|
||||
sta XDOS.FCBs+FCB.EOF,y
|
||||
lda oldmark,x also reset mark to last best
|
||||
sta FCBs+FCB.MARK,y write position
|
||||
sta XDOS.FCBs+FCB.MARK,y write position
|
||||
sta scrtch,x and copy mark to scrtch for test of
|
||||
dey eof less than mark.
|
||||
dex
|
||||
@ -367,12 +369,12 @@ L4418 lda oldeof,x place oldeof back into fcb
|
||||
|
||||
wadjeof jsr plus2fcb get y=fcbptr+2, x=2, a=y.
|
||||
|
||||
L4434 lda FCBs+FCB.EOF,y copy eof to old eof
|
||||
L4434 lda XDOS.FCBs+FCB.EOF,y copy eof to old eof
|
||||
sta oldeof,x
|
||||
bcc L4442 and if carry set...
|
||||
|
||||
lda scrtch,x then copy scrtch to fcb's eof.
|
||||
sta FCBs+FCB.EOF,y
|
||||
sta XDOS.FCBs+FCB.EOF,y
|
||||
|
||||
L4442 dey
|
||||
dex copy all 3 bytes
|
||||
@ -468,9 +470,9 @@ L44B8 jsr alcwblk go allocate for data block.
|
||||
sta (zpt),y store low address.
|
||||
|
||||
ldy fcbptr update fcb to indicate that this block
|
||||
sta FCBs+FCB.DBLK,y is allocated.
|
||||
sta XDOS.FCBs+FCB.DBLK,y is allocated.
|
||||
txa get high address again.
|
||||
sta FCBs+FCB.DBLK+1,y
|
||||
sta XDOS.FCBs+FCB.DBLK+1,y
|
||||
|
||||
L44E9 jsr preprw
|
||||
jsr wrtpart
|
||||
@ -583,9 +585,9 @@ L457A jsr alcwblk get another block address for the sap
|
||||
sta (zpt),y save hi address
|
||||
dec zpt+1
|
||||
ldy fcbptr make newly allocated block the current
|
||||
sta FCBs+FCB.IBLK+1,y index block.
|
||||
sta XDOS.FCBs+FCB.IBLK+1,y index block.
|
||||
txa
|
||||
sta FCBs+FCB.IBLK,y
|
||||
sta XDOS.FCBs+FCB.IBLK,y
|
||||
jsr wfcbfst save new top of tree
|
||||
bcs L45B1
|
||||
*--------------------------------------
|
||||
@ -617,18 +619,18 @@ swapdown jsr alcwblk make current seed into a sapling, allocate a block befo
|
||||
bcs .9 return errors.
|
||||
|
||||
ldy fcbptr get previous first block
|
||||
lda FCBs+FCB.1stBLK,y address into index block.
|
||||
lda XDOS.FCBs+FCB.1stBLK,y address into index block.
|
||||
pha save temporarily while swapping in new
|
||||
lda scrtch top index. get new block address (low)
|
||||
tax
|
||||
sta FCBs+FCB.1stBLK,y
|
||||
lda FCBs+FCB.1stBLK+1,y
|
||||
sta XDOS.FCBs+FCB.1stBLK,y
|
||||
lda XDOS.FCBs+FCB.1stBLK+1,y
|
||||
pha
|
||||
lda scrtch+1 and high address too
|
||||
sta FCBs+FCB.1stBLK+1,y
|
||||
sta FCBs+FCB.IBLK+1,y make new top also the current index in
|
||||
sta XDOS.FCBs+FCB.1stBLK+1,y
|
||||
sta XDOS.FCBs+FCB.IBLK+1,y make new top also the current index in
|
||||
txa memory. get low address again.
|
||||
sta FCBs+FCB.IBLK,y
|
||||
sta XDOS.FCBs+FCB.IBLK,y
|
||||
inc zpt+1 make previous the 1st entry in sub index
|
||||
pla
|
||||
sta (zpt)
|
||||
@ -641,7 +643,7 @@ swapdown jsr alcwblk make current seed into a sapling, allocate a block befo
|
||||
lda #FCB.F.STMOD
|
||||
jsr XDOS.SetFCBStatus
|
||||
|
||||
inc FCBs+FCB.STYPE,x
|
||||
inc XDOS.FCBs+FCB.STYPE,x
|
||||
|
||||
* clc no error
|
||||
.9 rts
|
||||
@ -652,10 +654,10 @@ alcwblk jsr alc1blk
|
||||
lda #FCB.F.UMOD
|
||||
jsr XDOS.SetFCBStatus
|
||||
|
||||
inc FCBs+FCB.UBLK,x
|
||||
inc XDOS.FCBs+FCB.UBLK,x
|
||||
bne .9
|
||||
|
||||
inc FCBs+FCB.UBLK+1,x
|
||||
inc XDOS.FCBs+FCB.UBLK+1,x
|
||||
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
@ -666,15 +668,15 @@ tstwprot jsr XDOS.GetFCBStatus check for 'never been modified' condition
|
||||
|
||||
jsr XDOS.FCBDevIDSelect
|
||||
|
||||
twrprot1 sta unitnum make the device status call
|
||||
twrprot1 sta ZP.UNITNUM make the device status call
|
||||
|
||||
lda bloknml+1
|
||||
lda ZP.BLKNUM+1
|
||||
pha
|
||||
lda bloknml save the current block values
|
||||
lda ZP.BLKNUM save the current block values
|
||||
pha
|
||||
stz A4L
|
||||
stz bloknml zero the block #
|
||||
stz bloknml+1
|
||||
stz ZP.CMDNUM
|
||||
stz ZP.BLKNUM zero the block #
|
||||
stz ZP.BLKNUM+1
|
||||
|
||||
jsr XDOS.DevCall
|
||||
bcs .1 branch if write protect error
|
||||
@ -682,9 +684,9 @@ twrprot1 sta unitnum make the device status call
|
||||
lda #$00 otherwise, assume no errors.
|
||||
|
||||
.1 plx
|
||||
stx bloknml restore the block #
|
||||
stx ZP.BLKNUM restore the block #
|
||||
plx
|
||||
stx bloknml+1
|
||||
stx ZP.BLKNUM+1
|
||||
|
||||
tstwprot.RTS rts
|
||||
*--------------------------------------
|
||||
|
@ -2,7 +2,7 @@ NEW
|
||||
AUTO 3,1
|
||||
*--------------------------------------
|
||||
XDOS.Close ldy #$01 close all ?
|
||||
lda (A3L),y
|
||||
lda (ZP.A3L),y
|
||||
bne XDOS.CloseOne no, just one of them.
|
||||
|
||||
sta cferr clear global close error.
|
||||
@ -10,11 +10,11 @@ XDOS.Close ldy #$01 close all ?
|
||||
|
||||
L4654 sta fcbptr save current low byte of pointer.
|
||||
tax get the level at which the file
|
||||
lda FCBs+FCB.FLEVEL,x was opened.
|
||||
cmp flevel if file's level is < global level
|
||||
lda XDOS.FCBs+FCB.FLEVEL,x was opened.
|
||||
cmp GP.FLEVEL if file's level is < global level
|
||||
bcc L4675 then don't close.
|
||||
|
||||
lda FCBs+FCB.ID,x is this reference file open ?
|
||||
lda XDOS.FCBs+FCB.ID,x is this reference file open ?
|
||||
beq L4675 no, try next.
|
||||
|
||||
jsr flush2 clean it out...
|
||||
@ -23,7 +23,7 @@ L4654 sta fcbptr save current low byte of pointer.
|
||||
jsr close2 update fcb & vcb
|
||||
|
||||
ldy #$01
|
||||
lda (A3L),y
|
||||
lda (ZP.A3L),y
|
||||
beq L4675 no error if close all.
|
||||
|
||||
bcs L46B6 close error.
|
||||
@ -51,17 +51,17 @@ XDOS.CloseOne jsr flush1 flush file 1st (including updating bitmap)
|
||||
rts
|
||||
|
||||
close2 ldx fcbptr
|
||||
lda FCBs+FCB.BUFID,x release file buffer
|
||||
lda XDOS.FCBs+FCB.BUFID,x release file buffer
|
||||
jsr relbuffr
|
||||
bcs L46B6
|
||||
|
||||
jsr XDOS.FCBDevIDSelect
|
||||
|
||||
stz FCBs,x free fcb too
|
||||
stz XDOS.FCBs,x free fcb too
|
||||
|
||||
jsr XDOS.FindVCBForDevNum get vcb pointer.
|
||||
|
||||
dec VCBs+VCB.OFCNT,x indicate one less file open.
|
||||
dec XDOS.VCBs+VCB.OFCNT,x indicate one less file open.
|
||||
|
||||
L46B4 clc
|
||||
rts
|
||||
@ -69,7 +69,7 @@ L46B4 clc
|
||||
L46B6 bcs L46E6 don't report close all error now.
|
||||
*--------------------------------------
|
||||
XDOS.Flush ldy #$01 flush all ?
|
||||
lda (A3L),y
|
||||
lda (ZP.A3L),y
|
||||
bne flush1 no, just one of them.
|
||||
|
||||
sta cferr clear global flush error.
|
||||
@ -77,7 +77,7 @@ XDOS.Flush ldy #$01 flush all ?
|
||||
|
||||
L46C3 sta fcbptr save current low byte of pointer.
|
||||
tax index to ref #.
|
||||
lda FCBs,x is this reference file open ?
|
||||
lda XDOS.FCBs,x is this reference file open ?
|
||||
beq L46D1 no, try next.
|
||||
|
||||
jsr flush2 clean it out...
|
||||
@ -104,11 +104,11 @@ flush1 stz cferr for normal refnum flush, clear global error.
|
||||
jsr XDOS.GetFCB setup pointer to fcb user references.
|
||||
bcs L46E6 return any errors.
|
||||
|
||||
L46F1 lda FCBs+FCB.ACCESS,x test to see if file is modified.
|
||||
L46F1 lda XDOS.FCBs+FCB.ACCESS,x test to see if file is modified.
|
||||
and #$02 is it write enabled ?
|
||||
beq L46D9 branch if 'read only'
|
||||
|
||||
lda FCBs+FCB.DIRTY,x has eof been modified ?
|
||||
lda XDOS.FCBs+FCB.DIRTY,x has eof been modified ?
|
||||
bmi L4704 if yes.
|
||||
|
||||
jsr XDOS.GetFCBStatus has data been modified ?
|
||||
@ -133,7 +133,7 @@ L471C ldy #0
|
||||
|
||||
jsr XDOS.FCBDevIDSelect X = FCBPtr
|
||||
|
||||
L4723 lda FCBs+FCB.DEVID,x note: this code depends on the defined
|
||||
L4723 lda XDOS.FCBs+FCB.DEVID,x note: this code depends on the defined
|
||||
sta d_dev,y order of the file control block and the
|
||||
inx temporary directory area in 'work space'
|
||||
iny
|
||||
@ -169,26 +169,26 @@ L4755 jsr entcalc set up pointer to entry.
|
||||
jsr moventry move entry to temp entry buffer in
|
||||
|
||||
ldx fcbptr 'work space'. update 'blocks used' count
|
||||
lda FCBs+FCB.UBLK,x
|
||||
lda XDOS.FCBs+FCB.UBLK,x
|
||||
sta d_usage
|
||||
lda FCBs+FCB.UBLK+1,x
|
||||
lda XDOS.FCBs+FCB.UBLK+1,x
|
||||
sta d_usage+1
|
||||
|
||||
ldy #0 and move in end of file mark whether
|
||||
|
||||
L476C lda FCBs+FCB.EOF,x needed or not.
|
||||
L476C lda XDOS.FCBs+FCB.EOF,x needed or not.
|
||||
sta d_eof,y
|
||||
iny
|
||||
cpy #$03 move all 3 bytes
|
||||
beq L4780
|
||||
|
||||
lda FCBs+FCB.1stBLK,x also move in the address of the file's
|
||||
lda XDOS.FCBs+FCB.1stBLK,x also move in the address of the file's
|
||||
sta d_filid,y first block since it might have changed
|
||||
inx since the file first opened.
|
||||
bne L476C branch always.
|
||||
|
||||
L4780 ldx fcbptr
|
||||
lda FCBs+FCB.STYPE,x the last thing to update is storage
|
||||
lda XDOS.FCBs+FCB.STYPE,x the last thing to update is storage
|
||||
asl type (y=fcbptr+2). shift into high
|
||||
asl nibble.
|
||||
asl
|
||||
@ -202,7 +202,7 @@ L4780 ldx fcbptr
|
||||
bcs glberr error.
|
||||
|
||||
ldx fcbptr mark
|
||||
stz FCBs+FCB.DIRTY,x fcb/directory as undirty.
|
||||
stz XDOS.FCBs+FCB.DIRTY,x fcb/directory as undirty.
|
||||
|
||||
lda d_dev see if bitmap should be written.
|
||||
cmp bmadev is it in same as current file ?
|
||||
@ -218,7 +218,7 @@ L47B2 clc
|
||||
*--------------------------------------
|
||||
glberr ldy #$01
|
||||
pha
|
||||
lda (A3L),y
|
||||
lda (ZP.A3L),y
|
||||
bne L47C1 not an 'all' so report now
|
||||
|
||||
clc
|
||||
@ -232,8 +232,8 @@ L47C1 pla
|
||||
*--------------------------------------
|
||||
XDOS.FCBDevIDSelect
|
||||
ldx fcbptr
|
||||
lda FCBs+FCB.DEVID,x
|
||||
sta DEVNUM
|
||||
lda XDOS.FCBs+FCB.DEVID,x
|
||||
sta GP.DEVNUM
|
||||
rts
|
||||
*--------------------------------------
|
||||
XDOS.SetFCBSType
|
||||
@ -242,25 +242,25 @@ XDOS.SetFCBSType
|
||||
lsr
|
||||
lsr
|
||||
ldy fcbptr and save it in fcb.
|
||||
sta FCBs+FCB.STYPE,y
|
||||
sta XDOS.FCBs+FCB.STYPE,y
|
||||
rts
|
||||
*--------------------------------------
|
||||
XDOS.ClrFCBStatus
|
||||
ldy fcbptr clear allocation states for data block
|
||||
lda FCBs+FCB.F,y and both levels of indexes/
|
||||
lda XDOS.FCBs+FCB.F,y and both levels of indexes/
|
||||
and #$F8
|
||||
sta FCBs+FCB.F,y indicates that either they exist now
|
||||
sta XDOS.FCBs+FCB.F,y indicates that either they exist now
|
||||
rts or unnecessary for current position.
|
||||
*--------------------------------------
|
||||
XDOS.GetFCBStatus
|
||||
ldx fcbptr index to fcb.
|
||||
lda FCBs+FCB.F,x return status byte.
|
||||
lda XDOS.FCBs+FCB.F,x return status byte.
|
||||
rts
|
||||
*--------------------------------------
|
||||
XDOS.SetFCBStatus
|
||||
ldx fcbptr
|
||||
ora FCBs+FCB.F,x
|
||||
sta FCBs+FCB.F,x
|
||||
ora XDOS.FCBs+FCB.F,x
|
||||
sta XDOS.FCBs+FCB.F,x
|
||||
rts
|
||||
*--------------------------------------
|
||||
L47CA lda #MLI.E.LOCKED access error
|
||||
@ -276,7 +276,7 @@ XDOS.SetEOF jsr gfcbstyp can only move end of tree, sapling or seed.
|
||||
asl
|
||||
asl
|
||||
sta stortyp may be used later.
|
||||
lda FCBs+FCB.ACCESS,y
|
||||
lda XDOS.FCBs+FCB.ACCESS,y
|
||||
and #$02 is write enabled to set new eof ?
|
||||
beq L47CA no, access error.
|
||||
|
||||
@ -288,7 +288,7 @@ XDOS.SetEOF jsr gfcbstyp can only move end of tree, sapling or seed.
|
||||
iny upon contraction.
|
||||
ldx #$02 all 3 bytes of the eof
|
||||
|
||||
L47EF lda FCBs+FCB.EOF,y
|
||||
L47EF lda XDOS.FCBs+FCB.EOF,y
|
||||
sta oldeof,x
|
||||
dey
|
||||
dex
|
||||
@ -297,7 +297,7 @@ L47EF lda FCBs+FCB.EOF,y
|
||||
ldy #$04
|
||||
ldx #$02
|
||||
|
||||
L47FD lda (A3L),y position mark to new eof
|
||||
L47FD lda (ZP.A3L),y position mark to new eof
|
||||
sta tposll,x
|
||||
dey
|
||||
dex
|
||||
@ -318,8 +318,8 @@ eofset ldy #$04
|
||||
inx
|
||||
inx
|
||||
|
||||
L481C lda (A3L),y
|
||||
sta FCBs+FCB.EOF,x
|
||||
L481C lda (ZP.A3L),y
|
||||
sta XDOS.FCBs+FCB.EOF,x
|
||||
dex
|
||||
dey
|
||||
cpy #$02 all 3 bytes moved ?
|
||||
@ -341,7 +341,7 @@ purge jsr flush1 make sure file is current
|
||||
iny
|
||||
ldx #$02
|
||||
|
||||
L4840 lda FCBs+FCB.MARK,y
|
||||
L4840 lda XDOS.FCBs+FCB.MARK,y
|
||||
cmp tposll,x compare until not equal or carry clear.
|
||||
bcc L485F branch if eof > mark.
|
||||
|
||||
@ -355,7 +355,7 @@ L484E ldy fcbptr
|
||||
ldx #$00
|
||||
|
||||
L4853 lda tposll,x fake position, correct position will
|
||||
sta FCBs+FCB.MARK,y be made below...
|
||||
sta XDOS.FCBs+FCB.MARK,y be made below...
|
||||
iny
|
||||
inx
|
||||
cpx #$03 move all 3 bytes
|
||||
@ -393,9 +393,9 @@ L485F jsr tkfrecnt force free block count before releasing
|
||||
|
||||
L489F sta dseed+1
|
||||
L48A2 ldy fcbptr also must pass file's 1st block address.
|
||||
lda FCBs+FCB.1stBLK,y
|
||||
lda XDOS.FCBs+FCB.1stBLK,y
|
||||
sta firstbl
|
||||
lda FCBs+FCB.1stBLK+1,y
|
||||
lda XDOS.FCBs+FCB.1stBLK+1,y
|
||||
sta firstbh
|
||||
stz deblock lastly, initialize # of blocks to
|
||||
stz deblock+1 be free'd.
|
||||
@ -408,10 +408,10 @@ L48A2 ldy fcbptr also must pass file's 1st block address.
|
||||
ldx #$00
|
||||
|
||||
L48C2 lda firstbl,x
|
||||
sta FCBs+FCB.1stBLK,y move in possible new first file block
|
||||
lda FCBs+FCB.UBLK,y address. adjust usage count also
|
||||
sta XDOS.FCBs+FCB.1stBLK,y move in possible new first file block
|
||||
lda XDOS.FCBs+FCB.UBLK,y address. adjust usage count also
|
||||
sbc deblock,x
|
||||
sta FCBs+FCB.UBLK,y
|
||||
sta XDOS.FCBs+FCB.UBLK,y
|
||||
iny
|
||||
inx
|
||||
txa
|
||||
@ -429,10 +429,10 @@ L48C2 lda firstbl,x
|
||||
|
||||
ldx #$02
|
||||
|
||||
L48F2 lda FCBs+FCB.MARK,y tell 'rdposn' to go to correct
|
||||
L48F2 lda XDOS.FCBs+FCB.MARK,y tell 'rdposn' to go to correct
|
||||
sta tposll,x
|
||||
eor #$80 position from incorrect place.
|
||||
sta FCBs+FCB.MARK,y
|
||||
sta XDOS.FCBs+FCB.MARK,y
|
||||
dey
|
||||
dex
|
||||
bpl L48F2
|
||||
@ -470,8 +470,8 @@ XDOS.GetEOF ldx fcbptr index to end of file mark
|
||||
|
||||
ldy #$02 and index to user's call parameters
|
||||
|
||||
L4924 lda FCBs+FCB.EOF,x
|
||||
sta (A3L),y
|
||||
L4924 lda XDOS.FCBs+FCB.EOF,x
|
||||
sta (ZP.A3L),y
|
||||
inx
|
||||
iny
|
||||
cpy #$05
|
||||
@ -482,13 +482,13 @@ L4924 lda FCBs+FCB.EOF,x
|
||||
*--------------------------------------
|
||||
XDOS.NewLine ldy #$02 adjust newline status for open file.
|
||||
|
||||
lda (A3L),y on or off ?
|
||||
lda (ZP.A3L),y on or off ?
|
||||
ldx fcbptr it will be 0 if off.
|
||||
sta FCBs+FCB.NLMASK,x set new line mask
|
||||
sta XDOS.FCBs+FCB.NLMASK,x set new line mask
|
||||
|
||||
iny
|
||||
lda (A3L),y and move in 'new-line' byte
|
||||
sta FCBs+FCB.NLBYTE,x
|
||||
lda (ZP.A3L),y and move in 'new-line' byte
|
||||
sta XDOS.FCBs+FCB.NLBYTE,x
|
||||
|
||||
clc no error possible
|
||||
rts
|
||||
@ -513,7 +513,7 @@ XDOS.GetFileInfo
|
||||
and #$7F strip bit used by setinfo
|
||||
tax
|
||||
lda d_stor,x move directory info to call spec. table
|
||||
sta (A3L),y
|
||||
sta (ZP.A3L),y
|
||||
dey
|
||||
cpy #$03
|
||||
bcs .2 if all info bytes moved, retn carry clr
|
||||
@ -526,7 +526,7 @@ XDOS.SetFileInfo
|
||||
jsr XDOS.FindFile get the file to work on.
|
||||
bcs L49CF if error.
|
||||
|
||||
lda bubit see if backup bit can be cleared
|
||||
lda GP.BUBIT see if backup bit can be cleared
|
||||
eor #$20
|
||||
and d_attr
|
||||
and #$20
|
||||
@ -537,7 +537,7 @@ XDOS.SetFileInfo
|
||||
L49B9 ldx inftabl-3,y get index to corresponding 'd.' table.
|
||||
bmi L49C3 branch if parameter can't be set.
|
||||
|
||||
lda (A3L),y
|
||||
lda (ZP.A3L),y
|
||||
sta d_stor,x
|
||||
|
||||
L49C3 dey has user's request been satisfied ?
|
||||
@ -552,7 +552,7 @@ L49C3 dey has user's request been satisfied ?
|
||||
L49CF rts
|
||||
|
||||
L49D0 ldy #$0B
|
||||
lda (A3L),y was clock null input ?
|
||||
lda (ZP.A3L),y was clock null input ?
|
||||
bne XDOS.SetFileInfoEx.8
|
||||
|
||||
jmp drevise update with clock also...
|
||||
@ -564,7 +564,7 @@ XDOS.SetFileInfoEx
|
||||
ldx #S.FIEX.BLKPTR+2-1
|
||||
ldy #S.FIEX.BLKPTR+2-1+3
|
||||
|
||||
.2 lda (A3L),y
|
||||
.2 lda (ZP.A3L),y
|
||||
sta d_stor,x
|
||||
dey
|
||||
dex
|
||||
@ -583,7 +583,7 @@ XDOS.GetFileInfoEx
|
||||
ldy #S.FIEX.BLKPTR+2-1+3
|
||||
|
||||
.2 lda d_stor,x
|
||||
sta (A3L),y
|
||||
sta (ZP.A3L),y
|
||||
dey
|
||||
dex
|
||||
bpl .2
|
||||
@ -592,7 +592,7 @@ XDOS.GetFileInfoEx
|
||||
ldy #S.FIEX.ACL+7+3
|
||||
|
||||
.3 lda h_acl,x
|
||||
sta (A3L),y
|
||||
sta (ZP.A3L),y
|
||||
dey
|
||||
dex
|
||||
bpl .3
|
||||
@ -613,19 +613,19 @@ XDOS.GetFileInfoVol
|
||||
stz reql force a count of free blocks.
|
||||
stz reqh
|
||||
|
||||
ldx vcbptr
|
||||
ldx XDOS.VCBPtr
|
||||
jsr tkfrecnt get a fresh count of free blocks on
|
||||
|
||||
ldx vcbptr this volume.
|
||||
lda VCBs+VCB.FBLK+1,x return total blocks and total in use.
|
||||
ldx XDOS.VCBPtr this volume.
|
||||
lda XDOS.VCBs+VCB.FBLK+1,x return total blocks and total in use.
|
||||
sta reqh 1st transfer 'free' blocks to zpage
|
||||
lda VCBs+VCB.FBLK,x for later subtraction to determine
|
||||
lda XDOS.VCBs+VCB.FBLK,x for later subtraction to determine
|
||||
sta reql the 'used' count.
|
||||
|
||||
lda VCBs+VCB.TBLK+1,x transfer to 'd.' table as aux id
|
||||
lda XDOS.VCBs+VCB.TBLK+1,x transfer to 'd.' table as aux id
|
||||
sta d_auxid+1 (total block count is considered aux id
|
||||
pha for the volume)
|
||||
lda VCBs+VCB.TBLK,x
|
||||
lda XDOS.VCBs+VCB.TBLK,x
|
||||
sta d_auxid
|
||||
sec subtract and report the number of
|
||||
sbc reql blocks 'in use'
|
||||
@ -647,13 +647,13 @@ XDOS.ACL jsr XDOS.FindDirOrVol
|
||||
ldx #7
|
||||
|
||||
ldy #S.FIEX.ACL+3
|
||||
lda (A3L),y
|
||||
lda (ZP.A3L),y
|
||||
beq .2
|
||||
|
||||
ldy #S.FIEX.ACL+7+3
|
||||
|
||||
.1 lda (A3L),y
|
||||
sta gbuf+$14,x
|
||||
.1 lda (ZP.A3L),y
|
||||
sta XDOS.GBuf+$14,x
|
||||
dey
|
||||
dex
|
||||
bpl .1
|
||||
@ -666,8 +666,8 @@ XDOS.ACL jsr XDOS.FindDirOrVol
|
||||
|
||||
.2 ldy #S.FIEX.ACL+7+3
|
||||
|
||||
.3 lda gbuf+$14,x
|
||||
sta (A3L),y
|
||||
.3 lda XDOS.GBuf+$14,x
|
||||
sta (ZP.A3L),y
|
||||
dey
|
||||
dex
|
||||
bpl .3
|
||||
@ -684,13 +684,13 @@ XDOS.Rename jsr XDOS.CheckPath look for source (original) file.
|
||||
XDOS.RenameVol jsr XDOS.GetRenPath syntax new name.
|
||||
bcs L49FD rename error.
|
||||
|
||||
ldy pathbuf find out if only rootname for new name
|
||||
ldy XDOS.PathBuf find out if only rootname for new name
|
||||
iny
|
||||
lda pathbuf,y must be $FF if volume name only.
|
||||
lda XDOS.PathBuf,y must be $FF if volume name only.
|
||||
bne L4A72 if not single name
|
||||
|
||||
ldx vcbptr check for open files before changing.
|
||||
lda VCBs+VCB.OFCNT,x
|
||||
ldx XDOS.VCBPtr check for open files before changing.
|
||||
lda XDOS.VCBs+VCB.OFCNT,x
|
||||
beq L49FF if volume not busy.
|
||||
|
||||
lda #MLI.E.OPEN file busy error.
|
||||
@ -698,18 +698,18 @@ L49FD sec
|
||||
rts
|
||||
|
||||
L49FF ldy #0 get newname's length
|
||||
lda pathbuf,y
|
||||
lda XDOS.PathBuf,y
|
||||
ora #$F0 (root file storage type)
|
||||
jsr XDOS.UpdateHdr update root directory.
|
||||
bcs .9 rename error.
|
||||
|
||||
ldy #$00
|
||||
ldx vcbptr update vcb also.
|
||||
ldx XDOS.VCBPtr update vcb also.
|
||||
|
||||
.1 lda pathbuf,y move new name to vcb.
|
||||
.1 lda XDOS.PathBuf,y move new name to vcb.
|
||||
beq .8
|
||||
|
||||
sta VCBs,x
|
||||
sta XDOS.VCBs,x
|
||||
iny next character
|
||||
inx
|
||||
bra .1
|
||||
@ -720,8 +720,8 @@ L49FF ldy #0 get newname's length
|
||||
XDOS.RenameFileDir
|
||||
jsr getnamptr set y = 1st char of path, x = 0.
|
||||
|
||||
L4A21 lda pathbuf,y move original name to gbuf
|
||||
sta gbuf,x for later comparison to new name.
|
||||
L4A21 lda XDOS.PathBuf,y move original name to XDOS.GBuf
|
||||
sta XDOS.GBuf,x for later comparison to new name.
|
||||
bmi L4A2D if last character has been moved
|
||||
|
||||
iny otherwise, get the next one.
|
||||
@ -733,9 +733,9 @@ L4A2D jsr XDOS.GetRenPath get new name syntaxed.
|
||||
|
||||
jsr getnamptr set y = path, x = 0.
|
||||
|
||||
lda pathbuf,y now compare new name with old name
|
||||
lda XDOS.PathBuf,y now compare new name with old name
|
||||
|
||||
L4A38 cmp gbuf,x to make sure they are in the same dir.
|
||||
L4A38 cmp XDOS.GBuf,x to make sure they are in the same dir.
|
||||
php save result of comparison.
|
||||
and #$F0 was last char really a count ?
|
||||
bne L4A46 if not.
|
||||
@ -748,26 +748,26 @@ L4A46 plp result of last comparison ?
|
||||
|
||||
inx bump pointers.
|
||||
iny
|
||||
lda pathbuf,y was it the last character ?
|
||||
lda XDOS.PathBuf,y was it the last character ?
|
||||
bne L4A38 if not.
|
||||
|
||||
clc no operation, names were the same.
|
||||
rts
|
||||
|
||||
L4A52 ldy rnptr index to last name in the chain.
|
||||
lda pathbuf,y get last name length.
|
||||
lda XDOS.PathBuf,y get last name length.
|
||||
sec
|
||||
adc rnptr
|
||||
tay
|
||||
lda pathbuf,y this byte should be $00 !
|
||||
lda XDOS.PathBuf,y this byte should be $00 !
|
||||
bne L4A72 if not, bad path error.
|
||||
|
||||
ldx namptr index to last of original name
|
||||
lda gbuf,x
|
||||
lda XDOS.GBuf,x
|
||||
sec
|
||||
adc namptr
|
||||
tax
|
||||
lda gbuf,x this byte should also be $00.
|
||||
lda XDOS.GBuf,x this byte should also be $00.
|
||||
beq L4A76 if so, continue processing.
|
||||
|
||||
L4A72 lda #MLI.E.INVPATH bad pathname error.
|
||||
@ -814,12 +814,12 @@ L4AAE jsr XDOS.GetRenPath since both names go into the directory,
|
||||
bcs L4A74 syntax the new name to get the local
|
||||
|
||||
ldy rnptr name address. y = index to local name
|
||||
ldx pathbuf,y length. adj y to last char of new name.
|
||||
ldx XDOS.PathBuf,y length. adj y to last char of new name.
|
||||
tya
|
||||
adc pathbuf,y
|
||||
adc XDOS.PathBuf,y
|
||||
tay
|
||||
|
||||
L4ABE lda pathbuf,y move local name to dir entry workspace.
|
||||
L4ABE lda XDOS.PathBuf,y move local name to dir entry workspace.
|
||||
sta d_stor,x
|
||||
dey
|
||||
dex
|
||||
@ -828,7 +828,7 @@ L4ABE lda pathbuf,y move local name to dir entry workspace.
|
||||
lda d_stor preserve file storage type.
|
||||
and #$F0 strip off old name length.
|
||||
tax
|
||||
ora pathbuf,y add in new name's length.
|
||||
ora XDOS.PathBuf,y add in new name's length.
|
||||
sta d_stor
|
||||
cpx #$D0 that file must be changed also.
|
||||
bne L4AF0 branch if not directory type.
|
||||
@ -837,7 +837,7 @@ L4ABE lda pathbuf,y move local name to dir entry workspace.
|
||||
bcs L4A74 errors.
|
||||
|
||||
ldy rnptr change the header's name to match the
|
||||
lda pathbuf,y owner's new name. get local name length.
|
||||
lda XDOS.PathBuf,y owner's new name. get local name length.
|
||||
ora #$E0 assume it's a header.
|
||||
jsr XDOS.UpdateHdr
|
||||
bcs L4A74
|
||||
@ -865,9 +865,9 @@ L4B39 lda d_attr make sure ok to destroy file.
|
||||
bmi L4B45
|
||||
|
||||
lda #MLI.E.LOCKED access error
|
||||
jsr GP.P8errv
|
||||
jsr GP.SYSERR
|
||||
|
||||
L4B45 lda DEVNUM last device used.
|
||||
L4B45 lda GP.DEVNUM last device used.
|
||||
jsr twrprot1 test for write protected hardware
|
||||
bcs L4B66 before going thru deallocation.
|
||||
|
||||
@ -928,15 +928,15 @@ L4BA1 dec h_fcnt mark header with one less file.
|
||||
L4BAF cmp #$01 adjust carry accordingly
|
||||
rts
|
||||
|
||||
dvcbrev ldx vcbptr update block free count in vcb. point to vcb of correct device.
|
||||
dvcbrev ldx XDOS.VCBPtr update block free count in vcb. point to vcb of correct device.
|
||||
lda deblock get # of blocks recently freed.
|
||||
adc VCBs+VCB.FBLK,x
|
||||
sta VCBs+VCB.FBLK,x update current free block count.
|
||||
adc XDOS.VCBs+VCB.FBLK,x
|
||||
sta XDOS.VCBs+VCB.FBLK,x update current free block count.
|
||||
lda deblock+1
|
||||
adc VCBs+VCB.FBLK+1,x
|
||||
sta VCBs+VCB.FBLK+1,x
|
||||
adc XDOS.VCBs+VCB.FBLK+1,x
|
||||
sta XDOS.VCBs+VCB.FBLK+1,x
|
||||
|
||||
stz VCBs+VCB.BMAPIDX,x force re-scan from 1st bitmap
|
||||
stz XDOS.VCBs+VCB.BMAPIDX,x force re-scan from 1st bitmap
|
||||
|
||||
* lda #0 ?????
|
||||
|
||||
@ -950,14 +950,14 @@ L4BCF cmp #$D0 is this a directory file ?
|
||||
jsr fndbmap make sure a buffer available for bitmap
|
||||
bcs L4C1A if error.
|
||||
|
||||
jsr XDOS.ReadGBuf_d_frst read 1st block of directory into gbuf
|
||||
jsr XDOS.ReadGBuf_d_frst read 1st block of directory into XDOS.GBuf
|
||||
bcs L4C1A
|
||||
|
||||
lda gbuf+37 do any files exist in this directory ?
|
||||
ora gbuf+38
|
||||
lda XDOS.GBuf+37 do any files exist in this directory ?
|
||||
ora XDOS.GBuf+38
|
||||
bne L4C1Abis if so, access error.
|
||||
|
||||
L4BF6 sta gbuf+4 make it an invalid subdirectory
|
||||
L4BF6 sta XDOS.GBuf+4 make it an invalid subdirectory
|
||||
.DO LOWERCASE=1
|
||||
jsr XDOS.WriteGBufDir
|
||||
.ELSE
|
||||
@ -965,17 +965,17 @@ L4BF6 sta gbuf+4 make it an invalid subdirectory
|
||||
.FIN
|
||||
bcs L4C1A
|
||||
|
||||
L4BFE lda gbuf+2 get forward link.
|
||||
L4BFE lda XDOS.GBuf+2 get forward link.
|
||||
cmp #$01 test for null block into carry.
|
||||
ldx gbuf+3 get the rest of the block address.
|
||||
ldx XDOS.GBuf+3 get the rest of the block address.
|
||||
bne L4C0A branch if not null.
|
||||
bcc L4BCD was the low part null as well ?
|
||||
|
||||
L4C0A jsr XDOS.DeallocAX free this block.
|
||||
bcs L4C1A
|
||||
|
||||
lda gbuf+2
|
||||
ldx gbuf+3
|
||||
lda XDOS.GBuf+2
|
||||
ldx XDOS.GBuf+3
|
||||
jsr XDOS.ReadGBufAX read next DIR block (no need to unpack)
|
||||
bcc L4BFE loop until all freed
|
||||
|
||||
@ -984,7 +984,7 @@ L4C1A rts
|
||||
L4C1Abis lda #MLI.E.LOCKED access error.
|
||||
.HS 2C BIT ABS
|
||||
L4C1B lda #MLI.E.INCFF file incompatible
|
||||
jsr GP.P8errv
|
||||
jsr GP.SYSERR
|
||||
|
||||
fcbused pha mark fcb as dirty so the directory will be flushed on 'flush'.
|
||||
phy save regs.
|
||||
@ -992,7 +992,7 @@ fcbused pha mark fcb as dirty so the directory will be flushed on 'flush
|
||||
ldy fcbptr
|
||||
|
||||
lda #$80 mark fcb as dirty.
|
||||
sta FCBs+FCB.DIRTY,y save it back
|
||||
sta XDOS.FCBs+FCB.DIRTY,y save it back
|
||||
|
||||
ply and restore regs.
|
||||
pla
|
||||
@ -1000,10 +1000,10 @@ fcbused pha mark fcb as dirty so the directory will be flushed on 'flush
|
||||
*--------------------------------------
|
||||
XDOS.UpdateHdr ldx #$00
|
||||
|
||||
.1 sta gbuf+4,x
|
||||
.1 sta XDOS.GBuf+4,x
|
||||
inx
|
||||
iny
|
||||
lda pathbuf,y
|
||||
lda XDOS.PathBuf,y
|
||||
bne .1
|
||||
|
||||
.DO LOWERCASE=1
|
||||
@ -1016,8 +1016,10 @@ getnamptr ldy #$00 return pointer to 1st name of path.
|
||||
bit prfxflg is this a prefixed name ?
|
||||
bmi .1 branch if not.
|
||||
|
||||
ldy newpfxptr
|
||||
ldy GP.NEWPFXPTR
|
||||
|
||||
.1 ldx #$00
|
||||
|
||||
rts
|
||||
*--------------------------------------
|
||||
MAN
|
||||
|
@ -2,7 +2,7 @@ NEW
|
||||
AUTO 3,1
|
||||
*--------------------------------------
|
||||
* 'detree' deallocates blocks from tree files. it is assumed that the device has
|
||||
* been pre-selected and the 'gbuf' may be used.
|
||||
* been pre-selected and the 'XDOS.GBuf' may be used.
|
||||
*
|
||||
* on entry:
|
||||
* stortype = storage type in upper nibble, lower nibble is undisturbed.
|
||||
@ -32,7 +32,7 @@ detree lda stortyp which kind of tree ?
|
||||
bcc L4C59 branch if it is.
|
||||
|
||||
lda #$0C block allocation error.
|
||||
jsr GP.SysDeath P8 system death vector
|
||||
jsr GP.SYSDEATH P8 system death vector
|
||||
|
||||
* seedling file type - make sure first desirable block is the only
|
||||
* block available in a seedling file.
|
||||
@ -54,7 +54,7 @@ L4C51 lda dtree can't have any blocks in this range
|
||||
L4C59 lda #$80
|
||||
sta topdest for tree top start at end, work backwards.
|
||||
|
||||
L4C5E jsr drdfrst read specified first block into gbuf.
|
||||
L4C5E jsr drdfrst read specified first block into XDOS.GBuf.
|
||||
bcs L4CC2 return errors.
|
||||
|
||||
ldy topdest get current pointer to top indexes.
|
||||
@ -63,12 +63,12 @@ L4C5E jsr drdfrst read specified first block into gbuf.
|
||||
|
||||
ldx #$07 buffer up to 8 sapling index block
|
||||
|
||||
L4C6D lda gbuf,y addresses. fetch low block address
|
||||
L4C6D lda XDOS.GBuf,y addresses. fetch low block address
|
||||
sta dealbufl,x and save it.
|
||||
ora gbuf+$100,y is it a real block that is allocated?
|
||||
ora XDOS.GBuf+$100,y is it a real block that is allocated?
|
||||
beq L4C81 branch if phantom block.
|
||||
|
||||
lda gbuf+$100,y fetch high block address
|
||||
lda XDOS.GBuf+$100,y fetch high block address
|
||||
sta dealbufh,x and save it.
|
||||
dex decrement and test for dealc buf filled.
|
||||
bmi L4C93 branch if 8 addresses fetched.
|
||||
@ -91,13 +91,13 @@ L4C93 dey decrement to prepare for next time.
|
||||
|
||||
L4C99 stx dtmpx save index to dealc buf.
|
||||
lda dealbufl,x
|
||||
sta bloknml
|
||||
sta ZP.BLKNUM
|
||||
ora dealbufh,x finished ?
|
||||
beq L4C5E branch if done with this level.
|
||||
|
||||
lda dealbufh,x complete address with high byte,
|
||||
sta bloknml+1
|
||||
jsr XDOS.ReadGBuf read sapling level into gbuf.
|
||||
sta ZP.BLKNUM+1
|
||||
jsr XDOS.ReadGBuf read sapling level into XDOS.GBuf.
|
||||
bcs L4CC2 return errors.
|
||||
|
||||
jsr dealblk go free all data indexes in this block
|
||||
@ -116,7 +116,7 @@ L4CC2 rts sapling block numbers.
|
||||
|
||||
L4CC3 ldy dtree deallocate all sapling blocks greater
|
||||
iny than specified block.
|
||||
jsr dalblk1 (master index in gbuf)
|
||||
jsr dalblk1 (master index in XDOS.GBuf)
|
||||
bcs L4CC2 if errors.
|
||||
|
||||
jsr XDOS.WriteGBuf write updated master index back to disk.
|
||||
@ -125,14 +125,14 @@ L4CC3 ldy dtree deallocate all sapling blocks greater
|
||||
ldy dtree figure out if tree can become sapling.
|
||||
beq L4CEB branch if it can.
|
||||
|
||||
lda gbuf,y otherwise, continue with partial, deallocation of last sapling index.
|
||||
ora gbuf+$100,y is there such a sapling index block ?
|
||||
lda XDOS.GBuf,y otherwise, continue with partial, deallocation of last sapling index.
|
||||
ora XDOS.GBuf+$100,y is there such a sapling index block ?
|
||||
beq L4CC2 all done if not.
|
||||
|
||||
lda gbuf,y
|
||||
ldx gbuf+$100,y read in sapling level to be modified.
|
||||
lda XDOS.GBuf,y
|
||||
ldx XDOS.GBuf+$100,y read in sapling level to be modified.
|
||||
|
||||
jsr XDOS.ReadGBufAX read highest sapling index into gbuf.
|
||||
jsr XDOS.ReadGBufAX read highest sapling index into XDOS.GBuf.
|
||||
bcc L4CF5
|
||||
|
||||
rts
|
||||
@ -141,7 +141,7 @@ L4CEB jsr shrink shrink tree to sapling
|
||||
bcs L4CC2
|
||||
|
||||
sapdel0 jsr drdfrst read specified sapling level index
|
||||
bcs L4CC2 into gbuf. branch if error.
|
||||
bcs L4CC2 into XDOS.GBuf. branch if error.
|
||||
|
||||
L4CF5 ldy dsap pointer to last of desirable indexes.
|
||||
iny inc to 1st undesirable.
|
||||
@ -156,14 +156,14 @@ L4CF5 ldy dsap pointer to last of desirable indexes.
|
||||
L4D05 ldy dsap prepare to clean up last data block.
|
||||
beq L4D1F branch if possibility of making a seed.
|
||||
|
||||
L4D0A lda gbuf,y fetch low order data block address.
|
||||
ora gbuf+$100,y is it a real block ?
|
||||
L4D0A lda XDOS.GBuf,y fetch low order data block address.
|
||||
ora XDOS.GBuf+$100,y is it a real block ?
|
||||
beq L4CC2 if not, then done.
|
||||
|
||||
lda gbuf,y
|
||||
ldx gbuf+$100,y
|
||||
lda XDOS.GBuf,y
|
||||
ldx XDOS.GBuf+$100,y
|
||||
|
||||
jsr XDOS.ReadGBufAX go read data block into gbuf.
|
||||
jsr XDOS.ReadGBufAX go read data block into XDOS.GBuf.
|
||||
bcc L4D2E branch if good read
|
||||
|
||||
L4D1E rts or return error.
|
||||
@ -187,7 +187,7 @@ L4D2E ldy dseed+1 check high byte for no deletion.
|
||||
|
||||
L4D39 lda #$00
|
||||
|
||||
L4D3B sta gbuf+$100,y zero out unwanted data
|
||||
L4D3B sta XDOS.GBuf+$100,y zero out unwanted data
|
||||
iny
|
||||
bne L4D3B
|
||||
|
||||
@ -196,7 +196,7 @@ L4D3B sta gbuf+$100,y zero out unwanted data
|
||||
|
||||
ldy dseed
|
||||
|
||||
L4D49 sta gbuf,y
|
||||
L4D49 sta XDOS.GBuf,y
|
||||
iny
|
||||
bne L4D49
|
||||
|
||||
@ -204,27 +204,27 @@ L4D4F jmp XDOS.WriteGBuf update data block to disk.
|
||||
|
||||
L4D52 rts return error status.
|
||||
|
||||
drdfrst lda firstbl read specified 1st block into gbuf
|
||||
drdfrst lda firstbl read specified 1st block into XDOS.GBuf
|
||||
ldx firstbh
|
||||
jmp XDOS.ReadGBufAX go read it
|
||||
|
||||
*--------------------------------------
|
||||
* beware that dealloc may bring in a new bitmap block and may destroy
|
||||
* locations 46 and 47 which are used to point to the current index block.
|
||||
|
||||
*--------------------------------------
|
||||
shrink ldx firstbh first deallocate top index block
|
||||
phx
|
||||
lda firstbl
|
||||
pha save block address of this index block.
|
||||
jsr XDOS.DeallocAX free it from the bitmap
|
||||
pla
|
||||
sta bloknml set master of sapling
|
||||
sta ZP.BLKNUM set master of sapling
|
||||
pla index block address.
|
||||
sta bloknml+1
|
||||
sta ZP.BLKNUM+1
|
||||
bcs L4D1E report errors.
|
||||
|
||||
lda gbuf get # of new 1st block from old index.
|
||||
lda XDOS.GBuf get # of new 1st block from old index.
|
||||
sta firstbl
|
||||
lda gbuf+$100
|
||||
lda XDOS.GBuf+$100
|
||||
sta firstbh
|
||||
ldy #$00
|
||||
jsr swapme flip that one entry in old top index.
|
||||
@ -235,15 +235,15 @@ shrink ldx firstbh first deallocate top index block
|
||||
jmp XDOS.WriteGBuf write the (deallocated) old top index.
|
||||
|
||||
dealblk ldy #$00 start at beginning.
|
||||
dalblk1 lda bloknml save disk address of gbuf's data.
|
||||
dalblk1 lda ZP.BLKNUM save disk address of XDOS.GBuf's data.
|
||||
pha
|
||||
lda bloknml+1
|
||||
lda ZP.BLKNUM+1
|
||||
pha
|
||||
|
||||
L4D96 sty saptr save current index.
|
||||
lda gbuf,y get low address of block to deallocate.
|
||||
lda XDOS.GBuf,y get low address of block to deallocate.
|
||||
cmp #$01 test for null block into carry.
|
||||
ldx gbuf+$100,y get remainder of block address.
|
||||
ldx XDOS.GBuf+$100,y get remainder of block address.
|
||||
bne L4DA5 branch if not null.
|
||||
|
||||
bcc L4DB0 was the low part null too ?
|
||||
@ -262,9 +262,9 @@ L4DB0 iny next block address.
|
||||
|
||||
L4DB4 tax save error code, if any.
|
||||
pla restore blocknm (16 bit)
|
||||
sta bloknml+1
|
||||
sta ZP.BLKNUM+1
|
||||
pla
|
||||
sta bloknml
|
||||
sta ZP.BLKNUM
|
||||
txa restore return code
|
||||
rts
|
||||
|
||||
@ -274,11 +274,11 @@ swapme lda delflag swapping or zeroing ?
|
||||
tax make x = 0.
|
||||
beq L4DCB zero the index (always taken).
|
||||
|
||||
L4DC5 ldx gbuf+$100,y index high
|
||||
lda gbuf,y index low
|
||||
L4DCB sta gbuf+$100,y save index high
|
||||
L4DC5 ldx XDOS.GBuf+$100,y index high
|
||||
lda XDOS.GBuf,y index low
|
||||
L4DCB sta XDOS.GBuf+$100,y save index high
|
||||
txa
|
||||
sta gbuf,y save index low
|
||||
sta XDOS.GBuf,y save index low
|
||||
rts done.
|
||||
*--------------------------------------
|
||||
* MEMMGR memory manager
|
||||
@ -286,7 +286,8 @@ L4DCB sta gbuf+$100,y save index high
|
||||
* allocate buffer in memory tables
|
||||
*--------------------------------------
|
||||
alcbuffr ldy #$04 index to user specified buffer.
|
||||
alcbufr1 lda (A3L),y this buffer must be on a page boundary.
|
||||
|
||||
alcbufr1 lda (ZP.A3L),y this buffer must be on a page boundary.
|
||||
tax save for validation.
|
||||
cmp #$08
|
||||
bcc L4E1E cannot be lower than video !
|
||||
@ -296,7 +297,7 @@ alcbufr1 lda (A3L),y this buffer must be on a page boundary.
|
||||
|
||||
sta datptr+1
|
||||
dey
|
||||
lda (A3L),y low address should be zero !
|
||||
lda (ZP.A3L),y low address should be zero !
|
||||
sta datptr
|
||||
bne L4E1E error if not page boundary.
|
||||
|
||||
@ -306,8 +307,8 @@ alcbufr1 lda (A3L),y this buffer must be on a page boundary.
|
||||
inx
|
||||
|
||||
L4DED dex test for conflicts.
|
||||
jsr cmembit test for free buffer space
|
||||
and MEMTABL,y P8 memory bitmap
|
||||
jsr XDOS.X2MemTablYA test for free buffer space
|
||||
and GP.MEMTABL,y
|
||||
bne L4E1E report memory conflict, if any.
|
||||
|
||||
cpx datptr+1 test all 4 pages.
|
||||
@ -319,19 +320,17 @@ L4DED dex test for conflicts.
|
||||
inx
|
||||
|
||||
L4DFE dex set proper bits to 1
|
||||
jsr cmembit
|
||||
ora MEMTABL,y to mark it's allocation.
|
||||
sta MEMTABL,y
|
||||
jsr XDOS.MemTablEOR
|
||||
cpx datptr+1 set all 4 pages
|
||||
bne L4DFE
|
||||
|
||||
ldy fcbptr calculate buffer number
|
||||
lda FCBs,y
|
||||
lda XDOS.FCBs,y
|
||||
asl buffer number = (entnum) * 2.
|
||||
sta FCBs+FCB.BUFID,y save it in fcb.
|
||||
sta XDOS.FCBs+FCB.BUFID,y save it in fcb.
|
||||
tax use entnum * 2 as index to global
|
||||
lda datptr+1 buffer addr tables. get addr already
|
||||
sta buftbl-1,x validated as good. store hi addr
|
||||
sta GB.BUFTABL-1,x validated as good. store hi addr
|
||||
|
||||
clc (entnums start at 1, not 0)
|
||||
rts
|
||||
@ -341,14 +340,14 @@ L4E1E lda #MLI.E.BADBUF buffer is in use or not legal
|
||||
rts
|
||||
*--------------------------------------
|
||||
relbuffr tax index into global buffer table.
|
||||
lda buftbl-2,x
|
||||
lda GB.BUFTABL-2,x
|
||||
sta bufaddrl
|
||||
lda buftbl-1,x
|
||||
lda GB.BUFTABL-1,x
|
||||
sta bufaddrh
|
||||
beq relbuffr.8 branch if unallocated buffer space.
|
||||
|
||||
stz buftbl-1,x take address out of buffer list.
|
||||
stz buftbl-2,x (x was set up by getbufadr)
|
||||
stz GB.BUFTABL-1,x take address out of buffer list.
|
||||
stz GB.BUFTABL-2,x (x was set up by getbufadr)
|
||||
|
||||
freebuf ldx bufaddrh get hi buffer address
|
||||
inx add 4 pages to account for 1k space.
|
||||
@ -357,33 +356,13 @@ freebuf ldx bufaddrh get hi buffer address
|
||||
inx
|
||||
|
||||
.1 dex drop to next lower page.
|
||||
jsr cmembit get bit and position to memtable of
|
||||
eor #$FF this page. invert mask.
|
||||
and MEMTABL,y mark address as free space.
|
||||
sta MEMTABL,y
|
||||
jsr XDOS.MemTablEOR
|
||||
cpx bufaddrh all pages freed ?
|
||||
bne .1 no.
|
||||
|
||||
relbuffr.8 clc no error.
|
||||
rts
|
||||
*--------------------------------------
|
||||
* calculate memory allocation bit position.
|
||||
* on entry: x = high address of buffer, low address assumed zero.
|
||||
* on exit: acc = allocation bit mask, x = unchanged, y = pointer to memtabl byte
|
||||
*--------------------------------------
|
||||
cmembit txa page address
|
||||
and #$07 which page in any 2k set ?
|
||||
tay use as index to determine
|
||||
lda whichbit,y bit position representation.
|
||||
pha save bit position mask for now.
|
||||
txa page address.
|
||||
lsr
|
||||
lsr determine 2k set
|
||||
lsr
|
||||
tay return it in y.
|
||||
pla restore bit mask. return bit position
|
||||
rts in a & y, pointer to memtabl in x.
|
||||
*--------------------------------------
|
||||
valdbuf lda usrbuf+1 high address of user's buffer
|
||||
cmp #$02 must be greater than page 2.
|
||||
bcc L4E1E report bad buffer
|
||||
@ -406,8 +385,8 @@ L4E76 clc
|
||||
inx loop thru all affected pages.
|
||||
|
||||
vldbuf1 dex check next lower page.
|
||||
jsr cmembit
|
||||
and MEMTABL,y if 0 then no conflict.
|
||||
jsr XDOS.X2MemTabLYA
|
||||
and GP.MEMTABL,y if 0 then no conflict.
|
||||
bne L4E1E branch if conflict.
|
||||
|
||||
cpx usrbuf+1 was that the last (lowest) page ?
|
||||
@ -416,12 +395,35 @@ vldbuf1 dex check next lower page.
|
||||
clc all pages ok.
|
||||
rts
|
||||
*--------------------------------------
|
||||
* calculate memory allocation bit position.
|
||||
* on entry: x = high address of buffer, low address assumed zero.
|
||||
* on exit: acc = allocation bit mask, x = unchanged, y = pointer to memtabl byte
|
||||
*--------------------------------------
|
||||
XDOS.MemTablEOR jsr XDOS.X2MemTablYA
|
||||
eor GP.MEMTABL,y
|
||||
sta GP.MEMTABL,y
|
||||
rts
|
||||
*--------------------------------------
|
||||
XDOS.X2MemTablYA
|
||||
txa page address
|
||||
and #$07 which page in any 2k set ?
|
||||
tay use as index to determine
|
||||
lda whichbit,y bit position representation.
|
||||
pha save bit position mask for now.
|
||||
txa page address.
|
||||
lsr
|
||||
lsr determine 2k set
|
||||
lsr
|
||||
tay return it in y.
|
||||
pla restore bit mask. return bit position
|
||||
rts in a & y, pointer to memtabl in x.
|
||||
*--------------------------------------
|
||||
XDOS.GetBuf ldy #$02 give user address of file buffer referenced by refnum.
|
||||
lda bufaddrl
|
||||
sta (A3L),y
|
||||
sta (ZP.A3L),y
|
||||
iny
|
||||
lda bufaddrh
|
||||
sta (A3L),y
|
||||
sta (ZP.A3L),y
|
||||
clc no errors possible
|
||||
rts
|
||||
*--------------------------------------
|
||||
@ -482,53 +484,53 @@ XDOS.IsValidFirstChar.SEC
|
||||
* move 3 pages of dispatcher from 'displc2' to 'dispadr'
|
||||
* this move routine must be resident above $E000 at all times
|
||||
*--------------------------------------
|
||||
calldisp lda RRAMWRAMBNK2 read/write RAM bank 2
|
||||
lda RRAMWRAMBNK2
|
||||
XDOS.CallDisp lda IO.RRAMWRAMBNK2 read/write RAM bank 2
|
||||
lda IO.RRAMWRAMBNK2
|
||||
|
||||
stz A1L
|
||||
stz ZP.A1L
|
||||
lda #$D1
|
||||
sta A1L+1
|
||||
sta ZP.A1L+1
|
||||
|
||||
stz A2L
|
||||
stz ZP.A2L
|
||||
lda #$10
|
||||
sta A2L+1
|
||||
sta ZP.A2L+1
|
||||
|
||||
ldy #$00
|
||||
ldx #$03 3 pages to move.
|
||||
|
||||
.1 lda (A1L),y
|
||||
sta (A2L),y
|
||||
.1 lda (ZP.A1L),y
|
||||
sta (ZP.A2L),y
|
||||
iny
|
||||
bne .1
|
||||
|
||||
inc A1L+1 pointers to next page
|
||||
inc A2L+1
|
||||
inc ZP.A1L+1 pointers to next page
|
||||
inc ZP.A2L+1
|
||||
dex move all pages needed
|
||||
bne .1
|
||||
|
||||
lda RRAMWRAMBNK1 read/write RAM bank 1
|
||||
lda RRAMWRAMBNK1 swap mli space back in
|
||||
lda IO.RRAMWRAMBNK1 read/write RAM bank 1
|
||||
lda IO.RRAMWRAMBNK1 swap mli space back in
|
||||
|
||||
stz mliact MLI active flag
|
||||
stz GP.MLIACTV MLI active flag
|
||||
|
||||
stz softev
|
||||
stz ROM.SOFTEV
|
||||
lda #$10 point RESET to dispatch entry
|
||||
sta softev+1
|
||||
sta ROM.SOFTEV+1
|
||||
eor #$A5
|
||||
sta pwredup power up byte
|
||||
sta ROM.PWREDUP power up byte
|
||||
|
||||
jmp $1000
|
||||
*--------------------------------------
|
||||
XDOS.SPREMAP ldx #$03 assume 3 parameters.
|
||||
lda A4L command number
|
||||
sta cmdnum
|
||||
lda ZP.CMDNUM
|
||||
sta .5
|
||||
bne .1 taken if not status call
|
||||
|
||||
ldy #XDOS.SPStatus set up memory for the status list buffer
|
||||
sty buf fake up the prodos parameters
|
||||
sty ZP.BUFPTR fake up the prodos parameters
|
||||
ldy /XDOS.SPStatus
|
||||
sty buf+1
|
||||
stz bloknml set statcode = 0 for simple status call
|
||||
sty ZP.BUFPTR+1
|
||||
stz ZP.BLKNUM set statcode = 0 for simple status call
|
||||
|
||||
.1 cmp #$03 format command ?
|
||||
bne .2 no.
|
||||
@ -537,7 +539,7 @@ XDOS.SPREMAP ldx #$03 assume 3 parameters.
|
||||
|
||||
.2 stx XDOS.SPParams set # of parms.
|
||||
|
||||
lda unitnum DSSS0000
|
||||
lda ZP.UNITNUM DSSS0000
|
||||
lsr turn unit number into an index
|
||||
lsr
|
||||
lsr
|
||||
@ -547,23 +549,23 @@ XDOS.SPREMAP ldx #$03 assume 3 parameters.
|
||||
lda XDOS.SPUnit-1,x get the smartport unit number and
|
||||
sta XDOS.SPParams.U store into smartport parm list.
|
||||
lda XDOS.SPVectLo-1,x
|
||||
sta sp_vector+1 copy smartport entry address
|
||||
sta .4+1 copy smartport entry address
|
||||
lda XDOS.SPVectHi-1,x
|
||||
sta sp_vector+2
|
||||
sta .4+2
|
||||
|
||||
ldx #$04 copy buffer pointer and block #
|
||||
|
||||
.3 lda buf-1,x from prodos parameters
|
||||
sta XDOS.SPParams.B-1,x to smartport parameter block
|
||||
.3 lda ZP.BUFPTR-1,x from prodos parameters
|
||||
sta XDOS.SPParams.B-1,x to smartport parameter block
|
||||
dex
|
||||
bne .3
|
||||
|
||||
sp_vector jsr $0000 smartport call (entry address gets modified)
|
||||
cmdnum .HS 00 command #
|
||||
.4 jsr $0000 smartport call (entry address gets modified)
|
||||
.5 .HS 00 command #
|
||||
.DA XDOS.SPParams
|
||||
bcs .9
|
||||
|
||||
ldx cmdnum status call ?
|
||||
ldx .5 status call ?
|
||||
bne .9 no...
|
||||
|
||||
ldx XDOS.SPStatus+1 else get the block count
|
||||
@ -588,22 +590,26 @@ XDOS.SPParams.U .HS 00 unit number
|
||||
XDOS.SPParams.B .HS 0000 data buffer
|
||||
.HS 000000 block number (3 bytes)
|
||||
*--------------------------------------
|
||||
XDOS.TBX jmp (.1,x)
|
||||
XDOS.TBX bit IO.RRAMWRAMBNK1 Get RW access to LC
|
||||
jsr .1
|
||||
jmp IRQ.ToRomRTS
|
||||
|
||||
.1 .DA XDOS.TBX.MemReset
|
||||
.1 jmp (.2,x)
|
||||
|
||||
.2 .DA XDOS.TBX.MemReset
|
||||
.DA XDOS.TBX.EnumBlk
|
||||
.DA XDOS.TBX.EnumNext
|
||||
*--------------------------------------
|
||||
XDOS.TBX.MemReset
|
||||
ldx #$17
|
||||
|
||||
.1 stz MEMTABL,x P8 memory bitmap
|
||||
.1 stz GP.MEMTABL,x P8 memory bitmap
|
||||
dex
|
||||
bne .1
|
||||
|
||||
inc MEMTABL+$17 protect global page
|
||||
inc GP.MEMTABL+$17 protect global page
|
||||
lda #$CF protect zero page, stack and page 1
|
||||
sta MEMTABL
|
||||
sta GP.MEMTABL
|
||||
rts
|
||||
*--------------------------------------
|
||||
XDOS.TBX.EnumBlk
|
||||
@ -689,7 +695,7 @@ XDOS.TBX.SECRTS sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
XDOS.ZPT.InitGBuf
|
||||
lda /gbuf
|
||||
lda /XDOS.GBuf
|
||||
|
||||
XDOS.ZPT.InitA sta zpt+1
|
||||
lda #4
|
||||
@ -865,8 +871,8 @@ d_dhdr .HS 0000 file directory header block address
|
||||
scrtch .HS 00000000 scratch area for allocation address conversion.
|
||||
oldeof .HS 000000 temp used in r/w
|
||||
oldmark .HS 000000
|
||||
xvcbptr .HS 00 used in 'cmpvcb' as a temp
|
||||
vcbptr .HS 00
|
||||
*xvcbptr .HS 00 used in 'cmpvcb' as a temp
|
||||
*XDOS.VCBPtr .HS 00
|
||||
fcbptr .HS 00
|
||||
fcbflg .HS 00
|
||||
reql .HS 00
|
||||
@ -877,13 +883,13 @@ entcntl .HS 00
|
||||
entcnth .HS 00
|
||||
cntent .HS 00
|
||||
nofree .HS 00
|
||||
bmcnt .HS 00
|
||||
*bmcnt .HS 00
|
||||
saptr .HS 00
|
||||
pathcnt .HS 00
|
||||
p_dev .HS 00
|
||||
p_blok .HS 0000
|
||||
bmptr .HS 00
|
||||
basval .HS 00
|
||||
*bmptr .HS 00
|
||||
*basval .HS 00
|
||||
half .HS 00
|
||||
|
||||
* bitmap info tables
|
||||
@ -902,15 +908,13 @@ nlmask .HS 00
|
||||
ioaccess .HS 00 has a call been made to disk device handler ?
|
||||
cmdtemp .HS 00
|
||||
bkbitflg .HS 00 used to set or clear backup bit
|
||||
duplflag .HS 00
|
||||
vcbentry .HS 00
|
||||
|
||||
* xdos temporary variables
|
||||
|
||||
namcnt .HS 00
|
||||
rnptr .HS 00
|
||||
namptr .HS 00
|
||||
vnptr .HS 00
|
||||
*vnptr .HS 00
|
||||
prfxflg .HS 00
|
||||
cferr .HS 00
|
||||
|
||||
@ -962,10 +966,13 @@ XDOS.DATA.LEN .EQ *-XDOS.DATA
|
||||
.LIST ON
|
||||
XDOS.FREE .EQ $FEFD-*-XDOS.DATA.LEN (2.0.3 = $0C)
|
||||
.LIST OFF
|
||||
cortdisp .EQ $FEFD
|
||||
cortflag .EQ $FEFF cortland flag. 1 = Cortland system (must stay within page boundary)
|
||||
XDOS.CortDisp .EQ $FEFD
|
||||
XDOS.CortFlag .EQ $FEFF cortland flag. 1 = Cortland system (must stay within page boundary)
|
||||
*--------------------------------------
|
||||
.EP
|
||||
*--------------------------------------
|
||||
XDOS.LEN .EQ *-XDOS.START
|
||||
*--------------------------------------
|
||||
XDOS.LEN .EQ *-XDOS
|
||||
MAN
|
||||
SAVE usr/src/prodos.fx/prodos.s.xdos.f
|
||||
LOAD usr/src/prodos.fx/prodos.s
|
||||
|
@ -2,11 +2,13 @@ NEW
|
||||
AUTO 3,1
|
||||
*--------------------------------------
|
||||
* If Called by ProDOS : SEI
|
||||
* If Called directly from DEVPTRS vectors : ????
|
||||
* If Called directly from GP.DEVPTRS vectors : ????
|
||||
*--------------------------------------
|
||||
XRW.START cld $D8 to flag language card bank 1 (main)
|
||||
XRW.START .PH XRW
|
||||
|
||||
lda unitnum get unit number.
|
||||
XRW.START1 cld $D8 to flag language card bank 1 (main)
|
||||
|
||||
lda ZP.UNITNUM get unit number.
|
||||
|
||||
pha
|
||||
|
||||
@ -28,7 +30,7 @@ XRW.START cld $D8 to flag language card bank 1 (main)
|
||||
pla
|
||||
|
||||
and #$7F mask off high bit.
|
||||
sta A2L 0SSS0000 for IO indexing
|
||||
sta ZP.A2L 0SSS0000 for IO indexing
|
||||
|
||||
* make sure other drives in other slots are stopped
|
||||
|
||||
@ -52,7 +54,7 @@ XRW.START cld $D8 to flag language card bank 1 (main)
|
||||
lda XRW.montimeh
|
||||
bne .1
|
||||
*--------------------------------------
|
||||
XRW.Blk2TS lda bloknml
|
||||
XRW.Blk2TS lda ZP.BLKNUM
|
||||
sta XRW.ReqTrack
|
||||
|
||||
and #7
|
||||
@ -64,7 +66,7 @@ XRW.Blk2TS lda bloknml
|
||||
rol
|
||||
sta XRW.ReqSector
|
||||
|
||||
lda bloknml+1
|
||||
lda ZP.BLKNUM+1
|
||||
|
||||
ldx #3
|
||||
|
||||
@ -73,7 +75,7 @@ XRW.Blk2TS lda bloknml
|
||||
dex
|
||||
bne .1
|
||||
*--------------------------------------
|
||||
ldx A2L
|
||||
ldx ZP.A2L
|
||||
jsr XRW.ReadMode
|
||||
|
||||
jsr XRW.CheckMotorOn
|
||||
@ -85,7 +87,7 @@ XRW.Blk2TS lda bloknml
|
||||
lda #$E8 24 up to 0
|
||||
sta XRW.montimeh
|
||||
|
||||
lda unitnum determine drive 1 or 2.
|
||||
lda ZP.UNITNUM determine drive 1 or 2.
|
||||
cmp XRW.LastUnitUsed same slot/drive used before ?
|
||||
sta XRW.LastUnitUsed save it for next time.
|
||||
php keep results of compare.
|
||||
@ -97,7 +99,7 @@ XRW.Blk2TS lda bloknml
|
||||
|
||||
.3 lda IO.D2.DrvSel1,x
|
||||
|
||||
ldx A2L
|
||||
ldx ZP.A2L
|
||||
lda IO.D2.DrvOn,x turn on the drive.
|
||||
|
||||
plp was it the same drive ?
|
||||
@ -129,7 +131,7 @@ XRW.Blk2TS lda bloknml
|
||||
jsr XRW.CheckMotorOn is drive present ?
|
||||
beq XRW.E.ND
|
||||
*--------------------------------------
|
||||
XRW.Cmd lda A4L get command #
|
||||
XRW.Cmd lda ZP.CMDNUM get command #
|
||||
bne .1
|
||||
|
||||
jsr XRW.TestWP 0 = status
|
||||
@ -164,13 +166,13 @@ XRW.Cmd lda A4L get command #
|
||||
|
||||
bcs XRW.E.IO
|
||||
|
||||
.4 inc buf+1
|
||||
.4 inc ZP.BUFPTR+1
|
||||
|
||||
inc XRW.ReqSector
|
||||
inc XRW.ReqSector
|
||||
|
||||
jsr XRW.SectorIO get 2nd half of block
|
||||
dec buf+1
|
||||
dec ZP.BUFPTR+1
|
||||
|
||||
bcc XRW.E.OK
|
||||
|
||||
@ -188,7 +190,7 @@ XRW.E.OK plp RESTORE IRQ STATE
|
||||
clc
|
||||
lda #0
|
||||
|
||||
XRW.E.EXIT ldx A2L
|
||||
XRW.E.EXIT ldx ZP.A2L
|
||||
bit IO.D2.DrvOff,x
|
||||
rts
|
||||
*--------------------------------------
|
||||
@ -237,8 +239,8 @@ XRW.Read txa get slot #
|
||||
sta rd7+1
|
||||
sta rd8+1
|
||||
|
||||
lda buf modify storage addresses also
|
||||
ldy buf+1
|
||||
lda ZP.BUFPTR modify storage addresses also
|
||||
ldy ZP.BUFPTR+1
|
||||
sta ref3+1
|
||||
sty ref3+2
|
||||
sec
|
||||
@ -288,14 +290,14 @@ L574A lda IO.D2.RData,x
|
||||
ldy #$AA
|
||||
lda #$00
|
||||
|
||||
L5757 sta pcl use z-page for keeping checksum
|
||||
L5757 sta ZP.PCL use z-page for keeping checksum
|
||||
|
||||
rd4 ldx IO.D2.RData+$60 warning: self modified
|
||||
bpl rd4
|
||||
|
||||
lda XRW.Nib2FC-$96,x
|
||||
sta nbuf2-$AA,y save the two-bit groups in nbuf.
|
||||
eor pcl update checksum.
|
||||
eor ZP.PCL update checksum.
|
||||
iny next position in nbuf.
|
||||
bne L5757 loop for all $56 two-bit groups.
|
||||
|
||||
@ -351,7 +353,7 @@ rd8 ldx IO.D2.RData+$60 warning: self modified
|
||||
eor XRW.Nib2FC-$96,x checksum ok ?
|
||||
bne L57CC error if not.
|
||||
|
||||
ldx A2L test end marks.
|
||||
ldx ZP.A2L test end marks.
|
||||
|
||||
L57C2 lda IO.D2.RData,x
|
||||
bpl L57C2
|
||||
@ -365,12 +367,12 @@ L57CC sec
|
||||
|
||||
L57CD pla place last byte into user buffer
|
||||
ldy #$55
|
||||
sta (buf),y
|
||||
sta (ZP.BUFPTR),y
|
||||
.LIST ON
|
||||
XRW.Read.RTS rts
|
||||
.LIST OFF
|
||||
*--------------------------------------
|
||||
XRW.TestWP ldx A2L
|
||||
XRW.TestWP ldx ZP.A2L
|
||||
lda IO.D2.ReadProt,x test for write protected
|
||||
lda IO.D2.ReadMode,x
|
||||
rol write protect-->carry-->bit 0=1
|
||||
@ -399,7 +401,7 @@ XRW.Write lda IO.D2.ReadProt,x (4) PREWRITE MODE
|
||||
ora IO.D2.WShift,x (4)
|
||||
|
||||
ldy nbuf2 (4)
|
||||
sty pcl (3)
|
||||
sty ZP.PCL (3)
|
||||
|
||||
ldy #6 (2)
|
||||
nop (2)
|
||||
@ -436,8 +438,8 @@ L583D eor nbuf2-1,y (4) xor with current (NO MORE PAGE CROSS)
|
||||
tax (2) index to 7-bit nibl
|
||||
lda XRW.FC2Nib,x (4) must not cross page boundary
|
||||
|
||||
* ldx A2L (3) restore slot index
|
||||
ldx >A2L (4) absolute reference to zero page
|
||||
* ldx ZP.A2L (3) restore slot index
|
||||
ldx >ZP.A2L (4) absolute reference to zero page
|
||||
|
||||
sta IO.D2.WLoad,x (5) store encoded byte
|
||||
lda IO.D2.WShift,x (4) handshake
|
||||
@ -446,7 +448,7 @@ L583D eor nbuf2-1,y (4) xor with current (NO MORE PAGE CROSS)
|
||||
|
||||
* end of write byte loop
|
||||
|
||||
lda pcl (3) get prior nibl (from nbuf2)
|
||||
lda ZP.PCL (3) get prior nibl (from nbuf2)
|
||||
|
||||
wrefd1 ldy #$00 (2) warning: load value modified by prenib.
|
||||
|
||||
@ -461,17 +463,17 @@ wrefa2 lda $1000,y (4) prior nibl. warning: address modified by prenib.
|
||||
iny (2) all done with this page ?
|
||||
bne wrefa1 (3-) loop until page end.
|
||||
|
||||
lda pch (3) get next (precalculated & translated) nibl.
|
||||
lda ZP.PCH (3) get next (precalculated & translated) nibl.
|
||||
beq L58C0 (2+) branch if code written was page aligned.
|
||||
|
||||
lda A2H (3) get byte address of last byte to be written.
|
||||
lda ZP.A2H (3) get byte address of last byte to be written.
|
||||
beq L58B3 (2+) branch if only 1 byte left to write.
|
||||
|
||||
lsr (2) test for odd or even last byte (carry set/clear)
|
||||
lda pch (3) restore nibl to acc.
|
||||
lda ZP.PCH (3) restore nibl to acc.
|
||||
sta IO.D2.WLoad,x (5)
|
||||
lda IO.D2.WShift,x (4)
|
||||
lda A1L (3) = byte 0 of 2nd page xor'd with byte 1 if
|
||||
lda ZP.A1L (3) = byte 0 of 2nd page xor'd with byte 1 if
|
||||
nop (2) above test set carry.
|
||||
iny (2) y=1
|
||||
bcs L5899 (2+) branch if last byte to be odd.
|
||||
@ -487,7 +489,7 @@ wrefa4 lda $1100,y (4) warning: modified by prenib
|
||||
iny (2) got prior nibl, point to next
|
||||
wrefa5 eor $1100,y (4) warning: modified by prenib
|
||||
|
||||
L5899 cpy A2H (3) set carry if this is the last nibl
|
||||
L5899 cpy ZP.A2H (3) set carry if this is the last nibl
|
||||
and #$FC (2) strip low 2 bits
|
||||
tax (2)
|
||||
lda XRW.FC2Nib,x (4)
|
||||
@ -501,7 +503,7 @@ wrefa6 lda $1100,y (4) get prior nibl. warning: modified by prenib
|
||||
|
||||
L58B1 bcs L58C0 (3) branch always.
|
||||
|
||||
L58B3 lda >pch (4) absolute reference to zero page
|
||||
L58B3 lda >ZP.PCH (4) absolute reference to zero page
|
||||
sta IO.D2.WLoad,x (5)
|
||||
lda IO.D2.WShift,x (4)
|
||||
pha (3) waste 14 micro-seconds total
|
||||
@ -509,7 +511,7 @@ L58B3 lda >pch (4) absolute reference to zero page
|
||||
pha (3)
|
||||
pla (4)
|
||||
|
||||
L58C0 ldx A1H (3) use last nibl (anded with $FC) for checksum
|
||||
L58C0 ldx ZP.A1H (3) use last nibl (anded with $FC) for checksum
|
||||
lda XRW.FC2Nib,x (4)
|
||||
wrefd5 ldx #$60 (2) restore slot. warning: modified by prenib
|
||||
sta IO.D2.WLoad,x (5)
|
||||
@ -578,7 +580,7 @@ XRW.Wait100usecA
|
||||
rts
|
||||
*--------------------------------------
|
||||
XRW.CheckMotorOn
|
||||
ldx A2L
|
||||
ldx ZP.A2L
|
||||
XRW.CheckMotorOnX
|
||||
ldy #0 init loop counter.
|
||||
|
||||
@ -601,7 +603,7 @@ XRW.ReadAddr ldy #$FC
|
||||
.LIST OFF
|
||||
sty XRW.CheckSum init nibble counter to $FCFC
|
||||
|
||||
ldx A2L get slot #
|
||||
ldx ZP.A2L get slot #
|
||||
|
||||
.1 iny
|
||||
bne .2 counter LO
|
||||
@ -705,7 +707,7 @@ XRW.TrackSelect lda #2
|
||||
|
||||
rol A = 0/2
|
||||
|
||||
ora A2L
|
||||
ora ZP.A2L
|
||||
tay y = n0/n2
|
||||
|
||||
lda IO.D2.Ph0On,y PhOn 0/2 for Head0 or 1/3 for Head1
|
||||
@ -829,7 +831,7 @@ XRW.SeekYA sta XRW.D2Trk-1,x will be current track at the end
|
||||
|
||||
jsr XRW.Wait25600usec
|
||||
|
||||
XRW.AllPhOff ldy A2L
|
||||
XRW.AllPhOff ldy ZP.A2L
|
||||
lda IO.D2.Ph0Off,y
|
||||
lda IO.D2.Ph0Off+2,y
|
||||
lda IO.D2.Ph0Off+4,y
|
||||
@ -847,7 +849,7 @@ XRW.AllPhOff ldy A2L
|
||||
.10 rts
|
||||
*--------------------------------------
|
||||
XRW.SeekPhOnY and #6
|
||||
ora A2L
|
||||
ora ZP.A2L
|
||||
tay
|
||||
lda IO.D2.Ph0On,y
|
||||
rts
|
||||
@ -859,12 +861,12 @@ XRW.SeekPhOnY and #6
|
||||
* Out:
|
||||
* A =
|
||||
*--------------------------------------
|
||||
XRW.Trk2Qtrk sta pch
|
||||
XRW.Trk2Qtrk sta ZP.PCH
|
||||
|
||||
lda XRW.D2VolNum-1,x
|
||||
bne .1
|
||||
|
||||
.10 lda pch standard SS 4 qtrack stepping
|
||||
.10 lda ZP.PCH standard SS 4 qtrack stepping
|
||||
asl
|
||||
asl
|
||||
rts
|
||||
@ -874,7 +876,7 @@ XRW.Trk2Qtrk sta pch
|
||||
cmp #$85
|
||||
bcs .10 > 192 ? must be a buggy 254
|
||||
|
||||
lsr pch 2 sides
|
||||
lsr ZP.PCH 2 sides
|
||||
|
||||
.2 phx
|
||||
and #%00000111 stepping
|
||||
@ -883,7 +885,7 @@ XRW.Trk2Qtrk sta pch
|
||||
lda #0
|
||||
clc
|
||||
|
||||
.3 adc pch
|
||||
.3 adc ZP.PCH
|
||||
dex
|
||||
bne .3
|
||||
|
||||
@ -901,8 +903,8 @@ XRW.Trk2Qtrk sta pch
|
||||
* on exit: a,x,y undefined. write routine modified to do direct conversion
|
||||
* of high 6 bits of user's buffer data.
|
||||
*--------------------------------------
|
||||
XRW.PreNibble lda buf self-modify the addresses because of
|
||||
ldy buf+1 the fast timing required.
|
||||
XRW.PreNibble lda ZP.BUFPTR self-modify the addresses because of
|
||||
ldy ZP.BUFPTR+1 the fast timing required.
|
||||
|
||||
clc all offsets are minus $AA.
|
||||
adc #$02 the highest set is buf+$AC.
|
||||
@ -962,40 +964,40 @@ prn3 lda $10AC,y warning: self modified. get byte from highest group.
|
||||
iny inc to next set.
|
||||
bne prn1 loop until all $56 nibls formed.
|
||||
|
||||
ldy buf now prepare data bytes for write16 subr.
|
||||
ldy ZP.BUFPTR now prepare data bytes for write16 subr.
|
||||
dey prepare end address.
|
||||
sty A2H
|
||||
lda buf
|
||||
sty ZP.A2H
|
||||
lda ZP.BUFPTR
|
||||
sta wrefd1+1 warning: the following storage addresses
|
||||
beq L595F starting with 'wref' are refs into code
|
||||
|
||||
eor #$FF space, changed by this routine.
|
||||
tay index to last byte of page in (buf).
|
||||
lda (buf),y pre-niblize the last byte of the page
|
||||
lda (ZP.BUFPTR),y pre-niblize the last byte of the page
|
||||
iny with the first byte of the next page.
|
||||
eor (buf),y
|
||||
eor (ZP.BUFPTR),y
|
||||
and #$FC
|
||||
tax
|
||||
lda XRW.FC2Nib,x get disk 7-bit nible equivalent.
|
||||
|
||||
L595F sta pch
|
||||
L595F sta ZP.PCH
|
||||
beq L596F branch if data to be written is page aligned.
|
||||
|
||||
lda A2H check if last byte is even
|
||||
lda ZP.A2H check if last byte is even
|
||||
lsr or odd address. shift even/odd -> carry.
|
||||
lda (buf),y if even, then leave intact.
|
||||
lda (ZP.BUFPTR),y if even, then leave intact.
|
||||
bcc L596D branch if odd.
|
||||
|
||||
iny if even, then pre-xor with byte 1.
|
||||
eor (buf),y
|
||||
L596D sta A1L save result for write routine.
|
||||
eor (ZP.BUFPTR),y
|
||||
L596D sta ZP.A1L save result for write routine.
|
||||
|
||||
L596F ldy #$FF index to last byte of data to write.
|
||||
lda (buf),y to be used as a checksum.
|
||||
lda (ZP.BUFPTR),y to be used as a checksum.
|
||||
and #$FC strip extra bits
|
||||
sta A1H and save it.
|
||||
sta ZP.A1H and save it.
|
||||
|
||||
ldy buf+1 now modify address references to
|
||||
ldy ZP.BUFPTR+1 now modify address references to
|
||||
sty wrefa1+2 user data.
|
||||
sty wrefa2+2
|
||||
|
||||
@ -1005,7 +1007,7 @@ L596F ldy #$FF index to last byte of data to write.
|
||||
sty wrefa5+2
|
||||
sty wrefa6+2
|
||||
|
||||
ldx A2L and lastly, index references to
|
||||
ldx ZP.A2L and lastly, index references to
|
||||
stx wrefd2+1 controller.
|
||||
stx wrefd3+1
|
||||
stx wrefd4+1
|
||||
@ -1167,7 +1169,12 @@ XRW.FC2Nib .HS 96
|
||||
.HS 010303FE
|
||||
.HS 030303FF
|
||||
*--------------------------------------
|
||||
.EP
|
||||
*--------------------------------------
|
||||
.LIST ON
|
||||
XRW.LEN .EQ *-XRW.START
|
||||
.LIST OFF
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE usr/src/prodos.fx/prodos.s.xrw
|
||||
LOAD usr/src/prodos.fx/prodos.s
|
||||
|
@ -5,157 +5,46 @@ NEW
|
||||
.OR $2000
|
||||
.TF PRODOS,TSYS
|
||||
*--------------------------------------
|
||||
KVER .EQ 23 release 2.0.3
|
||||
*--------------------------------------
|
||||
READCAT .EQ 1 Boot Block read Catalog at $C00
|
||||
ENHFILENAME .EQ 1
|
||||
LOWERCASE .EQ 1
|
||||
ACL .EQ 1
|
||||
LOGO .EQ 1
|
||||
PM .EQ 1
|
||||
*--------------------------------------
|
||||
NSC.IOBASE .EQ $C300
|
||||
AUXLC .EQ 0
|
||||
M.PM .EQ 1
|
||||
M.RAM .EQ 1
|
||||
*--------------------------------------
|
||||
.INB inc/zp.i
|
||||
.INB inc/io.i
|
||||
.INB inc/io.iigs.i
|
||||
.INB inc/io.d2.i
|
||||
.INB inc/monitor.i
|
||||
.INB inc/mli.i
|
||||
.INB inc/mli.e.i
|
||||
.INB inc/rom.ii.i
|
||||
.INB inc/rom.iie.i
|
||||
.INB inc/rom.iigs.i
|
||||
*--------------------------------------
|
||||
MMStartUp .EQ $0202
|
||||
NewHandle .EQ $0902
|
||||
PtrToHand .EQ $2802
|
||||
MessageCenter .EQ $1501
|
||||
DisposeHandle .EQ $1002
|
||||
MMShutDown .EQ $0302
|
||||
ReadTimeHex .EQ $0D03
|
||||
Int2Hex .EQ $220B
|
||||
TLTextMountVolume .EQ $1201
|
||||
*--------------------------------------
|
||||
.MA SHORTMX
|
||||
sep #$30
|
||||
.EM
|
||||
.MA SHORTM
|
||||
sep #$20
|
||||
.EM
|
||||
.MA SHORTX
|
||||
sep #$10
|
||||
.EM
|
||||
.MA LONGMX
|
||||
rep #$30
|
||||
.EM
|
||||
.MA LONGM
|
||||
rep #$20
|
||||
.EM
|
||||
.MA LONGX
|
||||
rep #$10
|
||||
.EM
|
||||
*--------------------------------------
|
||||
.MA IIGS
|
||||
ldx ##]1
|
||||
jsl $E10000
|
||||
.EM
|
||||
*--------------------------------------
|
||||
P8QUIT .EQ $E0D000
|
||||
GSOS .EQ $E100A8
|
||||
GSOS2 .EQ $E100B0
|
||||
OS_BOOT .EQ $E100BD indicates O/S initially booted
|
||||
*--------------------------------------
|
||||
lookptr .EQ $0A
|
||||
idapple .EQ $0C model machine id
|
||||
idxl .EQ $10 general use 16 bit index pointer
|
||||
devid .EQ $12
|
||||
src .EQ $12
|
||||
dst .EQ $14
|
||||
cnt .EQ $16
|
||||
cde .EQ $18
|
||||
ecde .EQ $1A
|
||||
*--------------------------------------
|
||||
pcl .EQ $3A
|
||||
pch .EQ $3B
|
||||
A1L .EQ $3C
|
||||
A1H .EQ $3D
|
||||
A2L .EQ $3E
|
||||
A2H .EQ $3F
|
||||
A3L .EQ $40
|
||||
A4L .EQ $42
|
||||
unitnum .EQ $43
|
||||
buf .EQ $44 2-byte data buffer pointer which
|
||||
*accsav .EQ $45 overlaps accsav (temp acc save byte)
|
||||
bloknml .EQ $46 used mostly as 16 bit block # pointer
|
||||
zpt .EQ $48 highly used zero page index pointer
|
||||
datptr .EQ $4A ptr to data area of buffer.
|
||||
sos .EQ $4C sos buffer pointer.
|
||||
usrbuf .EQ $4E data ptr in user buffer.
|
||||
*--------------------------------------
|
||||
auxsp .EQ $0101
|
||||
RAMXDRV .EQ $0200 load address for aux bank /RAM driver
|
||||
inbuf .EQ $0200 keyboard buffer
|
||||
pbuf .EQ $0280 prefix buffer
|
||||
softev .EQ $03F2 RESET vector
|
||||
pwredup .EQ $03F4 power up byte
|
||||
nmivect .EQ $03FB nmi handler
|
||||
ILDR .EQ $0800
|
||||
|
||||
vmode .EQ $04FB video firmware operating mode
|
||||
ch80col .EQ $057B 80 column ch position
|
||||
GP .EQ $BF00
|
||||
XRW .EQ $D000
|
||||
CLK .EQ $D742
|
||||
|
||||
dbuf .EQ $0C00 8 page directory buffer
|
||||
vblock1 .EQ $0E00 ramdisk directory block
|
||||
volbuf .EQ $0F00 volume buffer
|
||||
iobuf .EQ $1400 i/o buffer
|
||||
fbuf .EQ $1800 FCB buffer
|
||||
sysentry .EQ $2000 .SYS file load address
|
||||
XDOS.PathBuf .EQ $D700
|
||||
*XDOS.prefixbuf .EQ $D742+125
|
||||
XDOS.FCBs .EQ $D800 8 opened files
|
||||
XDOS.VCBs .EQ $D900 10 mounted vols
|
||||
XDOS.BMBuf .EQ $DA00 512 byte bitmap buffer
|
||||
XDOS.GBuf .EQ $DC00 general purpose 512 byte block buffer
|
||||
|
||||
xfer .EQ $C314
|
||||
*--------------------------------------
|
||||
pathbuf .EQ $D700
|
||||
XDOS.ClockDrv .EQ $D742
|
||||
prefixbuf .EQ $D742+125
|
||||
*--------------------------------------
|
||||
FCB.MAX .EQ 8
|
||||
FCBs .EQ $D800
|
||||
FCB.ID .EQ 0
|
||||
FCB.DEVID .EQ 1 d_dev -> d_dev+5
|
||||
FCB.DIRHBLK .EQ 2 2 bytes
|
||||
FCB.DIREBLK .EQ 4 2 bytes
|
||||
FCB.DIRENUM .EQ 6
|
||||
FCB.STYPE .EQ 7
|
||||
FCB.F .EQ 8
|
||||
FCB.F.STMOD .EQ %00001000
|
||||
FCB.F.UMOD .EQ %00010000
|
||||
FCB.F.DBLKMOD .EQ %01000000
|
||||
FCB.F.IBLKMOD .EQ %10000000
|
||||
FCB.ACCESS .EQ 9
|
||||
FCB.NLBYTE .EQ 10
|
||||
FCB.BUFID .EQ 11
|
||||
FCB.1stBLK .EQ 12 2 bytes
|
||||
FCB.IBLK .EQ 14 2 bytes
|
||||
FCB.DBLK .EQ 16 2 bytes
|
||||
FCB.MARK .EQ 18 3 bytes
|
||||
FCB.EOF .EQ 21 3 bytes
|
||||
FCB.UBLK .EQ 24 2 bytes
|
||||
XDOS .EQ $DE00
|
||||
|
||||
FCB.FLEVEL .EQ 27
|
||||
FCB.DIRTY .EQ 28
|
||||
RAM .EQ $FF00
|
||||
IRQ .EQ $FF9B
|
||||
|
||||
|
||||
FCB.NLMASK .EQ 31
|
||||
*
|
||||
FCB .EQ 32
|
||||
*--------------------------------------
|
||||
VCBs .EQ $D900
|
||||
* 6 free bytes
|
||||
VCB0 .EQ 06 range $D906-$DA00
|
||||
VCB.DEV .EQ 16
|
||||
VCB.OFCNT .EQ 17
|
||||
VCB.BMAP .EQ 18 2 bytes
|
||||
VCB.TBLK .EQ 20 2 bytes
|
||||
VCB.FBLK .EQ 22 2 bytes
|
||||
VCB.BMAPIDX .EQ 24
|
||||
*
|
||||
VCB .EQ 25
|
||||
*--------------------------------------
|
||||
bmbuf .EQ $DA00 512 byte bitmap buffer
|
||||
gbuf .EQ $DC00 general purpose 512 byte block buffer
|
||||
RAMX .EQ $0200
|
||||
*--------------------------------------
|
||||
.DUMMY
|
||||
.OR $10
|
||||
@ -172,6 +61,8 @@ ZPBLLenBits .BS 1
|
||||
.ED
|
||||
*--------------------------------------
|
||||
.INB usr/src/prodos.fx/prodos.s.ldr
|
||||
X.Unpak.XatYAX .DO AUXLC=1
|
||||
.FIN
|
||||
X.Unpak.XatYA sty ZPOutBufPtr
|
||||
sta ZPOutBufPtr+1
|
||||
lda PAKME.Table,x
|
||||
@ -179,118 +70,137 @@ X.Unpak.XatYA sty ZPOutBufPtr
|
||||
lda PAKME.Table+1,x
|
||||
sta ZPInBufPtr+1
|
||||
.INB usr/src/shared/x.unpak.s
|
||||
.DO LOGO
|
||||
.DO LOGO=1
|
||||
.INB usr/src/prodos.fx/prodos.s.logo
|
||||
.FIN
|
||||
*--------------------------------------
|
||||
PAKME.Table
|
||||
PAKME.ILDR .DA ILDR.PAK
|
||||
PAKME.GP .DA GP.PAK
|
||||
PAKME.XRW .DA XRW.PAK
|
||||
PAKME.XDOS .DA XDOS.PAK
|
||||
PAKME.IRQ .DA IRQ.PAK
|
||||
PAKME.RAM .DA RAM.PAK
|
||||
PAKME.RAMX .DA RAMX.PAK
|
||||
PAKME.DCLK .DA DCLK.PAK
|
||||
PAKME.NCLK .DA NCLK.PAK
|
||||
PAKME.TCLK .DA TCLK.PAK
|
||||
PAKME.XCLK .DA XCLK.PAK
|
||||
PAKME.CCLK .DA CCLK.PAK
|
||||
PAKME.SEL1 .DA SEL1.PAK
|
||||
PAKME.SEL2 .DA SEL2.PAK
|
||||
|
||||
ILDR.PAK .DA #0
|
||||
.DA ILDR.LEN
|
||||
.PH $800
|
||||
.INB usr/src/prodos.fx/prodos.s.ildr
|
||||
.EP
|
||||
|
||||
GP.PAK .DA #0
|
||||
.DA GP.LEN
|
||||
.PH $BF00
|
||||
.INB usr/src/prodos.fx/prodos.s.gp
|
||||
.EP
|
||||
|
||||
XRW.PAK .DA #0
|
||||
.DA XRW.LEN
|
||||
.PH $D000
|
||||
.INB usr/src/prodos.fx/prodos.s.xrw
|
||||
.EP
|
||||
|
||||
XDOS.PAK .DA #0
|
||||
.DA XDOS.LEN
|
||||
.PH $DE00
|
||||
.INB usr/src/prodos.fx/prodos.s.xdos.a
|
||||
.INB usr/src/prodos.fx/prodos.s.xdos.b
|
||||
.INB usr/src/prodos.fx/prodos.s.xdos.c
|
||||
.INB usr/src/prodos.fx/prodos.s.xdos.d
|
||||
.INB usr/src/prodos.fx/prodos.s.xdos.e
|
||||
.INB usr/src/prodos.fx/prodos.s.xdos.f
|
||||
.EP
|
||||
|
||||
IRQ.PAK .DA #0
|
||||
.DA IRQ.LEN
|
||||
.PH $FF9B
|
||||
.INB usr/src/prodos.fx/prodos.s.irq
|
||||
.EP
|
||||
|
||||
.DO M.RAM=1
|
||||
RAM.PAK .DA #0
|
||||
.DA RAM.LEN
|
||||
.PH $FF00
|
||||
.INB usr/src/prodos.fx/prodos.s.ram
|
||||
.EP
|
||||
|
||||
RAMX.PAK .DA #0
|
||||
.DA RAMX.LEN
|
||||
.PH $200
|
||||
.INB usr/src/prodos.fx/prodos.s.ramx
|
||||
.EP
|
||||
.FIN
|
||||
|
||||
DCLK.PAK .DA #0
|
||||
.DA DCLK.LEN
|
||||
.PH XDOS.ClockDrv
|
||||
.INB usr/src/prodos.fx/prodos.s.dclk
|
||||
.EP
|
||||
|
||||
NCLK.PAK .DA #0
|
||||
.DA NCLK.LEN
|
||||
.PH XDOS.ClockDrv
|
||||
.INB usr/src/prodos.fx/prodos.s.nclk
|
||||
.EP
|
||||
|
||||
TCLK.PAK .DA #0
|
||||
.DA TCLK.LEN
|
||||
.PH XDOS.ClockDrv
|
||||
.INB usr/src/prodos.fx/prodos.s.tclk
|
||||
.EP
|
||||
|
||||
XCLK.PAK .DA #0
|
||||
.DA XCLK.LEN
|
||||
.PH XDOS.ClockDrv
|
||||
.INB usr/src/prodos.fx/prodos.s.xclk
|
||||
.EP
|
||||
|
||||
CCLK.PAK .DA #0
|
||||
.DA CCLK.LEN
|
||||
.PH XDOS.ClockDrv
|
||||
.INB usr/src/prodos.fx/prodos.s.cclk
|
||||
.EP
|
||||
|
||||
SEL1.PAK .DA #0
|
||||
.DA SEL1.LEN
|
||||
.PH $1000
|
||||
.INB usr/src/prodos.fx/prodos.s.sel1
|
||||
.EP
|
||||
|
||||
SEL2.PAK .DA #0
|
||||
.DA SEL2.LEN
|
||||
.PH $1000
|
||||
.INB usr/src/prodos.fx/prodos.s.sel2
|
||||
.EP
|
||||
*--------------------------------------
|
||||
PAKME.Table
|
||||
PAKME.ID .SE 0
|
||||
|
||||
PAKME.ILDR.ID .EQ PAKME.ID
|
||||
PAKME.ILDR .DA ILDR.PAK
|
||||
PAKME.ID .SE PAKME.ID+2
|
||||
|
||||
PAKME.GP.ID .EQ PAKME.ID
|
||||
PAKME.GP .DA GP.PAK
|
||||
PAKME.ID .SE PAKME.ID+2
|
||||
|
||||
PAKME.XRW.ID .EQ PAKME.ID
|
||||
PAKME.XRW .DA XRW.PAK
|
||||
PAKME.ID .SE PAKME.ID+2
|
||||
|
||||
PAKME.XDOS.ID .EQ PAKME.ID
|
||||
PAKME.XDOS .DA XDOS.PAK
|
||||
PAKME.ID .SE PAKME.ID+2
|
||||
|
||||
PAKME.IRQ.ID .EQ PAKME.ID
|
||||
PAKME.IRQ .DA IRQ.PAK
|
||||
PAKME.ID .SE PAKME.ID+2
|
||||
|
||||
.DO M.RAM=1
|
||||
PAKME.RAM.ID .EQ PAKME.ID
|
||||
PAKME.RAM .DA RAM.PAK
|
||||
PAKME.ID .SE PAKME.ID+2
|
||||
|
||||
PAKME.RAMX.ID .EQ PAKME.ID
|
||||
PAKME.RAMX .DA RAMX.PAK
|
||||
PAKME.ID .SE PAKME.ID+2
|
||||
.FIN
|
||||
|
||||
PAKME.DCLK.ID .EQ PAKME.ID
|
||||
PAKME.DCLK .DA DCLK.PAK
|
||||
PAKME.ID .SE PAKME.ID+2
|
||||
|
||||
PAKME.NCLK.ID .EQ PAKME.ID
|
||||
PAKME.NCLK .DA NCLK.PAK
|
||||
PAKME.ID .SE PAKME.ID+2
|
||||
|
||||
PAKME.TCLK.ID .EQ PAKME.ID
|
||||
PAKME.TCLK .DA TCLK.PAK
|
||||
PAKME.ID .SE PAKME.ID+2
|
||||
|
||||
PAKME.XCLK.ID .EQ PAKME.ID
|
||||
PAKME.XCLK .DA XCLK.PAK
|
||||
PAKME.ID .SE PAKME.ID+2
|
||||
|
||||
PAKME.CCLK.ID .EQ PAKME.ID
|
||||
PAKME.CCLK .DA CCLK.PAK
|
||||
PAKME.ID .SE PAKME.ID+2
|
||||
|
||||
PAKME.SEL1.ID .EQ PAKME.ID
|
||||
PAKME.SEL1 .DA SEL1.PAK
|
||||
PAKME.ID .SE PAKME.ID+2
|
||||
|
||||
PAKME.SEL2.ID .EQ PAKME.ID
|
||||
PAKME.SEL2 .DA SEL2.PAK
|
||||
PAKME.ID .SE PAKME.ID+2
|
||||
*--------------------------------------
|
||||
.AS "PAKME" TAG
|
||||
.DA $2000 BIN ORG
|
||||
.DA #14 Chunk Count
|
||||
.DA #PAKME.ID/2 Chunk Count
|
||||
.DA PAKME.Table Chunks
|
||||
*--------------------------------------
|
||||
MAN
|
||||
|
1534
SHARED/X.ARC.S.txt
Normal file
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
352
SHARED/X.UNARC.S.txt
Normal 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
|
@ -102,10 +102,10 @@ CORE.Events jsr CORE.GetEvents
|
||||
lda CORE.EvtCount
|
||||
bne .1
|
||||
*--------------------------------------
|
||||
.4 bit OPENAPPLE
|
||||
.4 bit IO.OPENAPPLE
|
||||
bpl .8
|
||||
|
||||
lda KBD
|
||||
lda IO.KBD
|
||||
bpl .8
|
||||
|
||||
cmp #"0"
|
||||
@ -114,7 +114,7 @@ CORE.Events jsr CORE.GetEvents
|
||||
cmp #"9"+1
|
||||
bcs .8
|
||||
|
||||
sta KBDSTROBE
|
||||
sta IO.KBDSTROBE
|
||||
|
||||
and #$0F
|
||||
|
||||
@ -140,14 +140,14 @@ CORE.Quit php
|
||||
lda IRQ.INTNUM
|
||||
sta K.MLI.PARAMS+1
|
||||
|
||||
>MLICALL MLIDEALLOCIRQ
|
||||
>MLICALL MLI.DEALLOCIRQ
|
||||
|
||||
bit RDIOUDIS
|
||||
sta SETIOUDIS
|
||||
sta CLRDHIRES
|
||||
bit IO.RDIOUDIS
|
||||
sta IO.SETIOUDIS
|
||||
sta IO.CLRDHIRES
|
||||
bmi .1
|
||||
|
||||
sta CLRIOUDIS
|
||||
sta IO.CLRIOUDIS
|
||||
|
||||
.1 ldx #5
|
||||
|
||||
@ -156,7 +156,7 @@ CORE.Quit php
|
||||
bpl .2
|
||||
|
||||
lda #4
|
||||
ldx #MLIQUIT
|
||||
ldx #MLI.QUIT
|
||||
jmp GP.MLICall
|
||||
*--------------------------------------
|
||||
CORE.UpdPPS tax save RC From INIT or RUN
|
||||
@ -213,7 +213,7 @@ CORE.GetEvents lda #K.S.EVT
|
||||
dec IRQ.Tick
|
||||
bra .2
|
||||
|
||||
.1 lda VBL get VLINE status
|
||||
.1 lda IO.VBL get VLINE status
|
||||
tax
|
||||
eor CORE.VBLState
|
||||
bpl .8 no change,no tick
|
||||
@ -500,7 +500,7 @@ CORE.IRQGS .OP 65816
|
||||
phk
|
||||
plb
|
||||
|
||||
stz IO.IIGS.CLRVBLINT
|
||||
stz IO.GS.CLRVBLINT
|
||||
|
||||
jsr CORE.IRQ.Switch
|
||||
|
||||
|
@ -4,11 +4,11 @@ NEW
|
||||
* CONTROL SECTION :
|
||||
.LIST ON
|
||||
*--------------------------------------
|
||||
C1 .EQ MAIN.S
|
||||
C2 .EQ AUX.S
|
||||
C3 .EQ D1.S
|
||||
C4 .EQ D2.S
|
||||
C5 .EQ E0.S
|
||||
*C1 .EQ MAIN.S
|
||||
*C2 .EQ AUX.S
|
||||
*C3 .EQ D1.S
|
||||
*C4 .EQ D2.S
|
||||
*C5 .EQ E0.S
|
||||
*--------------------------------------
|
||||
.LIST OFF
|
||||
.DO MAIN.S>$BC0
|
||||
|
@ -73,7 +73,7 @@ K.ReadDir.ROOT ldy #S.FD.DIR.FC did we already returned something ?
|
||||
>STYA K.MLI.PARAMS+2
|
||||
>STYA ZPPtr2
|
||||
|
||||
>MLICALL MLIONLINE
|
||||
>MLICALL MLI.ONLINE
|
||||
bcs DIRENT.RTS
|
||||
|
||||
>LDYAI 16+S.STAT*18+1 14*(Vols+Stat) + 4*(PFT+Stat) + \0
|
||||
@ -124,7 +124,7 @@ K.ReadDir.ROOT ldy #S.FD.DIR.FC did we already returned something ?
|
||||
|
||||
>LDYAI K.MLI.PATH
|
||||
>STYA K.MLI.PARAMS+1
|
||||
>MLICALL MLIGETFILEINFO
|
||||
>MLICALL MLI.GFINFO
|
||||
sta K.S.STAT+S.STAT.P.DEVSTATUS
|
||||
|
||||
bcs .3
|
||||
@ -190,7 +190,7 @@ K.ReadDir.DIR sta K.MLI.PARAMS+1 A=#S.DIR.PRODOS.REF
|
||||
lda /512
|
||||
sta K.MLI.PARAMS+5
|
||||
|
||||
>MLICALL MLIREAD Read A block from directory
|
||||
>MLICALL MLI.READ Read A block from directory
|
||||
bcs .99
|
||||
|
||||
ldy #S.FD.DIR.EL Check if first run....
|
||||
|
@ -136,7 +136,7 @@ DRV.GBLK txa
|
||||
lda (pFD),y
|
||||
sta .3+2
|
||||
|
||||
jsr GO.ProDOS
|
||||
jsr GO.MainIC
|
||||
|
||||
ldx #5
|
||||
|
||||
@ -147,7 +147,7 @@ DRV.GBLK txa
|
||||
|
||||
.3 jsr $ffff SELF MODIFIED
|
||||
|
||||
jsr GO.A2osX
|
||||
jsr GO.AuxLC
|
||||
rts
|
||||
|
||||
DRV.BLK.P .BS 6
|
||||
@ -176,13 +176,13 @@ DRV.SP >STYA pIOCTL
|
||||
lda (pFD),y
|
||||
sta .1+2
|
||||
|
||||
jsr GO.ProDOS Remapped SP
|
||||
jsr GO.MainIC Remapped SP
|
||||
|
||||
.1 jsr $ffff
|
||||
.2 .BS 1
|
||||
.3 .BS 2
|
||||
|
||||
jsr GO.A2osX
|
||||
jsr GO.AuxLC
|
||||
rts
|
||||
|
||||
DRV.SP.Cnt .HS 03030301030101010404
|
||||
|
@ -106,10 +106,10 @@ ENVX.SetEnv.I
|
||||
pla
|
||||
sta ENVX.hEnv
|
||||
|
||||
sta CLRWRITEAUX
|
||||
sta IO.CLRWRITEAUX
|
||||
ldy #S.PS.hENV
|
||||
sta (pPS),y
|
||||
sta SETWRITEAUX
|
||||
sta IO.SETWRITEAUX
|
||||
bra .1 Start over
|
||||
|
||||
.22 ldy #$ff
|
||||
|
@ -8,12 +8,12 @@ NEW
|
||||
K.GetErrMsg >PULLW ZPPtr2 Dst Buf
|
||||
>PULLA Err Code
|
||||
|
||||
sta SETREADAUX
|
||||
sta SETWRITEAUX
|
||||
sta IO.SETREADAUX
|
||||
sta IO.SETWRITEAUX
|
||||
|
||||
jsr ERRORX.GetErrMsg
|
||||
|
||||
sta CLRREADAUX
|
||||
sta IO.CLRREADAUX
|
||||
rts
|
||||
*--------------------------------------
|
||||
MAN
|
||||
|
@ -32,7 +32,7 @@ ERRORX.GetErrMsg
|
||||
|
||||
.4 ldy #$ff
|
||||
|
||||
sta CLRWRITEAUX
|
||||
sta IO.CLRWRITEAUX
|
||||
|
||||
.5 iny
|
||||
lda (ZPPtr1),y
|
||||
|
@ -1,7 +1,7 @@
|
||||
NEW
|
||||
AUTO 3,1
|
||||
*--------------------------------------
|
||||
FS.OPEN.REG >MLICALL MLIGETFILEINFO
|
||||
FS.OPEN.REG >MLICALL MLI.GFINFO
|
||||
bcs .10
|
||||
|
||||
lda IO.Open.TYPE Already Exists
|
||||
@ -45,13 +45,13 @@ FS.OPEN.REG >MLICALL MLIGETFILEINFO
|
||||
stz K.MLI.PARAMS+2
|
||||
stz K.MLI.PARAMS+3
|
||||
stz K.MLI.PARAMS+4
|
||||
>MLICALL MLISETEOF no, reset size to 0
|
||||
>MLICALL MLI.SETEOF no, reset size to 0
|
||||
bra .4
|
||||
|
||||
.3 >MLICALL MLIGETEOF
|
||||
.3 >MLICALL MLI.GETEOF
|
||||
bcs FS.OPEN.ERR
|
||||
|
||||
>MLICALL MLISETMARK
|
||||
>MLICALL MLI.SETMARK
|
||||
.4 bcs FS.OPEN.ERR
|
||||
|
||||
.5 lda IO.Open.FLAGS
|
||||
@ -62,7 +62,7 @@ FS.OPEN.REG >MLICALL MLIGETFILEINFO
|
||||
sta K.MLI.PARAMS+2
|
||||
lda #C.CR
|
||||
sta K.MLI.PARAMS+3
|
||||
>MLICALL MLINEWLINE
|
||||
>MLICALL MLI.NEWLINE
|
||||
bcs FS.OPEN.ERR
|
||||
|
||||
.8 lda IO.hFD
|
||||
@ -83,7 +83,7 @@ FS.OPEN.DIR lda #S.FD.T.DIR
|
||||
lda K.MLI.PATH+2
|
||||
beq .8 "/"
|
||||
|
||||
>MLICALL MLIGETFILEINFO
|
||||
>MLICALL MLI.GFINFO
|
||||
bcs .9
|
||||
|
||||
lda K.MLI.PARAMS+S.FI.T
|
||||
@ -101,10 +101,10 @@ FS.OPEN.DIR lda #S.FD.T.DIR
|
||||
sec
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
FS.READ.REG ldx #MLIREAD
|
||||
FS.READ.REG ldx #MLI.READ
|
||||
.HS 2C BIT ABS
|
||||
*--------------------------------------
|
||||
FS.WRITE.REG ldx #MLIWRITE
|
||||
FS.WRITE.REG ldx #MLI.WRITE
|
||||
|
||||
ldy #S.FD.REG.REF
|
||||
lda (pFD),y
|
||||
@ -122,7 +122,7 @@ FS.WRITE.REG ldx #MLIWRITE
|
||||
|
||||
rts
|
||||
*--------------------------------------
|
||||
FS.EOF.REG >MLICALL MLIGETMARK
|
||||
FS.EOF.REG >MLICALL MLI.GETMARK
|
||||
bcs .9
|
||||
|
||||
ldy #2
|
||||
@ -132,7 +132,7 @@ FS.EOF.REG >MLICALL MLIGETMARK
|
||||
dey
|
||||
bpl .1
|
||||
|
||||
>MLICALL MLIGETEOF
|
||||
>MLICALL MLI.GETEOF
|
||||
bcs .9
|
||||
|
||||
ldy #2
|
||||
@ -160,14 +160,14 @@ FS.CLOSE jsr FS.MLICLOSE
|
||||
FS.MLICREATE sta K.MLI.PARAMS+7 Storage Type
|
||||
ldx #3
|
||||
|
||||
.1 lda DATELO,x
|
||||
.1 lda GP.DATE,x
|
||||
sta K.MLI.PARAMS+8,x Create Date/Time
|
||||
dex
|
||||
bpl .1
|
||||
|
||||
lda #S.FI.A.FULL
|
||||
sta K.MLI.PARAMS+3 Access
|
||||
>MLICALL MLICREATE
|
||||
>MLICALL MLI.CREATE
|
||||
rts
|
||||
*--------------------------------------
|
||||
FS.MLIOPEN >LDYAI 1024 get a ProDOS IOBUF
|
||||
@ -180,7 +180,7 @@ FS.MLIOPEN >LDYAI 1024 get a ProDOS IOBUF
|
||||
ldy #S.FD.REG.IOBUF
|
||||
sta (pFD),y
|
||||
|
||||
>MLICALL MLIOPEN
|
||||
>MLICALL MLI.OPEN
|
||||
bcs FS.RTS
|
||||
|
||||
lda K.MLI.PARAMS+5 get ref_num
|
||||
@ -198,7 +198,7 @@ FS.MLICLOSE ldy #S.FD.REG.REF
|
||||
beq .1
|
||||
|
||||
sta K.MLI.PARAMS+1
|
||||
>MLICALL MLICLOSE
|
||||
>MLICALL MLI.CLOSE
|
||||
bcs FS.RTS
|
||||
|
||||
.1 ldy #S.FD.REG.IOBUF
|
||||
@ -213,7 +213,7 @@ FS.MLICLOSE ldy #S.FD.REG.REF
|
||||
FS.Stat bit A2osX.FSID
|
||||
bmi FS.Stat.FX
|
||||
|
||||
FS.Stat.203 >MLICALL MLIGETFILEINFO
|
||||
FS.Stat.203 >MLICALL MLI.GFINFO
|
||||
bcs FS.RTS
|
||||
|
||||
jsr FS.ClrStat
|
||||
@ -245,7 +245,7 @@ FS.Stat.203 >MLICALL MLIGETFILEINFO
|
||||
ldx #K.S.STAT+S.STAT.MTIME
|
||||
jmp FS.PTime2StatYAX
|
||||
*--------------------------------------
|
||||
FS.Stat.FX >MLICALL MLIGETFILEINFOEX
|
||||
FS.Stat.FX >MLICALL MLI.GFINFOEX
|
||||
bcc .1
|
||||
|
||||
cmp #MLI.E.BADCALL
|
||||
|
@ -65,6 +65,7 @@ GP.Sleep php
|
||||
|
||||
inc Advance one byte because of return by RTI
|
||||
bne GP.Sleep2
|
||||
|
||||
inx
|
||||
|
||||
GP.Sleep2 ldy #S.PS.PC
|
||||
@ -181,13 +182,13 @@ GP.AtkCall dec IRQ.InKernel
|
||||
|
||||
>STYA .1
|
||||
|
||||
jsr GO.ProDOS
|
||||
jsr GO.MainIC
|
||||
|
||||
jsr MLI
|
||||
.DA #MLIATALK
|
||||
.DA #MLI.ATALK
|
||||
.1 .DA *
|
||||
|
||||
jsr GO.A2osX
|
||||
jsr GO.AuxLC
|
||||
|
||||
inc IRQ.InKernel
|
||||
rts
|
||||
@ -268,14 +269,14 @@ GP.GetFAC jsr GP.ROMCALL
|
||||
GP.RomCall phx
|
||||
ldx $D000
|
||||
stx .8+1
|
||||
bit RROMBNK1
|
||||
bit IO.RROMBNK1
|
||||
plx
|
||||
|
||||
jsr MATHF
|
||||
|
||||
.8 ldx #$ff
|
||||
bit $C000,x
|
||||
bit $C000,x
|
||||
* bit $C000,x
|
||||
rts
|
||||
*--------------------------------------
|
||||
GP.SetARG ldx #FPU.SETARG
|
||||
@ -338,22 +339,23 @@ GP.lrintf jsr GP.SetFAC
|
||||
*--------------------------------------
|
||||
GP.MLICall stx .1
|
||||
sta K.MLI.PARAMS
|
||||
jsr GO.ProDOS
|
||||
jsr GO.MainIC
|
||||
jsr MLI
|
||||
.1 .BS 1
|
||||
.DA K.MLI.PARAMS
|
||||
jsr GO.A2osX
|
||||
jsr GO.AuxLC
|
||||
rts
|
||||
*--------------------------------------
|
||||
GO.ProDOS pha
|
||||
GO.MainIC pha
|
||||
lda $D000 We re coming from AUXLC, saving bank...
|
||||
sta GO.A2osX.BNK+1
|
||||
sta GO.AuxLC.BNK+1
|
||||
pla
|
||||
php
|
||||
clc
|
||||
.HS 2C bit abs
|
||||
GO.A2osX php
|
||||
.HS 2C BIT ABS
|
||||
GO.AuxLC php
|
||||
sec
|
||||
|
||||
sei
|
||||
sta GO.EXIT.SaveA+1
|
||||
stx GO.EXIT.SaveX+1
|
||||
@ -363,36 +365,40 @@ GO.A2osX php
|
||||
ply
|
||||
inx
|
||||
bne .1
|
||||
|
||||
iny
|
||||
|
||||
.1 stx GO.EXIT.JMP+1
|
||||
sty GO.EXIT.JMP+2
|
||||
|
||||
bcs GO.A2osX.BNK if CS, go AUXLC
|
||||
bit RRAMWRAMBNK1 Go MAINLC (ProDOS), always BNK1
|
||||
* bit RRAMWRAMBNK1
|
||||
bcs .2 if CS, go AUXLC
|
||||
|
||||
tsx
|
||||
stx SaveSX
|
||||
ldx SaveSM
|
||||
txs
|
||||
sta CLRALTZP
|
||||
sta IO.CLRALTZP
|
||||
|
||||
ldx #IO.RRAMWRAMBNK1 Go MAINLC (ProDOS), always BNK1
|
||||
bra GO.EXIT
|
||||
|
||||
GO.A2osX.BNK ldx #RRAMWRAMBNK1 Self Modified, initialized to BNK1 for INIT3
|
||||
|
||||
bit $C000,x
|
||||
* bit $C000,x
|
||||
sta SETALTZP
|
||||
.2 sta IO.SETALTZP
|
||||
tsx
|
||||
stx SaveSM
|
||||
ldx SaveSX
|
||||
txs
|
||||
|
||||
GO.AuxLC.BNK ldx #$FF Self Modified, initialized to BNK1 for INIT3
|
||||
*--------------------------------------
|
||||
GO.EXIT pha push P on stack
|
||||
GO.EXIT bit $C000,x Select Proper LC bank
|
||||
* bit $C000,x
|
||||
|
||||
pha push P on stack
|
||||
GO.EXIT.SaveY ldy #$ff
|
||||
GO.EXIT.SaveX ldx #$ff
|
||||
GO.EXIT.SaveA lda #$ff
|
||||
plp
|
||||
|
||||
GO.EXIT.JMP jmp $FFFF SELF MODIFIED
|
||||
*--------------------------------------
|
||||
* Called from ProDOS IRQ Manager (LCBNK1)
|
||||
@ -407,7 +413,7 @@ GP.IRQ cld
|
||||
bit IRQ.Skip After A2osX IRQ.H ?
|
||||
bmi GP.IRQ.Exit
|
||||
|
||||
sta SETALTZP switch to aux LC
|
||||
sta IO.SETALTZP switch to aux LC
|
||||
tsx
|
||||
stx SaveSM
|
||||
ldx SaveSX
|
||||
@ -419,17 +425,22 @@ GP.IRQ.JSR jsr CORE.IRQ.DEV SELF MODIFIED
|
||||
stx SaveSX
|
||||
ldx SaveSM
|
||||
txs
|
||||
sta CLRALTZP
|
||||
sta IO.CLRALTZP
|
||||
|
||||
rts
|
||||
|
||||
GP.IRQ.Exit stz IRQ.Skip reset flag
|
||||
sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
*GO.Reset jsr GO.A2osX
|
||||
*GO.Reset jsr GO.AuxLC
|
||||
* jmp CORE.Run
|
||||
*--------------------------------------
|
||||
*BrkHandler bra *
|
||||
*--------------------------------------
|
||||
.LIST ON
|
||||
.BS $11D0-*
|
||||
.LIST OFF
|
||||
*--------------------------------------
|
||||
* $11D0->$11EF : Public Variables
|
||||
*--------------------------------------
|
||||
|
@ -4,7 +4,7 @@ NEW
|
||||
Kernel.Init2 sei
|
||||
ldx #$FF
|
||||
txs
|
||||
sta SETALTZP
|
||||
sta IO.SETALTZP
|
||||
|
||||
stx SaveSM
|
||||
stx SaveSX
|
||||
@ -16,7 +16,7 @@ Kernel.Init2 sei
|
||||
dex
|
||||
bpl .1
|
||||
|
||||
sta CLRALTZP
|
||||
sta IO.CLRALTZP
|
||||
>LDYAI MSG.Init2
|
||||
jsr PrintFYA
|
||||
|
||||
@ -44,7 +44,7 @@ Kernel.Init2 sei
|
||||
|
||||
ldy #0
|
||||
|
||||
sta SETWRITEAUX
|
||||
sta IO.SETWRITEAUX
|
||||
|
||||
.2 inx
|
||||
bne .3
|
||||
@ -64,20 +64,20 @@ Kernel.Init2 sei
|
||||
inc ZPPtr2+1
|
||||
bra .2
|
||||
|
||||
.4 sta CLRWRITEAUX
|
||||
.4 sta IO.CLRWRITEAUX
|
||||
|
||||
sta SETALTZP
|
||||
sta IO.SETALTZP
|
||||
|
||||
lda RRAMWRAMBNK2
|
||||
lda RRAMWRAMBNK2
|
||||
lda IO.RRAMWRAMBNK2
|
||||
lda IO.RRAMWRAMBNK2
|
||||
|
||||
>LDYA PAKME.D2
|
||||
>STYA ZPInBufPtr
|
||||
>LDYAI $D000
|
||||
jsr A2osX.Unpak
|
||||
|
||||
lda RRAMWRAMBNK1
|
||||
lda RRAMWRAMBNK1
|
||||
lda IO.RRAMWRAMBNK1
|
||||
lda IO.RRAMWRAMBNK1
|
||||
|
||||
>LDYA PAKME.D1
|
||||
>STYA ZPInBufPtr
|
||||
@ -89,9 +89,9 @@ Kernel.Init2 sei
|
||||
>LDYAI $E000
|
||||
jsr A2osX.Unpak
|
||||
|
||||
lda RROMBNK1
|
||||
lda IO.RROMBNK1
|
||||
|
||||
sta CLRALTZP
|
||||
sta IO.CLRALTZP
|
||||
cli
|
||||
|
||||
jsr KConfigLoad
|
||||
@ -105,9 +105,9 @@ Kernel.Init2 sei
|
||||
*--------------------------------------
|
||||
>DEBUGOA
|
||||
*--------------------------------------
|
||||
Kernel.Init3 sta SETALTZP
|
||||
lda RRAMWRAMBNK1
|
||||
lda RRAMWRAMBNK1
|
||||
Kernel.Init3 sta IO.SETALTZP
|
||||
lda IO.RRAMWRAMBNK1
|
||||
lda IO.RRAMWRAMBNK1
|
||||
|
||||
lda #$ff Make sure we are in Kernel Mode during setup
|
||||
sta IRQ.InKernel
|
||||
@ -118,19 +118,19 @@ Kernel.Init3 sta SETALTZP
|
||||
lda #K.VER
|
||||
sta A2osX.KVER+1
|
||||
|
||||
sta SETALTCHAR
|
||||
sta SETMIXED
|
||||
sta CLRHIRES
|
||||
sta SET80DISP
|
||||
sta SET80STORE
|
||||
sta CLRPAGE2
|
||||
sta IO.SETALTCHAR
|
||||
sta IO.SETMIXED
|
||||
sta IO.CLRHIRES
|
||||
sta IO.SET80DISP
|
||||
sta IO.SET80STORE
|
||||
sta IO.CLRPAGE2
|
||||
|
||||
lda RDIOUDIS
|
||||
sta SETIOUDIS
|
||||
sta SETDHIRES
|
||||
lda IO.RDIOUDIS
|
||||
sta IO.SETIOUDIS
|
||||
sta IO.SETDHIRES
|
||||
bmi .10
|
||||
|
||||
sta CLRIOUDIS
|
||||
sta IO.CLRIOUDIS
|
||||
|
||||
.10 jsr MemMgrInit
|
||||
|
||||
@ -149,7 +149,7 @@ Kernel.Init3 sta SETALTZP
|
||||
jsr SysCDEVInit
|
||||
bcs *
|
||||
|
||||
* sta CLRMIXED
|
||||
* sta IO.CLRMIXED
|
||||
|
||||
>PUSHWI DEV.CONSOLE
|
||||
>PUSHBI O.RDWR
|
||||
@ -215,8 +215,8 @@ Kernel.Init3.Err
|
||||
KConfigLoad >LDYAI MSG.KCREAD
|
||||
jsr PrintFYA
|
||||
|
||||
jsr MLIENTRY Bypass ATALK
|
||||
.DA #MLIGETFILEINFOEX
|
||||
jsr GP.MLIENTRY Bypass ATALK
|
||||
.DA #MLI.GFINFOEX
|
||||
.DA pMLIGFIEX
|
||||
bcc .1
|
||||
eor #MLI.E.BADCALL
|
||||
@ -229,7 +229,7 @@ KConfigLoad >LDYAI MSG.KCREAD
|
||||
ror A2osX.FSID File Present & ProDOS.FX detected
|
||||
|
||||
.2 jsr MLI
|
||||
.DA #MLIOPEN
|
||||
.DA #MLI.OPEN
|
||||
.DA pMLIOPEN
|
||||
bcs .9
|
||||
|
||||
@ -237,12 +237,12 @@ KConfigLoad >LDYAI MSG.KCREAD
|
||||
sta pMLIREAD+1
|
||||
sta pMLICLOSE+1
|
||||
jsr MLI
|
||||
.DA #MLIREAD
|
||||
.DA #MLI.READ
|
||||
.DA pMLIREAD
|
||||
php
|
||||
pha
|
||||
jsr MLI
|
||||
.DA #MLICLOSE
|
||||
.DA #MLI.CLOSE
|
||||
.DA pMLICLOSE
|
||||
pla
|
||||
plp
|
||||
@ -271,13 +271,13 @@ MemMgrInit >LDYAI Mem.MHiMem
|
||||
>STYA Mem.LoMem
|
||||
stz Mem.LastSlot Reserve Slot #0
|
||||
|
||||
sta SETWRITEAUX
|
||||
sta IO.SETWRITEAUX
|
||||
|
||||
>LDYAI Mem.XLoMem
|
||||
>STYA Mem.LoMem
|
||||
|
||||
stz Mem.LastSlot Reserve Slot #0
|
||||
sta CLRWRITEAUX
|
||||
sta IO.CLRWRITEAUX
|
||||
|
||||
ldx #K.FILE.MAX-1
|
||||
|
||||
@ -367,7 +367,7 @@ SysCDEVInit.TTYPtrs
|
||||
sta FD.TTY+S.FD.DEV.DCBPTR+1
|
||||
sta ZPPtr1+1
|
||||
|
||||
sta SETWRITEAUX
|
||||
sta IO.SETWRITEAUX
|
||||
|
||||
>STYA Mem.HiMem
|
||||
>STYA Mem.Free
|
||||
@ -383,7 +383,7 @@ SysCDEVInit.TTYPtrs
|
||||
lda FD.TTY+S.FD.DEV.DEVID
|
||||
sta (ZPPtr1)
|
||||
|
||||
sta CLRWRITEAUX
|
||||
sta IO.CLRWRITEAUX
|
||||
|
||||
rts
|
||||
*--------------------------------------
|
||||
@ -394,13 +394,13 @@ HW.Detect >PUSHWI MSG.HW
|
||||
>PUSHBI 0
|
||||
>SYSCALL2 printf
|
||||
|
||||
bit RROMBNK1
|
||||
bit IO.RROMBNK1
|
||||
|
||||
stz A2osX.HWType
|
||||
stz A2osX.HWSubT
|
||||
|
||||
sec
|
||||
jsr $FE1F IIgs ?
|
||||
jsr $FE1F ROM.IDROUTINE IIgs ?
|
||||
bcs .2
|
||||
|
||||
lda #A2osX.HWType.IIgs
|
||||
@ -414,7 +414,7 @@ HW.Detect >PUSHWI MSG.HW
|
||||
.1 sty A2osX.HWSubT
|
||||
bra .8
|
||||
|
||||
.2 lda $FBC0
|
||||
.2 lda $FBC0 ROM.ZIDBYTE
|
||||
beq .4 //c
|
||||
|
||||
ldx #A2osX.HWType.IIe
|
||||
@ -435,8 +435,8 @@ HW.Detect >PUSHWI MSG.HW
|
||||
lda $FBBF
|
||||
sta A2osX.HWSubT
|
||||
|
||||
.8 bit RRAMWRAMBNK1
|
||||
bit RRAMWRAMBNK1
|
||||
.8 bit IO.RRAMWRAMBNK1
|
||||
bit IO.RRAMWRAMBNK1
|
||||
|
||||
>PUSHWI MSG.HW.TypeSubT
|
||||
>PUSHB A2osX.HWType
|
||||
@ -477,10 +477,10 @@ CPU.Init >PUSHWI MSG.CPU
|
||||
*--------------------------------------
|
||||
ldx A2osX.HZ
|
||||
|
||||
.1 bit VBL //e : Wait VBL high....
|
||||
.1 bit IO.VBL //e : Wait VBL high....
|
||||
bpl .1
|
||||
|
||||
.2 lda VBL //e : wait VBL low
|
||||
.2 lda IO.VBL //e : wait VBL low
|
||||
bmi .2
|
||||
|
||||
.3 pha (3)
|
||||
@ -499,17 +499,17 @@ CPU.Init >PUSHWI MSG.CPU
|
||||
|
||||
.5 pla
|
||||
|
||||
eor VBL
|
||||
eor IO.VBL
|
||||
bpl .3
|
||||
|
||||
lda VBL
|
||||
lda IO.VBL
|
||||
bmi .3
|
||||
|
||||
bra CPU.InitOK
|
||||
*--------------------------------------
|
||||
CPU.Init2c lda RDIOUDIS
|
||||
CPU.Init2c lda IO.RDIOUDIS
|
||||
pha
|
||||
sta CLRIOUDIS
|
||||
sta IO.CLRIOUDIS
|
||||
|
||||
lda IO.IIC.RDVBLMSK
|
||||
pha Save VBLIRQ enable
|
||||
@ -517,7 +517,7 @@ CPU.Init2c lda RDIOUDIS
|
||||
|
||||
lda IO.IIC.CLRVBLIRQ
|
||||
|
||||
.1 bit VBL Wait VBL high....
|
||||
.1 bit IO.VBL Wait VBL high....
|
||||
bpl .1
|
||||
|
||||
bit IO.IIC.CLRVBLIRQ clear //c IRQ
|
||||
@ -539,7 +539,7 @@ CPU.Init2c lda RDIOUDIS
|
||||
inc A2osX.CPUSPEED+1
|
||||
ldy #0
|
||||
|
||||
.5 bit VBL Wait VBL high....
|
||||
.5 bit IO.VBL Wait VBL high....
|
||||
bpl .3
|
||||
|
||||
bit IO.IIC.CLRVBLIRQ clear //c IRQ
|
||||
@ -552,7 +552,7 @@ CPU.Init2c lda RDIOUDIS
|
||||
.8 pla
|
||||
bpl CPU.InitOk
|
||||
|
||||
sta SETIOUDIS
|
||||
sta IO.SETIOUDIS
|
||||
*--------------------------------------
|
||||
CPU.InitOk plp
|
||||
|
||||
@ -688,11 +688,11 @@ DevMgrInit >LDYAI MSG.DEV
|
||||
|
||||
jsr DevMgr.VXD
|
||||
|
||||
lda DEVCNT
|
||||
lda GP.DEVCNT
|
||||
sta .1+1
|
||||
|
||||
.1 ldx #$ff SELF MODIFIED
|
||||
lda DEVLST,x
|
||||
lda GP.DEVLST,x
|
||||
and #$F0
|
||||
asl
|
||||
php Save Drive 1/2 in C
|
||||
@ -709,9 +709,9 @@ DevMgrInit >LDYAI MSG.DEV
|
||||
ora #$30
|
||||
sta FD.BDEV.NAME+1 SnDy
|
||||
|
||||
lda DEVPTRS,x
|
||||
lda GP.DEVPTRS,x
|
||||
sta FD.BDEV+S.FD.DEV.BUSPTR
|
||||
lda DEVPTRS+1,x
|
||||
lda GP.DEVPTRS+1,x
|
||||
sta FD.BDEV+S.FD.DEV.BUSPTR+1
|
||||
|
||||
sta ZPPtr1+1
|
||||
@ -857,13 +857,13 @@ DevMgr.VXD >LDYAI VSD.PATCH
|
||||
php
|
||||
sei
|
||||
|
||||
bit RRAMWRAMBNK2
|
||||
bit RRAMWRAMBNK2
|
||||
sta CLRALTZP
|
||||
bit IO.RRAMWRAMBNK2
|
||||
bit IO.RRAMWRAMBNK2
|
||||
sta IO.CLRALTZP
|
||||
.81 ldx $FFFF SELF MODIFIED : Slot0n
|
||||
sta SETALTZP
|
||||
bit RRAMWRAMBNK1
|
||||
bit RRAMWRAMBNK1
|
||||
sta IO.SETALTZP
|
||||
bit IO.RRAMWRAMBNK1
|
||||
bit IO.RRAMWRAMBNK1
|
||||
|
||||
lda #A2osX.S.VXD
|
||||
sta A2osX.S,x
|
||||
@ -889,14 +889,14 @@ DevMgr.VXD >LDYAI VSD.PATCH
|
||||
.19 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
VSD.PATCH bit RRAMWRAMBNK2
|
||||
VSD.PATCH bit IO.RRAMWRAMBNK2
|
||||
jsr $D002
|
||||
bit RRAMWRAMBNK1
|
||||
bit IO.RRAMWRAMBNK1
|
||||
rts
|
||||
*--------------------------------------
|
||||
VED.PATCH bit RRAMWRAMBNK2
|
||||
VED.PATCH bit IO.RRAMWRAMBNK2
|
||||
jsr $D401
|
||||
bit RRAMWRAMBNK1
|
||||
bit IO.RRAMWRAMBNK1
|
||||
rts
|
||||
*--------------------------------------
|
||||
* Setup AuxLC $FFFE->Kernel IRQ Handler
|
||||
@ -915,7 +915,7 @@ IrqMgrInit >LDYAI MSG.IRQ
|
||||
>LDYAI GP.IRQ
|
||||
>STYA K.MLI.PARAMS+2
|
||||
|
||||
>MLICALL MLIALLOCIRQ
|
||||
>MLICALL MLI.ALLOCIRQ
|
||||
bcs .9
|
||||
|
||||
lda K.MLI.PARAMS+1
|
||||
@ -992,7 +992,7 @@ IrqMgrInit >LDYAI MSG.IRQ
|
||||
sec
|
||||
bra IrqMgrInit.8
|
||||
|
||||
.2 sta CLRPAGE2
|
||||
.2 sta IO.CLRPAGE2
|
||||
lda #$60
|
||||
sta $5fa //c EXTINT COM1:Dont buffer but get IRQ
|
||||
sta $5fb //c EXTINT COM2:Dont buffer but get IRQ
|
||||
@ -1128,7 +1128,7 @@ IrqMgr.Mouse stz ZPPtr1 Try finding a Mouse Card...
|
||||
|
||||
sta IRQ.n0
|
||||
|
||||
bit RROMBNK2 Renable ROM to allow MOUSE II firmware works properly
|
||||
bit IO.RROMBNK2 Renable ROM to allow MOUSE II firmware works properly
|
||||
ldy #INITMOUSE
|
||||
jsr .10
|
||||
|
||||
@ -1138,8 +1138,8 @@ IrqMgr.Mouse stz ZPPtr1 Try finding a Mouse Card...
|
||||
lda #MOUSEMODx.INTVBL+MOUSEMODx.ACTIVE
|
||||
jsr .10
|
||||
|
||||
bit RRAMWRAMBNK1 Back To LC Ram
|
||||
bit RRAMWRAMBNK1
|
||||
bit IO.RRAMWRAMBNK1 Back To LC Ram
|
||||
bit IO.RRAMWRAMBNK1
|
||||
ldy #SERVEMOUSE
|
||||
lda (ZPPtr1),y
|
||||
sta CORE.IRQM+1
|
||||
@ -1202,11 +1202,11 @@ TskMgrInit >LDYAI MSG.TSK
|
||||
ldy #S.PS.hENV
|
||||
sta (pPS),y
|
||||
|
||||
sta SETWRITEAUX
|
||||
sta IO.SETWRITEAUX
|
||||
lda #0
|
||||
sta (ZPPtr1) make sure blank!!
|
||||
|
||||
sta CLRWRITEAUX
|
||||
sta IO.CLRWRITEAUX
|
||||
|
||||
>PUSHWZ
|
||||
>PUSHWZ
|
||||
|
@ -4,7 +4,7 @@ NEW
|
||||
* called directly by IRQ Vector $FFFE in AuxLC
|
||||
* Must keep:
|
||||
* A,X,Y
|
||||
* SETREADAUX
|
||||
* IO.SETREADAUX
|
||||
* if we are here, Aux ZP/Stack already On
|
||||
* Exit with RTI
|
||||
* if A2osX Drivers cannot clear IRQ,
|
||||
@ -26,29 +26,29 @@ IRQ.Handler cld
|
||||
stx IRQ.5+1
|
||||
sty IRQ.4+1
|
||||
|
||||
lda RD80STORE
|
||||
and RDPAGE2
|
||||
lda IO.RD80STORE
|
||||
and IO.RDPAGE2
|
||||
pha
|
||||
sta CLRPAGE2
|
||||
sta IO.CLRPAGE2
|
||||
|
||||
lda RDREADAUX
|
||||
lda IO.RDREADAUX
|
||||
pha
|
||||
sta CLRREADAUX Make sure we can access FD.Table
|
||||
sta IO.CLRREADAUX Make sure we can access FD.Table
|
||||
|
||||
lda RDWRITEAUX
|
||||
lda IO.RDWRITEAUX
|
||||
pha
|
||||
sta CLRWRITEAUX Driver may R/W in screen holes
|
||||
sta IO.CLRWRITEAUX Driver may R/W in screen holes
|
||||
|
||||
lda MSLOT Save MSLOT
|
||||
sta IRQ.2+2
|
||||
|
||||
* lda RDCXROM C100-C7ff state
|
||||
* lda IO.RDCXROM C100-C7ff state
|
||||
* pha
|
||||
* sta CLRCXROM Enable access to slot C100-C7ff space
|
||||
* sta IO.CLRCXROM Enable access to slot C100-C7ff space
|
||||
|
||||
IRQ.JSR jsr CORE.IRQ.DEV SELF MODIFIED
|
||||
|
||||
* ldx #CLRCXROM
|
||||
* ldx #IO.CLRCXROM
|
||||
|
||||
* pla Get CXROM State
|
||||
* bpl .3
|
||||
@ -64,26 +64,26 @@ IRQ.JSR jsr CORE.IRQ.DEV SELF MODIFIED
|
||||
eor #$C0 ....mmm...not looking like Cn....
|
||||
bne IRQ.3
|
||||
|
||||
sta CLRC8ROM Release $C800
|
||||
sta IO.CLRC8ROM Release $C800
|
||||
|
||||
IRQ.2 lda $ff00 SELF MODIFIED
|
||||
|
||||
IRQ.3 pla Must keep Carry
|
||||
bpl .1
|
||||
|
||||
sta SETWRITEAUX
|
||||
sta IO.SETWRITEAUX
|
||||
clv coming for AUX.....cancel switch
|
||||
|
||||
.1 pla
|
||||
bpl .2
|
||||
|
||||
sta SETREADAUX
|
||||
sta IO.SETREADAUX
|
||||
clv coming for AUX.....cancel switch
|
||||
|
||||
.2 pla
|
||||
bpl .3
|
||||
|
||||
sta SETPAGE2
|
||||
sta IO.SETPAGE2
|
||||
|
||||
.3 bvc IRQ.4 if not V, skip task switching
|
||||
|
||||
|
@ -158,195 +158,195 @@ K.SYSCALL .DA 0 $00 : STAT
|
||||
.DA K.FreeMem K.FreeStkObj
|
||||
*--------------------------------------
|
||||
* LO Byte :
|
||||
* #RRAMWRAMBNK1,#RRAMWRAMBNK2
|
||||
* #IO.RRAMWRAMBNK1,#IO.RRAMWRAMBNK2
|
||||
* HI Byte :
|
||||
* Flags (ROOT....)
|
||||
*--------------------------------------
|
||||
K.SYSCALL.BANK .DA #RRAMWRAMBNK1 $00
|
||||
K.SYSCALL.BANK .DA #IO.RRAMWRAMBNK1 $00
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK1
|
||||
.DA #IO.RRAMWRAMBNK1
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK1
|
||||
.DA #IO.RRAMWRAMBNK1
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK1
|
||||
.DA #IO.RRAMWRAMBNK1
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK1
|
||||
.DA #IO.RRAMWRAMBNK1
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK1
|
||||
.DA #IO.RRAMWRAMBNK1
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK1
|
||||
.DA #IO.RRAMWRAMBNK1
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK1
|
||||
.DA #IO.RRAMWRAMBNK1
|
||||
.DA #0
|
||||
|
||||
.DA #RRAMWRAMBNK1 $10
|
||||
.DA #IO.RRAMWRAMBNK1 $10
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK1
|
||||
.DA #IO.RRAMWRAMBNK1
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK1
|
||||
.DA #IO.RRAMWRAMBNK1
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK1
|
||||
.DA #IO.RRAMWRAMBNK1
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK1
|
||||
.DA #IO.RRAMWRAMBNK1
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK1
|
||||
.DA #IO.RRAMWRAMBNK1
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK1
|
||||
.DA #IO.RRAMWRAMBNK1
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK1
|
||||
.DA #IO.RRAMWRAMBNK1
|
||||
.DA #0
|
||||
|
||||
.DA #RRAMWRAMBNK1 $20 : STDIO
|
||||
.DA #IO.RRAMWRAMBNK1 $20 : STDIO
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK1
|
||||
.DA #IO.RRAMWRAMBNK1
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK1
|
||||
.DA #IO.RRAMWRAMBNK1
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK1
|
||||
.DA #IO.RRAMWRAMBNK1
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK1
|
||||
.DA #IO.RRAMWRAMBNK1
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK1
|
||||
.DA #IO.RRAMWRAMBNK1
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK1
|
||||
.DA #IO.RRAMWRAMBNK1
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK1
|
||||
.DA #IO.RRAMWRAMBNK1
|
||||
.DA #0
|
||||
|
||||
.DA #RRAMWRAMBNK1 $30
|
||||
.DA #IO.RRAMWRAMBNK1 $30
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK1
|
||||
.DA #IO.RRAMWRAMBNK1
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK1
|
||||
.DA #IO.RRAMWRAMBNK1
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK1
|
||||
.DA #IO.RRAMWRAMBNK1
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK1
|
||||
.DA #IO.RRAMWRAMBNK1
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK1
|
||||
.DA #IO.RRAMWRAMBNK1
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK1
|
||||
.DA #IO.RRAMWRAMBNK1
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK1
|
||||
.DA #IO.RRAMWRAMBNK1
|
||||
.DA #0
|
||||
|
||||
.DA #RRAMWRAMBNK1 $40
|
||||
.DA #IO.RRAMWRAMBNK1 $40
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK1
|
||||
.DA #IO.RRAMWRAMBNK1
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK1
|
||||
.DA #IO.RRAMWRAMBNK1
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK1
|
||||
.DA #IO.RRAMWRAMBNK1
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK1
|
||||
.DA #IO.RRAMWRAMBNK1
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK1
|
||||
.DA #IO.RRAMWRAMBNK1
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK1
|
||||
.DA #IO.RRAMWRAMBNK1
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK1
|
||||
.DA #IO.RRAMWRAMBNK1
|
||||
.DA #0
|
||||
|
||||
.DA #RRAMWRAMBNK1 $50
|
||||
.DA #IO.RRAMWRAMBNK1 $50
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK1
|
||||
.DA #IO.RRAMWRAMBNK1
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK1
|
||||
.DA #IO.RRAMWRAMBNK1
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK1
|
||||
.DA #IO.RRAMWRAMBNK1
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK1 $58 : PRODOS
|
||||
.DA #IO.RRAMWRAMBNK1 $58 : PRODOS
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK1
|
||||
.DA #IO.RRAMWRAMBNK1
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK1
|
||||
.DA #IO.RRAMWRAMBNK1
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK1
|
||||
.DA #IO.RRAMWRAMBNK1
|
||||
.DA #0
|
||||
*--------------------------------------
|
||||
.DA #RRAMWRAMBNK2 $60 : MOUNT
|
||||
.DA #IO.RRAMWRAMBNK2 $60 : MOUNT
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK2
|
||||
.DA #IO.RRAMWRAMBNK2
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK2 $64 : STKOBJ
|
||||
.DA #IO.RRAMWRAMBNK2 $64 : STKOBJ
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK2
|
||||
.DA #IO.RRAMWRAMBNK2
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK2 $68 : ARG
|
||||
.DA #IO.RRAMWRAMBNK2 $68 : ARG
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK2
|
||||
.DA #IO.RRAMWRAMBNK2
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK2
|
||||
.DA #IO.RRAMWRAMBNK2
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK2
|
||||
.DA #IO.RRAMWRAMBNK2
|
||||
.DA #0
|
||||
|
||||
.DA #RRAMWRAMBNK2 $70 : STDLIB
|
||||
.DA #IO.RRAMWRAMBNK2 $70 : STDLIB
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK2
|
||||
.DA #IO.RRAMWRAMBNK2
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK2
|
||||
.DA #IO.RRAMWRAMBNK2
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK2
|
||||
.DA #IO.RRAMWRAMBNK2
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK2
|
||||
.DA #IO.RRAMWRAMBNK2
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK2
|
||||
.DA #IO.RRAMWRAMBNK2
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK2
|
||||
.DA #IO.RRAMWRAMBNK2
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK2
|
||||
.DA #IO.RRAMWRAMBNK2
|
||||
.DA #0
|
||||
|
||||
.DA #RRAMWRAMBNK2 $80 : STRING
|
||||
.DA #IO.RRAMWRAMBNK2 $80 : STRING
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK2
|
||||
.DA #IO.RRAMWRAMBNK2
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK2
|
||||
.DA #IO.RRAMWRAMBNK2
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK2
|
||||
.DA #IO.RRAMWRAMBNK2
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK2
|
||||
.DA #IO.RRAMWRAMBNK2
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK2
|
||||
.DA #IO.RRAMWRAMBNK2
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK2
|
||||
.DA #IO.RRAMWRAMBNK2
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK2
|
||||
.DA #IO.RRAMWRAMBNK2
|
||||
.DA #0
|
||||
|
||||
.DA #RRAMWRAMBNK1 $90 : DEV
|
||||
.DA #IO.RRAMWRAMBNK1 $90 : DEV
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK1
|
||||
.DA #IO.RRAMWRAMBNK1
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK1
|
||||
.DA #IO.RRAMWRAMBNK1
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK1
|
||||
.DA #IO.RRAMWRAMBNK1
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK2 $98 : BIN
|
||||
.DA #IO.RRAMWRAMBNK2 $98 : BIN
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK2
|
||||
.DA #IO.RRAMWRAMBNK2
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK2
|
||||
.DA #IO.RRAMWRAMBNK2
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK2
|
||||
.DA #IO.RRAMWRAMBNK2
|
||||
.DA #0
|
||||
|
||||
.DA #RRAMWRAMBNK2 $A0 : PS
|
||||
.DA #IO.RRAMWRAMBNK2 $A0 : PS
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK2
|
||||
.DA #IO.RRAMWRAMBNK2
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK2
|
||||
.DA #IO.RRAMWRAMBNK2
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK2
|
||||
.DA #IO.RRAMWRAMBNK2
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK2
|
||||
.DA #IO.RRAMWRAMBNK2
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK2
|
||||
.DA #IO.RRAMWRAMBNK2
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK2
|
||||
.DA #IO.RRAMWRAMBNK2
|
||||
.DA #0
|
||||
.DA #RRAMWRAMBNK2
|
||||
.DA #IO.RRAMWRAMBNK2
|
||||
.DA #0
|
||||
|
||||
.DA #0 $B0 : STRV
|
||||
@ -440,26 +440,26 @@ K.SYSCALL.BANK .DA #RRAMWRAMBNK1 $00
|
||||
K.SYSCALL2 bit K.SYSCALL.BANK,x Get Target BNK
|
||||
bvc K.SYSCALL2.BANK
|
||||
|
||||
K.SYSCALL2.AUX sta SETREADAUX MAIN to AUX Mem API
|
||||
sta SETWRITEAUX
|
||||
K.SYSCALL2.AUX sta IO.SETREADAUX MAIN to AUX Mem API
|
||||
sta IO.SETWRITEAUX
|
||||
jsr K.SYSCALL.JMP
|
||||
sta CLRREADAUX
|
||||
sta CLRWRITEAUX
|
||||
sta IO.CLRREADAUX
|
||||
sta IO.CLRWRITEAUX
|
||||
rts
|
||||
|
||||
K.SYSCALL2.MAIN sta CLRREADAUX Coming from KERNEL in AUX...
|
||||
sta CLRWRITEAUX
|
||||
K.SYSCALL2.MAIN sta IO.CLRREADAUX Coming from KERNEL in AUX...
|
||||
sta IO.CLRWRITEAUX
|
||||
jsr .1
|
||||
|
||||
sta SETREADAUX
|
||||
sta SETWRITEAUX
|
||||
sta IO.SETREADAUX
|
||||
sta IO.SETWRITEAUX
|
||||
rts
|
||||
|
||||
.1 bit K.SYSCALL.BANK,x Get Target LC BNK
|
||||
|
||||
K.SYSCALL2.BANK bpl K.SYSCALL.JMP 0, E000, no BNK change
|
||||
sta .7+1
|
||||
lda $D000 #RRAMWRAMBNK1 or #RRAMWRAMBNK2
|
||||
lda $D000 #IO.RRAMWRAMBNK1 or #IO.RRAMWRAMBNK2
|
||||
cmp K.SYSCALL.BANK,x
|
||||
beq .7
|
||||
|
||||
@ -468,14 +468,14 @@ K.SYSCALL2.BANK bpl K.SYSCALL.JMP 0, E000, no BNK change
|
||||
lda K.SYSCALL.BANK,x
|
||||
tax get Target BNK in x
|
||||
bit $C000,x switch to Target BNK
|
||||
bit $C000,x
|
||||
* bit $C000,x
|
||||
|
||||
jsr .6
|
||||
|
||||
stx .5+1 Save X
|
||||
plx get back Source BNK
|
||||
bit $C000,x switch to Target BNK
|
||||
bit $C000,x
|
||||
* bit $C000,x
|
||||
|
||||
.5 ldx #$ff SELF MODIFIED
|
||||
rts
|
||||
@ -498,11 +498,11 @@ K.SYSCALL.JMPX2 clc
|
||||
|
||||
JMPXA >PULLA
|
||||
|
||||
K.SYSCALL.JMPX sta SETREADAUX
|
||||
sta SETWRITEAUX
|
||||
K.SYSCALL.JMPX sta IO.SETREADAUX
|
||||
sta IO.SETWRITEAUX
|
||||
jsr JMPX
|
||||
sta CLRREADAUX
|
||||
sta CLRWRITEAUX
|
||||
sta IO.CLRREADAUX
|
||||
sta IO.CLRWRITEAUX
|
||||
rts
|
||||
*--------------------------------------
|
||||
MAN
|
||||
|
@ -54,9 +54,9 @@ K.Realloc >PULLA
|
||||
>STYA A4L Save MAIN Ptr
|
||||
|
||||
lda .7+1
|
||||
sta SETREADAUX
|
||||
sta IO.SETREADAUX
|
||||
jsr MEM.SetA1A2 Setup AUX base & End Ptrs
|
||||
sta CLRREADAUX
|
||||
sta IO.CLRREADAUX
|
||||
|
||||
clc Aux To Main
|
||||
jsr XMov
|
||||
@ -221,10 +221,10 @@ MEM.GetMem.YAX stx MEM.ReqFlags
|
||||
ldy #S.MEM.REFCNT
|
||||
sta (ZPMemMgrSPtr),y
|
||||
|
||||
lda RDREADAUX
|
||||
lda IO.RDREADAUX
|
||||
pha
|
||||
|
||||
sta CLRREADAUX
|
||||
sta IO.CLRREADAUX
|
||||
|
||||
ldy #S.PS.PID
|
||||
lda (pPS),y
|
||||
@ -235,7 +235,7 @@ MEM.GetMem.YAX stx MEM.ReqFlags
|
||||
pla
|
||||
bpl .80
|
||||
|
||||
sta SETREADAUX
|
||||
sta IO.SETREADAUX
|
||||
|
||||
.80 clc
|
||||
|
||||
@ -535,11 +535,11 @@ Mem.IncRefCnt ldy #S.MEM.REFCNT
|
||||
* (X,Y unmodified)
|
||||
*\--------------------------------------
|
||||
*--------------------------------------
|
||||
MEM.DupX sta SETREADAUX
|
||||
sta SETWRITEAUX
|
||||
MEM.DupX sta IO.SETREADAUX
|
||||
sta IO.SETWRITEAUX
|
||||
jsr MEM.Dup
|
||||
sta CLRREADAUX
|
||||
sta CLRWRITEAUX
|
||||
sta IO.CLRREADAUX
|
||||
sta IO.CLRWRITEAUX
|
||||
rts
|
||||
*--------------------------------------
|
||||
MEM.Dup jsr K.GetMemPtr
|
||||
@ -589,8 +589,8 @@ MEM.MoveToMain sec
|
||||
stx .2+1 Save AUX hMem
|
||||
>STYA A2L Save LEN to copy/move
|
||||
|
||||
sta CLRREADAUX Make sure MAIN !!!!
|
||||
sta CLRWRITEAUX
|
||||
sta IO.CLRREADAUX Make sure MAIN !!!!
|
||||
sta IO.CLRWRITEAUX
|
||||
jsr K.GetMem
|
||||
bcs MEM.Dup.RTS
|
||||
|
||||
@ -598,9 +598,9 @@ MEM.MoveToMain sec
|
||||
>STYA A4L Save MAIN Ptr
|
||||
|
||||
lda .2+1 Get AUX mem Ptr
|
||||
sta SETREADAUX
|
||||
sta IO.SETREADAUX
|
||||
jsr MEM.SetA1A2 Setup AUX base & End Ptrs
|
||||
sta CLRREADAUX
|
||||
sta IO.CLRREADAUX
|
||||
|
||||
clc Aux To Main
|
||||
jsr XMov
|
||||
|
@ -74,7 +74,7 @@ PIPE.WRITE ldy #S.FD.PIPE.S
|
||||
lda (pFD),y
|
||||
tay
|
||||
|
||||
sta SETWRITEAUX
|
||||
sta IO.SETWRITEAUX
|
||||
|
||||
.1 inx
|
||||
bne .2
|
||||
@ -109,7 +109,7 @@ PIPE.WRITE ldy #S.FD.PIPE.S
|
||||
sta PIPE.DSTBUF+1
|
||||
bra .1
|
||||
|
||||
.8 sta CLRWRITEAUX
|
||||
.8 sta IO.CLRWRITEAUX
|
||||
|
||||
tya
|
||||
ldy #S.FD.PIPE.Head
|
||||
@ -181,7 +181,7 @@ PIPE.READ ldy #S.FD.PIPE.Used+1
|
||||
lda (pFD),y
|
||||
tay
|
||||
|
||||
sta SETREADAUX
|
||||
sta IO.SETREADAUX
|
||||
|
||||
.1 inx
|
||||
bne .2
|
||||
@ -216,7 +216,7 @@ PIPE.READ ldy #S.FD.PIPE.Used+1
|
||||
sta PIPE.SRCBUF+1 Restore Pipe Buf base
|
||||
bra .1
|
||||
|
||||
.8 sta CLRREADAUX
|
||||
.8 sta IO.CLRREADAUX
|
||||
|
||||
tya
|
||||
ldy #S.FD.PIPE.Tail
|
||||
|
@ -13,7 +13,7 @@ NEW
|
||||
*\--------------------------------------
|
||||
K.Online >PULLW K.MLI.PARAMS+2
|
||||
>PULLB K.MLI.PARAMS+1
|
||||
>MLICALL MLIONLINE
|
||||
>MLICALL MLI.ONLINE
|
||||
rts
|
||||
*/--------------------------------------
|
||||
* # ChTyp
|
||||
@ -29,7 +29,7 @@ K.Online >PULLW K.MLI.PARAMS+2
|
||||
K.ChTyp jsr PFT.CheckPath1
|
||||
bcs PRODOS.RET3
|
||||
|
||||
>MLICALL MLIGETFILEINFO
|
||||
>MLICALL MLI.GFINFO
|
||||
bcs PRODOS.RET3
|
||||
|
||||
>PULLB K.MLI.PARAMS+S.FI.T
|
||||
@ -48,7 +48,7 @@ K.ChTyp jsr PFT.CheckPath1
|
||||
K.ChAux jsr PFT.CheckPath2
|
||||
bcs PRODOS.RET4
|
||||
|
||||
>MLICALL MLIGETFILEINFO
|
||||
>MLICALL MLI.GFINFO
|
||||
bcs PRODOS.RET4
|
||||
|
||||
>PULLW K.MLI.PARAMS+S.FI.AUXTYPE
|
||||
@ -67,12 +67,12 @@ K.ChAux jsr PFT.CheckPath2
|
||||
K.SetAttr jsr PFT.CheckPath1
|
||||
bcs PRODOS.RET3
|
||||
|
||||
>MLICALL MLIGETFILEINFO
|
||||
>MLICALL MLI.GFINFO
|
||||
bcs PRODOS.RET3
|
||||
|
||||
>PULLB K.MLI.PARAMS+S.FI.A
|
||||
|
||||
PRODOS.SFIRET2 >MLICALL MLISETFILEINFO
|
||||
PRODOS.SFIRET2 >MLICALL MLI.SFINFO
|
||||
bra PRODOS.RET2
|
||||
|
||||
PRODOS.RET4 inc pStack
|
||||
|
@ -292,9 +292,9 @@ PS.CreateChild ldx #0
|
||||
ldy #S.PS.hENV
|
||||
sta (PS.NewPSPtr),y
|
||||
|
||||
sta SETWRITEAUX
|
||||
sta IO.SETWRITEAUX
|
||||
jsr Mem.SetOwner Set Ownership
|
||||
sta CLRWRITEAUX
|
||||
sta IO.CLRWRITEAUX
|
||||
|
||||
ldy #S.PS.hStdIn
|
||||
|
||||
@ -1055,11 +1055,11 @@ K.GetMemStat >STYA ZPPtr1
|
||||
dex
|
||||
bpl .1
|
||||
|
||||
sta SETREADAUX
|
||||
sta IO.SETREADAUX
|
||||
|
||||
jsr .2
|
||||
|
||||
sta CLRREADAUX
|
||||
sta IO.CLRREADAUX
|
||||
|
||||
.2 ldx #7
|
||||
|
||||
|
@ -161,9 +161,9 @@ PWDX.PutPW.1 jsr K.GetmemPtr
|
||||
bcs .99
|
||||
|
||||
ldy #S.PW.UID
|
||||
sta CLRWRITEAUX
|
||||
sta IO.CLRWRITEAUX
|
||||
sta (TXTPTR),y
|
||||
sta SETWRITEAUX
|
||||
sta IO.SETWRITEAUX
|
||||
|
||||
.13 jsr PWDX.GetRecLen
|
||||
|
||||
|
@ -28,38 +28,38 @@ SHARED.IsDigit.8
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
SHARED.TXTPTRgY sta CLRREADAUX
|
||||
SHARED.TXTPTRgY sta IO.CLRREADAUX
|
||||
lda (TXTPTR),y
|
||||
sta SETREADAUX
|
||||
sta IO.SETREADAUX
|
||||
rts
|
||||
*--------------------------------------
|
||||
SHARED.TXTPTRgn sta CLRREADAUX
|
||||
SHARED.TXTPTRgn sta IO.CLRREADAUX
|
||||
lda (TXTPTR)
|
||||
sta SETREADAUX
|
||||
sta IO.SETREADAUX
|
||||
beq SHARED.RTS
|
||||
SHARED.TXTPTRn inc TXTPTR
|
||||
bne SHARED.RTS
|
||||
inc TXTPTR+1
|
||||
rts
|
||||
*--------------------------------------
|
||||
SHARED.FORPNTgY sta CLRREADAUX
|
||||
SHARED.FORPNTgY sta IO.CLRREADAUX
|
||||
lda (FORPNT),y
|
||||
sta SETREADAUX
|
||||
sta IO.SETREADAUX
|
||||
rts
|
||||
*--------------------------------------
|
||||
SHARED.FORPNTpY sta CLRWRITEAUX
|
||||
SHARED.FORPNTpY sta IO.CLRWRITEAUX
|
||||
sta (FORPNT),y
|
||||
sta SETWRITEAUX
|
||||
sta IO.SETWRITEAUX
|
||||
rts
|
||||
*--------------------------------------
|
||||
SHARED.FORPNTgn sta CLRREADAUX
|
||||
SHARED.FORPNTgn sta IO.CLRREADAUX
|
||||
lda (FORPNT)
|
||||
sta SETREADAUX
|
||||
sta IO.SETREADAUX
|
||||
bra SHARED.FORPNTn
|
||||
*--------------------------------------
|
||||
SHARED.FORPNTpn sta CLRWRITEAUX
|
||||
SHARED.FORPNTpn sta IO.CLRWRITEAUX
|
||||
sta (FORPNT)
|
||||
sta SETWRITEAUX
|
||||
sta IO.SETWRITEAUX
|
||||
SHARED.FORPNTn inc FORPNT
|
||||
bne SHARED.RTS
|
||||
inc FORPNT+1
|
||||
@ -116,9 +116,9 @@ SHARED.PullP2P1 >PULLW ZPPtr2
|
||||
>PULLW ZPPtr1
|
||||
rts
|
||||
*--------------------------------------
|
||||
SHARED.P3gY sta CLRREADAUX
|
||||
SHARED.P3gY sta IO.CLRREADAUX
|
||||
lda (ZPPtr3),y
|
||||
sta SETREADAUX
|
||||
sta IO.SETREADAUX
|
||||
rts
|
||||
*--------------------------------------
|
||||
MAN
|
||||
|
@ -18,7 +18,7 @@ K.ChMod jsr PFT.CheckPath2
|
||||
|
||||
stz K.MLI.PARAMS+3+S.FIEX.ACL read mode
|
||||
|
||||
>MLICALL MLIACL
|
||||
>MLICALL MLI.ACL
|
||||
bcs .9
|
||||
|
||||
>LDYA K.S.STAT+S.STAT.MODE
|
||||
@ -27,7 +27,7 @@ K.ChMod jsr PFT.CheckPath2
|
||||
lda #$57 write mode
|
||||
sta K.MLI.PARAMS+3+S.FIEX.ACL
|
||||
|
||||
>MLICALL MLIACL
|
||||
>MLICALL MLI.ACL
|
||||
.9 rts
|
||||
|
||||
STAT.RET4 inc pStack
|
||||
@ -66,7 +66,7 @@ K.FStat ldy #2
|
||||
lda (pFD),y
|
||||
sta K.MLI.PARAMS+1
|
||||
|
||||
>MLICALL MLIGETEOF
|
||||
>MLICALL MLI.GETEOF
|
||||
bcs STAT.RTS
|
||||
|
||||
ldx #2
|
||||
|
@ -501,7 +501,7 @@ K.FFlush jsr PFT.CheckNodeA
|
||||
|
||||
lda (pFD)
|
||||
bne STDIO.IOERR
|
||||
>MLICALL MLIFLUSH
|
||||
>MLICALL MLI.FLUSH
|
||||
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
@ -549,12 +549,12 @@ K.FSeek ldy #5
|
||||
bra .8
|
||||
|
||||
* SEEK.CUR
|
||||
.20 >MLICALL MLIGETMARK
|
||||
.20 >MLICALL MLI.GETMARK
|
||||
bcc .8
|
||||
rts
|
||||
|
||||
* SEEK.END
|
||||
.30 >MLICALL MLIGETEOF
|
||||
.30 >MLICALL MLI.GETEOF
|
||||
bcs .9
|
||||
|
||||
.8 ldy #0
|
||||
@ -572,13 +572,13 @@ K.FSeek ldy #5
|
||||
|
||||
bcs .99 Offset out of range!
|
||||
|
||||
.82 >MLICALL MLISETMARK
|
||||
.82 >MLICALL MLI.SETMARK
|
||||
bcc .9
|
||||
|
||||
cmp #MLI.E.BEYEOF
|
||||
bne .9
|
||||
|
||||
>MLICALL MLISETEOF
|
||||
>MLICALL MLI.SETEOF
|
||||
bcc .82
|
||||
|
||||
.9 rts
|
||||
@ -631,7 +631,7 @@ K.FEOF jsr PFT.CheckNodeA
|
||||
K.FTell jsr PFT.CheckNodeA
|
||||
bcs .9
|
||||
|
||||
>MLICALL MLIGETMARK
|
||||
>MLICALL MLI.GETMARK
|
||||
bcs .9
|
||||
|
||||
lda #0
|
||||
@ -658,7 +658,7 @@ K.FTell jsr PFT.CheckNodeA
|
||||
K.Remove jsr PFT.CheckPathYA
|
||||
bcs .9
|
||||
|
||||
>MLICALL MLIDESTROY
|
||||
>MLICALL MLI.DESTROY
|
||||
.9 rts
|
||||
*/--------------------------------------
|
||||
* # Rename
|
||||
@ -694,7 +694,7 @@ K.Rename jsr PFT.CheckPath2
|
||||
.8 sty K.Buf256
|
||||
>LDYAI K.Buf256
|
||||
>STYA K.MLI.PARAMS+3
|
||||
>MLICALL MLIRENAME
|
||||
>MLICALL MLI.RENAME
|
||||
|
||||
.9 >RET 4
|
||||
*/--------------------------------------
|
||||
|
@ -34,8 +34,8 @@ TERM.WRITE jsr TERM.GetIOCTLBufCntDCB
|
||||
*--------------------------------------
|
||||
TERM.TOAUX lda A2osX.ASCREEN
|
||||
|
||||
sta SETREADAUX
|
||||
sta SETWRITEAUX
|
||||
sta IO.SETREADAUX
|
||||
sta IO.SETWRITEAUX
|
||||
|
||||
cmp (ZPDCBPtr) #S.DCB.TTY.DEVID
|
||||
|
||||
@ -47,8 +47,8 @@ TERM.TOAUX lda A2osX.ASCREEN
|
||||
|
||||
jsr .8
|
||||
|
||||
sta CLRREADAUX
|
||||
sta CLRWRITEAUX
|
||||
sta IO.CLRREADAUX
|
||||
sta IO.CLRWRITEAUX
|
||||
rts
|
||||
|
||||
.8 jmp (TERMX,x)
|
||||
@ -84,12 +84,12 @@ TERM.GetDCB ldy #S.FD.DEV.DCBPTR
|
||||
|
||||
rts
|
||||
*--------------------------------------
|
||||
TERM.GetBufByte sta CLRREADAUX
|
||||
TERM.GetBufByte sta IO.CLRREADAUX
|
||||
lda (ZPBufPtr)
|
||||
sta SETREADAUX
|
||||
sta IO.SETREADAUX
|
||||
rts
|
||||
*--------------------------------------
|
||||
TERM.GetDevName sta CLRREADAUX
|
||||
TERM.GetDevName sta IO.CLRREADAUX
|
||||
|
||||
lda pFD
|
||||
clc
|
||||
@ -100,7 +100,7 @@ TERM.GetDevName sta CLRREADAUX
|
||||
adc /S.FD.DEV
|
||||
sta TXTPTR+1
|
||||
|
||||
sta SETREADAUX
|
||||
sta IO.SETREADAUX
|
||||
rts
|
||||
*--------------------------------------
|
||||
MAN
|
||||
|
@ -46,7 +46,7 @@ TERMX.STATUS tya
|
||||
.HS 2C BIT ABS
|
||||
.1 ldy #3
|
||||
|
||||
sta CLRWRITEAUX
|
||||
sta IO.CLRWRITEAUX
|
||||
|
||||
.2 lda TERMX.DIB,y
|
||||
sta (ZPBufPtr),y
|
||||
@ -79,7 +79,7 @@ TERMX.STATUS tya
|
||||
jsr TERMX.CheckOA
|
||||
bmi .7
|
||||
|
||||
bit KBD
|
||||
bit IO.KBD
|
||||
bmi .8
|
||||
|
||||
.7 lda #$ff EOF = TRUE
|
||||
@ -102,9 +102,9 @@ TERMX.OPEN jsr TERMX.ISOPENED
|
||||
|
||||
lda IO.hFD in ZPTMP
|
||||
|
||||
sta CLRWRITEAUX
|
||||
sta IO.CLRWRITEAUX
|
||||
sta A2osX.SCRNDEVS,x
|
||||
sta SETWRITEAUX
|
||||
sta IO.SETWRITEAUX
|
||||
|
||||
ldy #S.DCB.TTY.S
|
||||
lda (ZPDCBPtr),y
|
||||
@ -115,12 +115,12 @@ TERMX.OPEN jsr TERMX.ISOPENED
|
||||
*--------------------------------------
|
||||
TERMX.CONTROL lda (ZPDCBPtr) #S.DCB.TTY.DEVID
|
||||
|
||||
sta CLRWRITEAUX
|
||||
sta IO.CLRWRITEAUX
|
||||
sta A2osX.ASCREEN
|
||||
sta SETWRITEAUX
|
||||
sta IO.SETWRITEAUX
|
||||
|
||||
sta SETTEXT
|
||||
sta CLRMIXED
|
||||
sta IO.SETTEXT
|
||||
sta IO.CLRMIXED
|
||||
|
||||
jsr TERMX.SCRCPY
|
||||
|
||||
@ -139,9 +139,9 @@ TERMX.CLOSE jsr TERMX.ISOPENED
|
||||
lda (ZPDCBPtr) #S.DCB.TTY.DEVID
|
||||
tax
|
||||
|
||||
sta CLRWRITEAUX
|
||||
sta IO.CLRWRITEAUX
|
||||
stz A2osX.SCRNDEVS,x
|
||||
sta SETWRITEAUX
|
||||
sta IO.SETWRITEAUX
|
||||
|
||||
clc
|
||||
rts
|
||||
@ -163,10 +163,10 @@ TERMX.READ bit bActive is screen active?
|
||||
jsr TERMX.CheckOA
|
||||
bmi .6 Open apple key, not for us...
|
||||
|
||||
lda KBD
|
||||
lda IO.KBD
|
||||
bpl .6
|
||||
|
||||
sta KBDSTROBE
|
||||
sta IO.KBDSTROBE
|
||||
|
||||
and #$7F
|
||||
cmp #C.ESC
|
||||
@ -237,16 +237,16 @@ TERMX.READ bit bActive is screen active?
|
||||
pla
|
||||
|
||||
ldy .8+1
|
||||
sta CLRWRITEAUX
|
||||
sta IO.CLRWRITEAUX
|
||||
sta (ZPBufPtr),y
|
||||
sta SETWRITEAUX
|
||||
sta IO.SETWRITEAUX
|
||||
iny
|
||||
sty .8+1
|
||||
bra .70
|
||||
|
||||
.8 lda #$ff SELF MODIFIED
|
||||
|
||||
sta CLRWRITEAUX
|
||||
sta IO.CLRWRITEAUX
|
||||
|
||||
ldy #S.IOCTL.BYTECNT
|
||||
sta (ZPIOCTL),y
|
||||
@ -1118,10 +1118,10 @@ TERMX.ED.2 sty .1+1
|
||||
bit bActive
|
||||
bpl .4
|
||||
|
||||
sta SETPAGE2
|
||||
sta IO.SETPAGE2
|
||||
jsr .7
|
||||
|
||||
sta CLRPAGE2
|
||||
sta IO.CLRPAGE2
|
||||
jsr .7
|
||||
|
||||
.4 ldy #79
|
||||
@ -1277,7 +1277,7 @@ TERMX.IAC.SDONT ldx #DONT
|
||||
jsr TERMX.COUT
|
||||
jmp TERMX.SETM.0
|
||||
*--------------------------------------
|
||||
TERMX.CheckOA lda OPENAPPLE
|
||||
TERMX.CheckOA lda IO.OPENAPPLE
|
||||
php
|
||||
bpl .5 Restore Title
|
||||
|
||||
@ -1353,14 +1353,14 @@ TERMX.SCR0CPY lda ZPDCBPtr
|
||||
|
||||
ldx #78
|
||||
|
||||
sta SETPAGE2
|
||||
sta IO.SETPAGE2
|
||||
|
||||
ldy #39
|
||||
|
||||
jsr .8
|
||||
|
||||
ldx #79
|
||||
sta CLRPAGE2
|
||||
sta IO.CLRPAGE2
|
||||
|
||||
ldy #39
|
||||
|
||||
@ -1409,10 +1409,10 @@ TERMX.COPY.XtoL1
|
||||
lda SCR.BH,x
|
||||
sta ZPScrBL2+1
|
||||
|
||||
sta SETPAGE2
|
||||
sta IO.SETPAGE2
|
||||
jsr .6
|
||||
|
||||
sta CLRPAGE2
|
||||
sta IO.CLRPAGE2
|
||||
|
||||
.6 ldy #39
|
||||
|
||||
@ -1490,9 +1490,9 @@ SetCharAtY.SCR1 lsr ZPTmpX
|
||||
|
||||
bcs .2
|
||||
|
||||
sta SETPAGE2
|
||||
sta IO.SETPAGE2
|
||||
sta (ZPScrBL1),y
|
||||
sta CLRPAGE2
|
||||
sta IO.CLRPAGE2
|
||||
rts
|
||||
|
||||
.2 sta (ZPScrBL1),y
|
||||
|
@ -12,8 +12,8 @@ NEW
|
||||
* S.TIME filled with System date/time
|
||||
*\--------------------------------------
|
||||
K.Time >PULLW FORPNT
|
||||
>MLICALL MLIGETTIME
|
||||
>LDYAI DATELO
|
||||
>MLICALL MLI.GETTIME
|
||||
>LDYAI GP.DATE
|
||||
>STYA TXTPTR
|
||||
ldx #SYS.PTime2Time
|
||||
jmp K.SYSCALL.JMPX
|
||||
|
@ -198,7 +198,7 @@ K.ChOwn jsr PFT.CheckPath2
|
||||
|
||||
stz K.MLI.PARAMS+3+S.FIEX.ACL read mode
|
||||
|
||||
>MLICALL MLIACL
|
||||
>MLICALL MLI.ACL
|
||||
bcs .9
|
||||
|
||||
lda (pStack)
|
||||
@ -215,7 +215,7 @@ K.ChOwn jsr PFT.CheckPath2
|
||||
.2 lda #$57 write mode
|
||||
sta K.MLI.PARAMS+3+S.FIEX.ACL
|
||||
|
||||
>MLICALL MLIACL
|
||||
>MLICALL MLI.ACL
|
||||
|
||||
.9 >RET 4
|
||||
*--------------------------------------
|
||||
|
@ -67,7 +67,7 @@ D1 .DA #0
|
||||
.DA D1.S
|
||||
|
||||
D1.B .PH $D000
|
||||
.DA #RRAMWRAMBNK1
|
||||
.DA #IO.RRAMWRAMBNK1
|
||||
.INB usr/src/sys/kernel.s.stat
|
||||
.INB usr/src/sys/kernel.s.dirent
|
||||
.INB usr/src/sys/kernel.s.unistd
|
||||
@ -83,7 +83,7 @@ D2 .DA #0
|
||||
.DA D2.S
|
||||
|
||||
D2.B .PH $D000
|
||||
.DA #RRAMWRAMBNK2
|
||||
.DA #IO.RRAMWRAMBNK2
|
||||
.INB usr/src/sys/kernel.s.mount
|
||||
.INB usr/src/sys/kernel.s.stkobj
|
||||
.INB usr/src/sys/kernel.s.arg
|
||||
|
136
SYS/KRNL8M.S.txt
Normal file
136
SYS/KRNL8M.S.txt
Normal 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
|
@ -130,17 +130,17 @@ RW.CheckRAM3 jsr RW.ONLINE MLI Online at S3D2
|
||||
clc
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
RW.DisableRAM lda DEVPTRS3D2
|
||||
cmp DEVPTRS S0D1=NOVEV
|
||||
RW.DisableRAM lda GP.DEVPTRS3D2
|
||||
cmp GP.DEVPTRS S0D1=NOVEV
|
||||
bne .1
|
||||
|
||||
lda DEVPTRS3D2+1
|
||||
cmp DEVPTRS+1 S0D1=NODEV
|
||||
lda GP.DEVPTRS3D2+1
|
||||
cmp GP.DEVPTRS+1 S0D1=NODEV
|
||||
beq .8 S3D2=NODEV, nothing to do
|
||||
|
||||
.1 ldx DEVCNT
|
||||
.1 ldx GP.DEVCNT
|
||||
|
||||
.2 lda DEVLST,x LOOKING FOR $BF, $BB, $B7, $B3
|
||||
.2 lda GP.DEVLST,x LOOKING FOR $BF, $BB, $B7, $B3
|
||||
and #$F3
|
||||
cmp #$B3
|
||||
beq .3
|
||||
@ -151,22 +151,22 @@ RW.DisableRAM lda DEVPTRS3D2
|
||||
sec No device found, exit with error
|
||||
rts
|
||||
|
||||
.3 cpx DEVCNT
|
||||
.3 cpx GP.DEVCNT
|
||||
beq .5
|
||||
|
||||
.4 lda DEVLST+1,x
|
||||
sta DEVLST,x
|
||||
.4 lda GP.DEVLST+1,x
|
||||
sta GP.DEVLST,x
|
||||
inx
|
||||
cpx DEVCNT
|
||||
cpx GP.DEVCNT
|
||||
bne .4
|
||||
|
||||
.5 ldx DEVCNT
|
||||
stz DEVLST,x
|
||||
dec DEVCNT
|
||||
lda DEVPTRS
|
||||
sta DEVPTRS3D2
|
||||
lda DEVPTRS+1
|
||||
sta DEVPTRS3D2+1
|
||||
.5 ldx GP.DEVCNT
|
||||
stz GP.DEVLST,x
|
||||
dec GP.DEVCNT
|
||||
lda GP.DEVPTRS
|
||||
sta GP.DEVPTRS3D2
|
||||
lda GP.DEVPTRS+1
|
||||
sta GP.DEVPTRS3D2+1
|
||||
|
||||
jsr RW.ONLINE
|
||||
|
||||
@ -174,7 +174,7 @@ RW.DisableRAM lda DEVPTRS3D2
|
||||
rts
|
||||
*--------------------------------------
|
||||
RW.ONLINE jsr MLI
|
||||
.DA #MLIONLINE
|
||||
.DA #MLI.ONLINE
|
||||
.DA RW.ONLINEPARAM
|
||||
rts
|
||||
*--------------------------------------
|
||||
@ -190,7 +190,7 @@ RW.DetectHW php
|
||||
sta .3+1
|
||||
sta .6+1
|
||||
|
||||
sta SETALTZP
|
||||
sta IO.SETALTZP
|
||||
|
||||
ldx #0 start detection at page $00
|
||||
|
||||
@ -253,7 +253,7 @@ RW.DetectHW php
|
||||
dey
|
||||
bpl .6
|
||||
|
||||
sta CLRALTZP
|
||||
sta IO.CLRALTZP
|
||||
plp
|
||||
|
||||
txa PGCNT > 0 ?
|
||||
@ -270,8 +270,8 @@ RW.DetectHW php
|
||||
.9 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
RW.Install lda RRAMWRAMBNK1
|
||||
lda RRAMWRAMBNK1
|
||||
RW.Install lda IO.RRAMWRAMBNK1
|
||||
lda IO.RRAMWRAMBNK1
|
||||
|
||||
ldx #RWDRV.SIZE
|
||||
|
||||
@ -292,9 +292,9 @@ RW.Install lda RRAMWRAMBNK1
|
||||
sta RWDRV.IO1+1
|
||||
sta RWDRV.EXIT+1
|
||||
|
||||
lda RROMBNK1
|
||||
lda IO.RROMBNK1
|
||||
|
||||
sta SETWRITEAUX
|
||||
sta IO.SETWRITEAUX
|
||||
|
||||
ldx #RWDRVX.SIZE
|
||||
|
||||
@ -308,16 +308,16 @@ RW.Install lda RRAMWRAMBNK1
|
||||
sta RWDRVX.XM.IO2+1
|
||||
sta RWDRVX.XM.IO3+1
|
||||
|
||||
sta CLRWRITEAUX
|
||||
inc DEVCNT
|
||||
ldx DEVCNT
|
||||
sta IO.CLRWRITEAUX
|
||||
inc GP.DEVCNT
|
||||
ldx GP.DEVCNT
|
||||
lda #$B0 Slot 3,Drive 2,0=Not Removable, 0=no int, 00=1 Volume
|
||||
sta DEVLST,x
|
||||
sta GP.DEVLST,x
|
||||
|
||||
lda #RWDRV.START
|
||||
sta DEVPTRS3D2
|
||||
sta GP.DEVPTRS3D2
|
||||
lda /RWDRV.START
|
||||
sta DEVPTRS3D2+1
|
||||
sta GP.DEVPTRS3D2+1
|
||||
|
||||
clc
|
||||
rts
|
||||
@ -329,24 +329,30 @@ RW.Format jsr RW.BLOCK.SET00
|
||||
lda #0
|
||||
ror
|
||||
sta RW.BLOCK2.TB
|
||||
|
||||
jsr MLI
|
||||
.DA #MLIGETTIME
|
||||
.DA #MLI.GETTIME
|
||||
.DA 0
|
||||
|
||||
ldx #3
|
||||
.1 lda DATELO,x
|
||||
|
||||
.1 lda GP.DATE,x
|
||||
sta RW.BLOCK2.CT,x
|
||||
dex
|
||||
bpl .1
|
||||
|
||||
ldx #RW.BLOCK2.END-RW.BLOCK2
|
||||
|
||||
.2 lda RW.BLOCK2-1,x
|
||||
sta RW.BLOCK-1,x
|
||||
dex
|
||||
bne .2
|
||||
|
||||
jsr MLI Write Block 2,First VOL directory block
|
||||
.DA #MLIWRITEBLOCK
|
||||
.DA #MLI.WRITEBLOCK
|
||||
.DA RW.MLIWRITEBLOCK
|
||||
bcc .22
|
||||
|
||||
rts
|
||||
*--------------------------------------
|
||||
.22 jsr RW.BLOCK.SET00
|
||||
@ -356,9 +362,10 @@ RW.Format jsr RW.BLOCK.SET00
|
||||
|
||||
inc RW.MLIWRITEBLOCK.BLK
|
||||
jsr MLI Write Block 3,Last VOL directory block
|
||||
.DA #MLIWRITEBLOCK
|
||||
.DA #MLI.WRITEBLOCK
|
||||
.DA RW.MLIWRITEBLOCK
|
||||
bcc .33
|
||||
|
||||
rts
|
||||
*--------------------------------------
|
||||
.33 lda RW.PGCNT divide RW.PGCNT by 32 to get how many bitmap
|
||||
@ -373,11 +380,13 @@ RW.Format jsr RW.BLOCK.SET00
|
||||
lda RW.PGCNT
|
||||
and #$1F need an extra incomplete bitmap block?
|
||||
beq .3
|
||||
|
||||
inx
|
||||
.3 stx RW.BITMAPCNT store TOTAL bitmap block needed
|
||||
|
||||
.4 lda RW.FBITMAPCNT
|
||||
beq .49
|
||||
|
||||
dec RW.FBITMAPCNT
|
||||
jsr RW.BLOCK.SETFF
|
||||
|
||||
@ -440,7 +449,7 @@ RW.Format jsr RW.BLOCK.SET00
|
||||
bra .62
|
||||
|
||||
.63 jsr MLI Write Block 4,5...
|
||||
.DA #MLIWRITEBLOCK
|
||||
.DA #MLI.WRITEBLOCK
|
||||
.DA RW.MLIWRITEBLOCK
|
||||
bcs .9
|
||||
|
||||
@ -530,12 +539,12 @@ RWDRV.START ldy DRV.COMMAND 0 = Status ?
|
||||
sbc RWDRV.MAXHI+1
|
||||
bcs RWDRV.IOERR DRV.BLKNUM >= RW.DRV.SIZE, IO error
|
||||
|
||||
bit RD80STORE save 80 Store status
|
||||
bit IO.RD80STORE save 80 Store status
|
||||
|
||||
php Disable IRQ as no vector set in RW Banks
|
||||
sei
|
||||
|
||||
sta CLR80STORE make sure SETREADAUX/SETWRITEAUX effective everywhere
|
||||
sta IO.CLR80STORE make sure SETREADAUX/SETWRITEAUX effective everywhere
|
||||
|
||||
txa Get Back DRV.BLKNUM
|
||||
asl compute PAGE = blocknumLO *2
|
||||
@ -561,12 +570,12 @@ RWDRV.IO1 sta RWBankSelect Select RAMWorks Bank
|
||||
dey Y=CMD, zero if read
|
||||
bne RWDRV.W non zero, go write
|
||||
|
||||
sta SETREADAUX
|
||||
sta IO.SETREADAUX
|
||||
ldx #DRV.A2L READ:copy from RAM to BUFF
|
||||
lda #DRV.BUFF
|
||||
bra RWDRV.RW
|
||||
|
||||
RWDRV.W sta SETWRITEAUX
|
||||
RWDRV.W sta IO.SETWRITEAUX
|
||||
ldx #DRV.BUFF
|
||||
lda #DRV.A2L WRITE:copy from BUFF to RAM
|
||||
dey Make sure Y=0 for main loop below
|
||||
@ -588,13 +597,13 @@ RWDRV.RW.DST sta ($FF),y
|
||||
bcc RWDRV.RW.LOOP
|
||||
|
||||
RWDRV.EXIT stz RWBankSelect
|
||||
sta CLRREADAUX
|
||||
sta CLRWRITEAUX
|
||||
sta IO.CLRREADAUX
|
||||
sta IO.CLRWRITEAUX
|
||||
|
||||
plp restore IRQ
|
||||
|
||||
bpl RMDRV.CMDSTATUS
|
||||
sta SET80STORE
|
||||
sta IO.SET80STORE
|
||||
|
||||
RMDRV.CMDSTATUS
|
||||
RWDRV.MAXLO ldx #$FF return device block count in X,Y...
|
||||
@ -609,7 +618,7 @@ RWDRV.IOERR lda #MLI.E.IO Carry already set
|
||||
* X=Page(0/1 or LC),A=Bank
|
||||
*--------------------------------------
|
||||
RWDRV.GOAUX pha save BANK
|
||||
sta SETWRITEAUX
|
||||
sta IO.SETWRITEAUX
|
||||
|
||||
ldy #RWDRVX.XM.SIZE Backup begining of $300 to generate move code
|
||||
|
||||
@ -620,13 +629,13 @@ RWDRV.GOAUX pha save BANK
|
||||
|
||||
pla restore BANK
|
||||
|
||||
sta SETREADAUX
|
||||
sta IO.SETREADAUX
|
||||
jsr RWDRVX.START Setup Code in main mem at $300 for data move
|
||||
* returns : CC=WRITE, CS=READ
|
||||
sta CLRREADAUX CLRWRITEAUX already triggered by code copy
|
||||
sta IO.CLRREADAUX IO.CLRWRITEAUX already triggered by code copy
|
||||
jsr RWDRV.XM.RUN Now execute generated code in main memory
|
||||
|
||||
sta SETREADAUX
|
||||
sta IO.SETREADAUX
|
||||
jmp RWDRVX.RESTORE
|
||||
|
||||
RWDRV.END .EP
|
||||
@ -651,7 +660,7 @@ RWDRVX.START sta RWDRVX.XM.BANK+1 setup BANK
|
||||
lsr
|
||||
php
|
||||
|
||||
ldy #RRAMWRAMBNK1
|
||||
ldy #IO.RRAMWRAMBNK1
|
||||
|
||||
txa
|
||||
beq .1 page 0/1, no need to check BANK
|
||||
@ -661,7 +670,7 @@ RWDRVX.START sta RWDRVX.XM.BANK+1 setup BANK
|
||||
|
||||
ora #$10 Remap $C0 page to $D0 BNK2
|
||||
|
||||
ldy #RRAMWRAMBNK2
|
||||
ldy #IO.RRAMWRAMBNK2
|
||||
|
||||
.1 sty RWDRVX.XM.RWLC+1 Save to select proper RW bank later
|
||||
|
||||
@ -684,7 +693,7 @@ RWDRVX.START sta RWDRVX.XM.BANK+1 setup BANK
|
||||
stz RWDRVX.XM.DST+1 WRITE to dst LO = 0
|
||||
sta RWDRVX.XM.DST+2 WRITE to dst HI = PAGE
|
||||
|
||||
.3 sta CLRWRITEAUX
|
||||
.3 sta IO.CLRWRITEAUX
|
||||
|
||||
ldy #RWDRVX.XM.SIZE
|
||||
|
||||
@ -713,7 +722,7 @@ RWDRVX.RESTORE ldy #RWDRVX.XM.SIZE Now, restore begining of $300
|
||||
*--------------------------------------
|
||||
RWDRVX.XM.START ldy #2 2 pages to copy
|
||||
|
||||
RWDRVX.XM.COPY sta CLRALTZP
|
||||
RWDRVX.XM.COPY sta IO.CLRALTZP
|
||||
|
||||
jsr RWDRV.XM.RUN+RWDRVX.XM.SRCLC-RWDRVX.XM.START
|
||||
sta $C000,x select proper Main/Aux ZP/LC
|
||||
@ -726,7 +735,7 @@ RWDRVX.XM.SRC lda $FFFF,x
|
||||
inx
|
||||
bne RWDRVX.XM.SRC
|
||||
|
||||
sta CLRALTZP
|
||||
sta IO.CLRALTZP
|
||||
|
||||
jsr RWDRV.XM.RUN+RWDRVX.XM.DSTLC-RWDRVX.XM.START
|
||||
sta $C000,x select proper Main/Aux ZP/LC
|
||||
@ -744,14 +753,14 @@ RWDRVX.XM.DST sta $FFFF,x
|
||||
dey
|
||||
bne RWDRVX.XM.COPY
|
||||
|
||||
sta CLRALTZP
|
||||
sta IO.CLRALTZP
|
||||
RWDRVX.XM.IO3 stz RWBankSelect
|
||||
*--------------------------------------
|
||||
RWDRVX.XM.MNLC bit RRAMWRAMBNK1 ProDOS always uses LCBANK1
|
||||
RWDRVX.XM.MNLC bit IO.RRAMWRAMBNK1 ProDOS always uses LCBANK1
|
||||
|
||||
lda #0
|
||||
|
||||
ldx #CLRALTZP
|
||||
ldx #IO.CLRALTZP
|
||||
|
||||
rts
|
||||
*--------------------------------------
|
||||
@ -763,7 +772,7 @@ RWDRVX.XM.RWLC bit $C000
|
||||
|
||||
RWDRVX.XM.BANK lda #$FF
|
||||
|
||||
ldx #SETALTZP
|
||||
ldx #IO.SETALTZP
|
||||
|
||||
rts
|
||||
*--------------------------------------
|
||||
|
Loading…
x
Reference in New Issue
Block a user