PRODOS.FX : major bug removed

This commit is contained in:
burniouf 2023-11-12 14:20:15 +01:00
parent cae65ca341
commit 6edf99a78f
51 changed files with 1279 additions and 888 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -140,27 +140,43 @@ A2osX.QC.Start2 sec
sta $2E0-1,x ROOT sz for KERNEL sta $2E0-1,x ROOT sz for KERNEL
dex dex
bpl .6 bpl .6
lda GP.KVER
cmp #$8D
beq .7
ldy #SYSKERNEL
lda /SYSKERNEL
bra .8
.7 ldy #SYSKRNL8M
lda /SYSKRNL8M
.8 sty TmpPtr1
sta TmpPtr1+1
ldx $280 ldx $280
ldy #0 ldy #0
.7 inx .9 inx
iny iny
lda SYSKERNEL,y lda (TmpPtr1),y
sta $280,x sta $280,x
cpy SYSKERNEL tya
bne .7 cmp (TmpPtr1)
bne .9
stx $280 stx $280
jsr A2osX.QC.Load jsr A2osX.QC.Load
bcs * bcs *
.8 >LDYAI MSG.INIT1OK
>LDYAI MSG.INIT1OK
sec sec
jsr A2osX.QC.PrintYA jsr A2osX.QC.PrintYA
A2osX.QC.JMP >DEBUGOA >DEBUGOA
jmp $2000 jmp $2000
*-------------------------------------- *--------------------------------------
A2osX.QC.SetPFX jsr MLI A2osX.QC.SetPFX jsr MLI
@ -257,6 +273,7 @@ MLICLOSE03 .DA #1
.BS 1 .BS 1
*-------------------------------------- *--------------------------------------
SYSKERNEL .PS "sys/kernel" SYSKERNEL .PS "sys/kernel"
SYSKRNL8M .PS "sys/krnl8m"
*-------------------------------------- *--------------------------------------
MSG.INIT1 .PS "A2osX[Stage1]:Init" MSG.INIT1 .PS "A2osX[Stage1]:Init"
MSG.SETPREFIXOK .PS "Prefix Set: " MSG.SETPREFIXOK .PS "Prefix Set: "

View File

@ -149,17 +149,32 @@ A2osX.RamDrv >LDYAI MSG.RAMDRV
A2osX.SetupQC lda IO.RRAMWRAMBNK2 A2osX.SetupQC lda IO.RRAMWRAMBNK2
lda IO.RRAMWRAMBNK2 lda IO.RRAMWRAMBNK2
ldx #0 lda GP.KVER
.1 lda A2osX.QC.B.Start,x Still at $2xxx !!! not moved to $1xxx cmp #$8D
bne .1
sta IO.SETALTZP
.1 ldx #0
.2 lda A2osX.QC.B.Start,x Still at $2xxx !!! not moved to $1xxx
sta $D100,x sta $D100,x
lda A2osX.QC.B.Start+$100,x lda A2osX.QC.B.Start+$100,x
sta $D200,x sta $D200,x
lda A2osX.QC.B.Start+$200,x lda A2osX.QC.B.Start+$200,x
sta $D300,x sta $D300,x
inx inx
bne .1 bne .2
lda IO.RROMBNK1 lda GP.KVER
cmp #$8D
bne .3
sta IO.CLRALTZP
bra A2osX.MLIQuit
.3 lda IO.RROMBNK1
*-------------------------------------- *--------------------------------------
A2osX.EnumPM >LDYAI MSG.PMENUM do this After SetupQC, a PM could override QC A2osX.EnumPM >LDYAI MSG.PMENUM do this After SetupQC, a PM could override QC
jsr PrintFYA jsr PrintFYA
@ -691,6 +706,7 @@ SYSTEM.END .EQ *
A2osX.QC.B.Start A2osX.QC.B.Start
A2osX.QC.B.BOOT .EQ *+4 A2osX.QC.B.BOOT .EQ *+4
A2osX.QC.B.ROOT .EQ *+4+64 A2osX.QC.B.ROOT .EQ *+4+64
.INB usr/src/a2osx.s.qc .INB usr/src/a2osx.s.qc
*-------------------------------------- *--------------------------------------
MAN MAN

View File

@ -411,7 +411,7 @@ CS.RUN.Arc >LDYA ZPChunkLen
>LDYA ZPChunkLen >LDYA ZPChunkLen
jsr X.Arc jsr X.Arc
* bcs .9 bcs .9
stx ZPAlg stx ZPAlg
>STYA ZPChunkPakedLen >STYA ZPChunkPakedLen
@ -485,8 +485,7 @@ CS.RUN.WriteStore
bcs .9 bcs .9
>PUSHW L.MSG.ARCED >PUSHW L.MSG.ARCED
ldx ZPAlg >PUSHW L.MSG.STORED
>PUSHW L.MSG.STORED,x
>PUSHW ZPChunkPakedLen >PUSHW ZPChunkPakedLen
>PUSHW ZPChunkNewOfs >PUSHW ZPChunkNewOfs
>PUSHBI 6 >PUSHBI 6

View File

@ -346,8 +346,8 @@ CS.RUN.PROBE >LDYA L.MSG.PROBE
sta AARP.PRB.SPA+2 sta AARP.PRB.SPA+2
sta AARP.PRB.TPA+2 sta AARP.PRB.TPA+2
lda A2osX.TIMER16 lda A2osX.T16
eor A2osX.TIMER16+1 eor A2osX.T16+1
bne .1 bne .1
inc inc
@ -463,7 +463,7 @@ CS.RUN.EtcFiles >LDYAI 256
>PUSHYA >PUSHYA
>PUSHW L.CFG.DefaultHost >PUSHW L.CFG.DefaultHost
>PUSHW A2osX.TIMER16 >PUSHW A2osX.T16
>PUSHBI 2 >PUSHBI 2
>SYSCALL SPrintF >SYSCALL SPrintF

View File

@ -711,8 +711,8 @@ CS.RUN.InitCat lda CatSize
>PUSHW pData >PUSHEA.G VolName >PUSHW pData >PUSHEA.G VolName
>PUSHW L.FMT.BLANK >PUSHW L.FMT.BLANK
>PUSHW A2osX.TIMER16 >PUSHW A2osX.T16
>PUSHW A2osX.RANDOM16 >PUSHW A2osX.R16
>PUSHBI 4 >PUSHBI 4
>SYSCALL SPrintF >SYSCALL SPrintF
rts rts

View File

@ -12,7 +12,7 @@ DHCP.INIT lda IPCFG+S.NETCFG.STATUS
ldx #3 ldx #3
.1 eor A2osX.TIMER16,x .1 eor A2osX.T16,x
sta DHCP.DISC.XID,x sta DHCP.DISC.XID,x
sta DHCP.REQ.XID,x sta DHCP.REQ.XID,x
dex dex

View File

@ -19,7 +19,7 @@ ETC.ReadFiles >LDYAI 256
>PUSHW L.IPCFG.HOSTNAME >PUSHW L.IPCFG.HOSTNAME
>PUSHW L.CFG.DefaultHost >PUSHW L.CFG.DefaultHost
>PUSHW A2osX.TIMER16 >PUSHW A2osX.T16
>PUSHBI 2 >PUSHBI 2
>SYSCALL SPrintF >SYSCALL SPrintF

View File

@ -40,9 +40,9 @@ CS.RUN.TLS jsr CS.RUN.TLS.init
CS.RUN.TLS.init >LDYA L.MSG.TLS CS.RUN.TLS.init >LDYA L.MSG.TLS
>SYSCALL PutS >SYSCALL PutS
lda A2osX.RANDOM16 lda A2osX.R16
sta ZPPtr1 sta ZPPtr1
lda A2osX.RANDOM16+1 lda A2osX.R16+1
and #$7F and #$7F
sta ZPPtr1+1 sta ZPPtr1+1

View File

@ -180,14 +180,14 @@ CS.RUN.OPENSKT ldx #3
dex dex
bpl .2 bpl .2
lda A2osX.RANDOM16 lda A2osX.R16
eor A2osX.TIMER16+1 eor A2osX.T16+1
>STA.G SA.LOCAL+S.SOCKADDR.PORT >STA.G SA.LOCAL+S.SOCKADDR.PORT
>STA.G SA.REMOTE+S.SOCKADDR.PORT >STA.G SA.REMOTE+S.SOCKADDR.PORT
sta Identifier sta Identifier
lda A2osX.RANDOM16+1 lda A2osX.R16+1
eor A2osX.TIMER16 eor A2osX.T16
>STA.G SA.LOCAL+S.SOCKADDR.PORT+1 >STA.G SA.LOCAL+S.SOCKADDR.PORT+1
>STA.G SA.REMOTE+S.SOCKADDR.PORT+1 >STA.G SA.REMOTE+S.SOCKADDR.PORT+1
sta Identifier+1 sta Identifier+1

View File

@ -101,7 +101,7 @@ CS.RUN jsr Init.TimeOut
bcs .91 bcs .91
>STA.G hSocket >STA.G hSocket
ldx #3 ldx #3
.21 lda A2osX.TIMER16,x .21 lda A2osX.T16,x
sta RPC.Request,x sta RPC.Request,x
dex dex
bpl .21 bpl .21

View File

@ -246,17 +246,17 @@ CS.RUN.GetFile stz hFILE
plp plp
rts rts
*-------------------------------------- *--------------------------------------
CS.RUN.TYPESUBT lda A2osX.HWType CS.RUN.TYPESUBT lda A2osX.HWT
asl asl
tax tax
>LDYA L.TYPES,x >LDYA L.TYPES,x
jsr CS.RUN.PRINTYA jsr CS.RUN.PRINTYA
lda A2osX.HWType lda A2osX.HWT
beq .8 Unknown beq .8 Unknown
cmp #A2osX.HWType.IIc cmp #A2osX.HWT.IIc
bcc .1 bcc .1
>PUSHW L.SUBT.ROM //c & IIgs >PUSHW L.SUBT.ROM //c & IIgs

View File

@ -156,12 +156,12 @@ Dev.Detect >STYA ZPArgPtr
Dev.ParseArgs lda (ZPArgPtr) Dev.ParseArgs lda (ZPArgPtr)
bne .1 bne .1
lda A2osX.RANDOM16 lda A2osX.R16
eor A2osX.TIMER16 eor A2osX.T16
sta DCB+S.DCB.NIC.MAC+3 sta DCB+S.DCB.NIC.MAC+3
eor A2osX.RANDOM16+1 eor A2osX.R16+1
sta DCB+S.DCB.NIC.MAC+4 sta DCB+S.DCB.NIC.MAC+4
eor A2osX.TIMER16+1 eor A2osX.T16+1
sta DCB+S.DCB.NIC.MAC+5 sta DCB+S.DCB.NIC.MAC+5
clc clc
rts rts

View File

@ -58,8 +58,8 @@ L.OSD .DA OSD
*-------------------------------------- *--------------------------------------
Dev.Detect >LDYA L.MSG.DETECT Dev.Detect >LDYA L.MSG.DETECT
>SYSCALL PutS >SYSCALL PutS
lda A2osX.HWType lda A2osX.HWT
cmp #A2osX.HWType.IIc cmp #A2osX.HWT.IIc
bcc .1 bcc .1
* stz DCB+S.DCB.GFX.S //c : 80c Mode * stz DCB+S.DCB.GFX.S //c : 80c Mode

View File

@ -107,12 +107,12 @@ Dev.Detect >STYA ZPArgPtr
Dev.ParseArgs lda (ZPArgPtr) Dev.ParseArgs lda (ZPArgPtr)
bne .1 bne .1
lda A2osX.RANDOM16 lda A2osX.R16
eor A2osX.TIMER16 eor A2osX.T16
sta DCB+S.DCB.NIC.MAC+3 sta DCB+S.DCB.NIC.MAC+3
eor A2osX.RANDOM16+1 eor A2osX.R16+1
sta DCB+S.DCB.NIC.MAC+4 sta DCB+S.DCB.NIC.MAC+4
eor A2osX.TIMER16+1 eor A2osX.T16+1
sta DCB+S.DCB.NIC.MAC+5 sta DCB+S.DCB.NIC.MAC+5
clc clc
rts rts

View File

@ -134,12 +134,12 @@ Dev.Detect >STYA ZPArgPtr
Dev.ParseArgs lda (ZPArgPtr) Dev.ParseArgs lda (ZPArgPtr)
bne .1 bne .1
lda A2osX.RANDOM16 lda A2osX.R16
eor A2osX.TIMER16 eor A2osX.T16
sta DCB+S.DCB.NIC.MAC+3 sta DCB+S.DCB.NIC.MAC+3
eor A2osX.RANDOM16+1 eor A2osX.R16+1
sta DCB+S.DCB.NIC.MAC+4 sta DCB+S.DCB.NIC.MAC+4
eor A2osX.TIMER16+1 eor A2osX.T16+1
sta DCB+S.DCB.NIC.MAC+5 sta DCB+S.DCB.NIC.MAC+5
clc clc
rts rts

View File

@ -128,12 +128,12 @@ Dev.Detect >STYA ZPArgPtr
Dev.ParseArgs lda (ZPArgPtr) Dev.ParseArgs lda (ZPArgPtr)
bne .1 bne .1
lda A2osX.RANDOM16 lda A2osX.R16
eor A2osX.TIMER16 eor A2osX.T16
sta DCB+S.DCB.NIC.MAC+3 sta DCB+S.DCB.NIC.MAC+3
eor A2osX.RANDOM16+1 eor A2osX.R16+1
sta DCB+S.DCB.NIC.MAC+4 sta DCB+S.DCB.NIC.MAC+4
eor A2osX.TIMER16+1 eor A2osX.T16+1
sta DCB+S.DCB.NIC.MAC+5 sta DCB+S.DCB.NIC.MAC+5
clc clc
rts rts

View File

@ -132,12 +132,12 @@ Dev.Detect >STYA ZPArgPtr
Dev.ParseArgs lda (ZPArgPtr) Dev.ParseArgs lda (ZPArgPtr)
bne .1 bne .1
lda A2osX.RANDOM16 lda A2osX.R16
eor A2osX.TIMER16 eor A2osX.T16
sta DCB+S.DCB.NIC.MAC+3 sta DCB+S.DCB.NIC.MAC+3
eor A2osX.RANDOM16+1 eor A2osX.R16+1
sta DCB+S.DCB.NIC.MAC+4 sta DCB+S.DCB.NIC.MAC+4
eor A2osX.TIMER16+1 eor A2osX.T16+1
sta DCB+S.DCB.NIC.MAC+5 sta DCB+S.DCB.NIC.MAC+5
clc clc
rts rts

View File

