Subversion Repositories Kolibri OS

Rev

Rev 485 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 485 Rev 502
1
;
1
;
2
; Kolibri Bus Disconnect
2
; Kolibri Bus Disconnect
3
;   Test for bus disconnect
3
;   Test for bus disconnect
4
;
4
;
5
;   Compile with FASM for Menuet
5
;   Compile with FASM for Menuet
6
;
6
;
7
;
7
;
8
 
8
 
9
include '..\..\..\macros.inc'
9
include '..\..\..\macros.inc'
10
 
10
 
11
memsize = 1000h
11
memsize = 1000h
12
               org 0
12
               org 0
13
PARAMS  = memsize - 1024
13
PARAMS  = memsize - 1024
14
 
14
 
15
appname equ 'Kolibri Bus Disconnect'
15
appname equ 'Kolibri Bus Disconnect'
16
version equ ' 1.1 '
16
version equ ' 1.1 '
17
  
17
  
18
               use32              ; ¢ª«îç¨âì 32-¡¨â­ë© ०¨¬  áᥬ¡«¥à 
18
               use32              ; ¢ª«îç¨âì 32-¡¨â­ë© ०¨¬  áᥬ¡«¥à 
19
 
19
 
20
               db     'MENUET01'              ; 8 byte id
20
               db     'MENUET01'              ; 8 byte id
21
               dd     0x01                    ; title version
21
               dd     0x01                    ; header version
22
               dd     START                   ; start of code
22
               dd     START                   ; start of code
23
               dd     I_END                   ; size of image
23
               dd     I_END                   ; size of image
24
               dd     memsize                 ; memory for app
24
               dd     memsize                 ; memory for app
25
               dd     memsize - 1024          ; esp
25
               dd     memsize - 1024          ; esp
26
               dd     PARAMS , 0x0            ; I_Param , I_Icon
26
               dd     PARAMS , 0x0            ; I_Param , I_Icon
27
 
27
 
28
 
28
 
29
 
29
 
30
;---------------------------------------------------------------------
30
;---------------------------------------------------------------------
31
;---  €—€‹Ž Žƒ€ŒŒ›  ----------------------------------------------
31
;---  €—€‹Ž Žƒ€ŒŒ›  ----------------------------------------------
32
;---------------------------------------------------------------------
32
;---------------------------------------------------------------------
33
 
33
 
34
START:
34
START:
35
    cmp     [PARAMS], byte 0
35
    cmp     [PARAMS], byte 0
36
    jne     check_parameters
36
    jne     check_parameters
37
 
37
 
38
no_params:
38
no_params:
39
    call    find_north_bridg
39
    call    find_north_bridg
40
 
40
 
41
drawwindow:	
41
drawwindow:	
42
      mov  eax,48
42
      mov  eax,48
43
      mov  ebx,3
43
      mov  ebx,3
44
      mov  ecx,sc
44
      mov  ecx,sc
45
      mov  edx,sizeof.system_colors
45
      mov  edx,sizeof.system_colors
46
      mcall
46
      mcall
47
 
47
 
48
      mov	eax, 12
48
      mov	eax, 12
49
	mov	ebx, 1 ; start redraw
49
	mov	ebx, 1 ; start redraw
50
	mcall
50
	mcall
51
 
51
 
52
	mov	eax, 0 ; window
52
	mov	eax, 0 ; window
53
	mov	ebx, 100 shl 16 + 300
53
	mov	ebx, 100 shl 16 + 300
54
	mov	ecx, 100 shl 16 + 90
54
	mov	ecx, 100 shl 16 + 90
55
	mov   edx, [sc.work]
55
	mov   edx, [sc.work]
56
      or    edx, 0x13000000
56
      or    edx, 0x13000000
57
	mov	edi, title
57
	mov	edi, title
58
	mcall
58
	mcall
59
 
59
 
60
	mov	eax, 4
60
	mov	eax, 4
61
	mov	ebx, 17 shl 16 + 30
61
	mov	ebx, 17 shl 16 + 30
62
      mov   ecx, [sc.work_text]
62
      mov   ecx, [sc.work_text]
63
	mov	edx, msg_nb
63
	mov	edx, msg_nb
64
	mov	esi, 14
64
	mov	esi, 14
65
	mcall
65
	mcall
66
	
66
	
67
	mov	ebx, 105 shl 16 + 30
67
	mov	ebx, 105 shl 16 + 30
68
	mov	edx, [nb_name]
68
	mov	edx, [nb_name]
69
	movzx	esi, byte[edx]
69
	movzx	esi, byte[edx]
70
	inc	edx
70
	inc	edx
71
	mcall
71
	mcall
72
	
72
	
73
	mov	ebx, 17 shl 16 + 40
73
	mov	ebx, 17 shl 16 + 40
74
	mov	edx, msg_stat
74
	mov	edx, msg_stat
75
	mov	esi, 8
75
	mov	esi, 8
76
	mcall
76
	mcall
77
	
77
	
78
	mov	ebx, 102 shl 16 + 50
78
	mov	ebx, 102 shl 16 + 50
