Subversion Repositories Kolibri OS

Rev

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

Rev 12 Rev 29
Line 1... Line 1...
1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2
;;                                                        ;;
2
;;                                                        ;;
3
;;  BOOTCODE.INC                                          ;;
3
;;  BOOTCODE.INC                                          ;;
4
;;                                                        ;;
4
;;                                                        ;;
5
;;  16 bit bootcode for MenuetOS                          ;;
-
 
6
;;                                                        ;;
5
;;  KolibriOS 16-bit loader,                              ;;
7
;;  Copyright 2002 Ville Turjanmaa                        ;;
-
 
8
;;                                                        ;;
6
;;                        based on bootcode for MenuetOS  ;;
9
;;  See file COPYING for details                          ;;
-
 
10
;;                                                        ;;
7
;;                                                        ;;
11
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
8
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Line 16... Line 13...
16
;
13
;
17
;                           16 BIT FUNCTIONS
14
;                           16 BIT FUNCTIONS
18
;
15
;
19
;==========================================================================
16
;==========================================================================
Line 20... Line 17...
20
 
17
 
21
print:       push  si
18
putchar:
22
             mov   si,leftpr-0x10000
19
; in: al=character
23
             call  printplain
20
	mov	ah, 0Eh
-
 
21
	mov	bh, 0
-
 
22
	int	10h
Line -... Line 23...
-
 
23
	ret
24
             pop   si
24
 
25
 
25
print:
-
 
26
; in: si->string
26
printplain:  pusha
27
	mov	al, 186
27
             mov   dx,0x1000
28
	call	putchar
-
 
29
	mov	al, ' '
28
             mov   es,dx
30
	call	putchar
29
             cmp   byte [es:display_atboot-0x10000],2
31
 
30
             je    printplain_exit
32
printplain:
31
             mov   ds,dx
33
; in: si->string
32
             cld
34
	pusha
33
             lodsb
-
 
34
           prpl1:
-
 
35
             mov   ah,0xe
35
	lodsb
36
             xor   bh,bh
36
@@:
37
             int   0x10
37
	call	putchar
38
             lodsb
38
	lodsb
39
             cmp   al,0
-
 
40
             jne   prpl1
39
	cmp	al, 0
41
           printplain_exit:
40
	jnz	@b
Line 42... Line -...
42
             popa
-
 
43
             ret
41
	popa
44
 
42
	ret
45
setbase1000: push ax
-
 
46
             mov  ax,0x1000
-
 
47
             mov  es,ax
-
 
48
             mov  ds,ax
43
 
49
             pop  ax
44
; Now int 16 is used for keyboard support.
50
             ret
45
; This is shorter, simpler and more reliable.
51
 
46
if 0
52
getkey:      push  ecx
47
getkey:      push  ecx
Line 108... Line 103...
108
           gk3:
103
           gk3:
109
             sub   eax,48
104
             sub   eax,48
110
             pop   edx
105
             pop   edx
111
             pop   ecx
106
             pop   ecx
112
             ret
107
             ret
-
 
108
end if
-
 
109
 
-
 
110
getkey:
-
 
111
; get number in range [bl,bh] (bl,bh in ['0'..'9'])
-
 
112
; in: bx=range
-
 
113
; out: ax=digit (1..9, 10 for 0)
-
 
114
	mov	ah, 0
-
 
115
	int	16h
-
 
116
	cmp	al, bl
-
 
117
	jb	getkey
-
 
118
	cmp	al, bh
-
 
119
	ja	getkey
-
 
120
	push	ax
-
 
121
	call	putchar
-
 
122
	pop	ax
-
 
123
	and	ax, 0Fh
-
 
124
	jnz	@f
-
 
125
	mov	al, 10
-
 
126
@@:
-
 
127
	ret
-
 
128
 
-
 
129
setcursor:
-
 
130
; in: dl=column, dh=row
-
 
131
	mov	ah, 2
-
 
132
	mov	bh, 0
-
 
133
	int	10h
-
 
134
	ret
-
 
135
 
-
 
136
macro _setcursor row,column
-
 
137
{
-
 
138
	mov	dx, row*256 + column
-
 
139
	call	setcursor
-
 
140
}
-
 
141
 
-
 
142
; 16-bit data
-
 
143
; videomodes table
-
 
144
gr_table:
-
 
145
	dw      0x112+0100000000000000b ,  640 ,  480		; 1
-
 
146
	dw      0x115+0100000000000000b ,  800 ,  600		; 2
-
 
147
	dw      0x118+0100000000000000b , 1024 ,  768		; 3
-
 
148
	dw      0x11B+0100000000000000b , 1280 , 1024		; 4
-
 
149
	dw      0x112 ,  640 , 480				; 5
-
 
150
	dw      0x115 ,  800 , 600				; 6
-
 
151
	dw      0x118 , 1024 , 768				; 7
-
 
152
	dw      0x11B , 1280 ,1024				; 8
-
 
153
	dw	0x13, 320, 200					; 9
-
 
154
	dw	0x12, 640, 480					; 0
-
 
155
 
-
 
156
; table for move to extended memory (int 15h, ah=87h)
-
 
157
       movedesc:
-
 
158
        db      0x00,0x00,0x0,0x00,0x00,0x00,0x0,0x0
-
 
159
        db      0x00,0x00,0x0,0x00,0x00,0x00,0x0,0x0
-
 
160
 
-
 
161
        db      0xff,0xff,0x0,0xa0,0x00,0x93,0x0,0x0
-
 
162
        db      0xff,0xff,0x0,0x00,0x10,0x93,0x0,0x0
Line -... Line 163...
-
 
163
 
-
 
164
        db      0x00,0x00,0x0,0x00,0x00,0x00,0x0,0x0
-
 
165
        db      0x00,0x00,0x0,0x00,0x00,0x00,0x0,0x0
-
 
166
        db      0x00,0x00,0x0,0x00,0x00,0x00,0x0,0x0
Line 113... Line 167...
113
 
167
        db      0x00,0x00,0x0,0x00,0x00,0x00,0x0,0x0
114
 
168
 
115
;=========================================================================
169
;=========================================================================
116
;
170
;
117
;                           16 BIT CODE
171
;                           16 BIT CODE
Line 118... Line 172...
118
;
172
;
-
 
173
;=========================================================================
-
 
174
 
-
 
175
 
-
 
176
start_of_code:
-
 
177
	cld
-
 
178
; \begin{diamond}[02.12.2005]
-
 
179
	cmp	ax, 'KL'
-
 
180
	jnz	@f
Line 119... Line -...
119
;=========================================================================
-
 
120
 
-
 
121
 
-
 
122
start_of_code:
181
	mov	word [cs:cfgmanager.loader_block-0x10000], si
123
 
-
 
124
; RESET 16 BIT SELECTORS/REGISTERS/STACK
-
 
125
 
182
	mov	word [cs:cfgmanager.loader_block+2-0x10000], ds
126
        mov  ax,0x1000
183
@@:
127
        mov  es,ax
184
; \end{diamond}[02.12.2005]
128
        mov  ds,ax
-
 
129
 
-
 
130
        mov  ax,0x3000
185
 
131
        mov  ss,ax
186
; set up stack
132
        mov  sp,0xec00
187
	mov	ax, 3000h
133
 
188
	mov	ss, ax
134
        xor  ax,ax
-
 