@ -22,54 +22,54 @@ pBase .EQ $DE 8 Bytes
ZPBIN .EQ $E0 32 bytes ZPBIN .EQ $E0 32 bytes
PSCTX.SIZE .EQ $100-pCode PSCTX.SIZE .EQ $100-pCode
*-------------------------------------- *--------------------------------------
A2osX.ZCALL .EQ $0000 *A2osX.ZCALL .EQ $0000
*-------------------------------------- *--------------------------------------
* A2osX GLOBAL PAGE * A2osX GLOBAL PAGE
* $1000->$1012 : Public Vectors * $1000->$1012 : Public Vectors
*-------------------------------------- *--------------------------------------
A2osX.SYSCALL .EQ $1000 A2osX.GP .EQ $0140
A2osX.LIBCALL .EQ $1003 A2osX.SYSCALL .EQ A2osX.GP+00
A2osX.ATKCALL .EQ $1006 A2osX.LIBCALL .EQ A2osX.GP+03
A2osX.FPUCALL .EQ $1009 A2osX.ATKCALL .EQ A2osX.GP+06
A2osX.BADCALL .EQ $100C A2osX.FPUCALL .EQ A2osX.GP+09
A2osX.BADCALL .EQ A2osX.GP+12
A2osX.SLEEP .EQ A2osX.GP+16
A2osX.SYSCALL2 .EQ A2osX.GP+19
*-------------------------------------- *--------------------------------------
A2osX.SLEEP .EQ $1010 * Public Variables
*-------------------------------------- *--------------------------------------
* $11D0->$11EF : Public Variables A2osX.SCRNDEVS .EQ A2osX.GP+22 0=console, 1-8=VT100, 9=GFX
*-------------------------------------- A2osX.ASCREEN .EQ A2osX.GP+32 Active Screen
A2osX.SCRNDEVS .EQ $11D0 0=console, 1-8=VT100, 9=GFX A2osX.FSID .EQ A2osX.GP+33
A2osX.ASCREEN .EQ $11DA Active Screen A2osX.KVER .EQ A2osX.GP+34 WORD
* 5 bytes A2osX.IRQMode .EQ A2osX.GP+36
A2osX.KVER .EQ $11E0 WORD A2osX.ATLKSID .EQ A2osX.GP+37
* 1 byte A2osX.CPUTYPE .EQ A2osX.GP+38
A2osX.IRQMode .EQ $11E3 A2osX.CPUSPEED .EQ A2osX.GP+39 WORD, (->255.99 Mhz)
A2osX.ATLKSID .EQ $11E4 *
A2osX.FSID .EQ $11E5 A2osX.Z80SLOT .EQ A2osX.GP+41
A2osX.CPUTYPE .EQ $11E6 A2osX.HWT .EQ A2osX.GP+42
A2osX.CPUSPEED .EQ $11E7 WORD, (->255.99 Mhz) A2osX.HWT.UNKNOWN .EQ 0
A2osX.HWT.IIe .EQ 1
A2osX.Z80SLOT .EQ $11E9 A2osX.HWT.IIc .EQ 2
A2osX.HWType .EQ $11EA A2osX.HWT.IIgs .EQ 3
A2osX.HWType.UNKNOWN .EQ 0 A2osX.HWSubT .EQ A2osX.GP+43
A2osX.HWType.IIe .EQ 1
A2osX.HWType.IIc .EQ 2
A2osX.HWType.IIgs .EQ 3
A2osX.HWSubT .EQ $11EB
A2osX.HWSubT.Enh .EQ 1 A2osX.HWSubT.Enh .EQ 1
A2osX.HWSubT.LCCard .EQ 2 A2osX.HWSubT.LCCard .EQ 2
A2osX.TIMER16 .EQ $11EC WORD A2osX.T16 .EQ A2osX.GP+44 WORD
A2osX.RANDOM16 .EQ $11EE WORD A2osX.R16 .EQ A2osX.GP+46 WORD
*-------------------------------------- *--------------------------------------
* $11F0->$11FF : Kernel Config Block * Kernel Config Block
*-------------------------------------- *--------------------------------------
A2osX.KCONFIG .EQ $11F0 A2osX.KCONFIG .EQ A2osX.GP+48
A2osX.HZ .EQ $11F0 5/6 for 50/60Hz A2osX.HZ .EQ A2osX.KCONFIG+00 5/6 for 50/60Hz
A2osX.TTYDEVS .EQ $11F1 A2osX.TTYDEVS .EQ A2osX.KCONFIG+01
A2osX.F .EQ $11F8 A2osX.F .EQ A2osX.KCONFIG+02
A2osX.F.CHROOT .EQ %10000000 ChRooting to /RAMx A2osX.F.CHROOT .EQ %10000000 ChRooting to /RAMx
A2osX.F.PMODE .EQ %01000000 Pre-emptive Mode A2osX.F.PMODE .EQ %01000000 Pre-emptive Mode
A2osX.S .EQ $11F8 $BEF9->$BEFF, 7 slots *
A2osX.S .EQ A2osX.KCONFIG+09 7 slots
A2osX.S.Z80 .EQ $80 A2osX.S.Z80 .EQ $80
A2osX.S.VXD .EQ $81 A2osX.S.VXD .EQ $81
A2osX.S.ATK .EQ $82 A2osX.S.ATK .EQ $82
@ -83,10 +83,6 @@ A2osX.S.CLK .EQ $E3
A2osX.S.SND .EQ $E4 A2osX.S.SND .EQ $E4
A2osX.S.DISABLE .EQ $FF A2osX.S.DISABLE .EQ $FF
*-------------------------------------- *--------------------------------------
* NON BLOCKING Entry point (From libs)
*--------------------------------------
A2osX.SYSCALL2 .EQ $E200
*--------------------------------------
* ProDOS ERROR CODES : $00->$5F * ProDOS ERROR CODES : $00->$5F
* Kernel ERROR CODES : $60->$7F * Kernel ERROR CODES : $60->$7F
* Lib ERROR CODES : $80->$BF * Lib ERROR CODES : $80->$BF

View File

@ -78,7 +78,7 @@ DNS.REQUEST lda hDNSSocket
sty DNS.MSG.LEN sty DNS.MSG.LEN
stz DNS.MSG.LEN+1 stz DNS.MSG.LEN+1
>LDYA A2osX.RANDOM16 >LDYA A2osX.R16
>STYA DNS.MSG.ID >STYA DNS.MSG.ID
>STYA DNS.TmpCache+S.DNSCACHE.ID >STYA DNS.TmpCache+S.DNSCACHE.ID

View File

@ -1316,7 +1316,7 @@ SKT.NewTCB ldx #S.SOCKET.TCP.INSEQNUM
ldx #3 ldx #3
.2 lda A2osX.TIMER16,x .2 lda A2osX.T16,x
sta SKT.Cache+S.SOCKET.TCP.OUTNEXTSEQ,x sta SKT.Cache+S.SOCKET.TCP.OUTNEXTSEQ,x
dex dex
bpl .2 bpl .2

View File

@ -3,18 +3,20 @@ NEW
.LIST OFF .LIST OFF
.OP 65816 .OP 65816
.OR $2000 .OR $2000
.TF PRODOS8M,TSYS .TF PRODOS.8M,TSYS
*-------------------------------------- *--------------------------------------
KVER .EQ 30 release 3.0.0 KVER .EQ $8D release "8M"
*-------------------------------------- *--------------------------------------
READCAT .EQ 1 Boot Block read Catalog at $C00 READCAT .EQ 1 Boot Block read Catalog at $C00
ENHFILENAME .EQ 1 ENHFILENAME .EQ 1
DIREXTENDROOT .EQ 1
LOWERCASE .EQ 1 LOWERCASE .EQ 1
ACL .EQ 1 ACL .EQ 1
LOGO .EQ 1 LOGO .EQ 1
AUXLC .EQ 1 AUXLC .EQ 1
M.PM .EQ 0 M.PM .EQ 0
M.RAM .EQ 0 M.RAM .EQ 0
M.SEL .EQ 1
*-------------------------------------- *--------------------------------------
.INB inc/zp.i .INB inc/zp.i
.INB inc/io.i .INB inc/io.i
@ -96,6 +98,67 @@ X.Unpak.XatYA sty ZPOutBufPtr
.INB usr/src/prodos.fx/prodos.s.logo .INB usr/src/prodos.fx/prodos.s.logo
.FIN .FIN
*-------------------------------------- *--------------------------------------
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
*--------------------------------------
ILDR.PAK .DA #0 ILDR.PAK .DA #0
.DA ILDR.LEN .DA ILDR.LEN
.INB usr/src/prodos.fx/prodos.s.ildr .INB usr/src/prodos.fx/prodos.s.ildr
@ -158,67 +221,6 @@ SEL1.PAK .DA #0
SEL2.PAK .DA #0 SEL2.PAK .DA #0
.DA SEL2.LEN .DA SEL2.LEN
.INB usr/src/prodos.fx/prodos.s.sel2 .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 .AS "PAKME" TAG
.DA $2000 BIN ORG .DA $2000 BIN ORG

217
ProDOS.FX/PDOSTN.S..txt Normal file
View File

@ -0,0 +1,217 @@
NEW
AUTO 3,1
.LIST OFF
.OP 65816
.OR $2000
.TF PRODOS.TN,TSYS
*--------------------------------------
KVER .EQ $23 release 2.0.3
*--------------------------------------
READCAT .EQ 0 Boot Block read Catalog at $C00
ENHFILENAME .EQ 1
DIREXTENDROOT .EQ 1
LOWERCASE .EQ 1
ACL .EQ 0
LOGO .EQ 0
AUXLC .EQ 0
M.PM .EQ 0
M.RAM .EQ 0
M.SEL .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
.INB inc/arc.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
ZPSTRLenBits .BS 1
ZPBLOfsLBits .BS 1
ZPBLOfsHBits .BS 1
ZPBLLenBits .BS 1
ZPTOPCnt .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
sta ZPInBufPtr
lda PAKME.Table+1,x
sta ZPInBufPtr+1
.INB usr/src/shared/x.unarc.s
.DO LOGO=1
.INB usr/src/prodos.fx/prodos.s.logo
.FIN
*--------------------------------------
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
.DO M.SEL=1
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
.FIN
*--------------------------------------
ILDR.PAK .DA ILDR.LEN
.DA 0
.INB usr/src/prodos.fx/prodos.s.ildr
GP.PAK .DA GP.LEN
.DA 0
.INB usr/src/prodos.fx/prodos.s.gp
XRW.PAK .DA XRW.LEN
.DA 0
.INB usr/src/prodos.fx/prodos.s.xrw
XDOS.PAK .DA XDOS.LEN
.DA 0
.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 IRQ.LEN
.DA 0
.INB usr/src/prodos.fx/prodos.s.irq
.DO M.RAM=1
RAM.PAK .DA RAM.LEN
.DA 0
.INB usr/src/prodos.fx/prodos.s.ram
RAMX.PAK .DA RAMX.LEN
.DA 0
.INB usr/src/prodos.fx/prodos.s.ramx
.FIN
DCLK.PAK .DA DCLK.LEN
.DA 0
.INB usr/src/prodos.fx/prodos.s.dclk
NCLK.PAK .DA NCLK.LEN
.DA 0
.INB usr/src/prodos.fx/prodos.s.nclk
TCLK.PAK .DA TCLK.LEN
.DA 0
.INB usr/src/prodos.fx/prodos.s.tclk
XCLK.PAK .DA XCLK.LEN
.DA 0
.INB usr/src/prodos.fx/prodos.s.xclk
CCLK.PAK .DA CCLK.LEN
.DA 0
.INB usr/src/prodos.fx/prodos.s.cclk
.DO M.SEL=1
SEL1.PAK .DA SEL1.LEN
.DA 0
.INB usr/src/prodos.fx/prodos.s.sel1
SEL2.PAK .DA SEL2.LEN
.DA 0
.INB usr/src/prodos.fx/prodos.s.sel2
.FIN
*--------------------------------------
.AS "ARCME" TAG
.DA $2000 BIN ORG
.DA #PAKME.ID/2 Chunk Count
.DA PAKME.Table Chunks
*--------------------------------------
MAN
SAVE usr/src/prodos.fx/pdostn.s
ASM

View File

@ -243,6 +243,8 @@ LDR.IIGS sta XDOS.CortFlag
ldx #PAKME.CCLK.ID ldx #PAKME.CCLK.ID
jsr LDR.SetupCLK jsr LDR.SetupCLK
.DO M.SEL
* ldx #PAKME.SEL2.ID * ldx #PAKME.SEL2.ID
* ldy #$1000 * ldy #$1000
* lda /$1000 * lda /$1000
@ -250,6 +252,8 @@ LDR.IIGS sta XDOS.CortFlag
ldx #PAKME.SEL2.ID ldx #PAKME.SEL2.ID
jsr LDR.SetupSEL jsr LDR.SetupSEL
.FIN
*-------------------------------------- *--------------------------------------
lda LDR.BootFlag lda LDR.BootFlag
bne .1 branch if prodos 8 alone bne .1 branch if prodos 8 alone
@ -261,8 +265,12 @@ LDR.IIGS sta XDOS.CortFlag
.1 bra LDR.Common .1 bra LDR.Common
*-------------------------------------- *--------------------------------------
LDR.II ldx #PAKME.SEL1.ID LDR.II .DO M.SEL
ldx #PAKME.SEL1.ID
jsr LDR.SetupSEL jsr LDR.SetupSEL
.FIN
jsr LDR.ClkDevScan jsr LDR.ClkDevScan
*-------------------------------------- *--------------------------------------

View File

