A2osX/SYS/KERNEL.S.DEV.txt

364 lines
7.1 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

PR#3
PREFIX /A2OSX.SRC
NEW
INC 1
AUTO 6
.LIST OFF
*--------------------------------------
DevMgr.HiMem .EQ $FFFA Protect IRQ vectors in Aux LC
*--------------------------------------
* S.GetDevByIDA
* IN:
* A = DevID
* OUT:
* CC = OK, CS = ERROR
* Y,A = devslot
* X Unmodified
*--------------------------------------
S.GetDevByIDA cmp DevMgr.LastDevID
beq .1
bcs S.GetDevDNF
.1 stz S.GetDevByIDA.T
asl
ror S.GetDevByIDA.T
asl
ror S.GetDevByIDA.T
asl
ror S.GetDevByIDA.T
asl
ror S.GetDevByIDA.T
adc #DevMgr.Table
tay
lda S.GetDevByIDA.T
adc /DevMgr.Table
rts CC
S.GetDevByIDA.T .BS 1
*--------------------------------------
* GetDevIDByNameA
* IN:
* A = hPStr
* OUT:
* CC = OK, CS = ERROR
* X = DEVID
* Y,A = pDev
*--------------------------------------
S.GetDevByNameYA
>STYA ZPQuickPtr1
>LDYAI DevMgr.Table+S.DEV.NAME
>STYA ZPQuickPtr2
ldx #0
.1 ldy #0
.2 lda (ZPQuickPtr1),y
cmp (ZPQuickPtr2),y
bne .3
tya
iny
cmp (ZPQuickPtr1)
bne .2
lda ZPQuickPtr2
sec
sbc #S.DEV.NAME
tay
lda ZPQuickPtr2+1
sbc /S.DEV.NAME
clc
rts
.3 lda ZPQuickPtr2
clc
adc #S.DEV.SIZE
sta ZPQuickPtr2
bcc .4
inc ZPQuickPtr2+1
.4 cpx DevMgr.LastDevID
inx
bcc .1
S.GetDevDNF lda #DEVMGR.ERRDNF
rts
*--------------------------------------
S.GetDevInfoA jsr S.GetDevByIDA
bcs S.GetDevDNF
>STYA ZPQuickPtr1
ldx #DEVMGR.GETINFO
jmp (ZPQuickPtr1)
*--------------------------------------
DevMgr.Free .BS 2
DevMgr.DevID .BS 1
DevMgr.LastDevID .BS 1
*--------------------------------------
DevMgr.Count .EQ 2
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
.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
.HS 00.00.00.00
*--------------------------------------
DevMgr.NUL.Code .DA DevMgr.Unsup OPEN
.DA DevMgr.Unsup GETEVENT
.DA .8 COUT
.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 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
stz DevMgr.SYS.CH
stz DevMgr.SYS.CV
ldx #0
ldy #0
.1 lda DevMgr.SYS.TITLE,y
beq .2
jsr DevMgr.SYS.SetCharAtYX
iny
bne .1
.2 lda #$20
jsr DevMgr.SYS.SetCharAtYX
iny
cpy #80
bne .2
jsr DevMgr.SYS.Home
lda #1
sta A2osX.SCRNDEVS+1
jsr DevMgr.SYS.Select
clc
rts
*--------------------------------------
DevMgr.SYS.GetEvent
lda A2osX.ASCREEN
cmp #2 is SYS active?
bne .9
ldx DevMgr.SYS.CPULOADI
lda DevMgr.SYS.CPULOADC,x
sta DevMgr.SYS.BASL0+38
dex
bpl .1
ldx #3
.1 stx DevMgr.SYS.CPULOADI
jsr S.GetKeyboardEvent
bcs .9
rts
.9 lda #0 Error = no event
sec
rts
*--------------------------------------
DevMgr.SYS.COut phx
phy
cmp #' '
bcc .1
ldy DevMgr.SYS.CH
ldx DevMgr.SYS.CV
ora #$80
jsr DevMgr.SYS.SetCharAtYX
jsr DevMgr.SYS.FSOut
bra .8
.1 cmp #10
bne .2
jsr DevMgr.SYS.LF
bra .8
.2 cmp #13
bne .3
jsr DevMgr.SYS.CROut
bra .8
.3 ora #$20
jsr DevMgr.SYS.SetCharAtYX
jsr DevMgr.SYS.FSOut
.8 ply
plx
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
beq DevMgr.SYS.LF1
inc DevMgr.SYS.CH
rts
*--------------------------------------
DevMgr.SYS.CROut
jsr DevMgr.SYS.ClrEOL
stz DevMgr.SYS.CH
rts
*--------------------------------------
DevMgr.SYS.LF1 stz DevMgr.SYS.CH
DevMgr.SYS.LF ldx DevMgr.SYS.CV
cpx #23
beq DevMgr.SYS.Scroll
inc DevMgr.SYS.CV
rts
*--------------------------------------
DevMgr.SYS.ClrEOL
ldx DevMgr.SYS.CV
lda #$A0
ldy DevMgr.SYS.CH
.1 cpy #79
beq .2
jsr DevMgr.SYS.SetCharAtYX
iny
bne .1
.2 rts
*--------------------------------------
DevMgr.SYS.Scroll
ldx #1
.1 lda DevMgr.SYS.BASEL,x
sta ZPDRV
lda DevMgr.SYS.BASEH,x
sta ZPDRV+1
inx
lda DevMgr.SYS.BASEL,x
sta ZPDRV+2
lda DevMgr.SYS.BASEH,x
sta ZPDRV+3
ldy #39
sta SETWRITEAUX
sta SETREADAUX
.2 lda (ZPDRV+2),y
sta (ZPDRV),y
dey
bpl .2
ldy #39
sta CLRWRITEAUX
sta CLRREADAUX
.3 lda (ZPDRV+2),y
sta (ZPDRV),y
dey
bpl .3
cpx #23
bne .1 Fall in ClrLineAtX for last line
*--------------------------------------
DevMgr.SYS.ClrLineAtX
lda DevMgr.SYS.BASEL,x
sta ZPDRV
lda DevMgr.SYS.BASEH,x
sta ZPDRV+1
lda #$A0
ldy #39
.1 sta SETWRITEAUX
sta (ZPDRV),y
sta CLRWRITEAUX
sta (ZPDRV),y
dey
bpl .1
rts
*--------------------------------------
DevMgr.SYS.Home ldx #23
.1 jsr DevMgr.SYS.ClrLineAtX
dex
bne .1
stz DevMgr.SYS.CH
lda #1
sta DevMgr.SYS.CV
rts
*--------------------------------------
DevMgr.SYS.SetCharAtYX
cmp #$40
bcc .1
cmp #$5F
bcs .1
and #$3F
.1 phy
pha
lda DevMgr.SYS.BASEL,x
sta ZPDRV
lda DevMgr.SYS.BASEH,x
sta ZPDRV+1
tya
lsr
tay
bcs .2
sta SETWRITEAUX
.2 pla
sta (ZPDRV),y
sta CLRWRITEAUX
ply
rts
*--------------------------------------
DevMgr.SYS.CH .BS 1
DevMgr.SYS.CV .BS 1
DevMgr.SYS.CPULOADI .BS 1
DevMgr.SYS.CPULOADC .AS -"|/-\"
*--------------------------------------
DevMgr.SYS.TITLE >CSTRING "A2osX System Screen"
DevMgr.SYS.BASEL .HS 00.80.00.80.00.80.00.80.28.A8.28.A8.28.A8.28.A8.50.D0.50.D0.50.D0.50.D0
DevMgr.SYS.BASEH .HS 08.08.09.09.0A.0A.0B.0B.08.08.09.09.0A.0A.0B.0B.08.08.09.09.0A.0A.0B.0B
*--------------------------------------
DevMgr.End .EQ *
MAN
SAVE SYS/KERNEL.S.DEV
LOAD SYS/KERNEL.S
ASM