]> wirehaze git hosting - BOS.git/commitdiff

wirehaze git hosting

new indentation style
authorChristoffer Bubach <christoffer.bubach@gmail.com>
Tue, 22 Dec 2015 16:24:24 +0000 (17:24 +0100)
committerChristoffer Bubach <christoffer.bubach@gmail.com>
Tue, 22 Dec 2015 16:24:24 +0000 (17:24 +0100)
22 files changed:
boot/BOS_boot.asm
bos.img
kernel/16bit/a20.asm
kernel/16bit/mem.asm
kernel/16bit/variables.asm
kernel/fat12/fat12.asm
kernel/fdc/dma.asm
kernel/int/debug.asm
kernel/int/isr.asm
kernel/kbd/keyboard.asm
kernel/kbd/keymap.asm
kernel/kernel.sys
kernel/shell/clock.asm
kernel/shell/commands.asm
kernel/shell/shell.asm
kernel/sound/speaker.asm
kernel/system/services.asm
kernel/vars/strings.asm
kernel/vga/font8x16.asm
kernel/vga/mario.asm
kernel/vga/text.asm
kernel/vga/vga.asm

index 432465c5248129042e6d1574e0b73969575c8a99..8fde3a311cb35b04a62d98f287fa3d63ce5574f7 100755 (executable)
@@ -263,7 +263,7 @@ found:
 ;  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
diff --git a/bos.img b/bos.img
index 113e9feca4f11ebda3b84f9422b6115655a4a20b..f03b123f5169432dfc925bf5f17fe673830e6545 100755 (executable)
Binary files a/bos.img and b/bos.img differ
index 2935bd5c1e7fdd623b56c23c09a2fda462a50cc1..1b81c72d11525e51d9ab483a47793a69824a423e 100644 (file)
@@ -42,10 +42,10 @@ enable_a20:
 ;  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
index 0446e02ac7a70889033187fad91c6a596a6bb55c..7057d934c5bed744e497d36d33de509e84f13fec 100755 (executable)
 ;   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
index 0d739b0ddd981c014cf8728a024a8c5bd6aae430..a102a598a4f892685a724e736ea80f4f5df23a3f 100755 (executable)
@@ -10,7 +10,7 @@
 ;  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
index 832df8fedb57910cb3d94c1f4f35b546f0b6f7a0..18becda7e3e296e0646d4664618a36b045af11c3 100644 (file)
@@ -54,7 +54,7 @@
 
     virtual at 0                                      ; could use "at esi" instead
         fat12_data fat12_data
-        sizeof.fat12_data = $-$$     
+        sizeof.fat12_data = $-$$
     end virtual
 
     ;---------------------------------------------;
@@ -65,7 +65,7 @@
         .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
@@ -82,7 +82,7 @@
         .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
     }
 
@@ -224,20 +224,20 @@ init_fat12:
         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
 
@@ -265,7 +265,7 @@ calc_lfn_chksum:
         inc    esi                                    ; prepare for next character
         loop   .l1
 
-        pop    esi    
+        pop    esi
         pop    cx
         ret
 
index 39f3a8425bb751d4deb2fdbe75ee586433e8b5e3..d5eca64fa4d311d704bbc8cbe62fe6893a25dfb9 100755 (executable)
 ;  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
index ae2d6fe69f06676f5cdfd2d9e39fb553642872f7..19620642f0343b9ce7ec0415ba5bf5c617c54063 100755 (executable)
 ;----------------;\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
index f45357d45651f5ac9e7fe48a0ad5df7b66b5ad41..6b3a019f58b7413d29315791488da254f36af79e 100755 (executable)
 ;  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
@@ -473,57 +473,57 @@ isr13:
 ;   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
index 282bbe2b3026930f709fae06cc7a1458cb87a976..c2b941369c4f66bc6efd367fa38a288787af0d2c 100755 (executable)
 ;  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