@ -338,18 +338,18 @@ XDOS.SysErr sta GP.ERROR P8 error code
*-------------------------------------- *--------------------------------------
XDOS.SysDeath tax death error code. XDOS.SysDeath tax death error code.
sta IO.CLR80DISP disable 80 col hardware. sta IO.CLR80DISP disable 80 col hardware.
lda IO.SETTEXT switch in text. sta IO.SETTEXT switch in text.
lda XDOS.CortFlag is this a Cortland? lda XDOS.CortFlag is this a Cortland?
beq .1 if not, don't use super hires switch. beq .1 if not, don't use super hires switch.
stz IO.GS.NEWVIDEO force off super hires. stz IO.GS.NEWVIDEO force off super hires.
.1 lda IO.CLRPAGE2 switch in text page 1. .1 sta IO.CLRPAGE2 switch in text page 1.
ldy #deathmsg.LEN-1 ldy #deathmsg.LEN-1
.2 lda deathmsg,y .2 lda deathmsg,y
sta $400,y 'RESTART SYSTEM-$' sta $400,y 'SYS ERR-$'
dey dey
bpl .2 bpl .2
@ -799,11 +799,11 @@ online1.ERR pha save error code.
.1 sec flag error .1 sec flag error
rts rts
*-------------------------------------- *--------------------------------------
online1.OK lda XDOS.VCBs,x get volume name count online1.OK lda XDOS.VCBs,x get volume name count
sta namcnt sta namcnt
ldy namptr index to user's buffer. ldy namptr index to user's buffer.
.1 lda XDOS.VCBs,x move name to user's buffer .1 lda XDOS.VCBs,x move name to user's buffer
sta (usrbuf),y sta (usrbuf),y
inx inx
iny iny
@ -811,7 +811,7 @@ online1.OK lda XDOS.VCBs,x get volume name count
bpl .1 bpl .1
svdevn ldy namptr index to 1st byte of this entry. svdevn ldy namptr index to 1st byte of this entry.
lda GP.DEVNUM upper nibble = device# and lda GP.DEVNUM upper nibble = device# and
ora (usrbuf),y lower nibble = name length. ora (usrbuf),y lower nibble = name length.
sta (usrbuf),y sta (usrbuf),y
@ -819,52 +819,65 @@ svdevn ldy namptr index to 1st byte of this entry.
rts end of block file manager rts end of block file manager
*-------------------------------------- *--------------------------------------
XDOS.Create jsr XDOS.CheckPath check for duplicate, get free entry XDOS.Create jsr XDOS.CheckPath check for duplicate, get free entry
bcc duperr error code may be 'file not found' bcc .4 error code may be 'file not found'
tstfnf cmp #MLI.E.FNOTFND 'file not found' is ok cmp #MLI.E.FNOTFND 'file not found' is ok
bne crerr1 otherwise exit with error. bne .5 otherwise exit with error.
ldy #$07 test for tree or directory file, ldy #$07 test for tree or directory file,
lda (ZP.A3L),y no other kinds are legal. lda (ZP.A3L),y no other kinds are legal.
cmp #$04 is it seed, sapling or tree? cmp #$04 is it seed, sapling or tree?
bcc tstdspc branch if it is bcc .1 branch if it is
cmp #$0D cmp #$0D
bne ctyperr report type error if not directory. bne .3 report type error if not directory.
tstdspc lda GP.DEVNUM make sure destination device .1 lda GP.DEVNUM make sure destination device
jsr XDOS.TestWPA is not write protected. jsr XDOS.TestWPA is not write protected.
bcs H351D bcs H351D
lda nofree is there space in directory to lda nofree is there space in directory to
beq xtndir add this file? branch if not
jmp creat1 otherwise, go create file.
xtndir lda own_blk before extending directory, .DO DIREXTENDROOT=1
beq XDOS.DirExtend
bne XDOS.Create1
.ELSE
beq .2 add this file? branch if not
jmp XDOS.Create1 otherwise, go create file.
.2 lda own_blk before extending directory,
ora own_blk+1 make sure it's a subdirectory. ora own_blk+1 make sure it's a subdirectory.
bne H352A bne XDOS.DirExtend
lda #MLI.E.DIRFULL otherwise, directory full error lda #MLI.E.DIRFULL otherwise, directory full error
.HS 2C BIT ABS .HS 2C BIT ABS
ctyperr lda #MLI.E.UNSUPST filetype error
.HS 2C BIT ABS
duperr lda #MLI.E.DUPFILE name already exists
crerr1 sec
H351D rts
H352A lda ZP.BLKNUM preserve disk address of current (last) .FIN
.3 lda #MLI.E.UNSUPST filetype error
.HS 2C BIT ABS
.4 lda #MLI.E.DUPFILE name already exists
.5 sec
H351D rts
*--------------------------------------
XDOS.DirExtend lda ZP.BLKNUM preserve disk address of current (last)
pha directory link, before allocating an pha directory link, before allocating an
lda ZP.BLKNUM+1 extended block. lda ZP.BLKNUM+1 extended block.
pha pha
jsr alc1blk allocate a block for extending directory jsr XDOS.GetFreeBlk allocate a block for extending directory
plx plx
stx ZP.BLKNUM+1 restore block addr of dir info in XDOS.GBuf stx ZP.BLKNUM+1 restore block addr of dir info in XDOS.GBuf
plx plx
stx ZP.BLKNUM stx ZP.BLKNUM
bcs H351D unable to allocate. bcs H351D unable to allocate.
sta XDOS.GBuf+2 save block address in y,a to sta XDOS.GBuf+2 save block address in y,a to
sty XDOS.GBuf+3 current directory. sty XDOS.GBuf+3 current directory.
.DO LOWERCASE=1 .DO LOWERCASE=1
jsr XDOS.WriteGBufDir jsr XDOS.WriteGBufDir
.ELSE .ELSE
@ -874,25 +887,16 @@ H352A lda ZP.BLKNUM preserve disk address of current (last)
ldx #$01 ldx #$01
swpbloks lda ZP.BLKNUM,x prepare new directory block .1 lda ZP.BLKNUM,x prepare new directory block
sta XDOS.GBuf,x using current block as back link sta XDOS.GBuf,x using current block as back link
lda XDOS.GBuf+2,x lda XDOS.GBuf+2,x
sta ZP.BLKNUM,x and save new block as next to be written sta ZP.BLKNUM,x and save new block as next to be written
dex dex
bpl swpbloks bpl .1
inx x = 0 jsr XDOS.ZeroGBuf
clrdir stz XDOS.GBuf+2,x
stz XDOS.GBuf+$100,x
inx
bne clrdir
.DO LOWERCASE=1
jsr XDOS.WriteGBufDir
.ELSE
jsr XDOS.WriteGBuf write prepared directory extension. jsr XDOS.WriteGBuf write prepared directory extension.
.FIN
bcs H351D if error bcs H351D if error
lda own_blk lda own_blk
@ -908,23 +912,23 @@ clrdir stz XDOS.GBuf+2,x
ldx own_ent and calc entry address. ldx own_ent and calc entry address.
ocalc dex has entry address been calculated? .3 dex has entry address been calculated?
beq H3584 if yes. beq .4 if yes.
lda own_len next entry address lda own_len next entry address
jsr XDOS.ZPT.NextA jsr XDOS.ZPT.NextA
bra ocalc bra .3
H3584 ldy #$13 index to block count .4 ldy #$13 index to block count
clc clc
H3588 lda (zpt),y .5 lda (zpt),y
adc dinctbl-$13,y add 1 to block count and adc dinctbl-$13,y add 1 to block count and
sta (zpt),y sta (zpt),y
iny iny
tya $200 to the directory's eof. tya $200 to the directory's eof.
eor #$18 done with usage/eof update? eor #$18 done with usage/eof update?
bne H3588 branch if not. bne .5 branch if not.
.DO LOWERCASE=1 .DO LOWERCASE=1
jsr XDOS.WriteGBufDir jsr XDOS.WriteGBufDir
@ -934,45 +938,41 @@ H3588 lda (zpt),y
bcs crerr2 bcs crerr2
jmp XDOS.Create jmp XDOS.Create
crerr2 rts return and report errors crerr2 rts return and report errors
*-------------------------------------- *--------------------------------------
creat1 ldx #$00 zero out XDOS.GBuf XDOS.Create1 jsr XDOS.ZeroGBuf zero out XDOS.GBuf
H35A0 stz XDOS.GBuf,x
stz XDOS.GBuf+$100,x and data block of file.
inx
bne H35A0
ldy #$0B move user specified date/time ldy #$0B move user specified date/time
cmvtime lda (ZP.A3L),y to directory. .1 lda (ZP.A3L),y to directory.
sta d_filid,y sta d_filid,y
txa if all 4 bytes of date/time = 0 txa if all 4 bytes of date/time = 0
ora (ZP.A3L),y then use built-in date/time. ora (ZP.A3L),y then use built-in date/time.
tax tax
dey dey
cpy #$07 cpy #$07
bne cmvtime bne .1
txa does user want default time? txa does user want default time?
bne cmvname if not. bne .3 if not.
ldx #$03 ldx #$03
mvdftime lda GP.DATE,x move current default date/time .2 lda GP.DATE,x move current default date/time
sta d_credt,x sta d_credt,x
dex dex
bpl mvdftime bpl .2
cmvname lda (ZP.A3L),y y = index to file kind. .3 lda (ZP.A3L),y y = index to file kind.
cmp #$04 cmp #$04
lda #$10 assume tree type lda #$10 assume tree type
bcc csvfkind bcc .4
lda #$D0 it's directory. lda #$D0 it's directory.
csvfkind ldx namptr index to local name of pathname. .4 ldx namptr index to local name of pathname.
ora XDOS.PathBuf,x combine file kind with name length. ora XDOS.PathBuf,x combine file kind with name length.
sta d_stor sos calls this 'storage type'. sta d_stor sos calls this 'storage type'.
and #$0F strip back to name length and #$0F strip back to name length
tay and use as counter for move. tay and use as counter for move.
@ -980,12 +980,12 @@ csvfkind ldx namptr index to local name of pathname.
adc namptr calc end of name adc namptr calc end of name
tax tax
crname lda XDOS.PathBuf,x move local name as filename .5 lda XDOS.PathBuf,x move local name as filename
sta d_stor,y sta d_stor,y
dex dex
dey dey
bne crname bne .5
ldy #$03 index to 'access' parameter ldy #$03 index to 'access' parameter
lda (ZP.A3L),y lda (ZP.A3L),y
@ -994,11 +994,11 @@ crname lda XDOS.PathBuf,x move local name as filename
lda (ZP.A3L),y lda (ZP.A3L),y
sta d_filid sta d_filid
cmvauxid iny move auxillary identification bytes .6 iny move auxillary identification bytes
lda (ZP.A3L),y lda (ZP.A3L),y
sta d_auxid-5,y sta d_auxid-5,y
cpy #$06 cpy #$06
bne cmvauxid bne .6
.DO LOWERCASE=0 .DO LOWERCASE=0
lda xdosver save current xdos version # lda xdosver save current xdos version #
@ -1019,9 +1019,9 @@ cmvauxid iny move auxillary identification bytes
lda d_stor storage type. lda d_stor storage type.
and #$E0 is it a directory? and #$E0 is it a directory?
beq cralcblk branch if seed file. beq cralcblk branch if seed file.
*--------------------------------------
* Create Dir First Block * Create Dir First Block
*--------------------------------------
ldx #$1E move header to data block ldx #$1E move header to data block
cmvheadr lda d_stor,x cmvheadr lda d_stor,x
@ -1030,7 +1030,7 @@ cmvheadr lda d_stor,x
bpl cmvheadr bpl cmvheadr
eor #$30 eor #$30
sta XDOS.GBuf+4 make it a directory header mark. sta XDOS.GBuf+4 make it a directory header mark.
.DO LOWERCASE=0 .DO LOWERCASE=0
@ -1066,13 +1066,13 @@ cmvparnt lda d_entblk,x
bpl cmvparnt bpl cmvparnt
lda h_entln lastly, the length of parent's lda h_entln lastly, the length of parent's
sta XDOS.GBuf+42 directory entries. sta XDOS.GBuf+42 directory entries.
.DO LOWERCASE=1 .DO LOWERCASE=1
jsr XDOS.PackGBuf jsr XDOS.PackGBuf
.FIN .FIN
cralcblk jsr alc1blk get address of file's data block cralcblk jsr XDOS.GetFreeBlk get address of file's data block
bcs crerr3 bcs crerr3
sta d_frst sta d_frst
@ -1090,7 +1090,16 @@ cralcblk jsr alc1blk get address of file's data block
credone jsr drevise go revise directories with new file credone jsr drevise go revise directories with new file
bcs crerr3 bcs crerr3
jmp upbmap lastly, update volume bitmap jmp XDOS.FlushBM lastly, update volume bitmap
*--------------------------------------
XDOS.ZeroGBuf ldx #0
.1 stz XDOS.GBuf,x
stz XDOS.GBuf+$100,x
inx
bne .1
rts
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE usr/src/prodos.fx/prodos.s.xdos.a SAVE usr/src/prodos.fx/prodos.s.xdos.a

View File

@ -218,8 +218,8 @@ XDOS.CheckPath jsr XDOS.FindVol
lda #$D0 fake directory file lda #$D0 fake directory file
sta d_stor sta d_stor
lda XDOS.GBuf+2 check forward link. lda XDOS.GBuf+2 check forward link.
ora XDOS.GBuf+3 if non-zero, assume full sized directory ora XDOS.GBuf+3 if non-zero, assume full sized directory
bne .3 else assume it's the slot 3 /RAM volume bne .3 else assume it's the slot 3 /RAM volume
lda #$02 so reset eof and blocks_used fields lda #$02 so reset eof and blocks_used fields
@ -237,7 +237,7 @@ fnderr.RTS rts
lookfil0 stz nofree reset free entry indicator. lookfil0 stz nofree reset free entry indicator.
sec dir to be searched has header in this block. sec dir to be searched has header in this block.
L37C9 stz totent reset entry counter. L37C9 stz totent reset entry counter.
jsr XDOS.LookupNameInDirBlk look for name pointed to by pnptr. jsr XDOS.LookupNameInDirBlk look for name pointed to by pnptr.
@ -253,16 +253,16 @@ L37C9 stz totent reset entry counter.
L37E2 dec entcnth should be at least one L37E2 dec entcnth should be at least one
L37EB sta entcntl keep a running count. L37EB sta entcntl keep a running count.
lda /XDOS.GBuf reset indirect pointer lda /XDOS.GBuf reset indirect pointer
sta zpt+1 sta zpt+1
lda XDOS.GBuf+2 get link to next dir block lda XDOS.GBuf+2 get link to next dir block
bne L37FC (if there is one). bne L37FC (if there is one).
cmp XDOS.GBuf+3 are both zero, i.e. no link? if so, cmp XDOS.GBuf+3 are both zero, i.e. no link? if so,
beq errdir then not all entries were acct'd for. beq errdir then not all entries were acct'd for.
L37FC ldx XDOS.GBuf+3 acc has value for block# (low). L37FC ldx XDOS.GBuf+3 acc has value for block# (low).
.DO LOWERCASE=1 .DO LOWERCASE=1
jsr XDOS.ReadGBufAXDir jsr XDOS.ReadGBufAXDir
.ELSE .ELSE
@ -272,20 +272,23 @@ L37FC ldx XDOS.GBuf+3 acc has value for block# (low).
rts return error in acc. rts return error in acc.
*-------------------------------------- *--------------------------------------
errfnf lda nofree was any free entry found? errfnf lda nofree was any free entry found?
bne fnf0 bne .2
lda XDOS.GBuf+2 test link
bne L3814
cmp XDOS.GBuf+3 if both are 0 then give up.
beq fnf0 report 'not found'.
L3814 sta d_entblk lda XDOS.GBuf+2 test link
bne .1
cmp XDOS.GBuf+3 if both are 0 then give up.
beq .2 report 'not found'.
.1 sta d_entblk
lda XDOS.GBuf+3 lda XDOS.GBuf+3
sta d_entblk+1 assume 1st entry of next block sta d_entblk+1 assume 1st entry of next block
lda #$01 is free for use. lda #$01 is free for use.
sta d_entnum mark as valid (for create) sta d_entnum mark as valid (for create)
sta nofree sta nofree
fnf0 jsr nxtpnam1 'file not found' or 'path not found'? .2 jsr nxtpnam1 'file not found' or 'path not found'?
errpath1 beq .1 if non-zero then 'path not found' errpath1 beq .1 if non-zero then 'path not found'
lda #MLI.E.PNOTFND path not found lda #MLI.E.PNOTFND path not found
@ -320,7 +323,7 @@ namfound jsr nxtpname adj index to next name in path.
.FIN .FIN
bcs lookfil0.RTS if error. bcs lookfil0.RTS if error.
lda XDOS.GBuf+37 get the # of files contained in this lda XDOS.GBuf+37 get the # of files contained in this
sta entcntl directory. sta entcntl directory.
lda XDOS.GBuf+38 lda XDOS.GBuf+38
sta entcnth sta entcnth
@ -329,7 +332,7 @@ namfound jsr nxtpname adj index to next name in path.
* (8 bytes reserved) * (8 bytes reserved)
*-------------------------------------- *--------------------------------------
.DO LOWERCASE=0 .DO LOWERCASE=0
lda XDOS.GBuf+20 make sure password is disabled lda XDOS.GBuf+20 make sure password is disabled
ldx #$00 ldx #$00
sec sec
@ -381,14 +384,14 @@ movhed0 ldx #9 move this directory info
.21 .FIN .21 .FIN
lda XDOS.GBuf+4 if this is root, then nothing to do lda XDOS.GBuf+4 if this is root, then nothing to do
and #$F0 and #$F0
eor #$F0 test header type. eor #$F0 test header type.
beq .8 branch if root beq .8 branch if root
ldx #$03 otherwise, save owner info about ldx #$03 otherwise, save owner info about
.3 lda XDOS.GBuf+$27,x this header. .3 lda XDOS.GBuf+$27,x this header.
sta own_blk,x sta own_blk,x
dex dex
bpl .3 bpl .3
@ -866,10 +869,10 @@ tkfrecnt jsr cntbms get # of bitmaps
lda #$FF mark 'first free' temp as unknown lda #$FF mark 'first free' temp as unknown
sta nofree sta nofree
jsr upbmap update volume bitmap. jsr XDOS.FlushBM update volume bitmap.
bcs L3BC1 if error. bcs L3BC1 if error.
ldx XDOS.VCBPtr get address of 1st bitmap ldx XDOS.VCBPtr get address of 1st bitmap
lda XDOS.VCBs+VCB.BMAP,x lda XDOS.VCBs+VCB.BMAP,x
sta ZP.BLKNUM sta ZP.BLKNUM
@ -889,18 +892,18 @@ L3B81 jsr XDOS.ReadGBuf use general buffer for temp space to
inc ZP.BLKNUM+1 inc ZP.BLKNUM+1
bra L3B81 bra L3B81
L3B96 ldx XDOS.VCBPtr mark which block had 1st free space L3B96 ldx XDOS.VCBPtr mark which block had 1st free space
lda nofree lda nofree
bmi L3BBE if no free space was found. bmi L3BBE if no free space was found.
sta XDOS.VCBs+VCB.BMAPIDX,x update the free count. sta XDOS.VCBs+VCB.BMAPIDX,x update the free count.
lda scrtch+1 lda scrtch+1
sta XDOS.VCBs+VCB.FBLK+1,x update volume control byte. sta XDOS.VCBs+VCB.FBLK+1,x update volume control byte.
lda scrtch lda scrtch
sta XDOS.VCBs+VCB.FBLK,x sta XDOS.VCBs+VCB.FBLK,x
L3BAD lda XDOS.VCBs+VCB.FBLK,x compare total available free blocks L3BAD lda XDOS.VCBs+VCB.FBLK,x compare total available free blocks
sec on this volume. sec on this volume.
sbc reql sbc reql
lda XDOS.VCBs+VCB.FBLK+1,x lda XDOS.VCBs+VCB.FBLK+1,x

