mirror of https://github.com/A2osX/A2osX.git
Kernel Rewrite #6
This commit is contained in:
parent
8bc65b7c1b
commit
3e17ac840c
BIN
A2OSX.BOOT.po
BIN
A2OSX.BOOT.po
Binary file not shown.
Binary file not shown.
BIN
A2OSX.SRC.po
BIN
A2OSX.SRC.po
Binary file not shown.
|
@ -4,26 +4,25 @@ DELETE A2OSX.SYSTEM
|
|||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
AUTO 8
|
||||
.LIST OFF
|
||||
*--------------------------------------
|
||||
* ****** START OF MLI QUIT CODE ******
|
||||
* Load Address :$1000-$11FF
|
||||
* setup $BE00 Global page :
|
||||
* Copy from $1200 to $BE00
|
||||
* Load Address :$1000-$12FF
|
||||
*--------------------------------------
|
||||
MLIOPEN00.PATH .EQ $200
|
||||
MLIOPEN00.BUFF .EQ $0C00 1k Buffer for MLI open
|
||||
MLIREAD00.ADDR .EQ $2000 for loading kernel.bin before moving to LC1
|
||||
MLIREAD00.ADDR .EQ $2000 for loading KERNEL
|
||||
*--------------------------------------
|
||||
A2osX.QC.B.Start
|
||||
.PH $1000
|
||||
*--------------------------------------
|
||||
* Kernel Stage 1
|
||||
*--------------------------------------
|
||||
A2osX.QC.Start .EQ *
|
||||
A2osX.QC cld
|
||||
jmp A2osX.QC.Start1
|
||||
|
||||
A2osX.QC.Prefix .BS 32
|
||||
A2osX.QC.Prefix .BS 64
|
||||
|
||||
A2osX.QC.Start1 sei
|
||||
ldx #$FF
|
||||
|
@ -47,7 +46,7 @@ A2osX.QC.Start1 sei
|
|||
lda #$8C Reset 80 col screen ($0C=FF=HOME)
|
||||
jsr $C300
|
||||
|
||||
>LDAXI MSG.STAGE1
|
||||
>LDAXI MSG.INIT1
|
||||
jsr A2osX.QC.PrintAX
|
||||
|
||||
ldx #0
|
||||
|
@ -79,17 +78,16 @@ A2osX.QC.Start1 sei
|
|||
jsr A2osX.QC.KLoad
|
||||
bcs .9
|
||||
|
||||
>LDYAI GO.Reset
|
||||
>STYA POWERUP
|
||||
bit RROMBNK1
|
||||
jsr SETPWRC
|
||||
* >LDYAI GO.Reset
|
||||
* >STYA POWERUP
|
||||
* bit RROMBNK1
|
||||
* jsr SETPWRC
|
||||
|
||||
>LDAXI MSG.STAGE1OK
|
||||
>LDAXI MSG.INIT1OK
|
||||
jsr A2osX.QC.PrintAX
|
||||
|
||||
>DEBUGOA
|
||||
|
||||
jmp (POWERUP)
|
||||
jmp $2000
|
||||
|
||||
.9 >LDAXI MSG.KLOADING.KO
|
||||
jsr A2osX.QC.PrintAX
|
||||
|
@ -130,36 +128,7 @@ A2osX.QC.KLoad ldx A2osX.QC.Prefix
|
|||
jsr MLI
|
||||
.DA #MLICLOSE
|
||||
.DA MLICLOSE00
|
||||
bcs .9
|
||||
|
||||
php
|
||||
sei
|
||||
sta SETALTZP
|
||||
lda RRAMWRAMBNK1
|
||||
lda RRAMWRAMBNK1
|
||||
|
||||
>LDYAI MLIREAD00.ADDR+$2F00
|
||||
>STYA TmpPtr1
|
||||
>LDYAI $D000+$2F00
|
||||
>STYA TmpPtr2
|
||||
ldx #$30
|
||||
ldy #$F9 do not trash NMI,BRK,IRQ Vectors
|
||||
|
||||
.3 lda (TmpPtr1),y
|
||||
sta (TmpPtr2),y
|
||||
dey
|
||||
cpy #$FF
|
||||
bne .3
|
||||
|
||||
dec TmpPtr1+1
|
||||
dec TmpPtr2+1
|
||||
dex
|
||||
bne .3
|
||||
|
||||
lda RROMBNK1
|
||||
sta CLRALTZP
|
||||
plp
|
||||
clc
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
A2osX.QC.PrintAX
|
||||
|
@ -195,14 +164,14 @@ MLICLOSE00 .DA #1
|
|||
*--------------------------------------
|
||||
SYSKERNEL >PSTRING "SYS/KERNEL"
|
||||
*--------------------------------------
|
||||
MSG.STAGE1 >PSTRING "A2osX[Stage1]:Init"
|
||||
MSG.INIT1 >PSTRING "A2osX[Stage1]:Init"
|
||||
MSG.SETPREFIXOK >PSTRING "Set Prefix OK"
|
||||
MSG.SETPREFIXKO >PSTRING "Insert Vol:"
|
||||
MSG.KLOADING >PSTRING "Loading Kernel..."
|
||||
MSG.KLOADING.KO >PSTRING "Error While Loading Kernel."
|
||||
MSG.STAGE1OK >PSTRING "A2osX[Stage1]:Complete."
|
||||
MSG.INIT1OK >PSTRING "A2osX[Stage1]:Complete."
|
||||
*--------------------------------------
|
||||
.BS $1200-*
|
||||
.BS $1300-*
|
||||
.EP
|
||||
*--------------------------------------
|
||||
MAN
|
||||
|
|
390
A2osX.S.txt
390
A2osX.S.txt
|
@ -4,7 +4,7 @@ DELETE A2OSX.SYSTEM
|
|||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
AUTO 8
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
.OR $2000
|
||||
|
@ -19,7 +19,6 @@ AUTO 6
|
|||
TmpPtr1 .EQ $0 main & aux ZP
|
||||
TmpPtr2 .EQ $2 main & aux ZP
|
||||
*--------------------------------------
|
||||
A2osX.RelocAddr .EQ $1000
|
||||
A2osX.KMLOAD .EQ $2000
|
||||
A2osX.KMMAXLEN .EQ $4000
|
||||
A2osX.OpenBuff1 .EQ $6000 1024 Buffer for MLIOPEN01
|
||||
|
@ -28,16 +27,13 @@ A2osX.ReadBuff .EQ $6800 512 Buffer for MLIREAD01
|
|||
Boot.Prefix .EQ $6A00 MLI.MAXPATH
|
||||
KM.Filename .EQ $6A80 MLI.MAXPATH
|
||||
*--------------------------------------
|
||||
A2osX.Start .EQ *
|
||||
.PH A2osX.RelocAddr
|
||||
A2osX.Init0
|
||||
|
||||
ldx #$FF init 6502 stack to highest
|
||||
txs
|
||||
* Kernel Stage 0
|
||||
*--------------------------------------
|
||||
.PH $1000
|
||||
|
||||
>LDYAI A2osX.Start
|
||||
A2osX.Init0 >LDYAI $2000
|
||||
>STYA TmpPtr1
|
||||
>LDYAI A2osX.RelocAddr
|
||||
>LDYAI $1000
|
||||
>STYA TmpPtr2
|
||||
|
||||
ldx #$10 reloc $2000-$2FFF to $1000-$1FFF
|
||||
|
@ -55,9 +51,12 @@ A2osX.Init0
|
|||
|
||||
jmp A2osX.Init1
|
||||
*--------------------------------------
|
||||
A2osX.Init1 bit RROMBNK1
|
||||
A2osX.Init1 ldx #$FF init 6502 stack to highest
|
||||
txs
|
||||
|
||||
bit RROMBNK1
|
||||
jsr HOME
|
||||
>LDAXI MSG.STAGE0
|
||||
>LDAXI MSG.INIT0
|
||||
jsr PrintCStrAX
|
||||
|
||||
>LDAXI MSG.SYSMEM
|
||||
|
@ -72,10 +71,10 @@ A2osX.Init1 bit RROMBNK1
|
|||
jsr PrintCStrAX
|
||||
bra *
|
||||
|
||||
.1 lda #$8C Reset 80 col screen ($0C=FF=HOME)
|
||||
.1 lda #$8C Reset 80 col screen ($0C:HOME)
|
||||
jsr $C300
|
||||
|
||||
>LDAXI MSG.STAGE0
|
||||
>LDAXI MSG.INIT0
|
||||
jsr PrintCStrAX
|
||||
|
||||
>LDAXI MSG.SYSMEM
|
||||
|
@ -83,97 +82,22 @@ A2osX.Init1 bit RROMBNK1
|
|||
|
||||
>LDAXI MSG.SYSMEM.OK
|
||||
jsr PrintCStrAX
|
||||
*--------------------------------------
|
||||
A2osX.SetHZ lda #6
|
||||
sta A2osX.HZ
|
||||
pha push HZ
|
||||
>LDAXI MSG.HZ
|
||||
jsr PrintCStrAX
|
||||
*--------------------------------------
|
||||
|
||||
>LDAXI MSG.CPU
|
||||
jsr PrintCStrAX
|
||||
jsr Init6502 Y = CPU type
|
||||
tya
|
||||
ora #$60
|
||||
sta A2osX.CPUTYPE
|
||||
|
||||
sed Test 6502 BCD bug
|
||||
lda #$99
|
||||
clc
|
||||
adc #$01
|
||||
cld
|
||||
bpl .2 if minus, BUG!, we have 6502
|
||||
|
||||
lda MSG.CPUTYPEH,y
|
||||
tax
|
||||
lda MSG.CPUTYPEL,y
|
||||
jsr PrintCStrAX
|
||||
|
||||
lda A2osX.CPUTYPE
|
||||
bne .1
|
||||
>LDAXI MSG.CPU.KO
|
||||
jsr PrintCStrAX
|
||||
bra *
|
||||
*--------------------------------------
|
||||
.1 lda MACHID
|
||||
and #MACHID.TYPE
|
||||
cmp #MACHID.TYPE.IIc
|
||||
beq A2osX.Prefix
|
||||
|
||||
>LDAXI MSG.CPU.SPEED
|
||||
jsr PrintCStrAX
|
||||
|
||||
stz A2osX.RANDOM16
|
||||
stz A2osX.RANDOM16+1
|
||||
|
||||
php
|
||||
sei
|
||||
|
||||
.2 bit VBL
|
||||
bpl .2
|
||||
|
||||
.21 bit VBL
|
||||
bmi .21
|
||||
|
||||
ldx #0 Count LO
|
||||
lda #0 Count HI
|
||||
|
||||
.3 ldy #3 (2)
|
||||
|
||||
.4 nop (2)
|
||||
dey (2)
|
||||
bne .4 (2*)
|
||||
|
||||
inc A2osX.RANDOM16 (6)
|
||||
bne .5 (2*)
|
||||
|
||||
inc A2osX.RANDOM16+1 (6)
|
||||
bit VBL (4)
|
||||
bpl .3 (2*)
|
||||
bmi .6
|
||||
|
||||
.5 nop (2)
|
||||
nop (2)
|
||||
nop (2)
|
||||
bit VBL (4)
|
||||
bpl .3 (2*)
|
||||
|
||||
.6 plp
|
||||
|
||||
stz A2osX.CPUSPEED
|
||||
|
||||
.7 sec
|
||||
lda A2osX.RANDOM16
|
||||
sbc #100
|
||||
tax
|
||||
lda A2osX.RANDOM16+1
|
||||
sbc /100
|
||||
bcc .8
|
||||
|
||||
stx A2osX.RANDOM16
|
||||
sta A2osX.RANDOM16+1
|
||||
inc A2osX.CPUSPEED
|
||||
bra .7
|
||||
|
||||
.8 lda A2osX.RANDOM16
|
||||
sta A2osX.CPUSPEED+1
|
||||
pha push CPU speed LO
|
||||
lda A2osX.CPUSPEED
|
||||
pha push CPU speed HI
|
||||
>LDAXI MSG.CPU.SPEEDOK
|
||||
.2 >LDAXI MSG.CPU.OK
|
||||
jsr PrintCStrAX
|
||||
*--------------------------------------
|
||||
A2osX.Prefix >LDAXI MSG.BOOTPREFIX
|
||||
|
@ -204,103 +128,44 @@ A2osX.RamDrv >LDAXI MSG.RAMDRV
|
|||
bne .1
|
||||
>LDAXI MSG.RAMDRV.KO0
|
||||
jsr PrintCStrAX
|
||||
bra A2osX.Z80
|
||||
bra A2osX.SetupQC
|
||||
|
||||
.1 >LDAXI MSG.RAMDRV.KO1
|
||||
jsr PrintCStrAX
|
||||
bra A2osX.Z80
|
||||
bra A2osX.SetupQC
|
||||
|
||||
.2 >LDAXI MSG.RAMDRV.OK
|
||||
jsr PrintCStrAX
|
||||
*--------------------------------------
|
||||
A2osX.Z80 >LDAXI MSG.Z80
|
||||
jsr PrintCStrAX
|
||||
jsr InitZ80
|
||||
bcs .1
|
||||
pha Push Z80Slot
|
||||
|
||||
>LDAXI MSG.Z80.OK
|
||||
jsr PrintCStrAX
|
||||
bra A2osX.SetupQC
|
||||
|
||||
.1 >LDAXI MSG.Z80.KO
|
||||
jsr PrintCStrAX
|
||||
*--------------------------------------
|
||||
A2osX.SetupQC lda RRAMWRAMBNK2
|
||||
lda RRAMWRAMBNK2
|
||||
|
||||
ldx #0
|
||||
|
||||
.1 lda A2osX.QC.B.Start,x
|
||||
sta $D100,x
|
||||
lda A2osX.QC.B.Start+$100,x
|
||||
sta $D200,x
|
||||
lda A2osX.QC.B.Start+$200,x
|
||||
sta $D300,x
|
||||
inx
|
||||
bne .1
|
||||
|
||||
ldx #$C0
|
||||
.2 lda A2osX.GP.B.start-1,x
|
||||
sta $D300-1,x
|
||||
dex
|
||||
bne .2
|
||||
|
||||
ldx #$20
|
||||
.3 lda $BEE0-1,x
|
||||
sta $D3E0-1,x
|
||||
dex
|
||||
bne .3
|
||||
|
||||
lda RROMBNK1
|
||||
*--------------------------------------
|
||||
A2osX.EnumKM >LDAXI MSG.KMENUM
|
||||
jsr PrintCStrAX
|
||||
jsr EnumKM
|
||||
*--------------------------------------
|
||||
A2osX.MLIQuit >LDAXI MSG.STAGE0OK
|
||||
A2osX.MLIQuit >LDAXI MSG.INIT0OK
|
||||
jsr PrintCStrAX
|
||||
|
||||
>DEBUGOA
|
||||
|
||||
jsr MLI
|
||||
.DA #MLIQUIT
|
||||
.DA MLIQUIT01
|
||||
bra *
|
||||
*--------------------------------------
|
||||
* Out:
|
||||
* Y = 0, 6502
|
||||
* Y = 1, 65C02
|
||||
* Y = 2, R65C02
|
||||
* Y = 3, 65C816
|
||||
*--------------------------------------
|
||||
Init6502 ldy #0 Test 6502 BCD bug
|
||||
sed
|
||||
lda #$99
|
||||
clc
|
||||
adc #$01
|
||||
cld
|
||||
bmi .9 BUG!, we have 6502
|
||||
|
||||
ldy #3 test 65C816 TYX Instruction
|
||||
ldx #0
|
||||
.OP 65816
|
||||
tyx TYX: if 65C816, x becomes non-zero
|
||||
.OP 65C02
|
||||
bne .9 worked! 65C816
|
||||
|
||||
dey y=2 -> R65C02
|
||||
ldx $EA save zp $EA
|
||||
stz $EA store 0 in $EA
|
||||
* .OP 65R02
|
||||
.HS F7EA For compatibility with A2osX.ASM
|
||||
* smb 7,$EA if not Rockwell, assemble as nop nop
|
||||
* .OP 65C02
|
||||
asl $EA cs if Rockwell
|
||||
stx $EA restore zp $EA
|
||||
bcs .9
|
||||
|
||||
dey y=1 -> 65C02
|
||||
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
DisableRamDRV php
|
||||
sei
|
||||
lda DEVPTRS3D2
|
||||
|
@ -354,74 +219,167 @@ DisableRamDRV php
|
|||
lda #0 Not detected
|
||||
sec
|
||||
rts
|
||||
EnumKM.EPB .EQ $0D
|
||||
EnumKM.EL .EQ $27
|
||||
*--------------------------------------
|
||||
InitZ80 ldx #Z80Code.Size
|
||||
.1 lda Z80Code.Start-1,x
|
||||
sta $1000-1,x 00000H for Z80
|
||||
EnumKM ldx #0
|
||||
ldy Boot.Prefix
|
||||
.1 inx
|
||||
lda SYS,x
|
||||
sta Boot.Prefix+1,y
|
||||
iny
|
||||
cpx SYS
|
||||
bne .1
|
||||
|
||||
sty Boot.Prefix
|
||||
|
||||
jsr MLI
|
||||
.DA #MLIOPEN
|
||||
.DA MLIOPEN01
|
||||
bcs .99
|
||||
|
||||
lda MLIOPEN01+5
|
||||
sta MLIREAD01+1
|
||||
sta MLICLOSE01+1
|
||||
|
||||
.2 jsr MLI
|
||||
.DA #MLIREAD
|
||||
.DA MLIREAD01
|
||||
bcs .98
|
||||
|
||||
lda #EnumKM.EPB
|
||||
sta EnumKM.EC
|
||||
>LDYAI A2osX.ReadBuff+4
|
||||
>STYA EnumKM.BPTR
|
||||
|
||||
.3 >LDYA EnumKM.BPTR
|
||||
>STYA TmpPtr1
|
||||
lda (TmpPtr1)
|
||||
and #$F0 Empty ?
|
||||
beq .5 yes, skip
|
||||
and #$C0 anything out of type 1,2 or 3 ?
|
||||
bne .5 yes, skip
|
||||
lda (TmpPtr1)
|
||||
and #$0F
|
||||
cmp KM.PREFIX at least enough chars for KM.*?
|
||||
bcc .5 no, skip
|
||||
ldy #$10 file type
|
||||
lda (TmpPtr1),y
|
||||
cmp #$06 'BIN'?
|
||||
bne .5 skip
|
||||
ldy KM.PREFIX
|
||||
.4 lda (TmpPtr1),y
|
||||
cmp KM.PREFIX,y
|
||||
bne .5
|
||||
dey
|
||||
bne .4
|
||||
|
||||
jsr LoadKM
|
||||
|
||||
.5 lda EnumKM.BPTR
|
||||
clc
|
||||
adc #EnumKM.EL
|
||||
sta EnumKM.BPTR
|
||||
bcc .6
|
||||
inc EnumKM.BPTR+1
|
||||
|
||||
.6 dec EnumKM.EC
|
||||
bne .3
|
||||
bra .2
|
||||
|
||||
.8 jsr MLI
|
||||
.DA #MLICLOSE
|
||||
.DA MLICLOSE01
|
||||
rts
|
||||
|
||||
.98 cmp #MLI.ERR.EOF
|
||||
beq .8
|
||||
pha
|
||||
jsr .8
|
||||
pla
|
||||
.99 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
EnumKM.EC .BS 1
|
||||
EnumKM.BPTR .BS 2
|
||||
*--------------------------------------
|
||||
LoadKM ldx Boot.Prefix
|
||||
.1 lda Boot.Prefix,x
|
||||
sta KM.Filename,x
|
||||
dex
|
||||
bne .1
|
||||
|
||||
stz TmpPtr1
|
||||
lda #$C1
|
||||
sta TmpPtr1+1
|
||||
|
||||
.2 sta (TmpPtr1)
|
||||
lda $100D
|
||||
bmi .8
|
||||
inc TmpPtr1+1
|
||||
lda TmpPtr1+1
|
||||
cmp #$C8
|
||||
beq .9
|
||||
clc
|
||||
adc #$20
|
||||
sta $100A
|
||||
bra .2
|
||||
|
||||
.8 lda TmpPtr1+1
|
||||
ldx Boot.Prefix
|
||||
lda (TmpPtr1)
|
||||
and #$0F
|
||||
sta A2osX.Z80Slot
|
||||
tay
|
||||
clc
|
||||
rts
|
||||
adc Boot.Prefix
|
||||
sta KM.Filename
|
||||
tax
|
||||
|
||||
.9 stz A2osX.Z80Slot
|
||||
.2 lda (TmpPtr1),y
|
||||
sta KM.Filename,x
|
||||
dex
|
||||
dey
|
||||
bne .2
|
||||
|
||||
>LDAXI MSG.KMLOAD
|
||||
jsr PrintCStrAX
|
||||
>LDAXI KM.Filename
|
||||
jsr PrintPStrAX
|
||||
jsr CROUT
|
||||
|
||||
jsr MLI
|
||||
.DA #MLIOPEN
|
||||
.DA MLIOPEN02
|
||||
bcs .99
|
||||
|
||||
lda MLIOPEN02+5
|
||||
sta MLIREAD02+1
|
||||
sta MLICLOSE02+1
|
||||
|
||||
jsr MLI
|
||||
.DA #MLIREAD
|
||||
.DA MLIREAD02
|
||||
bcs .98
|
||||
jsr .9
|
||||
|
||||
jsr A2osX.KMLOAD
|
||||
jsr CROUT
|
||||
|
||||
.98 pha
|
||||
jsr .9
|
||||
pla
|
||||
sec
|
||||
rts
|
||||
|
||||
.9 jsr MLI
|
||||
.DA #MLICLOSE
|
||||
.DA MLICLOSE02
|
||||
.99 rts
|
||||
*--------------------------------------
|
||||
.INB A2OSX.S.KM
|
||||
.INB A2OSX.S.TOOLS
|
||||
.INB X.PRINTF.S
|
||||
*--------------------------------------
|
||||
MSG.STAGE0 >CSTRING "A2osX[Stage0]:Init\n"
|
||||
MSG.INIT0 >CSTRING "A2osX[Stage0]:Init\n"
|
||||
MSG.SYSMEM >CSTRING "Checking System Memory..."
|
||||
MSG.SYSMEM.OK >CSTRING "128k Detected.\n"
|
||||
MSG.SYSMEM.KO >CSTRING "A2osX Requires At Least 128k Memory.\n"
|
||||
MSG.HZ >CSTRING "Kernel SYS Timer Setup For %d0 hz.\n"
|
||||
|
||||
MSG.CPU >CSTRING "Checking CPU..."
|
||||
MSG.CPU.OK >CSTRING "65C02 CPU (or higher) Detected.\n"
|
||||
MSG.CPU.KO >CSTRING "A2osX Requires At Least A 65C02 CPU.\n"
|
||||
MSG.CPU.SPEED >CSTRING "Detecting CPU Speed..."
|
||||
MSG.CPU.SPEEDOK >CSTRING "%d.%02d Mhz.\n"
|
||||
MSG.BOOTPREFIX >CSTRING "Boot Prefix:"
|
||||
|
||||
MSG.RAMDRV >CSTRING "Checking ProDOS RamDrive..."
|
||||
MSG.RAMDRV.OK >CSTRING "Successfully Disabled.\n"
|
||||
MSG.RAMDRV.KO0 >CSTRING "Not Detected.\n"
|
||||
MSG.RAMDRV.KO1 >CSTRING "Uninstall Failed !!!\n"
|
||||
MSG.Z80 >CSTRING "Detecting Z80 CPU..."
|
||||
MSG.Z80.OK >CSTRING "Detected In Slot %d.\n"
|
||||
MSG.Z80.KO >CSTRING "Not Detected.\n"
|
||||
|
||||
MSG.BOOTPREFIX >CSTRING "Boot Prefix:"
|
||||
|
||||
MSG.KMENUM >CSTRING "Looking For Kernel Modules...\n"
|
||||
MSG.KMLOAD >CSTRING "***Loading KM : "
|
||||
MSG.STAGE0OK >CSTRING "A2osX[Stage0]:Complete.\n"
|
||||
MSG.CPUTYPEL .DA #MSG.6502
|
||||
.DA #MSG.65C02
|
||||
.DA #MSG.65R02
|
||||
.DA #MSG.65816
|
||||
MSG.CPUTYPEH .DA /MSG.6502
|
||||
.DA /MSG.65C02
|
||||
.DA /MSG.65R02
|
||||
.DA /MSG.65816
|
||||
MSG.6502 >CSTRING "6502.\n"
|
||||
MSG.65C02 >CSTRING "65C02.\n"
|
||||
MSG.65R02 >CSTRING "65R02.\n"
|
||||
MSG.65816 >CSTRING "65816.\n"
|
||||
MSG.INIT0OK >CSTRING "A2osX[Stage0]:Complete.\n"
|
||||
*--------------------------------------
|
||||
MLIGETPREFIX01 .DA #1
|
||||
.DA Boot.Prefix
|
||||
|
@ -459,23 +417,11 @@ MLIQUIT01 .DA #4
|
|||
*--------------------------------------
|
||||
SYS >PSTRING "SYS/"
|
||||
KM.PREFIX >PSTRING "KM."
|
||||
*--------------------------------------
|
||||
Z80Code.Start .HS 31FFFF START: LD SP,0FFFFH Init Stack
|
||||
.HS 3EFF LD A,0FFH Set Flag
|
||||
.HS 320D00 LD (FLAG),A
|
||||
.HS 3200E1 LD (0E100H),A Back to 6502
|
||||
.HS 18F3 JR START Loop
|
||||
.HS 00 FLAG: .DB 0
|
||||
Z80Code.End .EQ *
|
||||
Z80Code.Size .EQ Z80Code.End-Z80Code.Start
|
||||
*--------------------------------------
|
||||
.EP
|
||||
A2osX.End .EQ *
|
||||
A2osX.SIZE .EQ A2osX.End-A2osX.Start
|
||||
.BS $1000-A2osX.SIZE
|
||||
*--------------------------------------
|
||||
A2osX.QC.B.Start
|
||||
.INB A2OSX.S.QC
|
||||
.INB A2OSX.S.GP
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE A2OSX.S
|
||||
|
|
|
@ -8,27 +8,27 @@ echo Env:
|
|||
SET
|
||||
# Main Screen
|
||||
INSDRV CONSOLE.DRV
|
||||
STARTPROC GETTY CON SBIN/LOGIN
|
||||
STARTPROC GETTY CON ${A2OSX}SBIN/LOGIN
|
||||
# Serial Login
|
||||
#INSDRV SSC.I.DRV 9600 N 8 1 X
|
||||
#STARTPROC GETTY COM2 SBIN/LOGIN
|
||||
#STARTPROC GETTY COM2 LOGIN
|
||||
#INSDRV PIC.DRV
|
||||
# Network Section
|
||||
INSDRV UTHERNET.DRV 000E3A123456
|
||||
INSDRV UTHERNET2.DRV 0008DC123456
|
||||
#INSDRV UTHERNET.DRV 000E3A123456
|
||||
#INSDRV UTHERNET2.DRV 0008DC123456
|
||||
#INSDRV UTHER2.AI.DRV 0008DC123456
|
||||
#INSDRV LANCEGS.DRV
|
||||
STARTPROC TCPIP
|
||||
STARTPROC DHCPCLNT
|
||||
#STARTPROC TCPIP
|
||||
#STARTPROC DHCPCLNT
|
||||
#STARTPROC HTTPD
|
||||
#TELNETD
|
||||
#MOUNT TFTP 192.168.1.5:/A2OSX /MNT/A2OSX
|
||||
#MOUNT CIFS 192.168.1.5:/MSSHARE /MNT/MSSHARE
|
||||
# End Network Section
|
||||
# GUI Section
|
||||
#INSDRV DHGR.DRV
|
||||
#INSDRV MOUSE.DRV
|
||||
#DESKTOP
|
||||
INSDRV DHGR.DRV
|
||||
INSDRV MOUSE.DRV
|
||||
STARTPROC DESKTOP
|
||||
# End GUI Section
|
||||
ECHO *** End A2osX Startup file ***
|
||||
MAN
|
||||
|
|
|
@ -70,7 +70,8 @@ FIO.OpenFileA sta FIO.hFileName
|
|||
bra FIO.OpenFileA.Exit
|
||||
|
||||
.10 lda FIO.hFileName
|
||||
>SYSCALL SYS.MLIOpenA
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>SYSCALL SYS.MLIOpenYA
|
||||
bcs .99
|
||||
|
||||
pha
|
||||
|
@ -91,7 +92,8 @@ FIO.OpenFileA sta FIO.hFileName
|
|||
sta (pData),y
|
||||
|
||||
lda FIO.hFileName
|
||||
>SYSCALL SYS.MLIGetFileInfoA
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>SYSCALL SYS.MLIGetFileInfoYA
|
||||
bcs .99
|
||||
|
||||
>STYA ZPPtr1
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
PR#3
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
LOMEM $C00
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
|
|
|
@ -131,7 +131,8 @@ CS.INIT stz hFile
|
|||
.2 ldy #hFileName
|
||||
sta (pData),y
|
||||
|
||||
>SYSCALL SYS.LoadFileA
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>SYSCALL SYS.LoadFileYA
|
||||
bcs .3
|
||||
|
||||
stx hFile
|
||||
|
@ -415,7 +416,8 @@ SaveFile >PUSHWI 0 Aux type
|
|||
|
||||
.1 ldy #hFileName
|
||||
lda (pData),y
|
||||
>SYSCALL SYS.MLIOpenA
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>SYSCALL SYS.MLIOpenYA
|
||||
bcs .9
|
||||
sta hFile
|
||||
stx TmpByte
|
||||
|
|
|
@ -41,8 +41,10 @@ L.MSG1 .DA MSG1
|
|||
*--------------------------------------
|
||||
CS.INIT >LDYA L.LIBSTR
|
||||
>SYSCALL SYS.LoadLibYA
|
||||
bcs .9
|
||||
sta hLIBSTR
|
||||
bcc .1
|
||||
rts
|
||||
|
||||
.1 sta hLIBSTR
|
||||
|
||||
>LDYAI DevMgr.Table
|
||||
>STYA ZPPTR1
|
||||
|
@ -51,23 +53,27 @@ CS.INIT >LDYA L.LIBSTR
|
|||
>PUSHW L.MSG0
|
||||
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
||||
|
||||
.1 lda (ZPPTR1)
|
||||
.2 lda (ZPPTR1)
|
||||
cmp #$D8
|
||||
bne .8
|
||||
|
||||
ldy #S.DEV.JMP+1
|
||||
>PUSHB (ZPPTR1),y
|
||||
dey
|
||||
>PUSHB (ZPPTR1),y
|
||||
|
||||
lda ZPPTR1
|
||||
clc
|
||||
adc #S.DEV.NAME
|
||||
sta ZPPTR2
|
||||
tay
|
||||
lda ZPPTR1+1
|
||||
adc #0
|
||||
sta ZPPTR2+1
|
||||
>PUSHW ZPPTR2
|
||||
>PUSHYA
|
||||
|
||||
ldy #S.DEV.F
|
||||
lda (ZPPTR1),y push flags
|
||||
>PUSHA
|
||||
>PUSHB DEV.ID
|
||||
>PUSHB (ZPPTR1),y
|
||||
ldy #S.DEV.ID
|
||||
>PUSHB (ZPPTR1),y
|
||||
>PUSHW L.MSG1
|
||||
>LIBCALL hLIBSTR,LIBSTR.PRINTF
|
||||
|
||||
|
@ -81,7 +87,7 @@ CS.INIT >LDYA L.LIBSTR
|
|||
.3 inc DEV.ID
|
||||
lda DEV.ID
|
||||
cmp #K.DEV.MAX
|
||||
bne .1
|
||||
bne .2
|
||||
|
||||
.8 lda #0 tell TSKMGR that all done ok, but
|
||||
.9 sec we do not want to stay in memory
|
||||
|
@ -98,8 +104,8 @@ CS.QUIT lda hLIBSTR
|
|||
*--------------------------------------
|
||||
CS.END
|
||||
LIBSTR >PSTRING "libstr.o"
|
||||
MSG0 >CSTRING "ID Flags Name\n"
|
||||
MSG1 >CSTRING "%03d %b %4S\n"
|
||||
MSG0 >CSTRING "ID Flags Name Address\n"
|
||||
MSG1 >CSTRING "%03d %b %4S $%H\n"
|
||||
hLIBSTR .BS 1
|
||||
DEV.ID .BS 1
|
||||
MAN
|
||||
|
|
|
@ -62,7 +62,8 @@ CS.INIT stz hFullPath
|
|||
>SYSCALL SYS.PStrCat
|
||||
sta hFullPath
|
||||
|
||||
.2 >SYSCALL SYS.MLICreateDirA
|
||||
.2 >SYSCALL SYS.GetMemPtrA
|
||||
>SYSCALL SYS.MLICreateDirYA
|
||||
php
|
||||
pha
|
||||
jsr .98
|
||||
|
|
|
@ -0,0 +1,109 @@
|
|||
PR#3
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
.OR $2000
|
||||
.TF /A2OSX.BOOT/BIN/NFSMOUNT
|
||||
*--------------------------------------
|
||||
.INB INC/MACROS.I
|
||||
.INB INC/A2OSX.I
|
||||
.INB INC/LIBTCPIP.I
|
||||
*--------------------------------------
|
||||
TIMEOUT.MAX .EQ 40 40*100ms = 4 sec.
|
||||
*--------------------------------------
|
||||
ZPIPCfgPtr .EQ ZPBIN
|
||||
ZPFrameBase .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 DS.END-DS.START Data Segment to Allocate
|
||||
.DA 0
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
.1 .DA CS.INIT
|
||||
.DA CS.RUN
|
||||
.DA CS.DOEVENT
|
||||
.DA CS.QUIT
|
||||
L.LIBTCPIP .DA LIBTCPIP
|
||||
L.MSG.USAGE .DA MSG.USAGE
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
CS.INIT ldy #S.PS.hARGS
|
||||
lda (pPs),y
|
||||
beq .99
|
||||
|
||||
>LIBCALL hLIBTCPIP,LIBTCPIP.GET.IPCFG is TCPIP loaded ?
|
||||
bcs .99
|
||||
>STYA ZPIPCfgPtr
|
||||
|
||||
lda (ZPIPCfgPtr) Configured ?
|
||||
bpl .99
|
||||
|
||||
ldx #3
|
||||
ldy #S.IPCFG.IP+3
|
||||
.1 lda (ZPIPCfgPtr),y
|
||||
sta Socket.Src.Addr,x
|
||||
dey
|
||||
dex
|
||||
bpl .1
|
||||
|
||||
lda (pPs)
|
||||
ora #S.PS.F.EVENT Now accept events
|
||||
sta (pPs)
|
||||
clc
|
||||
rts
|
||||
|
||||
.99 >LDYA L.MSG.USAGE
|
||||
>SYSCALL SYS.PSTROutYA
|
||||
lda #SYSMGR.ERRSYN
|
||||
sec
|
||||
rts
|
||||
|
||||
*--------------------------------------
|
||||
CS.RUN
|
||||
CS.RUN.ERROR sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.DOEVENT
|
||||
.8 clc
|
||||
rts
|
||||
|
||||
.9 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.QUIT lda hLIBTCPIP
|
||||
>SYSCALL SYS.UnloadLibA
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.END
|
||||
MSG.USAGE >PSTRING "Usage : NFSMOUNT [HOST | IP]/export /mountvol\n"
|
||||
LIBTCPIP >PSTRING "libtcpip.o"
|
||||
hLIBTCPIP .BS 1
|
||||
Socket .DA #S.SOCKET.SOCK.DGRAM
|
||||
.BS 3
|
||||
Socket.Src.Addr .BS 4
|
||||
Socket.Src.Port .DA 0 Dynamic
|
||||
Socket.Dst.Addr .BS 4
|
||||
Socket.Dst.Port .DA UDP.PORT.PMAP
|
||||
.BS 16
|
||||
*--------------------------------------
|
||||
.DUMMY
|
||||
.OR 0
|
||||
DS.START
|
||||
bCTRLC .BS 1
|
||||
DS.END
|
||||
.ED
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE BIN/NFSMOUNT.S
|
||||
ASM
|
|
@ -108,8 +108,6 @@ CS.RUN ldy #bCTRLC
|
|||
*--------------------------------------
|
||||
CS.DOEVENT lda (pEvent)
|
||||
|
||||
>DEBUG
|
||||
|
||||
bpl .1 is it a TIMER event?
|
||||
|
||||
ora #'T'
|
||||
|
|
|
@ -39,9 +39,6 @@ L.MSG.DETECT .DA MSG.DETECT
|
|||
Dev.Detect >LDYA L.MSG.DETECT
|
||||
>SYSCALL SYS.PSTROutYA
|
||||
|
||||
lda A2osX.SCREENS
|
||||
ora #A2osX.SCREENS.C
|
||||
sta A2osX.SCREENS
|
||||
clc
|
||||
rts
|
||||
CS.END
|
||||
|
@ -51,10 +48,11 @@ MSG.DETECT >PSTRING "Apple IIe/IIc 80 Col Driver.\n"
|
|||
*--------------------------------------
|
||||
DEV.HEADER cld
|
||||
jmp (DRV.CS.START,x)
|
||||
.HS 00 DevID
|
||||
.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
|
||||
.HS 00.00.00.00
|
||||
*--------------------------------------
|
||||
* Driver Code
|
||||
|
@ -65,6 +63,7 @@ DRV.CS.START .DA OPEN
|
|||
.DA CLOSE
|
||||
.DA GETINFO
|
||||
.DA IRQ
|
||||
.DA SELECT
|
||||
L.DEVINFO .DA DEVINFO
|
||||
*--------------------------------------
|
||||
J.CtrlChars .DA BS 8
|
||||
|
@ -92,12 +91,15 @@ OPEN stz CURON
|
|||
stz OutPtr
|
||||
stz OutCnt
|
||||
|
||||
ldy #S.DEV.ID
|
||||
lda (pDev),y
|
||||
sta A2osX.SCRNDEVS
|
||||
|
||||
jsr SELECT
|
||||
lda #1
|
||||
sta A2osX.ASCREEN
|
||||
jsr RESET
|
||||
jsr HOME
|
||||
|
||||
lda #A2osX.SCREENS.C
|
||||
>SYSCALL SYS.ScreenSelectA
|
||||
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
|
@ -110,16 +112,17 @@ GETEVENT lda A2osX.TIMER16
|
|||
.1 jsr Char.Out.Get
|
||||
bcc .7
|
||||
|
||||
lda A2osX.ASCREEN
|
||||
and #A2osX.SCREENS.C is screen active?
|
||||
beq .9
|
||||
|
||||
>SYSCALL SYS.GetKeyboardEvent
|
||||
bcs .9
|
||||
|
||||
ldy #S.EVT.DATAHI
|
||||
lda (pEvent),y
|
||||
bne .8
|
||||
|
||||
lda A2osX.ASCREEN
|
||||
cmp #1
|
||||
bne .9
|
||||
|
||||
dey
|
||||
lda (pEvent),y
|
||||
|
||||
|
@ -172,6 +175,14 @@ COUT bit bEscMode
|
|||
jsr SetCharAtXY
|
||||
jmp FSOUT
|
||||
*--------------------------------------
|
||||
SELECT sta SETTEXT
|
||||
sta SETALTCHAR
|
||||
sta SET80DISP
|
||||
sta CLR80STORE
|
||||
sta CLRPAGE2
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
COUT.Ctrl ldy #0
|
||||
ldx #0
|
||||
|
||||
|
@ -300,10 +311,7 @@ COUT.ExecEscSeq stz EscSeqParamCnt
|
|||
|
||||
.5 jmp (J.EscSequences,x)
|
||||
*--------------------------------------
|
||||
CLOSE
|
||||
* lda A2osX.SCREENS
|
||||
* and #$FF^A2osX.SCREENS.C
|
||||
* sta A2osX.SCREENS
|
||||
CLOSE stz A2osX.SCRNDEVS
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
|
@ -621,8 +629,8 @@ CUROFF lda CURON
|
|||
beq CUREXIT.RTS
|
||||
|
||||
CURBLNK lda A2osX.ASCREEN
|
||||
and #A2osX.SCREENS.C
|
||||
bne CURBLNK1
|
||||
cmp #1
|
||||
beq CURBLNK1
|
||||
|
||||
lda CURON
|
||||
bne CURBLNK.OFF
|
||||
|
|
|
@ -35,10 +35,6 @@ L.MSG.DETECT .DA MSG.DETECT
|
|||
Dev.Detect >LDYA L.MSG.DETECT
|
||||
>SYSCALL SYS.PSTROutYA
|
||||
|
||||
lda A2osX.SCREENS
|
||||
ora #A2osX.SCREENS.G
|
||||
sta A2osX.SCREENS
|
||||
|
||||
clc
|
||||
rts
|
||||
CS.END
|
||||
|
@ -48,10 +44,11 @@ MSG.DETECT >PSTRING "\nApple IIe/IIc DHGR Driver.\n"
|
|||
*--------------------------------------
|
||||
DEV.HEADER cld
|
||||
jmp (DRV.CS.START,x)
|
||||
.HS 00 DevID
|
||||
.DA #S.DEV.F.EVENT
|
||||
>PSTRING "GFX" NAME
|
||||
.HS 00 NAME must Be 5 bytes long
|
||||
.HS 00.00
|
||||
.HS 00
|
||||
.HS 00.00.00.00
|
||||
*--------------------------------------
|
||||
* Driver Code
|
||||
|
@ -62,6 +59,7 @@ DRV.CS.START .DA OPEN
|
|||
.DA CLOSE
|
||||
.DA GETINFO
|
||||
.DA IRQ
|
||||
.DA SELECT
|
||||
.DA SETPIXEL
|
||||
.DA GETPIXEL
|
||||
.DA HLINE
|
||||
|
@ -71,47 +69,24 @@ DRV.CS.START .DA OPEN
|
|||
L.DEVINFO .DA DEVINFO
|
||||
.DA 0 end or relocation
|
||||
*--------------------------------------
|
||||
OPEN lda #A2osX.SCREENS.G
|
||||
>SYSCALL SYS.ScreenSelectA
|
||||
|
||||
ldx #192
|
||||
OPEN ldy #S.DEV.ID
|
||||
lda (pDev),y
|
||||
sta A2osX.SCRNDEVS+2
|
||||
|
||||
.81 dex
|
||||
|
||||
lda BASEL,x
|
||||
sta ZPBASE
|
||||
lda BASEH,x
|
||||
sta ZPBASE+1
|
||||
|
||||
* lda #$55
|
||||
lda #$00
|
||||
|
||||
ldy #39
|
||||
sta SETWRITEAUX
|
||||
.82 sta (ZPBASE),y
|
||||
dey
|
||||
bpl .82
|
||||
|
||||
* lda #$2A
|
||||
lda #$00
|
||||
|
||||
ldy #39
|
||||
sta CLRWRITEAUX
|
||||
.83 sta (ZPBASE),y
|
||||
dey
|
||||
bpl .83
|
||||
jsr SELECT
|
||||
lda #3
|
||||
sta A2osX.ASCREEN
|
||||
|
||||
txa
|
||||
bne .81
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
GETEVENT lda A2osX.ASCREEN
|
||||
and #A2osX.SCREENS.G is screen active?
|
||||
beq .9
|
||||
cmp #3
|
||||
bne .9
|
||||
|
||||
>SYSCALL SYS.GetKeyboardEvent
|
||||
bcs .9
|
||||
|
||||
rts
|
||||
|
||||
.9 lda #0 Error = no event
|
||||
|
@ -129,6 +104,24 @@ GETINFO >LDYA L.DEVINFO
|
|||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
SELECT sta CLRTEXT
|
||||
sta CLRMIXED
|
||||
sta SETHIRES
|
||||
sta CLR80STORE
|
||||
sta CLRPAGE2
|
||||
sta SETIOUDIS
|
||||
sta SETDHIRES
|
||||
|
||||
* sta CLR80DISP
|
||||
* sta SETDHIRES
|
||||
* sta CLRDHIRES
|
||||
* sta SET80DISP
|
||||
* sta SETDHIRES
|
||||
* sta CLRDHIRES
|
||||
* sta SETDHIRES
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
* SETPIXEL
|
||||
* PULLB = Mode
|
||||
* 00000001=B/W
|
||||
|
@ -162,6 +155,7 @@ SETPIXEL.XOR >PULLYA Y=X.LO,A=X.HI
|
|||
|
||||
.3 lsr
|
||||
tay
|
||||
sta CLRPAGE2
|
||||
bcs .4 odd=main ram
|
||||
sta SETPAGE2
|
||||
|
||||
|
|
|
@ -117,14 +117,18 @@ CS.END
|
|||
MSG.DETECT >PSTRING "Apple Mouse Card/IIc Mouse Driver.\n"
|
||||
MSG.DETECT.OK >PSTRING "Mouse Installed As Device : "
|
||||
MSG.DETECT.KO >PSTRING "No Mouse Found.\n"
|
||||
DEVSIG.Offset .HS 05070B0CFB
|
||||
DEVSIG.Value .HS 38180120D6
|
||||
DEVSIG.Length .EQ DEVSIG.Value-DEVSIG.Offset
|
||||
*--------------------------------------
|
||||
* Device Header (16 Bytes)
|
||||
*--------------------------------------
|
||||
DEV.HEADER cld
|
||||
jmp (DRV.CS.START,x)
|
||||
.HS 00 DevID
|
||||
.DA #S.DEV.F.EVENT
|
||||
DEV.HEADER.NAME >PSTRING "MOU1" NAME
|
||||
.HS 00.00
|
||||
.HS 00
|
||||
.HS 00.00.00.00
|
||||
*--------------------------------------
|
||||
* Driver Code
|
||||
|
@ -135,6 +139,7 @@ DRV.CS.START .DA OPEN
|
|||
.DA CLOSE
|
||||
.DA GETINFO
|
||||
.DA IRQ
|
||||
.DA SELECT
|
||||
L.DEVINFO .DA DEVINFO
|
||||
.DA 0 end or relocation
|
||||
*--------------------------------------
|
||||
|
@ -181,8 +186,8 @@ OPEN
|
|||
rts
|
||||
*--------------------------------------
|
||||
GETEVENT lda A2osX.ASCREEN
|
||||
and #A2osX.SCREENS.G is screen active?
|
||||
beq .9
|
||||
cmp #3 is DHGR screen active?
|
||||
bne .9
|
||||
|
||||
php
|
||||
sei
|
||||
|
@ -245,7 +250,9 @@ GETEVENT lda A2osX.ASCREEN
|
|||
rts
|
||||
*--------------------------------------
|
||||
COUT
|
||||
IRQ sec
|
||||
IRQ
|
||||
SELECT lda #DEVMGR.ERRUNSUP
|
||||
sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
CLOSE php
|
||||
|
@ -272,9 +279,6 @@ GOMOUSE pha
|
|||
jmp (ZPGoMouse)
|
||||
*--------------------------------------
|
||||
DRV.CS.END
|
||||
DEVSIG.Offset .HS 05070B0CFB
|
||||
DEVSIG.Value .HS 38180120D6
|
||||
DEVSIG.Length .EQ DEVSIG.Value-DEVSIG.Offset
|
||||
DEVSLOT0n .BS 1
|
||||
DEVSLOTn0 .BS 1
|
||||
DEVSLOTCn .BS 1
|
||||
|
|
|
@ -41,10 +41,10 @@ W5100.AR.RCR .EQ $0019
|
|||
W5100.AR.RMSR .EQ $001A
|
||||
W5100.AR.TMSR .EQ $001B
|
||||
W5100.AR.PATR .EQ $001C
|
||||
W5100.AR.PTIMER .EQ $0028
|
||||
W5100.AR.PMAGIC .EQ $0029
|
||||
W5100.AR.UIPR .EQ $002A
|
||||
W5100.AR.UPORT .EQ $002E
|
||||
*W5100.AR.PTIMER .EQ $0028
|
||||
*W5100.AR.PMAGIC .EQ $0029
|
||||
*W5100.AR.UIPR .EQ $002A
|
||||
*W5100.AR.UPORT .EQ $002E
|
||||
W5100.AR.S0.MR .EQ $0400
|
||||
W5100.AR.S0.MR.MULTI .EQ $80
|
||||
W5100.AR.S0.MR.MF .EQ $40
|
||||
|
@ -183,9 +183,10 @@ hArgs .BS 1
|
|||
*--------------------------------------
|
||||
DEV.HEADER cld
|
||||
jmp (DRV.CS.START,x)
|
||||
.HS 00
|
||||
.DA #S.DEV.F.SHARE+S.DEV.F.EVENT
|
||||
DEV.HEADER.NAME >PSTRING "ETH1" NAME
|
||||
.HS 00.00
|
||||
.HS 00
|
||||
.HS 00.00.00.00
|
||||
*--------------------------------------
|
||||
* Driver Code
|
||||
|
|
|
@ -43,14 +43,14 @@ PP.RxCTL.ExtradataA .EQ %01000000.00000000
|
|||
PP.TxCFG .EQ $0106 Transmit Configuration (RW)
|
||||
PP.TxCMD .EQ $0108 Receiver Control (RW)
|
||||
PP.TxCMD.LID .EQ %00000000.00001001
|
||||
PP.TxCMD.TxStart5 .EQ %00000000.00000000
|
||||
PP.TxCMD.TxStart381 .EQ %00000000.01000000
|
||||
PP.TxCMD.TxStart1021 .EQ %00000000.10000000
|
||||
*PP.TxCMD.TxStart5 .EQ %00000000.00000000
|
||||
*PP.TxCMD.TxStart381 .EQ %00000000.01000000
|
||||
*PP.TxCMD.TxStart1021 .EQ %00000000.10000000
|
||||
PP.TxCMD.TxStartFULL .EQ %00000000.11000000
|
||||
PP.TxCMD.Force .EQ %00000001.00000000
|
||||
PP.TxCMD.OneColl .EQ %00000010.00000000
|
||||
PP.TxCMD.InhibitCRC .EQ %00010000.00000000
|
||||
PP.TxCMD.TxPadDis .EQ %00100000.00000000
|
||||
*PP.TxCMD.Force .EQ %00000001.00000000
|
||||
*PP.TxCMD.OneColl .EQ %00000010.00000000
|
||||
*PP.TxCMD.InhibitCRC .EQ %00010000.00000000
|
||||
*PP.TxCMD.TxPadDis .EQ %00100000.00000000
|
||||
PP.BufCFG .EQ $010A
|
||||
PP.LineCTL .EQ $0112 Line Control (RW)
|
||||
PP.LineCTL.LID .EQ %00000000.00010011
|
||||
|
@ -200,9 +200,10 @@ hArgs .BS 1
|
|||
*--------------------------------------
|
||||
DEV.HEADER cld
|
||||
jmp (DRV.CS.START,x)
|
||||
.HS 00
|
||||
.DA #S.DEV.F.SHARE+S.DEV.F.EVENT
|
||||
DEV.HEADER.NAME >PSTRING "ETH1" NAME
|
||||
.HS 00.00
|
||||
.HS 00
|
||||
.HS 00.00.00.00
|
||||
*--------------------------------------
|
||||
* Driver Code
|
||||
|
@ -241,7 +242,6 @@ OPEN jsr Reset
|
|||
>STYA PacketPagePTR,x
|
||||
>LDYAI PP.LineCTL.LID+PP.LineCTL.SerRxOn+PP.LineCTL.SerTxOn+PP.LineCTL.Auto
|
||||
>STYA PacketPageDATA,x
|
||||
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
|
@ -252,7 +252,6 @@ GETEVENT ldx DEVSLOTx0
|
|||
and /PP.RxEvent.RxOK+PP.RxEvent.Brdcast+PP.RxEvent.IA
|
||||
bne GETEVENT.RxOK
|
||||
lda #ERR.DEV.NOFRAME
|
||||
|
||||
COUT
|
||||
IRQ
|
||||
SETIPCFG
|
||||
|
@ -443,18 +442,15 @@ Reset ldx DEVSLOTx0
|
|||
>LDYAI PP.SelfCTL.LID+PP.SelfCTL.RESET
|
||||
>STYA PacketPageDATA,x
|
||||
rts
|
||||
*--------------------------------------
|
||||
DRV.CS.END
|
||||
*--------------------------------------
|
||||
DEVSLOTx0 .BS 1
|
||||
Size .BS 2
|
||||
Counter .BS 2
|
||||
*--------------------------------------
|
||||
DEVINFO .DA #S.DEVINFO.TYPE.NET
|
||||
DEVFLAGS .DA #0
|
||||
MAC .BS 6
|
||||
LINK.STATUS .BS 1 OK/DUPLEX/SPEED
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE DRV/UTHERNET.DRV.S
|
||||
ASM
|
||||
|
|
|
@ -183,9 +183,10 @@ hArgs .BS 1
|
|||
*--------------------------------------
|
||||
DEV.HEADER cld
|
||||
jmp (DRV.CS.START,x)
|
||||
.HS 00
|
||||
.DA #S.DEV.F.SHARE+S.DEV.F.EVENT
|
||||
DEV.HEADER.NAME >PSTRING "ETH1" NAME
|
||||
.HS 00.00
|
||||
.HS 00
|
||||
.HS 00.00.00.00
|
||||
*--------------------------------------
|
||||
* Driver Code
|
||||
|
|
|
@ -113,30 +113,26 @@ pLibJmp .EQ $BE16
|
|||
*--------------------------------------
|
||||
MLICALL.PARAMS .EQ $BEC0
|
||||
*--------------------------------------
|
||||
* $BEE0->$BEFF : Public Variables
|
||||
* $BEE0->$BEEF : Public Variables
|
||||
*--------------------------------------
|
||||
A2osX.SCREENS .EQ $BEE0
|
||||
A2osX.SCREENS.S .EQ %00000001 System Screen
|
||||
A2osX.SCREENS.C .EQ %00000010 Console Screen
|
||||
A2osX.SCREENS.G .EQ %00000100 Graphic Screen
|
||||
A2osX.SCREENS.2 .EQ %00001000 Graphic Screen2
|
||||
A2osX.ASCREEN .EQ $BEE1 Active Screen
|
||||
A2osX.ASCREEN .EQ $BEE0 Active Screen
|
||||
A2osX.SCRNDEVS .EQ $BEE1 -> $BEE4 (4 devices)
|
||||
|
||||
A2osX.SCRNDEVS .EQ $BEE2 -> $BEE5 (4 devices)
|
||||
A2osX.CPUTYPE .EQ $BEE6
|
||||
A2osX.CPUSPEED .EQ $BEE7 (->255.99 Mhz)
|
||||
|
||||
A2osX.Z80SLOT .EQ $BEEA
|
||||
|
||||
A2osX.HZ .EQ $BEEB
|
||||
|
||||
A2osX.TIMER16 .EQ $BEEC
|
||||
A2osX.RANDOM16 .EQ $BEEE
|
||||
*--------------------------------------
|
||||
* $BEF0->$BEFF : Kernel Config Block
|
||||
*--------------------------------------
|
||||
A2osX.HZ .EQ $BEF0
|
||||
*--------------------------------------
|
||||
* Kernel Entry Point
|
||||
*--------------------------------------
|
||||
KERNEL.SYSCALL .EQ $D000
|
||||
KERNEL.COLDBOOT .EQ $D100
|
||||
KERNEL.SYSCALL .EQ $E000
|
||||
*--------------------------------------
|
||||
H.BIN.HEADER .EQ 0
|
||||
H.BIN.HEADER.DRV65 .EQ $4CD8 6502:cld,jmp abs
|
||||
|
@ -161,8 +157,10 @@ SYS.FreeMemA .EQ $02
|
|||
SYS.GetMemPtrA .EQ $04
|
||||
SYS.GetMemByIDA .EQ $06
|
||||
|
||||
SYS.GetMemByNameA .EQ $08
|
||||
SYS.GetMemByNameYA .EQ $0A
|
||||
SYS.GetMemByNameYA .EQ $08
|
||||
SYS.LoadStockObjectYA .EQ $0A
|
||||
SYS.GetStockObjectA .EQ $0C
|
||||
SYS.FreeStockObject .EQ $0E
|
||||
*--------------------------------------
|
||||
SYS.NewPStrYA .EQ $10
|
||||
SYS.PStrCpyA .EQ $12
|
||||
|
@ -174,14 +172,14 @@ SYS.PStrGetTkn .EQ $18
|
|||
SYS.GetArgCount .EQ $1C
|
||||
SYS.GetArgA .EQ $1E
|
||||
*--------------------------------------
|
||||
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.GetEnvVarA .EQ $34
|
||||
SYS.PutEnvYA .EQ $34
|
||||
SYS.GetEnvVarYA .EQ $36
|
||||
|
||||
SYS.SetEnvVarH .EQ $38
|
||||
|
@ -190,23 +188,21 @@ SYS.DelEnvVarA .EQ $3C
|
|||
SYS.DelEnvVarYA .EQ $3E
|
||||
*--------------------------------------
|
||||
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
|
||||
|
@ -230,7 +226,7 @@ SYS.MLIReadBlock .EQ $7C
|
|||
SYS.MLIWriteBlock .EQ $7E
|
||||
*--------------------------------------
|
||||
SYS.GetDevByIDA .EQ $80
|
||||
SYS.GetDevByNameA .EQ $82
|
||||
|
||||
SYS.GetDevByNameYA .EQ $84
|
||||
SYS.GetDevInfoA .EQ $86
|
||||
|
||||
|
@ -247,7 +243,7 @@ SYS.Sleep .EQ $9C
|
|||
*--------------------------------------
|
||||
SYS.CheckPrefixA .EQ $A0
|
||||
SYS.FileSearch .EQ $A2
|
||||
SYS.LoadFileA .EQ $A4
|
||||
|
||||
SYS.LoadFileYA .EQ $A6
|
||||
|
||||
SYS.ListDirInitA .EQ $A8
|
||||
|
@ -260,16 +256,41 @@ SYS.SetNetCfg .EQ $B2
|
|||
SYS.GetNetCfgA .EQ $B4
|
||||
SYS.ClrNetCfgA .EQ $B6
|
||||
*--------------------------------------
|
||||
SYS.ScreenSelectA .EQ $C0
|
||||
*SYS.ScreenSelectA .EQ $C0
|
||||
*--------------------------------------
|
||||
SYS.COutA .EQ $D0
|
||||
SYS.PSTROutA .EQ $D2
|
||||
|
||||
SYS.PSTROutYA .EQ $D4
|
||||
|
||||
SYS.HexOutA .EQ $D8
|
||||
SYS.HexOutYA .EQ $DA
|
||||
SYS.DecOutA .EQ $DC
|
||||
SYS.DecOutYA .EQ $DE
|
||||
|
||||
*SYS.FGETC .EQ $F0
|
||||
*SYS.FGETS .EQ $F2
|
||||
*SYS.FPUTC .EQ $F4
|
||||
*SYS.FPUTS .EQ $F6
|
||||
*--------------------------------------
|
||||
SYS.FOPEN .EQ $E0
|
||||
SYS.FCLOSE .EQ $E2
|
||||
SYS.FREAD .EQ $E4
|
||||
SYS.FWRITE .EQ $E6
|
||||
|
||||
SYS.FFLUSH .EQ $E8
|
||||
SYS.FSEEK .EQ $EA
|
||||
SYS.FTELL .EQ $EC
|
||||
SYS.FEOF .EQ $EE
|
||||
|
||||
SYS.REMOVE .EQ $F0
|
||||
SYS.RENAME .EQ $F2
|
||||
SYS.OPENDIR .EQ $F4
|
||||
SYS.READDIR .EQ $F6
|
||||
|
||||
SYS.CLOSEDIR .EQ $F8
|
||||
SYS.MKDIR .EQ $FA
|
||||
SYS.MKNOD .EQ $FC
|
||||
SYS.MKFIFO .EQ $FE
|
||||
*--------------------------------------
|
||||
S.FINFO.ACCESS .EQ $00
|
||||
S.FINFO.TYPE .EQ $01
|
||||
|
@ -324,6 +345,7 @@ DEVMGR.ERROOH .EQ $EE Out Of Handle Error
|
|||
DEVMGR.ERRICL .EQ $ED Invalid Command Line
|
||||
DEVMGR.ERRNOHW .EQ $EC No Hardware
|
||||
DEVMGR.ERRDNF .EQ $EB Device Not Found Error
|
||||
DEVMGR.ERRUNSUP .EQ $EA Unsupported Function
|
||||
*--------------------------------------
|
||||
TSKMGR.ERROOH .EQ $DF Out Of Handle Error
|
||||
TSKMGR.ERRNSP .EQ $DD No Such Process Error
|
||||
|
@ -353,9 +375,10 @@ S.MEM.SIZE .EQ 8
|
|||
*--------------------------------------
|
||||
* DEV STRUCT
|
||||
*--------------------------------------
|
||||
S.DEV.CODE .EQ 0
|
||||
S.DEV.JMP .EQ 2
|
||||
S.DEV.F .EQ 4
|
||||
S.DEV.CODE .EQ 0 cld,jmp...
|
||||
S.DEV.JMP .EQ 2 ...(code,x)
|
||||
S.DEV.ID .EQ 4
|
||||
S.DEV.F .EQ 5
|
||||
S.DEV.F.INUSE .EQ %10000000
|
||||
S.DEV.F.BUSY .EQ %01000000
|
||||
S.DEV.F.SHARE .EQ %00100000 Device is shareable
|
||||
|
@ -364,7 +387,7 @@ 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.NAME .EQ 6 5 Bytes : LEN+NUL KBD CON COMx LPTx ETHx
|
||||
*
|
||||
S.DEV.SIZE .EQ 16
|
||||
*--------------------------------------
|
||||
|
@ -393,9 +416,7 @@ DEVMGR.CLOSE .EQ 6
|
|||
DEVMGR.GETINFO .EQ 8
|
||||
DEVMGR.IRQ .EQ 10
|
||||
*--------------------------------------
|
||||
* 'XY' Class Driver Functions
|
||||
*--------------------------------------
|
||||
DEVMGR.XY.SETPOS .EQ 12
|
||||
DEVMGR.SELECT .EQ 12
|
||||
*--------------------------------------
|
||||
* 'NET' Class Driver Functions
|
||||
*--------------------------------------
|
||||
|
@ -404,11 +425,11 @@ DEVMGR.SETIPCFG .EQ 14
|
|||
*--------------------------------------
|
||||
* '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
|
||||
DEVMGR.GFX.SETPIXEL .EQ 14
|
||||
DEVMGR.GFX.GETPIXEL .EQ 16
|
||||
DEVMGR.GFX.HLINE .EQ 18
|
||||
DEVMGR.GFX.VLINE .EQ 20
|
||||
DEVMGR.GFX.BITBLT .EQ 22
|
||||
*--------------------------------------
|
||||
* PS STRUCT
|
||||
*--------------------------------------
|
||||
|
|
|
@ -121,27 +121,27 @@ TCP.IN.LISTEN.NEW
|
|||
|
||||
phy
|
||||
pha
|
||||
|
||||
ldy #S.SOCKET.STATUS
|
||||
lda #S.SOCKET.STATUS.SYNRCVD
|
||||
sta (ZPPtrSKT),y
|
||||
|
||||
txa
|
||||
ldy #S.SOCKET.PARENT
|
||||
sta (ZPPtrSKT),y
|
||||
|
||||
jsr SKT.AddToQueueL
|
||||
|
||||
pla
|
||||
sta ZPPtrSKT+1
|
||||
pla
|
||||
sta ZPPtrSKT
|
||||
|
||||
jsr TCP.SendSYNACK
|
||||
bcc .3
|
||||
|
||||
|
||||
|
||||
|
||||
clc
|
||||
lda #0 error
|
||||
sta (ZPPtrSKT) clear this socket
|
||||
lda #ERR.SKT.OOS
|
||||
.9 rts
|
||||
|
||||
.3 ldy #S.SOCKET.STATUS
|
||||
lda #S.SOCKET.STATUS.SYNRCVD
|
||||
sta (ZPPtrSKT),y
|
||||
|
||||
jmp TCP.SendSYNACK
|
||||
*--------------------------------------
|
||||
TCP.IN.ESTABLISHED
|
||||
stx hSocket
|
||||
|
@ -204,13 +204,6 @@ TCP.IN.ESTABLISHED
|
|||
ldy #S.SOCKET.SQ.hOutMem
|
||||
sta (ZPPtrSKT),y
|
||||
|
||||
ldy #S.SOCKET.PARENT
|
||||
lda (ZPPtrSKT),y
|
||||
jsr SKT.GetA
|
||||
|
||||
lda hSocket
|
||||
jsr SKT.AddToQueueL
|
||||
|
||||
.8 clc
|
||||
rts
|
||||
|
||||
|
|
|
@ -31,16 +31,20 @@ CS.START cld
|
|||
.DA CS.QUIT
|
||||
L.DEVNAME.GFX .DA DEVNAME.GFX
|
||||
L.DEVNAME.MOUSE .DA DEVNAME.MOUSE
|
||||
L.MSG.INIT .DA MSG.INIT
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
CS.INIT >LDYA L.DEVNAME.GFX
|
||||
CS.INIT >LDYA L.MSG.INIT
|
||||
>SYSCALL SYS.PSTROutYA
|
||||
|
||||
>LDYA L.DEVNAME.GFX
|
||||
>SYSCALL SYS.GetDevByNameYA
|
||||
bcc .10
|
||||
rts
|
||||
|
||||
.10 stx hDevGFX
|
||||
>STYA pDevGFX
|
||||
|
||||
|
||||
.11 >LDYA L.DEVNAME.MOUSE
|
||||
>SYSCALL SYS.GetDevByNameYA
|
||||
bcc .20
|
||||
|
@ -54,17 +58,27 @@ CS.INIT >LDYA L.DEVNAME.GFX
|
|||
|
||||
.20 stx hDevMouse
|
||||
>STYA pDevMouse
|
||||
|
||||
|
||||
ldx #DEVMGR.OPEN
|
||||
jsr GoDevMouse
|
||||
bcs *
|
||||
|
||||
lda pDev
|
||||
pha
|
||||
lda pDev+1
|
||||
pha
|
||||
|
||||
lda pDevGFX
|
||||
sta pDev
|
||||
lda pDevGFX+1
|
||||
sta pDev+1
|
||||
|
||||
ldx #DEVMGR.OPEN
|
||||
jsr GoDevGFX
|
||||
bcs *
|
||||
|
||||
lda #A2osX.SCREENS.G
|
||||
>SYSCALL SYS.ScreenSelectA
|
||||
|
||||
pla
|
||||
sta pDev+1
|
||||
pla
|
||||
sta pDev
|
||||
|
||||
* jmp .8
|
||||
|
||||
|
@ -108,8 +122,10 @@ CS.INIT >LDYA L.DEVNAME.GFX
|
|||
beq .8
|
||||
and #$7
|
||||
bne .1
|
||||
|
||||
dec C
|
||||
bpl .1
|
||||
|
||||
lda #15
|
||||
sta C
|
||||
bra .1
|
||||
|
@ -153,7 +169,7 @@ CS.DOEVENT ldy #S.EVT.hDEV
|
|||
lda (pEvent),y
|
||||
>PUSHA X.LO
|
||||
|
||||
>PUSHBI 2 Mode:1=B/W,2=16 colors,...,128=XOR
|
||||
>PUSHBI 128 Mode:1=B/W,2=16 colors,...,128=XOR
|
||||
ldx #DEVMGR.GFX.SETPIXEL
|
||||
jsr GoDevGFX
|
||||
|
||||
|
@ -172,6 +188,7 @@ GoDevMouse jmp (pDevMouse)
|
|||
CS.END
|
||||
DEVNAME.GFX >PSTRING "GFX"
|
||||
DEVNAME.MOUSE >PSTRING "MOU1"
|
||||
MSG.INIT >PSTRING "DESKTOP:Init...\n"
|
||||
hDevGFX .BS 1
|
||||
pDevGFX .BS 2
|
||||
hDevMouse .BS 1
|
||||
|
|
|
@ -52,10 +52,12 @@ CS.INIT ldy #S.PS.hARGS
|
|||
bcs .99
|
||||
|
||||
sta hDEVNAME
|
||||
>SYSCALL SYS.GetDevByNameA
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>SYSCALL SYS.GetDevByNameYA
|
||||
bcs .98
|
||||
|
||||
>STYA pDev
|
||||
|
||||
txa
|
||||
ldy #S.PS.hINDEV
|
||||
sta (pPs),y
|
||||
|
@ -67,20 +69,22 @@ CS.INIT ldy #S.PS.hARGS
|
|||
lda hDEVNAME
|
||||
>SYSCALL SYS.FreeMemA
|
||||
|
||||
ldx #DEVMGR.OPEN
|
||||
jsr pDevJmp
|
||||
bcs .99
|
||||
|
||||
ldy #S.PS.hARGS
|
||||
lda (pPs),y
|
||||
>PUSHA
|
||||
>PUSHBI $20 Push SEP=' '
|
||||
>PUSHBI 2 Push 3 for getting BIN
|
||||
>PUSHBI 2 Push 2 for getting BIN
|
||||
>SYSCALL SYS.PStrGetTkn
|
||||
bcs .99
|
||||
|
||||
ldy #hBinName
|
||||
sta (pData),y
|
||||
|
||||
ldx #DEVMGR.OPEN
|
||||
jsr pDevJmp if error CS, else...
|
||||
rts ...Tell TskMgr To stay in memory
|
||||
clc
|
||||
rts
|
||||
|
||||
.98 pha
|
||||
lda hDEVNAME
|
||||
|
@ -89,25 +93,23 @@ CS.INIT ldy #S.PS.hARGS
|
|||
sec
|
||||
.99 rts
|
||||
*--------------------------------------
|
||||
CS.RUN lda #12 try send a FF...
|
||||
CS.RUN lda #13 try send a CR...
|
||||
>SYSCALL SYS.COutA Device Is Ready ?
|
||||
|
||||
bcs .8 no..loop...
|
||||
|
||||
.1 >LDYA L.MSG.GREETINGS
|
||||
|
||||
lda pDev
|
||||
clc
|
||||
adc #S.DEV.NAME
|
||||
tay
|
||||
lda pDev+1
|
||||
adc /S.DEV.NAME
|
||||
>PUSHYA
|
||||
>LDYA L.MSG.GREETINGS
|
||||
>SYSCALL SYS.PSTROutYA
|
||||
|
||||
bcs .8 unable to send greetings...loop..
|
||||
|
||||
ldy #S.PS.hOUTDEV
|
||||
lda (pPs),y
|
||||
>SYSCALL SYS.HexOutA
|
||||
bcs .8
|
||||
|
||||
lda #13
|
||||
>SYSCALL SYS.COutA
|
||||
bcs .8
|
||||
|
||||
ldy #hBinName
|
||||
lda (pData),y
|
||||
ldy #0
|
||||
|
@ -125,14 +127,14 @@ CS.QUIT ldy #hBinName
|
|||
>SYSCALL SYS.FreeMemA
|
||||
|
||||
ldx #DEVMGR.CLOSE
|
||||
jsr pDevJmp
|
||||
* jsr pDevJmp
|
||||
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.END
|
||||
MSG.USAGE >PSTRING "GETTY <DEV> <PROGRAM>"
|
||||
MSG.GREETINGS >PSTRING "\e[12h\nA2osX-GeTTY on Dev="
|
||||
MSG.GREETINGS >PSTRING "\e[12h\nA2osX-GeTTY on Dev=%S\n"
|
||||
hDEVNAME .BS 1
|
||||
*--------------------------------------
|
||||
.DUMMY
|
||||
|
|
|
@ -43,8 +43,7 @@ CS.INIT ldy #S.PS.hARGS
|
|||
>SYSCALL SYS.PSTROutYA
|
||||
bra .8
|
||||
|
||||
.1 sta hArgs
|
||||
>SYSCALL SYS.LoadDrvA
|
||||
.1 >SYSCALL SYS.LoadDrvA
|
||||
|
||||
bcs .9
|
||||
|
||||
|
@ -60,7 +59,6 @@ CS.QUIT clc
|
|||
*--------------------------------------
|
||||
CS.END
|
||||
MSG.HELP >PSTRING "Usage: insdrv </path/drv/>file.drv <args>\n"
|
||||
hArgs .BS 1
|
||||
MAN
|
||||
SAVE SBIN/INSDRV.S
|
||||
ASM
|
||||
|
|
|
@ -120,7 +120,8 @@ EXEC.CMD.EXT ldy #1
|
|||
.10 bcs .9
|
||||
|
||||
sta hFullCmd
|
||||
>SYSCALL SYS.MLIGetFileInfoA
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>SYSCALL SYS.MLIGetFileInfoYA
|
||||
bcs .9
|
||||
|
||||
>STYA ZPPTR1
|
||||
|
@ -170,7 +171,8 @@ EXEC.CMD.CD lda hExecArgs
|
|||
bne EXEC.CMD.CD.C
|
||||
ldy #S.PS.hPREFIX
|
||||
lda (pPs),y
|
||||
>SYSCALL SYS.PSTROutA
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>SYSCALL SYS.PSTROutYA
|
||||
lda #13
|
||||
>SYSCALL SYS.COutA
|
||||
clc
|
||||
|
@ -342,16 +344,19 @@ EXEC.CMD.SETVAR >PUSHA Push Cmd Line
|
|||
bra .97
|
||||
|
||||
.4 lda hVarName
|
||||
>SYSCALL SYS.GetEnvVarA
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>SYSCALL SYS.GetEnvVarYA
|
||||
bcs .97
|
||||
sta hVarValue
|
||||
|
||||
lda hVarName
|
||||
>SYSCALL SYS.PSTROutA
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>SYSCALL SYS.PSTROutYA
|
||||
lda #'='
|
||||
>SYSCALL SYS.COutA
|
||||
lda hVarValue
|
||||
>SYSCALL SYS.PSTROutA
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>SYSCALL SYS.PSTROutYA
|
||||
lda #13
|
||||
>SYSCALL SYS.COutA
|
||||
|
||||
|
@ -392,7 +397,8 @@ EXEC.CMD.ECHO lda hExecArgs
|
|||
bcs .99
|
||||
|
||||
pha
|
||||
>SYSCALL SYS.PSTROutA
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>SYSCALL SYS.PSTROutYA
|
||||
lda #13
|
||||
>SYSCALL SYS.COutA
|
||||
pla
|
||||
|
@ -406,7 +412,8 @@ EXEC.CMD.ECHO lda hExecArgs
|
|||
*--------------------------------------
|
||||
EXEC.CMD.TYPE lda hExecArgs
|
||||
beq .98
|
||||
>SYSCALL SYS.LoadFileA
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>SYSCALL SYS.LoadFileYA
|
||||
bcs .99
|
||||
|
||||
>STYA ZPPTR2 store file len
|
||||
|
|
|
@ -378,7 +378,8 @@ CmdBuffer.DEL lda (pData)
|
|||
sta (pData)
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
OpenTxtFileA >SYSCALL SYS.MLIOpenA
|
||||
OpenTxtFileA >SYSCALL SYS.GetMemPtrA
|
||||
>SYSCALL SYS.MLIOpenYA
|
||||
bcs .9
|
||||
|
||||
ldy #hInputFile
|
||||
|
|
|
@ -30,8 +30,8 @@ S.LoadBinA sta S.LoadBinA.hFilename save file path
|
|||
.2 dey
|
||||
bne .1
|
||||
|
||||
lda S.LoadBinA.hFilename
|
||||
jsr S.GetMemByNameA
|
||||
>LDYA ZPQuickPtr1
|
||||
jsr S.GetMemByNameYA
|
||||
bcs .3 not already loaded
|
||||
|
||||
>STYA ZPQuickPtr1 Save base address
|
||||
|
@ -49,8 +49,8 @@ S.LoadBinA sta S.LoadBinA.hFilename save file path
|
|||
clc
|
||||
rts
|
||||
|
||||
.3 lda S.LoadBinA.hFilename
|
||||
jsr S.LoadFileA
|
||||
.3 >LDYA ZPQuickPtr1
|
||||
jsr S.LoadFileYA
|
||||
bcc .4
|
||||
rts Error Loading file
|
||||
|
||||
|
@ -68,7 +68,8 @@ S.LoadBinA sta S.LoadBinA.hFilename save file path
|
|||
sta R.AH
|
||||
|
||||
lda S.LoadBinA.hFilename
|
||||
jsr S.MLIGetFileInfoA Get File Info for AUXTYPE
|
||||
jsr S.GetMemPtrA
|
||||
jsr S.MLIGetFileInfoYA Get File Info for AUXTYPE
|
||||
bcs .98
|
||||
|
||||
>STYA ZPQuickPtr2
|
||||
|
|
|
@ -117,7 +117,6 @@ S.COutA.RTS rts
|
|||
* \e : ESC
|
||||
* \n : CR
|
||||
*--------------------------------------
|
||||
S.PSTROutA jsr S.GetMemPtrA
|
||||
S.PSTROutYA >STYA ZPQuickPtr1
|
||||
|
||||
ldy #0
|
||||
|
|
|
@ -0,0 +1,200 @@
|
|||
PR#3
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
*--------------------------------------
|
||||
CPU.Init >LDAXI MSG.CPU
|
||||
jsr PrintCStrAX
|
||||
|
||||
jsr Detect6502 A = CPU type
|
||||
sta A2osX.CPUTYPE
|
||||
lda MSG.CPUTYPEH,y
|
||||
tax
|
||||
lda MSG.CPUTYPEL,y
|
||||
jsr PrintCStrAX
|
||||
|
||||
CPU.Init.Speed lda MACHID
|
||||
and #MACHID.TYPE
|
||||
cmp #MACHID.TYPE.IIc
|
||||
beq CPU.Init.Z80
|
||||
|
||||
>LDAXI MSG.CPU.SPEED
|
||||
jsr PrintCStrAX
|
||||
|
||||
stz A2osX.RANDOM16
|
||||
stz A2osX.RANDOM16+1
|
||||
|
||||
php
|
||||
sei
|
||||
|
||||
.1 bit VBL
|
||||
bpl .2
|
||||
|
||||
.2 bit VBL
|
||||
bmi .2
|
||||
|
||||
ldx #0 Count LO
|
||||
lda #0 Count HI
|
||||
|
||||
.3 ldy #3 (2)
|
||||
|
||||
.4 nop (2)
|
||||
dey (2)
|
||||
bne .4 (2*)
|
||||
|
||||
inc A2osX.RANDOM16 (6)
|
||||
bne .5 (2*)
|
||||
|
||||
inc A2osX.RANDOM16+1 (6)
|
||||
bit VBL (4)
|
||||
bpl .3 (2*)
|
||||
bmi .6
|
||||
|
||||
.5 nop (2)
|
||||
nop (2)
|
||||
nop (2)
|
||||
bit VBL (4)
|
||||
bpl .3 (2*)
|
||||
|
||||
.6 plp
|
||||
|
||||
stz A2osX.CPUSPEED
|
||||
|
||||
.7 sec
|
||||
lda A2osX.RANDOM16
|
||||
sbc #100
|
||||
tax
|
||||
lda A2osX.RANDOM16+1
|
||||
sbc /100
|
||||
bcc .8
|
||||
|
||||
stx A2osX.RANDOM16
|
||||
sta A2osX.RANDOM16+1
|
||||
inc A2osX.CPUSPEED
|
||||
bra .7
|
||||
|
||||
.8 lda A2osX.RANDOM16
|
||||
sta A2osX.CPUSPEED+1
|
||||
pha push CPU speed LO
|
||||
lda A2osX.CPUSPEED
|
||||
pha push CPU speed HI
|
||||
>LDAXI MSG.CPU.SPEEDOK
|
||||
jsr PrintCStrAX
|
||||
|
||||
CPU.Init.Z80 >LDAXI MSG.Z80
|
||||
jsr PrintCStrAX
|
||||
jsr DetectZ80
|
||||
bcs .9
|
||||
sta A2osX.Z80SLOT
|
||||
pha Push Z80Slot
|
||||
|
||||
>LDAXI MSG.Z80.OK
|
||||
jsr PrintCStrAX
|
||||
rts
|
||||
|
||||
.9 >LDAXI MSG.Z80.KO
|
||||
jsr PrintCStrAX
|
||||
rts
|
||||
*--------------------------------------
|
||||
* Out:
|
||||
* A = $60, 6502
|
||||
* A = $61, 65C02
|
||||
* A = $62, R65C02
|
||||
* A = $63, 65C816
|
||||
*--------------------------------------
|
||||
Detect6502 ldy #0 Test 6502 BCD bug
|
||||
sed
|
||||
lda #$99
|
||||
clc
|
||||
adc #$01
|
||||
cld
|
||||
bmi .9 BUG!, we have 6502
|
||||
|
||||
ldy #3 test 65C816 TYX Instruction
|
||||
ldx #0
|
||||
.OP 65816
|
||||
tyx TYX: if 65C816, x becomes non-zero
|
||||
.OP 65C02
|
||||
bne .9 worked! 65C816
|
||||
|
||||
dey y=2 -> R65C02
|
||||
ldx $EA save zp $EA
|
||||
stz $EA store 0 in $EA
|
||||
* .OP 65R02
|
||||
.HS F7EA For compatibility with A2osX.ASM
|
||||
* smb 7,$EA if not Rockwell, assemble as nop nop
|
||||
* .OP 65C02
|
||||
asl $EA cs if Rockwell
|
||||
stx $EA restore zp $EA
|
||||
bcs .9
|
||||
|
||||
dey y=1 -> 65C02
|
||||
|
||||
.9 tya
|
||||
ora #$60
|
||||
rts
|
||||
*--------------------------------------
|
||||
* Out:
|
||||
* A = Z80 Slot
|
||||
*--------------------------------------
|
||||
DetectZ80 ldx #Z80Code.Size
|
||||
.1 lda Z80Code.Start-1,x
|
||||
sta $1000-1,x 00000H for Z80
|
||||
dex
|
||||
bne .1
|
||||
|
||||
stz ZPQuickPtr1
|
||||
lda #$C1
|
||||
sta ZPQuickPtr1+1
|
||||
|
||||
.2 sta (ZPQuickPtr1)
|
||||
lda $100D
|
||||
bmi .8
|
||||
inc ZPQuickPtr1+1
|
||||
lda ZPQuickPtr1+1
|
||||
cmp #$C8
|
||||
beq .9 CS
|
||||
clc
|
||||
adc #$20
|
||||
sta $100A
|
||||
bra .2
|
||||
|
||||
.8 lda ZPQuickPtr1+1
|
||||
and #$0F
|
||||
clc
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
Z80Code.Start .HS 31FFFF START: LD SP,0FFFFH Init Stack
|
||||
.HS 3EFF LD A,0FFH Set Flag
|
||||
.HS 320D00 LD (FLAG),A
|
||||
.HS 3200E1 LD (0E100H),A Back to 6502
|
||||
.HS 18F3 JR START Loop
|
||||
.HS 00 FLAG: .DB 0
|
||||
Z80Code.End .EQ *
|
||||
Z80Code.Size .EQ Z80Code.End-Z80Code.Start
|
||||
*--------------------------------------
|
||||
MSG.CPU >CSTRING "Checking CPU..."
|
||||
MSG.CPU.SPEED >CSTRING "Detecting CPU Speed..."
|
||||
MSG.CPUTYPEL .DA #MSG.6502
|
||||
.DA #MSG.65C02
|
||||
.DA #MSG.65R02
|
||||
.DA #MSG.65816
|
||||
MSG.CPUTYPEH .DA /MSG.6502
|
||||
.DA /MSG.65C02
|
||||
.DA /MSG.65R02
|
||||
.DA /MSG.65816
|
||||
MSG.6502 >CSTRING "6502.\n"
|
||||
MSG.65C02 >CSTRING "65C02.\n"
|
||||
MSG.65R02 >CSTRING "65R02.\n"
|
||||
MSG.65816 >CSTRING "65816.\n"
|
||||
MSG.CPU.SPEEDOK >CSTRING "%d.%02d Mhz.\n"
|
||||
MSG.Z80 >CSTRING "Detecting Z80 CPU..."
|
||||
MSG.Z80.OK >CSTRING "Detected In Slot %d.\n"
|
||||
MSG.Z80.KO >CSTRING "Not Detected.\n"
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE SYS/KERNEL.S.CPU
|
||||
LOAD SYS/KERNEL.S
|
||||
ASM
|
|
@ -5,25 +5,7 @@ INC 1
|
|||
AUTO 6
|
||||
.LIST OFF
|
||||
*--------------------------------------
|
||||
DevMgr.HiMem .EQ $FFFE Protect IRQ vector in Aux LC
|
||||
*--------------------------------------
|
||||
* S.DevMgrInit
|
||||
*--------------------------------------
|
||||
S.DevMgrInit ldx #S.DEV.SIZE*DevMgr.Count
|
||||
.1 lda DevMgr.NUL-1,x
|
||||
sta DevMgr.Table-1,x
|
||||
dex
|
||||
bne .1
|
||||
|
||||
stz DevMgr.Table+S.DEV.SIZE*DevMgr.Count+1
|
||||
|
||||
lda #DevMgr.Count-1
|
||||
sta DevMgr.LastDevID
|
||||
|
||||
>LDYAI DevMgr.End
|
||||
>STYA DevMgr.Free
|
||||
clc
|
||||
rts
|
||||
DevMgr.HiMem .EQ $FFFA Protect IRQ vectors in Aux LC
|
||||
*--------------------------------------
|
||||
* S.GetDevByIDA
|
||||
* IN:
|
||||
|
@ -66,7 +48,6 @@ S.GetDevByIDA.T .BS 1
|
|||
* X = DEVID
|
||||
* Y,A = pDev
|
||||
*--------------------------------------
|
||||
S.GetDevByNameA jsr S.GetMemPtrA
|
||||
S.GetDevByNameYA
|
||||
>STYA ZPQuickPtr1
|
||||
>LDYAI DevMgr.Table+S.DEV.NAME
|
||||
|
@ -126,36 +107,42 @@ DevMgr.SYS.BASL0 .EQ $800
|
|||
*--------------------------------------
|
||||
DevMgr.NUL cld
|
||||
jmp (DevMgr.NUL.Code,x)
|
||||
.DA #0 DevID=0
|
||||
.DA #S.DEV.F.INUSE+S.DEV.F.SHARE+S.DEV.F.COUT+S.DEV.F.CHAR
|
||||
>PSTRING "NUL" NAME
|
||||
.HS 00 NAME must Be 5 bytes long
|
||||
.HS 00.00
|
||||
.HS 00
|
||||
.HS 00.00.00.00
|
||||
*--------------------------------------
|
||||
DevMgr.SYS cld
|
||||
jmp (DevMgr.SYS.Code,x)
|
||||
.DA #1 DevID=1
|
||||
.DA #S.DEV.F.INUSE+S.DEV.F.EVENT+S.DEV.F.SHARE+S.DEV.F.COUT+S.DEV.F.CHAR
|
||||
>PSTRING "SYS" NAME
|
||||
.HS 00 NAME must Be 5 bytes long
|
||||
.HS 00.00
|
||||
.HS 00
|
||||
.HS 00.00.00.00
|
||||
*--------------------------------------
|
||||
DevMgr.NUL.Code .DA .8 OPEN
|
||||
.DA .8 GETEVENT
|
||||
DevMgr.NUL.Code .DA DevMgr.Unsup OPEN
|
||||
.DA DevMgr.Unsup GETEVENT
|
||||
.DA .8 COUT
|
||||
.DA .8 CLOSE
|
||||
.DA .8 GETINFO
|
||||
.DA .8 IRQ
|
||||
.DA DevMgr.Unsup CLOSE
|
||||
.DA DevMgr.Unsup GETINFO
|
||||
.DA DevMgr.Unsup IRQ
|
||||
.DA DevMgr.Unsup SELECT
|
||||
.8 clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
DevMgr.SYS.Code .DA DevMgr.SYS.Open
|
||||
.DA DevMgr.SYS.GetEvent
|
||||
.DA DevMgr.SYS.COut
|
||||
.DA .8 CLOSE
|
||||
.DA .8 GETINFO
|
||||
.DA .8 IRQ
|
||||
.8 clc
|
||||
.DA DevMgr.Unsup CLOSE
|
||||
.DA DevMgr.Unsup GETINFO
|
||||
.DA DevMgr.Unsup IRQ
|
||||
.DA DevMgr.SYS.Select
|
||||
*--------------------------------------
|
||||
DevMgr.Unsup lda #DEVMGR.ERRUNSUP
|
||||
sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
DevMgr.SYS.Open stz DevMgr.SYS.CPULOADI
|
||||
|
@ -180,28 +167,27 @@ DevMgr.SYS.Open stz DevMgr.SYS.CPULOADI
|
|||
|
||||
jsr DevMgr.SYS.Home
|
||||
|
||||
lda A2osX.SCREENS
|
||||
ora #A2osX.SCREENS.S
|
||||
sta A2osX.SCREENS
|
||||
lda #A2osX.SCREENS.S
|
||||
jsr S.ScreenSelectA
|
||||
lda #1
|
||||
sta A2osX.SCRNDEVS+1
|
||||
|
||||
jsr DevMgr.SYS.Select
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
DevMgr.SYS.GetEvent
|
||||
lda A2osX.ASCREEN
|
||||
and #A2osX.SCREENS.S is screen active?
|
||||
beq .9
|
||||
cmp #2 is SYS active?
|
||||
bne .9
|
||||
|
||||
ldx DevMgr.SYS.CPULOADI
|
||||
lda DevMgr.SYS.CPULOADC,x
|
||||
sta DevMgr.SYS.BASL0+38
|
||||
dec DevMgr.SYS.CPULOADI
|
||||
dex
|
||||
bpl .1
|
||||
lda #3
|
||||
sta DevMgr.SYS.CPULOADI
|
||||
ldx #3
|
||||
.1 stx DevMgr.SYS.CPULOADI
|
||||
|
||||
.1 jsr S.GetKeyboardEvent
|
||||
jsr S.GetKeyboardEvent
|
||||
bcs .9
|
||||
rts
|
||||
|
||||
|
@ -239,6 +225,15 @@ DevMgr.SYS.COut phx
|
|||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
DevMgr.SYS.Select
|
||||
sta SETTEXT
|
||||
sta SETALTCHAR
|
||||
sta SET80DISP
|
||||
sta CLR80STORE
|
||||
sta SETPAGE2
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
DevMgr.SYS.FSOut
|
||||
lda DevMgr.SYS.CH
|
||||
cmp #79
|
||||
|
|
|
@ -18,27 +18,28 @@ S.LoadDrvA >PUSHA push Cmd Line for S.PStrGetTkn
|
|||
bcc .1
|
||||
rts
|
||||
|
||||
.1 sta LoadDrv.Cmd
|
||||
stx LoadDrv.Args
|
||||
.1 sta S.LoadDrv.Name
|
||||
stx S.LoadDrv.Args
|
||||
|
||||
>LDYAI ENV.DRV push ENVNAME=DRV
|
||||
jsr S.GetEnvVarYA get value for ENV=$DRV
|
||||
bcs .98
|
||||
sta LoadDrv.Path
|
||||
|
||||
>PUSHB LoadDrv.Cmd push CMD for S.FileSearch
|
||||
>PUSHB LoadDrv.Path
|
||||
sta S.LoadDrv.Srch
|
||||
|
||||
>PUSHB S.LoadDrv.Name push CMD for S.FileSearch
|
||||
>PUSHB S.LoadDrv.Srch
|
||||
jsr S.FileSearch find File in $DRV
|
||||
bcs .97 not Found
|
||||
|
||||
sta LoadDrv.FullName
|
||||
sta S.LoadDrv.FullName
|
||||
jsr S.LoadBinA
|
||||
bcs .96
|
||||
|
||||
>STYA pDrv
|
||||
stx LoadDrv.hMem
|
||||
stx S.LoadDrv.hMem
|
||||
|
||||
lda LoadDrv.Args
|
||||
lda S.LoadDrv.Args
|
||||
jsr S.LoadDrvA.Jmp call Dev.Detect
|
||||
|
||||
bcs .95
|
||||
|
@ -56,24 +57,24 @@ S.LoadDrvA >PUSHA push Cmd Line for S.PStrGetTkn
|
|||
rts
|
||||
|
||||
.95 pha
|
||||
lda LoadDrv.hMem
|
||||
lda S.LoadDrv.hMem
|
||||
jsr S.FreeMemA
|
||||
pla
|
||||
|
||||
.96 pha
|
||||
lda LoadDrv.FullName
|
||||
lda S.LoadDrv.FullName
|
||||
jsr S.FreeMemA
|
||||
pla
|
||||
|
||||
.97 pha
|
||||
lda LoadDrv.Path
|
||||
lda S.LoadDrv.Srch
|
||||
jsr S.FreeMemA
|
||||
pla
|
||||
|
||||
.98 pha
|
||||
lda LoadDrv.Args
|
||||
lda S.LoadDrv.Args
|
||||
jsr S.FreeMemA
|
||||
lda LoadDrv.Cmd
|
||||
lda S.LoadDrv.Name
|
||||
jsr S.FreeMemA
|
||||
pla
|
||||
|
||||
|
@ -82,11 +83,11 @@ S.LoadDrvA >PUSHA push Cmd Line for S.PStrGetTkn
|
|||
*--------------------------------------
|
||||
S.LoadDrvA.Jmp jmp (pDrv)
|
||||
*--------------------------------------
|
||||
LoadDrv.Cmd .BS 1
|
||||
LoadDrv.Args .BS 1
|
||||
LoadDrv.Path .BS 1
|
||||
LoadDrv.FullName .BS 1
|
||||
LoadDrv.hMem .BS 1
|
||||
S.LoadDrv.Name .BS 1
|
||||
S.LoadDrv.Args .BS 1
|
||||
S.LoadDrv.Srch .BS 1
|
||||
S.LoadDrv.FullName .BS 1
|
||||
S.LoadDrv.hMem .BS 1
|
||||
*--------------------------------------
|
||||
* pDrv = .DRV File Loaded Address
|
||||
*--------------------------------------
|
||||
|
@ -231,6 +232,10 @@ S.InsDrv.Move ldy #H.BIN.DEV.HEADER.O
|
|||
dey
|
||||
bpl .1
|
||||
|
||||
lda DevMgr.LastDevID Save Dev.ID in the driver for SELECT
|
||||
ldy #S.DEV.ID
|
||||
sta (pDev),y
|
||||
|
||||
ldy #H.BIN.DRV.CODE.O
|
||||
lda (pDrv),y
|
||||
clc
|
||||
|
@ -270,6 +275,7 @@ S.InsDrv.Move ldy #H.BIN.DEV.HEADER.O
|
|||
bra .2
|
||||
.8 rts
|
||||
*--------------------------------------
|
||||
ENV.DRV >PSTRING "DRV"
|
||||
S.InsDrv.DrvLen .BS 2
|
||||
S.InsDrv.DrvEnd .BS 2
|
||||
*--------------------------------------
|
||||
|
|
|
@ -140,64 +140,42 @@ S.ExpandPStrA.VC
|
|||
S.ExpandPStrA.Start .BS 1
|
||||
S.ExpandPStrA.End .BS 1
|
||||
*--------------------------------------
|
||||
* S.CreateEnv
|
||||
* in :
|
||||
* out :
|
||||
* A = hMem to new env
|
||||
*--------------------------------------
|
||||
S.CreateEnv >PUSHWI K.ENV.SIZE get a buffer for ENV
|
||||
>PUSHBI 0
|
||||
jsr S.GetMem create it...
|
||||
bcs .9
|
||||
>STYA ZPQuickPtr1
|
||||
lda #0
|
||||
sta (ZPQuickPtr1)
|
||||
txa
|
||||
clc
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
* S.DupEnvA
|
||||
* In:
|
||||
* A = ENV hMem To Duplicate
|
||||
* Out:
|
||||
* A = hMem to new ENV
|
||||
*--------------------------------------
|
||||
S.DupEnvA pha
|
||||
jsr S.GetMemPtrA
|
||||
S.DupEnvA jsr S.GetMemPtrA
|
||||
>STYA ZPQuickPtr1
|
||||
pla
|
||||
>PUSHWI K.ENV.SIZE
|
||||
>PUSHBI 0
|
||||
jsr S.GetMem
|
||||
bcs .9
|
||||
>STYA ZPQuickPtr2
|
||||
phx
|
||||
.1 lda (ZPQuickPtr1)
|
||||
sta (ZPQuickPtr2)
|
||||
|
||||
ldy #0
|
||||
|
||||
.1 lda (ZPQuickPtr1),y
|
||||
sta (ZPQuickPtr2),y
|
||||
beq .8
|
||||
inc ZPQuickPtr1
|
||||
bne .2
|
||||
inc ZPQuickPtr1+1
|
||||
.2 inc ZPQuickPtr2
|
||||
|
||||
iny
|
||||
bne .1
|
||||
inc ZPQuickPtr1+1
|
||||
inc ZPQuickPtr2+1
|
||||
bra .1
|
||||
.8 pla
|
||||
|
||||
.8 txa
|
||||
clc
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
* S.GetEnvVarA
|
||||
* In:
|
||||
* A = hMem to NAME (PSTRING)
|
||||
*--------------------------------------
|
||||
* S.GetEnvVarYA
|
||||
* In:
|
||||
* Y,A = PTR to NAME (PSTRING)
|
||||
* Out:
|
||||
* A = hMem to VALUE (PSTRING) 0,"" if not exist
|
||||
*--------------------------------------
|
||||
S.GetEnvVarA >PULLA
|
||||
jsr S.GetMemPtrA
|
||||
S.GetEnvVarYA >STYA ZPQuickPtr2
|
||||
jsr S.FindVar
|
||||
bcc .1
|
||||
|
@ -212,6 +190,7 @@ S.GetEnvVarYA >STYA ZPQuickPtr2
|
|||
txa
|
||||
clc
|
||||
rts
|
||||
|
||||
.1 lda (ZPQuickPtr1) get NAME=VALUE len
|
||||
sec
|
||||
sbc (ZPQuickPtr2) substract (NAME len)
|
||||
|
@ -345,6 +324,14 @@ S.SetEnvVar >STYA ZPQuickPtr3 ZPQuickPtr3 = VALUE
|
|||
sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
* S.PutEnvYA
|
||||
* In:
|
||||
* Y,A = PTR To Name (NAME=VALUE)
|
||||
* Out:
|
||||
*--------------------------------------
|
||||
S.PutEnvYA clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
* S.DelEnvVarA
|
||||
* In:
|
||||
* PULLB = hMem To Name (PSTRING)
|
||||
|
|
|
@ -5,27 +5,6 @@ INC 1
|
|||
AUTO 6
|
||||
.LIST OFF
|
||||
*--------------------------------------
|
||||
* S.EvtMgrInit
|
||||
*--------------------------------------
|
||||
S.EvtMgrInit lda #10
|
||||
sta EVTMGR.10TH.CNT
|
||||
|
||||
lda A2osX.HZ
|
||||
sta EVTMGR.HZ.CNT
|
||||
|
||||
lda MACHID
|
||||
and #MACHID.TYPE
|
||||
cmp #MACHID.TYPE.IIc
|
||||
bne .8
|
||||
|
||||
* sta CLRIOUDIS
|
||||
* sta ENBVBLIIC
|
||||
|
||||
.8 lda /EvtMgr.Table
|
||||
sta pEvent+1
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
* GETEVENT :
|
||||
* IN :
|
||||
* OUT :
|
||||
|
|
|
@ -47,14 +47,16 @@ S.FileSearch >PULLA Get Search path
|
|||
rts
|
||||
|
||||
.10 sta S.FileSearch.hSrch Store Expanded path list to search
|
||||
|
||||
|
||||
>PULLB S.FileSearch.hFile Store Filename
|
||||
|
||||
lda #1
|
||||
sta S.FileSearch.Idx Start At Token 1
|
||||
|
||||
.1 >PUSHB S.FileSearch.hSrch push expanded path list
|
||||
>PUSHBI $3B Push SEP=';'
|
||||
>PUSHBI ';'
|
||||
>PUSHB S.FileSearch.Idx Push Token IDX
|
||||
|
||||
jsr S.PStrGetTkn Get token in A
|
||||
bcs .98
|
||||
|
||||
|
@ -66,7 +68,8 @@ S.FileSearch >PULLA Get Search path
|
|||
|
||||
sta S.FileSearch.hFull Store Full path (Token Path+filename)
|
||||
|
||||
jsr S.MLIGetFileInfoA
|
||||
jsr S.GetMemPtrA
|
||||
jsr S.MLIGetFileInfoYA
|
||||
bcc .8
|
||||
|
||||
lda S.FileSearch.hFull Discard this Full Path
|
||||
|
@ -99,14 +102,13 @@ S.FileSearch.Idx .BS 1
|
|||
S.FileSearch.hPath .BS 1
|
||||
S.FileSearch.hFull .BS 1
|
||||
*--------------------------------------
|
||||
* S.LoadFileA
|
||||
* S.LoadFileYA
|
||||
* in :
|
||||
* A = hMem of FilePath (PSTRING)
|
||||
* Y,A = FilePath (PSTRING)
|
||||
* out :
|
||||
* Y,A = File Length
|
||||
* X = hMem of Loaded File
|
||||
*--------------------------------------
|
||||
S.LoadFileA jsr S.GetMemPtrA
|
||||
S.LoadFileYA jsr S.ExpandPStrYA
|
||||
sta S.LoadFile.hExp
|
||||
jsr S.GetMemPtrA
|
||||
|
|
|
@ -0,0 +1,141 @@
|
|||
PR#3
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
*--------------------------------------
|
||||
* A2osX.SYSCALL (AUXLC to AUXLC)
|
||||
* In:
|
||||
* X = SYSfnc.Index
|
||||
* Y,A = free for Inline param
|
||||
*--------------------------------------
|
||||
A2osX.GP.Start jmp (KERNEL.SYSCALL,x)
|
||||
*--------------------------------------
|
||||
* LIBCALL (AUXLC to AUXLC)
|
||||
* In:
|
||||
* Y = LIB.ID
|
||||
* X = LIBfnc.Index
|
||||
* A = free for Inline param
|
||||
*--------------------------------------
|
||||
jmp A2osX.LIBCALL1
|
||||
*--------------------------------------
|
||||
* Kernel.MLICALL (AUXLC to MAINLC)
|
||||
* In:
|
||||
* X = MLI Function
|
||||
* A = Param Count
|
||||
*--------------------------------------
|
||||
jmp A2osX.MLICALL1
|
||||
*--------------------------------------
|
||||
jmp A2osX.ROMCALL1
|
||||
*--------------------------------------
|
||||
jmp BrkHandler
|
||||
.BS $BE10-*
|
||||
*--------------------------------------
|
||||
jmp (pDev) pDevJmp
|
||||
jmp (pCode) pCodeJmp
|
||||
jmp (pLib) pLibJmp
|
||||
.BS $BE20-*
|
||||
*--------------------------------------
|
||||
GO.Reset jsr GO.AUXLC
|
||||
jmp S.KernelRun
|
||||
*--------------------------------------
|
||||
A2osX.LIBCALL1 pha
|
||||
phx
|
||||
tya
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>STYA .1+1
|
||||
plx
|
||||
pla
|
||||
.1 jmp $FFFF
|
||||
*--------------------------------------
|
||||
A2osX.MLICALL1 jsr GO.MAINLC
|
||||
stx .1
|
||||
sta MLICALL.PARAMS
|
||||
jsr MLI
|
||||
.1 .BS 1
|
||||
.DA MLICALL.PARAMS
|
||||
jsr GO.AUXLC
|
||||
rts
|
||||
*--------------------------------------
|
||||
A2osX.ROMCALL1 plx
|
||||
stx .1+1
|
||||
plx
|
||||
stx .1+2
|
||||
ldx RROMBNK1
|
||||
jsr .1
|
||||
ldx RRAMWRAMBNK1
|
||||
ldx RRAMWRAMBNK1
|
||||
rts
|
||||
.1 jmp $FFFF
|
||||
*--------------------------------------
|
||||
GO.MAINLC php
|
||||
clc
|
||||
.HS 2C bit abs
|
||||
|
||||
GO.AUXLC php
|
||||
sec
|
||||
sei
|
||||
|
||||
sta A2osX.SaveA
|
||||
pla keep P in A for later
|
||||
stx A2osX.SaveX
|
||||
sty A2osX.SaveY
|
||||
plx
|
||||
ply
|
||||
inx
|
||||
bne .1
|
||||
iny
|
||||
.1 stx GO.EXIT.JMP+1
|
||||
sty GO.EXIT.JMP+2
|
||||
|
||||
ldx RRAMWRAMBNK1
|
||||
ldx RRAMWRAMBNK1
|
||||
|
||||
ldy pStack
|
||||
bcs GO.AUXLC1
|
||||
|
||||
GO.MAINLC1 tsx
|
||||
stx A2osX.SaveSX
|
||||
ldx A2osX.SaveSM
|
||||
txs
|
||||
stx CLRALTZP
|
||||
bra GO.EXIT
|
||||
*--------------------------------------
|
||||
GO.AUXLC1 stx SETALTZP
|
||||
tsx
|
||||
stx A2osX.SaveSM
|
||||
ldx A2osX.SaveSX
|
||||
txs
|
||||
*--------------------------------------
|
||||
GO.EXIT sty pStack
|
||||
pha push P on stack
|
||||
ldy A2osX.SaveY
|
||||
ldx A2osX.SaveX
|
||||
lda A2osX.SaveA
|
||||
plp
|
||||
GO.EXIT.JMP jmp $FFFF
|
||||
*--------------------------------------
|
||||
A2osX.SaveA .BS 1
|
||||
A2osX.SaveX .BS 1
|
||||
A2osX.SaveY .BS 1
|
||||
*--------------------------------------
|
||||
BrkHandler sta SETPAGE2
|
||||
bra *
|
||||
*--------------------------------------
|
||||
IrqHandler bra *
|
||||
*--------------------------------------
|
||||
A2osX.GP.End .EQ *
|
||||
*--------------------------------------
|
||||
* CONTROL SECTION :
|
||||
*--------------------------------------
|
||||
.DO A2osX.GP.End>$BEBF
|
||||
ERROR:GP too big
|
||||
.FIN
|
||||
*--------------------------------------
|
||||
.BS A2osX.GP.START+$100-*
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE SYS/KERNEL.S.GP
|
||||
LOAD SYS/KERNEL.S
|
||||
ASM
|
|
@ -0,0 +1,190 @@
|
|||
PR#3
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
*--------------------------------------
|
||||
* Setup MainLC ($3FE)
|
||||
*
|
||||
*
|
||||
* Setup AuxLC $FFFE->Kernel IRQ Handler
|
||||
* if irq not handled, jmp (S.IrqMgrOldFFFE)
|
||||
*--------------------------------------
|
||||
S.IrqMgrInit php
|
||||
sei
|
||||
>LDYA $FFFE
|
||||
cpy #S.IrqHandlerAuxLC
|
||||
bne .1
|
||||
cmp /S.IrqHandlerAuxLC
|
||||
beq .2
|
||||
|
||||
.1 >STYA S.IrqMgrOldFFFE
|
||||
>LDYAI S.IrqHandlerAuxLC
|
||||
>STYA $FFFE
|
||||
|
||||
.2
|
||||
|
||||
* >LDYAI $BE0C
|
||||
* >STYA $3F0
|
||||
|
||||
plp
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.MemMgrInit >LDYAI MemMgr.MHiMem
|
||||
>STYA MemMgr.HiMem
|
||||
>STYA MemMgr.Free
|
||||
>LDYAI MemMgr.MLoMem
|
||||
>STYA MemMgr.LoMem
|
||||
stz MemMgr.LastSlot Reserve Slot #0
|
||||
|
||||
sta SETWRITEAUX
|
||||
|
||||
>LDYAI MemMgr.XHiMem
|
||||
>STYA MemMgr.HiMem
|
||||
>STYA MemMgr.Free
|
||||
>LDYAI MemMgr.XLoMem
|
||||
>STYA MemMgr.LoMem
|
||||
stz MemMgr.LastSlot Reserve Slot #0
|
||||
|
||||
sta CLRWRITEAUX
|
||||
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
* S.DevMgrInit
|
||||
*--------------------------------------
|
||||
S.DevMgrInit ldx #S.DEV.SIZE*DevMgr.Count
|
||||
.1 lda DevMgr.NUL-1,x
|
||||
sta DevMgr.Table-1,x
|
||||
dex
|
||||
bne .1
|
||||
|
||||
stz DevMgr.Table+S.DEV.SIZE*DevMgr.Count+1
|
||||
|
||||
lda #DevMgr.Count-1
|
||||
sta DevMgr.LastDevID
|
||||
|
||||
>LDYAI DevMgr.End
|
||||
>STYA DevMgr.Free
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
* S.EvtMgrInit
|
||||
*--------------------------------------
|
||||
S.EvtMgrInit lda #10
|
||||
sta EVTMGR.10TH.CNT
|
||||
|
||||
lda A2osX.HZ
|
||||
sta EVTMGR.HZ.CNT
|
||||
|
||||
lda MACHID
|
||||
and #MACHID.TYPE
|
||||
cmp #MACHID.TYPE.IIc
|
||||
bne .8
|
||||
|
||||
* sta CLRIOUDIS
|
||||
* sta ENBVBLIIC
|
||||
|
||||
.8 lda /EvtMgr.Table
|
||||
sta pEvent+1
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
* S.TskMgrInit
|
||||
*--------------------------------------
|
||||
S.TskMgrInit stz TSKMGR.LASTID
|
||||
lda #1
|
||||
sta TSKMGR.SIZE One Slot Busy (Kernel PS=0)
|
||||
|
||||
>LDYAI TskMgr.Table Clear whole process table
|
||||
>STYA pPs
|
||||
|
||||
ldx #K.PS.MAX
|
||||
|
||||
.1 lda #0
|
||||
ldy #S.PS.SIZE-1
|
||||
|
||||
.2 sta (pPs),y
|
||||
dey
|
||||
bpl .2
|
||||
|
||||
lda pPs
|
||||
clc
|
||||
adc #S.PS.SIZE
|
||||
sta pPs
|
||||
bcc .3
|
||||
|
||||
inc pPs+1
|
||||
.3 dex
|
||||
bne .1
|
||||
|
||||
>LDYAI TskMgr.Table Select Process 0 (Kernel)
|
||||
>STYA pPs
|
||||
|
||||
lda #1
|
||||
ldy #S.PS.hINDEV
|
||||
sta (pPs),y Make In DEV = SYS
|
||||
ldy #S.PS.hOUTDEV
|
||||
sta (pPs),y Make OUT DEV = SYS
|
||||
ldy #S.PS.hERRDEV
|
||||
sta (pPs),y Make ERR DEV = SYS
|
||||
|
||||
>SYSCALL SYS.GetDevByIDA
|
||||
>STYA pDev
|
||||
ldx #DEVMGR.OPEN
|
||||
jsr pDevJmp
|
||||
|
||||
>PUSHWI K.ENV.SIZE get a buffer for ENV
|
||||
>PUSHBI S.MEM.F.INIT0 make sure blank
|
||||
>SYSCALL SYS.GetMem create it...
|
||||
bcs *
|
||||
|
||||
txa
|
||||
ldy #S.PS.hENV
|
||||
sta (pPs),y
|
||||
|
||||
>LDYAI TmpBuffer256
|
||||
>SYSCALL SYS.MLIGetPrefixYA
|
||||
bcs *
|
||||
|
||||
>LDYAI TmpBuffer256
|
||||
>SYSCALL SYS.NewPStrYA
|
||||
bcs *
|
||||
|
||||
ldy #S.PS.hPREFIX
|
||||
sta (pPs),y
|
||||
|
||||
>PUSHWI TmpBuffer256 push ENV value
|
||||
>PUSHWI I.ENV.A2osX push ENV name
|
||||
>SYSCALL SYS.SetEnvVarP
|
||||
bcs .9
|
||||
|
||||
>PUSHWI I.ENV.PATH.VAL
|
||||
>PUSHWI I.ENV.PATH
|
||||
>SYSCALL SYS.SetEnvVarP
|
||||
bcs .9
|
||||
|
||||
>PUSHWI I.ENV.LIB.VAL
|
||||
>PUSHWI I.ENV.LIB
|
||||
>SYSCALL SYS.SetEnvVarP
|
||||
bcs .9
|
||||
|
||||
>PUSHWI I.ENV.DRV.VAL
|
||||
>PUSHWI I.ENV.DRV
|
||||
>SYSCALL SYS.SetEnvVarP
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
I.ENV.A2osX >PSTRING "A2OSX"
|
||||
I.ENV.PATH >PSTRING "PATH"
|
||||
I.ENV.PATH.VAL >PSTRING "${A2OSX}SBIN/;${A2OSX}BIN/"
|
||||
I.ENV.LIB >PSTRING "LIB"
|
||||
I.ENV.LIB.VAL >PSTRING "${A2OSX}LIB/"
|
||||
I.ENV.DRV >PSTRING "DRV"
|
||||
I.ENV.DRV.VAL >PSTRING "${A2OSX}DRV/"
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE SYS/KERNEL.S.INIT
|
||||
LOAD SYS/KERNEL.S
|
||||
ASM
|
|
@ -5,41 +5,6 @@ INC 1
|
|||
AUTO 6
|
||||
.LIST OFF
|
||||
*--------------------------------------
|
||||
* Setup MainLC ($3FE)
|
||||
*
|
||||
*
|
||||
* Setup AuxLC $FFFE->Kernel IRQ Handler
|
||||
* if irq not handled, jmp (S.IrqMgrOldFFFE)
|
||||
*--------------------------------------
|
||||
S.IrqMgrInit php
|
||||
sei
|
||||
>LDYA $FFFE
|
||||
cpy #S.IrqHandlerAuxLC
|
||||
bne .1
|
||||
cmp /S.IrqHandlerAuxLC
|
||||
beq .2
|
||||
|
||||
.1 >STYA S.IrqMgrOldFFFE
|
||||
>LDYAI S.IrqHandlerAuxLC
|
||||
>STYA $FFFE
|
||||
|
||||
.2
|
||||
|
||||
* >LDYAI $BE0C
|
||||
* >STYA $3F0
|
||||
|
||||
plp
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.IrqMgrQuit php
|
||||
sei
|
||||
>LDYA S.IrqMgrOldFFFE
|
||||
>STYA $FFFE
|
||||
plp
|
||||
cli
|
||||
.8 rts
|
||||
*--------------------------------------
|
||||
S.BrkHandlerAuxLC
|
||||
bra *
|
||||
*--------------------------------------
|
||||
|
|
|
@ -0,0 +1,157 @@
|
|||
PR#3
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
*--------------------------------------
|
||||
* $E000-E0FF KERNEL.SYSCALL Jmp Table
|
||||
*--------------------------------------
|
||||
.DA S.GetMem $00
|
||||
.DA S.FreeMemA
|
||||
.DA S.GetMemPtrA
|
||||
.DA S.GetMemByIDA
|
||||
.DA S.GetMemByNameYA
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
.DA S.NewPStrYA $10
|
||||
.DA S.PStrCpyA
|
||||
.DA S.PStrCat
|
||||
.DA S.PStrCmp
|
||||
.DA S.PStrGetTkn
|
||||
.DA 0
|
||||
.DA S.GetArgCount
|
||||
.DA S.GetArgA
|
||||
*--------------------------------------
|
||||
.DA 0 $20
|
||||
.DA S.LoadLibYA
|
||||
.DA S.UnloadLibA
|
||||
.DA S.LoadDrvA
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
.DA S.ExpandPStrA $30
|
||||
.DA S.ExpandPStrYA
|
||||
.DA S.PutEnvYA
|
||||
.DA S.GetEnvVarYA
|
||||
.DA S.SetEnvVarH
|
||||
.DA S.SetEnvVarP
|
||||
.DA S.DelEnvVarA
|
||||
.DA S.DelEnvVarYA
|
||||
*--------------------------------------
|
||||
.DA S.MLICreateFile $40
|
||||
.DA 0
|
||||
.DA S.MLICreateDirYA
|
||||
.DA 0
|
||||
.DA S.MLIDestroyYA
|
||||
.DA S.MLIRename
|
||||
.DA S.MLISetFileInfo
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
.DA S.MLIGetFileInfoYA $50
|
||||
.DA S.MLIOnline
|
||||
.DA 0
|
||||
.DA S.MLISetPrefixYA
|
||||
.DA 0
|
||||
.DA S.MLIGetPrefixYA
|
||||
.DA 0
|
||||
.DA S.MLIOpenYA
|
||||
*--------------------------------------
|
||||
.DA S.MLINewLine $60
|
||||
.DA S.MLIRead
|
||||
.DA S.MLIWrite
|
||||
.DA S.MLICloseA
|
||||
.DA S.MLIFlushA
|
||||
.DA S.MLISetMark
|
||||
.DA S.MLIGetMarkA
|
||||
.DA S.MLISetEOF
|
||||
*--------------------------------------
|
||||
.DA S.MLIGetEOFA $70
|
||||
.DA S.MLISetBuf
|
||||
.DA S.MLIGetBuf
|
||||
.DA S.MLIGetTime
|
||||
.DA S.MLIAllocIRQ
|
||||
.DA S.MLIDeallocIRQA
|
||||
.DA S.MLIReadBlock
|
||||
.DA S.MLIWriteBlock
|
||||
*--------------------------------------
|
||||
.DA S.GetDevByIDA $80
|
||||
.DA 0
|
||||
.DA S.GetDevByNameYA
|
||||
.DA S.GetDevInfoA
|
||||
.DA S.GetKeyboardEvent
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
.DA S.ExecProcessNewEnvYA $90
|
||||
.DA S.ExecProcessYA
|
||||
.DA S.CreateProcessNewEnvYA
|
||||
.DA S.CreateProcessYA
|
||||
.DA S.GetPSByIDA
|
||||
.DA 0
|
||||
.DA S.Sleep
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
.DA S.CheckPrefixA $A0
|
||||
.DA S.FileSearch
|
||||
.DA 0
|
||||
.DA S.LoadFileYA
|
||||
.DA S.ListDirInitA
|
||||
.DA S.ListDirInitYA
|
||||
.DA S.ListDirNextA
|
||||
.DA S.ListDirCloseA
|
||||
*--------------------------------------
|
||||
.DA 0 $B0
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
.DA 0 $C0
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
.DA S.COutA $D0
|
||||
.DA 0
|
||||
.DA S.PSTROutYA
|
||||
.DA 0
|
||||
.DA S.HexOutA
|
||||
.DA S.HexOutYA
|
||||
.DA S.DecOutA
|
||||
.DA S.DecOutYA
|
||||
*--------------------------------------
|
||||
.DA 0 $E0
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
.DA 0 $F0
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE SYS/KERNEL.S.JMP
|
||||
LOAD SYS/KERNEL.S
|
||||
ASM
|
|
@ -33,7 +33,8 @@ S.LoadLibYA.hLibName .BS 1
|
|||
* out :
|
||||
* A = hMem of Loaded Lib
|
||||
*--------------------------------------
|
||||
S.LoadLibA sta S.LoadLibA.hName push libname for S.FileSearch
|
||||
S.LoadLibA sta S.LoadLibA.hName save libname for S.FileSearch
|
||||
|
||||
>LDYAI ENV.LIB push ENVNAME=LIB
|
||||
jsr S.GetEnvVarYA get value for ENV=LIB
|
||||
bcs .99
|
||||
|
@ -62,11 +63,15 @@ S.LoadLibA sta S.LoadLibA.hName push libname for S.FileSearch
|
|||
clc
|
||||
rts
|
||||
|
||||
.97 lda S.LoadLibA.hPath discard LIB PATH
|
||||
.97 pha
|
||||
lda S.LoadLibA.hPath discard LIB PATH
|
||||
jsr S.FreeMemA
|
||||
pla
|
||||
|
||||
.98 lda S.LoadLibA.hSrch discard LIB VALUE
|
||||
.98 pha
|
||||
lda S.LoadLibA.hSrch discard LIB VALUE
|
||||
jsr S.FreeMemA
|
||||
pla
|
||||
sec
|
||||
.99 rts
|
||||
*--------------------------------------
|
||||
|
@ -105,6 +110,7 @@ S.UnloadLibA pha
|
|||
pla
|
||||
jmp S.FreeMemA
|
||||
*--------------------------------------
|
||||
ENV.LIB >PSTRING "LIB"
|
||||
MAN
|
||||
SAVE SYS/KERNEL.S.LIB
|
||||
LOAD SYS/KERNEL.S
|
||||
|
|
|
@ -19,33 +19,6 @@ ZPMemMgrTmp3 .EQ ZPMemMgr+6
|
|||
* Garbage collector move blocks
|
||||
* - mem.ID=0 always used! useful to test if hMem=0
|
||||
*--------------------------------------
|
||||
S.MemMgrInit >LDYAI MemMgr.MHiMem
|
||||
>STYA MemMgr.HiMem
|
||||
>STYA MemMgr.Free
|
||||
|
||||
>LDYAI MemMgr.MLoMem
|
||||
>STYA MemMgr.LoMem
|
||||
|
||||
stz MemMgr.LastSlot Reserve Slot #0
|
||||
|
||||
sta SETREADAUX
|
||||
sta SETWRITEAUX
|
||||
|
||||
>LDYAI MemMgr.XHiMem
|
||||
>STYA MemMgr.HiMem
|
||||
>STYA MemMgr.Free
|
||||
|
||||
>LDYAI MemMgr.XLoMem
|
||||
>STYA MemMgr.LoMem
|
||||
|
||||
stz MemMgr.LastSlot Reserve Slot #0
|
||||
|
||||
sta CLRREADAUX
|
||||
sta CLRWRITEAUX
|
||||
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
* PUBLIC
|
||||
*--------------------------------------
|
||||
* S.GetMem
|
||||
|
@ -373,13 +346,11 @@ S.GetMemByIDA stz ZPMemMgrSPtr+1
|
|||
rts
|
||||
*--------------------------------------
|
||||
* In:
|
||||
* A = hMem to BINPATH (PSTR)
|
||||
* Y,A = BINPATH (PSTR)
|
||||
* Out:
|
||||
* Y,A = ZPMemMgrSPtr = PTR to S.MEM
|
||||
* X = hMem
|
||||
*--------------------------------------
|
||||
S.GetMemByNameA jsr S.GetMemPtrA
|
||||
bcs *
|
||||
S.GetMemByNameYA
|
||||
>STYA ZPMemMgrTmp1 save BINPATH
|
||||
>LDYAI MemMgr.Table
|
||||
|
|
|
@ -14,7 +14,6 @@ S.MLICreateFile >PULLW MLICALL.PARAMS+1
|
|||
lda #$01 Storage=Standard Files
|
||||
bra S.MLICreate
|
||||
*--------------------------------------
|
||||
S.MLICreateDirA jsr S.GetMemPtrA
|
||||
S.MLICreateDirYA
|
||||
>STYA MLICALL.PARAMS+1
|
||||
lda #$C3
|
||||
|
@ -26,7 +25,6 @@ S.MLICreate sta MLICALL.PARAMS+7
|
|||
>MLICALL MLICREATE
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.MLIDestroyA jsr S.GetMemPtrA
|
||||
S.MLIDestroyYA >STYA MLICALL.PARAMS+1
|
||||
>MLICALL MLIDESTROY
|
||||
rts
|
||||
|
@ -49,14 +47,12 @@ S.MLISetFileInfo
|
|||
>MLICALL MLISETFILEINFO
|
||||
rts
|
||||
*--------------------------------------
|
||||
* S.MLIGetFileInfoA
|
||||
* S.MLIGetFileInfoYA
|
||||
* in :
|
||||
* A = hMem To FileName
|
||||
* Y,A = FileName
|
||||
* out :
|
||||
* Y,A = PTR To Buffer (L=15)
|
||||
*--------------------------------------
|
||||
S.MLIGetFileInfoA
|
||||
jsr S.GetMemPtrA
|
||||
S.MLIGetFileInfoYA
|
||||
>STYA MLICALL.PARAMS+1
|
||||
>MLICALL MLIGETFILEINFO
|
||||
|
@ -74,26 +70,23 @@ S.MLIOnline >PULLB MLICALL.PARAMS+1
|
|||
>MLICALL MLIONLINE
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.MLISetPrefixA jsr S.GetMemPtrA
|
||||
S.MLISetPrefixYA
|
||||
>STYA MLICALL.PARAMS+1
|
||||
>MLICALL MLISETPREFIX
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.MLIGetPrefixA jsr S.GetMemPtrA
|
||||
S.MLIGetPrefixYA
|
||||
>STYA MLICALL.PARAMS+1
|
||||
>MLICALL MLIGETPREFIX
|
||||
rts
|
||||
*--------------------------------------
|
||||
* S.MLIOpenA
|
||||
* S.MLIOpenYA
|
||||
* in :
|
||||
* A = hMem To FileName
|
||||
* YA = FileName
|
||||
* out :
|
||||
* A = ref_num
|
||||
* X = buf hMem
|
||||
*--------------------------------------
|
||||
S.MLIOpenA jsr S.GetMemPtrA
|
||||
S.MLIOpenYA >STYA MLICALL.PARAMS+1
|
||||
>PUSHWI 1024 get a ProDOS IO buffer
|
||||
>PUSHBI S.MEM.F.ALIGN+S.MEM.F.NOMOVE
|
||||
|
|
|
@ -0,0 +1,107 @@
|
|||
PR#3
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
*--------------------------------------
|
||||
S.KernelRun jsr S.TskMgrRun
|
||||
bcc S.KernelRun.EVT
|
||||
jsr DevMgr.SYS.Select
|
||||
>LDYAI MSG.KRNLPANIC
|
||||
jsr S.PSTROutYA
|
||||
bra *
|
||||
|
||||
S.KernelRun.EVT
|
||||
jsr S.GetEvents
|
||||
bcs S.KernelRun CS=no event
|
||||
|
||||
jsr S.DispatchEvents
|
||||
bcc S.KernelRun CC=All Events Dispatched
|
||||
|
||||
jsr S.SelectProcess0
|
||||
|
||||
stz pEvent
|
||||
|
||||
.1 lda (pEvent)
|
||||
beq .81
|
||||
bmi .8 Discard any timer event
|
||||
|
||||
bit #S.EVT.F.KEY any special key?
|
||||
beq .7
|
||||
|
||||
ldy #S.EVT.DATAHI Open-Apple?
|
||||
lda (pEvent),y
|
||||
bpl .7
|
||||
|
||||
ldy #S.EVT.DATALO
|
||||
lda (pEvent),y
|
||||
|
||||
cmp #'1'
|
||||
bcc .8
|
||||
cmp #'5'
|
||||
bcs .8
|
||||
and #$0F
|
||||
|
||||
cmp A2osX.ASCREEN
|
||||
beq .8
|
||||
|
||||
tax
|
||||
lda A2osX.SCRNDEVS-1,x
|
||||
beq .8
|
||||
|
||||
jsr S.GetDevByIDA
|
||||
bcs .8
|
||||
|
||||
>STYA pDev
|
||||
ldx #DEVMGR.SELECT
|
||||
jsr pDevJmp
|
||||
bcs .8
|
||||
|
||||
ldy #S.EVT.DATALO
|
||||
lda (pEvent),y
|
||||
and #$0F
|
||||
sta A2osX.ASCREEN
|
||||
bra .8
|
||||
|
||||
.7 jsr S.DumpEvent
|
||||
|
||||
.8 jsr S.DestroyEvent
|
||||
|
||||
.81 lda pEvent
|
||||
clc
|
||||
adc #S.EVT
|
||||
sta pEvent
|
||||
lda EVTMGR.COUNT
|
||||
bne .1
|
||||
jmp S.KernelRun
|
||||
*--------------------------------------
|
||||
S.DumpEvent ldy #S.EVT.DATAW2+1
|
||||
>PUSHB (pEvent),y
|
||||
dey
|
||||
>PUSHB (pEvent),y
|
||||
|
||||
ldy #S.EVT.DATAW1+1
|
||||
>PUSHB (pEvent),y
|
||||
dey
|
||||
>PUSHB (pEvent),y
|
||||
|
||||
ldy #S.EVT.DATAHI
|
||||
>PUSHB (pEvent),y
|
||||
ldy #S.EVT.DATALO
|
||||
>PUSHB (pEvent),y
|
||||
|
||||
ldy #S.EVT.hDEV
|
||||
>PUSHB (pEvent),y
|
||||
|
||||
>PUSHB (pEvent)
|
||||
>LDYAI MSG.DumpEvent
|
||||
jmp S.PSTROutYA
|
||||
*--------------------------------------
|
||||
MSG.DumpEvent >PSTRING "!Unhandled Event:Flags=%h,DevID=%h,DATALO=%h,DATAHI=%h,W1=%H,W2=%H\n"
|
||||
MSG.KRNLPANIC >PSTRING "\n!!!Kernel Panic!!!\n"
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE SYS/KERNEL.S.RUN
|
||||
LOAD SYS/KERNEL.S
|
||||
ASM
|
|
@ -214,49 +214,51 @@ S.PStrMatch1 lda (ZPQuickPTR1) Keep Pattern Length in X
|
|||
* X = hMem to Remaining String After Token "Split Mode"
|
||||
*--------------------------------------
|
||||
S.PStrGetTkn >PULLA Get IDX
|
||||
sta ZPQuickPtr2+1
|
||||
sta S.PStrGetTkn.IDX
|
||||
>PULLA Get SEP
|
||||
sta ZPQuickPtr2
|
||||
sta S.PStrGetTkn.SEP
|
||||
>PULLA Get PStr
|
||||
jsr S.GetMemPtrA
|
||||
>STYA ZPQuickPtr1
|
||||
ldx #0 init token count to 0
|
||||
|
||||
S.PStrGetTkn1 ldx #0 init token count to 0
|
||||
ldy #0
|
||||
stz ZPQuickPtr3 init INTOKEN start to 0
|
||||
stz S.PStrGetTkn.START init INTOKEN start to 0
|
||||
.1 iny
|
||||
lda (ZPQuickPtr1),y
|
||||
and #$7F
|
||||
cmp ZPQuickPtr2 char=SEP ?
|
||||
cmp S.PStrGetTkn.SEP char=SEP ?
|
||||
bne .3 no, start a new token if not alredy in
|
||||
lda ZPQuickPtr3 SEP:in INTOKEN ?
|
||||
lda S.PStrGetTkn.START SEP:in INTOKEN ?
|
||||
beq .4 no, skip this SEP
|
||||
inx yes, increase token count
|
||||
lda ZPQuickPtr2+1 requested token=0 ?
|
||||
lda S.PStrGetTkn.IDX requested token=0 ?
|
||||
beq .71 yes, we are in "split mode"
|
||||
cpx ZPQuickPtr2+1 no,is current X=requested IDX?
|
||||
cpx S.PStrGetTkn.IDX no,is current X=requested IDX?
|
||||
beq .71
|
||||
stz ZPQuickPtr3 reset in INTOKEN start
|
||||
stz S.PStrGetTkn.START reset in INTOKEN start
|
||||
bra .4
|
||||
.3 lda ZPQuickPtr3 char:already INTOKEN ?
|
||||
.3 lda S.PStrGetTkn.START char:already INTOKEN ?
|
||||
bne .4 yes, keep existing start index
|
||||
sty ZPQuickPtr3 mark begining of token
|
||||
sty S.PStrGetTkn.START mark begining of token
|
||||
.4 tya
|
||||
cmp (ZPQuickPtr1) end of string ?
|
||||
bne .1 no, get next one
|
||||
lda ZPQuickPtr3 INTOKEN?
|
||||
lda S.PStrGetTkn.START INTOKEN?
|
||||
beq .6
|
||||
inx yes, last one is ending with string
|
||||
.6 lda ZPQuickPtr2+1 split mode ?
|
||||
.6 lda S.PStrGetTkn.IDX split mode ?
|
||||
beq .7
|
||||
cpx ZPQuickPtr2+1 is token = requested?
|
||||
cpx S.PStrGetTkn.IDX is token = requested?
|
||||
beq .7
|
||||
sec End of String reached, no matching token
|
||||
.61 rts
|
||||
|
||||
.71 dey move back yo end of token before this SEP
|
||||
.7 sty ZPQuickPtr3+1 we have matching token (or 1st one in split mode) at [ZPQuickPtr3,ZPQuickPtr3+1]
|
||||
tya compute token len=Y-ZPQuickPtr3+1
|
||||
.7 sty S.PStrGetTkn.END we have matching token (or 1st one in split mode) at [START,END]
|
||||
tya compute token len=Y-END
|
||||
sec
|
||||
sbc ZPQuickPtr3
|
||||
sbc S.PStrGetTkn.START
|
||||
inc +1
|
||||
inc +1 for string len
|
||||
tay
|
||||
|
@ -266,39 +268,39 @@ S.PStrGetTkn >PULLA Get IDX
|
|||
jsr S.GetMem
|
||||
bcs .61
|
||||
phx save hMem
|
||||
>STYA ZPQuickPtr4
|
||||
lda ZPQuickPtr3+1
|
||||
>STYA ZPQuickPtr2
|
||||
lda S.PStrGetTkn.END
|
||||
sec
|
||||
sbc ZPQuickPtr3
|
||||
sbc S.PStrGetTkn.START
|
||||
inc
|
||||
sta (ZPQuickPtr4) set this string length
|
||||
ldy ZPQuickPtr3
|
||||
sta (ZPQuickPtr2) set this string length
|
||||
ldy S.PStrGetTkn.START
|
||||
dey
|
||||
.8 iny
|
||||
inc ZPQuickPtr4
|
||||
inc ZPQuickPtr2
|
||||
bne .9
|
||||
inc ZPQuickPtr4+1
|
||||
inc ZPQuickPtr2+1
|
||||
.9 lda (ZPQuickPtr1),y
|
||||
sta (ZPQuickPtr4)
|
||||
cpy ZPQuickPtr3+1
|
||||
sta (ZPQuickPtr2)
|
||||
cpy S.PStrGetTkn.END
|
||||
bne .8
|
||||
lda ZPQuickPtr2+1 requested token=0 ?
|
||||
lda S.PStrGetTkn.IDX requested token=0 ?
|
||||
bne .87
|
||||
tya yes, we are in "split mode"
|
||||
cmp (ZPQuickPtr1) Remaining chars ?
|
||||
beq .87
|
||||
.10 iny move to next char
|
||||
lda (ZPQuickPtr1),y
|
||||
cmp ZPQuickPtr2 char=SEP?
|
||||
cmp S.PStrGetTkn.SEP char=SEP?
|
||||
bne .11
|
||||
tya
|
||||
cmp (ZPQuickPtr1) last one ?
|
||||
bne .10
|
||||
bra .87 yes, nothing to return
|
||||
.11 sty ZPQuickPtr3+1 ZPQuickPtr3+1=1st non SEP char
|
||||
lda (ZPQuickPtr1) compute reamining len=Y-ZPQuickPtr3+1
|
||||
.11 sty S.PStrGetTkn.END S.PStrGetTkn.END=1st non SEP char
|
||||
lda (ZPQuickPtr1) compute reamining len=Y-ZPQuickPtr1+1
|
||||
sec
|
||||
sbc ZPQuickPtr3+1
|
||||
sbc S.PStrGetTkn.END
|
||||
inc
|
||||
inc +1 for string len
|
||||
tay
|
||||
|
@ -308,20 +310,20 @@ S.PStrGetTkn >PULLA Get IDX
|
|||
jsr S.GetMem
|
||||
bcs .98
|
||||
phx save hMem
|
||||
>STYA ZPQuickPtr4
|
||||
>STYA ZPQuickPtr2
|
||||
lda (ZPQuickPtr1)
|
||||
sec
|
||||
sbc ZPQuickPtr3+1
|
||||
sbcS.PStrGetTkn.END
|
||||
inc
|
||||
sta (ZPQuickPtr4)
|
||||
ldy ZPQuickPtr3+1
|
||||
sta (ZPQuickPtr2)
|
||||
ldy S.PStrGetTkn.END
|
||||
dey
|
||||
.12 iny
|
||||
inc ZPQuickPtr4
|
||||
inc ZPQuickPtr2
|
||||
bne .13
|
||||
inc ZPQuickPtr4+1
|
||||
inc ZPQuickPtr2+1
|
||||
.13 lda (ZPQuickPtr1),y
|
||||
sta (ZPQuickPtr4)
|
||||
sta (ZPQuickPtr2)
|
||||
tya
|
||||
cmp (ZPQuickPtr1)
|
||||
bne .12
|
||||
|
@ -329,15 +331,22 @@ S.PStrGetTkn >PULLA Get IDX
|
|||
pla get back token hMem
|
||||
clc
|
||||
rts
|
||||
|
||||
.87 ldx #0 Splitmode but no remaining string to return
|
||||
pla get back token hMem
|
||||
clc
|
||||
rts
|
||||
|
||||
.98 pla get back Token hMem
|
||||
jsr S.FreeMemA discard Token
|
||||
.99 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.PStrGetTkn.SEP .BS 1
|
||||
S.PStrGetTkn.IDX .BS 1
|
||||
S.PStrGetTkn.START .BS 1
|
||||
S.PStrGetTkn.END .BS 1
|
||||
*--------------------------------------
|
||||
S.GetArgCount
|
||||
clc
|
||||
rts
|
||||
|
|
|
@ -5,87 +5,6 @@ INC 1
|
|||
AUTO 6
|
||||
.LIST OFF
|
||||
*--------------------------------------
|
||||
* S.TskMgrInit
|
||||
*--------------------------------------
|
||||
S.TskMgrInit stz TSKMGR.LASTID
|
||||
lda #1
|
||||
sta TSKMGR.SIZE One Slot Busy (Kernel PS=0)
|
||||
|
||||
>LDYAI TskMgr.Table Clear whole process table
|
||||
>STYA ZPQuickPtr1
|
||||
|
||||
ldx #K.PS.MAX
|
||||
|
||||
.1 lda #0
|
||||
ldy #S.PS.SIZE-1
|
||||
|
||||
.2 sta (ZPQuickPtr1),y
|
||||
dey
|
||||
bpl .2
|
||||
|
||||
lda ZPQuickPtr1
|
||||
clc
|
||||
adc #S.PS.SIZE
|
||||
sta ZPQuickPtr1
|
||||
bcc .3
|
||||
|
||||
inc ZPQuickPtr1+1
|
||||
.3 dex
|
||||
bne .1
|
||||
|
||||
lda #1
|
||||
ldy #S.PS.hINDEV
|
||||
sta TskMgr.Table,y Make In DEV = SYS
|
||||
ldy #S.PS.hOUTDEV
|
||||
sta TskMgr.Table,y Make OUT DEV = SYS
|
||||
ldy #S.PS.hERRDEV
|
||||
sta TskMgr.Table,y Make ERR DEV = SYS
|
||||
|
||||
jsr S.CreateEnv
|
||||
bcs *
|
||||
|
||||
ldy #S.PS.hENV
|
||||
sta TskMgr.Table,y
|
||||
|
||||
>LDYAI TmpBuffer256
|
||||
jsr S.MLIGetPrefixYA
|
||||
bcs *
|
||||
|
||||
>LDYAI TmpBuffer256
|
||||
jsr S.NewPStrYA
|
||||
bcs *
|
||||
|
||||
ldy #S.PS.hPREFIX
|
||||
sta TskMgr.Table,y
|
||||
S.TskMgrInit.Env
|
||||
|
||||
jsr S.SelectProcess0
|
||||
|
||||
ldx #DEVMGR.OPEN
|
||||
jsr pDevJmp
|
||||
|
||||
>PUSHWI TmpBuffer256 push ENV value
|
||||
>PUSHWI ENV.A2osX push ENV name
|
||||
jsr S.SetEnvVarP
|
||||
bcs .9
|
||||
|
||||
>PUSHWI ENV.PATH.VALUE
|
||||
>PUSHWI ENV.PATH
|
||||
jsr S.SetEnvVarP
|
||||
bcs .9
|
||||
|
||||
>PUSHWI ENV.LIB.VALUE
|
||||
>PUSHWI ENV.LIB
|
||||
jsr S.SetEnvVarP
|
||||
bcs .9
|
||||
|
||||
>PUSHWI ENV.DRV.VALUE
|
||||
>PUSHWI ENV.DRV
|
||||
jsr S.SetEnvVarP
|
||||
bcs .9
|
||||
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
* S.TskMgrRun
|
||||
*--------------------------------------
|
||||
S.TskMgrRun >LDYAI TskMgr.Table+S.PS.SIZE
|
||||
|
|
501
SYS/KERNEL.S.txt
501
SYS/KERNEL.S.txt
|
@ -5,7 +5,7 @@ INC 1
|
|||
AUTO 6
|
||||
.LIST OFF
|
||||
.OP 65C02
|
||||
.OR $D000
|
||||
.OR $2000
|
||||
.TF /A2OSX.BOOT/SYS/KERNEL
|
||||
*--------------------------------------
|
||||
.INB INC/MACROS.I
|
||||
|
@ -13,183 +13,99 @@ AUTO 6
|
|||
.INB INC/IO.I
|
||||
.INB INC/PRODOS.I
|
||||
*--------------------------------------
|
||||
TmpPtr1 .EQ $0 for X.PRINTF.S
|
||||
ZPQuickPtr1 .EQ ZPKERNEL Temp Ptrs for use in very limited scope
|
||||
ZPQuickPtr2 .EQ ZPKERNEL+2 (could be trashed by any JSR)
|
||||
ZPQuickPtr3 .EQ ZPKERNEL+4
|
||||
ZPQuickPtr4 .EQ ZPKERNEL+6
|
||||
*--------------------------------------
|
||||
* $D000-D0FF KERNEL.SYSCALL Jmp Table
|
||||
* Kernel Stage 2
|
||||
*--------------------------------------
|
||||
.DA S.GetMem $00
|
||||
.DA S.FreeMemA
|
||||
.DA S.GetMemPtrA
|
||||
.DA S.GetMemByIDA
|
||||
|
||||
.DA S.GetMemByNameA
|
||||
.DA S.GetMemByNameYA
|
||||
.DA 0
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
.DA S.NewPStrYA $10
|
||||
.DA S.PStrCpyA
|
||||
.DA S.PStrCat
|
||||
.DA S.PStrCmp
|
||||
Kernel.Init2 >LDAXI MSG.Init2
|
||||
jsr PrintCStrAX
|
||||
|
||||
.DA S.PStrGetTkn
|
||||
.DA 0
|
||||
.DA S.GetArgCount
|
||||
.DA S.GetArgA
|
||||
*--------------------------------------
|
||||
.DA S.LoadBinA $20
|
||||
.DA S.LoadLibYA
|
||||
.DA S.UnloadLibA
|
||||
.DA S.LoadDrvA
|
||||
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
.DA S.ExpandPStrA $30
|
||||
.DA S.ExpandPStrYA
|
||||
.DA S.GetEnvVarA
|
||||
.DA S.GetEnvVarYA
|
||||
|
||||
.DA S.SetEnvVarH
|
||||
.DA S.SetEnvVarP
|
||||
.DA S.DelEnvVarA
|
||||
.DA S.DelEnvVarYA
|
||||
*--------------------------------------
|
||||
.DA S.MLICreateFile $40
|
||||
.DA S.MLICreateDirA
|
||||
.DA S.MLICreateDirYA
|
||||
.DA S.MLIDestroyA
|
||||
|
||||
.DA S.MLIDestroyYA
|
||||
.DA S.MLIRename
|
||||
.DA S.MLISetFileInfo
|
||||
.DA S.MLIGetFileInfoA
|
||||
|
||||
.DA S.MLIGetFileInfoYA $50
|
||||
.DA S.MLIOnline
|
||||
.DA S.MLISetPrefixA
|
||||
.DA S.MLISetPrefixYA
|
||||
|
||||
.DA S.MLIGetPrefixA
|
||||
.DA S.MLIGetPrefixYA
|
||||
.DA S.MLIOpenA
|
||||
.DA S.MLIOpenYA
|
||||
|
||||
.DA S.MLINewLine $60
|
||||
.DA S.MLIRead
|
||||
.DA S.MLIWrite
|
||||
.DA S.MLICloseA
|
||||
|
||||
.DA S.MLIFlushA
|
||||
.DA S.MLISetMark
|
||||
.DA S.MLIGetMarkA
|
||||
.DA S.MLISetEOF
|
||||
|
||||
.DA S.MLIGetEOFA $70
|
||||
.DA S.MLISetBuf
|
||||
.DA S.MLIGetBuf
|
||||
.DA S.MLIGetTime
|
||||
|
||||
.DA S.MLIAllocIRQ
|
||||
.DA S.MLIDeallocIRQA
|
||||
.DA S.MLIReadBlock
|
||||
.DA S.MLIWriteBlock
|
||||
*--------------------------------------
|
||||
.DA S.GetDevByIDA $80
|
||||
.DA S.GetDevByNameA
|
||||
.DA S.GetDevByNameYA
|
||||
.DA S.GetDevInfoA
|
||||
|
||||
.DA S.GetKeyboardEvent
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
.DA S.ExecProcessNewEnvYA $90
|
||||
.DA S.ExecProcessYA
|
||||
.DA S.CreateProcessNewEnvYA
|
||||
.DA S.CreateProcessYA
|
||||
|
||||
.DA S.GetPSByIDA
|
||||
.DA 0
|
||||
.DA S.Sleep
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
.DA S.CheckPrefixA $A0
|
||||
.DA S.FileSearch
|
||||
.DA S.LoadFileA
|
||||
.DA S.LoadFileYA
|
||||
|
||||
.DA S.ListDirInitA
|
||||
.DA S.ListDirInitYA
|
||||
.DA S.ListDirNextA
|
||||
.DA S.ListDirCloseA
|
||||
*--------------------------------------
|
||||
.DA 0 $B0
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
.DA S.ScreenSelectA $C0
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
.DA S.COutA $D0
|
||||
.DA S.PSTROutA
|
||||
.DA S.PSTROutYA
|
||||
.DA 0
|
||||
.DA S.HexOutA
|
||||
.DA S.HexOutYA
|
||||
.DA S.DecOutA
|
||||
.DA S.DecOutYA
|
||||
*--------------------------------------
|
||||
.DA 0 $E0
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
.DA 0 $F0
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
Kernel.Init sei
|
||||
sei
|
||||
ldx #$FF init 6502 stack to highest
|
||||
txs
|
||||
sta SETALTZP
|
||||
|
||||
stx A2osX.SaveSM
|
||||
stx A2osX.SaveSX
|
||||
|
||||
sta CLRALTZP Make MAIN ZP is enabled for X.PRINT.F
|
||||
lda RROMBNK1 Make sure ROM is enabled for X.PRINT.F
|
||||
cli
|
||||
|
||||
>LDAXI MSG.Relocate
|
||||
jsr PrintCStrAX
|
||||
|
||||
sei
|
||||
sta SETALTZP
|
||||
|
||||
>LDYAI A2osX.BE00
|
||||
>STYA ZPQuickPtr1
|
||||
>LDYAI $BE00
|
||||
>STYA ZPQuickPtr2
|
||||
>LDYAI A2osX.BE00.SIZE^$FFFF
|
||||
>STYA ZPQuickPtr3
|
||||
|
||||
jsr Kernel.Move
|
||||
lda RRAMWRAMBNK2
|
||||
lda RRAMWRAMBNK2
|
||||
|
||||
>LDYAI A2osX.D002
|
||||
>STYA ZPQuickPtr1
|
||||
>LDYAI $D000
|
||||
>STYA ZPQuickPtr2
|
||||
>LDYAI A2osX.D002.SIZE^$FFFF
|
||||
>STYA ZPQuickPtr3
|
||||
|
||||
jsr Kernel.Move
|
||||
|
||||
lda RRAMWRAMBNK1
|
||||
lda RRAMWRAMBNK1
|
||||
|
||||
>LDYAI A2osX.D001
|
||||
>STYA ZPQuickPtr1
|
||||
>LDYAI $D000
|
||||
>STYA ZPQuickPtr2
|
||||
>LDYAI A2osX.D001.SIZE^$FFFF
|
||||
>STYA ZPQuickPtr3
|
||||
|
||||
jsr Kernel.Move
|
||||
|
||||
>LDYAI A2osX.E000
|
||||
>STYA ZPQuickPtr1
|
||||
>LDYAI $E000
|
||||
>STYA ZPQuickPtr2
|
||||
>LDYAI A2osX.E000.SIZE^$FFFF
|
||||
>STYA ZPQuickPtr3
|
||||
|
||||
jsr Kernel.Move
|
||||
|
||||
>LDYAI D.STACK.TOP
|
||||
>STYA pStack init Soft Stack
|
||||
|
||||
stz A2osX.SCREENS
|
||||
stz A2osX.ASCREEN
|
||||
sta CLRALTZP Make MAIN ZP is enabled for X.PRINT.F
|
||||
lda RROMBNK1 Make sure ROM is enabled for X.PRINT.F
|
||||
cli
|
||||
|
||||
lda #6
|
||||
sta A2osX.HZ
|
||||
|
||||
pha push HZ
|
||||
>LDAXI MSG.HZ
|
||||
jsr PrintCStrAX
|
||||
|
||||
jsr CPU.Init
|
||||
|
||||
>LDAXI MSG.K.INIT
|
||||
jsr PrintCStrAX
|
||||
|
||||
sta SETALTZP
|
||||
lda RRAMWRAMBNK1
|
||||
lda RRAMWRAMBNK1
|
||||
|
||||
jsr S.IrqMgrInit
|
||||
bcs *
|
||||
jsr S.MemMgrInit
|
||||
|
@ -201,196 +117,149 @@ Kernel.Init sei
|
|||
jsr S.TskMgrInit
|
||||
bcs *
|
||||
|
||||
>LDYAI MSG.Init
|
||||
jsr S.PSTROutYA
|
||||
sta CLRALTZP Make MAIN ZP is enabled for X.PRINT.F
|
||||
lda RROMBNK1 Make sure ROM is enabled for X.PRINT.F
|
||||
|
||||
>LDAXI MSG.Init2.OK
|
||||
jsr PrintCStrAX
|
||||
|
||||
>LDYAI MSG.Init.Startup
|
||||
jsr S.PSTROutYA
|
||||
sta SETALTZP
|
||||
lda RRAMWRAMBNK1
|
||||
lda RRAMWRAMBNK1
|
||||
|
||||
>DEBUGOA
|
||||
*--------------------------------------
|
||||
* Kernel Stage 3
|
||||
*--------------------------------------
|
||||
Kernel.Init3 ldx #DEVMGR.SELECT
|
||||
jsr pDevJmp
|
||||
|
||||
>LDYAI MSG.Init3
|
||||
>SYSCALL SYS.PSTROutYA
|
||||
|
||||
>LDYAI MSG.StartupFile
|
||||
>SYSCALL SYS.PSTROutYA
|
||||
|
||||
>LDYAI STARTUP.ARGS Get A2osX.STARTUP full path...
|
||||
jsr S.NewPStrYA
|
||||
>SYSCALL SYS.NewPStrYA
|
||||
pha
|
||||
>LDYAI STARTUP.CMD Get SHELL full path...
|
||||
jsr S.NewPStrYA
|
||||
>SYSCALL SYS.NewPStrYA
|
||||
ply get back ARGS in Y
|
||||
phy
|
||||
pha A=CMD, save for discard
|
||||
|
||||
jsr S.CreateProcessYA
|
||||
bcs *
|
||||
>SYSCALL SYS.CreateProcessYA
|
||||
bcc .1
|
||||
|
||||
>PUSHA
|
||||
>LDYAI MSG.StartupErr
|
||||
>SYSCALL SYS.PSTROutYA
|
||||
bra *
|
||||
|
||||
.1 pla
|
||||
>SYSCALL SYS.FreeMemA
|
||||
pla
|
||||
jsr S.FreeMemA
|
||||
pla
|
||||
jsr S.FreeMemA
|
||||
>SYSCALL SYS.FreeMemA
|
||||
|
||||
>LDYAI MSG.Init.OK
|
||||
jsr S.PSTROutYA
|
||||
*--------------------------------------
|
||||
S.KernelRun jsr S.TskMgrRun
|
||||
bcc S.KernelRun.EVT
|
||||
lda #A2osX.SCREENS.S
|
||||
jsr S.ScreenSelectA
|
||||
>LDYAI MSG.KRNLPANIC
|
||||
jsr S.PSTROutYA
|
||||
bra *
|
||||
>LDYAI MSG.Init3.OK
|
||||
>SYSCALL SYS.PSTROutYA
|
||||
|
||||
S.KernelRun.EVT
|
||||
jsr S.GetEvents
|
||||
bcs S.KernelRun CS=no event
|
||||
|
||||
jsr S.DispatchEvents
|
||||
bcc S.KernelRun CC=All Events Dispatched
|
||||
|
||||
jsr S.SelectProcess0
|
||||
|
||||
stz pEvent
|
||||
>LDYAI TskMgr.Table
|
||||
>STYA pPs
|
||||
|
||||
.1 lda (pEvent)
|
||||
beq .81
|
||||
bmi .8 Discard any timer eventa
|
||||
|
||||
bit #S.EVT.F.KEY any special key?
|
||||
beq .7
|
||||
|
||||
ldy #S.EVT.DATAHI Open-Apple?
|
||||
lda (pEvent),y
|
||||
bpl .7
|
||||
|
||||
ldy #S.EVT.DATALO
|
||||
lda (pEvent),y
|
||||
|
||||
cmp #$31
|
||||
bne .2
|
||||
lda #A2osX.SCREENS.S
|
||||
jsr S.ScreenSelectA
|
||||
bra .8
|
||||
|
||||
.2 cmp #$32
|
||||
bne .3
|
||||
lda #A2osX.SCREENS.C
|
||||
jsr S.ScreenSelectA
|
||||
bra .8
|
||||
|
||||
.3 cmp #$33
|
||||
bne .7
|
||||
lda #A2osX.SCREENS.G
|
||||
jsr S.ScreenSelectA
|
||||
bra .8
|
||||
|
||||
.7 jsr S.DumpEvent
|
||||
|
||||
.8 jsr S.DestroyEvent
|
||||
|
||||
.81 lda pEvent
|
||||
clc
|
||||
adc #S.EVT
|
||||
sta pEvent
|
||||
lda EVTMGR.COUNT
|
||||
bne .1
|
||||
jmp S.KernelRun
|
||||
*--------------------------------------
|
||||
S.DumpEvent ldy #S.EVT.DATAW2+1
|
||||
>PUSHB (pEvent),y
|
||||
dey
|
||||
>PUSHB (pEvent),y
|
||||
|
||||
ldy #S.EVT.DATAW1+1
|
||||
>PUSHB (pEvent),y
|
||||
dey
|
||||
>PUSHB (pEvent),y
|
||||
|
||||
ldy #S.EVT.DATAHI
|
||||
>PUSHB (pEvent),y
|
||||
ldy #S.EVT.DATALO
|
||||
>PUSHB (pEvent),y
|
||||
|
||||
ldy #S.EVT.hDEV
|
||||
>PUSHB (pEvent),y
|
||||
|
||||
>PUSHB (pEvent)
|
||||
>LDYAI MSG.DumpEvent
|
||||
jmp S.PSTROutYA
|
||||
*--------------------------------------
|
||||
* S.ScreenSelectA
|
||||
* IN :
|
||||
* A = Screen to display
|
||||
*--------------------------------------
|
||||
S.ScreenSelectA and A2osX.SCREENS Screen is available ?
|
||||
beq .9 ...not setup up
|
||||
|
||||
cmp #A2osX.SCREENS.S
|
||||
bne .1
|
||||
sta SETTEXT
|
||||
sta SETALTCHAR
|
||||
sta SET80DISP
|
||||
sta CLR80STORE
|
||||
sta SETPAGE2
|
||||
bra .8
|
||||
|
||||
.1 cmp #A2osX.SCREENS.C
|
||||
Kernel.Move ldy #0
|
||||
.1 inc ZPQuickPtr3
|
||||
bne .2
|
||||
sta SETTEXT
|
||||
sta SETALTCHAR
|
||||
sta SET80DISP
|
||||
sta CLR80STORE
|
||||
sta CLRPAGE2
|
||||
bra .8
|
||||
inc ZPQuickPtr3+1
|
||||
beq .9
|
||||
|
||||
.2 lda (ZPQuickPtr1),y
|
||||
sta (ZPQuickPtr2),y
|
||||
iny
|
||||
bne .1
|
||||
|
||||
.2 cmp #A2osX.SCREENS.G
|
||||
bne .9
|
||||
|
||||
sta CLRTEXT
|
||||
sta CLRMIXED
|
||||
sta SETHIRES
|
||||
sta CLR80STORE
|
||||
sta CLRPAGE2
|
||||
sta SETIOUDIS
|
||||
sta SETDHIRES
|
||||
|
||||
* sta CLR80DISP
|
||||
* sta SETDHIRES
|
||||
* sta CLRDHIRES
|
||||
* sta SET80DISP
|
||||
* sta SETDHIRES
|
||||
* sta CLRDHIRES
|
||||
* sta SETDHIRES
|
||||
|
||||
.8 sta A2osX.ASCREEN
|
||||
.9 rts
|
||||
inc ZPQuickPtr1+1
|
||||
inc ZPQuickPtr2+1
|
||||
bne .1
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
MSG.Init >PSTRING "A2osX[Stage2]:Init\n"
|
||||
MSG.Init.Startup >PSTRING "EXEC A2osX.Startup...\n"
|
||||
MSG.Init.OK >PSTRING "A2osX[Stage2]:Complete.\n"
|
||||
MSG.DumpEvent >PSTRING "!Unhandled Event:Flags=%h,DevID=%h,DATALO=%h,DATAHI=%h,W1=%H,W2=%H\n"
|
||||
MSG.KRNLPANIC >PSTRING "\n!!!Kernel Panic!!!\n"
|
||||
.INB X.PRINTF.S
|
||||
.INB SYS/KERNEL.S.CPU
|
||||
.INB SYS/KERNEL.S.INIT
|
||||
*--------------------------------------
|
||||
MSG.Init2 >CSTRING "A2osX[Stage2]:Init\n"
|
||||
MSG.Relocate >CSTRING "Relocating KERNEL...\n"
|
||||
MSG.HZ >CSTRING "Kernel SYS Timer Set For %d0 hz Machine.\n"
|
||||
MSG.K.INIT >CSTRING "Kernel Setup...\n"
|
||||
MSG.Init2.OK >CSTRING "A2osX[Stage2]:Complete.\n"
|
||||
*--------------------------------------
|
||||
MSG.Init3 >PSTRING "A2osX[Stage3]:Init\n"
|
||||
MSG.StartupFile >PSTRING "EXEC A2osX.Startup...\n"
|
||||
MSG.StartupErr >PSTRING "SHELL A2osX.Startup Failed with Error : [$%h]\n"
|
||||
MSG.Init3.OK >PSTRING "A2osX[Stage3]:Complete.\n"
|
||||
*--------------------------------------
|
||||
STARTUP.CMD >PSTRING "${A2OSX}SBIN/SHELL"
|
||||
STARTUP.ARGS >PSTRING "${A2OSX}A2osX.STARTUP"
|
||||
*--------------------------------------
|
||||
ENV.A2osX >PSTRING "A2OSX"
|
||||
ENV.PATH >PSTRING "PATH"
|
||||
ENV.PATH.VALUE >PSTRING "${A2OSX}SBIN/;${A2OSX}BIN/"
|
||||
ENV.LIB >PSTRING "LIB"
|
||||
ENV.LIB.VALUE >PSTRING "${A2OSX}LIB/"
|
||||
ENV.DRV >PSTRING "DRV"
|
||||
ENV.DRV.VALUE >PSTRING "${A2OSX}DRV/"
|
||||
* Global Page
|
||||
*--------------------------------------
|
||||
.INB SYS/KERNEL.S.IRQ
|
||||
.INB SYS/KERNEL.S.MEM
|
||||
A2osX.BE00 .EQ *
|
||||
.PH $BE00
|
||||
.INB SYS/KERNEL.S.GP
|
||||
.EP
|
||||
A2osX.BE00.END .EQ *
|
||||
*--------------------------------------
|
||||
* LC AUX $D000 BANK1
|
||||
*--------------------------------------
|
||||
A2osX.D001 .EQ *
|
||||
.PH $D000
|
||||
.INB SYS/KERNEL.S.STR
|
||||
.INB SYS/KERNEL.S.CIO
|
||||
.INB SYS/KERNEL.S.FIO
|
||||
.INB SYS/KERNEL.S.MLI
|
||||
.INB SYS/KERNEL.S.ENV
|
||||
.EP
|
||||
A2osX.D001.END .EQ *
|
||||
*--------------------------------------
|
||||
* LC AUX $D000 BANK2
|
||||
*--------------------------------------
|
||||
A2osX.D002 .EQ *
|
||||
.PH $D000
|
||||
cld
|
||||
.EP
|
||||
A2osX.D002.END .EQ *
|
||||
*--------------------------------------
|
||||
* LC AUX $E000
|
||||
*--------------------------------------
|
||||
A2osX.E000 .EQ *
|
||||
.PH $E000
|
||||
.INB SYS/KERNEL.S.JMP
|
||||
.INB SYS/KERNEL.S.RUN
|
||||
.INB SYS/KERNEL.S.IRQ
|
||||
.INB SYS/KERNEL.S.MEM
|
||||
.INB SYS/KERNEL.S.BIN
|
||||
.INB SYS/KERNEL.S.DRV
|
||||
.INB SYS/KERNEL.S.LIB
|
||||
.INB SYS/KERNEL.S.ENV
|
||||
.INB SYS/KERNEL.S.TSK
|
||||
.INB SYS/KERNEL.S.EVT
|
||||
*--------------------------------------
|
||||
.INB SYS/KERNEL.S.DEV
|
||||
* Make sure KERNEL.S.DEV is the last one
|
||||
*--------------------------------------
|
||||
.INB SYS/KERNEL.S.DEV
|
||||
.EP
|
||||
A2osX.E000.END .EQ *
|
||||
*--------------------------------------
|
||||
.LIST ON
|
||||
*--------------------------------------
|
||||
A2osX.BE00.SIZE .EQ A2osX.BE00.END-A2osX.BE00
|
||||
A2osX.D001.SIZE .EQ A2osX.D001.END-A2osX.D001
|
||||
A2osX.D002.SIZE .EQ A2osX.D002.END-A2osX.D002
|
||||
A2osX.E000.SIZE .EQ A2osX.E000.END-A2osX.E000
|
||||
*--------------------------------------
|
||||
.LIST OFF
|
||||
MAN
|
||||
SAVE SYS/KERNEL.S
|
||||
ASM
|
||||
|
|
|
@ -0,0 +1,177 @@
|
|||
PR#3
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
*--------------------------------------
|
||||
PrintPStrAX >STAX TmpPtr1
|
||||
lda (TmpPtr1)
|
||||
tax
|
||||
beq .9
|
||||
ldy #1
|
||||
|
||||
.1 lda (TmpPtr1),y
|
||||
ora #$80
|
||||
jsr $FDED COUT
|
||||
iny
|
||||
dex
|
||||
bne .1
|
||||
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
PrintCStrAX >STAX TmpPtr1
|
||||
pla
|
||||
sta X.Save.RTS
|
||||
pla
|
||||
sta X.Save.RTS+1
|
||||
|
||||
ldy #0
|
||||
|
||||
.1 stz X.b0Flag
|
||||
stz X.DigitCount
|
||||
|
||||
lda (TmpPtr1),y
|
||||
beq .9
|
||||
cmp #'%'
|
||||
bne .4
|
||||
|
||||
.11 iny
|
||||
lda (TmpPtr1),y
|
||||
beq .9
|
||||
cmp #'0'
|
||||
bne .22
|
||||
ror X.b0Flag beq -> CS
|
||||
bra .11
|
||||
|
||||
.22 bcc .21
|
||||
cmp #'9'+1
|
||||
bcs .21
|
||||
and #$0f
|
||||
sta X.DigitCount
|
||||
bra .11
|
||||
|
||||
.21 cmp #'d'
|
||||
bne .2
|
||||
pla
|
||||
jsr PrintADec
|
||||
bra .8
|
||||
|
||||
.2 cmp #'D'
|
||||
bne .3
|
||||
pla
|
||||
plx
|
||||
jsr PrintAXDec
|
||||
bra .8
|
||||
|
||||
.3 cmp #'h'
|
||||
bne .4
|
||||
pla
|
||||
jsr $FDDA PRBYTE
|
||||
|
||||
.4 cmp #'\'
|
||||
bne .7
|
||||
iny
|
||||
lda (TmpPtr1),y
|
||||
beq .9
|
||||
cmp #'n'
|
||||
bne .9
|
||||
lda #$0D
|
||||
|
||||
.7 ora #$80
|
||||
jsr $FDED COUT
|
||||
.8 iny
|
||||
bne .1
|
||||
|
||||
.9 lda X.Save.RTS+1
|
||||
pha
|
||||
lda X.Save.RTS
|
||||
pha
|
||||
rts
|
||||
*--------------------------------------
|
||||
PrintADec ldx #0
|
||||
PrintAXDec >STAX X.HexBuffer
|
||||
stz X.BCDBuffer
|
||||
stz X.BCDBuffer+1
|
||||
stz X.BCDBuffer+2
|
||||
|
||||
phy
|
||||
|
||||
ldx #16 let's roll 16 bits
|
||||
sed
|
||||
.2 asl X.HexBuffer
|
||||
rol X.HexBuffer+1
|
||||
php cpy will disturb carry while BCD adc
|
||||
ldy #0
|
||||
.3 plp
|
||||
lda X.BCDBuffer,y
|
||||
adc X.BCDBuffer,y
|
||||
sta X.BCDBuffer,y
|
||||
php
|
||||
iny
|
||||
cpy #3 Last byte of X.BCDBufferBUF?
|
||||
bne .3
|
||||
plp
|
||||
dex
|
||||
bne .2
|
||||
|
||||
cld
|
||||
|
||||
ldx #0
|
||||
ldy #5
|
||||
|
||||
.4 lda X.BCDBuffer,x
|
||||
pha
|
||||
and #$0F
|
||||
ora #$B0
|
||||
sta X.DigitBuffer,y
|
||||
dey
|
||||
|
||||
pla
|
||||
lsr
|
||||
lsr
|
||||
lsr
|
||||
lsr
|
||||
ora #$B0
|
||||
sta X.DigitBuffer,y
|
||||
inx
|
||||
dey
|
||||
bpl .4
|
||||
|
||||
lda X.DigitCount
|
||||
beq .5
|
||||
lda #6
|
||||
sec
|
||||
sbc X.DigitCount
|
||||
.5 tay
|
||||
.6 lda X.DigitBuffer,y
|
||||
cmp #"0"
|
||||
beq .7
|
||||
|
||||
sec
|
||||
ror X.b0Flag
|
||||
bra .8
|
||||
|
||||
.7 cpy #5
|
||||
beq .8
|
||||
lda #" "
|
||||
bit X.b0Flag
|
||||
bpl .81
|
||||
lda #"0"
|
||||
.8 jsr $FDED COUT
|
||||
.81 iny
|
||||
cpy #6
|
||||
bne .6
|
||||
|
||||
.9 ply
|
||||
rts
|
||||
*--------------------------------------
|
||||
X.Save.RTS .BS 2
|
||||
X.HexBuffer .BS 2
|
||||
X.BCDBuffer .BS 3
|
||||
X.b0Flag .BS 1
|
||||
X.DigitCount .BS 1
|
||||
X.DigitBuffer .BS 6
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE X.PRINTF.S
|
|
@ -2,17 +2,16 @@ PREFIX /A2OSX.BOOT
|
|||
CREATE BIN
|
||||
CREATE DRV
|
||||
CREATE ETC
|
||||
CREATE INC
|
||||
CREATE LIB
|
||||
CREATE SBIN
|
||||
CREATE SBIN/GFX
|
||||
CREATE SYS
|
||||
CREATE USR
|
||||
PREFIX /A2OSX.SRC
|
||||
CREATE BIN
|
||||
CREATE DRV
|
||||
CREATE ETC
|
||||
CREATE INC
|
||||
CREATE LIB
|
||||
CREATE SBIN
|
||||
CREATE SBIN/GFX
|
||||
CREATE SYS
|
||||
CREATE USR
|
||||
|
|
|
@ -5,7 +5,7 @@ AUTO 6
|
|||
PREFIX /A2OSX.BOOT
|
||||
BLOAD A2OSX.SYSTEM
|
||||
DELETE A2OSX.SYSTEM
|
||||
BSAVE A2OSX.SYSTEM,TSYS,A$2000,L4864
|
||||
BSAVE A2OSX.SYSTEM,TSYS,A$2000,L$1000
|
||||
-A2OSX.SYSTEM
|
||||
MAN
|
||||
PREFIX /A2OSX.SRC
|
||||
|
|
Loading…
Reference in New Issue