From c5f6557ef537f1e9806c568b945aa97990c0af30 Mon Sep 17 00:00:00 2001 From: Yogev Ezra Date: Tue, 8 Oct 2013 22:35:49 +0000 Subject: [PATCH] Allow pressing ESC in boot screen to cancel selection without making a choice. Add more information on which options to choose and link to http://board.kolibrios.org to report bugs. git-svn-id: svn://kolibrios.org@3989 a494cfbc-eb01-0410-851d-a64ba20cac60 --- kernel/trunk/boot/bootcode.inc | 73 +++++++++++++++++----------------- kernel/trunk/boot/booten.inc | 15 +++---- kernel/trunk/boot/bootet.inc | 15 +++---- kernel/trunk/boot/bootge.inc | 16 ++++---- kernel/trunk/boot/bootru.inc | 15 +++---- kernel/trunk/boot/bootsp.inc | 15 ++++--- 6 files changed, 76 insertions(+), 73 deletions(-) diff --git a/kernel/trunk/boot/bootcode.inc b/kernel/trunk/boot/bootcode.inc index e03d9b4417..4ef1315dc4 100644 --- a/kernel/trunk/boot/bootcode.inc +++ b/kernel/trunk/boot/bootcode.inc @@ -51,18 +51,20 @@ getkey: ; Use BIOS INT 16h to read a key from the keyboa ; 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 ; If 'int 16h' is called with 'ah' equal to zero, the BIOS will not return control - int 16h ; to the caller until a key is available in the system type ahead buffer. On return, - cmp al, bl ; 'al' contains the ASCII code for the key read from the buffer and 'ah' contains - jb getkey ; the keyboard scan code. Here we compare 'al' with the range of accepted characters. - cmp al, bh ; If the key pressed is not in the range, continue waiting for another key. - ja getkey - push ax ; If the pressed key is in the accepted range, save it on the stack and echo to screen. + mov ah, 0 ; If 'int 16h' is called with 'ah' equal to zero, the BIOS will not return control to the caller + int 16h ; until a key is available in the system type ahead buffer. On return, 'al' contains the ASCII + cmp al, 27 ; code for the key read from the buffer and 'ah' contains the keyboard scan code. (27=>ESC) + jz @f ; If ESC is pressed, return (user doesn't want to change any value). + cmp al, bl ; Compare 'al' (ASCII code of key pressed) with 'bl' (lowest accepted char from the range). + jb getkey ; ASCII code is below lowest accepted value => continue waiting for another key. + cmp al, bh ; Compare 'al' (ASCII code of key pressed) with 'bh' (highest accepted char from the range). + ja getkey ; ASCII code is above highest accepted value => continue waiting for another key. + push ax ; If the pressed key is in the accepted range, save it on the stack and echo to screen. call putchar pop ax - and ax, 0Fh ; ASCII code for '0' is 48 (110000b). 0F4=1111b. (110000b AND 1111b) = 0 - jnz @f ; So if key '0' was entered, return 10 in 'ax' - mov al, 10 + and ax, 0Fh ; Convert ASCII code to number: '1'->1, '2'->2, etc. 0Fh=1111b. + jnz @f ; ASCII code for '0' is 48 (110000b). (110000b AND 1111b) = 0 + mov al, 10 ; So if key '0' was entered, return 10 in 'ax' @@: ret @@ -79,6 +81,18 @@ macro _setcursor row,column call setcursor } +macro _ask_question question,range,variable_to_set +{ + _setcursor 16,0 + mov si, question ; Print the question + call print + mov bx, range ; range accepted for answer + call getkey + cmp al, 27 ; If ESC was pressed, do not change the value + jz .esc_pressed + mov [variable_to_set], al +} + boot_read_floppy: push si xor si, si @@ -775,23 +789,21 @@ end if cmp al, 'e' ; select boot origin jnz .show_remarks ; e) preboot_device = from where to boot? - _setcursor 16,0 - mov si, bdev - call print if defined extended_primary_loader - mov bx, '12' ; range accepted for answer: 1-2 + _ask_question bdev,'12',preboot_device ; range accepted for answer: 1-2 else - mov bx, '14' ; range accepted for answer: 1-4 -end if - call getkey - mov [preboot_device], al + _ask_question bdev,'14',preboot_device ; range accepted for answer: 1-4 +end if _setcursor 14,0 + .d: if ~ defined extended_primary_loader mov [.bSettingsChanged], 1 end if +.esc_pressed: call clear_vmodes_table ;clear vmodes_table jmp .printcfg + .change_a: call clear_vmodes_table ;clear vmodes_table .loops: @@ -803,6 +815,9 @@ end if mov si, word [cursor_pos] + cmp al, 27 ; If ESC was pressed, do not change the value + jz .esc_pressed ; Just exit the resolution selection box + cmp ah, 0x48;x,0x48E0 ; up jne .down cmp si, modes_table @@ -873,17 +888,13 @@ end if jmp .d .change_b: ; b) preboot_biosdisk = use BIOS disks through V86 emulation? - _setcursor 16,0 +; _setcursor 16,0 ; mov si, ask_dma // (earlier was: preboot_dma = use DMA access?) ; call print ; mov bx, '13' ; range accepted for answer: 1-3 ; call getkey ; mov [preboot_dma], al - mov si, ask_bd - call print - mov bx, '12' ; range accepted for answer: 1-2 - call getkey - mov [preboot_biosdisk], al + _ask_question ask_bd,'12',preboot_biosdisk ; range accepted for answer: 1-2 _setcursor 11,0 jmp .d ;.change_c: ; // VRR is an obsolete functionality, used only with CRT monitors @@ -896,21 +907,11 @@ end if ; _setcursor 12,0 ; jmp .d .change_c: ; c) preboot_debug = duplicates kernel debug output to the screen - _setcursor 16,0 - mov si, ask_debug - call print - mov bx, '12' ; range accepted for answer: 1-2 - call getkey - mov [preboot_debug], al + _ask_question ask_debug,'12',preboot_debug ; range accepted for answer: 1-2 _setcursor 12,0 jmp .d .change_d: ; d) preboot_launcher = start the first app (right now it's LAUNCHER) after kernel is loaded? - _setcursor 16,0 - mov si, ask_launcher - call print - mov bx, '12' ; range accepted for answer: 1-2 - call getkey - mov [preboot_launcher], al + _ask_question ask_launcher,'12',preboot_launcher ; range accepted for answer: 1-2 _setcursor 13,0 jmp .d ;;;;;;;;;;;;;;;;;;;;;;;;;;;; diff --git a/kernel/trunk/boot/booten.inc b/kernel/trunk/boot/booten.inc index cdb07212e2..c299d27618 100644 --- a/kernel/trunk/boot/booten.inc +++ b/kernel/trunk/boot/booten.inc @@ -15,10 +15,10 @@ $Revision: 2455 $ d80x25_bottom: - db 186,' KolibriOS comes with ABSOLUTELY NO WARRANTY. See file COP' - db 'YING for details ',186 + db 186,' KolibriOS comes with ABSOLUTELY NO WARRANTY. See file COPYING for details ',186 + db 186,' If you find any bugs, please report them at: http://board.kolibrios.org ',186 line_full_bottom -d80x25_bottom_num = 2 +d80x25_bottom_num = 3 msg_apm db " APM x.x ", 0 novesa db "Display: EGA/CGA",13,10,0 @@ -79,7 +79,7 @@ preboot_device_msgs dw 0,pdm1,pdm2,0 pdm1 db "real floppy",13,10,0 pdm2 db "C:\kolibri.img (FAT32)",13,10,0 else -preboot_device_msgs dw 0,pdm1,pdm2,pdm3 +preboot_device_msgs dw 0,pdm1,pdm2,pdm3,pdm4,0 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 @@ -100,6 +100,7 @@ _rs:latin1 '║ │ ????x????@?? SVGA VESA │ │',13, _bt:latin1 '║ └───────────────────────────────┴─┘',13,10,0 remark1 db "Default values were selected to match most of configurations, but not all.",0 -remark2 db "If the system does not boot, try to disable the item [b].",0 -remarks dw remark1, remark2 -num_remarks = 2 +remark2 db "If the system does not boot, try to disable option [b]. If the system gets",0 +remark3 db "stuck after booting, enable option [c], disable option [d] and make photo.",0 +remarks dw remark1, remark2, remark3 +num_remarks = 3 \ No newline at end of file diff --git a/kernel/trunk/boot/bootet.inc b/kernel/trunk/boot/bootet.inc index cf192a9647..77c4d77fdb 100644 --- a/kernel/trunk/boot/bootet.inc +++ b/kernel/trunk/boot/bootet.inc @@ -15,10 +15,10 @@ $Revision$ d80x25_bottom: - latin1 '║ KolibriOS on IGASUGUSE GARANTIITA. Vaata faili COPYING' - latin1 ' info saamiseks ║' + latin1 '║ KolibriOS on IGASUGUSE GARANTIITA. Vaata faili COPYING info saamiseks. Kui ║' + latin1 '║ leiate vigu, anna neist palun teada aadressil: http://board.kolibrios.org ║' line_full_bottom -d80x25_bottom_num = 2 +d80x25_bottom_num = 3 msg_apm: latin1 " APM x.x ", 0 novesa: latin1 "Ekraan: EGA/CGA",13,10,0 @@ -79,7 +79,7 @@ preboot_device_msgs dw 0,pdm1,pdm2,0 pdm1: latin1 "reaalne diskett",13,10,0 pdm2: latin1 "kolibri.img",13,10,0 else -preboot_device_msgs dw 0,pdm1,pdm2,pdm3 +preboot_device_msgs dw 0,pdm1,pdm2,pdm3,pdm4,0 pdm1: latin1 "reaalne diskett",13,10,0 pdm2: latin1 "C:\kolibri.img (FAT32)",13,10,0 pdm3: latin1 "kasuta juba laaditud kujutist",13,10,0 @@ -100,6 +100,7 @@ _rs:latin1 '║ │ ????x????@?? SVGA VESA │ │',13, _bt:latin1 '║ └───────────────────────────────┴─┘',13,10,0 remark1:latin1 "Vaikimisi väärtused on kasutatavad enamikes arvutites, kuid mitte kõigis.",0 -remark2:latin1 "Kui süsteem ei käivitu, proovige lülitada kirje [b] välja.",0 -remarks dw remark1, remark2 -num_remarks = 2 +remark2:latin1 "Kui süsteem ei käivitu, proovige lülitada kirje [b] välja. Kui see läheb",0 +remark3:latin1 "kinni pärast käivitamist, võimaldama valik [c], keelake [d] ja teha foto.",0 +remarks dw remark1, remark2, remark3 +num_remarks = 3 \ No newline at end of file diff --git a/kernel/trunk/boot/bootge.inc b/kernel/trunk/boot/bootge.inc index 20b9589e82..e2ab3e9046 100644 --- a/kernel/trunk/boot/bootge.inc +++ b/kernel/trunk/boot/bootge.inc @@ -15,10 +15,8 @@ $Revision$ d80x25_bottom: - db 186,' KolibriOS wird ohne jegliche Garantie vertrieben. ' - db ' ',186 - db 186,' Details stehen in der Datei COPYING ' - db ' ',186 + db 186,' KolibriOS wird ohne jegliche Garantie vertrieben. Details stehen in der ',186 + db 186,' Datei COPYING. Bitte melden Sie Fehler bei: http://board.kolibrios.org ',186 line_full_bottom d80x25_bottom_num = 3 @@ -81,7 +79,7 @@ preboot_device_msgs dw 0,pdm1,pdm2,0 pdm1 db "Echte Diskette",13,10,0 pdm2 db "kolibri.img",13,10,0 else -preboot_device_msgs dw 0,pdm1,pdm2,pdm3 +preboot_device_msgs dw 0,pdm1,pdm2,pdm3,pdm4,0 pdm1 db "Echte Diskette",13,10,0 pdm2 db "C:\kolibri.img (FAT32)",13,10,0 pdm3 db "Nutze bereits geladenes Image",13,10,0 @@ -102,6 +100,8 @@ _rs:latin1 '║ │ ????x????@?? SVGA VESA │ │',13, _bt:latin1 '║ └───────────────────────────────┴─┘',13,10,0 remark1 db "Die Standardwerte sind fur die meisten gewahlt, aber nicht fur jedermann.",0 -remark2 db "Wenn das System nicht bootet, versuchen, das Element [b] deaktivieren.",0 -remarks dw remark1, remark2 -num_remarks = 2 +remark2 db "Wenn das System nicht bootet, das Option [b] deaktivieren versuchen. Wenn es",0 +remark3 db "nach dem Booten hangen bleibt, aktivieren Sie Option [c], deaktivieren [d]",0 +remark4 db "und machen Fotos.",0 +remarks dw remark1, remark2, remark3, remark4 +num_remarks = 4 \ No newline at end of file diff --git a/kernel/trunk/boot/bootru.inc b/kernel/trunk/boot/bootru.inc index abd1c7dc44..967759a104 100644 --- a/kernel/trunk/boot/bootru.inc +++ b/kernel/trunk/boot/bootru.inc @@ -15,8 +15,8 @@ $Revision$ d80x25_bottom: - cp866 '║ KolibriOS НЕ ПРЕДОСТАВЛЯЕТ НИКАКИХ ГАРAНТИЙ. ║' - cp866 '║ Подробнее смотрите в файле COPYING.TXT ║' + cp866 '║ KolibriOS НЕ ПРЕДОСТАВЛЯЕТ НИКАКИХ ГАРAНТИЙ. Подробнее смотрите в файле ║' + cp866 '║ COPYING.TXT. О найденных ошибках сообщайте на http://board.kolibrios.org ║' line_full_bottom d80x25_bottom_num = 3 @@ -77,7 +77,7 @@ preboot_device_msgs dw 0,pdm1,pdm2,0 pdm1: cp866 "настоящая дискета",13,10,0 pdm2: cp866 "kolibri.img из папки загрузки",13,10,0 else -preboot_device_msgs dw 0,pdm1,pdm2,pdm3,pdm4 +preboot_device_msgs dw 0,pdm1,pdm2,pdm3,pdm4,0 pdm1: cp866 "настоящая дискета",13,10,0 pdm2: cp866 "C:\kolibri.img (FAT32)",13,10,0 pdm3: cp866 "использовать уже загруженный образ",13,10,0 @@ -97,7 +97,8 @@ _r2:cp866 '║ │ 640x480 VGA 16 цветов │ │ _rs:cp866 '║ │ ????x????@?? SVGA VESA │ │ ',13,10,0 _bt:cp866 '║ └───────────────────────────────┴─┘ ',13,10,0 -remark1:cp866 "Значения по умолчанию выбраны для удобства большинства, но не всех.",0 -remark2:cp866 "Если у Вас не грузится система, попробуйте отключить пункт [b].",0 -remarks dw remark1, remark2 -num_remarks = 2 +remark1:cp866 "Значения по умолчанию выбраны для удобства большинства, но не всех. Если у",0 +remark2:cp866 "Вас не грузится система, попробуйте отключить пункт [b]. Если она зависла",0 +remark3:cp866 "после запуска, включите пункт [c], отключите пункт [d] и сделайте фото лога.",0 +remarks dw remark1, remark2, remark3 +num_remarks = 3 \ No newline at end of file diff --git a/kernel/trunk/boot/bootsp.inc b/kernel/trunk/boot/bootsp.inc index e57854f6c4..36f23260cb 100644 --- a/kernel/trunk/boot/bootsp.inc +++ b/kernel/trunk/boot/bootsp.inc @@ -17,10 +17,8 @@ $Revision: 2455 $ d80x25_bottom: - cp850 '║ KolibriOS y viene ABSOLUTAMENTE SIN GARANTíA. ' - cp850 ' ║' - cp850 '║ Lee el archivo COPYING por más detalles ' - cp850 ' ║' + cp850 '║ KolibriOS viene ABSOLUTAMENTE SIN GARANTíA. Lee el archivo COPYING por más ║' + cp850 '║ detalles. Por favor, informar de los errores en: http://board.kolibrios.org ║' line_full_bottom d80x25_bottom_num = 3 @@ -83,7 +81,7 @@ preboot_device_msgs dw 0,pdm1,pdm2,0 pdm1: cp850 "disquete real",13,10,0 pdm2: cp850 "C:\kolibri.img (FAT32)",13,10,0 else -preboot_device_msgs dw 0,pdm1,pdm2,pdm3 +preboot_device_msgs dw 0,pdm1,pdm2,pdm3,pdm4,0 pdm1: cp850 "disquete real",13,10,0 pdm2: cp850 "C:\kolibri.img (FAT32)",13,10,0 pdm3: cp850 "usar imagen ya cargada",13,10,0 @@ -104,6 +102,7 @@ _rs:cp850 '║ │ ????x????@?? SVGA VESA │ │',13,1 _bt:cp850 '║ └───────────────────────────────┴─┘',13,10,0 remark1:cp850 "Los valores por defecto puede que no funcionen en algunas configuraciones.",0 -remark2:cp850 "Si el sistema no inicia, prueba deshabilitar la opción [b].",0 -remarks dw remark1, remark2 -num_remarks = 2 +remark2:cp850 "Si el sistema no inicia, prueba deshabilitar la opción [b]. Si se bloquea",0 +remark3:cp850 "después de arrancar, habilite la opción [c], desactivar [d] y hacer fotos.",0 +remarks dw remark1, remark2, remark3 +num_remarks = 3 \ No newline at end of file