View File

@ -22,7 +22,7 @@ XDOS.DeallocAX stx bmcnt high address of block.
ror ror
dex dex
bne .1 bne .1
* lsr bmcnt * lsr bmcnt
* ror * ror
* lsr bmcnt * lsr bmcnt
@ -31,14 +31,14 @@ XDOS.DeallocAX stx bmcnt high address of block.
sta bmptr save pointer. sta bmptr save pointer.
lsr bmcnt transfer bit which is page of bitmap lsr bmcnt transfer bit which is page of bitmap
rol half rol half
jsr fndbmap make sure device is correct one. jsr XDOS.GetBM make sure device is correct one.
bcs L3C8B error. bcs L3C8B error.
lda bmacmap current map. lda bmacmap current map.
cmp bmcnt is in-core bitmap the correct one ? cmp bmcnt is in-core bitmap the correct one ?
beq L3C64 branch if yes. beq L3C64 branch if yes.
jsr upbmap put current map away. jsr XDOS.FlushBM put current map away.
bcs L3C8B error. bcs L3C8B error.
lda bmcnt get map # lda bmcnt get map #
@ -76,7 +76,7 @@ L3C8C lda #MLI.E.BADFS bitmap block # impossible.
sec bitmap disk address wrong sec bitmap disk address wrong
rts (maybe data masquerading as indx block) rts (maybe data masquerading as indx block)
*-------------------------------------- *--------------------------------------
alc1blk jsr fndbmap get address of bitmap. XDOS.GetFreeBlk jsr XDOS.GetBM get address of bitmap.
bcs L3CB8 error. bcs L3CB8 error.
L3C95 ldy #$00 begin search at start of bitmap block. L3C95 ldy #$00 begin search at start of bitmap block.
@ -91,7 +91,7 @@ L3C9A lda XDOS.BMBuf,y
inc half now search page 2. inc half now search page 2.
inc basval base value = base address / 2048. inc basval base value = base address / 2048.
L3CA8 lda XDOS.BMBuf+$100,y search 2nd half for free block L3CA8 lda XDOS.BMBuf+$100,y search 2nd half for free block
bne L3CB9 bne L3CB9
iny iny
@ -148,11 +148,14 @@ L3CF7 lda #$80 indicate map is modified.
ldx XDOS.VCBPtr subtract 1 from total free vcb blocks ldx XDOS.VCBPtr subtract 1 from total free vcb blocks
lda XDOS.VCBs+VCB.FBLK,x to account for newly allocated block. lda XDOS.VCBs+VCB.FBLK,x to account for newly allocated block.
bne .7 bne .7
dec XDOS.VCBs+VCB.FBLK+1,x dec XDOS.VCBs+VCB.FBLK+1,x
.7 dec XDOS.VCBs+VCB.FBLK,x .7 dec XDOS.VCBs+VCB.FBLK,x
lda scrtch return address in y,a of newly lda scrtch return address in y,a of newly
ldy scrtch+1 allocated block. ldy scrtch+1 allocated block.
clc no errors. clc no errors.
rts rts
*-------------------------------------- *--------------------------------------
@ -166,14 +169,14 @@ XDOS.NextBM ldx XDOS.VCBPtr inc to next bitmap, but 1st make sure there is
beq L3D60 if no more to look at. beq L3D60 if no more to look at.
inc XDOS.VCBs+VCB.BMAPIDX,x add 1 to current map inc XDOS.VCBs+VCB.BMAPIDX,x add 1 to current map
jsr upbmap jsr XDOS.FlushBM
fndbmap ldy XDOS.VCBPtr XDOS.GetBM ldy XDOS.VCBPtr
lda XDOS.VCBs+VCB.DEV,y get device #. lda XDOS.VCBs+VCB.DEV,y get device #.
cmp bmadev does this map match this device ? cmp bmadev does this map match this device ?
beq L3D4A yes. beq L3D4A yes.
jsr upbmap otherwise, save other volume's bitmap jsr XDOS.FlushBM otherwise, save other volume's bitmap
bcs L3D5F bcs L3D5F
ldy XDOS.VCBPtr ldy XDOS.VCBPtr
@ -186,7 +189,7 @@ L3D4A ldy bmastat is it already modified ?
jsr XDOS.ReadBMDevA otherwise read in fresh bitmap. jsr XDOS.ReadBMDevA otherwise read in fresh bitmap.
bcs L3D5F if error. bcs L3D5F if error.
L3D54 ldy XDOS.VCBPtr get relative block # of bitmap. L3D54 ldy XDOS.VCBPtr get relative block # of bitmap.
lda XDOS.VCBs+VCB.BMAPIDX,y lda XDOS.VCBs+VCB.BMAPIDX,y
asl 2 pages per block asl 2 pages per block
sta basval sta basval
@ -198,7 +201,7 @@ L3D60 lda #MLI.E.VOLFULL request can't be filled
sec error sec error
rts rts
*-------------------------------------- *--------------------------------------
upbmap clc XDOS.FlushBM clc
lda bmastat is current map modified ? lda bmastat is current map modified ?
bpl .9 no. bpl .9 no.
@ -211,11 +214,11 @@ upbmap clc
*-------------------------------------- *--------------------------------------
XDOS.ReadBMDevA sta bmadev read bitmap specified by dev and vcb. XDOS.ReadBMDevA sta bmadev read bitmap specified by dev and vcb.
ldy XDOS.VCBPtr get lowest map # with free blocks in it ldy XDOS.VCBPtr get lowest map # with free blocks in it
lda XDOS.VCBs+VCB.BMAPIDX,y lda XDOS.VCBs+VCB.BMAPIDX,y
sta bmacmap associate offset with bitmap ctrl block. sta bmacmap associate offset with bitmap ctrl block.
clc add this # to the base address of clc add this # to the base address of
adc XDOS.VCBs+VCB.BMAP,y 1st bitmap and save in bmadadr which adc XDOS.VCBs+VCB.BMAP,y 1st bitmap and save in bmadadr which
sta bmadadr is address of bitmap to be used. sta bmadadr is address of bitmap to be used.
lda XDOS.VCBs+VCB.BMAP+1,y lda XDOS.VCBs+VCB.BMAP+1,y
@ -225,10 +228,10 @@ XDOS.ReadBMDevA sta bmadev read bitmap specified by dev and vcb.
lda #$01 read device command lda #$01 read device command
.HS 2C BIT ABS .HS 2C BIT ABS
XDOS.WriteBM lda #$02 write command. XDOS.WriteBM lda #$02 write command.
sta ZP.CMDNUM sta ZP.CMDNUM
lda GP.DEVNUM save current dev # lda GP.DEVNUM save current dev #
pha pha
lda bmadev get bitmap's dev # lda bmadev get bitmap's dev #
sta GP.DEVNUM sta GP.DEVNUM
@ -256,7 +259,7 @@ XDOS.ReadGBuf_d_frst
lda d_frst read 1st block of directory into XDOS.GBuf lda d_frst read 1st block of directory into XDOS.GBuf
ldx d_frst+1 ldx d_frst+1
.DO LOWERCASE=1 .DO LOWERCASE=1
XDOS.ReadGBufAXDir XDOS.ReadGBufAXDir
jsr XDOS.ReadGBufAX jsr XDOS.ReadGBufAX
bcc XDOS.UnpackGBuf bcc XDOS.UnpackGBuf
rts rts
@ -269,8 +272,8 @@ XDOS.ReadGBuf lda #$01 read command.
XDOS.WriteGBuf lda #$02 write command XDOS.WriteGBuf lda #$02 write command
sta ZP.A4L pass to device handler. sta ZP.CMDNUM pass to device handler.
lda /XDOS.GBuf general buffer. lda /XDOS.GBuf general buffer.
XDOS.RWBlock sta ZP.BUFPTR+1 buffer high. XDOS.RWBlock sta ZP.BUFPTR+1 buffer high.
stz ZP.BUFPTR buffer low (always on page boundary) stz ZP.BUFPTR buffer low (always on page boundary)
@ -286,7 +289,7 @@ XDOS.CheckAndUnpackGBuf
sty h_maxent sty h_maxent
cmp #$27 cmp #$27
bne .9 bne .9
cpy #$0D cpy #$0D
beq XDOS.UnpackGBuf beq XDOS.UnpackGBuf
@ -299,13 +302,13 @@ XDOS.UnpackGBuf jsr XDOS.ZPT.InitGBuf
ldx h_maxent ldx h_maxent
.1 jsr XDOS.ZPT.Unpack .1 jsr XDOS.ZPT.Unpack
dex dex
beq .8 beq .8
jsr XDOS.ZPT.Next jsr XDOS.ZPT.Next
bra .1 bra .1
.8 clc make sure CC .8 clc make sure CC
rts rts
*-------------------------------------- *--------------------------------------
@ -335,23 +338,23 @@ XDOS.PackGBuf jsr XDOS.ZPT.InitGBuf
eor #$20 to uppercase eor #$20 to uppercase
sta (zpt),y sta (zpt),y
cpy #8 CS if MIN_VERSION to use cpy #8 CS if MIN_VERSION to use
bcs .3 bcs .3
lda whichbit,y lda whichbit,y
tsb XDOS.PackGBuf.Bitmap+1 tsb XDOS.PackGBuf.Bitmap+1
bra .4 bra .4
.3 lda whichbit-8,y .3 lda whichbit-8,y
tsb XDOS.PackGBuf.Bitmap tsb XDOS.PackGBuf.Bitmap
.4 lda #$80 .4 lda #$80
tsb XDOS.PackGBuf.Bitmap+1 tsb XDOS.PackGBuf.Bitmap+1
.5 dey .5 dey
bne .2 bne .2
ldy #$1C VERSION ldy #$1C VERSION
lda XDOS.PackGBuf.Bitmap lda XDOS.PackGBuf.Bitmap
sta (zpt),y sta (zpt),y
@ -359,11 +362,11 @@ XDOS.PackGBuf jsr XDOS.ZPT.InitGBuf
iny MIN_VERSION iny MIN_VERSION
lda XDOS.PackGBuf.Bitmap+1 lda XDOS.PackGBuf.Bitmap+1
sta (zpt),y sta (zpt),y
.6 jsr XDOS.ZPT.Next .6 jsr XDOS.ZPT.Next
dex dex
bne .1 bne .1
rts rts
.FIN .FIN
@ -533,9 +536,9 @@ saplevel sta ZP.BLKNUM read in next lower index block.
lda (zpt),y (high address) lda (zpt),y (high address)
sta ZP.BLKNUM+1 sta ZP.BLKNUM+1
dec zpt+1 dec zpt+1
* jsr rfcbidx read in sapling level * jsr rfcbidx read in sapling level
lda #$01 prepare to read index block : read command lda #$01 prepare to read index block : read command
sta ZP.CMDNUM sta ZP.CMDNUM
@ -663,7 +666,7 @@ dirpos1 lda (ZP.DataPtr),y get link address of previous or next
lda #MLI.E.EOF something is wrong with directory file! lda #MLI.E.EOF something is wrong with directory file!
sec error. sec error.
L3FD6 rts L3FD6 rts
L3FD8 sta ZP.BLKNUM+1 L3FD8 sta ZP.BLKNUM+1
@ -703,7 +706,7 @@ L3FF2 rts
*L400C rts *L400C rts
*-------------------------------------- *--------------------------------------
wfcbfst jsr upbmap update the bitmap and write file's 1st block. wfcbfst jsr XDOS.FlushBM update the bitmap and write file's 1st block.
ldx #$02 write command ldx #$02 write command
.HS 2C BIT ABS .HS 2C BIT ABS
@ -723,14 +726,14 @@ XDOS.FileIOPtrXCmdABlkY
lda XDOS.FCBs,y get disk block address from fcb. lda XDOS.FCBs,y get disk block address from fcb.
sta ZP.BLKNUM block 0 not legal sta ZP.BLKNUM block 0 not legal
bne .1 bne .1
lda XDOS.FCBs+1,y high address of disk block lda XDOS.FCBs+1,y high address of disk block
bne .2 bne .2
lda #$0C Block = $0000, allocation error. lda #$0C Block = $0000, allocation error.
jsr GP.SYSDEATH doesn't return... jsr GP.SYSDEATH doesn't return...
.1 lda XDOS.FCBs+1,y .1 lda XDOS.FCBs+1,y
.2 sta ZP.BLKNUM+1 .2 sta ZP.BLKNUM+1
*-------------------------------------- *--------------------------------------
XDOS.FileIOPtrX lda $00,x get memory address of buffer from XDOS.FileIOPtrX lda $00,x get memory address of buffer from
@ -749,7 +752,7 @@ XDOS.FileIO2 sec also, set to indicate reg call made to
*-------------------------------------- *--------------------------------------
*-------------------------------------- *--------------------------------------
XDOS.WriteDBLK ldx #ZP.DataPtr point at memory address with x and XDOS.WriteDBLK ldx #ZP.DataPtr point at memory address with x and
lda #FCB.DBLK disk address with y. lda #FCB.DBLK disk address with y.
ora fcbptr add offset to fcbptr ora fcbptr add offset to fcbptr
tay and put in y. tay and put in y.
@ -760,7 +763,7 @@ XDOS.WriteDBLK ldx #ZP.DataPtr point at memory address with x and
lda #$BF mark data status as current. lda #$BF mark data status as current.
bra XDOS.ResetFCBStatus bra XDOS.ResetFCBStatus
XDOS.WriteIBLK jsr upbmap update bitmap. XDOS.WriteIBLK jsr XDOS.FlushBM update bitmap.
ldx #zpt point to address of index buffer ldx #zpt point to address of index buffer
lda #FCB.IBLK and block address of that index block. lda #FCB.IBLK and block address of that index block.
@ -806,14 +809,14 @@ L40BD stz XDOS.FCBs,x but clean it first.
bne L40BD bne L40BD
ldy #0 ldy #0
ldx fcbptr ldx fcbptr
L40CB lda d_dev,y move ownership info. L40CB lda d_dev,y move ownership info.
sta XDOS.FCBs+FCB.DEVID,x note: this code depends upon the defined sta XDOS.FCBs+FCB.DEVID,x note: this code depends upon the defined
inx order of both the fcb and directory entry buffer. inx order of both the fcb and directory entry buffer.
iny iny
cpy #6 cpy #6
bne L40CB bne L40CB
lda d_stor get storage type and lda d_stor get storage type and
@ -898,7 +901,7 @@ L415E jsr XDOS.ReadFCB.DBLK read in 1st block of directory file.
L4163 ldx XDOS.VCBPtr index to vcb. L4163 ldx XDOS.VCBPtr index to vcb.
inc XDOS.VCBs+VCB.OFCNT,x add 1 to # of files currently open inc XDOS.VCBs+VCB.OFCNT,x add 1 to # of files currently open
ldx fcbptr index to fcb. ldx fcbptr index to fcb.
lda XDOS.FCBs+FCB.ID,x return ref # to user. lda XDOS.FCBs+FCB.ID,x return ref # to user.
ldy #$05 ldy #$05

View File

@ -647,7 +647,7 @@ swapdown jsr alcwblk make current seed into a sapling, allocate a block befo
* clc no error * clc no error
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
alcwblk jsr alc1blk alcwblk jsr XDOS.GetFreeBlk
bcs .9 bcs .9
lda #FCB.F.UMOD lda #FCB.F.UMOD
@ -669,9 +669,9 @@ XDOS.TestWP jsr XDOS.GetFCBStatus check for 'never been modified' condition
XDOS.TestWPA sta ZP.UNITNUM make the device status call XDOS.TestWPA sta ZP.UNITNUM make the device status call
lda ZP.BLKNUM+1 lda ZP.BLKNUM
pha pha
lda ZP.BLKNUM save the current block values lda ZP.BLKNUM+1 save the current block values
pha pha
stz ZP.CMDNUM stz ZP.CMDNUM
stz ZP.BLKNUM zero the block # stz ZP.BLKNUM zero the block #

View File

