/kernel/tags/kolibri0.5.3.0/boot/shutdown.inc |
---|
0,0 → 1,563 |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
;; |
;; Shutdown for Menuet |
;; |
;; Distributed under General Public License |
;; See file COPYING for details. |
;; Copyright 2003 Ville Turjanmaa |
;; |
system_shutdown: ; shut down the system |
mov eax,3 ; stop playing cd |
call sys_cd_audio |
cli |
cld |
mov al,[0x2f0000+0x9030] |
cmp al,1 |
jl no_shutdown_parameter |
cmp al,4 |
jg no_shutdown_parameter |
jmp yes_shutdown_param |
no_shutdown_parameter: |
movzx ecx,word [0x2f0000+0x900A] |
movzx esi,word [0x2f0000+0x900C] |
imul ecx,esi ;[0xfe04] |
; mov ecx,0x500000/4 ;3fff00/4 ; darken screen |
push ecx |
mov esi,[0xfe80] |
cmp esi,32*0x100000 |
jbe no_darken_screen |
mov edi,16*0x100000 |
sdnewpix: |
mov eax,[esi] |
add esi,4 |
shr eax,1 |
and eax,0x7f7f7f7f |
stosd |
loop sdnewpix |
pop ecx |
mov esi,16*0x100000 |
mov edi,[0xfe80] |
cld |
rep movsd |
no_darken_screen: |
mov eax,[0xfe00] |
shr eax,1 |
sub eax,220 |
mov ebx,[0xfe04] |
shr ebx,1 |
mov [shutdownpos],ebx |
sub ebx,120 |
mov edi,1 |
mov ecx,0x0000ff |
sdnewpix2: |
call [putpixel] |
inc eax |
mov esi,[0xfe00] |
shr esi,1 |
add esi,220 |
cmp eax,esi |
jnz sdnewpix2 |
dec ecx |
mov eax,[0xfe00] |
shr eax,1 |
sub eax,220 |
inc ebx |
mov edx,[shutdownpos] |
add edx,105 |
cmp ebx,edx |
jnz sdnewpix2 |
mov esi,[0xfe00] ; menuet version |
shr esi,1 |
sub esi,220 |
add esi,27 |
shl esi,16 |
mov eax,esi |
add eax,[shutdownpos] |
sub eax,105 |
mov ebx,0xffff00 |
mov ecx,version |
mov edx,34 |
mov edi,1 |
call dtext |
mov esi,[0xfe00] ; 'it is safe..' |
shr esi,1 |
sub esi,220 |
add esi,27 |
shl esi,16 |
mov eax,esi |
add eax,[shutdownpos] |
add eax,33 |
mov esi,6 |
mov ebx,0xffffff |
mov ecx,shutdowntext |
mov edx,40 |
mov edi,1 |
newsdt: |
call dtext |
add eax,10 |
add ecx,40 |
dec esi |
jnz newsdt |
mov eax,rosef ; load rose.txt |
mov ebx,0 |
mov ecx,16800 |
mov edx,0x90000 |
mov esi,12 |
call fileread |
mov esi,[0xfe00] ; draw rose |
shr esi,1 |
add esi,20 |
shl esi,16 |
mov eax,esi |
add eax,[shutdownpos] |
sub eax,110 |
mov ebx,0x00ff00 |
mov ecx,0x90001 |
mov edx,27 |
mov edi,1 |
nrl: |
call dtext |
sub ebx,0x050000 |
add eax,8 |
add ecx,31 |
cmp ecx,dword 0x90001+25*31 |
jnz nrl |
call checkEgaCga |
yes_shutdown_param: |
cli |
mov eax,kernel ; load kernel.mnt to 0x8000:0 |
mov esi,12 |
mov ebx,0 |
mov ecx,-1 |
mov edx,0x80000 |
call fileread |
mov esi,restart_kernel_4000 ; move kernel re-starter to 0x4000:0 |
mov edi,0x40000 |
mov ecx,1000 |
cld |
rep movsb |
mov eax,0x2F0000 ; restore 0x0 - 0xffff |
mov ebx,0x0000 |
mov ecx,0xffff |
call memmove |
call restorefatchain |
mov eax,pr_mode_exit |
mov [0x467+0],ax |
mov [0x467+2],word 0x1000 |
mov al,0x0F |
out 0x70,al |
mov al,0x05 |
out 0x71,al |
mov al,0xFE |
out 0x64,al |
hlt |
use16 |
pr_mode_exit: |
; setup stack |
mov ax, 3000h |
mov ss, ax |
mov esp, 0EC00h |
; setup ds |
push cs |
pop ds |
; mov ax,1000 |
; mov ds,ax |
; mov es,ax |
; mov fs,ax |
; mov gs,ax |
; mov ss,ax |
; mov bl,[shutdown_parameter] |
; mov [es:shutdown_parameter-0x10000],bl |
jmp real_mode-0x10000 |
old_ints_h: |
dw 4*0x20 |
dd 0 |
dw 0 |
rdelay: |
ret |
real_mode: |
lidt [old_ints_h-0x10000] |
;remap IRQs |
mov al,0x11 |
out 0x20,al |
call rdelay |
out 0xA0,al |
call rdelay |
mov al,0x08 |
out 0x21,al |
call rdelay |
mov al,0x70 |
out 0xA1,al |
call rdelay |
mov al,0x04 |
out 0x21,al |
call rdelay |
mov al,0x02 |
out 0xA1,al |
call rdelay |
mov al,0x01 |
out 0x21,al |
call rdelay |
out 0xA1,al |
call rdelay |
mov al,0 |
out 0x21,al |
call rdelay |
out 0xA1,al |
sti |
jmp temp_3456 |
nbw: |
xor ax,ax |
in al,0x60 |
call pause_key |
cmp al,7 |
jge nbw |
mov bl,al |
nbw2: |
in al,0x60 |
call pause_key |
cmp al,bl |
je nbw2 |
cmp al,240 ;ax,240 |
jne nbw31 |
mov al,bl |
dec al |
jmp nbw32 |
nbw31: |
add bl,128 |
cmp al,bl |
jne nbw |
sub al,129 |
nbw32: |
cmp al,1 ; write floppy |
jne no_floppy_write |
call floppy_write |
jmp temp_3456 ;nbw |
no_floppy_write: |
cmp al,2 ; poweroff |
jne no_apm_off |
call APM_PowerOff |
no_apm_off: |
cmp al,3 ; boot |
jnz no_sys_boot |
mov ax,0x0040 |
mov ds,ax |
mov word[0x0072],0x1234 |
jmp 0xF000:0xFFF0 |
no_sys_boot: |
cmp al,4 ; restart kernel |
je restart_kernel |
temp_3456: |
push word 0x0000 |
pop es |
mov al,byte [es:0x9030] |
cmp al,1 |
jl nbw |
cmp al,4 |
jg nbw |
jmp nbw32 |
; jmp nbw |
pause_key: |
mov ecx,100 |
pause_key_1: |
loop pause_key_1 |
ret |
iglobal |
kernel db 'KERNEL MNT' |
; shutdown_parameter db 0 |
endg |
restart_kernel: |
mov ax,0x0003 ; set text mode for screen |
int 0x10 |
jmp 0x4000:0000 |
restart_kernel_4000: |
cli |
; mov di,0x1000 ; load kernel image from 0x8000:0 -> 0x1000:0 |
; |
; new_kernel_block_move: |
; |
; mov ebx,0 |
; |
; new_kernel_byte_move: |
; |
; mov ax,di |
; add ax,0x7000 |
; mov es,ax |
; mov dl,[es:bx] |
; mov es,di |
; mov [es:bx],dl |
; |
; inc ebx |
; cmp ebx,65536 |
; jbe new_kernel_byte_move |
; |
; add di,0x1000 |
; cmp di,0x2000 |
; jbe new_kernel_block_move |
push ds |
pop es |
mov cx, 0x8000 |
push cx |
mov ds, cx |
xor si, si |
xor di, di |
rep movsw |
mov ax, 0x9000 |
mov ds, ax |
mov ax, 0x2000 |
mov es, ax |
pop cx |
rep movsw |
wbinvd ; write and invalidate cache |
; mov ax,0x1000 |
; mov es,ax |
; mov ax,0x3000 |
; mov ss,ax |
; mov sp,0xec00 |
; restore timer |
mov al, 00110100b |
out 43h, al |
jcxz $+2 |
mov al, 0xFF |
out 40h, al |
jcxz $+2 |
out 40h, al |
jcxz $+2 |
sti |
; bootloader interface |
push 0x1000 |
pop ds |
mov si, .bootloader_block-0x10000 |
mov ax, 'KL' |
jmp 0x1000:0000 |
.bootloader_block: |
db 1 ; version |
dw 1 ; floppy image is in memory |
dd 0 ; cannot save parameters |
APM_PowerOff: |
;!!!!!!!!!!!!!!!!!!!!!!!! |
mov ax,0x5300 |
xor bx,bx |
int 0x15 |
push ax |
mov ax,0x5301 |
xor bx,bx |
int 0x15 |
mov ax,0x5308 |
mov bx,1 |
mov cx,bx |
int 0x15 |
mov ax,0x530E |
xor bx,bx |
pop cx |
int 0x15 |
mov ax,0x530D |
mov bx,1 |
mov cx,bx |
int 0x15 |
mov ax,0x530F |
mov bx,1 |
mov cx,bx |
int 0x15 |
mov ax,0x5307 |
mov bx,1 |
mov cx,3 |
int 0x15 |
;!!!!!!!!!!!!!!!!!!!!!!!! |
ret |
uglobal |
flm db 0 |
endg |
floppy_write: ; write diskette image to physical floppy |
pusha |
mov ax,0x1000 |
mov es,ax |
cmp [es:flm-0x10000],byte 1 |
je fwwritedone |
mov [es:flm-0x10000],byte 1 |
mov ax,0x0000 ; reset drive |
mov dx,0x0000 |
int 0x13 |
mov cx,0x0001 ; startcyl,startsector |
mov dx,0x0000 ; starthead,drive |
push word 80*2 ; read no of sect |
fwwrites: |
pusha |
; move 1mb+ -> 0:a000 |
pusha |
mov si,fwmovedesc -0x10000 |
push word 0x1000 |
pop es |
mov cx,256*18 |
mov ah,0x87 |
int 0x15 |
mov eax,[es:fwmovedesc-0x10000+0x12] |
add eax,512*18 |
mov [es:fwmovedesc-0x10000+0x12],eax |
popa |
xor si,si |
fwnewwrite: |
push word 0x0 |
pop es |
mov bx,0xa000 ; es:bx -> data area |
mov ax,0x0300+18 ; read, no of sectors to read |
int 0x13 |
cmp ah,0 |
jz fwgoodwrite |
add si,1 |
cmp si,10 |
jnz fwnewwrite |
add esp,32+2 |
popa ; can't access diskette |
ret |
fwgoodwrite: |
popa |
inc dh |
cmp dh,2 |
jnz fwbb2 |
mov dh,0 |
inc ch |
fwbb2: |
cld |
pop ax |
dec ax |
push ax |
cmp ax,0 |
jnz fwrs |
pop ax |
jmp fwwritedone |
fwrs: |
jmp fwwrites |
fwmovedesc: |
db 0x00,0x00,0x0,0x00,0x00,0x00,0x0,0x0 |
db 0x00,0x00,0x0,0x00,0x00,0x00,0x0,0x0 |
db 0xff,0xff,0x0,0x00,0x10,0x93,0x0,0x0 |
db 0xff,0xff,0x0,0xa0,0x00,0x93,0x0,0x0 |
db 0x00,0x00,0x0,0x00,0x00,0x00,0x0,0x0 |
db 0x00,0x00,0x0,0x00,0x00,0x00,0x0,0x0 |
db 0x00,0x00,0x0,0x00,0x00,0x00,0x0,0x0 |
db 0x00,0x00,0x0,0x00,0x00,0x00,0x0,0x0 |
fwwritedone: |
popa |
ret |
use32 |
uglobal |
shutdownpos dd 0x0 |
endg |
iglobal |
;shutdowntext: |
; db "IT'S SAFE TO POWER OFF COMPUTER OR " |
; db ' ' |
; db '1) SAVE RAMDISK TO FLOPPY ' |
; db '2) APM - POWEROFF ' |
; db '3) REBOOT ' |
; db '4) RESTART KERNEL ' |
shutdowntext: |
db "¥§®¯ ᮥ ¢ëª«î票¥ ª®¬¯ìîâ¥à ¨«¨ " |
db ' ' |
db '1) ®åà ¨âì à ¬¤¨áª ¤¨áª¥âã ' |
db '2) APM - ¢ëª«î票¥ ¯¨â ¨ï ' |
db '3) ¥à¥§ £à㧪 á¨á⥬ë ' |
db '4) ¥áâ àâ ï¤à ¨§ ' |
rosef: |
db 'ROSE TXT' |
endg |
/kernel/tags/kolibri0.5.3.0/boot/bootcode.inc |
---|
0,0 → 1,1085 |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
;; ;; |
;; BOOTCODE.INC ;; |
;; ;; |
;; KolibriOS 16-bit loader, ;; |
;; based on bootcode for MenuetOS ;; |
;; ;; |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
;========================================================================== |
; |
; 16 BIT FUNCTIONS |
; |
;========================================================================== |
putchar: |
; in: al=character |
mov ah, 0Eh |
mov bh, 0 |
int 10h |
ret |
print: |
; in: si->string |
mov al, 186 |
call putchar |
mov al, ' ' |
call putchar |
printplain: |
; in: si->string |
pusha |
lodsb |
@@: |
call putchar |
lodsb |
cmp al, 0 |
jnz @b |
popa |
ret |
; Now int 16 is used for keyboard support. |
; This is shorter, simpler and more reliable. |
if 0 |
getkey: push ecx |
push edx |
add ebx,0x0101 |
xor eax,eax |
gk1: |
in al,0x60 |
mov cl,al |
gk0: |
in al,0x60 |
cmp al,cl |
je gk0 |
cmp ax,11 |
jg gk0 |
gk0_1: |
mov cl,al |
; add al,47 |
; mov [ds:keyinbs-0x10000],al |
; mov si,keyinbs-0x10000 |
; call printplain |
gk12: |
in al,0x60 |
cmp al,cl |
je gk12 |
cmp ax,240 |
jne gk13 |
mov al,cl |
jmp gk14 |
gk13: |
add cl,128 |
cmp al,cl |
jne gk1 |
sub al,128 |
gk14: |
movzx edx,bl |
cmp eax,edx |
jb gk1 |
movzx edx,bh |
cmp eax,edx |
jg gk1 |
test ebx,0x010000 |
jnz gk3 |
mov cx,0x1000 |
mov dx,cx |
add eax,47 |
mov cx,ax |
cmp cx,58 |
jb gk_nozero |
sub cx,10 |
gk_nozero: |
mov [ds:keyin-0x10000],cl |
mov si,keyin-0x10000 |
call printplain |
gk3: |
sub eax,48 |
pop edx |
pop ecx |
ret |
end if |
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 |
mov ah, 2 |
mov bh, 0 |
int 10h |
ret |
macro _setcursor row,column |
{ |
mov dx, row*256 + column |
call setcursor |
} |
pagetable_set: |
or al, 7 |
@@: |
stosd |
add eax, 1000h |
loop @b |
ret |
; 16-bit data |
; videomodes table |
gr_table: |
dw 0x112+0100000000000000b , 640 , 480 ; 1 |
dw 0x115+0100000000000000b , 800 , 600 ; 2 |
dw 0x118+0100000000000000b , 1024 , 768 ; 3 |
dw 0x11B+0100000000000000b , 1280 , 1024 ; 4 |
dw 0x112 , 640 , 480 ; 5 |
dw 0x115 , 800 , 600 ; 6 |
dw 0x118 , 1024 , 768 ; 7 |
dw 0x11B , 1280 ,1024 ; 8 |
dw 0x13, 320, 200 ; 9 |
dw 0x12, 640, 480 ; 0 |
; table for move to extended memory (int 15h, ah=87h) |
movedesc: |
db 0x00,0x00,0x0,0x00,0x00,0x00,0x0,0x0 |
db 0x00,0x00,0x0,0x00,0x00,0x00,0x0,0x0 |
db 0xff,0xff,0x0,0xa0,0x00,0x93,0x0,0x0 |
db 0xff,0xff,0x0,0x00,0x10,0x93,0x0,0x0 |
db 0x00,0x00,0x0,0x00,0x00,0x00,0x0,0x0 |
db 0x00,0x00,0x0,0x00,0x00,0x00,0x0,0x0 |
db 0x00,0x00,0x0,0x00,0x00,0x00,0x0,0x0 |
db 0x00,0x00,0x0,0x00,0x00,0x00,0x0,0x0 |
;========================================================================= |
; |
; 16 BIT CODE |
; |
;========================================================================= |
start_of_code: |
cld |
; \begin{diamond}[02.12.2005] |
cmp ax, 'KL' |
jnz @f |
mov word [cs:cfgmanager.loader_block-0x10000], si |
mov word [cs:cfgmanager.loader_block+2-0x10000], ds |
@@: |
; \end{diamond}[02.12.2005] |
; set up stack |
mov ax, 3000h |
mov ss, ax |
mov sp, 0EC00h |
; set up segment registers |
push cs |
pop ds |
push cs |
pop es |
; set videomode |
mov ax, 3 |
int 0x10 |
; Load & set russian VGA font (RU.INC) |
mov bp,RU_FNT1-10000h ; RU_FNT1 - First part |
mov bx,1000h ; 768 bytes |
mov cx,30h ; 48 symbols |
mov dx,80h ; 128 - position of first symbol |
mov ax,1100h |
int 10h |
mov bp,RU_FNT2-10000h ; RU_FNT2 -Second part |
mov bx,1000h ; 512 bytes |
mov cx,20h ; 32 symbols |
mov dx,0E0h ; 224 - position of first symbol |
mov ax,1100h |
int 10h |
; End set VGA russian font |
; draw frames |
push 0xb800 |
pop es |
xor di, di |
; mov si,d80x25-0x10000 |
; mov cx,80*25 |
; mov ah,1*16+15 |
; dfl1: |
; lodsb |
; stosw |
; loop dfl1 |
mov ah, 1*16+15 |
; draw top |
mov si, d80x25_top - 0x10000 |
mov cx, d80x25_top_num * 80 |
@@: |
lodsb |
stosw |
loop @b |
; draw spaces |
mov si, space_msg - 0x10000 |
mov cx, 25 - d80x25_top_num - d80x25_bottom_num |
dfl1: |
push cx |
push si |
mov cx, 80 |
@@: |
lodsb |
stosw |
loop @b |
pop si |
pop cx |
loop dfl1 |
; draw bottom |
mov si, d80x25_bottom - 0x10000 |
mov cx, d80x25_bottom_num * 80 |
@@: |
lodsb |
stosw |
loop @b |
mov byte [space_msg-0x10000+80], 0 ; now space_msg is null terminated |
_setcursor d80x25_top_num,0 |
; TEST FOR 386+ |
mov bx, 0x4000 |
pushf |
pop ax |
mov dx,ax |
xor ax,bx |
push ax |
popf |
pushf |
pop ax |
and ax,bx |
and dx,bx |
cmp ax,dx |
jnz cpugood |
mov si,not386-0x10000 |
sayerr: |
call print |
jmp $ |
cpugood: |
; set up esp |
movzx esp, sp |
; FLUSH 8042 KEYBOARD CONTROLLER |
;// mike.dld [ |
; mov al,0xED |
; out 0x60,al |
; or cx,-1 |
; @@: |
; in al,0x64 |
; test al,2 |
; jz @f |
; loop @b |
; @@: |
; mov al,0 |
; out 0x60,al |
; or cx,-1 |
; @@: |
; in al,0x64 |
; test al,2 |
; jz @f |
; loop @b |
; @@: |
;// mike.dld ] |
; mov ecx,10000 |
; fl1: |
; in al,0x64 |
; loop fl1 |
; test al,1 |
; jz fl2 |
; in al,0x60 |
; jmp fl1 |
; fl2: |
;**************************************************************** |
; The function is modified Mario79 |
;***************************************************************** |
; wait_kbd: ; variant 1 |
; mov cx,2500h ;çàäåðæêà ïîðÿäêà 10 ìñåê |
; test_kbd: |
; in al,64h ;÷èòàåì ñîñòîÿíèå êëàâèàòóðû |
; test al,2 ;ïðîâåðêà áèòà ãîòîâíîñòè |
; loopnz test_kbd |
mov al,0xf6 ; Ñáðîñ êëàâèàòóðû, ðàçðåøèòü ñêàíèðîâàíèå |
out 0x60,al |
xor cx,cx |
wait_loop: ; variant 2 |
; reading state of port of 8042 controller |
in al,64h |
and al,00000010b ; ready flag |
; wait until 8042 controller is ready |
loopnz wait_loop |
; DISPLAY VESA INFORMATION |
push 0 |
pop es |
mov ax,0x4f00 |
mov di,0xa000 |
int 0x10 |
cmp ax,0x004f |
mov si, novesa-0x10000 |
jnz @f |
mov ax,[es:di+4] |
add ax,'0'*256+'0' |
mov si,vervesa-0x10000 |
mov [si+vervesa_off], ah |
mov [si+vervesa_off+2], al |
@@: call print |
; \begin{diamond}[30.11.2005] |
cfgmanager: |
; settings: |
; a) preboot_graph = graphical mode |
; preboot_gprobe = probe this mode? |
; b) preboot_mtrr = use hardware acceleration? |
; c) preboot_vrrm = use VRR? |
; d) preboot_device = from what boot? |
mov di, preboot_graph-0x10000 |
; check bootloader block |
cmp [.loader_block-0x10000], 0 |
jz .noloaderblock |
les bx, [.loader_block-0x10000] |
cmp byte [es:bx], 1 |
mov si, loader_block_error-0x10000 |
jnz sayerr |
test byte [es:bx+1], 1 |
jz @f |
; image in memory present |
cmp [di+preboot_device-preboot_graph], 0 |
jnz @f |
mov [di+preboot_device-preboot_graph], 3 |
@@: |
.noloaderblock: |
; determine default settings |
mov [.bSettingsChanged-0x10000], 0 |
cmp byte [di], 0 |
jnz .preboot_gr_end |
mov [di+preboot_gprobe-preboot_graph], 0 |
mov al, [vervesa+vervesa_off-0x10000] |
cmp al, 'x' |
jz .novesa |
cmp al, '1' |
jz .vesa12 |
mov [di+preboot_gprobe-preboot_graph], 2 |
mov al, 3 |
jmp @f |
.vesa12: |
mov al, 7 |
jmp @f |
.novesa: |
mov al, 10 |
@@: |
mov [di], al |
.preboot_gr_end: |
cmp [di+preboot_mtrr-preboot_graph], 1 |
adc [di+preboot_mtrr-preboot_graph], 0 |
cmp [di+preboot_vrrm-preboot_graph], 1 |
adc [di+preboot_vrrm-preboot_graph], 0 |
cmp [di+preboot_device-preboot_graph], 1 |
adc [di+preboot_device-preboot_graph], 0 |
; notify user |
mov si, linef-0x10000 |
call print |
mov si, start_msg-0x10000 |
call print |
mov si, time_msg-0x10000 |
call print |
; get start time |
call .gettime |
mov [.starttime-0x10000], eax |
mov word [.timer-0x10000], .newtimer-0x10000 |
mov word [.timer-0x10000+2], cs |
.printcfg: |
_setcursor 9,0 |
mov si, current_cfg_msg-0x10000 |
call print |
mov si, curvideo_msg-0x10000 |
call print |
mov al, [preboot_graph-0x10000] |
cmp al, 8 |
ja .pnovesa |
mov dl, al |
and eax, 3 |
mov si, [modes_msg-0x10000+eax*2] |
call printplain |
mov si, modevesa20-0x10000 |
cmp dl, 4 |
jbe @f |
mov si, modevesa12-0x10000 |
@@: |
call printplain |
cmp dl, 4 |
ja .x |
mov si, probeno_msg-0x10000 |
cmp [preboot_gprobe-0x10000], 2 |
jnz @f |
mov si, probeok_msg-0x10000 |
@@: |
call printplain |
.x: |
jmp .c |
.pnovesa: |
cmp al, 9 |
mov si, mode9-0x10000 |
jz @b |
mov si, mode10-0x10000 |
jmp @b |
.c: |
mov si, linef-0x10000 |
call printplain |
mov si, mtrr_msg-0x10000 |
cmp [preboot_mtrr-0x10000], 1 |
call .say_on_off |
mov si, vrrm_msg-0x10000 |
cmp [preboot_vrrm-0x10000], 1 |
call .say_on_off |
mov si, preboot_device_msg-0x10000 |
call print |
mov al, [preboot_device-0x10000] |
and eax, 3 |
mov si, [preboot_device_msgs-0x10000+eax*2] |
call printplain |
.wait: |
_setcursor 25,0 ; out of screen |
; set timer interrupt handler |
cli |
push 0 |
pop es |
mov eax, [es:8*4] |
mov [.oldtimer-0x10000], eax |
mov eax, [.timer-0x10000] |
mov [es:8*4], eax |
sti |
; wait for keypressed |
mov ah, 0 |
int 16h |
push ax |
; restore timer interrupt |
push 0 |
pop es |
mov eax, [.oldtimer-0x10000] |
mov [es:8*4], eax |
mov [.timer-0x10000], eax |
_setcursor 7,0 |
mov si, space_msg-0x10000 |
call printplain |
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 .wait |
_setcursor 15,0 |
mov si,bdev-0x10000 |
call print |
mov bx,'13' |
call getkey |
mov [preboot_device-0x10000], al |
_setcursor 13,0 |
.d: |
mov [.bSettingsChanged-0x10000], 1 |
mov si, space_msg-0x10000 |
call printplain |
_setcursor 15,0 |
mov cx, 6 |
@@: |
call printplain |
loop @b |
jmp .printcfg |
.change_a: |
_setcursor 15,0 |
mov si, gr_mode-0x10000 |
call printplain |
mov bx, '09' |
call getkey |
mov [preboot_graph-0x10000], al |
cmp al, 4 |
ja @f |
mov si, probetext-0x10000 |
call printplain |
mov bx, '12' |
call getkey |
mov [preboot_gprobe-0x10000], al |
@@: |
_setcursor 10,0 |
jmp .d |
.change_b: |
_setcursor 15,0 |
mov si, gr_acc-0x10000 |
call print |
mov bx, '12' |
call getkey |
mov [preboot_mtrr-0x10000], al |
_setcursor 11,0 |
jmp .d |
.change_c: |
_setcursor 15,0 |
mov si, vrrmprint-0x10000 |
call print |
mov bx, '12' |
call getkey |
mov [preboot_vrrm-0x10000], al |
_setcursor 12,0 |
jmp .d |
.say_on_off: |
pushf |
call print |
mov si, on_msg-0x10000 |
popf |
jz @f |
mov si, off_msg-0x10000 |
@@: call printplain |
ret |
; 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 |
.loader_block dd 0 |
.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-0x10000] |
pushad |
call .gettime |
sub eax, [.starttime-0x10000] |
sub ax, 18*5 |
jae .timergo |
neg ax |
add ax, 18-1 |
mov bx, 18 |
xor dx, dx |
div bx |
if lang eq ru |
; ¯®¤®¦¤¨â¥ 5 ᥪã¤, 4/3/2 ᥪã¤ë, 1 ᥪã¤ã |
cmp al, 5 |
mov cl, ' ' |
jae @f |
cmp al, 1 |
mov cl, 'ã' |
jz @f |
mov cl, 'ë' |
@@: mov [time_str+9-0x10000], cl |
else |
; wait 5/4/3/2 seconds, 1 second |
cmp al, 1 |
mov cl, 's' |
ja @f |
mov cl, ' ' |
@@: mov [time_str+9-0x10000], cl |
end if |
add al, '0' |
mov [time_str+1-0x10000], al |
mov si, time_msg-0x10000 |
_setcursor 7,0 |
call print |
_setcursor 25,0 |
popad |
pop ds |
iret |
.timergo: |
push 0 |
pop es |
mov eax, [.oldtimer-0x10000] |
mov [es:8*4], eax |
mov sp, 0EC00h |
.continue: |
sti |
_setcursor 6,0 |
mov si, space_msg-0x10000 |
call printplain |
call printplain |
_setcursor 6,0 |
mov si, loading_msg-0x10000 |
call print |
_setcursor 15,0 |
cmp [.bSettingsChanged-0x10000], 0 |
jz .load |
cmp [.loader_block-0x10000], 0 |
jz .load |
les bx, [.loader_block-0x10000] |
mov eax, [es:bx+3] |
push ds |
pop es |
test eax, eax |
jz .load |
push eax |
mov si, save_quest-0x10000 |
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-0x10000+80], 186 |
pop eax |
push cs |
push .cont-0x10000 |
push eax |
retf |
.loadc: |
pop eax |
.cont: |
push cs |
pop ds |
mov si, space_msg-0x10000 |
mov byte [si+80], 0 |
_setcursor 15,0 |
call printplain |
_setcursor 15,0 |
.load: |
; \end{diamond}[02.12.2005] |
; ASK GRAPHICS MODE |
movzx ax, [preboot_graph-0x10000] |
push 0 |
pop es |
; address is gr_table+6*(ax-1)-0x10000 |
add ax, ax |
lea si, [gr_table-0x10000 + eax + eax*2 - 6] |
mov bx,[si+0] |
mov cx,[si+2] |
mov dx,[si+4] |
cmp al, 9*2 |
mov al, 32 ; BPP |
jb @f |
mov [es:0x9000], al |
mov dword [es:0x9018], 0x800000 |
@@: |
mov [es:0x9008],bx |
mov [es:0x900A],cx |
mov [es:0x900C],dx |
test bh, bh |
jz nov |
; USE DEFAULTS OR PROBE |
; bx - mode : cx - x size : dx - y size |
cmp [preboot_gprobe-0x10000], 1 |
jz noprobe |
mov bx,0x100 |
newprobe: |
inc bx |
cmp bx,0x17f |
mov si,prnotfnd-0x10000 |
jz sayerr |
probemore: |
push cx |
mov ax,0x4f01 |
mov cx,bx |
and cx,0xfff |
mov di,0xa000 |
int 0x10 |
pop cx |
test byte [es:di], 80h ; lfb? |
jz newprobe |
cmp [es:di+0x12], cx ; x size? |
jnz newprobe |
cmp [es:di+0x14], dx ; y size? |
jnz newprobe |
cmp byte [es:di+0x19], 32 ;24 |
jb newprobe |
; add bx,0100000000000000b |
or bh, 40h |
mov [es:0x9008],bx |
noprobe: |
; FIND VESA 2.0 LFB & BPP |
mov ax,0x4f01 |
mov cx,bx |
and cx,0xfff |
mov di,0xa000 |
int 0x10 |
; LFB |
mov eax,[es:di+0x28] |
mov [es:0x9018],eax |
; ---- vbe voodoo |
BytesPerScanLine equ 0x10 |
mov ax, [es:di+BytesPerScanLine] |
mov [es:0x9001],ax |
; BPP |
mov al,byte [es:di+0x19] |
mov [es:0x9000],al |
nov: |
cmp al,24 |
mov si,bt24-0x10000 |
jz bppl |
cmp al,32 |
mov si,bt32-0x10000 |
jz bppl |
mov si,btns-0x10000 |
jmp sayerr |
bppl: |
call print |
; FIND VESA 1.2 PM BANK SWITCH ADDRESS |
push es |
mov ax,0x4f0A |
xor bx, bx |
int 0x10 |
xor eax,eax |
mov ax,es |
shl eax,4 |
movzx ebx,di |
add eax,ebx |
mov bx,[es:di] |
add eax,ebx |
pop es |
mov [es:0x9014],eax |
; GRAPHICS ACCELERATION |
mov al, [preboot_mtrr-0x10000] |
mov [es:0x901C],al |
; VRR_M USE |
mov al,[preboot_vrrm-0x10000] |
mov [es:0x9030],al |
; MEMORY MODEL |
; movzx eax,byte [es:preboot_memory-0x10000] |
; cmp eax,0 |
; jne pre_mem |
;;;;;;;;;;;;;;;;;;;;;;;;; |
; mario79 - memory size ; |
;;;;;;;;;;;;;;;;;;;;;;;;; |
; mov ax,0E801h |
;;; xor bx,bx ; thanks to Alexei for bugfix [18.07.2004] |
; xor cx, cx |
; xor dx, dx |
; int 0x15 |
; movzx ebx, dx ;bx |
; movzx eax, cx ;ax |
; shl ebx,6 ; ïåðåâîä â êèëîáàéòû (x64) |
; add eax,ebx |
; add eax, 1000h ;440h |
; cmp eax,40000h ; 256? |
; jge mem_256_z |
; cmp eax,20000h ; 128? |
; jge mem_128_z |
; cmp eax,10000h ; 64? |
; jge mem_64_z |
; cmp eax,8000h ; 32? |
; jge mem_32_z |
; jmp mem_16_z |
; |
;mem_256_z: mov si,memokz256-0x10000 |
; call printplain |
; mov eax,5 |
; jmp pre_mem |
;mem_128_z: mov si,memokz128-0x10000 |
; call printplain |
; mov eax,4 |
; jmp pre_mem |
;mem_64_z: mov si,memokz64-0x10000 |
; call printplain |
; mov eax,3 |
; jmp pre_mem |
;mem_32_z: mov si,memokz32-0x10000 |
; call printplain |
; mov eax,2 |
; jmp pre_mem |
;mem_16_z: mov si,memokz16-0x10000 |
; call printplain |
; mov eax,1 |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
; pre_mem: |
; push word 0x0000 |
; pop es |
; mov [es:0x9030],al |
; push word 0x1000 |
; pop es |
; mov si,linef-0x10000 |
; call printplain |
; DIRECT WRITE TO LFB, PAGING DISABLED |
; movzx eax,byte [es:preboot_lfb-0x10000] |
; mov eax,1 ; paging disabled |
; cmp eax,0 |
; jne pre_lfb |
; mov si,gr_direct-0x10000 |
; call printplain |
; mov ebx,'12' |
; call getkey |
; pre_lfb: |
; push word 0x0000 |
; pop es |
; mov [es:0x901E],al |
; mov ax,0x1000 |
; mov es,ax |
; mov si,linef-0x10000 |
; call printplain |
mov [es:0x901E],byte 1 |
; BOOT DEVICE |
mov al, [preboot_device-0x10000] |
dec al |
mov [boot_dev-0x10000],al |
; READ DISKETTE TO MEMORY |
; cmp [boot_dev-0x10000],0 |
jne no_sys_on_floppy |
mov si,diskload-0x10000 |
call print |
xor ax, ax ; reset drive |
xor dx, dx |
int 0x13 |
mov cx,0x0001 ; startcyl,startsector |
xor dx, dx ; starthead,drive |
push word 80*2 ; read no of sect |
reads: |
pusha |
xor si,si |
newread: |
mov bx,0xa000 ; es:bx -> data area |
mov ax,0x0200+18 ; read, no of sectors to read |
int 0x13 |
test ah, ah |
jz goodread |
inc si |
cmp si,10 |
jnz newread |
mov si,badsect-0x10000 |
sayerr_plain: |
call printplain |
jmp $ |
goodread: |
; move -> 1mb |
mov si,movedesc-0x10000 |
push es |
push ds |
pop es |
mov cx,256*18 |
mov ah,0x87 |
int 0x15 |
pop es |
test ah,ah ; was the move successfull ? |
je goodmove |
mov dx,0x3f2 ; floppy motor off |
mov al,0 |
out dx,al |
mov si,memmovefailed-0x10000 |
jmp sayerr_plain |
goodmove: |
add dword [movedesc-0x10000+0x18+2], 512*18 |
popa |
inc dh |
cmp dh,2 |
jnz bb2 |
mov dh,0 |
inc ch |
pusha ; print prosentage |
mov si,pros-0x10000 |
shr ch, 2 |
mov al, '5' |
test ch, 1 |
jnz @f |
mov al, '0' |
@@: |
mov [si+1], al |
shr ch, 1 |
add ch, '0' |
mov [si], ch |
call printplain |
popa |
bb2: |
pop ax |
dec ax |
push ax |
jnz reads |
readdone: |
pop ax |
mov si,backspace2-0x10000 |
call printplain |
mov si,okt-0x10000 |
call printplain |
no_sys_on_floppy: |
xor ax, ax ; reset drive |
xor dx, dx |
int 0x13 |
mov dx,0x3f2 ; floppy motor off |
mov al,0 |
out dx,al |
push es |
; PAGE TABLE |
push dword [es:0x9018] |
map_mem equ 64 ; amount of memory to map |
push 0x6000 |
pop es ; es:di = 6000:0 |
xor di,di |
mov cx,256*map_mem ; Map (mapmem) M |
; mov eax,7 |
; pt2: |
; cmp cx,256*(map_mem-8) ; 8 M map to LFB |
; jnz pt3 |
; pop eax |
; add eax,7 |
; pt3: |
; cmp cx,256*(map_mem-12) ; 12 M back to linear = physical |
; jnz pt4 |
; mov eax,12*0x100000 + 7 |
; pt4: |
; stosd |
; add eax,4096 |
; loop pt2 |
; initialize as identity mapping |
xor eax, eax |
call pagetable_set |
; 8M..12M map to LFB |
pop eax |
; mov cx, 256*4 |
mov ch, 4 |
mov di, 2000h |
call pagetable_set |
push 0x7100 |
pop es |
xor di,di |
mov eax,8*0x100000 |
mov cx,256*4 |
call pagetable_set |
; 4 KB PAGE DIRECTORY |
push 0x7F00 |
pop es ; es:di = 7F00:0 |
xor di, di |
mov cx, 64 / 4 |
mov eax, 0x60007 ; for 0 M |
call pagetable_set |
mov dword [es:0x800],0x71007 ;map region 0x80000000-0x803FFFFF to 0x800000-0xCFFFFF |
xor si,si |
mov di,second_base_address shr 20 |
mov cx,64/2 |
rep movs word [es:di], [es:si] |
mov eax, 0x7F000 +8+16 ; Page directory and enable caches |
mov cr3, eax |
; SET GRAPHICS |
pop es |
mov ax,[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-0x10000 |
jnz sayerr |
; 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 |
gmok2: |
push ds |
pop es |
/kernel/tags/kolibri0.5.3.0/boot/booteng.inc |
---|
0,0 → 1,133 |
;====================================================================== |
; |
; BOOT DATA |
; |
;====================================================================== |
macro line_full_top { |
db 201 |
times 78 db 205 |
db 187 |
} |
macro line_full_bottom { |
db 200 |
times 78 db 205 |
db 188 |
} |
macro line_half { |
db 186,' ' |
times 76 db 0xc4 |
db ' ',186 |
} |
macro line_space { |
db 186 |
times 78 db 32 |
db 186 |
} |
d80x25_top: |
line_full_top |
space_msg: line_space |
verstr: |
; line_space |
; version string |
db 186,32 |
repeat 78 |
load a byte from version+%-1 |
if a = 13 |
break |
end if |
db a |
end repeat |
repeat 78 - ($-verstr) |
db ' ' |
end repeat |
db 32,186 |
line_half |
d80x25_top_num = 4 |
d80x25_bottom: |
db 186,' KolibriOS 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 |
novesa db "Display: EGA/CGA",13,10,0 |
vervesa db "Version of Vesa: Vesa x.x",13,10,0 |
vervesa_off=22 |
gr_mode db 186," Vesa 2.0+ 16 M LFB: [1] 640x480, [2] 800x600, " |
db "[3] 1024x768, [4] 1280x1024",13,10 |
db 186," Vesa 1.2 16 M Bnk: [5] 640x480, [6] 800x600, " |
db "[7] 1024x768, [8] 1280x1024",13,10 |
db 186," EGA/CGA 256 Colors: [9] 320x200, " |
db "VGA 16 Colors: [0] 640x480",13,10 |
db 186," Select mode: ",0 |
bt24 db "Bits Per Pixel: 24",13,10,0 |
bt32 db "Bits Per Pixel: 32",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 |
;askmouse db " Mouse at:" |
; db " [1] PS/2 (USB), [2] Com1, [3] Com2." |
; db " Select port [1-3]: ",0 |
;no_com1 db 13,10,186, " No COM1 mouse",0 |
;no_com2 db 13,10,186, " No COM2 mouse",0 |
gr_acc db "Vesa 2.0+ : MTRR graphics acceleration " |
db "[1-yes/2-no] ? ",0 |
;gr_direct db 186," Use direct LFB writing? " |
; db "[1-yes/2-no] ? ",0 |
;mem_model db 13,10,186," Motherboard memory [1-16 Mb / 2-32 Mb / " |
; db "3-64Mb / 4-128 Mb / 5-256 Mb] ? ",0 |
;bootlog db 13,10,186," After bootlog display [1-continue/2-pause] ? ",0 |
bdev db "Load ramdisk from [1-floppy; 2-C:\menuet.img (FAT32);" |
db 13,10,186," " |
db "3-use preloaded ram-image from kernel restart]: ",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 |
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 |
mode1 db "640x480",0 |
mode2 db "800x600",0 |
mode3 db "1024x768",0 |
mode4 db "1280x1024",0 |
modes_msg dw mode4-0x10000,mode1-0x10000,mode2-0x10000,mode3-0x10000 |
modevesa20 db " with LFB",0 |
modevesa12 db ", VESA 1.2 Bnk",0 |
mode9 db "320x200, EGA/CGA 256 colors",0 |
mode10 db "640x480, VGA 16 colors",0 |
probeno_msg db " (standard mode)",0 |
probeok_msg db " (check nonstandard modes)",0 |
mtrr_msg db " [b] Use MTRR for graphics acceleration:",0 |
on_msg db " on",13,10,0 |
off_msg db " off",13,10,0 |
vrrm_msg db " [c] Use VRR:",0 |
preboot_device_msg db " [d] Floppy image: ",0 |
preboot_device_msgs dw 0,pdm1-0x10000,pdm2-0x10000,pdm3-0x10000 |
pdm1 db "real floppy",13,10,0 |
pdm2 db "C:\menuet.img (FAT32)",13,10,0 |
pdm3 db "use already loaded 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 |
/kernel/tags/kolibri0.5.3.0/boot/bootru.inc |
---|
0,0 → 1,133 |
;====================================================================== |
; |
; BOOT DATA |
; |
;====================================================================== |
macro line_full_top { |
db 201 |
times 78 db 205 |
db 187 |
} |
macro line_full_bottom { |
db 200 |
times 78 db 205 |
db 188 |
} |
macro line_half { |
db 186,' ' |
times 76 db 0xc4 |
db ' ',186 |
} |
macro line_space { |
db 186 |
times 78 db 32 |
db 186 |
} |
d80x25_top: |
line_full_top |
space_msg: line_space |
verstr: |
; line_space |
; version string |
db 186,32 |
repeat 78 |
load a byte from version+%-1 |
if a = 13 |
break |
end if |
db a |
end repeat |
repeat 78 - ($-verstr) |
db ' ' |
end repeat |
db 32,186 |
line_half |
d80x25_top_num = 4 |
d80x25_bottom: |
db 186,' Kolibri OS ®á®¢ Menuet OS ¨ ¥ ¯à¥¤®áâ ¢«ï¥â ' |
db '¨ª ª¨å £ àa⨩. ',186 |
db 186,' ®¤à®¡¥¥ ᬮâà¨â¥ ä ©« GNU.TXT ' |
db ' ',186 |
line_full_bottom |
d80x25_bottom_num = 3 |
novesa db "¨¤¥®ª àâ : EGA/CGA",13,10,0 |
vervesa db "¥àá¨ï VESA: Vesa x.x",13,10,0 |
vervesa_off=19 |
gr_mode db 186," Vesa 2.0+ 16 M LFB: [1] 640x480, [2] 800x600, " |
db "[3] 1024x768, [4] 1280x1024",13,10 |
db 186," Vesa 1.2 16 M Bnk: [5] 640x480, [6] 800x600, " |
db "[7] 1024x768, [8] 1280x1024",13,10 |
db 186," EGA/CGA 256 ¢¥â®¢: [9] 320x200, " |
db "VGA 16 ¢¥â®¢: [0] 640x480",13,10 |
db 186," ë¡¥à¨â¥ ¢¨¤¥®à¥¦¨¬: ",0 |
bt24 db "«ã¡¨ 梥â : 24",13,10,0 |
bt32 db "«ã¡¨ 梥â : 32",13,10,0 |
vrrmprint db "ᯮ«ì§®¢ âì VRR? (ç áâ®â ª ¤à®¢ ¢ëè¥ 60 æ" |
db " ⮫쪮 ¤«ï ¯¥à¥å®¤®¢:",13,10 |
db 186," 1024*768>800*600 ¨ 800*600>640*480) [1-¤ , 2-¥â]: ",0 |
;askmouse db "ëèì:" ; 186, " " |
; db " [1] PS/2 (USB), [2] Com1, [3] Com2." |
; db " ë¡¥à¨â¥ ¯®àâ [1-3]: ",0 |
;no_com1 db 13,10,186," No COM1 mouse",0 |
;no_com2 db 13,10,186," No COM2 mouse",0 |
gr_acc db "Vesa 2.0+: ª«îç¨âì MTRR ¤«ï ãáª®à¥¨ï £à 䨪¨? " |
db "[1-¤ /2-¥â]: ",0 |
;gr_direct db 186," ᯮ«ì§®¢ âì «¨¥©ë© ¢¨¤¥®¡ãä¥à? " |
; db "[1-¤ /2-¥â]: ",0 |
;mem_model db 13,10,186," ¡ê+¬ ¯ ¬ï⨠[1-16 Mb / 2-32 Mb / " |
; db "3-64Mb / 4-128 Mb / 5-256 Mb]: ",0 |
;bootlog db 13,10,186," à®á¬®âà¥âì ¦ãà « § £à㧪¨? [1-¥â/2-¤ ]: ",0 |
bdev db " £à㧨âì ®¡à § ¨§ [1-¤¨áª¥â ; 2-C:\menuet.img (FAT32);" |
db 13,10,186," " |
db "3-¨á¯®«ì§®¢ âì 㦥 § £àã¦¥ë© ®¡à §]: ",0 |
probetext db 13,10,13,10,186," â ¤ àâë© ¢¨¤¥®à¥¦¨¬? [1-¤ , " |
db "2-¯à®¢¥à¨âì ¤à㣨¥ (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 "訡ª - ¨¤¥®à¥¦¨¬ ¥ ©¤¥.",0 |
;modena db "訡ª - ॡã¥âáï ¯®¤¤¥à¦ª VBE 0x112+.",0 |
not386 db "訡ª - ॡã¥âáï ¯à®æ¥áá®à 386+.",0 |
btns db "訡ª - ¥ ¬®£ã ®¯à¥¤¥«¨âì £«ã¡¨ã 梥â .",0 |
fatalsel db "訡ª - ë¡à ë© ¢¨¤¥®à¥¦¨¬ ¥ ¯®¤¤¥à¦¨¢ ¥âáï.",0 |
badsect db 13,10,186," 訡ª - ¨áª¥â ¯®¢à¥¦¤¥ . ®¯à®¡ã©â¥ ¤àã£ãî.",0 |
memmovefailed db 13,10,186," 訡ª - Int 0x15 move failed.",0 |
okt db " ... OK" |
linef db 13,10,0 |
diskload db " £à㧪 ¤¨áª¥âë: 00 %",8,8,8,8,0 |
pros db "00" |
backspace2 db 8,8,0 |
boot_dev db 0 |
start_msg db " ¦¬¨â¥ [abcd] ¤«ï ¨§¬¥¥¨ï áâ஥ª, [Enter] ¤«ï ¯à®¤®«¦¥¨ï § £à㧪¨",13,10,0 |
time_msg db " ¨«¨ ¯®¤®¦¤¨â¥ " |
time_str db " 5 ᥪ㭤 " |
db " ¤® ¢â®¬ â¨ç¥áª®£® ¯à®¤®«¦¥¨ï",13,10,0 |
current_cfg_msg db "¥ªã騥 áâனª¨:",13,10,0 |
curvideo_msg db " [a] ¨¤¥®à¥¦¨¬: ",0 |
mode1 db "640x480",0 |
mode2 db "800x600",0 |
mode3 db "1024x768",0 |
mode4 db "1280x1024",0 |
modes_msg dw mode4-0x10000,mode1-0x10000,mode2-0x10000,mode3-0x10000 |
modevesa20 db " á LFB",0 |
modevesa12 db ", VESA 1.2 Bnk",0 |
mode9 db "320x200, EGA/CGA 256 梥⮢",0 |
mode10 db "640x480, VGA 16 梥⮢",0 |
probeno_msg db " (áâ ¤ àâë© ¢¨¤¥®à¥¦¨¬)",0 |
probeok_msg db " (¯à®¢¥à¨âì ¥áâ ¤ àâë¥ à¥¦¨¬ë)",0 |
mtrr_msg db " [b] ᯮ«ì§®¢ ¨¥ MTRR ¤«ï ãáª®à¥¨ï £à 䨪¨:",0 |
on_msg db " ¢ª«",13,10,0 |
off_msg db " ¢ëª«",13,10,0 |
vrrm_msg db " [c] ᯮ«ì§®¢ ¨¥ VRR:",0 |
preboot_device_msg db " [d] ¡à § ¤¨áª¥âë: ",0 |
preboot_device_msgs dw 0,pdm1-0x10000,pdm2-0x10000,pdm3-0x10000 |
pdm1 db " áâ®ïé ï ¤¨áª¥â ",13,10,0 |
pdm2 db "C:\menuet.img (FAT32)",13,10,0 |
pdm3 db "¨á¯®«ì§®¢ âì 㦥 § £àã¦¥ë© ®¡à §",13,10,0 |
loading_msg db "¤ñâ § £à㧪 KolibriOS...",0 |
save_quest db " ¯®¬¨âì ⥪ã騥 áâனª¨? [y/n]: ",0 |
loader_block_error db "訡ª ¢ ¤ ëå ç «ì®£® § £àã§ç¨ª , ¯à®¤®«¦¥¨¥ ¥¢®§¬®¦®.",0 |
/kernel/tags/kolibri0.5.3.0/boot/preboot.inc |
---|
0,0 → 1,26 |
display_modechg db 0 ; display mode change for text, yes/no (0 or 2) |
; |
; !! Important note !! |
; |
; Must be set to 2, to avoid two screenmode |
; changes within a very short period of time. |
display_atboot db 0 ; show boot screen messages ( 2-no ) |
preboot_graph db 0 ; graph mode |
preboot_gprobe db 0 ; probe vesa3 videomodes (1-no, 2-yes) |
preboot_vrrm db 0 ; use VRR_M (1-yes, 2- no) |
;;preboot_mouse db 0 ; mouse port (1-PS2, 2-COM1, 3-COM2) |
preboot_mtrr db 0 ; mtrr acceleration (1-yes, 2-no) |
preboot_device db 0 ; boot device |
; (1-floppy 2-harddisk 3-kernel restart) |
;;preboot_memory db 0 ; amount of memory |
; (1-16Mb;2-32Mb;3-64Mb;4-128Mb;5-256Mb) |
; !!!! 0 - autodetect !!!! |
preboot_blogesc db 1 ; start immediately after bootlog |
if $>10200h |
ERROR: prebooting parameters must fit in first sector!!! |
end if |
hdsysimage db 'MENUET IMG' ; load from |
image_save db 'MENUET IMG' ; save to |
/kernel/tags/kolibri0.5.3.0/boot/rdload.inc |
---|
0,0 → 1,95 |
; READ RAMDISK IMAGE FROM HD |
cmp [boot_dev],1 |
jne no_sys_on_hd |
test [0x40001],byte 0x40 |
jz position_2 |
mov [hdbase],0x1f0 |
mov [hdid],0x0 |
mov [hdpos],1 |
mov [fat32part],0 |
position_1_1: |
inc [fat32part] |
call search_and_read_image |
cmp [image_retrieved],1 |
je yes_sys_on_hd |
movzx eax,byte [0x40002] |
cmp [fat32part],eax |
jle position_1_1 |
position_2: |
test [0x40001],byte 0x10 |
jz position_3 |
mov [hdbase],0x1f0 |
mov [hdid],0x10 |
mov [hdpos],2 |
mov [fat32part],0 |
position_2_1: |
inc [fat32part] |
call search_and_read_image |
cmp [image_retrieved],1 |
je yes_sys_on_hd |
movzx eax,byte [0x40003] |
cmp eax,[fat32part] |
jle position_2_1 |
position_3: |
test [0x40001],byte 0x4 |
jz position_4 |
mov [hdbase],0x170 |
mov [hdid],0x0 |
mov [hdpos],3 |
mov [fat32part],0 |
position_3_1: |
inc [fat32part] |
call search_and_read_image |
cmp [image_retrieved],1 |
je yes_sys_on_hd |
movzx eax,byte [0x40004] |
cmp eax,[fat32part] |
jle position_3_1 |
position_4: |
test [0x40001],byte 0x1 |
jz no_sys_on_hd |
mov [hdbase],0x170 |
mov [hdid],0x10 |
mov [hdpos],4 |
mov [fat32part],0 |
position_4_1: |
inc [fat32part] |
call search_and_read_image |
cmp [image_retrieved],1 |
je yes_sys_on_hd |
movzx eax,byte [0x40005] |
cmp eax,[fat32part] |
jle position_4_1 |
jmp yes_sys_on_hd |
search_and_read_image: |
; mov [0xfe10],dword 0 ; entries in hd cache |
call set_FAT32_variables |
mov edx, bootpath |
call read_image |
test eax, eax |
jz image_present |
mov edx, bootpath2 |
call read_image |
test eax, eax |
jz image_present |
ret |
image_present: |
mov [image_retrieved],1 |
ret |
read_image: |
mov eax, hdsysimage |
mov ebx, 1474560/512 |
mov ecx, 0x100000 |
mov esi, 0 |
mov edi, 12 |
call file_read |
ret |
image_retrieved db 0 |
counter_of_partitions db 0 |
no_sys_on_hd: |
yes_sys_on_hd: |
/kernel/tags/kolibri0.5.3.0/boot/ru.inc |
---|
0,0 → 1,92 |
; Generated by RUFNT.EXE |
; By BadBugsKiller (C) |
; Modifyed by BadBugsKiller 12.01.2004 17:45 |
; Øðèôò óìåíüøåí â ðàçìåðå è òåïåðü ñîñòîèò èç 2-óõ ÷àñòåé, |
; ñîäåðæàùèõ òîëüêî ñèìâîëû ðóññêîãî àëôàâèòà. |
; ñèìâîëû â êîäèðîâêå ASCII (ÄÎÑ'îâñêàÿ), êîäîâàÿ ñòàíèöà 866. |
RU_FNT1: |
db 0x00, 0x00, 0x1E, 0x36, 0x66, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00 |
db 0x00, 0x00, 0xFE, 0x62, 0x60, 0x60, 0x7C, 0x66, 0x66, 0x66, 0x66, 0xFC, 0x00, 0x00, 0x00, 0x00 |
db 0x00, 0x00, 0xFC, 0x66, 0x66, 0x66, 0x7C, 0x66, 0x66, 0x66, 0x66, 0xFC, 0x00, 0x00, 0x00, 0x00 |
db 0x00, 0x00, 0xFE, 0x66, 0x62, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0xF0, 0x00, 0x00, 0x00, 0x00 |
db 0x00, 0x00, 0x1E, 0x36, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0xFF, 0xC3, 0x81, 0x00, 0x00 |
db 0x00, 0x00, 0xFE, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x62, 0x66, 0xFE, 0x00, 0x00, 0x00, 0x00 |
db 0x00, 0x00, 0xDB, 0xDB, 0x5A, 0x5A, 0x7E, 0x7E, 0x5A, 0xDB, 0xDB, 0xDB, 0x00, 0x00, 0x00, 0x00 |
db 0x00, 0x00, 0x7C, 0xC6, 0x06, 0x06, 0x3C, 0x06, 0x06, 0x06, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00 |
db 0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xCE, 0xDE, 0xF6, 0xE6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00 |
db 0x6C, 0x38, 0xC6, 0xC6, 0xC6, 0xCE, 0xDE, 0xF6, 0xE6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00 |
db 0x00, 0x00, 0xE6, 0x66, 0x6C, 0x6C, 0x78, 0x78, 0x6C, 0x6C, 0x66, 0xE6, 0x00, 0x00, 0x00, 0x00 |
db 0x00, 0x00, 0x1F, 0x36, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0xCF, 0x00, 0x00, 0x00, 0x00 |
db 0x00, 0x00, 0xC6, 0xEE, 0xFE, 0xFE, 0xD6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00 |
db 0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00 |
db 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00 |
db 0x00, 0x00, 0xFE, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00 |
db 0x00, 0x00, 0xFC, 0x66, 0x66, 0x66, 0x66, 0x7C, 0x60, 0x60, 0x60, 0xF0, 0x00, 0x00, 0x00, 0x00 |
db 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC0, 0xC0, 0xC0, 0xC0, 0xC2, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00 |
db 0x00, 0x00, 0xFF, 0xDB, 0x99, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00 |
db 0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7E, 0x06, 0x06, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00 |
db 0x00, 0x00, 0x7E, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0x7E, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00 |
db 0x00, 0x00, 0xC6, 0xC6, 0x6C, 0x7C, 0x38, 0x38, 0x7C, 0x6C, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00 |
db 0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xFF, 0x03, 0x03, 0x00, 0x00 |
db 0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7E, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00 |
db 0x00, 0x00, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xFE, 0x00, 0x00, 0x00, 0x00 |
db 0x00, 0x00, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xFF, 0x03, 0x03, 0x00, 0x00 |
db 0x00, 0x00, 0xF8, 0xF0, 0xB0, 0x30, 0x3E, 0x33, 0x33, 0x33, 0x33, 0x7E, 0x00, 0x00, 0x00, 0x00 |
db 0x00, 0x00, 0xC3, 0xC3, 0xC3, 0xC3, 0xF3, 0xDB, 0xDB, 0xDB, 0xDB, 0xF3, 0x00, 0x00, 0x00, 0x00 |
db 0x00, 0x00, 0xF0, 0x60, 0x60, 0x60, 0x7C, 0x66, 0x66, 0x66, 0x66, 0xFC, 0x00, 0x00, 0x00, 0x00 |
db 0x00, 0x00, 0x7C, 0xC6, 0x06, 0x26, 0x3E, 0x26, 0x06, 0x06, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00 |
db 0x00, 0x00, 0xCE, 0xDB, 0xDB, 0xDB, 0xFB, 0xDB, 0xDB, 0xDB, 0xDB, 0xCE, 0x00, 0x00, 0x00, 0x00 |
db 0x00, 0x00, 0x3F, 0x66, 0x66, 0x66, 0x3E, 0x3E, 0x66, 0x66, 0x66, 0xE7, 0x00, 0x00, 0x00, 0x00 |
db 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00 |
db 0x00, 0x02, 0x06, 0x7C, 0xC0, 0xC0, 0xFC, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00 |
db 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x66, 0x66, 0x7C, 0x66, 0x66, 0xFC, 0x00, 0x00, 0x00, 0x00 |
db 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x62, 0x62, 0x60, 0x60, 0x60, 0xF0, 0x00, 0x00, 0x00, 0x00 |
db 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x36, 0x66, 0x66, 0x66, 0x66, 0xFF, 0xC3, 0xC3, 0x00, 0x00 |
db 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xFE, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00 |
db 0x00, 0x00, 0x00, 0x00, 0x00, 0xD6, 0xD6, 0x54, 0x7C, 0x54, 0xD6, 0xD6, 0x00, 0x00, 0x00, 0x00 |
db 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0x06, 0x3C, 0x06, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00 |
db 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0xC6, 0xCE, 0xD6, 0xE6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00 |
db 0x00, 0x00, 0x00, 0x6C, 0x38, 0xC6, 0xC6, 0xCE, 0xD6, 0xE6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00 |
db 0x00, 0x00, 0x00, 0x00, 0x00, 0xE6, 0x6C, 0x78, 0x78, 0x6C, 0x66, 0xE6, 0x00, 0x00, 0x00, 0x00 |
db 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x36, 0x66, 0x66, 0x66, 0x66, 0xE6, 0x00, 0x00, 0x00, 0x00 |
db 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0xEE, 0xFE, 0xFE, 0xD6, 0xD6, 0xC6, 0x00, 0x00, 0x00, 0x00 |
db 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00 |
db 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00 |
db 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00 |
RU_FNT2: |
db 0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7C, 0x60, 0x60, 0xF0, 0x00 |
db 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC0, 0xC0, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00 |
db 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x5A, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00 |
db 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7E, 0x06, 0x06, 0xC6, 0x7C, 0x00 |
db 0x00, 0x00, 0x00, 0x3C, 0x18, 0x7E, 0xDB, 0xDB, 0xDB, 0xDB, 0xDB, 0x7E, 0x18, 0x18, 0x3C, 0x00 |
db 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0x6C, 0x38, 0x38, 0x38, 0x6C, 0xC6, 0x00, 0x00, 0x00, 0x00 |
db 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xFF, 0x03, 0x03, 0x00, 0x00 |
db 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0x7E, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00 |
db 0x00, 0x00, 0x00, 0x00, 0x00, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xFE, 0x00, 0x00, 0x00, 0x00 |
db 0x00, 0x00, 0x00, 0x00, 0x00, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xD6, 0xFE, 0x03, 0x03, 0x00, 0x00 |
db 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xB0, 0xB0, 0x3E, 0x33, 0x33, 0x7E, 0x00, 0x00, 0x00, 0x00 |
db 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xF6, 0xDE, 0xDE, 0xF6, 0x00, 0x00, 0x00, 0x00 |
db 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x60, 0x60, 0x7C, 0x66, 0x66, 0xFC, 0x00, 0x00, 0x00, 0x00 |
db 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0x06, 0x3E, 0x06, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00 |
db 0x00, 0x00, 0x00, 0x00, 0x00, 0xCE, 0xDB, 0xDB, 0xFB, 0xDB, 0xDB, 0xCE, 0x00, 0x00, 0x00, 0x00 |
db 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xC6, 0xC6, 0x7E, 0x36, 0x66, 0xE7, 0x00, 0x00, 0x00, 0x00 |
db 0x6C, 0x00, 0xFE, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x62, 0x66, 0xFE, 0x00, 0x00, 0x00, 0x00 |
db 0x00, 0x00, 0x00, 0x6C, 0x00, 0x7C, 0xC6, 0xC6, 0xFC, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00 |
db 0x00, 0x00, 0x7C, 0xC6, 0xC0, 0xC8, 0xF8, 0xC8, 0xC0, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00 |
db 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC0, 0xF8, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00 |
db 0x66, 0x00, 0x3C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00 |
db 0x00, 0x00, 0x00, 0x6C, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00 |
db 0x6C, 0x38, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7E, 0x06, 0x06, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00 |
db 0x00, 0x00, 0x00, 0x6C, 0x38, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7E, 0x06, 0x06, 0xC6, 0x7C, 0x00 |
db 0x00, 0x38, 0x6C, 0x6C, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 |
db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 |
db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 |
db 0x00, 0x0E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0xEC, 0x6C, 0x3C, 0x1C, 0x00, 0x00, 0x00, 0x00 |
db 0x00, 0x00, 0xCF, 0xCD, 0xEF, 0xEC, 0xFF, 0xDC, 0xDC, 0xCC, 0xCC, 0xCC, 0x00, 0x00, 0x00, 0x00 |
db 0x00, 0x00, 0x00, 0xC6, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0xC6, 0x00, 0x00, 0x00, 0x00 |
db 0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00 |
db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 |