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