@ -208,7 +208,7 @@ L4780 ldx fcbptr
cmp bmadev is it in same as current file ? cmp bmadev is it in same as current file ?
bne L47B2 yes, put it on the disk if necessary. bne L47B2 yes, put it on the disk if necessary.
jsr upbmap go put it away. jsr XDOS.FlushBM go put it away.
bcs glberr flush error bcs glberr flush error
L47B2 clc L47B2 clc
@ -427,7 +427,7 @@ L48C2 inx
iny iny
ldx #2 ldx #2
L48F2 lda XDOS.FCBs+FCB.MARK,y tell 'rdposn' to go to correct L48F2 lda XDOS.FCBs+FCB.MARK,y tell 'rdposn' to go to correct
sta tposll,x sta tposll,x
eor #$80 position from incorrect place. eor #$80 position from incorrect place.
@ -588,14 +588,26 @@ XDOS.GetFileInfoEx
ldx #7 ldx #7
ldy #S.FIEX.ACL+7+3 ldy #S.FIEX.ACL+7+3
.DO ACL=1
.3 lda h_acl,x .3 lda h_acl,x
sta (ZP.A3L),y sta (ZP.A3L),y
dey dey
dex dex
bpl .3 bpl .3
.ELSE
lda #0
.3 sta (ZP.A3L),y
dey
dex
bpl .3
.FIN
* clc * clc
.9 .9
XDOS.GetFileInfoEx.RTS XDOS.GetFileInfoEx.RTS
rts rts
*-------------------------------------- *--------------------------------------
@ -769,7 +781,7 @@ L4A52 ldy rnptr index to last name in the chain.
L4A72 lda #MLI.E.INVPATH bad pathname error. L4A72 lda #MLI.E.INVPATH bad pathname error.
.HS 2C BIT ABS .HS 2C BIT ABS
L4A7F lda #MLI.E.DUPFILE L4A7F lda #MLI.E.DUPFILE
L4A74 sec L4A74 sec
rts rts
@ -902,7 +914,7 @@ L4B85 ldx firstbh
jsr XDOS.DeallocAX jsr XDOS.DeallocAX
bcs L4B93 bcs L4B93
jsr upbmap jsr XDOS.FlushBM
L4B93 pha save possible error code. L4B93 pha save possible error code.
lda #$00 update directory to free entry space. lda #$00 update directory to free entry space.
@ -942,7 +954,7 @@ L4BCD bcc L4B85 branch widened (always taken)
L4BCF cmp #$D0 is this a directory file ? L4BCF cmp #$D0 is this a directory file ?
bne L4C1B no, file incompatible. bne L4C1B no, file incompatible.
jsr fndbmap make sure a buffer available for bitmap jsr XDOS.GetBM make sure a buffer available for bitmap
bcs L4C1A if error. bcs L4C1A if error.
jsr XDOS.ReadGBuf_d_frst read 1st block of directory into XDOS.GBuf jsr XDOS.ReadGBuf_d_frst read 1st block of directory into XDOS.GBuf

View File

@ -483,10 +483,12 @@ XDOS.IsValidFirstChar.SEC
sec sec
rts rts
*-------------------------------------- *--------------------------------------
* move 3 pages of dispatcher from 'displc2' to 'dispadr' * move 3 pages of dispatcher from LC Bank2 $D100 to $1000
* this move routine must be resident above $E000 at all times * this move routine must be resident above $E000 at all times
*-------------------------------------- *--------------------------------------
XDOS.CallDisp lda IO.RRAMWRAMBNK2 read/write RAM bank 2 XDOS.CallDisp .DO M.SEL
lda IO.RRAMWRAMBNK2 read/write RAM bank 2
lda IO.RRAMWRAMBNK2 lda IO.RRAMWRAMBNK2
stz ZP.A1L stz ZP.A1L
@ -530,6 +532,17 @@ XDOS.CallDisp lda IO.RRAMWRAMBNK2 read/write RAM bank 2
jmp $1000 jmp $1000
.FIN .FIN
.ELSE
inc ROM.PWREDUP
lda /ROM.RESETV-1
pha
lda #ROM.RESETV-1
pha
jmp IRQ.ToRomRTS
.FIN
*-------------------------------------- *--------------------------------------
XDOS.SPREMAP ldx #$03 assume 3 parameters. XDOS.SPREMAP ldx #$03 assume 3 parameters.
lda ZP.CMDNUM lda ZP.CMDNUM
@ -879,6 +892,7 @@ d_dev .HS 00 device number of this directory entry
d_head .HS 0000 address of <sub> directory header d_head .HS 0000 address of <sub> directory header
d_entblk .HS 0000 address of block which contains entry d_entblk .HS 0000 address of block which contains entry
d_entnum .HS 00 entry number within block d_entnum .HS 00 entry number within block
*--------------------------------------
d_stor .BS 16 file name d_stor .BS 16 file name
d_filid .HS 00 user's identification byte d_filid .HS 00 user's identification byte
d_frst .HS 0000 first block of file d_frst .HS 0000 first block of file

View File

@ -5,16 +5,18 @@ NEW
.OR $2000 .OR $2000
.TF PRODOS,TSYS .TF PRODOS,TSYS
*-------------------------------------- *--------------------------------------
KVER .EQ 23 release 2.0.3 KVER .EQ $23 release 2.0.3
*-------------------------------------- *--------------------------------------
READCAT .EQ 1 Boot Block read Catalog at $C00 READCAT .EQ 1 Boot Block read Catalog at $C00
ENHFILENAME .EQ 1 ENHFILENAME .EQ 1
DIREXTENDROOT .EQ 1
LOWERCASE .EQ 1 LOWERCASE .EQ 1
ACL .EQ 1 ACL .EQ 1
LOGO .EQ 1 LOGO .EQ 1
AUXLC .EQ 0 AUXLC .EQ 0
M.PM .EQ 1 M.PM .EQ 1
M.RAM .EQ 1 M.RAM .EQ 1
M.SEL .EQ 1
*-------------------------------------- *--------------------------------------
.INB inc/zp.i .INB inc/zp.i
.INB inc/io.i .INB inc/io.i
@ -74,6 +76,67 @@ X.Unpak.XatYA sty ZPOutBufPtr
.INB usr/src/prodos.fx/prodos.s.logo .INB usr/src/prodos.fx/prodos.s.logo
.FIN .FIN
*-------------------------------------- *--------------------------------------
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
*--------------------------------------
ILDR.PAK .DA #0 ILDR.PAK .DA #0
.DA ILDR.LEN .DA ILDR.LEN
.INB usr/src/prodos.fx/prodos.s.ildr .INB usr/src/prodos.fx/prodos.s.ildr
@ -136,67 +199,6 @@ SEL1.PAK .DA #0
SEL2.PAK .DA #0 SEL2.PAK .DA #0
.DA SEL2.LEN .DA SEL2.LEN
.INB usr/src/prodos.fx/prodos.s.sel2 .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 .AS "PAKME" TAG
.DA $2000 BIN ORG .DA $2000 BIN ORG

View File

@ -302,10 +302,33 @@ X.Arc.BlStat lda X.Arc.BLLen
.21 jsr X.Arc.GetYABitCntInX .21 jsr X.Arc.GetYABitCntInX
inc X.Arc.BLO.LO.cnt-1,x inc X.Arc.BLO.LO.cnt-1,x
bne .8 bne .30
inc X.Arc.BLO.HI.cnt-1,x inc X.Arc.BLO.HI.cnt-1,x
.30 lda X.Arc.BLLen
.33 clc
adc X.Arc.Ofs
sta ZPBackPtr
lda #0
adc X.Arc.Ofs+1
sta ZPBackPtr+1
ldy #0
.34 lda (ZPBackPtr),y
tax
inc X.Arc.TopCntL,x
bne .35
inc X.Arc.TopCntH,x
.35 iny
cpy X.Arc.BLLen
bne .34
.8 rts .8 rts
*-------------------------------------- *--------------------------------------
X.Arc.ComputeTBits X.Arc.ComputeTBits
@ -1425,7 +1448,7 @@ BLO.LenBits .DA #%11 bc= 1
.DA #%10 bc= 6 .DA #%10 bc= 6
.DA #%10 bc= 7 .DA #%10 bc= 7
.DA #%10 bc= 8 : Range 0..255 (8 bits ofs) .DA #%10 bc= 8 : Range 0..255 (8 bits ofs)
.DA #%0 bc=a 9 .DA #%0 bc= 9
.DA #%0 bc=10 .DA #%0 bc=10
.DA #%0 bc=11 .DA #%0 bc=11
.DA #%0 bc=12 : Range 0..4095 (12 bits ofs) .DA #%0 bc=12 : Range 0..4095 (12 bits ofs)

View File

@ -151,12 +151,12 @@ Dev.Detect >STYA ZPArgPtr
Dev.ParseArgs lda (ZPArgPtr) Dev.ParseArgs lda (ZPArgPtr)
bne .1 bne .1
lda A2osX.RANDOM16 lda A2osX.R16
eor A2osX.TIMER16 eor A2osX.T16
sta DCB+S.DCB.NIC.MAC+3 sta DCB+S.DCB.NIC.MAC+3
eor A2osX.RANDOM16+1 eor A2osX.R16+1
sta DCB+S.DCB.NIC.MAC+4 sta DCB+S.DCB.NIC.MAC+4
eor A2osX.TIMER16+1 eor A2osX.T16+1
sta DCB+S.DCB.NIC.MAC+5 sta DCB+S.DCB.NIC.MAC+5
clc clc
rts rts

View File

