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

@ -141,26 +141,42 @@ A2osX.QC.Start2 sec
dex
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
ldy #0
.7 inx
.9 inx
iny
lda SYSKERNEL,y
lda (TmpPtr1),y
sta $280,x
cpy SYSKERNEL
bne .7
tya
cmp (TmpPtr1)
bne .9
stx $280
jsr A2osX.QC.Load
bcs *
.8 >LDYAI MSG.INIT1OK
>LDYAI MSG.INIT1OK
sec
jsr A2osX.QC.PrintYA
A2osX.QC.JMP >DEBUGOA
>DEBUGOA
jmp $2000
*--------------------------------------
A2osX.QC.SetPFX jsr MLI
@ -257,6 +273,7 @@ MLICLOSE03 .DA #1
.BS 1
*--------------------------------------
SYSKERNEL .PS "sys/kernel"
SYSKRNL8M .PS "sys/krnl8m"
*--------------------------------------
MSG.INIT1 .PS "A2osX[Stage1]:Init"
MSG.SETPREFIXOK .PS "Prefix Set: "

View File

@ -149,17 +149,32 @@ A2osX.RamDrv >LDYAI MSG.RAMDRV
A2osX.SetupQC lda IO.RRAMWRAMBNK2
lda IO.RRAMWRAMBNK2
ldx #0
.1 lda A2osX.QC.B.Start,x Still at $2xxx !!! not moved to $1xxx
lda GP.KVER
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
lda A2osX.QC.B.Start+$100,x
sta $D200,x
lda A2osX.QC.B.Start+$200,x
sta $D300,x
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
jsr PrintFYA
@ -691,6 +706,7 @@ SYSTEM.END .EQ *
A2osX.QC.B.Start
A2osX.QC.B.BOOT .EQ *+4
A2osX.QC.B.ROOT .EQ *+4+64
.INB usr/src/a2osx.s.qc
*--------------------------------------
MAN

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -3,18 +3,20 @@ NEW
.LIST OFF
.OP 65816
.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
ENHFILENAME .EQ 1
DIREXTENDROOT .EQ 1
LOWERCASE .EQ 1
ACL .EQ 1
LOGO .EQ 1
AUXLC .EQ 1
M.PM .EQ 0
M.RAM .EQ 0
M.SEL .EQ 1
*--------------------------------------
.INB inc/zp.i
.INB inc/io.i
@ -96,6 +98,67 @@ X.Unpak.XatYA sty ZPOutBufPtr
.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
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
.DA ILDR.LEN
.INB usr/src/prodos.fx/prodos.s.ildr
@ -158,67 +221,6 @@ SEL1.PAK .DA #0
SEL2.PAK .DA #0
.DA SEL2.LEN
.INB usr/src/prodos.fx/prodos.s.sel2
*--------------------------------------
PAKME.Table
PAKME.ID .SE 0
PAKME.ILDR.ID .EQ PAKME.ID
PAKME.ILDR .DA ILDR.PAK
PAKME.ID .SE PAKME.ID+2
PAKME.GP.ID .EQ PAKME.ID
PAKME.GP .DA GP.PAK
PAKME.ID .SE PAKME.ID+2
PAKME.XRW.ID .EQ PAKME.ID
PAKME.XRW .DA XRW.PAK
PAKME.ID .SE PAKME.ID+2
PAKME.XDOS.ID .EQ PAKME.ID
PAKME.XDOS .DA XDOS.PAK
PAKME.ID .SE PAKME.ID+2
PAKME.IRQ.ID .EQ PAKME.ID
PAKME.IRQ .DA IRQ.PAK
PAKME.ID .SE PAKME.ID+2
.DO M.RAM=1
PAKME.RAM.ID .EQ PAKME.ID
PAKME.RAM .DA RAM.PAK
PAKME.ID .SE PAKME.ID+2
PAKME.RAMX.ID .EQ PAKME.ID
PAKME.RAMX .DA RAMX.PAK
PAKME.ID .SE PAKME.ID+2
.FIN
PAKME.DCLK.ID .EQ PAKME.ID
PAKME.DCLK .DA DCLK.PAK
PAKME.ID .SE PAKME.ID+2
PAKME.NCLK.ID .EQ PAKME.ID
PAKME.NCLK .DA NCLK.PAK
PAKME.ID .SE PAKME.ID+2
PAKME.TCLK.ID .EQ PAKME.ID
PAKME.TCLK .DA TCLK.PAK
PAKME.ID .SE PAKME.ID+2
PAKME.XCLK.ID .EQ PAKME.ID
PAKME.XCLK .DA XCLK.PAK
PAKME.ID .SE PAKME.ID+2
PAKME.CCLK.ID .EQ PAKME.ID
PAKME.CCLK .DA CCLK.PAK
PAKME.ID .SE PAKME.ID+2
PAKME.SEL1.ID .EQ PAKME.ID
PAKME.SEL1 .DA SEL1.PAK
PAKME.ID .SE PAKME.ID+2
PAKME.SEL2.ID .EQ PAKME.ID
PAKME.SEL2 .DA SEL2.PAK
PAKME.ID .SE PAKME.ID+2
*--------------------------------------
.AS "PAKME" TAG
.DA $2000 BIN ORG

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
jsr LDR.SetupCLK
.DO M.SEL
* ldx #PAKME.SEL2.ID
* ldy #$1000
* lda /$1000
@ -250,6 +252,8 @@ LDR.IIGS sta XDOS.CortFlag
ldx #PAKME.SEL2.ID
jsr LDR.SetupSEL
.FIN
*--------------------------------------
lda LDR.BootFlag
bne .1 branch if prodos 8 alone
@ -261,9 +265,13 @@ LDR.IIGS sta XDOS.CortFlag
.1 bra LDR.Common
*--------------------------------------
LDR.II ldx #PAKME.SEL1.ID
LDR.II .DO M.SEL
ldx #PAKME.SEL1.ID
jsr LDR.SetupSEL
.FIN
jsr LDR.ClkDevScan
*--------------------------------------
LDR.Common jsr LDR.BlkDevScan