79
	mov	edx, msg_divs
79
	mov	edx, msg_divs
80
	mov	esi, 32
80
	mov	esi, 32
81
	mcall
81
	mcall
82
	mov	ebx, 17 shl 16 + 62
82
	mov	ebx, 17 shl 16 + 62
83
	mov	edx, msg_hdd
83
	mov	edx, msg_hdd
84
	mov	esi, 10
84
	mov	esi, 10
85
	mcall
85
	mcall
86
	mov	ebx, 17 shl 16 + 72
86
	mov	ebx, 17 shl 16 + 72
87
	mov	edx, msg_sgd
87
	mov	edx, msg_sgd
88
	mcall
88
	mcall
89
	
89
	
90
	call	get_divs
90
	call	get_divs
91
	mov	eax, 47
91
	mov	eax, 47
92
	mov	ebx, 0x30000
92
	mov	ebx, 0x30000
93
	mov	ecx, [val_hdd]
93
	mov	ecx, [val_hdd]
94
	mov	edx, 8
94
	mov	edx, 8
95
	shl	edx, cl
95
	shl	edx, cl
96
	mov	ecx, edx
96
	mov	ecx, edx
97
	mov	edx, 80 shl 16 + 62
97
	mov	edx, 80 shl 16 + 62
98
	mov	esi, [sc.work_text]
98
	mov	esi, [sc.work_text]
99
	mcall
99
	mcall
100
	
100
	
101
	mov	ecx, [val_sgd]
101
	mov	ecx, [val_sgd]
102
	mov	edx, 8
102
	mov	edx, 8
103
	shl	edx, cl
103
	shl	edx, cl
104
	mov	ecx, edx
104
	mov	ecx, edx
105
	mov	edx, 80 shl 16 + 72
105
	mov	edx, 80 shl 16 + 72
106
	mcall
106
	mcall
107
 
107
 
108
	
108
	
109
	call	get_bd_stat
109
	call	get_bd_stat
110
	mov	ecx, [sc.work_text]
110
	mov	ecx, [sc.work_text]
111
	mov	esi, 9
111
	mov	esi, 9
112
	mov	ebx, 105 shl 16 + 40
112
	mov	ebx, 105 shl 16 + 40
113
	mov	edx, msg_nf
113
	mov	edx, msg_nf
114
	mov	al, [bd_stat]
114
	mov	al, [bd_stat]
115
	test	al, al
115
	test	al, al
116
	jz	@f
116
	jz	@f
117
	mov	edx, msg_dis
117
	mov	edx, msg_dis
118
	dec	al
118
	dec	al
119
	jz	@f
119
	jz	@f
120
	mov	edx, msg_en
120
	mov	edx, msg_en
121
@@:	mov	eax, 4
121
@@:	mov	eax, 4
122
	mcall
122
	mcall
123
 
123
 
124
	; ‘®§¤ ñ¬ ª­®¯ªã
124
	; ‘®§¤ ñ¬ ª­®¯ªã
125
	mov	ecx, 27 shl 16 + 20
125
	mov	ecx, 27 shl 16 + 20
126
	mov	eax, 8
126
	mov	eax, 8
127
	mov	ebx, 220 shl 16 + 70
127
	mov	ebx, 220 shl 16 + 70
128
	mov	esi, [sc.work_button]
128
	mov	esi, [sc.work_button]
129
	mov	edx, 2
129
	mov	edx, 2
130
	mcall
130
	mcall
131
	
131
	
132
	; ˆ ¥éñ 14 ;)
132
	; ˆ ¥éñ 14 ;)
133
	mov	edi, 7
133
	mov	edi, 7
134
	mov	ecx, 60 shl 16 + 10
134
	mov	ecx, 60 shl 16 + 10
135
	mov	eax, 8
135
	mov	eax, 8
136
	mov	ebx, 105 shl 16 + 25
136
	mov	ebx, 105 shl 16 + 25
137
	mov	edx, 3
137
	mov	edx, 3
138
	
138
	
139
@@:	mcall
139
@@:	mcall
140
	inc	edx
140
	inc	edx
141
	add	ebx, 27 shl 16 
141
	add	ebx, 27 shl 16 
142
	dec	edi
142
	dec	edi
143
	jnz	@b
143
	jnz	@b
144
 
144
 
145
	add	ecx, 12 shl 16 
145
	add	ecx, 12 shl 16 
146
	mov	ebx, 105 shl 16 + 25
146
	mov	ebx, 105 shl 16 + 25
147
	mov	edi, 7
147
	mov	edi, 7
148
@@:	mcall
148
@@:	mcall
149
	inc	edx
149
	inc	edx
150
	add	ebx, 27 shl 16 
150
	add	ebx, 27 shl 16 
151
	dec	edi
151
	dec	edi
152
	jnz	@b
152
	jnz	@b
153
	
153
	
154
end_dr:	mov	eax, 12
154
end_dr:	mov	eax, 12
155
	mov	ebx, 2 ; end redraw
155
	mov	ebx, 2 ; end redraw
156
	mcall
156
	mcall
