OSDN Git Service

Initial commit
[haribote-os-xe/hariboteXE.git] / asmhead.pas
1 unit asmhead;
2
3 interface
4
5 procedure io_halt;
6 procedure io_cli;
7 procedure io_sti;
8 procedure io_stihlt;
9 function io_in8(port: integer): integer;
10 function io_in16(port: integer): integer;
11 function io_in32(port: integer): integer;
12 procedure io_out8(port, data: integer);
13 procedure io_out16(port, data: integer);
14 procedure io_out32(port, data: integer);
15 function io_load_eflags: integer;
16 procedure io_store_eflags(eflags: integer);
17 procedure load_gdtr(limit, addr: integer);
18 procedure load_idtr(limit, addr: integer);
19 function load_cr0: integer;
20 procedure store_cr0(cr0: integer);
21
22 implementation
23
24 procedure io_halt;
25 asm
26   HLT;
27   RET;
28 end;
29
30 procedure io_cli;
31 asm
32   CLI;
33   RET;
34 end;
35
36 procedure io_sti;
37 asm
38   STI;
39   RET;
40 end;
41
42 procedure io_stihlt;
43 asm
44   STI;
45   HLT;
46   RET;
47 end;
48
49 function io_in8(port: integer): integer;
50 asm
51   MOV   EDX,[ESP+4];
52   MOV   EAX,0;
53   IN    AL,DX;
54   RET;
55 end;
56
57 function io_in16(port: integer): integer;
58 asm
59   MOV   EDX,[ESP+4];
60   MOV   EAX,0;
61   IN    AX,DX;
62   RET;
63 end;
64
65 function io_in32(port: integer): integer;
66 asm
67   MOV   EDX,[ESP+4];
68   IN   EAX,DX;
69   RET;
70 end;
71
72 procedure io_out8(port, data: integer);
73 asm
74   MOV   EDX,[ESP+4];
75   MOV   AL,[ESP+8];
76   OUT   DX,AL;
77   RET;
78 end;
79
80 procedure io_out16(port, data: integer);
81 asm
82   MOV   EDX,[ESP+4];
83   MOV   EAX,[ESP+8];
84   OUT   DX,AX;
85   RET;
86 end;
87
88 procedure io_out32(port, data: integer);
89 asm
90   MOV   EDX,[ESP+4];
91   MOV   EAX,[ESP+8];
92   OUT   DX,EAX;
93   RET;
94 end;
95
96 function io_load_eflags: integer;
97 asm
98   PUSHFD;
99   POP   EAX;
100   RET;
101 end;
102
103 procedure io_store_eflags(eflags: integer);
104 asm
105   MOV   EAX,[ESP+4];
106   PUSH  EAX;
107   POPFD;
108   RET;
109 end;
110
111 procedure load_gdtr(limit, addr: integer);
112 asm
113   MOV   AX,[ESP+4];
114   MOV   [ESP+6],AX;
115   LGDT  [ESP+6];
116   RET;
117 end;
118
119 procedure load_idtr(limit, addr: integer);
120 asm
121   MOV   AX,[ESP+4];
122   MOV   [ESP+6],AX;
123   LIDT  [ESP+6];
124   RET;
125 end;
126
127 function load_cr0: integer;
128 asm
129   MOV   EAX,CR0
130   RET;
131 end;
132
133 procedure store_cr0(cr0: integer);
134 asm
135   MOV   EAX,[ESP+4];
136   MOV   CR0,EAX;
137   RET;
138 end;
139
140 end.