@ -1,6 +1,403 @@
NEW NEW
AUTO 3,1 AUTO 3,1
*-------------------------------------- *--------------------------------------
GP.Sleep php
sei
phy
ldy #S.PS.A
sta (pPS),y
txa
iny #S.PS.X
sta (pPS),y
pla
iny #S.PS.Y
sta (pPS),y
pla
iny #S.PS.P
sta (pPS),y
pla get PC LO
plx get PC HI
inc Advance one byte because of return by RTI
bne GP.Sleep2
inx
GP.Sleep2 ldy #S.PS.PC
sta (pPS),y
txa
iny #S.PS.PC+1
sta (pPS),y
tsx
inx
inx keep PC HI,LO from KERNEL jsr PSExec/PSResume
inx Stack Ptr is $1ff if empty
txa
beq .3
tay Save !Byte count for later
.2 pla
>PUSHA
inx
bne .2
tya
.3 >PUSHA push CPU Stack BC to restore on top of Soft Stack
inc $1fe PC=PC+1
bne .4
inc $1ff because of RTI
.4 lda (pPS)
ora #S.PS.F.SLEEP
sta (pPS)
lda #0 cld,clc,cli
pha
rti exit to kernel with CC
*--------------------------------------
* *** MUST BE REINTRANT ***
*--------------------------------------
GP.SysCall dec IRQ.InKernel
pha
phy
ldy #S.PS.A
sta (pPS),y
txa
iny #S.PS.X
sta (pPS),y
pla
iny #S.PS.Y
sta (pPS),y
tay
pla
jsr JMP.2
bcc .2 no error quit...
tax CS,A=0 ?
beq .3 Yes, BLOCKING I/O
.2 inc IRQ.InKernel
rts Unmodified Carry
.3 sei
inc IRQ.InKernel
GO.Sleep2 pla get PC LO
plx get PC HI
* sec
sbc #2
bcs GP.Sleep2
dex
.1 bra GP.Sleep2
*--------------------------------------
GP.LibCall dec IRQ.InLib
pha
phy
ldy #S.PS.A
sta (pPS),y
txa
iny #S.PS.X
sta (pPS),y
pla
iny #S.PS.Y
sta (pPS),y
jsr K.GetMemPtr Get LIB Code Segment (MemMgr in $E000, no BNK change)
>STYA .1+1
pla
.1 jsr $FFFF SELF MODIFIED
bcc .2
tax
beq .3
.2 inc IRQ.InLib
rts
.3 sei
inc IRQ.InLib
bra GO.Sleep2
*--------------------------------------
GP.AtkCall dec IRQ.InKernel
>STYA .1
jsr GO.MainIC
jsr MLI
.DA #MLI.ATALK
.1 .DA *
jsr GO.AuxLC
inc IRQ.InKernel
rts
*/--------------------------------------
* # Add32,Sub32,Mul32,IMul32,Div32,IDiv32,Mod32,IMod32,Cmp32,ICmp32
* Return X+Y, X-Y, X*Y, X/Y, X mod Y....
* ## ASM
* `>PUSHL X (long)`
* `>PUSHL Y (long)`
* `>FPU add32`
* `...`
* ## RETURN VALUE
* On stack (long)
*\--------------------------------------
GP.FpuCall dec IRQ.InKernel
cpx #FPU.FMUL
bcs .1
jsr MATH math16 & math32, direct JMP
inc IRQ.InKernel
rts
.1 phx
jsr GP.SetFAC Get float from stack
plx
cpx #FPU.PWR+1
bcs GP.GetFAC
*/--------------------------------------
* # FAdd,FSub,FMul,FDiv,FPwr
* Return X*Y, X/Y, X+Y, X-Y
* ## C
* `float pwr ( float x, float y);`
* ## ASM
* `>PUSHF X (float)`
* `>PUSHF Y (float)`
* `>FPU fmul`
* `>FPU fdiv`
* `>FPU fmod` TODO
* `>FPU fadd`
* `>FPU fsub`
* `>FPU fpwr`
* ## RETURN VALUE
* On stack (float)
*\--------------------------------------
lda pStack
clc
adc #5
sta pStack
phx
jsr GP.SetARG
plx
*/--------------------------------------
* # Log,Sqr,Exp,Cos,Sin,Tan,ATan
* Return Log(x), Sqr(x), E^X, Cos(x), Sin(X), Tan(x), ATan(x)
* ## C
* `float log ( float x);`
* `float sqr ( float x);`
* `float exp ( float x);`
* `float cos ( float x);`
* `float sin ( float x);`
* `float tan ( float x);`
* `float atan ( float x);`
* ## ASM
* `>PUSHF x (Float)`
* `>FPU log`
* ## RETURN VALUE
* On stack (Float)
*\--------------------------------------
GP.GetFAC jsr GP.ROMCALL
lda pStack
ldy pStack+1
sta FORPNT Ptr to dst buffer
sty FORPNT+1
ldx #FPU.GETFAC
*--------------------------------------
GP.RomCall phx
ldx $D000
stx .8+1
bit IO.RROMBNK1
plx
jsr MATHF
.8 ldx #$ff
bit $C000,x
* bit $C000,x
rts
*--------------------------------------
GP.SetARG ldx #FPU.SETARG
.HS 2C BIT ABS
GP.SetFAC ldx #FPU.SETFAC
lda pStack
ldy pStack+1
bra GP.RomCall
*/--------------------------------------
* # float
* Return 'floated' long
* ## C
* `float f = (float)l;
* ## ASM
* `>PUSHL l` (long)
* `>FPU float`
* ## RETURN VALUE
* On stack (float)
*\--------------------------------------
GP.Float ldy #3
.1 lda (pStack),y
sta FAC+1,y Reverse Order
dey
bpl .1
dec pStack keep 5 bytes on stack
stz FAC.SIGN
lda #$80+32
sta FAC Positive + Exp=32
ldx #FPU.LTOF
bra GP.GetFAC
*/--------------------------------------
* # lrintf
* Return float rounded into a long
* ## C
* `long int lrintf (float x);`
* ## ASM
* `>PUSHF x`
* `>FPU lrintf`
* ## RETURN VALUE
* On stack (long)
*\--------------------------------------
GP.lrintf jsr GP.SetFAC
inc pStack keep 4 bytes on stack
ldx #FPU.QINT
jsr GP.ROMCALL
ldy #3
.1 lda FAC+1,y
sta (pStack),y
dey
bpl .1
rts
*--------------------------------------
* MLI : From Kernel Aux LC to Main LC
*--------------------------------------
GP.MLICall stx .1
sta K.MLI.PARAMS
jsr GO.MainIC
jsr MLI
.1 .BS 1
.DA K.MLI.PARAMS
jsr GO.AuxLC
rts
*--------------------------------------
GO.MainIC pha
lda $D000 We re coming from AUXLC, saving bank...
sta GO.AuxLC.BNK+1
pla
php
clc
.HS 2C BIT ABS
GO.AuxLC php
sec
sei
sta GO.EXIT.SaveA+1
stx GO.EXIT.SaveX+1
sty GO.EXIT.SaveY+1
pla Restore P in A for later
plx Get PC and add 1 for return
ply
inx
bne .1
iny
.1 stx GO.EXIT.JMP+1
sty GO.EXIT.JMP+2
bcs .2 if CS, go AUXLC
tsx
stx SaveSX
ldx SaveSM
txs
sta IO.CLRALTZP
ldx #IO.RRAMWRAMBNK1 Go MAINLC (ProDOS), always BNK1
bra GO.EXIT
.2 sta IO.SETALTZP
tsx
stx SaveSM
ldx SaveSX
txs
GO.AuxLC.BNK ldx #$FF Self Modified, initialized to BNK1 for INIT3
*--------------------------------------
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)
* A,X,Y, $FA->$FF Already Saved
* Main RAM,ZP/LC selected
* must begin with CLD
* must exit with RTS
* - CC if IRQ cleared, CS if NOT
*--------------------------------------
GP.IRQ cld
bit IRQ.Skip After A2osX IRQ.H ?
bmi GP.IRQ.Exit
sta IO.SETALTZP switch to aux LC
tsx
stx SaveSM
ldx SaveSX
txs
GP.IRQ.JSR jsr CORE.IRQ.DEV SELF MODIFIED
tsx go back to Main
stx SaveSX
ldx SaveSM
txs
sta IO.CLRALTZP
rts
GP.IRQ.Exit stz IRQ.Skip reset flag
sec
rts
*--------------------------------------
*GO.Reset jsr GO.AuxLC
* jmp CORE.Run
*--------------------------------------
*BrkHandler bra *
*--------------------------------------
CORE.Run ldx #1 CORE.Run ldx #1
bra .80 Skip PS0 bra .80 Skip PS0
@ -245,10 +642,10 @@ CORE.GetEvents lda #K.S.EVT
bne .6 bne .6
.4 inc DevMgr.Timer .4 inc DevMgr.Timer
inc A2osX.TIMER16 inc A2osX.T16
bne .5 bne .5
inc A2osX.TIMER16+1 inc A2osX.T16+1
.5 ldx CORE.TickPer10t .5 ldx CORE.TickPer10t
stx CORE.Tick10t stx CORE.Tick10t

View File

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

View File

@ -18,7 +18,7 @@ K.SetEnv
* ldy #S.PS.hENV * ldy #S.PS.hENV
* lda (pPS),y * lda (pPS),y
* jmp K.SYSCALL.JMPX * jmp JMP.X
*/-------------------------------------- */--------------------------------------
* # GetEnv * # GetEnv
* searches the environment list to find the environment variable name, * searches the environment list to find the environment variable name,
@ -71,7 +71,7 @@ K.GetEnv.I ldy #S.PS.hENV FROM STDLIB:EXPAND
tay Y = hSID tay Y = hSID
pla A = hENV pla A = hENV
jmp K.SYSCALL.JMPX jmp JMP.X
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE usr/src/sys/kernel.s.env SAVE usr/src/sys/kernel.s.env

View File

@ -118,6 +118,7 @@ ENVX.SetEnv.I
jsr SHARED.TXTPTRgY jsr SHARED.TXTPTRgY
sta (ZPPtr3),y sta (ZPPtr3),y
beq .24 beq .24
jsr SHARED.IsIDValid jsr SHARED.IsIDValid
bcc .23 bcc .23
@ -125,6 +126,7 @@ ENVX.SetEnv.I
sta (ZPPtr3),y sta (ZPPtr3),y
jsr ENVX.NextEnvP3Y jsr ENVX.NextEnvP3Y
ldy #$ff ldy #$ff
.25 iny .25 iny
@ -182,7 +184,7 @@ ENVX.GetEnv sta ENVX.hEnv
inc inc
.2 ldx #SYS.GetMem .2 ldx #SYS.GetMem
jsr K.SYSCALL2.MAIN !!! Get a buffer In MAIN Mem !!! jsr JMP.M !!! Get a buffer In MAIN Mem !!!
bcs .99 bcs .99

View File

@ -41,417 +41,24 @@ NEW
*-------------------------------------- *--------------------------------------
* SLEEP * SLEEP
*-------------------------------------- *--------------------------------------
GP.Sleep php jmp GP.Sleep
sei
phy
ldy #S.PS.A
sta (pPS),y
txa
iny #S.PS.X
sta (pPS),y
pla
iny #S.PS.Y
sta (pPS),y
pla
iny #S.PS.P
sta (pPS),y
pla get PC LO
plx get PC HI
inc Advance one byte because of return by RTI
bne GP.Sleep2
inx
GP.Sleep2 ldy #S.PS.PC
sta (pPS),y
txa
iny #S.PS.PC+1
sta (pPS),y
tsx
inx
inx keep PC HI,LO from KERNEL jsr PSExec/PSResume
inx Stack Ptr is $1ff if empty
txa
beq .3
tay Save !Byte count for later
.2 pla
>PUSHA
inx
bne .2
tya
.3 >PUSHA push CPU Stack BC to restore on top of Soft Stack
inc $1fe PC=PC+1
bne .4
inc $1ff because of RTI
.4 lda (pPS)
ora #S.PS.F.SLEEP
sta (pPS)
lda #0 cld,clc,cli
pha
rti exit to kernel with CC
*-------------------------------------- *--------------------------------------
* *** MUST BE REINTRANT *** * NON BLOCKING Entry point (From libs)
*-------------------------------------- *--------------------------------------
GP.SysCall dec IRQ.InKernel jmp JMP.2
pha
phy
ldy #S.PS.A
sta (pPS),y
txa
iny #S.PS.X
sta (pPS),y
pla
iny #S.PS.Y
sta (pPS),y
tay
pla
jsr K.SYSCALL2
bcc .2 no error quit...
tax CS,A=0 ?
beq .3 Yes, BLOCKING I/O
.2 inc IRQ.InKernel
rts Unmodified Carry
.3 sei
inc IRQ.InKernel
GO.Sleep2 pla get PC LO
plx get PC HI
* sec
sbc #2
bcs GP.Sleep2
dex
.1 bra GP.Sleep2
*-------------------------------------- *--------------------------------------
GP.LibCall dec IRQ.InLib * Public Vars
pha
phy
ldy #S.PS.A
sta (pPS),y
txa
iny #S.PS.X
sta (pPS),y
pla
iny #S.PS.Y
sta (pPS),y
jsr K.GetMemPtr Get LIB Code Segment (MemMgr in $E000, no BNK change)
>STYA .1+1
pla
.1 jsr $FFFF SELF MODIFIED
bcc .2
tax
beq .3
.2 inc IRQ.InLib
rts
.3 sei
inc IRQ.InLib
bra GO.Sleep2
*--------------------------------------
GP.AtkCall dec IRQ.InKernel
>STYA .1
jsr GO.MainIC
jsr MLI
.DA #MLI.ATALK
.1 .DA *
jsr GO.AuxLC
inc IRQ.InKernel
rts
*/--------------------------------------
* # Add32,Sub32,Mul32,IMul32,Div32,IDiv32,Mod32,IMod32,Cmp32,ICmp32
* Return X+Y, X-Y, X*Y, X/Y, X mod Y....
* ## ASM
* `>PUSHL X (long)`
* `>PUSHL Y (long)`
* `>FPU add32`
* `...`
* ## RETURN VALUE
* On stack (long)
*\--------------------------------------
GP.FpuCall dec IRQ.InKernel
cpx #FPU.FMUL
bcs .1
jsr MATH math16 & math32, direct JMP
inc IRQ.InKernel
rts
.1 phx
jsr GP.SetFAC Get float from stack
plx
cpx #FPU.PWR+1
bcs GP.GetFAC
*/--------------------------------------
* # FAdd,FSub,FMul,FDiv,FPwr
* Return X*Y, X/Y, X+Y, X-Y
* ## C
* `float pwr ( float x, float y);`
* ## ASM
* `>PUSHF X (float)`
* `>PUSHF Y (float)`
* `>FPU fmul`
* `>FPU fdiv`
* `>FPU fmod` TODO
* `>FPU fadd`
* `>FPU fsub`
* `>FPU fpwr`
* ## RETURN VALUE
* On stack (float)
*\--------------------------------------
lda pStack
clc
adc #5
sta pStack
phx
jsr GP.SetARG
plx
*/--------------------------------------
* # Log,Sqr,Exp,Cos,Sin,Tan,ATan
* Return Log(x), Sqr(x), E^X, Cos(x), Sin(X), Tan(x), ATan(x)
* ## C
* `float log ( float x);`
* `float sqr ( float x);`
* `float exp ( float x);`
* `float cos ( float x);`
* `float sin ( float x);`
* `float tan ( float x);`
* `float atan ( float x);`
* ## ASM
* `>PUSHF x (Float)`
* `>FPU log`
* ## RETURN VALUE
* On stack (Float)
*\--------------------------------------
GP.GetFAC jsr GP.ROMCALL
lda pStack
ldy pStack+1
sta FORPNT Ptr to dst buffer
sty FORPNT+1
ldx #FPU.GETFAC
*--------------------------------------
GP.RomCall phx
ldx $D000
stx .8+1
bit IO.RROMBNK1
plx
jsr MATHF
.8 ldx #$ff
bit $C000,x
* bit $C000,x
rts
*--------------------------------------
GP.SetARG ldx #FPU.SETARG
.HS 2C BIT ABS
GP.SetFAC ldx #FPU.SETFAC
lda pStack
ldy pStack+1
bra GP.RomCall
*/--------------------------------------
* # float
* Return 'floated' long
* ## C
* `float f = (float)l;
* ## ASM
* `>PUSHL l` (long)
* `>FPU float`
* ## RETURN VALUE
* On stack (float)
*\--------------------------------------
GP.Float ldy #3
.1 lda (pStack),y
sta FAC+1,y Reverse Order
dey
bpl .1
dec pStack keep 5 bytes on stack
stz FAC.SIGN
lda #$80+32
sta FAC Positive + Exp=32
ldx #FPU.LTOF
bra GP.GetFAC
*/--------------------------------------
* # lrintf
* Return float rounded into a long
* ## C
* `long int lrintf (float x);`
* ## ASM
* `>PUSHF x`
* `>FPU lrintf`
* ## RETURN VALUE
* On stack (long)
*\--------------------------------------
GP.lrintf jsr GP.SetFAC
inc pStack keep 4 bytes on stack
ldx #FPU.QINT
jsr GP.ROMCALL
ldy #3
.1 lda FAC+1,y
sta (pStack),y
dey
bpl .1
rts
*--------------------------------------
* MLI : From Kernel Aux LC to Main LC
*--------------------------------------
GP.MLICall stx .1
sta K.MLI.PARAMS
jsr GO.MainIC
jsr MLI
.1 .BS 1
.DA K.MLI.PARAMS
jsr GO.AuxLC
rts
*--------------------------------------
GO.MainIC pha
lda $D000 We re coming from AUXLC, saving bank...
sta GO.AuxLC.BNK+1
pla
php
clc
.HS 2C BIT ABS
GO.AuxLC php
sec
sei
sta GO.EXIT.SaveA+1
stx GO.EXIT.SaveX+1
sty GO.EXIT.SaveY+1
pla Restore P in A for later
plx Get PC and add 1 for return
ply
inx
bne .1
iny
.1 stx GO.EXIT.JMP+1
sty GO.EXIT.JMP+2
bcs .2 if CS, go AUXLC
tsx
stx SaveSX
ldx SaveSM
txs
sta IO.CLRALTZP
ldx #IO.RRAMWRAMBNK1 Go MAINLC (ProDOS), always BNK1
bra GO.EXIT
.2 sta IO.SETALTZP
tsx
stx SaveSM
ldx SaveSX
txs
GO.AuxLC.BNK ldx #$FF Self Modified, initialized to BNK1 for INIT3
*--------------------------------------
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)
* A,X,Y, $FA->$FF Already Saved
* Main RAM,ZP/LC selected
* must begin with CLD
* must exit with RTS
* - CC if IRQ cleared, CS if NOT
*--------------------------------------
GP.IRQ cld
bit IRQ.Skip After A2osX IRQ.H ?
bmi GP.IRQ.Exit
sta IO.SETALTZP switch to aux LC
tsx
stx SaveSM
ldx SaveSX
txs
GP.IRQ.JSR jsr CORE.IRQ.DEV SELF MODIFIED
tsx go back to Main
stx SaveSX
ldx SaveSM
txs
sta IO.CLRALTZP
rts
GP.IRQ.Exit stz IRQ.Skip reset flag
sec
rts
*--------------------------------------
*GO.Reset jsr GO.AuxLC
* jmp CORE.Run
*--------------------------------------
*BrkHandler bra *
*-------------------------------------- *--------------------------------------
.LIST ON .LIST ON
.BS $11D0-* .BS A2osX.KCONFIG-*
.LIST OFF .LIST OFF
*-------------------------------------- *--------------------------------------
* $11D0->$11EF : Public Variables * Kernel Config Block
*--------------------------------------
.BS 32
*--------------------------------------
* $11F0->$11FF : Kernel Config Block
*-------------------------------------- *--------------------------------------
.DA #6 A2osX.HZ=60hz .DA #6 A2osX.HZ=60hz
.DA #2 A2osX.TTYDEVS=2 .DA #2 A2osX.TTYDEVS=2
.HS 000000000000
.DA #0 ChRoot/Preemptive Disabled .DA #0 ChRoot/Preemptive Disabled
.HS 000000000000 spare
.HS 00000000000000 All Slots marked as "Free" .HS 00000000000000 All Slots marked as "Free"
*-------------------------------------- *--------------------------------------
MAN MAN

View File