135
        xor  bx,bx
-
 
136
        xor  cx,cx
-
 
137
        xor  dx,dx
-
 
138
        xor  si,si
-
 
139
        xor  di,di
189
	mov	sp, 0EC00h
140
        xor  bp,bp
-
 
141
 
-
 
142
 
-
 
143
 
-
 
144
; DRAW FRAMES
-
 
Line 145... Line -...
145
 
-
 
146
        call setbase1000
190
; set up segment registers
147
 
191
	push	cs
148
        cmp  byte [es:display_atboot-0x10000],2
192
	pop	ds
Line 149... Line -...
149
        je   no_mode_atboot
-
 
150
 
-
 
151
        mov  ax,0x0003
193
	push	cs
152
        mov  bx,0x0000
194
	pop	es
153
        mov  dx,0x0000
195
 
154
        int  0x10
196
; set videomode
155
 
197
	mov	ax, 3
156
   no_mode_atboot:
198
        int  0x10
157
 
-
 
158
 ; Load & set russian VGA font (RU.INC)
-
 
159
        mov  bp,RU_FNT1-10000h   ; RU_FNT1 - First part
199
 
Line 160... Line 200...
160
          mov  bx,1000h            ; 768 bytes
200
 ; Load & set russian VGA font (RU.INC)
161
          mov  cx,30h              ; 48 symbols
201
        mov  bp,RU_FNT1-10000h   ; RU_FNT1 - First part
162
          mov  dx,80h              ; 128 - position of first symbol
202
          mov  bx,1000h            ; 768 bytes
163
        mov  ax,1100h
203
          mov  cx,30h              ; 48 symbols
164
          push cs
204
          mov  dx,80h              ; 128 - position of first symbol
165
          pop  es
-
 
166
          int  10h
-
 
167
 
205
        mov  ax,1100h
168
        mov  bp,RU_FNT2-10000h   ; RU_FNT2 -Second part
206
          int  10h
Line -... Line 207...
-
 
207
 
-
 
208
        mov  bp,RU_FNT2-10000h   ; RU_FNT2 -Second part
-
 
209
        mov  bx,1000h            ; 512 bytes
-
 
210
        mov  cx,20h              ; 32 symbols
169
        mov  bx,1000h            ; 512 bytes
211
        mov  dx,0E0h             ; 224 - position of first symbol
170
        mov  cx,20h              ; 32 symbols
212
        mov  ax,1100h
171
        mov  dx,0E0h             ; 224 - position of first symbol
213
          int  10h
-
 
214
 ; End set VGA russian font
172
        mov  ax,1100h
215
 
173
          push cs
216
; draw frames
174
          pop  es
217
	push	0xb800
175
          int  10h
218
	pop	es
-
 
219
	xor	di, di
-
 
220
;        mov  si,d80x25-0x10000
-
 
221
;        mov  cx,80*25
-
 
222
;        mov  ah,1*16+15
-
 
223
;       dfl1:
-
 
224
;        lodsb
-
 
225
;        stosw
-
 
226
;        loop dfl1
-
 
227
	mov	ah, 1*16+15
-
 
228
; draw top
176
 ; End set VGA russian font
229
	mov	si, d80x25_top - 0x10000
-
 
230
	mov	cx, d80x25_top_num * 80
-
 
231
@@:
177
 
232
	lodsb
-
 
233
	stosw
178
        call setbase1000
234
	loop	@b
179
        mov  ax,0xb800
235
; draw spaces
-
 
236
	mov	si, space_msg - 0x10000
-
 
237
	mov	cx, 25 - d80x25_top_num - d80x25_bottom_num
-
 
238
dfl1:
180
        mov  es,ax
239
	push	cx
-
 
240
	push	si
-
 
241
	mov	cx, 80
-
 
242
@@:
-
 
243
	lodsb
-
 
244
	stosw
-
 
245
	loop	@b
-
 
246
	pop	si
Line 181... Line 247...
181
        mov  di,0
247
	pop	cx
Line 182... Line -...
182
        mov  si,d80x25-0x10000
-
 
183
        mov  cx,80*25
-
 
184
        mov  ah,1*16+15
-
 
185
       dfl1:
-
 
186
        cld
248
	loop	dfl1
187
        lodsb
-
 
188
        stosw
-
 
Line 189... Line 249...
189
        loop dfl1
249
; draw bottom
Line -... Line 250...
-
 
250
	mov	si, d80x25_bottom - 0x10000
190
 
251
	mov	cx, d80x25_bottom_num * 80
191
        call setbase1000
252
@@:
192
 
253
	lodsb
193
 
254
	stosw
194
; SAY HI TO USER
255
	loop	@b
195
 
256
 
196
        mov     si,linef2-0x10000
257
	mov	byte [space_msg-0x10000+80], 0	; now space_msg is null terminated
197
        call    printplain
258
 
198
        mov     si,version-0x10000
259
	_setcursor d80x25_top_num,0
199
        call    print
260
 
200
 
261
 
201
 
262
; TEST FOR 386+
202
; TEST FOR 386+
263
 
203
 
264
	mov	bx, 0x4000
204
        pushf
265
        pushf
205
        pop     ax
266
        pop     ax
Line 206... Line -...
206
        mov     dx,ax
-
 
207
        xor     ax,0x4000
-
 
208
        push    ax
-
 
209
        popf
267
        mov     dx,ax
210
        pushf
-
 
211
        pop     ax
-
 
212
        and     ax,0x4000
-
 
213
        and     dx,0x4000
-
 
214
        cmp     ax,dx
-
 
215
        jnz     cpugood
-
 
216
        mov     si,not386-0x10000
-
 
217
        call    print
-
 
218
        jmp     $
-
 
219
     cpugood:
-
 
220
 
268
        xor     ax,bx
221
; RESET 32 BIT SELECTORS/REGISTERS/SELECTORS
-
 
222
 
-
 
223
        mov  ax,0x1000
-
 
224
        mov  es,ax
-
 
Line 225... Line 269...
225
        mov  ds,ax
269
        push    ax
Line 226... Line 270...
226
 
270
        popf
227
        mov  ax,0x3000
271
        pushf
Line 281... Line 325...
281
;       test     al,2      ;ïðîâåðêà áèòà ãîòîâíîñòè
325
;       test     al,2      ;ïðîâåðêà áèòà ãîòîâíîñòè
282
;       loopnz   test_kbd
326
;       loopnz   test_kbd
Line 283... Line 327...
283
 
327
 
284
    mov   al,0xf6         ; Ñáðîñ êëàâèàòóðû, ðàçðåøèòü ñêàíèðîâàíèå
328
    mov   al,0xf6         ; Ñáðîñ êëàâèàòóðû, ðàçðåøèòü ñêàíèðîâàíèå
285
    out   0x60,al
329
    out   0x60,al
286
        mov     cx,0
330
    xor   cx,cx
287
wait_loop:       ; variant 2
331
wait_loop:       ; variant 2
288
; reading state of port of 8042 controller
332
; reading state of port of 8042 controller
289
        in      al,64h 
333
        in      al,64h 
290
        and     al,00000010b  ; ready flag
334
        and     al,00000010b  ; ready flag
291
; wait until 8042 controller is ready 
335
; wait until 8042 controller is ready 
Line 292... Line 336...
292
        loopnz  wait_loop
336
        loopnz  wait_loop
