Kernel Rewrite #6

This commit is contained in:
Rémy GIBERT 2016-06-07 08:10:18 +02:00
parent 8bc65b7c1b
commit 3e17ac840c
48 changed files with 1868 additions and 1120 deletions

Binary file not shown.

BIN
A2OSX.DEV.po Normal file

Binary file not shown.

Binary file not shown.

View File

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

View File

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

View File

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

View File

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

View File

@ -1,6 +1,6 @@
PR#3
PREFIX /A2OSX.SRC
NEW
LOMEM $C00
INC 1
AUTO 6
.LIST OFF

View File

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

View File

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

View File

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

View File

@ -108,8 +108,6 @@ CS.RUN ldy #bCTRLC
*--------------------------------------
CS.DOEVENT lda (pEvent)
>DEBUG
bpl .1 is it a TIMER event?
ora #'T'

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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