NEW
  AUTO 3,1
*--------------------------------------
* $E000-E1FF  	System calls Jump Table
*--------------------------------------
*   Bank 1
*--------------------------------------
K.SYSCALL		.DA K.ChTyp				$00 : STAT
				.DA K.ChMod
				.DA K.FStat
				.DA K.Stat
				.DA K.MKDir
				.DA K.MKNod
				.DA K.MKFIFO
				.DA K.Pipe

				.DA K.OpenDir			$10 : DIRENT
				.DA K.ReadDir
				.DA K.FClose
				.DA K.Open				UNISTD
				.DA K.Close
				.DA K.Read
				.DA K.Write
				.DA 0

				.DA K.FPutC				$20 : STDIO
				.DA K.PutChar
				.DA K.GetC
				.DA K.GetChar
				.DA K.FPutS
				.DA K.PutS
				.DA K.FGetS
				.DA 0

				.DA K.FOpen				$30
				.DA K.FClose
				.DA K.FRead
				.DA K.FWrite
				.DA K.FFlush
				.DA K.FSeek
				.DA K.FTell
				.DA K.FEOF

				.DA K.Remove			$40
				.DA K.Rename
				.DA 0
				.DA 0
				.DA K.PrintF
				.DA K.FPrintF
				.DA K.SPrintF
				.DA 0

				.DA K.ScanF				$50
				.DA K.FScanF
				.DA K.SScanF
				.DA 0
				.DA 0
				.DA 0
				.DA 0
				.DA 0
*--------------------------------------
*   Bank 2
*--------------------------------------
				.DA 0			 		$60
				.DA 0
				.DA 0
				.DA 0
				.DA K.Shift				$68	: ARG
				.DA K.ArgV
				.DA K.ArgVDup
				.DA 0

				.DA K.AToF				$70 : STDLIB
				.DA K.AToI
				.DA K.AToL
				.DA K.StrToF
				.DA K.StrToL
				.DA K.StrToUL
				.DA K.RealPath
				.DA K.Expand

				.DA K.StrLen			$80 : STRING
				.DA K.StrCpy
				.DA K.StrCat
				.DA K.StrDup
				.DA K.StrUpr
				.DA K.StrLwr
				.DA K.StrCmp
				.DA K.StrCaseCmp

				.DA K.GetDevByName		$90 : DEV
				.DA K.GetDevStatus
				.DA K.MKDev
				.DA K.IOCTL
				.DA K.LoadLib			BIN
				.DA K.UnloadLib
				.DA K.LoadDrv
				.DA K.InsDrv

				.DA K.ExecL				$A0 : PS
				.DA K.ExecV
				.DA K.Fork
				.DA K.Kill
				.DA K.LoadFile
				.DA K.LoadTxtFile
				.DA K.FileSearch
				.DA K.GetMemStat
*--------------------------------------
*   AUX
*--------------------------------------
				.DA K.StrVShift			$B0 : STRV
				.DA K.StrVGet
				.DA K.StrVAdd
				.DA 0
				.DA K.PutEnv			$B8 : ENV
				.DA K.SetEnv	
				.DA K.GetEnv
				.DA K.UnsetEnv	

				.DA K.Time				$C0 : TIME
				.DA K.StrFTime
				.DA K.PTime2Time
				.DA K.CTime2Time
				.DA K.MD5				$C8 : MD5
				.DA K.MD5Init
				.DA K.MD5Update
				.DA K.MD5Finalize

				.DA K.GetPWUID			$D0 : PWD
				.DA K.GetPWName
				.DA K.PutPW
				.DA K.GetGRGID
				.DA K.GetGRName
				.DA K.PutGR
				.DA 0
				.DA 0

				.DA K.SListGetData		$E0 : SLIST
				.DA K.SListAddData
				.DA K.SListSetData
				.DA K.SListGetByID

				.DA K.SListNewKey
				.DA K.SListLookup
				.DA K.SListFree
				.DA K.SListNew
*--------------------------------------
*  $E000
*--------------------------------------
				.DA K.GetMem			$F0
				.DA K.Realloc
				.DA K.GetMemPtr
				.DA K.FreeMem

				.DA K.GetMem			K.NewStkObj
				.DA K.LoadStkObj
				.DA K.GetMemPtr			K.GetStkObjPtr
				.DA K.FreeMem			K.FreeStkObj