Line 293... Line 337...
293
 
337
 
294
; DISPLAY VESA INFORMATION
338
; DISPLAY VESA INFORMATION
295
 
339
 
296
        mov     ax,0x0
340
	push	0
297
        mov     es,ax
341
	pop	es
298
        mov     ax,0x4f00
342
        mov     ax,0x4f00
299
        mov     di,0xa000
-
 
300
        int     0x10
-
 
301
        cmp     ax,0x004f
-
 
302
        je      vesaok2
343
        mov     di,0xa000
303
        mov     dx,0x1000
-
 
304
        mov     es,dx
-
 
305
        mov     si,novesa-0x10000
-
 
306
        call    print
344
        int     0x10
307
        mov     ax,16
345
        cmp     ax,0x004f
308
        jmp     novesafound
-
 
309
       vesaok2:
346
        mov	si, novesa-0x10000
310
        mov     ax,[es:di+4]
-
 
311
        mov     dx,ax
-
 
312
        add     ax,'0'*256+'0'
347
        jnz	@f
313
        push    word 0x1000
348
        mov     ax,[es:di+4]
314
        pop     es
-
 
315
        mov     [es:vervesa+vervesa_off-0x10000], ah
-
 
316
        mov     [es:vervesa+vervesa_off+2-0x10000], al
-
 
317
        ; ivan 24/11/2004 begin
349
        add     ax,'0'*256+'0'
318
        ;push    ax
350
        mov     [vervesa+vervesa_off-0x10000], ah
319
        ; ivan 24/11/2004 end
-
 
320
        mov     si,vervesa-0x10000
-
 
321
        call    print
-
 
322
      novesafound:
-
 
323
        call    setbase1000
-
 
Line -... Line 351...
-
 
351
        mov     [vervesa+vervesa_off+2-0x10000], al
-
 
352
        mov     si,vervesa-0x10000
-
 
353
@@:     call    print
-
 
354
 
-
 
355
; \begin{diamond}[30.11.2005]
-
 
356
cfgmanager:
-
 
357
; settings:
-
 
358
; a) preboot_graph = graphical mode
-
 
359
;    preboot_gprobe = probe this mode?
-
 
360
; b) preboot_mtrr = use hardware acceleration?
-
 
361
; c) preboot_vrrm = use VRR?
-
 
362
; d) preboot_device = from what boot?
-
 
363
	mov	si, preboot_graph-0x10000
-
 
364
; check bootloader block
-
 
365
	cmp	[.loader_block-0x10000], 0
-
 
366
	jz	.noloaderblock
-
 
367
	les	bx, [.loader_block-0x10000]
-
 
368
	cmp	byte [es:bx], 1
-
 
369
	jz	@f
-
 
370
	mov	si, loader_block_error-0x10000
-
 
371
	call	print
-
 
372
	jmp	$
-
 
373
@@:
-
 
374
	test	byte [es:bx+1], 1
-
 
375
	jz	@f
-
 
376
; image in memory present
-
 
377
	cmp	[si+preboot_device-preboot_graph], 0
-
 
378
	jnz	@f
-
 
379
	mov	[si+preboot_device-preboot_graph], 3
-
 
380
@@:
-
 
381
.noloaderblock:
-
 
382
; determine default settings
-
 
383
	mov	[.bSettingsChanged-0x10000], 0
-
 
384
	cmp	byte [si], 0
-
 
385
	jnz	.preboot_gr_end
-
 
386
	mov	[si+preboot_gprobe-preboot_graph], 0
-
 
387
	mov	al, [vervesa+vervesa_off-0x10000]
-
 
388
	cmp	al, 'x'
-
 
389
	jz	.novesa
-
 
390
	cmp	al, '1'
-
 
391
	jz	.vesa12
-
 
392
	mov	[si+preboot_gprobe-preboot_graph], 2
-
 
393
	mov	al, 3
-
 
394
	jmp	@f
-
 
395
.vesa12:
-
 
396
	mov	al, 7
-
 
397
	jmp	@f
-
 
398
.novesa:
-
 
399
	mov	al, 10
-
 
400
@@:
-
 
401
	mov	[si], al
-
 
402
.preboot_gr_end:
-
 
403
	cmp	[si+preboot_mtrr-preboot_graph], 1
-
 
404
	adc	[si+preboot_mtrr-preboot_graph], 0
-
 
405
	cmp	[si+preboot_vrrm-preboot_graph], 1
-
 
406
	adc	[si+preboot_vrrm-preboot_graph], 0
-
 
407
	cmp	[si+preboot_device-preboot_graph], 1
-
 
408
	adc	[si+preboot_device-preboot_graph], 0
-
 
409
; notify user
-
 
410
	mov	si, linef-0x10000
-
 
411
	call	print
-
 
412
	mov	si, start_msg-0x10000
-
 
413
	call	print
-
 
414
	mov	si, time_msg-0x10000
-
 
415
	call	print
-
 
416
; get start time
-
 
417
	call	.gettime
-
 
418
	mov	[.starttime-0x10000], eax
-
 
419
; set timer interrupt handler
-
 
420
	cli
-
 
421
	push	0
-
 
422
	pop	es
-
 
423
	mov	eax, [es:8*4]
-
 
424
	mov	[.oldtimer-0x10000], eax
-
 
425
	mov	word [es:8*4], .newtimer-0x10000
-
 
426
	mov	[es:8*4+2], cs
-
 
427
.printcfg:
-
 
428
	_setcursor 9,0
-
 
429
	mov	si, current_cfg_msg-0x10000
-
 
430
	call	print
-
 
431
	mov	si, curvideo_msg-0x10000
-
 
432
	call	print
-
 
433
	mov	al, [preboot_graph-0x10000]
-
 
434
	cmp	al, 8
-
 
435
	ja	.pnovesa
-
 
436
	mov	dl, al
-
 
437
	and	eax, 3
-
 
438
	mov	si, [modes_msg-0x10000+eax*2]
-
 
439
	call	printplain
-
 
440
	mov	si, modevesa20-0x10000
-
 
441
	cmp	dl, 4
-
 
442
	jbe	@f
-
 
443
	mov	si, modevesa12-0x10000
-
 
444
@@:
-
 
445
	call	printplain
-
 
446
	cmp	dl, 4
-
 
447
	ja	.x
-
 
448
	mov	si, probeno_msg-0x10000
-
 
449
	cmp	[preboot_gprobe-0x10000], 2
-
 
450
	jnz	@f
-
 
451
	mov	si, probeok_msg-0x10000
-
 
452
@@:
-
 
453
	call	printplain
-
 
454
.x:
-
 
455
	jmp	.c
-
 
456
.pnovesa:
-
 
457
	cmp	al, 9
-
 
458
	mov	si, mode9-0x10000
-
 
459
	jz	@b
-
 
460
	mov	si, mode10-0x10000
-
 
461
	jmp	@b
-
 
462
.c:
-
 
463
	mov	si, linef-0x10000
-
 
464
	call	printplain
-
 
465
	mov	si, mtrr_msg-0x10000
-
 
466
	call	print
-
 
467
	mov	si, on_msg-0x10000
-
 
468
	cmp	[preboot_mtrr-0x10000], 1
-
 
469
	jz	@f
-
 
470
	mov	si, off_msg-0x10000
-
 
471
@@:
-
 
472
	call	printplain
-
 
