Quellcode durchsuchen

calc: pointer types, New/Dispose and dereference (ladder 27648)

A pointer type ^T is one word; its elem field holds the pointee TYPE symbol,
and DefVar copies that type's array/record metadata.  Dereference in both
ParseVar (expressions) and ParseSub (the statement/assignment path) loads the
pointer into DI and hands the pointee symbol to ParseSub, so Buffer^[i] works
for constant and variable indices, as an assignment destination, a string
source/comparison operand, and a writeln argument.

New(P) allocates sizeof(P^) from a bump heap starting at hdrHeap via the new
heap_new runtime entry (40); Dispose consumes its argument and is a no-op
because CALC allocates once at the start of Help and disposes only after the
help display, with no later allocation.  The runtime is now 3950 bytes, two
bytes below the probe HDR; moving that scaffold is the next infrastructure
task.

t93_pointer covers ^Pages, New, Buffer^[i] writes/reads, a variable index, a
string comparison and Dispose; it runs under qemu and Exec86.

The CALC ladder moves 26924 -> 27648; the next blocker is text-file Eof/Readln
in Help.

Verified: compile matrix 94/94, ladder 1/1, 85 .COM linked, 81 executed under
both qemu and Exec86, rt_exec 276/276, nonvacuity 121/121, run_all ALL PASS.
Eric Streit vor 1 Tag
Ursprung
Commit
1aed9cdd7a

+ 26 - 15
CALC-COMPILE.md

@@ -97,7 +97,7 @@ Current rung (measured today, normalised position):
 
 | position | blocker |
 |---|---|
-| **26924** | `Buffer : ^Pages` — pointer types and `New`/dereference (`ERR 30`) |
+| **27648** | `Eof(H)` in `Help` — text-file end-of-file (`ERR 41`) |
 
 Rungs behind it (now passed):
 
@@ -138,7 +138,8 @@ Rungs ahead:
 | 23700 | typed-file data write (`write(MCfile, Sheet[I,J])`) - DONE |
 | 25674 | text-file output (`Writeln(MCFile)`) - DONE |
 | 26066 | `Str(Value:FW:DEC,P)` - real-to-string formatting - DONE |
-| 26924 | `Buffer : ^Pages` - pointer type |
+| 26924 | `Buffer : ^Pages` - pointer type - DONE |
+| 27648 | `Eof(H)` / text-file reads |
 
 Corrections the measurements force, worth stating plainly because the stage list
 below was written before them:
@@ -347,7 +348,7 @@ recipe above regenerates them, and the numbers are what this document keeps.
    grow into the other. CALC's code is **16,560 bytes**, which the old fixed
    4 KiB window could not emit; that was a port artefact, not a TP3 limit.
 2. **`MaxCode = 24,000` is not the binding constraint for the compile goal.**
-   16,560 + 3,911 (our current runtime) = 20,471, comfortably inside 24,000.
+   16,560 + 3,950 (our current runtime) = 20,510, comfortably inside 24,000.
    The old `dataBase` alone had to move; `t43_codewindow` was the fixture that
    policed it and has been re-baselined (§3.2).
 3. **The §3 data budget is confirmed, not inferred.** Reported data is
@@ -360,7 +361,7 @@ recipe above regenerates them, and the numbers are what this document keeps.
    **DS size `0315h` (12,624 B)**, and **heap/stack `0400h` (16,384 B)**, with
    `A000h` as the maximum (640 KiB, in paragraphs). A `.COM` still uses
    separate CS/DS segments; the original proves it.
-5. **The runtime is 11,341 bytes** in the original. Ours is 3,911 B. It
+5. **The runtime is 11,341 bytes** in the original. Ours is 3,950 B. It
    explains where the original's fixed `pc := $2D7C` / `dc := $0240` came
    from, and why `TPSRC7:81-82` looks the way it does.
 
@@ -427,7 +428,7 @@ inline initmem    mode 0006, CS 0813, DS 11D7,
 
 The file is runtime + code, exactly the shape we now emit; the data is in the
 separate DS described by the inline parameters. Our CALC image will be smaller
-in runtime (3,911 B instead of 11,341 B) but has the same code-only, high-data
+in runtime (3,950 B instead of 11,341 B) but has the same code-only, high-data
 shape. The ladder moved **20,912 → 22,253** on this change; the next blocker is
 not layout but the untyped `file` declaration; that is fixed in the next rung.
 
@@ -460,9 +461,9 @@ assignment, string fields through DI, REAL constants, UpCase, run-time set
 membership, string fields in WRITE, real output, run-time set algebra,
 `Succ`/`Pred`, the original memory layout, the untyped file type, the
 file control-block operations, VAR string parameters, `Chr`, typed-file
-block I/O, text-file output, and `Str`). The
-ladder has moved from the first typed constant at 7,791 to **26,924**, where
-`Buffer : ^Pages` asks for pointer types.
+block I/O, text-file output, `Str`, and pointer types with `New`/dereference). The
+ladder has moved from the first typed constant at 7,791 to **27,648**, where
+`Eof(H)` asks for text-file end-of-file.
 
 The rung commits and their tags, in order (each is one rung with its own
 fixture, red proof, and — where the harness allows — execution under qemu and
@@ -503,7 +504,8 @@ Exec86):
 | `02d5b6e` | `v-TP3-CALC-VARSTR` | `ERR 102 23700` (typed-file data write) |
 | `0859a3b` | `v-TP3-CALC-FILEIO` | `ERR 102 25674` (text-file output) |
 | `93d2ed4` | `v-TP3-CALC-TEXTOUT` | `ERR 41 26066` (`Str`) |
-| *(this commit)* | `v-TP3-CALC-STR` | **`ERR 30 26924`** (pointer type) |
+| `38b6184` | `v-TP3-CALC-STR` | `ERR 30 26924` (pointer type) |
+| *(this commit)* | `v-TP3-CALC-POINTER` | **`ERR 41 27648`** (`Eof`) |
 
 - **Code HEAD** is the layout rung (`v-TP3-CALC-LAYOUT`).  Nothing is pushed.
   The terminal-config work (`v-TP3-TERMCFG`) and the editor key map
@@ -549,6 +551,14 @@ Exec86):
   parameter slot holds the caller's address; assignment, `Read`, `Length`,
   `writeln`, concatenation, comparison and `x[i]` all go through that address.
   `Chr(n)` folds or loads an ordinal and yields a CHAR.
+- **Pointer types, `New`/`Dispose`, and dereference are landed
+  (`t93_pointer`).**  A pointer is one word; its `elem` holds the pointee TYPE
+  symbol.  `Buffer^` loads the pointer into DI and hands the pointee's
+  array/record metadata to ParseSub, so `Buffer^[i]` indexes and `Buffer^[i] :=`
+  stores.  `New` uses a bump heap starting at hdrHeap (`heap_new`, entry 40);
+  `Dispose` is a no-op because CALC allocates once and disposes only after the
+  help display, with no later allocation.  The fixture runs under both
+  oracles.
 - **`Str(real:width:decimals, S)` is landed (`t92_strreal`).**  The source
   address is parked on the stack while width/decimals and the destination are
   parsed, then the two argument words are swapped to real_fmt's order.  CX is
@@ -632,7 +642,7 @@ Exec86):
   `ERR 1 22253`, terminal config **4/4**, 78 `.COM` linked and **76 executed
   under both qemu and Exec86** (`t64_arrays` remains compile-only because it
   has no `.out`).  `tests/nonvacuity.sh`: **121 ok, 0 failed**.  The runtime is
-  3,911 bytes (wrintw, real_from_int, real_add, real_sub, real_mul, real_div,
+  3,950 bytes (wrintw, real_from_int, real_add, real_sub, real_mul, real_div,
   real_cmp, real_int, real_fmt, real_val, real_write, set_op, set_cmp,
   set_copy; the golden was re-blessed) and `tests/rt_exec.py` passes
   **275/275**, including the MBF arithmetic/output/parse cases and eleven
@@ -1138,10 +1148,11 @@ under qemu and Exec86, and `rt_exec` pins the name copy.
 
 Typed-file block I/O (`write`/`read` with a `TFile`) is done (`t90_fileio`)
 and TEXT file output is done (`t91_textout`), both compile-only because the
-harness has no filesystem.  `Str` real formatting is done (`t92_strreal`).
-The next ladder blocker is a POINTER type (`Buffer : ^Pages`) and the
-`New`/`Dispose`/dereference operations that follow it; `Val`, `EndOfFile` and
-text `Readln` are still open.
+harness has no filesystem.  `Str` real formatting is done (`t92_strreal`) and
+pointer types with `New`/`Dispose`/dereference are done (`t93_pointer`).  The
+next ladder blocker is `Eof(H)` and text `Readln(H, ...)`, which need
+text-mode newline/`^Z` semantics; `Val` is still open.  The runtime is 3,950
+bytes, only 2 bytes below the probe HDR, so that work must move the scaffold.
 
 **Stage 14 — the CRT identifiers.** `GotoXY` (25), `LowVideo`/`NormVideo`
 (16 + 16), `ClrEol` (10), `ClrScr` (6), `KeyPressed` (3), `Delay` (1),
@@ -1185,7 +1196,7 @@ remaining run-time capacity note.
 | limit | value | CALC needs | verdict |
 |---|---|---|---|
 | `TextLimit` (source buffer) | 62,903 | `CALC.PAS` + `CALC.INC`, normalised = **62,415** | **488 bytes of slack** |
-| `MaxCode` | 24,000 | 16,560 B program + 3,911 B runtime = **20,471 B** | **OK, 3,529 B spare** (§3.2) |
+| `MaxCode` | 24,000 | 16,560 B program + 3,950 B runtime = **20,510 B** | **OK, 3,490 B spare** (§3.2) |
 | code window | `CodeMax = 6F00h`, capped by `MaxCode` | 20,227 B | **OK**; no data gap (§3.2) |
 | data area | fixed image `8000h`, zeroed by `initmem` | **12,032 B** (measured, §3.1) | **OK for compile**; see the run-time cargo note (§3.2) |
 | stack | 16,384 min / 655,360 max | 16,384 min | matches the original's `minstk`/`maxstk` |

+ 4 - 3
SUMMARY.md

@@ -2044,7 +2044,7 @@ the compiler *emitting* a 16,560-byte program). The ratchet and front-end
 features through **file control-block operations and the original memory
 layout** are landed: the ladder (`tests/calc_ladder.sh` +
 `tests/fixtures/calc_ladder.tsv`, run by `run_all.sh`; CALC.PAS now stops at
-`ERR 30` at pos 26924, `Buffer : ^Pages` in Help), the `{$I}` include,
+`ERR 41` at pos 27648, `Eof(H)` in Help), the `{$I}` include,
 `^X`/`#nn`, scalar typed constants, sets, enums, records (CellRec = 80),
 subranges, arrays, element/field access, file types, string value parameters,
 `Length`, the CRT identifiers (`ClrScr`/`GotoXY`/`ClrEol`/`LowVideo`/
@@ -2061,8 +2061,9 @@ real output (`t84_realwrite`), run-time set algebra and `Succ`/`Pred`
 type (`t87`), file control-block operations (`t88`: `Assign`/`Reset`/
 `Rewrite`/`Close`/`IoResult`; data I/O is still refused), and VAR string
 parameters plus `Chr` (`t89`), typed-file block I/O (`t90`, compile-only), and
-text-file output (`t91`, compile-only), and `Str` real formatting (`t92`). The
-next rung is pointer types (`^Pages`) and the heap operations. The runtime is 3,907 bytes / 39 entries and its probe
+text-file output (`t91`, compile-only), `Str` real formatting (`t92`), and
+pointer types with `New`/`Dispose`/dereference (`t93`). The next rung is text
+`Eof`/`Readln`. The runtime is 3,907 bytes / 39 entries and its probe
 scaffold is nearly full, so the next runtime addition must move HDR. Items 1-4
 below are independent of both tracks.
 

+ 135 - 10
shell/Compiler.mod

@@ -141,6 +141,7 @@ CONST
       next file increment. *)
    BI_Assign = 16 ; BI_Reset = 17 ; BI_Rewrite = 18 ;
    BI_Close = 19 ; BI_IoResult = 20 ; BI_Chr = 21 ; BI_Str = 22 ;
+   BI_New = 23 ; BI_Dispose = 24 ;
    (* the sub-codes EmCrtSeq takes *)
    CrtClr = 0 ; CrtDl = 1 ; CrtDh = 2 ; CrtCaret = 3 ; CrtEol = 4 ;
    CrtLow = 5 ; CrtNorm = 6 ; CrtDelay = 7 ; CrtKey = 8 ;
@@ -406,6 +407,7 @@ VAR
    TU_FileClose   : CARDINAL ;
    TU_IoResult    : CARDINAL ;
    TU_IoStore     : CARDINAL ;  (* save AX as the last I/O status *)
+   TU_HeapNew     : CARDINAL ;  (* bump allocation for New *)
    TU_CmpStr   : CARDINAL ;  (* string comparison; two addresses on the stack,
                                 signed -1/0/+1 in AX *)
    TU_StrCat   : CARDINAL ;  (* string concatenation; dest and source addresses
@@ -2462,14 +2464,29 @@ PROCEDURE ParseSub (VAR r : ERes) ;
    element-size scaling that a one-byte string element does not, and it is
    item 2. *)
 VAR t : ERes ;
-    ai, fi, nd, k, st : CARDINAL ;
+    ai, fi, nd, k, st, p : CARDINAL ;
     coff : LONGINT ;
     accOnStack, haveVar, more : BOOLEAN ;
-    found : BOOLEAN ;
+    baseDI, found : BOOLEAN ;
 BEGIN
    LOOP
       Skip () ;
-      IF CurCh () = '.' THEN
+      IF (r.kind = 1) AND (symtab [r.idx].cls = TPtr) AND
+         (CurCh () = '^') THEN
+         (* Dereference in a statement/assignment path, which reaches ParseSub
+            without going through ParseVar.  The pointer word is the base
+            address; r.idx becomes the pointee TYPE symbol for array/record
+            metadata, exactly as in ParseVar. *)
+         DropCh (GetCh ()) ;
+         p := symtab [r.idx].elem ;
+         EmLoadVar (symtab [r.idx].local, symtab [r.idx].off, 2) ;
+         EmMovDiAx () ;
+         r.idx := p ;
+         r.kind := 5 ;
+         r.boff := 0 ;
+         r.cls := symtab [p].cls ;
+         r.sz := symtab [p].size
+      ELSIF CurCh () = '.' THEN
          (* FIELD selection: `r.f'.  The field's offset adds to the record
             base's, and the value's class and WIDTH become the field's - which
             is the whole reason a width rides on the expression (VarSize). *)
@@ -2583,10 +2600,11 @@ BEGIN
                A constant index folds into coff; a run-time one is scaled as
                soon as it is parsed and summed on the STACK, because parsing
                the next index may clobber AX and DI. *)
-            IF (r.kind = 5) OR (symtab [r.idx].arrIdx = 0) THEN
+            IF symtab [r.idx].arrIdx = 0 THEN
                Err (ESimpType) ;
                RETURN
             END ;
+            baseDI := (r.kind = 5) ;
             ai := symtab [r.idx].arrIdx - 1 ;
             nd := 0 ;
             coff := 0 ;
@@ -2664,7 +2682,19 @@ BEGIN
                EmPopAx () ;
                accOnStack := FALSE
             END ;
-            IF haveVar THEN
+            IF baseDI THEN
+               (* The base address is already in DI: a pointer dereference
+                  (`Buffer^[i]').  Add the computed byte offset to it; a
+                  constant-only index can use ADD DI,imm16. *)
+               IF haveVar THEN
+                  EmAddDiAx ()
+               ELSE
+                  IF coff # 0 THEN
+                     EmAddDiImm (W16 (coff))
+                  END
+               END ;
+               r.kind := 5
+            ELSIF haveVar THEN
                EmLeaDi (symtab [r.idx].local,
                         (symtab [r.idx].off + r.boff
                          + W16 (coff)) MOD 10000H) ;
@@ -2694,12 +2724,31 @@ END ParseSub ;
 
 PROCEDURE ParseVar (VAR r : ERes) ;
 (* name [ '[' constExpr ']' ]* ; a function name maps to its result var *)
-VAR idx : CARDINAL ;
+VAR idx, p : CARDINAL ;
 BEGIN
    IF NOT Search (wrd, idx) THEN
       Err (EUnknown) ;
       RETURN
    END ;
+   IF symtab [idx].cls = TPtr THEN
+      Skip () ;
+      IF CurCh () = '^' THEN
+         (* Dereference: the pointer word is the base address.  r.idx becomes
+            the pointee TYPE symbol, because ParseSub reads an array/record's
+            metadata from the symbol, not from the expression. *)
+         DropCh (GetCh ()) ;
+         p := symtab [idx].elem ;
+         EmLoadVar (symtab [idx].local, symtab [idx].off, 2) ;
+         EmMovDiAx () ;
+         r.idx := p ;
+         r.kind := 5 ;
+         r.boff := 0 ;
+         r.cls := symtab [p].cls ;
+         r.sz := symtab [p].size ;
+         ParseSub (r) ;
+         RETURN
+      END
+   END ;
    r.idx := idx ;
    r.kind := 1 ;
    r.boff := 0 ;
@@ -4763,12 +4812,17 @@ BEGIN
             addresses are pushed - source first, so it sits at [BP+6] and the
             destination at [BP+4] - the caller pops both, and the limit is a
             full MOV CX,imm16 because this runtime reads it in CX outright. *)
-         IF src.kind # 1 THEN
+         IF src.kind = 1 THEN
+            EmPushVarAddr (symtab [src.idx].local,
+                           (symtab [src.idx].off + src.boff) MOD 10000H)
+         ELSIF src.kind = 5 THEN
+            (* A string element reached through DI, including a pointer
+               dereference: Buffer^[i].  Its address is already in DI. *)
+            EmPushDi ()
+         ELSE
             Err (ENoLib) ;          (* a computed string is not a value *)
             RETURN
          END ;
-         EmPushVarAddr (symtab [src.idx].local,
-                        (symtab [src.idx].off + src.boff) MOD 10000H) ;
          EmPushVarAddr (symtab [r.idx].local,
                         (symtab [r.idx].off + r.boff) MOD 10000H) ;
          EmMovCxi ((VarSize (r) - 1) MOD 10000H) ;
@@ -4945,7 +4999,7 @@ VAR arg : ERes ;
     reading : BOOLEAN ;
     pushed : BOOLEAN ;
     skipArg : BOOLEAN ;
-    n : CARDINAL ;
+    n, p : CARDINAL ;
     dummy : ERes ;
 BEGIN
    which := symtab [idx].cls ;               (* BI_* *)
@@ -4957,6 +5011,46 @@ BEGIN
       DropC (EmCall (TU_Halt)) ;
       RETURN
    END ;
+   IF which = BI_New THEN
+      (* New(P): allocate sizeof(P^) bytes and store the address in P.  The
+         pointer symbol's `elem' is the pointee TYPE symbol; its size is the
+         allocation. *)
+      IF MatchDelim ('(') THEN
+         ParseExpr (arg) ;
+         IF OK () AND (arg.kind = 1) AND (arg.cls = TPtr) THEN
+            p := symtab [arg.idx].elem ;
+            EmMovAxi (symtab [p].size) ;
+            EmPushAx () ;                    (* size -> [BP+6] *)
+            EmPushVarAddr (symtab [arg.idx].local,
+                           (symtab [arg.idx].off + arg.boff) MOD 10000H) ;
+            DropC (EmCall (TU_HeapNew)) ;
+            EmAddSp (4)
+         ELSIF OK () THEN
+            Err (ETypeErr)
+         END ;
+         ExpectDelim (')', ENoSemi)
+      ELSE
+         Err (ENoSemi)
+      END ;
+      RETURN
+   END ;
+   IF which = BI_Dispose THEN
+      (* Dispose(P): consume the argument.  The allocator is a bump pointer
+         with no free list; CALC allocates once at the start of Help and
+         disposes only after the help display is finished, so not reclaiming
+         the block has no observable effect.  A future allocation after a
+         Dispose would need a real free list. *)
+      IF MatchDelim ('(') THEN
+         ParseExpr (arg) ;
+         IF OK () AND NOT ((arg.kind = 1) AND (arg.cls = TPtr)) THEN
+            Err (ETypeErr)
+         END ;
+         ExpectDelim (')', ENoSemi)
+      ELSE
+         Err (ENoSemi)
+      END ;
+      RETURN
+   END ;
    IF which = BI_ClrScr THEN
       EmCrtSeq (CrtClr) ;
       RETURN
@@ -6081,6 +6175,32 @@ BEGIN
    consumed := FALSE ;
    newArrIdx := 0 ;
    Skip () ;                (* after ':' / '=' : skip blanks *)
