]> wirehaze git hosting - BOS.git/commitdiff

wirehaze git hosting

Merge commit 'dba047e616f303ce818ba9ac7fb9f8a18a3717d3'
authorChristoffer Bubach <christoffer@ridestore.com>
Tue, 6 Jan 2015 21:01:58 +0000 (22:01 +0100)
committerChristoffer Bubach <christoffer@ridestore.com>
Tue, 6 Jan 2015 21:01:58 +0000 (22:01 +0100)
43 files changed:
boot/BOS_boot.asm [new file with mode: 0755]
boot/BOS_boot.bin [new file with mode: 0755]
doc/bochsrc.txt [new file with mode: 0755]
doc/design.txt [new file with mode: 0644]
install.bat [new file with mode: 0755]
install.sh [new file with mode: 0755]
kernel/kernel.asm [new file with mode: 0755]
kernel/kernel.sys [new file with mode: 0755]
kernel/krl_incs/bos_init.inc [new file with mode: 0755]
kernel/krl_incs/cmos.inc [new file with mode: 0755]
kernel/krl_incs/commands.inc [new file with mode: 0755]
kernel/krl_incs/debug.inc [new file with mode: 0755]
kernel/krl_incs/dma.inc [new file with mode: 0755]
kernel/krl_incs/en_mess.inc [new file with mode: 0755]
kernel/krl_incs/fdc.inc [new file with mode: 0755]
kernel/krl_incs/idt.inc [new file with mode: 0755]
kernel/krl_incs/isr.inc [new file with mode: 0755]
kernel/krl_incs/keyboard.inc [new file with mode: 0755]
kernel/krl_incs/keymap.inc [new file with mode: 0755]
kernel/krl_incs/mario.inc [new file with mode: 0755]
kernel/krl_incs/mem.inc [new file with mode: 0755]
kernel/krl_incs/pc_speaker.inc [new file with mode: 0755]
kernel/krl_incs/pic.inc [new file with mode: 0755]
kernel/krl_incs/rmode_int.inc [new file with mode: 0755]
kernel/krl_incs/shell.inc [new file with mode: 0755]
kernel/krl_incs/sys_ints.inc [new file with mode: 0755]
kernel/krl_incs/text.inc [new file with mode: 0755]
kernel/krl_incs/time_date.inc [new file with mode: 0755]
kernel/krl_incs/timer.inc [new file with mode: 0755]
kernel/krl_incs/vga.inc [new file with mode: 0755]
kernel/realmode/a20.inc [new file with mode: 0755]
kernel/realmode/do_all_16bit.inc [new file with mode: 0755]
kernel/realmode/gdt.inc [new file with mode: 0755]
kernel/realmode/idt.inc [new file with mode: 0755]
kernel/realmode/mem.inc [new file with mode: 0755]
kernel/realmode/variables.inc [new file with mode: 0755]
kernel/testkernels etc/font8x16.inc [new file with mode: 0755]
kernel/testkernels etc/kernel.asm [new file with mode: 0755]
kernel/testkernels etc/text.txt [new file with mode: 0755]
kernel/testkernels etc/vga.inc [new file with mode: 0755]
utils/FASM.EXE [new file with mode: 0755]
utils/PARTCOPY.EXE [new file with mode: 0755]
utils/fasm [new file with mode: 0755]

diff --git a/boot/BOS_boot.asm b/boot/BOS_boot.asm
new file mode 100755 (executable)
index 0000000..c77b7e3
--- /dev/null
@@ -0,0 +1,282 @@
+;------------------------------------------------------------;\r
+;                 BOS - FAT12 bootsector                     ;\r
+;------------------------------------------------------------;\r
+;  - FAT12 compatible.                                       ;\r
+;  - Loads a binary file from the floppy.                    ;\r
+;                                                            ;\r
+;------------------------------------------------------------;\r
+\r
+; TODO:\r
+;  as i moved some 16-bit stuff to the kernel, i now got\r
+;  space to do proper testing (for data-area etc),\r
+;  fix that...\r
+;\r
+; TODO2:\r
+;  find out why this crap takes ages to load the kernel.. :S\r
+\r
+\r
+;\r
+;     16-bit mem map  (seg:off)\r
+;  0x0000:0x0000 -> 0x0000:0x0500  BIOS stuff\r
+;  0x0000:0x0500 -> 0x0000:0x2100  FAT12 rootdir\r
+;  0x0000:0x2100 -> 0x0000:0x3300  FAT for FAT12\r
+;  0x0000:0x3300 -> 0x0000:0x6c00  14,25kb free space\r
+;  0x0000:0x6c00 -> 0x0000:0x7400  IDT, 256 descriptors\r
+;  0x0000:0x7400 -> 0x0000:0x7c00  GDT, 256 descriptors\r
+;  0x0000:0x7c00 -> 0x0000:0x7e00  bootsector\r
+;  0x0000:0x7e00 <- 0x0000:0xffff  ~32,5kb stack for boot\r
+;  0x1000:0x0000 -> 0x9000:0xffff  576kb kernel/free space\r
+;  0xa000:0x0000 -> .............  VGA mem etc.\r
+\r
+use16\r
+org 0x7C00\r
+\r
+boot:    jmp     near start\r
+         nop\r
+\r
+;------------------------------------------;\r
+;  Standard BIOS Parameter Block, "BPB".   ;\r
+;------------------------------------------;\r
+         bpbOEM          db  'BOS 0.04'\r
+         bpbSectSize     dw  512\r
+         bpbClustSize    db  1\r
+         bpbReservedSec  dw  1\r
+         bpbFats         db  2\r
+         bpbRootSize     dw  224\r
+         bpbTotalSect    dw  2880\r
+         bpbMedia        db  240\r
+         bpbFatSize      dw  9\r
+         bpbTrackSect    dw  18\r
+         bpbHeads        dw  2\r
+         bpbHiddenSect   dd  0\r
+         bpbLargeSect    dd  0\r
+     ;---------------------------------;\r
+     ;  extended BPB for FAT12/FAT16   ;\r
+     ;---------------------------------;\r
+         bpbDriveNo      db  0\r
+         bpbReserved     db  0\r
+         bpbSignature    db  41                      ; 0 = nothing more. 41 = three more (below)..\r
+         bpbID           dd  1\r
+         bpbVolumeLabel  db  'BOOT FLOPPY'\r
+         bpbFileSystem   db  'FAT12   '\r
+\r
+\r
+;----------------------------------------;\r
+;   starting point of bootsector code    ;\r
+;----------------------------------------;\r
+start:\r
+         cli\r
+\r
+         xor     ax, ax                              ; initialize all the necessary\r
+         mov     ds, ax                              ; registers.\r
+         mov     es, ax\r
+         mov     ss, ax\r
+         mov     sp, 0xFFFF                          ; Stack..\r
+\r
+         mov     [bpbDriveNo], dl\r
+\r
+         sti\r
+\r
+\r
+;----------------------------------;\r
+;   clear screen and print some    ;\r
+;----------------------------------;\r
+         mov     ax, 3                               ; Set mode 0x03\r
+         int     0x10\r
+\r
+         mov     bp, loading                         ; Print loading message.\r
+         mov     ax, 0x1301\r
+         mov     bx, 7\r
+         mov     cx, 12\r
+         mov     dx, 0x0102\r
+         int     0x10\r
+\r
+         mov     bl, 2                               ; Set cursor.\r
+         mov     ah, 2\r
+         mov     dx, 0x0201\r
+         int     0x10\r
+\r
+         mov     ah, 9                               ; Print 14 green dots.\r
+         mov     al, '.'\r
+         mov     cx, 14\r
+         int     0x10\r
+\r
+\r
+;---------------------------;\r
+;    load FAT and root      ;\r
+;---------------------------;\r
+         mov     di, 0x0050                          ; Load the root to\r
+         mov     ax, 19                              ; 0x0000:0x0500 (0x500/0x10)\r
+         mov     cx, 14\r
+         call    read_sectors\r
+\r
+         mov     di, 0x0210                          ; Load the fat to\r
+         mov     ax, 1                               ; 0x0000:0x2100\r
+         mov     cx, 9\r
+         call    read_sectors\r
+\r
+\r
+     ;------------------------;\r
+     ;  search for the file   ;\r
+     ;------------------------;\r
+         mov     dx, [bpbRootSize]\r
+         mov     bx, 0x0500\r
+     filesearch:\r
+         cld\r
+         mov     si, filename\r
+         mov     cx, 11\r
+         mov     di, bx\r
+         repe    cmpsb\r
+         je      found\r
+         add     bx, 32\r
+         dec     dx\r
+         jz      error\r
+         jmp     filesearch\r
+\r
+\r
+;-----------------------------------;\r
+;      variables & functions        ;\r
+;-----------------------------------;\r
+         loading         db  'Starting BOS'\r
+         filename        db  'KERNEL  SYS'\r
+         failure         db  'Read error!'\r
+\r
+\r
+     ;-----------------------------------------------;\r
+     ;   read a number of sectors (one at a time)    ;\r
+     ;-----------------------------------------------;\r
+     ;  in:                                          ;\r
+     ;    di = segment to save at                    ;\r
+     ;    ax = sector to read                        ;\r
+     ;    cx = number of sectors                     ;\r
+     ;  out:                                         ;\r
+     ;    di = updated (added for next read)         ;\r
+     ;    ax = updated (added for next read)         ;\r
+     ;-----------------------------------------------;\r
+     read_sectors:\r
+         pusha\r
+         mov     bl, byte [bpbTrackSect]             ; bl = number of sectors per track\r
+         div     bl                                  ; al = ax / bl\r
+         mov     cl, ah                              ; cl = real sector number\r
+         add     cl, 1\r
+\r
+         xor     ah, ah                              ; del the rest of the div before\r
+         mov     bl, byte [bpbHeads]                 ; bl = number of heads\r
+         div     bl                                  ; ah = rest of ( ax / bx ), al = ax / bx\r
+         mov     ch, al                              ; ch = number of track\r
+         mov     dh, ah                              ; dh = the head number\r
+\r
+         mov     ax, cx                              ; save cx in ax\r
+         mov     cx, 6                               ; try it 6 times\r
+     .next_try:\r
+         push    es\r
+         push    cx\r
+         mov     cx, ax                              ; restore cx\r
+         push    cx\r
+\r
+         xor     ax, ax\r
+         mov     dl, [bpbDriveNo]                    ; reset drive\r
+         push    dx\r
+         int     0x13\r
+         jc      .failed\r
+\r
+         pop     dx\r
+         pop     cx\r
+         xor     bx, bx\r
+         mov     es, di\r
+         mov     ax, 0x0201                          ; function 2, 1 sector\r
+         int     0x13\r
+         jnc     .ok                                 ; if it was ok, check next..\r
+\r
+     .failed:\r
+         pop     dx\r
+         pop     ax\r
+\r
+         pop     cx\r
+         pop     es\r
+         loop    .next_try                           ; else try once again if there is an error\r
+         jmp     error                               ; if cx = 0 and the read operation failed, halt\r
+     .ok:\r
+         pop     cx                                  ; from the next_try loop\r
+         pop     es\r
+         popa\r
+         add     di, 32                              ; add 32 (512/16) to segment\r
+         inc     ax                                  ; add sector counter\r
+         loop    read_sectors\r
+         ret\r
+\r
+\r
+     ;----------------------------------------------------;\r
+     ;  show a message and wait for a key before reboot   ;\r
+     ;----------------------------------------------------;\r
+     error:\r
+         mov     bp, failure\r
+         mov     ax, 0x1301\r
+         mov     bx, 4\r
+         mov     cx, 11\r
+         mov     dx, 0x0401\r
+         int     0x10\r
+\r
+         mov     ah, 0\r
+         int     0x16\r
+         int     0x19\r
+\r
+\r
+;-----------------------------------;\r
+;   the file is found, load it.     ;\r
+;-----------------------------------;\r
+found:\r
+         mov     bp, [bx+26]                         ; bp=cluster number from directory entry\r
+         mov     di, 0x1000                          ; 1000 (segment)\r
+\r
+     .next_block:\r
+         xor     cx, cx\r
+         mov     cl, [bpbClustSize]                  ; reset sector count to 1 cluster\r
+         mov     si, bp                              ; si=next should-be cluster for\r
+                                                     ; contiguous reads\r
+     .next_contiguous:\r
+         mov     ax, 3                               ; 3\r
+         mul     si                                  ; multiply cluster number by 3\r
+         shr     ax, 1                               ; divide by two\r
+         mov     bx, ax\r
+         mov     ax, word [(0x2100+bx)]              ; ax=FAT element with junk\r
+         jc      .odd_cluster                        ; jump if the value was odd\r
+         and     ax, 0x0FFF                          ; leave only lower 12 bits\r
+         jmp     .got_cluster                        ; got it\r
+     .odd_cluster:\r
+         shr     ax, 4                               ; (leave only bits 4-15)\r
+\r
+     .got_cluster:\r
+         inc     si                                  ; si=current cluster+1\r
+         cmp     ax, si                              ; next cluster=current cluster+1?\r
+         jne     .force_read                         ; is it still contiguous?\r
+\r
+         add     cl, [bpbClustSize]                  ; increase sector count by 1 cluster\r
+         adc     ch, 0                               ; add cf+0 to ch\r
+         jmp     .next_contiguous\r
+\r
+     .force_read:\r
+         xchg    bp, ax                              ; ax=bp (base cluster), bp=new cluster\r
+         dec     ax                                  ; decrease by 2 to get the actual...\r
+         dec     ax                                  ; ...cluster number\r
+\r
+         movzx   dx, byte [bpbClustSize]\r
+         mul     dx                                  ; multiply by sectors per cluster\r
+         add     ax, 33                              ; add data-area location (33)\r
+         call    read_sectors\r
+\r
+         cmp     bp, 0x0FF8                          ; is the new cluster EOF (FF8-FFF)?\r
+         jb      .next_block                         ; if not, read next block\r
+\r
+;-----------------------;\r
+;  the file is loaded   ;\r
+;-----------------------;\r
+quit:\r
+         jmp     0x1000:0x0000                       ; jump to loaded file (64kb in mem)\r
+\r
+\r
+;-------------------------------------;\r
+; set the BOOT-signature at byte 510. ;\r
+;-------------------------------------;\r
+         rb boot+512-2-$\r
+         dw 0xAA55
\ No newline at end of file
diff --git a/boot/BOS_boot.bin b/boot/BOS_boot.bin
new file mode 100755 (executable)
index 0000000..b196cc4
Binary files /dev/null and b/boot/BOS_boot.bin differ
diff --git a/doc/bochsrc.txt b/doc/bochsrc.txt
new file mode 100755 (executable)
index 0000000..982486f
--- /dev/null
@@ -0,0 +1,26 @@
+#######################################\r
+#                                     #\r
+#      BOCHS config file for BOS      #\r
+#                                     #\r
+#######################################\r
+\r
+romimage: file=BIOS-bochs-latest, address=0xf0000\r
+megs: 32\r
+vgaromimage: VGABIOS-elpin-2.40\r
+floppya: 1_44=a:, status=inserted\r
+boot: a\r
+floppy_bootsig_check: disabled=0\r
+log: bochsout.txt\r
+panic: action=ask\r
+error: action=report\r
+info: action=report\r
+debug: action=ignore\r
+debugger_log: debugger.out\r
+vga_update_interval: 300000\r
+keyboard_serial_delay: 250\r
+keyboard_paste_delay: 100000\r
+floppy_command_delay: 50000\r
+ips: 1000000\r
+mouse: enabled=0\r
+keyboard_mapping: enabled=0, map=\r
+user_shortcut: keys=ctrlaltdel\r
diff --git a/doc/design.txt b/doc/design.txt
new file mode 100644 (file)
index 0000000..c885068
--- /dev/null
@@ -0,0 +1,226 @@
+BOS design\r
+----------\r
+\r
+The kernel will load internal system modules like STDIO,\r
+VFS and so on, by calling a dd list in "init.inc".\r
+STDIO should be the first to load, as to be able to print\r
+loading status of other parts.\r
+\r
+\r
+\r
+STDIO will use internal buffer/debug console as STDOUT at\r
+first, until textmode, VESA or serial output driver is\r
+activated, at which point the internal buffer/debug console\r
+will be flushed to new STDOUT.\r
+\r
+Module for STDOUT could even include a file handle for\r
+systems with no normal output device, so that debugging\r
+information can be read out from file. All drivers\r
+for STDIO will have to follow a common STDIO interface\r
+and can be dynamically loaded and unloaded at runtime.\r
+\r
+Keyboard/mouse drivers for PS/2 and later USB also needs\r
+to register itself to STDIO as STDIN devices in the system.\r
+\r
+\r
+\r
+Other primary services tightly connected to the BOS kernel\r
+is the VFS for all storage devices and filesystems, the\r
+interrupt and system call interface for adding new calls\r
+and groups of calls within the standard int 0x32 interrupt.\r
+\r
+Groups of calls is for primary system services to be\r
+accessed from within the same interrupt, 0x32. For\r
+example the VFS, could use AL = 0x05 for it's "group-ID"\r
+and AH = 0x?? for a specific function-call. STDIO, could\r
+have AL = 0x01 with AH = 0x?? for the function number.\r
+\r
+\r
+\r
+Another primary systemcall group will be the "loader",\r
+for applications and modules/drivers not present inside\r
+the kernel image file - kernel.sys\r
+\r
+It will initially support 2 types of applications,\r
+normal programs and drivers/modules/TSR.\r
+\r
+Loading will be handled by means of segmentation at first,\r
+as the simpler format with less overhead. Similar to\r
+DOS .COM files. Another format for relocatable programs\r
+is planned but will require modifications to fasm for\r
+native output.  This will be similar to .EXE files in\r
+DOS. No limitations will be made to the formats,\r
+except the segmentated one will not have base set to zero\r
+in RAM, and will not have program headers and relocation-\r
+tables as overhead.\r
+\r
+This makes it somewhat trickier to preform certain RAM\r
+operations in higher level languages but also ideal for\r
+space constrained applications, such as scene demos - which\r
+often has very low size limits.\r
+\r
+File format exstensions is not yet decided, but might\r
+differ for the two formats. Maybe .APP for the simpler\r
+segmentated format and .PRG for the relocatable?\r
+\r
+\r
+\r
+The kernel image file will need to include some loadable\r
+drivers at the end for further access to media such as\r
+the floppy disk, and the FAT12 filesystem. With this it's\r
+possible that the file on a fat12 formatted floppy will\r
+be named kernel.img while internally it might be visible\r
+as kernel.sys, floppy.drv, fat12.drv and so on.\r
+\r
+Initially the VFS will have internal drivers for parsing\r
+this image format and deploying it as a RAM-drive with\r
+SBFS - static BOS filesystem. A very simple read-only FS\r
+in linked-list style. As simple as it gets.\r
+\r
+So the VFS needs RAM-drive and SBFS support built-in for\r
+it to be able to load additional drivers for floppy, fat12,\r
+harddrives and other media. System drive will always\r
+be this RAM-drive. Any drivers loaded at a later stage can\r
+be on any other media or drive, such as the floppy.\r
+\r
+There should be commands to load a driver like "LOAD"\r
+for one time use and "LOADPERM" for it to be permanetly\r
+inserted into the kernel image file for loading at boot.\r
+"UNLOAD" and "UNLOADPERM" could be used for unloading\r
+and removing drivers from the kernel image.\r
+\r
+\r
+\r
+Memory managment and allocation in BOS will be another\r
+primary system service with it's own group-ID in AL,\r
+for access with int 0x32. It will provide one allocation\r
+and freeing service for memory above 1mb and another\r
+service for memory below 1mb.\r
+\r
+Memory below 1mb should only be used in applications that\r
+needs to run 16-bit code or allocate DMA buffer space. It\r
+will be possible to demand 64kb align on allocations made\r
+in low memory - to properly support DMA transfers.\r
+\r
+The memory managment service group will also have functions\r
+to get RAM size, and maybe system location/size or others.\r
+\r
+\r
+\r
+Running custom 16-bit code will be possible by allocating\r
+low memory space, relocating any 16-bit code to that area\r
+and then calling a BOS system service to start execution\r
+in realmode at that address. This will allow for greater\r
+flexibility in utilizing BIOS services than a direct\r
+bridge call to for example interrupt 0x10 or 0x13.\r
+\r
+All (segment) registers can be used and BIOS interrupts\r
+demanding buffer space pointers will easily be supported by\r
+pre-allocating the necessary low memory before executing\r
+the real mode code.\r
+\r
+Direct execution of a native 16-bit executable file format\r
+is not planned, but could be supported by a third party\r
+loader written in 32-bit to take 16-bit binary filename as\r
+input, allocate low memory for it, relocate it, execute\r
+and clean up at exit.  Such a program could be extended to\r
+contain interrupt 0x21 services for basic DOS compability.\r
+\r
+BOS kernel is loaded at the 64kb mark right now, but should\r
+be moved sufficently below that for internal 16-bit code\r
+to work without address fixes. The ORG offset should be\r
+below 0xFFFF for all internal 16-bit code. Now it starts\r
+at 0x10000, which means this offset has to be substracted\r
+from all 16-bit code that deals with variables.\r
+\r
+For external 16-bit code, relocated and runned by the kernel,\r
+this is no issue.\r
+\r
+\r
+\r
+BOS should include a scripting language, similar to DOS batch\r
+files for scripting and "autoexec" usage. If the extension\r
+is .RUN - the file to autostart drivers and customize the\r
+system at boot could be called "auto.run".\r
+\r
+The scripting language needs some internal commands not tied\r
+to any shell, for program control - and also for the auto.run\r
+file to be able to load the shell at boot, the LOADSH command\r
+is needed. This could be directly tied to the VFS for\r
+selecting which shell to load.  The shell needs to set some\r
+system vars like %SHELLNAME% and %SHELLVERSION% for the\r
+scripts to know what other commands are available from it.\r
+\r
+Basic commands, independent of shell could be:\r
+LOADSH = "fd0:/path/shell.app"\r
+GOTO LABEL\r
+:LABEL\r
+REM comment\r
+IF [NOT] %xxx%==something GOTO LABEL\r
+ECHO %1 is first command line parameter\r
+ECHO.\r
+ECHO %SHELLNAME% is env. var for shell used.\r
+SET ENV_VARIBEL=Hi\r
+SETLOCAL LOCAL_VAR=Bye\r
+LOOP %var%\r
+ENDLOOP\r
+CALL filename.run\r
+\r
+Nothing is set in stone, but DOS batch file similarity could\r
+be good for those that know it well. It should be as easy to\r
+parse as possible.\r
+\r
+\r
+\r
+Graphics in BOS will probably be tied to the STDIO services\r
+with many additional function calls for drawing shapes and\r
+outputing sprites. Text output will be possible as in any\r
+textmode, but the cursor will be hidden by default, and if\r
+enabled, simulated with blinking and all - by BOS.\r
+\r
+With text output options even in VESA modes, a system crash\r
+will still be able to print out some facts about it with\r
+the same STDOUT functions as in textmode. Font&size will be\r
+optional, but optimized for best look and usability as default.\r
+\r
+Other graphics function will include anything that helps\r
+and eases the development of games, added as I port and\r
+develops my own game clones.\r
+\r
+\r
+\r
+The sound service group will have a unified function interface\r
+no matter what device is installed, only PC speaker, AC'97,\r
+SoundBlaster/AdLib compatible or Intel HD audio.\r
+\r
+It will be possible for the programs to detect capability of\r
+the installed driver for best utilization.\r
+\r
+\r
+\r
+A driver will be loaded in the exact same way as any other\r
+application but will install itself with the service group\r
+it belongs to, or as a new interrupt itself before quitting\r
+in a TSR way.\r
+\r
+The interrupt handling code will have functionality for drivers\r
+not only to install a completly new interrupt, but also to add\r
+itself as a new service group in the system interrupt 0x32.\r
+It will then be given a free service number (AL=0x??) for calls\r
+made to that group.  It could also request to take over an\r
+existing service number. What internal function to be called is\r
+decided with the value in AH and could go to external drivers\r
+that has been loaded and added itself to the service group.\r
+\r
+A driver might use .DRV extension or something to distinguish\r
+itself from a normal executable. It's not decided how to tell\r
+if it's a .APP type segmented driver or .PRG relocatable driver\r
+with just one .DRV extension. Could probe for relocatble format\r
+header for .PRG and assume .APP format if not found. This could\r
+be done for programs as well, if I choose to use one extension\r
+on both executable formats.\r
+\r
+\r
+\r
+The End\r
+ - for now.
\ No newline at end of file
diff --git a/install.bat b/install.bat
new file mode 100755 (executable)
index 0000000..6f44ae5
--- /dev/null
@@ -0,0 +1,16 @@
+@echo off\r
+echo Put an empty floppy in drive a: and\r
+pause\r
+echo.\r
+cd kernel\r
+..\utils\fasm kernel.asm kernel.sys\r
+cd ..\boot\r
+..\utils\fasm BOS_boot.asm BOS_boot.bin\r
+cd..\r
+.\utils\partcopy .\boot\BOS_boot.bin 0 200 -f0\r
+copy .\kernel\kernel.sys a:\r
+echo.\r
+echo Complete. Thank you for using my crappy\r
+echo installer.. (and for testing BOS 0.04)\r
+echo.\r
+pause
\ No newline at end of file
diff --git a/install.sh b/install.sh
new file mode 100755 (executable)
index 0000000..9e65ecc
--- /dev/null
@@ -0,0 +1,75 @@
+#! /bin/sh
+
+# BOS Linux Installer version 0.2
+# You must be root to run this script because of the floppy/loopback device
+
+echo
+echo -e "\E[33;1mBOS\E[0m - \E[32;1mLinux installer\E[0m"
+echo
+
+if [ `id -u` != "0" ]; then
+    echo -e "\E[31;1mYou must be root to use this installer!\E[0m"
+    echo
+fi
+
+if [ -z "$1" ]; then
+    echo "Usage is:"
+    echo -e "\E[31m$0 image\E[0m  - Creates a floppy image called bos.img"
+    echo -e "\E[31m$0 floppy\E[0m - Install BOS into a floppy ( must be inserted )"
+    echo
+    echo "Note: this installer will create a bootable image/floppy."
+    echo "Floppy creation is not tested ( I don't have a floppy reader ) and it should be already formatted"
+    exit
+fi
+
+echo -e "\E[32mCompiling BOS...\E[0m"
+./utils/fasm kernel/kernel.asm kernel/kernel.sys
+./utils/fasm boot/BOS_boot.asm boot/BOS_boot.bin
+
+if [ "$1" = "floppy" ]; then
+    echo -e "\E[32mStarting floppy installation...\E[0m"
+
+    #Install BOS_boot.bin as bootsector into bos.img
+    dd if=boot/BOS_boot.bin of=/dev/fd0 bs=1 count=512
+    mount /mnt/floppy
+
+    #Insert kernel.sys into image
+    cp kernel/kernel.sys /mnt/floppy
+
+    #Umount & cleanup
+    umount /mnt/floppy
+
+    echo -e "\E[33mBOS installed.\E[0m"
+
+else
+    echo -e "\E[32mStarting image creation...\E[0m"
+
+    #Create empty image
+    if [ -e bos.img ]; then
+        rm -f bos.img
+    fi
+    dd if=/dev/zero of=bos.img bs=1k count=1440
+
+    #Format image in MSDOS format and mount it
+    mkdosfs bos.img
+    losetup /dev/loop3 bos.img
+
+    #Install BOS_boot.bin as bootsector into bos.img
+    dd if=boot/BOS_boot.bin of=/dev/loop3 bs=1 count=512
+    if [ ! -e tmpmnt ]; then
+        mkdir tmpmnt
+    fi
+    mount -tmsdos /dev/loop3 tmpmnt
+
+    #Insert kernel.sys into image
+    cp kernel/kernel.sys tmpmnt
+
+    #Umount & cleanup
+    umount /dev/loop3
+    if [ -e tmpmnt ]; then
+        rm -rf tmpmnt
+    fi
+    losetup -d /dev/loop3
+
+    echo -e "\E[33mBOS image created! ( better do a chown on it now ;) )\E[0m"
+fi
\ No newline at end of file
diff --git a/kernel/kernel.asm b/kernel/kernel.asm
new file mode 100755 (executable)
index 0000000..40c2225
--- /dev/null
@@ -0,0 +1,120 @@
+;-------------------------------------------------------;\r
+;                     BOS kernel                        ;\r
+;-------------------------------------------------------;\r
+;    BOS 32-bit kernel, expects to be loaded at 64kb    ;\r
+;    in mem.   Small amount of 16-bit code included.    ;\r
+;                                                       ;\r
+;      For any comments on this code, mail me.          ;\r
+;   http://bos.asmhackers.net/   asmhacker@gmail.com    ;\r
+;                                                       ;\r
+;             by: Christoffer Bubach, 2003-2005         ;\r
+;-------------------------------------------------------;\r
+use16\r
+org 0x10000\r
+\r
+;---------------------------;\r
+;  jump to starting point   ;\r
+;---------------------------;\r
+         jmp     start\r
+\r
+;----------------------------------------;\r
+;     16-bit include files               ;\r
+;----------------------------------------;\r
+         include  'realmode/a20.inc'                 ; Function to set the a20-gate.\r
+         include  'realmode/gdt.inc'                 ; Global Description Table.\r
+         include  'realmode/idt.inc'                 ; The Interrupt Description Table.\r
+         include  'realmode/mem.inc'                 ; Get memory size.\r
+         include  'realmode/variables.inc'           ; For/from realmode.\r
+         include  'realmode/do_all_16bit.inc'        ; Save "go back to 16-bit"-info.\r
+\r
+\r
+\r
+;--------------------------;\r
+;   16-bit entry point     ;\r
+;--------------------------;\r
+start:\r
+         cli\r
+         mov     ax, cs\r
+         mov     ds, ax\r
+                                                     ; fasm is more strict about\r
+         xor     eax, eax                            ; "org 0x10000" then nasm, so\r
+         mov     es, ax                              ; i have to do -0x10000 from\r
+         mov     fs, ax                              ; all variable addresses while\r
+         mov     gs, ax                              ; in realmode.\r
+         sti\r
+\r
+         call    enable_a20\r
+         call    do_all_16bit                        ; ...  :P\r
+\r
+         cli\r
+         mov     ax, cs                              ; save cs\r
+         mov     [realmode_cs - 0x10000], ax         ; in variables.inc\r
+\r
+         lgdt    [gdtr - 0x10000]                    ; Load the GDT descriptor\r
+         lidt    [idtr - 0x10000]                    ; Load the IDT descriptor\r
+\r
+         mov     eax, cr0\r
+         or      al, 1\r
+         mov     cr0, eax\r
+\r
+         jmp     pword 0x08:flush                    ; dword in nasm\r
+\r
+\r
+\r
+;--------------------------;\r
+;   32-bit entry point     ;\r
+;--------------------------;\r
+use32\r
+flush:\r
+         mov     ax, 0x10                            ; refresh all segment registers\r
+         mov     ds, ax\r
+         mov     es, ax\r
+         mov     fs, ax\r
+         mov     gs, ax\r
+         mov     ss, ax\r
+         mov     esp, 0xFFFC\r
+\r
+         call    bos_init                            ; fix everything\r
+\r
+         mov     bx, 0x04B1                          ; start the shell\r
+         call    setcursor\r
+         mov     esi, bos_shell\r
+         mov     bl, 0x07\r
+         call    print\r
+         call    init_cmd\r
+         jmp     shell\r
+\r
+         ;int     0x32\r
+\r
+     .hang:\r
+         cli\r
+         hlt\r
+         jmp     .hang                               ; hang, just in case..\r
+\r
+\r
+;----------------------------------------;\r
+;     32-bit include files               ;\r
+;----------------------------------------;\r
+         include  'krl_incs/idt.inc'                 ; The Interrupt Description Table.\r
+         include  'krl_incs/text.inc'                ; The default textmode functions.\r
+         include  'krl_incs/bos_init.inc'            ; Function that starts up BOS\r
+         include  'krl_incs/en_mess.inc'             ; All strings in english (soon).\r
+         include  'krl_incs/rmode_int.inc'           ; Get back to realmode and do an INT.\r
+         include  'krl_incs/pic.inc'                 ; PIC rutines.\r
+         include  'krl_incs/sys_ints.inc'            ; System specific interrupts.\r
+         include  'krl_incs/keyboard.inc'            ; Keyboard ISR.\r
+         include  'krl_incs/keymap.inc'              ; Keymap(s).\r
+         include  'krl_incs/shell.inc'               ; File with shell/kernel monitor functions.\r
+         include  'krl_incs/commands.inc'            ; Command table, for valid shell commands.\r
+         include  'krl_incs/isr.inc'                 ; Interrupt Service Rutines.\r
+         include  'krl_incs/debug.inc'               ; Print contents of all regs and hang.\r
+         include  'krl_incs/cmos.inc'                ; To get CMOS data.\r
+         include  'krl_incs/time_date.inc'           ; Print time and date.\r
+         include  'krl_incs/timer.inc'               ; Timer IRQ.\r
+         include  'krl_incs/vga.inc'                 ; VGA functions.\r
+       ;  include  'krl_incs/font8x16.inc'            ; Standard font.\r
+         include  'krl_incs/dma.inc'                 ; DMA code.\r
+         include  'krl_incs/fdc.inc'                 ; Floppy code.\r
+         include  'krl_incs/mario.inc'               ; Mario sprite.\r
+         include  'krl_incs/pc_speaker.inc'          ; PC speaker.\r
+         include  'krl_incs/mem.inc'                 ; Memory allocation and freeing.
\ No newline at end of file
diff --git a/kernel/kernel.sys b/kernel/kernel.sys
new file mode 100755 (executable)
index 0000000..d553f80
Binary files /dev/null and b/kernel/kernel.sys differ
diff --git a/kernel/krl_incs/bos_init.inc b/kernel/krl_incs/bos_init.inc
new file mode 100755 (executable)
index 0000000..73e1354
--- /dev/null
@@ -0,0 +1,128 @@
+;----------------------------------------------------------;\r
+; BOS kernel                Christoffer Bubach, 2003-2005. ;\r
+;----------------------------------------------------------;\r
+;                                                          ;\r
+;     Initiation function for BOS                          ;\r
+;                                                          ;\r
+;----------------------------------------------------------;\r
+\r
+\r
+bos_init:\r
+\r
+     ;----------------------;\r
+     ;  we are in pmode..   ;\r
+     ;----------------------;\r
+         mov     bx, 0x0193\r
+         call    setcursor\r
+         mov     esi, pmode_load\r
+         mov     bl, 0x07\r
+         call    print\r
+\r
+         mov     bx, 0x01C5\r
+         call    setcursor\r
+         mov     esi, pmode_load_ok\r
+         mov     bl, 0x02\r
+         call    print\r
+\r
+     ;----------------------;\r
+     ;   kernel loaded..    ;\r
+     ;----------------------;\r
+         mov     bx, 0x01E3\r
+         call    setcursor\r
+         mov     esi, kernel_load\r
+         mov     bl, 0x07\r
+         call    print\r
+\r
+         mov     bx, 0x0215\r
+         call    setcursor\r
+         mov     esi, kernel_load_ok\r
+         mov     bl, 0x02\r
+         call    print\r
+\r
+     ;----------------;\r
+     ;  remap PICs    ;\r
+     ;----------------;\r
+         mov     cl, 0x20                            ; PIC 1, irq0-irq7 -> int 0x20-27.\r
+         mov     ch, 0x28                            ; PIC 2, irq8-irq15 -> int 0x28-30.\r
+         call    remap_pics\r
+         call    disable_irqs\r
+\r
+         mov     bx, 0x0233\r
+         call    setcursor\r
+         mov     esi, pic_irq\r
+         mov     bl, 0x07\r
+         call    print\r
+\r
+         mov     bx, 0x0265\r
+         call    setcursor\r
+         mov     esi, pic_irq_ok\r
+         mov     bl, 0x02\r
+         call    print\r
+\r
+     ;--------------;\r
+     ;  setup IDT   ;\r
+     ;--------------;\r
+         mov     edi, u_isr                          ; isr.inc\r
+         call    init_idt                            ; idt.inc\r
+         mov     esi, idt_list                       ; idt.inc\r
+         call    set_idt_list                        ; idt.inc\r
+\r
+         sti                                         ; Interrupts back..\r
+\r
+         mov     bx, 0x0283\r
+         call    setcursor\r
+         mov     esi, idt_mess\r
+         mov     bl, 0x07\r
+         call    print\r
+\r
+         mov     bx, 0x02B5\r
+         call    setcursor\r
+         mov     esi, idt_ok\r
+         mov     bl, 0x02\r
+         call    print\r
+\r
+\r
+     ;---------------------------------------------;\r
+     ;  enable IRQs (one after one as i code it)   ;\r
+     ;---------------------------------------------;\r
+         mov     cl, 1\r
+         call    enable_irq                          ; Enable IRQ 1.\r
+\r
+         mov     bx, 0x02D3\r
+         call    setcursor\r
+         mov     esi, kbd_load\r
+         mov     bl, 0x07\r
+         call    print\r
+\r
+         mov     bx, 0x0305\r
+         call    setcursor\r
+         mov     esi, kbd_ok\r
+         mov     bl, 0x02\r
+         call    print\r
+\r
+     ;------------------------------------;\r
+     ;  get CMOS data, set PIT to 100Hz   ;\r
+     ;                 and start timer.   ;\r
+     ;------------------------------------;\r
+         call    get_cmos_data                       ; cmos.inc\r
+         call    set_pit_freq                        ; timer.inc\r
+         mov     cl, 0\r
+         call    enable_irq                          ; Enable IRQ 0.\r
+\r
+     ;-------------------;\r
+     ;  init simple MM   ;\r
+     ;-------------------;\r
+         mov     ebx, 0x100000                       ; address of first free\r
+         mov     ecx, [ram_amount]                   ; RAM. everything before\r
+         call    init_mem                            ; that is reserved.\r
+\r
+     ;--------------------;\r
+     ;  init fdc driver   ;\r
+     ;--------------------;\r
+         call    fdc_init                            ; fdc.inc\r
+\r
+\r
+     ;-------------------------;\r
+     ;  return to kernel.asm   ;\r
+     ;-------------------------;\r
+         ret
\ No newline at end of file
diff --git a/kernel/krl_incs/cmos.inc b/kernel/krl_incs/cmos.inc
new file mode 100755 (executable)
index 0000000..032a95c
--- /dev/null
@@ -0,0 +1,96 @@
+;----------------------------------------------------------;\r
+; BOS kernel                     Christoffer Bubach, 2005. ;\r
+;----------------------------------------------------------;\r
+;                                                          ;\r
+;     To get stuff ( time & date ) from CMOS memory.       ;\r
+;                                                          ;\r
+;----------------------------------------------------------;\r
+\r
+\r
+;-----------------------------------;\r
+;  variables containing CMOS data   ;\r
+;-----------------------------------;\r
+         century         db   0                      ; latest century,\r
+         year            db   0                      ; year,\r
+         month           db   0                      ; month,\r
+         day             db   0                      ; day (1 = sunday),\r
+         hour            db   0                      ; hour,\r
+         minute          db   0                      ; minute and\r
+         second          db   0                      ; second read in from CMOS.\r
+\r
+\r
+;-------------------------;\r
+;  save info from CMOS    ;\r
+;-------------------------;\r
+get_cmos_data:\r
+         push    ax\r
+\r
+         mov     al, 0x00                            ; get the "second" byte\r
+         out     0x70, al\r
+         in      al, 0x71\r
+         mov     [second], al                        ; save it.\r
+\r
+         mov     al, 0x02                            ; get the "minute" byte\r
+         out     0x70, al\r
+         in      al, 0x71\r
+         mov     [minute], al\r
+\r
+         mov     al, 0x04                            ; get the "hour" byte\r
+         out     0x70, al\r
+         in      al, 0x71\r
+         mov     [hour], al\r
+\r
+         mov     al, 0x07                            ; get the "day" byte\r
+         out     0x70, al\r
+         in      al, 0x71\r
+         mov     [day], al\r
+\r
+         mov     al, 0x08                            ; get the "month" byte\r
+         out     0x70, al\r
+         in      al, 0x71\r
+         mov     [month], al\r
+\r
+         mov     al, 0x09                            ; get the "year" byte\r
+         out     0x70, al\r
+         in      al, 0x71\r
+         mov     [year], al\r
+\r
+         mov     al, 0x32                            ; get the "century" byte\r
+         out     0x70, al\r
+         in      al, 0x71\r
+         mov     [century], al\r
+\r
+         pop     ax\r
+         ret\r
+\r
+;------------------------------------------------;\r
+;   calculate binary from BCD                    ;\r
+;                              in:  al = BCD     ;\r
+;                              out: al = bin     ;\r
+;------------------------------------------------;\r
+BCD2bin:\r
+         push    ebx\r
+         mov     bl, al                              ; bl = al mod 16\r
+         and     bl, 0x0F\r
+         shr     al, 4                               ; al = al / 16\r
+         mov     bh, 10\r
+         mul     bh                                  ; multiply by 10\r
+         add     al, bl                              ; add in low nib\r
+         pop     ebx\r
+         ret\r
+\r
+\r
+;------------------------------------------------;\r
+;    calculate ASCII from BCD                    ;\r
+;                              in:  al = BCD     ;\r
+;                              out: ax = ASCII   ;\r
+;------------------------------------------------;\r
+BCD2ascii:\r
+         push    ecx\r
+         mov     ah, al\r
+         and     ax, 0xF00F                          ; mask bits\r
+         shr     ah, 4                               ; right shift ah to get unpacked BCD\r
+         or      ax, 0x3030                          ; combine with 30 to get ASCII\r
+         xchg    ah, al                              ; swap for ASCII storage convention\r
+         pop     ecx\r
+         ret
\ No newline at end of file
diff --git a/kernel/krl_incs/commands.inc b/kernel/krl_incs/commands.inc
new file mode 100755 (executable)
index 0000000..1c66dc7
--- /dev/null
@@ -0,0 +1,551 @@
+;----------------------------------------------------------;\r
+; BOS kernel                Christoffer Bubach, 2003-2005. ;\r
+;----------------------------------------------------------;\r
+;                                                          ;\r
+;  Command table and some commands for the shell.          ;\r
+;                                                          ;\r
+;----------------------------------------------------------;\r
+\r
+; I should really do something about this file, divide it into\r
+; 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.04 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
+     .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
+         call    fdd_recalibrate                     ; 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
diff --git a/kernel/krl_incs/debug.inc b/kernel/krl_incs/debug.inc
new file mode 100755 (executable)
index 0000000..4c1fe19
--- /dev/null
@@ -0,0 +1,385 @@
+;----------------------------------------------------------;\r
+; BOS kernel                Christoffer Bubach, 2004-2005. ;\r
+;----------------------------------------------------------;\r
+;                                                          ;\r
+;   BOS mighty debugging service, dump some regs..         ;\r
+;                                                          ;\r
+;----------------------------------------------------------;\r
+\r
+;----------------;\r
+;   variables    ;\r
+;----------------;\r
+         dbg_head        db   'ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»',0\r
+         dbg_head2       db   'º BOS 0.04 - 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
+     ;-------------------;\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
+    ;-------------------------------;\r
+    ;  original cursor placment..   ;\r
+    ;-------------------------------;\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
+\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
+\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
+     .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
+\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
+\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
+\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
+\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
+\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
+     .check1:\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
+\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
+\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
+     .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
+     .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
+\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
+     .end_small2:\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
+\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
+     .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
+     ;------------------------------------------;\r
+     ;  subfunction to print 32-bit hex value   ;\r
+     ;          IN: eax = value, bh = color.    ;\r
+     ;------------------------------------------;\r
+     .print_hex32:\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
+     .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
diff --git a/kernel/krl_incs/dma.inc b/kernel/krl_incs/dma.inc
new file mode 100755 (executable)
index 0000000..39f3a84
--- /dev/null
@@ -0,0 +1,93 @@
+;----------------------------------------------------------;\r
+; BOS kernel                Christoffer Bubach, 2004-2005. ;\r
+;----------------------------------------------------------;\r
+;                                                          ;\r
+;    DMA transfer code.                                    ;\r
+;                                                          ;\r
+;----------------------------------------------------------;\r
+\r
+\r
+;------------------------------------------;\r
+;  Lookup table for DMA controller ports   ;\r
+;------------------------------------------;\r
+     dma_mask_reg    dw   0x0A, 0x0A, 0x0A, 0x0A, 0xD4, 0xD4, 0xD4, 0xD4\r
+     dma_mode_reg    dw   0x0B, 0x0B, 0x0B, 0x0B, 0xD6, 0xD6, 0xD6, 0xD6\r
+     dma_clear_reg   dw   0x0C, 0x0C, 0x0C, 0x0C, 0xD8, 0xD8, 0xD8, 0xD8\r
+     dma_page_port   dw   0x87, 0x83, 0x81, 0x82, 0x8F, 0x8B, 0x89, 0x8A\r
+     dma_addr_port   dw   0x00, 0x02, 0x04, 0x06, 0xC0, 0xC4, 0xC8, 0xCC\r
+     dma_count_port  dw   0x01, 0x03, 0x05, 0x07, 0xC2, 0xC6, 0xCA, 0xCE\r
+\r
+\r
+;-----------------------------------;\r
+;   dma transfer                    ;\r
+;                                   ;\r
+;  in:  ecx = page:offset           ;\r
+;       bl  = channel               ;\r
+;       bh  = 1=read, 0=write       ;\r
+;       esi = count                 ;\r
+;                                   ;\r
+;  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
+\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
+\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
+\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
+\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
+\r
+         sti\r
+         pop     esi\r
+         pop     edx\r
+         pop     eax\r
+         ret
\ No newline at end of file
diff --git a/kernel/krl_incs/en_mess.inc b/kernel/krl_incs/en_mess.inc
new file mode 100755 (executable)
index 0000000..d088c49
--- /dev/null
@@ -0,0 +1,29 @@
+;----------------------------------------------------------;\r
+; BOS 0.04                  Christoffer Bubach, 2004-2005. ;\r
+;----------------------------------------------------------;\r
+;                                                          ;\r
+;     English strings used in BOS.                         ;\r
+;      I should collect them all here, just too lazy...    ;\r
+;----------------------------------------------------------;\r
+\r
+\r
+;---------------;\r
+;   strings     ;\r
+;---------------;\r
+\r
+     pmode_load      db   'Setting up protected mode...', 0\r
+     pmode_load_ok   db   '[ 32-bits OK   ]', 0\r
+\r
+     kernel_load     db   'Loading kernel...', 0\r
+     kernel_load_ok  db   '[ OK           ]', 0\r
+\r
+     pic_irq        db   'Fixing PIC and IRQs...', 0\r
+     pic_irq_ok      db   '[ Done         ]', 0\r
+\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
+\r
+     bos_shell      db   'BOS shell. Type "help" for more info.', 13, 10, 0\r
diff --git a/kernel/krl_incs/fdc.inc b/kernel/krl_incs/fdc.inc
new file mode 100755 (executable)
index 0000000..d90218d
--- /dev/null
@@ -0,0 +1,501 @@
+;----------------------------------------------------------;\r
+; BOS kernel                Christoffer Bubach, 2004-2005. ;\r
+;----------------------------------------------------------;\r
+;                                                          ;\r
+;  floppy disk driver originally by Craig Bamford, Dex4u.  ;\r
+;          adjustments and for BOS by bubach.              ;\r
+;                                                          ;\r
+;----------------------------------------------------------;\r
+\r
+;  NOTE: I'm almost finished with a much improved version of\r
+;        this code, that supports 2 drives of multiple types.\r
+;        I'll wait with that until next version, so you won't\r
+;        have to see a half finished mess here.\r
+\r
+;---------------------------;\r
+;  variables and contants   ;\r
+;---------------------------;\r
+     fdd_int_done    dw   0                          ; is the IRQ done?\r
+     fdd_motor_on    db   0                          ; fdd motor on=1, off=0\r
+     fdd_head       db   0\r
+     fdd_driveno     db   0\r
+     fdd_track      db   0\r
+     fdd_sector      db   0\r
+\r
+     fdd_errorcode   db   0                          ; this the error code 00 = no error\r
+     fdd_tries      db   0                           ; no. of times to try, before error.\r
+\r
+     ResultST0      db   0\r
+     ResultST1      db   0                           ; or pcn\r
+     ResultST2      db   0\r
+     ResultST3      db   0\r
+     ResultC        db   0\r
+     ResultH        db   0\r
+     ResultR        db   0\r
+     ResultN        db   0\r
+     ResultExtra     db   0\r
+\r
+\r
+\r
+;------------------------------------------------------;\r
+;    initializes the floppy disk driver                ;\r
+;                                                      ;\r
+;------------------------------------------------------;\r
+fdc_init:\r
+         push    ecx\r
+         push    edi\r
+\r
+         mov     cl, 0x26                            ; hook interrupt 0x26 (IRQ6)\r
+         mov     edi, floppy_irq\r
+         call    set_int\r
+\r
+         mov     cl, 6                               ; enable IRQ6\r
+         call    enable_irq\r
+\r
+         call    fdd_reset                           ; reset FDC\r
+         call    fdd_recalibrate\r
+\r
+         pop     edi\r
+         pop     ecx\r
+         ret\r
+\r
+\r
+\r
+;------------------------------------------------------;\r
+;         floppy IRQ                                   ;\r
+;                                                      ;\r
+;------------------------------------------------------;\r
+floppy_irq:\r
+         pusha\r
+         push    gs\r
+         push    fs\r
+         push    ds\r
+         push    es\r
+         push    esi\r
+\r
+         or      [fdd_int_done], 1\r
+         mov     al, 0x20\r
+         out     0x20, al\r
+\r
+         pop     esi\r
+         pop     es\r
+         pop     ds\r
+         pop     fs\r
+         pop     gs\r
+         popa\r
+         iret\r
+\r
+\r
+\r
+;------------------------------------------------------;\r
+;     wait for a floppy int                            ;\r
+;                           out:  cf  = 1 if timeout   ;\r
+;------------------------------------------------------;\r
+wait_int:\r
+         push    eax\r
+         push    ecx\r
+\r
+         mov     ecx, 150                            ; 150 = 1.5 seconds.\r
+         call    active_delay                        ; timer.inc\r
+     .l1:\r
+         cmp     dword [ecx], 0                      ; timeup?\r
+         je      .error\r
+         mov     ax, [fdd_int_done]                  ; if not we check for int.\r
+         or      ax, ax\r
+         jz      .l1\r
+         pop     ecx\r
+         pop     eax\r
+         clc\r
+         ret\r
+     .error:\r
+         pop     ecx\r
+         pop     eax\r
+         stc\r
+         ret\r
+\r
+\r
+\r
+;------------------------------------------------------;\r
+;     fdd motor off                                    ;\r
+;                           out:  nothing              ;\r
+;------------------------------------------------------;\r
+fdd_off:\r
+         push    eax\r
+         push    edx\r
+\r
+         mov     dx, 0x3F2\r
+         mov     al, 0                               ; all motors off..\r
+         out     dx, al\r
+         mov     [fdd_motor_on], 0\r
+\r
+         pop     edx\r
+         pop     eax\r
+         ret\r
+\r
+\r
+\r
+\r
+;------------------------------------------------------;\r
+;     fdd motor on                                     ;\r
+;                           out: nothing               ;\r
+;------------------------------------------------------;\r
+fdd_on:\r
+         push    eax\r
+         push    edx\r
+\r
+         mov     dx, 0x3F2                           ; motor 0 on..\r
+         mov     al, 0x1C\r
+         out     dx, al\r
+\r
+         mov     ecx, 20                             ; 1/5 of a sec. to speed up\r
+         call    delay                               ; in timer.inc\r
+         mov     [fdd_motor_on], 1\r
+\r
+         pop     edx\r
+         pop     eax\r
+         ret\r
+\r
+\r
+\r
+;------------------------------------------------------;\r
+;   send a data byte to the FDC                        ;\r
+;                                                      ;\r
+;                                in:  al  = data byte  ;\r
+;------------------------------------------------------;\r
+fdc_sendbyte:\r
+         push    edx\r
+         push    ecx\r
+         push    eax\r
+\r
+         mov     ecx, 150                            ; 150 = 1.5 seconds.\r
+         call    active_delay                        ; timer.inc\r
+     .l1:\r
+         cmp     dword [ecx], 0                      ; timeup?\r
+         je      .error\r
+         mov     dx, 0x3f4                           ; check status reg\r
+         in      al, dx\r
+         and     al, 11000000b\r
+         cmp     al, 10000000b                       ; are we ok to write\r
+         jnz     .l1\r
+\r
+         pop     eax\r
+         pop     ecx\r
+         mov     dx, 0x3F5                           ; send byte\r
+         out     dx, al\r
+         pop     edx\r
+         clc\r
+         ret\r
+     .error:\r
+         pop     eax\r
+         pop     ecx\r
+         pop     edx\r
+         stc\r
+         ret\r
+\r
+\r
+;------------------------------------------------------;\r
+;   read a data byte from the FDC                      ;\r
+;                                                      ;\r
+;                             out: al  = data byte     ;\r
+;------------------------------------------------------;\r
+fdc_getbyte:\r
+         push    edx\r
+         push    ecx\r
+         push    eax\r
+\r
+         mov     ecx, 150                            ; 150 = 1.5 seconds.\r
+         call    active_delay                        ; timer.inc\r
+     .l1:\r
+         cmp     dword [ecx], 0                      ; timeup?\r
+         je      .error\r
+         mov     dx, 0x3f4                           ; check status reg\r
+         in      al, dx\r
+         and     al, 11000000b\r
+         cmp     al, 11000000b                       ; are we ok to read\r
+         jnz     .l1\r
+\r
+         pop     eax\r
+         pop     ecx\r
+         mov     dx, 0x3F5                           ; get the byte\r
+         in      al, dx\r
+         pop     edx\r
+         clc\r
+         ret\r
+     .error:\r
+         pop     eax\r
+         pop     ecx\r
+         pop     edx\r
+         stc\r
+         ret\r
+\r
+\r
+\r
+\r
+;------------------------------------------------------;\r
+;    reset controller                                  ;\r
+;                                                      ;\r
+;------------------------------------------------------;\r
+fdd_reset:\r
+         push    eax\r
+         push    ecx\r
+         push    edx\r
+\r
+         mov     dx, 0x3F2\r
+         mov     al, 00001000b                       ; no motors enabled, DMA Enabled, held FDC at reset\r
+         out     dx, al                              ; drive A selected.\r
+\r
+         mov     ecx, 5\r
+         call    delay                               ; in timer.inc\r
+\r
+         mov     dx, 0x3F7\r
+         mov     al, 00000000b                       ; 500Kb/sec mode\r
+         out     dx, al\r
+\r
+         mov     dx, 0x3F2\r
+         or      al, 00001100b                       ; FDC completed reset, al =0x0c.\r
+         out     dx, al\r
+\r
+         mov     [fdd_int_done], 0                   ; we need to wait\r
+         call    wait_int                            ; for floppy int.\r
+         jc      .error                              ; jump to error exit, if timeout.\r
+\r
+         mov     cx, 0x04                            ; after a reset, the interrupts must be\r
+     .status:                                        ; cleared by (four) dummy-reads.\r
+         mov     al, 0x08                            ; sense interrupt status command\r
+         call    fdc_sendbyte\r
+         call    fdc_getbyte\r
+         call    fdc_getbyte\r
+         loop    .status\r
+\r
+         mov     al, 0x03                            ; specify command (includes next two bytes sent)\r
+         call    fdc_sendbyte\r
+         mov     al, 0xDF                            ; SRT = 3ms, HUT = 240ms\r
+         call    fdc_sendbyte\r
+         mov     al, 0x02                            ; HLT = 16ms, ND = 0\r
+         call    fdc_sendbyte\r
+     .ok:\r
+         pop     edx\r
+         pop     ecx\r
+         pop     eax\r
+         clc\r
+         ret\r
+     .error:\r
+         pop     edx\r
+         pop     ecx\r
+         pop     eax\r
+         stc\r
+         ret\r
+\r
+\r
+\r
+\r
+;------------------------------------------------------;\r
+;     fdd seek                                         ;\r
+;                                                      ;\r
+;------------------------------------------------------;\r
+fdd_seek:\r
+         push    eax\r
+\r
+         mov     al, [ResultC]                       ; put what track/cylinder we are at in al\r
+         cmp     [fdd_track], al                     ; is it the same as we want\r
+         je      .ok                                 ; yes, then leave.\r
+\r
+         mov     al, 0x0F                            ; seek command\r
+         call    fdc_sendbyte\r
+         mov     al, [fdd_driveno]                   ; drive # (00 = A)\r
+         call    fdc_sendbyte\r
+         mov     al, [fdd_track]                     ; cylinder #\r
+         call    fdc_sendbyte\r
+\r
+         mov     [fdd_int_done], 0\r
+         call    wait_int\r
+         jc      .error\r
+\r
+         mov     al, 0x08                            ; sense interrupt status command\r
+         call    fdc_sendbyte\r
+         call    fdc_getbyte\r
+         mov     ah, al                              ; save ST0 in ah\r
+         call    fdc_getbyte                         ; should read PCN\r
+\r
+         test    ah, 00100000b                       ; test sr0 is 0x20\r
+         jz      .error                              ; if not we have a error :-(.\r
+         test    ah,10000000b                        ; test sr0 is 0x80\r
+         jnz     .error                              ; if not we have a error :-(.\r
+     .ok:                                            ; succsess.. :-)\r
+         pop     eax\r
+         clc\r
+         ret\r
+     .error:\r
+         pop     eax\r
+         stc\r
+         ret\r
+\r
+\r
+;------------------------------------------------------;\r
+;   fdd recalibrate                                    ;\r
+;                                                      ;\r
+;------------------------------------------------------;\r
+fdd_recalibrate:\r
+         push    eax\r
+\r
+         test    [fdd_motor_on], 1\r
+         jnz     .l1\r
+         call    fdd_on\r
+     .l1:\r
+         mov     al, 0x07                            ; recalibrate command\r
+         call    fdc_sendbyte\r
+         mov     al, 0x00                            ; selects drive a:\r
+         call    fdc_sendbyte\r
+\r
+         mov     [fdd_int_done], 0\r
+         call    wait_int\r
+         jc      .error\r
+\r
+         mov     al, 0x08                            ; sense interrupt status command\r
+         call    fdc_sendbyte\r
+         call    fdc_getbyte                         ; read STO\r
+         mov     ah, al                              ; save ST0 in ah\r
+         call    fdc_getbyte\r
+\r
+         test    ah, 00100000b                       ; test sr0 is 0x20\r
+         jz      .error\r
+         test    ah, 00010000b                       ; test sr0 is 0x80\r
+         jnz     .error\r
+     .ok:\r
+         mov     [ResultC], 0\r
+         pop     eax\r
+         clc\r
+         ret\r
+     .error:\r
+         pop     eax\r
+         stc\r
+         ret\r
+\r
+\r
+\r
+;------------------------------------------------------;\r
+;  fdd read/write                                      ;\r
+;   input:  bl  = 0 read, 1 write                      ;\r
+;           ch  = track/cylinder                       ;\r
+;           cl  = sector                               ;\r
+;           dh  = head                                 ;\r
+;           dl  = drive (only A: drive used, 00 )      ;\r
+;   output: ah  = status                               ;\r
+;           al  = sector number read                   ;\r
+;           cf  = 0 if ok, 1 if error                  ;\r
+;------------------------------------------------------;\r
+fdd_read_write:\r
+         pushad\r
+         and     dh, 00000001b                       ; is it set to fdd_head 0 or 1?\r
+         mov     [fdd_head], dh                      ; store it.\r
+         shl     dh, 2                               ; make the first 2 bits = 00 for A:.\r
+         mov     [fdd_driveno], dh                   ; store it.\r
+\r
+         mov     [fdd_errorcode], 0x04               ; put error code in ah, just incase\r
+         cmp     ch, 0x51                            ; cmp if track number, is above 80 decimal (51 hex)?\r
+         jae     .error                              ; if above jump error.\r
+         mov     [fdd_track], ch                     ; if not above,store it.\r
+\r
+         cmp     cl, 0x13                            ; cmp if fdd_sector number, is above 18 decimal (12 hex) ?.\r
+         jae     .error                              ; if above jump error.\r
+         mov     [fdd_sector], cl                    ; if not above,store it.\r
+\r
+         test    [fdd_motor_on], 1\r
+         jnz     .l1\r
+         call    fdd_on\r
+     .l1:\r
+         mov     dx, 0x3F7\r
+         mov     al, 00000000b                       ; 500Kb/sec mode\r
+         out     dx, al\r
+         mov     [fdd_errorcode], 0x80               ; put basic error code, just in case.\r
+\r
+         xor     ecx, ecx\r
+         mov     cx, 3                               ; we want to try seek 3 times\r
+     .l2:\r
+         call    fdd_seek                            ; we need to move to the right track.\r
+         jnc     .l3                                 ; we should be on the right track.\r
+         loop    .l2\r
+         jmp     .error                              ; timeout.\r
+     .l3:\r
+         mov     dx, 0x3f4                           ; check status reg (to see if DMA bit set)\r
+         in      al, dx\r
+         test    al, 00100000b                       ; test sr0 is 0x80\r
+         jnz     .error\r
+\r
+         cmp     bl, 0\r
+         je      .read_fdd\r
+\r
+     .write_fdd:\r
+         mov     bl, 2                               ; channel 2\r
+         mov     esi, 512                            ; bytes to write\r
+         mov     ecx, 0x80000                        ; page & offset\r
+         mov     bh, 1                               ; write floppy, "read DMA"\r
+         call    dma_transfer\r
+\r
+         mov     al, 0xC5                            ; write fdd_sector command\r
+         call    fdc_sendbyte\r
+         jmp     .cont\r
+\r
+     .read_fdd:\r
+         mov     bl, 2                               ; channel 2\r
+         mov     esi, 512                            ; bytes to read\r
+         mov     ecx, 0x80000                        ; page & offset\r
+         mov     bh, 0                               ; read floppy, "write DMA"\r
+         call    dma_transfer\r
+\r
+         mov     al, 0xE6                            ; read fdd_sector command\r
+         call    fdc_sendbyte\r
+\r
+     .cont:\r
+         mov     al, [fdd_driveno]                   ; fdd_head no. 0, drive A:\r
+         call    fdc_sendbyte\r
+         mov     al, [fdd_track]                     ; cylinder\r
+         call    fdc_sendbyte\r
+\r
+         mov     al, [fdd_head]                      ; head/side 0 or 1\r
+         call    fdc_sendbyte\r
+         mov     al, [fdd_sector]                    ; sector number,starts at 1\r
+         call    fdc_sendbyte\r
+         mov     al, 0x02                            ; sector size - 512 bytes\r
+         call    fdc_sendbyte\r
+\r
+         mov     al, 0x12                            ; 18 decimal sectors to a track\r
+         call    fdc_sendbyte\r
+         mov     al, 0x1B                            ; 27 should be the gap length for a 3.5" 1.44Mb\r
+         call    fdc_sendbyte\r
+         mov     al, 0xFF                            ; not used data length, because sector size has been filled\r
+         call    fdc_sendbyte\r
+\r
+         mov     [fdd_int_done], 0\r
+         call    wait_int\r
+         jc      .error\r
+\r
+         call    fdc_getbyte\r
+         mov     [ResultST0], al                     ; save result of ST0 in var\r
+         call    fdc_getbyte\r
+         mov     [ResultST1], al                     ; save result of ST1 in var\r
+         call    fdc_getbyte\r
+         mov     [ResultST2], al                     ; save result of ST2 in var\r
+         call    fdc_getbyte\r
+         mov     [ResultC], al                       ; save result of cylinder\r
+         call    fdc_getbyte\r
+         mov     [ResultH], al                       ; save result of head\r
+         call    fdc_getbyte\r
+         mov     [ResultR], al                       ; save result of sector number.\r
+         call    fdc_getbyte\r
+         mov     [ResultN], al                       ; save result of sector size\r
+\r
+         test    [ResultST0], 11000000b              ; test sr0 is 0xC0\r
+         jnz     .error\r
+         mov     [fdd_errorcode], 0x00\r
+     .ok:\r
+         popad\r
+         mov     ah, [fdd_errorcode]                 ; move error status into ah\r
+         mov     al, [ResultR]\r
+         clc\r
+         ret\r
+     .error:\r
+         popad\r
+         mov     ah, [fdd_errorcode]                 ; move error status into ah\r
+         stc\r
+         ret
\ No newline at end of file
diff --git a/kernel/krl_incs/idt.inc b/kernel/krl_incs/idt.inc
new file mode 100755 (executable)
index 0000000..a899cbc
--- /dev/null
@@ -0,0 +1,147 @@
+;----------------------------------------------------------;\r
+; BOS kernel                Christoffer Bubach, 2003-2005. ;\r
+;----------------------------------------------------------;\r
+;                                                          ;\r
+;       set/modify IDT entries                             ;\r
+;                                                          ;\r
+;----------------------------------------------------------;\r
+\r
+\r
+\r
+;--------------------------------------------------;\r
+;     set up IDT                                   ;\r
+; in:  edi = pointer to "unhandled int"-function.  ;\r
+;--------------------------------------------------;\r
+init_idt:\r
+         push    eax\r
+         push    ecx\r
+\r
+         mov     ecx, 0\r
+     .loop:                                          ; loop\r
+         mov     eax, edi                            ; and\r
+         mov     [(0x6c00+ecx)], ax                  ; set whole IDT\r
+         add     ecx, 2                              ; to one ISR\r
+\r
+         mov     dword [(0x6c00+ecx)], 0x8E000008    ; 0x6c00 is where\r
+         add     ecx, 4                              ; we put the IDT\r
+\r
+         mov     eax, edi\r
+         shr     eax, 16\r
+         mov     [(0x6c00+ecx)], ax\r
+         add     ecx, 2\r
+\r
+         cmp     ecx, 0x800                          ; 256 ints\r
+         jb      .loop                               ; * 8 bytes each\r
+\r
+         pop     ecx\r
+         pop     eax\r
+         ret\r
+\r
+\r
+\r
+;--------------------------------------;\r
+;  modify IDT, set any int             ;\r
+;     in: cl  = int number             ;\r
+;         edi = int function pointer   ;\r
+;--------------------------------------;\r
+set_int:\r
+         push    eax\r
+         push    ecx\r
+\r
+         mov     al, 8                               ; 8 bytes for each int\r
+         mul     cl                                  ; cl * al = ax\r
+         movzx   ecx, ax                             ; ecx = offset in IDT (1/2 for dword list)\r
+         mov     [(idt_list+ecx/2)], edi             ; add new int to idt entry list\r
+\r
+         mov     eax, edi\r
+         mov     [(0x6c00+ecx)], ax\r
+         add     ecx, 2\r
+\r
+         mov     dword [(0x6c00+ecx)], 0x8E000008\r
+         add     ecx, 4\r
+\r
+         mov     eax, edi\r
+         shr     eax, 16\r
+         mov     [(0x6c00+ecx)], ax\r
+\r
+         pop     ecx\r
+         pop     eax\r
+         ret\r
+\r
+\r
+\r
+;------------------------------------------------;\r
+;   get int address                              ;\r
+;      in:  cl  = int number                     ;\r
+;      out: esi = address or 0 if none present   ;\r
+;------------------------------------------------;\r
+get_int:\r
+         push    eax\r
+\r
+         mov     eax, 4                              ; 4 bytes for each address\r
+         mul     cl                                  ; cl * al = ax\r
+         mov     esi, idt_list\r
+         add     esi, eax\r
+\r
+         pop     eax\r
+         ret\r
+\r
+\r
+\r
+\r
+;----------------------------------------;\r
+;   sets ints from list                  ;\r
+;      in:  esi = pointer to int list    ;\r
+;----------------------------------------;\r
+set_idt_list:\r
+         push    eax\r
+         push    edi\r
+\r
+         mov     ecx, 0\r
+     .loop:\r
+         lodsd\r
+         or      eax, eax\r
+         jz      .next\r
+         mov     edi, eax\r
+         call    set_int\r
+     .next:\r
+         inc     ecx\r
+         cmp     ecx, 0x100\r
+         jb      .loop\r
+\r
+         pop     edi\r
+         pop     eax\r
+         ret\r
+\r
+\r
+\r
+;------------------------------;\r
+;   list of idt entries.       ;\r
+;           0 = not handled    ;\r
+;------------------------------;\r
+idt_list:           dd   isr00\r
+                    dd   isr01\r
+                    dd   isr02\r
+                    dd   isr03\r
+                    dd   isr04\r
+                    dd   isr05\r
+                    dd   isr06\r
+                    dd   isr07\r
+                    dd   isr08\r
+                    dd   isr09\r
+                    dd   isr0A\r
+                    dd   isr0B\r
+                    dd   isr0C\r
+                    dd   isr0D\r
+                    dd   isr0E\r
+                    dd   0\r
+                    dd   isr10\r
+                    dd   isr11\r
+                    dd   isr12\r
+                    dd   isr13\r
+           times 12 dd   0                           ; 12 unused ints\r
+                    dd   isr20\r
+                    dd   isr21\r
+           times 16 dd   0                           ; 16 unused ints\r
+                    dd   isr32                       ; First free and BOS system interrupt.\r
+          times 205 dd   0                           ; 205 unused ints
\ No newline at end of file
diff --git a/kernel/krl_incs/isr.inc b/kernel/krl_incs/isr.inc
new file mode 100755 (executable)
index 0000000..f45357d
--- /dev/null
@@ -0,0 +1,529 @@
+;----------------------------------------------------------;\r
+; BOS 0.04                       Christoffer Bubach, 2004. ;\r
+;----------------------------------------------------------;\r
+;                                                          ;\r
+; ISR (Interrupt Service Rutines).                         ;\r
+;                                                          ;\r
+;----------------------------------------------------------;\r
+\r
+\r
+\r
+;------------------------;\r
+;  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
+\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
+\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
+\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
+\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
+\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
+\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
+\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
+\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
+\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
+\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
+\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
+\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
+\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
+\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
+\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
+\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
+\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
+\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
+\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
+\r
+\r
+\r
+;--------------------------;\r
+;   ISR 20. The timer.     ;\r
+;--------------------------;\r
+isr20:\r
+         pusha\r
+         push    gs\r
+         push    fs\r
+         push    ds\r
+         push    es\r
+\r
+         call    timer                               ; in timer.inc\r
+\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
+\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
+\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
diff --git a/kernel/krl_incs/keyboard.inc b/kernel/krl_incs/keyboard.inc
new file mode 100755 (executable)
index 0000000..282bbe2
--- /dev/null
@@ -0,0 +1,380 @@
+;----------------------------------------------------------;\r
+; BOS 0.04                  Christoffer Bubach, 2004-2005. ;\r
+;----------------------------------------------------------;\r
+;                                                          ;\r
+;     Keyboard functions. IRQ, INT's and more.             ;\r
+;                                                          ;\r
+;----------------------------------------------------------;\r
+\r
+\r
+;--------------;\r
+;  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
+\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
+\r
+\r
+\r
+;------------------------------;\r
+;  Update the keyboard LED's   ;\r
+;------------------------------;\r
+update_leds:\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
+\r
+         pop     ax\r
+         ret\r
+\r
+\r
+\r
+;------------------;\r
+;  keyboard wait   ;\r
+;------------------;\r
+kbd_wait:\r
+         jmp     $+2\r
+         in      al, 0x64\r
+         test    al, 1\r
+         jz      .ok\r
+         jmp     $+2\r
+         in      al, 0x60\r
+         jmp     kbd_wait\r
+     .ok:\r
+         test    al, 2\r
+         jnz     kbd_wait\r
+         ret\r
+\r
+\r
+\r
+;-------------------------------------------------------;\r
+;  BOS INT to get a char.                               ;\r
+;          out: ah = scan code,      al = ascii         ;\r
+;               bh = flag-byte,      bl = led-byte      ;\r
+;-------------------------------------------------------;\r
+getc:\r
+         push    esi\r
+\r
+     .no_new:\r
+         mov     al, [kbd_head]\r
+         mov     ah, [kbd_tail]\r
+         cmp     ah, 63\r
+         jne     .check2\r
+         cmp     al, 0\r
+         je      .no_new\r
+         mov     [kbd_tail], 0\r
+         jmp     .done_check\r
+     .check2:\r
+         mov     bl, ah\r
+         inc     bl\r
+         cmp     bl, al\r
+         je      .no_new\r
+         inc     [kbd_tail]\r
+     .done_check:\r
+\r
+         mov     esi, kbd_buffer\r
+         movzx   eax, [kbd_tail]\r
+         add     esi, eax\r
+         mov     ah, byte [esi]                      ; ah = scancode\r
+         movzx   esi, byte [esi]                     ; esi = scancode\r
+\r
+     ;------------------;\r
+     ;  some checks..   ;\r
+     ;------------------;\r
+         cmp     ah, 0xFA\r
+         je      .no_new\r
+         cmp     ah, 0xE0\r
+         je      .no_new\r
+         cmp     ah, 0xE1\r
+         je      .no_new\r
+         test    ah, 0x80\r
+         jnz     .no_new\r
+\r
+     ;--------------------------------;\r
+     ;  check for caps, shift & alt   ;\r
+     ;--------------------------------;\r
+         test    [kbd_status], 00000100b\r
+         jnz     .caps\r
+         test    [kbd_flags], 00000001b\r
+         jnz     .shift\r
+\r
+     ;------------------;\r
+     ;  normal keymap   ;\r
+     ;------------------;\r
+         mov     al, [esi+keymap]                    ; scancode + keymap = ascii\r
+         jmp     .end\r
+\r
+     ;--------------------;\r
+     ;  capslock keymap   ;\r
+     ;--------------------;\r
+     .caps:\r
+         test    [kbd_flags], 00000001b\r
+         jnz     .caps_and_shift\r
+\r
+         mov     al, [esi+keymap_caps]\r
+         jmp     .end\r
+\r
+     ;--------------------------;\r
+     ;  caps and shift keymap   ;\r
+     ;--------------------------;\r
+     .caps_and_shift:\r
+         mov     al, [esi+keymap_caps_shift]\r
+         jmp     .end\r
+\r
+     ;-----------------;\r
+     ;  shift keymap   ;\r
+     ;-----------------;\r
+     .shift:\r
+         mov     al, [esi+keymap_shift]\r
+         jmp     .end\r
+\r
+     ;---------------------------;\r
+     ;  set registers and exit   ;\r
+     ;---------------------------;\r
+     .end:\r
+         mov     bl, [kbd_status]\r
+         mov     bh, [kbd_flags]\r
+\r
+         pop     esi\r
+         ret\r
+\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
diff --git a/kernel/krl_incs/keymap.inc b/kernel/krl_incs/keymap.inc
new file mode 100755 (executable)
index 0000000..ccd7b4f
--- /dev/null
@@ -0,0 +1,85 @@
+;----------------------------------------------------------;\r
+; BOS 0.04                       Christoffer Bubach, 2004. ;\r
+;----------------------------------------------------------;\r
+;   Keymap.                                                ;\r
+; Only USA-type are supported so far. (poor åäö...)        ;\r
+;                                                          ;\r
+;----------------------------------------------------------;\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
+\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
+\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
+\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
+\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
diff --git a/kernel/krl_incs/mario.inc b/kernel/krl_incs/mario.inc
new file mode 100755 (executable)
index 0000000..e9a48b8
--- /dev/null
@@ -0,0 +1,119 @@
+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
+\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
+\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
+\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
+\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
+\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
diff --git a/kernel/krl_incs/mem.inc b/kernel/krl_incs/mem.inc
new file mode 100755 (executable)
index 0000000..534387c
--- /dev/null
@@ -0,0 +1,388 @@
+;----------------------------------------------------------;\r
+; BOS kernel                Christoffer Bubach, 2003-2005. ;\r
+;----------------------------------------------------------;\r
+;                                                          ;\r
+;           functions to allocate/free mem.                ;\r
+;                                                          ;\r
+;----------------------------------------------------------;\r
+\r
+;----------------;\r
+;   variables    ;\r
+;----------------;\r
+      first_free     dd   0\r
+      prev_pointer   dd   0\r
+      size          dd   0\r
+      next_pointer   dd   0\r
+\r
+\r
+;------------------------------------------------------;\r
+;   init mem                                           ;\r
+;                   in: ebx = first free memory        ;\r
+;                       ecx = total memory size        ;\r
+;------------------------------------------------------;\r
+init_mem:\r
+         push    ecx\r
+\r
+         mov     [first_free], ebx\r
+         sub     ecx, ebx\r
+         mov     [size], ecx\r
+         mov     [prev_pointer], 0\r
+         mov     [next_pointer], 0\r
+         mov     ecx, [prev_pointer]\r
+         mov     [ebx], ecx\r
+         mov     ecx, [size]\r
+         mov     [ebx+4], ecx\r
+         mov     ecx, [next_pointer]\r
+         mov     [ebx+8], ecx\r
+\r
+         pop     ecx\r
+         ret\r
+\r
+\r
+\r
+;------------------------------------------------------;\r
+;   allocate memory                                    ;\r
+;                    in:  ebx = wanted size in bytes   ;\r
+;                    out: eax = 0 if failed            ;\r
+;                         ebx = pointer to memory      ;\r
+;------------------------------------------------------;\r
+allocate_mem:\r
+         push    ecx\r
+         push    edx\r
+\r
+         mov     eax, [first_free]\r
+\r
+     .loop:\r
+         mov     ecx, [eax]\r
+         mov     [prev_pointer], ecx\r
+\r
+         mov     ecx, [eax+4]\r
+         mov     [size], ecx\r
+\r
+         mov     ecx, [eax+8]\r
+         mov     [next_pointer], ecx\r
+\r
+         cmp     [size], ebx\r
+         jae     .found\r
+         cmp     [next_pointer], 0\r
+         je      .error\r
+         mov     eax, [next_pointer]\r
+         jmp     .loop\r
+\r
+     .error:\r
+         xor     eax, eax\r
+         jmp     .end\r
+\r
+     .found:\r
+         mov     ecx, [size]\r
+         sub     ecx, ebx\r
+         jz      .equal\r
+\r
+         cmp     [next_pointer], 0\r
+         jne     .next_exists\r
+         cmp     [prev_pointer], 0\r
+         jne     .prev_but_no_next\r
+\r
+\r
+     ;----------------------------------------------;\r
+     ; no other block exists; add new free block    ;\r
+     ; with the reminding space as free, and move   ;\r
+     ; "first free" to that block..                 ;\r
+     ;----------------------------------------------;\r
+         mov     ecx, eax                            ; move address to ecx and\r
+         add     ecx, ebx                            ; add size. ecx=end requested\r
+         mov     dword [ecx], 0                      ; set new header's prev to 0\r
+         mov     edx, [size]\r
+         sub     edx, ebx                            ; remaining space in edx\r
+         mov     [ecx+4], edx                        ; save it to new header\r
+         mov     dword [ecx+8], 0                    ; no next pointer..\r
+\r
+         mov     [first_free], ecx\r
+         mov     ebx, eax                            ; eax is unchanged from loop\r
+         jmp     .end\r
+\r
+     ;----------------------------------------------;\r
+     ; no next block exists, make a new header at   ;\r
+     ; the end of the requested size with the       ;\r
+     ; reminder of the free space, and update the   ;\r
+     ; prev header's next pointer..                 ;\r
+     ;----------------------------------------------;\r
+     .prev_but_no_next:\r
+         mov     ecx, eax                            ; move address to ecx and\r
+         add     ecx, ebx                            ; add size. ecx=end requested\r
+         mov     edx, [prev_pointer]                 ; set prev for new header\r
+         mov     [ecx], edx                          ; set new header's prev to 0\r
+         mov     edx, [size]\r
+         sub     edx, ebx                            ; remaining space in edx\r
+         mov     [ecx+4], edx                        ; save it to new header\r
+         mov     dword [ecx+8], 0                    ; no next pointer..\r
+\r
+         mov     [prev_pointer+8], ecx\r
+         mov     ebx, eax                            ; eax is unchanged from loop\r
+         jmp     .end\r
+\r
+\r
+     ;----------------------------------------------;\r
+     ; both next and previous blocks exists, make a ;\r
+     ; new header at the end of the requested size  ;\r
+     ; with the reminder of the free space, move    ;\r
+     ; data from next block to the new one but add  ;\r
+     ; size so it gets right, then update all prev/ ;\r
+     ; next pointers for total 3 blocks.. puh..     ;\r
+     ;----------------------------------------------;\r
+     .next_exists:\r
+         cmp     [prev_pointer], 0\r
+         je      .next_but_no_prev\r
+\r
+         mov     ecx, eax                            ; move address to ecx and\r
+         add     ecx, ebx                            ; add size. ecx=end requested\r
+         mov     edx, [prev_pointer]                 ; set prev for new header\r
+         mov     [ecx], edx                          ; set new header's prev\r
+         mov     edx, [size]\r
+         sub     edx, ebx\r
+         mov     ebx, [next_pointer+4]\r
+         add     edx, ebx                            ; remaining space in edx\r
+         mov     [ecx+4], edx                        ; save it to new header\r
+         mov     edx, [next_pointer]                 ; address to next block\r
+         cmp     dword [edx], 0\r
+         je      .no_next_next\r
+         mov     dword [edx], ecx                    ; update next-next's prev..\r
+         mov     dword [ecx+8], edx                  ; address to next pointer.\r
+\r
+         mov     [prev_pointer+8], ecx\r
+         mov     ebx, eax                            ; eax is unchanged from loop\r
+         jmp     .end\r
+     .no_next_next:\r
+         mov     dword [edx], 0\r
+         mov     dword [ecx+8], 0\r
+         mov     [prev_pointer+8], ecx\r
+         mov     ebx, eax                            ; eax is unchanged from loop\r
+         jmp     .end\r
+\r
+\r
+     ;----------------------------------------------;\r
+     ; we allocated the first free block, do the    ;\r
+     ; same as above, except ignore the prev block  ;\r
+     ; part, and move the "first free".             ;\r
+     ;----------------------------------------------;\r
+     .next_but_no_prev:\r
+         mov     ecx, eax                            ; move address to ecx and\r
+         add     ecx, ebx                            ; add size. ecx=end requested\r
+         mov     dword [ecx], 0                      ; set new header's prev to 0\r
+         mov     edx, [size]\r
+         sub     edx, ebx\r
+         mov     ebx, [next_pointer+4]\r
+         add     edx, ebx                            ; remaining space in edx\r
+         mov     [ecx+4], edx                        ; save it to new header\r
+         mov     edx, [next_pointer]                 ; address to next block\r
+         cmp     dword [edx], 0\r
+         je      .no_next_next2\r
+         mov     dword [edx], ecx                    ; update next-next's prev..\r
+         mov     dword [ecx+8], edx                  ; address to next pointer.\r
+\r
+         mov     [first_free], ecx                   ; zero and update first free.\r
+         mov     ebx, eax                            ; eax is unchanged from loop\r
+         jmp     .end\r
+     .no_next_next2:\r
+         mov     dword [edx], 0\r
+         mov     ecx, [ecx+8]\r
+         mov     dword [ecx], 0\r
+         mov     [prev_pointer+8], ecx\r
+         mov     ebx, eax                            ; eax is unchanged from loop\r
+         jmp     .end\r
+\r
+\r
+     ;-----------------------------------------;\r
+     ;   requested == size                     ;\r
+     ;   I prefered coding this one.. ;)       ;\r
+     ;-----------------------------------------;\r
+     .equal:\r
+         cmp     [next_pointer], 0\r
+         jne     .next_exists2\r
+         cmp     [prev_pointer], 0\r
+         jne     .prev_but_no_next2\r
+         mov     [first_free], 0\r
+         mov     ebx, eax                            ; eax is unchanged from loop\r
+         jmp     .end\r
+\r
+     .prev_but_no_next2:\r
+         mov     dword [prev_pointer+8], 0\r
+         mov     ebx, eax                            ; eax is unchanged from loop\r
+         jmp     .end\r
+\r
+     .next_exists2:\r
+         cmp     [prev_pointer], 0\r
+         je      .next_but_no_prev2\r
+         mov     ecx, [prev_pointer]                 ; update prev and next's\r
+         mov     edx, [next_pointer]                 ; headers to bypass this\r
+         mov     [ecx+8], edx                        ; chunk.\r
+         mov     [edx], ecx\r
+         mov     ebx, eax                            ; eax is unchanged from loop\r
+         jmp     .end\r
+\r
+     .next_but_no_prev2:\r
+         mov     ecx, [eax+8]                        ; get address of next header\r
+         mov     dword [ecx], 0                      ; set prev in next header to\r
+         mov     [first_free], ecx                   ; zero and update first free.\r
+         mov     ebx, eax                            ; eax is unchanged from loop\r
+\r
+     .end:\r
+         pop     edx\r
+         pop     ecx\r
+         ret\r
+\r
+\r
+\r
+\r
+;------------------------------------------------------;\r
+;    free memory                                       ;\r
+;                  in:  ebx = pointer to mem           ;\r
+;                       ecx = size in bytes            ;\r
+;------------------------------------------------------;\r
+free_mem:\r
+         push    eax\r
+         push    ebx\r
+         push    ecx\r
+         push    edx\r
+\r
+         cmp     ebx, [first_free]\r
+         jb      .new_first_free\r
+         cmp     [first_free], 0\r
+         je      .new_first_free\r
+\r
+     ;-----------------------------------------------------------;\r
+     ; the block we want to free is somewhere in between         ;\r
+     ; two other free blocks or after the last free block.       ;\r
+     ; search for the "ebx"-address, so we know where the new    ;\r
+     ; prev/next pointers are, and then can check if we should   ;\r
+     ; merge blocks..                                            ;\r
+     ;-----------------------------------------------------------;\r
+         mov     eax, [first_free]                   ; "current" free block\r
+         mov     edx, [eax+8]                        ; next free block\r
+\r
+     .find_pos_loop:\r
+         cmp     edx, 0                              ; check if the "next"\r
+         je      .found_end_of_ram                   ; free exists..\r
+\r
+         cmp     ebx, edx                            ; is ebx "below" edx?\r
+         jb      .found_between                      ; found ebx in between\r
+\r
+         mov     eax, edx                            ; update pointers for\r
+         mov     edx, [eax+8]                        ; another loop.\r
+         jmp     .find_pos_loop\r
+\r
+     ;------------------------------------------;\r
+     ;  the block is between two other blocks   ;\r
+     ;------------------------------------------;\r
+     .found_between:\r
+         mov     [ebx], eax                          ; create header\r
+         mov     [ebx+4], ecx\r
+         mov     [ebx+8], edx\r
+\r
+         mov     [eax+8], ebx                        ; update prev header\r
+         mov     [edx], ebx                          ; update next header\r
+\r
+         ; now check if we can merge blocks....\r
+         add     ecx, ebx\r
+         cmp     edx, ecx\r
+         jne     .merge_only_first\r
+         push    eax\r
+         add     eax, [eax+4]\r
+         cmp     ebx, eax\r
+         pop     eax\r
+         jne     .merge_only_last\r
+\r
+         ; we can merge with both prev & next\r
+         mov     ecx, [ebx+4]                        ; get size from "current"\r
+         add     [eax+4], ecx                        ; and add it to "prev".\r
+         mov     ecx, [edx+4]                        ; get size from "next"\r
+         add     [eax+4], ecx                        ; and add it to "prev".\r
+         mov     ecx, [edx+8]                        ; get the new next\r
+         mov     [eax+8], ecx                        ; pointer, and store it.\r
+         cmp     ecx, 0\r
+         je      .end\r
+         mov     [ecx], eax\r
+         jmp     .end\r
+\r
+     .merge_only_first:\r
+         cmp     ebx, eax\r
+         jne     .end\r
+         mov     ecx, [ebx+4]                        ; get size from "current"\r
+         add     [eax+4], ecx                        ; and add it to "prev".\r
+         mov     [edx], eax                          ; update prev and next\r
+         mov     [eax+8], edx                        ; pointers for the two..\r
+         jmp     .end\r
+\r
+     .merge_only_last:\r
+         cmp     edx, ecx\r
+         jne     .end\r
+         mov     ecx, [edx+4]\r
+         add     [ebx+4], ecx\r
+         mov     ecx, [edx+8]\r
+         mov     [ebx+8], ecx\r
+         cmp     ecx, 0\r
+         je      .end\r
+         mov     [ecx], ebx\r
+         jmp     .end\r
+\r
+     ;----------------------------------------------;\r
+     ;  the block is after all existing free ones   ;\r
+     ;----------------------------------------------;\r
+     .found_end_of_ram:\r
+         mov     [ebx], eax                          ; create header\r
+         mov     [ebx+4], ecx\r
+         mov     [ebx+8], edx\r
+\r
+         mov     [eax+8], ebx                        ; update prev header\r
+\r
+         ; now check if we can merge the blocks....\r
+         mov     ecx, eax\r
+         add     ecx, [eax+4]\r
+         cmp     ebx, ecx\r
+         jne     .end\r
+         mov     ecx, [ebx+4]\r
+         add     [eax+4], ecx\r
+         mov     ecx, [ebx+8]\r
+         mov     [eax+8], ecx\r
+         jmp     .end\r
+\r
+     ;--------------------------------------------;\r
+     ;  the block is before any other free ones   ;\r
+     ;--------------------------------------------;\r
+     .new_first_free:\r
+         mov     dword [ebx], 0\r
+         mov     [ebx+4], ecx                        ; create the\r
+         mov     edx, [first_free]                   ; new header\r
+         mov     [ebx+8], edx\r
+\r
+         mov     edx, ebx                            ; check if the\r
+         add     edx, [ebx+4]                        ; first_free matches\r
+         cmp     edx, [first_free]                   ; current pos + size?\r
+         je      .merge_first_free                   ; if so, merge the two\r
+\r
+         cmp     [first_free], 0                     ; else check if\r
+         je      .cont1                              ; first_free exists\r
+         mov     edx, [ebx+8]                        ; if it does, update\r
+         mov     [edx], ebx                          ; it's prev pointer.\r
+     .cont1:\r
+         mov     [first_free], ebx                   ; else/and set new\r
+         jmp     .end                                ; first free and quit\r
+\r
+     .merge_first_free:                              ; merge the two first\r
+         mov     edx, [ebx+8]                        ; add the size of the\r
+         mov     ecx, [edx+4]                        ; second block to the\r
+         add     [ebx+4], ecx                        ; new one.\r
+         mov     ecx, [edx+8]                        ; get the next pointer\r
+         mov     [ebx+8], ecx                        ; from the old block,\r
+         cmp     ecx, 0\r
+         je      .cont2\r
+         mov     [ecx], ebx                          ; update this + next..\r
+     .cont2:\r
+         mov     [first_free], ebx                   ; update first_free\r
+\r
+     .end:\r
+         pop     edx\r
+         pop     ecx\r
+         pop     ebx\r
+         pop     eax\r
+         ret
\ No newline at end of file
diff --git a/kernel/krl_incs/pc_speaker.inc b/kernel/krl_incs/pc_speaker.inc
new file mode 100755 (executable)
index 0000000..667f3ee
--- /dev/null
@@ -0,0 +1,56 @@
+;----------------------------------------------------------;\r
+; BOS kernel                Christoffer Bubach, 2004-2005. ;\r
+;----------------------------------------------------------;\r
+;                                                          ;\r
+;     Internal speaker functions...                        ;\r
+;                                                          ;\r
+;----------------------------------------------------------;\r
+\r
+;-----------------------;\r
+;  turn on PC speaker   ;\r
+;    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
+\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
+\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
diff --git a/kernel/krl_incs/pic.inc b/kernel/krl_incs/pic.inc
new file mode 100755 (executable)
index 0000000..6076213
--- /dev/null
@@ -0,0 +1,135 @@
+;----------------------------------------------------------;\r
+; BOS 0.04                       Christoffer Bubach, 2004. ;\r
+;----------------------------------------------------------;\r
+;                                                          ;\r
+;     PIC/IRQ handling.                                    ;\r
+;                                                          ;\r
+;----------------------------------------------------------;\r
+\r
+\r
+;-------------------------------------------;\r
+;  remap PICs to:  cl = pic1  ch = pic2     ;\r
+;-------------------------------------------;\r
+remap_pics:\r
+         push    ax\r
+         push    dx\r
+\r
+         mov     al, 0x11                            ; IWC1\r
+         out     0x20, al\r
+         out     0xA0, al\r
+\r
+         mov     al, cl                              ; IWC2\r
+         out     0x21, al\r
+         mov     al, ch\r
+         out     0xA1, al\r
+\r
+         mov     al, 0x04                            ; IWC3\r
+         out     0x21, al\r
+         mov     al, 0x02\r
+         out     0xA1, al\r
+\r
+         mov     al, 0x01                            ; IWC4\r
+         out     0x21, al\r
+         out     0xA1, al\r
+\r
+         pop     dx\r
+         pop     ax\r
+         ret\r
+\r
+\r
+;----------------------;\r
+;  disable all IRQs.   ;\r
+;----------------------;\r
+disable_irqs:\r
+         push    ax\r
+\r
+         mov     al, 0xFF\r
+         out     0x21, al\r
+         out     0xA1, al\r
+\r
+         pop     ax\r
+         ret\r
+\r
+\r
+;---------------------;\r
+;  enable all IRQs.   ;\r
+;---------------------;\r
+enable_irqs:\r
+         push    ax\r
+\r
+         mov     al, 0x00\r
+         out     0x21, al\r
+         out     0xA1, al\r
+\r
+         pop     ax\r
+         ret\r
+\r
+\r
+;-----------------------------;\r
+;  enable an IRQ.  cl = irq   ;\r
+;-----------------------------;\r
+enable_irq:\r
+         push    ax\r
+         push    cx\r
+\r
+         cmp     cl, 8\r
+         jb      .master\r
+\r
+         sub     cl, 8\r
+         mov     ah, 1\r
+         shl     ah, cl\r
+         xor     ah, 0xFF\r
+\r
+         in      al, 0xA1\r
+         and     al, ah\r
+         out     0xA1, al\r
+\r
+         pop     cx\r
+         pop     ax\r
+         ret\r
+  .master:\r
+         mov     ah, 1\r
+         shl     ah, cl\r
+         xor     ah, 0xFF\r
+\r
+         in      al, 0x21\r
+         and     al, ah\r
+         out     0x21, al\r
+\r
+         pop     cx\r
+         pop     ax\r
+         ret\r
+\r
+\r
+;------------------------------;\r
+;  disable an IRQ.  cl = irq   ;\r
+;------------------------------;\r
+disable_irq:\r
+         push    ax\r
+         push    cx\r
+\r
+         cmp     cl, 8\r
+         jb      .master\r
+\r
+         sub     cl, 8\r
+         mov     ah, 1\r
+         shl     ah, cl\r
+\r
+         in      al, 0xA1\r
+         or      al, ah\r
+         out     0xA1, al\r
+\r
+         pop     cx\r
+         pop     ax\r
+         ret\r
+  .master:\r
+         mov     ah, 1\r
+         shl     ah, cl\r
+\r
+         in      al, 0x21\r
+         or      al, ah\r
+         out     0x21, al\r
+\r
+         pop     cx\r
+         pop     ax\r
+         ret
\ No newline at end of file
diff --git a/kernel/krl_incs/rmode_int.inc b/kernel/krl_incs/rmode_int.inc
new file mode 100755 (executable)
index 0000000..bd2dbe2
--- /dev/null
@@ -0,0 +1,107 @@
+;----------------------------------------------------------;\r
+; BOS kernel                Christoffer Bubach, 2003-2005. ;\r
+;----------------------------------------------------------;\r
+;                                                          ;\r
+;        Goes back to realmode to do an INT.               ;\r
+;                                                          ;\r
+;----------------------------------------------------------;\r
+\r
+\r
+rmode_int:\r
+         pushad\r
+         push    eax\r
+         shr     eax, 16                             ; move high bits to ax\r
+         mov     word [realmode_ax], ax              ; save new ax value\r
+         pop     eax                                 ; restore\r
+\r
+         push    ebx\r
+         shr     ebx, 16                             ; move high bits to bx\r
+         mov     byte [int_number], bl               ; save int number to call\r
+         pop     ebx\r
+\r
+         mov     byte [realmode_error], 0            ; all variables is in the\r
+         mov     word [realmode_bx], bx              ; realmode/variables.inc file\r
+         mov     word [realmode_cx], cx\r
+         mov     word [realmode_dx], dx\r
+         call    disable_irqs\r
+         jmp     pword 0x18:do_16pmode-0x10000       ; must substract 0x10000 from\r
+                                                     ; data addresses becasue of\r
+                                                     ; fasm strict "org" behavior\r
+use16\r
+do_16pmode:\r
+         mov     ax, 0x20\r
+         mov     ds, ax\r
+         mov     es, ax\r
+         mov     fs, ax\r
+         mov     gs, ax\r
+         mov     ss, ax\r
+\r
+         cli\r
+         mov     eax, cr0\r
+         and     al, 0xFE\r
+         mov     cr0, eax\r
+\r
+         jmp     0x1000:(do_realm-0x10000)\r
+\r
+do_realm:\r
+         mov     ax, cs\r
+         mov     ds, ax\r
+\r
+         xor     ax, ax\r
+         mov     es, ax\r
+         mov     fs, ax\r
+         mov     gs, ax\r
+         mov     ss, ax\r
+\r
+         lidt    [ridtr - 0x10000]                   ; realmode/variables.inc\r
+         sti\r
+\r
+         mov     ax, word [realmode_ax - 0x10000]\r
+         mov     bx, word [realmode_bx - 0x10000]\r
+         mov     cx, word [realmode_cx - 0x10000]\r
+         mov     dx, word [realmode_dx - 0x10000]\r
+\r
+         push    ax                                  ; this is some cool shit.. ;)\r
+         mov     al, [int_number - 0x10000]          ; interrupt to preform\r
+         mov     [$+5 - 0x10000], al                 ; move it to right pos.\r
+         pop     ax\r
+         db      0xCD                                ; opcode for int.\r
+         db      0x00                                ; move int_number here\r
+\r
+         jnc     .no_error\r
+         mov     byte [realmode_error - 0x10000], 1\r
+\r
+     .no_error:\r
+         mov     word [realmode_ax - 0x10000], ax\r
+         mov     word [realmode_bx - 0x10000], bx\r
+         mov     word [realmode_cx - 0x10000], cx\r
+         mov     word [realmode_dx - 0x10000], dx\r
+\r
+         cli\r
+\r
+         lgdt    [gdtr - 0x10000]\r
+         lidt    [idtr - 0x10000]\r
+         mov     eax, cr0\r
+         or      al, 1\r
+         mov     cr0, eax\r
+\r
+         jmp     pword 0x08:gobackto_pm\r
+\r
+\r
+use32\r
+gobackto_pm:\r
+         mov     ax, 0x10                            ; refresh all segment registers\r
+         mov     ds, ax\r
+         mov     es, ax\r
+         mov     fs, ax\r
+         mov     gs, ax\r
+         mov     ss, ax\r
+         call    enable_irqs\r
+         sti\r
+         popad\r
+         clc                                         ; clear carry.\r
+         cmp     [realmode_error], 1                 ; if error, then\r
+         jne     .end\r
+         stc                                         ; set carry.\r
+     .end:\r
+         ret
\ No newline at end of file
diff --git a/kernel/krl_incs/shell.inc b/kernel/krl_incs/shell.inc
new file mode 100755 (executable)
index 0000000..25e7686
--- /dev/null
@@ -0,0 +1,190 @@
+;----------------------------------------------------------;\r
+; BOS 0.04                  Christoffer Bubach, 2004-2005. ;\r
+;----------------------------------------------------------;\r
+;                                                          ;\r
+;     Basic shell.                                         ;\r
+;                                                          ;\r
+;----------------------------------------------------------;\r
+\r
+\r
+;--------------;\r
+;  Variabels   ;\r
+;--------------;\r
+\r
+prompt                 db   'BOS kernel>', 0\r
+cmd_buffer: times 255  db   0                        ; 255 char command buffer\r
+\r
+\r
+\r
+;----------------------------------------------;\r
+;  print the prompt for the first time.. :-)   ;\r
+;----------------------------------------------;\r
+init_cmd:\r
+         mov     byte [kbd_status], 0                ; reset LEDs to 0..\r
+         call    update_leds\r
+\r
+         mov     esi, prompt\r
+         mov     bl, 0x0E\r
+         call    print\r
+\r
+         mov     edi, cmd_buffer\r
+\r
+         ret\r
+\r
+\r
+\r
+;-------------------------------;\r
+;  Main shell function & loop   ;\r
+;-------------------------------;\r
+shell:\r
+         mov     cx, 0                               ; max 254 chars in command\r
+     .loop:                                          ; no. 255 is always a 0\r
+\r
+         push    cx                                  ; better be sure it´s safe..\r
+         push    edi\r
+\r
+         call    getc                                ; keyboard.inc\r
+\r
+         pop     edi\r
+         pop     cx\r
+\r
+         cmp     ah, 28                              ; enter\r
+         je      .enter\r
+\r
+         cmp     ah, 14                              ; backspace\r
+         je      .backspace\r
+\r
+         cmp     al, 0                               ; no normal key\r
+         je      .loop                               ; exceptions above..\r
+\r
+         cmp     cx, 254\r
+         jae     .loop\r
+\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
+\r
+         jmp     .loop\r
+\r
+     .enter:\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
+\r
+\r
+\r
+;---------------------------------;\r
+;    check for valid cmd          ;\r
+;---------------------------------;\r
+chk_cmd:\r
+\r
+         mov     esi, commands\r
+         mov     edi, cmd_buffer\r
+         mov     ebp, 0                              ; command-table counter\r
+\r
+     ;------------------------------------------;\r
+     ;   big loop, for each command in table    ;\r
+     ;------------------------------------------;\r
+     .l1:\r
+         mov     ecx, 0                              ; char counter\r
+\r
+         cmp     byte [esi], 0xFF\r
+         je      .no_valid_cmd\r
+\r
+     ;------------------------------------------;\r
+     ;  smaller loop for each char in command   ;\r
+     ;------------------------------------------;\r
+     .l2:\r
+         cmp     byte [edi], ' '                     ; space or zero\r
+         je      .l_chk                              ; both indicate\r
+         cmp     byte [edi], 0                       ; "end of command"\r
+         je      .l_chk\r
+         jmp     .l_cont\r
+\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
+\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
diff --git a/kernel/krl_incs/sys_ints.inc b/kernel/krl_incs/sys_ints.inc
new file mode 100755 (executable)
index 0000000..3f57ddd
--- /dev/null
@@ -0,0 +1,112 @@
+;----------------------------------------------------------;\r
+; BOS 0.04                  Christoffer Bubach, 2004-2005. ;\r
+;----------------------------------------------------------;\r
+;                                                          ;\r
+;     System interrupts..                                  ;\r
+;                                                          ;\r
+;----------------------------------------------------------;\r
+\r
+  ;----------------------------------------------------;\r
+  ; TODO:   A lot, when user programs can be runned..  ;\r
+  ;----------------------------------------------------;\r
+\r
+;--------------------------;\r
+;  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
+\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
+\r
+         call    getc\r
+\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
+\r
+         push    bx\r
+         push    cx\r
+         push    dx\r
+\r
+         call    getcursor\r
+         mov     cx, bx\r
+\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
+\r
+         mov     bx, cx\r
+         call    setcursor\r
+\r
+         pop     dx\r
+         pop     cx\r
+         pop     bx\r
+\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
+\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
+\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
+\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
+\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
+\r
+         pop     dx\r
+         pop     cx\r
+         pop     bx\r
+\r
+     .end:\r
+         ret\r
diff --git a/kernel/krl_incs/text.inc b/kernel/krl_incs/text.inc
new file mode 100755 (executable)
index 0000000..847acfc
--- /dev/null
@@ -0,0 +1,411 @@
+;----------------------------------------------------------;\r
+; BOS kernel                Christoffer Bubach, 2003-2005. ;\r
+;----------------------------------------------------------;\r
+;                                                          ;\r
+;    Textmode screen functions.                            ;\r
+;                                                          ;\r
+;----------------------------------------------------------;\r
+\r
+;-----------------;\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
+\r
+\r
+;--------------------------------------;\r
+;  change cursor attribs               ;\r
+;            in: bx = cursor attribs   ;\r
+;--------------------------------------;\r
+changecursor:\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
+\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
+\r
+         movzx   cx, [screen_rows]\r
+     .loop:\r
+         call    _scroll_up\r
+         loop    .loop\r
+\r
+         mov     bx, 0\r
+         call    setcursor\r
+\r
+         pop     cx\r
+         pop     bx\r
+         ret\r
+\r
+\r
+;-----------------------------------;\r
+;  get the cursor pos               ;\r
+;            out: bh = x   bl = y   ;\r
+;-----------------------------------;\r
+getcursorxy:\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
+\r
+         pop     ax\r
+         ret\r
+\r
+\r
+;-------------------------------;\r
+;  get the cursor pos           ;\r
+;            out: bx = offset   ;\r
+;-------------------------------;\r
+getcursor:\r
+         push    ax\r
+         push    dx\r
+\r
+         mov     dx, 0x3D4\r
+         mov     al, 0x0E\r
+         out     dx, al\r
+         inc     dx\r
+         in      al, dx\r
+         mov     bh, al\r
+         mov     al, 0x0F\r
+         dec     dx\r
+         out     dx, al\r
+         inc     dx\r
+         in      al, dx\r
+         mov     bl, al\r
+\r
+         pop     dx\r
+         pop     ax\r
+         ret\r
+\r
+\r
+;------------------------------;\r
+;  set the cursor to:          ;\r
+;            bh = x   bl = y   ;\r
+;------------------------------;\r
+setcursorxy:\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
+\r
+         pop     bx\r
+         pop     ax\r
+         ret\r
+\r
+\r
+;--------------------------;\r
+;  set the cursor to:      ;\r
+;            bx = offset   ;\r
+;--------------------------;\r
+setcursor:\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
+\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
+\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
+\r
+     .cont:\r
+         inc     bx\r
+         call    setcursor\r
+\r
+     .end:\r
+         pop     bx\r
+         pop     ax\r
+         ret\r
+\r
+\r
+;-----------------------;\r
+;  cursor position -1   ;\r
+;-----------------------;\r
+deccursor:\r
+         push    bx\r
+\r
+         call    getcursor\r
+         cmp     bx, 0\r
+         je      .end\r
+\r
+         dec     bx\r
+         call    setcursor\r
+\r
+     .end:\r
+         pop     bx\r
+         ret\r
+\r
+\r
+\r
+;---------------------------------------;\r
+;  backspace - delete last typed char   ;\r
+;---------------------------------------;\r
+backspace:\r
+         push    bx\r
+\r
+         call    getcursor\r
+         cmp     bx, 0\r
+         je      .end\r
+\r
+         call    deccursor\r
+\r
+         mov     bh, 0x07\r
+         mov     bl, 0\r
+         call    print_char\r
+\r
+         call    deccursor\r
+\r
+     .end:\r
+         pop     bx\r
+         ret\r
+\r
+\r
+\r
+;-----------------------------------------;\r
+;  print char                             ;\r
+;            in: bl = char, bh = attrib   ;\r
+;-----------------------------------------;\r
+print_char:\r
+         push    eax\r
+         push    bx\r
+\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
+\r
+         push    bx\r
+         call    getcursor\r
+         movzx   eax, bx\r
+         pop     bx\r
+\r
+         mov     [es:(eax*2 + 0xB8000)], bx\r
+\r
+         call    inccursor\r
+     .done:\r
+         pop     bx\r
+         pop     eax\r
+         ret\r
+\r
+\r
+\r
+;------------------------------------------;\r
+;  print 32-bit hex value                  ;\r
+;            in: ebx = value, cl = color   ;\r
+;------------------------------------------;\r
+print_hex32:\r
+         push    eax\r
+         push    ebx\r
+         push    ecx\r
+         push    edx\r
+\r
+         mov     eax, ebx                            ; quick & dirty fix so\r
+         mov     bh, cl                              ; input reg != eax\r
+         mov     ecx, 8\r
+\r
+     .print_it:\r
+         rol     eax, 4\r
+         movzx   edx, al\r
+         and     edx, 0x0F\r
+         or      edx, 0x30\r
+         cmp     edx, 0x39\r
+         jna     .cont\r
+         add     edx, 7\r
+     .cont:\r
+         mov     bl, dl\r
+         call    print_char\r
+         loop    .print_it\r
+\r
+         pop     edx\r
+         pop     ecx\r
+         pop     ebx\r
+         pop     eax\r
+         ret\r
+\r
+\r
+\r
+;-------------------------------------------------;\r
+;  display a asciiz message on the screen         ;\r
+;            in: esi = message, bl = color        ;\r
+;-------------------------------------------------;\r
+print:\r
+         push    eax\r
+         push    bx\r
+\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
+\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
+\r
+     .done:\r
+         mov     bx, [cursor_pos]\r
+         call    setcursor                           ; update cursor on screen\r
+\r
+         pop     bx\r
+         pop     eax\r
+         ret\r
+\r
+\r
+\r
+;-----------------------------;\r
+;  make a new line (CR, LF)   ;\r
+;-----------------------------;\r
+new_line:\r
+         push    bx\r
+\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
+\r
+     .newline:\r
+         call    getcursorxy\r
+         mov     bh, 0\r
+         inc     bl\r
+         call    setcursorxy\r
+\r
+     .done:\r
+         pop     bx\r
+         ret\r
+\r
+\r
+\r
+;----------------;\r
+;  scrolling..   ;\r
+;----------------;\r
+scroll_up:\r
+         call    _scroll_up\r
+\r
+     .mv_curs:\r
+         push    ax\r
+         push    bx\r
+\r
+         xor     ax, ax\r
+         mov     al, [screen_rows]                   ; mov bx, 80*24\r
+         mov     bl, [screen_cols]\r
+         dec     al\r
+         mul     bl\r
+         mov     bx, ax\r
+         call    setcursor\r
+\r
+         pop     bx\r
+         pop     ax\r
+         ret\r
+\r
+     _scroll_up:\r
+         push    eax\r
+         push    ecx\r
+         push    edi\r
+         push    esi\r
+\r
+         mov     edi, 0xB8000\r
+         movzx   esi, [screen_cols]\r
+         shl     esi, 1                              ; 80*2 = 160\r
+         mov     cl, [screen_rows]\r
+         dec     cl\r
+         mov     eax, esi\r
+         mul     cl\r
+         shr     ax, 2                               ; ax  = (160*24)/4\r
+         movzx   ecx, ax                             ; ecx =   - || -\r
+         add     esi, 0xB8000                        ; esi = 0xB8000+160\r
+\r
+         rep     movsd\r
+\r
+         mov     cl, [screen_cols]\r
+         shl     cl, 1                               ; 80*2 = 160\r
+         mov     al, [screen_rows]\r
+         dec     al                                  ; al = 24\r
+         mul     cl\r
+         movzx   edi, ax\r
+         add     edi, 0xB8000                        ; edi = 0xB8000+160*24\r
+         movzx   ecx, [screen_cols]\r
+         shr     ecx, 1                              ; 80/2\r
+         mov     eax, 0x07000700                     ; fill with zeros\r
+         rep     stosd\r
+\r
+         pop     esi\r
+         pop     edi\r
+         pop     ecx\r
+         pop     eax\r
+         ret
\ No newline at end of file
diff --git a/kernel/krl_incs/time_date.inc b/kernel/krl_incs/time_date.inc
new file mode 100755 (executable)
index 0000000..ba211ac
--- /dev/null
@@ -0,0 +1,129 @@
+;----------------------------------------------------------;\r
+; BOS kernel                     Christoffer Bubach, 2005. ;\r
+;----------------------------------------------------------;\r
+;                                                          ;\r
+;        functions to print date and time.                 ;\r
+;                                                          ;\r
+;----------------------------------------------------------;\r
+\r
+;------------------;\r
+;    variables     ;\r
+;------------------;\r
+     msg_time       db   13,10,'   Time: ',0\r
+     msg_date       db   13,10,'   Date: ',0\r
+\r
+\r
+;------------------------------------------------------;\r
+;   date, prints current date and goes back to the     ;\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
+\r
+\r
+;------------------------------------------------------;\r
+;   time, prints current time and goes back to the     ;\r
+;   prompt.                                            ;\r
+;------------------------------------------------------;\r
+print_time:\r
+         push    eax\r
+         push    ebx\r
+         push    esi\r
+\r
+         mov     esi, msg_time\r
+         mov     bl, 0x07\r
+         call    print                               ; text.inc\r
+         call    get_cmos_data                       ; cmos.inc\r
+         mov     al, [hour]                          ; cmos.inc\r
+         call    BCD2ascii\r
+         push    eax\r
+         mov     bh, 0x07\r
+         mov     bl, al\r
+         call    print_char\r
+         pop     eax\r
+         mov     bl, ah\r
+         call    print_char\r
+\r
+         mov     bl, ':'\r
+         call    print_char\r
+\r
+         mov     al, [minute]\r
+         call    BCD2ascii\r
+         push    eax\r
+         mov     bl, al\r
+         call    print_char\r
+         pop     eax\r
+         mov     bl, ah\r
+         call    print_char\r
+\r
+         mov     bl, ':'\r
+         call    print_char\r
+\r
+         mov     al, [second]\r
+         call    BCD2ascii\r
+         push    eax\r
+         mov     bl, al\r
+         call    print_char\r
+         pop     eax\r
+         mov     bl, ah\r
+         call    print_char\r
+\r
+         pop     esi\r
+         pop     ebx\r
+         pop     eax\r
+         ret
\ No newline at end of file
diff --git a/kernel/krl_incs/timer.inc b/kernel/krl_incs/timer.inc
new file mode 100755 (executable)
index 0000000..29088eb
--- /dev/null
@@ -0,0 +1,174 @@
+;----------------------------------------------------------;\r
+; BOS kernel                     Christoffer Bubach, 2005. ;\r
+;----------------------------------------------------------;\r
+;                                                          ;\r
+;     Function to set up the timer IRQ.                    ;\r
+;                                                          ;\r
+;----------------------------------------------------------;\r
+\r
+;-----------------;\r
+;   variables     ;\r
+;-----------------;\r
+         timer_wait      dd   0                      ; time to wait\r
+         timer_counter   dd   0, 0                   ; time since BOS started\r
+         call_list       dd   0, 0, 0, 0, 0          ; functions to call\r
+\r
+\r
+;---------------------------;\r
+;      Timer IRQ(0)         ;\r
+;---------------------------;\r
+timer:\r
+         add     dword [timer_counter], 1            ; it's just a 64-bit\r
+         adc     dword [timer_counter+4], 0          ; counter since boot.\r
+\r
+         cmp     [timer_wait], 0                     ; "delay" countdown.\r
+         je      .test1\r
+         dec     [timer_wait]\r
+\r
+     .test1:                                         ; checks for calls to\r
+         cmp     [call_list], dword 0                ; do before we quit.\r
+         je      .test2\r
+         call    dword [call_list]\r
+     .test2:\r
+         cmp     [call_list+4], dword 0\r
+         je      .test3\r
+         call    dword [call_list+4]\r
+     .test3:\r
+         cmp     [call_list+8], dword 0\r
+         je      .test4\r
+         call    dword [call_list+8]\r
+     .test4:\r
+         cmp     [call_list+12], dword 0\r
+         je      .test5\r
+         call    dword [call_list+12]\r
+     .test5:\r
+         cmp     [call_list+16], dword 0\r
+         je      .end\r
+         call    dword [call_list+16]\r
+\r
+     .end:\r
+         mov     al, 0x20\r
+         out     0x20, al\r
+         ret\r
+\r
+\r
+\r
+;------------------------------------------------;\r
+;   add function for the timer to call           ;\r
+;                  in:  ebx = function address   ;\r
+;                  out: eax = 0 if OK            ;\r
+;------------------------------------------------;\r
+add_timercall:\r
+         cmp     [call_list], 0\r
+         jne     .test2\r
+         mov     [call_list], ebx\r
+         jmp     .end\r
+     .error:\r
+         mov     eax, 1\r
+         ret\r
+     .test2:\r
+         cmp     [call_list+4], 0                    ; since i am so lazy\r
+         jne     .test3                              ; and a loop can be\r
+         mov     [call_list+4], ebx                  ; rather complicated\r
+         jmp     .end                                ; for this stuff, i\r
+     .test3:                                         ; check for each one..\r
+         cmp     [call_list+8], 0                    ; after all, it's only 5.\r
+         jne     .test4\r
+         mov     [call_list+8], ebx\r
+         jmp     .end\r
+     .test4:\r
+         cmp     [call_list+12], 0\r
+         jne     .test5\r
+         mov     [call_list+12], ebx\r
+         jmp     .end\r
+     .test5:\r
+         cmp     [call_list+16], 0\r
+         jne     .error\r
+         mov     [call_list+16], ebx\r
+     .end:\r
+         xor     eax, eax\r
+         ret\r
+\r
+\r
+\r
+;-------------------------------------------------;\r
+;   remove function from the call list            ;\r
+;                  in:  ebx = function address    ;\r
+;                  out: eax = 0 if OK             ;\r
+;-------------------------------------------------;\r
+remove_timercall:\r
+         cmp     [call_list], ebx\r
+         jne     .test2\r
+         mov     [call_list], dword 0\r
+         jmp     .end\r
+     .error:\r
+         mov     eax, 1\r
+         ret\r
+     .test2:\r
+         cmp     [call_list+4], ebx\r
+         jne     .test3\r
+         mov     [call_list+4], dword 0\r
+         jmp     .end\r
+     .test3:\r
+         cmp     [call_list+8], ebx\r
+         jne     .test4\r
+         mov     [call_list+8], dword 0\r
+         jmp     .end\r
+     .test4:\r
+         cmp     [call_list+12], ebx\r
+         jne     .test5\r
+         mov     [call_list+12], dword 0\r
+         jmp     .end\r
+     .test5:\r
+         cmp     [call_list+16], ebx\r
+         jne     .error\r
+         mov     [call_list+16], dword 0\r
+     .end:\r
+         xor     eax, eax\r
+         ret\r
+\r
+\r
+\r
+;--------------------------------------------;\r
+;   delay function                           ;\r
+;           in:  ecx = 100/second to wait    ;\r
+;           out: nothing                     ;\r
+;--------------------------------------------;\r
+delay:\r
+         mov     [timer_wait], ecx                   ; mov value to "timer"\r
+     .loop:\r
+         cmp     [timer_wait], 0\r
+         jne     .loop\r
+         ret\r
+\r
+\r
+\r
+;--------------------------------------------;\r
+;   "active" delay                           ;\r
+;                                            ;\r
+; gives the caller a pointer to the counter  ;\r
+; so that it can check for timeouts etc,     ;\r
+; itself.                                    ;\r
+;           in:  ecx = 100/second to wait    ;\r
+;           out: ecx = pointer to counter    ;\r
+;--------------------------------------------;\r
+active_delay:\r
+         mov     [timer_wait], ecx                   ; mov value to "timer"\r
+         mov     ecx, timer_wait                     ; let caller check value\r
+         ret\r
+\r
+\r
+\r
+;------------------------------;\r
+;     set PIT to 100Hz         ;\r
+;------------------------------;\r
+set_pit_freq:\r
+         push    eax\r
+         mov     al, 0x34                            ; set to 100Hz, 0x34 = 00110100b\r
+         out     0x43, al\r
+         mov     al, 0x9B                            ; lsb    1193180 / 1193\r
+         out     0x40, al\r
+         mov     al, 0x2E                            ; msb\r
+         out     0x40, al\r
+         pop     eax\r
+         ret
\ No newline at end of file
diff --git a/kernel/krl_incs/vga.inc b/kernel/krl_incs/vga.inc
new file mode 100755 (executable)
index 0000000..c27c62a
--- /dev/null
@@ -0,0 +1,221 @@
+;----------------------------------------------------------;\r
+; BOS 0.04                  Christoffer Bubach, 2004-2005. ;\r
+;----------------------------------------------------------;\r
+;                                                          ;\r
+;     VGA functions. Change video mode etc.                ;\r
+;                                                          ;\r
+;----------------------------------------------------------;\r
+\r
+\r
+     ;-------------------;\r
+     ;   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
+\r
+\r
+;---------------------------------;\r
+;  sets the screen to mode 0x03   ;\r
+;---------------------------------;\r
+set_mode_0x03:\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
+\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
+\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
+\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
+\r
+         pop     ebx\r
+         pop     eax\r
+         ret\r
+\r
+\r
+;------------------------------------;\r
+;  put a pixel at x, y with color    ;\r
+;           used only in mode 0x13   ;\r
+;                                    ;\r
+; input:   bx = x                    ;\r
+;          cx = y                    ;\r
+;          al = color                ;\r
+;                                    ;\r
+; output:  none.                     ;\r
+;------------------------------------;\r
+put_0x13_pixel:\r
+         push    ax\r
+         push    bx\r
+         push    cx\r
+         push    edi\r
+\r
+         mov     edi, 0xa0000                        ; directly to mem\r
+         add     di, bx\r
+         mov     bx, cx\r
+         shl     cx, 8\r
+         shl     bx, 6\r
+         add     cx, bx\r
+         add     di, cx\r
+         stosb\r
+\r
+         pop     edi\r
+         pop     cx\r
+         pop     bx\r
+         pop     ax\r
+         ret\r
+\r
+\r
+;-----------------------------------------------------;\r
+;  put a sprite at x, y.  only for mode 0x13          ;\r
+;                                                     ;\r
+; input:   ax  = x, bx = y, cx = width, dx = height   ;\r
+;          esi = pointer to sprite                    ;\r
+;                                                     ;\r
+; output:  none.                                      ;\r
+;-----------------------------------------------------;\r
+put_0x13_sprite:\r
+         pushad                                      ; this was a\r
+     .row_loop:                                      ; nightmare to write.\r
+         dec     dx                                  ; guess how many times\r
+         push    cx                                  ; i got lost in the push\r
+         push    ax                                  ; and pops here.. ;)\r
+     .col_loop:                                      ; not to mention what\r
+         dec     cx                                  ; time it was when i wrote\r
+         push    ax                                  ; it.. :P\r
+         push    bx\r
+         push    cx\r
+         mov     cx, bx\r
+         mov     bx, ax\r
+         lodsb\r
+         call    put_0x13_pixel\r
+         pop     cx\r
+         pop     bx\r
+         pop     ax\r
+         inc     ax\r
+         cmp     cx, 0\r
+         jne     .col_loop\r
+         pop     ax\r
+         pop     cx\r
+         inc     bx\r
+         cmp     dx, 0\r
+         jne     .row_loop\r
+         popad\r
+         ret\r
+\r
+\r
+;---------------------------------------------;\r
+;  sets the palette (256 colors)              ;\r
+;                                             ;\r
+; input:  esi = palette.                      ;\r
+; output: none.                               ;\r
+;---------------------------------------------;\r
+set_palette256:\r
+         push    ax\r
+         push    cx\r
+         push    dx\r
+\r
+         xor     cx, cx\r
+     .l1:\r
+         mov     dx, 0x03C8\r
+         mov     al, cl                              ; color no. = loop no.\r
+         out     dx, al\r
+         inc     dx                                  ; port 0x3C9\r
+         mov     al, byte [esi]                      ; red\r
+         out     dx, al\r
+         inc     esi\r
+         mov     al, byte [esi]                      ; green\r
+         out     dx, al\r
+         inc     esi\r
+         mov     al, byte [esi]                      ; blue\r
+         out     dx, al\r
+         inc     esi\r
+\r
+         inc     cx\r
+         cmp     cx, 256\r
+         jl      .l1\r
+\r
+         pop     dx\r
+         pop     cx\r
+         pop     ax\r
+         ret\r
+\r
diff --git a/kernel/realmode/a20.inc b/kernel/realmode/a20.inc
new file mode 100755 (executable)
index 0000000..f0ab1c8
--- /dev/null
@@ -0,0 +1,51 @@
+;----------------------------------------------------------;\r
+; BOS 0.04                       Christoffer Bubach, 2005. ;\r
+;----------------------------------------------------------;\r
+;                                                          ;\r
+;      Realmode functions to set a20-gate.                 ;\r
+;                                                          ;\r
+;----------------------------------------------------------;\r
+\r
+;----------------------;\r
+;   enable a20 gate    ;\r
+;----------------------;\r
+enable_a20:\r
+         in      al, 0x64                            ; first try..\r
+         test    al, 2\r
+         jnz     enable_a20\r
+         mov     al, 0xD1\r
+         out     0x64, al\r
+     .d6:\r
+         in      al, 0x64\r
+         and     ax, 2\r
+         jnz     .d6\r
+         mov     al, 0xDF\r
+         out     0x60, al\r
+\r
+         call    a20_test\r
+         jz      .ok\r
+\r
+         in      al, 0x92                            ; try again, diffrent method.\r
+         or      al, 0x02\r
+         out     0x92, al\r
+\r
+         call    a20_test\r
+         jz      .ok\r
+\r
+         ;    ERROR!\r
+         ; a20-gate not set! Do something about it here... ;)\r
+\r
+     .ok:\r
+         ret\r
+\r
+;------------------------;\r
+;  test if A20 is set    ;\r
+;------------------------;\r
+a20_test:\r
+         mov     al, byte [fs:0]\r
+         mov     ah, al\r
+         not     al\r
+         xchg    al, byte [gs:0x10]\r
+         cmp     ah, byte [fs:0]\r
+         mov     [gs:0x10], al\r
+         ret
\ No newline at end of file
diff --git a/kernel/realmode/do_all_16bit.inc b/kernel/realmode/do_all_16bit.inc
new file mode 100755 (executable)
index 0000000..f0fb4c3
--- /dev/null
@@ -0,0 +1,38 @@
+;----------------------------------------------------------;\r
+; BOS kernel                     Christoffer Bubach, 2005. ;\r
+;----------------------------------------------------------;\r
+;                                                          ;\r
+;     Do everything related to 16-bit here... :)           ;\r
+;                                                          ;\r
+;----------------------------------------------------------;\r
+\r
+;---------------------;\r
+;    save info        ;\r
+;---------------------;\r
+do_all_16bit:\r
+         call    getmem                              ; realmode/mem.inc\r
+         mov     [ram_amount - 0x10000], eax\r
+\r
+         xor     eax, eax                            ; clear mem for IDT and GDT\r
+         mov     edi, 0x6c00                         ; IDT address\r
+         mov     ecx, (0x800 + 0x800)/4\r
+         rep     stosd\r
+\r
+         mov     eax, cs\r
+         shl     eax, 4\r
+         mov     [gdt.BOS_16code - 0x10000 + 2], ax  ; Prepare GDT by\r
+         mov     [gdt.BOS_16data - 0x10000 + 2], ax  ; setting 16-bit base.\r
+         shr     eax, 16\r
+         mov     [gdt.BOS_16code - 0x10000 + 4], al\r
+         mov     [gdt.BOS_16data - 0x10000 + 4], al\r
+         mov     [gdt.BOS_16code - 0x10000 + 7], ah\r
+         mov     [gdt.BOS_16data - 0x10000 + 7], ah\r
+\r
+         lea     esi, [gdt - 0x10000]\r
+         mov     edi, 0x7400                         ; GDT address\r
+         mov     ecx, (gdt_end - gdt)/4\r
+         rep     movsd                               ; Move it to final pos.\r
+\r
+         push    dword 0                             ; clear NT bit\r
+         popfd\r
+         ret
\ No newline at end of file
diff --git a/kernel/realmode/gdt.inc b/kernel/realmode/gdt.inc
new file mode 100755 (executable)
index 0000000..43b144f
--- /dev/null
@@ -0,0 +1,26 @@
+;----------------------------------------------------------;\r
+; BOS kernel                Christoffer Bubach, 2004-2005. ;\r
+;----------------------------------------------------------;\r
+;                                                          ;\r
+;     Global Descriptor Table (GDT).                       ;\r
+;                                                          ;\r
+;----------------------------------------------------------;\r
+\r
+;-------------------;\r
+;  pointer to GDT   ;\r
+;-------------------;\r
+gdtr:\r
+     .size          dw   gdt_end - gdt - 1\r
+     .address       dd   0x7400                      ; this is where we move\r
+                                                     ; the gdt\r
+;-----------------------------------;\r
+;  Global Descriptor Table (GDT).   ;\r
+;-----------------------------------;\r
+gdt:\r
+     .null          dw   0x0000,0x0000,0x0000,0x0000 ; null desc.\r
+     .BOS_code:      dw   0xFFFF,0x0000,0x9A00,0x00CF ; 0x08 , was 9800 before.\r
+     .BOS_data:      dw   0xFFFF,0x0000,0x9200,0x00CF ; 0x10\r
+     .BOS_16code:    dw   0xFFFF,0x0000,0x9A00,0x0000 ; 0x18\r
+     .BOS_16data:    dw   0xFFFF,0x0000,0x9200,0x0000 ; 0x20\r
+\r
+gdt_end:
\ No newline at end of file
diff --git a/kernel/realmode/idt.inc b/kernel/realmode/idt.inc
new file mode 100755 (executable)
index 0000000..6335776
--- /dev/null
@@ -0,0 +1,16 @@
+;----------------------------------------------------------;\r
+; BOS kernel                Christoffer Bubach, 2003-2005. ;\r
+;----------------------------------------------------------;\r
+;                                                          ;\r
+;   pointer to IDT (Interrupt Description Table)           ;\r
+;                                                          ;\r
+;----------------------------------------------------------;\r
+\r
+\r
+\r
+;-----------------;\r
+;  IDT pointer    ;\r
+;-----------------;\r
+idtr:\r
+     .size          dw   0x800\r
+     .address       dd   0x6C00\r
diff --git a/kernel/realmode/mem.inc b/kernel/realmode/mem.inc
new file mode 100755 (executable)
index 0000000..0446e02
--- /dev/null
@@ -0,0 +1,51 @@
+;----------------------------------------------------------;\r
+; BOS kernel                Christoffer Bubach, 2003-2005. ;\r
+;----------------------------------------------------------;\r
+;                                                          ;\r
+;      Get memory size, only using E801 right now.         ;\r
+;                                                          ;\r
+;----------------------------------------------------------;\r
+\r
+;-----------------------------------------;\r
+;  get mem                                ;\r
+;   in:  nothing                          ;\r
+;   out: eax = mem in bytes, 0 = error    ;\r
+;-----------------------------------------;\r
+getmem:\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
+\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
+\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
diff --git a/kernel/realmode/variables.inc b/kernel/realmode/variables.inc
new file mode 100755 (executable)
index 0000000..2ab6707
--- /dev/null
@@ -0,0 +1,29 @@
+;----------------------------------------------------------;\r
+; BOS kernel                     Christoffer Bubach, 2005. ;\r
+;----------------------------------------------------------;\r
+;                                                          ;\r
+;      Variabels for/from realmode.                        ;\r
+;                                                          ;\r
+;----------------------------------------------------------;\r
+\r
+;---------------------------------------;\r
+;  needed to get back to 16-bit mode    ;\r
+;---------------------------------------;\r
+     realmode_cs     dw   0\r
+     ridtr:         dw   0x3FF\r
+                    dd   0\r
+\r
+;----------------;\r
+;  other stuff   ;\r
+;----------------;\r
+     int_number      db   0\r
+     realmode_error  db   0\r
+     realmode_ax     dw   0\r
+     realmode_bx     dw   0\r
+     realmode_cx     dw   0\r
+     realmode_dx     dw   0\r
+\r
+;-------------------;\r
+;    saved info     ;\r
+;-------------------;\r
+     ram_amount      dd   0
\ No newline at end of file
diff --git a/kernel/testkernels etc/font8x16.inc b/kernel/testkernels etc/font8x16.inc
new file mode 100755 (executable)
index 0000000..b26f778
--- /dev/null
@@ -0,0 +1,264 @@
+;----------------------------------------------------------;\r
+; BOS 0.04                  Christoffer Bubach, 2004-2005. ;\r
+;----------------------------------------------------------;\r
+;                                                          ;\r
+;     System 8x16 font..                                   ;\r
+;                                                          ;\r
+;----------------------------------------------------------;\r
+     font_8x16:\r
+         db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x7E, 0x81, 0xA5, 0x81, 0x81, 0xA5, 0x99, 0x81, 0x81, 0x7E, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x7E, 0xFF, 0xDB, 0xFF, 0xFF, 0xDB, 0xE7, 0xFF, 0xFF, 0x7E, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0x6C, 0xFE, 0xFE, 0xFE, 0xFE, 0x7C, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x7C, 0xFE, 0x7C, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x18, 0x3C, 0x3C, 0xE7, 0xE7, 0xE7, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x7E, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3C, 0x3C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+         db 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0xC3, 0xC3, 0xE7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF\r
+         db 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x66, 0x42, 0x42, 0x66, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00\r
+         db 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC3, 0x99, 0xBD, 0xBD, 0x99, 0xC3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF\r
+         db 0x00, 0x00, 0x1E, 0x06, 0x0E, 0x1A, 0x78, 0xCC, 0xCC, 0xCC, 0xCC, 0x78, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x3C, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x7E, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x3F, 0x33, 0x3F, 0x30, 0x30, 0x30, 0x30, 0x70, 0xF0, 0xE0, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x7F, 0x63, 0x7F, 0x63, 0x63, 0x63, 0x63, 0x67, 0xE7, 0xE6, 0xC0, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x18, 0x18, 0xDB, 0x3C, 0xE7, 0x3C, 0xDB, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x80, 0xC0, 0xE0, 0xF0, 0xF8, 0xFE, 0xF8, 0xF0, 0xE0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x02, 0x06, 0x0E, 0x1E, 0x3E, 0xFE, 0x3E, 0x1E, 0x0E, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x18, 0x3C, 0x7E, 0x18, 0x18, 0x18, 0x7E, 0x3C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x7F, 0xDB, 0xDB, 0xDB, 0x7B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x7C, 0xC6, 0x60, 0x38, 0x6C, 0xC6, 0xC6, 0x6C, 0x38, 0x0C, 0xC6, 0x7C, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0xFE, 0xFE, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x18, 0x3C, 0x7E, 0x18, 0x18, 0x18, 0x7E, 0x3C, 0x18, 0x7E, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x18, 0x3C, 0x7E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7E, 0x3C, 0x18, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x0C, 0xFE, 0x0C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x60, 0xFE, 0x60, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0xC0, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x6C, 0xFE, 0x6C, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x38, 0x7C, 0x7C, 0xFE, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0x7C, 0x7C, 0x38, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x18, 0x3C, 0x3C, 0x3C, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x66, 0x66, 0x66, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x6C, 0x6C, 0xFE, 0x6C, 0x6C, 0x6C, 0xFE, 0x6C, 0x6C, 0x00, 0x00, 0x00, 0x00\r
+         db 0x18, 0x18, 0x7C, 0xC6, 0xC2, 0xC0, 0x7C, 0x06, 0x06, 0x86, 0xC6, 0x7C, 0x18, 0x18, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0xC2, 0xC6, 0x0C, 0x18, 0x30, 0x60, 0xC6, 0x86, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x38, 0x6C, 0x6C, 0x38, 0x76, 0xDC, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x30, 0x30, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x0C, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x0C, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x30, 0x18, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x3C, 0xFF, 0x3C, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7E, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x38, 0x6C, 0xC6, 0xC6, 0xD6, 0xD6, 0xC6, 0xC6, 0x6C, 0x38, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x18, 0x38, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7E, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x7C, 0xC6, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0xC6, 0xFE, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x7C, 0xC6, 0x06, 0x06, 0x3C, 0x06, 0x06, 0x06, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x0C, 0x1C, 0x3C, 0x6C, 0xCC, 0xFE, 0x0C, 0x0C, 0x0C, 0x1E, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0xFE, 0xC0, 0xC0, 0xC0, 0xFC, 0x06, 0x06, 0x06, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x38, 0x60, 0xC0, 0xC0, 0xFC, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0xFE, 0xC6, 0x06, 0x06, 0x0C, 0x18, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0x7E, 0x06, 0x06, 0x06, 0x0C, 0x78, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0x0C, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xDE, 0xDE, 0xDE, 0xDC, 0xC0, 0x7C, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x10, 0x38, 0x6C, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0xFC, 0x66, 0x66, 0x66, 0x7C, 0x66, 0x66, 0x66, 0x66, 0xFC, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x3C, 0x66, 0xC2, 0xC0, 0xC0, 0xC0, 0xC0, 0xC2, 0x66, 0x3C, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0xF8, 0x6C, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x6C, 0xF8, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0xFE, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x62, 0x66, 0xFE, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0xFE, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x60, 0x60, 0xF0, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x3C, 0x66, 0xC2, 0xC0, 0xC0, 0xDE, 0xC6, 0xC6, 0x66, 0x3A, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x3C, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x1E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0xCC, 0xCC, 0xCC, 0x78, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0xE6, 0x66, 0x66, 0x6C, 0x78, 0x78, 0x6C, 0x66, 0x66, 0xE6, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0xF0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x62, 0x66, 0xFE, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0xC6, 0xEE, 0xFE, 0xFE, 0xD6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0xC6, 0xE6, 0xF6, 0xFE, 0xDE, 0xCE, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0xFC, 0x66, 0x66, 0x66, 0x7C, 0x60, 0x60, 0x60, 0x60, 0xF0, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xD6, 0xDE, 0x7C, 0x0C, 0x0E, 0x00, 0x00\r
+         db 0x00, 0x00, 0xFC, 0x66, 0x66, 0x66, 0x7C, 0x6C, 0x66, 0x66, 0x66, 0xE6, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0x60, 0x38, 0x0C, 0x06, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x7E, 0x7E, 0x5A, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x6C, 0x38, 0x10, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xD6, 0xD6, 0xD6, 0xFE, 0xEE, 0x6C, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0xC6, 0xC6, 0x6C, 0x7C, 0x38, 0x38, 0x7C, 0x6C, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0xFE, 0xC6, 0x86, 0x0C, 0x18, 0x30, 0x60, 0xC2, 0xC6, 0xFE, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x3C, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3C, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0x70, 0x38, 0x1C, 0x0E, 0x06, 0x02, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x3C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x3C, 0x00, 0x00, 0x00, 0x00\r
+         db 0x10, 0x38, 0x6C, 0xC6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00\r
+         db 0x30, 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0xE0, 0x60, 0x60, 0x78, 0x6C, 0x66, 0x66, 0x66, 0x66, 0x7C, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC0, 0xC0, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x1C, 0x0C, 0x0C, 0x3C, 0x6C, 0xCC, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xFE, 0xC0, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x38, 0x6C, 0x64, 0x60, 0xF0, 0x60, 0x60, 0x60, 0x60, 0xF0, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x7C, 0x0C, 0xCC, 0x78, 0x00\r
+         db 0x00, 0x00, 0xE0, 0x60, 0x60, 0x6C, 0x76, 0x66, 0x66, 0x66, 0x66, 0xE6, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x18, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x06, 0x06, 0x00, 0x0E, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3C, 0x00\r
+         db 0x00, 0x00, 0xE0, 0x60, 0x60, 0x66, 0x6C, 0x78, 0x78, 0x6C, 0x66, 0xE6, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0x00, 0xEC, 0xFE, 0xD6, 0xD6, 0xD6, 0xD6, 0xC6, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7C, 0x60, 0x60, 0xF0, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x7C, 0x0C, 0x0C, 0x1E, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0x00, 0xDC, 0x76, 0x66, 0x60, 0x60, 0x60, 0xF0, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0xC6, 0x60, 0x38, 0x0C, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x10, 0x30, 0x30, 0xFC, 0x30, 0x30, 0x30, 0x30, 0x36, 0x1C, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0xC6, 0xD6, 0xD6, 0xD6, 0xFE, 0x6C, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0x6C, 0x38, 0x38, 0x38, 0x6C, 0xC6, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7E, 0x06, 0x0C, 0xF8, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xCC, 0x18, 0x30, 0x60, 0xC6, 0xFE, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x0E, 0x18, 0x18, 0x18, 0x70, 0x18, 0x18, 0x18, 0x18, 0x0E, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x70, 0x18, 0x18, 0x18, 0x0E, 0x18, 0x18, 0x18, 0x18, 0x70, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x76, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6C, 0xC6, 0xC6, 0xC6, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x3C, 0x66, 0xC2, 0xC0, 0xC0, 0xC0, 0xC2, 0x66, 0x3C, 0x0C, 0x06, 0x7C, 0x00, 0x00\r
+         db 0x00, 0x00, 0xCC, 0x00, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x0C, 0x18, 0x30, 0x00, 0x7C, 0xC6, 0xFE, 0xC0, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x10, 0x38, 0x6C, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0xCC, 0x00, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x60, 0x30, 0x18, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x38, 0x6C, 0x38, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0x3C, 0x66, 0x60, 0x60, 0x66, 0x3C, 0x0C, 0x06, 0x3C, 0x00, 0x00, 0x00\r
+         db 0x00, 0x10, 0x38, 0x6C, 0x00, 0x7C, 0xC6, 0xFE, 0xC0, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0xC6, 0x00, 0x00, 0x7C, 0xC6, 0xFE, 0xC0, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x60, 0x30, 0x18, 0x00, 0x7C, 0xC6, 0xFE, 0xC0, 0xC0, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x66, 0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x18, 0x3C, 0x66, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x60, 0x30, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0xC6, 0x00, 0x10, 0x38, 0x6C, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00\r
+         db 0x38, 0x6C, 0x38, 0x00, 0x38, 0x6C, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00\r
+         db 0x18, 0x30, 0x60, 0x00, 0xFE, 0x66, 0x60, 0x7C, 0x60, 0x60, 0x66, 0xFE, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0x00, 0xCC, 0x76, 0x36, 0x7E, 0xD8, 0xD8, 0x6E, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x3E, 0x6C, 0xCC, 0xCC, 0xFE, 0xCC, 0xCC, 0xCC, 0xCC, 0xCE, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x10, 0x38, 0x6C, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0xC6, 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x60, 0x30, 0x18, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x30, 0x78, 0xCC, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x60, 0x30, 0x18, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0xC6, 0x00, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7E, 0x06, 0x0C, 0x78, 0x00\r
+         db 0x00, 0xC6, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0xC6, 0x00, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x18, 0x18, 0x3C, 0x66, 0x60, 0x60, 0x60, 0x66, 0x3C, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x38, 0x6C, 0x64, 0x60, 0xF0, 0x60, 0x60, 0x60, 0x60, 0xE6, 0xFC, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x66, 0x66, 0x3C, 0x18, 0x7E, 0x18, 0x7E, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0xF8, 0xCC, 0xCC, 0xF8, 0xC4, 0xCC, 0xDE, 0xCC, 0xCC, 0xCC, 0xC6, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x0E, 0x1B, 0x18, 0x18, 0x18, 0x7E, 0x18, 0x18, 0x18, 0x18, 0x18, 0xD8, 0x70, 0x00, 0x00\r
+         db 0x00, 0x18, 0x30, 0x60, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x0C, 0x18, 0x30, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x18, 0x30, 0x60, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x18, 0x30, 0x60, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x76, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x76, 0xDC, 0x00, 0xDC, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00\r
+         db 0x76, 0xDC, 0x00, 0xC6, 0xE6, 0xF6, 0xFE, 0xDE, 0xCE, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x3C, 0x6C, 0x6C, 0x3E, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x38, 0x6C, 0x6C, 0x38, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x30, 0x30, 0x00, 0x30, 0x30, 0x60, 0xC0, 0xC6, 0xC6, 0x7C, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0xC0, 0xC0, 0xC2, 0xC6, 0xCC, 0x18, 0x30, 0x60, 0xDC, 0x86, 0x0C, 0x18, 0x3E, 0x00, 0x00\r
+         db 0x00, 0xC0, 0xC0, 0xC2, 0xC6, 0xCC, 0x18, 0x30, 0x66, 0xCE, 0x9E, 0x3E, 0x06, 0x06, 0x00, 0x00\r
+         db 0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x3C, 0x3C, 0x3C, 0x18, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x6C, 0xD8, 0x6C, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0x00, 0xD8, 0x6C, 0x36, 0x6C, 0xD8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+         db 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44\r
+         db 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA\r
+         db 0xDD, 0x77, 0xDD, 0x77, 0xDD, 0x77, 0xDD, 0x77, 0xDD, 0x77, 0xDD, 0x77, 0xDD, 0x77, 0xDD, 0x77\r
+         db 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18\r
+         db 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xF8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18\r
+         db 0x18, 0x18, 0x18, 0x18, 0x18, 0xF8, 0x18, 0xF8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18\r
+         db 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xF6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36\r
+         db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36\r
+         db 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x18, 0xF8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18\r
+         db 0x36, 0x36, 0x36, 0x36, 0x36, 0xF6, 0x06, 0xF6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36\r
+         db 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36\r
+         db 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x06, 0xF6, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36\r
+         db 0x36, 0x36, 0x36, 0x36, 0x36, 0xF6, 0x06, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+         db 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+         db 0x18, 0x18, 0x18, 0x18, 0x18, 0xF8, 0x18, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18\r
+         db 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+         db 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18\r
+         db 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1F, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18\r
+         db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+         db 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xFF, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18\r
+         db 0x18, 0x18, 0x18, 0x18, 0x18, 0x1F, 0x18, 0x1F, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18\r
+         db 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36\r
+         db 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x30, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36\r
+         db 0x36, 0x36, 0x36, 0x36, 0x36, 0xF7, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xF7, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36\r
+         db 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x30, 0x37, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36\r
+         db 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+         db 0x36, 0x36, 0x36, 0x36, 0x36, 0xF7, 0x00, 0xF7, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36\r
+         db 0x18, 0x18, 0x18, 0x18, 0x18, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+         db 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18\r
+         db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36\r
+         db 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+         db 0x18, 0x18, 0x18, 0x18, 0x18, 0x1F, 0x18, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x18, 0x1F, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18\r
+         db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36\r
+         db 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0xFF, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36\r
+         db 0x18, 0x18, 0x18, 0x18, 0x18, 0xFF, 0x18, 0xFF, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18\r
+         db 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18\r
+         db 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF\r
+         db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF\r
+         db 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0\r
+         db 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F\r
+         db 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xDC, 0xD8, 0xD8, 0xD8, 0xDC, 0x76, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x78, 0xCC, 0xCC, 0xCC, 0xD8, 0xCC, 0xC6, 0xC6, 0xC6, 0xCC, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0xFE, 0xC6, 0xC6, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0xFE, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0xFE, 0xC6, 0x60, 0x30, 0x18, 0x30, 0x60, 0xC6, 0xFE, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0xD8, 0xD8, 0xD8, 0xD8, 0xD8, 0x70, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x66, 0x7C, 0x60, 0x60, 0xC0, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0x76, 0xDC, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x7E, 0x18, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x7E, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x38, 0x6C, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0x6C, 0x38, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x38, 0x6C, 0xC6, 0xC6, 0xC6, 0x6C, 0x6C, 0x6C, 0x6C, 0xEE, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x1E, 0x30, 0x18, 0x0C, 0x3E, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0x00, 0x7E, 0xDB, 0xDB, 0xDB, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x03, 0x06, 0x7E, 0xDB, 0xDB, 0xF3, 0x7E, 0x60, 0xC0, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x1C, 0x30, 0x60, 0x60, 0x7C, 0x60, 0x60, 0x60, 0x30, 0x1C, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x7C, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7E, 0x18, 0x18, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x30, 0x18, 0x0C, 0x06, 0x0C, 0x18, 0x30, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x0C, 0x18, 0x30, 0x60, 0x30, 0x18, 0x0C, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x0E, 0x1B, 0x1B, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18\r
+         db 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0xD8, 0xD8, 0xD8, 0x70, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x7E, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xDC, 0x00, 0x76, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x38, 0x6C, 0x6C, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x0F, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0xEC, 0x6C, 0x6C, 0x3C, 0x1C, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0xD8, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x70, 0xD8, 0x30, 0x60, 0xC8, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0x7C, 0x7C, 0x7C, 0x7C, 0x7C, 0x7C, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00\r
+         db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
\ No newline at end of file
diff --git a/kernel/testkernels etc/kernel.asm b/kernel/testkernels etc/kernel.asm
new file mode 100755 (executable)
index 0000000..4f1dcbb
--- /dev/null
@@ -0,0 +1,188 @@
+;------------------------------------------------------------;\r
+;                     BOS - test kernel                      ;\r
+;------------------------------------------------------------;\r
+;                                                            ;\r
+;          by: Christoffer Bubach, 2003-2005                 ;\r
+;   http://bos.asmhackers.net/      asmhacker@gmail.com      ;\r
+;                                                            ;\r
+;------------------------------------------------------------;\r
+\r
+;     16-bit mem map  (seg:off)\r
+;  0x0000:0x0000 -> 0x0000:0x0500  BIOS stuff\r
+;  0x0000:0x0500 -> 0x0000:0x2100  root\r
+;  0x0000:0x2100 -> 0x0000:0x3300  fat\r
+;  0x0000:0x3300 -> 0x0000:0x6c00  14,25kb free space\r
+;  0x0000:0x6c00 -> 0x0000:0x7c00  IDT and GDT (256 desc. eatch)\r
+;  0x0000:0x7c00 -> 0x0000:0x7e00  bootsector\r
+;  0x0000:0x7e00 <- 0x0000:0xffff  ~32,5kb stack for boot\r
+;  0x1000:0x0000 -> 0x9000:0xffff  576kb free space\r
+;  0xa000:0x0000 -> .............  VGA mem etc.\r
+\r
+use16\r
+org 0x0000\r
+         jmp     start\r
+\r
+          include 'realmode/a20.inc'\r
+          include 'realmode/variables.inc'\r
+     ;----------------------------------------------------;\r
+     ;  show a message and wait for a key before reboot   ;\r
+     ;----------------------------------------------------;\r
+     first:\r
+         mov     bp, first16\r
+         mov     ax, 0x1301\r
+         mov     bx, 4\r
+         mov     cx, 19\r
+         mov     dx, 0x0401\r
+         int     0x10\r
+\r
+         mov     ah, 0\r
+         int     0x16\r
+         ;int     0x19\r
+         ret\r
+\r
+         first16     db  'Now in 16 bit mode.'\r
+\r
+\r
+;------------------------------------------;\r
+;   starting point of second stage code    ;\r
+;------------------------------------------;\r
+start:\r
+         cli\r
+         mov     ax, 0x1000\r
+         mov     ds, ax                              ; registers.\r
+         mov     es, ax\r
+         mov     ss, ax\r
+         mov     sp, 0xFFFF                          ; Stack..\r
+         sti\r
+\r
+\r
+;----------------------;\r
+;   enable a20 gate    ;\r
+;----------------------;\r
+a20:                                                 ; Enable A20\r
+         in      al, 0x64\r
+         test    al, 2\r
+         jnz     a20\r
+         mov     al, 0xD1\r
+         out     0x64, al\r
+     .d6:\r
+         in      al, 0x64\r
+         and     ax, 2\r
+         jnz     .d6\r
+         mov     al, 0xDF\r
+         out     0x60, al\r
+\r
+\r
+;-----------------;\r
+; display message ;\r
+;-----------------;\r
+         call    first\r
+\r
+\r
+;------------------------;\r
+;   enter 32-bit mode    ;\r
+;------------------------;\r
+pmode:\r
+    ;      xor     ebx, ebx\r
+    ;      mov     bx, ds\r
+    ;      shl     ebx, 4\r
+    ;      mov     [BaseAddOn], ebx\r
+    ;      mov     eax, ebx\r
+\r
+    ;      mov     [gdt.BOS_code + 2], ax\r
+    ;      mov     [gdt.BOS_data + 2], ax\r
+    ;      mov     [gdt.BOS_16code + 2], ax\r
+    ;      mov     [gdt.BOS_16data + 2], ax\r
+\r
+    ;      shr     eax, 16\r
+\r
+    ;      mov     [gdt.BOS_code + 4], al\r
+    ;      mov     [gdt.BOS_data + 4], al\r
+    ;      mov     [gdt.BOS_16code + 4], al\r
+    ;      mov     [gdt.BOS_16data + 4], al\r
+\r
+    ;      mov     [gdt.BOS_code + 7], ah\r
+    ;      mov     [gdt.BOS_data + 7], ah\r
+    ;      mov     [gdt.BOS_16code + 7], ah\r
+    ;      mov     [gdt.BOS_16data + 7], ah\r
+\r
+    ;      add     ebx, gdt\r
+\r
+    ;      mov     [gdtr + 2], ebx\r
+    ;      add     ebx, idt_start - gdt\r
+    ;      mov     [idtr + 2], ebx\r
+\r
+       xor   ebx,ebx\r
+       mov   bx,ds                            ; BX=segment\r
+       shl   ebx,4                            ; BX="linear" address of segment base\r
+       mov   eax,ebx\r
+       mov   [sys_code_1 + 2],ax              ; set base address of 32-bit segments\r
+       mov   [sys_data_1 + 2],ax\r
+       mov   [Real_code_1 + 2],ax             ; set base address of 16-bit segments\r
+       mov   [Real_data_1 + 2],ax\r
+       shr   eax,16\r
+       mov   [sys_code_1 + 4],al\r
+       mov   [sys_data_1 + 4],al\r
+       mov   [Real_code_1 + 4],al\r
+       mov   [Real_data_1 + 4],al\r
+\r
+       mov   [sys_code_1 + 7],ah\r
+       mov   [sys_data_1 + 7],ah\r
+       mov   [Real_code_1 + 7],ah\r
+       mov   [Real_data_1 + 7],ah\r
+\r
+       add   ebx,gdt                          ; EBX=linear address of gdt\r
+       mov   [gdtr + 2],ebx\r
+\r
+       cli                                    ; Disable interrupts,\r
+       mov   ax,cs\r
+       mov   [RealModeCS],ax\r
+       lgdt  [gdtr]                           ; Load the GDT descriptor\r
+\r
+       mov   eax, cr0                         ; Copy the contents of CR0 into EAX\r
+       or    eax, 1                           ; Set bit 0\r
+       mov   cr0, eax                         ; Copy the contents of EAX into CR0\r
+\r
+       ;jmp   10h:clear_pipe                   ; Jump to code segment, offset clear_pipe\r
+\r
+       ;  cli                                         ; set protected mode (32-bit)\r
+       ;  lgdt    [gdtr]\r
+       ;  mov     eax, cr0\r
+       ;  or      eax, 1\r
+       ;  mov     cr0, eax\r
+\r
+         jmp     0x08:flush\r
+\r
+;----------------------------------------;\r
+; start of 32-bit area.                  ;\r
+;     flush segments and jump to kernel  ;\r
+;----------------------------------------;\r
+use32\r
+flush:\r
+         mov     eax, 0x10                           ; refresh all segment registers\r
+         mov     ds, eax\r
+         mov     es, eax\r
+         mov     fs, eax\r
+         mov     gs, eax\r
+         mov     ss, eax\r
+         mov     esp, 0xfffc\r
+\r
+         mov     byte [ds:0B8502h], 'P'\r
+         mov     byte [ds:0B8503h], 0x07             ; Assign a color code\r
+\r
+         jmp     $ ;hang\r
+\r
+\r
+\r
+;--------------------------------;\r
+;  global descriptor table (gdt) ;\r
+;--------------------------------;\r
+gdt:\r
+    .null:          dw   0x0000, 0x0000, 0x0000, 0x0000\r
+    .codesel:       dw   0xFFFF, 0x0000, 0x9800, 0x00CF\r
+    .datasel:       dw   0xFFFF, 0x0000, 0x9200, 0x00CF\r
+gdt_end:\r
+\r
+gdtr:\r
+     .size:         dw   gdt_end - gdt - 1\r
+     .address       dd   gdt ;+ 0x10000               ; 0x10000 is where we are in mem
\ No newline at end of file
diff --git a/kernel/testkernels etc/text.txt b/kernel/testkernels etc/text.txt
new file mode 100755 (executable)
index 0000000..35efa82
--- /dev/null
@@ -0,0 +1,8547 @@
+00000000  E91E01            jmp 0x121\r
+00000003  E464              in al,0x64\r
+00000005  A802              test al,0x2\r
+00000007  75FA              jnz 0x3\r
+00000009  B0D1              mov al,0xd1\r
+0000000B  E664              out 0x64,al\r
+0000000D  E464              in al,0x64\r
+0000000F  83E002            and ax,byte +0x2\r
+00000012  75F9              jnz 0xd\r
+00000014  B0DF              mov al,0xdf\r
+00000016  E660              out 0x60,al\r
+00000018  E80E00            call 0x29\r
+0000001B  740B              jz 0x28\r
+0000001D  E492              in al,0x92\r
+0000001F  0C02              or al,0x2\r
+00000021  E692              out 0x92,al\r
+00000023  E80300            call 0x29\r
+00000026  7400              jz 0x28\r
+00000028  C3                ret\r
+00000029  64A00000          mov al,[fs:0x0]\r
+0000002D  88C4              mov ah,al\r
+0000002F  F6D0              not al\r
+00000031  6586061000        xchg al,[gs:0x10]\r
+00000036  643A260000        cmp ah,[fs:0x0]\r
+0000003B  65A21000          mov [gs:0x10],al\r
+0000003F  C3                ret\r
+00000040  27                daa\r
+00000041  0000              add [bx+si],al\r
+00000043  7400              jz 0x45\r
+00000045  0000              add [bx+si],al\r
+00000047  0000              add [bx+si],al\r
+00000049  0000              add [bx+si],al\r
+0000004B  0000              add [bx+si],al\r
+0000004D  00FF              add bh,bh\r
+0000004F  FF00              inc word [bx+si]\r
+00000051  0000              add [bx+si],al\r
+00000053  9ACF00FFFF        call 0xffff:0xcf\r
+00000058  0000              add [bx+si],al\r
+0000005A  0092CF00          add [bp+si+0xcf],dl\r
+0000005E  FF                db 0xFF\r
+0000005F  FF00              inc word [bx+si]\r
+00000061  0000              add [bx+si],al\r
+00000063  9A0000FFFF        call 0xffff:0x0\r
+00000068  0000              add [bx+si],al\r
+0000006A  00920000          add [bp+si+0x0],dl\r
+0000006E  0008              add [bx+si],cl\r
+00000070  006C00            add [si+0x0],ch\r
+00000073  005251            add [bp+si+0x51],dl\r
+00000076  6653              push ebx\r
+00000078  6631C0            xor eax,eax\r
+0000007B  6631DB            xor ebx,ebx\r
+0000007E  B801E8            mov ax,0xe801\r
+00000081  31D2              xor dx,dx\r
+00000083  31C9              xor cx,cx\r
+00000085  CD15              int 0x15\r
+00000087  7305              jnc 0x8e\r
+00000089  6631C0            xor eax,eax\r
+0000008C  EB23              jmp short 0xb1\r
+0000008E  89C6              mov si,ax\r
+00000090  09DE              or si,bx\r
+00000092  7504              jnz 0x98\r
+00000094  89C8              mov ax,cx\r
+00000096  89D3              mov bx,dx\r
+00000098  3D003C            cmp ax,0x3c00\r
+0000009B  7210              jc 0xad\r
+0000009D  660FB7C3          movzx eax,bx\r
+000000A1  660500010000      add eax,0x100\r
+000000A7  66C1E010          shl eax,0x10\r
+000000AB  EB04              jmp short 0xb1\r
+000000AD  66C1E00A          shl eax,0xa\r
+000000B1  665B              pop ebx\r
+000000B3  59                pop cx\r
+000000B4  5A                pop dx\r
+000000B5  C3                ret\r
+000000B6  0000              add [bx+si],al\r
+000000B8  FF03              inc word [bp+di]\r
+000000BA  0000              add [bx+si],al\r
+000000BC  0000              add [bx+si],al\r
+000000BE  0000              add [bx+si],al\r
+000000C0  0000              add [bx+si],al\r
+000000C2  0000              add [bx+si],al\r
+000000C4  0000              add [bx+si],al\r
+000000C6  0000              add [bx+si],al\r
+000000C8  0000              add [bx+si],al\r
+000000CA  0000              add [bx+si],al\r
+000000CC  E8A5FF            call 0x74\r
+000000CF  66A3C800          mov [0xc8],eax\r
+000000D3  6631C0            xor eax,eax\r
+000000D6  66BF006C0000      mov edi,0x6c00\r
+000000DC  66B900040000      mov ecx,0x400\r
+000000E2  F366AB            rep stosd\r
+000000E5  668CC8            mov eax,cs\r
+000000E8  66C1E004          shl eax,0x4\r
+000000EC  A36000            mov [0x60],ax\r
+000000EF  A36800            mov [0x68],ax\r
+000000F2  66C1E810          shr eax,0x10\r
+000000F6  A26200            mov [0x62],al\r
+000000F9  A26A00            mov [0x6a],al\r
+000000FC  88266500          mov [0x65],ah\r
+00000100  88266D00          mov [0x6d],ah\r
+00000104  668D364600        lea esi,[0x46]\r
+00000109  66BF00740000      mov edi,0x7400\r
+0000010F  66B90A000000      mov ecx,0xa\r
+00000115  F366A5            rep movsd\r
+00000118  666800000000      push dword 0x0\r
+0000011E  669D              popfd\r
+00000120  C3                ret\r
+00000121  FA                cli\r
+00000122  8CC8              mov ax,cs\r
+00000124  8ED8              mov ds,ax\r
+00000126  6631C0            xor eax,eax\r
+00000129  8EC0              mov es,ax\r
+0000012B  8EE0              mov fs,ax\r
+0000012D  8EE8              mov gs,ax\r
+0000012F  FB                sti\r
+00000130  E8D0FE            call 0x3\r
+00000133  E896FF            call 0xcc\r
+00000136  FA                cli\r
+00000137  8CC8              mov ax,cs\r
+00000139  A3B600            mov [0xb6],ax\r
+0000013C  0F01164000        lgdt [0x40]\r
+00000141  0F011E6E00        lidt [0x6e]\r
+00000146  0F20C0            mov eax,cr0\r
+00000149  0C01              or al,0x1\r
+0000014B  0F22C0            mov cr0,eax\r
+0000014E  66EA560101000800  jmp dword 0x8:0x10156\r
+00000156  66B810008ED8      mov eax,0xd88e0010\r
+0000015C  8EC0              mov es,ax\r
+0000015E  8EE0              mov fs,ax\r
+00000160  8EE8              mov gs,ax\r
+00000162  8ED0              mov ss,ax\r
+00000164  BCFCFF            mov sp,0xfffc\r
+00000167  0000              add [bx+si],al\r
+00000169  E85607            call 0x8c2\r
+0000016C  0000              add [bx+si],al\r
+0000016E  66BBB104E850      mov ebx,0x50e804b1\r
+00000174  050000            add ax,0x0\r
+00000177  BEA40A            mov si,0xaa4\r
+0000017A  0100              add [bx+si],ax\r
+0000017C  B307              mov bl,0x7\r
+0000017E  E82C06            call 0x7ad\r
+00000181  0000              add [bx+si],al\r
+00000183  E8F210            call 0x1278\r
+00000186  0000              add [bx+si],al\r
+00000188  E90B11            jmp 0x1296\r
+0000018B  0000              add [bx+si],al\r
+0000018D  FA                cli\r
+0000018E  F4                hlt\r
+0000018F  EBFC              jmp short 0x18d\r
+00000191  50                push ax\r
+00000192  51                push cx\r
+00000193  B90000            mov cx,0x0\r
+00000196  0000              add [bx+si],al\r
+00000198  89F8              mov ax,di\r
+0000019A  668981006C        mov [bx+di+0x6c00],eax\r
+0000019F  0000              add [bx+si],al\r
+000001A1  83C102            add cx,byte +0x2\r
+000001A4  C781006C0000      mov word [bx+di+0x6c00],0x0\r
+000001AA  0800              or [bx+si],al\r
+000001AC  008E83C1          add [bp+0xc183],cl\r
+000001B0  0489              add al,0x89\r
+000001B2  F8                clc\r
+000001B3  C1E810            shr ax,0x10\r
+000001B6  668981006C        mov [bx+di+0x6c00],eax\r
+000001BB  0000              add [bx+si],al\r
+000001BD  83C102            add cx,byte +0x2\r
+000001C0  81F90008          cmp cx,0x800\r
+000001C4  0000              add [bx+si],al\r
+000001C6  72D0              jc 0x198\r
+000001C8  59                pop cx\r
+000001C9  58                pop ax\r
+000001CA  C3                ret\r
+000001CB  50                push ax\r
+000001CC  51                push cx\r
+000001CD  B008              mov al,0x8\r
+000001CF  F6E1              mul cl\r
+000001D1  0F                db 0x0F\r
+000001D2  B7C8              mov bh,0xc8\r
+000001D4  89B83202          mov [bx+si+0x232],di\r
+000001D8  0100              add [bx+si],ax\r
+000001DA  89F8              mov ax,di\r
+000001DC  668981006C        mov [bx+di+0x6c00],eax\r
+000001E1  0000              add [bx+si],al\r
+000001E3  83C102            add cx,byte +0x2\r
+000001E6  C781006C0000      mov word [bx+di+0x6c00],0x0\r
+000001EC  0800              or [bx+si],al\r
+000001EE  008E83C1          add [bp+0xc183],cl\r
+000001F2  0489              add al,0x89\r
+000001F4  F8                clc\r
+000001F5  C1E810            shr ax,0x10\r
+000001F8  668981006C        mov [bx+di+0x6c00],eax\r
+000001FD  0000              add [bx+si],al\r
+000001FF  59                pop cx\r
+00000200  58                pop ax\r
+00000201  C3                ret\r
+00000202  50                push ax\r
+00000203  B80400            mov ax,0x4\r
+00000206  0000              add [bx+si],al\r
+00000208  F6E1              mul cl\r
+0000020A  BE3202            mov si,0x232\r
+0000020D  0100              add [bx+si],ax\r
+0000020F  01C6              add si,ax\r
+00000211  58                pop ax\r
+00000212  C3                ret\r
+00000213  50                push ax\r
+00000214  57                push di\r
+00000215  B90000            mov cx,0x0\r
+00000218  0000              add [bx+si],al\r
+0000021A  AD                lodsw\r
+0000021B  09C0              or ax,ax\r
+0000021D  7407              jz 0x226\r
+0000021F  89C7              mov di,ax\r
+00000221  E8A5FF            call 0x1c9\r
+00000224  FF                db 0xFF\r
+00000225  FF4181            inc word [bx+di-0x7f]\r
+00000228  F9                stc\r
+00000229  0001              add [bx+di],al\r
+0000022B  0000              add [bx+si],al\r
+0000022D  72EB              jc 0x21a\r
+0000022F  5F                pop di\r
+00000230  58                pop ax\r
+00000231  C3                ret\r
+00000232  631E0100          arpl [0x1],bx\r
+00000236  D81E0100          fcomp dword [0x1]\r
+0000023A  4D                dec bp\r
+0000023B  1F                pop ds\r
+0000023C  0100              add [bx+si],ax\r
+0000023E  C21F01            ret 0x11f\r
+00000241  0037              add [bx],dh\r
+00000243  2001              and [bx+di],al\r
+00000245  00AC2001          add [si+0x120],ch\r
+00000249  0021              add [bx+di],ah\r
+0000024B  2101              and [bx+di],ax\r
+0000024D  00962101          add [bp+0x121],dl\r
+00000251  000B              add [bp+di],cl\r
+00000253  2201              and al,[bx+di]\r
+00000255  00802201          add [bx+si+0x122],al\r
+00000259  00F5              add ch,dh\r
+0000025B  2201              and al,[bx+di]\r
+0000025D  006A23            add [bp+si+0x23],ch\r
+00000260  0100              add [bx+si],ax\r
+00000262  DF23              fbld tword [bp+di]\r
+00000264  0100              add [bx+si],ax\r
+00000266  54                push sp\r
+00000267  2401              and al,0x1\r
+00000269  00C9              add cl,cl\r
+0000026B  2401              and al,0x1\r
+0000026D  0000              add [bx+si],al\r
+0000026F  0000              add [bx+si],al\r
+00000271  003E2501          add [0x125],bh\r
+00000275  00B32501          add [bp+di+0x125],dh\r
+00000279  0028              add [bx+si],ch\r
+0000027B  260100            add [es:bx+si],ax\r
+0000027E  9D                popf\r
+0000027F  260100            add [es:bx+si],ax\r
+00000282  0000              add [bx+si],al\r
+00000284  0000              add [bx+si],al\r
+00000286  0000              add [bx+si],al\r
+00000288  0000              add [bx+si],al\r
+0000028A  0000              add [bx+si],al\r
+0000028C  0000              add [bx+si],al\r
+0000028E  0000              add [bx+si],al\r
+00000290  0000              add [bx+si],al\r
+00000292  0000              add [bx+si],al\r
+00000294  0000              add [bx+si],al\r
+00000296  0000              add [bx+si],al\r
+00000298  0000              add [bx+si],al\r
+0000029A  0000              add [bx+si],al\r
+0000029C  0000              add [bx+si],al\r
+0000029E  0000              add [bx+si],al\r
+000002A0  0000              add [bx+si],al\r
+000002A2  0000              add [bx+si],al\r
+000002A4  0000              add [bx+si],al\r
+000002A6  0000              add [bx+si],al\r
+000002A8  0000              add [bx+si],al\r
+000002AA  0000              add [bx+si],al\r
+000002AC  0000              add [bx+si],al\r
+000002AE  0000              add [bx+si],al\r
+000002B0  0000              add [bx+si],al\r
+000002B2  1227              adc ah,[bx]\r
+000002B4  0100              add [bx+si],ax\r
+000002B6  2627              es daa\r
+000002B8  0100              add [bx+si],ax\r
+000002BA  0000              add [bx+si],al\r
+000002BC  0000              add [bx+si],al\r
+000002BE  0000              add [bx+si],al\r
+000002C0  0000              add [bx+si],al\r
+000002C2  0000              add [bx+si],al\r
+000002C4  0000              add [bx+si],al\r
+000002C6  0000              add [bx+si],al\r
+000002C8  0000              add [bx+si],al\r
+000002CA  0000              add [bx+si],al\r
+000002CC  0000              add [bx+si],al\r
+000002CE  0000              add [bx+si],al\r
+000002D0  0000              add [bx+si],al\r
+000002D2  0000              add [bx+si],al\r
+000002D4  0000              add [bx+si],al\r
+000002D6  0000              add [bx+si],al\r
+000002D8  0000              add [bx+si],al\r
+000002DA  0000              add [bx+si],al\r
+000002DC  0000              add [bx+si],al\r
+000002DE  0000              add [bx+si],al\r
+000002E0  0000              add [bx+si],al\r
+000002E2  0000              add [bx+si],al\r
+000002E4  0000              add [bx+si],al\r
+000002E6  0000              add [bx+si],al\r
+000002E8  0000              add [bx+si],al\r
+000002EA  0000              add [bx+si],al\r
+000002EC  0000              add [bx+si],al\r
+000002EE  0000              add [bx+si],al\r
+000002F0  0000              add [bx+si],al\r
+000002F2  0000              add [bx+si],al\r
+000002F4  0000              add [bx+si],al\r
+000002F6  0000              add [bx+si],al\r
+000002F8  0000              add [bx+si],al\r
+000002FA  3C27              cmp al,0x27\r
+000002FC  0100              add [bx+si],ax\r
+000002FE  0000              add [bx+si],al\r
+00000300  0000              add [bx+si],al\r
+00000302  0000              add [bx+si],al\r
+00000304  0000              add [bx+si],al\r
+00000306  0000              add [bx+si],al\r
+00000308  0000              add [bx+si],al\r
+0000030A  0000              add [bx+si],al\r
+0000030C  0000              add [bx+si],al\r
+0000030E  0000              add [bx+si],al\r
+00000310  0000              add [bx+si],al\r
+00000312  0000              add [bx+si],al\r
+00000314  0000              add [bx+si],al\r
+00000316  0000              add [bx+si],al\r
+00000318  0000              add [bx+si],al\r
+0000031A  0000              add [bx+si],al\r
+0000031C  0000              add [bx+si],al\r
+0000031E  0000              add [bx+si],al\r
+00000320  0000              add [bx+si],al\r
+00000322  0000              add [bx+si],al\r
+00000324  0000              add [bx+si],al\r
+00000326  0000              add [bx+si],al\r
+00000328  0000              add [bx+si],al\r
+0000032A  0000              add [bx+si],al\r
+0000032C  0000              add [bx+si],al\r
+0000032E  0000              add [bx+si],al\r
+00000330  0000              add [bx+si],al\r
+00000332  0000              add [bx+si],al\r
+00000334  0000              add [bx+si],al\r
+00000336  0000              add [bx+si],al\r
+00000338  0000              add [bx+si],al\r
+0000033A  0000              add [bx+si],al\r
+0000033C  0000              add [bx+si],al\r
+0000033E  0000              add [bx+si],al\r
+00000340  0000              add [bx+si],al\r
+00000342  0000              add [bx+si],al\r
+00000344  0000              add [bx+si],al\r
+00000346  0000              add [bx+si],al\r
+00000348  0000              add [bx+si],al\r
+0000034A  0000              add [bx+si],al\r
+0000034C  0000              add [bx+si],al\r
+0000034E  0000              add [bx+si],al\r
+00000350  0000              add [bx+si],al\r
+00000352  0000              add [bx+si],al\r
+00000354  0000              add [bx+si],al\r
+00000356  0000              add [bx+si],al\r
+00000358  0000              add [bx+si],al\r
+0000035A  0000              add [bx+si],al\r
+0000035C  0000              add [bx+si],al\r
+0000035E  0000              add [bx+si],al\r
+00000360  0000              add [bx+si],al\r
+00000362  0000              add [bx+si],al\r
+00000364  0000              add [bx+si],al\r
+00000366  0000              add [bx+si],al\r
+00000368  0000              add [bx+si],al\r
+0000036A  0000              add [bx+si],al\r
+0000036C  0000              add [bx+si],al\r
+0000036E  0000              add [bx+si],al\r
+00000370  0000              add [bx+si],al\r
+00000372  0000              add [bx+si],al\r
+00000374  0000              add [bx+si],al\r
+00000376  0000              add [bx+si],al\r
+00000378  0000              add [bx+si],al\r
+0000037A  0000              add [bx+si],al\r
+0000037C  0000              add [bx+si],al\r
+0000037E  0000              add [bx+si],al\r
+00000380  0000              add [bx+si],al\r
+00000382  0000              add [bx+si],al\r
+00000384  0000              add [bx+si],al\r
+00000386  0000              add [bx+si],al\r
+00000388  0000              add [bx+si],al\r
+0000038A  0000              add [bx+si],al\r
+0000038C  0000              add [bx+si],al\r
+0000038E  0000              add [bx+si],al\r
+00000390  0000              add [bx+si],al\r
+00000392  0000              add [bx+si],al\r
+00000394  0000              add [bx+si],al\r
+00000396  0000              add [bx+si],al\r
+00000398  0000              add [bx+si],al\r
+0000039A  0000              add [bx+si],al\r
+0000039C  0000              add [bx+si],al\r
+0000039E  0000              add [bx+si],al\r
+000003A0  0000              add [bx+si],al\r
+000003A2  0000              add [bx+si],al\r
+000003A4  0000              add [bx+si],al\r
+000003A6  0000              add [bx+si],al\r
+000003A8  0000              add [bx+si],al\r
+000003AA  0000              add [bx+si],al\r
+000003AC  0000              add [bx+si],al\r
+000003AE  0000              add [bx+si],al\r
+000003B0  0000              add [bx+si],al\r
+000003B2  0000              add [bx+si],al\r
+000003B4  0000              add [bx+si],al\r
+000003B6  0000              add [bx+si],al\r
+000003B8  0000              add [bx+si],al\r
+000003BA  0000              add [bx+si],al\r
+000003BC  0000              add [bx+si],al\r
+000003BE  0000              add [bx+si],al\r
+000003C0  0000              add [bx+si],al\r
+000003C2  0000              add [bx+si],al\r
+000003C4  0000              add [bx+si],al\r
+000003C6  0000              add [bx+si],al\r
+000003C8  0000              add [bx+si],al\r
+000003CA  0000              add [bx+si],al\r
+000003CC  0000              add [bx+si],al\r
+000003CE  0000              add [bx+si],al\r
+000003D0  0000              add [bx+si],al\r
+000003D2  0000              add [bx+si],al\r
+000003D4  0000              add [bx+si],al\r
+000003D6  0000              add [bx+si],al\r
+000003D8  0000              add [bx+si],al\r
+000003DA  0000              add [bx+si],al\r
+000003DC  0000              add [bx+si],al\r
+000003DE  0000              add [bx+si],al\r
+000003E0  0000              add [bx+si],al\r
+000003E2  0000              add [bx+si],al\r
+000003E4  0000              add [bx+si],al\r
+000003E6  0000              add [bx+si],al\r
+000003E8  0000              add [bx+si],al\r
+000003EA  0000              add [bx+si],al\r
+000003EC  0000              add [bx+si],al\r
+000003EE  0000              add [bx+si],al\r
+000003F0  0000              add [bx+si],al\r
+000003F2  0000              add [bx+si],al\r
+000003F4  0000              add [bx+si],al\r
+000003F6  0000              add [bx+si],al\r
+000003F8  0000              add [bx+si],al\r
+000003FA  0000              add [bx+si],al\r
+000003FC  0000              add [bx+si],al\r
+000003FE  0000              add [bx+si],al\r
+00000400  0000              add [bx+si],al\r
+00000402  0000              add [bx+si],al\r
+00000404  0000              add [bx+si],al\r
+00000406  0000              add [bx+si],al\r
+00000408  0000              add [bx+si],al\r
+0000040A  0000              add [bx+si],al\r
+0000040C  0000              add [bx+si],al\r
+0000040E  0000              add [bx+si],al\r
+00000410  0000              add [bx+si],al\r
+00000412  0000              add [bx+si],al\r
+00000414  0000              add [bx+si],al\r
+00000416  0000              add [bx+si],al\r
+00000418  0000              add [bx+si],al\r
+0000041A  0000              add [bx+si],al\r
+0000041C  0000              add [bx+si],al\r
+0000041E  0000              add [bx+si],al\r
+00000420  0000              add [bx+si],al\r
+00000422  0000              add [bx+si],al\r
+00000424  0000              add [bx+si],al\r
+00000426  0000              add [bx+si],al\r
+00000428  0000              add [bx+si],al\r
+0000042A  0000              add [bx+si],al\r
+0000042C  0000              add [bx+si],al\r
+0000042E  0000              add [bx+si],al\r
+00000430  0000              add [bx+si],al\r
+00000432  0000              add [bx+si],al\r
+00000434  0000              add [bx+si],al\r
+00000436  0000              add [bx+si],al\r
+00000438  0000              add [bx+si],al\r
+0000043A  0000              add [bx+si],al\r
+0000043C  0000              add [bx+si],al\r
+0000043E  0000              add [bx+si],al\r
+00000440  0000              add [bx+si],al\r
+00000442  0000              add [bx+si],al\r
+00000444  0000              add [bx+si],al\r
+00000446  0000              add [bx+si],al\r
+00000448  0000              add [bx+si],al\r
+0000044A  0000              add [bx+si],al\r
+0000044C  0000              add [bx+si],al\r
+0000044E  0000              add [bx+si],al\r
+00000450  0000              add [bx+si],al\r
+00000452  0000              add [bx+si],al\r
+00000454  0000              add [bx+si],al\r
+00000456  0000              add [bx+si],al\r
+00000458  0000              add [bx+si],al\r
+0000045A  0000              add [bx+si],al\r
+0000045C  0000              add [bx+si],al\r
+0000045E  0000              add [bx+si],al\r
+00000460  0000              add [bx+si],al\r
+00000462  0000              add [bx+si],al\r
+00000464  0000              add [bx+si],al\r
+00000466  0000              add [bx+si],al\r
+00000468  0000              add [bx+si],al\r
+0000046A  0000              add [bx+si],al\r
+0000046C  0000              add [bx+si],al\r
+0000046E  0000              add [bx+si],al\r
+00000470  0000              add [bx+si],al\r
+00000472  0000              add [bx+si],al\r
+00000474  0000              add [bx+si],al\r
+00000476  0000              add [bx+si],al\r
+00000478  0000              add [bx+si],al\r
+0000047A  0000              add [bx+si],al\r
+0000047C  0000              add [bx+si],al\r
+0000047E  0000              add [bx+si],al\r
+00000480  0000              add [bx+si],al\r
+00000482  0000              add [bx+si],al\r
+00000484  0000              add [bx+si],al\r
+00000486  0000              add [bx+si],al\r
+00000488  0000              add [bx+si],al\r
+0000048A  0000              add [bx+si],al\r
+0000048C  0000              add [bx+si],al\r
+0000048E  0000              add [bx+si],al\r
+00000490  0000              add [bx+si],al\r
+00000492  0000              add [bx+si],al\r
+00000494  0000              add [bx+si],al\r
+00000496  0000              add [bx+si],al\r
+00000498  0000              add [bx+si],al\r
+0000049A  0000              add [bx+si],al\r
+0000049C  0000              add [bx+si],al\r
+0000049E  0000              add [bx+si],al\r
+000004A0  0000              add [bx+si],al\r
+000004A2  0000              add [bx+si],al\r
+000004A4  0000              add [bx+si],al\r
+000004A6  0000              add [bx+si],al\r
+000004A8  0000              add [bx+si],al\r
+000004AA  0000              add [bx+si],al\r
+000004AC  0000              add [bx+si],al\r
+000004AE  0000              add [bx+si],al\r
+000004B0  0000              add [bx+si],al\r
+000004B2  0000              add [bx+si],al\r
+000004B4  0000              add [bx+si],al\r
+000004B6  0000              add [bx+si],al\r
+000004B8  0000              add [bx+si],al\r
+000004BA  0000              add [bx+si],al\r
+000004BC  0000              add [bx+si],al\r
+000004BE  0000              add [bx+si],al\r
+000004C0  0000              add [bx+si],al\r
+000004C2  0000              add [bx+si],al\r
+000004C4  0000              add [bx+si],al\r
+000004C6  0000              add [bx+si],al\r
+000004C8  0000              add [bx+si],al\r
+000004CA  0000              add [bx+si],al\r
+000004CC  0000              add [bx+si],al\r
+000004CE  0000              add [bx+si],al\r
+000004D0  0000              add [bx+si],al\r
+000004D2  0000              add [bx+si],al\r
+000004D4  0000              add [bx+si],al\r
+000004D6  0000              add [bx+si],al\r
+000004D8  0000              add [bx+si],al\r
+000004DA  0000              add [bx+si],al\r
+000004DC  0000              add [bx+si],al\r
+000004DE  0000              add [bx+si],al\r
+000004E0  0000              add [bx+si],al\r
+000004E2  0000              add [bx+si],al\r
+000004E4  0000              add [bx+si],al\r
+000004E6  0000              add [bx+si],al\r
+000004E8  0000              add [bx+si],al\r
+000004EA  0000              add [bx+si],al\r
+000004EC  0000              add [bx+si],al\r
+000004EE  0000              add [bx+si],al\r
+000004F0  0000              add [bx+si],al\r
+000004F2  0000              add [bx+si],al\r
+000004F4  0000              add [bx+si],al\r
+000004F6  0000              add [bx+si],al\r
+000004F8  0000              add [bx+si],al\r
+000004FA  0000              add [bx+si],al\r
+000004FC  0000              add [bx+si],al\r
+000004FE  0000              add [bx+si],al\r
+00000500  0000              add [bx+si],al\r
+00000502  0000              add [bx+si],al\r
+00000504  0000              add [bx+si],al\r
+00000506  0000              add [bx+si],al\r
+00000508  0000              add [bx+si],al\r
+0000050A  0000              add [bx+si],al\r
+0000050C  0000              add [bx+si],al\r
+0000050E  0000              add [bx+si],al\r
+00000510  0000              add [bx+si],al\r
+00000512  0000              add [bx+si],al\r
+00000514  0000              add [bx+si],al\r
+00000516  0000              add [bx+si],al\r
+00000518  0000              add [bx+si],al\r
+0000051A  0000              add [bx+si],al\r
+0000051C  0000              add [bx+si],al\r
+0000051E  0000              add [bx+si],al\r
+00000520  0000              add [bx+si],al\r
+00000522  0000              add [bx+si],al\r
+00000524  0000              add [bx+si],al\r
+00000526  0000              add [bx+si],al\r
+00000528  0000              add [bx+si],al\r
+0000052A  0000              add [bx+si],al\r
+0000052C  0000              add [bx+si],al\r
+0000052E  0000              add [bx+si],al\r
+00000530  0000              add [bx+si],al\r
+00000532  0000              add [bx+si],al\r
+00000534  0000              add [bx+si],al\r
+00000536  0000              add [bx+si],al\r
+00000538  0000              add [bx+si],al\r
+0000053A  0000              add [bx+si],al\r
+0000053C  0000              add [bx+si],al\r
+0000053E  0000              add [bx+si],al\r
+00000540  0000              add [bx+si],al\r
+00000542  0000              add [bx+si],al\r
+00000544  0000              add [bx+si],al\r
+00000546  0000              add [bx+si],al\r
+00000548  0000              add [bx+si],al\r
+0000054A  0000              add [bx+si],al\r
+0000054C  0000              add [bx+si],al\r
+0000054E  0000              add [bx+si],al\r
+00000550  0000              add [bx+si],al\r
+00000552  0000              add [bx+si],al\r
+00000554  0000              add [bx+si],al\r
+00000556  0000              add [bx+si],al\r
+00000558  0000              add [bx+si],al\r
+0000055A  0000              add [bx+si],al\r
+0000055C  0000              add [bx+si],al\r
+0000055E  0000              add [bx+si],al\r
+00000560  0000              add [bx+si],al\r
+00000562  0000              add [bx+si],al\r
+00000564  0000              add [bx+si],al\r
+00000566  0000              add [bx+si],al\r
+00000568  0000              add [bx+si],al\r
+0000056A  0000              add [bx+si],al\r
+0000056C  0000              add [bx+si],al\r
+0000056E  0000              add [bx+si],al\r
+00000570  0000              add [bx+si],al\r
+00000572  0000              add [bx+si],al\r
+00000574  0000              add [bx+si],al\r
+00000576  0000              add [bx+si],al\r
+00000578  0000              add [bx+si],al\r
+0000057A  0000              add [bx+si],al\r
+0000057C  0000              add [bx+si],al\r
+0000057E  0000              add [bx+si],al\r
+00000580  0000              add [bx+si],al\r
+00000582  0000              add [bx+si],al\r
+00000584  0000              add [bx+si],al\r
+00000586  0000              add [bx+si],al\r
+00000588  0000              add [bx+si],al\r
+0000058A  0000              add [bx+si],al\r
+0000058C  0000              add [bx+si],al\r
+0000058E  0000              add [bx+si],al\r
+00000590  0000              add [bx+si],al\r
+00000592  0000              add [bx+si],al\r
+00000594  0000              add [bx+si],al\r
+00000596  0000              add [bx+si],al\r
+00000598  0000              add [bx+si],al\r
+0000059A  0000              add [bx+si],al\r
+0000059C  0000              add [bx+si],al\r
+0000059E  0000              add [bx+si],al\r
+000005A0  0000              add [bx+si],al\r
+000005A2  0000              add [bx+si],al\r
+000005A4  0000              add [bx+si],al\r
+000005A6  0000              add [bx+si],al\r
+000005A8  0000              add [bx+si],al\r
+000005AA  0000              add [bx+si],al\r
+000005AC  0000              add [bx+si],al\r
+000005AE  0000              add [bx+si],al\r
+000005B0  0000              add [bx+si],al\r
+000005B2  0000              add [bx+si],al\r
+000005B4  0000              add [bx+si],al\r
+000005B6  0000              add [bx+si],al\r
+000005B8  0000              add [bx+si],al\r
+000005BA  0000              add [bx+si],al\r
+000005BC  0000              add [bx+si],al\r
+000005BE  0000              add [bx+si],al\r
+000005C0  0000              add [bx+si],al\r
+000005C2  0000              add [bx+si],al\r
+000005C4  0000              add [bx+si],al\r
+000005C6  0000              add [bx+si],al\r
+000005C8  0000              add [bx+si],al\r
+000005CA  0000              add [bx+si],al\r
+000005CC  0000              add [bx+si],al\r
+000005CE  0000              add [bx+si],al\r
+000005D0  0000              add [bx+si],al\r
+000005D2  0000              add [bx+si],al\r
+000005D4  0000              add [bx+si],al\r
+000005D6  0000              add [bx+si],al\r
+000005D8  0000              add [bx+si],al\r
+000005DA  0000              add [bx+si],al\r
+000005DC  0000              add [bx+si],al\r
+000005DE  0000              add [bx+si],al\r
+000005E0  0000              add [bx+si],al\r
+000005E2  0000              add [bx+si],al\r
+000005E4  0000              add [bx+si],al\r
+000005E6  0000              add [bx+si],al\r
+000005E8  0000              add [bx+si],al\r
+000005EA  0000              add [bx+si],al\r
+000005EC  0000              add [bx+si],al\r
+000005EE  0000              add [bx+si],al\r
+000005F0  0000              add [bx+si],al\r
+000005F2  0000              add [bx+si],al\r
+000005F4  0000              add [bx+si],al\r
+000005F6  0000              add [bx+si],al\r
+000005F8  0000              add [bx+si],al\r
+000005FA  0000              add [bx+si],al\r
+000005FC  0000              add [bx+si],al\r
+000005FE  0000              add [bx+si],al\r
+00000600  0000              add [bx+si],al\r
+00000602  0000              add [bx+si],al\r
+00000604  0000              add [bx+si],al\r
+00000606  0000              add [bx+si],al\r
+00000608  0000              add [bx+si],al\r
+0000060A  0000              add [bx+si],al\r
+0000060C  0000              add [bx+si],al\r
+0000060E  0000              add [bx+si],al\r
+00000610  0000              add [bx+si],al\r
+00000612  0000              add [bx+si],al\r
+00000614  0000              add [bx+si],al\r
+00000616  0000              add [bx+si],al\r
+00000618  0000              add [bx+si],al\r
+0000061A  0000              add [bx+si],al\r
+0000061C  0000              add [bx+si],al\r
+0000061E  0000              add [bx+si],al\r
+00000620  0000              add [bx+si],al\r
+00000622  0000              add [bx+si],al\r
+00000624  0000              add [bx+si],al\r
+00000626  0000              add [bx+si],al\r
+00000628  0000              add [bx+si],al\r
+0000062A  0000              add [bx+si],al\r
+0000062C  0000              add [bx+si],al\r
+0000062E  0000              add [bx+si],al\r
+00000630  0000              add [bx+si],al\r
+00000632  195000            sbb [bx+si+0x0],dx\r
+00000635  006650            add [bp+0x50],ah\r
+00000638  6652              push edx\r
+0000063A  66BAD403B00A      mov edx,0xab003d4\r
+00000640  88FC              mov ah,bh\r
+00000642  66EF              out dx,eax\r
+00000644  6640              inc eax\r
+00000646  88DC              mov ah,bl\r
+00000648  66EF              out dx,eax\r
+0000064A  665A              pop edx\r
+0000064C  6658              pop eax\r
+0000064E  C3                ret\r
+0000064F  6653              push ebx\r
+00000651  6651              push ecx\r
+00000653  660FB60D          movzx ecx,byte [di]\r
+00000657  32060100          xor al,[0x1]\r
+0000065B  E80802            call 0x866\r
+0000065E  0000              add [bx+si],al\r
+00000660  E2F9              loop 0x65b\r
+00000662  66BB0000E85C      mov ebx,0x5ce80000\r
+00000668  0000              add [bx+si],al\r
+0000066A  006659            add [bp+0x59],ah\r
+0000066D  665B              pop ebx\r
+0000066F  C3                ret\r
+00000670  6650              push eax\r
+00000672  E81200            call 0x687\r
+00000675  0000              add [bx+si],al\r
+00000677  6689D8            mov eax,ebx\r
+0000067A  8A1D              mov bl,[di]\r
+0000067C  33060100          xor ax,[0x1]\r
+00000680  F6F3              div bl\r
+00000682  88C3              mov bl,al\r
+00000684  88E7              mov bh,ah\r
+00000686  6658              pop eax\r
+00000688  C3                ret\r
+00000689  6650              push eax\r
+0000068B  6652              push edx\r
+0000068D  66BAD403B00E      mov edx,0xeb003d4\r
+00000693  EE                out dx,al\r
+00000694  6642              inc edx\r
+00000696  EC                in al,dx\r
+00000697  88C7              mov bh,al\r
+00000699  B00F              mov al,0xf\r
+0000069B  664A              dec edx\r
+0000069D  EE                out dx,al\r
+0000069E  6642              inc edx\r
+000006A0  EC                in al,dx\r
+000006A1  88C3              mov bl,al\r
+000006A3  665A              pop edx\r
+000006A5  6658              pop eax\r
+000006A7  C3                ret\r
+000006A8  6650              push eax\r
+000006AA  6653              push ebx\r
+000006AC  6631C0            xor eax,eax\r
+000006AF  A03306            mov al,[0x633]\r
+000006B2  0100              add [bx+si],ax\r
+000006B4  F6E3              mul bl\r
+000006B6  660FB6DF          movzx ebx,bh\r
+000006BA  6601C3            add ebx,eax\r
+000006BD  E80500            call 0x6c5\r
+000006C0  0000              add [bx+si],al\r
+000006C2  665B              pop ebx\r
+000006C4  6658              pop eax\r
+000006C6  C3                ret\r
+000006C7  6650              push eax\r
+000006C9  6653              push ebx\r
+000006CB  6652              push edx\r
+000006CD  B00E              mov al,0xe\r
+000006CF  88FC              mov ah,bh\r
+000006D1  66BAD40366EF      mov edx,0xef6603d4\r
+000006D7  6640              inc eax\r
+000006D9  88DC              mov ah,bl\r
+000006DB  66EF              out dx,eax\r
+000006DD  665A              pop edx\r
+000006DF  665B              pop ebx\r
+000006E1  6658              pop eax\r
+000006E3  C3                ret\r
+000006E4  6650              push eax\r
+000006E6  6653              push ebx\r
+000006E8  A03306            mov al,[0x633]\r
+000006EB  0100              add [bx+si],ax\r
+000006ED  8A1D              mov bl,[di]\r
+000006EF  32060100          xor al,[0x1]\r
+000006F3  F6E3              mul bl\r
+000006F5  6648              dec eax\r
+000006F7  E88DFF            call 0x687\r
+000006FA  FF                db 0xFF\r
+000006FB  FF6639            jmp near [bp+0x39]\r
+000006FE  C3                ret\r
+000006FF  7507              jnz 0x708\r
+00000701  E83A01            call 0x83e\r
+00000704  0000              add [bx+si],al\r
+00000706  EB07              jmp short 0x70f\r
+00000708  6643              inc ebx\r
+0000070A  E8B8FF            call 0x6c5\r
+0000070D  FF                db 0xFF\r
+0000070E  FF665B            jmp near [bp+0x5b]\r
+00000711  6658              pop eax\r
+00000713  C3                ret\r
+00000714  6653              push ebx\r
+00000716  E86EFF            call 0x687\r
+00000719  FF                db 0xFF\r
+0000071A  FF6683            jmp near [bp-0x7d]\r
+0000071D  FB                sti\r
+0000071E  007407            add [si+0x7],dh\r
+00000721  664B              dec ebx\r
+00000723  E89FFF            call 0x6c5\r
+00000726  FF                db 0xFF\r
+00000727  FF665B            jmp near [bp+0x5b]\r
+0000072A  C3                ret\r
+0000072B  6653              push ebx\r
+0000072D  E857FF            call 0x687\r
+00000730  FF                db 0xFF\r
+00000731  FF6683            jmp near [bp-0x7d]\r
+00000734  FB                sti\r
+00000735  007413            add [si+0x13],dh\r
+00000738  E8D7FF            call 0x712\r
+0000073B  FF                db 0xFF\r
+0000073C  FFB707B3          push word [bx+0xb307]\r
+00000740  00E8              add al,ch\r
+00000742  0800              or [bx+si],al\r
+00000744  0000              add [bx+si],al\r
+00000746  E8C9FF            call 0x712\r
+00000749  FF                db 0xFF\r
+0000074A  FF665B            jmp near [bp+0x5b]\r
+0000074D  C3                ret\r
+0000074E  50                push ax\r
+0000074F  6653              push ebx\r
+00000751  80FB0D            cmp bl,0xd\r
+00000754  7507              jnz 0x75d\r
+00000756  E8BA00            call 0x813\r
+00000759  0000              add [bx+si],al\r
+0000075B  EB1F              jmp short 0x77c\r
+0000075D  80FB0A            cmp bl,0xa\r
+00000760  741A              jz 0x77c\r
+00000762  6653              push ebx\r
+00000764  E820FF            call 0x687\r
+00000767  FF                db 0xFF\r
+00000768  FF0F              dec word [bx]\r
+0000076A  B7C3              mov bh,0xc3\r
+0000076C  665B              pop ebx\r
+0000076E  2666899C0000      mov [es:si+0x0],ebx\r
+00000774  800B00            or byte [bp+di],0x0\r
+00000777  E868FF            call 0x6e2\r
+0000077A  FF                db 0xFF\r
+0000077B  FF665B            jmp near [bp+0x5b]\r
+0000077E  58                pop ax\r
+0000077F  C3                ret\r
+00000780  50                push ax\r
+00000781  53                push bx\r
+00000782  51                push cx\r
+00000783  52                push dx\r
+00000784  89D8              mov ax,bx\r
+00000786  88CF              mov bh,cl\r
+00000788  B90800            mov cx,0x8\r
+0000078B  0000              add [bx+si],al\r
+0000078D  C1C004            rol ax,0x4\r
+00000790  0FB6D0            movzx dx,al\r
+00000793  83E20F            and dx,byte +0xf\r
+00000796  83CA30            or dx,byte +0x30\r
+00000799  83FA39            cmp dx,byte +0x39\r
+0000079C  7603              jna 0x7a1\r
+0000079E  83C207            add dx,byte +0x7\r
+000007A1  88D3              mov bl,dl\r
+000007A3  E8A6FF            call 0x74c\r
+000007A6  FF                db 0xFF\r
+000007A7  FFE2              jmp dx\r
+000007A9  E35A              jcxz 0x805\r
+000007AB  59                pop cx\r
+000007AC  5B                pop bx\r
+000007AD  58                pop ax\r
+000007AE  C3                ret\r
+000007AF  50                push ax\r
+000007B0  6653              push ebx\r
+000007B2  88DC              mov ah,bl\r
+000007B4  E8D0FE            call 0x687\r
+000007B7  FF                db 0xFF\r
+000007B8  FF6689            jmp near [bp-0x77]\r
+000007BB  1D3406            sbb ax,0x634\r
+000007BE  0100              add [bx+si],ax\r
+000007C0  AC                lodsb\r
+000007C1  08C0              or al,al\r
+000007C3  7440              jz 0x805\r
+000007C5  3C0D              cmp al,0xd\r
+000007C7  751F              jnz 0x7e8\r
+000007C9  668B1D            mov ebx,[di]\r
+000007CC  3406              xor al,0x6\r
+000007CE  0100              add [bx+si],ax\r
+000007D0  E8F2FE            call 0x6c5\r
+000007D3  FF                db 0xFF\r
+000007D4  FF                db 0xFF\r
+000007D5  E83B00            call 0x813\r
+000007D8  0000              add [bx+si],al\r
+000007DA  E8AAFE            call 0x687\r
+000007DD  FF                db 0xFF\r
+000007DE  FF6689            jmp near [bp-0x77]\r
+000007E1  1D3406            sbb ax,0x634\r
+000007E4  0100              add [bx+si],ax\r
+000007E6  EBD8              jmp short 0x7c0\r
+000007E8  3C0A              cmp al,0xa\r
+000007EA  74D4              jz 0x7c0\r
+000007EC  0F                db 0x0F\r
+000007ED  B71D              mov bh,0x1d\r
+000007EF  3406              xor al,0x6\r
+000007F1  0100              add [bx+si],ax\r
+000007F3  266689841B00      mov [es:si+0x1b],eax\r
+000007F9  800B00            or byte [bp+di],0x0\r
+000007FC  66FF05            inc dword [di]\r
+000007FF  3406              xor al,0x6\r
+00000801  0100              add [bx+si],ax\r
+00000803  EBBB              jmp short 0x7c0\r
+00000805  668B1D            mov ebx,[di]\r
+00000808  3406              xor al,0x6\r
+0000080A  0100              add [bx+si],ax\r
+0000080C  E8B6FE            call 0x6c5\r
+0000080F  FF                db 0xFF\r
+00000810  FF665B            jmp near [bp+0x5b]\r
+00000813  58                pop ax\r
+00000814  C3                ret\r
+00000815  6653              push ebx\r
+00000817  E854FE            call 0x66e\r
+0000081A  FF                db 0xFF\r
+0000081B  FF8A3D32          dec word [bp+si+0x323d]\r
+0000081F  06                push es\r
+00000820  0100              add [bx+si],ax\r
+00000822  FECF              dec bh\r
+00000824  38FB              cmp bl,bh\r
+00000826  7207              jc 0x82f\r
+00000828  E81300            call 0x83e\r
+0000082B  0000              add [bx+si],al\r
+0000082D  EB0E              jmp short 0x83d\r
+0000082F  E83CFE            call 0x66e\r
+00000832  FF                db 0xFF\r
+00000833  FFB700FE          push word [bx+0xfe00]\r
+00000837  C3                ret\r
+00000838  E86BFE            call 0x6a6\r
+0000083B  FF                db 0xFF\r
+0000083C  FF665B            jmp near [bp+0x5b]\r
+0000083F  C3                ret\r
+00000840  E82300            call 0x866\r
+00000843  0000              add [bx+si],al\r
+00000845  6650              push eax\r
+00000847  6653              push ebx\r
+00000849  6631C0            xor eax,eax\r
+0000084C  A03206            mov al,[0x632]\r
+0000084F  0100              add [bx+si],ax\r
+00000851  8A1D              mov bl,[di]\r
+00000853  33060100          xor ax,[0x1]\r
+00000857  FEC8              dec al\r
+00000859  F6E3              mul bl\r
+0000085B  6689C3            mov ebx,eax\r
+0000085E  E864FE            call 0x6c5\r
+00000861  FF                db 0xFF\r
+00000862  FF665B            jmp near [bp+0x5b]\r
+00000865  6658              pop eax\r
+00000867  C3                ret\r
+00000868  50                push ax\r
+00000869  51                push cx\r
+0000086A  57                push di\r
+0000086B  56                push si\r
+0000086C  BF0080            mov di,0x8000\r
+0000086F  0B00              or ax,[bx+si]\r
+00000871  0FB635            movzx si,[di]\r
+00000874  33060100          xor ax,[0x1]\r
+00000878  D1E6              shl si,1\r
+0000087A  8A0D              mov cl,[di]\r
+0000087C  32060100          xor al,[0x1]\r
+00000880  FEC9              dec cl\r
+00000882  89F0              mov ax,si\r
+00000884  F6E1              mul cl\r
+00000886  66C1E802          shr eax,0x2\r
+0000088A  0F                db 0x0F\r
+0000088B  B7C8              mov bh,0xc8\r
+0000088D  81C60080          add si,0x8000\r
+00000891  0B00              or ax,[bx+si]\r
+00000893  F3A5              rep movsw\r
+00000895  8A0D              mov cl,[di]\r
+00000897  33060100          xor ax,[0x1]\r
+0000089B  D0E1              shl cl,1\r
+0000089D  A03206            mov al,[0x632]\r
+000008A0  0100              add [bx+si],ax\r
+000008A2  FEC8              dec al\r
+000008A4  F6E1              mul cl\r
+000008A6  0F                db 0x0F\r
+000008A7  B7F8              mov bh,0xf8\r
+000008A9  81C70080          add di,0x8000\r
+000008AD  0B00              or ax,[bx+si]\r
+000008AF  0FB60D            movzx cx,[di]\r
+000008B2  33060100          xor ax,[0x1]\r
+000008B6  D1E9              shr cx,1\r
+000008B8  B80007            mov ax,0x700\r
+000008BB  0007              add [bx],al\r
+000008BD  F3AB              rep stosw\r
+000008BF  5E                pop si\r
+000008C0  5F                pop di\r
+000008C1  59                pop cx\r
+000008C2  58                pop ax\r
+000008C3  C3                ret\r
+000008C4  66BB9301E8FA      mov ebx,0xfae80193\r
+000008CA  FD                std\r
+000008CB  FF                db 0xFF\r
+000008CC  FF                db 0xFF\r
+000008CD  BEE709            mov si,0x9e7\r
+000008D0  0100              add [bx+si],ax\r
+000008D2  B307              mov bl,0x7\r
+000008D4  E8D6FE            call 0x7ad\r
+000008D7  FF                db 0xFF\r
+000008D8  FF66BB            jmp near [bp-0x45]\r
+000008DB  C501              lds ax,[bx+di]\r
+000008DD  E8E5FD            call 0x6c5\r
+000008E0  FF                db 0xFF\r
+000008E1  FF                db 0xFF\r
+000008E2  BE040A            mov si,0xa04\r
+000008E5  0100              add [bx+si],ax\r
+000008E7  B302              mov bl,0x2\r
+000008E9  E8C1FE            call 0x7ad\r
+000008EC  FF                db 0xFF\r
+000008ED  FF66BB            jmp near [bp-0x45]\r
+000008F0  E301              jcxz 0x8f3\r
+000008F2  E8D0FD            call 0x6c5\r
+000008F5  FF                db 0xFF\r
+000008F6  FF                db 0xFF\r
+000008F7  BE150A            mov si,0xa15\r
+000008FA  0100              add [bx+si],ax\r
+000008FC  B307              mov bl,0x7\r
+000008FE  E8ACFE            call 0x7ad\r
+00000901  FF                db 0xFF\r
+00000902  FF66BB            jmp near [bp-0x45]\r
+00000905  1502E8            adc ax,0xe802\r
+00000908  BBFDFF            mov bx,0xfffd\r
+0000090B  FF                db 0xFF\r
+0000090C  BE270A            mov si,0xa27\r
+0000090F  0100              add [bx+si],ax\r
+00000911  B302              mov bl,0x2\r
+00000913  E897FE            call 0x7ad\r
+00000916  FF                db 0xFF\r
+00000917  FFB120B5          push word [bx+di+0xb520]\r
+0000091B  28E8              sub al,ch\r
+0000091D  8402              test [bp+si],al\r
+0000091F  0000              add [bx+si],al\r
+00000921  E8A402            call 0xbc8\r
+00000924  0000              add [bx+si],al\r
+00000926  66BB3302E898      mov ebx,0x98e80233\r
+0000092C  FD                std\r
+0000092D  FF                db 0xFF\r
+0000092E  FF                db 0xFF\r
+0000092F  BE380A            mov si,0xa38\r
+00000932  0100              add [bx+si],ax\r
+00000934  B307              mov bl,0x7\r
+00000936  E874FE            call 0x7ad\r
+00000939  FF                db 0xFF\r
+0000093A  FF66BB            jmp near [bp-0x45]\r
+0000093D  6502E8            gs add ch,al\r
+00000940  83FDFF            cmp bp,byte -0x1\r
+00000943  FF                db 0xFF\r
+00000944  BE4F0A            mov si,0xa4f\r
+00000947  0100              add [bx+si],ax\r
+00000949  B302              mov bl,0x2\r
+0000094B  E85FFE            call 0x7ad\r
+0000094E  FF                db 0xFF\r
+0000094F  FF                db 0xFF\r
+00000950  BFEE1D            mov di,0x1dee\r
+00000953  0100              add [bx+si],ax\r
+00000955  E837F8            call 0x18f\r
+00000958  FF                db 0xFF\r
+00000959  FF                db 0xFF\r
+0000095A  BE3202            mov si,0x232\r
+0000095D  0100              add [bx+si],ax\r
+0000095F  E8AFF8            call 0x211\r
+00000962  FF                db 0xFF\r
+00000963  FF                db 0xFF\r
+00000964  FB                sti\r
+00000965  66BB8302E859      mov ebx,0x59e80283\r
+0000096B  FD                std\r
+0000096C  FF                db 0xFF\r
+0000096D  FF                db 0xFF\r
+0000096E  BE600A            mov si,0xa60\r
+00000971  0100              add [bx+si],ax\r
+00000973  B307              mov bl,0x7\r
+00000975  E835FE            call 0x7ad\r
+00000978  FF                db 0xFF\r
+00000979  FF66BB            jmp near [bp-0x45]\r
+0000097C  B502              mov ch,0x2\r
+0000097E  E844FD            call 0x6c5\r
+00000981  FF                db 0xFF\r
+00000982  FF                db 0xFF\r
+00000983  BE720A            mov si,0xa72\r
+00000986  0100              add [bx+si],ax\r
+00000988  B302              mov bl,0x2\r
+0000098A  E820FE            call 0x7ad\r
+0000098D  FF                db 0xFF\r
+0000098E  FFB101E8          push word [bx+di+0xe801]\r
+00000992  4A                dec dx\r
+00000993  0200              add al,[bx+si]\r
+00000995  0066BB            add [bp-0x45],ah\r
+00000998  D302              rol word [bp+si],cl\r
+0000099A  E828FD            call 0x6c5\r
+0000099D  FF                db 0xFF\r
+0000099E  FF                db 0xFF\r
+0000099F  BE830A            mov si,0xa83\r
+000009A2  0100              add [bx+si],ax\r
+000009A4  B307              mov bl,0x7\r
+000009A6  E804FE            call 0x7ad\r
+000009A9  FF                db 0xFF\r
+000009AA  FF66BB            jmp near [bp-0x45]\r
+000009AD  0503E8            add ax,0xe803\r
+000009B0  13FD              adc di,bp\r
+000009B2  FF                db 0xFF\r
+000009B3  FF                db 0xFF\r
+000009B4  BE930A            mov si,0xa93\r
+000009B7  0100              add [bx+si],ax\r
+000009B9  B302              mov bl,0x2\r
+000009BB  E8EFFD            call 0x7ad\r
+000009BE  FF                db 0xFF\r
+000009BF  FF                db 0xFF\r
+000009C0  E8CA25            call 0x2f8d\r
+000009C3  0000              add [bx+si],al\r
+000009C5  E8D728            call 0x329f\r
+000009C8  0000              add [bx+si],al\r
+000009CA  B100              mov cl,0x0\r
+000009CC  E80F02            call 0xbde\r
+000009CF  0000              add [bx+si],al\r
+000009D1  BB0000            mov bx,0x0\r
+000009D4  1000              adc [bx+si],al\r
+000009D6  8B0D              mov cx,[di]\r
+000009D8  C8000100          enter 0x100,0x0\r
+000009DC  E85939            call 0x4338\r
+000009DF  0000              add [bx+si],al\r
+000009E1  E8152E            call 0x37f9\r
+000009E4  0000              add [bx+si],al\r
+000009E6  C3                ret\r
+000009E7  53                push bx\r
+000009E8  657474            gs jz 0xa5f\r
+000009EB  696E672075        imul bp,[bp+0x67],word 0x7520\r
+000009F0  7020              jo 0xa12\r
+000009F2  7072              jo 0xa66\r
+000009F4  6F                outsw\r
+000009F5  7465              jz 0xa5c\r
+000009F7  637465            arpl [si+0x65],si\r
+000009FA  64206D6F          and [fs:di+0x6f],ch\r
+000009FE  64652E2E2E005B20  add [cs:bp+di+0x20],bl\r
+00000A06  3332              xor si,[bp+si]\r
+00000A08  2D6269            sub ax,0x6962\r
+00000A0B  7473              jz 0xa80\r
+00000A0D  204F4B            and [bx+0x4b],cl\r
+00000A10  2020              and [bx+si],ah\r
+00000A12  205D00            and [di+0x0],bl\r
+00000A15  4C                dec sp\r
+00000A16  6F                outsw\r
+00000A17  61                popa\r
+00000A18  64696E67206B      imul bp,[fs:bp+0x67],word 0x6b20\r
+00000A1E  65726E            gs jc 0xa8f\r
+00000A21  656C              gs insb\r
+00000A23  2E2E2E005B20      add [cs:bp+di+0x20],bl\r
+00000A29  4F                dec di\r
+00000A2A  4B                dec bx\r
+00000A2B  2020              and [bx+si],ah\r
+00000A2D  2020              and [bx+si],ah\r
+00000A2F  2020              and [bx+si],ah\r
+00000A31  2020              and [bx+si],ah\r
+00000A33  2020              and [bx+si],ah\r
+00000A35  205D00            and [di+0x0],bl\r
+00000A38  46                inc si\r
+00000A39  6978696E67        imul di,[bx+si+0x69],word 0x676e\r
+00000A3E  205049            and [bx+si+0x49],dl\r
+00000A41  43                inc bx\r
+00000A42  20616E            and [bx+di+0x6e],ah\r
+00000A45  64204952          and [fs:bx+di+0x52],cl\r
+00000A49  51                push cx\r
+00000A4A  732E              jnc 0xa7a\r
+00000A4C  2E2E005B20        add [cs:bp+di+0x20],bl\r
+00000A51  44                inc sp\r
+00000A52  6F                outsw\r
+00000A53  6E                outsb\r
+00000A54  652020            and [gs:bx+si],ah\r
+00000A57  2020              and [bx+si],ah\r
+00000A59  2020              and [bx+si],ah\r
+00000A5B  2020              and [bx+si],ah\r
+00000A5D  205D00            and [di+0x0],bl\r
+00000A60  53                push bx\r
+00000A61  657474            gs jz 0xad8\r
+00000A64  696E672075        imul bp,[bp+0x67],word 0x7520\r
+00000A69  7020              jo 0xa8b\r
+00000A6B  49                dec cx\r
+00000A6C  44                inc sp\r
+00000A6D  54                push sp\r
+00000A6E  2E2E2E005B20      add [cs:bp+di+0x20],bl\r
+00000A74  49                dec cx\r
+00000A75  44                inc sp\r
+00000A76  54                push sp\r
+00000A77  204F4B            and [bx+0x4b],cl\r
+00000A7A  2020              and [bx+si],ah\r
+00000A7C  2020              and [bx+si],ah\r
+00000A7E  2020              and [bx+si],ah\r
+00000A80  205D00            and [di+0x0],bl\r
+00000A83  45                inc bp\r
+00000A84  6E                outsb\r
+00000A85  61                popa\r
+00000A86  626C65            bound bp,[si+0x65]\r
+00000A89  7320              jnc 0xaab\r
+00000A8B  49                dec cx\r
+00000A8C  52                push dx\r
+00000A8D  51                push cx\r
+00000A8E  312E2E2E          xor [0x2e2e],bp\r
+00000A92  005B20            add [bp+di+0x20],bl\r
+00000A95  4B                dec bx\r
+00000A96  657962            gs jns 0xafb\r
+00000A99  6F                outsw\r
+00000A9A  61                popa\r
+00000A9B  7264              jc 0xb01\r
+00000A9D  204F4B            and [bx+0x4b],cl\r
+00000AA0  2020              and [bx+si],ah\r
+00000AA2  5D                pop bp\r
+00000AA3  00424F            add [bp+si+0x4f],al\r
+00000AA6  53                push bx\r
+00000AA7  207368            and [bp+di+0x68],dh\r
+00000AAA  656C              gs insb\r
+00000AAC  6C                insb\r
+00000AAD  2E205479          and [cs:si+0x79],dl\r
+00000AB1  7065              jo 0xb18\r
+00000AB3  2022              and [bp+si],ah\r
+00000AB5  68656C            push word 0x6c65\r
+00000AB8  7022              jo 0xadc\r
+00000ABA  20666F            and [bp+0x6f],ah\r
+00000ABD  7220              jc 0xadf\r
+00000ABF  6D                insw\r
+00000AC0  6F                outsw\r
+00000AC1  7265              jc 0xb28\r
+00000AC3  20696E            and [bx+di+0x6e],ch\r
+00000AC6  666F              outsd\r
+00000AC8  2E0D0A00          cs or ax,0xa\r
+00000ACC  60                pusha\r
+00000ACD  50                push ax\r
+00000ACE  C1E810            shr ax,0x10\r
+00000AD1  66A3C000          mov [0xc0],eax\r
+00000AD5  0100              add [bx+si],ax\r
+00000AD7  58                pop ax\r
+00000AD8  53                push bx\r
+00000AD9  C1EB10            shr bx,0x10\r
+00000ADC  881D              mov [di],bl\r
+00000ADE  BE0001            mov si,0x100\r
+00000AE1  005BC6            add [bp+di-0x3a],bl\r
+00000AE4  05BF00            add ax,0xbf\r
+00000AE7  0100              add [bx+si],ax\r
+00000AE9  006689            add [bp-0x77],ah\r
+00000AEC  1DC200            sbb ax,0xc2\r
+00000AEF  0100              add [bx+si],ax\r
+00000AF1  66890D            mov [di],ecx\r
+00000AF4  C400              les ax,[bx+si]\r
+00000AF6  0100              add [bx+si],ax\r
+00000AF8  668915            mov [di],edx\r
+00000AFB  C60001            mov byte [bx+si],0x1\r
+00000AFE  00E8              add al,ch\r
+00000B00  C60000            mov byte [bx+si],0x0\r
+00000B03  00EA              add dl,ch\r
+00000B05  0B0B              or cx,[bp+di]\r
+00000B07  0000              add [bx+si],al\r
+00000B09  1800              sbb [bx+si],al\r
+00000B0B  B82000            mov ax,0x20\r
+00000B0E  8ED8              mov ds,ax\r
+00000B10  8EC0              mov es,ax\r
+00000B12  8EE0              mov fs,ax\r
+00000B14  8EE8              mov gs,ax\r
+00000B16  8ED0              mov ss,ax\r
+00000B18  FA                cli\r
+00000B19  0F20C0            mov eax,cr0\r
+00000B1C  24FE              and al,0xfe\r
+00000B1E  0F22C0            mov cr0,eax\r
+00000B21  EA260B0010        jmp 0x1000:0xb26\r
+00000B26  8CC8              mov ax,cs\r
+00000B28  8ED8              mov ds,ax\r
+00000B2A  31C0              xor ax,ax\r
+00000B2C  8EC0              mov es,ax\r
+00000B2E  8EE0              mov fs,ax\r
+00000B30  8EE8              mov gs,ax\r
+00000B32  8ED0              mov ss,ax\r
+00000B34  0F011EB800        lidt [0xb8]\r
+00000B39  FB                sti\r
+00000B3A  A1C000            mov ax,[0xc0]\r
+00000B3D  8B1EC200          mov bx,[0xc2]\r
+00000B41  8B0EC400          mov cx,[0xc4]\r
+00000B45  8B16C600          mov dx,[0xc6]\r
+00000B49  50                push ax\r
+00000B4A  A0BE00            mov al,[0xbe]\r
+00000B4D  A2520B            mov [0xb52],al\r
+00000B50  58                pop ax\r
+00000B51  CD00              int 0x0\r
+00000B53  7305              jnc 0xb5a\r
+00000B55  C606BF0001        mov byte [0xbf],0x1\r
+00000B5A  A3C000            mov [0xc0],ax\r
+00000B5D  891EC200          mov [0xc2],bx\r
+00000B61  890EC400          mov [0xc4],cx\r
+00000B65  8916C600          mov [0xc6],dx\r
+00000B69  FA                cli\r
+00000B6A  0F01164000        lgdt [0x40]\r
+00000B6F  0F011E6E00        lidt [0x6e]\r
+00000B74  0F20C0            mov eax,cr0\r
+00000B77  0C01              or al,0x1\r
+00000B79  0F22C0            mov cr0,eax\r
+00000B7C  66EA840B01000800  jmp dword 0x8:0x10b84\r
+00000B84  66B810008ED8      mov eax,0xd88e0010\r
+00000B8A  8EC0              mov es,ax\r
+00000B8C  8EE0              mov fs,ax\r
+00000B8E  8EE8              mov gs,ax\r
+00000B90  8ED0              mov ss,ax\r
+00000B92  E83E00            call 0xbd3\r
+00000B95  0000              add [bx+si],al\r
+00000B97  FB                sti\r
+00000B98  61                popa\r
+00000B99  F8                clc\r
+00000B9A  803DBF            cmp byte [di],0xbf\r
+00000B9D  0001              add [bx+di],al\r
+00000B9F  0001              add [bx+di],al\r
+00000BA1  7501              jnz 0xba4\r
+00000BA3  F9                stc\r
+00000BA4  C3                ret\r
+00000BA5  6650              push eax\r
+00000BA7  6652              push edx\r
+00000BA9  B011              mov al,0x11\r
+00000BAB  E620              out 0x20,al\r
+00000BAD  E6A0              out 0xa0,al\r
+00000BAF  88C8              mov al,cl\r
+00000BB1  E621              out 0x21,al\r
+00000BB3  88E8              mov al,ch\r
+00000BB5  E6A1              out 0xa1,al\r
+00000BB7  B004              mov al,0x4\r
+00000BB9  E621              out 0x21,al\r
+00000BBB  B002              mov al,0x2\r
+00000BBD  E6A1              out 0xa1,al\r
+00000BBF  B001              mov al,0x1\r
+00000BC1  E621              out 0x21,al\r
+00000BC3  E6A1              out 0xa1,al\r
+00000BC5  665A              pop edx\r
+00000BC7  6658              pop eax\r
+00000BC9  C3                ret\r
+00000BCA  6650              push eax\r
+00000BCC  B0FF              mov al,0xff\r
+00000BCE  E621              out 0x21,al\r
+00000BD0  E6A1              out 0xa1,al\r
+00000BD2  6658              pop eax\r
+00000BD4  C3                ret\r
+00000BD5  6650              push eax\r
+00000BD7  B000              mov al,0x0\r
+00000BD9  E621              out 0x21,al\r
+00000BDB  E6A1              out 0xa1,al\r
+00000BDD  6658              pop eax\r
+00000BDF  C3                ret\r
+00000BE0  6650              push eax\r
+00000BE2  6651              push ecx\r
+00000BE4  80F908            cmp cl,0x8\r
+00000BE7  7215              jc 0xbfe\r
+00000BE9  80E908            sub cl,0x8\r
+00000BEC  B401              mov ah,0x1\r
+00000BEE  D2E4              shl ah,cl\r
+00000BF0  80F4FF            xor ah,0xff\r
+00000BF3  E4A1              in al,0xa1\r
+00000BF5  20E0              and al,ah\r
+00000BF7  E6A1              out 0xa1,al\r
+00000BF9  6659              pop ecx\r
+00000BFB  6658              pop eax\r
+00000BFD  C3                ret\r
+00000BFE  B401              mov ah,0x1\r
+00000C00  D2E4              shl ah,cl\r
+00000C02  80F4FF            xor ah,0xff\r
+00000C05  E421              in al,0x21\r
+00000C07  20E0              and al,ah\r
+00000C09  E621              out 0x21,al\r
+00000C0B  6659              pop ecx\r
+00000C0D  6658              pop eax\r
+00000C0F  C3                ret\r
+00000C10  6650              push eax\r
+00000C12  6651              push ecx\r
+00000C14  80F908            cmp cl,0x8\r
+00000C17  7212              jc 0xc2b\r
+00000C19  80E908            sub cl,0x8\r
+00000C1C  B401              mov ah,0x1\r
+00000C1E  D2E4              shl ah,cl\r
+00000C20  E4A1              in al,0xa1\r
+00000C22  08E0              or al,ah\r
+00000C24  E6A1              out 0xa1,al\r
+00000C26  6659              pop ecx\r
+00000C28  6658              pop eax\r
+00000C2A  C3                ret\r
+00000C2B  B401              mov ah,0x1\r
+00000C2D  D2E4              shl ah,cl\r
+00000C2F  E421              in al,0x21\r
+00000C31  08E0              or al,ah\r
+00000C33  E621              out 0x21,al\r
+00000C35  6659              pop ecx\r
+00000C37  6658              pop eax\r
+00000C39  C3                ret\r
+00000C3A  C9                leave\r
+00000C3B  CDCD              int 0xcd\r
+00000C3D  CDCD              int 0xcd\r
+00000C3F  CDCD              int 0xcd\r
+00000C41  CDCD              int 0xcd\r
+00000C43  CDCD              int 0xcd\r
+00000C45  CDCD              int 0xcd\r
+00000C47  CDCD              int 0xcd\r
+00000C49  CDCD              int 0xcd\r
+00000C4B  CDCD              int 0xcd\r
+00000C4D  CDCD              int 0xcd\r
+00000C4F  CDCD              int 0xcd\r
+00000C51  CDCD              int 0xcd\r
+00000C53  CDBB              int 0xbb\r
+00000C55  00BA2020          add [bp+si+0x2020],bh\r
+00000C59  2020              and [bx+si],ah\r
+00000C5B  1020              adc [bx+si],ah\r
+00000C5D  49                dec cx\r
+00000C5E  4E                dec si\r
+00000C5F  54                push sp\r
+00000C60  2033              and [bp+di],dh\r
+00000C62  3220              xor ah,[bx+si]\r
+00000C64  43                inc bx\r
+00000C65  41                inc cx\r
+00000C66  4C                dec sp\r
+00000C67  4C                dec sp\r
+00000C68  45                inc bp\r
+00000C69  44                inc sp\r
+00000C6A  2121              and [bx+di],sp\r
+00000C6C  2020              and [bx+si],ah\r
+00000C6E  2020              and [bx+si],ah\r
+00000C70  BA00BA            mov dx,0xba00\r
+00000C73  2020              and [bx+si],ah\r
+00000C75  2020              and [bx+si],ah\r
+00000C77  2020              and [bx+si],ah\r
+00000C79  2020              and [bx+si],ah\r
+00000C7B  2020              and [bx+si],ah\r
+00000C7D  0220              add ah,[bx+si]\r
+00000C7F  0120              add [bx+si],sp\r
+00000C81  2020              and [bx+si],ah\r
+00000C83  2020              and [bx+si],ah\r
+00000C85  2020              and [bx+si],ah\r
+00000C87  2020              and [bx+si],ah\r
+00000C89  2020              and [bx+si],ah\r
+00000C8B  20BA00C8          and [bp+si+0xc800],bh\r
+00000C8F  CDCD              int 0xcd\r
+00000C91  CDCD              int 0xcd\r
+00000C93  CDCD              int 0xcd\r
+00000C95  CDCD              int 0xcd\r
+00000C97  CDCD              int 0xcd\r
+00000C99  CDCD              int 0xcd\r
+00000C9B  CDCD              int 0xcd\r
+00000C9D  CDCD              int 0xcd\r
+00000C9F  CDCD              int 0xcd\r
+00000CA1  CDCD              int 0xcd\r
+00000CA3  CDCD              int 0xcd\r
+00000CA5  CDCD              int 0xcd\r
+00000CA7  CDBC              int 0xbc\r
+00000CA9  004354            add [bp+di+0x54],al\r
+00000CAC  52                push dx\r
+00000CAD  4C                dec sp\r
+00000CAE  2B414C            sub ax,[bx+di+0x4c]\r
+00000CB1  54                push sp\r
+00000CB2  2B4445            sub ax,[si+0x45]\r
+00000CB5  4C                dec sp\r
+00000CB6  207761            and [bx+0x61],dh\r
+00000CB9  7320              jnc 0xcdb\r
+00000CBB  7072              jo 0xd2f\r
+00000CBD  657373            gs jnc 0xd33\r
+00000CC0  65642100          and [fs:bx+si],ax\r
+00000CC4  6683F801          cmp eax,byte +0x1\r
+00000CC8  750A              jnz 0xcd4\r
+00000CCA  E85602            call 0xf23\r
+00000CCD  0000              add [bx+si],al\r
+00000CCF  E99900            jmp 0xd6b\r
+00000CD2  0000              add [bx+si],al\r
+00000CD4  663DDECA7533      cmp eax,0x3375cade\r
+00000CDA  6653              push ebx\r
+00000CDC  6651              push ecx\r
+00000CDE  6652              push edx\r
+00000CE0  E8A4F9            call 0x687\r
+00000CE3  FF                db 0xFF\r
+00000CE4  FF6689            jmp near [bp-0x77]\r
+00000CE7  D9B20CB6          fnstenv [bp+si+0xb60c]\r
+00000CEB  1BE8              sbb bp,ax\r
+00000CED  B7F9              mov bh,0xf9\r
+00000CEF  FF                db 0xFF\r
+00000CF0  FF                db 0xFF\r
+00000CF1  BEAA0C            mov si,0xcaa\r
+00000CF4  0100              add [bx+si],ax\r
+00000CF6  B040              mov al,0x40\r
+00000CF8  E8B2FA            call 0x7ad\r
+00000CFB  FF                db 0xFF\r
+00000CFC  FF6689            jmp near [bp-0x77]\r
+00000CFF  CB                retf\r
+00000D00  E8C2F9            call 0x6c5\r
+00000D03  FF                db 0xFF\r
+00000D04  FF665A            jmp near [bp+0x5a]\r
+00000D07  6659              pop ecx\r
+00000D09  665B              pop ebx\r
+00000D0B  EB60              jmp short 0xd6d\r
+00000D0D  6653              push ebx\r
+00000D0F  6651              push ecx\r
+00000D11  6652              push edx\r
+00000D13  B20B              mov dl,0xb\r
+00000D15  B61A              mov dh,0x1a\r
+00000D17  E88CF9            call 0x6a6\r
+00000D1A  FF                db 0xFF\r
+00000D1B  FF                db 0xFF\r
+00000D1C  BE3A0C            mov si,0xc3a\r
+00000D1F  0100              add [bx+si],ax\r
+00000D21  B340              mov bl,0x40\r
+00000D23  E887FA            call 0x7ad\r
+00000D26  FF                db 0xFF\r
+00000D27  FFB20CB6          push word [bp+si+0xb60c]\r
+00000D2B  1AE8              sbb ch,al\r
+00000D2D  77F9              ja 0xd28\r
+00000D2F  FF                db 0xFF\r
+00000D30  FF                db 0xFF\r
+00000D31  BE560C            mov si,0xc56\r
+00000D34  0100              add [bx+si],ax\r
+00000D36  B340              mov bl,0x40\r
+00000D38  E872FA            call 0x7ad\r
+00000D3B  FF                db 0xFF\r
+00000D3C  FFB20DB6          push word [bp+si+0xb60d]\r
+00000D40  1AE8              sbb ch,al\r
+00000D42  62                db 0x62\r
+00000D43  F9                stc\r
+00000D44  FF                db 0xFF\r
+00000D45  FF                db 0xFF\r
+00000D46  BE720C            mov si,0xc72\r
+00000D49  0100              add [bx+si],ax\r
+00000D4B  B340              mov bl,0x40\r
+00000D4D  E85DFA            call 0x7ad\r
+00000D50  FF                db 0xFF\r
+00000D51  FFB20EB6          push word [bp+si+0xb60e]\r
+00000D55  1AE8              sbb ch,al\r
+00000D57  4D                dec bp\r
+00000D58  F9                stc\r
+00000D59  FF                db 0xFF\r
+00000D5A  FF                db 0xFF\r
+00000D5B  BE8E0C            mov si,0xc8e\r
+00000D5E  0100              add [bx+si],ax\r
+00000D60  B340              mov bl,0x40\r
+00000D62  E848FA            call 0x7ad\r
+00000D65  FF                db 0xFF\r
+00000D66  FF665A            jmp near [bp+0x5a]\r
+00000D69  6659              pop ecx\r
+00000D6B  665B              pop ebx\r
+00000D6D  C3                ret\r
+00000D6E  2020              and [bx+si],ah\r
+00000D70  2020              and [bx+si],ah\r
+00000D72  2020              and [bx+si],ah\r
+00000D74  2020              and [bx+si],ah\r
+00000D76  2020              and [bx+si],ah\r
+00000D78  204120            and [bx+di+0x20],al\r
+00000D7B  36342D            ss xor al,0x2d\r
+00000D7E  627974            bound di,[bx+di+0x74]\r
+00000D81  652020            and [gs:bx+si],ah\r
+00000D84  2020              and [bx+si],ah\r
+00000D86  2020              and [bx+si],ah\r
+00000D88  2020              and [bx+si],ah\r
+00000D8A  2020              and [bx+si],ah\r
+00000D8C  2020              and [bx+si],ah\r
+00000D8E  2020              and [bx+si],ah\r
+00000D90  2020              and [bx+si],ah\r
+00000D92  2020              and [bx+si],ah\r
+00000D94  2020              and [bx+si],ah\r
+00000D96  6B657962          imul sp,[di+0x79],byte +0x62\r
+00000D9A  6F                outsw\r
+00000D9B  61                popa\r
+00000D9C  7264              jc 0xe02\r
+00000D9E  206275            and [bp+si+0x75],ah\r
+00000DA1  6666657220        gs o32 jc 0xdc6\r
+00000DA6  2020              and [bx+si],ah\r
+00000DA8  2020              and [bx+si],ah\r
+00000DAA  2020              and [bx+si],ah\r
+00000DAC  2020              and [bx+si],ah\r
+00000DAE  0100              add [bx+si],ax\r
+00000DB0  0000              add [bx+si],al\r
+00000DB2  50                push ax\r
+00000DB3  31C0              xor ax,ax\r
+00000DB5  E460              in al,0x60\r
+00000DB7  A880              test al,0x80\r
+00000DB9  7455              jz 0xe10\r
+00000DBB  8025B0            and byte [di],0xb0\r
+00000DBE  0D0100            or ax,0x1\r
+00000DC1  7F3C              jg 0xdff\r
+00000DC3  AA                stosb\r
+00000DC4  7415              jz 0xddb\r
+00000DC6  3CB6              cmp al,0xb6\r
+00000DC8  7411              jz 0xddb\r
+00000DCA  3C9D              cmp al,0x9d\r
+00000DCC  741B              jz 0xde9\r
+00000DCE  3CD3              cmp al,0xd3\r
+00000DD0  7415              jz 0xde7\r
+00000DD2  3CB8              cmp al,0xb8\r
+00000DD4  741C              jz 0xdf2\r
+00000DD6  E9BA00            jmp 0xe93\r
+00000DD9  0000              add [bx+si],al\r
+00000DDB  8025B0            and byte [di],0xb0\r
+00000DDE  0D0100            or ax,0x1\r
+00000DE1  FE                db 0xFE\r
+00000DE2  E9AE00            jmp 0xe93\r
+00000DE5  0000              add [bx+si],al\r
+00000DE7  EB12              jmp short 0xdfb\r
+00000DE9  8025B0            and byte [di],0xb0\r
+00000DEC  0D0100            or ax,0x1\r
+00000DEF  FD                std\r
+00000DF0  EB09              jmp short 0xdfb\r
+00000DF2  8025B0            and byte [di],0xb0\r
+00000DF5  0D0100            or ax,0x1\r
+00000DF8  FB                sti\r
+00000DF9  EB00              jmp short 0xdfb\r
+00000DFB  F605B0            test byte [di],0xb0\r
+00000DFE  0D0100            or ax,0x1\r
+00000E01  40                inc ax\r
+00000E02  7407              jz 0xe0b\r
+00000E04  8025B0            and byte [di],0xb0\r
+00000E07  0D0100            or ax,0x1\r
+00000E0A  BFE985            mov di,0x85e9\r
+00000E0D  0000              add [bx+si],al\r
+00000E0F  00800DB0          add [bx+si+0xb00d],al\r
+00000E13  0D0100            or ax,0x1\r
+00000E16  803C2A            cmp byte [si],0x2a\r
+00000E19  7509              jnz 0xe24\r
+00000E1B  800DB0            or byte [di],0xb0\r
+00000E1E  0D0100            or ax,0x1\r
+00000E21  01EB              add bx,bp\r
+00000E23  713C              jno 0xe61\r
+00000E25  367509            ss jnz 0xe31\r
+00000E28  800DB0            or byte [di],0xb0\r
+00000E2B  0D0100            or ax,0x1\r
+00000E2E  01EB              add bx,bp\r
+00000E30  643C1D            fs cmp al,0x1d\r
+00000E33  7509              jnz 0xe3e\r
+00000E35  800DB0            or byte [di],0xb0\r
+00000E38  0D0100            or ax,0x1\r
+00000E3B  02EB              add ch,bl\r
+00000E3D  57                push di\r
+00000E3E  3C38              cmp al,0x38\r
+00000E40  7509              jnz 0xe4b\r
+00000E42  800DB0            or byte [di],0xb0\r
+00000E45  0D0100            or ax,0x1\r
+00000E48  04EB              add al,0xeb\r
+00000E4A  4A                dec dx\r
+00000E4B  F605B0            test byte [di],0xb0\r
+00000E4E  0D0100            or ax,0x1\r
+00000E51  06                push es\r
+00000E52  740B              jz 0xe5f\r
+00000E54  3C53              cmp al,0x53\r
+00000E56  7507              jnz 0xe5f\r
+00000E58  800DB0            or byte [di],0xb0\r
+00000E5B  0D0100            or ax,0x1\r
+00000E5E  40                inc ax\r
+00000E5F  3C3A              cmp al,0x3a\r
+00000E61  750E              jnz 0xe71\r
+00000E63  8035B1            xor byte [di],0xb1\r
+00000E66  0D0100            or ax,0x1\r
+00000E69  04E8              add al,0xe8\r
+00000E6B  8400              test [bx+si],al\r
+00000E6D  0000              add [bx+si],al\r
+00000E6F  EB24              jmp short 0xe95\r
+00000E71  3C45              cmp al,0x45\r
+00000E73  750E              jnz 0xe83\r
+00000E75  8035B1            xor byte [di],0xb1\r
+00000E78  0D0100            or ax,0x1\r
+00000E7B  02E8              add ch,al\r
+00000E7D  7200              jc 0xe7f\r
+00000E7F  0000              add [bx+si],al\r
+00000E81  EB12              jmp short 0xe95\r
+00000E83  3C46              cmp al,0x46\r
+00000E85  750E              jnz 0xe95\r
+00000E87  8035B1            xor byte [di],0xb1\r
+00000E8A  0D0100            or ax,0x1\r
+00000E8D  01E8              add ax,bp\r
+00000E8F  60                pusha\r
+00000E90  0000              add [bx+si],al\r
+00000E92  00EB              add bl,ch\r
+00000E94  0050BF            add [bx+si-0x41],dl\r
+00000E97  6E                outsb\r
+00000E98  0D0100            or ax,0x1\r
+00000E9B  31C0              xor ax,ax\r
+00000E9D  A0AE0D            mov al,[0xdae]\r
+00000EA0  0100              add [bx+si],ax\r
+00000EA2  01C7              add di,ax\r
+00000EA4  58                pop ax\r
+00000EA5  AA                stosb\r
+00000EA6  803DAE            cmp byte [di],0xae\r
+00000EA9  0D0100            or ax,0x1\r
+00000EAC  3F                aas\r
+00000EAD  7512              jnz 0xec1\r
+00000EAF  803DAF            cmp byte [di],0xaf\r
+00000EB2  0D0100            or ax,0x1\r
+00000EB5  007422            add [si+0x22],dh\r
+00000EB8  C605AE            mov byte [di],0xae\r
+00000EBB  0D0100            or ax,0x1\r
+00000EBE  00EB              add bl,ch\r
+00000EC0  2C8A              sub al,0x8a\r
+00000EC2  25AF0D            and ax,0xdaf\r
+00000EC5  0100              add [bx+si],ax\r
+00000EC7  A0AE0D            mov al,[0xdae]\r
+00000ECA  0100              add [bx+si],ax\r
+00000ECC  0401              add al,0x1\r
+00000ECE  38C4              cmp ah,al\r
+00000ED0  7408              jz 0xeda\r
+00000ED2  FE05              inc byte [di]\r
+00000ED4  AE                scasb\r
+00000ED5  0D0100            or ax,0x1\r
+00000ED8  EB13              jmp short 0xeed\r
+00000EDA  E83134            call 0x430e\r
+00000EDD  0000              add [bx+si],al\r
+00000EDF  C605AE            mov byte [di],0xae\r
+00000EE2  0D0100            or ax,0x1\r
+00000EE5  01C6              add si,ax\r
+00000EE7  05AF0D            add ax,0xdaf\r
+00000EEA  0100              add [bx+si],ax\r
+00000EEC  00B020E6          add [bx+si+0xe620],dh\r
+00000EF0  2058C3            and [bx+si-0x3d],bl\r
+00000EF3  6650              push eax\r
+00000EF5  E81800            call 0xf10\r
+00000EF8  0000              add [bx+si],al\r
+00000EFA  B0ED              mov al,0xed\r
+00000EFC  E660              out 0x60,al\r
+00000EFE  E80F00            call 0xf10\r
+00000F01  0000              add [bx+si],al\r
+00000F03  A0B10D            mov al,[0xdb1]\r
+00000F06  0100              add [bx+si],ax\r
+00000F08  E660              out 0x60,al\r
+00000F0A  E80300            call 0xf10\r
+00000F0D  0000              add [bx+si],al\r
+00000F0F  6658              pop eax\r
+00000F11  C3                ret\r
+00000F12  EB00              jmp short 0xf14\r
+00000F14  E464              in al,0x64\r
+00000F16  A801              test al,0x1\r
+00000F18  7406              jz 0xf20\r
+00000F1A  EB00              jmp short 0xf1c\r
+00000F1C  E460              in al,0x60\r
+00000F1E  EBF2              jmp short 0xf12\r
+00000F20  A802              test al,0x2\r
+00000F22  75EE              jnz 0xf12\r
+00000F24  C3                ret\r
+00000F25  56                push si\r
+00000F26  A0AE0D            mov al,[0xdae]\r
+00000F29  0100              add [bx+si],ax\r
+00000F2B  8A25              mov ah,[di]\r
+00000F2D  AF                scasw\r
+00000F2E  0D0100            or ax,0x1\r
+00000F31  80FC3F            cmp ah,0x3f\r
+00000F34  750D              jnz 0xf43\r
+00000F36  3C00              cmp al,0x0\r
+00000F38  74EC              jz 0xf26\r
+00000F3A  C605AF            mov byte [di],0xaf\r
+00000F3D  0D0100            or ax,0x1\r
+00000F40  00EB              add bl,ch\r
+00000F42  0E                push cs\r
+00000F43  88E3              mov bl,ah\r
+00000F45  FEC3              inc bl\r
+00000F47  38C3              cmp bl,al\r
+00000F49  74DB              jz 0xf26\r
+00000F4B  FE05              inc byte [di]\r
+00000F4D  AF                scasw\r
+00000F4E  0D0100            or ax,0x1\r
+00000F51  BE6E0D            mov si,0xd6e\r
+00000F54  0100              add [bx+si],ax\r
+00000F56  0FB605            movzx ax,[di]\r
+00000F59  AF                scasw\r
+00000F5A  0D0100            or ax,0x1\r
+00000F5D  01C6              add si,ax\r
+00000F5F  8A260FB6          mov ah,[0xb60f]\r
+00000F63  3680FCFA          ss cmp ah,0xfa\r
+00000F67  74BD              jz 0xf26\r
+00000F69  80FCE0            cmp ah,0xe0\r
+00000F6C  74B8              jz 0xf26\r
+00000F6E  80FCE1            cmp ah,0xe1\r
+00000F71  74B3              jz 0xf26\r
+00000F73  F6C480            test ah,0x80\r
+00000F76  75AE              jnz 0xf26\r
+00000F78  F605B1            test byte [di],0xb1\r
+00000F7B  0D0100            or ax,0x1\r
+00000F7E  0475              add al,0x75\r
+00000F80  11F6              adc si,si\r
+00000F82  05B00D            add ax,0xdb0\r
+00000F85  0100              add [bx+si],ax\r
+00000F87  017521            add [di+0x21],si\r
+00000F8A  8A861710          mov al,[bp+0x1017]\r
+00000F8E  0100              add [bx+si],ax\r
+00000F90  EB21              jmp short 0xfb3\r
+00000F92  F605B0            test byte [di],0xb0\r
+00000F95  0D0100            or ax,0x1\r
+00000F98  017508            add [di+0x8],si\r
+00000F9B  8A866D10          mov al,[bp+0x106d]\r
+00000F9F  0100              add [bx+si],ax\r
+00000FA1  EB10              jmp short 0xfb3\r
+00000FA3  8A86C310          mov al,[bp+0x10c3]\r
+00000FA7  0100              add [bx+si],ax\r
+00000FA9  EB08              jmp short 0xfb3\r
+00000FAB  8A861911          mov al,[bp+0x1119]\r
+00000FAF  0100              add [bx+si],ax\r
+00000FB1  EB00              jmp short 0xfb3\r
+00000FB3  8A1D              mov bl,[di]\r
+00000FB5  B10D              mov cl,0xd\r
+00000FB7  0100              add [bx+si],ax\r
+00000FB9  8A3D              mov bh,[di]\r
+00000FBB  B00D              mov al,0xd\r
+00000FBD  0100              add [bx+si],ax\r
+00000FBF  5E                pop si\r
+00000FC0  C3                ret\r
+00000FC1  50                push ax\r
+00000FC2  53                push bx\r
+00000FC3  56                push si\r
+00000FC4  A0AE0D            mov al,[0xdae]\r
+00000FC7  0100              add [bx+si],ax\r
+00000FC9  8A25              mov ah,[di]\r
+00000FCB  AF                scasw\r
+00000FCC  0D0100            or ax,0x1\r
+00000FCF  80FC3F            cmp ah,0x3f\r
+00000FD2  750D              jnz 0xfe1\r
+00000FD4  3C00              cmp al,0x0\r
+00000FD6  74EC              jz 0xfc4\r
+00000FD8  C605AF            mov byte [di],0xaf\r
+00000FDB  0D0100            or ax,0x1\r
+00000FDE  00EB              add bl,ch\r
+00000FE0  0E                push cs\r
+00000FE1  88E3              mov bl,ah\r
+00000FE3  FEC3              inc bl\r
+00000FE5  38C3              cmp bl,al\r
+00000FE7  74DB              jz 0xfc4\r
+00000FE9  FE05              inc byte [di]\r
+00000FEB  AF                scasw\r
+00000FEC  0D0100            or ax,0x1\r
+00000FEF  BE6E0D            mov si,0xd6e\r
+00000FF2  0100              add [bx+si],ax\r
+00000FF4  0FB605            movzx ax,[di]\r
+00000FF7  AF                scasw\r
+00000FF8  0D0100            or ax,0x1\r
+00000FFB  01C6              add si,ax\r
+00000FFD  8A2680FC          mov ah,[0xfc80]\r
+00001001  FA                cli\r
+00001002  74C0              jz 0xfc4\r
+00001004  80FCE0            cmp ah,0xe0\r
+00001007  74BB              jz 0xfc4\r
+00001009  80FCE1            cmp ah,0xe1\r
+0000100C  74B6              jz 0xfc4\r
+0000100E  F6C480            test ah,0x80\r
+00001011  75B1              jnz 0xfc4\r
+00001013  5E                pop si\r
+00001014  5B                pop bx\r
+00001015  58                pop ax\r
+00001016  C3                ret\r
+00001017  0001              add [bx+di],al\r
+00001019  3132              xor [bp+si],si\r
+0000101B  3334              xor si,[si]\r
+0000101D  353637            xor ax,0x3736\r
+00001020  3839              cmp [bx+di],bh\r
+00001022  302D              xor [di],ch\r
+00001024  3D0000            cmp ax,0x0\r
+00001027  7177              jno 0x10a0\r
+00001029  657274            gs jc 0x10a0\r
+0000102C  7975              jns 0x10a3\r
+0000102E  696F705B5D        imul bp,[bx+0x70],word 0x5d5b\r
+00001033  0000              add [bx+si],al\r
+00001035  61                popa\r
+00001036  7364              jnc 0x109c\r
+00001038  6667686A6B6C3B    a32 push dword 0x3b6c6b6a\r
+0000103F  27                daa\r
+00001040  60                pusha\r
+00001041  005C7A            add [si+0x7a],bl\r
+00001044  7863              js 0x10a9\r
+00001046  7662              jna 0x10aa\r
+00001048  6E                outsb\r
+00001049  6D                insw\r
+0000104A  2C2E              sub al,0x2e\r
+0000104C  2F                das\r
+0000104D  0000              add [bx+si],al\r
+0000104F  0020              add [bx+si],ah\r
+00001051  0000              add [bx+si],al\r
+00001053  0000              add [bx+si],al\r
+00001055  0000              add [bx+si],al\r
+00001057  0000              add [bx+si],al\r
+00001059  0000              add [bx+si],al\r
+0000105B  0000              add [bx+si],al\r
+0000105D  0000              add [bx+si],al\r
+0000105F  0000              add [bx+si],al\r
+00001061  0000              add [bx+si],al\r
+00001063  0000              add [bx+si],al\r
+00001065  0000              add [bx+si],al\r
+00001067  0000              add [bx+si],al\r
+00001069  0000              add [bx+si],al\r
+0000106B  0000              add [bx+si],al\r
+0000106D  0001              add [bx+di],al\r
+0000106F  3132              xor [bp+si],si\r
+00001071  3334              xor si,[si]\r
+00001073  353637            xor ax,0x3736\r
+00001076  3839              cmp [bx+di],bh\r
+00001078  302D              xor [di],ch\r
+0000107A  3D0000            cmp ax,0x0\r
+0000107D  51                push cx\r
+0000107E  57                push di\r
+0000107F  45                inc bp\r
+00001080  52                push dx\r
+00001081  54                push sp\r
+00001082  59                pop cx\r
+00001083  55                push bp\r
+00001084  49                dec cx\r
+00001085  4F                dec di\r
+00001086  50                push ax\r
+00001087  5B                pop bx\r
+00001088  5D                pop bp\r
+00001089  0000              add [bx+si],al\r
+0000108B  41                inc cx\r
+0000108C  53                push bx\r
+0000108D  44                inc sp\r
+0000108E  46                inc si\r
+0000108F  47                inc di\r
+00001090  48                dec ax\r
+00001091  4A                dec dx\r
+00001092  4B                dec bx\r
+00001093  4C                dec sp\r
+00001094  3B27              cmp sp,[bx]\r
+00001096  60                pusha\r
+00001097  005C5A            add [si+0x5a],bl\r
+0000109A  58                pop ax\r
+0000109B  43                inc bx\r
+0000109C  56                push si\r
+0000109D  42                inc dx\r
+0000109E  4E                dec si\r
+0000109F  4D                dec bp\r
+000010A0  2C2E              sub al,0x2e\r
+000010A2  2F                das\r
+000010A3  0000              add [bx+si],al\r
+000010A5  0020              add [bx+si],ah\r
+000010A7  0000              add [bx+si],al\r
+000010A9  0000              add [bx+si],al\r
+000010AB  0000              add [bx+si],al\r
+000010AD  0000              add [bx+si],al\r
+000010AF  0000              add [bx+si],al\r
+000010B1  0000              add [bx+si],al\r
+000010B3  0000              add [bx+si],al\r
+000010B5  0000              add [bx+si],al\r
+000010B7  0000              add [bx+si],al\r
+000010B9  0000              add [bx+si],al\r
+000010BB  0000              add [bx+si],al\r
+000010BD  0000              add [bx+si],al\r
+000010BF  0000              add [bx+si],al\r
+000010C1  0000              add [bx+si],al\r
+000010C3  0001              add [bx+di],al\r
+000010C5  214023            and [bx+si+0x23],ax\r
+000010C8  2425              and al,0x25\r
+000010CA  5E                pop si\r
+000010CB  262A28            sub ch,[es:bx+si]\r
+000010CE  295F2B            sub [bx+0x2b],bx\r
+000010D1  0000              add [bx+si],al\r
+000010D3  7177              jno 0x114c\r
+000010D5  657274            gs jc 0x114c\r
+000010D8  7975              jns 0x114f\r
+000010DA  696F707B7D        imul bp,[bx+0x70],word 0x7d7b\r
+000010DF  0000              add [bx+si],al\r
+000010E1  61                popa\r
+000010E2  7364              jnc 0x1148\r
+000010E4  6667686A6B6C3A    a32 push dword 0x3a6c6b6a\r
+000010EB  227E00            and bh,[bp+0x0]\r
+000010EE  7C7A              jl 0x116a\r
+000010F0  7863              js 0x1155\r
+000010F2  7662              jna 0x1156\r
+000010F4  6E                outsb\r
+000010F5  6D                insw\r
+000010F6  3C3E              cmp al,0x3e\r
+000010F8  3F                aas\r
+000010F9  0000              add [bx+si],al\r
+000010FB  0020              add [bx+si],ah\r
+000010FD  0000              add [bx+si],al\r
+000010FF  0000              add [bx+si],al\r
+00001101  0000              add [bx+si],al\r
+00001103  0000              add [bx+si],al\r
+00001105  0000              add [bx+si],al\r
+00001107  0000              add [bx+si],al\r
+00001109  0000              add [bx+si],al\r
+0000110B  0000              add [bx+si],al\r
+0000110D  0000              add [bx+si],al\r
+0000110F  0000              add [bx+si],al\r
+00001111  0000              add [bx+si],al\r
+00001113  0000              add [bx+si],al\r
+00001115  0000              add [bx+si],al\r
+00001117  0000              add [bx+si],al\r
+00001119  0001              add [bx+di],al\r
+0000111B  214023            and [bx+si+0x23],ax\r
+0000111E  2425              and al,0x25\r
+00001120  5E                pop si\r
+00001121  262A28            sub ch,[es:bx+si]\r
+00001124  295F2B            sub [bx+0x2b],bx\r
+00001127  0000              add [bx+si],al\r
+00001129  51                push cx\r
+0000112A  57                push di\r
+0000112B  45                inc bp\r
+0000112C  52                push dx\r
+0000112D  54                push sp\r
+0000112E  59                pop cx\r
+0000112F  55                push bp\r
+00001130  49                dec cx\r
+00001131  4F                dec di\r
+00001132  50                push ax\r
+00001133  7B7D              jpo 0x11b2\r
+00001135  0000              add [bx+si],al\r
+00001137  41                inc cx\r
+00001138  53                push bx\r
+00001139  44                inc sp\r
+0000113A  46                inc si\r
+0000113B  47                inc di\r
+0000113C  48                dec ax\r
+0000113D  4A                dec dx\r
+0000113E  4B                dec bx\r
+0000113F  4C                dec sp\r
+00001140  3A22              cmp ah,[bp+si]\r
+00001142  7E00              jng 0x1144\r
+00001144  7C5A              jl 0x11a0\r
+00001146  58                pop ax\r
+00001147  43                inc bx\r
+00001148  56                push si\r
+00001149  42                inc dx\r
+0000114A  4E                dec si\r
+0000114B  4D                dec bp\r
+0000114C  3C3E              cmp al,0x3e\r
+0000114E  3F                aas\r
+0000114F  0000              add [bx+si],al\r
+00001151  0020              add [bx+si],ah\r
+00001153  0000              add [bx+si],al\r
+00001155  0000              add [bx+si],al\r
+00001157  0000              add [bx+si],al\r
+00001159  0000              add [bx+si],al\r
+0000115B  0000              add [bx+si],al\r
+0000115D  0000              add [bx+si],al\r
+0000115F  0000              add [bx+si],al\r
+00001161  0000              add [bx+si],al\r
+00001163  0000              add [bx+si],al\r
+00001165  0000              add [bx+si],al\r
+00001167  0000              add [bx+si],al\r
+00001169  0000              add [bx+si],al\r
+0000116B  0000              add [bx+si],al\r
+0000116D  0000              add [bx+si],al\r
+0000116F  42                inc dx\r
+00001170  4F                dec di\r
+00001171  53                push bx\r
+00001172  206B65            and [bp+di+0x65],ch\r
+00001175  726E              jc 0x11e5\r
+00001177  656C              gs insb\r
+00001179  3E0000            add [ds:bx+si],al\r
+0000117C  0000              add [bx+si],al\r
+0000117E  0000              add [bx+si],al\r
+00001180  0000              add [bx+si],al\r
+00001182  0000              add [bx+si],al\r
+00001184  0000              add [bx+si],al\r
+00001186  0000              add [bx+si],al\r
+00001188  0000              add [bx+si],al\r
+0000118A  0000              add [bx+si],al\r
+0000118C  0000              add [bx+si],al\r
+0000118E  0000              add [bx+si],al\r
+00001190  0000              add [bx+si],al\r
+00001192  0000              add [bx+si],al\r
+00001194  0000              add [bx+si],al\r
+00001196  0000              add [bx+si],al\r
+00001198  0000              add [bx+si],al\r
+0000119A  0000              add [bx+si],al\r
+0000119C  0000              add [bx+si],al\r
+0000119E  0000              add [bx+si],al\r
+000011A0  0000              add [bx+si],al\r
+000011A2  0000              add [bx+si],al\r
+000011A4  0000              add [bx+si],al\r
+000011A6  0000              add [bx+si],al\r
+000011A8  0000              add [bx+si],al\r
+000011AA  0000              add [bx+si],al\r
+000011AC  0000              add [bx+si],al\r
+000011AE  0000              add [bx+si],al\r
+000011B0  0000              add [bx+si],al\r
+000011B2  0000              add [bx+si],al\r
+000011B4  0000              add [bx+si],al\r
+000011B6  0000              add [bx+si],al\r
+000011B8  0000              add [bx+si],al\r
+000011BA  0000              add [bx+si],al\r
+000011BC  0000              add [bx+si],al\r
+000011BE  0000              add [bx+si],al\r
+000011C0  0000              add [bx+si],al\r
+000011C2  0000              add [bx+si],al\r
+000011C4  0000              add [bx+si],al\r
+000011C6  0000              add [bx+si],al\r
+000011C8  0000              add [bx+si],al\r
+000011CA  0000              add [bx+si],al\r
+000011CC  0000              add [bx+si],al\r
+000011CE  0000              add [bx+si],al\r
+000011D0  0000              add [bx+si],al\r
+000011D2  0000              add [bx+si],al\r
+000011D4  0000              add [bx+si],al\r
+000011D6  0000              add [bx+si],al\r
+000011D8  0000              add [bx+si],al\r
+000011DA  0000              add [bx+si],al\r
+000011DC  0000              add [bx+si],al\r
+000011DE  0000              add [bx+si],al\r
+000011E0  0000              add [bx+si],al\r
+000011E2  0000              add [bx+si],al\r
+000011E4  0000              add [bx+si],al\r
+000011E6  0000              add [bx+si],al\r
+000011E8  0000              add [bx+si],al\r
+000011EA  0000              add [bx+si],al\r
+000011EC  0000              add [bx+si],al\r
+000011EE  0000              add [bx+si],al\r
+000011F0  0000              add [bx+si],al\r
+000011F2  0000              add [bx+si],al\r
+000011F4  0000              add [bx+si],al\r
+000011F6  0000              add [bx+si],al\r
+000011F8  0000              add [bx+si],al\r
+000011FA  0000              add [bx+si],al\r
+000011FC  0000              add [bx+si],al\r
+000011FE  0000              add [bx+si],al\r
+00001200  0000              add [bx+si],al\r
+00001202  0000              add [bx+si],al\r
+00001204  0000              add [bx+si],al\r
+00001206  0000              add [bx+si],al\r
+00001208  0000              add [bx+si],al\r
+0000120A  0000              add [bx+si],al\r
+0000120C  0000              add [bx+si],al\r
+0000120E  0000              add [bx+si],al\r
+00001210  0000              add [bx+si],al\r
+00001212  0000              add [bx+si],al\r
+00001214  0000              add [bx+si],al\r
+00001216  0000              add [bx+si],al\r
+00001218  0000              add [bx+si],al\r
+0000121A  0000              add [bx+si],al\r
+0000121C  0000              add [bx+si],al\r
+0000121E  0000              add [bx+si],al\r
+00001220  0000              add [bx+si],al\r
+00001222  0000              add [bx+si],al\r
+00001224  0000              add [bx+si],al\r
+00001226  0000              add [bx+si],al\r
+00001228  0000              add [bx+si],al\r
+0000122A  0000              add [bx+si],al\r
+0000122C  0000              add [bx+si],al\r
+0000122E  0000              add [bx+si],al\r
+00001230  0000              add [bx+si],al\r
+00001232  0000              add [bx+si],al\r
+00001234  0000              add [bx+si],al\r
+00001236  0000              add [bx+si],al\r
+00001238  0000              add [bx+si],al\r
+0000123A  0000              add [bx+si],al\r
+0000123C  0000              add [bx+si],al\r
+0000123E  0000              add [bx+si],al\r
+00001240  0000              add [bx+si],al\r
+00001242  0000              add [bx+si],al\r
+00001244  0000              add [bx+si],al\r
+00001246  0000              add [bx+si],al\r
+00001248  0000              add [bx+si],al\r
+0000124A  0000              add [bx+si],al\r
+0000124C  0000              add [bx+si],al\r
+0000124E  0000              add [bx+si],al\r
+00001250  0000              add [bx+si],al\r
+00001252  0000              add [bx+si],al\r
+00001254  0000              add [bx+si],al\r
+00001256  0000              add [bx+si],al\r
+00001258  0000              add [bx+si],al\r
+0000125A  0000              add [bx+si],al\r
+0000125C  0000              add [bx+si],al\r
+0000125E  0000              add [bx+si],al\r
+00001260  0000              add [bx+si],al\r
+00001262  0000              add [bx+si],al\r
+00001264  0000              add [bx+si],al\r
+00001266  0000              add [bx+si],al\r
+00001268  0000              add [bx+si],al\r
+0000126A  0000              add [bx+si],al\r
+0000126C  0000              add [bx+si],al\r
+0000126E  0000              add [bx+si],al\r
+00001270  0000              add [bx+si],al\r
+00001272  0000              add [bx+si],al\r
+00001274  0000              add [bx+si],al\r
+00001276  0000              add [bx+si],al\r
+00001278  0000              add [bx+si],al\r
+0000127A  C605B1            mov byte [di],0xb1\r
+0000127D  0D0100            or ax,0x1\r
+00001280  00E8              add al,ch\r
+00001282  6D                insw\r
+00001283  FC                cld\r
+00001284  FF                db 0xFF\r
+00001285  FF                db 0xFF\r
+00001286  BE6F11            mov si,0x116f\r
+00001289  0100              add [bx+si],ax\r
+0000128B  B30E              mov bl,0xe\r
+0000128D  E81DF5            call 0x7ad\r
+00001290  FF                db 0xFF\r
+00001291  FF                db 0xFF\r
+00001292  BF7B11            mov di,0x117b\r
+00001295  0100              add [bx+si],ax\r
+00001297  C3                ret\r
+00001298  66B900006651      mov ecx,0x51660000\r
+0000129E  57                push di\r
+0000129F  E881FC            call 0xf23\r
+000012A2  FF                db 0xFF\r
+000012A3  FF5F66            call far [bx+0x66]\r
+000012A6  59                pop cx\r
+000012A7  80FC1C            cmp ah,0x1c\r
+000012AA  741E              jz 0x12ca\r
+000012AC  80FC0E            cmp ah,0xe\r
+000012AF  741E              jz 0x12cf\r
+000012B1  3C00              cmp al,0x0\r
+000012B3  74E7              jz 0x129c\r
+000012B5  6681F9FE0073E0    cmp ecx,0xe07300fe\r
+000012BC  AA                stosb\r
+000012BD  6641              inc ecx\r
+000012BF  88C3              mov bl,al\r
+000012C1  B707              mov bh,0x7\r
+000012C3  E886F4            call 0x74c\r
+000012C6  FF                db 0xFF\r
+000012C7  FF                db 0xFF\r
+000012C8  EBD2              jmp short 0x129c\r
+000012CA  B000              mov al,0x0\r
+000012CC  AA                stosb\r
+000012CD  EB13              jmp short 0x12e2\r
+000012CF  6683F900          cmp ecx,byte +0x0\r
+000012D3  74C7              jz 0x129c\r
+000012D5  4F                dec di\r
+000012D6  E850F4            call 0x729\r
+000012D9  FF                db 0xFF\r
+000012DA  FF6649            jmp near [bp+0x49]\r
+000012DD  EBBD              jmp short 0x129c\r
+000012DF  EBFE              jmp short 0x12df\r
+000012E1  C3                ret\r
+000012E2  BE6513            mov si,0x1365\r
+000012E5  0100              add [bx+si],ax\r
+000012E7  BF7B11            mov di,0x117b\r
+000012EA  0100              add [bx+si],ax\r
+000012EC  BD0000            mov bp,0x0\r
+000012EF  0000              add [bx+si],al\r
+000012F1  B90000            mov cx,0x0\r
+000012F4  0000              add [bx+si],al\r
+000012F6  803EFF7442        cmp byte [0x74ff],0x42\r
+000012FB  803F20            cmp byte [bx],0x20\r
+000012FE  7407              jz 0x1307\r
+00001300  803F00            cmp byte [bx],0x0\r
+00001303  7402              jz 0x1307\r
+00001305  EB07              jmp short 0x130e\r
+00001307  803E007512        cmp byte [0x7500],0x12\r
+0000130C  EB1F              jmp short 0x132d\r
+0000130E  803E00740B        cmp byte [0x7400],0xb\r
+00001313  8A063A07          mov al,[0x73a]\r
+00001317  7505              jnz 0x131e\r
+00001319  46                inc si\r
+0000131A  47                inc di\r
+0000131B  41                inc cx\r
+0000131C  EBDD              jmp short 0x12fb\r
+0000131E  45                inc bp\r
+0000131F  BF7B11            mov di,0x117b\r
+00001322  0100              add [bx+si],ax\r
+00001324  46                inc si\r
+00001325  803E0075FA        cmp byte [0x7500],0xfa\r
+0000132A  46                inc si\r
+0000132B  EBC4              jmp short 0x12f1\r
+0000132D  83F900            cmp cx,byte +0x0\r
+00001330  7409              jz 0x133b\r
+00001332  C1E502            shl bp,0x2\r
+00001335  FF95C613          call near [di+0x13c6]\r
+00001339  0100              add [bx+si],ax\r
+0000133B  EB07              jmp short 0x1344\r
+0000133D  E8E900            call 0x1429\r
+00001340  0000              add [bx+si],al\r
+00001342  EB00              jmp short 0x1344\r
+00001344  E8CCF4            call 0x813\r
+00001347  FF                db 0xFF\r
+00001348  FF                db 0xFF\r
+00001349  E8C7F4            call 0x813\r
+0000134C  FF                db 0xFF\r
+0000134D  FF                db 0xFF\r
+0000134E  BE6F11            mov si,0x116f\r
+00001351  0100              add [bx+si],ax\r
+00001353  B30E              mov bl,0xe\r
+00001355  E855F4            call 0x7ad\r
+00001358  FF                db 0xFF\r
+00001359  FF                db 0xFF\r
+0000135A  BF7B11            mov di,0x117b\r
+0000135D  0100              add [bx+si],ax\r
+0000135F  E934FF            jmp 0x1296\r
+00001362  FF                db 0xFF\r
+00001363  FFC3              inc bx\r
+00001365  7665              jna 0x13cc\r
+00001367  7200              jc 0x1369\r
+00001369  68656C            push word 0x6c65\r
+0000136C  7000              jo 0x136e\r
+0000136E  3F                aas\r
+0000136F  006162            add [bx+di+0x62],ah\r
+00001372  6F                outsw\r
+00001373  7574              jnz 0x13e9\r
+00001375  00636C            add [bp+di+0x6c],ah\r
+00001378  7300              jnc 0x137a\r
+0000137A  636C72            arpl [si+0x72],bp\r
+0000137D  7363              jnc 0x13e2\r
+0000137F  7200              jc 0x1381\r
+00001381  6C                insb\r
+00001382  6963656E63        imul sp,[bp+di+0x65],word 0x636e\r
+00001387  65007265          add [gs:bp+si+0x65],dh\r
+0000138B  626F6F            bound bp,[bx+0x6f]\r
+0000138E  7400              jz 0x1390\r
+00001390  6D                insw\r
+00001391  656E              gs outsb\r
+00001393  7500              jnz 0x1395\r
+00001395  7265              jc 0x13fc\r
+00001397  6764756D          fs a32 jnz 0x1408\r
+0000139B  7000              jo 0x139d\r
+0000139D  7469              jz 0x1408\r
+0000139F  6D                insw\r
+000013A0  65006461          add [gs:si+0x61],ah\r
+000013A4  7465              jz 0x140b\r
+000013A6  006465            add [si+0x65],ah\r
+000013A9  6C                insb\r
+000013AA  61                popa\r
+000013AB  7900              jns 0x13ad\r
+000013AD  7667              jna 0x1416\r
+000013AF  61                popa\r
+000013B0  7465              jz 0x1417\r
+000013B2  7374              jnc 0x1428\r
+000013B4  006D65            add [di+0x65],ch\r
+000013B7  6D                insw\r
+000013B8  7465              jz 0x141f\r
+000013BA  7374              jnc 0x1430\r
+000013BC  006664            add [bp+0x64],ah\r
+000013BF  647465            fs jz 0x1427\r
+000013C2  7374              jnc 0x1438\r
+000013C4  00FF              add bh,bh\r
+000013C6  7314              jnc 0x13dc\r
+000013C8  0100              add [bx+si],ax\r
+000013CA  D516              aad 0x16\r
+000013CC  0100              add [bx+si],ax\r
+000013CE  D516              aad 0x16\r
+000013D0  0100              add [bx+si],ax\r
+000013D2  7518              jnz 0x13ec\r
+000013D4  0100              add [bx+si],ax\r
+000013D6  8818              mov [bx+si],bl\r
+000013D8  0100              add [bx+si],ax\r
+000013DA  8818              mov [bx+si],bl\r
+000013DC  0100              add [bx+si],ax\r
+000013DE  A31801            mov [0x118],ax\r
+000013E1  00A41801          add [si+0x118],ah\r
+000013E5  00EC              add ah,ch\r
+000013E7  1D0100            sbb ax,0x1\r
+000013EA  812B0100          sub word [bp+di],0x1\r
+000013EE  AC                lodsb\r
+000013EF  3001              xor [bx+di],al\r
+000013F1  001C              add [si],bl\r
+000013F3  3001              xor [bx+di],al\r
+000013F5  00C8              add al,cl\r
+000013F7  1801              sbb [bx+di],al\r
+000013F9  00FA              add dl,bh\r
+000013FB  1801              sbb [bx+di],al\r
+000013FD  00C4              add ah,al\r
+000013FF  1B01              sbb ax,[bx+di]\r
+00001401  0020              add [bx+si],ah\r
+00001403  1A01              sbb al,[bx+di]\r
+00001405  000D              add [di],cl\r
+00001407  0A4E6F            or cl,[bp+0x6f]\r
+0000140A  207375            and [bp+di+0x75],dh\r
+0000140D  636820            arpl [bx+si+0x20],bp\r
+00001410  636F6D            arpl [bx+0x6d],bp\r
+00001413  6D                insw\r
+00001414  61                popa\r
+00001415  6E                outsb\r
+00001416  64206F72          and [fs:bx+0x72],ch\r
+0000141A  207072            and [bx+si+0x72],dh\r
+0000141D  6F                outsw\r
+0000141E  677261            a32 jc 0x1482\r
+00001421  6D                insw\r
+00001422  206578            and [di+0x78],ah\r
+00001425  697374732E        imul si,[bp+di+0x74],word 0x2e73\r
+0000142A  005666            add [bp+0x66],dl\r
+0000142D  53                push bx\r
+0000142E  BE0614            mov si,0x1406\r
+00001431  0100              add [bx+si],ax\r
+00001433  B304              mov bl,0x4\r
+00001435  E875F3            call 0x7ad\r
+00001438  FF                db 0xFF\r
+00001439  FF665B            jmp near [bp+0x5b]\r
+0000143C  5E                pop si\r
+0000143D  C3                ret\r
+0000143E  0D0A42            or ax,0x420a\r
+00001441  4F                dec di\r
+00001442  53                push bx\r
+00001443  207665            and [bp+0x65],dh\r
+00001446  7273              jc 0x14bb\r
+00001448  696F6E2030        imul bp,[bx+0x6e],word 0x3020\r
+0000144D  2E3034            xor [cs:si],dh\r
+00001450  206279            and [bp+si+0x79],ah\r
+00001453  204368            and [bp+di+0x68],al\r
+00001456  7269              jc 0x14c1\r
+00001458  7374              jnc 0x14ce\r
+0000145A  6F                outsw\r
+0000145B  6666657220        gs o32 jc 0x1480\r
+00001460  42                inc dx\r
+00001461  7562              jnz 0x14c5\r
+00001463  61                popa\r
+00001464  63682C            arpl [bx+si+0x2c],bp\r
+00001467  2032              and [bp+si],dh\r
+00001469  3030              xor [bx+si],dh\r
+0000146B  332D              xor bp,[di]\r
+0000146D  3230              xor dh,[bx+si]\r
+0000146F  3035              xor [di],dh\r
+00001471  2E005666          add [cs:bp+0x66],dl\r
+00001475  53                push bx\r
+00001476  BE3E14            mov si,0x143e\r
+00001479  0100              add [bx+si],ax\r
+0000147B  B307              mov bl,0x7\r
+0000147D  E82DF3            call 0x7ad\r
+00001480  FF                db 0xFF\r
+00001481  FF665B            jmp near [bp+0x5b]\r
+00001484  5E                pop si\r
+00001485  C3                ret\r
+00001486  0D0A0D            or ax,0xd0a\r
+00001489  0A20              or ah,[bx+si]\r
+0000148B  42                inc dx\r
+0000148C  4F                dec di\r
+0000148D  53                push bx\r
+0000148E  2030              and [bx+si],dh\r
+00001490  2E3034            xor [cs:si],dh\r
+00001493  206279            and [bp+si+0x79],ah\r
+00001496  204368            and [bp+di+0x68],al\r
+00001499  7269              jc 0x1504\r
+0000149B  7374              jnc 0x1511\r
+0000149D  6F                outsw\r
+0000149E  6666657220        gs o32 jc 0x14c3\r
+000014A3  42                inc dx\r
+000014A4  7562              jnz 0x1508\r
+000014A6  61                popa\r
+000014A7  63682C            arpl [bx+si+0x2c],bp\r
+000014AA  2032              and [bp+si],dh\r
+000014AC  3030              xor [bx+si],dh\r
+000014AE  332D              xor bp,[di]\r
+000014B0  3230              xor dh,[bx+si]\r
+000014B2  3035              xor [di],dh\r
+000014B4  2E0D0A2D          cs or ax,0x2d0a\r
+000014B8  2D2D2D            sub ax,0x2d2d\r
+000014BB  2D2D2D            sub ax,0x2d2d\r
+000014BE  2D2D2D            sub ax,0x2d2d\r
+000014C1  2D2D2D            sub ax,0x2d2d\r
+000014C4  2D2D2D            sub ax,0x2d2d\r
+000014C7  2D2D2D            sub ax,0x2d2d\r
+000014CA  2D2D2D            sub ax,0x2d2d\r
+000014CD  2D2D2D            sub ax,0x2d2d\r
+000014D0  2D2D2D            sub ax,0x2d2d\r
+000014D3  2D2D2D            sub ax,0x2d2d\r
+000014D6  2D2D2D            sub ax,0x2d2d\r
+000014D9  2D2D2D            sub ax,0x2d2d\r
+000014DC  2D2D2D            sub ax,0x2d2d\r
+000014DF  2D2D2D            sub ax,0x2d2d\r
+000014E2  2D0D0A            sub ax,0xa0d\r
+000014E5  54                push sp\r
+000014E6  7970              jns 0x1558\r
+000014E8  65206120          and [gs:bx+di+0x20],ah\r
+000014EC  636F6D            arpl [bx+0x6d],bp\r
+000014EF  6D                insw\r
+000014F0  61                popa\r
+000014F1  6E                outsb\r
+000014F2  6420616E          and [fs:bx+di+0x6e],ah\r
+000014F6  64207072          and [fs:bx+si+0x72],dh\r
+000014FA  657373            gs jnc 0x1570\r
+000014FD  20454E            and [di+0x4e],al\r
+00001500  54                push sp\r
+00001501  45                inc bp\r
+00001502  52                push dx\r
+00001503  20746F            and [si+0x6f],dh\r
+00001506  206578            and [di+0x78],ah\r
+00001509  65637574          arpl [gs:di+0x74],si\r
+0000150D  65206974          and [gs:bx+di+0x74],ch\r
+00001511  2E0D0A56          cs or ax,0x560a\r
+00001515  61                popa\r
+00001516  6C                insb\r
+00001517  696420636F        imul sp,[si+0x20],word 0x6f63\r
+0000151C  6D                insw\r
+0000151D  6D                insw\r
+0000151E  61                popa\r
+0000151F  6E                outsb\r
+00001520  647320            fs jnc 0x1543\r
+00001523  61                popa\r
+00001524  7265              jc 0x158b\r
+00001526  3A0D              cmp cl,[di]\r
+00001528  0A0D              or cl,[di]\r
+0000152A  0A22              or ah,[bp+si]\r
+0000152C  68656C            push word 0x6c65\r
+0000152F  7022              jo 0x1553\r
+00001531  206F72            and [bx+0x72],ch\r
+00001534  2022              and [bp+si],ah\r
+00001536  3F                aas\r
+00001537  2220              and ah,[bx+si]\r
+00001539  2020              and [bx+si],ah\r
+0000153B  2020              and [bx+si],ah\r
+0000153D  2020              and [bx+si],ah\r
+0000153F  2D2044            sub ax,0x4420\r
+00001542  6973706C61        imul si,[bp+di+0x70],word 0x616c\r
+00001547  7973              jns 0x15bc\r
+00001549  207468            and [si+0x68],dh\r
+0000154C  6973207465        imul si,[bp+di+0x20],word 0x6574\r
+00001551  7874              js 0x15c7\r
+00001553  2E0D0A22          cs or ax,0x220a\r
+00001557  7665              jna 0x15be\r
+00001559  7222              jc 0x157d\r
+0000155B  2020              and [bx+si],ah\r
+0000155D  2020              and [bx+si],ah\r
+0000155F  2020              and [bx+si],ah\r
+00001561  2020              and [bx+si],ah\r
+00001563  2020              and [bx+si],ah\r
+00001565  2020              and [bx+si],ah\r
+00001567  2020              and [bx+si],ah\r
+00001569  202D              and [di],ch\r
+0000156B  205368            and [bp+di+0x68],dl\r
+0000156E  6F                outsw\r
+0000156F  7773              ja 0x15e4\r
+00001571  207665            and [bp+0x65],dh\r
+00001574  7273              jc 0x15e9\r
+00001576  696F6E2069        imul bp,[bx+0x6e],word 0x6920\r
+0000157B  6E                outsb\r
+0000157C  666F              outsd\r
+0000157E  726D              jc 0x15ed\r
+00001580  61                popa\r
+00001581  7469              jz 0x15ec\r
+00001583  6F                outsw\r
+00001584  6E                outsb\r
+00001585  2E0D0A22          cs or ax,0x220a\r
+00001589  61                popa\r
+0000158A  626F75            bound bp,[bx+0x75]\r
+0000158D  7422              jz 0x15b1\r
+0000158F  2020              and [bx+si],ah\r
+00001591  2020              and [bx+si],ah\r
+00001593  2020              and [bx+si],ah\r
+00001595  2020              and [bx+si],ah\r
+00001597  2020              and [bx+si],ah\r
+00001599  2020              and [bx+si],ah\r
+0000159B  202D              and [di],ch\r
+0000159D  205368            and [bp+di+0x68],dl\r
+000015A0  6F                outsw\r
+000015A1  7773              ja 0x1616\r
+000015A3  20696E            and [bx+di+0x6e],ch\r
+000015A6  666F              outsd\r
+000015A8  726D              jc 0x1617\r
+000015AA  61                popa\r
+000015AB  7469              jz 0x1616\r
+000015AD  6F                outsw\r
+000015AE  6E                outsb\r
+000015AF  206162            and [bx+di+0x62],ah\r
+000015B2  6F                outsw\r
+000015B3  7574              jnz 0x1629\r
+000015B5  207468            and [si+0x68],dh\r
+000015B8  65204F53          and [gs:bx+0x53],cl\r
+000015BC  2E0D0A22          cs or ax,0x220a\r
+000015C0  636C73            arpl [si+0x73],bp\r
+000015C3  2220              and ah,[bx+si]\r
+000015C5  6F                outsw\r
+000015C6  7220              jc 0x15e8\r
+000015C8  22636C            and ah,[bp+di+0x6c]\r
+000015CB  7273              jc 0x1640\r
+000015CD  637222            arpl [bp+si+0x22],si\r
+000015D0  2020              and [bx+si],ah\r
+000015D2  202D              and [di],ch\r
+000015D4  20436C            and [bp+di+0x6c],al\r
+000015D7  6561              gs popa\r
+000015D9  7273              jc 0x164e\r
+000015DB  207468            and [si+0x68],dh\r
+000015DE  65207363          and [gs:bp+di+0x63],dh\r
+000015E2  7265              jc 0x1649\r
+000015E4  656E              gs outsb\r
+000015E6  2E0D0A2A          cs or ax,0x2a0a\r
+000015EA  2022              and [bp+si],ah\r
+000015EC  6C                insb\r
+000015ED  6963656E63        imul sp,[bp+di+0x65],word 0x636e\r
+000015F2  652220            and ah,[gs:bx+si]\r
+000015F5  2020              and [bx+si],ah\r
+000015F7  2020              and [bx+si],ah\r
+000015F9  2020              and [bx+si],ah\r
+000015FB  2020              and [bx+si],ah\r
+000015FD  2D2053            sub ax,0x5320\r
+00001600  686F77            push word 0x776f\r
+00001603  7320              jnc 0x1625\r
+00001605  42                inc dx\r
+00001606  4F                dec di\r
+00001607  53                push bx\r
+00001608  206C69            and [si+0x69],ch\r
+0000160B  63656E            arpl [di+0x6e],sp\r
+0000160E  63652E            arpl [di+0x2e],sp\r
+00001611  0D0A2A            or ax,0x2a0a\r
+00001614  2022              and [bp+si],ah\r
+00001616  6D                insw\r
+00001617  656E              gs outsb\r
+00001619  7522              jnz 0x163d\r
+0000161B  2020              and [bx+si],ah\r
+0000161D  2020              and [bx+si],ah\r
+0000161F  2020              and [bx+si],ah\r
+00001621  2020              and [bx+si],ah\r
+00001623  2020              and [bx+si],ah\r
+00001625  2020              and [bx+si],ah\r
+00001627  2D2042            sub ax,0x4220\r
+0000162A  4F                dec di\r
+0000162B  53                push bx\r
+0000162C  207379            and [bp+di+0x79],dh\r
+0000162F  7374              jnc 0x16a5\r
+00001631  656D              gs insw\r
+00001633  206D65            and [di+0x65],ch\r
+00001636  6E                outsb\r
+00001637  752E              jnz 0x1667\r
+00001639  0D0A22            or ax,0x220a\r
+0000163C  7265              jc 0x16a3\r
+0000163E  6764756D          fs a32 jnz 0x16af\r
+00001642  7022              jo 0x1666\r
+00001644  2020              and [bx+si],ah\r
+00001646  2020              and [bx+si],ah\r
+00001648  2020              and [bx+si],ah\r
+0000164A  2020              and [bx+si],ah\r
+0000164C  2020              and [bx+si],ah\r
+0000164E  202D              and [di],ch\r
+00001650  204475            and [si+0x75],al\r
+00001653  6D                insw\r
+00001654  7020              jo 0x1676\r
+00001656  736F              jnc 0x16c7\r
+00001658  6D                insw\r
+00001659  65207374          and [gs:bp+di+0x74],dh\r
+0000165D  61                popa\r
+0000165E  6E                outsb\r
+0000165F  6461              fs popa\r
+00001661  7264              jc 0x16c7\r
+00001663  207265            and [bp+si+0x65],dh\r
+00001666  676973746572      imul si,[ebx+0x74],word 0x7265\r
+0000166C  732E              jnc 0x169c\r
+0000166E  0D0A22            or ax,0x220a\r
+00001671  7265              jc 0x16d8\r
+00001673  626F6F            bound bp,[bx+0x6f]\r
+00001676  7422              jz 0x169a\r
+00001678  2020              and [bx+si],ah\r
+0000167A  2020              and [bx+si],ah\r
+0000167C  2020              and [bx+si],ah\r
+0000167E  2020              and [bx+si],ah\r
+00001680  2020              and [bx+si],ah\r
+00001682  2020              and [bx+si],ah\r
+00001684  2D2052            sub ax,0x5220\r
+00001687  657374            gs jnc 0x16fe\r
+0000168A  61                popa\r
+0000168B  7274              jc 0x1701\r
+0000168D  7320              jnc 0x16af\r
+0000168F  7468              jz 0x16f9\r
+00001691  6520636F          and [gs:bp+di+0x6f],ah\r
+00001695  6D                insw\r
+00001696  7075              jo 0x170d\r
+00001698  7465              jz 0x16ff\r
+0000169A  722E              jc 0x16ca\r
+0000169C  0D0A0D            or ax,0xd0a\r
+0000169F  0A416C            or al,[bx+di+0x6c]\r
+000016A2  6C                insb\r
+000016A3  20636F            and [bp+di+0x6f],ah\r
+000016A6  6D                insw\r
+000016A7  6D                insw\r
+000016A8  61                popa\r
+000016A9  6E                outsb\r
+000016AA  647320            fs jnc 0x16cd\r
+000016AD  7769              ja 0x1718\r
+000016AF  7468              jz 0x1719\r
+000016B1  206120            and [bx+di+0x20],ah\r
+000016B4  2A20              sub ah,[bx+si]\r
+000016B6  696E206672        imul bp,[bp+0x20],word 0x7266\r
+000016BB  6F                outsw\r
+000016BC  6E                outsb\r
+000016BD  7420              jz 0x16df\r
+000016BF  6973206E6F        imul si,[bp+di+0x20],word 0x6f6e\r
+000016C4  7420              jz 0x16e6\r
+000016C6  636F6D            arpl [bx+0x6d],bp\r
+000016C9  706C              jo 0x1737\r
+000016CB  657465            gs jz 0x1733\r
+000016CE  64207965          and [fs:bx+di+0x65],bh\r
+000016D2  742E              jz 0x1702\r
+000016D4  005666            add [bp+0x66],dl\r
+000016D7  53                push bx\r
+000016D8  BE8614            mov si,0x1486\r
+000016DB  0100              add [bx+si],ax\r
+000016DD  B307              mov bl,0x7\r
+000016DF  E8CBF0            call 0x7ad\r
+000016E2  FF                db 0xFF\r
+000016E3  FF665B            jmp near [bp+0x5b]\r
+000016E6  5E                pop si\r
+000016E7  C3                ret\r
+000016E8  0D0A41            or ax,0x410a\r
+000016EB  626F75            bound bp,[bx+0x75]\r
+000016EE  7420              jz 0x1710\r
+000016F0  42                inc dx\r
+000016F1  4F                dec di\r
+000016F2  53                push bx\r
+000016F3  0D0A48            or ax,0x480a\r
+000016F6  6D                insw\r
+000016F7  6D                insw\r
+000016F8  2E2E204920        and [cs:bx+di+0x20],cl\r
+000016FD  7374              jnc 0x1773\r
+000016FF  61                popa\r
+00001700  7274              jc 0x1776\r
+00001702  6564207769        and [fs:bx+0x69],dh\r
+00001707  7468              jz 0x1771\r
+00001709  204F53            and [bx+0x53],cl\r
+0000170C  2D6465            sub ax,0x6564\r
+0000170F  7620              jna 0x1731\r
+00001711  696E206C61        imul bp,[bp+0x20],word 0x616c\r
+00001716  7465              jz 0x177d\r
+00001718  2032              and [bp+si],dh\r
+0000171A  3030              xor [bx+si],dh\r
+0000171C  332E2E20          xor bp,[0x202e]\r
+00001720  41                inc cx\r
+00001721  6E                outsb\r
+00001722  7977              jns 0x179b\r
+00001724  61                popa\r
+00001725  792E              jns 0x1755\r
+00001727  2E0D0A0D          cs or ax,0xd0a\r
+0000172B  0A5468            or dl,[si+0x68]\r
+0000172E  61                popa\r
+0000172F  6E                outsb\r
+00001730  6B732066          imul si,[bp+di+0x20],byte +0x66\r
+00001734  6F                outsw\r
+00001735  7220              jc 0x1757\r
+00001737  68656C            push word 0x6c65\r
+0000173A  7069              jo 0x17a5\r
+0000173C  6E                outsb\r
+0000173D  67206D65          and [ebp+0x65],ch\r
+00001741  206765            and [bx+0x65],ah\r
+00001744  7420              jz 0x1766\r
+00001746  7468              jz 0x17b0\r
+00001748  6973206661        imul si,[bp+di+0x20],word 0x6166\r
+0000174D  7220              jc 0x176f\r
+0000174F  676F              a32 outsw\r
+00001751  657320            gs jnc 0x1774\r
+00001754  746F              jz 0x17c5\r
+00001756  3A0D              cmp cl,[di]\r
+00001758  0A616C            or ah,[bx+di+0x6c]\r
+0000175B  6C                insb\r
+0000175C  207065            and [bx+si+0x65],dh\r
+0000175F  6F                outsw\r
+00001760  706C              jo 0x17ce\r
+00001762  65206174          and [gs:bx+di+0x74],ah\r
+00001766  206D65            and [di+0x65],ch\r
+00001769  6761              a32 popa\r
+0000176B  2D746F            sub ax,0x6f74\r
+0000176E  6B796F2E          imul di,[bx+di+0x6f],byte +0x2e\r
+00001772  636F6D            arpl [bx+0x6d],bp\r
+00001775  2C20              sub al,0x20\r
+00001777  6F                outsw\r
+00001778  7364              jnc 0x17de\r
+0000177A  657665            gs jna 0x17e2\r
+0000177D  722E              jc 0x17ad\r
+0000177F  6E                outsb\r
+00001780  657420            gs jz 0x17a3\r
+00001783  61                popa\r
+00001784  6E                outsb\r
+00001785  6420666C          and [fs:bp+0x6c],ah\r
+00001789  61                popa\r
+0000178A  7461              jz 0x17ed\r
+0000178C  7373              jnc 0x1801\r
+0000178E  656D              gs insw\r
+00001790  626C65            bound bp,[si+0x65]\r
+00001793  722E              jc 0x17c3\r
+00001795  6E                outsb\r
+00001796  65740D            gs jz 0x17a6\r
+00001799  0A526F            or dl,[bp+si+0x6f]\r
+0000179C  626572            bound sp,[di+0x72]\r
+0000179F  7420              jz 0x17c1\r
+000017A1  99                cwd\r
+000017A2  7374              jnc 0x1818\r
+000017A4  6C                insb\r
+000017A5  696E672066        imul bp,[bp+0x67],word 0x6620\r
+000017AA  6F                outsw\r
+000017AB  7220              jc 0x17cd\r
+000017AD  50                push ax\r
+000017AE  7269              jc 0x1819\r
+000017B0  6D                insw\r
+000017B1  756C              jnz 0x181f\r
+000017B3  61                popa\r
+000017B4  2C20              sub al,0x20\r
+000017B6  687474            push word 0x7474\r
+000017B9  703A              jo 0x17f5\r
+000017BB  2F                das\r
+000017BC  2F                das\r
+000017BD  6F                outsw\r
+000017BE  7374              jnc 0x1834\r
+000017C0  6C                insb\r
+000017C1  696E672E6E        imul bp,[bp+0x67],word 0x6e2e\r
+000017C6  6F                outsw\r
+000017C7  2D6970            sub ax,0x7069\r
+000017CA  2E636F6D          arpl [cs:bx+0x6d],bp\r
+000017CE  2F                das\r
+000017CF  0D0A4A            or ax,0x4a0a\r
+000017D2  2E54              cs push sp\r
+000017D4  68696D            push word 0x6d69\r
+000017D7  20666F            and [bp+0x6f],ah\r
+000017DA  7220              jc 0x17fc\r
+000017DC  45                inc bp\r
+000017DD  656C              gs insb\r
+000017DF  4F                dec di\r
+000017E0  53                push bx\r
+000017E1  2C20              sub al,0x20\r
+000017E3  687474            push word 0x7474\r
+000017E6  703A              jo 0x1822\r
+000017E8  2F                das\r
+000017E9  2F                das\r
+000017EA  7777              ja 0x1863\r
+000017EC  772E              ja 0x181c\r
+000017EE  6C                insb\r
+000017EF  7564              jnz 0x1855\r
+000017F1  642E6C            cs insb\r
+000017F4  7574              jnz 0x186a\r
+000017F6  682E73            push word 0x732e\r
+000017F9  652F              gs das\r
+000017FB  7E69              jng 0x1866\r
+000017FD  7669              jna 0x1868\r
+000017FF  6C                insb\r
+00001800  65656C            gs insb\r
+00001803  2F                das\r
+00001804  0D0A54            or ax,0x540a\r
+00001807  6F                outsw\r
+00001808  6D                insw\r
+00001809  61                popa\r
+0000180A  737A              jnc 0x1886\r
+0000180C  204772            and [bx+0x72],al\r
+0000180F  7973              jns 0x1884\r
+00001811  7A74              jpe 0x1887\r
+00001813  61                popa\r
+00001814  7220              jc 0x1836\r
+00001816  666F              outsd\r
+00001818  7220              jc 0x183a\r
+0000181A  6661              popad\r
+0000181C  736D              jnc 0x188b\r
+0000181E  20616E            and [bx+di+0x6e],ah\r
+00001821  64206661          and [fs:bp+0x61],ah\r
+00001825  736D              jnc 0x1894\r
+00001827  772C              ja 0x1855\r
+00001829  206874            and [bx+si+0x74],ch\r
+0000182C  7470              jz 0x189e\r
+0000182E  3A2F              cmp ch,[bx]\r
+00001830  2F                das\r
+00001831  666C              o32 insb\r
+00001833  61                popa\r
+00001834  7461              jz 0x1897\r
+00001836  7373              jnc 0x18ab\r
+00001838  656D              gs insw\r
+0000183A  626C65            bound bp,[si+0x65]\r
+0000183D  722E              jc 0x186d\r
+0000183F  6E                outsb\r
+00001840  65742F            gs jz 0x1872\r
+00001843  0D0A41            or ax,0x410a\r
+00001846  53                push bx\r
+00001847  48                dec ax\r
+00001848  4C                dec sp\r
+00001849  45                inc bp\r
+0000184A  59                pop cx\r
+0000184B  342C              xor al,0x2c\r
+0000184D  204361            and [bp+di+0x61],al\r
+00001850  6E                outsb\r
+00001851  64792C            fs jns 0x1880\r
+00001854  204A6F            and [bp+si+0x6f],cl\r
+00001857  686E20            push word 0x206e\r
+0000185A  53                push bx\r
+0000185B  2E204669          and [cs:bp+0x69],al\r
+0000185F  6E                outsb\r
+00001860  6520616E          and [gs:bx+di+0x6e],ah\r
+00001864  64205065          and [fs:bx+si+0x65],dl\r
+00001868  7472              jz 0x18dc\r
+0000186A  6F                outsw\r
+0000186B  6666204865        o32 and [bx+si+0x65],cl\r
+00001870  726F              jc 0x18e1\r
+00001872  6A2E              push byte +0x2e\r
+00001874  005666            add [bp+0x66],dl\r
+00001877  53                push bx\r
+00001878  BEE816            mov si,0x16e8\r
+0000187B  0100              add [bx+si],ax\r
+0000187D  B307              mov bl,0x7\r
+0000187F  E82BEF            call 0x7ad\r
+00001882  FF                db 0xFF\r
+00001883  FF665B            jmp near [bp+0x5b]\r
+00001886  5E                pop si\r
+00001887  C3                ret\r
+00001888  E8C2ED            call 0x64d\r
+0000188B  FF                db 0xFF\r
+0000188C  FF                db 0xFF\r
+0000188D  BE6F11            mov si,0x116f\r
+00001890  0100              add [bx+si],ax\r
+00001892  B30E              mov bl,0xe\r
+00001894  E816EF            call 0x7ad\r
+00001897  FF                db 0xFF\r
+00001898  FF                db 0xFF\r
+00001899  BF7B11            mov di,0x117b\r
+0000189C  0100              add [bx+si],ax\r
+0000189E  E9F5F9            jmp 0x1296\r
+000018A1  FF                db 0xFF\r
+000018A2  FFC3              inc bx\r
+000018A4  E869F6            call 0xf10\r
+000018A7  FF                db 0xFF\r
+000018A8  FFB0FEE6          push word [bx+si+0xe6fe]\r
+000018AC  64EBFE            fs jmp short 0x18ad\r
+000018AF  C3                ret\r
+000018B0  0D0A7E            or ax,0x7e0a\r
+000018B3  3120              xor [bx+si],sp\r
+000018B5  7365              jnc 0x191c\r
+000018B7  636F6E            arpl [bx+0x6e],bp\r
+000018BA  64206861          and [fs:bx+si+0x61],ch\r
+000018BE  7320              jnc 0x18e0\r
+000018C0  7061              jo 0x1923\r
+000018C2  7373              jnc 0x1937\r
+000018C4  65642E00B90500    add [cs:bx+di+0x5],bh\r
+000018CB  0000              add [bx+si],al\r
+000018CD  51                push cx\r
+000018CE  B96400            mov cx,0x64\r
+000018D1  0000              add [bx+si],al\r
+000018D3  E8AD19            call 0x3283\r
+000018D6  0000              add [bx+si],al\r
+000018D8  59                pop cx\r
+000018D9  BEB018            mov si,0x18b0\r
+000018DC  0100              add [bx+si],ax\r
+000018DE  B307              mov bl,0x7\r
+000018E0  E8CAEE            call 0x7ad\r
+000018E3  FF                db 0xFF\r
+000018E4  FFE2              jmp dx\r
+000018E6  E6C3              out 0xc3,al\r
+000018E8  0D0A49            or ax,0x490a\r
+000018EB  7420              jz 0x190d\r
+000018ED  776F              ja 0x195e\r
+000018EF  726B              jc 0x195c\r
+000018F1  732E              jnc 0x1921\r
+000018F3  2E2120            and [cs:bx+si],sp\r
+000018F6  3A2D              cmp ch,[di]\r
+000018F8  44                inc sp\r
+000018F9  0066B8            add [bp-0x48],ah\r
+000018FC  0100              add [bx+si],ax\r
+000018FE  E8BF1C            call 0x35c0\r
+00001901  0000              add [bx+si],al\r
+00001903  66B900016689      mov ecx,0x89660100\r
+00001909  CB                retf\r
+0000190A  88C8              mov al,cl\r
+0000190C  6651              push ecx\r
+0000190E  66B93200E8C9      mov ecx,0xc9e80032\r
+00001914  1C00              sbb al,0x0\r
+00001916  006659            add [bp+0x59],ah\r
+00001919  E2EC              loop 0x1907\r
+0000191B  BEF13B            mov si,0x3bf1\r
+0000191E  0100              add [bx+si],ax\r
+00001920  66B8040166BB      mov eax,0xbb660104\r
+00001926  A800              test al,0x0\r
+00001928  66B9140066BA      mov ecx,0xba660014\r
+0000192E  1200              adc al,[bx+si]\r
+00001930  E8D41C            call 0x3607\r
+00001933  0000              add [bx+si],al\r
+00001935  BE6D3D            mov si,0x3d6d\r
+00001938  0100              add [bx+si],ax\r
+0000193A  66B8FA0066BB      mov eax,0xbb6600fa\r
+00001940  BA0066            mov dx,0x6600\r
+00001943  B91400            mov cx,0x14\r
+00001946  66BA0E00E8BA      mov edx,0xbae8000e\r
+0000194C  1C00              sbb al,0x0\r
+0000194E  00BE853E          add [bp+0x3e85],bh\r
+00001952  0100              add [bx+si],ax\r
+00001954  66B8090166BB      mov eax,0xbb660109\r
+0000195A  BA0066            mov dx,0x6600\r
+0000195D  B91400            mov cx,0x14\r
+00001960  66BA0E00E8A0      mov edx,0xa0e8000e\r
+00001966  1C00              sbb al,0x0\r
+00001968  00BE9D3F          add [bp+0x3f9d],bh\r
+0000196C  0100              add [bx+si],ax\r
+0000196E  66B8180166BB      mov eax,0xbb660118\r
+00001974  BA0066            mov dx,0x6600\r
+00001977  B91400            mov cx,0x14\r
+0000197A  66BA0E00E886      mov edx,0x86e8000e\r
+00001980  1C00              sbb al,0x0\r
+00001982  00BEB540          add [bp+0x40b5],bh\r
+00001986  0100              add [bx+si],ax\r
+00001988  66B8180166BB      mov eax,0xbb660118\r
+0000198E  AC                lodsb\r
+0000198F  0066B9            add [bp-0x47],ah\r
+00001992  1400              adc al,0x0\r
+00001994  66BA0E00E86C      mov edx,0x6ce8000e\r
+0000199A  1C00              sbb al,0x0\r
+0000199C  00BE6D3D          add [bp+0x3d6d],bh\r
+000019A0  0100              add [bx+si],ax\r
+000019A2  66B8180166BB      mov eax,0xbb660118\r
+000019A8  9E                sahf\r
+000019A9  0066B9            add [bp-0x47],ah\r
+000019AC  1400              adc al,0x0\r
+000019AE  66BA0E00E852      mov edx,0x52e8000e\r
+000019B4  1C00              sbb al,0x0\r
+000019B6  00BECD41          add [bp+0x41cd],bh\r
+000019BA  0100              add [bx+si],ax\r
+000019BC  66B82C0166BB      mov eax,0xbb66012c\r
+000019C2  BA0066            mov dx,0x6600\r
+000019C5  B91400            mov cx,0x14\r
+000019C8  66BA0E00E838      mov edx,0x38e8000e\r
+000019CE  1C00              sbb al,0x0\r
+000019D0  00BECD41          add [bp+0x41cd],bh\r
+000019D4  0100              add [bx+si],ax\r
+000019D6  66B82C0166BB      mov eax,0xbb66012c\r
+000019DC  AC                lodsb\r
+000019DD  0066B9            add [bp-0x47],ah\r
+000019E0  1400              adc al,0x0\r
+000019E2  66BA0E00E81E      mov edx,0x1ee8000e\r
+000019E8  1C00              sbb al,0x0\r
+000019EA  00BE853E          add [bp+0x3e85],bh\r
+000019EE  0100              add [bx+si],ax\r
+000019F0  66B82C0166BB      mov eax,0xbb66012c\r
+000019F6  9E                sahf\r
+000019F7  0066B9            add [bp-0x47],ah\r
+000019FA  1400              adc al,0x0\r
+000019FC  66BA0E00E804      mov edx,0x4e8000e\r
+00001A02  1C00              sbb al,0x0\r
+00001A04  00E8              add al,ch\r
+00001A06  B7F5              mov bh,0xf5\r
+00001A08  FF                db 0xFF\r
+00001A09  FF66B8            jmp near [bp-0x48]\r
+00001A0C  0100              add [bx+si],ax\r
+00001A0E  E89D1B            call 0x35ae\r
+00001A11  0000              add [bx+si],al\r
+00001A13  BEE818            mov si,0x18e8\r
+00001A16  0100              add [bx+si],ax\r
+00001A18  B301              mov bl,0x1\r
+00001A1A  E890ED            call 0x7ad\r
+00001A1D  FF                db 0xFF\r
+00001A1E  FFC3              inc bx\r
+00001A20  B30D              mov bl,0xd\r
+00001A22  B707              mov bh,0x7\r
+00001A24  E825ED            call 0x74c\r
+00001A27  FF                db 0xFF\r
+00001A28  FF                db 0xFF\r
+00001A29  B90002            mov cx,0x200\r
+00001A2C  0000              add [bx+si],al\r
+00001A2E  BF0000            mov di,0x0\r
+00001A31  0800              or [bx+si],al\r
+00001A33  C7077765          mov word [bx],0x6577\r
+00001A37  61                popa\r
+00001A38  6883C7            push word 0xc783\r
+00001A3B  0483              add al,0x83\r
+00001A3D  E90483            jmp 0x9d44\r
+00001A40  F9                stc\r
+00001A41  0075EF            add [di-0x11],dh\r
+00001A44  B600              mov dh,0x0\r
+00001A46  B200              mov dl,0x0\r
+00001A48  B500              mov ch,0x0\r
+00001A4A  B103              mov cl,0x3\r
+00001A4C  B301              mov bl,0x1\r
+00001A4E  E82D20            call 0x3a7e\r
+00001A51  0000              add [bx+si],al\r
+00001A53  7248              jc 0x1a9d\r
+00001A55  B90002            mov cx,0x200\r
+00001A58  0000              add [bx+si],al\r
+00001A5A  BF0000            mov di,0x0\r
+00001A5D  0800              or [bx+si],al\r
+00001A5F  C7077368          mov word [bx],0x6873\r
+00001A63  697483C704        imul si,[si-0x7d],word 0x4c7\r
+00001A68  83E904            sub cx,byte +0x4\r
+00001A6B  83F900            cmp cx,byte +0x0\r
+00001A6E  75EF              jnz 0x1a5f\r
+00001A70  B600              mov dh,0x0\r
+00001A72  B200              mov dl,0x0\r
+00001A74  B500              mov ch,0x0\r
+00001A76  B103              mov cl,0x3\r
+00001A78  B300              mov bl,0x0\r
+00001A7A  E80120            call 0x3a7e\r
+00001A7D  0000              add [bx+si],al\r
+00001A7F  721C              jc 0x1a9d\r
+00001A81  BE0000            mov si,0x0\r
+00001A84  0800              or [bx+si],al\r
+00001A86  B90002            mov cx,0x200\r
+00001A89  0000              add [bx+si],al\r
+00001A8B  AC                lodsb\r
+00001A8C  88C3              mov bl,al\r
+00001A8E  B707              mov bh,0x7\r
+00001A90  E8B9EC            call 0x74c\r
+00001A93  FF                db 0xFF\r
+00001A94  FF4983            dec word [bx+di-0x7d]\r
+00001A97  F9                stc\r
+00001A98  0075F0            add [di-0x10],dh\r
+00001A9B  EB21              jmp short 0x1abe\r
+00001A9D  B30D              mov bl,0xd\r
+00001A9F  E8AAEC            call 0x74c\r
+00001AA2  FF                db 0xFF\r
+00001AA3  FFB30AE8          push word [bp+di+0xe80a]\r
+00001AA7  A3ECFF            mov [0xffec],ax\r
+00001AAA  FFB740B3          push word [bx+0xb340]\r
+00001AAE  45                inc bp\r
+00001AAF  E89AEC            call 0x74c\r
+00001AB2  FF                db 0xFF\r
+00001AB3  FF                db 0xFF\r
+00001AB4  E8AC1E            call 0x3963\r
+00001AB7  0000              add [bx+si],al\r
+00001AB9  E8621F            call 0x3a1e\r
+00001ABC  0000              add [bx+si],al\r
+00001ABE  C3                ret\r
+00001ABF  0D0A50            or ax,0x500a\r
+00001AC2  657266            gs jc 0x1b2b\r
+00001AC5  6F                outsw\r
+00001AC6  726D              jc 0x1b35\r
+00001AC8  696E67206D        imul bp,[bp+0x67],word 0x6d20\r
+00001ACD  656D              gs insw\r
+00001ACF  6F                outsw\r
+00001AD0  7279              jc 0x1b4b\r
+00001AD2  207465            and [si+0x65],dh\r
+00001AD5  7374              jnc 0x1b4b\r
+00001AD7  2E000D            add [cs:di],cl\r
+00001ADA  0A546F            or dl,[si+0x6f]\r
+00001ADD  7461              jz 0x1b40\r
+00001ADF  6C                insb\r
+00001AE0  20696E            and [bx+di+0x6e],ch\r
+00001AE3  7374              jnc 0x1b59\r
+00001AE5  61                popa\r
+00001AE6  6C                insb\r
+00001AE7  6C                insb\r
+00001AE8  6564206D65        and [fs:di+0x65],ch\r
+00001AED  6D                insw\r
+00001AEE  6F                outsw\r
+00001AEF  7279              jc 0x1b6a\r
+00001AF1  2028              and [bx+si],ch\r
+00001AF3  696E206279        imul bp,[bp+0x20],word 0x7962\r
+00001AF8  7465              jz 0x1b5f\r
+00001AFA  7329              jnc 0x1b25\r
+00001AFC  3A20              cmp ah,[bx+si]\r
+00001AFE  000D              add [di],cl\r
+00001B00  0A0D              or cl,[di]\r
+00001B02  0A4D65            or cl,[di+0x65]\r
+00001B05  6D                insw\r
+00001B06  6F                outsw\r
+00001B07  7279              jc 0x1b82\r
+00001B09  206368            and [bp+di+0x68],ah\r
+00001B0C  756E              jnz 0x1b7c\r
+00001B0E  6B733A00          imul si,[bp+di+0x3a],byte +0x0\r
+00001B12  0D0A41            or ax,0x410a\r
+00001B15  64647265          fs jc 0x1b7e\r
+00001B19  7373              jnc 0x1b8e\r
+00001B1B  2020              and [bx+si],ah\r
+00001B1D  2020              and [bx+si],ah\r
+00001B1F  53                push bx\r
+00001B20  697A652020        imul di,[bp+si+0x65],word 0x2020\r
+00001B25  2020              and [bx+si],ah\r
+00001B27  2020              and [bx+si],ah\r
+00001B29  205479            and [si+0x79],dl\r
+00001B2C  7065              jo 0x1b93\r
+00001B2E  2020              and [bx+si],ah\r
+00001B30  2020              and [bx+si],ah\r
+00001B32  2020              and [bx+si],ah\r
+00001B34  205072            and [bx+si+0x72],dl\r
+00001B37  657669            gs jna 0x1ba3\r
+00001B3A  6F                outsw\r
+00001B3B  7573              jnz 0x1bb0\r
+00001B3D  2020              and [bx+si],ah\r
+00001B3F  204E65            and [bp+0x65],cl\r
+00001B42  7874              js 0x1bb8\r
+00001B44  000D              add [di],cl\r
+00001B46  0A2D              or ch,[di]\r
+00001B48  2D2D2D            sub ax,0x2d2d\r
+00001B4B  2D2D2D            sub ax,0x2d2d\r
+00001B4E  2D2D2D            sub ax,0x2d2d\r
+00001B51  2D2D2D            sub ax,0x2d2d\r
+00001B54  2D2D2D            sub ax,0x2d2d\r
+00001B57  2D2D2D            sub ax,0x2d2d\r
+00001B5A  2D2D2D            sub ax,0x2d2d\r
+00001B5D  2D2D2D            sub ax,0x2d2d\r
+00001B60  2D2D2D            sub ax,0x2d2d\r
+00001B63  2D2D2D            sub ax,0x2d2d\r
+00001B66  2D2D2D            sub ax,0x2d2d\r
+00001B69  2D2D2D            sub ax,0x2d2d\r
+00001B6C  2D2D2D            sub ax,0x2d2d\r
+00001B6F  2D2D2D            sub ax,0x2d2d\r
+00001B72  2D2D2D            sub ax,0x2d2d\r
+00001B75  2D2D2D            sub ax,0x2d2d\r
+00001B78  2D2D2D            sub ax,0x2d2d\r
+00001B7B  2D2D2D            sub ax,0x2d2d\r
+00001B7E  0030              add [bx+si],dh\r
+00001B80  7800              js 0x1b82\r
+00001B82  46                inc si\r
+00001B83  7265              jc 0x1bea\r
+00001B85  652020            and [gs:bx+si],ah\r
+00001B88  2020              and [bx+si],ah\r
+00001B8A  2020              and [bx+si],ah\r
+00001B8C  2000              and [bx+si],al\r
+00001B8E  55                push bp\r
+00001B8F  7365              jnc 0x1bf6\r
+00001B91  642020            and [fs:bx+si],ah\r
+00001B94  2020              and [bx+si],ah\r
+00001B96  2020              and [bx+si],ah\r
+00001B98  2000              and [bx+si],al\r
+00001B9A  4E                dec si\r
+00001B9B  6F                outsw\r
+00001B9C  6E                outsb\r
+00001B9D  652020            and [gs:bx+si],ah\r
+00001BA0  2020              and [bx+si],ah\r
+00001BA2  2020              and [bx+si],ah\r
+00001BA4  2000              and [bx+si],al\r
+00001BA6  2000              and [bx+si],al\r
+00001BA8  0D0A00            or ax,0xa\r
+00001BAB  0000              add [bx+si],al\r
+00001BAD  0000              add [bx+si],al\r
+00001BAF  0000              add [bx+si],al\r
+00001BB1  0000              add [bx+si],al\r
+00001BB3  0100              add [bx+si],ax\r
+00001BB5  0000              add [bx+si],al\r
+00001BB7  0000              add [bx+si],al\r
+00001BB9  0000              add [bx+si],al\r
+00001BBB  0000              add [bx+si],al\r
+00001BBD  0000              add [bx+si],al\r
+00001BBF  0000              add [bx+si],al\r
+00001BC1  0000              add [bx+si],al\r
+00001BC3  005053            add [bx+si+0x53],dl\r
+00001BC6  51                push cx\r
+00001BC7  52                push dx\r
+00001BC8  803DB3            cmp byte [di],0xb3\r
+00001BCB  1B01              sbb ax,[bx+di]\r
+00001BCD  0000              add [bx+si],al\r
+00001BCF  744A              jz 0x1c1b\r
+00001BD1  BB0000            mov bx,0x0\r
+00001BD4  0001              add [bx+di],al\r
+00001BD6  891D              mov [di],bx\r
+00001BD8  C01B01            rcr byte [bp+di],0x1\r
+00001BDB  00E8              add al,ch\r
+00001BDD  98                cbw\r
+00001BDE  27                daa\r
+00001BDF  0000              add [bx+si],al\r
+00001BE1  891D              mov [di],bx\r
+00001BE3  BC1B01            mov sp,0x11b\r
+00001BE6  00BB0000          add [bp+di+0x0],bh\r
+00001BEA  E000              loopne 0x1bec\r
+00001BEC  89D9              mov cx,bx\r
+00001BEE  E88627            call 0x4377\r
+00001BF1  0000              add [bx+si],al\r
+00001BF3  53                push bx\r
+00001BF4  51                push cx\r
+00001BF5  BB0000            mov bx,0x0\r
+00001BF8  0100              add [bx+si],ax\r
+00001BFA  891D              mov [di],bx\r
+00001BFC  B81B01            mov ax,0x11b\r
+00001BFF  00E8              add al,ch\r
+00001C01  7427              jz 0x1c2a\r
+00001C03  0000              add [bx+si],al\r
+00001C05  891D              mov [di],bx\r
+00001C07  B41B              mov ah,0x1b\r
+00001C09  0100              add [bx+si],ax\r
+00001C0B  59                pop cx\r
+00001C0C  5B                pop bx\r
+00001C0D  E82A29            call 0x453a\r
+00001C10  0000              add [bx+si],al\r
+00001C12  C605B3            mov byte [di],0xb3\r
+00001C15  1B01              sbb ax,[bx+di]\r
+00001C17  0000              add [bx+si],al\r
+00001C19  EB29              jmp short 0x1c44\r
+00001C1B  8B1D              mov bx,[di]\r
+00001C1D  B41B              mov ah,0x1b\r
+00001C1F  0100              add [bx+si],ax\r
+00001C21  8B0D              mov cx,[di]\r
+00001C23  B81B01            mov ax,0x11b\r
+00001C26  00E8              add al,ch\r
+00001C28  1029              adc [bx+di],ch\r
+00001C2A  0000              add [bx+si],al\r
+00001C2C  8B1D              mov bx,[di]\r
+00001C2E  BC1B01            mov sp,0x11b\r
+00001C31  008B0DC0          add [bp+di+0xc00d],cl\r
+00001C35  1B01              sbb ax,[bx+di]\r
+00001C37  00E8              add al,ch\r
+00001C39  FF28              jmp far [bx+si]\r
+00001C3B  0000              add [bx+si],al\r
+00001C3D  C605B3            mov byte [di],0xb3\r
+00001C40  1B01              sbb ax,[bx+di]\r
+00001C42  0001              add [bx+di],al\r
+00001C44  BEBF1A            mov si,0x1abf\r
+00001C47  0100              add [bx+si],ax\r
+00001C49  B307              mov bl,0x7\r
+00001C4B  E85FEB            call 0x7ad\r
+00001C4E  FF                db 0xFF\r
+00001C4F  FF                db 0xFF\r
+00001C50  BED91A            mov si,0x1ad9\r
+00001C53  0100              add [bx+si],ax\r
+00001C55  B307              mov bl,0x7\r
+00001C57  E853EB            call 0x7ad\r
+00001C5A  FF                db 0xFF\r
+00001C5B  FF                db 0xFF\r
+00001C5C  BE7F1B            mov si,0x1b7f\r
+00001C5F  0100              add [bx+si],ax\r
+00001C61  B304              mov bl,0x4\r
+00001C63  E847EB            call 0x7ad\r
+00001C66  FF                db 0xFF\r
+00001C67  FF8B1DC8          dec word [bp+di+0xc81d]\r
+00001C6B  0001              add [bx+di],al\r
+00001C6D  00B104E8          add [bx+di+0xe804],dh\r
+00001C71  0BEB              or bp,bx\r
+00001C73  FF                db 0xFF\r
+00001C74  FF                db 0xFF\r
+00001C75  BEFF1A            mov si,0x1aff\r
+00001C78  0100              add [bx+si],ax\r
+00001C7A  B307              mov bl,0x7\r
+00001C7C  E82EEB            call 0x7ad\r
+00001C7F  FF                db 0xFF\r
+00001C80  FF                db 0xFF\r
+00001C81  BE121B            mov si,0x1b12\r
+00001C84  0100              add [bx+si],ax\r
+00001C86  B307              mov bl,0x7\r
+00001C88  E822EB            call 0x7ad\r
+00001C8B  FF                db 0xFF\r
+00001C8C  FF                db 0xFF\r
+00001C8D  BE451B            mov si,0x1b45\r
+00001C90  0100              add [bx+si],ax\r
+00001C92  B307              mov bl,0x7\r
+00001C94  E816EB            call 0x7ad\r
+00001C97  FF                db 0xFF\r
+00001C98  FFC7              inc di\r
+00001C9A  05AB1B            add ax,0x1bab\r
+00001C9D  0100              add [bx+si],ax\r
+00001C9F  0000              add [bx+si],al\r
+00001CA1  0000              add [bx+si],al\r
+00001CA3  A12A43            mov ax,[0x432a]\r
+00001CA6  0100              add [bx+si],ax\r
+00001CA8  A3AF1B            mov [0x1baf],ax\r
+00001CAB  0100              add [bx+si],ax\r
+00001CAD  A1AB1B            mov ax,[0x1bab]\r
+00001CB0  0100              add [bx+si],ax\r
+00001CB2  8B1D              mov bx,[di]\r
+00001CB4  AF                scasw\r
+00001CB5  1B01              sbb ax,[bx+di]\r
+00001CB7  003B              add [bp+di],bh\r
+00001CB9  05C800            add ax,0xc8\r
+00001CBC  0100              add [bx+si],ax\r
+00001CBE  735E              jnc 0x1d1e\r
+00001CC0  833DAF            cmp word [di],byte -0x51\r
+00001CC3  1B01              sbb ax,[bx+di]\r
+00001CC5  0000              add [bx+si],al\r
+00001CC7  7514              jnz 0x1cdd\r
+00001CC9  8B1D              mov bx,[di]\r
+00001CCB  C8000100          enter 0x100,0x0\r
+00001CCF  29C3              sub bx,ax\r
+00001CD1  BF0100            mov di,0x1\r
+00001CD4  0000              add [bx+si],al\r
+00001CD6  E84800            call 0x1d21\r
+00001CD9  0000              add [bx+si],al\r
+00001CDB  EB41              jmp short 0x1d1e\r
+00001CDD  29C3              sub bx,ax\r
+00001CDF  BF0100            mov di,0x1\r
+00001CE2  0000              add [bx+si],al\r
+00001CE4  E83A00            call 0x1d21\r
+00001CE7  0000              add [bx+si],al\r
+00001CE9  A1AF1B            mov ax,[0x1baf]\r
+00001CEC  0100              add [bx+si],ax\r
+00001CEE  83F800            cmp ax,byte +0x0\r
+00001CF1  742B              jz 0x1d1e\r
+00001CF3  8B5808            mov bx,[bx+si+0x8]\r
+00001CF6  A3AB1B            mov [0x1bab],ax\r
+00001CF9  0100              add [bx+si],ax\r
+00001CFB  891D              mov [di],bx\r
+00001CFD  AF                scasw\r
+00001CFE  1B01              sbb ax,[bx+di]\r
+00001D00  00A1AB1B          add [bx+di+0x1bab],ah\r
+00001D04  0100              add [bx+si],ax\r
+00001D06  8B5804            mov bx,[bx+si+0x4]\r
+00001D09  8B08              mov cx,[bx+si]\r
+00001D0B  8B5008            mov dx,[bx+si+0x8]\r
+00001D0E  31FF              xor di,di\r
+00001D10  E80E00            call 0x1d21\r
+00001D13  0000              add [bx+si],al\r
+00001D15  01D8              add ax,bx\r
+00001D17  A3AB1B            mov [0x1bab],ax\r
+00001D1A  0100              add [bx+si],ax\r
+00001D1C  EB8F              jmp short 0x1cad\r
+00001D1E  58                pop ax\r
+00001D1F  5B                pop bx\r
+00001D20  59                pop cx\r
+00001D21  5A                pop dx\r
+00001D22  C3                ret\r
+00001D23  50                push ax\r
+00001D24  53                push bx\r
+00001D25  51                push cx\r
+00001D26  52                push dx\r
+00001D27  57                push di\r
+00001D28  53                push bx\r
+00001D29  BEA81B            mov si,0x1ba8\r
+00001D2C  0100              add [bx+si],ax\r
+00001D2E  B307              mov bl,0x7\r
+00001D30  E87AEA            call 0x7ad\r
+00001D33  FF                db 0xFF\r
+00001D34  FF                db 0xFF\r
+00001D35  BE7F1B            mov si,0x1b7f\r
+00001D38  0100              add [bx+si],ax\r
+00001D3A  B304              mov bl,0x4\r
+00001D3C  E86EEA            call 0x7ad\r
+00001D3F  FF                db 0xFF\r
+00001D40  FF5189            call near [bx+di-0x77]\r
+00001D43  C3                ret\r
+00001D44  B104              mov cl,0x4\r
+00001D46  E835EA            call 0x77e\r
+00001D49  FF                db 0xFF\r
+00001D4A  FF                db 0xFF\r
+00001D4B  BEA61B            mov si,0x1ba6\r
+00001D4E  0100              add [bx+si],ax\r
+00001D50  B307              mov bl,0x7\r
+00001D52  E858EA            call 0x7ad\r
+00001D55  FF                db 0xFF\r
+00001D56  FF                db 0xFF\r
+00001D57  BE7F1B            mov si,0x1b7f\r
+00001D5A  0100              add [bx+si],ax\r
+00001D5C  B304              mov bl,0x4\r
+00001D5E  E84CEA            call 0x7ad\r
+00001D61  FF                db 0xFF\r
+00001D62  FF595B            call far [bx+di+0x5b]\r
+00001D65  51                push cx\r
+00001D66  B104              mov cl,0x4\r
+00001D68  E813EA            call 0x77e\r
+00001D6B  FF                db 0xFF\r
+00001D6C  FF                db 0xFF\r
+00001D6D  BEA61B            mov si,0x1ba6\r
+00001D70  0100              add [bx+si],ax\r
+00001D72  B307              mov bl,0x7\r
+00001D74  E836EA            call 0x7ad\r
+00001D77  FF                db 0xFF\r
+00001D78  FF83FF01          inc word [bp+di+0x1ff]\r
+00001D7C  7527              jnz 0x1da5\r
+00001D7E  59                pop cx\r
+00001D7F  BE8E1B            mov si,0x1b8e\r
+00001D82  0100              add [bx+si],ax\r
+00001D84  B307              mov bl,0x7\r
+00001D86  E824EA            call 0x7ad\r
+00001D89  FF                db 0xFF\r
+00001D8A  FF                db 0xFF\r
+00001D8B  BE9A1B            mov si,0x1b9a\r
+00001D8E  0100              add [bx+si],ax\r
+00001D90  B307              mov bl,0x7\r
+00001D92  E818EA            call 0x7ad\r
+00001D95  FF                db 0xFF\r
+00001D96  FF                db 0xFF\r
+00001D97  BE9A1B            mov si,0x1b9a\r
+00001D9A  0100              add [bx+si],ax\r
+00001D9C  B307              mov bl,0x7\r
+00001D9E  E80CEA            call 0x7ad\r
+00001DA1  FF                db 0xFF\r
+00001DA2  FF                db 0xFF\r
+00001DA3  EB41              jmp short 0x1de6\r
+00001DA5  BE821B            mov si,0x1b82\r
+00001DA8  0100              add [bx+si],ax\r
+00001DAA  B307              mov bl,0x7\r
+00001DAC  E8FEE9            call 0x7ad\r
+00001DAF  FF                db 0xFF\r
+00001DB0  FF                db 0xFF\r
+00001DB1  BE7F1B            mov si,0x1b7f\r
+00001DB4  0100              add [bx+si],ax\r
+00001DB6  B304              mov bl,0x4\r
+00001DB8  E8F2E9            call 0x7ad\r
+00001DBB  FF                db 0xFF\r
+00001DBC  FF5BB1            call far [bp+di-0x4f]\r
+00001DBF  04E8              add al,0xe8\r
+00001DC1  BBE9FF            mov bx,0xffe9\r
+00001DC4  FF                db 0xFF\r
+00001DC5  BEA61B            mov si,0x1ba6\r
+00001DC8  0100              add [bx+si],ax\r
+00001DCA  B307              mov bl,0x7\r
+00001DCC  E8DEE9            call 0x7ad\r
+00001DCF  FF                db 0xFF\r
+00001DD0  FF                db 0xFF\r
+00001DD1  BE7F1B            mov si,0x1b7f\r
+00001DD4  0100              add [bx+si],ax\r
+00001DD6  B304              mov bl,0x4\r
+00001DD8  E8D2E9            call 0x7ad\r
+00001DDB  FF                db 0xFF\r
+00001DDC  FF89D3B1          dec word [bx+di+0xb1d3]\r
+00001DE0  04E8              add al,0xe8\r
+00001DE2  9AE9FFFF5F        call 0x5fff:0xffe9\r
+00001DE7  5A                pop dx\r
+00001DE8  59                pop cx\r
+00001DE9  5B                pop bx\r
+00001DEA  58                pop ax\r
+00001DEB  C3                ret\r
+00001DEC  C3                ret\r
+00001DED  C3                ret\r
+00001DEE  C6051F            mov byte [di],0x1f\r
+00001DF1  2801              sub [bx+di],al\r
+00001DF3  0000              add [bx+si],al\r
+00001DF5  C60520            mov byte [di],0x20\r
+00001DF8  2801              sub [bx+di],al\r
+00001DFA  0055C6            add [di-0x3a],dl\r
+00001DFD  052128            add ax,0x2821\r
+00001E00  0100              add [bx+si],ax\r
+00001E02  6E                outsb\r
+00001E03  C60522            mov byte [di],0x22\r
+00001E06  2801              sub [bx+di],al\r
+00001E08  0068C6            add [bx+si-0x3a],ch\r
+00001E0B  052328            add ax,0x2823\r
+00001E0E  0100              add [bx+si],ax\r
+00001E10  61                popa\r
+00001E11  C60524            mov byte [di],0x24\r
+00001E14  2801              sub [bx+di],al\r
+00001E16  006EC6            add [bp-0x3a],ch\r
+00001E19  052528            add ax,0x2825\r
+00001E1C  0100              add [bx+si],ax\r
+00001E1E  64C60526          mov byte [fs:di],0x26\r
+00001E22  2801              sub [bx+di],al\r
+00001E24  006CC6            add [si-0x3a],ch\r
+00001E27  052728            add ax,0x2827\r
+00001E2A  0100              add [bx+si],ax\r
+00001E2C  65C60528          mov byte [gs:di],0x28\r
+00001E30  2801              sub [bx+di],al\r
+00001E32  0064C6            add [si-0x3a],ah\r
+00001E35  052928            add ax,0x2829\r
+00001E38  0100              add [bx+si],ax\r
+00001E3A  20C6              and dh,al\r
+00001E3C  052A28            add ax,0x282a\r
+00001E3F  0100              add [bx+si],ax\r
+00001E41  49                dec cx\r
+00001E42  C6052B            mov byte [di],0x2b\r
+00001E45  2801              sub [bx+di],al\r
+00001E47  006EC6            add [bp-0x3a],ch\r
+00001E4A  052C28            add ax,0x282c\r
+00001E4D  0100              add [bx+si],ax\r
+00001E4F  74C6              jz 0x1e17\r
+00001E51  052D28            add ax,0x282d\r
+00001E54  0100              add [bx+si],ax\r
+00001E56  20C6              and dh,al\r
+00001E58  052E28            add ax,0x282e\r
+00001E5B  0100              add [bx+si],ax\r
+00001E5D  00E8              add al,ch\r
+00001E5F  1E                push ds\r
+00001E60  0D0000            or ax,0x0\r
+00001E63  C6051F            mov byte [di],0x1f\r
+00001E66  2801              sub [bx+di],al\r
+00001E68  0000              add [bx+si],al\r
+00001E6A  C60520            mov byte [di],0x20\r
+00001E6D  2801              sub [bx+di],al\r
+00001E6F  0044C6            add [si-0x3a],al\r
+00001E72  052128            add ax,0x2821\r
+00001E75  0100              add [bx+si],ax\r
+00001E77  69C60522          imul ax,si,word 0x2205\r
+00001E7B  2801              sub [bx+di],al\r
+00001E7D  0076C6            add [bp-0x3a],dh\r
+00001E80  052328            add ax,0x2823\r
+00001E83  0100              add [bx+si],ax\r
+00001E85  69C60524          imul ax,si,word 0x2405\r
+00001E89  2801              sub [bx+di],al\r
+00001E8B  0064C6            add [si-0x3a],ah\r
+00001E8E  052528            add ax,0x2825\r
+00001E91  0100              add [bx+si],ax\r
+00001E93  65C60526          mov byte [gs:di],0x26\r
+00001E97  2801              sub [bx+di],al\r
+00001E99  0020              add [bx+si],ah\r
+00001E9B  C60527            mov byte [di],0x27\r
+00001E9E  2801              sub [bx+di],al\r
+00001EA0  0065C6            add [di-0x3a],ah\r
+00001EA3  052828            add ax,0x2828\r
+00001EA6  0100              add [bx+si],ax\r
+00001EA8  72C6              jc 0x1e70\r
+00001EAA  052928            add ax,0x2829\r
+00001EAD  0100              add [bx+si],ax\r
+00001EAF  72C6              jc 0x1e77\r
+00001EB1  052A28            add ax,0x282a\r
+00001EB4  0100              add [bx+si],ax\r
+00001EB6  6F                outsw\r
+00001EB7  C6052B            mov byte [di],0x2b\r
+00001EBA  2801              sub [bx+di],al\r
+00001EBC  0072C6            add [bp+si-0x3a],dh\r
+00001EBF  052C28            add ax,0x282c\r
+00001EC2  0100              add [bx+si],ax\r
+00001EC4  20C6              and dh,al\r
+00001EC6  052D28            add ax,0x282d\r
+00001EC9  0100              add [bx+si],ax\r
+00001ECB  20C6              and dh,al\r
+00001ECD  052E28            add ax,0x282e\r
+00001ED0  0100              add [bx+si],ax\r
+00001ED2  00E8              add al,ch\r
+00001ED4  A90C00            test ax,0xc\r
+00001ED7  00C6              add dh,al\r
+00001ED9  051F28            add ax,0x281f\r
+00001EDC  0100              add [bx+si],ax\r
+00001EDE  00C6              add dh,al\r
+00001EE0  052028            add ax,0x2820\r
+00001EE3  0100              add [bx+si],ax\r
+00001EE5  44                inc sp\r
+00001EE6  C60521            mov byte [di],0x21\r
+00001EE9  2801              sub [bx+di],al\r
+00001EEB  0065C6            add [di-0x3a],ah\r
+00001EEE  052228            add ax,0x2822\r
+00001EF1  0100              add [bx+si],ax\r
+00001EF3  62                db 0x62\r
+00001EF4  C60523            mov byte [di],0x23\r
+00001EF7  2801              sub [bx+di],al\r
+00001EF9  0075C6            add [di-0x3a],dh\r
+00001EFC  052428            add ax,0x2824\r
+00001EFF  0100              add [bx+si],ax\r
+00001F01  67C6052528010020  mov byte [dword 0x12825],0x20\r
+00001F09  C60526            mov byte [di],0x26\r
+00001F0C  2801              sub [bx+di],al\r
+00001F0E  0066C6            add [bp-0x3a],ah\r
+00001F11  052728            add ax,0x2827\r
+00001F14  0100              add [bx+si],ax\r
+00001F16  61                popa\r
+00001F17  C60528            mov byte [di],0x28\r
+00001F1A  2801              sub [bx+di],al\r
+00001F1C  0075C6            add [di-0x3a],dh\r
+00001F1F  052928            add ax,0x2829\r
+00001F22  0100              add [bx+si],ax\r
+00001F24  6C                insb\r
+00001F25  C6052A            mov byte [di],0x2a\r
+00001F28  2801              sub [bx+di],al\r
+00001F2A  0074C6            add [si-0x3a],dh\r
+00001F2D  052B28            add ax,0x282b\r
+00001F30  0100              add [bx+si],ax\r
+00001F32  20C6              and dh,al\r
+00001F34  052C28            add ax,0x282c\r
+00001F37  0100              add [bx+si],ax\r
+00001F39  20C6              and dh,al\r
+00001F3B  052D28            add ax,0x282d\r
+00001F3E  0100              add [bx+si],ax\r
+00001F40  20C6              and dh,al\r
+00001F42  052E28            add ax,0x282e\r
+00001F45  0100              add [bx+si],ax\r
+00001F47  00E8              add al,ch\r
+00001F49  340C              xor al,0xc\r
+00001F4B  0000              add [bx+si],al\r
+00001F4D  C6051F            mov byte [di],0x1f\r
+00001F50  2801              sub [bx+di],al\r
+00001F52  0000              add [bx+si],al\r
+00001F54  C60520            mov byte [di],0x20\r
+00001F57  2801              sub [bx+di],al\r
+00001F59  004EC6            add [bp-0x3a],cl\r
+00001F5C  052128            add ax,0x2821\r
+00001F5F  0100              add [bx+si],ax\r
+00001F61  4D                dec bp\r
+00001F62  C60522            mov byte [di],0x22\r
+00001F65  2801              sub [bx+di],al\r
+00001F67  0049C6            add [bx+di-0x3a],cl\r
+00001F6A  052328            add ax,0x2823\r
+00001F6D  0100              add [bx+si],ax\r
+00001F6F  20C6              and dh,al\r
+00001F71  052428            add ax,0x2824\r
+00001F74  0100              add [bx+si],ax\r
+00001F76  69C60525          imul ax,si,word 0x2505\r
+00001F7A  2801              sub [bx+di],al\r
+00001F7C  006EC6            add [bp-0x3a],ch\r
+00001F7F  052628            add ax,0x2826\r
+00001F82  0100              add [bx+si],ax\r
+00001F84  74C6              jz 0x1f4c\r
+00001F86  052728            add ax,0x2827\r
+00001F89  0100              add [bx+si],ax\r
+00001F8B  65C60528          mov byte [gs:di],0x28\r
+00001F8F  2801              sub [bx+di],al\r
+00001F91  0072C6            add [bp+si-0x3a],dh\r
+00001F94  052928            add ax,0x2829\r
+00001F97  0100              add [bx+si],ax\r
+00001F99  72C6              jc 0x1f61\r
+00001F9B  052A28            add ax,0x282a\r
+00001F9E  0100              add [bx+si],ax\r
+00001FA0  75C6              jnz 0x1f68\r
+00001FA2  052B28            add ax,0x282b\r
+00001FA5  0100              add [bx+si],ax\r
+00001FA7  70C6              jo 0x1f6f\r
+00001FA9  052C28            add ax,0x282c\r
+00001FAC  0100              add [bx+si],ax\r
+00001FAE  74C6              jz 0x1f76\r
+00001FB0  052D28            add ax,0x282d\r
+00001FB3  0100              add [bx+si],ax\r
+00001FB5  20C6              and dh,al\r
+00001FB7  052E28            add ax,0x282e\r
+00001FBA  0100              add [bx+si],ax\r
+00001FBC  00E8              add al,ch\r
+00001FBE  BF0B00            mov di,0xb\r
+00001FC1  00C6              add dh,al\r
+00001FC3  051F28            add ax,0x281f\r
+00001FC6  0100              add [bx+si],ax\r
+00001FC8  00C6              add dh,al\r
+00001FCA  052028            add ax,0x2820\r
+00001FCD  0100              add [bx+si],ax\r
+00001FCF  42                inc dx\r
+00001FD0  C60521            mov byte [di],0x21\r
+00001FD3  2801              sub [bx+di],al\r
+00001FD5  0072C6            add [bp+si-0x3a],dh\r
+00001FD8  052228            add ax,0x2822\r
+00001FDB  0100              add [bx+si],ax\r
+00001FDD  65C60523          mov byte [gs:di],0x23\r
+00001FE1  2801              sub [bx+di],al\r
+00001FE3  0061C6            add [bx+di-0x3a],ah\r
+00001FE6  052428            add ax,0x2824\r
+00001FE9  0100              add [bx+si],ax\r
+00001FEB  6BC605            imul ax,si,byte +0x5\r
+00001FEE  252801            and ax,0x128\r
+00001FF1  0070C6            add [bx+si-0x3a],dh\r
+00001FF4  052628            add ax,0x2826\r
+00001FF7  0100              add [bx+si],ax\r
+00001FF9  6F                outsw\r
+00001FFA  C60527            mov byte [di],0x27\r
+00001FFD  2801              sub [bx+di],al\r
+00001FFF  0069C6            add [bx+di-0x3a],ch\r
+00002002  052828            add ax,0x2828\r
+00002005  0100              add [bx+si],ax\r
+00002007  6E                outsb\r
+00002008  C60529            mov byte [di],0x29\r
+0000200B  2801              sub [bx+di],al\r
+0000200D  0074C6            add [si-0x3a],dh\r
+00002010  052A28            add ax,0x282a\r
+00002013  0100              add [bx+si],ax\r
+00002015  20C6              and dh,al\r
+00002017  052B28            add ax,0x282b\r
+0000201A  0100              add [bx+si],ax\r
+0000201C  20C6              and dh,al\r
+0000201E  052C28            add ax,0x282c\r
+00002021  0100              add [bx+si],ax\r
+00002023  20C6              and dh,al\r
+00002025  052D28            add ax,0x282d\r
+00002028  0100              add [bx+si],ax\r
+0000202A  20C6              and dh,al\r
+0000202C  052E28            add ax,0x282e\r
+0000202F  0100              add [bx+si],ax\r
+00002031  00E8              add al,ch\r
+00002033  4A                dec dx\r
+00002034  0B00              or ax,[bx+si]\r
+00002036  00C6              add dh,al\r
+00002038  051F28            add ax,0x281f\r
+0000203B  0100              add [bx+si],ax\r
+0000203D  00C6              add dh,al\r
+0000203F  052028            add ax,0x2820\r
+00002042  0100              add [bx+si],ax\r
+00002044  4F                dec di\r
+00002045  C60521            mov byte [di],0x21\r
+00002048  2801              sub [bx+di],al\r
+0000204A  0076C6            add [bp-0x3a],dh\r
+0000204D  052228            add ax,0x2822\r
+00002050  0100              add [bx+si],ax\r
+00002052  65C60523          mov byte [gs:di],0x23\r
+00002056  2801              sub [bx+di],al\r
+00002058  0072C6            add [bp+si-0x3a],dh\r
+0000205B  052428            add ax,0x2824\r
+0000205E  0100              add [bx+si],ax\r
+00002060  66C60525          o32 mov byte [di],0x25\r
+00002064  2801              sub [bx+di],al\r
+00002066  006CC6            add [si-0x3a],ch\r
+00002069  052628            add ax,0x2826\r
+0000206C  0100              add [bx+si],ax\r
+0000206E  6F                outsw\r
+0000206F  C60527            mov byte [di],0x27\r
+00002072  2801              sub [bx+di],al\r
+00002074  0077C6            add [bx-0x3a],dh\r
+00002077  052828            add ax,0x2828\r
+0000207A  0100              add [bx+si],ax\r
+0000207C  20C6              and dh,al\r
+0000207E  052928            add ax,0x2829\r
+00002081  0100              add [bx+si],ax\r
+00002083  66C6052A          o32 mov byte [di],0x2a\r
+00002087  2801              sub [bx+di],al\r
+00002089  0061C6            add [bx+di-0x3a],ah\r
+0000208C  052B28            add ax,0x282b\r
+0000208F  0100              add [bx+si],ax\r
+00002091  75C6              jnz 0x2059\r
+00002093  052C28            add ax,0x282c\r
+00002096  0100              add [bx+si],ax\r
+00002098  6C                insb\r
+00002099  C6052D            mov byte [di],0x2d\r
+0000209C  2801              sub [bx+di],al\r
+0000209E  0074C6            add [si-0x3a],dh\r
+000020A1  052E28            add ax,0x282e\r
+000020A4  0100              add [bx+si],ax\r
+000020A6  00E8              add al,ch\r
+000020A8  D50A              aad\r
+000020AA  0000              add [bx+si],al\r
+000020AC  C6051F            mov byte [di],0x1f\r
+000020AF  2801              sub [bx+di],al\r
+000020B1  0000              add [bx+si],al\r
+000020B3  C60520            mov byte [di],0x20\r
+000020B6  2801              sub [bx+di],al\r
+000020B8  0042C6            add [bp+si-0x3a],al\r
+000020BB  052128            add ax,0x2821\r
+000020BE  0100              add [bx+si],ax\r
+000020C0  6F                outsw\r
+000020C1  C60522            mov byte [di],0x22\r
+000020C4  2801              sub [bx+di],al\r
+000020C6  0075C6            add [di-0x3a],dh\r
+000020C9  052328            add ax,0x2823\r
+000020CC  0100              add [bx+si],ax\r
+000020CE  6E                outsb\r
+000020CF  C60524            mov byte [di],0x24\r
+000020D2  2801              sub [bx+di],al\r
+000020D4  0064C6            add [si-0x3a],ah\r
+000020D7  052528            add ax,0x2825\r
+000020DA  0100              add [bx+si],ax\r
+000020DC  73C6              jnc 0x20a4\r
+000020DE  052628            add ax,0x2826\r
+000020E1  0100              add [bx+si],ax\r
+000020E3  20C6              and dh,al\r
+000020E5  052728            add ax,0x2827\r
+000020E8  0100              add [bx+si],ax\r
+000020EA  63C6              arpl si,ax\r
+000020EC  052828            add ax,0x2828\r
+000020EF  0100              add [bx+si],ax\r
+000020F1  68C605            push word 0x5c6\r
+000020F4  2928              sub [bx+si],bp\r
+000020F6  0100              add [bx+si],ax\r
+000020F8  65C6052A          mov byte [gs:di],0x2a\r
+000020FC  2801              sub [bx+di],al\r
+000020FE  0063C6            add [bp+di-0x3a],ah\r
+00002101  052B28            add ax,0x282b\r
+00002104  0100              add [bx+si],ax\r
+00002106  6BC605            imul ax,si,byte +0x5\r
+00002109  2C28              sub al,0x28\r
+0000210B  0100              add [bx+si],ax\r
+0000210D  20C6              and dh,al\r
+0000210F  052D28            add ax,0x282d\r
+00002112  0100              add [bx+si],ax\r
+00002114  20C6              and dh,al\r
+00002116  052E28            add ax,0x282e\r
+00002119  0100              add [bx+si],ax\r
+0000211B  00E8              add al,ch\r
+0000211D  60                pusha\r
+0000211E  0A00              or al,[bx+si]\r
+00002120  00C6              add dh,al\r
+00002122  051F28            add ax,0x281f\r
+00002125  0100              add [bx+si],ax\r
+00002127  00C6              add dh,al\r
+00002129  052028            add ax,0x2820\r
+0000212C  0100              add [bx+si],ax\r
+0000212E  49                dec cx\r
+0000212F  C60521            mov byte [di],0x21\r
+00002132  2801              sub [bx+di],al\r
+00002134  006EC6            add [bp-0x3a],ch\r
+00002137  052228            add ax,0x2822\r
+0000213A  0100              add [bx+si],ax\r
+0000213C  76C6              jna 0x2104\r
+0000213E  052328            add ax,0x2823\r
+00002141  0100              add [bx+si],ax\r
+00002143  61                popa\r
+00002144  C60524            mov byte [di],0x24\r
+00002147  2801              sub [bx+di],al\r
+00002149  006CC6            add [si-0x3a],ch\r
+0000214C  052528            add ax,0x2825\r
+0000214F  0100              add [bx+si],ax\r
+00002151  69C60526          imul ax,si,word 0x2605\r
+00002155  2801              sub [bx+di],al\r
+00002157  0064C6            add [si-0x3a],ah\r
+0000215A  052728            add ax,0x2827\r
+0000215D  0100              add [bx+si],ax\r
+0000215F  20C6              and dh,al\r
+00002161  052828            add ax,0x2828\r
+00002164  0100              add [bx+si],ax\r
+00002166  6F                outsw\r
+00002167  C60529            mov byte [di],0x29\r
+0000216A  2801              sub [bx+di],al\r
+0000216C  0070C6            add [bx+si-0x3a],dh\r
+0000216F  052A28            add ax,0x282a\r
+00002172  0100              add [bx+si],ax\r
+00002174  63C6              arpl si,ax\r
+00002176  052B28            add ax,0x282b\r
+00002179  0100              add [bx+si],ax\r
+0000217B  6F                outsw\r
+0000217C  C6052C            mov byte [di],0x2c\r
+0000217F  2801              sub [bx+di],al\r
+00002181  0064C6            add [si-0x3a],ah\r
+00002184  052D28            add ax,0x282d\r
+00002187  0100              add [bx+si],ax\r
+00002189  65C6052E          mov byte [gs:di],0x2e\r
+0000218D  2801              sub [bx+di],al\r
+0000218F  0000              add [bx+si],al\r
+00002191  E8EB09            call 0x2b7f\r
+00002194  0000              add [bx+si],al\r
+00002196  C6051F            mov byte [di],0x1f\r
+00002199  2801              sub [bx+di],al\r
+0000219B  0000              add [bx+si],al\r
+0000219D  C60520            mov byte [di],0x20\r
+000021A0  2801              sub [bx+di],al\r
+000021A2  004EC6            add [bp-0x3a],cl\r
+000021A5  052128            add ax,0x2821\r
+000021A8  0100              add [bx+si],ax\r
+000021AA  6F                outsw\r
+000021AB  C60522            mov byte [di],0x22\r
+000021AE  2801              sub [bx+di],al\r
+000021B0  0020              add [bx+si],ah\r
+000021B2  C60523            mov byte [di],0x23\r
+000021B5  2801              sub [bx+di],al\r
+000021B7  0063C6            add [bp+di-0x3a],ah\r
+000021BA  052428            add ax,0x2824\r
+000021BD  0100              add [bx+si],ax\r
+000021BF  6F                outsw\r
+000021C0  C60525            mov byte [di],0x25\r
+000021C3  2801              sub [bx+di],al\r
+000021C5  0070C6            add [bx+si-0x3a],dh\r
+000021C8  052628            add ax,0x2826\r
+000021CB  0100              add [bx+si],ax\r
+000021CD  2EC60527          mov byte [cs:di],0x27\r
+000021D1  2801              sub [bx+di],al\r
+000021D3  0020              add [bx+si],ah\r
+000021D5  C60528            mov byte [di],0x28\r
+000021D8  2801              sub [bx+di],al\r
+000021DA  0061C6            add [bx+di-0x3a],ah\r
+000021DD  052928            add ax,0x2829\r
+000021E0  0100              add [bx+si],ax\r
+000021E2  76C6              jna 0x21aa\r
+000021E4  052A28            add ax,0x282a\r
+000021E7  0100              add [bx+si],ax\r
+000021E9  61                popa\r
+000021EA  C6052B            mov byte [di],0x2b\r
+000021ED  2801              sub [bx+di],al\r
+000021EF  0069C6            add [bx+di-0x3a],ch\r
+000021F2  052C28            add ax,0x282c\r
+000021F5  0100              add [bx+si],ax\r
+000021F7  6C                insb\r
+000021F8  C6052D            mov byte [di],0x2d\r
+000021FB  2801              sub [bx+di],al\r
+000021FD  002EC605          add [0x5c6],ch\r
+00002201  2E2801            sub [cs:bx+di],al\r
+00002204  0000              add [bx+si],al\r
+00002206  E87609            call 0x2b7f\r
+00002209  0000              add [bx+si],al\r
+0000220B  C6051F            mov byte [di],0x1f\r
+0000220E  2801              sub [bx+di],al\r
+00002210  0000              add [bx+si],al\r
+00002212  C60520            mov byte [di],0x20\r
+00002215  2801              sub [bx+di],al\r
+00002217  0044C6            add [si-0x3a],al\r
+0000221A  052128            add ax,0x2821\r
+0000221D  0100              add [bx+si],ax\r
+0000221F  6F                outsw\r
+00002220  C60522            mov byte [di],0x22\r
+00002223  2801              sub [bx+di],al\r
+00002225  0075C6            add [di-0x3a],dh\r
+00002228  052328            add ax,0x2823\r
+0000222B  0100              add [bx+si],ax\r
+0000222D  62                db 0x62\r
+0000222E  C60524            mov byte [di],0x24\r
+00002231  2801              sub [bx+di],al\r
+00002233  006CC6            add [si-0x3a],ch\r
+00002236  052528            add ax,0x2825\r
+00002239  0100              add [bx+si],ax\r
+0000223B  65C60526          mov byte [gs:di],0x26\r
+0000223F  2801              sub [bx+di],al\r
+00002241  0020              add [bx+si],ah\r
+00002243  C60527            mov byte [di],0x27\r
+00002246  2801              sub [bx+di],al\r
+00002248  0066C6            add [bp-0x3a],ah\r
+0000224B  052828            add ax,0x2828\r
+0000224E  0100              add [bx+si],ax\r
+00002250  61                popa\r
+00002251  C60529            mov byte [di],0x29\r
+00002254  2801              sub [bx+di],al\r
+00002256  0075C6            add [di-0x3a],dh\r
+00002259  052A28            add ax,0x282a\r
+0000225C  0100              add [bx+si],ax\r
+0000225E  6C                insb\r
+0000225F  C6052B            mov byte [di],0x2b\r
+00002262  2801              sub [bx+di],al\r
+00002264  0074C6            add [si-0x3a],dh\r
+00002267  052C28            add ax,0x282c\r
+0000226A  0100              add [bx+si],ax\r
+0000226C  20C6              and dh,al\r
+0000226E  052D28            add ax,0x282d\r
+00002271  0100              add [bx+si],ax\r
+00002273  20C6              and dh,al\r
+00002275  052E28            add ax,0x282e\r
+00002278  0100              add [bx+si],ax\r
+0000227A  00E8              add al,ch\r
+0000227C  0109              add [bx+di],cx\r
+0000227E  0000              add [bx+si],al\r
+00002280  C6051F            mov byte [di],0x1f\r
+00002283  2801              sub [bx+di],al\r
+00002285  0000              add [bx+si],al\r
+00002287  C60520            mov byte [di],0x20\r
+0000228A  2801              sub [bx+di],al\r
+0000228C  0043C6            add [bp+di-0x3a],al\r
+0000228F  052128            add ax,0x2821\r
+00002292  0100              add [bx+si],ax\r
+00002294  6F                outsw\r
+00002295  C60522            mov byte [di],0x22\r
+00002298  2801              sub [bx+di],al\r
+0000229A  0070C6            add [bx+si-0x3a],dh\r
+0000229D  052328            add ax,0x2823\r
+000022A0  0100              add [bx+si],ax\r
+000022A2  72C6              jc 0x226a\r
+000022A4  052428            add ax,0x2824\r
+000022A7  0100              add [bx+si],ax\r
+000022A9  6F                outsw\r
+000022AA  C60525            mov byte [di],0x25\r
+000022AD  2801              sub [bx+di],al\r
+000022AF  002EC605          add [0x5c6],ch\r
+000022B3  262801            sub [es:bx+di],al\r
+000022B6  0020              add [bx+si],ah\r
+000022B8  C60527            mov byte [di],0x27\r
+000022BB  2801              sub [bx+di],al\r
+000022BD  0073C6            add [bp+di-0x3a],dh\r
+000022C0  052828            add ax,0x2828\r
+000022C3  0100              add [bx+si],ax\r
+000022C5  65C60529          mov byte [gs:di],0x29\r
+000022C9  2801              sub [bx+di],al\r
+000022CB  0067C6            add [bx-0x3a],ah\r
+000022CE  052A28            add ax,0x282a\r
+000022D1  0100              add [bx+si],ax\r
+000022D3  6D                insw\r
+000022D4  C6052B            mov byte [di],0x2b\r
+000022D7  2801              sub [bx+di],al\r
+000022D9  0065C6            add [di-0x3a],ah\r
+000022DC  052C28            add ax,0x282c\r
+000022DF  0100              add [bx+si],ax\r
+000022E1  6E                outsb\r
+000022E2  C6052D            mov byte [di],0x2d\r
+000022E5  2801              sub [bx+di],al\r
+000022E7  0074C6            add [si-0x3a],dh\r
+000022EA  052E28            add ax,0x282e\r
+000022ED  0100              add [bx+si],ax\r
+000022EF  00E8              add al,ch\r
+000022F1  8C08              mov [bx+si],cs\r
+000022F3  0000              add [bx+si],al\r
+000022F5  C6051F            mov byte [di],0x1f\r
+000022F8  2801              sub [bx+di],al\r
+000022FA  0000              add [bx+si],al\r
+000022FC  C60520            mov byte [di],0x20\r
+000022FF  2801              sub [bx+di],al\r
+00002301  0049C6            add [bx+di-0x3a],cl\r
+00002304  052128            add ax,0x2821\r
+00002307  0100              add [bx+si],ax\r
+00002309  6E                outsb\r
+0000230A  C60522            mov byte [di],0x22\r
+0000230D  2801              sub [bx+di],al\r
+0000230F  0076C6            add [bp-0x3a],dh\r
+00002312  052328            add ax,0x2823\r
+00002315  0100              add [bx+si],ax\r
+00002317  61                popa\r
+00002318  C60524            mov byte [di],0x24\r
+0000231B  2801              sub [bx+di],al\r
+0000231D  006CC6            add [si-0x3a],ch\r
+00002320  052528            add ax,0x2825\r
+00002323  0100              add [bx+si],ax\r
+00002325  69C60526          imul ax,si,word 0x2605\r
+00002329  2801              sub [bx+di],al\r
+0000232B  0064C6            add [si-0x3a],ah\r
+0000232E  052728            add ax,0x2827\r
+00002331  0100              add [bx+si],ax\r
+00002333  20C6              and dh,al\r
+00002335  052828            add ax,0x2828\r
+00002338  0100              add [bx+si],ax\r
+0000233A  54                push sp\r
+0000233B  C60529            mov byte [di],0x29\r
+0000233E  2801              sub [bx+di],al\r
+00002340  0053C6            add [bp+di-0x3a],dl\r
+00002343  052A28            add ax,0x282a\r
+00002346  0100              add [bx+si],ax\r
+00002348  53                push bx\r
+00002349  C6052B            mov byte [di],0x2b\r
+0000234C  2801              sub [bx+di],al\r
+0000234E  0021              add [bx+di],ah\r
+00002350  C6052C            mov byte [di],0x2c\r
+00002353  2801              sub [bx+di],al\r
+00002355  0020              add [bx+si],ah\r
+00002357  C6052D            mov byte [di],0x2d\r
+0000235A  2801              sub [bx+di],al\r
+0000235C  0020              add [bx+si],ah\r
+0000235E  C6052E            mov byte [di],0x2e\r
+00002361  2801              sub [bx+di],al\r
+00002363  0000              add [bx+si],al\r
+00002365  E81708            call 0x2b7f\r
+00002368  0000              add [bx+si],al\r
+0000236A  C6051F            mov byte [di],0x1f\r
+0000236D  2801              sub [bx+di],al\r
+0000236F  0000              add [bx+si],al\r
+00002371  C60520            mov byte [di],0x20\r
+00002374  2801              sub [bx+di],al\r
+00002376  004EC6            add [bp-0x3a],cl\r
+00002379  052128            add ax,0x2821\r
+0000237C  0100              add [bx+si],ax\r
+0000237E  6F                outsw\r
+0000237F  C60522            mov byte [di],0x22\r
+00002382  2801              sub [bx+di],al\r
+00002384  0020              add [bx+si],ah\r
+00002386  C60523            mov byte [di],0x23\r
+00002389  2801              sub [bx+di],al\r
+0000238B  0073C6            add [bp+di-0x3a],dh\r
+0000238E  052428            add ax,0x2824\r
+00002391  0100              add [bx+si],ax\r
+00002393  65C60525          mov byte [gs:di],0x25\r
+00002397  2801              sub [bx+di],al\r
+00002399  0067C6            add [bx-0x3a],ah\r
+0000239C  052628            add ax,0x2826\r
+0000239F  0100              add [bx+si],ax\r
+000023A1  6D                insw\r
+000023A2  C60527            mov byte [di],0x27\r
+000023A5  2801              sub [bx+di],al\r
+000023A7  0065C6            add [di-0x3a],ah\r
+000023AA  052828            add ax,0x2828\r
+000023AD  0100              add [bx+si],ax\r
+000023AF  6E                outsb\r
+000023B0  C60529            mov byte [di],0x29\r
+000023B3  2801              sub [bx+di],al\r
+000023B5  0074C6            add [si-0x3a],dh\r
+000023B8  052A28            add ax,0x282a\r
+000023BB  0100              add [bx+si],ax\r
+000023BD  21C6              and si,ax\r
+000023BF  052B28            add ax,0x282b\r
+000023C2  0100              add [bx+si],ax\r
+000023C4  20C6              and dh,al\r
+000023C6  052C28            add ax,0x282c\r
+000023C9  0100              add [bx+si],ax\r
+000023CB  20C6              and dh,al\r
+000023CD  052D28            add ax,0x282d\r
+000023D0  0100              add [bx+si],ax\r
+000023D2  20C6              and dh,al\r
+000023D4  052E28            add ax,0x282e\r
+000023D7  0100              add [bx+si],ax\r
+000023D9  00E8              add al,ch\r
+000023DB  A20700            mov [0x7],al\r
+000023DE  00C6              add dh,al\r
+000023E0  051F28            add ax,0x281f\r
+000023E3  0100              add [bx+si],ax\r
+000023E5  00C6              add dh,al\r
+000023E7  052028            add ax,0x2820\r
+000023EA  0100              add [bx+si],ax\r
+000023EC  53                push bx\r
+000023ED  C60521            mov byte [di],0x21\r
+000023F0  2801              sub [bx+di],al\r
+000023F2  0074C6            add [si-0x3a],dh\r
+000023F5  052228            add ax,0x2822\r
+000023F8  0100              add [bx+si],ax\r
+000023FA  61                popa\r
+000023FB  C60523            mov byte [di],0x23\r
+000023FE  2801              sub [bx+di],al\r
+00002400  0063C6            add [bp+di-0x3a],ah\r
+00002403  052428            add ax,0x2824\r
+00002406  0100              add [bx+si],ax\r
+00002408  6BC605            imul ax,si,byte +0x5\r
+0000240B  252801            and ax,0x128\r
+0000240E  0020              add [bx+si],ah\r
+00002410  C60526            mov byte [di],0x26\r
+00002413  2801              sub [bx+di],al\r
+00002415  0066C6            add [bp-0x3a],ah\r
+00002418  052728            add ax,0x2827\r
+0000241B  0100              add [bx+si],ax\r
+0000241D  61                popa\r
+0000241E  C60528            mov byte [di],0x28\r
+00002421  2801              sub [bx+di],al\r
+00002423  0075C6            add [di-0x3a],dh\r
+00002426  052928            add ax,0x2829\r
+00002429  0100              add [bx+si],ax\r
+0000242B  6C                insb\r
+0000242C  C6052A            mov byte [di],0x2a\r
+0000242F  2801              sub [bx+di],al\r
+00002431  0074C6            add [si-0x3a],dh\r
+00002434  052B28            add ax,0x282b\r
+00002437  0100              add [bx+si],ax\r
+00002439  21C6              and si,ax\r
+0000243B  052C28            add ax,0x282c\r
+0000243E  0100              add [bx+si],ax\r
+00002440  20C6              and dh,al\r
+00002442  052D28            add ax,0x282d\r
+00002445  0100              add [bx+si],ax\r
+00002447  20C6              and dh,al\r
+00002449  052E28            add ax,0x282e\r
+0000244C  0100              add [bx+si],ax\r
+0000244E  00E8              add al,ch\r
+00002450  2D0700            sub ax,0x7\r
+00002453  00C6              add dh,al\r
+00002455  051F28            add ax,0x281f\r
+00002458  0100              add [bx+si],ax\r
+0000245A  00C6              add dh,al\r
+0000245C  052028            add ax,0x2820\r
+0000245F  0100              add [bx+si],ax\r
+00002461  54                push sp\r
+00002462  C60521            mov byte [di],0x21\r
+00002465  2801              sub [bx+di],al\r
+00002467  0072C6            add [bp+si-0x3a],dh\r
+0000246A  052228            add ax,0x2822\r
+0000246D  0100              add [bx+si],ax\r
+0000246F  69C60523          imul ax,si,word 0x2305\r
+00002473  2801              sub [bx+di],al\r
+00002475  0070C6            add [bx+si-0x3a],dh\r
+00002478  052428            add ax,0x2824\r
+0000247B  0100              add [bx+si],ax\r
+0000247D  6C                insb\r
+0000247E  C60525            mov byte [di],0x25\r
+00002481  2801              sub [bx+di],al\r
+00002483  0065C6            add [di-0x3a],ah\r
+00002486  052628            add ax,0x2826\r
+00002489  0100              add [bx+si],ax\r
+0000248B  20C6              and dh,al\r
+0000248D  052728            add ax,0x2827\r
+00002490  0100              add [bx+si],ax\r
+00002492  66C60528          o32 mov byte [di],0x28\r
+00002496  2801              sub [bx+di],al\r
+00002498  0061C6            add [bx+di-0x3a],ah\r
+0000249B  052928            add ax,0x2829\r
+0000249E  0100              add [bx+si],ax\r
+000024A0  75C6              jnz 0x2468\r
+000024A2  052A28            add ax,0x282a\r
+000024A5  0100              add [bx+si],ax\r
+000024A7  6C                insb\r
+000024A8  C6052B            mov byte [di],0x2b\r
+000024AB  2801              sub [bx+di],al\r
+000024AD  0074C6            add [si-0x3a],dh\r
+000024B0  052C28            add ax,0x282c\r
+000024B3  0100              add [bx+si],ax\r
+000024B5  21C6              and si,ax\r
+000024B7  052D28            add ax,0x282d\r
+000024BA  0100              add [bx+si],ax\r
+000024BC  20C6              and dh,al\r
+000024BE  052E28            add ax,0x282e\r
+000024C1  0100              add [bx+si],ax\r
+000024C3  00E8              add al,ch\r
+000024C5  B80600            mov ax,0x6\r
+000024C8  00C6              add dh,al\r
+000024CA  051F28            add ax,0x281f\r
+000024CD  0100              add [bx+si],ax\r
+000024CF  00C6              add dh,al\r
+000024D1  052028            add ax,0x2820\r
+000024D4  0100              add [bx+si],ax\r
+000024D6  50                push ax\r
+000024D7  C60521            mov byte [di],0x21\r
+000024DA  2801              sub [bx+di],al\r
+000024DC  0061C6            add [bx+di-0x3a],ah\r
+000024DF  052228            add ax,0x2822\r
+000024E2  0100              add [bx+si],ax\r
+000024E4  67C6052328010065  mov byte [dword 0x12823],0x65\r
+000024EC  C60524            mov byte [di],0x24\r
+000024EF  2801              sub [bx+di],al\r
+000024F1  0020              add [bx+si],ah\r
+000024F3  C60525            mov byte [di],0x25\r
+000024F6  2801              sub [bx+di],al\r
+000024F8  0066C6            add [bp-0x3a],ah\r
+000024FB  052628            add ax,0x2826\r
+000024FE  0100              add [bx+si],ax\r
+00002500  61                popa\r
+00002501  C60527            mov byte [di],0x27\r
+00002504  2801              sub [bx+di],al\r
+00002506  0075C6            add [di-0x3a],dh\r
+00002509  052828            add ax,0x2828\r
+0000250C  0100              add [bx+si],ax\r
+0000250E  6C                insb\r
+0000250F  C60529            mov byte [di],0x29\r
+00002512  2801              sub [bx+di],al\r
+00002514  0074C6            add [si-0x3a],dh\r
+00002517  052A28            add ax,0x282a\r
+0000251A  0100              add [bx+si],ax\r
+0000251C  21C6              and si,ax\r
+0000251E  052B28            add ax,0x282b\r
+00002521  0100              add [bx+si],ax\r
+00002523  20C6              and dh,al\r
+00002525  052C28            add ax,0x282c\r
+00002528  0100              add [bx+si],ax\r
+0000252A  20C6              and dh,al\r
+0000252C  052D28            add ax,0x282d\r
+0000252F  0100              add [bx+si],ax\r
+00002531  20C6              and dh,al\r
+00002533  052E28            add ax,0x282e\r
+00002536  0100              add [bx+si],ax\r
+00002538  00E8              add al,ch\r
+0000253A  43                inc bx\r
+0000253B  06                push es\r
+0000253C  0000              add [bx+si],al\r
+0000253E  C6051F            mov byte [di],0x1f\r
+00002541  2801              sub [bx+di],al\r
+00002543  0000              add [bx+si],al\r
+00002545  C60520            mov byte [di],0x20\r
+00002548  2801              sub [bx+di],al\r
+0000254A  0043C6            add [bp+di-0x3a],al\r
+0000254D  052128            add ax,0x2821\r
+00002550  0100              add [bx+si],ax\r
+00002552  6F                outsw\r
+00002553  C60522            mov byte [di],0x22\r
+00002556  2801              sub [bx+di],al\r
+00002558  0070C6            add [bx+si-0x3a],dh\r
+0000255B  052328            add ax,0x2823\r
+0000255E  0100              add [bx+si],ax\r
+00002560  72C6              jc 0x2528\r
+00002562  052428            add ax,0x2824\r
+00002565  0100              add [bx+si],ax\r
+00002567  6F                outsw\r
+00002568  C60525            mov byte [di],0x25\r
+0000256B  2801              sub [bx+di],al\r
+0000256D  0063C6            add [bp+di-0x3a],ah\r
+00002570  052628            add ax,0x2826\r
+00002573  0100              add [bx+si],ax\r
+00002575  65C60527          mov byte [gs:di],0x27\r
+00002579  2801              sub [bx+di],al\r
+0000257B  0073C6            add [bp+di-0x3a],dh\r
+0000257E  052828            add ax,0x2828\r
+00002581  0100              add [bx+si],ax\r
+00002583  73C6              jnc 0x254b\r
+00002585  052928            add ax,0x2829\r
+00002588  0100              add [bx+si],ax\r
+0000258A  6F                outsw\r
+0000258B  C6052A            mov byte [di],0x2a\r
+0000258E  2801              sub [bx+di],al\r
+00002590  0072C6            add [bp+si-0x3a],dh\r
+00002593  052B28            add ax,0x282b\r
+00002596  0100              add [bx+si],ax\r
+00002598  21C6              and si,ax\r
+0000259A  052C28            add ax,0x282c\r
+0000259D  0100              add [bx+si],ax\r
+0000259F  20C6              and dh,al\r
+000025A1  052D28            add ax,0x282d\r
+000025A4  0100              add [bx+si],ax\r
+000025A6  20C6              and dh,al\r
+000025A8  052E28            add ax,0x282e\r
+000025AB  0100              add [bx+si],ax\r
+000025AD  00E8              add al,ch\r
+000025AF  CE                into\r
+000025B0  050000            add ax,0x0\r
+000025B3  C6051F            mov byte [di],0x1f\r
+000025B6  2801              sub [bx+di],al\r
+000025B8  0000              add [bx+si],al\r
+000025BA  C60520            mov byte [di],0x20\r
+000025BD  2801              sub [bx+di],al\r
+000025BF  0041C6            add [bx+di-0x3a],al\r
+000025C2  052128            add ax,0x2821\r
+000025C5  0100              add [bx+si],ax\r
+000025C7  6C                insb\r
+000025C8  C60522            mov byte [di],0x22\r
+000025CB  2801              sub [bx+di],al\r
+000025CD  0069C6            add [bx+di-0x3a],ch\r
+000025D0  052328            add ax,0x2823\r
+000025D3  0100              add [bx+si],ax\r
+000025D5  67C605242801006E  mov byte [dword 0x12824],0x6e\r
+000025DD  C60525            mov byte [di],0x25\r
+000025E0  2801              sub [bx+di],al\r
+000025E2  006DC6            add [di-0x3a],ch\r
+000025E5  052628            add ax,0x2826\r
+000025E8  0100              add [bx+si],ax\r
+000025EA  65C60527          mov byte [gs:di],0x27\r
+000025EE  2801              sub [bx+di],al\r
+000025F0  006EC6            add [bp-0x3a],ch\r
+000025F3  052828            add ax,0x2828\r
+000025F6  0100              add [bx+si],ax\r
+000025F8  74C6              jz 0x25c0\r
+000025FA  052928            add ax,0x2829\r
+000025FD  0100              add [bx+si],ax\r
+000025FF  20C6              and dh,al\r
+00002601  052A28            add ax,0x282a\r
+00002604  0100              add [bx+si],ax\r
+00002606  63C6              arpl si,ax\r
+00002608  052B28            add ax,0x282b\r
+0000260B  0100              add [bx+si],ax\r
+0000260D  68C605            push word 0x5c6\r
+00002610  2C28              sub al,0x28\r
+00002612  0100              add [bx+si],ax\r
+00002614  6BC605            imul ax,si,byte +0x5\r
+00002617  2D2801            sub ax,0x128\r
+0000261A  002EC605          add [0x5c6],ch\r
+0000261E  2E2801            sub [cs:bx+di],al\r
+00002621  0000              add [bx+si],al\r
+00002623  E85905            call 0x2b7f\r
+00002626  0000              add [bx+si],al\r
+00002628  C6051F            mov byte [di],0x1f\r
+0000262B  2801              sub [bx+di],al\r
+0000262D  0000              add [bx+si],al\r
+0000262F  C60520            mov byte [di],0x20\r
+00002632  2801              sub [bx+di],al\r
+00002634  004DC6            add [di-0x3a],cl\r
+00002637  052128            add ax,0x2821\r
+0000263A  0100              add [bx+si],ax\r
+0000263C  61                popa\r
+0000263D  C60522            mov byte [di],0x22\r
+00002640  2801              sub [bx+di],al\r
+00002642  0063C6            add [bp+di-0x3a],ah\r
+00002645  052328            add ax,0x2823\r
+00002648  0100              add [bx+si],ax\r
+0000264A  68C605            push word 0x5c6\r
+0000264D  2428              and al,0x28\r
+0000264F  0100              add [bx+si],ax\r
+00002651  69C60525          imul ax,si,word 0x2505\r
+00002655  2801              sub [bx+di],al\r
+00002657  006EC6            add [bp-0x3a],ch\r
+0000265A  052628            add ax,0x2826\r
+0000265D  0100              add [bx+si],ax\r
+0000265F  65C60527          mov byte [gs:di],0x27\r
+00002663  2801              sub [bx+di],al\r
+00002665  0020              add [bx+si],ah\r
+00002667  C60528            mov byte [di],0x28\r
+0000266A  2801              sub [bx+di],al\r
+0000266C  0063C6            add [bp+di-0x3a],ah\r
+0000266F  052928            add ax,0x2829\r
+00002672  0100              add [bx+si],ax\r
+00002674  68C605            push word 0x5c6\r
+00002677  2A28              sub ch,[bx+si]\r
+00002679  0100              add [bx+si],ax\r
+0000267B  65C6052B          mov byte [gs:di],0x2b\r
+0000267F  2801              sub [bx+di],al\r
+00002681  0063C6            add [bp+di-0x3a],ah\r
+00002684  052C28            add ax,0x282c\r
+00002687  0100              add [bx+si],ax\r
+00002689  6BC605            imul ax,si,byte +0x5\r
+0000268C  2D2801            sub ax,0x128\r
+0000268F  0021              add [bx+di],ah\r
+00002691  C6052E            mov byte [di],0x2e\r
+00002694  2801              sub [bx+di],al\r
+00002696  0000              add [bx+si],al\r
+00002698  E8E404            call 0x2b7f\r
+0000269B  0000              add [bx+si],al\r
+0000269D  C6051F            mov byte [di],0x1f\r
+000026A0  2801              sub [bx+di],al\r
+000026A2  0000              add [bx+si],al\r
+000026A4  C60520            mov byte [di],0x20\r
+000026A7  2801              sub [bx+di],al\r
+000026A9  0053C6            add [bp+di-0x3a],dl\r
+000026AC  052128            add ax,0x2821\r
+000026AF  0100              add [bx+si],ax\r
+000026B1  49                dec cx\r
+000026B2  C60522            mov byte [di],0x22\r
+000026B5  2801              sub [bx+di],al\r
+000026B7  004DC6            add [di-0x3a],cl\r
+000026BA  052328            add ax,0x2823\r
+000026BD  0100              add [bx+si],ax\r
+000026BF  44                inc sp\r
+000026C0  C60524            mov byte [di],0x24\r
+000026C3  2801              sub [bx+di],al\r
+000026C5  0020              add [bx+si],ah\r
+000026C7  C60525            mov byte [di],0x25\r
+000026CA  2801              sub [bx+di],al\r
+000026CC  0066C6            add [bp-0x3a],ah\r
+000026CF  052628            add ax,0x2826\r
+000026D2  0100              add [bx+si],ax\r
+000026D4  6C                insb\r
+000026D5  C60527            mov byte [di],0x27\r
+000026D8  2801              sub [bx+di],al\r
+000026DA  006FC6            add [bx-0x3a],ch\r
+000026DD  052828            add ax,0x2828\r
+000026E0  0100              add [bx+si],ax\r
+000026E2  61                popa\r
+000026E3  C60529            mov byte [di],0x29\r
+000026E6  2801              sub [bx+di],al\r
+000026E8  0074C6            add [si-0x3a],dh\r
+000026EB  052A28            add ax,0x282a\r
+000026EE  0100              add [bx+si],ax\r
+000026F0  2EC6052B          mov byte [cs:di],0x2b\r
+000026F4  2801              sub [bx+di],al\r
+000026F6  002D              add [di],ch\r
+000026F8  C6052C            mov byte [di],0x2c\r
+000026FB  2801              sub [bx+di],al\r
+000026FD  0070C6            add [bx+si-0x3a],dh\r
+00002700  052D28            add ax,0x282d\r
+00002703  0100              add [bx+si],ax\r
+00002705  2EC6052E          mov byte [cs:di],0x2e\r
+00002709  2801              sub [bx+di],al\r
+0000270B  0000              add [bx+si],al\r
+0000270D  E86F04            call 0x2b7f\r
+00002710  0000              add [bx+si],al\r
+00002712  60                pusha\r
+00002713  0FA8              push gs\r
+00002715  0FA0              push fs\r
+00002717  1E                push ds\r
+00002718  06                push es\r
+00002719  E8240A            call 0x3140\r
+0000271C  0000              add [bx+si],al\r
+0000271E  07                pop es\r
+0000271F  1F                pop ds\r
+00002720  0FA1              pop fs\r
+00002722  0FA9              pop gs\r
+00002724  61                popa\r
+00002725  CF                iret\r
+00002726  60                pusha\r
+00002727  0FA8              push gs\r
+00002729  0FA0              push fs\r
+0000272B  1E                push ds\r
+0000272C  06                push es\r
+0000272D  56                push si\r
+0000272E  E87FE6            call 0xdb0\r
+00002731  FF                db 0xFF\r
+00002732  FF5E07            call far [bp+0x7]\r
+00002735  1F                pop ds\r
+00002736  0FA1              pop fs\r
+00002738  0FA9              pop gs\r
+0000273A  61                popa\r
+0000273B  CF                iret\r
+0000273C  0FA8              push gs\r
+0000273E  0FA0              push fs\r
+00002740  1E                push ds\r
+00002741  06                push es\r
+00002742  E87DE5            call 0xcc2\r
+00002745  FF                db 0xFF\r
+00002746  FF07              inc word [bx]\r
+00002748  1F                pop ds\r
+00002749  0FA1              pop fs\r
+0000274B  0FA9              pop gs\r
+0000274D  CF                iret\r
+0000274E  C9                leave\r
+0000274F  CDCD              int 0xcd\r
+00002751  CDCD              int 0xcd\r
+00002753  CDCD              int 0xcd\r
+00002755  CDCD              int 0xcd\r
+00002757  CDCD              int 0xcd\r
+00002759  CDCD              int 0xcd\r
+0000275B  CDCD              int 0xcd\r
+0000275D  CDCD              int 0xcd\r
+0000275F  CDCD              int 0xcd\r
+00002761  CDCD              int 0xcd\r
+00002763  CDCD              int 0xcd\r
+00002765  CDCD              int 0xcd\r
+00002767  CDCD              int 0xcd\r
+00002769  CDCD              int 0xcd\r
+0000276B  CDCD              int 0xcd\r
+0000276D  CDCD              int 0xcd\r
+0000276F  CDCD              int 0xcd\r
+00002771  BB00BA            mov bx,0xba00\r
+00002774  20424F            and [bp+si+0x4f],al\r
+00002777  53                push bx\r
+00002778  2030              and [bx+si],dh\r
+0000277A  2E3034            xor [cs:si],dh\r
+0000277D  202D              and [di],ch\r
+0000277F  204552            and [di+0x52],al\r
+00002782  52                push dx\r
+00002783  4F                dec di\r
+00002784  52                push dx\r
+00002785  3A20              cmp ah,[bx+si]\r
+00002787  00BA2020          add [bp+si+0x2020],bh\r
+0000278B  2020              and [bx+si],ah\r
+0000278D  2020              and [bx+si],ah\r
+0000278F  2020              and [bx+si],ah\r
+00002791  2020              and [bx+si],ah\r
+00002793  2020              and [bx+si],ah\r
+00002795  2020              and [bx+si],ah\r
+00002797  2020              and [bx+si],ah\r
+00002799  2020              and [bx+si],ah\r
+0000279B  2020              and [bx+si],ah\r
+0000279D  2020              and [bx+si],ah\r
+0000279F  2020              and [bx+si],ah\r
+000027A1  2020              and [bx+si],ah\r
+000027A3  2020              and [bx+si],ah\r
+000027A5  2020              and [bx+si],ah\r
+000027A7  2020              and [bx+si],ah\r
+000027A9  2020              and [bx+si],ah\r
+000027AB  BA00BA            mov dx,0xba00\r
+000027AE  2020              and [bx+si],ah\r
+000027B0  50                push ax\r
+000027B1  7265              jc 0x2818\r
+000027B3  7373              jnc 0x2828\r
+000027B5  20616E            and [bx+di+0x6e],ah\r
+000027B8  7920              jns 0x27da\r
+000027BA  6B657920          imul sp,[di+0x79],byte +0x20\r
+000027BE  746F              jz 0x282f\r
+000027C0  20636F            and [bp+di+0x6f],ah\r
+000027C3  6E                outsb\r
+000027C4  7469              jz 0x282f\r
+000027C6  6E                outsb\r
+000027C7  7565              jnz 0x282e\r
+000027C9  2E2E2E2020        and [cs:bx+si],ah\r
+000027CE  2020              and [bx+si],ah\r
+000027D0  BA00BA            mov dx,0xba00\r
+000027D3  205072            and [bx+si+0x72],dl\r
+000027D6  657373            gs jnc 0x284c\r
+000027D9  206120            and [bx+di+0x20],ah\r
+000027DC  6B657920          imul sp,[di+0x79],byte +0x20\r
+000027E0  746F              jz 0x2851\r
+000027E2  207265            and [bp+si+0x65],dh\r
+000027E5  7374              jnc 0x285b\r
+000027E7  61                popa\r
+000027E8  7274              jc 0x285e\r
+000027EA  207468            and [si+0x68],dh\r
+000027ED  65205043          and [gs:bx+si+0x43],dl\r
+000027F1  2E2E2E20BA00C8    and [cs:bp+si+0xc800],bh\r
+000027F8  CDCD              int 0xcd\r
+000027FA  CDCD              int 0xcd\r
+000027FC  CDCD              int 0xcd\r
+000027FE  CDCD              int 0xcd\r
+00002800  CDCD              int 0xcd\r
+00002802  CDCD              int 0xcd\r
+00002804  CDCD              int 0xcd\r
+00002806  CDCD              int 0xcd\r
+00002808  CDCD              int 0xcd\r
+0000280A  CDCD              int 0xcd\r
+0000280C  CDCD              int 0xcd\r
+0000280E  CDCD              int 0xcd\r
+00002810  CDCD              int 0xcd\r
+00002812  CDCD              int 0xcd\r
+00002814  CDCD              int 0xcd\r
+00002816  CDCD              int 0xcd\r
+00002818  CDCD              int 0xcd\r
+0000281A  BC0020            mov sp,0x2000\r
+0000281D  BA0001            mov dx,0x100\r
+00002820  206E6F            and [bp+0x6f],ch\r
+00002823  6E                outsb\r
+00002824  652E2020          and [cs:bx+si],ah\r
+00002828  2020              and [bx+si],ah\r
+0000282A  2020              and [bx+si],ah\r
+0000282C  2020              and [bx+si],ah\r
+0000282E  00BA2045          add [bp+si+0x4520],bh\r
+00002832  41                inc cx\r
+00002833  58                pop ax\r
+00002834  3A20              cmp ah,[bx+si]\r
+00002836  307800            xor [bx+si+0x0],bh\r
+00002839  2020              and [bx+si],ah\r
+0000283B  45                inc bp\r
+0000283C  42                inc dx\r
+0000283D  58                pop ax\r
+0000283E  3A20              cmp ah,[bx+si]\r
+00002840  307800            xor [bx+si+0x0],bh\r
+00002843  BA2045            mov dx,0x4520\r
+00002846  43                inc bx\r
+00002847  58                pop ax\r
+00002848  3A20              cmp ah,[bx+si]\r
+0000284A  307800            xor [bx+si+0x0],bh\r
+0000284D  2020              and [bx+si],ah\r
+0000284F  45                inc bp\r
+00002850  44                inc sp\r
+00002851  58                pop ax\r
+00002852  3A20              cmp ah,[bx+si]\r
+00002854  307800            xor [bx+si+0x0],bh\r
+00002857  BA2045            mov dx,0x4520\r
+0000285A  53                push bx\r
+0000285B  50                push ax\r
+0000285C  3A20              cmp ah,[bx+si]\r
+0000285E  307800            xor [bx+si+0x0],bh\r
+00002861  2020              and [bx+si],ah\r
+00002863  45                inc bp\r
+00002864  42                inc dx\r
+00002865  50                push ax\r
+00002866  3A20              cmp ah,[bx+si]\r
+00002868  307800            xor [bx+si+0x0],bh\r
+0000286B  BA2045            mov dx,0x4520\r
+0000286E  53                push bx\r
+0000286F  49                dec cx\r
+00002870  3A20              cmp ah,[bx+si]\r
+00002872  307800            xor [bx+si+0x0],bh\r
+00002875  2020              and [bx+si],ah\r
+00002877  45                inc bp\r
+00002878  44                inc sp\r
+00002879  49                dec cx\r
+0000287A  3A20              cmp ah,[bx+si]\r
+0000287C  307800            xor [bx+si+0x0],bh\r
+0000287F  0000              add [bx+si],al\r
+00002881  0000              add [bx+si],al\r
+00002883  0000              add [bx+si],al\r
+00002885  0000              add [bx+si],al\r
+00002887  0000              add [bx+si],al\r
+00002889  0000              add [bx+si],al\r
+0000288B  0000              add [bx+si],al\r
+0000288D  0000              add [bx+si],al\r
+0000288F  0000              add [bx+si],al\r
+00002891  0000              add [bx+si],al\r
+00002893  0000              add [bx+si],al\r
+00002895  0000              add [bx+si],al\r
+00002897  0000              add [bx+si],al\r
+00002899  0000              add [bx+si],al\r
+0000289B  0000              add [bx+si],al\r
+0000289D  0000              add [bx+si],al\r
+0000289F  0000              add [bx+si],al\r
+000028A1  0000              add [bx+si],al\r
+000028A3  0000              add [bx+si],al\r
+000028A5  0000              add [bx+si],al\r
+000028A7  0000              add [bx+si],al\r
+000028A9  0000              add [bx+si],al\r
+000028AB  0000              add [bx+si],al\r
+000028AD  0000              add [bx+si],al\r
+000028AF  0000              add [bx+si],al\r
+000028B1  0000              add [bx+si],al\r
+000028B3  0000              add [bx+si],al\r
+000028B5  0000              add [bx+si],al\r
+000028B7  0000              add [bx+si],al\r
+000028B9  0000              add [bx+si],al\r
+000028BB  0000              add [bx+si],al\r
+000028BD  0000              add [bx+si],al\r
+000028BF  0000              add [bx+si],al\r
+000028C1  0000              add [bx+si],al\r
+000028C3  0000              add [bx+si],al\r
+000028C5  0000              add [bx+si],al\r
+000028C7  0000              add [bx+si],al\r
+000028C9  0000              add [bx+si],al\r
+000028CB  0000              add [bx+si],al\r
+000028CD  0000              add [bx+si],al\r
+000028CF  0000              add [bx+si],al\r
+000028D1  0000              add [bx+si],al\r
+000028D3  0000              add [bx+si],al\r
+000028D5  0000              add [bx+si],al\r
+000028D7  0000              add [bx+si],al\r
+000028D9  0000              add [bx+si],al\r
+000028DB  0000              add [bx+si],al\r
+000028DD  0000              add [bx+si],al\r
+000028DF  0000              add [bx+si],al\r
+000028E1  0000              add [bx+si],al\r
+000028E3  0000              add [bx+si],al\r
+000028E5  0000              add [bx+si],al\r
+000028E7  0000              add [bx+si],al\r
+000028E9  0000              add [bx+si],al\r
+000028EB  0000              add [bx+si],al\r
+000028ED  0000              add [bx+si],al\r
+000028EF  0000              add [bx+si],al\r
+000028F1  0000              add [bx+si],al\r
+000028F3  0000              add [bx+si],al\r
+000028F5  0000              add [bx+si],al\r
+000028F7  0000              add [bx+si],al\r
+000028F9  0000              add [bx+si],al\r
+000028FB  0000              add [bx+si],al\r
+000028FD  0000              add [bx+si],al\r
+000028FF  0000              add [bx+si],al\r
+00002901  0000              add [bx+si],al\r
+00002903  0000              add [bx+si],al\r
+00002905  0000              add [bx+si],al\r
+00002907  0000              add [bx+si],al\r
+00002909  0000              add [bx+si],al\r
+0000290B  0000              add [bx+si],al\r
+0000290D  0000              add [bx+si],al\r
+0000290F  0000              add [bx+si],al\r
+00002911  0000              add [bx+si],al\r
+00002913  0000              add [bx+si],al\r
+00002915  0000              add [bx+si],al\r
+00002917  0000              add [bx+si],al\r
+00002919  0000              add [bx+si],al\r
+0000291B  0000              add [bx+si],al\r
+0000291D  0000              add [bx+si],al\r
+0000291F  0000              add [bx+si],al\r
+00002921  0000              add [bx+si],al\r
+00002923  0000              add [bx+si],al\r
+00002925  0000              add [bx+si],al\r
+00002927  0000              add [bx+si],al\r
+00002929  0000              add [bx+si],al\r
+0000292B  0000              add [bx+si],al\r
+0000292D  0000              add [bx+si],al\r
+0000292F  0000              add [bx+si],al\r
+00002931  0000              add [bx+si],al\r
+00002933  0000              add [bx+si],al\r
+00002935  0000              add [bx+si],al\r
+00002937  0000              add [bx+si],al\r
+00002939  0000              add [bx+si],al\r
+0000293B  0000              add [bx+si],al\r
+0000293D  0000              add [bx+si],al\r
+0000293F  0000              add [bx+si],al\r
+00002941  0000              add [bx+si],al\r
+00002943  0000              add [bx+si],al\r
+00002945  0000              add [bx+si],al\r
+00002947  0000              add [bx+si],al\r
+00002949  0000              add [bx+si],al\r
+0000294B  0000              add [bx+si],al\r
+0000294D  0000              add [bx+si],al\r
+0000294F  0000              add [bx+si],al\r
+00002951  0000              add [bx+si],al\r
+00002953  0000              add [bx+si],al\r
+00002955  0000              add [bx+si],al\r
+00002957  0000              add [bx+si],al\r
+00002959  0000              add [bx+si],al\r
+0000295B  0000              add [bx+si],al\r
+0000295D  0000              add [bx+si],al\r
+0000295F  0000              add [bx+si],al\r
+00002961  0000              add [bx+si],al\r
+00002963  0000              add [bx+si],al\r
+00002965  0000              add [bx+si],al\r
+00002967  0000              add [bx+si],al\r
+00002969  0000              add [bx+si],al\r
+0000296B  0000              add [bx+si],al\r
+0000296D  0000              add [bx+si],al\r
+0000296F  0000              add [bx+si],al\r
+00002971  0000              add [bx+si],al\r
+00002973  0000              add [bx+si],al\r
+00002975  0000              add [bx+si],al\r
+00002977  0000              add [bx+si],al\r
+00002979  0000              add [bx+si],al\r
+0000297B  0000              add [bx+si],al\r
+0000297D  0000              add [bx+si],al\r
+0000297F  0000              add [bx+si],al\r
+00002981  0000              add [bx+si],al\r
+00002983  0000              add [bx+si],al\r
+00002985  0000              add [bx+si],al\r
+00002987  0000              add [bx+si],al\r
+00002989  0000              add [bx+si],al\r
+0000298B  0000              add [bx+si],al\r
+0000298D  0000              add [bx+si],al\r
+0000298F  0000              add [bx+si],al\r
+00002991  0000              add [bx+si],al\r
+00002993  0000              add [bx+si],al\r
+00002995  0000              add [bx+si],al\r
+00002997  0000              add [bx+si],al\r
+00002999  0000              add [bx+si],al\r
+0000299B  0000              add [bx+si],al\r
+0000299D  0000              add [bx+si],al\r
+0000299F  0000              add [bx+si],al\r
+000029A1  0000              add [bx+si],al\r
+000029A3  0000              add [bx+si],al\r
+000029A5  0000              add [bx+si],al\r
+000029A7  0000              add [bx+si],al\r
+000029A9  0000              add [bx+si],al\r
+000029AB  0000              add [bx+si],al\r
+000029AD  0000              add [bx+si],al\r
+000029AF  0000              add [bx+si],al\r
+000029B1  0000              add [bx+si],al\r
+000029B3  0000              add [bx+si],al\r
+000029B5  0000              add [bx+si],al\r
+000029B7  0000              add [bx+si],al\r
+000029B9  0000              add [bx+si],al\r
+000029BB  0000              add [bx+si],al\r
+000029BD  0000              add [bx+si],al\r
+000029BF  0000              add [bx+si],al\r
+000029C1  0000              add [bx+si],al\r
+000029C3  0000              add [bx+si],al\r
+000029C5  0000              add [bx+si],al\r
+000029C7  0000              add [bx+si],al\r
+000029C9  0000              add [bx+si],al\r
+000029CB  0000              add [bx+si],al\r
+000029CD  0000              add [bx+si],al\r
+000029CF  0000              add [bx+si],al\r
+000029D1  0000              add [bx+si],al\r
+000029D3  0000              add [bx+si],al\r
+000029D5  0000              add [bx+si],al\r
+000029D7  0000              add [bx+si],al\r
+000029D9  0000              add [bx+si],al\r
+000029DB  0000              add [bx+si],al\r
+000029DD  0000              add [bx+si],al\r
+000029DF  0000              add [bx+si],al\r
+000029E1  0000              add [bx+si],al\r
+000029E3  0000              add [bx+si],al\r
+000029E5  0000              add [bx+si],al\r
+000029E7  0000              add [bx+si],al\r
+000029E9  0000              add [bx+si],al\r
+000029EB  0000              add [bx+si],al\r
+000029ED  0000              add [bx+si],al\r
+000029EF  0000              add [bx+si],al\r
+000029F1  0000              add [bx+si],al\r
+000029F3  0000              add [bx+si],al\r
+000029F5  0000              add [bx+si],al\r
+000029F7  0000              add [bx+si],al\r
+000029F9  0000              add [bx+si],al\r
+000029FB  0000              add [bx+si],al\r
+000029FD  0000              add [bx+si],al\r
+000029FF  0000              add [bx+si],al\r
+00002A01  0000              add [bx+si],al\r
+00002A03  0000              add [bx+si],al\r
+00002A05  0000              add [bx+si],al\r
+00002A07  0000              add [bx+si],al\r
+00002A09  0000              add [bx+si],al\r
+00002A0B  0000              add [bx+si],al\r
+00002A0D  0000              add [bx+si],al\r
+00002A0F  0000              add [bx+si],al\r
+00002A11  0000              add [bx+si],al\r
+00002A13  0000              add [bx+si],al\r
+00002A15  0000              add [bx+si],al\r
+00002A17  0000              add [bx+si],al\r
+00002A19  0000              add [bx+si],al\r
+00002A1B  0000              add [bx+si],al\r
+00002A1D  0000              add [bx+si],al\r
+00002A1F  0000              add [bx+si],al\r
+00002A21  0000              add [bx+si],al\r
+00002A23  0000              add [bx+si],al\r
+00002A25  0000              add [bx+si],al\r
+00002A27  0000              add [bx+si],al\r
+00002A29  0000              add [bx+si],al\r
+00002A2B  0000              add [bx+si],al\r
+00002A2D  0000              add [bx+si],al\r
+00002A2F  0000              add [bx+si],al\r
+00002A31  0000              add [bx+si],al\r
+00002A33  0000              add [bx+si],al\r
+00002A35  0000              add [bx+si],al\r
+00002A37  0000              add [bx+si],al\r
+00002A39  0000              add [bx+si],al\r
+00002A3B  0000              add [bx+si],al\r
+00002A3D  0000              add [bx+si],al\r
+00002A3F  0000              add [bx+si],al\r
+00002A41  0000              add [bx+si],al\r
+00002A43  0000              add [bx+si],al\r
+00002A45  0000              add [bx+si],al\r
+00002A47  0000              add [bx+si],al\r
+00002A49  0000              add [bx+si],al\r
+00002A4B  0000              add [bx+si],al\r
+00002A4D  0000              add [bx+si],al\r
+00002A4F  0000              add [bx+si],al\r
+00002A51  0000              add [bx+si],al\r
+00002A53  0000              add [bx+si],al\r
+00002A55  0000              add [bx+si],al\r
+00002A57  0000              add [bx+si],al\r
+00002A59  0000              add [bx+si],al\r
+00002A5B  0000              add [bx+si],al\r
+00002A5D  0000              add [bx+si],al\r
+00002A5F  0000              add [bx+si],al\r
+00002A61  0000              add [bx+si],al\r
+00002A63  0000              add [bx+si],al\r
+00002A65  0000              add [bx+si],al\r
+00002A67  0000              add [bx+si],al\r
+00002A69  0000              add [bx+si],al\r
+00002A6B  0000              add [bx+si],al\r
+00002A6D  0000              add [bx+si],al\r
+00002A6F  0000              add [bx+si],al\r
+00002A71  0000              add [bx+si],al\r
+00002A73  0000              add [bx+si],al\r
+00002A75  0000              add [bx+si],al\r
+00002A77  0000              add [bx+si],al\r
+00002A79  0000              add [bx+si],al\r
+00002A7B  0000              add [bx+si],al\r
+00002A7D  0000              add [bx+si],al\r
+00002A7F  0000              add [bx+si],al\r
+00002A81  0000              add [bx+si],al\r
+00002A83  0000              add [bx+si],al\r
+00002A85  0000              add [bx+si],al\r
+00002A87  0000              add [bx+si],al\r
+00002A89  0000              add [bx+si],al\r
+00002A8B  0000              add [bx+si],al\r
+00002A8D  0000              add [bx+si],al\r
+00002A8F  0000              add [bx+si],al\r
+00002A91  0000              add [bx+si],al\r
+00002A93  0000              add [bx+si],al\r
+00002A95  0000              add [bx+si],al\r
+00002A97  0000              add [bx+si],al\r
+00002A99  0000              add [bx+si],al\r
+00002A9B  0000              add [bx+si],al\r
+00002A9D  0000              add [bx+si],al\r
+00002A9F  0000              add [bx+si],al\r
+00002AA1  0000              add [bx+si],al\r
+00002AA3  0000              add [bx+si],al\r
+00002AA5  0000              add [bx+si],al\r
+00002AA7  0000              add [bx+si],al\r
+00002AA9  0000              add [bx+si],al\r
+00002AAB  0000              add [bx+si],al\r
+00002AAD  0000              add [bx+si],al\r
+00002AAF  0000              add [bx+si],al\r
+00002AB1  0000              add [bx+si],al\r
+00002AB3  0000              add [bx+si],al\r
+00002AB5  0000              add [bx+si],al\r
+00002AB7  0000              add [bx+si],al\r
+00002AB9  0000              add [bx+si],al\r
+00002ABB  0000              add [bx+si],al\r
+00002ABD  0000              add [bx+si],al\r
+00002ABF  0000              add [bx+si],al\r
+00002AC1  0000              add [bx+si],al\r
+00002AC3  0000              add [bx+si],al\r
+00002AC5  0000              add [bx+si],al\r
+00002AC7  0000              add [bx+si],al\r
+00002AC9  0000              add [bx+si],al\r
+00002ACB  0000              add [bx+si],al\r
+00002ACD  0000              add [bx+si],al\r
+00002ACF  0000              add [bx+si],al\r
+00002AD1  0000              add [bx+si],al\r
+00002AD3  0000              add [bx+si],al\r
+00002AD5  0000              add [bx+si],al\r
+00002AD7  0000              add [bx+si],al\r
+00002AD9  0000              add [bx+si],al\r
+00002ADB  0000              add [bx+si],al\r
+00002ADD  0000              add [bx+si],al\r
+00002ADF  0000              add [bx+si],al\r
+00002AE1  0000              add [bx+si],al\r
+00002AE3  0000              add [bx+si],al\r
+00002AE5  0000              add [bx+si],al\r
+00002AE7  0000              add [bx+si],al\r
+00002AE9  0000              add [bx+si],al\r
+00002AEB  0000              add [bx+si],al\r
+00002AED  0000              add [bx+si],al\r
+00002AEF  0000              add [bx+si],al\r
+00002AF1  0000              add [bx+si],al\r
+00002AF3  0000              add [bx+si],al\r
+00002AF5  0000              add [bx+si],al\r
+00002AF7  0000              add [bx+si],al\r
+00002AF9  0000              add [bx+si],al\r
+00002AFB  0000              add [bx+si],al\r
+00002AFD  0000              add [bx+si],al\r
+00002AFF  0000              add [bx+si],al\r
+00002B01  0000              add [bx+si],al\r
+00002B03  0000              add [bx+si],al\r
+00002B05  0000              add [bx+si],al\r
+00002B07  0000              add [bx+si],al\r
+00002B09  0000              add [bx+si],al\r
+00002B0B  0000              add [bx+si],al\r
+00002B0D  0000              add [bx+si],al\r
+00002B0F  0000              add [bx+si],al\r
+00002B11  0000              add [bx+si],al\r
+00002B13  0000              add [bx+si],al\r
+00002B15  0000              add [bx+si],al\r
+00002B17  0000              add [bx+si],al\r
+00002B19  0000              add [bx+si],al\r
+00002B1B  0000              add [bx+si],al\r
+00002B1D  0000              add [bx+si],al\r
+00002B1F  0000              add [bx+si],al\r
+00002B21  0000              add [bx+si],al\r
+00002B23  0000              add [bx+si],al\r
+00002B25  0000              add [bx+si],al\r
+00002B27  0000              add [bx+si],al\r
+00002B29  0000              add [bx+si],al\r
+00002B2B  0000              add [bx+si],al\r
+00002B2D  0000              add [bx+si],al\r
+00002B2F  0000              add [bx+si],al\r
+00002B31  0000              add [bx+si],al\r
+00002B33  0000              add [bx+si],al\r
+00002B35  0000              add [bx+si],al\r
+00002B37  0000              add [bx+si],al\r
+00002B39  0000              add [bx+si],al\r
+00002B3B  0000              add [bx+si],al\r
+00002B3D  0000              add [bx+si],al\r
+00002B3F  0000              add [bx+si],al\r
+00002B41  0000              add [bx+si],al\r
+00002B43  0000              add [bx+si],al\r
+00002B45  0000              add [bx+si],al\r
+00002B47  0000              add [bx+si],al\r
+00002B49  0000              add [bx+si],al\r
+00002B4B  0000              add [bx+si],al\r
+00002B4D  0000              add [bx+si],al\r
+00002B4F  0000              add [bx+si],al\r
+00002B51  0000              add [bx+si],al\r
+00002B53  0000              add [bx+si],al\r
+00002B55  0000              add [bx+si],al\r
+00002B57  0000              add [bx+si],al\r
+00002B59  0000              add [bx+si],al\r
+00002B5B  0000              add [bx+si],al\r
+00002B5D  0000              add [bx+si],al\r
+00002B5F  0000              add [bx+si],al\r
+00002B61  0000              add [bx+si],al\r
+00002B63  0000              add [bx+si],al\r
+00002B65  0000              add [bx+si],al\r
+00002B67  0000              add [bx+si],al\r
+00002B69  0000              add [bx+si],al\r
+00002B6B  0000              add [bx+si],al\r
+00002B6D  0000              add [bx+si],al\r
+00002B6F  0000              add [bx+si],al\r
+00002B71  0000              add [bx+si],al\r
+00002B73  0000              add [bx+si],al\r
+00002B75  0000              add [bx+si],al\r
+00002B77  0000              add [bx+si],al\r
+00002B79  0000              add [bx+si],al\r
+00002B7B  0000              add [bx+si],al\r
+00002B7D  0000              add [bx+si],al\r
+00002B7F  0000              add [bx+si],al\r
+00002B81  A37F28            mov [0x287f],ax\r
+00002B84  0100              add [bx+si],ax\r
+00002B86  891D              mov [di],bx\r
+00002B88  832801            sub word [bx+si],byte +0x1\r
+00002B8B  00890D87          add [bx+di+0x870d],cl\r
+00002B8F  2801              sub [bx+di],al\r
+00002B91  0089158B          add [bx+di+0x8b15],cl\r
+00002B95  2801              sub [bx+di],al\r
+00002B97  0089258F          add [bx+di+0x8f25],cl\r
+00002B9B  2801              sub [bx+di],al\r
+00002B9D  00892D93          add [bx+di+0x932d],cl\r
+00002BA1  2801              sub [bx+di],al\r
+00002BA3  00893597          add [bx+di+0x9735],cl\r
+00002BA7  2801              sub [bx+di],al\r
+00002BA9  00893D9B          add [bx+di+0x9b3d],cl\r
+00002BAD  2801              sub [bx+di],al\r
+00002BAF  00E8              add al,ch\r
+00002BB1  3903              cmp [bp+di],ax\r
+00002BB3  0000              add [bx+si],al\r
+00002BB5  66891D            mov [di],ebx\r
+00002BB8  AF                scasw\r
+00002BB9  2801              sub [bx+di],al\r
+00002BBB  0066BA            add [bp-0x46],ah\r
+00002BBE  0000              add [bx+si],al\r
+00002BC0  BE4883            mov si,0x8348\r
+00002BC3  0B00              or ax,[bx+si]\r
+00002BC5  BFB128            mov di,0x28b1\r
+00002BC8  0100              add [bx+si],ax\r
+00002BCA  66B90000A466      mov ecx,0x66a40000\r
+00002BD0  41                inc cx\r
+00002BD1  6683F948          cmp ecx,byte +0x48\r
+00002BD5  7402              jz 0x2bd9\r
+00002BD7  EBF5              jmp short 0x2bce\r
+00002BD9  6642              inc edx\r
+00002BDB  6683FA0A          cmp edx,byte +0xa\r
+00002BDF  7405              jz 0x2be6\r
+00002BE1  83C658            add si,byte +0x58\r
+00002BE4  EBE4              jmp short 0x2bca\r
+00002BE6  66BBA401E8D8      mov ebx,0xd8e801a4\r
+00002BEC  0200              add al,[bx+si]\r
+00002BEE  00BD4E27          add [di+0x274e],bh\r
+00002BF2  0100              add [bx+si],ax\r
+00002BF4  E87B03            call 0x2f72\r
+00002BF7  0000              add [bx+si],al\r
+00002BF9  66BBF401E8C5      mov ebx,0xc5e801f4\r
+00002BFF  0200              add al,[bx+si]\r
+00002C01  00BD7327          add [di+0x2773],bh\r
+00002C05  0100              add [bx+si],ax\r
+00002C07  E86803            call 0x2f72\r
+00002C0A  0000              add [bx+si],al\r
+00002C0C  BD2028            mov bp,0x2820\r
+00002C0F  0100              add [bx+si],ax\r
+00002C11  E85E03            call 0x2f72\r
+00002C14  0000              add [bx+si],al\r
+00002C16  BD1C28            mov bp,0x281c\r
+00002C19  0100              add [bx+si],ax\r
+00002C1B  E85403            call 0x2f72\r
+00002C1E  0000              add [bx+si],al\r
+00002C20  66BB4402E89E      mov ebx,0x9ee80244\r
+00002C26  0200              add al,[bx+si]\r
+00002C28  00BD8827          add [di+0x2788],bh\r
+00002C2C  0100              add [bx+si],ax\r
+00002C2E  E84103            call 0x2f72\r
+00002C31  0000              add [bx+si],al\r
+00002C33  66BB9402E88B      mov ebx,0x8be80294\r
+00002C39  0200              add al,[bx+si]\r
+00002C3B  00BD2F28          add [di+0x282f],bh\r
+00002C3F  0100              add [bx+si],ax\r
+00002C41  E82E03            call 0x2f72\r
+00002C44  0000              add [bx+si],al\r
+00002C46  A17F28            mov ax,[0x287f]\r
+00002C49  0100              add [bx+si],ax\r
+00002C4B  E80103            call 0x2f4f\r
+00002C4E  0000              add [bx+si],al\r
+00002C50  BD3928            mov bp,0x2839\r
+00002C53  0100              add [bx+si],ax\r
+00002C55  E81A03            call 0x2f72\r
+00002C58  0000              add [bx+si],al\r
+00002C5A  A18328            mov ax,[0x2883]\r
+00002C5D  0100              add [bx+si],ax\r
+00002C5F  E8ED02            call 0x2f4f\r
+00002C62  0000              add [bx+si],al\r
+00002C64  BD1C28            mov bp,0x281c\r
+00002C67  0100              add [bx+si],ax\r
+00002C69  E80603            call 0x2f72\r
+00002C6C  0000              add [bx+si],al\r
+00002C6E  66BBE402E850      mov ebx,0x50e802e4\r
+00002C74  0200              add al,[bx+si]\r
+00002C76  00BD4328          add [di+0x2843],bh\r
+00002C7A  0100              add [bx+si],ax\r
+00002C7C  E8F302            call 0x2f72\r
+00002C7F  0000              add [bx+si],al\r
+00002C81  A18728            mov ax,[0x2887]\r
+00002C84  0100              add [bx+si],ax\r
+00002C86  E8C602            call 0x2f4f\r
+00002C89  0000              add [bx+si],al\r
+00002C8B  BD4D28            mov bp,0x284d\r
+00002C8E  0100              add [bx+si],ax\r
+00002C90  E8DF02            call 0x2f72\r
+00002C93  0000              add [bx+si],al\r
+00002C95  A18B28            mov ax,[0x288b]\r
+00002C98  0100              add [bx+si],ax\r
+00002C9A  E8B202            call 0x2f4f\r
+00002C9D  0000              add [bx+si],al\r
+00002C9F  BD1C28            mov bp,0x281c\r
+00002CA2  0100              add [bx+si],ax\r
+00002CA4  E8CB02            call 0x2f72\r
+00002CA7  0000              add [bx+si],al\r
+00002CA9  66BB3403E815      mov ebx,0x15e80334\r
+00002CAF  0200              add al,[bx+si]\r
+00002CB1  00BD5728          add [di+0x2857],bh\r
+00002CB5  0100              add [bx+si],ax\r
+00002CB7  E8B802            call 0x2f72\r
+00002CBA  0000              add [bx+si],al\r
+00002CBC  A18F28            mov ax,[0x288f]\r
+00002CBF  0100              add [bx+si],ax\r
+00002CC1  E88B02            call 0x2f4f\r
+00002CC4  0000              add [bx+si],al\r
+00002CC6  BD6128            mov bp,0x2861\r
+00002CC9  0100              add [bx+si],ax\r
+00002CCB  E8A402            call 0x2f72\r
+00002CCE  0000              add [bx+si],al\r
+00002CD0  A19328            mov ax,[0x2893]\r
+00002CD3  0100              add [bx+si],ax\r
+00002CD5  E87702            call 0x2f4f\r
+00002CD8  0000              add [bx+si],al\r
+00002CDA  BD1C28            mov bp,0x281c\r
+00002CDD  0100              add [bx+si],ax\r
+00002CDF  E89002            call 0x2f72\r
+00002CE2  0000              add [bx+si],al\r
+00002CE4  66BB8403E8DA      mov ebx,0xdae80384\r
+00002CEA  0100              add [bx+si],ax\r
+00002CEC  00BD6B28          add [di+0x286b],bh\r
+00002CF0  0100              add [bx+si],ax\r
+00002CF2  E87D02            call 0x2f72\r
+00002CF5  0000              add [bx+si],al\r
+00002CF7  A19728            mov ax,[0x2897]\r
+00002CFA  0100              add [bx+si],ax\r
+00002CFC  E85002            call 0x2f4f\r
+00002CFF  0000              add [bx+si],al\r
+00002D01  BD7528            mov bp,0x2875\r
+00002D04  0100              add [bx+si],ax\r
+00002D06  E86902            call 0x2f72\r
+00002D09  0000              add [bx+si],al\r
+00002D0B  A19B28            mov ax,[0x289b]\r
+00002D0E  0100              add [bx+si],ax\r
+00002D10  E83C02            call 0x2f4f\r
+00002D13  0000              add [bx+si],al\r
+00002D15  BD1C28            mov bp,0x281c\r
+00002D18  0100              add [bx+si],ax\r
+00002D1A  E85502            call 0x2f72\r
+00002D1D  0000              add [bx+si],al\r
+00002D1F  66BBD403E89F      mov ebx,0x9fe803d4\r
+00002D25  0100              add [bx+si],ax\r
+00002D27  00BD8827          add [di+0x2788],bh\r
+00002D2B  0100              add [bx+si],ax\r
+00002D2D  E84202            call 0x2f72\r
+00002D30  0000              add [bx+si],al\r
+00002D32  66BB7404E88C      mov ebx,0x8ce80474\r
+00002D38  0100              add [bx+si],ax\r
+00002D3A  00BDF727          add [di+0x27f7],bh\r
+00002D3E  0100              add [bx+si],ax\r
+00002D40  E82F02            call 0x2f72\r
+00002D43  0000              add [bx+si],al\r
+00002D45  66BB2404E879      mov ebx,0x79e80424\r
+00002D4B  0100              add [bx+si],ax\r
+00002D4D  00803D1F          add [bx+si+0x1f3d],al\r
+00002D51  2801              sub [bx+di],al\r
+00002D53  0001              add [bx+di],al\r
+00002D55  7467              jz 0x2dbe\r
+00002D57  BDD227            mov bp,0x27d2\r
+00002D5A  0100              add [bx+si],ax\r
+00002D5C  E81302            call 0x2f72\r
+00002D5F  0000              add [bx+si],al\r
+00002D61  66BB4504E85D      mov ebx,0x5de80445\r
+00002D67  0100              add [bx+si],ax\r
+00002D69  00A0AE0D          add [bx+si+0xdae],ah\r
+00002D6D  0100              add [bx+si],ax\r
+00002D6F  8A25              mov ah,[di]\r
+00002D71  AF                scasw\r
+00002D72  0D0100            or ax,0x1\r
+00002D75  80FC3F            cmp ah,0x3f\r
+00002D78  750D              jnz 0x2d87\r
+00002D7A  3C00              cmp al,0x0\r
+00002D7C  74EC              jz 0x2d6a\r
+00002D7E  C605AF            mov byte [di],0xaf\r
+00002D81  0D0100            or ax,0x1\r
+00002D84  00EB              add bl,ch\r
+00002D86  0E                push cs\r
+00002D87  88E3              mov bl,ah\r
+00002D89  FEC3              inc bl\r
+00002D8B  38C3              cmp bl,al\r
+00002D8D  74DB              jz 0x2d6a\r
+00002D8F  FE05              inc byte [di]\r
+00002D91  AF                scasw\r
+00002D92  0D0100            or ax,0x1\r
+00002D95  BE6E0D            mov si,0xd6e\r
+00002D98  0100              add [bx+si],ax\r
+00002D9A  0FB605            movzx ax,[di]\r
+00002D9D  AF                scasw\r
+00002D9E  0D0100            or ax,0x1\r
+00002DA1  01C6              add si,ax\r
+00002DA3  8A2680FC          mov ah,[0xfc80]\r
+00002DA7  FA                cli\r
+00002DA8  74C0              jz 0x2d6a\r
+00002DAA  80FCE0            cmp ah,0xe0\r
+00002DAD  74BB              jz 0x2d6a\r
+00002DAF  80FCE1            cmp ah,0xe1\r
+00002DB2  74B6              jz 0x2d6a\r
+00002DB4  F6C480            test ah,0x80\r
+00002DB7  75B1              jnz 0x2d6a\r
+00002DB9  E8E6EA            call 0x18a2\r
+00002DBC  FF                db 0xFF\r
+00002DBD  FF                db 0xFF\r
+00002DBE  BDAD27            mov bp,0x27ad\r
+00002DC1  0100              add [bx+si],ax\r
+00002DC3  E8AC01            call 0x2f72\r
+00002DC6  0000              add [bx+si],al\r
+00002DC8  66BB4304E8F6      mov ebx,0xf6e80443\r
+00002DCE  0000              add [bx+si],al\r
+00002DD0  00A0AE0D          add [bx+si+0xdae],ah\r
+00002DD4  0100              add [bx+si],ax\r
+00002DD6  8A25              mov ah,[di]\r
+00002DD8  AF                scasw\r
+00002DD9  0D0100            or ax,0x1\r
+00002DDC  80FC3F            cmp ah,0x3f\r
+00002DDF  750D              jnz 0x2dee\r
+00002DE1  3C00              cmp al,0x0\r
+00002DE3  74EC              jz 0x2dd1\r
+00002DE5  C605AF            mov byte [di],0xaf\r
+00002DE8  0D0100            or ax,0x1\r
+00002DEB  00EB              add bl,ch\r
+00002DED  0E                push cs\r
+00002DEE  88E3              mov bl,ah\r
+00002DF0  FEC3              inc bl\r
+00002DF2  38C3              cmp bl,al\r
+00002DF4  74DB              jz 0x2dd1\r
+00002DF6  FE05              inc byte [di]\r
+00002DF8  AF                scasw\r
+00002DF9  0D0100            or ax,0x1\r
+00002DFC  BE6E0D            mov si,0xd6e\r
+00002DFF  0100              add [bx+si],ax\r
+00002E01  0FB605            movzx ax,[di]\r
+00002E04  AF                scasw\r
+00002E05  0D0100            or ax,0x1\r
+00002E08  01C6              add si,ax\r
+00002E0A  8A2680FC          mov ah,[0xfc80]\r
+00002E0E  FA                cli\r
+00002E0F  74C0              jz 0x2dd1\r
+00002E11  80FCE0            cmp ah,0xe0\r
+00002E14  74BB              jz 0x2dd1\r
+00002E16  80FCE1            cmp ah,0xe1\r
+00002E19  74B6              jz 0x2dd1\r
+00002E1B  F6C480            test ah,0x80\r
+00002E1E  75B1              jnz 0x2dd1\r
+00002E20  66BA0000BF48      mov edx,0x48bf0000\r
+00002E26  830B00            or word [bp+di],byte +0x0\r
+00002E29  BEB128            mov si,0x28b1\r
+00002E2C  0100              add [bx+si],ax\r
+00002E2E  66B90000A466      mov ecx,0x66a40000\r
+00002E34  41                inc cx\r
+00002E35  6683F948          cmp ecx,byte +0x48\r
+00002E39  7402              jz 0x2e3d\r
+00002E3B  EBF5              jmp short 0x2e32\r
+00002E3D  6642              inc edx\r
+00002E3F  6683FA0A          cmp edx,byte +0xa\r
+00002E43  7405              jz 0x2e4a\r
+00002E45  83C758            add di,byte +0x58\r
+00002E48  EBE4              jmp short 0x2e2e\r
+00002E4A  668B1D            mov ebx,[di]\r
+00002E4D  AF                scasw\r
+00002E4E  2801              sub [bx+di],al\r
+00002E50  00E8              add al,ch\r
+00002E52  7100              jno 0x2e54\r
+00002E54  0000              add [bx+si],al\r
+00002E56  C6051F            mov byte [di],0x1f\r
+00002E59  2801              sub [bx+di],al\r
+00002E5B  0001              add [bx+di],al\r
+00002E5D  C60520            mov byte [di],0x20\r
+00002E60  2801              sub [bx+di],al\r
+00002E62  0020              add [bx+si],ah\r
+00002E64  C60521            mov byte [di],0x21\r
+00002E67  2801              sub [bx+di],al\r
+00002E69  006EC6            add [bp-0x3a],ch\r
+00002E6C  052228            add ax,0x2822\r
+00002E6F  0100              add [bx+si],ax\r
+00002E71  6F                outsw\r
+00002E72  C60523            mov byte [di],0x23\r
+00002E75  2801              sub [bx+di],al\r
+00002E77  006EC6            add [bp-0x3a],ch\r
+00002E7A  052428            add ax,0x2824\r
+00002E7D  0100              add [bx+si],ax\r
+00002E7F  65C60525          mov byte [gs:di],0x25\r
+00002E83  2801              sub [bx+di],al\r
+00002E85  002EC605          add [0x5c6],ch\r
+00002E89  262801            sub [es:bx+di],al\r
+00002E8C  0020              add [bx+si],ah\r
+00002E8E  C60527            mov byte [di],0x27\r
+00002E91  2801              sub [bx+di],al\r
+00002E93  0020              add [bx+si],ah\r
+00002E95  C60528            mov byte [di],0x28\r
+00002E98  2801              sub [bx+di],al\r
+00002E9A  0020              add [bx+si],ah\r
+00002E9C  C60529            mov byte [di],0x29\r
+00002E9F  2801              sub [bx+di],al\r
+00002EA1  0020              add [bx+si],ah\r
+00002EA3  C6052A            mov byte [di],0x2a\r
+00002EA6  2801              sub [bx+di],al\r
+00002EA8  0020              add [bx+si],ah\r
+00002EAA  C6052B            mov byte [di],0x2b\r
+00002EAD  2801              sub [bx+di],al\r
+00002EAF  0020              add [bx+si],ah\r
+00002EB1  C6052C            mov byte [di],0x2c\r
+00002EB4  2801              sub [bx+di],al\r
+00002EB6  0020              add [bx+si],ah\r
+00002EB8  C6052D            mov byte [di],0x2d\r
+00002EBB  2801              sub [bx+di],al\r
+00002EBD  0020              add [bx+si],ah\r
+00002EBF  C6052E            mov byte [di],0x2e\r
+00002EC2  2801              sub [bx+di],al\r
+00002EC4  0000              add [bx+si],al\r
+00002EC6  C3                ret\r
+00002EC7  A3A328            mov [0x28a3],ax\r
+00002ECA  0100              add [bx+si],ax\r
+00002ECC  8915              mov [di],dx\r
+00002ECE  AB                stosw\r
+00002ECF  2801              sub [bx+di],al\r
+00002ED1  00B00E88          add [bx+si+0x880e],dh\r
+00002ED5  FC                cld\r
+00002ED6  66BAD40366EF      mov edx,0xef6603d4\r
+00002EDC  6640              inc eax\r
+00002EDE  88DC              mov ah,bl\r
+00002EE0  66EF              out dx,eax\r
+00002EE2  8B15              mov dx,[di]\r
+00002EE4  AB                stosw\r
+00002EE5  2801              sub [bx+di],al\r
+00002EE7  00A1A328          add [bx+di+0x28a3],ah\r
+00002EEB  0100              add [bx+si],ax\r
+00002EED  C3                ret\r
+00002EEE  A3A328            mov [0x28a3],ax\r
+00002EF1  0100              add [bx+si],ax\r
+00002EF3  8915              mov [di],dx\r
+00002EF5  AB                stosw\r
+00002EF6  2801              sub [bx+di],al\r
+00002EF8  0066BA            add [bp-0x46],ah\r
+00002EFB  D403              aam 0x3\r
+00002EFD  B00E              mov al,0xe\r
+00002EFF  EE                out dx,al\r
+00002F00  6642              inc edx\r
+00002F02  EC                in al,dx\r
+00002F03  88C7              mov bh,al\r
+00002F05  B00F              mov al,0xf\r
+00002F07  664A              dec edx\r
+00002F09  EE                out dx,al\r
+00002F0A  6642              inc edx\r
+00002F0C  EC                in al,dx\r
+00002F0D  88C3              mov bl,al\r
+00002F0F  8B15              mov dx,[di]\r
+00002F11  AB                stosw\r
+00002F12  2801              sub [bx+di],al\r
+00002F14  00A1A328          add [bx+di+0x28a3],ah\r
+00002F18  0100              add [bx+si],ax\r
+00002F1A  C3                ret\r
+00002F1B  A39F28            mov [0x289f],ax\r
+00002F1E  0100              add [bx+si],ax\r
+00002F20  891D              mov [di],bx\r
+00002F22  A7                cmpsw\r
+00002F23  2801              sub [bx+di],al\r
+00002F25  00E8              add al,ch\r
+00002F27  C3                ret\r
+00002F28  FF                db 0xFF\r
+00002F29  FF                db 0xFF\r
+00002F2A  FF89D88B          dec word [bx+di+0x8bd8]\r
+00002F2E  1DA728            sbb ax,0x28a7\r
+00002F31  0100              add [bx+si],ax\r
+00002F33  2666899C0000      mov [es:si+0x0],ebx\r
+00002F39  800B00            or byte [bp+di],0x0\r
+00002F3C  89C3              mov bx,ax\r
+00002F3E  6643              inc ebx\r
+00002F40  E882FF            call 0x2ec5\r
+00002F43  FF                db 0xFF\r
+00002F44  FF8B1DA7          dec word [bp+di+0xa71d]\r
+00002F48  2801              sub [bx+di],al\r
+00002F4A  00A19F28          add [bx+di+0x289f],ah\r
+00002F4E  0100              add [bx+si],ax\r
+00002F50  C3                ret\r
+00002F51  B90800            mov cx,0x8\r
+00002F54  0000              add [bx+si],al\r
+00002F56  C1C004            rol ax,0x4\r
+00002F59  0FB6D0            movzx dx,al\r
+00002F5C  83E20F            and dx,byte +0xf\r
+00002F5F  83CA30            or dx,byte +0x30\r
+00002F62  83FA39            cmp dx,byte +0x39\r
+00002F65  7603              jna 0x2f6a\r
+00002F67  83C207            add dx,byte +0x7\r
+00002F6A  88D3              mov bl,dl\r
+00002F6C  E8AAFF            call 0x2f19\r
+00002F6F  FF                db 0xFF\r
+00002F70  FFE2              jmp dx\r
+00002F72  E3C3              jcxz 0x2f37\r
+00002F74  8A4500            mov al,[di+0x0]\r
+00002F77  08C0              or al,al\r
+00002F79  740C              jz 0x2f87\r
+00002F7B  88C3              mov bl,al\r
+00002F7D  B740              mov bh,0x40\r
+00002F7F  E897FF            call 0x2f19\r
+00002F82  FF                db 0xFF\r
+00002F83  FF45EB            inc word [di-0x15]\r
+00002F86  ED                in ax,dx\r
+00002F87  C3                ret\r
+00002F88  0000              add [bx+si],al\r
+00002F8A  0000              add [bx+si],al\r
+00002F8C  0000              add [bx+si],al\r
+00002F8E  006650            add [bp+0x50],ah\r
+00002F91  B000              mov al,0x0\r
+00002F93  E670              out 0x70,al\r
+00002F95  E471              in al,0x71\r
+00002F97  A28E2F            mov [0x2f8e],al\r
+00002F9A  0100              add [bx+si],ax\r
+00002F9C  B002              mov al,0x2\r
+00002F9E  E670              out 0x70,al\r
+00002FA0  E471              in al,0x71\r
+00002FA2  A28D2F            mov [0x2f8d],al\r
+00002FA5  0100              add [bx+si],ax\r
+00002FA7  B004              mov al,0x4\r
+00002FA9  E670              out 0x70,al\r
+00002FAB  E471              in al,0x71\r
+00002FAD  A28C2F            mov [0x2f8c],al\r
+00002FB0  0100              add [bx+si],ax\r
+00002FB2  B007              mov al,0x7\r
+00002FB4  E670              out 0x70,al\r
+00002FB6  E471              in al,0x71\r
+00002FB8  A28B2F            mov [0x2f8b],al\r
+00002FBB  0100              add [bx+si],ax\r
+00002FBD  B008              mov al,0x8\r
+00002FBF  E670              out 0x70,al\r
+00002FC1  E471              in al,0x71\r
+00002FC3  A28A2F            mov [0x2f8a],al\r
+00002FC6  0100              add [bx+si],ax\r
+00002FC8  B009              mov al,0x9\r
+00002FCA  E670              out 0x70,al\r
+00002FCC  E471              in al,0x71\r
+00002FCE  A2892F            mov [0x2f89],al\r
+00002FD1  0100              add [bx+si],ax\r
+00002FD3  B032              mov al,0x32\r
+00002FD5  E670              out 0x70,al\r
+00002FD7  E471              in al,0x71\r
+00002FD9  A2882F            mov [0x2f88],al\r
+00002FDC  0100              add [bx+si],ax\r
+00002FDE  6658              pop eax\r
+00002FE0  C3                ret\r
+00002FE1  53                push bx\r
+00002FE2  88C3              mov bl,al\r
+00002FE4  80E30F            and bl,0xf\r
+00002FE7  C0E804            shr al,0x4\r
+00002FEA  B70A              mov bh,0xa\r
+00002FEC  F6E7              mul bh\r
+00002FEE  00D8              add al,bl\r
+00002FF0  5B                pop bx\r
+00002FF1  C3                ret\r
+00002FF2  51                push cx\r
+00002FF3  88C4              mov ah,al\r
+00002FF5  66250FF0C0EC      and eax,0xecc0f00f\r
+00002FFB  0466              add al,0x66\r
+00002FFD  0D3030            or ax,0x3030\r
+00003000  86E0              xchg ah,al\r
+00003002  59                pop cx\r
+00003003  C3                ret\r
+00003004  0D0A20            or ax,0x200a\r
+00003007  2020              and [bx+si],ah\r
+00003009  54                push sp\r
+0000300A  696D653A20        imul bp,[di+0x65],word 0x203a\r
+0000300F  000D              add [di],cl\r
+00003011  0A20              or ah,[bx+si]\r
+00003013  2020              and [bx+si],ah\r
+00003015  44                inc sp\r
+00003016  61                popa\r
+00003017  7465              jz 0x307e\r
+00003019  3A20              cmp ah,[bx+si]\r
+0000301B  005053            add [bx+si+0x53],dl\r
+0000301E  56                push si\r
+0000301F  BE1030            mov si,0x3010\r
+00003022  0100              add [bx+si],ax\r
+00003024  B307              mov bl,0x7\r
+00003026  E884D7            call 0x7ad\r
+00003029  FF                db 0xFF\r
+0000302A  FF                db 0xFF\r
+0000302B  E85FFF            call 0x2f8d\r
+0000302E  FF                db 0xFF\r
+0000302F  FFA0882F          jmp near [bx+si+0x2f88]\r
+00003033  0100              add [bx+si],ax\r
+00003035  E8B8FF            call 0x2ff0\r
+00003038  FF                db 0xFF\r
+00003039  FF50B7            call near [bx+si-0x49]\r
+0000303C  07                pop es\r
+0000303D  88C3              mov bl,al\r
+0000303F  E80AD7            call 0x74c\r
+00003042  FF                db 0xFF\r
+00003043  FF5888            call far [bx+si-0x78]\r
+00003046  E3E8              jcxz 0x3030\r
+00003048  02D7              add dl,bh\r
+0000304A  FF                db 0xFF\r
+0000304B  FFA0892F          jmp near [bx+si+0x2f89]\r
+0000304F  0100              add [bx+si],ax\r
+00003051  E89CFF            call 0x2ff0\r
+00003054  FF                db 0xFF\r
+00003055  FF5088            call near [bx+si-0x78]\r
+00003058  C3                ret\r
+00003059  E8F0D6            call 0x74c\r
+0000305C  FF                db 0xFF\r
+0000305D  FF5888            call far [bx+si-0x78]\r
+00003060  E3E8              jcxz 0x304a\r
+00003062  E8D6FF            call 0x303b\r
+00003065  FFB33AE8          push word [bp+di+0xe83a]\r
+00003069  E1D6              loope 0x3041\r
+0000306B  FF                db 0xFF\r
+0000306C  FFA08A2F          jmp near [bx+si+0x2f8a]\r
+00003070  0100              add [bx+si],ax\r
+00003072  E87BFF            call 0x2ff0\r
+00003075  FF                db 0xFF\r
+00003076  FF5088            call near [bx+si-0x78]\r
+00003079  C3                ret\r
+0000307A  E8CFD6            call 0x74c\r
+0000307D  FF                db 0xFF\r
+0000307E  FF5888            call far [bx+si-0x78]\r
+00003081  E3E8              jcxz 0x306b\r
+00003083  C7                db 0xC7\r
+00003084  D6                salc\r
+00003085  FF                db 0xFF\r
+00003086  FFB33AE8          push word [bp+di+0xe83a]\r
+0000308A  C0D6FF            rcl dh,0xff\r
+0000308D  FFA08B2F          jmp near [bx+si+0x2f8b]\r
+00003091  0100              add [bx+si],ax\r
+00003093  E85AFF            call 0x2ff0\r
+00003096  FF                db 0xFF\r
+00003097  FF5088            call near [bx+si-0x78]\r
+0000309A  C3                ret\r
+0000309B  E8AED6            call 0x74c\r
+0000309E  FF                db 0xFF\r
+0000309F  FF5888            call far [bx+si-0x78]\r
+000030A2  E3E8              jcxz 0x308c\r
+000030A4  A6                cmpsb\r
+000030A5  D6                salc\r
+000030A6  FF                db 0xFF\r
+000030A7  FF5E5B            call far [bp+0x5b]\r
+000030AA  58                pop ax\r
+000030AB  C3                ret\r
+000030AC  50                push ax\r
+000030AD  53                push bx\r
+000030AE  56                push si\r
+000030AF  BE0430            mov si,0x3004\r
+000030B2  0100              add [bx+si],ax\r
+000030B4  B307              mov bl,0x7\r
+000030B6  E8F4D6            call 0x7ad\r
+000030B9  FF                db 0xFF\r
+000030BA  FF                db 0xFF\r
+000030BB  E8CFFE            call 0x2f8d\r
+000030BE  FF                db 0xFF\r
+000030BF  FFA08C2F          jmp near [bx+si+0x2f8c]\r
+000030C3  0100              add [bx+si],ax\r
+000030C5  E828FF            call 0x2ff0\r
+000030C8  FF                db 0xFF\r
+000030C9  FF50B7            call near [bx+si-0x49]\r
+000030CC  07                pop es\r
+000030CD  88C3              mov bl,al\r
+000030CF  E87AD6            call 0x74c\r
+000030D2  FF                db 0xFF\r
+000030D3  FF5888            call far [bx+si-0x78]\r
+000030D6  E3E8              jcxz 0x30c0\r
+000030D8  72D6              jc 0x30b0\r
+000030DA  FF                db 0xFF\r
+000030DB  FFB33AE8          push word [bp+di+0xe83a]\r
+000030DF  6BD6FF            imul dx,si,byte -0x1\r
+000030E2  FFA08D2F          jmp near [bx+si+0x2f8d]\r
+000030E6  0100              add [bx+si],ax\r
+000030E8  E805FF            call 0x2ff0\r
+000030EB  FF                db 0xFF\r
+000030EC  FF5088            call near [bx+si-0x78]\r
+000030EF  C3                ret\r
+000030F0  E859D6            call 0x74c\r
+000030F3  FF                db 0xFF\r
+000030F4  FF5888            call far [bx+si-0x78]\r
+000030F7  E3E8              jcxz 0x30e1\r
+000030F9  51                push cx\r
+000030FA  D6                salc\r
+000030FB  FF                db 0xFF\r
+000030FC  FFB33AE8          push word [bp+di+0xe83a]\r
+00003100  4A                dec dx\r
+00003101  D6                salc\r
+00003102  FF                db 0xFF\r
+00003103  FFA08E2F          jmp near [bx+si+0x2f8e]\r
+00003107  0100              add [bx+si],ax\r
+00003109  E8E4FE            call 0x2ff0\r
+0000310C  FF                db 0xFF\r
+0000310D  FF5088            call near [bx+si-0x78]\r
+00003110  C3                ret\r
+00003111  E838D6            call 0x74c\r
+00003114  FF                db 0xFF\r
+00003115  FF5888            call far [bx+si-0x78]\r
+00003118  E3E8              jcxz 0x3102\r
+0000311A  30D6              xor dh,dl\r
+0000311C  FF                db 0xFF\r
+0000311D  FF5E5B            call far [bp+0x5b]\r
+00003120  58                pop ax\r
+00003121  C3                ret\r
+00003122  0000              add [bx+si],al\r
+00003124  0000              add [bx+si],al\r
+00003126  0000              add [bx+si],al\r
+00003128  0000              add [bx+si],al\r
+0000312A  0000              add [bx+si],al\r
+0000312C  0000              add [bx+si],al\r
+0000312E  0000              add [bx+si],al\r
+00003130  0000              add [bx+si],al\r
+00003132  0000              add [bx+si],al\r
+00003134  0000              add [bx+si],al\r
+00003136  0000              add [bx+si],al\r
+00003138  0000              add [bx+si],al\r
+0000313A  0000              add [bx+si],al\r
+0000313C  0000              add [bx+si],al\r
+0000313E  0000              add [bx+si],al\r
+00003140  0000              add [bx+si],al\r
+00003142  830526            add word [di],byte +0x26\r
+00003145  3101              xor [bx+di],ax\r
+00003147  0001              add [bx+di],al\r
+00003149  83152A            adc word [di],byte +0x2a\r
+0000314C  3101              xor [bx+di],ax\r
+0000314E  0000              add [bx+si],al\r
+00003150  833D22            cmp word [di],byte +0x22\r
+00003153  3101              xor [bx+di],ax\r
+00003155  0000              add [bx+si],al\r
+00003157  7406              jz 0x315f\r
+00003159  FF0D              dec word [di]\r
+0000315B  2231              and dh,[bx+di]\r
+0000315D  0100              add [bx+si],ax\r
+0000315F  813D2E31          cmp word [di],0x312e\r
+00003163  0100              add [bx+si],ax\r
+00003165  0000              add [bx+si],al\r
+00003167  0000              add [bx+si],al\r
+00003169  7406              jz 0x3171\r
+0000316B  FF15              call near [di]\r
+0000316D  2E3101            xor [cs:bx+di],ax\r
+00003170  00813D32          add [bx+di+0x323d],al\r
+00003174  3101              xor [bx+di],ax\r
+00003176  0000              add [bx+si],al\r
+00003178  0000              add [bx+si],al\r
+0000317A  007406            add [si+0x6],dh\r
+0000317D  FF15              call near [di]\r
+0000317F  3231              xor dh,[bx+di]\r
+00003181  0100              add [bx+si],ax\r
+00003183  813D3631          cmp word [di],0x3136\r
+00003187  0100              add [bx+si],ax\r
+00003189  0000              add [bx+si],al\r
+0000318B  0000              add [bx+si],al\r
+0000318D  7406              jz 0x3195\r
+0000318F  FF15              call near [di]\r
+00003191  363101            xor [ss:bx+di],ax\r
+00003194  00813D3A          add [bx+di+0x3a3d],al\r
+00003198  3101              xor [bx+di],ax\r
+0000319A  0000              add [bx+si],al\r
+0000319C  0000              add [bx+si],al\r
+0000319E  007406            add [si+0x6],dh\r
+000031A1  FF15              call near [di]\r
+000031A3  3A31              cmp dh,[bx+di]\r
+000031A5  0100              add [bx+si],ax\r
+000031A7  813D3E31          cmp word [di],0x313e\r
+000031AB  0100              add [bx+si],ax\r
+000031AD  0000              add [bx+si],al\r
+000031AF  0000              add [bx+si],al\r
+000031B1  7406              jz 0x31b9\r
+000031B3  FF15              call near [di]\r
+000031B5  3E3101            xor [ds:bx+di],ax\r
+000031B8  00B020E6          add [bx+si+0xe620],dh\r
+000031BC  20C3              and bl,al\r
+000031BE  833D2E            cmp word [di],byte +0x2e\r
+000031C1  3101              xor [bx+di],ax\r
+000031C3  0000              add [bx+si],al\r
+000031C5  750E              jnz 0x31d5\r
+000031C7  891D              mov [di],bx\r
+000031C9  2E3101            xor [cs:bx+di],ax\r
+000031CC  00EB              add bl,ch\r
+000031CE  48                dec ax\r
+000031CF  B80100            mov ax,0x1\r
+000031D2  0000              add [bx+si],al\r
+000031D4  C3                ret\r
+000031D5  833D32            cmp word [di],byte +0x32\r
+000031D8  3101              xor [bx+di],ax\r
+000031DA  0000              add [bx+si],al\r
+000031DC  7508              jnz 0x31e6\r
+000031DE  891D              mov [di],bx\r
+000031E0  3231              xor dh,[bx+di]\r
+000031E2  0100              add [bx+si],ax\r
+000031E4  EB31              jmp short 0x3217\r
+000031E6  833D36            cmp word [di],byte +0x36\r
+000031E9  3101              xor [bx+di],ax\r
+000031EB  0000              add [bx+si],al\r
+000031ED  7508              jnz 0x31f7\r
+000031EF  891D              mov [di],bx\r
+000031F1  363101            xor [ss:bx+di],ax\r
+000031F4  00EB              add bl,ch\r
+000031F6  20833D3A          and [bp+di+0x3a3d],al\r
+000031FA  3101              xor [bx+di],ax\r
+000031FC  0000              add [bx+si],al\r
+000031FE  7508              jnz 0x3208\r
+00003200  891D              mov [di],bx\r
+00003202  3A31              cmp dh,[bx+di]\r
+00003204  0100              add [bx+si],ax\r
+00003206  EB0F              jmp short 0x3217\r
+00003208  833D3E            cmp word [di],byte +0x3e\r
+0000320B  3101              xor [bx+di],ax\r
+0000320D  0000              add [bx+si],al\r
+0000320F  75BE              jnz 0x31cf\r
+00003211  891D              mov [di],bx\r
+00003213  3E3101            xor [ds:bx+di],ax\r
+00003216  0031              add [bx+di],dh\r
+00003218  C0C339            rol bl,0x39\r
+0000321B  1D2E31            sbb ax,0x312e\r
+0000321E  0100              add [bx+si],ax\r
+00003220  7512              jnz 0x3234\r
+00003222  C7052E31          mov word [di],0x312e\r
+00003226  0100              add [bx+si],ax\r
+00003228  0000              add [bx+si],al\r
+0000322A  0000              add [bx+si],al\r
+0000322C  EB54              jmp short 0x3282\r
+0000322E  B80100            mov ax,0x1\r
+00003231  0000              add [bx+si],al\r
+00003233  C3                ret\r
+00003234  391D              cmp [di],bx\r
+00003236  3231              xor dh,[bx+di]\r
+00003238  0100              add [bx+si],ax\r
+0000323A  750C              jnz 0x3248\r
+0000323C  C7053231          mov word [di],0x3132\r
+00003240  0100              add [bx+si],ax\r
+00003242  0000              add [bx+si],al\r
+00003244  0000              add [bx+si],al\r
+00003246  EB3A              jmp short 0x3282\r
+00003248  391D              cmp [di],bx\r
+0000324A  363101            xor [ss:bx+di],ax\r
+0000324D  00750C            add [di+0xc],dh\r
+00003250  C7053631          mov word [di],0x3136\r
+00003254  0100              add [bx+si],ax\r
+00003256  0000              add [bx+si],al\r
+00003258  0000              add [bx+si],al\r
+0000325A  EB26              jmp short 0x3282\r
+0000325C  391D              cmp [di],bx\r
+0000325E  3A31              cmp dh,[bx+di]\r
+00003260  0100              add [bx+si],ax\r
+00003262  750C              jnz 0x3270\r
+00003264  C7053A31          mov word [di],0x313a\r
+00003268  0100              add [bx+si],ax\r
+0000326A  0000              add [bx+si],al\r
+0000326C  0000              add [bx+si],al\r
+0000326E  EB12              jmp short 0x3282\r
+00003270  391D              cmp [di],bx\r
+00003272  3E3101            xor [ds:bx+di],ax\r
+00003275  0075B6            add [di-0x4a],dh\r
+00003278  C7053E31          mov word [di],0x313e\r
+0000327C  0100              add [bx+si],ax\r
+0000327E  0000              add [bx+si],al\r
+00003280  0000              add [bx+si],al\r
+00003282  31C0              xor ax,ax\r
+00003284  C3                ret\r
+00003285  890D              mov [di],cx\r
+00003287  2231              and dh,[bx+di]\r
+00003289  0100              add [bx+si],ax\r
+0000328B  833D22            cmp word [di],byte +0x22\r
+0000328E  3101              xor [bx+di],ax\r
+00003290  0000              add [bx+si],al\r
+00003292  75F7              jnz 0x328b\r
+00003294  C3                ret\r
+00003295  890D              mov [di],cx\r
+00003297  2231              and dh,[bx+di]\r
+00003299  0100              add [bx+si],ax\r
+0000329B  B92231            mov cx,0x3122\r
+0000329E  0100              add [bx+si],ax\r
+000032A0  C3                ret\r
+000032A1  50                push ax\r
+000032A2  B034              mov al,0x34\r
+000032A4  E643              out 0x43,al\r
+000032A6  B09B              mov al,0x9b\r
+000032A8  E640              out 0x40,al\r
+000032AA  B02E              mov al,0x2e\r
+000032AC  E640              out 0x40,al\r
+000032AE  58                pop ax\r
+000032AF  C3                ret\r
+000032B0  0000              add [bx+si],al\r
+000032B2  0000              add [bx+si],al\r
+000032B4  0A29              or ch,[bx+di]\r
+000032B6  0C1C              or al,0x1c\r
+000032B8  1202              adc al,[bp+si]\r
+000032BA  2B162313          sub dx,[0x1323]\r
+000032BE  093A              or [bp+si],di\r
+000032C0  0000              add [bx+si],al\r
+000032C2  3923              cmp [bp+di],sp\r
+000032C4  0C2B              or al,0x2b\r
+000032C6  2B2F              sub bp,[bx]\r
+000032C8  1818              sbb [bx+si],bl\r
+000032CA  1C14              sbb al,0x14\r
+000032CC  183C              sbb [si],bh\r
+000032CE  0A3C              or bh,[si]\r
+000032D0  0F                db 0x0F\r
+000032D1  1F                pop ds\r
+000032D2  2F                das\r
+000032D3  3F                aas\r
+000032D4  3E3814            cmp [ds:si],dl\r
+000032D7  3C38              cmp al,0x38\r
+000032D9  16                push ss\r
+000032DA  3F                aas\r
+000032DB  3D243F            cmp ax,0x3f24\r
+000032DE  3F                aas\r
+000032DF  3F                aas\r
+000032E0  0000              add [bx+si],al\r
+000032E2  0005              add [di],al\r
+000032E4  050508            add ax,0x805\r
+000032E7  0808              or [bx+si],cl\r
+000032E9  0B0B              or cx,[bp+di]\r
+000032EB  0B0E0E0E          or cx,[0xe0e]\r
+000032EF  1111              adc [bx+di],dx\r
+000032F1  1114              adc [si],dx\r
+000032F3  1414              adc al,0x14\r
+000032F5  1818              sbb [bx+si],bl\r
+000032F7  181C              sbb [si],bl\r
+000032F9  1C1C              sbb al,0x1c\r
+000032FB  2020              and [bx+si],ah\r
+000032FD  2024              and [si],ah\r
+000032FF  2424              and al,0x24\r
+00003301  2828              sub [bx+si],ch\r
+00003303  282D              sub [di],ch\r
+00003305  2D2D32            sub ax,0x322d\r
+00003308  3232              xor dh,[bp+si]\r
+0000330A  3838              cmp [bx+si],bh\r
+0000330C  383F              cmp [bx],bh\r
+0000330E  3F                aas\r
+0000330F  3F                aas\r
+00003310  0D0C0F            or ax,0xf0c\r
+00003313  0F10161114        umov [0x1411],dl\r
+00003318  1D1318            sbb ax,0x1813\r
+0000331B  2415              and al,0x15\r
+0000331D  1C2B              sbb al,0x2b\r
+0000331F  17                pop ss\r
+00003320  1F                pop ds\r
+00003321  3219              xor bl,[bx+di]\r
+00003323  2239              and bh,[bx+di]\r
+00003325  1A2A              sbb ch,[bp+si]\r
+00003327  3F                aas\r
+00003328  000F              add [bx],cl\r
+0000332A  0201              add al,[bx+di]\r
+0000332C  16                push ss\r
+0000332D  0402              add al,0x2\r
+0000332F  1D0603            sbb ax,0x306\r
+00003332  2408              and al,0x8\r
+00003334  042B              add al,0x2b\r
+00003336  0A05              or al,[di]\r
+00003338  320C              xor cl,[si]\r
+0000333A  06                push es\r
+0000333B  390E143F          cmp [0x3f14],cx\r
+0000333F  2812              sub [bp+si],dl\r
+00003341  06                push es\r
+00003342  07                pop es\r
+00003343  190C              sbb [si],cx\r
+00003345  0B21              or sp,[bx+di]\r
+00003347  110E2817          adc [0x1728],cx\r
+0000334B  1230              adc dh,[bx+si]\r
+0000334D  1C15              sbb al,0x15\r
+0000334F  37                aaa\r
+00003350  2219              and bl,[bx+di]\r
+00003352  3E27              ds daa\r
+00003354  1B3F              sbb di,[bx]\r
+00003356  3024              xor [si],ah\r
+00003358  0F0302            lsl ax,[bp+si]\r
+0000335B  16                push ss\r
+0000335C  06                push es\r
+0000335D  041D              add al,0x1d\r
+0000335F  0906240C          or [0xc24],ax\r
+00003363  082B              or [bp+di],ch\r
+00003365  0F                db 0x0F\r
+00003366  0A32              or dh,[bp+si]\r
+00003368  120C              adc cl,[si]\r
+0000336A  3915              cmp [di],dx\r
+0000336C  0E                push cs\r
+0000336D  3F                aas\r
+0000336E  1C14              sbb al,0x14\r
+00003370  0F0000            sldt [bx+si]\r
+00003373  16                push ss\r
+00003374  07                pop es\r
+00003375  001D              add [di],bl\r
+00003377  0F0024            verr [si]\r
+0000337A  17                pop ss\r
+0000337B  002B              add [bp+di],ch\r
+0000337D  1F                pop ds\r
+0000337E  0032              add [bp+si],dh\r
+00003380  27                daa\r
+00003381  0039              add [bx+di],bh\r
+00003383  2F                das\r
+00003384  003F              add [bx],bh\r
+00003386  37                aaa\r
+00003387  000F              add [bx],cl\r
+00003389  050316            add ax,0x1603\r
+0000338C  0B07              or ax,[bx]\r
+0000338E  1D110B            sbb ax,0xb11\r
+00003391  2417              and al,0x17\r
+00003393  0F2B1D            movntps [di],xmm3\r
+00003396  1332              adc si,[bp+si]\r
+00003398  2317              and dx,[bx]\r
+0000339A  3929              cmp [bx+di],bp\r
+0000339C  1B3F              sbb di,[bx]\r
+0000339E  35221C            xor ax,0x1c22\r
+000033A1  0E                push cs\r
+000033A2  0C21              or al,0x21\r
+000033A4  140E              adc al,0xe\r
+000033A6  261A10            sbb dl,[es:bx+si]\r
+000033A9  2B20              sub sp,[bx+si]\r
+000033AB  1230              adc dh,[bx+si]\r
+000033AD  261435            es adc al,0x35\r
+000033B0  2C16              sub al,0x16\r
+000033B2  3A32              cmp dh,[bp+si]\r
+000033B4  183F              sbb [bx],bh\r
+000033B6  381E0505          cmp [0x505],bl\r
+000033BA  06                push es\r
+000033BB  0A0A              or cl,[bp+si]\r
+000033BD  0D0F0F            or ax,0xf0f\r
+000033C0  1414              adc al,0x14\r
+000033C2  141B              adc al,0x1b\r
+000033C4  1919              sbb [bx+di],bx\r
+000033C6  221E1E29          and bl,[0x291e]\r
+000033CA  2323              and sp,[bp+di]\r
+000033CC  302C              xor [si],ch\r
+000033CE  2C3F              sub al,0x3f\r
+000033D0  03060505          add ax,[0x505]\r
+000033D4  0B09              or cx,[bx+di]\r
+000033D6  07                pop es\r
+000033D7  100D              adc [di],cl\r
+000033D9  0915              or [di],dx\r
+000033DB  110B              adc [bp+di],cx\r
+000033DD  1A15              sbb dl,[di]\r
+000033DF  0D1F19            or ax,0x191f\r
+000033E2  0F                db 0x0F\r
+000033E3  241D              and al,0x1d\r
+000033E5  1430              adc al,0x30\r
+000033E7  2606              es push es\r
+000033E9  06                push es\r
+000033EA  07                pop es\r
+000033EB  0D0D0F            or ax,0xf0d\r
+000033EE  1414              adc al,0x14\r
+000033F0  17                pop ss\r
+000033F1  1B1B              sbb bx,[bp+di]\r
+000033F3  1F                pop ds\r
+000033F4  2222              and ah,[bp+si]\r
+000033F6  27                daa\r
+000033F7  2929              sub [bx+di],bp\r
+000033F9  2F                das\r
+000033FA  3030              xor [bx+si],dh\r
+000033FC  37                aaa\r
+000033FD  3939              cmp [bx+di],di\r
+000033FF  3F                aas\r
+00003400  06                push es\r
+00003401  0F                db 0x0F\r
+00003402  040C              add al,0xc\r
+00003404  16                push ss\r
+00003405  0812              or [bp+si],dl\r
+00003407  1D0C18            sbb ax,0x180c\r
+0000340A  2410              and al,0x10\r
+0000340C  1E                push ds\r
+0000340D  2B14              sub dx,[si]\r
+0000340F  2432              and al,0x32\r
+00003411  182A              sbb [bp+si],ch\r
+00003413  391C              cmp [si],bx\r
+00003415  363F              ss aas\r
+00003417  230F              and cx,[bx]\r
+00003419  0A0A              or cl,[bp+si]\r
+0000341B  16                push ss\r
+0000341C  1010              adc [bx+si],dl\r
+0000341E  1D1515            sbb ax,0x1515\r
+00003421  241B              and al,0x1b\r
+00003423  1B2B              sbb bp,[bp+di]\r
+00003425  2020              and [bx+si],ah\r
+00003427  32262639          xor ah,[0x3926]\r
+0000342B  2B2B              sub bp,[bp+di]\r
+0000342D  3F                aas\r
+0000342E  36360F0F0616160C  pi2fw mm0,[ss:0x1616]\r
+00003436  1D1D12            sbb ax,0x121d\r
+00003439  2424              and al,0x24\r
+0000343B  182B              sbb [bp+di],ch\r
+0000343D  2B1E3232          sub bx,[0x3232]\r
+00003441  2439              and al,0x39\r
+00003443  392A              cmp [bp+si],bp\r
+00003445  3F                aas\r
+00003446  3F                aas\r
+00003447  360204            add al,[ss:si]\r
+0000344A  0E                push cs\r
+0000344B  06                push es\r
+0000344C  0C15              or al,0x15\r
+0000344E  0A14              or dl,[si]\r
+00003450  1C0E              sbb al,0xe\r
+00003452  1C23              sbb al,0x23\r
+00003454  1224              adc ah,[si]\r
+00003456  2A162C31          sub dl,[0x312c]\r
+0000345A  1A34              sbb dh,[si]\r
+0000345C  3824              cmp [si],ah\r
+0000345E  3F                aas\r
+0000345F  3F                aas\r
+00003460  1204              adc al,[si]\r
+00003462  0E                push cs\r
+00003463  1808              sbb [bx+si],cl\r
+00003465  151F0C            adc ax,0xc1f\r
+00003468  1C25              sbb al,0x25\r
+0000346A  1023              adc [bp+di],ah\r
+0000346C  2C14              sub al,0x14\r
+0000346E  2A32              sub dh,[bp+si]\r
+00003470  1831              sbb [bx+di],dh\r
+00003472  391C              cmp [si],bx\r
+00003474  383F              cmp [bx],bh\r
+00003476  263F              es aas\r
+00003478  0000              add [bx+si],al\r
+0000347A  0000              add [bx+si],al\r
+0000347C  0000              add [bx+si],al\r
+0000347E  0000              add [bx+si],al\r
+00003480  0000              add [bx+si],al\r
+00003482  0000              add [bx+si],al\r
+00003484  0000              add [bx+si],al\r
+00003486  0000              add [bx+si],al\r
+00003488  0000              add [bx+si],al\r
+0000348A  0000              add [bx+si],al\r
+0000348C  0035              add [di],dh\r
+0000348E  2C16              sub al,0x16\r
+00003490  0908              or [bx+si],cx\r
+00003492  0C10              or al,0x10\r
+00003494  0E                push cs\r
+00003495  10161514          adc [0x1415],dl\r
+00003499  1D1B18            sbb ax,0x181b\r
+0000349C  2322              and sp,[bp+si]\r
+0000349E  1C2A              sbb al,0x2a\r
+000034A0  2820              sub [bx+si],ah\r
+000034A2  302F              xor [bx],ch\r
+000034A4  2439              and al,0x39\r
+000034A6  382B              cmp [bp+di],ch\r
+000034A8  080C              or [si],cl\r
+000034AA  100E1016          adc [0x1610],cl\r
+000034AE  15141D            adc ax,0x1d14\r
+000034B1  1B18              sbb bx,[bx+si]\r
+000034B3  2322              and sp,[bp+si]\r
+000034B5  1C2A              sbb al,0x2a\r
+000034B7  2820              sub [bx+si],ah\r
+000034B9  302F              xor [bx],ch\r
+000034BB  2439              and al,0x39\r
+000034BD  382B              cmp [bp+di],ch\r
+000034BF  3F                aas\r
+000034C0  0D090B            or ax,0xb09\r
+000034C3  15100F            adc ax,0xf10\r
+000034C6  1B161224          sbb dx,[0x2412]\r
+000034CA  1D162A            sbb ax,0x2a16\r
+000034CD  2319              and bx,[bx+di]\r
+000034CF  332A              xor bp,[bp+si]\r
+000034D1  1D3930            sbb ax,0x3039\r
+000034D4  203F              and [bx],bh\r
+000034D6  3827              cmp [bx],ah\r
+000034D8  06                push es\r
+000034D9  0E                push cs\r
+000034DA  090C              or [si],cx\r
+000034DC  150E12            adc ax,0x120e\r
+000034DF  1B161821          sbb dx,[0x2118]\r
+000034E3  1C1E              sbb al,0x1e\r
+000034E5  27                daa\r
+000034E6  2424              and al,0x24\r
+000034E8  2E2A2A            sub ch,[cs:bp+si]\r
+000034EB  342F              xor al,0x2f\r
+000034ED  323B              xor bh,[bp+di]\r
+000034EF  350000            xor ax,0x0\r
+000034F2  0000              add [bx+si],al\r
+000034F4  0000              add [bx+si],al\r
+000034F6  0000              add [bx+si],al\r
+000034F8  0000              add [bx+si],al\r
+000034FA  0000              add [bx+si],al\r
+000034FC  0000              add [bx+si],al\r
+000034FE  0000              add [bx+si],al\r
+00003500  0000              add [bx+si],al\r
+00003502  0000              add [bx+si],al\r
+00003504  0000              add [bx+si],al\r
+00003506  0000              add [bx+si],al\r
+00003508  0000              add [bx+si],al\r
+0000350A  0000              add [bx+si],al\r
+0000350C  0000              add [bx+si],al\r
+0000350E  0000              add [bx+si],al\r
+00003510  0000              add [bx+si],al\r
+00003512  0000              add [bx+si],al\r
+00003514  0000              add [bx+si],al\r
+00003516  0000              add [bx+si],al\r
+00003518  0000              add [bx+si],al\r
+0000351A  0000              add [bx+si],al\r
+0000351C  0000              add [bx+si],al\r
+0000351E  0000              add [bx+si],al\r
+00003520  0000              add [bx+si],al\r
+00003522  0000              add [bx+si],al\r
+00003524  0000              add [bx+si],al\r
+00003526  0000              add [bx+si],al\r
+00003528  0000              add [bx+si],al\r
+0000352A  0000              add [bx+si],al\r
+0000352C  0000              add [bx+si],al\r
+0000352E  0000              add [bx+si],al\r
+00003530  0000              add [bx+si],al\r
+00003532  0000              add [bx+si],al\r
+00003534  0000              add [bx+si],al\r
+00003536  0000              add [bx+si],al\r
+00003538  0000              add [bx+si],al\r
+0000353A  0000              add [bx+si],al\r
+0000353C  0000              add [bx+si],al\r
+0000353E  0000              add [bx+si],al\r
+00003540  0000              add [bx+si],al\r
+00003542  0000              add [bx+si],al\r
+00003544  0000              add [bx+si],al\r
+00003546  0000              add [bx+si],al\r
+00003548  0000              add [bx+si],al\r
+0000354A  0000              add [bx+si],al\r
+0000354C  0000              add [bx+si],al\r
+0000354E  0000              add [bx+si],al\r
+00003550  0000              add [bx+si],al\r
+00003552  0000              add [bx+si],al\r
+00003554  0000              add [bx+si],al\r
+00003556  0000              add [bx+si],al\r
+00003558  0000              add [bx+si],al\r
+0000355A  0000              add [bx+si],al\r
+0000355C  0000              add [bx+si],al\r
+0000355E  0000              add [bx+si],al\r
+00003560  0000              add [bx+si],al\r
+00003562  0000              add [bx+si],al\r
+00003564  0000              add [bx+si],al\r
+00003566  0000              add [bx+si],al\r
+00003568  0000              add [bx+si],al\r
+0000356A  0000              add [bx+si],al\r
+0000356C  0000              add [bx+si],al\r
+0000356E  0000              add [bx+si],al\r
+00003570  0000              add [bx+si],al\r
+00003572  0000              add [bx+si],al\r
+00003574  0000              add [bx+si],al\r
+00003576  0000              add [bx+si],al\r
+00003578  0000              add [bx+si],al\r
+0000357A  0000              add [bx+si],al\r
+0000357C  0000              add [bx+si],al\r
+0000357E  0000              add [bx+si],al\r
+00003580  0000              add [bx+si],al\r
+00003582  0000              add [bx+si],al\r
+00003584  0000              add [bx+si],al\r
+00003586  0000              add [bx+si],al\r
+00003588  0000              add [bx+si],al\r
+0000358A  0000              add [bx+si],al\r
+0000358C  0000              add [bx+si],al\r
+0000358E  0000              add [bx+si],al\r
+00003590  0000              add [bx+si],al\r
+00003592  0000              add [bx+si],al\r
+00003594  0000              add [bx+si],al\r
+00003596  0000              add [bx+si],al\r
+00003598  0000              add [bx+si],al\r
+0000359A  0000              add [bx+si],al\r
+0000359C  0000              add [bx+si],al\r
+0000359E  0000              add [bx+si],al\r
+000035A0  0000              add [bx+si],al\r
+000035A2  0000              add [bx+si],al\r
+000035A4  0000              add [bx+si],al\r
+000035A6  0000              add [bx+si],al\r
+000035A8  0000              add [bx+si],al\r
+000035AA  0000              add [bx+si],al\r
+000035AC  0000              add [bx+si],al\r
+000035AE  0000              add [bx+si],al\r
+000035B0  50                push ax\r
+000035B1  B80000            mov ax,0x0\r
+000035B4  0300              add ax,[bx+si]\r
+000035B6  BB0000            mov bx,0x0\r
+000035B9  1000              adc [bx+si],al\r
+000035BB  E80CD5            call 0xaca\r
+000035BE  FF                db 0xFF\r
+000035BF  FF58C3            call far [bx+si-0x3d]\r
+000035C2  50                push ax\r
+000035C3  53                push bx\r
+000035C4  B80000            mov ax,0x0\r
+000035C7  1300              adc ax,[bx+si]\r
+000035C9  BB0000            mov bx,0x0\r
+000035CC  1000              adc [bx+si],al\r
+000035CE  E8F9D4            call 0xaca\r
+000035D1  FF                db 0xFF\r
+000035D2  FF                db 0xFF\r
+000035D3  BEB032            mov si,0x32b0\r
+000035D6  0100              add [bx+si],ax\r
+000035D8  E86300            call 0x363e\r
+000035DB  0000              add [bx+si],al\r
+000035DD  5B                pop bx\r
+000035DE  58                pop ax\r
+000035DF  C3                ret\r
+000035E0  6650              push eax\r
+000035E2  6653              push ebx\r
+000035E4  6651              push ecx\r
+000035E6  57                push di\r
+000035E7  BF0000            mov di,0x0\r
+000035EA  0A00              or al,[bx+si]\r
+000035EC  6601DF            add edi,ebx\r
+000035EF  6689CB            mov ebx,ecx\r
+000035F2  66C1E108          shl ecx,0x8\r
+000035F6  66C1E306          shl ebx,0x6\r
+000035FA  6601D9            add ecx,ebx\r
+000035FD  6601CF            add edi,ecx\r
+00003600  AA                stosb\r
+00003601  5F                pop di\r
+00003602  6659              pop ecx\r
+00003604  665B              pop ebx\r
+00003606  6658              pop eax\r
+00003608  C3                ret\r
+00003609  60                pusha\r
+0000360A  664A              dec edx\r
+0000360C  6651              push ecx\r
+0000360E  6650              push eax\r
+00003610  6649              dec ecx\r
+00003612  6650              push eax\r
+00003614  6653              push ebx\r
+00003616  6651              push ecx\r
+00003618  6689D9            mov ecx,ebx\r
+0000361B  6689C3            mov ebx,eax\r
+0000361E  AC                lodsb\r
+0000361F  E8BCFF            call 0x35de\r
+00003622  FF                db 0xFF\r
+00003623  FF6659            jmp near [bp+0x59]\r
+00003626  665B              pop ebx\r
+00003628  6658              pop eax\r
+0000362A  6640              inc eax\r
+0000362C  6683F900          cmp ecx,byte +0x0\r
+00003630  75DE              jnz 0x3610\r
+00003632  6658              pop eax\r
+00003634  6659              pop ecx\r
+00003636  6643              inc ebx\r
+00003638  6683FA00          cmp edx,byte +0x0\r
+0000363C  75CC              jnz 0x360a\r
+0000363E  61                popa\r
+0000363F  C3                ret\r
+00003640  6650              push eax\r
+00003642  6651              push ecx\r
+00003644  6652              push edx\r
+00003646  6631C9            xor ecx,ecx\r
+00003649  66BAC80388C8      mov edx,0xc88803c8\r
+0000364F  EE                out dx,al\r
+00003650  6642              inc edx\r
+00003652  8A06EE46          mov al,[0x46ee]\r
+00003656  8A06EE46          mov al,[0x46ee]\r
+0000365A  8A06EE46          mov al,[0x46ee]\r
+0000365E  6641              inc ecx\r
+00003660  6681F900017CE2    cmp ecx,0xe27c0100\r
+00003667  665A              pop edx\r
+00003669  6659              pop ecx\r
+0000366B  6658              pop eax\r
+0000366D  C3                ret\r
+0000366E  0A00              or al,[bx+si]\r
+00003670  0A00              or al,[bx+si]\r
+00003672  0A00              or al,[bx+si]\r
+00003674  0A00              or al,[bx+si]\r
+00003676  D400              aam 0x0\r
+00003678  D400              aam 0x0\r
+0000367A  D400              aam 0x0\r
+0000367C  D400              aam 0x0\r
+0000367E  0B00              or ax,[bx+si]\r
+00003680  0B00              or ax,[bx+si]\r
+00003682  0B00              or ax,[bx+si]\r
+00003684  0B00              or ax,[bx+si]\r
+00003686  D6                salc\r
+00003687  00D6              add dh,dl\r
+00003689  00D6              add dh,dl\r
+0000368B  00D6              add dh,dl\r
+0000368D  000C              add [si],cl\r
+0000368F  000C              add [si],cl\r
+00003691  000C              add [si],cl\r
+00003693  000C              add [si],cl\r
+00003695  00D8              add al,bl\r
+00003697  00D8              add al,bl\r
+00003699  00D8              add al,bl\r
+0000369B  00D8              add al,bl\r
+0000369D  00870083          add [bx+0x8300],al\r
+000036A1  00810082          add [bx+di+0x8200],al\r
+000036A5  008F008B          add [bx+0x8b00],cl\r
+000036A9  0089008A          add [bx+di+0x8a00],cl\r
+000036AD  0000              add [bx+si],al\r
+000036AF  0002              add [bp+si],al\r
+000036B1  0004              add [si],al\r
+000036B3  000600C0          add [0xc000],al\r
+000036B7  00C4              add ah,al\r
+000036B9  00C8              add al,cl\r
+000036BB  00CC              add ah,cl\r
+000036BD  0001              add [bx+di],al\r
+000036BF  0003              add [bp+di],al\r
+000036C1  0005              add [di],al\r
+000036C3  0007              add [bx],al\r
+000036C5  00C2              add dl,al\r
+000036C7  00C6              add dh,al\r
+000036C9  00CA              add dl,cl\r
+000036CB  00CE              add dh,cl\r
+000036CD  005052            add [bx+si+0x52],dl\r
+000036D0  56                push si\r
+000036D1  FA                cli\r
+000036D2  08FF              or bh,bh\r
+000036D4  7407              jz 0x36dd\r
+000036D6  88DF              mov bh,bl\r
+000036D8  80C748            add bh,0x48\r
+000036DB  EB05              jmp short 0x36e2\r
+000036DD  88DF              mov bh,bl\r
+000036DF  80C744            add bh,0x44\r
+000036E2  4E                dec si\r
+000036E3  0FB6C3            movzx ax,bl\r
+000036E6  668B94006E        mov edx,[si+0x6e00]\r
+000036EB  360100            add [ss:bx+si],ax\r
+000036EE  88D8              mov al,bl\r
+000036F0  0C04              or al,0x4\r
+000036F2  EE                out dx,al\r
+000036F3  0FB6C3            movzx ax,bl\r
+000036F6  668B94008E        mov edx,[si+0x8e00]\r
+000036FB  360100            add [ss:bx+si],ax\r
+000036FE  B000              mov al,0x0\r
+00003700  EE                out dx,al\r
+00003701  0FB6C3            movzx ax,bl\r
+00003704  668B94007E        mov edx,[si+0x7e00]\r
+00003709  360100            add [ss:bx+si],ax\r
+0000370C  88F8              mov al,bh\r
+0000370E  EE                out dx,al\r
+0000370F  0FB6C3            movzx ax,bl\r
+00003712  668B9400AE        mov edx,[si+0xae00]\r
+00003717  360100            add [ss:bx+si],ax\r
+0000371A  88C8              mov al,cl\r
+0000371C  EE                out dx,al\r
+0000371D  88E8              mov al,ch\r
+0000371F  EE                out dx,al\r
+00003720  0FB6C3            movzx ax,bl\r
+00003723  668B94009E        mov edx,[si+0x9e00]\r
+00003728  360100            add [ss:bx+si],ax\r
+0000372B  89C8              mov ax,cx\r
+0000372D  C1E810            shr ax,0x10\r
+00003730  EE                out dx,al\r
+00003731  0FB6C3            movzx ax,bl\r
+00003734  668B9400BE        mov edx,[si+0xbe00]\r
+00003739  360100            add [ss:bx+si],ax\r
+0000373C  89F0              mov ax,si\r
+0000373E  EE                out dx,al\r
+0000373F  88E0              mov al,ah\r
+00003741  EE                out dx,al\r
+00003742  0FB6C3            movzx ax,bl\r
+00003745  668B94006E        mov edx,[si+0x6e00]\r
+0000374A  360100            add [ss:bx+si],ax\r
+0000374D  88D8              mov al,bl\r
+0000374F  EE                out dx,al\r
+00003750  FB                sti\r
+00003751  5E                pop si\r
+00003752  5A                pop dx\r
+00003753  58                pop ax\r
+00003754  C3                ret\r
+00003755  0000              add [bx+si],al\r
+00003757  0000              add [bx+si],al\r
+00003759  0000              add [bx+si],al\r
+0000375B  0000              add [bx+si],al\r
+0000375D  0000              add [bx+si],al\r
+0000375F  0000              add [bx+si],al\r
+00003761  0000              add [bx+si],al\r
+00003763  0000              add [bx+si],al\r
+00003765  0000              add [bx+si],al\r
+00003767  4E                dec si\r
+00003768  6F                outsw\r
+00003769  7420              jz 0x378b\r
+0000376B  696E737461        imul bp,[bp+0x73],word 0x6174\r
+00003770  6C                insb\r
+00003771  6C                insb\r
+00003772  65642020          and [fs:bx+si],ah\r
+00003776  0033              add [bp+di],dh\r
+00003778  363020            xor [ss:bx+si],ah\r
+0000377B  6B622C20          imul sp,[bp+si+0x2c],byte +0x20\r
+0000377F  352E32            xor ax,0x322e\r
+00003782  352220            xor ax,0x2022\r
+00003785  2000              and [bx+si],al\r
+00003787  312E3220          xor [0x2032],bp\r
+0000378B  6D                insw\r
+0000378C  622C              bound bp,[si]\r
+0000378E  2035              and [di],dh\r
+00003790  2E3235            xor dh,[cs:di]\r
+00003793  2220              and ah,[bx+si]\r
+00003795  2000              and [bx+si],al\r
+00003797  37                aaa\r
+00003798  3230              xor dh,[bx+si]\r
+0000379A  206B62            and [bp+di+0x62],ch\r
+0000379D  2C20              sub al,0x20\r
+0000379F  332E3522          xor bp,[0x2235]\r
+000037A3  2020              and [bx+si],ah\r
+000037A5  2000              and [bx+si],al\r
+000037A7  312E3434          xor [0x3434],bp\r
+000037AB  206D62            and [di+0x62],ch\r
+000037AE  2C20              sub al,0x20\r
+000037B0  332E3522          xor bp,[0x2235]\r
+000037B4  2020              and [bx+si],ah\r
+000037B6  0032              add [bp+si],dh\r
+000037B8  2E3838            cmp [cs:bx+si],bh\r
+000037BB  206D62            and [di+0x62],ch\r
+000037BE  2C20              sub al,0x20\r
+000037C0  332E3522          xor bp,[0x2235]\r
+000037C4  2020              and [bx+si],ah\r
+000037C6  000D              add [di],cl\r
+000037C8  0A20              or ah,[bx+si]\r
+000037CA  2020              and [bx+si],ah\r
+000037CC  6664303A          o32 xor [fs:bp+si],bh\r
+000037D0  2020              and [bx+si],ah\r
+000037D2  2000              and [bx+si],al\r
+000037D4  0000              add [bx+si],al\r
+000037D6  0000              add [bx+si],al\r
+000037D8  0000              add [bx+si],al\r
+000037DA  0D0A20            or ax,0x200a\r
+000037DD  2020              and [bx+si],ah\r
+000037DF  6664313A          xor [fs:bp+si],edi\r
+000037E3  2020              and [bx+si],ah\r
+000037E5  2000              and [bx+si],al\r
+000037E7  0000              add [bx+si],al\r
+000037E9  0000              add [bx+si],al\r
+000037EB  0000              add [bx+si],al\r
+000037ED  C3                ret\r
+000037EE  C3                ret\r
+000037EF  C3                ret\r
+000037F0  C3                ret\r
+000037F1  C3                ret\r
+000037F2  C3                ret\r
+000037F3  C3                ret\r
+000037F4  C3                ret\r
+000037F5  C3                ret\r
+000037F6  C3                ret\r
+000037F7  C3                ret\r
+000037F8  C3                ret\r
+000037F9  C3                ret\r
+000037FA  C3                ret\r
+000037FB  50                push ax\r
+000037FC  51                push cx\r
+000037FD  57                push di\r
+000037FE  B010              mov al,0x10\r
+00003800  E670              out 0x70,al\r
+00003802  E471              in al,0x71\r
+00003804  50                push ax\r
+00003805  C0E804            shr al,0x4\r
+00003808  A2D437            mov [0x37d4],al\r
+0000380B  0100              add [bx+si],ax\r
+0000380D  58                pop ax\r
+0000380E  240F              and al,0xf\r
+00003810  A2E737            mov [0x37e7],al\r
+00003813  0100              add [bx+si],ax\r
+00003815  BEC737            mov si,0x37c7\r
+00003818  0100              add [bx+si],ax\r
+0000381A  B307              mov bl,0x7\r
+0000381C  E88ECF            call 0x7ad\r
+0000381F  FF                db 0xFF\r
+00003820  FF0F              dec word [bx]\r
+00003822  B635              mov dh,0x35\r
+00003824  D437              aam 0x37\r
+00003826  0100              add [bx+si],ax\r
+00003828  C1E604            shl si,0x4\r
+0000382B  81C66737          add si,0x3767\r
+0000382F  0100              add [bx+si],ax\r
+00003831  B307              mov bl,0x7\r
+00003833  E877CF            call 0x7ad\r
+00003836  FF                db 0xFF\r
+00003837  FF                db 0xFF\r
+00003838  BEDA37            mov si,0x37da\r
+0000383B  0100              add [bx+si],ax\r
+0000383D  B307              mov bl,0x7\r
+0000383F  E86BCF            call 0x7ad\r
+00003842  FF                db 0xFF\r
+00003843  FF0F              dec word [bx]\r
+00003845  B635              mov dh,0x35\r
+00003847  E737              out 0x37,ax\r
+00003849  0100              add [bx+si],ax\r
+0000384B  C1E604            shl si,0x4\r
+0000384E  81C66737          add si,0x3767\r
+00003852  0100              add [bx+si],ax\r
+00003854  B307              mov bl,0x7\r
+00003856  E854CF            call 0x7ad\r
+00003859  FF                db 0xFF\r
+0000385A  FF                db 0xFF\r
+0000385B  BECAEF            mov si,0xefca\r
+0000385E  0F                db 0x0F\r
+0000385F  00BFD537          add [bx+0x37d5],bh\r
+00003863  0100              add [bx+si],ax\r
+00003865  B90500            mov cx,0x5\r
+00003868  0000              add [bx+si],al\r
+0000386A  F3A4              rep movsb\r
+0000386C  83C605            add si,byte +0x5\r
+0000386F  BFE837            mov di,0x37e8\r
+00003872  0100              add [bx+si],ax\r
+00003874  B90600            mov cx,0x6\r
+00003877  0000              add [bx+si],al\r
+00003879  F3A4              rep movsb\r
+0000387B  B126              mov cl,0x26\r
+0000387D  BF9C38            mov di,0x389c\r
+00003880  0100              add [bx+si],ax\r
+00003882  E844C9            call 0x1c9\r
+00003885  FF                db 0xFF\r
+00003886  FFB106E8          push word [bx+di+0xe806]\r
+0000388A  52                push dx\r
+0000388B  D3FF              sar di,cl\r
+0000388D  FF                db 0xFF\r
+0000388E  E8D200            call 0x3963\r
+00003891  0000              add [bx+si],al\r
+00003893  E88801            call 0x3a1e\r
+00003896  0000              add [bx+si],al\r
+00003898  5F                pop di\r
+00003899  59                pop cx\r
+0000389A  58                pop ax\r
+0000389B  C3                ret\r
+0000389C  60                pusha\r
+0000389D  0FA8              push gs\r
+0000389F  0FA0              push fs\r
+000038A1  1E                push ds\r
+000038A2  06                push es\r
+000038A3  56                push si\r
+000038A4  66830D55          or dword [di],byte +0x55\r
+000038A8  37                aaa\r
+000038A9  0100              add [bx+si],ax\r
+000038AB  01B020E6          add [bx+si+0xe620],si\r
+000038AF  205E07            and [bp+0x7],bl\r
+000038B2  1F                pop ds\r
+000038B3  0FA1              pop fs\r
+000038B5  0FA9              pop gs\r
+000038B7  61                popa\r
+000038B8  CF                iret\r
+000038B9  50                push ax\r
+000038BA  51                push cx\r
+000038BB  B99600            mov cx,0x96\r
+000038BE  0000              add [bx+si],al\r
+000038C0  E8D0F9            call 0x3293\r
+000038C3  FF                db 0xFF\r
+000038C4  FF833900          inc word [bp+di+0x39]\r
+000038C8  740F              jz 0x38d9\r
+000038CA  66A15537          mov eax,[0x3755]\r
+000038CE  0100              add [bx+si],ax\r
+000038D0  6609C0            or eax,eax\r
+000038D3  74F0              jz 0x38c5\r
+000038D5  59                pop cx\r
+000038D6  58                pop ax\r
+000038D7  F8                clc\r
+000038D8  C3                ret\r
+000038D9  59                pop cx\r
+000038DA  58                pop ax\r
+000038DB  F9                stc\r
+000038DC  C3                ret\r
+000038DD  50                push ax\r
+000038DE  52                push dx\r
+000038DF  66BAF203B000      mov edx,0xb003f2\r
+000038E5  EE                out dx,al\r
+000038E6  C60557            mov byte [di],0x57\r
+000038E9  37                aaa\r
+000038EA  0100              add [bx+si],ax\r
+000038EC  005A58            add [bp+si+0x58],bl\r
+000038EF  C3                ret\r
+000038F0  50                push ax\r
+000038F1  52                push dx\r
+000038F2  66BAF203B01C      mov edx,0x1cb003f2\r
+000038F8  EE                out dx,al\r
+000038F9  B91400            mov cx,0x14\r
+000038FC  0000              add [bx+si],al\r
+000038FE  E882F9            call 0x3283\r
+00003901  FF                db 0xFF\r
+00003902  FFC6              inc si\r
+00003904  055737            add ax,0x3757\r
+00003907  0100              add [bx+si],ax\r
+00003909  015A58            add [bp+si+0x58],bx\r
+0000390C  C3                ret\r
+0000390D  52                push dx\r
+0000390E  51                push cx\r
+0000390F  50                push ax\r
+00003910  B99600            mov cx,0x96\r
+00003913  0000              add [bx+si],al\r
+00003915  E87BF9            call 0x3293\r
+00003918  FF                db 0xFF\r
+00003919  FF833900          inc word [bp+di+0x39]\r
+0000391D  7415              jz 0x3934\r
+0000391F  66BAF403EC24      mov edx,0x24ec03f4\r
+00003925  C03C80            sar byte [si],0x80\r
+00003928  75F0              jnz 0x391a\r
+0000392A  58                pop ax\r
+0000392B  59                pop cx\r
+0000392C  66BAF503EE5A      mov edx,0x5aee03f5\r
+00003932  F8                clc\r
+00003933  C3                ret\r
+00003934  58                pop ax\r
+00003935  59                pop cx\r
+00003936  5A                pop dx\r
+00003937  F9                stc\r
+00003938  C3                ret\r
+00003939  52                push dx\r
+0000393A  51                push cx\r
+0000393B  50                push ax\r
+0000393C  B99600            mov cx,0x96\r
+0000393F  0000              add [bx+si],al\r
+00003941  E84FF9            call 0x3293\r
+00003944  FF                db 0xFF\r
+00003945  FF833900          inc word [bp+di+0x39]\r
+00003949  7415              jz 0x3960\r
+0000394B  66BAF403EC24      mov edx,0x24ec03f4\r
+00003951  C03CC0            sar byte [si],0xc0\r
+00003954  75F0              jnz 0x3946\r
+00003956  58                pop ax\r
+00003957  59                pop cx\r
+00003958  66BAF503EC5A      mov edx,0x5aec03f5\r
+0000395E  F8                clc\r
+0000395F  C3                ret\r
+00003960  58                pop ax\r
+00003961  59                pop cx\r
+00003962  5A                pop dx\r
+00003963  F9                stc\r
+00003964  C3                ret\r
+00003965  66BAF203B008      mov edx,0x8b003f2\r
+0000396B  EE                out dx,al\r
+0000396C  B90500            mov cx,0x5\r
+0000396F  0000              add [bx+si],al\r
+00003971  E80FF9            call 0x3283\r
+00003974  FF                db 0xFF\r
+00003975  FF66BA            jmp near [bp-0x46]\r
+00003978  F703B000          test word [bp+di],0xb0\r
+0000397C  EE                out dx,al\r
+0000397D  66BAF2030C0C      mov edx,0xc0c03f2\r
+00003983  EE                out dx,al\r
+00003984  66C70555370100    mov dword [di],0x13755\r
+0000398B  0000              add [bx+si],al\r
+0000398D  E827FF            call 0x38b7\r
+00003990  FF                db 0xFF\r
+00003991  FF722E            push word [bp+si+0x2e]\r
+00003994  66B90400B008      mov ecx,0x8b00004\r
+0000399A  E86EFF            call 0x390b\r
+0000399D  FF                db 0xFF\r
+0000399E  FF                db 0xFF\r
+0000399F  E895FF            call 0x3937\r
+000039A2  FF                db 0xFF\r
+000039A3  FF                db 0xFF\r
+000039A4  E890FF            call 0x3937\r
+000039A7  FF                db 0xFF\r
+000039A8  FFE2              jmp dx\r
+000039AA  ED                in ax,dx\r
+000039AB  B003              mov al,0x3\r
+000039AD  E85BFF            call 0x390b\r
+000039B0  FF                db 0xFF\r
+000039B1  FFB0DFE8          push word [bx+si+0xe8df]\r
+000039B5  54                push sp\r
+000039B6  FF                db 0xFF\r
+000039B7  FF                db 0xFF\r
+000039B8  FFB002E8          push word [bx+si+0xe802]\r
+000039BC  4D                dec bp\r
+000039BD  FF                db 0xFF\r
+000039BE  FF                db 0xFF\r
+000039BF  FF                db 0xFF\r
+000039C0  F8                clc\r
+000039C1  C3                ret\r
+000039C2  F9                stc\r
+000039C3  C3                ret\r
+000039C4  60                pusha\r
+000039C5  A06237            mov al,[0x3762]\r
+000039C8  0100              add [bx+si],ax\r
+000039CA  3805              cmp [di],al\r
+000039CC  5A                pop dx\r
+000039CD  37                aaa\r
+000039CE  0100              add [bx+si],ax\r
+000039D0  7448              jz 0x3a1a\r
+000039D2  B00F              mov al,0xf\r
+000039D4  E834FF            call 0x390b\r
+000039D7  FF                db 0xFF\r
+000039D8  FFA05937          jmp near [bx+si+0x3759]\r
+000039DC  0100              add [bx+si],ax\r
+000039DE  E82AFF            call 0x390b\r
+000039E1  FF                db 0xFF\r
+000039E2  FFA05A37          jmp near [bx+si+0x375a]\r
+000039E6  0100              add [bx+si],ax\r
+000039E8  E820FF            call 0x390b\r
+000039EB  FF                db 0xFF\r
+000039EC  FF66C7            jmp near [bp-0x39]\r
+000039EF  055537            add ax,0x3755\r
+000039F2  0100              add [bx+si],ax\r
+000039F4  0000              add [bx+si],al\r
+000039F6  E8BEFE            call 0x38b7\r
+000039F9  FF                db 0xFF\r
+000039FA  FF7220            push word [bp+si+0x20]\r
+000039FD  B008              mov al,0x8\r
+000039FF  E809FF            call 0x390b\r
+00003A02  FF                db 0xFF\r
+00003A03  FF                db 0xFF\r
+00003A04  E830FF            call 0x3937\r
+00003A07  FF                db 0xFF\r
+00003A08  FF88C4E8          dec word [bx+si+0xe8c4]\r
+00003A0C  29FF              sub di,di\r
+00003A0E  FF                db 0xFF\r
+00003A0F  FFF6              push si\r
+00003A11  C420              les sp,[bx+si]\r
+00003A13  7408              jz 0x3a1d\r
+00003A15  F6C480            test ah,0x80\r
+00003A18  7503              jnz 0x3a1d\r
+00003A1A  61                popa\r
+00003A1B  F8                clc\r
+00003A1C  C3                ret\r
+00003A1D  61                popa\r
+00003A1E  F9                stc\r
+00003A1F  C3                ret\r
+00003A20  F60557            test byte [di],0x57\r
+00003A23  37                aaa\r
+00003A24  0100              add [bx+si],ax\r
+00003A26  017505            add [di+0x5],si\r
+00003A29  E8C2FE            call 0x38ee\r
+00003A2C  FF                db 0xFF\r
+00003A2D  FFB007E8          push word [bx+si+0xe807]\r
+00003A31  D8FE              fdivr st6\r
+00003A33  FF                db 0xFF\r
+00003A34  FFB000E8          push word [bx+si+0xe800]\r
+00003A38  D1FE              sar si,1\r
+00003A3A  FF                db 0xFF\r
+00003A3B  FF66C7            jmp near [bp-0x39]\r
+00003A3E  055537            add ax,0x3755\r
+00003A41  0100              add [bx+si],ax\r
+00003A43  0000              add [bx+si],al\r
+00003A45  E86FFE            call 0x38b7\r
+00003A48  FF                db 0xFF\r
+00003A49  FF7226            push word [bp+si+0x26]\r
+00003A4C  B008              mov al,0x8\r
+00003A4E  E8BAFE            call 0x390b\r
+00003A51  FF                db 0xFF\r
+00003A52  FF                db 0xFF\r
+00003A53  E8E1FE            call 0x3937\r
+00003A56  FF                db 0xFF\r
+00003A57  FF88C4E8          dec word [bx+si+0xe8c4]\r
+00003A5B  DA                db 0xDA\r
+00003A5C  FE                db 0xFE\r
+00003A5D  FF                db 0xFF\r
+00003A5E  FFF6              push si\r
+00003A60  C420              les sp,[bx+si]\r
+00003A62  740E              jz 0x3a72\r
+00003A64  F6C410            test ah,0x10\r
+00003A67  7509              jnz 0x3a72\r
+00003A69  C60562            mov byte [di],0x62\r
+00003A6C  37                aaa\r
+00003A6D  0100              add [bx+si],ax\r
+00003A6F  00F8              add al,bh\r
+00003A71  C3                ret\r
+00003A72  F9                stc\r
+00003A73  C3                ret\r
+00003A74  E80700            call 0x3a7e\r
+00003A77  0000              add [bx+si],al\r
+00003A79  C3                ret\r
+00003A7A  E80100            call 0x3a7e\r
+00003A7D  0000              add [bx+si],al\r
+00003A7F  C3                ret\r
+00003A80  60                pusha\r
+00003A81  80E601            and dh,0x1\r
+00003A84  8835              mov [di],dh\r
+00003A86  58                pop ax\r
+00003A87  37                aaa\r
+00003A88  0100              add [bx+si],ax\r
+00003A8A  C0E602            shl dh,0x2\r
+00003A8D  8835              mov [di],dh\r
+00003A8F  59                pop cx\r
+00003A90  37                aaa\r
+00003A91  0100              add [bx+si],ax\r
+00003A93  C6055C            mov byte [di],0x5c\r
+00003A96  37                aaa\r
+00003A97  0100              add [bx+si],ax\r
+00003A99  0480              add al,0x80\r
+00003A9B  FD                std\r
+00003A9C  51                push cx\r
+00003A9D  0F834501          jnc near 0x3be6\r
+00003AA1  0000              add [bx+si],al\r
+00003AA3  882D              mov [di],ch\r
+00003AA5  5A                pop dx\r
+00003AA6  37                aaa\r
+00003AA7  0100              add [bx+si],ax\r
+00003AA9  80F913            cmp cl,0x13\r
+00003AAC  0F833601          jnc near 0x3be6\r
+00003AB0  0000              add [bx+si],al\r
+00003AB2  880D              mov [di],cl\r
+00003AB4  5B                pop bx\r
+00003AB5  37                aaa\r
+00003AB6  0100              add [bx+si],ax\r
+00003AB8  F60557            test byte [di],0x57\r
+00003ABB  37                aaa\r
+00003ABC  0100              add [bx+si],ax\r
+00003ABE  017505            add [di+0x5],si\r
+00003AC1  E82AFE            call 0x38ee\r
+00003AC4  FF                db 0xFF\r
+00003AC5  FF66BA            jmp near [bp-0x46]\r
+00003AC8  F703B000          test word [bp+di],0xb0\r
+00003ACC  EE                out dx,al\r
+00003ACD  C6055C            mov byte [di],0x5c\r
+00003AD0  37                aaa\r
+00003AD1  0100              add [bx+si],ax\r
+00003AD3  8031C9            xor byte [bx+di],0xc9\r
+00003AD6  66B90300E8E5      mov ecx,0xe5e80003\r
+00003ADC  FE                db 0xFE\r
+00003ADD  FF                db 0xFF\r
+00003ADE  FF7307            push word [bp+di+0x7]\r
+00003AE1  E2F7              loop 0x3ada\r
+00003AE3  E90001            jmp 0x3be6\r
+00003AE6  0000              add [bx+si],al\r
+00003AE8  66BAF403ECA8      mov edx,0xa8ec03f4\r
+00003AEE  200F              and [bx],cl\r
+00003AF0  85F3              test bx,si\r
+00003AF2  0000              add [bx+si],al\r
+00003AF4  0080FB00          add [bx+si+0xfb],al\r
+00003AF8  741C              jz 0x3b16\r
+00003AFA  B302              mov bl,0x2\r
+00003AFC  BE0002            mov si,0x200\r
+00003AFF  0000              add [bx+si],al\r
+00003B01  B90000            mov cx,0x0\r
+00003B04  0800              or [bx+si],al\r
+00003B06  B701              mov bh,0x1\r
+00003B08  E8C1FB            call 0x36cc\r
+00003B0B  FF                db 0xFF\r
+00003B0C  FFB0C5E8          push word [bx+si+0xe8c5]\r
+00003B10  F9                stc\r
+00003B11  FD                std\r
+00003B12  FF                db 0xFF\r
+00003B13  FF                db 0xFF\r
+00003B14  EB1A              jmp short 0x3b30\r
+00003B16  B302              mov bl,0x2\r
+00003B18  BE0002            mov si,0x200\r
+00003B1B  0000              add [bx+si],al\r
+00003B1D  B90000            mov cx,0x0\r
+00003B20  0800              or [bx+si],al\r
+00003B22  B700              mov bh,0x0\r
+00003B24  E8A5FB            call 0x36cc\r
+00003B27  FF                db 0xFF\r
+00003B28  FFB0E6E8          push word [bx+si+0xe8e6]\r
+00003B2C  DD                db 0xDD\r
+00003B2D  FD                std\r
+00003B2E  FF                db 0xFF\r
+00003B2F  FFA05937          jmp near [bx+si+0x3759]\r
+00003B33  0100              add [bx+si],ax\r
+00003B35  E8D3FD            call 0x390b\r
+00003B38  FF                db 0xFF\r
+00003B39  FFA05A37          jmp near [bx+si+0x375a]\r
+00003B3D  0100              add [bx+si],ax\r
+00003B3F  E8C9FD            call 0x390b\r
+00003B42  FF                db 0xFF\r
+00003B43  FFA05837          jmp near [bx+si+0x3758]\r
+00003B47  0100              add [bx+si],ax\r
+00003B49  E8BFFD            call 0x390b\r
+00003B4C  FF                db 0xFF\r
+00003B4D  FFA05B37          jmp near [bx+si+0x375b]\r
+00003B51  0100              add [bx+si],ax\r
+00003B53  E8B5FD            call 0x390b\r
+00003B56  FF                db 0xFF\r
+00003B57  FFB002E8          push word [bx+si+0xe802]\r
+00003B5B  AE                scasb\r
+00003B5C  FD                std\r
+00003B5D  FF                db 0xFF\r
+00003B5E  FFB012E8          push word [bx+si+0xe812]\r
+00003B62  A7                cmpsw\r
+00003B63  FD                std\r
+00003B64  FF                db 0xFF\r
+00003B65  FFB01BE8          push word [bx+si+0xe81b]\r
+00003B69  A0FDFF            mov al,[0xfffd]\r
+00003B6C  FFB0FFE8          push word [bx+si+0xe8ff]\r
+00003B70  99                cwd\r
+00003B71  FD                std\r
+00003B72  FF                db 0xFF\r
+00003B73  FF66C7            jmp near [bp-0x39]\r
+00003B76  055537            add ax,0x3755\r
+00003B79  0100              add [bx+si],ax\r
+00003B7B  0000              add [bx+si],al\r
+00003B7D  E837FD            call 0x38b7\r
+00003B80  FF                db 0xFF\r
+00003B81  FF7264            push word [bp+si+0x64]\r
+00003B84  E8B0FD            call 0x3937\r
+00003B87  FF                db 0xFF\r
+00003B88  FFA25E37          jmp near [bp+si+0x375e]\r
+00003B8C  0100              add [bx+si],ax\r
+00003B8E  E8A6FD            call 0x3937\r
+00003B91  FF                db 0xFF\r
+00003B92  FFA25F37          jmp near [bp+si+0x375f]\r
+00003B96  0100              add [bx+si],ax\r
+00003B98  E89CFD            call 0x3937\r
+00003B9B  FF                db 0xFF\r
+00003B9C  FFA26037          jmp near [bp+si+0x3760]\r
+00003BA0  0100              add [bx+si],ax\r
+00003BA2  E892FD            call 0x3937\r
+00003BA5  FF                db 0xFF\r
+00003BA6  FFA26237          jmp near [bp+si+0x3762]\r
+00003BAA  0100              add [bx+si],ax\r
+00003BAC  E888FD            call 0x3937\r
+00003BAF  FF                db 0xFF\r
+00003BB0  FFA26337          jmp near [bp+si+0x3763]\r
+00003BB4  0100              add [bx+si],ax\r
+00003BB6  E87EFD            call 0x3937\r
+00003BB9  FF                db 0xFF\r
+00003BBA  FFA26437          jmp near [bp+si+0x3764]\r
+00003BBE  0100              add [bx+si],ax\r
+00003BC0  E874FD            call 0x3937\r
+00003BC3  FF                db 0xFF\r
+00003BC4  FFA26537          jmp near [bp+si+0x3765]\r
+00003BC8  0100              add [bx+si],ax\r
+00003BCA  F6055E            test byte [di],0x5e\r
+00003BCD  37                aaa\r
+00003BCE  0100              add [bx+si],ax\r
+00003BD0  C0                db 0xC0\r
+00003BD1  7515              jnz 0x3be8\r
+00003BD3  C6055C            mov byte [di],0x5c\r
+00003BD6  37                aaa\r
+00003BD7  0100              add [bx+si],ax\r
+00003BD9  00618A            add [bx+di-0x76],ah\r
+00003BDC  255C37            and ax,0x375c\r
+00003BDF  0100              add [bx+si],ax\r
+00003BE1  A06437            mov al,[0x3764]\r
+00003BE4  0100              add [bx+si],ax\r
+00003BE6  F8                clc\r
+00003BE7  C3                ret\r
+00003BE8  61                popa\r
+00003BE9  8A25              mov ah,[di]\r
+00003BEB  5C                pop sp\r
+00003BEC  37                aaa\r
+00003BED  0100              add [bx+si],ax\r
+00003BEF  F9                stc\r
+00003BF0  C3                ret\r
+00003BF1  0000              add [bx+si],al\r
+00003BF3  0000              add [bx+si],al\r
+00003BF5  1010              adc [bx+si],dl\r
+00003BF7  1010              adc [bx+si],dl\r
+00003BF9  1010              adc [bx+si],dl\r
+00003BFB  1000              adc [bx+si],al\r
+00003BFD  0000              add [bx+si],al\r
+00003BFF  0000              add [bx+si],al\r
+00003C01  0000              add [bx+si],al\r
+00003C03  0000              add [bx+si],al\r
+00003C05  0000              add [bx+si],al\r
+00003C07  0010              add [bx+si],dl\r
+00003C09  3205              xor al,[di]\r
+00003C0B  3636050505        ss add ax,0x505\r
+00003C10  1010              adc [bx+si],dl\r
+00003C12  1000              adc [bx+si],al\r
+00003C14  0000              add [bx+si],al\r
+00003C16  0000              add [bx+si],al\r
+00003C18  0000              add [bx+si],al\r
+00003C1A  0000              add [bx+si],al\r
+00003C1C  3205              xor al,[di]\r
+00003C1E  361F              ss pop ds\r
+00003C20  37                aaa\r
+00003C21  36050505          ss add ax,0x505\r
+00003C25  050510            add ax,0x1005\r
+00003C28  1000              adc [bx+si],al\r
+00003C2A  0000              add [bx+si],al\r
+00003C2C  0000              add [bx+si],al\r
+00003C2E  1010              adc [bx+si],dl\r
+00003C30  1010              adc [bx+si],dl\r
+00003C32  1010              adc [bx+si],dl\r
+00003C34  1010              adc [bx+si],dl\r
+00003C36  1032              adc [bp+si],dh\r
+00003C38  050505            add ax,0x505\r
+00003C3B  050510            add ax,0x1005\r
+00003C3E  0000              add [bx+si],al\r
+00003C40  0010              add [bx+si],dl\r
+00003C42  1010              adc [bx+si],dl\r
+00003C44  1010              adc [bx+si],dl\r
+00003C46  1010              adc [bx+si],dl\r
+00003C48  1010              adc [bx+si],dl\r
+00003C4A  1010              adc [bx+si],dl\r
+00003C4C  1010              adc [bx+si],dl\r
+00003C4E  3205              xor al,[di]\r
+00003C50  050510            add ax,0x1005\r
+00003C53  0000              add [bx+si],al\r
+00003C55  0000              add [bx+si],al\r
+00003C57  0000              add [bx+si],al\r
+00003C59  0034              add [si],dh\r
+00003C5B  1033              adc [bp+di],dh\r
+00003C5D  1033              adc [bp+di],dh\r
+00003C5F  3210              xor dl,[bx+si]\r
+00003C61  1010              adc [bx+si],dl\r
+00003C63  1032              adc [bp+si],dh\r
+00003C65  3405              xor al,0x5\r
+00003C67  0000              add [bx+si],al\r
+00003C69  0000              add [bx+si],al\r
+00003C6B  3434              xor al,0x34\r
+00003C6D  3436              xor al,0x36\r
+00003C6F  1035              adc [di],dh\r
+00003C71  1035              adc [di],dh\r
+00003C73  353432            xor ax,0x3234\r
+00003C76  1032              adc [bp+si],dh\r
+00003C78  3437              xor al,0x37\r
+00003C7A  3432              xor al,0x32\r
+00003C7C  0000              add [bx+si],al\r
+00003C7E  3437              xor al,0x37\r
+00003C80  37                aaa\r
+00003C81  37                aaa\r
+00003C82  37                aaa\r
+00003C83  37                aaa\r
+00003C84  363636353210      ss xor ax,0x1032\r
+00003C8A  1034              adc [si],dh\r
+00003C8C  36363432          ss xor al,0x32\r
+00003C90  0000              add [bx+si],al\r
+00003C92  3234              xor dh,[si]\r
+00003C94  3434              xor al,0x34\r
+00003C96  3434              xor al,0x34\r
+00003C98  3434              xor al,0x34\r
+00003C9A  10363632          adc [0x3236],dh\r
+00003C9E  10363434          adc [0x3434],dh\r
+00003CA2  3210              xor dl,[bx+si]\r
+00003CA4  0000              add [bx+si],al\r
+00003CA6  0010              add [bx+si],dl\r
+00003CA8  1010              adc [bx+si],dl\r
+00003CAA  1010              adc [bx+si],dl\r
+00003CAC  1010              adc [bx+si],dl\r
+00003CAE  1010              adc [bx+si],dl\r
+00003CB0  363636361010      adc [ss:bx+si],dl\r
+00003CB6  1000              adc [bx+si],al\r
+00003CB8  0000              add [bx+si],al\r
+00003CBA  0000              add [bx+si],al\r
+00003CBC  0010              add [bx+si],dl\r
+00003CBE  1010              adc [bx+si],dl\r
+00003CC0  1010              adc [bx+si],dl\r
+00003CC2  3234              xor dh,[si]\r
+00003CC4  3434              xor al,0x34\r
+00003CC6  3432              xor al,0x32\r
+00003CC8  1010              adc [bx+si],dl\r
+00003CCA  0000              add [bx+si],al\r
+00003CCC  0000              add [bx+si],al\r
+00003CCE  0000              add [bx+si],al\r
+00003CD0  0000              add [bx+si],al\r
+00003CD2  006B8B            add [bp+di-0x75],ch\r
+00003CD5  8B8B8B6B          mov cx,[bp+di+0x6b8b]\r
+00003CD9  3205              xor al,[di]\r
+00003CDB  053200            add ax,0x32\r
+00003CDE  0000              add [bx+si],al\r
+00003CE0  0000              add [bx+si],al\r
+00003CE2  0000              add [bx+si],al\r
+00003CE4  0000              add [bx+si],al\r
+00003CE6  6A8C              push byte -0x74\r
+00003CE8  8D8D8C8B          lea cx,[di+0x8b8c]\r
+00003CEC  8B6B05            mov bp,[bp+di+0x5]\r
+00003CEF  050532            add ax,0x3205\r
+00003CF2  0000              add [bx+si],al\r
+00003CF4  0000              add [bx+si],al\r
+00003CF6  0000              add [bx+si],al\r
+00003CF8  0010              add [bx+si],dl\r
+00003CFA  8C8E8E8D          mov [bp+0x8d8e],cs\r
+00003CFE  8C8C8B6E          mov [si+0x6e8b],cs\r
+00003D02  1F                pop ds\r
+00003D03  1F                pop ds\r
+00003D04  6E                outsb\r
+00003D05  6B0000            imul ax,[bx+si],byte +0x0\r
+00003D08  0000              add [bx+si],al\r
+00003D0A  0000              add [bx+si],al\r
+00003D0C  0010              add [bx+si],dl\r
+00003D0E  8C8D8E8C          mov [di+0x8c8e],cs\r
+00003D12  8B8B8B10          mov cx,[bp+di+0x108b]\r
+00003D16  6E                outsb\r
+00003D17  1F                pop ds\r
+00003D18  6E                outsb\r
+00003D19  6B0000            imul ax,[bx+si],byte +0x0\r
+00003D1C  0000              add [bx+si],al\r
+00003D1E  0000              add [bx+si],al\r
+00003D20  0000              add [bx+si],al\r
+00003D22  108B8B8B          adc [bp+di+0x8b8b],cl\r
+00003D26  8B8B8B10          mov cx,[bp+di+0x108b]\r
+00003D2A  6D                insw\r
+00003D2B  6E                outsb\r
+00003D2C  6D                insw\r
+00003D2D  6B0000            imul ax,[bx+si],byte +0x0\r
+00003D30  0000              add [bx+si],al\r
+00003D32  0000              add [bx+si],al\r
+00003D34  0000              add [bx+si],al\r
+00003D36  0010              add [bx+si],dl\r
+00003D38  1010              adc [bx+si],dl\r
+00003D3A  1010              adc [bx+si],dl\r
+00003D3C  1032              adc [bp+si],dh\r
+00003D3E  4B                dec bx\r
+00003D3F  4B                dec bx\r
+00003D40  3200              xor al,[bx+si]\r
+00003D42  0000              add [bx+si],al\r
+00003D44  0000              add [bx+si],al\r
+00003D46  0000              add [bx+si],al\r
+00003D48  0000              add [bx+si],al\r
+00003D4A  104E4C            adc [bp+0x4c],cl\r
+00003D4D  324E4E            xor cl,[bp+0x4e]\r
+00003D50  4C                dec sp\r
+00003D51  4C                dec sp\r
+00003D52  4C                dec sp\r
+00003D53  4B                dec bx\r
+00003D54  1000              adc [bx+si],al\r
+00003D56  0000              add [bx+si],al\r
+00003D58  0000              add [bx+si],al\r
+00003D5A  0000              add [bx+si],al\r
+00003D5C  0000              add [bx+si],al\r
+00003D5E  1032              adc [bp+si],dh\r
+00003D60  3210              xor dl,[bx+si]\r
+00003D62  4B                dec bx\r
+00003D63  4B                dec bx\r
+00003D64  3232              xor dh,[bp+si]\r
+00003D66  3232              xor dh,[bp+si]\r
+00003D68  1000              adc [bx+si],al\r
+00003D6A  0000              add [bx+si],al\r
+00003D6C  0000              add [bx+si],al\r
+00003D6E  0000              add [bx+si],al\r
+00003D70  0000              add [bx+si],al\r
+00003D72  1010              adc [bx+si],dl\r
+00003D74  1010              adc [bx+si],dl\r
+00003D76  1010              adc [bx+si],dl\r
+00003D78  1010              adc [bx+si],dl\r
+00003D7A  1010              adc [bx+si],dl\r
+00003D7C  1010              adc [bx+si],dl\r
+00003D7E  1010              adc [bx+si],dl\r
+00003D80  1000              adc [bx+si],al\r
+00003D82  0010              add [bx+si],dl\r
+00003D84  1010              adc [bx+si],dl\r
+00003D86  292C              sub [si],bp\r
+00003D88  2B2C              sub bp,[si]\r
+00003D8A  2C2B              sub al,0x2b\r
+00003D8C  2B2D              sub bp,[di]\r
+00003D8E  2D2C2C            sub ax,0x2c2c\r
+00003D91  2B2C              sub bp,[si]\r
+00003D93  2C2C              sub al,0x2c\r
+00003D95  0010              add [bx+si],dl\r
+00003D97  292A              sub [bp+si],bp\r
+00003D99  2A2C              sub ch,[si]\r
+00003D9B  2D2A2C            sub ax,0x2c2a\r
+00003D9E  2B2C              sub bp,[si]\r
+00003DA0  2D2B2C            sub ax,0x2c2b\r
+00003DA3  2C2D              sub al,0x2d\r
+00003DA5  2D2C2C            sub ax,0x2c2c\r
+00003DA8  2B10              sub dx,[bx+si]\r
+00003DAA  292B              sub [bp+di],bp\r
+00003DAC  2A2B              sub ch,[bp+di]\r
+00003DAE  2B2B              sub bp,[bp+di]\r
+00003DB0  2C2B              sub al,0x2b\r
+00003DB2  2B2A              sub bp,[bp+si]\r
+00003DB4  2A2B              sub ch,[bp+di]\r
+00003DB6  2A2B              sub ch,[bp+di]\r
+00003DB8  2B2A              sub bp,[bp+si]\r
+00003DBA  2C2B              sub al,0x2b\r
+00003DBC  2A10              sub dl,[bx+si]\r
+00003DBE  292A              sub [bp+si],bp\r
+00003DC0  2A2A              sub ch,[bp+si]\r
+00003DC2  2B2A              sub bp,[bp+si]\r
+00003DC4  2B2A              sub bp,[bp+si]\r
+00003DC6  2B2A              sub bp,[bp+si]\r
+00003DC8  2A2A              sub ch,[bp+si]\r
+00003DCA  2B2A              sub bp,[bp+si]\r
+00003DCC  2A2A              sub ch,[bp+si]\r
+00003DCE  2B2A              sub bp,[bp+si]\r
+00003DD0  2B10              sub dx,[bx+si]\r
+00003DD2  2829              sub [bx+di],ch\r
+00003DD4  2A2C              sub ch,[si]\r
+00003DD6  292B              sub [bp+di],bp\r
+00003DD8  2A29              sub ch,[bx+di]\r
+00003DDA  2A2B              sub ch,[bp+di]\r
+00003DDC  2C2A              sub al,0x2a\r
+00003DDE  2A2A              sub ch,[bp+si]\r
+00003DE0  2A2A              sub ch,[bp+si]\r
+00003DE2  2A2A              sub ch,[bp+si]\r
+00003DE4  2810              sub [bx+si],dl\r
+00003DE6  292A              sub [bp+si],bp\r
+00003DE8  2A2D              sub ch,[di]\r
+00003DEA  292A              sub [bp+si],bp\r
+00003DEC  292A              sub [bp+si],bp\r
+00003DEE  292A              sub [bp+si],bp\r
+00003DF0  2A29              sub ch,[bx+di]\r
+00003DF2  2A2A              sub ch,[bp+si]\r
+00003DF4  2C2A              sub al,0x2a\r
+00003DF6  2829              sub [bx+di],ch\r
+00003DF8  2A10              sub dl,[bx+si]\r
+00003DFA  2829              sub [bx+di],ch\r
+00003DFC  2A2B              sub ch,[bp+di]\r
+00003DFE  2A2A              sub ch,[bp+si]\r
+00003E00  282A              sub [bp+si],ch\r
+00003E02  1029              adc [bx+di],ch\r
+00003E04  2A2A              sub ch,[bp+si]\r
+00003E06  2910              sub [bx+si],dx\r
+00003E08  2B2A              sub bp,[bp+si]\r
+00003E0A  1029              adc [bx+di],ch\r
+00003E0C  2810              sub [bx+si],dl\r
+00003E0E  2929              sub [bx+di],bp\r
+00003E10  2B2A              sub bp,[bp+si]\r
+00003E12  292B              sub [bp+di],bp\r
+00003E14  292B              sub [bp+di],bp\r
+00003E16  1028              adc [bx+si],ch\r
+00003E18  2910              sub [bx+si],dx\r
+00003E1A  2B10              sub dx,[bx+si]\r
+00003E1C  2928              sub [bx+si],bp\r
+00003E1E  2A28              sub ch,[bx+si]\r
+00003E20  2B00              sub ax,[bx+si]\r
+00003E22  282A              sub [bp+si],ch\r
+00003E24  2910              sub [bx+si],dx\r
+00003E26  102A              adc [bp+si],ch\r
+00003E28  1010              adc [bx+si],dl\r
+00003E2A  41                inc cx\r
+00003E2B  1010              adc [bx+si],dl\r
+00003E2D  41                inc cx\r
+00003E2E  1028              adc [bx+si],ch\r
+00003E30  1029              adc [bx+di],ch\r
+00003E32  2B29              sub bp,[bx+di]\r
+00003E34  2800              sub [bx+si],al\r
+00003E36  1028              adc [bx+si],ch\r
+00003E38  1010              adc [bx+si],dl\r
+00003E3A  41                inc cx\r
+00003E3B  104150            adc [bx+di+0x50],al\r
+00003E3E  50                push ax\r
+00003E3F  41                inc cx\r
+00003E40  50                push ax\r
+00003E41  50                push ax\r
+00003E42  41                inc cx\r
+00003E43  104110            adc [bx+di+0x10],al\r
+00003E46  2928              sub [bx+si],bp\r
+00003E48  41                inc cx\r
+00003E49  0000              add [bx+si],al\r
+00003E4B  1010              adc [bx+si],dl\r
+00003E4D  41                inc cx\r
+00003E4E  105050            adc [bx+si+0x50],dl\r
+00003E51  51                push cx\r
+00003E52  51                push cx\r
+00003E53  51                push cx\r
+00003E54  52                push dx\r
+00003E55  50                push ax\r
+00003E56  50                push ax\r
+00003E57  51                push cx\r
+00003E58  51                push cx\r
+00003E59  41                inc cx\r
+00003E5A  41                inc cx\r
+00003E5B  105000            adc [bx+si+0x0],dl\r
+00003E5E  0010              add [bx+si],dl\r
+00003E60  41                inc cx\r
+00003E61  50                push ax\r
+00003E62  41                inc cx\r
+00003E63  51                push cx\r
+00003E64  52                push dx\r
+00003E65  52                push dx\r
+00003E66  52                push dx\r
+00003E67  52                push dx\r
+00003E68  53                push bx\r
+00003E69  53                push bx\r
+00003E6A  53                push bx\r
+00003E6B  54                push sp\r
+00003E6C  53                push bx\r
+00003E6D  52                push dx\r
+00003E6E  50                push ax\r
+00003E6F  50                push ax\r
+00003E70  51                push cx\r
+00003E71  0000              add [bx+si],al\r
+00003E73  104141            adc [bx+di+0x41],al\r
+00003E76  51                push cx\r
+00003E77  52                push dx\r
+00003E78  53                push bx\r
+00003E79  54                push sp\r
+00003E7A  53                push bx\r
+00003E7B  53                push bx\r
+00003E7C  54                push sp\r
+00003E7D  55                push bp\r
+00003E7E  55                push bp\r
+00003E7F  55                push bp\r
+00003E80  54                push sp\r
+00003E81  54                push sp\r
+00003E82  52                push dx\r
+00003E83  52                push dx\r
+00003E84  54                push sp\r
+00003E85  1010              adc [bx+si],dl\r
+00003E87  1010              adc [bx+si],dl\r
+00003E89  1010              adc [bx+si],dl\r
+00003E8B  1010              adc [bx+si],dl\r
+00003E8D  1010              adc [bx+si],dl\r
+00003E8F  1010              adc [bx+si],dl\r
+00003E91  1010              adc [bx+si],dl\r
+00003E93  1010              adc [bx+si],dl\r
+00003E95  1010              adc [bx+si],dl\r
+00003E97  1010              adc [bx+si],dl\r
+00003E99  2C2B              sub al,0x2b\r
+00003E9B  2C2C              sub al,0x2c\r
+00003E9D  2D2D2D            sub ax,0x2d2d\r
+00003EA0  2C2D              sub al,0x2d\r
+00003EA2  2B2B              sub bp,[bp+di]\r
+00003EA4  2C2D              sub al,0x2d\r
+00003EA6  2C2D              sub al,0x2d\r
+00003EA8  2B2C              sub bp,[si]\r
+00003EAA  2B2C              sub bp,[si]\r
+00003EAC  2D2B2D            sub ax,0x2d2b\r
+00003EAF  2C2C              sub al,0x2c\r
+00003EB1  2B2A              sub bp,[bp+si]\r
+00003EB3  2C2A              sub al,0x2a\r
+00003EB5  2C2D              sub al,0x2d\r
+00003EB7  2C2C              sub al,0x2c\r
+00003EB9  2B2C              sub bp,[si]\r
+00003EBB  2A2C              sub ch,[si]\r
+00003EBD  2D2D2B            sub ax,0x2b2d\r
+00003EC0  2B2A              sub bp,[bp+si]\r
+00003EC2  2B2C              sub bp,[si]\r
+00003EC4  2B2A              sub bp,[bp+si]\r
+00003EC6  2C2A              sub al,0x2a\r
+00003EC8  2B2B              sub bp,[bp+di]\r
+00003ECA  2B2A              sub bp,[bp+si]\r
+00003ECC  2A2B              sub ch,[bp+di]\r
+00003ECE  2A2B              sub ch,[bp+di]\r
+00003ED0  2B2A              sub bp,[bp+si]\r
+00003ED2  2C2B              sub al,0x2b\r
+00003ED4  2A2A              sub ch,[bp+si]\r
+00003ED6  2A2A              sub ch,[bp+si]\r
+00003ED8  2B2A              sub bp,[bp+si]\r
+00003EDA  2A2A              sub ch,[bp+si]\r
+00003EDC  2A2A              sub ch,[bp+si]\r
+00003EDE  2B2A              sub bp,[bp+si]\r
+00003EE0  2A2A              sub ch,[bp+si]\r
+00003EE2  2B2A              sub bp,[bp+si]\r
+00003EE4  2A2A              sub ch,[bp+si]\r
+00003EE6  2B2A              sub bp,[bp+si]\r
+00003EE8  2B2A              sub bp,[bp+si]\r
+00003EEA  2B2A              sub bp,[bp+si]\r
+00003EEC  2A2A              sub ch,[bp+si]\r
+00003EEE  292B              sub [bp+di],bp\r
+00003EF0  2A29              sub ch,[bx+di]\r
+00003EF2  2A2A              sub ch,[bp+si]\r
+00003EF4  2B2A              sub bp,[bp+si]\r
+00003EF6  2A2A              sub ch,[bp+si]\r
+00003EF8  2A2A              sub ch,[bp+si]\r
+00003EFA  2A2A              sub ch,[bp+si]\r
+00003EFC  282A              sub [bp+si],ch\r
+00003EFE  2928              sub [bx+si],bp\r
+00003F00  292A              sub [bp+si],bp\r
+00003F02  292A              sub [bp+si],bp\r
+00003F04  292A              sub [bp+si],bp\r
+00003F06  292A              sub [bp+si],bp\r
+00003F08  2A29              sub ch,[bx+di]\r
+00003F0A  2A2A              sub ch,[bp+si]\r
+00003F0C  2B2A              sub bp,[bp+si]\r
+00003F0E  2829              sub [bx+di],ch\r
+00003F10  2A29              sub ch,[bx+di]\r
+00003F12  2928              sub [bx+si],bp\r
+00003F14  2A29              sub ch,[bx+di]\r
+00003F16  292A              sub [bp+si],bp\r
+00003F18  282A              sub [bp+si],ch\r
+00003F1A  1029              adc [bx+di],ch\r
+00003F1C  2A2A              sub ch,[bp+si]\r
+00003F1E  2910              sub [bx+si],dx\r
+00003F20  2B2A              sub bp,[bp+si]\r
+00003F22  1029              adc [bx+di],ch\r
+00003F24  282A              sub [bp+si],ch\r
+00003F26  282A              sub [bp+si],ch\r
+00003F28  2B10              sub dx,[bx+si]\r
+00003F2A  292B              sub [bp+di],bp\r
+00003F2C  292B              sub [bp+di],bp\r
+00003F2E  1028              adc [bx+si],ch\r
+00003F30  2910              sub [bx+si],dx\r
+00003F32  2B10              sub dx,[bx+si]\r
+00003F34  2928              sub [bx+si],bp\r
+00003F36  2A28              sub ch,[bx+si]\r
+00003F38  2B28              sub bp,[bx+si]\r
+00003F3A  292A              sub [bp+si],bp\r
+00003F3C  2B10              sub dx,[bx+si]\r
+00003F3E  102A              adc [bp+si],ch\r
+00003F40  1010              adc [bx+si],dl\r
+00003F42  41                inc cx\r
+00003F43  1010              adc [bx+si],dl\r
+00003F45  41                inc cx\r
+00003F46  1028              adc [bx+si],ch\r
+00003F48  1029              adc [bx+di],ch\r
+00003F4A  2B29              sub bp,[bx+di]\r
+00003F4C  284110            sub [bx+di+0x10],al\r
+00003F4F  2810              sub [bx+si],dl\r
+00003F51  104110            adc [bx+di+0x10],al\r
+00003F54  41                inc cx\r
+00003F55  50                push ax\r
+00003F56  50                push ax\r
+00003F57  41                inc cx\r
+00003F58  50                push ax\r
+00003F59  50                push ax\r
+00003F5A  41                inc cx\r
+00003F5B  104110            adc [bx+di+0x10],al\r
+00003F5E  2928              sub [bx+si],bp\r
+00003F60  41                inc cx\r
+00003F61  50                push ax\r
+00003F62  41                inc cx\r
+00003F63  104141            adc [bx+di+0x41],al\r
+00003F66  50                push ax\r
+00003F67  51                push cx\r
+00003F68  50                push ax\r
+00003F69  51                push cx\r
+00003F6A  51                push cx\r
+00003F6B  51                push cx\r
+00003F6C  52                push dx\r
+00003F6D  50                push ax\r
+00003F6E  50                push ax\r
+00003F6F  51                push cx\r
+00003F70  51                push cx\r
+00003F71  41                inc cx\r
+00003F72  41                inc cx\r
+00003F73  105051            adc [bx+si+0x51],dl\r
+00003F76  51                push cx\r
+00003F77  50                push ax\r
+00003F78  50                push ax\r
+00003F79  51                push cx\r
+00003F7A  51                push cx\r
+00003F7B  52                push dx\r
+00003F7C  51                push cx\r
+00003F7D  52                push dx\r
+00003F7E  52                push dx\r
+00003F7F  52                push dx\r
+00003F80  53                push bx\r
+00003F81  53                push bx\r
+00003F82  53                push bx\r
+00003F83  54                push sp\r
+00003F84  53                push bx\r
+00003F85  52                push dx\r
+00003F86  50                push ax\r
+00003F87  50                push ax\r
+00003F88  51                push cx\r
+00003F89  53                push bx\r
+00003F8A  52                push dx\r
+00003F8B  51                push cx\r
+00003F8C  51                push cx\r
+00003F8D  53                push bx\r
+00003F8E  53                push bx\r
+00003F8F  52                push dx\r
+00003F90  53                push bx\r
+00003F91  54                push sp\r
+00003F92  53                push bx\r
+00003F93  53                push bx\r
+00003F94  54                push sp\r
+00003F95  55                push bp\r
+00003F96  55                push bp\r
+00003F97  55                push bp\r
+00003F98  54                push sp\r
+00003F99  54                push sp\r
+00003F9A  52                push dx\r
+00003F9B  52                push dx\r
+00003F9C  54                push sp\r
+00003F9D  1010              adc [bx+si],dl\r
+00003F9F  1031              adc [bx+di],dh\r
+00003FA1  51                push cx\r
+00003FA2  51                push cx\r
+00003FA3  52                push dx\r
+00003FA4  52                push dx\r
+00003FA5  54                push sp\r
+00003FA6  54                push sp\r
+00003FA7  54                push sp\r
+00003FA8  54                push sp\r
+00003FA9  54                push sp\r
+00003FAA  54                push sp\r
+00003FAB  55                push bp\r
+00003FAC  55                push bp\r
+00003FAD  54                push sp\r
+00003FAE  54                push sp\r
+00003FAF  54                push sp\r
+00003FB0  54                push sp\r
+00003FB1  2C2C              sub al,0x2c\r
+00003FB3  292A              sub [bp+si],bp\r
+00003FB5  3110              xor [bx+si],dx\r
+00003FB7  51                push cx\r
+00003FB8  52                push dx\r
+00003FB9  52                push dx\r
+00003FBA  55                push bp\r
+00003FBB  53                push bx\r
+00003FBC  54                push sp\r
+00003FBD  54                push sp\r
+00003FBE  54                push sp\r
+00003FBF  54                push sp\r
+00003FC0  54                push sp\r
+00003FC1  54                push sp\r
+00003FC2  54                push sp\r
+00003FC3  54                push sp\r
+00003FC4  55                push bp\r
+00003FC5  2B2D              sub bp,[di]\r
+00003FC7  2D292B            sub ax,0x2b29\r
+00003FCA  2A31              sub dh,[bx+di]\r
+00003FCC  285352            sub [bp+di+0x52],dl\r
+00003FCF  52                push dx\r
+00003FD0  54                push sp\r
+00003FD1  54                push sp\r
+00003FD2  54                push sp\r
+00003FD3  55                push bp\r
+00003FD4  54                push sp\r
+00003FD5  54                push sp\r
+00003FD6  54                push sp\r
+00003FD7  54                push sp\r
+00003FD8  54                push sp\r
+00003FD9  2A2B              sub ch,[bp+di]\r
+00003FDB  2B2A              sub bp,[bp+si]\r
+00003FDD  2D2C2B            sub ax,0x2b2c\r
+00003FE0  2A4252            sub al,[bp+si+0x52]\r
+00003FE3  54                push sp\r
+00003FE4  55                push bp\r
+00003FE5  54                push sp\r
+00003FE6  54                push sp\r
+00003FE7  54                push sp\r
+00003FE8  54                push sp\r
+00003FE9  55                push bp\r
+00003FEA  54                push sp\r
+00003FEB  54                push sp\r
+00003FEC  54                push sp\r
+00003FED  2A2B              sub ch,[bp+di]\r
+00003FEF  2C2B              sub al,0x2b\r
+00003FF1  2B2B              sub bp,[bp+di]\r
+00003FF3  2A2B              sub ch,[bp+di]\r
+00003FF5  2828              sub [bx+si],ch\r
+00003FF7  52                push dx\r
+00003FF8  52                push dx\r
+00003FF9  54                push sp\r
+00003FFA  54                push sp\r
+00003FFB  54                push sp\r
+00003FFC  54                push sp\r
+00003FFD  54                push sp\r
+00003FFE  54                push sp\r
+00003FFF  54                push sp\r
+00004000  54                push sp\r
+00004001  2A2A              sub ch,[bp+si]\r
+00004003  2B2B              sub bp,[bp+di]\r
+00004005  2A2D              sub ch,[di]\r
+00004007  2B2A              sub bp,[bp+si]\r
+00004009  2B28              sub bp,[bx+si]\r
+0000400B  285353            sub [bp+di+0x53],dl\r
+0000400E  54                push sp\r
+0000400F  54                push sp\r
+00004010  54                push sp\r
+00004011  54                push sp\r
+00004012  55                push bp\r
+00004013  55                push bp\r
+00004014  54                push sp\r
+00004015  2B2A              sub bp,[bp+si]\r
+00004017  2B2A              sub bp,[bp+si]\r
+00004019  2A2B              sub ch,[bp+di]\r
+0000401B  2A28              sub ch,[bx+si]\r
+0000401D  292A              sub [bp+si],bp\r
+0000401F  104153            adc [bx+di+0x53],al\r
+00004022  53                push bx\r
+00004023  54                push sp\r
+00004024  54                push sp\r
+00004025  55                push bp\r
+00004026  55                push bp\r
+00004027  55                push bp\r
+00004028  55                push bp\r
+00004029  2C28              sub al,0x28\r
+0000402B  292A              sub [bp+si],bp\r
+0000402D  2A2A              sub ch,[bp+si]\r
+0000402F  2B29              sub bp,[bx+di]\r
+00004031  2810              sub [bx+si],dl\r
+00004033  42                inc dx\r
+00004034  53                push bx\r
+00004035  53                push bx\r
+00004036  54                push sp\r
+00004037  55                push bp\r
+00004038  54                push sp\r
+00004039  55                push bp\r
+0000403A  55                push bp\r
+0000403B  55                push bp\r
+0000403C  55                push bp\r
+0000403D  2829              sub [bx+di],ch\r
+0000403F  2828              sub [bx+si],ch\r
+00004041  1028              adc [bx+si],ch\r
+00004043  2A28              sub ch,[bx+si]\r
+00004045  51                push cx\r
+00004046  42                inc dx\r
+00004047  53                push bx\r
+00004048  52                push dx\r
+00004049  54                push sp\r
+0000404A  54                push sp\r
+0000404B  54                push sp\r
+0000404C  54                push sp\r
+0000404D  54                push sp\r
+0000404E  55                push bp\r
+0000404F  54                push sp\r
+00004050  54                push sp\r
+00004051  2829              sub [bx+di],ch\r
+00004053  41                inc cx\r
+00004054  41                inc cx\r
+00004055  51                push cx\r
+00004056  1028              adc [bx+si],ch\r
+00004058  41                inc cx\r
+00004059  42                inc dx\r
+0000405A  52                push dx\r
+0000405B  51                push cx\r
+0000405C  54                push sp\r
+0000405D  54                push sp\r
+0000405E  54                push sp\r
+0000405F  54                push sp\r
+00004060  54                push sp\r
+00004061  54                push sp\r
+00004062  54                push sp\r
+00004063  54                push sp\r
+00004064  54                push sp\r
+00004065  41                inc cx\r
+00004066  104151            adc [bx+di+0x51],al\r
+00004069  41                inc cx\r
+0000406A  51                push cx\r
+0000406B  42                inc dx\r
+0000406C  53                push bx\r
+0000406D  53                push bx\r
+0000406E  54                push sp\r
+0000406F  53                push bx\r
+00004070  55                push bp\r
+00004071  54                push sp\r
+00004072  54                push sp\r
+00004073  54                push sp\r
+00004074  54                push sp\r
+00004075  54                push sp\r
+00004076  55                push bp\r
+00004077  54                push sp\r
+00004078  54                push sp\r
+00004079  51                push cx\r
+0000407A  41                inc cx\r
+0000407B  53                push bx\r
+0000407C  41                inc cx\r
+0000407D  52                push dx\r
+0000407E  52                push dx\r
+0000407F  53                push bx\r
+00004080  54                push sp\r
+00004081  53                push bx\r
+00004082  53                push bx\r
+00004083  54                push sp\r
+00004084  54                push sp\r
+00004085  54                push sp\r
+00004086  54                push sp\r
+00004087  55                push bp\r
+00004088  55                push bp\r
+00004089  54                push sp\r
+0000408A  54                push sp\r
+0000408B  54                push sp\r
+0000408C  54                push sp\r
+0000408D  52                push dx\r
+0000408E  52                push dx\r
+0000408F  52                push dx\r
+00004090  53                push bx\r
+00004091  55                push bp\r
+00004092  53                push bx\r
+00004093  53                push bx\r
+00004094  54                push sp\r
+00004095  54                push sp\r
+00004096  54                push sp\r
+00004097  54                push sp\r
+00004098  54                push sp\r
+00004099  54                push sp\r
+0000409A  55                push bp\r
+0000409B  55                push bp\r
+0000409C  55                push bp\r
+0000409D  55                push bp\r
+0000409E  54                push sp\r
+0000409F  54                push sp\r
+000040A0  54                push sp\r
+000040A1  54                push sp\r
+000040A2  53                push bx\r
+000040A3  55                push bp\r
+000040A4  54                push sp\r
+000040A5  53                push bx\r
+000040A6  53                push bx\r
+000040A7  54                push sp\r
+000040A8  54                push sp\r
+000040A9  55                push bp\r
+000040AA  54                push sp\r
+000040AB  54                push sp\r
+000040AC  54                push sp\r
+000040AD  54                push sp\r
+000040AE  55                push bp\r
+000040AF  55                push bp\r
+000040B0  55                push bp\r
+000040B1  55                push bp\r
+000040B2  54                push sp\r
+000040B3  54                push sp\r
+000040B4  55                push bp\r
+000040B5  0000              add [bx+si],al\r
+000040B7  104151            adc [bx+di+0x51],al\r
+000040BA  52                push dx\r
+000040BB  52                push dx\r
+000040BC  54                push sp\r
+000040BD  54                push sp\r
+000040BE  54                push sp\r
+000040BF  54                push sp\r
+000040C0  54                push sp\r
+000040C1  54                push sp\r
+000040C2  54                push sp\r
+000040C3  55                push bp\r
+000040C4  55                push bp\r
+000040C5  54                push sp\r
+000040C6  54                push sp\r
+000040C7  54                push sp\r
+000040C8  54                push sp\r
+000040C9  0000              add [bx+si],al\r
+000040CB  105051            adc [bx+si+0x51],dl\r
+000040CE  53                push bx\r
+000040CF  54                push sp\r
+000040D0  55                push bp\r
+000040D1  54                push sp\r
+000040D2  53                push bx\r
+000040D3  54                push sp\r
+000040D4  55                push bp\r
+000040D5  54                push sp\r
+000040D6  54                push sp\r
+000040D7  54                push sp\r
+000040D8  54                push sp\r
+000040D9  54                push sp\r
+000040DA  54                push sp\r
+000040DB  54                push sp\r
+000040DC  55                push bp\r
+000040DD  0000              add [bx+si],al\r
+000040DF  105041            adc [bx+si+0x41],dl\r
+000040E2  52                push dx\r
+000040E3  54                push sp\r
+000040E4  54                push sp\r
+000040E5  55                push bp\r
+000040E6  54                push sp\r
+000040E7  53                push bx\r
+000040E8  54                push sp\r
+000040E9  55                push bp\r
+000040EA  54                push sp\r
+000040EB  55                push bp\r
+000040EC  54                push sp\r
+000040ED  54                push sp\r
+000040EE  54                push sp\r
+000040EF  54                push sp\r
+000040F0  54                push sp\r
+000040F1  0000              add [bx+si],al\r
+000040F3  104152            adc [bx+di+0x52],al\r
+000040F6  52                push dx\r
+000040F7  54                push sp\r
+000040F8  53                push bx\r
+000040F9  54                push sp\r
+000040FA  54                push sp\r
+000040FB  54                push sp\r
+000040FC  54                push sp\r
+000040FD  55                push bp\r
+000040FE  54                push sp\r
+000040FF  54                push sp\r
+00004100  54                push sp\r
+00004101  55                push bp\r
+00004102  54                push sp\r
+00004103  54                push sp\r
+00004104  54                push sp\r
+00004105  0000              add [bx+si],al\r
+00004107  105051            adc [bx+si+0x51],dl\r
+0000410A  52                push dx\r
+0000410B  52                push dx\r
+0000410C  54                push sp\r
+0000410D  53                push bx\r
+0000410E  53                push bx\r
+0000410F  54                push sp\r
+00004110  54                push sp\r
+00004111  54                push sp\r
+00004112  54                push sp\r
+00004113  54                push sp\r
+00004114  54                push sp\r
+00004115  54                push sp\r
+00004116  54                push sp\r
+00004117  54                push sp\r
+00004118  54                push sp\r
+00004119  0000              add [bx+si],al\r
+0000411B  104151            adc [bx+di+0x51],al\r
+0000411E  41                inc cx\r
+0000411F  54                push sp\r
+00004120  53                push bx\r
+00004121  54                push sp\r
+00004122  54                push sp\r
+00004123  54                push sp\r
+00004124  55                push bp\r
+00004125  54                push sp\r
+00004126  54                push sp\r
+00004127  54                push sp\r
+00004128  54                push sp\r
+00004129  55                push bp\r
+0000412A  55                push bp\r
+0000412B  54                push sp\r
+0000412C  54                push sp\r
+0000412D  0000              add [bx+si],al\r
+0000412F  104151            adc [bx+di+0x51],al\r
+00004132  52                push dx\r
+00004133  52                push dx\r
+00004134  53                push bx\r
+00004135  54                push sp\r
+00004136  55                push bp\r
+00004137  54                push sp\r
+00004138  54                push sp\r
+00004139  54                push sp\r
+0000413A  54                push sp\r
+0000413B  54                push sp\r
+0000413C  55                push bp\r
+0000413D  55                push bp\r
+0000413E  55                push bp\r
+0000413F  55                push bp\r
+00004140  54                push sp\r
+00004141  0000              add [bx+si],al\r
+00004143  104150            adc [bx+di+0x50],al\r
+00004146  51                push cx\r
+00004147  53                push bx\r
+00004148  54                push sp\r
+00004149  54                push sp\r
+0000414A  55                push bp\r
+0000414B  55                push bp\r
+0000414C  54                push sp\r
+0000414D  55                push bp\r
+0000414E  54                push sp\r
+0000414F  54                push sp\r
+00004150  55                push bp\r
+00004151  55                push bp\r
+00004152  55                push bp\r
+00004153  55                push bp\r
+00004154  54                push sp\r
+00004155  0000              add [bx+si],al\r
+00004157  104150            adc [bx+di+0x50],al\r
+0000415A  51                push cx\r
+0000415B  53                push bx\r
+0000415C  54                push sp\r
+0000415D  54                push sp\r
+0000415E  54                push sp\r
+0000415F  55                push bp\r
+00004160  54                push sp\r
+00004161  54                push sp\r
+00004162  54                push sp\r
+00004163  54                push sp\r
+00004164  54                push sp\r
+00004165  55                push bp\r
+00004166  55                push bp\r
+00004167  54                push sp\r
+00004168  54                push sp\r
+00004169  0000              add [bx+si],al\r
+0000416B  104150            adc [bx+di+0x50],al\r
+0000416E  52                push dx\r
+0000416F  52                push dx\r
+00004170  53                push bx\r
+00004171  54                push sp\r
+00004172  55                push bp\r
+00004173  54                push sp\r
+00004174  54                push sp\r
+00004175  54                push sp\r
+00004176  54                push sp\r
+00004177  54                push sp\r
+00004178  54                push sp\r
+00004179  54                push sp\r
+0000417A  54                push sp\r
+0000417B  54                push sp\r
+0000417C  54                push sp\r
+0000417D  0000              add [bx+si],al\r
+0000417F  105051            adc [bx+si+0x51],dl\r
+00004182  52                push dx\r
+00004183  50                push ax\r
+00004184  52                push dx\r
+00004185  53                push bx\r
+00004186  54                push sp\r
+00004187  54                push sp\r
+00004188  54                push sp\r
+00004189  54                push sp\r
+0000418A  54                push sp\r
+0000418B  54                push sp\r
+0000418C  54                push sp\r
+0000418D  54                push sp\r
+0000418E  55                push bp\r
+0000418F  54                push sp\r
+00004190  54                push sp\r
+00004191  0000              add [bx+si],al\r
+00004193  104152            adc [bx+di+0x52],al\r
+00004196  52                push dx\r
+00004197  52                push dx\r
+00004198  55                push bp\r
+00004199  55                push bp\r
+0000419A  54                push sp\r
+0000419B  54                push sp\r
+0000419C  54                push sp\r
+0000419D  54                push sp\r
+0000419E  54                push sp\r
+0000419F  55                push bp\r
+000041A0  55                push bp\r
+000041A1  54                push sp\r
+000041A2  54                push sp\r
+000041A3  54                push sp\r
+000041A4  54                push sp\r
+000041A5  0000              add [bx+si],al\r
+000041A7  104150            adc [bx+di+0x50],al\r
+000041AA  52                push dx\r
+000041AB  52                push dx\r
+000041AC  53                push bx\r
+000041AD  54                push sp\r
+000041AE  54                push sp\r
+000041AF  54                push sp\r
+000041B0  54                push sp\r
+000041B1  54                push sp\r
+000041B2  55                push bp\r
+000041B3  55                push bp\r
+000041B4  55                push bp\r
+000041B5  55                push bp\r
+000041B6  54                push sp\r
+000041B7  54                push sp\r
+000041B8  54                push sp\r
+000041B9  0000              add [bx+si],al\r
+000041BB  105052            adc [bx+si+0x52],dl\r
+000041BE  52                push dx\r
+000041BF  54                push sp\r
+000041C0  53                push bx\r
+000041C1  54                push sp\r
+000041C2  54                push sp\r
+000041C3  55                push bp\r
+000041C4  54                push sp\r
+000041C5  54                push sp\r
+000041C6  55                push bp\r
+000041C7  55                push bp\r
+000041C8  55                push bp\r
+000041C9  55                push bp\r
+000041CA  54                push sp\r
+000041CB  54                push sp\r
+000041CC  55                push bp\r
+000041CD  54                push sp\r
+000041CE  54                push sp\r
+000041CF  54                push sp\r
+000041D0  54                push sp\r
+000041D1  54                push sp\r
+000041D2  54                push sp\r
+000041D3  54                push sp\r
+000041D4  54                push sp\r
+000041D5  54                push sp\r
+000041D6  54                push sp\r
+000041D7  54                push sp\r
+000041D8  54                push sp\r
+000041D9  54                push sp\r
+000041DA  54                push sp\r
+000041DB  55                push bp\r
+000041DC  55                push bp\r
+000041DD  54                push sp\r
+000041DE  54                push sp\r
+000041DF  54                push sp\r
+000041E0  54                push sp\r
+000041E1  54                push sp\r
+000041E2  54                push sp\r
+000041E3  55                push bp\r
+000041E4  55                push bp\r
+000041E5  54                push sp\r
+000041E6  54                push sp\r
+000041E7  54                push sp\r
+000041E8  54                push sp\r
+000041E9  54                push sp\r
+000041EA  55                push bp\r
+000041EB  54                push sp\r
+000041EC  54                push sp\r
+000041ED  54                push sp\r
+000041EE  54                push sp\r
+000041EF  54                push sp\r
+000041F0  54                push sp\r
+000041F1  54                push sp\r
+000041F2  54                push sp\r
+000041F3  54                push sp\r
+000041F4  55                push bp\r
+000041F5  54                push sp\r
+000041F6  55                push bp\r
+000041F7  55                push bp\r
+000041F8  55                push bp\r
+000041F9  55                push bp\r
+000041FA  54                push sp\r
+000041FB  55                push bp\r
+000041FC  54                push sp\r
+000041FD  54                push sp\r
+000041FE  54                push sp\r
+000041FF  55                push bp\r
+00004200  55                push bp\r
+00004201  54                push sp\r
+00004202  54                push sp\r
+00004203  55                push bp\r
+00004204  54                push sp\r
+00004205  54                push sp\r
+00004206  54                push sp\r
+00004207  54                push sp\r
+00004208  54                push sp\r
+00004209  54                push sp\r
+0000420A  55                push bp\r
+0000420B  55                push bp\r
+0000420C  55                push bp\r
+0000420D  55                push bp\r
+0000420E  54                push sp\r
+0000420F  54                push sp\r
+00004210  54                push sp\r
+00004211  54                push sp\r
+00004212  54                push sp\r
+00004213  55                push bp\r
+00004214  55                push bp\r
+00004215  54                push sp\r
+00004216  54                push sp\r
+00004217  54                push sp\r
+00004218  54                push sp\r
+00004219  55                push bp\r
+0000421A  54                push sp\r
+0000421B  54                push sp\r
+0000421C  54                push sp\r
+0000421D  54                push sp\r
+0000421E  54                push sp\r
+0000421F  55                push bp\r
+00004220  55                push bp\r
+00004221  54                push sp\r
+00004222  54                push sp\r
+00004223  54                push sp\r
+00004224  54                push sp\r
+00004225  54                push sp\r
+00004226  54                push sp\r
+00004227  54                push sp\r
+00004228  54                push sp\r
+00004229  54                push sp\r
+0000422A  54                push sp\r
+0000422B  54                push sp\r
+0000422C  54                push sp\r
+0000422D  54                push sp\r
+0000422E  54                push sp\r
+0000422F  54                push sp\r
+00004230  54                push sp\r
+00004231  54                push sp\r
+00004232  54                push sp\r
+00004233  54                push sp\r
+00004234  54                push sp\r
+00004235  54                push sp\r
+00004236  54                push sp\r
+00004237  54                push sp\r
+00004238  54                push sp\r
+00004239  54                push sp\r
+0000423A  55                push bp\r
+0000423B  54                push sp\r
+0000423C  54                push sp\r
+0000423D  54                push sp\r
+0000423E  55                push bp\r
+0000423F  54                push sp\r
+00004240  54                push sp\r
+00004241  55                push bp\r
+00004242  55                push bp\r
+00004243  54                push sp\r
+00004244  54                push sp\r
+00004245  54                push sp\r
+00004246  54                push sp\r
+00004247  54                push sp\r
+00004248  54                push sp\r
+00004249  54                push sp\r
+0000424A  54                push sp\r
+0000424B  55                push bp\r
+0000424C  55                push bp\r
+0000424D  54                push sp\r
+0000424E  54                push sp\r
+0000424F  54                push sp\r
+00004250  54                push sp\r
+00004251  54                push sp\r
+00004252  54                push sp\r
+00004253  54                push sp\r
+00004254  55                push bp\r
+00004255  55                push bp\r
+00004256  55                push bp\r
+00004257  55                push bp\r
+00004258  54                push sp\r
+00004259  54                push sp\r
+0000425A  54                push sp\r
+0000425B  54                push sp\r
+0000425C  54                push sp\r
+0000425D  54                push sp\r
+0000425E  55                push bp\r
+0000425F  55                push bp\r
+00004260  55                push bp\r
+00004261  55                push bp\r
+00004262  54                push sp\r
+00004263  55                push bp\r
+00004264  54                push sp\r
+00004265  54                push sp\r
+00004266  54                push sp\r
+00004267  54                push sp\r
+00004268  55                push bp\r
+00004269  55                push bp\r
+0000426A  55                push bp\r
+0000426B  55                push bp\r
+0000426C  54                push sp\r
+0000426D  54                push sp\r
+0000426E  54                push sp\r
+0000426F  55                push bp\r
+00004270  54                push sp\r
+00004271  54                push sp\r
+00004272  55                push bp\r
+00004273  55                push bp\r
+00004274  55                push bp\r
+00004275  55                push bp\r
+00004276  54                push sp\r
+00004277  54                push sp\r
+00004278  54                push sp\r
+00004279  54                push sp\r
+0000427A  54                push sp\r
+0000427B  54                push sp\r
+0000427C  54                push sp\r
+0000427D  55                push bp\r
+0000427E  55                push bp\r
+0000427F  54                push sp\r
+00004280  54                push sp\r
+00004281  54                push sp\r
+00004282  54                push sp\r
+00004283  54                push sp\r
+00004284  54                push sp\r
+00004285  54                push sp\r
+00004286  54                push sp\r
+00004287  55                push bp\r
+00004288  55                push bp\r
+00004289  54                push sp\r
+0000428A  54                push sp\r
+0000428B  54                push sp\r
+0000428C  54                push sp\r
+0000428D  54                push sp\r
+0000428E  54                push sp\r
+0000428F  54                push sp\r
+00004290  54                push sp\r
+00004291  54                push sp\r
+00004292  54                push sp\r
+00004293  54                push sp\r
+00004294  54                push sp\r
+00004295  54                push sp\r
+00004296  55                push bp\r
+00004297  54                push sp\r
+00004298  54                push sp\r
+00004299  54                push sp\r
+0000429A  54                push sp\r
+0000429B  54                push sp\r
+0000429C  54                push sp\r
+0000429D  54                push sp\r
+0000429E  54                push sp\r
+0000429F  54                push sp\r
+000042A0  55                push bp\r
+000042A1  54                push sp\r
+000042A2  54                push sp\r
+000042A3  54                push sp\r
+000042A4  54                push sp\r
+000042A5  54                push sp\r
+000042A6  55                push bp\r
+000042A7  54                push sp\r
+000042A8  54                push sp\r
+000042A9  54                push sp\r
+000042AA  55                push bp\r
+000042AB  55                push bp\r
+000042AC  54                push sp\r
+000042AD  54                push sp\r
+000042AE  54                push sp\r
+000042AF  55                push bp\r
+000042B0  54                push sp\r
+000042B1  54                push sp\r
+000042B2  54                push sp\r
+000042B3  54                push sp\r
+000042B4  54                push sp\r
+000042B5  54                push sp\r
+000042B6  54                push sp\r
+000042B7  55                push bp\r
+000042B8  55                push bp\r
+000042B9  54                push sp\r
+000042BA  54                push sp\r
+000042BB  54                push sp\r
+000042BC  54                push sp\r
+000042BD  54                push sp\r
+000042BE  54                push sp\r
+000042BF  54                push sp\r
+000042C0  54                push sp\r
+000042C1  55                push bp\r
+000042C2  54                push sp\r
+000042C3  54                push sp\r
+000042C4  54                push sp\r
+000042C5  54                push sp\r
+000042C6  54                push sp\r
+000042C7  54                push sp\r
+000042C8  54                push sp\r
+000042C9  54                push sp\r
+000042CA  55                push bp\r
+000042CB  55                push bp\r
+000042CC  55                push bp\r
+000042CD  55                push bp\r
+000042CE  54                push sp\r
+000042CF  54                push sp\r
+000042D0  54                push sp\r
+000042D1  54                push sp\r
+000042D2  54                push sp\r
+000042D3  55                push bp\r
+000042D4  54                push sp\r
+000042D5  54                push sp\r
+000042D6  54                push sp\r
+000042D7  54                push sp\r
+000042D8  54                push sp\r
+000042D9  55                push bp\r
+000042DA  54                push sp\r
+000042DB  54                push sp\r
+000042DC  54                push sp\r
+000042DD  54                push sp\r
+000042DE  55                push bp\r
+000042DF  55                push bp\r
+000042E0  55                push bp\r
+000042E1  55                push bp\r
+000042E2  54                push sp\r
+000042E3  54                push sp\r
+000042E4  55                push bp\r
+000042E5  66BA120066B8      mov edx,0xb8660012\r
+000042EB  DC34              fdiv qword [si]\r
+000042ED  66F7F3            div ebx\r
+000042F0  88C3              mov bl,al\r
+000042F2  B0B6              mov al,0xb6\r
+000042F4  E643              out 0x43,al\r
+000042F6  88D8              mov al,bl\r
+000042F8  E642              out 0x42,al\r
+000042FA  88E0              mov al,ah\r
+000042FC  E642              out 0x42,al\r
+000042FE  E461              in al,0x61\r
+00004300  0C03              or al,0x3\r
+00004302  E661              out 0x61,al\r
+00004304  C3                ret\r
+00004305  6650              push eax\r
+00004307  E461              in al,0x61\r
+00004309  24FC              and al,0xfc\r
+0000430B  E661              out 0x61,al\r
+0000430D  6658              pop eax\r
+0000430F  C3                ret\r
+00004310  50                push ax\r
+00004311  51                push cx\r
+00004312  E461              in al,0x61\r
+00004314  0C03              or al,0x3\r
+00004316  E661              out 0x61,al\r
+00004318  B93200            mov cx,0x32\r
+0000431B  0000              add [bx+si],al\r
+0000431D  E863EF            call 0x3283\r
+00004320  FF                db 0xFF\r
+00004321  FF                db 0xFF\r
+00004322  E8DEFF            call 0x4303\r
+00004325  FF                db 0xFF\r
+00004326  FF5958            call far [bx+di+0x58]\r
+00004329  C3                ret\r
+0000432A  0000              add [bx+si],al\r
+0000432C  0000              add [bx+si],al\r
+0000432E  0000              add [bx+si],al\r
+00004330  0000              add [bx+si],al\r
+00004332  0000              add [bx+si],al\r
+00004334  0000              add [bx+si],al\r
+00004336  0000              add [bx+si],al\r
+00004338  0000              add [bx+si],al\r
+0000433A  51                push cx\r
+0000433B  891D              mov [di],bx\r
+0000433D  2A4301            sub al,[bp+di+0x1]\r
+00004340  0029              add [bx+di],ch\r
+00004342  D9                db 0xD9\r
+00004343  890D              mov [di],cx\r
+00004345  324301            xor al,[bp+di+0x1]\r
+00004348  00C7              add bh,al\r
+0000434A  052E43            add ax,0x432e\r
+0000434D  0100              add [bx+si],ax\r
+0000434F  0000              add [bx+si],al\r
+00004351  0000              add [bx+si],al\r
+00004353  C7053643          mov word [di],0x4336\r
+00004357  0100              add [bx+si],ax\r
+00004359  0000              add [bx+si],al\r
+0000435B  0000              add [bx+si],al\r
+0000435D  8B0D              mov cx,[di]\r
+0000435F  2E43              cs inc bx\r
+00004361  0100              add [bx+si],ax\r
+00004363  890B              mov [bp+di],cx\r
+00004365  8B0D              mov cx,[di]\r
+00004367  324301            xor al,[bp+di+0x1]\r
+0000436A  00894B04          add [bx+di+0x44b],cl\r
+0000436E  8B0D              mov cx,[di]\r
+00004370  3643              ss inc bx\r
+00004372  0100              add [bx+si],ax\r
+00004374  894B08            mov [bp+di+0x8],cx\r
+00004377  59                pop cx\r
+00004378  C3                ret\r
+00004379  51                push cx\r
+0000437A  52                push dx\r
+0000437B  A12A43            mov ax,[0x432a]\r
+0000437E  0100              add [bx+si],ax\r
+00004380  8B08              mov cx,[bx+si]\r
+00004382  890D              mov [di],cx\r
+00004384  2E43              cs inc bx\r
+00004386  0100              add [bx+si],ax\r
+00004388  8B4804            mov cx,[bx+si+0x4]\r
+0000438B  890D              mov [di],cx\r
+0000438D  324301            xor al,[bp+di+0x1]\r
+00004390  008B4808          add [bp+di+0x848],cl\r
+00004394  890D              mov [di],cx\r
+00004396  3643              ss inc bx\r
+00004398  0100              add [bx+si],ax\r
+0000439A  391D              cmp [di],bx\r
+0000439C  324301            xor al,[bp+di+0x1]\r
+0000439F  007317            add [bp+di+0x17],dh\r
+000043A2  833D36            cmp word [di],byte +0x36\r
+000043A5  43                inc bx\r
+000043A6  0100              add [bx+si],ax\r
+000043A8  007407            add [si+0x7],dh\r
+000043AB  A13643            mov ax,[0x4336]\r
+000043AE  0100              add [bx+si],ax\r
+000043B0  EBCE              jmp short 0x4380\r
+000043B2  31C0              xor ax,ax\r
+000043B4  E98001            jmp 0x4537\r
+000043B7  0000              add [bx+si],al\r
+000043B9  8B0D              mov cx,[di]\r
+000043BB  324301            xor al,[bp+di+0x1]\r
+000043BE  0029              add [bx+di],ch\r
+000043C0  D9                db 0xD9\r
+000043C1  0F841501          jz near 0x44da\r
+000043C5  0000              add [bx+si],al\r
+000043C7  833D36            cmp word [di],byte +0x36\r
+000043CA  43                inc bx\r
+000043CB  0100              add [bx+si],ax\r
+000043CD  00755D            add [di+0x5d],dh\r
+000043D0  833D2E            cmp word [di],byte +0x2e\r
+000043D3  43                inc bx\r
+000043D4  0100              add [bx+si],ax\r
+000043D6  007529            add [di+0x29],dh\r
+000043D9  89C1              mov cx,ax\r
+000043DB  01D9              add cx,bx\r
+000043DD  C7010000          mov word [bx+di],0x0\r
+000043E1  0000              add [bx+si],al\r
+000043E3  8B15              mov dx,[di]\r
+000043E5  324301            xor al,[bp+di+0x1]\r
+000043E8  0029              add [bx+di],ch\r
+000043EA  DA895104          fimul dword [bx+di+0x451]\r
+000043EE  C741080000        mov word [bx+di+0x8],0x0\r
+000043F3  0000              add [bx+si],al\r
+000043F5  890D              mov [di],cx\r
+000043F7  2A4301            sub al,[bp+di+0x1]\r
+000043FA  0089C3E9          add [bx+di+0xe9c3],cl\r
+000043FE  37                aaa\r
+000043FF  0100              add [bx+si],ax\r
+00004401  0089C101          add [bx+di+0x1c1],cl\r
+00004405  D9                db 0xD9\r
+00004406  8B15              mov dx,[di]\r
+00004408  2E43              cs inc bx\r
+0000440A  0100              add [bx+si],ax\r
+0000440C  8911              mov [bx+di],dx\r
+0000440E  8B15              mov dx,[di]\r
+00004410  324301            xor al,[bp+di+0x1]\r
+00004413  0029              add [bx+di],ch\r
+00004415  DA895104          fimul dword [bx+di+0x451]\r
+00004419  C741080000        mov word [bx+di+0x8],0x0\r
+0000441E  0000              add [bx+si],al\r
+00004420  890D              mov [di],cx\r
+00004422  3643              ss inc bx\r
+00004424  0100              add [bx+si],ax\r
+00004426  89C3              mov bx,ax\r
+00004428  E90C01            jmp 0x4537\r
+0000442B  0000              add [bx+si],al\r
+0000442D  833D2E            cmp word [di],byte +0x2e\r
+00004430  43                inc bx\r
+00004431  0100              add [bx+si],ax\r
+00004433  007456            add [si+0x56],dh\r
+00004436  89C1              mov cx,ax\r
+00004438  01D9              add cx,bx\r
+0000443A  8B15              mov dx,[di]\r
+0000443C  2E43              cs inc bx\r
+0000443E  0100              add [bx+si],ax\r
+00004440  8911              mov [bx+di],dx\r
+00004442  8B15              mov dx,[di]\r
+00004444  324301            xor al,[bp+di+0x1]\r
+00004447  0029              add [bx+di],ch\r
+00004449  DA8B1D3A          fimul dword [bp+di+0x3a1d]\r
+0000444D  43                inc bx\r
+0000444E  0100              add [bx+si],ax\r
+00004450  01DA              add dx,bx\r
+00004452  895104            mov [bx+di+0x4],dx\r
+00004455  8B15              mov dx,[di]\r
+00004457  3643              ss inc bx\r
+00004459  0100              add [bx+si],ax\r
+0000445B  833A00            cmp word [bp+si],byte +0x0\r
+0000445E  7412              jz 0x4472\r
+00004460  890A              mov [bp+si],cx\r
+00004462  895108            mov [bx+di+0x8],dx\r
+00004465  890D              mov [di],cx\r
+00004467  3643              ss inc bx\r
+00004469  0100              add [bx+si],ax\r
+0000446B  89C3              mov bx,ax\r
+0000446D  E9C700            jmp 0x4537\r
+00004470  0000              add [bx+si],al\r
+00004472  C7020000          mov word [bp+si],0x0\r
+00004476  0000              add [bx+si],al\r
+00004478  C741080000        mov word [bx+di+0x8],0x0\r
+0000447D  0000              add [bx+si],al\r
+0000447F  890D              mov [di],cx\r
+00004481  3643              ss inc bx\r
+00004483  0100              add [bx+si],ax\r
+00004485  89C3              mov bx,ax\r
+00004487  E9AD00            jmp 0x4537\r
+0000448A  0000              add [bx+si],al\r
+0000448C  89C1              mov cx,ax\r
+0000448E  01D9              add cx,bx\r
+00004490  C7010000          mov word [bx+di],0x0\r
+00004494  0000              add [bx+si],al\r
+00004496  8B15              mov dx,[di]\r
+00004498  324301            xor al,[bp+di+0x1]\r
+0000449B  0029              add [bx+di],ch\r
+0000449D  DA8B1D3A          fimul dword [bp+di+0x3a1d]\r
+000044A1  43                inc bx\r
+000044A2  0100              add [bx+si],ax\r
+000044A4  01DA              add dx,bx\r
+000044A6  895104            mov [bx+di+0x4],dx\r
+000044A9  8B15              mov dx,[di]\r
+000044AB  3643              ss inc bx\r
+000044AD  0100              add [bx+si],ax\r
+000044AF  833A00            cmp word [bp+si],byte +0x0\r
+000044B2  740F              jz 0x44c3\r
+000044B4  890A              mov [bp+si],cx\r
+000044B6  895108            mov [bx+di+0x8],dx\r
+000044B9  890D              mov [di],cx\r
+000044BB  2A4301            sub al,[bp+di+0x1]\r
+000044BE  0089C3EB          add [bx+di+0xebc3],cl\r
+000044C2  76C7              jna 0x448b\r
+000044C4  0200              add al,[bx+si]\r
+000044C6  0000              add [bx+si],al\r
+000044C8  008B4908          add [bp+di+0x849],cl\r
+000044CC  C7010000          mov word [bx+di],0x0\r
+000044D0  0000              add [bx+si],al\r
+000044D2  890D              mov [di],cx\r
+000044D4  3643              ss inc bx\r
+000044D6  0100              add [bx+si],ax\r
+000044D8  89C3              mov bx,ax\r
+000044DA  EB5D              jmp short 0x4539\r
+000044DC  833D36            cmp word [di],byte +0x36\r
+000044DF  43                inc bx\r
+000044E0  0100              add [bx+si],ax\r
+000044E2  007525            add [di+0x25],dh\r
+000044E5  833D2E            cmp word [di],byte +0x2e\r
+000044E8  43                inc bx\r
+000044E9  0100              add [bx+si],ax\r
+000044EB  00750E            add [di+0xe],dh\r
+000044EE  C7052A43          mov word [di],0x432a\r
+000044F2  0100              add [bx+si],ax\r
+000044F4  0000              add [bx+si],al\r
+000044F6  0000              add [bx+si],al\r
+000044F8  89C3              mov bx,ax\r
+000044FA  EB3D              jmp short 0x4539\r
+000044FC  C7053643          mov word [di],0x4336\r
+00004500  0100              add [bx+si],ax\r
+00004502  0000              add [bx+si],al\r
+00004504  0000              add [bx+si],al\r
+00004506  89C3              mov bx,ax\r
+00004508  EB2F              jmp short 0x4539\r
+0000450A  833D2E            cmp word [di],byte +0x2e\r
+0000450D  43                inc bx\r
+0000450E  0100              add [bx+si],ax\r
+00004510  007415            add [si+0x15],dh\r
+00004513  8B0D              mov cx,[di]\r
+00004515  2E43              cs inc bx\r
+00004517  0100              add [bx+si],ax\r
+00004519  8B15              mov dx,[di]\r
+0000451B  3643              ss inc bx\r
+0000451D  0100              add [bx+si],ax\r
+0000451F  895108            mov [bx+di+0x8],dx\r
+00004522  890A              mov [bp+si],cx\r
+00004524  89C3              mov bx,ax\r
+00004526  EB11              jmp short 0x4539\r
+00004528  8B4808            mov cx,[bx+si+0x8]\r
+0000452B  C7010000          mov word [bx+di],0x0\r
+0000452F  0000              add [bx+si],al\r
+00004531  890D              mov [di],cx\r
+00004533  2A4301            sub al,[bp+di+0x1]\r
+00004536  0089C35A          add [bx+di+0x5ac3],cl\r
+0000453A  59                pop cx\r
+0000453B  C3                ret\r
+0000453C  50                push ax\r
+0000453D  53                push bx\r
+0000453E  51                push cx\r
+0000453F  52                push dx\r
+00004540  3B1D              cmp bx,[di]\r
+00004542  2A4301            sub al,[bp+di+0x1]\r
+00004545  000F              add [bx],cl\r
+00004547  82                db 0x82\r
+00004548  BA0000            mov dx,0x0\r
+0000454B  00833D2A          add [bp+di+0x2a3d],al\r
+0000454F  43                inc bx\r
+00004550  0100              add [bx+si],ax\r
+00004552  000F              add [bx],cl\r
+00004554  84AD0000          test [di+0x0],ch\r
+00004558  00A12A43          add [bx+di+0x432a],ah\r
+0000455C  0100              add [bx+si],ax\r
+0000455E  8B5008            mov dx,[bx+si+0x8]\r
+00004561  83FA00            cmp dx,byte +0x0\r
+00004564  747E              jz 0x45e4\r
+00004566  39D3              cmp bx,dx\r
+00004568  7207              jc 0x4571\r
+0000456A  89D0              mov ax,dx\r
+0000456C  8B5008            mov dx,[bx+si+0x8]\r
+0000456F  EBF0              jmp short 0x4561\r
+00004571  8903              mov [bp+di],ax\r
+00004573  894B04            mov [bp+di+0x4],cx\r
+00004576  895308            mov [bp+di+0x8],dx\r
+00004579  895808            mov [bx+si+0x8],bx\r
+0000457C  891A              mov [bp+si],bx\r
+0000457E  01D9              add cx,bx\r
+00004580  39CA              cmp dx,cx\r
+00004582  752B              jnz 0x45af\r
+00004584  50                push ax\r
+00004585  034004            add ax,[bx+si+0x4]\r
+00004588  39C3              cmp bx,ax\r
+0000458A  58                pop ax\r
+0000458B  753A              jnz 0x45c7\r
+0000458D  8B4B04            mov cx,[bp+di+0x4]\r
+00004590  014804            add [bx+si+0x4],cx\r
+00004593  8B4A04            mov cx,[bp+si+0x4]\r
+00004596  014804            add [bx+si+0x4],cx\r
+00004599  8B4A08            mov cx,[bp+si+0x8]\r
+0000459C  894808            mov [bx+si+0x8],cx\r
+0000459F  83F900            cmp cx,byte +0x0\r
+000045A2  0F84AF00          jz near 0x4655\r
+000045A6  0000              add [bx+si],al\r
+000045A8  8901              mov [bx+di],ax\r
+000045AA  E9A800            jmp 0x4655\r
+000045AD  0000              add [bx+si],al\r
+000045AF  39C3              cmp bx,ax\r
+000045B1  0F85A000          jnz near 0x4655\r
+000045B5  0000              add [bx+si],al\r
+000045B7  8B4B04            mov cx,[bp+di+0x4]\r
+000045BA  014804            add [bx+si+0x4],cx\r
+000045BD  8902              mov [bp+si],ax\r
+000045BF  895008            mov [bx+si+0x8],dx\r
+000045C2  E99000            jmp 0x4655\r
+000045C5  0000              add [bx+si],al\r
+000045C7  39CA              cmp dx,cx\r
+000045C9  0F858800          jnz near 0x4655\r
+000045CD  0000              add [bx+si],al\r
+000045CF  8B4A04            mov cx,[bp+si+0x4]\r
+000045D2  014B04            add [bp+di+0x4],cx\r
+000045D5  8B4A08            mov cx,[bp+si+0x8]\r
+000045D8  894B08            mov [bp+di+0x8],cx\r
+000045DB  83F900            cmp cx,byte +0x0\r
+000045DE  7477              jz 0x4657\r
+000045E0  8919              mov [bx+di],bx\r
+000045E2  EB73              jmp short 0x4657\r
+000045E4  8903              mov [bp+di],ax\r
+000045E6  894B04            mov [bp+di+0x4],cx\r
+000045E9  895308            mov [bp+di+0x8],dx\r
+000045EC  895808            mov [bx+si+0x8],bx\r
+000045EF  89C1              mov cx,ax\r
+000045F1  034804            add cx,[bx+si+0x4]\r
+000045F4  39CB              cmp bx,cx\r
+000045F6  755F              jnz 0x4657\r
+000045F8  8B4B04            mov cx,[bp+di+0x4]\r
+000045FB  014804            add [bx+si+0x4],cx\r
+000045FE  8B4B08            mov cx,[bp+di+0x8]\r
+00004601  894808            mov [bx+si+0x8],cx\r
+00004604  EB51              jmp short 0x4657\r
+00004606  C7030000          mov word [bp+di],0x0\r
+0000460A  0000              add [bx+si],al\r
+0000460C  894B04            mov [bp+di+0x4],cx\r
+0000460F  8B15              mov dx,[di]\r
+00004611  2A4301            sub al,[bp+di+0x1]\r
+00004614  00895308          add [bx+di+0x853],cl\r
+00004618  89DA              mov dx,bx\r
+0000461A  035304            add dx,[bp+di+0x4]\r
+0000461D  3B15              cmp dx,[di]\r
+0000461F  2A4301            sub al,[bp+di+0x1]\r
+00004622  007416            add [si+0x16],dh\r
+00004625  833D2A            cmp word [di],byte +0x2a\r
+00004628  43                inc bx\r
+00004629  0100              add [bx+si],ax\r
+0000462B  007405            add [si+0x5],dh\r
+0000462E  8B5308            mov dx,[bp+di+0x8]\r
+00004631  891A              mov [bp+si],bx\r
+00004633  891D              mov [di],bx\r
+00004635  2A4301            sub al,[bp+di+0x1]\r
+00004638  00EB              add bl,ch\r
+0000463A  1C8B              sbb al,0x8b\r
+0000463C  53                push bx\r
+0000463D  088B4A04          or [bp+di+0x44a],cl\r
+00004641  014B04            add [bp+di+0x4],cx\r
+00004644  8B4A08            mov cx,[bp+si+0x8]\r
+00004647  894B08            mov [bp+di+0x8],cx\r
+0000464A  83F900            cmp cx,byte +0x0\r
+0000464D  7402              jz 0x4651\r
+0000464F  8919              mov [bx+di],bx\r
+00004651  891D              mov [di],bx\r
+00004653  2A4301            sub al,[bp+di+0x1]\r
+00004656  005A59            add [bp+si+0x59],bl\r
+00004659  5B                pop bx\r
+0000465A  58                pop ax\r
+0000465B  C3                ret\r
diff --git a/kernel/testkernels etc/vga.inc b/kernel/testkernels etc/vga.inc
new file mode 100755 (executable)
index 0000000..427463e
--- /dev/null
@@ -0,0 +1,482 @@
+;----------------------------------------------------------;\r
+; BOS 0.04                  Christoffer Bubach, 2004-2005. ;\r
+;----------------------------------------------------------;\r
+;                                                          ;\r
+;     VGA functions. Change video mode etc.                ;\r
+;                                                          ;\r
+;----------------------------------------------------------;\r
+\r
+\r
+     ;-------------------;\r
+     ;   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
+\r
+         palette16       db   00, 00, 00, 00, 00, 42, 00, 42, 00, 00, 42, 42, 42\r
+                         db   00, 00, 42, 00, 42, 42, 21, 00, 42, 42, 42, 21, 21\r
+                         db   21, 21, 21, 63, 21, 63, 21, 21, 63, 63, 63, 21, 21\r
+                         db   63, 21, 63, 63, 63, 21, 63, 63, 63\r
+\r
+     ;---------------------;\r
+     ;  VGA mode values.   ;\r
+     ;---------------------;\r
+         mode0x03        db   0x67, 0x00, 0x03, 0x00, 0x03, 0x00, 0x02, 0x5F, 0x4F\r
+                         db   0x50, 0x82, 0x55, 0x81, 0xBF, 0x1F, 0x00, 0x4F, 0x0E\r
+                         db   0x0F, 0x00, 0x00, 0x00, 0x00, 0x9C, 0x0E, 0x8F, 0x28\r
+                         db   0x01, 0x96, 0xB9, 0xA3, 0xFF, 0x00, 0x00, 0x00, 0x00\r
+                         db   0x00, 0x10, 0x0E, 0x00, 0xFF, 0x00, 0x01, 0x02, 0x03\r
+                         db   0x04, 0x05, 0x14, 0x07, 0x38, 0x39, 0x3A, 0x3B, 0x3C\r
+                         db   0x3D, 0x3E, 0x3F, 0x0C, 0x00, 0x0F, 0x08, 0x00\r
+\r
+         mode0x13        db   0x63, 0x00, 0x03, 0x01, 0x0F, 0x00, 0x0E, 0x5F, 0x4F\r
+                         db   0x50, 0x82, 0x54, 0x80, 0xBF, 0x1F, 0x00, 0x41, 0x00\r
+                         db   0x00, 0x00, 0x00, 0x00, 0x00, 0x9C, 0x0E, 0x8F, 0x28\r
+                         db   0x40, 0x96, 0xB9, 0xA3, 0xFF, 0x00, 0x00, 0x00, 0x00\r
+                         db   0x00, 0x40, 0x05, 0x0F, 0xFF, 0x00, 0x01, 0x02, 0x03\r
+                         db   0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C\r
+                         db   0x0D, 0x0E, 0x0F, 0x41, 0x00, 0x0F, 0x00, 0x00\r
+\r
+\r
+         vga_buff        dd   0\r
+\r
+;---------------------------------;\r
+;  sets the screen to mode 0x03   ;\r
+;---------------------------------;\r
+set_mode_0x03:\r
+         pushad\r
+         push    ax\r
+\r
+         mov     esi, mode0x03\r
+         call    set_regs\r
+\r
+         call    load_font                           ; IT WORKS!! FINALLY!\r
+\r
+         mov     esi, palette16\r
+         call    set_palette16\r
+\r
+         pop     ax\r
+         cmp     ax, 1\r
+         jne     .cont\r
+         call    cls                                 ; in text.inc\r
+     .cont:\r
+\r
+         popad\r
+         ret\r
+\r
+\r
+\r
+;---------------------------------;\r
+;  sets the screen to mode 0x13   ;\r
+;---------------------------------;\r
+set_mode_0x13:\r
+         pushad\r
+         push    ax\r
+\r
+         mov     esi, mode0x13\r
+         call    set_regs\r
+\r
+         mov     esi, palette256\r
+         call    set_palette256\r
+\r
+         pop     ax\r
+         cmp     ax, 1\r
+         jne     .cont\r
+         mov     edi, 0xa0000                        ; write directly to mem\r
+         mov     ax, 0x0000                          ; clear all 256kb with color 0\r
+         mov     ecx, 0x20000                        ; 256kb, 0x20000 = (256*1024)/2\r
+         rep     stosw                               ; by wordwrites\r
+     .cont:\r
+\r
+         popad\r
+         ret\r
+\r
+\r
+\r
+;----------------------------;\r
+;  loads the standard font   ;\r
+;----------------------------;\r
+load_font:\r
+         cld\r
+         mov     edi, vga_buff\r
+\r
+         mov     dx, 0x03ce                          ; graphics\r
+         mov     al, 5                               ; write mode reg\r
+         out     dx, al\r
+         inc     dx\r
+         in      al, dx\r
+         stosb\r
+         and     al, 0xfc\r
+         xchg    al, ah\r
+         mov     al, 5\r
+         dec     dx\r
+         out     dx, ax\r
+\r
+         mov     al, 6                               ; misc reg\r
+         out     dx, al\r
+         inc     dx\r
+         in      al, dx\r
+         stosb\r
+         and     al, 0xf1\r
+         or      al, 4\r
+         xchg    al, ah\r
+         mov     al, 6\r
+         dec     dx\r
+         out     dx, ax\r
+\r
+         mov     dx, 0x03c4                          ; sequencer port\r
+         mov     al, 2                               ; map mask reg\r
+         out     dx, al\r
+         inc     dx\r
+         in      al, dx\r
+         stosb\r
+\r
+         dec     dx\r
+         mov     ax, 0x0402\r
+         out     dx, ax\r
+\r
+         mov     al, 4                               ; memory selector reg\r
+         out     dx, al\r
+         inc     dx\r
+         in      al, dx\r
+         stosb\r
+         or      al, 4\r
+         xchg    al, ah\r
+         mov     al, 4\r
+         dec     dx\r
+         out     dx, ax\r
+\r
+         mov     esi, font_8x16                      ; font pointer\r
+         mov     edi, 0xa0000\r
+\r
+         xor     ecx, ecx\r
+         mov     ebx, ecx\r
+\r
+     .l1:\r
+         mov     cl, 16                              ; font bytes (16 is standard)\r
+         rep     movsb\r
+\r
+         mov     cl, 32\r
+         sub     cl, 16                              ; font bytes\r
+         xor     eax, eax\r
+         rep     stosb\r
+\r
+         dec     bl                                  ; 256 chars\r
+         jnz     .l1\r
+\r
+         mov     esi, vga_buff\r
+\r
+         mov     dx, 0x03ce\r
+         lodsb\r
+         xchg    al, ah\r
+         mov     al, 5\r
+         out     dx, ax\r
+\r
+         lodsb\r
+         xchg    al, ah\r
+         mov     al, 6\r
+         out     dx, ax\r
+\r
+         mov     dx, 0x03c4\r
+         lodsb\r
+         xchg    al, ah\r
+         mov     al, 2\r
+         out     dx, ax\r
+\r
+         lodsb\r
+         xchg    al, ah\r
+         mov     al, 4\r
+         out     dx, ax\r
+\r
+         ret\r
+\r
+\r
+\r
+;------------------------------------;\r
+;  put a pixel at x, y with color    ;\r
+;           used only in mode 0x13   ;\r
+;                                    ;\r
+; input:   bx = x                    ;\r
+;          cx = y                    ;\r
+;          al = color                ;\r
+;                                    ;\r
+; output:  none.                     ;\r
+;------------------------------------;\r
+put_0x13_pixel:\r
+         push    ax\r
+         push    bx\r
+         push    cx\r
+         push    edi\r
+\r
+         mov     edi, 0xa0000                        ; directly to mem\r
+         add     di, bx\r
+         mov     bx, cx\r
+         shl     cx, 8\r
+         shl     bx, 6\r
+         add     cx, bx\r
+         add     di, cx\r
+         stosb\r
+\r
+         pop     edi\r
+         pop     cx\r
+         pop     bx\r
+         pop     ax\r
+         ret\r
+\r
+\r
+;-----------------------------------------------------;\r
+;  put a sprite at x, y.  only for mode 0x13          ;\r
+;                                                     ;\r
+; input:   ax  = x, bx = y, cx = width, dx = height   ;\r
+;          esi = pointer to sprite                    ;\r
+;                                                     ;\r
+; output:  none.                                      ;\r
+;-----------------------------------------------------;\r
+put_0x13_sprite:\r
+         pushad                                      ; this was a\r
+     .row_loop:                                      ; nightmare to write.\r
+         dec     dx                                  ; guess how many times\r
+         push    cx                                  ; i got lost in the push\r
+         push    ax                                  ; and pops here.. ;)\r
+     .col_loop:                                      ; not to mention what\r
+         dec     cx                                  ; time it was when i wrote\r
+         push    ax                                  ; it.. :P\r
+         push    bx\r
+         push    cx\r
+         mov     cx, bx\r
+         mov     bx, ax\r
+         lodsb\r
+         call    put_0x13_pixel\r
+         pop     cx\r
+         pop     bx\r
+         pop     ax\r
+         inc     ax\r
+         cmp     cx, 0\r
+         jne     .col_loop\r
+         pop     ax\r
+         pop     cx\r
+         inc     bx\r
+         cmp     dx, 0\r
+         jne     .row_loop\r
+         popad\r
+         ret\r
+\r
+\r
+;---------------------------------------------;\r
+;  sets the palette (256 colors)              ;\r
+;                                             ;\r
+; input:  esi = palette.                      ;\r
+; output: none.                               ;\r
+;---------------------------------------------;\r
+set_palette256:\r
+         push    ax\r
+         push    cx\r
+         push    dx\r
+\r
+         xor     cx, cx\r
+     .l1:\r
+         mov     dx, 0x03C8\r
+         mov     al, cl                              ; color no. = loop no.\r
+         out     dx, al\r
+         inc     dx                                  ; port 0x3C9\r
+         mov     al, byte [esi]                      ; red\r
+         out     dx, al\r
+         inc     esi\r
+         mov     al, byte [esi]                      ; green\r
+         out     dx, al\r
+         inc     esi\r
+         mov     al, byte [esi]                      ; blue\r
+         out     dx, al\r
+         inc     esi\r
+\r
+         inc     cx\r
+         cmp     cx, 256\r
+         jl      .l1\r
+\r
+         pop     dx\r
+         pop     cx\r
+         pop     ax\r
+         ret\r
+\r
+\r
+;---------------------------------------------;\r
+;  sets the palette (16 colors)               ;\r
+;                                             ;\r
+; input:  esi = pointer to palette.           ;\r
+; output: none.                               ;\r
+;---------------------------------------------;\r
+set_palette16:\r
+         push    ax\r
+         push    cx\r
+         push    dx\r
+\r
+         xor     cx, cx\r
+     .l1:\r
+         mov     dx, 0x3DA\r
+         in      al, dx\r
+         mov     al, cl                              ; color no.\r
+         mov     dx, 0x3C0\r
+         out     dx, al\r
+         inc     dx                                  ; port 0x3C1\r
+         in      al, dx\r
+         mov     dx, 0x3C8\r
+         out     dx, al\r
+\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, 16\r
+         jl      .l1\r
+\r
+         mov     dx, 0x3DA\r
+         in      al, dx\r
+         mov     al, 0x20\r
+         mov     dx, 0x3C0\r
+         out     dx, al\r
+\r
+         pop     dx\r
+         pop     cx\r
+         pop     ax\r
+         ret\r
+\r
+\r
+\r
+;---------------------------------;\r
+;  Set VGA regs to choosen mode   ;\r
+;           internal use.         ;\r
+;---------------------------------;\r
+set_regs:\r
+         cli\r
+         mov     dx, 0x3C2\r
+         lodsb\r
+         out     dx, al\r
+\r
+         mov     dx, 0x3DA\r
+         lodsb\r
+         out     dx, al\r
+\r
+         xor     ecx, ecx\r
+         mov     dx, 0x3C4\r
+     .l1:\r
+         lodsb\r
+         xchg    al, ah\r
+         mov     al, cl\r
+         out     dx, ax\r
+         inc     ecx\r
+         cmp     cl, 4\r
+         jbe     .l1\r
+\r
+         mov     dx, 0x3D4\r
+         mov     ax, 0x0E11\r
+         out     dx, ax\r
+\r
+         xor     ecx, ecx\r
+         mov     dx, 0x3D4\r
+     .l2:\r
+         lodsb\r
+         xchg    al, ah\r
+         mov     al, cl\r
+         out     dx, ax\r
+         inc     ecx\r
+         cmp     cl, 0x18\r
+         jbe     .l2\r
+\r
+         xor     ecx, ecx\r
+         mov     dx, 0x3CE\r
+     .l3:\r
+         lodsb\r
+         xchg    al, ah\r
+         mov     al, cl\r
+         out     dx, ax\r
+         inc     ecx\r
+         cmp     cl, 8\r
+         jbe     .l3\r
+\r
+         mov     dx, 0x3DA\r
+         in      al, dx\r
+\r
+         xor     ecx, ecx\r
+         mov     dx, 0x3C0\r
+     .l4:\r
+         in      ax, dx\r
+         mov     al, cl\r
+         out     dx, al\r
+         lodsb\r
+         out     dx, al\r
+         inc     ecx\r
+         cmp     cl, 0x14\r
+         jbe     .l4\r
+\r
+         mov     al, 0x20\r
+         out     dx, al\r
+\r
+         sti\r
+         ret
\ No newline at end of file
diff --git a/utils/FASM.EXE b/utils/FASM.EXE
new file mode 100755 (executable)
index 0000000..6db9d5f
Binary files /dev/null and b/utils/FASM.EXE differ
diff --git a/utils/PARTCOPY.EXE b/utils/PARTCOPY.EXE
new file mode 100755 (executable)
index 0000000..db2c76d
Binary files /dev/null and b/utils/PARTCOPY.EXE differ
diff --git a/utils/fasm b/utils/fasm
new file mode 100755 (executable)
index 0000000..76e55a6
Binary files /dev/null and b/utils/fasm differ