473
	mov	si, vrrm_msg-0x10000
-
 
474
	call	print
-
 
475
	mov	si, on_msg-0x10000
-
 
476
	cmp	[preboot_vrrm-0x10000], 1
-
 
477
	jz	@f
-
 
478
	mov	si, off_msg-0x10000
-
 
479
@@:
-
 
480
	call	printplain
-
 
481
	mov	si, preboot_device_msg-0x10000
-
 
482
	call	print
-
 
483
	mov	al, [preboot_device-0x10000]
-
 
484
	and	eax, 3
-
 
485
	mov	si, [preboot_device_msgs-0x10000+eax*2]
-
 
486
	call	printplain
-
 
487
.wait:
-
 
488
; empty BIOS keyboard buffer
-
 
489
	_setcursor 25,0		; out of screen
-
 
490
; wait for keypressed
-
 
491
	mov	ah, 0
-
 
492
	int	16h
-
 
493
	push	ax
-
 
494
; restore timer interrupt
-
 
495
	push	0
-
 
496
	pop	es
-
 
497
	mov	ecx, [.oldtimer-0x10000]
-
 
498
	mov	[es:8*4], ecx
-
 
499
	_setcursor 7,0
-
 
500
	mov	si, space_msg-0x10000
-
 
501
	call	printplain
-
 
502
	pop	ax
-
 
503
; switch on key
-
 
504
	cmp	al, 13
-
 
505
	jz	.continue
-
 
506
	or	al, 20h
-
 
507
	cmp	al, 'a'
-
 
508
	jz	.change_a
-
 
509
	cmp	al, 'b'
-
 
510
	jz	.change_b
-
 
511
	cmp	al, 'c'
-
 
512
	jz	.change_c
-
 
513
	cmp	al, 'd'
-
 
514
	jnz	.wait
-
 
515
	_setcursor 15,0
-
 
516
	mov     si,bdev-0x10000
-
 
517
	call    printplain
-
 
518
	mov     bx,'13'
-
 
519
	call    getkey
-
 
520
	mov	[preboot_device-0x10000], al
-
 
521
	_setcursor 13,0
-
 
522
.d:
-
 
523
	mov	[.bSettingsChanged-0x10000], al
-
 
524
	mov	si, space_msg-0x10000
-
 
525
	call	printplain
-
 
526
	_setcursor 15,0
-
 
527
	mov	cx, 6
-
 
528
@@:
-
 
529
	call	printplain
-
 
530
	loop	@b
-
 
531
	jmp	.printcfg
-
 
532
.change_a:
-
 
533
	_setcursor 15,0
-
 
534
	mov	si, gr_mode-0x10000
-
 
535
	call    printplain
-
 
536
	mov     bx, '09'
-
 
537
	call    getkey
-
 
538
	mov	[preboot_graph-0x10000], al
-
 
539
	cmp	al, 4
-
 
540
	ja	@f
-
 
541
	mov	si, probetext-0x10000
-
 
542
	call	printplain
-
 
543
	mov	bx, '12'
-
 
544
	call	getkey
-
 
545
	mov	[preboot_gprobe-0x10000], al
-
 
546
@@:
-
 
547
	_setcursor 10,0
-
 
548
	jmp	.d
-
 
549
.change_b:
-
 
550
	_setcursor 15,0
-
 
551
	mov	si, gr_acc-0x10000
-
 
552
	call	printplain
-
 
553
	mov	bx, '12'
-
 
554
	call	getkey
-
 
555
	mov	[preboot_mtrr-0x10000], al
-
 
556
	_setcursor 11,0
-
 
557
	jmp	.d
-
 
558
.change_c:
-
 
559
	_setcursor 15,0
-
 
560
	mov	si, vrrmprint-0x10000
-
 
561
	call	printplain
-
 
562
	mov	bx, '12'
-
 
563
	call	getkey
-
 
564
	mov	[preboot_vrrm-0x10000], al
-
 
565
	_setcursor 12,0
-
 
566
	jmp	.d
-
 
567
.oldtimer dd ?
-
 
568
.starttime dd ?
-
 
569
.bSettingsChanged db ?
-
 
570
.loader_block dd 0
-
 
571
.gettime:
-
 
572
	mov	ah, 0
-
 
573
	int	1Ah
-
 
574
	xchg	ax, cx
-
 
575
	shl	eax, 10h
-
 
576
	xchg	ax, dx
-
 
577
	ret
-
 
578
.newtimer:
-
 
579
	push	ds
-
 
580
	push	cs
-
 
581
	pop	ds
-
 
582
	pushf
-
 
583
	call	[.oldtimer-0x10000]
-
 
584
	pushad
-
 
585
	call	.gettime
-
 
586
	sub	eax, [.starttime-0x10000]
-
 
587
	sub	ax, 18*5
-
 
588
	jae	.timergo
-
 
589
	neg	ax
-
 
590
	add	ax, 18-1
-
 
591
	mov	bx, 18
-
 
592
	xor	dx, dx
-
 
593
	div	bx
-
 
594
if lang eq ru
-
 
595
; ¯®¤®¦¤¨â¥ 5 ᥪ㭤, 4/3/2 ᥪ㭤ë, 1 ᥪ㭤ã
-
 
596
	cmp	al, 5
-
 
597
	mov	cl, ' '
-
 
598
	jae	@f
-
 
599
	cmp	al, 1
-
 
600
	mov	cl, 'ã'
-
 
601
	jz	@f
-
 
602
	mov	cl, 'ë'
-
 
603
@@:	mov	[time_str+9-0x10000], cl
-
 
604
else
-
 
605
; wait 5/4/3/2 seconds, 1 second
-
 
606
	cmp	al, 1
-
 
607
	mov	cl, 's'
-
 
608
	ja	@f
-
 
609
	mov	cl, ' '
-
 
610
@@:	mov	[time_str+9-0x10000], cl
-
 
611
end if
-
 
612
	add	al, '0'
-
 
613
	mov	[time_str+1-0x10000], al
-
 
614
	mov	si, time_msg-0x10000
-
 
615
	_setcursor 7,0
-
 
616
	call	print
-
 
617
	_setcursor 25,0
-
 
618
	popad
-
 
619
	pop	ds
-
 
620
	iret
-
 
621
.timergo:
-
 
622
	push	0
-
 
623
	pop	es
-
 
624
	mov	eax, [.oldtimer-0x10000]
-
 
625
	mov	[es:8*4], eax
-
 
626
	mov	sp, 0EC00h
-
 
627
.continue:
-
 
628
	sti
-
 
629
	_setcursor 6,0
-
 
630
	mov	si, space_msg-0x10000
-
 
631
	call	printplain
-
 
632
	call	printplain
-
 
633
	_setcursor 6,0
-
 
634
	mov	si, loading_msg-0x10000
-
 
635
	call	print
-
 
636
	_setcursor 15,0
-
 
637
	cmp	[.bSettingsChanged-0x10000], 0
-
 
638
	jz	.load
-
 
639
	cmp	[.loader_block-0x10000], 0
-
 
640
	jz	.load
-
 
641
	les	bx, [.loader_block-0x10000]
-
 
642
	mov	eax, [es:bx+3]
-
 
643
	push	ds
-
 
644
	pop	es
-
 
645
	test	eax, eax
-
 
646
	jz	.load
-
 
647
	push	eax
-
 
648
	mov	si, save_quest-0x10000
