Subversion Repositories Kolibri OS

Rev

Rev 398 | Rev 1029 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 398 Rev 477
Line 2... Line 2...
2
; Kolibri Fast Calls test
2
; Kolibri Fast Calls test
3
;
3
;
4
;   Compile with FASM for Kolibri
4
;   Compile with FASM for Kolibri
5
;
5
;
6
;
6
;
7
SYSENTER_VAR	equ	0
-
 
8
use32
7
use32
9
org	0x0
8
org	0x0
10
	db    'MENUET01'
9
	db    'MENUET01'
11
	dd     0x01
10
	dd     0x01
12
	dd     START
11
	dd     START
Line 18... Line 17...
18
include 'macros.inc'
17
include 'macros.inc'
19
include 'debug.inc'
18
include 'debug.inc'
Line 20... Line 19...
20
 
19
 
21
START:	print	'Please wait'
20
START:	print	'Please wait'
-
 
21
	; ÷åðåç áûñòðûé âûçîâ (SYSENTER)
22
	; ÷åðåç áûñòðûé âûçîâ (SYSENTER)
22
	__CPU_type	equ	p6
23
test1:	mov	eax, 1
23
test1:	mov	eax, 1
24
	cpuid
24
	cpuid
25
	test	edx, 0x800
25
	test	edx, 0x800
26
	jnz	.ok
26
	jnz	.ok
Line 32... Line 32...
32
	rdtsc
32
	rdtsc
33
	mov	[old_tsc], eax
33
	mov	[old_tsc], eax
34
	mov	[old_tsc + 4], edx
34
	mov	[old_tsc + 4], edx
Line 35... Line 35...
35
	
35
	
36
	mov	ebx, 0x100000
-
 
37
	mov	dword[SYSENTER_VAR], .ret_p
-
 
38
	mov	[SYSENTER_VAR + 4], esp
36
	mov	ebx, 0x100000
39
	align	32
37
	align	32
40
.nxt:	mov	eax, 19 	; ôóíêöèÿ ïóñòûøêà
38
.nxt:	mcall	19		; ôóíêöèÿ ïóñòûøêà
41
	sysenter		; ïîðòÿòñÿ ecx, edx
39
				; ïîðòÿòñÿ ecx, edx
42
.ret_p: dec	ebx
40
	dec	ebx
Line 43... Line 41...
43
	jnz	.nxt
41
	jnz	.nxt
44
 
42
 
45
	xor	eax, eax
43
	xor	eax, eax
Line 54... Line 52...
54
	debug_print_hex eax
52
	debug_print_hex eax
55
.end:	print	' <- Fast call (SYSENTER)'
53
.end:	print	' <- Fast call (SYSENTER)'
Line 56... Line 54...
56
	
54
	
57
	;----------------------------------------------
55
	;----------------------------------------------
-
 
56
	; ÷åðåç áûñòðûé âûçîâ (SYSCALL)
58
	; ÷åðåç áûñòðûé âûçîâ (SYSCALL)
57
	__CPU_type	equ	k6
59
test2:	xor	eax, eax
58
test2:	xor	eax, eax
60
	cpuid
59
	cpuid
61
	cmp	ecx, "cAMD"
60
	cmp	ecx, "cAMD"
62
	je	.ok
61
	je	.ok
Line 73... Line 72...
73
	mov	[old_tsc], eax
72
	mov	[old_tsc], eax
74
	mov	[old_tsc + 4], edx
73
	mov	[old_tsc + 4], edx
Line 75... Line 74...
75
	
74
	
76
	mov	ebx, 0x100000
75
	mov	ebx, 0x100000
77
	align	32
76
	align	32
78
.nxt:	mov	eax, 19
-
 
79
	push	ecx
-
 
80
	syscall
-
 
Line 81... Line 77...
81
	pop	ecx
77
.nxt:	mcall	19		; ôóíêöèÿ ïóñòûøêà
82
	
78
	
Line 83... Line 79...
83
.ret_p: dec	ebx
79
	dec	ebx
84
	jnz	.nxt
80
	jnz	.nxt
85
 
81
 
Line 94... Line 90...
94
	debug_print_hex edx
90
	debug_print_hex edx
95
	debug_print_hex eax
91
	debug_print_hex eax
96
.end:	print	' <- Fast call (SYSCALL)'
92
.end:	print	' <- Fast call (SYSCALL)'
97
	;----------------------------------------------
93
	;----------------------------------------------
98
	; ÷åðåç øëþç ïðåðûâàíèÿ
94
	; ÷åðåç øëþç ïðåðûâàíèÿ
-
 
95
	__CPU_type	equ	p5
99
	xor	eax, eax
96
	xor	eax, eax
100
	cpuid
97
	cpuid
101
	rdtsc
98
	rdtsc
102
	mov	[old_tsc], eax
99
	mov	[old_tsc], eax
103
	mov	[old_tsc + 4], edx
100
	mov	[old_tsc + 4], edx
Line 104... Line 101...
104
	
101
	
105
test3:	mov	ebx, 0x100000
102
test3:	mov	ebx, 0x100000
106
	align	32
103
	align	32
107
.nxt:	mov	eax, 19 	; ôóíêöèÿ ïóñòûøêà
-
 
108
	int	0x40
104
.nxt:	mcall	19		; ôóíêöèÿ ïóñòûøêà
109
	dec	ebx
105
	dec	ebx
Line 110... Line 106...
110
	jnz	.nxt
106
	jnz	.nxt
111
	
107
	
Line 119... Line 115...
119
	sub	edx, [old_tsc + 4]
115
	sub	edx, [old_tsc + 4]
120
	debug_print_hex edx
116
	debug_print_hex edx
121
	debug_print_hex eax
117
	debug_print_hex eax
122
	print	' <- Interrupt'
118
	print	' <- Interrupt'
Line 123... Line -...
123
 
-
 
124
	call	show_alive
119
 
125
	mov	eax, -1
-
 
126
	int	0x40
120
	mcall -1
127
;---------------------------------------------
-
 
128
show_alive:
-
 
129
	; ÷åðåç áûñòðûé âûçîâ, íàñòðàèâàåì ðåãèñòðû äëÿ âîçâðàòà
-
 
130
	mov	eax, 63
-
 
131
	mov	ebx, 1
-
 
132
	mov	esi, msg_Ok
-
 
133
.nxt:	mov	cl, [esi]
-
 
134
	test	cl, cl
-
 
135
	jz	.end
-
 
136
 
-
 
137
	mov	dword[SYSENTER_VAR], .ret_p
-
 
138
	mov	[SYSENTER_VAR + 4], esp
-
 
139
	sysenter		; ïîðòÿòñÿ ecx, edx
-
 
140
 
-
 
141
.ret_p: inc	esi
-
 
142
	jmp	.nxt
-
 
143
.end:	ret
-
 
144
	; ÷åðåç øëþç ïðåðûâàíèÿ
-
 
145
	; mov   eax, 63
-
 
146
	; mov   ebx, 1
-
 
147
	; mov   esi, msg_Ok
-
 
148
; @@:   mov     cl, [esi]
-
 
149
	; test  cl, cl
-
 
150
	; jz    @f
-
 
151
 
-
 
152
	; int   0x40
-
 
153
 
-
 
154
	; inc   esi
-
 
155
	; jmp   @b
-
 
156
; @@:   ret
-
 
157
 
-
 
158
 
121
;---------------------------------------------
159
old_tsc:	dd	0, 0
-
 
160
 
-
 
161
msg_Ok	db	'Alive!', 10, 13, 0
122
old_tsc:	dd	0, 0
162
I_END:
123
I_END: