;******************************************************************************************************************************** ;* * ;* File: Core.asm * ;* * ;* This file defines the entry point into the of PwnOS, and includes the rest of the . * ;* * ;* See Also: * ;* - * ;* - * ;* - * ;* - * ;* - * ;* - * ;* - * ;* * ;* Authors: * ;* - Neil G. Dickson * ;* * ;* Compiling: * ;* Assemble - $MASM$\ML.EXE /Fl /c /Cp /nologo $this$ * ;* Link - $JLOC$\JLOC.EXE BootCore.loc "..\Compiled\BootCore.bin" "..\Boot\BootCore.map" * ;* * ;******************************************************************************************************************************** ; :=)ITI)=: ; ;IO888888888Hi ; +L88888888888888O+ ; ;L888888888888888888) ; iX88888888888888888888) ; LX888888888888888888888X= ; :HX88888888888888888888888O: ; :HXX8XXXXXXXXXXXXXXXXXXXXXXX) ; LXXXXXXXXXXXXXXXXXXXXXXXXXXXH ; IOXXXXXXXXXXXXXXXXXXXXXXXXXXXO+ ; =OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOi ; :HOOOOOOL)iiiiiHOLiiiiiIHOOOOOOOI ; )OOOOOL=:: iH=: :)HOOOOOI ; :HOOOHT;: i: )HOOOOI ; =HHHHL+ :HHHHH) ; IHHHH): THHHHi ; HOOOOOOOOH): LHHHHHHT +II =T+LHHHHHHHHHHHTi LHHHL+ :)HOOOOOOOOi THHHL= ; :8##########X=)X8#####T ;L8#T =X88+)8888888888888H: ;LHHHT: I88########8+ :LHHHL; ; =8###########X+=IX####O ;X8#8) I8##X: =)X88888888888H =LHHLI: :H88888888888T: +LHHLT: ; )8888888888888T O8888L: O8888+ =8888L: H88888XXX888Xi )LLLLi H88888888888H; =LLLL): ; L8888888888888O::X8888I i8888X; O8888I O8888H+;TX888L TLLLL+ I8888888888XL+ )LLLLi ; O888HLLLLHX888O:+X888Xi L8888L: +X888X= ;XXXXX) )XXXXL :TLLLT; :X888OLLLLLTi; TLLLL+ ; ;XXXX+:::::)XXXO:iX888X; O888XI iX888X; iXXXXX+ TXXXXL +LLLLI: iXXXH+:::::: +XXXXO; ; =XXXH: iXXXL:TXXXXH: ;XXXXXi TXXXXH: IXXXXO: HXXXXI iLLLL) TXXXI iXXXXH: ; )XXXL+;;;;=OXXX) HXXXXT: =XXXXO+ HXXXXT: LXXXXL: :OXXXXi ILLLT= LXXXH+;;;; TXXXXT ; LXXXXOXXXXXXXXH;:OXX88) IXXXXH: :OXX88) :OXXX8I +OXXXX= TLLLT+ LXXXXOOOOOO) OXXXXi ; X8############):+O8###= LX8##H: +O8###= +O8###) )OX8#8; ;TLLHO; )XXXXX88####O: ;XXXXX+ ; +#############T: )####8; :X####I )####8; )#####+ TX###O: =LOXXL: ;OX8#########T =XXXXO: ; )###########8I: H####O: =#####= H####O: L####X: X####T TXXXXI )###########8: IXXXXL: ; L#########8L=: 8####T I####8; 8####T X####H: ;#####) OXXXXi iX##########= HXXXXI ; X####Oiii=;: ;#####i H####O: ;#####i ;#####I i#####+ ;XXXXX+ :=))))L####= :XXXXXi ; :8####I i#####+ 8####L i#####+ =#####i T####8: iXXXXO: :8###= +XXXXX; ; =#####= T####X: ;#####) T####X: I####8; O####H: TXXXXL: i###8; )XXXXO: ; I####8; T####H: i#####= X####I H####X: :8####T HXXXX) +)TTTTH####T: LXXXXL: ; H####H: )####X;;X#####) )####X; 8####T +#####i :XXXXX= +O##########8+ OXXXX) ; 8####i ;8#############8####8i +####8+ )#####+ =XXXXX; i############): ;XXXXX= ; ;####T: T#################8i: i###8i: L####X: IXXXXH: =###########8I: iXXXXX; ; i##8I; L######XT8######O=: T##Oi: I####) LXXXXT X##########Xi: TXXXXH: ; IOT+: iHXXH);:;TO8XLi; LH);: :L8O): XXXXX) =88888888XH);: OXXXXT ; :: ::::: :::: : ::: +X888X= ::::::::::: ;X888Xi ; iX888Xi IX888O; ; )X8888L : =X888XT: ; I88888X) iL =X8888X+ ; )888888XL+ :XX+ +LX88888I: ; i888888888XOHHHO88XHHHOX8888888O; ; ;88888888888888888888888888888X= ; O8888888888888888888888888888): ; )888888888888888888888888888I: ; :X8888888888888888888888888I: ; i88888888888888888888888X): ; T888888888888888888888O=: ; L8888888888888888888T; ; I8888888888888888L=: ; +L88888888888XT+: ; +IHX88XOHI=;: ; :::::: .686p .xmm OPTION language:stdcall include Core.inc ;******************************************************************************************************************************** ;* * ;* Segment: CoreData * ;* * ;* This is the segment containing all data for , spread across many files. * ;* * ;******************************************************************************************************************************** CoreData segment use32 page ;******************************************************************************************************************************** ;* * ;* Variable: ThreadSchedulerTSS * ;* * ;* This is the special of the task. * ;* * ;* This must be first in the CoreData segment so that its address can be hardcoded in its TSS descriptor (see ). It * ;* doesn't need an entire , because doesn't request its own thread info or use FPU/SSE/MMX. * ;* * ;******************************************************************************************************************************** ThreadSchedulerTSS TSS32 <> ;******************************************************************************************************************************** ;* * ;* Variable: CallVectors * ;* * ;* This is the structure containing the addresses to all functions acessible from , indexed * ;* by . * ;* * ;******************************************************************************************************************************** CallVectors CALLVECTORLIST <> ;******************************************************************************************************************************** ;* * ;* Variable: CoreAccessFlags * ;* * ;* Bits used to lock access to certain areas of the (e.g. can only have one processor at a time). * ;* * ;* See Also: * ;* - * ;* * ;******************************************************************************************************************************** CoreAccessFlags dword 0 CoreData ends ;******************************************************************************************************************************** ;* * ;* Segment: CoreCode * ;* * ;* This is the segment containing all code remaining after initialization for , spread across many files. * ;* * ;******************************************************************************************************************************** CoreCode segment use32 ASSUME CS:CoreCode,DS:CoreData,ES:CoreData,FS:CoreData,GS:CoreData,SS:CoreData ;******************************************************************************************************************************** ;* * ;* Procedure: CoreCallGate * ;* * ;* Entry point into the from . eax contains one of the . * ;* * ;* To call this from , use the macro. This must be first in the CoreCode segment to ensure that its * ;* address can be hardcoded as a constant in the call gate descriptor and (see ). * ;* * ;<******************************************************************************************************************************* CoreCallGate proc far cmp eax,NUM_CALL_GATES jnb InvalidCallNum call dword ptr CallVectors[eax*4] retf ;automatically retf due to "proc far", but make it explicit InvalidCallNum: ; TestOutputVar "Invalid Call Gate #",eax jmp $ CoreCallGate endp ;>******************************************************************************************************************************* CoreCode ends include Sync\Sync.asm include Sync\Time.asm include Memory\Memory.asm include Memory\HeapMemory.asm include Memory\PageFile.asm include Memory\MiscMemory.asm include Threads\Processes.asm include Threads\Threads.asm include Threads\ThreadScheduler.asm include IO\IO.asm include Files\Files.asm include Init.asm echo Error if CoreCode is greater than 512KB end