--- /dev/null
+; MMURTL Operating System Source Code\r
+; Copyright 1991,1992,1993,1994 Richard A. Burgess\r
+; ALL RIGHTS RESERVED Version 1.0\r
+\r
+.DATA\r
+.INCLUDE MOSEDF.INC\r
+.INCLUDE TSS.INC\r
+\r
+\r
+.CODE\r
+\r
+\r
+EXTRN IntQ NEAR\r
+EXTRN IntDivBy0 NEAR\r
+EXTRN IntDbgSS NEAR\r
+EXTRN IntDebug NEAR\r
+EXTRN IntOverFlow NEAR\r
+EXTRN INTOpCode NEAR\r
+EXTRN IntDblExc NEAR\r
+EXTRN INTInvTss NEAR\r
+EXTRN INTNoSeg NEAR\r
+EXTRN INTStkOvr NEAR\r
+EXTRN IntGP NEAR\r
+EXTRN INTPgFlt NEAR\r
+EXTRN IntPICU2 NEAR\r
+EXTRN IntTimer NEAR\r
+EXTRN IntKeyBrd NEAR\r
+\r
+;=============================================================================\r
+;The following code initializes structures just after bootup\r
+;=============================================================================\r
+;\r
+; INPUT : ECX,EDX\r
+; OUTPUT : NONE\r
+; REGISTERS : EAX,EBX,ECX,FLAGS\r
+; MODIFIES : pFreeLB,rgLBs\r
+;\r
+; This routine will initialize a free pool of link blocks.\r
+; The data used in this algorithm are an array of ECX link blocks (rgLBs),\r
+; each EDX bytes long and pointer to a list of free link blocks (pFreeLB).\r
+;\r
+; The pFreeLB pointer is set to address the first element in rgLBs. Each\r
+; element of rgLBs is set to point to the next element of rgLBs. The\r
+; last element of rgLBs is set to point to nothing (NIL).\r
+;\r
+PUBLIC InitFreeLB:\r
+ LEA EAX,rgLBs ; pFreeLB <= ^rgLBs;\r
+ MOV pFreeLB,EAX ;\r
+LB_Loop:\r
+ MOV EBX,EAX ; for I = 0 TO ECX\r
+ ADD EAX,EDX ; rgLBs[I].Next <=\r
+ MOV [EBX+NextLB],EAX ; ^rgLBs[I+1];\r
+ LOOP LB_Loop ;\r
+ MOV DWORD PTR [EBX+NextLB], 0 ; rgFree[1023].Next <= NIL;\r
+ RETN ;\r
+;=============================================================================\r
+; AddTSSDesc\r
+; Builds a descriptor for a task and places it in the GDT. If you\r
+; check the intel documentation the bits of data that hold this\r
+; information are scattered through the descriptor entry, so\r
+; we have to do some shifting, moving, anding and oring to get\r
+; the descriptor the way the processor expects it. See the Intel\r
+; docs for a complete description of the placement of the bits.\r
+;\r
+; Note: The granularity bit represents the TSS itself, not the code\r
+; that will run under it!\r
+;\r
+;\r
+; IN:\r
+; EAX - Size of TSS\r
+; EBX - Decriptor type (default for OS TSS is 0089h)\r
+; (0089h - G(0),AV(0),LIM(0000),P(1),DPL(00),(010),B(0),(1))\r
+; EDX - Address of TSS\r
+; EDI - Address of Desc in GDT\r
+; OUT:\r
+; GDT is updated with descriptor\r
+; USED:\r
+; EFlags (all other registers are saved)\r
+\r
+PUBLIC AddTSSDesc:\r
+ ;The following code section builds a descriptor entry for\r
+ ;the TSS and places it into the GDT\r
+ PUSH EAX\r
+ PUSH EBX\r
+ PUSH EDX\r
+ PUSH EDI\r
+ DEC EAX ; (Limit is size of TSS-1)\r
+ SHL EBX,16 ; Chinese puzzle rotate\r
+ ROL EDX,16 ; Exchange hi & lo words of Base Addr\r
+ MOV BL,DH ; Base 31 .. 24\r
+ MOV BH,DL ; Base 23 .. 16\r
+ ROR EBX,8 ; Rotate to Final Alignment\r
+ MOV DX,AX ; Limit 15 .. 0 with Base 15 .. 0\r
+ AND EAX,000F0000h ; Mask Limit 19 .. 16\r
+ OR EBX,EAX ; OR into high order word\r
+ MOV [EDI],EDX ; Store lo double word\r
+ MOV [EDI+4],EBX ; Store hi double word\r
+ POP EDI\r
+ POP EDX\r
+ POP EBX\r
+ POP EAX\r
+ RETN\r
+\r
+;=============================================================================\r
+; InitFreeTSS\r
+; INPUT : EAX, ECX\r
+; OUTPUT : NONE\r
+; USED : ALL General registers, FLAGS\r
+; MODIFIES : pFreeTSS (and the dynamic array of TSSs)\r
+;\r
+; This routine initializes the free pool of Task State Segments.\r
+; On entry:\r
+; EAX points to the TSSs to initialize (allocated memory).\r
+; ECX has the count of TSSs to initialize.\r
+; The size of the TSS is taken from the constant sTSS.\r
+;\r
+; The pFreeTSS pointer is set to address the first TSS. The NextTSS\r
+; field in each TSS is set to point to the next free TSS. The\r
+; last TSS is set to point to nothing (NIL). The IOBitBase field is\r
+; also set to FFFFh for NULL I/O permissions in each TSS.\r
+; NOTE: The allocated memory area for the TSS MUST BE ZEROED before\r
+; calling this routine. By deafult, we add the TSS descriptors at OS\r
+; protection level. If we spawn or add a User level TSS we must\r
+; OR the DPL bits with 3!\r
+\r
+PUBLIC InitFreeTSS:\r
+ MOV pFreeTSS,EAX ; First one free to use\r
+ MOV EDI, OFFSET rgTSSDesc ; ptr to TSS descriptors\r
+ ADD EDI, 16 ; First two TSSs are Static (Mon & Dbgr)\r
+ MOV EDX, sTSS ; Size of TSS (in bytes) into EDX\r
+ MOV EBX, 3 ; Number of first dynamic TSS\r
+TSS_Loop:\r
+ MOV ESI,EAX ; for I = 0 TO ECX\r
+ ADD EAX,EDX ; EAX <= rgTSSs[I].Next\r
+ MOV [ESI+NextTSS],EAX ; ^rgTSSs[I+1];\r
+ MOV WORD PTR [ESI+TSS_IOBitBase], 0FFFFh ; IOBitBase\r
+ MOV [ESI+TSSNum], BX ; TSS Number\r
+ MOV WORD PTR [ESI+TSS_DS], DataSel ;Set up for Data Selectors\r
+ MOV WORD PTR [ESI+TSS_ES], DataSel\r
+ MOV WORD PTR [ESI+TSS_FS], DataSel\r
+ MOV WORD PTR [ESI+TSS_GS], DataSel\r
+ MOV WORD PTR [ESI+TSS_SS], DataSel\r
+ MOV WORD PTR [ESI+TSS_SS0], DataSel\r
+ PUSH EAX ;Save pTSS\r
+ MOV EAX,EDI ; Get offset of Curr TssDesc in EAX\r
+ SUB EAX, OFFSET GDT ; Sub offset of GDT Base to get Sel of TSS\r
+ MOV WORD PTR [ESI+Tid],AX ; Store TSS Selector in TSS (later use)\r
+ PUSH EBX\r
+ PUSH EDX\r
+\r
+ MOV EAX,EDX ; Size of TSS (TSS + SOFTSTATE)\r
+ MOV EDX,ESI ; Address of TSS\r
+ MOV EBX,0089h ; G(0),AV(0),LIM(0),P(1),DPL(0),B(0)\r
+\r
+ CALL AddTSSDesc\r
+\r
+ ADD EDI,8 ; Point to Next GDT Slot (for next one)\r
+ POP EDX\r
+ POP EBX\r
+ POP EAX\r
+ INC EBX ; TSS Number\r
+ LOOP TSS_Loop ;\r
+ MOV DWORD PTR [ESI+NextTSS], 0 ; rgFree[LastOne].Next <= NIL;\r
+ RETN ;\r
+\r
+;=============================================================================\r
+; DUMMY CALL for uninitialized GDT call gate slots\r
+;=============================================================================\r
+\r
+DummyCall:\r
+ MOV EAX, ercBadCallGate\r
+ RETF\r
+\r
+\r
+;=============================================================================\r
+; InitCallGates inits the array of call gates with an entry to a generic\r
+; handler that returns ErcNotInstalled when called. This prevents new code\r
+; running on old MMURTLs or systems where special call gates don't exist\r
+; without crashing too horribly.\r
+;\r
+; IN: Nothing\r
+; Out : Nothing\r
+; Used : ALL registers and flags\r
+;\r
+PUBLIC InitCallGates:\r
+\r
+ ;First we set up all call gates to point to a\r
+ ;dummy procedure\r
+\r
+ MOV ECX, nCallGates ;Number of callgates to init\r
+InitCG01:\r
+ PUSH ECX ;Save nCallGates\r
+ DEC ECX ;make it an index, not the count\r
+ SHL ECX, 3 ;\r
+ ADD ECX, 40h ;Now ecx is selector number\r
+ MOV EAX, 0EC00h ;DPL 3, 0 Params\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET DummyCall\r
+\r
+ ;Same code as in PUBLIC AddCallGate\r
+ MOVZX EBX, CX\r
+ SUB EBX, 40 ;sub call gate base selector\r
+ SHR EBX, 3 ;make index vice selector\r
+ MOVZX EBX, CX ;Extend selector into EBX\r
+ ADD EBX, GDTBase ;NOW a true offset in GDT\r
+ MOV WORD PTR [EBX+02], 8 ;Put Code Seg selector into Call gate\r
+ MOV [EBX], SI ;0:15 of call offset\r
+ SHR ESI, 16 ;move upper 16 of offset into SI\r
+ MOV [EBX+06], SI ;16:31 of call offset\r
+ MOV [EBX+04], AX ;call DPL & ndParams\r
+\r
+ POP ECX ;ignore error...\r
+ LOOP InitCG01 ;This decrements ECX till 0\r
+\r
+ ;Another chicken and egg here.. In order to be able\r
+ ;to call the FAR PUBLIC "AddCallGate" though a callgate,\r
+ ;we have to add it as a callgate... ok....\r
+\r
+ MOV EAX, 08C00h ;AddCallGate -- 0 DWord Params DPL 0\r
+ MOV ECX, 0C8h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __AddCallGate\r
+ ;Same code as in PUBLIC AddCallGate\r
+ MOVZX EBX, CX\r
+ SUB EBX, 40 ;sub call gate base selector\r
+ SHR EBX, 3 ;make index vice selector\r
+ MOVZX EBX, CX ;Extend selector into EBX\r
+ ADD EBX, GDTBase ;NOW a true offset in GDT\r
+ MOV WORD PTR [EBX+02], 8 ;Put Code Seg selector into Call gate\r
+ MOV [EBX], SI ;0:15 of call offset\r
+ SHR ESI, 16 ;move upper 16 of offset into SI\r
+ MOV [EBX+06], SI ;16:31 of call offset\r
+ MOV [EBX+04], AX ;call DPL & ndParams\r
+ RETN\r
+\r
+;=============================================================================\r
+; InitIDT\r
+; First, inits the IDT with 256 entries to a generic\r
+; handler that does nothing (except IRETD) when called.\r
+; Second, adds each of the basic IDT entries for included\r
+; software and hardware interrupt handlers.\r
+; ISRs loaded with device drivers must use SetIRQVector.\r
+;\r
+; IN : Nothing\r
+; Out : Nothing\r
+; Used : ALL registers and flags\r
+;\r
+PUBLIC InitIDT:\r
+ MOV ECX, 255 ;Last IDT Entry\r
+InitID01:\r
+ PUSH ECX\r
+ MOV EAX, 08F00h ;DPL 3, TRAP GATE\r
+ MOV EBX, OSCodeSel\r
+ MOV ESI, OFFSET IntQ\r
+ CALL FWORD PTR _AddIDTGate\r
+ POP ECX\r
+ LOOP InitID01\r
+\r
+ ;Now we add each of the known interrupts\r
+\r
+ MOV ECX, 0 ;Divide By Zero\r
+ MOV EAX, 08F00h ;DPL 3, TRAP GATE\r
+ MOV EBX, OSCodeSel ;\r
+ MOV ESI, OFFSET IntDivBy0\r
+ CALL FWORD PTR _AddIDTGate\r
+\r
+ MOV ECX, 1 ;Single Step\r
+ MOV EAX, 08F00h ;DPL 3, Trap gate\r
+ MOV EBX, OSCodeSel ;\r
+ MOV ESI, Offset IntDbgSS\r
+ CALL FWORD PTR _AddIDTGate\r
+\r
+ ;Trying 8E00 (Int gate vice trap gate which leaves Ints disabled)\r
+\r
+ MOV ECX, 3 ;Breakpoint\r
+ MOV EAX, 08F00h ;DPL 3, Trap Gate (for Debugger) WAS 8F00\r
+ MOV EBX, OSCodeSel ;This will be filled in with TSS of Dbgr later\r
+ MOV ESI, OFFSET IntDebug\r
+ CALL FWORD PTR _AddIDTGate\r
+\r
+ MOV ECX, 4 ;Overflow\r
+ MOV EAX, 08F00h ;DPL 3, TRAP GATE\r
+ MOV EBX, OSCodeSel ;\r
+ MOV ESI, OFFSET IntOverFlow\r
+ CALL FWORD PTR _AddIDTGate\r
+\r
+ MOV ECX, 6 ;Invalid OPcode\r
+ MOV EAX, 08F00h ;DPL 3, TRAP GATE\r
+ MOV EBX, OSCodeSel ;\r
+ MOV ESI, OFFSET IntOpCode\r
+ CALL FWORD PTR _AddIDTGate\r
+\r
+ MOV ECX, 8 ;Double Exception\r
+ MOV EAX, 08F00h ;DPL 3, TRAP GATE\r
+ MOV EBX, OSCodeSel ;\r
+ MOV ESI, OFFSET IntDblExc\r
+ CALL FWORD PTR _AddIDTGate\r
+\r
+ MOV ECX, 0Ah ;Invalid TSS\r
+ MOV EAX, 08F00h ;DPL 3, TRAP GATE\r
+ MOV EBX, OSCodeSel ;\r
+ MOV ESI, OFFSET IntInvTSS\r
+ CALL FWORD PTR _AddIDTGate\r
+\r
+ MOV ECX, 0Bh ;Seg Not Present\r
+ MOV EAX, 08F00h ;DPL 3, TRAP GATE\r
+ MOV EBX, OSCodeSel ;\r
+ MOV ESI, OFFSET IntNoSeg\r
+ CALL FWORD PTR _AddIDTGate\r
+\r
+ MOV ECX, 0Ch ;Int Stack Overflow\r
+ MOV EAX, 08F00h ;DPL 3, TRAP GATE\r
+ MOV EBX, OSCodeSel ;\r
+ MOV ESI, OFFSET IntStkOvr\r
+ CALL FWORD PTR _AddIDTGate\r
+\r
+ MOV ECX, 0Dh ;GP fault\r
+ MOV EAX, 08F00h ;DPL 3, TRAP GATE\r
+ MOV EBX, OSCodeSel ;\r
+ MOV ESI, OFFSET IntGP\r
+ CALL FWORD PTR _AddIDTGate\r
+\r
+ MOV ECX, 0Eh ;Int Page Fault\r
+ MOV EAX, 08F00h ;DPL 3, TRAP GATE\r
+ MOV EBX, OSCodeSel ;\r
+ MOV ESI, OFFSET IntPgFlt\r
+ CALL FWORD PTR _AddIDTGate\r
+\r
+ MOV ECX, 20h ;Int TIMER IRQ0\r
+ MOV EAX, 08E00h ;DPL 3, INTERRUPT GATE\r
+ MOV EBX, OSCodeSel ;\r
+ MOV ESI, OFFSET IntTimer\r
+ CALL FWORD PTR _AddIDTGate\r
+\r
+ MOV ECX, 21h ;Int KEYBOARD IRQ1\r
+ MOV EAX, 08E00h ;DPL 3, INTERRUPT GATE\r
+ MOV EBX, OSCodeSel ;\r
+ MOV ESI, OFFSET IntKeyBrd\r
+ CALL FWORD PTR _AddIDTGate\r
+\r
+ MOV ECX, 22h ;Int PICU 2 (from PICU) IRQ2\r
+ MOV EAX, 08E00h ;DPL 3, INTERRUPT GATE\r
+ MOV EBX, OSCodeSel ;\r
+ MOV ESI, OFFSET IntPICU2\r
+ CALL FWORD PTR _AddIDTGate\r
+\r
+ MOV ECX, 23h ;Int COM2 IRQ3\r
+ MOV EAX, 08E00h ;DPL 3, INTERRUPT GATE\r
+ MOV EBX, OSCodeSel ;\r
+ MOV ESI, OFFSET IntQ\r
+ CALL FWORD PTR _AddIDTGate\r
+\r
+ MOV ECX, 24h ;Int COM1 IRQ4\r
+ MOV EAX, 08E00h ;DPL 3, INTERRUPT GATE\r
+ MOV EBX, OSCodeSel ;\r
+ MOV ESI, OFFSET IntQ\r
+ CALL FWORD PTR _AddIDTGate\r
+\r
+ MOV ECX, 25h ;Int LPT2 IRQ5\r
+ MOV EAX, 08E00h ;DPL 3, INTERRUPT GATE\r
+ MOV EBX, OSCodeSel ;\r
+ MOV ESI, OFFSET IntQ\r
+ CALL FWORD PTR _AddIDTGate\r
+\r
+ MOV ECX, 26h ;Int Floppy IRQ6\r
+ MOV EAX, 08E00h ;DPL 3, INTERRUPT GATE\r
+ MOV EBX, OSCodeSel ;\r
+ MOV ESI, OFFSET IntQ ;FDD will set this himself\r
+ CALL FWORD PTR _AddIDTGate\r
+\r
+ MOV ECX, 27h ;Int .......... IRQ7\r
+ MOV EAX, 08E00h ;DPL 3, INTERRUPT GATE\r
+ MOV EBX, OSCodeSel ;\r
+ MOV ESI, OFFSET IntQ\r
+ CALL FWORD PTR _AddIDTGate\r
+\r
+ MOV ECX, 28h ;Int .......... IRQ8\r
+ MOV EAX, 08E00h ;DPL 3, INTERRUPT GATE\r
+ MOV EBX, OSCodeSel ;\r
+ MOV ESI, OFFSET IntQ\r
+ CALL FWORD PTR _AddIDTGate\r
+\r
+ MOV ECX, 29h ;Int .......... IRQ9\r
+ MOV EAX, 08E00h ;DPL 3, INTERRUPT GATE\r
+ MOV EBX, OSCodeSel ;\r
+ MOV ESI, OFFSET IntQ\r
+ CALL FWORD PTR _AddIDTGate\r
+\r
+ MOV ECX, 2Ah ;Int .......... IRQ10\r
+ MOV EAX, 08E00h ;DPL 3, INTERRUPT GATE\r
+ MOV EBX, OSCodeSel ;\r
+ MOV ESI, OFFSET IntQ\r
+ CALL FWORD PTR _AddIDTGate\r
+\r
+ MOV ECX, 2Bh ;Int .......... IRQ11\r
+ MOV EAX, 08E00h ;DPL 3, INTERRUPT GATE\r
+ MOV EBX, OSCodeSel ;\r
+ MOV ESI, OFFSET IntQ\r
+ CALL FWORD PTR _AddIDTGate\r
+\r
+ MOV ECX, 2Ch ;Int .......... IRQ12\r
+ MOV EAX, 08E00h ;DPL 3, INTERRUPT GATE\r
+ MOV EBX, OSCodeSel ;\r
+ MOV ESI, OFFSET IntQ\r
+ CALL FWORD PTR _AddIDTGate\r
+\r
+ MOV ECX, 2Dh ;Int .......... IRQ13\r
+ MOV EAX, 08E00h ;DPL 3, INTERRUPT GATE\r
+ MOV EBX, OSCodeSel ;\r
+ MOV ESI, OFFSET IntQ\r
+ CALL FWORD PTR _AddIDTGate\r
+\r
+ MOV ECX, 2Eh ;Int .......... IRQ14\r
+ MOV EAX, 08E00h ;DPL 3, INTERRUPT GATE\r
+ MOV EBX, OSCodeSel ;\r
+ MOV ESI, OFFSET IntQ\r
+ CALL FWORD PTR _AddIDTGate\r
+\r
+ MOV ECX, 2Fh ;Int .......... IRQ15\r
+ MOV EAX, 08E00h ;DPL 3, INTERRUPT GATE\r
+ MOV EBX, OSCodeSel ;\r
+ MOV ESI, OFFSET IntQ\r
+ CALL FWORD PTR _AddIDTGate\r
+\r
+ RETN\r
+\r
+;=============================================================================\r
+; InitOSPublics adds all OS primitives to the array of call gates. This can't\r
+; before initcallgates, but MUST be called before the first far call to any\r
+; OS primitive thorugh a call gate!!!\r
+; IF YOU ADD AN OS PUBLIC MAKE SURE IT GETS PUT HERE!!!!!\r
+;\r
+; IN : Nothing\r
+; Out : Nothing\r
+; Used : ALL registers and flags\r
+;\r
+PUBLIC InitOSPublics:\r
+\r
+ MOV EAX, 0EC02h ;WaitMsg -- 2 DWord Params, DPL 3\r
+ MOV ECX, 40h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __WaitMsg\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC03h ;SendMsg -- 3 DWord Params, DPL 3\r
+ MOV ECX, 48h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __SendMsg\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 08C03h ;ISendMsg -- 3 DWord params, DPL 0\r
+ MOV ECX, 50h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __ISendMsg\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC01h ;Set Priority - 1Dword param, DPL 3\r
+ MOV ECX, 58h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __SetPriority\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC0Ch ;Request -- 12 nDWord params\r
+ MOV ECX, 60h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __Request\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC02h ;Respond -- 2 nDWord params\r
+ MOV ECX, 68h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __Respond\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC02h ;Check -- 2 DWord Params, DPL 3\r
+ MOV ECX, 70h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __CheckMsg\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC07h ;NewTask -- 7 DWord param, DPL 3\r
+ MOV ECX, 78h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __NewTask\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC01h ;AllocExch -- 1 DWord param, DPL 3\r
+ MOV ECX, 80h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __AllocExch\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC01h ;DeAllocExch -- 1 DWord param, DPL 3\r
+ MOV ECX, 88h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __DeAllocExch\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC01h ;Sleep -- 1 DWord param, DPL 3\r
+ MOV ECX, 90h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __Sleep\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC02h ;Alarm -- 2 DWord params, DPL 3\r
+ MOV ECX, 98h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __Alarm\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC02h ;AllocOSPage -- 2 DWord params, DPL 3\r
+ MOV ECX, 0A0h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __AllocOSPage\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC02h ;AllocPage -- 2 DWord params, DPL 3\r
+ MOV ECX, 0A8h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __AllocPage\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC02h ;RegisterSvc -- 2 DWord params, DPL 3\r
+ MOV ECX, 0B0h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __RegisterSvc\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 08C05h ;DMASetUp -- 5 DWord Params DPL 0\r
+ MOV ECX, 0B8h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __DMASetUp\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC02h ;ReadKBD -- 2 DWord Param DPL 3\r
+ MOV ECX, 0C0h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __ReadKBD\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 08C00h ;AddCallGate -- 0 DWord Params DPL 0\r
+ MOV ECX, 0C8h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __AddCallGate\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 08C00h ;AddIDTGate -- 0 DWord Params DPL 0\r
+ MOV ECX, 0D0h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __AddIDTGate\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 08C01h ;EndOfIRQ -- 1 DWord Params DPL 0\r
+ MOV ECX, 0D8h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __EndOfIRQ\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 08C01h ;MaskIRQ -- 1 DWord Params DPL 0\r
+ MOV ECX, 0E0h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __MaskIRQ\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 08C01h ;UnMaskIRQ -- 1 DWord Params DPL 0\r
+ MOV ECX, 0E8h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __UnMaskIRQ\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 08C02h ;SetIRQVector -- 2 DWord Params DPL 0\r
+ MOV ECX, 0F0h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __SetIRQVector\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 08C02h ;GetIRQVector -- 2 DWord Params DPL 0\r
+ MOV ECX, 0F8h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __GetIRQVector\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 08C04h ;InitDevDr -- 4 DWord Params DPL 0\r
+ MOV ECX, 100h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __InitDevDr\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC03h ;DeviceInit -- 3 DWord Params DPL 3\r
+ MOV ECX, 108h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __DeviceInit\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC05h ;DeviceOp -- 5 DWord Params DPL 3\r
+ MOV ECX, 110h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __DeviceOp\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC04h ;DeviceStat -- 4 DWord Params DPL 3\r
+ MOV ECX, 118h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __DeviceStat\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC00h ;Beep -- 0 DWord Params DPL 3\r
+ MOV ECX, 120h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __Beep\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC02h ;Tone -- 2 DWord Params DPL 3\r
+ MOV ECX, 128h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __Tone\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC01h ;KillAlarm -- 1 DWord Params DPL 3\r
+ MOV ECX, 130h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __KillAlarm\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC01h ;MicroDelay -- 1 DWord Params DPL 3\r
+ MOV ECX, 138h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __MicroDelay\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC05h ;SpawnTask -- 5 DWord param, DPL 3\r
+ MOV ECX, 140h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __SpawnTask\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC01h ;GetCMOSTime -- 1 DWord param, DPL 3\r
+ MOV ECX, 148h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __GetCMOSTime\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC01h ;GetTimerTick -- 1 DWord param, DPL 3\r
+ MOV ECX, 150h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __GetTimerTick\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 08C02h ;OutByte -- 2 DWord param, DPL 0\r
+ MOV ECX, 158h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __OutByte\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 08C02h ;OutWord -- 2 DWord param, DPL 0\r
+ MOV ECX, 160h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __OutWord\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 08C02h ;OutDWord -- 2 DWord param, DPL 0\r
+ MOV ECX, 168h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __OutDWord\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 08C01h ;InByte -- 1 DWord param, DPL 0\r
+ MOV ECX, 170h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __InByte\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 08C01h ;InWord -- 1 DWord param, DPL 0\r
+ MOV ECX, 178h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __InWord\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 08C01h ;InDWord -- 1 DWord param, DPL 0\r
+ MOV ECX, 180h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __InDWord\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC01h ;ReadCMOS -- 1 DWord param, DPL 3\r
+ MOV ECX, 188h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __ReadCMOS\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC03h ;CopyData -- 3 DWord param, DPL 3\r
+ MOV ECX, 190h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __CopyData\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC03h ;CopyDataR -- 3 DWord param, DPL 3\r
+ MOV ECX, 198h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __CopyDataR\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC03h ;FillData -- 3 DWord param, DPL 3\r
+ MOV ECX, 1A0h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __FillData\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC03h ;CompareNCS -- 3 DWord param, DPL 3\r
+ MOV ECX, 1A8h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __CompareNCS\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC03h ;Compare -- 3 DWord param, DPL 3\r
+ MOV ECX, 1B0h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __Compare\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 08C03h ;InWords -- 3 DWord param, DPL 0\r
+ MOV ECX, 1B8h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __InWords\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 08C03h ;OutWords -- 3 DWord param, DPL 0\r
+ MOV ECX, 1C0h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __OutWords\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC02h ;MoveRequest -- 2 nDWord params DPL 3\r
+ MOV ECX, 1C8h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __MoveRequest\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC02h ;DeAllocPage -- 2 nDWord params DPL 3\r
+ MOV ECX, 1D0h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __DeAllocPage\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC03h ;LoadNewJob -- 3 nDWord params DPL 3\r
+ MOV ECX, 1D8h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __LoadNewJob\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC01h ;SetVidOwner -- 1 nDWord params DPL 3\r
+ MOV ECX, 1E0h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __SetVidOwner\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC01h ;GetVidOwner -- 1 nDWord params DPL 3\r
+ MOV ECX, 1E8h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __GetVidOwner\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC00h ;ClrScr -- 0 nDWord params DPL 3\r
+ MOV ECX, 1F0h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __ClrScr\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC03h ;TTYOut -- 3 nDWord params DPL 3\r
+ MOV ECX, 1F8h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __TTYOut\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC05h ;PutVidChars -- 5 nDWord params DPL 3\r
+ MOV ECX, 200h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __PutVidChars\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC02h ;SetXY -- 2 nDWord params DPL 3\r
+ MOV ECX, 208h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __SetXY\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC02h ;GetXY -- 2 nDWord params DPL 3\r
+ MOV ECX, 210h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __GetXY\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC06h ;EditLine -- 6 nDWord params DPL 3\r
+ MOV ECX, 218h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __EditLine\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC01h ;GetTSSExch -- 1 nDWord params DPL 3\r
+ MOV ECX, 220h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __GetTSSExch\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC05h ;OpenFile -- 5 nDWord params DPL 3\r
+ MOV ECX, 228h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __OpenFile\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC01h ;CloseFile -- 1 nDWord params DPL 3\r
+ MOV ECX, 230h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __CloseFile\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC05h ;ReadBlock -- 5 nDWord params DPL 3\r
+ MOV ECX, 238h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __ReadBlock\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC05h ;WriteBlock -- 5 nDWord params DPL 3\r
+ MOV ECX, 240h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __WriteBlock\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC04h ;ReadBytes -- 4 nDWord params DPL 3\r
+ MOV ECX, 248h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __ReadBytes\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC04h ;WriteBytes -- 4 nDWord params DPL 3\r
+ MOV ECX, 250h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __WriteBytes\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC02h ;GetFileLFA -- 2 nDWord params DPL 3\r
+ MOV ECX, 258h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __GetFileLFA\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC02h ;SetFileLFA -- 2 nDWord params DPL 3\r
+ MOV ECX, 260h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __SetFileLFA\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC02h ;GetFileSize -- 2 nDWord params DPL 3\r
+ MOV ECX, 268h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __GetFileSize\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC03h ;CreateFile -- 3 nDWord params DPL 3\r
+ MOV ECX, 270h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __CreateFile\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC04h ;RenameFile -- 4 nDWord params DPL 3\r
+ MOV ECX, 278h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __RenameFile\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC01h ;DeleteFile -- 1 nDWord params DPL 3\r
+ MOV ECX, 280h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __DeleteFile\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC02h ;GetpJCB -- 2 nDWord params DPL 3\r
+ MOV ECX, 288h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __GetpJCB\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC01h ;QueryPages -- 1 nDWord params DPL 3\r
+ MOV ECX, 290h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __QueryPages\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC02h ;GetPhyAdd -- 2 nDWord params DPL 3\r
+ MOV ECX, 298h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __GetPhyAdd\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC05h ;ScrollVid -- 5 nDWord params DPL 3\r
+ MOV ECX, 2A0h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __ScrollVid\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC05h ;GetDirSector -- 5 nDWord params DPL 3\r
+ MOV ECX, 2A8h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __GetDirSector\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC01h ;GetJobNum -- 1 nDWord params DPL 3\r
+ MOV ECX, 2B0h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __GetJobNum\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC01h ;ExitJob -- 1 nDWord params DPL 3\r
+ MOV ECX, 2B8h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __ExitJob\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC02h ;SetUserName -- 2 nDWord params DPL 3\r
+ MOV ECX, 2C0h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __SetUserName\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC02h ;GetUserName -- 2 nDWord params DPL 3\r
+ MOV ECX, 2C8h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __GetUserName\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC02h ;SetCmdLine -- 2 nDWord params DPL 3\r
+ MOV ECX, 2D0h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __SetCmdLine\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC02h ;GetCmdLine -- 2 nDWord params DPL 3\r
+ MOV ECX, 2D8h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __GetCmdLine\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC02h ;SetPath -- 2 nDWord params DPL 3\r
+ MOV ECX, 2E0h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __SetPath\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC03h ;GetPath -- 3 nDWord params DPL 3\r
+ MOV ECX, 2E8h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __GetPath\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC02h ;SetExitJob -- 2 nDWord params DPL 3\r
+ MOV ECX, 2F0h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __SetExitJob\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC02h ;GetExitJob -- 2 nDWord params DPL 3\r
+ MOV ECX, 2F8h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __GetExitJob\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC02h ;SetSysIn -- 2 nDWord params DPL 3\r
+ MOV ECX, 300h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __SetSysIn\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC02h ;SetSysOut -- 2 nDWord params DPL 3\r
+ MOV ECX, 308h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __SetSysOut\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC02h ;GetSysIn -- 2 nDWord params DPL 3\r
+ MOV ECX, 310h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __GetSysIn\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC02h ;GetSysOut -- 2 nDWord params DPL 3\r
+ MOV ECX, 318h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __GetSysOut\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC04h ;PutVidAttrs -- 4 nDWord params DPL 3\r
+ MOV ECX, 320h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __PutVidAttrs\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC04h ;GetVidChar -- 4 nDWord params DPL 3\r
+ MOV ECX, 328h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __GetVidChar\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC01h ;SetNormVid -- 1 nDWord params DPL 3\r
+ MOV ECX, 330h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __SetNormVid\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC01h ;GetNormVid -- 1 nDWord params DPL 3\r
+ MOV ECX, 338h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __GetNormVid\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC03h ;Chain -- 3 nDWord params DPL 3\r
+ MOV ECX, 340h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __Chain\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC02h ;SetFileSize -- 2 nDWord params DPL 3\r
+ MOV ECX, 348h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __SetFileSize\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC01h ;GetCMOSDate -- 1 nDWord params DPL 3\r
+ MOV ECX, 350h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __GetCMOSDate\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC02h ;CreateDir -- 2 nDWord params DPL 3\r
+ MOV ECX, 358h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __CreateDir\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC03h ;DeleteDir -- 3 nDWord params DPL 3\r
+ MOV ECX, 360h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __DeleteDir\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC03h ;DeAliasMem -- 3 DWord params DPL 3\r
+ MOV ECX, 368h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __DeAliasMem\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC04h ;AliasMem -- 4 DWord params DPL 3\r
+ MOV ECX, 370h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __AliasMem\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 08C02h ;GetDMACount -- 2 DWord params DPL 0\r
+ MOV ECX, 378h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __GetDMACount\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 08C03h ;AllocDMAPage -- 3 DWord params DPL 0\r
+ MOV ECX, 380h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __AllocDMAPage\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC02h ;SetJobName -- 2 DWord params DPL 3\r
+ MOV ECX, 388h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __SetJobName\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC01h ;KillJob -- 1 DWord params DPL 3\r
+ MOV ECX, 390h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __KillJob\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC01h ;GetSystemDisk -- 1 DWord params DPL 3\r
+ MOV ECX, 398h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __GetSystemDisk\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ MOV EAX, 0EC01h ;UnRegisterSvc -- 1 DWord params DPL 3\r
+ MOV ECX, 3A0h\r
+ MOV DX, OSCodeSel\r
+ MOV ESI, OFFSET __UnRegisterSvc\r
+ CALL FWORD PTR _AddCallGate\r
+\r
+ RETN\r
+\r
+;================== END of Module =================\r