-
 
649
	call	print
-
 
650
.waityn:
-
 
651
	mov	ah, 0
-
 
652
	int	16h
-
 
653
	or	al, 20h
-
 
654
	cmp	al, 'n'
-
 
655
	jz	.loadc
-
 
656
	cmp	al, 'y'
-
 
657
	jnz	.waityn
-
 
658
	call	putchar
-
 
659
	pop	eax
-
 
660
	push	cs
-
 
661
	push	.cont-0x10000
-
 
662
	push	eax
-
 
663
	retf
-
 
664
.loadc:
-
 
665
	pop	eax
-
 
666
.cont:
-
 
667
	push	cs
-
 
668
	pop	ds
-
 
669
	_setcursor 15,0
-
 
670
	mov	si, space_msg-0x10000
Line 324... Line 671...
324
        ; ivan 24/11/2004 begin
671
	call	printplain
Line 325... Line 672...
325
        ;pop     bx
672
	_setcursor 15,0
326
        ; ivan 24/11/2004 end
673
.load:
327
 
674
; \end{diamond}[02.12.2005]
328
 
675
 
329
; ASK GRAPHICS MODE
676
; ASK GRAPHICS MODE
330
 
-
 
331
        movzx   eax,byte [es:preboot_graph-0x10000]
677
 
332
        cmp     eax,0
678
	movzx	ax, [preboot_graph-0x10000]
333
        jne     pre_graph
679
	test	ax, ax
334
        mov     si,gr_mode-0x10000
-
 
335
        call    printplain
-
 
336
       gml0:
-
 
337
        mov     ebx,0x0A01
-
 
338
        call    getkey
-
 
339
       pre_graph:
-
 
340
        cmp     eax,1
-
 
341
        jl      sgml1
-
 
342
        cmp     eax,8
-
 
343
        jg      sgml1
-
 
344
        mov     si,ax
-
 
345
        sub     si,1
-
 
346
        shl     si,4
680
        jne     pre_graph
347
        add     si,gr_table-0x10000
-
 
348
        mov     bx,[es:si+0]
-
 
349
        mov     cx,[es:si+4]
-
 
350
        mov     dx,[es:si+8]
-
 
351
        jmp     gml10
-
 
352
       sgml1:
-
 
353
        cmp     al,9
-
 
354
        jnz     gml00
-
 
355
        mov     bx,0x13
-
 
356
        mov     cx,640
-
 
357
        mov     dx,480
-
 
358
        push    word 0x0
-
 
359
        pop     es
-
 
360
        mov     [es:0x9000],byte 32
-
 
361
        mov     dword [es:0x9018],0x800000
-
 
362
        push    word 0x1000
-
 
363
        pop     es
-
 
364
        jmp     gml10
-
 
365
       gml00:
-
 
366
        cmp     al,0xa
681
        mov     si,gr_mode-0x10000
-
 
682
        call    printplain
-
 
683
        mov     bx,'09'
-
 
684
        call    getkey
-
 
685
       pre_graph:
-
 
686
	push	0
-
 
687
	pop	es
-
 
688
; address is gr_table+6*(ax-1)-0x10000
-
 
689
        add	ax, ax
367
        jnz     gml02
690
        lea	si, [gr_table-0x10000 + eax + eax*2 - 6]
368
        mov     bx,0x12
691
        mov     bx,[si+0]
369
        mov     cx,640
-
 
370
        mov     dx,480
-
 
371
        push    word 0x0
-
 
372
        pop     es
692
        mov     cx,[si+2]
373
        mov     [es:0x9000],byte 32
-
 
374
        mov     dword [es:0x9018],0x800000
-
 
375
        push    word 0x1000
-
 
376
        pop     es
-
 
377
        jmp     gml10
-
 
378
       gml02:
-
 
379
        jmp     gml0
-
 
380
       gr_table:
-
 
381
        dd      0x112+0100000000000000b ,  640 ,  480 , 0
-
 
382
        dd      0x115+0100000000000000b ,  800 ,  600 , 0
-
 
383
        dd      0x118+0100000000000000b , 1024 ,  768 , 0
-
 
384
        dd      0x11B+0100000000000000b , 1280 , 1024 , 0
-
 
385
        dd      0x112 ,  640 , 480 , 0
-
 
386
        dd      0x115 ,  800 , 600 , 0
693
        mov     dx,[si+4]
387
        dd      0x118 , 1024 , 768 , 0
694
        cmp	al, 9*2
388
        dd      0x11B , 1280 ,1024 , 0
695
        jb	@f
389
       gml10:
-
 
390
        push    word 0x0000
-
 
391
        pop     es
696
        mov	byte [es:0x9000], 32
392
        mov     [es:0x9008],bx
-
 
393
        mov     [es:0x900A],cx
697
        mov	dword [es:0x9018], 0x800000
394
        mov     [es:0x900C],dx
-
 
395
        push    word 0x1000
698
       @@:
396
        pop     es
-
 
Line 397... Line 699...
397
        mov     ax,32
699
        mov     [es:0x9008],bx
Line 398... Line 700...
398
        cmp     bx,0x13
700
        mov     [es:0x900A],cx
Line 399... Line 701...
399
        je      nov
701
        mov     [es:0x900C],dx
400
        cmp     bx,0x12
702
        mov     ax,32
401
        je      nov
703
        test	bh, bh
402
 
704
        jz	nov
403
 
705
 
Line 404... Line 706...
404
; USE DEFAULTS OR PROBE
706
; USE DEFAULTS OR PROBE
405
 
707
 
Line 406... Line 708...
406
; bx - mode : cx - x size : dx - y size
708
; bx - mode : cx - x size : dx - y size
407
 
709
 
408
     ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
710
     ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
409
        movzx   ax,[es:preboot_gprobe-0x10000]
711
        movzx   ax,[preboot_gprobe-0x10000]
410
        test    ax,ax
712
        test    ax,ax
411
        jne     pre_probe
713
        jne     pre_probe
Line 412... Line 714...
412
     ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
714
     ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
413
 
715
 
414
        test    bx,0100000000000000b
716
        test    bx,0100000000000000b
Line 415... Line 717...
415
        jz      noprobe
717
        jz      noprobe
Line 416... Line 718...
416
 
718
 
Line 443... Line 745...
443
     probemore:
745
     probemore:
Line 444... Line 746...
444
 
746
 
445
        mov     ax,0x4f01
747
        mov     ax,0x4f01
446
        mov     cx,bx
748
        mov     cx,bx
447
        and     cx,0xfff
-
 
448
        push    word 0x0000
-
 
449
        pop     es
749
        and     cx,0xfff
450
        mov     di,0xa000
750
        mov     di,0xa000
Line 451... Line 751...
451
        int     0x10
751
        int     0x10
452
 
-
 
453
        mov     eax,[es:di]       ; lfb ?
752
 
454
        test    eax,10000000b
-
 
455
        jz      newprobe
753
	test	byte [es:di], 80h	; lfb?
456
 
754
	jz	newprobe
457
        mov     eax,[es:di+0x12]  ; x size ?
755
	mov	ax, [es:di+0x12]	; x size?
458
        cmp     ax,word [esp+2]
-
 
459
        jne     newprobe
756
	cmp	ax, [esp+2]
460
 
-
 
461
        mov     eax,[es:di+0x14]  ; y size ?
757
	jnz	newprobe