@@ -211,18 +211,18 @@ keyboard_isr:
 ;  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
@@ -230,17 +230,17 @@ update_leds:
 ;  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
@@ -250,131 +250,131 @@ kbd_wait:
 ;               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
index ccd7b4f76b1148d302709e55b730a5bf91332bf2..7f47c3d7eedaa7cfca1956e20c0444cec3580f8d 100755 (executable)
@@ -7,79 +7,79 @@
 ;----------------------------------------------------------;\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
index eaa01f50c5327cb0da08fcded5e6975e25089bcc..170d21db2294776f7b93ddbb9df99d295b4a6415 100755 (executable)
Binary files a/kernel/kernel.sys and b/kernel/kernel.sys differ
index ba211acf984030f3bbd0d55afae77dab68ba08b3..53685d326bb5c50ae819bad9c24ee4d18a99d9e0 100755 (executable)
@@ -9,8 +9,8 @@
 ;------------------;\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
@@ -81,49 +81,49 @@ print_date:
 ;   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
index e68186203f4377da6143c2498dd79f8a64bc00ea..3fe7b4ae3a710a86d39e86f1c1855dbd26865aa5 100755 (executable)
 ; 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
index 25e7686ce096341b469a1f139b6bbe20f27f057d..ea157aeb2c747da65c86d5b17d08485d755e8e16 100755 (executable)
@@ -11,8 +11,8 @@
 ;  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
@@ -20,16 +20,15 @@ cmd_buffer: times 255       db   0                        ; 255 char command buffer
 ;  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
@@ -37,52 +36,52 @@ init_cmd:
 ;  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
@@ -91,100 +90,100 @@ shell:
 ;---------------------------------;\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
index 97eba801506d2ca8298666f7f9fe68ae0abe7a05..4852a2a3b05832af041404c4aebf51fd348d3b4e 100755 (executable)
 ;    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
index 3bd5b989da3b2b6bb506e4d860a04bbc461ecc0a..f275e0aba703b4e4b4f5ceb3566d4574d2d6afc1 100755 (executable)
 ;  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
index 386015dea5c1105bc2dd07408c933c10ea0e402f..57e07175ad41a1c83d6b97f2ae3a469cf33fc2e0 100755 (executable)
     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
index b26f778693f0aa526de329dc25604ddbdca0e81d..f03852aad8326b067c01dfe11323609dcdef078f 100755 (executable)
 ;     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
index e9a48b8868f9099cf515558e8544811414993ac8..5d0b04508fb5062e8a58ff4afe93232c75ddd001 100755 (executable)
-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
index 847acfc168d5fcb6170fd802d16d157432debbaa..5be11a9c82e09c5641ed1823538a1b14f2b23b72 100755 (executable)
@@ -9,9 +9,9 @@
 ;-----------------;\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
@@ -60,17 +60,17 @@ cls:
 ;            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
@@ -78,25 +78,25 @@ getcursorxy:
 ;            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
@@ -104,19 +104,19 @@ getcursor:
 ;            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
@@ -124,68 +124,68 @@ setcursorxy:
 ;            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
@@ -193,23 +193,23 @@ deccursor:
 ;  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
@@ -218,30 +218,30 @@ backspace:
 ;            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
@@ -250,33 +250,33 @@ print_char:
 ;            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
@@ -285,42 +285,42 @@ print_hex32:
 ;            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
@@ -328,26 +328,26 @@ print:
 ;  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
@@ -355,57 +355,57 @@ new_line:
 ;  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
index c27c62a4cad3e725804581ae442b901964e66308..460dc3283f6f43e1af182247da9df06fe749a4b3 100755 (executable)
      ;   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
@@ -124,25 +125,25 @@ set_mode_0x13:
 ; 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
@@ -154,33 +155,33 @@ put_0x13_pixel:
 ; 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
@@ -190,32 +191,32 @@ put_0x13_sprite:
 ; 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