View File

@ -338,18 +338,18 @@ XDOS.SysErr sta GP.ERROR P8 error code
*--------------------------------------
XDOS.SysDeath tax death error code.
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?
beq .1 if not, don't use super hires switch.
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
.2 lda deathmsg,y
sta $400,y 'RESTART SYSTEM-$'
sta $400,y 'SYS ERR-$'
dey
bpl .2
@ -819,44 +819,57 @@ svdevn ldy namptr index to 1st byte of this entry.
rts end of block file manager
*--------------------------------------
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
bne crerr1 otherwise exit with error.
cmp #MLI.E.FNOTFND 'file not found' is ok
bne .5 otherwise exit with error.
ldy #$07 test for tree or directory file,
lda (ZP.A3L),y no other kinds are legal.
cmp #$04 is it seed, sapling or tree?
bcc tstdspc branch if it is
bcc .1 branch if it is
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.
bcs H351D
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.
bne H352A
bne XDOS.DirExtend
lda #MLI.E.DIRFULL otherwise, directory full error
.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
lda ZP.BLKNUM+1 extended block.
pha
jsr alc1blk allocate a block for extending directory
jsr XDOS.GetFreeBlk allocate a block for extending directory
plx
stx ZP.BLKNUM+1 restore block addr of dir info in XDOS.GBuf
plx
@ -874,25 +887,16 @@ H352A lda ZP.BLKNUM preserve disk address of current (last)
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
lda XDOS.GBuf+2,x
sta ZP.BLKNUM,x and save new block as next to be written
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.
.FIN
bcs H351D if error
lda own_blk
@ -908,23 +912,23 @@ clrdir stz XDOS.GBuf+2,x
ldx own_ent and calc entry address.
ocalc dex has entry address been calculated?
beq H3584 if yes.
.3 dex has entry address been calculated?
beq .4 if yes.
lda own_len next entry address
jsr XDOS.ZPT.NextA
bra ocalc
bra .3
H3584 ldy #$13 index to block count
.4 ldy #$13 index to block count
clc
H3588 lda (zpt),y
.5 lda (zpt),y
adc dinctbl-$13,y add 1 to block count and
sta (zpt),y
iny
tya $200 to the directory's eof.
eor #$18 done with usage/eof update?
bne H3588 branch if not.
bne .5 branch if not.
.DO LOWERCASE=1
jsr XDOS.WriteGBufDir
@ -934,44 +938,40 @@ H3588 lda (zpt),y
bcs crerr2
jmp XDOS.Create
crerr2 rts return and report errors
*--------------------------------------
creat1 ldx #$00 zero out XDOS.GBuf
H35A0 stz XDOS.GBuf,x
stz XDOS.GBuf+$100,x and data block of file.
inx
bne H35A0
XDOS.Create1 jsr XDOS.ZeroGBuf zero out XDOS.GBuf
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
txa if all 4 bytes of date/time = 0
ora (ZP.A3L),y then use built-in date/time.
tax
dey
cpy #$07
bne cmvtime
bne .1
txa does user want default time?
bne cmvname if not.
bne .3 if not.
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
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
lda #$10 assume tree type
bcc csvfkind
bcc .4
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.
sta d_stor sos calls this 'storage type'.
and #$0F strip back to name length
@ -980,12 +980,12 @@ csvfkind ldx namptr index to local name of pathname.
adc namptr calc end of name
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
dex
dey
bne crname
bne .5
ldy #$03 index to 'access' parameter
lda (ZP.A3L),y
@ -994,11 +994,11 @@ crname lda XDOS.PathBuf,x move local name as filename
lda (ZP.A3L),y
sta d_filid
cmvauxid iny move auxillary identification bytes
.6 iny move auxillary identification bytes
lda (ZP.A3L),y
sta d_auxid-5,y
cpy #$06
bne cmvauxid
bne .6
.DO LOWERCASE=0
lda xdosver save current xdos version #
@ -1019,9 +1019,9 @@ cmvauxid iny move auxillary identification bytes
lda d_stor storage type.
and #$E0 is it a directory?
beq cralcblk branch if seed file.
*--------------------------------------
* Create Dir First Block
*--------------------------------------
ldx #$1E move header to data block
cmvheadr lda d_stor,x
@ -1072,7 +1072,7 @@ cmvparnt lda d_entblk,x
jsr XDOS.PackGBuf
.FIN
cralcblk jsr alc1blk get address of file's data block
cralcblk jsr XDOS.GetFreeBlk get address of file's data block
bcs crerr3
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
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
SAVE usr/src/prodos.fx/prodos.s.xdos.a