157
 
157
 
158
; Wait for event ...
158
; Wait for event ...
159
	mov	eax, 10
159
	mov	eax, 10
160
	mcall
160
	mcall
161
	
161
	
162
	cmp	al, 3
162
	cmp	al, 3
163
	jne	not_bt
163
	jne	not_bt
164
	
164
	
165
	mov	eax, 17			; get id
165
	mov	eax, 17			; get id
166
	mcall
166
	mcall
167
	cmp	ah, 1
167
	cmp	ah, 1
168
	jne	no_exit
168
	jne	no_exit
169
	mov	eax, -1		; close this program
169
	mov	eax, -1		; close this program
170
	mcall
170
	mcall
171
no_exit:
171
no_exit:
172
	cmp	ah, 2
172
	cmp	ah, 2
173
	jne	no_ch_bt
173
	jne	no_ch_bt
174
	mov	dl, [bd_stat]
174
	mov	dl, [bd_stat]
175
	test	dl, dl
175
	test	dl, dl
176
	jz	drawwindow
176
	jz	drawwindow
177
	xor	eax, eax
177
	xor	eax, eax
178
	dec	dl
178
	dec	dl
179
	jnz	@f
179
	jnz	@f
180
	inc	eax
180
	inc	eax
181
@@:	call	set_bd_stat
181
@@:	call	set_bd_stat
182
	jmp	drawwindow
182
	jmp	drawwindow
183
	
183
	
184
no_ch_bt:
184
no_ch_bt:
185
	cmp	ah, 9
185
	cmp	ah, 9
186
	jg	no_hdd_bt
186
	jg	no_hdd_bt
187
	sub	ah, 3
187
	sub	ah, 3
188
	movzx	esi, ah
188
	movzx	esi, ah
189
	mov	edi, [val_sgd]
189
	mov	edi, [val_sgd]
190
	call	set_divs
190
	call	set_divs
191
	jmp	drawwindow
191
	jmp	drawwindow
192
no_hdd_bt:
192
no_hdd_bt:
193
	sub	ah, 10
193
	sub	ah, 10
194
	movzx	edi, ah
194
	movzx	edi, ah
195
	mov	esi, [val_hdd]
195
	mov	esi, [val_hdd]
196
	call	set_divs
196
	call	set_divs
197
	jmp	drawwindow
197
	jmp	drawwindow
198
 
198
 
199
	
199
	
200
not_bt:	cmp	al, 2
200
not_bt:	cmp	al, 2
201
	jne	drawwindow
201
	jne	drawwindow
202
	mov	eax, 2			; ¯®ª  ª« ¢  ­¥ ¯®¤¤¥à¦¨¢ ¥âáï - ç¨â ¥¬ ¨ § ¡ë¢ ¥¬
202
	mov	eax, 2			; ¯®ª  ª« ¢  ­¥ ¯®¤¤¥à¦¨¢ ¥âáï - ç¨â ¥¬ ¨ § ¡ë¢ ¥¬
203
	mcall
203
	mcall
204
	jmp	drawwindow	
204
	jmp	drawwindow	
205
;--------------------------------------------------------------------------
205
;--------------------------------------------------------------------------
206
bus_num:	db	2	; ®¬¥à 設ë
206
bus_num:	db	2	; ®¬¥à 設ë
207
devfn:		db	255
207
devfn:		db	255
208
bd_id:		dd	0	; ˆ¤¥­â¨ä¨ª â®à ãáâனá⢠
208
bd_id:		dd	0	; ˆ¤¥­â¨ä¨ª â®à ãáâனá⢠
209
bd_stat:	db	0	; 0 - ­¥ ­ ©¤¥­, 1 - ¢ëª«î祭, 2 - ¢ª«î祭
209
bd_stat:	db	0	; 0 - ­¥ ­ ©¤¥­, 1 - ¢ëª«î祭, 2 - ¢ª«î祭
210
 
210
 
211
nb_name		dd	nb_nf
211
nb_name		dd	nb_nf
212
bd_msk		dd	msk_i440
212
bd_msk		dd	msk_i440
213
 
213
 
