+++ /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_DR0, _Store_DR0\r
- GLOBAL _Load_DR1, _Store_DR1\r
- GLOBAL _Load_DR2, _Store_DR2\r
- GLOBAL _Load_DR3, _Store_DR3\r
- GLOBAL _Load_DR6, _Store_DR6\r
- GLOBAL _Load_DR7, _Store_DR7\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 _TSC_Read\r
- GLOBAL _Memory_Test_Sub\r
- GLOBAL _INT_3\r
- GLOBAL _DIV_64_32, _MOD_64_32\r
- GLOBAL _MOVSD_ZeroFill\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_DR0:\r
- mov eax,dr0\r
- ret\r
-\r
-_Store_DR0:\r
- mov eax,[esp+4]\r
- mov dr0,eax\r
- ret\r
-\r
-_Load_DR1:\r
- mov eax,dr1\r
- ret\r
-\r
-_Store_DR1:\r
- mov eax,[esp+4]\r
- mov dr1,eax\r
- ret\r
-\r
-_Load_DR2:\r
- mov eax,dr2\r
- ret\r
-\r
-_Store_DR2:\r
- mov eax,[esp+4]\r
- mov dr2,eax\r
- ret\r
-\r
-_Load_DR3:\r
- mov eax,dr3\r
- ret\r
-\r
-_Store_DR3:\r
- mov eax,[esp+4]\r
- mov dr3,eax\r
- ret\r
-\r
-_Load_DR6:\r
- mov eax,dr6\r
- ret\r
-\r
-_Store_DR6:\r
- mov eax,[esp+4]\r
- mov dr6,eax\r
- ret\r
-\r
-_Load_DR7:\r
- mov eax,dr7\r
- ret\r
-\r
-_Store_DR7:\r
- mov eax,[esp+4]\r
- mov dr7,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
-_TSC_Read:\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
-_DIV_64_32:\r
- mov eax,[esp+4]\r
- mov edx,[esp+8]\r
- div dword[esp+12]\r
- ret\r
-\r
-_MOD_64_32:\r
- mov eax,[esp+4]\r
- mov edx,[esp+8]\r
- div dword[esp+12]\r
- mov eax,edx\r
- ret\r
-\r
-_MOVSD_ZeroFill:\r
- cld\r
- push esi\r
- push edi\r
- mov ax, ds\r
- mov es, ax\r
- mov eax, 0x00000000\r
- mov edi, [esp+8+4]\r
- mov ecx, [esp+8+8]\r
- shr ecx, 2\r
- rep stosd\r
- pop edi\r
- pop esi\r
- ret\r
-\r