View File

@ -272,20 +272,23 @@ L37FC ldx XDOS.GBuf+3 acc has value for block# (low).
rts return error in acc.
*--------------------------------------
errfnf lda nofree was any free entry found?
bne fnf0
lda XDOS.GBuf+2 test link
bne L3814
cmp XDOS.GBuf+3 if both are 0 then give up.
beq fnf0 report 'not found'.
bne .2
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
sta d_entblk+1 assume 1st entry of next block
lda #$01 is free for use.
sta d_entnum mark as valid (for create)
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'
lda #MLI.E.PNOTFND path not found
@ -866,7 +869,7 @@ tkfrecnt jsr cntbms get # of bitmaps
lda #$FF mark 'first free' temp as unknown
sta nofree
jsr upbmap update volume bitmap.
jsr XDOS.FlushBM update volume bitmap.
bcs L3BC1 if error.
ldx XDOS.VCBPtr get address of 1st bitmap

View File

@ -31,14 +31,14 @@ XDOS.DeallocAX stx bmcnt high address of block.
sta bmptr save pointer.
lsr bmcnt transfer bit which is page of bitmap
rol half
jsr fndbmap make sure device is correct one.
jsr XDOS.GetBM make sure device is correct one.
bcs L3C8B error.
lda bmacmap current map.
cmp bmcnt is in-core bitmap the correct one ?
beq L3C64 branch if yes.
jsr upbmap put current map away.
jsr XDOS.FlushBM put current map away.
bcs L3C8B error.
lda bmcnt get map #
@ -76,7 +76,7 @@ L3C8C lda #MLI.E.BADFS bitmap block # impossible.
sec bitmap disk address wrong
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.
L3C95 ldy #$00 begin search at start of bitmap block.
@ -148,11 +148,14 @@ L3CF7 lda #$80 indicate map is modified.
ldx XDOS.VCBPtr subtract 1 from total free vcb blocks
lda XDOS.VCBs+VCB.FBLK,x to account for newly allocated block.
bne .7
dec XDOS.VCBs+VCB.FBLK+1,x
.7 dec XDOS.VCBs+VCB.FBLK,x
lda scrtch return address in y,a of newly
ldy scrtch+1 allocated block.
clc no errors.
rts
*--------------------------------------
@ -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.
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 #.
cmp bmadev does this map match this device ?
beq L3D4A yes.
jsr upbmap otherwise, save other volume's bitmap
jsr XDOS.FlushBM otherwise, save other volume's bitmap
bcs L3D5F
ldy XDOS.VCBPtr
@ -198,7 +201,7 @@ L3D60 lda #MLI.E.VOLFULL request can't be filled
sec error
rts
*--------------------------------------
upbmap clc
XDOS.FlushBM clc
lda bmastat is current map modified ?
bpl .9 no.
@ -269,7 +272,7 @@ XDOS.ReadGBuf lda #$01 read 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.
XDOS.RWBlock sta ZP.BUFPTR+1 buffer high.
@ -703,7 +706,7 @@ L3FF2 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
.HS 2C BIT ABS
@ -760,7 +763,7 @@ XDOS.WriteDBLK ldx #ZP.DataPtr point at memory address with x and
lda #$BF mark data status as current.
bra XDOS.ResetFCBStatus
XDOS.WriteIBLK jsr upbmap update bitmap.
XDOS.WriteIBLK jsr XDOS.FlushBM update bitmap.
ldx #zpt point to address of index buffer
lda #FCB.IBLK and block address of that index block.

