]> pd.if.org Git - mmurtl/commitdiff
autocommit for file dated 1995-01-01 15:42:26
authorRichard Burgess <>
Sun, 1 Jan 1995 15:42:26 +0000 (15:42 +0000)
committerNathan Wagner <nw@hydaspes.if.org>
Mon, 17 Oct 2016 14:03:47 +0000 (14:03 +0000)
ossource/initcode.asm [new file with mode: 0644]

diff --git a/ossource/initcode.asm b/ossource/initcode.asm
new file mode 100644 (file)
index 0000000..f927060
--- /dev/null
@@ -0,0 +1,1095 @@
+;   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