mirror of
https://github.com/A2osX/A2osX.git
synced 2024-12-28 10:29:49 +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
|
||||
PREFIX /A2OSX.BUILD
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
@ -12,36 +12,16 @@ A2osX.GP.B.start
|
||||
.PH $BE00
|
||||
*--------------------------------------
|
||||
A2osX.GP.Start bra A2osX.SYSCALL1
|
||||
bra A2osX.MLICALL1
|
||||
bra A2osX.LIBCALL1
|
||||
bra A2osX.SLEEP1
|
||||
bra Kernel.MLICALL1
|
||||
bra Kernel.DRVCALL1
|
||||
bra Kernel.BINCALL1
|
||||
bra Kernel.LIBCALL1
|
||||
.BS A2osX.GPCODE-*
|
||||
bra A2osX.MLICALL1
|
||||
*--------------------------------------
|
||||
* A2osX.SYSCALL (MAINLC to AUXLC)
|
||||
* In:
|
||||
* X = SYSfnc.Index
|
||||
* Y,A = free for Inline param
|
||||
*--------------------------------------
|
||||
A2osX.SYSCALL1 jsr GO.AUXLC
|
||||
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
|
||||
A2osX.SYSCALL1 jmp KERNEL.SYSCALL
|
||||
*--------------------------------------
|
||||
* LIBCALL (MAINLC to MAINLC)
|
||||
* In:
|
||||
@ -58,49 +38,41 @@ A2osX.LIBCALL1 pha
|
||||
pla
|
||||
.1 jmp $FFFF
|
||||
*--------------------------------------
|
||||
A2osX.SLEEP1 jmp A2osX.SLEEP2
|
||||
*--------------------------------------
|
||||
* SLEEP (MAINLC to AUXLC)
|
||||
* 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)
|
||||
* In:
|
||||
* X = MLI Function
|
||||
* A = Param Count
|
||||
*--------------------------------------
|
||||
Kernel.MLICALL1 jsr GO.MAINLC
|
||||
jsr A2osX.MLICALL1
|
||||
jsr GO.AUXLC
|
||||
rts
|
||||
*--------------------------------------
|
||||
* Kernel.DRVCALL (AUXLC to MAINLC)
|
||||
* 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
|
||||
A2osX.MLICALL1 jsr GO.MAINLC
|
||||
stx .1
|
||||
sta MLICALL.PARAMS
|
||||
jsr MLI
|
||||
.1 .BS 1
|
||||
.DA MLICALL.PARAMS
|
||||
jsr GO.AUXLC
|
||||
rts
|
||||
*--------------------------------------
|
||||
@ -123,28 +95,27 @@ GO.SAVE.REG sta A2osX.SaveA
|
||||
.1 stx GO.EXIT.JMP+1
|
||||
sty GO.EXIT.JMP+2
|
||||
sei
|
||||
ldy R.SP
|
||||
ldy pStack
|
||||
bcs GO.AUXLC1
|
||||
|
||||
GO.MAINLC1 tsx
|
||||
stx A2osX.SaveSX
|
||||
stx CLRALTZP
|
||||
ldx RROMBNK2
|
||||
ldx A2osX.SaveSM
|
||||
txs
|
||||
sty R.SP
|
||||
stx CLRALTZP
|
||||
ldx RROMBNK1
|
||||
bra GO.EXIT
|
||||
*--------------------------------------
|
||||
GO.AUXLC1 tsx
|
||||
GO.AUXLC1 stx SETALTZP
|
||||
tsx
|
||||
stx A2osX.SaveSM
|
||||
stx SETALTZP
|
||||
ldx RRAMWRAMBNK1
|
||||
ldx RRAMWRAMBNK1
|
||||
ldx A2osX.SaveSX
|
||||
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
|
||||
ldx A2osX.SaveX
|
||||
lda A2osX.SaveA
|
||||
@ -152,30 +123,12 @@ GO.EXIT pha push P on stack
|
||||
GO.EXIT.JMP jmp $FFFF
|
||||
*--------------------------------------
|
||||
GO.Reset jsr GO.AUXLC
|
||||
jsr $E000
|
||||
jmp KERNEL.COLDBOOT
|
||||
*--------------------------------------
|
||||
GO.Kernel jmp (Kernel.JMP)
|
||||
*--------------------------------------
|
||||
A2osX.SLEEP2 ldy #S.PS.hCS
|
||||
lda (pPsContext),y
|
||||
>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.SaveCS .BS 2
|
||||
A2osX.SaveA .BS 1
|
||||
A2osX.SaveX .BS 1
|
||||
A2osX.SaveY .BS 1
|
||||
*--------------------------------------
|
||||
A2osX.GP.End .EQ *
|
||||
A2osX.GP.SIZE .EQ A2osX.GP.END-A2osX.GP.START
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /A2OSX.BUILD
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
@ -20,10 +20,16 @@ A2osX.QC.B.Start
|
||||
*--------------------------------------
|
||||
A2osX.QC.Start .EQ *
|
||||
A2osX.QC cld
|
||||
jmp A2osX.QC.init
|
||||
A2osX.QC.Prefix .BS 32
|
||||
*--------------------------------------
|
||||
A2osX.QC.init bit RROMBNK1
|
||||
jmp A2osX.QC.Start1
|
||||
|
||||
A2osX.QC.Prefix .BS 32
|
||||
|
||||
A2osX.QC.Start1 sei
|
||||
ldx #$FF
|
||||
txs
|
||||
cli
|
||||
|
||||
bit RROMBNK1
|
||||
>LDYAI A2osX.QC
|
||||
>STYA POWERUP
|
||||
jsr SETPWRC
|
||||
@ -53,11 +59,14 @@ A2osX.QC.init bit RROMBNK1
|
||||
.DA #MLISETPREFIX
|
||||
.DA MLISETPREFIX00
|
||||
bcc .4
|
||||
|
||||
>LDAXI MSG.SETPREFIXKO
|
||||
jsr A2osX.QC.PrintAX
|
||||
>LDAXI A2osX.QC.Prefix
|
||||
jsr A2osX.QC.PrintAX
|
||||
|
||||
>DEBUG
|
||||
|
||||
bra .3
|
||||
|
||||
.4 >LDAXI MSG.SETPREFIXOK
|
||||
@ -69,26 +78,18 @@ A2osX.QC.init bit RROMBNK1
|
||||
jsr A2osX.QC.KLoad
|
||||
bcs .9
|
||||
|
||||
>LDAXI MSG.KLOADING.OK
|
||||
jsr A2osX.QC.PrintAX
|
||||
|
||||
>LDYAI GO.Reset
|
||||
>STYA POWERUP
|
||||
bit RROMBNK1
|
||||
jsr SETPWRC
|
||||
|
||||
php
|
||||
pla
|
||||
sei
|
||||
tsx
|
||||
stx A2osX.SaveSM
|
||||
stx SETALTZP
|
||||
ldx A2osX.SaveSX
|
||||
txs
|
||||
bit RRAMWRAMBNK1
|
||||
bit RRAMWRAMBNK1
|
||||
pha
|
||||
plp
|
||||
jmp $E000
|
||||
>LDAXI MSG.STAGE1OK
|
||||
jsr A2osX.QC.PrintAX
|
||||
|
||||
>DEBUG
|
||||
|
||||
jmp (POWERUP)
|
||||
|
||||
.9 >LDAXI MSG.KLOADING.KO
|
||||
jsr A2osX.QC.PrintAX
|
||||
bra *
|
||||
@ -136,11 +137,11 @@ A2osX.QC.KLoad ldx A2osX.QC.Prefix
|
||||
lda RRAMWRAMBNK1
|
||||
lda RRAMWRAMBNK1
|
||||
|
||||
>LDYAI MLIREAD00.ADDR+$1F00
|
||||
>LDYAI MLIREAD00.ADDR+$2F00
|
||||
>STYA TmpPtr1
|
||||
>LDYAI $E000+$1F00
|
||||
>LDYAI $D000+$2F00
|
||||
>STYA TmpPtr2
|
||||
ldx #$20
|
||||
ldx #$30
|
||||
ldy #$F9 do not trash NMI,BRK,IRQ Vectors
|
||||
|
||||
.3 lda (TmpPtr1),y
|
||||
@ -186,7 +187,7 @@ MLIOPEN00 .DA #3
|
||||
MLIREAD00 .DA #4
|
||||
.BS 1
|
||||
.DA MLIREAD00.ADDR
|
||||
.DA $1FFA
|
||||
.DA $2FFA
|
||||
.BS 2
|
||||
MLICLOSE00 .DA #1
|
||||
.BS 1
|
||||
@ -197,7 +198,6 @@ MSG.STAGE1 >PSTRING "A2osX[Stage1]:Init"
|
||||
MSG.SETPREFIXOK >PSTRING "Set Prefix OK"
|
||||
MSG.SETPREFIXKO >PSTRING "Insert Vol:"
|
||||
MSG.KLOADING >PSTRING "Loading Kernel..."
|
||||
MSG.KLOADING.OK >PSTRING "OK"
|
||||
MSG.KLOADING.KO >PSTRING "Error While Loading Kernel."
|
||||
MSG.STAGE1OK >PSTRING "A2osX[Stage1]:Complete."
|
||||
*--------------------------------------
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /A2OSX.BUILD
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
63
A2osX.S.txt
63
A2osX.S.txt
@ -1,15 +1,17 @@
|
||||
PR#3
|
||||
PREFIX /A2OSX.BUILD
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
.OR $2000
|
||||
.TF A
|
||||
.TF /A2OSX.BOOT/A
|
||||
*--------------------------------------
|
||||
.INB INC/MACROS.I
|
||||
.INB INC/A2OSX.I
|
||||
.INB INC/A2OSX.API.I
|
||||
.INB INC/KERNEL.I
|
||||
.INB INC/IO.I
|
||||
.INB INC/MONITOR.I
|
||||
.INB INC/PRODOS.I
|
||||
@ -27,11 +29,15 @@ A2osX.ReadBuff .EQ $6800 512 Buffer for MLIREAD01
|
||||
Boot.Prefix .EQ $6A00 MLI.MAXPATH
|
||||
KM.Filename .EQ $6A80 MLI.MAXPATH
|
||||
*--------------------------------------
|
||||
Z80STACK .EQ $0FFF (0FFFFh) Down to $0F00
|
||||
Z80JMP .EQ $1000
|
||||
*--------------------------------------
|
||||
A2osX.Start .EQ *
|
||||
.PH A2osX.RelocAddr
|
||||
A2osX.Init0 ldx #$FF init 6502 stack to highest
|
||||
A2osX.Init0
|
||||
|
||||
ldx #$FF init 6502 stack to highest
|
||||
txs
|
||||
stx A2osX.SaveSM
|
||||
|
||||
>LDYAI A2osX.Start
|
||||
>STYA TmpPtr1
|
||||
@ -50,16 +56,14 @@ A2osX.Init0 ldx #$FF init 6502 stack to highest
|
||||
inc TmpPtr2+1
|
||||
dex
|
||||
bne .1
|
||||
|
||||
|
||||
jmp A2osX.Init1
|
||||
*--------------------------------------
|
||||
A2osX.Init1 jsr HOME
|
||||
A2osX.Init1 bit RROMBNK1
|
||||
jsr HOME
|
||||
>LDAXI MSG.STAGE0
|
||||
jsr PrintCStrAX
|
||||
|
||||
>LDYAI D.STACKSEG
|
||||
>STYA R.SP init Soft Stack
|
||||
|
||||
>LDAXI MSG.SYSMEM
|
||||
jsr PrintCStrAX
|
||||
|
||||
@ -78,7 +82,10 @@ A2osX.Init1 jsr HOME
|
||||
>LDAXI MSG.CPU
|
||||
jsr PrintCStrAX
|
||||
jsr Init6502 Y = CPU type
|
||||
sty A2osX.CPUTYPE
|
||||
tya
|
||||
ora #$60
|
||||
sta A2osX.CPUTYPE
|
||||
|
||||
lda MSG.CPUTYPEH,y
|
||||
tax
|
||||
lda MSG.CPUTYPEL,y
|
||||
@ -110,17 +117,20 @@ A2osX.Prefix >LDAXI MSG.BOOTPREFIX
|
||||
*--------------------------------------
|
||||
A2osX.RamDrv >LDAXI MSG.RAMDRV
|
||||
jsr PrintCStrAX
|
||||
|
||||
jsr DisableRamDRV
|
||||
bcc .2
|
||||
|
||||
tax
|
||||
beq .1
|
||||
>LDAXI MSG.RAMDRV.KO1
|
||||
bne .1
|
||||
>LDAXI MSG.RAMDRV.KO0
|
||||
jsr PrintCStrAX
|
||||
bra A2osX.Z80
|
||||
|
||||
.1 >LDAXI MSG.RAMDRV.KO0
|
||||
.1 >LDAXI MSG.RAMDRV.KO1
|
||||
jsr PrintCStrAX
|
||||
bra A2osX.Z80
|
||||
|
||||
.2 >LDAXI MSG.RAMDRV.OK
|
||||
jsr PrintCStrAX
|
||||
*--------------------------------------
|
||||
@ -137,8 +147,6 @@ A2osX.Z80 >LDAXI MSG.Z80
|
||||
.1 >LDAXI MSG.Z80.KO
|
||||
jsr PrintCStrAX
|
||||
*--------------------------------------
|
||||
* WARNING :
|
||||
*--------------------------------------
|
||||
A2osX.SetupQC lda RRAMWRAMBNK2
|
||||
lda RRAMWRAMBNK2
|
||||
|
||||
@ -162,7 +170,7 @@ A2osX.MLIQuit >LDAXI MSG.STAGE0OK
|
||||
jsr PrintCStrAX
|
||||
|
||||
>DEBUG
|
||||
|
||||
|
||||
jsr MLI
|
||||
.DA #MLIQUIT
|
||||
.DA MLIQUIT01
|
||||
@ -213,24 +221,30 @@ DisableRamDRV php
|
||||
beq .9 S3D2=NODEV, nothing to do
|
||||
|
||||
.1 ldx DEVCNT
|
||||
|
||||
.2 lda DEVLST,x LOOKING FOR $BF, $BB, $B7, $B3
|
||||
and #$F3
|
||||
cmp #$B3
|
||||
beq .3
|
||||
|
||||
dex
|
||||
bpl .2
|
||||
|
||||
plp
|
||||
lda #1 No device found, exit with error
|
||||
sec
|
||||
rts
|
||||
|
||||
.3 ldx #0
|
||||
.3 cpx DEVCNT
|
||||
beq .5
|
||||
|
||||
.4 lda DEVLST+1,x
|
||||
sta DEVLST,x
|
||||
inx
|
||||
cpx DEVCNT
|
||||
bne .4
|
||||
|
||||
.5 ldx DEVCNT
|
||||
stz DEVLST,x
|
||||
dec DEVCNT
|
||||
|
||||
@ -239,6 +253,10 @@ DisableRamDRV php
|
||||
lda DEVPTRS0D1+1
|
||||
sta DEVPTRS3D2+1
|
||||
plp
|
||||
|
||||
jsr MLI
|
||||
.DA #MLIONLINE
|
||||
.DA MLIONLINE01
|
||||
clc Success!!
|
||||
rts
|
||||
|
||||
@ -247,7 +265,10 @@ DisableRamDRV php
|
||||
sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
InitZ80 ldx #Z80Code.Size
|
||||
InitZ80 sec
|
||||
rts
|
||||
|
||||
ldx #Z80Code.Size
|
||||
.1 lda Z80Code.Start-1,x
|
||||
sta $1000-1,x 00000H for Z80
|
||||
dex
|
||||
@ -435,7 +456,7 @@ MSG.Z80 >CSTRING "Detecting Z80 CPU..."
|
||||
MSG.Z80.OK >CSTRING "Detected In Slot %d.\n"
|
||||
MSG.Z80.KO >CSTRING "Not Detected.\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.CPUTYPEL .DA #MSG.6502
|
||||
.DA #MSG.65C02
|
||||
@ -452,6 +473,10 @@ MSG.65C816 >CSTRING "65C816.\n"
|
||||
*--------------------------------------
|
||||
MLIGETPREFIX01 .DA #1
|
||||
.DA Boot.Prefix
|
||||
MLIONLINE01 .DA #2
|
||||
.DA #0
|
||||
.DA MLIONLINE01BUF
|
||||
MLIONLINE01BUF .BS 256
|
||||
MLIOPEN01 .DA #3 For DIR listing
|
||||
.DA Boot.Prefix
|
||||
.DA A2osX.OpenBuff1
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /A2OSX.BUILD
|
||||
PREFIX /A2OSX.BOOT
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
@ -8,15 +8,16 @@ SET DRV=%A2OSX%DRV/
|
||||
SET ETC=%A2OSX%ETC/
|
||||
SET LIB=%A2OSX%LIB/
|
||||
LOAD CONSOLE.DRV
|
||||
EXEC GETTY KBD CON SHELL
|
||||
*LOAD SSC.DRV 9600 N 8 1
|
||||
*EXEC GETTY COM2 COM2 SHELL
|
||||
EXEC GETTY KBD CON LOGIN
|
||||
*LOAD SSC.DRV 9600 N 8 1 X
|
||||
*EXEC GETTY COM2 COM2 LOGIN
|
||||
*LOAD PPIC.DRV
|
||||
LOAD UTHERNET.DRV 000E3A123456
|
||||
EXEC TCPIP ETH3
|
||||
EXEC DHCPCLNT
|
||||
*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 MOUSE.DRV
|
||||
EXEC GUI
|
||||
|
@ -1,15 +1,16 @@
|
||||
PR#3
|
||||
PREFIX /A2OSX.BUILD
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
.OR $2000
|
||||
.TF BIN/ARP
|
||||
.TF /A2OSX.BOOT/BIN/ARP
|
||||
*--------------------------------------
|
||||
.INB INC/MACROS.I
|
||||
.INB INC/A2OSX.I
|
||||
.INB INC/A2OSX.API.I
|
||||
.INB INC/KERNEL.I
|
||||
.INB INC/LIBSTR.I
|
||||
.INB INC/LIBTCPIP.I
|
||||
@ -18,20 +19,23 @@ ARP.TIMEOUT .EQ 50 50*100ms = 5 sec.
|
||||
*--------------------------------------
|
||||
ZPPTR1 .EQ ZPBIN
|
||||
*--------------------------------------
|
||||
* Main entry point
|
||||
*--------------------------------------
|
||||
* Code signature and INIT table
|
||||
*--------------------------------------
|
||||
* CLD $D8
|
||||
* JMP (*,x) $7C
|
||||
* #JMPTABLE
|
||||
* /JMPTABLE
|
||||
* 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
|
||||
.DA DS.END-DS.START Data Segment to Allocate
|
||||
.DA 0
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
* Relocation Table
|
||||
*--------------------------------------
|
||||
.1 .DA CS.INIT
|
||||
.DA CS.RUN
|
||||
.DA CS.EVENT
|
||||
.DA CS.DOEVENT
|
||||
.DA CS.QUIT
|
||||
L.LIBSTR .DA LIBSTR
|
||||
L.LIBTCPIP .DA LIBTCPIP
|
||||
@ -42,17 +46,17 @@ L.MSG0 .DA MSG0
|
||||
L.MSG1 .DA MSG1
|
||||
L.MSG2 .DA MSG2
|
||||
.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
|
||||
|
||||
>LIBLOADP L.LIBTCPIP
|
||||
>LDYA L.LIBTCPIP
|
||||
>LOADLIBYA
|
||||
sta hLIBTCPIP
|
||||
|
||||
ldy #S.PS.hARGS
|
||||
lda (pPsContext),y
|
||||
lda (pPs),y
|
||||
beq CS.INIT.CACHE
|
||||
|
||||
pha
|
||||
@ -66,9 +70,9 @@ CS.INIT >LIBLOADP L.LIBSTR
|
||||
|
||||
stz bCTRLC
|
||||
|
||||
lda (pPsContext)
|
||||
lda (pPs)
|
||||
ora #S.PS.F.EVENT Now accept events
|
||||
sta (pPsContext)
|
||||
sta (pPs)
|
||||
|
||||
rts CC,Give back control to CS.RUN
|
||||
|
||||
@ -152,8 +156,7 @@ CS.RUN lda #ARP.TIMEOUT
|
||||
.9 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.EVENT >PULLW pEvent
|
||||
lda (pEvent)
|
||||
CS.DOEVENT lda (pEvent)
|
||||
and #S.EVT.F.TIMER is it a TIMER event?
|
||||
beq .1 no....
|
||||
|
||||
@ -170,7 +173,7 @@ CS.EVENT >PULLW pEvent
|
||||
ldy #S.EVT.hDEV is Event from active IN device?
|
||||
lda (pEvent),y
|
||||
ldy #S.PS.hINDEV
|
||||
cmp (pPsContext),y
|
||||
cmp (pPs),y
|
||||
bne .9
|
||||
|
||||
ldy #S.EVT.DATAHI is it an O or SAPPLE key ?
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /A2OSX.BUILD
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /A2OSX.BUILD
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /A2OSX.BUILD
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
141
BIN/LS.S.txt
141
BIN/LS.S.txt
@ -1,33 +1,37 @@
|
||||
PR#3
|
||||
PREFIX /A2OSX.BUILD
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
.OR $2000
|
||||
.TF BIN/LS
|
||||
.TF /A2OSX.BOOT/BIN/LS
|
||||
*--------------------------------------
|
||||
.INB INC/MACROS.I
|
||||
.INB INC/A2OSX.I
|
||||
.INB INC/A2OSX.API.I
|
||||
.INB INC/LIBSTR.I
|
||||
*--------------------------------------
|
||||
* Main entry point
|
||||
*--------------------------------------
|
||||
* Code signature and INIT table
|
||||
*--------------------------------------
|
||||
* CLD $D8
|
||||
* JMP (*,x) $7C
|
||||
* #JMPTABLE
|
||||
* /JMPTABLE
|
||||
* 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.LIB.LIBSTR .DA LIB.LIBSTR
|
||||
L.LIBSTR .DA LIBSTR
|
||||
L.MSG.VOL.HEADER .DA MSG.VOL.HEADER
|
||||
L.MSG.DIR.HEADER .DA MSG.DIR.HEADER
|
||||
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.PRODOS.FT.TXT .DA PRODOS.FT.TXT
|
||||
.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
|
||||
stz hDIRPATH
|
||||
stz hS.LISTDIR
|
||||
stz hVOLHEADER
|
||||
stz hDIRHEADER
|
||||
stz bSTOP
|
||||
stz bCANCEL
|
||||
|
||||
lda #0
|
||||
ldy #DS.END-DS.START-1
|
||||
.11 sta (pData),y
|
||||
dey
|
||||
bpl .11
|
||||
|
||||
ldy #S.PS.hARGS
|
||||
lda (pPsContext),y
|
||||
lda (pPs),y
|
||||
beq .1
|
||||
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>STYA ZPQuickPtr1
|
||||
lda (ZPQuickPtr1)
|
||||
@ -60,50 +64,52 @@ CS.INIT >LIBLOADP L.LIB.LIBSTR
|
||||
lda (ZPQuickPtr1),y
|
||||
cmp #'/'
|
||||
bne .10
|
||||
|
||||
ldy #S.PS.hARGS
|
||||
bra .2
|
||||
lda (pPs),y
|
||||
bra .3
|
||||
|
||||
.10 ldy #S.PS.hARGS
|
||||
lda (pPsContext),y
|
||||
lda (pPs),y
|
||||
>PUSHA
|
||||
ldy #S.PS.hPREFIX
|
||||
lda (pPsContext),y
|
||||
lda (pPs),y
|
||||
>PUSHA
|
||||
>SYSCALL SYS.PStrCat
|
||||
sta hDIRPATH
|
||||
bra .3
|
||||
|
||||
.1 ldy #S.PS.hPREFIX
|
||||
.2 lda (pPsContext),y
|
||||
lda (pPs),y
|
||||
|
||||
.3 >SYSCALL SYS.ListDirInitA
|
||||
bcs .98
|
||||
sta hS.LISTDIR
|
||||
bcs .9
|
||||
ldy #hS.LISTDIR
|
||||
sta (pData),y
|
||||
|
||||
lda (pPsContext)
|
||||
lda (pPs)
|
||||
ora #S.PS.F.EVENT Now accept events
|
||||
sta (pPsContext)
|
||||
sta (pPs)
|
||||
clc
|
||||
rts
|
||||
|
||||
.98 pha
|
||||
lda hLIBSTR
|
||||
>SYSCALL SYS.FreeMemA
|
||||
pla
|
||||
sec
|
||||
.9 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.RUN lda bCANCEL
|
||||
CS.RUN ldy #bCANCEL
|
||||
lda (pData),y
|
||||
beq .1
|
||||
sec
|
||||
rts
|
||||
|
||||
.1 lda bSTOP
|
||||
.1 ldy #bSTOP
|
||||
lda (pData),y
|
||||
beq .2
|
||||
clc
|
||||
rts
|
||||
|
||||
.2 lda hS.LISTDIR
|
||||
.2 ldy #hS.LISTDIR
|
||||
lda (pData),y
|
||||
>SYSCALL SYS.ListDirNextA
|
||||
bcc .3
|
||||
|
||||
@ -124,7 +130,8 @@ CS.RUN lda bCANCEL
|
||||
bne .31
|
||||
|
||||
pla
|
||||
sta hVOLHEADER
|
||||
ldy #hVOLHEADER
|
||||
sta (pData),y
|
||||
>PUSHW ZPQuickPtr1
|
||||
>PUSHW L.MSG.VOL.HEADER
|
||||
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
||||
@ -135,8 +142,9 @@ CS.RUN lda bCANCEL
|
||||
bne .4
|
||||
|
||||
pla
|
||||
sta hDIRHEADER
|
||||
|
||||
ldy #hDIRHEADER
|
||||
sta (pData),y
|
||||
|
||||
>PUSHW ZPQuickPtr1
|
||||
>PUSHW L.MSG.DIR.HEADER
|
||||
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
||||
@ -145,6 +153,7 @@ CS.RUN lda bCANCEL
|
||||
|
||||
.4 cmp #$D0 Directory ?
|
||||
bne .5
|
||||
|
||||
jsr Push.Dates
|
||||
jsr Push.Dir
|
||||
>PUSHW L.MSG.DIR
|
||||
@ -263,13 +272,14 @@ Push.Dates ldy #$24 get modification time
|
||||
>PUSHA
|
||||
rts
|
||||
*--------------------------------------
|
||||
Push.Footer lda hVOLHEADER
|
||||
Push.Footer ldy #hVOLHEADER
|
||||
lda (pData),y
|
||||
beq .20
|
||||
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>STYA ZPQuickPtr1
|
||||
|
||||
ldy #22 file_count
|
||||
ldy #$22 file_count
|
||||
lda (ZPQuickPtr1),y
|
||||
>PUSHA
|
||||
dey
|
||||
@ -279,13 +289,14 @@ Push.Footer lda hVOLHEADER
|
||||
>PUSHW L.MSG.VOL.END
|
||||
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
||||
|
||||
.20 lda hDIRHEADER
|
||||
.20 ldy #hDIRHEADER
|
||||
lda (pData),y
|
||||
beq .21
|
||||
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>STYA ZPQuickPtr1
|
||||
|
||||
ldy #22 file_count
|
||||
ldy #$22 file_count
|
||||
lda (ZPQuickPtr1),y
|
||||
>PUSHA
|
||||
dey
|
||||
@ -301,47 +312,60 @@ Push.Footer lda hVOLHEADER
|
||||
CS.DOEVENT ldy #S.EVT.hDEV is Event from active IN device?
|
||||
lda (pEvent),y
|
||||
ldy #S.PS.hINDEV
|
||||
cmp (pPsContext),y
|
||||
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
|
||||
sta bCANCEL
|
||||
ldy #bCANCEL
|
||||
sta (pData),y
|
||||
bra .8
|
||||
|
||||
.1 cmp #$13 Ctrl-S
|
||||
bne .8
|
||||
lda bSTOP
|
||||
|
||||
ldy #bSTOP
|
||||
lda (pData),y
|
||||
eor #$FF
|
||||
sta bSTOP
|
||||
.8 >SYSCALL SYS.DestroyEvent
|
||||
clc
|
||||
sta (pData),y
|
||||
|
||||
.8 clc
|
||||
rts
|
||||
|
||||
.9 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.QUIT lda hVOLHEADER
|
||||
CS.QUIT ldy #hVOLHEADER
|
||||
lda (pData),y
|
||||
beq .1
|
||||
|
||||
>SYSCALL SYS.FreeMemA
|
||||
|
||||
.1 lda hDIRHEADER
|
||||
.1 ldy #hDIRHEADER
|
||||
lda (pData),y
|
||||
beq .2
|
||||
|
||||
>SYSCALL SYS.FreeMemA
|
||||
|
||||
.2 lda hS.LISTDIR
|
||||
.2 ldy #hS.LISTDIR
|
||||
lda (pData),y
|
||||
|
||||
>SYSCALL SYS.ListDirCloseA
|
||||
|
||||
lda hDIRPATH
|
||||
ldy #hDIRPATH
|
||||
lda (pData),y
|
||||
beq .3
|
||||
>SYSCALL SYS.FreeMemA
|
||||
|
||||
@ -352,7 +376,7 @@ CS.QUIT lda hVOLHEADER
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.END
|
||||
LIB.LIBSTR >PSTRING "libstr.o"
|
||||
LIBSTR >PSTRING "libstr.o"
|
||||
MSG.VOL.HEADER >CSTRING "Volume Listing Of %S\n"
|
||||
MSG.DIR.HEADER >CSTRING "Directory Listing Of %S\n"
|
||||
MSG.VOL >CSTRING "/%S\n"
|
||||
@ -373,9 +397,11 @@ TE2 >PSTRING "ATK"
|
||||
TFF >PSTRING "SYS"
|
||||
PRODOS.FT.DFLT >PSTRING "$ "
|
||||
HEXDIGIT .AS '0123456789ABCDEF'
|
||||
*--------------------------------------
|
||||
DS.START
|
||||
hLIBSTR .BS 1
|
||||
*--------------------------------------
|
||||
.DUMMY
|
||||
.OR 0
|
||||
DS.START
|
||||
hDIRPATH .BS 1
|
||||
hS.LISTDIR .BS 1
|
||||
hVOLHEADER .BS 1
|
||||
@ -383,6 +409,7 @@ hDIRHEADER .BS 1
|
||||
bSTOP .BS 1
|
||||
bCANCEL .BS 1
|
||||
DS.END
|
||||
.ED
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE BIN/LS.S
|
||||
|
110
BIN/LSDEV.S.txt
110
BIN/LSDEV.S.txt
@ -1,15 +1,16 @@
|
||||
PR#3
|
||||
PREFIX /A2OSX.BUILD
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
.OR $2000
|
||||
.TF BIN/LSDEV
|
||||
.TF /A2OSX.BOOT/BIN/LSDEV
|
||||
*--------------------------------------
|
||||
.INB INC/MACROS.I
|
||||
.INB INC/A2OSX.I
|
||||
.INB INC/A2OSX.API.I
|
||||
.INB INC/KERNEL.I
|
||||
.INB INC/LIBSTR.I
|
||||
*--------------------------------------
|
||||
@ -17,17 +18,20 @@ ZPPTR1 .EQ ZPBIN
|
||||
ZPPTR2 .EQ ZPBIN+2
|
||||
ZPPTR3 .EQ ZPBIN+4
|
||||
*--------------------------------------
|
||||
* Main entry point
|
||||
*--------------------------------------
|
||||
* Code signature and INIT table
|
||||
*--------------------------------------
|
||||
* CLD $D8
|
||||
* JMP (*,x) $7C
|
||||
* #JMPTABLE
|
||||
* /JMPTABLE
|
||||
* 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 Data Segment to Allocate
|
||||
.DA 0
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
* Relocation Table
|
||||
*--------------------------------------
|
||||
.1 .DA CS.INIT
|
||||
.DA CS.RUN
|
||||
.DA CS.EVENT
|
||||
@ -35,46 +39,25 @@ CS.START cld
|
||||
L.LIBSTR .DA LIBSTR
|
||||
L.MSG0 .DA MSG0
|
||||
L.MSG1 .DA MSG1
|
||||
L.MSG2 .DA MSG2
|
||||
.DA 0
|
||||
.DA CS.END-CS.START Code Length To Relocate
|
||||
.DA 0 Data Segment to Allocate
|
||||
*--------------------------------------
|
||||
CS.INIT >LIBLOADP L.LIBSTR
|
||||
* bcs .9
|
||||
CS.INIT >LDYA L.LIBSTR
|
||||
>LOADLIBYA
|
||||
bcs .9
|
||||
sta hLIBSTR
|
||||
|
||||
>SYSCALL SYS.GetDevTable
|
||||
>LDYAI DevMgr.Table
|
||||
>STYA ZPPTR1
|
||||
stz DEV.COUNT
|
||||
stz DEV.ID
|
||||
|
||||
L0 >PUSHW L.MSG0
|
||||
>PUSHW L.MSG0
|
||||
>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
|
||||
lda (ZPPTR1),y
|
||||
beq L12
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>PUSHYA
|
||||
bra L13
|
||||
.1 lda (ZPPTR1)
|
||||
cmp #$D8
|
||||
bne .8
|
||||
|
||||
L12 >PUSHW L.MSG2
|
||||
|
||||
L13 lda ZPPTR1
|
||||
lda ZPPTR1
|
||||
clc
|
||||
adc #S.DEV.NAME
|
||||
sta ZPPTR2
|
||||
@ -83,35 +66,27 @@ L13 lda ZPPTR1
|
||||
sta ZPPTR2+1
|
||||
>PUSHW ZPPTR2
|
||||
|
||||
ldy #S.DEV.hOWNERPS
|
||||
lda (ZPPTR1),y
|
||||
>PUSHA Owner PSID
|
||||
lda (ZPPTR1) push flags
|
||||
ldy #S.DEV.F
|
||||
lda (ZPPTR1),y push flags
|
||||
>PUSHA
|
||||
ldy #S.DEV.ID
|
||||
lda (ZPPTR1),y
|
||||
>PUSHA DevID
|
||||
>PUSHB DEV.ID
|
||||
>PUSHW L.MSG1
|
||||
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
||||
L4 dec LINE.COUNT
|
||||
L41 lda ZPPTR1
|
||||
|
||||
lda ZPPTR1
|
||||
clc
|
||||
adc #S.DEV.SIZE
|
||||
sta ZPPTR1
|
||||
bcc L5
|
||||
bcc .3
|
||||
inc ZPPTR1+1
|
||||
L5 inc DEV.COUNT
|
||||
lda DEV.COUNT
|
||||
|
||||
.3 inc DEV.ID
|
||||
lda DEV.ID
|
||||
cmp #K.DEV.MAX
|
||||
beq L8
|
||||
lda LINE.COUNT
|
||||
beq L6
|
||||
jmp L1
|
||||
L6 >DEBUG
|
||||
jmp L0
|
||||
bne .1
|
||||
|
||||
L8 lda #0 tell TSKMGR that all done ok, but
|
||||
sec we do not want to stay in memory
|
||||
.8 lda #0 tell TSKMGR that all done ok, but
|
||||
.9 sec we do not want to stay in memory
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.RUN
|
||||
@ -119,21 +94,16 @@ CS.EVENT clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.QUIT lda hLIBSTR
|
||||
|
||||
bra *
|
||||
|
||||
>SYSCALL SYS.UnloadLibA
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.END
|
||||
hLIBSTR .BS 1
|
||||
DEV.COUNT .BS 1
|
||||
LINE.COUNT .BS 1
|
||||
LIBSTR >PSTRING "libstr.o"
|
||||
MSG0 >CSTRING "hDev Flags PID NAME CMD ARGS\n"
|
||||
MSG1 >CSTRING " %03d %b $%h %4S %16S %32S\n"
|
||||
MSG2 >PSTRING "(none)"
|
||||
MSG0 >CSTRING "ID Flags Name\n"
|
||||
MSG1 >CSTRING "%03d %b %4S\n"
|
||||
hLIBSTR .BS 1
|
||||
DEV.ID .BS 1
|
||||
MAN
|
||||
SAVE BIN/LSDEV.S
|
||||
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
|
||||
PREFIX /A2OSX.BUILD
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
.OR $2000
|
||||
.TF BIN/MEM
|
||||
.TF /A2OSX.BOOT/BIN/MEM
|
||||
*--------------------------------------
|
||||
.INB INC/MACROS.I
|
||||
.INB INC/KERNEL.I
|
||||
.INB INC/A2OSX.I
|
||||
.INB INC/A2OSX.API.I
|
||||
.INB INC/LIBSTR.I
|
||||
*--------------------------------------
|
||||
PAGELEN .EQ 22
|
||||
*--------------------------------------
|
||||
ZPPTR1 .EQ ZPBIN
|
||||
ZPPTR2 .EQ ZPBIN+2
|
||||
*--------------------------------------
|
||||
* Main entry point
|
||||
*--------------------------------------
|
||||
* Code signature and INIT table
|
||||
*--------------------------------------
|
||||
* CLD $D8
|
||||
* JMP (*,x) $7C
|
||||
* #JMPTABLE
|
||||
* /JMPTABLE
|
||||
* 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
|
||||
@ -38,55 +45,120 @@ L.MSG3 .DA MSG3
|
||||
L.MSG4 .DA MSG4
|
||||
L.MSG5 .DA MSG5
|
||||
L.MSG6 .DA MSG6
|
||||
L.MSG7 .DA MSG7
|
||||
.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
|
||||
sta hLIBSTR
|
||||
|
||||
stz LINE.COUNT
|
||||
stz MEM.COUNT
|
||||
stz USED.COUNT
|
||||
stz bSTOP
|
||||
stz bCANCEL
|
||||
lda #0
|
||||
ldy #DS.END-DS.START-1
|
||||
|
||||
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
|
||||
sta (pPsContext)
|
||||
sta (pPs)
|
||||
clc
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
CS.RUN lda bCANCEL
|
||||
bne .99
|
||||
lda bSTOP
|
||||
CS.RUN ldy #bCANCEL
|
||||
lda (pData),y
|
||||
bne .9
|
||||
|
||||
ldy #bSTOP
|
||||
lda (pData),y
|
||||
bne .8
|
||||
lda LINE.COUNT
|
||||
|
||||
ldy #LINE.COUNT
|
||||
lda (pData),y
|
||||
bne .1
|
||||
|
||||
>PUSHW L.MSG0
|
||||
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
||||
|
||||
.1 lda MEM.COUNT
|
||||
.1 ldy #MEM.COUNT
|
||||
lda (pData),y
|
||||
>SYSCALL SYS.GetMemByIDA
|
||||
>STYA ZPPTR1
|
||||
lda (ZPPTR1)
|
||||
bpl .2
|
||||
inc USED.COUNT
|
||||
|
||||
ldy #USED.COUNT
|
||||
lda (pData),y
|
||||
inc
|
||||
sta (pData),y
|
||||
|
||||
.2 jsr CS.RUN.PRINTMEM
|
||||
|
||||
inc MEM.COUNT
|
||||
lda MEM.COUNT
|
||||
cmp MEMMGR.TABLESIZE
|
||||
ldy #MEM.COUNT
|
||||
lda (pData),y
|
||||
inc
|
||||
sta (pData),y
|
||||
cmp MemMgr.LastSlot
|
||||
beq .9
|
||||
|
||||
.8
|
||||
clc
|
||||
.8 clc
|
||||
rts
|
||||
|
||||
.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
|
||||
*--------------------------------------
|
||||
CS.RUN.PRINTMEM ldy #S.MEM.LEN
|
||||
@ -96,6 +168,7 @@ CS.RUN.PRINTMEM ldy #S.MEM.LEN
|
||||
lda (ZPPTR1),y
|
||||
ply
|
||||
>PUSHYA
|
||||
|
||||
ldy #S.MEM.PTR
|
||||
lda (ZPPTR1),y
|
||||
pha
|
||||
@ -103,18 +176,25 @@ CS.RUN.PRINTMEM ldy #S.MEM.LEN
|
||||
lda (ZPPTR1),y
|
||||
ply
|
||||
>PUSHYA
|
||||
|
||||
ldy #S.MEM.REFCNT
|
||||
lda (ZPPTR1),y
|
||||
>PUSHA
|
||||
|
||||
ldy #S.MEM.OWNERPID
|
||||
lda (ZPPTR1),y
|
||||
>PUSHA
|
||||
|
||||
lda (ZPPTR1)
|
||||
>PUSHA
|
||||
lda MEM.COUNT
|
||||
|
||||
ldy #MEM.COUNT
|
||||
lda (pData),y
|
||||
>PUSHA
|
||||
|
||||
>PUSHW L.MSG1
|
||||
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
||||
|
||||
ldy #S.MEM.BIN
|
||||
lda (ZPPTR1),y
|
||||
bne .3
|
||||
@ -132,15 +212,18 @@ CS.RUN.PRINTMEM ldy #S.MEM.LEN
|
||||
lda #"|"
|
||||
jsr COUT
|
||||
ldy #1
|
||||
|
||||
.1 lda (ZPPTR2),y
|
||||
ora #$80
|
||||
cmp #$A0
|
||||
bcs .2
|
||||
|
||||
ora #$20
|
||||
.2 jsr COUT
|
||||
iny
|
||||
cpy #40
|
||||
bne .1
|
||||
|
||||
lda #"}"
|
||||
jsr COUT
|
||||
bra .4
|
||||
@ -150,84 +233,52 @@ CS.RUN.PRINTMEM ldy #S.MEM.LEN
|
||||
>LIBCALL hLIBSTR,LIBSTR.PRINTP
|
||||
|
||||
.4 jsr CROUT
|
||||
inc LINE.COUNT
|
||||
lda LINE.COUNT
|
||||
cmp #22
|
||||
ldy #LINE.COUNT
|
||||
lda (pData),y
|
||||
inc
|
||||
sta (pData),y
|
||||
cmp #PAGELEN
|
||||
bne .5
|
||||
|
||||
lda #$FF
|
||||
sta bSTOP
|
||||
stz LINE.COUNT
|
||||
ldy #bSTOP
|
||||
sta (pData),y
|
||||
|
||||
ldy #LINE.COUNT
|
||||
lda #0
|
||||
sta (pData),y
|
||||
|
||||
.5 rts
|
||||
*--------------------------------------
|
||||
CS.RUN.PRINTEND >PUSHB MEM.COUNT
|
||||
>PUSHB USED.COUNT
|
||||
CS.RUN.PRINTEND ldy #MEM.COUNT
|
||||
>PUSHB (pData),y
|
||||
ldy #USED.COUNT
|
||||
>PUSHB (pData),y
|
||||
>PUSHW L.MSG2
|
||||
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
||||
|
||||
>PUSHW MEMMGR.LOMEM
|
||||
>PUSHW MemMgr.HiMem
|
||||
>PUSHW L.MSG3
|
||||
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
||||
|
||||
>PUSHW MEMMGR.MLLIMIT
|
||||
>PUSHW MemMgr.Free
|
||||
>PUSHW L.MSG4
|
||||
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
||||
|
||||
>PUSHW MEMMGR.MHLIMIT
|
||||
|
||||
>PUSHW MemMgr.LoMem
|
||||
>PUSHW L.MSG5
|
||||
>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
|
||||
>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
|
||||
*--------------------------------------
|
||||
PRBYTE pha
|
||||
@ -252,33 +303,34 @@ CROUT lda #13
|
||||
*--------------------------------------
|
||||
COUT phx
|
||||
phy
|
||||
>PUSHA
|
||||
ldy #S.PS.hOUTDEV
|
||||
lda (pPsContext),y
|
||||
>SYSCALL SYS.DevOutA
|
||||
ldx #DEVMGR.COUT
|
||||
jsr pDevJmp
|
||||
ply
|
||||
plx
|
||||
rts
|
||||
pDevJmp jmp (pDev)
|
||||
*--------------------------------------
|
||||
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
|
||||
*--------------------------------------
|
||||
.DUMMY
|
||||
.OR 0
|
||||
DS.START
|
||||
LINE.COUNT .BS 1
|
||||
MEM.COUNT .BS 1
|
||||
USED.COUNT .BS 1
|
||||
bSTOP .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
|
||||
.ED
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE BIN/MEM.S
|
||||
|
@ -1,15 +1,16 @@
|
||||
PR#3
|
||||
PREFIX /A2OSX.BUILD
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
.OR $2000
|
||||
.TF BIN/NETCFG
|
||||
.TF /A2OSX.BOOT/BIN/NETCFG
|
||||
*--------------------------------------
|
||||
.INB INC/MACROS.I
|
||||
.INB INC/A2OSX.I
|
||||
.INB INC/A2OSX.API.I
|
||||
.INB INC/KERNEL.I
|
||||
.INB INC/LIBSTR.I
|
||||
.INB INC/LIBTCPIP.I
|
||||
@ -17,17 +18,20 @@ AUTO 6
|
||||
ZPPTR1 .EQ ZPBIN
|
||||
ZPPTR2 .EQ ZPBIN+2
|
||||
*--------------------------------------
|
||||
* Main entry point
|
||||
*--------------------------------------
|
||||
* Code signature and INIT table
|
||||
*--------------------------------------
|
||||
* CLD $D8
|
||||
* JMP (*,x) $7C
|
||||
* #JMPTABLE
|
||||
* /JMPTABLE
|
||||
* 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 Data Segment to Allocate
|
||||
.DA 0
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
* Relocation Table
|
||||
*--------------------------------------
|
||||
.1 .DA CS.INIT
|
||||
.DA CS.RUN
|
||||
.DA CS.DOEVENT
|
||||
@ -49,10 +53,9 @@ L.MSG1.HOSTNAME .DA MSG1.HOSTNAME
|
||||
L.MSG1.DOMAIN .DA MSG1.DOMAIN
|
||||
L.MSG1.END .DA MSG1.END
|
||||
.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
|
||||
|
||||
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.DOMAIN >CSTRING ".%s"
|
||||
MSG1.END >CSTRING "\nEnd of network configuration.\n"
|
||||
*--------------------------------------
|
||||
DS.START
|
||||
*--------------------------------------
|
||||
hLIBSTR .BS 1
|
||||
*--------------------------------------
|
||||
DS.END
|
||||
MAN
|
||||
SAVE BIN/NETCFG.S
|
||||
ASM
|
||||
|
215
BIN/PING.S.txt
215
BIN/PING.S.txt
@ -1,15 +1,16 @@
|
||||
PR#3
|
||||
PREFIX /A2OSX.BUILD
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
.OR $2000
|
||||
.TF BIN/PING
|
||||
.TF /A2OSX.BOOT/BIN/PING
|
||||
*--------------------------------------
|
||||
.INB INC/MACROS.I
|
||||
.INB INC/A2OSX.I
|
||||
.INB INC/A2OSX.API.I
|
||||
.INB INC/KERNEL.I
|
||||
.INB INC/LIBSTR.I
|
||||
.INB INC/LIBTCPIP.I
|
||||
@ -20,44 +21,44 @@ ZPFrameBase1 .EQ ZPBIN
|
||||
ZPFrameLen1 .EQ ZPBIN+2
|
||||
ZPFramePtr1 .EQ ZPBIN+4
|
||||
*--------------------------------------
|
||||
* Main entry point
|
||||
*--------------------------------------
|
||||
* Code signature and INIT table
|
||||
*--------------------------------------
|
||||
* CLD $D8
|
||||
* JMP (*,x) $7C
|
||||
* #JMPTABLE
|
||||
* /JMPTABLE
|
||||
* 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
|
||||
*--------------------------------------
|
||||
.1 .DA CS.INIT
|
||||
.DA CS.RUN
|
||||
.DA CS.EVENT
|
||||
.DA CS.DOEVENT
|
||||
.DA CS.QUIT
|
||||
L.LIBSTR .DA LIBSTR
|
||||
L.LIBTCPIP .DA LIBTCPIP
|
||||
L.SSCANF.IP .DA SSCANF.IP
|
||||
L.DST.IP .DA DST.IP
|
||||
L.MSG0 .DA MSG0
|
||||
L.MSG1 .DA MSG1
|
||||
L.MSG2 .DA MSG2
|
||||
L.MSG3 .DA MSG3
|
||||
.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
|
||||
lda (pPsContext),y
|
||||
lda (pPs),y
|
||||
bne .1
|
||||
lda #SYSMGR.ERRSYN
|
||||
sec
|
||||
rts
|
||||
|
||||
.1 >LIBLOADP L.LIBSTR
|
||||
.1 >LDYA L.LIBSTR
|
||||
>LOADLIBYA
|
||||
sta hLIBSTR
|
||||
|
||||
>LIBLOADP L.LIBTCPIP
|
||||
>LDYA L.LIBTCPIP
|
||||
>LOADLIBYA
|
||||
sta hLIBTCPIP
|
||||
|
||||
>LIBCALL hLIBTCPIP,LIBTCPIP.GET.IPCFG is TCPIP loaded ?
|
||||
@ -72,45 +73,52 @@ CS.INIT ldy #S.PS.hARGS
|
||||
sta hDev
|
||||
|
||||
lda A2OSX.RANDOM16
|
||||
sta Identifier
|
||||
ldy #Identifier
|
||||
sta (pData),y
|
||||
lda A2OSX.RANDOM16+1
|
||||
sta Identifier+1
|
||||
iny
|
||||
sta (pData),y
|
||||
|
||||
stz Sequence
|
||||
stz Sequence+1
|
||||
lda #0
|
||||
ldy #Sequence
|
||||
sta (pData),y
|
||||
iny
|
||||
sta (pData),y
|
||||
|
||||
lda (pPsContext)
|
||||
lda (pPs)
|
||||
ora #S.PS.F.EVENT Now accept events
|
||||
sta (pPsContext)
|
||||
sta (pPs)
|
||||
clc
|
||||
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
CS.RUN >PUSHW L.DST.IP
|
||||
CS.RUN >PUSHW pData DST.IP
|
||||
>PUSHW L.SSCANF.IP
|
||||
ldy #S.PS.hARGS
|
||||
lda (pPsContext),y
|
||||
lda (pPs),y
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>PUSHYA
|
||||
>LIBCALL hLIBSTR,LIBSTR.SSCANF
|
||||
bcc CS.RUN.IPOK
|
||||
|
||||
lda #PING.TIMEOUT
|
||||
sta TimeOut
|
||||
|
||||
CS.RUN.DNSQUERY >PUSHW L.DST.IP
|
||||
ldy #TimeOut
|
||||
sta (pData),y
|
||||
|
||||
CS.RUN.DNSQUERY >PUSHW pData DST.IP
|
||||
ldy #S.PS.hARGS
|
||||
lda (pPsContext),y
|
||||
lda (pPs),y
|
||||
>PUSHA
|
||||
>LIBCALL hLIBTCPIP,LIBTCPIP.DNS.QUERY
|
||||
bcc CS.RUN.IPOK
|
||||
|
||||
jsr A2osX.SLEEP
|
||||
lda TimeOut
|
||||
ldy #TimeOut
|
||||
lda (pData),y
|
||||
bne CS.RUN.DNSQUERY
|
||||
|
||||
ldy #S.PS.hARGS
|
||||
lda (pPsContext),y
|
||||
lda (pPs),y
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>PUSHYA
|
||||
>PUSHW L.MSG0
|
||||
@ -120,24 +128,37 @@ CS.RUN.DNSQUERY >PUSHW L.DST.IP
|
||||
CS.RUN.RTS rts
|
||||
|
||||
CS.RUN.IPOK ldy #S.PS.hARGS
|
||||
lda (pPsContext),y
|
||||
lda (pPs),y
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>PUSHYA
|
||||
>PUSHB DST.IP+3
|
||||
>PUSHB DST.IP+2
|
||||
>PUSHB DST.IP+1
|
||||
>PUSHB DST.IP
|
||||
ldy #3
|
||||
>PUSHB (pData),y DST.IP+3
|
||||
dey
|
||||
>PUSHB (pData),y DST.IP+2
|
||||
dey
|
||||
>PUSHB (pData),y DST.IP+1
|
||||
>PUSHB (pData) DST.IP
|
||||
>PUSHW L.MSG1
|
||||
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
||||
|
||||
CS.RUN.ECHO >LIBCALL hLIBTCPIP,LIBTCPIP.NEW.ICMP.FRAME
|
||||
bcs CS.RUN.RTS
|
||||
>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
|
||||
ldy #S.IP.DST+3
|
||||
.1 lda DST.IP,x
|
||||
.1 pla
|
||||
sta (ZPFrameBase1),y
|
||||
dey
|
||||
dex
|
||||
@ -147,63 +168,92 @@ CS.RUN.ECHO >LIBCALL hLIBTCPIP,LIBTCPIP.NEW.ICMP.FRAME
|
||||
lda #S.ICMP.TYPE.ECHOREQ
|
||||
sta (ZPFrameBase1),y
|
||||
|
||||
ldy #S.ICMP.IDENTIFIER
|
||||
lda Identifier
|
||||
sta (ZPFrameBase1),y
|
||||
ldy #Identifier
|
||||
lda (pData),y
|
||||
tax
|
||||
iny
|
||||
lda Identifier+1
|
||||
lda (pData),y
|
||||
|
||||
ldy #S.ICMP.IDENTIFIER+1
|
||||
sta (ZPFrameBase1),y
|
||||
dey
|
||||
txa
|
||||
sta (ZPFrameBase1),y
|
||||
|
||||
inc Sequence
|
||||
ldy #Sequence+1
|
||||
lda (pData),y
|
||||
tax
|
||||
dey
|
||||
lda (pData),y
|
||||
inc
|
||||
sta (pData),y
|
||||
bne .2
|
||||
inc Sequence+1
|
||||
pha
|
||||
inx
|
||||
txa
|
||||
sta (pData),y
|
||||
pla
|
||||
|
||||
.2 ldy #S.ICMP.SEQUENCE
|
||||
lda Sequence
|
||||
sta (ZPFrameBase1),y
|
||||
iny
|
||||
lda Sequence+1
|
||||
txa
|
||||
sta (ZPFrameBase1),y
|
||||
|
||||
lda #PING.TIMEOUT
|
||||
sta TimeOut
|
||||
ldy #TimeOut
|
||||
sta (pData),y
|
||||
|
||||
.3 >PUSHWI S.ICMP+32
|
||||
lda hFrame
|
||||
ldy #hFrame
|
||||
lda (pData),y
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>PUSHYA
|
||||
>LIBCALL hLIBTCPIP,LIBTCPIP.SEND.ICMP.FRAME
|
||||
bcc .4
|
||||
jsr A2osX.SLEEP
|
||||
lda TimeOut
|
||||
ldy #TimeOut
|
||||
lda (pData),y
|
||||
bne .3
|
||||
|
||||
.4 lda hFrame
|
||||
.4 ldy #hFrame
|
||||
lda (pData),y
|
||||
>SYSCALL SYS.FreeMemA
|
||||
|
||||
stz bReply
|
||||
ldy #bReply
|
||||
lda #0
|
||||
sta (pData),y
|
||||
lda #PING.TIMEOUT
|
||||
sta TimeOut
|
||||
ldy #TimeOut
|
||||
sta (pData),y
|
||||
|
||||
CS.RUN.WAIT jsr A2osX.SLEEP
|
||||
lda bReply
|
||||
ldy #bReply
|
||||
lda (pData),y
|
||||
bne .1
|
||||
|
||||
lda bCTRLC
|
||||
ldy #bCTRLC
|
||||
lda (pData),y
|
||||
bne CS.RUN.ERROR
|
||||
lda TimeOut
|
||||
ldy #TimeOut
|
||||
lda (pData),y
|
||||
bne CS.RUN.WAIT
|
||||
|
||||
>PUSHB DST.IP+3
|
||||
>PUSHB DST.IP+2
|
||||
>PUSHB DST.IP+1
|
||||
>PUSHB DST.IP
|
||||
ldy #3
|
||||
>PUSHB (pData),y DST.IP+3
|
||||
dey
|
||||
>PUSHB (pData),y DST.IP+2
|
||||
dey
|
||||
>PUSHB (pData),y DST.IP+1
|
||||
>PUSHB (pData) DST.IP
|
||||
>PUSHW L.MSG2
|
||||
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
||||
|
||||
.1 lda bCTRLC
|
||||
.1 ldy #bCTRLC
|
||||
lda (pData),y
|
||||
bne CS.RUN.ERROR
|
||||
lda TimeOut
|
||||
ldy #TimeOut
|
||||
lda (pData),y
|
||||
beq .2
|
||||
|
||||
jsr A2osX.SLEEP
|
||||
@ -214,14 +264,16 @@ CS.RUN.WAIT jsr A2osX.SLEEP
|
||||
CS.RUN.ERROR sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.EVENT lda (pEvent)
|
||||
CS.DOEVENT lda (pEvent)
|
||||
and #S.EVT.F.TIMER is it a TIMER event?
|
||||
beq .1 no....
|
||||
|
||||
lda TimeOut
|
||||
ldy #TimeOut
|
||||
lda (pData),y
|
||||
beq .10
|
||||
|
||||
dec TimeOut
|
||||
dec
|
||||
sta (pData),y
|
||||
.10 sec do not discard TIMER event
|
||||
rts
|
||||
|
||||
@ -232,7 +284,7 @@ CS.EVENT lda (pEvent)
|
||||
ldy #S.EVT.hDEV is Event from active IN device?
|
||||
lda (pEvent),y
|
||||
ldy #S.PS.hINDEV
|
||||
cmp (pPsContext),y
|
||||
cmp (pPs),y
|
||||
bne .9
|
||||
|
||||
ldy #S.EVT.DATAHI is it an O or SAPPLE key ?
|
||||
@ -245,7 +297,8 @@ CS.EVENT lda (pEvent)
|
||||
bne .8
|
||||
|
||||
lda #$FF
|
||||
sta bCTRLC
|
||||
ldy #bCTRLC
|
||||
sta (pData),y
|
||||
bra .8
|
||||
|
||||
.2 lda (pEvent)
|
||||
@ -275,15 +328,19 @@ CS.EVENT lda (pEvent)
|
||||
|
||||
ldy #S.ICMP.IDENTIFIER
|
||||
lda (ZPFrameBase1),y
|
||||
cmp Identifier
|
||||
bne .9
|
||||
tax
|
||||
iny
|
||||
lda (ZPFrameBase1),y
|
||||
cmp Identifier+1
|
||||
ldy #Identifier+1
|
||||
cmp (pData),y
|
||||
bne .9
|
||||
dey
|
||||
txa
|
||||
cmp (pData),y
|
||||
bne .9
|
||||
|
||||
jsr CS.EVENT.REPLY
|
||||
.8 >SYSCALL SYS.DestroyEvent
|
||||
clc
|
||||
.8 clc
|
||||
rts
|
||||
|
||||
.9 sec
|
||||
@ -304,7 +361,7 @@ CS.EVENT.REPLY lda #PING.TIMEOUT
|
||||
adc #K.TIMER16RESOLUTION*20
|
||||
sta TimeOut.ms
|
||||
bcc .2
|
||||
inc TimeOut+1+1
|
||||
inc TimeOut
|
||||
.2 dey
|
||||
bne .1
|
||||
|
||||
@ -329,7 +386,10 @@ CS.EVENT.REPLY lda #PING.TIMEOUT
|
||||
>PUSHW L.MSG3
|
||||
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
||||
|
||||
inc bReply
|
||||
ldy #bReply
|
||||
lda (pData),y
|
||||
inc
|
||||
sta (pData),y
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.QUIT lda hLIBTCPIP
|
||||
@ -347,20 +407,23 @@ MSG0 >CSTRING "%S: Unknown host\n"
|
||||
MSG1 >CSTRING "PING %d.%d.%d.%d (%S)\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"
|
||||
*--------------------------------------
|
||||
DS.START
|
||||
hLIBSTR .BS 1
|
||||
hLIBTCPIP .BS 1
|
||||
hDev .BS 1
|
||||
TimeOut.ms .BS 2
|
||||
*--------------------------------------
|
||||
.DUMMY
|
||||
.OR 0
|
||||
DS.START
|
||||
DST.IP .BS 4
|
||||
hFrame .BS 1
|
||||
TimeOut .BS 1
|
||||
TimeOut.ms .BS 2
|
||||
Identifier .BS 2
|
||||
Sequence .BS 2
|
||||
bCTRLC .BS 1
|
||||
bReply .BS 1
|
||||
DS.END
|
||||
.ED
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE BIN/PING.S
|
||||
|
50
BIN/PS.S.txt
50
BIN/PS.S.txt
@ -1,15 +1,16 @@
|
||||
PR#3
|
||||
PREFIX /A2OSX.BUILD
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
.OR $2000
|
||||
.TF BIN/PS
|
||||
.TF /A2OSX.BOOT/BIN/PS
|
||||
*--------------------------------------
|
||||
.INB INC/MACROS.I
|
||||
.INB INC/A2OSX.I
|
||||
.INB INC/A2OSX.API.I
|
||||
.INB INC/KERNEL.I
|
||||
.INB INC/LIBSTR.I
|
||||
*--------------------------------------
|
||||
@ -17,17 +18,20 @@ ZPPTR1 .EQ ZPBIN
|
||||
ZPPTR2 .EQ ZPBIN+2
|
||||
ZPPTR3 .EQ ZPBIN+4
|
||||
*--------------------------------------
|
||||
* Main entry point
|
||||
*--------------------------------------
|
||||
* Code signature and INIT table
|
||||
*--------------------------------------
|
||||
* CLD $D8
|
||||
* JMP (*,x) $7C
|
||||
* #JMPTABLE
|
||||
* /JMPTABLE
|
||||
* 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 Data Segment to Allocate
|
||||
.DA 0
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
* Relocation Table
|
||||
*--------------------------------------
|
||||
.1 .DA CS.INIT
|
||||
.DA CS.RUN
|
||||
.DA CS.DOEVENT
|
||||
@ -37,13 +41,14 @@ L.MSG0 .DA MSG0
|
||||
L.MSG1 .DA MSG1
|
||||
L.MSG2 .DA MSG2
|
||||
.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
|
||||
|
||||
>LDYAI TSKMGR.TABLE
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.RUN >LDYAI TSKMGR.TABLE+S.PS.SIZE
|
||||
>STYA ZPPTR1
|
||||
stz PS.COUNT
|
||||
|
||||
@ -52,13 +57,17 @@ CS.INIT >LIBLOADP L.LIBSTR
|
||||
|
||||
.1 lda (ZPPTR1)
|
||||
bpl .4
|
||||
|
||||
ldy #S.PS.hARGS
|
||||
lda (ZPPTR1),y
|
||||
beq .2
|
||||
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>PUSHYA
|
||||
bra .3
|
||||
|
||||
.2 >PUSHW L.MSG2
|
||||
|
||||
.3 ldy #S.PS.hCMD
|
||||
lda (ZPPTR1),y
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
@ -83,17 +92,16 @@ CS.INIT >LIBLOADP L.LIBSTR
|
||||
sta ZPPTR1
|
||||
bcc .5
|
||||
inc ZPPTR1+1
|
||||
|
||||
.5 inc PS.COUNT
|
||||
lda PS.COUNT
|
||||
cmp #K.PS.MAX
|
||||
beq .8
|
||||
jmp .1
|
||||
bne .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
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.RUN
|
||||
CS.DOEVENT clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
@ -106,8 +114,8 @@ CS.END
|
||||
hLibStr .BS 1
|
||||
PS.COUNT .BS 1
|
||||
LIBSTR >PSTRING "libstr.o"
|
||||
MSG0 >CSTRING "hPS Flags PID CMD ARGS\n"
|
||||
MSG1 >CSTRING " %03d %b $%h %16S %32S\n"
|
||||
MSG0 >CSTRING "ID Flags PID CMD ARGS\n"
|
||||
MSG1 >CSTRING "%03d %b %03d %16S %32S\n"
|
||||
MSG2 >PSTRING "(none)"
|
||||
MAN
|
||||
SAVE BIN/PS.S
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /A2OSX.BUILD
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /A2OSX.BUILD
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
@ -1,45 +1,73 @@
|
||||
PR#3
|
||||
PREFIX /A2OSX.BUILD
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
.OR $2000
|
||||
.TF DRV/CONSOLE.DRV
|
||||
.TF /A2OSX.BOOT/DRV/CONSOLE.DRV
|
||||
*--------------------------------------
|
||||
.INB INC/MACROS.I
|
||||
.INB INC/A2OSX.I
|
||||
.INB INC/A2OSX.API.I
|
||||
.INB INC/KERNEL.I
|
||||
.INB INC/IO.I
|
||||
*--------------------------------------
|
||||
CURSOR.BLINK.SPEED .EQ 2
|
||||
*--------------------------------------
|
||||
ZPBASL1 .EQ ZPDRV
|
||||
ZPBASL2 .EQ ZPDRV+2
|
||||
*--------------------------------------
|
||||
* Main DRV entry point
|
||||
* input :
|
||||
* X = CMD
|
||||
* 0 : OPEN
|
||||
* 2 : GETEVENT
|
||||
* 6 : OUT
|
||||
* 8 : CLOSE
|
||||
*--------------------------------------
|
||||
* CLD $D8
|
||||
* JMP (*,x) $7C
|
||||
* #JMPTABLE
|
||||
* /JMPTABLE
|
||||
*--------------------------------------
|
||||
CURSOR.BLINK.SPEED .EQ 2
|
||||
* File Header (16 Bytes)
|
||||
*--------------------------------------
|
||||
CS.START cld
|
||||
jmp (.1,x)
|
||||
.1 .DA OPEN
|
||||
jmp Dev.Detect cld,jmp abs=DRV
|
||||
.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 OUT
|
||||
.DA COUT
|
||||
.DA CLOSE
|
||||
.DA GETINFO
|
||||
.DA IRQ
|
||||
L.DEVINFO .DA DEVINFO
|
||||
.DA 0 end or relocation
|
||||
.DA CS.END-CS.START Code Length To Relocate
|
||||
.DA 0 Data Segemnt to Allocate
|
||||
*--------------------------------------
|
||||
OPEN stz CURON
|
||||
lda #$80
|
||||
@ -47,31 +75,10 @@ OPEN stz CURON
|
||||
|
||||
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
|
||||
rts
|
||||
*--------------------------------------
|
||||
GETEVENT >PULLW pEvent
|
||||
lda A2osX.TIMER16
|
||||
GETEVENT lda A2osX.TIMER16
|
||||
and #CURSOR.BLINK.SPEED
|
||||
eor CURON
|
||||
beq .9
|
||||
@ -81,24 +88,24 @@ GETEVENT >PULLW pEvent
|
||||
sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
OUT >PULLA
|
||||
jsr COUT
|
||||
COUT jsr COUT1
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
CLOSE lda A2osX.SCREENS
|
||||
and #$FF^A2osX.SCREENS.C
|
||||
sta A2osX.SCREENS
|
||||
CLOSE
|
||||
* lda A2osX.SCREENS
|
||||
* and #$FF^A2osX.SCREENS.C
|
||||
* sta A2osX.SCREENS
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
GETINFO clc
|
||||
GETINFO >LDYA L.DEVINFO
|
||||
IRQ clc
|
||||
rts
|
||||
|
||||
*--------------------------------------
|
||||
* PRIVATE
|
||||
*--------------------------------------
|
||||
COUT cmp #8
|
||||
COUT1 cmp #8
|
||||
bne .2
|
||||
ldx CH
|
||||
beq .10
|
||||
@ -113,7 +120,8 @@ COUT cmp #8
|
||||
sta CH
|
||||
dec CV
|
||||
|
||||
.12 lda #$A0
|
||||
.12 lda #$20
|
||||
ora INVFLG
|
||||
ldx CH
|
||||
ldy CV
|
||||
jsr SetCharAtXY
|
||||
@ -121,6 +129,7 @@ COUT cmp #8
|
||||
|
||||
.2 cmp #13
|
||||
beq CROUT
|
||||
ora INVFLG
|
||||
ldx CH
|
||||
ldy CV
|
||||
jsr SetCharAtXY
|
||||
@ -131,14 +140,19 @@ FSOUT ldx CH
|
||||
rts
|
||||
*--------------------------------------
|
||||
CROUT jsr CLREOL
|
||||
*--------------------------------------
|
||||
CROUT1 stz CH
|
||||
ldy CV
|
||||
cpy #23
|
||||
beq SCROLL.UP
|
||||
inc CV
|
||||
rts
|
||||
|
||||
*--------------------------------------
|
||||
SCROLL.UP ldx #0
|
||||
|
||||
lda RD80STORE
|
||||
pha
|
||||
|
||||
sta SET80STORE
|
||||
|
||||
.1 lda BASEL,x
|
||||
@ -169,13 +183,18 @@ SCROLL.UP ldx #0
|
||||
|
||||
cpx #23
|
||||
bne .1
|
||||
jsr CLREOL
|
||||
pla
|
||||
bmi .8
|
||||
sta CLR80STORE
|
||||
|
||||
|
||||
.8 rts
|
||||
*--------------------------------------
|
||||
CLREOL ldx CH
|
||||
.1 phx
|
||||
ldy CV
|
||||
lda #$A0
|
||||
lda #$20
|
||||
ora INVFLG
|
||||
jsr SetCharAtXY
|
||||
plx
|
||||
inx
|
||||
@ -186,8 +205,6 @@ CLREOL ldx CH
|
||||
HOME stz CH
|
||||
stz CV
|
||||
|
||||
lda RDPAGE2
|
||||
pha
|
||||
lda RD80STORE
|
||||
pha
|
||||
|
||||
@ -221,23 +238,15 @@ HOME stz CH
|
||||
bpl .1
|
||||
|
||||
pla
|
||||
bmi .4
|
||||
bmi .8
|
||||
sta CLR80STORE
|
||||
bra .5
|
||||
.4 sta SET80STORE
|
||||
|
||||
.5 pla
|
||||
bmi .6
|
||||
sta CLRPAGE2
|
||||
bra .8
|
||||
.6 sta SETPAGE2
|
||||
|
||||
.8 rts
|
||||
*--------------------------------------
|
||||
CUROFF lda CURON
|
||||
beq CUREXIT.RTS
|
||||
|
||||
CURBLNK lda A2osX.ACTIVESCRN
|
||||
CURBLNK lda A2osX.ASCREEN
|
||||
and #A2osX.SCREENS.C
|
||||
bne CURBLNK1
|
||||
|
||||
@ -268,8 +277,6 @@ CUREXIT lda CURON
|
||||
CUREXIT.RTS rts
|
||||
*--------------------------------------
|
||||
SetCharAtXY pha
|
||||
lda RDPAGE2
|
||||
pha
|
||||
lda RD80STORE
|
||||
pha
|
||||
sta SET80STORE
|
||||
@ -287,23 +294,16 @@ SetCharAtXY pha
|
||||
lda BASEH,y
|
||||
sta ZPBASL1+1
|
||||
|
||||
ply
|
||||
plx
|
||||
pla
|
||||
sta (ZPBASL1)
|
||||
tya
|
||||
bmi .3
|
||||
txa
|
||||
bmi .8
|
||||
sta CLR80STORE
|
||||
.3 txa
|
||||
bpl .4
|
||||
sta SETPAGE2
|
||||
rts
|
||||
.4 sta CLRPAGE2
|
||||
rts
|
||||
|
||||
.8 rts
|
||||
*--------------------------------------
|
||||
GetCharAtXY lda RDPAGE2
|
||||
pha
|
||||
lda RD80STORE
|
||||
GetCharAtXY lda RD80STORE
|
||||
pha
|
||||
sta SET80STORE
|
||||
txa
|
||||
@ -323,28 +323,22 @@ GetCharAtXY lda RDPAGE2
|
||||
lda (ZPBASL1)
|
||||
|
||||
plx
|
||||
bmi .3
|
||||
bmi .8
|
||||
sta CLR80STORE
|
||||
|
||||
.3 plx
|
||||
bpl .4
|
||||
|
||||
sta SETPAGE2
|
||||
rts
|
||||
|
||||
.4 sta CLRPAGE2
|
||||
rts
|
||||
.8 rts
|
||||
*--------------------------------------
|
||||
CS.END
|
||||
DEVNAME >PSTRING "CON"
|
||||
DRV.CS.END
|
||||
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
|
||||
CV .BS 1
|
||||
INVFLG .BS 1
|
||||
CURON .BS 1
|
||||
CURCHAR .BS 1
|
||||
*--------------------------------------
|
||||
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
|
||||
DEVINFO .DA #S.DEVINFO.TYPE.CHAR
|
||||
.DA #80
|
||||
.DA #24
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE DRV/CONSOLE.DRV.S
|
||||
|
@ -1,73 +1,81 @@
|
||||
PR#3
|
||||
PREFIX /A2OSX.BUILD
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
.OR $2000
|
||||
.TF DRV/DHGR.DRV
|
||||
.TF /A2OSX.BOOT/DRV/DHGR.DRV
|
||||
*--------------------------------------
|
||||
.INB INC/MACROS.I
|
||||
.INB INC/A2OSX.I
|
||||
.INB INC/A2OSX.API.I
|
||||
.INB INC/KERNEL.I
|
||||
.INB INC/IO.I
|
||||
*--------------------------------------
|
||||
ZPBASE .EQ ZPDRV
|
||||
ZPCOLOR .EQ ZPDRV+2
|
||||
*--------------------------------------
|
||||
* Main DRV entry point
|
||||
* input :
|
||||
* X = CMD
|
||||
* 0 : OPEN
|
||||
* 2 : GETEVENT
|
||||
* 6 : OUT
|
||||
* 8 : CLOSE
|
||||
*--------------------------------------
|
||||
* CLD $D8
|
||||
* JMP (*,x) $7C
|
||||
* #JMPTABLE
|
||||
* /JMPTABLE
|
||||
* File Header (16 Bytes)
|
||||
*--------------------------------------
|
||||
CS.START cld
|
||||
jmp (.1,x)
|
||||
.1 .DA OPEN
|
||||
jmp Dev.Detect cld,jmp abs=DRV
|
||||
.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 OUT
|
||||
.DA COUT
|
||||
.DA CLOSE
|
||||
.DA GETINFO
|
||||
.DA IRQ
|
||||
.DA SETPIXEL
|
||||
.DA GETPIXEL
|
||||
.DA HLINE
|
||||
.DA VLINE
|
||||
.DA FILLREC
|
||||
.DA BITBLT
|
||||
.DA FILLREC
|
||||
L.DEVINFO .DA DEVINFO
|
||||
.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
|
||||
sta (pDevContext)
|
||||
OPEN sta SETHIRES
|
||||
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
|
||||
|
||||
.81 dex
|
||||
@ -77,61 +85,37 @@ OPEN lda #S.DEV.F.GFX
|
||||
lda BASEH,x
|
||||
sta ZPBASE+1
|
||||
|
||||
lda #$D5
|
||||
|
||||
lda #$55
|
||||
* lda #$00
|
||||
|
||||
ldy #39
|
||||
sta SETPAGE2
|
||||
.82 sta (ZPBASE),y
|
||||
dey
|
||||
bpl .82
|
||||
|
||||
lda #$AA
|
||||
|
||||
lda #$2A
|
||||
* lda #$00
|
||||
|
||||
ldy #39
|
||||
sta CLRPAGE2
|
||||
.83 sta (ZPBASE),y
|
||||
dey
|
||||
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
|
||||
bne .81
|
||||
|
||||
>DEBUG
|
||||
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
GETEVENT
|
||||
OUT clc
|
||||
COUT
|
||||
IRQ sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
CLOSE lda A2osX.SCREENS
|
||||
and #$FF^A2osX.SCREENS.G
|
||||
sta A2osX.SCREENS
|
||||
clc
|
||||
CLOSE clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
GETINFO >LDYA L.DEVINFO
|
||||
@ -139,104 +123,139 @@ GETINFO >LDYA L.DEVINFO
|
||||
rts
|
||||
*--------------------------------------
|
||||
* SETPIXEL
|
||||
*--------------------------------------
|
||||
* PULLB = X.LO
|
||||
* PULLB = X.HI
|
||||
* PULLB = Y
|
||||
* PULLB = Mode
|
||||
* 00000001=mono
|
||||
* 00000001=B/W
|
||||
* 00000010=16 colors
|
||||
* 1000000=xor (mono on 1 bit)
|
||||
* PULLW = X
|
||||
* PULLB = Y
|
||||
* PULLB = Color (if not xor)
|
||||
*--------------------------------------
|
||||
SETPIXEL >PULLA X.LO
|
||||
tax
|
||||
>PULLA X.HI
|
||||
SETPIXEL sta SETHIRES
|
||||
sta SET80STORE prepare for page switching
|
||||
|
||||
>PULLA Pull Mode
|
||||
and #$FF
|
||||
bpl SETPIXEL.1
|
||||
|
||||
SETPIXEL.XOR >PULLYA Y=X.LO,A=X.HI
|
||||
lsr if 256 =< x < 511
|
||||
bcs .1
|
||||
lsr
|
||||
bcs .2 if 512 < x
|
||||
ldy DIV7.0,x
|
||||
lda MOD7.0,x
|
||||
lda DIV7.0,y
|
||||
ldx MOD7.0,y
|
||||
bra .3
|
||||
|
||||
.1 ldy DIV7.256,x
|
||||
lda MOD7.256,x
|
||||
.1 lda DIV7.256,y
|
||||
ldx MOD7.256,y
|
||||
bra .3
|
||||
|
||||
.2 ldy DIV7.512,x
|
||||
lda MOD7.512,x
|
||||
.2 lda DIV7.512,y
|
||||
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
|
||||
tax
|
||||
lda BASEL,x setup line Base Ptr
|
||||
sta ZPBASE
|
||||
lda BASEH,x
|
||||
sta ZPBASE+1
|
||||
|
||||
sta SET80STORE and prepare for page switching
|
||||
sta SETHIRES
|
||||
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
|
||||
plx
|
||||
|
||||
>PULLA Pull Color
|
||||
lsr
|
||||
bcs .3 set white pixel
|
||||
bcs .6 set white pixel
|
||||
|
||||
lda (ZPBASE),y
|
||||
and Mono.NMasks,x includes And $7F for mono
|
||||
sta (ZPBASE),y
|
||||
rts
|
||||
|
||||
.3 lda (ZPBASE),y
|
||||
.6 lda (ZPBASE),y
|
||||
and #$7F switch back this byte to mono
|
||||
ora Mono.Masks,x
|
||||
sta (ZPBASE),y
|
||||
rts
|
||||
*--------------------------------------
|
||||
* X=MOD,Y=DIV
|
||||
*--------------------------------------
|
||||
SETPIXEL.COLOR tya
|
||||
lsr Divide Col by 2 to get in range 0->39
|
||||
and #$FE make it 0->38 as color mask on 4 bytes
|
||||
clc
|
||||
SETPIXEL.COLOR >PULLA Get X.LO...
|
||||
pha
|
||||
>PULLB GBYTE Get X.HI in temp location
|
||||
pla
|
||||
lsr GBYTE divide by 4 (range 0->139)
|
||||
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
|
||||
sta ZPBASE
|
||||
|
||||
|
||||
ldx MOD7.0,y
|
||||
|
||||
txa get MOD
|
||||
asl times 4 to compute index in color tables
|
||||
asl
|
||||
asl
|
||||
tax set in X for Masks,NMasks
|
||||
|
||||
>PULLA get COLOR
|
||||
|
||||
asl
|
||||
asl
|
||||
tay
|
||||
@ -310,7 +329,68 @@ FILLREC
|
||||
BITBLT
|
||||
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
|
||||
.HS 0202020202020203030303030303
|
||||
.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
|
||||
*--------------------------------------
|
||||
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
|
||||
*--------------------------------------
|
||||
DS.START
|
||||
DEVINFO .DA #S.DEV.F.GFX type of DEVINFO STRUCT
|
||||
DEVINFO .DA #S.DEVINFO.TYPE.GFX type of DEVINFO STRUCT
|
||||
DEVINFO.MODES .DA #%10000011 XOR,16 & B/W
|
||||
DEVINFO.W .DA 560 X.SIZE
|
||||
DEVINFO.H .DA 192 Y.SIZE
|
||||
DS.END
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE DRV/DHGR.DRV.S
|
||||
|
@ -1,16 +1,17 @@
|
||||
PR#3
|
||||
PREFIX /A2OSX.BUILD
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
.OR $2000
|
||||
.TF DRV/MOUSE.DRV
|
||||
.TF /A2OSX.BOOT/DRV/MOUSE.DRV
|
||||
*--------------------------------------
|
||||
.INB INC/MACROS.I
|
||||
.INB INC/IO.I
|
||||
.INB INC/A2OSX.I
|
||||
.INB INC/A2OSX.API.I
|
||||
*--------------------------------------
|
||||
ZPGoMouse .EQ ZPDRV
|
||||
ZPTmpPtr1 .EQ ZPDRV+2
|
||||
@ -43,29 +44,30 @@ MOUSESTSx.DOWN .EQ %10000000
|
||||
MOUSESTSx.LDOWN .EQ %01000000
|
||||
MOUSESTSx.MOVED .EQ %00100000
|
||||
*--------------------------------------
|
||||
* Main DRV entry point
|
||||
* input :
|
||||
* X = CMD
|
||||
* 0 : OPEN
|
||||
* 2 : GETEVENT
|
||||
* 4 : OUT
|
||||
* 6 : CLOSE
|
||||
*--------------------------------------
|
||||
* CLD $D8
|
||||
* JMP (*,x) $7C
|
||||
* #JMPTABLE
|
||||
* /JMPTABLE
|
||||
* File Header (16 Bytes)
|
||||
*--------------------------------------
|
||||
CS.START cld
|
||||
jmp (.1,x)
|
||||
.1 .DA OPEN
|
||||
.DA GETEVENT
|
||||
.DA OUT
|
||||
.DA CLOSE
|
||||
.DA 0 end or relocation
|
||||
.DA CS.END-CS.START
|
||||
jmp Dev.Detect cld,jmp abs=DRV
|
||||
.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
|
||||
*--------------------------------------
|
||||
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
|
||||
sta ZPTmpPtr1+1
|
||||
|
||||
@ -77,44 +79,66 @@ OPEN stz ZPTmpPtr1
|
||||
bne .3
|
||||
dex
|
||||
bpl .2
|
||||
bra .10
|
||||
bra .4
|
||||
|
||||
.3 inc ZPTmpPtr1+1 no match, try next slot....
|
||||
lda ZPTmpPtr1+1
|
||||
cmp #$C8
|
||||
bne .1
|
||||
|
||||
>LDYA L.MSG.DETECT.KO
|
||||
>SYSCALL SYS.SysScrPPSTRYA
|
||||
|
||||
lda #DEVMGR.ERRNOHW Not Found in any slot, exiting
|
||||
sec
|
||||
rts
|
||||
|
||||
.10 lda ZPTmpPtr1+1
|
||||
.4 lda ZPTmpPtr1+1
|
||||
sta DEVSLOTCn
|
||||
and #$0F
|
||||
sta DEVSLOT0n
|
||||
pha
|
||||
ora #$30
|
||||
sta DEVNAME+4
|
||||
pla
|
||||
ora #$C0
|
||||
sta DEVSLOTCn
|
||||
sta DEV.HEADER.NAME+4
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
sta DEVSLOTn0
|
||||
|
||||
ldx #0
|
||||
ldy #S.DEV.NAME
|
||||
|
||||
.4 lda DEVNAME,x
|
||||
sta (pDevContext),y
|
||||
cpx DEVNAME
|
||||
beq .5
|
||||
inx
|
||||
iny
|
||||
bne .4
|
||||
|
||||
.5 bit RROMBNK2 Renable ROM to allow MOUSE II firmware
|
||||
>LDYA L.MSG.DETECT.OK
|
||||
>SYSCALL SYS.SysScrPPSTRYA
|
||||
>LDYA L.DEV.HEADER.NAME
|
||||
>SYSCALL SYS.SysScrPPSTRYA
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.END
|
||||
MSG.DETECT >PSTRING "\nApple II Mouse Driver."
|
||||
MSG.DETECT.OK >PSTRING "\nMouse Card Driver Installed As Device : "
|
||||
MSG.DETECT.KO >PSTRING "\nMouse Card Not Found."
|
||||
*--------------------------------------
|
||||
* 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
|
||||
sei
|
||||
@ -156,19 +180,15 @@ OPEN stz ZPTmpPtr1
|
||||
jsr GOMOUSE
|
||||
|
||||
pla
|
||||
bpl .6
|
||||
bpl .1
|
||||
sta SET80STORE
|
||||
|
||||
.6 plp
|
||||
.1 plp
|
||||
|
||||
lda #S.DEV.F.MOUSE+S.DEV.F.EVENT
|
||||
sta (pDevContext)
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
GETEVENT >PULLW pEvent
|
||||
|
||||
php
|
||||
GETEVENT php
|
||||
sei
|
||||
|
||||
lda RD80STORE
|
||||
@ -205,7 +225,7 @@ GETEVENT >PULLW pEvent
|
||||
ora #EVENT.MOUSEMOVE
|
||||
sta (pEvent),y
|
||||
|
||||
ldy #S.EVT.DATAW1
|
||||
.4 ldy #S.EVT.DATAW1
|
||||
lda MOUSEXLOx,x
|
||||
sta (pEvent),y
|
||||
iny
|
||||
@ -218,7 +238,7 @@ GETEVENT >PULLW pEvent
|
||||
lda MOUSEYHIx,x
|
||||
sta (pEvent),y
|
||||
|
||||
.4 pla
|
||||
pla
|
||||
bpl .5
|
||||
sta SET80STORE
|
||||
|
||||
@ -235,7 +255,8 @@ GETEVENT >PULLW pEvent
|
||||
.9 sec A=0 : no event
|
||||
rts
|
||||
*--------------------------------------
|
||||
OUT clc
|
||||
COUT
|
||||
IRQ sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
CLOSE php
|
||||
@ -247,6 +268,10 @@ CLOSE php
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
GETINFO >LDYA L.DEVINFO
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
GOMOUSE pha
|
||||
stz ZPGoMouse
|
||||
ldx DEVSLOTCn
|
||||
@ -257,15 +282,15 @@ GOMOUSE pha
|
||||
pla
|
||||
jmp (ZPGoMouse)
|
||||
*--------------------------------------
|
||||
CS.END
|
||||
DRV.CS.END
|
||||
DEVSIG.Offset .HS 05070B0CFB
|
||||
DEVSIG.Value .HS 38180120D6
|
||||
DEVSIG.Length .EQ DEVSIG.Value-DEVSIG.Offset
|
||||
DEVNAME >PSTRING "MOU0"
|
||||
DEVSLOT0n .BS 1
|
||||
DEVSLOTCn .BS 1
|
||||
DEVSLOTn0 .BS 1
|
||||
*--------------------------------------
|
||||
DEVINFO .DA #S.DEVINFO.TYPE.XY
|
||||
MAN
|
||||
SAVE DRV/MOUSE.DRV.S
|
||||
ASM
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /A2OSX.BUILD
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
@ -69,12 +69,12 @@ OPEN stz ZPTmpPtr1
|
||||
sta DEVNAME+4
|
||||
|
||||
lda #S.DEV.F.CHAR+S.DEV.F.OUT
|
||||
sta (DEVMGR.DEVPTR)
|
||||
sta (pDev)
|
||||
ldy #S.DEV.NAME
|
||||
|
||||
ldx #0
|
||||
.7 lda DEVNAME,x
|
||||
sta (DEVMGR.DEVPTR),y
|
||||
sta (pDev),y
|
||||
cpx DEVNAME
|
||||
beq .8
|
||||
inx
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /A2OSX.BUILD
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
@ -11,12 +11,46 @@ AUTO 6
|
||||
.INB INC/MACROS.I
|
||||
.INB INC/A2OSX.I
|
||||
*--------------------------------------
|
||||
ZPTmpPtr1 .EQ ZPDRV
|
||||
BUF.SIZE .EQ $20
|
||||
BUF.MASK .EQ $1F
|
||||
*--------------------------------------
|
||||
SIG.05 .EQ $38
|
||||
SIG.07 .EQ $18
|
||||
SIG.0B .EQ $01
|
||||
SIG.0C .EQ $31
|
||||
ZPGoCard .EQ ZPDRV
|
||||
ZPTmpPtr1 .EQ ZPDRV+2
|
||||
*--------------------------------------
|
||||
* 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
|
||||
* input :
|
||||
@ -25,6 +59,8 @@ SIG.0C .EQ $31
|
||||
* 2 : GETEVENT
|
||||
* 4 : OUT
|
||||
* 6 : CLOSE
|
||||
* 8 : GETINFO
|
||||
* 10 : IRQ
|
||||
*--------------------------------------
|
||||
* CLD $D8
|
||||
* JMP (*,x) $7C
|
||||
@ -33,53 +69,81 @@ SIG.0C .EQ $31
|
||||
*--------------------------------------
|
||||
CS.START cld
|
||||
jmp (.1,x)
|
||||
.DA CS.END-CS.START
|
||||
.DA 0
|
||||
.1 .DA OPEN
|
||||
.DA GETEVENT
|
||||
.DA OUT
|
||||
.DA CLOSE
|
||||
.DA GETINFO
|
||||
L.IRQ .DA IRQ
|
||||
L.DEVINFO .DA DEVINFO
|
||||
.DA 0 end or relocation
|
||||
.DA CS.END-CS.START
|
||||
*--------------------------------------
|
||||
OPEN stz ZPTmpPtr1
|
||||
lda #$C1
|
||||
sta ZPTmpPtr1+1
|
||||
.1 ldy #5
|
||||
lda (ZPTmpPtr1),y
|
||||
cmp #SIG.05
|
||||
bne .2
|
||||
|
||||
ldy #7
|
||||
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
|
||||
.1 ldx #DEVSIG.Length-1
|
||||
|
||||
.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
|
||||
cmp #$C8
|
||||
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
|
||||
sta DEVSLOT
|
||||
sta DEVSLOT0n
|
||||
ora #$30
|
||||
sta DEVNAME+4
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
sta DEVSLOTn0
|
||||
|
||||
lda #S.DEV.F.CHAR+S.DEV.F.OUT
|
||||
sta (pDevContext)
|
||||
ldy #S.DEV.NAME
|
||||
* ldy #SSC.INIT
|
||||
* jsr GoCard
|
||||
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
|
||||
ldy #S.DEV.NAME
|
||||
.7 lda DEVNAME,x
|
||||
sta (pDevContext),y
|
||||
cpx DEVNAME
|
||||
@ -87,25 +151,166 @@ OPEN stz ZPTmpPtr1
|
||||
inx
|
||||
iny
|
||||
bne .7
|
||||
|
||||
lda #S.DEV.F.CHAR+S.DEV.F.OUT+S.DEV.F.EVENT
|
||||
sta (pDevContext)
|
||||
|
||||
.8 clc
|
||||
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
|
||||
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
|
||||
*--------------------------------------
|
||||
CLOSE clc
|
||||
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
|
||||
DEVSIG.Offset .HS 05070B0C
|
||||
DEVSIG.Value .HS 38180131
|
||||
DEVSIG.Length .EQ DEVSIG.Value-DEVSIG.Offset
|
||||
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
|
||||
SAVE DRV/SSC.DRV.S
|
||||
|
@ -1,16 +1,17 @@
|
||||
PR#3
|
||||
PREFIX /A2OSX.BUILD
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
.OR $2000
|
||||
.TF DRV/UTHERNET.DRV
|
||||
.TF /A2OSX.BOOT/DRV/UTHERNET.DRV
|
||||
*--------------------------------------
|
||||
.INB INC/MACROS.I
|
||||
.INB INC/A2OSX.I
|
||||
* .INB INC/ZP.I
|
||||
.INB INC/A2OSX.API.I
|
||||
.INB INC/KERNEL.I
|
||||
*--------------------------------------
|
||||
ZPTmpPTR .EQ ZPDRV
|
||||
*--------------------------------------
|
||||
@ -110,39 +111,28 @@ ERRTNOFRAME .EQ 0
|
||||
ERRNOBUFFER .EQ 1
|
||||
ERRTIMEOUT .EQ 2
|
||||
*--------------------------------------
|
||||
* Main DRV entry point
|
||||
* input :
|
||||
* X = CMD
|
||||
* 0 : OPEN
|
||||
* 2 : GETEVENT
|
||||
* 4 : OUT
|
||||
* 6 : CLOSE
|
||||
* 8 : GETINFO
|
||||
*--------------------------------------
|
||||
* CLD $D8
|
||||
* JMP (*,x) $7C
|
||||
* #JMPTABLE
|
||||
* /JMPTABLE
|
||||
* File Header (16 Bytes)
|
||||
*--------------------------------------
|
||||
CS.START cld
|
||||
jmp (.1,x)
|
||||
.1 .DA OPEN
|
||||
.DA GETEVENT
|
||||
.DA OUT
|
||||
.DA CLOSE
|
||||
.DA GETINFO
|
||||
L.DEVINFO .DA DEVINFO
|
||||
.DA 0 end or relocation
|
||||
.DA CS.END-CS.START Code Length To Relocate
|
||||
.DA DS.END-DS.START Data Segment to Allocate
|
||||
jmp Dev.Detect cld,jmp abs=DRV
|
||||
.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
|
||||
*--------------------------------------
|
||||
* input :
|
||||
* none
|
||||
* output :
|
||||
* CC on success
|
||||
* CS on error
|
||||
*--------------------------------------
|
||||
OPEN ldx #$10
|
||||
* Relocation Table
|
||||
*--------------------------------------
|
||||
L.MSG.DETECT .DA MSG.DETECT
|
||||
.DA 0 End Of Reloc Table
|
||||
*--------------------------------------
|
||||
Dev.Detect sta hArgs
|
||||
>LDYA L.MSG.DETECT
|
||||
>SYSCALL SYS.SysScrPPSTRYA
|
||||
|
||||
ldx #$10
|
||||
.1 stx DEVSLOTx0
|
||||
>LDYAI PP.ID
|
||||
>STYA PacketPagePTR,x
|
||||
@ -151,18 +141,21 @@ OPEN ldx #$10
|
||||
bne .2
|
||||
cmp /DEVID
|
||||
beq .3
|
||||
.2 inc DEVNAME+4
|
||||
|
||||
.2 inc DEV.HEADER.NAME+4
|
||||
txa
|
||||
clc
|
||||
adc #$10
|
||||
tax
|
||||
cpx #$80
|
||||
bne .1
|
||||
|
||||
lda #DEVMGR.ERRNOHW
|
||||
sec
|
||||
rts
|
||||
.3 ldy #S.DEV.hARGS
|
||||
lda (pDevContext),y
|
||||
|
||||
.3 lda hARGS
|
||||
|
||||
beq .4
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>STYA ZPTmpPTR
|
||||
@ -172,8 +165,93 @@ OPEN ldx #$10
|
||||
sec
|
||||
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
|
||||
>STYA PacketPagePTR,x
|
||||
>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
|
||||
>STYA PacketPageDATA,x
|
||||
|
||||
lda #S.DEV.F.NET+S.DEV.F.EVENT+S.DEV.F.OUT
|
||||
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
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
* input :
|
||||
@ -217,8 +284,7 @@ OPEN ldx #$10
|
||||
* CC no event
|
||||
* CS event
|
||||
*--------------------------------------
|
||||
GETEVENT >PULLW pEvent
|
||||
ldx DEVSLOTx0
|
||||
GETEVENT ldx DEVSLOTx0
|
||||
>LDYAI PP.RxEvent
|
||||
>STYA PacketPagePTR,x
|
||||
>LDYA PacketPageDATA,x
|
||||
@ -237,7 +303,7 @@ GETEVENT.RxOK
|
||||
>LDYA RTDATA,x get RxLength
|
||||
>STYA FRAMELEN
|
||||
>PUSHYA
|
||||
>PUSHB 0
|
||||
>PUSHBI 0
|
||||
>SYSCALL SYS.GetMem
|
||||
bcs .99
|
||||
>STYA ZPTmpPTR
|
||||
@ -254,6 +320,7 @@ GETEVENT.RxOK
|
||||
sta (pEvent)
|
||||
ldy #0
|
||||
ldx DEVSLOTx0
|
||||
|
||||
.1 lda RTDATA,x
|
||||
sta (ZPTmpPTR),y
|
||||
iny
|
||||
@ -267,13 +334,26 @@ GETEVENT.RxOK
|
||||
bne .3
|
||||
inc ZPTmpPTR+1
|
||||
.3 jsr DecFrameLen
|
||||
beq .8
|
||||
bra .1
|
||||
bne .1
|
||||
.8 clc
|
||||
rts
|
||||
|
||||
.99 sec
|
||||
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:
|
||||
* PULLW = FRAME PTR
|
||||
@ -282,7 +362,7 @@ GETEVENT.RxOK
|
||||
* CC on success
|
||||
* CS on error
|
||||
*--------------------------------------
|
||||
OUT >PULLW ZPTmpPTR
|
||||
SEND >PULLW ZPTmpPTR
|
||||
>PULLW FRAMELEN
|
||||
|
||||
ldy #11 Add Src MAC Address
|
||||
@ -341,20 +421,6 @@ SENDPREADY ldy #0
|
||||
.8 clc
|
||||
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
|
||||
*--------------------------------------
|
||||
Reset ldx DEVSLOTx0
|
||||
@ -363,74 +429,25 @@ Reset ldx DEVSLOTx0
|
||||
>LDYAI PP.SelfCTL.LID+PP.SelfCTL.RESET
|
||||
>STYA PacketPageDATA,x
|
||||
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
|
||||
bne .1
|
||||
lda FRAMELEN+1
|
||||
beq .2
|
||||
beq .8
|
||||
dec FRAMELEN+1
|
||||
.1 dec FRAMELEN
|
||||
.2 lda FRAMELEN
|
||||
ora FRAMELEN+1
|
||||
rts
|
||||
lda #1 Make something NZ
|
||||
.8 rts
|
||||
*--------------------------------------
|
||||
CS.END
|
||||
DEVNAME >PSTRING "ETH1"
|
||||
*--------------------------------------
|
||||
DS.START
|
||||
DRV.CS.END
|
||||
*--------------------------------------
|
||||
DEVSLOTx0 .BS 1
|
||||
FRAMELEN .BS 2
|
||||
*--------------------------------------
|
||||
DEVINFO
|
||||
DEVINFO .DA #S.DEVINFO.TYPE.NET
|
||||
MAC .BS 6
|
||||
*--------------------------------------
|
||||
DS.END
|
||||
LINK.STATUS .BS 1
|
||||
LINK.SPEED .BS 1 SPEED/DUPLEX
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE DRV/UTHERNET.DRV.S
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /A2OSX.BUILD
|
||||
PREFIX /A2OSX.BOOT
|
||||
NEW
|
||||
INC 1
|
||||
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
|
||||
PREFIX /A2OSX.BUILD
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
*--------------------------------------
|
||||
* KERNEL Reserved ZP Location 00-1F,56-FF
|
||||
* Aux ZP
|
||||
*--------------------------------------
|
||||
ZPQuickPtr1 .EQ $90 Temp Ptrs for use in very limited scope
|
||||
ZPQuickPtr2 .EQ $92 (could be trashed by any JSR)
|
||||
ZPQuickPtr3 .EQ $94
|
||||
ZPQuickPtr4 .EQ $96
|
||||
ZPQuickPtr1 .EQ $0 Temp Ptrs for use in very limited scope
|
||||
ZPQuickPtr2 .EQ $2 (could be trashed by any JSR)
|
||||
ZPQuickPtr3 .EQ $4
|
||||
ZPQuickPtr4 .EQ $6
|
||||
|
||||
ZPLIB .EQ $A0 Main
|
||||
ZPDRV .EQ $B0 Main
|
||||
ZPBIN .EQ $C0 Main
|
||||
*--------------------------------------
|
||||
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
|
||||
pCode .EQ $10
|
||||
pData .EQ $12
|
||||
pStack .EQ $14
|
||||
|
||||
SYS.GetMemLenA .EQ $08
|
||||
SYS.GetMemByIDA .EQ $0A
|
||||
SYS.GetMemByNameA .EQ $0C
|
||||
*--------------------------------------
|
||||
SYS.NewPStr .EQ $10
|
||||
SYS.PStrCpyA .EQ $12
|
||||
SYS.PStrCat .EQ $14
|
||||
SYS.PStrCmp .EQ $16
|
||||
pLib .EQ $16
|
||||
pDev .EQ $18
|
||||
|
||||
SYS.PStrGetTkn .EQ $18
|
||||
SYS.GetPStrIndex .EQ $1A
|
||||
*--------------------------------------
|
||||
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
|
||||
pEvent .EQ $1A
|
||||
pPs .EQ $1C
|
||||
|
||||
SYS.SetEnvVarH .EQ $38
|
||||
SYS.SetEnvVarP .EQ $3A
|
||||
ZPDRV .EQ $80
|
||||
ZPBIN .EQ $90
|
||||
ZPLIB .EQ $A0
|
||||
*--------------------------------------
|
||||
SYS.MLICreate .EQ $40
|
||||
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
|
||||
* $C0 -> $FF KERNEL RESERVED
|
||||
*--------------------------------------
|
||||
SYS.GetDevByIDA .EQ $70
|
||||
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.SaveSM .EQ $100 Aux
|
||||
A2osX.SaveSX .EQ $101 Aux
|
||||
*--------------------------------------
|
||||
* Main $200 -> 2FF : (Reserved, ProDOS,Clock DRV....)
|
||||
* Main $300 -> 3EF : <free>
|
||||
* Main $3F0 -> 3FF : SYS Vectors (reset,IRQ...)
|
||||
* Aux $200 -> 3FD : /RAM Driver
|
||||
* Aux $3FE -> 3FF : IRQ Vector
|
||||
* Main $200 -> 2FF : (Used By ProDOS,Clock DRV....)
|
||||
* Main $300 -> 3EF : <free>
|
||||
* Main $3F0 -> 3FF : SYS Vectors (reset,IRQ...)
|
||||
* Aux $200 -> 3FD : /RAM Driver
|
||||
* Aux $3FE -> 3FF : IRQ Vector
|
||||
* Main/Aux $400 -> $7FF : Console Screen
|
||||
* Main/Aux $800 -> $BFF : System Screen
|
||||
*--------------------------------------
|
||||
* Console Screen .EQ $400 -> $7FF
|
||||
* System Screen .EQ $800 -> $BFF
|
||||
TmpBuffer256 .EQ $0200 Main
|
||||
*--------------------------------------
|
||||
TmpBuffer256 .EQ $0C00
|
||||
*--------------------------------------
|
||||
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
|
||||
D.STACK.BASE .EQ $0300 $03EF...
|
||||
D.STACK.TOP .EQ $03F0 ...Down to $0300
|
||||
*--------------------------------------
|
||||
* A2osX GLOBAL PAGE
|
||||
* $BE00->$BE0F : Public JMP
|
||||
* $BE00->$BE0F : Public Vetors
|
||||
*--------------------------------------
|
||||
A2osX.SYSCALL .EQ $BE00
|
||||
A2osX.MLICALL .EQ $BE02
|
||||
A2osX.LIBCALL .EQ $BE04
|
||||
A2osX.SLEEP .EQ $BE06
|
||||
Kernel.MLICALL .EQ $BE08
|
||||
Kernel.DRVCALL .EQ $BE0A
|
||||
Kernel.BINCALL .EQ $BE0C
|
||||
Kernel.LIBCALL .EQ $BE0E
|
||||
A2osX.LIBCALL .EQ $BE02
|
||||
A2osX.SLEEP .EQ $BE04
|
||||
A2osX.MLICALL .EQ $BE06
|
||||
*--------------------------------------
|
||||
A2osX.SCREENS .EQ $BE10
|
||||
A2osX.SCREENS.G .EQ %00000100
|
||||
A2osX.SCREENS.C .EQ %00000010
|
||||
A2osX.SCREENS.S .EQ %00000001
|
||||
A2osX.ACTIVESCRN .EQ $BE11
|
||||
* $BEE0->$BEFF : Public Variables
|
||||
*--------------------------------------
|
||||
A2osX.SCREENS .EQ $BEE0
|
||||
A2osX.SCREENS.S .EQ %00000001 System Screen
|
||||
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.RANDOM16 .EQ $BE14
|
||||
A2osX.CSCREEN.DEV .EQ $BEE2
|
||||
A2osX.GSCREEN.DEV .EQ $BEE3
|
||||
|
||||
A2osX.CPUTYPE .EQ $BE16
|
||||
A2osX.Z80SLOT .EQ $BE17
|
||||
A2osX.TIMER16 .EQ $BEE4
|
||||
A2osX.RANDOM16 .EQ $BEE6
|
||||
|
||||
Kernel.JMP .EQ $BE1A
|
||||
A2osX.SaveA .EQ $BE1C
|
||||
A2osX.SaveX .EQ $BE1D
|
||||
A2osX.SaveY .EQ $BE1E
|
||||
A2osX.GPCODE .EQ $BE20
|
||||
A2osX.CPUTYPE .EQ $BEE8
|
||||
A2osX.Z80SLOT .EQ $BEEA
|
||||
*--------------------------------------
|
||||
* MEM STRUCT
|
||||
*** Z80 Reserved ***
|
||||
*--------------------------------------
|
||||
S.MEM.F .EQ 0
|
||||
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
|
||||
*** IRQ Handler ***
|
||||
*--------------------------------------
|
||||
* LIB Function Indexes
|
||||
*--------------------------------------
|
||||
@ -266,60 +85,5 @@ TSKMGR.RUN .EQ 2
|
||||
TSKMGR.DOEVENT .EQ 4
|
||||
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
|
||||
SAVE INC/A2OSX.I
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /A2OSX.BUILD
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /A2OSX.BUILD
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
@ -7,13 +7,11 @@ AUTO 6
|
||||
*--------------------------------------
|
||||
* KERNEL CONSTANTS DEFINITON
|
||||
*--------------------------------------
|
||||
K.BIN.MAGICHEADER .EQ $7CD8
|
||||
*--------------------------------------
|
||||
K.TIMER16RESOLUTION .EQ 5 every 5 VBL (50hz), so 100ms
|
||||
*--------------------------------------
|
||||
K.ENV.SIZE .EQ $100
|
||||
K.DEV.MAX .EQ 20
|
||||
K.PS.MAX .EQ 32
|
||||
K.DEV.MAX .EQ 32
|
||||
K.PS.MAX .EQ 64
|
||||
*--------------------------------------
|
||||
K.NETCFG.MAX .EQ 4
|
||||
K.NETCFG.SIZE .EQ 128
|
||||
@ -28,17 +26,31 @@ K.TCPTABLE.SIZE .EQ 16
|
||||
K.ETH.FRAME.LEN .EQ 1514
|
||||
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
|
||||
EVTMGR.EVTPTR .EQ $82
|
||||
TSKMGR.TSKPTR .EQ $84
|
||||
TSKMGR.pNewPS .EQ $86
|
||||
* KERNEL Reserved ZP (Aux) Location 00-1F,56-FF
|
||||
*--------------------------------------
|
||||
ZPMemMgr .EQ $D0 Aux
|
||||
ZPSysScr .EQ $E0 Aux
|
||||
ZPMemMgr .EQ $B0
|
||||
ZPSysScr .EQ $C0
|
||||
ZPDevMgr .EQ $D0
|
||||
ZPTskMgr .EQ $E0
|
||||
*--------------------------------------
|
||||
R.VCPU16 .EQ $F0 Aux
|
||||
R.VCPU16 .EQ $F0
|
||||
R.AX .EQ R.VCPU16
|
||||
R.AL .EQ R.VCPU16
|
||||
R.AH .EQ R.VCPU16+$1
|
||||
@ -51,10 +63,27 @@ R.CH .EQ R.VCPU16+$5
|
||||
R.DX .EQ R.VCPU16+$6
|
||||
R.DL .EQ R.VCPU16+$6
|
||||
R.DH .EQ R.VCPU16+$7
|
||||
*R.CS .EQ R.VCPU16+$8
|
||||
*R.DS .EQ R.VCPU16+$A
|
||||
R.LS .EQ R.VCPU16+$C
|
||||
*R.SP .EQ R.VCPU16+$E
|
||||
*--------------------------------------
|
||||
MLICALL.PARAMS .EQ $1100
|
||||
DevMgr.Table .EQ $1200 K.DEV.MAX*S.DEV.SIZE=32*16=512b
|
||||
*--------------------------------------
|
||||
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
|
||||
SAVE INC/KERNEL.I
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /A2OSX.BUILD
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /A2OSX.BUILD
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /A2OSX.BUILD
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /A2OSX.BUILD
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
288
INC/MACROS.I.txt
288
INC/MACROS.I.txt
@ -1,13 +1,13 @@
|
||||
PR#3
|
||||
PREFIX /A2OSX.BUILD
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
*--------------------------------------
|
||||
.MA DEBUG
|
||||
.70 bit $C000
|
||||
bpl .70
|
||||
:1 bit $C000
|
||||
bpl :1
|
||||
sta $C010
|
||||
.EM
|
||||
*--------------------------------------
|
||||
@ -20,6 +20,12 @@ AUTO 6
|
||||
*--------------------------------------
|
||||
.MA MLICALL
|
||||
ldx #]1
|
||||
.DO ]1=MLIALLOCIRQ
|
||||
lda #2
|
||||
.FIN
|
||||
.DO ]1=MLIDEALLOCIRQ
|
||||
lda #1
|
||||
.FIN
|
||||
.DO ]1=MLIREADBLOCK
|
||||
lda #3
|
||||
.FIN
|
||||
@ -89,78 +95,6 @@ AUTO 6
|
||||
|
||||
jsr A2osX.MLICALL
|
||||
.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
|
||||
ldy ]1
|
||||
@ -168,13 +102,12 @@ AUTO 6
|
||||
jsr A2osX.DRVCALL
|
||||
.EM
|
||||
*--------------------------------------
|
||||
.MA LIBLOADP
|
||||
>PUSHW ]1
|
||||
ldx #SYS.LoadLib
|
||||
.MA LOADLIBYA
|
||||
ldx #SYS.LoadLibYA
|
||||
jsr A2osX.SYSCALL
|
||||
.EM
|
||||
*--------------------------------------
|
||||
.MA LIBLOADA
|
||||
.MA LOADLIBA
|
||||
ldx #SYS.LoadLibA
|
||||
jsr A2osX.SYSCALL
|
||||
.EM
|
||||
@ -185,200 +118,111 @@ AUTO 6
|
||||
jsr A2osX.LIBCALL
|
||||
.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
|
||||
*--------------------------------------
|
||||
.MA PUSHA
|
||||
dec R.SP
|
||||
sta (R.SP)
|
||||
dec pStack
|
||||
sta (pStack)
|
||||
.EM
|
||||
*--------------------------------------
|
||||
.MA PULLA
|
||||
lda (R.SP)
|
||||
inc R.SP
|
||||
lda (pStack)
|
||||
inc pStack
|
||||
.EM
|
||||
*--------------------------------------
|
||||
.MA PUSHYA
|
||||
dec R.SP
|
||||
sta (R.SP)
|
||||
dec pStack
|
||||
sta (pStack)
|
||||
pha
|
||||
tya
|
||||
dec R.SP
|
||||
sta (R.SP)
|
||||
dec pStack
|
||||
sta (pStack)
|
||||
pla
|
||||
.EM
|
||||
*--------------------------------------
|
||||
.MA PULLYA
|
||||
lda (R.SP)
|
||||
inc R.SP
|
||||
lda (pStack)
|
||||
inc pStack
|
||||
tay
|
||||
lda (R.SP)
|
||||
inc R.SP
|
||||
lda (pStack)
|
||||
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
|
||||
*--------------------------------------
|
||||
.MA PUSHBI
|
||||
dec R.SP
|
||||
dec pStack
|
||||
lda #]1
|
||||
sta (R.SP)
|
||||
sta (pStack)
|
||||
.EM
|
||||
*--------------------------------------
|
||||
.MA PUSHB
|
||||
.DO ]#=2
|
||||
dec R.SP
|
||||
dec pStack
|
||||
lda ]1,]2
|
||||
sta (R.SP)
|
||||
sta (pStack)
|
||||
.ELSE
|
||||
dec R.SP
|
||||
dec pStack
|
||||
lda ]1
|
||||
sta (R.SP)
|
||||
sta (pStack)
|
||||
.FIN
|
||||
.EM
|
||||
*--------------------------------------
|
||||
.MA PULLB
|
||||
.DO ]#=2
|
||||
lda (R.SP)
|
||||
lda (pStack)
|
||||
sta ]1,]2
|
||||
inc R.SP
|
||||
inc pStack
|
||||
.ELSE
|
||||
lda (R.SP)
|
||||
lda (pStack)
|
||||
sta ]1
|
||||
inc R.SP
|
||||
inc pStack
|
||||
.FIN
|
||||
.EM
|
||||
*--------------------------------------
|
||||
.MA PUSHWI
|
||||
dec R.SP
|
||||
dec pStack
|
||||
lda /]1
|
||||
sta (R.SP)
|
||||
dec R.SP
|
||||
sta (pStack)
|
||||
dec pStack
|
||||
lda #]1
|
||||
sta (R.SP)
|
||||
sta (pStack)
|
||||
.EM
|
||||
*--------------------------------------
|
||||
.MA PUSHW
|
||||
dec R.SP
|
||||
dec pStack
|
||||
lda ]1+1
|
||||
sta (R.SP)
|
||||
dec R.SP
|
||||
sta (pStack)
|
||||
dec pStack
|
||||
lda ]1
|
||||
sta (R.SP)
|
||||
sta (pStack)
|
||||
.EM
|
||||
*--------------------------------------
|
||||
.MA PULLW
|
||||
lda (R.SP)
|
||||
lda (pStack)
|
||||
sta ]1
|
||||
inc R.SP
|
||||
lda (R.SP)
|
||||
inc pStack
|
||||
lda (pStack)
|
||||
sta ]1+1
|
||||
inc R.SP
|
||||
inc pStack
|
||||
.EM
|
||||
*--------------------------------------
|
||||
* General WORD Manipulation Macros
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /A2OSX.BUILD
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 1000
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /A2OSX.BUILD
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 1000
|
||||
|
14
INC/ZP.I.txt
14
INC/ZP.I.txt
@ -1,9 +1,11 @@
|
||||
PR#3
|
||||
PREFIX /A2OSX.BUILD
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
*--------------------------------------
|
||||
* ProDOS Reserved ZP Location 00-1F,56-FF
|
||||
*--------------------------------------
|
||||
WNDLFT .EQ $20 SCROLL WINDOW LEFT
|
||||
WNDWDTH .EQ $21 SCROLL WINDOW WIDTH
|
||||
WNDTOP .EQ $22 SCROLL WINDOW TOP
|
||||
@ -26,5 +28,15 @@ KSWH .EQ $39 INPUT CHARACTER HOOK HIGH
|
||||
RNDL .EQ $4E RANDOM NUMBER LOW
|
||||
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
|
||||
SAVE INC/ZP.I
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /A2OSX.BUILD
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /A2OSX.BUILD
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
@ -1,33 +1,35 @@
|
||||
PR#3
|
||||
PREFIX /A2OSX.BUILD
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
.OR $2000
|
||||
.TF LIB/LIBSTR.O
|
||||
.TF /A2OSX.BOOT/LIB/LIBSTR.O
|
||||
*--------------------------------------
|
||||
.INB INC/MACROS.I
|
||||
.INB INC/A2OSX.I
|
||||
.INB INC/A2OSX.API.I
|
||||
*--------------------------------------
|
||||
ZPTmpPtr1 .EQ ZPLIB+2
|
||||
ZPTmpPtr2 .EQ ZPLIB+4
|
||||
ZPTmpPtr3 .EQ ZPLIB+6
|
||||
*--------------------------------------
|
||||
* Main entry point
|
||||
* input :
|
||||
* X = Function
|
||||
*--------------------------------------
|
||||
* Code signature and relocation table
|
||||
*--------------------------------------
|
||||
* CLD $D8
|
||||
* JMP (*,x) $7C
|
||||
* #JMPTABLE
|
||||
* /JMPTABLE
|
||||
* 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
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
* Relocation Table
|
||||
*--------------------------------------
|
||||
.1 .DA LIB.LOAD
|
||||
.DA LIB.UNLOAD
|
||||
.DA PRINTF
|
||||
@ -53,8 +55,6 @@ PRINTFJMP1 .DA PRINTFA
|
||||
PRINTFJMP2 .DA PRINTFCR,PRINTFBKSLH,PRINTFPERCENT
|
||||
*--------------------------------------
|
||||
.DA 0
|
||||
.DA CS.END-CS.START
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
LIB.LOAD
|
||||
LIB.UNLOAD clc
|
||||
@ -756,13 +756,12 @@ CROUT lda #13
|
||||
*--------------------------------------
|
||||
COUT phx
|
||||
phy
|
||||
>PUSHA
|
||||
ldy #S.PS.hOUTDEV
|
||||
lda (pPsContext),y
|
||||
>SYSCALL SYS.DevOutA
|
||||
ldx #DEVMGR.COUT
|
||||
jsr pDevJmp
|
||||
ply
|
||||
plx
|
||||
rts
|
||||
pDevJmp jmp (pDev)
|
||||
*--------------------------------------
|
||||
CS.END
|
||||
PRINTFTBL1 .AS -"abBdDLeEhHiIsStT"
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /A2OSX.BUILD
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /A2OSX.BUILD
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
@ -1,15 +1,16 @@
|
||||
PR#3
|
||||
PREFIX /A2OSX.BUILD
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
.OR $2000
|
||||
.TF LIB/LIBTCPIP.O
|
||||
.TF /A2OSX.BOOT/LIB/LIBTCPIP.O
|
||||
*--------------------------------------
|
||||
.INB INC/MACROS.I
|
||||
.INB INC/A2OSX.I
|
||||
.INB INC/A2OSX.API.I
|
||||
.INB INC/KERNEL.I
|
||||
.INB INC/LIBTCPIP.I
|
||||
*--------------------------------------
|
||||
@ -21,19 +22,20 @@ ZPARPMAC .EQ ZPLIB+8
|
||||
ZPDNSHostname .EQ ZPLIB+10
|
||||
ZPDNSIP .EQ ZPLIB+12
|
||||
*--------------------------------------
|
||||
* Main entry point
|
||||
* input :
|
||||
* X = Function
|
||||
*--------------------------------------
|
||||
* Code signature and relocation table
|
||||
*--------------------------------------
|
||||
* CLD $D8
|
||||
* JMP (*,x) $7C
|
||||
* #JMPTABLE
|
||||
* /JMPTABLE
|
||||
* 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
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
* Relocation Table
|
||||
*--------------------------------------
|
||||
.1 .DA LIB.LOAD
|
||||
.DA LIB.UNLOAD
|
||||
|
||||
@ -73,8 +75,6 @@ L.IPCFG .DA IPCFG
|
||||
L.ARP.CACHE .DA ARP.CACHE
|
||||
L.DNS.CACHE .DA DNS.CACHE
|
||||
.DA 0
|
||||
.DA CS.END-CS.START
|
||||
.DA DS.END-DS.START
|
||||
*--------------------------------------
|
||||
LIB.LOAD lda bFirstLoad
|
||||
bne .8
|
||||
@ -230,14 +230,10 @@ NEW.ARP.FRAME jsr NEW.ETH.FRAME
|
||||
* X = hMem
|
||||
*--------------------------------------
|
||||
NEW.ETH.FRAME >PUSHWI K.ETH.FRAME.LEN
|
||||
>PUSHBI 0
|
||||
>PUSHBI S.MEM.F.INIT0
|
||||
>SYSCALL SYS.GetMem
|
||||
bcs .9
|
||||
>STYA ZPFrameBase1
|
||||
phx
|
||||
txa
|
||||
>SYSCALL SYS.ClrMemA
|
||||
plx
|
||||
clc
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
@ -371,7 +367,11 @@ SEND.ETH.FRAME >PUSHW ZPFrameLen1
|
||||
>PUSHW ZPFrameBase1
|
||||
ldx #S.IPCFG.HDEV
|
||||
lda IPCFG,x
|
||||
>SYSCALL SYS.DevOutA
|
||||
|
||||
>SYSCALL SYS.GetDevByIDA
|
||||
>STYA pDev
|
||||
ldx #DEVMGR.NET.SEND
|
||||
jsr pDevJmp
|
||||
rts
|
||||
*--------------------------------------
|
||||
UDP.LISTENER >PULLW ZPFrameBase1
|
||||
@ -461,6 +461,7 @@ ComputeChecksum >PULLA
|
||||
eor #$FF
|
||||
rts
|
||||
*--------------------------------------
|
||||
pDevJmp jmp (pDev)
|
||||
CS.END
|
||||
*--------------------------------------
|
||||
bFirstLoad .DA #0
|
||||
@ -474,9 +475,6 @@ DNS.CACHE .BS K.DNSCACHE.SIZE*S.DNSCACHE
|
||||
UDP.TABLE .BS K.UDPTABLE.SIZE*S.LISTENER
|
||||
TCP.TABLE .BS K.TCPTABLE.SIZE*S.LISTENER
|
||||
*--------------------------------------
|
||||
DS.START
|
||||
DS.END
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE LIB/LIBTCPIP.S
|
||||
ASM
|
||||
|
@ -1,15 +1,16 @@
|
||||
PR#3
|
||||
PREFIX /A2OSX.BUILD
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
.OR $2000
|
||||
.TF SBIN/DHCPCLNT
|
||||
.TF /A2OSX.BOOT/SBIN/DHCPCLNT
|
||||
*--------------------------------------
|
||||
.INB INC/MACROS.I
|
||||
.INB INC/A2OSX.I
|
||||
.INB INC/A2OSX.API.I
|
||||
.INB INC/KERNEL.I
|
||||
.INB INC/LIBSTR.I
|
||||
.INB INC/LIBTCPIP.I
|
||||
@ -18,17 +19,20 @@ ZPFrameBase1 .EQ ZPBIN
|
||||
ZPFrameLen1 .EQ ZPBIN+2
|
||||
ZPFramePtr1 .EQ ZPBIN+4
|
||||
*--------------------------------------
|
||||
* Main entry point
|
||||
*--------------------------------------
|
||||
* Code signature and INIT table
|
||||
*--------------------------------------
|
||||
* CLD $D8
|
||||
* JMP (*,x) $7C
|
||||
* #JMPTABLE
|
||||
* /JMPTABLE
|
||||
* 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
|
||||
.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
|
||||
@ -37,13 +41,13 @@ L.LIBSTR .DA LIBSTR
|
||||
L.LIBTCPIP .DA LIBTCPIP
|
||||
L.IPCFG .DA IPCFG
|
||||
.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
|
||||
|
||||
>LIBLOADP L.LIBTCPIP
|
||||
>LDYA L.LIBTCPIP
|
||||
>LOADLIBYA
|
||||
sta hLIBTCPIP
|
||||
|
||||
>LIBCALL hLIBTCPIP,LIBTCPIP.GET.IPCFG
|
||||
@ -79,9 +83,9 @@ CS.INIT >LIBLOADP L.LIBSTR
|
||||
lda #20
|
||||
sta TimeOut
|
||||
|
||||
lda (pPsContext)
|
||||
lda (pPs)
|
||||
ora #S.PS.F.EVENT Now accept events
|
||||
sta (pPsContext)
|
||||
sta (pPs)
|
||||
|
||||
clc
|
||||
.9 rts
|
||||
@ -130,8 +134,7 @@ CS.RUN.OK lda #S.IPCFG.STATUS.OK
|
||||
CS.RUN.KO sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.DOEVENT >PULLW pEvent
|
||||
lda (pEvent)
|
||||
CS.DOEVENT lda (pEvent)
|
||||
and #S.EVT.F.TIMER is it a TIMER event?
|
||||
beq .1 no....
|
||||
|
||||
@ -170,7 +173,8 @@ CS.DOEVENT >PULLW pEvent
|
||||
bcs .9
|
||||
lda #S.IPCFG.STATUS.ROFFER
|
||||
sta IPCFG
|
||||
bra .88
|
||||
clc
|
||||
rts
|
||||
|
||||
.2 lda IPCFG
|
||||
and #S.IPCFG.STATUS.SREQ
|
||||
@ -180,9 +184,9 @@ CS.DOEVENT >PULLW pEvent
|
||||
lda #S.IPCFG.STATUS.RACK
|
||||
sta IPCFG
|
||||
|
||||
.88 >SYSCALL SYS.DestroyEvent
|
||||
.89 clc
|
||||
clc
|
||||
rts
|
||||
|
||||
.9 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
@ -489,14 +493,14 @@ FRAME.REQ.OPT.SVRIP .BS 4
|
||||
.HS FF
|
||||
FRAME.REQ.LEN .EQ *-FRAME.REQ
|
||||
*--------------------------------------
|
||||
DS.START
|
||||
*--------------------------------------
|
||||
hLIBSTR .BS 1
|
||||
hLIBTCPIP .BS 1
|
||||
TimeOut .BS 1
|
||||
IPCFG .BS S.IPCFG
|
||||
*--------------------------------------
|
||||
DS.START
|
||||
DS.END
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE SBIN/DHCPCLNT.S
|
||||
ASM
|
||||
|
296
SBIN/GETTY.S.txt
296
SBIN/GETTY.S.txt
@ -1,40 +1,43 @@
|
||||
PR#3
|
||||
PREFIX /A2OSX.BUILD
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
.OR $2000
|
||||
.TF SBIN/GETTY
|
||||
.TF /A2OSX.BOOT/SBIN/GETTY
|
||||
*--------------------------------------
|
||||
.INB INC/MACROS.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
|
||||
*--------------------------------------
|
||||
* CLD $D8
|
||||
* JMP (*,x) $7C
|
||||
* #JMPTABLE
|
||||
* /JMPTABLE
|
||||
* 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
|
||||
.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.GREETINGS .DA MSG.GREETINGS
|
||||
L.MSG.LOGIN .DA MSG.LOGIN
|
||||
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
|
||||
.DA 0 End Of Reloc Table
|
||||
*--------------------------------------
|
||||
CS.INIT ldy #S.PS.hARGS
|
||||
lda (pPsContext),y
|
||||
lda (pPs),y
|
||||
>PUSHA
|
||||
>PUSHBI $20 Push SEP=' '
|
||||
>PUSHBI 1 Push 1 for getting INDEV
|
||||
@ -45,14 +48,16 @@ CS.INIT ldy #S.PS.hARGS
|
||||
>SYSCALL SYS.GetDevByNameA
|
||||
bcs .8
|
||||
|
||||
sta hINDEV
|
||||
txa
|
||||
ldy #S.PS.hINDEV
|
||||
sta (pPsContext),y
|
||||
sta (pPs),y
|
||||
|
||||
|
||||
lda hDEVNAME
|
||||
>SYSCALL SYS.FreeMemA
|
||||
|
||||
ldy #S.PS.hARGS
|
||||
lda (pPsContext),y
|
||||
lda (pPs),y
|
||||
>PUSHA
|
||||
>PUSHBI $20 Push SEP=' '
|
||||
>PUSHBI 2 Push 1 for getting OUTDEV
|
||||
@ -63,40 +68,31 @@ CS.INIT ldy #S.PS.hARGS
|
||||
>SYSCALL SYS.GetDevByNameA
|
||||
.8 bcs .98
|
||||
|
||||
sta hOUTDEV
|
||||
>STYA pDev
|
||||
txa
|
||||
ldy #S.PS.hOUTDEV
|
||||
sta (pPsContext),y
|
||||
sta (pPs),y
|
||||
ldy #S.PS.hERRDEV
|
||||
sta (pPsContext),y
|
||||
sta (pPs),y
|
||||
lda hDEVNAME
|
||||
>SYSCALL SYS.FreeMemA
|
||||
|
||||
ldy #S.PS.hARGS
|
||||
lda (pPsContext),y
|
||||
lda (pPs),y
|
||||
>PUSHA
|
||||
>PUSHBI $20 Push SEP=' '
|
||||
>PUSHBI 3 Push 3 for getting BIN
|
||||
>SYSCALL SYS.PStrGetTkn
|
||||
bcs .99
|
||||
|
||||
sta BINID
|
||||
ldy #S.PS.ID
|
||||
lda (pPsContext),y
|
||||
* ldy #S.DEV.hOWNERPS
|
||||
* sta (DEVMGR.DEVPTR),y
|
||||
|
||||
>LDYA L.MSG.GREETINGS
|
||||
jsr PRINT.MSG
|
||||
|
||||
lda hOUTDEV
|
||||
jsr PRBYTE
|
||||
ldy #hBinName
|
||||
sta (pData),y
|
||||
|
||||
ldx #DEVMGR.OPEN
|
||||
jsr pDevJmp if error CS, else...
|
||||
|
||||
stz STATUS
|
||||
lda (pPsContext)
|
||||
ora #S.PS.F.EVENT Now accept events
|
||||
sta (pPsContext)
|
||||
clc Tell TskMgr To stay in memory
|
||||
rts
|
||||
rts ...Tell TskMgr To stay in memory
|
||||
|
||||
|
||||
.98 pha
|
||||
lda hDEVNAME
|
||||
@ -105,200 +101,108 @@ CS.INIT ldy #S.PS.hARGS
|
||||
sec
|
||||
.99 rts
|
||||
*--------------------------------------
|
||||
CS.RUN lda STATUS
|
||||
bne CS.RUN.1
|
||||
jsr CROUT
|
||||
jsr CROUT
|
||||
>LDYA L.MSG.LOGIN
|
||||
CS.RUN ldy #S.PS.hOUTDEV
|
||||
lda (pPs),y
|
||||
>SYSCALL SYS.GetDevByIDA
|
||||
>STYA pDev
|
||||
|
||||
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 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
|
||||
sta CHILDPSID
|
||||
inc STATUS
|
||||
clc
|
||||
rts
|
||||
.9 jsr PRBYTE
|
||||
stz STATUS
|
||||
clc
|
||||
rts
|
||||
CS.RUN.6 dec CHILDPSIDPOLL
|
||||
bne .8
|
||||
lda CHILDPSID Check for CHILDTSKID
|
||||
>SYSCALL SYS.GetPSByIDA
|
||||
bcc .8 Still Alive ?
|
||||
stz STATUS
|
||||
stz CHILDPSID
|
||||
.8 clc
|
||||
rts
|
||||
|
||||
ldy #S.PS.hINDEV
|
||||
lda (pPs),y
|
||||
jsr PRBYTE
|
||||
bcs .9
|
||||
lda #','
|
||||
|
||||
jsr COUT
|
||||
bcs .9
|
||||
|
||||
ldy #S.PS.hOUTDEV
|
||||
lda (pPs),y
|
||||
jsr PRBYTE
|
||||
bcs .9
|
||||
|
||||
ldy #hBinName
|
||||
lda (pData),y
|
||||
>SYSCALL SYS.ExecProcessA
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
CS.DOEVENT >PULLW pEvent
|
||||
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
|
||||
CS.DOEVENT sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.QUIT clc
|
||||
CS.QUIT ldy #hBinName
|
||||
lda (pData),y
|
||||
>SYSCALL SYS.FreeMemA
|
||||
|
||||
ldx #DEVMGR.CLOSE
|
||||
jsr pDevJmp
|
||||
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
* PRIVATE
|
||||
*--------------------------------------
|
||||
PRINT.MSG >STYA ZPQuickPtr1
|
||||
PRINT.MSG >STYA ZPTmp1
|
||||
ldy #0
|
||||
.1 lda (ZPQuickPtr1),y
|
||||
.1 lda (ZPTmp1),y
|
||||
beq .2
|
||||
ora #$80
|
||||
jsr COUT
|
||||
bcs .9
|
||||
iny
|
||||
bne .1
|
||||
.2 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
|
||||
.2 clc
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
PRBYTE pha
|
||||
lsr
|
||||
lsr
|
||||
lsr
|
||||
lsr
|
||||
ora #$B0
|
||||
cmp #$BA
|
||||
ora #$30
|
||||
cmp #$3A
|
||||
bcc .1
|
||||
adc #6
|
||||
.1 jsr COUT
|
||||
pla
|
||||
bcs .9
|
||||
and #$0F
|
||||
ora #$B0
|
||||
cmp #$BA
|
||||
bcc COUT
|
||||
ora #$30
|
||||
cmp #$3A
|
||||
bcc .2
|
||||
adc #6
|
||||
bra COUT
|
||||
.2 jsr COUT
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
CROUT lda #13
|
||||
*--------------------------------------
|
||||
COUT >PUSHA
|
||||
phx
|
||||
COUT phx
|
||||
phy
|
||||
ldy #S.PS.hOUTDEV
|
||||
lda (pPsContext),y
|
||||
>SYSCALL SYS.DevOutA
|
||||
ldx #DEVMGR.COUT
|
||||
jsr pDevJmp
|
||||
ply
|
||||
plx
|
||||
rts
|
||||
*--------------------------------------
|
||||
MSG.GREETINGS >CSTRING "A2osX-GeTTY on Dev="
|
||||
MSG.LOGIN >CSTRING "login:"
|
||||
MSG.PASSWORD >CSTRING "password:"
|
||||
pDevJmp jmp (pDev)
|
||||
*--------------------------------------
|
||||
CS.END
|
||||
DS.START
|
||||
*--------------------------------------
|
||||
MSG.GREETINGS >CSTRING "A2osX-GeTTY on Dev="
|
||||
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
|
||||
SAVE SBIN/GETTY.S
|
||||
ASM
|
||||
|
174
SBIN/GUI.S.txt
174
SBIN/GUI.S.txt
@ -1,74 +1,120 @@
|
||||
PR#3
|
||||
PREFIX /A2OSX.BUILD
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
.OR $2000
|
||||
.TF SBIN/GUI
|
||||
.TF /A2OSX.BOOT/SBIN/GUI
|
||||
*--------------------------------------
|
||||
.INB INC/MACROS.I
|
||||
.INB INC/A2OSX.I
|
||||
.INB INC/A2OSX.API.I
|
||||
*--------------------------------------
|
||||
* Main entry point
|
||||
*--------------------------------------
|
||||
* Code signature and INIT table
|
||||
*--------------------------------------
|
||||
* CLD $D8
|
||||
* JMP (*,x) $7C
|
||||
* #JMPTABLE
|
||||
* /JMPTABLE
|
||||
* 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
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
* Relocation Table
|
||||
*--------------------------------------
|
||||
.1 .DA CS.INIT
|
||||
.DA CS.RUN
|
||||
.DA CS.DOEVENT
|
||||
.DA CS.QUIT
|
||||
L.DEVNAME.GFX .DA DEVNAME.GFX
|
||||
L.DEVNAME.MOUSE .DA DEVNAME.MOUSE
|
||||
.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
|
||||
>SYSCALL SYS.GetDevByNameYA
|
||||
bcc .10
|
||||
rts
|
||||
|
||||
.10 sta hDevGFX
|
||||
>SYSCALL SYS.GetDevByIDA
|
||||
>STYA ZPQuickPtr1
|
||||
|
||||
ldy #S.DEV.hCS
|
||||
lda (ZPQuickPtr1),y
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
|
||||
>STYA DevJMP
|
||||
.10 stx hDevGFX
|
||||
>STYA pDevGFX
|
||||
|
||||
stz C
|
||||
stz X
|
||||
stz X+1
|
||||
.11 >LDYA L.DEVNAME.MOUSE
|
||||
>SYSCALL SYS.GetDevByNameYA
|
||||
bcc .20
|
||||
|
||||
.1 stz Y
|
||||
>DEBUG
|
||||
.2
|
||||
>PUSHBI C Color
|
||||
>PUSHBI 2 Mode:1=B/W,2=16 colors,...,128=XOR
|
||||
inc DEVNAME.MOUSE+4
|
||||
lda DEVNAME.MOUSE+4
|
||||
cmp #'8'
|
||||
bne .11
|
||||
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
|
||||
>PUSHW X
|
||||
jsr SetPixel
|
||||
>PUSHBI 2 Mode:1=B/W,2=16 colors,...,128=XOR
|
||||
|
||||
ldx #DEVMGR.GFX.SETPIXEL
|
||||
jsr GoDevGFX
|
||||
|
||||
inc Y
|
||||
lda Y
|
||||
cmp #192
|
||||
cmp #190
|
||||
bne .2
|
||||
|
||||
dec BW
|
||||
bne .3
|
||||
|
||||
lda #2
|
||||
sta BW
|
||||
|
||||
inc C
|
||||
lda C
|
||||
cmp #16
|
||||
bne .3
|
||||
stz C
|
||||
stz C
|
||||
|
||||
.3 lda X
|
||||
clc
|
||||
@ -77,38 +123,78 @@ CS.INIT >LDYA L.DEVNAME.GFX
|
||||
bcc .4
|
||||
inc X+1
|
||||
|
||||
.4 lda X
|
||||
sec
|
||||
sbc #560
|
||||
.4 sec
|
||||
sbc #556
|
||||
lda X+1
|
||||
sbc /560
|
||||
sbc /556
|
||||
bcc .1
|
||||
|
||||
.8 lda (pPs)
|
||||
ora #S.PS.F.EVENT Now accept events
|
||||
sta (pPs)
|
||||
|
||||
clc
|
||||
.9 rts
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.RUN clc
|
||||
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
|
||||
|
||||
.99 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.QUIT clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
SetPixel ldx #DEVMGR.GFX.SETPIXEL
|
||||
jmp (DevJMP)
|
||||
GoDevGFX jmp (pDevGFX)
|
||||
GoDevMouse jmp (pDevMouse)
|
||||
*--------------------------------------
|
||||
CS.END
|
||||
DEVNAME.GFX >PSTRING "GFX"
|
||||
DEVNAME.MOU0 >PSTRING "MOU0"
|
||||
DS.START
|
||||
DEVNAME.MOUSE >PSTRING "MOU1"
|
||||
hDevGFX .BS 1
|
||||
DevJMP .BS 2
|
||||
pDevGFX .BS 2
|
||||
hDevMouse .BS 1
|
||||
pDevMouse .BS 2
|
||||
X .BS 2
|
||||
Y .BS 1
|
||||
C .BS 1
|
||||
DS.END
|
||||
BW .BS 1
|
||||
MAN
|
||||
SAVE SBIN/GUI.S
|
||||
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
|
||||
PREFIX /A2OSX.BUILD
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
.OR $2000
|
||||
.TF SBIN/SHELL
|
||||
.TF /A2OSX.BOOT/SBIN/SHELL
|
||||
*--------------------------------------
|
||||
.INB INC/MACROS.I
|
||||
.INB INC/A2OSX.I
|
||||
.INB INC/PRODOS.I
|
||||
.INB INC/A2OSX.I
|
||||
.INB INC/A2OSX.API.I
|
||||
.INB INC/LIBSTR.I
|
||||
*--------------------------------------
|
||||
ZPPTR1 .EQ ZPBIN
|
||||
@ -19,24 +20,26 @@ ZPPTR3 .EQ ZPBIN+4
|
||||
*--------------------------------------
|
||||
CmdBuffer.MAX .EQ 127
|
||||
*--------------------------------------
|
||||
* Main entry point
|
||||
*--------------------------------------
|
||||
* Code signature and INIT table
|
||||
*--------------------------------------
|
||||
* CLD $D8
|
||||
* JMP (*,x) $7C
|
||||
* #JMPTABLE
|
||||
* /JMPTABLE
|
||||
* 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.LIBSTR .DA LIBSTR
|
||||
L.CmdBuffer .DA CmdBuffer
|
||||
L.MSG.GREETINGS .DA MSG.GREETINGS
|
||||
L.MSG.UNKNOWN .DA MSG.UNKNOWN
|
||||
L.MSG.SYNERR .DA MSG.SYNERR
|
||||
@ -49,60 +52,66 @@ T.INTCMDS .DA EXEC.CMD.CD
|
||||
.DA EXEC.CMD.TYPE
|
||||
.DA EXEC.CMD.EXIT
|
||||
.DA 0
|
||||
.DA CS.END-CS.START Code Length To Relocate
|
||||
.DA DS.END-DS.START Data Segment to Allocate
|
||||
*--------------------------------------
|
||||
CS.INIT stz bEXIT
|
||||
|
||||
stz CmdHistory
|
||||
stz CmdHistory.IDX
|
||||
stz CmdHistory.END
|
||||
|
||||
>LIBLOADP L.LIBSTR
|
||||
CS.INIT lda #0
|
||||
ldy #bEXIT
|
||||
sta (pData),y
|
||||
ldy #CmdHistory
|
||||
sta (pData),y
|
||||
ldy #CmdHistory.IDX
|
||||
sta (pData),y
|
||||
ldy #CmdHistory.END
|
||||
sta (pData),y
|
||||
|
||||
>LDYA L.LIBSTR
|
||||
>LOADLIBYA
|
||||
bcs .99
|
||||
sta hLIBSTR
|
||||
|
||||
ldy #S.PS.ID
|
||||
lda (pPsContext),y
|
||||
lda (pPs),y
|
||||
>PUSHA
|
||||
ldy #S.PS.hOUTDEV
|
||||
lda (pPsContext),y
|
||||
lda (pPs),y
|
||||
>PUSHA
|
||||
ldy #S.PS.hINDEV
|
||||
lda (pPsContext),y
|
||||
lda (pPs),y
|
||||
>PUSHA
|
||||
>PUSHW L.MSG.GREETINGS
|
||||
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
||||
|
||||
lda (pPsContext)
|
||||
lda (pPs)
|
||||
ora #S.PS.F.EVENT Now accept events
|
||||
sta (pPsContext)
|
||||
sta (pPs)
|
||||
|
||||
clc
|
||||
.99 rts
|
||||
*--------------------------------------
|
||||
CS.RUN stz CmdBuffer
|
||||
CS.RUN lda #0
|
||||
sta (pData)
|
||||
|
||||
lda #"$"
|
||||
jsr COUT
|
||||
lda #" "
|
||||
jsr COUT
|
||||
|
||||
.1 lda CmdBuffer
|
||||
.1 lda (pData)
|
||||
bmi .2
|
||||
jsr A2osX.SLEEP
|
||||
|
||||
bra .1
|
||||
|
||||
.2 and #$7F
|
||||
sta CmdBuffer
|
||||
sta (pData)
|
||||
beq CS.RUN Empty line
|
||||
|
||||
>PUSHW L.CmdBuffer
|
||||
>SYSCALL SYS.NewPStr
|
||||
>LDYA pData
|
||||
>SYSCALL SYS.NewPStrYA
|
||||
bcs .99
|
||||
sta hCMDLINE
|
||||
jsr HISTORY.ADD
|
||||
|
||||
ldy #hCMDLINE
|
||||
sta (pData),y
|
||||
* jsr HISTORY.ADD
|
||||
jsr EXEC.CMD
|
||||
bcc .3
|
||||
|
||||
@ -115,23 +124,27 @@ CS.RUN stz CmdBuffer
|
||||
jsr COUT
|
||||
jsr CROUT
|
||||
|
||||
.3 lda hCMDLINE
|
||||
.3 ldy #hCMDLINE
|
||||
lda (pData),y
|
||||
>SYSCALL SYS.FreeMemA
|
||||
stz hCMDLINE
|
||||
ldy #hCMDLINE
|
||||
lda #0
|
||||
sta (pData),y
|
||||
|
||||
lda bEXIT
|
||||
ldy #bEXIT
|
||||
lda (pData),y
|
||||
bne .99
|
||||
|
||||
clc
|
||||
rts
|
||||
|
||||
.99 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.DOEVENT >PULLW pEvent
|
||||
|
||||
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
|
||||
ldy #S.PS.hINDEV
|
||||
cmp (pPsContext),y
|
||||
cmp (pPs),y
|
||||
|
||||
bne .9
|
||||
lda (pEvent)
|
||||
@ -144,27 +157,33 @@ CS.DOEVENT >PULLW pEvent
|
||||
|
||||
ldy #S.EVT.DATALO
|
||||
lda (pEvent),y
|
||||
cmp #$1F
|
||||
bpl .1
|
||||
tax
|
||||
|
||||
cpx #$20
|
||||
bcs .1
|
||||
jsr CS.EVENT.CTRL.CHAR
|
||||
bra .8
|
||||
|
||||
.1 cmp #$7f
|
||||
.1 cpx #$7f
|
||||
bne .2
|
||||
jsr CmdBuffer.DEL
|
||||
bra .8
|
||||
|
||||
.2 ldx CmdBuffer
|
||||
cpx #CmdBuffer.MAX
|
||||
.2 lda (pData) CmdBuffer
|
||||
|
||||
cmp #CmdBuffer.MAX
|
||||
beq .8
|
||||
inx
|
||||
sta CmdBuffer,x
|
||||
inc CmdBuffer
|
||||
|
||||
inc
|
||||
sta (pData)
|
||||
tay
|
||||
txa
|
||||
sta (pData),y
|
||||
|
||||
ora #$80
|
||||
jsr COUT
|
||||
|
||||
.8 >SYSCALL SYS.DestroyEvent
|
||||
clc
|
||||
.8 clc
|
||||
rts
|
||||
|
||||
.9 sec
|
||||
@ -174,9 +193,9 @@ CS.EVENT.CTRL.CHAR
|
||||
cmp #13 CR
|
||||
bne .10
|
||||
jsr CROUT
|
||||
lda CmdBuffer
|
||||
lda (pData) CmdBuffer
|
||||
ora #$80
|
||||
sta CmdBuffer
|
||||
sta (pData)
|
||||
clc
|
||||
rts
|
||||
|
||||
@ -195,14 +214,14 @@ CS.EVENT.CTRL.CHAR
|
||||
.2 cmp #10 LF (down arrow)
|
||||
bne .3
|
||||
|
||||
jsr HISTORY.GETNEXT
|
||||
* jsr HISTORY.GETNEXT
|
||||
clc
|
||||
rts
|
||||
|
||||
.3 cmp #11 VT (up arrow)
|
||||
bne .4
|
||||
|
||||
jsr HISTORY.GETPREV
|
||||
* jsr HISTORY.GETPREV
|
||||
clc
|
||||
rts
|
||||
|
||||
@ -223,17 +242,25 @@ CS.QUIT lda hLIBSTR
|
||||
*--------------------------------------
|
||||
* PRIVATE
|
||||
*--------------------------------------
|
||||
EXEC.CMD >PUSHB hCMDLINE
|
||||
EXEC.CMD ldy #hCMDLINE
|
||||
>PUSHB (pData),y
|
||||
>PUSHBI $20 Push SEP=' '
|
||||
>PUSHBI 0 Push 0 for getting CMD & ARGS
|
||||
>SYSCALL SYS.PStrGetTkn
|
||||
bcs .99
|
||||
|
||||
sta hCMD
|
||||
stx hARGS
|
||||
ldy #hCMD
|
||||
sta (pData),y
|
||||
pha
|
||||
txa
|
||||
ldy #hARGS
|
||||
sta (pData),y
|
||||
pla
|
||||
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>PUSHYA
|
||||
>PUSHYA
|
||||
|
||||
>LIBCALL hLIBSTR,LIBSTR.UCASEP
|
||||
>PUSHW L.CMDS
|
||||
>SYSCALL SYS.GetPStrIndex
|
||||
@ -245,14 +272,17 @@ EXEC.CMD >PUSHB hCMDLINE
|
||||
rts
|
||||
|
||||
.1 jsr .98 Discard CMD & ARGS
|
||||
lda hCMDLINE
|
||||
ldy #hCMDLINE
|
||||
lda (pData),y
|
||||
>SYSCALL SYS.ExecProcessA
|
||||
rts
|
||||
|
||||
.98 pha
|
||||
lda hCMD
|
||||
ldy #hCMD
|
||||
lda (pData),y
|
||||
>SYSCALL SYS.FreeMemA
|
||||
lda hARGS
|
||||
ldy #hARGS
|
||||
lda (pData),y
|
||||
>SYSCALL SYS.FreeMemA
|
||||
pla
|
||||
sec
|
||||
@ -262,10 +292,11 @@ EXEC.CMD.INT asl
|
||||
tax
|
||||
jmp (T.INTCMDS,x)
|
||||
*--------------------------------------
|
||||
EXEC.CMD.CD lda hARGS
|
||||
EXEC.CMD.CD ldy #hARGS
|
||||
lda (pData),y
|
||||
bne EXEC.CMD.CD.C
|
||||
ldy #S.PS.hPREFIX
|
||||
lda (pPsContext),y
|
||||
lda (pPs),y
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>PUSHYA
|
||||
>LIBCALL hLIBSTR,LIBSTR.PRINTP
|
||||
@ -276,15 +307,16 @@ EXEC.CMD.CD lda hARGS
|
||||
EXEC.CMD.CD.C >SYSCALL SYS.GetMemPtrA
|
||||
>STYA ZPPTR2
|
||||
ldy #S.PS.hPREFIX
|
||||
lda (pPsContext),y
|
||||
lda (pPs),y
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>STYA ZPPTR1
|
||||
>PUSHWI MLI.MAXPATH+1 Get a buffer for new PATH
|
||||
>PUSHBI 0 no particular Option
|
||||
>SYSCALL SYS.GetMem
|
||||
bcs .99
|
||||
stx hNEWPATH
|
||||
>STYA ZPPTR3
|
||||
stx hNEWPATH
|
||||
|
||||
lda #0
|
||||
sta (ZPPTR3)
|
||||
ldy #1
|
||||
@ -321,6 +353,7 @@ EXEC.CMD.CD.C >SYSCALL SYS.GetMemPtrA
|
||||
pla
|
||||
sec
|
||||
.99 rts
|
||||
|
||||
.2 >PUSHW ZPPTR1
|
||||
>PUSHW ZPPTR3
|
||||
>LIBCALL hLIBSTR,LIBSTR.STRCPYP
|
||||
@ -340,21 +373,45 @@ EXEC.CMD.CD.C >SYSCALL SYS.GetMemPtrA
|
||||
>SYSCALL SYS.CheckPrefixA
|
||||
bcs .98
|
||||
ldy #S.PS.hPREFIX
|
||||
lda (pPsContext),y
|
||||
lda (pPs),y
|
||||
pha
|
||||
lda hNEWPATH
|
||||
sta (pPsContext),y
|
||||
sta (pPs),y
|
||||
pla
|
||||
>SYSCALL SYS.FreeMemA
|
||||
clc
|
||||
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
|
||||
|
||||
.8 clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
EXEC.CMD.DATE jsr MLI
|
||||
.DA #MLIGETTIME
|
||||
.DA 0
|
||||
EXEC.CMD.DATE >SYSCALL SYS.MLIGetTime
|
||||
bcs .9
|
||||
>PUSHW DATELO
|
||||
>LIBCALL hLIBSTR,LIBSTR.PRINTDATE
|
||||
@ -362,9 +419,7 @@ EXEC.CMD.DATE jsr MLI
|
||||
clc
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
EXEC.CMD.TIME jsr MLI
|
||||
.DA #MLIGETTIME
|
||||
.DA 0
|
||||
EXEC.CMD.TIME >SYSCALL SYS.MLIGetTime
|
||||
bcs .9
|
||||
>PUSHW TIMELO
|
||||
>LIBCALL hLIBSTR,LIBSTR.PRINTTIME
|
||||
@ -372,14 +427,32 @@ EXEC.CMD.TIME jsr MLI
|
||||
clc
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
EXEC.CMD.ECHO lda #$DD
|
||||
sec
|
||||
EXEC.CMD.ECHO ldy #hARGS
|
||||
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
|
||||
|
||||
.98 lda #SYSMGR.ERRSYN
|
||||
sec
|
||||
.99 rts
|
||||
*--------------------------------------
|
||||
EXEC.CMD.TYPE lda hARGS
|
||||
EXEC.CMD.TYPE ldy #hARGS
|
||||
lda (pData),y
|
||||
beq .98
|
||||
>SYSCALL SYS.LoadFileA
|
||||
bcs .99
|
||||
|
||||
>STYA ZPPTR2 store file len
|
||||
phx
|
||||
txa
|
||||
@ -393,7 +466,6 @@ EXEC.CMD.TYPE lda hARGS
|
||||
.2 dec ZPPTR2
|
||||
|
||||
lda (ZPPTR1)
|
||||
ora #$80
|
||||
jsr COUT
|
||||
inc ZPPTR1
|
||||
bne .1
|
||||
@ -406,10 +478,12 @@ EXEC.CMD.TYPE lda hARGS
|
||||
rts
|
||||
|
||||
.98 lda #SYSMGR.ERRSYN
|
||||
sec
|
||||
.99 rts
|
||||
*--------------------------------------
|
||||
EXEC.CMD.EXIT lda #$FF
|
||||
sta bEXIT
|
||||
EXEC.CMD.EXIT ldy #bEXIT
|
||||
lda #$FF
|
||||
sta (pData),y
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
@ -479,14 +553,13 @@ HISTORY.SETBUF jsr CmdBuffer.CLR
|
||||
bne .1
|
||||
bra CmdBuffer.PRINT
|
||||
*--------------------------------------
|
||||
CmdBuffer.PRINT ldx #0
|
||||
.1 inx
|
||||
lda CmdBuffer,x
|
||||
CmdBuffer.PRINT ldy #0
|
||||
.1 iny
|
||||
lda (pData),y
|
||||
ora #$80
|
||||
phx
|
||||
jsr COUT
|
||||
plx
|
||||
cpx CmdBuffer
|
||||
tya
|
||||
cmp (pData)
|
||||
bne .1
|
||||
rts
|
||||
*--------------------------------------
|
||||
@ -494,11 +567,13 @@ CmdBuffer.CLR jsr CmdBuffer.DEL
|
||||
bne CmdBuffer.CLR
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
CmdBuffer.DEL lda CmdBuffer
|
||||
CmdBuffer.DEL lda (pData)
|
||||
beq .9
|
||||
lda #8
|
||||
jsr COUT
|
||||
dec CmdBuffer
|
||||
lda (pData)
|
||||
dec
|
||||
sta (pData)
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
PRBYTE pha
|
||||
@ -523,13 +598,12 @@ CROUT lda #13
|
||||
*--------------------------------------
|
||||
COUT phx
|
||||
phy
|
||||
>PUSHA
|
||||
ldy #S.PS.hOUTDEV
|
||||
lda (pPsContext),y
|
||||
>SYSCALL SYS.DevOutA
|
||||
ldx #DEVMGR.COUT
|
||||
jsr pDevJmp
|
||||
ply
|
||||
plx
|
||||
rts
|
||||
pDevJmp jmp (pDev)
|
||||
*--------------------------------------
|
||||
CS.END
|
||||
*--------------------------------------
|
||||
@ -546,22 +620,22 @@ LIBSTR >PSTRING "libstr.o"
|
||||
MSG.GREETINGS >CSTRING "\nA2osX-Shell on Dev=(%h:%h),PS=%h\n\n"
|
||||
MSG.UNKNOWN >CSTRING "Command Not Found\n"
|
||||
MSG.SYNERR >CSTRING "Syntax Error Or Invalid Pathname\n"
|
||||
*--------------------------------------
|
||||
DS.START
|
||||
*--------------------------------------
|
||||
hLIBSTR .BS 1
|
||||
hNEWPATH .BS 1
|
||||
*--------------------------------------
|
||||
.DUMMY
|
||||
.OR 0
|
||||
DS.START
|
||||
CmdBuffer .BS CmdBuffer.MAX+1
|
||||
bEXIT .BS 1
|
||||
hCMDLINE .BS 1
|
||||
hCMD .BS 1
|
||||
hARGS .BS 1
|
||||
hNEWPATH .BS 1
|
||||
CmdBuffer .BS CmdBuffer.MAX+1
|
||||
CmdBuffer.POS .BS 1
|
||||
CmdHistory .BS 256
|
||||
CmdHistory.IDX .BS 1
|
||||
CmdHistory.END .BS 1
|
||||
*--------------------------------------
|
||||
DS.END
|
||||
.ED
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE SBIN/SHELL.S
|
||||
|
@ -1,15 +1,16 @@
|
||||
PR#3
|
||||
PREFIX /A2OSX.BUILD
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
.OR $2000
|
||||
.TF SBIN/TCPIP
|
||||
.TF /A2OSX.BOOT/SBIN/TCPIP
|
||||
*--------------------------------------
|
||||
.INB INC/MACROS.I
|
||||
.INB INC/A2OSX.I
|
||||
.INB INC/A2OSX.API.I
|
||||
.INB INC/KERNEL.I
|
||||
.INB INC/LIBTCPIP.I
|
||||
*--------------------------------------
|
||||
@ -20,17 +21,20 @@ ZPFrameBase2 .EQ ZPBIN+6
|
||||
ZPFrameLen2 .EQ ZPBIN+8
|
||||
ZPFramePtr2 .EQ ZPBIN+10
|
||||
*--------------------------------------
|
||||
* Main entry point
|
||||
*--------------------------------------
|
||||
* Code signature and INIT table
|
||||
*--------------------------------------
|
||||
* CLD $D8
|
||||
* JMP (*,x) $7C
|
||||
* #JMPTABLE
|
||||
* /JMPTABLE
|
||||
* 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
|
||||
@ -39,11 +43,11 @@ L.LIBTCPIP .DA LIBTCPIP
|
||||
L.CFGFILENAME .DA CFGFILENAME
|
||||
L.IPCFG .DA IPCFG
|
||||
.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
|
||||
|
||||
sta hLIBTCPIP
|
||||
ldx #0
|
||||
.1 stz IPCFG,x
|
||||
@ -74,15 +78,15 @@ CS.INIT >LIBLOADP L.LIBTCPIP
|
||||
>SYSCALL SYS.AddNetCfg
|
||||
bcs .99
|
||||
|
||||
lda (pPsContext)
|
||||
lda (pPs)
|
||||
ora #S.PS.F.EVENT Now accept events
|
||||
sta (pPsContext)
|
||||
sta (pPs)
|
||||
|
||||
clc
|
||||
.99 rts
|
||||
*--------------------------------------
|
||||
CS.INIT.DEV ldy #S.PS.hARGS
|
||||
lda (pPsContext),y
|
||||
lda (pPs),y
|
||||
>PUSHA
|
||||
>PUSHBI $20 Push SEP=' '
|
||||
>PUSHBI 1 Push 1 for getting DEV
|
||||
@ -91,25 +95,29 @@ CS.INIT.DEV ldy #S.PS.hARGS
|
||||
sta hDEVNAME save DevName for discard
|
||||
>SYSCALL SYS.GetDevByNameA
|
||||
bcs .98
|
||||
|
||||
>STYA pDev
|
||||
txa
|
||||
sta hDev
|
||||
ldx #S.IPCFG.HDEV
|
||||
sta IPCFG,x
|
||||
|
||||
>SYSCALL SYS.GetDevInfoA
|
||||
>STYA ZPQuickPtr1
|
||||
ldx #DEVMGR.OPEN
|
||||
jsr pDevJmp
|
||||
|
||||
ldy #0
|
||||
ldx #DEVMGR.GETINFO
|
||||
jsr pDevJmp
|
||||
>STYA ZPQuickPtr1
|
||||
|
||||
ldy #1
|
||||
ldx #S.IPCFG.MAC
|
||||
.1 lda (ZPQuickPtr1),y
|
||||
sta IPCFG,x
|
||||
inx
|
||||
iny
|
||||
cpy #S.IPCFG.MAC+6
|
||||
inx
|
||||
cpx #S.IPCFG.MAC+6
|
||||
bne .1
|
||||
|
||||
lda hDEVNAME
|
||||
>SYSCALL SYS.FreeMemA
|
||||
jsr .98
|
||||
clc
|
||||
rts
|
||||
|
||||
@ -120,8 +128,8 @@ CS.INIT.DEV ldy #S.PS.hARGS
|
||||
.99 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.INIT.CFGFILE >PUSHW L.CFGFILENAME
|
||||
>SYSCALL SYS.ExpandPStr
|
||||
CS.INIT.CFGFILE >LDYA L.CFGFILENAME
|
||||
>SYSCALL SYS.ExpandPStrYA
|
||||
bcs .99
|
||||
sta hCfgFileName
|
||||
>SYSCALL SYS.LoadFileA
|
||||
@ -154,8 +162,7 @@ CS.INIT.CFGFILE >PUSHW L.CFGFILENAME
|
||||
CS.RUN clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.DOEVENT >PULLW pEvent
|
||||
lda (pEvent)
|
||||
CS.DOEVENT lda (pEvent)
|
||||
and #S.EVT.F.NET
|
||||
beq .9
|
||||
|
||||
@ -221,13 +228,20 @@ CS.DOEVENT.NET ldy #S.EVT.DATALO Get Frame hMem
|
||||
bcc .89
|
||||
rts
|
||||
|
||||
.89 >SYSCALL SYS.DestroyEvent
|
||||
clc
|
||||
.89 clc
|
||||
rts
|
||||
|
||||
.99 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.QUIT lda hLIBTCPIP
|
||||
CS.QUIT lda hDev
|
||||
>SYSCALL SYS.GetDevByIDA
|
||||
>STYA pDev
|
||||
|
||||
ldx #DEVMGR.OPEN
|
||||
jsr pDevJmp
|
||||
|
||||
lda hLIBTCPIP
|
||||
>SYSCALL SYS.FreeMemA
|
||||
clc
|
||||
rts
|
||||
@ -428,14 +442,12 @@ CopyFramePtr12 dey
|
||||
bne CopyFramePtr12
|
||||
rts
|
||||
*--------------------------------------
|
||||
pDevJmp jmp (pDev)
|
||||
CS.END
|
||||
*--------------------------------------
|
||||
LIBTCPIP >PSTRING "libtcpip.o"
|
||||
CFGFILENAME >PSTRING "%ETC%TCPIP.CONF"
|
||||
DefaultHostName >CSTRING "a2osx-host"
|
||||
*--------------------------------------
|
||||
DS.START
|
||||
*--------------------------------------
|
||||
hLIBTCPIP .BS 1
|
||||
hDEVNAME .BS 1
|
||||
hDev .BS 1
|
||||
@ -444,8 +456,6 @@ hCfgFile .BS 1
|
||||
hCfgFileLen .BS 2
|
||||
IPCFG .BS S.IPCFG Get in cache for faster access with ,X
|
||||
*--------------------------------------
|
||||
DS.END
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE SBIN/TCPIP.S
|
||||
ASM
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /A2OSX.BUILD
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /A2OSX.BUILD
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
@ -13,375 +13,227 @@ AUTO 6
|
||||
* Y,A = MEMPTR
|
||||
* 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
|
||||
bcs .1 not already loaded
|
||||
>STYA R.AX Save base address
|
||||
|
||||
>STYA ZPQuickPtr1 Save base address
|
||||
ldy #S.MEM.REFCNT
|
||||
lda (R.AX),y
|
||||
lda (ZPQuickPtr1),y
|
||||
inc
|
||||
sta (R.AX),y
|
||||
sta (ZPQuickPtr1),y
|
||||
|
||||
ldy #S.MEM.PTR
|
||||
lda (R.AX),y
|
||||
lda (ZPQuickPtr1),y
|
||||
pha Y,A = MEM PTR...
|
||||
iny
|
||||
lda (R.AX),y
|
||||
lda (ZPQuickPtr1),y
|
||||
ply X=hMem from S.GetMemByNameA
|
||||
clc
|
||||
rts
|
||||
|
||||
.1 lda R.DH
|
||||
.1 lda S.LoadBinA.hFilename
|
||||
jsr S.LoadFileA
|
||||
bcs .99
|
||||
>STYA R.BX save file length for relocation
|
||||
stx R.DL save hMem
|
||||
bcc .2
|
||||
rts Error Loading file
|
||||
|
||||
.2 >STYA S.LoadBinA.FileLen
|
||||
stx S.LoadBinA.hMem save hMem
|
||||
txa
|
||||
jsr S.GetMemPtrA
|
||||
>STYA R.AX save base address for relocation
|
||||
lda R.DH
|
||||
jsr S.MLIGetFileInfoA Get File Info for AUXTYPE
|
||||
bcs .98
|
||||
>STYA ZPQuickPtr1
|
||||
ldy #2 get AUXTYPE
|
||||
>STYA ZPQuickPtr1 save base address for relocation
|
||||
|
||||
ldy #H.BIN.CODE.LEN make AX = Code Len
|
||||
lda (ZPQuickPtr1),y
|
||||
sta R.CL
|
||||
sta R.AL
|
||||
iny
|
||||
lda (ZPQuickPtr1),y
|
||||
sta R.CH save File load address for relocation
|
||||
lda R.AL compute offset for relocation....
|
||||
sta R.AH
|
||||
|
||||
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
|
||||
sbc R.CL ...AX-CX...
|
||||
sta R.CL
|
||||
lda R.AH
|
||||
sbc R.CH
|
||||
sta R.CH ...to CX
|
||||
jsr S.BinRelocate
|
||||
sbc S.LoadBinA.AuxType
|
||||
sta R.DL DX=Offset=ZPQuickPtr1-AUXTYPE
|
||||
lda ZPQuickPtr1+1
|
||||
sbc S.LoadBinA.AuxType+1
|
||||
sta R.DH
|
||||
|
||||
>LDYA ZPQuickPtr1
|
||||
jsr S.BinRelocateYA
|
||||
|
||||
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
|
||||
bcs .98
|
||||
|
||||
pha save copy of bin path
|
||||
lda R.DL
|
||||
lda S.LoadBinA.hMem
|
||||
jsr S.GetMemByIDA
|
||||
>STYA ZPQuickPtr1
|
||||
|
||||
lda (ZPQuickPtr1)
|
||||
ora #S.MEM.F.CODE This is a code segment
|
||||
sta (ZPQuickPtr1)
|
||||
|
||||
ldy #S.MEM.BIN
|
||||
pla get back copy of bin path
|
||||
sta (ZPQuickPtr1),y
|
||||
>LDYA R.AX return CS PTR ... not modified by S.LoadCodeReloc
|
||||
ldx R.DL ...and hMEM to Caller
|
||||
clc
|
||||
|
||||
lda S.LoadBinA.hMem
|
||||
tax return hMEM to Caller...
|
||||
jsr S.GetMemPtrA
|
||||
clc ...and Y,A=PTR to CS
|
||||
rts
|
||||
|
||||
.98 pha
|
||||
lda R.DL
|
||||
lda S.LoadBinA.hMem
|
||||
jsr S.FreeMemA Discard Loaded Code
|
||||
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
|
||||
rts
|
||||
|
||||
.1 >PUSHBI $20 Push SEP=' '
|
||||
>PUSHBI 0 Push 0 for getting CMD And ARGS
|
||||
jsr S.PStrGetTkn
|
||||
bcs .98
|
||||
ldy #S.DEV.hCMD
|
||||
sta (DEVMGR.DEVPTR),y
|
||||
|
||||
>PUSHA push CMD for S.FileSearch
|
||||
txa
|
||||
ldy #S.DEV.hARGS
|
||||
sta (DEVMGR.DEVPTR),y
|
||||
>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.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)
|
||||
*--------------------------------------
|
||||
S.LoadBinA.hFilename .BS 1
|
||||
S.LoadBinA.hMem .BS 1
|
||||
S.LoadBinA.AuxType .BS 2
|
||||
S.LoadBinA.FileLen .BS 2
|
||||
*--------------------------------------
|
||||
* S.BinRelocateYA :
|
||||
* YA = Ptr to Code
|
||||
* R.AX = Code Length
|
||||
* R.BX = Range Start address to relocate
|
||||
* R.CX = Range End address to relocate
|
||||
* R.DX = offset to apply to all abs addresses between R.BX and R.CX
|
||||
*--------------------------------------
|
||||
S.BinRelocateYA >STYA ZPQuickPtr1
|
||||
ldy #H.BIN.JMP relocate Main JMP
|
||||
lda (ZPQuickPtr1),y
|
||||
clc
|
||||
rts
|
||||
|
||||
.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
|
||||
adc R.DL
|
||||
sta (ZPQuickPtr1),y
|
||||
pla
|
||||
clc
|
||||
rts
|
||||
|
||||
.1 ldy #S.MEM.PTR
|
||||
lda (ZPQuickPtr1),y
|
||||
pha
|
||||
|
||||
iny
|
||||
lda (ZPQuickPtr1),y
|
||||
ply
|
||||
>STYA Kernel.JMP
|
||||
adc R.DH
|
||||
sta (ZPQuickPtr1),y
|
||||
|
||||
ldy #H.BIN.RELOC.TABLE skip Header, CS.SIZE & DS.SIZE... (16 bytes)
|
||||
bra S.JmpRelocate
|
||||
|
||||
ldx #LIBMGR.UNLOAD
|
||||
jsr Kernel.BINCALL Call LIB.UNLOAD function
|
||||
pla
|
||||
jmp S.FreeMemA
|
||||
*--------------------------------------
|
||||
* 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
|
||||
S.DrvRelocateYA >STYA ZPQuickPtr1
|
||||
ldy #0
|
||||
|
||||
S.JmpRelocate lda (ZPQuickPtr1),y Start Relocate JMP table
|
||||
tax
|
||||
iny
|
||||
.2 lda (R.AX),y Start Relocate JMP table
|
||||
clc
|
||||
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
|
||||
ora (ZPQuickPtr1),y
|
||||
beq S.CodeRelocate $0000 = end of table
|
||||
|
||||
dey
|
||||
txa get back LO
|
||||
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
|
||||
txa
|
||||
clc
|
||||
adc (R.AX),y make DX = end of opcode range
|
||||
sta R.DL
|
||||
adc R.DL
|
||||
sta (ZPQuickPtr1),y
|
||||
|
||||
iny
|
||||
lda R.AH
|
||||
adc (R.AX),y
|
||||
sta R.DH
|
||||
lda (ZPQuickPtr1),y
|
||||
adc R.DH
|
||||
sta (ZPQuickPtr1),y
|
||||
|
||||
iny
|
||||
* Start relocating opcodes between R.AX and R.DX with abs addressing pointing between R.AX and R.BX
|
||||
* Applying offset = R.CX
|
||||
tya add current offset in Y to R.AX
|
||||
|
||||
bra S.JmpRelocate
|
||||
|
||||
S.CodeRelocate lda ZPQuickPtr1
|
||||
clc
|
||||
adc R.AL
|
||||
sta ZPQuickPtr1
|
||||
lda #0
|
||||
adc R.AL Make ZPQuickPtr2=End of code
|
||||
sta ZPQuickPtr2 =ZPQuickPtr1+AX (code len)
|
||||
lda ZPQuickPtr1+1
|
||||
adc R.AH
|
||||
sta ZPQuickPtr1+1
|
||||
.4 lda (ZPQuickPtr1) get OPCODE
|
||||
sta ZPQuickPtr2+1
|
||||
|
||||
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
|
||||
lda OPCODES,x get OPCODE definition
|
||||
bpl .7 abs addressing?
|
||||
|
||||
and #3 save Opcode length...
|
||||
pha
|
||||
|
||||
ldy #1
|
||||
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
|
||||
sbc R.BL
|
||||
iny
|
||||
lda ZPQuickPtr2+1 Get new HI
|
||||
lda (ZPQuickPtr1),y Get HI
|
||||
sbc R.BH
|
||||
bcs .6 new addr > BX, out of range
|
||||
bcc .6 addr < AX, out of range
|
||||
|
||||
dey
|
||||
lda ZPQuickPtr2 Get new LO
|
||||
sta (ZPQuickPtr1),y
|
||||
lda (ZPQuickPtr1),y Get LO
|
||||
sec
|
||||
sbc R.CL
|
||||
iny
|
||||
lda ZPQuickPtr2+1 Get new HI
|
||||
sta (ZPQuickPtr1),y
|
||||
.6 lda OPCODES,x
|
||||
.7 and #$3 get OPCODE length
|
||||
lda (ZPQuickPtr1),y Get HI
|
||||
sbc R.CH
|
||||
bcs .6 addr > CX, out of range
|
||||
|
||||
dey
|
||||
lda (ZPQuickPtr1),y Get LO
|
||||
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
|
||||
sta ZPQuickPtr1
|
||||
bcc .8
|
||||
inc ZPQuickPtr1+1
|
||||
.8 sec A already got Ptr LO
|
||||
sbc R.DL
|
||||
lda ZPQuickPtr1+1 is Ptr greater than DX ?
|
||||
sbc R.DH
|
||||
bcc .4 no, continue relocating
|
||||
>PULLW R.DX
|
||||
|
||||
.8 lda ZPQuickPtr1 is Current PTR < Code Limit ?
|
||||
sec
|
||||
sbc ZPQuickPtr2
|
||||
lda ZPQuickPtr1+1
|
||||
sbc ZPQuickPtr2+1
|
||||
bcc .5 yes, continue relocating
|
||||
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
MSG.DRVLOAD >PSTRING "\nLoadDrv:"
|
||||
MSG.LOADLIB >PSTRING "\nLoadLib:"
|
||||
LoadDrv.ENV .BS 1
|
||||
LoadDrv.BIN .BS 1
|
||||
|
||||
*--------------------------------------
|
||||
* 65C02 OPCODES
|
||||
* Bit 7 : 1 absolute addressing
|
||||
|
@ -1,35 +1,28 @@
|
||||
PR#3
|
||||
PREFIX /A2OSX.BUILD
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
*--------------------------------------
|
||||
DevMgr.HiMem .EQ $FFFE Protect IRQ vector in Aux LC
|
||||
*--------------------------------------
|
||||
* S.DevMgrInit
|
||||
*--------------------------------------
|
||||
S.DevMgrInit ldx #S.DEV.SIZE*K.DEV.MAX
|
||||
.1 stz DEVMGR.TABLE-1,x
|
||||
S.DevMgrInit ldx #S.DEV.SIZE*2
|
||||
.1 lda DevMgr.NUL-1,x
|
||||
sta DevMgr.Table-1,x
|
||||
dex
|
||||
bne .1
|
||||
|
||||
ldy #5
|
||||
.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
|
||||
|
||||
stz DevMgr.Table+S.DEV.SIZE*2+1
|
||||
|
||||
lda #1 reserve #0=NUL, #1=KBD
|
||||
sta DEVMGR.LASTID
|
||||
|
||||
sta DevMgr.LastDevID
|
||||
|
||||
>LDYAI DevMgr.End
|
||||
>STYA DevMgr.Free
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
@ -41,185 +34,185 @@ S.DevMgrInit ldx #S.DEV.SIZE*K.DEV.MAX
|
||||
* Y,A = devslot
|
||||
* X Unmodified
|
||||
*--------------------------------------
|
||||
S.GetDevByIDA sta ZPQuickPtr1
|
||||
lda #K.DEV.MAX
|
||||
sta ZPQuickPtr1+1
|
||||
|
||||
>LDYAI DEVMGR.TABLE
|
||||
>STYA ZPQuickPtr2
|
||||
|
||||
.1 lda (ZPQuickPtr2) get S.DEV.F
|
||||
bpl .2 In use ?
|
||||
ldy #S.DEV.ID
|
||||
lda (ZPQuickPtr2),y
|
||||
cmp ZPQuickPtr1
|
||||
beq .8
|
||||
|
||||
.2 lda ZPQuickPtr2
|
||||
clc
|
||||
adc #S.DEV.SIZE
|
||||
sta ZPQuickPtr2
|
||||
bcc .3
|
||||
inc ZPQuickPtr2+1
|
||||
|
||||
.3 dec ZPQuickPtr1+1
|
||||
bne .1
|
||||
sec
|
||||
rts
|
||||
|
||||
.8 >LDYA ZPQuickPtr2
|
||||
clc
|
||||
rts
|
||||
S.GetDevByIDA cmp DevMgr.LastDevID
|
||||
beq .1
|
||||
bcs .9
|
||||
|
||||
.1 stz S.GetDevByIDA.T
|
||||
|
||||
asl
|
||||
ror S.GetDevByIDA.T
|
||||
asl
|
||||
ror S.GetDevByIDA.T
|
||||
asl
|
||||
ror S.GetDevByIDA.T
|
||||
asl
|
||||
ror S.GetDevByIDA.T
|
||||
|
||||
adc #DevMgr.Table
|
||||
tay
|
||||
lda S.GetDevByIDA.T
|
||||
adc /DevMgr.Table
|
||||
rts CC
|
||||
|
||||
.9 lda #DEVMGR.ERRDNF
|
||||
rts CS
|
||||
S.GetDevByIDA.T .BS 1
|
||||
*--------------------------------------
|
||||
* GetDevIDByNameA
|
||||
* IN:
|
||||
* A = hPStr
|
||||
* OUT:
|
||||
* CC = OK, CS = ERROR
|
||||
* A = DEVID
|
||||
* set DEVMGR.DEVPTR to devslot
|
||||
* X = DEVID
|
||||
* Y,A = pDev
|
||||
*--------------------------------------
|
||||
S.GetDevByNameA jsr S.GetMemPtrA
|
||||
S.GetDevByNameYA
|
||||
>STYA ZPQuickPtr1
|
||||
>LDYAI DEVMGR.TABLE
|
||||
>STYA DEVMGR.DEVPTR
|
||||
>LDYAI DevMgr.Table+S.DEV.NAME
|
||||
>STYA ZPQuickPtr2
|
||||
|
||||
ldx #K.DEV.MAX
|
||||
.1 lda (DEVMGR.DEVPTR) get S.DEV.F
|
||||
bpl .3 empty ?
|
||||
lda DEVMGR.DEVPTR
|
||||
clc
|
||||
adc #S.DEV.NAME
|
||||
sta ZPQuickPtr2
|
||||
lda DEVMGR.DEVPTR+1
|
||||
adc /S.DEV.NAME
|
||||
sta ZPQuickPtr2+1
|
||||
lda (ZPQuickPtr1)
|
||||
ldx #0
|
||||
|
||||
.1 lda (ZPQuickPtr1)
|
||||
cmp (ZPQuickPtr2)
|
||||
bne .3
|
||||
|
||||
tay
|
||||
.2 lda (ZPQuickPtr1),y
|
||||
cmp (ZPQuickPtr2),y
|
||||
bne .3
|
||||
|
||||
dey
|
||||
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)
|
||||
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
|
||||
lda ZPQuickPtr2
|
||||
sec
|
||||
rts
|
||||
|
||||
.3 lda #0
|
||||
sbc #S.DEV.NAME
|
||||
tay
|
||||
.4 sta (DEVMGR.DEVPTR),y
|
||||
iny
|
||||
cpy #S.DEV.SIZE
|
||||
bne .4
|
||||
inc DEVMGR.LASTID
|
||||
lda DEVMGR.LASTID
|
||||
ldy #S.DEV.ID
|
||||
sta (DEVMGR.DEVPTR),y
|
||||
lda ZPQuickPtr2+1
|
||||
sbc /S.DEV.NAME
|
||||
clc
|
||||
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
|
||||
* selected by (DEVMGR.DEVPTR)
|
||||
S.GetDevEvent >LDYAI DevMgr.Table
|
||||
>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
|
||||
lda (DEVMGR.DEVPTR),y
|
||||
beq .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.Free .BS 2
|
||||
DevMgr.DevID .BS 1
|
||||
DevMgr.LastDevID .BS 1
|
||||
*--------------------------------------
|
||||
DEVMGR.TABLE.NUL .DA #S.DEV.F.INUSE+S.DEV.F.CHAR+S.DEV.F.BLOCK
|
||||
.HS 00 ID
|
||||
>PSTRING "NUL" NAME
|
||||
DEVMGR.TABLE.KBD .DA #S.DEV.F.INUSE+S.DEV.F.CHAR
|
||||
.HS 01 ID
|
||||
>PSTRING "KBD" NAME
|
||||
DEVMGR.LASTID .BS 1
|
||||
DevMgr.NUL cld
|
||||
jmp (DevMgr.NUL.Code,x)
|
||||
.DA #S.DEV.F.INUSE+S.DEV.F.SHARE+S.DEV.F.COUT+S.DEV.F.CHAR
|
||||
>PSTRING "NUL" NAME
|
||||
.HS 00 NAME must Be 5 bytes long
|
||||
.HS 00.00
|
||||
.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
|
||||
SAVE SYS/KERNEL.S.DEV
|
||||
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
|
||||
PREFIX /A2OSX.BUILD
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
*--------------------------------------
|
||||
* S.ExpandPStr
|
||||
* In:
|
||||
* PULLW = PSTR to String to Expand (PSTRING)
|
||||
* Out:
|
||||
* A = hMem to Expanded String (PSTRING)
|
||||
*--------------------------------------
|
||||
* S.ExpandPStrA
|
||||
* In:
|
||||
* A = hMem of String to Expand (PSTRING)
|
||||
* Out:
|
||||
* A = hMem to Expanded String (PSTRING)
|
||||
*--------------------------------------
|
||||
S.ExpandPStr >PULLW R.AX
|
||||
bra S.ExpandPStr2
|
||||
S.ExpandPStrA jsr S.GetMemPtrA
|
||||
>STYA R.AX
|
||||
S.ExpandPStr2 stz TmpBuffer256 init Expanded String len=0
|
||||
S.ExpandPStrYA >STYA R.AX
|
||||
stz TmpBuffer256 init Expanded String len=0
|
||||
stz R.BL reset "in var"
|
||||
ldy #0
|
||||
.1 iny
|
||||
@ -65,7 +57,7 @@ S.ExpandPStr2 stz TmpBuffer256 init Expanded String len=0
|
||||
pha Get back ENVNAME hMem
|
||||
>PUSHA
|
||||
ldy #S.PS.hENV
|
||||
lda (TSKMGR.TSKPTR),y
|
||||
lda (pPs),y
|
||||
>PUSHA
|
||||
jsr S.GetEnvVarH
|
||||
bcs .5
|
||||
@ -98,8 +90,8 @@ S.ExpandPStr2 stz TmpBuffer256 init Expanded String len=0
|
||||
cmp (R.AX) last char?
|
||||
beq .81
|
||||
jmp .1
|
||||
.81 >PUSHWI TmpBuffer256
|
||||
jsr S.NewPStr
|
||||
.81 >LDYAI TmpBuffer256
|
||||
jsr S.NewPStrYA
|
||||
rts
|
||||
*--------------------------------------
|
||||
* S.CreateEnv
|
||||
@ -118,7 +110,7 @@ S.CreateEnv >PUSHWI K.ENV.SIZE get a buffer for ENV
|
||||
clc
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
* S.DupEnvA2
|
||||
* S.DupEnvA
|
||||
* In:
|
||||
* A = ENV hMem To Duplicate
|
||||
* Out:
|
||||
@ -128,8 +120,7 @@ S.DupEnvA pha
|
||||
jsr S.GetMemPtrA
|
||||
>STYA ZPQuickPtr1
|
||||
pla
|
||||
jsr S.GetMemLenA
|
||||
>PUSHYA
|
||||
>PUSHWI K.ENV.SIZE
|
||||
>PUSHBI 0
|
||||
jsr S.GetMem
|
||||
bcs .9
|
||||
@ -401,6 +392,24 @@ S.SelectEnv
|
||||
.9 sec
|
||||
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
|
||||
SAVE SYS/KERNEL.S.ENV
|
||||
LOAD SYS/KERNEL.S
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /A2OSX.BUILD
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
@ -17,17 +17,18 @@ S.EvtMgrInit stz EVTMGR.PENDING
|
||||
* OUT :
|
||||
* CS = no event, A = ERROR
|
||||
* CC * event in YA
|
||||
* (EVTMGR.EVTPTR)
|
||||
* (pEvent)
|
||||
*--------------------------------------
|
||||
S.GetEvent lda EVTMGR.PENDING Get Pending EVENT hMem if any
|
||||
beq .1
|
||||
jsr S.GetMemPtrA
|
||||
>STYA EVTMGR.EVTPTR
|
||||
>STYA pEvent
|
||||
clc
|
||||
rts
|
||||
|
||||
.1 jsr S.CreateEvent
|
||||
bcs .9
|
||||
stx EVTMGR.PENDING
|
||||
|
||||
jsr S.GetSysEvent
|
||||
bcc .9 got SYS event
|
||||
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
|
||||
eor EVTMGR.VBLSTATE
|
||||
bpl .2 no change
|
||||
bpl .9 no change
|
||||
|
||||
sta EVTMGR.VBLSTATE save new
|
||||
|
||||
dec EVTMGR.FRAMECNT
|
||||
bne .2
|
||||
bne .9
|
||||
lda #K.TIMER16RESOLUTION
|
||||
sta EVTMGR.FRAMECNT
|
||||
|
||||
@ -53,97 +54,26 @@ S.GetSysEvent lda VBL get VLINE status
|
||||
inc A2osX.TIMER16+1
|
||||
|
||||
.1 lda #S.EVT.F.TIMER
|
||||
sta (EVTMGR.EVTPTR)
|
||||
clc
|
||||
rts
|
||||
|
||||
.2 lda KBD
|
||||
bpl .9
|
||||
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
|
||||
.8 sta (pEvent)
|
||||
clc
|
||||
rts
|
||||
|
||||
.9 inc A2osX.RANDOM16
|
||||
bne .99
|
||||
inc A2osX.RANDOM16+1
|
||||
.99 lda #0 error code=0
|
||||
.9 lda #0 error code=0
|
||||
sec no event
|
||||
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
|
||||
* OUT :
|
||||
* X = hMem
|
||||
* Y,A = PTR to EVENT
|
||||
*--------------------------------------
|
||||
S.CreateEvent >PUSHWI S.EVT.SIZE
|
||||
>PUSHBI 0
|
||||
>PUSHBI S.MEM.F.INIT0
|
||||
jsr S.GetMem
|
||||
bcs .9
|
||||
>STYA EVTMGR.EVTPTR
|
||||
lda #0
|
||||
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
|
||||
>STYA pEvent
|
||||
stx EVTMGR.PENDING
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
* S.DestroyEvent
|
||||
@ -151,24 +81,29 @@ S.DestroyEvent lda EVTMGR.PENDING
|
||||
* A = Event hMem
|
||||
* OUT :
|
||||
*--------------------------------------
|
||||
S.DestroyEventA pha
|
||||
jsr S.GetMemPtrA
|
||||
>STYA EVTMGR.EVTPTR
|
||||
lda (EVTMGR.EVTPTR)
|
||||
S.DestroyEvent lda EVTMGR.PENDING
|
||||
beq .9
|
||||
|
||||
lda (pEvent)
|
||||
and #S.EVT.F.hMEM1
|
||||
beq .1
|
||||
|
||||
ldy #S.EVT.DATALO
|
||||
lda (EVTMGR.EVTPTR),y
|
||||
lda (pEvent),y
|
||||
jsr S.FreeMemA
|
||||
.1 lda (EVTMGR.EVTPTR)
|
||||
|
||||
.1 lda (pEvent)
|
||||
and #S.EVT.F.hMEM2
|
||||
beq .2
|
||||
|
||||
ldy #S.EVT.DATAHI
|
||||
lda (EVTMGR.EVTPTR),y
|
||||
lda (pEvent),y
|
||||
jsr S.FreeMemA
|
||||
.2 pla
|
||||
|
||||
.2 lda EVTMGR.PENDING
|
||||
jsr S.FreeMemA
|
||||
rts
|
||||
stz EVTMGR.PENDING
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
EVTMGR.VBLSTATE .BS 1
|
||||
EVTMGR.FRAMECNT .BS 1
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /A2OSX.BUILD
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
@ -9,7 +9,7 @@ AUTO 6
|
||||
* PUBLIC
|
||||
*--------------------------------------
|
||||
S.CheckPrefixA jsr S.GetMemPtrA
|
||||
S.CheckPrefix >STYA MLICALL.PARAMS+1
|
||||
S.CheckPrefixYA >STYA MLICALL.PARAMS+1
|
||||
>STYA ZPQuickPtr1
|
||||
lda (ZPQuickPtr1)
|
||||
beq .98
|
||||
@ -20,7 +20,7 @@ S.CheckPrefix >STYA MLICALL.PARAMS+1
|
||||
bne .98
|
||||
cpx #1 "/" allowed for listing online volumes
|
||||
beq .8
|
||||
>KMLICALL MLIGETFILEINFO
|
||||
>MLICALL MLIGETFILEINFO
|
||||
bcs .98 No, invalid path...
|
||||
lda MLICALL.PARAMS+4 Check file type
|
||||
cmp #$0F Directory?
|
||||
@ -46,37 +46,46 @@ S.FileSearch >PULLA Get Search path
|
||||
pla
|
||||
sec
|
||||
rts
|
||||
|
||||
.10 sta R.BL Store Expanded path list to search
|
||||
>PULLB R.AH Store Filename
|
||||
lda #1
|
||||
sta R.BH Start At Token 1
|
||||
|
||||
.1 >PUSHB R.BL push expanded path list
|
||||
>PUSHBI $3B Push SEP=';'
|
||||
>PUSHB R.BH Push Token IDX
|
||||
jsr S.PStrGetTkn Get R.BL token in A
|
||||
bcs .98
|
||||
|
||||
sta R.CL Store Token path
|
||||
>PUSHB R.AH push filename
|
||||
>PUSHB R.CL Push Token path
|
||||
jsr S.PStrCat
|
||||
bcs .97
|
||||
|
||||
sta R.CH Store Full path (Token Path+filename)
|
||||
jsr S.MLIGetFileInfoA
|
||||
bcc .8
|
||||
|
||||
lda R.CH Discard this Full Path
|
||||
jsr S.FreeMemA
|
||||
lda R.CL Discard Token path
|
||||
jsr S.FreeMemA
|
||||
inc R.BH Try next Token
|
||||
bne .1
|
||||
|
||||
beq .98 go to discard Expanded path list
|
||||
|
||||
.97 lda R.CL Discard Token path
|
||||
jsr S.FreeMemA
|
||||
|
||||
.98 lda R.BL Discard Expanded Path list
|
||||
jsr S.FreeMemA
|
||||
lda #SYSMGR.ERRFNF
|
||||
sec
|
||||
rts
|
||||
|
||||
.8 jsr .97 Dicard all except Full Path
|
||||
lda R.CH
|
||||
clc
|
||||
@ -91,20 +100,24 @@ S.FileSearch >PULLA Get Search path
|
||||
*--------------------------------------
|
||||
S.LoadFileA jsr S.MLIOpenA
|
||||
bcs .99
|
||||
|
||||
sta R.AL save ref_num
|
||||
stx R.AH save Prodos Buffer for freemem
|
||||
jsr S.MLIGetEOFA
|
||||
bcs .98
|
||||
|
||||
phx Larger than 64k?
|
||||
plx
|
||||
beq .1 File too big!!!!
|
||||
lda #SYSMGR.ERRFTB
|
||||
bra .98
|
||||
|
||||
.1 >STYA R.BX save Length
|
||||
>PUSHYA Push Length for S.GetMem
|
||||
>PUSHBI 0
|
||||
jsr S.GetMem
|
||||
bcs .98
|
||||
|
||||
>STYA R.CX
|
||||
stx R.DL save Segment hMem
|
||||
>PUSHW R.BX Push Length for S.ReadFile
|
||||
@ -112,24 +125,29 @@ S.LoadFileA jsr S.MLIOpenA
|
||||
>PUSHB R.AL Push ref_num
|
||||
jsr S.MLIRead
|
||||
bcs .97
|
||||
|
||||
lda R.AL
|
||||
jsr S.MLICloseA
|
||||
|
||||
lda R.AH
|
||||
jsr S.FreeMemA Discard ProDOS IO Buffer
|
||||
>LDYA R.BX Return File Length...
|
||||
ldx R.DL ...and hMem to Caller
|
||||
clc
|
||||
rts
|
||||
|
||||
.97 pha
|
||||
lda R.DL
|
||||
jsr S.FreeMemA freemem because of failed load
|
||||
pla
|
||||
|
||||
.98 pha
|
||||
lda R.AL
|
||||
jsr S.MLICloseA
|
||||
lda R.AH
|
||||
jsr S.FreeMemA ProDOS IO Buffer
|
||||
pla
|
||||
|
||||
.99 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
@ -143,7 +161,7 @@ S.ListDirInitA sta R.AL
|
||||
stz TmpFileName Reset File.Pattern
|
||||
jsr S.GetMemPtrA
|
||||
>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
|
||||
|
||||
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
|
||||
|
||||
.4 >PUSHWI S.LISTDIR.SIZE get LISTDIR Struct
|
||||
>PUSHBI 0
|
||||
>PUSHBI S.MEM.F.INIT0 reset all bytes
|
||||
jsr S.GetMem
|
||||
bcs .99
|
||||
stx R.AH
|
||||
>STYA R.CX Store LISTDIR Struct
|
||||
txa
|
||||
jsr S.ClrMemA reset all bytes
|
||||
|
||||
ldy TmpFileName
|
||||
beq .5
|
||||
@ -233,8 +249,10 @@ S.ListDirInitAV >PUSHWI 256
|
||||
jsr S.MLIOnline
|
||||
bcs .98
|
||||
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
|
||||
rts
|
||||
.98 lda (R.CX)
|
||||
@ -242,10 +260,12 @@ S.ListDirInitAV >PUSHWI 256
|
||||
.99 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.ListDirInitAD lda #0
|
||||
sta (R.CX) reset hONLINE
|
||||
S.ListDirInitAD
|
||||
* lda #0
|
||||
* sta (R.CX) reset hONLINE
|
||||
|
||||
>LDYA R.BX Open DIR
|
||||
jsr S.MLIOpen
|
||||
jsr S.MLIOpenYA
|
||||
bcs .99
|
||||
ldy #S.LISTDIR.REFNUM
|
||||
sta (R.CX),y save ref_num
|
||||
@ -284,10 +304,11 @@ S.ListDirInitAD lda #0
|
||||
ldy #S.LISTDIR.FC+1
|
||||
sta (R.CX),y
|
||||
|
||||
ldy #S.LISTDIR.FI
|
||||
sta (R.CX),y
|
||||
iny
|
||||
sta (R.CX),y set FI to $0000
|
||||
* ldy #S.LISTDIR.FI
|
||||
* lda #0
|
||||
* sta (R.CX),y
|
||||
* iny
|
||||
* sta (R.CX),y set FI to $0000
|
||||
clc
|
||||
.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)
|
||||
and #$F0
|
||||
beq .40
|
||||
beq .5
|
||||
|
||||
cmp #$F0 Volume header ?
|
||||
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 ?
|
||||
lda (R.CX),y
|
||||
beq .30
|
||||
|
||||
jsr S.GetMemPtrA
|
||||
>PUSHYA push Filter hMem
|
||||
>PUSHYA push Filter PTR
|
||||
|
||||
lda (R.AX)
|
||||
and #$0F
|
||||
@ -415,9 +437,9 @@ S.ListDirNextAD stz R.DL Reset Return Record hMem
|
||||
dey
|
||||
bne .31
|
||||
|
||||
>PUSHWI TmpFileName push Filename
|
||||
>PUSHWI TmpFileName push Filename PTR
|
||||
jsr S.PStrMatchP
|
||||
bcs .40 no match
|
||||
bcs .5 no match
|
||||
|
||||
.30 ldy #S.LISTDIR.EL Get Entry length
|
||||
lda (R.CX),y
|
||||
@ -439,23 +461,23 @@ S.ListDirNextAD stz R.DL Reset Return Record hMem
|
||||
dey
|
||||
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
|
||||
inc
|
||||
sta (R.CX),y
|
||||
|
||||
ldy #S.LISTDIR.EL Set BLOCK PTR +=entry_length
|
||||
lda (R.CX),y
|
||||
ldy #S.LISTDIR.BLKPTR
|
||||
clc
|
||||
adc (R.CX),y
|
||||
sta (R.CX),y
|
||||
bcc .5
|
||||
iny
|
||||
lda (R.CX),y
|
||||
inc
|
||||
adc #0
|
||||
sta (R.CX),y
|
||||
|
||||
.5 lda (R.AX)
|
||||
lda (R.AX)
|
||||
and #$E0 is storage_type = $F or $E ?
|
||||
cmp #$E0 yes, do NOT increase FI
|
||||
bne .6
|
||||
@ -503,7 +525,8 @@ S.ListDirCloseA pha
|
||||
beq .3
|
||||
jsr S.FreeMemA
|
||||
|
||||
.3 lda (ZPQuickPtr1) Online buffer
|
||||
.3 ldy #S.LISTDIR.hONLINE
|
||||
lda (ZPQuickPtr1),y
|
||||
beq .4
|
||||
jsr S.FreeMemA
|
||||
|
||||
@ -535,7 +558,7 @@ S.ListDirReadBlock
|
||||
>STYA MLICALL.PARAMS+2
|
||||
>LDYAI 512
|
||||
>STYA MLICALL.PARAMS+4
|
||||
>KMLICALL MLIREAD
|
||||
>MLICALL MLIREAD
|
||||
bcs .9
|
||||
ldy #S.LISTDIR.BLKPTR set BLKPTR to $0004
|
||||
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
|
||||
PREFIX /A2OSX.BUILD
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
@ -9,48 +9,46 @@ AUTO 6
|
||||
* !!!!!!!! DO NOT USE VCPU16 !!!!!!!!
|
||||
* !!!!!! DO NOT USE ZPQuickPTRs !!!!!
|
||||
*--------------------------------------
|
||||
ZPMemMgrReqS .EQ ZPMemMgr store requested Size
|
||||
ZPMemMgrReqF .EQ ZPMemMgr+2 store requested Flags
|
||||
ZPMemMgrSPtr .EQ ZPMemMgr+6 Pointer To Slot selected
|
||||
ZPMemMgrTmp1 .EQ ZPMemMgr+8
|
||||
ZPMemMgrTmp2 .EQ ZPMemMgr+10
|
||||
ZPMemMgrTmp3 .EQ ZPMemMgr+12
|
||||
ZPMemMgrSPtr .EQ ZPMemMgr Pointer To Slot selected
|
||||
ZPMemMgrTmp1 .EQ ZPMemMgr+2
|
||||
ZPMemMgrTmp2 .EQ ZPMemMgr+4
|
||||
ZPMemMgrTmp3 .EQ ZPMemMgr+6
|
||||
*--------------------------------------
|
||||
* TODO :
|
||||
* - Create a 256 bytes table in SLOT #0
|
||||
* (eh, mem.ID=0 always used! useful to test if hMem=0)
|
||||
* - Create a 256 bytes table
|
||||
* mapping hMem's to real memory blocks to help
|
||||
* Garbage collector move blocks
|
||||
* - mem.ID=0 always used! useful to test if hMem=0
|
||||
*--------------------------------------
|
||||
S.MemMgrInit stz MEMMGR.MHLIMIT
|
||||
stz MEMMGR.HIMEM
|
||||
S.MemMgrInit >LDYAI MemMgr.MHiMem
|
||||
>STYA MemMgr.HiMem
|
||||
>STYA MemMgr.Free
|
||||
|
||||
ldx /MLI
|
||||
dex Reserve $BE00 For Global Page
|
||||
stx MEMMGR.MHLIMIT+1
|
||||
stx MEMMGR.HIMEM+1
|
||||
>LDYAI MemMgr.MLoMem
|
||||
>STYA MemMgr.LoMem
|
||||
|
||||
>LDYAI A2osX.LOMEM
|
||||
>STYA MEMMGR.MLLIMIT
|
||||
>STYA MEMMGR.LOMEM
|
||||
stz MEMMGR.TABLESIZE Init Table Size to 0
|
||||
* jsr S.UpdateMemStats Not needed, will be called by S.GetMem
|
||||
>PUSHWI 256 get a 256 bytes buffer for Map Table, hMem=0
|
||||
>PUSHBI 0
|
||||
jsr S.GetMem create it...
|
||||
stz MemMgr.LastSlot Reserve Slot #0
|
||||
|
||||
sta SETREADAUX
|
||||
sta SETWRITEAUX
|
||||
|
||||
>LDYAI MemMgr.XHiMem
|
||||
>STYA MemMgr.HiMem
|
||||
>STYA MemMgr.Free
|
||||
|
||||
>LDYAI MemMgr.XLoMem
|
||||
>STYA MemMgr.LoMem
|
||||
|
||||
stz MemMgr.LastSlot Reserve Slot #0
|
||||
|
||||
sta CLRREADAUX
|
||||
sta CLRWRITEAUX
|
||||
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
* PUBLIC
|
||||
*--------------------------------------
|
||||
S.SetLowMemLimit
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.GarbageCollector
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
* S.GetMem
|
||||
* In:
|
||||
* PULLB = FLAGS
|
||||
@ -60,58 +58,99 @@ S.GarbageCollector
|
||||
* X = S.MEM.ID
|
||||
* CS on err
|
||||
*--------------------------------------
|
||||
S.GetMem >PULLB ZPMemMgrReqF store requested flags
|
||||
>PULLW ZPMemMgrReqS store requested size
|
||||
lda ZPMemMgrReqS align REQS to 16 bytes
|
||||
S.GetMem >PULLB MemMgr.ReqFlags store requested flags
|
||||
and #S.MEM.F.AUX
|
||||
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
|
||||
beq .10
|
||||
lda ZPMemMgrReqS
|
||||
|
||||
lda MemMgr.ReqSize
|
||||
and #$F0
|
||||
clc
|
||||
adc #$10
|
||||
sta ZPMemMgrReqS
|
||||
sta MemMgr.ReqSize
|
||||
bcc .10
|
||||
inc ZPMemMgrReqS+1
|
||||
.10 ldx #0 init to SLOT #0 of MEMSLOT list
|
||||
inc MemMgr.ReqSize+1
|
||||
|
||||
.10 >LDYAI MemMgr.Table
|
||||
>STYA ZPMemMgrSPtr
|
||||
|
||||
ldx #0 Current slot=0
|
||||
|
||||
lda MEMMGR.TABLESIZE Check if some free slot to reuse first
|
||||
beq .6
|
||||
.1 txa
|
||||
jsr S.GetMemByIDA
|
||||
lda MemMgr.LastSlot Check if some free slot to reuse first
|
||||
beq .41
|
||||
|
||||
sta MemMgr.SlotCnt
|
||||
|
||||
.1 inx move to next slot
|
||||
jsr MemMgr.NextSlot
|
||||
lda (ZPMemMgrSPtr) Get Flags
|
||||
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 ?
|
||||
beq .3
|
||||
|
||||
ldy #S.MEM.PTR
|
||||
lda (ZPMemMgrSPtr),y get LO of PTR
|
||||
bne .4 not page-aligned
|
||||
|
||||
.3 ldy #S.MEM.LEN
|
||||
lda (ZPMemMgrSPtr),y get LEN of this block
|
||||
cmp ZPMemMgrReqS compare with requested size
|
||||
cmp MemMgr.ReqSize compare with requested size
|
||||
bne .4
|
||||
|
||||
iny
|
||||
lda (ZPMemMgrSPtr),y
|
||||
cmp ZPMemMgrReqS+1
|
||||
beq .5 requested size matches slot size !!!
|
||||
.4 inx move to next slot
|
||||
cpx MEMMGR.TABLESIZE last slot ?
|
||||
bne .1 check for another slot
|
||||
beq .6 last one, create a new slot
|
||||
cmp MemMgr.ReqSize+1
|
||||
beq .7 requested size matches slot size !!!
|
||||
|
||||
.4 dec MemMgr.SlotCnt any other slot to check?
|
||||
bne .1 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
|
||||
.5 lda ZPMemMgrReqF get requested flags
|
||||
.7 lda MemMgr.ReqFlags get requested flags
|
||||
ora #S.MEM.F.INUSE mark as in use
|
||||
sta (ZPMemMgrSPtr)
|
||||
|
||||
lda #0
|
||||
and #S.MEM.F.INIT0
|
||||
beq .8
|
||||
|
||||
jsr MemMgr.Init0
|
||||
|
||||
.8 lda #0
|
||||
ldy #S.MEM.BIN
|
||||
sta (ZPMemMgrSPtr),y
|
||||
inc Mark this slot used by one task
|
||||
|
||||
inc Mark this slot used by one process
|
||||
ldy #S.MEM.REFCNT
|
||||
sta (ZPMemMgrSPtr),y
|
||||
|
||||
ldy #S.PS.ID
|
||||
lda (TSKMGR.TSKPTR),y
|
||||
lda (pPs),y
|
||||
ldy #S.MEM.OWNERPID
|
||||
sta (ZPMemMgrSPtr),y
|
||||
|
||||
@ -122,45 +161,112 @@ S.GetMem >PULLB ZPMemMgrReqF store requested flags
|
||||
lda (ZPMemMgrSPtr),y A = HI PTR
|
||||
ply Y = LO PTR
|
||||
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
|
||||
sbc ZPMemMgrReqS
|
||||
beq .7 yes, allocate
|
||||
sbc ZPMemMgrTmp1
|
||||
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
|
||||
lda #0
|
||||
jsr S.AddSlot
|
||||
bcs .99
|
||||
|
||||
.7 >LDYA ZPMemMgrReqS
|
||||
jsr S.AddSlot
|
||||
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
|
||||
ldy #S.MEM.PTR
|
||||
lda ZPMemMgrTmp2 get new MemMgr.Free
|
||||
sta MemMgr.Free set as system MemMgr.Free value
|
||||
sta (ZPMemMgrSPtr),y store is as base address of new slot
|
||||
iny
|
||||
lda ZPMemMgrTmp2+1
|
||||
sta MemMgr.Free+1
|
||||
sta (ZPMemMgrSPtr),y
|
||||
ldy #S.PS.ID
|
||||
lda (TSKMGR.TSKPTR),y
|
||||
ldy #S.MEM.OWNERPID
|
||||
|
||||
iny
|
||||
lda ZPMemMgrTmp1 get requested size
|
||||
sta (ZPMemMgrSPtr),y setup slot LEN
|
||||
iny
|
||||
lda ZPMemMgrTmp1+1
|
||||
sta (ZPMemMgrSPtr),y
|
||||
jsr S.UpdateMemStats
|
||||
>LDYA ZPMemMgrTmp1 Y,A = PTR
|
||||
plx X = hMem
|
||||
|
||||
stx MemMgr.LastSlot mark this slot allocated
|
||||
clc
|
||||
rts
|
||||
.99 sec
|
||||
|
||||
.98 lda #MemMgr.ERROOM
|
||||
sec
|
||||
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
|
||||
* In:
|
||||
@ -168,12 +274,11 @@ S.GetMem >PULLB ZPMemMgrReqF store requested flags
|
||||
* Out:
|
||||
* X,Y unmodified
|
||||
*--------------------------------------
|
||||
S.FreeMemA and #$FF
|
||||
bne S.FreeMemA0 Slot=0, reserved by Kernel
|
||||
rts
|
||||
|
||||
S.FreeMemA0 phy
|
||||
S.FreeMemA phy
|
||||
phx
|
||||
tax
|
||||
beq .8 Slot=0, reserved by Kernel
|
||||
|
||||
jsr S.GetMemByIDA
|
||||
lda (ZPMemMgrSPtr)
|
||||
bpl * In use ?
|
||||
@ -182,156 +287,51 @@ S.FreeMemA0 phy
|
||||
lda (ZPMemMgrSPtr),y Get count of those referencing this hMem
|
||||
dec only one left ?
|
||||
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
|
||||
lda (ZPMemMgrSPtr),y Any BINPATH to discard ?
|
||||
beq .11
|
||||
beq .1
|
||||
|
||||
pha save hMem
|
||||
>PUSHW ZPMemMgrSPtr
|
||||
pla
|
||||
jsr S.GetMemByIDA
|
||||
lda (ZPMemMgrSPtr)
|
||||
bmi .12 In use ?
|
||||
bra *
|
||||
bpl * ***MUST BE ALLOCATED***
|
||||
|
||||
.12 lda (ZPMemMgrSPtr) mark record as free
|
||||
and #$7F
|
||||
lda #0 mark BINPATH slot as free
|
||||
sta (ZPMemMgrSPtr)
|
||||
>PULLW ZPMemMgrSPtr
|
||||
|
||||
.11 lda (ZPMemMgrSPtr) mark record as free
|
||||
and #$7F
|
||||
.1 lda #0 mark this slot as free
|
||||
sta (ZPMemMgrSPtr)
|
||||
|
||||
.20 lda MEMMGR.TABLESIZE
|
||||
beq .82
|
||||
.21 dec
|
||||
.2 lda MemMgr.LastSlot
|
||||
beq .8
|
||||
|
||||
jsr S.GetMemByIDA
|
||||
lda (ZPMemMgrSPtr)
|
||||
bmi .81
|
||||
dec MEMMGR.TABLESIZE discard last record
|
||||
bmi .8
|
||||
|
||||
ldy #S.MEM.LEN
|
||||
lda (ZPMemMgrSPtr),y give back LEN bytes
|
||||
clc
|
||||
adc MEMMGR.MHLIMIT to HLIMIT
|
||||
sta MEMMGR.MHLIMIT
|
||||
adc MemMgr.Free to MemMgr.Free
|
||||
sta MemMgr.Free
|
||||
iny
|
||||
lda (ZPMemMgrSPtr),y
|
||||
adc MEMMGR.MHLIMIT+1
|
||||
sta MEMMGR.MHLIMIT+1
|
||||
lda MEMMGR.MLLIMIT And give back S.MEM.SIZE
|
||||
sec
|
||||
sbc #S.MEM.SIZE
|
||||
sta MEMMGR.MLLIMIT to LLIMIT
|
||||
bcs .2
|
||||
dec MEMMGR.MLLIMIT+1
|
||||
.2 lda MEMMGR.TABLESIZE
|
||||
bne .21 no slot left, exit
|
||||
.81 jsr S.UpdateMemStats
|
||||
.82 plx
|
||||
adc MemMgr.Free+1
|
||||
sta MemMgr.Free+1
|
||||
|
||||
dec MemMgr.LastSlot discard last slot
|
||||
bne .2 no slot left, exit
|
||||
|
||||
.8 plx
|
||||
ply
|
||||
clc
|
||||
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
|
||||
* In:
|
||||
* A = hMem
|
||||
@ -348,110 +348,90 @@ S.GetMemPtrA jsr S.GetMemByIDA
|
||||
ply
|
||||
rts
|
||||
*--------------------------------------
|
||||
* S.GetMemLenA
|
||||
* S.GetMemByIDA
|
||||
* In:
|
||||
* A = hMem
|
||||
* Out:
|
||||
* Y,A = PTR to MemLength
|
||||
* Y,A = ZPMemMgrSPtr = PTR to S.MEM
|
||||
* X unmodified
|
||||
*--------------------------------------
|
||||
S.GetMemLenA jsr S.GetMemByIDA
|
||||
ldy #S.MEM.LEN
|
||||
lda (ZPMemMgrSPtr),y
|
||||
pha
|
||||
iny
|
||||
lda (ZPMemMgrSPtr),y
|
||||
ply
|
||||
S.GetMemByIDA stz ZPMemMgrSPtr+1
|
||||
|
||||
asl
|
||||
rol ZPMemMgrSPtr+1
|
||||
asl
|
||||
rol ZPMemMgrSPtr+1
|
||||
asl
|
||||
rol ZPMemMgrSPtr+1
|
||||
|
||||
clc
|
||||
adc #MemMgr.Table
|
||||
sta ZPMemMgrSPtr
|
||||
tay
|
||||
lda ZPMemMgrSPtr+1
|
||||
adc /MemMgr.Table
|
||||
sta ZPMemMgrSPtr+1
|
||||
rts
|
||||
*--------------------------------------
|
||||
* PRIVATE
|
||||
* In:
|
||||
* A = hMem to BINPATH (PSTR)
|
||||
* Out:
|
||||
* Y,A = ZPMemMgrSPtr = PTR to S.MEM
|
||||
* X = hMem
|
||||
*--------------------------------------
|
||||
* S.AddSlot
|
||||
* In:
|
||||
* Y,A = Requested size
|
||||
* Out:
|
||||
* Y,A = PTR to MemSlot
|
||||
* X = SLOT.ID
|
||||
*--------------------------------------
|
||||
S.AddSlot >STYA ZPMemMgrTmp1 save req size
|
||||
lda MEMMGR.TABLESIZE
|
||||
inc
|
||||
beq .99 > 255 ERR:OUT OF SLOT
|
||||
dec
|
||||
jsr S.GetMemByIDA yes, get PTR to slot
|
||||
|
||||
lda MEMMGR.MHLIMIT Compute base PTR=HLIMIT-REQ size
|
||||
sec
|
||||
sbc ZPMemMgrTmp1
|
||||
sta ZPMemMgrTmp2 store new HLIMIT in ZPMemMgrTmp2
|
||||
lda MEMMGR.MHLIMIT+1
|
||||
sbc ZPMemMgrTmp1+1
|
||||
sta ZPMemMgrTmp2+1
|
||||
|
||||
lda MEMMGR.MLLIMIT compute new LLIMIT
|
||||
S.GetMemByNameA jsr S.GetMemPtrA
|
||||
S.GetMemByNameYA
|
||||
>STYA ZPMemMgrTmp1 save BINPATH
|
||||
>LDYAI MemMgr.Table+S.MEM.SIZE
|
||||
>STYA ZPMemMgrSPtr
|
||||
ldx #0
|
||||
|
||||
.1 cpx MemMgr.LastSlot
|
||||
beq .9
|
||||
inx
|
||||
lda (ZPMemMgrSPtr)
|
||||
bpl .6 In Use?
|
||||
|
||||
ldy #S.MEM.BIN any BIN PATH in this slot?
|
||||
lda (ZPMemMgrSPtr),y
|
||||
beq .6
|
||||
|
||||
jsr S.GetMemPtrA get pathname
|
||||
>STYA ZPMemMgrTmp2
|
||||
|
||||
ldy #0
|
||||
|
||||
.2 lda (ZPMemMgrTmp1),y
|
||||
cmp (ZPMemMgrTmp2),y
|
||||
bne .6
|
||||
|
||||
tya
|
||||
iny
|
||||
cmp (ZPMemMgrTmp1)
|
||||
bne .2
|
||||
|
||||
>LDYA ZPMemMgrSPtr
|
||||
clc
|
||||
rts
|
||||
|
||||
.6 lda ZPMemMgrSPtr
|
||||
clc
|
||||
adc #S.MEM.SIZE
|
||||
sta ZPMemMgrTmp3 store new LLIMIT in ZPMemMgrTmp3
|
||||
lda MEMMGR.MLLIMIT+1
|
||||
adc #0
|
||||
sta ZPMemMgrTmp3+1
|
||||
|
||||
lda ZPMemMgrTmp2 ensure new LLIMIT is not higher
|
||||
sec than new HLIMIT
|
||||
sbc ZPMemMgrTmp3
|
||||
lda ZPMemMgrTmp2+1
|
||||
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
|
||||
sta ZPMemMgrSPtr
|
||||
bcc .1
|
||||
inc ZPMemMgrSPtr+1
|
||||
bra .1
|
||||
|
||||
.9 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.SetLoMem
|
||||
clc
|
||||
rts
|
||||
.98 lda #MEMMGR.ERROOM
|
||||
sec
|
||||
rts
|
||||
.99 lda #MEMMGR.ERROOS
|
||||
sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.UpdateMemStats
|
||||
lda MEMMGR.MHLIMIT
|
||||
sec
|
||||
sbc MEMMGR.MLLIMIT
|
||||
sta MEMMGR.MFREE
|
||||
lda MEMMGR.MHLIMIT+1
|
||||
sbc MEMMGR.MLLIMIT+1
|
||||
sta MEMMGR.MFREE+1
|
||||
rts
|
||||
S.GarbageCollector
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE SYS/KERNEL.S.MEM
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /A2OSX.BUILD
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
@ -8,9 +8,33 @@ AUTO 6
|
||||
*--------------------------------------
|
||||
* PUBLIC
|
||||
*--------------------------------------
|
||||
S.MLICreate
|
||||
S.MLIDestroy
|
||||
S.MLIRename
|
||||
S.MLICreateFile
|
||||
clc
|
||||
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.MLIGetFileInfoA
|
||||
@ -21,9 +45,9 @@ S.MLISetFileInfo
|
||||
*--------------------------------------
|
||||
S.MLIGetFileInfoA
|
||||
jsr S.GetMemPtrA
|
||||
S.MLIGetFileInfo
|
||||
S.MLIGetFileInfoYA
|
||||
>STYA MLICALL.PARAMS+1
|
||||
>KMLICALL MLIGETFILEINFO
|
||||
>MLICALL MLIGETFILEINFO
|
||||
bcs .9
|
||||
>LDYAI MLICALL.PARAMS+3
|
||||
.9 rts
|
||||
@ -35,14 +59,19 @@ S.MLIGetFileInfo
|
||||
*--------------------------------------
|
||||
S.MLIOnline >PULLB MLICALL.PARAMS+1
|
||||
>PULLW MLICALL.PARAMS+2
|
||||
>KMLICALL MLIONLINE
|
||||
>MLICALL MLIONLINE
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.MLISetPrefix
|
||||
S.MLISetPrefixA jsr S.GetMemPtrA
|
||||
S.MLISetPrefixYA
|
||||
>STYA MLICALL.PARAMS+1
|
||||
>MLICALL MLISETPREFIX
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.MLIGetPrefixA jsr S.GetMemPtrA
|
||||
S.MLIGetPrefix >STYA MLICALL.PARAMS+1
|
||||
>KMLICALL MLIGETPREFIX
|
||||
S.MLIGetPrefixYA
|
||||
>STYA MLICALL.PARAMS+1
|
||||
>MLICALL MLIGETPREFIX
|
||||
rts
|
||||
*--------------------------------------
|
||||
* S.MLIOpenA
|
||||
@ -53,18 +82,20 @@ S.MLIGetPrefix >STYA MLICALL.PARAMS+1
|
||||
* X = buf hMem
|
||||
*--------------------------------------
|
||||
S.MLIOpenA jsr S.GetMemPtrA
|
||||
S.MLIOpen >STYA MLICALL.PARAMS+1
|
||||
S.MLIOpenYA >STYA MLICALL.PARAMS+1
|
||||
>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
|
||||
bcs .99
|
||||
|
||||
phx save Prodos Buffer hMem
|
||||
>STYA MLICALL.PARAMS+3
|
||||
>KMLICALL MLIOPEN
|
||||
>MLICALL MLIOPEN
|
||||
bcs .98
|
||||
lda MLICALL.PARAMS+5 get ref_num
|
||||
plx get back Prodos Buffer hMem
|
||||
rts CC
|
||||
|
||||
.98 plx get back Prodos Buffer hMem
|
||||
pha save MLI error
|
||||
txa
|
||||
@ -82,7 +113,7 @@ S.MLIOpen >STYA MLICALL.PARAMS+1
|
||||
S.MLINewLine >PULLB MLICALL.PARAMS+1
|
||||
>PULLB MLICALL.PARAMS+2
|
||||
>PULLB MLICALL.PARAMS+3
|
||||
>KMLICALL MLINEWLINE
|
||||
>MLICALL MLINEWLINE
|
||||
rts
|
||||
*--------------------------------------
|
||||
* S.MLIRead
|
||||
@ -96,7 +127,7 @@ S.MLINewLine >PULLB MLICALL.PARAMS+1
|
||||
S.MLIRead >PULLB MLICALL.PARAMS+1
|
||||
>PULLW MLICALL.PARAMS+2
|
||||
>PULLW MLICALL.PARAMS+4
|
||||
>KMLICALL MLIREAD
|
||||
>MLICALL MLIREAD
|
||||
bcs .9
|
||||
>LDYA MLICALL.PARAMS+6
|
||||
.9 rts
|
||||
@ -112,23 +143,40 @@ S.MLIRead >PULLB MLICALL.PARAMS+1
|
||||
S.MLIWrite >PULLB MLICALL.PARAMS+1
|
||||
>PULLW MLICALL.PARAMS+2
|
||||
>PULLW MLICALL.PARAMS+4
|
||||
>KMLICALL MLIWRITE
|
||||
>MLICALL MLIWRITE
|
||||
bcs .9
|
||||
>LDYA MLICALL.PARAMS+6
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
* S.MLIClose
|
||||
* S.MLICloseA
|
||||
* in :
|
||||
* A = ref_num
|
||||
* out :
|
||||
*--------------------------------------
|
||||
S.MLICloseA sta MLICALL.PARAMS+1
|
||||
>KMLICALL MLICLOSE
|
||||
>MLICALL MLICLOSE
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.MLIFlushA sta MLICALL.PARAMS+1
|
||||
>MLICALL MLIFLUSH
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.MLIFlushA
|
||||
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.MLIGetEOF
|
||||
@ -138,13 +186,38 @@ S.MLISetEOF
|
||||
* Y,A,X = EOF
|
||||
*--------------------------------------
|
||||
S.MLIGetEOFA sta MLICALL.PARAMS+1
|
||||
>KMLICALL MLIGETEOF
|
||||
>MLICALL MLIGETEOF
|
||||
bcs .9
|
||||
>LDYA MLICALL.PARAMS+2
|
||||
ldx MLICALL.PARAMS+4
|
||||
clc
|
||||
.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
|
||||
SAVE SYS/KERNEL.S.MLI
|
||||
LOAD SYS/KERNEL.S
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /A2OSX.BUILD
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /A2OSX.BUILD
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /A2OSX.BUILD
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
@ -68,8 +68,8 @@ S.ScreenSelectA and A2osX.SCREENS Screen is available ?
|
||||
bne .2
|
||||
sta SETTEXT
|
||||
sta SET80DISP
|
||||
sta CLR80STORE
|
||||
sta CLRPAGE2
|
||||
sta SET80STORE
|
||||
sta SETALTCHAR
|
||||
lda #A2osX.SCREENS.C
|
||||
bra .8
|
||||
@ -80,19 +80,22 @@ S.ScreenSelectA and A2osX.SCREENS Screen is available ?
|
||||
sta CLRTEXT
|
||||
sta CLRMIXED
|
||||
sta SETHIRES
|
||||
sta CLR80STORE
|
||||
sta CLRPAGE2
|
||||
|
||||
sta SET80DISP
|
||||
sta SETIOUDIS
|
||||
sta SETDHIRES
|
||||
sta CLRDHIRES
|
||||
sta SETDHIRES
|
||||
sta CLRDHIRES
|
||||
sta SETDHIRES
|
||||
|
||||
* sta CLR80DISP
|
||||
* sta SETDHIRES
|
||||
* sta CLRDHIRES
|
||||
* sta SET80DISP
|
||||
* sta SETDHIRES
|
||||
* sta CLRDHIRES
|
||||
* sta SETDHIRES
|
||||
|
||||
lda #A2osX.SCREENS.G
|
||||
|
||||
.8 sta A2osX.ACTIVESCRN
|
||||
.8 sta A2osX.ASCREEN
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
S.SysScrCPULoad ldx SYSSCR.CPULOADI
|
||||
@ -134,8 +137,38 @@ S.SysScrPRCode php save P to keep carry
|
||||
plp
|
||||
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.SysScrPPSTR >STYA SYSSCR.STRPTR
|
||||
S.SysScrPPSTRYA >STYA SYSSCR.STRPTR
|
||||
lda (SYSSCR.STRPTR)
|
||||
beq .9
|
||||
ldy #0
|
||||
@ -319,7 +352,7 @@ S.SysScrSetCharAtYX
|
||||
SYSSCR.CH .BS 1
|
||||
SYSSCR.CV .BS 1
|
||||
SYSSCR.CPULOADI .BS 1
|
||||
SYSSCR.CPULOADC .AS -"|\-/"
|
||||
SYSSCR.CPULOADC .AS -"|/-\"
|
||||
*--------------------------------------
|
||||
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
|
||||
|
@ -1,29 +1,26 @@
|
||||
PR#3
|
||||
PREFIX /A2OSX.BUILD
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
*--------------------------------------
|
||||
* S.NewPStr
|
||||
* IN:
|
||||
* PULLW = PTR to buffer
|
||||
* OUT:
|
||||
* A = hMem to S (PSTRING)
|
||||
*--------------------------------------
|
||||
S.NewPStr >PULLW ZPQuickPtr1
|
||||
bra S.PStrCpy2
|
||||
*--------------------------------------
|
||||
* S.PStrCpyA
|
||||
* In:
|
||||
* A = hMem of Src String
|
||||
* Out:
|
||||
* A = hMem of Dest String
|
||||
*--------------------------------------
|
||||
* S.NewPStrYA
|
||||
* IN:
|
||||
* PULLW = PTR to buffer
|
||||
* OUT:
|
||||
* A = hMem to S (PSTRING)
|
||||
*--------------------------------------
|
||||
S.PStrCpyA jsr S.GetMemPtrA
|
||||
>STYA ZPQuickPtr1
|
||||
S.PStrCpy2 lda (ZPQuickPtr1)
|
||||
S.NewPStrYA >STYA ZPQuickPtr1
|
||||
lda (ZPQuickPtr1)
|
||||
inc
|
||||
tay
|
||||
lda #0 Y,A = len of new string
|
||||
|
@ -1,5 +1,5 @@
|
||||
PR#3
|
||||
PREFIX /A2OSX.BUILD
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
@ -9,177 +9,189 @@ AUTO 6
|
||||
* S.TskMgrInit
|
||||
*--------------------------------------
|
||||
S.TskMgrInit stz TSKMGR.LASTID
|
||||
lda #1
|
||||
sta TSKMGR.SIZE One Slot Busy (Kernel PS=0)
|
||||
|
||||
>LDYAI TSKMGR.TABLE
|
||||
>STYA TSKMGR.TSKPTR
|
||||
|
||||
>LDYAI TskMgr.Table Make PS #0 as current process
|
||||
>STYA pPs
|
||||
|
||||
ldx #K.PS.MAX
|
||||
|
||||
.1 lda #0
|
||||
ldy #S.PS.SIZE-1
|
||||
|
||||
.2 sta (TSKMGR.TSKPTR),y
|
||||
.2 sta (pPs),y
|
||||
dey
|
||||
bpl .2
|
||||
|
||||
lda TSKMGR.TSKPTR
|
||||
lda pPs
|
||||
clc
|
||||
adc #S.PS.SIZE
|
||||
sta TSKMGR.TSKPTR
|
||||
sta pPs
|
||||
bcc .3
|
||||
inc TSKMGR.TSKPTR+1
|
||||
.3 dex
|
||||
|
||||
inc pPs+1
|
||||
.3 dex
|
||||
bne .1
|
||||
|
||||
>LDYAI TSKMGR.TABLE Make PS #0 as current process
|
||||
>STYA TSKMGR.TSKPTR
|
||||
>LDYAI TskMgr.Table Make PS #0 as current process
|
||||
>STYA pPs
|
||||
|
||||
jsr S.CreateEnv
|
||||
bcs .9
|
||||
bcs *
|
||||
|
||||
ldy #S.PS.hENV
|
||||
sta TSKMGR.TABLE,y
|
||||
sta TskMgr.Table,y
|
||||
|
||||
>LDYAI TmpBuffer256
|
||||
jsr S.MLIGetPrefix
|
||||
bcs .9
|
||||
>PUSHWI TmpBuffer256
|
||||
jsr S.NewPStr
|
||||
bcs .9
|
||||
jsr S.MLIGetPrefixYA
|
||||
bcs *
|
||||
|
||||
>LDYAI TmpBuffer256
|
||||
jsr S.NewPStrYA
|
||||
bcs *
|
||||
|
||||
ldy #S.PS.hPREFIX
|
||||
sta TSKMGR.TABLE,y
|
||||
sta TskMgr.Table,y
|
||||
>PUSHWI TmpBuffer256 push ENV value
|
||||
>PUSHWI ENV.A2osX push ENV name
|
||||
ldy #S.PS.hENV
|
||||
lda TSKMGR.TABLE,y
|
||||
lda TskMgr.Table,y
|
||||
>PUSHA
|
||||
jsr S.SetEnvVarP
|
||||
rts
|
||||
|
||||
.9 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
* S.TskMgrRun
|
||||
*--------------------------------------
|
||||
S.TskMgrRun >LDYAI TSKMGR.TABLE+S.PS.SIZE
|
||||
>STYA TSKMGR.TSKPTR
|
||||
S.TskMgrRun >LDYAI TskMgr.Table+S.PS.SIZE
|
||||
>STYA pPs
|
||||
|
||||
lda #K.PS.MAX-1 Skip PS #0
|
||||
lda #1 Skip PS #0
|
||||
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 ?
|
||||
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?
|
||||
beq .3
|
||||
beq .2
|
||||
|
||||
ldy #S.PS.CID
|
||||
lda (TSKMGR.TSKPTR),y
|
||||
jsr S.IsPSRunningA
|
||||
lda (pPs),y
|
||||
jsr S.GetPSByIDA
|
||||
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 (TSKMGR.TSKPTR),y
|
||||
jsr S.GetMemPtrA Y,A = CS
|
||||
pha
|
||||
tya get CS LO
|
||||
ldy #S.PS.PC
|
||||
lda (pPs) get S.PS.F
|
||||
and #$FF^S.PS.F.HOLD unmark as HOLD
|
||||
sta (pPs)
|
||||
|
||||
.2 jsr S.SelectProcess
|
||||
|
||||
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
|
||||
adc (TSKMGR.TSKPTR),y
|
||||
sta Kernel.JMP
|
||||
iny
|
||||
pla
|
||||
adc (TSKMGR.TSKPTR),y
|
||||
sta Kernel.JMP+1
|
||||
adc pCode
|
||||
sta S.TskMgrRunJmp+1
|
||||
txa
|
||||
adc pCode+1
|
||||
sta S.TskMgrRunJmp+2
|
||||
|
||||
lda #0 Don't forget to reset S.PC
|
||||
sta (TSKMGR.TSKPTR),y
|
||||
dey
|
||||
sta (TSKMGR.TSKPTR),y
|
||||
ldy #S.PS.PC
|
||||
sta (pPs),y
|
||||
iny
|
||||
sta (pPs),y
|
||||
|
||||
>LDYA TSKMGR.TSKPTR
|
||||
ldx #TSKMGR.RUN
|
||||
jsr Kernel.BINCALL Call RUN function
|
||||
bcc .5 RUN said CS=QUIT?
|
||||
jsr S.TskMgrRunJmp
|
||||
bra .4
|
||||
|
||||
.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
|
||||
|
||||
jsr Kernel.BINCALL Call QUIT function
|
||||
jsr pCodeJmp Call QUIT function
|
||||
|
||||
ldy #S.PS.ID
|
||||
lda (TSKMGR.TSKPTR),y
|
||||
lda (pPs),y
|
||||
jsr S.FreeProcessA
|
||||
bcs .99
|
||||
|
||||
.5 lda TSKMGR.TSKPTR
|
||||
.5 lda pPs
|
||||
clc
|
||||
adc #S.PS.SIZE
|
||||
sta TSKMGR.TSKPTR
|
||||
sta pPs
|
||||
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
|
||||
clc
|
||||
rts
|
||||
|
||||
.99 bra *
|
||||
*--------------------------------------
|
||||
S.TskMgrRunJmp jmp $FFFF
|
||||
*--------------------------------------
|
||||
* S.DispatchEvent
|
||||
* IN:
|
||||
* PULLW = Event
|
||||
* OUT:
|
||||
* CS: Not Dispatched
|
||||
* CC: Event Cleared
|
||||
*--------------------------------------
|
||||
S.DispatchEvent >LDYAI TSKMGR.TABLE+S.PS.SIZE
|
||||
>STYA TSKMGR.TSKPTR
|
||||
S.DispatchEvent >LDYAI TskMgr.Table+S.PS.SIZE
|
||||
>STYA pPs
|
||||
|
||||
lda #K.PS.MAX-1
|
||||
lda #1
|
||||
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 ?
|
||||
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?
|
||||
bne .3
|
||||
|
||||
lda (TSKMGR.TSKPTR) get S.PS.F
|
||||
lda (pPs) get S.PS.F
|
||||
and #S.PS.F.EVENT Accept Events ?
|
||||
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
|
||||
jsr Kernel.BINCALL Call DOEVENT function
|
||||
jsr pCodeJmp Call DOEVENT function
|
||||
bcc .8
|
||||
|
||||
.3 lda TSKMGR.TSKPTR
|
||||
.3 lda pPs
|
||||
clc
|
||||
adc #S.PS.SIZE
|
||||
sta TSKMGR.TSKPTR
|
||||
sta pPs
|
||||
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
|
||||
sec
|
||||
.8 rts
|
||||
rts
|
||||
|
||||
.8 jsr S.DestroyEvent
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
* S.TskMgrQuit
|
||||
*--------------------------------------
|
||||
@ -190,18 +202,20 @@ S.TskMgrQuit clc
|
||||
*--------------------------------------
|
||||
* S.ExecProcessA (Blocking Parent PID)
|
||||
* in :
|
||||
* A = hMem To Full Cmd Line
|
||||
* A = hMem To Cmd Line
|
||||
* out :
|
||||
* A = Child PSID
|
||||
*--------------------------------------
|
||||
S.ExecProcessA jsr S.CreateProcessA
|
||||
bcs .9 terminated, do not set PID as HOLD
|
||||
|
||||
ldy #S.PS.CID
|
||||
sta (TSKMGR.TSKPTR),y
|
||||
sta (pPs),y
|
||||
|
||||
pha Save Child PID
|
||||
lda (TSKMGR.TSKPTR)
|
||||
lda (pPs)
|
||||
ora #S.PS.F.HOLD
|
||||
sta (TSKMGR.TSKPTR)
|
||||
sta (pPs)
|
||||
pla Get Back PID
|
||||
clc
|
||||
.9 rts
|
||||
@ -213,174 +227,188 @@ S.ExecProcessA jsr S.CreateProcessA
|
||||
* A = Child PSID
|
||||
*--------------------------------------
|
||||
S.CreateProcessA
|
||||
pha save CMD line
|
||||
sta S.CreateProcessA.Cmd
|
||||
>LDYAI MSG.NEWPS
|
||||
jsr S.SysScrPPSTR
|
||||
|
||||
ldy #S.PS.ID
|
||||
lda (TSKMGR.TSKPTR),y
|
||||
|
||||
jsr S.CreateChildProcessA
|
||||
jsr S.SysScrPPSTRYA
|
||||
|
||||
jsr S.CreateChildProcess
|
||||
bcs .99
|
||||
>STYA TSKMGR.pNewPS
|
||||
|
||||
sta S.CreateProcessA.CPSID
|
||||
|
||||
jsr S.SelectProcessA
|
||||
|
||||
pla Get Back CMD Line
|
||||
lda S.CreateProcessA.Cmd
|
||||
jsr S.InitProcessA
|
||||
bcs .97 Init Failed or exit?
|
||||
ldy #S.PS.ID
|
||||
lda (TSKMGR.pNewPS),y
|
||||
bcs .98 Init Failed or exit?
|
||||
|
||||
ldy #S.PS.PID switch back to Parent Process
|
||||
lda (pPs),y
|
||||
|
||||
jsr S.SelectProcessA
|
||||
|
||||
lda S.CreateProcessA.CPSID
|
||||
clc
|
||||
rts
|
||||
|
||||
.97 pha save error code
|
||||
tay error code =0 ?
|
||||
bne .98 no, init failed
|
||||
>LDYA TSKMGR.pNewPS
|
||||
ldx #TSKMGR.QUIT yes, simply call QUIT function
|
||||
jsr Kernel.BINCALL Call QUIT function
|
||||
|
||||
.98 ldy #S.PS.ID
|
||||
lda (TSKMGR.pNewPS),y
|
||||
.98 pha save error code
|
||||
|
||||
ldy #S.PS.PID switch back to Parent Process
|
||||
lda (pPs),y
|
||||
jsr S.SelectProcessA
|
||||
|
||||
lda S.CreateProcessA.CPSID
|
||||
jsr S.FreeProcessA
|
||||
bra .90
|
||||
|
||||
.99 plx Discard CMD Line
|
||||
pha save error code
|
||||
pla get back error code
|
||||
|
||||
.90 pla get back error code
|
||||
sec
|
||||
.99 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.CreateProcessA.Cmd .BS 1
|
||||
S.CreateProcessA.CPSID .BS 1
|
||||
*--------------------------------------
|
||||
* S.GetPSByIDA
|
||||
* In :
|
||||
* A = PID
|
||||
* A = PID
|
||||
* Out :
|
||||
* Y,A = PTR to TSKSLOT
|
||||
*--------------------------------------
|
||||
S.GetPSByIDA tax
|
||||
bne .10
|
||||
>LDYAI TSKMGR.TABLE
|
||||
clc
|
||||
rts
|
||||
S.GetPSByIDA sta S.GetPSByIDA.PS
|
||||
|
||||
.10 sta ZPQuickPtr1 Store requested PID
|
||||
lda #K.PS.MAX
|
||||
sta ZPQuickPtr1+1
|
||||
>LDYAI TskMgr.Table
|
||||
>STYA ZPQuickPtr1
|
||||
|
||||
>LDYAI TSKMGR.TABLE+S.PS.SIZE
|
||||
>STYA ZPQuickPtr2
|
||||
|
||||
.1 lda (ZPQuickPtr2)
|
||||
bpl .2
|
||||
ldy #S.PS.ID
|
||||
lda (ZPQuickPtr2),y
|
||||
cmp ZPQuickPtr1
|
||||
lda S.GetPSByIDA.PS
|
||||
beq .8
|
||||
.2 dec ZPQuickPtr1+1
|
||||
beq .9
|
||||
lda ZPQuickPtr2
|
||||
|
||||
ldx #0
|
||||
|
||||
.1 inx
|
||||
lda ZPQuickPtr1
|
||||
clc
|
||||
adc #S.PS.SIZE
|
||||
sta ZPQuickPtr2
|
||||
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
|
||||
sta ZPQuickPtr1
|
||||
bcc .2
|
||||
inc R.BH
|
||||
.2 dex
|
||||
inc ZPQuickPtr1+1
|
||||
|
||||
.2 lda (ZPQuickPtr1)
|
||||
bpl .3
|
||||
|
||||
ldy #S.PS.ID
|
||||
lda (ZPQuickPtr1),y
|
||||
cmp S.GetPSByIDA.PS
|
||||
beq .8
|
||||
|
||||
.3 cpx TSKMGR.SIZE
|
||||
bne .1
|
||||
lda #TSKMGR.ERROOS
|
||||
sec
|
||||
rts
|
||||
|
||||
.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
|
||||
rts
|
||||
|
||||
.30 inc TSKMGR.SIZE
|
||||
|
||||
.3 lda #S.PS.F.INUSE
|
||||
sta (R.BX)
|
||||
ldy #S.PS.ID
|
||||
lda (R.AX),y
|
||||
ldy #S.PS.PID
|
||||
sta (R.BX),y
|
||||
sta (R.AX)
|
||||
|
||||
inc TSKMGR.LASTID
|
||||
bne .4
|
||||
inc TSKMGR.LASTID Ensure PSID not 0
|
||||
.4 lda TSKMGR.LASTID
|
||||
.4 inc TSKMGR.LASTID Get a PSID not alredy running
|
||||
beq .4 not = 0
|
||||
lda TSKMGR.LASTID
|
||||
jsr S.GetPSByIDA
|
||||
bcc .4
|
||||
|
||||
ldy #S.PS.ID
|
||||
sta (R.BX),y
|
||||
lda TSKMGR.LASTID
|
||||
sta (R.AX),y
|
||||
|
||||
lda #0
|
||||
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
|
||||
cpy #S.PS.SIZE
|
||||
bne .5
|
||||
|
||||
ldy #S.PS.hPREFIX copy hPREFIX...
|
||||
lda (R.AX),y
|
||||
lda (pPs),y
|
||||
jsr S.PStrCpyA
|
||||
bcs .99
|
||||
|
||||
ldy #S.PS.hPREFIX
|
||||
sta (R.BX),y
|
||||
sta (R.AX),y
|
||||
|
||||
ldy #S.PS.hENV ...and hENV from parent PS
|
||||
lda (R.AX),y
|
||||
lda (pPs),y
|
||||
jsr S.DupEnvA
|
||||
bcs .99
|
||||
|
||||
ldy #S.PS.hENV
|
||||
sta (R.BX),y
|
||||
sta (R.AX),y
|
||||
|
||||
ldy #S.PS.hINDEV
|
||||
lda (R.AX),y
|
||||
sta (R.BX),y
|
||||
lda (pPs),y
|
||||
sta (R.AX),y
|
||||
ldy #S.PS.hOUTDEV
|
||||
lda (R.AX),y
|
||||
sta (R.BX),y
|
||||
lda (pPs),y
|
||||
sta (R.AX),y
|
||||
ldy #S.PS.hERRDEV
|
||||
lda (R.AX),y
|
||||
sta (R.BX),y
|
||||
lda (pPs),y
|
||||
sta (R.AX),y
|
||||
|
||||
ldy #S.PS.ID
|
||||
lda (R.BX),y
|
||||
tax Exit with X=PSID
|
||||
>LDYA R.BX And Y,A=S.PS
|
||||
clc
|
||||
lda (pPs),y
|
||||
|
||||
ldy #S.PS.PID
|
||||
sta (R.AX),y
|
||||
|
||||
ldy #S.PS.ID
|
||||
lda (R.AX),y
|
||||
clc Exit with A=PSID
|
||||
rts
|
||||
|
||||
.99 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
@ -388,77 +416,116 @@ S.CreateChildProcessA
|
||||
* In :
|
||||
* A = hMem To Full Cmd Line
|
||||
*--------------------------------------
|
||||
* LS(2)
|
||||
* 0 : hMem to ENVPATH value
|
||||
* 1 : hMem to FULLPATH value
|
||||
*--------------------------------------
|
||||
S.InitProcessA >ADDLOCAL 2
|
||||
>PUSHA Push Cmd Line
|
||||
S.InitProcessA >PUSHA Push Cmd Line
|
||||
>PUSHBI $20 Push SEP=' '
|
||||
>PUSHBI 0 Push 0 for getting CMD And ARGS
|
||||
jsr S.PStrGetTkn
|
||||
bcs .99 OOM error
|
||||
ldy #S.PS.hCMD
|
||||
sta (TSKMGR.pNewPS),y
|
||||
bcc .10
|
||||
rts OOM error
|
||||
|
||||
.10 ldy #S.PS.hCMD
|
||||
sta (pPs),y
|
||||
>PUSHA push CMD for S.FileSearch
|
||||
txa
|
||||
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
|
||||
ldy #S.PS.hENV
|
||||
lda (TSKMGR.pNewPS),y
|
||||
lda (pPs),y
|
||||
>PUSHA
|
||||
jsr S.GetEnvVarP get value for ENV=PATH
|
||||
bcs .99
|
||||
>STAL 0 save VALUE hMem for discard
|
||||
|
||||
sta S.InitProcessA.PATH save VALUE hMem for discard
|
||||
>PUSHA A=PStr to ENV Value
|
||||
jsr S.FileSearch find File in %PATH%
|
||||
bcs .98
|
||||
>STAL 1 save FULLPATH hMem for discard
|
||||
|
||||
sta S.InitProcessA.FULLPATH save FULLPATH hMem for discard
|
||||
pha
|
||||
jsr S.SysScrPPSTRA
|
||||
pla
|
||||
|
||||
jsr S.LoadBinA A = BinPath hMem
|
||||
|
||||
bcs .97
|
||||
>STYA Kernel.JMP save PTR to Code Segment
|
||||
|
||||
>STYA pCode save PTR to Code Segment
|
||||
txa
|
||||
ldy #S.PS.hCS
|
||||
sta (TSKMGR.pNewPS),y save CS hMem in TSKSLOT
|
||||
>LDYA TSKMGR.pNewPS
|
||||
ldx #TSKMGR.INIT
|
||||
jsr Kernel.BINCALL Call INIT function
|
||||
sta (pPs),y save CS hMem in TSKSLOT
|
||||
|
||||
ldy #H.BIN.BIN.DS.SIZE+1
|
||||
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
|
||||
jsr .97
|
||||
clc
|
||||
rts
|
||||
|
||||
.97 pha save ERR
|
||||
>LDAL 1
|
||||
lda S.InitProcessA.FULLPATH
|
||||
jsr S.FreeMemA
|
||||
pla
|
||||
|
||||
.98 pha save ERR
|
||||
>LDAL 0
|
||||
lda S.InitProcessA.PATH
|
||||
jsr S.FreeMemA
|
||||
pla
|
||||
.99 >REMLOCAL 2
|
||||
sec
|
||||
|
||||
.99 sec
|
||||
rts
|
||||
S.InitProcessA.PATH .BS 1
|
||||
S.InitProcessA.FULLPATH .BS 1
|
||||
*--------------------------------------
|
||||
* S.QuitProcessA
|
||||
* In : A = PID to Quit (call TSKMGR.QUIT)
|
||||
* S.SelectProcessA
|
||||
* In : A=PSID
|
||||
*--------------------------------------
|
||||
S.QuitProcessA jsr S.GetPSByIDA
|
||||
bcs .9
|
||||
>STYA ZPQuickPtr1
|
||||
ldy #S.PS.hCS
|
||||
lda (ZPQuickPtr1),y
|
||||
S.SelectProcessA
|
||||
jsr S.GetPSByIDA
|
||||
bcs *
|
||||
>STYA pPS
|
||||
|
||||
S.SelectProcess ldy #S.PS.hCS
|
||||
lda (pPs),y
|
||||
jsr S.GetMemPtrA
|
||||
>STYA Kernel.JMP
|
||||
>LDYA ZPQuickPtr1
|
||||
ldx #TSKMGR.QUIT
|
||||
jsr Kernel.BINCALL Call QUIT function
|
||||
clc
|
||||
>STYA pCode
|
||||
|
||||
ldy #S.PS.hDS
|
||||
lda (pPs),y
|
||||
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
|
||||
.9 bra *
|
||||
*--------------------------------------
|
||||
* S.FreeProcessA
|
||||
* In : A = PID to free
|
||||
@ -469,71 +536,46 @@ S.FreeProcessA jsr S.GetPSByIDA
|
||||
ldy #S.PS.hARGS
|
||||
lda (ZPQuickPtr1),y
|
||||
beq .1
|
||||
|
||||
jsr S.FreeMemA
|
||||
|
||||
.1 ldy #S.PS.hCMD
|
||||
lda (ZPQuickPtr1),y
|
||||
beq .2
|
||||
|
||||
jsr S.FreeMemA
|
||||
|
||||
.2 ldy #S.PS.hENV
|
||||
lda (ZPQuickPtr1),y
|
||||
beq .3
|
||||
|
||||
jsr S.FreeMemA
|
||||
|
||||
.3 ldy #S.PS.hPREFIX
|
||||
lda (ZPQuickPtr1),y
|
||||
beq .4
|
||||
|
||||
jsr S.FreeMemA
|
||||
|
||||
.4 ldy #S.PS.hDS
|
||||
lda (ZPQuickPtr1),y
|
||||
beq .5
|
||||
|
||||
jsr S.FreeMemA
|
||||
|
||||
.5 ldy #S.PS.hCS
|
||||
lda (ZPQuickPtr1),y
|
||||
beq .8
|
||||
|
||||
jsr S.FreeMemA
|
||||
|
||||
.8 lda #0
|
||||
sta (ZPQuickPtr1) Mark TSKSLOT as free
|
||||
clc
|
||||
rts
|
||||
.9 bra *
|
||||
*--------------------------------------
|
||||
* S.IsPSRunningA
|
||||
* 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.SIZE .BS 1
|
||||
TSKMGR.COUNT .BS 1
|
||||
TSKMGR.LASTID .BS 1
|
||||
*--------------------------------------
|
||||
|
320
SYS/KERNEL.S.txt
320
SYS/KERNEL.S.txt
@ -1,34 +1,35 @@
|
||||
PR#3
|
||||
PREFIX /A2OSX.BUILD
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
.OR $E000
|
||||
.TF SYS/KERNEL
|
||||
.OR $D000
|
||||
.TF /A2OSX.BOOT/SYS/KERNEL
|
||||
*--------------------------------------
|
||||
.INB INC/MACROS.I
|
||||
.INB INC/KERNEL.I
|
||||
.INB INC/A2OSX.I
|
||||
.INB INC/A2OSX.API.I
|
||||
.INB INC/IO.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
|
||||
.DA S.FreeMemA
|
||||
.DA S.ClrMemA
|
||||
.DA S.GetMemPtrA
|
||||
|
||||
.DA S.GetMemLenA
|
||||
.DA S.GetMemByIDA
|
||||
|
||||
.DA S.GetMemByNameA
|
||||
.DA S.GetMemByNameYA
|
||||
.DA 0
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
.DA S.NewPStr $10
|
||||
.DA S.NewPStrYA $10
|
||||
.DA S.PStrCpyA
|
||||
.DA S.PStrCat
|
||||
.DA S.PStrCmp
|
||||
@ -39,7 +40,7 @@ KERNEL.SYSCALL jmp (.1,x)
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
.DA S.LoadBinA $20
|
||||
.DA S.LoadLib
|
||||
.DA S.LoadLibYA
|
||||
.DA S.UnloadLibA
|
||||
.DA S.LoadDrvA
|
||||
|
||||
@ -49,7 +50,7 @@ KERNEL.SYSCALL jmp (.1,x)
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
.DA S.ExpandPStrA $30
|
||||
.DA S.ExpandPStr
|
||||
.DA S.ExpandPStrYA
|
||||
.DA S.GetEnvVarH
|
||||
.DA S.GetEnvVarP
|
||||
|
||||
@ -58,51 +59,51 @@ KERNEL.SYSCALL jmp (.1,x)
|
||||
.DA 0
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
.DA S.MLICreate $40
|
||||
.DA S.MLIDestroy
|
||||
.DA S.MLICreateFile $40
|
||||
.DA S.MLICreateDirA
|
||||
.DA S.MLICreateDirYA
|
||||
.DA S.MLIDestroyA
|
||||
|
||||
.DA S.MLIDestroyYA
|
||||
.DA S.MLIRename
|
||||
.DA S.MLISetFileInfo
|
||||
|
||||
.DA S.MLIGetFileInfoA
|
||||
|
||||
.DA S.MLIGetFileInfoYA $50
|
||||
.DA S.MLIOnline
|
||||
.DA S.MLISetPrefix
|
||||
.DA S.MLIGetPrefixA
|
||||
.DA S.MLISetPrefixA
|
||||
.DA S.MLISetPrefixYA
|
||||
|
||||
.DA S.MLIOpenA $50
|
||||
.DA S.MLINewLine
|
||||
.DA S.MLIGetPrefixA
|
||||
.DA S.MLIGetPrefixYA
|
||||
.DA S.MLIOpenA
|
||||
.DA S.MLIOpenYA
|
||||
|
||||
.DA S.MLINewLine $60
|
||||
.DA S.MLIRead
|
||||
.DA S.MLIWrite
|
||||
|
||||
.DA S.MLICloseA
|
||||
|
||||
.DA S.MLIFlushA
|
||||
.DA S.MLISetMark
|
||||
.DA S.MLIGetMark
|
||||
.DA S.MLIGetMarkA
|
||||
.DA S.MLISetEOF
|
||||
|
||||
.DA S.MLISetEOF $60
|
||||
.DA S.MLIGetEOFA
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA S.MLIGetEOFA $70
|
||||
.DA S.MLISetBuf
|
||||
.DA S.MLIGetBuf
|
||||
.DA S.MLIGetTime
|
||||
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA S.MLIAllocIRQ
|
||||
.DA S.MLIDeallocIRQA
|
||||
.DA S.MLIReadBlock
|
||||
.DA S.MLIWriteBlock
|
||||
*--------------------------------------
|
||||
.DA S.GetDevByIDA $70
|
||||
.DA S.GetDevByIDA $80
|
||||
.DA S.GetDevByNameA
|
||||
.DA S.GetDevTable
|
||||
.DA S.GetDevInfoA
|
||||
|
||||
.DA S.DevOutA
|
||||
.DA S.GetDevByNameYA
|
||||
.DA 0
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
.DA S.GetEvent $80
|
||||
.DA S.DestroyEvent
|
||||
.DA 0
|
||||
.DA 0
|
||||
|
||||
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
@ -139,58 +140,66 @@ KERNEL.SYSCALL jmp (.1,x)
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
.DA S.ScreenSelectA $C0
|
||||
.DA 0
|
||||
.DA S.SysScrPPSTRA
|
||||
.DA S.SysScrPPSTRYA
|
||||
*--------------------------------------
|
||||
S.Kernel jsr S.KernelInit
|
||||
jsr S.KernelRun
|
||||
jsr S.KernelQuit
|
||||
|
||||
bra *
|
||||
*--------------------------------------
|
||||
S.KernelInit >LDYAI D.STACKSEG
|
||||
>STYA R.SP init Soft Stack
|
||||
>STYA R.LS init LS
|
||||
|
||||
S.KernelInit sei
|
||||
ldx #$FF init 6502 stack to highest
|
||||
txs
|
||||
stx A2osX.SaveSM
|
||||
stx A2osX.SaveSX
|
||||
cli
|
||||
|
||||
>LDYAI D.STACK.TOP
|
||||
>STYA pStack init Soft Stack
|
||||
|
||||
stz A2osX.SCREENS
|
||||
stz A2osX.ACTIVESCRN
|
||||
stz A2osX.ASCREEN
|
||||
|
||||
stz A2osX.CSCREEN.DEV
|
||||
stz A2osX.GSCREEN.DEV
|
||||
|
||||
jsr S.SysScrInit
|
||||
|
||||
>LDYAI MSG.Init
|
||||
jsr S.SysScrPPSTR
|
||||
|
||||
jsr S.SysScrPPSTRYA
|
||||
|
||||
>LDYAI MSG.Init.MemMgr
|
||||
jsr S.SysScrPPSTR
|
||||
jsr S.SysScrPPSTRYA
|
||||
jsr S.MemMgrInit
|
||||
jsr S.SysScrPRCode
|
||||
bcs .1
|
||||
|
||||
>LDYAI MSG.Init.TskMgr
|
||||
jsr S.SysScrPPSTR
|
||||
jsr S.SysScrPPSTRYA
|
||||
jsr S.TskMgrInit
|
||||
jsr S.SysScrPRCode
|
||||
.1 bcs .2
|
||||
|
||||
>LDYAI MSG.Init.DevMgr
|
||||
jsr S.SysScrPPSTR
|
||||
jsr S.SysScrPPSTRYA
|
||||
jsr S.DevMgrInit
|
||||
jsr S.SysScrPRCode
|
||||
.2 bcs .3
|
||||
|
||||
>LDYAI MSG.Init.EvtMgr
|
||||
jsr S.SysScrPPSTR
|
||||
jsr S.SysScrPPSTRYA
|
||||
jsr S.EvtMgrInit
|
||||
jsr S.SysScrPRCode
|
||||
.3 bcs .99
|
||||
|
||||
>LDYAI MSG.Init.Startup
|
||||
jsr S.SysScrPPSTR
|
||||
jsr S.SysScrPPSTRYA
|
||||
|
||||
>PUSHWI STARTUP.FILE Build A2osX.STARTUP full path...
|
||||
jsr S.NewPStr
|
||||
>LDYAI STARTUP.FILE Build A2osX.STARTUP full path...
|
||||
jsr S.NewPStrYA
|
||||
pha save for discard
|
||||
|
||||
>PUSHA
|
||||
>PUSHWI ENV.A2osX get KRNL root path
|
||||
ldy #S.PS.hENV
|
||||
lda TSKMGR.TABLE,y
|
||||
lda TskMgr.Table,y
|
||||
>PUSHA
|
||||
jsr S.GetEnvVarP
|
||||
pha save for discard
|
||||
@ -200,7 +209,8 @@ S.KernelInit >LDYAI D.STACKSEG
|
||||
|
||||
jsr S.ExecFileA
|
||||
jsr S.SysScrPRCode
|
||||
|
||||
bcs *
|
||||
|
||||
pla
|
||||
jsr S.FreeMemA
|
||||
pla
|
||||
@ -209,11 +219,14 @@ S.KernelInit >LDYAI D.STACKSEG
|
||||
jsr S.FreeMemA
|
||||
|
||||
>LDYAI MSG.Init.SysEnv
|
||||
jsr S.SysScrPPSTR
|
||||
jsr S.SysScrPPSTRYA
|
||||
|
||||
jsr S.PrintSysEnv
|
||||
|
||||
.99 rts
|
||||
.99 bcs *
|
||||
|
||||
>LDYAI MSG.Init.OK
|
||||
jsr S.SysScrPPSTRYA
|
||||
*--------------------------------------
|
||||
S.KernelRun jsr S.TskMgrRun
|
||||
bcs .98
|
||||
@ -225,22 +238,22 @@ S.KernelRun jsr S.TskMgrRun
|
||||
jsr S.DispatchEvent
|
||||
bcc S.KernelRun CC=Event Dispatched
|
||||
|
||||
lda (EVTMGR.EVTPTR)
|
||||
lda (pEvent)
|
||||
and #S.EVT.F.TIMER Discard any TIMER event
|
||||
beq .1
|
||||
jsr S.DestroyEvent
|
||||
bra S.KernelRun
|
||||
|
||||
.1 lda (EVTMGR.EVTPTR)
|
||||
.1 lda (pEvent)
|
||||
and #S.EVT.F.KEY any special key?
|
||||
beq .99
|
||||
|
||||
ldy #S.EVT.DATAHI Open-Apple?
|
||||
lda (EVTMGR.EVTPTR),y
|
||||
lda (pEvent),y
|
||||
bpl .99
|
||||
|
||||
ldy #S.EVT.DATALO
|
||||
lda (EVTMGR.EVTPTR),y
|
||||
lda (pEvent),y
|
||||
|
||||
cmp #$31
|
||||
bne .2
|
||||
@ -258,52 +271,24 @@ S.KernelRun jsr S.TskMgrRun
|
||||
bne .8
|
||||
lda #A2osX.SCREENS.G
|
||||
jsr S.ScreenSelectA
|
||||
|
||||
.8 jsr S.DestroyEvent
|
||||
bra S.KernelRun
|
||||
|
||||
.98 lda #A2osX.SCREENS.S
|
||||
jsr S.ScreenSelectA
|
||||
>LDYAI MSG.KRNLPANIC
|
||||
jsr S.SysScrPPSTR
|
||||
jsr S.SysScrPPSTRYA
|
||||
bra *
|
||||
|
||||
.99 >LDYAI MSG.EVNTPANIC
|
||||
jsr S.SysScrPPSTR
|
||||
lda (EVTMGR.EVTPTR)
|
||||
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.SysScrPPSTRYA
|
||||
jsr S.DumpEvent
|
||||
|
||||
jsr S.DestroyEvent
|
||||
jmp S.KernelRun
|
||||
*--------------------------------------
|
||||
S.KernelQuit clc
|
||||
rts
|
||||
S.KernelQuit bra *
|
||||
*--------------------------------------
|
||||
* PUBLIC
|
||||
*--------------------------------------
|
||||
@ -311,38 +296,44 @@ S.KernelQuit clc
|
||||
* in :
|
||||
* A = hMem of FilePath (PSTRING)
|
||||
* 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
|
||||
bcc S.ExecFileAOK
|
||||
rts
|
||||
S.ExecFileAOK >ADDLOCAL 8
|
||||
>STYAL 4 Store File Length
|
||||
|
||||
S.ExecFileAOK >STYA S.ExecFileA.DataLen
|
||||
stx S.ExecFileA.hData
|
||||
txa
|
||||
>STAL 0 hMem of Loaded File
|
||||
jsr S.GetMemPtrA
|
||||
>STYAL 2
|
||||
>STYA S.ExecFileA.DataPtr
|
||||
|
||||
.1 stz TmpBuffer256
|
||||
.2 >LDYAL 2
|
||||
|
||||
.2 >LDYA S.ExecFileA.DataPtr
|
||||
>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)
|
||||
cmp #$0D
|
||||
beq .3
|
||||
inc TmpBuffer256
|
||||
ldx TmpBuffer256
|
||||
sta TmpBuffer256,x
|
||||
>LDAL 4
|
||||
|
||||
lda S.ExecFileA.DataLen
|
||||
bne .2
|
||||
>LDAL 5
|
||||
lda S.ExecFileA.DataLen+1
|
||||
bne .2
|
||||
|
||||
.3 lda TmpBuffer256
|
||||
beq .4
|
||||
lda TmpBuffer256+1
|
||||
@ -353,83 +344,78 @@ S.ExecFileAOK >ADDLOCAL 8
|
||||
lda #'>'
|
||||
jsr S.SysScrCOUTA
|
||||
>LDYAI TmpBuffer256
|
||||
jsr S.SysScrPPSTR
|
||||
>PUSHWI TmpBuffer256
|
||||
jsr S.NewPStr
|
||||
jsr S.SysScrPPSTRYA
|
||||
>LDYAI TmpBuffer256
|
||||
jsr S.NewPStrYA
|
||||
bcs .99
|
||||
|
||||
pha
|
||||
jsr S.ExecCmdLineA
|
||||
jsr S.SysScrPRCode
|
||||
pla
|
||||
jsr S.FreeMemA
|
||||
.4 >LDAL 4
|
||||
.5 bne .6
|
||||
>LDAL 5
|
||||
beq .8
|
||||
.6 jmp .1
|
||||
.8 jsr .99
|
||||
|
||||
.4 lda S.ExecFileA.DataLen
|
||||
bne .1
|
||||
lda S.ExecFileA.DataLen+1
|
||||
bne .1
|
||||
|
||||
jsr .99
|
||||
clc
|
||||
rts
|
||||
.99 >LDAL 0
|
||||
|
||||
.99 lda S.ExecFileA.hData
|
||||
jsr S.FreeMemA
|
||||
>REMLOCAL 8
|
||||
sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.ExecCmdLineA >PUSHA
|
||||
S.ExecCmdLineA >PUSHA Push Cmd Line
|
||||
>PUSHBI $20 Push SEP=' '
|
||||
>PUSHBI 0 Push Token IDX
|
||||
jsr S.PStrGetTkn
|
||||
bcs .99
|
||||
>STAL 6
|
||||
pha
|
||||
txa
|
||||
>STAL 7
|
||||
pla
|
||||
|
||||
sta S.ExecFileA.hCMD
|
||||
stx S.ExecFileA.hARGS
|
||||
jsr S.GetMemPtrA
|
||||
>PUSHYA
|
||||
>PUSHWI EXECCMDS
|
||||
jsr S.GetPStrIndex
|
||||
bcs .98
|
||||
|
||||
asl
|
||||
tax
|
||||
>LDAL 7
|
||||
lda S.ExecFileA.hARGS
|
||||
jsr S.ExecCmdLine
|
||||
bcs .98
|
||||
|
||||
jsr .98
|
||||
clc
|
||||
rts
|
||||
|
||||
.98 pha
|
||||
>LDAL 7
|
||||
lda S.ExecFileA.hARGS
|
||||
jsr S.FreeMemA
|
||||
>LDAL 6
|
||||
lda S.ExecFileA.hCMD
|
||||
jsr S.FreeMemA
|
||||
pla
|
||||
.99 sec
|
||||
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)
|
||||
.1 .DA S.SetSysEnvA
|
||||
.DA S.LoadDrvA VCPU!!!!
|
||||
.DA S.CreateProcessA VCPU!!!!
|
||||
*--------------------------------------
|
||||
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.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
|
||||
pDevJmp jmp (pDev)
|
||||
pCodeJmp jmp (pCode)
|
||||
pLibJmp jmp (pLib)
|
||||
*--------------------------------------
|
||||
EXECCMDS >PSTRING "SET"
|
||||
EXECCMDS1 >PSTRING "LOAD"
|
||||
@ -443,6 +429,8 @@ MSG.Init.DevMgr >PSTRING "->DevMgr Init"
|
||||
MSG.Init.EvtMgr >PSTRING "->EvtMgr Init"
|
||||
MSG.Init.Startup >PSTRING "EXEC A2osX.Startup...\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.KRNLPANIC >PSTRING "\n\n!!!Kernel Panic!!!"
|
||||
*--------------------------------------
|
||||
@ -454,25 +442,21 @@ ENV.DRV >PSTRING "DRV"
|
||||
ENV.ETC >PSTRING "ETC"
|
||||
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.MLI
|
||||
.INB SYS/KERNEL.S.NET
|
||||
* .INB SYS/KERNEL.S.RDR
|
||||
.INB SYS/KERNEL.S.SCR
|
||||
.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.EVT
|
||||
*--------------------------------------
|
||||
KERNEL.End .EQ *
|
||||
Kernel.Size .EQ KERNEL.End-KERNEL.Start
|
||||
*--------------------------------------
|
||||
.DO Kernel.Size>$1FFA
|
||||
ERROR:KERNEL.SIZE too big
|
||||
.FIN
|
||||
.INB SYS/KERNEL.S.DEV
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE SYS/KERNEL.S
|
||||
|
@ -1,12 +1,12 @@
|
||||
PR#3
|
||||
PREFIX /A2OSX.BUILD
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
.OR $2000
|
||||
.TF SYS/KM.NSC
|
||||
.TF /A2OSX.BOOT/SYS/KM.NSC
|
||||
*--------------------------------------
|
||||
.INB INC/MACROS.I
|
||||
.INB INC/IO.I
|
||||
|
@ -1,12 +1,12 @@
|
||||
PR#3
|
||||
PREFIX /A2OSX.BUILD
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
.OR $2000
|
||||
.TF SYS/KM.RAMWORKS
|
||||
.TF /A2OSX.BOOT/SYS/KM.RAMWORKS
|
||||
*--------------------------------------
|
||||
.INB INC/MACROS.I
|
||||
.INB INC/IO.I
|
||||
@ -166,7 +166,7 @@ RW.Install lda RRAMWRAMBNK1
|
||||
|
||||
inc 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
|
||||
|
||||
lda #RWDRV.START
|
||||
@ -276,7 +276,8 @@ RW.Format jsr RW.BLOCK.SET00
|
||||
cmp #4 Are we writing first volume bitmap ?
|
||||
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
|
||||
|
||||
ldy #0
|
||||
@ -371,9 +372,13 @@ RW.MSG.KO3 >CSTRING "RamWorks Drive Format Error."
|
||||
* Driver for Ramworks in main LC
|
||||
* $FF00 -> $FF9A (Inclusive)
|
||||
* $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
|
||||
* 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.BUFF .EQ $44
|
||||
DRV.BLKNUM .EQ $46
|
||||
@ -389,14 +394,13 @@ RWDRV.START cld ProDOS will check that byte!!!
|
||||
bcs RWDRV.IOERR > 3 = Invalid OP, IO error
|
||||
|
||||
lda DRV.BLKNUM
|
||||
sec
|
||||
sbc RWDRV.MAXLO+1
|
||||
sbc RWDRV.MAXLO+1 Carry is Clear
|
||||
lda DRV.BLKNUM+1
|
||||
sbc RWDRV.MAXHI+1
|
||||
bcs RWDRV.IOERR DRV.BLKNUM >= RW.DRV.SIZE, IO error
|
||||
|
||||
lda DRV.BLKNUM compute PAGE = blocknumLO *2
|
||||
asl
|
||||
lda DRV.BLKNUM Get Back DRV.BLKNUM
|
||||
asl compute PAGE = blocknumLO *2
|
||||
pha
|
||||
lda DRV.BLKNUM+1 compute BANK = blocknumHI *2
|
||||
rol
|
||||
@ -408,50 +412,54 @@ RWDRV.START cld ProDOS will check that byte!!!
|
||||
*--------------------------------------
|
||||
* X=Page($02 -> $BF),A=Bank,Y=CMD
|
||||
*--------------------------------------
|
||||
php
|
||||
* php
|
||||
sei Disable IRQ as no vector set in RW Banks
|
||||
sta RWBankSelect Select RAMWorks Bank
|
||||
sta CLR80STORE make sure SETREADAUX/SETWRITEAUX effective everywhere
|
||||
|
||||
stx DRV.COMMAND+1 Reuse DRV.COMMAND for RAM PTR
|
||||
stz DRV.COMMAND
|
||||
inx second 256 bytes first
|
||||
stx DRV.A2H Use DRV.A1L/H for RAM PTR
|
||||
stz DRV.A2L
|
||||
|
||||
inc DRV.BUFF+1
|
||||
|
||||
dey Y=CMD, zero if read
|
||||
bne RWDRV.W CC, go write
|
||||
|
||||
bne RWDRV.W non zero, go write
|
||||
|
||||
sta SETREADAUX
|
||||
ldx #DRV.COMMAND READ:copy from RAM to BUFF
|
||||
ldy #DRV.BUFF
|
||||
ldx #DRV.A2L READ:copy from RAM to BUFF
|
||||
lda #DRV.BUFF
|
||||
bra RWDRV.RW
|
||||
|
||||
RWDRV.W sta SETWRITEAUX
|
||||
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
|
||||
sty RWDRV.RW.DST+1
|
||||
sta RWDRV.RW.DST+1
|
||||
|
||||
ldx #2 2 pages to copy
|
||||
|
||||
ldy #0
|
||||
|
||||
RWDRV.RW.SRC lda ($FF),y
|
||||
RWDRV.RW.DST sta ($FF),y
|
||||
iny
|
||||
bne RWDRV.RW.SRC
|
||||
|
||||
|
||||
.HS 24 BIT Zero Page to skip RTS
|
||||
RWDRV.RTS rts $FF58 Must Be RTS
|
||||
|
||||
inc DRV.BUFF+1
|
||||
inc DRV.COMMAND+1
|
||||
dec DRV.BUFF+1
|
||||
dec DRV.A2H
|
||||
dex
|
||||
bne RWDRV.RW.SRC
|
||||
|
||||
stz RWBankSelect
|
||||
sta CLRREADAUX
|
||||
sta CLRWRITEAUX
|
||||
plp
|
||||
* plp
|
||||
cli
|
||||
|
||||
RMDRV.CMDSTATUS
|
||||
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
|
||||
BLOAD A
|
||||
INC 1
|
||||
AUTO 6
|
||||
PREFIX /A2OSX.BOOT
|
||||
DELETE A2OSX.SYSTEM
|
||||
BLOAD A
|
||||
BSAVE A2OSX.SYSTEM,TSYS,A$2000,L$1300
|
||||
-A2OSX.SYSTEM
|
||||
MAN
|
||||
TEXT MSYS
|
||||
|
Loading…
Reference in New Issue
Block a user