214
nb_nf		db	9, 'Not found'
214
nb_nf		db	9, 'Not found'
215
msk_i440	db	0
215
msk_i440	db	0
216
nb_i440		db	4, 'i440'
216
nb_i440		db	4, 'i440'
217
msk_nforce	db	0x6D, 0x80, 0xE7, 0x06, 0	; ­®¬¥à ॣ¨áâà , ¬ áª , ­®¬¥à ॣ¨áâà , ¬ áª , ... , 0
217
msk_nforce	db	0x6D, 0x80, 0xE7, 0x06, 0	; ­®¬¥à ॣ¨áâà , ¬ áª , ­®¬¥à ॣ¨áâà , ¬ áª , ... , 0
218
nb_nforce	db	6, 'nForce'
218
nb_nforce	db	6, 'nForce'
219
msk_nforce2	db	0x6F, 0x10, 0
219
msk_nforce2	db	0x6F, 0x10, 0
220
nb_nforce2	db	8, 'nForce 2'
220
nb_nforce2	db	8, 'nForce 2'
221
msk_sis730	db	0x6B, 0x01, 0
221
msk_sis730	db	0x6B, 0x01, 0
222
nb_sis730	db	7, 'SiS 730'
222
nb_sis730	db	7, 'SiS 730'
223
nb_sis733	db	7, 'SiS 733'
223
nb_sis733	db	7, 'SiS 733'
224
msk_sis735	db	0x6A, 0x03, 0
224
msk_sis735	db	0x6A, 0x03, 0
225
nb_sis735	db	7, 'SiS 735'
225
nb_sis735	db	7, 'SiS 735'
226
nb_sis740	db	7, 'SiS 740'
226
nb_sis740	db	7, 'SiS 740'
227
nb_sis741	db	7, 'SiS 741'
227
nb_sis741	db	7, 'SiS 741'
228
nb_sis745	db	7, 'SiS 745'
228
nb_sis745	db	7, 'SiS 745'
229
msk_sis746	db	0x6C, 0x01, 0
229
msk_sis746	db	0x6C, 0x01, 0
230
nb_sis746	db	7, 'SiS 746'
230
nb_sis746	db	7, 'SiS 746'
231
nb_sis748	db	7, 'SiS 748'
231
nb_sis748	db	7, 'SiS 748'
232
msk_amd751	db	0x62, 0x06, 0
232
msk_amd751	db	0x62, 0x06, 0
233
nb_amd751	db	7, 'AMD 751'
233
nb_amd751	db	7, 'AMD 751'
234
nb_amd751s	db	8, 'AMD 751S'
234
nb_amd751s	db	8, 'AMD 751S'
235
nb_amd761	db	7, 'AMD 761'
235
nb_amd761	db	7, 'AMD 761'
236
msk_amd762	db	0x62, 0x02, 0x6A, 0x02, 0
236
msk_amd762	db	0x62, 0x02, 0x6A, 0x02, 0
237
nb_amd762	db	7, 'AMD 762'
237
nb_amd762	db	7, 'AMD 762'
238
msk_viakt133	db	0x52, 0x80, 0x70, 0x08, 0
238
msk_viakt133	db	0x52, 0x80, 0x70, 0x08, 0
239
nb_viakt133	db	30, 'VIA KT133(A)/KM133/KL133/KN133'
239
nb_viakt133	db	30, 'VIA KT133(A)/KM133/KL133/KN133'
240
nb_viakx133	db	9, 'VIA KX133'
240
nb_viakx133	db	9, 'VIA KX133'
241
nb_viakle133	db	10, 'VIA KLE133'
241
nb_viakle133	db	10, 'VIA KLE133'
242
msk_viakt266	db	0x92, 0x80, 0x95, 0x02, 0x70, 0x08, 0
242
msk_viakt266	db	0x92, 0x80, 0x95, 0x02, 0x70, 0x08, 0
243
nb_viakt266	db	18, 'VIA KT266(A)/KT333'
243
nb_viakt266	db	18, 'VIA KT266(A)/KT333'
244
nb_viakm266	db	21, 'VIA KM266/KL266/KM333'
244
nb_viakm266	db	21, 'VIA KM266/KL266/KM333'
245
nb_viakn266	db	9, 'VIA KN266'
245
nb_viakn266	db	9, 'VIA KN266'
246
msk_viakt400	db	0xD2, 0x80, 0xD5, 0x02, 0x70, 0x08, 0
246
msk_viakt400	db	0xD2, 0x80, 0xD5, 0x02, 0x70, 0x08, 0
247
nb_viakt400	db	18, 'VIA KT400(A)/KT600'
247
nb_viakt400	db	18, 'VIA KT400(A)/KT600'
248
nb_viakm400	db	9, 'VIA KM400'
248
nb_viakm400	db	9, 'VIA KM400'
249
msk_viakt880	db	0x82, 0x80, 0x85, 0x02, 0
249
msk_viakt880	db	0x82, 0x80, 0x85, 0x02, 0
250
nb_viakt880	db	9, 'VIA KT880'
250
nb_viakt880	db	9, 'VIA KT880'
251
 
251
 
252
 
252
 
253
bd_table:	dd	0x70061022		; AMD 751  ----
253
bd_table:	dd	0x70061022		; AMD 751  ----
254
		dd	nb_amd751
254
		dd	nb_amd751
255
		dd	msk_amd751
255
		dd	msk_amd751
256
		
256
		
257
		dd	0x70041022		; AMD 751S
257
		dd	0x70041022		; AMD 751S
258
		dd	nb_amd751s
258
		dd	nb_amd751s
259
		dd	msk_amd751
259
		dd	msk_amd751
260
		
260
		
261
		dd	0x700E1022		; AMD 761
261
		dd	0x700E1022		; AMD 761
262
		dd	nb_amd761
262
		dd	nb_amd761
263
		dd	msk_amd751
263
		dd	msk_amd751
264
		
264
		
265
		dd	0x700C1022		; AMD 762
265
		dd	0x700C1022		; AMD 762