462
        cmp     ax,dx
-
 
463
        jne     newprobe
-
 
464
 
758
	cmp	[es:di+0x14], dx	; y size?
465
        movzx   eax,byte [es:di+0x19]
759
	jnz	newprobe
Line 466... Line -...
466
        cmp     eax,32 ;24
-
 
467
        jb      newprobe
-
 
468
 
760
	cmp	byte [es:di+0x19], 32 ;24
469
        push    word 0x0000        ; save probed mode
761
	jb	newprobe
470
        pop     es
-
 
471
        add     bx,0100000000000000b
762
 
472
        mov     [es:0x9008],bx
-
 
473
        push    word 0x1000
-
 
474
        pop     es
-
 
475
 
-
 
476
        push    bx
-
 
477
 
-
 
478
        mov     si,prid-0x10000
-
 
Line 479... Line 763...
479
        call    printplain
763
        add     bx,0100000000000000b
Line 480... Line 764...
480
 
764
        mov     [es:0x9008],bx
Line 481... Line 765...
481
        pop     bx dx cx
765
        pop	dx cx
482
 
766
 
483
     noprobe:
767
     noprobe:
484
 
-
 
485
 
-
 
486
; FIND VESA 2.0 LFB & BPP
768
 
487
 
769
 
488
        mov     ax,0x4f01
770
; FIND VESA 2.0 LFB & BPP
489
        mov     cx,bx
771
 
490
        and     cx,0xfff
772
        mov     ax,0x4f01
491
        push    word 0x0000
-
 
492
        pop     es
-
 
493
        mov     di,0xa000
-
 
494
        int     0x10
773
        mov     cx,bx
495
        ; LFB
774
        and     cx,0xfff
496
        mov     ecx,[es:di+0x28]
-
 
497
        mov     [es:0x9018],ecx
775
        mov     di,0xa000
498
        ; BPP
776
        int     0x10
499
        movzx   ax,byte [es:di+0x19]
777
        ; LFB
-
 
778
        mov     ecx,[es:di+0x28]
500
        mov     [es:0x9000],ax
779
        mov     [es:0x9018],ecx
501
        ; ---- vbe voodoo
780
        ; ---- vbe voodoo
502
        BytesPerScanLine equ 0x10
781
        BytesPerScanLine equ 0x10
503
        push ax
-
 
504
        mov ax, [es:di+BytesPerScanLine]
782
        mov ax, [es:di+BytesPerScanLine]
505
        mov [es:0x9001],ax
783
        mov [es:0x9001],ax
506
        pop ax
-
 
507
        ; -----
784
        ; BPP
508
       nov:
-
 
509
        cmp     ax,24
785
        movzx   ax,byte [es:di+0x19]
510
        jnz     nbpp24
786
        mov     [es:0x9000],al
511
        mov     si,bt24-0x10000
-
 
512
        jmp     bppl
787
       nov:
513
       nbpp24:
788
        cmp     ax,24
514
        cmp     ax,32
789
        mov	si,bt24-0x10000
515
        jnz     nbpp32
790
        jz	bppl
516
        mov     si,bt32-0x10000
791
        cmp     ax,32
Line 517... Line 792...
517
        jmp     bppl
792
        mov     si,bt32-0x10000
Line -... Line 793...
-
 
793
        jz     bppl
518
       nbpp32:
794
        mov     si,btns-0x10000
519
        mov     si,btns-0x10000
795
        call    print
520
        call    print
796
        jmp     $
521
        jmp     $
797
       bppl:
522
       bppl:
-
 
523
        call    printplain
798
        call    printplain
524
 
799
 
525
 
800
 
526
; FIND VESA 1.2 PM BANK SWITCH ADDRESS
801
; FIND VESA 1.2 PM BANK SWITCH ADDRESS
527
 
-
 
528
        mov     ax,0x4f0A
802
 
529
        mov     bx,0x0
803
	push	es
530
        int     0x10
-
 
531
        xor     eax,eax
804
        mov     ax,0x4f0A
532
        xor     ebx,ebx
805
        xor	bx, bx
533
        mov     ax,es
-
 
534
        shl     eax,4
-
 
535
        mov     bx,di
-
 
Line 536... Line 806...
536
        add     eax,ebx
806
        int     0x10
Line 537... Line 807...
537
        xor     ebx,ebx
807
        xor     eax,eax
538
        mov     bx,[es:di]
808
        mov     ax,es
539
        add     eax,ebx
809
        shl     eax,4
540
        push    word 0x0
810
        movzx   ebx,di
541
        pop     es
811
        add     eax,ebx
542
        mov     [es:0x9014],eax
812
        mov     bx,[es:di]
543
        push    word 0x1000
813
        add     eax,ebx
544
        pop     es
814
        pop     es
545
 
-
 
546
 
-
 
547
 
815
        mov     [es:0x9014],eax
548
; GRAPHICS ACCELERATION
816
 
549
 
-
 
550
        mov     al, [es:preboot_mtrr-0x10000]
817
 
551
        test    al,al
818
; GRAPHICS ACCELERATION
Line 552... Line 819...
552
        jne     pre_mtrr
819
 
Line 553... Line 820...
553
        mov     si,gr_acc-0x10000
820
        mov     al, [preboot_mtrr-0x10000]
554
        call    printplain
821
        test    al,al
555
        mov     ebx,0x0201
822
        jne     pre_mtrr
556
        call    getkey
823
        mov     si,gr_acc-0x10000
557
      pre_mtrr:
824
        call    printplain
558
        push    word 0x0000
825
        mov     bx,'12'
559
        pop     es
826
        call    getkey
560
        mov     [es:0x901C],al
827
      pre_mtrr:
561
        push    word 0x1000
-
 
562
        pop     es
-
 
563
        mov     si,linef-0x10000
828
        mov     [es:0x901C],al
564
        call    printplain
829
; commented by diamond - newlines are not used now
565
 
-
 
566
 
830
;        mov     si,linef-0x10000
567
; VRR_M USE
831
;        call    printplain
Line 568... Line 832...
568
 
832
 
Line 569... Line 833...
569
        mov     al,[es:preboot_vrrm-0x10000]
833
 
Line 649... Line 913...
649
;        mov     eax,1                             ; paging disabled
913
;        mov     eax,1                             ; paging disabled
650
;        cmp     eax,0
914
;        cmp     eax,0
651
;        jne     pre_lfb
915
;        jne     pre_lfb
652
;        mov     si,gr_direct-0x10000
916
;        mov     si,gr_direct-0x10000
653
;        call    printplain
917
;        call    printplain
654
;        mov     ebx,0x0201
918
;        mov     ebx,'12'
655
;        call    getkey
919
;        call    getkey
656
;      pre_lfb:
920
;      pre_lfb:
657
;        push    word 0x0000
921
;        push    word 0x0000
658
;        pop     es
922
;        pop     es
659
;        mov     [es:0x901E],al
923
;        mov     [es:0x901E],al
660
;        mov     ax,0x1000
924
;        mov     ax,0x1000
661
;        mov     es,ax
925
;        mov     es,ax
662
;        mov     si,linef-0x10000
926
;        mov     si,linef-0x10000
663
;        call    printplain
927
;        call    printplain
664
        push    0
-
 
665
        pop     es
-
 
666
        mov     [es:0x901E],byte 1
928
        mov     [es:0x901E],byte 1
