mirror of
https://github.com/A2osX/A2osX.git
synced 2024-06-17 22:29:44 +00:00
Kernel Rewrite #6
This commit is contained in:
parent
8bc65b7c1b
commit
3e17ac840c
BIN
A2OSX.BOOT.po
BIN
A2OSX.BOOT.po
Binary file not shown.
BIN
A2OSX.DEV.po
Normal file
BIN
A2OSX.DEV.po
Normal file
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
|
||||
|
|
109
BIN/NFSMOUNT.S.txt
Normal file
109
BIN/NFSMOUNT.S.txt
Normal file
|
@ -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
|
||||
|
|
200
SYS/KERNEL.S.CPU.txt
Normal file
200
SYS/KERNEL.S.CPU.txt
Normal file
|
@ -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
|
||||
|
|
141
SYS/KERNEL.S.GP.txt
Normal file
141
SYS/KERNEL.S.GP.txt
Normal file
|
@ -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
|
190
SYS/KERNEL.S.INIT.txt
Normal file
190
SYS/KERNEL.S.INIT.txt
Normal file
|
@ -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 *
|
||||
*--------------------------------------
|
||||
|
|
157
SYS/KERNEL.S.JMP.txt
Normal file
157
SYS/KERNEL.S.JMP.txt
Normal file
|
@ -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
|
||||
|
|
107
SYS/KERNEL.S.RUN.txt
Normal file
107
SYS/KERNEL.S.RUN.txt
Normal file
|
@ -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
|
||||
|
|
177
X.PRINTF.S.txt
Normal file
177
X.PRINTF.S.txt
Normal file
|
@ -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
Block a user