@ -4,11 +4,16 @@ NEW
Kernel.Init2 sei Kernel.Init2 sei
ldx #$FF ldx #$FF
txs txs
sta IO.SETALTZP sta IO.SETALTZP
stx SaveSM stx SaveSM
stx SaveSX stx SaveSX
.DO K8M=1
sta IO.CLRALTZP
.FIN
ldx #Kernel.ZP.S-1 ldx #Kernel.ZP.S-1
.1 lda Kernel.ZP,x .1 lda Kernel.ZP,x
@ -16,15 +21,32 @@ Kernel.Init2 sei
dex dex
bpl .1 bpl .1
.DO K8M=0
sta IO.CLRALTZP sta IO.CLRALTZP
.FIN
>LDYAI MSG.Init2 >LDYAI MSG.Init2
jsr PrintFYA jsr PrintFYA
>LDYA PAKME.MAIN .DO K8M=0
sta IO.SETALTZP
.FIN
>LDYA PAKME.GP
>STYA ZPInBufPtr >STYA ZPInBufPtr
>LDYAI $1000 >LDYAI $0140
jsr A2osX.Unpak jsr A2osX.Unpak
.DO K8M=0
sta IO.CLRALTZP
.FIN
>LDYA PAKME.MAIN
>STYA ZPInBufPtr
>LDYAI MAIN.ORG
jsr A2osX.Unpak
.DO K8M=0
>LDYA PAKME.AUX >LDYA PAKME.AUX
>STYA ZPInBufPtr >STYA ZPInBufPtr
>LDYAI $9F00 >LDYAI $9F00
@ -66,8 +88,12 @@ Kernel.Init2 sei
.4 sta IO.CLRWRITEAUX .4 sta IO.CLRWRITEAUX
.ELSE
sta IO.SETALTZP sta IO.SETALTZP
.FIN
lda IO.RRAMWRAMBNK2 lda IO.RRAMWRAMBNK2
lda IO.RRAMWRAMBNK2 lda IO.RRAMWRAMBNK2
@ -96,10 +122,21 @@ Kernel.Init2 sei
jsr KConfigLoad jsr KConfigLoad
lda A2osX.HZ lda A2osX.FSID
beq .5
sta IO.SETALTZP
sta A2osX.FSID
sta IO.CLRALTZP
>LDYAI MSG.FX
jsr PrintFYA
.5 lda A2osX.HZ
pha pha
>LDYAI MSG.HZ >LDYAI MSG.HZ
jsr PrintFYA jsr PrintFYA
>LDYAI MSG.Init2.OK >LDYAI MSG.Init2.OK
jsr PrintFYA jsr PrintFYA
*-------------------------------------- *--------------------------------------
@ -193,6 +230,7 @@ Kernel.Init3C >LDYAI MSG.Init3
>PUSHWI SBININITD >PUSHWI SBININITD
>PUSHBI 0 PS Flags >PUSHBI 0 PS Flags
>SYSCALL2 ExecV >SYSCALL2 ExecV
bcs Kernel.Init3.Err bcs Kernel.Init3.Err
@ -219,6 +257,7 @@ KConfigLoad >LDYAI MSG.KCREAD
.DA #MLI.GFINFOEX .DA #MLI.GFINFOEX
.DA pMLIGFIEX .DA pMLIGFIEX
bcc .1 bcc .1
eor #MLI.E.BADCALL eor #MLI.E.BADCALL
beq .2 regular ProDOS beq .2 regular ProDOS
@ -254,13 +293,8 @@ KConfigLoad >LDYAI MSG.KCREAD
.9 >LDYAI MSG.KCREAD.KO .9 >LDYAI MSG.KCREAD.KO
.8 jsr PrintFYA .8 jsr PrintFYA
lda A2osX.FSID
beq .99 rts
>LDYAI MSG.FX
jsr PrintFYA
.99 rts
*-------------------------------------- *--------------------------------------
* INIT3 Subs * INIT3 Subs
*-------------------------------------- *--------------------------------------
@ -396,15 +430,15 @@ HW.Detect >PUSHWI MSG.HW
bit IO.RROMBNK1 bit IO.RROMBNK1
stz A2osX.HWType stz A2osX.HWT
stz A2osX.HWSubT stz A2osX.HWSubT
sec sec
jsr $FE1F ROM.IDROUTINE IIgs ? jsr $FE1F ROM.IDROUTINE IIgs ?
bcs .2 bcs .2
lda #A2osX.HWType.IIgs lda #A2osX.HWT.IIgs
sta A2osX.HWType sta A2osX.HWT
cpy #2 cpy #2
bne .1 bne .1
@ -417,8 +451,8 @@ HW.Detect >PUSHWI MSG.HW
.2 lda $FBC0 ROM.ZIDBYTE .2 lda $FBC0 ROM.ZIDBYTE
beq .4 //c beq .4 //c
ldx #A2osX.HWType.IIe ldx #A2osX.HWT.IIe
stx A2osX.HWType stx A2osX.HWT
cmp #$EA cmp #$EA
beq .8 //e OLD ROMs beq .8 //e OLD ROMs
@ -430,8 +464,8 @@ HW.Detect >PUSHWI MSG.HW
inc A2osX.HWSubT //e LC card inc A2osX.HWSubT //e LC card
bra .8 bra .8
.4 lda #A2osX.HWType.IIc .4 lda #A2osX.HWT.IIc
sta A2osX.HWType sta A2osX.HWT
lda $FBBF lda $FBBF
sta A2osX.HWSubT sta A2osX.HWSubT
@ -439,7 +473,7 @@ HW.Detect >PUSHWI MSG.HW
bit IO.RRAMWRAMBNK1 bit IO.RRAMWRAMBNK1
>PUSHWI MSG.HW.TypeSubT >PUSHWI MSG.HW.TypeSubT
>PUSHB A2osX.HWType >PUSHB A2osX.HWT
>PUSHB A2osX.HWSubT >PUSHB A2osX.HWSubT
>PUSHBI 2 >PUSHBI 2
>SYSCALL2 printf >SYSCALL2 printf
@ -469,8 +503,8 @@ CPU.Init >PUSHWI MSG.CPU
php php
sei sei
lda A2osX.HWType lda A2osX.HWT
cmp #A2osX.HWType.IIc cmp #A2osX.HWT.IIc
beq CPU.Init2c beq CPU.Init2c
*-------------------------------------- *--------------------------------------
* VBL = 20.000us 50hz, 16.666 60hz * VBL = 20.000us 50hz, 16.666 60hz
@ -921,8 +955,8 @@ IrqMgrInit >LDYAI MSG.IRQ
lda K.MLI.PARAMS+1 lda K.MLI.PARAMS+1
sta IRQ.INTNUM sta IRQ.INTNUM
*-------------------------------------- *--------------------------------------
lda A2osX.HWType lda A2osX.HWT
cmp #A2osX.HWType.IIgs cmp #A2osX.HWT.IIgs
bne .1 bne .1
.OP 65816 .OP 65816
@ -975,7 +1009,7 @@ IrqMgrInit >LDYAI MSG.IRQ
sec sec
rts rts
*-------------------------------------- *--------------------------------------
.1 cmp #A2osX.HWType.IIc .1 cmp #A2osX.HWT.IIc
beq .2 beq .2
jsr IrqMgr.TClk jsr IrqMgr.TClk
@ -1193,6 +1227,7 @@ TskMgrInit >LDYAI MSG.TSK
>LDYAI K.ENV.SIZE get a buffer for ENV >LDYAI K.ENV.SIZE get a buffer for ENV
>SYSCALL NewStkObj Buffer in AUX mem >SYSCALL NewStkObj Buffer in AUX mem
bcs .99 bcs .99
>STYA ZPPtr1 >STYA ZPPtr1
@ -1376,7 +1411,8 @@ I.ENV.ROOT .AZ "ROOT"
I.ENV.PATH .AZ "PATH=${BOOT}sbin/:${BOOT}bin/" I.ENV.PATH .AZ "PATH=${BOOT}sbin/:${BOOT}bin/"
I.ENV.LIB .AZ "LIB=${BOOT}lib/" I.ENV.LIB .AZ "LIB=${BOOT}lib/"
I.ENV.DRV .AZ "DRV=${BOOT}drv/" I.ENV.DRV .AZ "DRV=${BOOT}drv/"
SBININITD .AZ "${ROOT}sbin/initd" *SBININITD .AZ "${ROOT}sbin/initd"
SBININITD .AZ "/A2OSX.BUILD/sbin/initd"
.DA #0 end of ARGV for ExecV .DA #0 end of ARGV for ExecV
*-------------------------------------- *--------------------------------------
pMLIGFIEX .DA #2 pMLIGFIEX .DA #2

View File

@ -5,7 +5,7 @@ NEW
*-------------------------------------- *--------------------------------------
* Bank 1 * Bank 1
*-------------------------------------- *--------------------------------------
K.SYSCALL .DA 0 $00 : STAT JMP.TABL .DA 0 $00 : STAT
.DA K.ChMod .DA K.ChMod
.DA K.FStat .DA K.FStat
.DA K.Stat .DA K.Stat
@ -162,7 +162,7 @@ K.SYSCALL .DA 0 $00 : STAT
* HI Byte : * HI Byte :
* Flags (ROOT....) * Flags (ROOT....)
*-------------------------------------- *--------------------------------------
K.SYSCALL.BANK .DA #IO.RRAMWRAMBNK1 $00 JMP.BANK .DA #IO.RRAMWRAMBNK1 $00
.DA #0 .DA #0
.DA #IO.RRAMWRAMBNK1 .DA #IO.RRAMWRAMBNK1
.DA #0 .DA #0
@ -435,37 +435,37 @@ K.SYSCALL.BANK .DA #IO.RRAMWRAMBNK1 $00
.DA #$C0 FreeStkObj .DA #$C0 FreeStkObj
.DA #0 .DA #0
*-------------------------------------- *--------------------------------------
* K.SYSCALL2 : From KERNEL (MAIN,AUX), LIB * From KERNEL (MAIN,AUX), LIB
*-------------------------------------- *--------------------------------------
K.SYSCALL2 bit K.SYSCALL.BANK,x Get Target BNK JMP.2 bit JMP.BANK,x Get Target BNK
bvc K.SYSCALL2.BANK bvc JMP.B
K.SYSCALL2.AUX sta IO.SETREADAUX MAIN to AUX Mem API sta IO.SETREADAUX MAIN to AUX Mem API
sta IO.SETWRITEAUX sta IO.SETWRITEAUX
jsr K.SYSCALL.JMP jsr JMP.JMPX
sta IO.CLRREADAUX sta IO.CLRREADAUX
sta IO.CLRWRITEAUX sta IO.CLRWRITEAUX
rts rts
K.SYSCALL2.MAIN sta IO.CLRREADAUX Coming from KERNEL in AUX... JMP.M sta IO.CLRREADAUX Coming from KERNEL in AUX...
sta IO.CLRWRITEAUX sta IO.CLRWRITEAUX
jsr .1 jsr .1
sta IO.SETREADAUX sta IO.SETREADAUX
sta IO.SETWRITEAUX sta IO.SETWRITEAUX
rts rts
.1 bit K.SYSCALL.BANK,x Get Target LC BNK .1 bit JMP.BANK,x Get Target LC BNK
JMP.B bpl JMP.JMPX 0, E000, no BNK change
K.SYSCALL2.BANK bpl K.SYSCALL.JMP 0, E000, no BNK change
sta .7+1 sta .7+1
lda $D000 #IO.RRAMWRAMBNK1 or #IO.RRAMWRAMBNK2 lda $D000 #IO.RRAMWRAMBNK1 or #IO.RRAMWRAMBNK2
cmp K.SYSCALL.BANK,x cmp JMP.BANK,x
beq .7 beq .7
pha remember source BNK pha remember source BNK
stx .6+1 stx .6+1
lda K.SYSCALL.BANK,x lda JMP.BANK,x
tax get Target BNK in x tax get Target BNK in x
bit $C000,x switch to Target BNK bit $C000,x switch to Target BNK
* bit $C000,x * bit $C000,x
@ -483,22 +483,21 @@ K.SYSCALL2.BANK bpl K.SYSCALL.JMP 0, E000, no BNK change
.6 ldx #$ff SELF MODIFIED .6 ldx #$ff SELF MODIFIED
.7 lda #$ff SELF MODIFIED .7 lda #$ff SELF MODIFIED
K.SYSCALL.JMP jmp (K.SYSCALL,x) JMP.JMPX jmp (JMP.TABL,x)
*-------------------------------------- *--------------------------------------
K.SYSCALL.JMPX1A JMP.X1A >PULLW FORPNT
>PULLW FORPNT bra JMP.XA
bra JMPXA
K.SYSCALL.JMPX2A JMP.X2A sec
sec
.HS 90 BCC .HS 90 BCC
K.SYSCALL.JMPX2 clc JMP.X2 clc
>PULLW FORPNT >PULLW FORPNT
>PULLW TXTPTR >PULLW TXTPTR
bcc K.SYSCALL.JMPX bcc JMP.X
JMPXA >PULLA JMP.XA >PULLA
K.SYSCALL.JMPX sta IO.SETREADAUX JMP.X sta IO.SETREADAUX
sta IO.SETWRITEAUX sta IO.SETWRITEAUX
jsr JMPX jsr JMPX
sta IO.CLRREADAUX sta IO.CLRREADAUX

View File

@ -12,7 +12,7 @@ NEW
* ## RETURN VALUE * ## RETURN VALUE
* CC * CC
*\-------------------------------------- *\--------------------------------------
K.MD5 .EQ K.SYSCALL.JMPX2 K.MD5 .EQ JMP.X2
* >PULLW FORPNT * >PULLW FORPNT
* >PULLW TXTPTR * >PULLW TXTPTR
@ -26,9 +26,9 @@ K.MD5 .EQ K.SYSCALL.JMPX2
* ## RETURN VALUE * ## RETURN VALUE
* A = hMem To S.MD5 * A = hMem To S.MD5
*\-------------------------------------- *\--------------------------------------
K.MD5Init .EQ K.SYSCALL.JMPX K.MD5Init .EQ JMP.X
* jmp K.SYSCALL.JMPX * jmp JMP.X
*/-------------------------------------- */--------------------------------------
* ## MD5Update * ## MD5Update
* Add Data to MD5 computation * Add Data to MD5 computation
@ -41,12 +41,12 @@ K.MD5Init .EQ K.SYSCALL.JMPX
* `>SYSCALL MD5Update` * `>SYSCALL MD5Update`
* ## RETURN VALUE * ## RETURN VALUE
*\-------------------------------------- *\--------------------------------------
K.MD5Update .EQ K.SYSCALL.JMPX2A K.MD5Update .EQ JMP.X2A
* >PULLW FORPNT get LEN * >PULLW FORPNT get LEN
* >PULLW TXTPTR get DATA * >PULLW TXTPTR get DATA
* >PULLA * >PULLA
* jmp K.SYSCALL.JMPX * jmp JMP.X
*/-------------------------------------- */--------------------------------------
* ## MD5Finalize * ## MD5Finalize
* # C * # C
@ -57,11 +57,11 @@ K.MD5Update .EQ K.SYSCALL.JMPX2A
* `>SYSCALL MD5Finalize` * `>SYSCALL MD5Finalize`
* ## RETURN VALUE * ## RETURN VALUE
*\-------------------------------------- *\--------------------------------------
K.MD5Finalize .EQ K.SYSCALL.JMPX1A K.MD5Finalize .EQ JMP.X1A
* >PULLW FORPNT * >PULLW FORPNT
* >PULLA * >PULLA
* jmp K.SYSCALL.JMPX * jmp JMP.X
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE usr/src/sys/kernel.s.md5 SAVE usr/src/sys/kernel.s.md5

View File

@ -10,10 +10,10 @@ NEW
* `>SYSCALL getpwuid` * `>SYSCALL getpwuid`
* ## RETURN VALUE * ## RETURN VALUE
*\-------------------------------------- *\--------------------------------------
K.GetPWUID .EQ K.SYSCALL.JMPX1A K.GetPWUID .EQ JMP.X1A
* >PULLW FORPNT * >PULLW FORPNT
* >PULLA UID * >PULLA UID
* jmp K.SYSCALL.JMPX * jmp JMP.X
*/-------------------------------------- */--------------------------------------
* # GetGRGID * # GetGRGID
* ## C * ## C
@ -24,10 +24,10 @@ K.GetPWUID .EQ K.SYSCALL.JMPX1A
* `>SYSCALL getpwname` * `>SYSCALL getpwname`
* ## RETURN VALUE * ## RETURN VALUE
*\-------------------------------------- *\--------------------------------------
K.GetGRGID .EQ K.SYSCALL.JMPX1A K.GetGRGID .EQ JMP.X1A
* >PULLW FORPNT * >PULLW FORPNT
* >PULLA GID * >PULLA GID
* jmp K.SYSCALL.JMPX * jmp JMP.X
*/-------------------------------------- */--------------------------------------
* # CloseSession * # CloseSession
* ## C * ## C
@ -37,7 +37,7 @@ K.GetGRGID .EQ K.SYSCALL.JMPX1A
* `>SYSCALL CloseSession` * `>SYSCALL CloseSession`
* ## RETURN VALUE * ## RETURN VALUE
*\-------------------------------------- *\--------------------------------------
K.CloseSession .EQ K.SYSCALL.JMPX K.CloseSession .EQ JMP.X
*/-------------------------------------- */--------------------------------------
* # OpenSession * # OpenSession
* ## C * ## C
@ -48,12 +48,12 @@ K.CloseSession .EQ K.SYSCALL.JMPX
* `>SYSCALL OpenSession` * `>SYSCALL OpenSession`
* ## RETURN VALUE * ## RETURN VALUE
*\-------------------------------------- *\--------------------------------------
K.OpenSession .EQ K.SYSCALL.JMPX2 K.OpenSession .EQ JMP.X2
* >PULLW FORPNT passwd * >PULLW FORPNT passwd
* >PULLW TXTPTR name * >PULLW TXTPTR name
* jmp K.SYSCALL.JMPX * jmp JMP.X
*/-------------------------------------- */--------------------------------------
* # GetPWName * # GetPWName
* ## C * ## C
@ -64,11 +64,11 @@ K.OpenSession .EQ K.SYSCALL.JMPX2
* `>SYSCALL getpwname` * `>SYSCALL getpwname`
* ## RETURN VALUE * ## RETURN VALUE
*\-------------------------------------- *\--------------------------------------
K.GetPWName .EQ K.SYSCALL.JMPX2 K.GetPWName .EQ JMP.X2
* >PULLW FORPNT * >PULLW FORPNT
* >PULLW TXTPTR * >PULLW TXTPTR
* jmp K.SYSCALL.JMPX * jmp JMP.X
*/-------------------------------------- */--------------------------------------
* # GetGRName * # GetGRName
* ## C * ## C
@ -79,11 +79,11 @@ K.GetPWName .EQ K.SYSCALL.JMPX2
* `>SYSCALL getpwname` * `>SYSCALL getpwname`
* ## RETURN VALUE * ## RETURN VALUE
*\-------------------------------------- *\--------------------------------------
K.GetGRName .EQ K.SYSCALL.JMPX2 K.GetGRName .EQ JMP.X2
* >PULLW FORPNT * >PULLW FORPNT
* >PULLW TXTPTR * >PULLW TXTPTR
* jmp K.SYSCALL.JMPX * jmp JMP.X
*/-------------------------------------- */--------------------------------------
* # PutPW * # PutPW
* ## C * ## C
@ -105,7 +105,7 @@ K.PutPW
*\-------------------------------------- *\--------------------------------------
K.PutGR >PULLW TXTPTR K.PutGR >PULLW TXTPTR
jsr K.SYSCALL.JMPX jsr JMP.X
bcc PWD.FlushFiles bcc PWD.FlushFiles
rts rts

