+++ /dev/null
-[FORMAT "WCOFF"]\r
-[INSTRSET "i486p"]\r
-[BITS 32]\r
-[FILE "naskfunc.nas"]\r
-\r
- GLOBAL _io_hlt, _io_cli, _io_sti, _io_stihlt\r
- GLOBAL _io_in8, _io_in16, _io_in32\r
- GLOBAL _io_out8, _io_out16, _io_out32\r
- GLOBAL _io_load_eflags, _io_store_eflags\r
- GLOBAL _load_gdtr, _load_idtr\r
- GLOBAL _load_cr0, _store_cr0\r
- GLOBAL _load_cr1, _store_cr1\r
- GLOBAL _load_cr2, _store_cr2\r
- GLOBAL _load_cr3, _store_cr3\r
- GLOBAL _load_tr\r
- GLOBAL _asm_end_app\r
- GLOBAL _memtest_sub\r
- GLOBAL _farjmp, _farcall\r
- GLOBAL _start_app\r
- GLOBAL _asm_osselect_third\r
- GLOBAL _clts, _fnsave, _frstor\r
- GLOBAL _pit_beep_on, _pit_beep_off\r
- GLOBAL _pipelineflush\r
- GLOBAL _read_tsc\r
- GLOBAL _cpuid\r
-\r
- GLOBAL _asm_inthandler00, _asm_inthandler01, _asm_inthandler02, _asm_inthandler03, _asm_inthandler04, _asm_inthandler05, _asm_inthandler06, _asm_inthandler07, _asm_inthandler08, _asm_inthandler09, _asm_inthandler0a, _asm_inthandler0b, _asm_inthandler0c, _asm_inthandler0d, _asm_inthandler0e, _asm_inthandler0f, _asm_inthandler10, _asm_inthandler11, _asm_inthandler12, _asm_inthandler13, _asm_inthandler14, _asm_inthandler15, _asm_inthandler16, _asm_inthandler17, _asm_inthandler18, _asm_inthandler19, _asm_inthandler1a, _asm_inthandler1b, _asm_inthandler1c, _asm_inthandler1d, _asm_inthandler1e, _asm_inthandler1f\r
- EXTERN _inthandler00, _inthandler01, _inthandler02, _inthandler03, _inthandler04, _inthandler05, _inthandler06, _inthandler07, _inthandler08, _inthandler09, _inthandler0a, _inthandler0b, _inthandler0c, _inthandler0d, _inthandler0e, _inthandler0f, _inthandler10, _inthandler11, _inthandler12, _inthandler13, _inthandler14, _inthandler15, _inthandler16, _inthandler17, _inthandler18, _inthandler19, _inthandler1a, _inthandler1b, _inthandler1c, _inthandler1d, _inthandler1e, _inthandler1f\r
-\r
- GLOBAL _asm_inthandler27\r
- EXTERN _inthandler27\r
-\r
- GLOBAL _asm_inthandler20\r
- EXTERN _inthandler20\r
-\r
- GLOBAL _asm_inthandler21\r
- EXTERN _inthandler21\r
-\r
- GLOBAL _asm_inthandler2c\r
- EXTERN _inthandler2c\r
-\r
- GLOBAL _asm_hrb_api\r
- EXTERN _hrb_api\r
-\r
-[SECTION .text]\r
-\r
-_asm_hrb_api:\r
- sti\r
- push ds\r
- push es\r
- pushad\r
- pushad\r
- mov ax,ss\r
- mov ds,ax\r
- mov es,ax\r
- call _hrb_api\r
- cmp eax,0\r
- jne _asm_end_app\r
- add esp,32\r
- popad\r
- pop es\r
- pop ds\r
- iretd\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
-_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
-_asm_inthandler2c:\r
- push es\r
- push ds\r
- pushad\r
- mov eax,esp\r
- push eax\r
- mov ax,ss\r
- mov ds,ax\r
- mov es,ax\r
- call _inthandler2c\r
- pop eax\r
- popad\r
- pop ds\r
- pop es\r
- iretd\r
-\r
-_asm_inthandler21:\r
- push es\r
- push ds\r
- pushad\r
- mov eax,esp\r
- push eax\r
- mov ax,ss\r
- mov ds,ax\r
- mov es,ax\r
- call _inthandler21\r
- pop eax\r
- popad\r
- pop ds\r
- pop es\r
- iretd\r
-\r
-_asm_inthandler20:\r
- push es\r
- push ds\r
- pushad\r
- mov eax,esp\r
- push eax\r
- mov ax,ss\r
- mov ds,ax\r
- mov es,ax\r
- call _inthandler20\r
- pop eax\r
- popad\r
- pop ds\r
- pop es\r
- iretd\r
-\r
-_pipelineflush:\r
- jmp flush\r
-flush:\r
- ret\r
-\r
-\r
-_asm_inthandler00:\r
- push es\r
- push ds\r
- pushad\r
- mov eax,esp\r
- push eax\r
- mov ax,ss\r
- mov ds,ax\r
- mov es,ax\r
- call _inthandler00\r
- pop eax\r
- popad\r
- pop ds\r
- pop es\r
- iretd\r
-\r
-_asm_inthandler01:\r
- push es\r
- push ds\r
- pushad\r
- mov eax,esp\r
- push eax\r
- mov ax,ss\r
- mov ds,ax\r
- mov es,ax\r
- call _inthandler01\r
- pop eax\r
- popad\r
- pop ds\r
- pop es\r
- iretd\r
-\r
-_asm_inthandler02:\r
- push es\r
- push ds\r
- pushad\r
- mov eax,esp\r
- push eax\r
- mov ax,ss\r
- mov ds,ax\r
- mov es,ax\r
- call _inthandler02\r
- pop eax\r
- popad\r
- pop ds\r
- pop es\r
- iretd\r
-\r
-_asm_inthandler03:\r
- push es\r
- push ds\r
- pushad\r
- mov eax,esp\r
- push eax\r
- mov ax,ss\r
- mov ds,ax\r
- mov es,ax\r
- call _inthandler03\r
- pop eax\r
- popad\r
- pop ds\r
- pop es\r
- iretd\r
-\r
-_asm_inthandler04:\r
- push es\r
- push ds\r
- pushad\r
- mov eax,esp\r
- push eax\r
- mov ax,ss\r
- mov ds,ax\r
- mov es,ax\r
- call _inthandler04\r
- pop eax\r
- popad\r
- pop ds\r
- pop es\r
- iretd\r
-\r
-_asm_inthandler05:\r
- push es\r
- push ds\r
- pushad\r
- mov eax,esp\r
- push eax\r
- mov ax,ss\r
- mov ds,ax\r
- mov es,ax\r
- call _inthandler05\r
- pop eax\r
- popad\r
- pop ds\r
- pop es\r
- iretd\r
-\r
-_asm_inthandler06:\r
- push es\r
- push ds\r
- pushad\r
- mov eax,esp\r
- push eax\r
- mov ax,ss\r
- mov ds,ax\r
- mov es,ax\r
- call _inthandler06\r
- pop eax\r
- popad\r
- pop ds\r
- pop es\r
- iretd\r
-\r
-_asm_inthandler07:\r
- push es\r
- push ds\r
- pushad\r
- mov eax,esp\r
- push eax\r
- mov ax,ss\r
- mov ds,ax\r
- mov es,ax\r
- call _inthandler07\r
- pop eax\r
- popad\r
- pop ds\r
- pop es\r
- iretd\r
-\r
-_asm_inthandler08:\r
- push es\r
- push ds\r
- pushad\r
- mov eax,esp\r
- push eax\r
- mov ax,ss\r
- mov ds,ax\r
- mov es,ax\r
- call _inthandler08\r
- pop eax\r
- popad\r
- pop ds\r
- pop es\r
- iretd\r
-\r
-_asm_inthandler09:\r
- push es\r
- push ds\r
- pushad\r
- mov eax,esp\r
- push eax\r
- mov ax,ss\r
- mov ds,ax\r
- mov es,ax\r
- call _inthandler09\r
- pop eax\r
- popad\r
- pop ds\r
- pop es\r
- iretd\r
-\r
-_asm_inthandler0a:\r
- push es\r
- push ds\r
- pushad\r
- mov eax,esp\r
- push eax\r
- mov ax,ss\r
- mov ds,ax\r
- mov es,ax\r
- call _inthandler0a\r
- pop eax\r
- popad\r
- pop ds\r
- pop es\r
- iretd\r
-\r
-_asm_inthandler0b:\r
- push es\r
- push ds\r
- pushad\r
- mov eax,esp\r
- push eax\r
- mov ax,ss\r
- mov ds,ax\r
- mov es,ax\r
- call _inthandler0b\r
- pop eax\r
- popad\r
- pop ds\r
- pop es\r
- iretd\r
-\r
-_asm_inthandler0c:\r
- push es\r
- push ds\r
- pushad\r
- mov eax,esp\r
- push eax\r
- mov ax,ss\r
- mov ds,ax\r
- mov es,ax\r
- call _inthandler0c\r
- cmp eax,0\r
- jne _asm_end_app\r
- pop eax\r
- popad\r
- pop ds\r
- pop es\r
- iretd\r
-\r
-_asm_inthandler0d:\r
- push es\r
- push ds\r
- pushad\r
- mov eax,esp\r
- push eax\r
- mov ax,ss\r
- mov ds,ax\r
- mov es,ax\r
- call _inthandler0d\r
- cmp eax,0\r
- jne _asm_end_app\r
- pop eax\r
- popad\r
- pop ds\r
- pop es\r
- iretd\r
-\r
-_asm_inthandler0e:\r
- push es\r
- push ds\r
- pushad\r
- mov eax,esp\r
- push eax\r
- mov ax,ss\r
- mov ds,ax\r
- mov es,ax\r
- call _inthandler0e\r
- pop eax\r
- popad\r
- pop ds\r
- pop es\r
- iretd\r
-\r
-_asm_inthandler0f:\r
- push es\r
- push ds\r
- pushad\r
- mov eax,esp\r
- push eax\r
- mov ax,ss\r
- mov ds,ax\r
- mov es,ax\r
- call _inthandler0f\r
- pop eax\r
- popad\r
- pop ds\r
- pop es\r
- iretd\r
-\r
-_asm_inthandler10:\r
- push es\r
- push ds\r
- pushad\r
- mov eax,esp\r
- push eax\r
- mov ax,ss\r
- mov ds,ax\r
- mov es,ax\r
- call _inthandler10\r
- pop eax\r
- popad\r
- pop ds\r
- pop es\r
- iretd\r
-\r
-_asm_inthandler11:\r
- push es\r
- push ds\r
- pushad\r
- mov eax,esp\r
- push eax\r
- mov ax,ss\r
- mov ds,ax\r
- mov es,ax\r
- call _inthandler11\r
- pop eax\r
- popad\r
- pop ds\r
- pop es\r
- iretd\r
-\r
-_asm_inthandler12:\r
- push es\r
- push ds\r
- pushad\r
- mov eax,esp\r
- push eax\r
- mov ax,ss\r
- mov ds,ax\r
- mov es,ax\r
- call _inthandler12\r
- pop eax\r
- popad\r
- pop ds\r
- pop es\r
- iretd\r
-\r
-_asm_inthandler13:\r
- push es\r
- push ds\r
- pushad\r
- mov eax,esp\r
- push eax\r
- mov ax,ss\r
- mov ds,ax\r
- mov es,ax\r
- call _inthandler13\r
- pop eax\r
- popad\r
- pop ds\r
- pop es\r
- iretd\r
-\r
-_asm_inthandler14:\r
- push es\r
- push ds\r
- pushad\r
- mov eax,esp\r
- push eax\r
- mov ax,ss\r
- mov ds,ax\r
- mov es,ax\r
- call _inthandler14\r
- pop eax\r
- popad\r
- pop ds\r
- pop es\r
- iretd\r
-\r
-_asm_inthandler15:\r
- push es\r
- push ds\r
- pushad\r
- mov eax,esp\r
- push eax\r
- mov ax,ss\r
- mov ds,ax\r
- mov es,ax\r
- call _inthandler15\r
- pop eax\r
- popad\r
- pop ds\r
- pop es\r
- iretd\r
-\r
-_asm_inthandler16:\r
- push es\r
- push ds\r
- pushad\r
- mov eax,esp\r
- push eax\r
- mov ax,ss\r
- mov ds,ax\r
- mov es,ax\r
- call _inthandler16\r
- pop eax\r
- popad\r
- pop ds\r
- pop es\r
- iretd\r
-\r
-_asm_inthandler17:\r
- push es\r
- push ds\r
- pushad\r
- mov eax,esp\r
- push eax\r
- mov ax,ss\r
- mov ds,ax\r
- mov es,ax\r
- call _inthandler17\r
- pop eax\r
- popad\r
- pop ds\r
- pop es\r
- iretd\r
-\r
-_asm_inthandler18:\r
- push es\r
- push ds\r
- pushad\r
- mov eax,esp\r
- push eax\r
- mov ax,ss\r
- mov ds,ax\r
- mov es,ax\r
- call _inthandler18\r
- pop eax\r
- popad\r
- pop ds\r
- pop es\r
- iretd\r
-\r
-_asm_inthandler19:\r
- push es\r
- push ds\r
- pushad\r
- mov eax,esp\r
- push eax\r
- mov ax,ss\r
- mov ds,ax\r
- mov es,ax\r
- call _inthandler19\r
- pop eax\r
- popad\r
- pop ds\r
- pop es\r
- iretd\r
-\r
-_asm_inthandler1a:\r
- push es\r
- push ds\r
- pushad\r
- mov eax,esp\r
- push eax\r
- mov ax,ss\r
- mov ds,ax\r
- mov es,ax\r
- call _inthandler1a\r
- pop eax\r
- popad\r
- pop ds\r
- pop es\r
- iretd\r
-\r
-_asm_inthandler1b:\r
- push es\r
- push ds\r
- pushad\r
- mov eax,esp\r
- push eax\r
- mov ax,ss\r
- mov ds,ax\r
- mov es,ax\r
- call _inthandler1b\r
- pop eax\r
- popad\r
- pop ds\r
- pop es\r
- iretd\r
-\r
-_asm_inthandler1c:\r
- push es\r
- push ds\r
- pushad\r
- mov eax,esp\r
- push eax\r
- mov ax,ss\r
- mov ds,ax\r
- mov es,ax\r
- call _inthandler1c\r
- pop eax\r
- popad\r
- pop ds\r
- pop es\r
- iretd\r
-\r
-_asm_inthandler1d:\r
- push es\r
- push ds\r
- pushad\r
- mov eax,esp\r
- push eax\r
- mov ax,ss\r
- mov ds,ax\r
- mov es,ax\r
- call _inthandler1d\r
- pop eax\r
- popad\r
- pop ds\r
- pop es\r
- iretd\r
-\r
-_asm_inthandler1e:\r
- push es\r
- push ds\r
- pushad\r
- mov eax,esp\r
- push eax\r
- mov ax,ss\r
- mov ds,ax\r
- mov es,ax\r
- call _inthandler1e\r
- pop eax\r
- popad\r
- pop ds\r
- pop es\r
- iretd\r
-\r
-_asm_inthandler1f:\r
- push es\r
- push ds\r
- pushad\r
- mov eax,esp\r
- push eax\r
- mov ax,ss\r
- mov ds,ax\r
- mov es,ax\r
- call _inthandler1f\r
- pop eax\r
- popad\r
- pop ds\r
- pop es\r
- iretd\r
-\r
-_asm_inthandler27:\r
- push es\r
- push ds\r
- pushad\r
- mov eax,esp\r
- push eax\r
- mov ax,ss\r
- mov ds,ax\r
- mov es,ax\r
- call _inthandler27\r
- pop eax\r
- popad\r
- pop ds\r
- pop es\r
- iretd\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
-_asm_osselect_third:\r
- mov ax,ss\r
- mov fs,ax\r
- mov gs,ax\r
- mov esp,[esp+4]\r
- jmp 2*8:0x0000001b\r
-\r
-_clts:\r
- clts\r
- ret\r
-\r
-_fnsave:\r
- mov eax,[esp+4] ; addr\r
- fnsave [eax]\r
- ret\r
-\r
-_frstor:\r
- mov eax,[esp+4] ; addr\r
- frstor [eax]\r
- ret\r
-\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_in16:\r
- mov edx,[esp+4]\r
- mov eax,0\r
- in ax,dx\r
- ret\r
-\r
-_io_in32:\r
- mov edx,[esp+4]\r
- in eax,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_out16:\r
- mov edx,[esp+4]\r
- mov eax,[esp+8]\r
- out dx,ax\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_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_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_cr1:\r
- mov eax,cr1\r
- ret\r
-\r
-_store_cr1:\r
- mov eax,[esp+4]\r
- mov cr1,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_tr:\r
- ltr [esp+4]\r
- ret\r
-\r
-_memtest_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
-_farjmp:\r
- jmp far [esp+4]\r
- ret\r
-\r
-_farcall:\r
- call far [esp+4]\r
- ret\r
-\r
-\r
-_asm_end_app:\r
- mov esp,[eax]\r
- mov dword [eax+4],0\r
- popad\r
- ret\r
-\r
-_start_app:\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
-\r