View File

@ -647,7 +647,7 @@ swapdown jsr alcwblk make current seed into a sapling, allocate a block befo
* clc no error
.9 rts
*--------------------------------------
alcwblk jsr alc1blk
alcwblk jsr XDOS.GetFreeBlk
bcs .9
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
lda ZP.BLKNUM+1
lda ZP.BLKNUM
pha
lda ZP.BLKNUM save the current block values
lda ZP.BLKNUM+1 save the current block values
pha
stz ZP.CMDNUM
stz ZP.BLKNUM zero the block #

View File

@ -208,7 +208,7 @@ L4780 ldx fcbptr
cmp bmadev is it in same as current file ?
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
L47B2 clc
@ -588,12 +588,24 @@ XDOS.GetFileInfoEx
ldx #7
ldy #S.FIEX.ACL+7+3
.DO ACL=1
.3 lda h_acl,x
sta (ZP.A3L),y
dey
dex
bpl .3
.ELSE
lda #0
.3 sta (ZP.A3L),y
dey
dex
bpl .3
.FIN
* clc
.9
XDOS.GetFileInfoEx.RTS
@ -902,7 +914,7 @@ L4B85 ldx firstbh
jsr XDOS.DeallocAX
bcs L4B93
jsr upbmap
jsr XDOS.FlushBM
L4B93 pha save possible error code.
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 ?
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.
jsr XDOS.ReadGBuf_d_frst read 1st block of directory into XDOS.GBuf

View File

@ -483,10 +483,12 @@ XDOS.IsValidFirstChar.SEC
sec
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
*--------------------------------------
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
stz ZP.A1L
@ -530,6 +532,17 @@ XDOS.CallDisp lda IO.RRAMWRAMBNK2 read/write RAM bank 2
jmp $1000
.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.
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_entblk .HS 0000 address of block which contains entry
d_entnum .HS 00 entry number within block
*--------------------------------------
d_stor .BS 16 file name
d_filid .HS 00 user's identification byte
d_frst .HS 0000 first block of file

View File

@ -5,16 +5,18 @@ NEW
.OR $2000
.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
ENHFILENAME .EQ 1
DIREXTENDROOT .EQ 1
LOWERCASE .EQ 1
ACL .EQ 1
LOGO .EQ 1
AUXLC .EQ 0
M.PM .EQ 1
M.RAM .EQ 1
M.SEL .EQ 1
*--------------------------------------
.INB inc/zp.i
.INB inc/io.i
@ -74,6 +76,67 @@ X.Unpak.XatYA sty ZPOutBufPtr
.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
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
.DA ILDR.LEN
.INB usr/src/prodos.fx/prodos.s.ildr
@ -136,67 +199,6 @@ SEL1.PAK .DA #0
SEL2.PAK .DA #0
.DA SEL2.LEN
.INB usr/src/prodos.fx/prodos.s.sel2
*--------------------------------------
PAKME.Table
PAKME.ID .SE 0
PAKME.ILDR.ID .EQ PAKME.ID
PAKME.ILDR .DA ILDR.PAK
PAKME.ID .SE PAKME.ID+2
PAKME.GP.ID .EQ PAKME.ID
PAKME.GP .DA GP.PAK
PAKME.ID .SE PAKME.ID+2
PAKME.XRW.ID .EQ PAKME.ID
PAKME.XRW .DA XRW.PAK
PAKME.ID .SE PAKME.ID+2
PAKME.XDOS.ID .EQ PAKME.ID
PAKME.XDOS .DA XDOS.PAK
PAKME.ID .SE PAKME.ID+2
PAKME.IRQ.ID .EQ PAKME.ID
PAKME.IRQ .DA IRQ.PAK
PAKME.ID .SE PAKME.ID+2
.DO M.RAM=1
PAKME.RAM.ID .EQ PAKME.ID
PAKME.RAM .DA RAM.PAK
PAKME.ID .SE PAKME.ID+2
PAKME.RAMX.ID .EQ PAKME.ID
PAKME.RAMX .DA RAMX.PAK
PAKME.ID .SE PAKME.ID+2
.FIN
PAKME.DCLK.ID .EQ PAKME.ID
PAKME.DCLK .DA DCLK.PAK
PAKME.ID .SE PAKME.ID+2
PAKME.NCLK.ID .EQ PAKME.ID
PAKME.NCLK .DA NCLK.PAK
PAKME.ID .SE PAKME.ID+2
PAKME.TCLK.ID .EQ PAKME.ID
PAKME.TCLK .DA TCLK.PAK
PAKME.ID .SE PAKME.ID+2
PAKME.XCLK.ID .EQ PAKME.ID
PAKME.XCLK .DA XCLK.PAK
PAKME.ID .SE PAKME.ID+2
PAKME.CCLK.ID .EQ PAKME.ID
PAKME.CCLK .DA CCLK.PAK
PAKME.ID .SE PAKME.ID+2
PAKME.SEL1.ID .EQ PAKME.ID
PAKME.SEL1 .DA SEL1.PAK
PAKME.ID .SE PAKME.ID+2
PAKME.SEL2.ID .EQ PAKME.ID
PAKME.SEL2 .DA SEL2.PAK
PAKME.ID .SE PAKME.ID+2
*--------------------------------------
.AS "PAKME" TAG
.DA $2000 BIN ORG