+   IF CurCh () = '^' THEN
+      (* A pointer type: ^Type.  The pointer itself is a word; its `elem'
+         field holds the pointee TYPE symbol, not a byte size.  The pointee's
+         array/record metadata is copied onto the pointer variable so a
+         dereference can hand it to ParseSub unchanged. *)
+      DropCh (GetCh ()) ;
+      Skip () ;
+      IF NOT Alpha (CurCh ()) THEN
+         Err (ESimpType) ;
+         RETURN
+      END ;
+      GetWord () ;
+      IF NOT Search (wrd, idx) OR (symtab [idx].tag # KType) THEN
+         Err (ESimpType) ;
+         RETURN
+      END ;
+      cls := TPtr ;
+      size := 2 ;
+      elem := idx ;                       (* pointee type symbol *)
+      newArrIdx := symtab [idx].arrIdx ;
+      recFldFirst := symtab [idx].fldFirst ;
+      recFldLast := symtab [idx].fldLast ;
+      enumLo := symtab [idx].lo ;
+      enumHi := symtab [idx].hi ;
+      RETURN
+   END ;
    IF CurCh () = '(' THEN
       (* An enumeration: `(Constant, Formula, Txt, ...)'.  Each enumerator
          becomes a constant with its ordinal position as its value, and the
@@ -7087,6 +7207,10 @@ BEGIN
    symtab [i].defnd := TRUE ;
    i := NewSym ("STR", KBuiltin, BI_Str, 0, 0, 0, 0, FALSE) ;
    symtab [i].defnd := TRUE ;
+   i := NewSym ("NEW", KBuiltin, BI_New, 0, 0, 0, 0, FALSE) ;
+   symtab [i].defnd := TRUE ;
+   i := NewSym ("DISPOSE", KBuiltin, BI_Dispose, 0, 0, 0, 0, FALSE) ;
+   symtab [i].defnd := TRUE ;
    (* KBD: the console keyboard as a TEXT file.  This runtime's read entries
       already read the console, so `Read(Kbd, Ch)' drops the file argument and
       reads a character exactly as `Read(Ch)' does. *)
@@ -7250,6 +7374,7 @@ BEGIN
    TU_FileClose   := RT_Entry (37) ;
    TU_IoResult    := RT_Entry (38) ;
    TU_IoStore     := RT_Entry (39) ;
+   TU_HeapNew     := RT_Entry (40) ;
    TU_WrStr    := RT_Entry (15) ;      (* a string variable is written through
                                           the address on the stack *)
    TU_RdStr    := RT_Entry (16) ;      (* readln(s)/read(s): TPSRC8 prdstr,

+ 1 - 0
shell/Runtime.def

@@ -78,6 +78,7 @@ CONST
    E_FileClose = 37 ;       (* [BP+4]=file; DOS close if open *)
    E_IoResult = 38 ;        (* AX = last DOS status, then clear it *)
    E_IoStore = 39 ;         (* AX = status; save it for IOResult *)
+   E_HeapNew = 40 ;         (* [BP+4]=pointer variable, [BP+6]=size *)
 
    (* File control block, mirrored by Compiler.FileVarSize. *)
    F_NameOff = 4 ;           (* handle word, mode word, then the name *)

+ 28 - 4
shell/Runtime.mod

@@ -98,7 +98,8 @@ CONST
    D_FMTTOT = 191 ;   (* 2 bytes: pad + length *)
    D_ASCSRC = 193 ;   (* 2 bytes: ascreal's source pointer *)
    D_IORES = 195 ;    (* 2 bytes: the last file-operation DOS status *)
-   D_END   = 197 ;    (* the block is padded to here *)
+   D_HEAP  = 197 ;    (* 2 bytes: the bump allocator's next free byte *)
+   D_END   = 199 ;    (* the block is padded to here *)
 
    (* THE LOAD BIAS.  Everything above is an offset into the image as this
       compiler numbers it: the entry JMP is at image 0.  But a DOS .COM is
@@ -155,7 +156,7 @@ VAR
    dataAt : CARDINAL ;
    rtBase : CARDINAL ;
    built  : BOOLEAN ;
-   entNm  : ARRAY [0..39] OF ARRAY [0..MaxNm] OF CHAR ;
+   entNm  : ARRAY [0..40] OF ARRAY [0..MaxNm] OF CHAR ;
 
 (* ---------------------------------------------------------------- *)
 (*  name helpers                                                     *)
@@ -975,6 +976,10 @@ BEGIN
    CmpDiCx ;
    Jb8 ("im_zero") ;
    M ("im_done") ;
+   (* The heap starts at the end of the globals.  CX still holds hdrHeap from
+      the header, including on the no-globals path. *)
+   MovAxCx ;
+   StDataAx (D_HEAP) ;
    PushDs ; PopEs ;
    RetR
 END EmitInitMem ;
@@ -3023,7 +3028,21 @@ BEGIN
       this with AX = the DOS result so the next IOResult can report it. *)
    M ("io_store") ;
    StDataAx (D_IORES) ;
-   RetR
+   RetR ;
+
+   (* New(P): allocate Size bytes from the bump heap, store the address in P. *)
+   M ("heap_new") ;
+   PushBp ; MovBpSp ;
+   PushBx ; PushCx ; PushDx ;
+   MovBxData (D_HEAP) ;
+   MovDxBp4 ;
+   B (89H) ; B (1AH) ;               (* MOV [DX],BX: P^ := the block *)
+   MovCxBp6 ;
+   MovAxBx ;
+   AddAxCx ;
+   StDataAx (D_HEAP) ;
+   PopDx ; PopCx ; PopBx ;
+   MovSpBp ; PopBp ; RetR
 END EmitFileOps ;
 
 PROCEDURE EmitData ;
@@ -3163,6 +3182,10 @@ BEGIN
       HALT
    END ;
    B (0) ; B (0) ;                 (* the last file-operation status *)
+   IF dataAt + D_HEAP # rpos THEN
+      HALT
+   END ;
+   B (0) ; B (0) ;                 (* the bump heap's next free byte *)
    WHILE rpos < dataAt + D_END DO
       B (0)
    END ;
@@ -3276,6 +3299,7 @@ BEGIN
    SetStr (entNm [37], "file_close") ;
    SetStr (entNm [38], "ioresult") ;
    SetStr (entNm [39], "io_store") ;
+   SetStr (entNm [40], "heap_new") ;
    built := TRUE
 END RT_Build ;
 
@@ -3303,7 +3327,7 @@ BEGIN
    IF NOT built THEN
       RT_Build (0)
    END ;
-   IF i > 39 THEN
+   IF i > 40 THEN
       RETURN 0
    END ;
    RETURN rtBase + LblOff (entNm [i])

+ 4 - 3
shell/tests/RtProbe.mod

@@ -108,7 +108,7 @@ END PENT ;
 
 PROCEDURE Main ;
 VAR i, n, base : CARDINAL ;
-    names : ARRAY [0..39] OF ARRAY [0..15] OF CHAR ;
+    names : ARRAY [0..40] OF ARRAY [0..15] OF CHAR ;
 BEGIN
    base := GetBase () ;
    RT_Build (base) ;
@@ -121,7 +121,7 @@ BEGIN
    PCARD (RT_Size ()) ; PS (" bytes") ; NL ;
    PS ("code ends at ") ; PCARD (RT_CodeEnd ()) ; NL ;
    i := 0 ;
-   WHILE i <= 39 DO
+   WHILE i <= 40 DO
       names [i] := "" ;
       INC (i)
    END ;
@@ -152,8 +152,9 @@ BEGIN
    names [37] := "file_close" ;
    names [38] := "ioresult" ;
    names [39] := "io_store" ;
+   names [40] := "heap_new" ;
    i := 0 ;
-   WHILE i <= 39 DO
+   WHILE i <= 40 DO
       PENT (i, names [i]) ;
       INC (i)
    END ;

+ 8 - 8
shell/tests/fixtures/calc_ladder.tsv

@@ -25,11 +25,11 @@
 # positions shift — which is exactly why this must be a measured number, not a
 # remembered one.
 #
-# Current rung (2026-10-23): `Buffer : ^Pages' in the help-data declarations.
-# UpCase, run-time set membership, string fields through DI, the original memory
-# layout, untyped-file declarations, file control-block operations, VAR string
-# parameters, Chr, typed-file block I/O, text-file output and Str moved the
-# ladder 15911 -> 18267 -> 19847 -> 20912 -> 22253 -> 22280 -> 22706 -> 22859
-# -> 23700 -> 25674 -> 26066 -> 26924.  The next blocker is a POINTER type
-# (`^Pages') and its New/Dispose/dereference operations (TP3 error 30).
-CALC.PAS	ERR	30	26924
+# Current rung (2026-10-23): `Eof(H)' in Help.  UpCase, run-time set
+# membership, string fields through DI, the original memory layout, untyped-file
+# declarations, file control-block operations, VAR string parameters, Chr,
+# typed-file block I/O, text-file output, Str, and pointer types with
+# New/Dispose/dereference moved the ladder 15911 -> 18267 -> 19847 -> 20912 ->
+# 22253 -> 22280 -> 22706 -> 22859 -> 23700 -> 25674 -> 26066 -> 26924 ->
+# 27648.  The next blocker is EndOfFile on a text file (TP3 error 41).
+CALC.PAS	ERR	41	27648

+ 7 - 0
shell/tests/fixtures/expected.tsv

@@ -662,3 +662,10 @@ t91_textout	OK	231	137
 #                   length-prefixed field; the .out is derived from its measured
 #                   formatting rules (3.0 at 2 decimals, and 3 at 0 decimals).
 t92_strreal	OK	247	36
+
+#   t93_pointer          pointer type ^Pages, New/Dispose, dereference and
+#                   indexed string elements through the pointer.  New uses the
+#                   bump heap; Dispose is a no-op (CALC allocates once at the
+#                   start of Help and disposes after it).  The .out is derived
+#                   from the two assigned strings and the comparison.
+t93_pointer	OK	196	15

+ 3 - 0
shell/tests/fixtures/t93_pointer.out

@@ -0,0 +1,3 @@
+hi
+yo
+TRUE

+ 24 - 0
shell/tests/fixtures/t93_pointer.pas

@@ -0,0 +1,24 @@
+program t93_pointer;
+
+{ t93 -- pointer types, New/Dispose, dereference and indexed string elements.
+  CALC.INC's Help declares `Buffer : ^Pages' where Pages is an array of
+  string[80], calls New(Buffer), writes/reads Buffer^[i], and disposes it. }
+
+type
+  Pages = array [0..2] of string[5];
+
+var
+  P : ^Pages;
+  S : string[5];
+  I : integer;
+begin
+  New (P);
+  P^[0] := 'hi';
+  P^[1] := 'yo';
+  I := 1;
+  S := P^[I];
+  writeln (P^[0]);
+  writeln (S);
+  writeln (P^[1] = 'yo');
+  Dispose (P)
+end.

+ 22 - 4
shell/tests/nonvacuity.sh

@@ -1559,12 +1559,30 @@ cp "$SAVED_C" Compiler.mod
 if python3 - <<'PYX'
 p = 'Compiler.mod'
 s = open(p).read()
-src = ('         EmPushVarAddr (symtab [src.idx].local,\n'
-       '                        (symtab [src.idx].off + src.boff) MOD 10000H) ;\n'
+src = ('         IF src.kind = 1 THEN\n'
+       '            EmPushVarAddr (symtab [src.idx].local,\n'
+       '                           (symtab [src.idx].off + src.boff) MOD 10000H)\n'
+       '         ELSIF src.kind = 5 THEN\n'
+       '            (* A string element reached through DI, including a pointer\n'
+       '               dereference: Buffer^[i].  Its address is already in DI. *)\n'
+       '            EmPushDi ()\n'
+       '         ELSE\n'
+       '            Err (ENoLib) ;          (* a computed string is not a value *)\n'
+       '            RETURN\n'
+       '         END ;\n'
        '         EmPushVarAddr (symtab [r.idx].local,\n'
        '                        (symtab [r.idx].off + r.boff) MOD 10000H) ;')
-dst = ('         EmPushVarAddr (symtab [r.idx].local,\n'
-       '                        (symtab [r.idx].off + r.boff) MOD 10000H) ;\n'
+dst = ('         IF src.kind = 1 THEN\n'
+       '            EmPushVarAddr (symtab [r.idx].local,\n'
+       '                           (symtab [r.idx].off + r.boff) MOD 10000H)\n'
+       '         ELSIF src.kind = 5 THEN\n'
+       '            (* A string element reached through DI, including a pointer\n'
+       '               dereference: Buffer^[i].  Its address is already in DI. *)\n'
+       '            EmPushDi ()\n'
+       '         ELSE\n'
+       '            Err (ENoLib) ;          (* a computed string is not a value *)\n'
+       '            RETURN\n'
+       '         END ;\n'
        '         EmPushVarAddr (symtab [src.idx].local,\n'
        '                        (symtab [src.idx].off + src.boff) MOD 10000H) ;')
 assert s.count(src) == 1, 'the assignment pushes found %d times -- update this mutation' % s.count(src)

+ 1 - 1
shell/tests/rt_exec.py

@@ -113,7 +113,7 @@ ENTS = ["initmem", "progend", "stackchk", "wrint", "wrchar", "wrbool",
         "real_div", "real_cmp", "real_int", "real_fmt", "real_val",
         "real_write", "set_op", "set_cmp", "set_copy",
         "file_assign", "file_reset", "file_rewrite", "file_close",
-        "ioresult", "io_store"]
+        "ioresult", "io_store", "heap_new"]
 
 # A call slot's flags, as rtdrv.s reads them.
 F_STACK = 1     # the argument goes on the stack, popped by the caller

+ 1823 - 1803
shell/tests/runtime.golden

@@ -21,1807 +21,1827 @@
 0012  83 C7 02    add di,2h
 0015  39 CF       cmp di,cx
 0017  72 F5       jb 0eh
-0019  1E          push ds
-001A  07          pop es
-001B  C3          ret
-001C  31 C0       xor ax,ax
-001E  B4 4C       mov ah,4ch
-0020  CD 21       int 21h
-0022  C3          ret
-0023  C3          ret
-0024  55          push bp
-0025  8B EC       mov bp,sp
-0027  8B 46 04    mov ax,word ptr [bp+4h]
-002A  83 F8 00    cmp ax,0h
-002D  7D 0A       jnl 39h
-002F  50          push ax
-0030  B0 2D       mov al,2dh
-0032  B4 02       mov ah,2h
-0034  CD 21       int 21h
-0036  58          pop ax
-0037  F7 D8       neg ax
-0039  B9 0A 00    mov cx,0ah
-003C  BB 8A 0F    mov bx,0f8ah
-003F  89 DE       mov si,bx
-0041  31 D2       xor dx,dx
-0043  F7 F1       div ax,cx
-0045  80 C2 30    add dl,30h
-0048  4E          dec si
-0049  88 14       mov byte ptr [si],dl
-004B  83 F8 00    cmp ax,0h
-004E  75 F1       jne 41h
-0050  39 DE       cmp si,bx
-0052  74 09       je 5dh
-0054  8A 04       mov al,byte ptr [si]
-0056  B4 02       mov ah,2h
-0058  CD 21       int 21h
-005A  46          inc si
-005B  EB F3       jmp 50h
-005D  89 EC       mov sp,bp
-005F  5D          pop bp
-0060  C3          ret
-0061  55          push bp
-0062  8B EC       mov bp,sp
-0064  BB 00 00    mov bx,0h
-0067  8B 46 06    mov ax,word ptr [bp+6h]
-006A  83 F8 00    cmp ax,0h
-006D  7D 03       jnl 72h
-006F  43          inc bx
-0070  F7 D8       neg ax
-0072  B9 0A 00    mov cx,0ah
-0075  43          inc bx
-0076  31 D2       xor dx,dx
-0078  F7 F1       div ax,cx
-007A  83 F8 00    cmp ax,0h
-007D  75 F6       jne 75h
-007F  8B 46 04    mov ax,word ptr [bp+4h]
-0082  2B C3       sub ax,bx
-0084  83 F8 00    cmp ax,0h
-0087  7E 0A       jle 93h
-0089  89 C1       mov cx,ax
-008B  B0 20       mov al,20h
-008D  B4 02       mov ah,2h
-008F  CD 21       int 21h
-0091  E2 F8       loop 8bh
-0093  8B 46 06    mov ax,word ptr [bp+6h]
-0096  83 F8 00    cmp ax,0h
-0099  7D 0A       jnl 0a5h
-009B  50          push ax
-009C  B0 2D       mov al,2dh
-009E  B4 02       mov ah,2h
-00A0  CD 21       int 21h
-00A2  58          pop ax
-00A3  F7 D8       neg ax
-00A5  B9 0A 00    mov cx,0ah
-00A8  BB 8A 0F    mov bx,0f8ah
-00AB  89 DE       mov si,bx
-00AD  31 D2       xor dx,dx
-00AF  F7 F1       div ax,cx
-00B1  80 C2 30    add dl,30h
-00B4  4E          dec si
-00B5  88 14       mov byte ptr [si],dl
-00B7  83 F8 00    cmp ax,0h
-00BA  75 F1       jne 0adh
-00BC  39 DE       cmp si,bx
-00BE  74 09       je 0c9h
-00C0  8A 04       mov al,byte ptr [si]
-00C2  B4 02       mov ah,2h
-00C4  CD 21       int 21h
-00C6  46          inc si
-00C7  EB F3       jmp 0bch
-00C9  89 EC       mov sp,bp
-00CB  5D          pop bp
-00CC  C3          ret
-00CD  55          push bp
-00CE  8B EC       mov bp,sp
-00D0  8A 46 04    mov al,byte ptr [bp+4h]
-00D3  89 EC       mov sp,bp
-00D5  5D          pop bp
-00D6  B4 02       mov ah,2h
-00D8  CD 21       int 21h
-00DA  C3          ret
-00DB  55          push bp
-00DC  8B EC       mov bp,sp
-00DE  83 7E 04 00 cmp word ptr [bp+4h],0h
-00E2  89 EC       mov sp,bp
-00E4  75 05       jne 0ebh
-00E6  BA 8F 0F    mov dx,0f8fh
-00E9  EB 03       jmp 0eeh
-00EB  BA 8A 0F    mov dx,0f8ah
-00EE  B4 09       mov ah,9h
-00F0  CD 21       int 21h
-00F2  5D          pop bp
-00F3  C3          ret
-00F4  BA 98 0F    mov dx,0f98h
-00F7  B4 09       mov ah,9h
-00F9  CD 21       int 21h
-00FB  C3          ret
-00FC  BA 95 0F    mov dx,0f95h
-00FF  B4 09       mov ah,9h
-0101  CD 21       int 21h
-0103  C3          ret
-0104  5B          pop bx
-0105  31 C9       xor cx,cx
-0107  8A 0F       mov cl,byte ptr [bx]
-0109  43          inc bx
-010A  B4 02       mov ah,2h
-010C  E3 07       jcxz 115h
-010E  8A 07       mov al,byte ptr [bx]
-0110  CD 21       int 21h
-0112  43          inc bx
-0113  E2 F9       loop 10eh
-0115  FF E3       jmp bx
-0117  55          push bp
-0118  8B EC       mov bp,sp
-011A  53          push bx
-011B  51          push cx
-011C  50          push ax
-011D  8B 5E 04    mov bx,word ptr [bp+4h]
-0120  31 C9       xor cx,cx
-0122  8A 0F       mov cl,byte ptr [bx]
-0124  43          inc bx
-0125  B4 02       mov ah,2h
-0127  E3 07       jcxz 130h
-0129  8A 07       mov al,byte ptr [bx]
-012B  CD 21       int 21h
-012D  43          inc bx
-012E  E2 F9       loop 129h
-0130  58          pop ax
-0131  59          pop cx
-0132  5B          pop bx
-0133  89 EC       mov sp,bp
-0135  5D          pop bp
-0136  C3          ret
-0137  55          push bp
-0138  8B EC       mov bp,sp
-013A  50          push ax
-013B  53          push bx
-013C  51          push cx
-013D  52          push dx
-013E  57          push di
-013F  E8 13 00    call 155h
-0142  83 F9 02    cmp cx,2h
-0145  74 05       je 14ch
-0147  8B 7E 04    mov di,word ptr [bp+4h]
-014A  89 05       mov word ptr [di],ax
-014C  5F          pop di
-014D  5A          pop dx
-014E  59          pop cx
-014F  5B          pop bx
-0150  58          pop ax
-0151  89 EC       mov sp,bp
-0153  5D          pop bp
-0154  C3          ret
-0155  E8 C3 00    call 21bh
-0158  3C 1A       cmp al,1ah
-015A  74 42       je 19eh
-015C  3C 20       cmp al,20h
-015E  76 F5       jbe 155h
-0160  31 C9       xor cx,cx
-0162  3C 2D       cmp al,2dh
-0164  75 06       jne 16ch
-0166  41          inc cx
-0167  E8 B1 00    call 21bh
-016A  EB 07       jmp 173h
-016C  3C 2B       cmp al,2bh
-016E  75 03       jne 173h
-0170  E8 A8 00    call 21bh
-0173  31 FF       xor di,di
-0175  3C 30       cmp al,30h
-0177  72 18       jb 191h
-0179  3C 39       cmp al,39h
-017B  77 14       jnbe 191h
-017D  2C 30       sub al,30h
-017F  B4 00       mov ah,0h
-0181  87 C7       xchg di,ax
-0183  BB 0A 00    mov bx,0ah
-0186  F7 E3       mul bx
-0188  03 C7       add ax,di
-018A  89 C7       mov di,ax
-018C  E8 8C 00    call 21bh
-018F  EB E4       jmp 175h
-0191  E8 9E 00    call 232h
-0194  83 F9 00    cmp cx,0h
-0197  74 02       je 19bh
-0199  F7 DF       neg di
-019B  8B C7       mov ax,di
-019D  C3          ret
-019E  B9 02 00    mov cx,2h
-01A1  C3          ret
-01A2  55          push bp
-01A3  8B EC       mov bp,sp
-01A5  50          push ax
-01A6  53          push bx
-01A7  51          push cx
-01A8  52          push dx
-01A9  57          push di
-01AA  E8 A8 FF    call 155h
-01AD  83 F9 02    cmp cx,2h
-01B0  74 05       je 1b7h
-01B2  8B 7E 04    mov di,word ptr [bp+4h]
-01B5  88 05       mov byte ptr [di],al
-01B7  5F          pop di
-01B8  5A          pop dx
-01B9  59          pop cx
-01BA  5B          pop bx
-01BB  58          pop ax
-01BC  89 EC       mov sp,bp
-01BE  5D          pop bp
-01BF  C3          ret
-01C0  55          push bp
-01C1  8B EC       mov bp,sp
-01C3  50          push ax
-01C4  53          push bx
-01C5  57          push di
-01C6  E8 52 00    call 21bh
-01C9  88 C2       mov dl,al
-01CB  8B 7E 04    mov di,word ptr [bp+4h]
-01CE  88 15       mov byte ptr [di],dl
-01D0  5F          pop di
-01D1  5B          pop bx
-01D2  58          pop ax
-01D3  89 EC       mov sp,bp
-01D5  5D          pop bp
-01D6  C3          ret
-01D7  55          push bp
-01D8  8B EC       mov bp,sp
-01DA  50          push ax
-01DB  53          push bx
-01DC  51          push cx
-01DD  57          push di
-01DE  E8 3A 00    call 21bh
-01E1  31 C9       xor cx,cx
-01E3  3C 54       cmp al,54h
-01E5  74 12       je 1f9h
-01E7  3C 74       cmp al,74h
-01E9  74 0E       je 1f9h
-01EB  3C 59       cmp al,59h
-01ED  74 0A       je 1f9h
-01EF  3C 79       cmp al,79h
-01F1  74 06       je 1f9h
-01F3  3C 31       cmp al,31h
-01F5  74 02       je 1f9h
-01F7  EB 01       jmp 1fah
-01F9  41          inc cx
-01FA  8B 7E 04    mov di,word ptr [bp+4h]
-01FD  89 0D       mov word ptr [di],cx
-01FF  5F          pop di
-0200  59          pop cx
-0201  5B          pop bx
-0202  58          pop ax
-0203  89 EC       mov sp,bp
-0205  5D          pop bp
-0206  C3          ret
-0207  50          push ax
-0208  E8 10 00    call 21bh
-020B  3C 0D       cmp al,0dh
-020D  74 0A       je 219h
-020F  3C 0A       cmp al,0ah
-0211  74 06       je 219h
-0213  3C 1A       cmp al,1ah
-0215  74 02       je 219h
-0217  EB EF       jmp 208h
-0219  58          pop ax
-021A  C3          ret
-021B  8B 1E 9E 0F mov bx,word ptr [0f9eh]
-021F  83 FB 00    cmp bx,0h
-0222  74 09       je 22dh
-0224  8A C3       mov al,bl
-0226  31 DB       xor bx,bx
-0228  89 1E 9E 0F mov word ptr [0f9eh],bx
-022C  C3          ret
-022D  B4 08       mov ah,8h
-022F  CD 21       int 21h
+0019  89 C8       mov ax,cx
+001B  A3 6C 10    mov word ptr [106ch],ax
+001E  1E          push ds
+001F  07          pop es
+0020  C3          ret
+0021  31 C0       xor ax,ax
+0023  B4 4C       mov ah,4ch
+0025  CD 21       int 21h
+0027  C3          ret
+0028  C3          ret
+0029  55          push bp
+002A  8B EC       mov bp,sp
+002C  8B 46 04    mov ax,word ptr [bp+4h]
+002F  83 F8 00    cmp ax,0h
+0032  7D 0A       jnl 3eh
+0034  50          push ax
+0035  B0 2D       mov al,2dh
+0037  B4 02       mov ah,2h
+0039  CD 21       int 21h
+003B  58          pop ax
+003C  F7 D8       neg ax
+003E  B9 0A 00    mov cx,0ah
+0041  BB AF 0F    mov bx,0fafh
+0044  89 DE       mov si,bx
+0046  31 D2       xor dx,dx
+0048  F7 F1       div ax,cx
+004A  80 C2 30    add dl,30h
+004D  4E          dec si
+004E  88 14       mov byte ptr [si],dl
+0050  83 F8 00    cmp ax,0h
+0053  75 F1       jne 46h
+0055  39 DE       cmp si,bx
+0057  74 09       je 62h
+0059  8A 04       mov al,byte ptr [si]
+005B  B4 02       mov ah,2h
+005D  CD 21       int 21h
+005F  46          inc si
+0060  EB F3       jmp 55h
+0062  89 EC       mov sp,bp
+0064  5D          pop bp
+0065  C3          ret
+0066  55          push bp
+0067  8B EC       mov bp,sp
+0069  BB 00 00    mov bx,0h
+006C  8B 46 06    mov ax,word ptr [bp+6h]
+006F  83 F8 00    cmp ax,0h
+0072  7D 03       jnl 77h
+0074  43          inc bx
+0075  F7 D8       neg ax
+0077  B9 0A 00    mov cx,0ah
+007A  43          inc bx
+007B  31 D2       xor dx,dx
+007D  F7 F1       div ax,cx
+007F  83 F8 00    cmp ax,0h
+0082  75 F6       jne 7ah
+0084  8B 46 04    mov ax,word ptr [bp+4h]
+0087  2B C3       sub ax,bx
+0089  83 F8 00    cmp ax,0h
+008C  7E 0A       jle 98h
+008E  89 C1       mov cx,ax
+0090  B0 20       mov al,20h
+0092  B4 02       mov ah,2h
+0094  CD 21       int 21h
+0096  E2 F8       loop 90h
+0098  8B 46 06    mov ax,word ptr [bp+6h]
+009B  83 F8 00    cmp ax,0h
+009E  7D 0A       jnl 0aah
+00A0  50          push ax
+00A1  B0 2D       mov al,2dh
+00A3  B4 02       mov ah,2h
+00A5  CD 21       int 21h
+00A7  58          pop ax
+00A8  F7 D8       neg ax
+00AA  B9 0A 00    mov cx,0ah
+00AD  BB AF 0F    mov bx,0fafh
+00B0  89 DE       mov si,bx
+00B2  31 D2       xor dx,dx
+00B4  F7 F1       div ax,cx
+00B6  80 C2 30    add dl,30h
+00B9  4E          dec si
+00BA  88 14       mov byte ptr [si],dl
+00BC  83 F8 00    cmp ax,0h
+00BF  75 F1       jne 0b2h
+00C1  39 DE       cmp si,bx
+00C3  74 09       je 0ceh
+00C5  8A 04       mov al,byte ptr [si]
+00C7  B4 02       mov ah,2h
+00C9  CD 21       int 21h
+00CB  46          inc si
+00CC  EB F3       jmp 0c1h
+00CE  89 EC       mov sp,bp
+00D0  5D          pop bp
+00D1  C3          ret
+00D2  55          push bp
+00D3  8B EC       mov bp,sp
+00D5  8A 46 04    mov al,byte ptr [bp+4h]
+00D8  89 EC       mov sp,bp
+00DA  5D          pop bp
+00DB  B4 02       mov ah,2h
+00DD  CD 21       int 21h
+00DF  C3          ret
+00E0  55          push bp
+00E1  8B EC       mov bp,sp
+00E3  83 7E 04 00 cmp word ptr [bp+4h],0h
+00E7  89 EC       mov sp,bp
+00E9  75 05       jne 0f0h
+00EB  BA B4 0F    mov dx,0fb4h
+00EE  EB 03       jmp 0f3h
+00F0  BA AF 0F    mov dx,0fafh
+00F3  B4 09       mov ah,9h
+00F5  CD 21       int 21h
+00F7  5D          pop bp
+00F8  C3          ret
+00F9  BA BD 0F    mov dx,0fbdh
+00FC  B4 09       mov ah,9h
+00FE  CD 21       int 21h
+0100  C3          ret
+0101  BA BA 0F    mov dx,0fbah
+0104  B4 09       mov ah,9h
+0106  CD 21       int 21h
+0108  C3          ret
+0109  5B          pop bx
+010A  31 C9       xor cx,cx
+010C  8A 0F       mov cl,byte ptr [bx]
+010E  43          inc bx
+010F  B4 02       mov ah,2h
+0111  E3 07       jcxz 11ah
+0113  8A 07       mov al,byte ptr [bx]
+0115  CD 21       int 21h
+0117  43          inc bx
+0118  E2 F9       loop 113h
+011A  FF E3       jmp bx
+011C  55          push bp
+011D  8B EC       mov bp,sp
+011F  53          push bx
+0120  51          push cx
+0121  50          push ax
+0122  8B 5E 04    mov bx,word ptr [bp+4h]
+0125  31 C9       xor cx,cx
+0127  8A 0F       mov cl,byte ptr [bx]
+0129  43          inc bx
+012A  B4 02       mov ah,2h
+012C  E3 07       jcxz 135h
+012E  8A 07       mov al,byte ptr [bx]
+0130  CD 21       int 21h
+0132  43          inc bx
+0133  E2 F9       loop 12eh
+0135  58          pop ax
+0136  59          pop cx
+0137  5B          pop bx
+0138  89 EC       mov sp,bp
+013A  5D          pop bp
+013B  C3          ret
+013C  55          push bp
+013D  8B EC       mov bp,sp
+013F  50          push ax
+0140  53          push bx
+0141  51          push cx
+0142  52          push dx
+0143  57          push di
+0144  E8 13 00    call 15ah
+0147  83 F9 02    cmp cx,2h
+014A  74 05       je 151h
+014C  8B 7E 04    mov di,word ptr [bp+4h]
+014F  89 05       mov word ptr [di],ax
+0151  5F          pop di
+0152  5A          pop dx
+0153  59          pop cx
+0154  5B          pop bx
+0155  58          pop ax
+0156  89 EC       mov sp,bp
+0158  5D          pop bp
+0159  C3          ret
+015A  E8 C3 00    call 220h
+015D  3C 1A       cmp al,1ah
+015F  74 42       je 1a3h
+0161  3C 20       cmp al,20h
+0163  76 F5       jbe 15ah
+0165  31 C9       xor cx,cx
+0167  3C 2D       cmp al,2dh
+0169  75 06       jne 171h
+016B  41          inc cx
+016C  E8 B1 00    call 220h
+016F  EB 07       jmp 178h
+0171  3C 2B       cmp al,2bh
+0173  75 03       jne 178h
+0175  E8 A8 00    call 220h
+0178  31 FF       xor di,di
+017A  3C 30       cmp al,30h
+017C  72 18       jb 196h
+017E  3C 39       cmp al,39h
+0180  77 14       jnbe 196h
+0182  2C 30       sub al,30h
+0184  B4 00       mov ah,0h
+0186  87 C7       xchg di,ax
+0188  BB 0A 00    mov bx,0ah
+018B  F7 E3       mul bx
+018D  03 C7       add ax,di
+018F  89 C7       mov di,ax
+0191  E8 8C 00    call 220h
+0194  EB E4       jmp 17ah
+0196  E8 9E 00    call 237h
+0199  83 F9 00    cmp cx,0h
+019C  74 02       je 1a0h
+019E  F7 DF       neg di
+01A0  8B C7       mov ax,di
+01A2  C3          ret
+01A3  B9 02 00    mov cx,2h
+01A6  C3          ret
+01A7  55          push bp
+01A8  8B EC       mov bp,sp
+01AA  50          push ax
+01AB  53          push bx
+01AC  51          push cx
+01AD  52          push dx
+01AE  57          push di
+01AF  E8 A8 FF    call 15ah
+01B2  83 F9 02    cmp cx,2h
+01B5  74 05       je 1bch
+01B7  8B 7E 04    mov di,word ptr [bp+4h]
+01BA  88 05       mov byte ptr [di],al
+01BC  5F          pop di
+01BD  5A          pop dx
+01BE  59          pop cx
+01BF  5B          pop bx
+01C0  58          pop ax
+01C1  89 EC       mov sp,bp
+01C3  5D          pop bp
+01C4  C3          ret
+01C5  55          push bp
+01C6  8B EC       mov bp,sp
+01C8  50          push ax
+01C9  53          push bx
+01CA  57          push di
+01CB  E8 52 00    call 220h
+01CE  88 C2       mov dl,al
+01D0  8B 7E 04    mov di,word ptr [bp+4h]
+01D3  88 15       mov byte ptr [di],dl
+01D5  5F          pop di
+01D6  5B          pop bx
+01D7  58          pop ax
+01D8  89 EC       mov sp,bp
+01DA  5D          pop bp
+01DB  C3          ret
+01DC  55          push bp
+01DD  8B EC       mov bp,sp
+01DF  50          push ax
+01E0  53          push bx
+01E1  51          push cx
+01E2  57          push di
+01E3  E8 3A 00    call 220h
+01E6  31 C9       xor cx,cx
+01E8  3C 54       cmp al,54h
+01EA  74 12       je 1feh
+01EC  3C 74       cmp al,74h
+01EE  74 0E       je 1feh
+01F0  3C 59       cmp al,59h
+01F2  74 0A       je 1feh
+01F4  3C 79       cmp al,79h
+01F6  74 06       je 1feh
+01F8  3C 31       cmp al,31h
+01FA  74 02       je 1feh
+01FC  EB 01       jmp 1ffh
+01FE  41          inc cx
+01FF  8B 7E 04    mov di,word ptr [bp+4h]
+0202  89 0D       mov word ptr [di],cx
+0204  5F          pop di
+0205  59          pop cx
+0206  5B          pop bx
+0207  58          pop ax
+0208  89 EC       mov sp,bp
+020A  5D          pop bp
+020B  C3          ret
+020C  50          push ax
+020D  E8 10 00    call 220h
+0210  3C 0D       cmp al,0dh
+0212  74 0A       je 21eh
+0214  3C 0A       cmp al,0ah
+0216  74 06       je 21eh
+0218  3C 1A       cmp al,1ah
+021A  74 02       je 21eh
+021C  EB EF       jmp 20dh
+021E  58          pop ax
+021F  C3          ret
+0220  8B 1E C3 0F mov bx,word ptr [0fc3h]
+0224  83 FB 00    cmp bx,0h
+0227  74 09       je 232h
+0229  8A C3       mov al,bl
+022B  31 DB       xor bx,bx
+022D  89 1E C3 0F mov word ptr [0fc3h],bx
 0231  C3          ret
-0232  88 C2       mov dl,al
-0234  BB 01 00    mov bx,1h
-0237  8A DA       mov bl,dl
-0239  89 1E 9E 0F mov word ptr [0f9eh],bx
-023D  C3          ret
-023E  55          push bp
-023F  8B EC       mov bp,sp
-0241  50          push ax
-0242  53          push bx
-0243  51          push cx
-0244  52          push dx
-0245  57          push di
-0246  8B 7E 04    mov di,word ptr [bp+4h]
-0249  8B 46 04    mov ax,word ptr [bp+4h]
-024C  8B F0       mov si,ax
-024E  46          inc si
-024F  31 DB       xor bx,bx
-0251  53          push bx
-0252  E8 C6 FF    call 21bh
-0255  5B          pop bx
-0256  3C 0D       cmp al,0dh
-0258  74 1D       je 277h
-025A  3C 0A       cmp al,0ah
-025C  74 19       je 277h
-025E  3C 1A       cmp al,1ah
-0260  74 15       je 277h
-0262  88 C2       mov dl,al
-0264  43          inc bx
-0265  88 14       mov byte ptr [si],dl
-0267  46          inc si
-0268  E2 E7       loop 251h
-026A  8A C3       mov al,bl
-026C  88 05       mov byte ptr [di],al
-026E  5F          pop di
-026F  5A          pop dx
-0270  59          pop cx
-0271  5B          pop bx
-0272  58          pop ax
-0273  89 EC       mov sp,bp
-0275  5D          pop bp
-0276  C3          ret
-0277  53          push bx
-0278  E8 B7 FF    call 232h
-027B  5B          pop bx
-027C  EB EC       jmp 26ah
-027E  55          push bp
-027F  8B EC       mov bp,sp
-0281  50          push ax
-0282  53          push bx
-0283  51          push cx
-0284  52          push dx
-0285  8B 46 04    mov ax,word ptr [bp+4h]
-0288  8B F0       mov si,ax
-028A  8B 5E 06    mov bx,word ptr [bp+6h]
-028D  31 D2       xor dx,dx
-028F  8A 07       mov al,byte ptr [bx]
-0291  88 C2       mov dl,al
-0293  43          inc bx
-0294  39 D1       cmp cx,dx
-0296  72 04       jb 29ch
-0298  8B CA       mov cx,dx
-029A  EB 02       jmp 29eh
-029C  8A D1       mov dl,cl
-029E  88 14       mov byte ptr [si],dl
-02A0  46          inc si
-02A1  E3 0A       jcxz 2adh
-02A3  8A 07       mov al,byte ptr [bx]
-02A5  88 C2       mov dl,al
-02A7  88 14       mov byte ptr [si],dl
-02A9  43          inc bx
-02AA  46          inc si
-02AB  E2 F6       loop 2a3h
-02AD  5A          pop dx
-02AE  59          pop cx
-02AF  5B          pop bx
-02B0  58          pop ax
-02B1  89 EC       mov sp,bp
-02B3  5D          pop bp
-02B4  C3          ret
-02B5  55          push bp
-02B6  8B EC       mov bp,sp
-02B8  53          push bx
-02B9  51          push cx
-02BA  52          push dx
-02BB  31 C9       xor cx,cx
-02BD  31 D2       xor dx,dx
-02BF  8B 5E 06    mov bx,word ptr [bp+6h]
-02C2  8A 0F       mov cl,byte ptr [bx]
-02C4  8B 46 04    mov ax,word ptr [bp+4h]
-02C7  8B F0       mov si,ax
-02C9  8A 14       mov dl,byte ptr [si]
-02CB  39 D1       cmp cx,dx
-02CD  76 02       jbe 2d1h
-02CF  8B CA       mov cx,dx
-02D1  E3 0E       jcxz 2e1h
-02D3  43          inc bx
-02D4  46          inc si
-02D5  8A 07       mov al,byte ptr [bx]
-02D7  8A 14       mov dl,byte ptr [si]
-02D9  3A C2       cmp al,dl
-02DB  75 14       jne 2f1h
-02DD  43          inc bx
-02DE  46          inc si
-02DF  E2 F4       loop 2d5h
-02E1  8B 5E 06    mov bx,word ptr [bp+6h]
-02E4  8A 0F       mov cl,byte ptr [bx]
-02E6  8B 46 04    mov ax,word ptr [bp+4h]
-02E9  8B F0       mov si,ax
-02EB  31 D2       xor dx,dx
-02ED  8A 14       mov dl,byte ptr [si]
-02EF  39 D1       cmp cx,dx
-02F1  B0 00       mov al,0h
-02F3  B4 00       mov ah,0h
-02F5  72 06       jb 2fdh
-02F7  74 08       je 301h
-02F9  B0 01       mov al,1h
-02FB  EB 04       jmp 301h
-02FD  B0 FF       mov al,0ffh
-02FF  B4 FF       mov ah,0ffh
-0301  5A          pop dx
-0302  59          pop cx
-0303  5B          pop bx
-0304  89 EC       mov sp,bp
-0306  5D          pop bp
-0307  C3          ret
-0308  55          push bp
-0309  8B EC       mov bp,sp
-030B  50          push ax
-030C  53          push bx
-030D  51          push cx
-030E  52          push dx
-030F  56          push si
-0310  57          push di
-0311  8B 46 04    mov ax,word ptr [bp+4h]
-0314  8B F0       mov si,ax
-0316  8B 5E 06    mov bx,word ptr [bp+6h]
-0319  31 D2       xor dx,dx
-031B  8A 14       mov dl,byte ptr [si]
-031D  31 C0       xor ax,ax
-031F  8A 07       mov al,byte ptr [bx]
-0321  01 C2       add dx,ax
-0323  39 D1       cmp cx,dx
-0325  73 06       jnb 32dh
-0327  B0 10       mov al,10h
-0329  B4 4C       mov ah,4ch
-032B  CD 21       int 21h
-032D  8B CA       mov cx,dx
-032F  88 0C       mov byte ptr [si],cl
-0331  29 C2       sub dx,ax
-0333  8B FE       mov di,si
-0335  47          inc di
-0336  01 D7       add di,dx
-0338  43          inc bx
-0339  89 C1       mov cx,ax
-033B  E3 08       jcxz 345h
-033D  8A 07       mov al,byte ptr [bx]
-033F  88 05       mov byte ptr [di],al
-0341  43          inc bx
-0342  47          inc di
-0343  E2 F8       loop 33dh
-0345  5F          pop di
-0346  5E          pop si
-0347  5A          pop dx
-0348  59          pop cx
-0349  5B          pop bx
-034A  58          pop ax
-034B  89 EC       mov sp,bp
-034D  5D          pop bp
-034E  C3          ret
-034F  55          push bp
-0350  8B EC       mov bp,sp
-0352  53          push bx
-0353  52          push dx
-0354  56          push si
-0355  57          push di
-0356  8B 76 06    mov si,word ptr [bp+6h]
-0359  8B 04       mov ax,word ptr [si]
-035B  E8 13 00    call 371h
-035E  8B 7E 04    mov di,word ptr [bp+4h]
-0361  89 05       mov word ptr [di],ax
-0363  89 5D 02    mov word ptr [di+2h],bx
-0366  89 55 04    mov word ptr [di+4h],dx
-0369  5F          pop di
-036A  5E          pop si
-036B  5A          pop dx
-036C  5B          pop bx
-036D  89 EC       mov sp,bp
-036F  5D          pop bp
-0370  C3          ret
-0371  83 F8 00    cmp ax,0h
-0374  75 06       jne 37ch
-0376  31 DB       xor bx,bx
-0378  31 D2       xor dx,dx
-037A  EB 2C       jmp 3a8h
-037C  88 E7       mov bh,ah
-037E  89 C2       mov dx,ax
-0380  83 FA 00    cmp dx,0h
-0383  79 02       jns 387h
-0385  F7 DA       neg dx
-0387  B8 90 00    mov ax,90h
-038A  80 FE 00    cmp dh,0h
-038D  75 04       jne 393h
-038F  B0 88       mov al,88h
-0391  86 D6       xchg dh,dl
-0393  83 FA 00    cmp dx,0h
-0396  78 06       js 39eh
-0398  FE C8       dec al
-039A  D1 E2       shl dx,1h
-039C  79 FA       jns 398h
-039E  80 FF 00    cmp bh,0h
-03A1  78 03       js 3a6h
-03A3  80 E6 7F    and dh,7fh
-03A6  31 DB       xor bx,bx
-03A8  C3          ret
-03A9  55          push bp
-03AA  8B EC       mov bp,sp
-03AC  53          push bx
-03AD  52          push dx
-03AE  56          push si
-03AF  57          push di
-03B0  FF 76 04    push word ptr [bp+4h]
-03B3  8B 76 04    mov si,word ptr [bp+4h]
-03B6  8B 04       mov ax,word ptr [si]
-03B8  8B 4C 02    mov cx,word ptr [si+2h]
-03BB  8B 54 04    mov dx,word ptr [si+4h]
-03BE  89 CB       mov bx,cx
-03C0  8B FE       mov di,si
-03C2  8B 4D 06    mov cx,word ptr [di+6h]
-03C5  8B 75 08    mov si,word ptr [di+8h]
-03C8  8B 7D 0A    mov di,word ptr [di+0ah]
-03CB  C7 06 A0 0F 00 00 mov word ptr [0fa0h],0h
-03D1  E8 4D 00    call 421h
-03D4  5F          pop di
-03D5  89 05       mov word ptr [di],ax
-03D7  89 5D 02    mov word ptr [di+2h],bx
-03DA  89 55 04    mov word ptr [di+4h],dx
-03DD  5F          pop di
-03DE  5E          pop si
-03DF  5A          pop dx
-03E0  5B          pop bx
-03E1  89 EC       mov sp,bp
-03E3  5D          pop bp
-03E4  C3          ret
-03E5  55          push bp
-03E6  8B EC       mov bp,sp
-03E8  53          push bx
-03E9  52          push dx
-03EA  56          push si
-03EB  57          push di
-03EC  FF 76 04    push word ptr [bp+4h]
-03EF  8B 76 04    mov si,word ptr [bp+4h]
-03F2  8B 04       mov ax,word ptr [si]
-03F4  8B 4C 02    mov cx,word ptr [si+2h]
-03F7  8B 54 04    mov dx,word ptr [si+4h]
-03FA  89 CB       mov bx,cx
-03FC  8B FE       mov di,si
-03FE  8B 4D 06    mov cx,word ptr [di+6h]
-0401  8B 75 08    mov si,word ptr [di+8h]
-0404  8B 7D 0A    mov di,word ptr [di+0ah]
-0407  C7 06 A0 0F 00 80 mov word ptr [0fa0h],8000h
-040D  E8 11 00    call 421h
-0410  5F          pop di
-0411  89 05       mov word ptr [di],ax
-0413  89 5D 02    mov word ptr [di+2h],bx
-0416  89 55 04    mov word ptr [di+4h],dx
-0419  5F          pop di
-041A  5E          pop si
-041B  5A          pop dx
-041C  5B          pop bx
-041D  89 EC       mov sp,bp
-041F  5D          pop bp
-0420  C3          ret
-0421  80 F9 00    cmp cl,0h
-0424  74 0E       je 434h
-0426  33 3E A0 0F xor di,word ptr [0fa0h]
-042A  3C 00       cmp al,0h
-042C  75 07       jne 435h
-042E  89 C8       mov ax,cx
-0430  89 F3       mov bx,si
-0432  89 FA       mov dx,di
-0434  C3          ret
-0435  38 C8       cmp al,cl
-0437  76 05       jbe 43eh
-0439  91          xchg ax,cx
-043A  87 F3       xchg bx,si
-043C  87 FA       xchg dx,di
-043E  88 0E A4 0F mov byte ptr [0fa4h],cl
-0442  28 C1       sub cl,al
-0444  80 F9 28    cmp cl,28h
-0447  72 06       jb 44fh
-0449  8A 0E A4 0F mov cl,byte ptr [0fa4h]
-044D  EB DF       jmp 42eh
-044F  89 3E A0 0F mov word ptr [0fa0h],di
-0453  80 26 A1 0F 80 and byte ptr [0fa1h],80h
-0458  89 3E A2 0F mov word ptr [0fa2h],di
-045C  30 36 A3 0F xor byte ptr [0fa3h],dh
-0460  81 CF 00 80 or di,8000h
-0464  80 CE 80    or dh,80h
-0467  80 F9 10    cmp cl,10h
-046A  72 0B       jb 477h
-046C  88 FC       mov ah,bh
-046E  89 D3       mov bx,dx
-0470  31 D2       xor dx,dx
-0472  80 E9 10    sub cl,10h
-0475  EB F0       jmp 467h
-0477  80 F9 08    cmp cl,8h
-047A  72 0D       jb 489h
-047C  88 DC       mov ah,bl
-047E  88 FB       mov bl,bh
-0480  88 D7       mov bh,dl
-0482  88 F2       mov dl,dh
-0484  30 F6       xor dh,dh
-0486  80 E9 08    sub cl,8h
-0489  80 F9 00    cmp cl,0h
-048C  74 0A       je 498h
-048E  D1 EA       shr dx,1h
-0490  D1 DB       rcr bx,1h
-0492  D0 DC       rcr ah,1h
-0494  FE C9       dec cl
-0496  75 F6       jne 48eh
-0498  A0 A4 0F    mov al,byte ptr [0fa4h]
-049B  F6 06 A3 0F 80 test byte ptr [0fa3h],80h
-04A0  75 14       jne 4b6h
-04A2  00 EC       add ah,ch
-04A4  11 F3       adc bx,si
-04A6  11 FA       adc dx,di
-04A8  73 5F       jnb 509h
-04AA  D1 DA       rcr dx,1h
-04AC  D1 DB       rcr bx,1h
-04AE  D0 DC       rcr ah,1h
-04B0  FE C0       inc al
-04B2  75 55       jne 509h
-04B4  F9          stc
-04B5  C3          ret
-04B6  86 EC       xchg ah,ch
-04B8  87 F3       xchg bx,si
-04BA  87 FA       xchg dx,di
-04BC  28 EC       sub ah,ch
-04BE  19 F3       sbb bx,si
-04C0  19 FA       sbb dx,di
-04C2  73 14       jnb 4d8h
-04C4  80 36 A1 0F 80 xor byte ptr [0fa1h],80h
-04C9  F6 D4       not ah
-04CB  F7 D3       not bx
-04CD  F7 D2       not dx
-04CF  80 C4 01    add ah,1h
-04D2  83 D3 00    adc bx,0h
-04D5  83 D2 00    adc dx,0h
-04D8  B1 05       mov cl,5h
-04DA  80 FE 00    cmp dh,0h
-04DD  75 14       jne 4f3h
-04DF  88 D6       mov dh,dl
-04E1  88 FA       mov dl,bh
-04E3  88 DF       mov bh,bl
-04E5  88 E3       mov bl,ah
-04E7  30 E4       xor ah,ah
-04E9  2C 08       sub al,8h
-04EB  72 15       jb 502h
-04ED  FE C9       dec cl
-04EF  75 E9       jne 4dah
-04F1  EB 0F       jmp 502h
-04F3  F6 C6 80    test dh,80h
-04F6  75 11       jne 509h
-04F8  D0 E4       shl ah,1h
-04FA  D1 D3       rcl bx,1h
-04FC  D1 D2       rcl dx,1h
-04FE  FE C8       dec al
-0500  75 F1       jne 4f3h
-0502  31 C0       xor ax,ax
-0504  31 DB       xor bx,bx
-0506  31 D2       xor dx,dx
-0508  C3          ret
-0509  80 E6 7F    and dh,7fh
-050C  32 36 A1 0F xor dh,byte ptr [0fa1h]
-0510  C3          ret
-0511  55          push bp
-0512  8B EC       mov bp,sp
-0514  53          push bx
-0515  52          push dx
-0516  56          push si
-0517  57          push di
-0518  FF 76 04    push word ptr [bp+4h]
-051B  8B 76 04    mov si,word ptr [bp+4h]
-051E  8B 04       mov ax,word ptr [si]
-0520  8B 4C 02    mov cx,word ptr [si+2h]
-0523  8B 54 04    mov dx,word ptr [si+4h]
-0526  89 CB       mov bx,cx
-0528  8B FE       mov di,si
-052A  8B 4D 06    mov cx,word ptr [di+6h]
-052D  8B 75 08    mov si,word ptr [di+8h]
-0530  8B 7D 0A    mov di,word ptr [di+0ah]
-0533  E8 11 00    call 547h
-0536  5F          pop di
-0537  89 05       mov word ptr [di],ax
-0539  89 5D 02    mov word ptr [di+2h],bx
-053C  89 55 04    mov word ptr [di+4h],dx
-053F  5F          pop di
-0540  5E          pop si
-0541  5A          pop dx
-0542  5B          pop bx
-0543  89 EC       mov sp,bp
-0545  5D          pop bp
-0546  C3          ret
-0547  80 F9 00    cmp cl,0h
-054A  75 03       jne 54fh
-054C  E9 A4 00    jmp 5f3h
-054F  3C 00       cmp al,0h
-0551  75 03       jne 556h
-0553  E9 A3 00    jmp 5f9h
-0556  00 C8       add al,cl
-0558  72 07       jb 561h
-055A  04 80       add al,80h
-055C  72 0D       jb 56bh
-055E  E9 92 00    jmp 5f3h
-0561  04 80       add al,80h
-0563  73 06       jnb 56bh
-0565  B0 01       mov al,1h
-0567  B4 4C       mov ah,4ch
-0569  CD 21       int 21h
-056B  89 0E AB 0F mov word ptr [0fabh],cx
-056F  8B CA       mov cx,dx
-0571  31 F9       xor cx,di
-0573  F6 D5       not ch
-0575  80 E5 80    and ch,80h
-0578  88 2E A1 0F mov byte ptr [0fa1h],ch
-057C  80 CE 80    or dh,80h
-057F  81 CF 00 80 or di,8000h
-0583  89 36 AD 0F mov word ptr [0fadh],si
-0587  89 3E AF 0F mov word ptr [0fafh],di
-058B  A3 A5 0F    mov word ptr [0fa5h],ax
-058E  89 1E A7 0F mov word ptr [0fa7h],bx
-0592  89 16 A9 0F mov word ptr [0fa9h],dx
-0596  30 E4       xor ah,ah
-0598  31 DB       xor bx,bx
-059A  31 D2       xor dx,dx
-059C  BF AB 0F    mov di,0fabh
-059F  B1 05       mov cl,5h
-05A1  47          inc di
-05A2  8A 2D       mov ch,byte ptr [di]
-05A4  80 FD 00    cmp ch,0h
-05A7  75 0C       jne 5b5h
-05A9  88 DC       mov ah,bl
-05AB  88 FB       mov bl,bh
-05AD  88 D7       mov bh,dl
-05AF  88 F2       mov dl,dh
-05B1  30 F6       xor dh,dh
-05B3  EB 1C       jmp 5d1h
-05B5  BE 08 00    mov si,8h
-05B8  D0 DD       rcr ch,1h
-05BA  73 0C       jnb 5c8h
-05BC  02 26 A6 0F add ah,byte ptr [0fa6h]
-05C0  13 1E A7 0F adc bx,word ptr [0fa7h]
-05C4  13 16 A9 0F adc dx,word ptr [0fa9h]
-05C8  D1 DA       rcr dx,1h
-05CA  D1 DB       rcr bx,1h
-05CC  D0 DC       rcr ah,1h
-05CE  4E          dec si
-05CF  75 E7       jne 5b8h
-05D1  FE C9       dec cl
-05D3  75 CC       jne 5a1h
-05D5  91          xchg ax,cx
-05D6  9F          lahf
-05D7  F6 C6 80    test dh,80h
-05DA  75 0E       jne 5eah
-05DC  9E          sahf
-05DD  D0 D5       rcl ch,1h
-05DF  D1 D3       rcl bx,1h
-05E1  D1 D2       rcl dx,1h
-05E3  80 F9 00    cmp cl,0h
-05E6  74 02       je 5eah
-05E8  FE C9       dec cl
-05EA  91          xchg ax,cx
-05EB  32 36 A1 0F xor dh,byte ptr [0fa1h]
-05EF  3C 00       cmp al,0h
-05F1  75 06       jne 5f9h
-05F3  31 C0       xor ax,ax
-05F5  31 DB       xor bx,bx
-05F7  31 D2       xor dx,dx
-05F9  C3          ret
-05FA  55          push bp
-05FB  8B EC       mov bp,sp
-05FD  53          push bx
-05FE  52          push dx
-05FF  56          push si
-0600  57          push di
-0601  FF 76 04    push word ptr [bp+4h]
-0604  8B 76 04    mov si,word ptr [bp+4h]
-0607  8B 04       mov ax,word ptr [si]
-0609  8B 4C 02    mov cx,word ptr [si+2h]
-060C  8B 54 04    mov dx,word ptr [si+4h]
-060F  89 CB       mov bx,cx
-0611  8B FE       mov di,si
-0613  8B 4D 06    mov cx,word ptr [di+6h]
-0616  8B 75 08    mov si,word ptr [di+8h]
-0619  8B 7D 0A    mov di,word ptr [di+0ah]
-061C  E8 11 00    call 630h
-061F  5F          pop di
-0620  89 05       mov word ptr [di],ax
-0622  89 5D 02    mov word ptr [di+2h],bx
-0625  89 55 04    mov word ptr [di+4h],dx
-0628  5F          pop di
-0629  5E          pop si
-062A  5A          pop dx
-062B  5B          pop bx
-062C  89 EC       mov sp,bp
-062E  5D          pop bp
-062F  C3          ret
-0630  3C 00       cmp al,0h
-0632  75 03       jne 637h
-0634  E9 C2 FF    jmp 5f9h
-0637  28 C8       sub al,cl
-0639  F5          cmc
-063A  72 07       jb 643h
-063C  04 80       add al,80h
-063E  72 0D       jb 64dh
-0640  E9 B0 FF    jmp 5f3h
-0643  04 80       add al,80h
-0645  73 06       jnb 64dh
-0647  B0 01       mov al,1h
-0649  B4 4C       mov ah,4ch
-064B  CD 21       int 21h
-064D  89 0E AB 0F mov word ptr [0fabh],cx
-0651  8B CA       mov cx,dx
-0653  31 F9       xor cx,di
-0655  F6 D5       not ch
-0657  80 E5 80    and ch,80h
-065A  88 2E A1 0F mov byte ptr [0fa1h],ch
-065E  80 CE 80    or dh,80h
-0661  81 CF 00 80 or di,8000h
-0665  89 36 AD 0F mov word ptr [0fadh],si
-0669  89 3E AF 0F mov word ptr [0fafh],di
-066D  A2 A5 0F    mov byte ptr [0fa5h],al
-0670  BF AA 0F    mov di,0faah
-0673  B1 05       mov cl,5h
-0675  BE 08 00    mov si,8h
-0678  3B 16 AF 0F cmp dx,word ptr [0fafh]
-067C  75 0A       jne 688h
-067E  3B 1E AD 0F cmp bx,word ptr [0fadh]
-0682  75 04       jne 688h
-0684  3A 26 AC 0F cmp ah,byte ptr [0fach]
-0688  72 0C       jb 696h
-068A  2A 26 AC 0F sub ah,byte ptr [0fach]
-068E  1B 1E AD 0F sbb bx,word ptr [0fadh]
-0692  1B 16 AF 0F sbb dx,word ptr [0fafh]
-0696  F5          cmc
-0697  D0 D5       rcl ch,1h
-0699  4E          dec si
-069A  75 0A       jne 6a6h
-069C  88 2D       mov byte ptr [di],ch
-069E  FE C9       dec cl
-06A0  74 1B       je 6bdh
-06A2  4F          dec di
-06A3  BE 08 00    mov si,8h
-06A6  D0 E4       shl ah,1h
-06A8  D1 D3       rcl bx,1h
-06AA  D1 D2       rcl dx,1h
-06AC  73 CA       jnb 678h
-06AE  2A 26 AC 0F sub ah,byte ptr [0fach]
-06B2  1B 1E AD 0F sbb bx,word ptr [0fadh]
-06B6  1B 16 AF 0F sbb dx,word ptr [0fafh]
-06BA  F8          clc
-06BB  EB D9       jmp 696h
-06BD  D0 E4       shl ah,1h
-06BF  D1 D3       rcl bx,1h
-06C1  D1 D2       rcl dx,1h
-06C3  72 11       jb 6d6h
-06C5  3B 16 AF 0F cmp dx,word ptr [0fafh]
-06C9  75 0A       jne 6d5h
-06CB  3B 1E AD 0F cmp bx,word ptr [0fadh]
-06CF  75 04       jne 6d5h
-06D1  3A 26 AC 0F cmp ah,byte ptr [0fach]
-06D5  F5          cmc
-06D6  8B 0E A5 0F mov cx,word ptr [0fa5h]
-06DA  8B 1E A7 0F mov bx,word ptr [0fa7h]
-06DE  8B 16 A9 0F mov dx,word ptr [0fa9h]
-06E2  9F          lahf
-06E3  F6 C6 80    test dh,80h
-06E6  75 09       jne 6f1h
-06E8  9E          sahf
-06E9  D0 D5       rcl ch,1h
-06EB  D1 D3       rcl bx,1h
-06ED  D1 D2       rcl dx,1h
-06EF  EB 0A       jmp 6fbh
-06F1  FE C1       inc cl
-06F3  75 06       jne 6fbh
-06F5  B0 01       mov al,1h
-06F7  B4 4C       mov ah,4ch
-06F9  CD 21       int 21h
-06FB  E9 EC FE    jmp 5eah
-06FE  55          push bp
-06FF  8B EC       mov bp,sp
-0701  53          push bx
-0702  52          push dx
-0703  56          push si
-0704  57          push di
-0705  8B 76 04    mov si,word ptr [bp+4h]
-0708  8B 04       mov ax,word ptr [si]
-070A  8B 4C 02    mov cx,word ptr [si+2h]
-070D  8B 54 04    mov dx,word ptr [si+4h]
-0710  89 CB       mov bx,cx
-0712  8B FE       mov di,si
-0714  8B 4D 06    mov cx,word ptr [di+6h]
-0717  8B 75 08    mov si,word ptr [di+8h]
-071A  8B 7D 0A    mov di,word ptr [di+0ah]
-071D  52          push dx
-071E  31 FA       xor dx,di
-0720  5A          pop dx
-0721  79 06       jns 729h
-0723  52          push dx
-0724  D1 D2       rcl dx,1h
-0726  5A          pop dx
-0727  EB 10       jmp 739h
-0729  F6 C6 80    test dh,80h
-072C  74 08       je 736h
-072E  E8 20 00    call 751h
-0731  74 06       je 739h
-0733  F5          cmc
-0734  EB 03       jmp 739h
-0736  E8 18 00    call 751h
-0739  B0 00       mov al,0h
-073B  B4 00       mov ah,0h
-073D  72 06       jb 745h
-073F  74 08       je 749h
-0741  B0 01       mov al,1h
-0743  EB 04       jmp 749h
-0745  B0 FF       mov al,0ffh
-0747  B4 FF       mov ah,0ffh
-0749  5F          pop di
-074A  5E          pop si
-074B  5A          pop dx
-074C  5B          pop bx
-074D  89 EC       mov sp,bp
-074F  5D          pop bp
-0750  C3          ret
-0751  38 C8       cmp al,cl
-0753  75 0E       jne 763h
-0755  3C 00       cmp al,0h
-0757  74 0A       je 763h
-0759  39 FA       cmp dx,di
-075B  75 06       jne 763h
-075D  39 F3       cmp bx,si
-075F  75 02       jne 763h
-0761  38 EC       cmp ah,ch
-0763  C3          ret
-0764  55          push bp
-0765  8B EC       mov bp,sp
-0767  53          push bx
-0768  52          push dx
-0769  56          push si
-076A  57          push di
-076B  FF 76 04    push word ptr [bp+4h]
-076E  8B 76 04    mov si,word ptr [bp+4h]
-0771  8B 04       mov ax,word ptr [si]
-0773  8B 4C 02    mov cx,word ptr [si+2h]
-0776  8B 54 04    mov dx,word ptr [si+4h]
-0779  89 CB       mov bx,cx
-077B  3C A8       cmp al,0a8h
-077D  73 4C       jnb 7cbh
-077F  89 C1       mov cx,ax
-0781  89 DE       mov si,bx
-0783  89 D7       mov di,dx
-0785  30 E4       xor ah,ah
-0787  31 DB       xor bx,bx
-0789  31 D2       xor dx,dx
-078B  80 E9 80    sub cl,80h
-078E  76 4C       jbe 7dch
-0790  80 F9 10    cmp cl,10h
-0793  72 0C       jb 7a1h
-0795  88 FC       mov ah,bh
-0797  89 D3       mov bx,dx
-0799  BA FF FF    mov dx,0ffffh
-079C  80 E9 10    sub cl,10h
-079F  EB EF       jmp 790h
-07A1  80 F9 08    cmp cl,8h
-07A4  72 0F       jb 7b5h
-07A6  88 DC       mov ah,bl
-07A8  88 FB       mov bl,bh
-07AA  88 D7       mov bh,dl
-07AC  88 F2       mov dl,dh
-07AE  B6 FF       mov dh,0ffh
-07B0  80 E9 08    sub cl,8h
-07B3  EB EC       jmp 7a1h
-07B5  80 F9 00    cmp cl,0h
-07B8  74 0B       je 7c5h
-07BA  F9          stc
-07BB  D1 DA       rcr dx,1h
-07BD  D1 DB       rcr bx,1h
-07BF  D0 DC       rcr ah,1h
-07C1  FE C9       dec cl
-07C3  75 F5       jne 7bah
-07C5  21 FA       and dx,di
-07C7  21 F3       and bx,si
-07C9  20 EC       and ah,ch
-07CB  5F          pop di
-07CC  89 05       mov word ptr [di],ax
-07CE  89 5D 02    mov word ptr [di+2h],bx
-07D1  89 55 04    mov word ptr [di+4h],dx
-07D4  5F          pop di
-07D5  5E          pop si
-07D6  5A          pop dx
-07D7  5B          pop bx
-07D8  89 EC       mov sp,bp
-07DA  5D          pop bp
-07DB  C3          ret
-07DC  B0 00       mov al,0h
-07DE  EB EB       jmp 7cbh
-07E0  55          push bp
-07E1  8B EC       mov bp,sp
-07E3  53          push bx
-07E4  52          push dx
-07E5  56          push si
-07E6  57          push di
-07E7  8B 7E 04    mov di,word ptr [bp+4h]
-07EA  88 EA       mov dl,ch
-07EC  B5 00       mov ch,0h
-07EE  B6 00       mov dh,0h
-07F0  51          push cx
-07F1  BB FB 0F    mov bx,0ffbh
-07F4  E8 41 02    call 0a38h
-07F7  59          pop cx
-07F8  89 D8       mov ax,bx
-07FA  BB FB 0F    mov bx,0ffbh
-07FD  2B C3       sub ax,bx
-07FF  A3 3B 10    mov word ptr [103bh],ax
-0802  89 0E 3D 10 mov word ptr [103dh],cx
-0806  8B 06 3D 10 mov ax,word ptr [103dh]
-080A  8B 16 3B 10 mov dx,word ptr [103bh]
-080E  2B C2       sub ax,dx
-0810  83 F8 00    cmp ax,0h
-0813  7D 02       jnl 817h
-0815  31 C0       xor ax,ax
-0817  A3 3F 10    mov word ptr [103fh],ax
-081A  8B 16 3B 10 mov dx,word ptr [103bh]
-081E  03 C2       add ax,dx
-0820  3D FF 00    cmp ax,0ffh
-0823  77 03       jnbe 828h
-0825  E9 03 00    jmp 82bh
-0828  B8 FF 00    mov ax,0ffh
-082B  A3 41 10    mov word ptr [1041h],ax
-082E  8B 56 06    mov dx,word ptr [bp+6h]
-0831  89 D7       mov di,dx
-0833  88 05       mov byte ptr [di],al
-0835  47          inc di
-0836  8B 0E 3F 10 mov cx,word ptr [103fh]
-083A  E3 07       jcxz 843h
-083C  B0 20       mov al,20h
-083E  88 05       mov byte ptr [di],al
-0840  47          inc di
-0841  E2 F9       loop 83ch
-0843  BE FB 0F    mov si,0ffbh
-0846  8B 0E 3B 10 mov cx,word ptr [103bh]
-084A  E3 08       jcxz 854h
-084C  8A 04       mov al,byte ptr [si]
-084E  88 05       mov byte ptr [di],al
-0850  46          inc si
-0851  47          inc di
-0852  E2 F8       loop 84ch
-0854  8B 06 41 10 mov ax,word ptr [1041h]
-0858  5F          pop di
-0859  5E          pop si
-085A  5A          pop dx
-085B  5B          pop bx
-085C  89 EC       mov sp,bp
-085E  5D          pop bp
-085F  C3          ret
-0860  55          push bp
-0861  8B EC       mov bp,sp
-0863  53          push bx
-0864  52          push dx
-0865  56          push si
-0866  57          push di
-0867  8B 5E 04    mov bx,word ptr [bp+4h]
-086A  8B 7E 06    mov di,word ptr [bp+6h]
-086D  89 1E 43 10 mov word ptr [1043h],bx
-0871  E8 CF 02    call 0b43h
-0874  73 03       jnb 879h
-0876  E9 0B 00    jmp 884h
-0879  89 D8       mov ax,bx
-087B  8B 16 43 10 mov dx,word ptr [1043h]
-087F  2B C2       sub ax,dx
-0881  E9 03 00    jmp 887h
-0884  B8 FF FF    mov ax,0ffffh
-0887  5F          pop di
-0888  5E          pop si
-0889  5A          pop dx
-088A  5B          pop bx
-088B  89 EC       mov sp,bp
-088D  5D          pop bp
-088E  C3          ret
-088F  3C 00       cmp al,0h
-0891  74 03       je 896h
-0893  E9 01 00    jmp 897h
-0896  C3          ret
-0897  80 CE 80    or dh,80h
-089A  51          push cx
-089B  52          push dx
-089C  53          push bx
-089D  50          push ax
-089E  D1 EA       shr dx,1h
-08A0  D1 DB       rcr bx,1h
-08A2  D0 DC       rcr ah,1h
-08A4  D1 EA       shr dx,1h
-08A6  D1 DB       rcr bx,1h
-08A8  D0 DC       rcr ah,1h
-08AA  59          pop cx
-08AB  00 EC       add ah,ch
-08AD  59          pop cx
-08AE  13 D9       adc bx,cx
-08B0  59          pop cx
-08B1  13 D1       adc dx,cx
-08B3  59          pop cx
-08B4  72 03       jb 8b9h
-08B6  E9 0F 00    jmp 8c8h
-08B9  D1 DA       rcr dx,1h
-08BB  D1 DB       rcr bx,1h
-08BD  D0 DC       rcr ah,1h
-08BF  FE C0       inc al
-08C1  74 03       je 8c6h
-08C3  E9 02 00    jmp 8c8h
-08C6  F9          stc
-08C7  C3          ret
-08C8  80 E6 7F    and dh,7fh
-08CB  04 03       add al,3h
-08CD  C3          ret
-08CE  52          push dx
-08CF  53          push bx
-08D0  50          push ax
-08D1  88 0E BD 0F mov byte ptr [0fbdh],cl
-08D5  80 F9 00    cmp cl,0h
-08D8  78 03       js 8ddh
-08DA  E9 02 00    jmp 8dfh
-08DD  F6 D9       neg cl
-08DF  88 CB       mov bl,cl
-08E1  80 E3 FC    and bl,0fch
-08E4  88 DF       mov bh,bl
-08E6  D0 EB       shr bl,1h
-08E8  00 FB       add bl,bh
-08EA  30 FF       xor bh,bh
-08EC  8D BF BF 0F lea di,[bx+0fbfh]
-08F0  8B 05       mov ax,word ptr [di]
-08F2  8B 5D 02    mov bx,word ptr [di+2h]
-08F5  8B 55 04    mov dx,word ptr [di+4h]
-08F8  80 E1 03    and cl,3h
-08FB  75 03       jne 900h
-08FD  E9 0A 00    jmp 90ah
-0900  E8 8C FF    call 88fh
-0903  FE C9       dec cl
-0905  74 03       je 90ah
-0907  E9 F6 FF    jmp 900h
-090A  89 C1       mov cx,ax
-090C  89 DE       mov si,bx
-090E  89 D7       mov di,dx
-0910  58          pop ax
-0911  5B          pop bx
-0912  5A          pop dx
-0913  F6 06 BD 0F 80 test byte ptr [0fbdh],80h
-0918  74 03       je 91dh
-091A  E9 03 00    jmp 920h
-091D  E9 27 FC    jmp 547h
-0920  E9 0D FD    jmp 630h
-0923  80 F9 DA    cmp cl,0dah
-0926  7D 03       jnl 92bh
-0928  E9 12 00    jmp 93dh
-092B  80 F9 26    cmp cl,26h
-092E  7E 03       jle 933h
-0930  E9 0A 00    jmp 93dh
-0933  51          push cx
-0934  56          push si
-0935  57          push di
-0936  E8 95 FF    call 8ceh
-0939  5F          pop di
-093A  5E          pop si
-093B  59          pop cx
-093C  C3          ret
-093D  F9          stc
-093E  C3          ret
-093F  8B 05       mov ax,word ptr [di]
-0941  8B 5D 02    mov bx,word ptr [di+2h]
-0944  8B 55 04    mov dx,word ptr [di+4h]
-0947  3C 00       cmp al,0h
-0949  74 03       je 94eh
-094B  E9 16 00    jmp 964h
-094E  BE B1 0F    mov si,0fb1h
-0951  C7 04 30 30 mov word ptr [si],3030h
-0955  46          inc si
-0956  46          inc si
-0957  81 FE BD 0F cmp si,0fbdh
-095B  74 03       je 960h
-095D  E9 F1 FF    jmp 951h
-0960  B9 00 00    mov cx,0h
-0963  C3          ret
-0964  88 F5       mov ch,dh
-0966  80 E6 7F    and dh,7fh
-0969  50          push ax
-096A  52          push dx
-096B  2C 80       sub al,80h
-096D  98          cbw
-096E  BA 4D 00    mov dx,4dh
-0971  F7 EA       imul dx
-0973  05 05 00    add ax,5h
-0976  88 E1       mov cl,ah
-0978  5A          pop dx
-0979  58          pop ax
-097A  80 F9 D9    cmp cl,0d9h
-097D  74 03       je 982h
-097F  E9 02 00    jmp 984h
-0982  FE C1       inc cl
-0984  51          push cx
-0985  F6 D9       neg cl
-0987  E8 44 FF    call 8ceh
-098A  59          pop cx
-098B  3C 81       cmp al,81h
-098D  72 03       jb 992h
-098F  E9 05 00    jmp 997h
-0992  E8 FA FE    call 88fh
-0995  FE C9       dec cl
-0997  51          push cx
-0998  80 CE 80    or dh,80h
-099B  B1 84       mov cl,84h
-099D  28 C1       sub cl,al
-099F  B0 00       mov al,0h
-09A1  80 F9 00    cmp cl,0h
-09A4  75 03       jne 9a9h
-09A6  E9 0D 00    jmp 9b6h
-09A9  D1 EA       shr dx,1h
-09AB  D1 DB       rcr bx,1h
-09AD  D0 DC       rcr ah,1h
-09AF  FE C9       dec cl
-09B1  74 03       je 9b6h
-09B3  E9 F3 FF    jmp 9a9h
-09B6  BE B1 0F    mov si,0fb1h
-09B9  88 F5       mov ch,dh
-09BB  B1 04       mov cl,4h
-09BD  D2 ED       shr ch,cl
-09BF  80 C5 30    add ch,30h
-09C2  88 2C       mov byte ptr [si],ch
-09C4  80 E6 0F    and dh,0fh
-09C7  52          push dx
-09C8  53          push bx
-09C9  50          push ax
-09CA  D1 E0       shl ax,1h
-09CC  D1 D3       rcl bx,1h
-09CE  D1 D2       rcl dx,1h
-09D0  D1 E0       shl ax,1h
-09D2  D1 D3       rcl bx,1h
-09D4  D1 D2       rcl dx,1h
-09D6  59          pop cx
-09D7  03 C1       add ax,cx
-09D9  59          pop cx
-09DA  13 D9       adc bx,cx
-09DC  59          pop cx
-09DD  13 D1       adc dx,cx
-09DF  D1 E0       shl ax,1h
-09E1  D1 D3       rcl bx,1h
-09E3  D1 D2       rcl dx,1h
-09E5  46          inc si
-09E6  81 FE BD 0F cmp si,0fbdh
-09EA  74 03       je 9efh
-09EC  E9 CA FF    jmp 9b9h
-09EF  59          pop cx
-09F0  C3          ret
-09F1  30 E4       xor ah,ah
-09F3  BB B1 0F    mov bx,0fb1h
-09F6  03 D8       add bx,ax
-09F8  80 3F 35    cmp byte ptr [bx],35h
-09FB  C6 07 00    mov byte ptr [bx],0h
-09FE  73 03       jnb 0a03h
-0A00  E9 21 00    jmp 0a24h
-0A03  FE C8       dec al
-0A05  79 03       jns 0a0ah
-0A07  E9 11 00    jmp 0a1bh
-0A0A  4B          dec bx
-0A0B  FE 07       inc byte ptr [bx]
-0A0D  80 3F 3A    cmp byte ptr [bx],3ah
-0A10  73 03       jnb 0a15h
-0A12  E9 0F 00    jmp 0a24h
-0A15  C6 07 00    mov byte ptr [bx],0h
-0A18  E9 E8 FF    jmp 0a03h
-0A1B  C6 07 31    mov byte ptr [bx],31h
-0A1E  C6 47 01 00 mov byte ptr [bx+1h],0h
-0A22  FE C1       inc cl
-0A24  C3          ret
-0A25  8A 04       mov al,byte ptr [si]
-0A27  3C 00       cmp al,0h
-0A29  75 03       jne 0a2eh
-0A2B  E9 04 00    jmp 0a32h
-0A2E  46          inc si
-0A2F  E9 02 00    jmp 0a34h
-0A32  B0 30       mov al,30h
-0A34  88 07       mov byte ptr [bx],al
-0A36  43          inc bx
-0A37  C3          ret
-0A38  53          push bx
-0A39  81 FA 19 00 cmp dx,19h
-0A3D  73 03       jnb 0a42h
-0A3F  E9 3F 00    jmp 0a81h
-0A42  89 C8       mov ax,cx
-0A44  80 FD 00    cmp ch,0h
-0A47  75 03       jne 0a4ch
-0A49  E9 10 00    jmp 0a5ch
-0A4C  F6 C5 80    test ch,80h
-0A4F  75 03       jne 0a54h
-0A51  E9 05 00    jmp 0a59h
-0A54  31 C0       xor ax,ax
-0A56  E9 03 00    jmp 0a5ch
-0A59  B8 FF 00    mov ax,0ffh
-0A5C  B2 07       mov dl,7h
-0A5E  F6 45 05 80 test byte ptr [di+5h],80h
-0A62  75 03       jne 0a67h
-0A64  E9 02 00    jmp 0a69h
-0A67  FE C2       inc dl
-0A69  2A C2       sub al,dl
-0A6B  72 03       jb 0a70h
-0A6D  E9 02 00    jmp 0a72h
-0A70  B0 00       mov al,0h
-0A72  3C 09       cmp al,9h
-0A74  73 03       jnb 0a79h
-0A76  E9 02 00    jmp 0a7bh
-0A79  B0 09       mov al,9h
-0A7B  FE C0       inc al
-0A7D  88 C2       mov dl,al
-0A7F  88 C6       mov dh,al
-0A81  52          push dx
-0A82  E8 BA FE    call 93fh
-0A85  5A          pop dx
-0A86  8A C2       mov al,dl
-0A88  FE C0       inc al
-0A8A  80 FE 00    cmp dh,0h
-0A8D  74 03       je 0a92h
-0A8F  E9 18 00    jmp 0aaah
-0A92  00 C8       add al,cl
-0A94  78 03       js 0a99h
-0A96  E9 08 00    jmp 0aa1h
-0A99  C6 06 B1 0F 00 mov byte ptr [0fb1h],0h
-0A9E  E9 0C 00    jmp 0aadh
-0AA1  3C 0C       cmp al,0ch
-0AA3  73 03       jnb 0aa8h
-0AA5  E9 02 00    jmp 0aaah
-0AA8  B0 0B       mov al,0bh
-0AAA  E8 44 FF    call 9f1h
-0AAD  5B          pop bx
-0AAE  BE B1 0F    mov si,0fb1h
-0AB1  F6 C5 80    test ch,80h
-0AB4  75 03       jne 0ab9h
-0AB6  E9 05 00    jmp 0abeh
-0AB9  B0 2D       mov al,2dh
-0ABB  E8 76 FF    call 0a34h
-0ABE  88 CD       mov ch,cl
-0AC0  80 FE 00    cmp dh,0h
-0AC3  75 03       jne 0ac8h
-0AC5  E9 02 00    jmp 0acah
-0AC8  B5 00       mov ch,0h
-0ACA  80 FD 00    cmp ch,0h
-0ACD  78 03       js 0ad2h
-0ACF  E9 06 00    jmp 0ad8h
-0AD2  E8 5D FF    call 0a32h
-0AD5  E9 0A 00    jmp 0ae2h
-0AD8  E8 4A FF    call 0a25h
-0ADB  FE CD       dec ch
-0ADD  78 03       js 0ae2h
-0ADF  E9 F6 FF    jmp 0ad8h
-0AE2  80 FA 00    cmp dl,0h
-0AE5  75 03       jne 0aeah
-0AE7  E9 23 00    jmp 0b0dh
-0AEA  B0 2E       mov al,2eh
-0AEC  E8 45 FF    call 0a34h
-0AEF  FE C5       inc ch
-0AF1  75 03       jne 0af6h
-0AF3  E9 0A 00    jmp 0b00h
-0AF6  E8 39 FF    call 0a32h
-0AF9  FE CA       dec dl
-0AFB  74 03       je 0b00h
-0AFD  E9 EF FF    jmp 0aefh
-0B00  FE CA       dec dl
-0B02  79 03       jns 0b07h
-0B04  E9 06 00    jmp 0b0dh
-0B07  E8 1B FF    call 0a25h
-0B0A  E9 F3 FF    jmp 0b00h
-0B0D  80 FE 00    cmp dh,0h
-0B10  74 03       je 0b15h
-0B12  E9 01 00    jmp 0b16h
-0B15  C3          ret
-0B16  B0 45       mov al,45h
-0B18  E8 19 FF    call 0a34h
-0B1B  B0 2B       mov al,2bh
-0B1D  80 F9 00    cmp cl,0h
-0B20  78 03       js 0b25h
-0B22  E9 04 00    jmp 0b29h
-0B25  F6 D9       neg cl
-0B27  B0 2D       mov al,2dh
-0B29  E8 08 FF    call 0a34h
-0B2C  B0 2F       mov al,2fh
-0B2E  FE C0       inc al
-0B30  80 E9 0A    sub cl,0ah
-0B33  72 03       jb 0b38h
-0B35  E9 F6 FF    jmp 0b2eh
-0B38  E8 F9 FE    call 0a34h
-0B3B  80 C1 3A    add cl,3ah
-0B3E  88 C8       mov al,cl
-0B40  E9 F1 FE    jmp 0a34h
-0B43  8A 0F       mov cl,byte ptr [bx]
-0B45  80 F9 2D    cmp cl,2dh
-0B48  74 03       je 0b4dh
-0B4A  E9 01 00    jmp 0b4eh
-0B4D  43          inc bx
-0B4E  51          push cx
-0B4F  E8 1F 00    call 0b71h
-0B52  59          pop cx
-0B53  73 03       jnb 0b58h
-0B55  E9 17 00    jmp 0b6fh
-0B58  80 F9 2D    cmp cl,2dh
-0B5B  74 03       je 0b60h
-0B5D  E9 0D 00    jmp 0b6dh
-0B60  8A 05       mov al,byte ptr [di]
-0B62  3C 00       cmp al,0h
-0B64  75 03       jne 0b69h
-0B66  E9 04 00    jmp 0b6dh
-0B69  80 75 05 80 xor byte ptr [di+5h],80h
-0B6D  F8          clc
-0B6E  C3          ret
-0B6F  F9          stc
-0B70  C3          ret
-0B71  89 DE       mov si,bx
-0B73  31 C0       xor ax,ax
-0B75  31 DB       xor bx,bx
-0B77  31 D2       xor dx,dx
-0B79  31 C9       xor cx,cx
-0B7B  C6 06 BE 0F 00 mov byte ptr [0fbeh],0h
-0B80  8A 0C       mov cl,byte ptr [si]
-0B82  80 F9 61    cmp cl,61h
-0B85  73 03       jnb 0b8ah
-0B87  E9 08 00    jmp 0b92h
-0B8A  80 F9 7A    cmp cl,7ah
-0B8D  77 03       jnbe 0b92h
-0B8F  80 E9 20    sub cl,20h
-0B92  E8 C8 00    call 0c5dh
-0B95  73 03       jnb 0b9ah
-0B97  E9 3A 00    jmp 0bd4h
-0B9A  E8 F2 FC    call 88fh
-0B9D  73 03       jnb 0ba2h
-0B9F  E9 B5 00    jmp 0c57h
-0BA2  57          push di
-0BA3  56          push si
-0BA4  51          push cx
-0BA5  52          push dx
-0BA6  53          push bx
-0BA7  50          push ax
-0BA8  88 C8       mov al,cl
-0BAA  30 E4       xor ah,ah
-0BAC  E8 C2 F7    call 371h
-0BAF  89 C1       mov cx,ax
-0BB1  89 DE       mov si,bx
-0BB3  89 D7       mov di,dx
-0BB5  58          pop ax
-0BB6  5B          pop bx
-0BB7  5A          pop dx
-0BB8  C7 06 A0 0F 00 00 mov word ptr [0fa0h],0h
-0BBE  E8 60 F8    call 421h
-0BC1  59          pop cx
-0BC2  5E          pop si
-0BC3  5F          pop di
-0BC4  F6 C5 40    test ch,40h
-0BC7  75 03       jne 0bcch
-0BC9  E9 04 00    jmp 0bd0h
-0BCC  FE 0E BE 0F dec byte ptr [0fbeh]
-0BD0  46          inc si
-0BD1  E9 AC FF    jmp 0b80h
-0BD4  80 F9 2E    cmp cl,2eh
-0BD7  74 03       je 0bdch
-0BD9  E9 0E 00    jmp 0beah
-0BDC  F6 C5 40    test ch,40h
-0BDF  74 03       je 0be4h
-0BE1  E9 73 00    jmp 0c57h
-0BE4  80 CD 40    or ch,40h
-0BE7  E9 E6 FF    jmp 0bd0h
-0BEA  80 F9 45    cmp cl,45h
-0BED  8A 0E BE 0F mov cl,byte ptr [0fbeh]
-0BF1  74 03       je 0bf6h
-0BF3  E9 4D 00    jmp 0c43h
-0BF6  E8 2A FD    call 923h
-0BF9  73 03       jnb 0bfeh
-0BFB  E9 59 00    jmp 0c57h
-0BFE  46          inc si
-0BFF  8A 0C       mov cl,byte ptr [si]
-0C01  80 F9 2B    cmp cl,2bh
-0C04  75 03       jne 0c09h
-0C06  E9 0B 00    jmp 0c14h
-0C09  80 F9 2D    cmp cl,2dh
-0C0C  74 03       je 0c11h
-0C0E  E9 04 00    jmp 0c15h
-0C11  80 CD 20    or ch,20h
-0C14  46          inc si
-0C15  E8 43 00    call 0c5bh
-0C18  73 03       jnb 0c1dh
-0C1A  E9 3A 00    jmp 0c57h
-0C1D  50          push ax
-0C1E  88 C8       mov al,cl
-0C20  46          inc si
-0C21  E8 37 00    call 0c5bh
-0C24  73 03       jnb 0c29h
-0C26  E9 0D 00    jmp 0c36h
-0C29  88 C4       mov ah,al
-0C2B  D0 E0       shl al,1h
-0C2D  D0 E0       shl al,1h
-0C2F  00 E0       add al,ah
-0C31  D0 E0       shl al,1h
-0C33  00 C8       add al,cl
-0C35  46          inc si
-0C36  88 C1       mov cl,al
-0C38  58          pop ax
-0C39  F6 C5 20    test ch,20h
-0C3C  75 03       jne 0c41h
-0C3E  E9 02 00    jmp 0c43h
-0C41  F6 D9       neg cl
-0C43  E8 DD FC    call 923h
-0C46  73 03       jnb 0c4bh
-0C48  E9 0C 00    jmp 0c57h
-0C4B  89 05       mov word ptr [di],ax
-0C4D  89 5D 02    mov word ptr [di+2h],bx
-0C50  89 55 04    mov word ptr [di+4h],dx
-0C53  F8          clc
-0C54  E9 01 00    jmp 0c58h
-0C57  F9          stc
-0C58  89 F3       mov bx,si
-0C5A  C3          ret
-0C5B  8A 0C       mov cl,byte ptr [si]
-0C5D  80 F9 30    cmp cl,30h
-0C60  73 03       jnb 0c65h
-0C62  E9 0C 00    jmp 0c71h
-0C65  80 F9 3A    cmp cl,3ah
-0C68  F5          cmc
-0C69  73 03       jnb 0c6eh
-0C6B  E9 03 00    jmp 0c71h
-0C6E  80 E9 30    sub cl,30h
-0C71  C3          ret
-0C72  55          push bp
-0C73  8B EC       mov bp,sp
-0C75  53          push bx
-0C76  52          push dx
-0C77  56          push si
-0C78  57          push di
-0C79  8B 46 06    mov ax,word ptr [bp+6h]
-0C7C  A3 3D 10    mov word ptr [103dh],ax
-0C7F  8B 56 04    mov dx,word ptr [bp+4h]
-0C82  8B 4E 06    mov cx,word ptr [bp+6h]
-0C85  8B 7E 08    mov di,word ptr [bp+8h]
-0C88  BB FB 0F    mov bx,0ffbh
-0C8B  E8 AA FD    call 0a38h
-0C8E  89 D8       mov ax,bx
-0C90  BB FB 0F    mov bx,0ffbh
-0C93  2B C3       sub ax,bx
-0C95  A3 3B 10    mov word ptr [103bh],ax
-0C98  8B 06 3D 10 mov ax,word ptr [103dh]
-0C9C  8B 16 3B 10 mov dx,word ptr [103bh]
-0CA0  2B C2       sub ax,dx
-0CA2  83 F8 00    cmp ax,0h
-0CA5  7D 02       jnl 0ca9h
-0CA7  31 C0       xor ax,ax
-0CA9  A3 3F 10    mov word ptr [103fh],ax
-0CAC  8B 0E 3F 10 mov cx,word ptr [103fh]
-0CB0  E3 08       jcxz 0cbah
-0CB2  B0 20       mov al,20h
-0CB4  B4 02       mov ah,2h
-0CB6  CD 21       int 21h
-0CB8  E2 F8       loop 0cb2h
-0CBA  BE FB 0F    mov si,0ffbh
-0CBD  8B 0E 3B 10 mov cx,word ptr [103bh]
-0CC1  E3 09       jcxz 0ccch
-0CC3  8A 04       mov al,byte ptr [si]
-0CC5  B4 02       mov ah,2h
-0CC7  CD 21       int 21h
-0CC9  46          inc si
-0CCA  E2 F7       loop 0cc3h
-0CCC  5F          pop di
-0CCD  5E          pop si
-0CCE  5A          pop dx
-0CCF  5B          pop bx
-0CD0  89 EC       mov sp,bp
-0CD2  5D          pop bp
-0CD3  C3          ret
-0CD4  55          push bp
-0CD5  8B EC       mov bp,sp
-0CD7  53          push bx
-0CD8  51          push cx
-0CD9  52          push dx
-0CDA  56          push si
-0CDB  57          push di
-0CDC  8B 46 04    mov ax,word ptr [bp+4h]
-0CDF  88 C6       mov dh,al
-0CE1  8B 76 0A    mov si,word ptr [bp+0ah]
-0CE4  8B 7E 08    mov di,word ptr [bp+8h]
-0CE7  8B 5E 06    mov bx,word ptr [bp+6h]
-0CEA  80 FE 00    cmp dh,0h
-0CED  74 23       je 0d12h
-0CEF  8A 04       mov al,byte ptr [si]
-0CF1  8A 15       mov dl,byte ptr [di]
-0CF3  80 FC 00    cmp ah,0h
-0CF6  74 0B       je 0d03h
-0CF8  80 FC 01    cmp ah,1h
-0CFB  74 0A       je 0d07h
-0CFD  F6 D2       not dl
-0CFF  20 D0       and al,dl
-0D01  EB 06       jmp 0d09h
-0D03  20 D0       and al,dl
-0D05  EB 02       jmp 0d09h
-0D07  08 D0       or al,dl
-0D09  88 07       mov byte ptr [bx],al
-0D0B  46          inc si
-0D0C  47          inc di
-0D0D  43          inc bx
-0D0E  FE CE       dec dh
-0D10  75 DD       jne 0cefh
-0D12  5F          pop di
-0D13  5E          pop si
-0D14  5A          pop dx
-0D15  59          pop cx
-0D16  5B          pop bx
-0D17  89 EC       mov sp,bp
-0D19  5D          pop bp
-0D1A  C3          ret
-0D1B  55          push bp
-0D1C  8B EC       mov bp,sp
-0D1E  53          push bx
-0D1F  51          push cx
-0D20  52          push dx
-0D21  56          push si
-0D22  57          push di
-0D23  8B 4E 04    mov cx,word ptr [bp+4h]
-0D26  8B 76 08    mov si,word ptr [bp+8h]
-0D29  8B 7E 06    mov di,word ptr [bp+6h]
-0D2C  B4 07       mov ah,7h
-0D2E  E3 2B       jcxz 0d5bh
-0D30  8A 04       mov al,byte ptr [si]
-0D32  8A 15       mov dl,byte ptr [di]
-0D34  88 C3       mov bl,al
-0D36  88 D6       mov dh,dl
-0D38  3A C2       cmp al,dl
-0D3A  74 03       je 0d3fh
-0D3C  80 E4 FE    and ah,0feh
-0D3F  F6 D2       not dl
-0D41  20 D0       and al,dl
-0D43  3C 00       cmp al,0h
-0D45  74 03       je 0d4ah
-0D47  80 E4 FD    and ah,0fdh
-0D4A  8A C3       mov al,bl
-0D4C  F6 D0       not al
-0D4E  20 F0       and al,dh
-0D50  3C 00       cmp al,0h
-0D52  74 03       je 0d57h
-0D54  80 E4 FB    and ah,0fbh
-0D57  46          inc si
-0D58  47          inc di
-0D59  E2 D5       loop 0d30h
-0D5B  F6 C4 01    test ah,1h
-0D5E  74 03       je 0d63h
-0D60  80 E4 F9    and ah,0f9h
-0D63  88 E0       mov al,ah
-0D65  B4 00       mov ah,0h
-0D67  5F          pop di
-0D68  5E          pop si
-0D69  5A          pop dx
-0D6A  59          pop cx
-0D6B  5B          pop bx
-0D6C  89 EC       mov sp,bp
-0D6E  5D          pop bp
-0D6F  C3          ret
-0D70  55          push bp
-0D71  8B EC       mov bp,sp
-0D73  53          push bx
-0D74  51          push cx
-0D75  56          push si
-0D76  8B 4E 04    mov cx,word ptr [bp+4h]
-0D79  8B 76 06    mov si,word ptr [bp+6h]
-0D7C  8B 5E 08    mov bx,word ptr [bp+8h]
-0D7F  E3 08       jcxz 0d89h
-0D81  8A 04       mov al,byte ptr [si]
-0D83  88 07       mov byte ptr [bx],al
-0D85  46          inc si
-0D86  43          inc bx
-0D87  E2 F8       loop 0d81h
-0D89  5E          pop si
-0D8A  59          pop cx
-0D8B  5B          pop bx
-0D8C  89 EC       mov sp,bp
-0D8E  5D          pop bp
-0D8F  C3          ret
-0D90  55          push bp
-0D91  8B EC       mov bp,sp
-0D93  53          push bx
-0D94  51          push cx
-0D95  52          push dx
-0D96  56          push si
-0D97  57          push di
-0D98  8B 7E 04    mov di,word ptr [bp+4h]
-0D9B  B8 FF FF    mov ax,0ffffh
-0D9E  89 05       mov word ptr [di],ax
-0DA0  31 C0       xor ax,ax
-0DA2  89 45 02    mov word ptr [di+2h],ax
-0DA5  8B 76 06    mov si,word ptr [bp+6h]
-0DA8  8A 04       mov al,byte ptr [si]
-0DAA  46          inc si
-0DAB  3C 7F       cmp al,7fh
-0DAD  76 02       jbe 0db1h
-0DAF  B0 7F       mov al,7fh
-0DB1  88 C1       mov cl,al
-0DB3  30 ED       xor ch,ch
-0DB5  83 C7 04    add di,4h
-0DB8  E3 08       jcxz 0dc2h
-0DBA  8A 04       mov al,byte ptr [si]
-0DBC  88 05       mov byte ptr [di],al
-0DBE  46          inc si
-0DBF  47          inc di
-0DC0  E2 F8       loop 0dbah
-0DC2  C6 05 00    mov byte ptr [di],0h
-0DC5  5F          pop di
-0DC6  5E          pop si
-0DC7  5A          pop dx
-0DC8  59          pop cx
-0DC9  5B          pop bx
-0DCA  89 EC       mov sp,bp
-0DCC  5D          pop bp
-0DCD  C3          ret
-0DCE  55          push bp
-0DCF  8B EC       mov bp,sp
-0DD1  53          push bx
-0DD2  51          push cx
-0DD3  52          push dx
-0DD4  57          push di
-0DD5  8B 7E 04    mov di,word ptr [bp+4h]
-0DD8  8D 55 04    lea dx,[di+4h]
-0DDB  B8 00 3D    mov ax,3d00h
-0DDE  CD 21       int 21h
-0DE0  72 0F       jb 0df1h
-0DE2  89 05       mov word ptr [di],ax
-0DE4  B8 01 00    mov ax,1h
-0DE7  89 45 02    mov word ptr [di+2h],ax
-0DEA  31 C0       xor ax,ax
-0DEC  A3 45 10    mov word ptr [1045h],ax
-0DEF  EB 10       jmp 0e01h
-0DF1  89 C3       mov bx,ax
-0DF3  B8 FF FF    mov ax,0ffffh
-0DF6  89 05       mov word ptr [di],ax
-0DF8  31 C0       xor ax,ax
-0DFA  89 45 02    mov word ptr [di+2h],ax
-0DFD  89 1E 45 10 mov word ptr [1045h],bx
-0E01  5F          pop di
-0E02  5A          pop dx
-0E03  59          pop cx
-0E04  5B          pop bx
-0E05  89 EC       mov sp,bp
-0E07  5D          pop bp
-0E08  C3          ret
-0E09  55          push bp
-0E0A  8B EC       mov bp,sp
-0E0C  53          push bx
-0E0D  51          push cx
-0E0E  52          push dx
-0E0F  57          push di
-0E10  8B 7E 04    mov di,word ptr [bp+4h]
-0E13  8D 55 04    lea dx,[di+4h]
-0E16  31 C9       xor cx,cx
-0E18  B8 00 3C    mov ax,3c00h
-0E1B  CD 21       int 21h
-0E1D  72 0F       jb 0e2eh
-0E1F  89 05       mov word ptr [di],ax
-0E21  B8 02 00    mov ax,2h
-0E24  89 45 02    mov word ptr [di+2h],ax
-0E27  31 C0       xor ax,ax
-0E29  A3 45 10    mov word ptr [1045h],ax
-0E2C  EB 10       jmp 0e3eh
-0E2E  89 C3       mov bx,ax
-0E30  B8 FF FF    mov ax,0ffffh
-0E33  89 05       mov word ptr [di],ax
-0E35  31 C0       xor ax,ax
-0E37  89 45 02    mov word ptr [di+2h],ax
-0E3A  89 1E 45 10 mov word ptr [1045h],bx
-0E3E  5F          pop di
-0E3F  5A          pop dx
-0E40  59          pop cx
-0E41  5B          pop bx
-0E42  89 EC       mov sp,bp
-0E44  5D          pop bp
-0E45  C3          ret
-0E46  55          push bp
-0E47  8B EC       mov bp,sp
-0E49  53          push bx
-0E4A  52          push dx
-0E4B  57          push di
-0E4C  8B 7E 04    mov di,word ptr [bp+4h]
-0E4F  8B 05       mov ax,word ptr [di]
-0E51  3D FF FF    cmp ax,0ffffh
-0E54  74 16       je 0e6ch
-0E56  89 C3       mov bx,ax
-0E58  B4 3E       mov ah,3eh
-0E5A  CD 21       int 21h
-0E5C  89 C3       mov bx,ax
-0E5E  B8 FF FF    mov ax,0ffffh
-0E61  89 05       mov word ptr [di],ax
-0E63  31 C0       xor ax,ax
-0E65  89 45 02    mov word ptr [di+2h],ax
-0E68  89 1E 45 10 mov word ptr [1045h],bx
-0E6C  5F          pop di
-0E6D  5A          pop dx
-0E6E  5B          pop bx
-0E6F  89 EC       mov sp,bp
-0E71  5D          pop bp
-0E72  C3          ret
-0E73  8B 06 45 10 mov ax,word ptr [1045h]
-0E77  C7 06 45 10 00 00 mov word ptr [1045h],0h
-0E7D  C3          ret
-0E7E  A3 45 10    mov word ptr [1045h],ax
-0E81  C3          ret
+0232  B4 08       mov ah,8h
+0234  CD 21       int 21h
+0236  C3          ret
+0237  88 C2       mov dl,al
+0239  BB 01 00    mov bx,1h
+023C  8A DA       mov bl,dl
+023E  89 1E C3 0F mov word ptr [0fc3h],bx
+0242  C3          ret
+0243  55          push bp
+0244  8B EC       mov bp,sp
+0246  50          push ax
+0247  53          push bx
+0248  51          push cx
+0249  52          push dx
+024A  57          push di
+024B  8B 7E 04    mov di,word ptr [bp+4h]
+024E  8B 46 04    mov ax,word ptr [bp+4h]
+0251  8B F0       mov si,ax
+0253  46          inc si
+0254  31 DB       xor bx,bx
+0256  53          push bx
+0257  E8 C6 FF    call 220h
+025A  5B          pop bx
+025B  3C 0D       cmp al,0dh
+025D  74 1D       je 27ch
+025F  3C 0A       cmp al,0ah
+0261  74 19       je 27ch
+0263  3C 1A       cmp al,1ah
+0265  74 15       je 27ch
+0267  88 C2       mov dl,al
+0269  43          inc bx
+026A  88 14       mov byte ptr [si],dl
+026C  46          inc si
+026D  E2 E7       loop 256h
+026F  8A C3       mov al,bl
+0271  88 05       mov byte ptr [di],al
+0273  5F          pop di
+0274  5A          pop dx
+0275  59          pop cx
+0276  5B          pop bx
+0277  58          pop ax
+0278  89 EC       mov sp,bp
+027A  5D          pop bp
+027B  C3          ret
+027C  53          push bx
+027D  E8 B7 FF    call 237h
+0280  5B          pop bx
+0281  EB EC       jmp 26fh
+0283  55          push bp
+0284  8B EC       mov bp,sp
+0286  50          push ax
+0287  53          push bx
+0288  51          push cx
+0289  52          push dx
+028A  8B 46 04    mov ax,word ptr [bp+4h]
+028D  8B F0       mov si,ax
+028F  8B 5E 06    mov bx,word ptr [bp+6h]
+0292  31 D2       xor dx,dx
+0294  8A 07       mov al,byte ptr [bx]
+0296  88 C2       mov dl,al
+0298  43          inc bx
+0299  39 D1       cmp cx,dx
+029B  72 04       jb 2a1h
+029D  8B CA       mov cx,dx
+029F  EB 02       jmp 2a3h
+02A1  8A D1       mov dl,cl
+02A3  88 14       mov byte ptr [si],dl
+02A5  46          inc si
+02A6  E3 0A       jcxz 2b2h
+02A8  8A 07       mov al,byte ptr [bx]
+02AA  88 C2       mov dl,al
+02AC  88 14       mov byte ptr [si],dl
+02AE  43          inc bx
+02AF  46          inc si
+02B0  E2 F6       loop 2a8h
+02B2  5A          pop dx
+02B3  59          pop cx
+02B4  5B          pop bx
+02B5  58          pop ax
+02B6  89 EC       mov sp,bp
+02B8  5D          pop bp
+02B9  C3          ret
+02BA  55          push bp
+02BB  8B EC       mov bp,sp
+02BD  53          push bx
+02BE  51          push cx
+02BF  52          push dx
+02C0  31 C9       xor cx,cx
+02C2  31 D2       xor dx,dx
+02C4  8B 5E 06    mov bx,word ptr [bp+6h]
+02C7  8A 0F       mov cl,byte ptr [bx]
+02C9  8B 46 04    mov ax,word ptr [bp+4h]
+02CC  8B F0       mov si,ax
+02CE  8A 14       mov dl,byte ptr [si]
+02D0  39 D1       cmp cx,dx
+02D2  76 02       jbe 2d6h
+02D4  8B CA       mov cx,dx
+02D6  E3 0E       jcxz 2e6h
+02D8  43          inc bx
+02D9  46          inc si
+02DA  8A 07       mov al,byte ptr [bx]
+02DC  8A 14       mov dl,byte ptr [si]
+02DE  3A C2       cmp al,dl
+02E0  75 14       jne 2f6h
+02E2  43          inc bx
+02E3  46          inc si
+02E4  E2 F4       loop 2dah
+02E6  8B 5E 06    mov bx,word ptr [bp+6h]
+02E9  8A 0F       mov cl,byte ptr [bx]
+02EB  8B 46 04    mov ax,word ptr [bp+4h]
+02EE  8B F0       mov si,ax
+02F0  31 D2       xor dx,dx
+02F2  8A 14       mov dl,byte ptr [si]
+02F4  39 D1       cmp cx,dx
+02F6  B0 00       mov al,0h
+02F8  B4 00       mov ah,0h
+02FA  72 06       jb 302h
+02FC  74 08       je 306h
+02FE  B0 01       mov al,1h
+0300  EB 04       jmp 306h
+0302  B0 FF       mov al,0ffh
+0304  B4 FF       mov ah,0ffh
+0306  5A          pop dx
+0307  59          pop cx
+0308  5B          pop bx
+0309  89 EC       mov sp,bp
+030B  5D          pop bp
+030C  C3          ret
+030D  55          push bp
+030E  8B EC       mov bp,sp
+0310  50          push ax
+0311  53          push bx
+0312  51          push cx
+0313  52          push dx
+0314  56          push si
+0315  57          push di
+0316  8B 46 04    mov ax,word ptr [bp+4h]
+0319  8B F0       mov si,ax
+031B  8B 5E 06    mov bx,word ptr [bp+6h]
+031E  31 D2       xor dx,dx
+0320  8A 14       mov dl,byte ptr [si]
+0322  31 C0       xor ax,ax
+0324  8A 07       mov al,byte ptr [bx]
+0326  01 C2       add dx,ax
+0328  39 D1       cmp cx,dx
+032A  73 06       jnb 332h
+032C  B0 10       mov al,10h
+032E  B4 4C       mov ah,4ch
+0330  CD 21       int 21h
+0332  8B CA       mov cx,dx
+0334  88 0C       mov byte ptr [si],cl
+0336  29 C2       sub dx,ax
+0338  8B FE       mov di,si
+033A  47          inc di
+033B  01 D7       add di,dx
+033D  43          inc bx
+033E  89 C1       mov cx,ax
+0340  E3 08       jcxz 34ah
+0342  8A 07       mov al,byte ptr [bx]
+0344  88 05       mov byte ptr [di],al
+0346  43          inc bx
+0347  47          inc di
+0348  E2 F8       loop 342h
+034A  5F          pop di
+034B  5E          pop si
+034C  5A          pop dx
+034D  59          pop cx
+034E  5B          pop bx
+034F  58          pop ax
+0350  89 EC       mov sp,bp
+0352  5D          pop bp
+0353  C3          ret
+0354  55          push bp
+0355  8B EC       mov bp,sp
+0357  53          push bx
+0358  52          push dx
+0359  56          push si
+035A  57          push di
+035B  8B 76 06    mov si,word ptr [bp+6h]
+035E  8B 04       mov ax,word ptr [si]
+0360  E8 13 00    call 376h
+0363  8B 7E 04    mov di,word ptr [bp+4h]
+0366  89 05       mov word ptr [di],ax
+0368  89 5D 02    mov word ptr [di+2h],bx
+036B  89 55 04    mov word ptr [di+4h],dx
+036E  5F          pop di
+036F  5E          pop si
+0370  5A          pop dx
+0371  5B          pop bx
+0372  89 EC       mov sp,bp
+0374  5D          pop bp
+0375  C3          ret
+0376  83 F8 00    cmp ax,0h
+0379  75 06       jne 381h
+037B  31 DB       xor bx,bx
+037D  31 D2       xor dx,dx
+037F  EB 2C       jmp 3adh
+0381  88 E7       mov bh,ah
+0383  89 C2       mov dx,ax
+0385  83 FA 00    cmp dx,0h
+0388  79 02       jns 38ch
+038A  F7 DA       neg dx
+038C  B8 90 00    mov ax,90h
+038F  80 FE 00    cmp dh,0h
+0392  75 04       jne 398h
+0394  B0 88       mov al,88h
+0396  86 D6       xchg dh,dl
+0398  83 FA 00    cmp dx,0h
+039B  78 06       js 3a3h
+039D  FE C8       dec al
+039F  D1 E2       shl dx,1h
+03A1  79 FA       jns 39dh
+03A3  80 FF 00    cmp bh,0h
+03A6  78 03       js 3abh
+03A8  80 E6 7F    and dh,7fh
+03AB  31 DB       xor bx,bx
+03AD  C3          ret
+03AE  55          push bp
+03AF  8B EC       mov bp,sp
+03B1  53          push bx
+03B2  52          push dx
+03B3  56          push si
+03B4  57          push di
+03B5  FF 76 04    push word ptr [bp+4h]
+03B8  8B 76 04    mov si,word ptr [bp+4h]
+03BB  8B 04       mov ax,word ptr [si]
+03BD  8B 4C 02    mov cx,word ptr [si+2h]
+03C0  8B 54 04    mov dx,word ptr [si+4h]
+03C3  89 CB       mov bx,cx
+03C5  8B FE       mov di,si
+03C7  8B 4D 06    mov cx,word ptr [di+6h]
+03CA  8B 75 08    mov si,word ptr [di+8h]
+03CD  8B 7D 0A    mov di,word ptr [di+0ah]
+03D0  C7 06 C5 0F 00 00 mov word ptr [0fc5h],0h
+03D6  E8 4D 00    call 426h
+03D9  5F          pop di
+03DA  89 05       mov word ptr [di],ax
+03DC  89 5D 02    mov word ptr [di+2h],bx
+03DF  89 55 04    mov word ptr [di+4h],dx
+03E2  5F          pop di
+03E3  5E          pop si
+03E4  5A          pop dx
+03E5  5B          pop bx
+03E6  89 EC       mov sp,bp
+03E8  5D          pop bp
+03E9  C3          ret
+03EA  55          push bp
+03EB  8B EC       mov bp,sp
+03ED  53          push bx
+03EE  52          push dx
+03EF  56          push si
+03F0  57          push di
+03F1  FF 76 04    push word ptr [bp+4h]
+03F4  8B 76 04    mov si,word ptr [bp+4h]
+03F7  8B 04       mov ax,word ptr [si]
+03F9  8B 4C 02    mov cx,word ptr [si+2h]
+03FC  8B 54 04    mov dx,word ptr [si+4h]
+03FF  89 CB       mov bx,cx
+0401  8B FE       mov di,si
+0403  8B 4D 06    mov cx,word ptr [di+6h]
+0406  8B 75 08    mov si,word ptr [di+8h]
+0409  8B 7D 0A    mov di,word ptr [di+0ah]
+040C  C7 06 C5 0F 00 80 mov word ptr [0fc5h],8000h
+0412  E8 11 00    call 426h
+0415  5F          pop di
+0416  89 05       mov word ptr [di],ax
+0418  89 5D 02    mov word ptr [di+2h],bx
+041B  89 55 04    mov word ptr [di+4h],dx
+041E  5F          pop di
+041F  5E          pop si
+0420  5A          pop dx
+0421  5B          pop bx
+0422  89 EC       mov sp,bp
+0424  5D          pop bp
+0425  C3          ret
+0426  80 F9 00    cmp cl,0h
+0429  74 0E       je 439h
+042B  33 3E C5 0F xor di,word ptr [0fc5h]
+042F  3C 00       cmp al,0h
+0431  75 07       jne 43ah
+0433  89 C8       mov ax,cx
+0435  89 F3       mov bx,si
+0437  89 FA       mov dx,di
+0439  C3          ret
+043A  38 C8       cmp al,cl
+043C  76 05       jbe 443h
+043E  91          xchg ax,cx
+043F  87 F3       xchg bx,si
+0441  87 FA       xchg dx,di
+0443  88 0E C9 0F mov byte ptr [0fc9h],cl
+0447  28 C1       sub cl,al
+0449  80 F9 28    cmp cl,28h
+044C  72 06       jb 454h
+044E  8A 0E C9 0F mov cl,byte ptr [0fc9h]
+0452  EB DF       jmp 433h
+0454  89 3E C5 0F mov word ptr [0fc5h],di
+0458  80 26 C6 0F 80 and byte ptr [0fc6h],80h
+045D  89 3E C7 0F mov word ptr [0fc7h],di
+0461  30 36 C8 0F xor byte ptr [0fc8h],dh
+0465  81 CF 00 80 or di,8000h
+0469  80 CE 80    or dh,80h
+046C  80 F9 10    cmp cl,10h
+046F  72 0B       jb 47ch
+0471  88 FC       mov ah,bh
+0473  89 D3       mov bx,dx
+0475  31 D2       xor dx,dx
+0477  80 E9 10    sub cl,10h
+047A  EB F0       jmp 46ch
+047C  80 F9 08    cmp cl,8h
+047F  72 0D       jb 48eh
+0481  88 DC       mov ah,bl
+0483  88 FB       mov bl,bh
+0485  88 D7       mov bh,dl
+0487  88 F2       mov dl,dh
+0489  30 F6       xor dh,dh
+048B  80 E9 08    sub cl,8h
+048E  80 F9 00    cmp cl,0h
+0491  74 0A       je 49dh
+0493  D1 EA       shr dx,1h
+0495  D1 DB       rcr bx,1h
+0497  D0 DC       rcr ah,1h
+0499  FE C9       dec cl
+049B  75 F6       jne 493h
+049D  A0 C9 0F    mov al,byte ptr [0fc9h]
+04A0  F6 06 C8 0F 80 test byte ptr [0fc8h],80h
+04A5  75 14       jne 4bbh
+04A7  00 EC       add ah,ch
+04A9  11 F3       adc bx,si
+04AB  11 FA       adc dx,di
+04AD  73 5F       jnb 50eh
+04AF  D1 DA       rcr dx,1h
+04B1  D1 DB       rcr bx,1h
+04B3  D0 DC       rcr ah,1h
+04B5  FE C0       inc al
+04B7  75 55       jne 50eh
+04B9  F9          stc
+04BA  C3          ret
+04BB  86 EC       xchg ah,ch
+04BD  87 F3       xchg bx,si
+04BF  87 FA       xchg dx,di
+04C1  28 EC       sub ah,ch
+04C3  19 F3       sbb bx,si
+04C5  19 FA       sbb dx,di
+04C7  73 14       jnb 4ddh
+04C9  80 36 C6 0F 80 xor byte ptr [0fc6h],80h
+04CE  F6 D4       not ah
+04D0  F7 D3       not bx
+04D2  F7 D2       not dx
+04D4  80 C4 01    add ah,1h
+04D7  83 D3 00    adc bx,0h
+04DA  83 D2 00    adc dx,0h
+04DD  B1 05       mov cl,5h
+04DF  80 FE 00    cmp dh,0h
+04E2  75 14       jne 4f8h
+04E4  88 D6       mov dh,dl
+04E6  88 FA       mov dl,bh
+04E8  88 DF       mov bh,bl
+04EA  88 E3       mov bl,ah
+04EC  30 E4       xor ah,ah
+04EE  2C 08       sub al,8h
+04F0  72 15       jb 507h
+04F2  FE C9       dec cl
+04F4  75 E9       jne 4dfh
+04F6  EB 0F       jmp 507h
+04F8  F6 C6 80    test dh,80h
+04FB  75 11       jne 50eh
+04FD  D0 E4       shl ah,1h
+04FF  D1 D3       rcl bx,1h
+0501  D1 D2       rcl dx,1h
+0503  FE C8       dec al
+0505  75 F1       jne 4f8h
+0507  31 C0       xor ax,ax
+0509  31 DB       xor bx,bx
+050B  31 D2       xor dx,dx
+050D  C3          ret
+050E  80 E6 7F    and dh,7fh
+0511  32 36 C6 0F xor dh,byte ptr [0fc6h]
+0515  C3          ret
+0516  55          push bp
+0517  8B EC       mov bp,sp
+0519  53          push bx
+051A  52          push dx
+051B  56          push si
+051C  57          push di
+051D  FF 76 04    push word ptr [bp+4h]
+0520  8B 76 04    mov si,word ptr [bp+4h]
+0523  8B 04       mov ax,word ptr [si]
+0525  8B 4C 02    mov cx,word ptr [si+2h]
+0528  8B 54 04    mov dx,word ptr [si+4h]
+052B  89 CB       mov bx,cx
+052D  8B FE       mov di,si
+052F  8B 4D 06    mov cx,word ptr [di+6h]
+0532  8B 75 08    mov si,word ptr [di+8h]
+0535  8B 7D 0A    mov di,word ptr [di+0ah]
+0538  E8 11 00    call 54ch
+053B  5F          pop di
+053C  89 05       mov word ptr [di],ax
+053E  89 5D 02    mov word ptr [di+2h],bx
+0541  89 55 04    mov word ptr [di+4h],dx
+0544  5F          pop di
+0545  5E          pop si
+0546  5A          pop dx
+0547  5B          pop bx
+0548  89 EC       mov sp,bp
+054A  5D          pop bp
+054B  C3          ret
+054C  80 F9 00    cmp cl,0h
+054F  75 03       jne 554h
+0551  E9 A4 00    jmp 5f8h
+0554  3C 00       cmp al,0h
+0556  75 03       jne 55bh
+0558  E9 A3 00    jmp 5feh
+055B  00 C8       add al,cl
+055D  72 07       jb 566h
+055F  04 80       add al,80h
+0561  72 0D       jb 570h
+0563  E9 92 00    jmp 5f8h
+0566  04 80       add al,80h
+0568  73 06       jnb 570h
+056A  B0 01       mov al,1h
+056C  B4 4C       mov ah,4ch
+056E  CD 21       int 21h
+0570  89 0E D0 0F mov word ptr [0fd0h],cx
+0574  8B CA       mov cx,dx
+0576  31 F9       xor cx,di
+0578  F6 D5       not ch
+057A  80 E5 80    and ch,80h
+057D  88 2E C6 0F mov byte ptr [0fc6h],ch
+0581  80 CE 80    or dh,80h
+0584  81 CF 00 80 or di,8000h
+0588  89 36 D2 0F mov word ptr [0fd2h],si
+058C  89 3E D4 0F mov word ptr [0fd4h],di
+0590  A3 CA 0F    mov word ptr [0fcah],ax
+0593  89 1E CC 0F mov word ptr [0fcch],bx
+0597  89 16 CE 0F mov word ptr [0fceh],dx
+059B  30 E4       xor ah,ah
+059D  31 DB       xor bx,bx
+059F  31 D2       xor dx,dx
+05A1  BF D0 0F    mov di,0fd0h
+05A4  B1 05       mov cl,5h
+05A6  47          inc di
+05A7  8A 2D       mov ch,byte ptr [di]
+05A9  80 FD 00    cmp ch,0h
+05AC  75 0C       jne 5bah
+05AE  88 DC       mov ah,bl
+05B0  88 FB       mov bl,bh
+05B2  88 D7       mov bh,dl
+05B4  88 F2       mov dl,dh
+05B6  30 F6       xor dh,dh
+05B8  EB 1C       jmp 5d6h
+05BA  BE 08 00    mov si,8h
+05BD  D0 DD       rcr ch,1h
+05BF  73 0C       jnb 5cdh
+05C1  02 26 CB 0F add ah,byte ptr [0fcbh]
+05C5  13 1E CC 0F adc bx,word ptr [0fcch]
+05C9  13 16 CE 0F adc dx,word ptr [0fceh]
+05CD  D1 DA       rcr dx,1h
+05CF  D1 DB       rcr bx,1h
+05D1  D0 DC       rcr ah,1h
+05D3  4E          dec si
+05D4  75 E7       jne 5bdh
+05D6  FE C9       dec cl
+05D8  75 CC       jne 5a6h
+05DA  91          xchg ax,cx
+05DB  9F          lahf
+05DC  F6 C6 80    test dh,80h
+05DF  75 0E       jne 5efh
+05E1  9E          sahf
+05E2  D0 D5       rcl ch,1h
+05E4  D1 D3       rcl bx,1h
+05E6  D1 D2       rcl dx,1h
+05E8  80 F9 00    cmp cl,0h
+05EB  74 02       je 5efh
+05ED  FE C9       dec cl
+05EF  91          xchg ax,cx
+05F0  32 36 C6 0F xor dh,byte ptr [0fc6h]
+05F4  3C 00       cmp al,0h
+05F6  75 06       jne 5feh
+05F8  31 C0       xor ax,ax
+05FA  31 DB       xor bx,bx
+05FC  31 D2       xor dx,dx
+05FE  C3          ret
+05FF  55          push bp
+0600  8B EC       mov bp,sp
+0602  53          push bx
+0603  52          push dx
+0604  56          push si
+0605  57          push di
+0606  FF 76 04    push word ptr [bp+4h]
+0609  8B 76 04    mov si,word ptr [bp+4h]
+060C  8B 04       mov ax,word ptr [si]
+060E  8B 4C 02    mov cx,word ptr [si+2h]
+0611  8B 54 04    mov dx,word ptr [si+4h]
+0614  89 CB       mov bx,cx
+0616  8B FE       mov di,si
+0618  8B 4D 06    mov cx,word ptr [di+6h]
+061B  8B 75 08    mov si,word ptr [di+8h]
+061E  8B 7D 0A    mov di,word ptr [di+0ah]
+0621  E8 11 00    call 635h
+0624  5F          pop di
+0625  89 05       mov word ptr [di],ax
+0627  89 5D 02    mov word ptr [di+2h],bx
+062A  89 55 04    mov word ptr [di+4h],dx
+062D  5F          pop di
+062E  5E          pop si
+062F  5A          pop dx
+0630  5B          pop bx
+0631  89 EC       mov sp,bp
+0633  5D          pop bp
+0634  C3          ret
+0635  3C 00       cmp al,0h
+0637  75 03       jne 63ch
+0639  E9 C2 FF    jmp 5feh
+063C  28 C8       sub al,cl
+063E  F5          cmc
+063F  72 07       jb 648h
+0641  04 80       add al,80h
+0643  72 0D       jb 652h
+0645  E9 B0 FF    jmp 5f8h
+0648  04 80       add al,80h
+064A  73 06       jnb 652h
+064C  B0 01       mov al,1h
+064E  B4 4C       mov ah,4ch
+0650  CD 21       int 21h
+0652  89 0E D0 0F mov word ptr [0fd0h],cx
+0656  8B CA       mov cx,dx
+0658  31 F9       xor cx,di
+065A  F6 D5       not ch
+065C  80 E5 80    and ch,80h
+065F  88 2E C6 0F mov byte ptr [0fc6h],ch
+0663  80 CE 80    or dh,80h
+0666  81 CF 00 80 or di,8000h
+066A  89 36 D2 0F mov word ptr [0fd2h],si
+066E  89 3E D4 0F mov word ptr [0fd4h],di
+0672  A2 CA 0F    mov byte ptr [0fcah],al
+0675  BF CF 0F    mov di,0fcfh
+0678  B1 05       mov cl,5h
+067A  BE 08 00    mov si,8h
+067D  3B 16 D4 0F cmp dx,word ptr [0fd4h]
+0681  75 0A       jne 68dh
+0683  3B 1E D2 0F cmp bx,word ptr [0fd2h]
+0687  75 04       jne 68dh
+0689  3A 26 D1 0F cmp ah,byte ptr [0fd1h]
+068D  72 0C       jb 69bh
+068F  2A 26 D1 0F sub ah,byte ptr [0fd1h]
+0693  1B 1E D2 0F sbb bx,word ptr [0fd2h]
+0697  1B 16 D4 0F sbb dx,word ptr [0fd4h]
+069B  F5          cmc
+069C  D0 D5       rcl ch,1h
+069E  4E          dec si
+069F  75 0A       jne 6abh
+06A1  88 2D       mov byte ptr [di],ch
+06A3  FE C9       dec cl
+06A5  74 1B       je 6c2h
+06A7  4F          dec di
+06A8  BE 08 00    mov si,8h
+06AB  D0 E4       shl ah,1h
+06AD  D1 D3       rcl bx,1h
+06AF  D1 D2       rcl dx,1h
+06B1  73 CA       jnb 67dh
+06B3  2A 26 D1 0F sub ah,byte ptr [0fd1h]
+06B7  1B 1E D2 0F sbb bx,word ptr [0fd2h]
+06BB  1B 16 D4 0F sbb dx,word ptr [0fd4h]
+06BF  F8          clc
+06C0  EB D9       jmp 69bh
+06C2  D0 E4       shl ah,1h
+06C4  D1 D3       rcl bx,1h
+06C6  D1 D2       rcl dx,1h
+06C8  72 11       jb 6dbh
+06CA  3B 16 D4 0F cmp dx,word ptr [0fd4h]
+06CE  75 0A       jne 6dah
+06D0  3B 1E D2 0F cmp bx,word ptr [0fd2h]
+06D4  75 04       jne 6dah
+06D6  3A 26 D1 0F cmp ah,byte ptr [0fd1h]
+06DA  F5          cmc
+06DB  8B 0E CA 0F mov cx,word ptr [0fcah]
+06DF  8B 1E CC 0F mov bx,word ptr [0fcch]
+06E3  8B 16 CE 0F mov dx,word ptr [0fceh]
+06E7  9F          lahf
+06E8  F6 C6 80    test dh,80h
+06EB  75 09       jne 6f6h
+06ED  9E          sahf
+06EE  D0 D5       rcl ch,1h
+06F0  D1 D3       rcl bx,1h
+06F2  D1 D2       rcl dx,1h
+06F4  EB 0A       jmp 700h
+06F6  FE C1       inc cl
+06F8  75 06       jne 700h
+06FA  B0 01       mov al,1h
+06FC  B4 4C       mov ah,4ch
+06FE  CD 21       int 21h
+0700  E9 EC FE    jmp 5efh
+0703  55          push bp
+0704  8B EC       mov bp,sp
+0706  53          push bx
+0707  52          push dx
+0708  56          push si
+0709  57          push di
+070A  8B 76 04    mov si,word ptr [bp+4h]
+070D  8B 04       mov ax,word ptr [si]
+070F  8B 4C 02    mov cx,word ptr [si+2h]
+0712  8B 54 04    mov dx,word ptr [si+4h]
+0715  89 CB       mov bx,cx
+0717  8B FE       mov di,si
+0719  8B 4D 06    mov cx,word ptr [di+6h]
+071C  8B 75 08    mov si,word ptr [di+8h]
+071F  8B 7D 0A    mov di,word ptr [di+0ah]
+0722  52          push dx
+0723  31 FA       xor dx,di
+0725  5A          pop dx
+0726  79 06       jns 72eh
+0728  52          push dx
+0729  D1 D2       rcl dx,1h
+072B  5A          pop dx
+072C  EB 10       jmp 73eh
+072E  F6 C6 80    test dh,80h
+0731  74 08       je 73bh
+0733  E8 20 00    call 756h
+0736  74 06       je 73eh
+0738  F5          cmc
+0739  EB 03       jmp 73eh
+073B  E8 18 00    call 756h
+073E  B0 00       mov al,0h
+0740  B4 00       mov ah,0h
+0742  72 06       jb 74ah
+0744  74 08       je 74eh
+0746  B0 01       mov al,1h
+0748  EB 04       jmp 74eh
+074A  B0 FF       mov al,0ffh
+074C  B4 FF       mov ah,0ffh
+074E  5F          pop di
+074F  5E          pop si
+0750  5A          pop dx
+0751  5B          pop bx
+0752  89 EC       mov sp,bp
+0754  5D          pop bp
+0755  C3          ret
+0756  38 C8       cmp al,cl
+0758  75 0E       jne 768h
+075A  3C 00       cmp al,0h
+075C  74 0A       je 768h
+075E  39 FA       cmp dx,di
+0760  75 06       jne 768h
+0762  39 F3       cmp bx,si
+0764  75 02       jne 768h
+0766  38 EC       cmp ah,ch
+0768  C3          ret
+0769  55          push bp
+076A  8B EC       mov bp,sp
+076C  53          push bx
+076D  52          push dx
+076E  56          push si
+076F  57          push di
+0770  FF 76 04    push word ptr [bp+4h]
+0773  8B 76 04    mov si,word ptr [bp+4h]
+0776  8B 04       mov ax,word ptr [si]
+0778  8B 4C 02    mov cx,word ptr [si+2h]
+077B  8B 54 04    mov dx,word ptr [si+4h]
+077E  89 CB       mov bx,cx
+0780  3C A8       cmp al,0a8h
+0782  73 4C       jnb 7d0h
+0784  89 C1       mov cx,ax
+0786  89 DE       mov si,bx
+0788  89 D7       mov di,dx
+078A  30 E4       xor ah,ah
+078C  31 DB       xor bx,bx
+078E  31 D2       xor dx,dx
+0790  80 E9 80    sub cl,80h
+0793  76 4C       jbe 7e1h
+0795  80 F9 10    cmp cl,10h
+0798  72 0C       jb 7a6h
+079A  88 FC       mov ah,bh
+079C  89 D3       mov bx,dx
+079E  BA FF FF    mov dx,0ffffh
+07A1  80 E9 10    sub cl,10h
+07A4  EB EF       jmp 795h
+07A6  80 F9 08    cmp cl,8h
+07A9  72 0F       jb 7bah
+07AB  88 DC       mov ah,bl
+07AD  88 FB       mov bl,bh
+07AF  88 D7       mov bh,dl
+07B1  88 F2       mov dl,dh
+07B3  B6 FF       mov dh,0ffh
+07B5  80 E9 08    sub cl,8h
+07B8  EB EC       jmp 7a6h
+07BA  80 F9 00    cmp cl,0h
+07BD  74 0B       je 7cah
+07BF  F9          stc
+07C0  D1 DA       rcr dx,1h
+07C2  D1 DB       rcr bx,1h
+07C4  D0 DC       rcr ah,1h
+07C6  FE C9       dec cl
+07C8  75 F5       jne 7bfh
+07CA  21 FA       and dx,di
+07CC  21 F3       and bx,si
+07CE  20 EC       and ah,ch
+07D0  5F          pop di
+07D1  89 05       mov word ptr [di],ax
+07D3  89 5D 02    mov word ptr [di+2h],bx
+07D6  89 55 04    mov word ptr [di+4h],dx
+07D9  5F          pop di
+07DA  5E          pop si
+07DB  5A          pop dx
+07DC  5B          pop bx
+07DD  89 EC       mov sp,bp
+07DF  5D          pop bp
+07E0  C3          ret
+07E1  B0 00       mov al,0h
+07E3  EB EB       jmp 7d0h
+07E5  55          push bp
+07E6  8B EC       mov bp,sp
+07E8  53          push bx
+07E9  52          push dx
+07EA  56          push si
+07EB  57          push di
+07EC  8B 7E 04    mov di,word ptr [bp+4h]
+07EF  88 EA       mov dl,ch
+07F1  B5 00       mov ch,0h
+07F3  B6 00       mov dh,0h
+07F5  51          push cx
+07F6  BB 20 10    mov bx,1020h
+07F9  E8 41 02    call 0a3dh
+07FC  59          pop cx
+07FD  89 D8       mov ax,bx
+07FF  BB 20 10    mov bx,1020h
+0802  2B C3       sub ax,bx
+0804  A3 60 10    mov word ptr [1060h],ax
+0807  89 0E 62 10 mov word ptr [1062h],cx
+080B  8B 06 62 10 mov ax,word ptr [1062h]
+080F  8B 16 60 10 mov dx,word ptr [1060h]
+0813  2B C2       sub ax,dx
+0815  83 F8 00    cmp ax,0h
+0818  7D 02       jnl 81ch
+081A  31 C0       xor ax,ax
+081C  A3 64 10    mov word ptr [1064h],ax
+081F  8B 16 60 10 mov dx,word ptr [1060h]
+0823  03 C2       add ax,dx
+0825  3D FF 00    cmp ax,0ffh
+0828  77 03       jnbe 82dh
+082A  E9 03 00    jmp 830h
+082D  B8 FF 00    mov ax,0ffh
+0830  A3 66 10    mov word ptr [1066h],ax
+0833  8B 56 06    mov dx,word ptr [bp+6h]
+0836  89 D7       mov di,dx
+0838  88 05       mov byte ptr [di],al
+083A  47          inc di
+083B  8B 0E 64 10 mov cx,word ptr [1064h]
+083F  E3 07       jcxz 848h
+0841  B0 20       mov al,20h
+0843  88 05       mov byte ptr [di],al
+0845  47          inc di
+0846  E2 F9       loop 841h
+0848  BE 20 10    mov si,1020h
+084B  8B 0E 60 10 mov cx,word ptr [1060h]
+084F  E3 08       jcxz 859h
+0851  8A 04       mov al,byte ptr [si]
+0853  88 05       mov byte ptr [di],al
+0855  46          inc si
+0856  47          inc di
+0857  E2 F8       loop 851h
+0859  8B 06 66 10 mov ax,word ptr [1066h]
+085D  5F          pop di
+085E  5E          pop si
+085F  5A          pop dx
+0860  5B          pop bx
+0861  89 EC       mov sp,bp
+0863  5D          pop bp
+0864  C3          ret
+0865  55          push bp
+0866  8B EC       mov bp,sp
+0868  53          push bx
+0869  52          push dx
+086A  56          push si
+086B  57          push di
+086C  8B 5E 04    mov bx,word ptr [bp+4h]
+086F  8B 7E 06    mov di,word ptr [bp+6h]
+0872  89 1E 68 10 mov word ptr [1068h],bx
+0876  E8 CF 02    call 0b48h
+0879  73 03       jnb 87eh
+087B  E9 0B 00    jmp 889h
+087E  89 D8       mov ax,bx
+0880  8B 16 68 10 mov dx,word ptr [1068h]
+0884  2B C2       sub ax,dx
+0886  E9 03 00    jmp 88ch
+0889  B8 FF FF    mov ax,0ffffh
+088C  5F          pop di
+088D  5E          pop si
+088E  5A          pop dx
+088F  5B          pop bx
+0890  89 EC       mov sp,bp
+0892  5D          pop bp
+0893  C3          ret
+0894  3C 00       cmp al,0h
+0896  74 03       je 89bh
+0898  E9 01 00    jmp 89ch
+089B  C3          ret
+089C  80 CE 80    or dh,80h
+089F  51          push cx
+08A0  52          push dx
+08A1  53          push bx
+08A2  50          push ax
+08A3  D1 EA       shr dx,1h
+08A5  D1 DB       rcr bx,1h
+08A7  D0 DC       rcr ah,1h
+08A9  D1 EA       shr dx,1h
+08AB  D1 DB       rcr bx,1h
+08AD  D0 DC       rcr ah,1h
+08AF  59          pop cx
+08B0  00 EC       add ah,ch
+08B2  59          pop cx
+08B3  13 D9       adc bx,cx
+08B5  59          pop cx
+08B6  13 D1       adc dx,cx
+08B8  59          pop cx
+08B9  72 03       jb 8beh
+08BB  E9 0F 00    jmp 8cdh
+08BE  D1 DA       rcr dx,1h
+08C0  D1 DB       rcr bx,1h
+08C2  D0 DC       rcr ah,1h
+08C4  FE C0       inc al
+08C6  74 03       je 8cbh
+08C8  E9 02 00    jmp 8cdh
+08CB  F9          stc
+08CC  C3          ret
+08CD  80 E6 7F    and dh,7fh
+08D0  04 03       add al,3h
+08D2  C3          ret
+08D3  52          push dx
+08D4  53          push bx
+08D5  50          push ax
+08D6  88 0E E2 0F mov byte ptr [0fe2h],cl
+08DA  80 F9 00    cmp cl,0h
+08DD  78 03       js 8e2h
+08DF  E9 02 00    jmp 8e4h
+08E2  F6 D9       neg cl
+08E4  88 CB       mov bl,cl
+08E6  80 E3 FC    and bl,0fch
+08E9  88 DF       mov bh,bl
+08EB  D0 EB       shr bl,1h
+08ED  00 FB       add bl,bh
+08EF  30 FF       xor bh,bh
+08F1  8D BF E4 0F lea di,[bx+0fe4h]
+08F5  8B 05       mov ax,word ptr [di]
+08F7  8B 5D 02    mov bx,word ptr [di+2h]
+08FA  8B 55 04    mov dx,word ptr [di+4h]
+08FD  80 E1 03    and cl,3h
+0900  75 03       jne 905h
+0902  E9 0A 00    jmp 90fh
+0905  E8 8C FF    call 894h
+0908  FE C9       dec cl
+090A  74 03       je 90fh
+090C  E9 F6 FF    jmp 905h
+090F  89 C1       mov cx,ax
+0911  89 DE       mov si,bx
+0913  89 D7       mov di,dx
+0915  58          pop ax
+0916  5B          pop bx
+0917  5A          pop dx
+0918  F6 06 E2 0F 80 test byte ptr [0fe2h],80h
+091D  74 03       je 922h
+091F  E9 03 00    jmp 925h
+0922  E9 27 FC    jmp 54ch
+0925  E9 0D FD    jmp 635h
+0928  80 F9 DA    cmp cl,0dah
+092B  7D 03       jnl 930h
+092D  E9 12 00    jmp 942h
+0930  80 F9 26    cmp cl,26h
+0933  7E 03       jle 938h
+0935  E9 0A 00    jmp 942h
+0938  51          push cx
+0939  56          push si
+093A  57          push di
+093B  E8 95 FF    call 8d3h
+093E  5F          pop di
+093F  5E          pop si
+0940  59          pop cx
+0941  C3          ret
+0942  F9          stc
+0943  C3          ret
+0944  8B 05       mov ax,word ptr [di]
+0946  8B 5D 02    mov bx,word ptr [di+2h]
+0949  8B 55 04    mov dx,word ptr [di+4h]
+094C  3C 00       cmp al,0h
+094E  74 03       je 953h
+0950  E9 16 00    jmp 969h
+0953  BE D6 0F    mov si,0fd6h
+0956  C7 04 30 30 mov word ptr [si],3030h
+095A  46          inc si
+095B  46          inc si
+095C  81 FE E2 0F cmp si,0fe2h
+0960  74 03       je 965h
+0962  E9 F1 FF    jmp 956h
+0965  B9 00 00    mov cx,0h
+0968  C3          ret
+0969  88 F5       mov ch,dh
+096B  80 E6 7F    and dh,7fh
+096E  50          push ax
+096F  52          push dx
+0970  2C 80       sub al,80h
+0972  98          cbw
+0973  BA 4D 00    mov dx,4dh
+0976  F7 EA       imul dx
+0978  05 05 00    add ax,5h
+097B  88 E1       mov cl,ah
+097D  5A          pop dx
+097E  58          pop ax
+097F  80 F9 D9    cmp cl,0d9h
+0982  74 03       je 987h
+0984  E9 02 00    jmp 989h
+0987  FE C1       inc cl
+0989  51          push cx
+098A  F6 D9       neg cl
+098C  E8 44 FF    call 8d3h
+098F  59          pop cx
+0990  3C 81       cmp al,81h
+0992  72 03       jb 997h
+0994  E9 05 00    jmp 99ch
+0997  E8 FA FE    call 894h
+099A  FE C9       dec cl
+099C  51          push cx
+099D  80 CE 80    or dh,80h
+09A0  B1 84       mov cl,84h
+09A2  28 C1       sub cl,al
+09A4  B0 00       mov al,0h
+09A6  80 F9 00    cmp cl,0h
+09A9  75 03       jne 9aeh
+09AB  E9 0D 00    jmp 9bbh
+09AE  D1 EA       shr dx,1h
+09B0  D1 DB       rcr bx,1h
+09B2  D0 DC       rcr ah,1h
+09B4  FE C9       dec cl
+09B6  74 03       je 9bbh
+09B8  E9 F3 FF    jmp 9aeh
+09BB  BE D6 0F    mov si,0fd6h
+09BE  88 F5       mov ch,dh
+09C0  B1 04       mov cl,4h
+09C2  D2 ED       shr ch,cl
+09C4  80 C5 30    add ch,30h
+09C7  88 2C       mov byte ptr [si],ch
+09C9  80 E6 0F    and dh,0fh
+09CC  52          push dx
+09CD  53          push bx
+09CE  50          push ax
+09CF  D1 E0       shl ax,1h
+09D1  D1 D3       rcl bx,1h
+09D3  D1 D2       rcl dx,1h
+09D5  D1 E0       shl ax,1h
+09D7  D1 D3       rcl bx,1h
+09D9  D1 D2       rcl dx,1h
+09DB  59          pop cx
+09DC  03 C1       add ax,cx
+09DE  59          pop cx
+09DF  13 D9       adc bx,cx
+09E1  59          pop cx
+09E2  13 D1       adc dx,cx
+09E4  D1 E0       shl ax,1h
+09E6  D1 D3       rcl bx,1h
+09E8  D1 D2       rcl dx,1h
+09EA  46          inc si
+09EB  81 FE E2 0F cmp si,0fe2h
+09EF  74 03       je 9f4h
+09F1  E9 CA FF    jmp 9beh
+09F4  59          pop cx
+09F5  C3          ret
+09F6  30 E4       xor ah,ah
+09F8  BB D6 0F    mov bx,0fd6h
+09FB  03 D8       add bx,ax
+09FD  80 3F 35    cmp byte ptr [bx],35h
+0A00  C6 07 00    mov byte ptr [bx],0h
+0A03  73 03       jnb 0a08h
+0A05  E9 21 00    jmp 0a29h
+0A08  FE C8       dec al
+0A0A  79 03       jns 0a0fh
+0A0C  E9 11 00    jmp 0a20h
+0A0F  4B          dec bx
+0A10  FE 07       inc byte ptr [bx]
+0A12  80 3F 3A    cmp byte ptr [bx],3ah
+0A15  73 03       jnb 0a1ah
+0A17  E9 0F 00    jmp 0a29h
+0A1A  C6 07 00    mov byte ptr [bx],0h
+0A1D  E9 E8 FF    jmp 0a08h
+0A20  C6 07 31    mov byte ptr [bx],31h
+0A23  C6 47 01 00 mov byte ptr [bx+1h],0h
+0A27  FE C1       inc cl
+0A29  C3          ret
+0A2A  8A 04       mov al,byte ptr [si]
+0A2C  3C 00       cmp al,0h
+0A2E  75 03       jne 0a33h
+0A30  E9 04 00    jmp 0a37h
+0A33  46          inc si
+0A34  E9 02 00    jmp 0a39h
+0A37  B0 30       mov al,30h
+0A39  88 07       mov byte ptr [bx],al
+0A3B  43          inc bx
+0A3C  C3          ret
+0A3D  53          push bx
+0A3E  81 FA 19 00 cmp dx,19h
+0A42  73 03       jnb 0a47h
+0A44  E9 3F 00    jmp 0a86h
+0A47  89 C8       mov ax,cx
+0A49  80 FD 00    cmp ch,0h
+0A4C  75 03       jne 0a51h
+0A4E  E9 10 00    jmp 0a61h
+0A51  F6 C5 80    test ch,80h
+0A54  75 03       jne 0a59h
+0A56  E9 05 00    jmp 0a5eh
+0A59  31 C0       xor ax,ax
+0A5B  E9 03 00    jmp 0a61h
+0A5E  B8 FF 00    mov ax,0ffh
+0A61  B2 07       mov dl,7h
+0A63  F6 45 05 80 test byte ptr [di+5h],80h
+0A67  75 03       jne 0a6ch
+0A69  E9 02 00    jmp 0a6eh
+0A6C  FE C2       inc dl
+0A6E  2A C2       sub al,dl
+0A70  72 03       jb 0a75h
+0A72  E9 02 00    jmp 0a77h
+0A75  B0 00       mov al,0h
+0A77  3C 09       cmp al,9h
+0A79  73 03       jnb 0a7eh
+0A7B  E9 02 00    jmp 0a80h
+0A7E  B0 09       mov al,9h
+0A80  FE C0       inc al
+0A82  88 C2       mov dl,al
+0A84  88 C6       mov dh,al
+0A86  52          push dx
+0A87  E8 BA FE    call 944h
+0A8A  5A          pop dx
+0A8B  8A C2       mov al,dl
+0A8D  FE C0       inc al
+0A8F  80 FE 00    cmp dh,0h
+0A92  74 03       je 0a97h
+0A94  E9 18 00    jmp 0aafh
+0A97  00 C8       add al,cl
+0A99  78 03       js 0a9eh
+0A9B  E9 08 00    jmp 0aa6h
+0A9E  C6 06 D6 0F 00 mov byte ptr [0fd6h],0h
+0AA3  E9 0C 00    jmp 0ab2h
+0AA6  3C 0C       cmp al,0ch
+0AA8  73 03       jnb 0aadh
+0AAA  E9 02 00    jmp 0aafh
+0AAD  B0 0B       mov al,0bh
+0AAF  E8 44 FF    call 9f6h
+0AB2  5B          pop bx
+0AB3  BE D6 0F    mov si,0fd6h
+0AB6  F6 C5 80    test ch,80h
+0AB9  75 03       jne 0abeh
+0ABB  E9 05 00    jmp 0ac3h
+0ABE  B0 2D       mov al,2dh
+0AC0  E8 76 FF    call 0a39h
+0AC3  88 CD       mov ch,cl
+0AC5  80 FE 00    cmp dh,0h
+0AC8  75 03       jne 0acdh
+0ACA  E9 02 00    jmp 0acfh
+0ACD  B5 00       mov ch,0h
+0ACF  80 FD 00    cmp ch,0h
+0AD2  78 03       js 0ad7h
+0AD4  E9 06 00    jmp 0addh
+0AD7  E8 5D FF    call 0a37h
+0ADA  E9 0A 00    jmp 0ae7h
+0ADD  E8 4A FF    call 0a2ah
+0AE0  FE CD       dec ch
+0AE2  78 03       js 0ae7h
+0AE4  E9 F6 FF    jmp 0addh
+0AE7  80 FA 00    cmp dl,0h
+0AEA  75 03       jne 0aefh
+0AEC  E9 23 00    jmp 0b12h
+0AEF  B0 2E       mov al,2eh
+0AF1  E8 45 FF    call 0a39h
+0AF4  FE C5       inc ch
+0AF6  75 03       jne 0afbh
+0AF8  E9 0A 00    jmp 0b05h
+0AFB  E8 39 FF    call 0a37h
+0AFE  FE CA       dec dl
+0B00  74 03       je 0b05h
+0B02  E9 EF FF    jmp 0af4h
+0B05  FE CA       dec dl
+0B07  79 03       jns 0b0ch
+0B09  E9 06 00    jmp 0b12h
+0B0C  E8 1B FF    call 0a2ah
+0B0F  E9 F3 FF    jmp 0b05h
+0B12  80 FE 00    cmp dh,0h
+0B15  74 03       je 0b1ah
+0B17  E9 01 00    jmp 0b1bh
+0B1A  C3          ret
+0B1B  B0 45       mov al,45h
+0B1D  E8 19 FF    call 0a39h
+0B20  B0 2B       mov al,2bh
+0B22  80 F9 00    cmp cl,0h
+0B25  78 03       js 0b2ah
+0B27  E9 04 00    jmp 0b2eh
+0B2A  F6 D9       neg cl
+0B2C  B0 2D       mov al,2dh
+0B2E  E8 08 FF    call 0a39h
+0B31  B0 2F       mov al,2fh
+0B33  FE C0       inc al
+0B35  80 E9 0A    sub cl,0ah
+0B38  72 03       jb 0b3dh
+0B3A  E9 F6 FF    jmp 0b33h
+0B3D  E8 F9 FE    call 0a39h
+0B40  80 C1 3A    add cl,3ah
+0B43  88 C8       mov al,cl
+0B45  E9 F1 FE    jmp 0a39h
+0B48  8A 0F       mov cl,byte ptr [bx]
+0B4A  80 F9 2D    cmp cl,2dh
+0B4D  74 03       je 0b52h
+0B4F  E9 01 00    jmp 0b53h
+0B52  43          inc bx
+0B53  51          push cx
+0B54  E8 1F 00    call 0b76h
+0B57  59          pop cx
+0B58  73 03       jnb 0b5dh
+0B5A  E9 17 00    jmp 0b74h
+0B5D  80 F9 2D    cmp cl,2dh
+0B60  74 03       je 0b65h
+0B62  E9 0D 00    jmp 0b72h
+0B65  8A 05       mov al,byte ptr [di]
+0B67  3C 00       cmp al,0h
+0B69  75 03       jne 0b6eh
+0B6B  E9 04 00    jmp 0b72h
+0B6E  80 75 05 80 xor byte ptr [di+5h],80h
+0B72  F8          clc
+0B73  C3          ret
+0B74  F9          stc
+0B75  C3          ret
+0B76  89 DE       mov si,bx
+0B78  31 C0       xor ax,ax
+0B7A  31 DB       xor bx,bx
+0B7C  31 D2       xor dx,dx
+0B7E  31 C9       xor cx,cx
+0B80  C6 06 E3 0F 00 mov byte ptr [0fe3h],0h
+0B85  8A 0C       mov cl,byte ptr [si]
+0B87  80 F9 61    cmp cl,61h
+0B8A  73 03       jnb 0b8fh
+0B8C  E9 08 00    jmp 0b97h
+0B8F  80 F9 7A    cmp cl,7ah
+0B92  77 03       jnbe 0b97h
+0B94  80 E9 20    sub cl,20h
+0B97  E8 C8 00    call 0c62h
+0B9A  73 03       jnb 0b9fh
+0B9C  E9 3A 00    jmp 0bd9h
+0B9F  E8 F2 FC    call 894h
+0BA2  73 03       jnb 0ba7h
+0BA4  E9 B5 00    jmp 0c5ch
+0BA7  57          push di
+0BA8  56          push si
+0BA9  51          push cx
+0BAA  52          push dx
+0BAB  53          push bx
+0BAC  50          push ax
+0BAD  88 C8       mov al,cl
+0BAF  30 E4       xor ah,ah
+0BB1  E8 C2 F7    call 376h
+0BB4  89 C1       mov cx,ax
+0BB6  89 DE       mov si,bx
+0BB8  89 D7       mov di,dx
+0BBA  58          pop ax
+0BBB  5B          pop bx
+0BBC  5A          pop dx
+0BBD  C7 06 C5 0F 00 00 mov word ptr [0fc5h],0h
+0BC3  E8 60 F8    call 426h
+0BC6  59          pop cx
+0BC7  5E          pop si
+0BC8  5F          pop di
+0BC9  F6 C5 40    test ch,40h
+0BCC  75 03       jne 0bd1h
+0BCE  E9 04 00    jmp 0bd5h
+0BD1  FE 0E E3 0F dec byte ptr [0fe3h]
+0BD5  46          inc si
+0BD6  E9 AC FF    jmp 0b85h
+0BD9  80 F9 2E    cmp cl,2eh
+0BDC  74 03       je 0be1h
+0BDE  E9 0E 00    jmp 0befh
+0BE1  F6 C5 40    test ch,40h
+0BE4  74 03       je 0be9h
+0BE6  E9 73 00    jmp 0c5ch
+0BE9  80 CD 40    or ch,40h
+0BEC  E9 E6 FF    jmp 0bd5h
+0BEF  80 F9 45    cmp cl,45h
+0BF2  8A 0E E3 0F mov cl,byte ptr [0fe3h]
+0BF6  74 03       je 0bfbh
+0BF8  E9 4D 00    jmp 0c48h
+0BFB  E8 2A FD    call 928h
+0BFE  73 03       jnb 0c03h
+0C00  E9 59 00    jmp 0c5ch
+0C03  46          inc si
+0C04  8A 0C       mov cl,byte ptr [si]
+0C06  80 F9 2B    cmp cl,2bh
+0C09  75 03       jne 0c0eh
+0C0B  E9 0B 00    jmp 0c19h
+0C0E  80 F9 2D    cmp cl,2dh
+0C11  74 03       je 0c16h
+0C13  E9 04 00    jmp 0c1ah
+0C16  80 CD 20    or ch,20h
+0C19  46          inc si
+0C1A  E8 43 00    call 0c60h
+0C1D  73 03       jnb 0c22h
+0C1F  E9 3A 00    jmp 0c5ch
+0C22  50          push ax
+0C23  88 C8       mov al,cl
+0C25  46          inc si
+0C26  E8 37 00    call 0c60h
+0C29  73 03       jnb 0c2eh
+0C2B  E9 0D 00    jmp 0c3bh
+0C2E  88 C4       mov ah,al
+0C30  D0 E0       shl al,1h
+0C32  D0 E0       shl al,1h
+0C34  00 E0       add al,ah
+0C36  D0 E0       shl al,1h
+0C38  00 C8       add al,cl
+0C3A  46          inc si
+0C3B  88 C1       mov cl,al
+0C3D  58          pop ax
+0C3E  F6 C5 20    test ch,20h
+0C41  75 03       jne 0c46h
+0C43  E9 02 00    jmp 0c48h
+0C46  F6 D9       neg cl
+0C48  E8 DD FC    call 928h
+0C4B  73 03       jnb 0c50h
+0C4D  E9 0C 00    jmp 0c5ch
+0C50  89 05       mov word ptr [di],ax
+0C52  89 5D 02    mov word ptr [di+2h],bx
+0C55  89 55 04    mov word ptr [di+4h],dx
+0C58  F8          clc
+0C59  E9 01 00    jmp 0c5dh
+0C5C  F9          stc
+0C5D  89 F3       mov bx,si
+0C5F  C3          ret
+0C60  8A 0C       mov cl,byte ptr [si]
+0C62  80 F9 30    cmp cl,30h
+0C65  73 03       jnb 0c6ah
+0C67  E9 0C 00    jmp 0c76h
+0C6A  80 F9 3A    cmp cl,3ah
+0C6D  F5          cmc
+0C6E  73 03       jnb 0c73h
+0C70  E9 03 00    jmp 0c76h
+0C73  80 E9 30    sub cl,30h
+0C76  C3          ret
+0C77  55          push bp
+0C78  8B EC       mov bp,sp
+0C7A  53          push bx
+0C7B  52          push dx
+0C7C  56          push si
+0C7D  57          push di
+0C7E  8B 46 06    mov ax,word ptr [bp+6h]
+0C81  A3 62 10    mov word ptr [1062h],ax
+0C84  8B 56 04    mov dx,word ptr [bp+4h]
+0C87  8B 4E 06    mov cx,word ptr [bp+6h]
+0C8A  8B 7E 08    mov di,word ptr [bp+8h]
+0C8D  BB 20 10    mov bx,1020h
+0C90  E8 AA FD    call 0a3dh
+0C93  89 D8       mov ax,bx
+0C95  BB 20 10    mov bx,1020h
+0C98  2B C3       sub ax,bx
+0C9A  A3 60 10    mov word ptr [1060h],ax
+0C9D  8B 06 62 10 mov ax,word ptr [1062h]
+0CA1  8B 16 60 10 mov dx,word ptr [1060h]
+0CA5  2B C2       sub ax,dx
+0CA7  83 F8 00    cmp ax,0h
+0CAA  7D 02       jnl 0caeh
+0CAC  31 C0       xor ax,ax
+0CAE  A3 64 10    mov word ptr [1064h],ax
+0CB1  8B 0E 64 10 mov cx,word ptr [1064h]
+0CB5  E3 08       jcxz 0cbfh
+0CB7  B0 20       mov al,20h
+0CB9  B4 02       mov ah,2h
+0CBB  CD 21       int 21h
+0CBD  E2 F8       loop 0cb7h
+0CBF  BE 20 10    mov si,1020h
+0CC2  8B 0E 60 10 mov cx,word ptr [1060h]
+0CC6  E3 09       jcxz 0cd1h
+0CC8  8A 04       mov al,byte ptr [si]
+0CCA  B4 02       mov ah,2h
+0CCC  CD 21       int 21h
+0CCE  46          inc si
+0CCF  E2 F7       loop 0cc8h
+0CD1  5F          pop di
+0CD2  5E          pop si
+0CD3  5A          pop dx
+0CD4  5B          pop bx
+0CD5  89 EC       mov sp,bp
+0CD7  5D          pop bp
+0CD8  C3          ret
+0CD9  55          push bp
+0CDA  8B EC       mov bp,sp
+0CDC  53          push bx
+0CDD  51          push cx
+0CDE  52          push dx
+0CDF  56          push si
+0CE0  57          push di
+0CE1  8B 46 04    mov ax,word ptr [bp+4h]
+0CE4  88 C6       mov dh,al
+0CE6  8B 76 0A    mov si,word ptr [bp+0ah]
+0CE9  8B 7E 08    mov di,word ptr [bp+8h]
+0CEC  8B 5E 06    mov bx,word ptr [bp+6h]
+0CEF  80 FE 00    cmp dh,0h
+0CF2  74 23       je 0d17h
+0CF4  8A 04       mov al,byte ptr [si]
+0CF6  8A 15       mov dl,byte ptr [di]
+0CF8  80 FC 00    cmp ah,0h
+0CFB  74 0B       je 0d08h
+0CFD  80 FC 01    cmp ah,1h
+0D00  74 0A       je 0d0ch
+0D02  F6 D2       not dl
+0D04  20 D0       and al,dl
+0D06  EB 06       jmp 0d0eh
+0D08  20 D0       and al,dl
+0D0A  EB 02       jmp 0d0eh
+0D0C  08 D0       or al,dl
+0D0E  88 07       mov byte ptr [bx],al
+0D10  46          inc si
+0D11  47          inc di
+0D12  43          inc bx
+0D13  FE CE       dec dh
+0D15  75 DD       jne 0cf4h
+0D17  5F          pop di
+0D18  5E          pop si
+0D19  5A          pop dx
+0D1A  59          pop cx
+0D1B  5B          pop bx
+0D1C  89 EC       mov sp,bp
+0D1E  5D          pop bp
+0D1F  C3          ret
+0D20  55          push bp
+0D21  8B EC       mov bp,sp
+0D23  53          push bx
+0D24  51          push cx
+0D25  52          push dx
+0D26  56          push si
+0D27  57          push di
+0D28  8B 4E 04    mov cx,word ptr [bp+4h]
+0D2B  8B 76 08    mov si,word ptr [bp+8h]
+0D2E  8B 7E 06    mov di,word ptr [bp+6h]
+0D31  B4 07       mov ah,7h
+0D33  E3 2B       jcxz 0d60h
+0D35  8A 04       mov al,byte ptr [si]
+0D37  8A 15       mov dl,byte ptr [di]
+0D39  88 C3       mov bl,al
+0D3B  88 D6       mov dh,dl
+0D3D  3A C2       cmp al,dl
+0D3F  74 03       je 0d44h
+0D41  80 E4 FE    and ah,0feh
+0D44  F6 D2       not dl
+0D46  20 D0       and al,dl
+0D48  3C 00       cmp al,0h
+0D4A  74 03       je 0d4fh
+0D4C  80 E4 FD    and ah,0fdh
+0D4F  8A C3       mov al,bl
+0D51  F6 D0       not al
+0D53  20 F0       and al,dh
+0D55  3C 00       cmp al,0h
+0D57  74 03       je 0d5ch
+0D59  80 E4 FB    and ah,0fbh
+0D5C  46          inc si
+0D5D  47          inc di
+0D5E  E2 D5       loop 0d35h
+0D60  F6 C4 01    test ah,1h
+0D63  74 03       je 0d68h
+0D65  80 E4 F9    and ah,0f9h
+0D68  88 E0       mov al,ah
+0D6A  B4 00       mov ah,0h
+0D6C  5F          pop di
+0D6D  5E          pop si
+0D6E  5A          pop dx
+0D6F  59          pop cx
+0D70  5B          pop bx
+0D71  89 EC       mov sp,bp
+0D73  5D          pop bp
+0D74  C3          ret
+0D75  55          push bp
+0D76  8B EC       mov bp,sp
+0D78  53          push bx
+0D79  51          push cx
+0D7A  56          push si
+0D7B  8B 4E 04    mov cx,word ptr [bp+4h]
+0D7E  8B 76 06    mov si,word ptr [bp+6h]
+0D81  8B 5E 08    mov bx,word ptr [bp+8h]
+0D84  E3 08       jcxz 0d8eh
+0D86  8A 04       mov al,byte ptr [si]
+0D88  88 07       mov byte ptr [bx],al
+0D8A  46          inc si
+0D8B  43          inc bx
+0D8C  E2 F8       loop 0d86h
+0D8E  5E          pop si
+0D8F  59          pop cx
+0D90  5B          pop bx
+0D91  89 EC       mov sp,bp
+0D93  5D          pop bp
+0D94  C3          ret
+0D95  55          push bp
+0D96  8B EC       mov bp,sp
+0D98  53          push bx
+0D99  51          push cx
+0D9A  52          push dx
+0D9B  56          push si
+0D9C  57          push di
+0D9D  8B 7E 04    mov di,word ptr [bp+4h]
+0DA0  B8 FF FF    mov ax,0ffffh
+0DA3  89 05       mov word ptr [di],ax
+0DA5  31 C0       xor ax,ax
+0DA7  89 45 02    mov word ptr [di+2h],ax
+0DAA  8B 76 06    mov si,word ptr [bp+6h]
+0DAD  8A 04       mov al,byte ptr [si]
+0DAF  46          inc si
+0DB0  3C 7F       cmp al,7fh
+0DB2  76 02       jbe 0db6h
+0DB4  B0 7F       mov al,7fh
+0DB6  88 C1       mov cl,al
+0DB8  30 ED       xor ch,ch
+0DBA  83 C7 04    add di,4h
+0DBD  E3 08       jcxz 0dc7h
+0DBF  8A 04       mov al,byte ptr [si]
+0DC1  88 05       mov byte ptr [di],al
+0DC3  46          inc si
+0DC4  47          inc di
+0DC5  E2 F8       loop 0dbfh
+0DC7  C6 05 00    mov byte ptr [di],0h
+0DCA  5F          pop di
+0DCB  5E          pop si
+0DCC  5A          pop dx
+0DCD  59          pop cx
+0DCE  5B          pop bx
+0DCF  89 EC       mov sp,bp
+0DD1  5D          pop bp
+0DD2  C3          ret
+0DD3  55          push bp
+0DD4  8B EC       mov bp,sp
+0DD6  53          push bx
+0DD7  51          push cx
+0DD8  52          push dx
+0DD9  57          push di
+0DDA  8B 7E 04    mov di,word ptr [bp+4h]
+0DDD  8D 55 04    lea dx,[di+4h]
+0DE0  B8 00 3D    mov ax,3d00h
+0DE3  CD 21       int 21h
+0DE5  72 0F       jb 0df6h
+0DE7  89 05       mov word ptr [di],ax
+0DE9  B8 01 00    mov ax,1h
+0DEC  89 45 02    mov word ptr [di+2h],ax
+0DEF  31 C0       xor ax,ax
+0DF1  A3 6A 10    mov word ptr [106ah],ax
+0DF4  EB 10       jmp 0e06h
+0DF6  89 C3       mov bx,ax
+0DF8  B8 FF FF    mov ax,0ffffh
+0DFB  89 05       mov word ptr [di],ax
+0DFD  31 C0       xor ax,ax
+0DFF  89 45 02    mov word ptr [di+2h],ax
+0E02  89 1E 6A 10 mov word ptr [106ah],bx
+0E06  5F          pop di
+0E07  5A          pop dx
+0E08  59          pop cx
+0E09  5B          pop bx
+0E0A  89 EC       mov sp,bp
+0E0C  5D          pop bp
+0E0D  C3          ret
+0E0E  55          push bp
+0E0F  8B EC       mov bp,sp
+0E11  53          push bx
+0E12  51          push cx
+0E13  52          push dx
+0E14  57          push di
+0E15  8B 7E 04    mov di,word ptr [bp+4h]
+0E18  8D 55 04    lea dx,[di+4h]
+0E1B  31 C9       xor cx,cx
+0E1D  B8 00 3C    mov ax,3c00h
+0E20  CD 21       int 21h
+0E22  72 0F       jb 0e33h
+0E24  89 05       mov word ptr [di],ax
+0E26  B8 02 00    mov ax,2h
+0E29  89 45 02    mov word ptr [di+2h],ax
+0E2C  31 C0       xor ax,ax
+0E2E  A3 6A 10    mov word ptr [106ah],ax
+0E31  EB 10       jmp 0e43h
+0E33  89 C3       mov bx,ax
+0E35  B8 FF FF    mov ax,0ffffh
+0E38  89 05       mov word ptr [di],ax
+0E3A  31 C0       xor ax,ax
+0E3C  89 45 02    mov word ptr [di+2h],ax
+0E3F  89 1E 6A 10 mov word ptr [106ah],bx
+0E43  5F          pop di
+0E44  5A          pop dx
+0E45  59          pop cx
+0E46  5B          pop bx
+0E47  89 EC       mov sp,bp
+0E49  5D          pop bp
+0E4A  C3          ret
+0E4B  55          push bp
+0E4C  8B EC       mov bp,sp
+0E4E  53          push bx
+0E4F  52          push dx
+0E50  57          push di
+0E51  8B 7E 04    mov di,word ptr [bp+4h]
+0E54  8B 05       mov ax,word ptr [di]
+0E56  3D FF FF    cmp ax,0ffffh
+0E59  74 16       je 0e71h
+0E5B  89 C3       mov bx,ax
+0E5D  B4 3E       mov ah,3eh
+0E5F  CD 21       int 21h
+0E61  89 C3       mov bx,ax
+0E63  B8 FF FF    mov ax,0ffffh
+0E66  89 05       mov word ptr [di],ax
+0E68  31 C0       xor ax,ax
+0E6A  89 45 02    mov word ptr [di+2h],ax
+0E6D  89 1E 6A 10 mov word ptr [106ah],bx
+0E71  5F          pop di
+0E72  5A          pop dx
+0E73  5B          pop bx
+0E74  89 EC       mov sp,bp
+0E76  5D          pop bp
+0E77  C3          ret
+0E78  8B 06 6A 10 mov ax,word ptr [106ah]
+0E7C  C7 06 6A 10 00 00 mov word ptr [106ah],0h
+0E82  C3          ret
+0E83  A3 6A 10    mov word ptr [106ah],ax
+0E86  C3          ret
+0E87  55          push bp
+0E88  8B EC       mov bp,sp
+0E8A  53          push bx
+0E8B  51          push cx
+0E8C  52          push dx
+0E8D  8B 1E 6C 10 mov bx,word ptr [106ch]
+0E91  8B 56 04    mov dx,word ptr [bp+4h]
+0E94  89 1A       mov word ptr [bp+si],bx
+0E96  8B 4E 06    mov cx,word ptr [bp+6h]
+0E99  89 D8       mov ax,bx
+0E9B  03 C1       add ax,cx
+0E9D  A3 6C 10    mov word ptr [106ch],ax
+0EA0  5A          pop dx
+0EA1  59          pop cx
+0EA2  5B          pop bx
+0EA3  89 EC       mov sp,bp
+0EA5  5D          pop bp
+0EA6  C3          ret