266
		dd	nb_amd762
266
		dd	nb_amd762
267
		dd	msk_amd762
267
		dd	msk_amd762
268
		
268
		
269
		dd	0x71908086		; i440 ---
269
		dd	0x71908086		; i440 ---
270
		dd	nb_i440
270
		dd	nb_i440
271
		dd	msk_i440
271
		dd	msk_i440
272
		
272
		
273
		dd	0x01A410DE		; nForce  ----
273
		dd	0x01A410DE		; nForce  ----
274
		dd	nb_nforce
274
		dd	nb_nforce
275
		dd	msk_nforce
275
		dd	msk_nforce
276
		
276
		
277
		dd	0x01E010DE		; nForce 2
277
		dd	0x01E010DE		; nForce 2
278
		dd	nb_nforce2
278
		dd	nb_nforce2
279
		dd	msk_nforce2
279
		dd	msk_nforce2
280
		
280
		
281
		dd	0x07301039		; SiS 730  ----
281
		dd	0x07301039		; SiS 730  ----
282
		dd	nb_sis730
282
		dd	nb_sis730
283
		dd	msk_sis730
283
		dd	msk_sis730
284
		
284
		
285
		dd	0x07331039		; SiS 733
285
		dd	0x07331039		; SiS 733
286
		dd	nb_sis733
286
		dd	nb_sis733
287
		dd	msk_sis730
287
		dd	msk_sis730
288
		
288
		
289
		dd	0x07351039		; SiS 735
289
		dd	0x07351039		; SiS 735
290
		dd	nb_sis735
290
		dd	nb_sis735
291
		dd	msk_sis735
291
		dd	msk_sis735
292
		
292
		
293
		dd	0x07401039		; SiS 740
293
		dd	0x07401039		; SiS 740
294
		dd	nb_sis740
294
		dd	nb_sis740
295
		dd	msk_sis735
295
		dd	msk_sis735
296
		
296
		
297
		dd	0x07411039		; SiS 741
297
		dd	0x07411039		; SiS 741
298
		dd	nb_sis741
298
		dd	nb_sis741
299
		dd	msk_sis735
299
		dd	msk_sis735
300
		
300
		
301
		dd	0x07451039		; SiS 745
301
		dd	0x07451039		; SiS 745
302
		dd	nb_sis745
302
		dd	nb_sis745
303
		dd	msk_sis735
303
		dd	msk_sis735
304
		
304
		
305
		dd	0x07461039		; SiS 746
305
		dd	0x07461039		; SiS 746
306
		dd	nb_sis746
306
		dd	nb_sis746
307
		dd	msk_sis746
307
		dd	msk_sis746
308
		
308
		
309
		dd	0x07481039		; SiS 748
309
		dd	0x07481039		; SiS 748
310
		dd	nb_sis748
310
		dd	nb_sis748
311
		dd	msk_sis746
311
		dd	msk_sis746
312
		
312
		
313
		dd	0x03051106		; VIA KT133(A)/KM133/KL133/KN133 ----
313
		dd	0x03051106		; VIA KT133(A)/KM133/KL133/KN133 ----
314
		dd	nb_viakt133
314
		dd	nb_viakt133
315
		dd	msk_viakt133
315
		dd	msk_viakt133
316
		
316
		
317
		dd	0x03911106		; VIA KX133
317
		dd	0x03911106		; VIA KX133
318
		dd	nb_viakx133
318
		dd	nb_viakx133
319
		dd	msk_viakt133
319
		dd	msk_viakt133
320
		
320
		
321
		dd	0x06911106		; VIA KLE133
321
		dd	0x06911106		; VIA KLE133
322
		dd	nb_viakle133
322
		dd	nb_viakle133
323
		dd	msk_viakt133
323
		dd	msk_viakt133
324
		
324
		
325
		dd	0x30991106		; VIA KT266(A)/KT333
325
		dd	0x30991106		; VIA KT266(A)/KT333
326
		dd	nb_viakt266
326
		dd	nb_viakt266
327
		dd	msk_viakt266
327
		dd	msk_viakt266
328
		
328
		
329
		dd	0x31161106		; VIA KM266/KL266/KM333
329
		dd	0x31161106		; VIA KM266/KL266/KM333
330
		dd	nb_viakm266
330
		dd	nb_viakm266
331
		dd	msk_viakt266
331
		dd	msk_viakt266
332
		
332
		
333
		dd	0x31561106		; VIA KN266
333
		dd	0x31561106		; VIA KN266
334
		dd	nb_viakn266
334
		dd	nb_viakn266
335
		dd	msk_viakt266
335
		dd	msk_viakt266
336
		
336
		
337
		dd	0x31891106		; VIA KT400(A)/KT600
337
		dd	0x31891106		; VIA KT400(A)/KT600
338
		dd	nb_viakt400
338
		dd	nb_viakt400
339
		dd	msk_viakt400
339
		dd	msk_viakt400
340
		
340
		
341
		dd	0x32051106		; VIA KM400
341
		dd	0x32051106		; VIA KM400
342
		dd	nb_viakm400
