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
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,8 +265,12 @@ 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
*--------------------------------------

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
@ -799,11 +799,11 @@ online1.ERR pha save error code.
.1 sec flag error
rts
*--------------------------------------
online1.OK lda XDOS.VCBs,x get volume name count
online1.OK lda XDOS.VCBs,x get volume name count
sta namcnt
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
inx
iny
@ -811,7 +811,7 @@ online1.OK lda XDOS.VCBs,x get volume name count
bpl .1
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.
sta (usrbuf),y
@ -819,52 +819,65 @@ 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.
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
stx ZP.BLKNUM
bcs H351D unable to allocate.
sta XDOS.GBuf+2 save block address in y,a to
sty XDOS.GBuf+3 current directory.
sta XDOS.GBuf+2 save block address in y,a to
sty XDOS.GBuf+3 current directory.
.DO LOWERCASE=1
jsr XDOS.WriteGBufDir
.ELSE
@ -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
sta XDOS.GBuf,x using current block as back link
.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,45 +938,41 @@ 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.
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.
ora XDOS.PathBuf,x combine file kind with name length.
.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
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
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
@ -1030,7 +1030,7 @@ cmvheadr lda d_stor,x
bpl cmvheadr
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
@ -1066,13 +1066,13 @@ cmvparnt lda d_entblk,x
bpl cmvparnt
lda h_entln lastly, the length of parent's
sta XDOS.GBuf+42 directory entries.
sta XDOS.GBuf+42 directory entries.
.DO LOWERCASE=1
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

@ -218,8 +218,8 @@ XDOS.CheckPath jsr XDOS.FindVol
lda #$D0 fake directory file
sta d_stor
lda XDOS.GBuf+2 check forward link.
ora XDOS.GBuf+3 if non-zero, assume full sized directory
lda XDOS.GBuf+2 check forward link.
ora XDOS.GBuf+3 if non-zero, assume full sized directory
bne .3 else assume it's the slot 3 /RAM volume
lda #$02 so reset eof and blocks_used fields
@ -237,7 +237,7 @@ fnderr.RTS rts
lookfil0 stz nofree reset free entry indicator.
sec dir to be searched has header in this block.
L37C9 stz totent reset entry counter.
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
L37EB sta entcntl keep a running count.
lda /XDOS.GBuf reset indirect pointer
lda /XDOS.GBuf reset indirect pointer
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).
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.
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
jsr XDOS.ReadGBufAXDir
.ELSE
@ -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
@ -320,7 +323,7 @@ namfound jsr nxtpname adj index to next name in path.
.FIN
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.
lda XDOS.GBuf+38
sta entcnth
@ -329,7 +332,7 @@ namfound jsr nxtpname adj index to next name in path.
* (8 bytes reserved)
*--------------------------------------
.DO LOWERCASE=0
lda XDOS.GBuf+20 make sure password is disabled
lda XDOS.GBuf+20 make sure password is disabled
ldx #$00
sec
@ -381,14 +384,14 @@ movhed0 ldx #9 move this directory info
.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
eor #$F0 test header type.
beq .8 branch if root
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
dex
bpl .3
@ -866,10 +869,10 @@ 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
ldx XDOS.VCBPtr get address of 1st bitmap
lda XDOS.VCBs+VCB.BMAP,x
sta ZP.BLKNUM
@ -889,18 +892,18 @@ L3B81 jsr XDOS.ReadGBuf use general buffer for temp space to
inc ZP.BLKNUM+1
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
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
sta XDOS.VCBs+VCB.FBLK+1,x update volume control byte.
sta XDOS.VCBs+VCB.FBLK+1,x update volume control byte.
lda scrtch
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.
sbc reql
lda XDOS.VCBs+VCB.FBLK+1,x

View File

