; -----------------------------------------------------------------------------
; $.dosboot
; reverse engineered by Eelco Huininga using phpDisassembler v1.03 (80186)
; DOS Filename   : E:\CD's\Acorn\work in progress\disassembler\$.dosboot
; Acorn filename : $.dosboot
; Load address   : 04000000
; Exec address   : 04000000
; Length         : 000008FF
; -----------------------------------------------------------------------------


; -----------------------------------------------------------------------------
; TUBE ULA addresses
; -----------------------------------------------------------------------------

r1status                                = 80h
r1data                                  = 82h
r2status                                = 84h
r2data                                  = 86h
r3status                                = 88h
r3data                                  = 8Ah
r4status                                = 8Ch
r4data                                  = 8Eh


.start
04000000  8C C8              ..      MOV    AX, CS
04000002  8E D8              ..      MOV    DS, AX                              ; Set source segment to current segment (CS=0400h)
04000004  8E D0              ..      MOV    SS, AX
04000006  BC 52 09           .R.     MOV    SP, 0952h                           ; Set stack to 0400:0952h
04000009  B8 00 38           ..8     MOV    AX, 3800h
0400000C  8E C0              ..      MOV    ES, AX                              ; Destination segment 3800h:DI
0400000E  BE 00 00           ...     MOV    SI, 0000h                           ; Source offset DS:0000h
04000011  BF 00 00           ...     MOV    DI, 0000h                           ; Destination offset ES:0000h
04000014  B9 00 40           ..@     MOV    CX, 4000h                           ; Move 4000h words
04000017  F3                 .       REPZ                                       ; Repeat MOVSW for 4000h times
04000018  A5                 .       MOVSW                                      ; Move word 0400:0000 to 3800:0000 (relocate $.dosboot to 3800:0000h
04000019  2E                 .       CS:
0400001A  FF 2E 1E 00        ....    JMP    FAR [001Eh]                         ; Jump to 3800:001Eh

.
3800001E  22 00              ".      AND    AL, [BX+SI]
38000020  00 38              .8      ADD    [BX+SI], BH
38000022  8C C8              ..      MOV    AX, CS
38000024  8E D8              ..      MOV    DS, AX                              ; Set data segment to code segment (3800h)
38000026  8E C0              ..      MOV    ES, AX                              ; Set extra segment to code segment (3800h)
38000028  8E D0              ..      MOV    SS, AX                              ; Set stack segment to code segment (3800h)
3800002A  BC 52 09           .R.     MOV    SP, 0952h                           ; Set stack to 3800:0952h
3800002D  E8 61 01           .a.     CALL   38000191h                           ; Initialize screen
38000030  BB F1 04           ...     MOV    BX, 04F1h                           ; Read 02 sectors, starting from sector 00010 to 3000:0000h (FAT table)
38000033  E8 C1 01           ...     CALL   380001F7h                           ; OSWORD &72 call (Write to disc controller chip)
38000036  BB 00 05           ...     MOV    BX, 0500h                           ; Read 14 sectors, starting from sector 00012 to 3600:0000h (root directory)
38000039  E8 BB 01           ...     CALL   380001F7h                           ; OSWORD &72 call (Write to disc controller chip)
3800003C  BF 3A 05           .:.     MOV    DI, 053Ah                           ; LOGO.SYS
3800003F  E8 24 01           .$.     CALL   38000166h                           ; Find file and return start cluster in AX
38000042  85 C0              ..      TEST   AX, AX
38000044  74 0C              t.      JE     38000052h                           ; Jump if file not found
38000046  C7 06 52 09 58 11  ..R.X.  MOV    WORD PTR [0952h], 1158h             ; 0952 = stack
3800004C  E8 F9 00           ...     CALL   38000148h                           ; Load 1 sector and move data to [DS]:[0952h]
3800004F  E8 34 03           .4.     CALL   38000386h                           ; Move LOGO.SYS to screen memory
.
38000052  C7 06 56 09 45 05  ..V.E.  MOV    WORD PTR [0956h], 0545h             ; 6502.SYS
38000058  C7 06 52 09 58 09  ..R.X.  MOV    WORD PTR [0952h], 0958h             ; 0952 = stack
3800005E  E8 C9 00           ...     CALL   3800012Ah
38000061  E8 46 03           .F.     CALL   380003AAh                           ; Move 6502.SYS to host memory
38000064  BF 24 05           .$.     MOV    DI, 0524h                           ; CCPM.SYS
38000067  E8 FC 00           ...     CALL   38000166h                           ; Find file and return start cluster in AX
3800006A  85 C0              ..      TEST   AX, AX
3800006C  75 1C              u.      JNE    3800008Ah
3800006E  BF 2F 05           ./.     MOV    DI, 052Fh                           ; CPM3.SYS
38000071  E8 F2 00           ...     CALL   38000166h                           ; Find file and return start cluster in AX
38000074  85 C0              ..      TEST   AX, AX
38000076  75 06              u.      JNE    3800007Eh
38000078  BE 8C 04           ...     MOV    SI, 048Ch                           ; Pointer to 'Can't find system file CPM3.SYS on boot disk'
3800007B  E9 87 01           ...     JMP    38000205h                           ; Write error message and loop indefinetely
.
3800007E  A3 1E 05           ...     MOV    [051Eh], AX                         ; Temporary save start cluster
38000081  BE 76 04           .v.     MOV    SI, 0476h                           ; Pointer to 'Loading DOS PLUS'
38000084  E8 8A 01           ...     CALL   38000211h                           ; Write string
38000087  E9 09 00           ...     JMP    38000093h
.
3800008A  A3 1E 05           ...     MOV    [051Eh], AX                         ; Temporary save start cluster
3800008D  BE 5A 04           .Z.     MOV    SI, 045Ah                           ; Pointer to 'Loading Concurrent DOS'
38000090  E8 7E 01           .~.     CALL   38000211h                           ; Write string
.
38000093  A1 1E 05           ...     MOV    AX, [051Eh]                         ; Restore start cluster in AX
38000096  3D F7 0F           =..     CMP    AX, 0FF7h
38000099  77 3D              w=      JNBE   380000D8h                           ; Jump if cluster is FF8-FFF (Last cluster)
3800009B  C7 06 22 05 00 00  .."...  MOV    WORD PTR [0522h], 0000h
.
380000A1  50                 P       PUSH   AX
380000A2  E8 F9 00           ...     CALL   3800019Eh                           ; Find next cluster in FAT table
380000A5  FF 06 20 05        .. .    INC    WORD PTR [0520h]
380000A9  FF 06 22 05        ..".    INC    WORD PTR [0522h]
380000AD  5B                 [       POP    BX
380000AE  43                 C       INC    BX
380000AF  3B C3              ;.      CMP    AX, BX                              ; Is next cluster current cluster+1?
380000B1  75 07              u.      JNE    380000BAh
380000B3  83 3E 22 05 10     .>"..   CMP    WORD PTR [0522h], 10h
380000B8  75 E7              u.      JNE    380000a1h

380000BA  87 06 1E           ...     XCHG   [051Eh], AX                         ; Temporary storage for start cluster of file
380000BD  05 8B 0E           ...     ADD    AX, 0E8Bh
380000C0  22 05              ".      AND    AL, [DI]
380000C2  E8 F9 00           ...     CALL   380001BEh                           ; Load data (AX=sector, CX=numbers of sectors, [04EBh]=load address (default is 0000:0400)
380000C5  B0 2E              ..      MOV    AL, ASC'.'
380000C7  E8 7C 01           .|.     CALL   38000246h                           ; Write character to output stream
380000CA  8B 0E 22 05        ..".    MOV    CX, [0522h]
.
380000CE  81 06 EB 04 80 00  ......  ADD    WORD PTR [04EBh], 0080h
380000D4  E2 F8              ..      LOOP   380000CEh                           ; Loop 0522h times (CX)
380000D6  EB BB              ..      JMP    38000093h
.
380000D8  E8 5A 01           .Z.     CALL   38000235h                           ; Set screen MODE 3 and define colour 1 as green
380000DB  E8 8F 02           ...     CALL   3800036Dh                           ; Re-program display character &00 with (...)
380000DE  FA                 .       CLI                                        ; Disable maskable interrupts
380000DF  8B 16 20 05        .. .    MOV    DX, [0520h]
380000E3  B8 00 04           ...     MOV    AX, 0400h
380000E6  8E D8              ..      MOV    DS, AX
380000E8  A1 03 00           ...     MOV    AX, [0003h]                         ; EXE header length of file???
380000EB  2E                 .       CS:
380000EC  A3 EF 04           ...     MOV    [04EFh], AX
380000EF  B8 08 04           ...     MOV    AX, 0408h
380000F2  8E D8              ..      MOV    DS, AX
380000F4  2E                 .       CS:
380000F5  A1 EF 04           ...     MOV    AX, [04EFh]
380000F8  8E C0              ..      MOV    ES, AX
.
380000FA  BE 00 00           ...     MOV    SI, 0000h
380000FD  BF 00 00           ...     MOV    DI, 0000h
38000100  B9 00 04           ...     MOV    CX, 0400h
38000103  F3                 .       REPZ
38000104  A5                 .       MOVSW                                      ; Move word 0408:[0000] to ES:[0000]
38000105  8C D8              ..      MOV    AX, DS
38000107  05 80 00           ...     ADD    AX, 0080h
3800010A  8E D8              ..      MOV    DS, AX                              ; DS = 0488h
3800010C  8C C0              ..      MOV    AX, ES
3800010E  05 80 00           ...     ADD    AX, 0080h
38000111  8E C0              ..      MOV    ES, AX                              ; ES = 056Fh
38000113  FE CA              ..      DEC    DL
38000115  75 E3              u.      JNE    380000FAh
38000117  1F                 .       POP    DS
38000118  2E                 .       CS:
38000119  A1 EF 04           ...     MOV    AX, [04EFh]
3800011C  8E D8              ..      MOV    DS, AX                              ; DS = 
3800011E  8E 1E 06 00        ....    MOV    DS, [0006h]
38000122  BA 00 00           ...     MOV    DX, 0000h
38000125  2E                 .       CS:
38000126  FF 2E ED 04        ....    JMP    FAR [04EDh]

; -----------------------------------------------------------------------------
; 
; -----------------------------------------------------------------------------
.
3800012A  8B 3E 56 09        .>V.    MOV    DI, [0956h]
3800012E  E8 35 00           .5.     CALL   38000166h                           ; Find file and return start cluster in AX
38000131  85 C0              ..      TEST   AX, AX
38000133  75 13              u.      JNE    38000148h                           ; Load 1 sector and move data to [DS]:[0952h]
38000135  8C D8              ..      MOV    AX, DS
38000137  8E C0              ..      MOV    ES, AX
38000139  8B 36 56 09        .6V.    MOV    SI, [0956h]
3800013D  BF A5 04           ...     MOV    DI, 04A5h
38000140  A5                 .       MOVSW                                      ; Move word DS:[SI] to ES:[DI]
38000141  A5                 .       MOVSW                                      ; Move word DS:[SI] to ES:[DI]
38000142  BE 8C 04           ...     MOV    SI, 048Ch                           ; Pointer to 'Can't find system file CPM3.SYS on boot disk'
38000145  E9 BD 00           ...     JMP    38000205h                           ; Write error message and loop indefinetely

; -----------------------------------------------------------------------------
; Load 1 sector and move data to [DS]:[0952h]
; -----------------------------------------------------------------------------
.
38000148  B9 01 00           ...     MOV    CX, 0001h
3800014B  E8 70 00           .p.     CALL   380001BEh                           ; Load data (AX=sector, CX=numbers of sectors, [04EBh]=load address
3800014E  B9 00 08           ...     MOV    CX, 0800h
38000151  8B 3E 52 09        .>R.    MOV    DI, [0952h]                         ; 0952 = stack
38000155  1E                 .       PUSH   DS
38000156  8C D8              ..      MOV    AX, DS
38000158  8E C0              ..      MOV    ES, AX
3800015A  A1 EB 04           ...     MOV    AX, [04EBh]
3800015D  8E D8              ..      MOV    DS, AX
3800015F  BE 00 00           ...     MOV    SI, 0000h
38000162  F3                 .       REPZ
38000163  A4                 .       MOVSB                                      ; Move 0800h words from [load address]:[0000] to [current segment]:[DI]
38000164  1F                 .       POP    DS
38000165  C3                 .       RET    NEAR

; -----------------------------------------------------------------------------
; Find file and return start cluster in AX
; -----------------------------------------------------------------------------
.
38000166  B9 70 00           .p.     MOV    CX, 0070h
38000169  BE 00 00           ...     MOV    SI, 0000h
.
3800016C  56                 V       PUSH   SI
3800016D  57                 W       PUSH   DI
3800016E  1E                 .       PUSH   DS
3800016F  06                 .       PUSH   ES
38000170  51                 Q       PUSH   CX
38000171  B8 00 36           ..6     MOV    AX, 3600h                           ; Root directory
38000174  8E D8              ..      MOV    DS, AX
38000176  8C C8              ..      MOV    AX, CS
38000178  8E C0              ..      MOV    ES, AX
3800017A  8B 44 1A           .D.     MOV    AX, [SI+1Ah]
3800017D  B9 0B 00           ...     MOV    CX, 000Bh
38000180  F3                 .       REPZ
38000181  A6                 .       CMPSB                                      ; Compare DS:SI with ES:DI
38000182  59                 Y       POP    CX
38000183  07                 .       POP    ES
38000184  1F                 .       POP    DS
38000185  5F                 _       POP    DI
38000186  5E                 ^       POP    SI
38000187  74 07              t.      JE     38000190h
38000189  83 C6 20           ..      ADD    SI, 20h                             ; Next directory entry
3800018C  E2 DE              ..      LOOP   3800016Ch                           ; Loop 70h times (CX)
3800018E  2B C0              +.      SUB    AX, AX
.
38000190  C3                 .       RET    NEAR

; -----------------------------------------------------------------------------
; Initialize screen
; -----------------------------------------------------------------------------
.
38000191  E8 A1 00           ...     CALL   38000235h                           ; Set screen MODE 3 and define colour 1 as green
38000194  E8 BD 01           ...     CALL   38000354h                           ; Re-program display character &00 with (...)
38000197  BE 38 04           .8.     MOV    SI, 0438h                           ; Pointer to 'Boot strap loader [19-Mar-86]'
3800019A  E8 74 00           .t.     CALL   38000211h                           ; Write string
3800019D  C3                 .       RET    NEAR

; -----------------------------------------------------------------------------
; Find next cluster in FAT table
; -----------------------------------------------------------------------------
.
3800019E  8B D8              ..      MOV    BX, AX
380001A0  D1 E3              ..      SHL    BX, 1
380001A2  03 D8              ..      ADD    BX, AX
380001A4  D1 EB              ..      SHR    BX, 1
380001A6  1E                 .       PUSH   DS
380001A7  B8 00 30           ..0     MOV    AX, 3000h                           ; Pointer to FAT table
380001AA  8E D8              ..      MOV    DS, AX
380001AC  8B 07              ..      MOV    AX, [BX]                            ; AX = [3000:BX]
380001AE  1F                 .       POP    DS
380001AF  73 08              s.      JNC    380001B9h
380001B1  D1 E8              ..      SHR    AX, 1
380001B3  D1 E8              ..      SHR    AX, 1
380001B5  D1 E8              ..      SHR    AX, 1
380001B7  D1 E8              ..      SHR    AX, 1
.
380001B9  25 FF 0F           %..     AND    AX, 0FFFh
380001BC  C3                 .       RET    NEAR
380001BD  C3                 .       RET    NEAR

; -----------------------------------------------------------------------------
; Load data (AX=sector, CX=numbers of sectors, [04EBh]=load address
; -----------------------------------------------------------------------------
.
380001BE  E3 36              .6      JCXZ   380001F6h
380001C0  2D 02 00           -..     SUB    AX, 0002h
380001C3  BB 08 00           ...     MOV    BX, 0008h
380001C6  F7 E3              ..      MUL    BX
380001C8  05 20 00           . .     ADD    AX, 0020h
380001CB  A2 17 05           ...     MOV    [0517h], AL                         ; Lower 8 bits of sector
380001CE  88 26 16 05        .&..    MOV    [0516h], AH                         ; Middle 8 bits of sector
380001D2  8B C1              ..      MOV    AX, CX
380001D4  F7 E3              ..      MUL    BX
380001D6  A2 18 05           ...     MOV    [0518h], AL                         ; Number of sectors
380001D9  A1 EB 04           ...     MOV    AX, [04EBh]                         ; Load address
380001DC  A3 12 05           ...     MOV    [0512h], AX                         ; Offset
380001DF  C7 06 10 05 00 00  ......  MOV    WORD PTR [0510h], 0000h             ; Segment
380001E5  C7 06 14 05 08 00  ......  MOV    WORD PTR [0514h], 0008h             ; Command, top 5 bits of sector and drive number
380001EB  C6 06 0F 05 00     .....   MOV    BYTE PTR [050Fh], 00h               ; Reset result byte
380001F0  BB 0F 05           ...     MOV    BX, 050Fh                           ; Parameter block is ar 050Fh
380001F3  E8 01 00           ...     CALL   380001F7h                           ; OSWORD &72 call (Write to disc controller chip)
.
380001F6  C3                 .       RET    NEAR

; -----------------------------------------------------------------------------
; OSWORD &72 call (Write to disc controller chip)
; -----------------------------------------------------------------------------
.
380001F7  B0 72              .r      MOV    AL, 72h                             ; OSWORD &72: Write to disc controller chip
380001F9  E8 26 02           .&.     CALL   38000422h
380001FC  80 3F 00           .?.     CMP    BYTE PTR [BX], 00h
380001FF  75 01              u.      JNE    38000202h                           ; If not, jump to error message
38000201  C3                 .       RET    NEAR
.
38000202  BE BB 04           ...     MOV    SI, 04BBh                           ; Pointer to 'Disc Read Error - BOOT failed'
.
38000205  E8 09 00           ...     CALL   38000211h                           ; Write string
.
38000208  E9 FD FF           ...     JMP    38000208h                           ; Loop indefinetely

3800020B  5E                 ^       POP    SI
3800020C  E8 02 00           ...     CALL   38000211h                           ; Write string
3800020F  FF E6              ..      JMP    DH

; -----------------------------------------------------------------------------
; Write string
; -----------------------------------------------------------------------------
.
38000211  FC                 .       CLD
.
38000212  AC                 .       LODSB
38000213  84 C0              ..      TEST   AL, AL
38000215  74 05              t.      JE     3800021Ch
38000217  E8 2C 00           .,.     CALL   38000246h                           ; Write character to output stream
3800021A  EB F6              ..      JMP    38000212h
.
3800021C  C3                 .       RET    NEAR


3800021D  50                 P       PUSH   AX
3800021E  D0 E8              ..      SHR    AL, 1
38000220  D0 E8              ..      SHR    AL, 1
38000222  D0 E8              ..      SHR    AL, 1
38000224  D0 E8              ..      SHR    AL, 1
38000226  E8 01 00           ...     CALL   3800022Ah
38000229  58                 X       POP    AX
.
3800022A  25 0F 00           %..     AND    AX, 000Fh                           ; Mask out nibble
3800022D  3C 0A              <.      CMP    AL, 0Ah                             ; Is it A-F?
3800022F  72 02              r.      JC     38000233h                           ; No? Then jump
38000231  04 07              ..      ADD    AL, 07h                             ; Add 07h
.
38000233  04 30              .0      ADD    AL, 30h                             ; Convert nibble to ASCII code
.
38000235  BE 2E 04           ...     MOV    SI, 042Eh                           ; String is at 042Eh (MODE 3 and define colour 1 as green)
38000238  B9 0A 00           ...     MOV    CX, 000Ah                           ; String length is 10 bytes
3800023B  E9 08 01           ...     JMP    write_string                        ; Write string to output stream
3800023E  E8 10 00           ...     CALL   38000251h                           ; This code will never be executed
38000241  73 02              s.      JNC    38000245h                           ; This code will never be executed
38000243  B0 1B              ..      MOV    AL, 1Bh                             ; This code will never be executed
.                                                                               ; This code will never be executed
38000245  C3                 .       RET    NEAR                                ; This code will never be executed

; -----------------------------------------------------------------------------
; Write character to output stream
; -----------------------------------------------------------------------------
.
38000246  50                 P       PUSH   AX
.
38000247  E4 80              ..      IN     AL, r1status
38000249  D0 E0              ..      SHL    AL, 1
3800024B  79 FA              y.      JNS    38000247h
3800024D  58                 X       POP    AX
3800024E  E6 82              ..      OUT    r1data, AL
38000250  C3                 .       RET    NEAR

; -----------------------------------------------------------------------------
; 
; -----------------------------------------------------------------------------
.
38000251  86 C4              ..      XCHG   AL, AH
38000253  B4 00              ..      MOV    AH, 00h
38000255  E8 0E 00           ...     CALL   write_to_r2data
38000258  E8 1A 00           ...     CALL   read_from_r2data
3800025B  F6 D4              ..      NOT    AH
3800025D  80 FC 80           ...     CMP    AH, 80h
38000260  E8 12 00           ...     CALL   read_from_r2data
38000263  86 C4              ..      XCHG   AL, AH
38000265  C3                 .       RET    NEAR

; -----------------------------------------------------------------------------
; Wait for TUBE ULA Data register 2 to be clear and send AH to Data register 2
; -----------------------------------------------------------------------------
.write_to_r2data
38000266  9C                 .       PUSHF
38000267  50                 P       PUSH   AX
.
38000268  E4 84              ..      IN     AL, r2status
3800026A  A8 40              .@      TEST   AL, 40h
3800026C  74 FA              t.      JE     38000268h
3800026E  8A C4              ..      MOV    AL, AH
38000270  E6 86              ..      OUT    r2data, AL
38000272  58                 X       POP    AX
38000273  9D                 .       POPF
38000274  C3                 .       RET    NEAR

; -----------------------------------------------------------------------------
; Wait for data in TUBE ULA Data register 2 and return it in A
; -----------------------------------------------------------------------------
.read_from_r2data
38000275  9C                 .       PUSHF
38000276  86 E0              ..      XCHG   AH, AL
.
38000278  E4 84              ..      IN     AL, r2status
3800027A  A8 80              ..      TEST   AL, r1status
3800027C  74 FA              t.      JE     38000278h
3800027E  E4 86              ..      IN     AL, r2data
38000280  86 E0              ..      XCHG   AH, AL
38000282  9D                 .       POPF
38000283  C3                 .       RET    NEAR

; -----------------------------------------------------------------------------
;
; -----------------------------------------------------------------------------
.
38000284  50                 P       PUSH   AX
38000285  56                 V       PUSH   SI
38000286  8A E0              ..      MOV    AH, AL
38000288  8B F3              ..      MOV    SI, BX
3800028A  E8 03 00           ...     CALL   38000290h
3800028D  5E                 ^       POP    SI
3800028E  58                 X       POP    AX
3800028F  C3                 .       RET    NEAR

; -----------------------------------------------------------------------------
; OSWORD handler
; -----------------------------------------------------------------------------
.
38000290  B2 86              ..      MOV    DL, r2data
38000292  84 E4              ..      TEST   AH, AH
38000294  75 01              u.      JNE    38000297h
38000296  C3                 .       RET    NEAR
.
38000297  B0 08              ..      MOV    AL, 08h                             ; TUBE command &08: OSWORD
38000299  E8 8C 00           ...     CALL   38000328h                           ; Send byte to r2data
3800029C  8A C4              ..      MOV    AL, AH
3800029E  E8 87 00           ...     CALL   38000328h                           ; Send byte to r2data
380002A1  2B DB              +.      SUB    BX, BX
380002A3  80 FC 81           ...     CMP    AH, 81h
380002A6  72 07              r.      JC     380002AFh
380002A8  8A 04              ..      MOV    AL, [SI]
380002AA  8A 74 01           .t.     MOV    DH, [SI+01h]
380002AD  EB 11              ..      JMP    380002C0h
.
380002AF  80 FC 15           ...     CMP    AH, 15h
380002B2  73 02              s.      JNC    380002B6h
380002B4  8A DC              ..      MOV    BL, AH
.
380002B6  2E                 .       CS:
380002B7  8A 87 EB 02        ....    MOV    AL, [BX+02EBh]
380002BB  2E                 .       CS:
380002BC  8A B7 00 03        ....    MOV    DH, [BX+0300h]
.
380002C0  E8 65 00           .e.     CALL   38000328h
380002C3  8A D8              ..      MOV    BL, AL
380002C5  85 DB              ..      TEST   BX, BX
380002C7  74 0A              t.      JE     380002D3h
380002C9  8B CB              ..      MOV    CX, BX
.
380002CB  4B                 K       DEC    BX
380002CC  8A 00              ..      MOV    AL, [BX+SI]
380002CE  E8 57 00           .W.     CALL   38000328h
380002D1  E2 F8              ..      LOOP   380002CBh                           ; Loop ? times (CX)
.
380002D3  8A C6              ..      MOV    AL, DH
380002D5  E8 50 00           .P.     CALL   38000328h
380002D8  2A FF              *.      SUB    BH, BH
380002DA  8A DE              ..      MOV    BL, DH
380002DC  85 DB              ..      TEST   BX, BX
380002DE  74 0A              t.      JE     380002EAh
380002E0  8B CB              ..      MOV    CX, BX
.
380002E2  4B                 K       DEC    BX
380002E3  E8 2F 00           ./.     CALL   38000315h
380002E6  88 00              ..      MOV    [BX+SI], AL
380002E8  E2 F8              ..      LOOP   380002E2h                           ; Loop ? times (CX)
.
380002EA  C3                 .       RET    NEAR
380002EB  10 00              ..      ADC    [BX+SI], AL
380002ED  05 00 05           ...     ADD    AX, 0500h
380002F0  02 05              ..      ADD    AL, [DI]
380002F2  08 0E 04 01        ....    OR     [0104h], CL
380002F6  01 05              ..      ADD    [DI], AX
380002F8  00 01              ..      ADD    [BX+DI], AL
380002FA  20 10               .      AND    [BX+SI], DL
380002FC  0D 00 08           ...     OR     AX, 0800h
380002FF  80 10 05           ...     ADC    BYTE PTR [BX+SI], 05h
38000302  00 05              ..      ADD    [DI], AL
38000304  00 05              ..      ADD    [DI], AL
38000306  00 00              ..      ADD    [BX+SI], AL
38000308  00 05              ..      ADD    [DI], AL
3800030A  09 05              ..      OR     [DI], AX
3800030C  00 08              ..      ADD    [BX+SI], CL
3800030E  19 00              ..      SBB    [BX+SI], AX
38000310  01 0D              ..      ADD    [DI], CX
38000312  80 08 80           ...     OR     BYTE PTR [BX+SI], 80h
.
38000315  52                 R       PUSH   DX
38000316  B6 00              ..      MOV    DH, 00h
38000318  FE CA              ..      DEC    DL
3800031A  FE CA              ..      DEC    DL
.
3800031C  EC                 .       IN     AL, DX
3800031D  84 C0              ..      TEST   AL, AL
3800031F  79 FB              y.      JNS    3800031Ch
38000321  FE C2              ..      INC    DL
38000323  FE C2              ..      INC    DL
38000325  EC                 .       IN     AL, DX
38000326  5A                 Z       POP    DX
38000327  C3                 .       RET    NEAR

; -----------------------------------------------------------------------------
; Write AL to I/O address DX
; -----------------------------------------------------------------------------
.
38000328  52                 R       PUSH   DX
38000329  50                 P       PUSH   AX
3800032A  B6 00              ..      MOV    DH, 00h
3800032C  FE CA              ..      DEC    DL
3800032E  FE CA              ..      DEC    DL
.
38000330  EC                 .       IN     AL, DX                              ; Check if register is empty
38000331  D0 E0              ..      SHL    AL, 1
38000333  79 FB              y.      JNS    38000330h
38000335  FE C2              ..      INC    DL
38000337  FE C2              ..      INC    DL
38000339  58                 X       POP    AX
3800033A  EE                 .       OUT    DX, AL
3800033B  5A                 Z       POP    DX
3800033C  C3                 .       RET    NEAR

; -----------------------------------------------------------------------------
; 
; -----------------------------------------------------------------------------
.
3800033D  A3 E3 04           ...     MOV    [04E3h], AX
38000340  BE E1 04           ...     MOV    SI, 04E1h                           ; String is at 04E1 (Re-program display character &00)
38000343  B9 0A 00           ...     MOV    CX, 000Ah                           ; String length is 10 bytes

.write_string
38000346  BA 82 00           ...     MOV    DX, r1data
.
38000349  E4 80              ..      IN     AL, r1status
3800034B  D0 E0              ..      SHL    AL, 1
3800034D  79 FA              y.      JNS    38000349h                           ; Loop until TUBE register 1 is empty
3800034F  AC                 .       LODSB                                      ; Load byte from DS:SI
38000350  EE                 .       OUT    DX, AL                              ; Write character to output stream
38000351  E2 F6              ..      LOOP   38000349h                           ; Loop ? times (CX)
38000353  C3                 .       RET    NEAR

; -----------------------------------------------------------------------------
; Re-program display character &00 with (...)
; -----------------------------------------------------------------------------
.
38000354  B8 09 07           ...     MOV    AX, 0709h
38000357  E8 E3 FF           ...     CALL   3800033Dh
3800035A  B8 04 26           ..&     MOV    AX, 2604h
3800035D  E8 DD FF           ...     CALL   3800033Dh
38000360  B8 05 00           ...     MOV    AX, 0005h
38000363  E8 D7 FF           ...     CALL   3800033Dh
38000366  B8 07 1B           ...     MOV    AX, 1B07h
38000369  E8 D1 FF           ...     CALL   3800033Dh
3800036C  C3                 .       RET    NEAR

; -----------------------------------------------------------------------------
; 
; -----------------------------------------------------------------------------
.
3800036D  B8 09 09           ...     MOV    AX, 0909h
38000370  E8 CA FF           ...     CALL   3800033Dh
38000373  B8 04 1E           ...     MOV    AX, 1E04h
38000376  E8 C4 FF           ...     CALL   3800033Dh
38000379  B8 05 00           ...     MOV    AX, 0005h
3800037C  E8 BE FF           ...     CALL   3800033Dh
3800037F  B8 07 1B           ...     MOV    AX, 1B07h
38000382  E8 B8 FF           ...     CALL   3800033Dh
38000385  C3                 .       RET    NEAR

; -----------------------------------------------------------------------------
; Move LOGO.SYS to screen memory
; -----------------------------------------------------------------------------
.
38000386  B9 06 00           ...     MOV    CX, 0006h                           ; LOGO.SYS has 06h 8-bit columns
38000389  BE 58 11           .X.     MOV    SI, 1158h                           ; Parasite address (offset)
3800038C  BF 90 41           ..A     MOV    DI, 4190h                           ; Host address
.
3800038F  51                 Q       PUSH   CX
38000390  57                 W       PUSH   DI
38000391  B9 D8 00           ...     MOV    CX, 00D8h                           ; LOGO.SYS has D8h 8-bot rows
.
38000394  AC                 .       LODSB
38000395  51                 Q       PUSH   CX
38000396  56                 V       PUSH   SI
38000397  57                 W       PUSH   DI
38000398  E8 7B 00           .{.     CALL   38000416h
3800039B  5F                 _       POP    DI
3800039C  5E                 ^       POP    SI
3800039D  59                 Y       POP    CX
3800039E  47                 G       INC    DI
3800039F  E2 F3              ..      LOOP   38000394h                           ; Loop D8h times (CX)
380003A1  5F                 _       POP    DI
380003A2  59                 Y       POP    CX
380003A3  81 C7 80 02        ....    ADD    DI, 0280h                           ; Move to next 8-bit column
380003A7  E2 E6              ..      LOOP   3800038Fh                           ; Loop 6 times (CX)
380003A9  C3                 .       RET    NEAR

; -----------------------------------------------------------------------------
; Move 6502.SYS to host memory
; -----------------------------------------------------------------------------
.
380003AA  B9 00 08           ...     MOV    CX, 0800h
380003AD  BE 58 09           .X.     MOV    SI, 0958h                           ; Parasite address (offset)
380003B0  8B 3E 59 09        .>Y.    MOV    DI, [0959h]                         ; Host address
.
380003B4  AC                 .       LODSB
380003B5  51                 Q       PUSH   CX
380003B6  56                 V       PUSH   SI
380003B7  57                 W       PUSH   DI
380003B8  E8 5B 00           .[.     CALL   38000416h
380003BB  5F                 _       POP    DI
380003BC  5E                 ^       POP    SI
380003BD  59                 Y       POP    CX
380003BE  47                 G       INC    DI
380003BF  E2 F3              ..      LOOP   380003B4h                           ; Loop 0800h times (CX)

380003C1  C7 06 DC 04 00 02  ......  MOV    WORD PTR [04DCh], 0200h
380003C7  B0 05              ..      MOV    AL, 05h                             ; OSWORD 05 (Read I/O processor memory)
380003C9  E8 53 00           .S.     CALL   3800041Fh
380003CC  A1 59 09           .Y.     MOV    AX, [0959h]
380003CF  40                 @       INC    AX
380003D0  A3 DC 04           ...     MOV    [04DCh], AX
380003D3  B0 06              ..      MOV    AL, 06h
380003D5  E8 47 00           .G.     CALL   3800041Fh

380003D8  C7 06 DC 04 01 02  ......  MOV    WORD PTR [04DCh], 0201h
380003DE  B0 05              ..      MOV    AL, 05h                             ; OSWORD 05 (Read I/O processor memory)
380003E0  E8 3C 00           .<.     CALL   3800041Fh
380003E3  A1 59 09           .Y.     MOV    AX, [0959h]
380003E6  05 02 00           ...     ADD    AX, 0002h
380003E9  A3 DC 04           ...     MOV    [04DCh], AX
380003EC  B0 06              ..      MOV    AL, 06h                             ; OSWORD 06 (Write I/O processor memory)
380003EE  E8 2E 00           ...     CALL   3800041Fh

380003F1  A1 59 09           .Y.     MOV    AX, [0959h]
380003F4  05 03 00           ...     ADD    AX, 0003h
380003F7  A2 E0 04           ...     MOV    [04E0h], AL
380003FA  C7 06 DC 04 00 02  ......  MOV    WORD PTR [04DCh], 0200h
38000400  50                 P       PUSH   AX
38000401  B0 06              ..      MOV    AL, 06h                             ; OSWORD 06 (Write I/O processor memory)
38000403  E8 19 00           ...     CALL   3800041Fh

38000406  58                 X       POP    AX
38000407  88 26 E0 04        .&..    MOV    [04E0h], AH
3800040B  C7 06 DC 04 01 02  ......  MOV    WORD PTR [04DCh], 0201h
38000411  B0 06              ..      MOV    AL, 06h                             ; OSWORD 06 (Write I/O processor memory)
38000413  E9 09 00           ...     JMP    3800041Fh

; -----------------------------------------------------------------------------
; 
; -----------------------------------------------------------------------------
.
38000416  A2 E0 04           ...     MOV    [04E0h], AL
38000419  89 3E DC           .>.     MOV    [00DCh], DI
3800041C  04 B0              ..      ADD    AL, B0h
3800041E  06                 .       PUSH   ES
.
3800041F  BB DC 04           ...     MOV    BX, 04DCh
.                                                                               ; OSWORD handler
38000422  50                 P       PUSH   AX
38000423  53                 S       PUSH   BX
38000424  56                 V       PUSH   SI
38000425  06                 .       PUSH   ES
38000426  E8 5B FE           .[.     CALL   38000284h
38000429  07                 .       POP    ES
3800042A  5E                 ^       POP    SI
3800042B  5B                 [       POP    BX
3800042C  58                 X       POP    AX
3800042D  C3                 .       RET    NEAR

.
3800042E  16 03              ..      DB     16h, 03h                            ; Select screen MODE 3
38000430  13 01 02 00 00 00  ......  DB     13h, 01h, 02h, 00h, 00h, 00h        ; Define logical colour 1 as green
38000436  00 00              ..      DB     00h, 00h

.
38000438  0A                 .       DB     0Ah
38000439  0A 42 6F           .Bo     OR     AL, [BP+SI+6Fh]
3800043C  6F                 o       OUTSW
3800043D  74 20              t       JE     3800045Fh
3800043F  73 74              st      JNC    380004B5h
38000441  72 61              ra      JC     380004A4h
38000443  70 20              p       JO     38000465h
38000445  6C                 l       INSB
38000446  6F                 o       OUTSW
38000447  61                 a       POPA
38000448  64                 d       FS:
38000449  65                 e       GS:
3800044A  72 20              r       JC     3800046Ch
3800044C  5B                 [       POP    BX
3800044D  31 39              19      XOR    [BX+DI], DI
3800044F  2D 4D 61           -Ma     SUB    AX, 614Dh
38000452  72 2D              r-      JC     38000481h
38000454  38 36 5D 0D        86].    CMP    [0D5Dh], DH
38000458  0A 00              ..      OR     AL, [BX+SI]
3800045A  0D 0A 0A           ...     OR     AX, 0A0Ah
3800045D  0A 4C 6F           .Lo     OR     CL, [SI+6Fh]
38000460  61                 a       POPA
38000461  64                 d       FS:
38000462  69 6E 67 20 43     ing C   IMUL  BP, [BP+67h], 4320h
38000467  6F                 o       OUTSW
38000468  6E                 n       OUTSB
38000469  63                 c       ...
3800046A  75 72              ur      JNE    380004DEh
.
3800046C  72 65              re      JC     380004D3h
3800046E  6E                 n       OUTSB
3800046F  74 20              t       JE     38000491h
38000471  44                 D       INC    SP
38000472  4F                 O       DEC    DI
38000473  53                 S       PUSH   BX
38000474  2E                 .       CS:
38000475  00

.
38000476  0D                 .       
38000477  0A 0A              ..      OR     CL, [BP+SI]
38000479  0A 4C 6F           .Lo     OR     CL, [SI+6Fh]
3800047C  61                 a       POPA
3800047D  64                 d       FS:
3800047E  69 6E 67 20 44     ing D   IMUL  BP, [BP+67h], 4420h
38000483  4F                 O       DEC    DI
38000484  53                 S       PUSH   BX
38000485  20 50 4C            PL     AND    [BX+SI+4Ch], DL
38000488  55                 U       PUSH   BP
38000489  53                 S       PUSH   BX
3800048A  2E                 .       CS:
3800048B  00 0D              ..      ADD    [DI], CL
3800048D  0A 43 61           .Ca     OR     AL, [BP+DI+61h]
38000490  6E                 n       OUTSB
.
38000491  27                 '       DAA
38000492  74 20              t       JE     380004B4h
38000494  66                 f       ...
38000495  69 6E 64 20 73     ind s   IMUL  BP, [BP+64h], 7320h
3800049A  79 73              ys      JNS    3800050Fh
3800049C  74 65              te      JE     38000503h
3800049E  6D                 m       INSW
3800049F  20 66 69            fi     AND    [BP+69h], AH
380004A2  6C                 l       INSB
380004A3  65                 e       GS:
.
380004A4  20 43 50            CP     AND    [BP+DI+50h], AL
380004A7  4D                 M       DEC    BP
380004A8  33 2E 53 59        3.SY    XOR    BP, [5953h]
380004AC  53                 S       PUSH   BX
380004AD  20 6F 6E            on     AND    [BX+6Eh], CH
380004B0  20 62 6F            bo     AND    [BP+SI+6Fh], AH
380004B3  6F                 o       OUTSW
.
380004B4  74 20              t       JE     380004D6h
380004B6  64                 d       FS:
380004B7  69 73 6B 00        isk.    

.
380004BB  0D 0A 0A           ...     DB     0Dh, 0Ah, 0Ah
380004BE  44 69 73 63 20 52  Disc R  DB     'Disc Read Error - BOOT failed'
          65 61 64 20 45 72  ead Er
          72 6F 72 20 2D 20  ror - 
          42 4F 4F 54 20 66  BOOT f
          61 69 6C 65 64     ailed
380004DB  00                         DB     00h                                 ; String terminator

.
380004DC  00 00              ..      ADD    [BX+SI], AL
380004DE  00 00              ..      ADD    [BX+SI], AL
380004E0  00 

.
380004E1  17                 ..      DB     17h                                 ; Re-program display character
380004E2  00                 .       DB     00h                                 ; Character &00
380004E3  00 00 00 00        ....    DD     00000000h
380004E7  00 00 00 00        ....    DD     00000000h

.
380004EB  00 04              ..      DW     0400h                               ; Load address

.
380004ED  00 00              ..      DW     0000h                               ; Exec address

.
380004EF  60 00              `.      DW     0060h

.                                                                               ; OSWORD &72 parameter block for loading FAT table
380004F1  00                 .       DB     00h                                 ; Result
380004F2  00 00 00 30        ...0    DD     36000000h                           ; Pointer to 3000:0000h
380004F6  08                 .       DB     08h                                 ; Command 08h: read data
380004F7  00                 .       DB     %00000000                           ; b0..4: top 5 bits of sector number, b5..7: drive number ORed with current drive number
380004F8  00                 .       DB     00h                                 ; Middle 8 bits of sector number
380004F9  10                 .       DB     10h                                 ; Lower 8 bits of sector number
380004FA  02                 .       DB     02h                                 ; Number of sectors
380004FB  00                 .       DB     00h                                 ; Unused
380004FC  00 00 00 00        ....    DD     00000000h                           ; Number of bytes to write

.                                                                               ; OSWORD &72 parameter block for loading root directory
38000500  00                 .       DB     00h                                 ; Result
38000501  00 00 00 36        ...6    DD     36000000h                           ; Pointer to 3600:0000h
38000505  08                 .       DB     08h                                 ; Command 08h: read data
38000506  00                 .       DB     %00000000                           ; b0..4: top 5 bits of sector number, b5..7: drive number ORed with current drive number
38000507  00                 .       DB     00h                                 ; Middle 8 bits of sector number
38000508  12                 .       DB     12h                                 ; Lower 8 bits of sector number
38000509  0E                 .       DB     0Eh                                 ; Number of sectors
3800050A  00                 .       DB     00h                                 ; Unused
3800050B  00 00 00 00        ....    DD     00000000h                           ; Number of bytes to write

.                                                                               ; OSWORD &72 parameter block
3800050F  00                 .       DB     00h                                 ; Result
38000510  00 00 00 04        ...6    DD     36000000h                           ; Pointer to 3600:0000h
38000514  08                 .       DB     08h                                 ; Command 08h: read data
38000515  00                 .       DB     %00000000                           ; b0..4: top 5 bits of sector number, b5..7: drive number ORed with current drive number
38000516  00                 .       DB     00h                                 ; Middle 8 bits of sector number
38000517  00                 .       DB     12h                                 ; Lower 8 bits of sector number
38000518  00                 .       DB     0Eh                                 ; Number of sectors
38000519  00                 .       DB     00h                                 ; Unused
3800051A  00 00 00 00        ....    DD     00000000h                           ; Number of bytes to write


3800051E  00 00              ..      DW     0000h                               ; Temporary storage for start cluster of file
38000520  00 00              ..      DW     0000h
38000522  00 00              ..      DW     0000h

.
38000524  43 43 50 4D 20 20  CCPM    DB     'CCPM    SYS'
          20 20 53 59 53       SYS

.
3800052F  43 50 4D 33 20 20  CPM3    DB     'CPM3    SYS'
          20 20 53 59 53       SYS

.
3800053A  4C 4F 47 4F 20 20  LOGO    DB     'LOGO    SYS'
          20 20 53 59 53       SYS

.
38000545  36 35 30 32 20 20  6502    DB     '6502    SYS'
          20 20 53 59 53       SYS

.
38000550  00 00              ..      ADD    [BX+SI], AL
38000552  00 00              ..      ADD    [BX+SI], AL
38000554  00 00              ..      ADD    [BX+SI], AL
38000556  00 00              ..      ADD    [BX+SI], AL
38000558  00 00              ..      ADD    [BX+SI], AL
3800055A  00 00              ..      ADD    [BX+SI], AL
3800055C  00 00              ..      ADD    [BX+SI], AL
3800055E  00 00              ..      ADD    [BX+SI], AL
38000560  00 00              ..      ADD    [BX+SI], AL
38000562  00 00              ..      ADD    [BX+SI], AL
38000564  00 00              ..      ADD    [BX+SI], AL
38000566  00 00              ..      ADD    [BX+SI], AL
38000568  00 00              ..      ADD    [BX+SI], AL
3800056A  00 00              ..      ADD    [BX+SI], AL
3800056C  00 00              ..      ADD    [BX+SI], AL
3800056E  00 00              ..      ADD    [BX+SI], AL
38000570  00 00              ..      ADD    [BX+SI], AL
38000572  00 00              ..      ADD    [BX+SI], AL
38000574  00 00              ..      ADD    [BX+SI], AL
38000576  00 00              ..      ADD    [BX+SI], AL
38000578  00 00              ..      ADD    [BX+SI], AL
3800057A  00 00              ..      ADD    [BX+SI], AL
3800057C  00 00              ..      ADD    [BX+SI], AL
3800057E  00 00              ..      ADD    [BX+SI], AL
38000580  00 00              ..      ADD    [BX+SI], AL
38000582  00 00              ..      ADD    [BX+SI], AL
38000584  00 00              ..      ADD    [BX+SI], AL
38000586  00 00              ..      ADD    [BX+SI], AL
38000588  00 00              ..      ADD    [BX+SI], AL
3800058A  00 00              ..      ADD    [BX+SI], AL
3800058C  00 00              ..      ADD    [BX+SI], AL
3800058E  00 00              ..      ADD    [BX+SI], AL
38000590  00 00              ..      ADD    [BX+SI], AL
38000592  00 00              ..      ADD    [BX+SI], AL
38000594  00 00              ..      ADD    [BX+SI], AL
38000596  00 00              ..      ADD    [BX+SI], AL
38000598  00 00              ..      ADD    [BX+SI], AL
3800059A  00 00              ..      ADD    [BX+SI], AL
3800059C  00 00              ..      ADD    [BX+SI], AL
3800059E  00 00              ..      ADD    [BX+SI], AL
380005A0  00 00              ..      ADD    [BX+SI], AL
380005A2  00 00              ..      ADD    [BX+SI], AL
380005A4  00 00              ..      ADD    [BX+SI], AL
380005A6  00 00              ..      ADD    [BX+SI], AL
380005A8  00 00              ..      ADD    [BX+SI], AL
380005AA  00 00              ..      ADD    [BX+SI], AL
380005AC  00 00              ..      ADD    [BX+SI], AL
380005AE  00 00              ..      ADD    [BX+SI], AL
380005B0  00 00              ..      ADD    [BX+SI], AL
380005B2  00 00              ..      ADD    [BX+SI], AL
380005B4  00 00              ..      ADD    [BX+SI], AL
380005B6  00 00              ..      ADD    [BX+SI], AL
380005B8  00 00              ..      ADD    [BX+SI], AL
380005BA  00 00              ..      ADD    [BX+SI], AL
380005BC  00 00              ..      ADD    [BX+SI], AL
380005BE  00 00              ..      ADD    [BX+SI], AL
380005C0  00 00              ..      ADD    [BX+SI], AL
380005C2  00 00              ..      ADD    [BX+SI], AL
380005C4  00 00              ..      ADD    [BX+SI], AL
380005C6  00 00              ..      ADD    [BX+SI], AL
380005C8  00 00              ..      ADD    [BX+SI], AL
380005CA  00 00              ..      ADD    [BX+SI], AL
380005CC  00 00              ..      ADD    [BX+SI], AL
380005CE  00 00              ..      ADD    [BX+SI], AL
380005D0  00 00              ..      ADD    [BX+SI], AL
380005D2  00 00              ..      ADD    [BX+SI], AL
380005D4  00 00              ..      ADD    [BX+SI], AL
380005D6  00 00              ..      ADD    [BX+SI], AL
380005D8  00 00              ..      ADD    [BX+SI], AL
380005DA  00 00              ..      ADD    [BX+SI], AL
380005DC  00 00              ..      ADD    [BX+SI], AL
380005DE  00 00              ..      ADD    [BX+SI], AL
380005E0  00 00              ..      ADD    [BX+SI], AL
380005E2  00 00              ..      ADD    [BX+SI], AL
380005E4  00 00              ..      ADD    [BX+SI], AL
380005E6  00 00              ..      ADD    [BX+SI], AL
380005E8  00 00              ..      ADD    [BX+SI], AL
380005EA  00 00              ..      ADD    [BX+SI], AL
380005EC  00 00              ..      ADD    [BX+SI], AL
380005EE  00 00              ..      ADD    [BX+SI], AL
380005F0  00 00              ..      ADD    [BX+SI], AL
380005F2  00 00              ..      ADD    [BX+SI], AL
380005F4  00 00              ..      ADD    [BX+SI], AL
380005F6  00 00              ..      ADD    [BX+SI], AL
380005F8  00 00              ..      ADD    [BX+SI], AL
380005FA  00 00              ..      ADD    [BX+SI], AL
380005FC  00 00              ..      ADD    [BX+SI], AL
380005FE  00 00              ..      ADD    [BX+SI], AL
38000600  00 00              ..      ADD    [BX+SI], AL
38000602  00 00              ..      ADD    [BX+SI], AL
38000604  00 00              ..      ADD    [BX+SI], AL
38000606  00 00              ..      ADD    [BX+SI], AL
38000608  00 00              ..      ADD    [BX+SI], AL
3800060A  00 00              ..      ADD    [BX+SI], AL
3800060C  00 00              ..      ADD    [BX+SI], AL
3800060E  00 00              ..      ADD    [BX+SI], AL
38000610  00 00              ..      ADD    [BX+SI], AL
38000612  00 00              ..      ADD    [BX+SI], AL
38000614  00 00              ..      ADD    [BX+SI], AL
38000616  00 00              ..      ADD    [BX+SI], AL
38000618  00 00              ..      ADD    [BX+SI], AL
3800061A  00 00              ..      ADD    [BX+SI], AL
3800061C  00 00              ..      ADD    [BX+SI], AL
3800061E  00 00              ..      ADD    [BX+SI], AL
38000620  00 00              ..      ADD    [BX+SI], AL
38000622  00 00              ..      ADD    [BX+SI], AL
38000624  00 00              ..      ADD    [BX+SI], AL
38000626  00 00              ..      ADD    [BX+SI], AL
38000628  00 00              ..      ADD    [BX+SI], AL
3800062A  00 00              ..      ADD    [BX+SI], AL
3800062C  00 00              ..      ADD    [BX+SI], AL
3800062E  00 00              ..      ADD    [BX+SI], AL
38000630  00 00              ..      ADD    [BX+SI], AL
38000632  00 00              ..      ADD    [BX+SI], AL
38000634  00 00              ..      ADD    [BX+SI], AL
38000636  00 00              ..      ADD    [BX+SI], AL
38000638  00 00              ..      ADD    [BX+SI], AL
3800063A  00 00              ..      ADD    [BX+SI], AL
3800063C  00 00              ..      ADD    [BX+SI], AL
3800063E  00 00              ..      ADD    [BX+SI], AL
38000640  00 00              ..      ADD    [BX+SI], AL
38000642  00 00              ..      ADD    [BX+SI], AL
38000644  00 00              ..      ADD    [BX+SI], AL
38000646  00 00              ..      ADD    [BX+SI], AL
38000648  00 00              ..      ADD    [BX+SI], AL
3800064A  00 00              ..      ADD    [BX+SI], AL
3800064C  00 00              ..      ADD    [BX+SI], AL
3800064E  00 00              ..      ADD    [BX+SI], AL
38000650  00 00              ..      ADD    [BX+SI], AL
38000652  00 00              ..      ADD    [BX+SI], AL
38000654  00 00              ..      ADD    [BX+SI], AL
38000656  00 00              ..      ADD    [BX+SI], AL
38000658  00 00              ..      ADD    [BX+SI], AL
3800065A  00 00              ..      ADD    [BX+SI], AL
3800065C  00 00              ..      ADD    [BX+SI], AL
3800065E  00 00              ..      ADD    [BX+SI], AL
38000660  00 00              ..      ADD    [BX+SI], AL
38000662  00 00              ..      ADD    [BX+SI], AL
38000664  00 00              ..      ADD    [BX+SI], AL
38000666  00 00              ..      ADD    [BX+SI], AL
38000668  00 00              ..      ADD    [BX+SI], AL
3800066A  00 00              ..      ADD    [BX+SI], AL
3800066C  00 00              ..      ADD    [BX+SI], AL
3800066E  00 00              ..      ADD    [BX+SI], AL
38000670  00 00              ..      ADD    [BX+SI], AL
38000672  00 00              ..      ADD    [BX+SI], AL
38000674  00 00              ..      ADD    [BX+SI], AL
38000676  00 00              ..      ADD    [BX+SI], AL
38000678  00 00              ..      ADD    [BX+SI], AL
3800067A  00 00              ..      ADD    [BX+SI], AL
3800067C  00 00              ..      ADD    [BX+SI], AL
3800067E  00 00              ..      ADD    [BX+SI], AL
38000680  00 00              ..      ADD    [BX+SI], AL
38000682  00 00              ..      ADD    [BX+SI], AL
38000684  00 00              ..      ADD    [BX+SI], AL
38000686  00 00              ..      ADD    [BX+SI], AL
38000688  00 00              ..      ADD    [BX+SI], AL
3800068A  00 00              ..      ADD    [BX+SI], AL
3800068C  00 00              ..      ADD    [BX+SI], AL
3800068E  00 00              ..      ADD    [BX+SI], AL
38000690  00 00              ..      ADD    [BX+SI], AL
38000692  00 00              ..      ADD    [BX+SI], AL
38000694  00 00              ..      ADD    [BX+SI], AL
38000696  00 00              ..      ADD    [BX+SI], AL
38000698  00 00              ..      ADD    [BX+SI], AL
3800069A  00 00              ..      ADD    [BX+SI], AL
3800069C  00 00              ..      ADD    [BX+SI], AL
3800069E  00 00              ..      ADD    [BX+SI], AL
380006A0  00 00              ..      ADD    [BX+SI], AL
380006A2  00 00              ..      ADD    [BX+SI], AL
380006A4  00 00              ..      ADD    [BX+SI], AL
380006A6  00 00              ..      ADD    [BX+SI], AL
380006A8  00 00              ..      ADD    [BX+SI], AL
380006AA  00 00              ..      ADD    [BX+SI], AL
380006AC  00 00              ..      ADD    [BX+SI], AL
380006AE  00 00              ..      ADD    [BX+SI], AL
380006B0  00 00              ..      ADD    [BX+SI], AL
380006B2  00 00              ..      ADD    [BX+SI], AL
380006B4  00 00              ..      ADD    [BX+SI], AL
380006B6  00 00              ..      ADD    [BX+SI], AL
380006B8  00 00              ..      ADD    [BX+SI], AL
380006BA  00 00              ..      ADD    [BX+SI], AL
380006BC  00 00              ..      ADD    [BX+SI], AL
380006BE  00 00              ..      ADD    [BX+SI], AL
380006C0  00 00              ..      ADD    [BX+SI], AL
380006C2  00 00              ..      ADD    [BX+SI], AL
380006C4  00 00              ..      ADD    [BX+SI], AL
380006C6  00 00              ..      ADD    [BX+SI], AL
380006C8  00 00              ..      ADD    [BX+SI], AL
380006CA  00 00              ..      ADD    [BX+SI], AL
380006CC  00 00              ..      ADD    [BX+SI], AL
380006CE  00 00              ..      ADD    [BX+SI], AL
380006D0  00 00              ..      ADD    [BX+SI], AL
380006D2  00 00              ..      ADD    [BX+SI], AL
380006D4  00 00              ..      ADD    [BX+SI], AL
380006D6  00 00              ..      ADD    [BX+SI], AL
380006D8  00 00              ..      ADD    [BX+SI], AL
380006DA  00 00              ..      ADD    [BX+SI], AL
380006DC  00 00              ..      ADD    [BX+SI], AL
380006DE  00 00              ..      ADD    [BX+SI], AL
380006E0  00 00              ..      ADD    [BX+SI], AL
380006E2  00 00              ..      ADD    [BX+SI], AL
380006E4  00 00              ..      ADD    [BX+SI], AL
380006E6  00 00              ..      ADD    [BX+SI], AL
380006E8  00 00              ..      ADD    [BX+SI], AL
380006EA  00 00              ..      ADD    [BX+SI], AL
380006EC  00 00              ..      ADD    [BX+SI], AL
380006EE  00 00              ..      ADD    [BX+SI], AL
380006F0  00 00              ..      ADD    [BX+SI], AL
380006F2  00 00              ..      ADD    [BX+SI], AL
380006F4  00 00              ..      ADD    [BX+SI], AL
380006F6  00 00              ..      ADD    [BX+SI], AL
380006F8  00 00              ..      ADD    [BX+SI], AL
380006FA  00 00              ..      ADD    [BX+SI], AL
380006FC  00 00              ..      ADD    [BX+SI], AL
380006FE  00 00              ..      ADD    [BX+SI], AL
38000700  00 00              ..      ADD    [BX+SI], AL
38000702  00 00              ..      ADD    [BX+SI], AL
38000704  00 00              ..      ADD    [BX+SI], AL
38000706  00 00              ..      ADD    [BX+SI], AL
38000708  00 00              ..      ADD    [BX+SI], AL
3800070A  00 00              ..      ADD    [BX+SI], AL
3800070C  00 00              ..      ADD    [BX+SI], AL
3800070E  00 00              ..      ADD    [BX+SI], AL
38000710  00 00              ..      ADD    [BX+SI], AL
38000712  00 00              ..      ADD    [BX+SI], AL
38000714  00 00              ..      ADD    [BX+SI], AL
38000716  00 00              ..      ADD    [BX+SI], AL
38000718  00 00              ..      ADD    [BX+SI], AL
3800071A  00 00              ..      ADD    [BX+SI], AL
3800071C  00 00              ..      ADD    [BX+SI], AL
3800071E  00 00              ..      ADD    [BX+SI], AL
38000720  00 00              ..      ADD    [BX+SI], AL
38000722  00 00              ..      ADD    [BX+SI], AL
38000724  00 00              ..      ADD    [BX+SI], AL
38000726  00 00              ..      ADD    [BX+SI], AL
38000728  00 00              ..      ADD    [BX+SI], AL
3800072A  00 00              ..      ADD    [BX+SI], AL
3800072C  00 00              ..      ADD    [BX+SI], AL
3800072E  00 00              ..      ADD    [BX+SI], AL
38000730  00 00              ..      ADD    [BX+SI], AL
38000732  00 00              ..      ADD    [BX+SI], AL
38000734  00 00              ..      ADD    [BX+SI], AL
38000736  00 00              ..      ADD    [BX+SI], AL
38000738  00 00              ..      ADD    [BX+SI], AL
3800073A  00 00              ..      ADD    [BX+SI], AL
3800073C  00 00              ..      ADD    [BX+SI], AL
3800073E  00 00              ..      ADD    [BX+SI], AL
38000740  00 00              ..      ADD    [BX+SI], AL
38000742  00 00              ..      ADD    [BX+SI], AL
38000744  00 00              ..      ADD    [BX+SI], AL
38000746  00 00              ..      ADD    [BX+SI], AL
38000748  00 00              ..      ADD    [BX+SI], AL
3800074A  00 00              ..      ADD    [BX+SI], AL
3800074C  00 00              ..      ADD    [BX+SI], AL
3800074E  00 00              ..      ADD    [BX+SI], AL
38000750  00 00              ..      ADD    [BX+SI], AL
38000752  00 00              ..      ADD    [BX+SI], AL
38000754  00 00              ..      ADD    [BX+SI], AL
38000756  00 00              ..      ADD    [BX+SI], AL
38000758  00 00              ..      ADD    [BX+SI], AL
3800075A  00 00              ..      ADD    [BX+SI], AL
3800075C  00 00              ..      ADD    [BX+SI], AL
3800075E  00 00              ..      ADD    [BX+SI], AL
38000760  00 00              ..      ADD    [BX+SI], AL
38000762  00 00              ..      ADD    [BX+SI], AL
38000764  00 00              ..      ADD    [BX+SI], AL
38000766  00 00              ..      ADD    [BX+SI], AL
38000768  00 00              ..      ADD    [BX+SI], AL
3800076A  00 00              ..      ADD    [BX+SI], AL
3800076C  00 00              ..      ADD    [BX+SI], AL
3800076E  00 00              ..      ADD    [BX+SI], AL
38000770  00 00              ..      ADD    [BX+SI], AL
38000772  00 00              ..      ADD    [BX+SI], AL
38000774  00 00              ..      ADD    [BX+SI], AL
38000776  00 00              ..      ADD    [BX+SI], AL
38000778  00 00              ..      ADD    [BX+SI], AL
3800077A  00 00              ..      ADD    [BX+SI], AL
3800077C  00 00              ..      ADD    [BX+SI], AL
3800077E  00 00              ..      ADD    [BX+SI], AL
38000780  00 00              ..      ADD    [BX+SI], AL
38000782  00 00              ..      ADD    [BX+SI], AL
38000784  00 00              ..      ADD    [BX+SI], AL
38000786  00 00              ..      ADD    [BX+SI], AL
38000788  00 00              ..      ADD    [BX+SI], AL
3800078A  00 00              ..      ADD    [BX+SI], AL
3800078C  00 00              ..      ADD    [BX+SI], AL
3800078E  00 00              ..      ADD    [BX+SI], AL
38000790  00 00              ..      ADD    [BX+SI], AL
38000792  00 00              ..      ADD    [BX+SI], AL
38000794  00 00              ..      ADD    [BX+SI], AL
38000796  00 00              ..      ADD    [BX+SI], AL
38000798  00 00              ..      ADD    [BX+SI], AL
3800079A  00 00              ..      ADD    [BX+SI], AL
3800079C  00 00              ..      ADD    [BX+SI], AL
3800079E  00 00              ..      ADD    [BX+SI], AL
380007A0  00 00              ..      ADD    [BX+SI], AL
380007A2  00 00              ..      ADD    [BX+SI], AL
380007A4  00 00              ..      ADD    [BX+SI], AL
380007A6  00 00              ..      ADD    [BX+SI], AL
380007A8  00 00              ..      ADD    [BX+SI], AL
380007AA  00 00              ..      ADD    [BX+SI], AL
380007AC  00 00              ..      ADD    [BX+SI], AL
380007AE  00 00              ..      ADD    [BX+SI], AL
380007B0  00 00              ..      ADD    [BX+SI], AL
380007B2  00 00              ..      ADD    [BX+SI], AL
380007B4  00 00              ..      ADD    [BX+SI], AL
380007B6  00 00              ..      ADD    [BX+SI], AL
380007B8  00 00              ..      ADD    [BX+SI], AL
380007BA  00 00              ..      ADD    [BX+SI], AL
380007BC  00 00              ..      ADD    [BX+SI], AL
380007BE  00 00              ..      ADD    [BX+SI], AL
380007C0  00 00              ..      ADD    [BX+SI], AL
380007C2  00 00              ..      ADD    [BX+SI], AL
380007C4  00 00              ..      ADD    [BX+SI], AL
380007C6  00 00              ..      ADD    [BX+SI], AL
380007C8  00 00              ..      ADD    [BX+SI], AL
380007CA  00 00              ..      ADD    [BX+SI], AL
380007CC  00 00              ..      ADD    [BX+SI], AL
380007CE  00 00              ..      ADD    [BX+SI], AL
380007D0  00 00              ..      ADD    [BX+SI], AL
380007D2  00 00              ..      ADD    [BX+SI], AL
380007D4  00 00              ..      ADD    [BX+SI], AL
380007D6  00 00              ..      ADD    [BX+SI], AL
380007D8  00 00              ..      ADD    [BX+SI], AL
380007DA  00 00              ..      ADD    [BX+SI], AL
380007DC  00 00              ..      ADD    [BX+SI], AL
380007DE  00 00              ..      ADD    [BX+SI], AL
380007E0  00 00              ..      ADD    [BX+SI], AL
380007E2  00 00              ..      ADD    [BX+SI], AL
380007E4  00 00              ..      ADD    [BX+SI], AL
380007E6  00 00              ..      ADD    [BX+SI], AL
380007E8  00 00              ..      ADD    [BX+SI], AL
380007EA  00 00              ..      ADD    [BX+SI], AL
380007EC  00 00              ..      ADD    [BX+SI], AL
380007EE  00 00              ..      ADD    [BX+SI], AL
380007F0  00 00              ..      ADD    [BX+SI], AL
380007F2  00 00              ..      ADD    [BX+SI], AL
380007F4  00 00              ..      ADD    [BX+SI], AL
380007F6  00 00              ..      ADD    [BX+SI], AL
380007F8  00 00              ..      ADD    [BX+SI], AL
380007FA  00 00              ..      ADD    [BX+SI], AL
380007FC  00 00              ..      ADD    [BX+SI], AL
380007FE  00 00              ..      ADD    [BX+SI], AL
38000800  00 00              ..      ADD    [BX+SI], AL
38000802  00 00              ..      ADD    [BX+SI], AL
38000804  00 00              ..      ADD    [BX+SI], AL
38000806  00 00              ..      ADD    [BX+SI], AL
38000808  00 00              ..      ADD    [BX+SI], AL
3800080A  00 00              ..      ADD    [BX+SI], AL
3800080C  00 00              ..      ADD    [BX+SI], AL
3800080E  00 00              ..      ADD    [BX+SI], AL
38000810  00 00              ..      ADD    [BX+SI], AL
38000812  00 00              ..      ADD    [BX+SI], AL
38000814  00 00              ..      ADD    [BX+SI], AL
38000816  00 00              ..      ADD    [BX+SI], AL
38000818  00 00              ..      ADD    [BX+SI], AL
3800081A  00 00              ..      ADD    [BX+SI], AL
3800081C  00 00              ..      ADD    [BX+SI], AL
3800081E  00 00              ..      ADD    [BX+SI], AL
38000820  00 00              ..      ADD    [BX+SI], AL
38000822  00 00              ..      ADD    [BX+SI], AL
38000824  00 00              ..      ADD    [BX+SI], AL
38000826  00 00              ..      ADD    [BX+SI], AL
38000828  00 00              ..      ADD    [BX+SI], AL
3800082A  00 00              ..      ADD    [BX+SI], AL
3800082C  00 00              ..      ADD    [BX+SI], AL
3800082E  00 00              ..      ADD    [BX+SI], AL
38000830  00 00              ..      ADD    [BX+SI], AL
38000832  00 00              ..      ADD    [BX+SI], AL
38000834  00 00              ..      ADD    [BX+SI], AL
38000836  00 00              ..      ADD    [BX+SI], AL
38000838  00 00              ..      ADD    [BX+SI], AL
3800083A  00 00              ..      ADD    [BX+SI], AL
3800083C  00 00              ..      ADD    [BX+SI], AL
3800083E  00 00              ..      ADD    [BX+SI], AL
38000840  00 00              ..      ADD    [BX+SI], AL
38000842  00 00              ..      ADD    [BX+SI], AL
38000844  00 00              ..      ADD    [BX+SI], AL
38000846  00 00              ..      ADD    [BX+SI], AL
38000848  00 00              ..      ADD    [BX+SI], AL
3800084A  00 00              ..      ADD    [BX+SI], AL
3800084C  00 00              ..      ADD    [BX+SI], AL
3800084E  00 00              ..      ADD    [BX+SI], AL
38000850  00 00              ..      ADD    [BX+SI], AL
38000852  00 00              ..      ADD    [BX+SI], AL
38000854  00 00              ..      ADD    [BX+SI], AL
38000856  00 00              ..      ADD    [BX+SI], AL
38000858  00 00              ..      ADD    [BX+SI], AL
3800085A  00 00              ..      ADD    [BX+SI], AL
3800085C  00 00              ..      ADD    [BX+SI], AL
3800085E  00 00              ..      ADD    [BX+SI], AL
38000860  00 00              ..      ADD    [BX+SI], AL
38000862  00 00              ..      ADD    [BX+SI], AL
38000864  00 00              ..      ADD    [BX+SI], AL
38000866  00 00              ..      ADD    [BX+SI], AL
38000868  00 00              ..      ADD    [BX+SI], AL
3800086A  00 00              ..      ADD    [BX+SI], AL
3800086C  00 00              ..      ADD    [BX+SI], AL
3800086E  00 00              ..      ADD    [BX+SI], AL
38000870  00 00              ..      ADD    [BX+SI], AL
38000872  00 00              ..      ADD    [BX+SI], AL
38000874  00 00              ..      ADD    [BX+SI], AL
38000876  00 00              ..      ADD    [BX+SI], AL
38000878  00 00              ..      ADD    [BX+SI], AL
3800087A  00 00              ..      ADD    [BX+SI], AL
3800087C  00 00              ..      ADD    [BX+SI], AL
3800087E  00 00              ..      ADD    [BX+SI], AL
38000880  00 00              ..      ADD    [BX+SI], AL
38000882  00 00              ..      ADD    [BX+SI], AL
38000884  00 00              ..      ADD    [BX+SI], AL
38000886  00 00              ..      ADD    [BX+SI], AL
38000888  00 00              ..      ADD    [BX+SI], AL
3800088A  00 00              ..      ADD    [BX+SI], AL
3800088C  00 00              ..      ADD    [BX+SI], AL
3800088E  00 00              ..      ADD    [BX+SI], AL
38000890  00 00              ..      ADD    [BX+SI], AL
38000892  00 00              ..      ADD    [BX+SI], AL
38000894  00 00              ..      ADD    [BX+SI], AL
38000896  00 00              ..      ADD    [BX+SI], AL
38000898  00 00              ..      ADD    [BX+SI], AL
3800089A  00 00              ..      ADD    [BX+SI], AL
3800089C  00 00              ..      ADD    [BX+SI], AL
3800089E  00 00              ..      ADD    [BX+SI], AL
380008A0  00 00              ..      ADD    [BX+SI], AL
380008A2  00 00              ..      ADD    [BX+SI], AL
380008A4  00 00              ..      ADD    [BX+SI], AL
380008A6  00 00              ..      ADD    [BX+SI], AL
380008A8  00 00              ..      ADD    [BX+SI], AL
380008AA  00 00              ..      ADD    [BX+SI], AL
380008AC  00 00              ..      ADD    [BX+SI], AL
380008AE  00 00              ..      ADD    [BX+SI], AL
380008B0  00 00              ..      ADD    [BX+SI], AL
380008B2  00 00              ..      ADD    [BX+SI], AL
380008B4  00 00              ..      ADD    [BX+SI], AL
380008B6  00 00              ..      ADD    [BX+SI], AL
380008B8  00 00              ..      ADD    [BX+SI], AL
380008BA  00 00              ..      ADD    [BX+SI], AL
380008BC  00 00              ..      ADD    [BX+SI], AL
380008BE  00 00              ..      ADD    [BX+SI], AL
380008C0  00 00              ..      ADD    [BX+SI], AL
380008C2  00 00              ..      ADD    [BX+SI], AL
380008C4  00 00              ..      ADD    [BX+SI], AL
380008C6  00 00              ..      ADD    [BX+SI], AL
380008C8  00 00              ..      ADD    [BX+SI], AL
380008CA  00 00              ..      ADD    [BX+SI], AL
380008CC  00 00              ..      ADD    [BX+SI], AL
380008CE  00 00              ..      ADD    [BX+SI], AL
380008D0  00 00              ..      ADD    [BX+SI], AL
380008D2  00 00              ..      ADD    [BX+SI], AL
380008D4  00 00              ..      ADD    [BX+SI], AL
380008D6  00 00              ..      ADD    [BX+SI], AL
380008D8  00 00              ..      ADD    [BX+SI], AL
380008DA  00 00              ..      ADD    [BX+SI], AL
380008DC  00 00              ..      ADD    [BX+SI], AL
380008DE  00 00              ..      ADD    [BX+SI], AL
380008E0  00 00              ..      ADD    [BX+SI], AL
380008E2  00 00              ..      ADD    [BX+SI], AL
380008E4  00 00              ..      ADD    [BX+SI], AL
380008E6  00 00              ..      ADD    [BX+SI], AL
380008E8  00 00              ..      ADD    [BX+SI], AL
380008EA  00 00              ..      ADD    [BX+SI], AL
380008EC  00 00              ..      ADD    [BX+SI], AL
380008EE  00 00              ..      ADD    [BX+SI], AL
380008F0  00 00              ..      ADD    [BX+SI], AL
380008F2  00 00              ..      ADD    [BX+SI], AL
380008F4  00 00              ..      ADD    [BX+SI], AL
380008F6  00 00              ..      ADD    [BX+SI], AL
380008F8  00 00              ..      ADD    [BX+SI], AL
380008FA  00 00              ..      ADD    [BX+SI], AL
380008FC  00 00              ..      ADD    [BX+SI], AL
380008FE  00 00              ..      ADD    [BX+SI], AL
