mirror of
https://github.com/A2osX/A2osX.git
synced 2024-06-12 04:29:31 +00:00
Complete Rewrite #3 : many new bugs...
This commit is contained in:
parent
df462f180a
commit
11591911b9
BIN
A2OSX.BOOT.DSK
BIN
A2OSX.BOOT.DSK
Binary file not shown.
BIN
A2OSX.BUILD.HDV
BIN
A2OSX.BUILD.HDV
Binary file not shown.
BIN
A2OSX.SRC.po
Normal file
BIN
A2OSX.SRC.po
Normal file
Binary file not shown.
135
A2osX.S.GP.txt
135
A2osX.S.GP.txt
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /A2OSX.BUILD
|
PREFIX /A2OSX.SRC
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
@ -12,36 +12,16 @@ A2osX.GP.B.start
|
||||||
.PH $BE00
|
.PH $BE00
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
A2osX.GP.Start bra A2osX.SYSCALL1
|
A2osX.GP.Start bra A2osX.SYSCALL1
|
||||||
bra A2osX.MLICALL1
|
|
||||||
bra A2osX.LIBCALL1
|
bra A2osX.LIBCALL1
|
||||||
bra A2osX.SLEEP1
|
bra A2osX.SLEEP1
|
||||||
bra Kernel.MLICALL1
|
bra A2osX.MLICALL1
|
||||||
bra Kernel.DRVCALL1
|
|
||||||
bra Kernel.BINCALL1
|
|
||||||
bra Kernel.LIBCALL1
|
|
||||||
.BS A2osX.GPCODE-*
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* A2osX.SYSCALL (MAINLC to AUXLC)
|
* A2osX.SYSCALL (MAINLC to AUXLC)
|
||||||
* In:
|
* In:
|
||||||
* X = SYSfnc.Index
|
* X = SYSfnc.Index
|
||||||
* Y,A = free for Inline param
|
* Y,A = free for Inline param
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
A2osX.SYSCALL1 jsr GO.AUXLC
|
A2osX.SYSCALL1 jmp KERNEL.SYSCALL
|
||||||
jsr $E003
|
|
||||||
jsr GO.MAINLC
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
* A2osX.MLICALL (MAINLC to MAINLC)
|
|
||||||
* In:
|
|
||||||
* X = MLI Function
|
|
||||||
* A = Param Count
|
|
||||||
*--------------------------------------
|
|
||||||
A2osX.MLICALL1 stx .1
|
|
||||||
sta MLICALL.PARAMS
|
|
||||||
jsr MLI
|
|
||||||
.1 .BS 1
|
|
||||||
.DA MLICALL.PARAMS
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* LIBCALL (MAINLC to MAINLC)
|
* LIBCALL (MAINLC to MAINLC)
|
||||||
* In:
|
* In:
|
||||||
|
@ -58,49 +38,41 @@ A2osX.LIBCALL1 pha
|
||||||
pla
|
pla
|
||||||
.1 jmp $FFFF
|
.1 jmp $FFFF
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
A2osX.SLEEP1 jmp A2osX.SLEEP2
|
|
||||||
*--------------------------------------
|
|
||||||
* SLEEP (MAINLC to AUXLC)
|
* SLEEP (MAINLC to AUXLC)
|
||||||
* In:
|
* In:
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
A2osX.SLEEP1 ldy #S.PS.hCS
|
||||||
|
lda (pPs),y
|
||||||
|
>SYSCALL SYS.GetMemPtrA
|
||||||
|
>STYA A2osX.SaveCS
|
||||||
|
ldy #S.PS.PC
|
||||||
|
pla get PC LO
|
||||||
|
plx get PC HI
|
||||||
|
inc Advance PC one Byte
|
||||||
|
bne .1
|
||||||
|
inx
|
||||||
|
|
||||||
|
.1 sec
|
||||||
|
sbc A2osX.SaveCS
|
||||||
|
sta (pPs),y
|
||||||
|
iny
|
||||||
|
txa
|
||||||
|
sbc A2osX.SaveCS+1
|
||||||
|
sta (pPs),y
|
||||||
|
clc No error,
|
||||||
|
rts back to Kernel
|
||||||
|
*--------------------------------------
|
||||||
* Kernel.MLICALL (AUXLC to MAINLC)
|
* Kernel.MLICALL (AUXLC to MAINLC)
|
||||||
* In:
|
* In:
|
||||||
* X = MLI Function
|
* X = MLI Function
|
||||||
* A = Param Count
|
* A = Param Count
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
Kernel.MLICALL1 jsr GO.MAINLC
|
A2osX.MLICALL1 jsr GO.MAINLC
|
||||||
jsr A2osX.MLICALL1
|
stx .1
|
||||||
jsr GO.AUXLC
|
sta MLICALL.PARAMS
|
||||||
rts
|
jsr MLI
|
||||||
*--------------------------------------
|
.1 .BS 1
|
||||||
* Kernel.DRVCALL (AUXLC to MAINLC)
|
.DA MLICALL.PARAMS
|
||||||
* In:
|
|
||||||
* X = DRV Function Index
|
|
||||||
* Y,A = pDevContext
|
|
||||||
*--------------------------------------
|
|
||||||
Kernel.DRVCALL1 jsr GO.MAINLC
|
|
||||||
>STYA pDevContext
|
|
||||||
jsr GO.Kernel
|
|
||||||
jsr GO.AUXLC
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
* Kernel.BINCALL (AUXLC to MAINLC)
|
|
||||||
* In:
|
|
||||||
* X = BIN Function Index
|
|
||||||
* Y,A = pPsContext
|
|
||||||
*--------------------------------------
|
|
||||||
Kernel.BINCALL1 jsr GO.MAINLC
|
|
||||||
>STYA pPsContext
|
|
||||||
jsr GO.Kernel
|
|
||||||
jsr GO.AUXLC
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
* Kernel.LIBCALL (AUXLC to MAINLC)
|
|
||||||
* In:
|
|
||||||
* X = Lib Function Index
|
|
||||||
*--------------------------------------
|
|
||||||
Kernel.LIBCALL1 jsr GO.MAINLC
|
|
||||||
jsr GO.Kernel
|
|
||||||
jsr GO.AUXLC
|
jsr GO.AUXLC
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
@ -123,28 +95,27 @@ GO.SAVE.REG sta A2osX.SaveA
|
||||||
.1 stx GO.EXIT.JMP+1
|
.1 stx GO.EXIT.JMP+1
|
||||||
sty GO.EXIT.JMP+2
|
sty GO.EXIT.JMP+2
|
||||||
sei
|
sei
|
||||||
ldy R.SP
|
ldy pStack
|
||||||
bcs GO.AUXLC1
|
bcs GO.AUXLC1
|
||||||
|
|
||||||
GO.MAINLC1 tsx
|
GO.MAINLC1 tsx
|
||||||
stx A2osX.SaveSX
|
stx A2osX.SaveSX
|
||||||
stx CLRALTZP
|
|
||||||
ldx RROMBNK2
|
|
||||||
ldx A2osX.SaveSM
|
ldx A2osX.SaveSM
|
||||||
txs
|
txs
|
||||||
sty R.SP
|
stx CLRALTZP
|
||||||
|
ldx RROMBNK1
|
||||||
bra GO.EXIT
|
bra GO.EXIT
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
GO.AUXLC1 tsx
|
GO.AUXLC1 stx SETALTZP
|
||||||
|
tsx
|
||||||
stx A2osX.SaveSM
|
stx A2osX.SaveSM
|
||||||
stx SETALTZP
|
|
||||||
ldx RRAMWRAMBNK1
|
|
||||||
ldx RRAMWRAMBNK1
|
|
||||||
ldx A2osX.SaveSX
|
ldx A2osX.SaveSX
|
||||||
txs
|
txs
|
||||||
sty R.SP
|
ldx RRAMWRAMBNK1
|
||||||
|
ldx RRAMWRAMBNK1
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
GO.EXIT pha push P on stack
|
GO.EXIT sty pStack
|
||||||
|
pha push P on stack
|
||||||
ldy A2osX.SaveY
|
ldy A2osX.SaveY
|
||||||
ldx A2osX.SaveX
|
ldx A2osX.SaveX
|
||||||
lda A2osX.SaveA
|
lda A2osX.SaveA
|
||||||
|
@ -152,30 +123,12 @@ GO.EXIT pha push P on stack
|
||||||
GO.EXIT.JMP jmp $FFFF
|
GO.EXIT.JMP jmp $FFFF
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
GO.Reset jsr GO.AUXLC
|
GO.Reset jsr GO.AUXLC
|
||||||
jsr $E000
|
jmp KERNEL.COLDBOOT
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
GO.Kernel jmp (Kernel.JMP)
|
A2osX.SaveCS .BS 2
|
||||||
*--------------------------------------
|
A2osX.SaveA .BS 1
|
||||||
A2osX.SLEEP2 ldy #S.PS.hCS
|
A2osX.SaveX .BS 1
|
||||||
lda (pPsContext),y
|
A2osX.SaveY .BS 1
|
||||||
>SYSCALL SYS.GetMemPtrA
|
|
||||||
>STYA Kernel.JMP
|
|
||||||
ldy #S.PS.PC
|
|
||||||
pla get PC LO
|
|
||||||
plx get PC HI
|
|
||||||
inc Advance PC one Byte
|
|
||||||
bne .1
|
|
||||||
inx
|
|
||||||
|
|
||||||
.1 sec
|
|
||||||
sbc Kernel.JMP
|
|
||||||
sta (pPsContext),y
|
|
||||||
iny
|
|
||||||
txa
|
|
||||||
sbc Kernel.JMP+1
|
|
||||||
sta (pPsContext),y
|
|
||||||
clc No error,
|
|
||||||
rts back to Kernel
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
A2osX.GP.End .EQ *
|
A2osX.GP.End .EQ *
|
||||||
A2osX.GP.SIZE .EQ A2osX.GP.END-A2osX.GP.START
|
A2osX.GP.SIZE .EQ A2osX.GP.END-A2osX.GP.START
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /A2OSX.BUILD
|
PREFIX /A2OSX.SRC
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
@ -20,10 +20,16 @@ A2osX.QC.B.Start
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
A2osX.QC.Start .EQ *
|
A2osX.QC.Start .EQ *
|
||||||
A2osX.QC cld
|
A2osX.QC cld
|
||||||
jmp A2osX.QC.init
|
jmp A2osX.QC.Start1
|
||||||
A2osX.QC.Prefix .BS 32
|
|
||||||
*--------------------------------------
|
A2osX.QC.Prefix .BS 32
|
||||||
A2osX.QC.init bit RROMBNK1
|
|
||||||
|
A2osX.QC.Start1 sei
|
||||||
|
ldx #$FF
|
||||||
|
txs
|
||||||
|
cli
|
||||||
|
|
||||||
|
bit RROMBNK1
|
||||||
>LDYAI A2osX.QC
|
>LDYAI A2osX.QC
|
||||||
>STYA POWERUP
|
>STYA POWERUP
|
||||||
jsr SETPWRC
|
jsr SETPWRC
|
||||||
|
@ -53,11 +59,14 @@ A2osX.QC.init bit RROMBNK1
|
||||||
.DA #MLISETPREFIX
|
.DA #MLISETPREFIX
|
||||||
.DA MLISETPREFIX00
|
.DA MLISETPREFIX00
|
||||||
bcc .4
|
bcc .4
|
||||||
|
|
||||||
>LDAXI MSG.SETPREFIXKO
|
>LDAXI MSG.SETPREFIXKO
|
||||||
jsr A2osX.QC.PrintAX
|
jsr A2osX.QC.PrintAX
|
||||||
>LDAXI A2osX.QC.Prefix
|
>LDAXI A2osX.QC.Prefix
|
||||||
jsr A2osX.QC.PrintAX
|
jsr A2osX.QC.PrintAX
|
||||||
|
|
||||||
>DEBUG
|
>DEBUG
|
||||||
|
|
||||||
bra .3
|
bra .3
|
||||||
|
|
||||||
.4 >LDAXI MSG.SETPREFIXOK
|
.4 >LDAXI MSG.SETPREFIXOK
|
||||||
|
@ -69,26 +78,18 @@ A2osX.QC.init bit RROMBNK1
|
||||||
jsr A2osX.QC.KLoad
|
jsr A2osX.QC.KLoad
|
||||||
bcs .9
|
bcs .9
|
||||||
|
|
||||||
>LDAXI MSG.KLOADING.OK
|
|
||||||
jsr A2osX.QC.PrintAX
|
|
||||||
|
|
||||||
>LDYAI GO.Reset
|
>LDYAI GO.Reset
|
||||||
>STYA POWERUP
|
>STYA POWERUP
|
||||||
|
bit RROMBNK1
|
||||||
jsr SETPWRC
|
jsr SETPWRC
|
||||||
|
|
||||||
php
|
>LDAXI MSG.STAGE1OK
|
||||||
pla
|
jsr A2osX.QC.PrintAX
|
||||||
sei
|
|
||||||
tsx
|
>DEBUG
|
||||||
stx A2osX.SaveSM
|
|
||||||
stx SETALTZP
|
jmp (POWERUP)
|
||||||
ldx A2osX.SaveSX
|
|
||||||
txs
|
|
||||||
bit RRAMWRAMBNK1
|
|
||||||
bit RRAMWRAMBNK1
|
|
||||||
pha
|
|
||||||
plp
|
|
||||||
jmp $E000
|
|
||||||
.9 >LDAXI MSG.KLOADING.KO
|
.9 >LDAXI MSG.KLOADING.KO
|
||||||
jsr A2osX.QC.PrintAX
|
jsr A2osX.QC.PrintAX
|
||||||
bra *
|
bra *
|
||||||
|
@ -136,11 +137,11 @@ A2osX.QC.KLoad ldx A2osX.QC.Prefix
|
||||||
lda RRAMWRAMBNK1
|
lda RRAMWRAMBNK1
|
||||||
lda RRAMWRAMBNK1
|
lda RRAMWRAMBNK1
|
||||||
|
|
||||||
>LDYAI MLIREAD00.ADDR+$1F00
|
>LDYAI MLIREAD00.ADDR+$2F00
|
||||||
>STYA TmpPtr1
|
>STYA TmpPtr1
|
||||||
>LDYAI $E000+$1F00
|
>LDYAI $D000+$2F00
|
||||||
>STYA TmpPtr2
|
>STYA TmpPtr2
|
||||||
ldx #$20
|
ldx #$30
|
||||||
ldy #$F9 do not trash NMI,BRK,IRQ Vectors
|
ldy #$F9 do not trash NMI,BRK,IRQ Vectors
|
||||||
|
|
||||||
.3 lda (TmpPtr1),y
|
.3 lda (TmpPtr1),y
|
||||||
|
@ -186,7 +187,7 @@ MLIOPEN00 .DA #3
|
||||||
MLIREAD00 .DA #4
|
MLIREAD00 .DA #4
|
||||||
.BS 1
|
.BS 1
|
||||||
.DA MLIREAD00.ADDR
|
.DA MLIREAD00.ADDR
|
||||||
.DA $1FFA
|
.DA $2FFA
|
||||||
.BS 2
|
.BS 2
|
||||||
MLICLOSE00 .DA #1
|
MLICLOSE00 .DA #1
|
||||||
.BS 1
|
.BS 1
|
||||||
|
@ -197,7 +198,6 @@ MSG.STAGE1 >PSTRING "A2osX[Stage1]:Init"
|
||||||
MSG.SETPREFIXOK >PSTRING "Set Prefix OK"
|
MSG.SETPREFIXOK >PSTRING "Set Prefix OK"
|
||||||
MSG.SETPREFIXKO >PSTRING "Insert Vol:"
|
MSG.SETPREFIXKO >PSTRING "Insert Vol:"
|
||||||
MSG.KLOADING >PSTRING "Loading Kernel..."
|
MSG.KLOADING >PSTRING "Loading Kernel..."
|
||||||
MSG.KLOADING.OK >PSTRING "OK"
|
|
||||||
MSG.KLOADING.KO >PSTRING "Error While Loading Kernel."
|
MSG.KLOADING.KO >PSTRING "Error While Loading Kernel."
|
||||||
MSG.STAGE1OK >PSTRING "A2osX[Stage1]:Complete."
|
MSG.STAGE1OK >PSTRING "A2osX[Stage1]:Complete."
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /A2OSX.BUILD
|
PREFIX /A2OSX.SRC
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
63
A2osX.S.txt
63
A2osX.S.txt
|
@ -1,15 +1,17 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /A2OSX.BUILD
|
PREFIX /A2OSX.SRC
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
.LIST OFF
|
.LIST OFF
|
||||||
.OP 65C02
|
.OP 65C02
|
||||||
.OR $2000
|
.OR $2000
|
||||||
.TF A
|
.TF /A2OSX.BOOT/A
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.INB INC/MACROS.I
|
.INB INC/MACROS.I
|
||||||
.INB INC/A2OSX.I
|
.INB INC/A2OSX.I
|
||||||
|
.INB INC/A2OSX.API.I
|
||||||
|
.INB INC/KERNEL.I
|
||||||
.INB INC/IO.I
|
.INB INC/IO.I
|
||||||
.INB INC/MONITOR.I
|
.INB INC/MONITOR.I
|
||||||
.INB INC/PRODOS.I
|
.INB INC/PRODOS.I
|
||||||
|
@ -27,11 +29,15 @@ A2osX.ReadBuff .EQ $6800 512 Buffer for MLIREAD01
|
||||||
Boot.Prefix .EQ $6A00 MLI.MAXPATH
|
Boot.Prefix .EQ $6A00 MLI.MAXPATH
|
||||||
KM.Filename .EQ $6A80 MLI.MAXPATH
|
KM.Filename .EQ $6A80 MLI.MAXPATH
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
Z80STACK .EQ $0FFF (0FFFFh) Down to $0F00
|
||||||
|
Z80JMP .EQ $1000
|
||||||
|
*--------------------------------------
|
||||||
A2osX.Start .EQ *
|
A2osX.Start .EQ *
|
||||||
.PH A2osX.RelocAddr
|
.PH A2osX.RelocAddr
|
||||||
A2osX.Init0 ldx #$FF init 6502 stack to highest
|
A2osX.Init0
|
||||||
|
|
||||||
|
ldx #$FF init 6502 stack to highest
|
||||||
txs
|
txs
|
||||||
stx A2osX.SaveSM
|
|
||||||
|
|
||||||
>LDYAI A2osX.Start
|
>LDYAI A2osX.Start
|
||||||
>STYA TmpPtr1
|
>STYA TmpPtr1
|
||||||
|
@ -50,16 +56,14 @@ A2osX.Init0 ldx #$FF init 6502 stack to highest
|
||||||
inc TmpPtr2+1
|
inc TmpPtr2+1
|
||||||
dex
|
dex
|
||||||
bne .1
|
bne .1
|
||||||
|
|
||||||
jmp A2osX.Init1
|
jmp A2osX.Init1
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
A2osX.Init1 jsr HOME
|
A2osX.Init1 bit RROMBNK1
|
||||||
|
jsr HOME
|
||||||
>LDAXI MSG.STAGE0
|
>LDAXI MSG.STAGE0
|
||||||
jsr PrintCStrAX
|
jsr PrintCStrAX
|
||||||
|
|
||||||
>LDYAI D.STACKSEG
|
|
||||||
>STYA R.SP init Soft Stack
|
|
||||||
|
|
||||||
>LDAXI MSG.SYSMEM
|
>LDAXI MSG.SYSMEM
|
||||||
jsr PrintCStrAX
|
jsr PrintCStrAX
|
||||||
|
|
||||||
|
@ -78,7 +82,10 @@ A2osX.Init1 jsr HOME
|
||||||
>LDAXI MSG.CPU
|
>LDAXI MSG.CPU
|
||||||
jsr PrintCStrAX
|
jsr PrintCStrAX
|
||||||
jsr Init6502 Y = CPU type
|
jsr Init6502 Y = CPU type
|
||||||
sty A2osX.CPUTYPE
|
tya
|
||||||
|
ora #$60
|
||||||
|
sta A2osX.CPUTYPE
|
||||||
|
|
||||||
lda MSG.CPUTYPEH,y
|
lda MSG.CPUTYPEH,y
|
||||||
tax
|
tax
|
||||||
lda MSG.CPUTYPEL,y
|
lda MSG.CPUTYPEL,y
|
||||||
|
@ -110,17 +117,20 @@ A2osX.Prefix >LDAXI MSG.BOOTPREFIX
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
A2osX.RamDrv >LDAXI MSG.RAMDRV
|
A2osX.RamDrv >LDAXI MSG.RAMDRV
|
||||||
jsr PrintCStrAX
|
jsr PrintCStrAX
|
||||||
|
|
||||||
jsr DisableRamDRV
|
jsr DisableRamDRV
|
||||||
bcc .2
|
bcc .2
|
||||||
|
|
||||||
tax
|
tax
|
||||||
beq .1
|
bne .1
|
||||||
>LDAXI MSG.RAMDRV.KO1
|
>LDAXI MSG.RAMDRV.KO0
|
||||||
jsr PrintCStrAX
|
jsr PrintCStrAX
|
||||||
bra A2osX.Z80
|
bra A2osX.Z80
|
||||||
|
|
||||||
.1 >LDAXI MSG.RAMDRV.KO0
|
.1 >LDAXI MSG.RAMDRV.KO1
|
||||||
jsr PrintCStrAX
|
jsr PrintCStrAX
|
||||||
bra A2osX.Z80
|
bra A2osX.Z80
|
||||||
|
|
||||||
.2 >LDAXI MSG.RAMDRV.OK
|
.2 >LDAXI MSG.RAMDRV.OK
|
||||||
jsr PrintCStrAX
|
jsr PrintCStrAX
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
@ -137,8 +147,6 @@ A2osX.Z80 >LDAXI MSG.Z80
|
||||||
.1 >LDAXI MSG.Z80.KO
|
.1 >LDAXI MSG.Z80.KO
|
||||||
jsr PrintCStrAX
|
jsr PrintCStrAX
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* WARNING :
|
|
||||||
*--------------------------------------
|
|
||||||
A2osX.SetupQC lda RRAMWRAMBNK2
|
A2osX.SetupQC lda RRAMWRAMBNK2
|
||||||
lda RRAMWRAMBNK2
|
lda RRAMWRAMBNK2
|
||||||
|
|
||||||
|
@ -162,7 +170,7 @@ A2osX.MLIQuit >LDAXI MSG.STAGE0OK
|
||||||
jsr PrintCStrAX
|
jsr PrintCStrAX
|
||||||
|
|
||||||
>DEBUG
|
>DEBUG
|
||||||
|
|
||||||
jsr MLI
|
jsr MLI
|
||||||
.DA #MLIQUIT
|
.DA #MLIQUIT
|
||||||
.DA MLIQUIT01
|
.DA MLIQUIT01
|
||||||
|
@ -213,24 +221,30 @@ DisableRamDRV php
|
||||||
beq .9 S3D2=NODEV, nothing to do
|
beq .9 S3D2=NODEV, nothing to do
|
||||||
|
|
||||||
.1 ldx DEVCNT
|
.1 ldx DEVCNT
|
||||||
|
|
||||||
.2 lda DEVLST,x LOOKING FOR $BF, $BB, $B7, $B3
|
.2 lda DEVLST,x LOOKING FOR $BF, $BB, $B7, $B3
|
||||||
and #$F3
|
and #$F3
|
||||||
cmp #$B3
|
cmp #$B3
|
||||||
beq .3
|
beq .3
|
||||||
|
|
||||||
dex
|
dex
|
||||||
bpl .2
|
bpl .2
|
||||||
|
|
||||||
plp
|
plp
|
||||||
lda #1 No device found, exit with error
|
lda #1 No device found, exit with error
|
||||||
sec
|
sec
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.3 ldx #0
|
.3 cpx DEVCNT
|
||||||
|
beq .5
|
||||||
|
|
||||||
.4 lda DEVLST+1,x
|
.4 lda DEVLST+1,x
|
||||||
sta DEVLST,x
|
sta DEVLST,x
|
||||||
inx
|
inx
|
||||||
cpx DEVCNT
|
cpx DEVCNT
|
||||||
bne .4
|
bne .4
|
||||||
|
|
||||||
|
.5 ldx DEVCNT
|
||||||
stz DEVLST,x
|
stz DEVLST,x
|
||||||
dec DEVCNT
|
dec DEVCNT
|
||||||
|
|
||||||
|
@ -239,6 +253,10 @@ DisableRamDRV php
|
||||||
lda DEVPTRS0D1+1
|
lda DEVPTRS0D1+1
|
||||||
sta DEVPTRS3D2+1
|
sta DEVPTRS3D2+1
|
||||||
plp
|
plp
|
||||||
|
|
||||||
|
jsr MLI
|
||||||
|
.DA #MLIONLINE
|
||||||
|
.DA MLIONLINE01
|
||||||
clc Success!!
|
clc Success!!
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
@ -247,7 +265,10 @@ DisableRamDRV php
|
||||||
sec
|
sec
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
InitZ80 ldx #Z80Code.Size
|
InitZ80 sec
|
||||||
|
rts
|
||||||
|
|
||||||
|
ldx #Z80Code.Size
|
||||||
.1 lda Z80Code.Start-1,x
|
.1 lda Z80Code.Start-1,x
|
||||||
sta $1000-1,x 00000H for Z80
|
sta $1000-1,x 00000H for Z80
|
||||||
dex
|
dex
|
||||||
|
@ -435,7 +456,7 @@ MSG.Z80 >CSTRING "Detecting Z80 CPU..."
|
||||||
MSG.Z80.OK >CSTRING "Detected In Slot %d.\n"
|
MSG.Z80.OK >CSTRING "Detected In Slot %d.\n"
|
||||||
MSG.Z80.KO >CSTRING "Not Detected.\n"
|
MSG.Z80.KO >CSTRING "Not Detected.\n"
|
||||||
MSG.KMENUM >CSTRING "Looking For Kernel Modules...\n"
|
MSG.KMENUM >CSTRING "Looking For Kernel Modules...\n"
|
||||||
MSG.KMLOAD >CSTRING "Loading KM : "
|
MSG.KMLOAD >CSTRING "\nLoading KM : "
|
||||||
MSG.STAGE0OK >CSTRING "A2osX[Stage0]:Complete.\n"
|
MSG.STAGE0OK >CSTRING "A2osX[Stage0]:Complete.\n"
|
||||||
MSG.CPUTYPEL .DA #MSG.6502
|
MSG.CPUTYPEL .DA #MSG.6502
|
||||||
.DA #MSG.65C02
|
.DA #MSG.65C02
|
||||||
|
@ -452,6 +473,10 @@ MSG.65C816 >CSTRING "65C816.\n"
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
MLIGETPREFIX01 .DA #1
|
MLIGETPREFIX01 .DA #1
|
||||||
.DA Boot.Prefix
|
.DA Boot.Prefix
|
||||||
|
MLIONLINE01 .DA #2
|
||||||
|
.DA #0
|
||||||
|
.DA MLIONLINE01BUF
|
||||||
|
MLIONLINE01BUF .BS 256
|
||||||
MLIOPEN01 .DA #3 For DIR listing
|
MLIOPEN01 .DA #3 For DIR listing
|
||||||
.DA Boot.Prefix
|
.DA Boot.Prefix
|
||||||
.DA A2osX.OpenBuff1
|
.DA A2osX.OpenBuff1
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /A2OSX.BUILD
|
PREFIX /A2OSX.BOOT
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
@ -8,15 +8,16 @@ SET DRV=%A2OSX%DRV/
|
||||||
SET ETC=%A2OSX%ETC/
|
SET ETC=%A2OSX%ETC/
|
||||||
SET LIB=%A2OSX%LIB/
|
SET LIB=%A2OSX%LIB/
|
||||||
LOAD CONSOLE.DRV
|
LOAD CONSOLE.DRV
|
||||||
EXEC GETTY KBD CON SHELL
|
EXEC GETTY KBD CON LOGIN
|
||||||
*LOAD SSC.DRV 9600 N 8 1
|
*LOAD SSC.DRV 9600 N 8 1 X
|
||||||
*EXEC GETTY COM2 COM2 SHELL
|
*EXEC GETTY COM2 COM2 LOGIN
|
||||||
*LOAD PPIC.DRV
|
*LOAD PPIC.DRV
|
||||||
LOAD UTHERNET.DRV 000E3A123456
|
LOAD UTHERNET.DRV 000E3A123456
|
||||||
EXEC TCPIP ETH3
|
EXEC TCPIP ETH3
|
||||||
EXEC DHCPCLNT
|
EXEC DHCPCLNT
|
||||||
*EXEC TELNETD
|
*EXEC TELNETD
|
||||||
*MOUNT TFTP 192.168.1.5:/AO2SX /TFTP
|
*MOUNT TFTP 192.168.1.5:/AO2SX /MNT/A2OSX
|
||||||
|
*MOUNT CIFS 192.168.1.5:/MSSHARE /MNT/MSSHARE
|
||||||
LOAD DHGR.DRV
|
LOAD DHGR.DRV
|
||||||
LOAD MOUSE.DRV
|
LOAD MOUSE.DRV
|
||||||
EXEC GUI
|
EXEC GUI
|
||||||
|
|
|
@ -1,15 +1,16 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /A2OSX.BUILD
|
PREFIX /A2OSX.SRC
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
.LIST OFF
|
.LIST OFF
|
||||||
.OP 65C02
|
.OP 65C02
|
||||||
.OR $2000
|
.OR $2000
|
||||||
.TF BIN/ARP
|
.TF /A2OSX.BOOT/BIN/ARP
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.INB INC/MACROS.I
|
.INB INC/MACROS.I
|
||||||
.INB INC/A2OSX.I
|
.INB INC/A2OSX.I
|
||||||
|
.INB INC/A2OSX.API.I
|
||||||
.INB INC/KERNEL.I
|
.INB INC/KERNEL.I
|
||||||
.INB INC/LIBSTR.I
|
.INB INC/LIBSTR.I
|
||||||
.INB INC/LIBTCPIP.I
|
.INB INC/LIBTCPIP.I
|
||||||
|
@ -18,20 +19,23 @@ ARP.TIMEOUT .EQ 50 50*100ms = 5 sec.
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
ZPPTR1 .EQ ZPBIN
|
ZPPTR1 .EQ ZPBIN
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* Main entry point
|
* File Header (16 Bytes)
|
||||||
*--------------------------------------
|
|
||||||
* Code signature and INIT table
|
|
||||||
*--------------------------------------
|
|
||||||
* CLD $D8
|
|
||||||
* JMP (*,x) $7C
|
|
||||||
* #JMPTABLE
|
|
||||||
* /JMPTABLE
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.START cld
|
CS.START cld
|
||||||
jmp (.1,x)
|
jmp (.1,x)
|
||||||
|
.DA #$61 6502,Level 1 (65c02)
|
||||||
|
.DA #1 BIN Layout Version 1
|
||||||
|
.DA 0
|
||||||
|
.DA CS.END-CS.START
|
||||||
|
.DA DS.END-DS.START Data Segment to Allocate
|
||||||
|
.DA 0
|
||||||
|
.DA 0
|
||||||
|
*--------------------------------------
|
||||||
|
* Relocation Table
|
||||||
|
*--------------------------------------
|
||||||
.1 .DA CS.INIT
|
.1 .DA CS.INIT
|
||||||
.DA CS.RUN
|
.DA CS.RUN
|
||||||
.DA CS.EVENT
|
.DA CS.DOEVENT
|
||||||
.DA CS.QUIT
|
.DA CS.QUIT
|
||||||
L.LIBSTR .DA LIBSTR
|
L.LIBSTR .DA LIBSTR
|
||||||
L.LIBTCPIP .DA LIBTCPIP
|
L.LIBTCPIP .DA LIBTCPIP
|
||||||
|
@ -42,17 +46,17 @@ L.MSG0 .DA MSG0
|
||||||
L.MSG1 .DA MSG1
|
L.MSG1 .DA MSG1
|
||||||
L.MSG2 .DA MSG2
|
L.MSG2 .DA MSG2
|
||||||
.DA 0
|
.DA 0
|
||||||
.DA CS.END-CS.START Code Length To Relocate
|
|
||||||
.DA DS.END-DS.START Data Segment to Allocate
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.INIT >LIBLOADP L.LIBSTR
|
CS.INIT >LDYA L.LIBSTR
|
||||||
|
>LOADLIBYA
|
||||||
sta hLIBSTR
|
sta hLIBSTR
|
||||||
|
|
||||||
>LIBLOADP L.LIBTCPIP
|
>LDYA L.LIBTCPIP
|
||||||
|
>LOADLIBYA
|
||||||
sta hLIBTCPIP
|
sta hLIBTCPIP
|
||||||
|
|
||||||
ldy #S.PS.hARGS
|
ldy #S.PS.hARGS
|
||||||
lda (pPsContext),y
|
lda (pPs),y
|
||||||
beq CS.INIT.CACHE
|
beq CS.INIT.CACHE
|
||||||
|
|
||||||
pha
|
pha
|
||||||
|
@ -66,9 +70,9 @@ CS.INIT >LIBLOADP L.LIBSTR
|
||||||
|
|
||||||
stz bCTRLC
|
stz bCTRLC
|
||||||
|
|
||||||
lda (pPsContext)
|
lda (pPs)
|
||||||
ora #S.PS.F.EVENT Now accept events
|
ora #S.PS.F.EVENT Now accept events
|
||||||
sta (pPsContext)
|
sta (pPs)
|
||||||
|
|
||||||
rts CC,Give back control to CS.RUN
|
rts CC,Give back control to CS.RUN
|
||||||
|
|
||||||
|
@ -152,8 +156,7 @@ CS.RUN lda #ARP.TIMEOUT
|
||||||
.9 sec
|
.9 sec
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.EVENT >PULLW pEvent
|
CS.DOEVENT lda (pEvent)
|
||||||
lda (pEvent)
|
|
||||||
and #S.EVT.F.TIMER is it a TIMER event?
|
and #S.EVT.F.TIMER is it a TIMER event?
|
||||||
beq .1 no....
|
beq .1 no....
|
||||||
|
|
||||||
|
@ -170,7 +173,7 @@ CS.EVENT >PULLW pEvent
|
||||||
ldy #S.EVT.hDEV is Event from active IN device?
|
ldy #S.EVT.hDEV is Event from active IN device?
|
||||||
lda (pEvent),y
|
lda (pEvent),y
|
||||||
ldy #S.PS.hINDEV
|
ldy #S.PS.hINDEV
|
||||||
cmp (pPsContext),y
|
cmp (pPs),y
|
||||||
bne .9
|
bne .9
|
||||||
|
|
||||||
ldy #S.EVT.DATAHI is it an O or SAPPLE key ?
|
ldy #S.EVT.DATAHI is it an O or SAPPLE key ?
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /A2OSX.BUILD
|
PREFIX /A2OSX.SRC
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /A2OSX.BUILD
|
PREFIX /A2OSX.SRC
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /A2OSX.BUILD
|
PREFIX /A2OSX.SRC
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
141
BIN/LS.S.txt
141
BIN/LS.S.txt
|
@ -1,33 +1,37 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /A2OSX.BUILD
|
PREFIX /A2OSX.SRC
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
.LIST OFF
|
.LIST OFF
|
||||||
.OP 65C02
|
.OP 65C02
|
||||||
.OR $2000
|
.OR $2000
|
||||||
.TF BIN/LS
|
.TF /A2OSX.BOOT/BIN/LS
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.INB INC/MACROS.I
|
.INB INC/MACROS.I
|
||||||
.INB INC/A2OSX.I
|
.INB INC/A2OSX.I
|
||||||
|
.INB INC/A2OSX.API.I
|
||||||
.INB INC/LIBSTR.I
|
.INB INC/LIBSTR.I
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* Main entry point
|
* File Header (16 Bytes)
|
||||||
*--------------------------------------
|
|
||||||
* Code signature and INIT table
|
|
||||||
*--------------------------------------
|
|
||||||
* CLD $D8
|
|
||||||
* JMP (*,x) $7C
|
|
||||||
* #JMPTABLE
|
|
||||||
* /JMPTABLE
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.START cld
|
CS.START cld
|
||||||
jmp (.1,x)
|
jmp (.1,x)
|
||||||
|
.DA #$61 6502,Level 1 (65c02)
|
||||||
|
.DA #1 BIN Layout Version 1
|
||||||
|
.DA 0
|
||||||
|
.DA CS.END-CS.START Code Length To Relocate
|
||||||
|
.DA DS.END-DS.START Data Segment to Allocate
|
||||||
|
.DA 0
|
||||||
|
.DA 0
|
||||||
|
*--------------------------------------
|
||||||
|
* Relocation Table
|
||||||
|
*--------------------------------------
|
||||||
.1 .DA CS.INIT
|
.1 .DA CS.INIT
|
||||||
.DA CS.RUN
|
.DA CS.RUN
|
||||||
.DA CS.DOEVENT
|
.DA CS.DOEVENT
|
||||||
.DA CS.QUIT
|
.DA CS.QUIT
|
||||||
L.LIB.LIBSTR .DA LIB.LIBSTR
|
L.LIBSTR .DA LIBSTR
|
||||||
L.MSG.VOL.HEADER .DA MSG.VOL.HEADER
|
L.MSG.VOL.HEADER .DA MSG.VOL.HEADER
|
||||||
L.MSG.DIR.HEADER .DA MSG.DIR.HEADER
|
L.MSG.DIR.HEADER .DA MSG.DIR.HEADER
|
||||||
L.MSG.VOL .DA MSG.VOL
|
L.MSG.VOL .DA MSG.VOL
|
||||||
|
@ -37,21 +41,21 @@ L.MSG.VOL.END .DA MSG.VOL.END
|
||||||
L.MSG.DIR.END .DA MSG.DIR.END
|
L.MSG.DIR.END .DA MSG.DIR.END
|
||||||
L.PRODOS.FT.TXT .DA PRODOS.FT.TXT
|
L.PRODOS.FT.TXT .DA PRODOS.FT.TXT
|
||||||
.DA 0
|
.DA 0
|
||||||
.DA CS.END-CS.START Code Length To Relocate
|
|
||||||
.DA DS.END-DS.START Data Segment to Allocate
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.INIT >LIBLOADP L.LIB.LIBSTR
|
CS.INIT >LDYA L.LIBSTR
|
||||||
|
>LOADLIBYA
|
||||||
sta hLIBSTR
|
sta hLIBSTR
|
||||||
stz hDIRPATH
|
|
||||||
stz hS.LISTDIR
|
lda #0
|
||||||
stz hVOLHEADER
|
ldy #DS.END-DS.START-1
|
||||||
stz hDIRHEADER
|
.11 sta (pData),y
|
||||||
stz bSTOP
|
dey
|
||||||
stz bCANCEL
|
bpl .11
|
||||||
|
|
||||||
ldy #S.PS.hARGS
|
ldy #S.PS.hARGS
|
||||||
lda (pPsContext),y
|
lda (pPs),y
|
||||||
beq .1
|
beq .1
|
||||||
|
|
||||||
>SYSCALL SYS.GetMemPtrA
|
>SYSCALL SYS.GetMemPtrA
|
||||||
>STYA ZPQuickPtr1
|
>STYA ZPQuickPtr1
|
||||||
lda (ZPQuickPtr1)
|
lda (ZPQuickPtr1)
|
||||||
|
@ -60,50 +64,52 @@ CS.INIT >LIBLOADP L.LIB.LIBSTR
|
||||||
lda (ZPQuickPtr1),y
|
lda (ZPQuickPtr1),y
|
||||||
cmp #'/'
|
cmp #'/'
|
||||||
bne .10
|
bne .10
|
||||||
|
|
||||||
ldy #S.PS.hARGS
|
ldy #S.PS.hARGS
|
||||||
bra .2
|
lda (pPs),y
|
||||||
|
bra .3
|
||||||
|
|
||||||
.10 ldy #S.PS.hARGS
|
.10 ldy #S.PS.hARGS
|
||||||
lda (pPsContext),y
|
lda (pPs),y
|
||||||
>PUSHA
|
>PUSHA
|
||||||
ldy #S.PS.hPREFIX
|
ldy #S.PS.hPREFIX
|
||||||
lda (pPsContext),y
|
lda (pPs),y
|
||||||
>PUSHA
|
>PUSHA
|
||||||
>SYSCALL SYS.PStrCat
|
>SYSCALL SYS.PStrCat
|
||||||
sta hDIRPATH
|
sta hDIRPATH
|
||||||
bra .3
|
bra .3
|
||||||
|
|
||||||
.1 ldy #S.PS.hPREFIX
|
.1 ldy #S.PS.hPREFIX
|
||||||
.2 lda (pPsContext),y
|
lda (pPs),y
|
||||||
|
|
||||||
.3 >SYSCALL SYS.ListDirInitA
|
.3 >SYSCALL SYS.ListDirInitA
|
||||||
bcs .98
|
bcs .9
|
||||||
sta hS.LISTDIR
|
ldy #hS.LISTDIR
|
||||||
|
sta (pData),y
|
||||||
|
|
||||||
lda (pPsContext)
|
lda (pPs)
|
||||||
ora #S.PS.F.EVENT Now accept events
|
ora #S.PS.F.EVENT Now accept events
|
||||||
sta (pPsContext)
|
sta (pPs)
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.98 pha
|
.9 sec
|
||||||
lda hLIBSTR
|
|
||||||
>SYSCALL SYS.FreeMemA
|
|
||||||
pla
|
|
||||||
sec
|
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.RUN lda bCANCEL
|
CS.RUN ldy #bCANCEL
|
||||||
|
lda (pData),y
|
||||||
beq .1
|
beq .1
|
||||||
sec
|
sec
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.1 lda bSTOP
|
.1 ldy #bSTOP
|
||||||
|
lda (pData),y
|
||||||
beq .2
|
beq .2
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.2 lda hS.LISTDIR
|
.2 ldy #hS.LISTDIR
|
||||||
|
lda (pData),y
|
||||||
>SYSCALL SYS.ListDirNextA
|
>SYSCALL SYS.ListDirNextA
|
||||||
bcc .3
|
bcc .3
|
||||||
|
|
||||||
|
@ -124,7 +130,8 @@ CS.RUN lda bCANCEL
|
||||||
bne .31
|
bne .31
|
||||||
|
|
||||||
pla
|
pla
|
||||||
sta hVOLHEADER
|
ldy #hVOLHEADER
|
||||||
|
sta (pData),y
|
||||||
>PUSHW ZPQuickPtr1
|
>PUSHW ZPQuickPtr1
|
||||||
>PUSHW L.MSG.VOL.HEADER
|
>PUSHW L.MSG.VOL.HEADER
|
||||||
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
||||||
|
@ -135,8 +142,9 @@ CS.RUN lda bCANCEL
|
||||||
bne .4
|
bne .4
|
||||||
|
|
||||||
pla
|
pla
|
||||||
sta hDIRHEADER
|
ldy #hDIRHEADER
|
||||||
|
sta (pData),y
|
||||||
|
|
||||||
>PUSHW ZPQuickPtr1
|
>PUSHW ZPQuickPtr1
|
||||||
>PUSHW L.MSG.DIR.HEADER
|
>PUSHW L.MSG.DIR.HEADER
|
||||||
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
||||||
|
@ -145,6 +153,7 @@ CS.RUN lda bCANCEL
|
||||||
|
|
||||||
.4 cmp #$D0 Directory ?
|
.4 cmp #$D0 Directory ?
|
||||||
bne .5
|
bne .5
|
||||||
|
|
||||||
jsr Push.Dates
|
jsr Push.Dates
|
||||||
jsr Push.Dir
|
jsr Push.Dir
|
||||||
>PUSHW L.MSG.DIR
|
>PUSHW L.MSG.DIR
|
||||||
|
@ -263,13 +272,14 @@ Push.Dates ldy #$24 get modification time
|
||||||
>PUSHA
|
>PUSHA
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
Push.Footer lda hVOLHEADER
|
Push.Footer ldy #hVOLHEADER
|
||||||
|
lda (pData),y
|
||||||
beq .20
|
beq .20
|
||||||
|
|
||||||
>SYSCALL SYS.GetMemPtrA
|
>SYSCALL SYS.GetMemPtrA
|
||||||
>STYA ZPQuickPtr1
|
>STYA ZPQuickPtr1
|
||||||
|
|
||||||
ldy #22 file_count
|
ldy #$22 file_count
|
||||||
lda (ZPQuickPtr1),y
|
lda (ZPQuickPtr1),y
|
||||||
>PUSHA
|
>PUSHA
|
||||||
dey
|
dey
|
||||||
|
@ -279,13 +289,14 @@ Push.Footer lda hVOLHEADER
|
||||||
>PUSHW L.MSG.VOL.END
|
>PUSHW L.MSG.VOL.END
|
||||||
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
||||||
|
|
||||||
.20 lda hDIRHEADER
|
.20 ldy #hDIRHEADER
|
||||||
|
lda (pData),y
|
||||||
beq .21
|
beq .21
|
||||||
|
|
||||||
>SYSCALL SYS.GetMemPtrA
|
>SYSCALL SYS.GetMemPtrA
|
||||||
>STYA ZPQuickPtr1
|
>STYA ZPQuickPtr1
|
||||||
|
|
||||||
ldy #22 file_count
|
ldy #$22 file_count
|
||||||
lda (ZPQuickPtr1),y
|
lda (ZPQuickPtr1),y
|
||||||
>PUSHA
|
>PUSHA
|
||||||
dey
|
dey
|
||||||
|
@ -301,47 +312,60 @@ Push.Footer lda hVOLHEADER
|
||||||
CS.DOEVENT ldy #S.EVT.hDEV is Event from active IN device?
|
CS.DOEVENT ldy #S.EVT.hDEV is Event from active IN device?
|
||||||
lda (pEvent),y
|
lda (pEvent),y
|
||||||
ldy #S.PS.hINDEV
|
ldy #S.PS.hINDEV
|
||||||
cmp (pPsContext),y
|
cmp (pPs),y
|
||||||
bne .9
|
bne .9
|
||||||
|
|
||||||
lda (pEvent)
|
lda (pEvent)
|
||||||
and #S.EVT.F.KEY is it a KEY event?
|
and #S.EVT.F.KEY is it a KEY event?
|
||||||
beq .9
|
beq .9
|
||||||
|
|
||||||
ldy #S.EVT.DATAHI is it an O or SAPPLE key ?
|
ldy #S.EVT.DATAHI is it an O or SAPPLE key ?
|
||||||
lda (pEvent),y
|
lda (pEvent),y
|
||||||
bne .9
|
bne .9
|
||||||
|
|
||||||
ldy #S.EVT.DATALO
|
ldy #S.EVT.DATALO
|
||||||
lda (pEvent),y
|
lda (pEvent),y
|
||||||
cmp #$03 Ctrl-C
|
cmp #$03 Ctrl-C
|
||||||
bne .1
|
bne .1
|
||||||
|
|
||||||
lda #$FF
|
lda #$FF
|
||||||
sta bCANCEL
|
ldy #bCANCEL
|
||||||
|
sta (pData),y
|
||||||
bra .8
|
bra .8
|
||||||
|
|
||||||
.1 cmp #$13 Ctrl-S
|
.1 cmp #$13 Ctrl-S
|
||||||
bne .8
|
bne .8
|
||||||
lda bSTOP
|
|
||||||
|
ldy #bSTOP
|
||||||
|
lda (pData),y
|
||||||
eor #$FF
|
eor #$FF
|
||||||
sta bSTOP
|
sta (pData),y
|
||||||
.8 >SYSCALL SYS.DestroyEvent
|
|
||||||
clc
|
.8 clc
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.9 sec
|
.9 sec
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.QUIT lda hVOLHEADER
|
CS.QUIT ldy #hVOLHEADER
|
||||||
|
lda (pData),y
|
||||||
beq .1
|
beq .1
|
||||||
|
|
||||||
>SYSCALL SYS.FreeMemA
|
>SYSCALL SYS.FreeMemA
|
||||||
|
|
||||||
.1 lda hDIRHEADER
|
.1 ldy #hDIRHEADER
|
||||||
|
lda (pData),y
|
||||||
beq .2
|
beq .2
|
||||||
|
|
||||||
>SYSCALL SYS.FreeMemA
|
>SYSCALL SYS.FreeMemA
|
||||||
|
|
||||||
.2 lda hS.LISTDIR
|
.2 ldy #hS.LISTDIR
|
||||||
|
lda (pData),y
|
||||||
|
|
||||||
>SYSCALL SYS.ListDirCloseA
|
>SYSCALL SYS.ListDirCloseA
|
||||||
|
|
||||||
lda hDIRPATH
|
ldy #hDIRPATH
|
||||||
|
lda (pData),y
|
||||||
beq .3
|
beq .3
|
||||||
>SYSCALL SYS.FreeMemA
|
>SYSCALL SYS.FreeMemA
|
||||||
|
|
||||||
|
@ -352,7 +376,7 @@ CS.QUIT lda hVOLHEADER
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.END
|
CS.END
|
||||||
LIB.LIBSTR >PSTRING "libstr.o"
|
LIBSTR >PSTRING "libstr.o"
|
||||||
MSG.VOL.HEADER >CSTRING "Volume Listing Of %S\n"
|
MSG.VOL.HEADER >CSTRING "Volume Listing Of %S\n"
|
||||||
MSG.DIR.HEADER >CSTRING "Directory Listing Of %S\n"
|
MSG.DIR.HEADER >CSTRING "Directory Listing Of %S\n"
|
||||||
MSG.VOL >CSTRING "/%S\n"
|
MSG.VOL >CSTRING "/%S\n"
|
||||||
|
@ -373,9 +397,11 @@ TE2 >PSTRING "ATK"
|
||||||
TFF >PSTRING "SYS"
|
TFF >PSTRING "SYS"
|
||||||
PRODOS.FT.DFLT >PSTRING "$ "
|
PRODOS.FT.DFLT >PSTRING "$ "
|
||||||
HEXDIGIT .AS '0123456789ABCDEF'
|
HEXDIGIT .AS '0123456789ABCDEF'
|
||||||
*--------------------------------------
|
|
||||||
DS.START
|
|
||||||
hLIBSTR .BS 1
|
hLIBSTR .BS 1
|
||||||
|
*--------------------------------------
|
||||||
|
.DUMMY
|
||||||
|
.OR 0
|
||||||
|
DS.START
|
||||||
hDIRPATH .BS 1
|
hDIRPATH .BS 1
|
||||||
hS.LISTDIR .BS 1
|
hS.LISTDIR .BS 1
|
||||||
hVOLHEADER .BS 1
|
hVOLHEADER .BS 1
|
||||||
|
@ -383,6 +409,7 @@ hDIRHEADER .BS 1
|
||||||
bSTOP .BS 1
|
bSTOP .BS 1
|
||||||
bCANCEL .BS 1
|
bCANCEL .BS 1
|
||||||
DS.END
|
DS.END
|
||||||
|
.ED
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
MAN
|
MAN
|
||||||
SAVE BIN/LS.S
|
SAVE BIN/LS.S
|
||||||
|
|
110
BIN/LSDEV.S.txt
110
BIN/LSDEV.S.txt
|
@ -1,15 +1,16 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /A2OSX.BUILD
|
PREFIX /A2OSX.SRC
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
.LIST OFF
|
.LIST OFF
|
||||||
.OP 65C02
|
.OP 65C02
|
||||||
.OR $2000
|
.OR $2000
|
||||||
.TF BIN/LSDEV
|
.TF /A2OSX.BOOT/BIN/LSDEV
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.INB INC/MACROS.I
|
.INB INC/MACROS.I
|
||||||
.INB INC/A2OSX.I
|
.INB INC/A2OSX.I
|
||||||
|
.INB INC/A2OSX.API.I
|
||||||
.INB INC/KERNEL.I
|
.INB INC/KERNEL.I
|
||||||
.INB INC/LIBSTR.I
|
.INB INC/LIBSTR.I
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
@ -17,17 +18,20 @@ ZPPTR1 .EQ ZPBIN
|
||||||
ZPPTR2 .EQ ZPBIN+2
|
ZPPTR2 .EQ ZPBIN+2
|
||||||
ZPPTR3 .EQ ZPBIN+4
|
ZPPTR3 .EQ ZPBIN+4
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* Main entry point
|
* File Header (16 Bytes)
|
||||||
*--------------------------------------
|
|
||||||
* Code signature and INIT table
|
|
||||||
*--------------------------------------
|
|
||||||
* CLD $D8
|
|
||||||
* JMP (*,x) $7C
|
|
||||||
* #JMPTABLE
|
|
||||||
* /JMPTABLE
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.START cld
|
CS.START cld
|
||||||
jmp (.1,x)
|
jmp (.1,x)
|
||||||
|
.DA #$61 6502,Level 1 (65c02)
|
||||||
|
.DA #1 BIN Layout Version 1
|
||||||
|
.DA 0
|
||||||
|
.DA CS.END-CS.START Code Length To Relocate
|
||||||
|
.DA 0 Data Segment to Allocate
|
||||||
|
.DA 0
|
||||||
|
.DA 0
|
||||||
|
*--------------------------------------
|
||||||
|
* Relocation Table
|
||||||
|
*--------------------------------------
|
||||||
.1 .DA CS.INIT
|
.1 .DA CS.INIT
|
||||||
.DA CS.RUN
|
.DA CS.RUN
|
||||||
.DA CS.EVENT
|
.DA CS.EVENT
|
||||||
|
@ -35,46 +39,25 @@ CS.START cld
|
||||||
L.LIBSTR .DA LIBSTR
|
L.LIBSTR .DA LIBSTR
|
||||||
L.MSG0 .DA MSG0
|
L.MSG0 .DA MSG0
|
||||||
L.MSG1 .DA MSG1
|
L.MSG1 .DA MSG1
|
||||||
L.MSG2 .DA MSG2
|
|
||||||
.DA 0
|
.DA 0
|
||||||
.DA CS.END-CS.START Code Length To Relocate
|
|
||||||
.DA 0 Data Segment to Allocate
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.INIT >LIBLOADP L.LIBSTR
|
CS.INIT >LDYA L.LIBSTR
|
||||||
* bcs .9
|
>LOADLIBYA
|
||||||
|
bcs .9
|
||||||
sta hLIBSTR
|
sta hLIBSTR
|
||||||
|
|
||||||
>SYSCALL SYS.GetDevTable
|
>LDYAI DevMgr.Table
|
||||||
>STYA ZPPTR1
|
>STYA ZPPTR1
|
||||||
stz DEV.COUNT
|
stz DEV.ID
|
||||||
|
|
||||||
L0 >PUSHW L.MSG0
|
>PUSHW L.MSG0
|
||||||
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
||||||
lda #22
|
|
||||||
sta LINE.COUNT
|
|
||||||
L1 lda (ZPPTR1)
|
|
||||||
bmi .1
|
|
||||||
jmp L41
|
|
||||||
|
|
||||||
.1 ldy #S.DEV.hARGS
|
|
||||||
lda (ZPPTR1),y
|
|
||||||
beq L10
|
|
||||||
>SYSCALL SYS.GetMemPtrA
|
|
||||||
>PUSHYA
|
|
||||||
bra L11
|
|
||||||
|
|
||||||
L10 >PUSHW L.MSG2
|
|
||||||
|
|
||||||
L11 ldy #S.DEV.hCMD
|
.1 lda (ZPPTR1)
|
||||||
lda (ZPPTR1),y
|
cmp #$D8
|
||||||
beq L12
|
bne .8
|
||||||
>SYSCALL SYS.GetMemPtrA
|
|
||||||
>PUSHYA
|
|
||||||
bra L13
|
|
||||||
|
|
||||||
L12 >PUSHW L.MSG2
|
lda ZPPTR1
|
||||||
|
|
||||||
L13 lda ZPPTR1
|
|
||||||
clc
|
clc
|
||||||
adc #S.DEV.NAME
|
adc #S.DEV.NAME
|
||||||
sta ZPPTR2
|
sta ZPPTR2
|
||||||
|
@ -83,35 +66,27 @@ L13 lda ZPPTR1
|
||||||
sta ZPPTR2+1
|
sta ZPPTR2+1
|
||||||
>PUSHW ZPPTR2
|
>PUSHW ZPPTR2
|
||||||
|
|
||||||
ldy #S.DEV.hOWNERPS
|
ldy #S.DEV.F
|
||||||
lda (ZPPTR1),y
|
lda (ZPPTR1),y push flags
|
||||||
>PUSHA Owner PSID
|
|
||||||
lda (ZPPTR1) push flags
|
|
||||||
>PUSHA
|
>PUSHA
|
||||||
ldy #S.DEV.ID
|
>PUSHB DEV.ID
|
||||||
lda (ZPPTR1),y
|
|
||||||
>PUSHA DevID
|
|
||||||
>PUSHW L.MSG1
|
>PUSHW L.MSG1
|
||||||
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
||||||
L4 dec LINE.COUNT
|
|
||||||
L41 lda ZPPTR1
|
lda ZPPTR1
|
||||||
clc
|
clc
|
||||||
adc #S.DEV.SIZE
|
adc #S.DEV.SIZE
|
||||||
sta ZPPTR1
|
sta ZPPTR1
|
||||||
bcc L5
|
bcc .3
|
||||||
inc ZPPTR1+1
|
inc ZPPTR1+1
|
||||||
L5 inc DEV.COUNT
|
|
||||||
lda DEV.COUNT
|
.3 inc DEV.ID
|
||||||
|
lda DEV.ID
|
||||||
cmp #K.DEV.MAX
|
cmp #K.DEV.MAX
|
||||||
beq L8
|
bne .1
|
||||||
lda LINE.COUNT
|
|
||||||
beq L6
|
|
||||||
jmp L1
|
|
||||||
L6 >DEBUG
|
|
||||||
jmp L0
|
|
||||||
|
|
||||||
L8 lda #0 tell TSKMGR that all done ok, but
|
.8 lda #0 tell TSKMGR that all done ok, but
|
||||||
sec we do not want to stay in memory
|
.9 sec we do not want to stay in memory
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.RUN
|
CS.RUN
|
||||||
|
@ -119,21 +94,16 @@ CS.EVENT clc
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.QUIT lda hLIBSTR
|
CS.QUIT lda hLIBSTR
|
||||||
|
|
||||||
bra *
|
|
||||||
|
|
||||||
>SYSCALL SYS.UnloadLibA
|
>SYSCALL SYS.UnloadLibA
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.END
|
CS.END
|
||||||
hLIBSTR .BS 1
|
|
||||||
DEV.COUNT .BS 1
|
|
||||||
LINE.COUNT .BS 1
|
|
||||||
LIBSTR >PSTRING "libstr.o"
|
LIBSTR >PSTRING "libstr.o"
|
||||||
MSG0 >CSTRING "hDev Flags PID NAME CMD ARGS\n"
|
MSG0 >CSTRING "ID Flags Name\n"
|
||||||
MSG1 >CSTRING " %03d %b $%h %4S %16S %32S\n"
|
MSG1 >CSTRING "%03d %b %4S\n"
|
||||||
MSG2 >PSTRING "(none)"
|
hLIBSTR .BS 1
|
||||||
|
DEV.ID .BS 1
|
||||||
MAN
|
MAN
|
||||||
SAVE BIN/LSDEV.S
|
SAVE BIN/LSDEV.S
|
||||||
ASM
|
ASM
|
||||||
|
|
133
BIN/MD.S.txt
133
BIN/MD.S.txt
|
@ -0,0 +1,133 @@
|
||||||
|
PR#3
|
||||||
|
PREFIX /A2OSX.SRC
|
||||||
|
NEW
|
||||||
|
INC 1
|
||||||
|
AUTO 6
|
||||||
|
.LIST OFF
|
||||||
|
.OP 65C02
|
||||||
|
.OR $2000
|
||||||
|
.TF /A2OSX.BOOT/BIN/MD
|
||||||
|
*--------------------------------------
|
||||||
|
.INB INC/MACROS.I
|
||||||
|
.INB INC/KERNEL.I
|
||||||
|
.INB INC/A2OSX.I
|
||||||
|
.INB INC/A2OSX.API.I
|
||||||
|
.INB INC/LIBSTR.I
|
||||||
|
*--------------------------------------
|
||||||
|
ZPPTR1 .EQ ZPBIN
|
||||||
|
ZPPTR2 .EQ ZPBIN+2
|
||||||
|
*--------------------------------------
|
||||||
|
* File Header (16 Bytes)
|
||||||
|
*--------------------------------------
|
||||||
|
CS.START cld
|
||||||
|
jmp (.1,x)
|
||||||
|
.DA #$61 6502,Level 1 (65c02)
|
||||||
|
.DA #1 BIN Layout Version 1
|
||||||
|
.DA 0
|
||||||
|
.DA CS.END-CS.START Code Length To Relocate
|
||||||
|
.DA 0
|
||||||
|
.DA 0
|
||||||
|
.DA 0
|
||||||
|
*--------------------------------------
|
||||||
|
* Relocation Table
|
||||||
|
*--------------------------------------
|
||||||
|
.1 .DA CS.INIT
|
||||||
|
.DA CS.RUN
|
||||||
|
.DA CS.DOEVENT
|
||||||
|
.DA CS.QUIT
|
||||||
|
.DA 0
|
||||||
|
*--------------------------------------
|
||||||
|
CS.INIT stz hFullPath
|
||||||
|
ldy #S.PS.hARGS
|
||||||
|
lda (pPs),y
|
||||||
|
beq .9
|
||||||
|
|
||||||
|
>SYSCALL SYS.GetMemPtrA
|
||||||
|
>STYA ZPQuickPtr1
|
||||||
|
lda (ZPQuickPtr1)
|
||||||
|
beq .9
|
||||||
|
|
||||||
|
ldy #1
|
||||||
|
lda (ZPQuickPtr1),y
|
||||||
|
cmp #'/'
|
||||||
|
bne .1
|
||||||
|
|
||||||
|
ldy #S.PS.hARGS
|
||||||
|
lda (pPs),y
|
||||||
|
bra .2
|
||||||
|
|
||||||
|
.1 ldy #S.PS.hARGS
|
||||||
|
lda (pPs),y
|
||||||
|
>PUSHA
|
||||||
|
ldy #S.PS.hPREFIX
|
||||||
|
lda (pPs),y
|
||||||
|
>PUSHA
|
||||||
|
>SYSCALL SYS.PStrCat
|
||||||
|
sta hFullPath
|
||||||
|
|
||||||
|
.2 >SYSCALL SYS.MLICreateDirA
|
||||||
|
bcc .8
|
||||||
|
|
||||||
|
pha
|
||||||
|
jsr .8
|
||||||
|
pla
|
||||||
|
sec
|
||||||
|
rts
|
||||||
|
|
||||||
|
.8 lda hFullPath
|
||||||
|
beq .88
|
||||||
|
>SYSCALL SYS.FreeMemA
|
||||||
|
.88 clc
|
||||||
|
rts
|
||||||
|
|
||||||
|
.9 lda hFullPath
|
||||||
|
beq .99
|
||||||
|
>SYSCALL SYS.FreeMemA
|
||||||
|
.99 lda #SYSMGR.ERRSYN
|
||||||
|
sec
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
CS.RUN sec
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
CS.DOEVENT sec
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
CS.QUIT clc
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
PRBYTE pha
|
||||||
|
lsr
|
||||||
|
lsr
|
||||||
|
lsr
|
||||||
|
lsr
|
||||||
|
ora #$B0
|
||||||
|
cmp #$BA
|
||||||
|
bcc .1
|
||||||
|
adc #6
|
||||||
|
.1 jsr COUT
|
||||||
|
pla
|
||||||
|
and #$0F
|
||||||
|
ora #$B0
|
||||||
|
cmp #$BA
|
||||||
|
bcc COUT
|
||||||
|
adc #6
|
||||||
|
bra COUT
|
||||||
|
*--------------------------------------
|
||||||
|
CROUT lda #13
|
||||||
|
*--------------------------------------
|
||||||
|
COUT phx
|
||||||
|
phy
|
||||||
|
ldx #DEVMGR.COUT
|
||||||
|
jsr pDevJmp
|
||||||
|
ply
|
||||||
|
plx
|
||||||
|
rts
|
||||||
|
pDevJmp jmp (pDev)
|
||||||
|
*--------------------------------------
|
||||||
|
CS.END
|
||||||
|
hFullPath .BS 1
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE BIN/MD.S
|
||||||
|
ASM
|
274
BIN/MEM.S.txt
274
BIN/MEM.S.txt
|
@ -1,31 +1,38 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /A2OSX.BUILD
|
PREFIX /A2OSX.SRC
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
.LIST OFF
|
.LIST OFF
|
||||||
.OP 65C02
|
.OP 65C02
|
||||||
.OR $2000
|
.OR $2000
|
||||||
.TF BIN/MEM
|
.TF /A2OSX.BOOT/BIN/MEM
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.INB INC/MACROS.I
|
.INB INC/MACROS.I
|
||||||
|
.INB INC/KERNEL.I
|
||||||
.INB INC/A2OSX.I
|
.INB INC/A2OSX.I
|
||||||
|
.INB INC/A2OSX.API.I
|
||||||
.INB INC/LIBSTR.I
|
.INB INC/LIBSTR.I
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
PAGELEN .EQ 22
|
||||||
|
*--------------------------------------
|
||||||
ZPPTR1 .EQ ZPBIN
|
ZPPTR1 .EQ ZPBIN
|
||||||
ZPPTR2 .EQ ZPBIN+2
|
ZPPTR2 .EQ ZPBIN+2
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* Main entry point
|
* File Header (16 Bytes)
|
||||||
*--------------------------------------
|
|
||||||
* Code signature and INIT table
|
|
||||||
*--------------------------------------
|
|
||||||
* CLD $D8
|
|
||||||
* JMP (*,x) $7C
|
|
||||||
* #JMPTABLE
|
|
||||||
* /JMPTABLE
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.START cld
|
CS.START cld
|
||||||
jmp (.1,x)
|
jmp (.1,x)
|
||||||
|
.DA #$61 6502,Level 1 (65c02)
|
||||||
|
.DA #1 BIN Layout Version 1
|
||||||
|
.DA 0
|
||||||
|
.DA CS.END-CS.START Code Length To Relocate
|
||||||
|
.DA DS.END-DS.START Data Segment to Allocate
|
||||||
|
.DA 0
|
||||||
|
.DA 0
|
||||||
|
*--------------------------------------
|
||||||
|
* Relocation Table
|
||||||
|
*--------------------------------------
|
||||||
.1 .DA CS.INIT
|
.1 .DA CS.INIT
|
||||||
.DA CS.RUN
|
.DA CS.RUN
|
||||||
.DA CS.DOEVENT
|
.DA CS.DOEVENT
|
||||||
|
@ -38,55 +45,120 @@ L.MSG3 .DA MSG3
|
||||||
L.MSG4 .DA MSG4
|
L.MSG4 .DA MSG4
|
||||||
L.MSG5 .DA MSG5
|
L.MSG5 .DA MSG5
|
||||||
L.MSG6 .DA MSG6
|
L.MSG6 .DA MSG6
|
||||||
L.MSG7 .DA MSG7
|
|
||||||
.DA 0
|
.DA 0
|
||||||
.DA CS.END-CS.START Code Length To Relocate
|
|
||||||
.DA DS.END-DS.START Data Segment to Allocate
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.INIT >LIBLOADP L.LIBSTR
|
CS.INIT >LDYA L.LIBSTR
|
||||||
|
>LOADLIBYA
|
||||||
bcs .9
|
bcs .9
|
||||||
sta hLIBSTR
|
sta hLIBSTR
|
||||||
|
|
||||||
stz LINE.COUNT
|
lda #0
|
||||||
stz MEM.COUNT
|
ldy #DS.END-DS.START-1
|
||||||
stz USED.COUNT
|
|
||||||
stz bSTOP
|
|
||||||
stz bCANCEL
|
|
||||||
|
|
||||||
lda (pPsContext)
|
.1 sta (pData),y
|
||||||
|
dey
|
||||||
|
bpl .1
|
||||||
|
|
||||||
|
ldy #MEM.COUNT Skip SLOT0
|
||||||
|
lda (pData),y
|
||||||
|
inc
|
||||||
|
sta (pData),y
|
||||||
|
|
||||||
|
lda (pPs)
|
||||||
ora #S.PS.F.EVENT Now accept events
|
ora #S.PS.F.EVENT Now accept events
|
||||||
sta (pPsContext)
|
sta (pPs)
|
||||||
clc
|
clc
|
||||||
.9 rts
|
.9 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.RUN lda bCANCEL
|
CS.RUN ldy #bCANCEL
|
||||||
bne .99
|
lda (pData),y
|
||||||
lda bSTOP
|
bne .9
|
||||||
|
|
||||||
|
ldy #bSTOP
|
||||||
|
lda (pData),y
|
||||||
bne .8
|
bne .8
|
||||||
lda LINE.COUNT
|
|
||||||
|
ldy #LINE.COUNT
|
||||||
|
lda (pData),y
|
||||||
bne .1
|
bne .1
|
||||||
|
|
||||||
>PUSHW L.MSG0
|
>PUSHW L.MSG0
|
||||||
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
||||||
|
|
||||||
.1 lda MEM.COUNT
|
.1 ldy #MEM.COUNT
|
||||||
|
lda (pData),y
|
||||||
>SYSCALL SYS.GetMemByIDA
|
>SYSCALL SYS.GetMemByIDA
|
||||||
>STYA ZPPTR1
|
>STYA ZPPTR1
|
||||||
lda (ZPPTR1)
|
lda (ZPPTR1)
|
||||||
bpl .2
|
bpl .2
|
||||||
inc USED.COUNT
|
|
||||||
|
ldy #USED.COUNT
|
||||||
|
lda (pData),y
|
||||||
|
inc
|
||||||
|
sta (pData),y
|
||||||
|
|
||||||
.2 jsr CS.RUN.PRINTMEM
|
.2 jsr CS.RUN.PRINTMEM
|
||||||
|
|
||||||
inc MEM.COUNT
|
ldy #MEM.COUNT
|
||||||
lda MEM.COUNT
|
lda (pData),y
|
||||||
cmp MEMMGR.TABLESIZE
|
inc
|
||||||
|
sta (pData),y
|
||||||
|
cmp MemMgr.LastSlot
|
||||||
beq .9
|
beq .9
|
||||||
|
|
||||||
.8
|
.8 clc
|
||||||
clc
|
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.9 jsr CS.RUN.PRINTEND
|
.9 jsr CS.RUN.PRINTEND
|
||||||
.99 sec
|
sec
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
CS.DOEVENT ldy #S.EVT.hDEV is Event from active IN device?
|
||||||
|
lda (pEvent),y
|
||||||
|
ldy #S.PS.hINDEV
|
||||||
|
cmp (pPs),y
|
||||||
|
bne .9
|
||||||
|
|
||||||
|
lda (pEvent)
|
||||||
|
and #S.EVT.F.KEY is it a KEY event?
|
||||||
|
beq .9
|
||||||
|
|
||||||
|
ldy #S.EVT.DATAHI is it an O or SAPPLE key ?
|
||||||
|
lda (pEvent),y
|
||||||
|
bne .9
|
||||||
|
|
||||||
|
ldy #S.EVT.DATALO
|
||||||
|
lda (pEvent),y
|
||||||
|
cmp #$03 Ctrl-C
|
||||||
|
bne .1
|
||||||
|
|
||||||
|
lda #$FF
|
||||||
|
ldy #bCANCEL
|
||||||
|
sta (pData),y
|
||||||
|
bra .8
|
||||||
|
|
||||||
|
.1 cmp #$13 Ctrl-S
|
||||||
|
bne .2
|
||||||
|
|
||||||
|
ldy #bSTOP
|
||||||
|
lda (pData),y
|
||||||
|
eor #$FF
|
||||||
|
sta (pData),y
|
||||||
|
bra .8
|
||||||
|
|
||||||
|
.2 ldy #bSTOP
|
||||||
|
lda #0
|
||||||
|
sta (pData),y
|
||||||
|
|
||||||
|
.8 clc
|
||||||
|
rts
|
||||||
|
|
||||||
|
.9 sec
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
CS.QUIT lda hLIBSTR
|
||||||
|
>SYSCALL SYS.UnloadLibA
|
||||||
|
clc
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.RUN.PRINTMEM ldy #S.MEM.LEN
|
CS.RUN.PRINTMEM ldy #S.MEM.LEN
|
||||||
|
@ -96,6 +168,7 @@ CS.RUN.PRINTMEM ldy #S.MEM.LEN
|
||||||
lda (ZPPTR1),y
|
lda (ZPPTR1),y
|
||||||
ply
|
ply
|
||||||
>PUSHYA
|
>PUSHYA
|
||||||
|
|
||||||
ldy #S.MEM.PTR
|
ldy #S.MEM.PTR
|
||||||
lda (ZPPTR1),y
|
lda (ZPPTR1),y
|
||||||
pha
|
pha
|
||||||
|
@ -103,18 +176,25 @@ CS.RUN.PRINTMEM ldy #S.MEM.LEN
|
||||||
lda (ZPPTR1),y
|
lda (ZPPTR1),y
|
||||||
ply
|
ply
|
||||||
>PUSHYA
|
>PUSHYA
|
||||||
|
|
||||||
ldy #S.MEM.REFCNT
|
ldy #S.MEM.REFCNT
|
||||||
lda (ZPPTR1),y
|
lda (ZPPTR1),y
|
||||||
>PUSHA
|
>PUSHA
|
||||||
|
|
||||||
ldy #S.MEM.OWNERPID
|
ldy #S.MEM.OWNERPID
|
||||||
lda (ZPPTR1),y
|
lda (ZPPTR1),y
|
||||||
>PUSHA
|
>PUSHA
|
||||||
|
|
||||||
lda (ZPPTR1)
|
lda (ZPPTR1)
|
||||||
>PUSHA
|
>PUSHA
|
||||||
lda MEM.COUNT
|
|
||||||
|
ldy #MEM.COUNT
|
||||||
|
lda (pData),y
|
||||||
>PUSHA
|
>PUSHA
|
||||||
|
|
||||||
>PUSHW L.MSG1
|
>PUSHW L.MSG1
|
||||||
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
||||||
|
|
||||||
ldy #S.MEM.BIN
|
ldy #S.MEM.BIN
|
||||||
lda (ZPPTR1),y
|
lda (ZPPTR1),y
|
||||||
bne .3
|
bne .3
|
||||||
|
@ -132,15 +212,18 @@ CS.RUN.PRINTMEM ldy #S.MEM.LEN
|
||||||
lda #"|"
|
lda #"|"
|
||||||
jsr COUT
|
jsr COUT
|
||||||
ldy #1
|
ldy #1
|
||||||
|
|
||||||
.1 lda (ZPPTR2),y
|
.1 lda (ZPPTR2),y
|
||||||
ora #$80
|
ora #$80
|
||||||
cmp #$A0
|
cmp #$A0
|
||||||
bcs .2
|
bcs .2
|
||||||
|
|
||||||
ora #$20
|
ora #$20
|
||||||
.2 jsr COUT
|
.2 jsr COUT
|
||||||
iny
|
iny
|
||||||
cpy #40
|
cpy #40
|
||||||
bne .1
|
bne .1
|
||||||
|
|
||||||
lda #"}"
|
lda #"}"
|
||||||
jsr COUT
|
jsr COUT
|
||||||
bra .4
|
bra .4
|
||||||
|
@ -150,84 +233,52 @@ CS.RUN.PRINTMEM ldy #S.MEM.LEN
|
||||||
>LIBCALL hLIBSTR,LIBSTR.PRINTP
|
>LIBCALL hLIBSTR,LIBSTR.PRINTP
|
||||||
|
|
||||||
.4 jsr CROUT
|
.4 jsr CROUT
|
||||||
inc LINE.COUNT
|
ldy #LINE.COUNT
|
||||||
lda LINE.COUNT
|
lda (pData),y
|
||||||
cmp #22
|
inc
|
||||||
|
sta (pData),y
|
||||||
|
cmp #PAGELEN
|
||||||
bne .5
|
bne .5
|
||||||
|
|
||||||
lda #$FF
|
lda #$FF
|
||||||
sta bSTOP
|
ldy #bSTOP
|
||||||
stz LINE.COUNT
|
sta (pData),y
|
||||||
|
|
||||||
|
ldy #LINE.COUNT
|
||||||
|
lda #0
|
||||||
|
sta (pData),y
|
||||||
|
|
||||||
.5 rts
|
.5 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.RUN.PRINTEND >PUSHB MEM.COUNT
|
CS.RUN.PRINTEND ldy #MEM.COUNT
|
||||||
>PUSHB USED.COUNT
|
>PUSHB (pData),y
|
||||||
|
ldy #USED.COUNT
|
||||||
|
>PUSHB (pData),y
|
||||||
>PUSHW L.MSG2
|
>PUSHW L.MSG2
|
||||||
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
||||||
|
|
||||||
>PUSHW MEMMGR.LOMEM
|
>PUSHW MemMgr.HiMem
|
||||||
>PUSHW L.MSG3
|
>PUSHW L.MSG3
|
||||||
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
||||||
|
|
||||||
>PUSHW MEMMGR.MLLIMIT
|
>PUSHW MemMgr.Free
|
||||||
>PUSHW L.MSG4
|
>PUSHW L.MSG4
|
||||||
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
||||||
|
|
||||||
>PUSHW MEMMGR.MHLIMIT
|
>PUSHW MemMgr.LoMem
|
||||||
>PUSHW L.MSG5
|
>PUSHW L.MSG5
|
||||||
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
||||||
|
|
||||||
>PUSHW MEMMGR.HIMEM
|
lda MemMgr.Free
|
||||||
|
sec
|
||||||
|
sbc MemMgr.LoMem
|
||||||
|
tay
|
||||||
|
lda MemMgr.Free+1
|
||||||
|
sbc MemMgr.LoMem+1
|
||||||
|
|
||||||
|
>PUSHYA
|
||||||
>PUSHW L.MSG6
|
>PUSHW L.MSG6
|
||||||
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
||||||
|
|
||||||
>PUSHW MEMMGR.MFREE
|
|
||||||
>PUSHW L.MSG7
|
|
||||||
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
CS.DOEVENT >PULLW pEvent
|
|
||||||
ldy #S.EVT.hDEV is Event from active IN device?
|
|
||||||
lda (pEvent),y
|
|
||||||
ldy #S.PS.hINDEV
|
|
||||||
cmp (pPsContext),y
|
|
||||||
bne .9
|
|
||||||
|
|
||||||
lda (pEvent)
|
|
||||||
and #S.EVT.F.KEY is it a KEY event?
|
|
||||||
beq .9
|
|
||||||
|
|
||||||
ldy #S.EVT.DATAHI is it an O or SAPPLE key ?
|
|
||||||
lda (pEvent),y
|
|
||||||
bne .9
|
|
||||||
|
|
||||||
ldy #S.EVT.DATALO
|
|
||||||
lda (pEvent),y
|
|
||||||
cmp #$03 Ctrl-C
|
|
||||||
bne .1
|
|
||||||
lda #$FF
|
|
||||||
sta bCANCEL
|
|
||||||
bra .8
|
|
||||||
|
|
||||||
.1 cmp #$13 Ctrl-S
|
|
||||||
bne .2
|
|
||||||
lda bSTOP
|
|
||||||
eor #$FF
|
|
||||||
sta bSTOP
|
|
||||||
bra .8
|
|
||||||
|
|
||||||
.2 lda bSTOP
|
|
||||||
beq .8
|
|
||||||
stz bSTOP
|
|
||||||
|
|
||||||
.8 >SYSCALL SYS.DestroyEvent
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
.9 sec
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
CS.QUIT lda hLIBSTR
|
|
||||||
>SYSCALL SYS.UnloadLibA
|
|
||||||
clc
|
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
PRBYTE pha
|
PRBYTE pha
|
||||||
|
@ -252,33 +303,34 @@ CROUT lda #13
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
COUT phx
|
COUT phx
|
||||||
phy
|
phy
|
||||||
>PUSHA
|
ldx #DEVMGR.COUT
|
||||||
ldy #S.PS.hOUTDEV
|
jsr pDevJmp
|
||||||
lda (pPsContext),y
|
|
||||||
>SYSCALL SYS.DevOutA
|
|
||||||
ply
|
ply
|
||||||
plx
|
plx
|
||||||
rts
|
rts
|
||||||
|
pDevJmp jmp (pDev)
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.END
|
CS.END
|
||||||
DS.START
|
LIBSTR >PSTRING "libstr.o"
|
||||||
*--------------------------------------
|
MSG0 >CSTRING "hMem Flags PID REF PTR LEN BINPATH/DATA\n"
|
||||||
|
MSG1 >CSTRING " %03d %b $%h $%h $%H $%H "
|
||||||
|
MSG2 >CSTRING "\nAllocated hMem:%d, Total:%d\n"
|
||||||
|
MSG3 >CSTRING "High Memory: $%H\n"
|
||||||
|
MSG4 >CSTRING "Free ULimit: $%H\n"
|
||||||
|
MSG5 >CSTRING "Low Memory: $%H\n"
|
||||||
|
MSG6 >CSTRING "\nFree Memory: %D Bytes.\n"
|
||||||
hLIBSTR .BS 1
|
hLIBSTR .BS 1
|
||||||
|
*--------------------------------------
|
||||||
|
.DUMMY
|
||||||
|
.OR 0
|
||||||
|
DS.START
|
||||||
LINE.COUNT .BS 1
|
LINE.COUNT .BS 1
|
||||||
MEM.COUNT .BS 1
|
MEM.COUNT .BS 1
|
||||||
USED.COUNT .BS 1
|
USED.COUNT .BS 1
|
||||||
bSTOP .BS 1
|
bSTOP .BS 1
|
||||||
bCANCEL .BS 1
|
bCANCEL .BS 1
|
||||||
LIBSTR >PSTRING "libstr.o"
|
|
||||||
MSG0 >CSTRING "hMem Flags PID REF PTR LEN BINPATH/DATA\n"
|
|
||||||
MSG1 >CSTRING " %03d %b $%h $%h $%H $%H "
|
|
||||||
MSG2 >CSTRING "\nAllocated hMem:%d, Total:%d\n"
|
|
||||||
MSG3 >CSTRING "Low Memory: $%H\n"
|
|
||||||
MSG4 >CSTRING "Low Free PTR: $%H\n"
|
|
||||||
MSG5 >CSTRING "High Free PTR: $%H\n"
|
|
||||||
MSG6 >CSTRING "High Memory: $%H\n"
|
|
||||||
MSG7 >CSTRING "\nFree Memory: %D Bytes.\n"
|
|
||||||
DS.END
|
DS.END
|
||||||
|
.ED
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
MAN
|
MAN
|
||||||
SAVE BIN/MEM.S
|
SAVE BIN/MEM.S
|
||||||
|
|
|
@ -1,15 +1,16 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /A2OSX.BUILD
|
PREFIX /A2OSX.SRC
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
.LIST OFF
|
.LIST OFF
|
||||||
.OP 65C02
|
.OP 65C02
|
||||||
.OR $2000
|
.OR $2000
|
||||||
.TF BIN/NETCFG
|
.TF /A2OSX.BOOT/BIN/NETCFG
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.INB INC/MACROS.I
|
.INB INC/MACROS.I
|
||||||
.INB INC/A2OSX.I
|
.INB INC/A2OSX.I
|
||||||
|
.INB INC/A2OSX.API.I
|
||||||
.INB INC/KERNEL.I
|
.INB INC/KERNEL.I
|
||||||
.INB INC/LIBSTR.I
|
.INB INC/LIBSTR.I
|
||||||
.INB INC/LIBTCPIP.I
|
.INB INC/LIBTCPIP.I
|
||||||
|
@ -17,17 +18,20 @@ AUTO 6
|
||||||
ZPPTR1 .EQ ZPBIN
|
ZPPTR1 .EQ ZPBIN
|
||||||
ZPPTR2 .EQ ZPBIN+2
|
ZPPTR2 .EQ ZPBIN+2
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* Main entry point
|
* File Header (16 Bytes)
|
||||||
*--------------------------------------
|
|
||||||
* Code signature and INIT table
|
|
||||||
*--------------------------------------
|
|
||||||
* CLD $D8
|
|
||||||
* JMP (*,x) $7C
|
|
||||||
* #JMPTABLE
|
|
||||||
* /JMPTABLE
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.START cld
|
CS.START cld
|
||||||
jmp (.1,x)
|
jmp (.1,x)
|
||||||
|
.DA #$61 6502,Level 1 (65c02)
|
||||||
|
.DA #1 BIN Layout Version 1
|
||||||
|
.DA 0
|
||||||
|
.DA CS.END-CS.START Code Length To Relocate
|
||||||
|
.DA 0 Data Segment to Allocate
|
||||||
|
.DA 0
|
||||||
|
.DA 0
|
||||||
|
*--------------------------------------
|
||||||
|
* Relocation Table
|
||||||
|
*--------------------------------------
|
||||||
.1 .DA CS.INIT
|
.1 .DA CS.INIT
|
||||||
.DA CS.RUN
|
.DA CS.RUN
|
||||||
.DA CS.DOEVENT
|
.DA CS.DOEVENT
|
||||||
|
@ -49,10 +53,9 @@ L.MSG1.HOSTNAME .DA MSG1.HOSTNAME
|
||||||
L.MSG1.DOMAIN .DA MSG1.DOMAIN
|
L.MSG1.DOMAIN .DA MSG1.DOMAIN
|
||||||
L.MSG1.END .DA MSG1.END
|
L.MSG1.END .DA MSG1.END
|
||||||
.DA 0
|
.DA 0
|
||||||
.DA CS.END-CS.START Code Length To Relocate
|
|
||||||
.DA DS.END-DS.START Data Segemnt to Allocate
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.INIT >LIBLOADP L.LIBSTR
|
CS.INIT >LDYA L.LIBSTR
|
||||||
|
>LOADLIBYA
|
||||||
sta hLIBSTR
|
sta hLIBSTR
|
||||||
|
|
||||||
lda #K.PROTOID.IP
|
lda #K.PROTOID.IP
|
||||||
|
@ -195,12 +198,7 @@ MSG1.DNS >CSTRING " DNS : %d.%d.%d.%d,%d.%d.%d.%d\n"
|
||||||
MSG1.HOSTNAME >CSTRING " Hostname : %s"
|
MSG1.HOSTNAME >CSTRING " Hostname : %s"
|
||||||
MSG1.DOMAIN >CSTRING ".%s"
|
MSG1.DOMAIN >CSTRING ".%s"
|
||||||
MSG1.END >CSTRING "\nEnd of network configuration.\n"
|
MSG1.END >CSTRING "\nEnd of network configuration.\n"
|
||||||
*--------------------------------------
|
|
||||||
DS.START
|
|
||||||
*--------------------------------------
|
|
||||||
hLIBSTR .BS 1
|
hLIBSTR .BS 1
|
||||||
*--------------------------------------
|
|
||||||
DS.END
|
|
||||||
MAN
|
MAN
|
||||||
SAVE BIN/NETCFG.S
|
SAVE BIN/NETCFG.S
|
||||||
ASM
|
ASM
|
||||||
|
|
215
BIN/PING.S.txt
215
BIN/PING.S.txt
|
@ -1,15 +1,16 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /A2OSX.BUILD
|
PREFIX /A2OSX.SRC
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
.LIST OFF
|
.LIST OFF
|
||||||
.OP 65C02
|
.OP 65C02
|
||||||
.OR $2000
|
.OR $2000
|
||||||
.TF BIN/PING
|
.TF /A2OSX.BOOT/BIN/PING
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.INB INC/MACROS.I
|
.INB INC/MACROS.I
|
||||||
.INB INC/A2OSX.I
|
.INB INC/A2OSX.I
|
||||||
|
.INB INC/A2OSX.API.I
|
||||||
.INB INC/KERNEL.I
|
.INB INC/KERNEL.I
|
||||||
.INB INC/LIBSTR.I
|
.INB INC/LIBSTR.I
|
||||||
.INB INC/LIBTCPIP.I
|
.INB INC/LIBTCPIP.I
|
||||||
|
@ -20,44 +21,44 @@ ZPFrameBase1 .EQ ZPBIN
|
||||||
ZPFrameLen1 .EQ ZPBIN+2
|
ZPFrameLen1 .EQ ZPBIN+2
|
||||||
ZPFramePtr1 .EQ ZPBIN+4
|
ZPFramePtr1 .EQ ZPBIN+4
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* Main entry point
|
* File Header (16 Bytes)
|
||||||
*--------------------------------------
|
|
||||||
* Code signature and INIT table
|
|
||||||
*--------------------------------------
|
|
||||||
* CLD $D8
|
|
||||||
* JMP (*,x) $7C
|
|
||||||
* #JMPTABLE
|
|
||||||
* /JMPTABLE
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.START cld
|
CS.START cld
|
||||||
jmp (.1,x)
|
jmp (.1,x)
|
||||||
|
.DA #$61 6502,Level 1 (65c02)
|
||||||
|
.DA #1 BIN Layout Version 1
|
||||||
|
.DA 0
|
||||||
|
.DA CS.END-CS.START Code Length To Relocate
|
||||||
|
.DA DS.END-DS.START Data Segment to Allocate
|
||||||
|
.DA 0
|
||||||
|
.DA 0
|
||||||
|
*--------------------------------------
|
||||||
.1 .DA CS.INIT
|
.1 .DA CS.INIT
|
||||||
.DA CS.RUN
|
.DA CS.RUN
|
||||||
.DA CS.EVENT
|
.DA CS.DOEVENT
|
||||||
.DA CS.QUIT
|
.DA CS.QUIT
|
||||||
L.LIBSTR .DA LIBSTR
|
L.LIBSTR .DA LIBSTR
|
||||||
L.LIBTCPIP .DA LIBTCPIP
|
L.LIBTCPIP .DA LIBTCPIP
|
||||||
L.SSCANF.IP .DA SSCANF.IP
|
L.SSCANF.IP .DA SSCANF.IP
|
||||||
L.DST.IP .DA DST.IP
|
|
||||||
L.MSG0 .DA MSG0
|
L.MSG0 .DA MSG0
|
||||||
L.MSG1 .DA MSG1
|
L.MSG1 .DA MSG1
|
||||||
L.MSG2 .DA MSG2
|
L.MSG2 .DA MSG2
|
||||||
L.MSG3 .DA MSG3
|
L.MSG3 .DA MSG3
|
||||||
.DA 0
|
.DA 0
|
||||||
.DA CS.END-CS.START Code Length To Relocate
|
|
||||||
.DA DS.END-DS.START Data Segment to Allocate
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.INIT ldy #S.PS.hARGS
|
CS.INIT ldy #S.PS.hARGS
|
||||||
lda (pPsContext),y
|
lda (pPs),y
|
||||||
bne .1
|
bne .1
|
||||||
lda #SYSMGR.ERRSYN
|
lda #SYSMGR.ERRSYN
|
||||||
sec
|
sec
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.1 >LIBLOADP L.LIBSTR
|
.1 >LDYA L.LIBSTR
|
||||||
|
>LOADLIBYA
|
||||||
sta hLIBSTR
|
sta hLIBSTR
|
||||||
|
|
||||||
>LIBLOADP L.LIBTCPIP
|
>LDYA L.LIBTCPIP
|
||||||
|
>LOADLIBYA
|
||||||
sta hLIBTCPIP
|
sta hLIBTCPIP
|
||||||
|
|
||||||
>LIBCALL hLIBTCPIP,LIBTCPIP.GET.IPCFG is TCPIP loaded ?
|
>LIBCALL hLIBTCPIP,LIBTCPIP.GET.IPCFG is TCPIP loaded ?
|
||||||
|
@ -72,45 +73,52 @@ CS.INIT ldy #S.PS.hARGS
|
||||||
sta hDev
|
sta hDev
|
||||||
|
|
||||||
lda A2OSX.RANDOM16
|
lda A2OSX.RANDOM16
|
||||||
sta Identifier
|
ldy #Identifier
|
||||||
|
sta (pData),y
|
||||||
lda A2OSX.RANDOM16+1
|
lda A2OSX.RANDOM16+1
|
||||||
sta Identifier+1
|
iny
|
||||||
|
sta (pData),y
|
||||||
|
|
||||||
stz Sequence
|
lda #0
|
||||||
stz Sequence+1
|
ldy #Sequence
|
||||||
|
sta (pData),y
|
||||||
|
iny
|
||||||
|
sta (pData),y
|
||||||
|
|
||||||
lda (pPsContext)
|
lda (pPs)
|
||||||
ora #S.PS.F.EVENT Now accept events
|
ora #S.PS.F.EVENT Now accept events
|
||||||
sta (pPsContext)
|
sta (pPs)
|
||||||
clc
|
clc
|
||||||
|
|
||||||
.9 rts
|
.9 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.RUN >PUSHW L.DST.IP
|
CS.RUN >PUSHW pData DST.IP
|
||||||
>PUSHW L.SSCANF.IP
|
>PUSHW L.SSCANF.IP
|
||||||
ldy #S.PS.hARGS
|
ldy #S.PS.hARGS
|
||||||
lda (pPsContext),y
|
lda (pPs),y
|
||||||
>SYSCALL SYS.GetMemPtrA
|
>SYSCALL SYS.GetMemPtrA
|
||||||
>PUSHYA
|
>PUSHYA
|
||||||
>LIBCALL hLIBSTR,LIBSTR.SSCANF
|
>LIBCALL hLIBSTR,LIBSTR.SSCANF
|
||||||
bcc CS.RUN.IPOK
|
bcc CS.RUN.IPOK
|
||||||
|
|
||||||
lda #PING.TIMEOUT
|
lda #PING.TIMEOUT
|
||||||
sta TimeOut
|
ldy #TimeOut
|
||||||
|
sta (pData),y
|
||||||
CS.RUN.DNSQUERY >PUSHW L.DST.IP
|
|
||||||
|
CS.RUN.DNSQUERY >PUSHW pData DST.IP
|
||||||
ldy #S.PS.hARGS
|
ldy #S.PS.hARGS
|
||||||
lda (pPsContext),y
|
lda (pPs),y
|
||||||
>PUSHA
|
>PUSHA
|
||||||
>LIBCALL hLIBTCPIP,LIBTCPIP.DNS.QUERY
|
>LIBCALL hLIBTCPIP,LIBTCPIP.DNS.QUERY
|
||||||
bcc CS.RUN.IPOK
|
bcc CS.RUN.IPOK
|
||||||
|
|
||||||
jsr A2osX.SLEEP
|
jsr A2osX.SLEEP
|
||||||
lda TimeOut
|
ldy #TimeOut
|
||||||
|
lda (pData),y
|
||||||
bne CS.RUN.DNSQUERY
|
bne CS.RUN.DNSQUERY
|
||||||
|
|
||||||
ldy #S.PS.hARGS
|
ldy #S.PS.hARGS
|
||||||
lda (pPsContext),y
|
lda (pPs),y
|
||||||
>SYSCALL SYS.GetMemPtrA
|
>SYSCALL SYS.GetMemPtrA
|
||||||
>PUSHYA
|
>PUSHYA
|
||||||
>PUSHW L.MSG0
|
>PUSHW L.MSG0
|
||||||
|
@ -120,24 +128,37 @@ CS.RUN.DNSQUERY >PUSHW L.DST.IP
|
||||||
CS.RUN.RTS rts
|
CS.RUN.RTS rts
|
||||||
|
|
||||||
CS.RUN.IPOK ldy #S.PS.hARGS
|
CS.RUN.IPOK ldy #S.PS.hARGS
|
||||||
lda (pPsContext),y
|
lda (pPs),y
|
||||||
>SYSCALL SYS.GetMemPtrA
|
>SYSCALL SYS.GetMemPtrA
|
||||||
>PUSHYA
|
>PUSHYA
|
||||||
>PUSHB DST.IP+3
|
ldy #3
|
||||||
>PUSHB DST.IP+2
|
>PUSHB (pData),y DST.IP+3
|
||||||
>PUSHB DST.IP+1
|
dey
|
||||||
>PUSHB DST.IP
|
>PUSHB (pData),y DST.IP+2
|
||||||
|
dey
|
||||||
|
>PUSHB (pData),y DST.IP+1
|
||||||
|
>PUSHB (pData) DST.IP
|
||||||
>PUSHW L.MSG1
|
>PUSHW L.MSG1
|
||||||
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
||||||
|
|
||||||
CS.RUN.ECHO >LIBCALL hLIBTCPIP,LIBTCPIP.NEW.ICMP.FRAME
|
CS.RUN.ECHO >LIBCALL hLIBTCPIP,LIBTCPIP.NEW.ICMP.FRAME
|
||||||
bcs CS.RUN.RTS
|
bcs CS.RUN.RTS
|
||||||
>STYA ZPFrameBase1
|
>STYA ZPFrameBase1
|
||||||
stx hFrame
|
txa
|
||||||
|
ldy #hFrame
|
||||||
|
sta (pData),y
|
||||||
|
|
||||||
|
ldx #3
|
||||||
|
ldy #0
|
||||||
|
.10 lda (pData),y
|
||||||
|
pha
|
||||||
|
iny
|
||||||
|
dex
|
||||||
|
bpl .10
|
||||||
|
|
||||||
ldx #3
|
ldx #3
|
||||||
ldy #S.IP.DST+3
|
ldy #S.IP.DST+3
|
||||||
.1 lda DST.IP,x
|
.1 pla
|
||||||
sta (ZPFrameBase1),y
|
sta (ZPFrameBase1),y
|
||||||
dey
|
dey
|
||||||
dex
|
dex
|
||||||
|
@ -147,63 +168,92 @@ CS.RUN.ECHO >LIBCALL hLIBTCPIP,LIBTCPIP.NEW.ICMP.FRAME
|
||||||
lda #S.ICMP.TYPE.ECHOREQ
|
lda #S.ICMP.TYPE.ECHOREQ
|
||||||
sta (ZPFrameBase1),y
|
sta (ZPFrameBase1),y
|
||||||
|
|
||||||
ldy #S.ICMP.IDENTIFIER
|
ldy #Identifier
|
||||||
lda Identifier
|
lda (pData),y
|
||||||
sta (ZPFrameBase1),y
|
tax
|
||||||
iny
|
iny
|
||||||
lda Identifier+1
|
lda (pData),y
|
||||||
|
|
||||||
|
ldy #S.ICMP.IDENTIFIER+1
|
||||||
|
sta (ZPFrameBase1),y
|
||||||
|
dey
|
||||||
|
txa
|
||||||
sta (ZPFrameBase1),y
|
sta (ZPFrameBase1),y
|
||||||
|
|
||||||
inc Sequence
|
ldy #Sequence+1
|
||||||
|
lda (pData),y
|
||||||
|
tax
|
||||||
|
dey
|
||||||
|
lda (pData),y
|
||||||
|
inc
|
||||||
|
sta (pData),y
|
||||||
bne .2
|
bne .2
|
||||||
inc Sequence+1
|
pha
|
||||||
|
inx
|
||||||
|
txa
|
||||||
|
sta (pData),y
|
||||||
|
pla
|
||||||
|
|
||||||
.2 ldy #S.ICMP.SEQUENCE
|
.2 ldy #S.ICMP.SEQUENCE
|
||||||
lda Sequence
|
|
||||||
sta (ZPFrameBase1),y
|
sta (ZPFrameBase1),y
|
||||||
iny
|
iny
|
||||||
lda Sequence+1
|
txa
|
||||||
sta (ZPFrameBase1),y
|
sta (ZPFrameBase1),y
|
||||||
|
|
||||||
lda #PING.TIMEOUT
|
lda #PING.TIMEOUT
|
||||||
sta TimeOut
|
ldy #TimeOut
|
||||||
|
sta (pData),y
|
||||||
|
|
||||||
.3 >PUSHWI S.ICMP+32
|
.3 >PUSHWI S.ICMP+32
|
||||||
lda hFrame
|
ldy #hFrame
|
||||||
|
lda (pData),y
|
||||||
>SYSCALL SYS.GetMemPtrA
|
>SYSCALL SYS.GetMemPtrA
|
||||||
>PUSHYA
|
>PUSHYA
|
||||||
>LIBCALL hLIBTCPIP,LIBTCPIP.SEND.ICMP.FRAME
|
>LIBCALL hLIBTCPIP,LIBTCPIP.SEND.ICMP.FRAME
|
||||||
bcc .4
|
bcc .4
|
||||||
jsr A2osX.SLEEP
|
jsr A2osX.SLEEP
|
||||||
lda TimeOut
|
ldy #TimeOut
|
||||||
|
lda (pData),y
|
||||||
bne .3
|
bne .3
|
||||||
|
|
||||||
.4 lda hFrame
|
.4 ldy #hFrame
|
||||||
|
lda (pData),y
|
||||||
>SYSCALL SYS.FreeMemA
|
>SYSCALL SYS.FreeMemA
|
||||||
|
|
||||||
stz bReply
|
ldy #bReply
|
||||||
|
lda #0
|
||||||
|
sta (pData),y
|
||||||
lda #PING.TIMEOUT
|
lda #PING.TIMEOUT
|
||||||
sta TimeOut
|
ldy #TimeOut
|
||||||
|
sta (pData),y
|
||||||
|
|
||||||
CS.RUN.WAIT jsr A2osX.SLEEP
|
CS.RUN.WAIT jsr A2osX.SLEEP
|
||||||
lda bReply
|
ldy #bReply
|
||||||
|
lda (pData),y
|
||||||
bne .1
|
bne .1
|
||||||
|
|
||||||
lda bCTRLC
|
ldy #bCTRLC
|
||||||
|
lda (pData),y
|
||||||
bne CS.RUN.ERROR
|
bne CS.RUN.ERROR
|
||||||
lda TimeOut
|
ldy #TimeOut
|
||||||
|
lda (pData),y
|
||||||
bne CS.RUN.WAIT
|
bne CS.RUN.WAIT
|
||||||
|
|
||||||
>PUSHB DST.IP+3
|
ldy #3
|
||||||
>PUSHB DST.IP+2
|
>PUSHB (pData),y DST.IP+3
|
||||||
>PUSHB DST.IP+1
|
dey
|
||||||
>PUSHB DST.IP
|
>PUSHB (pData),y DST.IP+2
|
||||||
|
dey
|
||||||
|
>PUSHB (pData),y DST.IP+1
|
||||||
|
>PUSHB (pData) DST.IP
|
||||||
>PUSHW L.MSG2
|
>PUSHW L.MSG2
|
||||||
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
||||||
|
|
||||||
.1 lda bCTRLC
|
.1 ldy #bCTRLC
|
||||||
|
lda (pData),y
|
||||||
bne CS.RUN.ERROR
|
bne CS.RUN.ERROR
|
||||||
lda TimeOut
|
ldy #TimeOut
|
||||||
|
lda (pData),y
|
||||||
beq .2
|
beq .2
|
||||||
|
|
||||||
jsr A2osX.SLEEP
|
jsr A2osX.SLEEP
|
||||||
|
@ -214,14 +264,16 @@ CS.RUN.WAIT jsr A2osX.SLEEP
|
||||||
CS.RUN.ERROR sec
|
CS.RUN.ERROR sec
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.EVENT lda (pEvent)
|
CS.DOEVENT lda (pEvent)
|
||||||
and #S.EVT.F.TIMER is it a TIMER event?
|
and #S.EVT.F.TIMER is it a TIMER event?
|
||||||
beq .1 no....
|
beq .1 no....
|
||||||
|
|
||||||
lda TimeOut
|
ldy #TimeOut
|
||||||
|
lda (pData),y
|
||||||
beq .10
|
beq .10
|
||||||
|
|
||||||
dec TimeOut
|
dec
|
||||||
|
sta (pData),y
|
||||||
.10 sec do not discard TIMER event
|
.10 sec do not discard TIMER event
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
@ -232,7 +284,7 @@ CS.EVENT lda (pEvent)
|
||||||
ldy #S.EVT.hDEV is Event from active IN device?
|
ldy #S.EVT.hDEV is Event from active IN device?
|
||||||
lda (pEvent),y
|
lda (pEvent),y
|
||||||
ldy #S.PS.hINDEV
|
ldy #S.PS.hINDEV
|
||||||
cmp (pPsContext),y
|
cmp (pPs),y
|
||||||
bne .9
|
bne .9
|
||||||
|
|
||||||
ldy #S.EVT.DATAHI is it an O or SAPPLE key ?
|
ldy #S.EVT.DATAHI is it an O or SAPPLE key ?
|
||||||
|
@ -245,7 +297,8 @@ CS.EVENT lda (pEvent)
|
||||||
bne .8
|
bne .8
|
||||||
|
|
||||||
lda #$FF
|
lda #$FF
|
||||||
sta bCTRLC
|
ldy #bCTRLC
|
||||||
|
sta (pData),y
|
||||||
bra .8
|
bra .8
|
||||||
|
|
||||||
.2 lda (pEvent)
|
.2 lda (pEvent)
|
||||||
|
@ -275,15 +328,19 @@ CS.EVENT lda (pEvent)
|
||||||
|
|
||||||
ldy #S.ICMP.IDENTIFIER
|
ldy #S.ICMP.IDENTIFIER
|
||||||
lda (ZPFrameBase1),y
|
lda (ZPFrameBase1),y
|
||||||
cmp Identifier
|
tax
|
||||||
bne .9
|
|
||||||
iny
|
iny
|
||||||
lda (ZPFrameBase1),y
|
lda (ZPFrameBase1),y
|
||||||
cmp Identifier+1
|
ldy #Identifier+1
|
||||||
|
cmp (pData),y
|
||||||
bne .9
|
bne .9
|
||||||
|
dey
|
||||||
|
txa
|
||||||
|
cmp (pData),y
|
||||||
|
bne .9
|
||||||
|
|
||||||
jsr CS.EVENT.REPLY
|
jsr CS.EVENT.REPLY
|
||||||
.8 >SYSCALL SYS.DestroyEvent
|
.8 clc
|
||||||
clc
|
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.9 sec
|
.9 sec
|
||||||
|
@ -304,7 +361,7 @@ CS.EVENT.REPLY lda #PING.TIMEOUT
|
||||||
adc #K.TIMER16RESOLUTION*20
|
adc #K.TIMER16RESOLUTION*20
|
||||||
sta TimeOut.ms
|
sta TimeOut.ms
|
||||||
bcc .2
|
bcc .2
|
||||||
inc TimeOut+1+1
|
inc TimeOut
|
||||||
.2 dey
|
.2 dey
|
||||||
bne .1
|
bne .1
|
||||||
|
|
||||||
|
@ -329,7 +386,10 @@ CS.EVENT.REPLY lda #PING.TIMEOUT
|
||||||
>PUSHW L.MSG3
|
>PUSHW L.MSG3
|
||||||
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
||||||
|
|
||||||
inc bReply
|
ldy #bReply
|
||||||
|
lda (pData),y
|
||||||
|
inc
|
||||||
|
sta (pData),y
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.QUIT lda hLIBTCPIP
|
CS.QUIT lda hLIBTCPIP
|
||||||
|
@ -347,20 +407,23 @@ MSG0 >CSTRING "%S: Unknown host\n"
|
||||||
MSG1 >CSTRING "PING %d.%d.%d.%d (%S)\n"
|
MSG1 >CSTRING "PING %d.%d.%d.%d (%S)\n"
|
||||||
MSG2 >CSTRING "%d.%d.%d.%d: TimeOut/Host unreachable\n"
|
MSG2 >CSTRING "%d.%d.%d.%d: TimeOut/Host unreachable\n"
|
||||||
MSG3 >CSTRING "32 bytes from %d.%d.%d.%d, icmp_seq=%D, ttl=%d, time=%D ms\n"
|
MSG3 >CSTRING "32 bytes from %d.%d.%d.%d, icmp_seq=%D, ttl=%d, time=%D ms\n"
|
||||||
*--------------------------------------
|
|
||||||
DS.START
|
|
||||||
hLIBSTR .BS 1
|
hLIBSTR .BS 1
|
||||||
hLIBTCPIP .BS 1
|
hLIBTCPIP .BS 1
|
||||||
hDev .BS 1
|
hDev .BS 1
|
||||||
|
TimeOut.ms .BS 2
|
||||||
|
*--------------------------------------
|
||||||
|
.DUMMY
|
||||||
|
.OR 0
|
||||||
|
DS.START
|
||||||
DST.IP .BS 4
|
DST.IP .BS 4
|
||||||
hFrame .BS 1
|
hFrame .BS 1
|
||||||
TimeOut .BS 1
|
TimeOut .BS 1
|
||||||
TimeOut.ms .BS 2
|
|
||||||
Identifier .BS 2
|
Identifier .BS 2
|
||||||
Sequence .BS 2
|
Sequence .BS 2
|
||||||
bCTRLC .BS 1
|
bCTRLC .BS 1
|
||||||
bReply .BS 1
|
bReply .BS 1
|
||||||
DS.END
|
DS.END
|
||||||
|
.ED
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
MAN
|
MAN
|
||||||
SAVE BIN/PING.S
|
SAVE BIN/PING.S
|
||||||
|
|
50
BIN/PS.S.txt
50
BIN/PS.S.txt
|
@ -1,15 +1,16 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /A2OSX.BUILD
|
PREFIX /A2OSX.SRC
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
.LIST OFF
|
.LIST OFF
|
||||||
.OP 65C02
|
.OP 65C02
|
||||||
.OR $2000
|
.OR $2000
|
||||||
.TF BIN/PS
|
.TF /A2OSX.BOOT/BIN/PS
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.INB INC/MACROS.I
|
.INB INC/MACROS.I
|
||||||
.INB INC/A2OSX.I
|
.INB INC/A2OSX.I
|
||||||
|
.INB INC/A2OSX.API.I
|
||||||
.INB INC/KERNEL.I
|
.INB INC/KERNEL.I
|
||||||
.INB INC/LIBSTR.I
|
.INB INC/LIBSTR.I
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
@ -17,17 +18,20 @@ ZPPTR1 .EQ ZPBIN
|
||||||
ZPPTR2 .EQ ZPBIN+2
|
ZPPTR2 .EQ ZPBIN+2
|
||||||
ZPPTR3 .EQ ZPBIN+4
|
ZPPTR3 .EQ ZPBIN+4
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* Main entry point
|
* File Header (16 Bytes)
|
||||||
*--------------------------------------
|
|
||||||
* Code signature and INIT table
|
|
||||||
*--------------------------------------
|
|
||||||
* CLD $D8
|
|
||||||
* JMP (*,x) $7C
|
|
||||||
* #JMPTABLE
|
|
||||||
* /JMPTABLE
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.START cld
|
CS.START cld
|
||||||
jmp (.1,x)
|
jmp (.1,x)
|
||||||
|
.DA #$61 6502,Level 1 (65c02)
|
||||||
|
.DA #1 BIN Layout Version 1
|
||||||
|
.DA 0
|
||||||
|
.DA CS.END-CS.START Code Length To Relocate
|
||||||
|
.DA 0 Data Segment to Allocate
|
||||||
|
.DA 0
|
||||||
|
.DA 0
|
||||||
|
*--------------------------------------
|
||||||
|
* Relocation Table
|
||||||
|
*--------------------------------------
|
||||||
.1 .DA CS.INIT
|
.1 .DA CS.INIT
|
||||||
.DA CS.RUN
|
.DA CS.RUN
|
||||||
.DA CS.DOEVENT
|
.DA CS.DOEVENT
|
||||||
|
@ -37,13 +41,14 @@ L.MSG0 .DA MSG0
|
||||||
L.MSG1 .DA MSG1
|
L.MSG1 .DA MSG1
|
||||||
L.MSG2 .DA MSG2
|
L.MSG2 .DA MSG2
|
||||||
.DA 0
|
.DA 0
|
||||||
.DA CS.END-CS.START Code Length To Relocate
|
|
||||||
.DA 0 Data Segment to Allocate
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.INIT >LIBLOADP L.LIBSTR
|
CS.INIT >LDYA L.LIBSTR
|
||||||
|
>LOADLIBYA
|
||||||
sta hLibStr
|
sta hLibStr
|
||||||
|
clc
|
||||||
>LDYAI TSKMGR.TABLE
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
CS.RUN >LDYAI TSKMGR.TABLE+S.PS.SIZE
|
||||||
>STYA ZPPTR1
|
>STYA ZPPTR1
|
||||||
stz PS.COUNT
|
stz PS.COUNT
|
||||||
|
|
||||||
|
@ -52,13 +57,17 @@ CS.INIT >LIBLOADP L.LIBSTR
|
||||||
|
|
||||||
.1 lda (ZPPTR1)
|
.1 lda (ZPPTR1)
|
||||||
bpl .4
|
bpl .4
|
||||||
|
|
||||||
ldy #S.PS.hARGS
|
ldy #S.PS.hARGS
|
||||||
lda (ZPPTR1),y
|
lda (ZPPTR1),y
|
||||||
beq .2
|
beq .2
|
||||||
|
|
||||||
>SYSCALL SYS.GetMemPtrA
|
>SYSCALL SYS.GetMemPtrA
|
||||||
>PUSHYA
|
>PUSHYA
|
||||||
bra .3
|
bra .3
|
||||||
|
|
||||||
.2 >PUSHW L.MSG2
|
.2 >PUSHW L.MSG2
|
||||||
|
|
||||||
.3 ldy #S.PS.hCMD
|
.3 ldy #S.PS.hCMD
|
||||||
lda (ZPPTR1),y
|
lda (ZPPTR1),y
|
||||||
>SYSCALL SYS.GetMemPtrA
|
>SYSCALL SYS.GetMemPtrA
|
||||||
|
@ -83,17 +92,16 @@ CS.INIT >LIBLOADP L.LIBSTR
|
||||||
sta ZPPTR1
|
sta ZPPTR1
|
||||||
bcc .5
|
bcc .5
|
||||||
inc ZPPTR1+1
|
inc ZPPTR1+1
|
||||||
|
|
||||||
.5 inc PS.COUNT
|
.5 inc PS.COUNT
|
||||||
lda PS.COUNT
|
lda PS.COUNT
|
||||||
cmp #K.PS.MAX
|
cmp #K.PS.MAX
|
||||||
beq .8
|
bne .1
|
||||||
jmp .1
|
|
||||||
|
|
||||||
.8 lda #0 tell TSKMGR that all done ok, but
|
lda #0 tell TSKMGR that all done ok, but
|
||||||
sec we do not want to stay in memory
|
sec we do not want to stay in memory
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.RUN
|
|
||||||
CS.DOEVENT clc
|
CS.DOEVENT clc
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
@ -106,8 +114,8 @@ CS.END
|
||||||
hLibStr .BS 1
|
hLibStr .BS 1
|
||||||
PS.COUNT .BS 1
|
PS.COUNT .BS 1
|
||||||
LIBSTR >PSTRING "libstr.o"
|
LIBSTR >PSTRING "libstr.o"
|
||||||
MSG0 >CSTRING "hPS Flags PID CMD ARGS\n"
|
MSG0 >CSTRING "ID Flags PID CMD ARGS\n"
|
||||||
MSG1 >CSTRING " %03d %b $%h %16S %32S\n"
|
MSG1 >CSTRING "%03d %b %03d %16S %32S\n"
|
||||||
MSG2 >PSTRING "(none)"
|
MSG2 >PSTRING "(none)"
|
||||||
MAN
|
MAN
|
||||||
SAVE BIN/PS.S
|
SAVE BIN/PS.S
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /A2OSX.BUILD
|
PREFIX /A2OSX.SRC
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /A2OSX.BUILD
|
PREFIX /A2OSX.SRC
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
|
@ -1,45 +1,73 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /A2OSX.BUILD
|
PREFIX /A2OSX.SRC
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
.LIST OFF
|
.LIST OFF
|
||||||
.OP 65C02
|
.OP 65C02
|
||||||
.OR $2000
|
.OR $2000
|
||||||
.TF DRV/CONSOLE.DRV
|
.TF /A2OSX.BOOT/DRV/CONSOLE.DRV
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.INB INC/MACROS.I
|
.INB INC/MACROS.I
|
||||||
.INB INC/A2OSX.I
|
.INB INC/A2OSX.I
|
||||||
|
.INB INC/A2OSX.API.I
|
||||||
|
.INB INC/KERNEL.I
|
||||||
.INB INC/IO.I
|
.INB INC/IO.I
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
CURSOR.BLINK.SPEED .EQ 2
|
||||||
|
*--------------------------------------
|
||||||
ZPBASL1 .EQ ZPDRV
|
ZPBASL1 .EQ ZPDRV
|
||||||
ZPBASL2 .EQ ZPDRV+2
|
ZPBASL2 .EQ ZPDRV+2
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* Main DRV entry point
|
* File Header (16 Bytes)
|
||||||
* input :
|
|
||||||
* X = CMD
|
|
||||||
* 0 : OPEN
|
|
||||||
* 2 : GETEVENT
|
|
||||||
* 6 : OUT
|
|
||||||
* 8 : CLOSE
|
|
||||||
*--------------------------------------
|
|
||||||
* CLD $D8
|
|
||||||
* JMP (*,x) $7C
|
|
||||||
* #JMPTABLE
|
|
||||||
* /JMPTABLE
|
|
||||||
*--------------------------------------
|
|
||||||
CURSOR.BLINK.SPEED .EQ 2
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.START cld
|
CS.START cld
|
||||||
jmp (.1,x)
|
jmp Dev.Detect cld,jmp abs=DRV
|
||||||
.1 .DA OPEN
|
.DA #$61 6502,Level 1 (65c02)
|
||||||
|
.DA #1 DRV Layout Version 1
|
||||||
|
.DA 0
|
||||||
|
.DA CS.END-CS.START Code Length
|
||||||
|
.DA DEV.HEADER-CS.START Device Header Offset
|
||||||
|
.DA DRV.CS.START-CS.START Driver Code Offset
|
||||||
|
.DA DRV.CS.END-DRV.CS.START Drv Code Length
|
||||||
|
*--------------------------------------
|
||||||
|
* Relocation Table
|
||||||
|
*--------------------------------------
|
||||||
|
L.MSG.DETECT .DA MSG.DETECT
|
||||||
|
.DA 0 End Of Reloc Table
|
||||||
|
*--------------------------------------
|
||||||
|
Dev.Detect >LDYA L.MSG.DETECT
|
||||||
|
>SYSCALL SYS.SysScrPPSTRYA
|
||||||
|
|
||||||
|
lda A2osX.SCREENS
|
||||||
|
ora #A2osX.SCREENS.C
|
||||||
|
sta A2osX.SCREENS
|
||||||
|
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
CS.END
|
||||||
|
MSG.DETECT >PSTRING "\nApple IIe/IIc 80 Col Driver."
|
||||||
|
*--------------------------------------
|
||||||
|
* Device Header (16 Bytes)
|
||||||
|
*--------------------------------------
|
||||||
|
DEV.HEADER cld
|
||||||
|
jmp (DRV.CS.START,x)
|
||||||
|
.DA #S.DEV.F.EVENT+S.DEV.F.COUT+S.DEV.F.CHAR
|
||||||
|
>PSTRING "CON" NAME
|
||||||
|
.HS 00 NAME must Be 5 bytes long
|
||||||
|
.HS 00.00
|
||||||
|
.HS 00.00.00.00
|
||||||
|
*--------------------------------------
|
||||||
|
* Driver Code
|
||||||
|
*--------------------------------------
|
||||||
|
DRV.CS.START .DA OPEN
|
||||||
.DA GETEVENT
|
.DA GETEVENT
|
||||||
.DA OUT
|
.DA COUT
|
||||||
.DA CLOSE
|
.DA CLOSE
|
||||||
.DA GETINFO
|
.DA GETINFO
|
||||||
|
.DA IRQ
|
||||||
|
L.DEVINFO .DA DEVINFO
|
||||||
.DA 0 end or relocation
|
.DA 0 end or relocation
|
||||||
.DA CS.END-CS.START Code Length To Relocate
|
|
||||||
.DA 0 Data Segemnt to Allocate
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
OPEN stz CURON
|
OPEN stz CURON
|
||||||
lda #$80
|
lda #$80
|
||||||
|
@ -47,31 +75,10 @@ OPEN stz CURON
|
||||||
|
|
||||||
jsr HOME
|
jsr HOME
|
||||||
|
|
||||||
lda #S.DEV.F.CHAR+S.DEV.F.EVENT+S.DEV.F.OUT
|
|
||||||
sta (pDevContext)
|
|
||||||
|
|
||||||
ldy #S.DEV.NAME
|
|
||||||
ldx #0
|
|
||||||
.1 lda DEVNAME,x
|
|
||||||
sta (pDevContext),y
|
|
||||||
cpx DEVNAME
|
|
||||||
beq .8
|
|
||||||
inx
|
|
||||||
iny
|
|
||||||
bne .1
|
|
||||||
|
|
||||||
.8 lda A2osX.SCREENS
|
|
||||||
ora #A2osX.SCREENS.C
|
|
||||||
sta A2osX.SCREENS
|
|
||||||
|
|
||||||
lda #A2osX.SCREENS.C
|
|
||||||
>SYSCALL SYS.ScreenSelectA
|
|
||||||
|
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
GETEVENT >PULLW pEvent
|
GETEVENT lda A2osX.TIMER16
|
||||||
lda A2osX.TIMER16
|
|
||||||
and #CURSOR.BLINK.SPEED
|
and #CURSOR.BLINK.SPEED
|
||||||
eor CURON
|
eor CURON
|
||||||
beq .9
|
beq .9
|
||||||
|
@ -81,24 +88,24 @@ GETEVENT >PULLW pEvent
|
||||||
sec
|
sec
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
OUT >PULLA
|
COUT jsr COUT1
|
||||||
jsr COUT
|
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CLOSE lda A2osX.SCREENS
|
CLOSE
|
||||||
and #$FF^A2osX.SCREENS.C
|
* lda A2osX.SCREENS
|
||||||
sta A2osX.SCREENS
|
* and #$FF^A2osX.SCREENS.C
|
||||||
|
* sta A2osX.SCREENS
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
GETINFO clc
|
GETINFO >LDYA L.DEVINFO
|
||||||
|
IRQ clc
|
||||||
rts
|
rts
|
||||||
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* PRIVATE
|
* PRIVATE
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
COUT cmp #8
|
COUT1 cmp #8
|
||||||
bne .2
|
bne .2
|
||||||
ldx CH
|
ldx CH
|
||||||
beq .10
|
beq .10
|
||||||
|
@ -113,7 +120,8 @@ COUT cmp #8
|
||||||
sta CH
|
sta CH
|
||||||
dec CV
|
dec CV
|
||||||
|
|
||||||
.12 lda #$A0
|
.12 lda #$20
|
||||||
|
ora INVFLG
|
||||||
ldx CH
|
ldx CH
|
||||||
ldy CV
|
ldy CV
|
||||||
jsr SetCharAtXY
|
jsr SetCharAtXY
|
||||||
|
@ -121,6 +129,7 @@ COUT cmp #8
|
||||||
|
|
||||||
.2 cmp #13
|
.2 cmp #13
|
||||||
beq CROUT
|
beq CROUT
|
||||||
|
ora INVFLG
|
||||||
ldx CH
|
ldx CH
|
||||||
ldy CV
|
ldy CV
|
||||||
jsr SetCharAtXY
|
jsr SetCharAtXY
|
||||||
|
@ -131,14 +140,19 @@ FSOUT ldx CH
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CROUT jsr CLREOL
|
CROUT jsr CLREOL
|
||||||
|
*--------------------------------------
|
||||||
CROUT1 stz CH
|
CROUT1 stz CH
|
||||||
ldy CV
|
ldy CV
|
||||||
cpy #23
|
cpy #23
|
||||||
beq SCROLL.UP
|
beq SCROLL.UP
|
||||||
inc CV
|
inc CV
|
||||||
rts
|
rts
|
||||||
|
*--------------------------------------
|
||||||
SCROLL.UP ldx #0
|
SCROLL.UP ldx #0
|
||||||
|
|
||||||
|
lda RD80STORE
|
||||||
|
pha
|
||||||
|
|
||||||
sta SET80STORE
|
sta SET80STORE
|
||||||
|
|
||||||
.1 lda BASEL,x
|
.1 lda BASEL,x
|
||||||
|
@ -169,13 +183,18 @@ SCROLL.UP ldx #0
|
||||||
|
|
||||||
cpx #23
|
cpx #23
|
||||||
bne .1
|
bne .1
|
||||||
|
jsr CLREOL
|
||||||
|
pla
|
||||||
|
bmi .8
|
||||||
|
sta CLR80STORE
|
||||||
|
|
||||||
|
.8 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CLREOL ldx CH
|
CLREOL ldx CH
|
||||||
.1 phx
|
.1 phx
|
||||||
ldy CV
|
ldy CV
|
||||||
lda #$A0
|
lda #$20
|
||||||
|
ora INVFLG
|
||||||
jsr SetCharAtXY
|
jsr SetCharAtXY
|
||||||
plx
|
plx
|
||||||
inx
|
inx
|
||||||
|
@ -186,8 +205,6 @@ CLREOL ldx CH
|
||||||
HOME stz CH
|
HOME stz CH
|
||||||
stz CV
|
stz CV
|
||||||
|
|
||||||
lda RDPAGE2
|
|
||||||
pha
|
|
||||||
lda RD80STORE
|
lda RD80STORE
|
||||||
pha
|
pha
|
||||||
|
|
||||||
|
@ -221,23 +238,15 @@ HOME stz CH
|
||||||
bpl .1
|
bpl .1
|
||||||
|
|
||||||
pla
|
pla
|
||||||
bmi .4
|
bmi .8
|
||||||
sta CLR80STORE
|
sta CLR80STORE
|
||||||
bra .5
|
|
||||||
.4 sta SET80STORE
|
|
||||||
|
|
||||||
.5 pla
|
|
||||||
bmi .6
|
|
||||||
sta CLRPAGE2
|
|
||||||
bra .8
|
|
||||||
.6 sta SETPAGE2
|
|
||||||
|
|
||||||
.8 rts
|
.8 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CUROFF lda CURON
|
CUROFF lda CURON
|
||||||
beq CUREXIT.RTS
|
beq CUREXIT.RTS
|
||||||
|
|
||||||
CURBLNK lda A2osX.ACTIVESCRN
|
CURBLNK lda A2osX.ASCREEN
|
||||||
and #A2osX.SCREENS.C
|
and #A2osX.SCREENS.C
|
||||||
bne CURBLNK1
|
bne CURBLNK1
|
||||||
|
|
||||||
|
@ -268,8 +277,6 @@ CUREXIT lda CURON
|
||||||
CUREXIT.RTS rts
|
CUREXIT.RTS rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
SetCharAtXY pha
|
SetCharAtXY pha
|
||||||
lda RDPAGE2
|
|
||||||
pha
|
|
||||||
lda RD80STORE
|
lda RD80STORE
|
||||||
pha
|
pha
|
||||||
sta SET80STORE
|
sta SET80STORE
|
||||||
|
@ -287,23 +294,16 @@ SetCharAtXY pha
|
||||||
lda BASEH,y
|
lda BASEH,y
|
||||||
sta ZPBASL1+1
|
sta ZPBASL1+1
|
||||||
|
|
||||||
ply
|
|
||||||
plx
|
plx
|
||||||
pla
|
pla
|
||||||
sta (ZPBASL1)
|
sta (ZPBASL1)
|
||||||
tya
|
txa
|
||||||
bmi .3
|
bmi .8
|
||||||
sta CLR80STORE
|
sta CLR80STORE
|
||||||
.3 txa
|
|
||||||
bpl .4
|
.8 rts
|
||||||
sta SETPAGE2
|
|
||||||
rts
|
|
||||||
.4 sta CLRPAGE2
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
GetCharAtXY lda RDPAGE2
|
GetCharAtXY lda RD80STORE
|
||||||
pha
|
|
||||||
lda RD80STORE
|
|
||||||
pha
|
pha
|
||||||
sta SET80STORE
|
sta SET80STORE
|
||||||
txa
|
txa
|
||||||
|
@ -323,28 +323,22 @@ GetCharAtXY lda RDPAGE2
|
||||||
lda (ZPBASL1)
|
lda (ZPBASL1)
|
||||||
|
|
||||||
plx
|
plx
|
||||||
bmi .3
|
bmi .8
|
||||||
sta CLR80STORE
|
sta CLR80STORE
|
||||||
|
|
||||||
.3 plx
|
.8 rts
|
||||||
bpl .4
|
|
||||||
|
|
||||||
sta SETPAGE2
|
|
||||||
rts
|
|
||||||
|
|
||||||
.4 sta CLRPAGE2
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.END
|
DRV.CS.END
|
||||||
DEVNAME >PSTRING "CON"
|
BASEL .HS 00.80.00.80.00.80.00.80.28.A8.28.A8.28.A8.28.A8.50.D0.50.D0.50.D0.50.D0
|
||||||
|
BASEH .HS 04.04.05.05.06.06.07.07.04.04.05.05.06.06.07.07.04.04.05.05.06.06.07.07
|
||||||
CH .BS 1
|
CH .BS 1
|
||||||
CV .BS 1
|
CV .BS 1
|
||||||
INVFLG .BS 1
|
INVFLG .BS 1
|
||||||
CURON .BS 1
|
CURON .BS 1
|
||||||
CURCHAR .BS 1
|
CURCHAR .BS 1
|
||||||
*--------------------------------------
|
DEVINFO .DA #S.DEVINFO.TYPE.CHAR
|
||||||
BASEL .HS 00.80.00.80.00.80.00.80.28.A8.28.A8.28.A8.28.A8.50.D0.50.D0.50.D0.50.D0
|
.DA #80
|
||||||
BASEH .HS 04.04.05.05.06.06.07.07.04.04.05.05.06.06.07.07.04.04.05.05.06.06.07.07
|
.DA #24
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
MAN
|
MAN
|
||||||
SAVE DRV/CONSOLE.DRV.S
|
SAVE DRV/CONSOLE.DRV.S
|
||||||
|
|
|
@ -1,73 +1,81 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /A2OSX.BUILD
|
PREFIX /A2OSX.SRC
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
.LIST OFF
|
.LIST OFF
|
||||||
.OP 65C02
|
.OP 65C02
|
||||||
.OR $2000
|
.OR $2000
|
||||||
.TF DRV/DHGR.DRV
|
.TF /A2OSX.BOOT/DRV/DHGR.DRV
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.INB INC/MACROS.I
|
.INB INC/MACROS.I
|
||||||
.INB INC/A2OSX.I
|
.INB INC/A2OSX.I
|
||||||
|
.INB INC/A2OSX.API.I
|
||||||
|
.INB INC/KERNEL.I
|
||||||
.INB INC/IO.I
|
.INB INC/IO.I
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
ZPBASE .EQ ZPDRV
|
ZPBASE .EQ ZPDRV
|
||||||
ZPCOLOR .EQ ZPDRV+2
|
ZPCOLOR .EQ ZPDRV+2
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* Main DRV entry point
|
* File Header (16 Bytes)
|
||||||
* input :
|
|
||||||
* X = CMD
|
|
||||||
* 0 : OPEN
|
|
||||||
* 2 : GETEVENT
|
|
||||||
* 6 : OUT
|
|
||||||
* 8 : CLOSE
|
|
||||||
*--------------------------------------
|
|
||||||
* CLD $D8
|
|
||||||
* JMP (*,x) $7C
|
|
||||||
* #JMPTABLE
|
|
||||||
* /JMPTABLE
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.START cld
|
CS.START cld
|
||||||
jmp (.1,x)
|
jmp Dev.Detect cld,jmp abs=DRV
|
||||||
.1 .DA OPEN
|
.DA #$61 6502,Level 1 (65c02)
|
||||||
|
.DA #1 DRV Layout Version 1
|
||||||
|
.DA 0
|
||||||
|
.DA CS.END-CS.START Code Length
|
||||||
|
.DA DEV.HEADER-CS.START Device Header Offset
|
||||||
|
.DA DRV.CS.START-CS.START Driver Code Offset
|
||||||
|
.DA DRV.CS.END-DRV.CS.START Drv Code Length
|
||||||
|
*--------------------------------------
|
||||||
|
* Relocation Table
|
||||||
|
*--------------------------------------
|
||||||
|
L.MSG.DETECT .DA MSG.DETECT
|
||||||
|
.DA 0 End Of Reloc Table
|
||||||
|
*--------------------------------------
|
||||||
|
Dev.Detect >LDYA L.MSG.DETECT
|
||||||
|
>SYSCALL SYS.SysScrPPSTRYA
|
||||||
|
|
||||||
|
lda A2osX.SCREENS
|
||||||
|
ora #A2osX.SCREENS.G
|
||||||
|
sta A2osX.SCREENS
|
||||||
|
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
CS.END
|
||||||
|
MSG.DETECT >PSTRING "\nApple IIe/IIc DoubleHGR Driver."
|
||||||
|
*--------------------------------------
|
||||||
|
* Device Header (16 Bytes)
|
||||||
|
*--------------------------------------
|
||||||
|
DEV.HEADER cld
|
||||||
|
jmp (DRV.CS.START,x)
|
||||||
|
.DA #0
|
||||||
|
>PSTRING "GFX" NAME
|
||||||
|
.HS 00 NAME must Be 5 bytes long
|
||||||
|
.HS 00.00
|
||||||
|
.HS 00.00.00.00
|
||||||
|
*--------------------------------------
|
||||||
|
* Driver Code
|
||||||
|
*--------------------------------------
|
||||||
|
DRV.CS.START .DA OPEN
|
||||||
.DA GETEVENT
|
.DA GETEVENT
|
||||||
.DA OUT
|
.DA COUT
|
||||||
.DA CLOSE
|
.DA CLOSE
|
||||||
.DA GETINFO
|
.DA GETINFO
|
||||||
|
.DA IRQ
|
||||||
.DA SETPIXEL
|
.DA SETPIXEL
|
||||||
.DA GETPIXEL
|
.DA GETPIXEL
|
||||||
.DA HLINE
|
.DA HLINE
|
||||||
.DA VLINE
|
.DA VLINE
|
||||||
.DA FILLREC
|
|
||||||
.DA BITBLT
|
.DA BITBLT
|
||||||
|
.DA FILLREC
|
||||||
L.DEVINFO .DA DEVINFO
|
L.DEVINFO .DA DEVINFO
|
||||||
.DA 0 end or relocation
|
.DA 0 end or relocation
|
||||||
.DA CS.END-CS.START Code Length To Relocate
|
|
||||||
.DA DS.END-DS.START Data Segment to Allocate
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
OPEN lda #S.DEV.F.GFX
|
OPEN sta SETHIRES
|
||||||
sta (pDevContext)
|
sta SET80STORE prepare for page switching
|
||||||
|
|
||||||
ldy #S.DEV.NAME
|
|
||||||
ldx #0
|
|
||||||
.1 lda DEVNAME,x
|
|
||||||
sta (pDevContext),y
|
|
||||||
cpx DEVNAME
|
|
||||||
beq .8
|
|
||||||
inx
|
|
||||||
iny
|
|
||||||
bne .1
|
|
||||||
|
|
||||||
|
|
||||||
.8 lda A2osX.SCREENS
|
|
||||||
ora #A2osX.SCREENS.G
|
|
||||||
sta A2osX.SCREENS
|
|
||||||
|
|
||||||
lda #A2osX.SCREENS.G
|
|
||||||
>SYSCALL SYS.ScreenSelectA
|
|
||||||
|
|
||||||
sta SET80STORE
|
|
||||||
ldx #192
|
ldx #192
|
||||||
|
|
||||||
.81 dex
|
.81 dex
|
||||||
|
@ -77,61 +85,37 @@ OPEN lda #S.DEV.F.GFX
|
||||||
lda BASEH,x
|
lda BASEH,x
|
||||||
sta ZPBASE+1
|
sta ZPBASE+1
|
||||||
|
|
||||||
lda #$D5
|
lda #$55
|
||||||
|
* lda #$00
|
||||||
|
|
||||||
ldy #39
|
ldy #39
|
||||||
sta SETPAGE2
|
sta SETPAGE2
|
||||||
.82 sta (ZPBASE),y
|
.82 sta (ZPBASE),y
|
||||||
dey
|
dey
|
||||||
bpl .82
|
bpl .82
|
||||||
|
|
||||||
lda #$AA
|
lda #$2A
|
||||||
|
* lda #$00
|
||||||
|
|
||||||
ldy #39
|
ldy #39
|
||||||
sta CLRPAGE2
|
sta CLRPAGE2
|
||||||
.83 sta (ZPBASE),y
|
.83 sta (ZPBASE),y
|
||||||
dey
|
dey
|
||||||
bpl .83
|
bpl .83
|
||||||
|
|
||||||
dex
|
|
||||||
|
|
||||||
lda BASEL,x
|
|
||||||
sta ZPBASE
|
|
||||||
lda BASEH,x
|
|
||||||
sta ZPBASE+1
|
|
||||||
|
|
||||||
lda #$2A
|
|
||||||
|
|
||||||
ldy #39
|
|
||||||
sta SETPAGE2
|
|
||||||
.84 sta (ZPBASE),y
|
|
||||||
dey
|
|
||||||
bpl .84
|
|
||||||
|
|
||||||
lda #$55
|
|
||||||
|
|
||||||
ldy #39
|
|
||||||
sta CLRPAGE2
|
|
||||||
.85 sta (ZPBASE),y
|
|
||||||
dey
|
|
||||||
bpl .85
|
|
||||||
|
|
||||||
txa
|
txa
|
||||||
bne .81
|
bne .81
|
||||||
|
|
||||||
>DEBUG
|
>DEBUG
|
||||||
|
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
GETEVENT
|
GETEVENT
|
||||||
OUT clc
|
COUT
|
||||||
|
IRQ sec
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CLOSE lda A2osX.SCREENS
|
CLOSE clc
|
||||||
and #$FF^A2osX.SCREENS.G
|
|
||||||
sta A2osX.SCREENS
|
|
||||||
clc
|
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
GETINFO >LDYA L.DEVINFO
|
GETINFO >LDYA L.DEVINFO
|
||||||
|
@ -139,104 +123,139 @@ GETINFO >LDYA L.DEVINFO
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* SETPIXEL
|
* SETPIXEL
|
||||||
*--------------------------------------
|
|
||||||
* PULLB = X.LO
|
|
||||||
* PULLB = X.HI
|
|
||||||
* PULLB = Y
|
|
||||||
* PULLB = Mode
|
* PULLB = Mode
|
||||||
* 00000001=mono
|
* 00000001=B/W
|
||||||
* 00000010=16 colors
|
* 00000010=16 colors
|
||||||
* 1000000=xor (mono on 1 bit)
|
* 1000000=xor (mono on 1 bit)
|
||||||
|
* PULLW = X
|
||||||
|
* PULLB = Y
|
||||||
* PULLB = Color (if not xor)
|
* PULLB = Color (if not xor)
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
SETPIXEL >PULLA X.LO
|
SETPIXEL sta SETHIRES
|
||||||
tax
|
sta SET80STORE prepare for page switching
|
||||||
>PULLA X.HI
|
|
||||||
|
>PULLA Pull Mode
|
||||||
|
and #$FF
|
||||||
|
bpl SETPIXEL.1
|
||||||
|
|
||||||
|
SETPIXEL.XOR >PULLYA Y=X.LO,A=X.HI
|
||||||
lsr if 256 =< x < 511
|
lsr if 256 =< x < 511
|
||||||
bcs .1
|
bcs .1
|
||||||
lsr
|
lsr
|
||||||
bcs .2 if 512 < x
|
bcs .2 if 512 < x
|
||||||
ldy DIV7.0,x
|
lda DIV7.0,y
|
||||||
lda MOD7.0,x
|
ldx MOD7.0,y
|
||||||
bra .3
|
bra .3
|
||||||
|
|
||||||
.1 ldy DIV7.256,x
|
.1 lda DIV7.256,y
|
||||||
lda MOD7.256,x
|
ldx MOD7.256,y
|
||||||
bra .3
|
bra .3
|
||||||
|
|
||||||
.2 ldy DIV7.512,x
|
.2 lda DIV7.512,y
|
||||||
lda MOD7.512,x
|
ldx MOD7.512,y
|
||||||
|
|
||||||
.3 pha save MOD,y=DIV
|
.3 lsr
|
||||||
|
tay
|
||||||
|
bcs .4 odd=main ram
|
||||||
|
sta SETPAGE2
|
||||||
|
bra .5
|
||||||
|
.4 sta CLRPAGE2
|
||||||
|
|
||||||
|
.5 >PULLA Pull Y
|
||||||
|
tax
|
||||||
|
lda BASEL,x setup line Base Ptr
|
||||||
|
sta ZPBASE
|
||||||
|
lda BASEH,x
|
||||||
|
sta ZPBASE+1
|
||||||
|
|
||||||
|
lda (ZPBASE),y
|
||||||
|
eor Mono.Masks,x
|
||||||
|
sta (ZPBASE),y
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
SETPIXEL.1 lsr
|
||||||
|
bcc SETPIXEL.COLOR
|
||||||
|
|
||||||
|
>PULLYA Y=X.LO,A=X.HI
|
||||||
|
lsr if 256 =< x < 511
|
||||||
|
bcs .1
|
||||||
|
lsr
|
||||||
|
bcs .2 if 512 < x
|
||||||
|
lda DIV7.0,y
|
||||||
|
ldx MOD7.0,y
|
||||||
|
bra .3
|
||||||
|
|
||||||
|
.1 lda DIV7.256,y
|
||||||
|
ldx MOD7.256,y
|
||||||
|
bra .3
|
||||||
|
|
||||||
|
.2 lda DIV7.512,y
|
||||||
|
ldx MOD7.512,y
|
||||||
|
|
||||||
|
.3 lsr
|
||||||
|
tay
|
||||||
|
bcs .4 odd=main ram
|
||||||
|
sta SETPAGE2
|
||||||
|
bra .5
|
||||||
|
.4 sta CLRPAGE2
|
||||||
|
|
||||||
|
.5 phx
|
||||||
>PULLA Pull Y
|
>PULLA Pull Y
|
||||||
tax
|
tax
|
||||||
lda BASEL,x setup line Base Ptr
|
lda BASEL,x setup line Base Ptr
|
||||||
sta ZPBASE
|
sta ZPBASE
|
||||||
lda BASEH,x
|
lda BASEH,x
|
||||||
sta ZPBASE+1
|
sta ZPBASE+1
|
||||||
|
plx
|
||||||
sta SET80STORE and prepare for page switching
|
|
||||||
sta SETHIRES
|
>PULLA Pull Color
|
||||||
plx get back MOD in x
|
|
||||||
|
|
||||||
>PULLA Pull Mode
|
|
||||||
and #$FF
|
|
||||||
bpl SETPIXEL.SOLID
|
|
||||||
|
|
||||||
SETPIXEL.XOR tya
|
|
||||||
lsr
|
|
||||||
tay
|
|
||||||
bcs .1 odd=main ram
|
|
||||||
sta SETPAGE2
|
|
||||||
bra .2
|
|
||||||
.1 sta CLRPAGE2
|
|
||||||
.2 lda (ZPBASE),y
|
|
||||||
eor Mono.Masks,x
|
|
||||||
sta (ZPBASE),y
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
* A=Mode,X=MOD,Y=DIV
|
|
||||||
*--------------------------------------
|
|
||||||
SETPIXEL.SOLID dec
|
|
||||||
bne SETPIXEL.COLOR
|
|
||||||
tya
|
|
||||||
lsr
|
|
||||||
tay
|
|
||||||
bcs .1 odd=main ram
|
|
||||||
sta SETPAGE2
|
|
||||||
bra .2
|
|
||||||
.1 sta CLRPAGE2
|
|
||||||
|
|
||||||
.2 >PULLA get COLOR
|
|
||||||
lsr
|
lsr
|
||||||
bcs .3 set white pixel
|
bcs .6 set white pixel
|
||||||
|
|
||||||
lda (ZPBASE),y
|
lda (ZPBASE),y
|
||||||
and Mono.NMasks,x includes And $7F for mono
|
and Mono.NMasks,x includes And $7F for mono
|
||||||
sta (ZPBASE),y
|
sta (ZPBASE),y
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.3 lda (ZPBASE),y
|
.6 lda (ZPBASE),y
|
||||||
and #$7F switch back this byte to mono
|
and #$7F switch back this byte to mono
|
||||||
ora Mono.Masks,x
|
ora Mono.Masks,x
|
||||||
sta (ZPBASE),y
|
sta (ZPBASE),y
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* X=MOD,Y=DIV
|
SETPIXEL.COLOR >PULLA Get X.LO...
|
||||||
*--------------------------------------
|
pha
|
||||||
SETPIXEL.COLOR tya
|
>PULLB GBYTE Get X.HI in temp location
|
||||||
lsr Divide Col by 2 to get in range 0->39
|
pla
|
||||||
and #$FE make it 0->38 as color mask on 4 bytes
|
lsr GBYTE divide by 4 (range 0->139)
|
||||||
clc
|
ror
|
||||||
|
lsr GBYTE
|
||||||
|
ror
|
||||||
|
tay
|
||||||
|
|
||||||
|
>PULLA Pull Y
|
||||||
|
tax
|
||||||
|
lda BASEL,x setup line Base Ptr
|
||||||
|
sta ZPBASE
|
||||||
|
lda BASEH,x
|
||||||
|
sta ZPBASE+1
|
||||||
|
|
||||||
|
lda DIV7.0,y
|
||||||
|
|
||||||
|
asl Carry Cleared, by ASL
|
||||||
adc ZPBASE ZPBASE now point to first of the 4 columns
|
adc ZPBASE ZPBASE now point to first of the 4 columns
|
||||||
sta ZPBASE
|
sta ZPBASE
|
||||||
|
|
||||||
|
|
||||||
|
ldx MOD7.0,y
|
||||||
|
|
||||||
txa get MOD
|
txa get MOD
|
||||||
asl times 4 to compute index in color tables
|
asl times 4 to compute index in color tables
|
||||||
asl
|
asl
|
||||||
tax set in X for Masks,NMasks
|
tax set in X for Masks,NMasks
|
||||||
|
|
||||||
>PULLA get COLOR
|
>PULLA get COLOR
|
||||||
|
|
||||||
asl
|
asl
|
||||||
asl
|
asl
|
||||||
tay
|
tay
|
||||||
|
@ -310,7 +329,68 @@ FILLREC
|
||||||
BITBLT
|
BITBLT
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.END
|
DRV.CS.END
|
||||||
|
*--------------------------------------
|
||||||
|
Mono.NMasks .DA #%01111110
|
||||||
|
.DA #%01111101
|
||||||
|
.DA #%01111011
|
||||||
|
.DA #%01110111
|
||||||
|
.DA #%01101111
|
||||||
|
.DA #%01011111
|
||||||
|
.DA #%00111111
|
||||||
|
*--------------------------------------
|
||||||
|
Mono.Masks .DA #%00000001
|
||||||
|
.DA #%00000010
|
||||||
|
.DA #%00000100
|
||||||
|
.DA #%00001000
|
||||||
|
.DA #%00010000
|
||||||
|
.DA #%00100000
|
||||||
|
.DA #%01000000
|
||||||
|
*--------------------------------------
|
||||||
|
* bits to "and" to reset color of pixel (0 means nothing to do)
|
||||||
|
*--------------------------------------
|
||||||
|
* c1110000 c3322221 c5444433 c6666555
|
||||||
|
Color.NMasks .DA #%01110000,#%00000000,#%00000000,#%00000000
|
||||||
|
.DA #%00001111,#%01111110,#%00000000,#%00000000
|
||||||
|
.DA #%00000000,#%01100001,#%00000000,#%00000000
|
||||||
|
.DA #%00000000,#%00011111,#%01111100,#%00000000
|
||||||
|
.DA #%00000000,#%00000000,#%01000011,#%00000000
|
||||||
|
.DA #%00000000,#%00000000,#%00111111,#%01111000
|
||||||
|
.DA #%00000000,#%00000000,#%00000000,#%00000111
|
||||||
|
*--------------------------------------
|
||||||
|
* bits to "and" to Get color of pixel (0 means nothing to do)
|
||||||
|
* 4 bytes * 7 mods
|
||||||
|
*--------------------------------------
|
||||||
|
* c1110000 c3322221 c5444433 c6666555
|
||||||
|
Color.Masks .DA #%10001111,#%00000000,#%00000000,#%00000000
|
||||||
|
.DA #%11110000,#%00000001,#%00000000,#%00000000
|
||||||
|
.DA #%00000000,#%10011110,#%00000000,#%00000000
|
||||||
|
.DA #%00000000,#%11100000,#%00000011,#%00000000
|
||||||
|
.DA #%00000000,#%00000000,#%10111100,#%00000000
|
||||||
|
.DA #%00000000,#%00000000,#%11000000,#%00000111
|
||||||
|
.DA #%00000000,#%00000000,#%00000000,#%11111000
|
||||||
|
*--------------------------------------
|
||||||
|
* bits to "ora" to set color of pixel (including "color bit set" for byte hosting bit0)
|
||||||
|
* 4 bytes * 16 Colors
|
||||||
|
*--------------------------------------
|
||||||
|
* c1110000 c3322221 c5444433 c6666555
|
||||||
|
Color.Pixels .DA #%00000000,#%00000000,#%00000000,#%00000000 black (color bit disable)
|
||||||
|
.DA #%10010001,#%10100010,#%11000100,#%10001000 dark blue
|
||||||
|
.DA #%10100010,#%11000100,#%10001000,#%10010001 dark green
|
||||||
|
.DA #%10110011,#%11100110,#%11001100,#%10011001 medium blue
|
||||||
|
.DA #%11000100,#%10001000,#%10010001,#%10100010 brown
|
||||||
|
.DA #%11010101,#%10101010,#%11010101,#%10101010 grey2
|
||||||
|
.DA #%11100110,#%11001100,#%10011001,#%10110011 green
|
||||||
|
.DA #%11110111,#%11101110,#%11011101,#%10111011 aqua
|
||||||
|
.DA #%10001000,#%10010001,#%10100010,#%11000100 Magenta
|
||||||
|
.DA #%10011001,#%10110011,#%11100110,#%11001100 violet
|
||||||
|
.DA #%10101010,#%11010101,#%10101010,#%11010101 grey1
|
||||||
|
.DA #%10111011,#%11110111,#%11101110,#%11011101 light blue
|
||||||
|
.DA #%11001100,#%10011001,#%10110011,#%11100110 orange
|
||||||
|
.DA #%11011101,#%10111011,#%11110111,#%11101110 pink
|
||||||
|
.DA #%11101110,#%11011101,#%10111011,#%11110111 yellow
|
||||||
|
.DA #%01111111,#%01111111,#%01111111,#%01111111 white (color bit disable)
|
||||||
|
*--------------------------------------
|
||||||
DIV7.0 .HS 0000000000000001010101010101
|
DIV7.0 .HS 0000000000000001010101010101
|
||||||
.HS 0202020202020203030303030303
|
.HS 0202020202020203030303030303
|
||||||
.HS 0404040404040405050505050505
|
.HS 0404040404040405050505050505
|
||||||
|
@ -447,98 +527,12 @@ BASEH .HS 20.24.28.2C.30.34.38.3C
|
||||||
.HS 23.27.2B.2F.33.37.3B.3F
|
.HS 23.27.2B.2F.33.37.3B.3F
|
||||||
.HS 23.27.2B.2F.33.37.3B.3F
|
.HS 23.27.2B.2F.33.37.3B.3F
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
Mono.NMasks .DA #%01111110
|
|
||||||
.DA #%01111101
|
|
||||||
.DA #%01111011
|
|
||||||
.DA #%01110111
|
|
||||||
.DA #%01101111
|
|
||||||
.DA #%01011111
|
|
||||||
.DA #%00111111
|
|
||||||
*--------------------------------------
|
|
||||||
Mono.Masks .DA #%00000001
|
|
||||||
.DA #%00000010
|
|
||||||
.DA #%00000100
|
|
||||||
.DA #%00001000
|
|
||||||
.DA #%00010000
|
|
||||||
.DA #%00100000
|
|
||||||
.DA #%01000000
|
|
||||||
*--------------------------------------
|
|
||||||
* bits to "and" to reset color of pixel (0 means nothing to do)
|
|
||||||
*--------------------------------------
|
|
||||||
Color.NMasks .DA #%01110000,#%00000000,#%00000000,#%00000000
|
|
||||||
.DA #%00001111,#%01111110,#%00000000,#%00000000
|
|
||||||
.DA #%00000000,#%01100001,#%00000000,#%00000000
|
|
||||||
.DA #%00000000,#%00011111,#%01111100,#%00000000
|
|
||||||
.DA #%00000000,#%00000000,#%01000011,#%00000000
|
|
||||||
.DA #%00000000,#%00000000,#%00111111,#%01111000
|
|
||||||
.DA #%00000000,#%00000000,#%00000000,#%00000111
|
|
||||||
*--------------------------------------
|
|
||||||
* bits to "and" to Get color of pixel (0 means nothing to do)
|
|
||||||
* 4 bytes * 7 mods
|
|
||||||
*--------------------------------------
|
|
||||||
Color.Masks.DEL .DA #%00001111,#%00000000,#%00000000,#%00000000 (nothing to do)
|
|
||||||
.DA #%01110000,#%00000001,#%00000000,#%00000000 asl0,asl0,rol1,asl0,rol1,asl0,rol1
|
|
||||||
.DA #%00000000,#%00011110,#%00000000,#%00000000 lsr1
|
|
||||||
.DA #%00000000,#%01100000,#%00000011,#%00000000 asl1,asl1,rol2,asl1,rol2
|
|
||||||
.DA #%00000000,#%00000000,#%00111100,#%00000000 lsr2,lsr2
|
|
||||||
.DA #%00000000,#%00000000,#%01000000,#%00000111 asl2,asl2,rol3
|
|
||||||
.DA #%00000000,#%00000000,#%00000000,#%01111000 lsr3,lsr3,lsr3
|
|
||||||
*--------------------------------------
|
|
||||||
Color.Masks .DA #%10001111,#%00000000,#%00000000,#%00000000
|
|
||||||
.DA #%11110000,#%00000001,#%00000000,#%00000000
|
|
||||||
.DA #%00000000,#%10011110,#%00000000,#%00000000
|
|
||||||
.DA #%00000000,#%11100000,#%00000011,#%00000000
|
|
||||||
.DA #%00000000,#%00000000,#%10111100,#%00000000
|
|
||||||
.DA #%00000000,#%00000000,#%11000000,#%00000111
|
|
||||||
.DA #%00000000,#%00000000,#%00000000,#%11111000
|
|
||||||
*--------------------------------------
|
|
||||||
* bits to "ora" to set color of pixel (including "color bit set " for byte hosting bit0)
|
|
||||||
* 4 bytes * 16 Colors
|
|
||||||
* pixel masks c1110000.c3322221.c5444433.c6666555
|
|
||||||
*--------------------------------------
|
|
||||||
Color.Pixels .DA #%00000000,#%00000000,#%00000000,#%00000000 (color bit disable)
|
|
||||||
.DA #%10010001,#%10100010,#%11000100,#%10001000
|
|
||||||
.DA #%10100010,#%11000100,#%10001000,#%10010001
|
|
||||||
.DA #%10110011,#%11100110,#%11001100,#%10011001
|
|
||||||
.DA #%11000100,#%10001000,#%10010001,#%10100010
|
|
||||||
.DA #%11010101,#%10101010,#%11010101,#%10101010
|
|
||||||
.DA #%11100110,#%11001100,#%10011001,#%10110011
|
|
||||||
.DA #%11110111,#%11101110,#%11011101,#%10111011
|
|
||||||
.DA #%10001000,#%10010001,#%10100010,#%11000100
|
|
||||||
.DA #%10011001,#%10110011,#%11100110,#%11001100
|
|
||||||
.DA #%10101010,#%11010101,#%10101010,#%11010101
|
|
||||||
.DA #%10111011,#%11110111,#%11101111,#%11011101
|
|
||||||
.DA #%11001100,#%10011001,#%10110011,#%11100110
|
|
||||||
.DA #%11011101,#%10111011,#%11110111,#%11101110
|
|
||||||
.DA #%11101110,#%11011101,#%10111011,#%11110111
|
|
||||||
.DA #%01111111,#%01111111,#%01111111,#%01111111 (color bit disable)
|
|
||||||
|
|
||||||
*Black 00 00 00 00 0000
|
|
||||||
*Magenta 08 11 22 44 0001
|
|
||||||
*Brown 44 08 11 22 0010
|
|
||||||
*Orange 4C 19 33 66 0011
|
|
||||||
*Dark Green 22 44 08 11 0100
|
|
||||||
*Grey1 2A 55 2A 55 0101
|
|
||||||
*Green 66 4C 19 33 0110
|
|
||||||
*Yellow 6E 5D 3B 77 0111
|
|
||||||
*Dark Blue 11 22 44 08 1000
|
|
||||||
*Violet 19 33 66 4C 1001
|
|
||||||
*Grey2 55 2A 55 2A 1010
|
|
||||||
*Pink 5D 3B 77 6E 1011
|
|
||||||
*Medium Blue 33 66 4C 19 1100
|
|
||||||
*Light Blue 3B 77 6E 5D 1101
|
|
||||||
*Aqua 77 6E 5D 3B 1110
|
|
||||||
*White 7F 7F 7F 7F 1111
|
|
||||||
*--------------------------------------
|
|
||||||
DEVNAME >PSTRING "GFX"
|
|
||||||
GBYTE .BS 1
|
GBYTE .BS 1
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
DS.START
|
DEVINFO .DA #S.DEVINFO.TYPE.GFX type of DEVINFO STRUCT
|
||||||
DEVINFO .DA #S.DEV.F.GFX type of DEVINFO STRUCT
|
|
||||||
DEVINFO.MODES .DA #%10000011 XOR,16 & B/W
|
DEVINFO.MODES .DA #%10000011 XOR,16 & B/W
|
||||||
DEVINFO.W .DA 560 X.SIZE
|
DEVINFO.W .DA 560 X.SIZE
|
||||||
DEVINFO.H .DA 192 Y.SIZE
|
DEVINFO.H .DA 192 Y.SIZE
|
||||||
DS.END
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
MAN
|
MAN
|
||||||
SAVE DRV/DHGR.DRV.S
|
SAVE DRV/DHGR.DRV.S
|
||||||
|
|
|
@ -1,16 +1,17 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /A2OSX.BUILD
|
PREFIX /A2OSX.SRC
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
.LIST OFF
|
.LIST OFF
|
||||||
.OP 65C02
|
.OP 65C02
|
||||||
.OR $2000
|
.OR $2000
|
||||||
.TF DRV/MOUSE.DRV
|
.TF /A2OSX.BOOT/DRV/MOUSE.DRV
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.INB INC/MACROS.I
|
.INB INC/MACROS.I
|
||||||
.INB INC/IO.I
|
.INB INC/IO.I
|
||||||
.INB INC/A2OSX.I
|
.INB INC/A2OSX.I
|
||||||
|
.INB INC/A2OSX.API.I
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
ZPGoMouse .EQ ZPDRV
|
ZPGoMouse .EQ ZPDRV
|
||||||
ZPTmpPtr1 .EQ ZPDRV+2
|
ZPTmpPtr1 .EQ ZPDRV+2
|
||||||
|
@ -43,29 +44,30 @@ MOUSESTSx.DOWN .EQ %10000000
|
||||||
MOUSESTSx.LDOWN .EQ %01000000
|
MOUSESTSx.LDOWN .EQ %01000000
|
||||||
MOUSESTSx.MOVED .EQ %00100000
|
MOUSESTSx.MOVED .EQ %00100000
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* Main DRV entry point
|
* File Header (16 Bytes)
|
||||||
* input :
|
|
||||||
* X = CMD
|
|
||||||
* 0 : OPEN
|
|
||||||
* 2 : GETEVENT
|
|
||||||
* 4 : OUT
|
|
||||||
* 6 : CLOSE
|
|
||||||
*--------------------------------------
|
|
||||||
* CLD $D8
|
|
||||||
* JMP (*,x) $7C
|
|
||||||
* #JMPTABLE
|
|
||||||
* /JMPTABLE
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.START cld
|
CS.START cld
|
||||||
jmp (.1,x)
|
jmp Dev.Detect cld,jmp abs=DRV
|
||||||
.1 .DA OPEN
|
.DA #$61 6502,Level 1 (65c02)
|
||||||
.DA GETEVENT
|
.DA #1 DRV Layout Version 1
|
||||||
.DA OUT
|
.DA 0
|
||||||
.DA CLOSE
|
.DA CS.END-CS.START Code Length
|
||||||
.DA 0 end or relocation
|
.DA DEV.HEADER-CS.START Device Header Offset
|
||||||
.DA CS.END-CS.START
|
.DA DRV.CS.START-CS.START Driver Code Offset
|
||||||
|
.DA DRV.CS.END-DRV.CS.START Drv Code Length
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
OPEN stz ZPTmpPtr1
|
* Relocation Table
|
||||||
|
*--------------------------------------
|
||||||
|
L.MSG.DETECT .DA MSG.DETECT
|
||||||
|
L.MSG.DETECT.OK .DA MSG.DETECT.OK
|
||||||
|
L.MSG.DETECT.KO .DA MSG.DETECT.KO
|
||||||
|
L.DEV.HEADER.NAME .DA DEV.HEADER.NAME
|
||||||
|
.DA 0 End Of Reloc Table
|
||||||
|
*--------------------------------------
|
||||||
|
Dev.Detect >LDYA L.MSG.DETECT
|
||||||
|
>SYSCALL SYS.SysScrPPSTRYA
|
||||||
|
|
||||||
|
stz ZPTmpPtr1
|
||||||
lda #$C1
|
lda #$C1
|
||||||
sta ZPTmpPtr1+1
|
sta ZPTmpPtr1+1
|
||||||
|
|
||||||
|
@ -77,44 +79,66 @@ OPEN stz ZPTmpPtr1
|
||||||
bne .3
|
bne .3
|
||||||
dex
|
dex
|
||||||
bpl .2
|
bpl .2
|
||||||
bra .10
|
bra .4
|
||||||
|
|
||||||
.3 inc ZPTmpPtr1+1 no match, try next slot....
|
.3 inc ZPTmpPtr1+1 no match, try next slot....
|
||||||
lda ZPTmpPtr1+1
|
lda ZPTmpPtr1+1
|
||||||
cmp #$C8
|
cmp #$C8
|
||||||
bne .1
|
bne .1
|
||||||
|
|
||||||
|
>LDYA L.MSG.DETECT.KO
|
||||||
|
>SYSCALL SYS.SysScrPPSTRYA
|
||||||
|
|
||||||
lda #DEVMGR.ERRNOHW Not Found in any slot, exiting
|
lda #DEVMGR.ERRNOHW Not Found in any slot, exiting
|
||||||
sec
|
sec
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.10 lda ZPTmpPtr1+1
|
.4 lda ZPTmpPtr1+1
|
||||||
|
sta DEVSLOTCn
|
||||||
and #$0F
|
and #$0F
|
||||||
sta DEVSLOT0n
|
sta DEVSLOT0n
|
||||||
pha
|
|
||||||
ora #$30
|
ora #$30
|
||||||
sta DEVNAME+4
|
sta DEV.HEADER.NAME+4
|
||||||
pla
|
|
||||||
ora #$C0
|
|
||||||
sta DEVSLOTCn
|
|
||||||
asl
|
asl
|
||||||
asl
|
asl
|
||||||
asl
|
asl
|
||||||
asl
|
asl
|
||||||
sta DEVSLOTn0
|
sta DEVSLOTn0
|
||||||
|
|
||||||
ldx #0
|
>LDYA L.MSG.DETECT.OK
|
||||||
ldy #S.DEV.NAME
|
>SYSCALL SYS.SysScrPPSTRYA
|
||||||
|
>LDYA L.DEV.HEADER.NAME
|
||||||
.4 lda DEVNAME,x
|
>SYSCALL SYS.SysScrPPSTRYA
|
||||||
sta (pDevContext),y
|
clc
|
||||||
cpx DEVNAME
|
rts
|
||||||
beq .5
|
*--------------------------------------
|
||||||
inx
|
CS.END
|
||||||
iny
|
MSG.DETECT >PSTRING "\nApple II Mouse Driver."
|
||||||
bne .4
|
MSG.DETECT.OK >PSTRING "\nMouse Card Driver Installed As Device : "
|
||||||
|
MSG.DETECT.KO >PSTRING "\nMouse Card Not Found."
|
||||||
.5 bit RROMBNK2 Renable ROM to allow MOUSE II firmware
|
*--------------------------------------
|
||||||
|
* Device Header (16 Bytes)
|
||||||
|
*--------------------------------------
|
||||||
|
DEV.HEADER cld
|
||||||
|
jmp (DRV.CS.START,x)
|
||||||
|
.DA #S.DEV.F.EVENT
|
||||||
|
DEV.HEADER.NAME >PSTRING "MOU1" NAME
|
||||||
|
.HS 00.00
|
||||||
|
.HS 00.00.00.00
|
||||||
|
*--------------------------------------
|
||||||
|
* Driver Code
|
||||||
|
*--------------------------------------
|
||||||
|
DRV.CS.START .DA OPEN
|
||||||
|
.DA GETEVENT
|
||||||
|
.DA COUT
|
||||||
|
.DA CLOSE
|
||||||
|
.DA GETINFO
|
||||||
|
.DA IRQ
|
||||||
|
L.DEVINFO .DA DEVINFO
|
||||||
|
.DA 0 end or relocation
|
||||||
|
*--------------------------------------
|
||||||
|
OPEN
|
||||||
|
* bit RROMBNK2 Renable ROM to allow MOUSE II firmware
|
||||||
|
|
||||||
php to read IIe ROM ID bytes
|
php to read IIe ROM ID bytes
|
||||||
sei
|
sei
|
||||||
|
@ -156,19 +180,15 @@ OPEN stz ZPTmpPtr1
|
||||||
jsr GOMOUSE
|
jsr GOMOUSE
|
||||||
|
|
||||||
pla
|
pla
|
||||||
bpl .6
|
bpl .1
|
||||||
sta SET80STORE
|
sta SET80STORE
|
||||||
|
|
||||||
.6 plp
|
.1 plp
|
||||||
|
|
||||||
lda #S.DEV.F.MOUSE+S.DEV.F.EVENT
|
|
||||||
sta (pDevContext)
|
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
GETEVENT >PULLW pEvent
|
GETEVENT php
|
||||||
|
|
||||||
php
|
|
||||||
sei
|
sei
|
||||||
|
|
||||||
lda RD80STORE
|
lda RD80STORE
|
||||||
|
@ -205,7 +225,7 @@ GETEVENT >PULLW pEvent
|
||||||
ora #EVENT.MOUSEMOVE
|
ora #EVENT.MOUSEMOVE
|
||||||
sta (pEvent),y
|
sta (pEvent),y
|
||||||
|
|
||||||
ldy #S.EVT.DATAW1
|
.4 ldy #S.EVT.DATAW1
|
||||||
lda MOUSEXLOx,x
|
lda MOUSEXLOx,x
|
||||||
sta (pEvent),y
|
sta (pEvent),y
|
||||||
iny
|
iny
|
||||||
|
@ -218,7 +238,7 @@ GETEVENT >PULLW pEvent
|
||||||
lda MOUSEYHIx,x
|
lda MOUSEYHIx,x
|
||||||
sta (pEvent),y
|
sta (pEvent),y
|
||||||
|
|
||||||
.4 pla
|
pla
|
||||||
bpl .5
|
bpl .5
|
||||||
sta SET80STORE
|
sta SET80STORE
|
||||||
|
|
||||||
|
@ -235,7 +255,8 @@ GETEVENT >PULLW pEvent
|
||||||
.9 sec A=0 : no event
|
.9 sec A=0 : no event
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
OUT clc
|
COUT
|
||||||
|
IRQ sec
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CLOSE php
|
CLOSE php
|
||||||
|
@ -247,6 +268,10 @@ CLOSE php
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
GETINFO >LDYA L.DEVINFO
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
GOMOUSE pha
|
GOMOUSE pha
|
||||||
stz ZPGoMouse
|
stz ZPGoMouse
|
||||||
ldx DEVSLOTCn
|
ldx DEVSLOTCn
|
||||||
|
@ -257,15 +282,15 @@ GOMOUSE pha
|
||||||
pla
|
pla
|
||||||
jmp (ZPGoMouse)
|
jmp (ZPGoMouse)
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.END
|
DRV.CS.END
|
||||||
DEVSIG.Offset .HS 05070B0CFB
|
DEVSIG.Offset .HS 05070B0CFB
|
||||||
DEVSIG.Value .HS 38180120D6
|
DEVSIG.Value .HS 38180120D6
|
||||||
DEVSIG.Length .EQ DEVSIG.Value-DEVSIG.Offset
|
DEVSIG.Length .EQ DEVSIG.Value-DEVSIG.Offset
|
||||||
DEVNAME >PSTRING "MOU0"
|
|
||||||
DEVSLOT0n .BS 1
|
DEVSLOT0n .BS 1
|
||||||
DEVSLOTCn .BS 1
|
DEVSLOTCn .BS 1
|
||||||
DEVSLOTn0 .BS 1
|
DEVSLOTn0 .BS 1
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
DEVINFO .DA #S.DEVINFO.TYPE.XY
|
||||||
MAN
|
MAN
|
||||||
SAVE DRV/MOUSE.DRV.S
|
SAVE DRV/MOUSE.DRV.S
|
||||||
ASM
|
ASM
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /A2OSX.BUILD
|
PREFIX /A2OSX.SRC
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
@ -69,12 +69,12 @@ OPEN stz ZPTmpPtr1
|
||||||
sta DEVNAME+4
|
sta DEVNAME+4
|
||||||
|
|
||||||
lda #S.DEV.F.CHAR+S.DEV.F.OUT
|
lda #S.DEV.F.CHAR+S.DEV.F.OUT
|
||||||
sta (DEVMGR.DEVPTR)
|
sta (pDev)
|
||||||
ldy #S.DEV.NAME
|
ldy #S.DEV.NAME
|
||||||
|
|
||||||
ldx #0
|
ldx #0
|
||||||
.7 lda DEVNAME,x
|
.7 lda DEVNAME,x
|
||||||
sta (DEVMGR.DEVPTR),y
|
sta (pDev),y
|
||||||
cpx DEVNAME
|
cpx DEVNAME
|
||||||
beq .8
|
beq .8
|
||||||
inx
|
inx
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /A2OSX.BUILD
|
PREFIX /A2OSX.SRC
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
@ -11,12 +11,46 @@ AUTO 6
|
||||||
.INB INC/MACROS.I
|
.INB INC/MACROS.I
|
||||||
.INB INC/A2OSX.I
|
.INB INC/A2OSX.I
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
ZPTmpPtr1 .EQ ZPDRV
|
BUF.SIZE .EQ $20
|
||||||
|
BUF.MASK .EQ $1F
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
SIG.05 .EQ $38
|
ZPGoCard .EQ ZPDRV
|
||||||
SIG.07 .EQ $18
|
ZPTmpPtr1 .EQ ZPDRV+2
|
||||||
SIG.0B .EQ $01
|
*--------------------------------------
|
||||||
SIG.0C .EQ $31
|
* Pascal 1.1 Protocol
|
||||||
|
*--------------------------------------
|
||||||
|
SSC.INIT .EQ $0D
|
||||||
|
SSC.READ .EQ $0E
|
||||||
|
SSC.WRITE .EQ $0F
|
||||||
|
SSC.STATUS .EQ $10
|
||||||
|
*--------------------------------------
|
||||||
|
* SSC/ACIA I/O
|
||||||
|
*--------------------------------------
|
||||||
|
SSC.REG.DIPSW1 .EQ $C081 R
|
||||||
|
SSC.REG.DIPSW2 .EQ $C082 R
|
||||||
|
SSC.REG.DATA .EQ $C088 R,W
|
||||||
|
SSC.REG.RESET .EQ $C089 W
|
||||||
|
SSC.REG.STATUS .EQ $C089 R
|
||||||
|
SSC.REG.STATUS.IRQ .EQ %10000000
|
||||||
|
SSC.REG.STATUS.DSR .EQ %01000000
|
||||||
|
SSC.REG.STATUS.DCD .EQ %00100000
|
||||||
|
SSC.REG.STATUS.TDRF .EQ %00010000
|
||||||
|
SSC.REG.STATUS.RDRF .EQ %00001000
|
||||||
|
SSC.REG.STATUS.OE .EQ %00000100
|
||||||
|
SSC.REG.STATUS.FE .EQ %00000010
|
||||||
|
SSC.REG.STATUS.PE .EQ %00000001
|
||||||
|
SSC.REG.CMD .EQ $C08A W
|
||||||
|
SSC.REG.CMD.ODDP .EQ %00100000
|
||||||
|
SSC.REG.CMD.EVENP .EQ %01100000
|
||||||
|
SSC.REG.CMD.MARKP .EQ %10100000
|
||||||
|
SSC.REG.CMD.SPACEP .EQ %11100000
|
||||||
|
SSC.REG.CMD.ECHO .EQ %00010000
|
||||||
|
SSC.REG.CMD.TE .EQ %00001000
|
||||||
|
SSC.REG.CMD.TEIRQ .EQ %00000100
|
||||||
|
SSC.REG.CMD.TBRK .EQ %00001100
|
||||||
|
SSC.REG.CMD.RIRQDIS .EQ %00000010
|
||||||
|
SSC.REG.CMD.DTR .EQ %00000001
|
||||||
|
SSC.REG.CTL .EQ $C08B W
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* Main DRV entry point
|
* Main DRV entry point
|
||||||
* input :
|
* input :
|
||||||
|
@ -25,6 +59,8 @@ SIG.0C .EQ $31
|
||||||
* 2 : GETEVENT
|
* 2 : GETEVENT
|
||||||
* 4 : OUT
|
* 4 : OUT
|
||||||
* 6 : CLOSE
|
* 6 : CLOSE
|
||||||
|
* 8 : GETINFO
|
||||||
|
* 10 : IRQ
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* CLD $D8
|
* CLD $D8
|
||||||
* JMP (*,x) $7C
|
* JMP (*,x) $7C
|
||||||
|
@ -33,53 +69,81 @@ SIG.0C .EQ $31
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.START cld
|
CS.START cld
|
||||||
jmp (.1,x)
|
jmp (.1,x)
|
||||||
|
.DA CS.END-CS.START
|
||||||
|
.DA 0
|
||||||
.1 .DA OPEN
|
.1 .DA OPEN
|
||||||
.DA GETEVENT
|
.DA GETEVENT
|
||||||
.DA OUT
|
.DA OUT
|
||||||
.DA CLOSE
|
.DA CLOSE
|
||||||
|
.DA GETINFO
|
||||||
|
L.IRQ .DA IRQ
|
||||||
|
L.DEVINFO .DA DEVINFO
|
||||||
.DA 0 end or relocation
|
.DA 0 end or relocation
|
||||||
.DA CS.END-CS.START
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
OPEN stz ZPTmpPtr1
|
OPEN stz ZPTmpPtr1
|
||||||
lda #$C1
|
lda #$C1
|
||||||
sta ZPTmpPtr1+1
|
sta ZPTmpPtr1+1
|
||||||
.1 ldy #5
|
|
||||||
lda (ZPTmpPtr1),y
|
|
||||||
cmp #SIG.05
|
|
||||||
bne .2
|
|
||||||
|
|
||||||
ldy #7
|
.1 ldx #DEVSIG.Length-1
|
||||||
lda (ZPTmpPtr1),y
|
|
||||||
cmp #SIG.07
|
|
||||||
bne .2
|
|
||||||
|
|
||||||
ldy #$B
|
|
||||||
lda (ZPTmpPtr1),y
|
|
||||||
cmp #SIG.0B
|
|
||||||
bne .2
|
|
||||||
|
|
||||||
ldy #$C
|
|
||||||
lda (ZPTmpPtr1),y
|
|
||||||
cmp #SIG.0C
|
|
||||||
beq .3
|
|
||||||
|
|
||||||
.2 inc ZPTmpPtr1+1
|
.2 ldy DEVSIG.Offset,x
|
||||||
|
lda (ZPTmpPtr1),y
|
||||||
|
cmp DEVSIG.Value,x
|
||||||
|
bne .3
|
||||||
|
dex
|
||||||
|
bpl .2
|
||||||
|
bra .4
|
||||||
|
|
||||||
|
.3 inc ZPTmpPtr1+1 no match, try next slot....
|
||||||
lda ZPTmpPtr1+1
|
lda ZPTmpPtr1+1
|
||||||
cmp #$C8
|
cmp #$C8
|
||||||
bne .1
|
bne .1
|
||||||
beq .99
|
|
||||||
|
|
||||||
.3 lda ZPTmpPtr1+1
|
lda #DEVMGR.ERRNOHW Not Found in any slot, exiting
|
||||||
|
sec
|
||||||
|
rts
|
||||||
|
|
||||||
|
.4 lda ZPTmpPtr1+1
|
||||||
|
sta DEVSLOTCn
|
||||||
and #$0F
|
and #$0F
|
||||||
sta DEVSLOT
|
sta DEVSLOT0n
|
||||||
ora #$30
|
ora #$30
|
||||||
sta DEVNAME+4
|
sta DEVNAME+4
|
||||||
|
asl
|
||||||
|
asl
|
||||||
|
asl
|
||||||
|
asl
|
||||||
|
sta DEVSLOTn0
|
||||||
|
|
||||||
lda #S.DEV.F.CHAR+S.DEV.F.OUT
|
* ldy #SSC.INIT
|
||||||
sta (pDevContext)
|
* jsr GoCard
|
||||||
ldy #S.DEV.NAME
|
ldx DEVSLOTn0
|
||||||
|
|
||||||
|
stz SSC.REG.RESET,x
|
||||||
|
lda #$1E
|
||||||
|
sta SSC.REG.CTL,x
|
||||||
|
|
||||||
|
stz INBUF.PTR
|
||||||
|
stz INBUF.CNT
|
||||||
|
stz OUTBUF.PTR
|
||||||
|
stz OUTBUF.CNT
|
||||||
|
|
||||||
|
>PUSHW L.IRQ
|
||||||
|
>PUSHBI 4
|
||||||
|
>SYSCALL SYS.MLIAllocIRQ
|
||||||
|
bcs *
|
||||||
|
|
||||||
|
php
|
||||||
|
sei
|
||||||
|
ldx DEVSLOTn0
|
||||||
|
lda #SSC.REG.CMD.TEIRQ+SSC.REG.CMD.DTR
|
||||||
|
sta SSC.REG.CMD,x
|
||||||
|
|
||||||
|
lda SSC.REG.STATUS,x clear any IRQ pending
|
||||||
|
plp
|
||||||
|
|
||||||
ldx #0
|
ldx #0
|
||||||
|
ldy #S.DEV.NAME
|
||||||
.7 lda DEVNAME,x
|
.7 lda DEVNAME,x
|
||||||
sta (pDevContext),y
|
sta (pDevContext),y
|
||||||
cpx DEVNAME
|
cpx DEVNAME
|
||||||
|
@ -87,25 +151,166 @@ OPEN stz ZPTmpPtr1
|
||||||
inx
|
inx
|
||||||
iny
|
iny
|
||||||
bne .7
|
bne .7
|
||||||
|
|
||||||
|
lda #S.DEV.F.CHAR+S.DEV.F.OUT+S.DEV.F.EVENT
|
||||||
|
sta (pDevContext)
|
||||||
|
|
||||||
.8 clc
|
.8 clc
|
||||||
rts
|
rts
|
||||||
.99 lda #DEVMGR.ERRNOHW
|
|
||||||
sec
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
GETEVENT lda #0
|
GETEVENT >PULLW pEvent
|
||||||
|
|
||||||
|
php
|
||||||
|
sei
|
||||||
|
lda INBUF.CNT
|
||||||
|
beq .9
|
||||||
|
|
||||||
|
ldx INBUF.PTR
|
||||||
|
lda INBUF,x
|
||||||
|
ldy #S.EVT.DATA
|
||||||
|
sta (pEvent),y
|
||||||
|
|
||||||
|
iny
|
||||||
|
lda #0
|
||||||
|
sta (pEvent),y
|
||||||
|
|
||||||
|
lda #S.EVT.F.KEY
|
||||||
|
sta (pEvent)
|
||||||
|
|
||||||
|
inx
|
||||||
|
cpx #BUF.SIZE
|
||||||
|
bne .1
|
||||||
|
ldx #0
|
||||||
|
|
||||||
|
.1 stx INBUF.PTR
|
||||||
|
dec INBUF.CNT
|
||||||
|
|
||||||
|
|
||||||
|
plp
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
|
||||||
|
.9 plp
|
||||||
|
lda #0
|
||||||
sec
|
sec
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
OUT clc
|
OUT php
|
||||||
|
sei
|
||||||
|
|
||||||
|
ldx DEVSLOTn0
|
||||||
|
lda SSC.REG.STATUS,x
|
||||||
|
and #SSC.REG.STATUS.DCD+SSC.REG.STATUS.DSR
|
||||||
|
beq .9
|
||||||
|
|
||||||
|
ldx OUTBUF.CNT
|
||||||
|
cpx #BUF.SIZE
|
||||||
|
beq .9
|
||||||
|
|
||||||
|
>PULLA
|
||||||
|
ldx OUTBUF.PTR
|
||||||
|
sta OUTBUF,x
|
||||||
|
inx
|
||||||
|
cpx #BUF.SIZE
|
||||||
|
bne .1
|
||||||
|
ldx #0
|
||||||
|
|
||||||
|
.1 stx OUTBUF.PTR
|
||||||
|
inc OUTBUF.CNT
|
||||||
|
|
||||||
|
plp
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
|
||||||
|
.9 >PULLA
|
||||||
|
plp
|
||||||
|
sec
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CLOSE clc
|
CLOSE clc
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
GETINFO >LDYA L.DEVINFO
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
* IRQ Handler
|
||||||
|
* on exit, CS if handled
|
||||||
|
*--------------------------------------
|
||||||
|
IRQ cld
|
||||||
|
|
||||||
|
ldx DEVSLOTn0
|
||||||
|
lda SSC.REG.STATUS,x IRQ from this device ?
|
||||||
|
* bpl .9 no, exit
|
||||||
|
pha save status ...
|
||||||
|
and #SSC.REG.STATUS.RDRF incoming char?
|
||||||
|
beq .1
|
||||||
|
|
||||||
|
ldy SSC.REG.DATA,x read data to clear IRQ
|
||||||
|
lda INBUF.CNT
|
||||||
|
cmp #BUF.SIZE
|
||||||
|
beq .1 buffer full, discard
|
||||||
|
phy
|
||||||
|
clc
|
||||||
|
adc INBUF.PTR
|
||||||
|
and #BUF.MASK
|
||||||
|
tay
|
||||||
|
pla get back data
|
||||||
|
sta INBUF,y
|
||||||
|
inc INBUF.CNT
|
||||||
|
|
||||||
|
.1 pla get back status
|
||||||
|
and #SSC.REG.STATUS.TDRF
|
||||||
|
beq .8
|
||||||
|
|
||||||
|
lda OUTBUF.CNT something to transmit ?
|
||||||
|
beq .8 no, exit
|
||||||
|
|
||||||
|
clc
|
||||||
|
adc OUTBUF.PTR
|
||||||
|
and #BUF.MASK
|
||||||
|
tay
|
||||||
|
|
||||||
|
lda OUTBUF,Y
|
||||||
|
sta SSC.REG.DATA,x
|
||||||
|
|
||||||
|
dec INBUF.CNT
|
||||||
|
|
||||||
|
.8 clc
|
||||||
|
rts
|
||||||
|
|
||||||
|
.9 sec
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
* PRIVATE
|
||||||
|
*--------------------------------------
|
||||||
|
GOCARD sta $CFFF Prevent SSC firmware bug
|
||||||
|
pha
|
||||||
|
stz ZPGoCard
|
||||||
|
ldx DEVSLOTCn
|
||||||
|
stx ZPGoCard+1
|
||||||
|
lda (ZPGoCard),y
|
||||||
|
sta ZPGoCard
|
||||||
|
ldy DEVSLOTn0
|
||||||
|
pla
|
||||||
|
jmp (ZPGoCard)
|
||||||
|
*--------------------------------------
|
||||||
CS.END
|
CS.END
|
||||||
|
DEVSIG.Offset .HS 05070B0C
|
||||||
|
DEVSIG.Value .HS 38180131
|
||||||
|
DEVSIG.Length .EQ DEVSIG.Value-DEVSIG.Offset
|
||||||
DEVNAME >PSTRING "COM0"
|
DEVNAME >PSTRING "COM0"
|
||||||
DEVSLOT .BS 1
|
DEVSLOT0n .BS 1
|
||||||
|
DEVSLOTCn .BS 1
|
||||||
|
DEVSLOTn0 .BS 1
|
||||||
|
INBUF.PTR .BS 1
|
||||||
|
INBUF.CNT .BS 1
|
||||||
|
OUTBUF.PTR .BS 1
|
||||||
|
OUTBUF.CNT .BS 1
|
||||||
|
INBUF .BS BUF.SIZE
|
||||||
|
OUTBUF .BS BUF.SIZE
|
||||||
|
DEVINFO .DA #S.DEV.F.CHAR+S.DEV.F.OUT+S.DEV.F.EVENT
|
||||||
|
.DA #0
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
MAN
|
MAN
|
||||||
SAVE DRV/SSC.DRV.S
|
SAVE DRV/SSC.DRV.S
|
||||||
|
|
|
@ -1,16 +1,17 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /A2OSX.BUILD
|
PREFIX /A2OSX.SRC
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
.LIST OFF
|
.LIST OFF
|
||||||
.OP 65C02
|
.OP 65C02
|
||||||
.OR $2000
|
.OR $2000
|
||||||
.TF DRV/UTHERNET.DRV
|
.TF /A2OSX.BOOT/DRV/UTHERNET.DRV
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.INB INC/MACROS.I
|
.INB INC/MACROS.I
|
||||||
.INB INC/A2OSX.I
|
.INB INC/A2OSX.I
|
||||||
* .INB INC/ZP.I
|
.INB INC/A2OSX.API.I
|
||||||
|
.INB INC/KERNEL.I
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
ZPTmpPTR .EQ ZPDRV
|
ZPTmpPTR .EQ ZPDRV
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
@ -110,39 +111,28 @@ ERRTNOFRAME .EQ 0
|
||||||
ERRNOBUFFER .EQ 1
|
ERRNOBUFFER .EQ 1
|
||||||
ERRTIMEOUT .EQ 2
|
ERRTIMEOUT .EQ 2
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* Main DRV entry point
|
* File Header (16 Bytes)
|
||||||
* input :
|
|
||||||
* X = CMD
|
|
||||||
* 0 : OPEN
|
|
||||||
* 2 : GETEVENT
|
|
||||||
* 4 : OUT
|
|
||||||
* 6 : CLOSE
|
|
||||||
* 8 : GETINFO
|
|
||||||
*--------------------------------------
|
|
||||||
* CLD $D8
|
|
||||||
* JMP (*,x) $7C
|
|
||||||
* #JMPTABLE
|
|
||||||
* /JMPTABLE
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.START cld
|
CS.START cld
|
||||||
jmp (.1,x)
|
jmp Dev.Detect cld,jmp abs=DRV
|
||||||
.1 .DA OPEN
|
.DA #$61 6502,Level 1 (65c02)
|
||||||
.DA GETEVENT
|
.DA #1 DRV Layout Version 1
|
||||||
.DA OUT
|
.DA 0
|
||||||
.DA CLOSE
|
.DA CS.END-CS.START Code Length
|
||||||
.DA GETINFO
|
.DA DEV.HEADER-CS.START Device Header Offset
|
||||||
L.DEVINFO .DA DEVINFO
|
.DA DRV.CS.START-CS.START Driver Code Offset
|
||||||
.DA 0 end or relocation
|
.DA DRV.CS.END-DRV.CS.START Drv Code Length
|
||||||
.DA CS.END-CS.START Code Length To Relocate
|
|
||||||
.DA DS.END-DS.START Data Segment to Allocate
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* input :
|
* Relocation Table
|
||||||
* none
|
*--------------------------------------
|
||||||
* output :
|
L.MSG.DETECT .DA MSG.DETECT
|
||||||
* CC on success
|
.DA 0 End Of Reloc Table
|
||||||
* CS on error
|
*--------------------------------------
|
||||||
*--------------------------------------
|
Dev.Detect sta hArgs
|
||||||
OPEN ldx #$10
|
>LDYA L.MSG.DETECT
|
||||||
|
>SYSCALL SYS.SysScrPPSTRYA
|
||||||
|
|
||||||
|
ldx #$10
|
||||||
.1 stx DEVSLOTx0
|
.1 stx DEVSLOTx0
|
||||||
>LDYAI PP.ID
|
>LDYAI PP.ID
|
||||||
>STYA PacketPagePTR,x
|
>STYA PacketPagePTR,x
|
||||||
|
@ -151,18 +141,21 @@ OPEN ldx #$10
|
||||||
bne .2
|
bne .2
|
||||||
cmp /DEVID
|
cmp /DEVID
|
||||||
beq .3
|
beq .3
|
||||||
.2 inc DEVNAME+4
|
|
||||||
|
.2 inc DEV.HEADER.NAME+4
|
||||||
txa
|
txa
|
||||||
clc
|
clc
|
||||||
adc #$10
|
adc #$10
|
||||||
tax
|
tax
|
||||||
cpx #$80
|
cpx #$80
|
||||||
bne .1
|
bne .1
|
||||||
|
|
||||||
lda #DEVMGR.ERRNOHW
|
lda #DEVMGR.ERRNOHW
|
||||||
sec
|
sec
|
||||||
rts
|
rts
|
||||||
.3 ldy #S.DEV.hARGS
|
|
||||||
lda (pDevContext),y
|
.3 lda hARGS
|
||||||
|
|
||||||
beq .4
|
beq .4
|
||||||
>SYSCALL SYS.GetMemPtrA
|
>SYSCALL SYS.GetMemPtrA
|
||||||
>STYA ZPTmpPTR
|
>STYA ZPTmpPTR
|
||||||
|
@ -172,8 +165,93 @@ OPEN ldx #$10
|
||||||
sec
|
sec
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.4 jsr Reset
|
.4 clc
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
DecodeMac lda (ZPTmpPTR)
|
||||||
|
cmp #12
|
||||||
|
bne .9
|
||||||
|
|
||||||
|
ldy #1
|
||||||
|
ldx #0
|
||||||
|
|
||||||
|
.1 lda (ZPTmpPTR),y
|
||||||
|
jsr Asc2NibbleA
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
asl
|
||||||
|
asl
|
||||||
|
asl
|
||||||
|
asl
|
||||||
|
sta MAC,x
|
||||||
|
|
||||||
|
iny
|
||||||
|
lda (ZPTmpPTR),y
|
||||||
|
jsr Asc2NibbleA
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
ora MAC,x
|
||||||
|
sta MAC,x
|
||||||
|
inx
|
||||||
|
iny
|
||||||
|
cpy #13
|
||||||
|
bne .1
|
||||||
|
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
|
||||||
|
.9 sec
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
Asc2NibbleA cmp #$30
|
||||||
|
bcc .9
|
||||||
|
cmp #$3A
|
||||||
|
bcs .1
|
||||||
|
and #$0F
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
.1 cmp #$41
|
||||||
|
bcc .9
|
||||||
|
cmp #$47
|
||||||
|
bcs .9
|
||||||
|
sbc #$36
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
.9 sec
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
CS.END
|
||||||
|
MSG.DETECT >PSTRING "\nUtherNet/CS8900A Driver."
|
||||||
|
hArgs .BS 1
|
||||||
|
*--------------------------------------
|
||||||
|
* Device Header (16 Bytes)
|
||||||
|
*--------------------------------------
|
||||||
|
DEV.HEADER cld
|
||||||
|
jmp (DRV.CS.START,x)
|
||||||
|
.DA #S.DEV.F.SHARE+S.DEV.F.EVENT
|
||||||
|
DEV.HEADER.NAME >PSTRING "ETH1" NAME
|
||||||
|
.HS 00.00
|
||||||
|
.HS 00.00.00.00
|
||||||
|
*--------------------------------------
|
||||||
|
* Driver Code
|
||||||
|
*--------------------------------------
|
||||||
|
DRV.CS.START .DA OPEN
|
||||||
|
.DA GETEVENT
|
||||||
|
.DA $FFFF no COUT
|
||||||
|
.DA CLOSE
|
||||||
|
.DA GETINFO
|
||||||
|
.DA $FFFF no IRQ
|
||||||
|
.DA SEND
|
||||||
|
L.DEVINFO .DA DEVINFO
|
||||||
|
.DA 0 end or relocation
|
||||||
|
*--------------------------------------
|
||||||
|
* input :
|
||||||
|
* none
|
||||||
|
* output :
|
||||||
|
* CC on success
|
||||||
|
* CS on error
|
||||||
|
*--------------------------------------
|
||||||
|
OPEN jsr Reset
|
||||||
>LDYAI PP.RxCTL
|
>LDYAI PP.RxCTL
|
||||||
>STYA PacketPagePTR,x
|
>STYA PacketPagePTR,x
|
||||||
>LDYAI PP.RxCTL.LID+PP.RxCTL.RxOKA+PP.RxCTL.IA+PP.RxCTL.BroadcastA
|
>LDYAI PP.RxCTL.LID+PP.RxCTL.RxOKA+PP.RxCTL.IA+PP.RxCTL.BroadcastA
|
||||||
|
@ -197,18 +275,7 @@ OPEN ldx #$10
|
||||||
>LDYAI PP.LineCTL.LID+PP.LineCTL.SerRxOn+PP.LineCTL.SerTxOn+PP.LineCTL.Auto
|
>LDYAI PP.LineCTL.LID+PP.LineCTL.SerRxOn+PP.LineCTL.SerTxOn+PP.LineCTL.Auto
|
||||||
>STYA PacketPageDATA,x
|
>STYA PacketPageDATA,x
|
||||||
|
|
||||||
lda #S.DEV.F.NET+S.DEV.F.EVENT+S.DEV.F.OUT
|
clc
|
||||||
sta (pDevContext)
|
|
||||||
ldy #S.DEV.NAME
|
|
||||||
ldx #0
|
|
||||||
.7 lda DEVNAME,x
|
|
||||||
sta (pDevContext),y
|
|
||||||
cpx DEVNAME
|
|
||||||
beq .8
|
|
||||||
inx
|
|
||||||
iny
|
|
||||||
bne .7
|
|
||||||
.8 clc
|
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* input :
|
* input :
|
||||||
|
@ -217,8 +284,7 @@ OPEN ldx #$10
|
||||||
* CC no event
|
* CC no event
|
||||||
* CS event
|
* CS event
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
GETEVENT >PULLW pEvent
|
GETEVENT ldx DEVSLOTx0
|
||||||
ldx DEVSLOTx0
|
|
||||||
>LDYAI PP.RxEvent
|
>LDYAI PP.RxEvent
|
||||||
>STYA PacketPagePTR,x
|
>STYA PacketPagePTR,x
|
||||||
>LDYA PacketPageDATA,x
|
>LDYA PacketPageDATA,x
|
||||||
|
@ -237,7 +303,7 @@ GETEVENT.RxOK
|
||||||
>LDYA RTDATA,x get RxLength
|
>LDYA RTDATA,x get RxLength
|
||||||
>STYA FRAMELEN
|
>STYA FRAMELEN
|
||||||
>PUSHYA
|
>PUSHYA
|
||||||
>PUSHB 0
|
>PUSHBI 0
|
||||||
>SYSCALL SYS.GetMem
|
>SYSCALL SYS.GetMem
|
||||||
bcs .99
|
bcs .99
|
||||||
>STYA ZPTmpPTR
|
>STYA ZPTmpPTR
|
||||||
|
@ -254,6 +320,7 @@ GETEVENT.RxOK
|
||||||
sta (pEvent)
|
sta (pEvent)
|
||||||
ldy #0
|
ldy #0
|
||||||
ldx DEVSLOTx0
|
ldx DEVSLOTx0
|
||||||
|
|
||||||
.1 lda RTDATA,x
|
.1 lda RTDATA,x
|
||||||
sta (ZPTmpPTR),y
|
sta (ZPTmpPTR),y
|
||||||
iny
|
iny
|
||||||
|
@ -267,13 +334,26 @@ GETEVENT.RxOK
|
||||||
bne .3
|
bne .3
|
||||||
inc ZPTmpPTR+1
|
inc ZPTmpPTR+1
|
||||||
.3 jsr DecFrameLen
|
.3 jsr DecFrameLen
|
||||||
beq .8
|
bne .1
|
||||||
bra .1
|
|
||||||
.8 clc
|
.8 clc
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.99 sec
|
.99 sec
|
||||||
rts
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
CLOSE jsr Reset
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
* in:
|
||||||
|
* out:
|
||||||
|
* Y,A = BUFFER PTR
|
||||||
|
* CC on success
|
||||||
|
* CS on error
|
||||||
|
*--------------------------------------
|
||||||
|
GETINFO >LDYA L.DEVINFO
|
||||||
|
clc
|
||||||
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* in:
|
* in:
|
||||||
* PULLW = FRAME PTR
|
* PULLW = FRAME PTR
|
||||||
|
@ -282,7 +362,7 @@ GETEVENT.RxOK
|
||||||
* CC on success
|
* CC on success
|
||||||
* CS on error
|
* CS on error
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
OUT >PULLW ZPTmpPTR
|
SEND >PULLW ZPTmpPTR
|
||||||
>PULLW FRAMELEN
|
>PULLW FRAMELEN
|
||||||
|
|
||||||
ldy #11 Add Src MAC Address
|
ldy #11 Add Src MAC Address
|
||||||
|
@ -341,20 +421,6 @@ SENDPREADY ldy #0
|
||||||
.8 clc
|
.8 clc
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CLOSE jsr Reset
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
* in:
|
|
||||||
* out:
|
|
||||||
* Y,A = BUFFER PTR
|
|
||||||
* CC on success
|
|
||||||
* CS on error
|
|
||||||
*--------------------------------------
|
|
||||||
GETINFO >LDYA L.DEVINFO
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
* PRIVATE
|
* PRIVATE
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
Reset ldx DEVSLOTx0
|
Reset ldx DEVSLOTx0
|
||||||
|
@ -363,74 +429,25 @@ Reset ldx DEVSLOTx0
|
||||||
>LDYAI PP.SelfCTL.LID+PP.SelfCTL.RESET
|
>LDYAI PP.SelfCTL.LID+PP.SelfCTL.RESET
|
||||||
>STYA PacketPageDATA,x
|
>STYA PacketPageDATA,x
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
|
||||||
DecodeMac lda (ZPTmpPTR)
|
|
||||||
cmp #12
|
|
||||||
bne .9
|
|
||||||
ldy #1
|
|
||||||
ldx #0
|
|
||||||
.1 lda (ZPTmpPTR),y
|
|
||||||
jsr Asc2NibbleA
|
|
||||||
bcs .9
|
|
||||||
asl
|
|
||||||
asl
|
|
||||||
asl
|
|
||||||
asl
|
|
||||||
sta MAC,x
|
|
||||||
iny
|
|
||||||
lda (ZPTmpPTR),y
|
|
||||||
jsr Asc2NibbleA
|
|
||||||
bcs .9
|
|
||||||
ora MAC,x
|
|
||||||
sta MAC,x
|
|
||||||
inx
|
|
||||||
iny
|
|
||||||
cpy #13
|
|
||||||
bne .1
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
.9 sec
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
Asc2NibbleA cmp #$30
|
|
||||||
bcc .9
|
|
||||||
cmp #$3A
|
|
||||||
bcs .1
|
|
||||||
and #$0F
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
.1 cmp #$41
|
|
||||||
bcc .9
|
|
||||||
cmp #$47
|
|
||||||
bcs .9
|
|
||||||
sbc #$36
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
.9 sec
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
DecFrameLen lda FRAMELEN
|
DecFrameLen lda FRAMELEN
|
||||||
bne .1
|
bne .1
|
||||||
lda FRAMELEN+1
|
lda FRAMELEN+1
|
||||||
beq .2
|
beq .8
|
||||||
dec FRAMELEN+1
|
dec FRAMELEN+1
|
||||||
.1 dec FRAMELEN
|
.1 dec FRAMELEN
|
||||||
.2 lda FRAMELEN
|
lda #1 Make something NZ
|
||||||
ora FRAMELEN+1
|
.8 rts
|
||||||
rts
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.END
|
DRV.CS.END
|
||||||
DEVNAME >PSTRING "ETH1"
|
|
||||||
*--------------------------------------
|
|
||||||
DS.START
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
DEVSLOTx0 .BS 1
|
DEVSLOTx0 .BS 1
|
||||||
FRAMELEN .BS 2
|
FRAMELEN .BS 2
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
DEVINFO
|
DEVINFO .DA #S.DEVINFO.TYPE.NET
|
||||||
MAC .BS 6
|
MAC .BS 6
|
||||||
*--------------------------------------
|
LINK.STATUS .BS 1
|
||||||
DS.END
|
LINK.SPEED .BS 1 SPEED/DUPLEX
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
MAN
|
MAN
|
||||||
SAVE DRV/UTHERNET.DRV.S
|
SAVE DRV/UTHERNET.DRV.S
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /A2OSX.BUILD
|
PREFIX /A2OSX.BOOT
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
268
INC/A2osX.API.I.txt
Normal file
268
INC/A2osX.API.I.txt
Normal file
|
@ -0,0 +1,268 @@
|
||||||
|
PR#3
|
||||||
|
PREFIX /A2OSX.SRC
|
||||||
|
NEW
|
||||||
|
INC 1
|
||||||
|
AUTO 6
|
||||||
|
.LIST OFF
|
||||||
|
*--------------------------------------
|
||||||
|
************ A2osX API ****************
|
||||||
|
*--------------------------------------
|
||||||
|
* A2osX.SYSCALL Functions Indexes
|
||||||
|
*--------------------------------------
|
||||||
|
SYS.GetMem .EQ $00
|
||||||
|
SYS.FreeMemA .EQ $02
|
||||||
|
SYS.GetMemPtrA .EQ $04
|
||||||
|
SYS.GetMemByIDA .EQ $06
|
||||||
|
|
||||||
|
SYS.GetMemByNameA .EQ $08
|
||||||
|
SYS.GetMemByNameYA .EQ $0A
|
||||||
|
*--------------------------------------
|
||||||
|
SYS.NewPStrYA .EQ $10
|
||||||
|
SYS.PStrCpyA .EQ $12
|
||||||
|
SYS.PStrCat .EQ $14
|
||||||
|
SYS.PStrCmp .EQ $16
|
||||||
|
|
||||||
|
SYS.PStrGetTkn .EQ $18
|
||||||
|
SYS.GetPStrIndex .EQ $1A
|
||||||
|
*--------------------------------------
|
||||||
|
SYS.LoadBinA .EQ $20
|
||||||
|
SYS.LoadLibYA .EQ $22
|
||||||
|
SYS.UnloadLibA .EQ $24
|
||||||
|
SYS.LoadDrvA .EQ $26
|
||||||
|
*--------------------------------------
|
||||||
|
SYS.ExpandPStrA .EQ $30
|
||||||
|
SYS.ExpandPStrYA .EQ $32
|
||||||
|
SYS.GetEnvVarH .EQ $34
|
||||||
|
SYS.GetEnvVarP .EQ $36
|
||||||
|
|
||||||
|
SYS.SetEnvVarH .EQ $38
|
||||||
|
SYS.SetEnvVarP .EQ $3A
|
||||||
|
*--------------------------------------
|
||||||
|
SYS.MLICreateFile .EQ $40
|
||||||
|
SYS.MLICreateDirA .EQ $42
|
||||||
|
SYS.MLICreateDirYA .EQ $44
|
||||||
|
SYS.MLIDestroyA .EQ $46
|
||||||
|
|
||||||
|
SYS.MLIDestroyYA .EQ $48
|
||||||
|
SYS.MLIRename .EQ $4A
|
||||||
|
SYS.MLISetFileInfo .EQ $4C
|
||||||
|
SYS.MLIGetFileInfoA .EQ $4E
|
||||||
|
|
||||||
|
SYS.MLIGetFileInfoYA .EQ $50
|
||||||
|
SYS.MLIOnline .EQ $52
|
||||||
|
SYS.MLISetPrefixA .EQ $54
|
||||||
|
SYS.MLISetPrefixYA .EQ $56
|
||||||
|
|
||||||
|
SYS.MLIGetPrefixA .EQ $58
|
||||||
|
SYS.MLIGetPrefixYA .EQ $5A
|
||||||
|
SYS.MLIOpenA .EQ $5C
|
||||||
|
SYS.MLIOpenYA .EQ $5E
|
||||||
|
|
||||||
|
SYS.MLINewLine .EQ $60
|
||||||
|
SYS.MLIRead .EQ $62
|
||||||
|
SYS.MLIWrite .EQ $64
|
||||||
|
SYS.MLICloseA .EQ $66
|
||||||
|
|
||||||
|
SYS.MLIFlushA .EQ $68
|
||||||
|
SYS.MLISetMark .EQ $6A
|
||||||
|
SYS.MLIGetMarkA .EQ $6A
|
||||||
|
SYS.MLISetEOF .EQ $6C
|
||||||
|
|
||||||
|
SYS.MLIGetEOFA .EQ $70
|
||||||
|
SYS.MLISetBuf .EQ $72
|
||||||
|
SYS.MLIGetBuf .EQ $74
|
||||||
|
SYS.MLIGetTime .EQ $76
|
||||||
|
|
||||||
|
SYS.MLIAllocIRQ .EQ $78
|
||||||
|
SYS.MLIDeallocIRQ .EQ $7A
|
||||||
|
SYS.MLIReadBlock .EQ $7C
|
||||||
|
SYS.MLIWriteBlock .EQ $7E
|
||||||
|
*--------------------------------------
|
||||||
|
SYS.GetDevByIDA .EQ $80
|
||||||
|
SYS.GetDevByNameA .EQ $82
|
||||||
|
SYS.GetDevByNameYA .EQ $84
|
||||||
|
*--------------------------------------
|
||||||
|
SYS.ExecProcessA .EQ $90
|
||||||
|
SYS.CreateProcessA .EQ $92
|
||||||
|
|
||||||
|
SYS.GetPSByIDA .EQ $98
|
||||||
|
*--------------------------------------
|
||||||
|
SYS.CheckPrefixA .EQ $A0
|
||||||
|
SYS.FileSearch .EQ $A2
|
||||||
|
SYS.LoadFileA .EQ $A4
|
||||||
|
SYS.ListDirInitA .EQ $A6
|
||||||
|
|
||||||
|
SYS.ListDirNextA .EQ $A8
|
||||||
|
SYS.ListDirCloseA .EQ $AA
|
||||||
|
*--------------------------------------
|
||||||
|
SYS.AddNetCfg .EQ $B0
|
||||||
|
SYS.SetNetCfg .EQ $B2
|
||||||
|
SYS.GetNetCfgA .EQ $B4
|
||||||
|
SYS.ClrNetCfgA .EQ $B6
|
||||||
|
*--------------------------------------
|
||||||
|
SYS.ScreenSelectA .EQ $C0
|
||||||
|
|
||||||
|
SYS.SysScrPPSTRA .EQ $C4
|
||||||
|
SYS.SysScrPPSTRYA .EQ $C6
|
||||||
|
*--------------------------------------
|
||||||
|
* ERROR CODES
|
||||||
|
*--------------------------------------
|
||||||
|
MEMMGR.ERROOM .EQ $FF Out Of Memory Error
|
||||||
|
MEMMGR.ERROOH .EQ $FE Out Of Handle Error
|
||||||
|
*--------------------------------------
|
||||||
|
DEVMGR.ERROOM .EQ $EF Out Of Memory Error
|
||||||
|
DEVMGR.ERROOH .EQ $EE Out Of Handle Error
|
||||||
|
DEVMGR.ERRNICL .EQ $ED Invalid Command Line
|
||||||
|
DEVMGR.ERRNOHW .EQ $EC No Hardware
|
||||||
|
DEVMGR.ERRDNF .EQ $EB Device Not Found Error
|
||||||
|
*--------------------------------------
|
||||||
|
TSKMGR.ERROOH .EQ $DF Out Of Handle Error
|
||||||
|
TSKMGR.ERRNSP .EQ $DD No Such Process Error
|
||||||
|
*--------------------------------------
|
||||||
|
SYSMGR.ERRSYN .EQ $CF Syntax Error
|
||||||
|
SYSMGR.ERRENVF .EQ $CE Env is Full
|
||||||
|
SYSMGR.ERRIDIR .EQ $CD Invalid Directory
|
||||||
|
SYSMGR.ERRFTB .EQ $CC File Too Big Error
|
||||||
|
SYSMGR.ERRFNF .EQ $CB File Not Found Error
|
||||||
|
*--------------------------------------
|
||||||
|
* MEM STRUCT
|
||||||
|
*--------------------------------------
|
||||||
|
S.MEM.F .EQ 0
|
||||||
|
S.MEM.F.AUX .EQ %10000000 Request Stock Object
|
||||||
|
S.MEM.F.INIT0 .EQ %01000000 Fill with "0"
|
||||||
|
S.MEM.F.CODE .EQ %00100000
|
||||||
|
S.MEM.F.NOMOVE .EQ %00010000
|
||||||
|
S.MEM.F.ALIGN .EQ %00001000
|
||||||
|
S.MEM.F.INUSE .EQ %10000000 (Internal Flag)
|
||||||
|
S.MEM.REFCNT .EQ 1
|
||||||
|
S.MEM.OWNERPID .EQ 2
|
||||||
|
S.MEM.BIN .EQ 3
|
||||||
|
S.MEM.PTR .EQ 4
|
||||||
|
S.MEM.LEN .EQ 6
|
||||||
|
*
|
||||||
|
S.MEM.SIZE .EQ 8
|
||||||
|
*--------------------------------------
|
||||||
|
* BIN STRUCT
|
||||||
|
*--------------------------------------
|
||||||
|
S.BIN.CODE .EQ 0
|
||||||
|
*--------------------------------------
|
||||||
|
* DEV STRUCT
|
||||||
|
*--------------------------------------
|
||||||
|
S.DEV.CODE .EQ 0
|
||||||
|
S.DEV.JMP .EQ 2
|
||||||
|
S.DEV.F .EQ 4
|
||||||
|
S.DEV.F.INUSE .EQ %10000000
|
||||||
|
S.DEV.F.BUSY .EQ %01000000
|
||||||
|
S.DEV.F.SHARE .EQ %00100000 Device is shareable
|
||||||
|
S.DEV.F.IRQ .EQ %00010000 Device is irq driven
|
||||||
|
S.DEV.F.EVENT .EQ %00001000 Device is event driven
|
||||||
|
S.DEV.F.COUT .EQ %00000100 Device supports Char OUT
|
||||||
|
S.DEV.F.BLOCK .EQ %00000010
|
||||||
|
S.DEV.F.CHAR .EQ %00000001
|
||||||
|
S.DEV.NAME .EQ 5 5 Bytes : LEN+NUL KBD CON COMx LPTx ETHx
|
||||||
|
*
|
||||||
|
S.DEV.SIZE .EQ 16
|
||||||
|
*--------------------------------------
|
||||||
|
S.DEVINFO.TYPE .EQ 0
|
||||||
|
S.DEVINFO.TYPE.CHAR .EQ %00000001
|
||||||
|
S.DEVINFO.TYPE.XY .EQ %00000010
|
||||||
|
S.DEVINFO.TYPE.NET .EQ %00000011
|
||||||
|
S.DEVINFO.TYPE.GFX .EQ %00000100
|
||||||
|
*--------------------------------------
|
||||||
|
* Generic Driver Functions
|
||||||
|
*--------------------------------------
|
||||||
|
DEVMGR.OPEN .EQ 0
|
||||||
|
DEVMGR.GETEVENT .EQ 2
|
||||||
|
DEVMGR.COUT .EQ 4
|
||||||
|
DEVMGR.CLOSE .EQ 6
|
||||||
|
DEVMGR.GETINFO .EQ 8
|
||||||
|
DEVMGR.IRQ .EQ 10
|
||||||
|
*--------------------------------------
|
||||||
|
* 'XY' Class Driver Functions
|
||||||
|
*--------------------------------------
|
||||||
|
DEVMGR.XY.SETPOS .EQ 12
|
||||||
|
*--------------------------------------
|
||||||
|
* 'NET' Class Driver Functions
|
||||||
|
*--------------------------------------
|
||||||
|
DEVMGR.NET.SEND .EQ 12
|
||||||
|
*--------------------------------------
|
||||||
|
* 'GFX' Class Driver Functions
|
||||||
|
*--------------------------------------
|
||||||
|
DEVMGR.GFX.SETPIXEL .EQ 12
|
||||||
|
DEVMGR.GFX.GETPIXEL .EQ 14
|
||||||
|
DEVMGR.GFX.HLINE .EQ 16
|
||||||
|
DEVMGR.GFX.VLINE .EQ 18
|
||||||
|
DEVMGR.GFX.BITBLT .EQ 20
|
||||||
|
*--------------------------------------
|
||||||
|
* PS STRUCT
|
||||||
|
*--------------------------------------
|
||||||
|
S.PS.F .EQ 0
|
||||||
|
S.PS.F.INUSE .EQ %10000000
|
||||||
|
S.PS.F.HOLD .EQ %01000000
|
||||||
|
S.PS.F.EVENT .EQ %00100000
|
||||||
|
S.PS.ID .EQ 1
|
||||||
|
S.PS.PID .EQ 2
|
||||||
|
S.PS.hCS .EQ 3
|
||||||
|
S.PS.hDS .EQ 4
|
||||||
|
S.PS.hPREFIX .EQ 5
|
||||||
|
S.PS.hENV .EQ 6
|
||||||
|
S.PS.hCMD .EQ 7
|
||||||
|
S.PS.hARGS .EQ 8
|
||||||
|
S.PS.hINDEV .EQ 9
|
||||||
|
S.PS.hOUTDEV .EQ 10
|
||||||
|
S.PS.hERRDEV .EQ 11
|
||||||
|
S.PS.CID .EQ 12
|
||||||
|
S.PS.LASTERROR .EQ 13
|
||||||
|
S.PS.PC .EQ 14
|
||||||
|
*
|
||||||
|
S.PS.SIZE .EQ 16
|
||||||
|
*--------------------------------------
|
||||||
|
* EVENT STRUCT
|
||||||
|
*--------------------------------------
|
||||||
|
S.EVT.F .EQ 0
|
||||||
|
S.EVT.F.SYS .EQ %10000000
|
||||||
|
S.EVT.F.WND .EQ %01000000
|
||||||
|
S.EVT.F.hMEM2 .EQ %00100000 Indicates That S.EVT.DATAHI is a hMem
|
||||||
|
S.EVT.F.hMEM1 .EQ %00010000 Indicates That S.EVT.DATALO is a hMem
|
||||||
|
S.EVT.F.TIMER .EQ %00001000
|
||||||
|
S.EVT.F.NET .EQ %00000100
|
||||||
|
S.EVT.F.MOUSE .EQ %00000010
|
||||||
|
S.EVT.F.KEY .EQ %00000001
|
||||||
|
S.EVT.hDEV .EQ 1
|
||||||
|
S.EVT.DATA .EQ 2
|
||||||
|
S.EVT.DATALO .EQ 2
|
||||||
|
S.EVT.DATAHI .EQ 3
|
||||||
|
S.EVT.DATAW1 .EQ 4
|
||||||
|
S.EVT.DATAW2 .EQ 6
|
||||||
|
*
|
||||||
|
S.EVT.SIZE .EQ 8
|
||||||
|
*--------------------------------------
|
||||||
|
* S.LISTDIR STRUCT
|
||||||
|
*--------------------------------------
|
||||||
|
S.LISTDIR.hONLINE .EQ 0
|
||||||
|
S.LISTDIR.ONLINEPTR .EQ 1
|
||||||
|
S.LISTDIR.REFNUM .EQ 2 ref_num file
|
||||||
|
S.LISTDIR.hIOBUF .EQ 3 hMem to ProDOS IO buffer
|
||||||
|
S.LISTDIR.hREADBUF .EQ 4 hMem to 512 Read Buffer
|
||||||
|
S.LISTDIR.EL .EQ 5 entry_length
|
||||||
|
S.LISTDIR.EIB .EQ 6 ENTRY_INDEX in block
|
||||||
|
S.LISTDIR.EPB .EQ 7 entry_per_block
|
||||||
|
S.LISTDIR.BLKPTR .EQ 8 entry PTR in block
|
||||||
|
S.LISTDIR.FI .EQ 10 FILE_INDEX in DIR
|
||||||
|
S.LISTDIR.FC .EQ 12 file_count
|
||||||
|
S.LISTDIR.hPATTERN .EQ 14 Pattern for file filtering
|
||||||
|
*
|
||||||
|
S.LISTDIR.SIZE .EQ 16
|
||||||
|
*--------------------------------------
|
||||||
|
* S.BUFRDR STRUCT
|
||||||
|
*--------------------------------------
|
||||||
|
S.BUFRDR.hMEM .EQ 0
|
||||||
|
S.BUFRDR.DELIM .EQ 1
|
||||||
|
S.BUFRDR.LEN .EQ 2
|
||||||
|
S.BUFRDR.IDX .EQ 4
|
||||||
|
*
|
||||||
|
S.BUFRDR.SIZE .EQ 6
|
||||||
|
*--------------------------------------
|
||||||
|
|
||||||
|
MAN
|
||||||
|
SAVE INC/A2OSX.API.I
|
330
INC/A2osX.I.txt
330
INC/A2osX.I.txt
|
@ -1,258 +1,77 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /A2OSX.BUILD
|
PREFIX /A2OSX.SRC
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
.LIST OFF
|
.LIST OFF
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* KERNEL Reserved ZP Location 00-1F,56-FF
|
* Aux ZP
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
ZPQuickPtr1 .EQ $90 Temp Ptrs for use in very limited scope
|
ZPQuickPtr1 .EQ $0 Temp Ptrs for use in very limited scope
|
||||||
ZPQuickPtr2 .EQ $92 (could be trashed by any JSR)
|
ZPQuickPtr2 .EQ $2 (could be trashed by any JSR)
|
||||||
ZPQuickPtr3 .EQ $94
|
ZPQuickPtr3 .EQ $4
|
||||||
ZPQuickPtr4 .EQ $96
|
ZPQuickPtr4 .EQ $6
|
||||||
|
|
||||||
ZPLIB .EQ $A0 Main
|
pCode .EQ $10
|
||||||
ZPDRV .EQ $B0 Main
|
pData .EQ $12
|
||||||
ZPBIN .EQ $C0 Main
|
pStack .EQ $14
|
||||||
*--------------------------------------
|
|
||||||
pPsContext .EQ $F0
|
|
||||||
pDevContext .EQ $F2
|
|
||||||
pEvent .EQ $F4
|
|
||||||
*--------------------------------------
|
|
||||||
R.SP .EQ $FE Main
|
|
||||||
*--------------------------------------
|
|
||||||
* A2OS.SYSCALL Functions Indexes
|
|
||||||
*--------------------------------------
|
|
||||||
SYS.GetMem .EQ $00
|
|
||||||
SYS.FreeMemA .EQ $02
|
|
||||||
SYS.ClrMemA .EQ $04
|
|
||||||
SYS.GetMemPtrA .EQ $06
|
|
||||||
|
|
||||||
SYS.GetMemLenA .EQ $08
|
pLib .EQ $16
|
||||||
SYS.GetMemByIDA .EQ $0A
|
pDev .EQ $18
|
||||||
SYS.GetMemByNameA .EQ $0C
|
|
||||||
*--------------------------------------
|
|
||||||
SYS.NewPStr .EQ $10
|
|
||||||
SYS.PStrCpyA .EQ $12
|
|
||||||
SYS.PStrCat .EQ $14
|
|
||||||
SYS.PStrCmp .EQ $16
|
|
||||||
|
|
||||||
SYS.PStrGetTkn .EQ $18
|
pEvent .EQ $1A
|
||||||
SYS.GetPStrIndex .EQ $1A
|
pPs .EQ $1C
|
||||||
*--------------------------------------
|
|
||||||
SYS.LoadBinA .EQ $20
|
|
||||||
SYS.LoadLib .EQ $22
|
|
||||||
SYS.UnloadLibA .EQ $24
|
|
||||||
SYS.LoadDrvA .EQ $26
|
|
||||||
*--------------------------------------
|
|
||||||
SYS.ExpandPStrA .EQ $30
|
|
||||||
SYS.ExpandPStr .EQ $32
|
|
||||||
SYS.GetEnvVarH .EQ $34
|
|
||||||
SYS.GetEnvVarP .EQ $36
|
|
||||||
|
|
||||||
SYS.SetEnvVarH .EQ $38
|
ZPDRV .EQ $80
|
||||||
SYS.SetEnvVarP .EQ $3A
|
ZPBIN .EQ $90
|
||||||
|
ZPLIB .EQ $A0
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
SYS.MLICreate .EQ $40
|
* $C0 -> $FF KERNEL RESERVED
|
||||||
SYS.MLIDestroy .EQ $42
|
|
||||||
SYS.MLIRename .EQ $44
|
|
||||||
SYS.MLISetFileInfo .EQ $46
|
|
||||||
|
|
||||||
SYS.MLIGetFileInfoA .EQ $48
|
|
||||||
SYS.MLIOnline .EQ $4A
|
|
||||||
SYS.MLISetPrefix .EQ $4C
|
|
||||||
SYS.MLIGetPrefixA .EQ $4E
|
|
||||||
|
|
||||||
SYS.MLIOpenA .EQ $50
|
|
||||||
SYS.MLINewLine .EQ $52
|
|
||||||
SYS.MLIRead .EQ $54
|
|
||||||
SYS.MLIWrite .EQ $56
|
|
||||||
|
|
||||||
SYS.MLICloseA .EQ $58
|
|
||||||
SYS.MLIFlushA .EQ $5A
|
|
||||||
SYS.MLISetMark .EQ $5C
|
|
||||||
SYS.MLIGetMark .EQ $5E
|
|
||||||
|
|
||||||
SYS.MLISetEOF .EQ $60
|
|
||||||
SYS.MLIGetEOFA .EQ $62
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
SYS.GetDevByIDA .EQ $70
|
A2osX.SaveSM .EQ $100 Aux
|
||||||
SYS.GetDevByNameA .EQ $72
|
|
||||||
SYS.GetDevTable .EQ $74
|
|
||||||
SYS.GetDevInfoA .EQ $76
|
|
||||||
|
|
||||||
SYS.DevOutA .EQ $78
|
|
||||||
SYS.GetDevByNameYA .EQ $7A
|
|
||||||
*--------------------------------------
|
|
||||||
SYS.GetEvent .EQ $80
|
|
||||||
SYS.DestroyEvent .EQ $82
|
|
||||||
*--------------------------------------
|
|
||||||
SYS.ExecProcessA .EQ $90
|
|
||||||
SYS.CreateProcessA .EQ $92
|
|
||||||
|
|
||||||
SYS.GetPSByIDA .EQ $98
|
|
||||||
*--------------------------------------
|
|
||||||
SYS.CheckPrefixA .EQ $A0
|
|
||||||
SYS.FileSearch .EQ $A2
|
|
||||||
SYS.LoadFileA .EQ $A4
|
|
||||||
SYS.ListDirInitA .EQ $A6
|
|
||||||
|
|
||||||
SYS.ListDirNextA .EQ $A8
|
|
||||||
SYS.ListDirCloseA .EQ $AA
|
|
||||||
*--------------------------------------
|
|
||||||
SYS.AddNetCfg .EQ $B0
|
|
||||||
SYS.SetNetCfg .EQ $B2
|
|
||||||
SYS.GetNetCfgA .EQ $B4
|
|
||||||
SYS.ClrNetCfgA .EQ $B6
|
|
||||||
*--------------------------------------
|
|
||||||
SYS.ScreenSelectA .EQ $C0
|
|
||||||
*--------------------------------------
|
|
||||||
A2osX.SaveSM .EQ $100 Main
|
|
||||||
A2osX.SaveSX .EQ $101 Aux
|
A2osX.SaveSX .EQ $101 Aux
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* Main $200 -> 2FF : (Reserved, ProDOS,Clock DRV....)
|
* Main $200 -> 2FF : (Used By ProDOS,Clock DRV....)
|
||||||
* Main $300 -> 3EF : <free>
|
* Main $300 -> 3EF : <free>
|
||||||
* Main $3F0 -> 3FF : SYS Vectors (reset,IRQ...)
|
* Main $3F0 -> 3FF : SYS Vectors (reset,IRQ...)
|
||||||
* Aux $200 -> 3FD : /RAM Driver
|
* Aux $200 -> 3FD : /RAM Driver
|
||||||
* Aux $3FE -> 3FF : IRQ Vector
|
* Aux $3FE -> 3FF : IRQ Vector
|
||||||
|
* Main/Aux $400 -> $7FF : Console Screen
|
||||||
|
* Main/Aux $800 -> $BFF : System Screen
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* Console Screen .EQ $400 -> $7FF
|
TmpBuffer256 .EQ $0200 Main
|
||||||
* System Screen .EQ $800 -> $BFF
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
TmpBuffer256 .EQ $0C00
|
D.STACK.BASE .EQ $0300 $03EF...
|
||||||
*--------------------------------------
|
D.STACK.TOP .EQ $03F0 ...Down to $0300
|
||||||
D.STACKSEG .EQ $0D00 $0DFF Down to $0D00
|
|
||||||
*--------------------------------------
|
|
||||||
MLICALL.PARAMS .EQ $0E00 size=$12 (SET_FILE_INFO +1)
|
|
||||||
*--------------------------------------
|
|
||||||
MEMMGR.LOMEM .EQ $0E30
|
|
||||||
MEMMGR.MLLIMIT .EQ $0E32
|
|
||||||
MEMMGR.MHLIMIT .EQ $0E34
|
|
||||||
MEMMGR.HIMEM .EQ $0E36
|
|
||||||
MEMMGR.MFREE .EQ $0E38
|
|
||||||
MEMMGR.TABLESIZE .EQ $0E3A
|
|
||||||
*--------------------------------------
|
|
||||||
Z80STACK .EQ $0FFF (0FFFFh) Down to $0F00
|
|
||||||
Z80JMP .EQ $1000
|
|
||||||
*--------------------------------------
|
|
||||||
DEVMGR.TABLE .EQ $1200 K.DEV.MAX*S.DEV.SIZE=20*12=240
|
|
||||||
TSKMGR.TABLE .EQ $1300 K.PS.MAX*S.PS.SIZE=32*16=512
|
|
||||||
*--------------------------------------
|
|
||||||
A2osX.LOMEM .EQ $1500
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* A2osX GLOBAL PAGE
|
* A2osX GLOBAL PAGE
|
||||||
* $BE00->$BE0F : Public JMP
|
* $BE00->$BE0F : Public Vetors
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
A2osX.SYSCALL .EQ $BE00
|
A2osX.SYSCALL .EQ $BE00
|
||||||
A2osX.MLICALL .EQ $BE02
|
A2osX.LIBCALL .EQ $BE02
|
||||||
A2osX.LIBCALL .EQ $BE04
|
A2osX.SLEEP .EQ $BE04
|
||||||
A2osX.SLEEP .EQ $BE06
|
A2osX.MLICALL .EQ $BE06
|
||||||
Kernel.MLICALL .EQ $BE08
|
|
||||||
Kernel.DRVCALL .EQ $BE0A
|
|
||||||
Kernel.BINCALL .EQ $BE0C
|
|
||||||
Kernel.LIBCALL .EQ $BE0E
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
A2osX.SCREENS .EQ $BE10
|
* $BEE0->$BEFF : Public Variables
|
||||||
A2osX.SCREENS.G .EQ %00000100
|
*--------------------------------------
|
||||||
A2osX.SCREENS.C .EQ %00000010
|
A2osX.SCREENS .EQ $BEE0
|
||||||
A2osX.SCREENS.S .EQ %00000001
|
A2osX.SCREENS.S .EQ %00000001 System Screen
|
||||||
A2osX.ACTIVESCRN .EQ $BE11
|
A2osX.SCREENS.C .EQ %00000010 Console Screen
|
||||||
|
A2osX.SCREENS.G .EQ %00000100 Graphic Screen
|
||||||
|
A2osX.ASCREEN .EQ $BEE1 Active Screen
|
||||||
|
|
||||||
A2osX.TIMER16 .EQ $BE12
|
A2osX.CSCREEN.DEV .EQ $BEE2
|
||||||
A2osX.RANDOM16 .EQ $BE14
|
A2osX.GSCREEN.DEV .EQ $BEE3
|
||||||
|
|
||||||
A2osX.CPUTYPE .EQ $BE16
|
A2osX.TIMER16 .EQ $BEE4
|
||||||
A2osX.Z80SLOT .EQ $BE17
|
A2osX.RANDOM16 .EQ $BEE6
|
||||||
|
|
||||||
Kernel.JMP .EQ $BE1A
|
A2osX.CPUTYPE .EQ $BEE8
|
||||||
A2osX.SaveA .EQ $BE1C
|
A2osX.Z80SLOT .EQ $BEEA
|
||||||
A2osX.SaveX .EQ $BE1D
|
|
||||||
A2osX.SaveY .EQ $BE1E
|
|
||||||
A2osX.GPCODE .EQ $BE20
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* MEM STRUCT
|
*** Z80 Reserved ***
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
S.MEM.F .EQ 0
|
*** IRQ Handler ***
|
||||||
S.MEM.F.INUSE .EQ %10000000
|
|
||||||
S.MEM.F.CLEAR .EQ %10000000 Fill with "0"
|
|
||||||
S.MEM.F.CODE .EQ %01000000
|
|
||||||
S.MEM.F.NOMOV .EQ %00100000
|
|
||||||
S.MEM.F.ALIGN .EQ %00010000
|
|
||||||
S.MEM.F.SPARE .EQ %00001000
|
|
||||||
S.MEM.F.AUX .EQ %00000100
|
|
||||||
S.MEM.REFCNT .EQ 1
|
|
||||||
S.MEM.PTR .EQ 2
|
|
||||||
S.MEM.LEN .EQ 4
|
|
||||||
S.MEM.BIN .EQ 6
|
|
||||||
S.MEM.OWNERPID .EQ 7
|
|
||||||
*
|
|
||||||
S.MEM.SIZE .EQ 8
|
|
||||||
*--------------------------------------
|
|
||||||
MEMMGR.ERROOM .EQ $FF Out Of Memory Error
|
|
||||||
MEMMGR.ERROOS .EQ $FE Out Of Slot Error
|
|
||||||
*--------------------------------------
|
|
||||||
* DEV STRUCT
|
|
||||||
*--------------------------------------
|
|
||||||
S.DEV.F .EQ 0
|
|
||||||
S.DEV.F.INUSE .EQ %10000000
|
|
||||||
S.DEV.F.EVENT .EQ %01000000
|
|
||||||
S.DEV.F.OUT .EQ %00100000
|
|
||||||
S.DEV.F.MOUSE .EQ %00010000
|
|
||||||
S.DEV.F.GFX .EQ %00001000
|
|
||||||
S.DEV.F.NET .EQ %00000100
|
|
||||||
S.DEV.F.BLOCK .EQ %00000010
|
|
||||||
S.DEV.F.CHAR .EQ %00000001
|
|
||||||
S.DEV.ID .EQ 1
|
|
||||||
S.DEV.NAME .EQ 2 5 Bytes : NUL KBD CON COMx LPTx ETHx
|
|
||||||
S.DEV.hCS .EQ 7
|
|
||||||
S.DEV.hDS .EQ 8
|
|
||||||
S.DEV.hCMD .EQ 9
|
|
||||||
S.DEV.hARGS .EQ 10
|
|
||||||
S.DEV.hOWNERPS .EQ 11
|
|
||||||
*
|
|
||||||
S.DEV.SIZE .EQ 12
|
|
||||||
*--------------------------------------
|
|
||||||
* Generic Driver Functions
|
|
||||||
*--------------------------------------
|
|
||||||
DEVMGR.OPEN .EQ 0
|
|
||||||
DEVMGR.GETEVENT .EQ 2
|
|
||||||
DEVMGR.OUT .EQ 4
|
|
||||||
DEVMGR.CLOSE .EQ 6
|
|
||||||
DEVMGR.GETINFO .EQ 8
|
|
||||||
*--------------------------------------
|
|
||||||
* 'GFX' Class Driver Functions
|
|
||||||
*--------------------------------------
|
|
||||||
DEVMGR.GFX.SETPIXEL .EQ 10
|
|
||||||
DEVMGR.GFX.GETPIXEL .EQ 12
|
|
||||||
*--------------------------------------
|
|
||||||
DEVMGR.ERRNICL .EQ $EB Invalid Command Line
|
|
||||||
DEVMGR.ERRNOHW .EQ $EC No Hardware
|
|
||||||
DEVMGR.ERRDNF .EQ $ED Device Not Found Error
|
|
||||||
DEVMGR.ERROOS .EQ $EE Out Of Slot Error
|
|
||||||
*--------------------------------------
|
|
||||||
* PS STRUCT
|
|
||||||
*--------------------------------------
|
|
||||||
S.PS.F .EQ 0
|
|
||||||
S.PS.F.INUSE .EQ %10000000
|
|
||||||
S.PS.F.HOLD .EQ %01000000
|
|
||||||
S.PS.F.EVENT .EQ %00100000
|
|
||||||
S.PS.ID .EQ 1
|
|
||||||
S.PS.PID .EQ 2
|
|
||||||
S.PS.hCS .EQ 3
|
|
||||||
S.PS.hDS .EQ 4
|
|
||||||
S.PS.hPREFIX .EQ 5
|
|
||||||
S.PS.hENV .EQ 6
|
|
||||||
S.PS.hCMD .EQ 7
|
|
||||||
S.PS.hARGS .EQ 8
|
|
||||||
S.PS.hINDEV .EQ 9
|
|
||||||
S.PS.hOUTDEV .EQ 10
|
|
||||||
S.PS.hERRDEV .EQ 11
|
|
||||||
S.PS.CID .EQ 12
|
|
||||||
S.PS.LASTERROR .EQ 13
|
|
||||||
S.PS.PC .EQ 14
|
|
||||||
*
|
|
||||||
S.PS.SIZE .EQ 16
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* LIB Function Indexes
|
* LIB Function Indexes
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
@ -266,60 +85,5 @@ TSKMGR.RUN .EQ 2
|
||||||
TSKMGR.DOEVENT .EQ 4
|
TSKMGR.DOEVENT .EQ 4
|
||||||
TSKMGR.QUIT .EQ 6
|
TSKMGR.QUIT .EQ 6
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
TSKMGR.ERROOS .EQ $DE Out Of Slot Error
|
|
||||||
TSKMGR.ERRNSP .EQ $DF No Such Process Error
|
|
||||||
*--------------------------------------
|
|
||||||
* EVENT STRUCT
|
|
||||||
*--------------------------------------
|
|
||||||
S.EVT.F .EQ 0
|
|
||||||
S.EVT.F.SYS .EQ %10000000
|
|
||||||
S.EVT.F.WND .EQ %01000000
|
|
||||||
S.EVT.F.hMEM2 .EQ %00100000 Indicates That S.EVT.DATAHI is a hMem
|
|
||||||
S.EVT.F.hMEM1 .EQ %00010000 Indicates That S.EVT.DATALO is a hMem
|
|
||||||
S.EVT.F.TIMER .EQ %00001000
|
|
||||||
S.EVT.F.NET .EQ %00000100
|
|
||||||
S.EVT.F.MOUSE .EQ %00000010
|
|
||||||
S.EVT.F.KEY .EQ %00000001
|
|
||||||
S.EVT.hDEV .EQ 1
|
|
||||||
S.EVT.DATA .EQ 2
|
|
||||||
S.EVT.DATALO .EQ 2
|
|
||||||
S.EVT.DATAHI .EQ 3
|
|
||||||
S.EVT.DATAW1 .EQ 4
|
|
||||||
S.EVT.DATAW2 .EQ 6
|
|
||||||
*
|
|
||||||
S.EVT.SIZE .EQ 8
|
|
||||||
*--------------------------------------
|
|
||||||
SYSMGR.ERRENVF .EQ $CB Env is Full
|
|
||||||
SYSMGR.ERRIDIR .EQ $CC Invalid Directory
|
|
||||||
SYSMGR.ERRFTB .EQ $CD File Too Big Error
|
|
||||||
SYSMGR.ERRFNF .EQ $CE File Not Found Error
|
|
||||||
SYSMGR.ERRSYN .EQ $CF Syntax Error
|
|
||||||
*--------------------------------------
|
|
||||||
* S.LISTDIR STRUCT
|
|
||||||
*--------------------------------------
|
|
||||||
S.LISTDIR.hONLINE .EQ 0
|
|
||||||
S.LISTDIR.ONLINEPTR .EQ 1
|
|
||||||
S.LISTDIR.REFNUM .EQ 2 ref_num file
|
|
||||||
S.LISTDIR.hIOBUF .EQ 3 hMem to ProDOS IO buffer
|
|
||||||
S.LISTDIR.hREADBUF .EQ 4 hMem to 512 Read Buffer
|
|
||||||
S.LISTDIR.EL .EQ 5 entry_length
|
|
||||||
S.LISTDIR.EIB .EQ 6 ENTRY_INDEX in block
|
|
||||||
S.LISTDIR.EPB .EQ 7 entry_per_block
|
|
||||||
S.LISTDIR.BLKPTR .EQ 8 entry PTR in block
|
|
||||||
S.LISTDIR.FI .EQ 10 FILE_INDEX in DIR
|
|
||||||
S.LISTDIR.FC .EQ 12 file_count
|
|
||||||
S.LISTDIR.hPATTERN .EQ 14 Pattern for file filtering
|
|
||||||
*
|
|
||||||
S.LISTDIR.SIZE .EQ 16
|
|
||||||
*--------------------------------------
|
|
||||||
* S.BUFRDR STRUCT
|
|
||||||
*--------------------------------------
|
|
||||||
S.BUFRDR.hMEM .EQ 0
|
|
||||||
S.BUFRDR.DELIM .EQ 1
|
|
||||||
S.BUFRDR.LEN .EQ 2
|
|
||||||
S.BUFRDR.IDX .EQ 4
|
|
||||||
*
|
|
||||||
S.BUFRDR.SIZE .EQ 6
|
|
||||||
*--------------------------------------
|
|
||||||
MAN
|
MAN
|
||||||
SAVE INC/A2OSX.I
|
SAVE INC/A2OSX.I
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /A2OSX.BUILD
|
PREFIX /A2OSX.SRC
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /A2OSX.BUILD
|
PREFIX /A2OSX.SRC
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
@ -7,13 +7,11 @@ AUTO 6
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* KERNEL CONSTANTS DEFINITON
|
* KERNEL CONSTANTS DEFINITON
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
K.BIN.MAGICHEADER .EQ $7CD8
|
|
||||||
*--------------------------------------
|
|
||||||
K.TIMER16RESOLUTION .EQ 5 every 5 VBL (50hz), so 100ms
|
K.TIMER16RESOLUTION .EQ 5 every 5 VBL (50hz), so 100ms
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
K.ENV.SIZE .EQ $100
|
K.ENV.SIZE .EQ $100
|
||||||
K.DEV.MAX .EQ 20
|
K.DEV.MAX .EQ 32
|
||||||
K.PS.MAX .EQ 32
|
K.PS.MAX .EQ 64
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
K.NETCFG.MAX .EQ 4
|
K.NETCFG.MAX .EQ 4
|
||||||
K.NETCFG.SIZE .EQ 128
|
K.NETCFG.SIZE .EQ 128
|
||||||
|
@ -28,17 +26,31 @@ K.TCPTABLE.SIZE .EQ 16
|
||||||
K.ETH.FRAME.LEN .EQ 1514
|
K.ETH.FRAME.LEN .EQ 1514
|
||||||
K.IP.TTL .EQ 64
|
K.IP.TTL .EQ 64
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* KERNEL Reserved ZP Location 00-1F,56-FF
|
H.BIN.HEADER .EQ 0
|
||||||
|
H.BIN.HEADER.DRV65 .EQ $4C8D 6502:cld,jmp abs
|
||||||
|
H.BIN.HEADER.LIB65 .EQ $7C8D 6502:cld,jmp (abs,x)
|
||||||
|
H.BIN.HEADER.BIN65 .EQ $7C8D 6502:cld,jmp (abs,x)
|
||||||
|
H.BIN.HEADER.DRV80 .EQ $A28D Z80:
|
||||||
|
H.BIN.HEADER.LIB80 .EQ $A28D Z80:
|
||||||
|
H.BIN.HEADER.BIN80 .EQ $A28D Z80:
|
||||||
|
H.BIN.JMP .EQ 2
|
||||||
|
H.BIN.CODE.TYPE .EQ 4
|
||||||
|
H.BIN.VERSION .EQ 5
|
||||||
|
H.BIN.CODE.LEN .EQ 8
|
||||||
|
H.BIN.BIN.DS.SIZE .EQ 10
|
||||||
|
H.BIN.DEV.HEADER.O .EQ 10
|
||||||
|
H.BIN.DRV.CODE.O .EQ 12
|
||||||
|
H.BIN.DRV.CODE.LEN .EQ 14
|
||||||
|
H.BIN.RELOC.TABLE .EQ 16
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
DEVMGR.DEVPTR .EQ $80
|
* KERNEL Reserved ZP (Aux) Location 00-1F,56-FF
|
||||||
EVTMGR.EVTPTR .EQ $82
|
|
||||||
TSKMGR.TSKPTR .EQ $84
|
|
||||||
TSKMGR.pNewPS .EQ $86
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
ZPMemMgr .EQ $D0 Aux
|
ZPMemMgr .EQ $B0
|
||||||
ZPSysScr .EQ $E0 Aux
|
ZPSysScr .EQ $C0
|
||||||
|
ZPDevMgr .EQ $D0
|
||||||
|
ZPTskMgr .EQ $E0
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
R.VCPU16 .EQ $F0 Aux
|
R.VCPU16 .EQ $F0
|
||||||
R.AX .EQ R.VCPU16
|
R.AX .EQ R.VCPU16
|
||||||
R.AL .EQ R.VCPU16
|
R.AL .EQ R.VCPU16
|
||||||
R.AH .EQ R.VCPU16+$1
|
R.AH .EQ R.VCPU16+$1
|
||||||
|
@ -51,10 +63,27 @@ R.CH .EQ R.VCPU16+$5
|
||||||
R.DX .EQ R.VCPU16+$6
|
R.DX .EQ R.VCPU16+$6
|
||||||
R.DL .EQ R.VCPU16+$6
|
R.DL .EQ R.VCPU16+$6
|
||||||
R.DH .EQ R.VCPU16+$7
|
R.DH .EQ R.VCPU16+$7
|
||||||
*R.CS .EQ R.VCPU16+$8
|
*--------------------------------------
|
||||||
*R.DS .EQ R.VCPU16+$A
|
MLICALL.PARAMS .EQ $1100
|
||||||
R.LS .EQ R.VCPU16+$C
|
DevMgr.Table .EQ $1200 K.DEV.MAX*S.DEV.SIZE=32*16=512b
|
||||||
*R.SP .EQ R.VCPU16+$E
|
*--------------------------------------
|
||||||
|
TskMgr.Table .EQ $1400 K.PS.MAX*S.PS.SIZE=64*16=1k
|
||||||
|
*--------------------------------------
|
||||||
|
* MemMgr : $1800->$1FFF MAIN/AUX (2 kBytes)
|
||||||
|
*--------------------------------------
|
||||||
|
MemMgr.Table .EQ $1800
|
||||||
|
MemMgr.HiMem .EQ $1800 Slot 0 is Reserved
|
||||||
|
MemMgr.Free .EQ $1802
|
||||||
|
MemMgr.LoMem .EQ $1804
|
||||||
|
MemMgr.LastSlot .EQ $1806
|
||||||
|
*--------------------------------------
|
||||||
|
MemMgr.MLoMem .EQ $2000
|
||||||
|
MemMgr.MHiMem .EQ $BE00
|
||||||
|
MemMgr.XLoMem .EQ $2000
|
||||||
|
MemMgr.XHiMem .EQ $C000
|
||||||
|
*--------------------------------------
|
||||||
|
KERNEL.COLDBOOT .EQ $D000
|
||||||
|
KERNEL.SYSCALL .EQ $D003
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
MAN
|
MAN
|
||||||
SAVE INC/KERNEL.I
|
SAVE INC/KERNEL.I
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /A2OSX.BUILD
|
PREFIX /A2OSX.SRC
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /A2OSX.BUILD
|
PREFIX /A2OSX.SRC
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /A2OSX.BUILD
|
PREFIX /A2OSX.SRC
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /A2OSX.BUILD
|
PREFIX /A2OSX.SRC
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
288
INC/MACROS.I.txt
288
INC/MACROS.I.txt
|
@ -1,13 +1,13 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /A2OSX.BUILD
|
PREFIX /A2OSX.SRC
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
.LIST OFF
|
.LIST OFF
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.MA DEBUG
|
.MA DEBUG
|
||||||
.70 bit $C000
|
:1 bit $C000
|
||||||
bpl .70
|
bpl :1
|
||||||
sta $C010
|
sta $C010
|
||||||
.EM
|
.EM
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
@ -20,6 +20,12 @@ AUTO 6
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.MA MLICALL
|
.MA MLICALL
|
||||||
ldx #]1
|
ldx #]1
|
||||||
|
.DO ]1=MLIALLOCIRQ
|
||||||
|
lda #2
|
||||||
|
.FIN
|
||||||
|
.DO ]1=MLIDEALLOCIRQ
|
||||||
|
lda #1
|
||||||
|
.FIN
|
||||||
.DO ]1=MLIREADBLOCK
|
.DO ]1=MLIREADBLOCK
|
||||||
lda #3
|
lda #3
|
||||||
.FIN
|
.FIN
|
||||||
|
@ -89,78 +95,6 @@ AUTO 6
|
||||||
|
|
||||||
jsr A2osX.MLICALL
|
jsr A2osX.MLICALL
|
||||||
.EM
|
.EM
|
||||||
*--------------------------------------
|
|
||||||
.MA KMLICALL
|
|
||||||
ldx #]1
|
|
||||||
.DO ]1=MLIREADBLOCK
|
|
||||||
lda #3
|
|
||||||
.FIN
|
|
||||||
.DO ]1=MLIWRITEBLOCK
|
|
||||||
lda #3
|
|
||||||
.FIN
|
|
||||||
.DO ]1=MLICREATE
|
|
||||||
lda #7
|
|
||||||
.FIN
|
|
||||||
.DO ]1=MLIDESTROY
|
|
||||||
lda #1
|
|
||||||
.FIN
|
|
||||||
.DO ]1=MLIRENAME
|
|
||||||
lda #2
|
|
||||||
.FIN
|
|
||||||
.DO ]1=MLISETFILEINFO
|
|
||||||
lda #7
|
|
||||||
.FIN
|
|
||||||
.DO ]1=MLIGETFILEINFO
|
|
||||||
lda #10
|
|
||||||
.FIN
|
|
||||||
.DO ]1=MLIONLINE
|
|
||||||
lda #2
|
|
||||||
.FIN
|
|
||||||
.DO ]1=MLISETPREFIX
|
|
||||||
lda #1
|
|
||||||
.FIN
|
|
||||||
.DO ]1=MLIGETPREFIX
|
|
||||||
lda #1
|
|
||||||
.FIN
|
|
||||||
.DO ]1=MLIOPEN
|
|
||||||
lda #3
|
|
||||||
.FIN
|
|
||||||
.DO ]1=MLINEWLINE
|
|
||||||
lda #3
|
|
||||||
.FIN
|
|
||||||
.DO ]1=MLIREAD
|
|
||||||
lda #4
|
|
||||||
.FIN
|
|
||||||
.DO ]1=MLIWRITE
|
|
||||||
lda #4
|
|
||||||
.FIN
|
|
||||||
.DO ]1=MLICLOSE
|
|
||||||
lda #1
|
|
||||||
.FIN
|
|
||||||
.DO ]1=MLIFLUSH
|
|
||||||
lda #1
|
|
||||||
.FIN
|
|
||||||
.DO ]1=MLISETMARK
|
|
||||||
lda #2
|
|
||||||
.FIN
|
|
||||||
.DO ]1=MLIGETMARK
|
|
||||||
lda #2
|
|
||||||
.FIN
|
|
||||||
.DO ]1=MLISETEOF
|
|
||||||
lda #2
|
|
||||||
.FIN
|
|
||||||
.DO ]1=MLIGETEOF
|
|
||||||
lda #2
|
|
||||||
.FIN
|
|
||||||
.DO ]1=MLISETBUF
|
|
||||||
lda #2
|
|
||||||
.FIN
|
|
||||||
.DO ]1=MLIGETBUF
|
|
||||||
lda #2
|
|
||||||
.FIN
|
|
||||||
|
|
||||||
jsr Kernel.MLICALL
|
|
||||||
.EM
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.MA DRVCALL
|
.MA DRVCALL
|
||||||
ldy ]1
|
ldy ]1
|
||||||
|
@ -168,13 +102,12 @@ AUTO 6
|
||||||
jsr A2osX.DRVCALL
|
jsr A2osX.DRVCALL
|
||||||
.EM
|
.EM
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.MA LIBLOADP
|
.MA LOADLIBYA
|
||||||
>PUSHW ]1
|
ldx #SYS.LoadLibYA
|
||||||
ldx #SYS.LoadLib
|
|
||||||
jsr A2osX.SYSCALL
|
jsr A2osX.SYSCALL
|
||||||
.EM
|
.EM
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.MA LIBLOADA
|
.MA LOADLIBA
|
||||||
ldx #SYS.LoadLibA
|
ldx #SYS.LoadLibA
|
||||||
jsr A2osX.SYSCALL
|
jsr A2osX.SYSCALL
|
||||||
.EM
|
.EM
|
||||||
|
@ -185,200 +118,111 @@ AUTO 6
|
||||||
jsr A2osX.LIBCALL
|
jsr A2osX.LIBCALL
|
||||||
.EM
|
.EM
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* LOCAL SEGMENT Manipulation Macros
|
|
||||||
*--------------------------------------
|
|
||||||
.MA ADDLOCAL
|
|
||||||
pha
|
|
||||||
lda R.LS
|
|
||||||
dec R.SP
|
|
||||||
sta (R.SP)
|
|
||||||
lda R.SP
|
|
||||||
sec
|
|
||||||
sbc #]1
|
|
||||||
sta R.SP
|
|
||||||
sta R.LS
|
|
||||||
pla
|
|
||||||
.EM
|
|
||||||
*--------------------------------------
|
|
||||||
.MA REMLOCAL
|
|
||||||
php
|
|
||||||
pha
|
|
||||||
lda R.SP
|
|
||||||
clc
|
|
||||||
adc #]1
|
|
||||||
sta R.SP
|
|
||||||
lda (R.SP)
|
|
||||||
inc R.SP
|
|
||||||
sta R.LS
|
|
||||||
pla
|
|
||||||
plp
|
|
||||||
.EM
|
|
||||||
*--------------------------------------
|
|
||||||
.MA LDAL
|
|
||||||
ldy #]1
|
|
||||||
lda (R.LS),y
|
|
||||||
.EM
|
|
||||||
*--------------------------------------
|
|
||||||
.MA ADCL
|
|
||||||
ldy #]1
|
|
||||||
adc (R.LS),y
|
|
||||||
.EM
|
|
||||||
*--------------------------------------
|
|
||||||
.MA SBCL
|
|
||||||
ldy #]1
|
|
||||||
adc (R.LS),y
|
|
||||||
.EM
|
|
||||||
*--------------------------------------
|
|
||||||
.MA STAL
|
|
||||||
ldy #]1
|
|
||||||
sta (R.LS),y
|
|
||||||
.EM
|
|
||||||
*--------------------------------------
|
|
||||||
.MA LDYAL
|
|
||||||
ldy #]1
|
|
||||||
lda (R.LS),y
|
|
||||||
pha
|
|
||||||
iny
|
|
||||||
lda (R.LS),y
|
|
||||||
ply
|
|
||||||
.EM
|
|
||||||
*--------------------------------------
|
|
||||||
.MA STYAL
|
|
||||||
phy
|
|
||||||
ldy #]1+1
|
|
||||||
sta (R.LS),y
|
|
||||||
dey
|
|
||||||
pla
|
|
||||||
sta (R.LS),y
|
|
||||||
tay
|
|
||||||
.EM
|
|
||||||
*--------------------------------------
|
|
||||||
.MA INCL
|
|
||||||
ldy #]1
|
|
||||||
lda (R.LS),y
|
|
||||||
inc
|
|
||||||
sta (R.LS),y
|
|
||||||
.EM
|
|
||||||
*--------------------------------------
|
|
||||||
.MA INCLW
|
|
||||||
ldy #]1
|
|
||||||
lda (R.LS),y
|
|
||||||
inc
|
|
||||||
bne .71
|
|
||||||
sta (R.LS),y
|
|
||||||
iny
|
|
||||||
lda (R.LS),y
|
|
||||||
inc
|
|
||||||
.71 sta (R.LS),y
|
|
||||||
.EM
|
|
||||||
*--------------------------------------
|
|
||||||
.MA DECL
|
|
||||||
ldy #]1
|
|
||||||
lda (R.LS),y
|
|
||||||
dec
|
|
||||||
sta (R.LS),y
|
|
||||||
.EM
|
|
||||||
*--------------------------------------
|
|
||||||
.MA DECLW
|
|
||||||
ldy #]1
|
|
||||||
lda (R.LS),y
|
|
||||||
bne .72
|
|
||||||
pha
|
|
||||||
iny
|
|
||||||
lda (R.LS),y
|
|
||||||
dec
|
|
||||||
sta (R.LS),y
|
|
||||||
dey
|
|
||||||
pla
|
|
||||||
.72 dec
|
|
||||||
sta (R.LS),y
|
|
||||||
.EM
|
|
||||||
*--------------------------------------
|
|
||||||
* D.STACK PUSH/PULL Macros
|
* D.STACK PUSH/PULL Macros
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.MA PUSHA
|
.MA PUSHA
|
||||||
dec R.SP
|
dec pStack
|
||||||
sta (R.SP)
|
sta (pStack)
|
||||||
.EM
|
.EM
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.MA PULLA
|
.MA PULLA
|
||||||
lda (R.SP)
|
lda (pStack)
|
||||||
inc R.SP
|
inc pStack
|
||||||
.EM
|
.EM
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.MA PUSHYA
|
.MA PUSHYA
|
||||||
dec R.SP
|
dec pStack
|
||||||
sta (R.SP)
|
sta (pStack)
|
||||||
pha
|
pha
|
||||||
tya
|
tya
|
||||||
dec R.SP
|
dec pStack
|
||||||
sta (R.SP)
|
sta (pStack)
|
||||||
pla
|
pla
|
||||||
.EM
|
.EM
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.MA PULLYA
|
.MA PULLYA
|
||||||
lda (R.SP)
|
lda (pStack)
|
||||||
inc R.SP
|
inc pStack
|
||||||
tay
|
tay
|
||||||
lda (R.SP)
|
lda (pStack)
|
||||||
inc R.SP
|
inc pStack
|
||||||
|
.EM
|
||||||
|
*--------------------------------------
|
||||||
|
.MA PUSHAX
|
||||||
|
pha
|
||||||
|
txa
|
||||||
|
dec pStack
|
||||||
|
sta (pStack)
|
||||||
|
pla
|
||||||
|
dec pStack
|
||||||
|
sta (pStack)
|
||||||
|
.EM
|
||||||
|
*--------------------------------------
|
||||||
|
.MA PULLAX
|
||||||
|
lda (pStack)
|
||||||
|
inc pStack
|
||||||
|
pha
|
||||||
|
lda (pStack)
|
||||||
|
inc pStack
|
||||||
|
tax
|
||||||
|
pla
|
||||||
.EM
|
.EM
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.MA PUSHBI
|
.MA PUSHBI
|
||||||
dec R.SP
|
dec pStack
|
||||||
lda #]1
|
lda #]1
|
||||||
sta (R.SP)
|
sta (pStack)
|
||||||
.EM
|
.EM
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.MA PUSHB
|
.MA PUSHB
|
||||||
.DO ]#=2
|
.DO ]#=2
|
||||||
dec R.SP
|
dec pStack
|
||||||
lda ]1,]2
|
lda ]1,]2
|
||||||
sta (R.SP)
|
sta (pStack)
|
||||||
.ELSE
|
.ELSE
|
||||||
dec R.SP
|
dec pStack
|
||||||
lda ]1
|
lda ]1
|
||||||
sta (R.SP)
|
sta (pStack)
|
||||||
.FIN
|
.FIN
|
||||||
.EM
|
.EM
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.MA PULLB
|
.MA PULLB
|
||||||
.DO ]#=2
|
.DO ]#=2
|
||||||
lda (R.SP)
|
lda (pStack)
|
||||||
sta ]1,]2
|
sta ]1,]2
|
||||||
inc R.SP
|
inc pStack
|
||||||
.ELSE
|
.ELSE
|
||||||
lda (R.SP)
|
lda (pStack)
|
||||||
sta ]1
|
sta ]1
|
||||||
inc R.SP
|
inc pStack
|
||||||
.FIN
|
.FIN
|
||||||
.EM
|
.EM
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.MA PUSHWI
|
.MA PUSHWI
|
||||||
dec R.SP
|
dec pStack
|
||||||
lda /]1
|
lda /]1
|
||||||
sta (R.SP)
|
sta (pStack)
|
||||||
dec R.SP
|
dec pStack
|
||||||
lda #]1
|
lda #]1
|
||||||
sta (R.SP)
|
sta (pStack)
|
||||||
.EM
|
.EM
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.MA PUSHW
|
.MA PUSHW
|
||||||
dec R.SP
|
dec pStack
|
||||||
lda ]1+1
|
lda ]1+1
|
||||||
sta (R.SP)
|
sta (pStack)
|
||||||
dec R.SP
|
dec pStack
|
||||||
lda ]1
|
lda ]1
|
||||||
sta (R.SP)
|
sta (pStack)
|
||||||
.EM
|
.EM
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.MA PULLW
|
.MA PULLW
|
||||||
lda (R.SP)
|
lda (pStack)
|
||||||
sta ]1
|
sta ]1
|
||||||
inc R.SP
|
inc pStack
|
||||||
lda (R.SP)
|
lda (pStack)
|
||||||
sta ]1+1
|
sta ]1+1
|
||||||
inc R.SP
|
inc pStack
|
||||||
.EM
|
.EM
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* General WORD Manipulation Macros
|
* General WORD Manipulation Macros
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /A2OSX.BUILD
|
PREFIX /A2OSX.SRC
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 1000
|
AUTO 1000
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /A2OSX.BUILD
|
PREFIX /A2OSX.SRC
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 1000
|
AUTO 1000
|
||||||
|
|
14
INC/ZP.I.txt
14
INC/ZP.I.txt
|
@ -1,9 +1,11 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /A2OSX.BUILD
|
PREFIX /A2OSX.SRC
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
* ProDOS Reserved ZP Location 00-1F,56-FF
|
||||||
|
*--------------------------------------
|
||||||
WNDLFT .EQ $20 SCROLL WINDOW LEFT
|
WNDLFT .EQ $20 SCROLL WINDOW LEFT
|
||||||
WNDWDTH .EQ $21 SCROLL WINDOW WIDTH
|
WNDWDTH .EQ $21 SCROLL WINDOW WIDTH
|
||||||
WNDTOP .EQ $22 SCROLL WINDOW TOP
|
WNDTOP .EQ $22 SCROLL WINDOW TOP
|
||||||
|
@ -26,5 +28,15 @@ KSWH .EQ $39 INPUT CHARACTER HOOK HIGH
|
||||||
RNDL .EQ $4E RANDOM NUMBER LOW
|
RNDL .EQ $4E RANDOM NUMBER LOW
|
||||||
RNDH .EQ $4F RANDOM NUMBER HIGH
|
RNDH .EQ $4F RANDOM NUMBER HIGH
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
* Applesoft FP Registers
|
||||||
|
*--------------------------------------
|
||||||
|
EXPSGN .EQ $9C
|
||||||
|
FAC .EQ $9D -> A1, MAIN FLT PT ACCUMULATOR
|
||||||
|
FAC.SIGN .EQ $A2 HOLDS UNPACKED SIGN
|
||||||
|
ARG .EQ $A5 -> A9, SECONDARY FP ACC
|
||||||
|
ARG.SIGN .EQ $AA
|
||||||
|
SGNCPR .EQ $AB FLAGS OPP SIGN IN FP ROUT.
|
||||||
|
FAC.EXTENSION .EQ $AC FAC EXTENSION BYTE
|
||||||
|
*--------------------------------------
|
||||||
MAN
|
MAN
|
||||||
SAVE INC/ZP.I
|
SAVE INC/ZP.I
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /A2OSX.BUILD
|
PREFIX /A2OSX.SRC
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /A2OSX.BUILD
|
PREFIX /A2OSX.SRC
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
|
@ -1,33 +1,35 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /A2OSX.BUILD
|
PREFIX /A2OSX.SRC
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
.LIST OFF
|
.LIST OFF
|
||||||
.OP 65C02
|
.OP 65C02
|
||||||
.OR $2000
|
.OR $2000
|
||||||
.TF LIB/LIBSTR.O
|
.TF /A2OSX.BOOT/LIB/LIBSTR.O
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.INB INC/MACROS.I
|
.INB INC/MACROS.I
|
||||||
.INB INC/A2OSX.I
|
.INB INC/A2OSX.I
|
||||||
|
.INB INC/A2OSX.API.I
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
ZPTmpPtr1 .EQ ZPLIB+2
|
ZPTmpPtr1 .EQ ZPLIB+2
|
||||||
ZPTmpPtr2 .EQ ZPLIB+4
|
ZPTmpPtr2 .EQ ZPLIB+4
|
||||||
ZPTmpPtr3 .EQ ZPLIB+6
|
ZPTmpPtr3 .EQ ZPLIB+6
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* Main entry point
|
* File Header (16 Bytes)
|
||||||
* input :
|
|
||||||
* X = Function
|
|
||||||
*--------------------------------------
|
|
||||||
* Code signature and relocation table
|
|
||||||
*--------------------------------------
|
|
||||||
* CLD $D8
|
|
||||||
* JMP (*,x) $7C
|
|
||||||
* #JMPTABLE
|
|
||||||
* /JMPTABLE
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.START cld
|
CS.START cld
|
||||||
jmp (.1,x)
|
jmp (.1,x)
|
||||||
|
.DA #$61 6502,Level 1 (65c02)
|
||||||
|
.DA #1 BIN Layout Version 1
|
||||||
|
.DA 0
|
||||||
|
.DA CS.END-CS.START
|
||||||
|
.DA 0
|
||||||
|
.DA 0
|
||||||
|
.DA 0
|
||||||
|
*--------------------------------------
|
||||||
|
* Relocation Table
|
||||||
|
*--------------------------------------
|
||||||
.1 .DA LIB.LOAD
|
.1 .DA LIB.LOAD
|
||||||
.DA LIB.UNLOAD
|
.DA LIB.UNLOAD
|
||||||
.DA PRINTF
|
.DA PRINTF
|
||||||
|
@ -53,8 +55,6 @@ PRINTFJMP1 .DA PRINTFA
|
||||||
PRINTFJMP2 .DA PRINTFCR,PRINTFBKSLH,PRINTFPERCENT
|
PRINTFJMP2 .DA PRINTFCR,PRINTFBKSLH,PRINTFPERCENT
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.DA 0
|
.DA 0
|
||||||
.DA CS.END-CS.START
|
|
||||||
.DA 0
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
LIB.LOAD
|
LIB.LOAD
|
||||||
LIB.UNLOAD clc
|
LIB.UNLOAD clc
|
||||||
|
@ -756,13 +756,12 @@ CROUT lda #13
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
COUT phx
|
COUT phx
|
||||||
phy
|
phy
|
||||||
>PUSHA
|
ldx #DEVMGR.COUT
|
||||||
ldy #S.PS.hOUTDEV
|
jsr pDevJmp
|
||||||
lda (pPsContext),y
|
|
||||||
>SYSCALL SYS.DevOutA
|
|
||||||
ply
|
ply
|
||||||
plx
|
plx
|
||||||
rts
|
rts
|
||||||
|
pDevJmp jmp (pDev)
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.END
|
CS.END
|
||||||
PRINTFTBL1 .AS -"abBdDLeEhHiIsStT"
|
PRINTFTBL1 .AS -"abBdDLeEhHiIsStT"
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /A2OSX.BUILD
|
PREFIX /A2OSX.SRC
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /A2OSX.BUILD
|
PREFIX /A2OSX.SRC
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
|
@ -1,15 +1,16 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /A2OSX.BUILD
|
PREFIX /A2OSX.SRC
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
.LIST OFF
|
.LIST OFF
|
||||||
.OP 65C02
|
.OP 65C02
|
||||||
.OR $2000
|
.OR $2000
|
||||||
.TF LIB/LIBTCPIP.O
|
.TF /A2OSX.BOOT/LIB/LIBTCPIP.O
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.INB INC/MACROS.I
|
.INB INC/MACROS.I
|
||||||
.INB INC/A2OSX.I
|
.INB INC/A2OSX.I
|
||||||
|
.INB INC/A2OSX.API.I
|
||||||
.INB INC/KERNEL.I
|
.INB INC/KERNEL.I
|
||||||
.INB INC/LIBTCPIP.I
|
.INB INC/LIBTCPIP.I
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
@ -21,19 +22,20 @@ ZPARPMAC .EQ ZPLIB+8
|
||||||
ZPDNSHostname .EQ ZPLIB+10
|
ZPDNSHostname .EQ ZPLIB+10
|
||||||
ZPDNSIP .EQ ZPLIB+12
|
ZPDNSIP .EQ ZPLIB+12
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* Main entry point
|
* File Header (16 Bytes)
|
||||||
* input :
|
|
||||||
* X = Function
|
|
||||||
*--------------------------------------
|
|
||||||
* Code signature and relocation table
|
|
||||||
*--------------------------------------
|
|
||||||
* CLD $D8
|
|
||||||
* JMP (*,x) $7C
|
|
||||||
* #JMPTABLE
|
|
||||||
* /JMPTABLE
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.START cld
|
CS.START cld
|
||||||
jmp (.1,x)
|
jmp (.1,x)
|
||||||
|
.DA #$61 6502,Level 1 (65c02)
|
||||||
|
.DA #1 BIN Layout Version 1
|
||||||
|
.DA 0
|
||||||
|
.DA CS.END-CS.START
|
||||||
|
.DA 0
|
||||||
|
.DA 0
|
||||||
|
.DA 0
|
||||||
|
*--------------------------------------
|
||||||
|
* Relocation Table
|
||||||
|
*--------------------------------------
|
||||||
.1 .DA LIB.LOAD
|
.1 .DA LIB.LOAD
|
||||||
.DA LIB.UNLOAD
|
.DA LIB.UNLOAD
|
||||||
|
|
||||||
|
@ -73,8 +75,6 @@ L.IPCFG .DA IPCFG
|
||||||
L.ARP.CACHE .DA ARP.CACHE
|
L.ARP.CACHE .DA ARP.CACHE
|
||||||
L.DNS.CACHE .DA DNS.CACHE
|
L.DNS.CACHE .DA DNS.CACHE
|
||||||
.DA 0
|
.DA 0
|
||||||
.DA CS.END-CS.START
|
|
||||||
.DA DS.END-DS.START
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
LIB.LOAD lda bFirstLoad
|
LIB.LOAD lda bFirstLoad
|
||||||
bne .8
|
bne .8
|
||||||
|
@ -230,14 +230,10 @@ NEW.ARP.FRAME jsr NEW.ETH.FRAME
|
||||||
* X = hMem
|
* X = hMem
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
NEW.ETH.FRAME >PUSHWI K.ETH.FRAME.LEN
|
NEW.ETH.FRAME >PUSHWI K.ETH.FRAME.LEN
|
||||||
>PUSHBI 0
|
>PUSHBI S.MEM.F.INIT0
|
||||||
>SYSCALL SYS.GetMem
|
>SYSCALL SYS.GetMem
|
||||||
bcs .9
|
bcs .9
|
||||||
>STYA ZPFrameBase1
|
>STYA ZPFrameBase1
|
||||||
phx
|
|
||||||
txa
|
|
||||||
>SYSCALL SYS.ClrMemA
|
|
||||||
plx
|
|
||||||
clc
|
clc
|
||||||
.9 rts
|
.9 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
@ -371,7 +367,11 @@ SEND.ETH.FRAME >PUSHW ZPFrameLen1
|
||||||
>PUSHW ZPFrameBase1
|
>PUSHW ZPFrameBase1
|
||||||
ldx #S.IPCFG.HDEV
|
ldx #S.IPCFG.HDEV
|
||||||
lda IPCFG,x
|
lda IPCFG,x
|
||||||
>SYSCALL SYS.DevOutA
|
|
||||||
|
>SYSCALL SYS.GetDevByIDA
|
||||||
|
>STYA pDev
|
||||||
|
ldx #DEVMGR.NET.SEND
|
||||||
|
jsr pDevJmp
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
UDP.LISTENER >PULLW ZPFrameBase1
|
UDP.LISTENER >PULLW ZPFrameBase1
|
||||||
|
@ -461,6 +461,7 @@ ComputeChecksum >PULLA
|
||||||
eor #$FF
|
eor #$FF
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
pDevJmp jmp (pDev)
|
||||||
CS.END
|
CS.END
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
bFirstLoad .DA #0
|
bFirstLoad .DA #0
|
||||||
|
@ -474,9 +475,6 @@ DNS.CACHE .BS K.DNSCACHE.SIZE*S.DNSCACHE
|
||||||
UDP.TABLE .BS K.UDPTABLE.SIZE*S.LISTENER
|
UDP.TABLE .BS K.UDPTABLE.SIZE*S.LISTENER
|
||||||
TCP.TABLE .BS K.TCPTABLE.SIZE*S.LISTENER
|
TCP.TABLE .BS K.TCPTABLE.SIZE*S.LISTENER
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
DS.START
|
|
||||||
DS.END
|
|
||||||
*--------------------------------------
|
|
||||||
MAN
|
MAN
|
||||||
SAVE LIB/LIBTCPIP.S
|
SAVE LIB/LIBTCPIP.S
|
||||||
ASM
|
ASM
|
||||||
|
|
|
@ -1,15 +1,16 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /A2OSX.BUILD
|
PREFIX /A2OSX.SRC
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
.LIST OFF
|
.LIST OFF
|
||||||
.OP 65C02
|
.OP 65C02
|
||||||
.OR $2000
|
.OR $2000
|
||||||
.TF SBIN/DHCPCLNT
|
.TF /A2OSX.BOOT/SBIN/DHCPCLNT
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.INB INC/MACROS.I
|
.INB INC/MACROS.I
|
||||||
.INB INC/A2OSX.I
|
.INB INC/A2OSX.I
|
||||||
|
.INB INC/A2OSX.API.I
|
||||||
.INB INC/KERNEL.I
|
.INB INC/KERNEL.I
|
||||||
.INB INC/LIBSTR.I
|
.INB INC/LIBSTR.I
|
||||||
.INB INC/LIBTCPIP.I
|
.INB INC/LIBTCPIP.I
|
||||||
|
@ -18,17 +19,20 @@ ZPFrameBase1 .EQ ZPBIN
|
||||||
ZPFrameLen1 .EQ ZPBIN+2
|
ZPFrameLen1 .EQ ZPBIN+2
|
||||||
ZPFramePtr1 .EQ ZPBIN+4
|
ZPFramePtr1 .EQ ZPBIN+4
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* Main entry point
|
* File Header (16 Bytes)
|
||||||
*--------------------------------------
|
|
||||||
* Code signature and INIT table
|
|
||||||
*--------------------------------------
|
|
||||||
* CLD $D8
|
|
||||||
* JMP (*,x) $7C
|
|
||||||
* #JMPTABLE
|
|
||||||
* /JMPTABLE
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.START cld
|
CS.START cld
|
||||||
jmp (.1,x)
|
jmp (.1,x)
|
||||||
|
.DA #$61 6502,Level 1 (65c02)
|
||||||
|
.DA #1 BIN Layout Version 1
|
||||||
|
.DA 0
|
||||||
|
.DA CS.END-CS.START
|
||||||
|
.DA DS.END-DS.START Data Segment to Allocate
|
||||||
|
.DA 0
|
||||||
|
.DA 0
|
||||||
|
*--------------------------------------
|
||||||
|
* Relocation Table
|
||||||
|
*--------------------------------------
|
||||||
.1 .DA CS.INIT
|
.1 .DA CS.INIT
|
||||||
.DA CS.RUN
|
.DA CS.RUN
|
||||||
.DA CS.DOEVENT
|
.DA CS.DOEVENT
|
||||||
|
@ -37,13 +41,13 @@ L.LIBSTR .DA LIBSTR
|
||||||
L.LIBTCPIP .DA LIBTCPIP
|
L.LIBTCPIP .DA LIBTCPIP
|
||||||
L.IPCFG .DA IPCFG
|
L.IPCFG .DA IPCFG
|
||||||
.DA 0
|
.DA 0
|
||||||
.DA CS.END-CS.START Code Length To Relocate
|
|
||||||
.DA DS.END-DS.START Data Segemnt to Allocate
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.INIT >LIBLOADP L.LIBSTR
|
CS.INIT >LDYA L.LIBSTR
|
||||||
|
>LOADLIBYA
|
||||||
sta hLIBSTR
|
sta hLIBSTR
|
||||||
|
|
||||||
>LIBLOADP L.LIBTCPIP
|
>LDYA L.LIBTCPIP
|
||||||
|
>LOADLIBYA
|
||||||
sta hLIBTCPIP
|
sta hLIBTCPIP
|
||||||
|
|
||||||
>LIBCALL hLIBTCPIP,LIBTCPIP.GET.IPCFG
|
>LIBCALL hLIBTCPIP,LIBTCPIP.GET.IPCFG
|
||||||
|
@ -79,9 +83,9 @@ CS.INIT >LIBLOADP L.LIBSTR
|
||||||
lda #20
|
lda #20
|
||||||
sta TimeOut
|
sta TimeOut
|
||||||
|
|
||||||
lda (pPsContext)
|
lda (pPs)
|
||||||
ora #S.PS.F.EVENT Now accept events
|
ora #S.PS.F.EVENT Now accept events
|
||||||
sta (pPsContext)
|
sta (pPs)
|
||||||
|
|
||||||
clc
|
clc
|
||||||
.9 rts
|
.9 rts
|
||||||
|
@ -130,8 +134,7 @@ CS.RUN.OK lda #S.IPCFG.STATUS.OK
|
||||||
CS.RUN.KO sec
|
CS.RUN.KO sec
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.DOEVENT >PULLW pEvent
|
CS.DOEVENT lda (pEvent)
|
||||||
lda (pEvent)
|
|
||||||
and #S.EVT.F.TIMER is it a TIMER event?
|
and #S.EVT.F.TIMER is it a TIMER event?
|
||||||
beq .1 no....
|
beq .1 no....
|
||||||
|
|
||||||
|
@ -170,7 +173,8 @@ CS.DOEVENT >PULLW pEvent
|
||||||
bcs .9
|
bcs .9
|
||||||
lda #S.IPCFG.STATUS.ROFFER
|
lda #S.IPCFG.STATUS.ROFFER
|
||||||
sta IPCFG
|
sta IPCFG
|
||||||
bra .88
|
clc
|
||||||
|
rts
|
||||||
|
|
||||||
.2 lda IPCFG
|
.2 lda IPCFG
|
||||||
and #S.IPCFG.STATUS.SREQ
|
and #S.IPCFG.STATUS.SREQ
|
||||||
|
@ -180,9 +184,9 @@ CS.DOEVENT >PULLW pEvent
|
||||||
lda #S.IPCFG.STATUS.RACK
|
lda #S.IPCFG.STATUS.RACK
|
||||||
sta IPCFG
|
sta IPCFG
|
||||||
|
|
||||||
.88 >SYSCALL SYS.DestroyEvent
|
clc
|
||||||
.89 clc
|
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.9 sec
|
.9 sec
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
@ -489,14 +493,14 @@ FRAME.REQ.OPT.SVRIP .BS 4
|
||||||
.HS FF
|
.HS FF
|
||||||
FRAME.REQ.LEN .EQ *-FRAME.REQ
|
FRAME.REQ.LEN .EQ *-FRAME.REQ
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
DS.START
|
|
||||||
*--------------------------------------
|
|
||||||
hLIBSTR .BS 1
|
hLIBSTR .BS 1
|
||||||
hLIBTCPIP .BS 1
|
hLIBTCPIP .BS 1
|
||||||
TimeOut .BS 1
|
TimeOut .BS 1
|
||||||
IPCFG .BS S.IPCFG
|
IPCFG .BS S.IPCFG
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
DS.START
|
||||||
DS.END
|
DS.END
|
||||||
|
*--------------------------------------
|
||||||
MAN
|
MAN
|
||||||
SAVE SBIN/DHCPCLNT.S
|
SAVE SBIN/DHCPCLNT.S
|
||||||
ASM
|
ASM
|
||||||
|
|
296
SBIN/GETTY.S.txt
296
SBIN/GETTY.S.txt
|
@ -1,40 +1,43 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /A2OSX.BUILD
|
PREFIX /A2OSX.SRC
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
.LIST OFF
|
.LIST OFF
|
||||||
.OP 65C02
|
.OP 65C02
|
||||||
.OR $2000
|
.OR $2000
|
||||||
.TF SBIN/GETTY
|
.TF /A2OSX.BOOT/SBIN/GETTY
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.INB INC/MACROS.I
|
.INB INC/MACROS.I
|
||||||
.INB INC/A2OSX.I
|
.INB INC/A2OSX.I
|
||||||
|
.INB INC/A2OSX.API.I
|
||||||
|
.INB INC/KERNEL.I
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* Main entry point
|
ZPTmp1 .EQ ZPBIN
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* Code signature and INIT table
|
* File Header (16 Bytes)
|
||||||
*--------------------------------------
|
|
||||||
* CLD $D8
|
|
||||||
* JMP (*,x) $7C
|
|
||||||
* #JMPTABLE
|
|
||||||
* /JMPTABLE
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.START cld
|
CS.START cld
|
||||||
jmp (.1,x)
|
jmp (.1,x)
|
||||||
|
.DA #$61 6502,Level 1 (65c02)
|
||||||
|
.DA #1 BIN Layout Version 1
|
||||||
|
.DA 0
|
||||||
|
.DA CS.END-CS.START
|
||||||
|
.DA DS.END-DS.START Data Segment to Allocate
|
||||||
|
.DA 0
|
||||||
|
.DA 0
|
||||||
|
*--------------------------------------
|
||||||
|
* Relocation Table
|
||||||
|
*--------------------------------------
|
||||||
.1 .DA CS.INIT
|
.1 .DA CS.INIT
|
||||||
.DA CS.RUN
|
.DA CS.RUN
|
||||||
.DA CS.DOEVENT
|
.DA CS.DOEVENT
|
||||||
.DA CS.QUIT
|
.DA CS.QUIT
|
||||||
L.MSG.GREETINGS .DA MSG.GREETINGS
|
L.MSG.GREETINGS .DA MSG.GREETINGS
|
||||||
L.MSG.LOGIN .DA MSG.LOGIN
|
.DA 0 End Of Reloc Table
|
||||||
L.MSG.PASSWORD .DA MSG.PASSWORD
|
|
||||||
.DA 0
|
|
||||||
.DA CS.END-CS.START Code Length To Relocate
|
|
||||||
.DA DS.END-DS.START Data Segment to Allocate
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.INIT ldy #S.PS.hARGS
|
CS.INIT ldy #S.PS.hARGS
|
||||||
lda (pPsContext),y
|
lda (pPs),y
|
||||||
>PUSHA
|
>PUSHA
|
||||||
>PUSHBI $20 Push SEP=' '
|
>PUSHBI $20 Push SEP=' '
|
||||||
>PUSHBI 1 Push 1 for getting INDEV
|
>PUSHBI 1 Push 1 for getting INDEV
|
||||||
|
@ -45,14 +48,16 @@ CS.INIT ldy #S.PS.hARGS
|
||||||
>SYSCALL SYS.GetDevByNameA
|
>SYSCALL SYS.GetDevByNameA
|
||||||
bcs .8
|
bcs .8
|
||||||
|
|
||||||
sta hINDEV
|
txa
|
||||||
ldy #S.PS.hINDEV
|
ldy #S.PS.hINDEV
|
||||||
sta (pPsContext),y
|
sta (pPs),y
|
||||||
|
|
||||||
|
|
||||||
lda hDEVNAME
|
lda hDEVNAME
|
||||||
>SYSCALL SYS.FreeMemA
|
>SYSCALL SYS.FreeMemA
|
||||||
|
|
||||||
ldy #S.PS.hARGS
|
ldy #S.PS.hARGS
|
||||||
lda (pPsContext),y
|
lda (pPs),y
|
||||||
>PUSHA
|
>PUSHA
|
||||||
>PUSHBI $20 Push SEP=' '
|
>PUSHBI $20 Push SEP=' '
|
||||||
>PUSHBI 2 Push 1 for getting OUTDEV
|
>PUSHBI 2 Push 1 for getting OUTDEV
|
||||||
|
@ -63,40 +68,31 @@ CS.INIT ldy #S.PS.hARGS
|
||||||
>SYSCALL SYS.GetDevByNameA
|
>SYSCALL SYS.GetDevByNameA
|
||||||
.8 bcs .98
|
.8 bcs .98
|
||||||
|
|
||||||
sta hOUTDEV
|
>STYA pDev
|
||||||
|
txa
|
||||||
ldy #S.PS.hOUTDEV
|
ldy #S.PS.hOUTDEV
|
||||||
sta (pPsContext),y
|
sta (pPs),y
|
||||||
ldy #S.PS.hERRDEV
|
ldy #S.PS.hERRDEV
|
||||||
sta (pPsContext),y
|
sta (pPs),y
|
||||||
lda hDEVNAME
|
lda hDEVNAME
|
||||||
>SYSCALL SYS.FreeMemA
|
>SYSCALL SYS.FreeMemA
|
||||||
|
|
||||||
ldy #S.PS.hARGS
|
ldy #S.PS.hARGS
|
||||||
lda (pPsContext),y
|
lda (pPs),y
|
||||||
>PUSHA
|
>PUSHA
|
||||||
>PUSHBI $20 Push SEP=' '
|
>PUSHBI $20 Push SEP=' '
|
||||||
>PUSHBI 3 Push 3 for getting BIN
|
>PUSHBI 3 Push 3 for getting BIN
|
||||||
>SYSCALL SYS.PStrGetTkn
|
>SYSCALL SYS.PStrGetTkn
|
||||||
bcs .99
|
bcs .99
|
||||||
|
|
||||||
sta BINID
|
ldy #hBinName
|
||||||
ldy #S.PS.ID
|
sta (pData),y
|
||||||
lda (pPsContext),y
|
|
||||||
* ldy #S.DEV.hOWNERPS
|
ldx #DEVMGR.OPEN
|
||||||
* sta (DEVMGR.DEVPTR),y
|
jsr pDevJmp if error CS, else...
|
||||||
|
|
||||||
>LDYA L.MSG.GREETINGS
|
|
||||||
jsr PRINT.MSG
|
|
||||||
|
|
||||||
lda hOUTDEV
|
|
||||||
jsr PRBYTE
|
|
||||||
|
|
||||||
stz STATUS
|
rts ...Tell TskMgr To stay in memory
|
||||||
lda (pPsContext)
|
|
||||||
ora #S.PS.F.EVENT Now accept events
|
|
||||||
sta (pPsContext)
|
|
||||||
clc Tell TskMgr To stay in memory
|
|
||||||
rts
|
|
||||||
|
|
||||||
.98 pha
|
.98 pha
|
||||||
lda hDEVNAME
|
lda hDEVNAME
|
||||||
|
@ -105,200 +101,108 @@ CS.INIT ldy #S.PS.hARGS
|
||||||
sec
|
sec
|
||||||
.99 rts
|
.99 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.RUN lda STATUS
|
CS.RUN ldy #S.PS.hOUTDEV
|
||||||
bne CS.RUN.1
|
lda (pPs),y
|
||||||
jsr CROUT
|
>SYSCALL SYS.GetDevByIDA
|
||||||
jsr CROUT
|
>STYA pDev
|
||||||
>LDYA L.MSG.LOGIN
|
|
||||||
|
lda #13 try send a CR...
|
||||||
|
|
||||||
|
jsr COUT Device Is Ready ?
|
||||||
|
|
||||||
|
bcc .1
|
||||||
|
clc no..loop...
|
||||||
|
rts
|
||||||
|
|
||||||
|
.1 >LDYA L.MSG.GREETINGS
|
||||||
jsr PRINT.MSG
|
jsr PRINT.MSG
|
||||||
jsr INPUT.INIT
|
|
||||||
inc STATUS
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
CS.RUN.1 cmp #1
|
|
||||||
bne CS.RUN.2
|
|
||||||
ldx INSTATUS
|
|
||||||
beq .9
|
|
||||||
ldx INBUFFER
|
|
||||||
beq .2
|
|
||||||
.1 lda INBUFFER,x
|
|
||||||
sta USERNAME,x
|
|
||||||
dex
|
|
||||||
bpl .1
|
|
||||||
inc STATUS
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
.2 dec STATUS
|
|
||||||
.9 clc
|
|
||||||
rts
|
|
||||||
CS.RUN.2 cmp #2
|
|
||||||
bne CS.RUN.3
|
|
||||||
jsr CROUT
|
|
||||||
>LDYA L.MSG.PASSWORD
|
|
||||||
jsr PRINT.MSG
|
|
||||||
jsr INPUT.INIT
|
|
||||||
inc STATUS
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
CS.RUN.3 cmp #3
|
|
||||||
bne CS.RUN.4
|
|
||||||
ldx INSTATUS
|
|
||||||
beq .9
|
|
||||||
ldx INBUFFER
|
|
||||||
beq .2
|
|
||||||
.1 lda INBUFFER,x
|
|
||||||
sta PASSWORD,x
|
|
||||||
dex
|
|
||||||
bpl .1
|
|
||||||
.2 inc STATUS
|
|
||||||
.9 clc
|
|
||||||
rts
|
|
||||||
CS.RUN.4 cmp #4
|
|
||||||
bne CS.RUN.5
|
|
||||||
jsr CROUT
|
|
||||||
inc STATUS TODO:CHECK USER/PASS
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
CS.RUN.5 cmp #5
|
|
||||||
bne CS.RUN.6
|
|
||||||
lda BINID
|
|
||||||
ldx pPsContext
|
|
||||||
stx pPsContext.SAVE
|
|
||||||
ldx pPsContext+1
|
|
||||||
stx pPsContext.SAVE+1
|
|
||||||
>SYSCALL SYS.CreateProcessA
|
|
||||||
ldx pPsContext.SAVE
|
|
||||||
stx pPsContext
|
|
||||||
ldx pPsContext.SAVE+1
|
|
||||||
stx pPsContext+1
|
|
||||||
bcs .9
|
bcs .9
|
||||||
sta CHILDPSID
|
|
||||||
inc STATUS
|
ldy #S.PS.hINDEV
|
||||||
clc
|
lda (pPs),y
|
||||||
rts
|
jsr PRBYTE
|
||||||
.9 jsr PRBYTE
|
bcs .9
|
||||||
stz STATUS
|
lda #','
|
||||||
clc
|
|
||||||
rts
|
jsr COUT
|
||||||
CS.RUN.6 dec CHILDPSIDPOLL
|
bcs .9
|
||||||
bne .8
|
|
||||||
lda CHILDPSID Check for CHILDTSKID
|
ldy #S.PS.hOUTDEV
|
||||||
>SYSCALL SYS.GetPSByIDA
|
lda (pPs),y
|
||||||
bcc .8 Still Alive ?
|
jsr PRBYTE
|
||||||
stz STATUS
|
bcs .9
|
||||||
stz CHILDPSID
|
|
||||||
.8 clc
|
ldy #hBinName
|
||||||
rts
|
lda (pData),y
|
||||||
|
>SYSCALL SYS.ExecProcessA
|
||||||
|
.9 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.DOEVENT >PULLW pEvent
|
CS.DOEVENT sec
|
||||||
lda CHILDPSID
|
|
||||||
bne .99
|
|
||||||
ldy #S.EVT.hDEV
|
|
||||||
lda (pEvent),y
|
|
||||||
cmp hINDEV
|
|
||||||
bne .99
|
|
||||||
lda (pEvent)
|
|
||||||
and #S.EVT.F.KEY
|
|
||||||
beq .99
|
|
||||||
ldy #S.EVT.DATAHI
|
|
||||||
lda (pEvent),y
|
|
||||||
bne .99
|
|
||||||
ldy #S.EVT.DATALO
|
|
||||||
lda (pEvent),y
|
|
||||||
jsr INPUT.CHARIN
|
|
||||||
>SYSCALL SYS.DestroyEvent
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
.99 sec
|
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.QUIT clc
|
CS.QUIT ldy #hBinName
|
||||||
|
lda (pData),y
|
||||||
|
>SYSCALL SYS.FreeMemA
|
||||||
|
|
||||||
|
ldx #DEVMGR.CLOSE
|
||||||
|
jsr pDevJmp
|
||||||
|
|
||||||
|
clc
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* PRIVATE
|
* PRIVATE
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
PRINT.MSG >STYA ZPQuickPtr1
|
PRINT.MSG >STYA ZPTmp1
|
||||||
ldy #0
|
ldy #0
|
||||||
.1 lda (ZPQuickPtr1),y
|
.1 lda (ZPTmp1),y
|
||||||
beq .2
|
beq .2
|
||||||
ora #$80
|
|
||||||
jsr COUT
|
jsr COUT
|
||||||
|
bcs .9
|
||||||
iny
|
iny
|
||||||
bne .1
|
bne .1
|
||||||
.2 rts
|
.2 clc
|
||||||
*--------------------------------------
|
.9 rts
|
||||||
INPUT.INIT stz INSTATUS
|
|
||||||
stz INBUFFER
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
INPUT.CHARIN ldx INSTATUS
|
|
||||||
bne .9
|
|
||||||
cmp #$20
|
|
||||||
bcc .1
|
|
||||||
ldx INBUFFER
|
|
||||||
inx
|
|
||||||
cpx #16
|
|
||||||
beq .9
|
|
||||||
sta INBUFFER,x
|
|
||||||
stx INBUFFER
|
|
||||||
ora #$80
|
|
||||||
jmp COUT
|
|
||||||
.1 cmp #$0D
|
|
||||||
bne .9
|
|
||||||
inc INSTATUS
|
|
||||||
.9 rts
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
PRBYTE pha
|
PRBYTE pha
|
||||||
lsr
|
lsr
|
||||||
lsr
|
lsr
|
||||||
lsr
|
lsr
|
||||||
lsr
|
lsr
|
||||||
ora #$B0
|
ora #$30
|
||||||
cmp #$BA
|
cmp #$3A
|
||||||
bcc .1
|
bcc .1
|
||||||
adc #6
|
adc #6
|
||||||
.1 jsr COUT
|
.1 jsr COUT
|
||||||
pla
|
pla
|
||||||
|
bcs .9
|
||||||
and #$0F
|
and #$0F
|
||||||
ora #$B0
|
ora #$30
|
||||||
cmp #$BA
|
cmp #$3A
|
||||||
bcc COUT
|
bcc .2
|
||||||
adc #6
|
adc #6
|
||||||
bra COUT
|
.2 jsr COUT
|
||||||
|
.9 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CROUT lda #13
|
CROUT lda #13
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
COUT >PUSHA
|
COUT phx
|
||||||
phx
|
|
||||||
phy
|
phy
|
||||||
ldy #S.PS.hOUTDEV
|
ldx #DEVMGR.COUT
|
||||||
lda (pPsContext),y
|
jsr pDevJmp
|
||||||
>SYSCALL SYS.DevOutA
|
|
||||||
ply
|
ply
|
||||||
plx
|
plx
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
pDevJmp jmp (pDev)
|
||||||
MSG.GREETINGS >CSTRING "A2osX-GeTTY on Dev="
|
|
||||||
MSG.LOGIN >CSTRING "login:"
|
|
||||||
MSG.PASSWORD >CSTRING "password:"
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.END
|
CS.END
|
||||||
DS.START
|
MSG.GREETINGS >CSTRING "A2osX-GeTTY on Dev="
|
||||||
*--------------------------------------
|
|
||||||
hDEVNAME .BS 1
|
hDEVNAME .BS 1
|
||||||
hINDEV .BS 1
|
|
||||||
hOUTDEV .BS 1
|
|
||||||
BINID .BS 1
|
|
||||||
STATUS .BS 1
|
|
||||||
CHILDPSID .BS 1
|
|
||||||
CHILDPSIDPOLL .BS 1
|
|
||||||
INSTATUS .BS 1
|
|
||||||
INBUFFER .BS 16
|
|
||||||
USERNAME .BS 16
|
|
||||||
PASSWORD .BS 16
|
|
||||||
pPsContext.SAVE .BS 2
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
DS.END
|
.DUMMY
|
||||||
|
.OR 0
|
||||||
|
DS.START
|
||||||
|
hBinName .BS 1
|
||||||
|
DS.END .ED
|
||||||
MAN
|
MAN
|
||||||
SAVE SBIN/GETTY.S
|
SAVE SBIN/GETTY.S
|
||||||
ASM
|
ASM
|
||||||
|
|
174
SBIN/GUI.S.txt
174
SBIN/GUI.S.txt
|
@ -1,74 +1,120 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /A2OSX.BUILD
|
PREFIX /A2OSX.SRC
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
.LIST OFF
|
.LIST OFF
|
||||||
.OP 65C02
|
.OP 65C02
|
||||||
.OR $2000
|
.OR $2000
|
||||||
.TF SBIN/GUI
|
.TF /A2OSX.BOOT/SBIN/GUI
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.INB INC/MACROS.I
|
.INB INC/MACROS.I
|
||||||
.INB INC/A2OSX.I
|
.INB INC/A2OSX.I
|
||||||
|
.INB INC/A2OSX.API.I
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* Main entry point
|
* File Header (16 Bytes)
|
||||||
*--------------------------------------
|
|
||||||
* Code signature and INIT table
|
|
||||||
*--------------------------------------
|
|
||||||
* CLD $D8
|
|
||||||
* JMP (*,x) $7C
|
|
||||||
* #JMPTABLE
|
|
||||||
* /JMPTABLE
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.START cld
|
CS.START cld
|
||||||
jmp (.1,x)
|
jmp (.1,x)
|
||||||
|
.DA #$61 6502,Level 1 (65c02)
|
||||||
|
.DA #1 BIN Layout Version 1
|
||||||
|
.DA 0
|
||||||
|
.DA CS.END-CS.START
|
||||||
|
.DA 0
|
||||||
|
.DA 0
|
||||||
|
.DA 0
|
||||||
|
*--------------------------------------
|
||||||
|
* Relocation Table
|
||||||
|
*--------------------------------------
|
||||||
.1 .DA CS.INIT
|
.1 .DA CS.INIT
|
||||||
.DA CS.RUN
|
.DA CS.RUN
|
||||||
.DA CS.DOEVENT
|
.DA CS.DOEVENT
|
||||||
.DA CS.QUIT
|
.DA CS.QUIT
|
||||||
L.DEVNAME.GFX .DA DEVNAME.GFX
|
L.DEVNAME.GFX .DA DEVNAME.GFX
|
||||||
|
L.DEVNAME.MOUSE .DA DEVNAME.MOUSE
|
||||||
.DA 0
|
.DA 0
|
||||||
.DA CS.END-CS.START Code Length To Relocate
|
|
||||||
.DA DS.END-DS.START Data Segment to Allocate
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.INIT >LDYA L.DEVNAME.GFX
|
CS.INIT >LDYA L.DEVNAME.GFX
|
||||||
>SYSCALL SYS.GetDevByNameYA
|
>SYSCALL SYS.GetDevByNameYA
|
||||||
bcc .10
|
bcc .10
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.10 sta hDevGFX
|
.10 stx hDevGFX
|
||||||
>SYSCALL SYS.GetDevByIDA
|
>STYA pDevGFX
|
||||||
>STYA ZPQuickPtr1
|
|
||||||
|
|
||||||
ldy #S.DEV.hCS
|
|
||||||
lda (ZPQuickPtr1),y
|
|
||||||
>SYSCALL SYS.GetMemPtrA
|
|
||||||
|
|
||||||
>STYA DevJMP
|
|
||||||
|
|
||||||
stz C
|
.11 >LDYA L.DEVNAME.MOUSE
|
||||||
stz X
|
>SYSCALL SYS.GetDevByNameYA
|
||||||
stz X+1
|
bcc .20
|
||||||
|
|
||||||
.1 stz Y
|
inc DEVNAME.MOUSE+4
|
||||||
>DEBUG
|
lda DEVNAME.MOUSE+4
|
||||||
.2
|
cmp #'8'
|
||||||
>PUSHBI C Color
|
bne .11
|
||||||
>PUSHBI 2 Mode:1=B/W,2=16 colors,...,128=XOR
|
sec
|
||||||
|
rts
|
||||||
|
|
||||||
|
.20 stx hDevMouse
|
||||||
|
>STYA pDevMouse
|
||||||
|
|
||||||
|
lda #A2osX.SCREENS.G
|
||||||
|
>SYSCALL SYS.ScreenSelectA
|
||||||
|
|
||||||
|
ldx #DEVMGR.OPEN
|
||||||
|
jsr GoDevGFX
|
||||||
|
bcs *
|
||||||
|
|
||||||
|
ldx #DEVMGR.OPEN
|
||||||
|
jsr GoDevMouse
|
||||||
|
bcs *
|
||||||
|
|
||||||
|
jmp .8
|
||||||
|
|
||||||
|
lda #2
|
||||||
|
sta BW
|
||||||
|
|
||||||
|
stz C
|
||||||
|
|
||||||
|
lda #4
|
||||||
|
sta X
|
||||||
|
lda /4
|
||||||
|
sta X+1
|
||||||
|
|
||||||
|
.1 lda #2
|
||||||
|
sta Y
|
||||||
|
|
||||||
|
.2 lda Y
|
||||||
|
lsr
|
||||||
|
lsr
|
||||||
|
lsr
|
||||||
|
clc
|
||||||
|
adc C
|
||||||
|
and #$0F
|
||||||
|
|
||||||
|
>PUSHA
|
||||||
|
|
||||||
>PUSHB Y
|
>PUSHB Y
|
||||||
>PUSHW X
|
>PUSHW X
|
||||||
jsr SetPixel
|
>PUSHBI 2 Mode:1=B/W,2=16 colors,...,128=XOR
|
||||||
|
|
||||||
|
ldx #DEVMGR.GFX.SETPIXEL
|
||||||
|
jsr GoDevGFX
|
||||||
|
|
||||||
inc Y
|
inc Y
|
||||||
lda Y
|
lda Y
|
||||||
cmp #192
|
cmp #190
|
||||||
bne .2
|
bne .2
|
||||||
|
|
||||||
|
dec BW
|
||||||
|
bne .3
|
||||||
|
|
||||||
|
lda #2
|
||||||
|
sta BW
|
||||||
|
|
||||||
inc C
|
inc C
|
||||||
lda C
|
lda C
|
||||||
cmp #16
|
cmp #16
|
||||||
bne .3
|
bne .3
|
||||||
stz C
|
stz C
|
||||||
|
|
||||||
.3 lda X
|
.3 lda X
|
||||||
clc
|
clc
|
||||||
|
@ -77,38 +123,78 @@ CS.INIT >LDYA L.DEVNAME.GFX
|
||||||
bcc .4
|
bcc .4
|
||||||
inc X+1
|
inc X+1
|
||||||
|
|
||||||
.4 lda X
|
.4 sec
|
||||||
sec
|
sbc #556
|
||||||
sbc #560
|
|
||||||
lda X+1
|
lda X+1
|
||||||
sbc /560
|
sbc /556
|
||||||
bcc .1
|
bcc .1
|
||||||
|
|
||||||
|
.8 lda (pPs)
|
||||||
|
ora #S.PS.F.EVENT Now accept events
|
||||||
|
sta (pPs)
|
||||||
|
|
||||||
clc
|
clc
|
||||||
.9 rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.RUN clc
|
CS.RUN clc
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.DOEVENT clc
|
CS.DOEVENT ldy #S.EVT.hDEV
|
||||||
|
lda (pEvent),y
|
||||||
|
|
||||||
|
cmp hDevMouse
|
||||||
|
bne .99
|
||||||
|
|
||||||
|
lda (pEvent)
|
||||||
|
and #S.EVT.F.MOUSE
|
||||||
|
beq .99
|
||||||
|
|
||||||
|
ldy #S.EVT.DATALO
|
||||||
|
lda (pEvent),y
|
||||||
|
and #4 mouse move
|
||||||
|
beq .99
|
||||||
|
|
||||||
|
>PUSHBI 15 COLOR
|
||||||
|
|
||||||
|
ldy #S.EVT.DATAW2
|
||||||
|
lda (pEvent),y
|
||||||
|
>PUSHA Y
|
||||||
|
|
||||||
|
dey
|
||||||
|
lda (pEvent),y X.HI
|
||||||
|
>PUSHA
|
||||||
|
|
||||||
|
dey
|
||||||
|
lda (pEvent),y
|
||||||
|
>PUSHA X.LO
|
||||||
|
|
||||||
|
>PUSHBI 2 Mode:1=B/W,2=16 colors,...,128=XOR
|
||||||
|
ldx #DEVMGR.GFX.SETPIXEL
|
||||||
|
jsr GoDevGFX
|
||||||
|
|
||||||
|
clc
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
.99 sec
|
||||||
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.QUIT clc
|
CS.QUIT clc
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
SetPixel ldx #DEVMGR.GFX.SETPIXEL
|
GoDevGFX jmp (pDevGFX)
|
||||||
jmp (DevJMP)
|
GoDevMouse jmp (pDevMouse)
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.END
|
CS.END
|
||||||
DEVNAME.GFX >PSTRING "GFX"
|
DEVNAME.GFX >PSTRING "GFX"
|
||||||
DEVNAME.MOU0 >PSTRING "MOU0"
|
DEVNAME.MOUSE >PSTRING "MOU1"
|
||||||
DS.START
|
|
||||||
hDevGFX .BS 1
|
hDevGFX .BS 1
|
||||||
DevJMP .BS 2
|
pDevGFX .BS 2
|
||||||
|
hDevMouse .BS 1
|
||||||
|
pDevMouse .BS 2
|
||||||
X .BS 2
|
X .BS 2
|
||||||
Y .BS 1
|
Y .BS 1
|
||||||
C .BS 1
|
C .BS 1
|
||||||
DS.END
|
BW .BS 1
|
||||||
MAN
|
MAN
|
||||||
SAVE SBIN/GUI.S
|
SAVE SBIN/GUI.S
|
||||||
ASM
|
ASM
|
||||||
|
|
236
SBIN/LOGIN.S.txt
Normal file
236
SBIN/LOGIN.S.txt
Normal file
|
@ -0,0 +1,236 @@
|
||||||
|
PR#3
|
||||||
|
PREFIX /A2OSX.SRC
|
||||||
|
NEW
|
||||||
|
INC 1
|
||||||
|
AUTO 6
|
||||||
|
.LIST OFF
|
||||||
|
.OP 65C02
|
||||||
|
.OR $2000
|
||||||
|
.TF /A2OSX.BOOT/SBIN/LOGIN
|
||||||
|
*--------------------------------------
|
||||||
|
.INB INC/MACROS.I
|
||||||
|
.INB INC/A2OSX.I
|
||||||
|
.INB INC/A2OSX.API.I
|
||||||
|
*--------------------------------------
|
||||||
|
INPUT.BUFFER.SIZE .EQ 16
|
||||||
|
*--------------------------------------
|
||||||
|
* File Header (16 Bytes)
|
||||||
|
*--------------------------------------
|
||||||
|
CS.START cld
|
||||||
|
jmp (.1,x)
|
||||||
|
.DA #$61 6502,Level 1 (65c02)
|
||||||
|
.DA #1 BIN Layout Version 1
|
||||||
|
.DA 0
|
||||||
|
.DA CS.END-CS.START Code Length To Relocate
|
||||||
|
.DA DS.END-DS.START Data Segment to Allocate
|
||||||
|
.DA 0
|
||||||
|
.DA 0
|
||||||
|
*--------------------------------------
|
||||||
|
* Relocation Table
|
||||||
|
*--------------------------------------
|
||||||
|
.1 .DA CS.INIT
|
||||||
|
.DA CS.RUN
|
||||||
|
.DA CS.DOEVENT
|
||||||
|
.DA CS.QUIT
|
||||||
|
L.MSG.LOGIN .DA MSG.LOGIN
|
||||||
|
L.MSG.PASSWORD .DA MSG.PASSWORD
|
||||||
|
L.SHELL .DA SHELL
|
||||||
|
.DA 0
|
||||||
|
*--------------------------------------
|
||||||
|
CS.INIT >LDYA L.SHELL
|
||||||
|
>SYSCALL SYS.NewPStrYA
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
ldy #hSHELL
|
||||||
|
sta (pData),y
|
||||||
|
|
||||||
|
lda (pPs)
|
||||||
|
ora #S.PS.F.EVENT Now accept events
|
||||||
|
sta (pPs)
|
||||||
|
clc Tell TskMgr To stay in memory
|
||||||
|
.9 rts
|
||||||
|
*--------------------------------------
|
||||||
|
CS.RUN lda #0
|
||||||
|
ldy #hUSERNAME
|
||||||
|
sta (pData),y
|
||||||
|
ldy #hPASSWORD
|
||||||
|
sta (pData),y
|
||||||
|
|
||||||
|
jsr CROUT
|
||||||
|
jsr CROUT
|
||||||
|
>LDYA L.MSG.LOGIN
|
||||||
|
jsr PRINT.MSG
|
||||||
|
lda #0 Echo all caracters
|
||||||
|
jsr INPUT.RESET
|
||||||
|
|
||||||
|
.1 jsr A2osX.Sleep
|
||||||
|
jsr INPUT.LINEIN
|
||||||
|
bcc .1
|
||||||
|
|
||||||
|
jsr CROUT
|
||||||
|
|
||||||
|
>LDYA L.MSG.PASSWORD
|
||||||
|
jsr PRINT.MSG
|
||||||
|
lda #'*'
|
||||||
|
jsr INPUT.RESET
|
||||||
|
|
||||||
|
.2 jsr A2osX.Sleep
|
||||||
|
jsr INPUT.LINEIN
|
||||||
|
bcc .2
|
||||||
|
|
||||||
|
jsr CROUT
|
||||||
|
|
||||||
|
ldy #hSHELL
|
||||||
|
lda (pData),y
|
||||||
|
>SYSCALL SYS.ExecProcessA
|
||||||
|
|
||||||
|
bcc .8
|
||||||
|
|
||||||
|
jsr PRBYTE
|
||||||
|
.8 clc
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
CS.DOEVENT ldy #S.EVT.hDEV
|
||||||
|
lda (pEvent),y
|
||||||
|
ldy #S.PS.hINDEV
|
||||||
|
cmp (pPs),y
|
||||||
|
bne .99
|
||||||
|
|
||||||
|
lda (pEvent)
|
||||||
|
and #S.EVT.F.KEY
|
||||||
|
beq .99
|
||||||
|
|
||||||
|
ldy #S.EVT.DATAHI
|
||||||
|
lda (pEvent),y
|
||||||
|
bne .99
|
||||||
|
|
||||||
|
ldy #S.EVT.DATALO
|
||||||
|
lda (pEvent),y
|
||||||
|
jsr INPUT.CHARIN
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
|
||||||
|
.99 sec
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
CS.QUIT clc
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
* PRIVATE
|
||||||
|
*--------------------------------------
|
||||||
|
INPUT.RESET ldy #INPUT.STATUS
|
||||||
|
sta (pData),y
|
||||||
|
lda #0
|
||||||
|
ldy #INPUT.BUFFER
|
||||||
|
sta (pData),y
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
INPUT.CHARIN tax saver char...
|
||||||
|
ldy #INPUT.STATUS
|
||||||
|
lda (pData),y
|
||||||
|
bmi .9
|
||||||
|
|
||||||
|
lda #INPUT.BUFFER
|
||||||
|
clc
|
||||||
|
adc pData
|
||||||
|
sta ZPQuickPtr1
|
||||||
|
lda pData+1
|
||||||
|
adc /INPUT.BUFFER
|
||||||
|
sta ZPQuickPtr1+1
|
||||||
|
|
||||||
|
cpx #$20 Control Char?
|
||||||
|
bcc .2
|
||||||
|
|
||||||
|
lda (ZPQuickPtr1)
|
||||||
|
|
||||||
|
cmp #INPUT.BUFFER.SIZE Buffer full?
|
||||||
|
beq .9
|
||||||
|
|
||||||
|
inc
|
||||||
|
sta (ZPQuickPtr1)
|
||||||
|
tay
|
||||||
|
|
||||||
|
txa
|
||||||
|
sta (ZPQuickPtr1),y
|
||||||
|
|
||||||
|
ldy #INPUT.STATUS
|
||||||
|
lda (pData),y
|
||||||
|
bne .1
|
||||||
|
txa
|
||||||
|
.1 jmp COUT
|
||||||
|
|
||||||
|
.2 cpx #$0D
|
||||||
|
bne .9
|
||||||
|
ldy #INPUT.STATUS
|
||||||
|
lda #$80
|
||||||
|
sta (pData),y
|
||||||
|
|
||||||
|
.9 rts
|
||||||
|
*--------------------------------------
|
||||||
|
INPUT.LINEIN ldy #INPUT.STATUS
|
||||||
|
lda (pData),y
|
||||||
|
asl CS is a line is in the buffer
|
||||||
|
rts
|
||||||
|
ldy #INPUT.BUFFER
|
||||||
|
lda (pData),y get Line Length
|
||||||
|
bne .9 if 0, empty line
|
||||||
|
clc
|
||||||
|
.9 rts
|
||||||
|
*--------------------------------------
|
||||||
|
PRINT.MSG >STYA ZPQuickPtr1
|
||||||
|
ldy #0
|
||||||
|
.1 lda (ZPQuickPtr1),y
|
||||||
|
beq .2
|
||||||
|
jsr COUT
|
||||||
|
iny
|
||||||
|
bne .1
|
||||||
|
.2 rts
|
||||||
|
*--------------------------------------
|
||||||
|
PRBYTE pha
|
||||||
|
lsr
|
||||||
|
lsr
|
||||||
|
lsr
|
||||||
|
lsr
|
||||||
|
ora #$30
|
||||||
|
cmp #$3A
|
||||||
|
bcc .1
|
||||||
|
adc #6
|
||||||
|
.1 jsr COUT
|
||||||
|
pla
|
||||||
|
and #$0F
|
||||||
|
ora #$30
|
||||||
|
cmp #$3A
|
||||||
|
bcc COUT
|
||||||
|
adc #6
|
||||||
|
bra COUT
|
||||||
|
*--------------------------------------
|
||||||
|
CROUT lda #13
|
||||||
|
*--------------------------------------
|
||||||
|
COUT phx
|
||||||
|
phy
|
||||||
|
ldx #DEVMGR.COUT
|
||||||
|
jsr pDevJmp
|
||||||
|
ply
|
||||||
|
plx
|
||||||
|
rts
|
||||||
|
pDevJmp jmp (pDev)
|
||||||
|
CS.END
|
||||||
|
*--------------------------------------
|
||||||
|
MSG.LOGIN >CSTRING "login:"
|
||||||
|
MSG.PASSWORD >CSTRING "password:"
|
||||||
|
SHELL >PSTRING "SHELL"
|
||||||
|
*--------------------------------------
|
||||||
|
.DUMMY
|
||||||
|
.OR 0
|
||||||
|
DS.START
|
||||||
|
INPUT.BUFFER .BS INPUT.BUFFER.SIZE+1
|
||||||
|
INPUT.STATUS .BS 1
|
||||||
|
hUSERNAME .BS 1
|
||||||
|
hPASSWORD .BS 1
|
||||||
|
hSHELL .BS 1
|
||||||
|
DS.END
|
||||||
|
.ED
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE SBIN/LOGIN.S
|
||||||
|
ASM
|
270
SBIN/SHELL.S.txt
270
SBIN/SHELL.S.txt
|
@ -1,16 +1,17 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /A2OSX.BUILD
|
PREFIX /A2OSX.SRC
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
.LIST OFF
|
.LIST OFF
|
||||||
.OP 65C02
|
.OP 65C02
|
||||||
.OR $2000
|
.OR $2000
|
||||||
.TF SBIN/SHELL
|
.TF /A2OSX.BOOT/SBIN/SHELL
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.INB INC/MACROS.I
|
.INB INC/MACROS.I
|
||||||
.INB INC/A2OSX.I
|
|
||||||
.INB INC/PRODOS.I
|
.INB INC/PRODOS.I
|
||||||
|
.INB INC/A2OSX.I
|
||||||
|
.INB INC/A2OSX.API.I
|
||||||
.INB INC/LIBSTR.I
|
.INB INC/LIBSTR.I
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
ZPPTR1 .EQ ZPBIN
|
ZPPTR1 .EQ ZPBIN
|
||||||
|
@ -19,24 +20,26 @@ ZPPTR3 .EQ ZPBIN+4
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CmdBuffer.MAX .EQ 127
|
CmdBuffer.MAX .EQ 127
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* Main entry point
|
* File Header (16 Bytes)
|
||||||
*--------------------------------------
|
|
||||||
* Code signature and INIT table
|
|
||||||
*--------------------------------------
|
|
||||||
* CLD $D8
|
|
||||||
* JMP (*,x) $7C
|
|
||||||
* #JMPTABLE
|
|
||||||
* /JMPTABLE
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.START cld
|
CS.START cld
|
||||||
jmp (.1,x)
|
jmp (.1,x)
|
||||||
|
.DA #$61 6502,Level 1 (65c02)
|
||||||
|
.DA #1 BIN Layout Version 1
|
||||||
|
.DA 0
|
||||||
|
.DA CS.END-CS.START Code Length To Relocate
|
||||||
|
.DA DS.END-DS.START Data Segment to Allocate
|
||||||
|
.DA 0
|
||||||
|
.DA 0
|
||||||
|
*--------------------------------------
|
||||||
|
* Relocation Table
|
||||||
|
*--------------------------------------
|
||||||
.1 .DA CS.INIT
|
.1 .DA CS.INIT
|
||||||
.DA CS.RUN
|
.DA CS.RUN
|
||||||
.DA CS.DOEVENT
|
.DA CS.DOEVENT
|
||||||
.DA CS.QUIT
|
.DA CS.QUIT
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
L.LIBSTR .DA LIBSTR
|
L.LIBSTR .DA LIBSTR
|
||||||
L.CmdBuffer .DA CmdBuffer
|
|
||||||
L.MSG.GREETINGS .DA MSG.GREETINGS
|
L.MSG.GREETINGS .DA MSG.GREETINGS
|
||||||
L.MSG.UNKNOWN .DA MSG.UNKNOWN
|
L.MSG.UNKNOWN .DA MSG.UNKNOWN
|
||||||
L.MSG.SYNERR .DA MSG.SYNERR
|
L.MSG.SYNERR .DA MSG.SYNERR
|
||||||
|
@ -49,60 +52,66 @@ T.INTCMDS .DA EXEC.CMD.CD
|
||||||
.DA EXEC.CMD.TYPE
|
.DA EXEC.CMD.TYPE
|
||||||
.DA EXEC.CMD.EXIT
|
.DA EXEC.CMD.EXIT
|
||||||
.DA 0
|
.DA 0
|
||||||
.DA CS.END-CS.START Code Length To Relocate
|
|
||||||
.DA DS.END-DS.START Data Segment to Allocate
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.INIT stz bEXIT
|
CS.INIT lda #0
|
||||||
|
ldy #bEXIT
|
||||||
stz CmdHistory
|
sta (pData),y
|
||||||
stz CmdHistory.IDX
|
ldy #CmdHistory
|
||||||
stz CmdHistory.END
|
sta (pData),y
|
||||||
|
ldy #CmdHistory.IDX
|
||||||
>LIBLOADP L.LIBSTR
|
sta (pData),y
|
||||||
|
ldy #CmdHistory.END
|
||||||
|
sta (pData),y
|
||||||
|
|
||||||
|
>LDYA L.LIBSTR
|
||||||
|
>LOADLIBYA
|
||||||
bcs .99
|
bcs .99
|
||||||
sta hLIBSTR
|
sta hLIBSTR
|
||||||
|
|
||||||
ldy #S.PS.ID
|
ldy #S.PS.ID
|
||||||
lda (pPsContext),y
|
lda (pPs),y
|
||||||
>PUSHA
|
>PUSHA
|
||||||
ldy #S.PS.hOUTDEV
|
ldy #S.PS.hOUTDEV
|
||||||
lda (pPsContext),y
|
lda (pPs),y
|
||||||
>PUSHA
|
>PUSHA
|
||||||
ldy #S.PS.hINDEV
|
ldy #S.PS.hINDEV
|
||||||
lda (pPsContext),y
|
lda (pPs),y
|
||||||
>PUSHA
|
>PUSHA
|
||||||
>PUSHW L.MSG.GREETINGS
|
>PUSHW L.MSG.GREETINGS
|
||||||
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
||||||
|
|
||||||
lda (pPsContext)
|
lda (pPs)
|
||||||
ora #S.PS.F.EVENT Now accept events
|
ora #S.PS.F.EVENT Now accept events
|
||||||
sta (pPsContext)
|
sta (pPs)
|
||||||
|
|
||||||
clc
|
clc
|
||||||
.99 rts
|
.99 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.RUN stz CmdBuffer
|
CS.RUN lda #0
|
||||||
|
sta (pData)
|
||||||
|
|
||||||
lda #"$"
|
lda #"$"
|
||||||
jsr COUT
|
jsr COUT
|
||||||
lda #" "
|
lda #" "
|
||||||
jsr COUT
|
jsr COUT
|
||||||
|
|
||||||
.1 lda CmdBuffer
|
.1 lda (pData)
|
||||||
bmi .2
|
bmi .2
|
||||||
jsr A2osX.SLEEP
|
jsr A2osX.SLEEP
|
||||||
|
|
||||||
bra .1
|
bra .1
|
||||||
|
|
||||||
.2 and #$7F
|
.2 and #$7F
|
||||||
sta CmdBuffer
|
sta (pData)
|
||||||
beq CS.RUN Empty line
|
beq CS.RUN Empty line
|
||||||
|
|
||||||
>PUSHW L.CmdBuffer
|
>LDYA pData
|
||||||
>SYSCALL SYS.NewPStr
|
>SYSCALL SYS.NewPStrYA
|
||||||
bcs .99
|
bcs .99
|
||||||
sta hCMDLINE
|
|
||||||
jsr HISTORY.ADD
|
ldy #hCMDLINE
|
||||||
|
sta (pData),y
|
||||||
|
* jsr HISTORY.ADD
|
||||||
jsr EXEC.CMD
|
jsr EXEC.CMD
|
||||||
bcc .3
|
bcc .3
|
||||||
|
|
||||||
|
@ -115,23 +124,27 @@ CS.RUN stz CmdBuffer
|
||||||
jsr COUT
|
jsr COUT
|
||||||
jsr CROUT
|
jsr CROUT
|
||||||
|
|
||||||
.3 lda hCMDLINE
|
.3 ldy #hCMDLINE
|
||||||
|
lda (pData),y
|
||||||
>SYSCALL SYS.FreeMemA
|
>SYSCALL SYS.FreeMemA
|
||||||
stz hCMDLINE
|
ldy #hCMDLINE
|
||||||
|
lda #0
|
||||||
|
sta (pData),y
|
||||||
|
|
||||||
lda bEXIT
|
ldy #bEXIT
|
||||||
|
lda (pData),y
|
||||||
bne .99
|
bne .99
|
||||||
|
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.99 sec
|
.99 sec
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.DOEVENT >PULLW pEvent
|
CS.DOEVENT ldy #S.EVT.hDEV is Event from active IN device?
|
||||||
|
|
||||||
ldy #S.EVT.hDEV is Event from active IN device?
|
|
||||||
lda (pEvent),y
|
lda (pEvent),y
|
||||||
ldy #S.PS.hINDEV
|
ldy #S.PS.hINDEV
|
||||||
cmp (pPsContext),y
|
cmp (pPs),y
|
||||||
|
|
||||||
bne .9
|
bne .9
|
||||||
lda (pEvent)
|
lda (pEvent)
|
||||||
|
@ -144,27 +157,33 @@ CS.DOEVENT >PULLW pEvent
|
||||||
|
|
||||||
ldy #S.EVT.DATALO
|
ldy #S.EVT.DATALO
|
||||||
lda (pEvent),y
|
lda (pEvent),y
|
||||||
cmp #$1F
|
tax
|
||||||
bpl .1
|
|
||||||
|
cpx #$20
|
||||||
|
bcs .1
|
||||||
jsr CS.EVENT.CTRL.CHAR
|
jsr CS.EVENT.CTRL.CHAR
|
||||||
bra .8
|
bra .8
|
||||||
|
|
||||||
.1 cmp #$7f
|
.1 cpx #$7f
|
||||||
bne .2
|
bne .2
|
||||||
jsr CmdBuffer.DEL
|
jsr CmdBuffer.DEL
|
||||||
bra .8
|
bra .8
|
||||||
|
|
||||||
.2 ldx CmdBuffer
|
.2 lda (pData) CmdBuffer
|
||||||
cpx #CmdBuffer.MAX
|
|
||||||
|
cmp #CmdBuffer.MAX
|
||||||
beq .8
|
beq .8
|
||||||
inx
|
|
||||||
sta CmdBuffer,x
|
inc
|
||||||
inc CmdBuffer
|
sta (pData)
|
||||||
|
tay
|
||||||
|
txa
|
||||||
|
sta (pData),y
|
||||||
|
|
||||||
ora #$80
|
ora #$80
|
||||||
jsr COUT
|
jsr COUT
|
||||||
|
|
||||||
.8 >SYSCALL SYS.DestroyEvent
|
.8 clc
|
||||||
clc
|
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.9 sec
|
.9 sec
|
||||||
|
@ -174,9 +193,9 @@ CS.EVENT.CTRL.CHAR
|
||||||
cmp #13 CR
|
cmp #13 CR
|
||||||
bne .10
|
bne .10
|
||||||
jsr CROUT
|
jsr CROUT
|
||||||
lda CmdBuffer
|
lda (pData) CmdBuffer
|
||||||
ora #$80
|
ora #$80
|
||||||
sta CmdBuffer
|
sta (pData)
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
@ -195,14 +214,14 @@ CS.EVENT.CTRL.CHAR
|
||||||
.2 cmp #10 LF (down arrow)
|
.2 cmp #10 LF (down arrow)
|
||||||
bne .3
|
bne .3
|
||||||
|
|
||||||
jsr HISTORY.GETNEXT
|
* jsr HISTORY.GETNEXT
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.3 cmp #11 VT (up arrow)
|
.3 cmp #11 VT (up arrow)
|
||||||
bne .4
|
bne .4
|
||||||
|
|
||||||
jsr HISTORY.GETPREV
|
* jsr HISTORY.GETPREV
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
@ -223,17 +242,25 @@ CS.QUIT lda hLIBSTR
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* PRIVATE
|
* PRIVATE
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
EXEC.CMD >PUSHB hCMDLINE
|
EXEC.CMD ldy #hCMDLINE
|
||||||
|
>PUSHB (pData),y
|
||||||
>PUSHBI $20 Push SEP=' '
|
>PUSHBI $20 Push SEP=' '
|
||||||
>PUSHBI 0 Push 0 for getting CMD & ARGS
|
>PUSHBI 0 Push 0 for getting CMD & ARGS
|
||||||
>SYSCALL SYS.PStrGetTkn
|
>SYSCALL SYS.PStrGetTkn
|
||||||
bcs .99
|
bcs .99
|
||||||
|
|
||||||
sta hCMD
|
ldy #hCMD
|
||||||
stx hARGS
|
sta (pData),y
|
||||||
|
pha
|
||||||
|
txa
|
||||||
|
ldy #hARGS
|
||||||
|
sta (pData),y
|
||||||
|
pla
|
||||||
|
|
||||||
>SYSCALL SYS.GetMemPtrA
|
>SYSCALL SYS.GetMemPtrA
|
||||||
>PUSHYA
|
>PUSHYA
|
||||||
>PUSHYA
|
>PUSHYA
|
||||||
|
|
||||||
>LIBCALL hLIBSTR,LIBSTR.UCASEP
|
>LIBCALL hLIBSTR,LIBSTR.UCASEP
|
||||||
>PUSHW L.CMDS
|
>PUSHW L.CMDS
|
||||||
>SYSCALL SYS.GetPStrIndex
|
>SYSCALL SYS.GetPStrIndex
|
||||||
|
@ -245,14 +272,17 @@ EXEC.CMD >PUSHB hCMDLINE
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.1 jsr .98 Discard CMD & ARGS
|
.1 jsr .98 Discard CMD & ARGS
|
||||||
lda hCMDLINE
|
ldy #hCMDLINE
|
||||||
|
lda (pData),y
|
||||||
>SYSCALL SYS.ExecProcessA
|
>SYSCALL SYS.ExecProcessA
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.98 pha
|
.98 pha
|
||||||
lda hCMD
|
ldy #hCMD
|
||||||
|
lda (pData),y
|
||||||
>SYSCALL SYS.FreeMemA
|
>SYSCALL SYS.FreeMemA
|
||||||
lda hARGS
|
ldy #hARGS
|
||||||
|
lda (pData),y
|
||||||
>SYSCALL SYS.FreeMemA
|
>SYSCALL SYS.FreeMemA
|
||||||
pla
|
pla
|
||||||
sec
|
sec
|
||||||
|
@ -262,10 +292,11 @@ EXEC.CMD.INT asl
|
||||||
tax
|
tax
|
||||||
jmp (T.INTCMDS,x)
|
jmp (T.INTCMDS,x)
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
EXEC.CMD.CD lda hARGS
|
EXEC.CMD.CD ldy #hARGS
|
||||||
|
lda (pData),y
|
||||||
bne EXEC.CMD.CD.C
|
bne EXEC.CMD.CD.C
|
||||||
ldy #S.PS.hPREFIX
|
ldy #S.PS.hPREFIX
|
||||||
lda (pPsContext),y
|
lda (pPs),y
|
||||||
>SYSCALL SYS.GetMemPtrA
|
>SYSCALL SYS.GetMemPtrA
|
||||||
>PUSHYA
|
>PUSHYA
|
||||||
>LIBCALL hLIBSTR,LIBSTR.PRINTP
|
>LIBCALL hLIBSTR,LIBSTR.PRINTP
|
||||||
|
@ -276,15 +307,16 @@ EXEC.CMD.CD lda hARGS
|
||||||
EXEC.CMD.CD.C >SYSCALL SYS.GetMemPtrA
|
EXEC.CMD.CD.C >SYSCALL SYS.GetMemPtrA
|
||||||
>STYA ZPPTR2
|
>STYA ZPPTR2
|
||||||
ldy #S.PS.hPREFIX
|
ldy #S.PS.hPREFIX
|
||||||
lda (pPsContext),y
|
lda (pPs),y
|
||||||
>SYSCALL SYS.GetMemPtrA
|
>SYSCALL SYS.GetMemPtrA
|
||||||
>STYA ZPPTR1
|
>STYA ZPPTR1
|
||||||
>PUSHWI MLI.MAXPATH+1 Get a buffer for new PATH
|
>PUSHWI MLI.MAXPATH+1 Get a buffer for new PATH
|
||||||
>PUSHBI 0 no particular Option
|
>PUSHBI 0 no particular Option
|
||||||
>SYSCALL SYS.GetMem
|
>SYSCALL SYS.GetMem
|
||||||
bcs .99
|
bcs .99
|
||||||
stx hNEWPATH
|
|
||||||
>STYA ZPPTR3
|
>STYA ZPPTR3
|
||||||
|
stx hNEWPATH
|
||||||
|
|
||||||
lda #0
|
lda #0
|
||||||
sta (ZPPTR3)
|
sta (ZPPTR3)
|
||||||
ldy #1
|
ldy #1
|
||||||
|
@ -321,6 +353,7 @@ EXEC.CMD.CD.C >SYSCALL SYS.GetMemPtrA
|
||||||
pla
|
pla
|
||||||
sec
|
sec
|
||||||
.99 rts
|
.99 rts
|
||||||
|
|
||||||
.2 >PUSHW ZPPTR1
|
.2 >PUSHW ZPPTR1
|
||||||
>PUSHW ZPPTR3
|
>PUSHW ZPPTR3
|
||||||
>LIBCALL hLIBSTR,LIBSTR.STRCPYP
|
>LIBCALL hLIBSTR,LIBSTR.STRCPYP
|
||||||
|
@ -340,21 +373,45 @@ EXEC.CMD.CD.C >SYSCALL SYS.GetMemPtrA
|
||||||
>SYSCALL SYS.CheckPrefixA
|
>SYSCALL SYS.CheckPrefixA
|
||||||
bcs .98
|
bcs .98
|
||||||
ldy #S.PS.hPREFIX
|
ldy #S.PS.hPREFIX
|
||||||
lda (pPsContext),y
|
lda (pPs),y
|
||||||
pha
|
pha
|
||||||
lda hNEWPATH
|
lda hNEWPATH
|
||||||
sta (pPsContext),y
|
sta (pPs),y
|
||||||
pla
|
pla
|
||||||
>SYSCALL SYS.FreeMemA
|
>SYSCALL SYS.FreeMemA
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
EXEC.CMD.SET clc
|
EXEC.CMD.SET ldy #hARGS
|
||||||
|
lda (pData),y
|
||||||
|
bne .2
|
||||||
|
|
||||||
|
ldy #S.PS.hENV
|
||||||
|
lda (pPs),y
|
||||||
|
>SYSCALL SYS.GetMemPtrA
|
||||||
|
>STYA ZPPTR1
|
||||||
|
|
||||||
|
.1 lda (ZPPTR1)
|
||||||
|
beq .8 Ending 0 ?
|
||||||
|
>PUSHW ZPPTR1
|
||||||
|
>LIBCALL hLIBSTR,LIBSTR.PRINTP
|
||||||
|
jsr CROUT
|
||||||
|
|
||||||
|
lda ZPPTR1
|
||||||
|
sec
|
||||||
|
adc (ZPPTR1) Add len+1 to PTR
|
||||||
|
sta ZPPTR1
|
||||||
|
bcc .1
|
||||||
|
inc ZPPTR1
|
||||||
|
bra .1
|
||||||
|
|
||||||
|
.2 sec
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
.8 clc
|
||||||
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
EXEC.CMD.DATE jsr MLI
|
EXEC.CMD.DATE >SYSCALL SYS.MLIGetTime
|
||||||
.DA #MLIGETTIME
|
|
||||||
.DA 0
|
|
||||||
bcs .9
|
bcs .9
|
||||||
>PUSHW DATELO
|
>PUSHW DATELO
|
||||||
>LIBCALL hLIBSTR,LIBSTR.PRINTDATE
|
>LIBCALL hLIBSTR,LIBSTR.PRINTDATE
|
||||||
|
@ -362,9 +419,7 @@ EXEC.CMD.DATE jsr MLI
|
||||||
clc
|
clc
|
||||||
.9 rts
|
.9 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
EXEC.CMD.TIME jsr MLI
|
EXEC.CMD.TIME >SYSCALL SYS.MLIGetTime
|
||||||
.DA #MLIGETTIME
|
|
||||||
.DA 0
|
|
||||||
bcs .9
|
bcs .9
|
||||||
>PUSHW TIMELO
|
>PUSHW TIMELO
|
||||||
>LIBCALL hLIBSTR,LIBSTR.PRINTTIME
|
>LIBCALL hLIBSTR,LIBSTR.PRINTTIME
|
||||||
|
@ -372,14 +427,32 @@ EXEC.CMD.TIME jsr MLI
|
||||||
clc
|
clc
|
||||||
.9 rts
|
.9 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
EXEC.CMD.ECHO lda #$DD
|
EXEC.CMD.ECHO ldy #hARGS
|
||||||
sec
|
lda (pData),y
|
||||||
|
beq .98
|
||||||
|
>SYSCALL SYS.ExpandPStrA
|
||||||
|
bcs .99
|
||||||
|
|
||||||
|
pha
|
||||||
|
>SYSCALL SYS.GetMemPtrA
|
||||||
|
>PUSHYA
|
||||||
|
>LIBCALL hLIBSTR,LIBSTR.PRINTP
|
||||||
|
jsr CROUT
|
||||||
|
pla
|
||||||
|
>SYSCALL SYS.FreeMemA
|
||||||
|
clc
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
.98 lda #SYSMGR.ERRSYN
|
||||||
|
sec
|
||||||
|
.99 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
EXEC.CMD.TYPE lda hARGS
|
EXEC.CMD.TYPE ldy #hARGS
|
||||||
|
lda (pData),y
|
||||||
beq .98
|
beq .98
|
||||||
>SYSCALL SYS.LoadFileA
|
>SYSCALL SYS.LoadFileA
|
||||||
bcs .99
|
bcs .99
|
||||||
|
|
||||||
>STYA ZPPTR2 store file len
|
>STYA ZPPTR2 store file len
|
||||||
phx
|
phx
|
||||||
txa
|
txa
|
||||||
|
@ -393,7 +466,6 @@ EXEC.CMD.TYPE lda hARGS
|
||||||
.2 dec ZPPTR2
|
.2 dec ZPPTR2
|
||||||
|
|
||||||
lda (ZPPTR1)
|
lda (ZPPTR1)
|
||||||
ora #$80
|
|
||||||
jsr COUT
|
jsr COUT
|
||||||
inc ZPPTR1
|
inc ZPPTR1
|
||||||
bne .1
|
bne .1
|
||||||
|
@ -406,10 +478,12 @@ EXEC.CMD.TYPE lda hARGS
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.98 lda #SYSMGR.ERRSYN
|
.98 lda #SYSMGR.ERRSYN
|
||||||
|
sec
|
||||||
.99 rts
|
.99 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
EXEC.CMD.EXIT lda #$FF
|
EXEC.CMD.EXIT ldy #bEXIT
|
||||||
sta bEXIT
|
lda #$FF
|
||||||
|
sta (pData),y
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
@ -479,14 +553,13 @@ HISTORY.SETBUF jsr CmdBuffer.CLR
|
||||||
bne .1
|
bne .1
|
||||||
bra CmdBuffer.PRINT
|
bra CmdBuffer.PRINT
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CmdBuffer.PRINT ldx #0
|
CmdBuffer.PRINT ldy #0
|
||||||
.1 inx
|
.1 iny
|
||||||
lda CmdBuffer,x
|
lda (pData),y
|
||||||
ora #$80
|
ora #$80
|
||||||
phx
|
|
||||||
jsr COUT
|
jsr COUT
|
||||||
plx
|
tya
|
||||||
cpx CmdBuffer
|
cmp (pData)
|
||||||
bne .1
|
bne .1
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
@ -494,11 +567,13 @@ CmdBuffer.CLR jsr CmdBuffer.DEL
|
||||||
bne CmdBuffer.CLR
|
bne CmdBuffer.CLR
|
||||||
.9 rts
|
.9 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CmdBuffer.DEL lda CmdBuffer
|
CmdBuffer.DEL lda (pData)
|
||||||
beq .9
|
beq .9
|
||||||
lda #8
|
lda #8
|
||||||
jsr COUT
|
jsr COUT
|
||||||
dec CmdBuffer
|
lda (pData)
|
||||||
|
dec
|
||||||
|
sta (pData)
|
||||||
.9 rts
|
.9 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
PRBYTE pha
|
PRBYTE pha
|
||||||
|
@ -523,13 +598,12 @@ CROUT lda #13
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
COUT phx
|
COUT phx
|
||||||
phy
|
phy
|
||||||
>PUSHA
|
ldx #DEVMGR.COUT
|
||||||
ldy #S.PS.hOUTDEV
|
jsr pDevJmp
|
||||||
lda (pPsContext),y
|
|
||||||
>SYSCALL SYS.DevOutA
|
|
||||||
ply
|
ply
|
||||||
plx
|
plx
|
||||||
rts
|
rts
|
||||||
|
pDevJmp jmp (pDev)
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.END
|
CS.END
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
@ -546,22 +620,22 @@ LIBSTR >PSTRING "libstr.o"
|
||||||
MSG.GREETINGS >CSTRING "\nA2osX-Shell on Dev=(%h:%h),PS=%h\n\n"
|
MSG.GREETINGS >CSTRING "\nA2osX-Shell on Dev=(%h:%h),PS=%h\n\n"
|
||||||
MSG.UNKNOWN >CSTRING "Command Not Found\n"
|
MSG.UNKNOWN >CSTRING "Command Not Found\n"
|
||||||
MSG.SYNERR >CSTRING "Syntax Error Or Invalid Pathname\n"
|
MSG.SYNERR >CSTRING "Syntax Error Or Invalid Pathname\n"
|
||||||
*--------------------------------------
|
|
||||||
DS.START
|
|
||||||
*--------------------------------------
|
|
||||||
hLIBSTR .BS 1
|
hLIBSTR .BS 1
|
||||||
|
hNEWPATH .BS 1
|
||||||
|
*--------------------------------------
|
||||||
|
.DUMMY
|
||||||
|
.OR 0
|
||||||
|
DS.START
|
||||||
|
CmdBuffer .BS CmdBuffer.MAX+1
|
||||||
bEXIT .BS 1
|
bEXIT .BS 1
|
||||||
hCMDLINE .BS 1
|
hCMDLINE .BS 1
|
||||||
hCMD .BS 1
|
hCMD .BS 1
|
||||||
hARGS .BS 1
|
hARGS .BS 1
|
||||||
hNEWPATH .BS 1
|
|
||||||
CmdBuffer .BS CmdBuffer.MAX+1
|
|
||||||
CmdBuffer.POS .BS 1
|
|
||||||
CmdHistory .BS 256
|
CmdHistory .BS 256
|
||||||
CmdHistory.IDX .BS 1
|
CmdHistory.IDX .BS 1
|
||||||
CmdHistory.END .BS 1
|
CmdHistory.END .BS 1
|
||||||
*--------------------------------------
|
|
||||||
DS.END
|
DS.END
|
||||||
|
.ED
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
MAN
|
MAN
|
||||||
SAVE SBIN/SHELL.S
|
SAVE SBIN/SHELL.S
|
||||||
|
|
|
@ -1,15 +1,16 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /A2OSX.BUILD
|
PREFIX /A2OSX.SRC
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
.LIST OFF
|
.LIST OFF
|
||||||
.OP 65C02
|
.OP 65C02
|
||||||
.OR $2000
|
.OR $2000
|
||||||
.TF SBIN/TCPIP
|
.TF /A2OSX.BOOT/SBIN/TCPIP
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.INB INC/MACROS.I
|
.INB INC/MACROS.I
|
||||||
.INB INC/A2OSX.I
|
.INB INC/A2OSX.I
|
||||||
|
.INB INC/A2OSX.API.I
|
||||||
.INB INC/KERNEL.I
|
.INB INC/KERNEL.I
|
||||||
.INB INC/LIBTCPIP.I
|
.INB INC/LIBTCPIP.I
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
@ -20,17 +21,20 @@ ZPFrameBase2 .EQ ZPBIN+6
|
||||||
ZPFrameLen2 .EQ ZPBIN+8
|
ZPFrameLen2 .EQ ZPBIN+8
|
||||||
ZPFramePtr2 .EQ ZPBIN+10
|
ZPFramePtr2 .EQ ZPBIN+10
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* Main entry point
|
* File Header (16 Bytes)
|
||||||
*--------------------------------------
|
|
||||||
* Code signature and INIT table
|
|
||||||
*--------------------------------------
|
|
||||||
* CLD $D8
|
|
||||||
* JMP (*,x) $7C
|
|
||||||
* #JMPTABLE
|
|
||||||
* /JMPTABLE
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.START cld
|
CS.START cld
|
||||||
jmp (.1,x)
|
jmp (.1,x)
|
||||||
|
.DA #$61 6502,Level 1 (65c02)
|
||||||
|
.DA #1 BIN Layout Version 1
|
||||||
|
.DA 0
|
||||||
|
.DA CS.END-CS.START Code Length To Relocate
|
||||||
|
.DA 0
|
||||||
|
.DA 0
|
||||||
|
.DA 0
|
||||||
|
*--------------------------------------
|
||||||
|
* Relocation Table
|
||||||
|
*--------------------------------------
|
||||||
.1 .DA CS.INIT
|
.1 .DA CS.INIT
|
||||||
.DA CS.RUN
|
.DA CS.RUN
|
||||||
.DA CS.DOEVENT
|
.DA CS.DOEVENT
|
||||||
|
@ -39,11 +43,11 @@ L.LIBTCPIP .DA LIBTCPIP
|
||||||
L.CFGFILENAME .DA CFGFILENAME
|
L.CFGFILENAME .DA CFGFILENAME
|
||||||
L.IPCFG .DA IPCFG
|
L.IPCFG .DA IPCFG
|
||||||
.DA 0
|
.DA 0
|
||||||
.DA CS.END-CS.START Code Length To Relocate
|
|
||||||
.DA DS.END-DS.START Data Segment to Allocate
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.INIT >LIBLOADP L.LIBTCPIP
|
CS.INIT >LDYA L.LIBTCPIP
|
||||||
|
>LOADLIBYA
|
||||||
bcs .99
|
bcs .99
|
||||||
|
|
||||||
sta hLIBTCPIP
|
sta hLIBTCPIP
|
||||||
ldx #0
|
ldx #0
|
||||||
.1 stz IPCFG,x
|
.1 stz IPCFG,x
|
||||||
|
@ -74,15 +78,15 @@ CS.INIT >LIBLOADP L.LIBTCPIP
|
||||||
>SYSCALL SYS.AddNetCfg
|
>SYSCALL SYS.AddNetCfg
|
||||||
bcs .99
|
bcs .99
|
||||||
|
|
||||||
lda (pPsContext)
|
lda (pPs)
|
||||||
ora #S.PS.F.EVENT Now accept events
|
ora #S.PS.F.EVENT Now accept events
|
||||||
sta (pPsContext)
|
sta (pPs)
|
||||||
|
|
||||||
clc
|
clc
|
||||||
.99 rts
|
.99 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.INIT.DEV ldy #S.PS.hARGS
|
CS.INIT.DEV ldy #S.PS.hARGS
|
||||||
lda (pPsContext),y
|
lda (pPs),y
|
||||||
>PUSHA
|
>PUSHA
|
||||||
>PUSHBI $20 Push SEP=' '
|
>PUSHBI $20 Push SEP=' '
|
||||||
>PUSHBI 1 Push 1 for getting DEV
|
>PUSHBI 1 Push 1 for getting DEV
|
||||||
|
@ -91,25 +95,29 @@ CS.INIT.DEV ldy #S.PS.hARGS
|
||||||
sta hDEVNAME save DevName for discard
|
sta hDEVNAME save DevName for discard
|
||||||
>SYSCALL SYS.GetDevByNameA
|
>SYSCALL SYS.GetDevByNameA
|
||||||
bcs .98
|
bcs .98
|
||||||
|
>STYA pDev
|
||||||
|
txa
|
||||||
sta hDev
|
sta hDev
|
||||||
ldx #S.IPCFG.HDEV
|
ldx #S.IPCFG.HDEV
|
||||||
sta IPCFG,x
|
sta IPCFG,x
|
||||||
|
|
||||||
>SYSCALL SYS.GetDevInfoA
|
ldx #DEVMGR.OPEN
|
||||||
>STYA ZPQuickPtr1
|
jsr pDevJmp
|
||||||
|
|
||||||
ldy #0
|
ldx #DEVMGR.GETINFO
|
||||||
|
jsr pDevJmp
|
||||||
|
>STYA ZPQuickPtr1
|
||||||
|
|
||||||
|
ldy #1
|
||||||
ldx #S.IPCFG.MAC
|
ldx #S.IPCFG.MAC
|
||||||
.1 lda (ZPQuickPtr1),y
|
.1 lda (ZPQuickPtr1),y
|
||||||
sta IPCFG,x
|
sta IPCFG,x
|
||||||
inx
|
|
||||||
iny
|
iny
|
||||||
cpy #S.IPCFG.MAC+6
|
inx
|
||||||
|
cpx #S.IPCFG.MAC+6
|
||||||
bne .1
|
bne .1
|
||||||
|
|
||||||
lda hDEVNAME
|
jsr .98
|
||||||
>SYSCALL SYS.FreeMemA
|
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
@ -120,8 +128,8 @@ CS.INIT.DEV ldy #S.PS.hARGS
|
||||||
.99 sec
|
.99 sec
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.INIT.CFGFILE >PUSHW L.CFGFILENAME
|
CS.INIT.CFGFILE >LDYA L.CFGFILENAME
|
||||||
>SYSCALL SYS.ExpandPStr
|
>SYSCALL SYS.ExpandPStrYA
|
||||||
bcs .99
|
bcs .99
|
||||||
sta hCfgFileName
|
sta hCfgFileName
|
||||||
>SYSCALL SYS.LoadFileA
|
>SYSCALL SYS.LoadFileA
|
||||||
|
@ -154,8 +162,7 @@ CS.INIT.CFGFILE >PUSHW L.CFGFILENAME
|
||||||
CS.RUN clc
|
CS.RUN clc
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.DOEVENT >PULLW pEvent
|
CS.DOEVENT lda (pEvent)
|
||||||
lda (pEvent)
|
|
||||||
and #S.EVT.F.NET
|
and #S.EVT.F.NET
|
||||||
beq .9
|
beq .9
|
||||||
|
|
||||||
|
@ -221,13 +228,20 @@ CS.DOEVENT.NET ldy #S.EVT.DATALO Get Frame hMem
|
||||||
bcc .89
|
bcc .89
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.89 >SYSCALL SYS.DestroyEvent
|
.89 clc
|
||||||
clc
|
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.99 sec
|
.99 sec
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.QUIT lda hLIBTCPIP
|
CS.QUIT lda hDev
|
||||||
|
>SYSCALL SYS.GetDevByIDA
|
||||||
|
>STYA pDev
|
||||||
|
|
||||||
|
ldx #DEVMGR.OPEN
|
||||||
|
jsr pDevJmp
|
||||||
|
|
||||||
|
lda hLIBTCPIP
|
||||||
>SYSCALL SYS.FreeMemA
|
>SYSCALL SYS.FreeMemA
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
|
@ -428,14 +442,12 @@ CopyFramePtr12 dey
|
||||||
bne CopyFramePtr12
|
bne CopyFramePtr12
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
pDevJmp jmp (pDev)
|
||||||
CS.END
|
CS.END
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
LIBTCPIP >PSTRING "libtcpip.o"
|
LIBTCPIP >PSTRING "libtcpip.o"
|
||||||
CFGFILENAME >PSTRING "%ETC%TCPIP.CONF"
|
CFGFILENAME >PSTRING "%ETC%TCPIP.CONF"
|
||||||
DefaultHostName >CSTRING "a2osx-host"
|
DefaultHostName >CSTRING "a2osx-host"
|
||||||
*--------------------------------------
|
|
||||||
DS.START
|
|
||||||
*--------------------------------------
|
|
||||||
hLIBTCPIP .BS 1
|
hLIBTCPIP .BS 1
|
||||||
hDEVNAME .BS 1
|
hDEVNAME .BS 1
|
||||||
hDev .BS 1
|
hDev .BS 1
|
||||||
|
@ -444,8 +456,6 @@ hCfgFile .BS 1
|
||||||
hCfgFileLen .BS 2
|
hCfgFileLen .BS 2
|
||||||
IPCFG .BS S.IPCFG Get in cache for faster access with ,X
|
IPCFG .BS S.IPCFG Get in cache for faster access with ,X
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
DS.END
|
|
||||||
*--------------------------------------
|
|
||||||
MAN
|
MAN
|
||||||
SAVE SBIN/TCPIP.S
|
SAVE SBIN/TCPIP.S
|
||||||
ASM
|
ASM
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /A2OSX.BUILD
|
PREFIX /A2OSX.SRC
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /A2OSX.BUILD
|
PREFIX /A2OSX.SRC
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
@ -13,375 +13,227 @@ AUTO 6
|
||||||
* Y,A = MEMPTR
|
* Y,A = MEMPTR
|
||||||
* X = hMem of Code Segment
|
* X = hMem of Code Segment
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
S.LoadBinA sta R.DH save file path
|
S.LoadBinA sta S.LoadBinA.hFilename save file path
|
||||||
jsr S.GetMemByNameA
|
jsr S.GetMemByNameA
|
||||||
bcs .1 not already loaded
|
bcs .1 not already loaded
|
||||||
>STYA R.AX Save base address
|
|
||||||
|
>STYA ZPQuickPtr1 Save base address
|
||||||
ldy #S.MEM.REFCNT
|
ldy #S.MEM.REFCNT
|
||||||
lda (R.AX),y
|
lda (ZPQuickPtr1),y
|
||||||
inc
|
inc
|
||||||
sta (R.AX),y
|
sta (ZPQuickPtr1),y
|
||||||
|
|
||||||
ldy #S.MEM.PTR
|
ldy #S.MEM.PTR
|
||||||
lda (R.AX),y
|
lda (ZPQuickPtr1),y
|
||||||
pha Y,A = MEM PTR...
|
pha Y,A = MEM PTR...
|
||||||
iny
|
iny
|
||||||
lda (R.AX),y
|
lda (ZPQuickPtr1),y
|
||||||
ply X=hMem from S.GetMemByNameA
|
ply X=hMem from S.GetMemByNameA
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.1 lda R.DH
|
.1 lda S.LoadBinA.hFilename
|
||||||
jsr S.LoadFileA
|
jsr S.LoadFileA
|
||||||
bcs .99
|
bcc .2
|
||||||
>STYA R.BX save file length for relocation
|
rts Error Loading file
|
||||||
stx R.DL save hMem
|
|
||||||
|
.2 >STYA S.LoadBinA.FileLen
|
||||||
|
stx S.LoadBinA.hMem save hMem
|
||||||
txa
|
txa
|
||||||
jsr S.GetMemPtrA
|
jsr S.GetMemPtrA
|
||||||
>STYA R.AX save base address for relocation
|
>STYA ZPQuickPtr1 save base address for relocation
|
||||||
lda R.DH
|
|
||||||
jsr S.MLIGetFileInfoA Get File Info for AUXTYPE
|
ldy #H.BIN.CODE.LEN make AX = Code Len
|
||||||
bcs .98
|
|
||||||
>STYA ZPQuickPtr1
|
|
||||||
ldy #2 get AUXTYPE
|
|
||||||
lda (ZPQuickPtr1),y
|
lda (ZPQuickPtr1),y
|
||||||
sta R.CL
|
sta R.AL
|
||||||
iny
|
iny
|
||||||
lda (ZPQuickPtr1),y
|
lda (ZPQuickPtr1),y
|
||||||
sta R.CH save File load address for relocation
|
sta R.AH
|
||||||
lda R.AL compute offset for relocation....
|
|
||||||
|
lda S.LoadBinA.hFilename
|
||||||
|
jsr S.MLIGetFileInfoA Get File Info for AUXTYPE
|
||||||
|
bcs .98
|
||||||
|
|
||||||
|
>STYA ZPQuickPtr2
|
||||||
|
ldy #2 get AUXTYPE
|
||||||
|
lda (ZPQuickPtr2),y
|
||||||
|
sta R.BL Make BX=Range Start=AUXTYPE
|
||||||
|
sta S.LoadBinA.AuxType
|
||||||
|
clc
|
||||||
|
adc S.LoadBinA.FileLen
|
||||||
|
sta R.CL Make CX=Range End=AUXTYPE+FILELEN
|
||||||
|
iny
|
||||||
|
lda (ZPQuickPtr2),y
|
||||||
|
sta R.BH
|
||||||
|
sta S.LoadBinA.AuxType+1
|
||||||
|
adc S.LoadBinA.FileLen+1
|
||||||
|
sta R.CH
|
||||||
|
|
||||||
|
lda ZPQuickPtr1 Compute relocation offset in DX
|
||||||
sec
|
sec
|
||||||
sbc R.CL ...AX-CX...
|
sbc S.LoadBinA.AuxType
|
||||||
sta R.CL
|
sta R.DL DX=Offset=ZPQuickPtr1-AUXTYPE
|
||||||
lda R.AH
|
lda ZPQuickPtr1+1
|
||||||
sbc R.CH
|
sbc S.LoadBinA.AuxType+1
|
||||||
sta R.CH ...to CX
|
sta R.DH
|
||||||
jsr S.BinRelocate
|
|
||||||
|
>LDYA ZPQuickPtr1
|
||||||
|
jsr S.BinRelocateYA
|
||||||
|
|
||||||
bcs .98 relocation error, dicard Code segment
|
bcs .98 relocation error, dicard Code segment
|
||||||
lda R.DH get back bin path
|
|
||||||
|
lda S.LoadBinA.hFilename get back bin path
|
||||||
jsr S.PStrCpyA
|
jsr S.PStrCpyA
|
||||||
bcs .98
|
bcs .98
|
||||||
|
|
||||||
pha save copy of bin path
|
pha save copy of bin path
|
||||||
lda R.DL
|
lda S.LoadBinA.hMem
|
||||||
jsr S.GetMemByIDA
|
jsr S.GetMemByIDA
|
||||||
>STYA ZPQuickPtr1
|
>STYA ZPQuickPtr1
|
||||||
|
|
||||||
lda (ZPQuickPtr1)
|
lda (ZPQuickPtr1)
|
||||||
ora #S.MEM.F.CODE This is a code segment
|
ora #S.MEM.F.CODE This is a code segment
|
||||||
sta (ZPQuickPtr1)
|
sta (ZPQuickPtr1)
|
||||||
|
|
||||||
ldy #S.MEM.BIN
|
ldy #S.MEM.BIN
|
||||||
pla get back copy of bin path
|
pla get back copy of bin path
|
||||||
sta (ZPQuickPtr1),y
|
sta (ZPQuickPtr1),y
|
||||||
>LDYA R.AX return CS PTR ... not modified by S.LoadCodeReloc
|
|
||||||
ldx R.DL ...and hMEM to Caller
|
lda S.LoadBinA.hMem
|
||||||
clc
|
tax return hMEM to Caller...
|
||||||
|
jsr S.GetMemPtrA
|
||||||
|
clc ...and Y,A=PTR to CS
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.98 pha
|
.98 pha
|
||||||
lda R.DL
|
lda S.LoadBinA.hMem
|
||||||
jsr S.FreeMemA Discard Loaded Code
|
jsr S.FreeMemA Discard Loaded Code
|
||||||
pla
|
pla
|
||||||
.99 sec
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
* S.LoadDrvA
|
|
||||||
* in :
|
|
||||||
* A = hMem To Full Cmd Line
|
|
||||||
* out :
|
|
||||||
* none
|
|
||||||
*--------------------------------------
|
|
||||||
S.LoadDrvA >PUSHA push Cmd Line for S.PStrGetTkn
|
|
||||||
>LDYAI MSG.DRVLOAD
|
|
||||||
jsr S.SysScrPPSTR
|
|
||||||
jsr S.CreateDevice
|
|
||||||
bcc .1
|
|
||||||
pha save error code
|
|
||||||
>PULLA discard Cmd Line
|
|
||||||
pla
|
|
||||||
sec
|
sec
|
||||||
rts
|
rts
|
||||||
|
*--------------------------------------
|
||||||
.1 >PUSHBI $20 Push SEP=' '
|
S.LoadBinA.hFilename .BS 1
|
||||||
>PUSHBI 0 Push 0 for getting CMD And ARGS
|
S.LoadBinA.hMem .BS 1
|
||||||
jsr S.PStrGetTkn
|
S.LoadBinA.AuxType .BS 2
|
||||||
bcs .98
|
S.LoadBinA.FileLen .BS 2
|
||||||
ldy #S.DEV.hCMD
|
*--------------------------------------
|
||||||
sta (DEVMGR.DEVPTR),y
|
* S.BinRelocateYA :
|
||||||
|
* YA = Ptr to Code
|
||||||
>PUSHA push CMD for S.FileSearch
|
* R.AX = Code Length
|
||||||
txa
|
* R.BX = Range Start address to relocate
|
||||||
ldy #S.DEV.hARGS
|
* R.CX = Range End address to relocate
|
||||||
sta (DEVMGR.DEVPTR),y
|
* R.DX = offset to apply to all abs addresses between R.BX and R.CX
|
||||||
>PUSHWI ENV.DRV push ENVNAME=DRV
|
*--------------------------------------
|
||||||
ldy #S.PS.hENV
|
S.BinRelocateYA >STYA ZPQuickPtr1
|
||||||
lda TSKMGR.TABLE,y Get PS #0 Env
|
ldy #H.BIN.JMP relocate Main JMP
|
||||||
>PUSHA
|
lda (ZPQuickPtr1),y
|
||||||
jsr S.GetEnvVarP get value for ENV=%DRV%
|
|
||||||
bcs .98
|
|
||||||
|
|
||||||
sta LoadDrv.ENV
|
|
||||||
>PUSHA A=PStr to Value
|
|
||||||
jsr S.FileSearch find File in %DRV%
|
|
||||||
bcs .98 not Found
|
|
||||||
|
|
||||||
sta LoadDrv.BIN
|
|
||||||
jsr S.SysScrPPSTRA
|
|
||||||
|
|
||||||
lda LoadDrv.BIN
|
|
||||||
jsr S.LoadBinA X = BinPath hMem
|
|
||||||
bcs .97
|
|
||||||
>STYA Kernel.JMP save PTR to Code Segment
|
|
||||||
txa
|
|
||||||
ldy #S.DEV.hCS
|
|
||||||
sta (DEVMGR.DEVPTR),y save CS hMem in DEVSLOT
|
|
||||||
|
|
||||||
lda LoadDrv.BIN
|
|
||||||
jsr S.FreeMemA
|
|
||||||
lda LoadDrv.ENV
|
|
||||||
jsr S.FreeMemA
|
|
||||||
|
|
||||||
ldx #DEVMGR.OPEN
|
|
||||||
>LDYA DEVMGR.DEVPTR
|
|
||||||
jsr Kernel.DRVCALL Call DRV Open function
|
|
||||||
bcs .99
|
|
||||||
|
|
||||||
lda (DEVMGR.DEVPTR)
|
|
||||||
ora #S.DEV.F.INUSE Get Device Flags in A
|
|
||||||
sta (DEVMGR.DEVPTR)
|
|
||||||
clc
|
clc
|
||||||
rts
|
adc R.DL
|
||||||
|
|
||||||
.97 pha save error code
|
|
||||||
lda LoadDrv.BIN
|
|
||||||
jsr S.FreeMemA discard BIN in case of failed load
|
|
||||||
pla
|
|
||||||
|
|
||||||
.98 pha
|
|
||||||
lda LoadDrv.ENV
|
|
||||||
jsr S.FreeMemA
|
|
||||||
pla
|
|
||||||
|
|
||||||
.99 pha
|
|
||||||
jsr S.DestroyDevice
|
|
||||||
pla
|
|
||||||
sec
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
* S.LoadLib
|
|
||||||
* in :
|
|
||||||
* PULLW = PTR To Lib Name
|
|
||||||
* out :
|
|
||||||
* A = hMem To loaded LIB
|
|
||||||
*--------------------------------------
|
|
||||||
S.LoadLib jsr S.NewPStr
|
|
||||||
bcs .99
|
|
||||||
pha save LibName hMem for discard
|
|
||||||
jsr S.LoadLibA
|
|
||||||
bcs .98
|
|
||||||
plx get back STR hMem
|
|
||||||
pha save error code/hMem
|
|
||||||
txa
|
|
||||||
jsr S.FreeMemA discard STR hMem
|
|
||||||
pla get back error code/hMem
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
.98 plx get back STR hMem
|
|
||||||
pha save error code/hMem
|
|
||||||
txa
|
|
||||||
jsr S.FreeMemA discard STR hMem
|
|
||||||
pla get back error code/hMem
|
|
||||||
sec
|
|
||||||
.99 rts
|
|
||||||
*--------------------------------------
|
|
||||||
* S.LoadLibA
|
|
||||||
* in :
|
|
||||||
* A = hMem To Lib Name
|
|
||||||
* out :
|
|
||||||
* A = hMem of Loaded Lib
|
|
||||||
*--------------------------------------
|
|
||||||
S.LoadLibA >PUSHA push libname for S.FileSearch
|
|
||||||
>LDYAI MSG.LOADLIB
|
|
||||||
jsr S.SysScrPPSTR
|
|
||||||
>PUSHWI ENV.LIB push ENVNAME=LIB
|
|
||||||
ldy #S.PS.hENV
|
|
||||||
lda (TSKMGR.TSKPTR),y
|
|
||||||
>PUSHA
|
|
||||||
jsr S.GetEnvVarP get value for ENV=LIB
|
|
||||||
bcs .99
|
|
||||||
pha save hMem to LIB VALUE
|
|
||||||
>PUSHA Push %LIB% VALUE
|
|
||||||
jsr S.FileSearch find libname in %LIB%
|
|
||||||
bcs .98
|
|
||||||
pha save hMem to LIB full path
|
|
||||||
jsr S.SysScrPPSTRA
|
|
||||||
pla
|
|
||||||
pha
|
|
||||||
jsr S.LoadBinA A = hMem of filename full path
|
|
||||||
bcs .97
|
|
||||||
phx
|
|
||||||
>STYA Kernel.JMP
|
|
||||||
|
|
||||||
ldx #LIBMGR.LOAD
|
|
||||||
jsr Kernel.LIBCALL Call LIB.LOAD function
|
|
||||||
|
|
||||||
bcs .97
|
|
||||||
|
|
||||||
plx
|
|
||||||
pla discard LIB PATH
|
|
||||||
jsr S.FreeMemA
|
|
||||||
pla discard LIB VALUE
|
|
||||||
jsr S.FreeMemA
|
|
||||||
txa
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
.97 pla discard LIB PATH
|
|
||||||
jsr S.FreeMemA
|
|
||||||
.98 pla discard LIB VALUE
|
|
||||||
jsr S.FreeMemA
|
|
||||||
sec
|
|
||||||
.99 rts
|
|
||||||
*--------------------------------------
|
|
||||||
* S.UnloadLibA
|
|
||||||
* in :
|
|
||||||
* A = hMem To Lib
|
|
||||||
* out :
|
|
||||||
*--------------------------------------
|
|
||||||
S.UnloadLibA pha
|
|
||||||
jsr S.GetMemByIDA
|
|
||||||
>STYA ZPQuickPtr1
|
|
||||||
ldy #S.MEM.REFCNT
|
|
||||||
lda (ZPQuickPtr1),y Get count of those referencing this lib
|
|
||||||
dec only one left ?
|
|
||||||
beq .1
|
|
||||||
sta (ZPQuickPtr1),y
|
sta (ZPQuickPtr1),y
|
||||||
pla
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
|
|
||||||
.1 ldy #S.MEM.PTR
|
|
||||||
lda (ZPQuickPtr1),y
|
|
||||||
pha
|
|
||||||
iny
|
iny
|
||||||
lda (ZPQuickPtr1),y
|
lda (ZPQuickPtr1),y
|
||||||
ply
|
adc R.DH
|
||||||
>STYA Kernel.JMP
|
sta (ZPQuickPtr1),y
|
||||||
|
|
||||||
|
ldy #H.BIN.RELOC.TABLE skip Header, CS.SIZE & DS.SIZE... (16 bytes)
|
||||||
|
bra S.JmpRelocate
|
||||||
|
|
||||||
ldx #LIBMGR.UNLOAD
|
S.DrvRelocateYA >STYA ZPQuickPtr1
|
||||||
jsr Kernel.BINCALL Call LIB.UNLOAD function
|
ldy #0
|
||||||
pla
|
|
||||||
jmp S.FreeMemA
|
S.JmpRelocate lda (ZPQuickPtr1),y Start Relocate JMP table
|
||||||
*--------------------------------------
|
tax
|
||||||
* S.BinRelocate :
|
|
||||||
* R.AX = base address to start relocate
|
|
||||||
* R.BX = segment length (including data)
|
|
||||||
* R.CX = offset to apply to all abs addresses within segment
|
|
||||||
* R.DX unmodified
|
|
||||||
*--------------------------------------
|
|
||||||
S.BinRelocate lda (R.AX)
|
|
||||||
cmp #K.BIN.MAGICHEADER
|
|
||||||
bne .99
|
|
||||||
ldy #1
|
|
||||||
lda (R.AX),y
|
|
||||||
cmp /K.BIN.MAGICHEADER
|
|
||||||
beq .1
|
|
||||||
.99 sec Not a Valid Relocatable BIN File, exiting
|
|
||||||
rts
|
|
||||||
.1 >PUSHW R.DX
|
|
||||||
lda R.AL
|
|
||||||
clc
|
|
||||||
adc R.BL Make BX end of Segment Range (BX=AX+BX)
|
|
||||||
sta R.BL
|
|
||||||
lda R.AH
|
|
||||||
adc R.BH
|
|
||||||
sta R.BH
|
|
||||||
iny
|
iny
|
||||||
.2 lda (R.AX),y Start Relocate JMP table
|
ora (ZPQuickPtr1),y
|
||||||
clc
|
beq S.CodeRelocate $0000 = end of table
|
||||||
adc R.CL
|
|
||||||
tax save LO to X
|
|
||||||
iny
|
|
||||||
lda (R.AX),y if HI = 0,we are done
|
|
||||||
beq .3
|
|
||||||
adc R.CH
|
|
||||||
sta (R.AX),y
|
|
||||||
dey
|
dey
|
||||||
txa get back LO
|
txa
|
||||||
sta (R.AX),y
|
|
||||||
iny
|
|
||||||
iny
|
|
||||||
bra .2
|
|
||||||
.3 iny we already skipped the 2 "0" bytes indicating end of JMP table
|
|
||||||
lda R.AL
|
|
||||||
clc
|
clc
|
||||||
adc (R.AX),y make DX = end of opcode range
|
adc R.DL
|
||||||
sta R.DL
|
sta (ZPQuickPtr1),y
|
||||||
|
|
||||||
iny
|
iny
|
||||||
lda R.AH
|
lda (ZPQuickPtr1),y
|
||||||
adc (R.AX),y
|
adc R.DH
|
||||||
sta R.DH
|
sta (ZPQuickPtr1),y
|
||||||
|
|
||||||
iny
|
iny
|
||||||
* Start relocating opcodes between R.AX and R.DX with abs addressing pointing between R.AX and R.BX
|
|
||||||
* Applying offset = R.CX
|
bra S.JmpRelocate
|
||||||
tya add current offset in Y to R.AX
|
|
||||||
|
S.CodeRelocate lda ZPQuickPtr1
|
||||||
clc
|
clc
|
||||||
adc R.AL
|
adc R.AL Make ZPQuickPtr2=End of code
|
||||||
sta ZPQuickPtr1
|
sta ZPQuickPtr2 =ZPQuickPtr1+AX (code len)
|
||||||
lda #0
|
lda ZPQuickPtr1+1
|
||||||
adc R.AH
|
adc R.AH
|
||||||
sta ZPQuickPtr1+1
|
sta ZPQuickPtr2+1
|
||||||
.4 lda (ZPQuickPtr1) get OPCODE
|
|
||||||
|
iny
|
||||||
|
tya add current offset in Y to Ptr
|
||||||
|
clc
|
||||||
|
adc ZPQuickPtr1
|
||||||
|
sta ZPQuickPtr1
|
||||||
|
bcc .5
|
||||||
|
inc ZPQuickPtr1+1 ZPQuickPtr1=Current Code PTR
|
||||||
|
clc
|
||||||
|
|
||||||
|
.5 lda (ZPQuickPtr1) get OPCODE
|
||||||
tax
|
tax
|
||||||
lda OPCODES,x get OPCODE definition
|
lda OPCODES,x get OPCODE definition
|
||||||
bpl .7 abs addressing?
|
bpl .7 abs addressing?
|
||||||
|
|
||||||
|
and #3 save Opcode length...
|
||||||
|
pha
|
||||||
|
|
||||||
ldy #1
|
ldy #1
|
||||||
lda (ZPQuickPtr1),y Get LO
|
lda (ZPQuickPtr1),y Get LO
|
||||||
clc
|
|
||||||
adc R.CL add CX to abs address
|
|
||||||
sta ZPQuickPtr2 store relocated addr LO
|
|
||||||
iny
|
|
||||||
lda (ZPQuickPtr1),y Get HI
|
|
||||||
adc R.CH
|
|
||||||
sta ZPQuickPtr2+1 store relocated addr LO
|
|
||||||
dey
|
|
||||||
lda ZPQuickPtr2 Get new LO
|
|
||||||
sec
|
|
||||||
sbc R.AL
|
|
||||||
iny
|
|
||||||
lda ZPQuickPtr2+1 Get new HI
|
|
||||||
sbc R.AH
|
|
||||||
bcc .6 new addr < AX, out of range
|
|
||||||
dey
|
|
||||||
lda ZPQuickPtr2 Get new LO
|
|
||||||
sec
|
sec
|
||||||
sbc R.BL
|
sbc R.BL
|
||||||
iny
|
iny
|
||||||
lda ZPQuickPtr2+1 Get new HI
|
lda (ZPQuickPtr1),y Get HI
|
||||||
sbc R.BH
|
sbc R.BH
|
||||||
bcs .6 new addr > BX, out of range
|
bcc .6 addr < AX, out of range
|
||||||
|
|
||||||
dey
|
dey
|
||||||
lda ZPQuickPtr2 Get new LO
|
lda (ZPQuickPtr1),y Get LO
|
||||||
sta (ZPQuickPtr1),y
|
sec
|
||||||
|
sbc R.CL
|
||||||
iny
|
iny
|
||||||
lda ZPQuickPtr2+1 Get new HI
|
lda (ZPQuickPtr1),y Get HI
|
||||||
sta (ZPQuickPtr1),y
|
sbc R.CH
|
||||||
.6 lda OPCODES,x
|
bcs .6 addr > CX, out of range
|
||||||
.7 and #$3 get OPCODE length
|
|
||||||
|
dey
|
||||||
|
lda (ZPQuickPtr1),y Get LO
|
||||||
clc
|
clc
|
||||||
|
adc R.DL add DX to abs address
|
||||||
|
sta (ZPQuickPtr1),y store relocated addr LO
|
||||||
|
iny
|
||||||
|
lda (ZPQuickPtr1),y Get HI
|
||||||
|
adc R.DH
|
||||||
|
sta (ZPQuickPtr1),y store relocated addr HI
|
||||||
|
|
||||||
|
.6 pla
|
||||||
|
|
||||||
|
.7 clc A = OPCODE length
|
||||||
adc ZPQuickPtr1
|
adc ZPQuickPtr1
|
||||||
sta ZPQuickPtr1
|
sta ZPQuickPtr1
|
||||||
bcc .8
|
bcc .8
|
||||||
inc ZPQuickPtr1+1
|
inc ZPQuickPtr1+1
|
||||||
.8 sec A already got Ptr LO
|
|
||||||
sbc R.DL
|
.8 lda ZPQuickPtr1 is Current PTR < Code Limit ?
|
||||||
lda ZPQuickPtr1+1 is Ptr greater than DX ?
|
sec
|
||||||
sbc R.DH
|
sbc ZPQuickPtr2
|
||||||
bcc .4 no, continue relocating
|
lda ZPQuickPtr1+1
|
||||||
>PULLW R.DX
|
sbc ZPQuickPtr2+1
|
||||||
|
bcc .5 yes, continue relocating
|
||||||
|
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
|
||||||
MSG.DRVLOAD >PSTRING "\nLoadDrv:"
|
|
||||||
MSG.LOADLIB >PSTRING "\nLoadLib:"
|
|
||||||
LoadDrv.ENV .BS 1
|
|
||||||
LoadDrv.BIN .BS 1
|
|
||||||
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* 65C02 OPCODES
|
* 65C02 OPCODES
|
||||||
* Bit 7 : 1 absolute addressing
|
* Bit 7 : 1 absolute addressing
|
||||||
|
|
|
@ -1,35 +1,28 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /A2OSX.BUILD
|
PREFIX /A2OSX.SRC
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
.LIST OFF
|
.LIST OFF
|
||||||
.OP 65C02
|
.OP 65C02
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
DevMgr.HiMem .EQ $FFFE Protect IRQ vector in Aux LC
|
||||||
|
*--------------------------------------
|
||||||
* S.DevMgrInit
|
* S.DevMgrInit
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
S.DevMgrInit ldx #S.DEV.SIZE*K.DEV.MAX
|
S.DevMgrInit ldx #S.DEV.SIZE*2
|
||||||
.1 stz DEVMGR.TABLE-1,x
|
.1 lda DevMgr.NUL-1,x
|
||||||
|
sta DevMgr.Table-1,x
|
||||||
dex
|
dex
|
||||||
bne .1
|
bne .1
|
||||||
|
|
||||||
ldy #5
|
stz DevMgr.Table+S.DEV.SIZE*2+1
|
||||||
.2 lda DEVMGR.TABLE.NUL,y
|
|
||||||
sta DEVMGR.TABLE,y
|
|
||||||
dey
|
|
||||||
bpl .2
|
|
||||||
|
|
||||||
ldy #5
|
|
||||||
ldx #S.DEV.SIZE+5
|
|
||||||
.3 lda DEVMGR.TABLE.KBD,y
|
|
||||||
sta DEVMGR.TABLE,x
|
|
||||||
dex
|
|
||||||
dey
|
|
||||||
bpl .3
|
|
||||||
|
|
||||||
lda #1 reserve #0=NUL, #1=KBD
|
lda #1 reserve #0=NUL, #1=KBD
|
||||||
sta DEVMGR.LASTID
|
sta DevMgr.LastDevID
|
||||||
|
|
||||||
|
>LDYAI DevMgr.End
|
||||||
|
>STYA DevMgr.Free
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
@ -41,185 +34,185 @@ S.DevMgrInit ldx #S.DEV.SIZE*K.DEV.MAX
|
||||||
* Y,A = devslot
|
* Y,A = devslot
|
||||||
* X Unmodified
|
* X Unmodified
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
S.GetDevByIDA sta ZPQuickPtr1
|
S.GetDevByIDA cmp DevMgr.LastDevID
|
||||||
lda #K.DEV.MAX
|
beq .1
|
||||||
sta ZPQuickPtr1+1
|
bcs .9
|
||||||
|
|
||||||
>LDYAI DEVMGR.TABLE
|
.1 stz S.GetDevByIDA.T
|
||||||
>STYA ZPQuickPtr2
|
|
||||||
|
asl
|
||||||
.1 lda (ZPQuickPtr2) get S.DEV.F
|
ror S.GetDevByIDA.T
|
||||||
bpl .2 In use ?
|
asl
|
||||||
ldy #S.DEV.ID
|
ror S.GetDevByIDA.T
|
||||||
lda (ZPQuickPtr2),y
|
asl
|
||||||
cmp ZPQuickPtr1
|
ror S.GetDevByIDA.T
|
||||||
beq .8
|
asl
|
||||||
|
ror S.GetDevByIDA.T
|
||||||
.2 lda ZPQuickPtr2
|
|
||||||
clc
|
adc #DevMgr.Table
|
||||||
adc #S.DEV.SIZE
|
tay
|
||||||
sta ZPQuickPtr2
|
lda S.GetDevByIDA.T
|
||||||
bcc .3
|
adc /DevMgr.Table
|
||||||
inc ZPQuickPtr2+1
|
rts CC
|
||||||
|
|
||||||
.3 dec ZPQuickPtr1+1
|
.9 lda #DEVMGR.ERRDNF
|
||||||
bne .1
|
rts CS
|
||||||
sec
|
S.GetDevByIDA.T .BS 1
|
||||||
rts
|
|
||||||
|
|
||||||
.8 >LDYA ZPQuickPtr2
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* GetDevIDByNameA
|
* GetDevIDByNameA
|
||||||
* IN:
|
* IN:
|
||||||
* A = hPStr
|
* A = hPStr
|
||||||
* OUT:
|
* OUT:
|
||||||
* CC = OK, CS = ERROR
|
* CC = OK, CS = ERROR
|
||||||
* A = DEVID
|
* X = DEVID
|
||||||
* set DEVMGR.DEVPTR to devslot
|
* Y,A = pDev
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
S.GetDevByNameA jsr S.GetMemPtrA
|
S.GetDevByNameA jsr S.GetMemPtrA
|
||||||
S.GetDevByNameYA
|
S.GetDevByNameYA
|
||||||
>STYA ZPQuickPtr1
|
>STYA ZPQuickPtr1
|
||||||
>LDYAI DEVMGR.TABLE
|
>LDYAI DevMgr.Table+S.DEV.NAME
|
||||||
>STYA DEVMGR.DEVPTR
|
>STYA ZPQuickPtr2
|
||||||
|
|
||||||
ldx #K.DEV.MAX
|
ldx #0
|
||||||
.1 lda (DEVMGR.DEVPTR) get S.DEV.F
|
|
||||||
bpl .3 empty ?
|
.1 lda (ZPQuickPtr1)
|
||||||
lda DEVMGR.DEVPTR
|
|
||||||
clc
|
|
||||||
adc #S.DEV.NAME
|
|
||||||
sta ZPQuickPtr2
|
|
||||||
lda DEVMGR.DEVPTR+1
|
|
||||||
adc /S.DEV.NAME
|
|
||||||
sta ZPQuickPtr2+1
|
|
||||||
lda (ZPQuickPtr1)
|
|
||||||
cmp (ZPQuickPtr2)
|
cmp (ZPQuickPtr2)
|
||||||
bne .3
|
bne .3
|
||||||
|
|
||||||
tay
|
tay
|
||||||
.2 lda (ZPQuickPtr1),y
|
.2 lda (ZPQuickPtr1),y
|
||||||
cmp (ZPQuickPtr2),y
|
cmp (ZPQuickPtr2),y
|
||||||
bne .3
|
bne .3
|
||||||
|
|
||||||
dey
|
dey
|
||||||
bne .2
|
bne .2
|
||||||
ldy #S.DEV.ID
|
|
||||||
lda (DEVMGR.DEVPTR),y
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
.3 lda DEVMGR.DEVPTR
|
|
||||||
clc
|
|
||||||
adc #S.DEV.SIZE
|
|
||||||
sta DEVMGR.DEVPTR
|
|
||||||
bcc .5
|
|
||||||
inc DEVMGR.DEVPTR+1
|
|
||||||
.5 dex
|
|
||||||
bne .1
|
|
||||||
lda #DEVMGR.ERRDNF
|
|
||||||
sec
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
* S.GetDevTable
|
|
||||||
* IN :
|
|
||||||
* OUT CC = OK, CS = ERROR
|
|
||||||
* Y,A = PTR to dev table
|
|
||||||
* X = LASTID
|
|
||||||
*--------------------------------------
|
|
||||||
S.GetDevTable >LDYAI DEVMGR.TABLE
|
|
||||||
ldx DEVMGR.LASTID
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
* S.DevOutA
|
|
||||||
* IN :
|
|
||||||
* A = hDev
|
|
||||||
*--------------------------------------
|
|
||||||
S.DevOutA ldx #DEVMGR.OUT
|
|
||||||
jmp S.DevCallFunc
|
|
||||||
*--------------------------------------
|
|
||||||
* S.GetDevInfoA
|
|
||||||
*--------------------------------------
|
|
||||||
S.GetDevInfoA ldx #DEVMGR.GETINFO
|
|
||||||
jmp S.DevCallFunc
|
|
||||||
*--------------------------------------
|
|
||||||
* PRIVATE
|
|
||||||
*--------------------------------------
|
|
||||||
S.DevCallFunc jsr S.GetDevByIDA
|
|
||||||
bcs .9
|
|
||||||
>STYA pDevContext
|
|
||||||
ldy #S.DEV.hCS
|
|
||||||
lda (pDevContext),y
|
|
||||||
jsr S.GetMemPtrA X = unmodified
|
|
||||||
>STYA Kernel.JMP
|
|
||||||
>LDYA pDevContext
|
|
||||||
jsr Kernel.DRVCALL Call DRV function
|
|
||||||
.9 rts
|
|
||||||
*--------------------------------------
|
|
||||||
* S.CreateDevSlot
|
|
||||||
* IN : none
|
|
||||||
* OUT : A = DevID
|
|
||||||
* set DEVMGR.DEVPTR to freeslot
|
|
||||||
*--------------------------------------
|
|
||||||
S.CreateDevice >LDYAI DEVMGR.TABLE
|
|
||||||
>STYA DEVMGR.DEVPTR
|
|
||||||
ldx #K.DEV.MAX
|
|
||||||
|
|
||||||
.1 lda (DEVMGR.DEVPTR)
|
lda ZPQuickPtr2
|
||||||
bpl .3
|
|
||||||
lda DEVMGR.DEVPTR
|
|
||||||
clc
|
|
||||||
adc #S.DEV.SIZE
|
|
||||||
sta DEVMGR.DEVPTR
|
|
||||||
bcc .2
|
|
||||||
inc DEVMGR.DEVPTR+1
|
|
||||||
.2 dex
|
|
||||||
bne .1
|
|
||||||
lda #DEVMGR.ERROOS
|
|
||||||
sec
|
sec
|
||||||
rts
|
sbc #S.DEV.NAME
|
||||||
|
|
||||||
.3 lda #0
|
|
||||||
tay
|
tay
|
||||||
.4 sta (DEVMGR.DEVPTR),y
|
lda ZPQuickPtr2+1
|
||||||
iny
|
sbc /S.DEV.NAME
|
||||||
cpy #S.DEV.SIZE
|
|
||||||
bne .4
|
|
||||||
inc DEVMGR.LASTID
|
|
||||||
lda DEVMGR.LASTID
|
|
||||||
ldy #S.DEV.ID
|
|
||||||
sta (DEVMGR.DEVPTR),y
|
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
.3 lda ZPQuickPtr2
|
||||||
|
clc
|
||||||
|
adc #S.DEV.SIZE
|
||||||
|
sta ZPQuickPtr2
|
||||||
|
bcc .4
|
||||||
|
|
||||||
|
inc ZPQuickPtr2+1
|
||||||
|
|
||||||
|
.4 cpx DevMgr.LastDevID
|
||||||
|
inx
|
||||||
|
bcc .1
|
||||||
|
|
||||||
|
.9 lda #DEVMGR.ERRDNF
|
||||||
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* S.DestroyDevSlot
|
S.GetDevEvent >LDYAI DevMgr.Table
|
||||||
* selected by (DEVMGR.DEVPTR)
|
>STYA pDev
|
||||||
|
|
||||||
|
stz DevMgr.DevID
|
||||||
|
|
||||||
|
.1 ldy #S.DEV.F
|
||||||
|
lda (pDev),y get S.DEV.F
|
||||||
|
and #S.DEV.F.EVENT
|
||||||
|
beq .2 EVENT enabled ?
|
||||||
|
|
||||||
|
ldx #DEVMGR.GETEVENT
|
||||||
|
jsr pDevJmp Call DRV GetEvent function
|
||||||
|
bcc .8 Got An Event
|
||||||
|
|
||||||
|
.2 lda pDev
|
||||||
|
clc
|
||||||
|
adc #S.DEV.SIZE
|
||||||
|
sta pDev
|
||||||
|
bcc .3
|
||||||
|
inc pDev+1
|
||||||
|
|
||||||
|
.3 lda DevMgr.DevID
|
||||||
|
inc DevMgr.DevID
|
||||||
|
cmp DevMgr.LastDevID
|
||||||
|
bne .1
|
||||||
|
|
||||||
|
lda #0 error code=0,CS=no event
|
||||||
|
sec
|
||||||
|
rts
|
||||||
|
|
||||||
|
.8 lda DevMgr.DevID Carry is alredy clear
|
||||||
|
ldy #S.EVT.hDEV
|
||||||
|
sta (pEvent),y
|
||||||
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
S.DestroyDevice ldy #S.DEV.hCS
|
DevMgr.Free .BS 2
|
||||||
lda (DEVMGR.DEVPTR),y
|
DevMgr.DevID .BS 1
|
||||||
beq .1
|
DevMgr.LastDevID .BS 1
|
||||||
jsr S.FreeMemA
|
|
||||||
.1 ldy #S.DEV.hDS
|
|
||||||
lda (DEVMGR.DEVPTR),y
|
|
||||||
beq .2
|
|
||||||
jsr S.FreeMemA
|
|
||||||
.2 ldy #S.DEV.hCMD
|
|
||||||
lda (DEVMGR.DEVPTR),y
|
|
||||||
beq .3
|
|
||||||
jsr S.FreeMemA
|
|
||||||
.3 ldy #S.DEV.hARGS
|
|
||||||
lda (DEVMGR.DEVPTR),y
|
|
||||||
beq .4
|
|
||||||
jsr S.FreeMemA
|
|
||||||
.4 rts
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
DEVMGR.TABLE.NUL .DA #S.DEV.F.INUSE+S.DEV.F.CHAR+S.DEV.F.BLOCK
|
DevMgr.NUL cld
|
||||||
.HS 00 ID
|
jmp (DevMgr.NUL.Code,x)
|
||||||
>PSTRING "NUL" NAME
|
.DA #S.DEV.F.INUSE+S.DEV.F.SHARE+S.DEV.F.COUT+S.DEV.F.CHAR
|
||||||
DEVMGR.TABLE.KBD .DA #S.DEV.F.INUSE+S.DEV.F.CHAR
|
>PSTRING "NUL" NAME
|
||||||
.HS 01 ID
|
.HS 00 NAME must Be 5 bytes long
|
||||||
>PSTRING "KBD" NAME
|
.HS 00.00
|
||||||
DEVMGR.LASTID .BS 1
|
.HS 00.00.00.00
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
DevMgr.KBD cld
|
||||||
|
jmp (DevMgr.KBD.Code,x)
|
||||||
|
.DA #S.DEV.F.INUSE+S.DEV.F.EVENT+S.DEV.F.CHAR
|
||||||
|
>PSTRING "KBD" NAME
|
||||||
|
.HS 00 NAME must Be 5 bytes long
|
||||||
|
.HS 00.00
|
||||||
|
.HS 00.00.00.00
|
||||||
|
*--------------------------------------
|
||||||
|
DevMgr.NUL.Code .DA .8 OPEN
|
||||||
|
.DA .8 GETEVENT
|
||||||
|
.DA .8 COUT
|
||||||
|
.DA .8 CLOSE
|
||||||
|
.DA .8 GETINFO
|
||||||
|
.DA .8 IRQ
|
||||||
|
.8 clc
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
DevMgr.KBD.Code .DA .8 OPEN
|
||||||
|
.DA DevMgr.KBD.GETEVENT
|
||||||
|
.DA .8 COUT
|
||||||
|
.DA .8 CLOSE
|
||||||
|
.DA .8 GETINFO
|
||||||
|
.DA .8 IRQ
|
||||||
|
.8 clc
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
DevMgr.KBD.GETEVENT
|
||||||
|
lda KBD
|
||||||
|
bpl .9
|
||||||
|
|
||||||
|
sta KBDSTROBE
|
||||||
|
and #$7F
|
||||||
|
ldy #S.EVT.DATA
|
||||||
|
sta (pEvent),y
|
||||||
|
iny
|
||||||
|
lda OPENAPPLE
|
||||||
|
asl
|
||||||
|
lda SOLIDAPPLE
|
||||||
|
ror
|
||||||
|
and #$C0
|
||||||
|
sta (pEvent),y
|
||||||
|
lda #S.EVT.F.KEY
|
||||||
|
|
||||||
|
sta (pEvent)
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
|
||||||
|
.9 inc A2osX.RANDOM16
|
||||||
|
bne .99
|
||||||
|
inc A2osX.RANDOM16+1
|
||||||
|
.99 lda #0 error code=0
|
||||||
|
sec no event
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
DevMgr.End .EQ *
|
||||||
MAN
|
MAN
|
||||||
SAVE SYS/KERNEL.S.DEV
|
SAVE SYS/KERNEL.S.DEV
|
||||||
LOAD SYS/KERNEL.S
|
LOAD SYS/KERNEL.S
|
||||||
|
|
285
SYS/KERNEL.S.DRV.txt
Normal file
285
SYS/KERNEL.S.DRV.txt
Normal file
|
@ -0,0 +1,285 @@
|
||||||
|
PR#3
|
||||||
|
PREFIX /A2OSX.SRC
|
||||||
|
NEW
|
||||||
|
INC 1
|
||||||
|
AUTO 6
|
||||||
|
.LIST OFF
|
||||||
|
.OP 65C02
|
||||||
|
*--------------------------------------
|
||||||
|
* S.LoadDrvA
|
||||||
|
* in :
|
||||||
|
* A = hMem To Full Cmd Line
|
||||||
|
* out :
|
||||||
|
* none
|
||||||
|
*--------------------------------------
|
||||||
|
S.LoadDrvA >PUSHA push Cmd Line for S.PStrGetTkn
|
||||||
|
>LDYAI MSG.DRVLOAD
|
||||||
|
jsr S.SysScrPPSTRYA
|
||||||
|
|
||||||
|
>PUSHBI $20 Push SEP=' '
|
||||||
|
>PUSHBI 0 Push 0 for getting CMD And ARGS
|
||||||
|
jsr S.PStrGetTkn
|
||||||
|
bcc .1
|
||||||
|
rts
|
||||||
|
|
||||||
|
.1 sta LoadDrv.Cmd
|
||||||
|
stx LoadDrv.Args
|
||||||
|
>PUSHA push CMD for S.FileSearch
|
||||||
|
|
||||||
|
>PUSHWI ENV.DRV push ENVNAME=DRV
|
||||||
|
ldy #S.PS.hENV
|
||||||
|
lda TskMgr.Table,y Get PS #0 Env
|
||||||
|
>PUSHA
|
||||||
|
jsr S.GetEnvVarP get value for ENV=%DRV%
|
||||||
|
bcs .98
|
||||||
|
|
||||||
|
sta LoadDrv.Path
|
||||||
|
>PUSHA A=PStr to Value
|
||||||
|
jsr S.FileSearch find File in %DRV%
|
||||||
|
bcs .97 not Found
|
||||||
|
|
||||||
|
sta LoadDrv.FullName
|
||||||
|
jsr S.SysScrPPSTRA
|
||||||
|
|
||||||
|
lda LoadDrv.FullName
|
||||||
|
jsr S.LoadBinA
|
||||||
|
bcs .96
|
||||||
|
|
||||||
|
>STYA pCode
|
||||||
|
stx LoadDrv.hMem
|
||||||
|
|
||||||
|
lda LoadDrv.Args
|
||||||
|
jsr pCodeJmp call Dev.Detect
|
||||||
|
|
||||||
|
bcs .95
|
||||||
|
|
||||||
|
jsr S.InsDrv
|
||||||
|
bcs .95
|
||||||
|
|
||||||
|
jsr .95
|
||||||
|
|
||||||
|
ldy #S.DEV.F
|
||||||
|
lda (pDev),y
|
||||||
|
ora #S.DEV.F.INUSE
|
||||||
|
sta (pDev),y
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
|
||||||
|
.95 pha
|
||||||
|
lda LoadDrv.hMem
|
||||||
|
jsr S.FreeMemA
|
||||||
|
pla
|
||||||
|
|
||||||
|
.96 pha
|
||||||
|
lda LoadDrv.FullName
|
||||||
|
jsr S.FreeMemA
|
||||||
|
pla
|
||||||
|
|
||||||
|
.97 pha
|
||||||
|
lda LoadDrv.Path
|
||||||
|
jsr S.FreeMemA
|
||||||
|
pla
|
||||||
|
|
||||||
|
.98 pha
|
||||||
|
lda LoadDrv.Args
|
||||||
|
jsr S.FreeMemA
|
||||||
|
lda LoadDrv.Cmd
|
||||||
|
jsr S.FreeMemA
|
||||||
|
pla
|
||||||
|
|
||||||
|
.99 sec
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
MSG.DRVLOAD >PSTRING "\nLoadDrv:"
|
||||||
|
LoadDrv.Cmd .BS 1
|
||||||
|
LoadDrv.Args .BS 1
|
||||||
|
LoadDrv.Path .BS 1
|
||||||
|
LoadDrv.FullName .BS 1
|
||||||
|
LoadDrv.hMem .BS 1
|
||||||
|
*--------------------------------------
|
||||||
|
* pCode = .DRV File Loaded Address
|
||||||
|
*--------------------------------------
|
||||||
|
S.InsDrv ldy #H.BIN.DRV.CODE.LEN
|
||||||
|
lda (pCode),y
|
||||||
|
sta R.AL
|
||||||
|
iny
|
||||||
|
lda (pCode),y
|
||||||
|
sta R.AH
|
||||||
|
|
||||||
|
ldy #H.BIN.DRV.CODE.O
|
||||||
|
lda (pCode),y
|
||||||
|
clc
|
||||||
|
adc S.LoadBinA.AuxType
|
||||||
|
sta R.BL
|
||||||
|
iny
|
||||||
|
lda (pCode),y
|
||||||
|
adc S.LoadBinA.AuxType+1
|
||||||
|
sta R.BH set BX=End Of Code
|
||||||
|
|
||||||
|
lda S.LoadBinA.AuxType
|
||||||
|
clc
|
||||||
|
adc S.LoadBinA.FileLen
|
||||||
|
sta R.CL
|
||||||
|
lda S.LoadBinA.AuxType+1
|
||||||
|
adc S.LoadBinA.FileLen+1
|
||||||
|
sta R.CH set CX=End Of Range
|
||||||
|
|
||||||
|
ldy #H.BIN.DRV.CODE.O
|
||||||
|
lda S.LoadBinA.FileLen
|
||||||
|
sec
|
||||||
|
sbc (pCode),y
|
||||||
|
sta S.InsDrv.DRVLen
|
||||||
|
iny
|
||||||
|
lda S.LoadBinA.FileLen+1
|
||||||
|
sbc (pCode),y
|
||||||
|
sta S.InsDrv.DRVLen+1 Compute DRV Len
|
||||||
|
|
||||||
|
lda DevMgr.Free
|
||||||
|
clc
|
||||||
|
adc S.InsDrv.DRVLen
|
||||||
|
sta S.InsDrv.DRVEnd
|
||||||
|
lda DevMgr.Free+1
|
||||||
|
adc S.InsDrv.DRVLen+1
|
||||||
|
sta S.InsDrv.DRVEnd+1
|
||||||
|
|
||||||
|
bcs .98 we crossed $FFFF, out of mem
|
||||||
|
|
||||||
|
lda S.InsDrv.DRVEnd
|
||||||
|
sec
|
||||||
|
sbc #DevMgr.HiMem
|
||||||
|
lda S.InsDrv.DRVEnd+1
|
||||||
|
sbc /DevMgr.HiMem
|
||||||
|
bcs .98 No More Room to load Driver....
|
||||||
|
|
||||||
|
lda DevMgr.LastDevID
|
||||||
|
inc
|
||||||
|
cmp #K.DEV.MAX
|
||||||
|
beq .99 No Device Handle Left
|
||||||
|
|
||||||
|
sta DevMgr.LastDevID
|
||||||
|
|
||||||
|
ldy #H.BIN.DEV.HEADER.O
|
||||||
|
lda (pCode),y
|
||||||
|
clc
|
||||||
|
adc pCode
|
||||||
|
sta ZPQuickPtr1
|
||||||
|
iny
|
||||||
|
lda (pCode),y
|
||||||
|
adc pCode+1
|
||||||
|
sta ZPQuickPtr1+1
|
||||||
|
|
||||||
|
ldy #S.DEV.JMP
|
||||||
|
|
||||||
|
lda DevMgr.Free
|
||||||
|
sec
|
||||||
|
sbc (ZPQuickPtr1),y
|
||||||
|
sta R.DL
|
||||||
|
lda DevMgr.Free+1
|
||||||
|
iny
|
||||||
|
sbc (ZPQuickPtr1),y
|
||||||
|
sta R.DH set DX=Offset
|
||||||
|
|
||||||
|
ldy #H.BIN.DRV.CODE.O
|
||||||
|
lda (pCode),y
|
||||||
|
clc
|
||||||
|
adc pCode
|
||||||
|
pha
|
||||||
|
iny
|
||||||
|
lda (pCode),y
|
||||||
|
adc pCode+1
|
||||||
|
ply
|
||||||
|
|
||||||
|
jsr S.DrvRelocateYA
|
||||||
|
|
||||||
|
jsr S.InsDrv.Move
|
||||||
|
|
||||||
|
>LDYA S.InsDrv.DrvEnd
|
||||||
|
>STYA DevMgr.Free
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
|
||||||
|
.98 lda #DEVMGR.ERROOM
|
||||||
|
sec
|
||||||
|
rts
|
||||||
|
|
||||||
|
.99 lda #DEVMGR.ERROOH
|
||||||
|
sec
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
S.InsDrv.Move ldy #H.BIN.DEV.HEADER.O
|
||||||
|
lda (pCode),y
|
||||||
|
clc
|
||||||
|
adc pCode
|
||||||
|
sta ZPQuickPtr1
|
||||||
|
iny
|
||||||
|
lda (pCode),y
|
||||||
|
adc pCode+1
|
||||||
|
sta ZPQuickPtr1+1
|
||||||
|
|
||||||
|
ldy #S.DEV.JMP Relocate Main JMP
|
||||||
|
lda (ZPQuickPtr1),y
|
||||||
|
clc
|
||||||
|
adc R.DL
|
||||||
|
sta (ZPQuickPtr1),y
|
||||||
|
iny
|
||||||
|
lda (ZPQuickPtr1),y
|
||||||
|
adc R.DH
|
||||||
|
sta (ZPQuickPtr1),y
|
||||||
|
|
||||||
|
lda DevMgr.LastDevID
|
||||||
|
jsr S.GetDevByIDA
|
||||||
|
>STYA pDev
|
||||||
|
|
||||||
|
ldy #S.DEV.SIZE-1 Copy DRV.Header
|
||||||
|
|
||||||
|
.1 lda (ZPQuickPtr1),y
|
||||||
|
sta (pDev),y
|
||||||
|
dey
|
||||||
|
bpl .1
|
||||||
|
|
||||||
|
ldy #H.BIN.DRV.CODE.O
|
||||||
|
lda (pCode),y
|
||||||
|
clc
|
||||||
|
adc pCode
|
||||||
|
sta ZPQuickPtr1
|
||||||
|
iny
|
||||||
|
lda (pCode),y
|
||||||
|
adc pCode+1
|
||||||
|
sta ZPQuickPtr1+1 Make ZPQuickPtr1=DRV.CODE
|
||||||
|
|
||||||
|
lda DevMgr.Free
|
||||||
|
sta ZPQuickPtr2
|
||||||
|
lda DevMgr.Free+1
|
||||||
|
sta ZPQuickPtr2+1 Make ZPQuickPtr2=Dest Ram Location
|
||||||
|
|
||||||
|
ldy S.InsDrv.DrvLen
|
||||||
|
ldx S.InsDrv.DrvLen+1
|
||||||
|
|
||||||
|
.2 lda (ZPQuickPtr1)
|
||||||
|
sta (ZPQuickPtr2)
|
||||||
|
|
||||||
|
inc ZPQuickPtr1
|
||||||
|
bne .3
|
||||||
|
inc ZPQuickPtr1+1
|
||||||
|
|
||||||
|
.3 inc ZPQuickPtr2
|
||||||
|
bne .4
|
||||||
|
inc ZPQuickPtr2+1
|
||||||
|
|
||||||
|
.4 tya
|
||||||
|
bne .5
|
||||||
|
txa
|
||||||
|
beq .8
|
||||||
|
dex
|
||||||
|
|
||||||
|
.5 dey
|
||||||
|
bra .2
|
||||||
|
.8 rts
|
||||||
|
*--------------------------------------
|
||||||
|
S.InsDrv.DrvLen .BS 2
|
||||||
|
S.InsDrv.DrvEnd .BS 2
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE SYS/KERNEL.S.DRV
|
||||||
|
LOAD SYS/KERNEL.S
|
||||||
|
ASM
|
|
@ -1,28 +1,20 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /A2OSX.BUILD
|
PREFIX /A2OSX.SRC
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
.LIST OFF
|
.LIST OFF
|
||||||
.OP 65C02
|
.OP 65C02
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* S.ExpandPStr
|
|
||||||
* In:
|
|
||||||
* PULLW = PSTR to String to Expand (PSTRING)
|
|
||||||
* Out:
|
|
||||||
* A = hMem to Expanded String (PSTRING)
|
|
||||||
*--------------------------------------
|
|
||||||
* S.ExpandPStrA
|
* S.ExpandPStrA
|
||||||
* In:
|
* In:
|
||||||
* A = hMem of String to Expand (PSTRING)
|
* A = hMem of String to Expand (PSTRING)
|
||||||
* Out:
|
* Out:
|
||||||
* A = hMem to Expanded String (PSTRING)
|
* A = hMem to Expanded String (PSTRING)
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
S.ExpandPStr >PULLW R.AX
|
|
||||||
bra S.ExpandPStr2
|
|
||||||
S.ExpandPStrA jsr S.GetMemPtrA
|
S.ExpandPStrA jsr S.GetMemPtrA
|
||||||
>STYA R.AX
|
S.ExpandPStrYA >STYA R.AX
|
||||||
S.ExpandPStr2 stz TmpBuffer256 init Expanded String len=0
|
stz TmpBuffer256 init Expanded String len=0
|
||||||
stz R.BL reset "in var"
|
stz R.BL reset "in var"
|
||||||
ldy #0
|
ldy #0
|
||||||
.1 iny
|
.1 iny
|
||||||
|
@ -65,7 +57,7 @@ S.ExpandPStr2 stz TmpBuffer256 init Expanded String len=0
|
||||||
pha Get back ENVNAME hMem
|
pha Get back ENVNAME hMem
|
||||||
>PUSHA
|
>PUSHA
|
||||||
ldy #S.PS.hENV
|
ldy #S.PS.hENV
|
||||||
lda (TSKMGR.TSKPTR),y
|
lda (pPs),y
|
||||||
>PUSHA
|
>PUSHA
|
||||||
jsr S.GetEnvVarH
|
jsr S.GetEnvVarH
|
||||||
bcs .5
|
bcs .5
|
||||||
|
@ -98,8 +90,8 @@ S.ExpandPStr2 stz TmpBuffer256 init Expanded String len=0
|
||||||
cmp (R.AX) last char?
|
cmp (R.AX) last char?
|
||||||
beq .81
|
beq .81
|
||||||
jmp .1
|
jmp .1
|
||||||
.81 >PUSHWI TmpBuffer256
|
.81 >LDYAI TmpBuffer256
|
||||||
jsr S.NewPStr
|
jsr S.NewPStrYA
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* S.CreateEnv
|
* S.CreateEnv
|
||||||
|
@ -118,7 +110,7 @@ S.CreateEnv >PUSHWI K.ENV.SIZE get a buffer for ENV
|
||||||
clc
|
clc
|
||||||
.9 rts
|
.9 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* S.DupEnvA2
|
* S.DupEnvA
|
||||||
* In:
|
* In:
|
||||||
* A = ENV hMem To Duplicate
|
* A = ENV hMem To Duplicate
|
||||||
* Out:
|
* Out:
|
||||||
|
@ -128,8 +120,7 @@ S.DupEnvA pha
|
||||||
jsr S.GetMemPtrA
|
jsr S.GetMemPtrA
|
||||||
>STYA ZPQuickPtr1
|
>STYA ZPQuickPtr1
|
||||||
pla
|
pla
|
||||||
jsr S.GetMemLenA
|
>PUSHWI K.ENV.SIZE
|
||||||
>PUSHYA
|
|
||||||
>PUSHBI 0
|
>PUSHBI 0
|
||||||
jsr S.GetMem
|
jsr S.GetMem
|
||||||
bcs .9
|
bcs .9
|
||||||
|
@ -401,6 +392,24 @@ S.SelectEnv
|
||||||
.9 sec
|
.9 sec
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
S.PrintSysEnv ldy #S.PS.hENV
|
||||||
|
lda TskMgr.Table,y Get PS #0 ENV
|
||||||
|
jsr S.GetMemPtrA
|
||||||
|
>STYA R.AX
|
||||||
|
.1 lda (R.AX)
|
||||||
|
beq .8 Ending 0 ?
|
||||||
|
>LDYA R.AX
|
||||||
|
jsr S.SysScrPPSTRYA
|
||||||
|
jsr S.SysScrCROUT
|
||||||
|
lda R.AL
|
||||||
|
sec
|
||||||
|
adc (R.AX) Add len+1 to PTR
|
||||||
|
sta R.AL
|
||||||
|
bcc .1
|
||||||
|
inc R.AH
|
||||||
|
bra .1
|
||||||
|
.8 rts
|
||||||
|
*--------------------------------------
|
||||||
MAN
|
MAN
|
||||||
SAVE SYS/KERNEL.S.ENV
|
SAVE SYS/KERNEL.S.ENV
|
||||||
LOAD SYS/KERNEL.S
|
LOAD SYS/KERNEL.S
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /A2OSX.BUILD
|
PREFIX /A2OSX.SRC
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
@ -17,17 +17,18 @@ S.EvtMgrInit stz EVTMGR.PENDING
|
||||||
* OUT :
|
* OUT :
|
||||||
* CS = no event, A = ERROR
|
* CS = no event, A = ERROR
|
||||||
* CC * event in YA
|
* CC * event in YA
|
||||||
* (EVTMGR.EVTPTR)
|
* (pEvent)
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
S.GetEvent lda EVTMGR.PENDING Get Pending EVENT hMem if any
|
S.GetEvent lda EVTMGR.PENDING Get Pending EVENT hMem if any
|
||||||
beq .1
|
beq .1
|
||||||
jsr S.GetMemPtrA
|
jsr S.GetMemPtrA
|
||||||
>STYA EVTMGR.EVTPTR
|
>STYA pEvent
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.1 jsr S.CreateEvent
|
.1 jsr S.CreateEvent
|
||||||
bcs .9
|
bcs .9
|
||||||
stx EVTMGR.PENDING
|
|
||||||
jsr S.GetSysEvent
|
jsr S.GetSysEvent
|
||||||
bcc .9 got SYS event
|
bcc .9 got SYS event
|
||||||
jsr S.GetDevEvent
|
jsr S.GetDevEvent
|
||||||
|
@ -39,12 +40,12 @@ S.GetEvent lda EVTMGR.PENDING Get Pending EVENT hMem if any
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
S.GetSysEvent lda VBL get VLINE status
|
S.GetSysEvent lda VBL get VLINE status
|
||||||
eor EVTMGR.VBLSTATE
|
eor EVTMGR.VBLSTATE
|
||||||
bpl .2 no change
|
bpl .9 no change
|
||||||
|
|
||||||
sta EVTMGR.VBLSTATE save new
|
sta EVTMGR.VBLSTATE save new
|
||||||
|
|
||||||
dec EVTMGR.FRAMECNT
|
dec EVTMGR.FRAMECNT
|
||||||
bne .2
|
bne .9
|
||||||
lda #K.TIMER16RESOLUTION
|
lda #K.TIMER16RESOLUTION
|
||||||
sta EVTMGR.FRAMECNT
|
sta EVTMGR.FRAMECNT
|
||||||
|
|
||||||
|
@ -53,97 +54,26 @@ S.GetSysEvent lda VBL get VLINE status
|
||||||
inc A2osX.TIMER16+1
|
inc A2osX.TIMER16+1
|
||||||
|
|
||||||
.1 lda #S.EVT.F.TIMER
|
.1 lda #S.EVT.F.TIMER
|
||||||
sta (EVTMGR.EVTPTR)
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
|
|
||||||
.2 lda KBD
|
.8 sta (pEvent)
|
||||||
bpl .9
|
clc
|
||||||
and #$7F
|
|
||||||
sta KBDSTROBE
|
|
||||||
ldy #S.EVT.DATA
|
|
||||||
sta (EVTMGR.EVTPTR),y
|
|
||||||
iny
|
|
||||||
lda OPENAPPLE
|
|
||||||
asl
|
|
||||||
lda SOLIDAPPLE
|
|
||||||
ror
|
|
||||||
and #$C0
|
|
||||||
sta (EVTMGR.EVTPTR),y
|
|
||||||
lda #S.EVT.F.KEY
|
|
||||||
sta (EVTMGR.EVTPTR)
|
|
||||||
ldy #S.EVT.hDEV
|
|
||||||
lda #1 Source dev = KBD
|
|
||||||
sta (EVTMGR.EVTPTR),y
|
|
||||||
clc
|
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.9 inc A2osX.RANDOM16
|
.9 lda #0 error code=0
|
||||||
bne .99
|
|
||||||
inc A2osX.RANDOM16+1
|
|
||||||
.99 lda #0 error code=0
|
|
||||||
sec no event
|
sec no event
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
S.GetDevEvent >LDYAI DEVMGR.TABLE
|
|
||||||
>STYA DEVMGR.DEVPTR
|
|
||||||
ldx #K.DEV.MAX
|
|
||||||
.1 lda (DEVMGR.DEVPTR) get S.DEV.F
|
|
||||||
bpl .3 empty ?
|
|
||||||
and #S.DEV.F.EVENT
|
|
||||||
beq .3 EVENT enabled ?
|
|
||||||
ldy #S.DEV.ID
|
|
||||||
lda (DEVMGR.DEVPTR),y
|
|
||||||
ldy #S.EVT.hDEV
|
|
||||||
sta (EVTMGR.EVTPTR),y
|
|
||||||
ldy #S.DEV.hCS
|
|
||||||
lda (DEVMGR.DEVPTR),y
|
|
||||||
jsr S.GetMemPtrA
|
|
||||||
>STYA Kernel.JMP
|
|
||||||
|
|
||||||
phx
|
|
||||||
>PUSHW EVTMGR.EVTPTR
|
|
||||||
ldx #DEVMGR.GETEVENT
|
|
||||||
|
|
||||||
jsr Kernel.DRVCALL Call DRV GetEvent function
|
|
||||||
|
|
||||||
plx
|
|
||||||
bcc .9 Got An Event
|
|
||||||
|
|
||||||
.3 lda DEVMGR.DEVPTR
|
|
||||||
clc
|
|
||||||
adc #S.DEV.SIZE
|
|
||||||
sta DEVMGR.DEVPTR
|
|
||||||
bcc .4
|
|
||||||
inc DEVMGR.DEVPTR+1
|
|
||||||
.4 dex
|
|
||||||
bne .1
|
|
||||||
lda #0 error code=0
|
|
||||||
sec no event
|
|
||||||
.9 rts
|
|
||||||
*--------------------------------------
|
|
||||||
* S.CreateEvent
|
* S.CreateEvent
|
||||||
* OUT :
|
* OUT :
|
||||||
* X = hMem
|
* X = hMem
|
||||||
* Y,A = PTR to EVENT
|
* Y,A = PTR to EVENT
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
S.CreateEvent >PUSHWI S.EVT.SIZE
|
S.CreateEvent >PUSHWI S.EVT.SIZE
|
||||||
>PUSHBI 0
|
>PUSHBI S.MEM.F.INIT0
|
||||||
jsr S.GetMem
|
jsr S.GetMem
|
||||||
bcs .9
|
bcs .9
|
||||||
>STYA EVTMGR.EVTPTR
|
>STYA pEvent
|
||||||
lda #0
|
stx EVTMGR.PENDING
|
||||||
ldy #S.EVT.SIZE-1
|
|
||||||
.1 sta (EVTMGR.EVTPTR),y
|
|
||||||
dey
|
|
||||||
bpl .1
|
|
||||||
clc
|
|
||||||
.9 rts
|
|
||||||
*--------------------------------------
|
|
||||||
S.DestroyEvent lda EVTMGR.PENDING
|
|
||||||
beq .9
|
|
||||||
jsr S.DestroyEventA
|
|
||||||
stz EVTMGR.PENDING
|
|
||||||
.9 rts
|
.9 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* S.DestroyEvent
|
* S.DestroyEvent
|
||||||
|
@ -151,24 +81,29 @@ S.DestroyEvent lda EVTMGR.PENDING
|
||||||
* A = Event hMem
|
* A = Event hMem
|
||||||
* OUT :
|
* OUT :
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
S.DestroyEventA pha
|
S.DestroyEvent lda EVTMGR.PENDING
|
||||||
jsr S.GetMemPtrA
|
beq .9
|
||||||
>STYA EVTMGR.EVTPTR
|
|
||||||
lda (EVTMGR.EVTPTR)
|
lda (pEvent)
|
||||||
and #S.EVT.F.hMEM1
|
and #S.EVT.F.hMEM1
|
||||||
beq .1
|
beq .1
|
||||||
|
|
||||||
ldy #S.EVT.DATALO
|
ldy #S.EVT.DATALO
|
||||||
lda (EVTMGR.EVTPTR),y
|
lda (pEvent),y
|
||||||
jsr S.FreeMemA
|
jsr S.FreeMemA
|
||||||
.1 lda (EVTMGR.EVTPTR)
|
|
||||||
|
.1 lda (pEvent)
|
||||||
and #S.EVT.F.hMEM2
|
and #S.EVT.F.hMEM2
|
||||||
beq .2
|
beq .2
|
||||||
|
|
||||||
ldy #S.EVT.DATAHI
|
ldy #S.EVT.DATAHI
|
||||||
lda (EVTMGR.EVTPTR),y
|
lda (pEvent),y
|
||||||
jsr S.FreeMemA
|
jsr S.FreeMemA
|
||||||
.2 pla
|
|
||||||
|
.2 lda EVTMGR.PENDING
|
||||||
jsr S.FreeMemA
|
jsr S.FreeMemA
|
||||||
rts
|
stz EVTMGR.PENDING
|
||||||
|
.9 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
EVTMGR.VBLSTATE .BS 1
|
EVTMGR.VBLSTATE .BS 1
|
||||||
EVTMGR.FRAMECNT .BS 1
|
EVTMGR.FRAMECNT .BS 1
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /A2OSX.BUILD
|
PREFIX /A2OSX.SRC
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
@ -9,7 +9,7 @@ AUTO 6
|
||||||
* PUBLIC
|
* PUBLIC
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
S.CheckPrefixA jsr S.GetMemPtrA
|
S.CheckPrefixA jsr S.GetMemPtrA
|
||||||
S.CheckPrefix >STYA MLICALL.PARAMS+1
|
S.CheckPrefixYA >STYA MLICALL.PARAMS+1
|
||||||
>STYA ZPQuickPtr1
|
>STYA ZPQuickPtr1
|
||||||
lda (ZPQuickPtr1)
|
lda (ZPQuickPtr1)
|
||||||
beq .98
|
beq .98
|
||||||
|
@ -20,7 +20,7 @@ S.CheckPrefix >STYA MLICALL.PARAMS+1
|
||||||
bne .98
|
bne .98
|
||||||
cpx #1 "/" allowed for listing online volumes
|
cpx #1 "/" allowed for listing online volumes
|
||||||
beq .8
|
beq .8
|
||||||
>KMLICALL MLIGETFILEINFO
|
>MLICALL MLIGETFILEINFO
|
||||||
bcs .98 No, invalid path...
|
bcs .98 No, invalid path...
|
||||||
lda MLICALL.PARAMS+4 Check file type
|
lda MLICALL.PARAMS+4 Check file type
|
||||||
cmp #$0F Directory?
|
cmp #$0F Directory?
|
||||||
|
@ -46,37 +46,46 @@ S.FileSearch >PULLA Get Search path
|
||||||
pla
|
pla
|
||||||
sec
|
sec
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.10 sta R.BL Store Expanded path list to search
|
.10 sta R.BL Store Expanded path list to search
|
||||||
>PULLB R.AH Store Filename
|
>PULLB R.AH Store Filename
|
||||||
lda #1
|
lda #1
|
||||||
sta R.BH Start At Token 1
|
sta R.BH Start At Token 1
|
||||||
|
|
||||||
.1 >PUSHB R.BL push expanded path list
|
.1 >PUSHB R.BL push expanded path list
|
||||||
>PUSHBI $3B Push SEP=';'
|
>PUSHBI $3B Push SEP=';'
|
||||||
>PUSHB R.BH Push Token IDX
|
>PUSHB R.BH Push Token IDX
|
||||||
jsr S.PStrGetTkn Get R.BL token in A
|
jsr S.PStrGetTkn Get R.BL token in A
|
||||||
bcs .98
|
bcs .98
|
||||||
|
|
||||||
sta R.CL Store Token path
|
sta R.CL Store Token path
|
||||||
>PUSHB R.AH push filename
|
>PUSHB R.AH push filename
|
||||||
>PUSHB R.CL Push Token path
|
>PUSHB R.CL Push Token path
|
||||||
jsr S.PStrCat
|
jsr S.PStrCat
|
||||||
bcs .97
|
bcs .97
|
||||||
|
|
||||||
sta R.CH Store Full path (Token Path+filename)
|
sta R.CH Store Full path (Token Path+filename)
|
||||||
jsr S.MLIGetFileInfoA
|
jsr S.MLIGetFileInfoA
|
||||||
bcc .8
|
bcc .8
|
||||||
|
|
||||||
lda R.CH Discard this Full Path
|
lda R.CH Discard this Full Path
|
||||||
jsr S.FreeMemA
|
jsr S.FreeMemA
|
||||||
lda R.CL Discard Token path
|
lda R.CL Discard Token path
|
||||||
jsr S.FreeMemA
|
jsr S.FreeMemA
|
||||||
inc R.BH Try next Token
|
inc R.BH Try next Token
|
||||||
bne .1
|
bne .1
|
||||||
|
|
||||||
beq .98 go to discard Expanded path list
|
beq .98 go to discard Expanded path list
|
||||||
|
|
||||||
.97 lda R.CL Discard Token path
|
.97 lda R.CL Discard Token path
|
||||||
jsr S.FreeMemA
|
jsr S.FreeMemA
|
||||||
|
|
||||||
.98 lda R.BL Discard Expanded Path list
|
.98 lda R.BL Discard Expanded Path list
|
||||||
jsr S.FreeMemA
|
jsr S.FreeMemA
|
||||||
lda #SYSMGR.ERRFNF
|
lda #SYSMGR.ERRFNF
|
||||||
sec
|
sec
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.8 jsr .97 Dicard all except Full Path
|
.8 jsr .97 Dicard all except Full Path
|
||||||
lda R.CH
|
lda R.CH
|
||||||
clc
|
clc
|
||||||
|
@ -91,20 +100,24 @@ S.FileSearch >PULLA Get Search path
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
S.LoadFileA jsr S.MLIOpenA
|
S.LoadFileA jsr S.MLIOpenA
|
||||||
bcs .99
|
bcs .99
|
||||||
|
|
||||||
sta R.AL save ref_num
|
sta R.AL save ref_num
|
||||||
stx R.AH save Prodos Buffer for freemem
|
stx R.AH save Prodos Buffer for freemem
|
||||||
jsr S.MLIGetEOFA
|
jsr S.MLIGetEOFA
|
||||||
bcs .98
|
bcs .98
|
||||||
|
|
||||||
phx Larger than 64k?
|
phx Larger than 64k?
|
||||||
plx
|
plx
|
||||||
beq .1 File too big!!!!
|
beq .1 File too big!!!!
|
||||||
lda #SYSMGR.ERRFTB
|
lda #SYSMGR.ERRFTB
|
||||||
bra .98
|
bra .98
|
||||||
|
|
||||||
.1 >STYA R.BX save Length
|
.1 >STYA R.BX save Length
|
||||||
>PUSHYA Push Length for S.GetMem
|
>PUSHYA Push Length for S.GetMem
|
||||||
>PUSHBI 0
|
>PUSHBI 0
|
||||||
jsr S.GetMem
|
jsr S.GetMem
|
||||||
bcs .98
|
bcs .98
|
||||||
|
|
||||||
>STYA R.CX
|
>STYA R.CX
|
||||||
stx R.DL save Segment hMem
|
stx R.DL save Segment hMem
|
||||||
>PUSHW R.BX Push Length for S.ReadFile
|
>PUSHW R.BX Push Length for S.ReadFile
|
||||||
|
@ -112,24 +125,29 @@ S.LoadFileA jsr S.MLIOpenA
|
||||||
>PUSHB R.AL Push ref_num
|
>PUSHB R.AL Push ref_num
|
||||||
jsr S.MLIRead
|
jsr S.MLIRead
|
||||||
bcs .97
|
bcs .97
|
||||||
|
|
||||||
lda R.AL
|
lda R.AL
|
||||||
jsr S.MLICloseA
|
jsr S.MLICloseA
|
||||||
|
|
||||||
lda R.AH
|
lda R.AH
|
||||||
jsr S.FreeMemA Discard ProDOS IO Buffer
|
jsr S.FreeMemA Discard ProDOS IO Buffer
|
||||||
>LDYA R.BX Return File Length...
|
>LDYA R.BX Return File Length...
|
||||||
ldx R.DL ...and hMem to Caller
|
ldx R.DL ...and hMem to Caller
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.97 pha
|
.97 pha
|
||||||
lda R.DL
|
lda R.DL
|
||||||
jsr S.FreeMemA freemem because of failed load
|
jsr S.FreeMemA freemem because of failed load
|
||||||
pla
|
pla
|
||||||
|
|
||||||
.98 pha
|
.98 pha
|
||||||
lda R.AL
|
lda R.AL
|
||||||
jsr S.MLICloseA
|
jsr S.MLICloseA
|
||||||
lda R.AH
|
lda R.AH
|
||||||
jsr S.FreeMemA ProDOS IO Buffer
|
jsr S.FreeMemA ProDOS IO Buffer
|
||||||
pla
|
pla
|
||||||
|
|
||||||
.99 sec
|
.99 sec
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
@ -143,7 +161,7 @@ S.ListDirInitA sta R.AL
|
||||||
stz TmpFileName Reset File.Pattern
|
stz TmpFileName Reset File.Pattern
|
||||||
jsr S.GetMemPtrA
|
jsr S.GetMemPtrA
|
||||||
>STYA R.BX Store path
|
>STYA R.BX Store path
|
||||||
jsr S.CheckPrefix is it a existing directory?
|
jsr S.CheckPrefixYA is it a existing directory?
|
||||||
bcc .4 yes, continue with empty pattern
|
bcc .4 yes, continue with empty pattern
|
||||||
|
|
||||||
lda (R.BX) no, get pattern at end of full path
|
lda (R.BX) no, get pattern at end of full path
|
||||||
|
@ -174,13 +192,11 @@ S.ListDirInitA sta R.AL
|
||||||
sta (R.BX) remove pattern from path
|
sta (R.BX) remove pattern from path
|
||||||
|
|
||||||
.4 >PUSHWI S.LISTDIR.SIZE get LISTDIR Struct
|
.4 >PUSHWI S.LISTDIR.SIZE get LISTDIR Struct
|
||||||
>PUSHBI 0
|
>PUSHBI S.MEM.F.INIT0 reset all bytes
|
||||||
jsr S.GetMem
|
jsr S.GetMem
|
||||||
bcs .99
|
bcs .99
|
||||||
stx R.AH
|
stx R.AH
|
||||||
>STYA R.CX Store LISTDIR Struct
|
>STYA R.CX Store LISTDIR Struct
|
||||||
txa
|
|
||||||
jsr S.ClrMemA reset all bytes
|
|
||||||
|
|
||||||
ldy TmpFileName
|
ldy TmpFileName
|
||||||
beq .5
|
beq .5
|
||||||
|
@ -233,8 +249,10 @@ S.ListDirInitAV >PUSHWI 256
|
||||||
jsr S.MLIOnline
|
jsr S.MLIOnline
|
||||||
bcs .98
|
bcs .98
|
||||||
ldy #S.LISTDIR.ONLINEPTR
|
ldy #S.LISTDIR.ONLINEPTR
|
||||||
lda #0 make index point first Entry
|
|
||||||
sta (R.CX),y
|
* lda #0 make index point first Entry
|
||||||
|
* sta (R.CX),y
|
||||||
|
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
.98 lda (R.CX)
|
.98 lda (R.CX)
|
||||||
|
@ -242,10 +260,12 @@ S.ListDirInitAV >PUSHWI 256
|
||||||
.99 sec
|
.99 sec
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
S.ListDirInitAD lda #0
|
S.ListDirInitAD
|
||||||
sta (R.CX) reset hONLINE
|
* lda #0
|
||||||
|
* sta (R.CX) reset hONLINE
|
||||||
|
|
||||||
>LDYA R.BX Open DIR
|
>LDYA R.BX Open DIR
|
||||||
jsr S.MLIOpen
|
jsr S.MLIOpenYA
|
||||||
bcs .99
|
bcs .99
|
||||||
ldy #S.LISTDIR.REFNUM
|
ldy #S.LISTDIR.REFNUM
|
||||||
sta (R.CX),y save ref_num
|
sta (R.CX),y save ref_num
|
||||||
|
@ -284,10 +304,11 @@ S.ListDirInitAD lda #0
|
||||||
ldy #S.LISTDIR.FC+1
|
ldy #S.LISTDIR.FC+1
|
||||||
sta (R.CX),y
|
sta (R.CX),y
|
||||||
|
|
||||||
ldy #S.LISTDIR.FI
|
* ldy #S.LISTDIR.FI
|
||||||
sta (R.CX),y
|
* lda #0
|
||||||
iny
|
* sta (R.CX),y
|
||||||
sta (R.CX),y set FI to $0000
|
* iny
|
||||||
|
* sta (R.CX),y set FI to $0000
|
||||||
clc
|
clc
|
||||||
.99 rts
|
.99 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
@ -393,7 +414,7 @@ S.ListDirNextAD stz R.DL Reset Return Record hMem
|
||||||
|
|
||||||
lda (R.AX) Is is a deleted file ? (storage_type=0)
|
lda (R.AX) Is is a deleted file ? (storage_type=0)
|
||||||
and #$F0
|
and #$F0
|
||||||
beq .40
|
beq .5
|
||||||
|
|
||||||
cmp #$F0 Volume header ?
|
cmp #$F0 Volume header ?
|
||||||
beq .30 yes, do not filter
|
beq .30 yes, do not filter
|
||||||
|
@ -403,8 +424,9 @@ S.ListDirNextAD stz R.DL Reset Return Record hMem
|
||||||
ldy #S.LISTDIR.hPATTERN any filter ?
|
ldy #S.LISTDIR.hPATTERN any filter ?
|
||||||
lda (R.CX),y
|
lda (R.CX),y
|
||||||
beq .30
|
beq .30
|
||||||
|
|
||||||
jsr S.GetMemPtrA
|
jsr S.GetMemPtrA
|
||||||
>PUSHYA push Filter hMem
|
>PUSHYA push Filter PTR
|
||||||
|
|
||||||
lda (R.AX)
|
lda (R.AX)
|
||||||
and #$0F
|
and #$0F
|
||||||
|
@ -415,9 +437,9 @@ S.ListDirNextAD stz R.DL Reset Return Record hMem
|
||||||
dey
|
dey
|
||||||
bne .31
|
bne .31
|
||||||
|
|
||||||
>PUSHWI TmpFileName push Filename
|
>PUSHWI TmpFileName push Filename PTR
|
||||||
jsr S.PStrMatchP
|
jsr S.PStrMatchP
|
||||||
bcs .40 no match
|
bcs .5 no match
|
||||||
|
|
||||||
.30 ldy #S.LISTDIR.EL Get Entry length
|
.30 ldy #S.LISTDIR.EL Get Entry length
|
||||||
lda (R.CX),y
|
lda (R.CX),y
|
||||||
|
@ -439,23 +461,23 @@ S.ListDirNextAD stz R.DL Reset Return Record hMem
|
||||||
dey
|
dey
|
||||||
bpl .4
|
bpl .4
|
||||||
|
|
||||||
.40 ldy #S.LISTDIR.EIB Set ENTRY INDEX IN BLOCK +=1
|
.5 ldy #S.LISTDIR.EIB Set ENTRY INDEX IN BLOCK +=1
|
||||||
lda (R.CX),y
|
lda (R.CX),y
|
||||||
inc
|
inc
|
||||||
sta (R.CX),y
|
sta (R.CX),y
|
||||||
|
|
||||||
ldy #S.LISTDIR.EL Set BLOCK PTR +=entry_length
|
ldy #S.LISTDIR.EL Set BLOCK PTR +=entry_length
|
||||||
lda (R.CX),y
|
lda (R.CX),y
|
||||||
ldy #S.LISTDIR.BLKPTR
|
ldy #S.LISTDIR.BLKPTR
|
||||||
clc
|
clc
|
||||||
adc (R.CX),y
|
adc (R.CX),y
|
||||||
sta (R.CX),y
|
sta (R.CX),y
|
||||||
bcc .5
|
|
||||||
iny
|
iny
|
||||||
lda (R.CX),y
|
lda (R.CX),y
|
||||||
inc
|
adc #0
|
||||||
sta (R.CX),y
|
sta (R.CX),y
|
||||||
|
|
||||||
.5 lda (R.AX)
|
lda (R.AX)
|
||||||
and #$E0 is storage_type = $F or $E ?
|
and #$E0 is storage_type = $F or $E ?
|
||||||
cmp #$E0 yes, do NOT increase FI
|
cmp #$E0 yes, do NOT increase FI
|
||||||
bne .6
|
bne .6
|
||||||
|
@ -503,7 +525,8 @@ S.ListDirCloseA pha
|
||||||
beq .3
|
beq .3
|
||||||
jsr S.FreeMemA
|
jsr S.FreeMemA
|
||||||
|
|
||||||
.3 lda (ZPQuickPtr1) Online buffer
|
.3 ldy #S.LISTDIR.hONLINE
|
||||||
|
lda (ZPQuickPtr1),y
|
||||||
beq .4
|
beq .4
|
||||||
jsr S.FreeMemA
|
jsr S.FreeMemA
|
||||||
|
|
||||||
|
@ -535,7 +558,7 @@ S.ListDirReadBlock
|
||||||
>STYA MLICALL.PARAMS+2
|
>STYA MLICALL.PARAMS+2
|
||||||
>LDYAI 512
|
>LDYAI 512
|
||||||
>STYA MLICALL.PARAMS+4
|
>STYA MLICALL.PARAMS+4
|
||||||
>KMLICALL MLIREAD
|
>MLICALL MLIREAD
|
||||||
bcs .9
|
bcs .9
|
||||||
ldy #S.LISTDIR.BLKPTR set BLKPTR to $0004
|
ldy #S.LISTDIR.BLKPTR set BLKPTR to $0004
|
||||||
lda #4
|
lda #4
|
||||||
|
|
115
SYS/KERNEL.S.LIB.txt
Normal file
115
SYS/KERNEL.S.LIB.txt
Normal file
|
@ -0,0 +1,115 @@
|
||||||
|
PR#3
|
||||||
|
PREFIX /A2OSX.SRC
|
||||||
|
NEW
|
||||||
|
INC 1
|
||||||
|
AUTO 6
|
||||||
|
.LIST OFF
|
||||||
|
.OP 65C02
|
||||||
|
*--------------------------------------
|
||||||
|
* S.LoadLibYA
|
||||||
|
* in :
|
||||||
|
* Y,A = PTR To Lib Name
|
||||||
|
* out :
|
||||||
|
* A = hMem To loaded LIB
|
||||||
|
*--------------------------------------
|
||||||
|
S.LoadLibYA jsr S.NewPStrYA
|
||||||
|
bcs .99
|
||||||
|
|
||||||
|
sta S.LoadLibYA.hLibName save LibName hMem for discard
|
||||||
|
jsr S.LoadLibA
|
||||||
|
|
||||||
|
php save error status
|
||||||
|
|
||||||
|
pha save error code/hMem
|
||||||
|
lda S.LoadLibYA.hLibName
|
||||||
|
jsr S.FreeMemA discard STR hMem
|
||||||
|
pla get back error code/hMem
|
||||||
|
plp ..and error status
|
||||||
|
.99 rts
|
||||||
|
S.LoadLibYA.hLibName .BS 1
|
||||||
|
*--------------------------------------
|
||||||
|
* S.LoadLibA
|
||||||
|
* in :
|
||||||
|
* A = hMem To Lib Name
|
||||||
|
* out :
|
||||||
|
* A = hMem of Loaded Lib
|
||||||
|
*--------------------------------------
|
||||||
|
S.LoadLibA >PUSHA push libname for S.FileSearch
|
||||||
|
>LDYAI MSG.LOADLIB
|
||||||
|
jsr S.SysScrPPSTRYA
|
||||||
|
>PUSHWI ENV.LIB push ENVNAME=LIB
|
||||||
|
ldy #S.PS.hENV
|
||||||
|
lda (pPs),y
|
||||||
|
>PUSHA
|
||||||
|
jsr S.GetEnvVarP get value for ENV=LIB
|
||||||
|
bcs .99
|
||||||
|
pha save hMem to LIB VALUE
|
||||||
|
>PUSHA Push %LIB% VALUE
|
||||||
|
jsr S.FileSearch find libname in %LIB%
|
||||||
|
bcs .98
|
||||||
|
pha save hMem to LIB full path
|
||||||
|
jsr S.SysScrPPSTRA
|
||||||
|
pla
|
||||||
|
pha
|
||||||
|
jsr S.LoadBinA A = hMem of filename full path
|
||||||
|
bcs .97
|
||||||
|
phx
|
||||||
|
>STYA pLib
|
||||||
|
|
||||||
|
ldx #LIBMGR.LOAD
|
||||||
|
jsr pLibJmp Call LIB.LOAD function
|
||||||
|
|
||||||
|
bcs .97
|
||||||
|
|
||||||
|
plx
|
||||||
|
pla discard LIB PATH
|
||||||
|
jsr S.FreeMemA
|
||||||
|
pla discard LIB VALUE
|
||||||
|
jsr S.FreeMemA
|
||||||
|
txa
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
|
||||||
|
.97 pla discard LIB PATH
|
||||||
|
jsr S.FreeMemA
|
||||||
|
.98 pla discard LIB VALUE
|
||||||
|
jsr S.FreeMemA
|
||||||
|
sec
|
||||||
|
.99 rts
|
||||||
|
*--------------------------------------
|
||||||
|
* S.UnloadLibA
|
||||||
|
* in :
|
||||||
|
* A = hMem To Lib
|
||||||
|
* out :
|
||||||
|
*--------------------------------------
|
||||||
|
S.UnloadLibA pha
|
||||||
|
jsr S.GetMemByIDA
|
||||||
|
>STYA ZPQuickPtr1
|
||||||
|
ldy #S.MEM.REFCNT
|
||||||
|
lda (ZPQuickPtr1),y Get count of those referencing this lib
|
||||||
|
dec only one left ?
|
||||||
|
beq .1
|
||||||
|
sta (ZPQuickPtr1),y
|
||||||
|
pla
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
|
||||||
|
.1 ldy #S.MEM.PTR
|
||||||
|
lda (ZPQuickPtr1),y
|
||||||
|
pha
|
||||||
|
iny
|
||||||
|
lda (ZPQuickPtr1),y
|
||||||
|
ply
|
||||||
|
>STYA pLib
|
||||||
|
|
||||||
|
ldx #LIBMGR.UNLOAD
|
||||||
|
jsr pLibJmp Call LIB.UNLOAD function
|
||||||
|
pla
|
||||||
|
jmp S.FreeMemA
|
||||||
|
*--------------------------------------
|
||||||
|
MSG.LOADLIB >PSTRING "\nLoadLib:"
|
||||||
|
*--------------------------------------
|
||||||
|
MAN
|
||||||
|
SAVE SYS/KERNEL.S.LIB
|
||||||
|
LOAD SYS/KERNEL.S
|
||||||
|
ASM
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /A2OSX.BUILD
|
PREFIX /A2OSX.SRC
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
@ -9,48 +9,46 @@ AUTO 6
|
||||||
* !!!!!!!! DO NOT USE VCPU16 !!!!!!!!
|
* !!!!!!!! DO NOT USE VCPU16 !!!!!!!!
|
||||||
* !!!!!! DO NOT USE ZPQuickPTRs !!!!!
|
* !!!!!! DO NOT USE ZPQuickPTRs !!!!!
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
ZPMemMgrReqS .EQ ZPMemMgr store requested Size
|
ZPMemMgrSPtr .EQ ZPMemMgr Pointer To Slot selected
|
||||||
ZPMemMgrReqF .EQ ZPMemMgr+2 store requested Flags
|
ZPMemMgrTmp1 .EQ ZPMemMgr+2
|
||||||
ZPMemMgrSPtr .EQ ZPMemMgr+6 Pointer To Slot selected
|
ZPMemMgrTmp2 .EQ ZPMemMgr+4
|
||||||
ZPMemMgrTmp1 .EQ ZPMemMgr+8
|
ZPMemMgrTmp3 .EQ ZPMemMgr+6
|
||||||
ZPMemMgrTmp2 .EQ ZPMemMgr+10
|
|
||||||
ZPMemMgrTmp3 .EQ ZPMemMgr+12
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* TODO :
|
* TODO :
|
||||||
* - Create a 256 bytes table in SLOT #0
|
* - Create a 256 bytes table
|
||||||
* (eh, mem.ID=0 always used! useful to test if hMem=0)
|
|
||||||
* mapping hMem's to real memory blocks to help
|
* mapping hMem's to real memory blocks to help
|
||||||
* Garbage collector move blocks
|
* Garbage collector move blocks
|
||||||
|
* - mem.ID=0 always used! useful to test if hMem=0
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
S.MemMgrInit stz MEMMGR.MHLIMIT
|
S.MemMgrInit >LDYAI MemMgr.MHiMem
|
||||||
stz MEMMGR.HIMEM
|
>STYA MemMgr.HiMem
|
||||||
|
>STYA MemMgr.Free
|
||||||
|
|
||||||
ldx /MLI
|
>LDYAI MemMgr.MLoMem
|
||||||
dex Reserve $BE00 For Global Page
|
>STYA MemMgr.LoMem
|
||||||
stx MEMMGR.MHLIMIT+1
|
|
||||||
stx MEMMGR.HIMEM+1
|
|
||||||
|
|
||||||
>LDYAI A2osX.LOMEM
|
stz MemMgr.LastSlot Reserve Slot #0
|
||||||
>STYA MEMMGR.MLLIMIT
|
|
||||||
>STYA MEMMGR.LOMEM
|
sta SETREADAUX
|
||||||
stz MEMMGR.TABLESIZE Init Table Size to 0
|
sta SETWRITEAUX
|
||||||
* jsr S.UpdateMemStats Not needed, will be called by S.GetMem
|
|
||||||
>PUSHWI 256 get a 256 bytes buffer for Map Table, hMem=0
|
>LDYAI MemMgr.XHiMem
|
||||||
>PUSHBI 0
|
>STYA MemMgr.HiMem
|
||||||
jsr S.GetMem create it...
|
>STYA MemMgr.Free
|
||||||
|
|
||||||
|
>LDYAI MemMgr.XLoMem
|
||||||
|
>STYA MemMgr.LoMem
|
||||||
|
|
||||||
|
stz MemMgr.LastSlot Reserve Slot #0
|
||||||
|
|
||||||
|
sta CLRREADAUX
|
||||||
|
sta CLRWRITEAUX
|
||||||
|
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* PUBLIC
|
* PUBLIC
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
S.SetLowMemLimit
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
S.GarbageCollector
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
* S.GetMem
|
* S.GetMem
|
||||||
* In:
|
* In:
|
||||||
* PULLB = FLAGS
|
* PULLB = FLAGS
|
||||||
|
@ -60,58 +58,99 @@ S.GarbageCollector
|
||||||
* X = S.MEM.ID
|
* X = S.MEM.ID
|
||||||
* CS on err
|
* CS on err
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
S.GetMem >PULLB ZPMemMgrReqF store requested flags
|
S.GetMem >PULLB MemMgr.ReqFlags store requested flags
|
||||||
>PULLW ZPMemMgrReqS store requested size
|
and #S.MEM.F.AUX
|
||||||
lda ZPMemMgrReqS align REQS to 16 bytes
|
beq .11
|
||||||
|
|
||||||
|
sta SETREADAUX Aux Mem requested,switch to AUX
|
||||||
|
sta SETWRITEAUX
|
||||||
|
|
||||||
|
.11 >PULLW MemMgr.ReqSize Store requested size
|
||||||
|
lda MemMgr.ReqSize align REQS to 16 bytes
|
||||||
and #$0F
|
and #$0F
|
||||||
beq .10
|
beq .10
|
||||||
lda ZPMemMgrReqS
|
|
||||||
|
lda MemMgr.ReqSize
|
||||||
and #$F0
|
and #$F0
|
||||||
clc
|
clc
|
||||||
adc #$10
|
adc #$10
|
||||||
sta ZPMemMgrReqS
|
sta MemMgr.ReqSize
|
||||||
bcc .10
|
bcc .10
|
||||||
inc ZPMemMgrReqS+1
|
inc MemMgr.ReqSize+1
|
||||||
.10 ldx #0 init to SLOT #0 of MEMSLOT list
|
|
||||||
|
.10 >LDYAI MemMgr.Table
|
||||||
|
>STYA ZPMemMgrSPtr
|
||||||
|
|
||||||
|
ldx #0 Current slot=0
|
||||||
|
|
||||||
lda MEMMGR.TABLESIZE Check if some free slot to reuse first
|
lda MemMgr.LastSlot Check if some free slot to reuse first
|
||||||
beq .6
|
beq .41
|
||||||
.1 txa
|
|
||||||
jsr S.GetMemByIDA
|
sta MemMgr.SlotCnt
|
||||||
|
|
||||||
|
.1 inx move to next slot
|
||||||
|
jsr MemMgr.NextSlot
|
||||||
lda (ZPMemMgrSPtr) Get Flags
|
lda (ZPMemMgrSPtr) Get Flags
|
||||||
bmi .4 in use ?
|
bmi .4 in use ?
|
||||||
.2 lda ZPMemMgrReqF Found an empty slot
|
|
||||||
|
.2 lda MemMgr.ReqFlags Found an empty slot
|
||||||
and #S.MEM.F.ALIGN is request needs a page align ?
|
and #S.MEM.F.ALIGN is request needs a page align ?
|
||||||
beq .3
|
beq .3
|
||||||
|
|
||||||
ldy #S.MEM.PTR
|
ldy #S.MEM.PTR
|
||||||
lda (ZPMemMgrSPtr),y get LO of PTR
|
lda (ZPMemMgrSPtr),y get LO of PTR
|
||||||
bne .4 not page-aligned
|
bne .4 not page-aligned
|
||||||
|
|
||||||
.3 ldy #S.MEM.LEN
|
.3 ldy #S.MEM.LEN
|
||||||
lda (ZPMemMgrSPtr),y get LEN of this block
|
lda (ZPMemMgrSPtr),y get LEN of this block
|
||||||
cmp ZPMemMgrReqS compare with requested size
|
cmp MemMgr.ReqSize compare with requested size
|
||||||
bne .4
|
bne .4
|
||||||
|
|
||||||
iny
|
iny
|
||||||
lda (ZPMemMgrSPtr),y
|
lda (ZPMemMgrSPtr),y
|
||||||
cmp ZPMemMgrReqS+1
|
cmp MemMgr.ReqSize+1
|
||||||
beq .5 requested size matches slot size !!!
|
beq .7 requested size matches slot size !!!
|
||||||
.4 inx move to next slot
|
|
||||||
cpx MEMMGR.TABLESIZE last slot ?
|
.4 dec MemMgr.SlotCnt any other slot to check?
|
||||||
bne .1 check for another slot
|
bne .1 last one, create a new slot
|
||||||
beq .6 last one, create a new slot
|
*-------------- Create a New SLOT
|
||||||
|
.41 lda MemMgr.ReqFlags
|
||||||
|
and #S.MEM.F.ALIGN is request needs a page align ?
|
||||||
|
beq .6
|
||||||
|
|
||||||
|
lda MemMgr.Free target PTR will be page aligned ?
|
||||||
|
sec
|
||||||
|
sbc MemMgr.ReqSize
|
||||||
|
beq .6 yes, allocate
|
||||||
|
|
||||||
|
tay no, reserve a free slot to fill gap
|
||||||
|
lda #0
|
||||||
|
jsr MemMgr.AddSlot X = new slot
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
.6 >LDYA MemMgr.ReqSize
|
||||||
|
jsr MemMgr.AddSlot X = new slot
|
||||||
|
bcs .9
|
||||||
*-------------- Reuse this SLOT
|
*-------------- Reuse this SLOT
|
||||||
.5 lda ZPMemMgrReqF get requested flags
|
.7 lda MemMgr.ReqFlags get requested flags
|
||||||
ora #S.MEM.F.INUSE mark as in use
|
ora #S.MEM.F.INUSE mark as in use
|
||||||
sta (ZPMemMgrSPtr)
|
sta (ZPMemMgrSPtr)
|
||||||
|
|
||||||
lda #0
|
and #S.MEM.F.INIT0
|
||||||
|
beq .8
|
||||||
|
|
||||||
|
jsr MemMgr.Init0
|
||||||
|
|
||||||
|
.8 lda #0
|
||||||
ldy #S.MEM.BIN
|
ldy #S.MEM.BIN
|
||||||
sta (ZPMemMgrSPtr),y
|
sta (ZPMemMgrSPtr),y
|
||||||
inc Mark this slot used by one task
|
|
||||||
|
inc Mark this slot used by one process
|
||||||
ldy #S.MEM.REFCNT
|
ldy #S.MEM.REFCNT
|
||||||
sta (ZPMemMgrSPtr),y
|
sta (ZPMemMgrSPtr),y
|
||||||
|
|
||||||
ldy #S.PS.ID
|
ldy #S.PS.ID
|
||||||
lda (TSKMGR.TSKPTR),y
|
lda (pPs),y
|
||||||
ldy #S.MEM.OWNERPID
|
ldy #S.MEM.OWNERPID
|
||||||
sta (ZPMemMgrSPtr),y
|
sta (ZPMemMgrSPtr),y
|
||||||
|
|
||||||
|
@ -122,45 +161,112 @@ S.GetMem >PULLB ZPMemMgrReqF store requested flags
|
||||||
lda (ZPMemMgrSPtr),y A = HI PTR
|
lda (ZPMemMgrSPtr),y A = HI PTR
|
||||||
ply Y = LO PTR
|
ply Y = LO PTR
|
||||||
clc X = Current hMem
|
clc X = Current hMem
|
||||||
rts
|
|
||||||
*-------------- Create a New SLOT
|
|
||||||
.6 lda ZPMemMgrReqF
|
|
||||||
and #S.MEM.F.ALIGN is request needs a page align ?
|
|
||||||
beq .7
|
|
||||||
|
|
||||||
lda MEMMGR.MHLIMIT target PTR will be page aligned ?
|
.9 bit MemMgr.ReqFlags
|
||||||
|
bpl .99
|
||||||
|
|
||||||
|
sta CLRREADAUX
|
||||||
|
sta CLRWRITEAUX
|
||||||
|
|
||||||
|
.99 rts
|
||||||
|
*--------------------------------------
|
||||||
|
* MemMgr.AddSlot
|
||||||
|
* In:
|
||||||
|
* Y,A = Requested size
|
||||||
|
* Out:
|
||||||
|
*--------------------------------------
|
||||||
|
MemMgr.AddSlot >STYA ZPMemMgrTmp1 save req size
|
||||||
|
ldx MemMgr.LastSlot
|
||||||
|
inx
|
||||||
|
beq .99 > 255 ERR:OUT OF SLOT
|
||||||
|
|
||||||
|
lda MemMgr.Free Compute base PTR=FREE-REQ size
|
||||||
sec
|
sec
|
||||||
sbc ZPMemMgrReqS
|
sbc ZPMemMgrTmp1
|
||||||
beq .7 yes, allocate
|
sta ZPMemMgrTmp2 store new MemMgr.Free in ZPMemMgrTmp2
|
||||||
|
lda MemMgr.Free+1
|
||||||
|
sbc ZPMemMgrTmp1+1
|
||||||
|
sta ZPMemMgrTmp2+1
|
||||||
|
|
||||||
|
lda ZPMemMgrTmp2 ensure new MemMgr.Free is not lower
|
||||||
|
sec than LoMem
|
||||||
|
sbc MemMgr.LoMem
|
||||||
|
lda ZPMemMgrTmp2+1
|
||||||
|
sbc MemMgr.LoMem+1
|
||||||
|
bcc .98 ERR out of mem
|
||||||
|
|
||||||
|
jsr MemMgr.NextSlot
|
||||||
|
|
||||||
tay no, reserve a free slot to fill gap
|
ldy #S.MEM.PTR
|
||||||
lda #0
|
lda ZPMemMgrTmp2 get new MemMgr.Free
|
||||||
jsr S.AddSlot
|
sta MemMgr.Free set as system MemMgr.Free value
|
||||||
bcs .99
|
sta (ZPMemMgrSPtr),y store is as base address of new slot
|
||||||
|
iny
|
||||||
.7 >LDYA ZPMemMgrReqS
|
lda ZPMemMgrTmp2+1
|
||||||
jsr S.AddSlot
|
sta MemMgr.Free+1
|
||||||
bcs .99
|
|
||||||
phx Save hMem
|
|
||||||
>STYA ZPMemMgrTmp1
|
|
||||||
lda ZPMemMgrReqF
|
|
||||||
ora #S.MEM.F.INUSE
|
|
||||||
sta (ZPMemMgrSPtr) set Flags
|
|
||||||
|
|
||||||
lda #1
|
|
||||||
ldy #S.MEM.REFCNT Mark this slot referenced
|
|
||||||
sta (ZPMemMgrSPtr),y
|
sta (ZPMemMgrSPtr),y
|
||||||
ldy #S.PS.ID
|
|
||||||
lda (TSKMGR.TSKPTR),y
|
iny
|
||||||
ldy #S.MEM.OWNERPID
|
lda ZPMemMgrTmp1 get requested size
|
||||||
|
sta (ZPMemMgrSPtr),y setup slot LEN
|
||||||
|
iny
|
||||||
|
lda ZPMemMgrTmp1+1
|
||||||
sta (ZPMemMgrSPtr),y
|
sta (ZPMemMgrSPtr),y
|
||||||
jsr S.UpdateMemStats
|
|
||||||
>LDYA ZPMemMgrTmp1 Y,A = PTR
|
stx MemMgr.LastSlot mark this slot allocated
|
||||||
plx X = hMem
|
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
.99 sec
|
|
||||||
|
.98 lda #MemMgr.ERROOM
|
||||||
|
sec
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
.99 lda #MemMgr.ERROOH
|
||||||
|
sec
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
MemMgr.NextSlot lda ZPMemMgrSPtr
|
||||||
|
clc
|
||||||
|
adc #S.MEM.SIZE
|
||||||
|
sta ZPMemMgrSPtr
|
||||||
|
bcc .8
|
||||||
|
inc ZPMemMgrSPtr+1
|
||||||
|
.8 rts
|
||||||
|
*--------------------------------------
|
||||||
|
MemMgr.Init0 ldy #S.MEM.PTR
|
||||||
|
lda (ZPMemMgrSPtr),y ZPMemMgrSPtr already set
|
||||||
|
sta ZPMemMgrTmp1 set ZPMemMgrTmp1 to Mem Ptr
|
||||||
|
iny
|
||||||
|
lda (ZPMemMgrSPtr),y
|
||||||
|
sta ZPMemMgrTmp1+1
|
||||||
|
|
||||||
|
ldy #S.MEM.LEN
|
||||||
|
lda (ZPMemMgrSPtr),y
|
||||||
|
sta ZPMemMgrTmp2 set ZPMemMgrTmp2 to mem size
|
||||||
|
iny
|
||||||
|
lda (ZPMemMgrSPtr),y
|
||||||
|
sta ZPMemMgrTmp2+1
|
||||||
|
|
||||||
|
lda #0
|
||||||
|
|
||||||
|
.1 ldy ZPMemMgrTmp2
|
||||||
|
bne .2
|
||||||
|
ldy ZPMemMgrTmp2+1
|
||||||
|
beq .3
|
||||||
|
dec ZPMemMgrTmp2+1
|
||||||
|
.2 dec ZPMemMgrTmp2
|
||||||
|
|
||||||
|
sta (ZPMemMgrTmp1)
|
||||||
|
inc ZPMemMgrTmp1
|
||||||
|
bne .1
|
||||||
|
inc ZPMemMgrTmp1+1
|
||||||
|
bra .1
|
||||||
|
|
||||||
|
.3 rts
|
||||||
|
*--------------------------------------
|
||||||
|
MemMgr.SlotCnt .BS 1
|
||||||
|
MemMgr.ReqFlags .BS 1 store requested Flags
|
||||||
|
MemMgr.ReqSize .BS 2 store requested Size
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* S.FreeMemA
|
* S.FreeMemA
|
||||||
* In:
|
* In:
|
||||||
|
@ -168,12 +274,11 @@ S.GetMem >PULLB ZPMemMgrReqF store requested flags
|
||||||
* Out:
|
* Out:
|
||||||
* X,Y unmodified
|
* X,Y unmodified
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
S.FreeMemA and #$FF
|
S.FreeMemA phy
|
||||||
bne S.FreeMemA0 Slot=0, reserved by Kernel
|
|
||||||
rts
|
|
||||||
|
|
||||||
S.FreeMemA0 phy
|
|
||||||
phx
|
phx
|
||||||
|
tax
|
||||||
|
beq .8 Slot=0, reserved by Kernel
|
||||||
|
|
||||||
jsr S.GetMemByIDA
|
jsr S.GetMemByIDA
|
||||||
lda (ZPMemMgrSPtr)
|
lda (ZPMemMgrSPtr)
|
||||||
bpl * In use ?
|
bpl * In use ?
|
||||||
|
@ -182,156 +287,51 @@ S.FreeMemA0 phy
|
||||||
lda (ZPMemMgrSPtr),y Get count of those referencing this hMem
|
lda (ZPMemMgrSPtr),y Get count of those referencing this hMem
|
||||||
dec only one left ?
|
dec only one left ?
|
||||||
sta (ZPMemMgrSPtr),y
|
sta (ZPMemMgrSPtr),y
|
||||||
bne .82 no, must be a code segment loaded several times
|
bne .8 no, must be a code segment loaded several times
|
||||||
|
|
||||||
ldy #S.MEM.BIN
|
ldy #S.MEM.BIN
|
||||||
lda (ZPMemMgrSPtr),y Any BINPATH to discard ?
|
lda (ZPMemMgrSPtr),y Any BINPATH to discard ?
|
||||||
beq .11
|
beq .1
|
||||||
|
|
||||||
pha save hMem
|
pha save hMem
|
||||||
>PUSHW ZPMemMgrSPtr
|
>PUSHW ZPMemMgrSPtr
|
||||||
pla
|
pla
|
||||||
jsr S.GetMemByIDA
|
jsr S.GetMemByIDA
|
||||||
lda (ZPMemMgrSPtr)
|
lda (ZPMemMgrSPtr)
|
||||||
bmi .12 In use ?
|
bpl * ***MUST BE ALLOCATED***
|
||||||
bra *
|
|
||||||
|
|
||||||
.12 lda (ZPMemMgrSPtr) mark record as free
|
lda #0 mark BINPATH slot as free
|
||||||
and #$7F
|
|
||||||
sta (ZPMemMgrSPtr)
|
sta (ZPMemMgrSPtr)
|
||||||
>PULLW ZPMemMgrSPtr
|
>PULLW ZPMemMgrSPtr
|
||||||
|
|
||||||
.11 lda (ZPMemMgrSPtr) mark record as free
|
.1 lda #0 mark this slot as free
|
||||||
and #$7F
|
|
||||||
sta (ZPMemMgrSPtr)
|
sta (ZPMemMgrSPtr)
|
||||||
|
|
||||||
.20 lda MEMMGR.TABLESIZE
|
.2 lda MemMgr.LastSlot
|
||||||
beq .82
|
beq .8
|
||||||
.21 dec
|
|
||||||
jsr S.GetMemByIDA
|
jsr S.GetMemByIDA
|
||||||
lda (ZPMemMgrSPtr)
|
lda (ZPMemMgrSPtr)
|
||||||
bmi .81
|
bmi .8
|
||||||
dec MEMMGR.TABLESIZE discard last record
|
|
||||||
ldy #S.MEM.LEN
|
ldy #S.MEM.LEN
|
||||||
lda (ZPMemMgrSPtr),y give back LEN bytes
|
lda (ZPMemMgrSPtr),y give back LEN bytes
|
||||||
clc
|
clc
|
||||||
adc MEMMGR.MHLIMIT to HLIMIT
|
adc MemMgr.Free to MemMgr.Free
|
||||||
sta MEMMGR.MHLIMIT
|
sta MemMgr.Free
|
||||||
iny
|
iny
|
||||||
lda (ZPMemMgrSPtr),y
|
lda (ZPMemMgrSPtr),y
|
||||||
adc MEMMGR.MHLIMIT+1
|
adc MemMgr.Free+1
|
||||||
sta MEMMGR.MHLIMIT+1
|
sta MemMgr.Free+1
|
||||||
lda MEMMGR.MLLIMIT And give back S.MEM.SIZE
|
|
||||||
sec
|
dec MemMgr.LastSlot discard last slot
|
||||||
sbc #S.MEM.SIZE
|
bne .2 no slot left, exit
|
||||||
sta MEMMGR.MLLIMIT to LLIMIT
|
|
||||||
bcs .2
|
.8 plx
|
||||||
dec MEMMGR.MLLIMIT+1
|
|
||||||
.2 lda MEMMGR.TABLESIZE
|
|
||||||
bne .21 no slot left, exit
|
|
||||||
.81 jsr S.UpdateMemStats
|
|
||||||
.82 plx
|
|
||||||
ply
|
ply
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* IN/OUT
|
|
||||||
* A = hMem
|
|
||||||
*--------------------------------------
|
|
||||||
S.ClrMemA pha
|
|
||||||
jsr S.GetMemByIDA
|
|
||||||
ldy #S.MEM.LEN ZPMemMgrSPtr already set by S.GetMemByIDA
|
|
||||||
lda (ZPMemMgrSPtr),y
|
|
||||||
sta ZPMemMgrReqS set ZPMemMgrReqS to mem size
|
|
||||||
iny
|
|
||||||
lda (ZPMemMgrSPtr),y
|
|
||||||
sta ZPMemMgrReqS+1
|
|
||||||
ldy #S.MEM.PTR
|
|
||||||
lda (ZPMemMgrSPtr),y
|
|
||||||
tax
|
|
||||||
iny
|
|
||||||
lda (ZPMemMgrSPtr),y
|
|
||||||
stx ZPMemMgrSPtr
|
|
||||||
sta ZPMemMgrSPtr+1 set ZPMemMgrSPtr to Mem
|
|
||||||
lda #0
|
|
||||||
.1 ldx ZPMemMgrReqS
|
|
||||||
bne .2
|
|
||||||
ldx ZPMemMgrReqS+1
|
|
||||||
beq .3
|
|
||||||
dec ZPMemMgrReqS+1
|
|
||||||
.2 dec ZPMemMgrReqS
|
|
||||||
sta (ZPMemMgrSPtr)
|
|
||||||
inc ZPMemMgrSPtr
|
|
||||||
bne .1
|
|
||||||
inc ZPMemMgrSPtr+1
|
|
||||||
bra .1
|
|
||||||
.3 pla
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
* S.GetMemByIDA
|
|
||||||
* In:
|
|
||||||
* A = hMem
|
|
||||||
* Out:
|
|
||||||
* Y,A = ZPMemMgrSPtr = PTR to S.MEM
|
|
||||||
* X unmodified
|
|
||||||
*--------------------------------------
|
|
||||||
S.GetMemByIDA stz ZPMemMgrSPtr+1
|
|
||||||
asl
|
|
||||||
rol ZPMemMgrSPtr+1
|
|
||||||
asl
|
|
||||||
rol ZPMemMgrSPtr+1
|
|
||||||
asl
|
|
||||||
rol ZPMemMgrSPtr+1
|
|
||||||
clc
|
|
||||||
adc MEMMGR.LOMEM
|
|
||||||
sta ZPMemMgrSPtr
|
|
||||||
tay
|
|
||||||
lda ZPMemMgrSPtr+1
|
|
||||||
adc MEMMGR.LOMEM+1
|
|
||||||
sta ZPMemMgrSPtr+1
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
* In:
|
|
||||||
* A = hMem to BINPATH (PSTR)
|
|
||||||
* Out:
|
|
||||||
* Y,A = ZPMemMgrSPtr = PTR to S.MEM
|
|
||||||
* X = hMem
|
|
||||||
*--------------------------------------
|
|
||||||
S.GetMemByNameA jsr S.GetMemPtrA
|
|
||||||
>STYA ZPMemMgrTmp1 save BINPATH
|
|
||||||
>LDYA MEMMGR.LOMEM
|
|
||||||
>STYA ZPMemMgrTmp2
|
|
||||||
ldx #0
|
|
||||||
.1 lda (ZPMemMgrTmp2)
|
|
||||||
bpl .6 In Use?
|
|
||||||
ldy #S.MEM.BIN any BIN PATH in this slot?
|
|
||||||
lda (ZPMemMgrTmp2),y
|
|
||||||
beq .6
|
|
||||||
jsr S.GetMemPtrA get pathname
|
|
||||||
>STYA ZPMemMgrTmp3
|
|
||||||
ldy #0
|
|
||||||
.2 lda (ZPMemMgrTmp1),y
|
|
||||||
cmp (ZPMemMgrTmp3),y
|
|
||||||
bne .6
|
|
||||||
tya
|
|
||||||
iny
|
|
||||||
cmp (ZPMemMgrTmp1)
|
|
||||||
bne .2
|
|
||||||
>LDYA ZPMemMgrTmp2
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
.6 lda ZPMemMgrTmp2
|
|
||||||
clc
|
|
||||||
adc #S.MEM.SIZE
|
|
||||||
sta ZPMemMgrTmp2
|
|
||||||
bcc .7
|
|
||||||
inc ZPMemMgrTmp2+1
|
|
||||||
.7 inx
|
|
||||||
cpx MEMMGR.TABLESIZE
|
|
||||||
bne .1
|
|
||||||
sec
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
* S.GetMemPtrA
|
* S.GetMemPtrA
|
||||||
* In:
|
* In:
|
||||||
* A = hMem
|
* A = hMem
|
||||||
|
@ -348,110 +348,90 @@ S.GetMemPtrA jsr S.GetMemByIDA
|
||||||
ply
|
ply
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* S.GetMemLenA
|
* S.GetMemByIDA
|
||||||
* In:
|
* In:
|
||||||
* A = hMem
|
* A = hMem
|
||||||
* Out:
|
* Out:
|
||||||
* Y,A = PTR to MemLength
|
* Y,A = ZPMemMgrSPtr = PTR to S.MEM
|
||||||
* X unmodified
|
* X unmodified
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
S.GetMemLenA jsr S.GetMemByIDA
|
S.GetMemByIDA stz ZPMemMgrSPtr+1
|
||||||
ldy #S.MEM.LEN
|
|
||||||
lda (ZPMemMgrSPtr),y
|
asl
|
||||||
pha
|
rol ZPMemMgrSPtr+1
|
||||||
iny
|
asl
|
||||||
lda (ZPMemMgrSPtr),y
|
rol ZPMemMgrSPtr+1
|
||||||
ply
|
asl
|
||||||
|
rol ZPMemMgrSPtr+1
|
||||||
|
|
||||||
|
clc
|
||||||
|
adc #MemMgr.Table
|
||||||
|
sta ZPMemMgrSPtr
|
||||||
|
tay
|
||||||
|
lda ZPMemMgrSPtr+1
|
||||||
|
adc /MemMgr.Table
|
||||||
|
sta ZPMemMgrSPtr+1
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* PRIVATE
|
* In:
|
||||||
|
* A = hMem to BINPATH (PSTR)
|
||||||
|
* Out:
|
||||||
|
* Y,A = ZPMemMgrSPtr = PTR to S.MEM
|
||||||
|
* X = hMem
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* S.AddSlot
|
S.GetMemByNameA jsr S.GetMemPtrA
|
||||||
* In:
|
S.GetMemByNameYA
|
||||||
* Y,A = Requested size
|
>STYA ZPMemMgrTmp1 save BINPATH
|
||||||
* Out:
|
>LDYAI MemMgr.Table+S.MEM.SIZE
|
||||||
* Y,A = PTR to MemSlot
|
>STYA ZPMemMgrSPtr
|
||||||
* X = SLOT.ID
|
ldx #0
|
||||||
*--------------------------------------
|
|
||||||
S.AddSlot >STYA ZPMemMgrTmp1 save req size
|
.1 cpx MemMgr.LastSlot
|
||||||
lda MEMMGR.TABLESIZE
|
beq .9
|
||||||
inc
|
inx
|
||||||
beq .99 > 255 ERR:OUT OF SLOT
|
lda (ZPMemMgrSPtr)
|
||||||
dec
|
bpl .6 In Use?
|
||||||
jsr S.GetMemByIDA yes, get PTR to slot
|
|
||||||
|
ldy #S.MEM.BIN any BIN PATH in this slot?
|
||||||
lda MEMMGR.MHLIMIT Compute base PTR=HLIMIT-REQ size
|
lda (ZPMemMgrSPtr),y
|
||||||
sec
|
beq .6
|
||||||
sbc ZPMemMgrTmp1
|
|
||||||
sta ZPMemMgrTmp2 store new HLIMIT in ZPMemMgrTmp2
|
jsr S.GetMemPtrA get pathname
|
||||||
lda MEMMGR.MHLIMIT+1
|
>STYA ZPMemMgrTmp2
|
||||||
sbc ZPMemMgrTmp1+1
|
|
||||||
sta ZPMemMgrTmp2+1
|
ldy #0
|
||||||
|
|
||||||
lda MEMMGR.MLLIMIT compute new LLIMIT
|
.2 lda (ZPMemMgrTmp1),y
|
||||||
|
cmp (ZPMemMgrTmp2),y
|
||||||
|
bne .6
|
||||||
|
|
||||||
|
tya
|
||||||
|
iny
|
||||||
|
cmp (ZPMemMgrTmp1)
|
||||||
|
bne .2
|
||||||
|
|
||||||
|
>LDYA ZPMemMgrSPtr
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
|
||||||
|
.6 lda ZPMemMgrSPtr
|
||||||
clc
|
clc
|
||||||
adc #S.MEM.SIZE
|
adc #S.MEM.SIZE
|
||||||
sta ZPMemMgrTmp3 store new LLIMIT in ZPMemMgrTmp3
|
sta ZPMemMgrSPtr
|
||||||
lda MEMMGR.MLLIMIT+1
|
bcc .1
|
||||||
adc #0
|
inc ZPMemMgrSPtr+1
|
||||||
sta ZPMemMgrTmp3+1
|
bra .1
|
||||||
|
|
||||||
lda ZPMemMgrTmp2 ensure new LLIMIT is not higher
|
.9 sec
|
||||||
sec than new HLIMIT
|
rts
|
||||||
sbc ZPMemMgrTmp3
|
*--------------------------------------
|
||||||
lda ZPMemMgrTmp2+1
|
S.SetLoMem
|
||||||
sbc ZPMemMgrTmp3+1
|
|
||||||
bcc .98 ERR out of mem
|
|
||||||
|
|
||||||
>LDYA ZPMemMgrTmp3 get new LLIMIT
|
|
||||||
>STYA MEMMGR.MLLIMIT And set it allocated
|
|
||||||
|
|
||||||
lda #0
|
|
||||||
sta (ZPMemMgrSPtr)
|
|
||||||
ldy #S.MEM.BIN
|
|
||||||
sta (ZPMemMgrSPtr),y
|
|
||||||
ldy #S.MEM.REFCNT
|
|
||||||
sta (ZPMemMgrSPtr),y
|
|
||||||
ldy #S.MEM.OWNERPID
|
|
||||||
sta (ZPMemMgrSPtr),y
|
|
||||||
|
|
||||||
ldy #S.MEM.PTR
|
|
||||||
lda ZPMemMgrTmp2 get new HLIMIT
|
|
||||||
sta MEMMGR.MHLIMIT set as system HLIMIT value
|
|
||||||
sta (ZPMemMgrSPtr),y store is as base address of new slot
|
|
||||||
iny
|
|
||||||
lda ZPMemMgrTmp2+1
|
|
||||||
sta MEMMGR.MHLIMIT+1
|
|
||||||
sta (ZPMemMgrSPtr),y
|
|
||||||
|
|
||||||
ldy #S.MEM.LEN
|
|
||||||
lda ZPMemMgrTmp1 get requested size
|
|
||||||
sta (ZPMemMgrSPtr),y setup slot LEN
|
|
||||||
iny
|
|
||||||
lda ZPMemMgrTmp1+1
|
|
||||||
sta (ZPMemMgrSPtr),y
|
|
||||||
|
|
||||||
>LDYA ZPMemMgrTmp2 Y,A = PTR
|
|
||||||
ldx MEMMGR.TABLESIZE X = SLOT.ID
|
|
||||||
inc MEMMGR.TABLESIZE mark this slot allocated
|
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
.98 lda #MEMMGR.ERROOM
|
|
||||||
sec
|
|
||||||
rts
|
|
||||||
.99 lda #MEMMGR.ERROOS
|
|
||||||
sec
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
S.UpdateMemStats
|
S.GarbageCollector
|
||||||
lda MEMMGR.MHLIMIT
|
clc
|
||||||
sec
|
rts
|
||||||
sbc MEMMGR.MLLIMIT
|
|
||||||
sta MEMMGR.MFREE
|
|
||||||
lda MEMMGR.MHLIMIT+1
|
|
||||||
sbc MEMMGR.MLLIMIT+1
|
|
||||||
sta MEMMGR.MFREE+1
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
MAN
|
MAN
|
||||||
SAVE SYS/KERNEL.S.MEM
|
SAVE SYS/KERNEL.S.MEM
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /A2OSX.BUILD
|
PREFIX /A2OSX.SRC
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
@ -8,9 +8,33 @@ AUTO 6
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* PUBLIC
|
* PUBLIC
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
S.MLICreate
|
S.MLICreateFile
|
||||||
S.MLIDestroy
|
clc
|
||||||
S.MLIRename
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
S.MLICreateDirA jsr S.GetMemPtrA
|
||||||
|
S.MLICreateDirYA
|
||||||
|
>STYA MLICALL.PARAMS+1
|
||||||
|
lda #$C3
|
||||||
|
sta MLICALL.PARAMS+3 Access
|
||||||
|
lda #$0F
|
||||||
|
sta MLICALL.PARAMS+4 type=Directory
|
||||||
|
lda #$0D
|
||||||
|
sta MLICALL.PARAMS+7 Storage=Linked List
|
||||||
|
|
||||||
|
>MLICALL MLICREATE
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
S.MLIDestroyA jsr S.GetMemPtrA
|
||||||
|
S.MLIDestroyYA >STYA MLICALL.PARAMS+1
|
||||||
|
>MLICALL MLIDESTROY
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
S.MLIRename >PULLW MLICALL.PARAMS+3
|
||||||
|
>PULLW MLICALL.PARAMS+1
|
||||||
|
>MLICALL MLIRENAME
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
S.MLISetFileInfo
|
S.MLISetFileInfo
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* S.MLIGetFileInfoA
|
* S.MLIGetFileInfoA
|
||||||
|
@ -21,9 +45,9 @@ S.MLISetFileInfo
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
S.MLIGetFileInfoA
|
S.MLIGetFileInfoA
|
||||||
jsr S.GetMemPtrA
|
jsr S.GetMemPtrA
|
||||||
S.MLIGetFileInfo
|
S.MLIGetFileInfoYA
|
||||||
>STYA MLICALL.PARAMS+1
|
>STYA MLICALL.PARAMS+1
|
||||||
>KMLICALL MLIGETFILEINFO
|
>MLICALL MLIGETFILEINFO
|
||||||
bcs .9
|
bcs .9
|
||||||
>LDYAI MLICALL.PARAMS+3
|
>LDYAI MLICALL.PARAMS+3
|
||||||
.9 rts
|
.9 rts
|
||||||
|
@ -35,14 +59,19 @@ S.MLIGetFileInfo
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
S.MLIOnline >PULLB MLICALL.PARAMS+1
|
S.MLIOnline >PULLB MLICALL.PARAMS+1
|
||||||
>PULLW MLICALL.PARAMS+2
|
>PULLW MLICALL.PARAMS+2
|
||||||
>KMLICALL MLIONLINE
|
>MLICALL MLIONLINE
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
S.MLISetPrefix
|
S.MLISetPrefixA jsr S.GetMemPtrA
|
||||||
|
S.MLISetPrefixYA
|
||||||
|
>STYA MLICALL.PARAMS+1
|
||||||
|
>MLICALL MLISETPREFIX
|
||||||
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
S.MLIGetPrefixA jsr S.GetMemPtrA
|
S.MLIGetPrefixA jsr S.GetMemPtrA
|
||||||
S.MLIGetPrefix >STYA MLICALL.PARAMS+1
|
S.MLIGetPrefixYA
|
||||||
>KMLICALL MLIGETPREFIX
|
>STYA MLICALL.PARAMS+1
|
||||||
|
>MLICALL MLIGETPREFIX
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* S.MLIOpenA
|
* S.MLIOpenA
|
||||||
|
@ -53,18 +82,20 @@ S.MLIGetPrefix >STYA MLICALL.PARAMS+1
|
||||||
* X = buf hMem
|
* X = buf hMem
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
S.MLIOpenA jsr S.GetMemPtrA
|
S.MLIOpenA jsr S.GetMemPtrA
|
||||||
S.MLIOpen >STYA MLICALL.PARAMS+1
|
S.MLIOpenYA >STYA MLICALL.PARAMS+1
|
||||||
>PUSHWI 1024 get a ProDOS IO buffer
|
>PUSHWI 1024 get a ProDOS IO buffer
|
||||||
>PUSHBI S.MEM.F.ALIGN+S.MEM.F.NOMOV
|
>PUSHBI S.MEM.F.ALIGN+S.MEM.F.NOMOVE
|
||||||
jsr S.GetMem
|
jsr S.GetMem
|
||||||
bcs .99
|
bcs .99
|
||||||
|
|
||||||
phx save Prodos Buffer hMem
|
phx save Prodos Buffer hMem
|
||||||
>STYA MLICALL.PARAMS+3
|
>STYA MLICALL.PARAMS+3
|
||||||
>KMLICALL MLIOPEN
|
>MLICALL MLIOPEN
|
||||||
bcs .98
|
bcs .98
|
||||||
lda MLICALL.PARAMS+5 get ref_num
|
lda MLICALL.PARAMS+5 get ref_num
|
||||||
plx get back Prodos Buffer hMem
|
plx get back Prodos Buffer hMem
|
||||||
rts CC
|
rts CC
|
||||||
|
|
||||||
.98 plx get back Prodos Buffer hMem
|
.98 plx get back Prodos Buffer hMem
|
||||||
pha save MLI error
|
pha save MLI error
|
||||||
txa
|
txa
|
||||||
|
@ -82,7 +113,7 @@ S.MLIOpen >STYA MLICALL.PARAMS+1
|
||||||
S.MLINewLine >PULLB MLICALL.PARAMS+1
|
S.MLINewLine >PULLB MLICALL.PARAMS+1
|
||||||
>PULLB MLICALL.PARAMS+2
|
>PULLB MLICALL.PARAMS+2
|
||||||
>PULLB MLICALL.PARAMS+3
|
>PULLB MLICALL.PARAMS+3
|
||||||
>KMLICALL MLINEWLINE
|
>MLICALL MLINEWLINE
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* S.MLIRead
|
* S.MLIRead
|
||||||
|
@ -96,7 +127,7 @@ S.MLINewLine >PULLB MLICALL.PARAMS+1
|
||||||
S.MLIRead >PULLB MLICALL.PARAMS+1
|
S.MLIRead >PULLB MLICALL.PARAMS+1
|
||||||
>PULLW MLICALL.PARAMS+2
|
>PULLW MLICALL.PARAMS+2
|
||||||
>PULLW MLICALL.PARAMS+4
|
>PULLW MLICALL.PARAMS+4
|
||||||
>KMLICALL MLIREAD
|
>MLICALL MLIREAD
|
||||||
bcs .9
|
bcs .9
|
||||||
>LDYA MLICALL.PARAMS+6
|
>LDYA MLICALL.PARAMS+6
|
||||||
.9 rts
|
.9 rts
|
||||||
|
@ -112,23 +143,40 @@ S.MLIRead >PULLB MLICALL.PARAMS+1
|
||||||
S.MLIWrite >PULLB MLICALL.PARAMS+1
|
S.MLIWrite >PULLB MLICALL.PARAMS+1
|
||||||
>PULLW MLICALL.PARAMS+2
|
>PULLW MLICALL.PARAMS+2
|
||||||
>PULLW MLICALL.PARAMS+4
|
>PULLW MLICALL.PARAMS+4
|
||||||
>KMLICALL MLIWRITE
|
>MLICALL MLIWRITE
|
||||||
bcs .9
|
bcs .9
|
||||||
>LDYA MLICALL.PARAMS+6
|
>LDYA MLICALL.PARAMS+6
|
||||||
.9 rts
|
.9 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* S.MLIClose
|
* S.MLICloseA
|
||||||
* in :
|
* in :
|
||||||
* A = ref_num
|
* A = ref_num
|
||||||
* out :
|
* out :
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
S.MLICloseA sta MLICALL.PARAMS+1
|
S.MLICloseA sta MLICALL.PARAMS+1
|
||||||
>KMLICALL MLICLOSE
|
>MLICALL MLICLOSE
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
S.MLIFlushA sta MLICALL.PARAMS+1
|
||||||
|
>MLICALL MLIFLUSH
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
S.MLIFlushA
|
|
||||||
S.MLISetMark
|
S.MLISetMark
|
||||||
S.MLIGetMark
|
*--------------------------------------
|
||||||
|
* S.MLIGetMarkA
|
||||||
|
* in :
|
||||||
|
* A = ref_num
|
||||||
|
* out :
|
||||||
|
* Y,A,X = EOF
|
||||||
|
*--------------------------------------
|
||||||
|
S.MLIGetMarkA sta MLICALL.PARAMS+1
|
||||||
|
>MLICALL MLIGETMARK
|
||||||
|
bcs .9
|
||||||
|
>LDYA MLICALL.PARAMS+2
|
||||||
|
ldx MLICALL.PARAMS+4
|
||||||
|
clc
|
||||||
|
.9 rts
|
||||||
|
*--------------------------------------
|
||||||
S.MLISetEOF
|
S.MLISetEOF
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* S.MLIGetEOF
|
* S.MLIGetEOF
|
||||||
|
@ -138,13 +186,38 @@ S.MLISetEOF
|
||||||
* Y,A,X = EOF
|
* Y,A,X = EOF
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
S.MLIGetEOFA sta MLICALL.PARAMS+1
|
S.MLIGetEOFA sta MLICALL.PARAMS+1
|
||||||
>KMLICALL MLIGETEOF
|
>MLICALL MLIGETEOF
|
||||||
bcs .9
|
bcs .9
|
||||||
>LDYA MLICALL.PARAMS+2
|
>LDYA MLICALL.PARAMS+2
|
||||||
ldx MLICALL.PARAMS+4
|
ldx MLICALL.PARAMS+4
|
||||||
clc
|
clc
|
||||||
.9 rts
|
.9 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
S.MLISetBuf clc
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
S.MLIGetBuf clc
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
S.MLIGetTime >MLICALL MLIGETTIME
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
S.MLIAllocIRQ >PULLB MLICALL.PARAMS+1
|
||||||
|
>PULLW MLICALL.PARAMS+2
|
||||||
|
>MLICALL MLIALLOCIRQ
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
S.MLIDeallocIRQA
|
||||||
|
sta MLICALL.PARAMS+1
|
||||||
|
>MLICALL MLIDEALLOCIRQ
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
S.MLIReadBlock clc
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
S.MLIWriteBlock clc
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
MAN
|
MAN
|
||||||
SAVE SYS/KERNEL.S.MLI
|
SAVE SYS/KERNEL.S.MLI
|
||||||
LOAD SYS/KERNEL.S
|
LOAD SYS/KERNEL.S
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /A2OSX.BUILD
|
PREFIX /A2OSX.SRC
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /A2OSX.BUILD
|
PREFIX /A2OSX.SRC
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /A2OSX.BUILD
|
PREFIX /A2OSX.SRC
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
@ -68,8 +68,8 @@ S.ScreenSelectA and A2osX.SCREENS Screen is available ?
|
||||||
bne .2
|
bne .2
|
||||||
sta SETTEXT
|
sta SETTEXT
|
||||||
sta SET80DISP
|
sta SET80DISP
|
||||||
|
sta CLR80STORE
|
||||||
sta CLRPAGE2
|
sta CLRPAGE2
|
||||||
sta SET80STORE
|
|
||||||
sta SETALTCHAR
|
sta SETALTCHAR
|
||||||
lda #A2osX.SCREENS.C
|
lda #A2osX.SCREENS.C
|
||||||
bra .8
|
bra .8
|
||||||
|
@ -80,19 +80,22 @@ S.ScreenSelectA and A2osX.SCREENS Screen is available ?
|
||||||
sta CLRTEXT
|
sta CLRTEXT
|
||||||
sta CLRMIXED
|
sta CLRMIXED
|
||||||
sta SETHIRES
|
sta SETHIRES
|
||||||
|
sta CLR80STORE
|
||||||
sta CLRPAGE2
|
sta CLRPAGE2
|
||||||
|
|
||||||
sta SET80DISP
|
|
||||||
sta SETIOUDIS
|
sta SETIOUDIS
|
||||||
sta SETDHIRES
|
sta SETDHIRES
|
||||||
sta CLRDHIRES
|
|
||||||
sta SETDHIRES
|
* sta CLR80DISP
|
||||||
sta CLRDHIRES
|
* sta SETDHIRES
|
||||||
sta SETDHIRES
|
* sta CLRDHIRES
|
||||||
|
* sta SET80DISP
|
||||||
|
* sta SETDHIRES
|
||||||
|
* sta CLRDHIRES
|
||||||
|
* sta SETDHIRES
|
||||||
|
|
||||||
lda #A2osX.SCREENS.G
|
lda #A2osX.SCREENS.G
|
||||||
|
|
||||||
.8 sta A2osX.ACTIVESCRN
|
.8 sta A2osX.ASCREEN
|
||||||
.9 rts
|
.9 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
S.SysScrCPULoad ldx SYSSCR.CPULOADI
|
S.SysScrCPULoad ldx SYSSCR.CPULOADI
|
||||||
|
@ -134,8 +137,38 @@ S.SysScrPRCode php save P to keep carry
|
||||||
plp
|
plp
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
S.DumpEvent lda (pEvent)
|
||||||
|
jsr S.SysScrPRBYTEA
|
||||||
|
ldy #S.EVT.hDEV
|
||||||
|
lda (pEvent),y
|
||||||
|
jsr S.SysScrPRBYTEA
|
||||||
|
ldy #S.EVT.DATALO
|
||||||
|
lda (pEvent),y
|
||||||
|
jsr S.SysScrPRBYTEA
|
||||||
|
ldy #S.EVT.DATAHI
|
||||||
|
lda (pEvent),y
|
||||||
|
jsr S.SysScrPRBYTEA
|
||||||
|
|
||||||
|
lda #'.'
|
||||||
|
jsr S.SysScrCOUTA
|
||||||
|
ldy #S.EVT.DATAW1
|
||||||
|
lda (pEvent),y
|
||||||
|
jsr S.SysScrPRBYTEA
|
||||||
|
iny
|
||||||
|
lda (pEvent),y
|
||||||
|
jsr S.SysScrPRBYTEA
|
||||||
|
|
||||||
|
lda #'.'
|
||||||
|
jsr S.SysScrCOUTA
|
||||||
|
ldy #S.EVT.DATAW2
|
||||||
|
lda (pEvent),y
|
||||||
|
jsr S.SysScrPRBYTEA
|
||||||
|
iny
|
||||||
|
lda (pEvent),y
|
||||||
|
jmp S.SysScrPRBYTEA
|
||||||
|
*--------------------------------------
|
||||||
S.SysScrPPSTRA jsr S.GetMemPtrA
|
S.SysScrPPSTRA jsr S.GetMemPtrA
|
||||||
S.SysScrPPSTR >STYA SYSSCR.STRPTR
|
S.SysScrPPSTRYA >STYA SYSSCR.STRPTR
|
||||||
lda (SYSSCR.STRPTR)
|
lda (SYSSCR.STRPTR)
|
||||||
beq .9
|
beq .9
|
||||||
ldy #0
|
ldy #0
|
||||||
|
@ -319,7 +352,7 @@ S.SysScrSetCharAtYX
|
||||||
SYSSCR.CH .BS 1
|
SYSSCR.CH .BS 1
|
||||||
SYSSCR.CV .BS 1
|
SYSSCR.CV .BS 1
|
||||||
SYSSCR.CPULOADI .BS 1
|
SYSSCR.CPULOADI .BS 1
|
||||||
SYSSCR.CPULOADC .AS -"|\-/"
|
SYSSCR.CPULOADC .AS -"|/-\"
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
SYSSCR.TITLE >CSTRING "A2osX System Screen"
|
SYSSCR.TITLE >CSTRING "A2osX System Screen"
|
||||||
SYSSCR.BASEL .HS 00.80.00.80.00.80.00.80.28.A8.28.A8.28.A8.28.A8.50.D0.50.D0.50.D0.50.D0
|
SYSSCR.BASEL .HS 00.80.00.80.00.80.00.80.28.A8.28.A8.28.A8.28.A8.50.D0.50.D0.50.D0.50.D0
|
||||||
|
|
|
@ -1,29 +1,26 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /A2OSX.BUILD
|
PREFIX /A2OSX.SRC
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
.LIST OFF
|
.LIST OFF
|
||||||
.OP 65C02
|
.OP 65C02
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* S.NewPStr
|
|
||||||
* IN:
|
|
||||||
* PULLW = PTR to buffer
|
|
||||||
* OUT:
|
|
||||||
* A = hMem to S (PSTRING)
|
|
||||||
*--------------------------------------
|
|
||||||
S.NewPStr >PULLW ZPQuickPtr1
|
|
||||||
bra S.PStrCpy2
|
|
||||||
*--------------------------------------
|
|
||||||
* S.PStrCpyA
|
* S.PStrCpyA
|
||||||
* In:
|
* In:
|
||||||
* A = hMem of Src String
|
* A = hMem of Src String
|
||||||
* Out:
|
* Out:
|
||||||
* A = hMem of Dest String
|
* A = hMem of Dest String
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
* S.NewPStrYA
|
||||||
|
* IN:
|
||||||
|
* PULLW = PTR to buffer
|
||||||
|
* OUT:
|
||||||
|
* A = hMem to S (PSTRING)
|
||||||
|
*--------------------------------------
|
||||||
S.PStrCpyA jsr S.GetMemPtrA
|
S.PStrCpyA jsr S.GetMemPtrA
|
||||||
>STYA ZPQuickPtr1
|
S.NewPStrYA >STYA ZPQuickPtr1
|
||||||
S.PStrCpy2 lda (ZPQuickPtr1)
|
lda (ZPQuickPtr1)
|
||||||
inc
|
inc
|
||||||
tay
|
tay
|
||||||
lda #0 Y,A = len of new string
|
lda #0 Y,A = len of new string
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /A2OSX.BUILD
|
PREFIX /A2OSX.SRC
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
|
@ -9,177 +9,189 @@ AUTO 6
|
||||||
* S.TskMgrInit
|
* S.TskMgrInit
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
S.TskMgrInit stz TSKMGR.LASTID
|
S.TskMgrInit stz TSKMGR.LASTID
|
||||||
|
lda #1
|
||||||
|
sta TSKMGR.SIZE One Slot Busy (Kernel PS=0)
|
||||||
|
|
||||||
>LDYAI TSKMGR.TABLE
|
>LDYAI TskMgr.Table Make PS #0 as current process
|
||||||
>STYA TSKMGR.TSKPTR
|
>STYA pPs
|
||||||
|
|
||||||
ldx #K.PS.MAX
|
ldx #K.PS.MAX
|
||||||
|
|
||||||
.1 lda #0
|
.1 lda #0
|
||||||
ldy #S.PS.SIZE-1
|
ldy #S.PS.SIZE-1
|
||||||
|
|
||||||
.2 sta (TSKMGR.TSKPTR),y
|
.2 sta (pPs),y
|
||||||
dey
|
dey
|
||||||
bpl .2
|
bpl .2
|
||||||
|
|
||||||
lda TSKMGR.TSKPTR
|
lda pPs
|
||||||
clc
|
clc
|
||||||
adc #S.PS.SIZE
|
adc #S.PS.SIZE
|
||||||
sta TSKMGR.TSKPTR
|
sta pPs
|
||||||
bcc .3
|
bcc .3
|
||||||
inc TSKMGR.TSKPTR+1
|
|
||||||
.3 dex
|
inc pPs+1
|
||||||
|
.3 dex
|
||||||
bne .1
|
bne .1
|
||||||
|
|
||||||
>LDYAI TSKMGR.TABLE Make PS #0 as current process
|
>LDYAI TskMgr.Table Make PS #0 as current process
|
||||||
>STYA TSKMGR.TSKPTR
|
>STYA pPs
|
||||||
|
|
||||||
jsr S.CreateEnv
|
jsr S.CreateEnv
|
||||||
bcs .9
|
bcs *
|
||||||
|
|
||||||
ldy #S.PS.hENV
|
ldy #S.PS.hENV
|
||||||
sta TSKMGR.TABLE,y
|
sta TskMgr.Table,y
|
||||||
|
|
||||||
>LDYAI TmpBuffer256
|
>LDYAI TmpBuffer256
|
||||||
jsr S.MLIGetPrefix
|
jsr S.MLIGetPrefixYA
|
||||||
bcs .9
|
bcs *
|
||||||
>PUSHWI TmpBuffer256
|
|
||||||
jsr S.NewPStr
|
>LDYAI TmpBuffer256
|
||||||
bcs .9
|
jsr S.NewPStrYA
|
||||||
|
bcs *
|
||||||
|
|
||||||
ldy #S.PS.hPREFIX
|
ldy #S.PS.hPREFIX
|
||||||
sta TSKMGR.TABLE,y
|
sta TskMgr.Table,y
|
||||||
>PUSHWI TmpBuffer256 push ENV value
|
>PUSHWI TmpBuffer256 push ENV value
|
||||||
>PUSHWI ENV.A2osX push ENV name
|
>PUSHWI ENV.A2osX push ENV name
|
||||||
ldy #S.PS.hENV
|
ldy #S.PS.hENV
|
||||||
lda TSKMGR.TABLE,y
|
lda TskMgr.Table,y
|
||||||
>PUSHA
|
>PUSHA
|
||||||
jsr S.SetEnvVarP
|
jsr S.SetEnvVarP
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.9 sec
|
.9 sec
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* S.TskMgrRun
|
* S.TskMgrRun
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
S.TskMgrRun >LDYAI TSKMGR.TABLE+S.PS.SIZE
|
S.TskMgrRun >LDYAI TskMgr.Table+S.PS.SIZE
|
||||||
>STYA TSKMGR.TSKPTR
|
>STYA pPs
|
||||||
|
|
||||||
lda #K.PS.MAX-1 Skip PS #0
|
lda #1 Skip PS #0
|
||||||
sta TSKMGR.COUNT
|
sta TSKMGR.COUNT
|
||||||
|
|
||||||
.1 lda (TSKMGR.TSKPTR) get S.PS.F
|
.1 lda (pPs) get S.PS.F
|
||||||
and #S.PS.F.INUSE In use ?
|
and #S.PS.F.INUSE In use ?
|
||||||
beq .5
|
beq .5
|
||||||
|
|
||||||
lda (TSKMGR.TSKPTR) get S.PS.F
|
lda (pPs) get S.PS.F
|
||||||
and #S.PS.F.HOLD Waiting for Another Task to Terminate?
|
and #S.PS.F.HOLD Waiting for Another Task to Terminate?
|
||||||
beq .3
|
beq .2
|
||||||
|
|
||||||
ldy #S.PS.CID
|
ldy #S.PS.CID
|
||||||
lda (TSKMGR.TSKPTR),y
|
lda (pPs),y
|
||||||
jsr S.IsPSRunningA
|
jsr S.GetPSByIDA
|
||||||
bcc .5 yes, running....
|
bcc .5 yes, running....
|
||||||
lda (TSKMGR.TSKPTR) get S.PS.F
|
|
||||||
and #$FF^S.PS.F.HOLD unmark as HOLD
|
|
||||||
sta (TSKMGR.TSKPTR)
|
|
||||||
|
|
||||||
.3 ldy #S.PS.hCS
|
lda (pPs) get S.PS.F
|
||||||
lda (TSKMGR.TSKPTR),y
|
and #$FF^S.PS.F.HOLD unmark as HOLD
|
||||||
jsr S.GetMemPtrA Y,A = CS
|
sta (pPs)
|
||||||
pha
|
|
||||||
tya get CS LO
|
.2 jsr S.SelectProcess
|
||||||
ldy #S.PS.PC
|
|
||||||
|
ldy #S.PS.PC+1 Is this PS sleeping?
|
||||||
|
lda (pPs),y
|
||||||
|
tax
|
||||||
|
dey
|
||||||
|
ora (pPs),y
|
||||||
|
beq .3 no, call TSKMGR.RUN
|
||||||
|
|
||||||
|
lda (pPs),y
|
||||||
clc
|
clc
|
||||||
adc (TSKMGR.TSKPTR),y
|
adc pCode
|
||||||
sta Kernel.JMP
|
sta S.TskMgrRunJmp+1
|
||||||
iny
|
txa
|
||||||
pla
|
adc pCode+1
|
||||||
adc (TSKMGR.TSKPTR),y
|
sta S.TskMgrRunJmp+2
|
||||||
sta Kernel.JMP+1
|
|
||||||
|
|
||||||
lda #0 Don't forget to reset S.PC
|
lda #0 Don't forget to reset S.PC
|
||||||
sta (TSKMGR.TSKPTR),y
|
ldy #S.PS.PC
|
||||||
dey
|
sta (pPs),y
|
||||||
sta (TSKMGR.TSKPTR),y
|
iny
|
||||||
|
sta (pPs),y
|
||||||
|
|
||||||
>LDYA TSKMGR.TSKPTR
|
jsr S.TskMgrRunJmp
|
||||||
ldx #TSKMGR.RUN
|
bra .4
|
||||||
jsr Kernel.BINCALL Call RUN function
|
|
||||||
bcc .5 RUN said CS=QUIT?
|
.3 ldx #TSKMGR.RUN
|
||||||
|
jsr pCodeJmp Call RUN function
|
||||||
|
.4 bcc .5 RUN said CS=QUIT?
|
||||||
|
|
||||||
ldy #S.PS.hCS
|
|
||||||
lda (TSKMGR.TSKPTR),y
|
|
||||||
jsr S.GetMemPtrA Y,A = CS
|
|
||||||
>STYA Kernel.JMP
|
|
||||||
|
|
||||||
>LDYA TSKMGR.TSKPTR
|
|
||||||
ldx #TSKMGR.QUIT yes, quit this process
|
ldx #TSKMGR.QUIT yes, quit this process
|
||||||
|
jsr pCodeJmp Call QUIT function
|
||||||
jsr Kernel.BINCALL Call QUIT function
|
|
||||||
|
|
||||||
ldy #S.PS.ID
|
ldy #S.PS.ID
|
||||||
lda (TSKMGR.TSKPTR),y
|
lda (pPs),y
|
||||||
jsr S.FreeProcessA
|
jsr S.FreeProcessA
|
||||||
bcs .99
|
bcs .99
|
||||||
|
|
||||||
.5 lda TSKMGR.TSKPTR
|
.5 lda pPs
|
||||||
clc
|
clc
|
||||||
adc #S.PS.SIZE
|
adc #S.PS.SIZE
|
||||||
sta TSKMGR.TSKPTR
|
sta pPs
|
||||||
bcc .6
|
bcc .6
|
||||||
inc TSKMGR.TSKPTR+1
|
inc pPs+1
|
||||||
|
|
||||||
.6 dec TSKMGR.COUNT
|
.6 lda TSKMGR.COUNT
|
||||||
|
inc TSKMGR.COUNT
|
||||||
|
cmp TSKMGR.SIZE
|
||||||
bne .1
|
bne .1
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.99 bra *
|
.99 bra *
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
S.TskMgrRunJmp jmp $FFFF
|
||||||
|
*--------------------------------------
|
||||||
* S.DispatchEvent
|
* S.DispatchEvent
|
||||||
* IN:
|
* IN:
|
||||||
* PULLW = Event
|
|
||||||
* OUT:
|
* OUT:
|
||||||
* CS: Not Dispatched
|
* CS: Not Dispatched
|
||||||
* CC: Event Cleared
|
* CC: Event Cleared
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
S.DispatchEvent >LDYAI TSKMGR.TABLE+S.PS.SIZE
|
S.DispatchEvent >LDYAI TskMgr.Table+S.PS.SIZE
|
||||||
>STYA TSKMGR.TSKPTR
|
>STYA pPs
|
||||||
|
|
||||||
lda #K.PS.MAX-1
|
lda #1
|
||||||
sta TSKMGR.COUNT
|
sta TSKMGR.COUNT
|
||||||
|
|
||||||
.1 lda (TSKMGR.TSKPTR) get S.PS.F
|
.1 lda (pPs) get S.PS.F
|
||||||
and #S.PS.F.INUSE In use ?
|
and #S.PS.F.INUSE In use ?
|
||||||
beq .3
|
beq .3
|
||||||
|
|
||||||
lda (TSKMGR.TSKPTR) get S.PS.F
|
lda (pPs) get S.PS.F
|
||||||
and #S.PS.F.HOLD Waiting for Another Task to Terminate?
|
and #S.PS.F.HOLD Waiting for Another Task to Terminate?
|
||||||
bne .3
|
bne .3
|
||||||
|
|
||||||
lda (TSKMGR.TSKPTR) get S.PS.F
|
lda (pPs) get S.PS.F
|
||||||
and #S.PS.F.EVENT Accept Events ?
|
and #S.PS.F.EVENT Accept Events ?
|
||||||
beq .3
|
beq .3
|
||||||
|
|
||||||
|
jsr S.SelectProcess
|
||||||
|
|
||||||
ldy #S.PS.hCS
|
|
||||||
lda (TSKMGR.TSKPTR),y
|
|
||||||
jsr S.GetMemPtrA
|
|
||||||
>STYA Kernel.JMP
|
|
||||||
|
|
||||||
>PUSHW EVTMGR.EVTPTR
|
|
||||||
>LDYA TSKMGR.TSKPTR
|
|
||||||
ldx #TSKMGR.DOEVENT
|
ldx #TSKMGR.DOEVENT
|
||||||
jsr Kernel.BINCALL Call DOEVENT function
|
jsr pCodeJmp Call DOEVENT function
|
||||||
bcc .8
|
bcc .8
|
||||||
|
|
||||||
.3 lda TSKMGR.TSKPTR
|
.3 lda pPs
|
||||||
clc
|
clc
|
||||||
adc #S.PS.SIZE
|
adc #S.PS.SIZE
|
||||||
sta TSKMGR.TSKPTR
|
sta pPs
|
||||||
bcc .4
|
bcc .4
|
||||||
inc TSKMGR.TSKPTR+1
|
inc pPs+1
|
||||||
|
|
||||||
.4 dec TSKMGR.COUNT
|
.4 lda TSKMGR.COUNT
|
||||||
|
inc TSKMGR.COUNT
|
||||||
|
cmp TSKMGR.SIZE
|
||||||
bne .1
|
bne .1
|
||||||
sec
|
sec
|
||||||
.8 rts
|
rts
|
||||||
|
|
||||||
|
.8 jsr S.DestroyEvent
|
||||||
|
clc
|
||||||
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* S.TskMgrQuit
|
* S.TskMgrQuit
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
@ -190,18 +202,20 @@ S.TskMgrQuit clc
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* S.ExecProcessA (Blocking Parent PID)
|
* S.ExecProcessA (Blocking Parent PID)
|
||||||
* in :
|
* in :
|
||||||
* A = hMem To Full Cmd Line
|
* A = hMem To Cmd Line
|
||||||
* out :
|
* out :
|
||||||
* A = Child PSID
|
* A = Child PSID
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
S.ExecProcessA jsr S.CreateProcessA
|
S.ExecProcessA jsr S.CreateProcessA
|
||||||
bcs .9 terminated, do not set PID as HOLD
|
bcs .9 terminated, do not set PID as HOLD
|
||||||
|
|
||||||
ldy #S.PS.CID
|
ldy #S.PS.CID
|
||||||
sta (TSKMGR.TSKPTR),y
|
sta (pPs),y
|
||||||
|
|
||||||
pha Save Child PID
|
pha Save Child PID
|
||||||
lda (TSKMGR.TSKPTR)
|
lda (pPs)
|
||||||
ora #S.PS.F.HOLD
|
ora #S.PS.F.HOLD
|
||||||
sta (TSKMGR.TSKPTR)
|
sta (pPs)
|
||||||
pla Get Back PID
|
pla Get Back PID
|
||||||
clc
|
clc
|
||||||
.9 rts
|
.9 rts
|
||||||
|
@ -213,174 +227,188 @@ S.ExecProcessA jsr S.CreateProcessA
|
||||||
* A = Child PSID
|
* A = Child PSID
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
S.CreateProcessA
|
S.CreateProcessA
|
||||||
pha save CMD line
|
sta S.CreateProcessA.Cmd
|
||||||
>LDYAI MSG.NEWPS
|
>LDYAI MSG.NEWPS
|
||||||
jsr S.SysScrPPSTR
|
jsr S.SysScrPPSTRYA
|
||||||
|
|
||||||
ldy #S.PS.ID
|
|
||||||
lda (TSKMGR.TSKPTR),y
|
|
||||||
|
|
||||||
jsr S.CreateChildProcessA
|
|
||||||
|
|
||||||
|
jsr S.CreateChildProcess
|
||||||
bcs .99
|
bcs .99
|
||||||
>STYA TSKMGR.pNewPS
|
|
||||||
|
sta S.CreateProcessA.CPSID
|
||||||
|
|
||||||
|
jsr S.SelectProcessA
|
||||||
|
|
||||||
pla Get Back CMD Line
|
lda S.CreateProcessA.Cmd
|
||||||
jsr S.InitProcessA
|
jsr S.InitProcessA
|
||||||
bcs .97 Init Failed or exit?
|
bcs .98 Init Failed or exit?
|
||||||
ldy #S.PS.ID
|
|
||||||
lda (TSKMGR.pNewPS),y
|
ldy #S.PS.PID switch back to Parent Process
|
||||||
|
lda (pPs),y
|
||||||
|
|
||||||
|
jsr S.SelectProcessA
|
||||||
|
|
||||||
|
lda S.CreateProcessA.CPSID
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.97 pha save error code
|
.98 pha save error code
|
||||||
tay error code =0 ?
|
|
||||||
bne .98 no, init failed
|
ldy #S.PS.PID switch back to Parent Process
|
||||||
>LDYA TSKMGR.pNewPS
|
lda (pPs),y
|
||||||
ldx #TSKMGR.QUIT yes, simply call QUIT function
|
jsr S.SelectProcessA
|
||||||
jsr Kernel.BINCALL Call QUIT function
|
|
||||||
|
lda S.CreateProcessA.CPSID
|
||||||
.98 ldy #S.PS.ID
|
|
||||||
lda (TSKMGR.pNewPS),y
|
|
||||||
jsr S.FreeProcessA
|
jsr S.FreeProcessA
|
||||||
bra .90
|
|
||||||
|
|
||||||
.99 plx Discard CMD Line
|
pla get back error code
|
||||||
pha save error code
|
|
||||||
|
|
||||||
.90 pla get back error code
|
.99 sec
|
||||||
sec
|
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
S.CreateProcessA.Cmd .BS 1
|
||||||
|
S.CreateProcessA.CPSID .BS 1
|
||||||
|
*--------------------------------------
|
||||||
* S.GetPSByIDA
|
* S.GetPSByIDA
|
||||||
* In :
|
* In :
|
||||||
* A = PID
|
* A = PID
|
||||||
* Out :
|
* Out :
|
||||||
* Y,A = PTR to TSKSLOT
|
* Y,A = PTR to TSKSLOT
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
S.GetPSByIDA tax
|
S.GetPSByIDA sta S.GetPSByIDA.PS
|
||||||
bne .10
|
|
||||||
>LDYAI TSKMGR.TABLE
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
|
|
||||||
.10 sta ZPQuickPtr1 Store requested PID
|
>LDYAI TskMgr.Table
|
||||||
lda #K.PS.MAX
|
>STYA ZPQuickPtr1
|
||||||
sta ZPQuickPtr1+1
|
|
||||||
|
|
||||||
>LDYAI TSKMGR.TABLE+S.PS.SIZE
|
lda S.GetPSByIDA.PS
|
||||||
>STYA ZPQuickPtr2
|
|
||||||
|
|
||||||
.1 lda (ZPQuickPtr2)
|
|
||||||
bpl .2
|
|
||||||
ldy #S.PS.ID
|
|
||||||
lda (ZPQuickPtr2),y
|
|
||||||
cmp ZPQuickPtr1
|
|
||||||
beq .8
|
beq .8
|
||||||
.2 dec ZPQuickPtr1+1
|
|
||||||
beq .9
|
ldx #0
|
||||||
lda ZPQuickPtr2
|
|
||||||
|
.1 inx
|
||||||
|
lda ZPQuickPtr1
|
||||||
clc
|
clc
|
||||||
adc #S.PS.SIZE
|
adc #S.PS.SIZE
|
||||||
sta ZPQuickPtr2
|
sta ZPQuickPtr1
|
||||||
bcc .1
|
|
||||||
inc ZPQuickPtr2+1
|
|
||||||
bra .1
|
|
||||||
.8 >LDYA ZPQuickPtr2
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
.9 sec
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
* PRIVATE
|
|
||||||
*--------------------------------------
|
|
||||||
* S.CreateChildProcessA
|
|
||||||
* in :
|
|
||||||
* A = Parent PSID
|
|
||||||
* out :
|
|
||||||
* X = PSID
|
|
||||||
* Y,A = PTR to S.PS
|
|
||||||
* we cannot use ZPQuickPtrs
|
|
||||||
* because of calling S.PStrCpyA & S.DupEnvA
|
|
||||||
*--------------------------------------
|
|
||||||
S.CreateChildProcessA
|
|
||||||
jsr S.GetPSByIDA
|
|
||||||
bcs .9
|
|
||||||
|
|
||||||
>STYA R.AX
|
|
||||||
>LDYAI TSKMGR.TABLE+S.PS.SIZE
|
|
||||||
>STYA R.BX
|
|
||||||
|
|
||||||
ldx #K.PS.MAX
|
|
||||||
.1 lda (R.BX)
|
|
||||||
bpl .3
|
|
||||||
lda R.BL
|
|
||||||
clc
|
|
||||||
adc #S.PS.SIZE
|
|
||||||
sta R.BL
|
|
||||||
bcc .2
|
bcc .2
|
||||||
inc R.BH
|
inc ZPQuickPtr1+1
|
||||||
.2 dex
|
|
||||||
|
.2 lda (ZPQuickPtr1)
|
||||||
|
bpl .3
|
||||||
|
|
||||||
|
ldy #S.PS.ID
|
||||||
|
lda (ZPQuickPtr1),y
|
||||||
|
cmp S.GetPSByIDA.PS
|
||||||
|
beq .8
|
||||||
|
|
||||||
|
.3 cpx TSKMGR.SIZE
|
||||||
bne .1
|
bne .1
|
||||||
lda #TSKMGR.ERROOS
|
|
||||||
sec
|
|
||||||
rts
|
|
||||||
|
|
||||||
.9 lda #TSKMGR.ERRNSP
|
.9 lda #TSKMGR.ERRNSP
|
||||||
|
sec
|
||||||
|
rts
|
||||||
|
|
||||||
|
.8 >LDYA ZPQuickPtr1
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
S.GetPSByIDA.PS .BS 1
|
||||||
|
*--------------------------------------
|
||||||
|
* PRIVATE
|
||||||
|
*--------------------------------------
|
||||||
|
* S.CreateChildProcess
|
||||||
|
* in :
|
||||||
|
* out :
|
||||||
|
* A = PSID
|
||||||
|
* we cannot use ZPQuickPtrs
|
||||||
|
* because of calling S.PStrCpyA & S.DupEnvA
|
||||||
|
*--------------------------------------
|
||||||
|
S.CreateChildProcess
|
||||||
|
>LDYAI TskMgr.Table+S.PS.SIZE
|
||||||
|
>STYA R.AX
|
||||||
|
|
||||||
|
ldx #0
|
||||||
|
|
||||||
|
.1 inx
|
||||||
|
cpx TSKMGR.SIZE
|
||||||
|
beq .2
|
||||||
|
|
||||||
|
lda (R.AX) Found an empty slot
|
||||||
|
bpl .3
|
||||||
|
lda R.AL
|
||||||
|
clc
|
||||||
|
adc #S.PS.SIZE
|
||||||
|
sta R.AL
|
||||||
|
bcc .1
|
||||||
|
inc R.AH
|
||||||
|
|
||||||
|
bra .1
|
||||||
|
|
||||||
|
.2 cpx #K.PS.MAX
|
||||||
|
bne .30
|
||||||
|
|
||||||
|
lda #TSKMGR.ERROOH
|
||||||
sec
|
sec
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
.30 inc TSKMGR.SIZE
|
||||||
|
|
||||||
.3 lda #S.PS.F.INUSE
|
.3 lda #S.PS.F.INUSE
|
||||||
sta (R.BX)
|
sta (R.AX)
|
||||||
ldy #S.PS.ID
|
|
||||||
lda (R.AX),y
|
|
||||||
ldy #S.PS.PID
|
|
||||||
sta (R.BX),y
|
|
||||||
|
|
||||||
inc TSKMGR.LASTID
|
.4 inc TSKMGR.LASTID Get a PSID not alredy running
|
||||||
bne .4
|
beq .4 not = 0
|
||||||
inc TSKMGR.LASTID Ensure PSID not 0
|
lda TSKMGR.LASTID
|
||||||
.4 lda TSKMGR.LASTID
|
jsr S.GetPSByIDA
|
||||||
|
bcc .4
|
||||||
|
|
||||||
ldy #S.PS.ID
|
ldy #S.PS.ID
|
||||||
sta (R.BX),y
|
lda TSKMGR.LASTID
|
||||||
|
sta (R.AX),y
|
||||||
|
|
||||||
lda #0
|
lda #0
|
||||||
ldy #S.PS.hCS
|
ldy #S.PS.hCS
|
||||||
.5 sta (R.BX),y Blank Everything in this S.PS
|
.5 sta (R.AX),y Blank Everything in this S.PS
|
||||||
iny
|
iny
|
||||||
cpy #S.PS.SIZE
|
cpy #S.PS.SIZE
|
||||||
bne .5
|
bne .5
|
||||||
|
|
||||||
ldy #S.PS.hPREFIX copy hPREFIX...
|
ldy #S.PS.hPREFIX copy hPREFIX...
|
||||||
lda (R.AX),y
|
lda (pPs),y
|
||||||
jsr S.PStrCpyA
|
jsr S.PStrCpyA
|
||||||
bcs .99
|
bcs .99
|
||||||
|
|
||||||
ldy #S.PS.hPREFIX
|
ldy #S.PS.hPREFIX
|
||||||
sta (R.BX),y
|
sta (R.AX),y
|
||||||
|
|
||||||
ldy #S.PS.hENV ...and hENV from parent PS
|
ldy #S.PS.hENV ...and hENV from parent PS
|
||||||
lda (R.AX),y
|
lda (pPs),y
|
||||||
jsr S.DupEnvA
|
jsr S.DupEnvA
|
||||||
bcs .99
|
bcs .99
|
||||||
|
|
||||||
ldy #S.PS.hENV
|
ldy #S.PS.hENV
|
||||||
sta (R.BX),y
|
sta (R.AX),y
|
||||||
|
|
||||||
ldy #S.PS.hINDEV
|
ldy #S.PS.hINDEV
|
||||||
lda (R.AX),y
|
lda (pPs),y
|
||||||
sta (R.BX),y
|
sta (R.AX),y
|
||||||
ldy #S.PS.hOUTDEV
|
ldy #S.PS.hOUTDEV
|
||||||
lda (R.AX),y
|
lda (pPs),y
|
||||||
sta (R.BX),y
|
sta (R.AX),y
|
||||||
ldy #S.PS.hERRDEV
|
ldy #S.PS.hERRDEV
|
||||||
lda (R.AX),y
|
lda (pPs),y
|
||||||
sta (R.BX),y
|
sta (R.AX),y
|
||||||
|
|
||||||
ldy #S.PS.ID
|
ldy #S.PS.ID
|
||||||
lda (R.BX),y
|
lda (pPs),y
|
||||||
tax Exit with X=PSID
|
|
||||||
>LDYA R.BX And Y,A=S.PS
|
ldy #S.PS.PID
|
||||||
clc
|
sta (R.AX),y
|
||||||
|
|
||||||
|
ldy #S.PS.ID
|
||||||
|
lda (R.AX),y
|
||||||
|
clc Exit with A=PSID
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.99 sec
|
.99 sec
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
@ -388,77 +416,116 @@ S.CreateChildProcessA
|
||||||
* In :
|
* In :
|
||||||
* A = hMem To Full Cmd Line
|
* A = hMem To Full Cmd Line
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* LS(2)
|
S.InitProcessA >PUSHA Push Cmd Line
|
||||||
* 0 : hMem to ENVPATH value
|
|
||||||
* 1 : hMem to FULLPATH value
|
|
||||||
*--------------------------------------
|
|
||||||
S.InitProcessA >ADDLOCAL 2
|
|
||||||
>PUSHA Push Cmd Line
|
|
||||||
>PUSHBI $20 Push SEP=' '
|
>PUSHBI $20 Push SEP=' '
|
||||||
>PUSHBI 0 Push 0 for getting CMD And ARGS
|
>PUSHBI 0 Push 0 for getting CMD And ARGS
|
||||||
jsr S.PStrGetTkn
|
jsr S.PStrGetTkn
|
||||||
bcs .99 OOM error
|
bcc .10
|
||||||
ldy #S.PS.hCMD
|
rts OOM error
|
||||||
sta (TSKMGR.pNewPS),y
|
|
||||||
|
.10 ldy #S.PS.hCMD
|
||||||
|
sta (pPs),y
|
||||||
>PUSHA push CMD for S.FileSearch
|
>PUSHA push CMD for S.FileSearch
|
||||||
txa
|
txa
|
||||||
ldy #S.PS.hARGS
|
ldy #S.PS.hARGS
|
||||||
sta (TSKMGR.pNewPS),y set ARGS hMem (0 if none)
|
sta (pPs),y set ARGS hMem (0 if none)
|
||||||
|
|
||||||
>PUSHWI ENV.PATH push ENVNAME=PATH
|
>PUSHWI ENV.PATH push ENVNAME=PATH
|
||||||
ldy #S.PS.hENV
|
ldy #S.PS.hENV
|
||||||
lda (TSKMGR.pNewPS),y
|
lda (pPs),y
|
||||||
>PUSHA
|
>PUSHA
|
||||||
jsr S.GetEnvVarP get value for ENV=PATH
|
jsr S.GetEnvVarP get value for ENV=PATH
|
||||||
bcs .99
|
bcs .99
|
||||||
>STAL 0 save VALUE hMem for discard
|
|
||||||
|
sta S.InitProcessA.PATH save VALUE hMem for discard
|
||||||
>PUSHA A=PStr to ENV Value
|
>PUSHA A=PStr to ENV Value
|
||||||
jsr S.FileSearch find File in %PATH%
|
jsr S.FileSearch find File in %PATH%
|
||||||
bcs .98
|
bcs .98
|
||||||
>STAL 1 save FULLPATH hMem for discard
|
|
||||||
|
sta S.InitProcessA.FULLPATH save FULLPATH hMem for discard
|
||||||
pha
|
pha
|
||||||
jsr S.SysScrPPSTRA
|
jsr S.SysScrPPSTRA
|
||||||
pla
|
pla
|
||||||
|
|
||||||
jsr S.LoadBinA A = BinPath hMem
|
jsr S.LoadBinA A = BinPath hMem
|
||||||
|
|
||||||
bcs .97
|
bcs .97
|
||||||
>STYA Kernel.JMP save PTR to Code Segment
|
|
||||||
|
>STYA pCode save PTR to Code Segment
|
||||||
txa
|
txa
|
||||||
ldy #S.PS.hCS
|
ldy #S.PS.hCS
|
||||||
sta (TSKMGR.pNewPS),y save CS hMem in TSKSLOT
|
sta (pPs),y save CS hMem in TSKSLOT
|
||||||
>LDYA TSKMGR.pNewPS
|
|
||||||
ldx #TSKMGR.INIT
|
ldy #H.BIN.BIN.DS.SIZE+1
|
||||||
jsr Kernel.BINCALL Call INIT function
|
lda (pCode),y Load DS.SIZE HI
|
||||||
|
tax
|
||||||
|
dey
|
||||||
|
ora (pCode),y
|
||||||
|
|
||||||
|
beq .1 DS.SIZE=0...
|
||||||
|
|
||||||
|
lda (pCode),y
|
||||||
|
>PUSHAX Push DS.SIZE
|
||||||
|
>PUSHBI 0 no option
|
||||||
|
jsr S.GetMem
|
||||||
|
bcs .97
|
||||||
|
|
||||||
|
>STYA pData
|
||||||
|
txa
|
||||||
|
ldy #S.PS.hDS
|
||||||
|
sta (pPs),y save DS hMem in TSKSLOT
|
||||||
|
|
||||||
|
.1 ldx #TSKMGR.INIT
|
||||||
|
jsr pCodeJmp Call INIT function
|
||||||
bcs .97
|
bcs .97
|
||||||
jsr .97
|
jsr .97
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.97 pha save ERR
|
.97 pha save ERR
|
||||||
>LDAL 1
|
lda S.InitProcessA.FULLPATH
|
||||||
jsr S.FreeMemA
|
jsr S.FreeMemA
|
||||||
pla
|
pla
|
||||||
|
|
||||||
.98 pha save ERR
|
.98 pha save ERR
|
||||||
>LDAL 0
|
lda S.InitProcessA.PATH
|
||||||
jsr S.FreeMemA
|
jsr S.FreeMemA
|
||||||
pla
|
pla
|
||||||
.99 >REMLOCAL 2
|
|
||||||
sec
|
.99 sec
|
||||||
rts
|
rts
|
||||||
|
S.InitProcessA.PATH .BS 1
|
||||||
|
S.InitProcessA.FULLPATH .BS 1
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* S.QuitProcessA
|
* S.SelectProcessA
|
||||||
* In : A = PID to Quit (call TSKMGR.QUIT)
|
* In : A=PSID
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
S.QuitProcessA jsr S.GetPSByIDA
|
S.SelectProcessA
|
||||||
bcs .9
|
jsr S.GetPSByIDA
|
||||||
>STYA ZPQuickPtr1
|
bcs *
|
||||||
ldy #S.PS.hCS
|
>STYA pPS
|
||||||
lda (ZPQuickPtr1),y
|
|
||||||
|
S.SelectProcess ldy #S.PS.hCS
|
||||||
|
lda (pPs),y
|
||||||
jsr S.GetMemPtrA
|
jsr S.GetMemPtrA
|
||||||
>STYA Kernel.JMP
|
>STYA pCode
|
||||||
>LDYA ZPQuickPtr1
|
|
||||||
ldx #TSKMGR.QUIT
|
ldy #S.PS.hDS
|
||||||
jsr Kernel.BINCALL Call QUIT function
|
lda (pPs),y
|
||||||
clc
|
beq .1
|
||||||
|
|
||||||
|
jsr S.GetMemPtrA
|
||||||
|
>STYA pData
|
||||||
|
|
||||||
|
.1 ldy #S.PS.hOUTDEV
|
||||||
|
lda (pPs),y
|
||||||
|
beq .8
|
||||||
|
|
||||||
|
jsr S.GetDevByIDA
|
||||||
|
>STYA pDev
|
||||||
|
|
||||||
|
.8 clc
|
||||||
rts
|
rts
|
||||||
.9 bra *
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* S.FreeProcessA
|
* S.FreeProcessA
|
||||||
* In : A = PID to free
|
* In : A = PID to free
|
||||||
|
@ -469,71 +536,46 @@ S.FreeProcessA jsr S.GetPSByIDA
|
||||||
ldy #S.PS.hARGS
|
ldy #S.PS.hARGS
|
||||||
lda (ZPQuickPtr1),y
|
lda (ZPQuickPtr1),y
|
||||||
beq .1
|
beq .1
|
||||||
|
|
||||||
jsr S.FreeMemA
|
jsr S.FreeMemA
|
||||||
|
|
||||||
.1 ldy #S.PS.hCMD
|
.1 ldy #S.PS.hCMD
|
||||||
lda (ZPQuickPtr1),y
|
lda (ZPQuickPtr1),y
|
||||||
beq .2
|
beq .2
|
||||||
|
|
||||||
jsr S.FreeMemA
|
jsr S.FreeMemA
|
||||||
|
|
||||||
.2 ldy #S.PS.hENV
|
.2 ldy #S.PS.hENV
|
||||||
lda (ZPQuickPtr1),y
|
lda (ZPQuickPtr1),y
|
||||||
beq .3
|
beq .3
|
||||||
|
|
||||||
jsr S.FreeMemA
|
jsr S.FreeMemA
|
||||||
|
|
||||||
.3 ldy #S.PS.hPREFIX
|
.3 ldy #S.PS.hPREFIX
|
||||||
lda (ZPQuickPtr1),y
|
lda (ZPQuickPtr1),y
|
||||||
beq .4
|
beq .4
|
||||||
|
|
||||||
jsr S.FreeMemA
|
jsr S.FreeMemA
|
||||||
|
|
||||||
.4 ldy #S.PS.hDS
|
.4 ldy #S.PS.hDS
|
||||||
lda (ZPQuickPtr1),y
|
lda (ZPQuickPtr1),y
|
||||||
beq .5
|
beq .5
|
||||||
|
|
||||||
jsr S.FreeMemA
|
jsr S.FreeMemA
|
||||||
|
|
||||||
.5 ldy #S.PS.hCS
|
.5 ldy #S.PS.hCS
|
||||||
lda (ZPQuickPtr1),y
|
lda (ZPQuickPtr1),y
|
||||||
beq .8
|
beq .8
|
||||||
|
|
||||||
jsr S.FreeMemA
|
jsr S.FreeMemA
|
||||||
|
|
||||||
.8 lda #0
|
.8 lda #0
|
||||||
sta (ZPQuickPtr1) Mark TSKSLOT as free
|
sta (ZPQuickPtr1) Mark TSKSLOT as free
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
.9 bra *
|
.9 bra *
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* S.IsPSRunningA
|
TSKMGR.SIZE .BS 1
|
||||||
* In :
|
|
||||||
* A = PID
|
|
||||||
* Out :
|
|
||||||
* CC = Running
|
|
||||||
* CS = no PS
|
|
||||||
*--------------------------------------
|
|
||||||
S.IsPSRunningA pha save PID
|
|
||||||
ldx #K.PS.MAX
|
|
||||||
>LDYAI TSKMGR.TABLE+S.PS.SIZE
|
|
||||||
>STYA ZPQuickPtr1
|
|
||||||
|
|
||||||
.1 lda (ZPQuickPtr1)
|
|
||||||
bpl .2
|
|
||||||
ldy #S.PS.ID
|
|
||||||
pla
|
|
||||||
pha
|
|
||||||
cmp (ZPQuickPtr1),y
|
|
||||||
beq .8
|
|
||||||
|
|
||||||
lda ZPQuickPtr1
|
|
||||||
clc
|
|
||||||
adc #S.PS.SIZE
|
|
||||||
sta ZPQuickPtr1
|
|
||||||
bcc .2
|
|
||||||
|
|
||||||
inc ZPQuickPtr2+1
|
|
||||||
.2 dex
|
|
||||||
bne .1
|
|
||||||
|
|
||||||
pla
|
|
||||||
sec
|
|
||||||
rts
|
|
||||||
|
|
||||||
.8 pla
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
TSKMGR.COUNT .BS 1
|
TSKMGR.COUNT .BS 1
|
||||||
TSKMGR.LASTID .BS 1
|
TSKMGR.LASTID .BS 1
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
|
320
SYS/KERNEL.S.txt
320
SYS/KERNEL.S.txt
|
@ -1,34 +1,35 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /A2OSX.BUILD
|
PREFIX /A2OSX.SRC
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
.LIST OFF
|
.LIST OFF
|
||||||
.OP 65C02
|
.OP 65C02
|
||||||
.OR $E000
|
.OR $D000
|
||||||
.TF SYS/KERNEL
|
.TF /A2OSX.BOOT/SYS/KERNEL
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.INB INC/MACROS.I
|
.INB INC/MACROS.I
|
||||||
.INB INC/KERNEL.I
|
.INB INC/KERNEL.I
|
||||||
.INB INC/A2OSX.I
|
.INB INC/A2OSX.I
|
||||||
|
.INB INC/A2OSX.API.I
|
||||||
.INB INC/IO.I
|
.INB INC/IO.I
|
||||||
.INB INC/PRODOS.I
|
.INB INC/PRODOS.I
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
KERNEL.Start jmp S.Kernel
|
KERNEL jmp S.KernelInit KERNEL.COLDBOOT
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
KERNEL.SYSCALL jmp (.1,x)
|
jmp (.1,x) KERNEL.SYSCALL
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.1 .DA S.GetMem $00
|
.1 .DA S.GetMem $00
|
||||||
.DA S.FreeMemA
|
.DA S.FreeMemA
|
||||||
.DA S.ClrMemA
|
|
||||||
.DA S.GetMemPtrA
|
.DA S.GetMemPtrA
|
||||||
|
|
||||||
.DA S.GetMemLenA
|
|
||||||
.DA S.GetMemByIDA
|
.DA S.GetMemByIDA
|
||||||
|
|
||||||
.DA S.GetMemByNameA
|
.DA S.GetMemByNameA
|
||||||
|
.DA S.GetMemByNameYA
|
||||||
|
.DA 0
|
||||||
.DA 0
|
.DA 0
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.DA S.NewPStr $10
|
.DA S.NewPStrYA $10
|
||||||
.DA S.PStrCpyA
|
.DA S.PStrCpyA
|
||||||
.DA S.PStrCat
|
.DA S.PStrCat
|
||||||
.DA S.PStrCmp
|
.DA S.PStrCmp
|
||||||
|
@ -39,7 +40,7 @@ KERNEL.SYSCALL jmp (.1,x)
|
||||||
.DA 0
|
.DA 0
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.DA S.LoadBinA $20
|
.DA S.LoadBinA $20
|
||||||
.DA S.LoadLib
|
.DA S.LoadLibYA
|
||||||
.DA S.UnloadLibA
|
.DA S.UnloadLibA
|
||||||
.DA S.LoadDrvA
|
.DA S.LoadDrvA
|
||||||
|
|
||||||
|
@ -49,7 +50,7 @@ KERNEL.SYSCALL jmp (.1,x)
|
||||||
.DA 0
|
.DA 0
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.DA S.ExpandPStrA $30
|
.DA S.ExpandPStrA $30
|
||||||
.DA S.ExpandPStr
|
.DA S.ExpandPStrYA
|
||||||
.DA S.GetEnvVarH
|
.DA S.GetEnvVarH
|
||||||
.DA S.GetEnvVarP
|
.DA S.GetEnvVarP
|
||||||
|
|
||||||
|
@ -58,51 +59,51 @@ KERNEL.SYSCALL jmp (.1,x)
|
||||||
.DA 0
|
.DA 0
|
||||||
.DA 0
|
.DA 0
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.DA S.MLICreate $40
|
.DA S.MLICreateFile $40
|
||||||
.DA S.MLIDestroy
|
.DA S.MLICreateDirA
|
||||||
|
.DA S.MLICreateDirYA
|
||||||
|
.DA S.MLIDestroyA
|
||||||
|
|
||||||
|
.DA S.MLIDestroyYA
|
||||||
.DA S.MLIRename
|
.DA S.MLIRename
|
||||||
.DA S.MLISetFileInfo
|
.DA S.MLISetFileInfo
|
||||||
|
|
||||||
.DA S.MLIGetFileInfoA
|
.DA S.MLIGetFileInfoA
|
||||||
|
|
||||||
|
.DA S.MLIGetFileInfoYA $50
|
||||||
.DA S.MLIOnline
|
.DA S.MLIOnline
|
||||||
.DA S.MLISetPrefix
|
.DA S.MLISetPrefixA
|
||||||
.DA S.MLIGetPrefixA
|
.DA S.MLISetPrefixYA
|
||||||
|
|
||||||
.DA S.MLIOpenA $50
|
.DA S.MLIGetPrefixA
|
||||||
.DA S.MLINewLine
|
.DA S.MLIGetPrefixYA
|
||||||
|
.DA S.MLIOpenA
|
||||||
|
.DA S.MLIOpenYA
|
||||||
|
|
||||||
|
.DA S.MLINewLine $60
|
||||||
.DA S.MLIRead
|
.DA S.MLIRead
|
||||||
.DA S.MLIWrite
|
.DA S.MLIWrite
|
||||||
|
|
||||||
.DA S.MLICloseA
|
.DA S.MLICloseA
|
||||||
|
|
||||||
.DA S.MLIFlushA
|
.DA S.MLIFlushA
|
||||||
.DA S.MLISetMark
|
.DA S.MLISetMark
|
||||||
.DA S.MLIGetMark
|
.DA S.MLIGetMarkA
|
||||||
|
.DA S.MLISetEOF
|
||||||
|
|
||||||
.DA S.MLISetEOF $60
|
.DA S.MLIGetEOFA $70
|
||||||
.DA S.MLIGetEOFA
|
.DA S.MLISetBuf
|
||||||
.DA 0
|
.DA S.MLIGetBuf
|
||||||
.DA 0
|
.DA S.MLIGetTime
|
||||||
|
|
||||||
.DA 0
|
.DA S.MLIAllocIRQ
|
||||||
.DA 0
|
.DA S.MLIDeallocIRQA
|
||||||
.DA 0
|
.DA S.MLIReadBlock
|
||||||
.DA 0
|
.DA S.MLIWriteBlock
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.DA S.GetDevByIDA $70
|
.DA S.GetDevByIDA $80
|
||||||
.DA S.GetDevByNameA
|
.DA S.GetDevByNameA
|
||||||
.DA S.GetDevTable
|
|
||||||
.DA S.GetDevInfoA
|
|
||||||
|
|
||||||
.DA S.DevOutA
|
|
||||||
.DA S.GetDevByNameYA
|
.DA S.GetDevByNameYA
|
||||||
.DA 0
|
.DA 0
|
||||||
.DA 0
|
|
||||||
*--------------------------------------
|
|
||||||
.DA S.GetEvent $80
|
|
||||||
.DA S.DestroyEvent
|
|
||||||
.DA 0
|
|
||||||
.DA 0
|
|
||||||
|
|
||||||
.DA 0
|
.DA 0
|
||||||
.DA 0
|
.DA 0
|
||||||
.DA 0
|
.DA 0
|
||||||
|
@ -139,58 +140,66 @@ KERNEL.SYSCALL jmp (.1,x)
|
||||||
.DA 0
|
.DA 0
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.DA S.ScreenSelectA $C0
|
.DA S.ScreenSelectA $C0
|
||||||
|
.DA 0
|
||||||
|
.DA S.SysScrPPSTRA
|
||||||
|
.DA S.SysScrPPSTRYA
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
S.Kernel jsr S.KernelInit
|
S.KernelInit sei
|
||||||
jsr S.KernelRun
|
ldx #$FF init 6502 stack to highest
|
||||||
jsr S.KernelQuit
|
txs
|
||||||
|
stx A2osX.SaveSM
|
||||||
bra *
|
stx A2osX.SaveSX
|
||||||
*--------------------------------------
|
cli
|
||||||
S.KernelInit >LDYAI D.STACKSEG
|
|
||||||
>STYA R.SP init Soft Stack
|
>LDYAI D.STACK.TOP
|
||||||
>STYA R.LS init LS
|
>STYA pStack init Soft Stack
|
||||||
|
|
||||||
stz A2osX.SCREENS
|
stz A2osX.SCREENS
|
||||||
stz A2osX.ACTIVESCRN
|
stz A2osX.ASCREEN
|
||||||
|
|
||||||
|
stz A2osX.CSCREEN.DEV
|
||||||
|
stz A2osX.GSCREEN.DEV
|
||||||
|
|
||||||
jsr S.SysScrInit
|
jsr S.SysScrInit
|
||||||
|
|
||||||
>LDYAI MSG.Init
|
>LDYAI MSG.Init
|
||||||
jsr S.SysScrPPSTR
|
jsr S.SysScrPPSTRYA
|
||||||
|
|
||||||
>LDYAI MSG.Init.MemMgr
|
>LDYAI MSG.Init.MemMgr
|
||||||
jsr S.SysScrPPSTR
|
jsr S.SysScrPPSTRYA
|
||||||
jsr S.MemMgrInit
|
jsr S.MemMgrInit
|
||||||
jsr S.SysScrPRCode
|
jsr S.SysScrPRCode
|
||||||
bcs .1
|
bcs .1
|
||||||
|
|
||||||
>LDYAI MSG.Init.TskMgr
|
>LDYAI MSG.Init.TskMgr
|
||||||
jsr S.SysScrPPSTR
|
jsr S.SysScrPPSTRYA
|
||||||
jsr S.TskMgrInit
|
jsr S.TskMgrInit
|
||||||
jsr S.SysScrPRCode
|
jsr S.SysScrPRCode
|
||||||
.1 bcs .2
|
.1 bcs .2
|
||||||
|
|
||||||
>LDYAI MSG.Init.DevMgr
|
>LDYAI MSG.Init.DevMgr
|
||||||
jsr S.SysScrPPSTR
|
jsr S.SysScrPPSTRYA
|
||||||
jsr S.DevMgrInit
|
jsr S.DevMgrInit
|
||||||
jsr S.SysScrPRCode
|
jsr S.SysScrPRCode
|
||||||
.2 bcs .3
|
.2 bcs .3
|
||||||
|
|
||||||
>LDYAI MSG.Init.EvtMgr
|
>LDYAI MSG.Init.EvtMgr
|
||||||
jsr S.SysScrPPSTR
|
jsr S.SysScrPPSTRYA
|
||||||
jsr S.EvtMgrInit
|
jsr S.EvtMgrInit
|
||||||
jsr S.SysScrPRCode
|
jsr S.SysScrPRCode
|
||||||
.3 bcs .99
|
.3 bcs .99
|
||||||
|
|
||||||
>LDYAI MSG.Init.Startup
|
>LDYAI MSG.Init.Startup
|
||||||
jsr S.SysScrPPSTR
|
jsr S.SysScrPPSTRYA
|
||||||
|
|
||||||
>PUSHWI STARTUP.FILE Build A2osX.STARTUP full path...
|
>LDYAI STARTUP.FILE Build A2osX.STARTUP full path...
|
||||||
jsr S.NewPStr
|
jsr S.NewPStrYA
|
||||||
pha save for discard
|
pha save for discard
|
||||||
|
|
||||||
>PUSHA
|
>PUSHA
|
||||||
>PUSHWI ENV.A2osX get KRNL root path
|
>PUSHWI ENV.A2osX get KRNL root path
|
||||||
ldy #S.PS.hENV
|
ldy #S.PS.hENV
|
||||||
lda TSKMGR.TABLE,y
|
lda TskMgr.Table,y
|
||||||
>PUSHA
|
>PUSHA
|
||||||
jsr S.GetEnvVarP
|
jsr S.GetEnvVarP
|
||||||
pha save for discard
|
pha save for discard
|
||||||
|
@ -200,7 +209,8 @@ S.KernelInit >LDYAI D.STACKSEG
|
||||||
|
|
||||||
jsr S.ExecFileA
|
jsr S.ExecFileA
|
||||||
jsr S.SysScrPRCode
|
jsr S.SysScrPRCode
|
||||||
|
bcs *
|
||||||
|
|
||||||
pla
|
pla
|
||||||
jsr S.FreeMemA
|
jsr S.FreeMemA
|
||||||
pla
|
pla
|
||||||
|
@ -209,11 +219,14 @@ S.KernelInit >LDYAI D.STACKSEG
|
||||||
jsr S.FreeMemA
|
jsr S.FreeMemA
|
||||||
|
|
||||||
>LDYAI MSG.Init.SysEnv
|
>LDYAI MSG.Init.SysEnv
|
||||||
jsr S.SysScrPPSTR
|
jsr S.SysScrPPSTRYA
|
||||||
|
|
||||||
jsr S.PrintSysEnv
|
jsr S.PrintSysEnv
|
||||||
|
|
||||||
.99 rts
|
.99 bcs *
|
||||||
|
|
||||||
|
>LDYAI MSG.Init.OK
|
||||||
|
jsr S.SysScrPPSTRYA
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
S.KernelRun jsr S.TskMgrRun
|
S.KernelRun jsr S.TskMgrRun
|
||||||
bcs .98
|
bcs .98
|
||||||
|
@ -225,22 +238,22 @@ S.KernelRun jsr S.TskMgrRun
|
||||||
jsr S.DispatchEvent
|
jsr S.DispatchEvent
|
||||||
bcc S.KernelRun CC=Event Dispatched
|
bcc S.KernelRun CC=Event Dispatched
|
||||||
|
|
||||||
lda (EVTMGR.EVTPTR)
|
lda (pEvent)
|
||||||
and #S.EVT.F.TIMER Discard any TIMER event
|
and #S.EVT.F.TIMER Discard any TIMER event
|
||||||
beq .1
|
beq .1
|
||||||
jsr S.DestroyEvent
|
jsr S.DestroyEvent
|
||||||
bra S.KernelRun
|
bra S.KernelRun
|
||||||
|
|
||||||
.1 lda (EVTMGR.EVTPTR)
|
.1 lda (pEvent)
|
||||||
and #S.EVT.F.KEY any special key?
|
and #S.EVT.F.KEY any special key?
|
||||||
beq .99
|
beq .99
|
||||||
|
|
||||||
ldy #S.EVT.DATAHI Open-Apple?
|
ldy #S.EVT.DATAHI Open-Apple?
|
||||||
lda (EVTMGR.EVTPTR),y
|
lda (pEvent),y
|
||||||
bpl .99
|
bpl .99
|
||||||
|
|
||||||
ldy #S.EVT.DATALO
|
ldy #S.EVT.DATALO
|
||||||
lda (EVTMGR.EVTPTR),y
|
lda (pEvent),y
|
||||||
|
|
||||||
cmp #$31
|
cmp #$31
|
||||||
bne .2
|
bne .2
|
||||||
|
@ -258,52 +271,24 @@ S.KernelRun jsr S.TskMgrRun
|
||||||
bne .8
|
bne .8
|
||||||
lda #A2osX.SCREENS.G
|
lda #A2osX.SCREENS.G
|
||||||
jsr S.ScreenSelectA
|
jsr S.ScreenSelectA
|
||||||
|
|
||||||
.8 jsr S.DestroyEvent
|
.8 jsr S.DestroyEvent
|
||||||
bra S.KernelRun
|
bra S.KernelRun
|
||||||
|
|
||||||
.98 lda #A2osX.SCREENS.S
|
.98 lda #A2osX.SCREENS.S
|
||||||
jsr S.ScreenSelectA
|
jsr S.ScreenSelectA
|
||||||
>LDYAI MSG.KRNLPANIC
|
>LDYAI MSG.KRNLPANIC
|
||||||
jsr S.SysScrPPSTR
|
jsr S.SysScrPPSTRYA
|
||||||
bra *
|
bra *
|
||||||
|
|
||||||
.99 >LDYAI MSG.EVNTPANIC
|
.99 >LDYAI MSG.EVNTPANIC
|
||||||
jsr S.SysScrPPSTR
|
jsr S.SysScrPPSTRYA
|
||||||
lda (EVTMGR.EVTPTR)
|
jsr S.DumpEvent
|
||||||
jsr S.SysScrPRBYTEA
|
|
||||||
ldy #S.EVT.hDEV
|
|
||||||
lda (EVTMGR.EVTPTR),y
|
|
||||||
jsr S.SysScrPRBYTEA
|
|
||||||
ldy #S.EVT.DATALO
|
|
||||||
lda (EVTMGR.EVTPTR),y
|
|
||||||
jsr S.SysScrPRBYTEA
|
|
||||||
ldy #S.EVT.DATAHI
|
|
||||||
lda (EVTMGR.EVTPTR),y
|
|
||||||
jsr S.SysScrPRBYTEA
|
|
||||||
|
|
||||||
lda #'.'
|
|
||||||
jsr S.SysScrCOUTA
|
|
||||||
ldy #S.EVT.DATAW1
|
|
||||||
lda (EVTMGR.EVTPTR),y
|
|
||||||
jsr S.SysScrPRBYTEA
|
|
||||||
iny
|
|
||||||
lda (EVTMGR.EVTPTR),y
|
|
||||||
jsr S.SysScrPRBYTEA
|
|
||||||
|
|
||||||
lda #'.'
|
|
||||||
jsr S.SysScrCOUTA
|
|
||||||
ldy #S.EVT.DATAW2
|
|
||||||
lda (EVTMGR.EVTPTR),y
|
|
||||||
jsr S.SysScrPRBYTEA
|
|
||||||
iny
|
|
||||||
lda (EVTMGR.EVTPTR),y
|
|
||||||
jsr S.SysScrPRBYTEA
|
|
||||||
|
|
||||||
jsr S.DestroyEvent
|
jsr S.DestroyEvent
|
||||||
jmp S.KernelRun
|
jmp S.KernelRun
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
S.KernelQuit clc
|
S.KernelQuit bra *
|
||||||
rts
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* PUBLIC
|
* PUBLIC
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
@ -311,38 +296,44 @@ S.KernelQuit clc
|
||||||
* in :
|
* in :
|
||||||
* A = hMem of FilePath (PSTRING)
|
* A = hMem of FilePath (PSTRING)
|
||||||
* out :
|
* out :
|
||||||
*--------------------------------------
|
*
|
||||||
* LS : (8)
|
|
||||||
* 0 = hMem of Loaded File
|
|
||||||
* 2 = PTR to File data
|
|
||||||
* 4 = Data Len
|
|
||||||
* 6 = CMD hMem
|
|
||||||
* 7 = ARGS hMem
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
S.ExecFileA jsr S.LoadFileA
|
S.ExecFileA jsr S.LoadFileA
|
||||||
bcc S.ExecFileAOK
|
bcc S.ExecFileAOK
|
||||||
rts
|
rts
|
||||||
S.ExecFileAOK >ADDLOCAL 8
|
|
||||||
>STYAL 4 Store File Length
|
S.ExecFileAOK >STYA S.ExecFileA.DataLen
|
||||||
|
stx S.ExecFileA.hData
|
||||||
txa
|
txa
|
||||||
>STAL 0 hMem of Loaded File
|
|
||||||
jsr S.GetMemPtrA
|
jsr S.GetMemPtrA
|
||||||
>STYAL 2
|
>STYA S.ExecFileA.DataPtr
|
||||||
|
|
||||||
.1 stz TmpBuffer256
|
.1 stz TmpBuffer256
|
||||||
.2 >LDYAL 2
|
|
||||||
|
.2 >LDYA S.ExecFileA.DataPtr
|
||||||
>STYA ZPQuickPtr1
|
>STYA ZPQuickPtr1
|
||||||
>INCLW 2
|
|
||||||
>DECLW 4
|
inc S.ExecFileA.DataPtr
|
||||||
|
bne .21
|
||||||
|
inc S.ExecFileA.DataPtr+1
|
||||||
|
|
||||||
|
.21 lda S.ExecFileA.DataLen
|
||||||
|
bne .22
|
||||||
|
dec S.ExecFileA.DataLen+1
|
||||||
|
.22 dec S.ExecFileA.DataLen
|
||||||
|
|
||||||
lda (ZPQuickPtr1)
|
lda (ZPQuickPtr1)
|
||||||
cmp #$0D
|
cmp #$0D
|
||||||
beq .3
|
beq .3
|
||||||
inc TmpBuffer256
|
inc TmpBuffer256
|
||||||
ldx TmpBuffer256
|
ldx TmpBuffer256
|
||||||
sta TmpBuffer256,x
|
sta TmpBuffer256,x
|
||||||
>LDAL 4
|
|
||||||
|
lda S.ExecFileA.DataLen
|
||||||
bne .2
|
bne .2
|
||||||
>LDAL 5
|
lda S.ExecFileA.DataLen+1
|
||||||
bne .2
|
bne .2
|
||||||
|
|
||||||
.3 lda TmpBuffer256
|
.3 lda TmpBuffer256
|
||||||
beq .4
|
beq .4
|
||||||
lda TmpBuffer256+1
|
lda TmpBuffer256+1
|
||||||
|
@ -353,83 +344,78 @@ S.ExecFileAOK >ADDLOCAL 8
|
||||||
lda #'>'
|
lda #'>'
|
||||||
jsr S.SysScrCOUTA
|
jsr S.SysScrCOUTA
|
||||||
>LDYAI TmpBuffer256
|
>LDYAI TmpBuffer256
|
||||||
jsr S.SysScrPPSTR
|
jsr S.SysScrPPSTRYA
|
||||||
>PUSHWI TmpBuffer256
|
>LDYAI TmpBuffer256
|
||||||
jsr S.NewPStr
|
jsr S.NewPStrYA
|
||||||
bcs .99
|
bcs .99
|
||||||
|
|
||||||
pha
|
pha
|
||||||
jsr S.ExecCmdLineA
|
jsr S.ExecCmdLineA
|
||||||
jsr S.SysScrPRCode
|
jsr S.SysScrPRCode
|
||||||
pla
|
pla
|
||||||
jsr S.FreeMemA
|
jsr S.FreeMemA
|
||||||
.4 >LDAL 4
|
|
||||||
.5 bne .6
|
.4 lda S.ExecFileA.DataLen
|
||||||
>LDAL 5
|
bne .1
|
||||||
beq .8
|
lda S.ExecFileA.DataLen+1
|
||||||
.6 jmp .1
|
bne .1
|
||||||
.8 jsr .99
|
|
||||||
|
jsr .99
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
.99 >LDAL 0
|
|
||||||
|
.99 lda S.ExecFileA.hData
|
||||||
jsr S.FreeMemA
|
jsr S.FreeMemA
|
||||||
>REMLOCAL 8
|
|
||||||
sec
|
sec
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
S.ExecCmdLineA >PUSHA
|
S.ExecCmdLineA >PUSHA Push Cmd Line
|
||||||
>PUSHBI $20 Push SEP=' '
|
>PUSHBI $20 Push SEP=' '
|
||||||
>PUSHBI 0 Push Token IDX
|
>PUSHBI 0 Push Token IDX
|
||||||
jsr S.PStrGetTkn
|
jsr S.PStrGetTkn
|
||||||
bcs .99
|
bcs .99
|
||||||
>STAL 6
|
|
||||||
pha
|
sta S.ExecFileA.hCMD
|
||||||
txa
|
stx S.ExecFileA.hARGS
|
||||||
>STAL 7
|
|
||||||
pla
|
|
||||||
jsr S.GetMemPtrA
|
jsr S.GetMemPtrA
|
||||||
>PUSHYA
|
>PUSHYA
|
||||||
>PUSHWI EXECCMDS
|
>PUSHWI EXECCMDS
|
||||||
jsr S.GetPStrIndex
|
jsr S.GetPStrIndex
|
||||||
bcs .98
|
bcs .98
|
||||||
|
|
||||||
asl
|
asl
|
||||||
tax
|
tax
|
||||||
>LDAL 7
|
lda S.ExecFileA.hARGS
|
||||||
jsr S.ExecCmdLine
|
jsr S.ExecCmdLine
|
||||||
bcs .98
|
bcs .98
|
||||||
|
|
||||||
jsr .98
|
jsr .98
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.98 pha
|
.98 pha
|
||||||
>LDAL 7
|
lda S.ExecFileA.hARGS
|
||||||
jsr S.FreeMemA
|
jsr S.FreeMemA
|
||||||
>LDAL 6
|
lda S.ExecFileA.hCMD
|
||||||
jsr S.FreeMemA
|
jsr S.FreeMemA
|
||||||
pla
|
pla
|
||||||
.99 sec
|
.99 sec
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
S.ExecFileA.hData .BS 1
|
||||||
|
S.ExecFileA.DataLen .BS 2
|
||||||
|
S.ExecFileA.DataPtr .BS 2
|
||||||
|
S.ExecFileA.hCMD .BS 1
|
||||||
|
S.ExecFileA.hARGS .BS 1
|
||||||
|
*--------------------------------------
|
||||||
S.ExecCmdLine jmp (.1,x)
|
S.ExecCmdLine jmp (.1,x)
|
||||||
.1 .DA S.SetSysEnvA
|
.1 .DA S.SetSysEnvA
|
||||||
.DA S.LoadDrvA VCPU!!!!
|
.DA S.LoadDrvA VCPU!!!!
|
||||||
.DA S.CreateProcessA VCPU!!!!
|
.DA S.CreateProcessA VCPU!!!!
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
S.PrintSysEnv ldy #S.PS.hENV
|
pDevJmp jmp (pDev)
|
||||||
lda TSKMGR.TABLE,y Get PS #0 ENV
|
pCodeJmp jmp (pCode)
|
||||||
jsr S.GetMemPtrA
|
pLibJmp jmp (pLib)
|
||||||
>STYA R.AX
|
|
||||||
.1 lda (R.AX)
|
|
||||||
beq .8 Ending 0 ?
|
|
||||||
>LDYA R.AX
|
|
||||||
jsr S.SysScrPPSTR
|
|
||||||
jsr S.SysScrCROUT
|
|
||||||
lda R.AL
|
|
||||||
sec
|
|
||||||
adc (R.AX) Add len+1 to PTR
|
|
||||||
sta R.AL
|
|
||||||
bcc .1
|
|
||||||
inc R.AH
|
|
||||||
bra .1
|
|
||||||
.8 rts
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
EXECCMDS >PSTRING "SET"
|
EXECCMDS >PSTRING "SET"
|
||||||
EXECCMDS1 >PSTRING "LOAD"
|
EXECCMDS1 >PSTRING "LOAD"
|
||||||
|
@ -443,6 +429,8 @@ MSG.Init.DevMgr >PSTRING "->DevMgr Init"
|
||||||
MSG.Init.EvtMgr >PSTRING "->EvtMgr Init"
|
MSG.Init.EvtMgr >PSTRING "->EvtMgr Init"
|
||||||
MSG.Init.Startup >PSTRING "EXEC A2osX.Startup...\n"
|
MSG.Init.Startup >PSTRING "EXEC A2osX.Startup...\n"
|
||||||
MSG.Init.SysEnv >PSTRING "SYS ENV:\n"
|
MSG.Init.SysEnv >PSTRING "SYS ENV:\n"
|
||||||
|
MSG.Init.OK >PSTRING "A2osX[Stage2]:Complete."
|
||||||
|
|
||||||
MSG.EVNTPANIC >PSTRING "\nEVT:F/hDev/DATA/W1/W2="
|
MSG.EVNTPANIC >PSTRING "\nEVT:F/hDev/DATA/W1/W2="
|
||||||
MSG.KRNLPANIC >PSTRING "\n\n!!!Kernel Panic!!!"
|
MSG.KRNLPANIC >PSTRING "\n\n!!!Kernel Panic!!!"
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
@ -454,25 +442,21 @@ ENV.DRV >PSTRING "DRV"
|
||||||
ENV.ETC >PSTRING "ETC"
|
ENV.ETC >PSTRING "ETC"
|
||||||
ENV.LIB >PSTRING "LIB"
|
ENV.LIB >PSTRING "LIB"
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.INB SYS/KERNEL.S.BIN
|
|
||||||
.INB SYS/KERNEL.S.DEV
|
|
||||||
.INB SYS/KERNEL.S.ENV
|
|
||||||
.INB SYS/KERNEL.S.EVT
|
|
||||||
.INB SYS/KERNEL.S.FS
|
|
||||||
.INB SYS/KERNEL.S.MEM
|
.INB SYS/KERNEL.S.MEM
|
||||||
.INB SYS/KERNEL.S.MLI
|
|
||||||
.INB SYS/KERNEL.S.NET
|
|
||||||
* .INB SYS/KERNEL.S.RDR
|
|
||||||
.INB SYS/KERNEL.S.SCR
|
.INB SYS/KERNEL.S.SCR
|
||||||
.INB SYS/KERNEL.S.STR
|
.INB SYS/KERNEL.S.STR
|
||||||
|
.INB SYS/KERNEL.S.FS
|
||||||
|
.INB SYS/KERNEL.S.MLI
|
||||||
|
.INB SYS/KERNEL.S.BIN
|
||||||
|
.INB SYS/KERNEL.S.DRV
|
||||||
|
.INB SYS/KERNEL.S.LIB
|
||||||
|
.INB SYS/KERNEL.S.NET
|
||||||
|
.INB SYS/KERNEL.S.RDR
|
||||||
|
.INB SYS/KERNEL.S.ENV
|
||||||
.INB SYS/KERNEL.S.TSK
|
.INB SYS/KERNEL.S.TSK
|
||||||
|
.INB SYS/KERNEL.S.EVT
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
KERNEL.End .EQ *
|
.INB SYS/KERNEL.S.DEV
|
||||||
Kernel.Size .EQ KERNEL.End-KERNEL.Start
|
|
||||||
*--------------------------------------
|
|
||||||
.DO Kernel.Size>$1FFA
|
|
||||||
ERROR:KERNEL.SIZE too big
|
|
||||||
.FIN
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
MAN
|
MAN
|
||||||
SAVE SYS/KERNEL.S
|
SAVE SYS/KERNEL.S
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /A2OSX.BUILD
|
PREFIX /A2OSX.SRC
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
.LIST OFF
|
.LIST OFF
|
||||||
.OP 65C02
|
.OP 65C02
|
||||||
.OR $2000
|
.OR $2000
|
||||||
.TF SYS/KM.NSC
|
.TF /A2OSX.BOOT/SYS/KM.NSC
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.INB INC/MACROS.I
|
.INB INC/MACROS.I
|
||||||
.INB INC/IO.I
|
.INB INC/IO.I
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
PR#3
|
PR#3
|
||||||
PREFIX /A2OSX.BUILD
|
PREFIX /A2OSX.SRC
|
||||||
NEW
|
NEW
|
||||||
INC 1
|
INC 1
|
||||||
AUTO 6
|
AUTO 6
|
||||||
.LIST OFF
|
.LIST OFF
|
||||||
.OP 65C02
|
.OP 65C02
|
||||||
.OR $2000
|
.OR $2000
|
||||||
.TF SYS/KM.RAMWORKS
|
.TF /A2OSX.BOOT/SYS/KM.RAMWORKS
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.INB INC/MACROS.I
|
.INB INC/MACROS.I
|
||||||
.INB INC/IO.I
|
.INB INC/IO.I
|
||||||
|
@ -166,7 +166,7 @@ RW.Install lda RRAMWRAMBNK1
|
||||||
|
|
||||||
inc DEVCNT
|
inc DEVCNT
|
||||||
ldx DEVCNT
|
ldx DEVCNT
|
||||||
lda #$30 Slot 3,Drive 1
|
lda #$30 Slot 3,Drive 1,0=Not Removable, 0=no int, 00=1 Volume
|
||||||
sta DEVLST,x
|
sta DEVLST,x
|
||||||
|
|
||||||
lda #RWDRV.START
|
lda #RWDRV.START
|
||||||
|
@ -276,7 +276,8 @@ RW.Format jsr RW.BLOCK.SET00
|
||||||
cmp #4 Are we writing first volume bitmap ?
|
cmp #4 Are we writing first volume bitmap ?
|
||||||
bne .63 no, regular one
|
bne .63 no, regular one
|
||||||
|
|
||||||
lda #$CF Mark Block 0 & 1 free, 2,3 used (vol hdr)
|
* lda #$CF Mark Block 0 & 1 free, 2,3 used (vol hdr)
|
||||||
|
lda #$0F
|
||||||
sta RW.BLOCK
|
sta RW.BLOCK
|
||||||
|
|
||||||
ldy #0
|
ldy #0
|
||||||
|
@ -371,9 +372,13 @@ RW.MSG.KO3 >CSTRING "RamWorks Drive Format Error."
|
||||||
* Driver for Ramworks in main LC
|
* Driver for Ramworks in main LC
|
||||||
* $FF00 -> $FF9A (Inclusive)
|
* $FF00 -> $FF9A (Inclusive)
|
||||||
* $FF58 MUST BE $60 (RTS)
|
* $FF58 MUST BE $60 (RTS)
|
||||||
* DO NOT trash DRV.BLKNUM as ProDOS
|
* DO NOT trash DRV.COMMAND...DRV.BLKNUM as ProDOS
|
||||||
* reuses it after Block operation
|
* reuses it after Block operation
|
||||||
|
* A1,A2 are used by Disk II Driver,
|
||||||
|
* so we use it safely as Tmp Ptr
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
DRV.A2L .EQ $3E
|
||||||
|
DRV.A2H .EQ $3F
|
||||||
DRV.COMMAND .EQ $42
|
DRV.COMMAND .EQ $42
|
||||||
DRV.BUFF .EQ $44
|
DRV.BUFF .EQ $44
|
||||||
DRV.BLKNUM .EQ $46
|
DRV.BLKNUM .EQ $46
|
||||||
|
@ -389,14 +394,13 @@ RWDRV.START cld ProDOS will check that byte!!!
|
||||||
bcs RWDRV.IOERR > 3 = Invalid OP, IO error
|
bcs RWDRV.IOERR > 3 = Invalid OP, IO error
|
||||||
|
|
||||||
lda DRV.BLKNUM
|
lda DRV.BLKNUM
|
||||||
sec
|
sbc RWDRV.MAXLO+1 Carry is Clear
|
||||||
sbc RWDRV.MAXLO+1
|
|
||||||
lda DRV.BLKNUM+1
|
lda DRV.BLKNUM+1
|
||||||
sbc RWDRV.MAXHI+1
|
sbc RWDRV.MAXHI+1
|
||||||
bcs RWDRV.IOERR DRV.BLKNUM >= RW.DRV.SIZE, IO error
|
bcs RWDRV.IOERR DRV.BLKNUM >= RW.DRV.SIZE, IO error
|
||||||
|
|
||||||
lda DRV.BLKNUM compute PAGE = blocknumLO *2
|
lda DRV.BLKNUM Get Back DRV.BLKNUM
|
||||||
asl
|
asl compute PAGE = blocknumLO *2
|
||||||
pha
|
pha
|
||||||
lda DRV.BLKNUM+1 compute BANK = blocknumHI *2
|
lda DRV.BLKNUM+1 compute BANK = blocknumHI *2
|
||||||
rol
|
rol
|
||||||
|
@ -408,50 +412,54 @@ RWDRV.START cld ProDOS will check that byte!!!
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* X=Page($02 -> $BF),A=Bank,Y=CMD
|
* X=Page($02 -> $BF),A=Bank,Y=CMD
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
php
|
* php
|
||||||
sei Disable IRQ as no vector set in RW Banks
|
sei Disable IRQ as no vector set in RW Banks
|
||||||
sta RWBankSelect Select RAMWorks Bank
|
sta RWBankSelect Select RAMWorks Bank
|
||||||
sta CLR80STORE make sure SETREADAUX/SETWRITEAUX effective everywhere
|
sta CLR80STORE make sure SETREADAUX/SETWRITEAUX effective everywhere
|
||||||
|
|
||||||
stx DRV.COMMAND+1 Reuse DRV.COMMAND for RAM PTR
|
inx second 256 bytes first
|
||||||
stz DRV.COMMAND
|
stx DRV.A2H Use DRV.A1L/H for RAM PTR
|
||||||
|
stz DRV.A2L
|
||||||
|
|
||||||
|
inc DRV.BUFF+1
|
||||||
|
|
||||||
dey Y=CMD, zero if read
|
dey Y=CMD, zero if read
|
||||||
bne RWDRV.W CC, go write
|
bne RWDRV.W non zero, go write
|
||||||
|
|
||||||
sta SETREADAUX
|
sta SETREADAUX
|
||||||
ldx #DRV.COMMAND READ:copy from RAM to BUFF
|
ldx #DRV.A2L READ:copy from RAM to BUFF
|
||||||
ldy #DRV.BUFF
|
lda #DRV.BUFF
|
||||||
bra RWDRV.RW
|
bra RWDRV.RW
|
||||||
|
|
||||||
RWDRV.W sta SETWRITEAUX
|
RWDRV.W sta SETWRITEAUX
|
||||||
ldx #DRV.BUFF
|
ldx #DRV.BUFF
|
||||||
ldy #DRV.COMMAND WRITE:copy from BUFF to RAM
|
lda #DRV.A2L WRITE:copy from BUFF to RAM
|
||||||
|
dey Make sure Y=0 for main loop below
|
||||||
|
|
||||||
RWDRV.RW stx RWDRV.RW.SRC+1
|
RWDRV.RW stx RWDRV.RW.SRC+1
|
||||||
sty RWDRV.RW.DST+1
|
sta RWDRV.RW.DST+1
|
||||||
|
|
||||||
ldx #2 2 pages to copy
|
ldx #2 2 pages to copy
|
||||||
|
|
||||||
ldy #0
|
|
||||||
|
|
||||||
RWDRV.RW.SRC lda ($FF),y
|
RWDRV.RW.SRC lda ($FF),y
|
||||||
RWDRV.RW.DST sta ($FF),y
|
RWDRV.RW.DST sta ($FF),y
|
||||||
iny
|
iny
|
||||||
bne RWDRV.RW.SRC
|
bne RWDRV.RW.SRC
|
||||||
|
|
||||||
|
|
||||||
.HS 24 BIT Zero Page to skip RTS
|
.HS 24 BIT Zero Page to skip RTS
|
||||||
RWDRV.RTS rts $FF58 Must Be RTS
|
RWDRV.RTS rts $FF58 Must Be RTS
|
||||||
|
|
||||||
inc DRV.BUFF+1
|
dec DRV.BUFF+1
|
||||||
inc DRV.COMMAND+1
|
dec DRV.A2H
|
||||||
dex
|
dex
|
||||||
bne RWDRV.RW.SRC
|
bne RWDRV.RW.SRC
|
||||||
|
|
||||||
stz RWBankSelect
|
stz RWBankSelect
|
||||||
sta CLRREADAUX
|
sta CLRREADAUX
|
||||||
sta CLRWRITEAUX
|
sta CLRWRITEAUX
|
||||||
plp
|
* plp
|
||||||
|
cli
|
||||||
|
|
||||||
RMDRV.CMDSTATUS
|
RMDRV.CMDSTATUS
|
||||||
RWDRV.MAXLO ldx #$FF return device block count in X,Y...
|
RWDRV.MAXLO ldx #$FF return device block count in X,Y...
|
||||||
|
|
16
_Make_DIR.txt
Normal file
16
_Make_DIR.txt
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
PREFIX /A2OSX.BOOT
|
||||||
|
CREATE BIN
|
||||||
|
CREATE DRV
|
||||||
|
CREATE ETC
|
||||||
|
CREATE INC
|
||||||
|
CREATE LIB
|
||||||
|
CREATE SBIN
|
||||||
|
CREATE SYS
|
||||||
|
PREFIX /A2OSX.SRC
|
||||||
|
CREATE BIN
|
||||||
|
CREATE DRV
|
||||||
|
CREATE ETC
|
||||||
|
CREATE INC
|
||||||
|
CREATE LIB
|
||||||
|
CREATE SBIN
|
||||||
|
CREATE SYS
|
|
@ -1,5 +1,12 @@
|
||||||
PREFIX /A2OSX.BUILD
|
PR#3
|
||||||
|
PREFIX /A2OSX.SRC
|
||||||
NEW
|
NEW
|
||||||
BLOAD A
|
INC 1
|
||||||
|
AUTO 6
|
||||||
|
PREFIX /A2OSX.BOOT
|
||||||
DELETE A2OSX.SYSTEM
|
DELETE A2OSX.SYSTEM
|
||||||
|
BLOAD A
|
||||||
BSAVE A2OSX.SYSTEM,TSYS,A$2000,L$1300
|
BSAVE A2OSX.SYSTEM,TSYS,A$2000,L$1300
|
||||||
|
-A2OSX.SYSTEM
|
||||||
|
MAN
|
||||||
|
TEXT MSYS
|
||||||
|
|
Loading…
Reference in New Issue
Block a user