342
		dd	nb_viakm400
343
		dd	msk_viakt400
343
		dd	msk_viakt400
344
		
344
		
345
		dd	0x22691106		; VIA KT880
345
		dd	0x22691106		; VIA KT880
346
		dd	nb_viakt880
346
		dd	nb_viakt880
347
		dd	msk_viakt880
347
		dd	msk_viakt880
348
bd_table_end:
348
bd_table_end:
349
 
349
 
350
 
350
 
351
find_north_bridg:
351
find_north_bridg:
352
	mov	bl, 6
352
	mov	bl, 6
353
	xor	cl, cl
353
	xor	cl, cl
354
nbus:	mov	bh, [bus_num]
354
nbus:	mov	bh, [bus_num]
355
ndevfn:	mov	ch, [devfn]
355
ndevfn:	mov	ch, [devfn]
356
	mov	eax, 62
356
	mov	eax, 62
357
	mcall
357
	mcall
358
	cmp	eax, 0xffffffff
358
	cmp	eax, 0xffffffff
359
	je	bd_next
359
	je	bd_next
360
	;---------
360
	;---------
361
	mov	esi, bd_table_end - bd_table - 12
361
	mov	esi, bd_table_end - bd_table - 12
362
@@:	cmp	eax, [bd_table + esi]
362
@@:	cmp	eax, [bd_table + esi]
363
	je	bd_found
363
	je	bd_found
364
	test	esi, esi
364
	test	esi, esi
365
	jz	bd_next
365
	jz	bd_next
366
	sub	esi, 12
366
	sub	esi, 12
367
	jmp	@b
367
	jmp	@b
368
	;---------
368
	;---------
369
bd_next:dec	byte[devfn]
369
bd_next:dec	byte[devfn]
370
	jns	ndevfn
370
	jns	ndevfn
371
	mov	byte[devfn], 0
371
	mov	byte[devfn], 0
372
	dec	byte[bus_num]
372
	dec	byte[bus_num]
373
	jns	nbus
373
	jns	nbus
374
	ret
374
	ret
375
bd_found:
375
bd_found:
376
	add	esi, bd_table + 4
376
	add	esi, bd_table + 4
377
	mov	edi, nb_name
377
	mov	edi, nb_name
378
	mov	ecx, 2
378
	mov	ecx, 2
379
	rep	movsd
379
	rep	movsd
380
 
380
 
381
	mov	[bd_id], eax
381
	mov	[bd_id], eax
382
	ret
382
	ret
383
 
383
 
384
;----------------------
384
;----------------------
385
;bd_stat:	db	0	; 0 - ­¥ ­ ©¤¥­, 1 - ¢ëª«î祭, 2 - ¢ª«î祭
385
;bd_stat:	db	0	; 0 - ­¥ ­ ©¤¥­, 1 - ¢ëª«î祭, 2 - ¢ª«î祭
386
get_bd_stat:
386
get_bd_stat:
387
	mov	byte[bd_stat], 1
387
	mov	byte[bd_stat], 1
388
	cld
388
	cld
389
	mov	esi, [bd_msk]
389
	mov	esi, [bd_msk]
390
	lodsw
390
	lodsw
391
	test	al, al
391
	test	al, al
392
	jnz	@f
392
	jnz	@f
393
	mov	byte[bd_stat], 0
393
	mov	byte[bd_stat], 0
394
	ret
394
	ret
395
@@:	push	eax
395
@@:	push	eax
396
	mov	bh, [bus_num]
396
	mov	bh, [bus_num]
397
	mov	bl, 4
397
	mov	bl, 4
398
	mov	ch, [devfn]
398
	mov	ch, [devfn]
399
	mov	cl, al
399
	mov	cl, al
400
	mov	eax, 62
400
	mov	eax, 62
401
	mcall
401
	mcall
402
	pop	edx
402
	pop	edx
403
	and	al, dh
403
	and	al, dh
404
	jnz	@f
404
	jnz	@f
405
	lodsw
405
	lodsw
406
	test	al, al
406
	test	al, al
407
	jnz	@b
407
	jnz	@b
408
	ret	
408
	ret	
409
@@:	mov	byte[bd_stat], 2
409
@@:	mov	byte[bd_stat], 2
410
	ret
410
	ret
411
;----------------------
411
;----------------------
412
set_bd_stat:
412
set_bd_stat:
413
	cmp	dword[bd_id], 0x01E010DE	; ᯥ樠«ì­® ¤«ï nForce2 400
413
	cmp	dword[bd_id], 0x01E010DE	; ᯥ樠«ì­® ¤«ï nForce2 400
414
	je	set_stat_nforce2
414
	je	set_stat_nforce2
415
	
415
	
416
	mov	edi, eax
416
	mov	edi, eax
417
	cld
417
	cld
418
	mov	esi, [bd_msk]
418
	mov	esi, [bd_msk]
419
bd_ss_nxt:
419
bd_ss_nxt:
420
	lodsw
420
	lodsw
421
	test	al, al
421
	test	al, al
422
	jz	bd_ss_end
422
	jz	bd_ss_end