667
        push    0x1000
-
 
668
        pop     es
-
 
Line 669... Line 929...
669
 
929
 
Line 670... Line 930...
670
 
930
 
671
 
931
 
672
; BOOT DEVICE
932
; BOOT DEVICE
673
 
933
 
674
        movzx   eax,byte [es:preboot_device-0x10000]
934
	mov	al, [preboot_device-0x10000]
675
        cmp     eax,0
935
	test	al, al
676
        jne     pre_device
936
	jnz	pre_device
677
        mov     si,bdev-0x10000
937
        mov     si,bdev-0x10000
678
        call    printplain
938
        call    printplain
679
        mov     ebx,0x0301
939
        mov     bx,'13'
-
 
940
        call    getkey
680
        call    getkey
941
      pre_device:
681
      pre_device:
942
        dec     ax
Line 682... Line 943...
682
        dec     al
943
        mov     [boot_dev-0x10000],al
Line 683... Line 944...
683
        mov     [es:boot_dev-0x10000],al
944
; commented by diamond - newlines are not used now
684
        mov     si,linef-0x10000
945
;        mov     si,linef-0x10000
685
        call    printplain
946
;        call    printplain
686
 
947
 
687
 
948
 
688
 
949
 
689
; READ DISKETTE TO MEMORY
950
; READ DISKETTE TO MEMORY
690
 
951
 
691
        cmp     [boot_dev-0x10000],0
952
        cmp     [boot_dev-0x10000],0
692
        jne     no_sys_on_floppy
953
        jne     no_sys_on_floppy
693
        mov     si,diskload-0x10000
954
        mov     si,diskload-0x10000
694
        call    print
955
        call    print
695
        mov     ax,0x0000               ; reset drive
956
        xor	ax, ax			; reset drive
696
        mov     dx,0x0000
957
        xor	dx, dx
697
        int     0x13
-
 
698
        mov     cx,0x0001               ; startcyl,startsector
-
 
699
        mov     dx,0x0000               ; starthead,drive
958
        int     0x13
700
        push    word 80*2               ; read no of sect
959
        mov     cx,0x0001               ; startcyl,startsector
701
       reads:
960
        xor	dx, dx			; starthead,drive
702
        pusha
961
        push    word 80*2               ; read no of sect
703
        xor     si,si
962
       reads:
704
       newread:
963
        pusha
705
        push    word 0x0
964
        xor     si,si
706
        pop     es
965
       newread:
707
        mov     bx,0xa000               ; es:bx -> data area
966
        mov     bx,0xa000               ; es:bx -> data area
708
        mov     ax,0x0200+18            ; read, no of sectors to read
967
        mov     ax,0x0200+18            ; read, no of sectors to read
709
        int     0x13
968
        int     0x13
710
        cmp     ah,0
969
        test	ah, ah
711
        jz      goodread
970
        jz      goodread
712
        add     si,1
971
        inc	si
-
 
972
        cmp     si,10
713
        cmp     si,10
973
        jnz     newread
714
        jnz     newread
974
        mov     si,badsect-0x10000
715
        mov     si,badsect-0x10000
975
        call    printplain
716
        call    printplain
976
        jmp     $
717
        jmp     $
977
       goodread:
-
 
978
        ; move -> 1mb
Line 718... Line 979...
718
       goodread:
979
        mov     si,movedesc-0x10000
719
        ; move -> 1mb
980
        push	es
720
        mov     si,movedesc-0x10000
981
        push	ds
721
        push    word 0x1000
982
        pop     es
722
        pop     es
983
        mov     cx,256*18
723
        mov     cx,256*18
984
        mov     ah,0x87
724
        mov     ah,0x87
985
        int     0x15
725
        int     0x15
986
        pop	es
726
 
987
 
Line 727... Line -...
727
        cmp     ah,0                  ; was the move successfull ?
-
 
728
        je      goodmove
-
 
729
        mov     dx,0x3f2              ; floppy motor off
988
        test    ah,ah                  ; was the move successfull ?
730
        mov     al,0
989
        je      goodmove
731
        out     dx,al
990
        mov     dx,0x3f2              ; floppy motor off
732
        mov     si,memmovefailed-0x10000
991
        mov     al,0
733
        call    print
992
        out     dx,al
734
        jmp     $
993
        mov     si,memmovefailed-0x10000
735
      goodmove:
994
        call    print
736
 
995
        jmp     $
737
        mov     eax,[es:movedesc-0x10000+0x18+2]
-
 
738
        add     eax,512*18
-
 
739
        mov     [es:movedesc-0x10000+0x18+2],eax
-
 
740
        popa
-
 
741
        inc     dh
-
 
742
        cmp     dh,2
-
 
743
        jnz     bb2
-
 
744
        mov     dh,0
-
 
745
        inc     ch
-
 
746
        pusha                        ; print prosentage
-
 
747
        push    word 0x1000
-
 
748
        pop     es
-
 
749
        xor     eax,eax  ; 5
-
 
750
        mov     al,ch
-
 
751
        shr     eax,2
-
 
752
        and     eax,1
996
      goodmove:
-
 
997
 
-
 
998
	add	dword [movedesc-0x10000+0x18+2], 512*18
-
 
999
        popa
-
 
1000
        inc     dh
-
 
1001
        cmp     dh,2
-
 
1002
        jnz     bb2
-
 
1003
        mov     dh,0
-
 
1004
        inc     ch
-
 
1005
        pusha                        ; print prosentage
-
 
1006
        mov     si,pros-0x10000
753
        mov     ebx,5
1007
	shr	ch, 2
754
        mul     bx
1008
	mov	al, '5'
755
        add     al,48
1009
	test	ch, 1
756
        mov     [es:pros+1-0x10000],al
1010
	jnz	@f
757
        xor     eax,eax  ; 10
1011
	mov	al, '0'
758
        mov     al,ch
1012
@@:
759
        shr     eax,3
-
 
760
        add     al,48
-
 
761
        mov     [es:pros-0x10000],al
-
 
762
        mov     si,pros-0x10000
-
 
763
        call    printplain
1013
	mov	[si+1], al
764
        popa
-
 
765
       bb2:
-
 
766
        pop     ax
-
 
767
        dec     ax
-
 
768
        push    ax
-
 
769
        cmp     ax,0
-
 
770
        jnz     rs
-
 
771
        jmp     readdone
-
 
772
       rs:
-
 
773
        jmp     reads
-
 
774
       movedesc:
-
 
775
        db      0x00,0x00,0x0,0x00,0x00,0x00,0x0,0x0
1014
	shr	ch, 1
776
        db      0x00,0x00,0x0,0x00,0x00,0x00,0x0,0x0
1015
	add	ch, '0'
777
 
-
 
778
        db      0xff,0xff,0x0,0xa0,0x00,0x93,0x0,0x0
-
 
779
        db      0xff,0xff,0x0,0x00,0x10,0x93,0x0,0x0
-
 
780
 
1016
	mov	[si], ch
781
        db      0x00,0x00,0x0,0x00,0x00,0x00,0x0,0x0
1017
        call    printplain
782
        db      0x00,0x00,0x0,0x00,0x00,0x00,0x0,0x0
1018
        popa
783
        db      0x00,0x00,0x0,0x00,0x00,0x00,0x0,0x0
1019
       bb2:
