; the file is loaded ;\r
;-----------------------;\r
quit:\r
- jmp 0x0000:0x8000 ; jump to loaded file (64kb in mem)\r
+ jmp 0x0000:0x8000 ; jump to loaded file (64kb in mem)\r
\r
\r
;-------------------------------------;\r
; test if A20 is set ;\r
;------------------------;\r
a20_test:\r
- mov al, byte [fs:0]\r
- mov ah, al\r
- not al\r
- xchg al, byte [gs:0x10]\r
- cmp ah, byte [fs:0]\r
- mov [gs:0x10], al\r
+ mov al, byte [fs:0]\r
+ mov ah, al\r
+ not al\r
+ xchg al, byte [gs:0x10]\r
+ cmp ah, byte [fs:0]\r
+ mov [gs:0x10], al\r
ret
\ No newline at end of file
; out: eax = mem in bytes, 0 = error ;\r
;-----------------------------------------;\r
getmem:\r
- push dx\r
- push cx\r
- push ebx\r
+ push dx\r
+ push cx\r
+ push ebx\r
\r
- xor eax, eax\r
- xor ebx, ebx\r
- mov ax, 0xE801\r
- xor dx, dx\r
- xor cx, cx\r
- int 0x15\r
- jnc .cont1\r
- xor eax, eax\r
- jmp .end ; failed! :'(\r
+ xor eax, eax\r
+ xor ebx, ebx\r
+ mov ax, 0xE801\r
+ xor dx, dx\r
+ xor cx, cx\r
+ int 0x15\r
+ jnc .cont1\r
+ xor eax, eax\r
+ jmp .end ; failed! :'(\r
\r
- .cont1:\r
- mov si, ax\r
- or si, bx\r
- jne .cont\r
- mov ax, cx\r
- mov bx, dx\r
+ .cont1:\r
+ mov si, ax\r
+ or si, bx\r
+ jne .cont\r
+ mov ax, cx\r
+ mov bx, dx\r
\r
- .cont:\r
- cmp ax, 0x3C00\r
- jb .below_16\r
- movzx eax, bx\r
- add eax, 0x100\r
- shl eax, 16 ; eax = eax * 65536\r
- jmp .end\r
+ .cont:\r
+ cmp ax, 0x3C00\r
+ jb .below_16\r
+ movzx eax, bx\r
+ add eax, 0x100\r
+ shl eax, 16 ; eax = eax * 65536\r
+ jmp .end\r
\r
- .below_16:\r
- shl eax, 10 ; eax = eax * 1024\r
+ .below_16:\r
+ shl eax, 10 ; eax = eax * 1024\r
\r
.end:\r
- pop ebx\r
- pop cx\r
- pop dx\r
- ret
\ No newline at end of file
+ pop ebx\r
+ pop cx\r
+ pop dx\r
+ ret
\ No newline at end of file
; needed to get back to 16-bit mode ;\r
;---------------------------------------;\r
realmode_cs dw 0\r
- ridtr: dw 0x3FF\r
+ ridtr: dw 0x3FF\r
dd 0\r
\r
;----------------;\r
virtual at 0 ; could use "at esi" instead
fat12_data fat12_data
- sizeof.fat12_data = $-$$
+ sizeof.fat12_data = $-$$
end virtual
;---------------------------------------------;
.jumper db 0,0,0
.oem db 0,0,0,0,0,0,0,0
.sectorsize dw 0
- .sect_per_clust db 0
+ .sect_per_clust db 0
.reserved_sect dw 0 ; reserved sectors, 1 for bootsector.
.fats_per_drive db 0
.root_entries dw 0
.disk_id dd 0 ; random ident number on format.
.volume_label db 0,0,0,0,0,0,0,0,0,0,0
.filesystem db 0,0,0,0,0,0,0,0 ; "FAT12 " or "FAT16 "
- .code: times 448 db 0
+ .code: times 448 db 0
.boot_signature db 0,0 ; 0x55,0xAA
}
push eax
;...
- ;-----------------------------;
- ; calculate root location ;
- ;-----------------------------;
- xor eax, eax
- mov al, byte [fd0.boot.fats_per_drive]
- mul word [fd0.boot.sectors_per_fat]
- add ax, word [fd0.boot.reserved_sect]
- mov [fd0.root_dir], ax
+ ;-----------------------------;
+ ; calculate root location ;
+ ;-----------------------------;
+ xor eax, eax
+ mov al, byte [fd0.boot.fats_per_drive]
+ mul word [fd0.boot.sectors_per_fat]
+ add ax, word [fd0.boot.reserved_sect]
+ mov [fd0.root_dir], ax
-; working with
-;mov si, [drive]
-;mov ax, [si+fat12.boot.sectorssize]
+; working with
+;mov si, [drive]
+;mov ax, [si+fat12.boot.sectorssize]
- ; a bit more code here
+ ; a bit more code here
pop eax
ret
inc esi ; prepare for next character
loop .l1
- pop esi
+ pop esi
pop cx
ret
; out: nothing. ;\r
;-----------------------------------;\r
dma_transfer:\r
- push eax\r
- push edx\r
- push esi\r
- cli\r
- or bh, bh\r
- jz .dont_read\r
+ push eax\r
+ push edx\r
+ push esi\r
+ cli\r
+ or bh, bh\r
+ jz .dont_read\r
\r
- mov bh, bl\r
- add bh, 0x48\r
- jmp .read\r
- .dont_read:\r
- mov bh, bl\r
- add bh, 0x44\r
- .read:\r
- dec esi\r
+ mov bh, bl\r
+ add bh, 0x48\r
+ jmp .read\r
+ .dont_read:\r
+ mov bh, bl\r
+ add bh, 0x44\r
+ .read:\r
+ dec esi\r
\r
- movzx eax, bl\r
- mov dx, word [(eax*2)+dma_mask_reg]\r
- mov al, bl\r
- or al, 0x04\r
- out dx, al ; disable the channel\r
+ movzx eax, bl\r
+ mov dx, word [(eax*2)+dma_mask_reg]\r
+ mov al, bl\r
+ or al, 0x04\r
+ out dx, al ; disable the channel\r
\r
- movzx eax, bl\r
- mov dx, word [(eax*2)+dma_clear_reg]\r
- mov al, 0\r
- out dx, al ; initialize flip-flop\r
+ movzx eax, bl\r
+ mov dx, word [(eax*2)+dma_clear_reg]\r
+ mov al, 0\r
+ out dx, al ; initialize flip-flop\r
\r
- movzx eax, bl\r
- mov dx, word [(eax*2)+dma_mode_reg]\r
- mov al, bh\r
- out dx, al ; set DMA mode\r
+ movzx eax, bl\r
+ mov dx, word [(eax*2)+dma_mode_reg]\r
+ mov al, bh\r
+ out dx, al ; set DMA mode\r
\r
- movzx eax, bl\r
- mov dx, word [(eax*2)+dma_addr_port]\r
- mov al, cl\r
- out dx, al ; write low offset part\r
- mov al, ch\r
- out dx, al ; and high offset part\r
+ movzx eax, bl\r
+ mov dx, word [(eax*2)+dma_addr_port]\r
+ mov al, cl\r
+ out dx, al ; write low offset part\r
+ mov al, ch\r
+ out dx, al ; and high offset part\r
\r
- movzx eax, bl\r
- mov dx, word [(eax*2)+dma_page_port]\r
- mov eax, ecx\r
- shr eax, 16\r
- out dx, al ; write page.\r
+ movzx eax, bl\r
+ mov dx, word [(eax*2)+dma_page_port]\r
+ mov eax, ecx\r
+ shr eax, 16\r
+ out dx, al ; write page.\r
\r
- movzx eax, bl\r
- mov dx, word [(eax*2)+dma_count_port]\r
- mov eax, esi\r
- out dx, al ; low count\r
- mov al, ah\r
- out dx, al ; high count\r
+ movzx eax, bl\r
+ mov dx, word [(eax*2)+dma_count_port]\r
+ mov eax, esi\r
+ out dx, al ; low count\r
+ mov al, ah\r
+ out dx, al ; high count\r
\r
- movzx eax, bl\r
- mov dx, word [(eax*2)+dma_mask_reg]\r
- mov al, bl\r
- out dx, al ; enable channel\r
+ movzx eax, bl\r
+ mov dx, word [(eax*2)+dma_mask_reg]\r
+ mov al, bl\r
+ out dx, al ; enable channel\r
\r
- sti\r
- pop esi\r
- pop edx\r
- pop eax\r
- ret
\ No newline at end of file
+ sti\r
+ pop esi\r
+ pop edx\r
+ pop eax\r
+ ret
\ No newline at end of file
;----------------;\r
; variables ;\r
;----------------;\r
- dbg_head db 'ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»',0\r
- dbg_head2 db 'º BOS 0.05 - ERROR: ',0\r
- dbg_head3 db 'º º',0\r
- dbg_press db 'º Press any key to continue... º',0\r
- dbg_restart db 'º Press a key to restart the PC... º',0\r
- dbg_footer db 'ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ',0\r
- dbg_close_row db ' º',0\r
- dbg_keypress db 1 ; 0 = restart, 1 = wait for key\r
- dbg_error db ' none. ',0 ; error msg to show, max 14 chars\r
+ dbg_head db 'ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»',0\r
+ dbg_head2 db 'º BOS 0.05 - ERROR: ',0\r
+ dbg_head3 db 'º º',0\r
+ dbg_press db 'º Press any key to continue... º',0\r
+ dbg_restart db 'º Press a key to restart the PC... º',0\r
+ dbg_footer db 'ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ',0\r
+ dbg_close_row db ' º',0\r
+ dbg_keypress db 1 ; 0 = restart, 1 = wait for key\r
+ dbg_error db ' none. ',0 ; error msg to show, max 14 chars\r
\r
- ;--------------------------------------;\r
- ; I'll start with the common regs.. ;\r
- ;--------------------------------------;\r
- debug_eax db 'º EAX: 0x', 0\r
- debug_ebx db ' EBX: 0x', 0\r
- debug_ecx db 'º ECX: 0x', 0\r
- debug_edx db ' EDX: 0x', 0\r
- debug_esp db 'º ESP: 0x', 0\r
- debug_ebp db ' EBP: 0x', 0\r
- debug_esi db 'º ESI: 0x', 0\r
- debug_edi db ' EDI: 0x', 0\r
+ ;--------------------------------------;\r
+ ; I'll start with the common regs.. ;\r
+ ;--------------------------------------;\r
+ debug_eax db 'º EAX: 0x', 0\r
+ debug_ebx db ' EBX: 0x', 0\r
+ debug_ecx db 'º ECX: 0x', 0\r
+ debug_edx db ' EDX: 0x', 0\r
+ debug_esp db 'º ESP: 0x', 0\r
+ debug_ebp db ' EBP: 0x', 0\r
+ debug_esi db 'º ESI: 0x', 0\r
+ debug_edi db ' EDI: 0x', 0\r
\r
- ;-------------------;\r
- ; state to print ;\r
- ;-------------------;\r
- state_eax dd 0\r
- state_ebx dd 0\r
- state_ecx dd 0\r
- state_edx dd 0\r
- state_esp dd 0\r
- state_ebp dd 0\r
- state_esi dd 0\r
- state_edi dd 0\r
+ ;-------------------;\r
+ ; state to print ;\r
+ ;-------------------;\r
+ state_eax dd 0\r
+ state_ebx dd 0\r
+ state_ecx dd 0\r
+ state_edx dd 0\r
+ state_esp dd 0\r
+ state_ebp dd 0\r
+ state_esi dd 0\r
+ state_edi dd 0\r
\r
- ;-----------------------------------;\r
- ; "fake stack" to save regs on.. ;\r
- ;-----------------------------------;\r
- stack_eax dd 0\r
- stack_eax2 dd 0\r
- stack_ebx dd 0\r
- stack_edx dd 0\r
+ ;-----------------------------------;\r
+ ; "fake stack" to save regs on.. ;\r
+ ;-----------------------------------;\r
+ stack_eax dd 0\r
+ stack_eax2 dd 0\r
+ stack_ebx dd 0\r
+ stack_edx dd 0\r
\r
;-------------------------------;\r
; original cursor placment.. ;\r
;-------------------------------;\r
- state_cursor dw 0\r
+ state_cursor dw 0\r
\r
;-------------------------------------------------;\r
; mostly in debug purpose, and in lack of MM.. ;\r
;-------------------------------------------------;\r
- scr_buffer: times 180 dd 0 ; 720 = box buffer size (char+attrib)\r
+ scr_buffer: times 180 dd 0 ; 720 = box buffer size (char+attrib)\r
\r
\r
;--------------------------------------------;\r
; dump regs.. does not use the stack. ;\r
;--------------------------------------------;\r
dump_regs:\r
- mov [state_eax], eax\r
- mov [state_ebx], ebx\r
- mov [state_ecx], ecx\r
- mov [state_edx], edx\r
- mov [state_esp], esp\r
- mov [state_ebp], ebp\r
- mov [state_esi], esi\r
- mov [state_edi], edi\r
+ mov [state_eax], eax\r
+ mov [state_ebx], ebx\r
+ mov [state_ecx], ecx\r
+ mov [state_edx], edx\r
+ mov [state_esp], esp\r
+ mov [state_ebp], ebp\r
+ mov [state_esi], esi\r
+ mov [state_edi], edi\r
\r
- call .get_cur\r
- mov [state_cursor], bx\r
+ call .get_cur\r
+ mov [state_cursor], bx\r
\r
- mov dx, 0 ; row counter\r
- mov esi, (0xB8000+840)\r
- mov edi, scr_buffer\r
- .big_loop:\r
- mov cx, 0 ; col counter\r
- .small_loop:\r
- movsb ; copy creen content\r
- inc cx ; increase counter\r
- cmp cx, 72 ; have we copied 72 bytes?\r
- je .end_small ; if we have, end small loop\r
- jmp .small_loop ; if not continue with next byte\r
- .end_small:\r
- inc dx ; increase row count\r
- cmp dx, 10 ; check if all ten is copied\r
- je .end_big ; if it is, end.\r
- add esi, 88 ; else continue with next row\r
- jmp .big_loop\r
+ mov dx, 0 ; row counter\r
+ mov esi, (0xB8000+840)\r
+ mov edi, scr_buffer\r
+ .big_loop:\r
+ mov cx, 0 ; col counter\r
+ .small_loop:\r
+ movsb ; copy creen content\r
+ inc cx ; increase counter\r
+ cmp cx, 72 ; have we copied 72 bytes?\r
+ je .end_small ; if we have, end small loop\r
+ jmp .small_loop ; if not continue with next byte\r
+ .end_small:\r
+ inc dx ; increase row count\r
+ cmp dx, 10 ; check if all ten is copied\r
+ je .end_big ; if it is, end.\r
+ add esi, 88 ; else continue with next row\r
+ jmp .big_loop\r
.end_big:\r
\r
- mov bx, 420 ; row 5 char 20\r
- call .set_cur\r
- mov ebp, dbg_head\r
- call .print\r
- mov bx, 500 ; row 6 char 20\r
- call .set_cur\r
- mov ebp, dbg_head2\r
- call .print\r
- mov ebp, dbg_error\r
- call .print\r
- mov ebp, dbg_close_row\r
- call .print\r
- mov bx, 580 ; row 7 char 20\r
- call .set_cur\r
- mov ebp, dbg_head3\r
- call .print\r
+ mov bx, 420 ; row 5 char 20\r
+ call .set_cur\r
+ mov ebp, dbg_head\r
+ call .print\r
+ mov bx, 500 ; row 6 char 20\r
+ call .set_cur\r
+ mov ebp, dbg_head2\r
+ call .print\r
+ mov ebp, dbg_error\r
+ call .print\r
+ mov ebp, dbg_close_row\r
+ call .print\r
+ mov bx, 580 ; row 7 char 20\r
+ call .set_cur\r
+ mov ebp, dbg_head3\r
+ call .print\r
\r
\r
- mov bx, 660 ; row 8 char 20\r
- call .set_cur\r
- mov ebp, debug_eax\r
- call .print\r
- mov eax, [state_eax] ; eax\r
- call .print_hex32\r
- mov ebp, debug_ebx\r
- call .print\r
- mov eax, [state_ebx] ; ebx\r
- call .print_hex32\r
- mov ebp, dbg_close_row\r
- call .print\r
+ mov bx, 660 ; row 8 char 20\r
+ call .set_cur\r
+ mov ebp, debug_eax\r
+ call .print\r
+ mov eax, [state_eax] ; eax\r
+ call .print_hex32\r
+ mov ebp, debug_ebx\r
+ call .print\r
+ mov eax, [state_ebx] ; ebx\r
+ call .print_hex32\r
+ mov ebp, dbg_close_row\r
+ call .print\r
\r
- mov bx, 740 ; row 9 char 20\r
- call .set_cur\r
- mov ebp, debug_ecx\r
- call .print\r
- mov eax, [state_ecx] ; ecx\r
- call .print_hex32\r
- mov ebp, debug_edx\r
- call .print\r
- mov eax, [state_edx] ; edx\r
- call .print_hex32\r
- mov ebp, dbg_close_row\r
- call .print\r
+ mov bx, 740 ; row 9 char 20\r
+ call .set_cur\r
+ mov ebp, debug_ecx\r
+ call .print\r
+ mov eax, [state_ecx] ; ecx\r
+ call .print_hex32\r
+ mov ebp, debug_edx\r
+ call .print\r
+ mov eax, [state_edx] ; edx\r
+ call .print_hex32\r
+ mov ebp, dbg_close_row\r
+ call .print\r
\r
- mov bx, 820 ; row 10 char 20\r
- call .set_cur\r
- mov ebp, debug_esp\r
- call .print\r
- mov eax, [state_esp] ; esp\r
- call .print_hex32\r
- mov ebp, debug_ebp\r
- call .print\r
- mov eax, [state_ebp] ; ebp\r
- call .print_hex32\r
- mov ebp, dbg_close_row\r
- call .print\r
+ mov bx, 820 ; row 10 char 20\r
+ call .set_cur\r
+ mov ebp, debug_esp\r
+ call .print\r
+ mov eax, [state_esp] ; esp\r
+ call .print_hex32\r
+ mov ebp, debug_ebp\r
+ call .print\r
+ mov eax, [state_ebp] ; ebp\r
+ call .print_hex32\r
+ mov ebp, dbg_close_row\r
+ call .print\r
\r
- mov bx, 900 ; row 11 char 20\r
- call .set_cur\r
- mov ebp, debug_esi\r
- call .print\r
- mov eax, [state_esi] ; esi\r
- call .print_hex32\r
- mov ebp, debug_edi\r
- call .print\r
- mov eax, [state_edi] ; edi\r
- call .print_hex32\r
- mov ebp, dbg_close_row\r
- call .print\r
+ mov bx, 900 ; row 11 char 20\r
+ call .set_cur\r
+ mov ebp, debug_esi\r
+ call .print\r
+ mov eax, [state_esi] ; esi\r
+ call .print_hex32\r
+ mov ebp, debug_edi\r
+ call .print\r
+ mov eax, [state_edi] ; edi\r
+ call .print_hex32\r
+ mov ebp, dbg_close_row\r
+ call .print\r
\r
- mov bx, 980 ; row 12 char 20\r
- call .set_cur\r
- mov ebp, dbg_head3\r
- call .print\r
- mov bx, 1140 ; row 14 char 20\r
- call .set_cur\r
- mov ebp, dbg_footer\r
- call .print\r
- mov bx, 1060 ; row 13 char 20\r
- call .set_cur\r
+ mov bx, 980 ; row 12 char 20\r
+ call .set_cur\r
+ mov ebp, dbg_head3\r
+ call .print\r
+ mov bx, 1140 ; row 14 char 20\r
+ call .set_cur\r
+ mov ebp, dbg_footer\r
+ call .print\r
+ mov bx, 1060 ; row 13 char 20\r
+ call .set_cur\r
\r
- cmp [dbg_keypress], 1\r
- je .wait_key\r
+ cmp [dbg_keypress], 1\r
+ je .wait_key\r
\r
;----------------------------------;\r
; wait for scancode and restart ;\r
;----------------------------------;\r
- mov ebp, dbg_restart\r
- call .print\r
- mov bx, 1093 ; row 13 char 46\r
- call .set_cur\r
+ mov ebp, dbg_restart\r
+ call .print\r
+ mov bx, 1093 ; row 13 char 46\r
+ call .set_cur\r
\r
.no_new1:\r
- mov al, [kbd_head]\r
- mov ah, [kbd_tail]\r
- cmp ah, 63\r
- jne .check1\r
- cmp al, 0\r
- je .no_new1\r
- mov [kbd_tail], 0\r
- jmp .done_check1\r
+ mov al, [kbd_head]\r
+ mov ah, [kbd_tail]\r
+ cmp ah, 63\r
+ jne .check1\r
+ cmp al, 0\r
+ je .no_new1\r
+ mov [kbd_tail], 0\r
+ jmp .done_check1\r
.check1:\r
- mov bl, ah\r
- inc bl\r
- cmp bl, al\r
- je .no_new1\r
- inc [kbd_tail]\r
+ mov bl, ah\r
+ inc bl\r
+ cmp bl, al\r
+ je .no_new1\r
+ inc [kbd_tail]\r
.done_check1:\r
\r
- mov esi, kbd_buffer\r
- movzx eax, [kbd_tail]\r
- add esi, eax\r
- mov ah, byte [esi] ; ah = scancode\r
- cmp ah, 0xFA ; check for some stuff..\r
- je .no_new1\r
- cmp ah, 0xE0\r
- je .no_new1\r
- cmp ah, 0xE1\r
- je .no_new1\r
- test ah, 0x80\r
- jnz .no_new1\r
+ mov esi, kbd_buffer\r
+ movzx eax, [kbd_tail]\r
+ add esi, eax\r
+ mov ah, byte [esi] ; ah = scancode\r
+ cmp ah, 0xFA ; check for some stuff..\r
+ je .no_new1\r
+ cmp ah, 0xE0\r
+ je .no_new1\r
+ cmp ah, 0xE1\r
+ je .no_new1\r
+ test ah, 0x80\r
+ jnz .no_new1\r
\r
- call reboot ; in commands.inc\r
+ call reboot ; in commands.inc\r
\r
;--------------------------;\r
; wait for key and quit ;\r
;--------------------------;\r
.wait_key:\r
- mov ebp, dbg_press\r
- call .print\r
- mov bx, 1091 ; row 13 char 51\r
- call .set_cur\r
+ mov ebp, dbg_press\r
+ call .print\r
+ mov bx, 1091 ; row 13 char 51\r
+ call .set_cur\r
\r
.no_new2:\r
- mov al, [kbd_head]\r
- mov ah, [kbd_tail]\r
- cmp ah, 63 ; if we are at the buffer end,\r
- jne .check2 ; we must check that head != 0\r
- cmp al, 0\r
- je .no_new2 ; we don't have new keys to read\r
- mov [kbd_tail], 0 ; "increase" to 0 (loop buffer)\r
- jmp .done_check2\r
+ mov al, [kbd_head]\r
+ mov ah, [kbd_tail]\r
+ cmp ah, 63 ; if we are at the buffer end,\r
+ jne .check2 ; we must check that head != 0\r
+ cmp al, 0\r
+ je .no_new2 ; we don't have new keys to read\r
+ mov [kbd_tail], 0 ; "increase" to 0 (loop buffer)\r
+ jmp .done_check2\r
.check2:\r
- mov bl, ah\r
- inc bl ; head should be +1 compared to tail\r
- cmp bl, al\r
- je .no_new2\r
- inc [kbd_tail] ; increase\r
+ mov bl, ah\r
+ inc bl ; head should be +1 compared to tail\r
+ cmp bl, al\r
+ je .no_new2\r
+ inc [kbd_tail] ; increase\r
.done_check2:\r
- mov esi, kbd_buffer\r
- movzx eax, [kbd_tail]\r
- add esi, eax\r
- mov ah, byte [esi] ; ah = scancode\r
- cmp ah, 0xFA ; check for some stuff..\r
- je .no_new2\r
- cmp ah, 0xE0\r
- je .no_new2\r
- cmp ah, 0xE1\r
- je .no_new2\r
- test ah, 0x80\r
- jnz .no_new2\r
+ mov esi, kbd_buffer\r
+ movzx eax, [kbd_tail]\r
+ add esi, eax\r
+ mov ah, byte [esi] ; ah = scancode\r
+ cmp ah, 0xFA ; check for some stuff..\r
+ je .no_new2\r
+ cmp ah, 0xE0\r
+ je .no_new2\r
+ cmp ah, 0xE1\r
+ je .no_new2\r
+ test ah, 0x80\r
+ jnz .no_new2\r
\r
- mov dx, 0 ; restore screen as\r
- mov edi, (0xB8000+840) ; it was before.\r
- mov esi, scr_buffer ; same loops as above\r
- .big_loop2: ; but exchanged esi and edi\r
- mov cx, 0\r
+ mov dx, 0 ; restore screen as\r
+ mov edi, (0xB8000+840) ; it was before.\r
+ mov esi, scr_buffer ; same loops as above\r
+ .big_loop2: ; but exchanged esi and edi\r
+ mov cx, 0\r
.small_loop2:\r
- movsb\r
- inc cx\r
- cmp cx, 72\r
- je .end_small2\r
- jmp .small_loop2\r
+ movsb\r
+ inc cx\r
+ cmp cx, 72\r
+ je .end_small2\r
+ jmp .small_loop2\r
.end_small2:\r
- inc dx\r
- cmp dx, 10\r
- je .end_big2\r
- add edi, 88\r
- jmp .big_loop2\r
+ inc dx\r
+ cmp dx, 10\r
+ je .end_big2\r
+ add edi, 88\r
+ jmp .big_loop2\r
.end_big2:\r
\r
- mov bx, [state_cursor]\r
- call .set_cur\r
- mov [dbg_keypress], 1\r
- mov [dbg_error], ' ' ; restore variables.\r
- mov [dbg_error+1], 'n' ; ugly..\r
- mov [dbg_error+2], 'o'\r
- mov [dbg_error+3], 'n'\r
- mov [dbg_error+4], 'e'\r
- mov [dbg_error+5], '.'\r
- mov [dbg_error+6], ' '\r
- mov [dbg_error+7], ' '\r
- mov [dbg_error+8], ' '\r
- mov [dbg_error+9], ' '\r
- mov [dbg_error+10], ' '\r
- mov [dbg_error+11], ' '\r
- mov [dbg_error+12], ' '\r
- mov [dbg_error+13], ' '\r
- mov [dbg_error+14], 0\r
- ret\r
+ mov bx, [state_cursor]\r
+ call .set_cur\r
+ mov [dbg_keypress], 1\r
+ mov [dbg_error], ' ' ; restore variables.\r
+ mov [dbg_error+1], 'n' ; ugly..\r
+ mov [dbg_error+2], 'o'\r
+ mov [dbg_error+3], 'n'\r
+ mov [dbg_error+4], 'e'\r
+ mov [dbg_error+5], '.'\r
+ mov [dbg_error+6], ' '\r
+ mov [dbg_error+7], ' '\r
+ mov [dbg_error+8], ' '\r
+ mov [dbg_error+9], ' '\r
+ mov [dbg_error+10], ' '\r
+ mov [dbg_error+11], ' '\r
+ mov [dbg_error+12], ' '\r
+ mov [dbg_error+13], ' '\r
+ mov [dbg_error+14], 0\r
+ ret\r
\r
;-------------------------------;\r
; subfunctions to inc cursor ;\r
;-------------------------------;\r
.set_cur:\r
- mov [stack_eax2], eax\r
- mov [stack_edx], edx ; can it get any uglier?\r
- mov al, 0x0E\r
- mov ah, bh\r
- mov dx, 0x3D4\r
- out dx, ax\r
- inc ax\r
- mov ah, bl\r
- out dx, ax\r
- mov edx, [stack_edx]\r
- mov eax, [stack_eax2]\r
- ret\r
+ mov [stack_eax2], eax\r
+ mov [stack_edx], edx ; can it get any uglier?\r
+ mov al, 0x0E\r
+ mov ah, bh\r
+ mov dx, 0x3D4\r
+ out dx, ax\r
+ inc ax\r
+ mov ah, bl\r
+ out dx, ax\r
+ mov edx, [stack_edx]\r
+ mov eax, [stack_eax2]\r
+ ret\r
.get_cur:\r
- mov [stack_eax2], eax\r
- mov [stack_edx], edx\r
- mov dx, 0x3D4\r
- mov al, 0x0E\r
- out dx, al\r
- inc dx\r
- in al, dx\r
- mov bh, al\r
- mov al, 0x0F\r
- dec dx\r
- out dx, al\r
- inc dx\r
- in al, dx\r
- mov bl, al\r
- mov edx, [stack_edx]\r
- mov eax, [stack_eax2]\r
- ret\r
- ;--------------------------------;\r
- ; subfunction to print a char ;\r
- ; bl = char, bh = attrib ;\r
- ;--------------------------------;\r
- .print_char:\r
- mov [stack_eax], eax\r
- mov [stack_ebx], ebx\r
- call .get_cur\r
- mov eax, ebx\r
- mov ebx, [stack_ebx]\r
- mov [es:(eax*2 + 0xB8000)], bx\r
- mov ebx, eax\r
- inc bx\r
- call .set_cur\r
- mov ebx, [stack_ebx]\r
- mov eax, [stack_eax]\r
- ret\r
+ mov [stack_eax2], eax\r
+ mov [stack_edx], edx\r
+ mov dx, 0x3D4\r
+ mov al, 0x0E\r
+ out dx, al\r
+ inc dx\r
+ in al, dx\r
+ mov bh, al\r
+ mov al, 0x0F\r
+ dec dx\r
+ out dx, al\r
+ inc dx\r
+ in al, dx\r
+ mov bl, al\r
+ mov edx, [stack_edx]\r
+ mov eax, [stack_eax2]\r
+ ret\r
+ ;--------------------------------;\r
+ ; subfunction to print a char ;\r
+ ; bl = char, bh = attrib ;\r
+ ;--------------------------------;\r
+ .print_char:\r
+ mov [stack_eax], eax\r
+ mov [stack_ebx], ebx\r
+ call .get_cur\r
+ mov eax, ebx\r
+ mov ebx, [stack_ebx]\r
+ mov [es:(eax*2 + 0xB8000)], bx\r
+ mov ebx, eax\r
+ inc bx\r
+ call .set_cur\r
+ mov ebx, [stack_ebx]\r
+ mov eax, [stack_eax]\r
+ ret\r
;------------------------------------------;\r
; subfunction to print 32-bit hex value ;\r
; IN: eax = value, bh = color. ;\r
;------------------------------------------;\r
.print_hex32:\r
- mov ecx, 8\r
+ mov ecx, 8\r
.print_it:\r
- rol eax, 4\r
- movzx edx, al\r
- and edx, 0x0F\r
- or edx, 0x30\r
- cmp edx, 0x39\r
- jna .cont\r
- add edx, 7\r
+ rol eax, 4\r
+ movzx edx, al\r
+ and edx, 0x0F\r
+ or edx, 0x30\r
+ cmp edx, 0x39\r
+ jna .cont\r
+ add edx, 7\r
.cont:\r
- mov bl, dl\r
- call .print_char\r
- loop .print_it\r
- ret\r
- ;-----------------------------------------;\r
- ; subfunction to display asciiz string ;\r
- ; Input: ebp = string ;\r
- ;-----------------------------------------;\r
- .print:\r
- mov al, byte [ebp]\r
- or al, al\r
- jz .done\r
- mov bl, al\r
- mov bh, 0x40 ; standard color for this...\r
- call .print_char\r
- inc ebp\r
- jmp .print\r
- .done:\r
- ret
\ No newline at end of file
+ mov bl, dl\r
+ call .print_char\r
+ loop .print_it\r
+ ret\r
+ ;-----------------------------------------;\r
+ ; subfunction to display asciiz string ;\r
+ ; Input: ebp = string ;\r
+ ;-----------------------------------------;\r
+ .print:\r
+ mov al, byte [ebp]\r
+ or al, al\r
+ jz .done\r
+ mov bl, al\r
+ mov bh, 0x40 ; standard color for this...\r
+ call .print_char\r
+ inc ebp\r
+ jmp .print\r
+ .done:\r
+ ret
\ No newline at end of file
; Unhandled Interrupt ;\r
;------------------------;\r
u_isr:\r
- mov [dbg_keypress], 0 ; in debug.inc\r
- mov [dbg_error], 'U'\r
- mov [dbg_error+1], 'n'\r
- mov [dbg_error+2], 'h'\r
- mov [dbg_error+3], 'a'\r
- mov [dbg_error+4], 'n'\r
- mov [dbg_error+5], 'd'\r
- mov [dbg_error+6], 'l'\r
- mov [dbg_error+7], 'e'\r
- mov [dbg_error+8], 'd'\r
- mov [dbg_error+9], ' '\r
- mov [dbg_error+10], 'I'\r
- mov [dbg_error+11], 'n'\r
- mov [dbg_error+12], 't'\r
- mov [dbg_error+13], ' '\r
- mov [dbg_error+14], 0\r
- call dump_regs\r
+ mov [dbg_keypress], 0 ; in debug.inc\r
+ mov [dbg_error], 'U'\r
+ mov [dbg_error+1], 'n'\r
+ mov [dbg_error+2], 'h'\r
+ mov [dbg_error+3], 'a'\r
+ mov [dbg_error+4], 'n'\r
+ mov [dbg_error+5], 'd'\r
+ mov [dbg_error+6], 'l'\r
+ mov [dbg_error+7], 'e'\r
+ mov [dbg_error+8], 'd'\r
+ mov [dbg_error+9], ' '\r
+ mov [dbg_error+10], 'I'\r
+ mov [dbg_error+11], 'n'\r
+ mov [dbg_error+12], 't'\r
+ mov [dbg_error+13], ' '\r
+ mov [dbg_error+14], 0\r
+ call dump_regs\r
\r
\r
;-------------------------------;\r
; Exception Interrupt no. 00 ;\r
;-------------------------------;\r
isr00:\r
- mov [dbg_keypress], 0\r
- mov [dbg_error], 'D'\r
- mov [dbg_error+1], 'i'\r
- mov [dbg_error+2], 'v'\r
- mov [dbg_error+3], 'i'\r
- mov [dbg_error+4], 'd'\r
- mov [dbg_error+5], 'e'\r
- mov [dbg_error+6], ' '\r
- mov [dbg_error+7], 'e'\r
- mov [dbg_error+8], 'r'\r
- mov [dbg_error+9], 'r'\r
- mov [dbg_error+10], 'o'\r
- mov [dbg_error+11], 'r'\r
- mov [dbg_error+12], ' '\r
- mov [dbg_error+13], ' '\r
- mov [dbg_error+14], 0\r
- call dump_regs\r
+ mov [dbg_keypress], 0\r
+ mov [dbg_error], 'D'\r
+ mov [dbg_error+1], 'i'\r
+ mov [dbg_error+2], 'v'\r
+ mov [dbg_error+3], 'i'\r
+ mov [dbg_error+4], 'd'\r
+ mov [dbg_error+5], 'e'\r
+ mov [dbg_error+6], ' '\r
+ mov [dbg_error+7], 'e'\r
+ mov [dbg_error+8], 'r'\r
+ mov [dbg_error+9], 'r'\r
+ mov [dbg_error+10], 'o'\r
+ mov [dbg_error+11], 'r'\r
+ mov [dbg_error+12], ' '\r
+ mov [dbg_error+13], ' '\r
+ mov [dbg_error+14], 0\r
+ call dump_regs\r
\r
\r
;-------------------------------;\r
; Exception Interrupt no. 01 ;\r
;-------------------------------;\r
isr01:\r
- mov [dbg_keypress], 0\r
- mov [dbg_error], 'D'\r
- mov [dbg_error+1], 'e'\r
- mov [dbg_error+2], 'b'\r
- mov [dbg_error+3], 'u'\r
- mov [dbg_error+4], 'g'\r
- mov [dbg_error+5], ' '\r
- mov [dbg_error+6], 'f'\r
- mov [dbg_error+7], 'a'\r
- mov [dbg_error+8], 'u'\r
- mov [dbg_error+9], 'l'\r
- mov [dbg_error+10], 't'\r
- mov [dbg_error+11], ' '\r
- mov [dbg_error+12], ' '\r
- mov [dbg_error+13], ' '\r
- mov [dbg_error+14], 0\r
- call dump_regs\r
+ mov [dbg_keypress], 0\r
+ mov [dbg_error], 'D'\r
+ mov [dbg_error+1], 'e'\r
+ mov [dbg_error+2], 'b'\r
+ mov [dbg_error+3], 'u'\r
+ mov [dbg_error+4], 'g'\r
+ mov [dbg_error+5], ' '\r
+ mov [dbg_error+6], 'f'\r
+ mov [dbg_error+7], 'a'\r
+ mov [dbg_error+8], 'u'\r
+ mov [dbg_error+9], 'l'\r
+ mov [dbg_error+10], 't'\r
+ mov [dbg_error+11], ' '\r
+ mov [dbg_error+12], ' '\r
+ mov [dbg_error+13], ' '\r
+ mov [dbg_error+14], 0\r
+ call dump_regs\r
\r
\r
;-------------------------------;\r
; Exception Interrupt no. 02 ;\r
;-------------------------------;\r
isr02:\r
- mov [dbg_keypress], 0\r
- mov [dbg_error], 'N'\r
- mov [dbg_error+1], 'M'\r
- mov [dbg_error+2], 'I'\r
- mov [dbg_error+3], ' '\r
- mov [dbg_error+4], 'i'\r
- mov [dbg_error+5], 'n'\r
- mov [dbg_error+6], 't'\r
- mov [dbg_error+7], 'e'\r
- mov [dbg_error+8], 'r'\r
- mov [dbg_error+9], 'r'\r
- mov [dbg_error+10], 'u'\r
- mov [dbg_error+11], 'p'\r
- mov [dbg_error+12], 't'\r
- mov [dbg_error+13], ' '\r
- mov [dbg_error+14], 0\r
- call dump_regs\r
+ mov [dbg_keypress], 0\r
+ mov [dbg_error], 'N'\r
+ mov [dbg_error+1], 'M'\r
+ mov [dbg_error+2], 'I'\r
+ mov [dbg_error+3], ' '\r
+ mov [dbg_error+4], 'i'\r
+ mov [dbg_error+5], 'n'\r
+ mov [dbg_error+6], 't'\r
+ mov [dbg_error+7], 'e'\r
+ mov [dbg_error+8], 'r'\r
+ mov [dbg_error+9], 'r'\r
+ mov [dbg_error+10], 'u'\r
+ mov [dbg_error+11], 'p'\r
+ mov [dbg_error+12], 't'\r
+ mov [dbg_error+13], ' '\r
+ mov [dbg_error+14], 0\r
+ call dump_regs\r
\r
\r
;-------------------------------;\r
; Exception Interrupt no. 03 ;\r
;-------------------------------;\r
isr03:\r
- mov [dbg_keypress], 0\r
- mov [dbg_error], 'B'\r
- mov [dbg_error+1], 'r'\r
- mov [dbg_error+2], 'e'\r
- mov [dbg_error+3], 'a'\r
- mov [dbg_error+4], 'k'\r
- mov [dbg_error+5], 'p'\r
- mov [dbg_error+6], 'o'\r
- mov [dbg_error+7], 'i'\r
- mov [dbg_error+8], 'n'\r
- mov [dbg_error+9], 't'\r
- mov [dbg_error+10], ' '\r
- mov [dbg_error+11], ' '\r
- mov [dbg_error+12], ' '\r
- mov [dbg_error+13], ' '\r
- mov [dbg_error+14], 0\r
- call dump_regs\r
+ mov [dbg_keypress], 0\r
+ mov [dbg_error], 'B'\r
+ mov [dbg_error+1], 'r'\r
+ mov [dbg_error+2], 'e'\r
+ mov [dbg_error+3], 'a'\r
+ mov [dbg_error+4], 'k'\r
+ mov [dbg_error+5], 'p'\r
+ mov [dbg_error+6], 'o'\r
+ mov [dbg_error+7], 'i'\r
+ mov [dbg_error+8], 'n'\r
+ mov [dbg_error+9], 't'\r
+ mov [dbg_error+10], ' '\r
+ mov [dbg_error+11], ' '\r
+ mov [dbg_error+12], ' '\r
+ mov [dbg_error+13], ' '\r
+ mov [dbg_error+14], 0\r
+ call dump_regs\r
\r
\r
;-------------------------------;\r
; Exception Interrupt no. 04 ;\r
;-------------------------------;\r
isr04:\r
- mov [dbg_keypress], 0\r
- mov [dbg_error], 'O'\r
- mov [dbg_error+1], 'v'\r
- mov [dbg_error+2], 'e'\r
- mov [dbg_error+3], 'r'\r
- mov [dbg_error+4], 'f'\r
- mov [dbg_error+5], 'l'\r
- mov [dbg_error+6], 'o'\r
- mov [dbg_error+7], 'w'\r
- mov [dbg_error+8], ' '\r
- mov [dbg_error+9], 'f'\r
- mov [dbg_error+10], 'a'\r
- mov [dbg_error+11], 'u'\r
- mov [dbg_error+12], 'l'\r
- mov [dbg_error+13], 't'\r
- mov [dbg_error+14], 0\r
- call dump_regs\r
+ mov [dbg_keypress], 0\r
+ mov [dbg_error], 'O'\r
+ mov [dbg_error+1], 'v'\r
+ mov [dbg_error+2], 'e'\r
+ mov [dbg_error+3], 'r'\r
+ mov [dbg_error+4], 'f'\r
+ mov [dbg_error+5], 'l'\r
+ mov [dbg_error+6], 'o'\r
+ mov [dbg_error+7], 'w'\r
+ mov [dbg_error+8], ' '\r
+ mov [dbg_error+9], 'f'\r
+ mov [dbg_error+10], 'a'\r
+ mov [dbg_error+11], 'u'\r
+ mov [dbg_error+12], 'l'\r
+ mov [dbg_error+13], 't'\r
+ mov [dbg_error+14], 0\r
+ call dump_regs\r
\r
\r
;-------------------------------;\r
; Exception Interrupt no. 05 ;\r
;-------------------------------;\r
isr05:\r
- mov [dbg_keypress], 0\r
- mov [dbg_error], 'B'\r
- mov [dbg_error+1], 'o'\r
- mov [dbg_error+2], 'u'\r
- mov [dbg_error+3], 'n'\r
- mov [dbg_error+4], 'd'\r
- mov [dbg_error+5], 's'\r
- mov [dbg_error+6], ' '\r
- mov [dbg_error+7], 'c'\r
- mov [dbg_error+8], 'h'\r
- mov [dbg_error+9], 'e'\r
- mov [dbg_error+10], 'c'\r
- mov [dbg_error+11], 'k'\r
- mov [dbg_error+12], ' '\r
- mov [dbg_error+13], ' '\r
- mov [dbg_error+14], 0\r
- call dump_regs\r
+ mov [dbg_keypress], 0\r
+ mov [dbg_error], 'B'\r
+ mov [dbg_error+1], 'o'\r
+ mov [dbg_error+2], 'u'\r
+ mov [dbg_error+3], 'n'\r
+ mov [dbg_error+4], 'd'\r
+ mov [dbg_error+5], 's'\r
+ mov [dbg_error+6], ' '\r
+ mov [dbg_error+7], 'c'\r
+ mov [dbg_error+8], 'h'\r
+ mov [dbg_error+9], 'e'\r
+ mov [dbg_error+10], 'c'\r
+ mov [dbg_error+11], 'k'\r
+ mov [dbg_error+12], ' '\r
+ mov [dbg_error+13], ' '\r
+ mov [dbg_error+14], 0\r
+ call dump_regs\r
\r
\r
;-------------------------------;\r
; Exception Interrupt no. 06 ;\r
;-------------------------------;\r
isr06:\r
- mov [dbg_keypress], 0\r
- mov [dbg_error], 'I'\r
- mov [dbg_error+1], 'n'\r
- mov [dbg_error+2], 'v'\r
- mov [dbg_error+3], 'a'\r
- mov [dbg_error+4], 'l'\r
- mov [dbg_error+5], 'i'\r
- mov [dbg_error+6], 'd'\r
- mov [dbg_error+7], ' '\r
- mov [dbg_error+8], 'o'\r
- mov [dbg_error+9], 'p'\r
- mov [dbg_error+10], 'c'\r
- mov [dbg_error+11], 'o'\r
- mov [dbg_error+12], 'd'\r
- mov [dbg_error+13], 'e'\r
- mov [dbg_error+14], 0\r
- call dump_regs\r
+ mov [dbg_keypress], 0\r
+ mov [dbg_error], 'I'\r
+ mov [dbg_error+1], 'n'\r
+ mov [dbg_error+2], 'v'\r
+ mov [dbg_error+3], 'a'\r
+ mov [dbg_error+4], 'l'\r
+ mov [dbg_error+5], 'i'\r
+ mov [dbg_error+6], 'd'\r
+ mov [dbg_error+7], ' '\r
+ mov [dbg_error+8], 'o'\r
+ mov [dbg_error+9], 'p'\r
+ mov [dbg_error+10], 'c'\r
+ mov [dbg_error+11], 'o'\r
+ mov [dbg_error+12], 'd'\r
+ mov [dbg_error+13], 'e'\r
+ mov [dbg_error+14], 0\r
+ call dump_regs\r
\r
\r
;-------------------------------;\r
; Exception Interrupt no. 07 ;\r
;-------------------------------;\r
isr07:\r
- mov [dbg_keypress], 0\r
- mov [dbg_error], 'N'\r
- mov [dbg_error+1], 'o'\r
- mov [dbg_error+2], ' '\r
- mov [dbg_error+3], 'c'\r
- mov [dbg_error+4], 'o'\r
- mov [dbg_error+5], 'p'\r
- mov [dbg_error+6], '.'\r
- mov [dbg_error+7], ' '\r
- mov [dbg_error+8], 'a'\r
- mov [dbg_error+9], 'v'\r
- mov [dbg_error+10], 'a'\r
- mov [dbg_error+11], 'i'\r
- mov [dbg_error+12], 'l'\r
- mov [dbg_error+13], '.'\r
- mov [dbg_error+14], 0\r
- call dump_regs\r
+ mov [dbg_keypress], 0\r
+ mov [dbg_error], 'N'\r
+ mov [dbg_error+1], 'o'\r
+ mov [dbg_error+2], ' '\r
+ mov [dbg_error+3], 'c'\r
+ mov [dbg_error+4], 'o'\r
+ mov [dbg_error+5], 'p'\r
+ mov [dbg_error+6], '.'\r
+ mov [dbg_error+7], ' '\r
+ mov [dbg_error+8], 'a'\r
+ mov [dbg_error+9], 'v'\r
+ mov [dbg_error+10], 'a'\r
+ mov [dbg_error+11], 'i'\r
+ mov [dbg_error+12], 'l'\r
+ mov [dbg_error+13], '.'\r
+ mov [dbg_error+14], 0\r
+ call dump_regs\r
\r
\r
;-------------------------------;\r
; Exception Interrupt no. 08 ;\r
;-------------------------------;\r
isr08:\r
- mov [dbg_keypress], 0\r
- mov [dbg_error], 'D'\r
- mov [dbg_error+1], 'o'\r
- mov [dbg_error+2], 'u'\r
- mov [dbg_error+3], 'b'\r
- mov [dbg_error+4], 'l'\r
- mov [dbg_error+5], 'e'\r
- mov [dbg_error+6], ' '\r
- mov [dbg_error+7], 'f'\r
- mov [dbg_error+8], 'a'\r
- mov [dbg_error+9], 'u'\r
- mov [dbg_error+10], 'l'\r
- mov [dbg_error+11], 't'\r
- mov [dbg_error+12], ' '\r
- mov [dbg_error+13], ' '\r
- mov [dbg_error+14], 0\r
- call dump_regs\r
+ mov [dbg_keypress], 0\r
+ mov [dbg_error], 'D'\r
+ mov [dbg_error+1], 'o'\r
+ mov [dbg_error+2], 'u'\r
+ mov [dbg_error+3], 'b'\r
+ mov [dbg_error+4], 'l'\r
+ mov [dbg_error+5], 'e'\r
+ mov [dbg_error+6], ' '\r
+ mov [dbg_error+7], 'f'\r
+ mov [dbg_error+8], 'a'\r
+ mov [dbg_error+9], 'u'\r
+ mov [dbg_error+10], 'l'\r
+ mov [dbg_error+11], 't'\r
+ mov [dbg_error+12], ' '\r
+ mov [dbg_error+13], ' '\r
+ mov [dbg_error+14], 0\r
+ call dump_regs\r
\r
\r
;-------------------------------;\r
; Exception Interrupt no. 09 ;\r
;-------------------------------;\r
isr09:\r
- mov [dbg_keypress], 0\r
- mov [dbg_error], 'C'\r
- mov [dbg_error+1], 'o'\r
- mov [dbg_error+2], 'p'\r
- mov [dbg_error+3], 'r'\r
- mov [dbg_error+4], 'o'\r
- mov [dbg_error+5], '.'\r
- mov [dbg_error+6], ' '\r
- mov [dbg_error+7], 's'\r
- mov [dbg_error+8], 'e'\r
- mov [dbg_error+9], 'g'\r
- mov [dbg_error+10], 'm'\r
- mov [dbg_error+11], 'e'\r
- mov [dbg_error+12], 'n'\r
- mov [dbg_error+13], 't'\r
- mov [dbg_error+14], 0\r
- call dump_regs\r
+ mov [dbg_keypress], 0\r
+ mov [dbg_error], 'C'\r
+ mov [dbg_error+1], 'o'\r
+ mov [dbg_error+2], 'p'\r
+ mov [dbg_error+3], 'r'\r
+ mov [dbg_error+4], 'o'\r
+ mov [dbg_error+5], '.'\r
+ mov [dbg_error+6], ' '\r
+ mov [dbg_error+7], 's'\r
+ mov [dbg_error+8], 'e'\r
+ mov [dbg_error+9], 'g'\r
+ mov [dbg_error+10], 'm'\r
+ mov [dbg_error+11], 'e'\r
+ mov [dbg_error+12], 'n'\r
+ mov [dbg_error+13], 't'\r
+ mov [dbg_error+14], 0\r
+ call dump_regs\r
\r
\r
;-------------------------------;\r
; Exception Interrupt no. 10 ;\r
;-------------------------------;\r
isr0A:\r
- mov [dbg_keypress], 0\r
- mov [dbg_error], 'I'\r
- mov [dbg_error+1], 'n'\r
- mov [dbg_error+2], 'v'\r
- mov [dbg_error+3], 'a'\r
- mov [dbg_error+4], 'l'\r
- mov [dbg_error+5], 'i'\r
- mov [dbg_error+6], 'd'\r
- mov [dbg_error+7], ' '\r
- mov [dbg_error+8], 'T'\r
- mov [dbg_error+9], 'S'\r
- mov [dbg_error+10], 'S'\r
- mov [dbg_error+11], '!'\r
- mov [dbg_error+12], ' '\r
- mov [dbg_error+13], ' '\r
- mov [dbg_error+14], 0\r
- call dump_regs\r
+ mov [dbg_keypress], 0\r
+ mov [dbg_error], 'I'\r
+ mov [dbg_error+1], 'n'\r
+ mov [dbg_error+2], 'v'\r
+ mov [dbg_error+3], 'a'\r
+ mov [dbg_error+4], 'l'\r
+ mov [dbg_error+5], 'i'\r
+ mov [dbg_error+6], 'd'\r
+ mov [dbg_error+7], ' '\r
+ mov [dbg_error+8], 'T'\r
+ mov [dbg_error+9], 'S'\r
+ mov [dbg_error+10], 'S'\r
+ mov [dbg_error+11], '!'\r
+ mov [dbg_error+12], ' '\r
+ mov [dbg_error+13], ' '\r
+ mov [dbg_error+14], 0\r
+ call dump_regs\r
\r
\r
;-------------------------------;\r
; Exception Interrupt no. 11 ;\r
;-------------------------------;\r
isr0B:\r
- mov [dbg_keypress], 0\r
- mov [dbg_error], 'N'\r
- mov [dbg_error+1], 'o'\r
- mov [dbg_error+2], ' '\r
- mov [dbg_error+3], 's'\r
- mov [dbg_error+4], 'e'\r
- mov [dbg_error+5], 'g'\r
- mov [dbg_error+6], 'm'\r
- mov [dbg_error+7], 'e'\r
- mov [dbg_error+8], 'n'\r
- mov [dbg_error+9], 't'\r
- mov [dbg_error+10], '!'\r
- mov [dbg_error+11], ' '\r
- mov [dbg_error+12], ' '\r
- mov [dbg_error+13], ' '\r
- mov [dbg_error+14], 0\r
- call dump_regs\r
+ mov [dbg_keypress], 0\r
+ mov [dbg_error], 'N'\r
+ mov [dbg_error+1], 'o'\r
+ mov [dbg_error+2], ' '\r
+ mov [dbg_error+3], 's'\r
+ mov [dbg_error+4], 'e'\r
+ mov [dbg_error+5], 'g'\r
+ mov [dbg_error+6], 'm'\r
+ mov [dbg_error+7], 'e'\r
+ mov [dbg_error+8], 'n'\r
+ mov [dbg_error+9], 't'\r
+ mov [dbg_error+10], '!'\r
+ mov [dbg_error+11], ' '\r
+ mov [dbg_error+12], ' '\r
+ mov [dbg_error+13], ' '\r
+ mov [dbg_error+14], 0\r
+ call dump_regs\r
\r
\r
;-------------------------------;\r
; Exception Interrupt no. 12 ;\r
;-------------------------------;\r
isr0C:\r
- mov [dbg_keypress], 0\r
- mov [dbg_error], 'S'\r
- mov [dbg_error+1], 't'\r
- mov [dbg_error+2], 'a'\r
- mov [dbg_error+3], 'c'\r
- mov [dbg_error+4], 'k'\r
- mov [dbg_error+5], ' '\r
- mov [dbg_error+6], 'f'\r
- mov [dbg_error+7], 'a'\r
- mov [dbg_error+8], 'u'\r
- mov [dbg_error+9], 'l'\r
- mov [dbg_error+10], 't'\r
- mov [dbg_error+11], '!'\r
- mov [dbg_error+12], ' '\r
- mov [dbg_error+13], ' '\r
- mov [dbg_error+14], 0\r
- call dump_regs\r
+ mov [dbg_keypress], 0\r
+ mov [dbg_error], 'S'\r
+ mov [dbg_error+1], 't'\r
+ mov [dbg_error+2], 'a'\r
+ mov [dbg_error+3], 'c'\r
+ mov [dbg_error+4], 'k'\r
+ mov [dbg_error+5], ' '\r
+ mov [dbg_error+6], 'f'\r
+ mov [dbg_error+7], 'a'\r
+ mov [dbg_error+8], 'u'\r
+ mov [dbg_error+9], 'l'\r
+ mov [dbg_error+10], 't'\r
+ mov [dbg_error+11], '!'\r
+ mov [dbg_error+12], ' '\r
+ mov [dbg_error+13], ' '\r
+ mov [dbg_error+14], 0\r
+ call dump_regs\r
\r
\r
;-------------------------------;\r
; Exception Interrupt no. 13 ;\r
;-------------------------------;\r
isr0D:\r
- mov [dbg_keypress], 0\r
- mov [dbg_error], 'T'\r
- mov [dbg_error+1], 'r'\r
- mov [dbg_error+2], 'i'\r
- mov [dbg_error+3], 'p'\r
- mov [dbg_error+4], 'l'\r
- mov [dbg_error+5], 'e'\r
- mov [dbg_error+6], ' '\r
- mov [dbg_error+7], 'f'\r
- mov [dbg_error+8], 'a'\r
- mov [dbg_error+9], 'u'\r
- mov [dbg_error+10], 'l'\r
- mov [dbg_error+11], 't'\r
- mov [dbg_error+12], '!'\r
- mov [dbg_error+13], ' '\r
- mov [dbg_error+14], 0\r
- call dump_regs\r
+ mov [dbg_keypress], 0\r
+ mov [dbg_error], 'T'\r
+ mov [dbg_error+1], 'r'\r
+ mov [dbg_error+2], 'i'\r
+ mov [dbg_error+3], 'p'\r
+ mov [dbg_error+4], 'l'\r
+ mov [dbg_error+5], 'e'\r
+ mov [dbg_error+6], ' '\r
+ mov [dbg_error+7], 'f'\r
+ mov [dbg_error+8], 'a'\r
+ mov [dbg_error+9], 'u'\r
+ mov [dbg_error+10], 'l'\r
+ mov [dbg_error+11], 't'\r
+ mov [dbg_error+12], '!'\r
+ mov [dbg_error+13], ' '\r
+ mov [dbg_error+14], 0\r
+ call dump_regs\r
\r
\r
;-------------------------------;\r
; Exception Interrupt no. 14 ;\r
;-------------------------------;\r
isr0E:\r
- mov [dbg_keypress], 0\r
- mov [dbg_error], 'P'\r
- mov [dbg_error+1], 'a'\r
- mov [dbg_error+2], 'g'\r
- mov [dbg_error+3], 'e'\r
- mov [dbg_error+4], ' '\r
- mov [dbg_error+5], 'f'\r
- mov [dbg_error+6], 'a'\r
- mov [dbg_error+7], 'u'\r
- mov [dbg_error+8], 'l'\r
- mov [dbg_error+9], 't'\r
- mov [dbg_error+10], '!'\r
- mov [dbg_error+11], ' '\r
- mov [dbg_error+12], ' '\r
- mov [dbg_error+13], ' '\r
- mov [dbg_error+14], 0\r
- call dump_regs\r
+ mov [dbg_keypress], 0\r
+ mov [dbg_error], 'P'\r
+ mov [dbg_error+1], 'a'\r
+ mov [dbg_error+2], 'g'\r
+ mov [dbg_error+3], 'e'\r
+ mov [dbg_error+4], ' '\r
+ mov [dbg_error+5], 'f'\r
+ mov [dbg_error+6], 'a'\r
+ mov [dbg_error+7], 'u'\r
+ mov [dbg_error+8], 'l'\r
+ mov [dbg_error+9], 't'\r
+ mov [dbg_error+10], '!'\r
+ mov [dbg_error+11], ' '\r
+ mov [dbg_error+12], ' '\r
+ mov [dbg_error+13], ' '\r
+ mov [dbg_error+14], 0\r
+ call dump_regs\r
\r
\r
;-------------------------------;\r
; Exception Interrupt no. 16 ;\r
;-------------------------------;\r
isr10:\r
- mov [dbg_keypress], 0\r
- mov [dbg_error], 'C'\r
- mov [dbg_error+1], 'o'\r
- mov [dbg_error+2], 'p'\r
- mov [dbg_error+3], 'r'\r
- mov [dbg_error+4], 'o'\r
- mov [dbg_error+5], 'c'\r
- mov [dbg_error+6], 'e'\r
- mov [dbg_error+7], 's'\r
- mov [dbg_error+8], 's'\r
- mov [dbg_error+9], 'o'\r
- mov [dbg_error+10], 'r'\r
- mov [dbg_error+11], '!'\r
- mov [dbg_error+12], ' '\r
- mov [dbg_error+13], ' '\r
- mov [dbg_error+14], 0\r
- call dump_regs\r
+ mov [dbg_keypress], 0\r
+ mov [dbg_error], 'C'\r
+ mov [dbg_error+1], 'o'\r
+ mov [dbg_error+2], 'p'\r
+ mov [dbg_error+3], 'r'\r
+ mov [dbg_error+4], 'o'\r
+ mov [dbg_error+5], 'c'\r
+ mov [dbg_error+6], 'e'\r
+ mov [dbg_error+7], 's'\r
+ mov [dbg_error+8], 's'\r
+ mov [dbg_error+9], 'o'\r
+ mov [dbg_error+10], 'r'\r
+ mov [dbg_error+11], '!'\r
+ mov [dbg_error+12], ' '\r
+ mov [dbg_error+13], ' '\r
+ mov [dbg_error+14], 0\r
+ call dump_regs\r
\r
\r
;-------------------------------;\r
; Exception Interrupt no. 17 ;\r
;-------------------------------;\r
isr11:\r
- mov [dbg_keypress], 0\r
- mov [dbg_error], 'A'\r
- mov [dbg_error+1], 'l'\r
- mov [dbg_error+2], 'i'\r
- mov [dbg_error+3], 'g'\r
- mov [dbg_error+4], 'n'\r
- mov [dbg_error+5], 'm'\r
- mov [dbg_error+6], 'e'\r
- mov [dbg_error+7], 'n'\r
- mov [dbg_error+8], 't'\r
- mov [dbg_error+9], ' '\r
- mov [dbg_error+10], 'c'\r
- mov [dbg_error+11], 'h'\r
- mov [dbg_error+12], 'k'\r
- mov [dbg_error+13], '.'\r
- mov [dbg_error+14], 0\r
- call dump_regs\r
+ mov [dbg_keypress], 0\r
+ mov [dbg_error], 'A'\r
+ mov [dbg_error+1], 'l'\r
+ mov [dbg_error+2], 'i'\r
+ mov [dbg_error+3], 'g'\r
+ mov [dbg_error+4], 'n'\r
+ mov [dbg_error+5], 'm'\r
+ mov [dbg_error+6], 'e'\r
+ mov [dbg_error+7], 'n'\r
+ mov [dbg_error+8], 't'\r
+ mov [dbg_error+9], ' '\r
+ mov [dbg_error+10], 'c'\r
+ mov [dbg_error+11], 'h'\r
+ mov [dbg_error+12], 'k'\r
+ mov [dbg_error+13], '.'\r
+ mov [dbg_error+14], 0\r
+ call dump_regs\r
\r
\r
;-------------------------------;\r
; Exception Interrupt no. 18 ;\r
;-------------------------------;\r
isr12:\r
- mov [dbg_keypress], 0\r
- mov [dbg_error], 'M'\r
- mov [dbg_error+1], 'a'\r
- mov [dbg_error+2], 'c'\r
- mov [dbg_error+3], 'h'\r
- mov [dbg_error+4], 'i'\r
- mov [dbg_error+5], 'n'\r
- mov [dbg_error+6], 'e'\r
- mov [dbg_error+7], ' '\r
- mov [dbg_error+8], 'c'\r
- mov [dbg_error+9], 'h'\r
- mov [dbg_error+10], 'e'\r
- mov [dbg_error+11], 'c'\r
- mov [dbg_error+12], 'k'\r
- mov [dbg_error+13], '!'\r
- mov [dbg_error+14], 0\r
- call dump_regs\r
+ mov [dbg_keypress], 0\r
+ mov [dbg_error], 'M'\r
+ mov [dbg_error+1], 'a'\r
+ mov [dbg_error+2], 'c'\r
+ mov [dbg_error+3], 'h'\r
+ mov [dbg_error+4], 'i'\r
+ mov [dbg_error+5], 'n'\r
+ mov [dbg_error+6], 'e'\r
+ mov [dbg_error+7], ' '\r
+ mov [dbg_error+8], 'c'\r
+ mov [dbg_error+9], 'h'\r
+ mov [dbg_error+10], 'e'\r
+ mov [dbg_error+11], 'c'\r
+ mov [dbg_error+12], 'k'\r
+ mov [dbg_error+13], '!'\r
+ mov [dbg_error+14], 0\r
+ call dump_regs\r
\r
\r
;-------------------------------;\r
; Exception Interrupt no. 19 ;\r
;-------------------------------;\r
isr13:\r
- mov [dbg_keypress], 0\r
- mov [dbg_error], 'S'\r
- mov [dbg_error+1], 'I'\r
- mov [dbg_error+2], 'M'\r
- mov [dbg_error+3], 'D'\r
- mov [dbg_error+4], ' '\r
- mov [dbg_error+5], 'f'\r
- mov [dbg_error+6], 'l'\r
- mov [dbg_error+7], 'o'\r
- mov [dbg_error+8], 'a'\r
- mov [dbg_error+9], 't'\r
- mov [dbg_error+10], '.'\r
- mov [dbg_error+11], '-'\r
- mov [dbg_error+12], 'p'\r
- mov [dbg_error+13], '.'\r
- mov [dbg_error+14], 0\r
- call dump_regs\r
+ mov [dbg_keypress], 0\r
+ mov [dbg_error], 'S'\r
+ mov [dbg_error+1], 'I'\r
+ mov [dbg_error+2], 'M'\r
+ mov [dbg_error+3], 'D'\r
+ mov [dbg_error+4], ' '\r
+ mov [dbg_error+5], 'f'\r
+ mov [dbg_error+6], 'l'\r
+ mov [dbg_error+7], 'o'\r
+ mov [dbg_error+8], 'a'\r
+ mov [dbg_error+9], 't'\r
+ mov [dbg_error+10], '.'\r
+ mov [dbg_error+11], '-'\r
+ mov [dbg_error+12], 'p'\r
+ mov [dbg_error+13], '.'\r
+ mov [dbg_error+14], 0\r
+ call dump_regs\r
\r
\r
\r
; ISR 20. The timer. ;\r
;--------------------------;\r
isr20:\r
- pusha\r
- push gs\r
- push fs\r
- push ds\r
- push es\r
+ pusha\r
+ push gs\r
+ push fs\r
+ push ds\r
+ push es\r
\r
- call timer ; in timer.inc\r
+ call timer ; in timer.inc\r
\r
- pop es\r
- pop ds\r
- pop fs\r
- pop gs\r
- popa\r
- iret\r
+ pop es\r
+ pop ds\r
+ pop fs\r
+ pop gs\r
+ popa\r
+ iret\r
\r
\r
;--------------------------;\r
; Keyboard IRQ. ISR 21. ;\r
;--------------------------;\r
isr21:\r
- pusha\r
- push gs\r
- push fs\r
- push ds\r
- push es\r
- push esi\r
+ pusha\r
+ push gs\r
+ push fs\r
+ push ds\r
+ push es\r
+ push esi\r
\r
- call keyboard_isr ; Located in keyboard.inc\r
+ call keyboard_isr ; Located in keyboard.inc\r
\r
- pop esi\r
- pop es\r
- pop ds\r
- pop fs\r
- pop gs\r
- popa\r
- iret\r
+ pop esi\r
+ pop es\r
+ pop ds\r
+ pop fs\r
+ pop gs\r
+ popa\r
+ iret\r
\r
\r
;---------------------;\r
; Interrupt no. 50 ;\r
;---------------------;\r
isr32:\r
- push gs\r
- push fs\r
- push ds\r
- push es\r
-\r
- call interrupt_32 ; Located in sys_ints.inc\r
-\r
- pop es\r
- pop ds\r
- pop fs\r
- pop gs\r
- iret
\ No newline at end of file
+ push gs\r
+ push fs\r
+ push ds\r
+ push es\r
+\r
+ call interrupt_32 ; Located in sys_ints.inc\r
+\r
+ pop es\r
+ pop ds\r
+ pop fs\r
+ pop gs\r
+ iret
\ No newline at end of file
; Variabels ;\r
;--------------;\r
\r
- ;--------------------------------------------------------------------------------;\r
- ; _______________________ Keyboard buffer system ;\r
- ; | | | | | | | | | | | | ;\r
- ; +---------------------+ ;\r
- ; | +----------> kbd_head, here is where we put new scan-codes. ;\r
- ; +--------------------> kbd_tail, where we last read a key. this means ;\r
- ; that we have 4 new scan-codes to read before we catch up. ;\r
- ;--------------------------------------------------------------------------------;\r
- kbd_buffer db ' A 64-byte '\r
- db ' keyboard buffer '\r
- kbd_head db 1 ; head must be +1 from tail\r
- kbd_tail db 0\r
-\r
- ;-------------------------------------------------------------------------;\r
- ; _________________ Flag byte: ;\r
- ; |1|1|0|0|0|1|1|1| ;\r
- ; +---------------+ 1 = True 0 = False ;\r
- ; | | | | | | | +---> shift key ;\r
- ; | | | | | | +-----> ctrl key ;\r
- ; | | | | | +-------> alt key ;\r
- ; | | | | +---------> reserved bit ;\r
- ; | | | +-----------> reserved bit ;\r
- ; | | +-------------> reserved bit ;\r
- ; | +---------------> ctrl + alt + del ;\r
- ; +-----------------> key released ;\r
- ;-------------------------------------------------------------------------;\r
- kbd_flags db 0 ; flag byte\r
-\r
- ;-------------------------------------------------------------------------;\r
- ; _________________ LED status byte: ;\r
- ; |0|0|0|0|0|1|1|1| ;\r
- ; +---------------+ 1 = True 0 = False ;\r
- ; | | +---> scroll lock ;\r
- ; | +-----> num lock ;\r
- ; +-------> caps lock ;\r
- ;-------------------------------------------------------------------------;\r
- kbd_status db 0 ; LED statusbyte\r
+ ;--------------------------------------------------------------------------------;\r
+ ; _______________________ Keyboard buffer system ;\r
+ ; | | | | | | | | | | | | ;\r
+ ; +---------------------+ ;\r
+ ; | +----------> kbd_head, here is where we put new scan-codes. ;\r
+ ; +--------------------> kbd_tail, where we last read a key. this means ;\r
+ ; that we have 4 new scan-codes to read before we catch up. ;\r
+ ;--------------------------------------------------------------------------------;\r
+ kbd_buffer db ' A 64-byte '\r
+ db ' keyboard buffer '\r
+ kbd_head db 1 ; head must be +1 from tail\r
+ kbd_tail db 0\r
+\r
+ ;-------------------------------------------------------------------------;\r
+ ; _________________ Flag byte: ;\r
+ ; |1|1|0|0|0|1|1|1| ;\r
+ ; +---------------+ 1 = True 0 = False ;\r
+ ; | | | | | | | +---> shift key ;\r
+ ; | | | | | | +-----> ctrl key ;\r
+ ; | | | | | +-------> alt key ;\r
+ ; | | | | +---------> reserved bit ;\r
+ ; | | | +-----------> reserved bit ;\r
+ ; | | +-------------> reserved bit ;\r
+ ; | +---------------> ctrl + alt + del ;\r
+ ; +-----------------> key released ;\r
+ ;-------------------------------------------------------------------------;\r
+ kbd_flags db 0 ; flag byte\r
+\r
+ ;-------------------------------------------------------------------------;\r
+ ; _________________ LED status byte: ;\r
+ ; |0|0|0|0|0|1|1|1| ;\r
+ ; +---------------+ 1 = True 0 = False ;\r
+ ; | | +---> scroll lock ;\r
+ ; | +-----> num lock ;\r
+ ; +-------> caps lock ;\r
+ ;-------------------------------------------------------------------------;\r
+ kbd_status db 0 ; LED statusbyte\r
\r
\r
;----------------------;\r
; Keyboard IRQ ;\r
;----------------------;\r
keyboard_isr:\r
- push eax\r
-\r
- ;-------------------------;\r
- ; get the scancode ;\r
- ;-------------------------;\r
- xor eax, eax\r
- in al, 0x60\r
-\r
- ;------------------------------;\r
- ; check if key was released ;\r
- ;------------------------------;\r
- test al, 0x80\r
- jz .key_down\r
- and byte [kbd_flags], 01111111b ; key up..\r
-\r
- cmp al, 42+128 ; left shift up?\r
- je .shift_up\r
- cmp al, 54+128 ; right shift up?\r
- je .shift_up\r
-\r
- cmp al, 29+128 ; ctrl up?\r
- je .ctrl_up\r
-\r
- cmp al, 83+128 ; del up?\r
- je .del_up\r
-\r
- cmp al, 56+128 ; alt up?\r
- je .alt_up\r
- jmp .end\r
-\r
- ;--------------------;\r
- ; it was released ;\r
- ;--------------------;\r
- .shift_up:\r
- and byte [kbd_flags], 11111110b\r
- jmp .end\r
-\r
- .del_up:\r
- jmp .CAD_off\r
-\r
- .ctrl_up:\r
- and byte [kbd_flags], 11111101b ; ctrl off.\r
- jmp .CAD_off\r
-\r
- .alt_up:\r
- and byte [kbd_flags], 11111011b ; alt off.\r
- jmp .CAD_off\r
-\r
- .CAD_off:\r
- test byte [kbd_flags], 01000000b\r
- jz .CAD_is_off\r
- and byte [kbd_flags], 10111111b ; ctrl+alt+del bit off.\r
- .CAD_is_off:\r
- jmp .end\r
-\r
- ;----------------------------------------------;\r
- ; a key was pressed, check for special keys ;\r
- ;----------------------------------------------;\r
- .key_down:\r
- or byte [kbd_flags], 10000000b\r
-\r
- .shift:\r
- cmp al, 42\r
- jnz .check_rshift\r
- or byte [kbd_flags], 00000001b\r
- jmp .end\r
-\r
- .check_rshift:\r
- cmp al, 54\r
- jnz .check_ctrl\r
- or byte [kbd_flags], 00000001b\r
- jmp .end\r
-\r
- .check_ctrl:\r
- cmp al, 29\r
- jnz .check_alt\r
- or byte [kbd_flags], 00000010b\r
- jmp .end\r
-\r
- .check_alt:\r
- cmp al, 56\r
- jnz .ctrl_alt_del\r
- or byte [kbd_flags], 00000100b\r
- jmp .end\r
-\r
- .ctrl_alt_del:\r
- test byte [kbd_flags], 00000110b ; check for ctrl+alt\r
- jz .check_caps\r
- cmp al, 83 ; check for delete\r
- jne .check_caps\r
- or byte [kbd_flags], 01000000b ; ctrl+alt+del bit on.\r
-\r
- ;-------------------------------------;\r
- ; toggle caps, num and scroll lock ;\r
- ;-------------------------------------;\r
- .check_caps:\r
- cmp al, 58\r
- jnz .check_num\r
- xor byte [kbd_status], 4\r
- call update_leds\r
- jmp .end\r
-\r
- .check_num:\r
- cmp al, 69\r
- jnz .check_scroll\r
- xor byte [kbd_status], 2\r
- call update_leds\r
- jmp .end\r
-\r
- .check_scroll:\r
- cmp al, 70\r
- jnz .end\r
- xor byte [kbd_status], 1\r
- call update_leds\r
- jmp .end\r
-\r
- ;-----------------------------------;\r
- ; put the scancode in the buffer ;\r
- ;-----------------------------------;\r
- .end:\r
- push eax\r
- mov edi, kbd_buffer\r
- xor eax, eax\r
- mov al, [kbd_head]\r
- add edi, eax\r
- pop eax\r
- stosb\r
- cmp [kbd_head], 63 ; if we reach the buffer\r
- jne .cont1 ; end, go back to 0.\r
- cmp [kbd_tail], 0\r
- je .error\r
- mov [kbd_head], 0\r
- jmp .quit\r
- .cont1:\r
- mov ah, [kbd_tail]\r
- mov al, [kbd_head]\r
- add al, 1\r
- cmp ah, al\r
- je .error\r
- inc [kbd_head]\r
- jmp .quit\r
- .error:\r
- call beep ; pc_speaker.inc\r
- mov [kbd_head], 1 ; fix it as good\r
- mov [kbd_tail], 0 ; as possible.. :S\r
- .quit:\r
- mov al, 0x20\r
- out 0x20, al\r
- pop eax\r
- ret\r
+ push eax\r
+\r
+ ;-------------------------;\r
+ ; get the scancode ;\r
+ ;-------------------------;\r
+ xor eax, eax\r
+ in al, 0x60\r
+\r
+ ;------------------------------;\r
+ ; check if key was released ;\r
+ ;------------------------------;\r
+ test al, 0x80\r
+ jz .key_down\r
+ and byte [kbd_flags], 01111111b ; key up..\r
+\r
+ cmp al, 42+128 ; left shift up?\r
+ je .shift_up\r
+ cmp al, 54+128 ; right shift up?\r
+ je .shift_up\r
+\r
+ cmp al, 29+128 ; ctrl up?\r
+ je .ctrl_up\r
+\r
+ cmp al, 83+128 ; del up?\r
+ je .del_up\r
+\r
+ cmp al, 56+128 ; alt up?\r
+ je .alt_up\r
+ jmp .end\r
+\r
+ ;--------------------;\r
+ ; it was released ;\r
+ ;--------------------;\r
+ .shift_up:\r
+ and byte [kbd_flags], 11111110b\r
+ jmp .end\r
+\r
+ .del_up:\r
+ jmp .CAD_off\r
+\r
+ .ctrl_up:\r
+ and byte [kbd_flags], 11111101b ; ctrl off.\r
+ jmp .CAD_off\r
+\r
+ .alt_up:\r
+ and byte [kbd_flags], 11111011b ; alt off.\r
+ jmp .CAD_off\r
+\r
+ .CAD_off:\r
+ test byte [kbd_flags], 01000000b\r
+ jz .CAD_is_off\r
+ and byte [kbd_flags], 10111111b ; ctrl+alt+del bit off.\r
+ .CAD_is_off:\r
+ jmp .end\r
+\r
+ ;----------------------------------------------;\r
+ ; a key was pressed, check for special keys ;\r
+ ;----------------------------------------------;\r
+ .key_down:\r
+ or byte [kbd_flags], 10000000b\r
+\r
+ .shift:\r
+ cmp al, 42\r
+ jnz .check_rshift\r
+ or byte [kbd_flags], 00000001b\r
+ jmp .end\r
+\r
+ .check_rshift:\r
+ cmp al, 54\r
+ jnz .check_ctrl\r
+ or byte [kbd_flags], 00000001b\r
+ jmp .end\r
+\r
+ .check_ctrl:\r
+ cmp al, 29\r
+ jnz .check_alt\r
+ or byte [kbd_flags], 00000010b\r
+ jmp .end\r
+\r
+ .check_alt:\r
+ cmp al, 56\r
+ jnz .ctrl_alt_del\r
+ or byte [kbd_flags], 00000100b\r
+ jmp .end\r
+\r
+ .ctrl_alt_del:\r
+ test byte [kbd_flags], 00000110b ; check for ctrl+alt\r
+ jz .check_caps\r
+ cmp al, 83 ; check for delete\r
+ jne .check_caps\r
+ or byte [kbd_flags], 01000000b ; ctrl+alt+del bit on.\r
+\r
+ ;-------------------------------------;\r
+ ; toggle caps, num and scroll lock ;\r
+ ;-------------------------------------;\r
+ .check_caps:\r
+ cmp al, 58\r
+ jnz .check_num\r
+ xor byte [kbd_status], 4\r
+ call update_leds\r
+ jmp .end\r
+\r
+ .check_num:\r
+ cmp al, 69\r
+ jnz .check_scroll\r
+ xor byte [kbd_status], 2\r
+ call update_leds\r
+ jmp .end\r
+\r
+ .check_scroll:\r
+ cmp al, 70\r
+ jnz .end\r
+ xor byte [kbd_status], 1\r
+ call update_leds\r
+ jmp .end\r
+\r
+ ;-----------------------------------;\r
+ ; put the scancode in the buffer ;\r
+ ;-----------------------------------;\r
+ .end:\r
+ push eax\r
+ mov edi, kbd_buffer\r
+ xor eax, eax\r
+ mov al, [kbd_head]\r
+ add edi, eax\r
+ pop eax\r
+ stosb\r
+ cmp [kbd_head], 63 ; if we reach the buffer\r
+ jne .cont1 ; end, go back to 0.\r
+ cmp [kbd_tail], 0\r
+ je .error\r
+ mov [kbd_head], 0\r
+ jmp .quit\r
+ .cont1:\r
+ mov ah, [kbd_tail]\r
+ mov al, [kbd_head]\r
+ add al, 1\r
+ cmp ah, al\r
+ je .error\r
+ inc [kbd_head]\r
+ jmp .quit\r
+ .error:\r
+ call beep ; pc_speaker.inc\r
+ mov [kbd_head], 1 ; fix it as good\r
+ mov [kbd_tail], 0 ; as possible.. :S\r
+ .quit:\r
+ mov al, 0x20\r
+ out 0x20, al\r
+ pop eax\r
+ ret\r
\r
\r
\r
; Update the keyboard LED's ;\r
;------------------------------;\r
update_leds:\r
- push ax\r
+ push ax\r
\r
- call kbd_wait\r
- mov al, 0xED\r
- out 0x60, al\r
- call kbd_wait\r
- mov al, [kbd_status]\r
- out 0x60, al\r
- call kbd_wait\r
+ call kbd_wait\r
+ mov al, 0xED\r
+ out 0x60, al\r
+ call kbd_wait\r
+ mov al, [kbd_status]\r
+ out 0x60, al\r
+ call kbd_wait\r
\r
- pop ax\r
- ret\r
+ pop ax\r
+ ret\r
\r
\r
\r
; keyboard wait ;\r
;------------------;\r
kbd_wait:\r
- jmp $+2\r
- in al, 0x64\r
- test al, 1\r
- jz .ok\r
- jmp $+2\r
- in al, 0x60\r
- jmp kbd_wait\r
- .ok:\r
- test al, 2\r
- jnz kbd_wait\r
- ret\r
+ jmp $+2\r
+ in al, 0x64\r
+ test al, 1\r
+ jz .ok\r
+ jmp $+2\r
+ in al, 0x60\r
+ jmp kbd_wait\r
+ .ok:\r
+ test al, 2\r
+ jnz kbd_wait\r
+ ret\r
\r
\r
\r
; bh = flag-byte, bl = led-byte ;\r
;-------------------------------------------------------;\r
getc:\r
- push esi\r
-\r
- .no_new:\r
- mov al, [kbd_head]\r
- mov ah, [kbd_tail]\r
- cmp ah, 63\r
- jne .check2\r
- cmp al, 0\r
- je .no_new\r
- mov [kbd_tail], 0\r
- jmp .done_check\r
- .check2:\r
- mov bl, ah\r
- inc bl\r
- cmp bl, al\r
- je .no_new\r
- inc [kbd_tail]\r
- .done_check:\r
-\r
- mov esi, kbd_buffer\r
- movzx eax, [kbd_tail]\r
- add esi, eax\r
- mov ah, byte [esi] ; ah = scancode\r
- movzx esi, byte [esi] ; esi = scancode\r
-\r
- ;------------------;\r
- ; some checks.. ;\r
- ;------------------;\r
- cmp ah, 0xFA\r
- je .no_new\r
- cmp ah, 0xE0\r
- je .no_new\r
- cmp ah, 0xE1\r
- je .no_new\r
- test ah, 0x80\r
- jnz .no_new\r
-\r
- ;--------------------------------;\r
- ; check for caps, shift & alt ;\r
- ;--------------------------------;\r
- test [kbd_status], 00000100b\r
- jnz .caps\r
- test [kbd_flags], 00000001b\r
- jnz .shift\r
-\r
- ;------------------;\r
- ; normal keymap ;\r
- ;------------------;\r
- mov al, [esi+keymap] ; scancode + keymap = ascii\r
- jmp .end\r
-\r
- ;--------------------;\r
- ; capslock keymap ;\r
- ;--------------------;\r
- .caps:\r
- test [kbd_flags], 00000001b\r
- jnz .caps_and_shift\r
-\r
- mov al, [esi+keymap_caps]\r
- jmp .end\r
-\r
- ;--------------------------;\r
- ; caps and shift keymap ;\r
- ;--------------------------;\r
- .caps_and_shift:\r
- mov al, [esi+keymap_caps_shift]\r
- jmp .end\r
-\r
- ;-----------------;\r
- ; shift keymap ;\r
- ;-----------------;\r
- .shift:\r
- mov al, [esi+keymap_shift]\r
- jmp .end\r
-\r
- ;---------------------------;\r
- ; set registers and exit ;\r
- ;---------------------------;\r
- .end:\r
- mov bl, [kbd_status]\r
- mov bh, [kbd_flags]\r
-\r
- pop esi\r
- ret\r
+ push esi\r
+\r
+ .no_new:\r
+ mov al, [kbd_head]\r
+ mov ah, [kbd_tail]\r
+ cmp ah, 63\r
+ jne .check2\r
+ cmp al, 0\r
+ je .no_new\r
+ mov [kbd_tail], 0\r
+ jmp .done_check\r
+ .check2:\r
+ mov bl, ah\r
+ inc bl\r
+ cmp bl, al\r
+ je .no_new\r
+ inc [kbd_tail]\r
+ .done_check:\r
+\r
+ mov esi, kbd_buffer\r
+ movzx eax, [kbd_tail]\r
+ add esi, eax\r
+ mov ah, byte [esi] ; ah = scancode\r
+ movzx esi, byte [esi] ; esi = scancode\r
+\r
+ ;------------------;\r
+ ; some checks.. ;\r
+ ;------------------;\r
+ cmp ah, 0xFA\r
+ je .no_new\r
+ cmp ah, 0xE0\r
+ je .no_new\r
+ cmp ah, 0xE1\r
+ je .no_new\r
+ test ah, 0x80\r
+ jnz .no_new\r
+\r
+ ;--------------------------------;\r
+ ; check for caps, shift & alt ;\r
+ ;--------------------------------;\r
+ test [kbd_status], 00000100b\r
+ jnz .caps\r
+ test [kbd_flags], 00000001b\r
+ jnz .shift\r
+\r
+ ;------------------;\r
+ ; normal keymap ;\r
+ ;------------------;\r
+ mov al, [esi+keymap] ; scancode + keymap = ascii\r
+ jmp .end\r
+\r
+ ;--------------------;\r
+ ; capslock keymap ;\r
+ ;--------------------;\r
+ .caps:\r
+ test [kbd_flags], 00000001b\r
+ jnz .caps_and_shift\r
+\r
+ mov al, [esi+keymap_caps]\r
+ jmp .end\r
+\r
+ ;--------------------------;\r
+ ; caps and shift keymap ;\r
+ ;--------------------------;\r
+ .caps_and_shift:\r
+ mov al, [esi+keymap_caps_shift]\r
+ jmp .end\r
+\r
+ ;-----------------;\r
+ ; shift keymap ;\r
+ ;-----------------;\r
+ .shift:\r
+ mov al, [esi+keymap_shift]\r
+ jmp .end\r
+\r
+ ;---------------------------;\r
+ ; set registers and exit ;\r
+ ;---------------------------;\r
+ .end:\r
+ mov bl, [kbd_status]\r
+ mov bh, [kbd_flags]\r
+\r
+ pop esi\r
+ ret\r
\r
\r
;------------------------------;\r
; "press any key to..." ;\r
;------------------------------;\r
wait_key:\r
- push eax\r
- push ebx\r
- push esi\r
-\r
- .no_new:\r
- mov al, [kbd_head]\r
- mov ah, [kbd_tail]\r
- cmp ah, 63\r
- jne .check2\r
- cmp al, 0\r
- je .no_new\r
- mov [kbd_tail], 0\r
- jmp .done_check\r
- .check2:\r
- mov bl, ah\r
- inc bl\r
- cmp bl, al\r
- je .no_new\r
- inc [kbd_tail]\r
- .done_check:\r
-\r
- mov esi, kbd_buffer\r
- movzx eax, [kbd_tail]\r
- add esi, eax\r
- mov ah, byte [esi] ; ah = scancode\r
- cmp ah, 0xFA ; check for some stuff..\r
- je .no_new\r
- cmp ah, 0xE0\r
- je .no_new\r
- cmp ah, 0xE1\r
- je .no_new\r
- test ah, 0x80\r
- jnz .no_new\r
-\r
- pop esi\r
- pop ebx\r
- pop eax\r
- ret
\ No newline at end of file
+ push eax\r
+ push ebx\r
+ push esi\r
+\r
+ .no_new:\r
+ mov al, [kbd_head]\r
+ mov ah, [kbd_tail]\r
+ cmp ah, 63\r
+ jne .check2\r
+ cmp al, 0\r
+ je .no_new\r
+ mov [kbd_tail], 0\r
+ jmp .done_check\r
+ .check2:\r
+ mov bl, ah\r
+ inc bl\r
+ cmp bl, al\r
+ je .no_new\r
+ inc [kbd_tail]\r
+ .done_check:\r
+\r
+ mov esi, kbd_buffer\r
+ movzx eax, [kbd_tail]\r
+ add esi, eax\r
+ mov ah, byte [esi] ; ah = scancode\r
+ cmp ah, 0xFA ; check for some stuff..\r
+ je .no_new\r
+ cmp ah, 0xE0\r
+ je .no_new\r
+ cmp ah, 0xE1\r
+ je .no_new\r
+ test ah, 0x80\r
+ jnz .no_new\r
+\r
+ pop esi\r
+ pop ebx\r
+ pop eax\r
+ ret
\ No newline at end of file
;----------------------------------------------------------;\r
\r
keymap:\r
- db 0\r
- db '\ 11234567890-=', bspace\r
- db tab,'qwertyuiop[]',enter_key\r
- db ctrl_key,'asdfghjkl;',39,'`',lshift\r
- db '\','zxcvbnm,./',rshift,prnscr,alt_key,' '\r
- db caps,f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,numlock\r
- db scroll,home,arrowup,pgup,num_sub,arrowleft,center5,arrowright\r
- db num_plus,_end,arrowdown,pgdn,_ins,del\r
+ db 0\r
+ db '\ 11234567890-=', bspace\r
+ db tab,'qwertyuiop[]',enter_key\r
+ db ctrl_key,'asdfghjkl;',39,'`',lshift\r
+ db '\','zxcvbnm,./',rshift,prnscr,alt_key,' '\r
+ db caps,f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,numlock\r
+ db scroll,home,arrowup,pgup,num_sub,arrowleft,center5,arrowright\r
+ db num_plus,_end,arrowdown,pgdn,_ins,del\r
\r
keymap_caps:\r
- db 0\r
- db '\ 11234567890-=', bspace\r
- db tab,'QWERTYUIOP[]',enter_key\r
- db ctrl_key,'ASDFGHJKL;',39,'`',lshift\r
- db '\','ZXCVBNM,./',rshift,prnscr,alt_key,' '\r
- db caps,f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,numlock\r
- db scroll,home,arrowup,pgup,num_sub,arrowleft,center5,arrowright\r
- db num_plus,_end,arrowdown,pgdn,_ins,del\r
+ db 0\r
+ db '\ 11234567890-=', bspace\r
+ db tab,'QWERTYUIOP[]',enter_key\r
+ db ctrl_key,'ASDFGHJKL;',39,'`',lshift\r
+ db '\','ZXCVBNM,./',rshift,prnscr,alt_key,' '\r
+ db caps,f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,numlock\r
+ db scroll,home,arrowup,pgup,num_sub,arrowleft,center5,arrowright\r
+ db num_plus,_end,arrowdown,pgdn,_ins,del\r
\r
keymap_caps_shift:\r
- db 0\r
- db '\ 1!@#$%^&*()_+', bspace\r
- db tab,'qwertyuiop{}',enter_key\r
- db ctrl_key,'asdfghjkl:"~',lshift\r
- db '|zxcvbnm<>?',rshift,prnscr,alt_key,' '\r
- db caps,f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,numlock\r
- db scroll,home,arrowup,pgup,num_sub,arrowleft,center5,arrowright\r
- db num_plus,_end,arrowdown,pgdn,_ins,del\r
+ db 0\r
+ db '\ 1!@#$%^&*()_+', bspace\r
+ db tab,'qwertyuiop{}',enter_key\r
+ db ctrl_key,'asdfghjkl:"~',lshift\r
+ db '|zxcvbnm<>?',rshift,prnscr,alt_key,' '\r
+ db caps,f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,numlock\r
+ db scroll,home,arrowup,pgup,num_sub,arrowleft,center5,arrowright\r
+ db num_plus,_end,arrowdown,pgdn,_ins,del\r
\r
keymap_shift:\r
- db 0\r
- db '\ 1!@#$%^&*()_+', bspace\r
- db tab,'QWERTYUIOP{}',enter_key\r
- db ctrl_key,'ASDFGHJKL:"~',lshift\r
- db '|ZXCVBNM<>?',rshift,prnscr,alt_key,' '\r
- db caps,f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,numlock\r
- db scroll,home,arrowup,pgup,num_sub,arrowleft,center5,arrowright\r
- db num_plus,_end,arrowdown,pgdn,_ins,del\r
+ db 0\r
+ db '\ 1!@#$%^&*()_+', bspace\r
+ db tab,'QWERTYUIOP{}',enter_key\r
+ db ctrl_key,'ASDFGHJKL:"~',lshift\r
+ db '|ZXCVBNM<>?',rshift,prnscr,alt_key,' '\r
+ db caps,f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,numlock\r
+ db scroll,home,arrowup,pgup,num_sub,arrowleft,center5,arrowright\r
+ db num_plus,_end,arrowdown,pgdn,_ins,del\r
\r
\r
-enter_key = 0\r
-bspace = 0\r
-tab = 0\r
-ctrl_key = 0\r
-lshift = 0\r
-rshift = 0\r
-prnscr = 0\r
-alt_key = 0\r
-caps = 0\r
-f1 = 0\r
-f2 = 0\r
-f3 = 0\r
-f4 = 0\r
-f5 = 0\r
-f6 = 0\r
-f7 = 0\r
-f8 = 0\r
-f9 = 0\r
-f10 = 0\r
-f11 = 0\r
-f12 = 0\r
-numlock = 0\r
-scroll = 0\r
-home = 0\r
-arrowup = 0\r
-pgup = 0\r
-num_sub = 0\r
-arrowleft = 0\r
-center5 = 0\r
-arrowright = 0\r
-num_plus = 0\r
-_end = 0\r
-arrowdown = 0\r
-pgdn = 0\r
-_ins = 0\r
-del = 0
\ No newline at end of file
+enter_key = 0\r
+bspace = 0\r
+tab = 0\r
+ctrl_key = 0\r
+lshift = 0\r
+rshift = 0\r
+prnscr = 0\r
+alt_key = 0\r
+caps = 0\r
+f1 = 0\r
+f2 = 0\r
+f3 = 0\r
+f4 = 0\r
+f5 = 0\r
+f6 = 0\r
+f7 = 0\r
+f8 = 0\r
+f9 = 0\r
+f10 = 0\r
+f11 = 0\r
+f12 = 0\r
+numlock = 0\r
+scroll = 0\r
+home = 0\r
+arrowup = 0\r
+pgup = 0\r
+num_sub = 0\r
+arrowleft = 0\r
+center5 = 0\r
+arrowright = 0\r
+num_plus = 0\r
+_end = 0\r
+arrowdown = 0\r
+pgdn = 0\r
+_ins = 0\r
+del = 0
\ No newline at end of file
;------------------;\r
; variables ;\r
;------------------;\r
- msg_time db 13,10,' Time: ',0\r
- msg_date db 13,10,' Date: ',0\r
+ msg_time db 13,10,' Time: ',0\r
+ msg_date db 13,10,' Date: ',0\r
\r
\r
;------------------------------------------------------;\r
; prompt. swedish i.e. normal :) format ;\r
;------------------------------------------------------;\r
print_date:\r
- push eax\r
- push ebx\r
- push esi\r
-\r
- mov esi, msg_date\r
- mov bl, 0x07\r
- call print ; text.inc\r
- call get_cmos_data ; cmos.inc\r
-\r
- mov al, [century] ; cmos.inc\r
- call BCD2ascii\r
- push eax\r
- mov bh, 0x07\r
- mov bl, al\r
- call print_char\r
- pop eax\r
- mov bl, ah\r
- call print_char\r
-\r
- mov al, [year]\r
- call BCD2ascii\r
- push eax\r
- mov bl, al\r
- call print_char\r
- pop eax\r
- mov bl, ah\r
- call print_char\r
-\r
- mov bl, ':'\r
- call print_char\r
-\r
- mov al, [month]\r
- call BCD2ascii\r
- push eax\r
- mov bl, al\r
- call print_char\r
- pop eax\r
- mov bl, ah\r
- call print_char\r
-\r
- mov bl, ':'\r
- call print_char\r
-\r
- mov al, [day]\r
- call BCD2ascii\r
- push eax\r
- mov bl, al\r
- call print_char\r
- pop eax\r
- mov bl, ah\r
- call print_char\r
-\r
- pop esi\r
- pop ebx\r
- pop eax\r
- ret\r
+ push eax\r
+ push ebx\r
+ push esi\r
+\r
+ mov esi, msg_date\r
+ mov bl, 0x07\r
+ call print ; text.inc\r
+ call get_cmos_data ; cmos.inc\r
+\r
+ mov al, [century] ; cmos.inc\r
+ call BCD2ascii\r
+ push eax\r
+ mov bh, 0x07\r
+ mov bl, al\r
+ call print_char\r
+ pop eax\r
+ mov bl, ah\r
+ call print_char\r
+\r
+ mov al, [year]\r
+ call BCD2ascii\r
+ push eax\r
+ mov bl, al\r
+ call print_char\r
+ pop eax\r
+ mov bl, ah\r
+ call print_char\r
+\r
+ mov bl, ':'\r
+ call print_char\r
+\r
+ mov al, [month]\r
+ call BCD2ascii\r
+ push eax\r
+ mov bl, al\r
+ call print_char\r
+ pop eax\r
+ mov bl, ah\r
+ call print_char\r
+\r
+ mov bl, ':'\r
+ call print_char\r
+\r
+ mov al, [day]\r
+ call BCD2ascii\r
+ push eax\r
+ mov bl, al\r
+ call print_char\r
+ pop eax\r
+ mov bl, ah\r
+ call print_char\r
+\r
+ pop esi\r
+ pop ebx\r
+ pop eax\r
+ ret\r
\r
\r
;------------------------------------------------------;\r
; prompt. ;\r
;------------------------------------------------------;\r
print_time:\r
- push eax\r
- push ebx\r
- push esi\r
-\r
- mov esi, msg_time\r
- mov bl, 0x07\r
- call print ; text.inc\r
- call get_cmos_data ; cmos.inc\r
- mov al, [hour] ; cmos.inc\r
- call BCD2ascii\r
- push eax\r
- mov bh, 0x07\r
- mov bl, al\r
- call print_char\r
- pop eax\r
- mov bl, ah\r
- call print_char\r
-\r
- mov bl, ':'\r
- call print_char\r
-\r
- mov al, [minute]\r
- call BCD2ascii\r
- push eax\r
- mov bl, al\r
- call print_char\r
- pop eax\r
- mov bl, ah\r
- call print_char\r
-\r
- mov bl, ':'\r
- call print_char\r
-\r
- mov al, [second]\r
- call BCD2ascii\r
- push eax\r
- mov bl, al\r
- call print_char\r
- pop eax\r
- mov bl, ah\r
- call print_char\r
-\r
- pop esi\r
- pop ebx\r
- pop eax\r
- ret
\ No newline at end of file
+ push eax\r
+ push ebx\r
+ push esi\r
+\r
+ mov esi, msg_time\r
+ mov bl, 0x07\r
+ call print ; text.inc\r
+ call get_cmos_data ; cmos.inc\r
+ mov al, [hour] ; cmos.inc\r
+ call BCD2ascii\r
+ push eax\r
+ mov bh, 0x07\r
+ mov bl, al\r
+ call print_char\r
+ pop eax\r
+ mov bl, ah\r
+ call print_char\r
+\r
+ mov bl, ':'\r
+ call print_char\r
+\r
+ mov al, [minute]\r
+ call BCD2ascii\r
+ push eax\r
+ mov bl, al\r
+ call print_char\r
+ pop eax\r
+ mov bl, ah\r
+ call print_char\r
+\r
+ mov bl, ':'\r
+ call print_char\r
+\r
+ mov al, [second]\r
+ call BCD2ascii\r
+ push eax\r
+ mov bl, al\r
+ call print_char\r
+ pop eax\r
+ mov bl, ah\r
+ call print_char\r
+\r
+ pop esi\r
+ pop ebx\r
+ pop eax\r
+ ret
\ No newline at end of file
; smaller ones or something. I'm just too lazy. Next version..\r
\r
\r
- commands: db 'ver', 0\r
- db 'help', 0\r
- db '?', 0\r
- db 'about', 0\r
- db 'cls', 0\r
- db 'clrscr', 0\r
- db 'reboot', 0\r
- db 'regdump', 0\r
- db 'time', 0\r
- db 'date', 0\r
- db 'delay', 0\r
- db 'vgatest', 0\r
- db 'memtest', 0\r
- db 'fddtest', 0\r
- db 0xFF ; end of command table\r
-\r
-\r
- call_table: dd show_ver ; commands.inc\r
- dd show_help ; commands.inc\r
- dd show_help ; commands.inc\r
- dd show_about ; commands.inc\r
- dd clrscr ; commands.inc\r
- dd clrscr ; comamnds.inc\r
- dd reboot ; commands.inc\r
- dd dump_regs ; debug.inc\r
- dd print_time ; time_date.inc\r
- dd print_date ; time_date.inc\r
- dd delay_test ; commands.inc\r
- dd vga_test ; commands.inc\r
- dd mem_test ; commands.inc\r
- dd fdd_test ; commands.inc\r
-\r
-\r
-\r
- ;--------------------------;\r
- ; not a valid command ;\r
- ;--------------------------;\r
- not_a_valid_cmd db 13,10,'No such command or program exists.', 0\r
-\r
- no_such_cmd:\r
- push esi\r
- push bx\r
-\r
- mov esi, not_a_valid_cmd\r
- mov bl, 0x04\r
- call print\r
-\r
- pop bx\r
- pop esi\r
- ret\r
-\r
-\r
- ;-------------------;\r
- ; show version ;\r
- ;-------------------;\r
- bos_ver_str db 13,10,'BOS version 0.05 by Christoffer Bubach, 2003-2005.', 0\r
- show_ver:\r
- push esi\r
- push bx\r
-\r
- mov esi, bos_ver_str\r
- mov bl, 0x07\r
- call print\r
-\r
- pop bx\r
- pop esi\r
- ret\r
-\r
-\r
- ;--------------------;\r
- ; show BOS help ;\r
- ;--------------------;\r
- bos_help_str db 13,10,13,10,' BOS 0.04 by Christoffer Bubach, 2003-2005.',13,10,\\r
- '--------------------------------------------',13,10,\\r
- 'Type a command and press ENTER to execute it.',13,10,13,10,\\r
- '"help" or "?" - Displays this text.',13,10,\\r
- '"ver" - Shows version information.',13,10,\\r
- '"about" - Shows information about the OS.',13,10,\\r
- '"cls" or "clrscr" - Clears the screen.',13,10,\\r
- '"memtest" - Shows memory info (and allocates/frees some, to test).',13,10,\\r
- '"vgatest" - Test some VGA stuff.',13,10,\\r
- '"fddtest" - Read and print bootsector from A:',13,10,\\r
- '"delay" - Tests the delay function for 5 s.',13,10,\\r
- '"time" - Prints current time.',13,10,\\r
- '"date" - Prints current date.',13,10,\\r
- '"regdump" - Dump some standard registers.',13,10,\\r
- '"reboot" - Restarts the computer.',0\r
- show_help:\r
- push esi\r
- push bx\r
-\r
- mov esi, bos_help_str\r
- mov bl, 0x07\r
- call print\r
-\r
- pop bx\r
- pop esi\r
- ret\r
-\r
-\r
- ;-----------------;\r
- ; show about ;\r
- ;-----------------;\r
- bos_about_str db 13,10,'About BOS',13,10,\\r
- 'Hmm.. I started with OS-dev in late 2003.. Anyway..',13,10,13,10,\\r
- 'Thanks for helping me get this far goes to:',13,10,\\r
- 'all people at mega-tokyo.com, osdever.net and flatassembler.net',13,10,\\r
- 'Robert ',153,'stling for Primula, http://ostling.no-ip.com/',13,10,\\r
- 'J.Thim for EelOS, http://www.ludd.luth.se/~ivileel/',13,10,\\r
- 'Tomasz Grysztar for fasm and fasmw, http://flatassembler.net/',13,10,\\r
- 'ASHLEY4, Candy, John S. Fine and Petroff Heroj.',0\r
+ commands:\r
+ db 'ver', 0\r
+ db 'help', 0\r
+ db '?', 0\r
+ db 'about', 0\r
+ db 'cls', 0\r
+ db 'clrscr', 0\r
+ db 'reboot', 0\r
+ db 'regdump', 0\r
+ db 'time', 0\r
+ db 'date', 0\r
+ db 'delay', 0\r
+ db 'vgatest', 0\r
+ db 'memtest', 0\r
+ db 'fddtest', 0\r
+ db 0xFF ; end of command table\r
+\r
+\r
+ call_table:\r
+ dd show_ver ; commands.inc\r
+ dd show_help ; commands.inc\r
+ dd show_help ; commands.inc\r
+ dd show_about ; commands.inc\r
+ dd clrscr ; commands.inc\r
+ dd clrscr ; comamnds.inc\r
+ dd reboot ; commands.inc\r
+ dd dump_regs ; debug.inc\r
+ dd print_time ; time_date.inc\r
+ dd print_date ; time_date.inc\r
+ dd delay_test ; commands.inc\r
+ dd vga_test ; commands.inc\r
+ dd mem_test ; commands.inc\r
+ dd fdd_test ; commands.inc\r
+\r
+\r
+\r
+ ;--------------------------;\r
+ ; not a valid command ;\r
+ ;--------------------------;\r
+ not_a_valid_cmd db 13,10,'No such command or program exists.', 0\r
+\r
+ no_such_cmd:\r
+ push esi\r
+ push bx\r
+\r
+ mov esi, not_a_valid_cmd\r
+ mov bl, 0x04\r
+ call print\r
+\r
+ pop bx\r
+ pop esi\r
+ ret\r
+\r
+\r
+ ;-------------------;\r
+ ; show version ;\r
+ ;-------------------;\r
+ bos_ver_str db 13,10,'BOS version 0.05 by Christoffer Bubach, 2003-2005.', 0\r
+ show_ver:\r
+ push esi\r
+ push bx\r
+\r
+ mov esi, bos_ver_str\r
+ mov bl, 0x07\r
+ call print\r
+\r
+ pop bx\r
+ pop esi\r
+ ret\r
+\r
+\r
+ ;--------------------;\r
+ ; show BOS help ;\r
+ ;--------------------;\r
+ bos_help_str db 13,10,13,10,' BOS 0.04 by Christoffer Bubach, 2003-2005.',13,10,\\r
+ '--------------------------------------------',13,10,\\r
+ 'Type a command and press ENTER to execute it.',13,10,13,10,\\r
+ '"help" or "?" - Displays this text.',13,10,\\r
+ '"ver" - Shows version information.',13,10,\\r
+ '"about" - Shows information about the OS.',13,10,\\r
+ '"cls" or "clrscr" - Clears the screen.',13,10,\\r
+ '"memtest" - Shows memory info (and allocates/frees some, to test).',13,10,\\r
+ '"vgatest" - Test some VGA stuff.',13,10,\\r
+ '"fddtest" - Read and print bootsector from A:',13,10,\\r
+ '"delay" - Tests the delay function for 5 s.',13,10,\\r
+ '"time" - Prints current time.',13,10,\\r
+ '"date" - Prints current date.',13,10,\\r
+ '"regdump" - Dump some standard registers.',13,10,\\r
+ '"reboot" - Restarts the computer.',0\r
+ show_help:\r
+ push esi\r
+ push bx\r
+\r
+ mov esi, bos_help_str\r
+ mov bl, 0x07\r
+ call print\r
+\r
+ pop bx\r
+ pop esi\r
+ ret\r
+\r
+\r
+ ;-----------------;\r
+ ; show about ;\r
+ ;-----------------;\r
+ bos_about_str db 13,10,'About BOS',13,10,\\r
+ 'Hmm.. I started with OS-dev in late 2003.. Anyway..',13,10,13,10,\\r
+ 'Thanks for helping me get this far goes to:',13,10,\\r
+ 'all people at mega-tokyo.com, osdever.net and flatassembler.net',13,10,\\r
+ 'Robert ',153,'stling for Primula, http://ostling.no-ip.com/',13,10,\\r
+ 'J.Thim for EelOS, http://www.ludd.luth.se/~ivileel/',13,10,\\r
+ 'Tomasz Grysztar for fasm and fasmw, http://flatassembler.net/',13,10,\\r
+ 'ASHLEY4, Candy, John S. Fine and Petroff Heroj.',0\r
show_about:\r
- push esi\r
- push bx\r
-\r
- mov esi, bos_about_str\r
- mov bl, 0x07\r
- call print\r
-\r
- pop bx\r
- pop esi\r
- ret\r
-\r
-\r
- ;-----------------------;\r
- ; clear the screen ;\r
- ;-----------------------;\r
- clrscr:\r
- call cls ; text.inc\r
- mov esi, prompt\r
- mov bl, 0x0E\r
- call print\r
- mov edi, cmd_buffer\r
- jmp shell ; no normal return, as it gives an extra line feed\r
-\r
-\r
-\r
- ;-------------;\r
- ; reboot ;\r
- ;-------------;\r
- reboot:\r
- call kbd_wait\r
- mov al, 0xFE\r
- out 0x64, al\r
- jmp $\r
- ret\r
-\r
-\r
- ;-----------------;\r
- ; delay test ;\r
- ;-----------------;\r
- bos_delay_str db 13,10,'~1 second has passed.', 0\r
- delay_test:\r
- mov ecx, 5\r
+ push esi\r
+ push bx\r
+\r
+ mov esi, bos_about_str\r
+ mov bl, 0x07\r
+ call print\r
+\r
+ pop bx\r
+ pop esi\r
+ ret\r
+\r
+\r
+ ;-----------------------;\r
+ ; clear the screen ;\r
+ ;-----------------------;\r
+ clrscr:\r
+ call cls ; text.inc\r
+ mov esi, prompt\r
+ mov bl, 0x0E\r
+ call print\r
+ mov edi, cmd_buffer\r
+ jmp shell ; no normal return, as it gives an extra line feed\r
+\r
+\r
+\r
+ ;-------------;\r
+ ; reboot ;\r
+ ;-------------;\r
+ reboot:\r
+ call kbd_wait\r
+ mov al, 0xFE\r
+ out 0x64, al\r
+ jmp $\r
+ ret\r
+\r
+\r
+ ;-----------------;\r
+ ; delay test ;\r
+ ;-----------------;\r
+ bos_delay_str db 13,10,'~1 second has passed.', 0\r
+ delay_test:\r
+ mov ecx, 5\r
.loop:\r
- push ecx\r
- mov ecx, 100\r
- call delay\r
- pop ecx\r
- mov esi, bos_delay_str\r
- mov bl, 0x07\r
- call print\r
- loop .loop\r
- ret\r
-\r
-\r
- ;----------------;\r
- ; VGA test ;\r
- ;----------------;\r
- bos_vga_str db 13,10,'It works..! :-D', 0\r
- vga_test:\r
-\r
- mov ax, 1 ; clear the screen\r
- call set_mode_0x13 ; set mode 0x13\r
-\r
- mov cx, 256 ; loop out some pixels\r
- .l1:\r
- mov bx, cx ; x value\r
- mov al, cl\r
- push cx\r
- mov cx, 50 ; y value\r
- call put_0x13_pixel\r
- pop cx\r
- loop .l1\r
-\r
- ; draw mario and some ground\r
- mov esi, mario\r
- mov ax, 260 ; x\r
- mov bx, 168 ; y\r
- mov cx, 20 ; height\r
- mov dx, 18 ; width\r
- call put_0x13_sprite ; in vga.inc\r
- mov esi, grass_l\r
- mov ax, 250\r
- mov bx, 186\r
- mov cx, 20\r
- mov dx, 14\r
- call put_0x13_sprite\r
- mov esi, grass_f\r
- mov ax, 265\r
- mov bx, 186\r
- mov cx, 20\r
- mov dx, 14\r
- call put_0x13_sprite\r
- mov esi, grass_ul\r
- mov ax, 280\r
- mov bx, 186\r
- mov cx, 20\r
- mov dx, 14\r
- call put_0x13_sprite\r
- mov esi, g_lefts\r
- mov ax, 280\r
- mov bx, 172\r
- mov cx, 20\r
- mov dx, 14\r
- call put_0x13_sprite\r
- mov esi, grass_l\r
- mov ax, 280\r
- mov bx, 158\r
- mov cx, 20\r
- mov dx, 14\r
- call put_0x13_sprite\r
- mov esi, g_earth\r
- mov ax, 300\r
- mov bx, 186\r
- mov cx, 20\r
- mov dx, 14\r
- call put_0x13_sprite\r
- mov esi, g_earth\r
- mov ax, 300\r
- mov bx, 172\r
- mov cx, 20\r
- mov dx, 14\r
- call put_0x13_sprite\r
- mov esi, grass_f\r
- mov ax, 300\r
- mov bx, 158\r
- mov cx, 20\r
- mov dx, 14\r
- call put_0x13_sprite\r
-\r
- call wait_key\r
-\r
- mov ax, 1 ; clear the screen\r
- call set_mode_0x03 ; set mode 0x03\r
-\r
- mov esi, bos_vga_str ; print that it worked!\r
- mov bl, 1\r
- call print\r
- ret\r
-\r
-\r
-\r
-\r
- ;--------------------------;\r
- ; fdd test ;\r
- ;--------------------------;\r
- fdd_test:\r
- mov bl, 13\r
- mov bh, 7 ; make newline\r
- call print_char\r
-\r
- mov ecx, 512\r
- mov edi, 0x80000\r
- .loop511:\r
- mov dword [edi], 'shit' ; set DMA buffer to shit, as a test\r
- add edi, 4\r
- sub ecx, 4\r
- cmp ecx, 0\r
- jne .loop511\r
-\r
- mov dh, 0x00 ; side\r
- mov dl, 0x00 ; drive\r
- mov ch, 0x00 ; track\r
- mov cl, 0x01 ; sector\r
- mov bl, 0x00 ; 1 = write\r
- call fdd_read_write\r
- jc .error\r
-\r
- mov esi, 0x80000 ; dma buffer\r
- mov ecx, 512\r
- .print:\r
- lodsb\r
- mov bl, al\r
- mov bh, 7\r
- call print_char ; print it. is it still\r
- dec ecx ; "shit" ?\r
- cmp ecx, 0\r
- jne .print\r
- jmp .end\r
-\r
- .error:\r
- mov bl, 13\r
- call print_char\r
- mov bl, 10\r
- call print_char\r
- mov bh, 0x40\r
- mov bl, 'E' ; error sign... :'(\r
- call print_char\r
-\r
- call fdd_reset\r
- mov al, 1\r
- call fdd_recal_seek ; do somthing about the error.. :P\r
-\r
- .end:\r
- ret\r
-\r
-\r
-\r
-\r
-\r
- ;------------------------------;\r
- ; memory test ;\r
- ;------------------------------;\r
-\r
- bos_mem_str1 db 13,10,'Performing memory test. (debugging allocs assume 32mb RAM)', 0\r
- bos_mem_str2 db 13,10,'Total installed memory (in bytes): ',0\r
- bos_mem_str3 db 13,10,13,10,'Memory chunks:',0\r
- bos_mem_str4 db 13,10,'Address Size Type Previous Next',0\r
- bos_mem_str5 db 13,10,'-------------------------------------------------------',0\r
- bos_mem_str6 db '0x',0\r
- bos_mem_str7 db 'Free ',0\r
- bos_mem_str8 db 'Used ',0\r
- bos_mem_str9 db 'None ',0\r
- bos_mem_str0 db ' ',0\r
- bos_mem_crlf db 13,10,0\r
- current_mem_pos dd 0\r
- next_free dd 0\r
-\r
- ;---------DEBUG---------\r
- test1_or_2 db 1\r
- test_address dd 0\r
- test_size dd 0\r
- test_address2 dd 0\r
- test_size2 dd 0\r
- ;---------END DEBUG---------\r
-\r
- mem_test:\r
- push eax\r
- push ebx\r
- push ecx\r
- push edx\r
-\r
- ;---------DEBUG---------\r
- cmp [test1_or_2],0\r
- je .free_the_test_block\r
-\r
- mov ebx, 0x1000000 ;first test\r
- mov [test_size2], ebx\r
- call allocate_mem\r
- mov [test_address2], ebx\r
-\r
- mov ebx, 0xE00000 ; second test\r
- mov ecx, ebx\r
- call allocate_mem\r
- push ebx\r
- push ecx\r
-\r
- mov ebx, 0x10000 ; third test\r
- mov [test_size], ebx\r
- call allocate_mem\r
- mov [test_address], ebx ; test allocation\r
-\r
- pop ecx\r
- pop ebx\r
- call free_mem\r
-\r
- mov [test1_or_2], 0\r
- jmp .end_test\r
- .free_the_test_block:\r
- mov ebx, [test_address]\r
- mov ecx, [test_size] ; and freeing\r
- call free_mem\r
- mov ebx, [test_address2]\r
- mov ecx, [test_size2] ; and freeing\r
- call free_mem\r
- mov [test1_or_2], 1\r
- .end_test:\r
- ;---------END DEBUG---------\r
-\r
- mov esi, bos_mem_str1\r
- mov bl, 0x07\r
- call print\r
- mov esi, bos_mem_str2\r
- mov bl, 0x07\r
- call print\r
- mov esi, bos_mem_str6\r
- mov bl, 0x04\r
- call print\r
- mov ebx, [ram_amount]\r
- mov cl, 0x04\r
- call print_hex32\r
-\r
- mov esi, bos_mem_str3\r
- mov bl, 0x07\r
- call print\r
- mov esi, bos_mem_str4\r
- mov bl, 0x07\r
- call print\r
- mov esi, bos_mem_str5\r
- mov bl, 0x07\r
- call print\r
-\r
- mov [current_mem_pos], 0\r
- mov eax, [first_free]\r
- mov [next_free], eax\r
-\r
- ;-------------------------;\r
- ; this is a used block ;\r
- ;-------------------------;\r
- .used:\r
- mov eax, [current_mem_pos]\r
- mov ebx, [next_free]\r
- cmp eax, [ram_amount] ; .free will always let us\r
- jae .end ; decide if we are to quit or not.\r
-\r
- cmp [next_free], 0\r
- jne .more_blocks\r
- mov ebx, [ram_amount] ; no next block, use ram size\r
- sub ebx, eax ; get size in ebx\r
- mov edi, 1\r
- call .print_mem_info\r
- jmp .end\r
-\r
- .more_blocks:\r
- sub ebx, eax\r
- mov edi, 1\r
- call .print_mem_info\r
-\r
- mov eax, [next_free]\r
- cmp eax, 0\r
- je .end\r
- mov ebx, [eax+8]\r
- mov [current_mem_pos], eax\r
- mov [next_free], ebx\r
-\r
- ;-------------------------;\r
- ; this is a free block ;\r
- ;-------------------------;\r
- .free:\r
- mov eax, [current_mem_pos] ; current pos. in eax\r
- mov ebx, [eax+4] ; current size in ebx\r
- mov ecx, [eax] ; prev pointer in ecx\r
- mov edx, [eax+8] ; next pointer in edx\r
- xor edi, edi\r
- call .print_mem_info\r
-\r
- add eax, ebx\r
- mov [current_mem_pos], eax\r
- jmp .used\r
-\r
- .end:\r
- pop eax\r
- pop ebx\r
- pop ecx\r
- pop edx\r
- ret\r
-\r
- ;-------------------------;\r
- ; print mem block info ;\r
- ;-------------------------;\r
- .print_mem_info:\r
- push eax ; current pos\r
- push ebx ; current size\r
- push ecx ; prev pointer\r
- push edx ; next pointer\r
- push edi ; 1 = used\r
-\r
- push ebx ; push size\r
- mov esi, bos_mem_crlf\r
- mov bl, 0x07\r
- call print\r
- mov esi, bos_mem_str6\r
- mov bl, 0x04\r
- call print\r
-\r
- push ecx ; push prev\r
- mov ebx, eax\r
- mov cl, 0x04\r
- call print_hex32\r
-\r
- mov esi, bos_mem_str0\r
- mov bl, 0x07\r
- call print\r
- mov esi, bos_mem_str6\r
- mov bl, 0x04\r
- call print\r
-\r
- pop ecx ; pop prev\r
- pop ebx ; pop size\r
- push ecx ; push prev\r
- mov cl, 0x04\r
- call print_hex32\r
- mov esi, bos_mem_str0\r
- mov bl, 0x07\r
- call print\r
-\r
- cmp edi, 1\r
- jne .print_free\r
- pop ecx ; pop prev\r
-\r
- mov esi, bos_mem_str8 ; it's used\r
- mov bl, 0x07\r
- call print\r
- mov esi, bos_mem_str9\r
- mov bl, 0x07\r
- call print\r
- mov esi, bos_mem_str9\r
- mov bl, 0x07\r
- call print\r
- jmp .print_end\r
-\r
- .print_free:\r
- mov esi, bos_mem_str7 ; it's free\r
- mov bl, 0x07\r
- call print\r
- mov esi, bos_mem_str6\r
- mov bl, 0x04\r
- call print\r
-\r
- pop ebx ; pop the pushed ecx\r
- mov cl, 0x04 ; into ebx instead.. ;)\r
- call print_hex32\r
- mov esi, bos_mem_str0\r
- mov bl, 0x07\r
- call print\r
- mov esi, bos_mem_str6\r
- mov bl, 0x04\r
- call print\r
- mov ebx, edx\r
- mov cl, 0x04\r
- call print_hex32\r
-\r
- .print_end:\r
- pop edi\r
- pop edx\r
- pop ecx\r
- pop ebx\r
- pop eax\r
- ret
\ No newline at end of file
+ push ecx\r
+ mov ecx, 100\r
+ call delay\r
+ pop ecx\r
+ mov esi, bos_delay_str\r
+ mov bl, 0x07\r
+ call print\r
+ loop .loop\r
+ ret\r
+\r
+\r
+ ;----------------;\r
+ ; VGA test ;\r
+ ;----------------;\r
+ bos_vga_str db 13,10,'It works..! :-D', 0\r
+ vga_test:\r
+\r
+ mov ax, 1 ; clear the screen\r
+ call set_mode_0x13 ; set mode 0x13\r
+\r
+ mov cx, 256 ; loop out some pixels\r
+ .l1:\r
+ mov bx, cx ; x value\r
+ mov al, cl\r
+ push cx\r
+ mov cx, 50 ; y value\r
+ call put_0x13_pixel\r
+ pop cx\r
+ loop .l1\r
+\r
+ ; draw mario and some ground\r
+ mov esi, mario\r
+ mov ax, 260 ; x\r
+ mov bx, 168 ; y\r
+ mov cx, 20 ; height\r
+ mov dx, 18 ; width\r
+ call put_0x13_sprite ; in vga.inc\r
+ mov esi, grass_l\r
+ mov ax, 250\r
+ mov bx, 186\r
+ mov cx, 20\r
+ mov dx, 14\r
+ call put_0x13_sprite\r
+ mov esi, grass_f\r
+ mov ax, 265\r
+ mov bx, 186\r
+ mov cx, 20\r
+ mov dx, 14\r
+ call put_0x13_sprite\r
+ mov esi, grass_ul\r
+ mov ax, 280\r
+ mov bx, 186\r
+ mov cx, 20\r
+ mov dx, 14\r
+ call put_0x13_sprite\r
+ mov esi, g_lefts\r
+ mov ax, 280\r
+ mov bx, 172\r
+ mov cx, 20\r
+ mov dx, 14\r
+ call put_0x13_sprite\r
+ mov esi, grass_l\r
+ mov ax, 280\r
+ mov bx, 158\r
+ mov cx, 20\r
+ mov dx, 14\r
+ call put_0x13_sprite\r
+ mov esi, g_earth\r
+ mov ax, 300\r
+ mov bx, 186\r
+ mov cx, 20\r
+ mov dx, 14\r
+ call put_0x13_sprite\r
+ mov esi, g_earth\r
+ mov ax, 300\r
+ mov bx, 172\r
+ mov cx, 20\r
+ mov dx, 14\r
+ call put_0x13_sprite\r
+ mov esi, grass_f\r
+ mov ax, 300\r
+ mov bx, 158\r
+ mov cx, 20\r
+ mov dx, 14\r
+ call put_0x13_sprite\r
+\r
+ call wait_key\r
+\r
+ mov ax, 1 ; clear the screen\r
+ call set_mode_0x03 ; set mode 0x03\r
+\r
+ mov esi, bos_vga_str ; print that it worked!\r
+ mov bl, 1\r
+ call print\r
+ ret\r
+\r
+\r
+\r
+\r
+ ;--------------------------;\r
+ ; fdd test ;\r
+ ;--------------------------;\r
+ fdd_test:\r
+ mov bl, 13\r
+ mov bh, 7 ; make newline\r
+ call print_char\r
+\r
+ mov ecx, 512\r
+ mov edi, 0x80000\r
+ .loop511:\r
+ mov dword [edi], 'shit' ; set DMA buffer to shit, as a test\r
+ add edi, 4\r
+ sub ecx, 4\r
+ cmp ecx, 0\r
+ jne .loop511\r
+\r
+ mov dh, 0x00 ; side\r
+ mov dl, 0x00 ; drive\r
+ mov ch, 0x00 ; track\r
+ mov cl, 0x01 ; sector\r
+ mov bl, 0x00 ; 1 = write\r
+ call fdd_read_write\r
+ jc .error\r
+\r
+ mov esi, 0x80000 ; dma buffer\r
+ mov ecx, 512\r
+ .print:\r
+ lodsb\r
+ mov bl, al\r
+ mov bh, 7\r
+ call print_char ; print it. is it still\r
+ dec ecx ; "shit" ?\r
+ cmp ecx, 0\r
+ jne .print\r
+ jmp .end\r
+\r
+ .error:\r
+ mov bl, 13\r
+ call print_char\r
+ mov bl, 10\r
+ call print_char\r
+ mov bh, 0x40\r
+ mov bl, 'E' ; error sign... :'(\r
+ call print_char\r
+\r
+ call fdd_reset\r
+ mov al, 1\r
+ call fdd_recal_seek ; do somthing about the error.. :P\r
+\r
+ .end:\r
+ ret\r
+\r
+\r
+\r
+\r
+\r
+ ;------------------------------;\r
+ ; memory test ;\r
+ ;------------------------------;\r
+\r
+ bos_mem_str1 db 13,10,'Performing memory test. (debugging allocs assume 32mb RAM)', 0\r
+ bos_mem_str2 db 13,10,'Total installed memory (in bytes): ',0\r
+ bos_mem_str3 db 13,10,13,10,'Memory chunks:',0\r
+ bos_mem_str4 db 13,10,'Address Size Type Previous Next',0\r
+ bos_mem_str5 db 13,10,'-------------------------------------------------------',0\r
+ bos_mem_str6 db '0x',0\r
+ bos_mem_str7 db 'Free ',0\r
+ bos_mem_str8 db 'Used ',0\r
+ bos_mem_str9 db 'None ',0\r
+ bos_mem_str0 db ' ',0\r
+ bos_mem_crlf db 13,10,0\r
+ current_mem_pos dd 0\r
+ next_free dd 0\r
+\r
+ ;---------DEBUG---------\r
+ test1_or_2 db 1\r
+ test_address dd 0\r
+ test_size dd 0\r
+ test_address2 dd 0\r
+ test_size2 dd 0\r
+ ;---------END DEBUG---------\r
+\r
+ mem_test:\r
+ push eax\r
+ push ebx\r
+ push ecx\r
+ push edx\r
+\r
+ ;---------DEBUG---------\r
+ cmp [test1_or_2],0\r
+ je .free_the_test_block\r
+\r
+ mov ebx, 0x1000000 ;first test\r
+ mov [test_size2], ebx\r
+ call allocate_mem\r
+ mov [test_address2], ebx\r
+\r
+ mov ebx, 0xE00000 ; second test\r
+ mov ecx, ebx\r
+ call allocate_mem\r
+ push ebx\r
+ push ecx\r
+\r
+ mov ebx, 0x10000 ; third test\r
+ mov [test_size], ebx\r
+ call allocate_mem\r
+ mov [test_address], ebx ; test allocation\r
+\r
+ pop ecx\r
+ pop ebx\r
+ call free_mem\r
+\r
+ mov [test1_or_2], 0\r
+ jmp .end_test\r
+ .free_the_test_block:\r
+ mov ebx, [test_address]\r
+ mov ecx, [test_size] ; and freeing\r
+ call free_mem\r
+ mov ebx, [test_address2]\r
+ mov ecx, [test_size2] ; and freeing\r
+ call free_mem\r
+ mov [test1_or_2], 1\r
+ .end_test:\r
+ ;---------END DEBUG---------\r
+\r
+ mov esi, bos_mem_str1\r
+ mov bl, 0x07\r
+ call print\r
+ mov esi, bos_mem_str2\r
+ mov bl, 0x07\r
+ call print\r
+ mov esi, bos_mem_str6\r
+ mov bl, 0x04\r
+ call print\r
+ mov ebx, [ram_amount]\r
+ mov cl, 0x04\r
+ call print_hex32\r
+\r
+ mov esi, bos_mem_str3\r
+ mov bl, 0x07\r
+ call print\r
+ mov esi, bos_mem_str4\r
+ mov bl, 0x07\r
+ call print\r
+ mov esi, bos_mem_str5\r
+ mov bl, 0x07\r
+ call print\r
+\r
+ mov [current_mem_pos], 0\r
+ mov eax, [first_free]\r
+ mov [next_free], eax\r
+\r
+ ;-------------------------;\r
+ ; this is a used block ;\r
+ ;-------------------------;\r
+ .used:\r
+ mov eax, [current_mem_pos]\r
+ mov ebx, [next_free]\r
+ cmp eax, [ram_amount] ; .free will always let us\r
+ jae .end ; decide if we are to quit or not.\r
+\r
+ cmp [next_free], 0\r
+ jne .more_blocks\r
+ mov ebx, [ram_amount] ; no next block, use ram size\r
+ sub ebx, eax ; get size in ebx\r
+ mov edi, 1\r
+ call .print_mem_info\r
+ jmp .end\r
+\r
+ .more_blocks:\r
+ sub ebx, eax\r
+ mov edi, 1\r
+ call .print_mem_info\r
+\r
+ mov eax, [next_free]\r
+ cmp eax, 0\r
+ je .end\r
+ mov ebx, [eax+8]\r
+ mov [current_mem_pos], eax\r
+ mov [next_free], ebx\r
+\r
+ ;-------------------------;\r
+ ; this is a free block ;\r
+ ;-------------------------;\r
+ .free:\r
+ mov eax, [current_mem_pos] ; current pos. in eax\r
+ mov ebx, [eax+4] ; current size in ebx\r
+ mov ecx, [eax] ; prev pointer in ecx\r
+ mov edx, [eax+8] ; next pointer in edx\r
+ xor edi, edi\r
+ call .print_mem_info\r
+\r
+ add eax, ebx\r
+ mov [current_mem_pos], eax\r
+ jmp .used\r
+\r
+ .end:\r
+ pop eax\r
+ pop ebx\r
+ pop ecx\r
+ pop edx\r
+ ret\r
+\r
+ ;-------------------------;\r
+ ; print mem block info ;\r
+ ;-------------------------;\r
+ .print_mem_info:\r
+ push eax ; current pos\r
+ push ebx ; current size\r
+ push ecx ; prev pointer\r
+ push edx ; next pointer\r
+ push edi ; 1 = used\r
+\r
+ push ebx ; push size\r
+ mov esi, bos_mem_crlf\r
+ mov bl, 0x07\r
+ call print\r
+ mov esi, bos_mem_str6\r
+ mov bl, 0x04\r
+ call print\r
+\r
+ push ecx ; push prev\r
+ mov ebx, eax\r
+ mov cl, 0x04\r
+ call print_hex32\r
+\r
+ mov esi, bos_mem_str0\r
+ mov bl, 0x07\r
+ call print\r
+ mov esi, bos_mem_str6\r
+ mov bl, 0x04\r
+ call print\r
+\r
+ pop ecx ; pop prev\r
+ pop ebx ; pop size\r
+ push ecx ; push prev\r
+ mov cl, 0x04\r
+ call print_hex32\r
+ mov esi, bos_mem_str0\r
+ mov bl, 0x07\r
+ call print\r
+\r
+ cmp edi, 1\r
+ jne .print_free\r
+ pop ecx ; pop prev\r
+\r
+ mov esi, bos_mem_str8 ; it's used\r
+ mov bl, 0x07\r
+ call print\r
+ mov esi, bos_mem_str9\r
+ mov bl, 0x07\r
+ call print\r
+ mov esi, bos_mem_str9\r
+ mov bl, 0x07\r
+ call print\r
+ jmp .print_end\r
+\r
+ .print_free:\r
+ mov esi, bos_mem_str7 ; it's free\r
+ mov bl, 0x07\r
+ call print\r
+ mov esi, bos_mem_str6\r
+ mov bl, 0x04\r
+ call print\r
+\r
+ pop ebx ; pop the pushed ecx\r
+ mov cl, 0x04 ; into ebx instead.. ;)\r
+ call print_hex32\r
+ mov esi, bos_mem_str0\r
+ mov bl, 0x07\r
+ call print\r
+ mov esi, bos_mem_str6\r
+ mov bl, 0x04\r
+ call print\r
+ mov ebx, edx\r
+ mov cl, 0x04\r
+ call print_hex32\r
+\r
+ .print_end:\r
+ pop edi\r
+ pop edx\r
+ pop ecx\r
+ pop ebx\r
+ pop eax\r
+ ret
\ No newline at end of file
; Variabels ;\r
;--------------;\r
\r
-prompt db 'BOS kernel>', 0\r
-cmd_buffer: times 255 db 0 ; 255 char command buffer\r
+ prompt db 'BOS kernel>', 0\r
+ cmd_buffer: times 255 db 0 ; 255 char command buffer\r
\r
\r
\r
; print the prompt for the first time.. :-) ;\r
;----------------------------------------------;\r
init_cmd:\r
- mov byte [kbd_status], 0 ; reset LEDs to 0..\r
- call update_leds\r
+ mov byte [kbd_status], 0 ; reset LEDs to 0..\r
+ call update_leds\r
\r
- mov esi, prompt\r
- mov bl, 0x0E\r
- call print\r
+ mov esi, prompt\r
+ mov bl, 0x0E\r
+ call print\r
\r
- mov edi, cmd_buffer\r
-\r
- ret\r
+ mov edi, cmd_buffer\r
+ ret\r
\r
\r
\r
; Main shell function & loop ;\r
;-------------------------------;\r
shell:\r
- mov cx, 0 ; max 254 chars in command\r
- .loop: ; no. 255 is always a 0\r
+ mov cx, 0 ; max 254 chars in command\r
+ .loop: ; no. 255 is always a 0\r
\r
- push cx ; better be sure it´s safe..\r
- push edi\r
+ push cx ; better be sure it´s safe..\r
+ push edi\r
\r
- call getc ; keyboard.inc\r
+ call getc ; keyboard.inc\r
\r
- pop edi\r
- pop cx\r
+ pop edi\r
+ pop cx\r
\r
- cmp ah, 28 ; enter\r
- je .enter\r
+ cmp ah, 28 ; enter\r
+ je .enter\r
\r
- cmp ah, 14 ; backspace\r
- je .backspace\r
+ cmp ah, 14 ; backspace\r
+ je .backspace\r
\r
- cmp al, 0 ; no normal key\r
- je .loop ; exceptions above..\r
+ cmp al, 0 ; no normal key\r
+ je .loop ; exceptions above..\r
\r
- cmp cx, 254\r
- jae .loop\r
+ cmp cx, 254\r
+ jae .loop\r
\r
- stosb ; store char in buffer\r
- inc cx\r
+ stosb ; store char in buffer\r
+ inc cx\r
\r
- mov bl, al ; print it..\r
- mov bh, 0x07\r
- call print_char\r
+ mov bl, al ; print it..\r
+ mov bh, 0x07\r
+ call print_char\r
\r
- jmp .loop\r
+ jmp .loop\r
\r
.enter:\r
- mov al, 0 ; the command buffer is\r
- stosb ; in ASCIIZ format..\r
- jmp chk_cmd\r
+ mov al, 0 ; the command buffer is\r
+ stosb ; in ASCIIZ format..\r
+ jmp chk_cmd\r
\r
.backspace:\r
- cmp cx, 0 ; can´t delete the prompt.. ;-)\r
- je .loop\r
- dec edi ; "remove" one char from buffer\r
- call backspace ; do backspace on screen\r
- dec cx ; decrease buffer counter\r
- jmp .loop\r
- jmp $\r
- ret\r
+ cmp cx, 0 ; can´t delete the prompt.. ;-)\r
+ je .loop\r
+ dec edi ; "remove" one char from buffer\r
+ call backspace ; do backspace on screen\r
+ dec cx ; decrease buffer counter\r
+ jmp .loop\r
+ jmp $\r
+ ret\r
\r
\r
\r
;---------------------------------;\r
chk_cmd:\r
\r
- mov esi, commands\r
- mov edi, cmd_buffer\r
- mov ebp, 0 ; command-table counter\r
-\r
- ;------------------------------------------;\r
- ; big loop, for each command in table ;\r
- ;------------------------------------------;\r
- .l1:\r
- mov ecx, 0 ; char counter\r
-\r
- cmp byte [esi], 0xFF\r
- je .no_valid_cmd\r
-\r
- ;------------------------------------------;\r
- ; smaller loop for each char in command ;\r
- ;------------------------------------------;\r
- .l2:\r
- cmp byte [edi], ' ' ; space or zero\r
- je .l_chk ; both indicate\r
- cmp byte [edi], 0 ; "end of command"\r
- je .l_chk\r
- jmp .l_cont\r
+ mov esi, commands\r
+ mov edi, cmd_buffer\r
+ mov ebp, 0 ; command-table counter\r
+\r
+ ;------------------------------------------;\r
+ ; big loop, for each command in table ;\r
+ ;------------------------------------------;\r
+ .l1:\r
+ mov ecx, 0 ; char counter\r
+\r
+ cmp byte [esi], 0xFF\r
+ je .no_valid_cmd\r
+\r
+ ;------------------------------------------;\r
+ ; smaller loop for each char in command ;\r
+ ;------------------------------------------;\r
+ .l2:\r
+ cmp byte [edi], ' ' ; space or zero\r
+ je .l_chk ; both indicate\r
+ cmp byte [edi], 0 ; "end of command"\r
+ je .l_chk\r
+ jmp .l_cont\r
\r
.l_chk:\r
- cmp byte [esi], 0 ; commands are equal, but\r
- jne .new_cmd ; do not match in size..\r
- jmp .done\r
+ cmp byte [esi], 0 ; commands are equal, but\r
+ jne .new_cmd ; do not match in size..\r
+ jmp .done\r
\r
.l_cont:\r
- cmp byte [esi], 0 ; commands are equal, but\r
- je .new_cmd ; do not match in size..\r
-\r
- mov al, [esi]\r
- cmp al, [edi]\r
- jne .new_cmd\r
-\r
- inc esi\r
- inc edi\r
- inc ecx ; inc char counter\r
- jmp .l2\r
- ;----------------------;\r
- ; end of small loop ;\r
- ;----------------------;\r
-\r
- .new_cmd:\r
- inc ebp ; inc command counter\r
- mov edi, cmd_buffer ; remember to point to the right place.. ;-)\r
- .l3:\r
- inc esi\r
- cmp byte [esi], 0 ; loop until end of command\r
- jne .l3\r
-\r
- inc esi\r
- jmp .l1\r
- ;----------------------;\r
- ; end of big loop ;\r
- ;----------------------;\r
-\r
-\r
-\r
- ;--------------------------;\r
- ; done. command found ;\r
- ;--------------------------;\r
- .done:\r
- cmp ecx, 0 ; make sure it´s more\r
- je .d_quit ; then 0 chars..\r
-\r
- shl ebp, 2\r
- call dword [ebp+call_table]\r
-\r
- .d_quit:\r
- jmp .cont ; then go back to the shell\r
-\r
-\r
- ;--------------------------;\r
- ; command not found ;\r
- ;--------------------------;\r
- .no_valid_cmd:\r
-\r
- ; call search_current_directory_for_file.... :-)\r
-\r
- call no_such_cmd ; print error..\r
- jmp .cont ; then go back to the shell\r
-\r
- ;---------------------------------;\r
- ; make the prompt appear again ;\r
- ;---------------------------------;\r
- .cont:\r
- call new_line\r
- call new_line\r
- mov esi, prompt\r
- mov bl, 0x0E\r
- call print\r
- mov edi, cmd_buffer\r
- jmp shell\r
-\r
- ret\r
+ cmp byte [esi], 0 ; commands are equal, but\r
+ je .new_cmd ; do not match in size..\r
+\r
+ mov al, [esi]\r
+ cmp al, [edi]\r
+ jne .new_cmd\r
+\r
+ inc esi\r
+ inc edi\r
+ inc ecx ; inc char counter\r
+ jmp .l2\r
+ ;----------------------;\r
+ ; end of small loop ;\r
+ ;----------------------;\r
+\r
+ .new_cmd:\r
+ inc ebp ; inc command counter\r
+ mov edi, cmd_buffer ; remember to point to the right place.. ;-)\r
+ .l3:\r
+ inc esi\r
+ cmp byte [esi], 0 ; loop until end of command\r
+ jne .l3\r
+\r
+ inc esi\r
+ jmp .l1\r
+ ;----------------------;\r
+ ; end of big loop ;\r
+ ;----------------------;\r
+\r
+\r
+\r
+ ;--------------------------;\r
+ ; done. command found ;\r
+ ;--------------------------;\r
+ .done:\r
+ cmp ecx, 0 ; make sure it´s more\r
+ je .d_quit ; then 0 chars..\r
+\r
+ shl ebp, 2\r
+ call dword [ebp+call_table]\r
+\r
+ .d_quit:\r
+ jmp .cont ; then go back to the shell\r
+\r
+\r
+ ;--------------------------;\r
+ ; command not found ;\r
+ ;--------------------------;\r
+ .no_valid_cmd:\r
+\r
+ ; call search_current_directory_for_file.... :-)\r
+\r
+ call no_such_cmd ; print error..\r
+ jmp .cont ; then go back to the shell\r
+\r
+ ;---------------------------------;\r
+ ; make the prompt appear again ;\r
+ ;---------------------------------;\r
+ .cont:\r
+ call new_line\r
+ call new_line\r
+ mov esi, prompt\r
+ mov bl, 0x0E\r
+ call print\r
+ mov edi, cmd_buffer\r
+ jmp shell\r
+\r
+ ret
\ No newline at end of file
; bx = frequency ;\r
;-----------------------;\r
speaker_on:\r
- mov dx, 0x12\r
- mov ax, 0x34DC\r
- div bx\r
- mov bl, al\r
- mov al, 0xB6\r
- out 0x43, al\r
- mov al, bl\r
- out 0x42, al\r
- mov al, ah\r
- out 0x42, al\r
- in al, 0x61\r
- or al, 3\r
- out 0x61, al\r
- ret\r
+ mov dx, 0x12\r
+ mov ax, 0x34DC\r
+ div bx\r
+ mov bl, al\r
+ mov al, 0xB6\r
+ out 0x43, al\r
+ mov al, bl\r
+ out 0x42, al\r
+ mov al, ah\r
+ out 0x42, al\r
+ in al, 0x61\r
+ or al, 3\r
+ out 0x61, al\r
+ ret\r
\r
\r
;----------------------;\r
; turn speaker off ;\r
;----------------------;\r
speaker_off:\r
- push ax\r
- in al, 0x61\r
- and al, 0xFC ; some do 0xFD, some 0xFC... :/\r
- out 0x61, al\r
- pop ax\r
- ret\r
+ push ax\r
+ in al, 0x61\r
+ and al, 0xFC ; some do 0xFD, some 0xFC... :/\r
+ out 0x61, al\r
+ pop ax\r
+ ret\r
\r
\r
;----------------------------------;\r
; PC-speaker; beep ;\r
;----------------------------------;\r
beep:\r
- push eax\r
- push ecx\r
- in al, 0x61 ; turn the speaker on.\r
- or al, 3\r
- out 0x61, al\r
- mov ecx, 50\r
- call delay ; timer.inc\r
- call speaker_off\r
- pop ecx\r
- pop eax\r
- ret
\ No newline at end of file
+ push eax\r
+ push ecx\r
+ in al, 0x61 ; turn the speaker on.\r
+ or al, 3\r
+ out 0x61, al\r
+ mov ecx, 50\r
+ call delay ; timer.inc\r
+ call speaker_off\r
+ pop ecx\r
+ pop eax\r
+ ret
\ No newline at end of file
; System interrupt 0x32 ;\r
;--------------------------;\r
\r
- isr32_str_1 db "ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»", 0\r
- isr32_str_2 db "º \10 INT 32 CALLED!! º", 0\r
- isr32_str_3 db "º \ 2 \ 1 º", 0\r
- isr32_str_4 db "ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ", 0\r
+ isr32_str_1 db "ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»", 0\r
+ isr32_str_2 db "º \10 INT 32 CALLED!! º", 0\r
+ isr32_str_3 db "º \ 2 \ 1 º", 0\r
+ isr32_str_4 db "ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ", 0\r
\r
- isr32_str_5 db "CTRL+ALT+DEL was pressed!", 0\r
+ isr32_str_5 db "CTRL+ALT+DEL was pressed!", 0\r
\r
interrupt_32:\r
\r
;-----------------;\r
; get char ;\r
;-----------------;\r
- cmp ax, 0x0001 ; get character int..\r
- jne .cade\r
+ cmp ax, 0x0001 ; get character int..\r
+ jne .cade\r
\r
- call getc\r
+ call getc\r
\r
- jmp .end\r
+ jmp .end\r
\r
;-----------------------------;\r
; ctrl+alt+delete function ;\r
;-----------------------------;\r
.cade:\r
- cmp ax, 0xCADE ; CTRL+ALT+DEL was pressed\r
- jne .ordinary\r
+ cmp ax, 0xCADE ; CTRL+ALT+DEL was pressed\r
+ jne .ordinary\r
\r
- push bx\r
- push cx\r
- push dx\r
+ push bx\r
+ push cx\r
+ push dx\r
\r
- call getcursor\r
- mov cx, bx\r
+ call getcursor\r
+ mov cx, bx\r
\r
- mov dl, 0x0C\r
- mov dh, 0x1B\r
- call setcursorxy\r
+ mov dl, 0x0C\r
+ mov dh, 0x1B\r
+ call setcursorxy\r
\r
- mov esi, isr32_str_5\r
- mov al, 0x40\r
- call print\r
+ mov esi, isr32_str_5\r
+ mov al, 0x40\r
+ call print\r
\r
- mov bx, cx\r
- call setcursor\r
+ mov bx, cx\r
+ call setcursor\r
\r
- pop dx\r
- pop cx\r
- pop bx\r
+ pop dx\r
+ pop cx\r
+ pop bx\r
\r
- jmp .end\r
+ jmp .end\r
\r
;-----------------------------;\r
; no selected function.. ;\r
;-----------------------------;\r
- .ordinary: ; print that int 0x32 was called...\r
- push bx\r
- push cx\r
- push dx\r
+ .ordinary: ; print that int 0x32 was called...\r
+ push bx\r
+ push cx\r
+ push dx\r
\r
- mov dl, 0x0B\r
- mov dh, 0x1A\r
- call setcursorxy\r
+ mov dl, 0x0B\r
+ mov dh, 0x1A\r
+ call setcursorxy\r
\r
- mov esi, isr32_str_1\r
- mov bl, 0x40\r
- call print\r
+ mov esi, isr32_str_1\r
+ mov bl, 0x40\r
+ call print\r
\r
- mov dl, 0x0C\r
- mov dh, 0x1A\r
- call setcursorxy\r
+ mov dl, 0x0C\r
+ mov dh, 0x1A\r
+ call setcursorxy\r
\r
- mov esi, isr32_str_2\r
- mov bl, 0x40\r
- call print\r
+ mov esi, isr32_str_2\r
+ mov bl, 0x40\r
+ call print\r
\r
- mov dl, 0x0D\r
- mov dh, 0x1A\r
- call setcursorxy\r
+ mov dl, 0x0D\r
+ mov dh, 0x1A\r
+ call setcursorxy\r
\r
- mov esi, isr32_str_3\r
- mov bl, 0x40\r
- call print\r
+ mov esi, isr32_str_3\r
+ mov bl, 0x40\r
+ call print\r
\r
- mov dl, 0x0E\r
- mov dh, 0x1A\r
- call setcursorxy\r
+ mov dl, 0x0E\r
+ mov dh, 0x1A\r
+ call setcursorxy\r
\r
- mov esi, isr32_str_4\r
- mov bl, 0x40\r
- call print\r
+ mov esi, isr32_str_4\r
+ mov bl, 0x40\r
+ call print\r
\r
- pop dx\r
- pop cx\r
- pop bx\r
+ pop dx\r
+ pop cx\r
+ pop bx\r
\r
- .end:\r
- ret\r
+ .end:\r
+ ret\r
kernel_load db 'Loading kernel...', 0\r
kernel_load_ok db '[ OK ]', 0\r
\r
- pic_irq db 'Fixing PIC and IRQs...', 0\r
+ pic_irq db 'Fixing PIC and IRQs...', 0\r
pic_irq_ok db '[ Done ]', 0\r
\r
- idt_mess db 'Setting up IDT...', 0\r
- idt_ok db '[ IDT OK ]', 0\r
+ idt_mess db 'Setting up IDT...', 0\r
+ idt_ok db '[ IDT OK ]', 0\r
\r
- kbd_load db 'Enables IRQ1...', 0\r
- kbd_ok db '[ Keyboard OK ]', 0\r
+ kbd_load db 'Enables IRQ1...', 0\r
+ kbd_ok db '[ Keyboard OK ]', 0\r
\r
- bos_shell db 'BOS shell. Type "help" for more info.', 13, 10, 0\r
+ bos_shell db 'BOS shell. Type "help" for more info.', 13, 10, 0\r
; System 8x16 font.. ;\r
; ;\r
;----------------------------------------------------------;\r
- font_8x16:\r
- db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x7E, 0x81, 0xA5, 0x81, 0x81, 0xA5, 0x99, 0x81, 0x81, 0x7E, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x7E, 0xFF, 0xDB, 0xFF, 0xFF, 0xDB, 0xE7, 0xFF, 0xFF, 0x7E, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0x6C, 0xFE, 0xFE, 0xFE, 0xFE, 0x7C, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x7C, 0xFE, 0x7C, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x18, 0x3C, 0x3C, 0xE7, 0xE7, 0xE7, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x7E, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3C, 0x3C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
- db 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0xC3, 0xC3, 0xE7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF\r
- db 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x66, 0x42, 0x42, 0x66, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00\r
- db 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC3, 0x99, 0xBD, 0xBD, 0x99, 0xC3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF\r
- db 0x00, 0x00, 0x1E, 0x06, 0x0E, 0x1A, 0x78, 0xCC, 0xCC, 0xCC, 0xCC, 0x78, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x3C, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x7E, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x3F, 0x33, 0x3F, 0x30, 0x30, 0x30, 0x30, 0x70, 0xF0, 0xE0, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x7F, 0x63, 0x7F, 0x63, 0x63, 0x63, 0x63, 0x67, 0xE7, 0xE6, 0xC0, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x18, 0x18, 0xDB, 0x3C, 0xE7, 0x3C, 0xDB, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x80, 0xC0, 0xE0, 0xF0, 0xF8, 0xFE, 0xF8, 0xF0, 0xE0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x02, 0x06, 0x0E, 0x1E, 0x3E, 0xFE, 0x3E, 0x1E, 0x0E, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x18, 0x3C, 0x7E, 0x18, 0x18, 0x18, 0x7E, 0x3C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x7F, 0xDB, 0xDB, 0xDB, 0x7B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x7C, 0xC6, 0x60, 0x38, 0x6C, 0xC6, 0xC6, 0x6C, 0x38, 0x0C, 0xC6, 0x7C, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0xFE, 0xFE, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x18, 0x3C, 0x7E, 0x18, 0x18, 0x18, 0x7E, 0x3C, 0x18, 0x7E, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x18, 0x3C, 0x7E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7E, 0x3C, 0x18, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x0C, 0xFE, 0x0C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0xFE, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0xC0, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x6C, 0xFE, 0x6C, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x38, 0x7C, 0x7C, 0xFE, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0x7C, 0x7C, 0x38, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x18, 0x3C, 0x3C, 0x3C, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x66, 0x66, 0x66, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x6C, 0x6C, 0xFE, 0x6C, 0x6C, 0x6C, 0xFE, 0x6C, 0x6C, 0x00, 0x00, 0x00, 0x00\r
- db 0x18, 0x18, 0x7C, 0xC6, 0xC2, 0xC0, 0x7C, 0x06, 0x06, 0x86, 0xC6, 0x7C, 0x18, 0x18, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0xC2, 0xC6, 0x0C, 0x18, 0x30, 0x60, 0xC6, 0x86, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x38, 0x6C, 0x6C, 0x38, 0x76, 0xDC, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x30, 0x30, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x0C, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x0C, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x30, 0x18, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x3C, 0xFF, 0x3C, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7E, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x38, 0x6C, 0xC6, 0xC6, 0xD6, 0xD6, 0xC6, 0xC6, 0x6C, 0x38, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x18, 0x38, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7E, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x7C, 0xC6, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0xC6, 0xFE, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x7C, 0xC6, 0x06, 0x06, 0x3C, 0x06, 0x06, 0x06, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x0C, 0x1C, 0x3C, 0x6C, 0xCC, 0xFE, 0x0C, 0x0C, 0x0C, 0x1E, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0xFE, 0xC0, 0xC0, 0xC0, 0xFC, 0x06, 0x06, 0x06, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x38, 0x60, 0xC0, 0xC0, 0xFC, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0xFE, 0xC6, 0x06, 0x06, 0x0C, 0x18, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0x7E, 0x06, 0x06, 0x06, 0x0C, 0x78, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0x0C, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xDE, 0xDE, 0xDE, 0xDC, 0xC0, 0x7C, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x10, 0x38, 0x6C, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0xFC, 0x66, 0x66, 0x66, 0x7C, 0x66, 0x66, 0x66, 0x66, 0xFC, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x3C, 0x66, 0xC2, 0xC0, 0xC0, 0xC0, 0xC0, 0xC2, 0x66, 0x3C, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0xF8, 0x6C, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x6C, 0xF8, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0xFE, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x62, 0x66, 0xFE, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0xFE, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x60, 0x60, 0xF0, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x3C, 0x66, 0xC2, 0xC0, 0xC0, 0xDE, 0xC6, 0xC6, 0x66, 0x3A, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x3C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x1E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0xCC, 0xCC, 0xCC, 0x78, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0xE6, 0x66, 0x66, 0x6C, 0x78, 0x78, 0x6C, 0x66, 0x66, 0xE6, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0xF0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x62, 0x66, 0xFE, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0xC6, 0xEE, 0xFE, 0xFE, 0xD6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0xC6, 0xE6, 0xF6, 0xFE, 0xDE, 0xCE, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0xFC, 0x66, 0x66, 0x66, 0x7C, 0x60, 0x60, 0x60, 0x60, 0xF0, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xD6, 0xDE, 0x7C, 0x0C, 0x0E, 0x00, 0x00\r
- db 0x00, 0x00, 0xFC, 0x66, 0x66, 0x66, 0x7C, 0x6C, 0x66, 0x66, 0x66, 0xE6, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0x60, 0x38, 0x0C, 0x06, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x7E, 0x7E, 0x5A, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x6C, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xD6, 0xD6, 0xD6, 0xFE, 0xEE, 0x6C, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0xC6, 0xC6, 0x6C, 0x7C, 0x38, 0x38, 0x7C, 0x6C, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0xFE, 0xC6, 0x86, 0x0C, 0x18, 0x30, 0x60, 0xC2, 0xC6, 0xFE, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x3C, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3C, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0x70, 0x38, 0x1C, 0x0E, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x3C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x3C, 0x00, 0x00, 0x00, 0x00\r
- db 0x10, 0x38, 0x6C, 0xC6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00\r
- db 0x30, 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0xE0, 0x60, 0x60, 0x78, 0x6C, 0x66, 0x66, 0x66, 0x66, 0x7C, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC0, 0xC0, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x1C, 0x0C, 0x0C, 0x3C, 0x6C, 0xCC, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xFE, 0xC0, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x38, 0x6C, 0x64, 0x60, 0xF0, 0x60, 0x60, 0x60, 0x60, 0xF0, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x7C, 0x0C, 0xCC, 0x78, 0x00\r
- db 0x00, 0x00, 0xE0, 0x60, 0x60, 0x6C, 0x76, 0x66, 0x66, 0x66, 0x66, 0xE6, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x18, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x06, 0x06, 0x00, 0x0E, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3C, 0x00\r
- db 0x00, 0x00, 0xE0, 0x60, 0x60, 0x66, 0x6C, 0x78, 0x78, 0x6C, 0x66, 0xE6, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0x00, 0xEC, 0xFE, 0xD6, 0xD6, 0xD6, 0xD6, 0xC6, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7C, 0x60, 0x60, 0xF0, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x7C, 0x0C, 0x0C, 0x1E, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0x76, 0x66, 0x60, 0x60, 0x60, 0xF0, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0x60, 0x38, 0x0C, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x10, 0x30, 0x30, 0xFC, 0x30, 0x30, 0x30, 0x30, 0x36, 0x1C, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0xC6, 0xD6, 0xD6, 0xD6, 0xFE, 0x6C, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0x6C, 0x38, 0x38, 0x38, 0x6C, 0xC6, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7E, 0x06, 0x0C, 0xF8, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xCC, 0x18, 0x30, 0x60, 0xC6, 0xFE, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x0E, 0x18, 0x18, 0x18, 0x70, 0x18, 0x18, 0x18, 0x18, 0x0E, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x70, 0x18, 0x18, 0x18, 0x0E, 0x18, 0x18, 0x18, 0x18, 0x70, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x76, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6C, 0xC6, 0xC6, 0xC6, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x3C, 0x66, 0xC2, 0xC0, 0xC0, 0xC0, 0xC2, 0x66, 0x3C, 0x0C, 0x06, 0x7C, 0x00, 0x00\r
- db 0x00, 0x00, 0xCC, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x0C, 0x18, 0x30, 0x00, 0x7C, 0xC6, 0xFE, 0xC0, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x10, 0x38, 0x6C, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0xCC, 0x00, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x60, 0x30, 0x18, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x38, 0x6C, 0x38, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0x3C, 0x66, 0x60, 0x60, 0x66, 0x3C, 0x0C, 0x06, 0x3C, 0x00, 0x00, 0x00\r
- db 0x00, 0x10, 0x38, 0x6C, 0x00, 0x7C, 0xC6, 0xFE, 0xC0, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0xC6, 0x00, 0x00, 0x7C, 0xC6, 0xFE, 0xC0, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x60, 0x30, 0x18, 0x00, 0x7C, 0xC6, 0xFE, 0xC0, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x66, 0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x18, 0x3C, 0x66, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x60, 0x30, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0xC6, 0x00, 0x10, 0x38, 0x6C, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00\r
- db 0x38, 0x6C, 0x38, 0x00, 0x38, 0x6C, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00\r
- db 0x18, 0x30, 0x60, 0x00, 0xFE, 0x66, 0x60, 0x7C, 0x60, 0x60, 0x66, 0xFE, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0x00, 0xCC, 0x76, 0x36, 0x7E, 0xD8, 0xD8, 0x6E, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x3E, 0x6C, 0xCC, 0xCC, 0xFE, 0xCC, 0xCC, 0xCC, 0xCC, 0xCE, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x10, 0x38, 0x6C, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0xC6, 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x60, 0x30, 0x18, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x30, 0x78, 0xCC, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x60, 0x30, 0x18, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0xC6, 0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7E, 0x06, 0x0C, 0x78, 0x00\r
- db 0x00, 0xC6, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0xC6, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x18, 0x18, 0x3C, 0x66, 0x60, 0x60, 0x60, 0x66, 0x3C, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x38, 0x6C, 0x64, 0x60, 0xF0, 0x60, 0x60, 0x60, 0x60, 0xE6, 0xFC, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x66, 0x66, 0x3C, 0x18, 0x7E, 0x18, 0x7E, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0xF8, 0xCC, 0xCC, 0xF8, 0xC4, 0xCC, 0xDE, 0xCC, 0xCC, 0xCC, 0xC6, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x0E, 0x1B, 0x18, 0x18, 0x18, 0x7E, 0x18, 0x18, 0x18, 0x18, 0x18, 0xD8, 0x70, 0x00, 0x00\r
- db 0x00, 0x18, 0x30, 0x60, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x0C, 0x18, 0x30, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x18, 0x30, 0x60, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x18, 0x30, 0x60, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x76, 0xDC, 0x00, 0xDC, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00\r
- db 0x76, 0xDC, 0x00, 0xC6, 0xE6, 0xF6, 0xFE, 0xDE, 0xCE, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x3C, 0x6C, 0x6C, 0x3E, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x38, 0x6C, 0x6C, 0x38, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x30, 0x30, 0x00, 0x30, 0x30, 0x60, 0xC0, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0xC0, 0xC0, 0xC2, 0xC6, 0xCC, 0x18, 0x30, 0x60, 0xDC, 0x86, 0x0C, 0x18, 0x3E, 0x00, 0x00\r
- db 0x00, 0xC0, 0xC0, 0xC2, 0xC6, 0xCC, 0x18, 0x30, 0x66, 0xCE, 0x9E, 0x3E, 0x06, 0x06, 0x00, 0x00\r
- db 0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x3C, 0x3C, 0x3C, 0x18, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x6C, 0xD8, 0x6C, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0x00, 0xD8, 0x6C, 0x36, 0x6C, 0xD8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
- db 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44\r
- db 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA\r
- db 0xDD, 0x77, 0xDD, 0x77, 0xDD, 0x77, 0xDD, 0x77, 0xDD, 0x77, 0xDD, 0x77, 0xDD, 0x77, 0xDD, 0x77\r
- db 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18\r
- db 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xF8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18\r
- db 0x18, 0x18, 0x18, 0x18, 0x18, 0xF8, 0x18, 0xF8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18\r
- db 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xF6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36\r
- db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36\r
- db 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x18, 0xF8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18\r
- db 0x36, 0x36, 0x36, 0x36, 0x36, 0xF6, 0x06, 0xF6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36\r
- db 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36\r
- db 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x06, 0xF6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36\r
- db 0x36, 0x36, 0x36, 0x36, 0x36, 0xF6, 0x06, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
- db 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
- db 0x18, 0x18, 0x18, 0x18, 0x18, 0xF8, 0x18, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18\r
- db 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
- db 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18\r
- db 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1F, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18\r
- db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
- db 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xFF, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18\r
- db 0x18, 0x18, 0x18, 0x18, 0x18, 0x1F, 0x18, 0x1F, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18\r
- db 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36\r
- db 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x30, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36\r
- db 0x36, 0x36, 0x36, 0x36, 0x36, 0xF7, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xF7, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36\r
- db 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36\r
- db 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
- db 0x36, 0x36, 0x36, 0x36, 0x36, 0xF7, 0x00, 0xF7, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36\r
- db 0x18, 0x18, 0x18, 0x18, 0x18, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
- db 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18\r
- db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36\r
- db 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
- db 0x18, 0x18, 0x18, 0x18, 0x18, 0x1F, 0x18, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x18, 0x1F, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18\r
- db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36\r
- db 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xFF, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36\r
- db 0x18, 0x18, 0x18, 0x18, 0x18, 0xFF, 0x18, 0xFF, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18\r
- db 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18\r
- db 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF\r
- db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF\r
- db 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0\r
- db 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F\r
- db 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xDC, 0xD8, 0xD8, 0xD8, 0xDC, 0x76, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x78, 0xCC, 0xCC, 0xCC, 0xD8, 0xCC, 0xC6, 0xC6, 0xC6, 0xCC, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0xFE, 0xC6, 0xC6, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0xFE, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0xFE, 0xC6, 0x60, 0x30, 0x18, 0x30, 0x60, 0xC6, 0xFE, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0x70, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7C, 0x60, 0x60, 0xC0, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0x76, 0xDC, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x7E, 0x18, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x7E, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x38, 0x6C, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0x6C, 0x38, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x38, 0x6C, 0xC6, 0xC6, 0xC6, 0x6C, 0x6C, 0x6C, 0x6C, 0xEE, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x1E, 0x30, 0x18, 0x0C, 0x3E, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0xDB, 0xDB, 0xDB, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x03, 0x06, 0x7E, 0xDB, 0xDB, 0xF3, 0x7E, 0x60, 0xC0, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x1C, 0x30, 0x60, 0x60, 0x7C, 0x60, 0x60, 0x60, 0x30, 0x1C, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7E, 0x18, 0x18, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x30, 0x18, 0x0C, 0x06, 0x0C, 0x18, 0x30, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x0C, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0C, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x0E, 0x1B, 0x1B, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18\r
- db 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xD8, 0xD8, 0xD8, 0x70, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x7E, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xDC, 0x00, 0x76, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x38, 0x6C, 0x6C, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x0F, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0xEC, 0x6C, 0x6C, 0x3C, 0x1C, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0xD8, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x70, 0xD8, 0x30, 0x60, 0xC8, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0x7C, 0x7C, 0x7C, 0x7C, 0x7C, 0x7C, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
\ No newline at end of file
+ font_8x16:\r
+ db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x7E, 0x81, 0xA5, 0x81, 0x81, 0xA5, 0x99, 0x81, 0x81, 0x7E, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x7E, 0xFF, 0xDB, 0xFF, 0xFF, 0xDB, 0xE7, 0xFF, 0xFF, 0x7E, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0x6C, 0xFE, 0xFE, 0xFE, 0xFE, 0x7C, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x7C, 0xFE, 0x7C, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x18, 0x3C, 0x3C, 0xE7, 0xE7, 0xE7, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x7E, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3C, 0x3C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+ db 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0xC3, 0xC3, 0xE7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF\r
+ db 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x66, 0x42, 0x42, 0x66, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00\r
+ db 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC3, 0x99, 0xBD, 0xBD, 0x99, 0xC3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF\r
+ db 0x00, 0x00, 0x1E, 0x06, 0x0E, 0x1A, 0x78, 0xCC, 0xCC, 0xCC, 0xCC, 0x78, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x3C, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x7E, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x3F, 0x33, 0x3F, 0x30, 0x30, 0x30, 0x30, 0x70, 0xF0, 0xE0, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x7F, 0x63, 0x7F, 0x63, 0x63, 0x63, 0x63, 0x67, 0xE7, 0xE6, 0xC0, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x18, 0x18, 0xDB, 0x3C, 0xE7, 0x3C, 0xDB, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x80, 0xC0, 0xE0, 0xF0, 0xF8, 0xFE, 0xF8, 0xF0, 0xE0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x02, 0x06, 0x0E, 0x1E, 0x3E, 0xFE, 0x3E, 0x1E, 0x0E, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x18, 0x3C, 0x7E, 0x18, 0x18, 0x18, 0x7E, 0x3C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x7F, 0xDB, 0xDB, 0xDB, 0x7B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x7C, 0xC6, 0x60, 0x38, 0x6C, 0xC6, 0xC6, 0x6C, 0x38, 0x0C, 0xC6, 0x7C, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0xFE, 0xFE, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x18, 0x3C, 0x7E, 0x18, 0x18, 0x18, 0x7E, 0x3C, 0x18, 0x7E, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x18, 0x3C, 0x7E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7E, 0x3C, 0x18, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x0C, 0xFE, 0x0C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0xFE, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0xC0, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x6C, 0xFE, 0x6C, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x38, 0x7C, 0x7C, 0xFE, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0x7C, 0x7C, 0x38, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x18, 0x3C, 0x3C, 0x3C, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x66, 0x66, 0x66, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x6C, 0x6C, 0xFE, 0x6C, 0x6C, 0x6C, 0xFE, 0x6C, 0x6C, 0x00, 0x00, 0x00, 0x00\r
+ db 0x18, 0x18, 0x7C, 0xC6, 0xC2, 0xC0, 0x7C, 0x06, 0x06, 0x86, 0xC6, 0x7C, 0x18, 0x18, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0xC2, 0xC6, 0x0C, 0x18, 0x30, 0x60, 0xC6, 0x86, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x38, 0x6C, 0x6C, 0x38, 0x76, 0xDC, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x30, 0x30, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x0C, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x0C, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x30, 0x18, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x3C, 0xFF, 0x3C, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7E, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x38, 0x6C, 0xC6, 0xC6, 0xD6, 0xD6, 0xC6, 0xC6, 0x6C, 0x38, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x18, 0x38, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7E, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x7C, 0xC6, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0xC6, 0xFE, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x7C, 0xC6, 0x06, 0x06, 0x3C, 0x06, 0x06, 0x06, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x0C, 0x1C, 0x3C, 0x6C, 0xCC, 0xFE, 0x0C, 0x0C, 0x0C, 0x1E, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0xFE, 0xC0, 0xC0, 0xC0, 0xFC, 0x06, 0x06, 0x06, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x38, 0x60, 0xC0, 0xC0, 0xFC, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0xFE, 0xC6, 0x06, 0x06, 0x0C, 0x18, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0x7E, 0x06, 0x06, 0x06, 0x0C, 0x78, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0x0C, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xDE, 0xDE, 0xDE, 0xDC, 0xC0, 0x7C, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x10, 0x38, 0x6C, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0xFC, 0x66, 0x66, 0x66, 0x7C, 0x66, 0x66, 0x66, 0x66, 0xFC, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x3C, 0x66, 0xC2, 0xC0, 0xC0, 0xC0, 0xC0, 0xC2, 0x66, 0x3C, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0xF8, 0x6C, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x6C, 0xF8, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0xFE, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x62, 0x66, 0xFE, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0xFE, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x60, 0x60, 0xF0, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x3C, 0x66, 0xC2, 0xC0, 0xC0, 0xDE, 0xC6, 0xC6, 0x66, 0x3A, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x3C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x1E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0xCC, 0xCC, 0xCC, 0x78, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0xE6, 0x66, 0x66, 0x6C, 0x78, 0x78, 0x6C, 0x66, 0x66, 0xE6, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0xF0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x62, 0x66, 0xFE, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0xC6, 0xEE, 0xFE, 0xFE, 0xD6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0xC6, 0xE6, 0xF6, 0xFE, 0xDE, 0xCE, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0xFC, 0x66, 0x66, 0x66, 0x7C, 0x60, 0x60, 0x60, 0x60, 0xF0, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xD6, 0xDE, 0x7C, 0x0C, 0x0E, 0x00, 0x00\r
+ db 0x00, 0x00, 0xFC, 0x66, 0x66, 0x66, 0x7C, 0x6C, 0x66, 0x66, 0x66, 0xE6, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0x60, 0x38, 0x0C, 0x06, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x7E, 0x7E, 0x5A, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x6C, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xD6, 0xD6, 0xD6, 0xFE, 0xEE, 0x6C, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0xC6, 0xC6, 0x6C, 0x7C, 0x38, 0x38, 0x7C, 0x6C, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0xFE, 0xC6, 0x86, 0x0C, 0x18, 0x30, 0x60, 0xC2, 0xC6, 0xFE, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x3C, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3C, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0x70, 0x38, 0x1C, 0x0E, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x3C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x3C, 0x00, 0x00, 0x00, 0x00\r
+ db 0x10, 0x38, 0x6C, 0xC6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00\r
+ db 0x30, 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0xE0, 0x60, 0x60, 0x78, 0x6C, 0x66, 0x66, 0x66, 0x66, 0x7C, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC0, 0xC0, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x1C, 0x0C, 0x0C, 0x3C, 0x6C, 0xCC, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xFE, 0xC0, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x38, 0x6C, 0x64, 0x60, 0xF0, 0x60, 0x60, 0x60, 0x60, 0xF0, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x7C, 0x0C, 0xCC, 0x78, 0x00\r
+ db 0x00, 0x00, 0xE0, 0x60, 0x60, 0x6C, 0x76, 0x66, 0x66, 0x66, 0x66, 0xE6, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x18, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x06, 0x06, 0x00, 0x0E, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3C, 0x00\r
+ db 0x00, 0x00, 0xE0, 0x60, 0x60, 0x66, 0x6C, 0x78, 0x78, 0x6C, 0x66, 0xE6, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0x00, 0xEC, 0xFE, 0xD6, 0xD6, 0xD6, 0xD6, 0xC6, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7C, 0x60, 0x60, 0xF0, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x7C, 0x0C, 0x0C, 0x1E, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0x76, 0x66, 0x60, 0x60, 0x60, 0xF0, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0x60, 0x38, 0x0C, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x10, 0x30, 0x30, 0xFC, 0x30, 0x30, 0x30, 0x30, 0x36, 0x1C, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0xC6, 0xD6, 0xD6, 0xD6, 0xFE, 0x6C, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0x6C, 0x38, 0x38, 0x38, 0x6C, 0xC6, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7E, 0x06, 0x0C, 0xF8, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xCC, 0x18, 0x30, 0x60, 0xC6, 0xFE, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x0E, 0x18, 0x18, 0x18, 0x70, 0x18, 0x18, 0x18, 0x18, 0x0E, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x70, 0x18, 0x18, 0x18, 0x0E, 0x18, 0x18, 0x18, 0x18, 0x70, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x76, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6C, 0xC6, 0xC6, 0xC6, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x3C, 0x66, 0xC2, 0xC0, 0xC0, 0xC0, 0xC2, 0x66, 0x3C, 0x0C, 0x06, 0x7C, 0x00, 0x00\r
+ db 0x00, 0x00, 0xCC, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x0C, 0x18, 0x30, 0x00, 0x7C, 0xC6, 0xFE, 0xC0, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x10, 0x38, 0x6C, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0xCC, 0x00, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x60, 0x30, 0x18, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x38, 0x6C, 0x38, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0x3C, 0x66, 0x60, 0x60, 0x66, 0x3C, 0x0C, 0x06, 0x3C, 0x00, 0x00, 0x00\r
+ db 0x00, 0x10, 0x38, 0x6C, 0x00, 0x7C, 0xC6, 0xFE, 0xC0, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0xC6, 0x00, 0x00, 0x7C, 0xC6, 0xFE, 0xC0, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x60, 0x30, 0x18, 0x00, 0x7C, 0xC6, 0xFE, 0xC0, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x66, 0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x18, 0x3C, 0x66, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x60, 0x30, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0xC6, 0x00, 0x10, 0x38, 0x6C, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00\r
+ db 0x38, 0x6C, 0x38, 0x00, 0x38, 0x6C, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00\r
+ db 0x18, 0x30, 0x60, 0x00, 0xFE, 0x66, 0x60, 0x7C, 0x60, 0x60, 0x66, 0xFE, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0x00, 0xCC, 0x76, 0x36, 0x7E, 0xD8, 0xD8, 0x6E, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x3E, 0x6C, 0xCC, 0xCC, 0xFE, 0xCC, 0xCC, 0xCC, 0xCC, 0xCE, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x10, 0x38, 0x6C, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0xC6, 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x60, 0x30, 0x18, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x30, 0x78, 0xCC, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x60, 0x30, 0x18, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0xC6, 0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7E, 0x06, 0x0C, 0x78, 0x00\r
+ db 0x00, 0xC6, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0xC6, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x18, 0x18, 0x3C, 0x66, 0x60, 0x60, 0x60, 0x66, 0x3C, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x38, 0x6C, 0x64, 0x60, 0xF0, 0x60, 0x60, 0x60, 0x60, 0xE6, 0xFC, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x66, 0x66, 0x3C, 0x18, 0x7E, 0x18, 0x7E, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0xF8, 0xCC, 0xCC, 0xF8, 0xC4, 0xCC, 0xDE, 0xCC, 0xCC, 0xCC, 0xC6, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x0E, 0x1B, 0x18, 0x18, 0x18, 0x7E, 0x18, 0x18, 0x18, 0x18, 0x18, 0xD8, 0x70, 0x00, 0x00\r
+ db 0x00, 0x18, 0x30, 0x60, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x0C, 0x18, 0x30, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x18, 0x30, 0x60, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x18, 0x30, 0x60, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x76, 0xDC, 0x00, 0xDC, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00\r
+ db 0x76, 0xDC, 0x00, 0xC6, 0xE6, 0xF6, 0xFE, 0xDE, 0xCE, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x3C, 0x6C, 0x6C, 0x3E, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x38, 0x6C, 0x6C, 0x38, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x30, 0x30, 0x00, 0x30, 0x30, 0x60, 0xC0, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0xC0, 0xC0, 0xC2, 0xC6, 0xCC, 0x18, 0x30, 0x60, 0xDC, 0x86, 0x0C, 0x18, 0x3E, 0x00, 0x00\r
+ db 0x00, 0xC0, 0xC0, 0xC2, 0xC6, 0xCC, 0x18, 0x30, 0x66, 0xCE, 0x9E, 0x3E, 0x06, 0x06, 0x00, 0x00\r
+ db 0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x3C, 0x3C, 0x3C, 0x18, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x6C, 0xD8, 0x6C, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0x00, 0xD8, 0x6C, 0x36, 0x6C, 0xD8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+ db 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44\r
+ db 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA\r
+ db 0xDD, 0x77, 0xDD, 0x77, 0xDD, 0x77, 0xDD, 0x77, 0xDD, 0x77, 0xDD, 0x77, 0xDD, 0x77, 0xDD, 0x77\r
+ db 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18\r
+ db 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xF8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18\r
+ db 0x18, 0x18, 0x18, 0x18, 0x18, 0xF8, 0x18, 0xF8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18\r
+ db 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xF6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36\r
+ db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36\r
+ db 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x18, 0xF8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18\r
+ db 0x36, 0x36, 0x36, 0x36, 0x36, 0xF6, 0x06, 0xF6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36\r
+ db 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36\r
+ db 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x06, 0xF6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36\r
+ db 0x36, 0x36, 0x36, 0x36, 0x36, 0xF6, 0x06, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+ db 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+ db 0x18, 0x18, 0x18, 0x18, 0x18, 0xF8, 0x18, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18\r
+ db 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+ db 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18\r
+ db 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1F, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18\r
+ db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+ db 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xFF, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18\r
+ db 0x18, 0x18, 0x18, 0x18, 0x18, 0x1F, 0x18, 0x1F, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18\r
+ db 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36\r
+ db 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x30, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36\r
+ db 0x36, 0x36, 0x36, 0x36, 0x36, 0xF7, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xF7, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36\r
+ db 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36\r
+ db 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+ db 0x36, 0x36, 0x36, 0x36, 0x36, 0xF7, 0x00, 0xF7, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36\r
+ db 0x18, 0x18, 0x18, 0x18, 0x18, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+ db 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18\r
+ db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36\r
+ db 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+ db 0x18, 0x18, 0x18, 0x18, 0x18, 0x1F, 0x18, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x18, 0x1F, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18\r
+ db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36\r
+ db 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xFF, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36\r
+ db 0x18, 0x18, 0x18, 0x18, 0x18, 0xFF, 0x18, 0xFF, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18\r
+ db 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18\r
+ db 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF\r
+ db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF\r
+ db 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0\r
+ db 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F\r
+ db 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xDC, 0xD8, 0xD8, 0xD8, 0xDC, 0x76, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x78, 0xCC, 0xCC, 0xCC, 0xD8, 0xCC, 0xC6, 0xC6, 0xC6, 0xCC, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0xFE, 0xC6, 0xC6, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0xFE, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0xFE, 0xC6, 0x60, 0x30, 0x18, 0x30, 0x60, 0xC6, 0xFE, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0x70, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7C, 0x60, 0x60, 0xC0, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0x76, 0xDC, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x7E, 0x18, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x7E, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x38, 0x6C, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0x6C, 0x38, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x38, 0x6C, 0xC6, 0xC6, 0xC6, 0x6C, 0x6C, 0x6C, 0x6C, 0xEE, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x1E, 0x30, 0x18, 0x0C, 0x3E, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0xDB, 0xDB, 0xDB, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x03, 0x06, 0x7E, 0xDB, 0xDB, 0xF3, 0x7E, 0x60, 0xC0, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x1C, 0x30, 0x60, 0x60, 0x7C, 0x60, 0x60, 0x60, 0x30, 0x1C, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7E, 0x18, 0x18, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x30, 0x18, 0x0C, 0x06, 0x0C, 0x18, 0x30, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x0C, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0C, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x0E, 0x1B, 0x1B, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18\r
+ db 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xD8, 0xD8, 0xD8, 0x70, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x7E, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xDC, 0x00, 0x76, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x38, 0x6C, 0x6C, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x0F, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0xEC, 0x6C, 0x6C, 0x3C, 0x1C, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0xD8, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x70, 0xD8, 0x30, 0x60, 0xC8, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0x7C, 0x7C, 0x7C, 0x7C, 0x7C, 0x7C, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
\ No newline at end of file
-mario: db 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x32, 0x05, 0x36, 0x36, 0x05, 0x05, 0x05, 0x10\r
- db 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x05, 0x36, 0x1F, 0x37\r
- db 0x36, 0x05, 0x05, 0x05, 0x05, 0x05, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10\r
- db 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x32, 0x05, 0x05, 0x05, 0x05, 0x05, 0x10, 0x00, 0x00, 0x00\r
- db 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x32, 0x05, 0x05\r
- db 0x05, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x10, 0x33, 0x10, 0x33, 0x32, 0x10\r
- db 0x10, 0x10, 0x10, 0x32, 0x34, 0x05, 0x00, 0x00, 0x00, 0x00, 0x34, 0x34, 0x34, 0x36, 0x10, 0x35\r
- db 0x10, 0x35, 0x35, 0x34, 0x32, 0x10, 0x32, 0x34, 0x37, 0x34, 0x32, 0x00, 0x00, 0x34, 0x37, 0x37\r
- db 0x37, 0x37, 0x37, 0x36, 0x36, 0x36, 0x35, 0x32, 0x10, 0x10, 0x34, 0x36, 0x36, 0x34, 0x32, 0x00\r
- db 0x00, 0x32, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x10, 0x36, 0x36, 0x32, 0x10, 0x36, 0x34\r
- db 0x34, 0x32, 0x10, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x36\r
- db 0x36, 0x36, 0x36, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10\r
- db 0x10, 0x32, 0x34, 0x34, 0x34, 0x34, 0x32, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x6B, 0x8B, 0x8B, 0x8B, 0x8B, 0x6B, 0x32, 0x05, 0x05, 0x32, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0x00, 0x6A, 0x8C, 0x8D, 0x8D, 0x8C, 0x8B, 0x8B, 0x6B, 0x05, 0x05, 0x05\r
- db 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x8C, 0x8E, 0x8E, 0x8D, 0x8C, 0x8C, 0x8B\r
- db 0x6E, 0x1F, 0x1F, 0x6E, 0x6B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x8C, 0x8D, 0x8E\r
- db 0x8C, 0x8B, 0x8B, 0x8B, 0x10, 0x6E, 0x1F, 0x6E, 0x6B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
- db 0x00, 0x10, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x10, 0x6D, 0x6E, 0x6D, 0x6B, 0x00, 0x00, 0x00\r
- db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x32, 0x4B, 0x4B, 0x32\r
- db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x4E, 0x4C, 0x32, 0x4E, 0x4E, 0x4C\r
- db 0x4C, 0x4C, 0x4B, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x32, 0x32\r
- db 0x10, 0x4B, 0x4B, 0x32, 0x32, 0x32, 0x32, 0x10, 0x00, 0x00, 0x00, 0x00\r
+mario:\r
+ db 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x32, 0x05, 0x36, 0x36, 0x05, 0x05, 0x05, 0x10\r
+ db 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x05, 0x36, 0x1F, 0x37\r
+ db 0x36, 0x05, 0x05, 0x05, 0x05, 0x05, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10\r
+ db 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x32, 0x05, 0x05, 0x05, 0x05, 0x05, 0x10, 0x00, 0x00, 0x00\r
+ db 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x32, 0x05, 0x05\r
+ db 0x05, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x10, 0x33, 0x10, 0x33, 0x32, 0x10\r
+ db 0x10, 0x10, 0x10, 0x32, 0x34, 0x05, 0x00, 0x00, 0x00, 0x00, 0x34, 0x34, 0x34, 0x36, 0x10, 0x35\r
+ db 0x10, 0x35, 0x35, 0x34, 0x32, 0x10, 0x32, 0x34, 0x37, 0x34, 0x32, 0x00, 0x00, 0x34, 0x37, 0x37\r
+ db 0x37, 0x37, 0x37, 0x36, 0x36, 0x36, 0x35, 0x32, 0x10, 0x10, 0x34, 0x36, 0x36, 0x34, 0x32, 0x00\r
+ db 0x00, 0x32, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x10, 0x36, 0x36, 0x32, 0x10, 0x36, 0x34\r
+ db 0x34, 0x32, 0x10, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x36\r
+ db 0x36, 0x36, 0x36, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10\r
+ db 0x10, 0x32, 0x34, 0x34, 0x34, 0x34, 0x32, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x6B, 0x8B, 0x8B, 0x8B, 0x8B, 0x6B, 0x32, 0x05, 0x05, 0x32, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0x00, 0x6A, 0x8C, 0x8D, 0x8D, 0x8C, 0x8B, 0x8B, 0x6B, 0x05, 0x05, 0x05\r
+ db 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x8C, 0x8E, 0x8E, 0x8D, 0x8C, 0x8C, 0x8B\r
+ db 0x6E, 0x1F, 0x1F, 0x6E, 0x6B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x8C, 0x8D, 0x8E\r
+ db 0x8C, 0x8B, 0x8B, 0x8B, 0x10, 0x6E, 0x1F, 0x6E, 0x6B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+ db 0x00, 0x10, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x8B, 0x10, 0x6D, 0x6E, 0x6D, 0x6B, 0x00, 0x00, 0x00\r
+ db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x32, 0x4B, 0x4B, 0x32\r
+ db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x4E, 0x4C, 0x32, 0x4E, 0x4E, 0x4C\r
+ db 0x4C, 0x4C, 0x4B, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x32, 0x32\r
+ db 0x10, 0x4B, 0x4B, 0x32, 0x32, 0x32, 0x32, 0x10, 0x00, 0x00, 0x00, 0x00\r
\r
-grass_l: db 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10\r
- db 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x10, 0x10, 0x10, 0x29, 0x2C, 0x2B, 0x2C, 0x2C\r
- db 0x2B, 0x2B, 0x2D, 0x2D, 0x2C, 0x2C, 0x2B, 0x2C, 0x2C, 0x2C, 0x00, 0x10, 0x29, 0x2A, 0x2A, 0x2C\r
- db 0x2D, 0x2A, 0x2C, 0x2B, 0x2C, 0x2D, 0x2B, 0x2C, 0x2C, 0x2D, 0x2D, 0x2C, 0x2C, 0x2B, 0x10, 0x29\r
- db 0x2B, 0x2A, 0x2B, 0x2B, 0x2B, 0x2C, 0x2B, 0x2B, 0x2A, 0x2A, 0x2B, 0x2A, 0x2B, 0x2B, 0x2A, 0x2C\r
- db 0x2B, 0x2A, 0x10, 0x29, 0x2A, 0x2A, 0x2A, 0x2B, 0x2A, 0x2B, 0x2A, 0x2B, 0x2A, 0x2A, 0x2A, 0x2B\r
- db 0x2A, 0x2A, 0x2A, 0x2B, 0x2A, 0x2B, 0x10, 0x28, 0x29, 0x2A, 0x2C, 0x29, 0x2B, 0x2A, 0x29, 0x2A\r
- db 0x2B, 0x2C, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x28, 0x10, 0x29, 0x2A, 0x2A, 0x2D, 0x29\r
- db 0x2A, 0x29, 0x2A, 0x29, 0x2A, 0x2A, 0x29, 0x2A, 0x2A, 0x2C, 0x2A, 0x28, 0x29, 0x2A, 0x10, 0x28\r
- db 0x29, 0x2A, 0x2B, 0x2A, 0x2A, 0x28, 0x2A, 0x10, 0x29, 0x2A, 0x2A, 0x29, 0x10, 0x2B, 0x2A, 0x10\r
- db 0x29, 0x28, 0x10, 0x29, 0x29, 0x2B, 0x2A, 0x29, 0x2B, 0x29, 0x2B, 0x10, 0x28, 0x29, 0x10, 0x2B\r
- db 0x10, 0x29, 0x28, 0x2A, 0x28, 0x2B, 0x00, 0x28, 0x2A, 0x29, 0x10, 0x10, 0x2A, 0x10, 0x10, 0x41\r
- db 0x10, 0x10, 0x41, 0x10, 0x28, 0x10, 0x29, 0x2B, 0x29, 0x28, 0x00, 0x10, 0x28, 0x10, 0x10, 0x41\r
- db 0x10, 0x41, 0x50, 0x50, 0x41, 0x50, 0x50, 0x41, 0x10, 0x41, 0x10, 0x29, 0x28, 0x41, 0x00, 0x00\r
- db 0x10, 0x10, 0x41, 0x10, 0x50, 0x50, 0x51, 0x51, 0x51, 0x52, 0x50, 0x50, 0x51, 0x51, 0x41, 0x41\r
- db 0x10, 0x50, 0x00, 0x00, 0x10, 0x41, 0x50, 0x41, 0x51, 0x52, 0x52, 0x52, 0x52, 0x53, 0x53, 0x53\r
- db 0x54, 0x53, 0x52, 0x50, 0x50, 0x51, 0x00, 0x00, 0x10, 0x41, 0x41, 0x51, 0x52, 0x53, 0x54, 0x53\r
- db 0x53, 0x54, 0x55, 0x55, 0x55, 0x54, 0x54, 0x52, 0x52, 0x54\r
+grass_l:\r
+ db 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10\r
+ db 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x10, 0x10, 0x10, 0x29, 0x2C, 0x2B, 0x2C, 0x2C\r
+ db 0x2B, 0x2B, 0x2D, 0x2D, 0x2C, 0x2C, 0x2B, 0x2C, 0x2C, 0x2C, 0x00, 0x10, 0x29, 0x2A, 0x2A, 0x2C\r
+ db 0x2D, 0x2A, 0x2C, 0x2B, 0x2C, 0x2D, 0x2B, 0x2C, 0x2C, 0x2D, 0x2D, 0x2C, 0x2C, 0x2B, 0x10, 0x29\r
+ db 0x2B, 0x2A, 0x2B, 0x2B, 0x2B, 0x2C, 0x2B, 0x2B, 0x2A, 0x2A, 0x2B, 0x2A, 0x2B, 0x2B, 0x2A, 0x2C\r
+ db 0x2B, 0x2A, 0x10, 0x29, 0x2A, 0x2A, 0x2A, 0x2B, 0x2A, 0x2B, 0x2A, 0x2B, 0x2A, 0x2A, 0x2A, 0x2B\r
+ db 0x2A, 0x2A, 0x2A, 0x2B, 0x2A, 0x2B, 0x10, 0x28, 0x29, 0x2A, 0x2C, 0x29, 0x2B, 0x2A, 0x29, 0x2A\r
+ db 0x2B, 0x2C, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x28, 0x10, 0x29, 0x2A, 0x2A, 0x2D, 0x29\r
+ db 0x2A, 0x29, 0x2A, 0x29, 0x2A, 0x2A, 0x29, 0x2A, 0x2A, 0x2C, 0x2A, 0x28, 0x29, 0x2A, 0x10, 0x28\r
+ db 0x29, 0x2A, 0x2B, 0x2A, 0x2A, 0x28, 0x2A, 0x10, 0x29, 0x2A, 0x2A, 0x29, 0x10, 0x2B, 0x2A, 0x10\r
+ db 0x29, 0x28, 0x10, 0x29, 0x29, 0x2B, 0x2A, 0x29, 0x2B, 0x29, 0x2B, 0x10, 0x28, 0x29, 0x10, 0x2B\r
+ db 0x10, 0x29, 0x28, 0x2A, 0x28, 0x2B, 0x00, 0x28, 0x2A, 0x29, 0x10, 0x10, 0x2A, 0x10, 0x10, 0x41\r
+ db 0x10, 0x10, 0x41, 0x10, 0x28, 0x10, 0x29, 0x2B, 0x29, 0x28, 0x00, 0x10, 0x28, 0x10, 0x10, 0x41\r
+ db 0x10, 0x41, 0x50, 0x50, 0x41, 0x50, 0x50, 0x41, 0x10, 0x41, 0x10, 0x29, 0x28, 0x41, 0x00, 0x00\r
+ db 0x10, 0x10, 0x41, 0x10, 0x50, 0x50, 0x51, 0x51, 0x51, 0x52, 0x50, 0x50, 0x51, 0x51, 0x41, 0x41\r
+ db 0x10, 0x50, 0x00, 0x00, 0x10, 0x41, 0x50, 0x41, 0x51, 0x52, 0x52, 0x52, 0x52, 0x53, 0x53, 0x53\r
+ db 0x54, 0x53, 0x52, 0x50, 0x50, 0x51, 0x00, 0x00, 0x10, 0x41, 0x41, 0x51, 0x52, 0x53, 0x54, 0x53\r
+ db 0x53, 0x54, 0x55, 0x55, 0x55, 0x54, 0x54, 0x52, 0x52, 0x54\r
\r
-grass_f: db 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10\r
- db 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x2C, 0x2B, 0x2C, 0x2C, 0x2D, 0x2D, 0x2D, 0x2C, 0x2D, 0x2B\r
- db 0x2B, 0x2C, 0x2D, 0x2C, 0x2D, 0x2B, 0x2C, 0x2B, 0x2C, 0x2D, 0x2B, 0x2D, 0x2C, 0x2C, 0x2B, 0x2A\r
- db 0x2C, 0x2A, 0x2C, 0x2D, 0x2C, 0x2C, 0x2B, 0x2C, 0x2A, 0x2C, 0x2D, 0x2D, 0x2B, 0x2B, 0x2A, 0x2B\r
- db 0x2C, 0x2B, 0x2A, 0x2C, 0x2A, 0x2B, 0x2B, 0x2B, 0x2A, 0x2A, 0x2B, 0x2A, 0x2B, 0x2B, 0x2A, 0x2C\r
- db 0x2B, 0x2A, 0x2A, 0x2A, 0x2A, 0x2B, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2B, 0x2A, 0x2A, 0x2A, 0x2B\r
- db 0x2A, 0x2A, 0x2A, 0x2B, 0x2A, 0x2B, 0x2A, 0x2B, 0x2A, 0x2A, 0x2A, 0x29, 0x2B, 0x2A, 0x29, 0x2A\r
- db 0x2A, 0x2B, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x28, 0x2A, 0x29, 0x28, 0x29, 0x2A, 0x29\r
- db 0x2A, 0x29, 0x2A, 0x29, 0x2A, 0x2A, 0x29, 0x2A, 0x2A, 0x2B, 0x2A, 0x28, 0x29, 0x2A, 0x29, 0x29\r
- db 0x28, 0x2A, 0x29, 0x29, 0x2A, 0x28, 0x2A, 0x10, 0x29, 0x2A, 0x2A, 0x29, 0x10, 0x2B, 0x2A, 0x10\r
- db 0x29, 0x28, 0x2A, 0x28, 0x2A, 0x2B, 0x10, 0x29, 0x2B, 0x29, 0x2B, 0x10, 0x28, 0x29, 0x10, 0x2B\r
- db 0x10, 0x29, 0x28, 0x2A, 0x28, 0x2B, 0x28, 0x29, 0x2A, 0x2B, 0x10, 0x10, 0x2A, 0x10, 0x10, 0x41\r
- db 0x10, 0x10, 0x41, 0x10, 0x28, 0x10, 0x29, 0x2B, 0x29, 0x28, 0x41, 0x10, 0x28, 0x10, 0x10, 0x41\r
- db 0x10, 0x41, 0x50, 0x50, 0x41, 0x50, 0x50, 0x41, 0x10, 0x41, 0x10, 0x29, 0x28, 0x41, 0x50, 0x41\r
- db 0x10, 0x41, 0x41, 0x50, 0x51, 0x50, 0x51, 0x51, 0x51, 0x52, 0x50, 0x50, 0x51, 0x51, 0x41, 0x41\r
- db 0x10, 0x50, 0x51, 0x51, 0x50, 0x50, 0x51, 0x51, 0x52, 0x51, 0x52, 0x52, 0x52, 0x53, 0x53, 0x53\r
- db 0x54, 0x53, 0x52, 0x50, 0x50, 0x51, 0x53, 0x52, 0x51, 0x51, 0x53, 0x53, 0x52, 0x53, 0x54, 0x53\r
- db 0x53, 0x54, 0x55, 0x55, 0x55, 0x54, 0x54, 0x52, 0x52, 0x54\r
+grass_f:\r
+ db 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10\r
+ db 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x2C, 0x2B, 0x2C, 0x2C, 0x2D, 0x2D, 0x2D, 0x2C, 0x2D, 0x2B\r
+ db 0x2B, 0x2C, 0x2D, 0x2C, 0x2D, 0x2B, 0x2C, 0x2B, 0x2C, 0x2D, 0x2B, 0x2D, 0x2C, 0x2C, 0x2B, 0x2A\r
+ db 0x2C, 0x2A, 0x2C, 0x2D, 0x2C, 0x2C, 0x2B, 0x2C, 0x2A, 0x2C, 0x2D, 0x2D, 0x2B, 0x2B, 0x2A, 0x2B\r
+ db 0x2C, 0x2B, 0x2A, 0x2C, 0x2A, 0x2B, 0x2B, 0x2B, 0x2A, 0x2A, 0x2B, 0x2A, 0x2B, 0x2B, 0x2A, 0x2C\r
+ db 0x2B, 0x2A, 0x2A, 0x2A, 0x2A, 0x2B, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2B, 0x2A, 0x2A, 0x2A, 0x2B\r
+ db 0x2A, 0x2A, 0x2A, 0x2B, 0x2A, 0x2B, 0x2A, 0x2B, 0x2A, 0x2A, 0x2A, 0x29, 0x2B, 0x2A, 0x29, 0x2A\r
+ db 0x2A, 0x2B, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x28, 0x2A, 0x29, 0x28, 0x29, 0x2A, 0x29\r
+ db 0x2A, 0x29, 0x2A, 0x29, 0x2A, 0x2A, 0x29, 0x2A, 0x2A, 0x2B, 0x2A, 0x28, 0x29, 0x2A, 0x29, 0x29\r
+ db 0x28, 0x2A, 0x29, 0x29, 0x2A, 0x28, 0x2A, 0x10, 0x29, 0x2A, 0x2A, 0x29, 0x10, 0x2B, 0x2A, 0x10\r
+ db 0x29, 0x28, 0x2A, 0x28, 0x2A, 0x2B, 0x10, 0x29, 0x2B, 0x29, 0x2B, 0x10, 0x28, 0x29, 0x10, 0x2B\r
+ db 0x10, 0x29, 0x28, 0x2A, 0x28, 0x2B, 0x28, 0x29, 0x2A, 0x2B, 0x10, 0x10, 0x2A, 0x10, 0x10, 0x41\r
+ db 0x10, 0x10, 0x41, 0x10, 0x28, 0x10, 0x29, 0x2B, 0x29, 0x28, 0x41, 0x10, 0x28, 0x10, 0x10, 0x41\r
+ db 0x10, 0x41, 0x50, 0x50, 0x41, 0x50, 0x50, 0x41, 0x10, 0x41, 0x10, 0x29, 0x28, 0x41, 0x50, 0x41\r
+ db 0x10, 0x41, 0x41, 0x50, 0x51, 0x50, 0x51, 0x51, 0x51, 0x52, 0x50, 0x50, 0x51, 0x51, 0x41, 0x41\r
+ db 0x10, 0x50, 0x51, 0x51, 0x50, 0x50, 0x51, 0x51, 0x52, 0x51, 0x52, 0x52, 0x52, 0x53, 0x53, 0x53\r
+ db 0x54, 0x53, 0x52, 0x50, 0x50, 0x51, 0x53, 0x52, 0x51, 0x51, 0x53, 0x53, 0x52, 0x53, 0x54, 0x53\r
+ db 0x53, 0x54, 0x55, 0x55, 0x55, 0x54, 0x54, 0x52, 0x52, 0x54\r
\r
-grass_ul: db 0x10, 0x10, 0x10, 0x31, 0x51, 0x51, 0x52, 0x52, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54\r
- db 0x55, 0x55, 0x54, 0x54, 0x54, 0x54, 0x2C, 0x2C, 0x29, 0x2A, 0x31, 0x10, 0x51, 0x52, 0x52, 0x55\r
- db 0x53, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x55, 0x2B, 0x2D, 0x2D, 0x29, 0x2B, 0x2A\r
- db 0x31, 0x28, 0x53, 0x52, 0x52, 0x54, 0x54, 0x54, 0x55, 0x54, 0x54, 0x54, 0x54, 0x54, 0x2A, 0x2B\r
- db 0x2B, 0x2A, 0x2D, 0x2C, 0x2B, 0x2A, 0x42, 0x52, 0x54, 0x55, 0x54, 0x54, 0x54, 0x54, 0x55, 0x54\r
- db 0x54, 0x54, 0x2A, 0x2B, 0x2C, 0x2B, 0x2B, 0x2B, 0x2A, 0x2B, 0x28, 0x28, 0x52, 0x52, 0x54, 0x54\r
- db 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x2A, 0x2A, 0x2B, 0x2B, 0x2A, 0x2D, 0x2B, 0x2A, 0x2B, 0x28\r
- db 0x28, 0x53, 0x53, 0x54, 0x54, 0x54, 0x54, 0x55, 0x55, 0x54, 0x2B, 0x2A, 0x2B, 0x2A, 0x2A, 0x2B\r
- db 0x2A, 0x28, 0x29, 0x2A, 0x10, 0x41, 0x53, 0x53, 0x54, 0x54, 0x55, 0x55, 0x55, 0x55, 0x2C, 0x28\r
- db 0x29, 0x2A, 0x2A, 0x2A, 0x2B, 0x29, 0x28, 0x10, 0x42, 0x53, 0x53, 0x54, 0x55, 0x54, 0x55, 0x55\r
- db 0x55, 0x55, 0x28, 0x29, 0x28, 0x28, 0x10, 0x28, 0x2A, 0x28, 0x51, 0x42, 0x53, 0x52, 0x54, 0x54\r
- db 0x54, 0x54, 0x54, 0x55, 0x54, 0x54, 0x28, 0x29, 0x41, 0x41, 0x51, 0x10, 0x28, 0x41, 0x42, 0x52\r
- db 0x51, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x41, 0x10, 0x41, 0x51, 0x41, 0x51\r
- db 0x42, 0x53, 0x53, 0x54, 0x53, 0x55, 0x54, 0x54, 0x54, 0x54, 0x54, 0x55, 0x54, 0x54, 0x51, 0x41\r
- db 0x53, 0x41, 0x52, 0x52, 0x53, 0x54, 0x53, 0x53, 0x54, 0x54, 0x54, 0x54, 0x55, 0x55, 0x54, 0x54\r
- db 0x54, 0x54, 0x52, 0x52, 0x52, 0x53, 0x55, 0x53, 0x53, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x55\r
- db 0x55, 0x55, 0x55, 0x54, 0x54, 0x54, 0x54, 0x53, 0x55, 0x54, 0x53, 0x53, 0x54, 0x54, 0x55, 0x54\r
- db 0x54, 0x54, 0x54, 0x55, 0x55, 0x55, 0x55, 0x54, 0x54, 0x55\r
+grass_ul:\r
+ db 0x10, 0x10, 0x10, 0x31, 0x51, 0x51, 0x52, 0x52, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54\r
+ db 0x55, 0x55, 0x54, 0x54, 0x54, 0x54, 0x2C, 0x2C, 0x29, 0x2A, 0x31, 0x10, 0x51, 0x52, 0x52, 0x55\r
+ db 0x53, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x55, 0x2B, 0x2D, 0x2D, 0x29, 0x2B, 0x2A\r
+ db 0x31, 0x28, 0x53, 0x52, 0x52, 0x54, 0x54, 0x54, 0x55, 0x54, 0x54, 0x54, 0x54, 0x54, 0x2A, 0x2B\r
+ db 0x2B, 0x2A, 0x2D, 0x2C, 0x2B, 0x2A, 0x42, 0x52, 0x54, 0x55, 0x54, 0x54, 0x54, 0x54, 0x55, 0x54\r
+ db 0x54, 0x54, 0x2A, 0x2B, 0x2C, 0x2B, 0x2B, 0x2B, 0x2A, 0x2B, 0x28, 0x28, 0x52, 0x52, 0x54, 0x54\r
+ db 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x2A, 0x2A, 0x2B, 0x2B, 0x2A, 0x2D, 0x2B, 0x2A, 0x2B, 0x28\r
+ db 0x28, 0x53, 0x53, 0x54, 0x54, 0x54, 0x54, 0x55, 0x55, 0x54, 0x2B, 0x2A, 0x2B, 0x2A, 0x2A, 0x2B\r
+ db 0x2A, 0x28, 0x29, 0x2A, 0x10, 0x41, 0x53, 0x53, 0x54, 0x54, 0x55, 0x55, 0x55, 0x55, 0x2C, 0x28\r
+ db 0x29, 0x2A, 0x2A, 0x2A, 0x2B, 0x29, 0x28, 0x10, 0x42, 0x53, 0x53, 0x54, 0x55, 0x54, 0x55, 0x55\r
+ db 0x55, 0x55, 0x28, 0x29, 0x28, 0x28, 0x10, 0x28, 0x2A, 0x28, 0x51, 0x42, 0x53, 0x52, 0x54, 0x54\r
+ db 0x54, 0x54, 0x54, 0x55, 0x54, 0x54, 0x28, 0x29, 0x41, 0x41, 0x51, 0x10, 0x28, 0x41, 0x42, 0x52\r
+ db 0x51, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x41, 0x10, 0x41, 0x51, 0x41, 0x51\r
+ db 0x42, 0x53, 0x53, 0x54, 0x53, 0x55, 0x54, 0x54, 0x54, 0x54, 0x54, 0x55, 0x54, 0x54, 0x51, 0x41\r
+ db 0x53, 0x41, 0x52, 0x52, 0x53, 0x54, 0x53, 0x53, 0x54, 0x54, 0x54, 0x54, 0x55, 0x55, 0x54, 0x54\r
+ db 0x54, 0x54, 0x52, 0x52, 0x52, 0x53, 0x55, 0x53, 0x53, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x55\r
+ db 0x55, 0x55, 0x55, 0x54, 0x54, 0x54, 0x54, 0x53, 0x55, 0x54, 0x53, 0x53, 0x54, 0x54, 0x55, 0x54\r
+ db 0x54, 0x54, 0x54, 0x55, 0x55, 0x55, 0x55, 0x54, 0x54, 0x55\r
\r
-g_lefts: db 0x00, 0x00, 0x10, 0x41, 0x51, 0x52, 0x52, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54\r
- db 0x55, 0x55, 0x54, 0x54, 0x54, 0x54, 0x00, 0x00, 0x10, 0x50, 0x51, 0x53, 0x54, 0x55, 0x54, 0x53\r
- db 0x54, 0x55, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x55, 0x00, 0x00, 0x10, 0x50, 0x41, 0x52\r
- db 0x54, 0x54, 0x55, 0x54, 0x53, 0x54, 0x55, 0x54, 0x55, 0x54, 0x54, 0x54, 0x54, 0x54, 0x00, 0x00\r
- db 0x10, 0x41, 0x52, 0x52, 0x54, 0x53, 0x54, 0x54, 0x54, 0x54, 0x55, 0x54, 0x54, 0x54, 0x55, 0x54\r
- db 0x54, 0x54, 0x00, 0x00, 0x10, 0x50, 0x51, 0x52, 0x52, 0x54, 0x53, 0x53, 0x54, 0x54, 0x54, 0x54\r
- db 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x00, 0x00, 0x10, 0x41, 0x51, 0x41, 0x54, 0x53, 0x54, 0x54\r
- db 0x54, 0x55, 0x54, 0x54, 0x54, 0x54, 0x55, 0x55, 0x54, 0x54, 0x00, 0x00, 0x10, 0x41, 0x51, 0x52\r
- db 0x52, 0x53, 0x54, 0x55, 0x54, 0x54, 0x54, 0x54, 0x54, 0x55, 0x55, 0x55, 0x55, 0x54, 0x00, 0x00\r
- db 0x10, 0x41, 0x50, 0x51, 0x53, 0x54, 0x54, 0x55, 0x55, 0x54, 0x55, 0x54, 0x54, 0x55, 0x55, 0x55\r
- db 0x55, 0x54, 0x00, 0x00, 0x10, 0x41, 0x50, 0x51, 0x53, 0x54, 0x54, 0x54, 0x55, 0x54, 0x54, 0x54\r
- db 0x54, 0x54, 0x55, 0x55, 0x54, 0x54, 0x00, 0x00, 0x10, 0x41, 0x50, 0x52, 0x52, 0x53, 0x54, 0x55\r
- db 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x00, 0x00, 0x10, 0x50, 0x51, 0x52\r
- db 0x50, 0x52, 0x53, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x55, 0x54, 0x54, 0x00, 0x00\r
- db 0x10, 0x41, 0x52, 0x52, 0x52, 0x55, 0x55, 0x54, 0x54, 0x54, 0x54, 0x54, 0x55, 0x55, 0x54, 0x54\r
- db 0x54, 0x54, 0x00, 0x00, 0x10, 0x41, 0x50, 0x52, 0x52, 0x53, 0x54, 0x54, 0x54, 0x54, 0x54, 0x55\r
- db 0x55, 0x55, 0x55, 0x54, 0x54, 0x54, 0x00, 0x00, 0x10, 0x50, 0x52, 0x52, 0x54, 0x53, 0x54, 0x54\r
- db 0x55, 0x54, 0x54, 0x55, 0x55, 0x55, 0x55, 0x54, 0x54, 0x55\r
+g_lefts:\r
+ db 0x00, 0x00, 0x10, 0x41, 0x51, 0x52, 0x52, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54\r
+ db 0x55, 0x55, 0x54, 0x54, 0x54, 0x54, 0x00, 0x00, 0x10, 0x50, 0x51, 0x53, 0x54, 0x55, 0x54, 0x53\r
+ db 0x54, 0x55, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x55, 0x00, 0x00, 0x10, 0x50, 0x41, 0x52\r
+ db 0x54, 0x54, 0x55, 0x54, 0x53, 0x54, 0x55, 0x54, 0x55, 0x54, 0x54, 0x54, 0x54, 0x54, 0x00, 0x00\r
+ db 0x10, 0x41, 0x52, 0x52, 0x54, 0x53, 0x54, 0x54, 0x54, 0x54, 0x55, 0x54, 0x54, 0x54, 0x55, 0x54\r
+ db 0x54, 0x54, 0x00, 0x00, 0x10, 0x50, 0x51, 0x52, 0x52, 0x54, 0x53, 0x53, 0x54, 0x54, 0x54, 0x54\r
+ db 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x00, 0x00, 0x10, 0x41, 0x51, 0x41, 0x54, 0x53, 0x54, 0x54\r
+ db 0x54, 0x55, 0x54, 0x54, 0x54, 0x54, 0x55, 0x55, 0x54, 0x54, 0x00, 0x00, 0x10, 0x41, 0x51, 0x52\r
+ db 0x52, 0x53, 0x54, 0x55, 0x54, 0x54, 0x54, 0x54, 0x54, 0x55, 0x55, 0x55, 0x55, 0x54, 0x00, 0x00\r
+ db 0x10, 0x41, 0x50, 0x51, 0x53, 0x54, 0x54, 0x55, 0x55, 0x54, 0x55, 0x54, 0x54, 0x55, 0x55, 0x55\r
+ db 0x55, 0x54, 0x00, 0x00, 0x10, 0x41, 0x50, 0x51, 0x53, 0x54, 0x54, 0x54, 0x55, 0x54, 0x54, 0x54\r
+ db 0x54, 0x54, 0x55, 0x55, 0x54, 0x54, 0x00, 0x00, 0x10, 0x41, 0x50, 0x52, 0x52, 0x53, 0x54, 0x55\r
+ db 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x00, 0x00, 0x10, 0x50, 0x51, 0x52\r
+ db 0x50, 0x52, 0x53, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x55, 0x54, 0x54, 0x00, 0x00\r
+ db 0x10, 0x41, 0x52, 0x52, 0x52, 0x55, 0x55, 0x54, 0x54, 0x54, 0x54, 0x54, 0x55, 0x55, 0x54, 0x54\r
+ db 0x54, 0x54, 0x00, 0x00, 0x10, 0x41, 0x50, 0x52, 0x52, 0x53, 0x54, 0x54, 0x54, 0x54, 0x54, 0x55\r
+ db 0x55, 0x55, 0x55, 0x54, 0x54, 0x54, 0x00, 0x00, 0x10, 0x50, 0x52, 0x52, 0x54, 0x53, 0x54, 0x54\r
+ db 0x55, 0x54, 0x54, 0x55, 0x55, 0x55, 0x55, 0x54, 0x54, 0x55\r
\r
-g_earth: db 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54\r
- db 0x55, 0x55, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x55, 0x55, 0x54, 0x54, 0x54, 0x54, 0x54, 0x55\r
- db 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x55, 0x54, 0x55, 0x55, 0x55, 0x55, 0x54\r
- db 0x55, 0x54, 0x54, 0x54, 0x55, 0x55, 0x54, 0x54, 0x55, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x55\r
- db 0x55, 0x55, 0x55, 0x54, 0x54, 0x54, 0x54, 0x54, 0x55, 0x55, 0x54, 0x54, 0x54, 0x54, 0x55, 0x54\r
- db 0x54, 0x54, 0x54, 0x54, 0x55, 0x55, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54\r
- db 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x55\r
- db 0x54, 0x54, 0x54, 0x55, 0x54, 0x54, 0x55, 0x55, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54\r
- db 0x55, 0x55, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x55, 0x55, 0x55, 0x55, 0x54, 0x54, 0x54\r
- db 0x54, 0x54, 0x54, 0x55, 0x55, 0x55, 0x55, 0x54, 0x55, 0x54, 0x54, 0x54, 0x54, 0x55, 0x55, 0x55\r
- db 0x55, 0x54, 0x54, 0x54, 0x55, 0x54, 0x54, 0x55, 0x55, 0x55, 0x55, 0x54, 0x54, 0x54, 0x54, 0x54\r
- db 0x54, 0x54, 0x55, 0x55, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x55, 0x55, 0x54, 0x54\r
- db 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x55, 0x54, 0x54, 0x54, 0x54\r
- db 0x54, 0x54, 0x54, 0x54, 0x54, 0x55, 0x54, 0x54, 0x54, 0x54, 0x54, 0x55, 0x54, 0x54, 0x54, 0x55\r
- db 0x55, 0x54, 0x54, 0x54, 0x55, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x55, 0x55, 0x54, 0x54\r
- db 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x55, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x55\r
- db 0x55, 0x55, 0x55, 0x54, 0x54, 0x54, 0x54, 0x54, 0x55, 0x54, 0x54, 0x54, 0x54, 0x54, 0x55, 0x54\r
- db 0x54, 0x54, 0x54, 0x55, 0x55, 0x55, 0x55, 0x54, 0x54, 0x55
\ No newline at end of file
+g_earth:\r
+ db 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54\r
+ db 0x55, 0x55, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x55, 0x55, 0x54, 0x54, 0x54, 0x54, 0x54, 0x55\r
+ db 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x55, 0x54, 0x55, 0x55, 0x55, 0x55, 0x54\r
+ db 0x55, 0x54, 0x54, 0x54, 0x55, 0x55, 0x54, 0x54, 0x55, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x55\r
+ db 0x55, 0x55, 0x55, 0x54, 0x54, 0x54, 0x54, 0x54, 0x55, 0x55, 0x54, 0x54, 0x54, 0x54, 0x55, 0x54\r
+ db 0x54, 0x54, 0x54, 0x54, 0x55, 0x55, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54\r
+ db 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x55\r
+ db 0x54, 0x54, 0x54, 0x55, 0x54, 0x54, 0x55, 0x55, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54\r
+ db 0x55, 0x55, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x55, 0x55, 0x55, 0x55, 0x54, 0x54, 0x54\r
+ db 0x54, 0x54, 0x54, 0x55, 0x55, 0x55, 0x55, 0x54, 0x55, 0x54, 0x54, 0x54, 0x54, 0x55, 0x55, 0x55\r
+ db 0x55, 0x54, 0x54, 0x54, 0x55, 0x54, 0x54, 0x55, 0x55, 0x55, 0x55, 0x54, 0x54, 0x54, 0x54, 0x54\r
+ db 0x54, 0x54, 0x55, 0x55, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x55, 0x55, 0x54, 0x54\r
+ db 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x55, 0x54, 0x54, 0x54, 0x54\r
+ db 0x54, 0x54, 0x54, 0x54, 0x54, 0x55, 0x54, 0x54, 0x54, 0x54, 0x54, 0x55, 0x54, 0x54, 0x54, 0x55\r
+ db 0x55, 0x54, 0x54, 0x54, 0x55, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x55, 0x55, 0x54, 0x54\r
+ db 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x55, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x55\r
+ db 0x55, 0x55, 0x55, 0x54, 0x54, 0x54, 0x54, 0x54, 0x55, 0x54, 0x54, 0x54, 0x54, 0x54, 0x55, 0x54\r
+ db 0x54, 0x54, 0x54, 0x55, 0x55, 0x55, 0x55, 0x54, 0x54, 0x55
\ No newline at end of file
;-----------------;\r
; variables ;\r
;-----------------;\r
- screen_rows db 25 ; all comments assume\r
- screen_cols db 80 ; that this is 25 & 80\r
- cursor_pos dw 0\r
+ screen_rows db 25 ; all comments assume\r
+ screen_cols db 80 ; that this is 25 & 80\r
+ cursor_pos dw 0\r
\r
\r
;--------------------------------------;\r
; in: bx = cursor attribs ;\r
;--------------------------------------;\r
changecursor:\r
- push ax\r
- push dx\r
+ push ax\r
+ push dx\r
\r
- mov dx, 0x3D4\r
- mov al, 0x0A\r
- mov ah, bh\r
- out dx, ax\r
- inc ax\r
- mov ah, bl\r
- out dx, ax\r
+ mov dx, 0x3D4\r
+ mov al, 0x0A\r
+ mov ah, bh\r
+ out dx, ax\r
+ inc ax\r
+ mov ah, bl\r
+ out dx, ax\r
\r
- pop dx\r
- pop ax\r
- ret\r
+ pop dx\r
+ pop ax\r
+ ret\r
\r
\r
;----------------------;\r
; clear the screen ;\r
;----------------------;\r
cls:\r
- push bx\r
- push cx\r
+ push bx\r
+ push cx\r
\r
- movzx cx, [screen_rows]\r
+ movzx cx, [screen_rows]\r
.loop:\r
- call _scroll_up\r
- loop .loop\r
+ call _scroll_up\r
+ loop .loop\r
\r
- mov bx, 0\r
- call setcursor\r
+ mov bx, 0\r
+ call setcursor\r
\r
- pop cx\r
- pop bx\r
- ret\r
+ pop cx\r
+ pop bx\r
+ ret\r
\r
\r
;-----------------------------------;\r
; out: bh = x bl = y ;\r
;-----------------------------------;\r
getcursorxy:\r
- push ax\r
+ push ax\r
\r
- call getcursor\r
- mov ax, bx\r
- mov bl, [screen_cols]\r
- div bl\r
- mov bl, al\r
- mov bh, ah\r
+ call getcursor\r
+ mov ax, bx\r
+ mov bl, [screen_cols]\r
+ div bl\r
+ mov bl, al\r
+ mov bh, ah\r
\r
- pop ax\r
- ret\r
+ pop ax\r
+ ret\r
\r
\r
;-------------------------------;\r
; out: bx = offset ;\r
;-------------------------------;\r
getcursor:\r
- push ax\r
- push dx\r
-\r
- mov dx, 0x3D4\r
- mov al, 0x0E\r
- out dx, al\r
- inc dx\r
- in al, dx\r
- mov bh, al\r
- mov al, 0x0F\r
- dec dx\r
- out dx, al\r
- inc dx\r
- in al, dx\r
- mov bl, al\r
-\r
- pop dx\r
- pop ax\r
- ret\r
+ push ax\r
+ push dx\r
+\r
+ mov dx, 0x3D4\r
+ mov al, 0x0E\r
+ out dx, al\r
+ inc dx\r
+ in al, dx\r
+ mov bh, al\r
+ mov al, 0x0F\r
+ dec dx\r
+ out dx, al\r
+ inc dx\r
+ in al, dx\r
+ mov bl, al\r
+\r
+ pop dx\r
+ pop ax\r
+ ret\r
\r
\r
;------------------------------;\r
; bh = x bl = y ;\r
;------------------------------;\r
setcursorxy:\r
- push ax\r
- push bx\r
+ push ax\r
+ push bx\r
\r
- xor ax, ax\r
- mov al, [screen_cols]\r
- mul bl ; bl * al = ax\r
- movzx bx, bh\r
- add bx, ax\r
- call setcursor\r
+ xor ax, ax\r
+ mov al, [screen_cols]\r
+ mul bl ; bl * al = ax\r
+ movzx bx, bh\r
+ add bx, ax\r
+ call setcursor\r
\r
- pop bx\r
- pop ax\r
- ret\r
+ pop bx\r
+ pop ax\r
+ ret\r
\r
\r
;--------------------------;\r
; bx = offset ;\r
;--------------------------;\r
setcursor:\r
- push ax\r
- push bx\r
- push dx\r
+ push ax\r
+ push bx\r
+ push dx\r
\r
- mov al, 0x0E\r
- mov ah, bh\r
- mov dx, 0x3D4\r
- out dx, ax\r
- inc ax\r
- mov ah, bl\r
- out dx, ax\r
+ mov al, 0x0E\r
+ mov ah, bh\r
+ mov dx, 0x3D4\r
+ out dx, ax\r
+ inc ax\r
+ mov ah, bl\r
+ out dx, ax\r
\r
- pop dx\r
- pop bx\r
- pop ax\r
- ret\r
+ pop dx\r
+ pop bx\r
+ pop ax\r
+ ret\r
\r
\r
;-----------------------;\r
; cursor position +1 ;\r
;-----------------------;\r
inccursor:\r
- push ax\r
- push bx\r
+ push ax\r
+ push bx\r
\r
- mov al, [screen_cols]\r
- mov bl, [screen_rows]\r
- mul bl\r
- dec ax\r
+ mov al, [screen_cols]\r
+ mov bl, [screen_rows]\r
+ mul bl\r
+ dec ax\r
\r
- call getcursor\r
- cmp bx, ax ; 0x7CF = (80*25)-1\r
- jne .cont\r
- call scroll_up\r
- jmp .end\r
+ call getcursor\r
+ cmp bx, ax ; 0x7CF = (80*25)-1\r
+ jne .cont\r
+ call scroll_up\r
+ jmp .end\r
\r
- .cont:\r
- inc bx\r
- call setcursor\r
+ .cont:\r
+ inc bx\r
+ call setcursor\r
\r
- .end:\r
- pop bx\r
- pop ax\r
- ret\r
+ .end:\r
+ pop bx\r
+ pop ax\r
+ ret\r
\r
\r
;-----------------------;\r
; cursor position -1 ;\r
;-----------------------;\r
deccursor:\r
- push bx\r
+ push bx\r
\r
- call getcursor\r
- cmp bx, 0\r
- je .end\r
+ call getcursor\r
+ cmp bx, 0\r
+ je .end\r
\r
- dec bx\r
- call setcursor\r
+ dec bx\r
+ call setcursor\r
\r
- .end:\r
- pop bx\r
- ret\r
+ .end:\r
+ pop bx\r
+ ret\r
\r
\r
\r
; backspace - delete last typed char ;\r
;---------------------------------------;\r
backspace:\r
- push bx\r
+ push bx\r
\r
- call getcursor\r
- cmp bx, 0\r
- je .end\r
+ call getcursor\r
+ cmp bx, 0\r
+ je .end\r
\r
- call deccursor\r
+ call deccursor\r
\r
- mov bh, 0x07\r
- mov bl, 0\r
- call print_char\r
+ mov bh, 0x07\r
+ mov bl, 0\r
+ call print_char\r
\r
- call deccursor\r
+ call deccursor\r
\r
- .end:\r
- pop bx\r
- ret\r
+ .end:\r
+ pop bx\r
+ ret\r
\r
\r
\r
; in: bl = char, bh = attrib ;\r
;-----------------------------------------;\r
print_char:\r
- push eax\r
- push bx\r
+ push eax\r
+ push bx\r
\r
- cmp bl, 13\r
- jne .cont\r
- call new_line\r
- jmp .done\r
+ cmp bl, 13\r
+ jne .cont\r
+ call new_line\r
+ jmp .done\r
\r
- .cont:\r
- cmp bl, 10 ; ignore\r
- je .done\r
+ .cont:\r
+ cmp bl, 10 ; ignore\r
+ je .done\r
\r
- push bx\r
- call getcursor\r
- movzx eax, bx\r
- pop bx\r
+ push bx\r
+ call getcursor\r
+ movzx eax, bx\r
+ pop bx\r
\r
- mov [es:(eax*2 + 0xB8000)], bx\r
+ mov [es:(eax*2 + 0xB8000)], bx\r
\r
- call inccursor\r
- .done:\r
- pop bx\r
- pop eax\r
- ret\r
+ call inccursor\r
+ .done:\r
+ pop bx\r
+ pop eax\r
+ ret\r
\r
\r
\r
; in: ebx = value, cl = color ;\r
;------------------------------------------;\r
print_hex32:\r
- push eax\r
- push ebx\r
- push ecx\r
- push edx\r
-\r
- mov eax, ebx ; quick & dirty fix so\r
- mov bh, cl ; input reg != eax\r
- mov ecx, 8\r
-\r
- .print_it:\r
- rol eax, 4\r
- movzx edx, al\r
- and edx, 0x0F\r
- or edx, 0x30\r
- cmp edx, 0x39\r
- jna .cont\r
- add edx, 7\r
- .cont:\r
- mov bl, dl\r
- call print_char\r
- loop .print_it\r
-\r
- pop edx\r
- pop ecx\r
- pop ebx\r
- pop eax\r
- ret\r
+ push eax\r
+ push ebx\r
+ push ecx\r
+ push edx\r
+\r
+ mov eax, ebx ; quick & dirty fix so\r
+ mov bh, cl ; input reg != eax\r
+ mov ecx, 8\r
+\r
+ .print_it:\r
+ rol eax, 4\r
+ movzx edx, al\r
+ and edx, 0x0F\r
+ or edx, 0x30\r
+ cmp edx, 0x39\r
+ jna .cont\r
+ add edx, 7\r
+ .cont:\r
+ mov bl, dl\r
+ call print_char\r
+ loop .print_it\r
+\r
+ pop edx\r
+ pop ecx\r
+ pop ebx\r
+ pop eax\r
+ ret\r
\r
\r
\r
; in: esi = message, bl = color ;\r
;-------------------------------------------------;\r
print:\r
- push eax\r
- push bx\r
+ push eax\r
+ push bx\r
\r
- mov ah, bl\r
- call getcursor\r
- mov [cursor_pos], bx\r
+ mov ah, bl\r
+ call getcursor\r
+ mov [cursor_pos], bx\r
\r
- .displaychar:\r
- lodsb\r
- or al, al\r
- jz .done\r
+ .displaychar:\r
+ lodsb\r
+ or al, al\r
+ jz .done\r
\r
- cmp al, 13\r
- jne .cont\r
- mov bx, [cursor_pos]\r
- call setcursor\r
- call new_line\r
- call getcursor\r
- mov [cursor_pos], bx\r
- jmp .displaychar\r
+ cmp al, 13\r
+ jne .cont\r
+ mov bx, [cursor_pos]\r
+ call setcursor\r
+ call new_line\r
+ call getcursor\r
+ mov [cursor_pos], bx\r
+ jmp .displaychar\r
\r
- .cont:\r
- cmp al, 10 ; ignore\r
- je .displaychar\r
- movzx ebx, [cursor_pos]\r
- mov [es:(ebx*2 + 0xB8000)], ax\r
- inc [cursor_pos]\r
- jmp .displaychar\r
+ .cont:\r
+ cmp al, 10 ; ignore\r
+ je .displaychar\r
+ movzx ebx, [cursor_pos]\r
+ mov [es:(ebx*2 + 0xB8000)], ax\r
+ inc [cursor_pos]\r
+ jmp .displaychar\r
\r
- .done:\r
- mov bx, [cursor_pos]\r
- call setcursor ; update cursor on screen\r
+ .done:\r
+ mov bx, [cursor_pos]\r
+ call setcursor ; update cursor on screen\r
\r
- pop bx\r
- pop eax\r
- ret\r
+ pop bx\r
+ pop eax\r
+ ret\r
\r
\r
\r
; make a new line (CR, LF) ;\r
;-----------------------------;\r
new_line:\r
- push bx\r
+ push bx\r
\r
- call getcursorxy\r
- mov bh, [screen_rows]\r
- dec bh\r
- cmp bl, bh ; 24\r
- jb .newline\r
+ call getcursorxy\r
+ mov bh, [screen_rows]\r
+ dec bh\r
+ cmp bl, bh ; 24\r
+ jb .newline\r
\r
- call scroll_up\r
- jmp .done\r
+ call scroll_up\r
+ jmp .done\r
\r
- .newline:\r
- call getcursorxy\r
- mov bh, 0\r
- inc bl\r
- call setcursorxy\r
+ .newline:\r
+ call getcursorxy\r
+ mov bh, 0\r
+ inc bl\r
+ call setcursorxy\r
\r
- .done:\r
- pop bx\r
- ret\r
+ .done:\r
+ pop bx\r
+ ret\r
\r
\r
\r
; scrolling.. ;\r
;----------------;\r
scroll_up:\r
- call _scroll_up\r
-\r
- .mv_curs:\r
- push ax\r
- push bx\r
-\r
- xor ax, ax\r
- mov al, [screen_rows] ; mov bx, 80*24\r
- mov bl, [screen_cols]\r
- dec al\r
- mul bl\r
- mov bx, ax\r
- call setcursor\r
-\r
- pop bx\r
- pop ax\r
- ret\r
-\r
- _scroll_up:\r
- push eax\r
- push ecx\r
- push edi\r
- push esi\r
-\r
- mov edi, 0xB8000\r
- movzx esi, [screen_cols]\r
- shl esi, 1 ; 80*2 = 160\r
- mov cl, [screen_rows]\r
- dec cl\r
- mov eax, esi\r
- mul cl\r
- shr ax, 2 ; ax = (160*24)/4\r
- movzx ecx, ax ; ecx = - || -\r
- add esi, 0xB8000 ; esi = 0xB8000+160\r
-\r
- rep movsd\r
-\r
- mov cl, [screen_cols]\r
- shl cl, 1 ; 80*2 = 160\r
- mov al, [screen_rows]\r
- dec al ; al = 24\r
- mul cl\r
- movzx edi, ax\r
- add edi, 0xB8000 ; edi = 0xB8000+160*24\r
- movzx ecx, [screen_cols]\r
- shr ecx, 1 ; 80/2\r
- mov eax, 0x07000700 ; fill with zeros\r
- rep stosd\r
-\r
- pop esi\r
- pop edi\r
- pop ecx\r
- pop eax\r
- ret
\ No newline at end of file
+ call _scroll_up\r
+\r
+ .mv_curs:\r
+ push ax\r
+ push bx\r
+\r
+ xor ax, ax\r
+ mov al, [screen_rows] ; mov bx, 80*24\r
+ mov bl, [screen_cols]\r
+ dec al\r
+ mul bl\r
+ mov bx, ax\r
+ call setcursor\r
+\r
+ pop bx\r
+ pop ax\r
+ ret\r
+\r
+ _scroll_up:\r
+ push eax\r
+ push ecx\r
+ push edi\r
+ push esi\r
+\r
+ mov edi, 0xB8000\r
+ movzx esi, [screen_cols]\r
+ shl esi, 1 ; 80*2 = 160\r
+ mov cl, [screen_rows]\r
+ dec cl\r
+ mov eax, esi\r
+ mul cl\r
+ shr ax, 2 ; ax = (160*24)/4\r
+ movzx ecx, ax ; ecx = - || -\r
+ add esi, 0xB8000 ; esi = 0xB8000+160\r
+\r
+ rep movsd\r
+\r
+ mov cl, [screen_cols]\r
+ shl cl, 1 ; 80*2 = 160\r
+ mov al, [screen_rows]\r
+ dec al ; al = 24\r
+ mul cl\r
+ movzx edi, ax\r
+ add edi, 0xB8000 ; edi = 0xB8000+160*24\r
+ movzx ecx, [screen_cols]\r
+ shr ecx, 1 ; 80/2\r
+ mov eax, 0x07000700 ; fill with zeros\r
+ rep stosd\r
+\r
+ pop esi\r
+ pop edi\r
+ pop ecx\r
+ pop eax\r
+ ret
\ No newline at end of file
; VGA palettes ;\r
;-------------------;\r
\r
- palette256 db 00, 00, 00, 00, 10, 41, 12, 28, 18, 02, 43, 22, 35\r
- db 19, 09, 58, 00, 00, 57, 35, 12, 43, 43, 47, 24, 24\r
- db 28, 20, 24, 60, 10, 60, 15, 31, 47, 63, 62, 56, 20\r
- db 60, 56, 22, 63, 61, 36, 63, 63, 63, 00, 00, 00, 05\r
- db 05, 05, 08, 08, 08, 11, 11, 11, 14, 14, 14, 17, 17\r
- db 17, 20, 20, 20, 24, 24, 24, 28, 28, 28, 32, 32, 32\r
- db 36, 36, 36, 40, 40, 40, 45, 45, 45, 50, 50, 50, 56\r
- db 56, 56, 63, 63, 63, 13, 12, 15, 15, 16, 22, 17, 20\r
- db 29, 19, 24, 36, 21, 28, 43, 23, 31, 50, 25, 34, 57\r
- db 26, 42, 63, 00, 15, 02, 01, 22, 04, 02, 29, 06, 03\r
- db 36, 08, 04, 43, 10, 05, 50, 12, 06, 57, 14, 20, 63\r
- db 40, 18, 06, 07, 25, 12, 11, 33, 17, 14, 40, 23, 18\r
- db 48, 28, 21, 55, 34, 25, 62, 39, 27, 63, 48, 36, 15\r
- db 03, 02, 22, 06, 04, 29, 09, 06, 36, 12, 08, 43, 15\r
- db 10, 50, 18, 12, 57, 21, 14, 63, 28, 20, 15, 00, 00\r
- db 22, 07, 00, 29, 15, 00, 36, 23, 00, 43, 31, 00, 50\r
- db 39, 00, 57, 47, 00, 63, 55, 00, 15, 05, 03, 22, 11\r
- db 07, 29, 17, 11, 36, 23, 15, 43, 29, 19, 50, 35, 23\r
- db 57, 41, 27, 63, 53, 34, 28, 14, 12, 33, 20, 14, 38\r
- db 26, 16, 43, 32, 18, 48, 38, 20, 53, 44, 22, 58, 50\r
- db 24, 63, 56, 30, 05, 05, 06, 10, 10, 13, 15, 15, 20\r
- db 20, 20, 27, 25, 25, 34, 30, 30, 41, 35, 35, 48, 44\r
- db 44, 63, 03, 06, 05, 05, 11, 09, 07, 16, 13, 09, 21\r
- db 17, 11, 26, 21, 13, 31, 25, 15, 36, 29, 20, 48, 38\r
- db 06, 06, 07, 13, 13, 15, 20, 20, 23, 27, 27, 31, 34\r
- db 34, 39, 41, 41, 47, 48, 48, 55, 57, 57, 63, 06, 15\r
- db 04, 12, 22, 08, 18, 29, 12, 24, 36, 16, 30, 43, 20\r
- db 36, 50, 24, 42, 57, 28, 54, 63, 35, 15, 10, 10, 22\r
- db 16, 16, 29, 21, 21, 36, 27, 27, 43, 32, 32, 50, 38\r
- db 38, 57, 43, 43, 63, 54, 54, 15, 15, 06, 22, 22, 12\r
- db 29, 29, 18, 36, 36, 24, 43, 43, 30, 50, 50, 36, 57\r
- db 57, 42, 63, 63, 54, 02, 04, 14, 06, 12, 21, 10, 20\r
- db 28, 14, 28, 35, 18, 36, 42, 22, 44, 49, 26, 52, 56\r
- db 36, 63, 63, 18, 04, 14, 24, 08, 21, 31, 12, 28, 37\r
- db 16, 35, 44, 20, 42, 50, 24, 49, 57, 28, 56, 63, 38\r
- db 63, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00\r
- db 00, 00, 00, 00, 00, 00, 00, 00, 00, 53, 44, 22, 09\r
- db 08, 12, 16, 14, 16, 22, 21, 20, 29, 27, 24, 35, 34\r
- db 28, 42, 40, 32, 48, 47, 36, 57, 56, 43, 08, 12, 16\r
- db 14, 16, 22, 21, 20, 29, 27, 24, 35, 34, 28, 42, 40\r
- db 32, 48, 47, 36, 57, 56, 43, 63, 13, 09, 11, 21, 16\r
- db 15, 27, 22, 18, 36, 29, 22, 42, 35, 25, 51, 42, 29\r
- db 57, 48, 32, 63, 56, 39, 06, 14, 09, 12, 21, 14, 18\r
- db 27, 22, 24, 33, 28, 30, 39, 36, 36, 46, 42, 42, 52\r
- db 47, 50, 59, 53, 00, 00, 00, 00, 00, 00, 00, 00, 00\r
- db 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00\r
- db 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00\r
- db 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00\r
- db 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00\r
- db 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00\r
- db 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00\r
- db 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00\r
- db 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00\r
- db 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00\r
- db 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00\r
- db 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00\r
- db 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00\r
- db 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00\r
- db 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00\r
- db 00\r
+ palette256:\r
+ db 00, 00, 00, 00, 10, 41, 12, 28, 18, 02, 43, 22, 35\r
+ db 19, 09, 58, 00, 00, 57, 35, 12, 43, 43, 47, 24, 24\r
+ db 28, 20, 24, 60, 10, 60, 15, 31, 47, 63, 62, 56, 20\r
+ db 60, 56, 22, 63, 61, 36, 63, 63, 63, 00, 00, 00, 05\r
+ db 05, 05, 08, 08, 08, 11, 11, 11, 14, 14, 14, 17, 17\r
+ db 17, 20, 20, 20, 24, 24, 24, 28, 28, 28, 32, 32, 32\r
+ db 36, 36, 36, 40, 40, 40, 45, 45, 45, 50, 50, 50, 56\r
+ db 56, 56, 63, 63, 63, 13, 12, 15, 15, 16, 22, 17, 20\r
+ db 29, 19, 24, 36, 21, 28, 43, 23, 31, 50, 25, 34, 57\r
+ db 26, 42, 63, 00, 15, 02, 01, 22, 04, 02, 29, 06, 03\r
+ db 36, 08, 04, 43, 10, 05, 50, 12, 06, 57, 14, 20, 63\r
+ db 40, 18, 06, 07, 25, 12, 11, 33, 17, 14, 40, 23, 18\r
+ db 48, 28, 21, 55, 34, 25, 62, 39, 27, 63, 48, 36, 15\r
+ db 03, 02, 22, 06, 04, 29, 09, 06, 36, 12, 08, 43, 15\r
+ db 10, 50, 18, 12, 57, 21, 14, 63, 28, 20, 15, 00, 00\r
+ db 22, 07, 00, 29, 15, 00, 36, 23, 00, 43, 31, 00, 50\r
+ db 39, 00, 57, 47, 00, 63, 55, 00, 15, 05, 03, 22, 11\r
+ db 07, 29, 17, 11, 36, 23, 15, 43, 29, 19, 50, 35, 23\r
+ db 57, 41, 27, 63, 53, 34, 28, 14, 12, 33, 20, 14, 38\r
+ db 26, 16, 43, 32, 18, 48, 38, 20, 53, 44, 22, 58, 50\r
+ db 24, 63, 56, 30, 05, 05, 06, 10, 10, 13, 15, 15, 20\r
+ db 20, 20, 27, 25, 25, 34, 30, 30, 41, 35, 35, 48, 44\r
+ db 44, 63, 03, 06, 05, 05, 11, 09, 07, 16, 13, 09, 21\r
+ db 17, 11, 26, 21, 13, 31, 25, 15, 36, 29, 20, 48, 38\r
+ db 06, 06, 07, 13, 13, 15, 20, 20, 23, 27, 27, 31, 34\r
+ db 34, 39, 41, 41, 47, 48, 48, 55, 57, 57, 63, 06, 15\r
+ db 04, 12, 22, 08, 18, 29, 12, 24, 36, 16, 30, 43, 20\r
+ db 36, 50, 24, 42, 57, 28, 54, 63, 35, 15, 10, 10, 22\r
+ db 16, 16, 29, 21, 21, 36, 27, 27, 43, 32, 32, 50, 38\r
+ db 38, 57, 43, 43, 63, 54, 54, 15, 15, 06, 22, 22, 12\r
+ db 29, 29, 18, 36, 36, 24, 43, 43, 30, 50, 50, 36, 57\r
+ db 57, 42, 63, 63, 54, 02, 04, 14, 06, 12, 21, 10, 20\r
+ db 28, 14, 28, 35, 18, 36, 42, 22, 44, 49, 26, 52, 56\r
+ db 36, 63, 63, 18, 04, 14, 24, 08, 21, 31, 12, 28, 37\r
+ db 16, 35, 44, 20, 42, 50, 24, 49, 57, 28, 56, 63, 38\r
+ db 63, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00\r
+ db 00, 00, 00, 00, 00, 00, 00, 00, 00, 53, 44, 22, 09\r
+ db 08, 12, 16, 14, 16, 22, 21, 20, 29, 27, 24, 35, 34\r
+ db 28, 42, 40, 32, 48, 47, 36, 57, 56, 43, 08, 12, 16\r
+ db 14, 16, 22, 21, 20, 29, 27, 24, 35, 34, 28, 42, 40\r
+ db 32, 48, 47, 36, 57, 56, 43, 63, 13, 09, 11, 21, 16\r
+ db 15, 27, 22, 18, 36, 29, 22, 42, 35, 25, 51, 42, 29\r
+ db 57, 48, 32, 63, 56, 39, 06, 14, 09, 12, 21, 14, 18\r
+ db 27, 22, 24, 33, 28, 30, 39, 36, 36, 46, 42, 42, 52\r
+ db 47, 50, 59, 53, 00, 00, 00, 00, 00, 00, 00, 00, 00\r
+ db 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00\r
+ db 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00\r
+ db 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00\r
+ db 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00\r
+ db 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00\r
+ db 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00\r
+ db 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00\r
+ db 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00\r
+ db 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00\r
+ db 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00\r
+ db 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00\r
+ db 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00\r
+ db 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00\r
+ db 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00\r
+ db 00\r
\r
\r
;---------------------------------;\r
; sets the screen to mode 0x03 ;\r
;---------------------------------;\r
set_mode_0x03:\r
- push eax\r
+ push eax\r
\r
- ;mov ax, 0x0003 ; "realmode ax", move to\r
- ;shl eax, 16 ; the high part of eax\r
- ;mov ax, 0x77 ; os function number for ints\r
- ;int 0x32\r
+ ;mov ax, 0x0003 ; "realmode ax", move to\r
+ ;shl eax, 16 ; the high part of eax\r
+ ;mov ax, 0x77 ; os function number for ints\r
+ ;int 0x32\r
\r
- ;mov eax, 0x00030077 ; or it could look like this.\r
+ ;mov eax, 0x00030077 ; or it could look like this.\r
\r
- mov eax, 0x00030000\r
- mov ebx, 0x00100000 ; int no. in high part and\r
- call rmode_int ; realmode bx in low part\r
+ mov eax, 0x00030000\r
+ mov ebx, 0x00100000 ; int no. in high part and\r
+ call rmode_int ; realmode bx in low part\r
\r
- pop eax\r
- ret\r
+ pop eax\r
+ ret\r
\r
\r
;---------------------------------;\r
; sets the screen to mode 0x13 ;\r
;---------------------------------;\r
set_mode_0x13:\r
- push eax\r
- push ebx\r
+ push eax\r
+ push ebx\r
\r
- mov eax, 0x00130000 ; realmode ax in high part\r
- mov ebx, 0x00100000 ; int no. in high part and\r
- call rmode_int ; realmode bx in low part\r
+ mov eax, 0x00130000 ; realmode ax in high part\r
+ mov ebx, 0x00100000 ; int no. in high part and\r
+ call rmode_int ; realmode bx in low part\r
\r
- mov esi, palette256\r
- call set_palette256\r
+ mov esi, palette256\r
+ call set_palette256\r
\r
- pop ebx\r
- pop eax\r
- ret\r
+ pop ebx\r
+ pop eax\r
+ ret\r
\r
\r
;------------------------------------;\r
; output: none. ;\r
;------------------------------------;\r
put_0x13_pixel:\r
- push ax\r
- push bx\r
- push cx\r
- push edi\r
-\r
- mov edi, 0xa0000 ; directly to mem\r
- add di, bx\r
- mov bx, cx\r
- shl cx, 8\r
- shl bx, 6\r
- add cx, bx\r
- add di, cx\r
- stosb\r
-\r
- pop edi\r
- pop cx\r
- pop bx\r
- pop ax\r
- ret\r
+ push ax\r
+ push bx\r
+ push cx\r
+ push edi\r
+\r
+ mov edi, 0xa0000 ; directly to mem\r
+ add di, bx\r
+ mov bx, cx\r
+ shl cx, 8\r
+ shl bx, 6\r
+ add cx, bx\r
+ add di, cx\r
+ stosb\r
+\r
+ pop edi\r
+ pop cx\r
+ pop bx\r
+ pop ax\r
+ ret\r
\r
\r
;-----------------------------------------------------;\r
; output: none. ;\r
;-----------------------------------------------------;\r
put_0x13_sprite:\r
- pushad ; this was a\r
- .row_loop: ; nightmare to write.\r
- dec dx ; guess how many times\r
- push cx ; i got lost in the push\r
- push ax ; and pops here.. ;)\r
- .col_loop: ; not to mention what\r
- dec cx ; time it was when i wrote\r
- push ax ; it.. :P\r
- push bx\r
- push cx\r
- mov cx, bx\r
- mov bx, ax\r
- lodsb\r
- call put_0x13_pixel\r
- pop cx\r
- pop bx\r
- pop ax\r
- inc ax\r
- cmp cx, 0\r
- jne .col_loop\r
- pop ax\r
- pop cx\r
- inc bx\r
- cmp dx, 0\r
- jne .row_loop\r
- popad\r
- ret\r
+ pushad ; this was a\r
+ .row_loop: ; nightmare to write.\r
+ dec dx ; guess how many times\r
+ push cx ; i got lost in the push\r
+ push ax ; and pops here.. ;)\r
+ .col_loop: ; not to mention what\r
+ dec cx ; time it was when i wrote\r
+ push ax ; it.. :P\r
+ push bx\r
+ push cx\r
+ mov cx, bx\r
+ mov bx, ax\r
+ lodsb\r
+ call put_0x13_pixel\r
+ pop cx\r
+ pop bx\r
+ pop ax\r
+ inc ax\r
+ cmp cx, 0\r
+ jne .col_loop\r
+ pop ax\r
+ pop cx\r
+ inc bx\r
+ cmp dx, 0\r
+ jne .row_loop\r
+ popad\r
+ ret\r
\r
\r
;---------------------------------------------;\r
; output: none. ;\r
;---------------------------------------------;\r
set_palette256:\r
- push ax\r
- push cx\r
- push dx\r
-\r
- xor cx, cx\r
- .l1:\r
- mov dx, 0x03C8\r
- mov al, cl ; color no. = loop no.\r
- out dx, al\r
- inc dx ; port 0x3C9\r
- mov al, byte [esi] ; red\r
- out dx, al\r
- inc esi\r
- mov al, byte [esi] ; green\r
- out dx, al\r
- inc esi\r
- mov al, byte [esi] ; blue\r
- out dx, al\r
- inc esi\r
-\r
- inc cx\r
- cmp cx, 256\r
- jl .l1\r
-\r
- pop dx\r
- pop cx\r
- pop ax\r
- ret\r
+ push ax\r
+ push cx\r
+ push dx\r
+\r
+ xor cx, cx\r
+ .l1:\r
+ mov dx, 0x03C8\r
+ mov al, cl ; color no. = loop no.\r
+ out dx, al\r
+ inc dx ; port 0x3C9\r
+ mov al, byte [esi] ; red\r
+ out dx, al\r
+ inc esi\r
+ mov al, byte [esi] ; green\r
+ out dx, al\r
+ inc esi\r
+ mov al, byte [esi] ; blue\r
+ out dx, al\r
+ inc esi\r
+\r
+ inc cx\r
+ cmp cx, 256\r
+ jl .l1\r
+\r
+ pop dx\r
+ pop cx\r
+ pop ax\r
+ ret\r
\r