/kernel/branches/Kolibri-A/trunk/boot/bootcode.inc |
---|
47,24 → 47,6 |
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 |
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,19 → 196,15 |
; 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: |
push 0 |
336,7 → 319,7 |
; 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 |
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 |
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 |
call printplain |
_setcursor 15,0 |
.load: |
; \end{diamond}[02.12.2005] |
; ASK GRAPHICS MODE |
870,8 → 551,8 |
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 |
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 |
/kernel/branches/Kolibri-A/trunk/boot/booteng.inc |
---|
24,42 → 24,30 |
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 |
;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 |
;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 |
66,45 → 54,13 |
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 |
;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 |
;save_quest db "Remember current settings? [y/n]: ",0 |
loader_block_error db "Invalid boot data",0 |
/kernel/branches/Kolibri-A/trunk/boot/bootvesa.inc |
---|
112,23 → 112,7 |
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 |
;------------------------------------------------------- |
; |
;------------------------------------------------------- |
print_vesa_info: |
_setcursor 5,2 |
144,19 → 128,13 |
mov di,vi |
int 0x10 |
or ah,ah |
jnz .exit |
jnz $ |
@@: |
cmp [es:vi.VESASignature],'VESA' |
jne .exit |
jne $ |
cmp [es:vi.VESAVersion],0x0100 |
jb .exit |
jmp .vesaok2 |
jb $ |
.exit: |
mov si,novesa |
call printplain |
ret |
.vesaok2: |
mov ax,[es:vi.VESAVersion] |
add ax,'00' |
241,59 → 219,11 |
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 |
.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 |
365,226 → 295,29 |
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 |
;----------------------------------------------------------------------------- |