OSDN Git Service

svn rev.329より移動。
[chnosproject/CHNOSProject.git] / CHNOSProject / chnos / tolset_chn_000 / chnos_009 / chnos / nasfunc0.nas
diff --git a/CHNOSProject/chnos/tolset_chn_000/chnos_009/chnos/nasfunc0.nas b/CHNOSProject/chnos/tolset_chn_000/chnos_009/chnos/nasfunc0.nas
new file mode 100644 (file)
index 0000000..83ecddc
--- /dev/null
@@ -0,0 +1,285 @@
+[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