Skip to content

Instantly share code, notes, and snippets.

@pts
Created October 21, 2025 05:27
Show Gist options
  • Save pts/9d94dfc3219553eaa308f67e8cb67d99 to your computer and use it in GitHub Desktop.
Save pts/9d94dfc3219553eaa308f67e8cb67d99 to your computer and use it in GitHub Desktop.
Partially disassembled Minix 1.5 8086 kernel (from pc/disk.03).
; $ ndisasm -b 16 -e 0 -o 0x7c00 -k 0x7e00,-1 pc/disk.03 >biosk.bootblok.ndisasm
; $ ndisasm -b 16 -e 0 -o 0 -k 0x200,-1 pc/disk.03 >biosk.bootblok0.ndisasm
;
; Memory map at boot time:
;
; * 0000:7C00...0000:7E00 0x200 boot sector
;
; Memory map before jumping to the kernel:
;
; * 0000:0580...0000:0600 --- 0x80 boot sector stack (in use before jumping to the kernel)
; * 0060:0000...0850:0000 @0x00200...@0x08100 0x7f00 kernel/kernel code, entry point MINIX at 0x60:0
; * 0850:0000...0850:0010 @0x08100...@0x08110 0x10 kernel/kernel data there is no kernel/kernel bss
; * 0850:0010...0850:0210 @0x08110...@0x08310 0x200 kernel/kernel stack
; * 0871:0000...2644:0000 @0x08310...@0x26040 0x1dd30 kernel/mm, kernel/fs etc.
; * 2644:0000...2680:0000 @0x26040...@0x26400 0x3c0 NUL gap after kernel: may be part of kernel/mm or kernel/fs
; * 2680:0000...27AE:0000 @0x26400...@0x276e0 0x12e0 menu code, entry point at 0x2680:0
; * 2680:0D20...27AE:0000 @0x27120...@0x276e0 0x5c0 menu data and bss
; * 2680:12E0...2680:32E0 @0x276e0...@0x296e0 0x2000 menu stack
; * 29AE:0000...2A00:0000 @0x296e0...@0x29c00 0x520 NUL gap after menu, this will be loaded by the boot setor to the end
; * 2A00:0000...3FA0:0000 --- 0x15a00 memory gap, uninitialized
; * 3FA0:0000...3FA0:0200 @0x00000...@0x00200 0x200 boot sector, entry point at 0x3fa:0x18
;
; Memory map shortly after jumping to the kernel:
;
; * 0060:0000...2644:0000 @0x00200...@0x26040 0x25e40 kernel, entry point at 0x60:0
; * 2644:0000...2680:0000 @0x26040...@0x26400 0x3c0 NUL gap after kernel
;
; When the PC is powered on, it reads the first block from the floppy
; disk into address 0x7C00 and jumps to it. This boot block must contain
; the boot program in this file. The boot program first copies itself to
; address 256K - 1536 (to get itself out of the way). Then it loads the
; operating system from the boot diskette into memory, and then jumps to menu.
; Loading is not trivial because the PC is unable to read a track into
; memory across a 64K boundary, so the positioning of everything is critical.
; The number of sectors to load is contained at address 504 of this block.
; The value is put there by the build program after it has discovered how
; big the operating system is. When the bootblok program is finished loading,
; it jumps indirectly to the program (menu) which address is given by the
; last two words in the boot block.
;
; Summary of the words patched into the boot block by build:
; Word at 504: final: # sectors to load
; Word at 506: menu_ds: # DS value for menu
; Word at 508: menu_pc: # PC (IP) value for menu
; Word at 510: menu_cs: # CS value for menu
;
; This version of the boot block must be assembled without separate I & D
; space.
LOADSEG = 0x0060 ; here the boot block will start loading
BIOSSEG = 0x07C0 ; here the boot block itself is loaded
BOOTSEG = 0x3FA0 ; here it will copy itself (256K-1.5K)
DSKBASE = 120 ; 120 = 4 * 0x1E = ptr to disk parameters
.globl begtext, begdata, begbss, endtext, enddata, endbss ; asld needs these
.text
begtext:
.data
begdata:
.bss
begbss:
.text
; --- This boot sector code starts at file offset @0, the BIOS loads it to 0:0x7c00.
;
; Comments and code copied from source file: pc/disk.12.ex/p/tools/bootblok.s
;
; copy bootblock to bootseg
0000:7C00 B8C007 mov ax, 0x7c0 ; mov ax, #BIOSSEG
0000:7C03 8ED8 mov ds, ax ; mov ds, ax
0000:7C05 31F6 xor si, si ; xor si, si ; ds:si - original block
0000:7C07 B8A03F mov ax, 0x3fa0 ; mov ax, #BOOTSEG
0000:7C0A 8EC0 mov es, ax ; mov es, ax
0000:7CAC 31FF xor di, di ; xor di, di ; es:di - new block
0000:7C0E B90001 mov cx, 0x100 ; mov cx, #256 ; # words to move
0000:7C11 F2A5 repne movsw ; rep movw ; copy loopc
; start boot procedure
0000:7C13 EA1800A03F jmp 0x3fa0:0x18 ; jmpi start, BOOTSEG ; set cs to BOOTSEG
start:
3FA0:0018 8CCA mov dx, cs ; mov dx, cs
3FA0:001A 8EDA mov ds, dx ; mov ds, dx ; set ds to cs
3FA0:001C 31C0 xor ax, ax ; xor ax, ax
3FA0:001E 8EC0 mov es, ax ; mov es, ax ; set es to 0
3FA0:0020 8ED2 mov ss, dx ; mov ss, dx ; set ss to cs i.e., stack in high core
3FA0:0022 BC0006 mov sp, 0x600 ; mov sp, #1536 ; initialize sp to high core
; print greeting
3FA0:0025 B80200 mov ax, 0x2 ; mov ax, #2 ; reset video
3FA0:0028 CD10 int 0x10 ; int 0x10
3FA0:002A B80002 mov ax, 0x200 ; mov ax, #0x0200 ; BIOS call in put cursor in ul corner
3FA0:002D 31DB xor bx, bx ; xor bx, bx
3FA0:002F 31D2 xor dx, dx ; xor dx, dx
3FA0:0031 CD10 int 0x10 ; int 0x10
3FA0:0033 BBA201 mov bx, 0x1a2 ; mov bx, #greet
3FA0:0036 E81C01 call 0x155 ; call print
; Initialize disk parameters
; Try 1.2M diskette by trying to read sector 15
3FA0:0039 31C0 xor ax, ax ; xor ax, ax
3FA0:003B 8EC0 mov es, ax ; mov es, ax
3FA0:003D 8CDA mov dx, ds ; mov dx, ds
3FA0:003F B87601 mov ax, 0x176 ; mov ax, #atpar
3FA0:0042 26A37800 mov [es:0x78], ax ; mov es:DSKBASE, ax
3FA0:0046 2689167A00 mov [es:0x7a], dx ; mov es:DSKBASE+2, dx
3FA0:004B 31C0 xor ax, ax ; xor ax, ax ; reset drive
3FA0:004D CD13 int 0x13 ; int 0x13
3FA0:004F 31C0 xor ax, ax ; xor ax, ax
3FA0:0051 8EC0 mov es, ax ; mov es, ax
3FA0:0053 B80102 mov ax, 0x201 ; mov ax, #0x0201 ; read sector, #sector = 1
3FA0:0056 BB0006 mov bx, 0x600 ; mov bx, #0x0600 ; es:bx buffer
3FA0:0059 B90F00 mov cx, 0xf ; mov cx, #0x000F ; track 0, sector 15
3FA0:005C BA0000 mov dx, 0x0 ; mov dx, #0x0000 ; drive 0, head 0
3FA0:005F CD13 int 0x13 ; int 0x13
3FA0:0061 734C jnc 0xaf ; jnb L1
; Error. It wasn't 1.2M. Now set up for 720K
3FA0:0063 C706DC010900 mov word [0x1dc], 0x9 ; mov tracksiz, #9
3FA0:0069 31C0 xor ax, ax ; xor ax, ax ; ps disk parameters are in ROM F01520
3FA0:006B 8EC0 mov es, ax ; mov es, ax
3FA0:006D B82015 mov ax, 0x1520 ; mov ax, #0x1520
3FA0:0070 26A37800 mov [es:0x78], ax ; mov es:DSKBASE, ax
3FA0:0074 B800F0 mov ax, 0xf000 ; mov ax, #0xF000
3FA0:0077 26A37A00 mov [es:0x7a], ax ; mov es:DSKBASE+2, ax
; Try 720K by trying to read track 64.
; 360K has 40 tracks, 720 has 80 tracks.
3FA0:007B 31C0 xor ax, ax ; xor ax, ax ; diskette reset
3FA0:007D CD13 int 0x13 ; int 0x13
3FA0:007F C706DC010900 mov word [0x1dc], 0x9 ; mov tracksiz, #9
3FA0:0085 31C0 xor ax, ax ; xor ax, ax
3FA0:0087 8EC0 mov es, ax ; mov es, ax
3FA0:0089 B80102 mov ax, 0x201 ; mov ax, #0x0201 ; read sector, number of sectors is 1
3FA0:008C BB0006 mov bx, 0x600 ; mov bx, #0x0600 ; es:bx buffer
3FA0:008F B90140 mov cx, 0x4001 ; mov cx, #0x4001 ; track 64, sector 1
3FA0:0092 BA0000 mov dx, 0x0 ; mov dx, #0x0000 ; drive 0, head 0
3FA0:0095 CD13 int 0x13 ; int 0x13
3FA0:0097 7316 jnc 0xaf ; jnb L1
; Error. It wasn't 720K either. Now set up for 360K
3FA0:0099 31C0 xor ax, ax ; xor ax, ax
3FA0:009B 8EC0 mov es, ax ; mov es, ax
3FA0:009D 8CDA mov dx, ds ; mov dx, ds
3FA0:009F B86B01 mov ax, 0x16b ; mov ax, #pcpar
3FA0:00A2 26A37800 mov [es:0x78], ax ; mov es:DSKBASE, ax
3FA0:00A6 2689167A00 mov [es:0x7a], dx ; mov es:DSKBASE+2, dx
3FA0:00AB 31C0 xor ax, ax ; xor ax, ax ; diskette reset
3FA0:00AD CD13 int 0x13 ; int 0x13
L1:
; Load the operating system from diskette.
load:
3FA0:00AF E84200 call 0xf4 ; call setreg ; set up ah, cx, dx
3FA0:00B2 8B1E6901 mov bx, [0x169] ; mov bx, disksec ; bx = number of next sector to read
3FA0:00B6 83C302 add bx, byte +0x2 ; add bx, #2 ; diskette sector 1 goes at 1536 ("sector" 3)
3FA0:00B9 D1E3 shl bx, 1 ; shl bx, #1 ; multiply sector number by 32
3FA0:00BB D1E3 shl bx, 1 ; shl bx, #1 ; ditto
3FA0:00BD D1E3 shl bx, 1 ; shl bx, #1 ; ditto
3FA0:00BF D1E3 shl bx, 1 ; shl bx, #1 ; ditto
3FA0:00C1 D1E3 shl bx, 1 ; shl bx, #1 ; ditto
3FA0:00C3 8EC3 mov es, bx ; mov es, bx ; core address is es:bx (with bx = 0)
3FA0:00C5 31DB xor bx, bx ; xor bx, bx ; see above
3FA0:00C7 01066901 add [0x169], ax ; add disksec, ax ; ax tells how many sectors to read
3FA0:00CB B402 mov ah, 0x2 ; movb ah, #2 ; opcode for read
3FA0:00CD CD13 int 0x13 ; int 0x13 ; call the BIOS for a read
3FA0:00CF 7273 jc 0x144 ; jb error ; jump on diskette error
3FA0:00D1 A16901 mov ax, [0x169] ; mov ax, disksec ; see if we are done loading
3FA0:00D4 3B06F801 cmp ax, [0x1f8] ; cmp ax, final ; ditto
3FA0:00D8 72D5 jc 0xaf ; jb load ; jump if there is more to load
; Loading done. Finish up.
3FA0:00DA BAF203 mov dx, 0x3f2 ; mov dx, #0x03F2 ; kill the motor
3FA0:00DD B80C00 mov ax, 0xc ; mov ax, #0x000C
3FA0:00E0 EE out dx, al ; out
3FA0:00E1 FA cli ; cli
3FA0:00E2 8B1EDC01 mov bx, [0x1dc] ; mov bx, tracksiz ; menu expects # sectors/track in bx
3FA0:00E6 A1FA01 mov ax, [0x1fa] ; mov ax, menu_ds ; set segment registers
3FA0:00E9 8ED8 mov ds, ax ; mov ds, ax ; when sep I&D DS != CS
3FA0:00EB 8EC0 mov es, ax ; mov es, ax ; otherwise they are the same.
3FA0:00ED 8ED0 mov ss, ax ; mov ss, ax ; words 504 - 510 are patched by build
3FA0:00EF 2EFF2EFC01 jmp far [cs:0x1fc] ; jmpi es:@menu_pc ; jmp to menu
; Given the number of the next disk block to read, disksec, compute the
; cylinder, sector, head, and number of sectors to read as follows:
; ah = # sectors to read; cl = sector #; ch = cyl; dh = head; dl = 0
setreg:
3FA0:00F4 8B36DC01 mov si, [0x1dc] ; mov si, tracksiz ; 9 (PC) or 15 (AT) sectors per track
3FA0:00F8 A16901 mov ax, [0x169] ; mov ax, disksec ; ax = next sector to read
3FA0:00FB 31D2 xor dx, dx ; xor dx, dx ; dx:ax = 32-bit dividend
3FA0:00FD F7F6 div si ; div si ; divide sector # by track size
3FA0:00FF 89C1 mov cx, ax ; mov cx, ax ; cx = track #; dx = sector (0-origin)
3FA0:0101 89D3 mov bx, dx ; mov bx, dx ; bx = sector number (0-origin)
3FA0:0103 A16901 mov ax, [0x169] ; mov ax, disksec ; ax = next sector to read
3FA0:0106 01F0 add ax, si ; add ax, si ; ax = last sector to read + 1
3FA0:0108 48 dec ax ; dec ax ; ax = last sector to read
3FA0:0109 31D2 xor dx, dx ; xor dx, dx ; dx:ax = 32-bit dividend
3FA0:010B F736DC01 div word [0x1dc] ; div tracksiz ; divide last sector by track size
3FA0:010F 38C8 cmp al, cl ; cmpb al, cl ; is starting track = ending track
3FA0:0111 7403 jz 0x116 ; je set1 ; jump if whole read on 1 cylinder
3FA0:0113 29D6 sub si, dx ; sub si, dx ; compute lower sector count
3FA0:0115 4E dec si ; dec si ; si = # sectors to read
; Check to see if this read crosses a 64K boundary (128 sectors).
; Such calls must be avoided. The BIOS gets them wrong.
set1:
3FA0:0116 A16901 mov ax, [0x169] ; mov ax, disksec ; ax = next sector to read
3FA0:0119 050200 add ax, 0x2 ; add ax, #2 ; disk sector 1 goes in core sector 3
3FA0:011C 89C2 mov dx, ax ; mov dx, ax ; dx = next sector to read
3FA0:011E 01F2 add dx, si ; add dx, si ; dx = one sector beyond end of read
3FA0:0120 4A dec dx ; dec dx ; dx = last sector to read
3FA0:0121 D1E0 shl ax, 1 ; shl ax, #1 ; ah = which 64K bank does read start at
3FA0:0123 D1E2 shl dx, 1 ; shl dx, #1 ; dh = which 64K bank foes read end in
3FA0:0125 38F4 cmp ah, dh ; cmpb ah, dh ; ah != dh means read crosses 64K boundary
3FA0:0127 7407 jz 0x130 ; je set2 ; jump if no boundary crossed
3FA0:0129 D0EA shr dl, 1 ; shrb dl, #1 ; dl = excess beyond 64K boundary
3FA0:012B 30F6 xor dh, dh ; xorb dh, dh ; dx = excess beyond 64K boundary
3FA0:012D 29D6 sub si, dx ; sub si, dx ; adjust si
3FA0:012F 4E dec si ; dec si ; si = number of sectors to read
set2:
3FA0:0130 89F0 mov ax, si ; mov ax, si ; ax = number of sectors to read
3FA0:0132 31D2 xor dx, dx ; xor dx, dx ; dh = head, dl = drive
3FA0:0134 88CE mov dh, cl ; movb dh, cl ; dh = track
3FA0:0136 80E601 and dh, 0x1 ; andb dh, #0x01 ; dh = head
3FA0:0139 88CD mov ch, cl ; movb ch, cl ; ch = track to read
3FA0:013B D0ED shr ch, 1 ; shrb ch, #1 ; ch = cylinder
3FA0:013D 88D9 mov cl, bl ; movb cl, bl ; cl = sector number (0-origin)
3FA0:013F FEC1 inc cl ; incb cl ; cl = sector number (1-origin)
3FA0:0141 30D2 xor dl, dl ; xorb dl, dl ; dl = drive number (0)
3FA0:0143 C3 ret ; ret ; return values in ax, cx, dx
; --- error & print routines
error:
3FA0:0144 50 push ax ; push ax
3FA0:0145 BB8101 mov bx, 0x181 ; mov bx, #fderr
3FA0:0148 E80A00 call 0x155 ; call print ; print msg
3FA0:014B 31C9 xor cx, cx ; xor cx, cx
err1:
3FA0:014D F7260000 mul word [0x0] ; mul 0 ; delay
3FA0:0151 E2FA loop 0x14d ; loop err1
3FA0:0153 CD19 int 0x19 ; int 0x19
print:
; print string (bx)
3FA0:0155 8A07 mov al, [bx] ; movb al, (bx) ; al contains char to be printed
3FA0:0157 84C0 test al, al ; testb al, al ; null char?
3FA0:0159 7501 jnz 0x15c ; jne prt1 ; no
3FA0:015B C3 ret ; ret ; else return
prt1:
3FA0:015C B40E mov ah, 0xe ; movb ah, #14 ; 14 = print char
3FA0:015E 43 inc bx ; inc bx ; increment string pointer
3FA0:015F 53 push bx ; push bx ; save bx
3FA0:0160 B301 mov bl, 0x1 ; movb bl, #1 ; foreground color
3FA0:0162 30FF xor bh, bh ; xorb bh, bh ; page 0
3FA0:0164 CD10 int 0x10 ; int 0x10 ; call BIOS VIDEO_IO
3FA0:0166 5B pop bx ; pop bx ; restore bx
3FA0:0167 EBEC jmp short 0x155 ; jmp print ; next character
3FA0:0169 0100 dw 1 ; disksec: .word 1
3FA0:016B DF02190209... db ... ; pcpar: .byte 0xDF, 0x02, 25, 2, 9, 0x2A, 0xFF, 0x50, 0xF6, 1, 3 ; for pc
3FA0:0176 DF02190219... db ... ; atpar: .byte 0xDF, 0x02, 25, 2, 15, 0x1B, 0xFF, 0x54, 0xF6, 1, 8 ; for at
3FA0:0181 5265616420... db ... ; fderr: .asciz "Read error. Automatic reboot.\r\n"
3FA0:01A2 0D426F6F74... db ... ; greet: .asciz "\rBooting MINIX 1.5. Copyright 1991 Prentice-Hall, Inc.\r\n"
3FA0:01DB 000F dw 0xf ; tracksiz: .word 15 ; changed to 9 for ps and pc
.text
endtext:
.data
enddata:
.bss
endbss:
3FA0:01DD 0000000000... times 29 db 0 ; Padding.
; These have been filled in by buil.d.
3FA0:01F8 4D01 dw 0x14d ; final: .word 0x14d
3FA0:01FA 8026 dw 0x2680 ; menu_ds: .word 0x2680
3FA0:01FC 0000 dw 0 ; menu_pc: .word 0
3FA0:01FE 8026 dw 0x2680 ; menu_cs: .word 0x2680
3FA0:0200
; --- Now comes the kernel.
;
; $ ndisasm -b 16 -e 0x200 -o 0 -k 0x25e40,-1 pc/disk.03 >biosk.kernel.ndisasm
;
; It starts with assembly code, comments and code copied from pc/disk.11.ex/p/kernel/start.x
;
; This file contains the assembler startup code for Minix.
; It cooperates with cstart.c to set up a good environment for main().
; It contains the following routines:
;
;.define _db ; trap to external debugger
;.define _get_chrome ; returns nonzero if display is color
;.define _get_ega ; returns nonzero if display is ega
;.define _get_ext_memsize ; returns amount of extended memory in K
;.define _get_low_memsize ; returns amount of low memory in K
;.define _get_processor ; returns processor type (86, 186, 286, 386)
;.define _get_word ; returns word at given segment:offset
;.define _put_word ; writes given word to given segment:offset
; All except db() only work in real mode, so must not be called by main() or
; later.
; Imported functions.
.extern _cstart
.extern _main
; Exported variables.
; Imported variables.
.extern _gdt
#include <minix/config.h>
#include <minix/const.h>
#include <minix/com.h>
#include "const.h"
#include "protect.h"
#include "sconst.h"
/* Memory is allocated in clicks. */
#if (CHIP == INTEL) || (CHIP == M68000)
#define CLICK_SIZE 256 /* unit in which memory is allocated */
#define CLICK_SHIFT 8 /* log2 of CLICK_SIZE */
#endif
#define K_STACK_BYTES 512 /* how many bytes for the kernel stack */
/* BIOS software interrupts, subfunctions and return values. */
#define EQUIPMENT_CHECK 0x11
# define EDISPLAY_MASK 0x30 /* mask for video display equipment */
# define EMONO_DISPLAY 0x30 /* value for mono disply */
#define GET_EXTMEM_VEC 0x15 /* get extended memory size */
# define GET_EXTMEM_FUNC 0x88
#define GET_MEM_VEC 0x12 /* get memory size */
#define SET_PROTECT_VEC 0x15 /* set protected mode */
# define SET_PROTECT_FUNC 0x89
#define VIDEO 0x10
# define ALTERNATE_SELECT 0x12
# define A_S_INFO 0x10
MINIX: ; Entry point for the MINIX kernel.
; Inputs: CS == 0x60; IP == 0.
; Inputs: SS:SP: arbitrary, must be valid only if IF == 0.
; Inputs: AX == 0 (indicating that DI:SI points to the boot_parameters).
; Inputs: BX == scancode of '=' (0xd on the PC keyboard).
; Inputs: DI:SI == far pointer to the boot_parameters struct; CX == 0xa == 10 (size of the boot_parameters struct)
; Inputs: BP (arbitrary); DX (arbitrary); FLAGS (mostly arbitrary, IF and DF don't matter); DS (arbitrary), ES (arbitrary).
;
; Description of the boot_parameters struct and the default values:
;
; boot_parameters:
; ; `struct bparam_s' type defined in pc/disk.12.ex/p/include/minix/boot.h .
; ; `struct bparam_s boot_parameters' variable defined in pc/disk.12.ex/p/tools/menu.c
; .bp_rootdev: dw 0x100 ; DROOTDEV.
; .bp_ramimagedev: dw 0x200 ; DRAMIMAGEDEV. Only used if .bp_rootdev == DEV_RAM (ramdisk).
; .bp_ramsize: dw 0 ; DRAMSIZE. Default RAM disk size. Not used if root is /dev/ram when size is from root image.
; .bp_scancode: dw 13 ; DSCANCODE. Scancode of '=' (0xd on the PC keyboard). Also put to BX.
; .bp_processor: dw 0xffff ; DPROCESSOR. 88 would force 386 to 88).Default processor type for no restriction is 0xfff.
;
; Values for .bp_rootdev and .bp_ramimagedev:
DEV_FD0 equ 0x200 ; GRUB (fd0): First floppy.
DEV_HD0 equ 0x300 ; GRUB (hd0): Start of first hard disk.
DEV_HD1 equ 0x301 ; GRUB (hd0,1): First hard disk, partition 1.
DEV_HD2 equ 0x302 ; GRUB (hd0,2): First hard disk, partition 2.
DEV_HD3 equ 0x303 ; GRUB (hd0,3): First hard disk, partition 3.
DEV_HD4 equ 0x304 ; GRUB (hd0,4): First hard disk, partition 4.
DEV_RAM equ 0x100 ; Ramdisk.
0060:0000 EB04 jmp short 0x6 ; j over_kernel_ds ; skip over the next few bytes
0060:0002 005A dw 0x5a00 ; .word CLICK_SHIFT ; for build, later used by db for syms offset
kernel_ds:
0060:0004 5008 dw 0x850 ; .word 0 ; build puts kernel DS here at fixed address 4
over_kernel_ds:
0060:0006 FA cli ; cli ; disable interrupts
0060:0007 FC cld ; cld ; C compiler needs es = ds and direction = up
; Set up kernel segment registers and stack.
; The old fsck1.s sets up an invalid stack, so the above cli is beside the
; point, and a debugger trap here would crash.
0060:0008 2E8B160400 mov dx, [cs:0x4] ; mov dx, cs:kernel_ds ; dx is the only free register
0060:000D 8EDA mov ds, dx ; mov ds, dx
0060:000F 8EC2 mov es, dx ; mov es, dx
0060:0011 8ED2 mov ss, dx ; mov ss, dx
0060:0013 BC1002 mov sp, 0x210 ; mov sp, #k_stktop ; set sp to point to the top of kernel stack
; Call C startup code to prepare for switching modes.
0060:0016 1E push ds ; push ds
0060:0017 0E push cs ; push cs
0060:0018 57 push di ; push di ; Segment of boot_parameters if AX == 0.
0060:0019 56 push si ; push si ; Offset of boot_parameters if AX == 0.
0060:001A 52 push dx ; push dx ; Passed but not used.
0060:001B 51 push cx ; push cx ; sizeof(boot_parameters) or size of the environment variables, typically 10.
0060:001C 53 push bx ; push bx ; Scancode, typically 13 (for '=').
0060:001D 50 push ax ; push ax ; Boot code: 0 means boot_parameters, 0x100 means environment variables.
0060:001E E88B00 call 0xac ; call _cstart
0060:0021 83C410 add sp, byte +0x10 ; add sp, #8*2
; After switching to protected mode, the CPU may be in 32-bit mode, which has
; different instruction decoding, so "jmp _main" would fail.
; Fake a 32-bit return address to get around this ("ret" is the same in 32-bit
; mode apart from popping 32 bits).
0060:0024 29C0 sub ax, ax ; sub ax, ax
0060:0026 50 push ax ; push ax ; becomes harmless junk in 16-bit mode
0060:0027 B8A516 mov ax, 0x16a5 ; mov ax, #_main
0060:002A 50 push ax ; push ax
; Call the BIOS to switch to protected mode.
; This is just to do any cleanup necessary, typically to disable a hardware
; kludge which holds the A20 address line low.
;
; The call requires the gdt as set up by prot_init():
; gdt pointer in gdt[1]
; ldt pointer in gdt[2]
; new ds in gdt[3]
; new es in gdt[4]
; new ss in gdt[5]
; new cs in gdt[6]
; nothing in gdt[7] (overwritten with BIOS cs)
; ICW2 for master 8259 in bh
; ICW2 for slave 8259 in bl
; The BIOS enables interrupts briefly - this is OK since the BIOS vectors
; are still valid.
; Most registers are destroyed.
; The 8259's are reinitialised.
0060:002B BE7C16 mov si, 0x167c ; mov si, #_gdt
0060:002E BB3028 mov bx, 0x2830 ; mov bx, #IRQ0_VECTOR * 256 + IRQ8_VECTOR
0060:0031 B489 mov ah, 0x89 ; movb ah, #SET_PROTECT_FUNC
0060:0033 CD15 int 0x15 ; int SET_PROTECT_VEC
; Now the processor is in protected mode.
; There is a little more protected mode initialization to do, but leave it
; to main(), to avoid using incompatible instructions here.
0060:0035 C3 ret ; ret ; "return" to _main
; PUBLIC void db();
; Trap to external debugger.
; This may be called from all modes (real or protected, 16 or 32-bit).
_db:
0060:0036 CC int3 ; int 3
0060:0037 C3 ret ; ret
; PUBLIC u16_t get_chrome();
; Call the BIOS to find out if the display is color.
_get_chrome:
0060:0038 CD11 int 0x11 ; int EQUIPMENT_CHECK ; get bit pattern for equipment
0060:003A 253000 and ax, 0x30 ; and ax, #EDISPLAY_MASK ; isolate color/mono field
0060:003D 2D3000 sub ax, 0x30 ; sub ax, #EMONO_DISPLAY ; nonzero means it is color
0060:0040 C3 ret ; ret
; PUBLIC u16_t get_ega();
; Call the BIOS to find out if the display is EGA.
; (Actually this only tells if the BIOS supports EGA, not whether the
; screen is EGA. Doing it right is far more complicated.)
_get_ega:
0060:0041 B310 mov bl, 0x10 ; movb bl, #A_S_INFO ; get info about
0060:0043 B412 mov ah, 0x12 ; movb ah, #ALTERNATE_SELECT ; alternative display types
0060:0045 CD10 int 0x10 ; int VIDEO ; this will fail for non-EGA BIOS
0060:0047 88D8 mov al, bl ; movb al, bl ; success is determined by knowing
0060:0049 B400 mov ah, 0x0 ; movb ah, #0 ; a successful call will change bl
0060:004B 2D1000 sub ax, 0x10 ; sub ax, #A_S_INFO ; nonzero means it is EGA
0060:004E C3 ret ; ret
; PUBLIC u16_t get_ext_memsize();
; Ask the BIOS how much extended memory there is.
_get_ext_memsize:
0060:004F 9C pushf ; pushf ; gak!, PC's set the interrupt enable flag
0060:0050 B488 mov ah, 0x88 ; movb ah, #GET_EXTMEM_FUNC
0060:0052 F8 clc ; clc ; carry will stay clear if call exists
0060:0053 CD15 int 0x15 ; int GET_EXTMEM_VEC ; returns size (in K) in ax for AT's
0060:0055 7302 jnc 0x59 ; jnc got_ext_memsize ; error, probably a PC
0060:0057 29C0 sub ax, ax ; sub ax, ax
got_ext_memsize:
0060:0059 9D popf ; popf
0060:005A C3 ret ; ret
; PUBLIC u16_t get_low_memsize();
; Ask the BIOS how much normal memory there is.
_get_low_memsize:
0060:005B CD12 int 0x12 ; int GET_MEM_VEC ; returns the size (in K) in ax
0060:005D C3 ret ; ret
; PUBLIC u16_t get_processor();
; Decide processor type among 8088=8086, 80188=80186, 80286, 80386.
; Return 86, 186, 286 or 386.
; Preserves all registers except the flags and the return register ax.
;
; Method:
; 8088=8086 and 80188=80186 push sp as new sp, 80286 and 80386 as old sp.
; All but 8088=8086 do shifts mod 32 or 16.
; 386 stores 0 for the upper 8 bits of the GDT pointer in 16 bit mode,
; while 286 stores 0xFF.
_get_processor:
0060:005E 54 push sp ; push sp ; see if pushed sp == sp
0060:005F 58 pop ax ; pop ax
0060:0060 39E0 cmp ax, sp ; cmp ax, sp
0060:0062 7410 jz 0x74 ; jz new_processor
0060:0064 51 push cx ; push cx ; see if shifts are mod 32
0060:0065 B92001 mov cx, 0x120 ; mov cx, #0x0120
0060:0068 D2E5 shl ch, cl ; shlb ch, cl ; zero tells if 86
0060:006A 59 pop cx ; pop cx
0060:006B B85600 mov ax, 0x56 ; mov ax, #86
0060:006E 741E jz 0x8e ; jz got_processor
0060:0070 B8BA00 mov ax, 0xba ; mov ax, #186
0060:0073 C3 ret ; ret
new_processor:
0060:0074 55 push bp ; push bp ; see if high bits are set in saved GDT
0060:0075 89E5 mov bp, sp ; mov bp, sp
0060:0077 83EC06 sub sp, byte +0x6 ; sub sp, #6 ; space for GDT ptr
0060:007A 0F0146FA sgdt [bp-0x6] ; defsgdt (-6(bp)) ; save 3 word GDT ptr
0060:007E 83C404 add sp, byte +0x4 ; add sp, #4 ; discard 2 words of GDT ptr
0060:0081 58 pop ax ; pop ax ; top word of GDT ptr
0060:0082 5D pop bp ; pop bp
0060:0083 80FC00 cmp ah, 0x0 ; cmpb ah, #0 ; zero only for 386
0060:0086 B81E01 mov ax, 0x11e ; mov ax, #286
0060:0089 7503 jnz 0x8e ; jnz got_processor
0060:008B B88201 mov ax, 0x182 ; mov ax, #386
got_processor:
0060:008E C3 ret ; ret
; PUBLIC u16_t get_word(u16_t segment, u16_t *offset);
; Load and return the word at the far pointer segment:offset.
_get_word:
0060:008F 8CD9 mov cx, ds ; mov cx, ds ; save ds
0060:0091 5A pop dx ; pop dx ; return adr
0060:0092 1F pop ds ; pop ds ; segment
0060:0093 5B pop bx ; pop bx ; offset
0060:0094 83EC04 sub sp, byte +0x4 ; sub sp, #2+2 ; adjust for parameters popped
0060:0097 8B07 mov ax, [bx] ; mov ax, (bx) ; load the word to return
0060:0099 8ED9 mov ds, cx ; mov ds, cx ; restore ds
0060:009B FFE2 jmp dx ; jmp (dx) ; return
; PUBLIC void put_word(u16_t segment, u16_t *offset, u16_t value);
; Store the word value at the far pointer segment:offset.
_put_word:
0060:009D 8CD9 mov cx, ds ; mov cx, ds ; save ds
0060:009F 5A pop dx ; pop dx ; return adr
0060:00A0 1F pop ds ; pop ds ; segment
0060:00A1 5B pop bx ; pop bx ; offset
0060:00A2 58 pop ax ; pop ax ; value
0060:00A3 83EC06 sub sp, byte +0x6 ; sub sp, #2+2+2 ; adjust for parameters popped
0060:00A6 8907 mov [bx], ax ; mov (bx), ax ; store the word
0060:00A8 8ED9 mov ds, cx ; mov ds, cx ; restore ds
0060:00AA FFE2 jmp dx ; jmp (dx) ; return
.data
begdata:
.bss
begbss:
; End of code (and data declarations) in pc/disk.11.ex/p/kernel/start.x
_cstart:
; In pc/disk.11.ex/p/kernel/cstart.c
0060:00AC ...
...
0060:009D ...
...
0060:7E4C 0000000000...00 times 0x7f00-0x7e4c db 0 ; Alignment padding.
kernel_data: ; kernel_ds points here.
_sizes: ; Filled in by build: ; sizes of kernel, mm, fs.
0850:0000 7F00 kernel_code_size_para: dw 0x7f ; .word 0x526F ; this must be the first data entry (magic #); build has overwritten it.
0850:0002 8600 kernel_data_size_para: dw 0x86 ; .word CLICK_SHIFT ; consistency check for build; build has overwritten it.
0850:0004 2800 dw 0x28
0850:0006 2C00 dw 0x2c
0850:0008 5800 dw 0x58
0850:000A 9A00 dw 0x9a
0850:000C 0000 dw 0
0850:000E 1700 dw 0x17
k_stack:
0850:0010 000000...00 times K_STACK_BYTES db 0 ; 0x200 == 512. Kernel stack.
0871:0000
...
2644:0000 00... times 0x3c0 ; NUL gap after kernel.
; --- Now comes the menu.
;
; It starts with assembly code, comments and code copied from pc/disk.12.ex/p/tools/menu1.s
MENU_STACKSIZE = 8192
.globl _main, _exit, _edata, _end, _putc, _getc, _reset_diskette, _diskio
.globl csv, cret, begtext, begdata, begbss
.globl _cylsiz, _tracksiz, _drive, _boot_parameters
.text
begtext:
start:
menu:
; It starts with assembly code in pc/disk.12.ex/p/tools/menu1.s
menu_entry:
; Inputs: CS == DS == ES == 0x2680; IP == 0.
; Inputs: IF == 0 (interrupts disabled); rest of FLAGS is arbitrary.
; Inputs: SS == 0; SP is 0x600 or a bit less.
; Inputs: BX == sectors per track.
2680:0000 89DA mov dx, bx ; mov dx, bx ; bootblok puts # sectors/track in bx
2680:0002 31C0 xor ax, ax ; xor ax, ax
2680:0004 BBE012 mov bx, 0x12e0 ; mov bx, #_edata ; prepare to clear bss
2680:0007 B90637 mov cx, 0x3706 ; mov cx, #_end
2680:000A 29D9 sub cx, bx ; sub cx, bx
2680:000C D1F9 sar cx, 1 ; sar cx, *1
st.1:
2680:000E 8907 mov [bx], ax ; mov (bx), ax ; clear bss
2680:0010 83C302 add bx, byte +0x2 ; add bx, #2
2680:0013 E2F9 loop 0xe ; loop st.1
2680:0015 8916E636 mov [0x36e6], dx ; mov _tracksiz, dx ; dx (was bx) is # sectors/track
2680:0019 01D2 add dx, dx ; add dx, dx
2680:001B 8916E836 mov [0x36e8], dx ; mov _cylsiz, dx ; # sectors/cylinder
2680:001F BCE032 mov sp, 0x32e0 ; mov sp, #menu_stack+MENU_STACKSIZE
2680:0022 E82A05 call 0x54f ; call _main
2680:0025 89C3 mov bx, ax ; mov bx, ax ; put scancode for '=' in bx. The scancode of '=' is 0xd == 13.
2680:0027 29C0 sub ax, ax ; sub ax, ax ; ax == 0 to show new boot (was scancode)
2680:0029 BE260D mov si, 0xd26 ; mov si, #_boot_parameters ; pointer to boot parameters in di:si
2680:002C 8CDF mov di, ds ; mov di, ds
2680:002E B90A00 mov cx, 0xa ; mov cx, #10 ; sizeof structure in cx
; next 'cli' and setting up segs is redundant, and the segments are wrong for sep I&D
2680:0031 FA cli ; cli
2680:0032 BA6000 mov dx, 0x60 ; mov dx, #0x60
2680:0035 8EDA mov ds, dx ; mov ds, dx
2680:0037 8EC2 mov es, dx ; mov es, dx
2680:0039 8ED2 mov ss, dx ; mov ss, dx
2680:003B EA00006000 jmp 0x60:0x0 ; jmpi 0, 0x60 ; jmp to kernel
_exit:
2680:0040 8B1EE636 mov bx, [0x36e6] ; mov bx, _tracksiz
2680:0044 EBBA jmp short 0x0 ; jmp start
_putc:
2680:0046 31C0 xor ax, ax ; xor ax, ax
2680:0048 E89D00 call 0xe8 ; call csv
2680:004B 8A4604 mov al, [bp+0x4] ; movb al, 4(bp) ; al contains char to be printed
2680:004E B40E mov ah, 0xe ; movb ah, #14 ; 14 = print char
2680:0050 B301 mov bl, 0x1 ; movb bl, *1 ; foreground color
2680:0052 55 push bp ; push bp ; not preserved
2680:0053 CD10 int 0x10 ; int 0x10 ; call BIOS VIDEO_IO
2680:0055 5D pop bp ; pop bp
2680:0056 E99900 jmp 0xf2 ; jmp cret
_getc:
2680:0059 30E4 xor ah, ah ; xorb ah, ah
2680:005B CD16 int 0x16 ; int 0x16
2680:005D C3 ret ; ret
_reset_diskette:
2680:005E 31C0 xor ax, ax ; xor ax, ax
2680:0060 E88500 call 0xe8 ; call csv
2680:0063 06 push es ; push es ; not preserved
2680:0064 CD13 int 0x13 ; int 0x13 ; call BIOS DISKETTE_IO
2680:0066 07 pop es ; pop es
2680:0067 E98800 jmp 0xf2 ; jmp cret
; handle diskio(RW, sector_number, buffer, sector_count) call
; Do not issue a BIOS call that crosses a track boundary
_diskio:
2680:006A 31C0 xor ax, ax ; xor ax, ax
2680:006C E87900 call 0xe8 ; call csv
2680:006F C706220D0000 mov word [0xd22], 0x0 ; mov tmp1, #0 ; tmp1 = # sectors actually transferred
2680:0075 8B7E0A mov di, [bp+0xa] ; mov di, 10(bp) ; di = # sectors to transfer
2680:0078 893E240D mov [0xd24], di ; mov tmp2, di ; di = # sectors to transfer
d0:
2680:007C 8B4606 mov ax, [bp+0x6] ; mov ax, 6(bp) ; ax = sector number to start at
2680:007F 31D2 xor dx, dx ; xor dx, dx ; dx:ax is dividend
2680:0081 F736E836 div word [0x36e8] ; div _cylsiz ; ax = cylinder, dx = sector within cylinder
2680:0085 88E1 mov cl, ah ; movb cl, ah ; cl = hi-order bits of cylinder
2680:0087 D0C9 ror cl, 1 ; rorb cl, #1 ; BIOS expects hi bits in a funny place
2680:0089 D0C9 ror cl, 1 ; rorb cl, #1 ; ditto
2680:008B 88C5 mov ch, al ; movb ch, al ; cx = sector # in BIOS format
2680:008D 89D0 mov ax, dx ; mov ax, dx ; ax = sector offset within cylinder
2680:008F 31D2 xor dx, dx ; xor dx, dx ; dx:ax is dividend
2680:0091 F736E636 div word [0x36e6] ; div _tracksiz ; ax = head, dx = sector
2680:0095 88C6 mov dh, al ; movb dh, al ; dh = head
2680:0097 08D1 or cl, dl ; orb cl, dl ; cl = 2 high-order cyl bits || sector
2680:0099 FEC1 inc cl ; incb cl ; BIOS counts sectors starting at 1
2680:009B 8A16EC36 mov dl, [0x36ec] ; movb dl, _drive ; dl = drive code (0-3 or 0x80 - 0x81)
2680:009F 8B5E08 mov bx, [bp+0x8] ; mov bx, 8(bp) ; bx = address of buffer
2680:00A2 88C8 mov al, cl ; movb al, cl ; al = sector #
2680:00A4 02460A add al, [bp+0xa] ; addb al, 10(bp) ; compute last sector
2680:00A7 FEC8 dec al ; decb al ; al = last sector to transfer
2680:00A9 3A06E636 cmp al, [0x36e6] ; cmpb al, _tracksiz ; see if last sector is on next track
2680:00AD 7E05 jng 0xb4 ; jle d1 ; jump if last sector is on this track
2680:00AF C7460A0100 mov word [bp+0xa], 0x1 ; mov 10(bp), #1 ; transfer 1 sector at a time
d1:
2680:00B4 8A6604 mov ah, [bp+0x4] ; movb ah, 4(bp) ; ah = READING or WRITING
2680:00B7 80C402 add ah, 0x2 ; addb ah, *2 ; BIOS codes are 2 and 3, not 0 and 1
2680:00BA 8A460A mov al, [bp+0xa] ; movb al, 10(bp) ; al = # sectors to transfer
2680:00BD A3200D mov [0xd20], ax ; mov tmp, ax ; al is # sectors to read/write
2680:00C0 06 push es ; push es ; BIOS ruins es
2680:00C1 CD13 int 0x13 ; int 0x13 ; issue BIOS call
2680:00C3 07 pop es ; pop es ; restore es
2680:00C4 80FC00 cmp ah, 0x0 ; cmpb ah, *0 ; ah != 0 means BIOS detected error
2680:00C7 751D jnz 0xe6 ; jne d2 ; exit with error
2680:00C9 A1200D mov ax, [0xd20] ; mov ax, tmp ; fetch count of sectors transferred
2680:00CC 30E4 xor ah, ah ; xorb ah, ah ; count is in ax
2680:00CE 0106220D add [0xd22], ax ; add tmp1, ax ; tmp1 accumulates sectors transferred
2680:00D2 8B36220D mov si, [0xd22] ; mov si, tmp1 ; are we done yet?
2680:00D6 3B36240D cmp si, [0xd24] ; cmp si, tmp2 ; ditto
2680:00DA 740A jz 0xe6 ; je d2 ; jump if done
2680:00DC FF4606 inc word [bp+0x6] ; inc 6(bp) ; next time around, start 1 sector higher
2680:00DF 8146080002 add word [bp+0x8], 0x200 ; add 8(bp), #0x200 ; move up in buffer by 512 bytes
2680:00E4 EB96 jmp short 0x7c ; jmp d0
d2:
2680:00E6 EB0A jmp short 0xf2 ; jmp cret
csv:
2680:00E8 5B pop bx ; pop bx
2680:00E9 55 push bp ; push bp
2680:00EA 89E5 mov bp, sp ; mov bp, sp
2680:00EC 57 push di ; push di
2680:00ED 56 push si ; push si
2680:00EE 29C4 sub sp, ax ; sub sp, ax
2680:00F0 FFE3 jmp bx ; jmp (bx)
cret:
2680:00F2 8D66FC lea sp, [bp-0x4] ; lea sp, *-4(bp)
2680:00F5 5E pop si ; pop si
2680:00F6 5F pop di ; pop di
2680:00F7 5D pop bp ; pop bp
2680:00F8 C3 ret ; ret
.data
begdata:
.bss
begbss:
; Now comes the code from pc/disk.12.ex/p/tools/menu.c
2680:00F9 55 push bp
2680:00FA 89E5 mov bp, sp
2680:00FC 837E040A cmp word [bp+0x4], byte +0xa
2680:0100 7508 jnz 0x10a
2680:0102 B80D00 mov ax, 0xd
2680:0105 50 push ax
2680:0106 E83DFF call 0x46
2680:0109 5B pop bx
2680:010A FF7604 push word [bp+0x4]
2680:010D E836FF call 0x46
2680:0110 5B pop bx
2680:0111 E9360B jmp 0xc4a
2680:0114 55 push bp
2680:0115 89E5 mov bp, sp
2680:0117 50 push ax
2680:0118 56 push si
2680:0119 E83DFF call 0x59
2680:011C 25FF00 and ax, 0xff
2680:011F 89C6 mov si, ax
2680:0121 83FE0D cmp si, byte +0xd
2680:0124 7503 jnz 0x129
2680:0126 BE0A00 mov si, 0xa
2680:0129 56 push si
2680:012A E8CCFF call 0xf9
2680:012D 5B pop bx
2680:012E 89F0 mov ax, si
2680:0130 E9160B jmp 0xc49
2680:0133 55 push bp
2680:0134 89E5 mov bp, sp
2680:0136 83EC26 sub sp, byte +0x26
2680:0139 56 push si
2680:013A 57 push di
2680:013B 8D46DC lea ax, [bp-0x24]
2680:013E 89C6 mov si, ax
2680:0140 837E0A00 cmp word [bp+0xa], byte +0x0
2680:0144 741A jz 0x160
2680:0146 837E0600 cmp word [bp+0x6], byte +0x0
2680:014A 7D0F jnl 0x15b
2680:014C F75E04 neg word [bp+0x4]
2680:014F F75E06 neg word [bp+0x6]
2680:0152 835E0600 sbb word [bp+0x6], byte +0x0
2680:0156 FF4E0C dec word [bp+0xc]
2680:0159 EB05 jmp short 0x160
2680:015B C7460A0000 mov word [bp+0xa], 0x0
2680:0160 31FF xor di, di
2680:0162 C746FE0000 mov word [bp-0x2], 0x0
2680:0167 837EFE20 cmp word [bp-0x2], byte +0x20
2680:016B 7D32 jnl 0x19f
2680:016D D1E7 shl di, 1
2680:016F 837E0600 cmp word [bp+0x6], byte +0x0
2680:0173 7D01 jnl 0x176
2680:0175 47 inc di
2680:0176 8B4604 mov ax, [bp+0x4]
2680:0179 8B4E06 mov cx, [bp+0x6]
2680:017C D1E0 shl ax, 1
2680:017E D1D1 rcl cx, 1
2680:0180 894604 mov [bp+0x4], ax
2680:0183 894E06 mov [bp+0x6], cx
2680:0186 397E08 cmp [bp+0x8], di
2680:0189 7F0F jg 0x19a
2680:018B 89F8 mov ax, di
2680:018D 2B4608 sub ax, [bp+0x8]
2680:0190 89C7 mov di, ax
2680:0192 83460401 add word [bp+0x4], byte +0x1
2680:0196 83560600 adc word [bp+0x6], byte +0x0
2680:019A FF46FE inc word [bp-0x2]
2680:019D EBC8 jmp short 0x167
2680:019F 89FB mov bx, di
2680:01A1 8A87FE0D mov al, [bx+0xdfe]
2680:01A5 8804 mov [si], al
2680:01A7 46 inc si
2680:01A8 FF4E0C dec word [bp+0xc]
2680:01AB 8B4606 mov ax, [bp+0x6]
2680:01AE 0B4604 or ax, [bp+0x4]
2680:01B1 75AD jnz 0x160
2680:01B3 8B460C mov ax, [bp+0xc]
2680:01B6 FF4E0C dec word [bp+0xc]
2680:01B9 09C0 or ax, ax
2680:01BB 7E09 jng 0x1c6
2680:01BD FF760E push word [bp+0xe]
2680:01C0 E836FF call 0xf9
2680:01C3 5B pop bx
2680:01C4 EBED jmp short 0x1b3
2680:01C6 837E0A00 cmp word [bp+0xa], byte +0x0
2680:01CA 7404 jz 0x1d0
2680:01CC C6042D mov byte [si], 0x2d
2680:01CF 46 inc si
2680:01D0 8D46DC lea ax, [bp-0x24]
2680:01D3 39C6 cmp si, ax
2680:01D5 760B jna 0x1e2
2680:01D7 4E dec si
2680:01D8 8A04 mov al, [si]
2680:01DA 98 cbw
2680:01DB 50 push ax
2680:01DC E81AFF call 0xf9
2680:01DF 5B pop bx
2680:01E0 EBEE jmp short 0x1d0
2680:01E2 E9630A jmp 0xc48
2680:01E5 55 push bp
2680:01E6 89E5 mov bp, sp
2680:01E8 56 push si
2680:01E9 8B7604 mov si, [bp+0x4]
2680:01EC 837E0600 cmp word [bp+0x6], byte +0x0
2680:01F0 740F jz 0x201
2680:01F2 89F0 mov ax, si
2680:01F4 2D2000 sub ax, 0x20
2680:01F7 3D5E00 cmp ax, 0x5e
2680:01FA 7711 ja 0x20d
2680:01FC 83FE5C cmp si, byte +0x5c
2680:01FF 740C jz 0x20d
2680:0201 56 push si
2680:0202 E8F4FE call 0xf9
2680:0205 5B pop bx
2680:0206 B80100 mov ax, 0x1
2680:0209 50 push ax
2680:020A E98000 jmp 0x28d
2680:020D B85C00 mov ax, 0x5c
2680:0210 50 push ax
2680:0211 E8E5FE call 0xf9
2680:0214 5B pop bx
2680:0215 56 push si
2680:0216 EB6A jmp short 0x282
2680:0218 B83000 mov ax, 0x30
2680:021B 50 push ax
2680:021C E8DAFE call 0xf9
2680:021F 5B pop bx
2680:0220 EB67 jmp short 0x289
2680:0222 B86200 mov ax, 0x62
2680:0225 50 push ax
2680:0226 E8D0FE call 0xf9
2680:0229 5B pop bx
2680:022A EB5D jmp short 0x289
2680:022C B86E00 mov ax, 0x6e
2680:022F 50 push ax
2680:0230 E8C6FE call 0xf9
2680:0233 5B pop bx
2680:0234 EB53 jmp short 0x289
2680:0236 B87200 mov ax, 0x72
2680:0239 50 push ax
2680:023A E8BCFE call 0xf9
2680:023D 5B pop bx
2680:023E EB49 jmp short 0x289
2680:0240 B87400 mov ax, 0x74
2680:0243 50 push ax
2680:0244 E8B2FE call 0xf9
2680:0247 5B pop bx
2680:0248 EB3F jmp short 0x289
2680:024A B86600 mov ax, 0x66
2680:024D 50 push ax
2680:024E E8A8FE call 0xf9
2680:0251 5B pop bx
2680:0252 EB35 jmp short 0x289
2680:0254 B85C00 mov ax, 0x5c
2680:0257 50 push ax
2680:0258 E89EFE call 0xf9
2680:025B 5B pop bx
2680:025C EB2B jmp short 0x289
2680:025E 89F0 mov ax, si
2680:0260 25FF00 and ax, 0xff
2680:0263 31C9 xor cx, cx
2680:0265 BA3000 mov dx, 0x30
2680:0268 52 push dx
2680:0269 BA0300 mov dx, 0x3
2680:026C 52 push dx
2680:026D 31D2 xor dx, dx
2680:026F 52 push dx
2680:0270 BA0800 mov dx, 0x8
2680:0273 52 push dx
2680:0274 51 push cx
2680:0275 50 push ax
2680:0276 E8BAFE call 0x133
2680:0279 83C40C add sp, byte +0xc
2680:027C B80400 mov ax, 0x4
2680:027F 50 push ax
2680:0280 EB0B jmp short 0x28d
2680:0282 BB380D mov bx, 0xd38
2680:0285 58 pop ax
2680:0286 E97609 jmp 0xbff
2680:0289 B80200 mov ax, 0x2
2680:028C 50 push ax
2680:028D 58 pop ax
2680:028E E9B809 jmp 0xc49
2680:0291 55 push bp
2680:0292 89E5 mov bp, sp
2680:0294 83EC0A sub sp, byte +0xa
2680:0297 56 push si
2680:0298 57 push di
2680:0299 8B7604 mov si, [bp+0x4]
2680:029C 803C00 cmp byte [si], 0x0
2680:029F 7503 jnz 0x2a4
2680:02A1 E94F02 jmp 0x4f3
2680:02A4 8A04 mov al, [si]
2680:02A6 98 cbw
2680:02A7 50 push ax
2680:02A8 E93D02 jmp 0x4e8
2680:02AB B80D00 mov ax, 0xd
2680:02AE 50 push ax
2680:02AF E847FE call 0xf9
2680:02B2 5B pop bx
2680:02B3 8A04 mov al, [si]
2680:02B5 98 cbw
2680:02B6 50 push ax
2680:02B7 E83FFE call 0xf9
2680:02BA 5B pop bx
2680:02BB E93102 jmp 0x4ef
2680:02BE 46 inc si
2680:02BF 803C2D cmp byte [si], 0x2d
2680:02C2 7501 jnz 0x2c5
2680:02C4 46 inc si
2680:02C5 803C30 cmp byte [si], 0x30
2680:02C8 7506 jnz 0x2d0
2680:02CA B83000 mov ax, 0x30
2680:02CD 50 push ax
2680:02CE EB04 jmp short 0x2d4
2680:02D0 B82000 mov ax, 0x20
2680:02D3 50 push ax
2680:02D4 8F46F8 pop word [bp-0x8]
2680:02D7 31FF xor di, di
2680:02D9 8A04 mov al, [si]
2680:02DB 98 cbw
2680:02DC 2D3000 sub ax, 0x30
2680:02DF 3D0900 cmp ax, 0x9
2680:02E2 7716 ja 0x2fa
2680:02E4 B80A00 mov ax, 0xa
2680:02E7 F7E7 mul di
2680:02E9 89C7 mov di, ax
2680:02EB 89F3 mov bx, si
2680:02ED 46 inc si
2680:02EE 8A07 mov al, [bx]
2680:02F0 98 cbw
2680:02F1 2D3000 sub ax, 0x30
2680:02F4 01F8 add ax, di
2680:02F6 89C7 mov di, ax
2680:02F8 EBDF jmp short 0x2d9
2680:02FA 803C6C cmp byte [si], 0x6c
2680:02FD 7514 jnz 0x313
2680:02FF 46 inc si
2680:0300 8A04 mov al, [si]
2680:0302 98 cbw
2680:0303 2D6100 sub ax, 0x61
2680:0306 3D1900 cmp ax, 0x19
2680:0309 7708 ja 0x313
2680:030B 8A04 mov al, [si]
2680:030D 98 cbw
2680:030E 05E0FF add ax, 0xffe0
2680:0311 8804 mov [si], al
2680:0313 8A04 mov al, [si]
2680:0315 98 cbw
2680:0316 2D4100 sub ax, 0x41
2680:0319 31C9 xor cx, cx
2680:031B 3D1900 cmp ax, 0x19
2680:031E 7701 ja 0x321
2680:0320 41 inc cx
2680:0321 894EF6 mov [bp-0xa], cx
2680:0324 8A04 mov al, [si]
2680:0326 98 cbw
2680:0327 50 push ax
2680:0328 E9A601 jmp 0x4d1
2680:032B 8B5E06 mov bx, [bp+0x6]
2680:032E 83460602 add word [bp+0x6], byte +0x2
2680:0332 57 push di
2680:0333 FF76F6 push word [bp-0xa]
2680:0336 FF37 push word [bx]
2680:0338 E8AAFE call 0x1e5
2680:033B 5B pop bx
2680:033C 5B pop bx
2680:033D 59 pop cx
2680:033E 29C1 sub cx, ax
2680:0340 89CF mov di, cx
2680:0342 E99301 jmp 0x4d8
2680:0345 8B5E06 mov bx, [bp+0x6]
2680:0348 83460602 add word [bp+0x6], byte +0x2
2680:034C 31C0 xor ax, ax
2680:034E FF76F8 push word [bp-0x8]
2680:0351 57 push di
2680:0352 31C9 xor cx, cx
2680:0354 51 push cx
2680:0355 B90200 mov cx, 0x2
2680:0358 51 push cx
2680:0359 50 push ax
2680:035A FF37 push word [bx]
2680:035C E8D4FD call 0x133
2680:035F 83C40C add sp, byte +0xc
2680:0362 31FF xor di, di
2680:0364 E97101 jmp 0x4d8
2680:0367 8B5E06 mov bx, [bp+0x6]
2680:036A 83460604 add word [bp+0x6], byte +0x4
2680:036E FF76F8 push word [bp-0x8]
2680:0371 57 push di
2680:0372 31C0 xor ax, ax
2680:0374 50 push ax
2680:0375 B80200 mov ax, 0x2
2680:0378 50 push ax
2680:0379 FF7702 push word [bx+0x2]
2680:037C FF37 push word [bx]
2680:037E E8B2FD call 0x133
2680:0381 83C40C add sp, byte +0xc
2680:0384 31FF xor di, di
2680:0386 E94F01 jmp 0x4d8
2680:0389 8B5E06 mov bx, [bp+0x6]
2680:038C 83460602 add word [bp+0x6], byte +0x2
2680:0390 31C0 xor ax, ax
2680:0392 FF76F8 push word [bp-0x8]
2680:0395 57 push di
2680:0396 31C9 xor cx, cx
2680:0398 51 push cx
2680:0399 B90800 mov cx, 0x8
2680:039C 51 push cx
2680:039D 50 push ax
2680:039E FF37 push word [bx]
2680:03A0 E890FD call 0x133
2680:03A3 83C40C add sp, byte +0xc
2680:03A6 31FF xor di, di
2680:03A8 E92D01 jmp 0x4d8
2680:03AB 8B5E06 mov bx, [bp+0x6]
2680:03AE 83460604 add word [bp+0x6], byte +0x4
2680:03B2 FF76F8 push word [bp-0x8]
2680:03B5 57 push di
2680:03B6 31C0 xor ax, ax
2680:03B8 50 push ax
2680:03B9 B80800 mov ax, 0x8
2680:03BC 50 push ax
2680:03BD FF7702 push word [bx+0x2]
2680:03C0 FF37 push word [bx]
2680:03C2 E86EFD call 0x133
2680:03C5 83C40C add sp, byte +0xc
2680:03C8 31FF xor di, di
2680:03CA E90B01 jmp 0x4d8
2680:03CD 8B5E06 mov bx, [bp+0x6]
2680:03D0 83460602 add word [bp+0x6], byte +0x2
2680:03D4 8B07 mov ax, [bx]
2680:03D6 99 cwd
2680:03D7 FF76F8 push word [bp-0x8]
2680:03DA 57 push di
2680:03DB B90100 mov cx, 0x1
2680:03DE 51 push cx
2680:03DF B90A00 mov cx, 0xa
2680:03E2 51 push cx
2680:03E3 52 push dx
2680:03E4 50 push ax
2680:03E5 E84BFD call 0x133
2680:03E8 83C40C add sp, byte +0xc
2680:03EB 31FF xor di, di
2680:03ED E9E800 jmp 0x4d8
2680:03F0 8B5E06 mov bx, [bp+0x6]
2680:03F3 83460604 add word [bp+0x6], byte +0x4
2680:03F7 FF76F8 push word [bp-0x8]
2680:03FA 57 push di
2680:03FB B80100 mov ax, 0x1
2680:03FE 50 push ax
2680:03FF B80A00 mov ax, 0xa
2680:0402 50 push ax
2680:0403 FF7702 push word [bx+0x2]
2680:0406 FF37 push word [bx]
2680:0408 E828FD call 0x133
2680:040B 83C40C add sp, byte +0xc
2680:040E 31FF xor di, di
2680:0410 E9C500 jmp 0x4d8
2680:0413 8B5E06 mov bx, [bp+0x6]
2680:0416 83460602 add word [bp+0x6], byte +0x2
2680:041A 31C0 xor ax, ax
2680:041C FF76F8 push word [bp-0x8]
2680:041F 57 push di
2680:0420 31C9 xor cx, cx
2680:0422 51 push cx
2680:0423 B90A00 mov cx, 0xa
2680:0426 51 push cx
2680:0427 50 push ax
2680:0428 FF37 push word [bx]
2680:042A E806FD call 0x133
2680:042D 83C40C add sp, byte +0xc
2680:0430 31FF xor di, di
2680:0432 E9A300 jmp 0x4d8
2680:0435 8B5E06 mov bx, [bp+0x6]
2680:0438 83460604 add word [bp+0x6], byte +0x4
2680:043C FF76F8 push word [bp-0x8]
2680:043F 57 push di
2680:0440 31C0 xor ax, ax
2680:0442 50 push ax
2680:0443 B80A00 mov ax, 0xa
2680:0446 50 push ax
2680:0447 FF7702 push word [bx+0x2]
2680:044A FF37 push word [bx]
2680:044C E8E4FC call 0x133
2680:044F 83C40C add sp, byte +0xc
2680:0452 31FF xor di, di
2680:0454 E98100 jmp 0x4d8
2680:0457 8B5E06 mov bx, [bp+0x6]
2680:045A 83460602 add word [bp+0x6], byte +0x2
2680:045E 31C0 xor ax, ax
2680:0460 FF76F8 push word [bp-0x8]
2680:0463 57 push di
2680:0464 31C9 xor cx, cx
2680:0466 51 push cx
2680:0467 B91000 mov cx, 0x10
2680:046A 51 push cx
2680:046B 50 push ax
2680:046C FF37 push word [bx]
2680:046E E8C2FC call 0x133
2680:0471 83C40C add sp, byte +0xc
2680:0474 31FF xor di, di
2680:0476 EB60 jmp short 0x4d8
2680:0478 8B5E06 mov bx, [bp+0x6]
2680:047B 83460604 add word [bp+0x6], byte +0x4
2680:047F FF76F8 push word [bp-0x8]
2680:0482 57 push di
2680:0483 31C0 xor ax, ax
2680:0485 50 push ax
2680:0486 B81000 mov ax, 0x10
2680:0489 50 push ax
2680:048A FF7702 push word [bx+0x2]
2680:048D FF37 push word [bx]
2680:048F E8A1FC call 0x133
2680:0492 83C40C add sp, byte +0xc
2680:0495 31FF xor di, di
2680:0497 EB3F jmp short 0x4d8
2680:0499 8B5E06 mov bx, [bp+0x6]
2680:049C 83460602 add word [bp+0x6], byte +0x2
2680:04A0 8B07 mov ax, [bx]
2680:04A2 8946FC mov [bp-0x4], ax
2680:04A5 8B5EFC mov bx, [bp-0x4]
2680:04A8 803F00 cmp byte [bx], 0x0
2680:04AB 742B jz 0x4d8
2680:04AD 8B5EFC mov bx, [bp-0x4]
2680:04B0 FF46FC inc word [bp-0x4]
2680:04B3 8A07 mov al, [bx]
2680:04B5 98 cbw
2680:04B6 57 push di
2680:04B7 FF76F6 push word [bp-0xa]
2680:04BA 50 push ax
2680:04BB E827FD call 0x1e5
2680:04BE 5B pop bx
2680:04BF 5B pop bx
2680:04C0 59 pop cx
2680:04C1 29C1 sub cx, ax
2680:04C3 89CF mov di, cx
2680:04C5 EBDE jmp short 0x4a5
2680:04C7 8A04 mov al, [si]
2680:04C9 98 cbw
2680:04CA 50 push ax
2680:04CB E82BFC call 0xf9
2680:04CE 5B pop bx
2680:04CF EB07 jmp short 0x4d8
2680:04D1 BB580D mov bx, 0xd58
2680:04D4 58 pop ax
2680:04D5 E92707 jmp 0xbff
2680:04D8 89F8 mov ax, di
2680:04DA 4F dec di
2680:04DB 09C0 or ax, ax
2680:04DD 7E10 jng 0x4ef
2680:04DF FF76F8 push word [bp-0x8]
2680:04E2 E814FC call 0xf9
2680:04E5 5B pop bx
2680:04E6 EBF0 jmp short 0x4d8
2680:04E8 BB980D mov bx, 0xd98
2680:04EB 58 pop ax
2680:04EC E91007 jmp 0xbff
2680:04EF 46 inc si
2680:04F0 E9A9FD jmp 0x29c
2680:04F3 E95207 jmp 0xc48
2680:04F6 55 push bp
2680:04F7 89E5 mov bp, sp
2680:04F9 8D4606 lea ax, [bp+0x6]
2680:04FC 50 push ax
2680:04FD FF7604 push word [bp+0x4]
2680:0500 E88EFD call 0x291
2680:0503 5B pop bx
2680:0504 5B pop bx
2680:0505 E94207 jmp 0xc4a
2680:0508 55 push bp
2680:0509 89E5 mov bp, sp
2680:050B C706E4360637 mov word [0x36e4], 0x3706
2680:0511 E93607 jmp 0xc4a
2680:0514 55 push bp
2680:0515 89E5 mov bp, sp
2680:0517 56 push si
2680:0518 8B7606 mov si, [bp+0x6]
2680:051B 57 push di
2680:051C 8B7E04 mov di, [bp+0x4]
2680:051F 89FB mov bx, di
2680:0521 47 inc di
2680:0522 8A07 mov al, [bx]
2680:0524 8804 mov [si], al
2680:0526 46 inc si
2680:0527 FF4E08 dec word [bp+0x8]
2680:052A 75F3 jnz 0x51f
2680:052C E91907 jmp 0xc48
2680:052F 55 push bp
2680:0530 89E5 mov bp, sp
2680:0532 837E0601 cmp word [bp+0x6], byte +0x1
2680:0536 7505 jnz 0x53d
2680:0538 FF7608 push word [bp+0x8]
2680:053B EB03 jmp short 0x540
2680:053D FF760A push word [bp+0xa]
2680:0540 FF7606 push word [bp+0x6]
2680:0543 FF7604 push word [bp+0x4]
2680:0546 E8ADFF call 0x4f6
2680:0549 83C406 add sp, byte +0x6
2680:054C E9FB06 jmp 0xc4a
_main: ; Of the menu.
2680:054F 55 push bp
2680:0550 89E5 mov bp, sp
2680:0552 83EC0C sub sp, byte +0xc
2680:0555 56 push si
2680:0556 57 push di
2680:0557 31F6 xor si, si
2680:0559 31FF xor di, di
2680:055B C746FA0000 mov word [bp-0x6], 0x0
2680:0560 833E340D00 cmp word [0xd34], byte +0x0
2680:0565 7408 jz 0x56f
2680:0567 8B0EE636 mov cx, [0x36e6]
2680:056B 890E360D mov [0xd36], cx
2680:056F C706340D0000 mov word [0xd34], 0x0
2680:0575 833EE63609 cmp word [0x36e6], byte +0x9
2680:057A 7C07 jl 0x583
2680:057C 833EE83612 cmp word [0x36e8], byte +0x12
2680:0581 7D08 jnl 0x58b
2680:0583 B8100E mov ax, 0xe10
2680:0586 50 push ax
2680:0587 E86CFF call 0x4f6
2680:058A 5B pop bx
2680:058B C706E236E232 mov word [0x36e2], 0x32e2
2680:0591 B82C0E mov ax, 0xe2c
2680:0594 50 push ax
2680:0595 E85EFF call 0x4f6
2680:0598 5B pop bx
2680:0599 B8320E mov ax, 0xe32
2680:059C 50 push ax
2680:059D E856FF call 0x4f6
2680:05A0 5B pop bx
2680:05A1 B84A0E mov ax, 0xe4a
2680:05A4 50 push ax
2680:05A5 E84EFF call 0x4f6
2680:05A8 5B pop bx
2680:05A9 B8720E mov ax, 0xe72
2680:05AC 50 push ax
2680:05AD E846FF call 0x4f6
2680:05B0 5B pop bx
2680:05B1 B89E0E mov ax, 0xe9e
2680:05B4 50 push ax
2680:05B5 E83EFF call 0x4f6
2680:05B8 5B pop bx
2680:05B9 FF36320D push word [0xd32]
2680:05BD B8CC0E mov ax, 0xecc
2680:05C0 50 push ax
2680:05C1 E832FF call 0x4f6
2680:05C4 5B pop bx
2680:05C5 5B pop bx
2680:05C6 813E260D0001 cmp word [0xd26], 0x100
2680:05CC 7506 jnz 0x5d4
2680:05CE B81C0F mov ax, 0xf1c
2680:05D1 50 push ax
2680:05D2 EB04 jmp short 0x5d8
2680:05D4 B81E0F mov ax, 0xf1e
2680:05D7 50 push ax
2680:05D8 FF36300D push word [0xd30]
2680:05DC B8F00E mov ax, 0xef0
2680:05DF 50 push ax
2680:05E0 E813FF call 0x4f6
2680:05E3 83C406 add sp, byte +0x6
2680:05E6 813E260D0001 cmp word [0xd26], 0x100
2680:05EC 7506 jnz 0x5f4
2680:05EE B8680F mov ax, 0xf68
2680:05F1 50 push ax
2680:05F2 EB04 jmp short 0x5f8
2680:05F4 B8880F mov ax, 0xf88
2680:05F7 50 push ax
2680:05F8 FF362A0D push word [0xd2a]
2680:05FC B8420F mov ax, 0xf42
2680:05FF 50 push ax
2680:0600 E8F3FE call 0x4f6
2680:0603 83C406 add sp, byte +0x6
2680:0606 8B0E2E0D mov cx, [0xd2e]
2680:060A 894EF4 mov [bp-0xc], cx
2680:060D 837EF400 cmp word [bp-0xc], byte +0x0
2680:0611 7E0C jng 0x61f
2680:0613 FF76F4 push word [bp-0xc]
2680:0616 B88A0F mov ax, 0xf8a
2680:0619 50 push ax
2680:061A E8D9FE call 0x4f6
2680:061D 5B pop bx
2680:061E 5B pop bx
2680:061F B8C20F mov ax, 0xfc2
2680:0622 50 push ax
2680:0623 E8D0FE call 0x4f6
2680:0626 5B pop bx
2680:0627 E82FFA call 0x59
2680:062A 8946F8 mov [bp-0x8], ax
2680:062D 8B46F8 mov ax, [bp-0x8]
2680:0630 25FF00 and ax, 0xff
2680:0633 8946F6 mov [bp-0xa], ax
2680:0636 FF76F6 push word [bp-0xa]
2680:0639 B8C60F mov ax, 0xfc6
2680:063C 50 push ax
2680:063D E8B6FE call 0x4f6
2680:0640 5B pop bx
2680:0641 5B pop bx
2680:0642 C706E0320000 mov word [0x32e0], 0x0
2680:0648 C706EA360000 mov word [0x36ea], 0x0
2680:064E C706EC360000 mov word [0x36ec], 0x0
2680:0654 FF76F6 push word [bp-0xa]
2680:0657 E98000 jmp 0x6da
2680:065A B90800 mov cx, 0x8
2680:065D 8B46F8 mov ax, [bp-0x8]
2680:0660 D3F8 sar ax, cl
2680:0662 25FF00 and ax, 0xff
2680:0665 A32C0D mov [0xd2c], ax
2680:0668 FF362C0D push word [0xd2c]
2680:066C EB73 jmp short 0x6e1
2680:066E 31C0 xor ax, ax
2680:0670 50 push ax
2680:0671 B8CA0F mov ax, 0xfca
2680:0674 50 push ax
2680:0675 B8300D mov ax, 0xd30
2680:0678 50 push ax
2680:0679 E86E02 call 0x8ea
2680:067C 83C406 add sp, byte +0x6
2680:067F A3280D mov [0xd28], ax
2680:0682 B8D40F mov ax, 0xfd4
2680:0685 50 push ax
2680:0686 E86DFE call 0x4f6
2680:0689 5B pop bx
2680:068A E90CFF jmp 0x599
2680:068D E88103 call 0xa11
2680:0690 A32E0D mov [0xd2e], ax
2680:0693 B8D80F mov ax, 0xfd8
2680:0696 50 push ax
2680:0697 E85CFE call 0x4f6
2680:069A 5B pop bx
2680:069B E9FBFE jmp 0x599
2680:069E B80100 mov ax, 0x1
2680:06A1 50 push ax
2680:06A2 B8DC0F mov ax, 0xfdc
2680:06A5 50 push ax
2680:06A6 B8320D mov ax, 0xd32
2680:06A9 50 push ax
2680:06AA E83D02 call 0x8ea
2680:06AD 83C406 add sp, byte +0x6
2680:06B0 A3260D mov [0xd26], ax
2680:06B3 B8E20F mov ax, 0xfe2
2680:06B6 50 push ax
2680:06B7 E83CFE call 0x4f6
2680:06BA 5B pop bx
2680:06BB E9DBFE jmp 0x599
2680:06BE E86103 call 0xa22
2680:06C1 A32A0D mov [0xd2a], ax
2680:06C4 B8E60F mov ax, 0xfe6
2680:06C7 50 push ax
2680:06C8 E82BFE call 0x4f6
2680:06CB 5B pop bx
2680:06CC E9CAFE jmp 0x599
2680:06CF B8EA0F mov ax, 0xfea
2680:06D2 50 push ax
2680:06D3 E820FE call 0x4f6
2680:06D6 5B pop bx
2680:06D7 E9BFFE jmp 0x599
2680:06DA BBA40D mov bx, 0xda4
2680:06DD 58 pop ax
2680:06DE E91E05 jmp 0xbff
2680:06E1 58 pop ax
2680:06E2 E96305 jmp 0xc48
2680:06E5 55 push bp
2680:06E6 89E5 mov bp, sp
2680:06E8 50 push ax
2680:06E9 B8FC0F mov ax, 0xffc
2680:06EC 50 push ax
2680:06ED E806FE call 0x4f6
2680:06F0 5B pop bx
2680:06F1 E865F9 call 0x59
2680:06F4 8846FF mov [bp-0x1], al
2680:06F7 8A46FF mov al, [bp-0x1]
2680:06FA 98 cbw
2680:06FB 50 push ax
2680:06FC B84C10 mov ax, 0x104c
2680:06FF 50 push ax
2680:0700 E8F3FD call 0x4f6
2680:0703 5B pop bx
2680:0704 5B pop bx
2680:0705 807EFF0D cmp byte [bp-0x1], 0xd
2680:0709 7512 jnz 0x71d
2680:070B B85010 mov ax, 0x1050
2680:070E 50 push ax
2680:070F E8E4FD call 0x4f6
2680:0712 5B pop bx
2680:0713 833EEA3600 cmp word [0x36ea], byte +0x0
2680:0718 7E32 jng 0x74c
2680:071A E92D05 jmp 0xc4a
2680:071D 833EEA3600 cmp word [0x36ea], byte +0x0
2680:0722 7E02 jng 0x726
2680:0724 EB26 jmp short 0x74c
2680:0726 8A46FF mov al, [bp-0x1]
2680:0729 98 cbw
2680:072A 3D3100 cmp ax, 0x31
2680:072D 7C1D jl 0x74c
2680:072F 8A46FF mov al, [bp-0x1]
2680:0732 98 cbw
2680:0733 3D3900 cmp ax, 0x39
2680:0736 7F14 jg 0x74c
2680:0738 807EFF35 cmp byte [bp-0x1], 0x35
2680:073C 7502 jnz 0x740
2680:073E EB0C jmp short 0x74c
2680:0740 8A46FF mov al, [bp-0x1]
2680:0743 98 cbw
2680:0744 2D3000 sub ax, 0x30
2680:0747 A3EA36 mov [0x36ea], ax
2680:074A EBA5 jmp short 0x6f1
2680:074C C706EA360000 mov word [0x36ea], 0x0
2680:0752 EB95 jmp short 0x6e9
2680:0754 55 push bp
2680:0755 89E5 mov bp, sp
2680:0757 83EC26 sub sp, byte +0x26
2680:075A 56 push si
2680:075B 57 push di
2680:075C 31FF xor di, di
2680:075E 47 inc di
2680:075F 83FF05 cmp di, byte +0x5
2680:0762 7E0F jng 0x773
2680:0764 B85210 mov ax, 0x1052
2680:0767 50 push ax
2680:0768 E88BFD call 0x4f6
2680:076B 5B pop bx
2680:076C B8FFFF mov ax, 0xffff
2680:076F 50 push ax
2680:0770 E97301 jmp 0x8e6
2680:0773 B80100 mov ax, 0x1
2680:0776 50 push ax
2680:0777 FF36E236 push word [0x36e2]
2680:077B 31C0 xor ax, ax
2680:077D 50 push ax
2680:077E 50 push ax
2680:077F E8E8F8 call 0x6a
2680:0782 83C408 add sp, byte +0x8
2680:0785 8946FE mov [bp-0x2], ax
2680:0788 F746FE00FF test word [bp-0x2], 0xff00
2680:078D 75CF jnz 0x75e
2680:078F 31F6 xor si, si
2680:0791 83FE04 cmp si, byte +0x4
2680:0794 7C03 jl 0x799
2680:0796 E9F700 jmp 0x890
2680:0799 B90400 mov cx, 0x4
2680:079C 89F0 mov ax, si
2680:079E D3E0 shl ax, cl
2680:07A0 05C601 add ax, 0x1c6
2680:07A3 89C3 mov bx, ax
2680:07A5 031EE236 add bx, [0x36e2]
2680:07A9 31C0 xor ax, ax
2680:07AB 8A0F mov cl, [bx]
2680:07AD 30ED xor ch, ch
2680:07AF 894EE6 mov [bp-0x1a], cx
2680:07B2 8946E8 mov [bp-0x18], ax
2680:07B5 B90400 mov cx, 0x4
2680:07B8 89F0 mov ax, si
2680:07BA D3E0 shl ax, cl
2680:07BC 05C701 add ax, 0x1c7
2680:07BF 89C3 mov bx, ax
2680:07C1 031EE236 add bx, [0x36e2]
2680:07C5 31C0 xor ax, ax
2680:07C7 8A0F mov cl, [bx]
2680:07C9 30ED xor ch, ch
2680:07CB 894EE2 mov [bp-0x1e], cx
2680:07CE 8946E4 mov [bp-0x1c], ax
2680:07D1 B90400 mov cx, 0x4
2680:07D4 89F0 mov ax, si
2680:07D6 D3E0 shl ax, cl
2680:07D8 05C801 add ax, 0x1c8
2680:07DB 89C3 mov bx, ax
2680:07DD 031EE236 add bx, [0x36e2]
2680:07E1 31C0 xor ax, ax
2680:07E3 8A0F mov cl, [bx]
2680:07E5 30ED xor ch, ch
2680:07E7 894EDE mov [bp-0x22], cx
2680:07EA 8946E0 mov [bp-0x20], ax
2680:07ED B90400 mov cx, 0x4
2680:07F0 89F0 mov ax, si
2680:07F2 D3E0 shl ax, cl
2680:07F4 05C901 add ax, 0x1c9
2680:07F7 89C3 mov bx, ax
2680:07F9 031EE236 add bx, [0x36e2]
2680:07FD 31C0 xor ax, ax
2680:07FF 8A0F mov cl, [bx]
2680:0801 30ED xor ch, ch
2680:0803 894EDA mov [bp-0x26], cx
2680:0806 8946DC mov [bp-0x24], ax
2680:0809 B91000 mov cx, 0x10
2680:080C 8B46DE mov ax, [bp-0x22]
2680:080F 8B56E0 mov dx, [bp-0x20]
2680:0812 E306 jcxz 0x81a
2680:0814 D1E0 shl ax, 1
2680:0816 D1D2 rcl dx, 1
2680:0818 E2FA loop 0x814
2680:081A 52 push dx
2680:081B B91800 mov cx, 0x18
2680:081E 8B56DA mov dx, [bp-0x26]
2680:0821 8B5EDC mov bx, [bp-0x24]
2680:0824 E306 jcxz 0x82c
2680:0826 D1E2 shl dx, 1
2680:0828 D1D3 rcl bx, 1
2680:082A E2FA loop 0x826
2680:082C 59 pop cx
2680:082D 09D0 or ax, dx
2680:082F 09D9 or cx, bx
2680:0831 51 push cx
2680:0832 B90800 mov cx, 0x8
2680:0835 8B56E2 mov dx, [bp-0x1e]
2680:0838 8B5EE4 mov bx, [bp-0x1c]
2680:083B E306 jcxz 0x843
2680:083D D1E2 shl dx, 1
2680:083F D1D3 rcl bx, 1
2680:0841 E2FA loop 0x83d
2680:0843 59 pop cx
2680:0844 09D0 or ax, dx
2680:0846 09D9 or cx, bx
2680:0848 0B46E6 or ax, [bp-0x1a]
2680:084B 0B4EE8 or cx, [bp-0x18]
2680:084E 89F3 mov bx, si
2680:0850 D1E3 shl bx, 1
2680:0852 D1E3 shl bx, 1
2680:0854 8D56EA lea dx, [bp-0x16]
2680:0857 01D3 add bx, dx
2680:0859 8907 mov [bx], ax
2680:085B 894F02 mov [bx+0x2], cx
2680:085E 89F3 mov bx, si
2680:0860 D1E3 shl bx, 1
2680:0862 D1E3 shl bx, 1
2680:0864 8D46EA lea ax, [bp-0x16]
2680:0867 01C3 add bx, ax
2680:0869 FF7702 push word [bx+0x2]
2680:086C FF37 push word [bx]
2680:086E 31C0 xor ax, ax
2680:0870 50 push ax
2680:0871 B8FFFF mov ax, 0xffff
2680:0874 50 push ax
2680:0875 E86503 call 0xbdd
2680:0878 09C0 or ax, ax
2680:087A 7E10 jng 0x88c
2680:087C B87C10 mov ax, 0x107c
2680:087F 50 push ax
2680:0880 E873FC call 0x4f6
2680:0883 5B pop bx
2680:0884 B80100 mov ax, 0x1
2680:0887 50 push ax
2680:0888 E8B5F7 call 0x40
2680:088B 5B pop bx
2680:088C 46 inc si
2680:088D E901FF jmp 0x791
2680:0890 833EEA3606 cmp word [0x36ea], byte +0x6
2680:0895 7C0A jl 0x8a1
2680:0897 8B0EEA36 mov cx, [0x36ea]
2680:089B 83E905 sub cx, byte +0x5
2680:089E 51 push cx
2680:089F EB04 jmp short 0x8a5
2680:08A1 FF36EA36 push word [0x36ea]
2680:08A5 5E pop si
2680:08A6 8D46EA lea ax, [bp-0x16]
2680:08A9 50 push ax
2680:08AA E84302 call 0xaf0
2680:08AD 5B pop bx
2680:08AE B90200 mov cx, 0x2
2680:08B1 89F0 mov ax, si
2680:08B3 D3E0 shl ax, cl
2680:08B5 2D0400 sub ax, 0x4
2680:08B8 8D5EEA lea bx, [bp-0x16]
2680:08BB 01C3 add bx, ax
2680:08BD 8B0F mov cx, [bx]
2680:08BF 890EE032 mov [0x32e0], cx
2680:08C3 B90200 mov cx, 0x2
2680:08C6 A1E032 mov ax, [0x32e0]
2680:08C9 31D2 xor dx, dx
2680:08CB F7F1 div cx
2680:08CD 09D2 or dx, dx
2680:08CF 7412 jz 0x8e3
2680:08D1 B90200 mov cx, 0x2
2680:08D4 A1E032 mov ax, [0x32e0]
2680:08D7 31D2 xor dx, dx
2680:08D9 F7F1 div cx
2680:08DB D1E0 shl ax, 1
2680:08DD 050200 add ax, 0x2
2680:08E0 A3E032 mov [0x32e0], ax
2680:08E3 31C0 xor ax, ax
2680:08E5 50 push ax
2680:08E6 58 pop ax
2680:08E7 E95E03 jmp 0xc48
2680:08EA 55 push bp
2680:08EB 89E5 mov bp, sp
2680:08ED 50 push ax
2680:08EE 56 push si
2680:08EF 8B7604 mov si, [bp+0x4]
2680:08F2 FF7606 push word [bp+0x6]
2680:08F5 B81411 mov ax, 0x1114
2680:08F8 50 push ax
2680:08F9 E8FAFB call 0x4f6
2680:08FC 5B pop bx
2680:08FD 5B pop bx
2680:08FE B84411 mov ax, 0x1144
2680:0901 50 push ax
2680:0902 E8F1FB call 0x4f6
2680:0905 5B pop bx
2680:0906 837E0800 cmp word [bp+0x8], byte +0x0
2680:090A 7408 jz 0x914
2680:090C B86C11 mov ax, 0x116c
2680:090F 50 push ax
2680:0910 E8E3FB call 0x4f6
2680:0913 5B pop bx
2680:0914 B87411 mov ax, 0x1174
2680:0917 50 push ax
2680:0918 E8DBFB call 0x4f6
2680:091B 5B pop bx
2680:091C E83AF7 call 0x59
2680:091F 8846FF mov [bp-0x1], al
2680:0922 98 cbw
2680:0923 50 push ax
2680:0924 E9C600 jmp 0x9ed
2680:0927 8A46FF mov al, [bp-0x1]
2680:092A 98 cbw
2680:092B 50 push ax
2680:092C E817F7 call 0x46
2680:092F 5B pop bx
2680:0930 E826F7 call 0x59
2680:0933 8846FF mov [bp-0x1], al
2680:0936 98 cbw
2680:0937 3D3000 cmp ax, 0x30
2680:093A 7CF4 jl 0x930
2680:093C 8A46FF mov al, [bp-0x1]
2680:093F 98 cbw
2680:0940 3D3100 cmp ax, 0x31
2680:0943 7E02 jng 0x947
2680:0945 EBE9 jmp short 0x930
2680:0947 8A46FF mov al, [bp-0x1]
2680:094A 98 cbw
2680:094B 50 push ax
2680:094C E8F7F6 call 0x46
2680:094F 5B pop bx
2680:0950 E8A500 call 0x9f8
2680:0953 8A46FF mov al, [bp-0x1]
2680:0956 98 cbw
2680:0957 D1E0 shl ax, 1
2680:0959 2D6000 sub ax, 0x60
2680:095C 89C3 mov bx, ax
2680:095E 8B87C40D mov ax, [bx+0xdc4]
2680:0962 8904 mov [si], ax
2680:0964 8A46FF mov al, [bp-0x1]
2680:0967 98 cbw
2680:0968 050002 add ax, 0x200
2680:096B 2D3000 sub ax, 0x30
2680:096E 50 push ax
2680:096F E98200 jmp 0x9f4
2680:0972 8A46FF mov al, [bp-0x1]
2680:0975 98 cbw
2680:0976 50 push ax
2680:0977 E8CCF6 call 0x46
2680:097A 5B pop bx
2680:097B E8DBF6 call 0x59
2680:097E 8846FF mov [bp-0x1], al
2680:0981 98 cbw
2680:0982 3D3100 cmp ax, 0x31
2680:0985 7C09 jl 0x990
2680:0987 8A46FF mov al, [bp-0x1]
2680:098A 98 cbw
2680:098B 3D3400 cmp ax, 0x34
2680:098E 7E14 jng 0x9a4
2680:0990 8A46FF mov al, [bp-0x1]
2680:0993 98 cbw
2680:0994 3D3600 cmp ax, 0x36
2680:0997 7CE2 jl 0x97b
2680:0999 8A46FF mov al, [bp-0x1]
2680:099C 98 cbw
2680:099D 3D3900 cmp ax, 0x39
2680:09A0 7E02 jng 0x9a4
2680:09A2 EBD7 jmp short 0x97b
2680:09A4 8A46FF mov al, [bp-0x1]
2680:09A7 98 cbw
2680:09A8 50 push ax
2680:09A9 E89AF6 call 0x46
2680:09AC 5B pop bx
2680:09AD E84800 call 0x9f8
2680:09B0 8A46FF mov al, [bp-0x1]
2680:09B3 98 cbw
2680:09B4 D1E0 shl ax, 1
2680:09B6 05A2FF add ax, 0xffa2
2680:09B9 89C3 mov bx, ax
2680:09BB 8B87C40D mov ax, [bx+0xdc4]
2680:09BF 8904 mov [si], ax
2680:09C1 8A46FF mov al, [bp-0x1]
2680:09C4 98 cbw
2680:09C5 050003 add ax, 0x300
2680:09C8 2D3000 sub ax, 0x30
2680:09CB 50 push ax
2680:09CC EB26 jmp short 0x9f4
2680:09CE 837E0800 cmp word [bp+0x8], byte +0x0
2680:09D2 7503 jnz 0x9d7
2680:09D4 E945FF jmp 0x91c
2680:09D7 8A46FF mov al, [bp-0x1]
2680:09DA 98 cbw
2680:09DB 50 push ax
2680:09DC E867F6 call 0x46
2680:09DF 5B pop bx
2680:09E0 E81500 call 0x9f8
2680:09E3 C7048811 mov word [si], 0x1188
2680:09E7 B80001 mov ax, 0x100
2680:09EA 50 push ax
2680:09EB EB07 jmp short 0x9f4
2680:09ED BBDA0D mov bx, 0xdda
2680:09F0 58 pop ax
2680:09F1 E90B02 jmp 0xbff
2680:09F4 58 pop ax
2680:09F5 E95102 jmp 0xc49
2680:09F8 55 push bp
2680:09F9 89E5 mov bp, sp
2680:09FB E85BF6 call 0x59
2680:09FE 98 cbw
2680:09FF 3D0D00 cmp ax, 0xd
2680:0A02 7402 jz 0xa06
2680:0A04 EBF5 jmp short 0x9fb
2680:0A06 B80A00 mov ax, 0xa
2680:0A09 50 push ax
2680:0A0A E839F6 call 0x46
2680:0A0D 5B pop bx
2680:0A0E E93902 jmp 0xc4a
2680:0A11 55 push bp
2680:0A12 89E5 mov bp, sp
2680:0A14 B89211 mov ax, 0x1192
2680:0A17 50 push ax
2680:0A18 E8DBFA call 0x4f6
2680:0A1B 5B pop bx
2680:0A1C E81400 call 0xa33
2680:0A1F E92802 jmp 0xc4a
2680:0A22 55 push bp
2680:0A23 89E5 mov bp, sp
2680:0A25 B8CC11 mov ax, 0x11cc
2680:0A28 50 push ax
2680:0A29 E8CAFA call 0x4f6
2680:0A2C 5B pop bx
2680:0A2D E80300 call 0xa33
2680:0A30 E91702 jmp 0xc4a
2680:0A33 55 push bp
2680:0A34 89E5 mov bp, sp
2680:0A36 83EC06 sub sp, byte +0x6
2680:0A39 E81DF6 call 0x59
2680:0A3C 8846FF mov [bp-0x1], al
2680:0A3F 98 cbw
2680:0A40 3D3000 cmp ax, 0x30
2680:0A43 7CF4 jl 0xa39
2680:0A45 8A46FF mov al, [bp-0x1]
2680:0A48 98 cbw
2680:0A49 3D3900 cmp ax, 0x39
2680:0A4C 7E02 jng 0xa50
2680:0A4E EBE9 jmp short 0xa39
2680:0A50 8A46FF mov al, [bp-0x1]
2680:0A53 98 cbw
2680:0A54 2D3000 sub ax, 0x30
2680:0A57 99 cwd
2680:0A58 8946FA mov [bp-0x6], ax
2680:0A5B 8956FC mov [bp-0x4], dx
2680:0A5E 8A46FF mov al, [bp-0x1]
2680:0A61 98 cbw
2680:0A62 50 push ax
2680:0A63 E8E0F5 call 0x46
2680:0A66 5B pop bx
2680:0A67 E8EFF5 call 0x59
2680:0A6A 8846FF mov [bp-0x1], al
2680:0A6D 98 cbw
2680:0A6E 3D0D00 cmp ax, 0xd
2680:0A71 746F jz 0xae2
2680:0A73 8A46FF mov al, [bp-0x1]
2680:0A76 98 cbw
2680:0A77 3D3000 cmp ax, 0x30
2680:0A7A 7CEB jl 0xa67
2680:0A7C 8A46FF mov al, [bp-0x1]
2680:0A7F 98 cbw
2680:0A80 3D3900 cmp ax, 0x39
2680:0A83 7FE2 jg 0xa67
2680:0A85 8A46FF mov al, [bp-0x1]
2680:0A88 98 cbw
2680:0A89 2D3000 sub ax, 0x30
2680:0A8C 99 cwd
2680:0A8D 52 push dx
2680:0A8E 50 push ax
2680:0A8F B80A00 mov ax, 0xa
2680:0A92 31D2 xor dx, dx
2680:0A94 FF76FC push word [bp-0x4]
2680:0A97 FF76FA push word [bp-0x6]
2680:0A9A E88A01 call 0xc27
2680:0A9D 59 pop cx
2680:0A9E 5B pop bx
2680:0A9F 01C1 add cx, ax
2680:0AA1 11D3 adc bx, dx
2680:0AA3 53 push bx
2680:0AA4 51 push cx
2680:0AA5 B80100 mov ax, 0x1
2680:0AA8 50 push ax
2680:0AA9 31C0 xor ax, ax
2680:0AAB 50 push ax
2680:0AAC E82E01 call 0xbdd
2680:0AAF 09C0 or ax, ax
2680:0AB1 7DB4 jnl 0xa67
2680:0AB3 8A46FF mov al, [bp-0x1]
2680:0AB6 98 cbw
2680:0AB7 50 push ax
2680:0AB8 E88BF5 call 0x46
2680:0ABB 5B pop bx
2680:0ABC 8A46FF mov al, [bp-0x1]
2680:0ABF 98 cbw
2680:0AC0 2D3000 sub ax, 0x30
2680:0AC3 99 cwd
2680:0AC4 52 push dx
2680:0AC5 50 push ax
2680:0AC6 B80A00 mov ax, 0xa
2680:0AC9 31D2 xor dx, dx
2680:0ACB FF76FC push word [bp-0x4]
2680:0ACE FF76FA push word [bp-0x6]
2680:0AD1 E85301 call 0xc27
2680:0AD4 59 pop cx
2680:0AD5 5B pop bx
2680:0AD6 01C1 add cx, ax
2680:0AD8 11D3 adc bx, dx
2680:0ADA 894EFA mov [bp-0x6], cx
2680:0ADD 895EFC mov [bp-0x4], bx
2680:0AE0 EB85 jmp short 0xa67
2680:0AE2 B80A00 mov ax, 0xa
2680:0AE5 50 push ax
2680:0AE6 E85DF5 call 0x46
2680:0AE9 5B pop bx
2680:0AEA 8B46FA mov ax, [bp-0x6]
2680:0AED E95A01 jmp 0xc4a
2680:0AF0 55 push bp
2680:0AF1 89E5 mov bp, sp
2680:0AF3 50 push ax
2680:0AF4 50 push ax
2680:0AF5 56 push si
2680:0AF6 8B7604 mov si, [bp+0x4]
2680:0AF9 57 push di
2680:0AFA C746FE0000 mov word [bp-0x2], 0x0
2680:0AFF 837EFE04 cmp word [bp-0x2], byte +0x4
2680:0B03 7C03 jl 0xb08
2680:0B05 E9A300 jmp 0xbab
2680:0B08 31FF xor di, di
2680:0B0A 83FF03 cmp di, byte +0x3
2680:0B0D 7C03 jl 0xb12
2680:0B0F E99300 jmp 0xba5
2680:0B12 89FB mov bx, di
2680:0B14 D1E3 shl bx, 1
2680:0B16 D1E3 shl bx, 1
2680:0B18 01F3 add bx, si
2680:0B1A 8B4702 mov ax, [bx+0x2]
2680:0B1D 0B07 or ax, [bx]
2680:0B1F 752E jnz 0xb4f
2680:0B21 89F8 mov ax, di
2680:0B23 40 inc ax
2680:0B24 89C3 mov bx, ax
2680:0B26 D1E3 shl bx, 1
2680:0B28 D1E3 shl bx, 1
2680:0B2A 01F3 add bx, si
2680:0B2C 8B4702 mov ax, [bx+0x2]
2680:0B2F 0B07 or ax, [bx]
2680:0B31 741C jz 0xb4f
2680:0B33 89F8 mov ax, di
2680:0B35 40 inc ax
2680:0B36 89C3 mov bx, ax
2680:0B38 D1E3 shl bx, 1
2680:0B3A D1E3 shl bx, 1
2680:0B3C 01F3 add bx, si
2680:0B3E 53 push bx
2680:0B3F 89FB mov bx, di
2680:0B41 D1E3 shl bx, 1
2680:0B43 D1E3 shl bx, 1
2680:0B45 01F3 add bx, si
2680:0B47 53 push bx
2680:0B48 E86300 call 0xbae
2680:0B4B 5B pop bx
2680:0B4C 5B pop bx
2680:0B4D EB52 jmp short 0xba1
2680:0B4F 89FB mov bx, di
2680:0B51 D1E3 shl bx, 1
2680:0B53 D1E3 shl bx, 1
2680:0B55 01F3 add bx, si
2680:0B57 89F8 mov ax, di
2680:0B59 40 inc ax
2680:0B5A FF7702 push word [bx+0x2]
2680:0B5D FF37 push word [bx]
2680:0B5F 56 push si
2680:0B60 50 push ax
2680:0B61 5B pop bx
2680:0B62 D1E3 shl bx, 1
2680:0B64 D1E3 shl bx, 1
2680:0B66 58 pop ax
2680:0B67 01C3 add bx, ax
2680:0B69 FF7702 push word [bx+0x2]
2680:0B6C FF37 push word [bx]
2680:0B6E E86C00 call 0xbdd
2680:0B71 09C0 or ax, ax
2680:0B73 7E2C jng 0xba1
2680:0B75 89F8 mov ax, di
2680:0B77 40 inc ax
2680:0B78 89C3 mov bx, ax
2680:0B7A D1E3 shl bx, 1
2680:0B7C D1E3 shl bx, 1
2680:0B7E 01F3 add bx, si
2680:0B80 8B4702 mov ax, [bx+0x2]
2680:0B83 0B07 or ax, [bx]
2680:0B85 741A jz 0xba1
2680:0B87 89F8 mov ax, di
2680:0B89 40 inc ax
2680:0B8A 89C3 mov bx, ax
2680:0B8C D1E3 shl bx, 1
2680:0B8E D1E3 shl bx, 1
2680:0B90 01F3 add bx, si
2680:0B92 53 push bx
2680:0B93 89FB mov bx, di
2680:0B95 D1E3 shl bx, 1
2680:0B97 D1E3 shl bx, 1
2680:0B99 01F3 add bx, si
2680:0B9B 53 push bx
2680:0B9C E80F00 call 0xbae
2680:0B9F 5B pop bx
2680:0BA0 5B pop bx
2680:0BA1 47 inc di
2680:0BA2 E965FF jmp 0xb0a
2680:0BA5 FF46FE inc word [bp-0x2]
2680:0BA8 E954FF jmp 0xaff
2680:0BAB E99A00 jmp 0xc48
2680:0BAE 55 push bp
2680:0BAF 89E5 mov bp, sp
2680:0BB1 50 push ax
2680:0BB2 50 push ax
2680:0BB3 56 push si
2680:0BB4 8B7606 mov si, [bp+0x6]
2680:0BB7 57 push di
2680:0BB8 8B7E04 mov di, [bp+0x4]
2680:0BBB 8B05 mov ax, [di]
2680:0BBD 8B4D02 mov cx, [di+0x2]
2680:0BC0 8946FC mov [bp-0x4], ax
2680:0BC3 894EFE mov [bp-0x2], cx
2680:0BC6 8B04 mov ax, [si]
2680:0BC8 8B4C02 mov cx, [si+0x2]
2680:0BCB 8905 mov [di], ax
2680:0BCD 894D02 mov [di+0x2], cx
2680:0BD0 8B46FC mov ax, [bp-0x4]
2680:0BD3 8B4EFE mov cx, [bp-0x2]
2680:0BD6 8904 mov [si], ax
2680:0BD8 894C02 mov [si+0x2], cx
2680:0BDB EB6B jmp short 0xc48
2680:0BDD 5B pop bx
2680:0BDE 59 pop cx
2680:0BDF 5A pop dx
2680:0BE0 58 pop ax
2680:0BE1 56 push si
2680:0BE2 89E6 mov si, sp
2680:0BE4 875C02 xchg bx, [si+0x2]
2680:0BE7 5E pop si
2680:0BE8 39D3 cmp bx, dx
2680:0BEA 7F0F jg 0xbfb
2680:0BEC 7C06 jl 0xbf4
2680:0BEE 39C8 cmp ax, cx
2680:0BF0 7709 ja 0xbfb
2680:0BF2 7404 jz 0xbf8
2680:0BF4 B8FFFF mov ax, 0xffff
2680:0BF7 C3 ret
2680:0BF8 31C0 xor ax, ax
2680:0BFA C3 ret
2680:0BFB B80100 mov ax, 0x1
2680:0BFE C3 ret
2680:0BFF 8B17 mov dx, [bx]
2680:0C01 8B4F02 mov cx, [bx+0x2]
2680:0C04 83C304 add bx, byte +0x4
2680:0C07 49 dec cx
2680:0C08 7C13 jl 0xc1d
2680:0C0A 3B07 cmp ax, [bx]
2680:0C0C 75F6 jnz 0xc04
2680:0C0E 8B5F02 mov bx, [bx+0x2]
2680:0C11 85DB test bx, bx
2680:0C13 7506 jnz 0xc1b
2680:0C15 B81400 mov ax, 0x14
2680:0C18 50 push ax
2680:0C19 EB06 jmp short 0xc21
2680:0C1B FFE3 jmp bx
2680:0C1D 89D3 mov bx, dx
2680:0C1F EBF0 jmp short 0xc11
2680:0C21 E88700 call 0xcab
2680:0C24 E82B00 call 0xc52
2680:0C27 89E3 mov bx, sp
2680:0C29 52 push dx
2680:0C2A 89C1 mov cx, ax
2680:0C2C F76704 mul word [bx+0x4]
2680:0C2F 5A pop dx
2680:0C30 50 push ax
2680:0C31 89D0 mov ax, dx
2680:0C33 F76702 mul word [bx+0x2]
2680:0C36 5A pop dx
2680:0C37 01C2 add dx, ax
2680:0C39 89C8 mov ax, cx
2680:0C3B 89D1 mov cx, dx
2680:0C3D F76702 mul word [bx+0x2]
2680:0C40 01CA add dx, cx
2680:0C42 5B pop bx
2680:0C43 83C404 add sp, byte +0x4
2680:0C46 FFE3 jmp bx
2680:0C48 5F pop di
2680:0C49 5E pop si
2680:0C4A 89EC mov sp, bp
2680:0C4C 5D pop bp
2680:0C4D C3 ret
2680:0C4E 5E pop si
2680:0C4F 5F pop di
2680:0C50 EBF8 jmp short 0xc4a
2680:0C52 E8EBF3 call 0x40
2680:0C55 B80600 mov ax, 0x6
2680:0C58 BA2812 mov dx, 0x1228
2680:0C5B EB30 jmp short 0xc8d
2680:0C5D B81200 mov ax, 0x12
2680:0C60 BA3F12 mov dx, 0x123f
2680:0C63 EB28 jmp short 0xc8d
2680:0C65 B81400 mov ax, 0x14
2680:0C68 BA5612 mov dx, 0x1256
2680:0C6B EB20 jmp short 0xc8d
2680:0C6D B80100 mov ax, 0x1
2680:0C70 BA6D12 mov dx, 0x126d
2680:0C73 EB18 jmp short 0xc8d
2680:0C75 B80200 mov ax, 0x2
2680:0C78 BA8412 mov dx, 0x1284
2680:0C7B EB10 jmp short 0xc8d
2680:0C7D B81200 mov ax, 0x12
2680:0C80 BA9A12 mov dx, 0x129a
2680:0C83 EB08 jmp short 0xc8d
2680:0C85 B81100 mov ax, 0x11
2680:0C88 BAB112 mov dx, 0x12b1
2680:0C8B EB00 jmp short 0xc8d
2680:0C8D 31DB xor bx, bx
2680:0C8F 871EDE12 xchg bx, [0x12de]
2680:0C93 85DB test bx, bx
2680:0C95 7405 jz 0xc9c
2680:0C97 50 push ax
2680:0C98 FFD3 call bx
2680:0C9A 58 pop ax
2680:0C9B C3 ret
2680:0C9C BB1600 mov bx, 0x16
2680:0C9F 53 push bx
2680:0CA0 52 push dx
2680:0CA1 B80200 mov ax, 0x2
2680:0CA4 50 push ax
2680:0CA5 E83B00 call 0xce3
2680:0CA8 E895F3 call 0x40
2680:0CAB 89C2 mov dx, ax
2680:0CAD 83FA15 cmp dx, byte +0x15
2680:0CB0 7311 jnc 0xcc3
2680:0CB2 D1E2 shl dx, 1
2680:0CB4 BBFE11 mov bx, 0x11fe
2680:0CB7 01D3 add bx, dx
2680:0CB9 8B1F mov bx, [bx]
2680:0CBB 85DB test bx, bx
2680:0CBD 7404 jz 0xcc3
2680:0CBF 89DA mov dx, bx
2680:0CC1 EB1E jmp short 0xce1
2680:0CC3 BBCF12 mov bx, 0x12cf
2680:0CC6 B90600 mov cx, 0x6
2680:0CC9 89C2 mov dx, ax
2680:0CCB 81E20700 and dx, 0x7
2680:0CCF 03163000 add dx, [0x30]
2680:0CD3 8817 mov [bx], dl
2680:0CD5 4B dec bx
2680:0CD6 D1FA sar dx, 1
2680:0CD8 D1FA sar dx, 1
2680:0CDA D1FA sar dx, 1
2680:0CDC E2ED loop 0xccb
2680:0CDE BAC112 mov dx, 0x12c1
2680:0CE1 EBAA jmp short 0xc8d
2680:0CE3 55 push bp
2680:0CE4 89E5 mov bp, sp
2680:0CE6 C706F0360400 mov word [0x36f0], 0x4
2680:0CEC 8B5E04 mov bx, [bp+0x4]
2680:0CEF 891EF236 mov [0x36f2], bx
2680:0CF3 8B5E08 mov bx, [bp+0x8]
2680:0CF6 891EF436 mov [0x36f4], bx
2680:0CFA 8B5E06 mov bx, [bp+0x6]
2680:0CFD 891EF836 mov [0x36f8], bx
2680:0D01 B8EE36 mov ax, 0x36ee
2680:0D04 50 push ax
2680:0D05 B80100 mov ax, 0x1
2680:0D08 50 push ax
2680:0D09 B80100 mov ax, 0x1
2680:0D0C BBEE36 mov bx, 0x36ee
2680:0D0F B90300 mov cx, 0x3
2680:0D12 CD20 int 0x20
2680:0D14 89EC mov sp, bp
2680:0D16 5D pop bp
2680:0D17 C3 ret
2680:0D18 000000...00 times 8 db 0 ; Alignment padding.
menu_data:
; Variables defined in pc/disk.12.ex/p/tools/menu1.s
2680:0D20 0000 tmp: dw 0
2680:0D22 0000 tmp1: dw 0
2680:0D24 0000 tmp2: dw 0
; Global variables defined in pc/disk.12.ex/p/tools/menu1.s
boot_parameters:
2680:0D26 0001 .bp_rootdev: dw 0x100 ; DROOTDEV.
2680:0D28 0002 .bp_ramimagedev: dw 0x200 ; DRAMIMAGEDEV. Only used if .bp_rootdev == DEV_RAM (ramdisk).
2680:0D2A 0000 .bp_ramsize: dw 0 ; DRAMSIZE. Default RAM disk size. Not used if root is /dev/ram when size is from root image.
2680:0D2C 0D00 .bp_scancode: dw 13 ; DSCANCODE. Also put to BX.
2680:0D2E FFFF .bp_processor: dw 0xffff ; DPROCESSOR. 88 would force 386 to 88).Default processor type for no restriction is 0xfff.
ramimname:
2680:0D30 EA0D dw 0xdea ; char *ramimname = "/dev/fd0"; ; String fofs: 0x271ea. For displat in the menu. The kernel uses boot_parameters.bp_ramimagedev.
rootname:
2680:0D32 F40D dw 0xdf4 ; char *rootname = "/dev/ram"; ; String fofs: 0x271f4. For displat in the menu. The kernel uses boot_parameters.bp_rootdev.
virgin:
2680:0D34 0100 dw 1
floptrk:
2680:0D36 0900 dw 9 ; Sectors/track on the boot floppy.
2680:0D38 5E02
2680:0D3A 07
2680:0D3B 0000
2680:0D3D 0018
2680:0D3F 0208
2680:0D41 0022
2680:0D43 0209
2680:0D45 004002
2680:0D48 0A00
2680:0D4A 2C02
2680:0D4C 0C00
2680:0D4E 4A
2680:0D4F 020D
2680:0D51 0036025C
2680:0D55 005402
2680:0D58 C7040F00
2680:0D5C 0000
2680:0D5E D804
2680:0D60 42
2680:0D61 006703
2680:0D64 43
2680:0D65 002B
2680:0D67 034400
2680:0D6A F0034F00
2680:0D6E AB
2680:0D6F 035300
2680:0D72 99
2680:0D73 0455
2680:0D75 0035
2680:0D77 0458
2680:0D79 007804
2680:0D7C 6200
2680:0D7E 45
2680:0D7F 036300
2680:0D82 2B03
2680:0D84 6400CD
2680:0D87 036F00
2680:0D8A 8903
2680:0D8C 7300
2680:0D8E 99
2680:0D8F 0475
2680:0D91 0013
2680:0D93 0478
2680:0D95 005704
2680:0D98 B302
2680:0D9A 0200
2680:0D9C 0A00
2680:0D9E AB
2680:0D9F 0225
2680:0DA1 00BE02CF
2680:0DA5 06
2680:0DA6 07
2680:0DA7 003D
2680:0DA9 005A06
2680:0DAC 64005A06
2680:0DB0 69006E06
2680:0DB4 7000
2680:0DB6 8D067200
2680:0DBA 9E
2680:0DBB 06
2680:0DBC 7300
2680:0DBE BE0675
2680:0DC1 005A06
2680:0DC4 AE
2680:0DC5 10B810C2
2680:0DC9 10CC
2680:0DCB 10D6
2680:0DCD 10E0
2680:0DCF 10EA
2680:0DD1 10EC
2680:0DD3 10F6
2680:0DD5 1000
2680:0DD7 110A
2680:0DD9 111C
2680:0DDB 0903
2680:0DDD 006600
2680:0DE0 27
2680:0DE1 096800
2680:0DE4 7209
2680:0DE6 7200
2680:0DE8 CE
2680:0DE9 092F
2680:0DEB 6465762F
2680:0DEF 66643000
2680:0DF3 002F
2680:0DF5 6465762F
2680:0DF9 7261
2680:0DFB 6D
2680:0DFC 0000
2680:0DFE 3031
2680:0E00 3233
2680:0E02 3435
2680:0E04 3637
2680:0E06 3839
2680:0E08 41
2680:0E09 42
2680:0E0A 43
2680:0E0B 44
2680:0E0C 45
2680:0E0D 46
2680:0E0E 0000
2680:0E10 42
2680:0E11 6F
2680:0E12 6F
2680:0E13 7462
2680:0E15 6C
2680:0E16 6F
2680:0E17 6B2067
2680:0E1A 61
2680:0E1B 7665
2680:0E1D 206261
2680:0E20 64207472
2680:0E24 61
2680:0E25 636B73
2680:0E28 697A0A000A
2680:0E2D 0A0A
2680:0E2F 0A00
2680:0E31 000A
2680:0E33 48
2680:0E34 6974206B65
2680:0E39 7920
2680:0E3B 61
2680:0E3C 7320
2680:0E3E 666F
2680:0E40 6C
2680:0E41 6C
2680:0E42 6F
2680:0E43 7773
2680:0E45 3A0A
2680:0E47 0A00
2680:0E49 0020
2680:0E4B 2020
2680:0E4D 203D
2680:0E4F 2020
2680:0E51 7374
2680:0E53 61
2680:0E54 7274
2680:0E56 204D49
2680:0E59 4E
2680:0E5A 49
2680:0E5B 58
2680:0E5C 2C20
2680:0E5E 7374
2680:0E60 61
2680:0E61 6E
2680:0E62 6461
2680:0E64 7264
2680:0E66 206B65
2680:0E69 7962
2680:0E6B 6F
2680:0E6C 61
2680:0E6D 7264
2680:0E6F 0A00
2680:0E71 0020
2680:0E73 2020
2680:0E75 207520
2680:0E78 207374
2680:0E7B 61
2680:0E7C 7274
2680:0E7E 204D49
2680:0E81 4E
2680:0E82 49
2680:0E83 58
2680:0E84 2C20
2680:0E86 55
2680:0E87 2E53
2680:0E89 2E206578
2680:0E8D 7465
2680:0E8F 6E
2680:0E90 646564206B65
2680:0E96 7962
2680:0E98 6F
2680:0E99 61
2680:0E9A 7264
2680:0E9C 0A00
2680:0E9E 2020
2680:0EA0 2020
2680:0EA2 642020
2680:0EA5 7374
2680:0EA7 61
2680:0EA8 7274
2680:0EAA 204D49
2680:0EAD 4E
2680:0EAE 49
2680:0EAF 58
2680:0EB0 2C20
2680:0EB2 44
2680:0EB3 7574
2680:0EB5 636820
2680:0EB8 6B657962
2680:0EBC 6F
2680:0EBD 61
2680:0EBE 7264
2680:0EC0 20666F
2680:0EC3 7220
2680:0EC5 50
2680:0EC6 53
2680:0EC7 2F
2680:0EC8 320A
2680:0ECA 0A00
2680:0ECC 2020
2680:0ECE 2020
2680:0ED0 7220
2680:0ED2 207365
2680:0ED5 6C
2680:0ED6 65637420
2680:0EDA 726F
2680:0EDC 6F
2680:0EDD 7420
2680:0EDF 64657669
2680:0EE3 636520
2680:0EE6 286E6F
2680:0EE9 7720
2680:0EEB 257329
2680:0EEE 0A00
2680:0EF0 2020
2680:0EF2 2020
2680:0EF4 69202073
2680:0EF8 656C
2680:0EFA 65637420
2680:0EFE 52
2680:0EFF 41
2680:0F00 4D
2680:0F01 20696D
2680:0F04 61
2680:0F05 676520646576
2680:0F0B 6963652028
2680:0F10 6E
2680:0F11 6F
2680:0F12 7720
2680:0F14 257329
2680:0F17 25730A
2680:0F1A 0000
2680:0F1C 0000
2680:0F1E 2028
2680:0F20 6E
2680:0F21 6F
2680:0F22 7420
2680:0F24 7573
2680:0F26 6564202D
2680:0F2A 20726F
2680:0F2D 6F
2680:0F2E 7420
2680:0F30 6973206E6F
2680:0F35 7420
2680:0F37 52
2680:0F38 41
2680:0F39 4D
2680:0F3A 206469
2680:0F3D 736B
2680:0F3F 2900
2680:0F41 0020
2680:0F43 2020
2680:0F45 207320
2680:0F48 207365
2680:0F4B 7420
2680:0F4D 52
2680:0F4E 41
2680:0F4F 4D
2680:0F50 206469
2680:0F53 736B
2680:0F55 207369
2680:0F58 7A65
2680:0F5A 2028
2680:0F5C 6E
2680:0F5D 6F
2680:0F5E 7720
2680:0F60 257529
2680:0F63 25730A
2680:0F66 0000
2680:0F68 2028
2680:0F6A 7265
2680:0F6C 61
2680:0F6D 6C
2680:0F6E 207369
2680:0F71 7A65
2680:0F73 206973
2680:0F76 206672
2680:0F79 6F
2680:0F7A 6D
2680:0F7B 205241
2680:0F7E 4D
2680:0F7F 20696D
2680:0F82 61
2680:0F83 67652900
2680:0F87 0000
2680:0F89 0020
2680:0F8B 2020
2680:0F8D 207020
2680:0F90 207365
2680:0F93 7420
2680:0F95 7072
2680:0F97 6F
2680:0F98 636573
2680:0F9B 736F
2680:0F9D 7220
2680:0F9F 7479
2680:0FA1 7065
2680:0FA3 20746F
2680:0FA6 2038
2680:0FA8 382C
2680:0FAA 2032
2680:0FAC 38362C20
2680:0FB0 6F
2680:0FB1 7220
2680:0FB3 3338
2680:0FB5 362028
2680:0FB8 6E
2680:0FB9 6F
2680:0FBA 7720
2680:0FBC 257529
2680:0FBF 0A0A
2680:0FC1 000A
2680:0FC3 2320
2680:0FC5 0025
2680:0FC7 630A
2680:0FC9 007261
2680:0FCC 6D
2680:0FCD 20696D
2680:0FD0 61
2680:0FD1 6765000A
2680:0FD5 0A00
2680:0FD7 000A
2680:0FD9 0A00
2680:0FDB 00726F
2680:0FDE 6F
2680:0FDF 7400
2680:0FE1 000A
2680:0FE3 0A00
2680:0FE5 000A
2680:0FE7 0A00
2680:0FE9 00496C
2680:0FEC 6C
2680:0FED 656761
2680:0FF0 6C
2680:0FF1 20636F
2680:0FF4 6D
2680:0FF5 6D
2680:0FF6 61
2680:0FF7 6E
2680:0FF8 640A00
2680:0FFB 000A
2680:0FFD 0A506C
2680:1000 6561
2680:1002 7365
2680:1004 20656E
2680:1007 7465
2680:1009 7220
2680:100B 7061
2680:100D 7274
2680:100F 6974696F6E
2680:1014 206E75
2680:1017 6D
2680:1018 626572
2680:101B 2E204472
2680:101F 6976652030
2680:1024 3A20
2680:1026 312D
2680:1028 342C
2680:102A 206472
2680:102D 6976652031
2680:1032 3A20
2680:1034 362D392C
2680:1038 207468
2680:103B 656E
2680:103D 206869
2680:1040 7420
2680:1042 52
2680:1043 45
2680:1044 54
2680:1045 55
2680:1046 52
2680:1047 4E
2680:1048 3A20
2680:104A 0000
2680:104C 256300
2680:104F 000A
2680:1051 004469
2680:1054 736B
2680:1056 206572
2680:1059 726F
2680:105B 7273
2680:105D 2E2020
2680:1060 43
2680:1061 61
2680:1062 6E
2680:1063 27
2680:1064 7420
2680:1066 7265
2680:1068 61
2680:1069 64207061
2680:106D 7274
2680:106F 6974696F6E
2680:1074 207461
2680:1077 626C65
2680:107A 0A00
2680:107C 46
2680:107D 7363
2680:107F 6B2063
2680:1082 61
2680:1083 6E
2680:1084 27
2680:1085 7420
2680:1087 68616E
2680:108A 646C
2680:108C 65207061
2680:1090 7274
2680:1092 6974696F6E
2680:1097 7320
2680:1099 61
2680:109A 626F76
2680:109D 65207365
2680:10A1 63746F
2680:10A4 7220
2680:10A6 36353533
2680:10AA 350A00
2680:10AD 002F
2680:10AF 6465762F
2680:10B3 66643000
2680:10B7 002F
2680:10B9 6465762F
2680:10BD 66643100
2680:10C1 002F
2680:10C3 6465762F
2680:10C7 686431
2680:10CA 0000
2680:10CC 2F
2680:10CD 6465762F
2680:10D1 686432
2680:10D4 0000
2680:10D6 2F
2680:10D7 6465762F
2680:10DB 686433
2680:10DE 0000
2680:10E0 2F
2680:10E1 6465762F
2680:10E5 686434
2680:10E8 0000
2680:10EA 0000
2680:10EC 2F
2680:10ED 6465762F
2680:10F1 686436
2680:10F4 0000
2680:10F6 2F
2680:10F7 6465762F
2680:10FB 686437
2680:10FE 0000
2680:1100 2F
2680:1101 6465762F
2680:1105 686438
2680:1108 0000
2680:110A 2F
2680:110B 6465762F
2680:110F 686439
2680:1112 0000
2680:1114 0A506C
2680:1117 6561
2680:1119 7365
2680:111B 20656E
2680:111E 7465
2680:1120 7220
2680:1122 286162
2680:1125 627265
2680:1128 7669
2680:112A 61
2680:112B 7465
2680:112D 642920
2680:1130 6E
2680:1131 61
2680:1132 6D
2680:1133 65206F66
2680:1137 2025
2680:1139 7320
2680:113B 64657669
2680:113F 63652E
2680:1142 0A00
2680:1144 46
2680:1145 6C
2680:1146 6F
2680:1147 7070
2680:1149 7920
2680:114B 66302C
2680:114E 206631
2680:1151 2C20
2680:1153 686172
2680:1156 64206831
2680:115A 20746F
2680:115D 206834
2680:1160 2C20
2680:1162 683620
2680:1165 746F
2680:1167 206839
2680:116A 0000
2680:116C 2C20
2680:116E 52
2680:116F 41
2680:1170 4D
2680:1171 207200
2680:1174 2E0A5468
2680:1178 656E
2680:117A 206869
2680:117D 7420
2680:117F 52
2680:1180 45
2680:1181 54
2680:1182 55
2680:1183 52
2680:1184 4E
2680:1185 3A20
2680:1187 002F
2680:1189 6465762F
2680:118D 7261
2680:118F 6D
2680:1190 0000
2680:1192 0A506C
2680:1195 6561
2680:1197 7365
2680:1199 20656E
2680:119C 7465
2680:119E 7220
2680:11A0 6C
2680:11A1 696D697420
2680:11A6 6F
2680:11A7 6E
2680:11A8 207072
2680:11AB 6F
2680:11AC 636573
2680:11AF 736F
2680:11B1 7220
2680:11B3 7479
2680:11B5 7065
2680:11B7 2E205468
2680:11BB 656E
2680:11BD 206869
2680:11C0 7420
2680:11C2 52
2680:11C3 45
2680:11C4 54
2680:11C5 55
2680:11C6 52
2680:11C7 4E
2680:11C8 3A20
2680:11CA 0000
2680:11CC 0A506C
2680:11CF 6561
2680:11D1 7365
2680:11D3 20656E
2680:11D6 7465
2680:11D8 7220
2680:11DA 7369
2680:11DC 7A65
2680:11DE 206F66
2680:11E1 205241
2680:11E4 4D
2680:11E5 206469
2680:11E8 736B
2680:11EA 2E205468
2680:11EE 656E
2680:11F0 206869
2680:11F3 7420
2680:11F5 52
2680:11F6 45
2680:11F7 54
2680:11F8 55
2680:11F9 52
2680:11FA 4E
2680:11FB 3A20
2680:11FD 0000
2680:11FF 006D12
2680:1202 8412
2680:1204 0000
2680:1206 0000
2680:1208 0000
2680:120A 2812
2680:120C 0000
2680:120E 0000
2680:1210 0000
2680:1212 0000
2680:1214 0000
2680:1216 0000
2680:1218 0000
2680:121A 0000
2680:121C 0000
2680:121E 0000
2680:1220 B112
2680:1222 3F
2680:1223 123F
2680:1225 125612
2680:1228 45
2680:1229 7272
2680:122B 6F
2680:122C 723A
2680:122E 204469
2680:1231 7669
2680:1233 7369
2680:1235 6F
2680:1236 6E
2680:1237 206279
2680:123A 2030
2680:123C 200A
2680:123E 00496C
2680:1241 6C
2680:1242 656761
2680:1245 6C
2680:1246 20454D
2680:1249 20696E
2680:124C 7374
2680:124E 7275
2680:1250 637427
2680:1253 6E
2680:1254 0A00
2680:1256 45
2680:1257 7272
2680:1259 20696E
2680:125C 20454D
2680:125F 206361
2680:1262 7365
2680:1264 20696E
2680:1267 7374
2680:1269 7220
2680:126B 0A00
2680:126D 56
2680:126E 61
2680:126F 7269
2680:1271 61
2680:1272 626C65
2680:1275 206F75
2680:1278 7420
2680:127A 6F
2680:127B 66207261
2680:127F 6E
2680:1280 67650A00
2680:1284 45
2680:1285 7272
2680:1287 20696E
2680:128A 20454D
2680:128D 207365
2680:1290 7420
2680:1292 696E737472
2680:1297 200A
2680:1299 00466C
2680:129C 6F
2680:129D 61
2680:129E 7469
2680:12A0 6E
2680:12A1 67207074
2680:12A5 206E6F
2680:12A8 7420
2680:12AA 696D706C2E
2680:12AF 0A00
2680:12B1 48
2680:12B2 6561
2680:12B4 7020
2680:12B6 6F
2680:12B7 7665
2680:12B9 7266
2680:12BB 6C
2680:12BC 6F
2680:12BD 7720
2680:12BF 0A00
2680:12C1 45
2680:12C2 4D
2680:12C3 207472
2680:12C6 61
2680:12C7 7020
2680:12C9 3030
2680:12CB 3030
2680:12CD 3030
2680:12CF 3020
2680:12D1 6F
2680:12D2 637461
2680:12D5 6C
2680:12D6 0A00
2680:12D8 06
2680:12D9 37
2680:12DA 06
2680:12DB 37
2680:12DC 00000000 times 4 db 0 ; Padding. Or are these .bss vars?
menu_stack:
2680:12E0 000000...00 times MENU_STACKSIZE/2 dw 0 ; `kerstack' is a misnomer. This is just the menu stack.
27AE:0000 00... times 0x2520 db 0 ; NUL gap after menu, this will be loaded by the boot setor to the end.
; ---
2A00:0000
__END__
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment