PR#3 PREFIX /A2OSX.BUILD LOMEM $A00 INC 1 AUTO 6 *-------------------------------------- * SYSCALL (AUXLC to AUXLC) * Used by user & kernel for inter bank Calls * In: * X = SYSfnc.Index * Y,A = free for Inline param *-------------------------------------- jmp GP.SysCall *-------------------------------------- * LIBCALL (AUXLC to AUXLC) * Used by user * In: * Y = LIB.ID * X = LIBfnc.Index * A = free for Inline param *-------------------------------------- jmp GP.LibCall *-------------------------------------- * AppleTalk MLICALL (AUXLC to MAINLC) * Used by user * In: * Y,A = Params *-------------------------------------- jmp GP.AtkCall *-------------------------------------- * MLICALL (AUXLC to MAINLC) * Used by Kernel * In: * X = MLI Function * A = Param Count *-------------------------------------- jmp GP.ROMCall *-------------------------------------- * BADCALL *-------------------------------------- lda #MLI.E.BADCALL sec rts *-------------------------------------- jmp (pDev) pDevJmp *-------------------------------------- * SLEEP *-------------------------------------- pla get PC LO sec sbc pCode ldy #S.PS.PC sta (pPs),y pla get PC HI sbc pCode+1 iny sta (pPs),y lda (pPs) ora #S.PS.F.SLEEP sta (pPs) clc rts *-------------------------------------- * *** MUST BE REINTRANT *** *-------------------------------------- GP.SysCall bit K.SYSCALL.BANK,x bpl .8 in $E000, no BNK change sta .7+1 save A (Func Arg) lda K.SYSCALL.BANK,x Get Target BNK cmp $D000 #RRAMWRAMBNK1 or #RRAMWRAMBNK2 beq .7 same as actual BNK...go restore A and JMP stx .6+1 save X (Func ID) tax set Target BNK in x lda $D000 get source BNK bit $C000,x switch to Target BNK bit $C000,x pha jsr .6 go to kernel..... stx .5+1 save X plx get back Source BNK bit $C000,x bit $C000,x .5 ldx #$FF Self Modified rts Unmodified Carry .6 ldx #$FF Self Modified .7 lda #$FF Self Modified .8 jmp (K.SYSCALL.JMP,x) *-------------------------------------- GP.LibCall pha No need to save X, K.GetMemPtr.A will leave it unmodified tya Get LIB hMem in A jsr K.GetMemPtr.A Get LIB Code Segment (MemMgr in $E000, no BNK change) >STYA .1+1 pla .1 jmp * *-------------------------------------- GP.AtkCall >STYA .1 jsr GO.ProDOS jsr MLI .DA #MLIATALK .1 .DA * jsr GO.A2osX rts *-------------------------------------- GP.ROMCall phx ldx $D000 stx .8+1 bit RROMBNK1 plx jsr .1 .8 ldx #$ff bit $C000,x bit $C000,x rts .1 jmp (.2,x) * http://www.txbobsc.com/scsc/scdocumentor/E7A0.html .2 .DA $E7AA FSUBT .DA $E7C1 FADDT .DA $E82E NORMALIZE.FAC.2 (L->F) .DA $E941 LOG .DA $E987 FMULTT.1 .DA $E9E7 LOAD.ARG.FROM.INDEX .DA $EA6B FDIVT+2 .DA $EAFD LOAD.FAC.FROM.INDEX .DA $EB27 SETFOR (GETFAC) .DA $EBB2 FCOMP .DA $EBF2 QINT (F->L) .DA $EC4A FIN StrToF .DA $ED36 FOUT.1 PrintF .DA $EE8D SQR .DA $EE97 FPWRT .DA $EF09 EXP .DA $EFEA COS .DA $EFF1 SIN .DA $F03A TAN .DA $F09E ATN *-------------------------------------- GP.MLICall stx .1 sta K.MLI.PARAMS jsr GO.ProDOS jsr MLI .1 .BS 1 .DA K.MLI.PARAMS jsr GO.A2osX rts *-------------------------------------- GO.ProDOS pha lda $D000 We re coming from AUXLC, saving bank... sta GO.A2osX.BNK+1 pla php clc .HS 2C bit abs GO.A2osX php sec sei sta GO.EXIT.SaveA+1 stx GO.EXIT.SaveX+1 sty GO.EXIT.SaveY+1 pla Restore P in A for later plx Get PC and add 1 for return ply inx bne .1 iny .1 stx GO.EXIT.JMP+1 sty GO.EXIT.JMP+2 bcs GO.A2osX.BNK if CS, go AUXLC bit RRAMWRAMBNK1 Go MAINLC (ProDOS), always BNK1 bit RRAMWRAMBNK1 tsx stx A2osX.SaveSX ldx A2osX.SaveSM txs sta CLRALTZP bra GO.EXIT GO.A2osX.BNK ldx #RRAMWRAMBNK1 Self Modified, initialized to BNK1 for INIT3 bit $C000,x bit $C000,x sta SETALTZP tsx stx A2osX.SaveSM ldx A2osX.SaveSX txs *-------------------------------------- GO.EXIT pha push P on stack GO.EXIT.SaveY ldy #$ff GO.EXIT.SaveX ldx #$ff GO.EXIT.SaveA lda #$ff plp GO.EXIT.JMP jmp $FFFF Self Modified *-------------------------------------- * Called from ProDOS IRQ Manager (LCBNK1) * A,X,Y, $FA->$FF Already Saved * Main RAM,ZP/LC selected * must begin with CLD * must exit with RTS * - CC if IRQ cleared, CS if NOT *-------------------------------------- GP.IrqH cld lda RDALTZP sta .2+1 bmi .1 we are already in AuxZP/LC sta SETALTZP coming from MainLC, switch to aux tsx stx A2osX.SaveSM ldx A2osX.SaveSX txs .1 jsr K.IrqH .2 lda #$ff get back ZP status when called bmi .3 we were coming from AuxZP/LC tsx go back to Main stx A2osX.SaveSX ldx A2osX.SaveSM txs sta CLRALTZP .3 rts *-------------------------------------- *GO.Reset jsr GO.A2osX * jmp CORE.Run *-------------------------------------- *BrkHandler bra * *-------------------------------------- .BS $BEE0-* *-------------------------------------- * $BEE0->$BEEF : Public Variables *-------------------------------------- .BS 16 *-------------------------------------- * $BEF0->$BEFF : Kernel Config Block *-------------------------------------- .DA #6 60hz .BS 7 .DA #0 ChRoot Disabled .BS 7 All Slots marked as "Free" *-------------------------------------- MAN SAVE /A2OSX.SRC/SYS/KERNEL.S.GP LOAD /A2OSX.SRC/SYS/KERNEL.S ASM