forked from KolibriOS/kolibrios
blue screen removal: some bugs fixed
git-svn-id: svn://kolibrios.org@1703 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
c5737c5fed
commit
57b74ef78d
@ -47,24 +47,6 @@ printplain:
|
||||
popa
|
||||
ret
|
||||
|
||||
getkey:
|
||||
;get number in range [bl,bh] (bl,bh in ['0'..'9'])
|
||||
; in: bx=range
|
||||
; out: ax=digit (1..9, 10 for 0)
|
||||
mov ah, 0
|
||||
int 16h
|
||||
cmp al, bl
|
||||
jb getkey
|
||||
cmp al, bh
|
||||
ja getkey
|
||||
push ax
|
||||
call putchar
|
||||
pop ax
|
||||
and ax, 0Fh
|
||||
jnz @f
|
||||
mov al, 10
|
||||
@@:
|
||||
ret
|
||||
|
||||
setcursor:
|
||||
; in: dl=column, dh=row
|
||||
@ -90,15 +72,20 @@ boot_read_floppy:
|
||||
jnc @f
|
||||
inc si
|
||||
cmp si, 10
|
||||
jb @b
|
||||
mov si, badsect
|
||||
sayerr_plain:
|
||||
call printplain
|
||||
jmp $
|
||||
jnb $
|
||||
@@:
|
||||
pop si
|
||||
ret
|
||||
|
||||
sayerr_plain:
|
||||
call printplain
|
||||
jmp $
|
||||
|
||||
sayerr:
|
||||
call print
|
||||
jmp $
|
||||
|
||||
|
||||
; convert abs. sector number (AX) to BIOS T:H:S
|
||||
; sector number = (abs.sector%BPB_SecPerTrk)+1
|
||||
; pre.track number = (abs.sector/BPB_SecPerTrk)
|
||||
@ -209,20 +196,16 @@ dfl1:
|
||||
; draw bottom
|
||||
mov si, d80x25_bottom
|
||||
mov cx, d80x25_bottom_num * 80
|
||||
;@@:
|
||||
; lodsb
|
||||
; stoswvmode
|
||||
; loop @b
|
||||
@@:
|
||||
lodsb
|
||||
stosw
|
||||
loop @b
|
||||
|
||||
mov byte [space_msg+80], 0 ; now space_msg is null terminated
|
||||
|
||||
_setcursor d80x25_top_num,0
|
||||
|
||||
|
||||
sayerr:
|
||||
call print
|
||||
jmp $
|
||||
cpugood:
|
||||
cpugood:
|
||||
|
||||
push 0
|
||||
popf
|
||||
@ -336,7 +319,7 @@ cfgmanager:
|
||||
; d) preboot_device = from what boot?
|
||||
|
||||
; determine default settings
|
||||
mov [.bSettingsChanged], 0
|
||||
; mov [.bSettingsChanged], 0
|
||||
|
||||
;.preboot_gr_end:
|
||||
mov di, preboot_device
|
||||
@ -360,287 +343,13 @@ cfgmanager:
|
||||
adc byte [di+preboot_dma-preboot_device], 0
|
||||
cmp byte [di+preboot_biosdisk-preboot_device], 1
|
||||
adc byte [di+preboot_biosdisk-preboot_device], 0
|
||||
; default value for VRR is OFF
|
||||
cmp byte [di+preboot_vrrm-preboot_device], 0
|
||||
jnz @f
|
||||
mov byte [di+preboot_vrrm-preboot_device], 2
|
||||
@@:
|
||||
; notify user
|
||||
_setcursor 5,2
|
||||
|
||||
mov si, linef
|
||||
call printplain
|
||||
mov si, start_msg
|
||||
call print
|
||||
mov si, time_msg
|
||||
call print
|
||||
; get start time
|
||||
call .gettime
|
||||
mov [.starttime], eax
|
||||
mov word [.timer], .newtimer
|
||||
mov word [.timer+2], cs
|
||||
.printcfg:
|
||||
|
||||
_setcursor 9,0
|
||||
mov si, current_cfg_msg
|
||||
call print
|
||||
mov si, curvideo_msg
|
||||
call print
|
||||
|
||||
;<< call draw_current_vmode
|
||||
|
||||
mov si, usebd_msg
|
||||
cmp [preboot_biosdisk], 1
|
||||
call .say_on_off
|
||||
mov si, vrrm_msg
|
||||
cmp [preboot_vrrm], 1
|
||||
call .say_on_off
|
||||
mov si, preboot_device_msg
|
||||
call print
|
||||
mov al, [preboot_device]
|
||||
and eax, 7
|
||||
mov si, [preboot_device_msgs+eax*2]
|
||||
call printplain
|
||||
.show_remarks:
|
||||
; show remarks in gray color
|
||||
mov di, ((21-num_remarks)*80 + 2)*2
|
||||
push 0xB800
|
||||
pop es
|
||||
mov cx, num_remarks
|
||||
mov si, remarks
|
||||
.write_remarks:
|
||||
lodsw
|
||||
push si
|
||||
xchg ax, si
|
||||
mov ah, 1*16+7 ; background: blue (1), foreground: gray (7)
|
||||
push di
|
||||
.write_remark:
|
||||
lodsb
|
||||
test al, al
|
||||
jz @f
|
||||
stosw
|
||||
jmp .write_remark
|
||||
@@:
|
||||
pop di
|
||||
pop si
|
||||
add di, 80*2
|
||||
loop .write_remarks
|
||||
.wait:
|
||||
_setcursor 25,0 ; out of screen
|
||||
; set timer interrupt handler
|
||||
cli
|
||||
push 0
|
||||
pop es
|
||||
push dword [es:8*4]
|
||||
pop dword [.oldtimer]
|
||||
push dword [.timer]
|
||||
pop dword [es:8*4]
|
||||
sti
|
||||
; wait for keypressed
|
||||
xor ax,ax
|
||||
int 16h
|
||||
push ax
|
||||
; restore timer interrupt
|
||||
mov eax, [.oldtimer]
|
||||
mov [es:8*4], eax
|
||||
mov [.timer], eax
|
||||
|
||||
_setcursor 7,0
|
||||
mov si, space_msg
|
||||
call printplain
|
||||
; clear remarks and restore normal attributes
|
||||
push es
|
||||
mov di, ((21-num_remarks)*80 + 2)*2
|
||||
push 0xB800
|
||||
pop es
|
||||
mov cx, num_remarks
|
||||
mov ax, ' ' + (1*16 + 15)*100h
|
||||
@@:
|
||||
push cx
|
||||
mov cx, 76
|
||||
rep stosw
|
||||
pop cx
|
||||
add di, 4*2
|
||||
loop @b
|
||||
pop es
|
||||
pop ax
|
||||
; switch on key
|
||||
cmp al, 13
|
||||
jz .continue
|
||||
or al, 20h
|
||||
cmp al, 'a'
|
||||
jz .change_a
|
||||
cmp al, 'b'
|
||||
jz .change_b
|
||||
cmp al, 'c'
|
||||
jz .change_c
|
||||
cmp al, 'd'
|
||||
jnz .show_remarks
|
||||
_setcursor 15,0
|
||||
mov si, bdev
|
||||
call print
|
||||
mov bx, '14'
|
||||
call getkey
|
||||
mov [preboot_device], al
|
||||
_setcursor 13,0
|
||||
.d:
|
||||
mov [.bSettingsChanged], 1
|
||||
call clear_vmodes_table ;clear vmodes_table
|
||||
jmp .printcfg
|
||||
.change_a:
|
||||
.loops:
|
||||
call draw_vmodes_table
|
||||
_setcursor 25,0 ; out of screen
|
||||
xor ax,ax
|
||||
int 0x16
|
||||
|
||||
mov si,word [cursor_pos]
|
||||
|
||||
cmp ah,0x48;x,0x48E0 ; up
|
||||
jne .down
|
||||
cmp si,modes_table
|
||||
jbe .loops
|
||||
sub word [cursor_pos],size_of_step
|
||||
jmp .loops
|
||||
|
||||
.down: cmp ah,0x50;x,0x50E0 ; down
|
||||
jne .pgup
|
||||
cmp word[es:si+10],-1
|
||||
je .loops
|
||||
add word [cursor_pos],size_of_step
|
||||
jmp .loops
|
||||
|
||||
.pgup: cmp ah,0x49 ; page up
|
||||
jne .pgdn
|
||||
sub si, size_of_step*long_v_table
|
||||
cmp si, modes_table
|
||||
jae @f
|
||||
mov si, modes_table
|
||||
@@:
|
||||
mov word [cursor_pos], si
|
||||
mov si, word [home_cursor]
|
||||
sub si, size_of_step*long_v_table
|
||||
cmp si, modes_table
|
||||
jae @f
|
||||
mov si, modes_table
|
||||
@@:
|
||||
mov word [home_cursor], si
|
||||
jmp .loops
|
||||
|
||||
.pgdn: cmp ah,0x51 ; page down
|
||||
jne .enter
|
||||
mov ax, [end_cursor]
|
||||
add si, size_of_step*long_v_table
|
||||
cmp si, ax
|
||||
jb @f
|
||||
mov si, ax
|
||||
sub si, size_of_step
|
||||
@@:
|
||||
mov word [cursor_pos], si
|
||||
mov si, word [home_cursor]
|
||||
sub ax, size_of_step*long_v_table
|
||||
add si, size_of_step*long_v_table
|
||||
cmp si, ax
|
||||
jb @f
|
||||
mov si, ax
|
||||
@@:
|
||||
mov word [home_cursor], si
|
||||
jmp .loops
|
||||
|
||||
.enter: cmp al,0x0D;x,0x1C0D ; enter
|
||||
jne .loops
|
||||
push word [cursor_pos]
|
||||
pop bp
|
||||
push word [es:bp]
|
||||
pop word [x_save]
|
||||
push word [es:bp+2]
|
||||
pop word [y_save]
|
||||
push word [es:bp+6]
|
||||
pop word [number_vm]
|
||||
mov word [preboot_graph],bp ;save choose
|
||||
|
||||
jmp .d
|
||||
|
||||
.change_b:
|
||||
_setcursor 15,0
|
||||
mov si, ask_bd
|
||||
call print
|
||||
mov bx, '12'
|
||||
call getkey
|
||||
mov [preboot_biosdisk], al
|
||||
_setcursor 11,0
|
||||
jmp .d
|
||||
.change_c:
|
||||
_setcursor 15,0
|
||||
mov si, vrrmprint
|
||||
call print
|
||||
mov bx, '12'
|
||||
call getkey
|
||||
mov [preboot_vrrm], al
|
||||
_setcursor 12,0
|
||||
jmp .d
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
.say_on_off:
|
||||
pushf
|
||||
call print
|
||||
mov si, on_msg
|
||||
popf
|
||||
jz @f
|
||||
mov si, off_msg
|
||||
@@: jmp printplain
|
||||
; novesa and vervesa strings are not used at the moment of executing this code
|
||||
virtual at novesa
|
||||
.oldtimer dd ?
|
||||
.starttime dd ?
|
||||
.bSettingsChanged db ?
|
||||
.timer dd ?
|
||||
end virtual
|
||||
; pop ax ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ??
|
||||
jmp .continue
|
||||
.loader_block dd -1
|
||||
.gettime:
|
||||
mov ah, 0
|
||||
int 1Ah
|
||||
xchg ax, cx
|
||||
shl eax, 10h
|
||||
xchg ax, dx
|
||||
ret
|
||||
.newtimer:
|
||||
push ds
|
||||
push cs
|
||||
pop ds
|
||||
pushf
|
||||
call [.oldtimer]
|
||||
pushad
|
||||
call .gettime
|
||||
sub eax, [.starttime]
|
||||
sub ax, 18*5
|
||||
jae .timergo
|
||||
neg ax
|
||||
add ax, 18-1
|
||||
mov bx, 18
|
||||
xor dx, dx
|
||||
div bx
|
||||
|
||||
; wait 5/4/3/2 seconds, 1 second
|
||||
cmp al, 1
|
||||
mov cl, 's'
|
||||
ja @f
|
||||
mov cl, ' '
|
||||
@@: mov [time_str+9], cl
|
||||
add al, '0'
|
||||
mov [time_str+1], al
|
||||
mov si, time_msg
|
||||
_setcursor 7,0
|
||||
call print
|
||||
_setcursor 25,0
|
||||
popad
|
||||
pop ds
|
||||
iret
|
||||
.timergo:
|
||||
push 0
|
||||
pop es
|
||||
mov eax, [.oldtimer]
|
||||
mov [es:8*4], eax
|
||||
mov sp, 0EC00h
|
||||
.continue:
|
||||
sti
|
||||
_setcursor 6,0
|
||||
@ -651,35 +360,8 @@ end virtual
|
||||
mov si, loading_msg
|
||||
call print
|
||||
_setcursor 15,0
|
||||
cmp [.bSettingsChanged], 0
|
||||
jz .load
|
||||
cmp [.loader_block], -1
|
||||
jz .load
|
||||
les bx, [.loader_block]
|
||||
mov eax, [es:bx+3]
|
||||
push ds
|
||||
pop es
|
||||
test eax, eax
|
||||
jz .load
|
||||
push eax
|
||||
mov si, save_quest
|
||||
call print
|
||||
.waityn:
|
||||
mov ah, 0
|
||||
int 16h
|
||||
or al, 20h
|
||||
cmp al, 'n'
|
||||
jz .loadc
|
||||
cmp al, 'y'
|
||||
jnz .waityn
|
||||
call putchar
|
||||
mov byte [space_msg+80], 186
|
||||
jmp .load
|
||||
|
||||
pop eax
|
||||
push cs
|
||||
push .cont
|
||||
push eax
|
||||
retf ;call back
|
||||
.loadc:
|
||||
pop eax
|
||||
.cont:
|
||||
@ -691,7 +373,6 @@ end virtual
|
||||
call printplain
|
||||
_setcursor 15,0
|
||||
.load:
|
||||
; \end{diamond}[02.12.2005]
|
||||
|
||||
; ASK GRAPHICS MODE
|
||||
|
||||
@ -870,8 +551,8 @@ sayerr_floppy:
|
||||
mov dx, 0x3f2
|
||||
mov al, 0
|
||||
out dx, al
|
||||
mov si, memmovefailed
|
||||
jmp sayerr_plain
|
||||
; mov si, memmovefailed
|
||||
jmp $
|
||||
@@:
|
||||
pop ax ; restore from stack count of words in boot+FAT
|
||||
shl ax, 1 ; make bytes count from count of words
|
||||
@ -1055,37 +736,11 @@ no_sys_on_floppy:
|
||||
mov es, ax
|
||||
|
||||
mov bx, [es:0x9008] ; vga & 320x200
|
||||
; mov bx, ax
|
||||
; cmp ax, 0x13
|
||||
; je setgr
|
||||
; cmp ax, 0x12
|
||||
; je setgr
|
||||
mov ax, 0x4f02 ; Vesa
|
||||
setgr:
|
||||
int 0x10
|
||||
test ah, ah
|
||||
mov si, fatalsel
|
||||
jnz v_mode_error
|
||||
; set mode 0x12 graphics registers:
|
||||
; cmp bx, 0x12
|
||||
; jne gmok2
|
||||
; mov al, 0x05
|
||||
; mov dx, 0x03ce
|
||||
; push dx
|
||||
; out dx, al ; select GDC mode register
|
||||
; mov al, 0x02
|
||||
; inc dx
|
||||
; out dx, al ; set write mode 2
|
||||
; mov al, 0x02
|
||||
; mov dx, 0x03c4
|
||||
; out dx, al ; select VGA sequencer map mask register
|
||||
; mov al, 0x0f
|
||||
; inc dx
|
||||
; out dx, al ; set mask for all planes 0-3
|
||||
; mov al, 0x08
|
||||
; pop dx
|
||||
; out dx, al ; select GDC bit mask register
|
||||
; for writes to 0x03cf
|
||||
jnz $
|
||||
gmok2:
|
||||
push ds
|
||||
pop es
|
||||
|
@ -15,96 +15,52 @@ $Revision$
|
||||
|
||||
|
||||
d80x25_bottom:
|
||||
db 186,' KolibriOS is based on MenuetOS and comes with ABSOLUTELY '
|
||||
db 'NO WARRANTY ',186
|
||||
db 186,' See file COPYING for details '
|
||||
db ' ',186
|
||||
line_full_bottom
|
||||
db 186,' KolibriOS is based on MenuetOS and comes with ABSOLUTELY '
|
||||
db 'NO WARRANTY ',186
|
||||
db 186,' See file COPYING for details '
|
||||
db ' ',186
|
||||
line_full_bottom
|
||||
d80x25_bottom_num = 3
|
||||
|
||||
msg_apm db " APM x.x ", 0
|
||||
vervesa db "Version of Vesa: Vesa x.x",13,10,0
|
||||
novesa db "Display: EGA/CGA",13,10,0
|
||||
s_vesa db "Version of VESA: "
|
||||
.ver db "?.?",13,10,0
|
||||
msg_apm db " APM x.x ", 0
|
||||
vervesa db "Version of Vesa: Vesa x.x",13,10,0
|
||||
;novesa db "Display: EGA/CGA",13,10,0
|
||||
s_vesa db "Version of VESA: "
|
||||
.ver db "?.?",13,10,0
|
||||
|
||||
gr_mode db "Select a videomode: ",13,10,0
|
||||
;s_bpp db 13,10,186," ƒ«ã¡¨ 梥â : "
|
||||
; .bpp dw "??"
|
||||
; db 13,10,0
|
||||
;gr_mode db "Select a videomode: ",13,10,0
|
||||
|
||||
vrrmprint db "Apply VRR? (picture frequency greater than 60Hz"
|
||||
db " only for transfers:",13,10
|
||||
db 186," 1024*768->800*600 and 800*600->640*480) [1-yes,2-no]:",0
|
||||
;vrrmprint db "Apply VRR? (picture frequency greater than 60Hz"
|
||||
; db " only for transfers:",13,10
|
||||
; db 186," 1024*768->800*600 and 800*600->640*480) [1-yes,2-no]:",0
|
||||
|
||||
|
||||
ask_bd db "Add disks visible by BIOS emulated in V86-mode? [1-yes, 2-no]: ",0
|
||||
;ask_bd db "Add disks visible by BIOS emulated in V86-mode? [1-yes, 2-no]: ",0
|
||||
|
||||
bdev db "Load ramdisk from [1-floppy; 2-C:\kolibri.img (FAT32);"
|
||||
db 13,10,186," "
|
||||
db "3-use preloaded ram-image from kernel restart;"
|
||||
db 13,10,186," "
|
||||
db "4-create blank image]: ",0
|
||||
probetext db 13,10,13,10,186," Use standart graphics mode? [1-yes, "
|
||||
db "2-probe bios (Vesa 3.0)]: ",0
|
||||
;memokz256 db 13,10,186," RAM 256 Mb",0
|
||||
;memokz128 db 13,10,186," RAM 128 Mb",0
|
||||
;memokz64 db 13,10,186," RAM 64 Mb",0
|
||||
;memokz32 db 13,10,186," RAM 32 Mb",0
|
||||
;memokz16 db 13,10,186," RAM 16 Mb",0
|
||||
prnotfnd db "Fatal - Videomode not found.",0
|
||||
;modena db "Fatal - VBE 0x112+ required.",0
|
||||
not386 db "Fatal - CPU 386+ required.",0
|
||||
btns db "Fatal - Can't determine color depth.",0
|
||||
fatalsel db "Fatal - Graphics mode not supported by hardware.",0
|
||||
pres_key db "Press any key to choose a new videomode.",0
|
||||
badsect db 13,10,186," Fatal - Bad sector. Replace floppy.",0
|
||||
memmovefailed db 13,10,186," Fatal - Int 0x15 move failed.",0
|
||||
okt db " ... OK"
|
||||
linef db 13,10,0
|
||||
diskload db "Loading diskette: 00 %",8,8,8,8,0
|
||||
pros db "00"
|
||||
backspace2 db 8,8,0
|
||||
boot_dev db 0 ; 0=floppy, 1=hd
|
||||
start_msg db "Press [abcd] to change settings, press [Enter] to continue booting",13,10,0
|
||||
time_msg db " or wait "
|
||||
time_str db " 5 seconds"
|
||||
db " before automatical continuation",13,10,0
|
||||
current_cfg_msg db "Current settings:",13,10,0
|
||||
curvideo_msg db " [a] Videomode: ",0
|
||||
;bdev db "Load ramdisk from [1-floppy; 2-C:\kolibri.img (FAT32);"
|
||||
; db 13,10,186," "
|
||||
; db "3-use preloaded ram-image from kernel restart;"
|
||||
; db 13,10,186," "
|
||||
; db "4-create blank image]: ",0
|
||||
;probetext db 13,10,13,10,186," Use standart graphics mode? [1-yes, "
|
||||
; db "2-probe bios (Vesa 3.0)]: ",0
|
||||
;prnotfnd db "Fatal - Videomode not found.",0
|
||||
;btns db "Fatal - Can't determine color depth.",0
|
||||
;badsect db 13,10,186," Fatal - Bad sector. Replace floppy.",0
|
||||
;memmovefailed db 13,10,186," Fatal - Int 0x15 move failed.",0
|
||||
okt db " ... OK"
|
||||
linef db 13,10,0
|
||||
diskload db "Loading diskette: 00 %",8,8,8,8,0
|
||||
pros db "00"
|
||||
backspace2 db 8,8,0
|
||||
boot_dev db 0 ; 0=floppy, 1=hd
|
||||
;start_msg db "Press [abcd] to change settings, press [Enter] to continue booting",13,10,0
|
||||
;time_msg db " or wait "
|
||||
;time_str db " 5 seconds"
|
||||
; db " before automatical continuation",13,10,0
|
||||
;current_cfg_msg db "cfgmanager.printcfg reached",13,10,0
|
||||
;curvideo_msg db " [a] Videomode: ",0
|
||||
|
||||
;modes_msg dw mode4,mode1,mode2,mode3
|
||||
;modevesa20 db " with LFB",0
|
||||
;modevesa12 db ", VESA 1.2 Bnk",0
|
||||
mode0 db "320x200, EGA/CGA 256 colors",13,10,0
|
||||
mode9 db "640x480, VGA 16 colors",13,10,0
|
||||
|
||||
;probeno_msg db " (standard mode)",0
|
||||
;probeok_msg db " (check nonstandard modes)",0
|
||||
;dma_msg db " [b] Use DMA for HDD access:",0
|
||||
usebd_msg db " [b] Add disks visible by BIOS:",0
|
||||
on_msg db " on",13,10,0
|
||||
off_msg db " off",13,10,0
|
||||
;readonly_msg db " only for reading",13,10,0
|
||||
vrrm_msg db " [c] Use VRR:",0
|
||||
preboot_device_msg db " [d] Floppy image: ",0
|
||||
preboot_device_msgs dw 0,pdm1,pdm2,pdm3
|
||||
pdm1 db "real floppy",13,10,0
|
||||
pdm2 db "C:\kolibri.img (FAT32)",13,10,0
|
||||
pdm3 db "use already loaded image",13,10,0
|
||||
pdm4 db "create blank image",13,10,0
|
||||
loading_msg db "Loading KolibriOS...",0
|
||||
save_quest db "Remember current settings? [y/n]: ",0
|
||||
loader_block_error db "Bootloader data invalid, I cannot continue. Stopped.",0
|
||||
|
||||
_st db 186,' ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄ¿',13,10,0
|
||||
_r1 db 186,' ³ 320x200 EGA/CGA 256 colors ³ ³',13,10,0
|
||||
_r2 db 186,' ³ 640x480 VGA 16 colors ³ ³',13,10,0
|
||||
_rs db 186,' ³ ????x????@?? SVGA VESA ³ ³',13,10,0
|
||||
_bt db 186,' ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÙ',13,10,0
|
||||
|
||||
remark1 db "Default values were selected to match most of configurations, but not all.",0
|
||||
remark2 db "If you have CRT-monitor, enable VRR in the item [c].",0
|
||||
remark3 db "If the system does not boot, try to disable the item [b].",0
|
||||
remarks dw remark1, remark2, remark3
|
||||
num_remarks = 3
|
||||
loading_msg db "Loading KolibriOS...",0
|
||||
;save_quest db "Remember current settings? [y/n]: ",0
|
||||
loader_block_error db "Invalid boot data",0
|
||||
|
@ -8,69 +8,69 @@
|
||||
$Revision$
|
||||
|
||||
struc VBE_VGAInfo {
|
||||
.VESASignature dd ? ; char
|
||||
.VESAVersion dw ? ; short
|
||||
.OemStringPtr dd ? ; char *
|
||||
.Capabilities dd ? ; ulong
|
||||
.VideoModePtr dd ? ; ulong
|
||||
.TotalMemory dw ? ; short
|
||||
.VESASignature dd ? ; char
|
||||
.VESAVersion dw ? ; short
|
||||
.OemStringPtr dd ? ; char *
|
||||
.Capabilities dd ? ; ulong
|
||||
.VideoModePtr dd ? ; ulong
|
||||
.TotalMemory dw ? ; short
|
||||
; VBE 2.0+
|
||||
.OemSoftwareRev db ? ; short
|
||||
.OemVendorNamePtr dw ? ; char *
|
||||
.OemProductNamePtr dw ? ; char *
|
||||
.OemProductRevPtr dw ? ; char *
|
||||
.reserved rb 222 ; char
|
||||
.OemData rb 256 ; char
|
||||
.OemSoftwareRev db ? ; short
|
||||
.OemVendorNamePtr dw ? ; char *
|
||||
.OemProductNamePtr dw ? ; char *
|
||||
.OemProductRevPtr dw ? ; char *
|
||||
.reserved rb 222 ; char
|
||||
.OemData rb 256 ; char
|
||||
}
|
||||
|
||||
struc VBE_ModeInfo {
|
||||
.ModeAttributes dw ? ; short
|
||||
.WinAAttributes db ? ; char
|
||||
.WinBAttributes db ? ; char
|
||||
.WinGranularity dw ? ; short
|
||||
.WinSize dw ? ; short
|
||||
.WinASegment dw ? ; ushort
|
||||
.WinBSegment dw ? ; ushort
|
||||
.WinFuncPtr dd ? ; void *
|
||||
.BytesPerScanLine dw ? ; short
|
||||
.XRes dw ? ; short
|
||||
.YRes dw ? ; short
|
||||
.XCharSize db ? ; char
|
||||
.YCharSize db ? ; char
|
||||
.NumberOfPlanes db ? ; char
|
||||
.BitsPerPixel db ? ; char
|
||||
.NumberOfBanks db ? ; char
|
||||
.MemoryModel db ? ; char
|
||||
.BankSize db ? ; char
|
||||
.NumberOfImagePages db ? ; char
|
||||
.res1 db ? ; char
|
||||
.RedMaskSize db ? ; char
|
||||
.RedFieldPosition db ? ; char
|
||||
.GreenMaskSize db ? ; char
|
||||
.GreenFieldPosition db ? ; char
|
||||
.BlueMaskSize db ? ; char
|
||||
.BlueFieldPosition db ? ; char
|
||||
.RsvedMaskSize db ? ; char
|
||||
.RsvedFieldPosition db ? ; char
|
||||
.DirectColorModeInfo db ? ; char ; MISSED IN THIS TUTORIAL!! SEE ABOVE
|
||||
.ModeAttributes dw ? ; short
|
||||
.WinAAttributes db ? ; char
|
||||
.WinBAttributes db ? ; char
|
||||
.WinGranularity dw ? ; short
|
||||
.WinSize dw ? ; short
|
||||
.WinASegment dw ? ; ushort
|
||||
.WinBSegment dw ? ; ushort
|
||||
.WinFuncPtr dd ? ; void *
|
||||
.BytesPerScanLine dw ? ; short
|
||||
.XRes dw ? ; short
|
||||
.YRes dw ? ; short
|
||||
.XCharSize db ? ; char
|
||||
.YCharSize db ? ; char
|
||||
.NumberOfPlanes db ? ; char
|
||||
.BitsPerPixel db ? ; char
|
||||
.NumberOfBanks db ? ; char
|
||||
.MemoryModel db ? ; char
|
||||
.BankSize db ? ; char
|
||||
.NumberOfImagePages db ? ; char
|
||||
.res1 db ? ; char
|
||||
.RedMaskSize db ? ; char
|
||||
.RedFieldPosition db ? ; char
|
||||
.GreenMaskSize db ? ; char
|
||||
.GreenFieldPosition db ? ; char
|
||||
.BlueMaskSize db ? ; char
|
||||
.BlueFieldPosition db ? ; char
|
||||
.RsvedMaskSize db ? ; char
|
||||
.RsvedFieldPosition db ? ; char
|
||||
.DirectColorModeInfo db ? ; char ; MISSED IN THIS TUTORIAL!! SEE ABOVE
|
||||
; VBE 2.0+
|
||||
.PhysBasePtr dd ? ; ulong
|
||||
.OffScreenMemOffset dd ? ; ulong
|
||||
.OffScreenMemSize dw ? ; short
|
||||
.PhysBasePtr dd ? ; ulong
|
||||
.OffScreenMemOffset dd ? ; ulong
|
||||
.OffScreenMemSize dw ? ; short
|
||||
; VBE 3.0+
|
||||
.LinbytesPerScanLine dw ? ; short
|
||||
.BankNumberOfImagePages db ? ; char
|
||||
.LinNumberOfImagePages db ? ; char
|
||||
.LinRedMaskSize db ? ; char
|
||||
.LinRedFieldPosition db ? ; char
|
||||
.LingreenMaskSize db ? ; char
|
||||
.LinGreenFieldPosition db ? ; char
|
||||
.LinBlueMaskSize db ? ; char
|
||||
.LinBlueFieldPosition db ? ; char
|
||||
.LinRsvdMaskSize db ? ; char
|
||||
.LinRsvdFieldPosition db ? ; char
|
||||
.MaxPixelClock dd ? ; ulong
|
||||
.res2 rb 190 ; char
|
||||
.LinbytesPerScanLine dw ? ; short
|
||||
.BankNumberOfImagePages db ? ; char
|
||||
.LinNumberOfImagePages db ? ; char
|
||||
.LinRedMaskSize db ? ; char
|
||||
.LinRedFieldPosition db ? ; char
|
||||
.LingreenMaskSize db ? ; char
|
||||
.LinGreenFieldPosition db ? ; char
|
||||
.LinBlueMaskSize db ? ; char
|
||||
.LinBlueFieldPosition db ? ; char
|
||||
.LinRsvdMaskSize db ? ; char
|
||||
.LinRsvdFieldPosition db ? ; char
|
||||
.MaxPixelClock dd ? ; ulong
|
||||
.res2 rb 190 ; char
|
||||
}
|
||||
|
||||
virtual at $A000
|
||||
@ -78,7 +78,7 @@ virtual at $A000
|
||||
mi VBE_ModeInfo
|
||||
modes_table:
|
||||
end virtual
|
||||
cursor_pos dw 0 ;âðåìåííîå õðàíåíèå êóðñîðà.
|
||||
cursor_pos dw 0 ;âðåìåííîå õðàíåíèå êóðñîðà.
|
||||
home_cursor dw 0 ;current shows rows a table
|
||||
end_cursor dw 0 ;end of position current shows rows a table
|
||||
scroll_start dw 0 ;start position of scroll bar
|
||||
@ -87,545 +87,278 @@ long_v_table equ 9 ;long of visible video table
|
||||
size_of_step equ 10
|
||||
scroll_area_size equ (long_v_table-2)
|
||||
int2str:
|
||||
dec bl
|
||||
jz @f
|
||||
xor edx,edx
|
||||
div ecx
|
||||
push edx
|
||||
call int2str
|
||||
pop eax
|
||||
@@: or al,0x30
|
||||
mov [ds:di],al
|
||||
inc di
|
||||
ret
|
||||
dec bl
|
||||
jz @f
|
||||
xor edx,edx
|
||||
div ecx
|
||||
push edx
|
||||
call int2str
|
||||
pop eax
|
||||
@@: or al,0x30
|
||||
mov [ds:di],al
|
||||
inc di
|
||||
ret
|
||||
|
||||
int2strnz:
|
||||
cmp eax,ecx
|
||||
jb @f
|
||||
xor edx,edx
|
||||
div ecx
|
||||
push edx
|
||||
call int2strnz
|
||||
pop eax
|
||||
@@: or al,0x30
|
||||
mov [es:di],al
|
||||
inc di
|
||||
ret
|
||||
|
||||
;-------------------------------------------------------
|
||||
;Write message about incorrect v_mode and write message about jmp on swith v_mode
|
||||
v_mode_error:
|
||||
_setcursor 19,2
|
||||
mov si, fatalsel
|
||||
call printplain
|
||||
_setcursor 20,2
|
||||
mov si,pres_key
|
||||
call printplain
|
||||
xor eax,eax
|
||||
int 16h
|
||||
jmp cfgmanager.d
|
||||
;-------------------------------------------------------
|
||||
;
|
||||
|
||||
cmp eax,ecx
|
||||
jb @f
|
||||
xor edx,edx
|
||||
div ecx
|
||||
push edx
|
||||
call int2strnz
|
||||
pop eax
|
||||
@@: or al,0x30
|
||||
mov [es:di],al
|
||||
inc di
|
||||
ret
|
||||
|
||||
|
||||
;-------------------------------------------------------
|
||||
print_vesa_info:
|
||||
_setcursor 5,2
|
||||
_setcursor 5,2
|
||||
|
||||
mov [es:vi.VESASignature],'VBE2'
|
||||
mov ax,0x4F00
|
||||
mov di,vi ;0xa000
|
||||
int 0x10
|
||||
or ah,ah
|
||||
jz @f
|
||||
mov [es:vi.VESASignature],'VESA'
|
||||
mov ax,$4F00
|
||||
mov di,vi
|
||||
int 0x10
|
||||
or ah,ah
|
||||
jnz .exit
|
||||
mov [es:vi.VESASignature],'VBE2'
|
||||
mov ax,0x4F00
|
||||
mov di,vi ;0xa000
|
||||
int 0x10
|
||||
or ah,ah
|
||||
jz @f
|
||||
mov [es:vi.VESASignature],'VESA'
|
||||
mov ax,$4F00
|
||||
mov di,vi
|
||||
int 0x10
|
||||
or ah,ah
|
||||
jnz $
|
||||
@@:
|
||||
cmp [es:vi.VESASignature],'VESA'
|
||||
jne .exit
|
||||
cmp [es:vi.VESAVersion],0x0100
|
||||
jb .exit
|
||||
jmp .vesaok2
|
||||
|
||||
.exit:
|
||||
mov si,novesa
|
||||
call printplain
|
||||
ret
|
||||
cmp [es:vi.VESASignature],'VESA'
|
||||
jne $
|
||||
cmp [es:vi.VESAVersion],0x0100
|
||||
jb $
|
||||
|
||||
.vesaok2:
|
||||
mov ax,[es:vi.VESAVersion]
|
||||
add ax,'00'
|
||||
mov ax,[es:vi.VESAVersion]
|
||||
add ax,'00'
|
||||
|
||||
mov [s_vesa.ver], ah
|
||||
mov [s_vesa.ver+2], al
|
||||
mov si,s_vesa
|
||||
call printplain
|
||||
mov [s_vesa.ver], ah
|
||||
mov [s_vesa.ver+2], al
|
||||
mov si,s_vesa
|
||||
call printplain
|
||||
|
||||
_setcursor 4,2
|
||||
mov si,word[es:vi.OemStringPtr]
|
||||
mov di,si
|
||||
_setcursor 4,2
|
||||
mov si,word[es:vi.OemStringPtr]
|
||||
mov di,si
|
||||
|
||||
push ds
|
||||
mov ds,word[es:vi.OemStringPtr+2]
|
||||
call printplain
|
||||
pop ds
|
||||
push ds
|
||||
mov ds,word[es:vi.OemStringPtr+2]
|
||||
call printplain
|
||||
pop ds
|
||||
|
||||
ret
|
||||
ret
|
||||
;-----------------------------------------------------------------------------
|
||||
|
||||
calc_vmodes_table:
|
||||
pushad
|
||||
pushad
|
||||
|
||||
; push 0
|
||||
; pop es
|
||||
|
||||
lfs si, [es:vi.VideoModePtr]
|
||||
lfs si, [es:vi.VideoModePtr]
|
||||
|
||||
mov bx,modes_table
|
||||
mov bx,modes_table
|
||||
|
||||
.next_mode:
|
||||
mov cx,word [fs:si] ; mode number
|
||||
cmp cx,-1
|
||||
je .modes_ok.2
|
||||
mov cx,word [fs:si] ; mode number
|
||||
cmp cx,-1
|
||||
je .modes_ok.2
|
||||
|
||||
mov ax,0x4F01
|
||||
mov di,mi
|
||||
int 0x10
|
||||
mov ax,0x4F01
|
||||
mov di,mi
|
||||
int 0x10
|
||||
|
||||
or ah,ah
|
||||
jnz .modes_ok.2 ;vesa_info.exit
|
||||
or ah,ah
|
||||
jnz .modes_ok.2 ;vesa_info.exit
|
||||
|
||||
test [es:mi.ModeAttributes],00000001b ;videomode support ?
|
||||
jz @f
|
||||
test [es:mi.ModeAttributes],00010000b ;picture ?
|
||||
jz @f
|
||||
test [es:mi.ModeAttributes],10000000b ;LFB ?
|
||||
jz @f
|
||||
test [es:mi.ModeAttributes],00000001b ;videomode support ?
|
||||
jz @f
|
||||
test [es:mi.ModeAttributes],00010000b ;picture ?
|
||||
jz @f
|
||||
test [es:mi.ModeAttributes],10000000b ;LFB ?
|
||||
jz @f
|
||||
|
||||
cmp [es:mi.BitsPerPixel], 32 ;to show only 32 bpp videomodes
|
||||
jb @f
|
||||
cmp [es:mi.BitsPerPixel], 32 ;to show only 32 bpp videomodes
|
||||
jb @f
|
||||
|
||||
.l0:
|
||||
cmp [es:mi.XRes],800 ; only 800x600 and higher
|
||||
jb @f
|
||||
cmp [es:mi.XRes],800 ; only 800x600 and higher
|
||||
jb @f
|
||||
|
||||
mov ax,[es:mi.XRes]
|
||||
mov [es:bx+0],ax ; +0[2] : resolution X
|
||||
mov ax,[es:mi.YRes]
|
||||
mov [es:bx+2],ax ; +2[2] : resolution Y
|
||||
mov ax,[es:mi.ModeAttributes]
|
||||
mov [es:bx+4],ax ; +4[2] : attributes
|
||||
mov ax,[es:mi.XRes]
|
||||
mov [es:bx+0],ax ; +0[2] : resolution X
|
||||
mov ax,[es:mi.YRes]
|
||||
mov [es:bx+2],ax ; +2[2] : resolution Y
|
||||
mov ax,[es:mi.ModeAttributes]
|
||||
mov [es:bx+4],ax ; +4[2] : attributes
|
||||
|
||||
;<< cmp [s_vesa.ver],'2'
|
||||
;<< jb .lp1
|
||||
|
||||
or cx,0x4000 ; use LFB <<< ?
|
||||
.lp1: mov [es:bx+6],cx ; +6 : mode number
|
||||
movzx ax,byte [es:mi.BitsPerPixel]
|
||||
mov word [es:bx+8],ax ; +8 : bits per pixel << ?
|
||||
add bx,size_of_step ; size of record
|
||||
or cx,0x4000 ; use LFB <<< ?
|
||||
.lp1: mov [es:bx+6],cx ; +6 : mode number
|
||||
movzx ax,byte [es:mi.BitsPerPixel]
|
||||
mov word [es:bx+8],ax ; +8 : bits per pixel << ?
|
||||
add bx,size_of_step ; size of record
|
||||
|
||||
@@:
|
||||
add si,2
|
||||
jmp .next_mode
|
||||
add si,2
|
||||
jmp .next_mode
|
||||
|
||||
.modes_ok.2:
|
||||
|
||||
mov word[es:bx],-1 ;end video table
|
||||
mov word[end_cursor],bx ;save end cursor position
|
||||
popad
|
||||
ret
|
||||
mov word[es:bx],-1 ;end video table
|
||||
mov word[end_cursor],bx ;save end cursor position
|
||||
popad
|
||||
ret
|
||||
|
||||
;-----------------------------------------------------------------------------
|
||||
|
||||
;draw_current_vmode:
|
||||
; push 0
|
||||
; pop es
|
||||
|
||||
; mov si,word [cursor_pos]
|
||||
|
||||
; cmp word [es:si+6],0x12
|
||||
; je .no_vesa_0x12
|
||||
|
||||
; cmp word [es:si+6],0x13
|
||||
; je .no_vesa_0x13
|
||||
|
||||
; mov di,loader_block_error
|
||||
; movzx eax,word[es:si+0]
|
||||
; mov ecx,10
|
||||
; call int2strnz
|
||||
; mov byte[es:di],'x'
|
||||
; inc di
|
||||
; movzx eax,word[es:si+2]
|
||||
; call int2strnz
|
||||
; mov byte[es:di],'x'
|
||||
; inc di
|
||||
; movzx eax,word[es:si+8]
|
||||
; call int2strnz
|
||||
; mov dword[es:di],0x00000d0a
|
||||
; mov si,loader_block_error
|
||||
; push ds
|
||||
; push es
|
||||
; pop ds
|
||||
; call printplain
|
||||
; pop ds
|
||||
; ret
|
||||
;.no_vesa_0x13:
|
||||
; mov si,mode0
|
||||
; jmp .print
|
||||
;.no_vesa_0x12:
|
||||
; mov si,mode9
|
||||
;.print:
|
||||
; call printplain
|
||||
; ret
|
||||
;-----------------------------------------------------------------------------
|
||||
check_first_parm:
|
||||
mov si,word [preboot_graph]
|
||||
test si,si
|
||||
jnz .no_zero ;if no zero
|
||||
mov si,word [preboot_graph]
|
||||
test si,si
|
||||
jnz .no_zero ;if no zero
|
||||
.zerro:
|
||||
; mov ax,modes_table
|
||||
; mov word [cursor_pos],ax
|
||||
; mov word [home_cursor],ax
|
||||
; mov word [preboot_graph],ax
|
||||
;SET default video of mode first probe will fined a move of work 1024x768@32
|
||||
|
||||
mov ax,1024
|
||||
mov bx,768
|
||||
mov si,modes_table
|
||||
call .loops
|
||||
test ax,ax
|
||||
jz .ok_found_mode
|
||||
mov ax,1024
|
||||
mov bx,768
|
||||
mov si,modes_table
|
||||
call .loops
|
||||
test ax,ax
|
||||
jz .ok_found_mode
|
||||
|
||||
mov si,modes_table
|
||||
jmp .ok_found_mode
|
||||
mov si,modes_table
|
||||
jmp .ok_found_mode
|
||||
|
||||
.no_zero:
|
||||
mov bp,word [number_vm]
|
||||
cmp bp,word [es:si+6]
|
||||
jz .ok_found_mode
|
||||
mov ax,word [x_save]
|
||||
mov bx,word [y_save]
|
||||
mov si,modes_table
|
||||
call .loops
|
||||
test ax,ax
|
||||
jz .ok_found_mode
|
||||
cmp bp,word [es:si+6]
|
||||
jz .ok_found_mode
|
||||
mov ax,word [x_save]
|
||||
mov bx,word [y_save]
|
||||
mov si,modes_table
|
||||
call .loops
|
||||
test ax,ax
|
||||
jz .ok_found_mode
|
||||
|
||||
mov si,modes_table
|
||||
|
||||
.ok_found_mode:
|
||||
mov word [home_cursor],si
|
||||
mov word [preboot_graph],si
|
||||
mov ax,si
|
||||
mov word [home_cursor],si
|
||||
mov word [preboot_graph],si
|
||||
mov ax,si
|
||||
|
||||
mov ecx,long_v_table
|
||||
mov ecx,long_v_table
|
||||
|
||||
.loop: add ax,size_of_step
|
||||
cmp ax,word [end_cursor]
|
||||
jae .next_step
|
||||
loop .loop
|
||||
.loop: add ax,size_of_step
|
||||
cmp ax,word [end_cursor]
|
||||
jae .next_step
|
||||
loop .loop
|
||||
.next_step:
|
||||
sub ax,size_of_step*long_v_table
|
||||
cmp ax,modes_table
|
||||
jae @f
|
||||
mov ax,modes_table
|
||||
sub ax,size_of_step*long_v_table
|
||||
cmp ax,modes_table
|
||||
jae @f
|
||||
mov ax,modes_table
|
||||
@@:
|
||||
|
||||
mov word [home_cursor],ax
|
||||
mov si,[preboot_graph]
|
||||
mov word [cursor_pos],si
|
||||
mov word [home_cursor],ax
|
||||
mov si,[preboot_graph]
|
||||
mov word [cursor_pos],si
|
||||
|
||||
push word [es:si]
|
||||
pop word [x_save]
|
||||
push word [es:si+2]
|
||||
pop word [y_save]
|
||||
push word [es:si+6]
|
||||
pop word [number_vm]
|
||||
push word [es:si]
|
||||
pop word [x_save]
|
||||
push word [es:si+2]
|
||||
pop word [y_save]
|
||||
push word [es:si+6]
|
||||
pop word [number_vm]
|
||||
|
||||
ret
|
||||
ret
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
.loops:
|
||||
cmp ax,word [es:si]
|
||||
jne .next
|
||||
cmp bx,word [es:si+2]
|
||||
jne .next
|
||||
je .ok
|
||||
.next: add si,size_of_step
|
||||
cmp word [es:si],-1
|
||||
je .exit
|
||||
jmp .loops
|
||||
.ok: xor ax,ax
|
||||
cmp ax,word [es:si]
|
||||
jne .next
|
||||
cmp bx,word [es:si+2]
|
||||
jne .next
|
||||
je .ok
|
||||
.next: add si,size_of_step
|
||||
cmp word [es:si],-1
|
||||
je .exit
|
||||
jmp .loops
|
||||
.ok: xor ax,ax
|
||||
ret
|
||||
.exit: or ax,-1
|
||||
.exit: or ax,-1
|
||||
ret
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------------
|
||||
|
||||
;default_vmode:
|
||||
|
||||
;-----------------------------------------------------------------------------
|
||||
draw_vmodes_table:
|
||||
; _setcursor 9, 2
|
||||
; mov si,gr_mode
|
||||
; call printplain
|
||||
|
||||
; mov si,_st
|
||||
; call printplain
|
||||
|
||||
; push word [cursor_pos]
|
||||
; pop ax
|
||||
; push word [home_cursor]
|
||||
; pop si
|
||||
; mov cx,si
|
||||
|
||||
; cmp ax,si
|
||||
; je .ok
|
||||
; jb .low
|
||||
|
||||
|
||||
; add cx,size_of_step*long_v_table
|
||||
|
||||
; cmp ax,cx
|
||||
; jb .ok
|
||||
|
||||
; sub cx,size_of_step*long_v_table
|
||||
; add cx,size_of_step
|
||||
; cmp cx,word[end_cursor]
|
||||
; jae .ok
|
||||
; add si,size_of_step
|
||||
; push si
|
||||
; pop word [home_cursor]
|
||||
; jmp .ok
|
||||
|
||||
|
||||
;.low: sub cx,size_of_step
|
||||
; cmp cx,modes_table
|
||||
; jb .ok
|
||||
; push cx
|
||||
; push cx
|
||||
; pop word [home_cursor]
|
||||
; pop si
|
||||
|
||||
|
||||
;.ok:
|
||||
; calculate scroll position
|
||||
; push si
|
||||
; mov ax, [end_cursor]
|
||||
; sub ax, modes_table
|
||||
; mov bx, size_of_step
|
||||
; cwd
|
||||
; div bx
|
||||
; mov si, ax ; si = size of list
|
||||
; mov ax, [home_cursor]
|
||||
; sub ax, modes_table
|
||||
; cwd
|
||||
; div bx
|
||||
; mov di, ax
|
||||
; mov ax, scroll_area_size*long_v_table
|
||||
; cwd
|
||||
; div si
|
||||
; test ax, ax
|
||||
; jnz @f
|
||||
; inc ax
|
||||
;@@:
|
||||
; cmp al, scroll_area_size
|
||||
; jb @f
|
||||
; mov al, scroll_area_size
|
||||
;@@:
|
||||
; mov cx, ax
|
||||
; cx = scroll height
|
||||
; calculate scroll pos
|
||||
; xor bx, bx ; initialize scroll pos
|
||||
; sub al, scroll_area_size+1
|
||||
; neg al
|
||||
; sub si, long_v_table-1
|
||||
; jbe @f
|
||||
; mul di
|
||||
; div si
|
||||
; mov bx, ax
|
||||
;@@:
|
||||
; inc bx
|
||||
; imul ax, bx, size_of_step
|
||||
; add ax, [home_cursor]
|
||||
; mov [scroll_start], ax
|
||||
; imul cx, size_of_step
|
||||
; add ax, cx
|
||||
; mov [scroll_end], ax
|
||||
; pop si
|
||||
; mov bp,long_v_table ;show rows
|
||||
;.@@_next_bit:
|
||||
;clear cursor
|
||||
; mov ax,' '
|
||||
; mov word[ds:_r1+21],ax
|
||||
; mov word[ds:_r1+50],ax
|
||||
|
||||
; mov word[ds:_r2+21],ax
|
||||
; mov word[ds:_r2+45],ax
|
||||
|
||||
; mov word[ds:_rs+21],ax
|
||||
; mov word[ds:_rs+46],ax
|
||||
; draw string
|
||||
; cmp word [es:si+6],0x12
|
||||
; je .show_0x12
|
||||
; cmp word [es:si+6],0x13
|
||||
; je .show_0x13
|
||||
|
||||
; movzx eax,word[es:si]
|
||||
; cmp ax,-1
|
||||
; je .@@_end
|
||||
; mov di,_rs+23
|
||||
; mov ecx,10
|
||||
; mov bl,4
|
||||
; call int2str
|
||||
; movzx eax,word[es:si+2]
|
||||
; inc di
|
||||
; mov bl,4
|
||||
; call int2str
|
||||
|
||||
; movzx eax,word[es:si+8]
|
||||
; inc di
|
||||
; mov bl,2
|
||||
; call int2str
|
||||
|
||||
; cmp si, word [cursor_pos]
|
||||
; jne .next
|
||||
;draw cursor
|
||||
; mov word[ds:_rs+21],'>>'
|
||||
; mov word[ds:_rs+46],'<<'
|
||||
|
||||
|
||||
|
||||
;.next:
|
||||
; push si
|
||||
; mov si,_rs
|
||||
;.@@_sh:
|
||||
; add to the string pseudographics for scrollbar
|
||||
; pop bx
|
||||
; push bx
|
||||
; mov byte [si+53], ' '
|
||||
; cmp bx, [scroll_start]
|
||||
; jb @f
|
||||
; cmp bx, [scroll_end]
|
||||
; jae @f
|
||||
; mov byte [si+53], 0xDB ; filled bar
|
||||
;@@:
|
||||
; push bx
|
||||
; add bx, size_of_step
|
||||
; cmp bx, [end_cursor]
|
||||
; jnz @f
|
||||
; mov byte [si+53], 31 ; 'down arrow' symbol
|
||||
;@@:
|
||||
; sub bx, [home_cursor]
|
||||
; cmp bx, size_of_step*long_v_table
|
||||
; jnz @f
|
||||
; mov byte [si+53], 31 ; 'down arrow' symbol
|
||||
;@@:
|
||||
; pop bx
|
||||
; cmp bx, [home_cursor]
|
||||
; jnz @f
|
||||
; mov byte [si+53], 30 ; 'up arrow' symbol
|
||||
;@@:
|
||||
; call printplain
|
||||
; pop si
|
||||
; add si,size_of_step
|
||||
|
||||
; dec bp
|
||||
; jnz .@@_next_bit
|
||||
|
||||
;.@@_end:
|
||||
; mov si,_bt
|
||||
; call printplain
|
||||
ret
|
||||
;.show_0x13:
|
||||
; push si
|
||||
|
||||
; cmp si, word [cursor_pos]
|
||||
; jne @f
|
||||
; mov word[ds:_r1+21],'>>'
|
||||
; mov word[ds:_r1+50],'<<'
|
||||
;@@:
|
||||
; mov si,_r1
|
||||
; jmp .@@_sh
|
||||
;.show_0x12:
|
||||
; push si
|
||||
; cmp si, word [cursor_pos]
|
||||
; jne @f
|
||||
|
||||
; mov word[ds:_r2+21],'>>'
|
||||
; mov word[ds:_r2+45],'<<'
|
||||
;@@:
|
||||
; mov si,_r2
|
||||
; jmp .@@_sh
|
||||
|
||||
;-----------------------------------------------------------------------------
|
||||
;Clear area of current video page (0xb800)
|
||||
clear_vmodes_table:
|
||||
pusha
|
||||
;clear_vmodes_table:
|
||||
; pusha
|
||||
; draw frames
|
||||
push es
|
||||
push 0xb800
|
||||
pop es
|
||||
mov di,1444
|
||||
xor ax,ax
|
||||
mov ah, 1*16+15
|
||||
mov cx,70
|
||||
mov bp,12
|
||||
.loop_start:
|
||||
rep stosw
|
||||
mov cx,70
|
||||
add di,20
|
||||
dec bp
|
||||
jns .loop_start
|
||||
pop es
|
||||
popa
|
||||
ret
|
||||
; push es
|
||||
; push 0xb800
|
||||
; pop es
|
||||
; mov di,1444
|
||||
; xor ax,ax
|
||||
; mov ah, 1*16+15
|
||||
; mov cx,70
|
||||
; mov bp,12
|
||||
;.loop_start:
|
||||
; rep stosw
|
||||
; mov cx,70
|
||||
; add di,20
|
||||
; dec bp
|
||||
; jns .loop_start
|
||||
; pop es
|
||||
; popa
|
||||
; ret
|
||||
|
||||
;-----------------------------------------------------------------------------
|
||||
|
||||
set_vmode:
|
||||
push 0 ;0;x1000
|
||||
pop es
|
||||
push 0 ;0;x1000
|
||||
pop es
|
||||
|
||||
mov si,word [preboot_graph] ;[preboot_graph]
|
||||
mov cx,word [es:si+6] ; number of mode
|
||||
mov si,word [preboot_graph] ;[preboot_graph]
|
||||
mov cx,word [es:si+6] ; number of mode
|
||||
|
||||
|
||||
mov ax,word [es:si+0] ; resolution X
|
||||
mov bx,word [es:si+2] ; resolution Y
|
||||
mov ax,word [es:si+0] ; resolution X
|
||||
mov bx,word [es:si+2] ; resolution Y
|
||||
|
||||
|
||||
mov word [es:0x900A],ax ; resolution X
|
||||
mov word [es:0x900C],bx ; resolution Y
|
||||
mov word [es:0x9008],cx ; number of mode
|
||||
mov word [es:0x900A],ax ; resolution X
|
||||
mov word [es:0x900C],bx ; resolution Y
|
||||
mov word [es:0x9008],cx ; number of mode
|
||||
|
||||
|
||||
; VESA 2 and Vesa 3 only
|
||||
|
||||
mov ax,0x4f01
|
||||
and cx,0xfff
|
||||
mov di,mi;0xa000
|
||||
int 0x10
|
||||
; LFB
|
||||
mov eax,[es:mi.PhysBasePtr] ;di+0x28]
|
||||
mov [es:0x9018],eax
|
||||
; ---- vbe voodoo
|
||||
BytesPerLine equ 0x10
|
||||
mov ax, [es:di+BytesPerLine]
|
||||
mov [es:0x9001], ax
|
||||
; BPP
|
||||
mov ax,0x4f01
|
||||
and cx,0xfff
|
||||
mov di,mi;0xa000
|
||||
int 0x10
|
||||
; LFB
|
||||
mov eax,[es:mi.PhysBasePtr] ;di+0x28]
|
||||
mov [es:0x9018],eax
|
||||
; ---- vbe voodoo
|
||||
BytesPerLine equ 0x10
|
||||
mov ax, [es:di+BytesPerLine]
|
||||
mov [es:0x9001], ax
|
||||
; BPP
|
||||
.l0:
|
||||
mov al, byte [es:di+0x19]
|
||||
mov [es:0x9000], al
|
||||
jmp .exit
|
||||
mov al, byte [es:di+0x19]
|
||||
mov [es:0x9000], al
|
||||
jmp .exit
|
||||
|
||||
.exit:
|
||||
ret
|
||||
ret
|
||||
|
||||
|
||||
;=============================================================================
|
||||
|
Loading…
Reference in New Issue
Block a user