423
	mov	dl, ah		; ¬ áª 
423
	mov	dl, ah		; ¬ áª 
424
	mov	bh, [bus_num]
424
	mov	bh, [bus_num]
425
	mov	bl, 4
425
	mov	bl, 4
426
	mov	ch, [devfn]
426
	mov	ch, [devfn]
427
	mov	cl, al
427
	mov	cl, al
428
	mov	eax, 62
428
	mov	eax, 62
429
	mcall
429
	mcall
430
	mov	bl, 8
430
	mov	bl, 8
431
	test	edi, edi
431
	test	edi, edi
432
	jz	@f
432
	jz	@f
433
	or	al, dl
433
	or	al, dl
434
	mov	dl, al
434
	mov	dl, al
435
	mov	eax, 62
435
	mov	eax, 62
436
	mcall
436
	mcall
437
	jmp	bd_ss_nxt
437
	jmp	bd_ss_nxt
438
@@:	not	dl
438
@@:	not	dl
439
	and	al, dl
439
	and	al, dl
440
	mov	dl, al
440
	mov	dl, al
441
	mov	eax, 62
441
	mov	eax, 62
442
	mcall	
442
	mcall	
443
	jmp	bd_ss_nxt
443
	jmp	bd_ss_nxt
444
bd_ss_end:
444
bd_ss_end:
445
	ret
445
	ret
446
;------- nForce 2 -----------
446
;------- nForce 2 -----------
447
set_stat_nforce2:
447
set_stat_nforce2:
448
; IN : eax = 0 - disable, !0 - enable
448
; IN : eax = 0 - disable, !0 - enable
449
	push	eax
449
	push	eax
450
	mov	bh, [bus_num]
450
	mov	bh, [bus_num]
451
	mov	bl, 4
451
	mov	bl, 4
452
	mov	ch, [devfn]
452
	mov	ch, [devfn]
453
	mov	cl, 0x6f
453
	mov	cl, 0x6f
454
	mov	eax, 62
454
	mov	eax, 62
455
	mcall
455
	mcall
456
	and	al, 0x1F
456
	and	al, 0x1F
457
	mov	dl, al
457
	mov	dl, al
458
	mov	bl, 8
458
	mov	bl, 8
459
	mov	eax, 62
459
	mov	eax, 62
460
	mcall
460
	mcall
461
	pop	eax
461
	pop	eax
462
	test	eax, eax
462
	test	eax, eax
463
	jz	@f
463
	jz	@f
464
	or	dl, 0x10
464
	or	dl, 0x10
465
	mov	eax, 62
465
	mov	eax, 62
466
	mcall
466
	mcall
467
	ret
467
	ret
468
@@:	and	dl, 0xef
468
@@:	and	dl, 0xef
469
	mov	eax, 62
469
	mov	eax, 62
470
	mcall
470
	mcall
471
	ret
471
	ret
472
;--------------------------------------------------------------------------
472
;--------------------------------------------------------------------------
473
;                        x8    x16   x32    x64  x128  x256  x512
473
;                        x8    x16   x32    x64  x128  x256  x512
474
div_hdd:	db	0x23, 0x27, 0x2B, 0x2F, 0x63, 0x67, 0x6B ; Halt Disconnect Divisor
474
div_hdd:	db	0x23, 0x27, 0x2B, 0x2F, 0x63, 0x67, 0x6B ; Halt Disconnect Divisor
475
div_sgd:	db	0x12, 0x52, 0x92, 0xD2, 0x12, 0x52, 0x92 ; Stop Grand Divisor
475
div_sgd:	db	0x12, 0x52, 0x92, 0xD2, 0x12, 0x52, 0x92 ; Stop Grand Divisor
476
; low word of 0xC001001B MSR
476
; low word of 0xC001001B MSR
477
; HDD\SGD     8     16     32     64       128    256    512
477
; HDD\SGD     8     16     32     64       128    256    512
478
; 8        0x1223 0x5223 0x9223 0xD223 | 0x1223 0x5223 0x9223
478
; 8        0x1223 0x5223 0x9223 0xD223 | 0x1223 0x5223 0x9223
479
; 16       0x1227                      |
479
; 16       0x1227                      |
480
; 32       0x122B                      |
480
; 32       0x122B                      |
481
; 64       0x122F                      |      0x522F
481
; 64       0x122F                      |      0x522F
482
; 128      0x1263                      |
482
; 128      0x1263                      |
483
; 256      0x1267   & bit 18 is clear  |  & bit 18 is set
483
; 256      0x1267   & bit 18 is clear  |  & bit 18 is set
484
; 512      0x126B                      |
484
; 512      0x126B                      |
485
           ; ^^^^
485
           ; ^^^^
486
           ; ||||_HDD
486
           ; ||||_HDD
487
           ; ||_SGD
487
           ; ||_SGD
488
set_divs:
488
set_divs:
489
; IN : ESI - hdd (0 = x8, 1 = x16 ..)
489
; IN : ESI - hdd (0 = x8, 1 = x16 ..)
490
;      EDI - sgd (0 = x8, 1 = x16 ..)
490
;      EDI - sgd (0 = x8, 1 = x16 ..)
491
	mov	eax, 68