View File

@ -36,7 +36,7 @@ K.SListAddData
* ## RETURN VALUE * ## RETURN VALUE
*\-------------------------------------- *\--------------------------------------
K.SListSetData >PULLW ZPSListDataLen K.SListSetData >PULLW ZPSListDataLen
jmp K.SYSCALL.JMPX2A jmp JMP.X2A
*/-------------------------------------- */--------------------------------------
* # SListGetByID * # SListGetByID
* ## ASM * ## ASM
@ -47,7 +47,7 @@ K.SListSetData >PULLW ZPSListDataLen
* ## RETURN VALUE * ## RETURN VALUE
* Y,A = Next KeyID * Y,A = Next KeyID
*\-------------------------------------- *\--------------------------------------
K.SListGetByID .EQ K.SYSCALL.JMPX2A K.SListGetByID .EQ JMP.X2A
* >PULLW FORPNT * >PULLW FORPNT
* >PULLW TXTPTR * >PULLW TXTPTR
* >PULLA * >PULLA
@ -62,7 +62,7 @@ K.SListGetByID .EQ K.SYSCALL.JMPX2A
* Y,A = KeyID * Y,A = KeyID
* X = KeyLen * X = KeyLen
*\-------------------------------------- *\--------------------------------------
K.SListNewKey .EQ K.SYSCALL.JMPX2A K.SListNewKey .EQ JMP.X2A
* >PULLW FORPNT * >PULLW FORPNT
* >PULLW TXTPTR * >PULLW TXTPTR
* >PULLA * >PULLA
@ -77,7 +77,7 @@ K.SListNewKey .EQ K.SYSCALL.JMPX2A
* Y,A = KeyID * Y,A = KeyID
* X = Key Length * X = Key Length
*\-------------------------------------- *\--------------------------------------
K.SListLookup .EQ K.SYSCALL.JMPX2A K.SListLookup .EQ JMP.X2A
* >PULLW FORPNT * >PULLW FORPNT
* >PULLW TXTPTR * >PULLW TXTPTR
* >PULLA * >PULLA
@ -88,7 +88,7 @@ K.SListLookup .EQ K.SYSCALL.JMPX2A
* `>SYSCALL SListFree` * `>SYSCALL SListFree`
* ## RETURN VALUE * ## RETURN VALUE
*\-------------------------------------- *\--------------------------------------
K.SListFree .EQ K.SYSCALL.JMPX K.SListFree .EQ JMP.X
*/-------------------------------------- */--------------------------------------
* # SListNew * # SListNew
* ## ASM * ## ASM
@ -97,7 +97,7 @@ K.SListFree .EQ K.SYSCALL.JMPX
* ## RETURN VALUE * ## RETURN VALUE
* A=hSList * A=hSList
*\-------------------------------------- *\--------------------------------------
K.SListNew .EQ K.SYSCALL.JMPX K.SListNew .EQ JMP.X
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE usr/src/sys/kernel.s.slist SAVE usr/src/sys/kernel.s.slist

View File

@ -53,7 +53,7 @@ SLISTX.GetData jsr SLISTX.Select
ror SLISTX.b0 ror SLISTX.b0
.11 ldx #SYS.GetMem .11 ldx #SYS.GetMem
jsr K.SYSCALL2.MAIN !!! Get a buffer In MAIN Mem !!! jsr JMP.M !!! Get a buffer In MAIN Mem !!!
bcs .9 bcs .9
stx .88+1 stx .88+1
@ -231,7 +231,7 @@ SLISTX.CheckLen lda ZPSListDataLen
iny iny
bne .1 bne .1
inc FORPNT+1 inc FORPNT+1
inx inx
@ -473,6 +473,7 @@ SLISTX.IsIDValid
beq .8 beq .8
.1 bit SLISTX.Opt SL._ .1 bit SLISTX.Opt SL._
.2 bvc .3 .2 bvc .3
cmp #'_' cmp #'_'

View File

@ -9,11 +9,11 @@ NEW
* `>SYSCALL StrVSet` * `>SYSCALL StrVSet`
* ## RETURN VALUE * ## RETURN VALUE
*\-------------------------------------- *\--------------------------------------
K.StrVSet .EQ K.SYSCALL.JMPX2A K.StrVSet .EQ JMP.X2A
* >PULLW FORPNT ptr * >PULLW FORPNT ptr
* >PULLW TXTPTR id * >PULLW TXTPTR id
* >PULLA * >PULLA
* jmp K.SYSCALL.JMPX * jmp JMP.X
*/-------------------------------------- */--------------------------------------
* # StrVGet * # StrVGet
* ## ASM * ## ASM
@ -25,11 +25,11 @@ K.StrVSet .EQ K.SYSCALL.JMPX2A
* CC: Y,A = Ptr * CC: Y,A = Ptr
* CS: Y,A = NULL * CS: Y,A = NULL
*\-------------------------------------- *\--------------------------------------
K.StrVGet .EQ K.SYSCALL.JMPX2A K.StrVGet .EQ JMP.X2A
* >PULLW FORPNT ptr * >PULLW FORPNT ptr
* >PULLW TXTPTR id * >PULLW TXTPTR id
* >PULLA * >PULLA
* jmp K.SYSCALL.JMPX * jmp JMP.X
*/-------------------------------------- */--------------------------------------
* # StrVNew * # StrVNew
* ## ASM * ## ASM
@ -37,7 +37,7 @@ K.StrVGet .EQ K.SYSCALL.JMPX2A
* `>SYSCALL StrVNew` * `>SYSCALL StrVNew`
* ## RETURN VALUE * ## RETURN VALUE
*\-------------------------------------- *\--------------------------------------
K.StrVNew .EQ K.SYSCALL.JMPX K.StrVNew .EQ JMP.X
*/-------------------------------------- */--------------------------------------
* # StrVFree * # StrVFree
* ## ASM * ## ASM
@ -45,7 +45,7 @@ K.StrVNew .EQ K.SYSCALL.JMPX
* `>SYSCALL StrVFree` * `>SYSCALL StrVFree`
* ## RETURN VALUE * ## RETURN VALUE
*\-------------------------------------- *\--------------------------------------
K.StrVFree .EQ K.SYSCALL.JMPX K.StrVFree .EQ JMP.X
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE usr/src/sys/kernel.s.strv SAVE usr/src/sys/kernel.s.strv

View File

@ -16,7 +16,7 @@ K.Time >PULLW FORPNT
>LDYAI GP.DATE >LDYAI GP.DATE
>STYA TXTPTR >STYA TXTPTR
ldx #SYS.PTime2Time ldx #SYS.PTime2Time
jmp K.SYSCALL.JMPX jmp JMP.X
*/-------------------------------------- */--------------------------------------
* # StrFTime * # StrFTime
* ## C * ## C
@ -47,7 +47,7 @@ K.Time >PULLW FORPNT
K.StrFTime >PULLW ZPPtr3 S.TIME K.StrFTime >PULLW ZPPtr3 S.TIME
>PULLW TXTPTR format >PULLW TXTPTR format
>PULLW FORPNT str >PULLW FORPNT str
jmp K.SYSCALL.JMPX jmp JMP.X
*/-------------------------------------- */--------------------------------------
* # PTime2Time * # PTime2Time
* Convert ProDOS Time To S.TIME * Convert ProDOS Time To S.TIME
@ -59,11 +59,11 @@ K.StrFTime >PULLW ZPPtr3 S.TIME
* `>SYSCALL PTime2Time` * `>SYSCALL PTime2Time`
* ## RETURN VALUE * ## RETURN VALUE
*\-------------------------------------- *\--------------------------------------
K.PTime2Time .EQ K.SYSCALL.JMPX2 K.PTime2Time .EQ JMP.X2
* >PULLW FORPNT S.TIME * >PULLW FORPNT S.TIME
* >PULLW TXTPTR ptime * >PULLW TXTPTR ptime
* jmp K.SYSCALL.JMPX * jmp JMP.X
*/-------------------------------------- */--------------------------------------
* # CTime2Time * # CTime2Time
* Convert CTime Time To S.TIME * Convert CTime Time To S.TIME
@ -75,11 +75,11 @@ K.PTime2Time .EQ K.SYSCALL.JMPX2
* `>SYSCALL CTime2Time` * `>SYSCALL CTime2Time`
* ## RETURN VALUE * ## RETURN VALUE
*\-------------------------------------- *\--------------------------------------
K.CTime2Time .EQ K.SYSCALL.JMPX2 K.CTime2Time .EQ JMP.X2
* >PULLW FORPNT S.TIME * >PULLW FORPNT S.TIME
* >PULLW TXTPTR ctime * >PULLW TXTPTR ctime
* jmp K.SYSCALL.JMPX * jmp JMP.X
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE usr/src/sys/kernel.s.time SAVE usr/src/sys/kernel.s.time

View File

@ -6,6 +6,9 @@ NEW
.TF sys/kernel .TF sys/kernel
K8M .EQ 0
MAIN.ORG .EQ $1000
.INB inc/macros.i .INB inc/macros.i
.INB inc/a2osx.i .INB inc/a2osx.i
.INB inc/io.i .INB inc/io.i
@ -24,23 +27,26 @@ NEW
A2osX.Unpak >STYA ZPOutBufPtr A2osX.Unpak >STYA ZPOutBufPtr
.INB usr/src/shared/x.unpak.s .INB usr/src/shared/x.unpak.s
PAKME.MAIN .DA MAIN GP .DA #0
PAKME.AUX .DA AUX .DA GP.S
PAKME.D1 .DA D1
PAKME.D2 .DA D2
PAKME.E0 .DA E0
GP.B .PH $0140
.INB usr/src/sys/kernel.s.gp
.EP
GP.S .EQ *-GP.B
MAIN .DA #0 MAIN .DA #0
.DA MAIN.S .DA MAIN.S
MAIN.B .PH $1000 MAIN.B .PH MAIN.ORG
.INB usr/src/sys/kernel.s.gp
.INB usr/src/sys/kernel.s.core .INB usr/src/sys/kernel.s.core
.INB usr/src/sys/kernel.s.drv .INB usr/src/sys/kernel.s.drv
.INB usr/src/sys/kernel.s.pft .INB usr/src/sys/kernel.s.pft
.INB usr/src/sys/kernel.s.fs .INB usr/src/sys/kernel.s.fs
.INB usr/src/sys/kernel.s.mathf .INB usr/src/sys/kernel.s.mathf
.EP .EP
MAIN.S .EQ *-MAIN.B MAIN.S .EQ *-MAIN.B
AUX .DA #0 AUX .DA #0
@ -61,6 +67,7 @@ AUX.B .PH Mem.XHiMem
.INB usr/src/sys/kernel.s.blistx .INB usr/src/sys/kernel.s.blistx
.INB usr/src/sys/kernel.s.errorx .INB usr/src/sys/kernel.s.errorx
.EP .EP
AUX.S .EQ *-AUX.B AUX.S .EQ *-AUX.B
D1 .DA #0 D1 .DA #0
@ -77,6 +84,7 @@ D1.B .PH $D000
.INB usr/src/sys/kernel.s.sock .INB usr/src/sys/kernel.s.sock
.INB usr/src/sys/kernel.s.pipe .INB usr/src/sys/kernel.s.pipe
.EP .EP
D1.S .EQ *-D1.B D1.S .EQ *-D1.B
D2 .DA #0 D2 .DA #0
@ -93,6 +101,7 @@ D2.B .PH $D000
.INB usr/src/sys/kernel.s.bin .INB usr/src/sys/kernel.s.bin
.INB usr/src/sys/kernel.s.ps .INB usr/src/sys/kernel.s.ps
.EP .EP
D2.S .EQ *-D2.B D2.S .EQ *-D2.B
E0 .DA #0 E0 .DA #0
@ -125,10 +134,17 @@ DevMgr.FreeMem .EQ *
E0.S .EQ *-E0.B E0.S .EQ *-E0.B
PAKME.GP .DA GP
PAKME.MAIN .DA MAIN
PAKME.AUX .DA AUX
PAKME.D1 .DA D1
PAKME.D2 .DA D2
PAKME.E0 .DA E0
.AS "PAKME" TAG .AS "PAKME" TAG
.DA $2000 BIN ORG .DA $2000 BIN ORG
.DA #5 Chunk Count .DA #6 Chunk Count
.DA PAKME.MAIN Chunks .DA PAKME.GP Chunks
.INB usr/src/sys/kernel.s.ctrl .INB usr/src/sys/kernel.s.ctrl
MAN MAN

View File

@ -6,6 +6,9 @@ NEW
.TF sys/krnl8m .TF sys/krnl8m
K8M .EQ 1
MAIN.ORG .EQ $8000
.INB inc/macros.i .INB inc/macros.i
.INB inc/a2osx.i .INB inc/a2osx.i
.INB inc/io.i .INB inc/io.i
@ -24,17 +27,19 @@ NEW
A2osX.Unpak >STYA ZPOutBufPtr A2osX.Unpak >STYA ZPOutBufPtr
.INB usr/src/shared/x.unpak.s .INB usr/src/shared/x.unpak.s
PAKME.MAIN .DA MAIN GP .DA #0
PAKME.AUX .DA AUX .DA GP.S
PAKME.D1 .DA D1
PAKME.D2 .DA D2 GP.B .PH $0140
PAKME.E0 .DA E0 .INB usr/src/sys/kernel.s.gp
.EP
GP.S .EQ *-GP.B
MAIN .DA #0 MAIN .DA #0
.DA MAIN.S .DA MAIN.S
MAIN.B .PH $1000 MAIN.B .PH MAIN.ORG
.INB usr/src/sys/kernel.s.gp
.INB usr/src/sys/kernel.s.core .INB usr/src/sys/kernel.s.core
.INB usr/src/sys/kernel.s.drv .INB usr/src/sys/kernel.s.drv
.INB usr/src/sys/kernel.s.pft .INB usr/src/sys/kernel.s.pft
@ -125,10 +130,17 @@ DevMgr.FreeMem .EQ *
E0.S .EQ *-E0.B E0.S .EQ *-E0.B
PAKME.GP .DA GP
PAKME.MAIN .DA MAIN
PAKME.AUX .DA AUX
PAKME.D1 .DA D1
PAKME.D2 .DA D2
PAKME.E0 .DA E0
.AS "PAKME" TAG .AS "PAKME" TAG
.DA $2000 BIN ORG .DA $2000 BIN ORG
.DA #5 Chunk Count .DA #5 Chunk Count
.DA PAKME.MAIN Chunks .DA PAKME.GP Chunks
.INB usr/src/sys/kernel.s.ctrl .INB usr/src/sys/kernel.s.ctrl
MAN MAN