diff --git a/kernel/branches/Kolibri-A/trunk/boot/bootcode.inc b/kernel/branches/Kolibri-A/trunk/boot/bootcode.inc index 2fca79582d..2d156811cb 100644 --- a/kernel/branches/Kolibri-A/trunk/boot/bootcode.inc +++ b/kernel/branches/Kolibri-A/trunk/boot/bootcode.inc @@ -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 diff --git a/kernel/branches/Kolibri-A/trunk/boot/booteng.inc b/kernel/branches/Kolibri-A/trunk/boot/booteng.inc index 4c14a2d2e3..791e16c23a 100644 --- a/kernel/branches/Kolibri-A/trunk/boot/booteng.inc +++ b/kernel/branches/Kolibri-A/trunk/boot/booteng.inc @@ -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 diff --git a/kernel/branches/Kolibri-A/trunk/boot/bootvesa.inc b/kernel/branches/Kolibri-A/trunk/boot/bootvesa.inc index ec8e6aa124..f2f61fffd8 100644 --- a/kernel/branches/Kolibri-A/trunk/boot/bootvesa.inc +++ b/kernel/branches/Kolibri-A/trunk/boot/bootvesa.inc @@ -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 ax,word [es:si+0] ; resolution X - mov bx,word [es:si+2] ; resolution Y + mov si,word [preboot_graph] ;[preboot_graph] + mov cx,word [es:si+6] ; 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 + 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 ; 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 ;=============================================================================