--- /dev/null
+[FORMAT "WCOFF"]\r
+[INSTRSET "i486p"]\r
+[BITS 32]\r
+[FILE "nasfunc0.nas"]\r
+ GLOBAL _IO_HLT\r
+ GLOBAL _IO_CLI, _IO_STI, _IO_STIHLT\r
+ GLOBAL _IO_In8, _IO_Out8\r
+ GLOBAL _IO_In16, _IO_Out16\r
+ GLOBAL _IO_In32, _IO_Out32\r
+ GLOBAL _IO_Load_EFlags, _IO_Store_EFlags\r
+ GLOBAL _Load_CR0, _Store_CR0\r
+ GLOBAL _Load_CR2, _Store_CR2\r
+ GLOBAL _Load_CR3, _Store_CR3\r
+ GLOBAL _Load_CR4, _Store_CR4\r
+ GLOBAL _Load_GDTR\r
+ GLOBAL _Load_IDTR\r
+ GLOBAL _Load_TR\r
+ GLOBAL _FarJMP\r
+ GLOBAL _FarCall\r
+ GLOBAL _CLTS\r
+ GLOBAL _FNSave, _FRStore\r
+ GLOBAL _PIT_Beep_On, _PIT_Beep_Off, _PIT_Beep_Set\r
+ GLOBAL _CPUID, _CPUID2\r
+ GLOBAL _Read_TSC\r
+ GLOBAL _Memory_Test_Sub\r
+ GLOBAL _INT_3\r
+ GLOBAL _APP_Run\r
+\r
+[SECTION .text]\r
+\r
+_IO_HLT:\r
+ hlt\r
+ ret\r
+\r
+_IO_CLI:\r
+ cli\r
+ ret\r
+\r
+_IO_STI:\r
+ sti\r
+ ret\r
+\r
+_IO_STIHLT:\r
+ sti\r
+ hlt\r
+ ret\r
+\r
+_IO_In8:\r
+ mov edx,[esp+4]\r
+ mov eax,0\r
+ in al,dx\r
+ ret\r
+\r
+_IO_Out8:\r
+ mov edx,[esp+4]\r
+ mov al,[esp+8]\r
+ out dx,al\r
+ ret\r
+\r
+_IO_In16:\r
+ mov edx,[esp+4]\r
+ mov eax,0\r
+ in ax,dx\r
+ ret\r
+\r
+_IO_Out16:\r
+ mov edx,[esp+4]\r
+ mov ax,[esp+8]\r
+ out dx,ax\r
+ ret\r
+\r
+_IO_In32:\r
+ mov edx,[esp+4]\r
+ in eax,dx\r
+ ret\r
+\r
+_IO_Out32:\r
+ mov edx,[esp+4]\r
+ mov eax,[esp+8]\r
+ out dx,eax\r
+ ret\r
+\r
+_IO_Load_EFlags:\r
+ pushfd\r
+ pop eax\r
+ ret\r
+\r
+_IO_Store_EFlags:\r
+ mov eax,[esp+4]\r
+ push eax\r
+ popfd\r
+ ret\r
+\r
+_Load_CR0:\r
+ mov eax,cr0\r
+ ret\r
+\r
+_Store_CR0:\r
+ mov eax,[esp+4]\r
+ mov cr0,eax\r
+ ret\r
+\r
+_Load_CR2:\r
+ mov eax,cr2\r
+ ret\r
+\r
+_Store_CR2:\r
+ mov eax,[esp+4]\r
+ mov cr2,eax\r
+ ret\r
+\r
+_Load_CR3:\r
+ mov eax,cr3\r
+ ret\r
+\r
+_Store_CR3:\r
+ mov eax,[esp+4]\r
+ mov cr3,eax\r
+ ret\r
+\r
+_Load_CR4:\r
+ mov eax,cr3\r
+ ret\r
+\r
+_Store_CR4:\r
+ mov eax,[esp+4]\r
+ mov cr4,eax\r
+ ret\r
+\r
+_Load_GDTR:\r
+ mov ax,[esp+4]\r
+ mov [esp+6],ax\r
+ lgdt [esp+6]\r
+ ret\r
+\r
+_Load_IDTR:\r
+ mov ax,[esp+4]\r
+ mov [esp+6],ax\r
+ lidt [esp+6]\r
+ ret\r
+\r
+_Load_TR:\r
+ ltr [esp+4]\r
+ ret\r
+\r
+_FarJMP:\r
+ jmp far [esp+4]\r
+ ret\r
+\r
+_FarCall:\r
+ call far [esp+4]\r
+ ret\r
+\r
+_CLTS:\r
+ clts\r
+ ret\r
+\r
+_FNSave:\r
+ mov eax,[esp+4] ; addr\r
+ fnsave [eax]\r
+ ret\r
+\r
+_FRStore:\r
+ mov eax,[esp+4] ; addr\r
+ frstor [eax]\r
+ ret\r
+\r
+_PIT_Beep_On:\r
+ in al,0x61\r
+ or al,0x03\r
+ and al,0x0f\r
+ out 0x61,al\r
+ ret\r
+\r
+_PIT_Beep_Off:\r
+ in al,0x61\r
+ and al,0xd\r
+ out 0x61,al\r
+ ret\r
+\r
+_PIT_Beep_Set:\r
+ mov eax,1193180\r
+ mov edx,0x00000000\r
+ mov ecx,[esp+4]\r
+ div ecx\r
+ mov edx,eax\r
+ mov al,0xb6\r
+ out 0x43,al\r
+ mov eax,edx\r
+ out 0x42,al\r
+ shr eax,8\r
+ out 0x42,al\r
+ ret\r
+\r
+_CPUID:\r
+ pushad\r
+ mov esi,[esp+36]\r
+ mov eax,[esp+40]\r
+ db 0x0f,0xa2\r
+ mov [esi ],eax\r
+ mov [esi+ 4],ebx\r
+ mov [esi+ 8],edx\r
+ mov [esi+12],ecx\r
+ popad\r
+ ret\r
+\r
+_CPUID2:\r
+ pushad\r
+ mov esi,[esp+36]\r
+ mov eax,[esp+40]\r
+ db 0x0f,0xa2\r
+ mov [esi ],eax\r
+ mov [esi+ 4],ebx\r
+ mov [esi+ 8],ecx\r
+ mov [esi+12],edx\r
+ popad\r
+ ret\r
+\r
+_Read_TSC:\r
+ pushad\r
+ mov ebx,[esp+36]\r
+ db 0x0f,0x31\r
+ mov [ebx],edx\r
+ mov [ebx+4],eax\r
+ popad\r
+ ret\r
+\r
+_Memory_Test_Sub:\r
+ push edi\r
+ push esi\r
+ push ebx\r
+ mov esi,0xaa55aa55\r
+ mov edi,0x55aa55aa\r
+ mov eax,[esp+12+4]\r
+mts_loop:\r
+ mov ebx,eax\r
+ add ebx,0xffc\r
+ mov edx,[ebx]\r
+ mov [ebx],esi\r
+ xor dword [ebx],0xffffffff\r
+ cmp edi,[ebx]\r
+ jne mts_fin\r
+ xor dword [ebx],0xffffffff\r
+ cmp esi,[ebx]\r
+ jne mts_fin\r
+ mov [ebx],edx\r
+ add eax,0x1000\r
+ cmp eax,[esp+12+8]\r
+ jbe mts_loop\r
+ pop ebx\r
+ pop esi\r
+ pop edi\r
+ ret\r
+mts_fin:\r
+ mov [ebx],edx\r
+ pop ebx\r
+ pop esi\r
+ pop edi\r
+ ret\r
+\r
+_INT_3:\r
+ int 3\r
+ ret\r
+\r
+_APP_Run:\r
+ pushad\r
+ mov eax,[esp+36]\r
+ mov ecx,[esp+40]\r
+ mov edx,[esp+44]\r
+ mov ebx,[esp+48]\r
+ mov ebp,[esp+52]\r
+ mov [ebp ],esp\r
+ mov [ebp+4],ss\r
+ mov es,bx\r
+ mov ds,bx\r
+ mov fs,bx\r
+ mov gs,bx\r
+\r
+ or ecx,3\r
+ or ebx,3\r
+ push ebx\r
+ push edx\r
+ push ecx\r
+ push eax\r
+ retf\r