491
	mov	eax, 68
492
	mov	ebx, 3
492
	mov	ebx, 3
493
	mov	edx, 0xC001001b
493
	mov	edx, 0xC001001b
494
	mcall
494
	mcall
495
	mov	al, [div_hdd + esi]
495
	mov	al, [div_hdd + esi]
496
	mov	ah, [div_sgd + edi]
496
	mov	ah, [div_sgd + edi]
497
	and	eax, 0xFFFBFFFF
497
	and	eax, 0xFFFBFFFF
498
	cmp	edi, 3
498
	cmp	edi, 3
499
	jle	@f
499
	jle	@f
500
	or	eax, 0x40000
500
	or	eax, 0x40000
501
@@:	mov	edi, eax
501
@@:	mov	edi, eax
502
	mov	esi, ebx
502
	mov	esi, ebx
503
	mov	eax, 68
503
	mov	eax, 68
504
	mov	ebx, 4
504
	mov	ebx, 4
505
	mcall
505
	mcall
506
	ret
506
	ret
507
 
507
 
508
get_divs:
508
get_divs:
509
; OUT : val_hdd - hdd (0 = x8, 1 = x16 ..)
509
; OUT : val_hdd - hdd (0 = x8, 1 = x16 ..)
510
;       val_sgd - sgd ...
510
;       val_sgd - sgd ...
511
	mov	eax, 68
511
	mov	eax, 68
512
	mov	ebx, 3
512
	mov	ebx, 3
513
	mov	edx, 0xC001001b
513
	mov	edx, 0xC001001b
514
	mcall
514
	mcall
515
	mov	ecx, 7
515
	mov	ecx, 7
516
@@:	cmp	[div_hdd + ecx - 1], al
516
@@:	cmp	[div_hdd + ecx - 1], al
517
	je	@f
517
	je	@f
518
	loop	@b
518
	loop	@b
519
@@:	dec	ecx
519
@@:	dec	ecx
520
	mov	[val_hdd], ecx
520
	mov	[val_hdd], ecx
521
	mov	ecx, 4
521
	mov	ecx, 4
522
@@:	cmp	[div_sgd + ecx - 1], ah
522
@@:	cmp	[div_sgd + ecx - 1], ah
523
	je	@f
523
	je	@f
524
	loop	@b
524
	loop	@b
525
@@:	dec	ecx
525
@@:	dec	ecx
526
	test	eax, 0x40000
526
	test	eax, 0x40000
527
	jz	@f
527
	jz	@f
528
	add	ecx, 4
528
	add	ecx, 4
529
@@:	mov	[val_sgd], ecx
529
@@:	mov	[val_sgd], ecx
530
	ret
530
	ret
531
 
531
 
532
;******************************************************************************
532
;******************************************************************************
533
 
533
 
534
check_parameters:
534
check_parameters:
535
    cmp     [PARAMS], dword "BOOT" ; received BOOT parameter -> goto handler
535
    cmp     [PARAMS], dword "BOOT" ; received BOOT parameter -> goto handler
536
    je      boot_bd_enable
536
    je      boot_bd_enable
537
    jmp     no_params
537
    jmp     no_params
538
 
538
 
539
;******************************************************************************
539
;******************************************************************************
540
 
540
 
541
boot_bd_enable:
541
boot_bd_enable:
542
 
542
 
543
   call    find_north_bridg
543
   call    find_north_bridg
544
   call    set_bd_stat
544
   call    set_bd_stat
545
   mcall   -1
545
   mcall   -1
546
 
546
 
547
;******************************************************************************
547
;******************************************************************************
548
 
548
 
549
 
549
 
550
;--------------------------------------------------------------------------
550
;--------------------------------------------------------------------------
551
 
551
 
552
title	db appname,version,0
552
title	db appname,version,0
553
 
553
 
554
msg_divs	db ' x8  x16  x32 x64 x128 x256 x512'
554
msg_divs	db ' x8  x16  x32 x64 x128 x256 x512'
555
msg_hdd	db 'Hatl Disc.'
555
msg_hdd	db 'Hatl Disc.'
556
msg_sgd	db 'Stop Grand'
556
msg_sgd	db 'Stop Grand'
557
msg_nb	db 'North bridge :';14
557
msg_nb	db 'North bridge :';14
558
msg_stat	db 'Status :'      ;8
558
msg_stat	db 'Status :'      ;8
559
msg_en	db 'Enabled  '     ;9
559
msg_en	db 'Enabled  '     ;9
560
msg_dis	db 'Disabled '     ;9
560
msg_dis	db 'Disabled '     ;9
561
msg_nf	db 'Not found'     ;9
561
msg_nf	db 'Not found'     ;9
562
 
562
 
563
I_END:
563
I_END:
564
sc     system_colors
564
sc     system_colors
565
val_hdd:	dd	?
565
val_hdd:	dd	?
566
val_sgd:	dd	?
566
val_sgd:	dd	?