diff --git a/AsmSymScanner.py b/AsmSymScanner.py new file mode 100755 index 0000000..a14a1f5 --- /dev/null +++ b/AsmSymScanner.py @@ -0,0 +1,136 @@ +#!/usr/bin/env python3 + +import sys +import re +import os.path + +HEADER = 'AUTO-GENERATED SYMBOL LIST' +ENC = 'macroman' +RECORD = re.compile(r'^[^;\s]*\s+record', re.I) +ENDR = re.compile(r'^\s+endr', re.I) + +SETEQU = re.compile(r'^\S+\s+(dc\.|ds\.|set|equ|record)', flags=re.I) + +def neaten_name(x): + bn = os.path.basename(x) + bn = os.path.splitext(bn)[0] + return bn + +all_args = list(sys.argv[1:]) +opts = [] + +while all_args and all_args[0].startswith('-'): + opts.append(all_args.pop(0)) + +fnames = all_args + +fnames = [fn for fn in fnames if HEADER in open(fn, encoding=ENC).read(2048)] + +fexports = [] +for name in fnames: + exports = set() + can_keep = False + + with open(name, encoding=ENC) as f: + forbid = False + for l in f: + if not forbid and RECORD.match(l): + forbid=True + elif forbid and ENDR.match(l): + forbid=False + + if not forbid: + m = re.match(r'^(\w+)', l) + if m and not SETEQU.match(l): + exports.add(m.group(1)) + + fexports.append(exports) + +regex_cache = {} +for export_set in fexports: + for export in export_set: + if export not in regex_cache: + regex_cache[export] = re.compile(r'^[^;]+\b' + re.escape(export) + r'\b', flags=re.I) + +export_matrix = set() +for expname, exports in zip(fnames, fexports): + for impname in fnames: + if impname == expname: continue + + with open(impname, encoding=ENC) as f: + for l in f: + for e in exports: + er = regex_cache[e] + if er.match(l): + export_matrix.add((expname, impname, e)) + +for exp, imp, sym in sorted(export_matrix): + print(exp.rpartition('/')[2], imp.rpartition('/')[2], sym) + +dict_exporter = {} +for exp, imp, sym in export_matrix: + dict_exporter[sym] = exp + +dict_importers = {} +for exp, imp, sym in export_matrix: + if sym not in dict_importers: + dict_importers[sym] = set() + dict_importers[sym].add(imp) + +dict_fileimports = {} +for exp, imp, sym in export_matrix: + if imp not in dict_fileimports: + dict_fileimports[imp] = set() + dict_fileimports[imp].add(sym) + +dict_fileexports = {} +for exp, imp, sym in export_matrix: + if exp not in dict_fileexports: + dict_fileexports[exp] = set() + dict_fileexports[exp].add(sym) + +for f in fnames: + if f not in dict_fileimports: + dict_fileimports[f] = set() + if f not in dict_fileexports: + dict_fileexports[f] = set() + +for path in fnames: + with open(path, encoding=ENC) as i: + with open(path + '~', 'w', encoding=ENC) as o: + for l in i: + o.write(l) + if HEADER in l: + prefix, _, suffix = l.partition(HEADER) + imports = sorted(dict_fileimports[path]) + exports = sorted(dict_fileexports[path]) + + if imports: + dict_exp_to_imp = {} + for imp in imports: + exporter = dict_exporter[imp] + if exporter not in dict_exp_to_imp: + dict_exp_to_imp[exporter] = set() + dict_exp_to_imp[exporter].add(imp) + + o.write(prefix + 'IMPORTS:' + suffix) + + for exp, imps in sorted(dict_exp_to_imp.items()): + o.write(prefix + ' ' + neaten_name(exp) + suffix) + for imp in sorted(imps): + o.write(prefix + ' ' + imp + suffix) + + if exports: + o.write(prefix + 'EXPORTS:' + suffix) + for exp in exports: + importers = sorted(dict_importers[exp]) + importers = [neaten_name(x) for x in importers] + impstring = ' (=> %s)' % (', '.join(importers)) + o.write(prefix + ' ' + exp + impstring + suffix) + + for l in i: + if not l.startswith(prefix): + o.write(l) + break + + os.rename(path + '~', path) diff --git a/NanoKernel/NKAddressSpaces.s b/NanoKernel/NKAddressSpaces.s index 07e1684..15381bf 100644 --- a/NanoKernel/NKAddressSpaces.s +++ b/NanoKernel/NKAddressSpaces.s @@ -1,3 +1,53 @@ +; AUTO-GENERATED SYMBOL LIST +; IMPORTS: +; NKConsoleLog +; printw +; NKIndex +; DeleteID +; GetNextIDOfClass +; LookupID +; MakeID +; NKMPCalls +; CommonMPCallReturnPath +; ReleaseAndMPCallWasBad +; ReleaseAndReturnMPCall +; ReleaseAndReturnMPCallInvalidIDErr +; ReleaseAndReturnMPCallOOM +; ReleaseAndReturnMPCallPrivilegedErr +; ReleaseAndReturnParamErrFromMPCall +; ReleaseAndReturnZeroFromMPCall +; ReleaseAndScrambleMPCall +; ReturnMPCallInvalidIDErr +; ReturnMPCallOOM +; ReturnParamErrFromMPCall +; ReturnZeroFromMPCall +; major_0x0b0cc +; NKPoolAllocator +; PoolAllocClear +; PoolFree +; NKSync +; CauseNotification +; SetEvent +; NKThud +; panic +; EXPORTS: +; CreateArea (=> NKVMCalls) +; CreateAreasFromPageMap (=> NKInit) +; DeletePTE (=> NKVMCalls) +; FindAreaAbove (=> NKInterrupts, NKPaging, NKTasks, NKVMCalls) +; FreePageListPush (=> NKInit) +; GetPTEFromPLE (=> NKVMCalls) +; InitFreePageList (=> NKInit) +; InvalPTE (=> NKVMCalls) +; MPCall_95_0x254 (=> NKPaging) +; NKCreateAddressSpaceSub (=> NKInit) +; SetPTE (=> NKVMCalls) +; SpaceGetPagePLE (=> NKInterrupts, NKPaging, NKVMCalls) +; SpaceL2PIgnoringBATs (=> NKMPCalls) +; SpaceL2PUsingBATs (=> NKInterrupts, NKMPCalls) + + + ##### ###### ### # # ##### ## #### ###### # # ## # # # #### # #### # ## # # ##### # # # # # # # # # # # # ## # # # # # # # # # ## # # # diff --git a/NanoKernel/NKBuiltinInit.s b/NanoKernel/NKBuiltinInit.s index fc55035..1fb85a4 100644 --- a/NanoKernel/NKBuiltinInit.s +++ b/NanoKernel/NKBuiltinInit.s @@ -1,3 +1,23 @@ +; AUTO-GENERATED SYMBOL LIST +; IMPORTS: +; NKConsoleLog +; printh +; NKInit +; FinishInitBuiltin +; InitIRP +; NKPrimaryIntHandlers +; LookupInterruptHandler +; NKProcInfoTbl +; OverrideProcessorInfo +; ProcessorInfoTable +; NKScreenConsole +; InitScreenConsole +; NKTranslation +; FDP +; EXPORTS: +; InitBuiltin (=> NKInit) + + ; When we receive control: ; r3 = ConfigInfo ; r4 = ProcessorInfo diff --git a/NanoKernel/NKCache.s b/NanoKernel/NKCache.s index d67d793..cf88dee 100644 --- a/NanoKernel/NKCache.s +++ b/NanoKernel/NKCache.s @@ -39,6 +39,15 @@ ; checked L1 but did not set 1 ; checked L2 but did not set 2 +; AUTO-GENERATED SYMBOL LIST +; IMPORTS: +; NKInterrupts +; IntReturn +; EXPORTS: +; FlushCaches (=> NKPowerCalls) +; FlushL1CacheUsingMSSCR0 (=> NKInterrupts) +; kcCacheDispatch (=> NKInit) + ; DeclareMPCall 199, kcCacheDispatch ; DEBUG kcCacheDispatch diff --git a/NanoKernel/NKConsoleLog.s b/NanoKernel/NKConsoleLog.s index 20e10ff..f859ddc 100644 --- a/NanoKernel/NKConsoleLog.s +++ b/NanoKernel/NKConsoleLog.s @@ -1,3 +1,20 @@ +; AUTO-GENERATED SYMBOL LIST +; IMPORTS: +; NKScreenConsole +; ScreenConsole_putchar +; ScreenConsole_redraw +; EXPORTS: +; getchar (=> NKThud, NKTimers) +; print_unknown (=> NKThud) +; printb (=> NKInit, NKMPCalls, NKTimers) +; printc (=> NKInit, NKPoolAllocator, NKThud) +; printd (=> NKInit, NKMPCalls, NKPoolAllocator, NKTimers) +; printh (=> NKBuiltinInit, NKMPCalls, NKReplacementInit, NKScheduler, NKThud, NKTimers) +; prints (=> NKMPCalls, NKThud) +; printw (=> NKAddressSpaces, NKInit, NKInterrupts, NKMPCalls, NKPaging, NKPoolAllocator, NKReplacementInit, NKScheduler, NKThud, NKTimers, NKVMCalls) + + + ; prints ; _log null-terminated string with a few special escapes. diff --git a/NanoKernel/NKIndex.s b/NanoKernel/NKIndex.s index 4f370b0..82f079b 100644 --- a/NanoKernel/NKIndex.s +++ b/NanoKernel/NKIndex.s @@ -15,6 +15,19 @@ ; accessed by way of this ID. The kernel presently handles 65,000 ; simultaneous IDs with a bit pattern reuse probability of 1 in 4 ; billion. +; +; AUTO-GENERATED SYMBOL LIST +; IMPORTS: +; NKPoolAllocator +; PoolAllocClear +; NKThud +; panic +; EXPORTS: +; DeleteID (=> NKAddressSpaces, NKMPCalls, NKSync, NKTasks, NKTimers) +; GetNextIDOfClass (=> NKAddressSpaces, NKMPCalls, NKThud) +; InitIDIndex (=> NKInit) +; LookupID (=> NKAddressSpaces, NKInterrupts, NKMPCalls, NKPrimaryIntHandlers, NKSync, NKTasks, NKThud, NKTimers) +; MakeID (=> NKAddressSpaces, NKInit, NKMPCalls, NKSync, NKTasks) ;_______________________________________________________________________ Local_Panic set * diff --git a/NanoKernel/NKInit.s b/NanoKernel/NKInit.s index 2953953..95ea8c2 100644 --- a/NanoKernel/NKInit.s +++ b/NanoKernel/NKInit.s @@ -38,6 +38,101 @@ ; r6 = PA_EDP or zero? ; r7 = ROMHeader.ROMRelease (e.g. 0x10B5 is 1.0ß5) +; AUTO-GENERATED SYMBOL LIST +; IMPORTS: +; NKAddressSpaces +; CreateAreasFromPageMap +; FreePageListPush +; InitFreePageList +; NKCreateAddressSpaceSub +; NKBuiltinInit +; InitBuiltin +; NKCache +; kcCacheDispatch +; NKConsoleLog +; printb +; printc +; printd +; printw +; NKIndex +; InitIDIndex +; MakeID +; NKInterrupts +; HandlePerfMonitorInt +; IgnoreSoftwareInt +; IntAlignment +; IntDSI +; IntDecrementer +; IntExternalAlternate +; IntExternalSystem +; IntFPUnavail +; IntISI +; IntMachineCheck +; IntPerfMonitor +; IntProgram +; IntSyscall +; IntThermalEvent +; IntTrace +; MemRetryDSI +; MemRetryMachineCheck +; PIHDSI +; kcPrioritizeInterrupts +; kcResetSystem +; kcReturnFromException +; kcRunAlternateContext +; kcThud +; major_0x046d0 +; major_0x04a20 +; wordfill +; NKMPCalls +; kcMPDispatch +; NKPaging +; PagingFlushTLB +; PagingFunc1 +; PagingFunc2 +; PagingL2PWithoutBATs +; NKPoolAllocator +; InitPool +; PoolAllocClear +; NKPowerCalls +; InitIdleVecTable +; kcPowerDispatch +; NKProcFlagsTbl +; ProcessorFlagsTable +; NKRTASCalls +; kcRTASDispatch +; NKReplacementInit +; InitReplacement +; NKScheduler +; CalculateTimeslice +; FlagSchEval +; SchIdleTask +; SchInit +; SchRdyTaskNow +; SchRestoreStartingAtR14 +; SchSwitchSpace +; NKScreenConsole +; InitScreenConsole +; NKTasks +; CreateTask +; NKThud +; panic +; NKTimers +; InitTMRQs +; StartTimeslicing +; NKTranslation +; FDP_1c40 +; ProbePerfMonitor +; NKVMCalls +; kcVMDispatch +; EXPORTS: +; CancelReplacement (=> NKReplacementInit) +; FinishInitBuiltin (=> NKBuiltinInit) +; InitHighLevel (=> NKReplacementInit) +; InitIRP (=> NKBuiltinInit, NKReplacementInit) +; ResetBuiltinKernel (=> NKInterrupts) + + ; First we need to avoid executing the data that follows: diff --git a/NanoKernel/NKInterrupts.s b/NanoKernel/NKInterrupts.s index 51328ac..ec49f23 100644 --- a/NanoKernel/NKInterrupts.s +++ b/NanoKernel/NKInterrupts.s @@ -23,6 +23,97 @@ ecUnknown24 equ 24 ; ExceptionMemRetried +; AUTO-GENERATED SYMBOL LIST +; IMPORTS: +; NKAddressSpaces +; FindAreaAbove +; SpaceGetPagePLE +; SpaceL2PUsingBATs +; NKCache +; FlushL1CacheUsingMSSCR0 +; NKConsoleLog +; printw +; NKIndex +; LookupID +; NKInit +; ResetBuiltinKernel +; NKMPCalls +; BlockMPCall +; kcMPDispatch +; NKPaging +; PagingFunc1 +; PagingL2PWithBATs +; NKPoolAllocator +; PoolAlloc +; NKScheduler +; FlagSchEval +; Restore_v0_v31 +; Save_v0_v31 +; SchEval +; SchExitInterrupt +; SchFiddlePriorityShifty +; SchRdyTaskNow +; SchRestoreStartingAtR14 +; SchReturn +; SchSaveStartingAtR14 +; SchSwitchSpace +; SchTaskUnrdy +; NKSync +; CauseNotification +; EnqueueMessage +; UnblockBlueIfCouldBePolling +; NKTasks +; ThrowTaskToDebugger +; NKThud +; panic +; NKTimers +; TimerDispatch +; NKTranslation +; FDPEmulateInstruction +; FDP_003c +; FDP_011c +; FDP_0DA0 +; EXPORTS: +; Exception (=> NKThud, NKTranslation) +; ExceptionMemRetried (=> NKTranslation) +; FloatLoadJumpTable (=> NKTranslation) +; FloatSaveJumpTable (=> NKTranslation) +; HandlePerfMonitorInt (=> NKInit) +; IgnoreSoftwareInt (=> NKInit, NKTranslation) +; IntAlignment (=> NKInit) +; IntDSI (=> NKInit) +; IntDecrementer (=> NKInit) +; IntExternalAlternate (=> NKInit) +; IntExternalSystem (=> NKInit) +; IntFPUnavail (=> NKInit) +; IntHandleSpecialFPException (=> NKRTASCalls) +; IntISI (=> NKInit) +; IntMachineCheck (=> NKInit) +; IntPerfMonitor (=> NKInit) +; IntProgram (=> NKInit) +; IntReturn (=> NKCache, NKMPCalls, NKPowerCalls, NKPrimaryIntHandlers, NKRTASCalls, NKVMCalls) +; IntSyscall (=> NKInit) +; IntThermalEvent (=> NKInit) +; IntTrace (=> NKInit) +; LoadInterruptRegisters (=> NKTranslation) +; MemRetryDSI (=> NKInit) +; MemRetryMachineCheck (=> NKInit) +; PIHDSI (=> NKInit) +; SIGP (=> NKMPCalls, NKScheduler, NKSleep) +; bugger_around_with_floats (=> NKRTASCalls) +; kcPrioritizeInterrupts (=> NKInit) +; kcResetSystem (=> NKInit) +; kcReturnFromException (=> NKInit) +; kcRunAlternateContext (=> NKInit) +; kcThud (=> NKInit) +; major_0x03324 (=> NKTranslation) +; major_0x03548 (=> NKTranslation) +; major_0x046d0 (=> NKInit) +; major_0x04a20 (=> NKInit) +; wordfill (=> NKInit, NKPowerCalls) + + + IntPanicIsland b panic diff --git a/NanoKernel/NKMPCalls.s b/NanoKernel/NKMPCalls.s index e578aa8..d1efd4c 100644 --- a/NanoKernel/NKMPCalls.s +++ b/NanoKernel/NKMPCalls.s @@ -9,6 +9,85 @@ +; AUTO-GENERATED SYMBOL LIST +; IMPORTS: +; NKAddressSpaces +; SpaceL2PIgnoringBATs +; SpaceL2PUsingBATs +; NKConsoleLog +; printb +; printd +; printh +; prints +; printw +; NKIndex +; DeleteID +; GetNextIDOfClass +; LookupID +; MakeID +; NKInterrupts +; IntReturn +; SIGP +; NKPaging +; PagingL2PWithBATs +; NKPoolAllocator +; ExtendPool +; PoolAllocClear +; PoolFree +; NKScheduler +; CalculateTimeslice +; FlagSchEval +; FlagSchEvaluationIfTaskRequires +; NewCpuEntryPoint +; Save_v0_v31 +; SchEval +; SchIdleTask +; SchIdleTaskStopper +; SchRdyTaskLater +; SchRdyTaskNow +; SchRestoreStartingAtR14 +; SchSaveStartingAtR14 +; SchTaskUnrdy +; NKScreenConsole +; ScreenConsole_redraw +; NKTasks +; CreateTask +; NKThud +; panic +; NKTimers +; DequeueTimer +; EnqueueTimer +; GetTime +; NKVMCalls +; EditPTEInHTAB +; GetPARPageInfo +; RemovePageFromTLB +; VMSecondLastExportedFunc +; EXPORTS: +; BlockMPCall (=> NKInterrupts, NKSync) +; CommonMPCallReturnPath (=> NKAddressSpaces, NKSleep, NKTasks) +; MPCall_6_0x78 (=> NKTasks) +; ReleaseAndMPCallWasBad (=> NKAddressSpaces) +; ReleaseAndReturnMPCall (=> NKAddressSpaces, NKSync, NKTasks) +; ReleaseAndReturnMPCallBlueBlocking (=> NKSync) +; ReleaseAndReturnMPCallInvalidIDErr (=> NKAddressSpaces, NKSync, NKTasks) +; ReleaseAndReturnMPCallOOM (=> NKAddressSpaces, NKSync, NKTasks) +; ReleaseAndReturnMPCallPrivilegedErr (=> NKAddressSpaces) +; ReleaseAndReturnMPCallTaskAborted (=> NKSync) +; ReleaseAndReturnParamErrFromMPCall (=> NKAddressSpaces, NKSync) +; ReleaseAndReturnZeroFromMPCall (=> NKAddressSpaces, NKSync, NKTasks) +; ReleaseAndScrambleMPCall (=> NKAddressSpaces, NKSync, NKTasks) +; ReleaseAndTimeoutMPCall (=> NKSync) +; ReturnMPCallInvalidIDErr (=> NKAddressSpaces, NKTasks) +; ReturnMPCallOOM (=> NKAddressSpaces, NKPrimaryIntHandlers, NKSleep, NKSync, NKTasks) +; ReturnParamErrFromMPCall (=> NKAddressSpaces, NKPrimaryIntHandlers, NKSleep) +; ReturnZeroFromMPCall (=> NKAddressSpaces, NKSleep, NKSync) +; ScrambleMPCall (=> NKSync) +; kcMPDispatch (=> NKInit, NKInterrupts) +; major_0x0b0cc (=> NKAddressSpaces) + + + ;MPCall_Panic set MPCall_Panic diff --git a/NanoKernel/NKPaging.s b/NanoKernel/NKPaging.s index ef97d70..e67aaf2 100644 --- a/NanoKernel/NKPaging.s +++ b/NanoKernel/NKPaging.s @@ -3,6 +3,26 @@ Local_Panic set * +; AUTO-GENERATED SYMBOL LIST +; IMPORTS: +; NKAddressSpaces +; FindAreaAbove +; MPCall_95_0x254 +; SpaceGetPagePLE +; NKConsoleLog +; printw +; NKThud +; panic +; EXPORTS: +; PagingFlushTLB (=> NKInit, NKScheduler, NKSleep) +; PagingFunc1 (=> NKInit, NKInterrupts, NKThud, NKVMCalls) +; PagingFunc2 (=> NKInit) +; PagingFunc2AndAHalf (=> NKSleep) +; PagingL2PWithBATs (=> NKInterrupts, NKMPCalls, NKRTASCalls, NKSleep) +; PagingL2PWithoutBATs (=> NKInit, NKScreenConsole, NKThud) + + + align 5 PagingFunc1 ; OUTSIDE REFERER diff --git a/NanoKernel/NKPoolAllocator.s b/NanoKernel/NKPoolAllocator.s index 8597314..18053d9 100644 --- a/NanoKernel/NKPoolAllocator.s +++ b/NanoKernel/NKPoolAllocator.s @@ -34,6 +34,23 @@ +; AUTO-GENERATED SYMBOL LIST +; IMPORTS: +; NKConsoleLog +; printc +; printd +; printw +; NKThud +; panic +; EXPORTS: +; ExtendPool (=> NKMPCalls) +; InitPool (=> NKInit) +; PoolAlloc (=> NKInterrupts, NKSync, NKTasks) +; PoolAllocClear (=> NKAddressSpaces, NKIndex, NKInit, NKMPCalls, NKSync, NKTasks, NKTimers, NKVMCalls) +; PoolFree (=> NKAddressSpaces, NKMPCalls, NKSync, NKTasks, NKTimers) + + + Block record kBeginSize equ 8 diff --git a/NanoKernel/NKPowerCalls.s b/NanoKernel/NKPowerCalls.s index 9b10339..d3cddc3 100644 --- a/NanoKernel/NKPowerCalls.s +++ b/NanoKernel/NKPowerCalls.s @@ -1,3 +1,17 @@ +; AUTO-GENERATED SYMBOL LIST +; IMPORTS: +; NKCache +; FlushCaches +; NKInterrupts +; IntReturn +; wordfill +; NKThud +; panic +; EXPORTS: +; InitIdleVecTable (=> NKInit) +; kcPowerDispatch (=> NKInit) + + #### ## ## #### ######## ## ## ######## ###### ######## ######## ## ## ### ## ## ## ## ## ## ## ## ## ## ## ## ## #### ## ## ## ## ## ## ## ## ## ## ## diff --git a/NanoKernel/NKPrimaryIntHandlers.s b/NanoKernel/NKPrimaryIntHandlers.s index ee7adad..c37510b 100644 --- a/NanoKernel/NKPrimaryIntHandlers.s +++ b/NanoKernel/NKPrimaryIntHandlers.s @@ -1,3 +1,29 @@ +; AUTO-GENERATED SYMBOL LIST +; IMPORTS: +; NKIndex +; LookupID +; NKInterrupts +; IntReturn +; NKMPCalls +; ReturnMPCallOOM +; ReturnParamErrFromMPCall +; NKScheduler +; CalculateTimeslice +; FlagSchEvaluationIfTaskRequires +; SchRdyTaskLater +; SchRestoreStartingAtR14 +; SchRestoreStartingAtR20 +; SchSaveStartingAtR20 +; SchTaskUnrdy +; NKSync +; CauseNotification +; NKTimers +; DequeueTimer +; EXPORTS: +; LookupInterruptHandler (=> NKBuiltinInit, NKReplacementInit) + + + ; LookupInterruptHandler ; Called at init time to get the (64b-aligned) physical address diff --git a/NanoKernel/NKProcFlagsTbl.s b/NanoKernel/NKProcFlagsTbl.s index e3c31f0..2e41a79 100644 --- a/NanoKernel/NKProcFlagsTbl.s +++ b/NanoKernel/NKProcFlagsTbl.s @@ -1,3 +1,7 @@ +; AUTO-GENERATED SYMBOL LIST +; EXPORTS: +; ProcessorFlagsTable (=> NKInit) + ; Contains the table used by Init.s:SetProcessorFlags, and a label to find it with. ; ; Using this table, three fields in KDP are set: diff --git a/NanoKernel/NKProcInfoTbl.s b/NanoKernel/NKProcInfoTbl.s index 2ea381f..dbc9155 100644 --- a/NanoKernel/NKProcInfoTbl.s +++ b/NanoKernel/NKProcInfoTbl.s @@ -1,3 +1,8 @@ +; AUTO-GENERATED SYMBOL LIST +; EXPORTS: +; OverrideProcessorInfo (=> NKBuiltinInit) +; ProcessorInfoTable (=> NKBuiltinInit) + ; Contains the table used by InitBuiltin.s:OverrideProcessorInfo ; ; If the Trampoline fails to pass in a signed HardwareInfo struct, diff --git a/NanoKernel/NKRTASCalls.s b/NanoKernel/NKRTASCalls.s index 4b89a2c..0e79c24 100644 --- a/NanoKernel/NKRTASCalls.s +++ b/NanoKernel/NKRTASCalls.s @@ -1,3 +1,17 @@ +; AUTO-GENERATED SYMBOL LIST +; IMPORTS: +; NKInterrupts +; IntHandleSpecialFPException +; IntReturn +; bugger_around_with_floats +; NKPaging +; PagingL2PWithBATs +; NKThud +; panic +; EXPORTS: +; kcRTASDispatch (=> NKInit) + + Local_Panic set * b panic diff --git a/NanoKernel/NKReplacementInit.s b/NanoKernel/NKReplacementInit.s index 6fc65ab..bf87e62 100644 --- a/NanoKernel/NKReplacementInit.s +++ b/NanoKernel/NKReplacementInit.s @@ -1,3 +1,22 @@ +; AUTO-GENERATED SYMBOL LIST +; IMPORTS: +; NKConsoleLog +; printh +; printw +; NKInit +; CancelReplacement +; InitHighLevel +; InitIRP +; NKPrimaryIntHandlers +; LookupInterruptHandler +; NKScreenConsole +; InitScreenConsole +; NKTranslation +; FDP +; EXPORTS: +; InitReplacement (=> NKInit) + + ; sprg0 = old KDP/EWA/r1 ptr ; r3 = PA_NanoKernelCode ; r4 = physical base of our global area diff --git a/NanoKernel/NKScheduler.s b/NanoKernel/NKScheduler.s index 8ede3d2..211c3f3 100644 --- a/NanoKernel/NKScheduler.s +++ b/NanoKernel/NKScheduler.s @@ -1,3 +1,47 @@ +; AUTO-GENERATED SYMBOL LIST +; IMPORTS: +; NKConsoleLog +; printh +; printw +; NKInterrupts +; SIGP +; NKPaging +; PagingFlushTLB +; NKTasks +; TasksFuncThatIsNotAMPCall +; NKThud +; panic +; NKTimers +; GetTime +; SetTimesliceFromCurTime +; TimebaseTicksPerPeriod +; EXPORTS: +; CalculateTimeslice (=> NKInit, NKMPCalls, NKPrimaryIntHandlers, NKSync, NKTasks, NKTimers) +; FlagSchEval (=> NKInit, NKInterrupts, NKMPCalls, NKTasks) +; FlagSchEvaluationIfTaskRequires (=> NKMPCalls, NKPrimaryIntHandlers, NKSync, NKTasks, NKTimers) +; NewCpuEntryPoint (=> NKMPCalls) +; Restore_v0_v31 (=> NKInterrupts) +; Save_f0_f31 (=> NKSleep) +; Save_v0_v31 (=> NKInterrupts, NKMPCalls, NKSleep) +; SchEval (=> NKInterrupts, NKMPCalls) +; SchExitInterrupt (=> NKInterrupts) +; SchFiddlePriorityShifty (=> NKInterrupts) +; SchIdleTask (=> NKInit, NKMPCalls) +; SchIdleTaskStopper (=> NKMPCalls) +; SchInit (=> NKInit) +; SchRdyTaskLater (=> NKMPCalls, NKPrimaryIntHandlers, NKSync) +; SchRdyTaskNow (=> NKInit, NKInterrupts, NKMPCalls, NKSync, NKTasks, NKTimers) +; SchRestoreStartingAtR14 (=> NKInit, NKInterrupts, NKMPCalls, NKPrimaryIntHandlers, NKVMCalls) +; SchRestoreStartingAtR20 (=> NKPrimaryIntHandlers) +; SchReturn (=> NKInterrupts) +; SchSaveStartingAtR14 (=> NKInterrupts, NKMPCalls, NKVMCalls) +; SchSaveStartingAtR20 (=> NKPrimaryIntHandlers) +; SchSwitchSpace (=> NKInit, NKInterrupts, NKSleep) +; SchTaskUnrdy (=> NKInterrupts, NKMPCalls, NKPrimaryIntHandlers, NKSync, NKTasks, NKTimers) +; clear_cr0_lt (=> NKTimers) +; major_0x149d4 (=> NKTimers) + + Local_Panic set * b panic diff --git a/NanoKernel/NKScreenConsole.s b/NanoKernel/NKScreenConsole.s index 3af52ea..08a5b6c 100644 --- a/NanoKernel/NKScreenConsole.s +++ b/NanoKernel/NKScreenConsole.s @@ -1,3 +1,13 @@ +; AUTO-GENERATED SYMBOL LIST +; IMPORTS: +; NKPaging +; PagingL2PWithoutBATs +; EXPORTS: +; InitScreenConsole (=> NKBuiltinInit, NKInit, NKReplacementInit) +; ScreenConsole_putchar (=> NKConsoleLog) +; ScreenConsole_redraw (=> NKConsoleLog, NKMPCalls) + + ScreenConsoleX equ 24 ScreenConsoleY equ 22 diff --git a/NanoKernel/NKSleep.s b/NanoKernel/NKSleep.s index 0162a55..762d940 100644 --- a/NanoKernel/NKSleep.s +++ b/NanoKernel/NKSleep.s @@ -1,3 +1,24 @@ +; AUTO-GENERATED SYMBOL LIST +; IMPORTS: +; NKInterrupts +; SIGP +; NKMPCalls +; CommonMPCallReturnPath +; ReturnMPCallOOM +; ReturnParamErrFromMPCall +; ReturnZeroFromMPCall +; NKPaging +; PagingFlushTLB +; PagingFunc2AndAHalf +; PagingL2PWithBATs +; NKScheduler +; Save_f0_f31 +; Save_v0_v31 +; SchSwitchSpace +; NKThud +; panic + + ; Implements two MPCalls that seem to have something to do with COHGs diff --git a/NanoKernel/NKSync.s b/NanoKernel/NKSync.s index affc1ff..b423675 100644 --- a/NanoKernel/NKSync.s +++ b/NanoKernel/NKSync.s @@ -1,3 +1,48 @@ +; AUTO-GENERATED SYMBOL LIST +; IMPORTS: +; NKIndex +; DeleteID +; LookupID +; MakeID +; NKMPCalls +; BlockMPCall +; ReleaseAndReturnMPCall +; ReleaseAndReturnMPCallBlueBlocking +; ReleaseAndReturnMPCallInvalidIDErr +; ReleaseAndReturnMPCallOOM +; ReleaseAndReturnMPCallTaskAborted +; ReleaseAndReturnParamErrFromMPCall +; ReleaseAndReturnZeroFromMPCall +; ReleaseAndScrambleMPCall +; ReleaseAndTimeoutMPCall +; ReturnMPCallOOM +; ReturnZeroFromMPCall +; ScrambleMPCall +; NKPoolAllocator +; PoolAlloc +; PoolAllocClear +; PoolFree +; NKScheduler +; CalculateTimeslice +; FlagSchEvaluationIfTaskRequires +; SchRdyTaskLater +; SchRdyTaskNow +; SchTaskUnrdy +; NKThud +; panic +; NKTimers +; DequeueTimer +; EnqueueTimer +; GetTime +; TimebaseTicksPerPeriod +; EXPORTS: +; CauseNotification (=> NKAddressSpaces, NKInterrupts, NKPrimaryIntHandlers) +; EnqueueMessage (=> NKInterrupts, NKTasks, NKTimers) +; SetEvent (=> NKAddressSpaces, NKTimers) +; SignalSemaphore (=> NKTimers) +; UnblockBlueIfCouldBePolling (=> NKInterrupts) + + ####### ## ## ######## ## ## ######## ###### ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## diff --git a/NanoKernel/NKTasks.s b/NanoKernel/NKTasks.s index 7cfa976..8f07db2 100644 --- a/NanoKernel/NKTasks.s +++ b/NanoKernel/NKTasks.s @@ -1,3 +1,44 @@ +; AUTO-GENERATED SYMBOL LIST +; IMPORTS: +; NKAddressSpaces +; FindAreaAbove +; NKIndex +; DeleteID +; LookupID +; MakeID +; NKMPCalls +; CommonMPCallReturnPath +; MPCall_6_0x78 +; ReleaseAndReturnMPCall +; ReleaseAndReturnMPCallInvalidIDErr +; ReleaseAndReturnMPCallOOM +; ReleaseAndReturnZeroFromMPCall +; ReleaseAndScrambleMPCall +; ReturnMPCallInvalidIDErr +; ReturnMPCallOOM +; NKPoolAllocator +; PoolAlloc +; PoolAllocClear +; PoolFree +; NKScheduler +; CalculateTimeslice +; FlagSchEval +; FlagSchEvaluationIfTaskRequires +; SchRdyTaskNow +; SchTaskUnrdy +; NKSync +; EnqueueMessage +; NKThud +; panic +; NKTimers +; DequeueTimer +; GetTime +; EXPORTS: +; CreateTask (=> NKInit, NKMPCalls) +; TasksFuncThatIsNotAMPCall (=> NKScheduler) +; ThrowTaskToDebugger (=> NKInterrupts) + + ; This file mostly provides MPCall implementations related to multitasking. ; We won't understand this very well until someone disassembles MPLibrary. diff --git a/NanoKernel/NKThud.s b/NanoKernel/NKThud.s index f0781ce..2ebd61c 100644 --- a/NanoKernel/NKThud.s +++ b/NanoKernel/NKThud.s @@ -1,3 +1,24 @@ +; AUTO-GENERATED SYMBOL LIST +; IMPORTS: +; NKConsoleLog +; getchar +; print_unknown +; printc +; printh +; prints +; printw +; NKIndex +; GetNextIDOfClass +; LookupID +; NKInterrupts +; Exception +; NKPaging +; PagingFunc1 +; PagingL2PWithoutBATs +; EXPORTS: +; panic (=> NKAddressSpaces, NKIndex, NKInit, NKInterrupts, NKMPCalls, NKPaging, NKPoolAllocator, NKPowerCalls, NKRTASCalls, NKScheduler, NKSleep, NKSync, NKTasks, NKTimers, NKTranslation, NKVMCalls) +; panic_non_interactive (=> NKTimers) + align 5 diff --git a/NanoKernel/NKTimers.s b/NanoKernel/NKTimers.s index e2c8869..2b6d66c 100644 --- a/NanoKernel/NKTimers.s +++ b/NanoKernel/NKTimers.s @@ -1,3 +1,42 @@ +; AUTO-GENERATED SYMBOL LIST +; IMPORTS: +; NKConsoleLog +; getchar +; printb +; printd +; printh +; printw +; NKIndex +; DeleteID +; LookupID +; NKPoolAllocator +; PoolAllocClear +; PoolFree +; NKScheduler +; CalculateTimeslice +; FlagSchEvaluationIfTaskRequires +; SchRdyTaskNow +; SchTaskUnrdy +; clear_cr0_lt +; major_0x149d4 +; NKSync +; EnqueueMessage +; SetEvent +; SignalSemaphore +; NKThud +; panic +; panic_non_interactive +; EXPORTS: +; DequeueTimer (=> NKMPCalls, NKPrimaryIntHandlers, NKSync, NKTasks) +; EnqueueTimer (=> NKMPCalls, NKSync) +; GetTime (=> NKMPCalls, NKScheduler, NKSync, NKTasks) +; InitTMRQs (=> NKInit) +; SetTimesliceFromCurTime (=> NKScheduler) +; StartTimeslicing (=> NKInit) +; TimebaseTicksPerPeriod (=> NKScheduler, NKSync) +; TimerDispatch (=> NKInterrupts) + + Local_Panic set * b panic diff --git a/NanoKernel/NKTranslation.s b/NanoKernel/NKTranslation.s index 437cce0..732d214 100644 --- a/NanoKernel/NKTranslation.s +++ b/NanoKernel/NKTranslation.s @@ -14,6 +14,28 @@ ; magic. The tables here contain relative references to other tables ; in Interrupts.s. What a mess. +; AUTO-GENERATED SYMBOL LIST +; IMPORTS: +; NKInterrupts +; Exception +; ExceptionMemRetried +; FloatLoadJumpTable +; FloatSaveJumpTable +; IgnoreSoftwareInt +; LoadInterruptRegisters +; major_0x03324 +; major_0x03548 +; NKThud +; panic +; EXPORTS: +; FDP (=> NKBuiltinInit, NKReplacementInit) +; FDPEmulateInstruction (=> NKInterrupts) +; FDP_003c (=> NKInterrupts) +; FDP_011c (=> NKInterrupts) +; FDP_0DA0 (=> NKInterrupts) +; FDP_1c40 (=> NKInit) +; ProbePerfMonitor (=> NKInit) + align 11 diff --git a/NanoKernel/NKVMCalls.s b/NanoKernel/NKVMCalls.s index 4bff6f1..64c50c5 100644 --- a/NanoKernel/NKVMCalls.s +++ b/NanoKernel/NKVMCalls.s @@ -1,3 +1,34 @@ +; AUTO-GENERATED SYMBOL LIST +; IMPORTS: +; NKAddressSpaces +; CreateArea +; DeletePTE +; FindAreaAbove +; GetPTEFromPLE +; InvalPTE +; SetPTE +; SpaceGetPagePLE +; NKConsoleLog +; printw +; NKInterrupts +; IntReturn +; NKPaging +; PagingFunc1 +; NKPoolAllocator +; PoolAllocClear +; NKScheduler +; SchRestoreStartingAtR14 +; SchSaveStartingAtR14 +; NKThud +; panic +; EXPORTS: +; EditPTEInHTAB (=> NKMPCalls) +; GetPARPageInfo (=> NKMPCalls) +; RemovePageFromTLB (=> NKMPCalls) +; VMSecondLastExportedFunc (=> NKMPCalls) +; kcVMDispatch (=> NKInit) + + Local_Panic set * b panic