Complete Rewrite #3 : many new bugs...

This commit is contained in:
Rémy GIBERT 2015-06-03 20:30:57 +02:00
parent df462f180a
commit 11591911b9
72 changed files with 4505 additions and 3457 deletions

Binary file not shown.

Binary file not shown.

BIN
A2OSX.SRC.po Normal file

Binary file not shown.

View File

@ -1,5 +1,5 @@
PR#3 PR#3
PREFIX /A2OSX.BUILD PREFIX /A2OSX.SRC
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6
@ -12,36 +12,16 @@ A2osX.GP.B.start
.PH $BE00 .PH $BE00
*-------------------------------------- *--------------------------------------
A2osX.GP.Start bra A2osX.SYSCALL1 A2osX.GP.Start bra A2osX.SYSCALL1
bra A2osX.MLICALL1
bra A2osX.LIBCALL1 bra A2osX.LIBCALL1
bra A2osX.SLEEP1 bra A2osX.SLEEP1
bra Kernel.MLICALL1 bra A2osX.MLICALL1
bra Kernel.DRVCALL1
bra Kernel.BINCALL1
bra Kernel.LIBCALL1
.BS A2osX.GPCODE-*
*-------------------------------------- *--------------------------------------
* A2osX.SYSCALL (MAINLC to AUXLC) * A2osX.SYSCALL (MAINLC to AUXLC)
* In: * In:
* X = SYSfnc.Index * X = SYSfnc.Index
* Y,A = free for Inline param * Y,A = free for Inline param
*-------------------------------------- *--------------------------------------
A2osX.SYSCALL1 jsr GO.AUXLC A2osX.SYSCALL1 jmp KERNEL.SYSCALL
jsr $E003
jsr GO.MAINLC
rts
*--------------------------------------
* A2osX.MLICALL (MAINLC to MAINLC)
* In:
* X = MLI Function
* A = Param Count
*--------------------------------------
A2osX.MLICALL1 stx .1
sta MLICALL.PARAMS
jsr MLI
.1 .BS 1
.DA MLICALL.PARAMS
rts
*-------------------------------------- *--------------------------------------
* LIBCALL (MAINLC to MAINLC) * LIBCALL (MAINLC to MAINLC)
* In: * In:
@ -58,49 +38,41 @@ A2osX.LIBCALL1 pha
pla pla
.1 jmp $FFFF .1 jmp $FFFF
*-------------------------------------- *--------------------------------------
A2osX.SLEEP1 jmp A2osX.SLEEP2
*--------------------------------------
* SLEEP (MAINLC to AUXLC) * SLEEP (MAINLC to AUXLC)
* In: * In:
*-------------------------------------- *--------------------------------------
A2osX.SLEEP1 ldy #S.PS.hCS
lda (pPs),y
>SYSCALL SYS.GetMemPtrA
>STYA A2osX.SaveCS
ldy #S.PS.PC
pla get PC LO
plx get PC HI
inc Advance PC one Byte
bne .1
inx
.1 sec
sbc A2osX.SaveCS
sta (pPs),y
iny
txa
sbc A2osX.SaveCS+1
sta (pPs),y
clc No error,
rts back to Kernel
*--------------------------------------
* Kernel.MLICALL (AUXLC to MAINLC) * Kernel.MLICALL (AUXLC to MAINLC)
* In: * In:
* X = MLI Function * X = MLI Function
* A = Param Count * A = Param Count
*-------------------------------------- *--------------------------------------
Kernel.MLICALL1 jsr GO.MAINLC A2osX.MLICALL1 jsr GO.MAINLC
jsr A2osX.MLICALL1 stx .1
jsr GO.AUXLC sta MLICALL.PARAMS
rts jsr MLI
*-------------------------------------- .1 .BS 1
* Kernel.DRVCALL (AUXLC to MAINLC) .DA MLICALL.PARAMS
* In:
* X = DRV Function Index
* Y,A = pDevContext
*--------------------------------------
Kernel.DRVCALL1 jsr GO.MAINLC
>STYA pDevContext
jsr GO.Kernel
jsr GO.AUXLC
rts
*--------------------------------------
* Kernel.BINCALL (AUXLC to MAINLC)
* In:
* X = BIN Function Index
* Y,A = pPsContext
*--------------------------------------
Kernel.BINCALL1 jsr GO.MAINLC
>STYA pPsContext
jsr GO.Kernel
jsr GO.AUXLC
rts
*--------------------------------------
* Kernel.LIBCALL (AUXLC to MAINLC)
* In:
* X = Lib Function Index
*--------------------------------------
Kernel.LIBCALL1 jsr GO.MAINLC
jsr GO.Kernel
jsr GO.AUXLC jsr GO.AUXLC
rts rts
*-------------------------------------- *--------------------------------------
@ -123,28 +95,27 @@ GO.SAVE.REG sta A2osX.SaveA
.1 stx GO.EXIT.JMP+1 .1 stx GO.EXIT.JMP+1
sty GO.EXIT.JMP+2 sty GO.EXIT.JMP+2
sei sei
ldy R.SP ldy pStack
bcs GO.AUXLC1 bcs GO.AUXLC1
GO.MAINLC1 tsx GO.MAINLC1 tsx
stx A2osX.SaveSX stx A2osX.SaveSX
stx CLRALTZP
ldx RROMBNK2
ldx A2osX.SaveSM ldx A2osX.SaveSM
txs txs
sty R.SP stx CLRALTZP
ldx RROMBNK1
bra GO.EXIT bra GO.EXIT
*-------------------------------------- *--------------------------------------
GO.AUXLC1 tsx GO.AUXLC1 stx SETALTZP
tsx
stx A2osX.SaveSM stx A2osX.SaveSM
stx SETALTZP
ldx RRAMWRAMBNK1
ldx RRAMWRAMBNK1
ldx A2osX.SaveSX ldx A2osX.SaveSX
txs txs
sty R.SP ldx RRAMWRAMBNK1
ldx RRAMWRAMBNK1
*-------------------------------------- *--------------------------------------
GO.EXIT pha push P on stack GO.EXIT sty pStack
pha push P on stack
ldy A2osX.SaveY ldy A2osX.SaveY
ldx A2osX.SaveX ldx A2osX.SaveX
lda A2osX.SaveA lda A2osX.SaveA
@ -152,30 +123,12 @@ GO.EXIT pha push P on stack
GO.EXIT.JMP jmp $FFFF GO.EXIT.JMP jmp $FFFF
*-------------------------------------- *--------------------------------------
GO.Reset jsr GO.AUXLC GO.Reset jsr GO.AUXLC
jsr $E000 jmp KERNEL.COLDBOOT
*-------------------------------------- *--------------------------------------
GO.Kernel jmp (Kernel.JMP) A2osX.SaveCS .BS 2
*-------------------------------------- A2osX.SaveA .BS 1
A2osX.SLEEP2 ldy #S.PS.hCS A2osX.SaveX .BS 1
lda (pPsContext),y A2osX.SaveY .BS 1
>SYSCALL SYS.GetMemPtrA
>STYA Kernel.JMP
ldy #S.PS.PC
pla get PC LO
plx get PC HI
inc Advance PC one Byte
bne .1
inx
.1 sec
sbc Kernel.JMP
sta (pPsContext),y
iny
txa
sbc Kernel.JMP+1
sta (pPsContext),y
clc No error,
rts back to Kernel
*-------------------------------------- *--------------------------------------
A2osX.GP.End .EQ * A2osX.GP.End .EQ *
A2osX.GP.SIZE .EQ A2osX.GP.END-A2osX.GP.START A2osX.GP.SIZE .EQ A2osX.GP.END-A2osX.GP.START

View File

@ -1,5 +1,5 @@
PR#3 PR#3
PREFIX /A2OSX.BUILD PREFIX /A2OSX.SRC
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6
@ -20,10 +20,16 @@ A2osX.QC.B.Start
*-------------------------------------- *--------------------------------------
A2osX.QC.Start .EQ * A2osX.QC.Start .EQ *
A2osX.QC cld A2osX.QC cld
jmp A2osX.QC.init jmp A2osX.QC.Start1
A2osX.QC.Prefix .BS 32
*-------------------------------------- A2osX.QC.Prefix .BS 32
A2osX.QC.init bit RROMBNK1
A2osX.QC.Start1 sei
ldx #$FF
txs
cli
bit RROMBNK1
>LDYAI A2osX.QC >LDYAI A2osX.QC
>STYA POWERUP >STYA POWERUP
jsr SETPWRC jsr SETPWRC
@ -53,11 +59,14 @@ A2osX.QC.init bit RROMBNK1
.DA #MLISETPREFIX .DA #MLISETPREFIX
.DA MLISETPREFIX00 .DA MLISETPREFIX00
bcc .4 bcc .4
>LDAXI MSG.SETPREFIXKO >LDAXI MSG.SETPREFIXKO
jsr A2osX.QC.PrintAX jsr A2osX.QC.PrintAX
>LDAXI A2osX.QC.Prefix >LDAXI A2osX.QC.Prefix
jsr A2osX.QC.PrintAX jsr A2osX.QC.PrintAX
>DEBUG >DEBUG
bra .3 bra .3
.4 >LDAXI MSG.SETPREFIXOK .4 >LDAXI MSG.SETPREFIXOK
@ -69,26 +78,18 @@ A2osX.QC.init bit RROMBNK1
jsr A2osX.QC.KLoad jsr A2osX.QC.KLoad
bcs .9 bcs .9
>LDAXI MSG.KLOADING.OK
jsr A2osX.QC.PrintAX
>LDYAI GO.Reset >LDYAI GO.Reset
>STYA POWERUP >STYA POWERUP
bit RROMBNK1
jsr SETPWRC jsr SETPWRC
php >LDAXI MSG.STAGE1OK
pla jsr A2osX.QC.PrintAX
sei
tsx >DEBUG
stx A2osX.SaveSM
stx SETALTZP jmp (POWERUP)
ldx A2osX.SaveSX
txs
bit RRAMWRAMBNK1
bit RRAMWRAMBNK1
pha
plp
jmp $E000
.9 >LDAXI MSG.KLOADING.KO .9 >LDAXI MSG.KLOADING.KO
jsr A2osX.QC.PrintAX jsr A2osX.QC.PrintAX
bra * bra *
@ -136,11 +137,11 @@ A2osX.QC.KLoad ldx A2osX.QC.Prefix
lda RRAMWRAMBNK1 lda RRAMWRAMBNK1
lda RRAMWRAMBNK1 lda RRAMWRAMBNK1
>LDYAI MLIREAD00.ADDR+$1F00 >LDYAI MLIREAD00.ADDR+$2F00
>STYA TmpPtr1 >STYA TmpPtr1
>LDYAI $E000+$1F00 >LDYAI $D000+$2F00
>STYA TmpPtr2 >STYA TmpPtr2
ldx #$20 ldx #$30
ldy #$F9 do not trash NMI,BRK,IRQ Vectors ldy #$F9 do not trash NMI,BRK,IRQ Vectors
.3 lda (TmpPtr1),y .3 lda (TmpPtr1),y
@ -186,7 +187,7 @@ MLIOPEN00 .DA #3
MLIREAD00 .DA #4 MLIREAD00 .DA #4
.BS 1 .BS 1
.DA MLIREAD00.ADDR .DA MLIREAD00.ADDR
.DA $1FFA .DA $2FFA
.BS 2 .BS 2
MLICLOSE00 .DA #1 MLICLOSE00 .DA #1
.BS 1 .BS 1
@ -197,7 +198,6 @@ MSG.STAGE1 >PSTRING "A2osX[Stage1]:Init"
MSG.SETPREFIXOK >PSTRING "Set Prefix OK" MSG.SETPREFIXOK >PSTRING "Set Prefix OK"
MSG.SETPREFIXKO >PSTRING "Insert Vol:" MSG.SETPREFIXKO >PSTRING "Insert Vol:"
MSG.KLOADING >PSTRING "Loading Kernel..." MSG.KLOADING >PSTRING "Loading Kernel..."
MSG.KLOADING.OK >PSTRING "OK"
MSG.KLOADING.KO >PSTRING "Error While Loading Kernel." MSG.KLOADING.KO >PSTRING "Error While Loading Kernel."
MSG.STAGE1OK >PSTRING "A2osX[Stage1]:Complete." MSG.STAGE1OK >PSTRING "A2osX[Stage1]:Complete."
*-------------------------------------- *--------------------------------------

View File

@ -1,5 +1,5 @@
PR#3 PR#3
PREFIX /A2OSX.BUILD PREFIX /A2OSX.SRC
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6

View File

@ -1,15 +1,17 @@
PR#3 PR#3
PREFIX /A2OSX.BUILD PREFIX /A2OSX.SRC
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6
.LIST OFF .LIST OFF
.OP 65C02 .OP 65C02
.OR $2000 .OR $2000
.TF A .TF /A2OSX.BOOT/A
*-------------------------------------- *--------------------------------------
.INB INC/MACROS.I .INB INC/MACROS.I
.INB INC/A2OSX.I .INB INC/A2OSX.I
.INB INC/A2OSX.API.I
.INB INC/KERNEL.I
.INB INC/IO.I .INB INC/IO.I
.INB INC/MONITOR.I .INB INC/MONITOR.I
.INB INC/PRODOS.I .INB INC/PRODOS.I
@ -27,11 +29,15 @@ A2osX.ReadBuff .EQ $6800 512 Buffer for MLIREAD01
Boot.Prefix .EQ $6A00 MLI.MAXPATH Boot.Prefix .EQ $6A00 MLI.MAXPATH
KM.Filename .EQ $6A80 MLI.MAXPATH KM.Filename .EQ $6A80 MLI.MAXPATH
*-------------------------------------- *--------------------------------------
Z80STACK .EQ $0FFF (0FFFFh) Down to $0F00
Z80JMP .EQ $1000
*--------------------------------------
A2osX.Start .EQ * A2osX.Start .EQ *
.PH A2osX.RelocAddr .PH A2osX.RelocAddr
A2osX.Init0 ldx #$FF init 6502 stack to highest A2osX.Init0
ldx #$FF init 6502 stack to highest
txs txs
stx A2osX.SaveSM
>LDYAI A2osX.Start >LDYAI A2osX.Start
>STYA TmpPtr1 >STYA TmpPtr1
@ -50,16 +56,14 @@ A2osX.Init0 ldx #$FF init 6502 stack to highest
inc TmpPtr2+1 inc TmpPtr2+1
dex dex
bne .1 bne .1
jmp A2osX.Init1 jmp A2osX.Init1
*-------------------------------------- *--------------------------------------
A2osX.Init1 jsr HOME A2osX.Init1 bit RROMBNK1
jsr HOME
>LDAXI MSG.STAGE0 >LDAXI MSG.STAGE0
jsr PrintCStrAX jsr PrintCStrAX
>LDYAI D.STACKSEG
>STYA R.SP init Soft Stack
>LDAXI MSG.SYSMEM >LDAXI MSG.SYSMEM
jsr PrintCStrAX jsr PrintCStrAX
@ -78,7 +82,10 @@ A2osX.Init1 jsr HOME
>LDAXI MSG.CPU >LDAXI MSG.CPU
jsr PrintCStrAX jsr PrintCStrAX
jsr Init6502 Y = CPU type jsr Init6502 Y = CPU type
sty A2osX.CPUTYPE tya
ora #$60
sta A2osX.CPUTYPE
lda MSG.CPUTYPEH,y lda MSG.CPUTYPEH,y
tax tax
lda MSG.CPUTYPEL,y lda MSG.CPUTYPEL,y
@ -110,17 +117,20 @@ A2osX.Prefix >LDAXI MSG.BOOTPREFIX
*-------------------------------------- *--------------------------------------
A2osX.RamDrv >LDAXI MSG.RAMDRV A2osX.RamDrv >LDAXI MSG.RAMDRV
jsr PrintCStrAX jsr PrintCStrAX
jsr DisableRamDRV jsr DisableRamDRV
bcc .2 bcc .2
tax tax
beq .1 bne .1
>LDAXI MSG.RAMDRV.KO1 >LDAXI MSG.RAMDRV.KO0
jsr PrintCStrAX jsr PrintCStrAX
bra A2osX.Z80 bra A2osX.Z80
.1 >LDAXI MSG.RAMDRV.KO0 .1 >LDAXI MSG.RAMDRV.KO1
jsr PrintCStrAX jsr PrintCStrAX
bra A2osX.Z80 bra A2osX.Z80
.2 >LDAXI MSG.RAMDRV.OK .2 >LDAXI MSG.RAMDRV.OK
jsr PrintCStrAX jsr PrintCStrAX
*-------------------------------------- *--------------------------------------
@ -137,8 +147,6 @@ A2osX.Z80 >LDAXI MSG.Z80
.1 >LDAXI MSG.Z80.KO .1 >LDAXI MSG.Z80.KO
jsr PrintCStrAX jsr PrintCStrAX
*-------------------------------------- *--------------------------------------
* WARNING :
*--------------------------------------
A2osX.SetupQC lda RRAMWRAMBNK2 A2osX.SetupQC lda RRAMWRAMBNK2
lda RRAMWRAMBNK2 lda RRAMWRAMBNK2
@ -162,7 +170,7 @@ A2osX.MLIQuit >LDAXI MSG.STAGE0OK
jsr PrintCStrAX jsr PrintCStrAX
>DEBUG >DEBUG
jsr MLI jsr MLI
.DA #MLIQUIT .DA #MLIQUIT
.DA MLIQUIT01 .DA MLIQUIT01
@ -213,24 +221,30 @@ DisableRamDRV php
beq .9 S3D2=NODEV, nothing to do beq .9 S3D2=NODEV, nothing to do
.1 ldx DEVCNT .1 ldx DEVCNT
.2 lda DEVLST,x LOOKING FOR $BF, $BB, $B7, $B3 .2 lda DEVLST,x LOOKING FOR $BF, $BB, $B7, $B3
and #$F3 and #$F3
cmp #$B3 cmp #$B3
beq .3 beq .3
dex dex
bpl .2 bpl .2
plp plp
lda #1 No device found, exit with error lda #1 No device found, exit with error
sec sec
rts rts
.3 ldx #0 .3 cpx DEVCNT
beq .5
.4 lda DEVLST+1,x .4 lda DEVLST+1,x
sta DEVLST,x sta DEVLST,x
inx inx
cpx DEVCNT cpx DEVCNT
bne .4 bne .4
.5 ldx DEVCNT
stz DEVLST,x stz DEVLST,x
dec DEVCNT dec DEVCNT
@ -239,6 +253,10 @@ DisableRamDRV php
lda DEVPTRS0D1+1 lda DEVPTRS0D1+1
sta DEVPTRS3D2+1 sta DEVPTRS3D2+1
plp plp
jsr MLI
.DA #MLIONLINE
.DA MLIONLINE01
clc Success!! clc Success!!
rts rts
@ -247,7 +265,10 @@ DisableRamDRV php
sec sec
rts rts
*-------------------------------------- *--------------------------------------
InitZ80 ldx #Z80Code.Size InitZ80 sec
rts
ldx #Z80Code.Size
.1 lda Z80Code.Start-1,x .1 lda Z80Code.Start-1,x
sta $1000-1,x 00000H for Z80 sta $1000-1,x 00000H for Z80
dex dex
@ -435,7 +456,7 @@ MSG.Z80 >CSTRING "Detecting Z80 CPU..."
MSG.Z80.OK >CSTRING "Detected In Slot %d.\n" MSG.Z80.OK >CSTRING "Detected In Slot %d.\n"
MSG.Z80.KO >CSTRING "Not Detected.\n" MSG.Z80.KO >CSTRING "Not Detected.\n"
MSG.KMENUM >CSTRING "Looking For Kernel Modules...\n" MSG.KMENUM >CSTRING "Looking For Kernel Modules...\n"
MSG.KMLOAD >CSTRING "Loading KM : " MSG.KMLOAD >CSTRING "\nLoading KM : "
MSG.STAGE0OK >CSTRING "A2osX[Stage0]:Complete.\n" MSG.STAGE0OK >CSTRING "A2osX[Stage0]:Complete.\n"
MSG.CPUTYPEL .DA #MSG.6502 MSG.CPUTYPEL .DA #MSG.6502
.DA #MSG.65C02 .DA #MSG.65C02
@ -452,6 +473,10 @@ MSG.65C816 >CSTRING "65C816.\n"
*-------------------------------------- *--------------------------------------
MLIGETPREFIX01 .DA #1 MLIGETPREFIX01 .DA #1
.DA Boot.Prefix .DA Boot.Prefix
MLIONLINE01 .DA #2
.DA #0
.DA MLIONLINE01BUF
MLIONLINE01BUF .BS 256
MLIOPEN01 .DA #3 For DIR listing MLIOPEN01 .DA #3 For DIR listing
.DA Boot.Prefix .DA Boot.Prefix
.DA A2osX.OpenBuff1 .DA A2osX.OpenBuff1

View File

@ -1,5 +1,5 @@
PR#3 PR#3
PREFIX /A2OSX.BUILD PREFIX /A2OSX.BOOT
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6
@ -8,15 +8,16 @@ SET DRV=%A2OSX%DRV/
SET ETC=%A2OSX%ETC/ SET ETC=%A2OSX%ETC/
SET LIB=%A2OSX%LIB/ SET LIB=%A2OSX%LIB/
LOAD CONSOLE.DRV LOAD CONSOLE.DRV
EXEC GETTY KBD CON SHELL EXEC GETTY KBD CON LOGIN
*LOAD SSC.DRV 9600 N 8 1 *LOAD SSC.DRV 9600 N 8 1 X
*EXEC GETTY COM2 COM2 SHELL *EXEC GETTY COM2 COM2 LOGIN
*LOAD PPIC.DRV *LOAD PPIC.DRV
LOAD UTHERNET.DRV 000E3A123456 LOAD UTHERNET.DRV 000E3A123456
EXEC TCPIP ETH3 EXEC TCPIP ETH3
EXEC DHCPCLNT EXEC DHCPCLNT
*EXEC TELNETD *EXEC TELNETD
*MOUNT TFTP 192.168.1.5:/AO2SX /TFTP *MOUNT TFTP 192.168.1.5:/AO2SX /MNT/A2OSX
*MOUNT CIFS 192.168.1.5:/MSSHARE /MNT/MSSHARE
LOAD DHGR.DRV LOAD DHGR.DRV
LOAD MOUSE.DRV LOAD MOUSE.DRV
EXEC GUI EXEC GUI

View File

@ -1,15 +1,16 @@
PR#3 PR#3
PREFIX /A2OSX.BUILD PREFIX /A2OSX.SRC
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6
.LIST OFF .LIST OFF
.OP 65C02 .OP 65C02
.OR $2000 .OR $2000
.TF BIN/ARP .TF /A2OSX.BOOT/BIN/ARP
*-------------------------------------- *--------------------------------------
.INB INC/MACROS.I .INB INC/MACROS.I
.INB INC/A2OSX.I .INB INC/A2OSX.I
.INB INC/A2OSX.API.I
.INB INC/KERNEL.I .INB INC/KERNEL.I
.INB INC/LIBSTR.I .INB INC/LIBSTR.I
.INB INC/LIBTCPIP.I .INB INC/LIBTCPIP.I
@ -18,20 +19,23 @@ ARP.TIMEOUT .EQ 50 50*100ms = 5 sec.
*-------------------------------------- *--------------------------------------
ZPPTR1 .EQ ZPBIN ZPPTR1 .EQ ZPBIN
*-------------------------------------- *--------------------------------------
* Main entry point * File Header (16 Bytes)
*--------------------------------------
* Code signature and INIT table
*--------------------------------------
* CLD $D8
* JMP (*,x) $7C
* #JMPTABLE
* /JMPTABLE
*-------------------------------------- *--------------------------------------
CS.START cld CS.START cld
jmp (.1,x) jmp (.1,x)
.DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1
.DA 0
.DA CS.END-CS.START
.DA DS.END-DS.START Data Segment to Allocate
.DA 0
.DA 0
*--------------------------------------
* Relocation Table
*--------------------------------------
.1 .DA CS.INIT .1 .DA CS.INIT
.DA CS.RUN .DA CS.RUN
.DA CS.EVENT .DA CS.DOEVENT
.DA CS.QUIT .DA CS.QUIT
L.LIBSTR .DA LIBSTR L.LIBSTR .DA LIBSTR
L.LIBTCPIP .DA LIBTCPIP L.LIBTCPIP .DA LIBTCPIP
@ -42,17 +46,17 @@ L.MSG0 .DA MSG0
L.MSG1 .DA MSG1 L.MSG1 .DA MSG1
L.MSG2 .DA MSG2 L.MSG2 .DA MSG2
.DA 0 .DA 0
.DA CS.END-CS.START Code Length To Relocate
.DA DS.END-DS.START Data Segment to Allocate
*-------------------------------------- *--------------------------------------
CS.INIT >LIBLOADP L.LIBSTR CS.INIT >LDYA L.LIBSTR
>LOADLIBYA
sta hLIBSTR sta hLIBSTR
>LIBLOADP L.LIBTCPIP >LDYA L.LIBTCPIP
>LOADLIBYA
sta hLIBTCPIP sta hLIBTCPIP
ldy #S.PS.hARGS ldy #S.PS.hARGS
lda (pPsContext),y lda (pPs),y
beq CS.INIT.CACHE beq CS.INIT.CACHE
pha pha
@ -66,9 +70,9 @@ CS.INIT >LIBLOADP L.LIBSTR
stz bCTRLC stz bCTRLC
lda (pPsContext) lda (pPs)
ora #S.PS.F.EVENT Now accept events ora #S.PS.F.EVENT Now accept events
sta (pPsContext) sta (pPs)
rts CC,Give back control to CS.RUN rts CC,Give back control to CS.RUN
@ -152,8 +156,7 @@ CS.RUN lda #ARP.TIMEOUT
.9 sec .9 sec
rts rts
*-------------------------------------- *--------------------------------------
CS.EVENT >PULLW pEvent CS.DOEVENT lda (pEvent)
lda (pEvent)
and #S.EVT.F.TIMER is it a TIMER event? and #S.EVT.F.TIMER is it a TIMER event?
beq .1 no.... beq .1 no....
@ -170,7 +173,7 @@ CS.EVENT >PULLW pEvent
ldy #S.EVT.hDEV is Event from active IN device? ldy #S.EVT.hDEV is Event from active IN device?
lda (pEvent),y lda (pEvent),y
ldy #S.PS.hINDEV ldy #S.PS.hINDEV
cmp (pPsContext),y cmp (pPs),y
bne .9 bne .9
ldy #S.EVT.DATAHI is it an O or SAPPLE key ? ldy #S.EVT.DATAHI is it an O or SAPPLE key ?

View File

@ -1,5 +1,5 @@
PR#3 PR#3
PREFIX /A2OSX.BUILD PREFIX /A2OSX.SRC
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6

View File

@ -1,5 +1,5 @@
PR#3 PR#3
PREFIX /A2OSX.BUILD PREFIX /A2OSX.SRC
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6

View File

@ -1,5 +1,5 @@
PR#3 PR#3
PREFIX /A2OSX.BUILD PREFIX /A2OSX.SRC
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6

View File

@ -1,33 +1,37 @@
PR#3 PR#3
PREFIX /A2OSX.BUILD PREFIX /A2OSX.SRC
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6
.LIST OFF .LIST OFF
.OP 65C02 .OP 65C02
.OR $2000 .OR $2000
.TF BIN/LS .TF /A2OSX.BOOT/BIN/LS
*-------------------------------------- *--------------------------------------
.INB INC/MACROS.I .INB INC/MACROS.I
.INB INC/A2OSX.I .INB INC/A2OSX.I
.INB INC/A2OSX.API.I
.INB INC/LIBSTR.I .INB INC/LIBSTR.I
*-------------------------------------- *--------------------------------------
* Main entry point * File Header (16 Bytes)
*--------------------------------------
* Code signature and INIT table
*--------------------------------------
* CLD $D8
* JMP (*,x) $7C
* #JMPTABLE
* /JMPTABLE
*-------------------------------------- *--------------------------------------
CS.START cld CS.START cld
jmp (.1,x) jmp (.1,x)
.DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1
.DA 0
.DA CS.END-CS.START Code Length To Relocate
.DA DS.END-DS.START Data Segment to Allocate
.DA 0
.DA 0
*--------------------------------------
* Relocation Table
*--------------------------------------
.1 .DA CS.INIT .1 .DA CS.INIT
.DA CS.RUN .DA CS.RUN
.DA CS.DOEVENT .DA CS.DOEVENT
.DA CS.QUIT .DA CS.QUIT
L.LIB.LIBSTR .DA LIB.LIBSTR L.LIBSTR .DA LIBSTR
L.MSG.VOL.HEADER .DA MSG.VOL.HEADER L.MSG.VOL.HEADER .DA MSG.VOL.HEADER
L.MSG.DIR.HEADER .DA MSG.DIR.HEADER L.MSG.DIR.HEADER .DA MSG.DIR.HEADER
L.MSG.VOL .DA MSG.VOL L.MSG.VOL .DA MSG.VOL
@ -37,21 +41,21 @@ L.MSG.VOL.END .DA MSG.VOL.END
L.MSG.DIR.END .DA MSG.DIR.END L.MSG.DIR.END .DA MSG.DIR.END
L.PRODOS.FT.TXT .DA PRODOS.FT.TXT L.PRODOS.FT.TXT .DA PRODOS.FT.TXT
.DA 0 .DA 0
.DA CS.END-CS.START Code Length To Relocate
.DA DS.END-DS.START Data Segment to Allocate
*-------------------------------------- *--------------------------------------
CS.INIT >LIBLOADP L.LIB.LIBSTR CS.INIT >LDYA L.LIBSTR
>LOADLIBYA
sta hLIBSTR sta hLIBSTR
stz hDIRPATH
stz hS.LISTDIR lda #0
stz hVOLHEADER ldy #DS.END-DS.START-1
stz hDIRHEADER .11 sta (pData),y
stz bSTOP dey
stz bCANCEL bpl .11
ldy #S.PS.hARGS ldy #S.PS.hARGS
lda (pPsContext),y lda (pPs),y
beq .1 beq .1
>SYSCALL SYS.GetMemPtrA >SYSCALL SYS.GetMemPtrA
>STYA ZPQuickPtr1 >STYA ZPQuickPtr1
lda (ZPQuickPtr1) lda (ZPQuickPtr1)
@ -60,50 +64,52 @@ CS.INIT >LIBLOADP L.LIB.LIBSTR
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
cmp #'/' cmp #'/'
bne .10 bne .10
ldy #S.PS.hARGS ldy #S.PS.hARGS
bra .2 lda (pPs),y
bra .3
.10 ldy #S.PS.hARGS .10 ldy #S.PS.hARGS
lda (pPsContext),y lda (pPs),y
>PUSHA >PUSHA
ldy #S.PS.hPREFIX ldy #S.PS.hPREFIX
lda (pPsContext),y lda (pPs),y
>PUSHA >PUSHA
>SYSCALL SYS.PStrCat >SYSCALL SYS.PStrCat
sta hDIRPATH sta hDIRPATH
bra .3 bra .3
.1 ldy #S.PS.hPREFIX .1 ldy #S.PS.hPREFIX
.2 lda (pPsContext),y lda (pPs),y
.3 >SYSCALL SYS.ListDirInitA .3 >SYSCALL SYS.ListDirInitA
bcs .98 bcs .9
sta hS.LISTDIR ldy #hS.LISTDIR
sta (pData),y
lda (pPsContext) lda (pPs)
ora #S.PS.F.EVENT Now accept events ora #S.PS.F.EVENT Now accept events
sta (pPsContext) sta (pPs)
clc clc
rts rts
.98 pha .9 sec
lda hLIBSTR
>SYSCALL SYS.FreeMemA
pla
sec
rts rts
*-------------------------------------- *--------------------------------------
CS.RUN lda bCANCEL CS.RUN ldy #bCANCEL
lda (pData),y
beq .1 beq .1
sec sec
rts rts
.1 lda bSTOP .1 ldy #bSTOP
lda (pData),y
beq .2 beq .2
clc clc
rts rts
.2 lda hS.LISTDIR .2 ldy #hS.LISTDIR
lda (pData),y
>SYSCALL SYS.ListDirNextA >SYSCALL SYS.ListDirNextA
bcc .3 bcc .3
@ -124,7 +130,8 @@ CS.RUN lda bCANCEL
bne .31 bne .31
pla pla
sta hVOLHEADER ldy #hVOLHEADER
sta (pData),y
>PUSHW ZPQuickPtr1 >PUSHW ZPQuickPtr1
>PUSHW L.MSG.VOL.HEADER >PUSHW L.MSG.VOL.HEADER
>LIBCALL hLIBSTR,LIBSTR.PRINTF >LIBCALL hLIBSTR,LIBSTR.PRINTF
@ -135,8 +142,9 @@ CS.RUN lda bCANCEL
bne .4 bne .4
pla pla
sta hDIRHEADER ldy #hDIRHEADER
sta (pData),y
>PUSHW ZPQuickPtr1 >PUSHW ZPQuickPtr1
>PUSHW L.MSG.DIR.HEADER >PUSHW L.MSG.DIR.HEADER
>LIBCALL hLIBSTR,LIBSTR.PRINTF >LIBCALL hLIBSTR,LIBSTR.PRINTF
@ -145,6 +153,7 @@ CS.RUN lda bCANCEL
.4 cmp #$D0 Directory ? .4 cmp #$D0 Directory ?
bne .5 bne .5
jsr Push.Dates jsr Push.Dates
jsr Push.Dir jsr Push.Dir
>PUSHW L.MSG.DIR >PUSHW L.MSG.DIR
@ -263,13 +272,14 @@ Push.Dates ldy #$24 get modification time
>PUSHA >PUSHA
rts rts
*-------------------------------------- *--------------------------------------
Push.Footer lda hVOLHEADER Push.Footer ldy #hVOLHEADER
lda (pData),y
beq .20 beq .20
>SYSCALL SYS.GetMemPtrA >SYSCALL SYS.GetMemPtrA
>STYA ZPQuickPtr1 >STYA ZPQuickPtr1
ldy #22 file_count ldy #$22 file_count
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
>PUSHA >PUSHA
dey dey
@ -279,13 +289,14 @@ Push.Footer lda hVOLHEADER
>PUSHW L.MSG.VOL.END >PUSHW L.MSG.VOL.END
>LIBCALL hLIBSTR,LIBSTR.PRINTF >LIBCALL hLIBSTR,LIBSTR.PRINTF
.20 lda hDIRHEADER .20 ldy #hDIRHEADER
lda (pData),y
beq .21 beq .21
>SYSCALL SYS.GetMemPtrA >SYSCALL SYS.GetMemPtrA
>STYA ZPQuickPtr1 >STYA ZPQuickPtr1
ldy #22 file_count ldy #$22 file_count
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
>PUSHA >PUSHA
dey dey
@ -301,47 +312,60 @@ Push.Footer lda hVOLHEADER
CS.DOEVENT ldy #S.EVT.hDEV is Event from active IN device? CS.DOEVENT ldy #S.EVT.hDEV is Event from active IN device?
lda (pEvent),y lda (pEvent),y
ldy #S.PS.hINDEV ldy #S.PS.hINDEV
cmp (pPsContext),y cmp (pPs),y
bne .9 bne .9
lda (pEvent) lda (pEvent)
and #S.EVT.F.KEY is it a KEY event? and #S.EVT.F.KEY is it a KEY event?
beq .9 beq .9
ldy #S.EVT.DATAHI is it an O or SAPPLE key ? ldy #S.EVT.DATAHI is it an O or SAPPLE key ?
lda (pEvent),y lda (pEvent),y
bne .9 bne .9
ldy #S.EVT.DATALO ldy #S.EVT.DATALO
lda (pEvent),y lda (pEvent),y
cmp #$03 Ctrl-C cmp #$03 Ctrl-C
bne .1 bne .1
lda #$FF lda #$FF
sta bCANCEL ldy #bCANCEL
sta (pData),y
bra .8 bra .8
.1 cmp #$13 Ctrl-S .1 cmp #$13 Ctrl-S
bne .8 bne .8
lda bSTOP
ldy #bSTOP
lda (pData),y
eor #$FF eor #$FF
sta bSTOP sta (pData),y
.8 >SYSCALL SYS.DestroyEvent
clc .8 clc
rts rts
.9 sec .9 sec
rts rts
*-------------------------------------- *--------------------------------------
CS.QUIT lda hVOLHEADER CS.QUIT ldy #hVOLHEADER
lda (pData),y
beq .1 beq .1
>SYSCALL SYS.FreeMemA >SYSCALL SYS.FreeMemA
.1 lda hDIRHEADER .1 ldy #hDIRHEADER
lda (pData),y
beq .2 beq .2
>SYSCALL SYS.FreeMemA >SYSCALL SYS.FreeMemA
.2 lda hS.LISTDIR .2 ldy #hS.LISTDIR
lda (pData),y
>SYSCALL SYS.ListDirCloseA >SYSCALL SYS.ListDirCloseA
lda hDIRPATH ldy #hDIRPATH
lda (pData),y
beq .3 beq .3
>SYSCALL SYS.FreeMemA >SYSCALL SYS.FreeMemA
@ -352,7 +376,7 @@ CS.QUIT lda hVOLHEADER
rts rts
*-------------------------------------- *--------------------------------------
CS.END CS.END
LIB.LIBSTR >PSTRING "libstr.o" LIBSTR >PSTRING "libstr.o"
MSG.VOL.HEADER >CSTRING "Volume Listing Of %S\n" MSG.VOL.HEADER >CSTRING "Volume Listing Of %S\n"
MSG.DIR.HEADER >CSTRING "Directory Listing Of %S\n" MSG.DIR.HEADER >CSTRING "Directory Listing Of %S\n"
MSG.VOL >CSTRING "/%S\n" MSG.VOL >CSTRING "/%S\n"
@ -373,9 +397,11 @@ TE2 >PSTRING "ATK"
TFF >PSTRING "SYS" TFF >PSTRING "SYS"
PRODOS.FT.DFLT >PSTRING "$ " PRODOS.FT.DFLT >PSTRING "$ "
HEXDIGIT .AS '0123456789ABCDEF' HEXDIGIT .AS '0123456789ABCDEF'
*--------------------------------------
DS.START
hLIBSTR .BS 1 hLIBSTR .BS 1
*--------------------------------------
.DUMMY
.OR 0
DS.START
hDIRPATH .BS 1 hDIRPATH .BS 1
hS.LISTDIR .BS 1 hS.LISTDIR .BS 1
hVOLHEADER .BS 1 hVOLHEADER .BS 1
@ -383,6 +409,7 @@ hDIRHEADER .BS 1
bSTOP .BS 1 bSTOP .BS 1
bCANCEL .BS 1 bCANCEL .BS 1
DS.END DS.END
.ED
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE BIN/LS.S SAVE BIN/LS.S

View File

@ -1,15 +1,16 @@
PR#3 PR#3
PREFIX /A2OSX.BUILD PREFIX /A2OSX.SRC
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6
.LIST OFF .LIST OFF
.OP 65C02 .OP 65C02
.OR $2000 .OR $2000
.TF BIN/LSDEV .TF /A2OSX.BOOT/BIN/LSDEV
*-------------------------------------- *--------------------------------------
.INB INC/MACROS.I .INB INC/MACROS.I
.INB INC/A2OSX.I .INB INC/A2OSX.I
.INB INC/A2OSX.API.I
.INB INC/KERNEL.I .INB INC/KERNEL.I
.INB INC/LIBSTR.I .INB INC/LIBSTR.I
*-------------------------------------- *--------------------------------------
@ -17,17 +18,20 @@ ZPPTR1 .EQ ZPBIN
ZPPTR2 .EQ ZPBIN+2 ZPPTR2 .EQ ZPBIN+2
ZPPTR3 .EQ ZPBIN+4 ZPPTR3 .EQ ZPBIN+4
*-------------------------------------- *--------------------------------------
* Main entry point * File Header (16 Bytes)
*--------------------------------------
* Code signature and INIT table
*--------------------------------------
* CLD $D8
* JMP (*,x) $7C
* #JMPTABLE
* /JMPTABLE
*-------------------------------------- *--------------------------------------
CS.START cld CS.START cld
jmp (.1,x) jmp (.1,x)
.DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1
.DA 0
.DA CS.END-CS.START Code Length To Relocate
.DA 0 Data Segment to Allocate
.DA 0
.DA 0
*--------------------------------------
* Relocation Table
*--------------------------------------
.1 .DA CS.INIT .1 .DA CS.INIT
.DA CS.RUN .DA CS.RUN
.DA CS.EVENT .DA CS.EVENT
@ -35,46 +39,25 @@ CS.START cld
L.LIBSTR .DA LIBSTR L.LIBSTR .DA LIBSTR
L.MSG0 .DA MSG0 L.MSG0 .DA MSG0
L.MSG1 .DA MSG1 L.MSG1 .DA MSG1
L.MSG2 .DA MSG2
.DA 0 .DA 0
.DA CS.END-CS.START Code Length To Relocate
.DA 0 Data Segment to Allocate
*-------------------------------------- *--------------------------------------
CS.INIT >LIBLOADP L.LIBSTR CS.INIT >LDYA L.LIBSTR
* bcs .9 >LOADLIBYA
bcs .9
sta hLIBSTR sta hLIBSTR
>SYSCALL SYS.GetDevTable >LDYAI DevMgr.Table
>STYA ZPPTR1 >STYA ZPPTR1
stz DEV.COUNT stz DEV.ID
L0 >PUSHW L.MSG0 >PUSHW L.MSG0
>LIBCALL hLIBSTR,LIBSTR.PRINTF >LIBCALL hLIBSTR,LIBSTR.PRINTF
lda #22
sta LINE.COUNT
L1 lda (ZPPTR1)
bmi .1
jmp L41
.1 ldy #S.DEV.hARGS
lda (ZPPTR1),y
beq L10
>SYSCALL SYS.GetMemPtrA
>PUSHYA
bra L11
L10 >PUSHW L.MSG2
L11 ldy #S.DEV.hCMD .1 lda (ZPPTR1)
lda (ZPPTR1),y cmp #$D8
beq L12 bne .8
>SYSCALL SYS.GetMemPtrA
>PUSHYA
bra L13
L12 >PUSHW L.MSG2 lda ZPPTR1
L13 lda ZPPTR1
clc clc
adc #S.DEV.NAME adc #S.DEV.NAME
sta ZPPTR2 sta ZPPTR2
@ -83,35 +66,27 @@ L13 lda ZPPTR1
sta ZPPTR2+1 sta ZPPTR2+1
>PUSHW ZPPTR2 >PUSHW ZPPTR2
ldy #S.DEV.hOWNERPS ldy #S.DEV.F
lda (ZPPTR1),y lda (ZPPTR1),y push flags
>PUSHA Owner PSID
lda (ZPPTR1) push flags
>PUSHA >PUSHA
ldy #S.DEV.ID >PUSHB DEV.ID
lda (ZPPTR1),y
>PUSHA DevID
>PUSHW L.MSG1 >PUSHW L.MSG1
>LIBCALL hLIBSTR,LIBSTR.PRINTF >LIBCALL hLIBSTR,LIBSTR.PRINTF
L4 dec LINE.COUNT
L41 lda ZPPTR1 lda ZPPTR1
clc clc
adc #S.DEV.SIZE adc #S.DEV.SIZE
sta ZPPTR1 sta ZPPTR1
bcc L5 bcc .3
inc ZPPTR1+1 inc ZPPTR1+1
L5 inc DEV.COUNT
lda DEV.COUNT .3 inc DEV.ID
lda DEV.ID
cmp #K.DEV.MAX cmp #K.DEV.MAX
beq L8 bne .1
lda LINE.COUNT
beq L6
jmp L1
L6 >DEBUG
jmp L0
L8 lda #0 tell TSKMGR that all done ok, but .8 lda #0 tell TSKMGR that all done ok, but
sec we do not want to stay in memory .9 sec we do not want to stay in memory
rts rts
*-------------------------------------- *--------------------------------------
CS.RUN CS.RUN
@ -119,21 +94,16 @@ CS.EVENT clc
rts rts
*-------------------------------------- *--------------------------------------
CS.QUIT lda hLIBSTR CS.QUIT lda hLIBSTR
bra *
>SYSCALL SYS.UnloadLibA >SYSCALL SYS.UnloadLibA
clc clc
rts rts
*-------------------------------------- *--------------------------------------
CS.END CS.END
hLIBSTR .BS 1
DEV.COUNT .BS 1
LINE.COUNT .BS 1
LIBSTR >PSTRING "libstr.o" LIBSTR >PSTRING "libstr.o"
MSG0 >CSTRING "hDev Flags PID NAME CMD ARGS\n" MSG0 >CSTRING "ID Flags Name\n"
MSG1 >CSTRING " %03d %b $%h %4S %16S %32S\n" MSG1 >CSTRING "%03d %b %4S\n"
MSG2 >PSTRING "(none)" hLIBSTR .BS 1
DEV.ID .BS 1
MAN MAN
SAVE BIN/LSDEV.S SAVE BIN/LSDEV.S
ASM ASM

View File

@ -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

View File

@ -1,31 +1,38 @@
PR#3 PR#3
PREFIX /A2OSX.BUILD PREFIX /A2OSX.SRC
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6
.LIST OFF .LIST OFF
.OP 65C02 .OP 65C02
.OR $2000 .OR $2000
.TF BIN/MEM .TF /A2OSX.BOOT/BIN/MEM
*-------------------------------------- *--------------------------------------
.INB INC/MACROS.I .INB INC/MACROS.I
.INB INC/KERNEL.I
.INB INC/A2OSX.I .INB INC/A2OSX.I
.INB INC/A2OSX.API.I
.INB INC/LIBSTR.I .INB INC/LIBSTR.I
*-------------------------------------- *--------------------------------------
PAGELEN .EQ 22
*--------------------------------------
ZPPTR1 .EQ ZPBIN ZPPTR1 .EQ ZPBIN
ZPPTR2 .EQ ZPBIN+2 ZPPTR2 .EQ ZPBIN+2
*-------------------------------------- *--------------------------------------
* Main entry point * File Header (16 Bytes)
*--------------------------------------
* Code signature and INIT table
*--------------------------------------
* CLD $D8
* JMP (*,x) $7C
* #JMPTABLE
* /JMPTABLE
*-------------------------------------- *--------------------------------------
CS.START cld CS.START cld
jmp (.1,x) jmp (.1,x)
.DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1
.DA 0
.DA CS.END-CS.START Code Length To Relocate
.DA DS.END-DS.START Data Segment to Allocate
.DA 0
.DA 0
*--------------------------------------
* Relocation Table
*--------------------------------------
.1 .DA CS.INIT .1 .DA CS.INIT
.DA CS.RUN .DA CS.RUN
.DA CS.DOEVENT .DA CS.DOEVENT
@ -38,55 +45,120 @@ L.MSG3 .DA MSG3
L.MSG4 .DA MSG4 L.MSG4 .DA MSG4
L.MSG5 .DA MSG5 L.MSG5 .DA MSG5
L.MSG6 .DA MSG6 L.MSG6 .DA MSG6
L.MSG7 .DA MSG7
.DA 0 .DA 0
.DA CS.END-CS.START Code Length To Relocate
.DA DS.END-DS.START Data Segment to Allocate
*-------------------------------------- *--------------------------------------
CS.INIT >LIBLOADP L.LIBSTR CS.INIT >LDYA L.LIBSTR
>LOADLIBYA
bcs .9 bcs .9
sta hLIBSTR sta hLIBSTR
stz LINE.COUNT lda #0
stz MEM.COUNT ldy #DS.END-DS.START-1
stz USED.COUNT
stz bSTOP
stz bCANCEL
lda (pPsContext) .1 sta (pData),y
dey
bpl .1
ldy #MEM.COUNT Skip SLOT0
lda (pData),y
inc
sta (pData),y
lda (pPs)
ora #S.PS.F.EVENT Now accept events ora #S.PS.F.EVENT Now accept events
sta (pPsContext) sta (pPs)
clc clc
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
CS.RUN lda bCANCEL CS.RUN ldy #bCANCEL
bne .99 lda (pData),y
lda bSTOP bne .9
ldy #bSTOP
lda (pData),y
bne .8 bne .8
lda LINE.COUNT
ldy #LINE.COUNT
lda (pData),y
bne .1 bne .1
>PUSHW L.MSG0 >PUSHW L.MSG0
>LIBCALL hLIBSTR,LIBSTR.PRINTF >LIBCALL hLIBSTR,LIBSTR.PRINTF
.1 lda MEM.COUNT .1 ldy #MEM.COUNT
lda (pData),y
>SYSCALL SYS.GetMemByIDA >SYSCALL SYS.GetMemByIDA
>STYA ZPPTR1 >STYA ZPPTR1
lda (ZPPTR1) lda (ZPPTR1)
bpl .2 bpl .2
inc USED.COUNT
ldy #USED.COUNT
lda (pData),y
inc
sta (pData),y
.2 jsr CS.RUN.PRINTMEM .2 jsr CS.RUN.PRINTMEM
inc MEM.COUNT ldy #MEM.COUNT
lda MEM.COUNT lda (pData),y
cmp MEMMGR.TABLESIZE inc
sta (pData),y
cmp MemMgr.LastSlot
beq .9 beq .9
.8 .8 clc
clc
rts rts
.9 jsr CS.RUN.PRINTEND .9 jsr CS.RUN.PRINTEND
.99 sec sec
rts
*--------------------------------------
CS.DOEVENT ldy #S.EVT.hDEV is Event from active IN device?
lda (pEvent),y
ldy #S.PS.hINDEV
cmp (pPs),y
bne .9
lda (pEvent)
and #S.EVT.F.KEY is it a KEY event?
beq .9
ldy #S.EVT.DATAHI is it an O or SAPPLE key ?
lda (pEvent),y
bne .9
ldy #S.EVT.DATALO
lda (pEvent),y
cmp #$03 Ctrl-C
bne .1
lda #$FF
ldy #bCANCEL
sta (pData),y
bra .8
.1 cmp #$13 Ctrl-S
bne .2
ldy #bSTOP
lda (pData),y
eor #$FF
sta (pData),y
bra .8
.2 ldy #bSTOP
lda #0
sta (pData),y
.8 clc
rts
.9 sec
rts
*--------------------------------------
CS.QUIT lda hLIBSTR
>SYSCALL SYS.UnloadLibA
clc
rts rts
*-------------------------------------- *--------------------------------------
CS.RUN.PRINTMEM ldy #S.MEM.LEN CS.RUN.PRINTMEM ldy #S.MEM.LEN
@ -96,6 +168,7 @@ CS.RUN.PRINTMEM ldy #S.MEM.LEN
lda (ZPPTR1),y lda (ZPPTR1),y
ply ply
>PUSHYA >PUSHYA
ldy #S.MEM.PTR ldy #S.MEM.PTR
lda (ZPPTR1),y lda (ZPPTR1),y
pha pha
@ -103,18 +176,25 @@ CS.RUN.PRINTMEM ldy #S.MEM.LEN
lda (ZPPTR1),y lda (ZPPTR1),y
ply ply
>PUSHYA >PUSHYA
ldy #S.MEM.REFCNT ldy #S.MEM.REFCNT
lda (ZPPTR1),y lda (ZPPTR1),y
>PUSHA >PUSHA
ldy #S.MEM.OWNERPID ldy #S.MEM.OWNERPID
lda (ZPPTR1),y lda (ZPPTR1),y
>PUSHA >PUSHA
lda (ZPPTR1) lda (ZPPTR1)
>PUSHA >PUSHA
lda MEM.COUNT
ldy #MEM.COUNT
lda (pData),y
>PUSHA >PUSHA
>PUSHW L.MSG1 >PUSHW L.MSG1
>LIBCALL hLIBSTR,LIBSTR.PRINTF >LIBCALL hLIBSTR,LIBSTR.PRINTF
ldy #S.MEM.BIN ldy #S.MEM.BIN
lda (ZPPTR1),y lda (ZPPTR1),y
bne .3 bne .3
@ -132,15 +212,18 @@ CS.RUN.PRINTMEM ldy #S.MEM.LEN
lda #"|" lda #"|"
jsr COUT jsr COUT
ldy #1 ldy #1
.1 lda (ZPPTR2),y .1 lda (ZPPTR2),y
ora #$80 ora #$80
cmp #$A0 cmp #$A0
bcs .2 bcs .2
ora #$20 ora #$20
.2 jsr COUT .2 jsr COUT
iny iny
cpy #40 cpy #40
bne .1 bne .1
lda #"}" lda #"}"
jsr COUT jsr COUT
bra .4 bra .4
@ -150,84 +233,52 @@ CS.RUN.PRINTMEM ldy #S.MEM.LEN
>LIBCALL hLIBSTR,LIBSTR.PRINTP >LIBCALL hLIBSTR,LIBSTR.PRINTP
.4 jsr CROUT .4 jsr CROUT
inc LINE.COUNT ldy #LINE.COUNT
lda LINE.COUNT lda (pData),y
cmp #22 inc
sta (pData),y
cmp #PAGELEN
bne .5 bne .5
lda #$FF lda #$FF
sta bSTOP ldy #bSTOP
stz LINE.COUNT sta (pData),y
ldy #LINE.COUNT
lda #0
sta (pData),y
.5 rts .5 rts
*-------------------------------------- *--------------------------------------
CS.RUN.PRINTEND >PUSHB MEM.COUNT CS.RUN.PRINTEND ldy #MEM.COUNT
>PUSHB USED.COUNT >PUSHB (pData),y
ldy #USED.COUNT
>PUSHB (pData),y
>PUSHW L.MSG2 >PUSHW L.MSG2
>LIBCALL hLIBSTR,LIBSTR.PRINTF >LIBCALL hLIBSTR,LIBSTR.PRINTF
>PUSHW MEMMGR.LOMEM >PUSHW MemMgr.HiMem
>PUSHW L.MSG3 >PUSHW L.MSG3
>LIBCALL hLIBSTR,LIBSTR.PRINTF >LIBCALL hLIBSTR,LIBSTR.PRINTF
>PUSHW MEMMGR.MLLIMIT >PUSHW MemMgr.Free
>PUSHW L.MSG4 >PUSHW L.MSG4
>LIBCALL hLIBSTR,LIBSTR.PRINTF >LIBCALL hLIBSTR,LIBSTR.PRINTF
>PUSHW MEMMGR.MHLIMIT >PUSHW MemMgr.LoMem
>PUSHW L.MSG5 >PUSHW L.MSG5
>LIBCALL hLIBSTR,LIBSTR.PRINTF >LIBCALL hLIBSTR,LIBSTR.PRINTF
>PUSHW MEMMGR.HIMEM lda MemMgr.Free
sec
sbc MemMgr.LoMem
tay
lda MemMgr.Free+1
sbc MemMgr.LoMem+1
>PUSHYA
>PUSHW L.MSG6 >PUSHW L.MSG6
>LIBCALL hLIBSTR,LIBSTR.PRINTF >LIBCALL hLIBSTR,LIBSTR.PRINTF
>PUSHW MEMMGR.MFREE
>PUSHW L.MSG7
>LIBCALL hLIBSTR,LIBSTR.PRINTF
rts
*--------------------------------------
CS.DOEVENT >PULLW pEvent
ldy #S.EVT.hDEV is Event from active IN device?
lda (pEvent),y
ldy #S.PS.hINDEV
cmp (pPsContext),y
bne .9
lda (pEvent)
and #S.EVT.F.KEY is it a KEY event?
beq .9
ldy #S.EVT.DATAHI is it an O or SAPPLE key ?
lda (pEvent),y
bne .9
ldy #S.EVT.DATALO
lda (pEvent),y
cmp #$03 Ctrl-C
bne .1
lda #$FF
sta bCANCEL
bra .8
.1 cmp #$13 Ctrl-S
bne .2
lda bSTOP
eor #$FF
sta bSTOP
bra .8
.2 lda bSTOP
beq .8
stz bSTOP
.8 >SYSCALL SYS.DestroyEvent
clc
rts
.9 sec
rts
*--------------------------------------
CS.QUIT lda hLIBSTR
>SYSCALL SYS.UnloadLibA
clc
rts rts
*-------------------------------------- *--------------------------------------
PRBYTE pha PRBYTE pha
@ -252,33 +303,34 @@ CROUT lda #13
*-------------------------------------- *--------------------------------------
COUT phx COUT phx
phy phy
>PUSHA ldx #DEVMGR.COUT
ldy #S.PS.hOUTDEV jsr pDevJmp
lda (pPsContext),y
>SYSCALL SYS.DevOutA
ply ply
plx plx
rts rts
pDevJmp jmp (pDev)
*-------------------------------------- *--------------------------------------
CS.END CS.END
DS.START LIBSTR >PSTRING "libstr.o"
*-------------------------------------- MSG0 >CSTRING "hMem Flags PID REF PTR LEN BINPATH/DATA\n"
MSG1 >CSTRING " %03d %b $%h $%h $%H $%H "
MSG2 >CSTRING "\nAllocated hMem:%d, Total:%d\n"
MSG3 >CSTRING "High Memory: $%H\n"
MSG4 >CSTRING "Free ULimit: $%H\n"
MSG5 >CSTRING "Low Memory: $%H\n"
MSG6 >CSTRING "\nFree Memory: %D Bytes.\n"
hLIBSTR .BS 1 hLIBSTR .BS 1
*--------------------------------------
.DUMMY
.OR 0
DS.START
LINE.COUNT .BS 1 LINE.COUNT .BS 1
MEM.COUNT .BS 1 MEM.COUNT .BS 1
USED.COUNT .BS 1 USED.COUNT .BS 1
bSTOP .BS 1 bSTOP .BS 1
bCANCEL .BS 1 bCANCEL .BS 1
LIBSTR >PSTRING "libstr.o"
MSG0 >CSTRING "hMem Flags PID REF PTR LEN BINPATH/DATA\n"
MSG1 >CSTRING " %03d %b $%h $%h $%H $%H "
MSG2 >CSTRING "\nAllocated hMem:%d, Total:%d\n"
MSG3 >CSTRING "Low Memory: $%H\n"
MSG4 >CSTRING "Low Free PTR: $%H\n"
MSG5 >CSTRING "High Free PTR: $%H\n"
MSG6 >CSTRING "High Memory: $%H\n"
MSG7 >CSTRING "\nFree Memory: %D Bytes.\n"
DS.END DS.END
.ED
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE BIN/MEM.S SAVE BIN/MEM.S

View File

@ -1,15 +1,16 @@
PR#3 PR#3
PREFIX /A2OSX.BUILD PREFIX /A2OSX.SRC
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6
.LIST OFF .LIST OFF
.OP 65C02 .OP 65C02
.OR $2000 .OR $2000
.TF BIN/NETCFG .TF /A2OSX.BOOT/BIN/NETCFG
*-------------------------------------- *--------------------------------------
.INB INC/MACROS.I .INB INC/MACROS.I
.INB INC/A2OSX.I .INB INC/A2OSX.I
.INB INC/A2OSX.API.I
.INB INC/KERNEL.I .INB INC/KERNEL.I
.INB INC/LIBSTR.I .INB INC/LIBSTR.I
.INB INC/LIBTCPIP.I .INB INC/LIBTCPIP.I
@ -17,17 +18,20 @@ AUTO 6
ZPPTR1 .EQ ZPBIN ZPPTR1 .EQ ZPBIN
ZPPTR2 .EQ ZPBIN+2 ZPPTR2 .EQ ZPBIN+2
*-------------------------------------- *--------------------------------------
* Main entry point * File Header (16 Bytes)
*--------------------------------------
* Code signature and INIT table
*--------------------------------------
* CLD $D8
* JMP (*,x) $7C
* #JMPTABLE
* /JMPTABLE
*-------------------------------------- *--------------------------------------
CS.START cld CS.START cld
jmp (.1,x) jmp (.1,x)
.DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1
.DA 0
.DA CS.END-CS.START Code Length To Relocate
.DA 0 Data Segment to Allocate
.DA 0
.DA 0
*--------------------------------------
* Relocation Table
*--------------------------------------
.1 .DA CS.INIT .1 .DA CS.INIT
.DA CS.RUN .DA CS.RUN
.DA CS.DOEVENT .DA CS.DOEVENT
@ -49,10 +53,9 @@ L.MSG1.HOSTNAME .DA MSG1.HOSTNAME
L.MSG1.DOMAIN .DA MSG1.DOMAIN L.MSG1.DOMAIN .DA MSG1.DOMAIN
L.MSG1.END .DA MSG1.END L.MSG1.END .DA MSG1.END
.DA 0 .DA 0
.DA CS.END-CS.START Code Length To Relocate
.DA DS.END-DS.START Data Segemnt to Allocate
*-------------------------------------- *--------------------------------------
CS.INIT >LIBLOADP L.LIBSTR CS.INIT >LDYA L.LIBSTR
>LOADLIBYA
sta hLIBSTR sta hLIBSTR
lda #K.PROTOID.IP lda #K.PROTOID.IP
@ -195,12 +198,7 @@ MSG1.DNS >CSTRING " DNS : %d.%d.%d.%d,%d.%d.%d.%d\n"
MSG1.HOSTNAME >CSTRING " Hostname : %s" MSG1.HOSTNAME >CSTRING " Hostname : %s"
MSG1.DOMAIN >CSTRING ".%s" MSG1.DOMAIN >CSTRING ".%s"
MSG1.END >CSTRING "\nEnd of network configuration.\n" MSG1.END >CSTRING "\nEnd of network configuration.\n"
*--------------------------------------
DS.START
*--------------------------------------
hLIBSTR .BS 1 hLIBSTR .BS 1
*--------------------------------------
DS.END
MAN MAN
SAVE BIN/NETCFG.S SAVE BIN/NETCFG.S
ASM ASM

View File

@ -1,15 +1,16 @@
PR#3 PR#3
PREFIX /A2OSX.BUILD PREFIX /A2OSX.SRC
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6
.LIST OFF .LIST OFF
.OP 65C02 .OP 65C02
.OR $2000 .OR $2000
.TF BIN/PING .TF /A2OSX.BOOT/BIN/PING
*-------------------------------------- *--------------------------------------
.INB INC/MACROS.I .INB INC/MACROS.I
.INB INC/A2OSX.I .INB INC/A2OSX.I
.INB INC/A2OSX.API.I
.INB INC/KERNEL.I .INB INC/KERNEL.I
.INB INC/LIBSTR.I .INB INC/LIBSTR.I
.INB INC/LIBTCPIP.I .INB INC/LIBTCPIP.I
@ -20,44 +21,44 @@ ZPFrameBase1 .EQ ZPBIN
ZPFrameLen1 .EQ ZPBIN+2 ZPFrameLen1 .EQ ZPBIN+2
ZPFramePtr1 .EQ ZPBIN+4 ZPFramePtr1 .EQ ZPBIN+4
*-------------------------------------- *--------------------------------------
* Main entry point * File Header (16 Bytes)
*--------------------------------------
* Code signature and INIT table
*--------------------------------------
* CLD $D8
* JMP (*,x) $7C
* #JMPTABLE
* /JMPTABLE
*-------------------------------------- *--------------------------------------
CS.START cld CS.START cld
jmp (.1,x) jmp (.1,x)
.DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1
.DA 0
.DA CS.END-CS.START Code Length To Relocate
.DA DS.END-DS.START Data Segment to Allocate
.DA 0
.DA 0
*--------------------------------------
.1 .DA CS.INIT .1 .DA CS.INIT
.DA CS.RUN .DA CS.RUN
.DA CS.EVENT .DA CS.DOEVENT
.DA CS.QUIT .DA CS.QUIT
L.LIBSTR .DA LIBSTR L.LIBSTR .DA LIBSTR
L.LIBTCPIP .DA LIBTCPIP L.LIBTCPIP .DA LIBTCPIP
L.SSCANF.IP .DA SSCANF.IP L.SSCANF.IP .DA SSCANF.IP
L.DST.IP .DA DST.IP
L.MSG0 .DA MSG0 L.MSG0 .DA MSG0
L.MSG1 .DA MSG1 L.MSG1 .DA MSG1
L.MSG2 .DA MSG2 L.MSG2 .DA MSG2
L.MSG3 .DA MSG3 L.MSG3 .DA MSG3
.DA 0 .DA 0
.DA CS.END-CS.START Code Length To Relocate
.DA DS.END-DS.START Data Segment to Allocate
*-------------------------------------- *--------------------------------------
CS.INIT ldy #S.PS.hARGS CS.INIT ldy #S.PS.hARGS
lda (pPsContext),y lda (pPs),y
bne .1 bne .1
lda #SYSMGR.ERRSYN lda #SYSMGR.ERRSYN
sec sec
rts rts
.1 >LIBLOADP L.LIBSTR .1 >LDYA L.LIBSTR
>LOADLIBYA
sta hLIBSTR sta hLIBSTR
>LIBLOADP L.LIBTCPIP >LDYA L.LIBTCPIP
>LOADLIBYA
sta hLIBTCPIP sta hLIBTCPIP
>LIBCALL hLIBTCPIP,LIBTCPIP.GET.IPCFG is TCPIP loaded ? >LIBCALL hLIBTCPIP,LIBTCPIP.GET.IPCFG is TCPIP loaded ?
@ -72,45 +73,52 @@ CS.INIT ldy #S.PS.hARGS
sta hDev sta hDev
lda A2OSX.RANDOM16 lda A2OSX.RANDOM16
sta Identifier ldy #Identifier
sta (pData),y
lda A2OSX.RANDOM16+1 lda A2OSX.RANDOM16+1
sta Identifier+1 iny
sta (pData),y
stz Sequence lda #0
stz Sequence+1 ldy #Sequence
sta (pData),y
iny
sta (pData),y
lda (pPsContext) lda (pPs)
ora #S.PS.F.EVENT Now accept events ora #S.PS.F.EVENT Now accept events
sta (pPsContext) sta (pPs)
clc clc
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
CS.RUN >PUSHW L.DST.IP CS.RUN >PUSHW pData DST.IP
>PUSHW L.SSCANF.IP >PUSHW L.SSCANF.IP
ldy #S.PS.hARGS ldy #S.PS.hARGS
lda (pPsContext),y lda (pPs),y
>SYSCALL SYS.GetMemPtrA >SYSCALL SYS.GetMemPtrA
>PUSHYA >PUSHYA
>LIBCALL hLIBSTR,LIBSTR.SSCANF >LIBCALL hLIBSTR,LIBSTR.SSCANF
bcc CS.RUN.IPOK bcc CS.RUN.IPOK
lda #PING.TIMEOUT lda #PING.TIMEOUT
sta TimeOut ldy #TimeOut
sta (pData),y
CS.RUN.DNSQUERY >PUSHW L.DST.IP
CS.RUN.DNSQUERY >PUSHW pData DST.IP
ldy #S.PS.hARGS ldy #S.PS.hARGS
lda (pPsContext),y lda (pPs),y
>PUSHA >PUSHA
>LIBCALL hLIBTCPIP,LIBTCPIP.DNS.QUERY >LIBCALL hLIBTCPIP,LIBTCPIP.DNS.QUERY
bcc CS.RUN.IPOK bcc CS.RUN.IPOK
jsr A2osX.SLEEP jsr A2osX.SLEEP
lda TimeOut ldy #TimeOut
lda (pData),y
bne CS.RUN.DNSQUERY bne CS.RUN.DNSQUERY
ldy #S.PS.hARGS ldy #S.PS.hARGS
lda (pPsContext),y lda (pPs),y
>SYSCALL SYS.GetMemPtrA >SYSCALL SYS.GetMemPtrA
>PUSHYA >PUSHYA
>PUSHW L.MSG0 >PUSHW L.MSG0
@ -120,24 +128,37 @@ CS.RUN.DNSQUERY >PUSHW L.DST.IP
CS.RUN.RTS rts CS.RUN.RTS rts
CS.RUN.IPOK ldy #S.PS.hARGS CS.RUN.IPOK ldy #S.PS.hARGS
lda (pPsContext),y lda (pPs),y
>SYSCALL SYS.GetMemPtrA >SYSCALL SYS.GetMemPtrA
>PUSHYA >PUSHYA
>PUSHB DST.IP+3 ldy #3
>PUSHB DST.IP+2 >PUSHB (pData),y DST.IP+3
>PUSHB DST.IP+1 dey
>PUSHB DST.IP >PUSHB (pData),y DST.IP+2
dey
>PUSHB (pData),y DST.IP+1
>PUSHB (pData) DST.IP
>PUSHW L.MSG1 >PUSHW L.MSG1
>LIBCALL hLIBSTR,LIBSTR.PRINTF >LIBCALL hLIBSTR,LIBSTR.PRINTF
CS.RUN.ECHO >LIBCALL hLIBTCPIP,LIBTCPIP.NEW.ICMP.FRAME CS.RUN.ECHO >LIBCALL hLIBTCPIP,LIBTCPIP.NEW.ICMP.FRAME
bcs CS.RUN.RTS bcs CS.RUN.RTS
>STYA ZPFrameBase1 >STYA ZPFrameBase1
stx hFrame txa
ldy #hFrame
sta (pData),y
ldx #3
ldy #0
.10 lda (pData),y
pha
iny
dex
bpl .10
ldx #3 ldx #3
ldy #S.IP.DST+3 ldy #S.IP.DST+3
.1 lda DST.IP,x .1 pla
sta (ZPFrameBase1),y sta (ZPFrameBase1),y
dey dey
dex dex
@ -147,63 +168,92 @@ CS.RUN.ECHO >LIBCALL hLIBTCPIP,LIBTCPIP.NEW.ICMP.FRAME
lda #S.ICMP.TYPE.ECHOREQ lda #S.ICMP.TYPE.ECHOREQ
sta (ZPFrameBase1),y sta (ZPFrameBase1),y
ldy #S.ICMP.IDENTIFIER ldy #Identifier
lda Identifier lda (pData),y
sta (ZPFrameBase1),y tax
iny iny
lda Identifier+1 lda (pData),y
ldy #S.ICMP.IDENTIFIER+1
sta (ZPFrameBase1),y
dey
txa
sta (ZPFrameBase1),y sta (ZPFrameBase1),y
inc Sequence ldy #Sequence+1
lda (pData),y
tax
dey
lda (pData),y
inc
sta (pData),y
bne .2 bne .2
inc Sequence+1 pha
inx
txa
sta (pData),y
pla
.2 ldy #S.ICMP.SEQUENCE .2 ldy #S.ICMP.SEQUENCE
lda Sequence
sta (ZPFrameBase1),y sta (ZPFrameBase1),y
iny iny
lda Sequence+1 txa
sta (ZPFrameBase1),y sta (ZPFrameBase1),y
lda #PING.TIMEOUT lda #PING.TIMEOUT
sta TimeOut ldy #TimeOut
sta (pData),y
.3 >PUSHWI S.ICMP+32 .3 >PUSHWI S.ICMP+32
lda hFrame ldy #hFrame
lda (pData),y
>SYSCALL SYS.GetMemPtrA >SYSCALL SYS.GetMemPtrA
>PUSHYA >PUSHYA
>LIBCALL hLIBTCPIP,LIBTCPIP.SEND.ICMP.FRAME >LIBCALL hLIBTCPIP,LIBTCPIP.SEND.ICMP.FRAME
bcc .4 bcc .4
jsr A2osX.SLEEP jsr A2osX.SLEEP
lda TimeOut ldy #TimeOut
lda (pData),y
bne .3 bne .3
.4 lda hFrame .4 ldy #hFrame
lda (pData),y
>SYSCALL SYS.FreeMemA >SYSCALL SYS.FreeMemA
stz bReply ldy #bReply
lda #0
sta (pData),y
lda #PING.TIMEOUT lda #PING.TIMEOUT
sta TimeOut ldy #TimeOut
sta (pData),y
CS.RUN.WAIT jsr A2osX.SLEEP CS.RUN.WAIT jsr A2osX.SLEEP
lda bReply ldy #bReply
lda (pData),y
bne .1 bne .1
lda bCTRLC ldy #bCTRLC
lda (pData),y
bne CS.RUN.ERROR bne CS.RUN.ERROR
lda TimeOut ldy #TimeOut
lda (pData),y
bne CS.RUN.WAIT bne CS.RUN.WAIT
>PUSHB DST.IP+3 ldy #3
>PUSHB DST.IP+2 >PUSHB (pData),y DST.IP+3
>PUSHB DST.IP+1 dey
>PUSHB DST.IP >PUSHB (pData),y DST.IP+2
dey
>PUSHB (pData),y DST.IP+1
>PUSHB (pData) DST.IP
>PUSHW L.MSG2 >PUSHW L.MSG2
>LIBCALL hLIBSTR,LIBSTR.PRINTF >LIBCALL hLIBSTR,LIBSTR.PRINTF
.1 lda bCTRLC .1 ldy #bCTRLC
lda (pData),y
bne CS.RUN.ERROR bne CS.RUN.ERROR
lda TimeOut ldy #TimeOut
lda (pData),y
beq .2 beq .2
jsr A2osX.SLEEP jsr A2osX.SLEEP
@ -214,14 +264,16 @@ CS.RUN.WAIT jsr A2osX.SLEEP
CS.RUN.ERROR sec CS.RUN.ERROR sec
rts rts
*-------------------------------------- *--------------------------------------
CS.EVENT lda (pEvent) CS.DOEVENT lda (pEvent)
and #S.EVT.F.TIMER is it a TIMER event? and #S.EVT.F.TIMER is it a TIMER event?
beq .1 no.... beq .1 no....
lda TimeOut ldy #TimeOut
lda (pData),y
beq .10 beq .10
dec TimeOut dec
sta (pData),y
.10 sec do not discard TIMER event .10 sec do not discard TIMER event
rts rts
@ -232,7 +284,7 @@ CS.EVENT lda (pEvent)
ldy #S.EVT.hDEV is Event from active IN device? ldy #S.EVT.hDEV is Event from active IN device?
lda (pEvent),y lda (pEvent),y
ldy #S.PS.hINDEV ldy #S.PS.hINDEV
cmp (pPsContext),y cmp (pPs),y
bne .9 bne .9
ldy #S.EVT.DATAHI is it an O or SAPPLE key ? ldy #S.EVT.DATAHI is it an O or SAPPLE key ?
@ -245,7 +297,8 @@ CS.EVENT lda (pEvent)
bne .8 bne .8
lda #$FF lda #$FF
sta bCTRLC ldy #bCTRLC
sta (pData),y
bra .8 bra .8
.2 lda (pEvent) .2 lda (pEvent)
@ -275,15 +328,19 @@ CS.EVENT lda (pEvent)
ldy #S.ICMP.IDENTIFIER ldy #S.ICMP.IDENTIFIER
lda (ZPFrameBase1),y lda (ZPFrameBase1),y
cmp Identifier tax
bne .9
iny iny
lda (ZPFrameBase1),y lda (ZPFrameBase1),y
cmp Identifier+1 ldy #Identifier+1
cmp (pData),y
bne .9 bne .9
dey
txa
cmp (pData),y
bne .9
jsr CS.EVENT.REPLY jsr CS.EVENT.REPLY
.8 >SYSCALL SYS.DestroyEvent .8 clc
clc
rts rts
.9 sec .9 sec
@ -304,7 +361,7 @@ CS.EVENT.REPLY lda #PING.TIMEOUT
adc #K.TIMER16RESOLUTION*20 adc #K.TIMER16RESOLUTION*20
sta TimeOut.ms sta TimeOut.ms
bcc .2 bcc .2
inc TimeOut+1+1 inc TimeOut
.2 dey .2 dey
bne .1 bne .1
@ -329,7 +386,10 @@ CS.EVENT.REPLY lda #PING.TIMEOUT
>PUSHW L.MSG3 >PUSHW L.MSG3
>LIBCALL hLIBSTR,LIBSTR.PRINTF >LIBCALL hLIBSTR,LIBSTR.PRINTF
inc bReply ldy #bReply
lda (pData),y
inc
sta (pData),y
rts rts
*-------------------------------------- *--------------------------------------
CS.QUIT lda hLIBTCPIP CS.QUIT lda hLIBTCPIP
@ -347,20 +407,23 @@ MSG0 >CSTRING "%S: Unknown host\n"
MSG1 >CSTRING "PING %d.%d.%d.%d (%S)\n" MSG1 >CSTRING "PING %d.%d.%d.%d (%S)\n"
MSG2 >CSTRING "%d.%d.%d.%d: TimeOut/Host unreachable\n" MSG2 >CSTRING "%d.%d.%d.%d: TimeOut/Host unreachable\n"
MSG3 >CSTRING "32 bytes from %d.%d.%d.%d, icmp_seq=%D, ttl=%d, time=%D ms\n" MSG3 >CSTRING "32 bytes from %d.%d.%d.%d, icmp_seq=%D, ttl=%d, time=%D ms\n"
*--------------------------------------
DS.START
hLIBSTR .BS 1 hLIBSTR .BS 1
hLIBTCPIP .BS 1 hLIBTCPIP .BS 1
hDev .BS 1 hDev .BS 1
TimeOut.ms .BS 2
*--------------------------------------
.DUMMY
.OR 0
DS.START
DST.IP .BS 4 DST.IP .BS 4
hFrame .BS 1 hFrame .BS 1
TimeOut .BS 1 TimeOut .BS 1
TimeOut.ms .BS 2
Identifier .BS 2 Identifier .BS 2
Sequence .BS 2 Sequence .BS 2
bCTRLC .BS 1 bCTRLC .BS 1
bReply .BS 1 bReply .BS 1
DS.END DS.END
.ED
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE BIN/PING.S SAVE BIN/PING.S

View File

@ -1,15 +1,16 @@
PR#3 PR#3
PREFIX /A2OSX.BUILD PREFIX /A2OSX.SRC
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6
.LIST OFF .LIST OFF
.OP 65C02 .OP 65C02
.OR $2000 .OR $2000
.TF BIN/PS .TF /A2OSX.BOOT/BIN/PS
*-------------------------------------- *--------------------------------------
.INB INC/MACROS.I .INB INC/MACROS.I
.INB INC/A2OSX.I .INB INC/A2OSX.I
.INB INC/A2OSX.API.I
.INB INC/KERNEL.I .INB INC/KERNEL.I
.INB INC/LIBSTR.I .INB INC/LIBSTR.I
*-------------------------------------- *--------------------------------------
@ -17,17 +18,20 @@ ZPPTR1 .EQ ZPBIN
ZPPTR2 .EQ ZPBIN+2 ZPPTR2 .EQ ZPBIN+2
ZPPTR3 .EQ ZPBIN+4 ZPPTR3 .EQ ZPBIN+4
*-------------------------------------- *--------------------------------------
* Main entry point * File Header (16 Bytes)
*--------------------------------------
* Code signature and INIT table
*--------------------------------------
* CLD $D8
* JMP (*,x) $7C
* #JMPTABLE
* /JMPTABLE
*-------------------------------------- *--------------------------------------
CS.START cld CS.START cld
jmp (.1,x) jmp (.1,x)
.DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1
.DA 0
.DA CS.END-CS.START Code Length To Relocate
.DA 0 Data Segment to Allocate
.DA 0
.DA 0
*--------------------------------------
* Relocation Table
*--------------------------------------
.1 .DA CS.INIT .1 .DA CS.INIT
.DA CS.RUN .DA CS.RUN
.DA CS.DOEVENT .DA CS.DOEVENT
@ -37,13 +41,14 @@ L.MSG0 .DA MSG0
L.MSG1 .DA MSG1 L.MSG1 .DA MSG1
L.MSG2 .DA MSG2 L.MSG2 .DA MSG2
.DA 0 .DA 0
.DA CS.END-CS.START Code Length To Relocate
.DA 0 Data Segment to Allocate
*-------------------------------------- *--------------------------------------
CS.INIT >LIBLOADP L.LIBSTR CS.INIT >LDYA L.LIBSTR
>LOADLIBYA
sta hLibStr sta hLibStr
clc
>LDYAI TSKMGR.TABLE rts
*--------------------------------------
CS.RUN >LDYAI TSKMGR.TABLE+S.PS.SIZE
>STYA ZPPTR1 >STYA ZPPTR1
stz PS.COUNT stz PS.COUNT
@ -52,13 +57,17 @@ CS.INIT >LIBLOADP L.LIBSTR
.1 lda (ZPPTR1) .1 lda (ZPPTR1)
bpl .4 bpl .4
ldy #S.PS.hARGS ldy #S.PS.hARGS
lda (ZPPTR1),y lda (ZPPTR1),y
beq .2 beq .2
>SYSCALL SYS.GetMemPtrA >SYSCALL SYS.GetMemPtrA
>PUSHYA >PUSHYA
bra .3 bra .3
.2 >PUSHW L.MSG2 .2 >PUSHW L.MSG2
.3 ldy #S.PS.hCMD .3 ldy #S.PS.hCMD
lda (ZPPTR1),y lda (ZPPTR1),y
>SYSCALL SYS.GetMemPtrA >SYSCALL SYS.GetMemPtrA
@ -83,17 +92,16 @@ CS.INIT >LIBLOADP L.LIBSTR
sta ZPPTR1 sta ZPPTR1
bcc .5 bcc .5
inc ZPPTR1+1 inc ZPPTR1+1
.5 inc PS.COUNT .5 inc PS.COUNT
lda PS.COUNT lda PS.COUNT
cmp #K.PS.MAX cmp #K.PS.MAX
beq .8 bne .1
jmp .1
.8 lda #0 tell TSKMGR that all done ok, but lda #0 tell TSKMGR that all done ok, but
sec we do not want to stay in memory sec we do not want to stay in memory
rts rts
*-------------------------------------- *--------------------------------------
CS.RUN
CS.DOEVENT clc CS.DOEVENT clc
rts rts
*-------------------------------------- *--------------------------------------
@ -106,8 +114,8 @@ CS.END
hLibStr .BS 1 hLibStr .BS 1
PS.COUNT .BS 1 PS.COUNT .BS 1
LIBSTR >PSTRING "libstr.o" LIBSTR >PSTRING "libstr.o"
MSG0 >CSTRING "hPS Flags PID CMD ARGS\n" MSG0 >CSTRING "ID Flags PID CMD ARGS\n"
MSG1 >CSTRING " %03d %b $%h %16S %32S\n" MSG1 >CSTRING "%03d %b %03d %16S %32S\n"
MSG2 >PSTRING "(none)" MSG2 >PSTRING "(none)"
MAN MAN
SAVE BIN/PS.S SAVE BIN/PS.S

View File

@ -1,5 +1,5 @@
PR#3 PR#3
PREFIX /A2OSX.BUILD PREFIX /A2OSX.SRC
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6

View File

@ -1,5 +1,5 @@
PR#3 PR#3
PREFIX /A2OSX.BUILD PREFIX /A2OSX.SRC
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6

View File

@ -1,45 +1,73 @@
PR#3 PR#3
PREFIX /A2OSX.BUILD PREFIX /A2OSX.SRC
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6
.LIST OFF .LIST OFF
.OP 65C02 .OP 65C02
.OR $2000 .OR $2000
.TF DRV/CONSOLE.DRV .TF /A2OSX.BOOT/DRV/CONSOLE.DRV
*-------------------------------------- *--------------------------------------
.INB INC/MACROS.I .INB INC/MACROS.I
.INB INC/A2OSX.I .INB INC/A2OSX.I
.INB INC/A2OSX.API.I
.INB INC/KERNEL.I
.INB INC/IO.I .INB INC/IO.I
*-------------------------------------- *--------------------------------------
CURSOR.BLINK.SPEED .EQ 2
*--------------------------------------
ZPBASL1 .EQ ZPDRV ZPBASL1 .EQ ZPDRV
ZPBASL2 .EQ ZPDRV+2 ZPBASL2 .EQ ZPDRV+2
*-------------------------------------- *--------------------------------------
* Main DRV entry point * File Header (16 Bytes)
* input :
* X = CMD
* 0 : OPEN
* 2 : GETEVENT
* 6 : OUT
* 8 : CLOSE
*--------------------------------------
* CLD $D8
* JMP (*,x) $7C
* #JMPTABLE
* /JMPTABLE
*--------------------------------------
CURSOR.BLINK.SPEED .EQ 2
*-------------------------------------- *--------------------------------------
CS.START cld CS.START cld
jmp (.1,x) jmp Dev.Detect cld,jmp abs=DRV
.1 .DA OPEN .DA #$61 6502,Level 1 (65c02)
.DA #1 DRV Layout Version 1
.DA 0
.DA CS.END-CS.START Code Length
.DA DEV.HEADER-CS.START Device Header Offset
.DA DRV.CS.START-CS.START Driver Code Offset
.DA DRV.CS.END-DRV.CS.START Drv Code Length
*--------------------------------------
* Relocation Table
*--------------------------------------
L.MSG.DETECT .DA MSG.DETECT
.DA 0 End Of Reloc Table
*--------------------------------------
Dev.Detect >LDYA L.MSG.DETECT
>SYSCALL SYS.SysScrPPSTRYA
lda A2osX.SCREENS
ora #A2osX.SCREENS.C
sta A2osX.SCREENS
clc
rts
CS.END
MSG.DETECT >PSTRING "\nApple IIe/IIc 80 Col Driver."
*--------------------------------------
* Device Header (16 Bytes)
*--------------------------------------
DEV.HEADER cld
jmp (DRV.CS.START,x)
.DA #S.DEV.F.EVENT+S.DEV.F.COUT+S.DEV.F.CHAR
>PSTRING "CON" NAME
.HS 00 NAME must Be 5 bytes long
.HS 00.00
.HS 00.00.00.00
*--------------------------------------
* Driver Code
*--------------------------------------
DRV.CS.START .DA OPEN
.DA GETEVENT .DA GETEVENT
.DA OUT .DA COUT
.DA CLOSE .DA CLOSE
.DA GETINFO .DA GETINFO
.DA IRQ
L.DEVINFO .DA DEVINFO
.DA 0 end or relocation .DA 0 end or relocation
.DA CS.END-CS.START Code Length To Relocate
.DA 0 Data Segemnt to Allocate
*-------------------------------------- *--------------------------------------
OPEN stz CURON OPEN stz CURON
lda #$80 lda #$80
@ -47,31 +75,10 @@ OPEN stz CURON
jsr HOME jsr HOME
lda #S.DEV.F.CHAR+S.DEV.F.EVENT+S.DEV.F.OUT
sta (pDevContext)
ldy #S.DEV.NAME
ldx #0
.1 lda DEVNAME,x
sta (pDevContext),y
cpx DEVNAME
beq .8
inx
iny
bne .1
.8 lda A2osX.SCREENS
ora #A2osX.SCREENS.C
sta A2osX.SCREENS
lda #A2osX.SCREENS.C
>SYSCALL SYS.ScreenSelectA
clc clc
rts rts
*-------------------------------------- *--------------------------------------
GETEVENT >PULLW pEvent GETEVENT lda A2osX.TIMER16
lda A2osX.TIMER16
and #CURSOR.BLINK.SPEED and #CURSOR.BLINK.SPEED
eor CURON eor CURON
beq .9 beq .9
@ -81,24 +88,24 @@ GETEVENT >PULLW pEvent
sec sec
rts rts
*-------------------------------------- *--------------------------------------
OUT >PULLA COUT jsr COUT1
jsr COUT
clc clc
rts rts
*-------------------------------------- *--------------------------------------
CLOSE lda A2osX.SCREENS CLOSE
and #$FF^A2osX.SCREENS.C * lda A2osX.SCREENS
sta A2osX.SCREENS * and #$FF^A2osX.SCREENS.C
* sta A2osX.SCREENS
clc clc
rts rts
*-------------------------------------- *--------------------------------------
GETINFO clc GETINFO >LDYA L.DEVINFO
IRQ clc
rts rts
*-------------------------------------- *--------------------------------------
* PRIVATE * PRIVATE
*-------------------------------------- *--------------------------------------
COUT cmp #8 COUT1 cmp #8
bne .2 bne .2
ldx CH ldx CH
beq .10 beq .10
@ -113,7 +120,8 @@ COUT cmp #8
sta CH sta CH
dec CV dec CV
.12 lda #$A0 .12 lda #$20
ora INVFLG
ldx CH ldx CH
ldy CV ldy CV
jsr SetCharAtXY jsr SetCharAtXY
@ -121,6 +129,7 @@ COUT cmp #8
.2 cmp #13 .2 cmp #13
beq CROUT beq CROUT
ora INVFLG
ldx CH ldx CH
ldy CV ldy CV
jsr SetCharAtXY jsr SetCharAtXY
@ -131,14 +140,19 @@ FSOUT ldx CH
rts rts
*-------------------------------------- *--------------------------------------
CROUT jsr CLREOL CROUT jsr CLREOL
*--------------------------------------
CROUT1 stz CH CROUT1 stz CH
ldy CV ldy CV
cpy #23 cpy #23
beq SCROLL.UP beq SCROLL.UP
inc CV inc CV
rts rts
*--------------------------------------
SCROLL.UP ldx #0 SCROLL.UP ldx #0
lda RD80STORE
pha
sta SET80STORE sta SET80STORE
.1 lda BASEL,x .1 lda BASEL,x
@ -169,13 +183,18 @@ SCROLL.UP ldx #0
cpx #23 cpx #23
bne .1 bne .1
jsr CLREOL
pla
bmi .8
sta CLR80STORE
.8 rts
*-------------------------------------- *--------------------------------------
CLREOL ldx CH CLREOL ldx CH
.1 phx .1 phx
ldy CV ldy CV
lda #$A0 lda #$20
ora INVFLG
jsr SetCharAtXY jsr SetCharAtXY
plx plx
inx inx
@ -186,8 +205,6 @@ CLREOL ldx CH
HOME stz CH HOME stz CH
stz CV stz CV
lda RDPAGE2
pha
lda RD80STORE lda RD80STORE
pha pha
@ -221,23 +238,15 @@ HOME stz CH
bpl .1 bpl .1
pla pla
bmi .4 bmi .8
sta CLR80STORE sta CLR80STORE
bra .5
.4 sta SET80STORE
.5 pla
bmi .6
sta CLRPAGE2
bra .8
.6 sta SETPAGE2
.8 rts .8 rts
*-------------------------------------- *--------------------------------------
CUROFF lda CURON CUROFF lda CURON
beq CUREXIT.RTS beq CUREXIT.RTS
CURBLNK lda A2osX.ACTIVESCRN CURBLNK lda A2osX.ASCREEN
and #A2osX.SCREENS.C and #A2osX.SCREENS.C
bne CURBLNK1 bne CURBLNK1
@ -268,8 +277,6 @@ CUREXIT lda CURON
CUREXIT.RTS rts CUREXIT.RTS rts
*-------------------------------------- *--------------------------------------
SetCharAtXY pha SetCharAtXY pha
lda RDPAGE2
pha
lda RD80STORE lda RD80STORE
pha pha
sta SET80STORE sta SET80STORE
@ -287,23 +294,16 @@ SetCharAtXY pha
lda BASEH,y lda BASEH,y
sta ZPBASL1+1 sta ZPBASL1+1
ply
plx plx
pla pla
sta (ZPBASL1) sta (ZPBASL1)
tya txa
bmi .3 bmi .8
sta CLR80STORE sta CLR80STORE
.3 txa
bpl .4 .8 rts
sta SETPAGE2
rts
.4 sta CLRPAGE2
rts
*-------------------------------------- *--------------------------------------
GetCharAtXY lda RDPAGE2 GetCharAtXY lda RD80STORE
pha
lda RD80STORE
pha pha
sta SET80STORE sta SET80STORE
txa txa
@ -323,28 +323,22 @@ GetCharAtXY lda RDPAGE2
lda (ZPBASL1) lda (ZPBASL1)
plx plx
bmi .3 bmi .8
sta CLR80STORE sta CLR80STORE
.3 plx .8 rts
bpl .4
sta SETPAGE2
rts
.4 sta CLRPAGE2
rts
*-------------------------------------- *--------------------------------------
CS.END DRV.CS.END
DEVNAME >PSTRING "CON" BASEL .HS 00.80.00.80.00.80.00.80.28.A8.28.A8.28.A8.28.A8.50.D0.50.D0.50.D0.50.D0
BASEH .HS 04.04.05.05.06.06.07.07.04.04.05.05.06.06.07.07.04.04.05.05.06.06.07.07
CH .BS 1 CH .BS 1
CV .BS 1 CV .BS 1
INVFLG .BS 1 INVFLG .BS 1
CURON .BS 1 CURON .BS 1
CURCHAR .BS 1 CURCHAR .BS 1
*-------------------------------------- DEVINFO .DA #S.DEVINFO.TYPE.CHAR
BASEL .HS 00.80.00.80.00.80.00.80.28.A8.28.A8.28.A8.28.A8.50.D0.50.D0.50.D0.50.D0 .DA #80
BASEH .HS 04.04.05.05.06.06.07.07.04.04.05.05.06.06.07.07.04.04.05.05.06.06.07.07 .DA #24
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE DRV/CONSOLE.DRV.S SAVE DRV/CONSOLE.DRV.S

View File

@ -1,73 +1,81 @@
PR#3 PR#3
PREFIX /A2OSX.BUILD PREFIX /A2OSX.SRC
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6
.LIST OFF .LIST OFF
.OP 65C02 .OP 65C02
.OR $2000 .OR $2000
.TF DRV/DHGR.DRV .TF /A2OSX.BOOT/DRV/DHGR.DRV
*-------------------------------------- *--------------------------------------
.INB INC/MACROS.I .INB INC/MACROS.I
.INB INC/A2OSX.I .INB INC/A2OSX.I
.INB INC/A2OSX.API.I
.INB INC/KERNEL.I
.INB INC/IO.I .INB INC/IO.I
*-------------------------------------- *--------------------------------------
ZPBASE .EQ ZPDRV ZPBASE .EQ ZPDRV
ZPCOLOR .EQ ZPDRV+2 ZPCOLOR .EQ ZPDRV+2
*-------------------------------------- *--------------------------------------
* Main DRV entry point * File Header (16 Bytes)
* input :
* X = CMD
* 0 : OPEN
* 2 : GETEVENT
* 6 : OUT
* 8 : CLOSE
*--------------------------------------
* CLD $D8
* JMP (*,x) $7C
* #JMPTABLE
* /JMPTABLE
*-------------------------------------- *--------------------------------------
CS.START cld CS.START cld
jmp (.1,x) jmp Dev.Detect cld,jmp abs=DRV
.1 .DA OPEN .DA #$61 6502,Level 1 (65c02)
.DA #1 DRV Layout Version 1
.DA 0
.DA CS.END-CS.START Code Length
.DA DEV.HEADER-CS.START Device Header Offset
.DA DRV.CS.START-CS.START Driver Code Offset
.DA DRV.CS.END-DRV.CS.START Drv Code Length
*--------------------------------------
* Relocation Table
*--------------------------------------
L.MSG.DETECT .DA MSG.DETECT
.DA 0 End Of Reloc Table
*--------------------------------------
Dev.Detect >LDYA L.MSG.DETECT
>SYSCALL SYS.SysScrPPSTRYA
lda A2osX.SCREENS
ora #A2osX.SCREENS.G
sta A2osX.SCREENS
clc
rts
CS.END
MSG.DETECT >PSTRING "\nApple IIe/IIc DoubleHGR Driver."
*--------------------------------------
* Device Header (16 Bytes)
*--------------------------------------
DEV.HEADER cld
jmp (DRV.CS.START,x)
.DA #0
>PSTRING "GFX" NAME
.HS 00 NAME must Be 5 bytes long
.HS 00.00
.HS 00.00.00.00
*--------------------------------------
* Driver Code
*--------------------------------------
DRV.CS.START .DA OPEN
.DA GETEVENT .DA GETEVENT
.DA OUT .DA COUT
.DA CLOSE .DA CLOSE
.DA GETINFO .DA GETINFO
.DA IRQ
.DA SETPIXEL .DA SETPIXEL
.DA GETPIXEL .DA GETPIXEL
.DA HLINE .DA HLINE
.DA VLINE .DA VLINE
.DA FILLREC
.DA BITBLT .DA BITBLT
.DA FILLREC
L.DEVINFO .DA DEVINFO L.DEVINFO .DA DEVINFO
.DA 0 end or relocation .DA 0 end or relocation
.DA CS.END-CS.START Code Length To Relocate
.DA DS.END-DS.START Data Segment to Allocate
*-------------------------------------- *--------------------------------------
OPEN lda #S.DEV.F.GFX OPEN sta SETHIRES
sta (pDevContext) sta SET80STORE prepare for page switching
ldy #S.DEV.NAME
ldx #0
.1 lda DEVNAME,x
sta (pDevContext),y
cpx DEVNAME
beq .8
inx
iny
bne .1
.8 lda A2osX.SCREENS
ora #A2osX.SCREENS.G
sta A2osX.SCREENS
lda #A2osX.SCREENS.G
>SYSCALL SYS.ScreenSelectA
sta SET80STORE
ldx #192 ldx #192
.81 dex .81 dex
@ -77,61 +85,37 @@ OPEN lda #S.DEV.F.GFX
lda BASEH,x lda BASEH,x
sta ZPBASE+1 sta ZPBASE+1
lda #$D5 lda #$55
* lda #$00
ldy #39 ldy #39
sta SETPAGE2 sta SETPAGE2
.82 sta (ZPBASE),y .82 sta (ZPBASE),y
dey dey
bpl .82 bpl .82
lda #$AA lda #$2A
* lda #$00
ldy #39 ldy #39
sta CLRPAGE2 sta CLRPAGE2
.83 sta (ZPBASE),y .83 sta (ZPBASE),y
dey dey
bpl .83 bpl .83
dex
lda BASEL,x
sta ZPBASE
lda BASEH,x
sta ZPBASE+1
lda #$2A
ldy #39
sta SETPAGE2
.84 sta (ZPBASE),y
dey
bpl .84
lda #$55
ldy #39
sta CLRPAGE2
.85 sta (ZPBASE),y
dey
bpl .85
txa txa
bne .81 bne .81
>DEBUG >DEBUG
clc clc
rts rts
*-------------------------------------- *--------------------------------------
GETEVENT GETEVENT
OUT clc COUT
IRQ sec
rts rts
*-------------------------------------- *--------------------------------------
CLOSE lda A2osX.SCREENS CLOSE clc
and #$FF^A2osX.SCREENS.G
sta A2osX.SCREENS
clc
rts rts
*-------------------------------------- *--------------------------------------
GETINFO >LDYA L.DEVINFO GETINFO >LDYA L.DEVINFO
@ -139,104 +123,139 @@ GETINFO >LDYA L.DEVINFO
rts rts
*-------------------------------------- *--------------------------------------
* SETPIXEL * SETPIXEL
*--------------------------------------
* PULLB = X.LO
* PULLB = X.HI
* PULLB = Y
* PULLB = Mode * PULLB = Mode
* 00000001=mono * 00000001=B/W
* 00000010=16 colors * 00000010=16 colors
* 1000000=xor (mono on 1 bit) * 1000000=xor (mono on 1 bit)
* PULLW = X
* PULLB = Y
* PULLB = Color (if not xor) * PULLB = Color (if not xor)
*-------------------------------------- *--------------------------------------
SETPIXEL >PULLA X.LO SETPIXEL sta SETHIRES
tax sta SET80STORE prepare for page switching
>PULLA X.HI
>PULLA Pull Mode
and #$FF
bpl SETPIXEL.1
SETPIXEL.XOR >PULLYA Y=X.LO,A=X.HI
lsr if 256 =< x < 511 lsr if 256 =< x < 511
bcs .1 bcs .1
lsr lsr
bcs .2 if 512 < x bcs .2 if 512 < x
ldy DIV7.0,x lda DIV7.0,y
lda MOD7.0,x ldx MOD7.0,y
bra .3 bra .3
.1 ldy DIV7.256,x .1 lda DIV7.256,y
lda MOD7.256,x ldx MOD7.256,y
bra .3 bra .3
.2 ldy DIV7.512,x .2 lda DIV7.512,y
lda MOD7.512,x ldx MOD7.512,y
.3 pha save MOD,y=DIV .3 lsr
tay
bcs .4 odd=main ram
sta SETPAGE2
bra .5
.4 sta CLRPAGE2
.5 >PULLA Pull Y
tax
lda BASEL,x setup line Base Ptr
sta ZPBASE
lda BASEH,x
sta ZPBASE+1
lda (ZPBASE),y
eor Mono.Masks,x
sta (ZPBASE),y
rts
*--------------------------------------
SETPIXEL.1 lsr
bcc SETPIXEL.COLOR
>PULLYA Y=X.LO,A=X.HI
lsr if 256 =< x < 511
bcs .1
lsr
bcs .2 if 512 < x
lda DIV7.0,y
ldx MOD7.0,y
bra .3
.1 lda DIV7.256,y
ldx MOD7.256,y
bra .3
.2 lda DIV7.512,y
ldx MOD7.512,y
.3 lsr
tay
bcs .4 odd=main ram
sta SETPAGE2
bra .5
.4 sta CLRPAGE2
.5 phx
>PULLA Pull Y >PULLA Pull Y
tax tax
lda BASEL,x setup line Base Ptr lda BASEL,x setup line Base Ptr
sta ZPBASE sta ZPBASE
lda BASEH,x lda BASEH,x
sta ZPBASE+1 sta ZPBASE+1
plx
sta SET80STORE and prepare for page switching
sta SETHIRES >PULLA Pull Color
plx get back MOD in x
>PULLA Pull Mode
and #$FF
bpl SETPIXEL.SOLID
SETPIXEL.XOR tya
lsr
tay
bcs .1 odd=main ram
sta SETPAGE2
bra .2
.1 sta CLRPAGE2
.2 lda (ZPBASE),y
eor Mono.Masks,x
sta (ZPBASE),y
rts
*--------------------------------------
* A=Mode,X=MOD,Y=DIV
*--------------------------------------
SETPIXEL.SOLID dec
bne SETPIXEL.COLOR
tya
lsr
tay
bcs .1 odd=main ram
sta SETPAGE2
bra .2
.1 sta CLRPAGE2
.2 >PULLA get COLOR
lsr lsr
bcs .3 set white pixel bcs .6 set white pixel
lda (ZPBASE),y lda (ZPBASE),y
and Mono.NMasks,x includes And $7F for mono and Mono.NMasks,x includes And $7F for mono
sta (ZPBASE),y sta (ZPBASE),y
rts rts
.3 lda (ZPBASE),y .6 lda (ZPBASE),y
and #$7F switch back this byte to mono and #$7F switch back this byte to mono
ora Mono.Masks,x ora Mono.Masks,x
sta (ZPBASE),y sta (ZPBASE),y
rts rts
*-------------------------------------- *--------------------------------------
* X=MOD,Y=DIV SETPIXEL.COLOR >PULLA Get X.LO...
*-------------------------------------- pha
SETPIXEL.COLOR tya >PULLB GBYTE Get X.HI in temp location
lsr Divide Col by 2 to get in range 0->39 pla
and #$FE make it 0->38 as color mask on 4 bytes lsr GBYTE divide by 4 (range 0->139)
clc ror
lsr GBYTE
ror
tay
>PULLA Pull Y
tax
lda BASEL,x setup line Base Ptr
sta ZPBASE
lda BASEH,x
sta ZPBASE+1
lda DIV7.0,y
asl Carry Cleared, by ASL
adc ZPBASE ZPBASE now point to first of the 4 columns adc ZPBASE ZPBASE now point to first of the 4 columns
sta ZPBASE sta ZPBASE
ldx MOD7.0,y
txa get MOD txa get MOD
asl times 4 to compute index in color tables asl times 4 to compute index in color tables
asl asl
tax set in X for Masks,NMasks tax set in X for Masks,NMasks
>PULLA get COLOR >PULLA get COLOR
asl asl
asl asl
tay tay
@ -310,7 +329,68 @@ FILLREC
BITBLT BITBLT
rts rts
*-------------------------------------- *--------------------------------------
CS.END DRV.CS.END
*--------------------------------------
Mono.NMasks .DA #%01111110
.DA #%01111101
.DA #%01111011
.DA #%01110111
.DA #%01101111
.DA #%01011111
.DA #%00111111
*--------------------------------------
Mono.Masks .DA #%00000001
.DA #%00000010
.DA #%00000100
.DA #%00001000
.DA #%00010000
.DA #%00100000
.DA #%01000000
*--------------------------------------
* bits to "and" to reset color of pixel (0 means nothing to do)
*--------------------------------------
* c1110000 c3322221 c5444433 c6666555
Color.NMasks .DA #%01110000,#%00000000,#%00000000,#%00000000
.DA #%00001111,#%01111110,#%00000000,#%00000000
.DA #%00000000,#%01100001,#%00000000,#%00000000
.DA #%00000000,#%00011111,#%01111100,#%00000000
.DA #%00000000,#%00000000,#%01000011,#%00000000
.DA #%00000000,#%00000000,#%00111111,#%01111000
.DA #%00000000,#%00000000,#%00000000,#%00000111
*--------------------------------------
* bits to "and" to Get color of pixel (0 means nothing to do)
* 4 bytes * 7 mods
*--------------------------------------
* c1110000 c3322221 c5444433 c6666555
Color.Masks .DA #%10001111,#%00000000,#%00000000,#%00000000
.DA #%11110000,#%00000001,#%00000000,#%00000000
.DA #%00000000,#%10011110,#%00000000,#%00000000
.DA #%00000000,#%11100000,#%00000011,#%00000000
.DA #%00000000,#%00000000,#%10111100,#%00000000
.DA #%00000000,#%00000000,#%11000000,#%00000111
.DA #%00000000,#%00000000,#%00000000,#%11111000
*--------------------------------------
* bits to "ora" to set color of pixel (including "color bit set" for byte hosting bit0)
* 4 bytes * 16 Colors
*--------------------------------------
* c1110000 c3322221 c5444433 c6666555
Color.Pixels .DA #%00000000,#%00000000,#%00000000,#%00000000 black (color bit disable)
.DA #%10010001,#%10100010,#%11000100,#%10001000 dark blue
.DA #%10100010,#%11000100,#%10001000,#%10010001 dark green
.DA #%10110011,#%11100110,#%11001100,#%10011001 medium blue
.DA #%11000100,#%10001000,#%10010001,#%10100010 brown
.DA #%11010101,#%10101010,#%11010101,#%10101010 grey2
.DA #%11100110,#%11001100,#%10011001,#%10110011 green
.DA #%11110111,#%11101110,#%11011101,#%10111011 aqua
.DA #%10001000,#%10010001,#%10100010,#%11000100 Magenta
.DA #%10011001,#%10110011,#%11100110,#%11001100 violet
.DA #%10101010,#%11010101,#%10101010,#%11010101 grey1
.DA #%10111011,#%11110111,#%11101110,#%11011101 light blue
.DA #%11001100,#%10011001,#%10110011,#%11100110 orange
.DA #%11011101,#%10111011,#%11110111,#%11101110 pink
.DA #%11101110,#%11011101,#%10111011,#%11110111 yellow
.DA #%01111111,#%01111111,#%01111111,#%01111111 white (color bit disable)
*--------------------------------------
DIV7.0 .HS 0000000000000001010101010101 DIV7.0 .HS 0000000000000001010101010101
.HS 0202020202020203030303030303 .HS 0202020202020203030303030303
.HS 0404040404040405050505050505 .HS 0404040404040405050505050505
@ -447,98 +527,12 @@ BASEH .HS 20.24.28.2C.30.34.38.3C
.HS 23.27.2B.2F.33.37.3B.3F .HS 23.27.2B.2F.33.37.3B.3F
.HS 23.27.2B.2F.33.37.3B.3F .HS 23.27.2B.2F.33.37.3B.3F
*-------------------------------------- *--------------------------------------
Mono.NMasks .DA #%01111110
.DA #%01111101
.DA #%01111011
.DA #%01110111
.DA #%01101111
.DA #%01011111
.DA #%00111111
*--------------------------------------
Mono.Masks .DA #%00000001
.DA #%00000010
.DA #%00000100
.DA #%00001000
.DA #%00010000
.DA #%00100000
.DA #%01000000
*--------------------------------------
* bits to "and" to reset color of pixel (0 means nothing to do)
*--------------------------------------
Color.NMasks .DA #%01110000,#%00000000,#%00000000,#%00000000
.DA #%00001111,#%01111110,#%00000000,#%00000000
.DA #%00000000,#%01100001,#%00000000,#%00000000
.DA #%00000000,#%00011111,#%01111100,#%00000000
.DA #%00000000,#%00000000,#%01000011,#%00000000
.DA #%00000000,#%00000000,#%00111111,#%01111000
.DA #%00000000,#%00000000,#%00000000,#%00000111
*--------------------------------------
* bits to "and" to Get color of pixel (0 means nothing to do)
* 4 bytes * 7 mods
*--------------------------------------
Color.Masks.DEL .DA #%00001111,#%00000000,#%00000000,#%00000000 (nothing to do)
.DA #%01110000,#%00000001,#%00000000,#%00000000 asl0,asl0,rol1,asl0,rol1,asl0,rol1
.DA #%00000000,#%00011110,#%00000000,#%00000000 lsr1
.DA #%00000000,#%01100000,#%00000011,#%00000000 asl1,asl1,rol2,asl1,rol2
.DA #%00000000,#%00000000,#%00111100,#%00000000 lsr2,lsr2
.DA #%00000000,#%00000000,#%01000000,#%00000111 asl2,asl2,rol3
.DA #%00000000,#%00000000,#%00000000,#%01111000 lsr3,lsr3,lsr3
*--------------------------------------
Color.Masks .DA #%10001111,#%00000000,#%00000000,#%00000000
.DA #%11110000,#%00000001,#%00000000,#%00000000
.DA #%00000000,#%10011110,#%00000000,#%00000000
.DA #%00000000,#%11100000,#%00000011,#%00000000
.DA #%00000000,#%00000000,#%10111100,#%00000000
.DA #%00000000,#%00000000,#%11000000,#%00000111
.DA #%00000000,#%00000000,#%00000000,#%11111000
*--------------------------------------
* bits to "ora" to set color of pixel (including "color bit set " for byte hosting bit0)
* 4 bytes * 16 Colors
* pixel masks c1110000.c3322221.c5444433.c6666555
*--------------------------------------
Color.Pixels .DA #%00000000,#%00000000,#%00000000,#%00000000 (color bit disable)
.DA #%10010001,#%10100010,#%11000100,#%10001000
.DA #%10100010,#%11000100,#%10001000,#%10010001
.DA #%10110011,#%11100110,#%11001100,#%10011001
.DA #%11000100,#%10001000,#%10010001,#%10100010
.DA #%11010101,#%10101010,#%11010101,#%10101010
.DA #%11100110,#%11001100,#%10011001,#%10110011
.DA #%11110111,#%11101110,#%11011101,#%10111011
.DA #%10001000,#%10010001,#%10100010,#%11000100
.DA #%10011001,#%10110011,#%11100110,#%11001100
.DA #%10101010,#%11010101,#%10101010,#%11010101
.DA #%10111011,#%11110111,#%11101111,#%11011101
.DA #%11001100,#%10011001,#%10110011,#%11100110
.DA #%11011101,#%10111011,#%11110111,#%11101110
.DA #%11101110,#%11011101,#%10111011,#%11110111
.DA #%01111111,#%01111111,#%01111111,#%01111111 (color bit disable)
*Black 00 00 00 00 0000
*Magenta 08 11 22 44 0001
*Brown 44 08 11 22 0010
*Orange 4C 19 33 66 0011
*Dark Green 22 44 08 11 0100
*Grey1 2A 55 2A 55 0101
*Green 66 4C 19 33 0110
*Yellow 6E 5D 3B 77 0111
*Dark Blue 11 22 44 08 1000
*Violet 19 33 66 4C 1001
*Grey2 55 2A 55 2A 1010
*Pink 5D 3B 77 6E 1011
*Medium Blue 33 66 4C 19 1100
*Light Blue 3B 77 6E 5D 1101
*Aqua 77 6E 5D 3B 1110
*White 7F 7F 7F 7F 1111
*--------------------------------------
DEVNAME >PSTRING "GFX"
GBYTE .BS 1 GBYTE .BS 1
*-------------------------------------- *--------------------------------------
DS.START DEVINFO .DA #S.DEVINFO.TYPE.GFX type of DEVINFO STRUCT
DEVINFO .DA #S.DEV.F.GFX type of DEVINFO STRUCT
DEVINFO.MODES .DA #%10000011 XOR,16 & B/W DEVINFO.MODES .DA #%10000011 XOR,16 & B/W
DEVINFO.W .DA 560 X.SIZE DEVINFO.W .DA 560 X.SIZE
DEVINFO.H .DA 192 Y.SIZE DEVINFO.H .DA 192 Y.SIZE
DS.END
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE DRV/DHGR.DRV.S SAVE DRV/DHGR.DRV.S

View File

@ -1,16 +1,17 @@
PR#3 PR#3
PREFIX /A2OSX.BUILD PREFIX /A2OSX.SRC
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6
.LIST OFF .LIST OFF
.OP 65C02 .OP 65C02
.OR $2000 .OR $2000
.TF DRV/MOUSE.DRV .TF /A2OSX.BOOT/DRV/MOUSE.DRV
*-------------------------------------- *--------------------------------------
.INB INC/MACROS.I .INB INC/MACROS.I
.INB INC/IO.I .INB INC/IO.I
.INB INC/A2OSX.I .INB INC/A2OSX.I
.INB INC/A2OSX.API.I
*-------------------------------------- *--------------------------------------
ZPGoMouse .EQ ZPDRV ZPGoMouse .EQ ZPDRV
ZPTmpPtr1 .EQ ZPDRV+2 ZPTmpPtr1 .EQ ZPDRV+2
@ -43,29 +44,30 @@ MOUSESTSx.DOWN .EQ %10000000
MOUSESTSx.LDOWN .EQ %01000000 MOUSESTSx.LDOWN .EQ %01000000
MOUSESTSx.MOVED .EQ %00100000 MOUSESTSx.MOVED .EQ %00100000
*-------------------------------------- *--------------------------------------
* Main DRV entry point * File Header (16 Bytes)
* input :
* X = CMD
* 0 : OPEN
* 2 : GETEVENT
* 4 : OUT
* 6 : CLOSE
*--------------------------------------
* CLD $D8
* JMP (*,x) $7C
* #JMPTABLE
* /JMPTABLE
*-------------------------------------- *--------------------------------------
CS.START cld CS.START cld
jmp (.1,x) jmp Dev.Detect cld,jmp abs=DRV
.1 .DA OPEN .DA #$61 6502,Level 1 (65c02)
.DA GETEVENT .DA #1 DRV Layout Version 1
.DA OUT .DA 0
.DA CLOSE .DA CS.END-CS.START Code Length
.DA 0 end or relocation .DA DEV.HEADER-CS.START Device Header Offset
.DA CS.END-CS.START .DA DRV.CS.START-CS.START Driver Code Offset
.DA DRV.CS.END-DRV.CS.START Drv Code Length
*-------------------------------------- *--------------------------------------
OPEN stz ZPTmpPtr1 * Relocation Table
*--------------------------------------
L.MSG.DETECT .DA MSG.DETECT
L.MSG.DETECT.OK .DA MSG.DETECT.OK
L.MSG.DETECT.KO .DA MSG.DETECT.KO
L.DEV.HEADER.NAME .DA DEV.HEADER.NAME
.DA 0 End Of Reloc Table
*--------------------------------------
Dev.Detect >LDYA L.MSG.DETECT
>SYSCALL SYS.SysScrPPSTRYA
stz ZPTmpPtr1
lda #$C1 lda #$C1
sta ZPTmpPtr1+1 sta ZPTmpPtr1+1
@ -77,44 +79,66 @@ OPEN stz ZPTmpPtr1
bne .3 bne .3
dex dex
bpl .2 bpl .2
bra .10 bra .4
.3 inc ZPTmpPtr1+1 no match, try next slot.... .3 inc ZPTmpPtr1+1 no match, try next slot....
lda ZPTmpPtr1+1 lda ZPTmpPtr1+1
cmp #$C8 cmp #$C8
bne .1 bne .1
>LDYA L.MSG.DETECT.KO
>SYSCALL SYS.SysScrPPSTRYA
lda #DEVMGR.ERRNOHW Not Found in any slot, exiting lda #DEVMGR.ERRNOHW Not Found in any slot, exiting
sec sec
rts rts
.10 lda ZPTmpPtr1+1 .4 lda ZPTmpPtr1+1
sta DEVSLOTCn
and #$0F and #$0F
sta DEVSLOT0n sta DEVSLOT0n
pha
ora #$30 ora #$30
sta DEVNAME+4 sta DEV.HEADER.NAME+4
pla
ora #$C0
sta DEVSLOTCn
asl asl
asl asl
asl asl
asl asl
sta DEVSLOTn0 sta DEVSLOTn0
ldx #0 >LDYA L.MSG.DETECT.OK
ldy #S.DEV.NAME >SYSCALL SYS.SysScrPPSTRYA
>LDYA L.DEV.HEADER.NAME
.4 lda DEVNAME,x >SYSCALL SYS.SysScrPPSTRYA
sta (pDevContext),y clc
cpx DEVNAME rts
beq .5 *--------------------------------------
inx CS.END
iny MSG.DETECT >PSTRING "\nApple II Mouse Driver."
bne .4 MSG.DETECT.OK >PSTRING "\nMouse Card Driver Installed As Device : "
MSG.DETECT.KO >PSTRING "\nMouse Card Not Found."
.5 bit RROMBNK2 Renable ROM to allow MOUSE II firmware *--------------------------------------
* Device Header (16 Bytes)
*--------------------------------------
DEV.HEADER cld
jmp (DRV.CS.START,x)
.DA #S.DEV.F.EVENT
DEV.HEADER.NAME >PSTRING "MOU1" NAME
.HS 00.00
.HS 00.00.00.00
*--------------------------------------
* Driver Code
*--------------------------------------
DRV.CS.START .DA OPEN
.DA GETEVENT
.DA COUT
.DA CLOSE
.DA GETINFO
.DA IRQ
L.DEVINFO .DA DEVINFO
.DA 0 end or relocation
*--------------------------------------
OPEN
* bit RROMBNK2 Renable ROM to allow MOUSE II firmware
php to read IIe ROM ID bytes php to read IIe ROM ID bytes
sei sei
@ -156,19 +180,15 @@ OPEN stz ZPTmpPtr1
jsr GOMOUSE jsr GOMOUSE
pla pla
bpl .6 bpl .1
sta SET80STORE sta SET80STORE
.6 plp .1 plp
lda #S.DEV.F.MOUSE+S.DEV.F.EVENT
sta (pDevContext)
clc clc
rts rts
*-------------------------------------- *--------------------------------------
GETEVENT >PULLW pEvent GETEVENT php
php
sei sei
lda RD80STORE lda RD80STORE
@ -205,7 +225,7 @@ GETEVENT >PULLW pEvent
ora #EVENT.MOUSEMOVE ora #EVENT.MOUSEMOVE
sta (pEvent),y sta (pEvent),y
ldy #S.EVT.DATAW1 .4 ldy #S.EVT.DATAW1
lda MOUSEXLOx,x lda MOUSEXLOx,x
sta (pEvent),y sta (pEvent),y
iny iny
@ -218,7 +238,7 @@ GETEVENT >PULLW pEvent
lda MOUSEYHIx,x lda MOUSEYHIx,x
sta (pEvent),y sta (pEvent),y
.4 pla pla
bpl .5 bpl .5
sta SET80STORE sta SET80STORE
@ -235,7 +255,8 @@ GETEVENT >PULLW pEvent
.9 sec A=0 : no event .9 sec A=0 : no event
rts rts
*-------------------------------------- *--------------------------------------
OUT clc COUT
IRQ sec
rts rts
*-------------------------------------- *--------------------------------------
CLOSE php CLOSE php
@ -247,6 +268,10 @@ CLOSE php
clc clc
rts rts
*-------------------------------------- *--------------------------------------
GETINFO >LDYA L.DEVINFO
clc
rts
*--------------------------------------
GOMOUSE pha GOMOUSE pha
stz ZPGoMouse stz ZPGoMouse
ldx DEVSLOTCn ldx DEVSLOTCn
@ -257,15 +282,15 @@ GOMOUSE pha
pla pla
jmp (ZPGoMouse) jmp (ZPGoMouse)
*-------------------------------------- *--------------------------------------
CS.END DRV.CS.END
DEVSIG.Offset .HS 05070B0CFB DEVSIG.Offset .HS 05070B0CFB
DEVSIG.Value .HS 38180120D6 DEVSIG.Value .HS 38180120D6
DEVSIG.Length .EQ DEVSIG.Value-DEVSIG.Offset DEVSIG.Length .EQ DEVSIG.Value-DEVSIG.Offset
DEVNAME >PSTRING "MOU0"
DEVSLOT0n .BS 1 DEVSLOT0n .BS 1
DEVSLOTCn .BS 1 DEVSLOTCn .BS 1
DEVSLOTn0 .BS 1 DEVSLOTn0 .BS 1
*-------------------------------------- *--------------------------------------
DEVINFO .DA #S.DEVINFO.TYPE.XY
MAN MAN
SAVE DRV/MOUSE.DRV.S SAVE DRV/MOUSE.DRV.S
ASM ASM

View File

@ -1,5 +1,5 @@
PR#3 PR#3
PREFIX /A2OSX.BUILD PREFIX /A2OSX.SRC
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6
@ -69,12 +69,12 @@ OPEN stz ZPTmpPtr1
sta DEVNAME+4 sta DEVNAME+4
lda #S.DEV.F.CHAR+S.DEV.F.OUT lda #S.DEV.F.CHAR+S.DEV.F.OUT
sta (DEVMGR.DEVPTR) sta (pDev)
ldy #S.DEV.NAME ldy #S.DEV.NAME
ldx #0 ldx #0
.7 lda DEVNAME,x .7 lda DEVNAME,x
sta (DEVMGR.DEVPTR),y sta (pDev),y
cpx DEVNAME cpx DEVNAME
beq .8 beq .8
inx inx

View File

@ -1,5 +1,5 @@
PR#3 PR#3
PREFIX /A2OSX.BUILD PREFIX /A2OSX.SRC
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6
@ -11,12 +11,46 @@ AUTO 6
.INB INC/MACROS.I .INB INC/MACROS.I
.INB INC/A2OSX.I .INB INC/A2OSX.I
*-------------------------------------- *--------------------------------------
ZPTmpPtr1 .EQ ZPDRV BUF.SIZE .EQ $20
BUF.MASK .EQ $1F
*-------------------------------------- *--------------------------------------
SIG.05 .EQ $38 ZPGoCard .EQ ZPDRV
SIG.07 .EQ $18 ZPTmpPtr1 .EQ ZPDRV+2
SIG.0B .EQ $01 *--------------------------------------
SIG.0C .EQ $31 * Pascal 1.1 Protocol
*--------------------------------------
SSC.INIT .EQ $0D
SSC.READ .EQ $0E
SSC.WRITE .EQ $0F
SSC.STATUS .EQ $10
*--------------------------------------
* SSC/ACIA I/O
*--------------------------------------
SSC.REG.DIPSW1 .EQ $C081 R
SSC.REG.DIPSW2 .EQ $C082 R
SSC.REG.DATA .EQ $C088 R,W
SSC.REG.RESET .EQ $C089 W
SSC.REG.STATUS .EQ $C089 R
SSC.REG.STATUS.IRQ .EQ %10000000
SSC.REG.STATUS.DSR .EQ %01000000
SSC.REG.STATUS.DCD .EQ %00100000
SSC.REG.STATUS.TDRF .EQ %00010000
SSC.REG.STATUS.RDRF .EQ %00001000
SSC.REG.STATUS.OE .EQ %00000100
SSC.REG.STATUS.FE .EQ %00000010
SSC.REG.STATUS.PE .EQ %00000001
SSC.REG.CMD .EQ $C08A W
SSC.REG.CMD.ODDP .EQ %00100000
SSC.REG.CMD.EVENP .EQ %01100000
SSC.REG.CMD.MARKP .EQ %10100000
SSC.REG.CMD.SPACEP .EQ %11100000
SSC.REG.CMD.ECHO .EQ %00010000
SSC.REG.CMD.TE .EQ %00001000
SSC.REG.CMD.TEIRQ .EQ %00000100
SSC.REG.CMD.TBRK .EQ %00001100
SSC.REG.CMD.RIRQDIS .EQ %00000010
SSC.REG.CMD.DTR .EQ %00000001
SSC.REG.CTL .EQ $C08B W
*-------------------------------------- *--------------------------------------
* Main DRV entry point * Main DRV entry point
* input : * input :
@ -25,6 +59,8 @@ SIG.0C .EQ $31
* 2 : GETEVENT * 2 : GETEVENT
* 4 : OUT * 4 : OUT
* 6 : CLOSE * 6 : CLOSE
* 8 : GETINFO
* 10 : IRQ
*-------------------------------------- *--------------------------------------
* CLD $D8 * CLD $D8
* JMP (*,x) $7C * JMP (*,x) $7C
@ -33,53 +69,81 @@ SIG.0C .EQ $31
*-------------------------------------- *--------------------------------------
CS.START cld CS.START cld
jmp (.1,x) jmp (.1,x)
.DA CS.END-CS.START
.DA 0
.1 .DA OPEN .1 .DA OPEN
.DA GETEVENT .DA GETEVENT
.DA OUT .DA OUT
.DA CLOSE .DA CLOSE
.DA GETINFO
L.IRQ .DA IRQ
L.DEVINFO .DA DEVINFO
.DA 0 end or relocation .DA 0 end or relocation
.DA CS.END-CS.START
*-------------------------------------- *--------------------------------------
OPEN stz ZPTmpPtr1 OPEN stz ZPTmpPtr1
lda #$C1 lda #$C1
sta ZPTmpPtr1+1 sta ZPTmpPtr1+1
.1 ldy #5
lda (ZPTmpPtr1),y
cmp #SIG.05
bne .2
ldy #7 .1 ldx #DEVSIG.Length-1
lda (ZPTmpPtr1),y
cmp #SIG.07
bne .2
ldy #$B
lda (ZPTmpPtr1),y
cmp #SIG.0B
bne .2
ldy #$C
lda (ZPTmpPtr1),y
cmp #SIG.0C
beq .3
.2 inc ZPTmpPtr1+1 .2 ldy DEVSIG.Offset,x
lda (ZPTmpPtr1),y
cmp DEVSIG.Value,x
bne .3
dex
bpl .2
bra .4
.3 inc ZPTmpPtr1+1 no match, try next slot....
lda ZPTmpPtr1+1 lda ZPTmpPtr1+1
cmp #$C8 cmp #$C8
bne .1 bne .1
beq .99
.3 lda ZPTmpPtr1+1 lda #DEVMGR.ERRNOHW Not Found in any slot, exiting
sec
rts
.4 lda ZPTmpPtr1+1
sta DEVSLOTCn
and #$0F and #$0F
sta DEVSLOT sta DEVSLOT0n
ora #$30 ora #$30
sta DEVNAME+4 sta DEVNAME+4
asl
asl
asl
asl
sta DEVSLOTn0
lda #S.DEV.F.CHAR+S.DEV.F.OUT * ldy #SSC.INIT
sta (pDevContext) * jsr GoCard
ldy #S.DEV.NAME ldx DEVSLOTn0
stz SSC.REG.RESET,x
lda #$1E
sta SSC.REG.CTL,x
stz INBUF.PTR
stz INBUF.CNT
stz OUTBUF.PTR
stz OUTBUF.CNT
>PUSHW L.IRQ
>PUSHBI 4
>SYSCALL SYS.MLIAllocIRQ
bcs *
php
sei
ldx DEVSLOTn0
lda #SSC.REG.CMD.TEIRQ+SSC.REG.CMD.DTR
sta SSC.REG.CMD,x
lda SSC.REG.STATUS,x clear any IRQ pending
plp
ldx #0 ldx #0
ldy #S.DEV.NAME
.7 lda DEVNAME,x .7 lda DEVNAME,x
sta (pDevContext),y sta (pDevContext),y
cpx DEVNAME cpx DEVNAME
@ -87,25 +151,166 @@ OPEN stz ZPTmpPtr1
inx inx
iny iny
bne .7 bne .7
lda #S.DEV.F.CHAR+S.DEV.F.OUT+S.DEV.F.EVENT
sta (pDevContext)
.8 clc .8 clc
rts rts
.99 lda #DEVMGR.ERRNOHW
sec
rts
*-------------------------------------- *--------------------------------------
GETEVENT lda #0 GETEVENT >PULLW pEvent
php
sei
lda INBUF.CNT
beq .9
ldx INBUF.PTR
lda INBUF,x
ldy #S.EVT.DATA
sta (pEvent),y
iny
lda #0
sta (pEvent),y
lda #S.EVT.F.KEY
sta (pEvent)
inx
cpx #BUF.SIZE
bne .1
ldx #0
.1 stx INBUF.PTR
dec INBUF.CNT
plp
clc
rts
.9 plp
lda #0
sec sec
rts rts
*-------------------------------------- *--------------------------------------
OUT clc OUT php
sei
ldx DEVSLOTn0
lda SSC.REG.STATUS,x
and #SSC.REG.STATUS.DCD+SSC.REG.STATUS.DSR
beq .9
ldx OUTBUF.CNT
cpx #BUF.SIZE
beq .9
>PULLA
ldx OUTBUF.PTR
sta OUTBUF,x
inx
cpx #BUF.SIZE
bne .1
ldx #0
.1 stx OUTBUF.PTR
inc OUTBUF.CNT
plp
clc
rts
.9 >PULLA
plp
sec
rts rts
*-------------------------------------- *--------------------------------------
CLOSE clc CLOSE clc
rts rts
*-------------------------------------- *--------------------------------------
GETINFO >LDYA L.DEVINFO
clc
rts
*--------------------------------------
* IRQ Handler
* on exit, CS if handled
*--------------------------------------
IRQ cld
ldx DEVSLOTn0
lda SSC.REG.STATUS,x IRQ from this device ?
* bpl .9 no, exit
pha save status ...
and #SSC.REG.STATUS.RDRF incoming char?
beq .1
ldy SSC.REG.DATA,x read data to clear IRQ
lda INBUF.CNT
cmp #BUF.SIZE
beq .1 buffer full, discard
phy
clc
adc INBUF.PTR
and #BUF.MASK
tay
pla get back data
sta INBUF,y
inc INBUF.CNT
.1 pla get back status
and #SSC.REG.STATUS.TDRF
beq .8
lda OUTBUF.CNT something to transmit ?
beq .8 no, exit
clc
adc OUTBUF.PTR
and #BUF.MASK
tay
lda OUTBUF,Y
sta SSC.REG.DATA,x
dec INBUF.CNT
.8 clc
rts
.9 sec
rts
*--------------------------------------
* PRIVATE
*--------------------------------------
GOCARD sta $CFFF Prevent SSC firmware bug
pha
stz ZPGoCard
ldx DEVSLOTCn
stx ZPGoCard+1
lda (ZPGoCard),y
sta ZPGoCard
ldy DEVSLOTn0
pla
jmp (ZPGoCard)
*--------------------------------------
CS.END CS.END
DEVSIG.Offset .HS 05070B0C
DEVSIG.Value .HS 38180131
DEVSIG.Length .EQ DEVSIG.Value-DEVSIG.Offset
DEVNAME >PSTRING "COM0" DEVNAME >PSTRING "COM0"
DEVSLOT .BS 1 DEVSLOT0n .BS 1
DEVSLOTCn .BS 1
DEVSLOTn0 .BS 1
INBUF.PTR .BS 1
INBUF.CNT .BS 1
OUTBUF.PTR .BS 1
OUTBUF.CNT .BS 1
INBUF .BS BUF.SIZE
OUTBUF .BS BUF.SIZE
DEVINFO .DA #S.DEV.F.CHAR+S.DEV.F.OUT+S.DEV.F.EVENT
.DA #0
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE DRV/SSC.DRV.S SAVE DRV/SSC.DRV.S

View File

@ -1,16 +1,17 @@
PR#3 PR#3
PREFIX /A2OSX.BUILD PREFIX /A2OSX.SRC
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6
.LIST OFF .LIST OFF
.OP 65C02 .OP 65C02
.OR $2000 .OR $2000
.TF DRV/UTHERNET.DRV .TF /A2OSX.BOOT/DRV/UTHERNET.DRV
*-------------------------------------- *--------------------------------------
.INB INC/MACROS.I .INB INC/MACROS.I
.INB INC/A2OSX.I .INB INC/A2OSX.I
* .INB INC/ZP.I .INB INC/A2OSX.API.I
.INB INC/KERNEL.I
*-------------------------------------- *--------------------------------------
ZPTmpPTR .EQ ZPDRV ZPTmpPTR .EQ ZPDRV
*-------------------------------------- *--------------------------------------
@ -110,39 +111,28 @@ ERRTNOFRAME .EQ 0
ERRNOBUFFER .EQ 1 ERRNOBUFFER .EQ 1
ERRTIMEOUT .EQ 2 ERRTIMEOUT .EQ 2
*-------------------------------------- *--------------------------------------
* Main DRV entry point * File Header (16 Bytes)
* input :
* X = CMD
* 0 : OPEN
* 2 : GETEVENT
* 4 : OUT
* 6 : CLOSE
* 8 : GETINFO
*--------------------------------------
* CLD $D8
* JMP (*,x) $7C
* #JMPTABLE
* /JMPTABLE
*-------------------------------------- *--------------------------------------
CS.START cld CS.START cld
jmp (.1,x) jmp Dev.Detect cld,jmp abs=DRV
.1 .DA OPEN .DA #$61 6502,Level 1 (65c02)
.DA GETEVENT .DA #1 DRV Layout Version 1
.DA OUT .DA 0
.DA CLOSE .DA CS.END-CS.START Code Length
.DA GETINFO .DA DEV.HEADER-CS.START Device Header Offset
L.DEVINFO .DA DEVINFO .DA DRV.CS.START-CS.START Driver Code Offset
.DA 0 end or relocation .DA DRV.CS.END-DRV.CS.START Drv Code Length
.DA CS.END-CS.START Code Length To Relocate
.DA DS.END-DS.START Data Segment to Allocate
*-------------------------------------- *--------------------------------------
* input : * Relocation Table
* none *--------------------------------------
* output : L.MSG.DETECT .DA MSG.DETECT
* CC on success .DA 0 End Of Reloc Table
* CS on error *--------------------------------------
*-------------------------------------- Dev.Detect sta hArgs
OPEN ldx #$10 >LDYA L.MSG.DETECT
>SYSCALL SYS.SysScrPPSTRYA
ldx #$10
.1 stx DEVSLOTx0 .1 stx DEVSLOTx0
>LDYAI PP.ID >LDYAI PP.ID
>STYA PacketPagePTR,x >STYA PacketPagePTR,x
@ -151,18 +141,21 @@ OPEN ldx #$10
bne .2 bne .2
cmp /DEVID cmp /DEVID
beq .3 beq .3
.2 inc DEVNAME+4
.2 inc DEV.HEADER.NAME+4
txa txa
clc clc
adc #$10 adc #$10
tax tax
cpx #$80 cpx #$80
bne .1 bne .1
lda #DEVMGR.ERRNOHW lda #DEVMGR.ERRNOHW
sec sec
rts rts
.3 ldy #S.DEV.hARGS
lda (pDevContext),y .3 lda hARGS
beq .4 beq .4
>SYSCALL SYS.GetMemPtrA >SYSCALL SYS.GetMemPtrA
>STYA ZPTmpPTR >STYA ZPTmpPTR
@ -172,8 +165,93 @@ OPEN ldx #$10
sec sec
rts rts
.4 jsr Reset .4 clc
rts
*--------------------------------------
DecodeMac lda (ZPTmpPTR)
cmp #12
bne .9
ldy #1
ldx #0
.1 lda (ZPTmpPTR),y
jsr Asc2NibbleA
bcs .9
asl
asl
asl
asl
sta MAC,x
iny
lda (ZPTmpPTR),y
jsr Asc2NibbleA
bcs .9
ora MAC,x
sta MAC,x
inx
iny
cpy #13
bne .1
clc
rts
.9 sec
rts
*--------------------------------------
Asc2NibbleA cmp #$30
bcc .9
cmp #$3A
bcs .1
and #$0F
clc
rts
.1 cmp #$41
bcc .9
cmp #$47
bcs .9
sbc #$36
clc
rts
.9 sec
rts
*--------------------------------------
CS.END
MSG.DETECT >PSTRING "\nUtherNet/CS8900A Driver."
hArgs .BS 1
*--------------------------------------
* Device Header (16 Bytes)
*--------------------------------------
DEV.HEADER cld
jmp (DRV.CS.START,x)
.DA #S.DEV.F.SHARE+S.DEV.F.EVENT
DEV.HEADER.NAME >PSTRING "ETH1" NAME
.HS 00.00
.HS 00.00.00.00
*--------------------------------------
* Driver Code
*--------------------------------------
DRV.CS.START .DA OPEN
.DA GETEVENT
.DA $FFFF no COUT
.DA CLOSE
.DA GETINFO
.DA $FFFF no IRQ
.DA SEND
L.DEVINFO .DA DEVINFO
.DA 0 end or relocation
*--------------------------------------
* input :
* none
* output :
* CC on success
* CS on error
*--------------------------------------
OPEN jsr Reset
>LDYAI PP.RxCTL >LDYAI PP.RxCTL
>STYA PacketPagePTR,x >STYA PacketPagePTR,x
>LDYAI PP.RxCTL.LID+PP.RxCTL.RxOKA+PP.RxCTL.IA+PP.RxCTL.BroadcastA >LDYAI PP.RxCTL.LID+PP.RxCTL.RxOKA+PP.RxCTL.IA+PP.RxCTL.BroadcastA
@ -197,18 +275,7 @@ OPEN ldx #$10
>LDYAI PP.LineCTL.LID+PP.LineCTL.SerRxOn+PP.LineCTL.SerTxOn+PP.LineCTL.Auto >LDYAI PP.LineCTL.LID+PP.LineCTL.SerRxOn+PP.LineCTL.SerTxOn+PP.LineCTL.Auto
>STYA PacketPageDATA,x >STYA PacketPageDATA,x
lda #S.DEV.F.NET+S.DEV.F.EVENT+S.DEV.F.OUT clc
sta (pDevContext)
ldy #S.DEV.NAME
ldx #0
.7 lda DEVNAME,x
sta (pDevContext),y
cpx DEVNAME
beq .8
inx
iny
bne .7
.8 clc
rts rts
*-------------------------------------- *--------------------------------------
* input : * input :
@ -217,8 +284,7 @@ OPEN ldx #$10
* CC no event * CC no event
* CS event * CS event
*-------------------------------------- *--------------------------------------
GETEVENT >PULLW pEvent GETEVENT ldx DEVSLOTx0
ldx DEVSLOTx0
>LDYAI PP.RxEvent >LDYAI PP.RxEvent
>STYA PacketPagePTR,x >STYA PacketPagePTR,x
>LDYA PacketPageDATA,x >LDYA PacketPageDATA,x
@ -237,7 +303,7 @@ GETEVENT.RxOK
>LDYA RTDATA,x get RxLength >LDYA RTDATA,x get RxLength
>STYA FRAMELEN >STYA FRAMELEN
>PUSHYA >PUSHYA
>PUSHB 0 >PUSHBI 0
>SYSCALL SYS.GetMem >SYSCALL SYS.GetMem
bcs .99 bcs .99
>STYA ZPTmpPTR >STYA ZPTmpPTR
@ -254,6 +320,7 @@ GETEVENT.RxOK
sta (pEvent) sta (pEvent)
ldy #0 ldy #0
ldx DEVSLOTx0 ldx DEVSLOTx0
.1 lda RTDATA,x .1 lda RTDATA,x
sta (ZPTmpPTR),y sta (ZPTmpPTR),y
iny iny
@ -267,13 +334,26 @@ GETEVENT.RxOK
bne .3 bne .3
inc ZPTmpPTR+1 inc ZPTmpPTR+1
.3 jsr DecFrameLen .3 jsr DecFrameLen
beq .8 bne .1
bra .1
.8 clc .8 clc
rts rts
.99 sec .99 sec
rts rts
*--------------------------------------
CLOSE jsr Reset
clc
rts
*--------------------------------------
* in:
* out:
* Y,A = BUFFER PTR
* CC on success
* CS on error
*--------------------------------------
GETINFO >LDYA L.DEVINFO
clc
rts
*-------------------------------------- *--------------------------------------
* in: * in:
* PULLW = FRAME PTR * PULLW = FRAME PTR
@ -282,7 +362,7 @@ GETEVENT.RxOK
* CC on success * CC on success
* CS on error * CS on error
*-------------------------------------- *--------------------------------------
OUT >PULLW ZPTmpPTR SEND >PULLW ZPTmpPTR
>PULLW FRAMELEN >PULLW FRAMELEN
ldy #11 Add Src MAC Address ldy #11 Add Src MAC Address
@ -341,20 +421,6 @@ SENDPREADY ldy #0
.8 clc .8 clc
rts rts
*-------------------------------------- *--------------------------------------
CLOSE jsr Reset
clc
rts
*--------------------------------------
* in:
* out:
* Y,A = BUFFER PTR
* CC on success
* CS on error
*--------------------------------------
GETINFO >LDYA L.DEVINFO
clc
rts
*--------------------------------------
* PRIVATE * PRIVATE
*-------------------------------------- *--------------------------------------
Reset ldx DEVSLOTx0 Reset ldx DEVSLOTx0
@ -363,74 +429,25 @@ Reset ldx DEVSLOTx0
>LDYAI PP.SelfCTL.LID+PP.SelfCTL.RESET >LDYAI PP.SelfCTL.LID+PP.SelfCTL.RESET
>STYA PacketPageDATA,x >STYA PacketPageDATA,x
rts rts
*--------------------------------------
DecodeMac lda (ZPTmpPTR)
cmp #12
bne .9
ldy #1
ldx #0
.1 lda (ZPTmpPTR),y
jsr Asc2NibbleA
bcs .9
asl
asl
asl
asl
sta MAC,x
iny
lda (ZPTmpPTR),y
jsr Asc2NibbleA
bcs .9
ora MAC,x
sta MAC,x
inx
iny
cpy #13
bne .1
clc
rts
.9 sec
rts
*--------------------------------------
Asc2NibbleA cmp #$30
bcc .9
cmp #$3A
bcs .1
and #$0F
clc
rts
.1 cmp #$41
bcc .9
cmp #$47
bcs .9
sbc #$36
clc
rts
.9 sec
rts
*-------------------------------------- *--------------------------------------
DecFrameLen lda FRAMELEN DecFrameLen lda FRAMELEN
bne .1 bne .1
lda FRAMELEN+1 lda FRAMELEN+1
beq .2 beq .8
dec FRAMELEN+1 dec FRAMELEN+1
.1 dec FRAMELEN .1 dec FRAMELEN
.2 lda FRAMELEN lda #1 Make something NZ
ora FRAMELEN+1 .8 rts
rts
*-------------------------------------- *--------------------------------------
CS.END DRV.CS.END
DEVNAME >PSTRING "ETH1"
*--------------------------------------
DS.START
*-------------------------------------- *--------------------------------------
DEVSLOTx0 .BS 1 DEVSLOTx0 .BS 1
FRAMELEN .BS 2 FRAMELEN .BS 2
*-------------------------------------- *--------------------------------------
DEVINFO DEVINFO .DA #S.DEVINFO.TYPE.NET
MAC .BS 6 MAC .BS 6
*-------------------------------------- LINK.STATUS .BS 1
DS.END LINK.SPEED .BS 1 SPEED/DUPLEX
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE DRV/UTHERNET.DRV.S SAVE DRV/UTHERNET.DRV.S

View File

@ -1,5 +1,5 @@
PR#3 PR#3
PREFIX /A2OSX.BUILD PREFIX /A2OSX.BOOT
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6

268
INC/A2osX.API.I.txt Normal file
View 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

View File

@ -1,258 +1,77 @@
PR#3 PR#3
PREFIX /A2OSX.BUILD PREFIX /A2OSX.SRC
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6
.LIST OFF .LIST OFF
*-------------------------------------- *--------------------------------------
* KERNEL Reserved ZP Location 00-1F,56-FF * Aux ZP
*-------------------------------------- *--------------------------------------
ZPQuickPtr1 .EQ $90 Temp Ptrs for use in very limited scope ZPQuickPtr1 .EQ $0 Temp Ptrs for use in very limited scope
ZPQuickPtr2 .EQ $92 (could be trashed by any JSR) ZPQuickPtr2 .EQ $2 (could be trashed by any JSR)
ZPQuickPtr3 .EQ $94 ZPQuickPtr3 .EQ $4
ZPQuickPtr4 .EQ $96 ZPQuickPtr4 .EQ $6
ZPLIB .EQ $A0 Main pCode .EQ $10
ZPDRV .EQ $B0 Main pData .EQ $12
ZPBIN .EQ $C0 Main pStack .EQ $14
*--------------------------------------
pPsContext .EQ $F0
pDevContext .EQ $F2
pEvent .EQ $F4
*--------------------------------------
R.SP .EQ $FE Main
*--------------------------------------
* A2OS.SYSCALL Functions Indexes
*--------------------------------------
SYS.GetMem .EQ $00
SYS.FreeMemA .EQ $02
SYS.ClrMemA .EQ $04
SYS.GetMemPtrA .EQ $06
SYS.GetMemLenA .EQ $08 pLib .EQ $16
SYS.GetMemByIDA .EQ $0A pDev .EQ $18
SYS.GetMemByNameA .EQ $0C
*--------------------------------------
SYS.NewPStr .EQ $10
SYS.PStrCpyA .EQ $12
SYS.PStrCat .EQ $14
SYS.PStrCmp .EQ $16
SYS.PStrGetTkn .EQ $18 pEvent .EQ $1A
SYS.GetPStrIndex .EQ $1A pPs .EQ $1C
*--------------------------------------
SYS.LoadBinA .EQ $20
SYS.LoadLib .EQ $22
SYS.UnloadLibA .EQ $24
SYS.LoadDrvA .EQ $26
*--------------------------------------
SYS.ExpandPStrA .EQ $30
SYS.ExpandPStr .EQ $32
SYS.GetEnvVarH .EQ $34
SYS.GetEnvVarP .EQ $36
SYS.SetEnvVarH .EQ $38 ZPDRV .EQ $80
SYS.SetEnvVarP .EQ $3A ZPBIN .EQ $90
ZPLIB .EQ $A0
*-------------------------------------- *--------------------------------------
SYS.MLICreate .EQ $40 * $C0 -> $FF KERNEL RESERVED
SYS.MLIDestroy .EQ $42
SYS.MLIRename .EQ $44
SYS.MLISetFileInfo .EQ $46
SYS.MLIGetFileInfoA .EQ $48
SYS.MLIOnline .EQ $4A
SYS.MLISetPrefix .EQ $4C
SYS.MLIGetPrefixA .EQ $4E
SYS.MLIOpenA .EQ $50
SYS.MLINewLine .EQ $52
SYS.MLIRead .EQ $54
SYS.MLIWrite .EQ $56
SYS.MLICloseA .EQ $58
SYS.MLIFlushA .EQ $5A
SYS.MLISetMark .EQ $5C
SYS.MLIGetMark .EQ $5E
SYS.MLISetEOF .EQ $60
SYS.MLIGetEOFA .EQ $62
*-------------------------------------- *--------------------------------------
SYS.GetDevByIDA .EQ $70 A2osX.SaveSM .EQ $100 Aux
SYS.GetDevByNameA .EQ $72
SYS.GetDevTable .EQ $74
SYS.GetDevInfoA .EQ $76
SYS.DevOutA .EQ $78
SYS.GetDevByNameYA .EQ $7A
*--------------------------------------
SYS.GetEvent .EQ $80
SYS.DestroyEvent .EQ $82
*--------------------------------------
SYS.ExecProcessA .EQ $90
SYS.CreateProcessA .EQ $92
SYS.GetPSByIDA .EQ $98
*--------------------------------------
SYS.CheckPrefixA .EQ $A0
SYS.FileSearch .EQ $A2
SYS.LoadFileA .EQ $A4
SYS.ListDirInitA .EQ $A6
SYS.ListDirNextA .EQ $A8
SYS.ListDirCloseA .EQ $AA
*--------------------------------------
SYS.AddNetCfg .EQ $B0
SYS.SetNetCfg .EQ $B2
SYS.GetNetCfgA .EQ $B4
SYS.ClrNetCfgA .EQ $B6
*--------------------------------------
SYS.ScreenSelectA .EQ $C0
*--------------------------------------
A2osX.SaveSM .EQ $100 Main
A2osX.SaveSX .EQ $101 Aux A2osX.SaveSX .EQ $101 Aux
*-------------------------------------- *--------------------------------------
* Main $200 -> 2FF : (Reserved, ProDOS,Clock DRV....) * Main $200 -> 2FF : (Used By ProDOS,Clock DRV....)
* Main $300 -> 3EF : <free> * Main $300 -> 3EF : <free>
* Main $3F0 -> 3FF : SYS Vectors (reset,IRQ...) * Main $3F0 -> 3FF : SYS Vectors (reset,IRQ...)
* Aux $200 -> 3FD : /RAM Driver * Aux $200 -> 3FD : /RAM Driver
* Aux $3FE -> 3FF : IRQ Vector * Aux $3FE -> 3FF : IRQ Vector
* Main/Aux $400 -> $7FF : Console Screen
* Main/Aux $800 -> $BFF : System Screen
*-------------------------------------- *--------------------------------------
* Console Screen .EQ $400 -> $7FF TmpBuffer256 .EQ $0200 Main
* System Screen .EQ $800 -> $BFF
*-------------------------------------- *--------------------------------------
TmpBuffer256 .EQ $0C00 D.STACK.BASE .EQ $0300 $03EF...
*-------------------------------------- D.STACK.TOP .EQ $03F0 ...Down to $0300
D.STACKSEG .EQ $0D00 $0DFF Down to $0D00
*--------------------------------------
MLICALL.PARAMS .EQ $0E00 size=$12 (SET_FILE_INFO +1)
*--------------------------------------
MEMMGR.LOMEM .EQ $0E30
MEMMGR.MLLIMIT .EQ $0E32
MEMMGR.MHLIMIT .EQ $0E34
MEMMGR.HIMEM .EQ $0E36
MEMMGR.MFREE .EQ $0E38
MEMMGR.TABLESIZE .EQ $0E3A
*--------------------------------------
Z80STACK .EQ $0FFF (0FFFFh) Down to $0F00
Z80JMP .EQ $1000
*--------------------------------------
DEVMGR.TABLE .EQ $1200 K.DEV.MAX*S.DEV.SIZE=20*12=240
TSKMGR.TABLE .EQ $1300 K.PS.MAX*S.PS.SIZE=32*16=512
*--------------------------------------
A2osX.LOMEM .EQ $1500
*-------------------------------------- *--------------------------------------
* A2osX GLOBAL PAGE * A2osX GLOBAL PAGE
* $BE00->$BE0F : Public JMP * $BE00->$BE0F : Public Vetors
*-------------------------------------- *--------------------------------------
A2osX.SYSCALL .EQ $BE00 A2osX.SYSCALL .EQ $BE00
A2osX.MLICALL .EQ $BE02 A2osX.LIBCALL .EQ $BE02
A2osX.LIBCALL .EQ $BE04 A2osX.SLEEP .EQ $BE04
A2osX.SLEEP .EQ $BE06 A2osX.MLICALL .EQ $BE06
Kernel.MLICALL .EQ $BE08
Kernel.DRVCALL .EQ $BE0A
Kernel.BINCALL .EQ $BE0C
Kernel.LIBCALL .EQ $BE0E
*-------------------------------------- *--------------------------------------
A2osX.SCREENS .EQ $BE10 * $BEE0->$BEFF : Public Variables
A2osX.SCREENS.G .EQ %00000100 *--------------------------------------
A2osX.SCREENS.C .EQ %00000010 A2osX.SCREENS .EQ $BEE0
A2osX.SCREENS.S .EQ %00000001 A2osX.SCREENS.S .EQ %00000001 System Screen
A2osX.ACTIVESCRN .EQ $BE11 A2osX.SCREENS.C .EQ %00000010 Console Screen
A2osX.SCREENS.G .EQ %00000100 Graphic Screen
A2osX.ASCREEN .EQ $BEE1 Active Screen
A2osX.TIMER16 .EQ $BE12 A2osX.CSCREEN.DEV .EQ $BEE2
A2osX.RANDOM16 .EQ $BE14 A2osX.GSCREEN.DEV .EQ $BEE3
A2osX.CPUTYPE .EQ $BE16 A2osX.TIMER16 .EQ $BEE4
A2osX.Z80SLOT .EQ $BE17 A2osX.RANDOM16 .EQ $BEE6
Kernel.JMP .EQ $BE1A A2osX.CPUTYPE .EQ $BEE8
A2osX.SaveA .EQ $BE1C A2osX.Z80SLOT .EQ $BEEA
A2osX.SaveX .EQ $BE1D
A2osX.SaveY .EQ $BE1E
A2osX.GPCODE .EQ $BE20
*-------------------------------------- *--------------------------------------
* MEM STRUCT *** Z80 Reserved ***
*-------------------------------------- *--------------------------------------
S.MEM.F .EQ 0 *** IRQ Handler ***
S.MEM.F.INUSE .EQ %10000000
S.MEM.F.CLEAR .EQ %10000000 Fill with "0"
S.MEM.F.CODE .EQ %01000000
S.MEM.F.NOMOV .EQ %00100000
S.MEM.F.ALIGN .EQ %00010000
S.MEM.F.SPARE .EQ %00001000
S.MEM.F.AUX .EQ %00000100
S.MEM.REFCNT .EQ 1
S.MEM.PTR .EQ 2
S.MEM.LEN .EQ 4
S.MEM.BIN .EQ 6
S.MEM.OWNERPID .EQ 7
*
S.MEM.SIZE .EQ 8
*--------------------------------------
MEMMGR.ERROOM .EQ $FF Out Of Memory Error
MEMMGR.ERROOS .EQ $FE Out Of Slot Error
*--------------------------------------
* DEV STRUCT
*--------------------------------------
S.DEV.F .EQ 0
S.DEV.F.INUSE .EQ %10000000
S.DEV.F.EVENT .EQ %01000000
S.DEV.F.OUT .EQ %00100000
S.DEV.F.MOUSE .EQ %00010000
S.DEV.F.GFX .EQ %00001000
S.DEV.F.NET .EQ %00000100
S.DEV.F.BLOCK .EQ %00000010
S.DEV.F.CHAR .EQ %00000001
S.DEV.ID .EQ 1
S.DEV.NAME .EQ 2 5 Bytes : NUL KBD CON COMx LPTx ETHx
S.DEV.hCS .EQ 7
S.DEV.hDS .EQ 8
S.DEV.hCMD .EQ 9
S.DEV.hARGS .EQ 10
S.DEV.hOWNERPS .EQ 11
*
S.DEV.SIZE .EQ 12
*--------------------------------------
* Generic Driver Functions
*--------------------------------------
DEVMGR.OPEN .EQ 0
DEVMGR.GETEVENT .EQ 2
DEVMGR.OUT .EQ 4
DEVMGR.CLOSE .EQ 6
DEVMGR.GETINFO .EQ 8
*--------------------------------------
* 'GFX' Class Driver Functions
*--------------------------------------
DEVMGR.GFX.SETPIXEL .EQ 10
DEVMGR.GFX.GETPIXEL .EQ 12
*--------------------------------------
DEVMGR.ERRNICL .EQ $EB Invalid Command Line
DEVMGR.ERRNOHW .EQ $EC No Hardware
DEVMGR.ERRDNF .EQ $ED Device Not Found Error
DEVMGR.ERROOS .EQ $EE Out Of Slot Error
*--------------------------------------
* PS STRUCT
*--------------------------------------
S.PS.F .EQ 0
S.PS.F.INUSE .EQ %10000000
S.PS.F.HOLD .EQ %01000000
S.PS.F.EVENT .EQ %00100000
S.PS.ID .EQ 1
S.PS.PID .EQ 2
S.PS.hCS .EQ 3
S.PS.hDS .EQ 4
S.PS.hPREFIX .EQ 5
S.PS.hENV .EQ 6
S.PS.hCMD .EQ 7
S.PS.hARGS .EQ 8
S.PS.hINDEV .EQ 9
S.PS.hOUTDEV .EQ 10
S.PS.hERRDEV .EQ 11
S.PS.CID .EQ 12
S.PS.LASTERROR .EQ 13
S.PS.PC .EQ 14
*
S.PS.SIZE .EQ 16
*-------------------------------------- *--------------------------------------
* LIB Function Indexes * LIB Function Indexes
*-------------------------------------- *--------------------------------------
@ -266,60 +85,5 @@ TSKMGR.RUN .EQ 2
TSKMGR.DOEVENT .EQ 4 TSKMGR.DOEVENT .EQ 4
TSKMGR.QUIT .EQ 6 TSKMGR.QUIT .EQ 6
*-------------------------------------- *--------------------------------------
TSKMGR.ERROOS .EQ $DE Out Of Slot Error
TSKMGR.ERRNSP .EQ $DF No Such Process Error
*--------------------------------------
* EVENT STRUCT
*--------------------------------------
S.EVT.F .EQ 0
S.EVT.F.SYS .EQ %10000000
S.EVT.F.WND .EQ %01000000
S.EVT.F.hMEM2 .EQ %00100000 Indicates That S.EVT.DATAHI is a hMem
S.EVT.F.hMEM1 .EQ %00010000 Indicates That S.EVT.DATALO is a hMem
S.EVT.F.TIMER .EQ %00001000
S.EVT.F.NET .EQ %00000100
S.EVT.F.MOUSE .EQ %00000010
S.EVT.F.KEY .EQ %00000001
S.EVT.hDEV .EQ 1
S.EVT.DATA .EQ 2
S.EVT.DATALO .EQ 2
S.EVT.DATAHI .EQ 3
S.EVT.DATAW1 .EQ 4
S.EVT.DATAW2 .EQ 6
*
S.EVT.SIZE .EQ 8
*--------------------------------------
SYSMGR.ERRENVF .EQ $CB Env is Full
SYSMGR.ERRIDIR .EQ $CC Invalid Directory
SYSMGR.ERRFTB .EQ $CD File Too Big Error
SYSMGR.ERRFNF .EQ $CE File Not Found Error
SYSMGR.ERRSYN .EQ $CF Syntax Error
*--------------------------------------
* S.LISTDIR STRUCT
*--------------------------------------
S.LISTDIR.hONLINE .EQ 0
S.LISTDIR.ONLINEPTR .EQ 1
S.LISTDIR.REFNUM .EQ 2 ref_num file
S.LISTDIR.hIOBUF .EQ 3 hMem to ProDOS IO buffer
S.LISTDIR.hREADBUF .EQ 4 hMem to 512 Read Buffer
S.LISTDIR.EL .EQ 5 entry_length
S.LISTDIR.EIB .EQ 6 ENTRY_INDEX in block
S.LISTDIR.EPB .EQ 7 entry_per_block
S.LISTDIR.BLKPTR .EQ 8 entry PTR in block
S.LISTDIR.FI .EQ 10 FILE_INDEX in DIR
S.LISTDIR.FC .EQ 12 file_count
S.LISTDIR.hPATTERN .EQ 14 Pattern for file filtering
*
S.LISTDIR.SIZE .EQ 16
*--------------------------------------
* S.BUFRDR STRUCT
*--------------------------------------
S.BUFRDR.hMEM .EQ 0
S.BUFRDR.DELIM .EQ 1
S.BUFRDR.LEN .EQ 2
S.BUFRDR.IDX .EQ 4
*
S.BUFRDR.SIZE .EQ 6
*--------------------------------------
MAN MAN
SAVE INC/A2OSX.I SAVE INC/A2OSX.I

View File

@ -1,5 +1,5 @@
PR#3 PR#3
PREFIX /A2OSX.BUILD PREFIX /A2OSX.SRC
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6

View File

@ -1,5 +1,5 @@
PR#3 PR#3
PREFIX /A2OSX.BUILD PREFIX /A2OSX.SRC
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6
@ -7,13 +7,11 @@ AUTO 6
*-------------------------------------- *--------------------------------------
* KERNEL CONSTANTS DEFINITON * KERNEL CONSTANTS DEFINITON
*-------------------------------------- *--------------------------------------
K.BIN.MAGICHEADER .EQ $7CD8
*--------------------------------------
K.TIMER16RESOLUTION .EQ 5 every 5 VBL (50hz), so 100ms K.TIMER16RESOLUTION .EQ 5 every 5 VBL (50hz), so 100ms
*-------------------------------------- *--------------------------------------
K.ENV.SIZE .EQ $100 K.ENV.SIZE .EQ $100
K.DEV.MAX .EQ 20 K.DEV.MAX .EQ 32
K.PS.MAX .EQ 32 K.PS.MAX .EQ 64
*-------------------------------------- *--------------------------------------
K.NETCFG.MAX .EQ 4 K.NETCFG.MAX .EQ 4
K.NETCFG.SIZE .EQ 128 K.NETCFG.SIZE .EQ 128
@ -28,17 +26,31 @@ K.TCPTABLE.SIZE .EQ 16
K.ETH.FRAME.LEN .EQ 1514 K.ETH.FRAME.LEN .EQ 1514
K.IP.TTL .EQ 64 K.IP.TTL .EQ 64
*-------------------------------------- *--------------------------------------
* KERNEL Reserved ZP Location 00-1F,56-FF H.BIN.HEADER .EQ 0
H.BIN.HEADER.DRV65 .EQ $4C8D 6502:cld,jmp abs
H.BIN.HEADER.LIB65 .EQ $7C8D 6502:cld,jmp (abs,x)
H.BIN.HEADER.BIN65 .EQ $7C8D 6502:cld,jmp (abs,x)
H.BIN.HEADER.DRV80 .EQ $A28D Z80:
H.BIN.HEADER.LIB80 .EQ $A28D Z80:
H.BIN.HEADER.BIN80 .EQ $A28D Z80:
H.BIN.JMP .EQ 2
H.BIN.CODE.TYPE .EQ 4
H.BIN.VERSION .EQ 5
H.BIN.CODE.LEN .EQ 8
H.BIN.BIN.DS.SIZE .EQ 10
H.BIN.DEV.HEADER.O .EQ 10
H.BIN.DRV.CODE.O .EQ 12
H.BIN.DRV.CODE.LEN .EQ 14
H.BIN.RELOC.TABLE .EQ 16
*-------------------------------------- *--------------------------------------
DEVMGR.DEVPTR .EQ $80 * KERNEL Reserved ZP (Aux) Location 00-1F,56-FF
EVTMGR.EVTPTR .EQ $82
TSKMGR.TSKPTR .EQ $84
TSKMGR.pNewPS .EQ $86
*-------------------------------------- *--------------------------------------
ZPMemMgr .EQ $D0 Aux ZPMemMgr .EQ $B0
ZPSysScr .EQ $E0 Aux ZPSysScr .EQ $C0
ZPDevMgr .EQ $D0
ZPTskMgr .EQ $E0
*-------------------------------------- *--------------------------------------
R.VCPU16 .EQ $F0 Aux R.VCPU16 .EQ $F0
R.AX .EQ R.VCPU16 R.AX .EQ R.VCPU16
R.AL .EQ R.VCPU16 R.AL .EQ R.VCPU16
R.AH .EQ R.VCPU16+$1 R.AH .EQ R.VCPU16+$1
@ -51,10 +63,27 @@ R.CH .EQ R.VCPU16+$5
R.DX .EQ R.VCPU16+$6 R.DX .EQ R.VCPU16+$6
R.DL .EQ R.VCPU16+$6 R.DL .EQ R.VCPU16+$6
R.DH .EQ R.VCPU16+$7 R.DH .EQ R.VCPU16+$7
*R.CS .EQ R.VCPU16+$8 *--------------------------------------
*R.DS .EQ R.VCPU16+$A MLICALL.PARAMS .EQ $1100
R.LS .EQ R.VCPU16+$C DevMgr.Table .EQ $1200 K.DEV.MAX*S.DEV.SIZE=32*16=512b
*R.SP .EQ R.VCPU16+$E *--------------------------------------
TskMgr.Table .EQ $1400 K.PS.MAX*S.PS.SIZE=64*16=1k
*--------------------------------------
* MemMgr : $1800->$1FFF MAIN/AUX (2 kBytes)
*--------------------------------------
MemMgr.Table .EQ $1800
MemMgr.HiMem .EQ $1800 Slot 0 is Reserved
MemMgr.Free .EQ $1802
MemMgr.LoMem .EQ $1804
MemMgr.LastSlot .EQ $1806
*--------------------------------------
MemMgr.MLoMem .EQ $2000
MemMgr.MHiMem .EQ $BE00
MemMgr.XLoMem .EQ $2000
MemMgr.XHiMem .EQ $C000
*--------------------------------------
KERNEL.COLDBOOT .EQ $D000
KERNEL.SYSCALL .EQ $D003
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE INC/KERNEL.I SAVE INC/KERNEL.I

View File

@ -1,5 +1,5 @@
PR#3 PR#3
PREFIX /A2OSX.BUILD PREFIX /A2OSX.SRC
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6

View File

@ -1,5 +1,5 @@
PR#3 PR#3
PREFIX /A2OSX.BUILD PREFIX /A2OSX.SRC
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6

View File

@ -1,5 +1,5 @@
PR#3 PR#3
PREFIX /A2OSX.BUILD PREFIX /A2OSX.SRC
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6

View File

@ -1,5 +1,5 @@
PR#3 PR#3
PREFIX /A2OSX.BUILD PREFIX /A2OSX.SRC
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6

View File

@ -1,13 +1,13 @@
PR#3 PR#3
PREFIX /A2OSX.BUILD PREFIX /A2OSX.SRC
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6
.LIST OFF .LIST OFF
*-------------------------------------- *--------------------------------------
.MA DEBUG .MA DEBUG
.70 bit $C000 :1 bit $C000
bpl .70 bpl :1
sta $C010 sta $C010
.EM .EM
*-------------------------------------- *--------------------------------------
@ -20,6 +20,12 @@ AUTO 6
*-------------------------------------- *--------------------------------------
.MA MLICALL .MA MLICALL
ldx #]1 ldx #]1
.DO ]1=MLIALLOCIRQ
lda #2
.FIN
.DO ]1=MLIDEALLOCIRQ
lda #1
.FIN
.DO ]1=MLIREADBLOCK .DO ]1=MLIREADBLOCK
lda #3 lda #3
.FIN .FIN
@ -89,78 +95,6 @@ AUTO 6
jsr A2osX.MLICALL jsr A2osX.MLICALL
.EM .EM
*--------------------------------------
.MA KMLICALL
ldx #]1
.DO ]1=MLIREADBLOCK
lda #3
.FIN
.DO ]1=MLIWRITEBLOCK
lda #3
.FIN
.DO ]1=MLICREATE
lda #7
.FIN
.DO ]1=MLIDESTROY
lda #1
.FIN
.DO ]1=MLIRENAME
lda #2
.FIN
.DO ]1=MLISETFILEINFO
lda #7
.FIN
.DO ]1=MLIGETFILEINFO
lda #10
.FIN
.DO ]1=MLIONLINE
lda #2
.FIN
.DO ]1=MLISETPREFIX
lda #1
.FIN
.DO ]1=MLIGETPREFIX
lda #1
.FIN
.DO ]1=MLIOPEN
lda #3
.FIN
.DO ]1=MLINEWLINE
lda #3
.FIN
.DO ]1=MLIREAD
lda #4
.FIN
.DO ]1=MLIWRITE
lda #4
.FIN
.DO ]1=MLICLOSE
lda #1
.FIN
.DO ]1=MLIFLUSH
lda #1
.FIN
.DO ]1=MLISETMARK
lda #2
.FIN
.DO ]1=MLIGETMARK
lda #2
.FIN
.DO ]1=MLISETEOF
lda #2
.FIN
.DO ]1=MLIGETEOF
lda #2
.FIN
.DO ]1=MLISETBUF
lda #2
.FIN
.DO ]1=MLIGETBUF
lda #2
.FIN
jsr Kernel.MLICALL
.EM
*-------------------------------------- *--------------------------------------
.MA DRVCALL .MA DRVCALL
ldy ]1 ldy ]1
@ -168,13 +102,12 @@ AUTO 6
jsr A2osX.DRVCALL jsr A2osX.DRVCALL
.EM .EM
*-------------------------------------- *--------------------------------------
.MA LIBLOADP .MA LOADLIBYA
>PUSHW ]1 ldx #SYS.LoadLibYA
ldx #SYS.LoadLib
jsr A2osX.SYSCALL jsr A2osX.SYSCALL
.EM .EM
*-------------------------------------- *--------------------------------------
.MA LIBLOADA .MA LOADLIBA
ldx #SYS.LoadLibA ldx #SYS.LoadLibA
jsr A2osX.SYSCALL jsr A2osX.SYSCALL
.EM .EM
@ -185,200 +118,111 @@ AUTO 6
jsr A2osX.LIBCALL jsr A2osX.LIBCALL
.EM .EM
*-------------------------------------- *--------------------------------------
* LOCAL SEGMENT Manipulation Macros
*--------------------------------------
.MA ADDLOCAL
pha
lda R.LS
dec R.SP
sta (R.SP)
lda R.SP
sec
sbc #]1
sta R.SP
sta R.LS
pla
.EM
*--------------------------------------
.MA REMLOCAL
php
pha
lda R.SP
clc
adc #]1
sta R.SP
lda (R.SP)
inc R.SP
sta R.LS
pla
plp
.EM
*--------------------------------------
.MA LDAL
ldy #]1
lda (R.LS),y
.EM
*--------------------------------------
.MA ADCL
ldy #]1
adc (R.LS),y
.EM
*--------------------------------------
.MA SBCL
ldy #]1
adc (R.LS),y
.EM
*--------------------------------------
.MA STAL
ldy #]1
sta (R.LS),y
.EM
*--------------------------------------
.MA LDYAL
ldy #]1
lda (R.LS),y
pha
iny
lda (R.LS),y
ply
.EM
*--------------------------------------
.MA STYAL
phy
ldy #]1+1
sta (R.LS),y
dey
pla
sta (R.LS),y
tay
.EM
*--------------------------------------
.MA INCL
ldy #]1
lda (R.LS),y
inc
sta (R.LS),y
.EM
*--------------------------------------
.MA INCLW
ldy #]1
lda (R.LS),y
inc
bne .71
sta (R.LS),y
iny
lda (R.LS),y
inc
.71 sta (R.LS),y
.EM
*--------------------------------------
.MA DECL
ldy #]1
lda (R.LS),y
dec
sta (R.LS),y
.EM
*--------------------------------------
.MA DECLW
ldy #]1
lda (R.LS),y
bne .72
pha
iny
lda (R.LS),y
dec
sta (R.LS),y
dey
pla
.72 dec
sta (R.LS),y
.EM
*--------------------------------------
* D.STACK PUSH/PULL Macros * D.STACK PUSH/PULL Macros
*-------------------------------------- *--------------------------------------
.MA PUSHA .MA PUSHA
dec R.SP dec pStack
sta (R.SP) sta (pStack)
.EM .EM
*-------------------------------------- *--------------------------------------
.MA PULLA .MA PULLA
lda (R.SP) lda (pStack)
inc R.SP inc pStack
.EM .EM
*-------------------------------------- *--------------------------------------
.MA PUSHYA .MA PUSHYA
dec R.SP dec pStack
sta (R.SP) sta (pStack)
pha pha
tya tya
dec R.SP dec pStack
sta (R.SP) sta (pStack)
pla pla
.EM .EM
*-------------------------------------- *--------------------------------------
.MA PULLYA .MA PULLYA
lda (R.SP) lda (pStack)
inc R.SP inc pStack
tay tay
lda (R.SP) lda (pStack)
inc R.SP inc pStack
.EM
*--------------------------------------
.MA PUSHAX
pha
txa
dec pStack
sta (pStack)
pla
dec pStack
sta (pStack)
.EM
*--------------------------------------
.MA PULLAX
lda (pStack)
inc pStack
pha
lda (pStack)
inc pStack
tax
pla
.EM .EM
*-------------------------------------- *--------------------------------------
.MA PUSHBI .MA PUSHBI
dec R.SP dec pStack
lda #]1 lda #]1
sta (R.SP) sta (pStack)
.EM .EM
*-------------------------------------- *--------------------------------------
.MA PUSHB .MA PUSHB
.DO ]#=2 .DO ]#=2
dec R.SP dec pStack
lda ]1,]2 lda ]1,]2
sta (R.SP) sta (pStack)
.ELSE .ELSE
dec R.SP dec pStack
lda ]1 lda ]1
sta (R.SP) sta (pStack)
.FIN .FIN
.EM .EM
*-------------------------------------- *--------------------------------------
.MA PULLB .MA PULLB
.DO ]#=2 .DO ]#=2
lda (R.SP) lda (pStack)
sta ]1,]2 sta ]1,]2
inc R.SP inc pStack
.ELSE .ELSE
lda (R.SP) lda (pStack)
sta ]1 sta ]1
inc R.SP inc pStack
.FIN .FIN
.EM .EM
*-------------------------------------- *--------------------------------------
.MA PUSHWI .MA PUSHWI
dec R.SP dec pStack
lda /]1 lda /]1
sta (R.SP) sta (pStack)
dec R.SP dec pStack
lda #]1 lda #]1
sta (R.SP) sta (pStack)
.EM .EM
*-------------------------------------- *--------------------------------------
.MA PUSHW .MA PUSHW
dec R.SP dec pStack
lda ]1+1 lda ]1+1
sta (R.SP) sta (pStack)
dec R.SP dec pStack
lda ]1 lda ]1
sta (R.SP) sta (pStack)
.EM .EM
*-------------------------------------- *--------------------------------------
.MA PULLW .MA PULLW
lda (R.SP) lda (pStack)
sta ]1 sta ]1
inc R.SP inc pStack
lda (R.SP) lda (pStack)
sta ]1+1 sta ]1+1
inc R.SP inc pStack
.EM .EM
*-------------------------------------- *--------------------------------------
* General WORD Manipulation Macros * General WORD Manipulation Macros

View File

@ -1,5 +1,5 @@
PR#3 PR#3
PREFIX /A2OSX.BUILD PREFIX /A2OSX.SRC
NEW NEW
INC 1 INC 1
AUTO 1000 AUTO 1000

View File

@ -1,5 +1,5 @@
PR#3 PR#3
PREFIX /A2OSX.BUILD PREFIX /A2OSX.SRC
NEW NEW
INC 1 INC 1
AUTO 1000 AUTO 1000

View File

@ -1,9 +1,11 @@
PR#3 PR#3
PREFIX /A2OSX.BUILD PREFIX /A2OSX.SRC
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6
*-------------------------------------- *--------------------------------------
* ProDOS Reserved ZP Location 00-1F,56-FF
*--------------------------------------
WNDLFT .EQ $20 SCROLL WINDOW LEFT WNDLFT .EQ $20 SCROLL WINDOW LEFT
WNDWDTH .EQ $21 SCROLL WINDOW WIDTH WNDWDTH .EQ $21 SCROLL WINDOW WIDTH
WNDTOP .EQ $22 SCROLL WINDOW TOP WNDTOP .EQ $22 SCROLL WINDOW TOP
@ -26,5 +28,15 @@ KSWH .EQ $39 INPUT CHARACTER HOOK HIGH
RNDL .EQ $4E RANDOM NUMBER LOW RNDL .EQ $4E RANDOM NUMBER LOW
RNDH .EQ $4F RANDOM NUMBER HIGH RNDH .EQ $4F RANDOM NUMBER HIGH
*-------------------------------------- *--------------------------------------
* Applesoft FP Registers
*--------------------------------------
EXPSGN .EQ $9C
FAC .EQ $9D -> A1, MAIN FLT PT ACCUMULATOR
FAC.SIGN .EQ $A2 HOLDS UNPACKED SIGN
ARG .EQ $A5 -> A9, SECONDARY FP ACC
ARG.SIGN .EQ $AA
SGNCPR .EQ $AB FLAGS OPP SIGN IN FP ROUT.
FAC.EXTENSION .EQ $AC FAC EXTENSION BYTE
*--------------------------------------
MAN MAN
SAVE INC/ZP.I SAVE INC/ZP.I

View File

@ -1,5 +1,5 @@
PR#3 PR#3
PREFIX /A2OSX.BUILD PREFIX /A2OSX.SRC
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6

View File

@ -1,5 +1,5 @@
PR#3 PR#3
PREFIX /A2OSX.BUILD PREFIX /A2OSX.SRC
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6

View File

@ -1,33 +1,35 @@
PR#3 PR#3
PREFIX /A2OSX.BUILD PREFIX /A2OSX.SRC
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6
.LIST OFF .LIST OFF
.OP 65C02 .OP 65C02
.OR $2000 .OR $2000
.TF LIB/LIBSTR.O .TF /A2OSX.BOOT/LIB/LIBSTR.O
*-------------------------------------- *--------------------------------------
.INB INC/MACROS.I .INB INC/MACROS.I
.INB INC/A2OSX.I .INB INC/A2OSX.I
.INB INC/A2OSX.API.I
*-------------------------------------- *--------------------------------------
ZPTmpPtr1 .EQ ZPLIB+2 ZPTmpPtr1 .EQ ZPLIB+2
ZPTmpPtr2 .EQ ZPLIB+4 ZPTmpPtr2 .EQ ZPLIB+4
ZPTmpPtr3 .EQ ZPLIB+6 ZPTmpPtr3 .EQ ZPLIB+6
*-------------------------------------- *--------------------------------------
* Main entry point * File Header (16 Bytes)
* input :
* X = Function
*--------------------------------------
* Code signature and relocation table
*--------------------------------------
* CLD $D8
* JMP (*,x) $7C
* #JMPTABLE
* /JMPTABLE
*-------------------------------------- *--------------------------------------
CS.START cld CS.START cld
jmp (.1,x) jmp (.1,x)
.DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1
.DA 0
.DA CS.END-CS.START
.DA 0
.DA 0
.DA 0
*--------------------------------------
* Relocation Table
*--------------------------------------
.1 .DA LIB.LOAD .1 .DA LIB.LOAD
.DA LIB.UNLOAD .DA LIB.UNLOAD
.DA PRINTF .DA PRINTF
@ -53,8 +55,6 @@ PRINTFJMP1 .DA PRINTFA
PRINTFJMP2 .DA PRINTFCR,PRINTFBKSLH,PRINTFPERCENT PRINTFJMP2 .DA PRINTFCR,PRINTFBKSLH,PRINTFPERCENT
*-------------------------------------- *--------------------------------------
.DA 0 .DA 0
.DA CS.END-CS.START
.DA 0
*-------------------------------------- *--------------------------------------
LIB.LOAD LIB.LOAD
LIB.UNLOAD clc LIB.UNLOAD clc
@ -756,13 +756,12 @@ CROUT lda #13
*-------------------------------------- *--------------------------------------
COUT phx COUT phx
phy phy
>PUSHA ldx #DEVMGR.COUT
ldy #S.PS.hOUTDEV jsr pDevJmp
lda (pPsContext),y
>SYSCALL SYS.DevOutA
ply ply
plx plx
rts rts
pDevJmp jmp (pDev)
*-------------------------------------- *--------------------------------------
CS.END CS.END
PRINTFTBL1 .AS -"abBdDLeEhHiIsStT" PRINTFTBL1 .AS -"abBdDLeEhHiIsStT"

View File

@ -1,5 +1,5 @@
PR#3 PR#3
PREFIX /A2OSX.BUILD PREFIX /A2OSX.SRC
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6

View File

@ -1,5 +1,5 @@
PR#3 PR#3
PREFIX /A2OSX.BUILD PREFIX /A2OSX.SRC
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6

View File

@ -1,15 +1,16 @@
PR#3 PR#3
PREFIX /A2OSX.BUILD PREFIX /A2OSX.SRC
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6
.LIST OFF .LIST OFF
.OP 65C02 .OP 65C02
.OR $2000 .OR $2000
.TF LIB/LIBTCPIP.O .TF /A2OSX.BOOT/LIB/LIBTCPIP.O
*-------------------------------------- *--------------------------------------
.INB INC/MACROS.I .INB INC/MACROS.I
.INB INC/A2OSX.I .INB INC/A2OSX.I
.INB INC/A2OSX.API.I
.INB INC/KERNEL.I .INB INC/KERNEL.I
.INB INC/LIBTCPIP.I .INB INC/LIBTCPIP.I
*-------------------------------------- *--------------------------------------
@ -21,19 +22,20 @@ ZPARPMAC .EQ ZPLIB+8
ZPDNSHostname .EQ ZPLIB+10 ZPDNSHostname .EQ ZPLIB+10
ZPDNSIP .EQ ZPLIB+12 ZPDNSIP .EQ ZPLIB+12
*-------------------------------------- *--------------------------------------
* Main entry point * File Header (16 Bytes)
* input :
* X = Function
*--------------------------------------
* Code signature and relocation table
*--------------------------------------
* CLD $D8
* JMP (*,x) $7C
* #JMPTABLE
* /JMPTABLE
*-------------------------------------- *--------------------------------------
CS.START cld CS.START cld
jmp (.1,x) jmp (.1,x)
.DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1
.DA 0
.DA CS.END-CS.START
.DA 0
.DA 0
.DA 0
*--------------------------------------
* Relocation Table
*--------------------------------------
.1 .DA LIB.LOAD .1 .DA LIB.LOAD
.DA LIB.UNLOAD .DA LIB.UNLOAD
@ -73,8 +75,6 @@ L.IPCFG .DA IPCFG
L.ARP.CACHE .DA ARP.CACHE L.ARP.CACHE .DA ARP.CACHE
L.DNS.CACHE .DA DNS.CACHE L.DNS.CACHE .DA DNS.CACHE
.DA 0 .DA 0
.DA CS.END-CS.START
.DA DS.END-DS.START
*-------------------------------------- *--------------------------------------
LIB.LOAD lda bFirstLoad LIB.LOAD lda bFirstLoad
bne .8 bne .8
@ -230,14 +230,10 @@ NEW.ARP.FRAME jsr NEW.ETH.FRAME
* X = hMem * X = hMem
*-------------------------------------- *--------------------------------------
NEW.ETH.FRAME >PUSHWI K.ETH.FRAME.LEN NEW.ETH.FRAME >PUSHWI K.ETH.FRAME.LEN
>PUSHBI 0 >PUSHBI S.MEM.F.INIT0
>SYSCALL SYS.GetMem >SYSCALL SYS.GetMem
bcs .9 bcs .9
>STYA ZPFrameBase1 >STYA ZPFrameBase1
phx
txa
>SYSCALL SYS.ClrMemA
plx
clc clc
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
@ -371,7 +367,11 @@ SEND.ETH.FRAME >PUSHW ZPFrameLen1
>PUSHW ZPFrameBase1 >PUSHW ZPFrameBase1
ldx #S.IPCFG.HDEV ldx #S.IPCFG.HDEV
lda IPCFG,x lda IPCFG,x
>SYSCALL SYS.DevOutA
>SYSCALL SYS.GetDevByIDA
>STYA pDev
ldx #DEVMGR.NET.SEND
jsr pDevJmp
rts rts
*-------------------------------------- *--------------------------------------
UDP.LISTENER >PULLW ZPFrameBase1 UDP.LISTENER >PULLW ZPFrameBase1
@ -461,6 +461,7 @@ ComputeChecksum >PULLA
eor #$FF eor #$FF
rts rts
*-------------------------------------- *--------------------------------------
pDevJmp jmp (pDev)
CS.END CS.END
*-------------------------------------- *--------------------------------------
bFirstLoad .DA #0 bFirstLoad .DA #0
@ -474,9 +475,6 @@ DNS.CACHE .BS K.DNSCACHE.SIZE*S.DNSCACHE
UDP.TABLE .BS K.UDPTABLE.SIZE*S.LISTENER UDP.TABLE .BS K.UDPTABLE.SIZE*S.LISTENER
TCP.TABLE .BS K.TCPTABLE.SIZE*S.LISTENER TCP.TABLE .BS K.TCPTABLE.SIZE*S.LISTENER
*-------------------------------------- *--------------------------------------
DS.START
DS.END
*--------------------------------------
MAN MAN
SAVE LIB/LIBTCPIP.S SAVE LIB/LIBTCPIP.S
ASM ASM

View File

@ -1,15 +1,16 @@
PR#3 PR#3
PREFIX /A2OSX.BUILD PREFIX /A2OSX.SRC
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6
.LIST OFF .LIST OFF
.OP 65C02 .OP 65C02
.OR $2000 .OR $2000
.TF SBIN/DHCPCLNT .TF /A2OSX.BOOT/SBIN/DHCPCLNT
*-------------------------------------- *--------------------------------------
.INB INC/MACROS.I .INB INC/MACROS.I
.INB INC/A2OSX.I .INB INC/A2OSX.I
.INB INC/A2OSX.API.I
.INB INC/KERNEL.I .INB INC/KERNEL.I
.INB INC/LIBSTR.I .INB INC/LIBSTR.I
.INB INC/LIBTCPIP.I .INB INC/LIBTCPIP.I
@ -18,17 +19,20 @@ ZPFrameBase1 .EQ ZPBIN
ZPFrameLen1 .EQ ZPBIN+2 ZPFrameLen1 .EQ ZPBIN+2
ZPFramePtr1 .EQ ZPBIN+4 ZPFramePtr1 .EQ ZPBIN+4
*-------------------------------------- *--------------------------------------
* Main entry point * File Header (16 Bytes)
*--------------------------------------
* Code signature and INIT table
*--------------------------------------
* CLD $D8
* JMP (*,x) $7C
* #JMPTABLE
* /JMPTABLE
*-------------------------------------- *--------------------------------------
CS.START cld CS.START cld
jmp (.1,x) jmp (.1,x)
.DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1
.DA 0
.DA CS.END-CS.START
.DA DS.END-DS.START Data Segment to Allocate
.DA 0
.DA 0
*--------------------------------------
* Relocation Table
*--------------------------------------
.1 .DA CS.INIT .1 .DA CS.INIT
.DA CS.RUN .DA CS.RUN
.DA CS.DOEVENT .DA CS.DOEVENT
@ -37,13 +41,13 @@ L.LIBSTR .DA LIBSTR
L.LIBTCPIP .DA LIBTCPIP L.LIBTCPIP .DA LIBTCPIP
L.IPCFG .DA IPCFG L.IPCFG .DA IPCFG
.DA 0 .DA 0
.DA CS.END-CS.START Code Length To Relocate
.DA DS.END-DS.START Data Segemnt to Allocate
*-------------------------------------- *--------------------------------------
CS.INIT >LIBLOADP L.LIBSTR CS.INIT >LDYA L.LIBSTR
>LOADLIBYA
sta hLIBSTR sta hLIBSTR
>LIBLOADP L.LIBTCPIP >LDYA L.LIBTCPIP
>LOADLIBYA
sta hLIBTCPIP sta hLIBTCPIP
>LIBCALL hLIBTCPIP,LIBTCPIP.GET.IPCFG >LIBCALL hLIBTCPIP,LIBTCPIP.GET.IPCFG
@ -79,9 +83,9 @@ CS.INIT >LIBLOADP L.LIBSTR
lda #20 lda #20
sta TimeOut sta TimeOut
lda (pPsContext) lda (pPs)
ora #S.PS.F.EVENT Now accept events ora #S.PS.F.EVENT Now accept events
sta (pPsContext) sta (pPs)
clc clc
.9 rts .9 rts
@ -130,8 +134,7 @@ CS.RUN.OK lda #S.IPCFG.STATUS.OK
CS.RUN.KO sec CS.RUN.KO sec
rts rts
*-------------------------------------- *--------------------------------------
CS.DOEVENT >PULLW pEvent CS.DOEVENT lda (pEvent)
lda (pEvent)
and #S.EVT.F.TIMER is it a TIMER event? and #S.EVT.F.TIMER is it a TIMER event?
beq .1 no.... beq .1 no....
@ -170,7 +173,8 @@ CS.DOEVENT >PULLW pEvent
bcs .9 bcs .9
lda #S.IPCFG.STATUS.ROFFER lda #S.IPCFG.STATUS.ROFFER
sta IPCFG sta IPCFG
bra .88 clc
rts
.2 lda IPCFG .2 lda IPCFG
and #S.IPCFG.STATUS.SREQ and #S.IPCFG.STATUS.SREQ
@ -180,9 +184,9 @@ CS.DOEVENT >PULLW pEvent
lda #S.IPCFG.STATUS.RACK lda #S.IPCFG.STATUS.RACK
sta IPCFG sta IPCFG
.88 >SYSCALL SYS.DestroyEvent clc
.89 clc
rts rts
.9 sec .9 sec
rts rts
*-------------------------------------- *--------------------------------------
@ -489,14 +493,14 @@ FRAME.REQ.OPT.SVRIP .BS 4
.HS FF .HS FF
FRAME.REQ.LEN .EQ *-FRAME.REQ FRAME.REQ.LEN .EQ *-FRAME.REQ
*-------------------------------------- *--------------------------------------
DS.START
*--------------------------------------
hLIBSTR .BS 1 hLIBSTR .BS 1
hLIBTCPIP .BS 1 hLIBTCPIP .BS 1
TimeOut .BS 1 TimeOut .BS 1
IPCFG .BS S.IPCFG IPCFG .BS S.IPCFG
*-------------------------------------- *--------------------------------------
DS.START
DS.END DS.END
*--------------------------------------
MAN MAN
SAVE SBIN/DHCPCLNT.S SAVE SBIN/DHCPCLNT.S
ASM ASM

View File

@ -1,40 +1,43 @@
PR#3 PR#3
PREFIX /A2OSX.BUILD PREFIX /A2OSX.SRC
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6
.LIST OFF .LIST OFF
.OP 65C02 .OP 65C02
.OR $2000 .OR $2000
.TF SBIN/GETTY .TF /A2OSX.BOOT/SBIN/GETTY
*-------------------------------------- *--------------------------------------
.INB INC/MACROS.I .INB INC/MACROS.I
.INB INC/A2OSX.I .INB INC/A2OSX.I
.INB INC/A2OSX.API.I
.INB INC/KERNEL.I
*-------------------------------------- *--------------------------------------
* Main entry point ZPTmp1 .EQ ZPBIN
*-------------------------------------- *--------------------------------------
* Code signature and INIT table * File Header (16 Bytes)
*--------------------------------------
* CLD $D8
* JMP (*,x) $7C
* #JMPTABLE
* /JMPTABLE
*-------------------------------------- *--------------------------------------
CS.START cld CS.START cld
jmp (.1,x) jmp (.1,x)
.DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1
.DA 0
.DA CS.END-CS.START
.DA DS.END-DS.START Data Segment to Allocate
.DA 0
.DA 0
*--------------------------------------
* Relocation Table
*--------------------------------------
.1 .DA CS.INIT .1 .DA CS.INIT
.DA CS.RUN .DA CS.RUN
.DA CS.DOEVENT .DA CS.DOEVENT
.DA CS.QUIT .DA CS.QUIT
L.MSG.GREETINGS .DA MSG.GREETINGS L.MSG.GREETINGS .DA MSG.GREETINGS
L.MSG.LOGIN .DA MSG.LOGIN .DA 0 End Of Reloc Table
L.MSG.PASSWORD .DA MSG.PASSWORD
.DA 0
.DA CS.END-CS.START Code Length To Relocate
.DA DS.END-DS.START Data Segment to Allocate
*-------------------------------------- *--------------------------------------
CS.INIT ldy #S.PS.hARGS CS.INIT ldy #S.PS.hARGS
lda (pPsContext),y lda (pPs),y
>PUSHA >PUSHA
>PUSHBI $20 Push SEP=' ' >PUSHBI $20 Push SEP=' '
>PUSHBI 1 Push 1 for getting INDEV >PUSHBI 1 Push 1 for getting INDEV
@ -45,14 +48,16 @@ CS.INIT ldy #S.PS.hARGS
>SYSCALL SYS.GetDevByNameA >SYSCALL SYS.GetDevByNameA
bcs .8 bcs .8
sta hINDEV txa
ldy #S.PS.hINDEV ldy #S.PS.hINDEV
sta (pPsContext),y sta (pPs),y
lda hDEVNAME lda hDEVNAME
>SYSCALL SYS.FreeMemA >SYSCALL SYS.FreeMemA
ldy #S.PS.hARGS ldy #S.PS.hARGS
lda (pPsContext),y lda (pPs),y
>PUSHA >PUSHA
>PUSHBI $20 Push SEP=' ' >PUSHBI $20 Push SEP=' '
>PUSHBI 2 Push 1 for getting OUTDEV >PUSHBI 2 Push 1 for getting OUTDEV
@ -63,40 +68,31 @@ CS.INIT ldy #S.PS.hARGS
>SYSCALL SYS.GetDevByNameA >SYSCALL SYS.GetDevByNameA
.8 bcs .98 .8 bcs .98
sta hOUTDEV >STYA pDev
txa
ldy #S.PS.hOUTDEV ldy #S.PS.hOUTDEV
sta (pPsContext),y sta (pPs),y
ldy #S.PS.hERRDEV ldy #S.PS.hERRDEV
sta (pPsContext),y sta (pPs),y
lda hDEVNAME lda hDEVNAME
>SYSCALL SYS.FreeMemA >SYSCALL SYS.FreeMemA
ldy #S.PS.hARGS ldy #S.PS.hARGS
lda (pPsContext),y lda (pPs),y
>PUSHA >PUSHA
>PUSHBI $20 Push SEP=' ' >PUSHBI $20 Push SEP=' '
>PUSHBI 3 Push 3 for getting BIN >PUSHBI 3 Push 3 for getting BIN
>SYSCALL SYS.PStrGetTkn >SYSCALL SYS.PStrGetTkn
bcs .99 bcs .99
sta BINID ldy #hBinName
ldy #S.PS.ID sta (pData),y
lda (pPsContext),y
* ldy #S.DEV.hOWNERPS ldx #DEVMGR.OPEN
* sta (DEVMGR.DEVPTR),y jsr pDevJmp if error CS, else...
>LDYA L.MSG.GREETINGS
jsr PRINT.MSG
lda hOUTDEV
jsr PRBYTE
stz STATUS rts ...Tell TskMgr To stay in memory
lda (pPsContext)
ora #S.PS.F.EVENT Now accept events
sta (pPsContext)
clc Tell TskMgr To stay in memory
rts
.98 pha .98 pha
lda hDEVNAME lda hDEVNAME
@ -105,200 +101,108 @@ CS.INIT ldy #S.PS.hARGS
sec sec
.99 rts .99 rts
*-------------------------------------- *--------------------------------------
CS.RUN lda STATUS CS.RUN ldy #S.PS.hOUTDEV
bne CS.RUN.1 lda (pPs),y
jsr CROUT >SYSCALL SYS.GetDevByIDA
jsr CROUT >STYA pDev
>LDYA L.MSG.LOGIN
lda #13 try send a CR...
jsr COUT Device Is Ready ?
bcc .1
clc no..loop...
rts
.1 >LDYA L.MSG.GREETINGS
jsr PRINT.MSG jsr PRINT.MSG
jsr INPUT.INIT
inc STATUS
clc
rts
CS.RUN.1 cmp #1
bne CS.RUN.2
ldx INSTATUS
beq .9
ldx INBUFFER
beq .2
.1 lda INBUFFER,x
sta USERNAME,x
dex
bpl .1
inc STATUS
clc
rts
.2 dec STATUS
.9 clc
rts
CS.RUN.2 cmp #2
bne CS.RUN.3
jsr CROUT
>LDYA L.MSG.PASSWORD
jsr PRINT.MSG
jsr INPUT.INIT
inc STATUS
clc
rts
CS.RUN.3 cmp #3
bne CS.RUN.4
ldx INSTATUS
beq .9
ldx INBUFFER
beq .2
.1 lda INBUFFER,x
sta PASSWORD,x
dex
bpl .1
.2 inc STATUS
.9 clc
rts
CS.RUN.4 cmp #4
bne CS.RUN.5
jsr CROUT
inc STATUS TODO:CHECK USER/PASS
clc
rts
CS.RUN.5 cmp #5
bne CS.RUN.6
lda BINID
ldx pPsContext
stx pPsContext.SAVE
ldx pPsContext+1
stx pPsContext.SAVE+1
>SYSCALL SYS.CreateProcessA
ldx pPsContext.SAVE
stx pPsContext
ldx pPsContext.SAVE+1
stx pPsContext+1
bcs .9 bcs .9
sta CHILDPSID
inc STATUS ldy #S.PS.hINDEV
clc lda (pPs),y
rts jsr PRBYTE
.9 jsr PRBYTE bcs .9
stz STATUS lda #','
clc
rts jsr COUT
CS.RUN.6 dec CHILDPSIDPOLL bcs .9
bne .8
lda CHILDPSID Check for CHILDTSKID ldy #S.PS.hOUTDEV
>SYSCALL SYS.GetPSByIDA lda (pPs),y
bcc .8 Still Alive ? jsr PRBYTE
stz STATUS bcs .9
stz CHILDPSID
.8 clc ldy #hBinName
rts lda (pData),y
>SYSCALL SYS.ExecProcessA
.9 rts
*-------------------------------------- *--------------------------------------
CS.DOEVENT >PULLW pEvent CS.DOEVENT sec
lda CHILDPSID
bne .99
ldy #S.EVT.hDEV
lda (pEvent),y
cmp hINDEV
bne .99
lda (pEvent)
and #S.EVT.F.KEY
beq .99
ldy #S.EVT.DATAHI
lda (pEvent),y
bne .99
ldy #S.EVT.DATALO
lda (pEvent),y
jsr INPUT.CHARIN
>SYSCALL SYS.DestroyEvent
clc
rts
.99 sec
rts rts
*-------------------------------------- *--------------------------------------
CS.QUIT clc CS.QUIT ldy #hBinName
lda (pData),y
>SYSCALL SYS.FreeMemA
ldx #DEVMGR.CLOSE
jsr pDevJmp
clc
rts rts
*-------------------------------------- *--------------------------------------
* PRIVATE * PRIVATE
*-------------------------------------- *--------------------------------------
PRINT.MSG >STYA ZPQuickPtr1 PRINT.MSG >STYA ZPTmp1
ldy #0 ldy #0
.1 lda (ZPQuickPtr1),y .1 lda (ZPTmp1),y
beq .2 beq .2
ora #$80
jsr COUT jsr COUT
bcs .9
iny iny
bne .1 bne .1
.2 rts .2 clc
*-------------------------------------- .9 rts
INPUT.INIT stz INSTATUS
stz INBUFFER
rts
*--------------------------------------
INPUT.CHARIN ldx INSTATUS
bne .9
cmp #$20
bcc .1
ldx INBUFFER
inx
cpx #16
beq .9
sta INBUFFER,x
stx INBUFFER
ora #$80
jmp COUT
.1 cmp #$0D
bne .9
inc INSTATUS
.9 rts
*-------------------------------------- *--------------------------------------
PRBYTE pha PRBYTE pha
lsr lsr
lsr lsr
lsr lsr
lsr lsr
ora #$B0 ora #$30
cmp #$BA cmp #$3A
bcc .1 bcc .1
adc #6 adc #6
.1 jsr COUT .1 jsr COUT
pla pla
bcs .9
and #$0F and #$0F
ora #$B0 ora #$30
cmp #$BA cmp #$3A
bcc COUT bcc .2
adc #6 adc #6
bra COUT .2 jsr COUT
.9 rts
*-------------------------------------- *--------------------------------------
CROUT lda #13 CROUT lda #13
*-------------------------------------- *--------------------------------------
COUT >PUSHA COUT phx
phx
phy phy
ldy #S.PS.hOUTDEV ldx #DEVMGR.COUT
lda (pPsContext),y jsr pDevJmp
>SYSCALL SYS.DevOutA
ply ply
plx plx
rts rts
*-------------------------------------- pDevJmp jmp (pDev)
MSG.GREETINGS >CSTRING "A2osX-GeTTY on Dev="
MSG.LOGIN >CSTRING "login:"
MSG.PASSWORD >CSTRING "password:"
*-------------------------------------- *--------------------------------------
CS.END CS.END
DS.START MSG.GREETINGS >CSTRING "A2osX-GeTTY on Dev="
*--------------------------------------
hDEVNAME .BS 1 hDEVNAME .BS 1
hINDEV .BS 1
hOUTDEV .BS 1
BINID .BS 1
STATUS .BS 1
CHILDPSID .BS 1
CHILDPSIDPOLL .BS 1
INSTATUS .BS 1
INBUFFER .BS 16
USERNAME .BS 16
PASSWORD .BS 16
pPsContext.SAVE .BS 2
*-------------------------------------- *--------------------------------------
DS.END .DUMMY
.OR 0
DS.START
hBinName .BS 1
DS.END .ED
MAN MAN
SAVE SBIN/GETTY.S SAVE SBIN/GETTY.S
ASM ASM

View File

@ -1,74 +1,120 @@
PR#3 PR#3
PREFIX /A2OSX.BUILD PREFIX /A2OSX.SRC
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6
.LIST OFF .LIST OFF
.OP 65C02 .OP 65C02
.OR $2000 .OR $2000
.TF SBIN/GUI .TF /A2OSX.BOOT/SBIN/GUI
*-------------------------------------- *--------------------------------------
.INB INC/MACROS.I .INB INC/MACROS.I
.INB INC/A2OSX.I .INB INC/A2OSX.I
.INB INC/A2OSX.API.I
*-------------------------------------- *--------------------------------------
* Main entry point * File Header (16 Bytes)
*--------------------------------------
* Code signature and INIT table
*--------------------------------------
* CLD $D8
* JMP (*,x) $7C
* #JMPTABLE
* /JMPTABLE
*-------------------------------------- *--------------------------------------
CS.START cld CS.START cld
jmp (.1,x) jmp (.1,x)
.DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1
.DA 0
.DA CS.END-CS.START
.DA 0
.DA 0
.DA 0
*--------------------------------------
* Relocation Table
*--------------------------------------
.1 .DA CS.INIT .1 .DA CS.INIT
.DA CS.RUN .DA CS.RUN
.DA CS.DOEVENT .DA CS.DOEVENT
.DA CS.QUIT .DA CS.QUIT
L.DEVNAME.GFX .DA DEVNAME.GFX L.DEVNAME.GFX .DA DEVNAME.GFX
L.DEVNAME.MOUSE .DA DEVNAME.MOUSE
.DA 0 .DA 0
.DA CS.END-CS.START Code Length To Relocate
.DA DS.END-DS.START Data Segment to Allocate
*-------------------------------------- *--------------------------------------
CS.INIT >LDYA L.DEVNAME.GFX CS.INIT >LDYA L.DEVNAME.GFX
>SYSCALL SYS.GetDevByNameYA >SYSCALL SYS.GetDevByNameYA
bcc .10 bcc .10
rts rts
.10 sta hDevGFX .10 stx hDevGFX
>SYSCALL SYS.GetDevByIDA >STYA pDevGFX
>STYA ZPQuickPtr1
ldy #S.DEV.hCS
lda (ZPQuickPtr1),y
>SYSCALL SYS.GetMemPtrA
>STYA DevJMP
stz C .11 >LDYA L.DEVNAME.MOUSE
stz X >SYSCALL SYS.GetDevByNameYA
stz X+1 bcc .20
.1 stz Y inc DEVNAME.MOUSE+4
>DEBUG lda DEVNAME.MOUSE+4
.2 cmp #'8'
>PUSHBI C Color bne .11
>PUSHBI 2 Mode:1=B/W,2=16 colors,...,128=XOR sec
rts
.20 stx hDevMouse
>STYA pDevMouse
lda #A2osX.SCREENS.G
>SYSCALL SYS.ScreenSelectA
ldx #DEVMGR.OPEN
jsr GoDevGFX
bcs *
ldx #DEVMGR.OPEN
jsr GoDevMouse
bcs *
jmp .8
lda #2
sta BW
stz C
lda #4
sta X
lda /4
sta X+1
.1 lda #2
sta Y
.2 lda Y
lsr
lsr
lsr
clc
adc C
and #$0F
>PUSHA
>PUSHB Y >PUSHB Y
>PUSHW X >PUSHW X
jsr SetPixel >PUSHBI 2 Mode:1=B/W,2=16 colors,...,128=XOR
ldx #DEVMGR.GFX.SETPIXEL
jsr GoDevGFX
inc Y inc Y
lda Y lda Y
cmp #192 cmp #190
bne .2 bne .2
dec BW
bne .3
lda #2
sta BW
inc C inc C
lda C lda C
cmp #16 cmp #16
bne .3 bne .3
stz C stz C
.3 lda X .3 lda X
clc clc
@ -77,38 +123,78 @@ CS.INIT >LDYA L.DEVNAME.GFX
bcc .4 bcc .4
inc X+1 inc X+1
.4 lda X .4 sec
sec sbc #556
sbc #560
lda X+1 lda X+1
sbc /560 sbc /556
bcc .1 bcc .1
.8 lda (pPs)
ora #S.PS.F.EVENT Now accept events
sta (pPs)
clc clc
.9 rts rts
*-------------------------------------- *--------------------------------------
CS.RUN clc CS.RUN clc
rts rts
*-------------------------------------- *--------------------------------------
CS.DOEVENT clc CS.DOEVENT ldy #S.EVT.hDEV
lda (pEvent),y
cmp hDevMouse
bne .99
lda (pEvent)
and #S.EVT.F.MOUSE
beq .99
ldy #S.EVT.DATALO
lda (pEvent),y
and #4 mouse move
beq .99
>PUSHBI 15 COLOR
ldy #S.EVT.DATAW2
lda (pEvent),y
>PUSHA Y
dey
lda (pEvent),y X.HI
>PUSHA
dey
lda (pEvent),y
>PUSHA X.LO
>PUSHBI 2 Mode:1=B/W,2=16 colors,...,128=XOR
ldx #DEVMGR.GFX.SETPIXEL
jsr GoDevGFX
clc
rts rts
.99 sec
rts
*-------------------------------------- *--------------------------------------
CS.QUIT clc CS.QUIT clc
rts rts
*-------------------------------------- *--------------------------------------
SetPixel ldx #DEVMGR.GFX.SETPIXEL GoDevGFX jmp (pDevGFX)
jmp (DevJMP) GoDevMouse jmp (pDevMouse)
*-------------------------------------- *--------------------------------------
CS.END CS.END
DEVNAME.GFX >PSTRING "GFX" DEVNAME.GFX >PSTRING "GFX"
DEVNAME.MOU0 >PSTRING "MOU0" DEVNAME.MOUSE >PSTRING "MOU1"
DS.START
hDevGFX .BS 1 hDevGFX .BS 1
DevJMP .BS 2 pDevGFX .BS 2
hDevMouse .BS 1
pDevMouse .BS 2
X .BS 2 X .BS 2
Y .BS 1 Y .BS 1
C .BS 1 C .BS 1
DS.END BW .BS 1
MAN MAN
SAVE SBIN/GUI.S SAVE SBIN/GUI.S
ASM ASM

236
SBIN/LOGIN.S.txt Normal file
View 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

View File

@ -1,16 +1,17 @@
PR#3 PR#3
PREFIX /A2OSX.BUILD PREFIX /A2OSX.SRC
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6
.LIST OFF .LIST OFF
.OP 65C02 .OP 65C02
.OR $2000 .OR $2000
.TF SBIN/SHELL .TF /A2OSX.BOOT/SBIN/SHELL
*-------------------------------------- *--------------------------------------
.INB INC/MACROS.I .INB INC/MACROS.I
.INB INC/A2OSX.I
.INB INC/PRODOS.I .INB INC/PRODOS.I
.INB INC/A2OSX.I
.INB INC/A2OSX.API.I
.INB INC/LIBSTR.I .INB INC/LIBSTR.I
*-------------------------------------- *--------------------------------------
ZPPTR1 .EQ ZPBIN ZPPTR1 .EQ ZPBIN
@ -19,24 +20,26 @@ ZPPTR3 .EQ ZPBIN+4
*-------------------------------------- *--------------------------------------
CmdBuffer.MAX .EQ 127 CmdBuffer.MAX .EQ 127
*-------------------------------------- *--------------------------------------
* Main entry point * File Header (16 Bytes)
*--------------------------------------
* Code signature and INIT table
*--------------------------------------
* CLD $D8
* JMP (*,x) $7C
* #JMPTABLE
* /JMPTABLE
*-------------------------------------- *--------------------------------------
CS.START cld CS.START cld
jmp (.1,x) jmp (.1,x)
.DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1
.DA 0
.DA CS.END-CS.START Code Length To Relocate
.DA DS.END-DS.START Data Segment to Allocate
.DA 0
.DA 0
*--------------------------------------
* Relocation Table
*--------------------------------------
.1 .DA CS.INIT .1 .DA CS.INIT
.DA CS.RUN .DA CS.RUN
.DA CS.DOEVENT .DA CS.DOEVENT
.DA CS.QUIT .DA CS.QUIT
*-------------------------------------- *--------------------------------------
L.LIBSTR .DA LIBSTR L.LIBSTR .DA LIBSTR
L.CmdBuffer .DA CmdBuffer
L.MSG.GREETINGS .DA MSG.GREETINGS L.MSG.GREETINGS .DA MSG.GREETINGS
L.MSG.UNKNOWN .DA MSG.UNKNOWN L.MSG.UNKNOWN .DA MSG.UNKNOWN
L.MSG.SYNERR .DA MSG.SYNERR L.MSG.SYNERR .DA MSG.SYNERR
@ -49,60 +52,66 @@ T.INTCMDS .DA EXEC.CMD.CD
.DA EXEC.CMD.TYPE .DA EXEC.CMD.TYPE
.DA EXEC.CMD.EXIT .DA EXEC.CMD.EXIT
.DA 0 .DA 0
.DA CS.END-CS.START Code Length To Relocate
.DA DS.END-DS.START Data Segment to Allocate
*-------------------------------------- *--------------------------------------
CS.INIT stz bEXIT CS.INIT lda #0
ldy #bEXIT
stz CmdHistory sta (pData),y
stz CmdHistory.IDX ldy #CmdHistory
stz CmdHistory.END sta (pData),y
ldy #CmdHistory.IDX
>LIBLOADP L.LIBSTR sta (pData),y
ldy #CmdHistory.END
sta (pData),y
>LDYA L.LIBSTR
>LOADLIBYA
bcs .99 bcs .99
sta hLIBSTR sta hLIBSTR
ldy #S.PS.ID ldy #S.PS.ID
lda (pPsContext),y lda (pPs),y
>PUSHA >PUSHA
ldy #S.PS.hOUTDEV ldy #S.PS.hOUTDEV
lda (pPsContext),y lda (pPs),y
>PUSHA >PUSHA
ldy #S.PS.hINDEV ldy #S.PS.hINDEV
lda (pPsContext),y lda (pPs),y
>PUSHA >PUSHA
>PUSHW L.MSG.GREETINGS >PUSHW L.MSG.GREETINGS
>LIBCALL hLIBSTR,LIBSTR.PRINTF >LIBCALL hLIBSTR,LIBSTR.PRINTF
lda (pPsContext) lda (pPs)
ora #S.PS.F.EVENT Now accept events ora #S.PS.F.EVENT Now accept events
sta (pPsContext) sta (pPs)
clc clc
.99 rts .99 rts
*-------------------------------------- *--------------------------------------
CS.RUN stz CmdBuffer CS.RUN lda #0
sta (pData)
lda #"$" lda #"$"
jsr COUT jsr COUT
lda #" " lda #" "
jsr COUT jsr COUT
.1 lda CmdBuffer .1 lda (pData)
bmi .2 bmi .2
jsr A2osX.SLEEP jsr A2osX.SLEEP
bra .1 bra .1
.2 and #$7F .2 and #$7F
sta CmdBuffer sta (pData)
beq CS.RUN Empty line beq CS.RUN Empty line
>PUSHW L.CmdBuffer >LDYA pData
>SYSCALL SYS.NewPStr >SYSCALL SYS.NewPStrYA
bcs .99 bcs .99
sta hCMDLINE
jsr HISTORY.ADD ldy #hCMDLINE
sta (pData),y
* jsr HISTORY.ADD
jsr EXEC.CMD jsr EXEC.CMD
bcc .3 bcc .3
@ -115,23 +124,27 @@ CS.RUN stz CmdBuffer
jsr COUT jsr COUT
jsr CROUT jsr CROUT
.3 lda hCMDLINE .3 ldy #hCMDLINE
lda (pData),y
>SYSCALL SYS.FreeMemA >SYSCALL SYS.FreeMemA
stz hCMDLINE ldy #hCMDLINE
lda #0
sta (pData),y
lda bEXIT ldy #bEXIT
lda (pData),y
bne .99 bne .99
clc clc
rts rts
.99 sec .99 sec
rts rts
*-------------------------------------- *--------------------------------------
CS.DOEVENT >PULLW pEvent CS.DOEVENT ldy #S.EVT.hDEV is Event from active IN device?
ldy #S.EVT.hDEV is Event from active IN device?
lda (pEvent),y lda (pEvent),y
ldy #S.PS.hINDEV ldy #S.PS.hINDEV
cmp (pPsContext),y cmp (pPs),y
bne .9 bne .9
lda (pEvent) lda (pEvent)
@ -144,27 +157,33 @@ CS.DOEVENT >PULLW pEvent
ldy #S.EVT.DATALO ldy #S.EVT.DATALO
lda (pEvent),y lda (pEvent),y
cmp #$1F tax
bpl .1
cpx #$20
bcs .1
jsr CS.EVENT.CTRL.CHAR jsr CS.EVENT.CTRL.CHAR
bra .8 bra .8
.1 cmp #$7f .1 cpx #$7f
bne .2 bne .2
jsr CmdBuffer.DEL jsr CmdBuffer.DEL
bra .8 bra .8
.2 ldx CmdBuffer .2 lda (pData) CmdBuffer
cpx #CmdBuffer.MAX
cmp #CmdBuffer.MAX
beq .8 beq .8
inx
sta CmdBuffer,x inc
inc CmdBuffer sta (pData)
tay
txa
sta (pData),y
ora #$80 ora #$80
jsr COUT jsr COUT
.8 >SYSCALL SYS.DestroyEvent .8 clc
clc
rts rts
.9 sec .9 sec
@ -174,9 +193,9 @@ CS.EVENT.CTRL.CHAR
cmp #13 CR cmp #13 CR
bne .10 bne .10
jsr CROUT jsr CROUT
lda CmdBuffer lda (pData) CmdBuffer
ora #$80 ora #$80
sta CmdBuffer sta (pData)
clc clc
rts rts
@ -195,14 +214,14 @@ CS.EVENT.CTRL.CHAR
.2 cmp #10 LF (down arrow) .2 cmp #10 LF (down arrow)
bne .3 bne .3
jsr HISTORY.GETNEXT * jsr HISTORY.GETNEXT
clc clc
rts rts
.3 cmp #11 VT (up arrow) .3 cmp #11 VT (up arrow)
bne .4 bne .4
jsr HISTORY.GETPREV * jsr HISTORY.GETPREV
clc clc
rts rts
@ -223,17 +242,25 @@ CS.QUIT lda hLIBSTR
*-------------------------------------- *--------------------------------------
* PRIVATE * PRIVATE
*-------------------------------------- *--------------------------------------
EXEC.CMD >PUSHB hCMDLINE EXEC.CMD ldy #hCMDLINE
>PUSHB (pData),y
>PUSHBI $20 Push SEP=' ' >PUSHBI $20 Push SEP=' '
>PUSHBI 0 Push 0 for getting CMD & ARGS >PUSHBI 0 Push 0 for getting CMD & ARGS
>SYSCALL SYS.PStrGetTkn >SYSCALL SYS.PStrGetTkn
bcs .99 bcs .99
sta hCMD ldy #hCMD
stx hARGS sta (pData),y
pha
txa
ldy #hARGS
sta (pData),y
pla
>SYSCALL SYS.GetMemPtrA >SYSCALL SYS.GetMemPtrA
>PUSHYA >PUSHYA
>PUSHYA >PUSHYA
>LIBCALL hLIBSTR,LIBSTR.UCASEP >LIBCALL hLIBSTR,LIBSTR.UCASEP
>PUSHW L.CMDS >PUSHW L.CMDS
>SYSCALL SYS.GetPStrIndex >SYSCALL SYS.GetPStrIndex
@ -245,14 +272,17 @@ EXEC.CMD >PUSHB hCMDLINE
rts rts
.1 jsr .98 Discard CMD & ARGS .1 jsr .98 Discard CMD & ARGS
lda hCMDLINE ldy #hCMDLINE
lda (pData),y
>SYSCALL SYS.ExecProcessA >SYSCALL SYS.ExecProcessA
rts rts
.98 pha .98 pha
lda hCMD ldy #hCMD
lda (pData),y
>SYSCALL SYS.FreeMemA >SYSCALL SYS.FreeMemA
lda hARGS ldy #hARGS
lda (pData),y
>SYSCALL SYS.FreeMemA >SYSCALL SYS.FreeMemA
pla pla
sec sec
@ -262,10 +292,11 @@ EXEC.CMD.INT asl
tax tax
jmp (T.INTCMDS,x) jmp (T.INTCMDS,x)
*-------------------------------------- *--------------------------------------
EXEC.CMD.CD lda hARGS EXEC.CMD.CD ldy #hARGS
lda (pData),y
bne EXEC.CMD.CD.C bne EXEC.CMD.CD.C
ldy #S.PS.hPREFIX ldy #S.PS.hPREFIX
lda (pPsContext),y lda (pPs),y
>SYSCALL SYS.GetMemPtrA >SYSCALL SYS.GetMemPtrA
>PUSHYA >PUSHYA
>LIBCALL hLIBSTR,LIBSTR.PRINTP >LIBCALL hLIBSTR,LIBSTR.PRINTP
@ -276,15 +307,16 @@ EXEC.CMD.CD lda hARGS
EXEC.CMD.CD.C >SYSCALL SYS.GetMemPtrA EXEC.CMD.CD.C >SYSCALL SYS.GetMemPtrA
>STYA ZPPTR2 >STYA ZPPTR2
ldy #S.PS.hPREFIX ldy #S.PS.hPREFIX
lda (pPsContext),y lda (pPs),y
>SYSCALL SYS.GetMemPtrA >SYSCALL SYS.GetMemPtrA
>STYA ZPPTR1 >STYA ZPPTR1
>PUSHWI MLI.MAXPATH+1 Get a buffer for new PATH >PUSHWI MLI.MAXPATH+1 Get a buffer for new PATH
>PUSHBI 0 no particular Option >PUSHBI 0 no particular Option
>SYSCALL SYS.GetMem >SYSCALL SYS.GetMem
bcs .99 bcs .99
stx hNEWPATH
>STYA ZPPTR3 >STYA ZPPTR3
stx hNEWPATH
lda #0 lda #0
sta (ZPPTR3) sta (ZPPTR3)
ldy #1 ldy #1
@ -321,6 +353,7 @@ EXEC.CMD.CD.C >SYSCALL SYS.GetMemPtrA
pla pla
sec sec
.99 rts .99 rts
.2 >PUSHW ZPPTR1 .2 >PUSHW ZPPTR1
>PUSHW ZPPTR3 >PUSHW ZPPTR3
>LIBCALL hLIBSTR,LIBSTR.STRCPYP >LIBCALL hLIBSTR,LIBSTR.STRCPYP
@ -340,21 +373,45 @@ EXEC.CMD.CD.C >SYSCALL SYS.GetMemPtrA
>SYSCALL SYS.CheckPrefixA >SYSCALL SYS.CheckPrefixA
bcs .98 bcs .98
ldy #S.PS.hPREFIX ldy #S.PS.hPREFIX
lda (pPsContext),y lda (pPs),y
pha pha
lda hNEWPATH lda hNEWPATH
sta (pPsContext),y sta (pPs),y
pla pla
>SYSCALL SYS.FreeMemA >SYSCALL SYS.FreeMemA
clc clc
rts rts
*-------------------------------------- *--------------------------------------
EXEC.CMD.SET clc EXEC.CMD.SET ldy #hARGS
lda (pData),y
bne .2
ldy #S.PS.hENV
lda (pPs),y
>SYSCALL SYS.GetMemPtrA
>STYA ZPPTR1
.1 lda (ZPPTR1)
beq .8 Ending 0 ?
>PUSHW ZPPTR1
>LIBCALL hLIBSTR,LIBSTR.PRINTP
jsr CROUT
lda ZPPTR1
sec
adc (ZPPTR1) Add len+1 to PTR
sta ZPPTR1
bcc .1
inc ZPPTR1
bra .1
.2 sec
rts rts
.8 clc
rts
*-------------------------------------- *--------------------------------------
EXEC.CMD.DATE jsr MLI EXEC.CMD.DATE >SYSCALL SYS.MLIGetTime
.DA #MLIGETTIME
.DA 0
bcs .9 bcs .9
>PUSHW DATELO >PUSHW DATELO
>LIBCALL hLIBSTR,LIBSTR.PRINTDATE >LIBCALL hLIBSTR,LIBSTR.PRINTDATE
@ -362,9 +419,7 @@ EXEC.CMD.DATE jsr MLI
clc clc
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
EXEC.CMD.TIME jsr MLI EXEC.CMD.TIME >SYSCALL SYS.MLIGetTime
.DA #MLIGETTIME
.DA 0
bcs .9 bcs .9
>PUSHW TIMELO >PUSHW TIMELO
>LIBCALL hLIBSTR,LIBSTR.PRINTTIME >LIBCALL hLIBSTR,LIBSTR.PRINTTIME
@ -372,14 +427,32 @@ EXEC.CMD.TIME jsr MLI
clc clc
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
EXEC.CMD.ECHO lda #$DD EXEC.CMD.ECHO ldy #hARGS
sec lda (pData),y
beq .98
>SYSCALL SYS.ExpandPStrA
bcs .99
pha
>SYSCALL SYS.GetMemPtrA
>PUSHYA
>LIBCALL hLIBSTR,LIBSTR.PRINTP
jsr CROUT
pla
>SYSCALL SYS.FreeMemA
clc
rts rts
.98 lda #SYSMGR.ERRSYN
sec
.99 rts
*-------------------------------------- *--------------------------------------
EXEC.CMD.TYPE lda hARGS EXEC.CMD.TYPE ldy #hARGS
lda (pData),y
beq .98 beq .98
>SYSCALL SYS.LoadFileA >SYSCALL SYS.LoadFileA
bcs .99 bcs .99
>STYA ZPPTR2 store file len >STYA ZPPTR2 store file len
phx phx
txa txa
@ -393,7 +466,6 @@ EXEC.CMD.TYPE lda hARGS
.2 dec ZPPTR2 .2 dec ZPPTR2
lda (ZPPTR1) lda (ZPPTR1)
ora #$80
jsr COUT jsr COUT
inc ZPPTR1 inc ZPPTR1
bne .1 bne .1
@ -406,10 +478,12 @@ EXEC.CMD.TYPE lda hARGS
rts rts
.98 lda #SYSMGR.ERRSYN .98 lda #SYSMGR.ERRSYN
sec
.99 rts .99 rts
*-------------------------------------- *--------------------------------------
EXEC.CMD.EXIT lda #$FF EXEC.CMD.EXIT ldy #bEXIT
sta bEXIT lda #$FF
sta (pData),y
clc clc
rts rts
*-------------------------------------- *--------------------------------------
@ -479,14 +553,13 @@ HISTORY.SETBUF jsr CmdBuffer.CLR
bne .1 bne .1
bra CmdBuffer.PRINT bra CmdBuffer.PRINT
*-------------------------------------- *--------------------------------------
CmdBuffer.PRINT ldx #0 CmdBuffer.PRINT ldy #0
.1 inx .1 iny
lda CmdBuffer,x lda (pData),y
ora #$80 ora #$80
phx
jsr COUT jsr COUT
plx tya
cpx CmdBuffer cmp (pData)
bne .1 bne .1
rts rts
*-------------------------------------- *--------------------------------------
@ -494,11 +567,13 @@ CmdBuffer.CLR jsr CmdBuffer.DEL
bne CmdBuffer.CLR bne CmdBuffer.CLR
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
CmdBuffer.DEL lda CmdBuffer CmdBuffer.DEL lda (pData)
beq .9 beq .9
lda #8 lda #8
jsr COUT jsr COUT
dec CmdBuffer lda (pData)
dec
sta (pData)
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
PRBYTE pha PRBYTE pha
@ -523,13 +598,12 @@ CROUT lda #13
*-------------------------------------- *--------------------------------------
COUT phx COUT phx
phy phy
>PUSHA ldx #DEVMGR.COUT
ldy #S.PS.hOUTDEV jsr pDevJmp
lda (pPsContext),y
>SYSCALL SYS.DevOutA
ply ply
plx plx
rts rts
pDevJmp jmp (pDev)
*-------------------------------------- *--------------------------------------
CS.END CS.END
*-------------------------------------- *--------------------------------------
@ -546,22 +620,22 @@ LIBSTR >PSTRING "libstr.o"
MSG.GREETINGS >CSTRING "\nA2osX-Shell on Dev=(%h:%h),PS=%h\n\n" MSG.GREETINGS >CSTRING "\nA2osX-Shell on Dev=(%h:%h),PS=%h\n\n"
MSG.UNKNOWN >CSTRING "Command Not Found\n" MSG.UNKNOWN >CSTRING "Command Not Found\n"
MSG.SYNERR >CSTRING "Syntax Error Or Invalid Pathname\n" MSG.SYNERR >CSTRING "Syntax Error Or Invalid Pathname\n"
*--------------------------------------
DS.START
*--------------------------------------
hLIBSTR .BS 1 hLIBSTR .BS 1
hNEWPATH .BS 1
*--------------------------------------
.DUMMY
.OR 0
DS.START
CmdBuffer .BS CmdBuffer.MAX+1
bEXIT .BS 1 bEXIT .BS 1
hCMDLINE .BS 1 hCMDLINE .BS 1
hCMD .BS 1 hCMD .BS 1
hARGS .BS 1 hARGS .BS 1
hNEWPATH .BS 1
CmdBuffer .BS CmdBuffer.MAX+1
CmdBuffer.POS .BS 1
CmdHistory .BS 256 CmdHistory .BS 256
CmdHistory.IDX .BS 1 CmdHistory.IDX .BS 1
CmdHistory.END .BS 1 CmdHistory.END .BS 1
*--------------------------------------
DS.END DS.END
.ED
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE SBIN/SHELL.S SAVE SBIN/SHELL.S

View File

@ -1,15 +1,16 @@
PR#3 PR#3
PREFIX /A2OSX.BUILD PREFIX /A2OSX.SRC
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6
.LIST OFF .LIST OFF
.OP 65C02 .OP 65C02
.OR $2000 .OR $2000
.TF SBIN/TCPIP .TF /A2OSX.BOOT/SBIN/TCPIP
*-------------------------------------- *--------------------------------------
.INB INC/MACROS.I .INB INC/MACROS.I
.INB INC/A2OSX.I .INB INC/A2OSX.I
.INB INC/A2OSX.API.I
.INB INC/KERNEL.I .INB INC/KERNEL.I
.INB INC/LIBTCPIP.I .INB INC/LIBTCPIP.I
*-------------------------------------- *--------------------------------------
@ -20,17 +21,20 @@ ZPFrameBase2 .EQ ZPBIN+6
ZPFrameLen2 .EQ ZPBIN+8 ZPFrameLen2 .EQ ZPBIN+8
ZPFramePtr2 .EQ ZPBIN+10 ZPFramePtr2 .EQ ZPBIN+10
*-------------------------------------- *--------------------------------------
* Main entry point * File Header (16 Bytes)
*--------------------------------------
* Code signature and INIT table
*--------------------------------------
* CLD $D8
* JMP (*,x) $7C
* #JMPTABLE
* /JMPTABLE
*-------------------------------------- *--------------------------------------
CS.START cld CS.START cld
jmp (.1,x) jmp (.1,x)
.DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1
.DA 0
.DA CS.END-CS.START Code Length To Relocate
.DA 0
.DA 0
.DA 0
*--------------------------------------
* Relocation Table
*--------------------------------------
.1 .DA CS.INIT .1 .DA CS.INIT
.DA CS.RUN .DA CS.RUN
.DA CS.DOEVENT .DA CS.DOEVENT
@ -39,11 +43,11 @@ L.LIBTCPIP .DA LIBTCPIP
L.CFGFILENAME .DA CFGFILENAME L.CFGFILENAME .DA CFGFILENAME
L.IPCFG .DA IPCFG L.IPCFG .DA IPCFG
.DA 0 .DA 0
.DA CS.END-CS.START Code Length To Relocate
.DA DS.END-DS.START Data Segment to Allocate
*-------------------------------------- *--------------------------------------
CS.INIT >LIBLOADP L.LIBTCPIP CS.INIT >LDYA L.LIBTCPIP
>LOADLIBYA
bcs .99 bcs .99
sta hLIBTCPIP sta hLIBTCPIP
ldx #0 ldx #0
.1 stz IPCFG,x .1 stz IPCFG,x
@ -74,15 +78,15 @@ CS.INIT >LIBLOADP L.LIBTCPIP
>SYSCALL SYS.AddNetCfg >SYSCALL SYS.AddNetCfg
bcs .99 bcs .99
lda (pPsContext) lda (pPs)
ora #S.PS.F.EVENT Now accept events ora #S.PS.F.EVENT Now accept events
sta (pPsContext) sta (pPs)
clc clc
.99 rts .99 rts
*-------------------------------------- *--------------------------------------
CS.INIT.DEV ldy #S.PS.hARGS CS.INIT.DEV ldy #S.PS.hARGS
lda (pPsContext),y lda (pPs),y
>PUSHA >PUSHA
>PUSHBI $20 Push SEP=' ' >PUSHBI $20 Push SEP=' '
>PUSHBI 1 Push 1 for getting DEV >PUSHBI 1 Push 1 for getting DEV
@ -91,25 +95,29 @@ CS.INIT.DEV ldy #S.PS.hARGS
sta hDEVNAME save DevName for discard sta hDEVNAME save DevName for discard
>SYSCALL SYS.GetDevByNameA >SYSCALL SYS.GetDevByNameA
bcs .98 bcs .98
>STYA pDev
txa
sta hDev sta hDev
ldx #S.IPCFG.HDEV ldx #S.IPCFG.HDEV
sta IPCFG,x sta IPCFG,x
>SYSCALL SYS.GetDevInfoA ldx #DEVMGR.OPEN
>STYA ZPQuickPtr1 jsr pDevJmp
ldy #0 ldx #DEVMGR.GETINFO
jsr pDevJmp
>STYA ZPQuickPtr1
ldy #1
ldx #S.IPCFG.MAC ldx #S.IPCFG.MAC
.1 lda (ZPQuickPtr1),y .1 lda (ZPQuickPtr1),y
sta IPCFG,x sta IPCFG,x
inx
iny iny
cpy #S.IPCFG.MAC+6 inx
cpx #S.IPCFG.MAC+6
bne .1 bne .1
lda hDEVNAME jsr .98
>SYSCALL SYS.FreeMemA
clc clc
rts rts
@ -120,8 +128,8 @@ CS.INIT.DEV ldy #S.PS.hARGS
.99 sec .99 sec
rts rts
*-------------------------------------- *--------------------------------------
CS.INIT.CFGFILE >PUSHW L.CFGFILENAME CS.INIT.CFGFILE >LDYA L.CFGFILENAME
>SYSCALL SYS.ExpandPStr >SYSCALL SYS.ExpandPStrYA
bcs .99 bcs .99
sta hCfgFileName sta hCfgFileName
>SYSCALL SYS.LoadFileA >SYSCALL SYS.LoadFileA
@ -154,8 +162,7 @@ CS.INIT.CFGFILE >PUSHW L.CFGFILENAME
CS.RUN clc CS.RUN clc
rts rts
*-------------------------------------- *--------------------------------------
CS.DOEVENT >PULLW pEvent CS.DOEVENT lda (pEvent)
lda (pEvent)
and #S.EVT.F.NET and #S.EVT.F.NET
beq .9 beq .9
@ -221,13 +228,20 @@ CS.DOEVENT.NET ldy #S.EVT.DATALO Get Frame hMem
bcc .89 bcc .89
rts rts
.89 >SYSCALL SYS.DestroyEvent .89 clc
clc
rts rts
.99 sec .99 sec
rts rts
*-------------------------------------- *--------------------------------------
CS.QUIT lda hLIBTCPIP CS.QUIT lda hDev
>SYSCALL SYS.GetDevByIDA
>STYA pDev
ldx #DEVMGR.OPEN
jsr pDevJmp
lda hLIBTCPIP
>SYSCALL SYS.FreeMemA >SYSCALL SYS.FreeMemA
clc clc
rts rts
@ -428,14 +442,12 @@ CopyFramePtr12 dey
bne CopyFramePtr12 bne CopyFramePtr12
rts rts
*-------------------------------------- *--------------------------------------
pDevJmp jmp (pDev)
CS.END CS.END
*-------------------------------------- *--------------------------------------
LIBTCPIP >PSTRING "libtcpip.o" LIBTCPIP >PSTRING "libtcpip.o"
CFGFILENAME >PSTRING "%ETC%TCPIP.CONF" CFGFILENAME >PSTRING "%ETC%TCPIP.CONF"
DefaultHostName >CSTRING "a2osx-host" DefaultHostName >CSTRING "a2osx-host"
*--------------------------------------
DS.START
*--------------------------------------
hLIBTCPIP .BS 1 hLIBTCPIP .BS 1
hDEVNAME .BS 1 hDEVNAME .BS 1
hDev .BS 1 hDev .BS 1
@ -444,8 +456,6 @@ hCfgFile .BS 1
hCfgFileLen .BS 2 hCfgFileLen .BS 2
IPCFG .BS S.IPCFG Get in cache for faster access with ,X IPCFG .BS S.IPCFG Get in cache for faster access with ,X
*-------------------------------------- *--------------------------------------
DS.END
*--------------------------------------
MAN MAN
SAVE SBIN/TCPIP.S SAVE SBIN/TCPIP.S
ASM ASM

View File

@ -1,5 +1,5 @@
PR#3 PR#3
PREFIX /A2OSX.BUILD PREFIX /A2OSX.SRC
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6

View File

@ -1,5 +1,5 @@
PR#3 PR#3
PREFIX /A2OSX.BUILD PREFIX /A2OSX.SRC
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6
@ -13,375 +13,227 @@ AUTO 6
* Y,A = MEMPTR * Y,A = MEMPTR
* X = hMem of Code Segment * X = hMem of Code Segment
*-------------------------------------- *--------------------------------------
S.LoadBinA sta R.DH save file path S.LoadBinA sta S.LoadBinA.hFilename save file path
jsr S.GetMemByNameA jsr S.GetMemByNameA
bcs .1 not already loaded bcs .1 not already loaded
>STYA R.AX Save base address
>STYA ZPQuickPtr1 Save base address
ldy #S.MEM.REFCNT ldy #S.MEM.REFCNT
lda (R.AX),y lda (ZPQuickPtr1),y
inc inc
sta (R.AX),y sta (ZPQuickPtr1),y
ldy #S.MEM.PTR ldy #S.MEM.PTR
lda (R.AX),y lda (ZPQuickPtr1),y
pha Y,A = MEM PTR... pha Y,A = MEM PTR...
iny iny
lda (R.AX),y lda (ZPQuickPtr1),y
ply X=hMem from S.GetMemByNameA ply X=hMem from S.GetMemByNameA
clc clc
rts rts
.1 lda R.DH .1 lda S.LoadBinA.hFilename
jsr S.LoadFileA jsr S.LoadFileA
bcs .99 bcc .2
>STYA R.BX save file length for relocation rts Error Loading file
stx R.DL save hMem
.2 >STYA S.LoadBinA.FileLen
stx S.LoadBinA.hMem save hMem
txa txa
jsr S.GetMemPtrA jsr S.GetMemPtrA
>STYA R.AX save base address for relocation >STYA ZPQuickPtr1 save base address for relocation
lda R.DH
jsr S.MLIGetFileInfoA Get File Info for AUXTYPE ldy #H.BIN.CODE.LEN make AX = Code Len
bcs .98
>STYA ZPQuickPtr1
ldy #2 get AUXTYPE
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
sta R.CL sta R.AL
iny iny
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
sta R.CH save File load address for relocation sta R.AH
lda R.AL compute offset for relocation....
lda S.LoadBinA.hFilename
jsr S.MLIGetFileInfoA Get File Info for AUXTYPE
bcs .98
>STYA ZPQuickPtr2
ldy #2 get AUXTYPE
lda (ZPQuickPtr2),y
sta R.BL Make BX=Range Start=AUXTYPE
sta S.LoadBinA.AuxType
clc
adc S.LoadBinA.FileLen
sta R.CL Make CX=Range End=AUXTYPE+FILELEN
iny
lda (ZPQuickPtr2),y
sta R.BH
sta S.LoadBinA.AuxType+1
adc S.LoadBinA.FileLen+1
sta R.CH
lda ZPQuickPtr1 Compute relocation offset in DX
sec sec
sbc R.CL ...AX-CX... sbc S.LoadBinA.AuxType
sta R.CL sta R.DL DX=Offset=ZPQuickPtr1-AUXTYPE
lda R.AH lda ZPQuickPtr1+1
sbc R.CH sbc S.LoadBinA.AuxType+1
sta R.CH ...to CX sta R.DH
jsr S.BinRelocate
>LDYA ZPQuickPtr1
jsr S.BinRelocateYA
bcs .98 relocation error, dicard Code segment bcs .98 relocation error, dicard Code segment
lda R.DH get back bin path
lda S.LoadBinA.hFilename get back bin path
jsr S.PStrCpyA jsr S.PStrCpyA
bcs .98 bcs .98
pha save copy of bin path pha save copy of bin path
lda R.DL lda S.LoadBinA.hMem
jsr S.GetMemByIDA jsr S.GetMemByIDA
>STYA ZPQuickPtr1 >STYA ZPQuickPtr1
lda (ZPQuickPtr1) lda (ZPQuickPtr1)
ora #S.MEM.F.CODE This is a code segment ora #S.MEM.F.CODE This is a code segment
sta (ZPQuickPtr1) sta (ZPQuickPtr1)
ldy #S.MEM.BIN ldy #S.MEM.BIN
pla get back copy of bin path pla get back copy of bin path
sta (ZPQuickPtr1),y sta (ZPQuickPtr1),y
>LDYA R.AX return CS PTR ... not modified by S.LoadCodeReloc
ldx R.DL ...and hMEM to Caller lda S.LoadBinA.hMem
clc tax return hMEM to Caller...
jsr S.GetMemPtrA
clc ...and Y,A=PTR to CS
rts rts
.98 pha .98 pha
lda R.DL lda S.LoadBinA.hMem
jsr S.FreeMemA Discard Loaded Code jsr S.FreeMemA Discard Loaded Code
pla pla
.99 sec
rts
*--------------------------------------
* S.LoadDrvA
* in :
* A = hMem To Full Cmd Line
* out :
* none
*--------------------------------------
S.LoadDrvA >PUSHA push Cmd Line for S.PStrGetTkn
>LDYAI MSG.DRVLOAD
jsr S.SysScrPPSTR
jsr S.CreateDevice
bcc .1
pha save error code
>PULLA discard Cmd Line
pla
sec sec
rts rts
*--------------------------------------
.1 >PUSHBI $20 Push SEP=' ' S.LoadBinA.hFilename .BS 1
>PUSHBI 0 Push 0 for getting CMD And ARGS S.LoadBinA.hMem .BS 1
jsr S.PStrGetTkn S.LoadBinA.AuxType .BS 2
bcs .98 S.LoadBinA.FileLen .BS 2
ldy #S.DEV.hCMD *--------------------------------------
sta (DEVMGR.DEVPTR),y * S.BinRelocateYA :
* YA = Ptr to Code
>PUSHA push CMD for S.FileSearch * R.AX = Code Length
txa * R.BX = Range Start address to relocate
ldy #S.DEV.hARGS * R.CX = Range End address to relocate
sta (DEVMGR.DEVPTR),y * R.DX = offset to apply to all abs addresses between R.BX and R.CX
>PUSHWI ENV.DRV push ENVNAME=DRV *--------------------------------------
ldy #S.PS.hENV S.BinRelocateYA >STYA ZPQuickPtr1
lda TSKMGR.TABLE,y Get PS #0 Env ldy #H.BIN.JMP relocate Main JMP
>PUSHA lda (ZPQuickPtr1),y
jsr S.GetEnvVarP get value for ENV=%DRV%
bcs .98
sta LoadDrv.ENV
>PUSHA A=PStr to Value
jsr S.FileSearch find File in %DRV%
bcs .98 not Found
sta LoadDrv.BIN
jsr S.SysScrPPSTRA
lda LoadDrv.BIN
jsr S.LoadBinA X = BinPath hMem
bcs .97
>STYA Kernel.JMP save PTR to Code Segment
txa
ldy #S.DEV.hCS
sta (DEVMGR.DEVPTR),y save CS hMem in DEVSLOT
lda LoadDrv.BIN
jsr S.FreeMemA
lda LoadDrv.ENV
jsr S.FreeMemA
ldx #DEVMGR.OPEN
>LDYA DEVMGR.DEVPTR
jsr Kernel.DRVCALL Call DRV Open function
bcs .99
lda (DEVMGR.DEVPTR)
ora #S.DEV.F.INUSE Get Device Flags in A
sta (DEVMGR.DEVPTR)
clc clc
rts adc R.DL
.97 pha save error code
lda LoadDrv.BIN
jsr S.FreeMemA discard BIN in case of failed load
pla
.98 pha
lda LoadDrv.ENV
jsr S.FreeMemA
pla
.99 pha
jsr S.DestroyDevice
pla
sec
rts
*--------------------------------------
* S.LoadLib
* in :
* PULLW = PTR To Lib Name
* out :
* A = hMem To loaded LIB
*--------------------------------------
S.LoadLib jsr S.NewPStr
bcs .99
pha save LibName hMem for discard
jsr S.LoadLibA
bcs .98
plx get back STR hMem
pha save error code/hMem
txa
jsr S.FreeMemA discard STR hMem
pla get back error code/hMem
clc
rts
.98 plx get back STR hMem
pha save error code/hMem
txa
jsr S.FreeMemA discard STR hMem
pla get back error code/hMem
sec
.99 rts
*--------------------------------------
* S.LoadLibA
* in :
* A = hMem To Lib Name
* out :
* A = hMem of Loaded Lib
*--------------------------------------
S.LoadLibA >PUSHA push libname for S.FileSearch
>LDYAI MSG.LOADLIB
jsr S.SysScrPPSTR
>PUSHWI ENV.LIB push ENVNAME=LIB
ldy #S.PS.hENV
lda (TSKMGR.TSKPTR),y
>PUSHA
jsr S.GetEnvVarP get value for ENV=LIB
bcs .99
pha save hMem to LIB VALUE
>PUSHA Push %LIB% VALUE
jsr S.FileSearch find libname in %LIB%
bcs .98
pha save hMem to LIB full path
jsr S.SysScrPPSTRA
pla
pha
jsr S.LoadBinA A = hMem of filename full path
bcs .97
phx
>STYA Kernel.JMP
ldx #LIBMGR.LOAD
jsr Kernel.LIBCALL Call LIB.LOAD function
bcs .97
plx
pla discard LIB PATH
jsr S.FreeMemA
pla discard LIB VALUE
jsr S.FreeMemA
txa
clc
rts
.97 pla discard LIB PATH
jsr S.FreeMemA
.98 pla discard LIB VALUE
jsr S.FreeMemA
sec
.99 rts
*--------------------------------------
* S.UnloadLibA
* in :
* A = hMem To Lib
* out :
*--------------------------------------
S.UnloadLibA pha
jsr S.GetMemByIDA
>STYA ZPQuickPtr1
ldy #S.MEM.REFCNT
lda (ZPQuickPtr1),y Get count of those referencing this lib
dec only one left ?
beq .1
sta (ZPQuickPtr1),y sta (ZPQuickPtr1),y
pla
clc
rts
.1 ldy #S.MEM.PTR
lda (ZPQuickPtr1),y
pha
iny iny
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
ply adc R.DH
>STYA Kernel.JMP sta (ZPQuickPtr1),y
ldy #H.BIN.RELOC.TABLE skip Header, CS.SIZE & DS.SIZE... (16 bytes)
bra S.JmpRelocate
ldx #LIBMGR.UNLOAD S.DrvRelocateYA >STYA ZPQuickPtr1
jsr Kernel.BINCALL Call LIB.UNLOAD function ldy #0
pla
jmp S.FreeMemA S.JmpRelocate lda (ZPQuickPtr1),y Start Relocate JMP table
*-------------------------------------- tax
* S.BinRelocate :
* R.AX = base address to start relocate
* R.BX = segment length (including data)
* R.CX = offset to apply to all abs addresses within segment
* R.DX unmodified
*--------------------------------------
S.BinRelocate lda (R.AX)
cmp #K.BIN.MAGICHEADER
bne .99
ldy #1
lda (R.AX),y
cmp /K.BIN.MAGICHEADER
beq .1
.99 sec Not a Valid Relocatable BIN File, exiting
rts
.1 >PUSHW R.DX
lda R.AL
clc
adc R.BL Make BX end of Segment Range (BX=AX+BX)
sta R.BL
lda R.AH
adc R.BH
sta R.BH
iny iny
.2 lda (R.AX),y Start Relocate JMP table ora (ZPQuickPtr1),y
clc beq S.CodeRelocate $0000 = end of table
adc R.CL
tax save LO to X
iny
lda (R.AX),y if HI = 0,we are done
beq .3
adc R.CH
sta (R.AX),y
dey dey
txa get back LO txa
sta (R.AX),y
iny
iny
bra .2
.3 iny we already skipped the 2 "0" bytes indicating end of JMP table
lda R.AL
clc clc
adc (R.AX),y make DX = end of opcode range adc R.DL
sta R.DL sta (ZPQuickPtr1),y
iny iny
lda R.AH lda (ZPQuickPtr1),y
adc (R.AX),y adc R.DH
sta R.DH sta (ZPQuickPtr1),y
iny iny
* Start relocating opcodes between R.AX and R.DX with abs addressing pointing between R.AX and R.BX
* Applying offset = R.CX bra S.JmpRelocate
tya add current offset in Y to R.AX
S.CodeRelocate lda ZPQuickPtr1
clc clc
adc R.AL adc R.AL Make ZPQuickPtr2=End of code
sta ZPQuickPtr1 sta ZPQuickPtr2 =ZPQuickPtr1+AX (code len)
lda #0 lda ZPQuickPtr1+1
adc R.AH adc R.AH
sta ZPQuickPtr1+1 sta ZPQuickPtr2+1
.4 lda (ZPQuickPtr1) get OPCODE
iny
tya add current offset in Y to Ptr
clc
adc ZPQuickPtr1
sta ZPQuickPtr1
bcc .5
inc ZPQuickPtr1+1 ZPQuickPtr1=Current Code PTR
clc
.5 lda (ZPQuickPtr1) get OPCODE
tax tax
lda OPCODES,x get OPCODE definition lda OPCODES,x get OPCODE definition
bpl .7 abs addressing? bpl .7 abs addressing?
and #3 save Opcode length...
pha
ldy #1 ldy #1
lda (ZPQuickPtr1),y Get LO lda (ZPQuickPtr1),y Get LO
clc
adc R.CL add CX to abs address
sta ZPQuickPtr2 store relocated addr LO
iny
lda (ZPQuickPtr1),y Get HI
adc R.CH
sta ZPQuickPtr2+1 store relocated addr LO
dey
lda ZPQuickPtr2 Get new LO
sec
sbc R.AL
iny
lda ZPQuickPtr2+1 Get new HI
sbc R.AH
bcc .6 new addr < AX, out of range
dey
lda ZPQuickPtr2 Get new LO
sec sec
sbc R.BL sbc R.BL
iny iny
lda ZPQuickPtr2+1 Get new HI lda (ZPQuickPtr1),y Get HI
sbc R.BH sbc R.BH
bcs .6 new addr > BX, out of range bcc .6 addr < AX, out of range
dey dey
lda ZPQuickPtr2 Get new LO lda (ZPQuickPtr1),y Get LO
sta (ZPQuickPtr1),y sec
sbc R.CL
iny iny
lda ZPQuickPtr2+1 Get new HI lda (ZPQuickPtr1),y Get HI
sta (ZPQuickPtr1),y sbc R.CH
.6 lda OPCODES,x bcs .6 addr > CX, out of range
.7 and #$3 get OPCODE length
dey
lda (ZPQuickPtr1),y Get LO
clc clc
adc R.DL add DX to abs address
sta (ZPQuickPtr1),y store relocated addr LO
iny
lda (ZPQuickPtr1),y Get HI
adc R.DH
sta (ZPQuickPtr1),y store relocated addr HI
.6 pla
.7 clc A = OPCODE length
adc ZPQuickPtr1 adc ZPQuickPtr1
sta ZPQuickPtr1 sta ZPQuickPtr1
bcc .8 bcc .8
inc ZPQuickPtr1+1 inc ZPQuickPtr1+1
.8 sec A already got Ptr LO
sbc R.DL .8 lda ZPQuickPtr1 is Current PTR < Code Limit ?
lda ZPQuickPtr1+1 is Ptr greater than DX ? sec
sbc R.DH sbc ZPQuickPtr2
bcc .4 no, continue relocating lda ZPQuickPtr1+1
>PULLW R.DX sbc ZPQuickPtr2+1
bcc .5 yes, continue relocating
clc clc
rts rts
*--------------------------------------
MSG.DRVLOAD >PSTRING "\nLoadDrv:"
MSG.LOADLIB >PSTRING "\nLoadLib:"
LoadDrv.ENV .BS 1
LoadDrv.BIN .BS 1
*-------------------------------------- *--------------------------------------
* 65C02 OPCODES * 65C02 OPCODES
* Bit 7 : 1 absolute addressing * Bit 7 : 1 absolute addressing

View File

@ -1,35 +1,28 @@
PR#3 PR#3
PREFIX /A2OSX.BUILD PREFIX /A2OSX.SRC
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6
.LIST OFF .LIST OFF
.OP 65C02 .OP 65C02
*-------------------------------------- *--------------------------------------
DevMgr.HiMem .EQ $FFFE Protect IRQ vector in Aux LC
*--------------------------------------
* S.DevMgrInit * S.DevMgrInit
*-------------------------------------- *--------------------------------------
S.DevMgrInit ldx #S.DEV.SIZE*K.DEV.MAX S.DevMgrInit ldx #S.DEV.SIZE*2
.1 stz DEVMGR.TABLE-1,x .1 lda DevMgr.NUL-1,x
sta DevMgr.Table-1,x
dex dex
bne .1 bne .1
ldy #5 stz DevMgr.Table+S.DEV.SIZE*2+1
.2 lda DEVMGR.TABLE.NUL,y
sta DEVMGR.TABLE,y
dey
bpl .2
ldy #5
ldx #S.DEV.SIZE+5
.3 lda DEVMGR.TABLE.KBD,y
sta DEVMGR.TABLE,x
dex
dey
bpl .3
lda #1 reserve #0=NUL, #1=KBD lda #1 reserve #0=NUL, #1=KBD
sta DEVMGR.LASTID sta DevMgr.LastDevID
>LDYAI DevMgr.End
>STYA DevMgr.Free
clc clc
rts rts
*-------------------------------------- *--------------------------------------
@ -41,185 +34,185 @@ S.DevMgrInit ldx #S.DEV.SIZE*K.DEV.MAX
* Y,A = devslot * Y,A = devslot
* X Unmodified * X Unmodified
*-------------------------------------- *--------------------------------------
S.GetDevByIDA sta ZPQuickPtr1 S.GetDevByIDA cmp DevMgr.LastDevID
lda #K.DEV.MAX beq .1
sta ZPQuickPtr1+1 bcs .9
>LDYAI DEVMGR.TABLE .1 stz S.GetDevByIDA.T
>STYA ZPQuickPtr2
asl
.1 lda (ZPQuickPtr2) get S.DEV.F ror S.GetDevByIDA.T
bpl .2 In use ? asl
ldy #S.DEV.ID ror S.GetDevByIDA.T
lda (ZPQuickPtr2),y asl
cmp ZPQuickPtr1 ror S.GetDevByIDA.T
beq .8 asl
ror S.GetDevByIDA.T
.2 lda ZPQuickPtr2
clc adc #DevMgr.Table
adc #S.DEV.SIZE tay
sta ZPQuickPtr2 lda S.GetDevByIDA.T
bcc .3 adc /DevMgr.Table
inc ZPQuickPtr2+1 rts CC
.3 dec ZPQuickPtr1+1 .9 lda #DEVMGR.ERRDNF
bne .1 rts CS
sec S.GetDevByIDA.T .BS 1
rts
.8 >LDYA ZPQuickPtr2
clc
rts
*-------------------------------------- *--------------------------------------
* GetDevIDByNameA * GetDevIDByNameA
* IN: * IN:
* A = hPStr * A = hPStr
* OUT: * OUT:
* CC = OK, CS = ERROR * CC = OK, CS = ERROR
* A = DEVID * X = DEVID
* set DEVMGR.DEVPTR to devslot * Y,A = pDev
*-------------------------------------- *--------------------------------------
S.GetDevByNameA jsr S.GetMemPtrA S.GetDevByNameA jsr S.GetMemPtrA
S.GetDevByNameYA S.GetDevByNameYA
>STYA ZPQuickPtr1 >STYA ZPQuickPtr1
>LDYAI DEVMGR.TABLE >LDYAI DevMgr.Table+S.DEV.NAME
>STYA DEVMGR.DEVPTR >STYA ZPQuickPtr2
ldx #K.DEV.MAX ldx #0
.1 lda (DEVMGR.DEVPTR) get S.DEV.F
bpl .3 empty ? .1 lda (ZPQuickPtr1)
lda DEVMGR.DEVPTR
clc
adc #S.DEV.NAME
sta ZPQuickPtr2
lda DEVMGR.DEVPTR+1
adc /S.DEV.NAME
sta ZPQuickPtr2+1
lda (ZPQuickPtr1)
cmp (ZPQuickPtr2) cmp (ZPQuickPtr2)
bne .3 bne .3
tay tay
.2 lda (ZPQuickPtr1),y .2 lda (ZPQuickPtr1),y
cmp (ZPQuickPtr2),y cmp (ZPQuickPtr2),y
bne .3 bne .3
dey dey
bne .2 bne .2
ldy #S.DEV.ID
lda (DEVMGR.DEVPTR),y
clc
rts
.3 lda DEVMGR.DEVPTR
clc
adc #S.DEV.SIZE
sta DEVMGR.DEVPTR
bcc .5
inc DEVMGR.DEVPTR+1
.5 dex
bne .1
lda #DEVMGR.ERRDNF
sec
rts
*--------------------------------------
* S.GetDevTable
* IN :
* OUT CC = OK, CS = ERROR
* Y,A = PTR to dev table
* X = LASTID
*--------------------------------------
S.GetDevTable >LDYAI DEVMGR.TABLE
ldx DEVMGR.LASTID
rts
*--------------------------------------
* S.DevOutA
* IN :
* A = hDev
*--------------------------------------
S.DevOutA ldx #DEVMGR.OUT
jmp S.DevCallFunc
*--------------------------------------
* S.GetDevInfoA
*--------------------------------------
S.GetDevInfoA ldx #DEVMGR.GETINFO
jmp S.DevCallFunc
*--------------------------------------
* PRIVATE
*--------------------------------------
S.DevCallFunc jsr S.GetDevByIDA
bcs .9
>STYA pDevContext
ldy #S.DEV.hCS
lda (pDevContext),y
jsr S.GetMemPtrA X = unmodified
>STYA Kernel.JMP
>LDYA pDevContext
jsr Kernel.DRVCALL Call DRV function
.9 rts
*--------------------------------------
* S.CreateDevSlot
* IN : none
* OUT : A = DevID
* set DEVMGR.DEVPTR to freeslot
*--------------------------------------
S.CreateDevice >LDYAI DEVMGR.TABLE
>STYA DEVMGR.DEVPTR
ldx #K.DEV.MAX
.1 lda (DEVMGR.DEVPTR) lda ZPQuickPtr2
bpl .3
lda DEVMGR.DEVPTR
clc
adc #S.DEV.SIZE
sta DEVMGR.DEVPTR
bcc .2
inc DEVMGR.DEVPTR+1
.2 dex
bne .1
lda #DEVMGR.ERROOS
sec sec
rts sbc #S.DEV.NAME
.3 lda #0
tay tay
.4 sta (DEVMGR.DEVPTR),y lda ZPQuickPtr2+1
iny sbc /S.DEV.NAME
cpy #S.DEV.SIZE
bne .4
inc DEVMGR.LASTID
lda DEVMGR.LASTID
ldy #S.DEV.ID
sta (DEVMGR.DEVPTR),y
clc clc
rts rts
.3 lda ZPQuickPtr2
clc
adc #S.DEV.SIZE
sta ZPQuickPtr2
bcc .4
inc ZPQuickPtr2+1
.4 cpx DevMgr.LastDevID
inx
bcc .1
.9 lda #DEVMGR.ERRDNF
rts
*-------------------------------------- *--------------------------------------
* S.DestroyDevSlot S.GetDevEvent >LDYAI DevMgr.Table
* selected by (DEVMGR.DEVPTR) >STYA pDev
stz DevMgr.DevID
.1 ldy #S.DEV.F
lda (pDev),y get S.DEV.F
and #S.DEV.F.EVENT
beq .2 EVENT enabled ?
ldx #DEVMGR.GETEVENT
jsr pDevJmp Call DRV GetEvent function
bcc .8 Got An Event
.2 lda pDev
clc
adc #S.DEV.SIZE
sta pDev
bcc .3
inc pDev+1
.3 lda DevMgr.DevID
inc DevMgr.DevID
cmp DevMgr.LastDevID
bne .1
lda #0 error code=0,CS=no event
sec
rts
.8 lda DevMgr.DevID Carry is alredy clear
ldy #S.EVT.hDEV
sta (pEvent),y
rts
*-------------------------------------- *--------------------------------------
S.DestroyDevice ldy #S.DEV.hCS DevMgr.Free .BS 2
lda (DEVMGR.DEVPTR),y DevMgr.DevID .BS 1
beq .1 DevMgr.LastDevID .BS 1
jsr S.FreeMemA
.1 ldy #S.DEV.hDS
lda (DEVMGR.DEVPTR),y
beq .2
jsr S.FreeMemA
.2 ldy #S.DEV.hCMD
lda (DEVMGR.DEVPTR),y
beq .3
jsr S.FreeMemA
.3 ldy #S.DEV.hARGS
lda (DEVMGR.DEVPTR),y
beq .4
jsr S.FreeMemA
.4 rts
*-------------------------------------- *--------------------------------------
DEVMGR.TABLE.NUL .DA #S.DEV.F.INUSE+S.DEV.F.CHAR+S.DEV.F.BLOCK DevMgr.NUL cld
.HS 00 ID jmp (DevMgr.NUL.Code,x)
>PSTRING "NUL" NAME .DA #S.DEV.F.INUSE+S.DEV.F.SHARE+S.DEV.F.COUT+S.DEV.F.CHAR
DEVMGR.TABLE.KBD .DA #S.DEV.F.INUSE+S.DEV.F.CHAR >PSTRING "NUL" NAME
.HS 01 ID .HS 00 NAME must Be 5 bytes long
>PSTRING "KBD" NAME .HS 00.00
DEVMGR.LASTID .BS 1 .HS 00.00.00.00
*-------------------------------------- *--------------------------------------
DevMgr.KBD cld
jmp (DevMgr.KBD.Code,x)
.DA #S.DEV.F.INUSE+S.DEV.F.EVENT+S.DEV.F.CHAR
>PSTRING "KBD" NAME
.HS 00 NAME must Be 5 bytes long
.HS 00.00
.HS 00.00.00.00
*--------------------------------------
DevMgr.NUL.Code .DA .8 OPEN
.DA .8 GETEVENT
.DA .8 COUT
.DA .8 CLOSE
.DA .8 GETINFO
.DA .8 IRQ
.8 clc
rts
*--------------------------------------
DevMgr.KBD.Code .DA .8 OPEN
.DA DevMgr.KBD.GETEVENT
.DA .8 COUT
.DA .8 CLOSE
.DA .8 GETINFO
.DA .8 IRQ
.8 clc
rts
*--------------------------------------
DevMgr.KBD.GETEVENT
lda KBD
bpl .9
sta KBDSTROBE
and #$7F
ldy #S.EVT.DATA
sta (pEvent),y
iny
lda OPENAPPLE
asl
lda SOLIDAPPLE
ror
and #$C0
sta (pEvent),y
lda #S.EVT.F.KEY
sta (pEvent)
clc
rts
.9 inc A2osX.RANDOM16
bne .99
inc A2osX.RANDOM16+1
.99 lda #0 error code=0
sec no event
rts
*--------------------------------------
DevMgr.End .EQ *
MAN MAN
SAVE SYS/KERNEL.S.DEV SAVE SYS/KERNEL.S.DEV
LOAD SYS/KERNEL.S LOAD SYS/KERNEL.S

285
SYS/KERNEL.S.DRV.txt Normal file
View 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

View File

@ -1,28 +1,20 @@
PR#3 PR#3
PREFIX /A2OSX.BUILD PREFIX /A2OSX.SRC
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6
.LIST OFF .LIST OFF
.OP 65C02 .OP 65C02
*-------------------------------------- *--------------------------------------
* S.ExpandPStr
* In:
* PULLW = PSTR to String to Expand (PSTRING)
* Out:
* A = hMem to Expanded String (PSTRING)
*--------------------------------------
* S.ExpandPStrA * S.ExpandPStrA
* In: * In:
* A = hMem of String to Expand (PSTRING) * A = hMem of String to Expand (PSTRING)
* Out: * Out:
* A = hMem to Expanded String (PSTRING) * A = hMem to Expanded String (PSTRING)
*-------------------------------------- *--------------------------------------
S.ExpandPStr >PULLW R.AX
bra S.ExpandPStr2
S.ExpandPStrA jsr S.GetMemPtrA S.ExpandPStrA jsr S.GetMemPtrA
>STYA R.AX S.ExpandPStrYA >STYA R.AX
S.ExpandPStr2 stz TmpBuffer256 init Expanded String len=0 stz TmpBuffer256 init Expanded String len=0
stz R.BL reset "in var" stz R.BL reset "in var"
ldy #0 ldy #0
.1 iny .1 iny
@ -65,7 +57,7 @@ S.ExpandPStr2 stz TmpBuffer256 init Expanded String len=0
pha Get back ENVNAME hMem pha Get back ENVNAME hMem
>PUSHA >PUSHA
ldy #S.PS.hENV ldy #S.PS.hENV
lda (TSKMGR.TSKPTR),y lda (pPs),y
>PUSHA >PUSHA
jsr S.GetEnvVarH jsr S.GetEnvVarH
bcs .5 bcs .5
@ -98,8 +90,8 @@ S.ExpandPStr2 stz TmpBuffer256 init Expanded String len=0
cmp (R.AX) last char? cmp (R.AX) last char?
beq .81 beq .81
jmp .1 jmp .1
.81 >PUSHWI TmpBuffer256 .81 >LDYAI TmpBuffer256
jsr S.NewPStr jsr S.NewPStrYA
rts rts
*-------------------------------------- *--------------------------------------
* S.CreateEnv * S.CreateEnv
@ -118,7 +110,7 @@ S.CreateEnv >PUSHWI K.ENV.SIZE get a buffer for ENV
clc clc
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
* S.DupEnvA2 * S.DupEnvA
* In: * In:
* A = ENV hMem To Duplicate * A = ENV hMem To Duplicate
* Out: * Out:
@ -128,8 +120,7 @@ S.DupEnvA pha
jsr S.GetMemPtrA jsr S.GetMemPtrA
>STYA ZPQuickPtr1 >STYA ZPQuickPtr1
pla pla
jsr S.GetMemLenA >PUSHWI K.ENV.SIZE
>PUSHYA
>PUSHBI 0 >PUSHBI 0
jsr S.GetMem jsr S.GetMem
bcs .9 bcs .9
@ -401,6 +392,24 @@ S.SelectEnv
.9 sec .9 sec
rts rts
*-------------------------------------- *--------------------------------------
S.PrintSysEnv ldy #S.PS.hENV
lda TskMgr.Table,y Get PS #0 ENV
jsr S.GetMemPtrA
>STYA R.AX
.1 lda (R.AX)
beq .8 Ending 0 ?
>LDYA R.AX
jsr S.SysScrPPSTRYA
jsr S.SysScrCROUT
lda R.AL
sec
adc (R.AX) Add len+1 to PTR
sta R.AL
bcc .1
inc R.AH
bra .1
.8 rts
*--------------------------------------
MAN MAN
SAVE SYS/KERNEL.S.ENV SAVE SYS/KERNEL.S.ENV
LOAD SYS/KERNEL.S LOAD SYS/KERNEL.S

View File

@ -1,5 +1,5 @@
PR#3 PR#3
PREFIX /A2OSX.BUILD PREFIX /A2OSX.SRC
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6
@ -17,17 +17,18 @@ S.EvtMgrInit stz EVTMGR.PENDING
* OUT : * OUT :
* CS = no event, A = ERROR * CS = no event, A = ERROR
* CC * event in YA * CC * event in YA
* (EVTMGR.EVTPTR) * (pEvent)
*-------------------------------------- *--------------------------------------
S.GetEvent lda EVTMGR.PENDING Get Pending EVENT hMem if any S.GetEvent lda EVTMGR.PENDING Get Pending EVENT hMem if any
beq .1 beq .1
jsr S.GetMemPtrA jsr S.GetMemPtrA
>STYA EVTMGR.EVTPTR >STYA pEvent
clc clc
rts rts
.1 jsr S.CreateEvent .1 jsr S.CreateEvent
bcs .9 bcs .9
stx EVTMGR.PENDING
jsr S.GetSysEvent jsr S.GetSysEvent
bcc .9 got SYS event bcc .9 got SYS event
jsr S.GetDevEvent jsr S.GetDevEvent
@ -39,12 +40,12 @@ S.GetEvent lda EVTMGR.PENDING Get Pending EVENT hMem if any
*-------------------------------------- *--------------------------------------
S.GetSysEvent lda VBL get VLINE status S.GetSysEvent lda VBL get VLINE status
eor EVTMGR.VBLSTATE eor EVTMGR.VBLSTATE
bpl .2 no change bpl .9 no change
sta EVTMGR.VBLSTATE save new sta EVTMGR.VBLSTATE save new
dec EVTMGR.FRAMECNT dec EVTMGR.FRAMECNT
bne .2 bne .9
lda #K.TIMER16RESOLUTION lda #K.TIMER16RESOLUTION
sta EVTMGR.FRAMECNT sta EVTMGR.FRAMECNT
@ -53,97 +54,26 @@ S.GetSysEvent lda VBL get VLINE status
inc A2osX.TIMER16+1 inc A2osX.TIMER16+1
.1 lda #S.EVT.F.TIMER .1 lda #S.EVT.F.TIMER
sta (EVTMGR.EVTPTR)
clc
rts
.2 lda KBD .8 sta (pEvent)
bpl .9 clc
and #$7F
sta KBDSTROBE
ldy #S.EVT.DATA
sta (EVTMGR.EVTPTR),y
iny
lda OPENAPPLE
asl
lda SOLIDAPPLE
ror
and #$C0
sta (EVTMGR.EVTPTR),y
lda #S.EVT.F.KEY
sta (EVTMGR.EVTPTR)
ldy #S.EVT.hDEV
lda #1 Source dev = KBD
sta (EVTMGR.EVTPTR),y
clc
rts rts
.9 inc A2osX.RANDOM16 .9 lda #0 error code=0
bne .99
inc A2osX.RANDOM16+1
.99 lda #0 error code=0
sec no event sec no event
rts rts
*-------------------------------------- *--------------------------------------
S.GetDevEvent >LDYAI DEVMGR.TABLE
>STYA DEVMGR.DEVPTR
ldx #K.DEV.MAX
.1 lda (DEVMGR.DEVPTR) get S.DEV.F
bpl .3 empty ?
and #S.DEV.F.EVENT
beq .3 EVENT enabled ?
ldy #S.DEV.ID
lda (DEVMGR.DEVPTR),y
ldy #S.EVT.hDEV
sta (EVTMGR.EVTPTR),y
ldy #S.DEV.hCS
lda (DEVMGR.DEVPTR),y
jsr S.GetMemPtrA
>STYA Kernel.JMP
phx
>PUSHW EVTMGR.EVTPTR
ldx #DEVMGR.GETEVENT
jsr Kernel.DRVCALL Call DRV GetEvent function
plx
bcc .9 Got An Event
.3 lda DEVMGR.DEVPTR
clc
adc #S.DEV.SIZE
sta DEVMGR.DEVPTR
bcc .4
inc DEVMGR.DEVPTR+1
.4 dex
bne .1
lda #0 error code=0
sec no event
.9 rts
*--------------------------------------
* S.CreateEvent * S.CreateEvent
* OUT : * OUT :
* X = hMem * X = hMem
* Y,A = PTR to EVENT * Y,A = PTR to EVENT
*-------------------------------------- *--------------------------------------
S.CreateEvent >PUSHWI S.EVT.SIZE S.CreateEvent >PUSHWI S.EVT.SIZE
>PUSHBI 0 >PUSHBI S.MEM.F.INIT0
jsr S.GetMem jsr S.GetMem
bcs .9 bcs .9
>STYA EVTMGR.EVTPTR >STYA pEvent
lda #0 stx EVTMGR.PENDING
ldy #S.EVT.SIZE-1
.1 sta (EVTMGR.EVTPTR),y
dey
bpl .1
clc
.9 rts
*--------------------------------------
S.DestroyEvent lda EVTMGR.PENDING
beq .9
jsr S.DestroyEventA
stz EVTMGR.PENDING
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
* S.DestroyEvent * S.DestroyEvent
@ -151,24 +81,29 @@ S.DestroyEvent lda EVTMGR.PENDING
* A = Event hMem * A = Event hMem
* OUT : * OUT :
*-------------------------------------- *--------------------------------------
S.DestroyEventA pha S.DestroyEvent lda EVTMGR.PENDING
jsr S.GetMemPtrA beq .9
>STYA EVTMGR.EVTPTR
lda (EVTMGR.EVTPTR) lda (pEvent)
and #S.EVT.F.hMEM1 and #S.EVT.F.hMEM1
beq .1 beq .1
ldy #S.EVT.DATALO ldy #S.EVT.DATALO
lda (EVTMGR.EVTPTR),y lda (pEvent),y
jsr S.FreeMemA jsr S.FreeMemA
.1 lda (EVTMGR.EVTPTR)
.1 lda (pEvent)
and #S.EVT.F.hMEM2 and #S.EVT.F.hMEM2
beq .2 beq .2
ldy #S.EVT.DATAHI ldy #S.EVT.DATAHI
lda (EVTMGR.EVTPTR),y lda (pEvent),y
jsr S.FreeMemA jsr S.FreeMemA
.2 pla
.2 lda EVTMGR.PENDING
jsr S.FreeMemA jsr S.FreeMemA
rts stz EVTMGR.PENDING
.9 rts
*-------------------------------------- *--------------------------------------
EVTMGR.VBLSTATE .BS 1 EVTMGR.VBLSTATE .BS 1
EVTMGR.FRAMECNT .BS 1 EVTMGR.FRAMECNT .BS 1

View File

@ -1,5 +1,5 @@
PR#3 PR#3
PREFIX /A2OSX.BUILD PREFIX /A2OSX.SRC
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6
@ -9,7 +9,7 @@ AUTO 6
* PUBLIC * PUBLIC
*-------------------------------------- *--------------------------------------
S.CheckPrefixA jsr S.GetMemPtrA S.CheckPrefixA jsr S.GetMemPtrA
S.CheckPrefix >STYA MLICALL.PARAMS+1 S.CheckPrefixYA >STYA MLICALL.PARAMS+1
>STYA ZPQuickPtr1 >STYA ZPQuickPtr1
lda (ZPQuickPtr1) lda (ZPQuickPtr1)
beq .98 beq .98
@ -20,7 +20,7 @@ S.CheckPrefix >STYA MLICALL.PARAMS+1
bne .98 bne .98
cpx #1 "/" allowed for listing online volumes cpx #1 "/" allowed for listing online volumes
beq .8 beq .8
>KMLICALL MLIGETFILEINFO >MLICALL MLIGETFILEINFO
bcs .98 No, invalid path... bcs .98 No, invalid path...
lda MLICALL.PARAMS+4 Check file type lda MLICALL.PARAMS+4 Check file type
cmp #$0F Directory? cmp #$0F Directory?
@ -46,37 +46,46 @@ S.FileSearch >PULLA Get Search path
pla pla
sec sec
rts rts
.10 sta R.BL Store Expanded path list to search .10 sta R.BL Store Expanded path list to search
>PULLB R.AH Store Filename >PULLB R.AH Store Filename
lda #1 lda #1
sta R.BH Start At Token 1 sta R.BH Start At Token 1
.1 >PUSHB R.BL push expanded path list .1 >PUSHB R.BL push expanded path list
>PUSHBI $3B Push SEP=';' >PUSHBI $3B Push SEP=';'
>PUSHB R.BH Push Token IDX >PUSHB R.BH Push Token IDX
jsr S.PStrGetTkn Get R.BL token in A jsr S.PStrGetTkn Get R.BL token in A
bcs .98 bcs .98
sta R.CL Store Token path sta R.CL Store Token path
>PUSHB R.AH push filename >PUSHB R.AH push filename
>PUSHB R.CL Push Token path >PUSHB R.CL Push Token path
jsr S.PStrCat jsr S.PStrCat
bcs .97 bcs .97
sta R.CH Store Full path (Token Path+filename) sta R.CH Store Full path (Token Path+filename)
jsr S.MLIGetFileInfoA jsr S.MLIGetFileInfoA
bcc .8 bcc .8
lda R.CH Discard this Full Path lda R.CH Discard this Full Path
jsr S.FreeMemA jsr S.FreeMemA
lda R.CL Discard Token path lda R.CL Discard Token path
jsr S.FreeMemA jsr S.FreeMemA
inc R.BH Try next Token inc R.BH Try next Token
bne .1 bne .1
beq .98 go to discard Expanded path list beq .98 go to discard Expanded path list
.97 lda R.CL Discard Token path .97 lda R.CL Discard Token path
jsr S.FreeMemA jsr S.FreeMemA
.98 lda R.BL Discard Expanded Path list .98 lda R.BL Discard Expanded Path list
jsr S.FreeMemA jsr S.FreeMemA
lda #SYSMGR.ERRFNF lda #SYSMGR.ERRFNF
sec sec
rts rts
.8 jsr .97 Dicard all except Full Path .8 jsr .97 Dicard all except Full Path
lda R.CH lda R.CH
clc clc
@ -91,20 +100,24 @@ S.FileSearch >PULLA Get Search path
*-------------------------------------- *--------------------------------------
S.LoadFileA jsr S.MLIOpenA S.LoadFileA jsr S.MLIOpenA
bcs .99 bcs .99
sta R.AL save ref_num sta R.AL save ref_num
stx R.AH save Prodos Buffer for freemem stx R.AH save Prodos Buffer for freemem
jsr S.MLIGetEOFA jsr S.MLIGetEOFA
bcs .98 bcs .98
phx Larger than 64k? phx Larger than 64k?
plx plx
beq .1 File too big!!!! beq .1 File too big!!!!
lda #SYSMGR.ERRFTB lda #SYSMGR.ERRFTB
bra .98 bra .98
.1 >STYA R.BX save Length .1 >STYA R.BX save Length
>PUSHYA Push Length for S.GetMem >PUSHYA Push Length for S.GetMem
>PUSHBI 0 >PUSHBI 0
jsr S.GetMem jsr S.GetMem
bcs .98 bcs .98
>STYA R.CX >STYA R.CX
stx R.DL save Segment hMem stx R.DL save Segment hMem
>PUSHW R.BX Push Length for S.ReadFile >PUSHW R.BX Push Length for S.ReadFile
@ -112,24 +125,29 @@ S.LoadFileA jsr S.MLIOpenA
>PUSHB R.AL Push ref_num >PUSHB R.AL Push ref_num
jsr S.MLIRead jsr S.MLIRead
bcs .97 bcs .97
lda R.AL lda R.AL
jsr S.MLICloseA jsr S.MLICloseA
lda R.AH lda R.AH
jsr S.FreeMemA Discard ProDOS IO Buffer jsr S.FreeMemA Discard ProDOS IO Buffer
>LDYA R.BX Return File Length... >LDYA R.BX Return File Length...
ldx R.DL ...and hMem to Caller ldx R.DL ...and hMem to Caller
clc clc
rts rts
.97 pha .97 pha
lda R.DL lda R.DL
jsr S.FreeMemA freemem because of failed load jsr S.FreeMemA freemem because of failed load
pla pla
.98 pha .98 pha
lda R.AL lda R.AL
jsr S.MLICloseA jsr S.MLICloseA
lda R.AH lda R.AH
jsr S.FreeMemA ProDOS IO Buffer jsr S.FreeMemA ProDOS IO Buffer
pla pla
.99 sec .99 sec
rts rts
*-------------------------------------- *--------------------------------------
@ -143,7 +161,7 @@ S.ListDirInitA sta R.AL
stz TmpFileName Reset File.Pattern stz TmpFileName Reset File.Pattern
jsr S.GetMemPtrA jsr S.GetMemPtrA
>STYA R.BX Store path >STYA R.BX Store path
jsr S.CheckPrefix is it a existing directory? jsr S.CheckPrefixYA is it a existing directory?
bcc .4 yes, continue with empty pattern bcc .4 yes, continue with empty pattern
lda (R.BX) no, get pattern at end of full path lda (R.BX) no, get pattern at end of full path
@ -174,13 +192,11 @@ S.ListDirInitA sta R.AL
sta (R.BX) remove pattern from path sta (R.BX) remove pattern from path
.4 >PUSHWI S.LISTDIR.SIZE get LISTDIR Struct .4 >PUSHWI S.LISTDIR.SIZE get LISTDIR Struct
>PUSHBI 0 >PUSHBI S.MEM.F.INIT0 reset all bytes
jsr S.GetMem jsr S.GetMem
bcs .99 bcs .99
stx R.AH stx R.AH
>STYA R.CX Store LISTDIR Struct >STYA R.CX Store LISTDIR Struct
txa
jsr S.ClrMemA reset all bytes
ldy TmpFileName ldy TmpFileName
beq .5 beq .5
@ -233,8 +249,10 @@ S.ListDirInitAV >PUSHWI 256
jsr S.MLIOnline jsr S.MLIOnline
bcs .98 bcs .98
ldy #S.LISTDIR.ONLINEPTR ldy #S.LISTDIR.ONLINEPTR
lda #0 make index point first Entry
sta (R.CX),y * lda #0 make index point first Entry
* sta (R.CX),y
clc clc
rts rts
.98 lda (R.CX) .98 lda (R.CX)
@ -242,10 +260,12 @@ S.ListDirInitAV >PUSHWI 256
.99 sec .99 sec
rts rts
*-------------------------------------- *--------------------------------------
S.ListDirInitAD lda #0 S.ListDirInitAD
sta (R.CX) reset hONLINE * lda #0
* sta (R.CX) reset hONLINE
>LDYA R.BX Open DIR >LDYA R.BX Open DIR
jsr S.MLIOpen jsr S.MLIOpenYA
bcs .99 bcs .99
ldy #S.LISTDIR.REFNUM ldy #S.LISTDIR.REFNUM
sta (R.CX),y save ref_num sta (R.CX),y save ref_num
@ -284,10 +304,11 @@ S.ListDirInitAD lda #0
ldy #S.LISTDIR.FC+1 ldy #S.LISTDIR.FC+1
sta (R.CX),y sta (R.CX),y
ldy #S.LISTDIR.FI * ldy #S.LISTDIR.FI
sta (R.CX),y * lda #0
iny * sta (R.CX),y
sta (R.CX),y set FI to $0000 * iny
* sta (R.CX),y set FI to $0000
clc clc
.99 rts .99 rts
*-------------------------------------- *--------------------------------------
@ -393,7 +414,7 @@ S.ListDirNextAD stz R.DL Reset Return Record hMem
lda (R.AX) Is is a deleted file ? (storage_type=0) lda (R.AX) Is is a deleted file ? (storage_type=0)
and #$F0 and #$F0
beq .40 beq .5
cmp #$F0 Volume header ? cmp #$F0 Volume header ?
beq .30 yes, do not filter beq .30 yes, do not filter
@ -403,8 +424,9 @@ S.ListDirNextAD stz R.DL Reset Return Record hMem
ldy #S.LISTDIR.hPATTERN any filter ? ldy #S.LISTDIR.hPATTERN any filter ?
lda (R.CX),y lda (R.CX),y
beq .30 beq .30
jsr S.GetMemPtrA jsr S.GetMemPtrA
>PUSHYA push Filter hMem >PUSHYA push Filter PTR
lda (R.AX) lda (R.AX)
and #$0F and #$0F
@ -415,9 +437,9 @@ S.ListDirNextAD stz R.DL Reset Return Record hMem
dey dey
bne .31 bne .31
>PUSHWI TmpFileName push Filename >PUSHWI TmpFileName push Filename PTR
jsr S.PStrMatchP jsr S.PStrMatchP
bcs .40 no match bcs .5 no match
.30 ldy #S.LISTDIR.EL Get Entry length .30 ldy #S.LISTDIR.EL Get Entry length
lda (R.CX),y lda (R.CX),y
@ -439,23 +461,23 @@ S.ListDirNextAD stz R.DL Reset Return Record hMem
dey dey
bpl .4 bpl .4
.40 ldy #S.LISTDIR.EIB Set ENTRY INDEX IN BLOCK +=1 .5 ldy #S.LISTDIR.EIB Set ENTRY INDEX IN BLOCK +=1
lda (R.CX),y lda (R.CX),y
inc inc
sta (R.CX),y sta (R.CX),y
ldy #S.LISTDIR.EL Set BLOCK PTR +=entry_length ldy #S.LISTDIR.EL Set BLOCK PTR +=entry_length
lda (R.CX),y lda (R.CX),y
ldy #S.LISTDIR.BLKPTR ldy #S.LISTDIR.BLKPTR
clc clc
adc (R.CX),y adc (R.CX),y
sta (R.CX),y sta (R.CX),y
bcc .5
iny iny
lda (R.CX),y lda (R.CX),y
inc adc #0
sta (R.CX),y sta (R.CX),y
.5 lda (R.AX) lda (R.AX)
and #$E0 is storage_type = $F or $E ? and #$E0 is storage_type = $F or $E ?
cmp #$E0 yes, do NOT increase FI cmp #$E0 yes, do NOT increase FI
bne .6 bne .6
@ -503,7 +525,8 @@ S.ListDirCloseA pha
beq .3 beq .3
jsr S.FreeMemA jsr S.FreeMemA
.3 lda (ZPQuickPtr1) Online buffer .3 ldy #S.LISTDIR.hONLINE
lda (ZPQuickPtr1),y
beq .4 beq .4
jsr S.FreeMemA jsr S.FreeMemA
@ -535,7 +558,7 @@ S.ListDirReadBlock
>STYA MLICALL.PARAMS+2 >STYA MLICALL.PARAMS+2
>LDYAI 512 >LDYAI 512
>STYA MLICALL.PARAMS+4 >STYA MLICALL.PARAMS+4
>KMLICALL MLIREAD >MLICALL MLIREAD
bcs .9 bcs .9
ldy #S.LISTDIR.BLKPTR set BLKPTR to $0004 ldy #S.LISTDIR.BLKPTR set BLKPTR to $0004
lda #4 lda #4

115
SYS/KERNEL.S.LIB.txt Normal file
View 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

View File

@ -1,5 +1,5 @@
PR#3 PR#3
PREFIX /A2OSX.BUILD PREFIX /A2OSX.SRC
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6
@ -9,48 +9,46 @@ AUTO 6
* !!!!!!!! DO NOT USE VCPU16 !!!!!!!! * !!!!!!!! DO NOT USE VCPU16 !!!!!!!!
* !!!!!! DO NOT USE ZPQuickPTRs !!!!! * !!!!!! DO NOT USE ZPQuickPTRs !!!!!
*-------------------------------------- *--------------------------------------
ZPMemMgrReqS .EQ ZPMemMgr store requested Size ZPMemMgrSPtr .EQ ZPMemMgr Pointer To Slot selected
ZPMemMgrReqF .EQ ZPMemMgr+2 store requested Flags ZPMemMgrTmp1 .EQ ZPMemMgr+2
ZPMemMgrSPtr .EQ ZPMemMgr+6 Pointer To Slot selected ZPMemMgrTmp2 .EQ ZPMemMgr+4
ZPMemMgrTmp1 .EQ ZPMemMgr+8 ZPMemMgrTmp3 .EQ ZPMemMgr+6
ZPMemMgrTmp2 .EQ ZPMemMgr+10
ZPMemMgrTmp3 .EQ ZPMemMgr+12
*-------------------------------------- *--------------------------------------
* TODO : * TODO :
* - Create a 256 bytes table in SLOT #0 * - Create a 256 bytes table
* (eh, mem.ID=0 always used! useful to test if hMem=0)
* mapping hMem's to real memory blocks to help * mapping hMem's to real memory blocks to help
* Garbage collector move blocks * Garbage collector move blocks
* - mem.ID=0 always used! useful to test if hMem=0
*-------------------------------------- *--------------------------------------
S.MemMgrInit stz MEMMGR.MHLIMIT S.MemMgrInit >LDYAI MemMgr.MHiMem
stz MEMMGR.HIMEM >STYA MemMgr.HiMem
>STYA MemMgr.Free
ldx /MLI >LDYAI MemMgr.MLoMem
dex Reserve $BE00 For Global Page >STYA MemMgr.LoMem
stx MEMMGR.MHLIMIT+1
stx MEMMGR.HIMEM+1
>LDYAI A2osX.LOMEM stz MemMgr.LastSlot Reserve Slot #0
>STYA MEMMGR.MLLIMIT
>STYA MEMMGR.LOMEM sta SETREADAUX
stz MEMMGR.TABLESIZE Init Table Size to 0 sta SETWRITEAUX
* jsr S.UpdateMemStats Not needed, will be called by S.GetMem
>PUSHWI 256 get a 256 bytes buffer for Map Table, hMem=0 >LDYAI MemMgr.XHiMem
>PUSHBI 0 >STYA MemMgr.HiMem
jsr S.GetMem create it... >STYA MemMgr.Free
>LDYAI MemMgr.XLoMem
>STYA MemMgr.LoMem
stz MemMgr.LastSlot Reserve Slot #0
sta CLRREADAUX
sta CLRWRITEAUX
clc clc
rts rts
*-------------------------------------- *--------------------------------------
* PUBLIC * PUBLIC
*-------------------------------------- *--------------------------------------
S.SetLowMemLimit
clc
rts
*--------------------------------------
S.GarbageCollector
clc
rts
*--------------------------------------
* S.GetMem * S.GetMem
* In: * In:
* PULLB = FLAGS * PULLB = FLAGS
@ -60,58 +58,99 @@ S.GarbageCollector
* X = S.MEM.ID * X = S.MEM.ID
* CS on err * CS on err
*-------------------------------------- *--------------------------------------
S.GetMem >PULLB ZPMemMgrReqF store requested flags S.GetMem >PULLB MemMgr.ReqFlags store requested flags
>PULLW ZPMemMgrReqS store requested size and #S.MEM.F.AUX
lda ZPMemMgrReqS align REQS to 16 bytes beq .11
sta SETREADAUX Aux Mem requested,switch to AUX
sta SETWRITEAUX
.11 >PULLW MemMgr.ReqSize Store requested size
lda MemMgr.ReqSize align REQS to 16 bytes
and #$0F and #$0F
beq .10 beq .10
lda ZPMemMgrReqS
lda MemMgr.ReqSize
and #$F0 and #$F0
clc clc
adc #$10 adc #$10
sta ZPMemMgrReqS sta MemMgr.ReqSize
bcc .10 bcc .10
inc ZPMemMgrReqS+1 inc MemMgr.ReqSize+1
.10 ldx #0 init to SLOT #0 of MEMSLOT list
.10 >LDYAI MemMgr.Table
>STYA ZPMemMgrSPtr
ldx #0 Current slot=0
lda MEMMGR.TABLESIZE Check if some free slot to reuse first lda MemMgr.LastSlot Check if some free slot to reuse first
beq .6 beq .41
.1 txa
jsr S.GetMemByIDA sta MemMgr.SlotCnt
.1 inx move to next slot
jsr MemMgr.NextSlot
lda (ZPMemMgrSPtr) Get Flags lda (ZPMemMgrSPtr) Get Flags
bmi .4 in use ? bmi .4 in use ?
.2 lda ZPMemMgrReqF Found an empty slot
.2 lda MemMgr.ReqFlags Found an empty slot
and #S.MEM.F.ALIGN is request needs a page align ? and #S.MEM.F.ALIGN is request needs a page align ?
beq .3 beq .3
ldy #S.MEM.PTR ldy #S.MEM.PTR
lda (ZPMemMgrSPtr),y get LO of PTR lda (ZPMemMgrSPtr),y get LO of PTR
bne .4 not page-aligned bne .4 not page-aligned
.3 ldy #S.MEM.LEN .3 ldy #S.MEM.LEN
lda (ZPMemMgrSPtr),y get LEN of this block lda (ZPMemMgrSPtr),y get LEN of this block
cmp ZPMemMgrReqS compare with requested size cmp MemMgr.ReqSize compare with requested size
bne .4 bne .4
iny iny
lda (ZPMemMgrSPtr),y lda (ZPMemMgrSPtr),y
cmp ZPMemMgrReqS+1 cmp MemMgr.ReqSize+1
beq .5 requested size matches slot size !!! beq .7 requested size matches slot size !!!
.4 inx move to next slot
cpx MEMMGR.TABLESIZE last slot ? .4 dec MemMgr.SlotCnt any other slot to check?
bne .1 check for another slot bne .1 last one, create a new slot
beq .6 last one, create a new slot *-------------- Create a New SLOT
.41 lda MemMgr.ReqFlags
and #S.MEM.F.ALIGN is request needs a page align ?
beq .6
lda MemMgr.Free target PTR will be page aligned ?
sec
sbc MemMgr.ReqSize
beq .6 yes, allocate
tay no, reserve a free slot to fill gap
lda #0
jsr MemMgr.AddSlot X = new slot
bcs .9
.6 >LDYA MemMgr.ReqSize
jsr MemMgr.AddSlot X = new slot
bcs .9
*-------------- Reuse this SLOT *-------------- Reuse this SLOT
.5 lda ZPMemMgrReqF get requested flags .7 lda MemMgr.ReqFlags get requested flags
ora #S.MEM.F.INUSE mark as in use ora #S.MEM.F.INUSE mark as in use
sta (ZPMemMgrSPtr) sta (ZPMemMgrSPtr)
lda #0 and #S.MEM.F.INIT0
beq .8
jsr MemMgr.Init0
.8 lda #0
ldy #S.MEM.BIN ldy #S.MEM.BIN
sta (ZPMemMgrSPtr),y sta (ZPMemMgrSPtr),y
inc Mark this slot used by one task
inc Mark this slot used by one process
ldy #S.MEM.REFCNT ldy #S.MEM.REFCNT
sta (ZPMemMgrSPtr),y sta (ZPMemMgrSPtr),y
ldy #S.PS.ID ldy #S.PS.ID
lda (TSKMGR.TSKPTR),y lda (pPs),y
ldy #S.MEM.OWNERPID ldy #S.MEM.OWNERPID
sta (ZPMemMgrSPtr),y sta (ZPMemMgrSPtr),y
@ -122,45 +161,112 @@ S.GetMem >PULLB ZPMemMgrReqF store requested flags
lda (ZPMemMgrSPtr),y A = HI PTR lda (ZPMemMgrSPtr),y A = HI PTR
ply Y = LO PTR ply Y = LO PTR
clc X = Current hMem clc X = Current hMem
rts
*-------------- Create a New SLOT
.6 lda ZPMemMgrReqF
and #S.MEM.F.ALIGN is request needs a page align ?
beq .7
lda MEMMGR.MHLIMIT target PTR will be page aligned ? .9 bit MemMgr.ReqFlags
bpl .99
sta CLRREADAUX
sta CLRWRITEAUX
.99 rts
*--------------------------------------
* MemMgr.AddSlot
* In:
* Y,A = Requested size
* Out:
*--------------------------------------
MemMgr.AddSlot >STYA ZPMemMgrTmp1 save req size
ldx MemMgr.LastSlot
inx
beq .99 > 255 ERR:OUT OF SLOT
lda MemMgr.Free Compute base PTR=FREE-REQ size
sec sec
sbc ZPMemMgrReqS sbc ZPMemMgrTmp1
beq .7 yes, allocate sta ZPMemMgrTmp2 store new MemMgr.Free in ZPMemMgrTmp2
lda MemMgr.Free+1
sbc ZPMemMgrTmp1+1
sta ZPMemMgrTmp2+1
lda ZPMemMgrTmp2 ensure new MemMgr.Free is not lower
sec than LoMem
sbc MemMgr.LoMem
lda ZPMemMgrTmp2+1
sbc MemMgr.LoMem+1
bcc .98 ERR out of mem
jsr MemMgr.NextSlot
tay no, reserve a free slot to fill gap ldy #S.MEM.PTR
lda #0 lda ZPMemMgrTmp2 get new MemMgr.Free
jsr S.AddSlot sta MemMgr.Free set as system MemMgr.Free value
bcs .99 sta (ZPMemMgrSPtr),y store is as base address of new slot
iny
.7 >LDYA ZPMemMgrReqS lda ZPMemMgrTmp2+1
jsr S.AddSlot sta MemMgr.Free+1
bcs .99
phx Save hMem
>STYA ZPMemMgrTmp1
lda ZPMemMgrReqF
ora #S.MEM.F.INUSE
sta (ZPMemMgrSPtr) set Flags
lda #1
ldy #S.MEM.REFCNT Mark this slot referenced
sta (ZPMemMgrSPtr),y sta (ZPMemMgrSPtr),y
ldy #S.PS.ID
lda (TSKMGR.TSKPTR),y iny
ldy #S.MEM.OWNERPID lda ZPMemMgrTmp1 get requested size
sta (ZPMemMgrSPtr),y setup slot LEN
iny
lda ZPMemMgrTmp1+1
sta (ZPMemMgrSPtr),y sta (ZPMemMgrSPtr),y
jsr S.UpdateMemStats
>LDYA ZPMemMgrTmp1 Y,A = PTR stx MemMgr.LastSlot mark this slot allocated
plx X = hMem
clc clc
rts rts
.99 sec
.98 lda #MemMgr.ERROOM
sec
rts rts
.99 lda #MemMgr.ERROOH
sec
rts
*--------------------------------------
MemMgr.NextSlot lda ZPMemMgrSPtr
clc
adc #S.MEM.SIZE
sta ZPMemMgrSPtr
bcc .8
inc ZPMemMgrSPtr+1
.8 rts
*--------------------------------------
MemMgr.Init0 ldy #S.MEM.PTR
lda (ZPMemMgrSPtr),y ZPMemMgrSPtr already set
sta ZPMemMgrTmp1 set ZPMemMgrTmp1 to Mem Ptr
iny
lda (ZPMemMgrSPtr),y
sta ZPMemMgrTmp1+1
ldy #S.MEM.LEN
lda (ZPMemMgrSPtr),y
sta ZPMemMgrTmp2 set ZPMemMgrTmp2 to mem size
iny
lda (ZPMemMgrSPtr),y
sta ZPMemMgrTmp2+1
lda #0
.1 ldy ZPMemMgrTmp2
bne .2
ldy ZPMemMgrTmp2+1
beq .3
dec ZPMemMgrTmp2+1
.2 dec ZPMemMgrTmp2
sta (ZPMemMgrTmp1)
inc ZPMemMgrTmp1
bne .1
inc ZPMemMgrTmp1+1
bra .1
.3 rts
*--------------------------------------
MemMgr.SlotCnt .BS 1
MemMgr.ReqFlags .BS 1 store requested Flags
MemMgr.ReqSize .BS 2 store requested Size
*-------------------------------------- *--------------------------------------
* S.FreeMemA * S.FreeMemA
* In: * In:
@ -168,12 +274,11 @@ S.GetMem >PULLB ZPMemMgrReqF store requested flags
* Out: * Out:
* X,Y unmodified * X,Y unmodified
*-------------------------------------- *--------------------------------------
S.FreeMemA and #$FF S.FreeMemA phy
bne S.FreeMemA0 Slot=0, reserved by Kernel
rts
S.FreeMemA0 phy
phx phx
tax
beq .8 Slot=0, reserved by Kernel
jsr S.GetMemByIDA jsr S.GetMemByIDA
lda (ZPMemMgrSPtr) lda (ZPMemMgrSPtr)
bpl * In use ? bpl * In use ?
@ -182,156 +287,51 @@ S.FreeMemA0 phy
lda (ZPMemMgrSPtr),y Get count of those referencing this hMem lda (ZPMemMgrSPtr),y Get count of those referencing this hMem
dec only one left ? dec only one left ?
sta (ZPMemMgrSPtr),y sta (ZPMemMgrSPtr),y
bne .82 no, must be a code segment loaded several times bne .8 no, must be a code segment loaded several times
ldy #S.MEM.BIN ldy #S.MEM.BIN
lda (ZPMemMgrSPtr),y Any BINPATH to discard ? lda (ZPMemMgrSPtr),y Any BINPATH to discard ?
beq .11 beq .1
pha save hMem pha save hMem
>PUSHW ZPMemMgrSPtr >PUSHW ZPMemMgrSPtr
pla pla
jsr S.GetMemByIDA jsr S.GetMemByIDA
lda (ZPMemMgrSPtr) lda (ZPMemMgrSPtr)
bmi .12 In use ? bpl * ***MUST BE ALLOCATED***
bra *
.12 lda (ZPMemMgrSPtr) mark record as free lda #0 mark BINPATH slot as free
and #$7F
sta (ZPMemMgrSPtr) sta (ZPMemMgrSPtr)
>PULLW ZPMemMgrSPtr >PULLW ZPMemMgrSPtr
.11 lda (ZPMemMgrSPtr) mark record as free .1 lda #0 mark this slot as free
and #$7F
sta (ZPMemMgrSPtr) sta (ZPMemMgrSPtr)
.20 lda MEMMGR.TABLESIZE .2 lda MemMgr.LastSlot
beq .82 beq .8
.21 dec
jsr S.GetMemByIDA jsr S.GetMemByIDA
lda (ZPMemMgrSPtr) lda (ZPMemMgrSPtr)
bmi .81 bmi .8
dec MEMMGR.TABLESIZE discard last record
ldy #S.MEM.LEN ldy #S.MEM.LEN
lda (ZPMemMgrSPtr),y give back LEN bytes lda (ZPMemMgrSPtr),y give back LEN bytes
clc clc
adc MEMMGR.MHLIMIT to HLIMIT adc MemMgr.Free to MemMgr.Free
sta MEMMGR.MHLIMIT sta MemMgr.Free
iny iny
lda (ZPMemMgrSPtr),y lda (ZPMemMgrSPtr),y
adc MEMMGR.MHLIMIT+1 adc MemMgr.Free+1
sta MEMMGR.MHLIMIT+1 sta MemMgr.Free+1
lda MEMMGR.MLLIMIT And give back S.MEM.SIZE
sec dec MemMgr.LastSlot discard last slot
sbc #S.MEM.SIZE bne .2 no slot left, exit
sta MEMMGR.MLLIMIT to LLIMIT
bcs .2 .8 plx
dec MEMMGR.MLLIMIT+1
.2 lda MEMMGR.TABLESIZE
bne .21 no slot left, exit
.81 jsr S.UpdateMemStats
.82 plx
ply ply
clc clc
rts rts
*-------------------------------------- *--------------------------------------
* IN/OUT
* A = hMem
*--------------------------------------
S.ClrMemA pha
jsr S.GetMemByIDA
ldy #S.MEM.LEN ZPMemMgrSPtr already set by S.GetMemByIDA
lda (ZPMemMgrSPtr),y
sta ZPMemMgrReqS set ZPMemMgrReqS to mem size
iny
lda (ZPMemMgrSPtr),y
sta ZPMemMgrReqS+1
ldy #S.MEM.PTR
lda (ZPMemMgrSPtr),y
tax
iny
lda (ZPMemMgrSPtr),y
stx ZPMemMgrSPtr
sta ZPMemMgrSPtr+1 set ZPMemMgrSPtr to Mem
lda #0
.1 ldx ZPMemMgrReqS
bne .2
ldx ZPMemMgrReqS+1
beq .3
dec ZPMemMgrReqS+1
.2 dec ZPMemMgrReqS
sta (ZPMemMgrSPtr)
inc ZPMemMgrSPtr
bne .1
inc ZPMemMgrSPtr+1
bra .1
.3 pla
rts
*--------------------------------------
* S.GetMemByIDA
* In:
* A = hMem
* Out:
* Y,A = ZPMemMgrSPtr = PTR to S.MEM
* X unmodified
*--------------------------------------
S.GetMemByIDA stz ZPMemMgrSPtr+1
asl
rol ZPMemMgrSPtr+1
asl
rol ZPMemMgrSPtr+1
asl
rol ZPMemMgrSPtr+1
clc
adc MEMMGR.LOMEM
sta ZPMemMgrSPtr
tay
lda ZPMemMgrSPtr+1
adc MEMMGR.LOMEM+1
sta ZPMemMgrSPtr+1
rts
*--------------------------------------
* In:
* A = hMem to BINPATH (PSTR)
* Out:
* Y,A = ZPMemMgrSPtr = PTR to S.MEM
* X = hMem
*--------------------------------------
S.GetMemByNameA jsr S.GetMemPtrA
>STYA ZPMemMgrTmp1 save BINPATH
>LDYA MEMMGR.LOMEM
>STYA ZPMemMgrTmp2
ldx #0
.1 lda (ZPMemMgrTmp2)
bpl .6 In Use?
ldy #S.MEM.BIN any BIN PATH in this slot?
lda (ZPMemMgrTmp2),y
beq .6
jsr S.GetMemPtrA get pathname
>STYA ZPMemMgrTmp3
ldy #0
.2 lda (ZPMemMgrTmp1),y
cmp (ZPMemMgrTmp3),y
bne .6
tya
iny
cmp (ZPMemMgrTmp1)
bne .2
>LDYA ZPMemMgrTmp2
clc
rts
.6 lda ZPMemMgrTmp2
clc
adc #S.MEM.SIZE
sta ZPMemMgrTmp2
bcc .7
inc ZPMemMgrTmp2+1
.7 inx
cpx MEMMGR.TABLESIZE
bne .1
sec
rts
*--------------------------------------
* S.GetMemPtrA * S.GetMemPtrA
* In: * In:
* A = hMem * A = hMem
@ -348,110 +348,90 @@ S.GetMemPtrA jsr S.GetMemByIDA
ply ply
rts rts
*-------------------------------------- *--------------------------------------
* S.GetMemLenA * S.GetMemByIDA
* In: * In:
* A = hMem * A = hMem
* Out: * Out:
* Y,A = PTR to MemLength * Y,A = ZPMemMgrSPtr = PTR to S.MEM
* X unmodified * X unmodified
*-------------------------------------- *--------------------------------------
S.GetMemLenA jsr S.GetMemByIDA S.GetMemByIDA stz ZPMemMgrSPtr+1
ldy #S.MEM.LEN
lda (ZPMemMgrSPtr),y asl
pha rol ZPMemMgrSPtr+1
iny asl
lda (ZPMemMgrSPtr),y rol ZPMemMgrSPtr+1
ply asl
rol ZPMemMgrSPtr+1
clc
adc #MemMgr.Table
sta ZPMemMgrSPtr
tay
lda ZPMemMgrSPtr+1
adc /MemMgr.Table
sta ZPMemMgrSPtr+1
rts rts
*-------------------------------------- *--------------------------------------
* PRIVATE * In:
* A = hMem to BINPATH (PSTR)
* Out:
* Y,A = ZPMemMgrSPtr = PTR to S.MEM
* X = hMem
*-------------------------------------- *--------------------------------------
* S.AddSlot S.GetMemByNameA jsr S.GetMemPtrA
* In: S.GetMemByNameYA
* Y,A = Requested size >STYA ZPMemMgrTmp1 save BINPATH
* Out: >LDYAI MemMgr.Table+S.MEM.SIZE
* Y,A = PTR to MemSlot >STYA ZPMemMgrSPtr
* X = SLOT.ID ldx #0
*--------------------------------------
S.AddSlot >STYA ZPMemMgrTmp1 save req size .1 cpx MemMgr.LastSlot
lda MEMMGR.TABLESIZE beq .9
inc inx
beq .99 > 255 ERR:OUT OF SLOT lda (ZPMemMgrSPtr)
dec bpl .6 In Use?
jsr S.GetMemByIDA yes, get PTR to slot
ldy #S.MEM.BIN any BIN PATH in this slot?
lda MEMMGR.MHLIMIT Compute base PTR=HLIMIT-REQ size lda (ZPMemMgrSPtr),y
sec beq .6
sbc ZPMemMgrTmp1
sta ZPMemMgrTmp2 store new HLIMIT in ZPMemMgrTmp2 jsr S.GetMemPtrA get pathname
lda MEMMGR.MHLIMIT+1 >STYA ZPMemMgrTmp2
sbc ZPMemMgrTmp1+1
sta ZPMemMgrTmp2+1 ldy #0
lda MEMMGR.MLLIMIT compute new LLIMIT .2 lda (ZPMemMgrTmp1),y
cmp (ZPMemMgrTmp2),y
bne .6
tya
iny
cmp (ZPMemMgrTmp1)
bne .2
>LDYA ZPMemMgrSPtr
clc
rts
.6 lda ZPMemMgrSPtr
clc clc
adc #S.MEM.SIZE adc #S.MEM.SIZE
sta ZPMemMgrTmp3 store new LLIMIT in ZPMemMgrTmp3 sta ZPMemMgrSPtr
lda MEMMGR.MLLIMIT+1 bcc .1
adc #0 inc ZPMemMgrSPtr+1
sta ZPMemMgrTmp3+1 bra .1
lda ZPMemMgrTmp2 ensure new LLIMIT is not higher .9 sec
sec than new HLIMIT rts
sbc ZPMemMgrTmp3 *--------------------------------------
lda ZPMemMgrTmp2+1 S.SetLoMem
sbc ZPMemMgrTmp3+1
bcc .98 ERR out of mem
>LDYA ZPMemMgrTmp3 get new LLIMIT
>STYA MEMMGR.MLLIMIT And set it allocated
lda #0
sta (ZPMemMgrSPtr)
ldy #S.MEM.BIN
sta (ZPMemMgrSPtr),y
ldy #S.MEM.REFCNT
sta (ZPMemMgrSPtr),y
ldy #S.MEM.OWNERPID
sta (ZPMemMgrSPtr),y
ldy #S.MEM.PTR
lda ZPMemMgrTmp2 get new HLIMIT
sta MEMMGR.MHLIMIT set as system HLIMIT value
sta (ZPMemMgrSPtr),y store is as base address of new slot
iny
lda ZPMemMgrTmp2+1
sta MEMMGR.MHLIMIT+1
sta (ZPMemMgrSPtr),y
ldy #S.MEM.LEN
lda ZPMemMgrTmp1 get requested size
sta (ZPMemMgrSPtr),y setup slot LEN
iny
lda ZPMemMgrTmp1+1
sta (ZPMemMgrSPtr),y
>LDYA ZPMemMgrTmp2 Y,A = PTR
ldx MEMMGR.TABLESIZE X = SLOT.ID
inc MEMMGR.TABLESIZE mark this slot allocated
clc clc
rts rts
.98 lda #MEMMGR.ERROOM
sec
rts
.99 lda #MEMMGR.ERROOS
sec
rts
*-------------------------------------- *--------------------------------------
S.UpdateMemStats S.GarbageCollector
lda MEMMGR.MHLIMIT clc
sec rts
sbc MEMMGR.MLLIMIT
sta MEMMGR.MFREE
lda MEMMGR.MHLIMIT+1
sbc MEMMGR.MLLIMIT+1
sta MEMMGR.MFREE+1
rts
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE SYS/KERNEL.S.MEM SAVE SYS/KERNEL.S.MEM

View File

@ -1,5 +1,5 @@
PR#3 PR#3
PREFIX /A2OSX.BUILD PREFIX /A2OSX.SRC
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6
@ -8,9 +8,33 @@ AUTO 6
*-------------------------------------- *--------------------------------------
* PUBLIC * PUBLIC
*-------------------------------------- *--------------------------------------
S.MLICreate S.MLICreateFile
S.MLIDestroy clc
S.MLIRename rts
*--------------------------------------
S.MLICreateDirA jsr S.GetMemPtrA
S.MLICreateDirYA
>STYA MLICALL.PARAMS+1
lda #$C3
sta MLICALL.PARAMS+3 Access
lda #$0F
sta MLICALL.PARAMS+4 type=Directory
lda #$0D
sta MLICALL.PARAMS+7 Storage=Linked List
>MLICALL MLICREATE
rts
*--------------------------------------
S.MLIDestroyA jsr S.GetMemPtrA
S.MLIDestroyYA >STYA MLICALL.PARAMS+1
>MLICALL MLIDESTROY
rts
*--------------------------------------
S.MLIRename >PULLW MLICALL.PARAMS+3
>PULLW MLICALL.PARAMS+1
>MLICALL MLIRENAME
rts
*--------------------------------------
S.MLISetFileInfo S.MLISetFileInfo
*-------------------------------------- *--------------------------------------
* S.MLIGetFileInfoA * S.MLIGetFileInfoA
@ -21,9 +45,9 @@ S.MLISetFileInfo
*-------------------------------------- *--------------------------------------
S.MLIGetFileInfoA S.MLIGetFileInfoA
jsr S.GetMemPtrA jsr S.GetMemPtrA
S.MLIGetFileInfo S.MLIGetFileInfoYA
>STYA MLICALL.PARAMS+1 >STYA MLICALL.PARAMS+1
>KMLICALL MLIGETFILEINFO >MLICALL MLIGETFILEINFO
bcs .9 bcs .9
>LDYAI MLICALL.PARAMS+3 >LDYAI MLICALL.PARAMS+3
.9 rts .9 rts
@ -35,14 +59,19 @@ S.MLIGetFileInfo
*-------------------------------------- *--------------------------------------
S.MLIOnline >PULLB MLICALL.PARAMS+1 S.MLIOnline >PULLB MLICALL.PARAMS+1
>PULLW MLICALL.PARAMS+2 >PULLW MLICALL.PARAMS+2
>KMLICALL MLIONLINE >MLICALL MLIONLINE
rts rts
*-------------------------------------- *--------------------------------------
S.MLISetPrefix S.MLISetPrefixA jsr S.GetMemPtrA
S.MLISetPrefixYA
>STYA MLICALL.PARAMS+1
>MLICALL MLISETPREFIX
rts
*-------------------------------------- *--------------------------------------
S.MLIGetPrefixA jsr S.GetMemPtrA S.MLIGetPrefixA jsr S.GetMemPtrA
S.MLIGetPrefix >STYA MLICALL.PARAMS+1 S.MLIGetPrefixYA
>KMLICALL MLIGETPREFIX >STYA MLICALL.PARAMS+1
>MLICALL MLIGETPREFIX
rts rts
*-------------------------------------- *--------------------------------------
* S.MLIOpenA * S.MLIOpenA
@ -53,18 +82,20 @@ S.MLIGetPrefix >STYA MLICALL.PARAMS+1
* X = buf hMem * X = buf hMem
*-------------------------------------- *--------------------------------------
S.MLIOpenA jsr S.GetMemPtrA S.MLIOpenA jsr S.GetMemPtrA
S.MLIOpen >STYA MLICALL.PARAMS+1 S.MLIOpenYA >STYA MLICALL.PARAMS+1
>PUSHWI 1024 get a ProDOS IO buffer >PUSHWI 1024 get a ProDOS IO buffer
>PUSHBI S.MEM.F.ALIGN+S.MEM.F.NOMOV >PUSHBI S.MEM.F.ALIGN+S.MEM.F.NOMOVE
jsr S.GetMem jsr S.GetMem
bcs .99 bcs .99
phx save Prodos Buffer hMem phx save Prodos Buffer hMem
>STYA MLICALL.PARAMS+3 >STYA MLICALL.PARAMS+3
>KMLICALL MLIOPEN >MLICALL MLIOPEN
bcs .98 bcs .98
lda MLICALL.PARAMS+5 get ref_num lda MLICALL.PARAMS+5 get ref_num
plx get back Prodos Buffer hMem plx get back Prodos Buffer hMem
rts CC rts CC
.98 plx get back Prodos Buffer hMem .98 plx get back Prodos Buffer hMem
pha save MLI error pha save MLI error
txa txa
@ -82,7 +113,7 @@ S.MLIOpen >STYA MLICALL.PARAMS+1
S.MLINewLine >PULLB MLICALL.PARAMS+1 S.MLINewLine >PULLB MLICALL.PARAMS+1
>PULLB MLICALL.PARAMS+2 >PULLB MLICALL.PARAMS+2
>PULLB MLICALL.PARAMS+3 >PULLB MLICALL.PARAMS+3
>KMLICALL MLINEWLINE >MLICALL MLINEWLINE
rts rts
*-------------------------------------- *--------------------------------------
* S.MLIRead * S.MLIRead
@ -96,7 +127,7 @@ S.MLINewLine >PULLB MLICALL.PARAMS+1
S.MLIRead >PULLB MLICALL.PARAMS+1 S.MLIRead >PULLB MLICALL.PARAMS+1
>PULLW MLICALL.PARAMS+2 >PULLW MLICALL.PARAMS+2
>PULLW MLICALL.PARAMS+4 >PULLW MLICALL.PARAMS+4
>KMLICALL MLIREAD >MLICALL MLIREAD
bcs .9 bcs .9
>LDYA MLICALL.PARAMS+6 >LDYA MLICALL.PARAMS+6
.9 rts .9 rts
@ -112,23 +143,40 @@ S.MLIRead >PULLB MLICALL.PARAMS+1
S.MLIWrite >PULLB MLICALL.PARAMS+1 S.MLIWrite >PULLB MLICALL.PARAMS+1
>PULLW MLICALL.PARAMS+2 >PULLW MLICALL.PARAMS+2
>PULLW MLICALL.PARAMS+4 >PULLW MLICALL.PARAMS+4
>KMLICALL MLIWRITE >MLICALL MLIWRITE
bcs .9 bcs .9
>LDYA MLICALL.PARAMS+6 >LDYA MLICALL.PARAMS+6
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
* S.MLIClose * S.MLICloseA
* in : * in :
* A = ref_num * A = ref_num
* out : * out :
*-------------------------------------- *--------------------------------------
S.MLICloseA sta MLICALL.PARAMS+1 S.MLICloseA sta MLICALL.PARAMS+1
>KMLICALL MLICLOSE >MLICALL MLICLOSE
rts
*--------------------------------------
S.MLIFlushA sta MLICALL.PARAMS+1
>MLICALL MLIFLUSH
rts rts
*-------------------------------------- *--------------------------------------
S.MLIFlushA
S.MLISetMark S.MLISetMark
S.MLIGetMark *--------------------------------------
* S.MLIGetMarkA
* in :
* A = ref_num
* out :
* Y,A,X = EOF
*--------------------------------------
S.MLIGetMarkA sta MLICALL.PARAMS+1
>MLICALL MLIGETMARK
bcs .9
>LDYA MLICALL.PARAMS+2
ldx MLICALL.PARAMS+4
clc
.9 rts
*--------------------------------------
S.MLISetEOF S.MLISetEOF
*-------------------------------------- *--------------------------------------
* S.MLIGetEOF * S.MLIGetEOF
@ -138,13 +186,38 @@ S.MLISetEOF
* Y,A,X = EOF * Y,A,X = EOF
*-------------------------------------- *--------------------------------------
S.MLIGetEOFA sta MLICALL.PARAMS+1 S.MLIGetEOFA sta MLICALL.PARAMS+1
>KMLICALL MLIGETEOF >MLICALL MLIGETEOF
bcs .9 bcs .9
>LDYA MLICALL.PARAMS+2 >LDYA MLICALL.PARAMS+2
ldx MLICALL.PARAMS+4 ldx MLICALL.PARAMS+4
clc clc
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
S.MLISetBuf clc
rts
*--------------------------------------
S.MLIGetBuf clc
rts
*--------------------------------------
S.MLIGetTime >MLICALL MLIGETTIME
rts
*--------------------------------------
S.MLIAllocIRQ >PULLB MLICALL.PARAMS+1
>PULLW MLICALL.PARAMS+2
>MLICALL MLIALLOCIRQ
rts
*--------------------------------------
S.MLIDeallocIRQA
sta MLICALL.PARAMS+1
>MLICALL MLIDEALLOCIRQ
rts
*--------------------------------------
S.MLIReadBlock clc
rts
*--------------------------------------
S.MLIWriteBlock clc
rts
*--------------------------------------
MAN MAN
SAVE SYS/KERNEL.S.MLI SAVE SYS/KERNEL.S.MLI
LOAD SYS/KERNEL.S LOAD SYS/KERNEL.S

View File

@ -1,5 +1,5 @@
PR#3 PR#3
PREFIX /A2OSX.BUILD PREFIX /A2OSX.SRC
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6

View File

@ -1,5 +1,5 @@
PR#3 PR#3
PREFIX /A2OSX.BUILD PREFIX /A2OSX.SRC
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6

View File

@ -1,5 +1,5 @@
PR#3 PR#3
PREFIX /A2OSX.BUILD PREFIX /A2OSX.SRC
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6
@ -68,8 +68,8 @@ S.ScreenSelectA and A2osX.SCREENS Screen is available ?
bne .2 bne .2
sta SETTEXT sta SETTEXT
sta SET80DISP sta SET80DISP
sta CLR80STORE
sta CLRPAGE2 sta CLRPAGE2
sta SET80STORE
sta SETALTCHAR sta SETALTCHAR
lda #A2osX.SCREENS.C lda #A2osX.SCREENS.C
bra .8 bra .8
@ -80,19 +80,22 @@ S.ScreenSelectA and A2osX.SCREENS Screen is available ?
sta CLRTEXT sta CLRTEXT
sta CLRMIXED sta CLRMIXED
sta SETHIRES sta SETHIRES
sta CLR80STORE
sta CLRPAGE2 sta CLRPAGE2
sta SET80DISP
sta SETIOUDIS sta SETIOUDIS
sta SETDHIRES sta SETDHIRES
sta CLRDHIRES
sta SETDHIRES * sta CLR80DISP
sta CLRDHIRES * sta SETDHIRES
sta SETDHIRES * sta CLRDHIRES
* sta SET80DISP
* sta SETDHIRES
* sta CLRDHIRES
* sta SETDHIRES
lda #A2osX.SCREENS.G lda #A2osX.SCREENS.G
.8 sta A2osX.ACTIVESCRN .8 sta A2osX.ASCREEN
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
S.SysScrCPULoad ldx SYSSCR.CPULOADI S.SysScrCPULoad ldx SYSSCR.CPULOADI
@ -134,8 +137,38 @@ S.SysScrPRCode php save P to keep carry
plp plp
rts rts
*-------------------------------------- *--------------------------------------
S.DumpEvent lda (pEvent)
jsr S.SysScrPRBYTEA
ldy #S.EVT.hDEV
lda (pEvent),y
jsr S.SysScrPRBYTEA
ldy #S.EVT.DATALO
lda (pEvent),y
jsr S.SysScrPRBYTEA
ldy #S.EVT.DATAHI
lda (pEvent),y
jsr S.SysScrPRBYTEA
lda #'.'
jsr S.SysScrCOUTA
ldy #S.EVT.DATAW1
lda (pEvent),y
jsr S.SysScrPRBYTEA
iny
lda (pEvent),y
jsr S.SysScrPRBYTEA
lda #'.'
jsr S.SysScrCOUTA
ldy #S.EVT.DATAW2
lda (pEvent),y
jsr S.SysScrPRBYTEA
iny
lda (pEvent),y
jmp S.SysScrPRBYTEA
*--------------------------------------
S.SysScrPPSTRA jsr S.GetMemPtrA S.SysScrPPSTRA jsr S.GetMemPtrA
S.SysScrPPSTR >STYA SYSSCR.STRPTR S.SysScrPPSTRYA >STYA SYSSCR.STRPTR
lda (SYSSCR.STRPTR) lda (SYSSCR.STRPTR)
beq .9 beq .9
ldy #0 ldy #0
@ -319,7 +352,7 @@ S.SysScrSetCharAtYX
SYSSCR.CH .BS 1 SYSSCR.CH .BS 1
SYSSCR.CV .BS 1 SYSSCR.CV .BS 1
SYSSCR.CPULOADI .BS 1 SYSSCR.CPULOADI .BS 1
SYSSCR.CPULOADC .AS -"|\-/" SYSSCR.CPULOADC .AS -"|/-\"
*-------------------------------------- *--------------------------------------
SYSSCR.TITLE >CSTRING "A2osX System Screen" SYSSCR.TITLE >CSTRING "A2osX System Screen"
SYSSCR.BASEL .HS 00.80.00.80.00.80.00.80.28.A8.28.A8.28.A8.28.A8.50.D0.50.D0.50.D0.50.D0 SYSSCR.BASEL .HS 00.80.00.80.00.80.00.80.28.A8.28.A8.28.A8.28.A8.50.D0.50.D0.50.D0.50.D0

View File

@ -1,29 +1,26 @@
PR#3 PR#3
PREFIX /A2OSX.BUILD PREFIX /A2OSX.SRC
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6
.LIST OFF .LIST OFF
.OP 65C02 .OP 65C02
*-------------------------------------- *--------------------------------------
* S.NewPStr
* IN:
* PULLW = PTR to buffer
* OUT:
* A = hMem to S (PSTRING)
*--------------------------------------
S.NewPStr >PULLW ZPQuickPtr1
bra S.PStrCpy2
*--------------------------------------
* S.PStrCpyA * S.PStrCpyA
* In: * In:
* A = hMem of Src String * A = hMem of Src String
* Out: * Out:
* A = hMem of Dest String * A = hMem of Dest String
*-------------------------------------- *--------------------------------------
* S.NewPStrYA
* IN:
* PULLW = PTR to buffer
* OUT:
* A = hMem to S (PSTRING)
*--------------------------------------
S.PStrCpyA jsr S.GetMemPtrA S.PStrCpyA jsr S.GetMemPtrA
>STYA ZPQuickPtr1 S.NewPStrYA >STYA ZPQuickPtr1
S.PStrCpy2 lda (ZPQuickPtr1) lda (ZPQuickPtr1)
inc inc
tay tay
lda #0 Y,A = len of new string lda #0 Y,A = len of new string

View File

@ -1,5 +1,5 @@
PR#3 PR#3
PREFIX /A2OSX.BUILD PREFIX /A2OSX.SRC
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6
@ -9,177 +9,189 @@ AUTO 6
* S.TskMgrInit * S.TskMgrInit
*-------------------------------------- *--------------------------------------
S.TskMgrInit stz TSKMGR.LASTID S.TskMgrInit stz TSKMGR.LASTID
lda #1
sta TSKMGR.SIZE One Slot Busy (Kernel PS=0)
>LDYAI TSKMGR.TABLE >LDYAI TskMgr.Table Make PS #0 as current process
>STYA TSKMGR.TSKPTR >STYA pPs
ldx #K.PS.MAX ldx #K.PS.MAX
.1 lda #0 .1 lda #0
ldy #S.PS.SIZE-1 ldy #S.PS.SIZE-1
.2 sta (TSKMGR.TSKPTR),y .2 sta (pPs),y
dey dey
bpl .2 bpl .2
lda TSKMGR.TSKPTR lda pPs
clc clc
adc #S.PS.SIZE adc #S.PS.SIZE
sta TSKMGR.TSKPTR sta pPs
bcc .3 bcc .3
inc TSKMGR.TSKPTR+1
.3 dex inc pPs+1
.3 dex
bne .1 bne .1
>LDYAI TSKMGR.TABLE Make PS #0 as current process >LDYAI TskMgr.Table Make PS #0 as current process
>STYA TSKMGR.TSKPTR >STYA pPs
jsr S.CreateEnv jsr S.CreateEnv
bcs .9 bcs *
ldy #S.PS.hENV ldy #S.PS.hENV
sta TSKMGR.TABLE,y sta TskMgr.Table,y
>LDYAI TmpBuffer256 >LDYAI TmpBuffer256
jsr S.MLIGetPrefix jsr S.MLIGetPrefixYA
bcs .9 bcs *
>PUSHWI TmpBuffer256
jsr S.NewPStr >LDYAI TmpBuffer256
bcs .9 jsr S.NewPStrYA
bcs *
ldy #S.PS.hPREFIX ldy #S.PS.hPREFIX
sta TSKMGR.TABLE,y sta TskMgr.Table,y
>PUSHWI TmpBuffer256 push ENV value >PUSHWI TmpBuffer256 push ENV value
>PUSHWI ENV.A2osX push ENV name >PUSHWI ENV.A2osX push ENV name
ldy #S.PS.hENV ldy #S.PS.hENV
lda TSKMGR.TABLE,y lda TskMgr.Table,y
>PUSHA >PUSHA
jsr S.SetEnvVarP jsr S.SetEnvVarP
rts rts
.9 sec .9 sec
rts rts
*-------------------------------------- *--------------------------------------
* S.TskMgrRun * S.TskMgrRun
*-------------------------------------- *--------------------------------------
S.TskMgrRun >LDYAI TSKMGR.TABLE+S.PS.SIZE S.TskMgrRun >LDYAI TskMgr.Table+S.PS.SIZE
>STYA TSKMGR.TSKPTR >STYA pPs
lda #K.PS.MAX-1 Skip PS #0 lda #1 Skip PS #0
sta TSKMGR.COUNT sta TSKMGR.COUNT
.1 lda (TSKMGR.TSKPTR) get S.PS.F .1 lda (pPs) get S.PS.F
and #S.PS.F.INUSE In use ? and #S.PS.F.INUSE In use ?
beq .5 beq .5
lda (TSKMGR.TSKPTR) get S.PS.F lda (pPs) get S.PS.F
and #S.PS.F.HOLD Waiting for Another Task to Terminate? and #S.PS.F.HOLD Waiting for Another Task to Terminate?
beq .3 beq .2
ldy #S.PS.CID ldy #S.PS.CID
lda (TSKMGR.TSKPTR),y lda (pPs),y
jsr S.IsPSRunningA jsr S.GetPSByIDA
bcc .5 yes, running.... bcc .5 yes, running....
lda (TSKMGR.TSKPTR) get S.PS.F
and #$FF^S.PS.F.HOLD unmark as HOLD
sta (TSKMGR.TSKPTR)
.3 ldy #S.PS.hCS lda (pPs) get S.PS.F
lda (TSKMGR.TSKPTR),y and #$FF^S.PS.F.HOLD unmark as HOLD
jsr S.GetMemPtrA Y,A = CS sta (pPs)
pha
tya get CS LO .2 jsr S.SelectProcess
ldy #S.PS.PC
ldy #S.PS.PC+1 Is this PS sleeping?
lda (pPs),y
tax
dey
ora (pPs),y
beq .3 no, call TSKMGR.RUN
lda (pPs),y
clc clc
adc (TSKMGR.TSKPTR),y adc pCode
sta Kernel.JMP sta S.TskMgrRunJmp+1
iny txa
pla adc pCode+1
adc (TSKMGR.TSKPTR),y sta S.TskMgrRunJmp+2
sta Kernel.JMP+1
lda #0 Don't forget to reset S.PC lda #0 Don't forget to reset S.PC
sta (TSKMGR.TSKPTR),y ldy #S.PS.PC
dey sta (pPs),y
sta (TSKMGR.TSKPTR),y iny
sta (pPs),y
>LDYA TSKMGR.TSKPTR jsr S.TskMgrRunJmp
ldx #TSKMGR.RUN bra .4
jsr Kernel.BINCALL Call RUN function
bcc .5 RUN said CS=QUIT? .3 ldx #TSKMGR.RUN
jsr pCodeJmp Call RUN function
.4 bcc .5 RUN said CS=QUIT?
ldy #S.PS.hCS
lda (TSKMGR.TSKPTR),y
jsr S.GetMemPtrA Y,A = CS
>STYA Kernel.JMP
>LDYA TSKMGR.TSKPTR
ldx #TSKMGR.QUIT yes, quit this process ldx #TSKMGR.QUIT yes, quit this process
jsr pCodeJmp Call QUIT function
jsr Kernel.BINCALL Call QUIT function
ldy #S.PS.ID ldy #S.PS.ID
lda (TSKMGR.TSKPTR),y lda (pPs),y
jsr S.FreeProcessA jsr S.FreeProcessA
bcs .99 bcs .99
.5 lda TSKMGR.TSKPTR .5 lda pPs
clc clc
adc #S.PS.SIZE adc #S.PS.SIZE
sta TSKMGR.TSKPTR sta pPs
bcc .6 bcc .6
inc TSKMGR.TSKPTR+1 inc pPs+1
.6 dec TSKMGR.COUNT .6 lda TSKMGR.COUNT
inc TSKMGR.COUNT
cmp TSKMGR.SIZE
bne .1 bne .1
clc clc
rts rts
.99 bra * .99 bra *
*-------------------------------------- *--------------------------------------
S.TskMgrRunJmp jmp $FFFF
*--------------------------------------
* S.DispatchEvent * S.DispatchEvent
* IN: * IN:
* PULLW = Event
* OUT: * OUT:
* CS: Not Dispatched * CS: Not Dispatched
* CC: Event Cleared * CC: Event Cleared
*-------------------------------------- *--------------------------------------
S.DispatchEvent >LDYAI TSKMGR.TABLE+S.PS.SIZE S.DispatchEvent >LDYAI TskMgr.Table+S.PS.SIZE
>STYA TSKMGR.TSKPTR >STYA pPs
lda #K.PS.MAX-1 lda #1
sta TSKMGR.COUNT sta TSKMGR.COUNT
.1 lda (TSKMGR.TSKPTR) get S.PS.F .1 lda (pPs) get S.PS.F
and #S.PS.F.INUSE In use ? and #S.PS.F.INUSE In use ?
beq .3 beq .3
lda (TSKMGR.TSKPTR) get S.PS.F lda (pPs) get S.PS.F
and #S.PS.F.HOLD Waiting for Another Task to Terminate? and #S.PS.F.HOLD Waiting for Another Task to Terminate?
bne .3 bne .3
lda (TSKMGR.TSKPTR) get S.PS.F lda (pPs) get S.PS.F
and #S.PS.F.EVENT Accept Events ? and #S.PS.F.EVENT Accept Events ?
beq .3 beq .3
jsr S.SelectProcess
ldy #S.PS.hCS
lda (TSKMGR.TSKPTR),y
jsr S.GetMemPtrA
>STYA Kernel.JMP
>PUSHW EVTMGR.EVTPTR
>LDYA TSKMGR.TSKPTR
ldx #TSKMGR.DOEVENT ldx #TSKMGR.DOEVENT
jsr Kernel.BINCALL Call DOEVENT function jsr pCodeJmp Call DOEVENT function
bcc .8 bcc .8
.3 lda TSKMGR.TSKPTR .3 lda pPs
clc clc
adc #S.PS.SIZE adc #S.PS.SIZE
sta TSKMGR.TSKPTR sta pPs
bcc .4 bcc .4
inc TSKMGR.TSKPTR+1 inc pPs+1
.4 dec TSKMGR.COUNT .4 lda TSKMGR.COUNT
inc TSKMGR.COUNT
cmp TSKMGR.SIZE
bne .1 bne .1
sec sec
.8 rts rts
.8 jsr S.DestroyEvent
clc
rts
*-------------------------------------- *--------------------------------------
* S.TskMgrQuit * S.TskMgrQuit
*-------------------------------------- *--------------------------------------
@ -190,18 +202,20 @@ S.TskMgrQuit clc
*-------------------------------------- *--------------------------------------
* S.ExecProcessA (Blocking Parent PID) * S.ExecProcessA (Blocking Parent PID)
* in : * in :
* A = hMem To Full Cmd Line * A = hMem To Cmd Line
* out : * out :
* A = Child PSID * A = Child PSID
*-------------------------------------- *--------------------------------------
S.ExecProcessA jsr S.CreateProcessA S.ExecProcessA jsr S.CreateProcessA
bcs .9 terminated, do not set PID as HOLD bcs .9 terminated, do not set PID as HOLD
ldy #S.PS.CID ldy #S.PS.CID
sta (TSKMGR.TSKPTR),y sta (pPs),y
pha Save Child PID pha Save Child PID
lda (TSKMGR.TSKPTR) lda (pPs)
ora #S.PS.F.HOLD ora #S.PS.F.HOLD
sta (TSKMGR.TSKPTR) sta (pPs)
pla Get Back PID pla Get Back PID
clc clc
.9 rts .9 rts
@ -213,174 +227,188 @@ S.ExecProcessA jsr S.CreateProcessA
* A = Child PSID * A = Child PSID
*-------------------------------------- *--------------------------------------
S.CreateProcessA S.CreateProcessA
pha save CMD line sta S.CreateProcessA.Cmd
>LDYAI MSG.NEWPS >LDYAI MSG.NEWPS
jsr S.SysScrPPSTR jsr S.SysScrPPSTRYA
ldy #S.PS.ID
lda (TSKMGR.TSKPTR),y
jsr S.CreateChildProcessA
jsr S.CreateChildProcess
bcs .99 bcs .99
>STYA TSKMGR.pNewPS
sta S.CreateProcessA.CPSID
jsr S.SelectProcessA
pla Get Back CMD Line lda S.CreateProcessA.Cmd
jsr S.InitProcessA jsr S.InitProcessA
bcs .97 Init Failed or exit? bcs .98 Init Failed or exit?
ldy #S.PS.ID
lda (TSKMGR.pNewPS),y ldy #S.PS.PID switch back to Parent Process
lda (pPs),y
jsr S.SelectProcessA
lda S.CreateProcessA.CPSID
clc clc
rts rts
.97 pha save error code .98 pha save error code
tay error code =0 ?
bne .98 no, init failed ldy #S.PS.PID switch back to Parent Process
>LDYA TSKMGR.pNewPS lda (pPs),y
ldx #TSKMGR.QUIT yes, simply call QUIT function jsr S.SelectProcessA
jsr Kernel.BINCALL Call QUIT function
lda S.CreateProcessA.CPSID
.98 ldy #S.PS.ID
lda (TSKMGR.pNewPS),y
jsr S.FreeProcessA jsr S.FreeProcessA
bra .90
.99 plx Discard CMD Line pla get back error code
pha save error code
.90 pla get back error code .99 sec
sec
rts rts
*-------------------------------------- *--------------------------------------
S.CreateProcessA.Cmd .BS 1
S.CreateProcessA.CPSID .BS 1
*--------------------------------------
* S.GetPSByIDA * S.GetPSByIDA
* In : * In :
* A = PID * A = PID
* Out : * Out :
* Y,A = PTR to TSKSLOT * Y,A = PTR to TSKSLOT
*-------------------------------------- *--------------------------------------
S.GetPSByIDA tax S.GetPSByIDA sta S.GetPSByIDA.PS
bne .10
>LDYAI TSKMGR.TABLE
clc
rts
.10 sta ZPQuickPtr1 Store requested PID >LDYAI TskMgr.Table
lda #K.PS.MAX >STYA ZPQuickPtr1
sta ZPQuickPtr1+1
>LDYAI TSKMGR.TABLE+S.PS.SIZE lda S.GetPSByIDA.PS
>STYA ZPQuickPtr2
.1 lda (ZPQuickPtr2)
bpl .2
ldy #S.PS.ID
lda (ZPQuickPtr2),y
cmp ZPQuickPtr1
beq .8 beq .8
.2 dec ZPQuickPtr1+1
beq .9 ldx #0
lda ZPQuickPtr2
.1 inx
lda ZPQuickPtr1
clc clc
adc #S.PS.SIZE adc #S.PS.SIZE
sta ZPQuickPtr2 sta ZPQuickPtr1
bcc .1
inc ZPQuickPtr2+1
bra .1
.8 >LDYA ZPQuickPtr2
clc
rts
.9 sec
rts
*--------------------------------------
* PRIVATE
*--------------------------------------
* S.CreateChildProcessA
* in :
* A = Parent PSID
* out :
* X = PSID
* Y,A = PTR to S.PS
* we cannot use ZPQuickPtrs
* because of calling S.PStrCpyA & S.DupEnvA
*--------------------------------------
S.CreateChildProcessA
jsr S.GetPSByIDA
bcs .9
>STYA R.AX
>LDYAI TSKMGR.TABLE+S.PS.SIZE
>STYA R.BX
ldx #K.PS.MAX
.1 lda (R.BX)
bpl .3
lda R.BL
clc
adc #S.PS.SIZE
sta R.BL
bcc .2 bcc .2
inc R.BH inc ZPQuickPtr1+1
.2 dex
.2 lda (ZPQuickPtr1)
bpl .3
ldy #S.PS.ID
lda (ZPQuickPtr1),y
cmp S.GetPSByIDA.PS
beq .8
.3 cpx TSKMGR.SIZE
bne .1 bne .1
lda #TSKMGR.ERROOS
sec
rts
.9 lda #TSKMGR.ERRNSP .9 lda #TSKMGR.ERRNSP
sec
rts
.8 >LDYA ZPQuickPtr1
clc
rts
*--------------------------------------
S.GetPSByIDA.PS .BS 1
*--------------------------------------
* PRIVATE
*--------------------------------------
* S.CreateChildProcess
* in :
* out :
* A = PSID
* we cannot use ZPQuickPtrs
* because of calling S.PStrCpyA & S.DupEnvA
*--------------------------------------
S.CreateChildProcess
>LDYAI TskMgr.Table+S.PS.SIZE
>STYA R.AX
ldx #0
.1 inx
cpx TSKMGR.SIZE
beq .2
lda (R.AX) Found an empty slot
bpl .3
lda R.AL
clc
adc #S.PS.SIZE
sta R.AL
bcc .1
inc R.AH
bra .1
.2 cpx #K.PS.MAX
bne .30
lda #TSKMGR.ERROOH
sec sec
rts rts
.30 inc TSKMGR.SIZE
.3 lda #S.PS.F.INUSE .3 lda #S.PS.F.INUSE
sta (R.BX) sta (R.AX)
ldy #S.PS.ID
lda (R.AX),y
ldy #S.PS.PID
sta (R.BX),y
inc TSKMGR.LASTID .4 inc TSKMGR.LASTID Get a PSID not alredy running
bne .4 beq .4 not = 0
inc TSKMGR.LASTID Ensure PSID not 0 lda TSKMGR.LASTID
.4 lda TSKMGR.LASTID jsr S.GetPSByIDA
bcc .4
ldy #S.PS.ID ldy #S.PS.ID
sta (R.BX),y lda TSKMGR.LASTID
sta (R.AX),y
lda #0 lda #0
ldy #S.PS.hCS ldy #S.PS.hCS
.5 sta (R.BX),y Blank Everything in this S.PS .5 sta (R.AX),y Blank Everything in this S.PS
iny iny
cpy #S.PS.SIZE cpy #S.PS.SIZE
bne .5 bne .5
ldy #S.PS.hPREFIX copy hPREFIX... ldy #S.PS.hPREFIX copy hPREFIX...
lda (R.AX),y lda (pPs),y
jsr S.PStrCpyA jsr S.PStrCpyA
bcs .99 bcs .99
ldy #S.PS.hPREFIX ldy #S.PS.hPREFIX
sta (R.BX),y sta (R.AX),y
ldy #S.PS.hENV ...and hENV from parent PS ldy #S.PS.hENV ...and hENV from parent PS
lda (R.AX),y lda (pPs),y
jsr S.DupEnvA jsr S.DupEnvA
bcs .99 bcs .99
ldy #S.PS.hENV ldy #S.PS.hENV
sta (R.BX),y sta (R.AX),y
ldy #S.PS.hINDEV ldy #S.PS.hINDEV
lda (R.AX),y lda (pPs),y
sta (R.BX),y sta (R.AX),y
ldy #S.PS.hOUTDEV ldy #S.PS.hOUTDEV
lda (R.AX),y lda (pPs),y
sta (R.BX),y sta (R.AX),y
ldy #S.PS.hERRDEV ldy #S.PS.hERRDEV
lda (R.AX),y lda (pPs),y
sta (R.BX),y sta (R.AX),y
ldy #S.PS.ID ldy #S.PS.ID
lda (R.BX),y lda (pPs),y
tax Exit with X=PSID
>LDYA R.BX And Y,A=S.PS ldy #S.PS.PID
clc sta (R.AX),y
ldy #S.PS.ID
lda (R.AX),y
clc Exit with A=PSID
rts rts
.99 sec .99 sec
rts rts
*-------------------------------------- *--------------------------------------
@ -388,77 +416,116 @@ S.CreateChildProcessA
* In : * In :
* A = hMem To Full Cmd Line * A = hMem To Full Cmd Line
*-------------------------------------- *--------------------------------------
* LS(2) S.InitProcessA >PUSHA Push Cmd Line
* 0 : hMem to ENVPATH value
* 1 : hMem to FULLPATH value
*--------------------------------------
S.InitProcessA >ADDLOCAL 2
>PUSHA Push Cmd Line
>PUSHBI $20 Push SEP=' ' >PUSHBI $20 Push SEP=' '
>PUSHBI 0 Push 0 for getting CMD And ARGS >PUSHBI 0 Push 0 for getting CMD And ARGS
jsr S.PStrGetTkn jsr S.PStrGetTkn
bcs .99 OOM error bcc .10
ldy #S.PS.hCMD rts OOM error
sta (TSKMGR.pNewPS),y
.10 ldy #S.PS.hCMD
sta (pPs),y
>PUSHA push CMD for S.FileSearch >PUSHA push CMD for S.FileSearch
txa txa
ldy #S.PS.hARGS ldy #S.PS.hARGS
sta (TSKMGR.pNewPS),y set ARGS hMem (0 if none) sta (pPs),y set ARGS hMem (0 if none)
>PUSHWI ENV.PATH push ENVNAME=PATH >PUSHWI ENV.PATH push ENVNAME=PATH
ldy #S.PS.hENV ldy #S.PS.hENV
lda (TSKMGR.pNewPS),y lda (pPs),y
>PUSHA >PUSHA
jsr S.GetEnvVarP get value for ENV=PATH jsr S.GetEnvVarP get value for ENV=PATH
bcs .99 bcs .99
>STAL 0 save VALUE hMem for discard
sta S.InitProcessA.PATH save VALUE hMem for discard
>PUSHA A=PStr to ENV Value >PUSHA A=PStr to ENV Value
jsr S.FileSearch find File in %PATH% jsr S.FileSearch find File in %PATH%
bcs .98 bcs .98
>STAL 1 save FULLPATH hMem for discard
sta S.InitProcessA.FULLPATH save FULLPATH hMem for discard
pha pha
jsr S.SysScrPPSTRA jsr S.SysScrPPSTRA
pla pla
jsr S.LoadBinA A = BinPath hMem jsr S.LoadBinA A = BinPath hMem
bcs .97 bcs .97
>STYA Kernel.JMP save PTR to Code Segment
>STYA pCode save PTR to Code Segment
txa txa
ldy #S.PS.hCS ldy #S.PS.hCS
sta (TSKMGR.pNewPS),y save CS hMem in TSKSLOT sta (pPs),y save CS hMem in TSKSLOT
>LDYA TSKMGR.pNewPS
ldx #TSKMGR.INIT ldy #H.BIN.BIN.DS.SIZE+1
jsr Kernel.BINCALL Call INIT function lda (pCode),y Load DS.SIZE HI
tax
dey
ora (pCode),y
beq .1 DS.SIZE=0...
lda (pCode),y
>PUSHAX Push DS.SIZE
>PUSHBI 0 no option
jsr S.GetMem
bcs .97
>STYA pData
txa
ldy #S.PS.hDS
sta (pPs),y save DS hMem in TSKSLOT
.1 ldx #TSKMGR.INIT
jsr pCodeJmp Call INIT function
bcs .97 bcs .97
jsr .97 jsr .97
clc clc
rts rts
.97 pha save ERR .97 pha save ERR
>LDAL 1 lda S.InitProcessA.FULLPATH
jsr S.FreeMemA jsr S.FreeMemA
pla pla
.98 pha save ERR .98 pha save ERR
>LDAL 0 lda S.InitProcessA.PATH
jsr S.FreeMemA jsr S.FreeMemA
pla pla
.99 >REMLOCAL 2
sec .99 sec
rts rts
S.InitProcessA.PATH .BS 1
S.InitProcessA.FULLPATH .BS 1
*-------------------------------------- *--------------------------------------
* S.QuitProcessA * S.SelectProcessA
* In : A = PID to Quit (call TSKMGR.QUIT) * In : A=PSID
*-------------------------------------- *--------------------------------------
S.QuitProcessA jsr S.GetPSByIDA S.SelectProcessA
bcs .9 jsr S.GetPSByIDA
>STYA ZPQuickPtr1 bcs *
ldy #S.PS.hCS >STYA pPS
lda (ZPQuickPtr1),y
S.SelectProcess ldy #S.PS.hCS
lda (pPs),y
jsr S.GetMemPtrA jsr S.GetMemPtrA
>STYA Kernel.JMP >STYA pCode
>LDYA ZPQuickPtr1
ldx #TSKMGR.QUIT ldy #S.PS.hDS
jsr Kernel.BINCALL Call QUIT function lda (pPs),y
clc beq .1
jsr S.GetMemPtrA
>STYA pData
.1 ldy #S.PS.hOUTDEV
lda (pPs),y
beq .8
jsr S.GetDevByIDA
>STYA pDev
.8 clc
rts rts
.9 bra *
*-------------------------------------- *--------------------------------------
* S.FreeProcessA * S.FreeProcessA
* In : A = PID to free * In : A = PID to free
@ -469,71 +536,46 @@ S.FreeProcessA jsr S.GetPSByIDA
ldy #S.PS.hARGS ldy #S.PS.hARGS
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
beq .1 beq .1
jsr S.FreeMemA jsr S.FreeMemA
.1 ldy #S.PS.hCMD .1 ldy #S.PS.hCMD
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
beq .2 beq .2
jsr S.FreeMemA jsr S.FreeMemA
.2 ldy #S.PS.hENV .2 ldy #S.PS.hENV
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
beq .3 beq .3
jsr S.FreeMemA jsr S.FreeMemA
.3 ldy #S.PS.hPREFIX .3 ldy #S.PS.hPREFIX
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
beq .4 beq .4
jsr S.FreeMemA jsr S.FreeMemA
.4 ldy #S.PS.hDS .4 ldy #S.PS.hDS
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
beq .5 beq .5
jsr S.FreeMemA jsr S.FreeMemA
.5 ldy #S.PS.hCS .5 ldy #S.PS.hCS
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
beq .8 beq .8
jsr S.FreeMemA jsr S.FreeMemA
.8 lda #0 .8 lda #0
sta (ZPQuickPtr1) Mark TSKSLOT as free sta (ZPQuickPtr1) Mark TSKSLOT as free
clc clc
rts rts
.9 bra * .9 bra *
*-------------------------------------- *--------------------------------------
* S.IsPSRunningA TSKMGR.SIZE .BS 1
* In :
* A = PID
* Out :
* CC = Running
* CS = no PS
*--------------------------------------
S.IsPSRunningA pha save PID
ldx #K.PS.MAX
>LDYAI TSKMGR.TABLE+S.PS.SIZE
>STYA ZPQuickPtr1
.1 lda (ZPQuickPtr1)
bpl .2
ldy #S.PS.ID
pla
pha
cmp (ZPQuickPtr1),y
beq .8
lda ZPQuickPtr1
clc
adc #S.PS.SIZE
sta ZPQuickPtr1
bcc .2
inc ZPQuickPtr2+1
.2 dex
bne .1
pla
sec
rts
.8 pla
clc
rts
*--------------------------------------
TSKMGR.COUNT .BS 1 TSKMGR.COUNT .BS 1
TSKMGR.LASTID .BS 1 TSKMGR.LASTID .BS 1
*-------------------------------------- *--------------------------------------

View File

@ -1,34 +1,35 @@
PR#3 PR#3
PREFIX /A2OSX.BUILD PREFIX /A2OSX.SRC
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6
.LIST OFF .LIST OFF
.OP 65C02 .OP 65C02
.OR $E000 .OR $D000
.TF SYS/KERNEL .TF /A2OSX.BOOT/SYS/KERNEL
*-------------------------------------- *--------------------------------------
.INB INC/MACROS.I .INB INC/MACROS.I
.INB INC/KERNEL.I .INB INC/KERNEL.I
.INB INC/A2OSX.I .INB INC/A2OSX.I
.INB INC/A2OSX.API.I
.INB INC/IO.I .INB INC/IO.I
.INB INC/PRODOS.I .INB INC/PRODOS.I
*-------------------------------------- *--------------------------------------
KERNEL.Start jmp S.Kernel KERNEL jmp S.KernelInit KERNEL.COLDBOOT
*-------------------------------------- *--------------------------------------
KERNEL.SYSCALL jmp (.1,x) jmp (.1,x) KERNEL.SYSCALL
*-------------------------------------- *--------------------------------------
.1 .DA S.GetMem $00 .1 .DA S.GetMem $00
.DA S.FreeMemA .DA S.FreeMemA
.DA S.ClrMemA
.DA S.GetMemPtrA .DA S.GetMemPtrA
.DA S.GetMemLenA
.DA S.GetMemByIDA .DA S.GetMemByIDA
.DA S.GetMemByNameA .DA S.GetMemByNameA
.DA S.GetMemByNameYA
.DA 0
.DA 0 .DA 0
*-------------------------------------- *--------------------------------------
.DA S.NewPStr $10 .DA S.NewPStrYA $10
.DA S.PStrCpyA .DA S.PStrCpyA
.DA S.PStrCat .DA S.PStrCat
.DA S.PStrCmp .DA S.PStrCmp
@ -39,7 +40,7 @@ KERNEL.SYSCALL jmp (.1,x)
.DA 0 .DA 0
*-------------------------------------- *--------------------------------------
.DA S.LoadBinA $20 .DA S.LoadBinA $20
.DA S.LoadLib .DA S.LoadLibYA
.DA S.UnloadLibA .DA S.UnloadLibA
.DA S.LoadDrvA .DA S.LoadDrvA
@ -49,7 +50,7 @@ KERNEL.SYSCALL jmp (.1,x)
.DA 0 .DA 0
*-------------------------------------- *--------------------------------------
.DA S.ExpandPStrA $30 .DA S.ExpandPStrA $30
.DA S.ExpandPStr .DA S.ExpandPStrYA
.DA S.GetEnvVarH .DA S.GetEnvVarH
.DA S.GetEnvVarP .DA S.GetEnvVarP
@ -58,51 +59,51 @@ KERNEL.SYSCALL jmp (.1,x)
.DA 0 .DA 0
.DA 0 .DA 0
*-------------------------------------- *--------------------------------------
.DA S.MLICreate $40 .DA S.MLICreateFile $40
.DA S.MLIDestroy .DA S.MLICreateDirA
.DA S.MLICreateDirYA
.DA S.MLIDestroyA
.DA S.MLIDestroyYA
.DA S.MLIRename .DA S.MLIRename
.DA S.MLISetFileInfo .DA S.MLISetFileInfo
.DA S.MLIGetFileInfoA .DA S.MLIGetFileInfoA
.DA S.MLIGetFileInfoYA $50
.DA S.MLIOnline .DA S.MLIOnline
.DA S.MLISetPrefix .DA S.MLISetPrefixA
.DA S.MLIGetPrefixA .DA S.MLISetPrefixYA
.DA S.MLIOpenA $50 .DA S.MLIGetPrefixA
.DA S.MLINewLine .DA S.MLIGetPrefixYA
.DA S.MLIOpenA
.DA S.MLIOpenYA
.DA S.MLINewLine $60
.DA S.MLIRead .DA S.MLIRead
.DA S.MLIWrite .DA S.MLIWrite
.DA S.MLICloseA .DA S.MLICloseA
.DA S.MLIFlushA .DA S.MLIFlushA
.DA S.MLISetMark .DA S.MLISetMark
.DA S.MLIGetMark .DA S.MLIGetMarkA
.DA S.MLISetEOF
.DA S.MLISetEOF $60 .DA S.MLIGetEOFA $70
.DA S.MLIGetEOFA .DA S.MLISetBuf
.DA 0 .DA S.MLIGetBuf
.DA 0 .DA S.MLIGetTime
.DA 0 .DA S.MLIAllocIRQ
.DA 0 .DA S.MLIDeallocIRQA
.DA 0 .DA S.MLIReadBlock
.DA 0 .DA S.MLIWriteBlock
*-------------------------------------- *--------------------------------------
.DA S.GetDevByIDA $70 .DA S.GetDevByIDA $80
.DA S.GetDevByNameA .DA S.GetDevByNameA
.DA S.GetDevTable
.DA S.GetDevInfoA
.DA S.DevOutA
.DA S.GetDevByNameYA .DA S.GetDevByNameYA
.DA 0 .DA 0
.DA 0
*--------------------------------------
.DA S.GetEvent $80
.DA S.DestroyEvent
.DA 0
.DA 0
.DA 0 .DA 0
.DA 0 .DA 0
.DA 0 .DA 0
@ -139,58 +140,66 @@ KERNEL.SYSCALL jmp (.1,x)
.DA 0 .DA 0
*-------------------------------------- *--------------------------------------
.DA S.ScreenSelectA $C0 .DA S.ScreenSelectA $C0
.DA 0
.DA S.SysScrPPSTRA
.DA S.SysScrPPSTRYA
*-------------------------------------- *--------------------------------------
S.Kernel jsr S.KernelInit S.KernelInit sei
jsr S.KernelRun ldx #$FF init 6502 stack to highest
jsr S.KernelQuit txs
stx A2osX.SaveSM
bra * stx A2osX.SaveSX
*-------------------------------------- cli
S.KernelInit >LDYAI D.STACKSEG
>STYA R.SP init Soft Stack >LDYAI D.STACK.TOP
>STYA R.LS init LS >STYA pStack init Soft Stack
stz A2osX.SCREENS stz A2osX.SCREENS
stz A2osX.ACTIVESCRN stz A2osX.ASCREEN
stz A2osX.CSCREEN.DEV
stz A2osX.GSCREEN.DEV
jsr S.SysScrInit jsr S.SysScrInit
>LDYAI MSG.Init >LDYAI MSG.Init
jsr S.SysScrPPSTR jsr S.SysScrPPSTRYA
>LDYAI MSG.Init.MemMgr >LDYAI MSG.Init.MemMgr
jsr S.SysScrPPSTR jsr S.SysScrPPSTRYA
jsr S.MemMgrInit jsr S.MemMgrInit
jsr S.SysScrPRCode jsr S.SysScrPRCode
bcs .1 bcs .1
>LDYAI MSG.Init.TskMgr >LDYAI MSG.Init.TskMgr
jsr S.SysScrPPSTR jsr S.SysScrPPSTRYA
jsr S.TskMgrInit jsr S.TskMgrInit
jsr S.SysScrPRCode jsr S.SysScrPRCode
.1 bcs .2 .1 bcs .2
>LDYAI MSG.Init.DevMgr >LDYAI MSG.Init.DevMgr
jsr S.SysScrPPSTR jsr S.SysScrPPSTRYA
jsr S.DevMgrInit jsr S.DevMgrInit
jsr S.SysScrPRCode jsr S.SysScrPRCode
.2 bcs .3 .2 bcs .3
>LDYAI MSG.Init.EvtMgr >LDYAI MSG.Init.EvtMgr
jsr S.SysScrPPSTR jsr S.SysScrPPSTRYA
jsr S.EvtMgrInit jsr S.EvtMgrInit
jsr S.SysScrPRCode jsr S.SysScrPRCode
.3 bcs .99 .3 bcs .99
>LDYAI MSG.Init.Startup >LDYAI MSG.Init.Startup
jsr S.SysScrPPSTR jsr S.SysScrPPSTRYA
>PUSHWI STARTUP.FILE Build A2osX.STARTUP full path... >LDYAI STARTUP.FILE Build A2osX.STARTUP full path...
jsr S.NewPStr jsr S.NewPStrYA
pha save for discard pha save for discard
>PUSHA >PUSHA
>PUSHWI ENV.A2osX get KRNL root path >PUSHWI ENV.A2osX get KRNL root path
ldy #S.PS.hENV ldy #S.PS.hENV
lda TSKMGR.TABLE,y lda TskMgr.Table,y
>PUSHA >PUSHA
jsr S.GetEnvVarP jsr S.GetEnvVarP
pha save for discard pha save for discard
@ -200,7 +209,8 @@ S.KernelInit >LDYAI D.STACKSEG
jsr S.ExecFileA jsr S.ExecFileA
jsr S.SysScrPRCode jsr S.SysScrPRCode
bcs *
pla pla
jsr S.FreeMemA jsr S.FreeMemA
pla pla
@ -209,11 +219,14 @@ S.KernelInit >LDYAI D.STACKSEG
jsr S.FreeMemA jsr S.FreeMemA
>LDYAI MSG.Init.SysEnv >LDYAI MSG.Init.SysEnv
jsr S.SysScrPPSTR jsr S.SysScrPPSTRYA
jsr S.PrintSysEnv jsr S.PrintSysEnv
.99 rts .99 bcs *
>LDYAI MSG.Init.OK
jsr S.SysScrPPSTRYA
*-------------------------------------- *--------------------------------------
S.KernelRun jsr S.TskMgrRun S.KernelRun jsr S.TskMgrRun
bcs .98 bcs .98
@ -225,22 +238,22 @@ S.KernelRun jsr S.TskMgrRun
jsr S.DispatchEvent jsr S.DispatchEvent
bcc S.KernelRun CC=Event Dispatched bcc S.KernelRun CC=Event Dispatched
lda (EVTMGR.EVTPTR) lda (pEvent)
and #S.EVT.F.TIMER Discard any TIMER event and #S.EVT.F.TIMER Discard any TIMER event
beq .1 beq .1
jsr S.DestroyEvent jsr S.DestroyEvent
bra S.KernelRun bra S.KernelRun
.1 lda (EVTMGR.EVTPTR) .1 lda (pEvent)
and #S.EVT.F.KEY any special key? and #S.EVT.F.KEY any special key?
beq .99 beq .99
ldy #S.EVT.DATAHI Open-Apple? ldy #S.EVT.DATAHI Open-Apple?
lda (EVTMGR.EVTPTR),y lda (pEvent),y
bpl .99 bpl .99
ldy #S.EVT.DATALO ldy #S.EVT.DATALO
lda (EVTMGR.EVTPTR),y lda (pEvent),y
cmp #$31 cmp #$31
bne .2 bne .2
@ -258,52 +271,24 @@ S.KernelRun jsr S.TskMgrRun
bne .8 bne .8
lda #A2osX.SCREENS.G lda #A2osX.SCREENS.G
jsr S.ScreenSelectA jsr S.ScreenSelectA
.8 jsr S.DestroyEvent .8 jsr S.DestroyEvent
bra S.KernelRun bra S.KernelRun
.98 lda #A2osX.SCREENS.S .98 lda #A2osX.SCREENS.S
jsr S.ScreenSelectA jsr S.ScreenSelectA
>LDYAI MSG.KRNLPANIC >LDYAI MSG.KRNLPANIC
jsr S.SysScrPPSTR jsr S.SysScrPPSTRYA
bra * bra *
.99 >LDYAI MSG.EVNTPANIC .99 >LDYAI MSG.EVNTPANIC
jsr S.SysScrPPSTR jsr S.SysScrPPSTRYA
lda (EVTMGR.EVTPTR) jsr S.DumpEvent
jsr S.SysScrPRBYTEA
ldy #S.EVT.hDEV
lda (EVTMGR.EVTPTR),y
jsr S.SysScrPRBYTEA
ldy #S.EVT.DATALO
lda (EVTMGR.EVTPTR),y
jsr S.SysScrPRBYTEA
ldy #S.EVT.DATAHI
lda (EVTMGR.EVTPTR),y
jsr S.SysScrPRBYTEA
lda #'.'
jsr S.SysScrCOUTA
ldy #S.EVT.DATAW1
lda (EVTMGR.EVTPTR),y
jsr S.SysScrPRBYTEA
iny
lda (EVTMGR.EVTPTR),y
jsr S.SysScrPRBYTEA
lda #'.'
jsr S.SysScrCOUTA
ldy #S.EVT.DATAW2
lda (EVTMGR.EVTPTR),y
jsr S.SysScrPRBYTEA
iny
lda (EVTMGR.EVTPTR),y
jsr S.SysScrPRBYTEA
jsr S.DestroyEvent jsr S.DestroyEvent
jmp S.KernelRun jmp S.KernelRun
*-------------------------------------- *--------------------------------------
S.KernelQuit clc S.KernelQuit bra *
rts
*-------------------------------------- *--------------------------------------
* PUBLIC * PUBLIC
*-------------------------------------- *--------------------------------------
@ -311,38 +296,44 @@ S.KernelQuit clc
* in : * in :
* A = hMem of FilePath (PSTRING) * A = hMem of FilePath (PSTRING)
* out : * out :
*-------------------------------------- *
* LS : (8)
* 0 = hMem of Loaded File
* 2 = PTR to File data
* 4 = Data Len
* 6 = CMD hMem
* 7 = ARGS hMem
*-------------------------------------- *--------------------------------------
S.ExecFileA jsr S.LoadFileA S.ExecFileA jsr S.LoadFileA
bcc S.ExecFileAOK bcc S.ExecFileAOK
rts rts
S.ExecFileAOK >ADDLOCAL 8
>STYAL 4 Store File Length S.ExecFileAOK >STYA S.ExecFileA.DataLen
stx S.ExecFileA.hData
txa txa
>STAL 0 hMem of Loaded File
jsr S.GetMemPtrA jsr S.GetMemPtrA
>STYAL 2 >STYA S.ExecFileA.DataPtr
.1 stz TmpBuffer256 .1 stz TmpBuffer256
.2 >LDYAL 2
.2 >LDYA S.ExecFileA.DataPtr
>STYA ZPQuickPtr1 >STYA ZPQuickPtr1
>INCLW 2
>DECLW 4 inc S.ExecFileA.DataPtr
bne .21
inc S.ExecFileA.DataPtr+1
.21 lda S.ExecFileA.DataLen
bne .22
dec S.ExecFileA.DataLen+1
.22 dec S.ExecFileA.DataLen
lda (ZPQuickPtr1) lda (ZPQuickPtr1)
cmp #$0D cmp #$0D
beq .3 beq .3
inc TmpBuffer256 inc TmpBuffer256
ldx TmpBuffer256 ldx TmpBuffer256
sta TmpBuffer256,x sta TmpBuffer256,x
>LDAL 4
lda S.ExecFileA.DataLen
bne .2 bne .2
>LDAL 5 lda S.ExecFileA.DataLen+1
bne .2 bne .2
.3 lda TmpBuffer256 .3 lda TmpBuffer256
beq .4 beq .4
lda TmpBuffer256+1 lda TmpBuffer256+1
@ -353,83 +344,78 @@ S.ExecFileAOK >ADDLOCAL 8
lda #'>' lda #'>'
jsr S.SysScrCOUTA jsr S.SysScrCOUTA
>LDYAI TmpBuffer256 >LDYAI TmpBuffer256
jsr S.SysScrPPSTR jsr S.SysScrPPSTRYA
>PUSHWI TmpBuffer256 >LDYAI TmpBuffer256
jsr S.NewPStr jsr S.NewPStrYA
bcs .99 bcs .99
pha pha
jsr S.ExecCmdLineA jsr S.ExecCmdLineA
jsr S.SysScrPRCode jsr S.SysScrPRCode
pla pla
jsr S.FreeMemA jsr S.FreeMemA
.4 >LDAL 4
.5 bne .6 .4 lda S.ExecFileA.DataLen
>LDAL 5 bne .1
beq .8 lda S.ExecFileA.DataLen+1
.6 jmp .1 bne .1
.8 jsr .99
jsr .99
clc clc
rts rts
.99 >LDAL 0
.99 lda S.ExecFileA.hData
jsr S.FreeMemA jsr S.FreeMemA
>REMLOCAL 8
sec sec
rts rts
*-------------------------------------- *--------------------------------------
S.ExecCmdLineA >PUSHA S.ExecCmdLineA >PUSHA Push Cmd Line
>PUSHBI $20 Push SEP=' ' >PUSHBI $20 Push SEP=' '
>PUSHBI 0 Push Token IDX >PUSHBI 0 Push Token IDX
jsr S.PStrGetTkn jsr S.PStrGetTkn
bcs .99 bcs .99
>STAL 6
pha sta S.ExecFileA.hCMD
txa stx S.ExecFileA.hARGS
>STAL 7
pla
jsr S.GetMemPtrA jsr S.GetMemPtrA
>PUSHYA >PUSHYA
>PUSHWI EXECCMDS >PUSHWI EXECCMDS
jsr S.GetPStrIndex jsr S.GetPStrIndex
bcs .98 bcs .98
asl asl
tax tax
>LDAL 7 lda S.ExecFileA.hARGS
jsr S.ExecCmdLine jsr S.ExecCmdLine
bcs .98 bcs .98
jsr .98 jsr .98
clc clc
rts rts
.98 pha .98 pha
>LDAL 7 lda S.ExecFileA.hARGS
jsr S.FreeMemA jsr S.FreeMemA
>LDAL 6 lda S.ExecFileA.hCMD
jsr S.FreeMemA jsr S.FreeMemA
pla pla
.99 sec .99 sec
rts rts
*-------------------------------------- *--------------------------------------
S.ExecFileA.hData .BS 1
S.ExecFileA.DataLen .BS 2
S.ExecFileA.DataPtr .BS 2
S.ExecFileA.hCMD .BS 1
S.ExecFileA.hARGS .BS 1
*--------------------------------------
S.ExecCmdLine jmp (.1,x) S.ExecCmdLine jmp (.1,x)
.1 .DA S.SetSysEnvA .1 .DA S.SetSysEnvA
.DA S.LoadDrvA VCPU!!!! .DA S.LoadDrvA VCPU!!!!
.DA S.CreateProcessA VCPU!!!! .DA S.CreateProcessA VCPU!!!!
*-------------------------------------- *--------------------------------------
S.PrintSysEnv ldy #S.PS.hENV pDevJmp jmp (pDev)
lda TSKMGR.TABLE,y Get PS #0 ENV pCodeJmp jmp (pCode)
jsr S.GetMemPtrA pLibJmp jmp (pLib)
>STYA R.AX
.1 lda (R.AX)
beq .8 Ending 0 ?
>LDYA R.AX
jsr S.SysScrPPSTR
jsr S.SysScrCROUT
lda R.AL
sec
adc (R.AX) Add len+1 to PTR
sta R.AL
bcc .1
inc R.AH
bra .1
.8 rts
*-------------------------------------- *--------------------------------------
EXECCMDS >PSTRING "SET" EXECCMDS >PSTRING "SET"
EXECCMDS1 >PSTRING "LOAD" EXECCMDS1 >PSTRING "LOAD"
@ -443,6 +429,8 @@ MSG.Init.DevMgr >PSTRING "->DevMgr Init"
MSG.Init.EvtMgr >PSTRING "->EvtMgr Init" MSG.Init.EvtMgr >PSTRING "->EvtMgr Init"
MSG.Init.Startup >PSTRING "EXEC A2osX.Startup...\n" MSG.Init.Startup >PSTRING "EXEC A2osX.Startup...\n"
MSG.Init.SysEnv >PSTRING "SYS ENV:\n" MSG.Init.SysEnv >PSTRING "SYS ENV:\n"
MSG.Init.OK >PSTRING "A2osX[Stage2]:Complete."
MSG.EVNTPANIC >PSTRING "\nEVT:F/hDev/DATA/W1/W2=" MSG.EVNTPANIC >PSTRING "\nEVT:F/hDev/DATA/W1/W2="
MSG.KRNLPANIC >PSTRING "\n\n!!!Kernel Panic!!!" MSG.KRNLPANIC >PSTRING "\n\n!!!Kernel Panic!!!"
*-------------------------------------- *--------------------------------------
@ -454,25 +442,21 @@ ENV.DRV >PSTRING "DRV"
ENV.ETC >PSTRING "ETC" ENV.ETC >PSTRING "ETC"
ENV.LIB >PSTRING "LIB" ENV.LIB >PSTRING "LIB"
*-------------------------------------- *--------------------------------------
.INB SYS/KERNEL.S.BIN
.INB SYS/KERNEL.S.DEV
.INB SYS/KERNEL.S.ENV
.INB SYS/KERNEL.S.EVT
.INB SYS/KERNEL.S.FS
.INB SYS/KERNEL.S.MEM .INB SYS/KERNEL.S.MEM
.INB SYS/KERNEL.S.MLI
.INB SYS/KERNEL.S.NET
* .INB SYS/KERNEL.S.RDR
.INB SYS/KERNEL.S.SCR .INB SYS/KERNEL.S.SCR
.INB SYS/KERNEL.S.STR .INB SYS/KERNEL.S.STR
.INB SYS/KERNEL.S.FS
.INB SYS/KERNEL.S.MLI
.INB SYS/KERNEL.S.BIN
.INB SYS/KERNEL.S.DRV
.INB SYS/KERNEL.S.LIB
.INB SYS/KERNEL.S.NET
.INB SYS/KERNEL.S.RDR
.INB SYS/KERNEL.S.ENV
.INB SYS/KERNEL.S.TSK .INB SYS/KERNEL.S.TSK
.INB SYS/KERNEL.S.EVT
*-------------------------------------- *--------------------------------------
KERNEL.End .EQ * .INB SYS/KERNEL.S.DEV
Kernel.Size .EQ KERNEL.End-KERNEL.Start
*--------------------------------------
.DO Kernel.Size>$1FFA
ERROR:KERNEL.SIZE too big
.FIN
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE SYS/KERNEL.S SAVE SYS/KERNEL.S

View File

@ -1,12 +1,12 @@
PR#3 PR#3
PREFIX /A2OSX.BUILD PREFIX /A2OSX.SRC
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6
.LIST OFF .LIST OFF
.OP 65C02 .OP 65C02
.OR $2000 .OR $2000
.TF SYS/KM.NSC .TF /A2OSX.BOOT/SYS/KM.NSC
*-------------------------------------- *--------------------------------------
.INB INC/MACROS.I .INB INC/MACROS.I
.INB INC/IO.I .INB INC/IO.I

View File

@ -1,12 +1,12 @@
PR#3 PR#3
PREFIX /A2OSX.BUILD PREFIX /A2OSX.SRC
NEW NEW
INC 1 INC 1
AUTO 6 AUTO 6
.LIST OFF .LIST OFF
.OP 65C02 .OP 65C02
.OR $2000 .OR $2000
.TF SYS/KM.RAMWORKS .TF /A2OSX.BOOT/SYS/KM.RAMWORKS
*-------------------------------------- *--------------------------------------
.INB INC/MACROS.I .INB INC/MACROS.I
.INB INC/IO.I .INB INC/IO.I
@ -166,7 +166,7 @@ RW.Install lda RRAMWRAMBNK1
inc DEVCNT inc DEVCNT
ldx DEVCNT ldx DEVCNT
lda #$30 Slot 3,Drive 1 lda #$30 Slot 3,Drive 1,0=Not Removable, 0=no int, 00=1 Volume
sta DEVLST,x sta DEVLST,x
lda #RWDRV.START lda #RWDRV.START
@ -276,7 +276,8 @@ RW.Format jsr RW.BLOCK.SET00
cmp #4 Are we writing first volume bitmap ? cmp #4 Are we writing first volume bitmap ?
bne .63 no, regular one bne .63 no, regular one
lda #$CF Mark Block 0 & 1 free, 2,3 used (vol hdr) * lda #$CF Mark Block 0 & 1 free, 2,3 used (vol hdr)
lda #$0F
sta RW.BLOCK sta RW.BLOCK
ldy #0 ldy #0
@ -371,9 +372,13 @@ RW.MSG.KO3 >CSTRING "RamWorks Drive Format Error."
* Driver for Ramworks in main LC * Driver for Ramworks in main LC
* $FF00 -> $FF9A (Inclusive) * $FF00 -> $FF9A (Inclusive)
* $FF58 MUST BE $60 (RTS) * $FF58 MUST BE $60 (RTS)
* DO NOT trash DRV.BLKNUM as ProDOS * DO NOT trash DRV.COMMAND...DRV.BLKNUM as ProDOS
* reuses it after Block operation * reuses it after Block operation
* A1,A2 are used by Disk II Driver,
* so we use it safely as Tmp Ptr
*-------------------------------------- *--------------------------------------
DRV.A2L .EQ $3E
DRV.A2H .EQ $3F
DRV.COMMAND .EQ $42 DRV.COMMAND .EQ $42
DRV.BUFF .EQ $44 DRV.BUFF .EQ $44
DRV.BLKNUM .EQ $46 DRV.BLKNUM .EQ $46
@ -389,14 +394,13 @@ RWDRV.START cld ProDOS will check that byte!!!
bcs RWDRV.IOERR > 3 = Invalid OP, IO error bcs RWDRV.IOERR > 3 = Invalid OP, IO error
lda DRV.BLKNUM lda DRV.BLKNUM
sec sbc RWDRV.MAXLO+1 Carry is Clear
sbc RWDRV.MAXLO+1
lda DRV.BLKNUM+1 lda DRV.BLKNUM+1
sbc RWDRV.MAXHI+1 sbc RWDRV.MAXHI+1
bcs RWDRV.IOERR DRV.BLKNUM >= RW.DRV.SIZE, IO error bcs RWDRV.IOERR DRV.BLKNUM >= RW.DRV.SIZE, IO error
lda DRV.BLKNUM compute PAGE = blocknumLO *2 lda DRV.BLKNUM Get Back DRV.BLKNUM
asl asl compute PAGE = blocknumLO *2
pha pha
lda DRV.BLKNUM+1 compute BANK = blocknumHI *2 lda DRV.BLKNUM+1 compute BANK = blocknumHI *2
rol rol
@ -408,50 +412,54 @@ RWDRV.START cld ProDOS will check that byte!!!
*-------------------------------------- *--------------------------------------
* X=Page($02 -> $BF),A=Bank,Y=CMD * X=Page($02 -> $BF),A=Bank,Y=CMD
*-------------------------------------- *--------------------------------------
php * php
sei Disable IRQ as no vector set in RW Banks sei Disable IRQ as no vector set in RW Banks
sta RWBankSelect Select RAMWorks Bank sta RWBankSelect Select RAMWorks Bank
sta CLR80STORE make sure SETREADAUX/SETWRITEAUX effective everywhere sta CLR80STORE make sure SETREADAUX/SETWRITEAUX effective everywhere
stx DRV.COMMAND+1 Reuse DRV.COMMAND for RAM PTR inx second 256 bytes first
stz DRV.COMMAND stx DRV.A2H Use DRV.A1L/H for RAM PTR
stz DRV.A2L
inc DRV.BUFF+1
dey Y=CMD, zero if read dey Y=CMD, zero if read
bne RWDRV.W CC, go write bne RWDRV.W non zero, go write
sta SETREADAUX sta SETREADAUX
ldx #DRV.COMMAND READ:copy from RAM to BUFF ldx #DRV.A2L READ:copy from RAM to BUFF
ldy #DRV.BUFF lda #DRV.BUFF
bra RWDRV.RW bra RWDRV.RW
RWDRV.W sta SETWRITEAUX RWDRV.W sta SETWRITEAUX
ldx #DRV.BUFF ldx #DRV.BUFF
ldy #DRV.COMMAND WRITE:copy from BUFF to RAM lda #DRV.A2L WRITE:copy from BUFF to RAM
dey Make sure Y=0 for main loop below
RWDRV.RW stx RWDRV.RW.SRC+1 RWDRV.RW stx RWDRV.RW.SRC+1
sty RWDRV.RW.DST+1 sta RWDRV.RW.DST+1
ldx #2 2 pages to copy ldx #2 2 pages to copy
ldy #0
RWDRV.RW.SRC lda ($FF),y RWDRV.RW.SRC lda ($FF),y
RWDRV.RW.DST sta ($FF),y RWDRV.RW.DST sta ($FF),y
iny iny
bne RWDRV.RW.SRC bne RWDRV.RW.SRC
.HS 24 BIT Zero Page to skip RTS .HS 24 BIT Zero Page to skip RTS
RWDRV.RTS rts $FF58 Must Be RTS RWDRV.RTS rts $FF58 Must Be RTS
inc DRV.BUFF+1 dec DRV.BUFF+1
inc DRV.COMMAND+1 dec DRV.A2H
dex dex
bne RWDRV.RW.SRC bne RWDRV.RW.SRC
stz RWBankSelect stz RWBankSelect
sta CLRREADAUX sta CLRREADAUX
sta CLRWRITEAUX sta CLRWRITEAUX
plp * plp
cli
RMDRV.CMDSTATUS RMDRV.CMDSTATUS
RWDRV.MAXLO ldx #$FF return device block count in X,Y... RWDRV.MAXLO ldx #$FF return device block count in X,Y...

16
_Make_DIR.txt Normal file
View 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

View File

@ -1,5 +1,12 @@
PREFIX /A2OSX.BUILD PR#3
PREFIX /A2OSX.SRC
NEW NEW
BLOAD A INC 1
AUTO 6
PREFIX /A2OSX.BOOT
DELETE A2OSX.SYSTEM DELETE A2OSX.SYSTEM
BLOAD A
BSAVE A2OSX.SYSTEM,TSYS,A$2000,L$1300 BSAVE A2OSX.SYSTEM,TSYS,A$2000,L$1300
-A2OSX.SYSTEM
MAN
TEXT MSYS