*--------------------------------------
* LO Byte :
*   #RRAMWRAMBNK1,#RRAMWRAMBNK2
* HI Byte :
*   Flags (ROOT....)
*--------------------------------------
K.SYSCALL.BANK	.DA #RRAMWRAMBNK1		$00
				.DA #0
				.DA #RRAMWRAMBNK1
				.DA #0
				.DA #RRAMWRAMBNK1
				.DA #0
				.DA #RRAMWRAMBNK1
				.DA #0
				.DA #RRAMWRAMBNK1
				.DA #0
				.DA #RRAMWRAMBNK1
				.DA #0
				.DA #RRAMWRAMBNK1
				.DA #0
				.DA #RRAMWRAMBNK1
				.DA #0

				.DA #RRAMWRAMBNK1		$10
				.DA #0
				.DA #RRAMWRAMBNK1
				.DA #0
				.DA #RRAMWRAMBNK1
				.DA #0
				.DA #RRAMWRAMBNK1
				.DA #0
				.DA #RRAMWRAMBNK1
				.DA #0
				.DA #RRAMWRAMBNK1
				.DA #0
				.DA #RRAMWRAMBNK1
				.DA #0
				.DA #RRAMWRAMBNK1
				.DA #0		

				.DA #RRAMWRAMBNK1		$20
				.DA #0
				.DA #RRAMWRAMBNK1
				.DA #0
				.DA #RRAMWRAMBNK1
				.DA #0
				.DA #RRAMWRAMBNK1			
				.DA #0
				.DA #RRAMWRAMBNK1
				.DA #0
				.DA #RRAMWRAMBNK1
				.DA #0
				.DA #RRAMWRAMBNK1
				.DA #0
				.DA #RRAMWRAMBNK1
				.DA #0

				.DA #RRAMWRAMBNK1		$30
				.DA #0
				.DA #RRAMWRAMBNK1
				.DA #0
				.DA #RRAMWRAMBNK1
				.DA #0
				.DA #RRAMWRAMBNK1			
				.DA #0
				.DA #RRAMWRAMBNK1
				.DA #0
				.DA #RRAMWRAMBNK1
				.DA #0
				.DA #RRAMWRAMBNK1
				.DA #0
				.DA #RRAMWRAMBNK1
				.DA #0

				.DA #RRAMWRAMBNK1		$40
				.DA #0
				.DA #RRAMWRAMBNK1
				.DA #0
				.DA #RRAMWRAMBNK1
				.DA #0
				.DA #RRAMWRAMBNK1			
				.DA #0
				.DA #RRAMWRAMBNK1
				.DA #0
				.DA #RRAMWRAMBNK1
				.DA #0
				.DA #RRAMWRAMBNK1
				.DA #0
				.DA #RRAMWRAMBNK1
				.DA #0

				.DA #RRAMWRAMBNK1		$50
				.DA #0
				.DA #RRAMWRAMBNK1
				.DA #0
				.DA #RRAMWRAMBNK1
				.DA #0
				.DA #RRAMWRAMBNK1			
				.DA #0
				.DA #RRAMWRAMBNK1
				.DA #0
				.DA #RRAMWRAMBNK1
				.DA #0
				.DA #RRAMWRAMBNK1
				.DA #0
				.DA #RRAMWRAMBNK1
				.DA #0
*--------------------------------------
				.DA #RRAMWRAMBNK2		$60
				.DA #0
				.DA #RRAMWRAMBNK2
				.DA #0
				.DA #RRAMWRAMBNK2
				.DA #0
				.DA #RRAMWRAMBNK2
				.DA #0
				.DA #RRAMWRAMBNK2		$68 : ARG
				.DA #0
				.DA #RRAMWRAMBNK2
				.DA #0
				.DA #RRAMWRAMBNK2
				.DA #0
				.DA #RRAMWRAMBNK2
				.DA #0

				.DA #RRAMWRAMBNK2		$70 : STDLIB
				.DA #0
				.DA #RRAMWRAMBNK2
				.DA #0
				.DA #RRAMWRAMBNK2
				.DA #0
				.DA #RRAMWRAMBNK2
				.DA #0
				.DA #RRAMWRAMBNK2
				.DA #0
				.DA #RRAMWRAMBNK2
				.DA #0
				.DA #RRAMWRAMBNK2
				.DA #0
				.DA #RRAMWRAMBNK2
				.DA #0

				.DA #RRAMWRAMBNK2		$80 : STRING
				.DA #0
				.DA #RRAMWRAMBNK2
				.DA #0
				.DA #RRAMWRAMBNK2
				.DA #0
				.DA #RRAMWRAMBNK2
				.DA #0
				.DA #RRAMWRAMBNK2
				.DA #0
				.DA #RRAMWRAMBNK2
				.DA #0
				.DA #RRAMWRAMBNK2
				.DA #0
				.DA #RRAMWRAMBNK2
				.DA #0

				.DA #RRAMWRAMBNK2		$90 : DEV
				.DA #0
				.DA #RRAMWRAMBNK2
				.DA #0
				.DA #RRAMWRAMBNK2
				.DA #0
				.DA #RRAMWRAMBNK2
				.DA #0
				.DA #RRAMWRAMBNK2		$98 : BIN
				.DA #0
				.DA #RRAMWRAMBNK2
				.DA #0
				.DA #RRAMWRAMBNK2
				.DA #0
				.DA #RRAMWRAMBNK2
				.DA #0

				.DA #RRAMWRAMBNK2		$A0 : PS
				.DA #0
				.DA #RRAMWRAMBNK2
				.DA #0
				.DA #RRAMWRAMBNK2
				.DA #0
				.DA #RRAMWRAMBNK2
				.DA #0
				.DA #RRAMWRAMBNK2
				.DA #0
				.DA #RRAMWRAMBNK2
				.DA #0
				.DA #RRAMWRAMBNK2
				.DA #0
				.DA #RRAMWRAMBNK2
				.DA #0

				.DA #0					$B0 : STRV
				.DA #0
				.DA #0
				.DA #0
				.DA #0
				.DA #0
				.DA #0
				.DA #0
				.DA #0					$B8 : ENV
				.DA #0
				.DA #0
				.DA #0
				.DA #0
				.DA #0
				.DA #0
				.DA #0

				.DA #0					$C0 : TIME
				.DA #0
				.DA #0
				.DA #0
				.DA #0
				.DA #0
				.DA #0
				.DA #0
				.DA #0					$C8 : MD5
				.DA #0
				.DA #0
				.DA #0
				.DA #0
				.DA #0
				.DA #0
				.DA #0

				.DA #0					$D0 : PWD
				.DA #0
				.DA #0
				.DA #0
				.DA #0
				.DA #0
				.DA #0
				.DA #0

				.DA #0
				.DA #0
				.DA #0
				.DA #0
				.DA #0
				.DA #0
				.DA #0
				.DA #0

				.DA #0					$E0 : SLIST
				.DA #0
				.DA #0
				.DA #0
				.DA #0
				.DA #0
				.DA #0
				.DA #0
				.DA #0
				.DA #0
				.DA #0
				.DA #0
				.DA #0
				.DA #0
				.DA #0
				.DA #0
