A2osX/SYS/KERNEL.S.RAMSW.txt

645 lines
11 KiB
Plaintext
Raw Permalink 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.

NEW
AUTO 3,1
*--------------------------------------
IRQ.InKernel .BS 1
IRQ.InLib .BS 1
*--------------------------------------
RAMSW.LIBC dec IRQ.InKernel Back To KERNEL
sec data in AUX RAM
ror A2osX.IOOpt
sta IO.CLRREADAUX
sta IO.CLRWRITEAUX
pha
phy
ldy #S.PS.A
sta (pPS),y
txa
iny #S.PS.X
sta (pPS),y
pla
iny #S.PS.Y
sta (pPS),y
tay
pla
jsr A2osX.LIBC2
inc IRQ.InKernel
bcc RAMSW.2AUXRTS no error from API ...
tax CS,A=0 ?
bne RAMSW.2AUXRTS
pla get PC LO
plx get PC HI
sec
sbc #2
bcs RAMSW.Sleep2
dex
bra RAMSW.Sleep2
*--------------------------------------
RAMSW.LibCall dec IRQ.InLib
>STYA .1+1
pha
phy
ldy #S.PS.A
sta (pPS),y
txa
iny #S.PS.X
sta (pPS),y
pla
iny #S.PS.Y
sta (pPS),y
pla
.1 jsr $FFFF SELF MODIFIED
inc IRQ.InLib
bcc RAMSW.RTS
tax CS,A=0 ?
bne RAMSW.RTS
sta IO.CLRREADAUX
sta IO.CLRWRITEAUX
pla get PC LO
plx get PC HI
sec
sbc #2
bcs RAMSW.Sleep2
dex
bra RAMSW.Sleep2
*--------------------------------------
RAMSW.2AUXRTS sta IO.SETREADAUX
sta IO.SETWRITEAUX
RAMSW.RTS rts Unmodified Carry
*--------------------------------------
RAMSW.Sleep sta IO.CLRREADAUX
sta IO.CLRWRITEAUX
php
sei
phy
ldy #S.PS.A
sta (pPS),y
txa
iny #S.PS.X
sta (pPS),y
pla
iny #S.PS.Y
sta (pPS),y
pla
iny #S.PS.P
sta (pPS),y
pla get PC LO
plx get PC HI
inc Advance one byte because of return by RTI
bne RAMSW.Sleep2
inx
*--------------------------------------
RAMSW.Sleep2 ldy #S.PS.PC
sta (pPS),y
txa
iny #S.PS.PC+1
sta (pPS),y
tsx
inx Stack Ptr is $1ff if empty
inx
inx
inx keep PC HI,LO from KERNEL
inx jsr to PSExecX/PSResume
sta IO.SETWRITEAUX
txa
beq .3
tay Save !Byte count for later
.2 pla
>PUSHA
inx
bne .2
tya
.3 >PUSHA push CPU Stack BC to restore on top of Soft Stack
sta IO.CLRWRITEAUX
inc $1fc PC=PC+1
bne .4
inc $1fd because of RTI
.4 lda (pPS)
ora #S.PS.F.SLEEP
sta (pPS)
lda #0 cld,clc,cli
pha
rti exit to kernel with CC
*--------------------------------------
RAMSW.2AUXJSR sta IO.SETREADAUX
sta IO.SETWRITEAUX
jsr $ffff SELF MODIFIED
RAMSW.2MAINRTS sta IO.CLRREADAUX
sta IO.CLRWRITEAUX
rts
*--------------------------------------
RAMSW.FPU dec IRQ.InKernel
cpx #FPU.fMUL
bcs .1
jsr INT int16 & int32
inc IRQ.InKernel
rts
.1 sta IO.CLRREADAUX
sta IO.CLRWRITEAUX
jsr FPU
sta IO.SETREADAUX
sta IO.SETWRITEAUX
inc IRQ.InKernel
rts
*--------------------------------------
RAMSW.KAPI dec IRQ.InKernel
sta IO.CLRWRITEAUX
sta IO.CLRREADAUX
jsr A2osX.KAPI2
sta IO.SETREADAUX
sta IO.SETWRITEAUX
inc IRQ.InKernel
rts
*--------------------------------------
RAMSW.PSExec ldy #S.PS.S
lda (pPS),y
tax
RAMSW.PSExecX jsr .8
sta IO.CLRREADAUX
sta IO.CLRWRITEAUX
dec IRQ.InKernel Back to KERNEL
rts
.8 lda pCode+1
pha
lda pCode
pha
php
sei
inc IRQ.InKernel Out of KERNEL
sta IO.SETREADAUX
sta IO.SETWRITEAUX
rti will do CLI
*--------------------------------------
RAMSW.PSResume jsr .1
sta IO.CLRREADAUX
sta IO.CLRWRITEAUX
dec IRQ.InKernel Bact To KERNEL
cli
rts
.1 sta IO.SETREADAUX
lda (pStack) Get 6502 stack !ByteCount
inc pStack
tax
beq .3
.2 lda (pStack)
inc pStack
pha
inx
bne .2
.3 sta IO.CLRREADAUX
ldy #S.PS.PC+1
lda (pPS),y
pha
dey #S.PS.PC
lda (pPS),y
pha
dey #S.PS.P
lda (pPS),y
pha
dey #S.PS.Y
lda (pPS),y
pha
dey #S.PS.X
lda (pPS),y
tax
dey #S.PS.A
lda (pPS),y
ply
sei
inc IRQ.InKernel Out of KERNEL
sta IO.SETREADAUX
sta IO.SETWRITEAUX
rti will do CLI
*--------------------------------------
RAMSW.SPJmp sta IO.SETWRITEAUX
sta IO.SETREADAUX
jsr $110
sta IO.CLRREADAUX
sta IO.CLRWRITEAUX
rts
*--------------------------------------
RAMSW.xTXTPTRng inc TXTPTR
bne RAMSW.xTXTPTRg
inc TXTPTR+1
*--------------------------------------
RAMSW.xTXTPTRg sta IO.SETREADAUX
lda (TXTPTR)
sta IO.CLRREADAUX
rts
*--------------------------------------
RAMSW.xTXTPTRc sta IO.SETREADAUX
cmp (TXTPTR)
sta IO.CLRREADAUX
rts
*--------------------------------------
RAMSW.xTXTPTRgY sta IO.SETREADAUX
lda (TXTPTR),y
sta IO.CLRREADAUX
rts
*--------------------------------------
RAMSW.xTXTPTRgn sta IO.SETREADAUX
lda (TXTPTR)
sta IO.CLRREADAUX
beq .9
>INCW TXTPTR
.9 rts
*--------------------------------------
RAMSW.xFORPNTg sta IO.SETREADAUX
lda (FORPNT)
sta IO.CLRREADAUX
rts
*--------------------------------------
RAMSW.xFORPNTgY sta IO.SETREADAUX
lda (FORPNT),y
sta IO.CLRREADAUX
rts
*--------------------------------------
RAMSW.xFORPNTgn sta IO.SETREADAUX
lda (FORPNT)
sta IO.CLRREADAUX
beq .9
inc FORPNT
bne .9
inc FORPNT+1
.9 rts
*--------------------------------------
RAMSW.xA1LgY sta IO.SETREADAUX
lda (A1L),y
sta IO.CLRREADAUX
rts
*--------------------------------------
RAMSW.xP1g sta IO.SETREADAUX
lda (ZPPtr1)
sta IO.CLRREADAUX
rts
*--------------------------------------
RAMSW.xP1gY sta IO.SETREADAUX
lda (ZPPtr1),y
sta IO.CLRREADAUX
rts
*--------------------------------------
RAMSW.xP2g sta IO.SETREADAUX
lda (ZPPtr2)
sta IO.CLRREADAUX
rts
*--------------------------------------
RAMSW.xP2gY sta IO.SETREADAUX
lda (ZPPtr2),y
sta IO.CLRREADAUX
rts
*--------------------------------------
RAMSW.xP3g sta IO.SETREADAUX
lda (ZPPtr3)
sta IO.CLRREADAUX
rts
*--------------------------------------
RAMSW.xP3gY sta IO.SETREADAUX
lda (ZPPtr3),y
sta IO.CLRREADAUX
rts
*--------------------------------------
RAMSW.xP3cY sta IO.SETREADAUX
cmp (ZPPtr3),y
sta IO.CLRREADAUX
rts
*--------------------------------------
RAMSW.pBufgY sta IO.SETREADAUX
lda (PS.pBuf),y
sta IO.CLRREADAUX
rts
*--------------------------------------
RAMSW.GetStk sta IO.SETREADAUX
lda (pStack)
sta IO.CLRREADAUX
rts
*--------------------------------------
RAMSW.GetStkY sta IO.SETREADAUX
lda (pStack),y
sta IO.CLRREADAUX
rts
*--------------------------------------
RAMSW.GetStkW sta IO.SETREADAUX
lda (pStack)
pha
ldy #1
lda (pStack),y
ply
sta IO.CLRREADAUX
rts
*--------------------------------------
RAMSW.GetStkYW sta IO.SETREADAUX
lda (pStack),y
pha
iny
lda (pStack),y
ply
sta IO.CLRREADAUX
rts
*--------------------------------------
RAMSW.StkY2TXTPTR
sta IO.SETREADAUX
lda (pStack),y
sta TXTPTR
iny
lda (pStack),y
sta TXTPTR+1
sta IO.CLRREADAUX
rts
*--------------------------------------
RAMSW.StkY2FORPNT
sta IO.SETREADAUX
lda (pStack),y
sta FORPNT
iny
lda (pStack),y
sta FORPNT+1
sta IO.CLRREADAUX
rts
*--------------------------------------
RAMSW.StkY2PathBuf
sta IO.SETREADAUX
lda (pStack),y
sta .2+1
iny
lda (pStack),y
sta .2+2
ldx #$ff
.1 inx
.2 lda $ffff,x SELF MODIFIED
sta K.PathBuf,x
bne .1
sta IO.CLRREADAUX
rts
*--------------------------------------
RAMSW.YA2PathBuf
sta IO.SETREADAUX
>STYA .2+1
ldx #$ff
.1 inx
.2 lda $ffff,x SELF MODIFIED
sta K.PathBuf,x
bne .1
sta IO.CLRREADAUX
rts
*--------------------------------------
RAMSW.GetPSy lda IO.RDREADAUX
bpl .1
sta IO.CLRREADAUX
lda (pPS),y
sta IO.SETREADAUX
rts
.1 lda (pPS),y
rts
*--------------------------------------
*RAMSW.GetPSyW lda IO.RDREADAUX
* bpl .1
*
* sta IO.CLRREADAUX
*
* lda (pPS),y
* pha
* iny
* lda (pPS),y
* ply
*
* sta IO.SETREADAUX
* rts
*
*.1 lda (pPS),y
* pha
* iny
* lda (pPS),y
* ply
* rts
*--------------------------------------
RAMSW.SetPSy bit IO.RDWRITEAUX
bpl .1
sta IO.CLRWRITEAUX
sta (pPS),y
sta IO.SETWRITEAUX
rts
.1 sta (pPS),y
rts
*--------------------------------------
* From BLIST
*--------------------------------------
BLIST.GetDBlkY lda SLIST.Bnk
sta (pRWReg)
sta IO.SETREADAUX
lda (pDBlk),y
sta IO.CLRREADAUX
pha
lda A2osX.ActBnk
sta (pRWReg)
pla
rts
*--------------------------------------
* From DRV
*--------------------------------------
RAMSW.GetZPpBuf bit A2osX.IOOpt
bpl .1
sta IO.SETREADAUX
lda (ZPpBuf)
sta IO.CLRREADAUX
rts
.1 lda (ZPpBuf)
rts
*--------------------------------------
RAMSW.GetBnkStat
sta IO.SETREADAUX
ldx #7
.1 lda MEM.LoMem,x
sta STAT.BnkStat,x
dex
bpl .1
sta IO.CLRREADAUX
rts
*--------------------------------------
RAMSW.pStack2FAC
lda pStack
ldy pStack+1
RAMSW.AY2FAC sta ZPPtr1 printf
sty ZPPtr1+1
sta IO.SETREADAUX
ldy #4
lda (ZPPtr1),y
sta FAC+4
dey
lda (ZPPtr1),y
sta FAC+3
dey
lda (ZPPtr1),y
sta FAC+2
dey
lda (ZPPtr1),y
sta FAC.SIGN
ora #$80
sta FAC+1
lda (ZPPtr1)
sta FAC
stz FAC.EXTENSION
sta IO.CLRREADAUX
rts
*--------------------------------------
RAMSW.AY2ARG sta ZPPtr1
sty ZPPtr1+1
sta IO.SETREADAUX
ldy #4
lda (ZPPtr1),y
sta ARG+4
dey
lda (ZPPtr1),y
sta ARG+3
dey
lda (ZPPtr1),y
sta ARG+2
dey
lda (ZPPtr1),y
sta ARG.SIGN
eor FAC.SIGN
sta SGNCPR
lda ARG.SIGN
ora #$80
sta ARG+1
lda (ZPPtr1)
sta ARG
sta IO.CLRREADAUX
rts
*--------------------------------------
MAN
SAVE usr/src/sys/kernel.s.ramsw
LOAD usr/src/sys/kernel.s
ASM