@ -22,7 +22,7 @@ XDOS.DeallocAX stx bmcnt high address of block.
ror
dex
bne .1
* lsr bmcnt
* ror
* lsr bmcnt
@ -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.
@ -91,7 +91,7 @@ L3C9A lda XDOS.BMBuf,y
inc half now search page 2.
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
iny
@ -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
lda XDOS.VCBs+VCB.DEV,y get device #.
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
@ -186,7 +189,7 @@ L3D4A ldy bmastat is it already modified ?
jsr XDOS.ReadBMDevA otherwise read in fresh bitmap.
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
asl 2 pages per block
sta basval
@ -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.
@ -211,11 +214,11 @@ upbmap clc
*--------------------------------------
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
sta bmacmap associate offset with bitmap ctrl block.
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.
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
.HS 2C BIT ABS
XDOS.WriteBM lda #$02 write command.
sta ZP.CMDNUM
lda GP.DEVNUM save current dev #
lda GP.DEVNUM save current dev #
pha
lda bmadev get bitmap's dev #
sta GP.DEVNUM
@ -256,7 +259,7 @@ XDOS.ReadGBuf_d_frst
lda d_frst read 1st block of directory into XDOS.GBuf
ldx d_frst+1
.DO LOWERCASE=1
XDOS.ReadGBufAXDir
XDOS.ReadGBufAXDir
jsr XDOS.ReadGBufAX
bcc XDOS.UnpackGBuf
rts
@ -269,8 +272,8 @@ XDOS.ReadGBuf lda #$01 read command.
XDOS.WriteGBuf lda #$02 write command
sta ZP.A4L pass to device handler.
lda /XDOS.GBuf general buffer.
sta ZP.CMDNUM pass to device handler.
lda /XDOS.GBuf general buffer.
XDOS.RWBlock sta ZP.BUFPTR+1 buffer high.
stz ZP.BUFPTR buffer low (always on page boundary)
@ -286,7 +289,7 @@ XDOS.CheckAndUnpackGBuf
sty h_maxent
cmp #$27
bne .9
cpy #$0D
beq XDOS.UnpackGBuf
@ -299,13 +302,13 @@ XDOS.UnpackGBuf jsr XDOS.ZPT.InitGBuf
ldx h_maxent
.1 jsr XDOS.ZPT.Unpack
dex
beq .8
jsr XDOS.ZPT.Next
bra .1
.8 clc make sure CC
rts
*--------------------------------------
@ -335,23 +338,23 @@ XDOS.PackGBuf jsr XDOS.ZPT.InitGBuf
eor #$20 to uppercase
sta (zpt),y
cpy #8 CS if MIN_VERSION to use
bcs .3
lda whichbit,y
tsb XDOS.PackGBuf.Bitmap+1
bra .4
.3 lda whichbit-8,y
tsb XDOS.PackGBuf.Bitmap
.4 lda #$80
tsb XDOS.PackGBuf.Bitmap+1
.5 dey
bne .2
ldy #$1C VERSION
lda XDOS.PackGBuf.Bitmap
sta (zpt),y
@ -359,11 +362,11 @@ XDOS.PackGBuf jsr XDOS.ZPT.InitGBuf
iny MIN_VERSION
lda XDOS.PackGBuf.Bitmap+1
sta (zpt),y
.6 jsr XDOS.ZPT.Next
dex
dex
bne .1
rts
.FIN
@ -533,9 +536,9 @@ saplevel sta ZP.BLKNUM read in next lower index block.
lda (zpt),y (high address)
sta ZP.BLKNUM+1
dec zpt+1
* jsr rfcbidx read in sapling level
lda #$01 prepare to read index block : read command
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!
sec error.
L3FD6 rts
L3FD8 sta ZP.BLKNUM+1
@ -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
@ -723,14 +726,14 @@ XDOS.FileIOPtrXCmdABlkY
lda XDOS.FCBs,y get disk block address from fcb.
sta ZP.BLKNUM block 0 not legal
bne .1
lda XDOS.FCBs+1,y high address of disk block
bne .2
lda #$0C Block = $0000, allocation error.
jsr GP.SYSDEATH doesn't return...
.1 lda XDOS.FCBs+1,y
.1 lda XDOS.FCBs+1,y
.2 sta ZP.BLKNUM+1
*--------------------------------------
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.
ora fcbptr add offset to fcbptr
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.
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.
@ -806,14 +809,14 @@ L40BD stz XDOS.FCBs,x but clean it first.
bne L40BD
ldy #0
ldx fcbptr
L40CB lda d_dev,y move ownership info.
sta XDOS.FCBs+FCB.DEVID,x note: this code depends upon the defined
inx order of both the fcb and directory entry buffer.
iny
cpy #6
cpy #6
bne L40CB
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.
inc XDOS.VCBs+VCB.OFCNT,x add 1 to # of files currently open
ldx fcbptr index to fcb.
lda XDOS.FCBs+FCB.ID,x return ref # to user.
ldy #$05

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
@ -427,7 +427,7 @@ L48C2 inx
iny
ldx #2
L48F2 lda XDOS.FCBs+FCB.MARK,y tell 'rdposn' to go to correct
sta tposll,x
eor #$80 position from incorrect place.
@ -588,14 +588,26 @@ 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
.9
XDOS.GetFileInfoEx.RTS
rts
*--------------------------------------
@ -769,7 +781,7 @@ L4A52 ldy rnptr index to last name in the chain.
L4A72 lda #MLI.E.INVPATH bad pathname error.
.HS 2C BIT ABS
L4A7F lda #MLI.E.DUPFILE
L4A7F lda #MLI.E.DUPFILE
L4A74 sec
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
@ -231,7 +231,7 @@ SLISTX.CheckLen lda ZPSListDataLen
iny
bne .1
inc FORPNT+1
inx
@ -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