View File

@ -302,10 +302,33 @@ X.Arc.BlStat lda X.Arc.BLLen
.21 jsr X.Arc.GetYABitCntInX
inc X.Arc.BLO.LO.cnt-1,x
bne .8
bne .30
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
*--------------------------------------
X.Arc.ComputeTBits
@ -1425,7 +1448,7 @@ BLO.LenBits .DA #%11 bc= 1
.DA #%10 bc= 6
.DA #%10 bc= 7
.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=11
.DA #%0 bc=12 : Range 0..4095 (12 bits ofs)

View File

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

View File

@ -1,6 +1,403 @@
NEW
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
bra .80 Skip PS0
@ -245,10 +642,10 @@ CORE.GetEvents lda #K.S.EVT
bne .6
.4 inc DevMgr.Timer
inc A2osX.TIMER16
inc A2osX.T16
bne .5
inc A2osX.TIMER16+1
inc A2osX.T16+1
.5 ldx CORE.TickPer10t
stx CORE.Tick10t

View File

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

View File

@ -18,7 +18,7 @@ K.SetEnv
* ldy #S.PS.hENV
* lda (pPS),y
* jmp K.SYSCALL.JMPX
* jmp JMP.X
*/--------------------------------------
* # GetEnv
* 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
pla A = hENV
jmp K.SYSCALL.JMPX
jmp JMP.X
*--------------------------------------
MAN
SAVE usr/src/sys/kernel.s.env

View File

@ -118,6 +118,7 @@ ENVX.SetEnv.I
jsr SHARED.TXTPTRgY
sta (ZPPtr3),y
beq .24
jsr SHARED.IsIDValid
bcc .23
@ -125,6 +126,7 @@ ENVX.SetEnv.I
sta (ZPPtr3),y
jsr ENVX.NextEnvP3Y
ldy #$ff
.25 iny
@ -182,7 +184,7 @@ ENVX.GetEnv sta ENVX.hEnv
inc
.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

View File

@ -41,417 +41,24 @@ NEW
*--------------------------------------
* SLEEP
*--------------------------------------
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
jmp GP.Sleep
*--------------------------------------
* *** MUST BE REINTRANT ***
* NON BLOCKING Entry point (From libs)
*--------------------------------------
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 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
jmp JMP.2
*--------------------------------------
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 *
* Public Vars
*--------------------------------------
.LIST ON
.BS $11D0-*
.BS A2osX.KCONFIG-*
.LIST OFF
*--------------------------------------
* $11D0->$11EF : Public Variables
*--------------------------------------
.BS 32
*--------------------------------------
* $11F0->$11FF : Kernel Config Block
* Kernel Config Block
*--------------------------------------
.DA #6 A2osX.HZ=60hz
.DA #2 A2osX.TTYDEVS=2
.HS 000000000000
.DA #0 ChRoot/Preemptive Disabled
.HS 000000000000 spare
.HS 00000000000000 All Slots marked as "Free"
*--------------------------------------
MAN

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -53,7 +53,7 @@ SLISTX.GetData jsr SLISTX.Select
ror SLISTX.b0
.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
stx .88+1
@ -473,6 +473,7 @@ SLISTX.IsIDValid
beq .8
.1 bit SLISTX.Opt SL._
.2 bvc .3
cmp #'_'

View File

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

View File

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

View File

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

View File

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