*--------------------------------------
				.DA #0					$E0 : MemMgr at $E000
				.DA #0
				.DA #0
				.DA #0
				.DA #0
				.DA #0
				.DA #0
				.DA #0
				.DA #$C0				NewStkObj
				.DA #0
				.DA #0					LoadStkObj
				.DA #0
				.DA #$C0				GetStkObjPtr
				.DA #0
				.DA #$C0				FreeStkObj
				.DA #0
*--------------------------------------
* K.SYSCALL2 : From KERNEL (MAIN,AUX), LIB
*--------------------------------------
K.SYSCALL2		bit K.SYSCALL.BANK,x	Get Target BNK
				bvc K.SYSCALL2.BANK

K.SYSCALL2.AUX	sta SETREADAUX			MAIN to AUX Mem API
				sta SETWRITEAUX
				jsr K.SYSCALL.JMP
				sta CLRREADAUX
				sta CLRWRITEAUX
				rts

K.SYSCALL2.MAIN	sta CLRREADAUX			Coming from KERNEL in AUX...
				sta CLRWRITEAUX
				jsr .1
				sta SETREADAUX
				sta SETWRITEAUX
				rts
.1				bit K.SYSCALL.BANK,x	Get Target LC BNK

K.SYSCALL2.BANK	bpl K.SYSCALL.JMP		0, E000, no BNK change
				sta .7+1
				lda $D000				#RRAMWRAMBNK1 or #RRAMWRAMBNK2
				cmp K.SYSCALL.BANK,x
				beq .7
				pha						remember source BNK
				stx .6+1
				lda K.SYSCALL.BANK,x
				tax						get Target BNK in x
				bit $C000,x				switch to Target BNK
				bit $C000,x

				jsr .6

				stx .5+1				Save X
				plx						get back Source BNK
				bit $C000,x				switch to Target BNK
				bit $C000,x

.5				ldx #$ff				SELF MODIFIED
				rts
.6				ldx #$ff				SELF MODIFIED
.7				lda #$ff				SELF MODIFIED

K.SYSCALL.JMP	jmp (K.SYSCALL,x)
*--------------------------------------
K.SYSCALL.JMPX	sta SETREADAUX
				sta SETWRITEAUX
				jsr .1
				sta CLRREADAUX
				sta CLRWRITEAUX
				rts
				
.1				jmp (.2-SYS.StrVShift,x)

.2				.DA STRVX.StrVShift
				.DA STRVX.StrVGet
				.DA STRVX.StrVAdd
				.DA 0
				
				.DA ENVX.PutEnv
				.DA ENVX.SetEnv
				.DA ENVX.GetEnv
				.DA ENVX.UnsetEnv

				.DA 0					Time
				.DA TIMEX.StrFTime
				.DA TIMEX.PTime2Time
				.DA TIMEX.CTime2Time
				
				.DA MD5X.MD5
				.DA MD5X.Init
				.DA MD5X.Update
				.DA MD5X.Finalize
				
				.DA PWDX.GetPWUID
				.DA PWDX.GetPWName
				.DA PWDX.PutPW
				.DA PWDX.GetGRGID
				.DA PWDX.GetGRName
				.DA PWDX.PutGR
				.DA 0
				.DA 0
				
				.DA SLISTX.SListGetData
				.DA SLISTX.SListAddData
				.DA SLISTX.SListSetData
				.DA SLISTX.SListGetByID

				.DA SLISTX.SListNewKey
				.DA SLISTX.SListLookup
				.DA SLISTX.SListFree
				.DA SLISTX.SListNew
*--------------------------------------
MAN
SAVE USR/SRC/SYS/KERNEL.S.JMP
LOAD USR/SRC/SYS/KERNEL.S
ASM