784
        db      0x00,0x00,0x0,0x00,0x00,0x00,0x0,0x0
1020
        pop     ax
785
       readdone:
1021
        dec     ax
786
        pop     ax
1022
        push    ax
787
        mov     dx,0x3f2             ; floppy motor off
1023
        jnz     reads
788
        mov     al,0
1024
       readdone:
789
        out     dx,al
1025
        pop     ax
790
        mov     si,backspace-0x10000
1026
        mov     si,backspace-0x10000
791
        call    printplain
1027
        call    printplain
Line 792... Line 1028...
792
        call    printplain
1028
        call    printplain
793
        mov     si,okt-0x10000
1029
        mov     si,okt-0x10000
Line 794... Line -...
794
        call    printplain
-
 
795
       no_sys_on_floppy:
-
 
796
        mov     ax,0x0000               ; reset drive
1030
        call    printplain
797
        mov     dx,0x0000
-
 
Line 798... Line 1031...
798
        int     0x13
1031
       no_sys_on_floppy:
Line 799... Line 1032...
799
       mov dx,0x3f2 ; floppy motor off
1032
        xor	ax, ax		; reset drive
800
       mov al,0
1033
        xor	dx, dx
801
       out dx,al       
1034
        int     0x13
802
 
1035
       mov dx,0x3f2 ; floppy motor off
803
 
1036
       mov al,0
804
; PAGE TABLE
-
 
805
 
1037
       out dx,al
806
        push    word 0x0000
1038
 
807
        pop     es
1039
	push	es
808
        mov     ecx,[es:0x9018]
1040
; PAGE TABLE
809
        push    ecx
1041
 
810
 
1042
	push	dword [es:0x9018]
811
        map_mem equ 64                ; amount of memory to map
1043
 
812
 
1044
        map_mem equ 64                ; amount of memory to map
813
        mov     bx,0x6000
1045
 
814
        mov     es,bx                   ; [es:di] = 6000:0
1046
        push	0x6000
815
        xor     edi,edi
1047
        pop	es                    ; es:di = 6000:0
816
        mov     ecx,256*map_mem         ; Map (mapmem) M
1048
        xor     di,di
817
        mov     eax,7
1049
        mov     cx,256*map_mem         ; Map (mapmem) M
Line 818... Line 1050...
818
        cld
1050
        mov     eax,7
819
       pt2:
1051
       pt2:
820
        cmp     ecx,256*(map_mem-8)     ; 8 M map to LFB
1052
        cmp     cx,256*(map_mem-8)     ; 8 M map to LFB
821
        jnz     pt3
1053
        jnz     pt3
822
        pop     eax
1054
        pop     eax
823
        add     eax,7
1055
        add     eax,7
824
       pt3:
1056
       pt3:
825
        cmp     ecx,256*(map_mem-12)    ; 12 M back to linear = physical
1057
        cmp     cx,256*(map_mem-12)    ; 12 M back to linear = physical
826
        jnz     pt4
1058
        jnz     pt4
Line 827... Line 1059...
827
        mov     eax,12*0x100000 + 7
1059
        mov     eax,12*0x100000 + 7
Line 828... Line 1060...
828
       pt4:
1060
       pt4:
829
        stosd
1061
        stosd
830
        add     eax,4096
1062
        add     eax,4096
831
        loop    pt2
1063
        loop    pt2
832
        
1064
        
833
        mov     bx,0x7100
-
 
834
        mov     es,bx
1065
	push	0x7100
835
        xor     edi,edi
1066
	pop	es
836
        mov     eax,8*0x100000+7
1067
        xor     di,di
837
        mov     ecx,256*4
1068
        mov     eax,8*0x100000+7
838
      pt5:
1069
        mov     cx,256*4
839
        stosd
1070
      pt5:
840
        add     eax,0x1000
1071
        stosd
841
        loop    pt5
1072
        add     eax,0x1000
842
        
-
 
843
; 4 KB PAGE DIRECTORY
-
 
844
 
1073
        loop    pt5
845
        mov     bx , 0x7F00
-
 
846
        mov     es , bx                 ; [es:di] = 7000:0
-
 
Line 847... Line 1074...
847
        xor     edi, edi
1074
        
848
        mov     ecx, 64 / 4
1075
; 4 KB PAGE DIRECTORY
Line 849... Line 1076...
849
        mov     eax, 0x60007            ; for 0 M
1076
 
Line -... Line 1077...
-
 
1077
	push	0x7F00
850
        cld
1078
	pop	es                ; es:di = 7F00:0
851
      pd4k:
1079
        xor     di, di
852
        stosd
1080
        mov     cx, 64 / 4
853
        add     eax, 0x1000
-
 
854
        loop    pd4k
1081
        mov     eax, 0x60007            ; for 0 M
855
        mov     dword [es:0x800],0x71007   ;map region 0x80000000-0x803FFFFF to 0x800000-0xCFFFFF
1082
      pd4k:
856
        xor     esi,esi
1083
        stosd
857
        mov     edi,second_base_address shr 20
1084
        add     eax, 0x1000
858
        mov     ecx,64/4
1085
        loop    pd4k
859
        mov     bx,0x7F00
1086
        mov     dword [es:0x800],0x71007   ;map region 0x80000000-0x803FFFFF to 0x800000-0xCFFFFF
860
        mov     ds,bx
1087
        xor     si,si
861
        rep     movsd
1088
        mov     di,second_base_address shr 20
862
        mov     bx,0x1000
1089
        mov     cx,64/4
863
        mov     ds,bx
1090
        rep     movs dword [es:di], [es:si]
864
       
1091
       
865
        mov     eax, 0x7F000 +8+16      ; Page directory and enable caches
1092
        mov     eax, 0x7F000 +8+16      ; Page directory and enable caches
Line 866... Line 1093...
866
        mov     cr3, eax
1093
        mov     cr3, eax
867
 
-
 
868
; SET GRAPHICS
-
 
869
 
-
 
870
        mov     dx,0x0000
1094
 
871
        mov     es,dx
-
 
872
        mov     bx,[es:0x9008]
1095
; SET GRAPHICS
873
        mov     ax,bx                ; vga & 320x200
1096
 
Line 874... Line 1097...
874
        cmp     ax,0x13
1097
	pop	es
875
        je      setgr
1098
        mov     bx,[es:0x9008]		; vga & 320x200
876
        cmp     ax,0x12
1099
        mov	ax, bx
877
        je      setgr
1100
	push	ax
878
        mov     ax,0x4f02            ; Vesa
1101
        cmp     ax,0x13
879
       setgr:
1102
        je      setgr
Line 880... Line 1103...
880
        int     0x10
1103
        cmp     ax,0x12
881
        cmp     ah,0
1104
        je      setgr
882
        jz      gmok
1105
        mov     ax,0x4f02            ; Vesa
883
        mov     si,fatalsel-0x10000
1106
       setgr:
884
        call    print
1107
        int     0x10
885
        jmp     $
1108
        test	ah,ah
Line 886... Line 1109...
886
        
1109
        jz      gmok
887
       gmok:
1110
        mov     si,fatalsel-0x10000
888
        mov     dx,0x1000
1111
        call    print
889
        mov     es,dx
1112
        jmp     $
Line 890... Line 1113...
890
 
1113
        
891
; set mode 0x12 graphics registers:
1114
       gmok:
892
 
1115
; set mode 0x12 graphics registers: