; ---------------------------------------------------------------------------

MsgOffs         struc ; (sizeof=0X96)
field_0         dw ?                    ; offset (00010000)
field_1         dw ?                    ; offset (00010000)
field_2         dw ?                    ; offset (00010000)
field_3         dw ?                    ; offset (00010000)
field_4         dw ?                    ; offset (00010000)
field_5         dw ?                    ; offset (00010000)
field_6         dw ?                    ; offset (00010000)
field_7         dw ?                    ; offset (00010000)
field_8         dw ?                    ; offset (00010000)
field_9         dw ?                    ; offset (00010000)
field_A         dw ?                    ; offset (00010000)
field_B         dw ?                    ; offset (00010000)
field_C         dw ?                    ; offset (00010000)
field_D         dw ?                    ; offset (00010000)
field_E         dw ?                    ; offset (00010000)
field_F         dw ?                    ; offset (00010000)
field_10        dw ?                    ; offset (00010000)
field_11        dw ?                    ; offset (00010000)
field_12        dw ?                    ; offset (00010000)
field_13        dw ?                    ; offset (00010000)
field_14        dw ?                    ; offset (00010000)
field_15        dw ?                    ; offset (00010000)
field_16        dw ?                    ; offset (00010000)
field_17        dw ?                    ; offset (00010000)
field_18        dw ?                    ; offset (00010000)
field_19        dw ?                    ; offset (00010000)
field_1A        dw ?                    ; offset (00010000)
field_1B        dw ?                    ; offset (00010000)
field_1C        dw ?                    ; offset (00010000)
field_1D        dw ?                    ; offset (00010000)
field_1E        dw ?                    ; offset (00010000)
field_1F        dw ?                    ; offset (00010000)
field_20        dw ?                    ; offset (00010000)
field_21        dw ?                    ; offset (00010000)
field_22        dw ?                    ; offset (00010000)
field_23        dw ?                    ; offset (00010000)
field_24        dw ?                    ; offset (00010000)
field_25        dw ?                    ; offset (00010000)
field_26        dw ?                    ; offset (00010000)
field_27        dw ?                    ; offset (00010000)
field_28        dw ?                    ; offset (00010000)
field_29        dw ?                    ; offset (00010000)
field_2A        dw ?                    ; offset (00010000)
field_2B        dw ?                    ; offset (00010000)
field_2C        dw ?                    ; offset (00010000)
field_2D        dw ?                    ; offset (00010000)
field_2E        dw ?                    ; offset (00010000)
field_2F        dw ?                    ; offset (00010000)
field_30        dw ?                    ; offset (00010000)
field_31        dw ?                    ; offset (00010000)
field_32        dw ?                    ; offset (00010000)
field_33        dw ?                    ; offset (00010000)
field_34        dw ?                    ; offset (00010000)
field_35        dw ?                    ; offset (00010000)
field_36        dw ?                    ; offset (00010000)
field_37        dw ?                    ; offset (00010000)
field_38        dw ?                    ; offset (00010000)
field_39        dw ?                    ; offset (00010000)
field_3A        dw ?                    ; offset (00010000)
field_3B        dw ?                    ; offset (00010000)
field_3C        dw ?                    ; offset (00010000)
field_3D        dw ?                    ; offset (00010000)
field_3E        dw ?                    ; offset (00010000)
field_3F        dw ?                    ; offset (00010000)
field_40        dw ?                    ; offset (00010000)
field_41        dw ?                    ; offset (00010000)
field_42        dw ?                    ; offset (00010000)
field_43        dw ?                    ; offset (00010000)
field_44        dw ?                    ; offset (00010000)
field_45        dw ?                    ; offset (00010000)
field_46        dw ?                    ; offset (00010000)
field_47        dw ?                    ; offset (00010000)
field_48        dw ?                    ; offset (00010000)
field_49        dw ?                    ; offset (00010000)
field_4A        dw ?                    ; offset (00010000)
MsgOffs         ends

; ---------------------------------------------------------------------------

Stru_MSG0       struc ; (sizeof=0X1D)
field_0         db 3 dup(?)             ; string(C)
field_3         db ?
field_4         db 25 dup(?)            ; string(C)
Stru_MSG0       ends

; ---------------------------------------------------------------------------

DMACountList    struc ; (sizeof=0X12)
field_0         dw ?
field_2         dw ?
field_4         dw ?
field_6         dw ?
Apple           dw ?
FM              dw ?
field_C         dw ?
MFM             dw ?
Amiga           dw ?
DMACountList    ends

; ---------------------------------------------------------------------------

struc_5F60      struc ; (sizeof=0X4)
Drive0          db ?
Drive1          db ?
Drive2          db ?
Drive3          db ?
struc_5F60      ends

; ---------------------------------------------------------------------------

struc_5F64      struc ; (sizeof=0X8)
Drive0          dw ?
Drive1          dw ?
Drive2          dw ?
Drive3          dw ?
struc_5F64      ends

; ---------------------------------------------------------------------------

Stru_MSG1       struc ; (sizeof=0X1A)
field_0         db 2 dup(?)             ; string(C)
field_2         db ?
field_3         db ?
field_4         db 18 dup(?)            ; string(C)
field_16        db ?
field_17        db ?
field_18        db 2 dup(?)             ; string(C)
Stru_MSG1       ends

; ---------------------------------------------------------------------------

Stru_MSG2       struc ; (sizeof=0X53)
field_0         db 2 dup(?)             ; string(C)
field_2         db ?
field_3         db 80 dup(?)            ; string(C)
Stru_MSG2       ends

; ---------------------------------------------------------------------------

Stru_MSG3       struc ; (sizeof=0X1A)
field_0         db 3 dup(?)             ; string(C)
field_3         db ?
field_4         db ?
field_5         db 18 dup(?)            ; string(C)
field_17        db ?
field_18        db ?
field_19        db ?                    ; string(C)
Stru_MSG3       ends

; ---------------------------------------------------------------------------

Stru_MSG4       struc ; (sizeof=0X19)
field_0         db 2 dup(?)             ; string(C)
field_2         db ?
field_3         db ?
field_4         db 18 dup(?)            ; string(C)
field_16        db ?
field_17        db ?
field_18        db ?                    ; string(C)
Stru_MSG4       ends

; ---------------------------------------------------------------------------

Stru_MSG5       struc ; (sizeof=0X1A)
field_0         db 3 dup(?)             ; string(C)
field_3         db ?
field_4         db ?
field_5         db 18 dup(?)            ; string(C)
field_17        db ?
field_18        db ?
field_19        db ?                    ; string(C)
Stru_MSG5       ends

; ---------------------------------------------------------------------------

Stru_MSG6       struc ; (sizeof=0X1A)
field_0         db 2 dup(?)             ; string(C)
field_2         db ?
field_3         db ?
field_4         db 19 dup(?)            ; string(C)
field_17        db ?
field_18        db ?
field_19        db ?                    ; string(C)
Stru_MSG6       ends

; ---------------------------------------------------------------------------

Stru_MSG7       struc ; (sizeof=0X1A)
field_0         db 2 dup(?)             ; string(C)
field_2         db ?
field_3         db ?
field_4         db 19 dup(?)            ; string(C)
field_17        db ?
field_18        db ?
field_19        db ?                    ; string(C)
Stru_MSG7       ends

; ---------------------------------------------------------------------------

Stru_MSG8       struc ; (sizeof=0X1A)
field_0         db 2 dup(?)             ; string(C)
field_2         db ?
field_3         db ?
field_4         db 19 dup(?)            ; string(C)
field_17        db ?
field_18        db ?
field_19        db ?                    ; string(C)
Stru_MSG8       ends

; ---------------------------------------------------------------------------

Stru_MSG9       struc ; (sizeof=0X53)
field_0         db ?
field_1         db ?
field_2         db 81 dup(?)            ; string(C)
Stru_MSG9       ends

; ---------------------------------------------------------------------------

Stru_MSGA       struc ; (sizeof=0XC2)
field_0         db 30 dup(?)            ; string(C)
field_1E        db ?
field_1F        db ?
field_20        db 46 dup(?)            ; string(C)
field_4E        db ?
field_4F        db ?
field_50        db 5 dup(?)             ; string(C)
field_55        db ?
field_56        db ?
field_57        db 19 dup(?)            ; string(C)
field_6A        db ?
field_6B        db ?
field_6C        db ?                    ; string(C)
field_6D        db ?
field_6E        db ?
field_6F        db 33 dup(?)            ; string(C)
field_90        db ?
field_91        db ?
field_92        db 3 dup(?)             ; string(C)
field_95        db ?
field_96        db ?
field_97        db 21 dup(?)            ; string(C)
field_AC        db ?
field_AD        db ?
field_AE        db 5 dup(?)             ; string(C)
field_B3        db ?
field_B4        db ?
field_B5        db 10 dup(?)            ; string(C)
field_BF        db ?
field_C0        db ?
field_C1        db ?                    ; string(C)
Stru_MSGA       ends

; ---------------------------------------------------------------------------

Stru_MSGB       struc ; (sizeof=0X1B)
field_0         db 3 dup(?)             ; string(C)
field_3         db ?
field_4         db ?
field_5         db 19 dup(?)            ; string(C)
field_18        db ?
field_19        db ?
field_1A        db ?                    ; string(C)
Stru_MSGB       ends

; ---------------------------------------------------------------------------

Stru_MSGC       struc ; (sizeof=0X1A)
field_0         db 2 dup(?)             ; string(C)
field_2         db ?
field_3         db ?
field_4         db 19 dup(?)            ; string(C)
field_17        db ?
field_18        db ?
field_19        db ?                    ; string(C)
Stru_MSGC       ends

; ---------------------------------------------------------------------------

Stru_MSGD       struc ; (sizeof=0X1B)
field_0         db 3 dup(?)             ; string(C)
field_3         db ?
field_4         db ?
field_5         db 19 dup(?)            ; string(C)
field_18        db ?
field_19        db ?
field_1A        db ?                    ; string(C)
Stru_MSGD       ends

; ---------------------------------------------------------------------------

Stru_MSGE       struc ; (sizeof=0X124)
field_0         db 16 dup(?)            ; string(C)
field_10        db ?
field_11        db ?
field_12        db 68 dup(?)            ; string(C)
field_56        db ?
field_57        db ?
field_58        db 18 dup(?)            ; string(C)
field_6A        db ?
field_6B        db ?
field_6C        db 14 dup(?)            ; string(C)
field_7A        db ?
field_7B        db ?
field_7C        db 36 dup(?)            ; string(C)
field_A0        db ?
field_A1        db ?
field_A2        db 3 dup(?)             ; string(C)
field_A5        db ?
field_A6        db ?
field_A7        db 45 dup(?)            ; string(C)
field_D4        db ?
field_D5        db ?
field_D6        db 20 dup(?)            ; string(C)
field_EA        db ?
field_EB        db ?
field_EC        db 50 dup(?)            ; string(C)
field_11E       db ?
field_11F       db ?
field_120       db 4 dup(?)             ; string(C)
Stru_MSGE       ends

; ---------------------------------------------------------------------------

Stru_MSGF       struc ; (sizeof=0X41)
field_0         db ?
field_1         db ?
field_2         db ?
field_3         db ?
field_4         db 6 dup(?)             ; string(C)
field_A         db ?
field_B         db ?
field_C         db ?                    ; string(C)
field_D         db ?
field_E         db ?
field_F         db 13 dup(?)            ; string(C)
field_1C        db ?
field_1D        db ?
field_1E        db ?
field_1F        db ?
field_20        db 6 dup(?)             ; string(C)
field_26        db ?
field_27        db ?
field_28        db 5 dup(?)             ; string(C)
field_2D        db ?
field_2E        db ?
field_2F        db 15 dup(?)            ; string(C)
field_3E        db ?
field_3F        db ?
field_40        db ?                    ; string(C)
Stru_MSGF       ends

; ---------------------------------------------------------------------------

Stru_MSG10      struc ; (sizeof=0XB1)
field_0         db ?
field_1         db ?
field_2         db 172 dup(?)           ; string(C)
field_AE        db ?
field_AF        db ?
field_B0        db ?                    ; string(C)
Stru_MSG10      ends

; ---------------------------------------------------------------------------

Stru_MSG11      struc ; (sizeof=0XD)
field_0         db ?
field_1         db ?
field_2         db 8 dup(?)             ; string(C)
field_A         db ?
field_B         db ?
field_C         db ?                    ; string(C)
Stru_MSG11      ends

; ---------------------------------------------------------------------------

Stru_MSG12      struc ; (sizeof=0X10)
field_0         db 16 dup(?)            ; string(C)
Stru_MSG12      ends

; ---------------------------------------------------------------------------

Stru_MSG13      struc ; (sizeof=0X6E)
field_0         db ?
field_1         db ?
field_2         db ?
field_3         db ?
field_4         db ?
field_5         db 20 dup(?)            ; string(C)
field_19        db ?
field_1A        db ?
field_1B        db ?
field_1C        db ?
field_1D        db 15 dup(?)            ; string(C)
field_2C        db ?
field_2D        db ?
field_2E        db 3 dup(?)             ; string(C)
field_31        db ?
field_32        db ?
field_33        db 6 dup(?)             ; string(C)
field_39        db ?
field_3A        db ?
field_3B        db ?                    ; string(C)
field_3C        db ?
field_3D        db ?
field_3E        db 13 dup(?)            ; string(C)
field_4B        db ?
field_4C        db ?
field_4D        db 6 dup(?)             ; string(C)
field_53        db ?
field_54        db ?
field_55        db 5 dup(?)             ; string(C)
field_5A        db ?
field_5B        db ?
field_5C        db 15 dup(?)            ; string(C)
field_6B        db ?
field_6C        db ?
field_6D        db ?                    ; string(C)
Stru_MSG13      ends

; ---------------------------------------------------------------------------

Stru_MSG14      struc ; (sizeof=0XAA)
field_0         db ?
field_1         db ?
field_2         db ?
field_3         db ?
field_4         db 33 dup(?)            ; string(C)
field_25        db ?
field_26        db ?
field_27        db ?                    ; string(C)
field_28        db ?
field_29        db ?
field_2A        db ?
field_2B        db ?
field_2C        db 8 dup(?)             ; string(C)
field_34        db ?
field_35        db ?
field_36        db ?
field_37        db ?
field_38        db 3 dup(?)             ; string(C)
field_3B        db ?
field_3C        db ?
field_3D        db 33 dup(?)            ; string(C)
field_5E        db ?
field_5F        db ?
field_60        db ?                    ; string(C)
field_61        db ?
field_62        db ?
field_63        db 3 dup(?)             ; string(C)
field_66        db ?
field_67        db ?
field_68        db ?                    ; string(C)
field_69        db ?
field_6A        db ?
field_6B        db 3 dup(?)             ; string(C)
field_6E        db ?
field_6F        db ?
field_70        db ?                    ; string(C)
field_71        db ?
field_72        db ?
field_73        db 3 dup(?)             ; string(C)
field_76        db ?
field_77        db ?
field_78        db ?                    ; string(C)
field_79        db ?
field_7A        db ?
field_7B        db 3 dup(?)             ; string(C)
field_7E        db ?
field_7F        db ?
field_80        db ?                    ; string(C)
field_81        db ?
field_82        db ?
field_83        db 3 dup(?)             ; string(C)
field_86        db ?
field_87        db ?
field_88        db 31 dup(?)            ; string(C)
field_A7        db ?
field_A8        db ?
field_A9        db ?                    ; string(C)
Stru_MSG14      ends

; ---------------------------------------------------------------------------

Stru_MSG15      struc ; (sizeof=0X3C)
field_0         db ?
field_1         db ?
field_2         db ?
field_3         db ?
field_4         db 7 dup(?)             ; string(C)
field_B         db ?
field_C         db ?
field_D         db 6 dup(?)             ; string(C)
field_13        db ?
field_14        db ?
field_15        db 12 dup(?)            ; string(C)
field_21        db ?
field_22        db ?
field_23        db 10 dup(?)            ; string(C)
field_2D        db ?
field_2E        db ?
field_2F        db 5 dup(?)             ; string(C)
field_34        db ?
field_35        db ?
field_36        db 3 dup(?)             ; string(C)
field_39        db ?
field_3A        db ?
field_3B        db ?                    ; string(C)
Stru_MSG15      ends

; ---------------------------------------------------------------------------

Stru_MSG16      struc ; (sizeof=0X3B)
field_0         db ?
field_1         db ?
field_2         db ?
field_3         db ?
field_4         db 7 dup(?)             ; string(C)
field_B         db ?
field_C         db ?
field_D         db 6 dup(?)             ; string(C)
field_13        db ?
field_14        db ?
field_15        db 11 dup(?)            ; string(C)
field_20        db ?
field_21        db ?
field_22        db 10 dup(?)            ; string(C)
field_2C        db ?
field_2D        db ?
field_2E        db 5 dup(?)             ; string(C)
field_33        db ?
field_34        db ?
field_35        db 3 dup(?)             ; string(C)
field_38        db ?
field_39        db ?
field_3A        db ?                    ; string(C)
Stru_MSG16      ends

; ---------------------------------------------------------------------------

Stru_MSG17      struc ; (sizeof=0XA4)
field_0         db ?
field_1         db ?
field_2         db 31 dup(?)            ; string(C)
field_21        db ?
field_22        db ?
field_23        db 31 dup(?)            ; string(C)
field_42        db ?
field_43        db ?
field_44        db 31 dup(?)            ; string(C)
field_63        db ?
field_64        db ?
field_65        db 31 dup(?)            ; string(C)
field_84        db ?
field_85        db ?
field_86        db 30 dup(?)            ; string(C)
Stru_MSG17      ends

; ---------------------------------------------------------------------------

Stru_MSG18      struc ; (sizeof=0X6A)
field_0         db ?
field_1         db ?
field_2         db ?
field_3         db ?
field_4         db ?
field_5         db 19 dup(?)            ; string(C)
field_18        db ?
field_19        db ?
field_1A        db ?
field_1B        db ?
field_1C        db 6 dup(?)             ; string(C)
field_22        db ?
field_23        db ?
field_24        db 9 dup(?)             ; string(C)
field_2D        db ?
field_2E        db ?
field_2F        db 6 dup(?)             ; string(C)
field_35        db ?
field_36        db ?
field_37        db ?                    ; string(C)
field_38        db ?
field_39        db ?
field_3A        db 13 dup(?)            ; string(C)
field_47        db ?
field_48        db ?
field_49        db 6 dup(?)             ; string(C)
field_4F        db ?
field_50        db ?
field_51        db 5 dup(?)             ; string(C)
field_56        db ?
field_57        db ?
field_58        db 15 dup(?)            ; string(C)
field_67        db ?
field_68        db ?
field_69        db ?                    ; string(C)
Stru_MSG18      ends

; ---------------------------------------------------------------------------

Stru_MSG19      struc ; (sizeof=0X6B)
field_0         db ?
field_1         db ?
field_2         db ?
field_3         db ?
field_4         db ?
field_5         db 20 dup(?)            ; string(C)
field_19        db ?
field_1A        db ?
field_1B        db ?
field_1C        db ?
field_1D        db 6 dup(?)             ; string(C)
field_23        db ?
field_24        db ?
field_25        db 9 dup(?)             ; string(C)
field_2E        db ?
field_2F        db ?
field_30        db 6 dup(?)             ; string(C)
field_36        db ?
field_37        db ?
field_38        db ?                    ; string(C)
field_39        db ?
field_3A        db ?
field_3B        db 13 dup(?)            ; string(C)
field_48        db ?
field_49        db ?
field_4A        db 6 dup(?)             ; string(C)
field_50        db ?
field_51        db ?
field_52        db 5 dup(?)             ; string(C)
field_57        db ?
field_58        db ?
field_59        db 15 dup(?)            ; string(C)
field_68        db ?
field_69        db ?
field_6A        db ?                    ; string(C)
Stru_MSG19      ends

; ---------------------------------------------------------------------------

Stru_MSG1A      struc ; (sizeof=0X6A)
field_0         db ?
field_1         db ?
field_2         db ?
field_3         db ?
field_4         db ?
field_5         db 19 dup(?)            ; string(C)
field_18        db ?
field_19        db ?
field_1A        db ?
field_1B        db ?
field_1C        db 6 dup(?)             ; string(C)
field_22        db ?
field_23        db ?
field_24        db 9 dup(?)             ; string(C)
field_2D        db ?
field_2E        db ?
field_2F        db 6 dup(?)             ; string(C)
field_35        db ?
field_36        db ?
field_37        db ?                    ; string(C)
field_38        db ?
field_39        db ?
field_3A        db 13 dup(?)            ; string(C)
field_47        db ?
field_48        db ?
field_49        db 6 dup(?)             ; string(C)
field_4F        db ?
field_50        db ?
field_51        db 5 dup(?)             ; string(C)
field_56        db ?
field_57        db ?
field_58        db 15 dup(?)            ; string(C)
field_67        db ?
field_68        db ?
field_69        db ?                    ; string(C)
Stru_MSG1A      ends

; ---------------------------------------------------------------------------

Stru_MSG1B      struc ; (sizeof=0X68)
field_0         db ?
field_1         db ?
field_2         db ?
field_3         db ?
field_4         db ?
field_5         db 24 dup(?)            ; string(C)
field_1D        db ?
field_1E        db ?
field_1F        db 12 dup(?)            ; string(C)
field_2B        db ?
field_2C        db ?
field_2D        db 6 dup(?)             ; string(C)
field_33        db ?
field_34        db ?
field_35        db ?                    ; string(C)
field_36        db ?
field_37        db ?
field_38        db 13 dup(?)            ; string(C)
field_45        db ?
field_46        db ?
field_47        db 6 dup(?)             ; string(C)
field_4D        db ?
field_4E        db ?
field_4F        db 5 dup(?)             ; string(C)
field_54        db ?
field_55        db ?
field_56        db 15 dup(?)            ; string(C)
field_65        db ?
field_66        db ?
field_67        db ?                    ; string(C)
Stru_MSG1B      ends

; ---------------------------------------------------------------------------

Stru_MSG1C      struc ; (sizeof=0X51)
field_0         db ?
field_1         db ?
field_2         db ?
field_3         db ?
field_4         db 25 dup(?)            ; string(C)
field_1D        db ?
field_1E        db ?
field_1F        db 25 dup(?)            ; string(C)
field_38        db ?
field_39        db ?
field_3A        db 20 dup(?)            ; string(C)
field_4E        db ?
field_4F        db ?
field_50        db ?                    ; string(C)
Stru_MSG1C      ends

; ---------------------------------------------------------------------------

Stru_MSG1D      struc ; (sizeof=0X81)
field_0         db ?
field_1         db ?
field_2         db ?
field_3         db ?
field_4         db 25 dup(?)            ; string(C)
field_1D        db ?
field_1E        db ?
field_1F        db 25 dup(?)            ; string(C)
field_38        db ?
field_39        db ?
field_3A        db 22 dup(?)            ; string(C)
field_50        db ?
field_51        db ?
field_52        db 29 dup(?)            ; string(C)
field_6F        db ?
field_70        db ?
field_71        db 13 dup(?)            ; string(C)
field_7E        db ?
field_7F        db ?
field_80        db ?                    ; string(C)
Stru_MSG1D      ends

; ---------------------------------------------------------------------------

Stru_MSG1E      struc ; (sizeof=0X5C)
field_0         db ?
field_1         db ?
field_2         db ?
field_3         db ?
field_4         db 28 dup(?)            ; string(C)
field_20        db ?
field_21        db ?
field_22        db 28 dup(?)            ; string(C)
field_3E        db ?
field_3F        db ?
field_40        db 25 dup(?)            ; string(C)
field_59        db ?
field_5A        db ?
field_5B        db ?                    ; string(C)
Stru_MSG1E      ends

; ---------------------------------------------------------------------------

Stru_MSG1F      struc ; (sizeof=0X5B)
field_0         db ?
field_1         db ?
field_2         db ?
field_3         db ?
field_4         db 27 dup(?)            ; string(C)
field_1F        db ?
field_20        db ?
field_21        db 28 dup(?)            ; string(C)
field_3D        db ?
field_3E        db ?
field_3F        db 25 dup(?)            ; string(C)
field_58        db ?
field_59        db ?
field_5A        db ?                    ; string(C)
Stru_MSG1F      ends

; ---------------------------------------------------------------------------

Stru_MSG20      struc ; (sizeof=0X31)
field_0         db ?
field_1         db ?
field_2         db ?
field_3         db ?
field_4         db 23 dup(?)            ; string(C)
field_1B        db ?
field_1C        db ?
field_1D        db 17 dup(?)            ; string(C)
field_2E        db ?
field_2F        db ?
field_30        db ?                    ; string(C)
Stru_MSG20      ends

; ---------------------------------------------------------------------------

Stru_MSG21      struc ; (sizeof=0X31)
field_0         db ?
field_1         db ?
field_2         db ?
field_3         db ?
field_4         db 23 dup(?)            ; string(C)
field_1B        db ?
field_1C        db ?
field_1D        db 17 dup(?)            ; string(C)
field_2E        db ?
field_2F        db ?
field_30        db ?                    ; string(C)
Stru_MSG21      ends

; ---------------------------------------------------------------------------

Stru_MSG22      struc ; (sizeof=0XA7)
field_0         db 30 dup(?)            ; string(C)
field_1E        db ?
field_1F        db ?
field_20        db 46 dup(?)            ; string(C)
field_4E        db ?
field_4F        db ?
field_50        db 5 dup(?)             ; string(C)
field_55        db ?
field_56        db ?
field_57        db 19 dup(?)            ; string(C)
field_6A        db ?
field_6B        db ?
field_6C        db ?                    ; string(C)
field_6D        db ?
field_6E        db ?
field_6F        db 33 dup(?)            ; string(C)
field_90        db ?
field_91        db ?
field_92        db 3 dup(?)             ; string(C)
field_95        db ?
field_96        db ?
field_97        db 13 dup(?)            ; string(C)
field_A4        db ?
field_A5        db ?
field_A6        db ?                    ; string(C)
Stru_MSG22      ends

; ---------------------------------------------------------------------------

Stru_MSG23      struc ; (sizeof=0X1F2)
field_0         db 3 dup(?)             ; string(C)
field_3         db ?
field_4         db ?
field_5         db 488 dup(?)           ; string(C)
field_1ED       db ?
field_1EE       db ?
field_1EF       db 3 dup(?)             ; string(C)
Stru_MSG23      ends

; ---------------------------------------------------------------------------

Stru_MSG24      struc ; (sizeof=0X26)
field_0         db 2 dup(?)             ; string(C)
field_2         db ?
field_3         db ?
field_4         db 31 dup(?)            ; string(C)
field_23        db ?
field_24        db ?
field_25        db ?                    ; string(C)
Stru_MSG24      ends

; ---------------------------------------------------------------------------

Stru_MSG25      struc ; (sizeof=0X27)
field_0         db 3 dup(?)             ; string(C)
field_3         db ?
field_4         db ?
field_5         db 31 dup(?)            ; string(C)
field_24        db ?
field_25        db ?
field_26        db ?                    ; string(C)
Stru_MSG25      ends

; ---------------------------------------------------------------------------

Stru_MSG26      struc ; (sizeof=0X29)
field_0         db 2 dup(?)             ; string(C)
field_2         db ?
field_3         db ?
field_4         db 34 dup(?)            ; string(C)
field_26        db ?
field_27        db ?
field_28        db ?                    ; string(C)
Stru_MSG26      ends

; ---------------------------------------------------------------------------

Stru_MSG27      struc ; (sizeof=0X25)
field_0         db 2 dup(?)             ; string(C)
field_2         db ?
field_3         db ?
field_4         db 29 dup(?)            ; string(C)
field_21        db ?
field_22        db ?
field_23        db 2 dup(?)             ; string(C)
Stru_MSG27      ends

; ---------------------------------------------------------------------------

Stru_MSG28      struc ; (sizeof=0X2F)
field_0         db 2 dup(?)             ; string(C)
field_2         db ?
field_3         db ?
field_4         db 40 dup(?)            ; string(C)
field_2C        db ?
field_2D        db ?
field_2E        db ?                    ; string(C)
Stru_MSG28      ends

; ---------------------------------------------------------------------------

Stru_MSG29      struc ; (sizeof=0X2A)
field_0         db 2 dup(?)             ; string(C)
field_2         db ?
field_3         db ?
field_4         db ?
field_5         db 32 dup(?)            ; string(C)
field_25        db ?
field_26        db ?
field_27        db 3 dup(?)             ; string(C)
Stru_MSG29      ends

; ---------------------------------------------------------------------------

Stru_MSG2A      struc ; (sizeof=0X25)
field_0         db 2 dup(?)             ; string(C)
field_2         db ?
field_3         db ?
field_4         db 28 dup(?)            ; string(C)
field_20        db ?
field_21        db ?
field_22        db 3 dup(?)             ; string(C)
Stru_MSG2A      ends

; ---------------------------------------------------------------------------

Stru_MSG2B      struc ; (sizeof=0X61)
field_0         db 3 dup(?)             ; string(C)
field_3         db ?
field_4         db 93 dup(?)            ; string(C)
Stru_MSG2B      ends

; ---------------------------------------------------------------------------

Stru_MSG2C      struc ; (sizeof=0X1F)
field_0         db 3 dup(?)             ; string(C)
field_3         db ?
field_4         db 27 dup(?)            ; string(C)
Stru_MSG2C      ends

; ---------------------------------------------------------------------------

Stru_MSG2D      struc ; (sizeof=0X1F)
field_0         db 2 dup(?)             ; string(C)
field_2         db ?
field_3         db ?
field_4         db 24 dup(?)            ; string(C)
field_1C        db ?
field_1D        db ?
field_1E        db ?                    ; string(C)
Stru_MSG2D      ends

; ---------------------------------------------------------------------------

Stru_MSG2E      struc ; (sizeof=0X29)
field_0         db 2 dup(?)             ; string(C)
field_2         db ?
field_3         db ?
field_4         db ?
field_5         db 31 dup(?)            ; string(C)
field_24        db ?
field_25        db ?
field_26        db 3 dup(?)             ; string(C)
Stru_MSG2E      ends

; ---------------------------------------------------------------------------

Stru_MSG2F      struc ; (sizeof=0X9C)
field_0         db 3 dup(?)             ; string(C)
field_3         db ?
field_4         db 152 dup(?)           ; string(C)
Stru_MSG2F      ends

; ---------------------------------------------------------------------------

Stru_MSG30      struc ; (sizeof=0X29)
field_0         db 2 dup(?)             ; string(C)
field_2         db ?
field_3         db ?
field_4         db ?
field_5         db 31 dup(?)            ; string(C)
field_24        db ?
field_25        db ?
field_26        db 3 dup(?)             ; string(C)
Stru_MSG30      ends

; ---------------------------------------------------------------------------

Stru_MSG31      struc ; (sizeof=0X55)
field_0         db ?
field_1         db ?
field_2         db ?
field_3         db ?
field_4         db ?
field_5         db 26 dup(?)            ; string(C)
field_1F        db ?
field_20        db ?
field_21        db 10 dup(?)            ; string(C)
field_2B        db ?
field_2C        db ?
field_2D        db 23 dup(?)            ; string(C)
field_44        db ?
field_45        db ?
field_46        db 12 dup(?)            ; string(C)
field_52        db ?
field_53        db ?
field_54        db ?                    ; string(C)
Stru_MSG31      ends

; ---------------------------------------------------------------------------

Stru_MSG32      struc ; (sizeof=0X5B)
field_0         db ?
field_1         db ?
field_2         db ?
field_3         db ?
field_4         db ?
field_5         db 22 dup(?)            ; string(C)
field_1B        db ?
field_1C        db ?
field_1D        db 18 dup(?)            ; string(C)
field_2F        db ?
field_30        db ?
field_31        db 25 dup(?)            ; string(C)
field_4A        db ?
field_4B        db ?
field_4C        db 12 dup(?)            ; string(C)
field_58        db ?
field_59        db ?
field_5A        db ?                    ; string(C)
Stru_MSG32      ends

; ---------------------------------------------------------------------------

Stru_MSG33      struc ; (sizeof=0X64)
field_0         db ?
field_1         db ?
field_2         db ?
field_3         db ?
field_4         db ?
field_5         db 26 dup(?)            ; string(C)
field_1F        db ?
field_20        db ?
field_21        db 11 dup(?)            ; string(C)
field_2C        db ?
field_2D        db ?
field_2E        db 25 dup(?)            ; string(C)
field_47        db ?
field_48        db ?
field_49        db 24 dup(?)            ; string(C)
field_61        db ?
field_62        db ?
field_63        db ?                    ; string(C)
Stru_MSG33      ends

; ---------------------------------------------------------------------------

Stru_MSG34      struc ; (sizeof=0X39)
field_0         db ?
field_1         db ?
field_2         db ?
field_3         db ?
field_4         db ?
field_5         db 21 dup(?)            ; string(C)
field_1A        db ?
field_1B        db ?
field_1C        db 26 dup(?)            ; string(C)
field_36        db ?
field_37        db ?
field_38        db ?                    ; string(C)
Stru_MSG34      ends

; ---------------------------------------------------------------------------

Stru_MSG35      struc ; (sizeof=0X4F)
field_0         db ?
field_1         db ?
field_2         db ?
field_3         db ?
field_4         db ?
field_5         db 25 dup(?)            ; string(C)
field_1E        db ?
field_1F        db ?
field_20        db 16 dup(?)            ; string(C)
field_30        db ?
field_31        db ?
field_32        db 26 dup(?)            ; string(C)
field_4C        db ?
field_4D        db ?
field_4E        db ?                    ; string(C)
Stru_MSG35      ends

; ---------------------------------------------------------------------------

Stru_MSG36      struc ; (sizeof=0X21)
field_0         db ?
field_1         db ?
field_2         db 28 dup(?)            ; string(C)
field_1E        db ?
field_1F        db ?
field_20        db ?                    ; string(C)
Stru_MSG36      ends

; ---------------------------------------------------------------------------

Stru_MSG37      struc ; (sizeof=0X3D)
field_0         db ?
field_1         db ?
field_2         db ?
field_3         db ?
field_4         db 16 dup(?)            ; string(C)
field_14        db ?
field_15        db ?
field_16        db 22 dup(?)            ; string(C)
field_2C        db ?
field_2D        db ?
field_2E        db 12 dup(?)            ; string(C)
field_3A        db ?
field_3B        db ?
field_3C        db ?                    ; string(C)
Stru_MSG37      ends

; ---------------------------------------------------------------------------

Stru_MSG38      struc ; (sizeof=0X3D)
field_0         db ?
field_1         db ?
field_2         db ?
field_3         db ?
field_4         db ?
field_5         db 15 dup(?)            ; string(C)
field_14        db ?
field_15        db ?
field_16        db 22 dup(?)            ; string(C)
field_2C        db ?
field_2D        db ?
field_2E        db 12 dup(?)            ; string(C)
field_3A        db ?
field_3B        db ?
field_3C        db ?                    ; string(C)
Stru_MSG38      ends

; ---------------------------------------------------------------------------

Stru_MSG39      struc ; (sizeof=0XF)
field_0         db ?
field_1         db ?
field_2         db 13 dup(?)            ; string(C)
Stru_MSG39      ends

; ---------------------------------------------------------------------------

Stru_MSG3A      struc ; (sizeof=0XF)
field_0         db ?
field_1         db ?
field_2         db 13 dup(?)            ; string(C)
Stru_MSG3A      ends

; ---------------------------------------------------------------------------

Stru_MSG3B      struc ; (sizeof=0X3C)
field_0         db ?
field_1         db ?
field_2         db ?
field_3         db ?
field_4         db ?
field_5         db 26 dup(?)            ; string(C)
field_1F        db ?
field_20        db ?
field_21        db 24 dup(?)            ; string(C)
field_39        db ?
field_3A        db ?
field_3B        db ?                    ; string(C)
Stru_MSG3B      ends

; ---------------------------------------------------------------------------

Stru_MSG3C      struc ; (sizeof=0XF7)
field_0         db ?
field_1         db ?
field_2         db 242 dup(?)           ; string(C)
field_F4        db ?
field_F5        db ?
field_F6        db ?                    ; string(C)
Stru_MSG3C      ends

; ---------------------------------------------------------------------------

Stru_MSG3D      struc ; (sizeof=0X10)
field_0         db ?
field_1         db ?
field_2         db 10 dup(?)            ; string(C)
field_C         db ?
field_D         db ?
field_E         db 2 dup(?)             ; string(C)
Stru_MSG3D      ends

; ---------------------------------------------------------------------------

Stru_MSG3E      struc ; (sizeof=0X1)
field_0         db ?                    ; string(C)
Stru_MSG3E      ends

; ---------------------------------------------------------------------------

Stru_MSG3F      struc ; (sizeof=0X1)
field_0         db ?                    ; string(C)
Stru_MSG3F      ends

; ---------------------------------------------------------------------------

Stru_MSG40      struc ; (sizeof=0X1)
field_0         db ?                    ; string(C)
Stru_MSG40      ends

; ---------------------------------------------------------------------------

Stru_MSG41      struc ; (sizeof=0X1)
field_0         db ?                    ; string(C)
Stru_MSG41      ends

; ---------------------------------------------------------------------------

Stru_MSG42      struc ; (sizeof=0X1)
field_0         db ?                    ; string(C)
Stru_MSG42      ends

; ---------------------------------------------------------------------------

Stru_MSG43      struc ; (sizeof=0X9)
field_0         db 9 dup(?)             ; string(C)
Stru_MSG43      ends

; ---------------------------------------------------------------------------

Stru_MSG44      struc ; (sizeof=0X9)
field_0         db 9 dup(?)             ; string(C)
Stru_MSG44      ends

; ---------------------------------------------------------------------------

Stru_MSG45      struc ; (sizeof=0X1)
field_0         db ?                    ; string(C)
Stru_MSG45      ends

; ---------------------------------------------------------------------------

Stru_MSG46      struc ; (sizeof=0X9)
field_0         db 9 dup(?)             ; string(C)
Stru_MSG46      ends

; ---------------------------------------------------------------------------

Stru_MSG47      struc ; (sizeof=0X9)
field_0         db 9 dup(?)             ; string(C)
Stru_MSG47      ends

; ---------------------------------------------------------------------------

Stru_MSG48      struc ; (sizeof=0X9F)
field_0         db ?
field_1         db ?
field_2         db ?
field_3         db ?
field_4         db 26 dup(?)            ; string(C)
field_1E        db ?
field_1F        db ?
field_20        db 30 dup(?)            ; string(C)
field_3E        db ?
field_3F        db ?
field_40        db 30 dup(?)            ; string(C)
field_5E        db ?
field_5F        db ?
field_60        db ?
field_61        db ?
field_62        db 6 dup(?)             ; string(C)
field_68        db ?
field_69        db ?
field_6A        db ?                    ; string(C)
field_6B        db ?
field_6C        db ?
field_6D        db 13 dup(?)            ; string(C)
field_7A        db ?
field_7B        db ?
field_7C        db ?
field_7D        db ?
field_7E        db 6 dup(?)             ; string(C)
field_84        db ?
field_85        db ?
field_86        db 5 dup(?)             ; string(C)
field_8B        db ?
field_8C        db ?
field_8D        db 15 dup(?)            ; string(C)
field_9C        db ?
field_9D        db ?
field_9E        db ?                    ; string(C)
Stru_MSG48      ends

; ---------------------------------------------------------------------------

Stru_MSG49      struc ; (sizeof=0X9A)
field_0         db ?
field_1         db ?
field_2         db ?
field_3         db ?
field_4         db 26 dup(?)            ; string(C)
field_1E        db ?
field_1F        db ?
field_20        db 26 dup(?)            ; string(C)
field_3A        db ?
field_3B        db ?
field_3C        db 29 dup(?)            ; string(C)
field_59        db ?
field_5A        db ?
field_5B        db ?
field_5C        db ?
field_5D        db 6 dup(?)             ; string(C)
field_63        db ?
field_64        db ?
field_65        db ?                    ; string(C)
field_66        db ?
field_67        db ?
field_68        db 13 dup(?)            ; string(C)
field_75        db ?
field_76        db ?
field_77        db ?
field_78        db ?
field_79        db 6 dup(?)             ; string(C)
field_7F        db ?
field_80        db ?
field_81        db 5 dup(?)             ; string(C)
field_86        db ?
field_87        db ?
field_88        db 15 dup(?)            ; string(C)
field_97        db ?
field_98        db ?
field_99        db ?                    ; string(C)
Stru_MSG49      ends

; ---------------------------------------------------------------------------

Stru_MSG4A      struc ; (sizeof=0X6C)
field_0         db ?
field_1         db ?
field_2         db ?
field_3         db ?
field_4         db 6 dup(?)             ; string(C)
field_A         db ?
field_B         db ?
field_C         db ?                    ; string(C)
field_D         db ?
field_E         db ?
field_F         db 18 dup(?)            ; string(C)
field_21        db ?
field_22        db ?
field_23        db ?
field_24        db ?
field_25        db ?                    ; string(C)
field_26        db ?
field_27        db ?
field_28        db 26 dup(?)            ; string(C)
field_42        db ?
field_43        db ?
field_44        db 28 dup(?)            ; string(C)
field_60        db ?
field_61        db ?
field_62        db 7 dup(?)             ; string(C)
field_69        db ?
field_6A        db ?
field_6B        db ?                    ; string(C)
Stru_MSG4A      ends

; ---------------------------------------------------------------------------

Stru_MSG4B      struc ; (sizeof=0X62)
field_0         db ?
field_1         db ?
field_2         db ?
field_3         db ?
field_4         db ?
field_5         db 28 dup(?)            ; string(C)
field_21        db ?
field_22        db ?
field_23        db ?
field_24        db ?
field_25        db 6 dup(?)             ; string(C)
field_2B        db ?
field_2C        db ?
field_2D        db ?                    ; string(C)
field_2E        db ?
field_2F        db ?
field_30        db 13 dup(?)            ; string(C)
field_3D        db ?
field_3E        db ?
field_3F        db ?
field_40        db ?
field_41        db 6 dup(?)             ; string(C)
field_47        db ?
field_48        db ?
field_49        db 5 dup(?)             ; string(C)
field_4E        db ?
field_4F        db ?
field_50        db 15 dup(?)            ; string(C)
field_5F        db ?
field_60        db ?
field_61        db ?                    ; string(C)
Stru_MSG4B      ends


;
; +-------------------------------------------------------------------------+
; ¦     This file is generated by The Interactive Disassembler (IDA)        ¦
; ¦     Copyright (c) 2003 by DataRescue sa/nv, <ida@datarescue.com>        ¦
; ¦            Licensed to:              , 1 user, std, 01/2002             ¦
; +-------------------------------------------------------------------------+
;


; ---------------------------------------------------------------------------

; Segment type: Regular
bdata           segment at 40h public 'BIOSDATA' use16
                assume cs:bdata
                assume es:nothing, ss:nothing, ds:nothing, fs:nothing, gs:nothing
com_port_1      dw ?                    ; Base I/O address of 1st serial I/O port
com_port_2      dw ?                    ; Base I/O address of 2nd serial I/O port
com_port_3      dw ?                    ; Base I/O address of 3rd serial I/O port
com_port_4      dw ?                    ; Base I/O address of 4th serial I/O port
prn_port_1      dw ?                    ; Base I/O address of 1st parallel I/O port
prn_port_2      dw ?                    ; Base I/O address of 2nd parallel I/O port
prn_port_3      dw ?                    ; Base I/O address of 3rd parallel I/O port
prn_port_4      dw ?                    ; Base I/O address of 4th parallel I/O port
equip_bits      dw ?                    ; Equipment installed info bits
                                        ; 15  14  13   12   11  10   9   8
                                        ; \    /      game  \       /
                                        ; # of print  port  # of RS-232
                                        ; ports 0-3   used   ports 0-4
                                        ;
                                        ; 7   6    5    4    3   2   1   0
                                        ; \   /    \    /    \   / Math  |
                                        ; # of   video mode  RAM    uP  no
                                        ; disk-  at boot up  00=16K    dsk
                                        ; ettes  00=EGA/VGA  01=32K   driv
                                        ;  1-4   01=CGA-40   10=48K   if 0
                                        ; if bit 10=CGA-80   11=64K
                                        ; 0 = 1  11=MDA-80   (old PCs)
                                        ;
                                        ; Note: bit 13=modem on PC lap-tops
                                        ;       bit 2=mouse on MCA & others
manufactr_test  db ?                    ; Manufacturing Test Byte
                                        ; bit 0 = 1 while in test mode
                                        ; MCA systems use other bits
                                        ;   during POST operations
base_ram_size   dw ?                    ; Base memory size in KBytes (0-640)
mtest_scratchpad db ?                   ; [AT] {Manufacturing test scratch pad}
                                        ; [Compaq Deskpro 386] previous scan code
error_codes     db ?                    ; [AT] {Manufacturing test scratch pad}
                                        ; [PS/2 Mod 30] {BIOS control flags}
                                        ; [Compaq Deskpro 386] keyclick loudness (00h-7Fh)
keybd_flags_1   db ?                    ; Keyboard flag bits
                                        ;   7   6   5   4    3   2   1   0
                                        ; ins- cap num scrl alt ctl lef rig
                                        ; sert --toggles--- --shifts down--
keybd_flags_2   db ?                    ; Keyboard flag bits
                                        ;    7     6     5     4
                                        ; insert  caps  num  scroll
                                        ; ------now depressed------
                                        ;
                                        ;    3     2     1     0
                                        ;  pause  sys   left right
                                        ;  lock request -alt-down-
keybd_alt_num   db ?                    ; Alt-nnn keypad workspace
keybd_q_head    dw ?                    ; pointer to next character in keyboard buffer
keybd_q_tail    dw ?                    ; pointer to first free slot in keyboard buffer
keybd_queue     dw 10h dup(?)           ; Keyboard circular buffer
dsk_recal_stat  db ?                    ; DATA XREF: sub_16F04+1Ew
                                        ; sub_16F42+24w WaitForIRQ6+8r
                                        ; WaitForIRQ6+1Cw TrackReadOn+31w
                                        ; seg001:7669w
                                        ; Recalibrate floppy drive bits
                                        ;    3       2       1       0
                                        ; drive-3 drive-2 drive-1 drive-0
                                        ;
                                        ; bit 7 = interrupt flag
dsk_motor_stat  db ?                    ; DATA XREF: sub_16F04+19w
                                        ; sub_16F42+8r sub_18321+19w
                                        ; Motor running status & disk write
                                        ;  bit 7=1 disk write in progress
                                        ;  bits 6&5 = drive selected 0 to 3
                                        ;     3       2       1       0
                                        ;  drive-3 drive-2 drive-1 drive-0
                                        ;  --------- 1=motor on-----------
dsk_motor_timer db ?                    ; DATA XREF: sub_16E78+33w
                                        ; MaxtMotorTimer+6w
                                        ; Motor timer, at 0, turn off motor
dsk_ret_code    db ?                    ; DATA XREF: ReadWrite+18Fw
                                        ; sub_16F42+29w sub_16F42+40w
                                        ; DisketteCommand+1Bw
                                        ; CheckDskIntStat+1Dw seg001:7220w
                                        ; WaitForIRQ6+15w SaveCtlrReturnCd+1Bw
                                        ; SaveCtlrReturnCd+29w
                                        ; Controller return code
                                        ;  00h = ok
                                        ;  01h = bad command or parameter
                                        ;  02h = can't find address mark
                                        ;  03h = can't write, protected dsk
                                        ;  04h = sector not found
                                        ;  08h = DMA overrun
                                        ;  09h = DMA attempt over 64K bound
                                        ;  10h = bad CRC on disk read
                                        ;  20h = controller failure
                                        ;  40h = seek failure
                                        ;  80h = timeout, no response
dsk_status_1    db ?                    ; DATA XREF: sub_16E78+7Ar
                                        ; sub_16E78+85r sub_16F42+39r
                                        ; sub_1708E+75r CheckDskIntStat+11r
                                        ; seg001:7214r SaveCtlrReturnCd+1o
                                        ; sub_18405+12r sub_18405+1Dr
                                        ; Status bytes-disk controller chip
                                        ;  Note: 7 info bytes returned from
                                        ;  controller are saved here. Refer
                                        ;  to the NEC uPD 765 chip manual
                                        ;  for the specific info, depending
                                        ;  on the previous command issued.
dsk_status_2    db ?
dsk_status_3    db ?                    ; DATA XREF: sub_1708E+78r
dsk_status_4    db ?                    ; DATA XREF: sub_174FB+8Br
dsk_status_5    db ?
dsk_status_6    db ?                    ; DATA XREF: sub_174FB+8Fr
dsk_status_7    db ?
video_mode      db ?                    ; Present display mode
video_columns   dw ?                    ; Number of columns
video_buf_size  dw ?                    ; Video buffer size in bytes
                                        ;   Note: size may be rounded up to
                                        ;   the nearest 2K boundary.  For
                                        ;   example, 80x25 mode=4000 bytes,
                                        ;   but value may be 4096.
video_pageoff   dw ?                    ; Video page offset of the active
                                        ;   page, from start of current
                                        ;   video segment.
vid_curs_pos0   dw ?                    ; Cursor position page 0
                                        ;   bits 15-8=row, bits 7-0=column
vid_curs_pos1   dw ?                    ; Cursor position page 1
                                        ;   bits 15-8=row, bits 7-0=column
vid_curs_pos2   dw ?                    ; Cursor position page 2
                                        ;   bits 15-8=row, bits 7-0=column
vid_curs_pos3   dw ?                    ; Cursor position page 3
                                        ;   bits 15-8=row, bits 7-0=column
vid_curs_pos4   dw ?                    ; Cursor position page 4
                                        ;   bits 15-8=row, bits 7-0=column
vid_curs_pos5   dw ?                    ; Cursor position page 5
                                        ;   bits 15-8=row, bits 7-0=column
vid_curs_pos6   dw ?                    ; Cursor position page 6
                                        ;   bits 15-8=row, bits 7-0=column
vid_curs_pos7   dw ?                    ; Cursor position page 7
                                        ;   bits 15-8=row, bits 7-0=column
vid_curs_mode   dw ?                    ; Active cursor, start & end lines
                                        ;   bits 12 to 8 for starting line
                                        ;   bits 4  to 0 for ending line
video_page      db ?                    ; Present page
video_port      dw ?                    ; Video controller base I/O address
video_mode_reg  db ?                    ; Hardware mode register bits
video_color     db ?                    ; Color set in CGA modes
gen_use_ptr     dw ?                    ; General use offset pointer
gen_use_seg     dw ?                    ; General use segment pointer
gen_int_occurd  db ?                    ; Unused interrupt occurred
                                        ;   value holds the IRQ bit 7-0 of
                                        ;   the interrupt that occurred
timer_low       dw ?                    ; Timer, low word, cnts every 55 ms
timer_high      dw ?                    ; Timer, high word
timer_rolled    db ?                    ; Timer overflowed, set to 1 when
                                        ;  more than 24 hours have elapsed
keybd_break     db ?                    ; Bit 7 set if break key depressed
warm_boot_flag  dw ?                    ; Boot (reset) type
                                        ;   1234h=warm boot, no memory test
                                        ;   4321h=boot & save memory
hdsk_status_1   db ?                    ; Hard disk status
                                        ;  00h = ok
                                        ;  01h = bad command or parameter
                                        ;  02h = can't find address mark
                                        ;  03h = can't write, protected dsk
                                        ;  04h = sector not found
                                        ;  05h = reset failure
                                        ;  07h = activity failure
                                        ;  08h = DMA overrun
                                        ;  09h = DMA attempt over 64K bound
                                        ;  0Ah = bad sector flag
                                        ;  0Bh = removed bad track
                                        ;  0Dh = wrong # of sectors, format
                                        ;  0Eh = removed control data addr
                                        ;         mark
                                        ;  0Fh = out of limit DMA
                                        ;         arbitration level
                                        ;  10h = bad CRC or ECC, disk read
                                        ;  11h = bad ECC corrected data
                                        ;  20h = controller failure
                                        ;  40h = seek failure
                                        ;  80h = timeout, no response
                                        ;  AAh = not ready
                                        ;  BBh = error occurred, undefined
                                        ;  CCh = write error, selected dsk
                                        ;  E0h = error register = 0
                                        ;  FFh = disk sense failure
hdsk_count      db ?                    ; Number of hard disk drives
hdsk_head_ctrl  db ?                    ; Head control (XT only)
hdsk_ctrl_port  db ?                    ; Hard disk control port (XT only)
prn_timeout_1   db ?                    ; Countdown timer waits for printer
                                        ;   to respond (printer 1)
prn_timeout_2   db ?                    ; Countdown timer waits for printer
                                        ;   to respond (printer 2)
prn_timeout_3   db ?                    ; Countdown timer waits for printer
                                        ;   to respond (printer 3)
prn_timeout_4   db ?                    ; Countdown timer waits for printer
                                        ;   to respond (printer 4)
rs232_timeout_1 db ?                    ; Countdown timer waits for RS-232 (1)
rs232_timeout_2 db ?                    ; Countdown timer waits for RS-232 (2)
rs232_timeout_3 db ?                    ; Countdown timer waits for RS-232 (3)
rs232_timeout_4 db ?                    ; Countdown timer waits for RS-232 (4)
keybd_begin     dw ?                    ; Ptr to beginning of keybd queue
keybd_end       dw ?                    ; Ptr to end of keyboard queue
video_rows      db ?                    ; Rows of characters on display - 1
video_pixels    dw ?                    ; Number of pixels per charactr * 8
video_options   db ?                    ; Display adapter options
                                        ;   bit 7 = clear RAM
                                        ;   bits 6,5 = memory on adapter
                                        ;               00 - 64K
                                        ;               01 - 128K
                                        ;               10 - 192K
                                        ;               11 - 256K
                                        ;   bit 4 = unused
                                        ;   bit 3 = 0 if EGA/VGA active
                                        ;   bit 2 = wait for display enable
                                        ;   bit 1 = 1 - mono monitor
                                        ;         = 0 - color monitor
                                        ;   bit 0 = 0 - handle cursor, CGA
video_switches  db ?                    ; Switch setting bits from adapter
                                        ;   bits 7-4 = feature connector
                                        ;   bits 3-0 = option switches
video_1_save    db ?                    ; Video save area 1-EGA/VGA control
                                        ;   bit 7 = 200 line mode
                                        ;   bits 6,5 = unused
                                        ;   bit 4 = 400 line mode
                                        ;   bit 3 = no palette load
                                        ;   bit 2 = mono monitor
                                        ;   bit 1 = gray scale
                                        ;   bit 0 = unused
video_2_save    db ?                    ; Video save area 2
dsk_data_rate   db ?                    ; DATA XREF: sub_16877+Dr
                                        ; sub_176F9+46r
                                        ; Last data rate for diskette
                                        ;  bits 7 & 6 = 00 for 500K bit/sec
                                        ;             = 01 for 300K bit/sec
                                        ;             = 10 for 250K bit/sec
                                        ;             = 11 for 1M bit/sec
                                        ;  bits 5 & 4 = step rateRate at start of operation
                                        ;  bits 3 & 2 = 00 for 500K bit/sec
                                        ;             = 01 for 300K bit/sec
                                        ;             = 10 for 250K bit/sec
                                        ;             = 11 for 1M bit/sec
hdsk_status_2   db ?                    ; Hard disk status
hdsk_error      db ?                    ; Hard disk error
hdsk_complete   db ?                    ; When the hard disk controller's
                                        ;  task is complete, this byte is
                                        ;  set to FFh (from interrupt 76h)
dsk_options     db ?                    ; Diskette controller information
                                        ;  bit 6 = 1 Drv 1 type determined
                                        ;      5 = 1 Drv 1 is multi-rate
                                        ;      4 = 1 Drv 1 change detect
                                        ;      2 = 1 Drv 0 type determined
                                        ;      1 = 1 Drv 0 is multi-rate
                                        ;      0 = 1 Drv 0 change detect
dsk0_media_st   db ?                    ; DATA XREF: GetTC_Port_DMA+E2r
                                        ; sub_16BDA+7r sub_16BDA+Dw
                                        ; sub_18380+45r
                                        ; Media state for diskette drive 0
                                        ;     7      6      5      4
                                        ;  data xfer rate  two   media
                                        ;   00=500K bit/s  step  known
                                        ;   01=300K bit/s
                                        ;   10=250K bit/s
                                        ;   11=1M bit/sec
                                        ;     3      2      1      0
                                        ;  unused  -----state of drive-----
                                        ;          bits floppy  drive state
                                        ;          000=  360K in 360K, ?
                                        ;          001=  360K in 1.2M, ?
                                        ;          010=  1.2M in 1.2M, ?
                                        ;          011=  360K in 360K, ok
                                        ;          100=  360K in 1.2M, ok
                                        ;          101=  1.2M in 1.2M, ok
                                        ;          111=  720K in 720K, ok
                                        ;            or 1.44M in 1.44M
                                        ;         (state not used for 2.88)
dsk1_media_st   db ?                    ; DATA XREF: sub_16BDA+10r
                                        ; sub_16BDA+16w
                                        ; Media state for diskette drive 1
                                        ;  (see dsk0_media_st)
dsk0_start_st   db ?                    ; Starting state for drive 0
dsk1_start_st   db ?                    ; Starting state for drive 1
dsk0_cylinder   db ?                    ; Current track number for drive 0
dsk1_cylinder   db ?                    ; Current track number for drive 1
keybd_flags_3   db ?                    ; Special keyboard type and mode
                                        ;  bit 7 Reading ID of keyboard
                                        ;      6 last char is 1st ID char
                                        ;      5 force num lock
                                        ;      4 101/102 key keyboard
                                        ;      3 right alt key down
                                        ;      2 right ctrl key down
                                        ;      1 E0h hidden code last
                                        ;      0 E1h hidden code last
keybd_flags_4   db ?                    ; Keyboard Flags (advanced keybd)
                                        ;   7      6       5     4  3 2 1 0
                                        ; xmit   char   Resend  Ack      /
                                        ; error was ID  Rec'd  Rec'd   LEDs
timer_waitoff   dw ?                    ; Ptr offset to wait done flag
timer_waitseg   dw ?                    ; Ptr segment to wait done flag
timer_clk_low   dw ?                    ; Timer low word, 1 microsecond clk
timer_clk_high  dw ?                    ; Timer high word
timer_clk_flag  db ?                    ; Timer flag 00h = post acknowledgd
                                        ;            01h = busy
                                        ;            80h = posted
lan_bytes       db 7 dup(?)             ; Local area network bytes (7)
video_sav_tbl   dd ?                    ; Pointer to a save table of more
                                        ; pointers for the video system
                                        ;            SAVE TABLE
                                        ;  offset type    pointer to
                                        ;  ------ ---- --------------------
                                        ;    0     dd  Video parameters
                                        ;    4     dd  Parms save area
                                        ;    8     dd  Alpha char set
                                        ;   0Ch    dd  Graphics char set
                                        ;   10h    dd  2nd save ptr table
                                        ;   14h    dd  reserved (0:0)
                                        ;   18h    dd  reserved (0:0)
                                        ;
                                        ;  2ND SAVE TABLE (from ptr above)
                                        ;  offset type functions & pointers
                                        ;  ------ ---- --------------------
                                        ;    0     dw  Bytes in this table
                                        ;    2     dd  Combination code tbl
                                        ;    6     dd  2nd alpha char set
                                        ;   0Ah    dd  user palette tbl
                                        ;   0Eh    dd  reserved (0:0)
                                        ;   12h    dd  reserved (0:0)
                                        ;   16h    dd  reserved (0:0)
byte_4AC        db 22h dup(?)
days_since1_80  dw ?                    ; Days since 1-Jan-1980 counter
bdata           ends

; ---------------------------------------------------------------------------
; ---------------------------------------------------------------------------

; Segment type: Pure data
PSP             segment byte public 'DATA' use16
                assume cs:PSP

loc_FF00:                               ; Thanks to Ralf Brown for the following info!
                int     20h             ; INT 20 instruction for CP/M CALL 0 program termination
; ---------------------------------------------------------------------------
FreeSeg         dw ?                    ; DATA XREF: start+19r start+58w
                                        ; segment of first byte beyond memory allocated to program
byte_FF04       db ?                    ; (DOS) unused filler
CPMCall5        db ?                    ; CP/M CALL 5 service request (FAR CALL to absolute 000C0h)
CPM1stSegSize   dw ?                    ; CP/M compatibility--size of first segment for .COM files
word_FF08       dw ?                    ; remainder of FAR JMP at 05h
Int22Vector     dd ?                    ; INT 22 termination address
Int23Vector     dd ?                    ; INT 23 control-Break handler address
Int24Vector     dd ?                    ; INT 24 critical error handler address
ParentPSPSeg    dw ?                    ; segment of parent PSP
JobFileTable    db 14h dup(?)           ; one byte per file handle, FFh=closed
EnviroBlkSeg    dw ?                    ; DATA XREF: __cinit+41r __cinit+68r
                                        ; __setargv+18r __setenvp+11r
                                        ; Segment of environment block
LastStack       dd ?                    ; proces's SS:SP on entry to last int 21h.
JFTEntries      dw ?                    ; the number of entries in the job file table.
JFTPtr          dd ?                    ; pointer to job file table
PrevPSPPtr      dd ?                    ; pointer to previous PSP
byte_FF3C       db ?                    ; DOS 4+ (DBCS) interim console flag
byte_FF3D       db ?                    ; (APPEND) TrueName flag
byte_FF3E       db ?                    ; (Novell NetWare) flag: next byte initialized if CEh (OS/2) capabilities flag
                db ?                    ; (Novell NetWare) Novell task number if previous byte is CEh
                db 2 dup(?)             ; DOS 5+ version to return on INT 21/AH=30h
                dw ?                    ; (MSWindows3) selector of next PSP (PDB) in linked list
                dw ?                    ; (MSWindows3) "PDB_Partition"
word_FF46       dw ?                    ; (MSWindows3) "PDB_NextPDB"
byte_FF48       db ?                    ; (MSWindows3) bit 0 set if non-Windows application (WINOLDAP)
byte_FF49       db 3 dup(?)             ; unused by DOS versions <= 6.00
                dw ?                    ; (MSWindows3) "PDB_EntryStack"
                db 2 dup(?)             ; unused by DOS versions <= 6.00
                db 3 dup(?)             ; DOS 2+ service request (INT 21/RETF instructions)
                db 2 dup(?)             ; unused in DOS versions <= 6.00
                db 7 dup(?)             ; unused in DOS versions <= 6.00; can be used to make first FCB into an extended FCB
FirstDefaultFCB db 10h dup(?)           ; first default FCB, filled in from first commandline argument overwrites second FCB if opened
SecondDefaultFCB db 10h dup(?)          ; second default FCB, filled in from second commandline argument overwrites beginning of commandline if opened
                db 4 dup(?)             ; unused
TailByte        db ?                    ; DATA XREF: sub_1C317+Eo
                                        ; BYTE for length of tail, N BYTEs for the tail, followed by a BYTE containing 0Dh
aCommandLineTail db 7Fh dup(?)          ; DATA XREF: GetCmdLnArgs+41o
PSP             ends

; File Name   : D:\IDA\TC.EXE
; Format      : MS-DOS executable (EXE)
; Base Address: 1000h Range: 10000h-1F870h Loaded length: F050h
; Entry Point : 1000:C5C7
; ---------------------------------------------------------------------------

; Segment type: Pure code
seg001          segment byte public 'CODE' use16
                assume cs:seg001
                assume es:nothing, ss:nothing, ds:nothing, fs:nothing, gs:nothing
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    1 ;
                db    1 ;
                db    1 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    1 ;
                db    1 ;
                db    1 ;
                db    0 ;
                db    0 ;
                db    0 ;
a0728891641     db '07/28/89   16:41'
TC_Addr1        dw 268h                 ; DATA XREF: GetCmdLnArgs+140r
                                        ; GetTC_Port_DMA+12r
                                        ; these are the port base addresses where the transcopy board might be.
                                        ; there are 8 adresses used, XX8h --> XXFh
TC_Addr2        dw 2E8h                 ; DATA XREF: GetTC_Port_DMA+1Ar
TC_Addr3        dw 368h                 ; DATA XREF: GetTC_Port_DMA+22r
TC_Addr4        dw 3E8h                 ; DATA XREF: GetTC_Port_DMA+2Ar
aSourceDrvLtr   db 'A'                  ; DATA XREF: _Main+7Bw
                                        ; GetCmdLnArgs+22w sub_12E04+25r
                                        ; sub_12E04+62w sub_12E04+C8r
                                        ; sub_1331E+9r
aTargetDrvLtr   db 'B'                  ; DATA XREF: _Main+80w _Main+8Aw
                                        ; GetCmdLnArgs+25w GetCmdLnArgs+32w
                                        ; sub_12E04+83r sub_12E04+BBw
                                        ; sub_12E04+D0r sub_1331E+15r
KeepTrkLngthFlag db 'N'                 ; DATA XREF: SetOptionFlags+Dw
                                        ; SetOptionFlags+1Bw
                                        ; SetOptionFlags+2Fw
                                        ; SetOptionFlags+ABr sub_13882+13w
                                        ; sub_13882+31w AnalyzeTrack+177r
                                        ; sub_14761+A1r sub_14B86+15Fr
                                        ; sub_14F1F+4Cr sub_14FE4w
                                        ; sub_14FF4+Fw sub_15013+Fw
                                        ; WriteTrack+1Bw WriteTrack+41r
                                        ; sub_159E0r sub_15D77+15r
                                        ; sub_174C6+1r sub_18715+2A1r
                                        ; sub_18A07+41r sub_18A07+305r
                                        ; sub_18A07+335r sub_18A07+3FCr
                                        ; sub_18A07+477r sub_18A07+57Er
                                        ; sub_19028+1r seg001:9325r
                                        ; Set by user input at first, by program later if needed.
CpyWkBitsFlag   db 'N'                  ; DATA XREF: SetOptionFlags+34w
                                        ; SetOptionFlags+42w
                                        ; SetOptionFlags+56w
                                        ; SetOptionFlags+BDr sub_13882+1Dw
                                        ; sub_13882+45w AnalyzeTrack+5Ew
                                        ; sub_1513E+1Cr seg001:932Cr
                                        ; Set by user input at first, by program later if needed.
CopyXIDXFlag    db 'N'                  ; DATA XREF: SetOptionFlags+5Bw
                                        ; SetOptionFlags+69w
                                        ; SetOptionFlags+7Dw
                                        ; SetOptionFlags+B4r sub_13882+18w
                                        ; sub_13882+3Bw AnalyzeTrack+E9r
                                        ; sub_14B86+166r sub_18715+2Er
                                        ; sub_18A07+48r sub_18A07+C0r
                                        ; seg001:9372r seg001:9376w
                                        ; seg001:9388w
                                        ; Set by user input at first, by program later if needed.
byte_10039      db 'N'                  ; DATA XREF: SetOptionFlags+CFr
VerifyWrtFlag   db 'N'                  ; DATA XREF: SetOptionFlags+82w
                                        ; SetOptionFlags+90w
                                        ; SetOptionFlags+A4w
                                        ; SetOptionFlags+C6r sub_13882+22w
                                        ; sub_13882+4Fw AnalyzeTrack+15Fr
                                        ; sub_18A07+5E4r
                                        ; Set by user input at first, by program later if needed.
word_1003B      dw 0                    ; DATA XREF: sub_12E04+21w
                                        ; sub_12E04+4Er sub_12E04+65r
                                        ; sub_12E04+7Dw sub_12E04+AAr
                                        ; sub_12E04+BEr sub_12F2E+Fw
                                        ; sub_12F2E+22r sub_12F2E+38r
                                        ; sub_12F2E+51w sub_12F2E+88r
                                        ; sub_12F2E+A0r sub_12F2E+B9w
                                        ; sub_12F2E+FBr sub_12F2E+10Br
                                        ; sub_12F2E+123w sub_12F2E+135r
                                        ; sub_12F2E+14Er sub_12F2E+180w
                                        ; sub_12F2E+191r sub_12F2E+1ADr
                                        ; sub_12F2E+1C5w sub_12F2E+1D6r
                                        ; sub_12F2E+1F2r sub_12F2E+20Aw
                                        ; sub_12F2E+21Br sub_12F2E+237r
                                        ; sub_12F2E+254w sub_12F2E+265r
                                        ; sub_12F2E+281r
unk_1003D       db    2 ;
byte_1003E      db 0Eh
EndOfCurrTrk    dw 0                    ; DATA XREF: AnalyzeTrack+4Ew
                                        ; AnalyzeTrack+66w AnalyzeTrack+7Ew
                                        ; AnalyzeTrack+11Aw sub_14B86+177w
                                        ; sub_14DA4+4Dw sub_14DA4+51w
                                        ; sub_14E52+Er sub_14F1Fr
                                        ; sub_14F1F+5w sub_14F1F+9w
                                        ; sub_14F1F+C1w sub_15045+67r
                                        ; sub_15045+94w sub_15D77+30w
                                        ; sub_16E78+38r sub_16E78+46w
                                        ; sub_16E78+4Bw sub_1846D+10r
                                        ; sub_18482+Fr sub_18482+23r
                                        ; MFMDecode+5r MFMDecode+1Cr
                                        ; sub_184FC+Cr sub_184FC+1Br
                                        ; sub_18594+Dr sub_18594+1Br
                                        ; sub_18634+Er sub_18715+19Aw
                                        ; sub_18715+1C7w sub_19089r
                                        ; sub_19089+4w sub_19089+C4w
                                        ; sub_19089+D2w seg001:9401w
                                        ; sub_1BA38+5Cr
                                        ; The offset of the end of the track currently being processed.
CurrTrackBufOfs dw 0                    ; DATA XREF: AnalyzeTrack+44w
                                        ; AnalyzeTrack+6Ar AnalyzeTrack+71r
                                        ; AnalyzeTrack+D3r AnalyzeTrack+F0r
                                        ; seg001:48C0r seg001:48FBr
                                        ; seg001:4927r sub_14B86+C1r
                                        ; sub_14B86+192r sub_14B86+1BFr
                                        ; sub_14B86+1D0r sub_14E52+Ar
                                        ; sub_14EA2r sub_159E0+32r
                                        ; sub_159E0+3Fr sub_15D77+26w
                                        ; sub_15D77+46r sub_18715+190w
                                        ; sub_18715+1A9r
                                        ; Offset of the track data for the track being processed.
byte_10043      db 2                    ; DATA XREF: _Main+77w
word_10044      dw 0                    ; DATA XREF: sub_15242+57w
                                        ; sub_15242+8Ar sub_15242+8Er
                                        ; sub_1B832+87w sub_1BBAF+9r
                db  20h ;
CurrentSide     db 0                    ; DATA XREF: SetOptionFlags+5w
                                        ; SetOptionFlags+EEw
                                        ; SetOptionFlags+F2r
                                        ; SetOptionFlags+FCw ReadWrite+131w
                                        ; ReadWrite+15Cw ReadWrite+1AEr
                                        ; ReadWrite+1EBr ReadWrite+1F2w
                                        ; ReadWrite+28Dw ReadWrite+2EBw
                                        ; ReadWrite+386r ReadWrite+38Dw
                                        ; UpdateTrkProgDisp+5r sub_15662+36r
                                        ; sub_15662+65r sub_15662+C3r
                                        ; sub_15662+1E0r sub_15A5E+34r
                                        ; seg001:7046r sub_1708E+16r
                                        ; SelectHead+11r sub_176B0+16r
                                        ; sub_18A07+8Ar ReadTrack+2Ar
                                        ; GetTrkDatOfs+8r sub_1AC85+20r
CurrentDrive    db 0                    ; DATA XREF: AnalyzeTrack+2Fr
                                        ; sub_15662+1E4r sub_15662+20Cr
                                        ; WriteTrack+48r WriteTrack+7Br
                                        ; WriteTrack+DDr sub_15A5E+179r
                                        ; sub_15A5E+237r sub_15A5E+29Br
                                        ; seg001:5D68r sub_15D77+A2r
                                        ; sub_168AE+3r sub_16937+7r
                                        ; sub_16937+C0r sub_16C65+33r
                                        ; sub_16C65+1D9r sub_16E78w
                                        ; seg001:7041r sub_1708E+21r
                                        ; SelectHeadr TrackReadOn+8r
                                        ; sub_174FB+FDr sub_176B0+12r
                                        ; sub_176F9+11r sub_18313r sub_18321w
                                        ; sub_18321+Dr sub_18321+23r
                                        ; sub_18321+2Er sub_18321+54r
                                        ; sub_18380r sub_18380+20r
                                        ; sub_18380+34r sub_18405r
                                        ; sub_19028+3Ar
CurrentCylinder db 0                    ; DATA XREF: SetOptionFlagsw
                                        ; SetOptionFlags+Ar
                                        ; SetOptionFlags+101w
                                        ; SetOptionFlags+105r ReadWrite+9w
                                        ; ReadWrite+139w ReadWrite+164w
                                        ; ReadWrite+180w ReadWrite+1A5r
                                        ; ReadWrite+295w ReadWrite+303w
                                        ; ReadWrite+329w UpdateTrkProgDisp+Cr
                                        ; seg001:48F4r sub_14B86+5Er
                                        ; sub_14B86+65r sub_15662+7r
                                        ; sub_15662+2Br sub_15662+5Fr
                                        ; sub_15662+1DAr sub_15A5E+297r
                                        ; sub_15A5E+2A2w sub_18313+6r
                                        ; sub_183E6w sub_183E6+8w
                                        ; seg001:931Er GetTrkDatOfs+2r
DuplicatorPresent db 0                  ; DATA XREF: _Main+EDr _Main+12Aw
                                        ; _Main+149r _Main+1BCw
                                        ; GetCmdLnArgs+Ew GetCmdLnArgs+3Cw
                                        ; sub_12E04+8r
                                        ; Disk duplicator present/in use?
                db    0 ;
CylndrBeingRead db 0                    ; DATA XREF: ReadWrite+3w
                                        ; ReadWrite+C1w ReadWrite+F5w
                                        ; ReadWrite+136r ReadWrite+161r
                                        ; ReadWrite+17Dr ReadWrite+1FAr
                                        ; ReadWrite+201w
ClndrBeingWritten db 0                  ; DATA XREF: ReadWrite+6w
                                        ; ReadWrite+C4w ReadWrite+F8w
                                        ; ReadWrite+292r ReadWrite+300r
                                        ; ReadWrite+326r ReadWrite+395r
                                        ; ReadWrite+39Cw
SourceDriveNumber db 0                  ; DATA XREF: sub_12E04+CDw
                                        ; sub_12E04+D8r ReadWrite+68r
                                        ; ReadWrite+7Dr ReadWrite+100r
                                        ; ReadWrite+120r ReadWrite+12Br
                                        ; ReadWrite+142r ReadWrite+177r
                                        ; ReadWrite+21Er ReadWrite+259r
                                        ; ReadWrite+3E8r
TargetDriveNumber db 1                  ; DATA XREF: sub_12E04+D5w
                                        ; sub_12E04+DCr ReadWrite+80r
                                        ; ReadWrite+8Dr ReadWrite+103r
                                        ; ReadWrite+230r ReadWrite+25Cr
                                        ; ReadWrite+27Cr ReadWrite+287r
                                        ; ReadWrite+2A3r ReadWrite+2B2r
                                        ; ReadWrite+3DBr ReadWrite+3EBr
                                        ; sub_13ABE+9r sub_13ABE+1Ar
                                        ; sub_13AF3+5r
Cylinder        db 0                    ; DATA XREF: sub_15186+2Cw sub_1553Cr
                                        ; sub_1553C+72r IDCRC+5r
                                        ; sub_15662+2Ew sub_1708E+28r
CurrentHead     db 0                    ; DATA XREF: sub_15186+33w
                                        ; sub_1553C+78r IDCRC+Br
                                        ; sub_15662+39w sub_1708E+2Fr
SectorNumber    db 1                    ; DATA XREF: sub_15186+3Aw
                                        ; sub_1553C+7r sub_1553C+4Aw
                                        ; sub_1553C+7Er sub_1553C+B5w
                                        ; sub_1553C+B9r IDCRC+11r
                                        ; sub_15662+31w sub_1708E+36r
                                        ; sub_1708E+44r
SectorSize      db 2                    ; DATA XREF: sub_15186+41w
                                        ; sub_1553C+Er sub_1708E+3Dr
                                        ; sub_1708E+54r sub_1708E+5Br
ReadLengthBytes dw 0                    ; DATA XREF: WrtTrkLnTbl+5r
                                        ; sub_14B86+1D9r sub_168BD+Dr
                                        ; sub_18715+196r sub_18715+1BFr
                                        ; sub_18A07+564w sub_19089+6Cw
                                        ; sub_19089+6Fw sub_19089+93r
                                        ; sub_19089+A9r sub_19089+C9r
                                        ; ReadTrack+8Ew ReadTrack+BAw
                                        ; seg001:937Er
byte_10056      db 20h                  ; DATA XREF: seg001:945Ar seg001:9462r
                db    0 ;
                db    0 ;
word_10059      dw 0                    ; DATA XREF: sub_15242+2Ar
                                        ; sub_15242+95r sub_15242+C5r
                                        ; sub_153CE+4r sub_1553C+15r
                                        ; sub_1AAFB+20w
byte_1005B      db 0                    ; DATA XREF: sub_15186+9Dr
                                        ; sub_15242+6r sub_1AAFB+28w
word_1005C      dw 7000h                ; DATA XREF: sub_15242+1Er sub_153CEr
                                        ; sub_1553C+19r sub_1AAFB+32w
                                        ; sub_15186+99r
word_1005E      dw 9000h                ; DATA XREF: sub_15242+22r
                                        ; sub_15242+51r sub_15242+99r
                                        ; sub_15242+B3r sub_1AAFB+38w
                                        ; sub_15242+2r
KeepTrkLngth0   db 0                    ; DATA XREF: GetCmdLnArgs+A5o
                                        ; GetCmdLnArgs+245r sub_12F2E+184r
                                        ; sub_12F2E+1A6w SetOptionFlags+12r
                                        ; SetDefaultOptions+14w sub_1331E+5Dr
                                        ; sub_1AB90+2Ew sub_1AB90+47w
                                        ; Keep track length option. y or n or lower # if range.
KeepTrkLngth1   db 0                    ; DATA XREF: GetCmdLnArgs+24Er
                                        ; sub_12F2E+187r sub_12F2E+1A9w
                                        ; SetOptionFlags+29r sub_1331E+60r
                                        ; Keep track length option. 00h or upper # if range.
CopyWkBits0     db 0                    ; DATA XREF: GetCmdLnArgs+9Bo
                                        ; GetCmdLnArgs+236r sub_12F2E+1C9r
                                        ; sub_12F2E+1EBw SetOptionFlags+39r
                                        ; SetDefaultOptions+19w sub_1331E+6Dr
                                        ; sub_1AB90+38w sub_1AB90+5Bw
                                        ; Copy weak bits option. y or n or lower # if range.
CopyWkBits1     db 0                    ; DATA XREF: GetCmdLnArgs+23Fr
                                        ; sub_12F2E+1CCr sub_12F2E+1EEw
                                        ; SetOptionFlags+50r sub_1331E+70r
                                        ; Copy weak bits option. 00h or upper # if range.
CopyXIDX0       db 0                    ; DATA XREF: GetCmdLnArgs+AFo
                                        ; GetCmdLnArgs+254r sub_12F2E+20Er
                                        ; sub_12F2E+230w SetOptionFlags+60r
                                        ; SetDefaultOptions+1Ew sub_1331E+7Dr
                                        ; sub_1AB90+33w sub_1AB90+51w
                                        ; Copy across index option. y or n or lower # if range.
CopyXIDX1       db 0                    ; DATA XREF: GetCmdLnArgs+25Dr
                                        ; sub_12F2E+211r sub_12F2E+233w
                                        ; SetOptionFlags+77r sub_1331E+80r
                                        ; Copy across index option. 00h or upper # if range.
byte_10066      db 0                    ; DATA XREF: sub_18715+Fw
                                        ; sub_18715+35r sub_18715+21Cw
                                        ; sub_18715+28Bw sub_18715+2ABr
                                        ; sub_18715+2BFr sub_18715+2C8r
                                        ; sub_18A07+5DCw sub_18A07+61Cr
                db    0 ;
byte_10068      db 0                    ; DATA XREF: ReadWrite+31Cw
                                        ; sub_18A07+1Dr sub_18A07+5A9w
                                        ; sub_18A07+5B5w
byte_10069      db 0                    ; DATA XREF: ReadWrite+321w
                                        ; sub_18A07+5B8w sub_18A07+5CAr
                                        ; sub_18A07+602w
word_1006A      dw 0                    ; DATA XREF: sub_138EE+9w
                                        ; sub_138EE+12w WriteTrack+23r
                                        ; sub_174C6+8r sub_18A07+4Fr
                                        ; sub_18A07+599r sub_18A07+5BEr
                                        ; sub_19089+Ar
                db    0 ;
                db    0 ;
VerifyWrite0    db 0                    ; DATA XREF: GetCmdLnArgs+B9o
                                        ; sub_12F2E+258r sub_12F2E+27Aw
                                        ; SetOptionFlags+87r
                                        ; SetDefaultOptions+23w sub_1331E+8Dr
                                        ; sub_1AB90+3Dw sub_1AB90+65w
                                        ; Verify Write option. y or n or lower # if range
byte_1006F      db 0                    ; DATA XREF: sub_12F2E+25Br
                                        ; sub_12F2E+27Dw SetOptionFlags+9Er
                                        ; sub_1331E+90r
                db    0 ;
                db    0 ;
word_10072      dw 0                    ; DATA XREF: WriteTrack+6Aw
                                        ; WriteTrack+B0w WriteTrack+C1w
                                        ; WriteTrack+D2w WriteTrack+FDw
                                        ; sub_159E0+68r sub_15A5E+5w
                                        ; sub_15A5E+18Ew sub_15A5E+26Fw
                                        ; sub_15D16+6w sub_18A07+B4r
                                        ; sub_18A07+469r sub_19028+22r
                                        ; seg001:947Dw
TrackSkewDly1   dw 0                    ; DATA XREF: WriteTrack+66w
                                        ; WriteTrack+ACw WriteTrack+C5w
                                        ; WriteTrack+D6w WriteTrack+F7w
                                        ; sub_18A07+B0r sub_18A07+3B1r
                                        ; sub_19028+1Er
                                        ; This word specifies how long to wait after index to begin
                                        ; writing the track.
                db    0 ;
                db    0 ;
dword_10078     dd 0                    ; DATA XREF: sub_16F9D+5r
                db    0 ;
byte_1007D      db 0                    ; DATA XREF: ReadWrite+FBw
                                        ; ReadWrite+186w ReadWrite+2ABr
                                        ; sub_15A5E+2A8w
DuplicatorReturn db 0                   ; DATA XREF: _Main+94w _Main+97r
                                        ; _Main+E6r _Main+110w _Main+198w
                                        ; _Main+19Dr _Main+1DCr _Main+1F0r
                                        ; GetCmdLnArgs+35r sub_12E04+E0r
                                        ; ReadWrite+48r ReadWrite+A5r
                                        ; ReadWrite+D9r ReadWrite+2CAr
                                        ; ReadWrite+2DAr ReadWrite+343r
                                        ; ReadWrite+36Cr ReadWrite+3A8r
                                        ; ReadWrite+414r sub_15013+1Dr
                                        ; last return code recieved from disk duplicator
byte_1007F      db 0                    ; DATA XREF: ReadWrite+43w
                                        ; ReadWrite+CEw ReadWrite+E3r
                                        ; ReadWrite+E8w ReadWrite+1CFw
NumGoodDsks     dw 0                    ; DATA XREF: _Main+18Bw _Main+1E6r
                                        ; ReadWrite+3AFw ReadWrite+3C8r
                                        ; DispGoodBadDsks+Cr
NumBadDsks      dw 0                    ; DATA XREF: _Main+185w ReadWrite+376w
                                        ; ReadWrite+426w DispGoodBadDsks+1Er
word_10084      dw 7FFFh                ; DATA XREF: _Main+1EAr
                                        ; GetCmdLnArgs+8w GetCmdLnArgs+FAw
                                        ; GetCmdLnArgs+10Dr GetCmdLnArgs+115w
                                        ; GetCmdLnArgs+119w ReadWrite+3CBr
byte_10086      db 0                    ; DATA XREF: ReadWrite+2FBw
                                        ; ReadWrite+364w seg001:9349r
BiosModelByte   db 0                    ; DATA XREF: _Main+2Aw sub_16E78+3Er
                                        ; FCh=AT,FDh=PCjr,FEh=XT,FF=PC
                db 0, 2
byte_1008A      db 0                    ; DATA XREF: AnalyzeTrack+16w
                                        ; AnalyzeTrack+130r sub_149C2+1Fr
                                        ; sub_149C2+2Ew sub_14AEF+71r
                                        ; sub_14AEF+80w sub_15242+3Fw
                                        ; seg001:5381w sub_153CE+A8w
                                        ; sub_15498+9Cw sub_1553C+3Cw
TrackBufSeg     dw 0                    ; DATA XREF: sub_13AF3+74r
                                        ; sub_13AF3+85r sub_13AF3+12Br
                                        ; AnalyzeTrack+3Cr AnalyzeTrack+10Fr
                                        ; sub_14861+Dr sub_15242+5Br
                                        ; sub_153CE+1Er sub_15498r
                                        ; sub_1553C+4Fr sub_15662+3Cr
                                        ; sub_15662+D0r sub_15A5E+Br
                                        ; sub_18715+14r sub_18715+1D0r
                                        ; sub_18715+1FBr sub_189FBr
                                        ; sub_19089+1Er sub_19089+82r
                                        ; sub_19234r ReadTrackr ReadTrack+9Cr
                                        ; seg001:935Cr sub_1AAFB+1Cw
TrackBufOfs     dw 0                    ; DATA XREF: AnalyzeTrack+40r
                                        ; sub_15662+D4r sub_18715+18r
                                        ; sub_18715+1AEr sub_18715+1B9r
                                        ; sub_189FB+4r sub_19089+22r
                                        ; sub_19089+86r sub_19234+4r
                                        ; ReadTrack+4r ReadTrack+A0r
                                        ; seg001:9360r sub_1AAFB+2Cw
                                        ; sub_15A5E+Er
CurrTrackBufSeg db    0 ;               ; DATA XREF: sub_18A07+3r sub_1AC25+Cr
                                        ; sub_1AC37+Ew sub_1AC63+10w
                                        ; sub_1AC85+67w sub_1ACFA+18w
                                        ; The segment of the track data currently being processed.
                db 0
word_10091      dw 0                    ; DATA XREF: sub_1AC37+12w
                                        ; sub_1AC63+14w
word_10093      dw 0                    ; DATA XREF: _Main+38w _Main+9Er
                                        ; sub_1AAFB+13w sub_1AC85+12r
                                        ; sub_1AC85+50w
byte_10095      db 0                    ; DATA XREF: sub_12E04w sub_12E04+59w
                                        ; sub_12E04+B7w sub_12E04+110r
byte_10096      db 'R'                  ; DATA XREF: GetCmdLnArgs+1B5r
                                        ; GetCmdLnArgs+1EEr GetCmdLnArgs+239r
                                        ; GetCmdLnArgs+248r GetCmdLnArgs+257r
                                        ; sub_12E04+F8w sub_12E04+10Aw
                                        ; sub_12F2E+2Ar sub_12F2E+90r
                                        ; SetOptionFlags+108r
byte_10097      db 0                    ; DATA XREF: seg001:9333w seg001:9344w
                                        ; seg001:9350w seg001:93A7w
                                        ; seg001:93DFr
DuplicatorCmdByte db 0                  ; DATA XREF: DuplicatorCommandw
                                        ; DuplicatorCommand+38r
                                        ; DuplicatorCommand+4Fr
                                        ; Last byte sent to disk duplicator
byte_10099      db 0                    ; DATA XREF: GetCmdLnArgs+13w
                                        ; GetCmdLnArgs+161w sub_138EEr
                                        ; sub_138EE+Dr
NK_SwitchUsed   db 0FFh                 ; DATA XREF: GetCmdLnArgs+11Fw
                                        ; sub_14FF4r sub_15013r
                                        ; Disables automatic keep track length features if 0.
byte_1009B      db 0                    ; DATA XREF: ReadWrite+222r
                                        ; ReadWrite+234r sub_18321+34r
                                        ; sub_18321+40w sub_18321+5Ar
                db    0 ;
                db    0 ;
                db    0 ;
word_1009F      dw 0                    ; DATA XREF: sub_13AF3+32w
                                        ; sub_13AF3+35r sub_13AF3+5Fr
                                        ; sub_13AF3+69r sub_13AF3+117r
                                        ; sub_13AF3+11Fr sub_13AF3+136r
                                        ; sub_13AF3+151r
word_100A1      dw 0                    ; DATA XREF: sub_13AF3+82w
                                        ; sub_13AF3+97r sub_13AF3+126r
word_100A3      dw 0                    ; DATA XREF: sub_13AF3+48w
                                        ; sub_13AF3+58r sub_13AF3+ADw
                                        ; sub_13AF3+110r
word_100A5      dw 0                    ; DATA XREF: sub_13AF3+4Ew
                                        ; sub_13AF3+54r sub_13AF3+B3w
                                        ; sub_13AF3+10Cr
DskTekExeAttr   dw 0                    ; DATA XREF: sub_13AF3+15w
                                        ; sub_13AF3+15Br
                                        ; file attributes of b:disktech.exe
byte_100A9      db 0                    ; DATA XREF: sub_13AF3w sub_13AF3+2Dw
                                        ; sub_13AF3+14Ar
OldInt24Seg     dw 0                    ; DATA XREF: GetInt24+8w
                                        ; RestoreInt24+7r
OldInt24Off     dw 0                    ; DATA XREF: GetInt24+Cw
                                        ; RestoreInt24+3r
word_100AE      dw 0                    ; DATA XREF: sub_13AF3+40w
                                        ; sub_13AF3+13Dr
word_100B0      dw 0                    ; DATA XREF: sub_13AF3+44w
                                        ; sub_13AF3+141r
C_SwitchUsed    db 0                    ; DATA XREF: _Main+CDr
                                        ; GetCmdLnArgs+7Aw
byte_100B3      db 0                    ; DATA XREF: ReadWrite+1Bw
                                        ; AnalyzeTrack+19Fw sub_1488C+15r
                                        ; seg001:48D6w seg001:48EDr
                                        ; seg001:490Cw seg001:4916r
                                        ; seg001:4938w seg001:495Br
                                        ; seg001:4976w
CurrentOperation db 0                   ; DATA XREF: ReadWrite+298w
                                        ; ReadWrite+306w sub_13882+8r
                                        ; UpdateTrkProgDispw
                                        ; Read=r write=w analyze=a
byte_100B5      db 0                    ; DATA XREF: sub_13ABEw sub_13ABE+13w
                                        ; sub_13AE1r sub_13AE1+Br
byte_100B6      db 0                    ; DATA XREF: _Main+69w sub_12E04+40r
                                        ; sub_12E04+9Cr
byte_100B7      db 0                    ; DATA XREF: _Main+191r sub_12E04+E6w
                                        ; SetOptionFlags+DDr ReadWrite+26r
                                        ; ReadWrite+61r ReadWrite+86r
                                        ; ReadWrite+C7r ReadWrite+1C8r
                                        ; ReadWrite+217r ReadWrite+229r
                                        ; ReadWrite+246r ReadWrite+3D4r
                                        ; ReadWrite+3E1r ReadWrite+3FEr
                                        ; sub_1AAFB+42w sub_1AB42r
                                        ; sub_1AD37+2r
DMACount        dw 34FFh                ; DATA XREF: sub_15186+54w
                                        ; sub_15662+CDw sub_15A5E+27w
                                        ; SetDmaCount+16w SetupDMA+30r
                                        ; sub_17186+2Br seg001:71D4r
                                        ; sub_18A07+9Dw sub_18A07+55Cr
                                        ; sub_19089+17w sub_19089+67r
                                        ; ReadTrack+1Dw ReadTrack+B5r
                                        ; SetupDMA+36r sub_17186+31r
                                        ; seg001:71D9r
DiskType        db 7                    ; DATA XREF: ReadWrite+2Dw
                                        ; ReadWrite+1B5r sub_13882+Fw
                                        ; sub_13882+5Er UpdateTrkProgDisp+3Br
                                        ; UpdateTrkProgDisp+54r
                                        ; DispReadLngth+15r DispReadLngth+25r
                                        ; DispWritLngth+15r DispWritLngth+25r
                                        ; AnalyzeTrack+93r AnalyzeTrack+C0r
                                        ; AnalyzeTrack+19Aw sub_14761+7r
                                        ; sub_14761+1Br sub_1488C+2r
                                        ; seg001:48D1w seg001:48E6w
                                        ; seg001:4907w seg001:491Dw
                                        ; seg001:4933w seg001:494Cw
                                        ; seg001:4962w seg001:4971w
                                        ; sub_149B0r WriteTrack+Ew
                                        ; sub_15F0E+7r SetDmaCountr
                                        ; sub_168BDr sub_168BD+6r
                                        ; SetReadspeedr SetReadspeed+6r
                                        ; sub_16937+35r sub_16937+75r
                                        ; sub_16937+89r sub_16937+CAr
                                        ; SelectHead+5r seg001:8289r
                                        ; sub_189E1r sub_189E1+Br
                                        ; sub_1AB42+7w
                                        ; This byte and following bytes appear at offset 100h in saved image file.
                                        ; 00h = Unknown
                                        ; 01h = Unknown
                                        ; 02h = Unknown
                                        ; 03h = Unknown
                                        ; 04h = Apple
                                        ; 05h = FM
                                        ; 06h = Unknown
                                        ; 07h = MFM
                                        ; 08h = Amiga
                                        ; Other values unknown so far.
StartingCylinder db 0                   ; DATA XREF: GetCmdLnArgs+C3o
                                        ; GetCmdLnArgs+1FEr GetCmdLnArgs+21Fr
                                        ; sub_12F2E+15r sub_12F2E+35w
                                        ; sub_12F2E+70r sub_12F2E+7Cr
                                        ; sub_12F2E+94r sub_12F2E+C3r
                                        ; sub_12F2E+EEr sub_12F2E+19Dr
                                        ; sub_12F2E+1E2r sub_12F2E+227r
                                        ; sub_12F2E+271r SetDefaultOptionsw
                                        ; sub_1331E+21r ReadWriter
                                        ; ReadWrite+BEr ReadWrite+F2r
                                        ; ReadWrite+1A8r
EndingCylinder  db 27h                  ; DATA XREF: GetCmdLnArgs+CDo
                                        ; GetCmdLnArgs+205r GetCmdLnArgs+20Cw
                                        ; GetCmdLnArgs+20Fr GetCmdLnArgs+21Cr
                                        ; sub_12E04+107r sub_12F2E+57r
                                        ; sub_12F2E+9Dw sub_12F2E+BFr
                                        ; sub_12F2E+EBr sub_12F2E+199r
                                        ; sub_12F2E+1DEr sub_12F2E+223r
                                        ; sub_12F2E+26Dr SetDefaultOptions+5w
                                        ; sub_1331E+2Dr ReadWrite+204r
                                        ; ReadWrite+20Ar ReadWrite+23Ew
                                        ; ReadWrite+39Fr sub_13802+6r
                                        ; sub_13802+Dw sub_13802+18r
                                        ; DisplayTracks+6r
                                        ; UpdateTrkProgDisp+10r sub_15662+Ar
                                        ; sub_15662+15r sub_15662+22r
NumberOfSides   db 2                    ; DATA XREF: GetCmdLnArgs+85w
                                        ; GetCmdLnArgs+90w sub_12F2E+127r
                                        ; sub_12F2E+13Er sub_12F2E+14Bw
                                        ; SetDefaultOptions+Fw sub_1331E+45r
                                        ; ReadWrite+1E4r ReadWrite+37Fr
                                        ; sub_1AC85+19r
TrackIncrement  db 1                    ; DATA XREF: GetCmdLnArgs+D7o
                                        ; GetCmdLnArgs+215r GetCmdLnArgs+225r
                                        ; GetCmdLnArgs+22Cr sub_12F2E+D2r
                                        ; sub_12F2E+108w SetDefaultOptions+Aw
                                        ; sub_1331E+39r ReadWrite+1FDr
                                        ; ReadWrite+398r
TrackSkewTbl    dw 100h dup(1111h)      ; DATA XREF: AnalyzeTrack+22w
                                        ; WriteTrack+3Dr sub_159E0+79w
                                        ; seg001:9483w
                                        ; 1 word per track, up to 256 tracks.
                                        ; Sets position of track relative to index.
                                        ; Changing this value rotates the entire track but does not truncate.
TrackOffsTbl    dw 100h dup(2222h)      ; DATA XREF: sub_1AB42+12o
                                        ; sub_1AC25+4r sub_1AC37+21w
                                        ; sub_1AC63+6r sub_1AC85+3Fw
                                        ; sub_1ACFA+3r sub_18A07+6r
                                        ; sub_18A07+75r
                                        ; 1 word per track, up to 256 tracks.
                                        ; Points to track start in image.
                                        ; Last track before 64K boundary zero padded
                                        ; so that next track starts on 64K boundary.
TrackLngthTbl   dw 100h dup(3333h)      ; DATA XREF: WrtTrkLnTbl+8w
                                        ; RdTrkLngthTbl+4r
                                        ; Track length in bytes.
                                        ; 1 word per track, up to 256 tracks.
                                        ; Multiply by 8 to get track length in
                                        ; bits as displayed on screen.
TrackTypeTable  dw 100h dup(4444h)      ; DATA XREF: SetOptionFlags+E6r
                                        ; SetOptionFlags+EAw sub_13882+4r
                                        ; AnalyzeTrack+CEw AnalyzeTrack+13Bw
                                        ; AnalyzeTrack+140w AnalyzeTrack+191r
                                        ; sub_149C2+29w sub_14AEF+7Bw
                                        ; sub_14FE4+9w sub_14FF4+18w
                                        ; sub_15013+18w sub_15013+2Bw
                                        ; WriteTrack+Ar WriteTrack+12r
                                        ; sub_16937+82r sub_18A07+5EFr
                                        ; seg001:933Cr seg001:948Ew
                                        ; sub_1AB90+2Ar sub_13AA7r
                                        ; AnalyzeTrack+C3w
                                        ; 2 bytes per track, up to 256 tracks.
                                        ; High byte same format as DiskType, 07h=MFM, 08h=Amiga, Etc.
                                        ; Low byte track options:
                                        ; Bit 0 1=Keep track length.
                                        ; Bit 1 1=Copy across index.
                                        ; Bit 2 1=Copy weak bits.
                                        ; Bit 3 1=Verify write.
                                        ; Bits 4-7 Unknown options automatically set on unusual
                                        ; tracks. All 0 for normal tracks.
TrackDataBuffer db 2002h dup(0)         ; DATA XREF: sub_15A5E+255r
                                        ; sub_15A5E+261w sub_15D16+1Fw
                                        ; sub_15D77+AEr sub_174FB+119r
                                        ; sub_174FB+125w sub_15D77+7Fw
                                        ; sub_15D77+8Fw
                                        ; The actual track data being read or written goes here

; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


_Main           proc near               ; CODE XREF: start+95p
                push    ds
                push    cs
                pop     ds
                assume ds:seg001
                mov     ah, 0Dh
                int     21h             ; DOS - DISK RESET
                mov     ColorMono, 0
                int     11h             ; EQUIPMENT DETERMINATION
                                        ; Return: AX = equipment flag bits
                and     ax, 30h
                cmp     ax, 30h ; '0'
                jz      short loc_128DC
                mov     ColorMono, 1    ; color

loc_128DC:                              ; CODE XREF: _Main+14j
                call    ClearScreen
                push    ds
                mov     ax, 0FFFFh
                mov     ds, ax
                assume ds:nothing
                mov     bx, 0Eh
                mov     al, [bx]
                pop     ds
                assume ds:nothing
                mov     ds:BiosModelByte, al ; FCh=AT,FDh=PCjr,FEh=XT,FF=PC
                mov     dl, 0
                mov     dh, 1
                mov     al, 0
                push    ds
                call    sub_1AFAC
                push    ax
                mov     cs:word_10093, cx
                call    sub_1B12A
                pop     ax
                pop     ds
                cmp     al, 0
                jz      short loc_12910
                mov     ax, MsgOffs.field_0 ; "Insufficient memory"
                call    DisplayString
                jmp     loc_12B02
; ---------------------------------------------------------------------------

loc_12910:                              ; CODE XREF: _Main+44j
                mov     al, 36h ; '6'   ; Set timer 0 16 bit mode.
                out     43h, al         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                mov     al, 0
                out     40h, al         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                out     40h, al         ; Timer 8253-5 (AT: 8254.2).
                mov     ah, 19h
                int     21h             ; DOS - GET DEFAULT DISK NUMBER
                mov     dl, al
                mov     ah, 0Eh
                int     21h             ; DOS - SELECT DISK
                                        ; DL = new default drive number (0 = A, 1 = B, etc.)
                                        ; Return: AL = number of logical drives
                dec     al
                mov     ds:byte_100B6, al
                int     11h             ; EQUIPMENT DETERMINATION
                                        ; Return: AX = equipment flag bits
                shl     ax, 1
                shl     ax, 1
                and     ah, 3
                inc     ah
                mov     ds:byte_10043, ah
                mov     ds:aSourceDrvLtr, 'A'
                mov     ds:aTargetDrvLtr, 'B'
                cmp     ah, 1
                jnz     short loc_12950
                mov     ds:aTargetDrvLtr, 'A'

loc_12950:                              ; CODE XREF: _Main+88j
                mov     al, 'T'
                call    DuplicatorCommand
                mov     ds:DuplicatorReturn, al
                cmp     ds:DuplicatorReturn, 0
                jz      short loc_1296F
                cmp     ds:word_10093, 13h
                jnb     short loc_1296F
                mov     ax, MsgOffs.field_2
                call    DisplayString
                jmp     loc_12B02
; ---------------------------------------------------------------------------

loc_1296F:                              ; CODE XREF: _Main+9Cj _Main+A3j
                call    SetDefaultOptions
                call    GetCmdLnArgs
                jnb     short loc_12980
                mov     ax, MsgOffs.field_2C
                call    DisplayString
                jmp     loc_12B02
; ---------------------------------------------------------------------------

loc_12980:                              ; CODE XREF: _Main+B4j
                call    GetTC_Port_DMA
                jnb     short loc_1298E
                mov     ax, MsgOffs.field_2B
                call    DisplayString
                jmp     loc_12B02
; ---------------------------------------------------------------------------

loc_1298E:                              ; CODE XREF: _Main+C2j
                cmp     ds:C_SwitchUsed, 0
                jz      short loc_129A1
                mov     ax, MsgOffs.field_2F
                call    DisplayString
                call    GetKey
                call    ClearScreen

loc_129A1:                              ; CODE XREF: _Main+D2j
                mov     ax, MsgOffs.field_0Eh
                call    DisplayString
                cmp     ds:DuplicatorReturn, 0FFh
                jz      short loc_129C7 ; skip important message if duplicator present
                cmp     ds:DuplicatorPresent, 0
                jnz     short loc_129C7
                mov     ax, MsgOffs.field_23
                call    DisplayString
                mov     ax, MsgOffs.field_2D
                call    DisplayString
                call    GetKey
                call    sub_17BB5

loc_129C7:                              ; CODE XREF: _Main+EBj _Main+F2j
                mov     al, 43h ; 'C'
                call    DuplicatorCommand

loc_129CC:                              ; CODE XREF: _Main+144j _Main+15Dj
                                        ; _Main+178j _Main+238j
                mov     al, 54h ; 'T'
                call    DuplicatorCommand
                mov     ds:DuplicatorReturn, al
                call    sub_1331E
                mov     dx, 400h
                call    SetCursorPos
                mov     ax, MsgOffs.field_14
                call    DisplayString
                call    DisplayDMA_Port
                call    sub_12E04
                jnb     short loc_12A0A
                mov     ds:DuplicatorPresent, 0
                cmp     al, 0FFh
                jnz     short loc_129FD
                mov     ax, MsgOffs.field_49
                call    sub_132D3
                jmp     loc_12AF1
; ---------------------------------------------------------------------------

loc_129FD:                              ; CODE XREF: _Main+131j
                cmp     ah, 3Ch ; '<'
                jz      short loc_12A43
                cmp     ah, 44h ; 'D'
                jnz     short loc_129CC
                jmp     loc_12AFC
; ---------------------------------------------------------------------------

loc_12A0A:                              ; CODE XREF: _Main+128j
                cmp     ds:DuplicatorPresent, 0
                jnz     short loc_12A43
                call    sub_12F2E
                jnb     short loc_12A23
                cmp     ah, 3Ch ; '<'
                jz      short loc_12A43
                cmp     ah, 44h ; 'D'
                jnz     short loc_129CC
                jmp     loc_12AFC
; ---------------------------------------------------------------------------

loc_12A23:                              ; CODE XREF: _Main+153j
                call    sub_17BBE
                mov     ax, MsgOffs.field_22
                call    DisplayString

loc_12A2C:                              ; CODE XREF: _Main+17Dj
                call    GetKey
                cmp     ah, 3Ch ; '<'
                jz      short loc_12A43
                cmp     ah, 1Bh
                jnz     short loc_12A3B
                jmp     short loc_129CC
; ---------------------------------------------------------------------------

loc_12A3B:                              ; CODE XREF: _Main+176j
                cmp     ah, 44h ; 'D'
                jnz     short loc_12A2C
                jmp     loc_12AFC
; ---------------------------------------------------------------------------

loc_12A43:                              ; CODE XREF: _Main+13Fj _Main+14Ej
                                        ; _Main+158j _Main+171j
                call    SetOptionFlags
                mov     ds:NumBadDsks, 0
                mov     ds:NumGoodDsks, 0
                cmp     ds:byte_100B7, 2
                jnz     short loc_12A5E
                mov     ds:DuplicatorReturn, 0

loc_12A5E:                              ; CODE XREF: _Main+196j
                cmp     ds:DuplicatorReturn, 0
                jz      short loc_12A68
                call    DispGoodBadDsks

loc_12A68:                              ; CODE XREF: _Main+1A2j
                call    ClrMessageWndw
                mov     dx, 400h
                call    SetCursorPos
                mov     ax, MsgOffs.field_14
                call    DisplayString
                call    DisplayTracks   ; puts track display at bottom of screen
                call    ReadWrite
                mov     ds:DuplicatorPresent, 0
                jnb     short loc_12A9A
                cmp     al, 0
                jz      short loc_12AA7
                push    ax
                call    sub_17BBE
                mov     dx, 732h
                call    SetCursorPos
                pop     ax
                mov     ah, 0
                add     al, MsgOffs.field_12
                jmp     short loc_12AEE
; ---------------------------------------------------------------------------
                align 2

loc_12A9A:                              ; CODE XREF: _Main+1C1j
                call    sub_13AA7
                cmp     ds:DuplicatorReturn, 0FFh
                jz      short loc_12AA7
                call    Beep

loc_12AA7:                              ; CODE XREF: _Main+1C5j _Main+1E1j
                mov     dx, ds:NumGoodDsks
                cmp     dx, ds:word_10084
                jnb     short loc_12AFC
                cmp     ds:DuplicatorReturn, 0
                jnz     short loc_12AE5
                cmp     ds:byte_13D11, 0FFh
                jnz     short loc_12AE5
                cmp     ds:F_SwitchUsed, 0FFh
                jnz     short loc_12AD2
                mov     dx, 700h
                call    SetCursorPos
                mov     ax, MsgOffs.field_46
                jmp     short loc_12AEE
; ---------------------------------------------------------------------------
                align 2

loc_12AD2:                              ; CODE XREF: _Main+203j
                cmp     ds:byte_13D1C, 0FFh
                jnz     short loc_12AE5
                mov     dx, 700h
                call    SetCursorPos
                mov     ax, MsgOffs.field_47
                jmp     short loc_12AEE
; ---------------------------------------------------------------------------
                db 90h
; ---------------------------------------------------------------------------

loc_12AE5:                              ; CODE XREF: _Main+1F5j _Main+1FCj
                                        ; _Main+216j
                mov     dx, 732h
                call    SetCursorPos
                mov     ax, MsgOffs.field_F

loc_12AEE:                              ; CODE XREF: _Main+1D6j _Main+20Ej
                                        ; _Main+221j
                call    DisplayString

loc_12AF1:                              ; CODE XREF: _Main+139j
                call    GetKey
                cmp     ah, 44h ; 'D'
                jz      short loc_12AFC
                jmp     loc_129CC
; ---------------------------------------------------------------------------

loc_12AFC:                              ; CODE XREF: _Main+146j _Main+15Fj
                                        ; _Main+17Fj _Main+1EEj _Main+236j
                call    sub_16865
                call    ClearScreen

loc_12B02:                              ; CODE XREF: _Main+4Cj _Main+ABj
                                        ; _Main+BCj _Main+CAj
                call    sub_1B12A
                pop     ds
                retn
_Main           endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


DuplicatorCommand proc near             ; CODE XREF: _Main+91p _Main+108p
                                        ; _Main+10Dp ReadWrite+51p
                                        ; ReadWrite+56p ReadWrite+AEp
                                        ; ReadWrite+B3p ReadWrite+3BDp
                                        ; ReadWrite+423p
                mov     ds:DuplicatorCmdByte, al

loc_12B0A:                              ; CODE XREF: DuplicatorCommand+3Dj
                                        ; DuplicatorCommand+46j
                                        ; DuplicatorCommand+5Dj
                call    DuplicatorVector
                jnb     short loc_12B66

loc_12B0F:                              ; CODE XREF: DuplicatorCommand+4Dj
                push    ax
                mov     dx, 400h
                call    SetCursorPos
                mov     ax, MsgOffs.field_14
                call    DisplayString
                mov     dx, 732h
                call    SetCursorPos
                pop     ax
                push    ax
                add     ax, MsgOffs.field_31
                call    DisplayString
                call    GetKey
                call    ClrMessageWndw
                cmp     al, 1Bh
                pop     ax
                jz      short loc_12B68
                cmp     ax, 6
                jnb     short loc_12B66
                cmp     ax, 0
                jnz     short loc_12B4F
                mov     al, ds:DuplicatorCmdByte
                cmp     al, 'X'
                jnz     short loc_12B0A
                mov     al, 'I'
                call    DuplicatorVector
                mov     al, 'X'
                jmp     short loc_12B0A
; ---------------------------------------------------------------------------

loc_12B4F:                              ; CODE XREF: DuplicatorCommand+36j
                mov     al, 'C'
                call    DuplicatorVector
                jb      short loc_12B0F
                mov     al, ds:DuplicatorCmdByte
                cmp     al, 'X'
                jnz     short loc_12B66
                mov     al, 'I'
                call    DuplicatorVector
                mov     al, 'X'
                jmp     short loc_12B0A
; ---------------------------------------------------------------------------

loc_12B66:                              ; CODE XREF: DuplicatorCommand+6j
                                        ; DuplicatorCommand+31j
                                        ; DuplicatorCommand+54j
                clc
                retn
; ---------------------------------------------------------------------------

loc_12B68:                              ; CODE XREF: DuplicatorCommand+2Cj
                stc
                retn
DuplicatorCommand endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


GetCmdLnArgs    proc near               ; CODE XREF: _Main+B1p
                push    es
                mov     ax, cs
                sub     ax, 10h
                mov     es, ax
                assume es:PSP
                mov     ds:word_10084, 7FFFh
                mov     ds:DuplicatorPresent, 0
                mov     ds:byte_10099, 0FFh
                mov     al, es:FirstDefaultFCB
                cmp     al, 0
                jz      short loc_12BAB
                add     al, 40h ; '@'
                mov     ds:aSourceDrvLtr, al
                mov     ds:aTargetDrvLtr, al
                mov     al, es:SecondDefaultFCB
                cmp     al, 0
                jz      short loc_12B9F
                add     al, 40h ; '@'
                mov     ds:aTargetDrvLtr, al

loc_12B9F:                              ; CODE XREF: GetCmdLnArgs+2Ej
                cmp     ds:DuplicatorReturn, 0
                jz      short loc_12BAB
                mov     ds:DuplicatorPresent, 0FFh

loc_12BAB:                              ; CODE XREF: GetCmdLnArgs+1Ej
                                        ; GetCmdLnArgs+3Aj
                mov     si, offset aCommandLineTail

loc_12BAE:                              ; CODE XREF: GetCmdLnArgs+4Bj
                                        ; GetCmdLnArgs+7Fj GetCmdLnArgs+173j
                call    GetCmdlnByte
                jb      short NoArgs
                cmp     al, '/'         ; is it a switch?
                jnz     short loc_12BAE
                jmp     short loc_12BC5
; ---------------------------------------------------------------------------
                align 2

loc_12BBA:                              ; CODE XREF: GetCmdLnArgs+74j
                                        ; GetCmdLnArgs+8Aj GetCmdLnArgs+95j
                                        ; GetCmdLnArgs+124j GetCmdLnArgs+147j
                                        ; GetCmdLnArgs+164j GetCmdLnArgs+170j
                call    GetCmdlnByte
                jnb     short loc_12BC5

NoArgs:                                 ; CODE XREF: GetCmdLnArgs+47j
                jmp     loc_12D68
; ---------------------------------------------------------------------------

loc_12BC2:                              ; CODE XREF: GetCmdLnArgs+5Dj
                                        ; GetCmdLnArgs+69j GetCmdLnArgs+6Dj
                jmp     loc_12D9C
; ---------------------------------------------------------------------------

loc_12BC5:                              ; CODE XREF: GetCmdLnArgs+4Dj
                                        ; GetCmdLnArgs+53j GetCmdLnArgs+107j
                                        ; GetCmdLnArgs+19Bj GetCmdLnArgs+1CCj
                cmp     al, '/'
                jnz     short loc_12BC2
                call    GetCmdlnByte
                cmp     al, 'B'
                jnz     short loc_12BE0
                call    GetCmdlnByte
                jb      short loc_12BC2
                cmp     al, 'W'
                jnz     short loc_12BC2
                mov     ds:ColorMono, 0
                jmp     short loc_12BBA
; ---------------------------------------------------------------------------

loc_12BE0:                              ; CODE XREF: GetCmdLnArgs+64j
                cmp     al, 'C'
                jnz     short loc_12BEB
                mov     ds:C_SwitchUsed, 0FFh
                jmp     short loc_12BAE
; ---------------------------------------------------------------------------

loc_12BEB:                              ; CODE XREF: GetCmdLnArgs+78j
                cmp     al, '1'
                jnz     short loc_12BF6
                mov     ds:NumberOfSides, 1
                jmp     short loc_12BBA
; ---------------------------------------------------------------------------

loc_12BF6:                              ; CODE XREF: GetCmdLnArgs+83j
                cmp     al, '2'
                jnz     short loc_12C01
                mov     ds:NumberOfSides, 2
                jmp     short loc_12BBA
; ---------------------------------------------------------------------------

loc_12C01:                              ; CODE XREF: GetCmdLnArgs+8Ej
                cmp     al, 'W'
                jnz     short loc_12C0B
                mov     bx, offset CopyWkBits0
                jmp     loc_12CEF
; ---------------------------------------------------------------------------

loc_12C0B:                              ; CODE XREF: GetCmdLnArgs+99j
                cmp     al, 'K'
                jnz     short loc_12C15
                mov     bx, offset KeepTrkLngth0
                jmp     loc_12CEF
; ---------------------------------------------------------------------------

loc_12C15:                              ; CODE XREF: GetCmdLnArgs+A3j
                cmp     al, 'A'
                jnz     short loc_12C1F
                mov     bx, offset CopyXIDX0
                jmp     loc_12CEF
; ---------------------------------------------------------------------------

loc_12C1F:                              ; CODE XREF: GetCmdLnArgs+ADj
                cmp     al, 'V'
                jnz     short loc_12C29
                mov     bx, offset VerifyWrite0
                jmp     loc_12CEF
; ---------------------------------------------------------------------------

loc_12C29:                              ; CODE XREF: GetCmdLnArgs+B7j
                cmp     al, 'S'
                jnz     short loc_12C33
                mov     bx, offset StartingCylinder
                jmp     loc_12CE3
; ---------------------------------------------------------------------------

loc_12C33:                              ; CODE XREF: GetCmdLnArgs+C1j
                cmp     al, 'E'
                jnz     short loc_12C3D
                mov     bx, offset EndingCylinder
                jmp     loc_12CE3
; ---------------------------------------------------------------------------

loc_12C3D:                              ; CODE XREF: GetCmdLnArgs+CBj
                cmp     al, 'I'
                jnz     short loc_12C47
                mov     bx, offset TrackIncrement
                jmp     loc_12CE3
; ---------------------------------------------------------------------------

loc_12C47:                              ; CODE XREF: GetCmdLnArgs+D5j
                cmp     al, 'N'
                jnz     short loc_12C91
                call    GetCmdlnByte
                jb      short loc_12CB4
                cmp     al, '='
                jnz     short loc_12C59
                call    GetCmdlnByte
                jb      short loc_12CB4

loc_12C59:                              ; CODE XREF: GetCmdLnArgs+E8j
                cmp     al, 'K'
                jz      short loc_12C89
                call    sub_12DF6
                jb      short loc_12CB4
                mov     ah, 0
                mov     ds:word_10084, ax

loc_12C67:                              ; CODE XREF: GetCmdLnArgs+11Dj
                call    GetCmdlnByte
                jb      short loc_12CE0
                call    sub_12DF6
                jnb     short loc_12C74
                jmp     loc_12BC5
; ---------------------------------------------------------------------------

loc_12C74:                              ; CODE XREF: GetCmdLnArgs+105j
                mov     ah, 0
                push    ax
                mov     ax, ds:word_10084
                mov     cx, 0Ah
                mul     cx
                mov     ds:word_10084, ax
                pop     ax
                add     ds:word_10084, ax
                jmp     short loc_12C67
; ---------------------------------------------------------------------------

loc_12C89:                              ; CODE XREF: GetCmdLnArgs+F1j
                mov     ds:NK_SwitchUsed, 0
                jmp     loc_12BBA
; ---------------------------------------------------------------------------

loc_12C91:                              ; CODE XREF: GetCmdLnArgs+DFj
                cmp     al, 'P'
                jnz     short loc_12CB7
                call    GetCmdlnByte
                jb      short loc_12CB4
                cmp     al, '1'
                jb      short loc_12CB4
                cmp     al, '4'
                ja      short loc_12CB4
                sub     al, '1'
                mov     bl, al
                mov     bh, 0
                shl     bx, 1
                mov     ax, ds:TC_Addr1[bx]
                mov     ds:TC_Port_Base, ax
                jmp     loc_12BBA
; ---------------------------------------------------------------------------

loc_12CB4:                              ; CODE XREF: GetCmdLnArgs+E4j
                                        ; GetCmdLnArgs+EDj GetCmdLnArgs+F6j
                                        ; GetCmdLnArgs+12Ej GetCmdLnArgs+132j
                                        ; GetCmdLnArgs+136j GetCmdLnArgs+154j
                                        ; GetCmdLnArgs+159j GetCmdLnArgs+17Cj
                jmp     loc_12D9C
; ---------------------------------------------------------------------------

loc_12CB7:                              ; CODE XREF: GetCmdLnArgs+129j
                cmp     al, 'T'
                jnz     short loc_12CD1
                call    GetCmdlnByte
                jb      short loc_12CB4
                call    sub_12DEA
                jb      short loc_12CB4
                shl     al, 1
                shl     al, 1
                shl     al, 1
                mov     ds:byte_10099, al
                jmp     loc_12BBA
; ---------------------------------------------------------------------------

loc_12CD1:                              ; CODE XREF: GetCmdLnArgs+14Fj
                cmp     al, 'F'
                jnz     short loc_12CDD
                mov     ds:F_SwitchUsed, 80h ; 'Ç'
                jmp     loc_12BBA
; ---------------------------------------------------------------------------

loc_12CDD:                              ; CODE XREF: GetCmdLnArgs+169j
                jmp     loc_12BAE
; ---------------------------------------------------------------------------

loc_12CE0:                              ; CODE XREF: GetCmdLnArgs+100j
                jmp     loc_12D68
; ---------------------------------------------------------------------------

loc_12CE3:                              ; CODE XREF: GetCmdLnArgs+C6j
                                        ; GetCmdLnArgs+D0j GetCmdLnArgs+DAj
                call    GetCmdlnByte
                jb      short loc_12CB4
                cmp     al, '='
                jnz     short loc_12D3F
                jmp     short loc_12D3A
; ---------------------------------------------------------------------------
                db 90h
; ---------------------------------------------------------------------------

loc_12CEF:                              ; CODE XREF: GetCmdLnArgs+9Ej
                                        ; GetCmdLnArgs+A8j GetCmdLnArgs+B2j
                                        ; GetCmdLnArgs+BCj
                mov     byte ptr [bx], 'y'
                call    GetCmdlnByte
                jb      short loc_12D68
                cmp     al, '='
                jnz     short loc_12D00
                call    GetCmdlnByte
                jb      short loc_12D68

loc_12D00:                              ; CODE XREF: GetCmdLnArgs+18Fj
                call    sub_12DEA
                jnb     short loc_12D08
                jmp     loc_12BC5
; ---------------------------------------------------------------------------

loc_12D08:                              ; CODE XREF: GetCmdLnArgs+199j
                mov     dl, al
                mov     [bx], dl
                mov     [bx+1], dl
                call    GetCmdlnByte
                jb      short loc_12D68
                call    sub_12DEA
                jb      short loc_12D32
                mov     cl, 4
                shl     dl, cl
                or      dl, al
                cmp     dl, ds:byte_10096
                jbe     short loc_12D28
                jmp     short loc_12D9C
; ---------------------------------------------------------------------------
                align 2

loc_12D28:                              ; CODE XREF: GetCmdLnArgs+1B9j
                mov     [bx], dl
                mov     [bx+1], dl
                call    GetCmdlnByte
                jb      short loc_12D68

loc_12D32:                              ; CODE XREF: GetCmdLnArgs+1ADj
                cmp     al, '-'
                jz      short loc_12D39

loc_12D36:                              ; CODE XREF: GetCmdLnArgs+1E6j
                                        ; GetCmdLnArgs+1FCj
                jmp     loc_12BC5
; ---------------------------------------------------------------------------

loc_12D39:                              ; CODE XREF: GetCmdLnArgs+1CAj
                inc     bx

loc_12D3A:                              ; CODE XREF: GetCmdLnArgs+182j
                call    GetCmdlnByte
                jb      short loc_12D68

loc_12D3F:                              ; CODE XREF: GetCmdLnArgs+180j
                call    sub_12DEA
                jb      short loc_12D9C
                mov     dl, al
                mov     [bx], dl
                call    GetCmdlnByte
                jb      short loc_12D68
                call    sub_12DEA
                jb      short loc_12D36
                mov     cl, 4
                shl     dl, cl
                or      dl, al
                cmp     dl, ds:byte_10096
                jbe     short loc_12D61
                jmp     short loc_12D9C
; ---------------------------------------------------------------------------
                db 90h
; ---------------------------------------------------------------------------

loc_12D61:                              ; CODE XREF: GetCmdLnArgs+1F2j
                mov     [bx], dl
                call    GetCmdlnByte
                jnb     short loc_12D36

loc_12D68:                              ; CODE XREF: GetCmdLnArgs+55j
                                        ; GetCmdLnArgs+176j GetCmdLnArgs+18Bj
                                        ; GetCmdLnArgs+194j GetCmdLnArgs+1A8j
                                        ; GetCmdLnArgs+1C6j GetCmdLnArgs+1D3j
                                        ; GetCmdLnArgs+1E1j
                mov     al, ds:StartingCylinder
                cmp     al, 28h ; '('
                jbe     short loc_12D79
                cmp     ds:EndingCylinder, 28h ; '('
                jnz     short loc_12D79
                mov     ds:EndingCylinder, al

loc_12D79:                              ; CODE XREF: GetCmdLnArgs+203j
                                        ; GetCmdLnArgs+20Aj
                cmp     al, ds:EndingCylinder
                ja      short loc_12D9C
                cmp     ds:TrackIncrement, 1
                jz      short loc_12DA0
                mov     al, ds:EndingCylinder
                sub     al, ds:StartingCylinder
                jz      short loc_12DA0
                cmp     ds:TrackIncrement, 0
                jz      short loc_12D9C
                cmp     al, ds:TrackIncrement
                ja      short loc_12DA0

loc_12D9C:                              ; CODE XREF: GetCmdLnArgs+58j
                                        ; GetCmdLnArgs+14Aj GetCmdLnArgs+1BBj
                                        ; GetCmdLnArgs+1D8j GetCmdLnArgs+1F4j
                                        ; GetCmdLnArgs+213j GetCmdLnArgs+22Aj
                                        ; GetCmdLnArgs+243j GetCmdLnArgs+252j
                                        ; GetCmdLnArgs+261j
                stc
                jmp     short loc_12DCE
; ---------------------------------------------------------------------------
                align 2

loc_12DA0:                              ; CODE XREF: GetCmdLnArgs+21Aj
                                        ; GetCmdLnArgs+223j GetCmdLnArgs+230j
                mov     al, ds:CopyWkBits0
                cmp     al, ds:byte_10096
                ja      short loc_12DAF
                cmp     al, ds:CopyWkBits1
                ja      short loc_12D9C

loc_12DAF:                              ; CODE XREF: GetCmdLnArgs+23Dj
                mov     al, ds:KeepTrkLngth0
                cmp     al, ds:byte_10096
                ja      short loc_12DBE
                cmp     al, ds:KeepTrkLngth1
                ja      short loc_12D9C

loc_12DBE:                              ; CODE XREF: GetCmdLnArgs+24Cj
                mov     al, ds:CopyXIDX0
                cmp     al, ds:byte_10096
                ja      short loc_12DCD
                cmp     al, ds:CopyXIDX1
                ja      short loc_12D9C

loc_12DCD:                              ; CODE XREF: GetCmdLnArgs+25Bj
                clc

loc_12DCE:                              ; CODE XREF: GetCmdLnArgs+233j
                pop     es
                assume es:nothing
                retn
GetCmdLnArgs    endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


GetCmdlnByte    proc near               ; CODE XREF: GetCmdLnArgs+44p
                                        ; GetCmdLnArgs+50p GetCmdLnArgs+5Fp
                                        ; GetCmdLnArgs+66p GetCmdLnArgs+E1p
                                        ; GetCmdLnArgs+EAp GetCmdLnArgs+FDp
                                        ; GetCmdLnArgs+12Bp GetCmdLnArgs+151p
                                        ; GetCmdLnArgs+179p GetCmdLnArgs+188p
                                        ; GetCmdLnArgs+191p GetCmdLnArgs+1A5p
                                        ; GetCmdLnArgs+1C3p GetCmdLnArgs+1D0p
                                        ; GetCmdLnArgs+1DEp GetCmdLnArgs+1F9p
                                        ; GetCmdlnByte+6j
                mov     al, es:[si]
                inc     si
                cmp     al, ' '
                jz      short GetCmdlnByte
                cmp     al, 'a'
                jb      short loc_12DE2
                cmp     al, 'z'
                ja      short loc_12DE2
                and     al, 0DFh

loc_12DE2:                              ; CODE XREF: GetCmdlnByte+Aj
                                        ; GetCmdlnByte+Ej
                cmp     al, 0Dh
                jz      short loc_12DE8
                clc
                retn
; ---------------------------------------------------------------------------

loc_12DE8:                              ; CODE XREF: GetCmdlnByte+14j
                stc
                retn
GetCmdlnByte    endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_12DEA       proc near               ; CODE XREF: GetCmdLnArgs+156p
                                        ; GetCmdLnArgs+196p GetCmdLnArgs+1AAp
                                        ; GetCmdLnArgs+1D5p GetCmdLnArgs+1E3p
                cmp     al, 'F'
                ja      short loc_12E02
                cmp     al, 'A'
                jb      short sub_12DF6
                sub     al, '7'
                clc
                retn
sub_12DEA       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_12DF6       proc near               ; CODE XREF: GetCmdLnArgs+F3p
                                        ; GetCmdLnArgs+102p sub_12DEA+6j
                cmp     al, '9'
                ja      short loc_12E02
                cmp     al, '0'
                jb      short loc_12E02
                sub     al, '0'
                clc
                retn
; ---------------------------------------------------------------------------

loc_12E02:                              ; CODE XREF: sub_12DEA+2j sub_12DF6+2j
                                        ; sub_12DF6+6j
                stc
                retn
sub_12DF6       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_12E04       proc near               ; CODE XREF: _Main+125p
                mov     ds:byte_10095, 0Dh
                call    sub_1B12A
                cmp     ds:DuplicatorPresent, 0
                jz      short loc_12E16
                jmp     loc_12ECC
; ---------------------------------------------------------------------------

loc_12E16:                              ; CODE XREF: sub_12E04+Dj
                mov     dx, 400h
                call    SetCursorPos
                mov     ax, MsgOffs.field_0B
                call    DisplayString
                call    ReadCursorPos
                mov     ds:word_1003B, dx
                mov     al, ds:aSourceDrvLtr
                mov     ah, 0
                push    ax
                call    DisplayChar
                mov     ax, MsgOffs.field_1C
                call    sub_132D3
                mov     dx, 744h
                call    SetCursorPos
                mov     al, ds:byte_1949A
                mov     ds:VideoAttribute, al
                mov     al, ds:byte_100B6
                add     al, 'A'
                call    DisplayChar
                mov     al, ds:byte_1949B
                mov     ds:VideoAttribute, al
                mov     dx, ds:word_1003B
                call    SetCursorPos
                pop     ax
                call    sub_17C9B
                mov     ds:byte_10095, ah
                jnb     short loc_12E66
                jmp     loc_12F26
; ---------------------------------------------------------------------------

loc_12E66:                              ; CODE XREF: sub_12E04+5Dj
                mov     ds:aSourceDrvLtr, al
                mov     dx, ds:word_1003B
                call    SetCursorPos
                call    DisplayChar
                cmp     ah, '<'
                jz      short loc_12ECC
                mov     ax, MsgOffs.field_0C
                call    DisplayString
                call    ReadCursorPos
                mov     ds:word_1003B, dx
                mov     ah, 0
                mov     al, ds:aTargetDrvLtr
                push    ax
                call    DisplayChar
                mov     ax, MsgOffs.field_1E
                call    sub_132D3
                mov     dx, 744h
                call    SetCursorPos
                mov     al, ds:byte_1949A
                mov     ds:VideoAttribute, al
                mov     al, ds:byte_100B6
                add     al, 'A'
                call    DisplayChar
                mov     al, ds:byte_1949B
                mov     ds:VideoAttribute, al
                mov     dx, ds:word_1003B
                call    SetCursorPos
                pop     ax
                call    sub_17C9B
                jb      short loc_12F26
                mov     ds:byte_10095, ah
                mov     ds:aTargetDrvLtr, al
                mov     dx, ds:word_1003B
                call    SetCursorPos
                call    DisplayChar

loc_12ECC:                              ; CODE XREF: sub_12E04+Fj
                                        ; sub_12E04+72j
                mov     al, ds:aSourceDrvLtr
                sub     al, 'A'
                mov     ds:SourceDriveNumber, al
                mov     al, ds:aTargetDrvLtr
                sub     al, 'A'
                mov     ds:TargetDriveNumber, al
                mov     dl, ds:SourceDriveNumber
                mov     dh, ds:TargetDriveNumber
                mov     al, ds:DuplicatorReturn
                call    sub_1AAFB
                mov     ds:byte_100B7, dh
                cmp     al, 0
                jz      short loc_12EFC
                push    ax
                call    sub_1B12A
                pop     ax
                mov     ah, 1Bh
                jmp     short loc_12F26
; ---------------------------------------------------------------------------
                align 2

loc_12EFC:                              ; CODE XREF: sub_12E04+ECj
                mov     ds:byte_10096, 'R'
                cmp     dh, 1
                jnz     short loc_12F14
                call    sub_1AB90
                jb      short loc_12F2A
                mov     al, ds:EndingCylinder
                mov     ds:byte_10096, al
                call    sub_1331E

loc_12F14:                              ; CODE XREF: sub_12E04+100j
                mov     ah, ds:byte_10095
                cmp     ah, '<'
                jz      short loc_12F26
                cmp     ah, 'D'
                jz      short loc_12F26
                mov     al, 0
                clc
                retn
; ---------------------------------------------------------------------------

loc_12F26:                              ; CODE XREF: sub_12E04+5Fj
                                        ; sub_12E04+B5j sub_12E04+F5j
                                        ; sub_12E04+117j sub_12E04+11Cj
                mov     al, 1
                stc
                retn
; ---------------------------------------------------------------------------

loc_12F2A:                              ; CODE XREF: sub_12E04+105j
                mov     al, 0FFh
                stc
                retn
sub_12E04       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_12F2E       proc near               ; CODE XREF: _Main+150p
                mov     dx, 600h
                call    SetCursorPos
                mov     ax, MsgOffs.field_3
                call    DisplayString
                call    ReadCursorPos
                mov     ds:word_1003B, dx
                mov     ah, 0
                mov     al, ds:StartingCylinder
                push    ax
                call    DisplayHexTrack
                mov     ax, MsgOffs.field_1E
                call    sub_132D3
                mov     dx, ds:word_1003B
                call    SetCursorPos
                pop     ax
                mov     bh, ds:byte_10096
                mov     bl, 0
                call    sub_17CCA
                jb      short loc_12FC9
                mov     ds:StartingCylinder, al
                mov     dx, ds:word_1003B
                call    SetCursorPos
                call    DisplayHexTrack
                cmp     ah, 3Ch ; '<'
                stc
                jz      short loc_12FC9
                mov     ax, MsgOffs.field_4
                call    DisplayString
                call    ReadCursorPos
                mov     ds:word_1003B, dx
                mov     ah, 0
                mov     al, ds:EndingCylinder
                push    ax
                call    DisplayHexTrack
                mov     ax, MsgOffs.field_1F
                call    sub_132D3
                mov     dx, 833h
                call    SetCursorPos
                mov     al, ds:byte_1949A
                mov     ds:VideoAttribute, al
                mov     al, ds:StartingCylinder
                call    DisplayHexTrack
                mov     dx, 933h
                call    SetCursorPos
                mov     al, ds:StartingCylinder
                call    DisplayHexTrack
                mov     al, ds:byte_1949B
                mov     ds:VideoAttribute, al
                mov     dx, ds:word_1003B
                call    SetCursorPos
                pop     ax
                mov     bh, ds:byte_10096
                mov     bl, ds:StartingCylinder
                call    sub_17CCA

loc_12FC9:                              ; CODE XREF: sub_12F2E+33j
                                        ; sub_12F2E+46j
                jb      short loc_13034
                mov     ds:EndingCylinder, al
                mov     dx, ds:word_1003B
                call    SetCursorPos
                call    DisplayHexTrack
                cmp     ah, 3Ch ; '<'
                stc
                jz      short loc_13034
                mov     ax, MsgOffs.field_5
                call    DisplayString
                call    ReadCursorPos
                mov     ds:word_1003B, dx
                mov     al, 1
                mov     bh, ds:EndingCylinder
                sub     bh, ds:StartingCylinder
                jz      short loc_13036
                cmp     bh, 1
                jz      short loc_13036
                mov     bl, 1
                mov     ah, 0
                mov     al, ds:TrackIncrement
                push    ax
                call    DisplayHexTrack
                mov     ax, MsgOffs.field_20
                call    sub_132D3
                mov     dx, 83Fh
                call    SetCursorPos
                mov     al, ds:byte_1949A
                mov     ds:VideoAttribute, al
                mov     al, ds:EndingCylinder
                sub     al, ds:StartingCylinder
                call    DisplayHexTrack
                mov     al, ds:byte_1949B
                mov     ds:VideoAttribute, al
                mov     dx, ds:word_1003B
                call    SetCursorPos
                pop     ax
                call    sub_17CCA

loc_13034:                              ; CODE XREF: sub_12F2E+9Bj
                                        ; sub_12F2E+AEj
                jb      short loc_13074

loc_13036:                              ; CODE XREF: sub_12F2E+C7j
                                        ; sub_12F2E+CCj
                mov     ds:TrackIncrement, al
                mov     dx, ds:word_1003B
                call    SetCursorPos
                call    DisplayHexTrack
                cmp     ah, 3Ch ; '<'
                jz      short loc_13074
                mov     ax, MsgOffs.field_D
                call    DisplayString
                call    ReadCursorPos
                mov     ds:word_1003B, dx
                mov     al, ds:NumberOfSides
                or      al, '0'
                call    DisplayChar
                mov     ax, MsgOffs.field_21
                call    sub_132D3
                mov     dx, ds:word_1003B
                call    SetCursorPos
                mov     ah, 0
                mov     al, ds:NumberOfSides
                call    sub_17C89
                jnb     short loc_13077

loc_13074:                              ; CODE XREF: sub_12F2E+106j
                                        ; sub_12F2E+118j sub_12F2E+15Dj
                                        ; sub_12F2E+1A4j sub_12F2E+1BAj
                jmp     loc_13177
; ---------------------------------------------------------------------------

loc_13077:                              ; CODE XREF: sub_12F2E+144j
                and     al, 0Fh
                mov     ds:NumberOfSides, al
                mov     dx, ds:word_1003B
                call    SetCursorPos
                or      al, '0'
                call    DisplayChar
                cmp     ah, '<'
                jz      short loc_13074
                mov     al, 0Dh
                call    DisplayChar
                mov     al, 0Ah
                call    DisplayChar
                call    ReadCursorPos
                push    dx
                mov     ax, MsgOffs.field_48
                call    sub_132D3
                pop     dx
                call    SetCursorPos
                mov     ax, MsgOffs.field_6
                call    DisplayString
                call    ReadCursorPos
                mov     ds:word_1003B, dx
                mov     al, ds:KeepTrkLngth0
                mov     bl, ds:KeepTrkLngth1
                mov     ah, bl
                push    ax
                call    sub_17DF9
                mov     dx, ds:word_1003B
                call    SetCursorPos
                pop     ax
                mov     bh, ds:EndingCylinder
                mov     bl, ds:StartingCylinder
                call    sub_17D41
                jb      short loc_13074
                mov     ds:KeepTrkLngth0, al
                mov     ds:KeepTrkLngth1, bl
                mov     dx, ds:word_1003B
                call    SetCursorPos
                call    sub_17DF9
                cmp     ah, '<'
                jz      short loc_13074
                mov     ax, MsgOffs.field_7
                call    DisplayString
                call    ReadCursorPos
                mov     ds:word_1003B, dx
                mov     al, ds:CopyWkBits0
                mov     bl, ds:CopyWkBits1
                mov     ah, bl
                push    ax
                call    sub_17DF9
                mov     dx, ds:word_1003B
                call    SetCursorPos
                pop     ax
                mov     bh, ds:EndingCylinder
                mov     bl, ds:StartingCylinder
                call    sub_17D41
                jb      short loc_13177
                mov     ds:CopyWkBits0, al
                mov     ds:CopyWkBits1, bl
                mov     dx, ds:word_1003B
                call    SetCursorPos
                call    sub_17DF9
                cmp     ah, '<'
                jz      short loc_13177
                mov     ax, MsgOffs.field_8
                call    DisplayString
                call    ReadCursorPos
                mov     ds:word_1003B, dx
                mov     al, ds:CopyXIDX0
                mov     bl, ds:CopyXIDX1
                mov     ah, bl
                push    ax
                call    sub_17DF9
                mov     dx, ds:word_1003B
                call    SetCursorPos
                pop     ax
                mov     bh, ds:EndingCylinder
                mov     bl, ds:StartingCylinder
                call    sub_17D41
                jb      short loc_13177
                mov     ds:CopyXIDX0, al
                mov     ds:CopyXIDX1, bl
                mov     dx, ds:word_1003B
                call    SetCursorPos
                call    sub_17DF9
                cmp     ah, '<'
                jz      short loc_13177
                jmp     short loc_13179
; ---------------------------------------------------------------------------
                db 90h
; ---------------------------------------------------------------------------

loc_13177:                              ; CODE XREF: sub_12F2E+146j
                                        ; sub_12F2E+1E9j sub_12F2E+1FFj
                                        ; sub_12F2E+22Ej sub_12F2E+244j
                                        ; sub_12F2E+278j sub_12F2E+28Ej
                stc
                retn
; ---------------------------------------------------------------------------

loc_13179:                              ; CODE XREF: sub_12F2E+246j
                mov     ax, MsgOffs.field_1
                call    DisplayString
                call    ReadCursorPos
                mov     ds:word_1003B, dx
                mov     al, ds:VerifyWrite0
                mov     bl, ds:byte_1006F
                mov     ah, bl
                push    ax
                call    sub_17DF9
                mov     dx, ds:word_1003B
                call    SetCursorPos
                pop     ax
                mov     bh, ds:EndingCylinder
                mov     bl, ds:StartingCylinder
                call    sub_17D41
                jb      short loc_13177
                mov     ds:VerifyWrite0, al
                mov     ds:byte_1006F, bl
                mov     dx, ds:word_1003B
                call    SetCursorPos
                call    sub_17DF9
                cmp     ah, '<'
                jz      short loc_13177
                call    ClrMessageWndw
                clc
                retn
sub_12F2E       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; This function presets the internal program switches from user input.

SetOptionFlags  proc near               ; CODE XREF: _Main+182p
                mov     ds:CurrentCylinder, 0
                mov     ds:CurrentSide, 0

loc_131CD:                              ; CODE XREF: SetOptionFlags+F9j
                mov     al, ds:CurrentCylinder
                mov     ds:KeepTrkLngthFlag, 'Y'
                mov     ah, ds:KeepTrkLngth0
                cmp     ah, 'y'
                jz      short loc_131F7
                mov     ds:KeepTrkLngthFlag, 'N'
                cmp     ah, 'n'
                jz      short loc_131F7
                cmp     ah, al
                ja      short loc_131F7
                cmp     ds:KeepTrkLngth1, al
                jb      short loc_131F7
                mov     ds:KeepTrkLngthFlag, 'Y'

loc_131F7:                              ; CODE XREF: SetOptionFlags+19j
                                        ; SetOptionFlags+23j
                                        ; SetOptionFlags+27j
                                        ; SetOptionFlags+2Dj
                mov     ds:CpyWkBitsFlag, 'Y'
                mov     ah, ds:CopyWkBits0
                cmp     ah, 'y'
                jz      short loc_1321E
                mov     ds:CpyWkBitsFlag, 'N'
                cmp     ah, 'n'
                jz      short loc_1321E
                cmp     ah, al
                ja      short loc_1321E
                cmp     ds:CopyWkBits1, al
                jb      short loc_1321E
                mov     ds:CpyWkBitsFlag, 'Y'

loc_1321E:                              ; CODE XREF: SetOptionFlags+40j
                                        ; SetOptionFlags+4Aj
                                        ; SetOptionFlags+4Ej
                                        ; SetOptionFlags+54j
                mov     ds:CopyXIDXFlag, 'Y'
                mov     ah, ds:CopyXIDX0
                cmp     ah, 'y'
                jz      short loc_13245
                mov     ds:CopyXIDXFlag, 'N'
                cmp     ah, 'n'
                jz      short loc_13245
                cmp     ah, al
                ja      short loc_13245
                cmp     ds:CopyXIDX1, al
                jb      short loc_13245
                mov     ds:CopyXIDXFlag, 'Y'

loc_13245:                              ; CODE XREF: SetOptionFlags+67j
                                        ; SetOptionFlags+71j
                                        ; SetOptionFlags+75j
                                        ; SetOptionFlags+7Bj
                mov     ds:VerifyWrtFlag, 'Y'
                mov     ah, ds:VerifyWrite0
                cmp     ah, 'y'
                jz      short loc_1326C
                mov     ds:VerifyWrtFlag, 'N'
                cmp     ah, 'n'
                jz      short loc_1326C
                cmp     ah, al
                ja      short loc_1326C
                cmp     ds:byte_1006F, al
                jb      short loc_1326C
                mov     ds:VerifyWrtFlag, 'Y'

loc_1326C:                              ; CODE XREF: SetOptionFlags+8Ej
                                        ; SetOptionFlags+98j
                                        ; SetOptionFlags+9Cj
                                        ; SetOptionFlags+A2j
                mov     al, 0
                cmp     ds:KeepTrkLngthFlag, 'N'
                jz      short loc_13277
                or      al, 1

loc_13277:                              ; CODE XREF: SetOptionFlags+B0j
                cmp     ds:CopyXIDXFlag, 'N'
                jz      short loc_13280
                or      al, 2

loc_13280:                              ; CODE XREF: SetOptionFlags+B9j
                cmp     ds:CpyWkBitsFlag, 'N'
                jz      short loc_13289
                or      al, 4

loc_13289:                              ; CODE XREF: SetOptionFlags+C2j
                cmp     ds:VerifyWrtFlag, 'N'
                jz      short loc_13292
                or      al, 8

loc_13292:                              ; CODE XREF: SetOptionFlags+CBj
                cmp     ds:byte_10039, 'N'
                jz      short loc_1329B
                or      al, 10h

loc_1329B:                              ; CODE XREF: SetOptionFlags+D4j
                mov     ah, 0
                call    GetTrkDatOfs
                cmp     ds:byte_100B7, 1
                jnz     short loc_132AD
                or      al, 0F7h
                and     ax, ds:TrackTypeTable[bx]

loc_132AD:                              ; CODE XREF: SetOptionFlags+E2j
                mov     byte ptr ds:TrackTypeTable[bx], al
                inc     ds:CurrentSide
                cmp     ds:CurrentSide, 1
                jnz     short loc_132BF

loc_132BC:                              ; CODE XREF: SetOptionFlags+10Cj
                jmp     loc_131CD
; ---------------------------------------------------------------------------

loc_132BF:                              ; CODE XREF: SetOptionFlags+F7j
                mov     ds:CurrentSide, 0
                inc     ds:CurrentCylinder
                mov     al, ds:CurrentCylinder
                cmp     al, ds:byte_10096
                jb      short loc_132BC
                clc
                retn
SetOptionFlags  endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_132D3       proc near               ; CODE XREF: _Main+136p sub_12E04+31p
                                        ; sub_12E04+8Dp sub_12F2E+1Fp
                                        ; sub_12F2E+61p sub_12F2E+DCp
                                        ; sub_12F2E+132p sub_12F2E+170p
                push    ax
                call    ClrMessageWndw
                mov     dx, 700h
                call    SetCursorPos
                pop     ax
                call    DisplayString
                retn
sub_132D3       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


ClrMessageWndw  proc near               ; CODE XREF: _Main+1A7p
                                        ; DuplicatorCommand+26p sub_12F2E+290p
                                        ; sub_132D3+1p ReadWrite+11Bp
                                        ; ReadWrite+274p
                pushf
                push    ax
                push    dx
                mov     dx, 700h
                call    SetCursorPos
                mov     ax, MsgOffs.field_17
                call    DisplayString
                pop     dx
                pop     ax
                popf
                retn
ClrMessageWndw  endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


SetDefaultOptions proc near             ; CODE XREF: _Main+AEp
                mov     ds:StartingCylinder, 0
                mov     ds:EndingCylinder, 28h ; '('
                mov     ds:TrackIncrement, 1
                mov     ds:NumberOfSides, 2
                mov     ds:KeepTrkLngth0, 'n'
                mov     ds:CopyWkBits0, 'n'
                mov     ds:CopyXIDX0, 'y'
                mov     ds:VerifyWrite0, 'y'
                retn
SetDefaultOptions endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1331E       proc near               ; CODE XREF: _Main+113p sub_12E04+10Dp
                call    sub_17BB5
                mov     ax, MsgOffs.field_B
                call    DisplayString
                mov     al, ds:aSourceDrvLtr
                call    DisplayChar
                mov     ax, MsgOffs.field_C
                call    DisplayString
                mov     al, ds:aTargetDrvLtr
                call    DisplayChar
                mov     ax, MsgOffs.field_2
                call    DisplayString
                mov     al, ds:StartingCylinder
                call    DisplayHexTrack
                mov     ax, MsgOffs.field_4
                call    DisplayString
                mov     al, ds:EndingCylinder
                call    DisplayHexTrack
                mov     ax, MsgOffs.field_5
                call    DisplayString
                mov     al, ds:TrackIncrement
                call    DisplayHexTrack
                mov     ax, MsgOffs.field_D
                call    DisplayString
                mov     al, ds:NumberOfSides
                or      al, '0'
                call    DisplayChar
                mov     al, 0Dh
                call    DisplayChar
                mov     al, 0Ah
                call    DisplayChar
                mov     ax, MsgOffs.field_6
                call    DisplayString
                mov     al, ds:KeepTrkLngth0
                mov     bl, ds:KeepTrkLngth1
                call    sub_17DF9
                mov     ax, MsgOffs.field_7
                call    DisplayString
                mov     al, ds:CopyWkBits0
                mov     bl, ds:CopyWkBits1
                call    sub_17DF9
                mov     ax, MsgOffs.field_8
                call    DisplayString
                mov     al, ds:CopyXIDX0
                mov     bl, ds:CopyXIDX1
                call    sub_17DF9
                mov     ax, MsgOffs.field_1
                call    DisplayString
                mov     al, ds:VerifyWrite0
                mov     bl, ds:byte_1006F
                call    sub_17DF9
                call    sub_17BBE
                mov     ax, MsgOffs.field_A
                call    DisplayString
                mov     dx, 400h
                call    SetCursorPos
                mov     ax, MsgOffs.field_14
                call    DisplayString
                retn
sub_1331E       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; Performs all selected read/write operations.

ReadWrite       proc near               ; CODE XREF: _Main+1B9p
                mov     al, ds:StartingCylinder
                mov     ds:CylndrBeingRead, al
                mov     ds:ClndrBeingWritten, al
                mov     ds:CurrentCylinder, al
                mov     ds:byte_167D5, 0
                mov     ds:byte_13D11, 0
                mov     ds:byte_167D4, 0
                mov     ds:byte_100B3, 7Eh ; '~'
                call    sub_1AB42
                call    sub_1685B
                cmp     ds:byte_100B7, 1
                jz      short loc_133FD
                mov     ds:DiskType, 0FFh

loc_133FD:                              ; CODE XREF: ReadWrite+2Bj
                mov     ds:word_15F82, 0
                mov     ds:byte_13D09, 0
                mov     ds:word_13D07, 0
                mov     ds:byte_1007F, 0FFh
                cmp     ds:DuplicatorReturn, 0
                jz      short loc_1342C
                mov     al, 49h ; 'I'
                call    DuplicatorCommand
                mov     al, 58h ; 'X'
                call    DuplicatorCommand
                jnb     short loc_1342C
                mov     ax, 100h
                jmp     loc_137D9
; ---------------------------------------------------------------------------

loc_1342C:                              ; CODE XREF: ReadWrite+4Dj
                                        ; ReadWrite+59j
                cmp     ds:byte_100B7, 1
                jz      short loc_13448
                mov     al, ds:SourceDriveNumber
                call    sub_18321
                call    sub_13802
                call    sub_16C65
                jnb     short loc_13448
                mov     ax, 6           ; 6 translates to "check source disk" message.
                stc
                jmp     loc_137D9
; ---------------------------------------------------------------------------

loc_13448:                              ; CODE XREF: ReadWrite+66j
                                        ; ReadWrite+74j
                mov     al, ds:SourceDriveNumber
                cmp     al, ds:TargetDriveNumber
                jz      short loc_13489
                cmp     ds:byte_100B7, 2
                jz      short loc_13489
                mov     al, ds:TargetDriveNumber
                call    sub_18321
                call    sub_13802
                and     al, 40h
                jz      short loc_13468
                jmp     loc_136A3
; ---------------------------------------------------------------------------

loc_13468:                              ; CODE XREF: ReadWrite+98j
                call    sub_16C65
                jnb     short loc_13489
                jmp     loc_13693
; ---------------------------------------------------------------------------

loc_13470:                              ; CODE XREF: ReadWrite+3D1j
                cmp     ds:DuplicatorReturn, 0
                jz      short loc_134BD
                mov     al, 'I'
                call    DuplicatorCommand
                mov     al, 'X'
                call    DuplicatorCommand
                jnb     short loc_13489
                mov     ax, 100h
                jmp     loc_137D9
; ---------------------------------------------------------------------------

loc_13489:                              ; CODE XREF: ReadWrite+84j
                                        ; ReadWrite+8Bj ReadWrite+A0j
                                        ; ReadWrite+B6j
                mov     al, ds:StartingCylinder
                mov     ds:CylndrBeingRead, al
                mov     ds:ClndrBeingWritten, al
                cmp     ds:byte_100B7, 1
                jnz     short loc_134A4
                mov     ds:byte_1007F, 0
                call    DisplayTracks   ; puts track display at bottom of screen
                jmp     loc_13658
; ---------------------------------------------------------------------------

loc_134A4:                              ; CODE XREF: ReadWrite+CCj
                cmp     ds:DuplicatorReturn, 0
                jz      short loc_134BD
                call    DisplayTracks   ; puts track display at bottom of screen
                cmp     ds:byte_1007F, 0
                mov     ds:byte_1007F, 0
                jnz     short loc_134C6
                jmp     loc_13658
; ---------------------------------------------------------------------------

loc_134BD:                              ; CODE XREF: ReadWrite+AAj
                                        ; ReadWrite+DEj
                mov     al, ds:StartingCylinder
                mov     ds:CylndrBeingRead, al
                mov     ds:ClndrBeingWritten, al

loc_134C6:                              ; CODE XREF: ReadWrite+EDj
                                        ; ReadWrite+319j
                mov     ds:byte_1007D, 0
                mov     al, ds:SourceDriveNumber
                cmp     al, ds:TargetDriveNumber
                jnz     short loc_134FC
                call    sub_16F04
                mov     dx, 700h
                call    SetCursorPos
                mov     ax, MsgOffs.field_15 ; Insert source.. press ENTER...
                call    DisplayString
                call    GetKey
                call    ClrMessageWndw
                jb      short loc_13521
                mov     dl, ds:SourceDriveNumber
                call    sub_16E78
                and     al, 10h
                jz      short loc_134FC
                mov     al, ds:SourceDriveNumber
                call    sub_18321

loc_134FC:                              ; CODE XREF: ReadWrite+107j
                                        ; ReadWrite+129j
                mov     ds:CurrentSide, 0
                mov     al, ds:CylndrBeingRead
                mov     ds:CurrentCylinder, al
                call    sub_13882
                call    sub_1AC37
                mov     dl, ds:SourceDriveNumber
                call    sub_16E78
                mov     al, 6
                call    sub_13A5E
                call    sub_176F9

ReadCylinder:                           ; CODE XREF: ReadWrite+23Bj
                call    CheckForEsc
                jnb     short loc_13527

loc_13521:                              ; CODE XREF: ReadWrite+11Ej
                mov     ax, 0           ; 0 translates to "15spaces" message.
                jmp     loc_137C9
; ---------------------------------------------------------------------------

loc_13527:                              ; CODE XREF: ReadWrite+154j
                mov     ds:CurrentSide, 0

ReadTrack:                              ; CODE XREF: ReadWrite+1F7j
                mov     al, ds:CylndrBeingRead
                mov     ds:CurrentCylinder, al
                call    sub_13882
                call    sub_18313

loc_13538:                              ; CODE XREF: ReadWrite+1A3j
                mov     al, 'r'
                call    UpdateTrkProgDisp
                call    ReadTrack
                jnb     short loc_13560
                mov     al, ds:SourceDriveNumber
                call    sub_18321
                mov     al, ds:CylndrBeingRead
                mov     ds:CurrentCylinder, al
                call    sub_18313
                mov     ds:byte_1007D, 0FFh
                push    ds
                call    MaxtMotorTimer
                or      ds:dsk_ret_code, 80h ; Controller return code
                                        ;  00h = ok
                                        ;  01h = bad command or parameter
                                        ;  02h = can't find address mark
                                        ;  03h = can't write, protected dsk
                                        ;  04h = sector not found
                                        ;  08h = DMA overrun
                                        ;  09h = DMA attempt over 64K bound
                                        ;  10h = bad CRC on disk read
                                        ;  20h = controller failure
                                        ;  40h = seek failure
                                        ;  80h = timeout, no response
                pop     ds

loc_13560:                              ; CODE XREF: ReadWrite+175j
                call    WrtTrkLnTbl
                call    DispReadLngth
                mov     al, 'a'
                call    UpdateTrkProgDisp
                call    AnalyzeTrack
                jb      short loc_13538
                mov     al, ds:CurrentCylinder
                cmp     al, ds:StartingCylinder
                jnz     short loc_1358E
                cmp     ds:CurrentSide, 0
                jnz     short loc_1358E
                cmp     ds:DiskType, 0FFh
                jnz     short loc_1358E
                mov     ax, 9           ; 9 tranlates to "please use TCM" mesaage.
                stc
                jmp     loc_137D9
; ---------------------------------------------------------------------------

loc_1358E:                              ; CODE XREF: ReadWrite+1ACj
                                        ; ReadWrite+1B3j ReadWrite+1BAj
                call    sub_1AC85
                jnb     short loc_135AF
                cmp     ds:byte_100B7, 2
                jz      short loc_135A2
                mov     ds:byte_1007F, 0FFh
                jmp     short loc_13611
; ---------------------------------------------------------------------------
                align 2

loc_135A2:                              ; CODE XREF: ReadWrite+1CDj
                call    sub_1B12A
                call    sub_1B18F
                mov     ax, 7           ; 7 translates to "disk full" message.
                stc
                jmp     loc_137D9
; ---------------------------------------------------------------------------

loc_135AF:                              ; CODE XREF: ReadWrite+1C6j
                cmp     ds:NumberOfSides, 1
                jz      short ReadNextCylinder
                cmp     ds:CurrentSide, 1
                jz      short ReadNextCylinder
                mov     ds:CurrentSide, 1
                jmp     ReadTrack
; ---------------------------------------------------------------------------

ReadNextCylinder:                       ; CODE XREF: ReadWrite+1E9j
                                        ; ReadWrite+1F0j
                mov     al, ds:CylndrBeingRead
                add     al, ds:TrackIncrement
                mov     ds:CylndrBeingRead, al
                cmp     al, ds:EndingCylinder
                ja      short loc_1360E
                cmp     ds:EndingCylinder, 29h ; ')'
                ja      short loc_13606
                cmp     al, 27h ; '''
                jbe     short loc_13606
                mov     bh, 0
                cmp     ds:byte_100B7, 1
                jz      short loc_135F4
                mov     bl, ds:SourceDriveNumber
                cmp     ds:byte_1009B[bx], 28h ; '('
                jb      short loc_13609

loc_135F4:                              ; CODE XREF: ReadWrite+21Cj
                cmp     ds:byte_100B7, 2
                jz      short loc_13606
                mov     bl, ds:TargetDriveNumber
                cmp     ds:byte_1009B[bx], 28h ; '('
                jb      short loc_13609

loc_13606:                              ; CODE XREF: ReadWrite+20Fj
                                        ; ReadWrite+213j ReadWrite+22Ej
                jmp     ReadCylinder
; ---------------------------------------------------------------------------

loc_13609:                              ; CODE XREF: ReadWrite+227j
                                        ; ReadWrite+239j
                mov     ds:EndingCylinder, 27h ; '''

loc_1360E:                              ; CODE XREF: ReadWrite+208j
                call    sub_1AD2F

loc_13611:                              ; CODE XREF: ReadWrite+1D4j
                cmp     ds:byte_100B7, 2
                jnz     short loc_13621
                call    sub_1AB5D
                mov     ax, 8000h
                jmp     loc_137D9
; ---------------------------------------------------------------------------

loc_13621:                              ; CODE XREF: ReadWrite+24Bj
                call    sub_16F04
                mov     al, ds:SourceDriveNumber
                cmp     al, ds:TargetDriveNumber
                jnz     short loc_13658
                call    sub_16F04
                mov     dx, 700h
                call    SetCursorPos
                mov     ax, MsgOffs.field_16 ; Insert target disk...
                call    DisplayString
                call    GetKey
                call    ClrMessageWndw
                jnb     short loc_13647
                jmp     short loc_136C0
; ---------------------------------------------------------------------------
                db 90h
; ---------------------------------------------------------------------------

loc_13647:                              ; CODE XREF: ReadWrite+277j
                mov     dl, ds:TargetDriveNumber
                call    sub_16E78
                and     al, 10h
                jz      short loc_13658
                mov     al, ds:TargetDriveNumber
                call    sub_18321

loc_13658:                              ; CODE XREF: ReadWrite+D6j
                                        ; ReadWrite+EFj ReadWrite+260j
                                        ; ReadWrite+285j
                mov     ds:CurrentSide, 0
                mov     al, ds:ClndrBeingWritten
                mov     ds:CurrentCylinder, al
                mov     ds:CurrentOperation, 'w'
                call    sub_13882
                call    sub_1AC63
                mov     dl, ds:TargetDriveNumber
                call    sub_16E78
                push    ax
                cmp     ds:byte_1007D, 0
                jz      short loc_13689
                mov     dl, ds:TargetDriveNumber
                push    ds
                call    MaxtMotorTimer
                call    sub_16FEC
                pop     ds

loc_13689:                              ; CODE XREF: ReadWrite+2B0j
                pop     ax
                and     al, 40h
                jnz     short loc_136A3
                call    sub_16C65
                jnb     short WriteCylinder

loc_13693:                              ; CODE XREF: ReadWrite+A2j
                mov     al, 'I'
                cmp     ds:DuplicatorReturn, 0
                jnz     short loc_136AC
                mov     ax, 8           ; 8 translates to "check target disk" message.
                stc
                jmp     loc_137D9
; ---------------------------------------------------------------------------

loc_136A3:                              ; CODE XREF: ReadWrite+9Aj
                                        ; ReadWrite+2C1j
                mov     al, 'P'
                cmp     ds:DuplicatorReturn, 0
                jz      short loc_136AF

loc_136AC:                              ; CODE XREF: ReadWrite+2CFj
                jmp     loc_1373E
; ---------------------------------------------------------------------------

loc_136AF:                              ; CODE XREF: ReadWrite+2DFj
                mov     ax, 1           ; 1 translates to "target is write protected" message.
                stc
                jmp     loc_137D9
; ---------------------------------------------------------------------------

WriteCylinder:                          ; CODE XREF: ReadWrite+2C6j
                                        ; ReadWrite+3A5j
                mov     ds:CurrentSide, 0

WriteTrack:                             ; CODE XREF: ReadWrite+392j
                call    CheckForEsc
                jnb     short loc_136C6

loc_136C0:                              ; CODE XREF: ReadWrite+279j
                mov     ax, 0           ; 0 translates to "15spaces" message.
                jmp     loc_137C9
; ---------------------------------------------------------------------------

loc_136C6:                              ; CODE XREF: ReadWrite+2F3j
                mov     ds:byte_10086, 2
                mov     al, ds:ClndrBeingWritten
                mov     ds:CurrentCylinder, al
                mov     ds:CurrentOperation, 'w'
                call    sub_13882
                call    sub_18313
                call    sub_1ACFA
                jnb     short loc_136E7
                call    sub_16F04
                jmp     loc_134C6
; ---------------------------------------------------------------------------

loc_136E7:                              ; CODE XREF: ReadWrite+314j
                                        ; ReadWrite+36Aj
                mov     ds:byte_10068, 2
                mov     ds:byte_10069, '<'
                mov     al, ds:ClndrBeingWritten
                mov     ds:CurrentCylinder, al
                mov     al, 'w'
                call    UpdateTrkProgDisp
                call    WriteTrack
                call    DispReadLngth
                call    sub_18A07
                push    ax
                pushf
                call    DispWritLngth
                popf
                pop     ax
                jnb     short loc_1371F
                cmp     ds:DuplicatorReturn, 0
                jnz     short loc_13722
                cmp     al, 'K'
                jz      short loc_13722
                mov     al, ds:byte_194D3
                jmp     short loc_13722
; ---------------------------------------------------------------------------
                db 90h
; ---------------------------------------------------------------------------

loc_1371F:                              ; CODE XREF: ReadWrite+341j
                mov     al, ds:byte_194D1

loc_13722:                              ; CODE XREF: ReadWrite+348j
                                        ; ReadWrite+34Cj ReadWrite+351j
                call    UpdateTrkProgDisp
                cmp     al, ds:byte_194D1
                jz      short loc_1374A
                cmp     al, 'K'
                jz      short loc_13737
                dec     ds:byte_10086
                jz      short loc_13737
                jmp     short loc_136E7
; ---------------------------------------------------------------------------

loc_13737:                              ; CODE XREF: ReadWrite+362j
                                        ; ReadWrite+368j
                cmp     ds:DuplicatorReturn, 0
                jz      short loc_1374A

loc_1373E:                              ; CODE XREF: ReadWrite+2E1j
                call    UpdateTrkProgDisp
                inc     ds:NumBadDsks
                mov     al, 'R'
                jmp     short loc_13780
; ---------------------------------------------------------------------------
                align 2

loc_1374A:                              ; CODE XREF: ReadWrite+35Ej
                                        ; ReadWrite+371j
                cmp     ds:NumberOfSides, 1
                jz      short WriteNextCylinder
                cmp     ds:CurrentSide, 1
                jz      short WriteNextCylinder
                mov     ds:CurrentSide, 1
                jmp     WriteTrack
; ---------------------------------------------------------------------------

WriteNextCylinder:                      ; CODE XREF: ReadWrite+384j
                                        ; ReadWrite+38Bj
                mov     al, ds:ClndrBeingWritten
                add     al, ds:TrackIncrement
                mov     ds:ClndrBeingWritten, al
                cmp     al, ds:EndingCylinder
                ja      short loc_13773
                jmp     WriteCylinder
; ---------------------------------------------------------------------------

loc_13773:                              ; CODE XREF: ReadWrite+3A3j
                cmp     ds:DuplicatorReturn, 0
                jz      short loc_1379F
                inc     ds:NumGoodDsks
                mov     al, 'A'

loc_13780:                              ; CODE XREF: ReadWrite+37Cj
                push    ax
                call    sub_16F04
                call    DispGoodBadDsks
                pop     ax
                call    DuplicatorCommand
                jnb     short loc_13793
                mov     ax, 100h
                jmp     short loc_137D9
; ---------------------------------------------------------------------------
                db 90h
; ---------------------------------------------------------------------------

loc_13793:                              ; CODE XREF: ReadWrite+3C0j
                mov     ax, ds:NumGoodDsks
                cmp     ax, ds:word_10084
                jnb     short loc_1379F
                jmp     loc_13470
; ---------------------------------------------------------------------------

loc_1379F:                              ; CODE XREF: ReadWrite+3ADj
                                        ; ReadWrite+3CFj
                cmp     ds:byte_100B7, 2
                jz      short loc_137AC
                mov     al, ds:TargetDriveNumber
                call    sub_18321

loc_137AC:                              ; CODE XREF: ReadWrite+3D9j
                cmp     ds:byte_100B7, 1
                jz      short loc_137BF
                mov     al, ds:SourceDriveNumber
                cmp     al, ds:TargetDriveNumber
                jz      short loc_137BF
                call    sub_18321

loc_137BF:                              ; CODE XREF: ReadWrite+3E6j
                                        ; ReadWrite+3EFj
                call    sub_16865
                mov     ax, 100h
                clc
                jmp     short loc_137D9
; ---------------------------------------------------------------------------
                db 90h
; ---------------------------------------------------------------------------

loc_137C9:                              ; CODE XREF: ReadWrite+159j
                                        ; ReadWrite+2F8j
                cmp     ds:byte_100B7, 2
                jnz     short loc_137D8
                push    ax
                call    sub_1B12A
                call    sub_1B18F
                pop     ax

loc_137D8:                              ; CODE XREF: ReadWrite+403j
                stc

loc_137D9:                              ; CODE XREF: ReadWrite+5Ej
                                        ; ReadWrite+7Aj ReadWrite+BBj
                                        ; ReadWrite+1C0j ReadWrite+1E1j
                                        ; ReadWrite+253j ReadWrite+2D5j
                                        ; ReadWrite+2E8j ReadWrite+3C5j
                                        ; ReadWrite+3FBj
                pushf
                push    ax
                call    sub_16865
                pop     ax
                cmp     ds:DuplicatorReturn, 0
                jz      short loc_137F9
                cmp     ah, 1
                jz      short loc_137F9
                push    ax
                mov     al, 'R'
                call    DuplicatorCommand
                inc     ds:NumBadDsks
                call    DispGoodBadDsks
                pop     ax

loc_137F9:                              ; CODE XREF: ReadWrite+419j
                                        ; ReadWrite+41Ej
                popf
                push    ax
                pushf
                call    sub_1B12A
                popf
                pop     ax
                retn
ReadWrite       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_13802       proc near               ; CODE XREF: ReadWrite+6Ep
                                        ; ReadWrite+93p
                push    ax
                cmp     ah, 28h ; '('
                jnb     short loc_13820
                cmp     ds:EndingCylinder, 28h ; '('
                jb      short loc_13820
                mov     ds:EndingCylinder, 27h ; '''
                mov     dx, 912h
                call    SetCursorPos
                mov     al, ds:EndingCylinder
                call    DisplayHexTrack

loc_13820:                              ; CODE XREF: sub_13802+4j sub_13802+Bj
                pop     ax
                retn
sub_13802       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; puts track display at bottom of screen

DisplayTracks   proc near               ; CODE XREF: _Main+1B6p ReadWrite+D3p
                                        ; ReadWrite+E0p
                call    sub_17BBE       ; clears bottom of screen for track display
                mov     ax, 10h
                cmp     ds:EndingCylinder, 29h ; ')'
                jbe     short loc_13832
                mov     ax, MsgOffs.field_3C

loc_13832:                              ; CODE XREF: DisplayTracks+Bj
                call    DisplayString
                retn
DisplayTracks   endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


DisplayDMA_Port proc near               ; CODE XREF: _Main+122p
                mov     dx, 0D32h
                call    SetCursorPos
                mov     ax, MsgOffs.field_36
                call    DisplayString
                mov     dx, 0D3Fh
                call    SetCursorPos
                mov     al, ds:DMA_Channel
                or      al, 30h
                call    DisplayChar
                mov     dx, 0D4Ah
                call    SetCursorPos
                mov     ax, ds:TC_Port_Base
                call    DisplayHex
                retn
DisplayDMA_Port endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


DispGoodBadDsks proc near               ; CODE XREF: _Main+1A4p ReadWrite+3B9p
                                        ; ReadWrite+42Ap
                mov     dx, 0F32h
                call    SetCursorPos
                mov     ax, MsgOffs.field_39
                call    DisplayString
                mov     ax, ds:NumGoodDsks
                call    DisplayNumDsks
                mov     dx, 1032h
                call    SetCursorPos
                mov     ax, MsgOffs.field_3A
                call    DisplayString
                mov     ax, ds:NumBadDsks
                call    DisplayNumDsks
                retn
DispGoodBadDsks endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_13882       proc near               ; CODE XREF: ReadWrite+13Cp
                                        ; ReadWrite+167p ReadWrite+29Dp
                                        ; ReadWrite+30Bp
                push    ax
                call    GetTrkDatOfs
                mov     bx, ds:TrackTypeTable[bx]
                cmp     ds:CurrentOperation, 'w'
                jnz     short loc_13895
                mov     ds:DiskType, bh

loc_13895:                              ; CODE XREF: sub_13882+Dj
                mov     ds:KeepTrkLngthFlag, 'N'
                mov     ds:CopyXIDXFlag, 'N'
                mov     ds:CpyWkBitsFlag, 'N'
                mov     ds:VerifyWrtFlag, 'N'
                mov     al, 8
                call    sub_138EE
                test    bl, 1
                jz      short loc_138B8
                mov     ds:KeepTrkLngthFlag, 'Y'

loc_138B8:                              ; CODE XREF: sub_13882+2Fj
                test    bl, 2
                jz      short loc_138C2
                mov     ds:CopyXIDXFlag, 'Y'

loc_138C2:                              ; CODE XREF: sub_13882+39j
                test    bl, 4
                jz      short loc_138CC
                mov     ds:CpyWkBitsFlag, 'Y'

loc_138CC:                              ; CODE XREF: sub_13882+43j
                test    bl, 8
                jz      short loc_138D6
                mov     ds:VerifyWrtFlag, 'Y'

loc_138D6:                              ; CODE XREF: sub_13882+4Dj
                test    bl, 20h
                jz      short loc_138E0
                mov     al, 1
                call    sub_138EE

loc_138E0:                              ; CODE XREF: sub_13882+57j
                cmp     ds:DiskType, 7
                jz      short loc_138EC
                mov     al, 80h ; 'Ç'
                call    sub_138EE

loc_138EC:                              ; CODE XREF: sub_13882+63j
                pop     ax
                retn
sub_13882       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_138EE       proc near               ; CODE XREF: sub_13882+29p
                                        ; sub_13882+5Bp sub_13882+67p
                                        ; sub_18A07+5C7p sub_18A07+5D3p
                cmp     ds:byte_10099, 0FFh
                jnz     short loc_138FB
                mov     ah, 0
                mov     ds:word_1006A, ax
                retn
; ---------------------------------------------------------------------------

loc_138FB:                              ; CODE XREF: sub_138EE+5j
                mov     al, ds:byte_10099
                mov     ah, 0
                mov     ds:word_1006A, ax
                retn
sub_138EE       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


UpdateTrkProgDisp proc near             ; CODE XREF: ReadWrite+16Fp
                                        ; ReadWrite+19Dp ReadWrite+32Ep
                                        ; ReadWrite+357p ReadWrite+373p
                mov     ds:CurrentOperation, al
                push    ax
                push    dx
                mov     dh, ds:CurrentSide
                add     dh, 17h
                mov     dl, ds:CurrentCylinder
                cmp     ds:EndingCylinder, 29h ; ')'
                ja      short loc_1391E
                add     dl, 8

loc_1391E:                              ; CODE XREF: UpdateTrkProgDisp+15j
                call    SetCursorPos
                mov     dx, ds:word_178F0
                push    dx
                mov     ds:word_178F0, 0Ch
                cmp     al, 'a'
                jb      short loc_13939
                cmp     al, 'z'
                ja      short loc_13939
                and     al, 0DFh
                call    sub_17AAF

loc_13939:                              ; CODE XREF: UpdateTrkProgDisp+2Aj
                                        ; UpdateTrkProgDisp+2Ej
                call    DisplayChar
                call    sub_17AA6
                test    ds:DiskType, 80h
                jnz     short loc_13962
                mov     ds:word_178F0, 0Ch
                mov     dx, 1232h
                call    SetCursorPos
                mov     ax, MsgOffs.field_3D
                call    DisplayString
                mov     al, ds:DiskType
                add     al, MsgOffs.field_3E
                mov     ah, 0
                call    DisplayString

loc_13962:                              ; CODE XREF: UpdateTrkProgDisp+40j
                pop     dx
                mov     ds:word_178F0, dx
                pop     dx
                pop     ax
                retn
UpdateTrkProgDisp endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


CheckForEsc     proc near               ; CODE XREF: ReadWrite+151p
                                        ; ReadWrite+2F0p
                push    ax
                mov     ah, 1
                int     16h             ; KEYBOARD - CHECK BUFFER, DO NOT CLEAR
                                        ; Return: ZF clear if character in buffer
                                        ; AH = scan code, AL = character
                                        ; ZF set if no character in buffer
                jz      short loc_13981
                mov     ah, 0
                int     16h             ; KEYBOARD - READ CHAR FROM BUFFER, WAIT IF EMPTY
                                        ; Return: AH = scan code, AL = character
                cmp     ax, 0
                jz      short loc_1397E
                cmp     al, 1Bh
                jnz     short loc_13981

loc_1397E:                              ; CODE XREF: CheckForEsc+Ej
                stc
                pop     ax
                retn
; ---------------------------------------------------------------------------

loc_13981:                              ; CODE XREF: CheckForEsc+5j
                                        ; CheckForEsc+12j
                clc
                pop     ax
                retn
CheckForEsc     endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; Adds the length of the track just read to the
; track length table.

WrtTrkLnTbl     proc near               ; CODE XREF: ReadWrite+195p
                push    bx
                push    ax
                call    GetTrkDatOfs
                mov     ax, ds:ReadLengthBytes
                mov     ds:TrackLngthTbl[bx], ax
                pop     ax
                pop     bx
                retn
WrtTrkLnTbl     endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; gets the length of the current track off the list.
; Return in DX.

RdTrkLngthTbl   proc near               ; CODE XREF: AnalyzeTrack+28p
                                        ; sub_15045+88p WriteTrack+77p
                                        ; sub_15D77p sub_16937+32p
                                        ; sub_16937+AFp sub_19028+57p
                                        ; seg001:93E6p seg001:93FCp
                push    bx
                call    GetTrkDatOfs
                mov     dx, ds:TrackLngthTbl[bx]
                pop     bx
                retn
RdTrkLngthTbl   endp

; ---------------------------------------------------------------------------
                push    ax
                push    dx
                mov     dl, 1Eh
                mov     dh, al
                call    SetCursorPos
                mov     ax, MsgOffs.field_11
                call    DisplayString
                pop     dx
                mov     ax, dx
                call    DisplayHex
                pop     ax
                retn

; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


DispReadLngth   proc near               ; CODE XREF: ReadWrite+198p
                                        ; ReadWrite+334p
                mov     dx, 51Eh
                call    SetCursorPos
                mov     ax, MsgOffs.field_11
                call    DisplayString
                mov     ax, ds:TrackLengthBits
                shr     ax, 1
                shr     ax, 1
                shr     ax, 1
                cmp     ds:DiskType, 0FFh
                jnz     short loc_139D9
                test    ds:TC_Port1Byte, 2
                jz      short loc_139F3
                jnz     short loc_139E5

loc_139D9:                              ; CODE XREF: DispReadLngth+1Aj
                mov     dl, ds:DiskType
                and     dl, 7Fh
                cmp     dl, 7
                jnb     short loc_139F3

loc_139E5:                              ; CODE XREF: DispReadLngth+23j
                call    DisplayHex
                mov     al, '.'
                call    DisplayChar
                mov     al, 0
                call    DisplayDecByte
                retn
; ---------------------------------------------------------------------------

loc_139F3:                              ; CODE XREF: DispReadLngth+21j
                                        ; DispReadLngth+2Fj
                shr     ax, 1
                add     ax, 1000h
                call    DisplayHex
                mov     al, '.'
                call    DisplayChar
                mov     ax, ds:TrackLengthBits
                and     al, 0Fh
                call    DisplayDecByte
                retn
DispReadLngth   endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


DispWritLngth   proc near               ; CODE XREF: ReadWrite+33Cp
                                        ; sub_18A07+5A0p
                mov     dx, 61Eh        ; Print to the screen the written track length.
                call    SetCursorPos
                mov     ax, MsgOffs.field_11
                call    DisplayString
                mov     ax, ds:WrittenLength
                shr     ax, 1
                shr     ax, 1
                shr     ax, 1
                cmp     ds:DiskType, 0FFh
                jnz     short loc_13A2E
                test    ds:TC_Port1Byte, 2
                jz      short loc_13A48
                jnz     short loc_13A3A

loc_13A2E:                              ; CODE XREF: DispWritLngth+1Aj
                mov     dl, ds:DiskType
                and     dl, 7Fh
                cmp     dl, 7
                jnb     short loc_13A48

loc_13A3A:                              ; CODE XREF: DispWritLngth+23j
                call    DisplayHex
                mov     al, '.'
                call    DisplayChar
                mov     al, 0
                call    DisplayDecByte
                retn
; ---------------------------------------------------------------------------

loc_13A48:                              ; CODE XREF: DispWritLngth+21j
                                        ; DispWritLngth+2Fj
                shr     ax, 1
                add     ax, 1000h
                call    DisplayHex
                mov     al, '.'
                call    DisplayChar
                mov     ax, ds:WrittenLength
                and     al, 0Fh
                call    DisplayDecByte
                retn
DispWritLngth   endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_13A5E       proc near               ; CODE XREF: ReadWrite+14Bp
                push    ax
                push    dx
                mov     dh, al
                mov     dl, 1Eh
                call    SetCursorPos
                mov     ax, MsgOffs.field_12
                call    DisplayString
                pop     dx
                pop     ax
                retn
sub_13A5E       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


GetKey          proc near               ; CODE XREF: _Main+DAp _Main+100p
                                        ; _Main+16Bp _Main+230p
                                        ; DuplicatorCommand+23p ReadWrite+118p
                                        ; ReadWrite+271p
                mov     ah, 0
                int     16h             ; KEYBOARD - READ CHAR FROM BUFFER, WAIT IF EMPTY
                                        ; Return: AH = scan code, AL = character
                cmp     al, 61h ; 'a'
                jb      short loc_13A7E
                cmp     al, 'z'
                ja      short loc_13A7E
                and     al, 0DFh

loc_13A7E:                              ; CODE XREF: GetKey+6j GetKey+Aj
                cmp     ah, '<'
                jz      short loc_13A9D
                cmp     ah, 'D'
                jz      short loc_13AA1
                cmp     ax, 0
                jz      short loc_13AA1
                cmp     al, ' '
                jz      short loc_13A9D
                cmp     al, 'Q'
                jz      short loc_13AA1
                cmp     al, 1Bh
                jz      short loc_13AA3

loc_13A99:                              ; CODE XREF: GetKey+2Fj
                mov     ah, al
                clc
                retn
; ---------------------------------------------------------------------------

loc_13A9D:                              ; CODE XREF: GetKey+11j GetKey+1Fj
                mov     al, '<'
                jmp     short loc_13A99
; ---------------------------------------------------------------------------

loc_13AA1:                              ; CODE XREF: GetKey+16j GetKey+1Bj
                                        ; GetKey+23j
                mov     al, 'D'

loc_13AA3:                              ; CODE XREF: GetKey+27j
                mov     ah, al
                stc
                retn
GetKey          endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_13AA7       proc near               ; CODE XREF: _Main+1D9p
                cmp     byte ptr ds:TrackTypeTable+1, offset unk_1D8F7
                jnz     short locret_13ABD
                call    GetInt24
                call    sub_13ABE
                call    sub_13AF3
                call    sub_13AE1
                call    RestoreInt24

locret_13ABD:                           ; CODE XREF: sub_13AA7+5j
                retn
sub_13AA7       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_13ABE       proc near               ; CODE XREF: sub_13AA7+Ap
                mov     ds:byte_100B5, 0
                mov     ah, 44h ; 'D'
                mov     al, 0Eh
                mov     bl, ds:TargetDriveNumber
                inc     bl
                int     21h             ; DOS - 2+ - IOCTL -
                jb      short loc_13AD4
                mov     ds:byte_100B5, al

loc_13AD4:                              ; CODE XREF: sub_13ABE+11j
                mov     ah, 44h ; 'D'
                mov     al, 0Fh
                mov     bl, ds:TargetDriveNumber
                inc     bl
                int     21h             ; DOS - 2+ - IOCTL -
                retn
sub_13ABE       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_13AE1       proc near               ; CODE XREF: sub_13AA7+10p
                cmp     ds:byte_100B5, 0
                jz      short locret_13AF2
                mov     ah, 44h ; 'D'
                mov     al, 0Fh
                mov     bl, ds:byte_100B5
                int     21h             ; DOS - 2+ - IOCTL -

locret_13AF2:                           ; CODE XREF: sub_13AE1+5j
                retn
sub_13AE1       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_13AF3       proc near               ; CODE XREF: sub_13AA7+Dp
                mov     ds:byte_100A9, 0
                mov     al, ds:TargetDriveNumber
                add     al, 41h ; 'A'
                mov     byte ptr ds:aBDisktech_exe, al ; "B:DISKTECH.EXE"
                mov     al, 0
                call    sub_13C57
                jnb     short loc_13B08

locret_13B07:                           ; CODE XREF: sub_13AF3+21j
                retn
; ---------------------------------------------------------------------------

loc_13B08:                              ; CODE XREF: sub_13AF3+12j
                mov     ds:DskTekExeAttr, cx ; file attributes of b:disktech.exe
                mov     cx, 0
                mov     al, 1
                call    sub_13C57
                jb      short locret_13B07
                mov     dx, offset aBDisktech_exe ; "B:DISKTECH.EXE"
                mov     ax, 3D02h
                int     21h             ; DOS - 2+ - OPEN DISK FILE WITH HANDLE
                                        ; DS:DX -> ASCIZ filename
                                        ; AL = access mode
                                        ; 2 - read & write
                jb      short loc_13B9C
                mov     ds:byte_100A9, 0FFh
                mov     ds:word_1009F, ax
                mov     bx, ds:word_1009F
                mov     ax, 5700h
                int     21h             ; DOS - 2+ - GET FILE'S DATE/TIME
                                        ; BX = file handle
                jb      short loc_13B9C
                mov     ds:word_100AE, cx
                mov     ds:word_100B0, dx
                mov     ds:word_100A3, 0
                mov     ds:word_100A5, 0

loc_13B47:                              ; CODE XREF: sub_13AF3+B8j
                mov     cx, ds:word_100A5
                mov     dx, ds:word_100A3
                mov     ax, 4200h
                mov     bx, ds:word_1009F
                int     21h             ; DOS - 2+ - MOVE FILE READ/WRITE POINTER (LSEEK)
                                        ; AL = method: offset from beginning of file
                jb      short loc_13B9C
                mov     ah, 3Fh ; '?'
                mov     bx, ds:word_1009F
                mov     cx, 8000h
                mov     dx, 0
                push    ds
                mov     ds, ds:TrackBufSeg
                int     21h             ; DOS - 2+ - READ FROM FILE WITH HANDLE
                                        ; BX = file handle, CX = number of bytes to read
                                        ; DS:DX -> buffer
                pop     ds
                jb      short loc_13B9C
                cmp     ax, 0
                jz      short loc_13B9C
                mov     ds:word_100A1, ax
                mov     es, ds:TrackBufSeg
                mov     di, 0Dh

loc_13B7F:                              ; CODE XREF: sub_13AF3+A7j
                                        ; sub_13AF3+C9j
                mov     cx, ds:word_13C6E
                mov     si, offset unk_13C70

loc_13B86:                              ; CODE XREF: sub_13AF3+BBj
                mov     al, es:[di]
                inc     di
                cmp     di, ds:word_100A1
                jnb     short loc_13BA0
                cmp     al, [si]
                jz      short loc_13BAD
                sub     di, ds:word_13C6E
                add     di, cx
                jmp     short loc_13B7F
; ---------------------------------------------------------------------------

loc_13B9C:                              ; CODE XREF: sub_13AF3+2Bj
                                        ; sub_13AF3+3Ej sub_13AF3+65j
                                        ; sub_13AF3+7Bj sub_13AF3+80j
                                        ; sub_13AF3+E6j sub_13AF3+11Dj
                stc
                jmp     loc_13C3C
; ---------------------------------------------------------------------------

loc_13BA0:                              ; CODE XREF: sub_13AF3+9Bj
                add     ds:word_100A3, 7C00h
                adc     ds:word_100A5, 0
                jmp     short loc_13B47
; ---------------------------------------------------------------------------

loc_13BAD:                              ; CODE XREF: sub_13AF3+9Fj
                inc     si
                loop    loc_13B86
                sub     di, 14h
                cmp     byte ptr es:[di], 9Ah ; 'Ü'
                jz      short loc_13BBE
                add     di, 0Eh
                jmp     short loc_13B7F
; ---------------------------------------------------------------------------

loc_13BBE:                              ; CODE XREF: sub_13AF3+C4j
                mov     ds:word_13C7E, di
                add     di, 160h
                mov     bx, di
                add     bx, 100h

loc_13BCC:                              ; CODE XREF: sub_13AF3+F2j
                mov     cx, ds:word_13C77
                mov     si, offset unk_13C79

loc_13BD3:                              ; CODE XREF: sub_13AF3+F5j
                mov     al, es:[di]
                inc     di
                cmp     di, bx
                jnb     short loc_13B9C
                cmp     al, [si]
                jz      short loc_13BE7
                sub     di, ds:word_13C77
                add     di, cx
                jmp     short loc_13BCC
; ---------------------------------------------------------------------------

loc_13BE7:                              ; CODE XREF: sub_13AF3+EAj
                inc     si
                loop    loc_13BD3
                mov     ax, di
                sub     ax, ds:word_13C7E
                add     ax, 8
                mov     di, ds:word_13C7E
                mov     byte ptr es:[di], 0E9h ; 'T'
                mov     es:[di+1], ax
                mov     cx, ds:word_100A5
                mov     dx, ds:word_100A3
                mov     ax, 4200h
                mov     bx, ds:word_1009F
                int     21h             ; DOS - 2+ - MOVE FILE READ/WRITE POINTER (LSEEK)
                                        ; AL = method: offset from beginning of file

loc_13C10:                              ; CODE XREF: sub_13AF3+134j
                                        ; sub_13AF3+147j
                jb      short loc_13B9C
                mov     bx, ds:word_1009F
                mov     dx, 0
                mov     cx, ds:word_100A1
                push    ds
                mov     ds, ds:TrackBufSeg
                mov     ah, 40h
                int     21h             ; DOS - 2+ - WRITE TO FILE WITH HANDLE
                                        ; BX = file handle, CX = number of bytes to write, DS:DX -> buffer
                pop     ds
                jb      short loc_13C10
                mov     bx, ds:word_1009F
                mov     ax, 5701h
                mov     cx, ds:word_100AE
                mov     dx, ds:word_100B0
                int     21h             ; DOS - 2+ - SET FILE'S DATE/TIME
                                        ; BX = file handle, CX = time to be set
                                        ; DX = date to be set
                jb      short loc_13C10

loc_13C3C:                              ; CODE XREF: sub_13AF3+AAj
                pushf
                cmp     ds:byte_100A9, 0
                jz      short loc_13C4C
                mov     bx, ds:word_1009F
                mov     ah, 3Eh
                int     21h             ; DOS - 2+ - CLOSE A FILE WITH HANDLE
                                        ; BX = file handle

loc_13C4C:                              ; CODE XREF: sub_13AF3+14Fj
                mov     al, 1
                mov     cx, ds:DskTekExeAttr ; file attributes of b:disktech.exe
                call    sub_13C57
                popf
                retn
sub_13AF3       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_13C57       proc near               ; CODE XREF: sub_13AF3+Fp
                                        ; sub_13AF3+1Ep sub_13AF3+15Fp
                mov     dx, offset aBDisktech_exe ; "B:DISKTECH.EXE"
                mov     ah, 43h
                int     21h             ; INT 21 - DOS 2+ - GET FILE ATTRIBUTES
                                        ; AX = 4300h
                                        ; DS:DX -> ASCIZ filename
                                        ; Return: CF clear if successful
                                        ; CX = file attributes (see #1285)
                                        ; CF set on error
                retn
sub_13C57       endp

; ---------------------------------------------------------------------------
aBDisktech_exe  db 'B:DISKTECH.EXE',0   ; DATA XREF: sub_13AF3+Aw
                                        ; sub_13AF3+23o sub_13C57o
word_13C6E      dw 7                    ; DATA XREF: sub_13AF3+8Cr
                                        ; sub_13AF3+A1r
unk_13C70       db 0BAh ; ¦             ; DATA XREF: sub_13AF3+90o
                db    0 ;
                db    0 ;
                db  76h ; v
                db    1 ;
                db  4Ah ; J
                db  83h ; â
word_13C77      dw 5                    ; DATA XREF: sub_13AF3+D9r
                                        ; sub_13AF3+ECr
unk_13C79       db  73h ; s             ; DATA XREF: sub_13AF3+DDo
                db    3 ;
                db 0E9h ; T
                db  93h ; ô
                db    0 ;
word_13C7E      dw 0                    ; DATA XREF: sub_13AF3+CBw
                                        ; sub_13AF3+F9r sub_13AF3+100r

; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


GetInt24        proc near               ; CODE XREF: sub_13AA7+7p
                pushf
                cli
                push    es
                mov     ax, 3524h
                int     21h             ; DOS - 2+ - GET INTERRUPT VECTOR
                                        ; AL = interrupt number
                                        ; Return: ES:BX = value of interrupt vector
                mov     ds:OldInt24Seg, es
                mov     ds:OldInt24Off, bx
                push    cs
                pop     ds
                assume ds:seg001
                mov     dx, offset Int24Entry
                mov     ax, 2524h
                int     21h             ; DOS - SET INTERRUPT VECTOR
                                        ; AL = interrupt number
                                        ; DS:DX = new vector to be used for specified interrupt
                pop     es
                popf
                retn
GetInt24        endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


RestoreInt24    proc near               ; CODE XREF: sub_13AA7+13p
                pushf
                cli
                push    ds
                mov     dx, OldInt24Off
                mov     ds, OldInt24Seg
                assume ds:nothing
                mov     ax, 2524h
                int     21h             ; DOS - SET INTERRUPT VECTOR
                                        ; AL = interrupt number
                                        ; DS:DX = new vector to be used for specified interrupt
                pop     ds
                popf
                retn
RestoreInt24    endp

; ---------------------------------------------------------------------------

Int24Entry:                             ; DATA XREF: GetInt24+12o
                mov     bp, sp          ; DOS critical error handler
                or      byte ptr [bp+1Ch], 1
                pop     ax
                pop     ax
                pop     ax
                pop     ax
                pop     bx
                pop     cx
                pop     dx
                pop     si
                pop     di
                pop     bp
                pop     ds
                pop     es
                iret
; ---------------------------------------------------------------------------
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
word_13CC9      dw 0                    ; DATA XREF: sub_14761+96r
                                        ; seg001:4954r sub_149C2+12r
                                        ; sub_14AEF+10r sub_14B86+B0r
                                        ; sub_14B86+E8r sub_14B86+EEr
                                        ; sub_14B86+10Er sub_14DA4+25r
                                        ; sub_14DA4+7Er sub_14ECA+Dr
                                        ; sub_15045+F0w sub_1513Er
                                        ; sub_1513E+39r sub_15186+2r
                                        ; sub_15186+9r sub_15186+62r
                                        ; sub_1553C+41r sub_174C6+Fr
                                        ; sub_174FB+ADr
word_13CCB      dw 0                    ; DATA XREF: sub_14761+4Ew
                                        ; sub_14761+75r sub_14761+7Bw
                                        ; sub_14761+8Ar sub_14761+90w
                                        ; sub_14761+AFr sub_14761+B5r
                                        ; sub_14761+D0r sub_14761+D6r
                                        ; sub_14B86+3w sub_14B86+4Br
                                        ; sub_14B86+99r sub_14B86+B6r
                                        ; sub_14B86+BCw sub_14B86+C8r
                                        ; sub_14B86+CEr sub_14B86+180r
                                        ; sub_14B86+1FFr sub_14F1F+12r
                                        ; sub_14F1F+18r sub_14F1F+AAr
word_13CCD      dw 0                    ; DATA XREF: sub_15045w sub_15045+90w
                                        ; sub_15045+CDr sub_15242+B7w
                                        ; sub_15242+117r seg001:5366w
                                        ; seg001:53ADr
word_13CCF      dw 0                    ; DATA XREF: sub_15186+94w
                                        ; sub_15242+26r sub_15242+7Dr
                                        ; sub_15242+83w sub_15242+9Dr
                                        ; sub_15A5E+1B9w sub_15A5E+1F5r
                                        ; sub_15D77+C6w sub_15D77+115r
word_13CD1      dw 0                    ; DATA XREF: sub_15242+44w
                                        ; sub_15242+C0r
word_13CD3      dw 0                    ; DATA XREF: sub_15242+48w
                                        ; sub_15242+A8r sub_15242+BCr
word_13CD5      dw 0                    ; DATA XREF: sub_1513E+26w
                                        ; sub_1513E+32r sub_1553C+44w
                db    0 ;
word_13CD8      dw 0                    ; DATA XREF: sub_15A5E+1Fw
                                        ; sub_15A5E+3Fr
word_13CDA      dw 0                    ; DATA XREF: sub_15A5E+1Bw
                                        ; sub_15A5E+3Br
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
word_13CE0      dw 0                    ; DATA XREF: sub_149C2+87w
                                        ; sub_149C2+A9w sub_149C2+123w
word_13CE2      dw 0                    ; DATA XREF: sub_149C2+96w
                                        ; sub_149C2+A3r sub_149C2+EFr
                                        ; sub_14B86+1B3w sub_14B86+1C8r
                                        ; sub_14B86+1E3w sub_14B86+1EDr
                                        ; sub_14B86+1F3r
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
CurrentTrack    dw 0                    ; DATA XREF: AnalyzeTrack+1Ew
                                        ; AnalyzeTrack+BCr AnalyzeTrack+CAr
                                        ; AnalyzeTrack+137r AnalyzeTrack+148r
                                        ; AnalyzeTrack+18Dr sub_1513E+Fr
                                        ; WriteTrack+6w WriteTrack+39r
                db 0
byte_13CEB      db 0                    ; DATA XREF: sub_15045+16w
                                        ; sub_15045+2Cw sub_15045+41r
word_13CEC      dw 0                    ; DATA XREF: sub_15045+1Bw
                                        ; sub_15045+5Ar sub_15045+72w
word_13CEE      dw 0                    ; DATA XREF: seg001:4987r
                                        ; sub_14ECA+43r sub_15045+F4w
                                        ; sub_159E0+23r sub_159E0+4Bw
                                        ; sub_15A5E+276r sub_15D16+29r
                                        ; sub_15D77+37r sub_15D77+5Fw
                                        ; sub_15D77+149r sub_15D77+158r
                                        ; sub_174C6+12r sub_174FB+12Fr
CurrTrkLngthBytes dw 0                  ; DATA XREF: AnalyzeTrack+2Bw
                                        ; AnalyzeTrack+4Ar AnalyzeTrack+63r
                                        ; AnalyzeTrack+77r AnalyzeTrack+9Ar
                                        ; AnalyzeTrack+DBr AnalyzeTrack+F8r
                                        ; AnalyzeTrack+107r AnalyzeTrack+17Er
                                        ; sub_14761+7Er sub_14761+82r
                                        ; seg001:48DDr seg001:4991r
                                        ; seg001:4995r seg001:49A2r
                                        ; sub_14B86+8r sub_14B86+10r
                                        ; sub_14B86+C4r sub_14B86+D2r
                                        ; sub_14B86+170r sub_14B86+184r
                                        ; sub_14EA2+7r sub_14ECA+4Fr
                                        ; sub_14FF4+7r sub_15013+7r
                                        ; sub_15045+E7r sub_15242+F6r
                                        ; seg001:538Cr WriteTrack+2Ar
                                        ; sub_159E0+15r sub_159E0+1Br
                                        ; sub_159E0+2Ar sub_159E0+44r
                                        ; sub_15D46+5r sub_15D77+3w
                                        ; sub_15D77+2Ar sub_15D77+3Er
                                        ; sub_15D77+53r sub_15D77+16Er
                                        ; sub_15D77+17Cr
                                        ; length of the track being processed in bytes.
word_13CF2      dw 0                    ; DATA XREF: AnalyzeTrack+D7w
                                        ; AnalyzeTrack+103w AnalyzeTrack+113r
                                        ; AnalyzeTrack+120r AnalyzeTrack+170r
                                        ; sub_14861+9r seg001:827Er
word_13CF4      dw 0                    ; DATA XREF: AnalyzeTrack+10Cw
                                        ; AnalyzeTrack+117r sub_14761r
                                        ; sub_14F1F+75r sub_15186+57r
                                        ; seg001:8282r
                db  59h ; Y
byte_13CF7      db 0                    ; DATA XREF: seg001:4945r sub_15045+Bw
                                        ; sub_15045+33w
byte_13CF8      db 0                    ; DATA XREF: sub_14B86+144r
                                        ; sub_15045+6w sub_15045+BDw
byte_13CF9      db 0                    ; DATA XREF: sub_14F1F+1Cw
                                        ; sub_14F1F+37w sub_14F1F+47w
                                        ; sub_14F1F+53w sub_14F1F+6Dw
                                        ; sub_153CE+3Cw sub_153CE+A2w
                                        ; sub_15498+1Bw sub_15498+51r
                                        ; sub_15498+82r sub_15498+89w
                                        ; sub_15498+8Er sub_15498+95w
word_13CFA      dw 0                    ; DATA XREF: AnalyzeTrack+B8w
                                        ; AnalyzeTrack+E2w AnalyzeTrack+FFw
                                        ; AnalyzeTrack+16Cr
TrackLengthBits dw 0                    ; DATA XREF: DispReadLngth+Cr
                                        ; DispReadLngth+4Cr WriteTrack+32w
                                        ; sub_15D77+Ew sub_15D77+18Fw
                                        ; sub_18A07+5Br sub_18A07+591r
                                        ; sub_19160r ReadTrack+94w
                                        ; ReadTrack+C3w
                                        ; The length of the track just read in bits.
TrkLnBitsHiByte dw 0                    ; DATA XREF: WriteTrack+35w
                                        ; sub_15D77+11w sub_15D77+192w
                                        ; The high byte of the track length in bits.
WrittenLength   dw 0                    ; DATA XREF: DispWritLngth+Cr
                                        ; DispWritLngth+4Cr sub_18A07+56Dw
                                        ; sub_18A07+588w sub_19160+4r
                                        ; The length of the track just written
word_13D02      dw 0                    ; DATA XREF: sub_18A07+58Bw
byte_13D04      db 0                    ; DATA XREF: sub_18A07+3Cw
                                        ; sub_18A07+56w sub_18A07+278r
word_13D05      dw 0                    ; DATA XREF: AnalyzeTrack+189w
                                        ; sub_14861+3r sub_1AC85+2Ar
word_13D07      dw 0                    ; DATA XREF: ReadWrite+3Dw
                                        ; sub_14B86+1Br sub_14B86+22r
                                        ; sub_14B86+28r sub_14B86+3Bw
byte_13D09      db 0                    ; DATA XREF: ReadWrite+38w
                                        ; sub_14B86+36w sub_14B86+57r
word_13D0A      dw 0                    ; DATA XREF: sub_15242+86w
                                        ; seg001:5362r
word_13D0C      dw 0                    ; DATA XREF: sub_15186+24w
                                        ; sub_153CE+22r sub_15498+4r
word_13D0E      dw 0                    ; DATA XREF: sub_15A5E+95w
                                        ; sub_15A5E+129r sub_15A5E+19Fr
                                        ; sub_15A5E+1A3w sub_18715+8Bw
                                        ; sub_18715+D2r sub_18715+111r
                                        ; sub_18715+15Cr sub_18A07+186w
                                        ; sub_18A07+1CDr sub_18A07+20Cr
                                        ; sub_18A07+257r sub_18A07+3AAw
                                        ; sub_18A07+3F5r sub_18A07+45Dr
                                        ; sub_18A07+4DEr sub_18A07+527r
F_SwitchUsed    db 0                    ; DATA XREF: _Main+1FEr
                                        ; GetCmdLnArgs+16Bw sub_15662r
                                        ; sub_15662+223w
                                        ; Set to 80h by /f command line switch.
                                        ; takes effect during writing track 27h.
byte_13D11      db 0                    ; DATA XREF: _Main+1F7r ReadWrite+11w
                                        ; sub_159E0+7w
byte_13D12      db 0                    ; DATA XREF: sub_15A5Ew sub_15A5E+12Ew
                                        ; sub_15A5E+268r
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
word_13D18      dw 0                    ; DATA XREF: WriteTrack+71w
                                        ; WriteTrack+109w sub_18715+44r
trackSkewDly2   dw 0                    ; DATA XREF: WriteTrack+6Dw
                                        ; WriteTrack+103w sub_18715+40r
                                        ; This word specifies how long to wait after index to begin
                                        ; writing the track.
byte_13D1C      db 0                    ; DATA XREF: _Main+211r sub_1588A+35w
                                        ; sub_159E0+51r sub_15A5E+21Dw
                                        ; sub_15A5E+2B0r sub_16C65+1AAw
                                        ; sub_18A07+27Fr sub_18A07+363r
byte_13D1D      db 0                    ; DATA XREF: sub_149C2+3w
                                        ; sub_149C2+18r sub_149C2+E4w
word_13D1E      dw 0                    ; DATA XREF: sub_149C2+8Dw
                                        ; sub_149C2+AFr sub_149C2+DEr
                                        ; sub_149C2+105r sub_149C2+115w
                                        ; sub_149C2+119r
unk_13D20       db    0 ;               ; DATA XREF: sub_149C2+BDr
                                        ; sub_149C2+10Dw
                db    0 ;
unk_13D22       db    0 ;               ; DATA XREF: sub_149C2+C2r
                                        ; sub_149C2+111w
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
byte_13D70      db 0                    ; DATA XREF: AnalyzeTrack+9r
                                        ; AnalyzeTrack+39w sub_1708Er
                                        ; sub_1708E+7Er
word_13D71      dw 0                    ; DATA XREF: AnalyzeTrack+13w
                                        ; sub_15A5E+13Ar sub_15A5E+15Br
                                        ; sub_15A5E+1BCr sub_15A5E+1E5r
                                        ; sub_15A5E+1FBr sub_15A5E+203r
                                        ; sub_15A5E+20Br seg001:5D52r
                                        ; sub_174FB+D0r
unk_13D73       db 0A0h ; á             ; DATA XREF: sub_15662+FEr
                db 0B0h ; ¦
                db 0D0h ; -
unk_13D76       db  26h ; &             ; DATA XREF: AnalyzeTrack+Dr
                db  20h ;
                db  13h ;
byte_13D79      db 0                    ; DATA XREF: sub_159E0+5Ew
                                        ; sub_159E0+6Bw sub_159E0+6Fr
                                        ; sub_15A5E+24Br
word_13D7A      dw 0                    ; DATA XREF: sub_159E0+1Fw sub_15D16r
word_13D7C      dw 0                    ; DATA XREF: sub_14B86+152r
                                        ; sub_14E52+38w
word_13D7E      dw 0                    ; DATA XREF: AnalyzeTrack+57r
                                        ; AnalyzeTrack+158r sub_14E52+47w
                                        ; sub_15013+24r
word_13D80      dw 0                    ; DATA XREF: sub_14B86+14Br
                                        ; sub_14B86+156r sub_14E52+4Bw
off_13D82       dw offset loc_148BB     ; DATA XREF: sub_1488C+29r
                dw offset loc_148BB
                dw offset loc_148BB
                dw offset loc_148BB
                dw offset loc_148C0
                dw offset loc_148ED
                dw offset loc_148BB
                dw offset loc_14945
                dw offset loc_14927
unk_13D94       db    0 ;               ; DATA XREF: sub_15F0E+17r
                db    0 ;
                db    0 ;
                db    0 ;
                db 0C5h ; +
                db 0BEh ; +
                db    0 ;
word_13D9B      dw 6464h                ; DATA XREF: sub_15D77+109r
word_13D9D      dw 0A70Ch               ; DATA XREF: sub_15D77+CFr
                                        ; sub_15D77+D5r sub_15D77+DEr
                                        ; sub_15D77+E8r sub_15D77+10Dr
                db  74h ; t
                db 0A5h ; Ñ
                db 0DDh ; ¦
                db 0A3h ; ú
                db  46h ; F
                db 0A2h ; ó
                db 0AFh ; »
                db 0A0h ; á
                db  17h ;
                db  9Fh ; ƒ
                db  80h ; Ç
                db  9Dh ; ¥
                db 0E9h ; T
                db  9Bh ; ¢
                db  51h ; Q
                db  9Ah ; Ü
                db 0BAh ; ¦
                db  98h ; ÿ
                db  23h ; #
                db  97h ; ù
                db  8Ch ; î
                db  95h ; ò
                db 0F4h ; (
                db  93h ; ô
                db  5Dh ; ]
                db  92h ; Æ
                db 0C6h ; ¦
                db  90h ; É
                db  2Eh ; .
                db  8Fh ; Å
                db  97h ; ù
                db  8Dh ; ì
                db    0 ;
                db  8Ch ; î
                db  68h ; h
                db  8Ah ; è
                db 0D1h ; -
                db  88h ; ê
                db  3Ah ; :
                db  87h ; ç
                db 0A3h ; ú
                db  85h ; à
                db  0Ch ;
                db  84h ; ä
                db  74h ; t
                db  82h ; é
                db 0DDh ; ¦
                db  80h ; Ç
                db  46h ; F
                db  7Fh ; 
                db 0AFh ; »
                db  7Dh ; }
                db  17h ;
                db  7Ch ; |
                db  80h ; Ç
                db  7Ah ; z
                db 0E9h ; T
                db  78h ; x
                db  51h ; Q
                db  77h ; w
                db 0BAh ; ¦
                db  75h ; u
                db  23h ; #
                db  74h ; t
                db  8Ch ; î
                db  72h ; r
unk_13DE1       db    0 ;               ; DATA XREF: sub_15D77+F1r
                db    0 ;
unk_13DE3       db  98h ; ÿ             ; DATA XREF: sub_15D77+FCr
                db    0 ;
                db  99h ; Ö
                db    0 ;
                db  9Ah ; Ü
                db    0 ;
                db  9Bh ; ¢
                db    0 ;
                db  9Ch ; £
                db    0 ;
                db  9Dh ; ¥
                db    0 ;
                db  9Eh ; P
                db    0 ;
                db  9Fh ; ƒ
                db    0 ;
                db 0A0h ; á
                db    0 ;
                db 0A1h ; í
                db    0 ;
                db 0A2h ; ó
                db    0 ;
                db 0A3h ; ú
                db    0 ;
                db 0A4h ; ñ
                db    0 ;
                db 0A5h ; Ñ
                db    0 ;
                db 0A6h ; ª
                db    0 ;
                db 0A7h ; º
                db    0 ;
                db 0A8h ; ¿
                db    0 ;
                db 0A9h ; ¬
                db    0 ;
                db 0AAh ; ¬
                db    0 ;
                db 0ABh ; ½
                db    0 ;
                db 0ACh ; ¼
                db    0 ;
                db 0ADh ; ¡
                db    0 ;
                db 0AEh ; «
                db    0 ;
                db 0AFh ; »
                db    0 ;
                db 0B0h ; ¦
                db    0 ;
                db 0B1h ; ¦
                db    0 ;
                db 0B2h ; ¦
                db    0 ;
                db 0B3h ; ¦
                db    0 ;
                db 0B4h ; ¦
                db    0 ;
                db 0B5h ; ¦
                db    0 ;
                db 0B6h ; ¦
                db    0 ;
                db 0B7h ; +
                db    0 ;
                db 0B8h ; +
                db    0 ;
                db 0B9h ; ¦
                db    0 ;
                db  4Dh ; M
                db    0 ;
                db  55h ; U
                db    0 ;
                db  5Dh ; ]
                db    0 ;
                db 0A5h ; Ñ
                db    0 ;
                db 0ADh ; ¡
                db    0 ;
                db 0B5h ; ¦
                db    0 ;
unk_13E33       db 0BDh ; +             ; DATA XREF: sub_14AEF+3r
unk_13E34       db    0 ;               ; DATA XREF: sub_149C2+8r
unk_13E35       db    0 ;               ; DATA XREF: sub_14B86+74r
                                        ; sub_15045+9Bw sub_15045+A3w
                                        ; sub_15045+ABw sub_15045+C2w
                                        ; sub_15186+28r sub_174FB+98r
unk_13E36       db    0 ;               ; DATA XREF: sub_15186+2Fr
unk_13E37       db    0 ;               ; DATA XREF: sub_14AEF+7r
                                        ; sub_15186+36r sub_174FB+9Er
unk_13E38       db    0 ;               ; DATA XREF: sub_14761+54r
                                        ; sub_149C2+37r sub_14B86+85r
                                        ; sub_14ECA+3r sub_15186+3Dr
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
unk_14031       db    0 ;               ; DATA XREF: sub_149C2+3Er
                db    0 ;
unk_14033       db    0 ;               ; DATA XREF: sub_14DA4+32r
                db    0 ;
word_14035      dw 0                    ; DATA XREF: AnalyzeTrack+F4r
                                        ; sub_14761+5Dr sub_149C2+5Cr
                                        ; sub_149C2+62r sub_149C2+7Cr
                                        ; sub_14AEF+1Br sub_14AEF+53r
                                        ; sub_14B86r sub_14B86+47r
                                        ; sub_14B86+A6r sub_14B86+D9r
                                        ; sub_14B86+12Br sub_14DA4+3r
                                        ; sub_14DA4+38r sub_14ECA+13r
                                        ; sub_15045+50w sub_15186+5Br
                                        ; sub_15186+6Ar sub_15186+71r
                                        ; sub_15242+5Fr sub_153CE+26r
                                        ; sub_15498+8r
unk_14037       db    0 ;               ; DATA XREF: sub_149C2+80r
                                        ; sub_14B86+41w sub_14B86+51w
                                        ; sub_14B86+DFw sub_14B86+F5r
                                        ; sub_14B86+103r sub_14B86+12Fr
                                        ; sub_14DA4+2Er sub_15045+54w
                db    0 ;
word_14039      dw 0                    ; DATA XREF: sub_14AEF+1Fr
                                        ; sub_15242+72r sub_1553C+53r
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
unk_1422D       db    0 ;               ; DATA XREF: sub_14ECA+47r
                db    0 ;
                db    0 ;
                db    0 ;
unk_14231       db    0 ;               ; DATA XREF: sub_15045+DBr
                                        ; sub_15A5E+1B5r sub_15D16+16r
                                        ; sub_15D77+BBr sub_15D77+130r
                                        ; sub_15D77+15Cr sub_174FB+C8r
                db    0 ;
unk_14233       db    0 ;               ; DATA XREF: sub_15D77+160r
                db    0 ;
word_14235      dw 0                    ; DATA XREF: seg001:497Er seg001:498Dr
                                        ; seg001:499Er sub_15045+76w
                                        ; sub_15045+E0r sub_159E0+37w
                                        ; sub_15A5E+A6r sub_15A5E+1ACr
                                        ; sub_15A5E+1DBr sub_15D16+Cr
                                        ; sub_15D16+12r sub_15D77+4Bw
                                        ; sub_15D77+57r sub_15D77+77r
                                        ; sub_15D77+B7r sub_15D77+168r
                                        ; sub_174FB+BFr
word_14237      dw 0                    ; DATA XREF: sub_15045+7Bw
                                        ; sub_15D77+164r
word_14239      dw 0                    ; DATA XREF: sub_159E0+3Cw
                                        ; sub_15D77+50w sub_15D77+74r
                                        ; sub_15D77+87r
                db    0 ;
                db    0 ;
word_1423D      dw 0                    ; DATA XREF: sub_159E0+48w
                                        ; sub_15D77+5Bw sub_15D77+84r
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
unk_14431       db    0 ;               ; DATA XREF: sub_15D77+13Cw
                                        ; sub_15D77+152w
                db    0 ;
unk_14433       db    0 ;               ; DATA XREF: sub_15D77+142w
                                        ; sub_19160+7Cr sub_19160+99r
                                        ; sub_19160+A7r
                db    0 ;
word_14435      dw 0                    ; DATA XREF: sub_15D77+1Cw
                                        ; sub_18A07+26r sub_18A07+EFr
                                        ; sub_18A07+118r sub_18A07+299r
                                        ; sub_18A07+315r sub_18A07+343r
                                        ; sub_18A07+40Ar sub_18A07+485r
                                        ; sub_19160+50w sub_19160+5Ew
                                        ; sub_19160+66r sub_19160+70w
                                        ; sub_19160+78r sub_19160+80w
                                        ; sub_19160+9Fw sub_19160+A3r
                                        ; sub_19160+B1w
unk_14437       db    0 ;               ; DATA XREF: sub_18A07+2B6r
                                        ; sub_18A07+49Fr sub_19160+6Ar
                                        ; sub_19160+74r sub_19160+ABr
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
unk_14533       db    0 ;               ; DATA XREF: sub_15D77+F8w
unk_14534       db    0 ;               ; DATA XREF: sub_15D77+103w
                                        ; sub_19160+86r sub_19160+90w
                                        ; sub_19160+BBw
unk_14535       db    0 ;               ; DATA XREF: sub_18A07+F7r
                                        ; sub_18A07+120r sub_18A07+2A1r
                                        ; sub_18A07+31Dr sub_18A07+34Br
                                        ; sub_18A07+412r sub_18A07+48Dr
                                        ; sub_19160+8Aw sub_19160+B7r
                                        ; sub_19160+C1w
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;

; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


AnalyzeTrack    proc near               ; CODE XREF: ReadWrite+1A0p
                push    bx
                push    cx
                push    dx
                push    es
                push    ds
                push    si
                push    di
                mov     bh, 0
                mov     bl, ds:byte_13D70
                mov     al, byte ptr ds:unk_13D76[bx]
                mov     ah, 0
                mov     ds:word_13D71, ax
                mov     ds:byte_1008A, 0
                call    GetTrkDatOfs
                mov     ds:CurrentTrack, bx
                mov     ds:TrackSkewTbl[bx], 0
                call    RdTrkLngthTbl
                mov     ds:CurrTrkLngthBytes, dx
                mov     bl, ds:CurrentDrive
                mov     bh, 0
                mov     al, byte ptr ds:stru_15F60.Drive0[bx]
                mov     ds:byte_13D70, al
                mov     es, ds:TrackBufSeg
                mov     si, ds:TrackBufOfs
                mov     ds:CurrTrackBufOfs, si
                mov     ax, si
                add     ax, ds:CurrTrkLngthBytes
                mov     ds:EndOfCurrTrk, ax
                add     si, 5
                call    sub_14E52
                cmp     ds:word_13D7E, '$'
                jbe     short loc_14618
                mov     ds:CpyWkBitsFlag, 'Y'

loc_14618:                              ; CODE XREF: AnalyzeTrack+5Cj
                mov     ax, ds:CurrTrkLngthBytes
                add     ds:EndOfCurrTrk, ax
                mov     si, ds:CurrTrackBufOfs
                call    sub_15045
                mov     si, ds:CurrTrackBufOfs
                mov     ax, si
                add     ax, ds:CurrTrkLngthBytes
                add     ax, 20h ; ' '
                mov     ds:EndOfCurrTrk, ax
                call    sub_1488C
                jnb     short loc_14647
                cmp     si, 0FFFFh
                stc
                jnz     short loc_14647

loc_14641:                              ; CODE XREF: AnalyzeTrack+AFj
                stc
                mov     al, 0FFh
                jmp     loc_14759
; ---------------------------------------------------------------------------

loc_14647:                              ; CODE XREF: AnalyzeTrack+84j
                                        ; AnalyzeTrack+8Aj
                pushf
                cmp     ds:DiskType, 7
                jnz     short loc_1466D
                cmp     ds:CurrTrkLngthBytes, 3300h
                jnb     short loc_14666
                cmp     ds:byte_167D5, 0
                jz      short loc_1466D

loc_1465E:                              ; CODE XREF: AnalyzeTrack+B6j
                xor     ds:byte_167D5, 0FFh
                popf
                jmp     short loc_14641
; ---------------------------------------------------------------------------

loc_14666:                              ; CODE XREF: AnalyzeTrack+A0j
                cmp     ds:byte_167D5, 0FFh
                jnz     short loc_1465E

loc_1466D:                              ; CODE XREF: AnalyzeTrack+98j
                                        ; AnalyzeTrack+A7j
                mov     ds:word_13CFA, di
                mov     bx, ds:CurrentTrack
                mov     al, ds:DiskType
                mov     byte ptr ds:(TrackTypeTable+1)[bx], al
                popf
                jnb     short loc_1469E
                mov     bx, ds:CurrentTrack
                or      byte ptr ds:TrackTypeTable[bx], 80h
                mov     si, ds:CurrTrackBufOfs
                mov     ds:word_13CF2, si
                mov     di, ds:CurrTrkLngthBytes
                add     di, 0Ch
                mov     ds:word_13CFA, di
                jmp     loc_14721
; ---------------------------------------------------------------------------

loc_1469E:                              ; CODE XREF: AnalyzeTrack+C8j
                cmp     ds:CopyXIDXFlag, 'Y'
                jz      short loc_146B8
                mov     si, ds:CurrTrackBufOfs
                mov     di, ds:word_14035
                add     di, ds:CurrTrkLngthBytes
                add     di, 0Ch
                mov     ds:word_13CFA, di

loc_146B8:                              ; CODE XREF: AnalyzeTrack+EEj
                mov     ds:word_13CF2, si
                mov     ax, ds:CurrTrkLngthBytes
                add     ax, si
                mov     ds:word_13CF4, ax
                mov     es, ds:TrackBufSeg
                mov     si, ds:word_13CF2
                mov     ax, ds:word_13CF4
                mov     ds:EndOfCurrTrk, ax
                call    sub_15045
                mov     si, ds:word_13CF2
                call    sub_159E0
                call    sub_174C6
                call    sub_149B0
                call    sub_1513E
                cmp     ds:byte_1008A, 0
                jz      short loc_146FD

loc_146EC:                              ; CODE XREF: AnalyzeTrack+15Dj
                mov     bx, ds:CurrentTrack
                or      byte ptr ds:TrackTypeTable[bx], 40h
                and     byte ptr ds:TrackTypeTable[bx], 0DFh
                jmp     short loc_1471E
; ---------------------------------------------------------------------------
                db 90h
; ---------------------------------------------------------------------------

loc_146FD:                              ; CODE XREF: AnalyzeTrack+135j
                mov     bx, ds:CurrentTrack
                shr     bx, 1
                cmp     byte ptr ds:unk_161CA[bx], 0
                jz      short loc_1470D
                call    sub_15013

loc_1470D:                              ; CODE XREF: AnalyzeTrack+153j
                cmp     ds:word_13D7E, '$'
                ja      short loc_146EC
                cmp     ds:VerifyWrtFlag, 'Y'
                jnz     short loc_1471E
                call    loc_18279

loc_1471E:                              ; CODE XREF: AnalyzeTrack+145j
                                        ; AnalyzeTrack+164j
                call    sub_14761

loc_14721:                              ; CODE XREF: AnalyzeTrack+E6j
                mov     dx, ds:word_13CFA
                sub     dx, ds:word_13CF2
                mov     ax, 0FFh
                cmp     ds:KeepTrkLngthFlag, 'Y'
                jz      short loc_1473A
                mov     dx, ds:CurrTrkLngthBytes
                mov     ax, 240h

loc_1473A:                              ; CODE XREF: AnalyzeTrack+17Cj
                add     dx, ax
                mov     dl, 0
                mov     ds:word_13D05, dx
                mov     bx, ds:CurrentTrack
                mov     al, byte ptr ds:TrackTypeTable[bx]
                and     al, 80h
                clc
                jz      short loc_14759
                mov     ds:DiskType, 0FFh
                mov     ds:byte_100B3, 7Eh ; '~'

loc_14759:                              ; CODE XREF: AnalyzeTrack+8Fj
                                        ; AnalyzeTrack+198j
                pop     di
                pop     si
                pop     ds
                pop     es
                pop     dx
                pop     cx
                pop     bx
                retn
AnalyzeTrack    endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_14761       proc near               ; CODE XREF: AnalyzeTrack+169p
                mov     si, ds:word_13CF4
                mov     cx, 100h
                cmp     ds:DiskType, 7
                jnb     short loc_147AC
                add     si, 4
                mov     cx, 64h ; 'd'
                mov     bx, 5555h
                mov     ax, bx
                mov     dl, al
                cmp     ds:DiskType, 5
                jz      short loc_1478E
                mov     bx, es:[si]
                mov     ax, es:[si+2]
                mov     dl, es:[si+4]

loc_1478E:                              ; CODE XREF: sub_14761+20j
                                        ; sub_14761+48j
                cmp     si, 0FFFAh
                ja      short locret_147AB
                mov     es:[si], bl
                mov     es:[si+1], bh
                mov     es:[si+2], al
                mov     es:[si+3], ah
                mov     es:[si+4], dl
                add     si, 5
                loop    loc_1478E

locret_147AB:                           ; CODE XREF: sub_14761+30j
                retn
; ---------------------------------------------------------------------------

loc_147AC:                              ; CODE XREF: sub_14761+Cj
                mov     di, 0
                mov     ds:word_13CCB, 0

loc_147B5:                              ; CODE XREF: sub_14761+9Aj
                mov     cl, byte ptr ds:unk_13E38[di]
                cmp     cl, 6
                jnb     short loc_147F4
                mov     bx, ds:word_14035[di]
                cmp     si, bx
                jbe     short loc_147F4
                mov     ax, 80h ; 'Ç'
                inc     cl
                shl     ax, cl
                add     ax, bx
                add     ax, 66h ; 'f'
                cmp     si, ax
                jbe     short loc_147DF
                cmp     ax, ds:word_13CCB
                jb      short loc_147DF
                mov     ds:word_13CCB, ax

loc_147DF:                              ; CODE XREF: sub_14761+73j
                                        ; sub_14761+79j
                add     ax, ds:CurrTrkLngthBytes
                add     bx, ds:CurrTrkLngthBytes
                cmp     si, bx
                jbe     short loc_147F4
                cmp     ax, ds:word_13CCB
                jb      short loc_147F4
                mov     ds:word_13CCB, ax

loc_147F4:                              ; CODE XREF: sub_14761+5Bj
                                        ; sub_14761+63j sub_14761+88j
                                        ; sub_14761+8Ej
                add     di, 4
                cmp     di, ds:word_13CC9
                jb      short loc_147B5
                call    sub_14F1F
                jnb     short locret_14860
                cmp     ds:KeepTrkLngthFlag, 59h ; 'Y'
                jz      short locret_14860
                mov     cx, 100h
                push    si
                sub     si, 14h
                cmp     si, ds:word_13CCB
                jnb     short loc_1481A
                mov     si, ds:word_13CCB

loc_1481A:                              ; CODE XREF: sub_14761+B3j
                mov     ax, es:[si]
                mov     bx, ax
                and     bx, 180h
                cmp     bx, 180h
                jnz     short loc_1482D
                and     al, 1Fh
                or      al, 40h

loc_1482D:                              ; CODE XREF: sub_14761+C6j
                pop     si
                sub     si, 5
                cmp     si, ds:word_13CCB
                jnb     short loc_1483B
                mov     si, ds:word_13CCB

loc_1483B:                              ; CODE XREF: sub_14761+D4j
                test    al, 80h
                jz      short $+2
                cmp     es:[si], ax
                jz      short loc_14845
                dec     si

loc_14845:                              ; CODE XREF: sub_14761+E1j
                test    al, 80h
                jz      short loc_14854
                test    byte ptr es:[si-1], 1
                jz      short loc_14854
                and     al, 1Fh
                or      al, 40h

loc_14854:                              ; CODE XREF: sub_14761+E6j
                                        ; sub_14761+EDj sub_14761+FDj
                mov     es:[si], ax

loc_14857:
                cmp     si, 0FFFDh
                ja      short locret_14860
                inc     si
                inc     si
                loop    loc_14854

locret_14860:                           ; CODE XREF: sub_14761+9Fj
                                        ; sub_14761+A6j sub_14761+F9j
                retn
sub_14761       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_14861       proc near               ; CODE XREF: sub_1AC85+43p
                call    sub_1AC25
                mov     dx, ds:word_13D05
                add     dx, si
                mov     di, ds:word_13CF2
                mov     ds, cs:TrackBufSeg

loc_14873:                              ; CODE XREF: sub_14861+22j
                mov     ax, [di]
                mov     es:[si], ax
                inc     di
                inc     di
                inc     si
                inc     si
                cmp     si, 0FFFCh
                jnb     short loc_14885
                cmp     si, dx
                jb      short loc_14873

loc_14885:                              ; CODE XREF: sub_14861+1Ej
                push    cs
                pop     ds
                assume ds:seg001
                mov     word_1AAF7, dx
                retn
sub_14861       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1488C       proc near               ; CODE XREF: AnalyzeTrack+81p
                                        ; seg001:48EBj seg001:4951j
                mov     bh, 0
                mov     bl, DiskType
                cmp     bl, 0FFh
                jnz     short loc_14899
                mov     bl, 87h ; 'ç'

loc_14899:                              ; CODE XREF: sub_1488C+9j
                test    bl, 80h
                jz      short loc_148B3
                and     bl, 7Fh
                cmp     bl, byte_100B3
                jnz     short loc_148B3
                cmp     byte_167D5, 0
                mov     byte_167D5, 0
                jz      short loc_148BB

loc_148B3:                              ; CODE XREF: sub_1488C+10j
                                        ; sub_1488C+19j
                shl     bx, 1
                mov     ax, off_13D82[bx]
                jmp     ax
; ---------------------------------------------------------------------------

loc_148BB:                              ; CODE XREF: sub_1488C+25j
                                        ; seg001:48F9j seg001:491Bj
                                        ; DATA XREF: seg001:3D82o seg001:3D84o
                                        ; seg001:3D86o seg001:3D88o
                                        ; seg001:3D8Eo
                stc
                mov     si, 0
                retn
sub_1488C       endp

; ---------------------------------------------------------------------------

loc_148C0:                              ; DATA XREF: seg001:3D8Ao
                mov     si, CurrTrackBufOfs
                add     si, 30h ; '0'
                call    sub_18603
                jb      short loc_148E6
                sub     si, bp
                add     si, 10h
                mov     DiskType, 4
                mov     byte_100B3, 4

loc_148DB:                              ; CODE XREF: seg001:4914j seg001:4940j
                mov     di, si
                add     di, CurrTrkLngthBytes
                add     di, 20h ; ' '
                clc
                retn
; ---------------------------------------------------------------------------

loc_148E6:                              ; CODE XREF: seg001:48CAj
                mov     DiskType, 85h ; 'à'
                jmp     short sub_1488C
; ---------------------------------------------------------------------------

loc_148ED:                              ; DATA XREF: seg001:3D8Co
                cmp     byte_100B3, 7
                jb      short loc_148FB
                cmp     CurrentCylinder, 28h ; '('
                jnb     short loc_148BB

loc_148FB:                              ; CODE XREF: seg001:48F2j
                mov     si, CurrTrackBufOfs
                add     si, 30h ; '0'
                call    sub_18591
                jb      short loc_14916
                mov     DiskType, 5
                mov     byte_100B3, 5
                sub     si, 1Ch
                jmp     short loc_148DB
; ---------------------------------------------------------------------------

loc_14916:                              ; CODE XREF: seg001:4905j
                cmp     byte_100B3, 7Eh ; '~'
                jz      short loc_148BB
                mov     DiskType, 87h ; 'ç'
                mov     si, 0FFFFh
                stc
                retn
; ---------------------------------------------------------------------------

loc_14927:                              ; DATA XREF: seg001:3D92o
                mov     si, CurrTrackBufOfs
                add     si, 30h ; '0'
                call    sub_1856B
                jb      short loc_14942
                mov     DiskType, 8
                mov     byte_100B3, 8
                sub     si, 20h ; ' '
                jmp     short loc_148DB
; ---------------------------------------------------------------------------

loc_14942:                              ; CODE XREF: seg001:4931j
                jmp     short loc_14962
; ---------------------------------------------------------------------------
                db  90h ; É
; ---------------------------------------------------------------------------

loc_14945:                              ; DATA XREF: seg001:3D90o
                cmp     byte_13CF7, 0A1h ; 'í'
                jz      short loc_14954
                mov     DiskType, 88h ; 'ê'
                jmp     sub_1488C
; ---------------------------------------------------------------------------

loc_14954:                              ; CODE XREF: seg001:494Aj
                cmp     word_13CC9, 0
                jnz     short loc_1496C
                cmp     byte_100B3, 8
                jz      short loc_149AB

loc_14962:                              ; CODE XREF: seg001:4942j
                mov     DiskType, 84h ; 'ä'
                mov     si, 0FFFFh
                stc
                retn
; ---------------------------------------------------------------------------

loc_1496C:                              ; CODE XREF: seg001:4959j
                call    sub_14B86
                jb      short loc_149AB
                mov     DiskType, 7
                mov     byte_100B3, 7
                mov     di, 0

loc_1497E:                              ; CODE XREF: seg001:498Bj
                cmp     si, word_14235[di]
                jb      short loc_1499E
                add     di, 4
                cmp     di, word_13CEE
                jb      short loc_1497E
                mov     di, word_14235
                add     di, CurrTrkLngthBytes
                add     di, CurrTrkLngthBytes
                add     di, 12h
                clc
                retn
; ---------------------------------------------------------------------------

loc_1499E:                              ; CODE XREF: seg001:4982j
                mov     di, word_14235[di]
                add     di, CurrTrkLngthBytes
                add     di, 12h
                clc
                retn
; ---------------------------------------------------------------------------

loc_149AB:                              ; CODE XREF: seg001:4960j seg001:496Fj
                mov     si, 0
                stc
                retn

; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_149B0       proc near               ; CODE XREF: AnalyzeTrack+12Ap
                cmp     DiskType, 7
                jnz     short locret_149C1
                call    sub_14AEF
                jb      short locret_149C1
                call    sub_149C2
                jb      short $+2

locret_149C1:                           ; CODE XREF: sub_149B0+5j sub_149B0+Aj
                retn
sub_149B0       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_149C2       proc near               ; CODE XREF: sub_149B0+Cp
                mov     di, 4
                mov     byte_13D1D, 0

loc_149CA:                              ; CODE XREF: sub_149C2+16j
                cmp     byte ptr unk_13E34[di], 3
                jz      short loc_149F9

loc_149D1:                              ; CODE XREF: sub_149C2+3Cj
                                        ; sub_149C2+48j sub_149C2+56j
                                        ; sub_149C2+60j sub_149C2+6Cj
                                        ; sub_149C2+7Aj sub_149C2+E9j
                add     di, 4
                cmp     di, word_13CC9
                jb      short loc_149CA
                cmp     byte_13D1D, 0
                jz      short loc_149F7
                cmp     byte_1008A, 0
                jnz     short loc_149F5
                call    GetTrkDatOfs
                or      TrackTypeTable[bx], 40h
                mov     byte_1008A, 1

loc_149F5:                              ; CODE XREF: sub_149C2+24j
                stc
                retn
; ---------------------------------------------------------------------------

loc_149F7:                              ; CODE XREF: sub_149C2+1Dj
                clc
                retn
; ---------------------------------------------------------------------------

loc_149F9:                              ; CODE XREF: sub_149C2+Dj
                cmp     byte ptr unk_13E38[di], 2
                jnz     short loc_149D1
                mov     si, word ptr unk_14031[di]
                add     si, 8
                call    sub_184FC
                jb      short loc_149D1
                call    MFMDecode
                call    MFMDecode
                call    MFMDecode
                cmp     dl, 0FEh ; '¦'
                jz      short loc_149D1
                add     si, 800h
                cmp     si, word_14035[di]
                jb      short loc_149D1
                mov     si, word_14035[di]
                add     si, 8
                call    sub_184FC
                jb      short loc_149D1
                call    MFMDecode
                call    MFMDecode
                call    MFMDecode
                cmp     dl, 0FEh ; '¦'
                jnz     short loc_149D1
                mov     si, word_14035[di]
                mov     cx, word ptr unk_14037[di]
                add     si, 5Ah ; 'Z'
                mov     word_13CE0, 1F8h
                mov     word_13D1E, 0

loc_14A55:                              ; CODE XREF: sub_149C2+12Aj
                mov     dx, es:[si]
                mov     word_13CE2, dx
                add     si, 2

loc_14A5F:                              ; CODE XREF: sub_149C2+ADj
                mov     dx, es:[si]
                add     si, 2
                cmp     dx, word_13CE2
                jnz     short loc_14AAE
                dec     word_13CE0
                jns     short loc_14A5F

loc_14A71:                              ; CODE XREF: sub_149C2+128j
                cmp     word_13D1E, 0
                jz      short loc_14AAB
                mov     bx, 0

loc_14A7B:                              ; CODE XREF: sub_149C2+E2j
                shl     bx, 1
                shl     bx, 1
                mov     si, word ptr unk_13D20[bx]
                push    bx
                mov     bx, word ptr unk_13D22[bx]
                mov     bh, 0
                mov     ah, 0
                mov     al, byte ptr unk_153B4[bx]
                and     es:[si], ax
                xor     ax, 0FFFFh
                and     es:[si+2], ax
                pop     bx
                shr     bx, 1
                shr     bx, 1
                inc     bx
                cmp     bx, word_13D1E
                jb      short loc_14A7B
                mov     byte_13D1D, 0FFh

loc_14AAB:                              ; CODE XREF: sub_149C2+B4j
                                        ; sub_149C2+11Ej
                jmp     loc_149D1
; ---------------------------------------------------------------------------

loc_14AAE:                              ; CODE XREF: sub_149C2+A7j
                sub     si, 2
                cmp     dl, byte ptr word_13CE2
                jnz     short loc_14AB8
                inc     si

loc_14AB8:                              ; CODE XREF: sub_149C2+F3j
                mov     dl, es:[si]
                xor     dl, es:[si-2]
                mov     cl, 0FFh

loc_14AC1:                              ; CODE XREF: sub_149C2+103j
                inc     cl
                shl     dl, 1
                jnb     short loc_14AC1
                mov     bx, word_13D1E
                shl     bx, 1
                shl     bx, 1
                mov     word ptr unk_13D20[bx], si
                mov     word ptr unk_13D22[bx], cx
                inc     word_13D1E
                cmp     word_13D1E, 5
                ja      short loc_14AAB
                add     si, 3
                sub     word_13CE0, 3
                js      short loc_14A71
                jmp     loc_14A55
sub_149C2       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_14AEF       proc near               ; CODE XREF: sub_149B0+7p
                mov     di, 4

loc_14AF2:                              ; CODE XREF: sub_14AEF+14j
                mov     ax, word ptr unk_13E33[di]
                cmp     ax, word ptr unk_13E37[di]
                jz      short loc_14B07
                add     di, 4
                cmp     di, word_13CC9
                jb      short loc_14AF2

loc_14B05:                              ; CODE XREF: sub_14AEF+28j
                                        ; sub_14AEF+30j sub_14AEF+3Ej
                                        ; sub_14AEF+43j sub_14AEF+51j
                clc
                retn
; ---------------------------------------------------------------------------

loc_14B07:                              ; CODE XREF: sub_14AEF+Bj
                sub     di, 4
                mov     si, word_14035[di]
                mov     ax, word_14039[di]
                sub     ax, si
                cmp     ax, 1F0h
                jb      short loc_14B05
                add     si, 8
                call    sub_184FC
                jb      short loc_14B05
                call    MFMDecode
                call    MFMDecode
                call    MFMDecode
                cmp     dl, 0FEh ; '¦'
                jnz     short loc_14B05
                call    sub_184FC
                jb      short loc_14B05
                call    MFMDecode
                call    MFMDecode
                call    MFMDecode
                cmp     dl, 0FEh ; '¦'
                jz      short loc_14B05
                mov     si, word_14035[di]
                add     si, 48h ; 'H'
                mov     cx, 12h

loc_14B4C:                              ; CODE XREF: sub_14AEF+6Fj
                xor     bx, bx

loc_14B4E:                              ; CODE XREF: sub_14AEF+6Dj
                mov     ax, word ptr unk_14B76[bx]
                mov     es:[si], ax
                inc     si
                inc     si
                inc     bx
                inc     bx
                cmp     bx, 10h
                jb      short loc_14B4E
                loop    loc_14B4C
                cmp     byte_1008A, 0
                jnz     short loc_14B74
                call    GetTrkDatOfs
                or      TrackTypeTable[bx], 40h
                mov     byte_1008A, 1

loc_14B74:                              ; CODE XREF: sub_14AEF+76j
                stc
                retn
sub_14AEF       endp

; ---------------------------------------------------------------------------
unk_14B76       db    0 ;               ; DATA XREF: sub_14AEF+5Fr
                db    0 ;
                db    0 ;
                db    0 ;
                db  45h ; E
                db  51h ; Q
                db  45h ; E
                db  51h ; Q
                db  45h ; E
                db  51h ; Q
                db  45h ; E
                db  51h ; Q
                db  45h ; E
                db  51h ; Q
                db  45h ; E
                db  51h ; Q

; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_14B86       proc near               ; CODE XREF: seg001:496Cp
                mov     ax, word_14035
                mov     word_13CCB, ax
                mov     bx, ax
                cmp     CurrTrkLngthBytes, 3300h
                jb      short loc_14BA1
                cmp     CurrTrkLngthBytes, 3480h
                ja      short loc_14BA1
                call    sub_14FF4

loc_14BA1:                              ; CODE XREF: sub_14B86+Ej
                                        ; sub_14B86+16j
                cmp     word_13D07, 0
                jz      short loc_14BC1
                cmp     bx, word_13D07
                jbe     short loc_14BC1
                sub     bx, word_13D07
                cmp     bx, 0Eh
                jb      short loc_14BC1
                cmp     bx, 30h ; '0'
                ja      short loc_14BC1
                mov     byte_13D09, 0FFh

loc_14BC1:                              ; CODE XREF: sub_14B86+20j
                                        ; sub_14B86+26j sub_14B86+2Fj
                                        ; sub_14B86+34j
                mov     word_13D07, ax
                mov     di, 0

loc_14BC7:                              ; CODE XREF: sub_14B86+BFj
                and     word ptr unk_14037[di], 0FFh
                mov     ax, word_14035[di]
                cmp     ax, word_13CCB
                jbe     short loc_14BDD
                or      word ptr unk_14037[di], 8000h

loc_14BDD:                              ; CODE XREF: sub_14B86+4Fj
                cmp     byte_13D09, 0FFh
                jnz     short loc_14BF5
                cmp     CurrentCylinder, 1
                jz      short loc_14BF2
                cmp     CurrentCylinder, 2
                jnz     short loc_14BF5

loc_14BF2:                              ; CODE XREF: sub_14B86+63j
                call    sub_15013

loc_14BF5:                              ; CODE XREF: sub_14B86+5Cj
                                        ; sub_14B86+6Aj
                cmp     di, 48h ; 'H'
                ja      short loc_14C08
                mov     cx, word ptr unk_13E35[di]
                cmp     cl, 4Fh ; 'O'
                ja      short loc_14C08
                cmp     ch, 2
                jb      short loc_14C0B

loc_14C08:                              ; CODE XREF: sub_14B86+72j
                                        ; sub_14B86+7Bj
                call    sub_15013

loc_14C0B:                              ; CODE XREF: sub_14B86+80j
                mov     cl, byte ptr unk_13E38[di]
                cmp     cl, 6
                jb      short loc_14C25
                cmp     cl, 9
                ja      short loc_14C1F
                call    sub_15013
                jmp     loc_14CA2
; ---------------------------------------------------------------------------

loc_14C1F:                              ; CODE XREF: sub_14B86+91j
                mov     ax, word_13CCB
                jmp     short loc_14C33
; ---------------------------------------------------------------------------
                db 90h
; ---------------------------------------------------------------------------

loc_14C25:                              ; CODE XREF: sub_14B86+8Cj
                mov     ax, 80h ; 'Ç'
                inc     cl
                shl     ax, cl
                add     ax, word_14035[di]
                add     ax, 7Ch ; '|'

loc_14C33:                              ; CODE XREF: sub_14B86+9Cj
                add     di, 4
                cmp     di, word_13CC9
                jnb     short loc_14C47
                cmp     ax, word_13CCB
                jb      short loc_14C45
                mov     word_13CCB, ax

loc_14C45:                              ; CODE XREF: sub_14B86+BAj
                jmp     short loc_14BC7
; ---------------------------------------------------------------------------

loc_14C47:                              ; CODE XREF: sub_14B86+B4j
                mov     ax, CurrTrackBufOfs
                add     ax, CurrTrkLngthBytes
                cmp     ax, word_13CCB
                jnb     short loc_14C74
                mov     dx, word_13CCB
                sub     dx, CurrTrkLngthBytes
                mov     di, 0

loc_14C5F:                              ; CODE XREF: sub_14B86+ECj
                cmp     dx, word_14035[di]
                jbe     short loc_14C74
                and     word ptr unk_14037[di], 7FFFh
                add     di, 4
                cmp     di, word_13CC9
                jb      short loc_14C5F

loc_14C74:                              ; CODE XREF: sub_14B86+CCj
                                        ; sub_14B86+DDj
                mov     di, word_13CC9
                sub     di, 4
                test    word ptr unk_14037[di], 8000h
                jz      short loc_14C86
                jmp     loc_14D06
; ---------------------------------------------------------------------------

loc_14C86:                              ; CODE XREF: sub_14B86+FBj
                mov     di, 0

loc_14C89:                              ; CODE XREF: sub_14B86+112j
                test    word ptr unk_14037[di], 8000h
                jnz     short loc_14CA9
                add     di, 4
                cmp     di, word_13CC9
                jb      short loc_14C89
                call    sub_15013
                call    sub_14ECA
                jnb     short loc_14CC8

loc_14CA2:                              ; CODE XREF: sub_14B86+96j
                call    sub_14DA4
                jnb     short loc_14CC8
                jb      short loc_14D18

loc_14CA9:                              ; CODE XREF: sub_14B86+109j
                                        ; sub_14B86+18Dj
                cmp     di, 0
                jz      short loc_14CB1
                call    sub_15013

loc_14CB1:                              ; CODE XREF: sub_14B86+126j
                mov     si, word_14035[di]
                mov     cx, word ptr unk_14037[di]
                sub     si, 4

loc_14CBC:                              ; CODE XREF: sub_14B86+140j
                sub     si, 4
                call    MFMDecode
                cmp     dx, 0FF00h
                jz      short loc_14CBC

loc_14CC8:                              ; CODE XREF: sub_14B86+11Aj
                                        ; sub_14B86+11Fj
                clc

loc_14CC9:                              ; CODE XREF: sub_14B86+190j
                                        ; sub_14B86+21Bj
                pushf
                cmp     byte_13CF8, 0FFh
                jnz     short loc_14CE3
                cmp     word_13D80, 0Ah
                jb      short loc_14CE3
                mov     si, word_13D7C
                add     si, word_13D80
                sub     si, 8

loc_14CE3:                              ; CODE XREF: sub_14B86+149j
                                        ; sub_14B86+150j
                popf
                pushf
                cmp     KeepTrkLngthFlag, 'Y'
                jnz     short loc_14D04
                cmp     CopyXIDXFlag, 'Y'
                jnz     short loc_14D04
                push    si
                mov     ax, si
                add     ax, CurrTrkLngthBytes
                add     ax, 20h ; ' '
                mov     EndOfCurrTrk, ax
                call    sub_15045
                pop     si

loc_14D04:                              ; CODE XREF: sub_14B86+164j
                                        ; sub_14B86+16Bj
                popf
                retn
; ---------------------------------------------------------------------------

loc_14D06:                              ; CODE XREF: sub_14B86+FDj
                mov     dx, word_13CCB
                cmp     dx, CurrTrkLngthBytes
                jb      short loc_14D18
                mov     di, 0
                jmp     short loc_14CA9
; ---------------------------------------------------------------------------

loc_14D15:                              ; CODE XREF: sub_14B86+19Cj
                stc
                jmp     short loc_14CC9
; ---------------------------------------------------------------------------

loc_14D18:                              ; CODE XREF: sub_14B86+121j
                                        ; sub_14B86+188j
                mov     si, CurrTrackBufOfs
                add     si, 28h ; '('
                call    sub_184FC
                jb      short loc_14D15
                sub     si, 4

loc_14D27:                              ; CODE XREF: sub_14B86+1ABj
                sub     si, 4
                call    MFMDecode
                cmp     dx, 0FF00h
                jz      short loc_14D27
                sub     si, 6
                call    MFMDecode
                mov     word_13CE2, dx

loc_14D3D:                              ; CODE XREF: sub_14B86+1CCj
                cmp     si, 4
                jbe     short loc_14D5F
                sub     si, 4
                cmp     si, CurrTrackBufOfs
                jbe     short loc_14D5F
                call    MFMDecode
                cmp     dx, word_13CE2
                jz      short loc_14D3D
                mov     ax, si
                sub     ax, CurrTrackBufOfs
                cmp     ax, 4
                ja      short loc_14D91

loc_14D5F:                              ; CODE XREF: sub_14B86+1BAj
                                        ; sub_14B86+1C3j
                mov     si, ReadLengthBytes
                add     si, 6
                call    MFMDecode
                mov     word_13CE2, dx

loc_14D6D:                              ; CODE XREF: sub_14B86+1F1j
                sub     si, 4
                call    MFMDecode
                cmp     dx, word_13CE2
                jz      short loc_14D6D
                cmp     dh, byte ptr word_13CE2+1
                jnz     short loc_14D80
                dec     si

loc_14D80:                              ; CODE XREF: sub_14B86+1F7j
                mov     ax, si
                sub     ax, 20h ; ' '
                cmp     ax, word_13CCB
                ja      short loc_14D91
                add     si, 3
                call    sub_14FF4

loc_14D91:                              ; CODE XREF: sub_14B86+1D7j
                                        ; sub_14B86+203j
                mov     ax, es:[si+6]
                mov     es:[si+4], ax
                mov     es:[si+2], ax
                mov     es:[si], ax
                clc
                jmp     loc_14CC9
sub_14B86       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_14DA4       proc near               ; CODE XREF: sub_14B86+11Cp
                mov     di, 0

loc_14DA7:                              ; CODE XREF: sub_14DA4+29j
                mov     si, word_14035[di]
                add     si, 4
                call    sub_184FC
                jb      short loc_14DCF
                call    MFMDecode
                call    MFMDecode
                call    MFMDecode
                cmp     dl, 0FBh ; 'v'
                jz      short loc_14E2C
                cmp     dl, 0F8h ; '°'
                jz      short loc_14E2C

loc_14DC6:                              ; CODE XREF: sub_14DA4+A9j
                add     di, 4
                cmp     di, word_13CC9
                jb      short loc_14DA7

loc_14DCF:                              ; CODE XREF: sub_14DA4+Dj
                mov     di, 4

loc_14DD2:                              ; CODE XREF: sub_14DA4+82j
                mov     cl, byte ptr unk_14037[di]
                cmp     cl, byte ptr unk_14033[di]
                jz      short loc_14E1F
                mov     si, word_14035[di]
                sub     si, 1Ch
                mov     ax, es:[si]

loc_14DE6:                              ; CODE XREF: sub_14DA4+48j
                sub     si, 2
                cmp     ax, es:[si]
                jz      short loc_14DE6
                add     si, 2
                mov     EndOfCurrTrk, si
                add     EndOfCurrTrk, 20h ; ' '
                mov     di, si
                sub     si, 6
                call    MFMDecode
                cmp     dx, 14C2h
                jnz     short loc_14E1B
                sub     si, 20h ; ' '
                mov     ax, es:[si]

loc_14E0E:                              ; CODE XREF: sub_14DA4+70j
                sub     si, 2
                cmp     ax, es:[si]
                jz      short loc_14E0E
                add     si, 2
                mov     di, si

loc_14E1B:                              ; CODE XREF: sub_14DA4+62j
                mov     si, di
                clc
                retn
; ---------------------------------------------------------------------------

loc_14E1F:                              ; CODE XREF: sub_14DA4+36j
                add     di, 4
                cmp     di, word_13CC9
                jb      short loc_14DD2
                call    sub_14EA2
                retn
; ---------------------------------------------------------------------------

loc_14E2C:                              ; CODE XREF: sub_14DA4+1Bj
                                        ; sub_14DA4+20j
                sub     si, 0Ah

loc_14E2F:                              ; CODE XREF: sub_14DA4+9Bj
                sub     si, 4
                call    MFMDecode
                push    dx
                and     dx, 7FFFh
                cmp     dx, 7F00h
                pop     dx
                jz      short loc_14E2F
                push    dx
                sub     si, 4
                call    MFMDecode
                pop     cx
                cmp     dx, cx
                jnz     short loc_14E50
                jmp     loc_14DC6
; ---------------------------------------------------------------------------

loc_14E50:                              ; CODE XREF: sub_14DA4+A7j
                clc
                retn
sub_14DA4       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_14E52       proc near               ; CODE XREF: AnalyzeTrack+54p
                mov     bh, 0
                mov     ah, 0
                xor     dx, dx
                xor     di, di
                xor     bp, bp
                mov     si, CurrTrackBufOfs
                mov     cx, EndOfCurrTrk
                sub     cx, si

loc_14E66:                              ; CODE XREF: sub_14E52+3Fj
                lods    byte ptr es:[si]
                mov     bl, al
                cmp     al, byte_17F79[bx]
                jz      short loc_14E77
                mov     ah, 0
                inc     dx

loc_14E73:                              ; CODE XREF: sub_14E52+2Aj
                inc     bp
                jmp     short loc_14E91
; ---------------------------------------------------------------------------
                db 90h
; ---------------------------------------------------------------------------

loc_14E77:                              ; CODE XREF: sub_14E52+1Cj
                inc     ah
                cmp     ah, 1
                jbe     short loc_14E73
                mov     ah, 2
                cmp     bp, di
                jb      short loc_14E8E
                mov     di, bp
                mov     bp, si
                sub     bp, di
                mov     word_13D7C, bp

loc_14E8E:                              ; CODE XREF: sub_14E52+30j
                mov     bp, 0

loc_14E91:                              ; CODE XREF: sub_14E52+22j
                loop    loc_14E66
                cmp     di, 0
                jz      short loc_14E99
                dec     di

loc_14E99:                              ; CODE XREF: sub_14E52+44j
                mov     word_13D7E, dx
                mov     word_13D80, di
                retn
sub_14E52       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_14EA2       proc near               ; CODE XREF: sub_14DA4+84p
                mov     si, CurrTrackBufOfs
                add     si, 0Ah
                mov     dx, CurrTrkLngthBytes
                add     dx, si
                add     dx, 40h ; '@'
                mov     bh, 0

loc_14EB4:                              ; CODE XREF: sub_14EA2+20j
                mov     bl, es:[si]
                mov     al, byte_17F79[bx]
                cmp     al, bl
                jnz     short loc_14EC6
                inc     si
                cmp     si, dx
                jb      short loc_14EB4
                stc
                retn
; ---------------------------------------------------------------------------

loc_14EC6:                              ; CODE XREF: sub_14EA2+1Bj
                clc
                retn
sub_14EA2       endp

; ---------------------------------------------------------------------------

loc_14EC8:                              ; CODE XREF: sub_14ECA+8j
                stc
                retn

; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_14ECA       proc near               ; CODE XREF: sub_14B86+117p
                mov     di, 0

loc_14ECD:                              ; CODE XREF: sub_14ECA+11j
                cmp     byte ptr unk_13E38[di], 3
                jnz     short loc_14EC8
                add     di, 4
                cmp     di, word_13CC9
                jb      short loc_14ECD
                mov     si, word_14035
                sub     si, 1Eh
                mov     ax, es:[si]

loc_14EE7:                              ; CODE XREF: sub_14ECA+23j
                sub     si, 2
                cmp     ax, es:[si]
                jz      short loc_14EE7
                sub     si, 0Ch
                mov     ax, es:[si]

loc_14EF5:                              ; CODE XREF: sub_14ECA+31j
                sub     si, 2
                cmp     ax, es:[si]
                jz      short loc_14EF5
                cmp     ah, es:[si+1]
                jnz     short loc_14F08
                dec     si
                mov     ax, es:[si+2]

loc_14F08:                              ; CODE XREF: sub_14ECA+37j
                mov     es:[si], ax
                mov     ax, si
                mov     di, word_13CEE
                mov     si, word ptr unk_1422D[di]
                add     si, 460h
                sub     si, CurrTrkLngthBytes
                clc
                retn
sub_14ECA       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_14F1F       proc near               ; CODE XREF: sub_14761+9Cp
                mov     ax, EndOfCurrTrk
                push    ax
                push    si
                mov     EndOfCurrTrk, si
                add     EndOfCurrTrk, 100h
                sub     si, 5
                cmp     si, word_13CCB
                jnb     short loc_14F3B
                mov     si, word_13CCB

loc_14F3B:                              ; CODE XREF: sub_14F1F+16j
                mov     byte_13CF9, 0Ah

loc_14F40:                              ; CODE XREF: sub_14F1F+3Bj
                mov     cl, 7

loc_14F42:                              ; CODE XREF: sub_14F1F+34j
                call    MFMDecode
                sub     si, 2
                and     dx, 0FFFEh
                cmp     dx, 904Eh
                jz      short loc_14F60
                dec     cl
                jns     short loc_14F42
                inc     si
                dec     byte_13CF9
                jnz     short loc_14F40
                stc
                jmp     short loc_14F93
; ---------------------------------------------------------------------------
                align 2

loc_14F60:                              ; CODE XREF: sub_14F1F+30j
                mov     ch, 7
                sub     ch, cl
                mov     cl, ch
                mov     byte_13CF9, 8
                cmp     KeepTrkLngthFlag, 59h ; 'Y'
                jz      short loc_14F77
                mov     byte_13CF9, 0C8h ; '+'

loc_14F77:                              ; CODE XREF: sub_14F1F+51j
                                        ; sub_14F1F+71j
                mov     ax, 9254h
                shr     ax, cl
                mov     es:[si+1], al
                mov     ax, 5492h
                shr     ax, cl
                mov     es:[si+2], al
                add     si, 2
                dec     byte_13CF9
                jnz     short loc_14F77
                clc

loc_14F93:                              ; CODE XREF: sub_14F1F+3Ej
                pushf
                mov     si, word_13CF4
                sub     si, 8
                mov     cx, 6
                mov     ax, es:[si]

loc_14FA1:                              ; CODE XREF: sub_14F1F+89j
                inc     si
                inc     si
                cmp     ax, es:[si]
                jnz     short loc_14FAD
                loop    loc_14FA1
                jmp     short loc_14FDD
; ---------------------------------------------------------------------------
                db 90h
; ---------------------------------------------------------------------------

loc_14FAD:                              ; CODE XREF: sub_14F1F+87j
                cmp     al, es:[si]
                jnz     short loc_14FB3
                inc     si

loc_14FB3:                              ; CODE XREF: sub_14F1F+91j
                mov     dx, si
                add     si, 2
                mov     ax, es:[si]
                mov     cx, 6

loc_14FBE:                              ; CODE XREF: sub_14F1F+A6j
                inc     si
                inc     si
                cmp     ax, es:[si]
                jnz     short loc_14FDD
                loop    loc_14FBE
                mov     si, dx
                cmp     si, word_13CCB
                jbe     short loc_14FDD
                mov     ax, es:[si-2]
                mov     cx, 4

loc_14FD6:                              ; CODE XREF: sub_14F1F+BCj
                mov     es:[si], ax
                inc     si
                inc     si
                loop    loc_14FD6

loc_14FDD:                              ; CODE XREF: sub_14F1F+8Bj
                                        ; sub_14F1F+A4j sub_14F1F+AEj
                popf
                pop     si
                pop     ax
                mov     EndOfCurrTrk, ax
                retn
sub_14F1F       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_14FE4       proc near               ; CODE XREF: sub_1553C+47p
                mov     KeepTrkLngthFlag, 4Eh ; 'N'
                push    bx
                call    GetTrkDatOfs
                and     byte ptr TrackTypeTable[bx], 0FEh
                pop     bx
                retn
sub_14FE4       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_14FF4       proc near               ; CODE XREF: sub_14B86+18p
                                        ; sub_14B86+208p
                cmp     NK_SwitchUsed, 0
                jz      short locret_15012
                cmp     CurrTrkLngthBytes, 2F00h
                jb      short locret_15012
                mov     KeepTrkLngthFlag, 'Y'
                push    bx
                call    GetTrkDatOfs
                or      TrackTypeTable[bx], 1
                pop     bx

locret_15012:                           ; CODE XREF: sub_14FF4+5j sub_14FF4+Dj
                retn
sub_14FF4       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_15013       proc near               ; CODE XREF: AnalyzeTrack+155p
                                        ; sub_14B86+6Cp sub_14B86+82p
                                        ; sub_14B86+93p sub_14B86+114p
                                        ; sub_14B86+128p
                cmp     NK_SwitchUsed, 0
                jz      short locret_15044
                cmp     CurrTrkLngthBytes, 2F00h
                jb      short locret_15044
                mov     KeepTrkLngthFlag, 'Y'
                push    bx
                call    GetTrkDatOfs
                or      TrackTypeTable[bx], 1
                cmp     DuplicatorReturn, 0
                jnz     short loc_15043
                cmp     word_13D7E, 32h ; '2'
                jnb     short loc_15043
                or      TrackTypeTable[bx], 20h

loc_15043:                              ; CODE XREF: sub_15013+22j
                                        ; sub_15013+29j
                pop     bx

locret_15044:                           ; CODE XREF: sub_15013+5j sub_15013+Dj
                retn
sub_15013       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_15045       proc near               ; CODE XREF: AnalyzeTrack+6Ep
                                        ; AnalyzeTrack+11Dp sub_14B86+17Ap
                                        ; sub_15D77+34p
                mov     word_13CCD, 0FFFEh
                mov     byte_13CF8, 0
                mov     byte_13CF7, 0A1h ; 'í'
                mov     bp, 0
                mov     di, 0
                mov     byte_13CEB, 0
                mov     word_13CEC, 0

loc_15066:                              ; CODE XREF: sub_15045+4Ej
                                        ; sub_15045+D3j
                call    sub_184FC
                jnb     short loc_1506E
                jmp     loc_1511B
; ---------------------------------------------------------------------------

loc_1506E:                              ; CODE XREF: sub_15045+24j
                call    MFMDecode
                mov     byte_13CEB, dl
                call    MFMDecode
                mov     byte_13CF7, dl
                call    MFMDecode
                mov     ch, 0
                mov     ax, si
                sub     ax, 6
                cmp     byte_13CEB, 0C2h ; '-' ; C2h=index mark
                jnz     short loc_15090
                jmp     loc_15112
; ---------------------------------------------------------------------------

loc_15090:                              ; CODE XREF: sub_15045+46j
                cmp     dl, 0FEh ; '¦'  ; FEh=sector ID follows
                jnz     short loc_15066
                mov     word_14035[di], ax
                mov     word ptr unk_14037[di], cx
                mov     ax, si
                sub     ax, word_13CEC
                cmp     ax, si
                jz      short loc_150B7
                mov     dx, si
                add     dx, 12h
                cmp     dx, EndOfCurrTrk
                jnb     short loc_150B7
                cmp     ax, 350h
                jb      short loc_150C8

loc_150B7:                              ; CODE XREF: sub_15045+60j
                                        ; sub_15045+6Bj
                mov     word_13CEC, si
                mov     ds:word_14235[bp], si
                mov     ds:word_14237[bp], cx
                add     bp, 4

loc_150C8:                              ; CODE XREF: sub_15045+70j
                cmp     di, 0
                jnz     short loc_150DD
                call    RdTrkLngthTbl
                add     dx, si
                add     dx, 10h
                mov     word_13CCD, dx
                mov     EndOfCurrTrk, dx

loc_150DD:                              ; CODE XREF: sub_15045+86j
                call    MFMDecode
                mov     byte ptr unk_13E35[di], dl
                inc     di
                call    MFMDecode
                mov     byte ptr unk_13E35[di], dl
                inc     di
                call    MFMDecode
                mov     byte ptr unk_13E35[di], dl
                inc     di
                call    MFMDecode
                cmp     dl, 3
                jb      short loc_15107
                cmp     dl, 9
                ja      short loc_15107
                mov     byte_13CF8, 0FFh

loc_15107:                              ; CODE XREF: sub_15045+B6j
                                        ; sub_15045+BBj
                mov     byte ptr unk_13E35[di], dl
                inc     di
                cmp     di, 200h
                jnb     short loc_1511B

loc_15112:                              ; CODE XREF: sub_15045+48j
                cmp     si, word_13CCD
                jnb     short loc_1511B
                jmp     loc_15066
; ---------------------------------------------------------------------------

loc_1511B:                              ; CODE XREF: sub_15045+26j
                                        ; sub_15045+CBj sub_15045+D1j
                cmp     bp, 8
                jb      short loc_15135
                mov     ax, word ptr ds:unk_14231[bp]
                sub     ax, word_14235
                sub     ax, 10h
                cmp     ax, CurrTrkLngthBytes
                jb      short loc_15135
                sub     bp, 4

loc_15135:                              ; CODE XREF: sub_15045+D9j
                                        ; sub_15045+EBj
                mov     word_13CC9, di
                mov     word_13CEE, bp
                retn
sub_15045       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1513E       proc near               ; CODE XREF: AnalyzeTrack+12Dp
                cmp     word_13CC9, 0
                jz      short locret_15185
                push    ax
                push    bx
                push    cx
                push    dx
                push    es
                push    di
                push    si
                push    ds
                mov     bx, CurrentTrack
                shr     bx, 1
                cmp     byte ptr unk_161CA[bx], 2
                jz      short loc_15161
                cmp     CpyWkBitsFlag, 'Y'
                jnz     short loc_1517D

loc_15161:                              ; CODE XREF: sub_1513E+1Aj
                mov     si, 0

loc_15164:                              ; CODE XREF: sub_1513E+3Dj
                mov     word_13CD5, si
                call    sub_15186
                jnb     short loc_15170
                call    sub_15242

loc_15170:                              ; CODE XREF: sub_1513E+2Dj
                mov     si, word_13CD5
                add     si, 4
                cmp     si, word_13CC9
                jb      short loc_15164

loc_1517D:                              ; CODE XREF: sub_1513E+21j
                pop     ds
                assume ds:nothing
                pop     si
                pop     di
                pop     es
                pop     dx
                pop     cx
                pop     bx
                pop     ax

locret_15185:                           ; CODE XREF: sub_1513E+5j
                retn
sub_1513E       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_15186       proc near               ; CODE XREF: sub_1513E+2Ap
                mov     di, si
                cmp     ds:word_13CC9, 28h ; '('
                jbe     short loc_151AA
                mov     ax, ds:word_13CC9
                dec     ax
                shr     ax, 1
                shl     di, 1
                cmp     si, ax
                jbe     short loc_151AA
                shr     di, 1
                and     ax, 0FCh
                sub     di, 4
                sub     di, ax
                shl     di, 1
                add     di, 4

loc_151AA:                              ; CODE XREF: sub_15186+7j
                                        ; sub_15186+13j
                mov     ds:word_13D0C, di
                mov     al, byte ptr ds:unk_13E35[di]
                mov     ds:Cylinder, al
                mov     al, byte ptr ds:unk_13E36[di]
                mov     ds:CurrentHead, al
                mov     al, byte ptr ds:unk_13E37[di]
                mov     ds:SectorNumber, al
                mov     al, byte ptr ds:unk_13E38[di]
                mov     ds:SectorSize, al
                cmp     al, 6
                jbe     short loc_151D0
                mov     al, 6

loc_151D0:                              ; CODE XREF: sub_15186+46j
                add     si, 4
                mov     cl, al
                mov     ax, 80h ; 'Ç'
                shl     ax, cl
                mov     ds:DMACount, ax
                mov     dx, ds:word_13CF4
                mov     bx, ds:word_14035[di]
                add     di, 4
                cmp     di, ds:word_13CC9
                jb      short loc_151F7
                mov     cx, dx
                add     cx, ds:word_14035
                jmp     short loc_151FB
; ---------------------------------------------------------------------------
                db 90h
; ---------------------------------------------------------------------------

loc_151F7:                              ; CODE XREF: sub_15186+66j
                mov     cx, ds:word_14035[di]

loc_151FB:                              ; CODE XREF: sub_15186+6Ej
                cmp     cx, dx
                jb      short loc_15201
                mov     cx, dx

loc_15201:                              ; CODE XREF: sub_15186+77j
                sub     cx, bx
                sub     di, 4
                sub     cx, 58h ; 'X'
                jns     short loc_1520D

loc_1520B:                              ; CODE XREF: sub_15186+90j
                clc
                retn
; ---------------------------------------------------------------------------

loc_1520D:                              ; CODE XREF: sub_15186+83j
                cmp     cx, ax
                ja      short loc_1521A
                mov     ax, cx
                sub     ax, 8
                js      short loc_1520B
                shr     ax, 1

loc_1521A:                              ; CODE XREF: sub_15186+89j
                mov     ds:word_13CCF, ax
                mov     al, 46h ; 'F'
                mov     bl, byte ptr ds:word_1005C+1
                mov     bh, ds:byte_1005B
                call    sub_17186
                call    sub_1708E
                and     al, 0C0h
                jz      short loc_1523D
                and     ah, 20h
                jz      short loc_1523D
                and     bl, 20h
                jz      short loc_1523D
                stc
                retn
; ---------------------------------------------------------------------------

loc_1523D:                              ; CODE XREF: sub_15186+A9j
                                        ; sub_15186+AEj sub_15186+B3j
                call    sub_1553C
                clc
                retn
sub_15186       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_15242       proc near               ; CODE XREF: sub_1513E+2Fp
                mov     al, 46h ; 'F'
                mov     bl, byte ptr ds:word_1005E+1
                mov     bh, ds:byte_1005B
                call    sub_17186
                call    sub_1708E
                and     al, 0C0h
                jz      short locret_15280
                and     ah, 20h
                jz      short locret_15280
                and     bl, 20h
                jz      short locret_15280
                mov     bp, ds:word_1005C
                mov     bx, ds:word_1005E
                mov     cx, ds:word_13CCF
                mov     es, ds:word_10059

loc_15270:                              ; CODE XREF: sub_15242+39j
                mov     al, es:[bp+0]
                cmp     al, es:[bx]
                jnz     short loc_15281
                inc     bx
                inc     bp
                loop    loc_15270
                jmp     locret_1535F
; ---------------------------------------------------------------------------

locret_15280:                           ; CODE XREF: sub_15242+12j
                                        ; sub_15242+17j sub_15242+1Cj
                                        ; sub_15242+4Fj
                retn
; ---------------------------------------------------------------------------

loc_15281:                              ; CODE XREF: sub_15242+35j
                mov     ds:byte_1008A, 1
                mov     ds:word_13CD1, bp
                mov     ds:word_13CD3, bx
                call    sub_153BC
                jb      short locret_15280
                sub     bx, ds:word_1005E
                shl     bx, 1
                mov     ds:word_10044, bx
                mov     es, ds:TrackBufSeg
                mov     si, ds:word_14035[di]
                add     si, 0Eh
                call    sub_184FC
                call    MFMDecode
                call    MFMDecode
                call    MFMDecode
                mov     ax, ds:word_14039[di]
                sub     ax, 1Ah
                sub     ax, si
                shr     ax, 1
                cmp     ax, ds:word_13CCF
                ja      short loc_152C8
                mov     ds:word_13CCF, ax

loc_152C8:                              ; CODE XREF: sub_15242+81j
                mov     ds:word_13D0A, si
                add     si, ds:word_10044
                mov     dx, ds:word_10044
                shr     dx, 1
                push    es
                mov     es, ds:word_10059
                mov     bx, ds:word_1005E
                add     bx, ds:word_13CCF
                sub     bx, 2
                mov     al, es:[bx]

loc_152E9:                              ; CODE XREF: sub_15242+B1j
                dec     bx
                cmp     bx, ds:word_13CD3
                jbe     short loc_152F5
                cmp     al, es:[bx]
                jz      short loc_152E9

loc_152F5:                              ; CODE XREF: sub_15242+ACj
                sub     bx, ds:word_1005E
                mov     ds:word_13CCD, bx
                pop     es
                mov     bx, ds:word_13CD3
                mov     bp, ds:word_13CD1

loc_15306:                              ; CODE XREF: sub_15242+11Bj
                push    es
                mov     es, ds:word_10059
                mov     al, es:[bp+0]
                cmp     al, es:[bx]
                jz      short loc_15353
                cmp     al, es:[bp+1]
                jnz     short loc_1532E
                cmp     al, es:[bp+2]
                jnz     short loc_1532E

loc_15320:                              ; CODE XREF: sub_15242+E7j
                inc     si
                inc     si
                inc     bx
                inc     bp
                inc     dx
                cmp     al, es:[bp+0]
                jz      short loc_15320
                jmp     short loc_15353
; ---------------------------------------------------------------------------
                align 2

loc_1532E:                              ; CODE XREF: sub_15242+D6j
                                        ; sub_15242+DCj
                pop     es
                push    bx
                mov     bh, 0
                mov     bl, cl
                mov     ah, 0
                mov     di, si
                add     di, ds:CurrTrkLngthBytes
                mov     al, byte ptr ds:unk_153B4[bx]
                and     es:[si], ax
                and     es:[di], ax
                xor     ax, 0FFFFh
                and     es:[si+2], ax
                and     es:[di+2], ax
                pop     bx
                push    es

loc_15353:                              ; CODE XREF: sub_15242+D0j
                                        ; sub_15242+E9j
                pop     es
                assume es:nothing
                inc     si
                inc     si
                inc     bp
                inc     bx
                inc     dx
                cmp     dx, ds:word_13CCD
                jbe     short loc_15306

locret_1535F:                           ; CODE XREF: sub_15242+3Bj
                retn
sub_15242       endp

; ---------------------------------------------------------------------------
                xor     dx, dx
                mov     si, ds:word_13D0A
                shl     ds:word_13CCD, 1

loc_1536A:                              ; CODE XREF: seg001:53B1j
                mov     al, es:[si]
                test    al, 0F0h
                jz      short loc_15381
                test    al, 78h
                jz      short loc_15381
                test    al, 3Ch
                jz      short loc_15381
                test    al, 1Eh
                jz      short loc_15381
                test    al, 0Fh
                jnz     short loc_1538A

loc_15381:                              ; CODE XREF: seg001:536Fj seg001:5373j
                                        ; seg001:5377j seg001:537Bj
                mov     ds:byte_1008A, 1
                mov     byte ptr es:[si], 0

loc_1538A:                              ; CODE XREF: seg001:537Fj
                mov     di, si
                add     di, ds:CurrTrkLngthBytes
                mov     al, es:[di]
                test    al, 0F0h
                jz      short loc_153A7
                test    al, 78h
                jz      short loc_153A7
                test    al, 3Ch
                jz      short loc_153A7
                test    al, 1Eh
                jz      short loc_153A7
                test    al, 0Fh
                jnz     short loc_153AB

loc_153A7:                              ; CODE XREF: seg001:5395j seg001:5399j
                                        ; seg001:539Dj seg001:53A1j
                mov     byte ptr es:[di], 0

loc_153AB:                              ; CODE XREF: seg001:53A5j
                inc     si
                inc     dx
                cmp     dx, ds:word_13CCD
                jbe     short loc_1536A
                retn
; ---------------------------------------------------------------------------
unk_153B4       db    0 ;               ; DATA XREF: sub_149C2+CAr
                                        ; sub_15242+FAr sub_153CE+90r
                                        ; sub_15498+70r
                db  80h ; Ç
                db 0C0h ; +
                db 0E0h ; a
                db 0F0h ; =
                db 0F8h ; °
                db 0FCh ; n
                db 0FEh ; ¦

; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_153BC       proc near               ; CODE XREF: sub_15242+4Cp
                push    bx
                push    di
                push    si
                call    sub_153CE
                jb      short loc_153CA
                call    sub_15486
                jb      short loc_153CA
                clc

loc_153CA:                              ; CODE XREF: sub_153BC+6j sub_153BC+Bj
                pop     si
                pop     di
                pop     bx
                retn
sub_153BC       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_153CE       proc near               ; CODE XREF: sub_153BC+3p
                mov     si, ds:word_1005C
                mov     es, ds:word_10059
                assume es:nothing
                mov     di, 0

loc_153D9:                              ; CODE XREF: sub_153CE+1Aj
                mov     al, byte ptr ds:aMegasoft[di] ; "MegaSoft"
                cmp     al, 0
                jz      short loc_153EC
                cmp     es:[si], al
                jnz     short loc_153EA
                inc     di
                inc     si
                jmp     short loc_153D9
; ---------------------------------------------------------------------------

loc_153EA:                              ; CODE XREF: sub_153CE+16j
                                        ; sub_153CE+75j sub_153CE+88j
                clc
                retn
; ---------------------------------------------------------------------------

loc_153EC:                              ; CODE XREF: sub_153CE+11j
                mov     es, ds:TrackBufSeg
                mov     di, ds:word_13D0C
                mov     si, ds:word_14035[di]
                add     si, 0Eh
                call    sub_184FC
                call    MFMDecode
                call    MFMDecode
                call    MFMDecode
                add     si, 20h ; ' '
                mov     ds:byte_13CF9, 4

loc_1540F:                              ; CODE XREF: sub_153CE+A6j
                mov     bx, 18h

loc_15412:                              ; CODE XREF: sub_153CE+56j
                push    bx
                call    MFMDecode
                pop     bx
                cmp     dx, 904Eh
                jz      short loc_15426
                sub     si, 2
                call    sub_1846D
                dec     bx
                jnz     short loc_15412

loc_15426:                              ; CODE XREF: sub_153CE+4Dj
                mov     bx, 1Eh

loc_15429:                              ; CODE XREF: sub_153CE+73j
                push    bx
                call    MFMDecode
                pop     bx
                cmp     dx, 0FF00h
                jz      short loc_15445
                cmp     dx, 0FFh
                jnz     short loc_15440
                sub     si, 2
                call    sub_1846D

loc_15440:                              ; CODE XREF: sub_153CE+6Aj
                dec     bx
                jnz     short loc_15429
                jmp     short loc_153EA
; ---------------------------------------------------------------------------

loc_15445:                              ; CODE XREF: sub_153CE+64j
                mov     bx, 1Eh

loc_15448:                              ; CODE XREF: sub_153CE+86j
                push    bx
                call    MFMDecode
                pop     bx
                cmp     dx, 0FF00h
                jnz     short loc_15458
                dec     bx
                jnz     short loc_15448
                jmp     short loc_153EA
; ---------------------------------------------------------------------------

loc_15458:                              ; CODE XREF: sub_153CE+83j
                mov     bh, 0
                mov     bl, 7
                sub     bl, cl
                mov     al, byte ptr ds:unk_153B4[bx]
                and     es:[si-2], al
                mov     byte ptr es:[si-1], 0
                xor     al, 0FFh
                and     es:[si], al
                dec     ds:byte_13CF9
                jnz     short loc_1540F
                mov     ds:byte_1008A, 1
                stc
                retn
sub_153CE       endp

; ---------------------------------------------------------------------------
aMegasoft       db 'MegaSoft',0         ; DATA XREF: sub_153CE+Br

; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_15486       proc near               ; CODE XREF: sub_153BC+8p
                push    bp
                mov     bp, 0
                call    sub_15498
                jnb     short loc_15496
                mov     bp, 1
                call    sub_15498
                stc

loc_15496:                              ; CODE XREF: sub_15486+7j
                pop     bp
                retn
sub_15486       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_15498       proc near               ; CODE XREF: sub_15486+4p sub_15486+Cp
                mov     es, ds:TrackBufSeg
                mov     di, ds:word_13D0C
                mov     si, ds:word_14035[di]
                add     si, 0Eh
                call    sub_184FC
                call    MFMDecode
                call    MFMDecode
                call    MFMDecode
                mov     ds:byte_13CF9, 88h ; 'ê'

loc_154B8:                              ; CODE XREF: sub_15498+93j
                                        ; sub_15498+9Aj
                mov     bx, 28h ; '('

loc_154BB:                              ; CODE XREF: sub_15498+2Fj
                push    bx
                call    MFMDecode
                pop     bx
                cmp     dx, 0FF00h
                jz      short loc_154CB
                dec     bx
                jnz     short loc_154BB

loc_154C9:                              ; CODE XREF: sub_15498+44j
                                        ; sub_15498+60j
                clc
                retn
; ---------------------------------------------------------------------------

loc_154CB:                              ; CODE XREF: sub_15498+2Cj
                mov     bx, 28h ; '('

loc_154CE:                              ; CODE XREF: sub_15498+42j
                push    bx
                call    MFMDecode
                pop     bx
                cmp     dx, 0FF00h
                jnz     short loc_154DE
                dec     bx
                jnz     short loc_154CE
                jmp     short loc_154C9
; ---------------------------------------------------------------------------

loc_154DE:                              ; CODE XREF: sub_15498+3Fj
                mov     bx, 1Eh
                sub     si, 2

loc_154E4:                              ; CODE XREF: sub_15498+5Ej
                push    bx
                call    MFMDecode
                pop     bx
                cmp     dl, ds:byte_13CF9
                jz      short loc_154FA
                sub     si, 2
                call    sub_1846D
                dec     bx
                jnz     short loc_154E4
                jmp     short loc_154C9
; ---------------------------------------------------------------------------

loc_154FA:                              ; CODE XREF: sub_15498+55j
                cmp     bp, 0
                jz      short loc_1551A
                sub     si, 2
                mov     bh, 0
                mov     bl, 7
                sub     bl, cl
                mov     al, byte ptr ds:unk_153B4[bx]
                and     es:[si-2], al
                mov     byte ptr es:[si-1], 8
                xor     al, 0FFh
                and     es:[si], al

loc_1551A:                              ; CODE XREF: sub_15498+65j
                cmp     ds:byte_13CF9, 0FEh ; '¦'
                jz      short loc_15534
                add     ds:byte_13CF9, 11h
                cmp     ds:byte_13CF9, 0FFh
                jnz     short loc_154B8
                mov     ds:byte_13CF9, 0FEh ; '¦'
                jmp     short loc_154B8
; ---------------------------------------------------------------------------

loc_15534:                              ; CODE XREF: sub_15498+87j
                mov     ds:byte_1008A, 1
                stc
                retn
sub_15498       endp

; ---------------------------------------------------------------------------

locret_1553B:                           ; CODE XREF: sub_1553C+5j sub_1553C+Cj
                                        ; sub_1553C+13j
                retn

; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1553C       proc near               ; CODE XREF: sub_15186+B7p
                cmp     ds:Cylinder, 27h ; '''
                jb      short locret_1553B
                cmp     ds:SectorNumber, 1
                jnz     short locret_1553B
                cmp     ds:SectorSize, 2
                jnz     short locret_1553B
                mov     es, ds:word_10059
                mov     bp, ds:word_1005C
                mov     bx, offset aBtbfmEsps ; "Btbfm!Esps"
                mov     cx, 80h ; 'Ç'

loc_1555F:                              ; CODE XREF: sub_1553C+39j
                mov     al, [bx]
                cmp     al, 0
                jz      short loc_15578
                dec     al
                cmp     al, es:[bp+0]
                jnz     short loc_15571
                inc     bx
                jmp     short loc_15574
; ---------------------------------------------------------------------------
                db 90h
; ---------------------------------------------------------------------------

loc_15571:                              ; CODE XREF: sub_1553C+2Fj
                mov     bx, offset aBtbfmEsps ; "Btbfm!Esps"

loc_15574:                              ; CODE XREF: sub_1553C+32j
                inc     bp
                loop    loc_1555F
                retn
; ---------------------------------------------------------------------------

loc_15578:                              ; CODE XREF: sub_1553C+27j
                mov     ds:byte_1008A, 1
                mov     ax, ds:word_13CC9
                mov     ds:word_13CD5, ax
                call    sub_14FE4
                mov     ds:SectorNumber, 3
                mov     es, ds:TrackBufSeg
                mov     si, ds:word_14039
                add     si, 2C5h

loc_15597:                              ; CODE XREF: sub_1553C+BEj
                mov     ax, 0C00h
                call    RepMFM
                mov     cx, 3
                mov     ax, 0AA1h
                call    RepMFM_Clk
                mov     ax, 1FEh
                call    RepMFM
                mov     ah, 1
                mov     al, ds:Cylinder
                call    RepMFM
                mov     al, ds:CurrentHead
                call    RepMFM
                mov     al, ds:SectorNumber
                call    RepMFM
                mov     ax, 101h
                call    RepMFM
                call    IDCRC
                mov     ax, 164Eh
                call    RepMFM
                mov     ax, 0B00h
                call    RepMFM
                mov     ax, 0
                mov     cx, 1
                call    RepMFM_Clk
                mov     cx, 3
                mov     ax, 0AA1h
                call    RepMFM_Clk
                mov     ax, 1FBh
                call    RepMFM
                add     si, 268h
                inc     ds:SectorNumber
                cmp     ds:SectorNumber, 0Fh
                jb      short loc_15597
                retn
sub_1553C       endp

; ---------------------------------------------------------------------------
aBtbfmEsps      db 'Btbfm!Esps',0       ; DATA XREF: sub_1553C+1Do
                                        ; sub_1553C+35o

; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; MFM encodes byte AL AH times at ES:SI with normal clock.

RepMFM          proc near               ; CODE XREF: sub_1553C+5Ep
                                        ; sub_1553C+6Dp sub_1553C+75p
                                        ; sub_1553C+7Bp sub_1553C+81p
                                        ; sub_1553C+87p sub_1553C+90p
                                        ; sub_1553C+96p sub_1553C+AEp
                                        ; sub_15662+45p sub_15662+4Bp
                                        ; sub_15662+5Ap sub_15662+62p
                                        ; sub_15662+68p sub_15662+6Dp
                                        ; sub_15662+72p sub_15662+7Bp
                                        ; sub_15662+81p sub_15662+90p
                                        ; sub_15662+A4p sub_15662+AAp
                push    ax

loc_15609:                              ; CODE XREF: RepMFM+8j
                push    ax
                call    Encode_MFM_Normal
                pop     ax
                dec     ah
                jnz     short loc_15609
                pop     ax
                retn
RepMFM          endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; MFM encodes byte AL with clock bits AH CX times
; at ES:SI. Used for making address marks.

RepMFM_Clk      proc near               ; CODE XREF: sub_1553C+67p
                                        ; sub_1553C+9Fp sub_1553C+A8p
                                        ; sub_15662+54p sub_15662+8Ap
                                        ; sub_15662+B3p
                push    cx
                push    ax

loc_15616:                              ; CODE XREF: RepMFM_Clk+9j
                push    cx
                push    ax
                call    Encode_MFM_AM
                pop     ax
                pop     cx
                loop    loc_15616
                pop     ax
                pop     cx
                retn
RepMFM_Clk      endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; Creates sector ID CRC at ES:SI.

IDCRC           proc near               ; CODE XREF: sub_1553C+8Ap
                                        ; sub_15662+75p
                push    es
                push    si
                mov     ds:IDCRC_scratch+0Eh, al ; sector size
                mov     al, ds:Cylinder
                mov     ds:IDCRC_scratch+8, al ; cylinder
                mov     al, ds:CurrentHead
                mov     ds:IDCRC_scratch+0Ah, al ; head
                mov     al, ds:SectorNumber
                mov     ds:IDCRC_scratch+0Ch, al ; sector number
                mov     ax, 10h
                mov     si, offset IDCRC_scratch
                push    cs
                pop     es
                assume es:seg001
                call    CRC
                pop     si
                pop     es
                assume es:nothing
                mov     al, bh
                call    Encode_MFM_Normal
                mov     al, bl
                call    Encode_MFM_Normal
                retn
IDCRC           endp

; ---------------------------------------------------------------------------
IDCRC_scratch   db 0A1h, 0Ah, 0A1h, 0Ah, 0A1h, 0Ah, 0FEh, 0, 0, 0, 0, 0
                                        ; DATA XREF: IDCRC+1Ao IDCRC+8w
                                        ; IDCRC+Ew IDCRC+14w IDCRC+2w
                db 0, 0, 0, 0           ; A sector ID is placed here so a CRC can be generated.
; ---------------------------------------------------------------------------

locret_15661:                           ; CODE XREF: sub_15662+5j
                                        ; sub_15662+19j sub_15662+26j
                retn

; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_15662       proc near               ; CODE XREF: WriteTrack+10Fp
                cmp     ds:F_SwitchUsed, 80h ; 'Ç'
                jnz     short locret_15661
                mov     al, ds:CurrentCylinder
                cmp     ds:EndingCylinder, 2Ah ; '*'
                jnb     short loc_15680
                cmp     al, 27h ; '''
                jz      short loc_1568A
                cmp     al, ds:EndingCylinder
                jnz     short locret_15661
                jmp     short loc_1568A
; ---------------------------------------------------------------------------
                align 2

loc_15680:                              ; CODE XREF: sub_15662+Fj
                cmp     al, 4Fh ; 'O'
                jz      short loc_1568A
                cmp     al, ds:EndingCylinder
                jnz     short locret_15661

loc_1568A:                              ; CODE XREF: sub_15662+13j
                                        ; sub_15662+1Bj sub_15662+20j
                call    sub_1588A
                mov     al, ds:CurrentCylinder
                mov     ds:Cylinder, al
                mov     ds:SectorNumber, 1
                mov     al, ds:CurrentSide
                mov     ds:CurrentHead, al
                mov     es, ds:TrackBufSeg
                xor     si, si
                mov     ax, 7D4Eh
                call    RepMFM
                mov     ax, 0C00h
                call    RepMFM
                mov     cx, 3
                mov     ax, 0AA1h
                call    RepMFM_Clk
                mov     ax, 1FEh
                call    RepMFM
                mov     ah, 1
                mov     al, ds:CurrentCylinder
                call    RepMFM
                mov     al, ds:CurrentSide
                call    RepMFM
                mov     al, 1
                call    RepMFM
                mov     al, 5
                call    RepMFM
                call    IDCRC
                mov     ax, 164Eh
                call    RepMFM
                mov     ax, 0C00h
                call    RepMFM
                mov     cx, 3
                mov     ax, 0AA1h
                call    RepMFM_Clk
                mov     ax, 1FBh
                call    RepMFM
                mov     cx, 1000h

loc_156F8:                              ; CODE XREF: sub_15662+9Fj
                mov     al, cl
                mov     ah, 1
                push    cx
                call    Encode_MFM_Normal
                pop     cx
                loop    loc_156F8
                mov     ax, 155h
                call    RepMFM
                mov     ax, 19Ah
                call    RepMFM
                mov     cx, 0BB8h
                mov     ax, 904Eh
                call    RepMFM_Clk
                cli
                call    ClearTimer0
                call    sub_16BAA
                call    MaskDMA
                call    TrackReadOn
                mov     dh, ds:CurrentSide
                call    SelectHead
                mov     ax, 30D4h
                mov     ds:DMACount, ax
                mov     bx, ds:TrackBufSeg
                mov     ax, ds:TrackBufOfs
                mov     bl, ah
                shr     bh, 1
                shr     bh, 1
                shr     bh, 1
                shr     bh, 1
                mov     al, 4Ah ; 'J'
                call    SetupDMA
                mov     dx, ds:TC_Port_Base

loc_1574C:                              ; CODE XREF: sub_15662+EDj
                in      al, dx
                and     al, 80h
                jnz     short loc_1574C
                jmp     short loc_15754
; ---------------------------------------------------------------------------
                align 2

loc_15754:                              ; CODE XREF: sub_15662+EFj
                                        ; sub_15662+F5j
                in      al, dx
                and     al, 80h
                jz      short loc_15754
                call    sub_168AE
                mov     bl, cl
                mov     bh, 0
                mov     al, byte ptr ds:unk_13D73[bx]
                call    WriteTC_Port4
                mov     al, ds:TC_Port3Byte
                or      al, 5
                call    WriteTC_Port3
                call    UnmaskDMA

loc_15772:                              ; CODE XREF: sub_15662+12Dj
                call    ReadDMAWrdCnt
                mov     cx, bx

loc_15777:                              ; CODE XREF: sub_15662+123j
                call    ReadDMAWrdCnt
                cmp     bx, 1800h
                jbe     short loc_15791
                add     bx, 40h ; '@'
                cmp     bx, cx
                ja      short loc_15777
                mov     al, ds:TC_Port4Byte
                xor     al, 1
                call    WriteTC_Port4
                jmp     short loc_15772
; ---------------------------------------------------------------------------

loc_15791:                              ; CODE XREF: sub_15662+11Cj
                mov     al, ds:TC_Port4Byte
                or      al, 1

loc_15796:                              ; CODE XREF: sub_15662+151j
                call    WriteTC_Port4
                call    ReadDMAWrdCnt
                mov     cx, bx

loc_1579E:                              ; CODE XREF: sub_15662+14Aj
                call    ReadDMAWrdCnt
                cmp     bx, 1000h
                jbe     short loc_157B5
                add     bx, 40h ; '@'
                cmp     bx, cx
                ja      short loc_1579E
                mov     al, ds:TC_Port4Byte
                xor     al, 3
                jmp     short loc_15796
; ---------------------------------------------------------------------------

loc_157B5:                              ; CODE XREF: sub_15662+143j
                mov     al, ds:TC_Port4Byte
                test    al, 1
                jz      short loc_157BE
                xor     al, 3

loc_157BE:                              ; CODE XREF: sub_15662+158j
                                        ; sub_15662+179j
                call    WriteTC_Port4
                call    ReadDMAWrdCnt
                mov     cx, bx

loc_157C6:                              ; CODE XREF: sub_15662+172j
                call    ReadDMAWrdCnt
                cmp     bx, 800h
                jbe     short loc_157DD
                add     bx, 40h ; '@'
                cmp     bx, cx
                ja      short loc_157C6
                mov     al, ds:TC_Port4Byte
                xor     al, 1
                jmp     short loc_157BE
; ---------------------------------------------------------------------------

loc_157DD:                              ; CODE XREF: sub_15662+16Bj
                mov     al, ds:TC_Port4Byte
                or      al, 1

loc_157E2:                              ; CODE XREF: sub_15662+1A1j
                call    WriteTC_Port4
                call    ReadDMAWrdCnt
                mov     cx, bx

loc_157EA:                              ; CODE XREF: sub_15662+19Aj
                call    ReadDMAWrdCnt
                cmp     bx, 0FFFFh
                jz      short loc_15805
                cmp     bx, 0
                jz      short loc_15805
                add     bx, 40h ; '@'
                cmp     bx, cx
                ja      short loc_157EA
                mov     al, ds:TC_Port4Byte
                xor     al, 7
                jmp     short loc_157E2
; ---------------------------------------------------------------------------

loc_15805:                              ; CODE XREF: sub_15662+18Ej
                                        ; sub_15662+193j
                call    WaitForDMA
                mov     al, ds:TC_Port3Byte
                and     al, 0F8h
                call    WriteTC_Port3
                call    MaskDMA
                sti
                mov     dh, 80h ; 'Ç'
                call    SelectHead
                call    TrackReadOff
                call    sub_16877
                push    es
                xor     ax, ax
                mov     es, ax
                assume es:nothing
                mov     bx, 78h ; 'x'
                les     bx, es:[bx]
                assume es:nothing
                mov     al, es:[bx+3]
                mov     byte ptr es:[bx+3], 5
                push    ax
                push    bx
                push    es
                mov     bx, 5

loc_15839:                              ; CODE XREF: sub_15662+213j
                mov     ax, 401h
                mov     ch, ds:CurrentCylinder
                mov     cl, 1
                mov     dh, ds:CurrentSide
                mov     dl, ds:CurrentDrive
                int     13h             ; DISK - VERIFY SECTORS
                                        ; AL = number of sectors to verify, CH = track, CL = sector
                                        ; DH = head, DL = drive
                                        ; Return: CF set on error, AH = status
                                        ; AL = number of sectors verified
                jnb     short loc_15878
                cmp     ah, 6
                jz      short loc_15858
                test    ah, 80h
                jz      short loc_1585F

loc_15858:                              ; CODE XREF: sub_15662+1EFj
                mov     ax, 401h
                int     13h             ; DISK - VERIFY SECTORS
                                        ; AL = number of sectors to verify, CH = track, CL = sector
                                        ; DH = head, DL = drive
                                        ; Return: CF set on error, AH = status
                                        ; AL = number of sectors verified
                jnb     short loc_15878

loc_1585F:                              ; CODE XREF: sub_15662+1F4j
                test    ah, 0E0h
                jnz     short loc_1586C
                cmp     bx, 2
                jbe     short loc_1586C
                mov     bx, 2

loc_1586C:                              ; CODE XREF: sub_15662+200j
                                        ; sub_15662+205j
                mov     ah, 0
                mov     dl, ds:CurrentDrive
                int     13h             ; DISK - RESET DISK SYSTEM
                                        ; DL = drive (if bit 7 is set both hard disks and floppy disks reset)
                dec     bx
                jnz     short loc_15839
                stc

loc_15878:                              ; CODE XREF: sub_15662+1EAj
                                        ; sub_15662+1FBj
                pop     es
                pop     bx
                pop     ax
                mov     es:[bx+3], al
                mov     al, 0
                jnb     short loc_15885
                mov     al, 0FFh

loc_15885:                              ; CODE XREF: sub_15662+21Fj
                mov     ds:F_SwitchUsed, al
                pop     es
                retn
sub_15662       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1588A       proc near               ; CODE XREF: sub_15662+28p
                pushf
                cli
                call    ClearTimer0
                mov     cx, 4E20h

loc_15892:                              ; CODE XREF: sub_1588A+3Cj
                mov     al, 6           ; Latch timer 0 count.
                                        ; Controller ignores lower nibble this command,
                                        ; unknown why 06h used rather than 0h.
                out     43h, al         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                mov     bl, al
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                mov     bh, al
                mov     al, 6           ; Latch timer 0 count.
                                        ; Controller ignores lower nibble this command,
                                        ; unknown why 06h used rather than 0h.
                out     43h, al         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                mov     ah, al
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                xchg    ah, al
                sub     ax, bx
                cmp     ah, 0
                jnz     short loc_158C6
                cmp     al, 40h ; '@'
                ja      short loc_158C6
                mov     ds:byte_13D1C, 0FFh
                popf
                retn
; ---------------------------------------------------------------------------

loc_158C6:                              ; CODE XREF: sub_1588A+2Fj
                                        ; sub_1588A+33j
                loop    loc_15892
                popf
                retn
sub_1588A       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


WriteTrack      proc near               ; CODE XREF: ReadWrite+331p
                call    SetDmaCount
                call    GetTrkDatOfs
                mov     ds:CurrentTrack, bx
                mov     ax, ds:TrackTypeTable[bx]
                mov     ds:DiskType, ah
                mov     bl, byte ptr ds:TrackTypeTable[bx]
                test    bl, 80h
                jz      short loc_158EA
                mov     ds:KeepTrkLngthFlag, 'N'

loc_158EA:                              ; CODE XREF: WriteTrack+19j
                call    sub_15D77
                cmp     ds:word_1006A, 8
                jb      short loc_15903
                mov     ax, ds:CurrTrkLngthBytes
                mov     dx, 8
                mul     dx
                mov     ds:TrackLengthBits, ax
                mov     ds:TrkLnBitsHiByte, dx

loc_15903:                              ; CODE XREF: WriteTrack+28j
                mov     bx, ds:CurrentTrack
                mov     ax, ds:TrackSkewTbl[bx]
                cmp     ds:KeepTrkLngthFlag, 'Y'
                jz      short $+2
                mov     bl, ds:CurrentDrive
                mov     bh, 0
                shl     bx, 1
                mov     dx, word ptr ds:stru_15F64.Drive0[bx]
                mul     dx
                mov     al, ah
                mov     ah, dl
                mov     dl, dh
                mov     dh, 0
                shr     dx, 1
                rcr     ax, 1
                shr     dx, 1
                rcr     ax, 1
                mov     ds:TrackSkewDly1, dx
                mov     ds:word_10072, ax
                mov     ds:trackSkewDly2, dx
                mov     ds:word_13D18, ax
                jmp     short loc_159A7
; ---------------------------------------------------------------------------
                db  90h ; É
; ---------------------------------------------------------------------------
                call    RdTrkLngthTbl
                push    dx
                mov     bl, ds:CurrentDrive
                mov     bh, 0
                shl     bx, 1
                shl     bx, 1
                mov     dx, ds:word_15F6E[bx]
                mov     cx, ds:word_15F6C[bx]
                shr     dx, 1
                rcr     cx, 1
                shr     dx, 1
                rcr     cx, 1
                shr     dx, 1
                rcr     cx, 1
                mul     cx
                pop     cx
                div     cx
                xor     dx, dx
                shl     ax, 1
                rcl     dx, 1
                shl     ax, 1
                rcl     dx, 1
                shl     ax, 1
                rcl     dx, 1
                mov     ds:TrackSkewDly1, dx
                mov     ds:word_10072, ax
                push    ax
                push    dx
                push    cx
                mov     al, ah
                mov     ah, dl
                mov     dl, dh
                mov     dh, 0
                mov     cx, 2
                sub     ds:word_10072, ax
                sbb     ds:TrackSkewDly1, dx
                mov     cx, 1

loc_15996:                              ; CODE XREF: WriteTrack+D0j
                shl     ax, 1
                rcl     dx, 1
                loop    loc_15996
                sub     ds:word_10072, ax
                sbb     ds:TrackSkewDly1, dx
                pop     cx
                pop     dx
                pop     ax

loc_159A7:                              ; CODE XREF: WriteTrack+74j
                mov     bl, ds:CurrentDrive
                mov     bh, 0
                shl     bx, 1
                shl     bx, 1
                add     ax, 1000h
                adc     dx, 0
                sub     ax, ds:word_15F6C[bx]
                sbb     dx, ds:word_15F6E[bx]
                jb      short loc_159D9
                mov     ds:TrackSkewDly1, 0
                mov     ds:word_10072, 0Ah
                mov     ds:trackSkewDly2, 0
                mov     ds:word_13D18, 0Ah

loc_159D9:                              ; CODE XREF: WriteTrack+F5j
                call    sub_15662
                call    sub_16937
                retn
WriteTrack      endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_159E0       proc near               ; CODE XREF: AnalyzeTrack+124p
                cmp     ds:KeepTrkLngthFlag, 59h ; 'Y'
                jnz     short loc_159EC
                mov     ds:byte_13D11, 0FFh

loc_159EC:                              ; CODE XREF: sub_159E0+5j
                call    GetTrkDatOfs
                mov     cl, 4
                shl     bx, cl
                mov     bp, bx
                cmp     si, ds:CurrTrkLngthBytes
                jb      short loc_159FF
                sub     si, ds:CurrTrkLngthBytes

loc_159FF:                              ; CODE XREF: sub_159E0+19j
                mov     ds:word_13D7A, si
                cmp     ds:word_13CEE, 0Ch
                jnb     short loc_15A31
                mov     bx, ds:CurrTrkLngthBytes
                shr     bx, 1
                shr     bx, 1
                mov     ax, ds:CurrTrackBufOfs
                add     ax, bx
                mov     ds:word_14235, ax
                add     ax, bx
                mov     ds:word_14239, ax
                mov     ax, ds:CurrTrackBufOfs
                add     ax, bx
                add     ax, ds:CurrTrkLngthBytes
                mov     ds:word_1423D, ax
                mov     ds:word_13CEE, 0Ch

loc_15A31:                              ; CODE XREF: sub_159E0+28j
                cmp     ds:byte_13D1C, 0
                jz      short loc_15A3E
                call    sub_15D16
                jmp     short loc_15A48
; ---------------------------------------------------------------------------
                align 2

loc_15A3E:                              ; CODE XREF: sub_159E0+56j
                mov     ds:byte_13D79, 0

loc_15A43:                              ; CODE XREF: sub_159E0+74j
                push    si
                call    sub_15A5E
                pop     si

loc_15A48:                              ; CODE XREF: sub_159E0+5Bj
                mov     ax, ds:word_10072
                inc     ds:byte_13D79
                cmp     ds:byte_13D79, 1
                jb      short loc_15A43
                call    GetTrkDatOfs
                mov     ds:TrackSkewTbl[bx], ax
                retn
sub_159E0       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_15A5E       proc near               ; CODE XREF: sub_159E0+64p
                mov     ds:byte_13D12, 0
                mov     ds:word_10072, 0
                mov     ax, ds:TrackBufSeg
                mov     al, byte ptr ds:TrackBufOfs+1
                mov     bx, ax
                shr     bh, 1
                shr     bh, 1
                shr     bh, 1
                shr     bh, 1
                mov     ds:word_13CDA, bx
                mov     ds:word_13CD8, ax
                call    SetDmaCount
                shl     ax, 1
                mov     ds:DMACount, ax
                call    TrackReadOn
                cli
                call    ClearTimer0
                call    SetReadspeed
                mov     dh, ds:CurrentSide
                call    SelectHead
                mov     bx, ds:word_13CDA
                mov     ax, ds:word_13CD8
                mov     al, 42h ; 'B'
                call    SetupDMA
                mov     dx, ds:TC_Port_Base
                mov     bl, ds:TC_Port3Byte
                or      bl, 3

loc_15AB0:                              ; CODE XREF: sub_15A5E+55j
                in      al, dx
                and     al, 80h
                jnz     short loc_15AB0
                jmp     short $+2

loc_15AB7:                              ; CODE XREF: sub_15A5E+5Cj
                in      al, dx
                and     al, 80h
                jz      short loc_15AB7
                mov     al, bl
                mov     ds:TC_Port3Byte, al
                add     dx, 3
                out     dx, al
                sub     dx, 3

loc_15AC8:                              ; CODE XREF: sub_15A5E+91j
                mov     al, 6           ; Latch timer 0 count.
                                        ; Controller ignores lower nibble this command,
                                        ; unknown why 06h used rather than 0h.
                out     43h, al         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                mov     cl, al
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                mov     ch, al
                mov     al, 6           ; Latch timer 0 count.
                                        ; Controller ignores lower nibble this command,
                                        ; unknown why 06h used rather than 0h.
                out     43h, al         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                mov     ah, al
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                xchg    ah, al
                sub     ax, cx
                cmp     ah, 0
                jz      short loc_15AC8
                neg     cx
                mov     ds:word_13D0E, cx
                mov     al, cs:DMA_Channel
                out     0Ah, al         ; DMA controller, 8237A-5.
                                        ; single mask bit register
                                        ; 0-1: select channel (00=0; 01=1; 10=2; 11=3)
                                        ; 2: 1=set mask for channel; 0=clear mask (enable)
                mov     di, 0

loc_15B00:                              ; CODE XREF: sub_15A5E+27Cj
                mov     dx, ds:DMACurrAddrPort
                mov     cx, ds:word_14235[di]

loc_15B08:                              ; CODE XREF: sub_15A5E+BDj
                in      al, dx
                jmp     short $+2
                mov     bl, al
                in      al, dx
                mov     bh, al
                cmp     bl, 0F8h ; '°'
                jnb     short loc_15B49

loc_15B15:                              ; CODE XREF: sub_15A5E+F5j
                                        ; sub_15A5E+F9j
                cmp     bx, si
                jnb     short loc_15B59

loc_15B19:                              ; CODE XREF: sub_15A5E+198j
                cmp     bx, cx
                jb      short loc_15B08

loc_15B1D:                              ; CODE XREF: sub_15A5E+E6j
                mov     al, 6           ; Latch timer 0 count.
                                        ; Controller ignores lower nibble this command,
                                        ; unknown why 06h used rather than 0h.
                out     43h, al         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                mov     dl, al
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                mov     dh, al
                mov     al, 6           ; Latch timer 0 count.
                                        ; Controller ignores lower nibble this command,
                                        ; unknown why 06h used rather than 0h.
                out     43h, al         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                mov     ah, al
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                xchg    ah, al
                sub     ax, dx
                cmp     ah, 0
                jz      short loc_15B1D
                jmp     loc_15BF9
; ---------------------------------------------------------------------------

loc_15B49:                              ; CODE XREF: sub_15A5E+B5j
                in      al, dx
                jmp     short $+2
                mov     ah, al
                in      al, dx
                xchg    ah, al
                cmp     ax, bx
                jnb     short loc_15B15
                dec     bh
                jmp     short loc_15B15
; ---------------------------------------------------------------------------

loc_15B59:                              ; CODE XREF: sub_15A5E+B9j
                push    bx

loc_15B5A:                              ; CODE XREF: sub_15A5E+123j
                mov     al, 6           ; Latch timer 0 count.
                                        ; Controller ignores lower nibble this command,
                                        ; unknown why 06h used rather than 0h.
                out     43h, al         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                mov     bl, al
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                mov     bh, al
                mov     al, 6           ; Latch timer 0 count.
                                        ; Controller ignores lower nibble this command,
                                        ; unknown why 06h used rather than 0h.
                out     43h, al         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                mov     ah, al
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                xchg    ah, al
                sub     ax, bx
                cmp     ah, 0
                jz      short loc_15B5A
                neg     bx
                mov     ax, bx
                sub     ax, ds:word_13D0E
                pop     bx
                mov     ds:byte_13D12, 1
                push    bx
                push    cx
                push    dx
                mov     cx, ax
                mov     ax, si
                mov     dx, ds:word_13D71
                mul     dx
                push    cx
                sub     cx, ax
                jnb     short loc_15BA5
                neg     cx

loc_15BA5:                              ; CODE XREF: sub_15A5E+143j
                cmp     cx, 8000h
                jb      short loc_15BB4
                dec     dx
                cmp     ax, 8000h
                jb      short loc_15BB4
                add     dx, 2

loc_15BB4:                              ; CODE XREF: sub_15A5E+14Bj
                                        ; sub_15A5E+151j
                pop     ax
                push    dx
                push    ax
                sub     bx, si
                mov     ax, ds:word_13D71
                mul     bx
                mov     bx, ax
                pop     ax
                pop     dx
                sub     ax, bx
                sbb     dx, 0
                mov     dh, dl
                mov     dl, ah
                mov     ah, al
                mov     al, 0
                shl     ax, 1
                rcl     dx, 1
                shl     ax, 1
                rcl     dx, 1
                mov     bl, ds:CurrentDrive
                mov     bh, 0
                shl     bx, 1
                mov     cx, word ptr ds:stru_15F64.Drive0[bx]
                cmp     cx, dx
                ja      short loc_15BEA
                jmp     loc_15C7B
; ---------------------------------------------------------------------------

loc_15BEA:                              ; CODE XREF: sub_15A5E+187j
                div     cx
                add     ds:word_10072, ax
                pop     dx
                pop     cx
                pop     bx
                mov     si, 0FFFFh
                jmp     loc_15B19
; ---------------------------------------------------------------------------

loc_15BF9:                              ; CODE XREF: sub_15A5E+E8j
                neg     dx
                mov     ax, dx
                sub     ax, ds:word_13D0E
                mov     ds:word_13D0E, dx
                add     ax, 1
                mov     cx, ax
                mov     ax, ds:word_14235[di]
                cmp     di, 0
                jz      short loc_15C17
                sub     ax, word ptr ds:unk_14231[di]

loc_15C17:                              ; CODE XREF: sub_15A5E+1B3j
                mov     ds:word_13CCF, ax
                mov     dx, ds:word_13D71
                mul     dx
                push    cx
                sub     cx, ax
                jnb     short loc_15C27
                neg     cx

loc_15C27:                              ; CODE XREF: sub_15A5E+1C5j
                cmp     cx, 8000h
                jb      short loc_15C36
                dec     dx
                cmp     ax, 8000h
                jb      short loc_15C36
                add     dx, 2

loc_15C36:                              ; CODE XREF: sub_15A5E+1CDj
                                        ; sub_15A5E+1D3j
                pop     ax
                push    dx
                push    ax
                sub     bx, ds:word_14235[di]
                cmp     bx, 1
                jbe     short loc_15C4A
                dec     bx
                mov     ax, ds:word_13D71
                mul     bx
                mov     bx, ax

loc_15C4A:                              ; CODE XREF: sub_15A5E+1E2j
                pop     ax
                pop     dx
                sub     ax, bx
                sbb     dx, 0
                push    ax
                push    dx
                mov     bx, ds:word_13CCF
                div     bx
                mov     dx, ds:word_13D71
                shr     dx, 1
                shr     dx, 1
                add     dx, ds:word_13D71
                cmp     ax, dx
                ja      short loc_15C79
                mov     dx, ds:word_13D71
                mov     bx, dx
                shr     bx, 1
                shr     bx, 1
                sub     dx, bx
                cmp     ax, dx
                ja      short loc_15C83

loc_15C79:                              ; CODE XREF: sub_15A5E+209j
                pop     dx
                pop     ax

loc_15C7B:                              ; CODE XREF: sub_15A5E+189j
                                        ; sub_15A5E+245j
                mov     ds:byte_13D1C, 0FFh
                jmp     short loc_15CDD
; ---------------------------------------------------------------------------
                db 90h
; ---------------------------------------------------------------------------

loc_15C83:                              ; CODE XREF: sub_15A5E+219j
                pop     dx
                pop     ax
                mov     dh, dl
                mov     dl, ah
                mov     ah, al
                mov     al, 0
                shl     ax, 1
                rcl     dx, 1
                shl     ax, 1
                rcl     dx, 1
                mov     bl, ds:CurrentDrive
                mov     bh, 0
                shl     bx, 1
                mov     cx, word ptr ds:stru_15F64.Drive0[bx]
                cmp     cx, dx
                jbe     short loc_15C7B
                div     cx
                shr     di, 1
                cmp     ds:byte_13D79, 0
                jz      short loc_15CBF
                mov     cx, 0
                add     ax, word ptr ds:TrackDataBuffer[bp+di]
                adc     cx, 0
                shr     cx, 1
                rcr     ax, 1

loc_15CBF:                              ; CODE XREF: sub_15A5E+250j
                mov     word ptr ds:TrackDataBuffer[bp+di], ax
                shl     di, 1
                cmp     ds:byte_13D12, 0
                jnz     short loc_15CD1
                add     ds:word_10072, ax

loc_15CD1:                              ; CODE XREF: sub_15A5E+26Dj
                add     di, 4
                cmp     di, ds:word_13CEE
                jnb     short loc_15CDD
                jmp     loc_15B00
; ---------------------------------------------------------------------------

loc_15CDD:                              ; CODE XREF: sub_15A5E+222j
                                        ; sub_15A5E+27Aj
                call    sub_173FD
                call    MaskDMA
                mov     al, ds:TC_Port3Byte
                and     al, 0F8h
                call    WriteTC_Port3
                sti
                mov     al, 43h ; 'C'
                mov     dh, 80h ; 'Ç'
                call    SelectHead
                jnb     short loc_15D0B
                mov     al, ds:CurrentCylinder
                push    ax
                mov     al, ds:CurrentDrive
                call    sub_18321
                pop     ax
                mov     ds:CurrentCylinder, al
                call    sub_18313
                mov     ds:byte_1007D, 0FFh

loc_15D0B:                              ; CODE XREF: sub_15A5E+295j
                call    TrackReadOff
                cmp     ds:byte_13D1C, 0
                jnz     short sub_15D16
                retn
sub_15A5E       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_15D16       proc near               ; CODE XREF: sub_159E0+58p
                                        ; sub_15A5E+2B5j
                mov     ax, ds:word_13D7A
                call    sub_15D46
                mov     ds:word_10072, ax
                mov     di, 0
                mov     ax, ds:word_14235
                jmp     short loc_15D30
; ---------------------------------------------------------------------------
                align 2

loc_15D28:                              ; CODE XREF: sub_15D16+2Dj
                mov     ax, ds:word_14235[di]
                sub     ax, word ptr ds:unk_14231[di]

loc_15D30:                              ; CODE XREF: sub_15D16+Fj
                call    sub_15D46
                shr     di, 1
                mov     word ptr ds:TrackDataBuffer[bp+di], ax
                shl     di, 1
                add     di, 4
                cmp     di, ds:word_13CEE
                jb      short loc_15D28
                retn
sub_15D16       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_15D46       proc near               ; CODE XREF: sub_15D16+3p
                                        ; sub_15D16+1Ap
                mov     bx, 98BAh
                mul     bx
                mov     bx, ds:CurrTrkLngthBytes
                div     bx
                retn
sub_15D46       endp

; ---------------------------------------------------------------------------
                mov     bx, ds:word_13D71
                mul     bx
                mov     dh, dl
                mov     dl, ah
                mov     ah, al
                mov     al, 0
                shl     ax, 1
                rcl     dx, 1
                shl     ax, 1
                rcl     dx, 1
                mov     bl, ds:CurrentDrive
                mov     bh, 0
                shl     bx, 1
                mov     cx, word ptr ds:stru_15F64.Drive0[bx]
                div     cx
                retn

; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_15D77       proc near               ; CODE XREF: WriteTrack+20p
                call    RdTrkLngthTbl
                mov     ds:CurrTrkLngthBytes, dx
                mov     ax, dx
                mov     dx, 8
                mul     dx
                mov     ds:TrackLengthBits, ax
                mov     ds:TrkLnBitsHiByte, dx
                cmp     ds:KeepTrkLngthFlag, 'Y'
                jz      short loc_15D9A
                mov     ds:word_14435, 0FFFEh
                retn
; ---------------------------------------------------------------------------

loc_15D9A:                              ; CODE XREF: sub_15D77+1Aj
                call    sub_1AC25
                mov     ds:CurrTrackBufOfs, si
                mov     dx, ds:CurrTrkLngthBytes
                add     dx, si
                mov     ds:EndOfCurrTrk, dx
                call    sub_15045
                cmp     ds:word_13CEE, 0Ch
                jnb     short loc_15E0B
                mov     bx, ds:CurrTrkLngthBytes
                shr     bx, 1
                shr     bx, 1
                mov     ax, ds:CurrTrackBufOfs
                add     ax, bx
                mov     ds:word_14235, ax
                add     ax, bx
                mov     ds:word_14239, ax
                mov     dx, ds:CurrTrkLngthBytes
                add     dx, ds:word_14235
                mov     ds:word_1423D, dx
                mov     ds:word_13CEE, 0Ch
                call    GetTrkDatOfs
                mov     cl, 4
                shl     bx, cl
                mov     bp, bx
                mov     cx, 31Eh
                mov     bx, 100h
                mov     ax, ds:word_14239
                sub     ax, ds:word_14235
                mul     cx
                div     bx
                mov     word ptr ds:(TrackDataBuffer+2)[bp], ax
                mov     ax, ds:word_1423D
                sub     ax, ds:word_14239
                mul     cx
                div     bx
                mov     word ptr ds:(TrackDataBuffer+4)[bp], ax

loc_15E0B:                              ; CODE XREF: sub_15D77+3Cj
                mov     di, 4

loc_15E0E:                              ; CODE XREF: sub_15D77+14Fj
                shr     di, 1
                call    GetTrkDatOfs
                mov     cl, 4
                shl     bx, cl
                mov     bp, bx
                mov     bl, ds:CurrentDrive
                mov     bh, 0
                shl     bx, 1
                mov     cx, word ptr ds:stru_15F64.Drive0[bx]
                mov     ax, word ptr ds:TrackDataBuffer[bp+di]
                mul     cx
                shl     di, 1
                mov     cx, ds:word_14235[di]
                sub     cx, word ptr ds:unk_14231[di]
                cmp     cx, dx
                ja      short loc_15E3D
                jmp     loc_15EC9
; ---------------------------------------------------------------------------

loc_15E3D:                              ; CODE XREF: sub_15D77+C1j
                mov     ds:word_13CCF, cx
                div     cx
                mov     bx, 2
                cmp     ax, ds:word_13D9D
                ja      short loc_15E66

loc_15E4C:                              ; CODE XREF: sub_15D77+E3j
                cmp     ax, ds:word_13D9D[bx]
                ja      short loc_15E66
                add     bx, 2
                cmp     ds:word_13D9D[bx], 0
                jnz     short loc_15E4C
                sub     bx, 2
                mov     ax, ds:word_13D9D[bx]
                add     ax, 2

loc_15E66:                              ; CODE XREF: sub_15D77+D3j
                                        ; sub_15D77+D9j
                shr     di, 1
                mov     cx, word ptr ds:unk_13DE1[bx]
                call    sub_15F0E
                mov     byte ptr ds:unk_14533[di], cl
                mov     cx, word ptr ds:unk_13DE3[bx]
                call    sub_15F0E
                mov     byte ptr ds:unk_14534[di], cl
                shl     di, 1
                mov     cx, ds:word_13D9B[bx]
                mov     bx, ds:word_13D9D[bx]
                sub     ax, bx
                sub     cx, bx
                mov     bx, ds:word_13CCF
                mul     bx
                shl     ax, 1
                rcl     dx, 1
                shl     ax, 1
                rcl     dx, 1
                mov     cx, 65Dh
                div     cx
                cmp     ax, 0Ah
                jbe     short loc_15EA7
                sub     ax, 0Ah

loc_15EA7:                              ; CODE XREF: sub_15D77+12Bj
                mov     cx, word ptr ds:unk_14231[di]
                cmp     cx, 1Ah
                jb      short loc_15EB3
                sub     cx, 1Ah

loc_15EB3:                              ; CODE XREF: sub_15D77+137j
                mov     word ptr ds:unk_14431[di], cx
                add     cx, ax
                mov     word ptr ds:unk_14433[di], cx
                add     di, 4
                cmp     di, ds:word_13CEE
                jnb     short loc_15EC9
                jmp     loc_15E0E
; ---------------------------------------------------------------------------

loc_15EC9:                              ; CODE XREF: sub_15D77+C3j
                                        ; sub_15D77+14Dj
                mov     word ptr ds:unk_14431[di], 0FFFEh
                mov     di, ds:word_13CEE
                mov     ax, word ptr ds:unk_14231[di]
                mov     cx, word ptr ds:unk_14233[di]
                mov     bx, ds:word_14237
                sub     ax, ds:word_14235
                mov     dx, ax
                sub     dx, ds:CurrTrkLngthBytes
                cmp     dx, 3
                jbe     short loc_15EFA
                cmp     dx, 0FFFDh
                jnb     short loc_15EFA
                mov     ax, ds:CurrTrkLngthBytes
                xor     bx, bx
                xor     cx, cx

loc_15EFA:                              ; CODE XREF: sub_15D77+175j
                                        ; sub_15D77+17Aj
                mov     dx, 8
                mul     dx
                add     ax, bx
                sub     ax, cx
                sbb     dx, 0
                mov     ds:TrackLengthBits, ax
                mov     ds:TrkLnBitsHiByte, dx
                retn
sub_15D77       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_15F0E       proc near               ; CODE XREF: sub_15D77+F5p
                                        ; sub_15D77+100p
                push    ax
                push    bx
                mov     ax, 101h
                sub     ax, cx
                mov     bl, ds:DiskType
                mov     bh, 0
                cmp     bl, 0FFh
                jnz     short loc_15F22
                mov     bl, 7

loc_15F22:                              ; CODE XREF: sub_15F0E+10j
                and     bl, 7Fh
                mov     bl, byte ptr ds:unk_13D94[bx]
                mul     bl
                mov     bl, 64h ; 'd'
                div     bl
                test    ah, 80h
                jz      short loc_15F36
                inc     al

loc_15F36:                              ; CODE XREF: sub_15F0E+24j
                mov     ah, 0
                mov     cx, 101h
                sub     cx, ax
                pop     bx
                pop     ax
                retn
sub_15F0E       endp

; ---------------------------------------------------------------------------
TC_Port_Base    dw 268h                 ; DATA XREF: GetCmdLnArgs+144w
                                        ; DisplayDMA_Port+20r sub_15662+E6r
                                        ; sub_15A5E+47r GetTC_Port_DMA+Ar
                                        ; GetTC_Port_DMA+69w sub_16B6Ew
                                        ; sub_16B6E+6r sub_16C65+Er
                                        ; sub_16C65+1Er sub_16C65+46r
                                        ; sub_174FB+19r sub_18715+2Ar
                                        ; sub_18A07+BCr sub_18A07+2FEr
                                        ; sub_19089+34r ReadTrack+36r
                                        ; ReadTrack+4Dr
                                        ; This is the base port address where the TC board is located
TC_Port0        dw 0                    ; DATA XREF: GetTC_Port_DMA+6Dw
TC_Port1        dw 0                    ; DATA XREF: GetTC_Port_DMA+72w
                                        ; WriteTC_Port1r
TC_Port2        dw 0                    ; DATA XREF: GetTC_Port_DMA+77w
                                        ; seg001:6C2Er
TC_Port3        dw 0                    ; DATA XREF: GetTC_Port_DMA+7Cw
                                        ; WriteTC_Port3r TrackReadOn+1Ar
                                        ; sub_18A07+2C1r
TC_Port4        dw 0                    ; DATA XREF: SetReadspeed+1Fr
                                        ; GetTC_Port_DMA+81w WriteTC_Port4r
TC_Port5        dw 0                    ; DATA XREF: SetReadspeed+18r
                                        ; GetTC_Port_DMA+86w
TC_Port6        dw 0                    ; DATA XREF: GetTC_Port_DMA+8Bw
TC_Port7        dw 0                    ; DATA XREF: GetTC_Port_DMA+90w
                                        ; sub_16C3Ar
TC_Port3Byte    db 0                    ; DATA XREF: sub_15662+105r
                                        ; sub_15662+1A6r sub_15A5E+4Br
                                        ; sub_15A5E+60w sub_15A5E+285r
                                        ; WriteTC_Port3+5w TrackReadOn+1Er
                                        ; sub_18715+179r sub_18715+17Ew
                                        ; sub_18715+299r sub_18A07+D4r
                                        ; sub_18A07+E0w sub_18A07+264r
                                        ; sub_18A07+269w sub_18A07+2C5r
                                        ; sub_18A07+2F8w sub_18A07+534r
                                        ; sub_18A07+53Dw sub_18A07+576r
                                        ; sub_19089+45r sub_19089+51w
                                        ; sub_19089+7Ar ReadTrack+31r
                                        ; ReadTrack+3Ew ReadTrack+5Er
                                        ; ReadTrack+6Aw ReadTrack+CCr
                                        ; Byte last written to TC_Port3.
TC_Port1Byte    db 0                    ; DATA XREF: DispReadLngth+1Cr
                                        ; DispWritLngth+1Cr SetReadspeed+24r
                                        ; sub_16937+13Br WriteTC_Port1+5w
                                        ; Byte last written to TC_Port1
TC_Port2Word    dw 0                    ; DATA XREF: seg001:6C33w
                                        ; Word last written to TC_Port2
TC_Port4Byte    db 0                    ; DATA XREF: sub_15662+125r
                                        ; sub_15662+12Fr sub_15662+14Cr
                                        ; sub_15662+153r sub_15662+174r
                                        ; sub_15662+17Br sub_15662+19Cr
                                        ; sub_16937+EDw sub_16937+118w
                                        ; sub_16937+123r sub_16937+12Ar
                                        ; WriteTC_Port4+5w sub_18A07+107w
                                        ; sub_18A07+130w sub_18A07+2B1w
                                        ; sub_18A07+32Dw sub_18A07+35Bw
                                        ; sub_18A07+422w sub_19028+Ar
                                        ; Byte last written to TC_Port4.
TC_Port7Byte    db 0                    ; DATA XREF: sub_1689Br sub_1689B+8r
                                        ; sub_16C3A+5w sub_16F04+Br
                                        ; Byte last written to TC_Port7.
DisketteDOR     db 0                    ; DATA XREF: WriteDOR+4w sub_16F42+31w
                                        ; Byte last sent to diskette digital output register.
DMAWrdCntPort   dw 5                    ; DATA XREF: GetTC_Port_DMA+33w
                                        ; GetTC_Port_DMA+4Fw SetupDMA+27r
                                        ; sub_173FDr WaitForDMA+3r
                                        ; ReadDMAWrdCnt+1r
                                        ; DMA word count port for channel in use.
DMACurrAddrPort dw 4                    ; DATA XREF: sub_15A5E+A2r
                                        ; GetTC_Port_DMA+39w
                                        ; GetTC_Port_DMA+55w SetupDMA+14r
                                        ; seg001:71C5r ReadDMACurrAddr+1r
                                        ; sub_18A07+2BDr
                                        ; DMA current address port for channel in use.
DMAPageRegPort  dw 81h                  ; DATA XREF: GetTC_Port_DMA+3Fw
                                        ; GetTC_Port_DMA+5Bw SetupDMA+22r
                                        ; DMA page register port for channel in use.
DMA_Channel     db 2                    ; DATA XREF: DisplayDMA_Port+12r
                                        ; sub_15A5E+99r GetTC_Port_DMA+45w
                                        ; GetTC_Port_DMA+61w UnmaskDMAr
                                        ; MaskDMA+2r SetupDMA+Br
                                        ; sub_18715+188r sub_18A07+273r
                                        ; DMA channel 1 or 2
stru_15F60      db 0FFh                 ; Drive0 ; DATA XREF: AnalyzeTrack+35r
                                        ; sub_168AE+7r sub_16C65+39r
                                        ; sub_16C65+1DDw sub_16C65+1E9w
                                        ; sub_16C65+1F5w sub_16E78+Dr
                db 0FFh                 ; Drive1
                db 0FFh                 ; Drive2
                db 0FFh                 ; Drive3
stru_15F64      dw 0                    ; Drive0 ; DATA XREF: WriteTrack+50r
                                        ; sub_15A5E+181r sub_15A5E+23Fr
                                        ; seg001:5D70r sub_15D77+AAr
                                        ; sub_16937+Fr sub_16937+C6r
                                        ; sub_16937+D9r sub_16C65+1FCw
                                        ; sub_174FB+105r
                dw 0                    ; Drive1
                dw 0                    ; Drive2
                dw 0                    ; Drive3
word_15F6C      dw 0                    ; DATA XREF: WriteTrack+89r
                                        ; WriteTrack+EDr sub_16C65+205w
                                        ; sub_19028+46r
word_15F6E      dw 0                    ; DATA XREF: WriteTrack+85r
                                        ; WriteTrack+F1r sub_16C65+20Cw
                                        ; sub_19028+42r
                dw 0
                dw 0
                dw 0
                dw 0
                dw 0
                dw 0
word_15F7C      dw 0                    ; DATA XREF: sub_16C65+1AFw
                                        ; sub_16C65+202r
DataRate        dw 0                    ; DATA XREF: sub_16C65+5Aw
                                        ; sub_16C65+10Aw sub_16C65+150w
                                        ; sub_16C65+196w sub_16C65+19Ar
                                        ; sub_16C65+1A1w sub_16C65+1B3r
                                        ; sub_16C65+1E2r sub_16C65+1EEr
                                        ; sub_16C65+209r seg001:8462w
word_15F80      dw 0                    ; DATA XREF: sub_16C65+8Fw
                                        ; sub_16C65+C7r sub_16C65+100r
                                        ; sub_16C65+146r sub_16C65+18Cr
                                        ; Delay+36r Delay+6Fr Delay2+33r
                                        ; Delay2+6Cr sub_174FB+59w
                                        ; seg001:769Fr
word_15F82      dw 0                    ; DATA XREF: ReadWrite+32w sub_16937r
                                        ; sub_16937+22w sub_16937+F6r
                                        ; sub_16937+104r
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
byte_15F9C      db 0                    ; DATA XREF: sub_16937+12Dw
                                        ; sub_18A07+A0r
FloppyCtlrPort  dw 3F7h                 ; DATA XREF: GetTC_Port_DMA+B4w
                                        ; sub_16BCA+7r
                                        ; R-  diskette controller DIR (Digital Input Register)
                                        ; -W  configuration control register
                                        ; 03F7h PC/AT/PS2, 0065h for AT&T 6300.
aOlivetti       db 'OLIVETTI'           ; DATA XREF: GetTC_Port_DMA+A5r
byte_15FA7      db 0                    ; DATA XREF: sub_16877r
                                        ; GetTC_Port_DMA+BDw
                                        ; GetTC_Port_DMA+EAw sub_16BCAr
                                        ; sub_176F9+39r sub_17851+7r
                                        ; sub_18321+3r
word_15FA8      dw 0                    ; DATA XREF: sub_16C65w sub_16C65+17r
                                        ; sub_174C6+1Bw sub_174C6+26w
                                        ; sub_174C6+2Ar sub_174FB+10Fr
byte_15FAA      db 0                    ; DATA XREF: sub_16E78+8w
                                        ; sub_16E78+14w sub_1700D+19r
OldInt0EOff     dw 0                    ; DATA XREF: GetInt0E+Bw
                                        ; RestoreInt0E+3r
OldInt0ESeg     dw 0                    ; DATA XREF: GetInt0E+7w
                                        ; RestoreInt0E+7r
word_15FAF      dw 0                    ; DATA XREF: sub_174FB+65r
                                        ; sub_174FB+75r seg001:76A5w
word_15FB1      dw 0                    ; DATA XREF: sub_174FB+6Dr
                                        ; sub_174FB+78w
word_15FB3      dw 0                    ; DATA XREF: sub_174FB+7w
                                        ; sub_174FB+94r sub_174FB+A9w
word_15FB5      dw 0                    ; DATA XREF: sub_174FB+Dw
                                        ; sub_174FB+7Ew
word_15FB7      dw 0                    ; DATA XREF: sub_174FB+13w
                                        ; sub_174FB+82w
unk_15FB9       db    0 ;               ; DATA XREF: sub_174FB+71w
                                        ; sub_174FB+CCr
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
byte_161B9      db 0                    ; DATA XREF: sub_176B0+3w
                                        ; sub_176B0+35r
byte_161BA      db 0                    ; DATA XREF: sub_176B0+8w
                                        ; sub_176B0+3Br
word_161BB      dw 0                    ; DATA XREF: sub_17851w sub_17851+11r
                                        ; sub_17851+1Dr
unk_161BD       db  9Bh ; ¢             ; DATA XREF: sub_16937+114r
                db  9Ch ; £
                db  9Dh ; ¥
                db  9Eh ; P
                db  9Fh ; ƒ
                db 0A0h ; á
                db 0A1h ; í
                db 0A2h ; ó
                db 0A3h ; ú
                db 0A4h ; ñ
                db 0A5h ; Ñ
unk_161C8       db 0A6h ; ª             ; DATA XREF: sub_176F9+123w
                db 0A7h ; º
unk_161CA       db    0 ;               ; DATA XREF: AnalyzeTrack+14Er
                                        ; sub_1513E+15r sub_176F9+15o
                                        ; sub_176F9+2Ao sub_176F9+F4o
                                        ; sub_176F9+119w
                                        ; Sector buffer here?
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
byte_161D5      db 0                    ; DATA XREF: sub_176F9+51r
                db    0 ;
byte_161D7      db 0                    ; DATA XREF: sub_176F9+7Fr
word_161D8      dw 0                    ; DATA XREF: sub_176F9+58r
byte_161DA      db 0                    ; DATA XREF: sub_176F9+8Fr
word_161DB      dw 0                    ; DATA XREF: sub_176F9+98r
word_161DD      dw 0                    ; DATA XREF: sub_176F9+A5r
                db    0 ;
byte_161E0      db 0                    ; DATA XREF: sub_176F9+92r
                db    0 ;
word_161E2      dw 0                    ; DATA XREF: sub_176F9+5Fr
word_161E4      dw 0                    ; DATA XREF: sub_176F9+6Fr
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
byte_163CA      db 0                    ; DATA XREF: sub_176F9+BCr
                                        ; sub_176F9+C8r sub_17876+13r
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
word_167CA      dw 0                    ; DATA XREF: sub_176F9+7Cw
                                        ; sub_176F9+AEr sub_176F9+DCw
                                        ; sub_176F9+137r sub_1789E+15r
word_167CC      dw 0                    ; DATA XREF: sub_176F9+6Cw
                                        ; sub_176F9+A8r sub_176F9+D5w
                                        ; sub_176F9+12Dr sub_176F9+133r
                                        ; sub_1789E+7r sub_1789E+18r
word_167CE      dw 0                    ; DATA XREF: sub_176F9+8Cw
                                        ; sub_176F9+EAw sub_176F9+129r
                                        ; sub_1789E+2Br
word_167D0      dw 0                    ; DATA XREF: sub_176F9+A2w
                                        ; sub_176F9+E3w sub_1789E+22r
word_167D2      dw 0                    ; DATA XREF: sub_176F9+B6w
                                        ; sub_176F9+F1w sub_176F9+14Br
byte_167D4      db 0                    ; DATA XREF: ReadWrite+16w sub_176F9r
                                        ; sub_176F9+32w sub_176F9+151w
byte_167D5      db 0                    ; DATA XREF: ReadWrite+Cw
                                        ; AnalyzeTrack+A2r AnalyzeTrack+A9w
                                        ; AnalyzeTrack+B1r sub_1488C+1Br
                                        ; sub_1488C+20w SetReadspeed+Dr
unk_167D6       db    9 ;               ; DATA XREF: sub_176F9+CFr
                db    9 ;
                db    9 ;
                db    9 ;
                db    9 ;
                db    8 ;
                db    8 ;
unk_167DD       db    2 ;               ; DATA XREF: sub_176F9+D8r
                db    2 ;
                db    2 ;
                db    1 ;
                db    2 ;
                db    1 ;
                db    2 ;
unk_167E4       db  0Ch ;               ; DATA XREF: sub_176F9+DFr
                db  0Ch ;
                db  0Ch ;
                db    9 ;
                db  0Ch ;
                db    7 ;
                db  0Ah ;
unk_167EB       db    2 ;               ; DATA XREF: sub_176F9+E6r
                db    2 ;
                db    2 ;
                db    1 ;
                db    2 ;
                db    1 ;
                db    2 ;
unk_167F2       db  50h ; P             ; DATA XREF: sub_176F9+EDr
                db  28h ; (
                db  28h ; (
                db  28h ; (
                db  28h ; (
                db  28h ; (
                db  28h ; (
ReadClkTbl      dw 0Ch dup(0), 0A37Eh, 0B392h, 0D2BEh, 0A37Eh, 0B392h
                                        ; DATA XREF: sub_1690A+1Er
                dw 0D2BEh, 3 dup(0), 0F5h, 0F7h, 4FBh, 0F5h, 0F7h, 4FBh ; The values in this table are used to set the read clock
                                        ; for the UM8326B via ports 4 and 5.
DMACntLst       dw 0                    ; field_0 ; DATA XREF: SetDmaCount+12r
                dw 0                    ; field_2
                dw 0                    ; field_4
                dw 0                    ; field_6
                dw 1AFFh                ; Apple
                dw 1AFFh                ; FM
                dw 0                    ; field_C
                dw 34FFh                ; MFM
                dw 34FFh                ; Amiga

; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; Gets DMA count based on disk type.

SetDmaCount     proc near               ; CODE XREF: WriteTrackp sub_15A5E+22p
                                        ; sub_18A07+36p sub_19089+14p
                                        ; ReadTrack+18p sub_1AC85+27p
                mov     bl, ds:DiskType
                cmp     bl, 0FFh
                jnz     short loc_1684C
                mov     bl, 7

loc_1684C:                              ; CODE XREF: SetDmaCount+7j
                and     bl, 7Fh
                mov     bh, 0
                shl     bx, 1
                mov     ax, word ptr ds:DMACntLst.field_0[bx]
                mov     ds:DMACount, ax
                retn
SetDmaCount     endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; setup registers and stuff.

sub_1685B       proc near               ; CODE XREF: ReadWrite+23p
                                        ; sub_18321+20p
                call    sub_16865
                call    sub_16892
                call    SetReadspeed
                retn
sub_1685B       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_16865       proc near               ; CODE XREF: _Main+23Bp ReadWrite+3F4p
                                        ; ReadWrite+410p sub_1685Bp
                mov     al, 0
                call    WriteTC_Port3
                mov     al, 20h ; ' '
                call    WriteTC_Port1
                call    sub_16F04
                mov     al, 0
                call    sub_16C3A
sub_16865       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_16877       proc near               ; CODE XREF: sub_15662+1BAp
                cmp     ds:byte_15FA7, 0FFh
                jnz     short locret_16891
                push    ds
                mov     ax, seg bdata
                mov     ds, ax
                assume ds:bdata
                mov     al, dsk_data_rate ; Last data rate for diskette
                                        ;  bits 7 & 6 = 00 for 500K bit/sec
                                        ;             = 01 for 300K bit/sec
                                        ;             = 10 for 250K bit/sec
                                        ;             = 11 for 1M bit/sec
                                        ;  bits 5 & 4 = step rateRate at start of operation
                                        ;  bits 3 & 2 = 00 for 500K bit/sec
                                        ;             = 01 for 300K bit/sec
                                        ;             = 10 for 250K bit/sec
                                        ;             = 11 for 1M bit/sec
                pop     ds
                assume ds:nothing
                rol     al, 1
                rol     al, 1
                and     al, 3
                call    sub_16BCA

locret_16891:                           ; CODE XREF: sub_16877+5j
                retn
sub_16877       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_16892       proc near               ; CODE XREF: sub_1685B+3p
                call    sub_1689B
                mov     ax, 0FF00h
                jmp     WriteTC_Port2
sub_16892       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1689B       proc near               ; CODE XREF: sub_16892p
                mov     al, ds:TC_Port7Byte
                and     al, 0F7h ; '˜'
                call    sub_16C3A
                mov     al, ds:TC_Port7Byte
                or      al, 8
                or      al, 2
                call    sub_16C3A
                retn
sub_1689B       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_168AE       proc near               ; CODE XREF: sub_15662+F7p sub_1690Ap
                                        ; sub_16937+11Bp sub_16BAA+1p
                                        ; sub_16BBA+1p
                push    bx
                mov     bh, 0
                mov     bl, ds:CurrentDrive
                mov     cl, byte ptr ds:stru_15F60.Drive0[bx]
                mov     ch, 0
                pop     bx
                retn
sub_168AE       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_168BD       proc near               ; CODE XREF: sub_18715+7p
                                        ; sub_19089+1Bp
                mov     al, ds:DiskType
                call    sub_1690A
                cmp     ds:DiskType, 7
                jnz     short loc_168D6
                cmp     ds:ReadLengthBytes, 3300h
                jb      short loc_168D6
                inc     al
                inc     ah

loc_168D6:                              ; CODE XREF: sub_168BD+Bj
                                        ; sub_168BD+13j SetReadspeed+Bj
                jmp     short loc_168F1
sub_168BD       endp

; ---------------------------------------------------------------------------
                db 90h

; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


SetReadspeed    proc near               ; CODE XREF: sub_15A5E+31p
                                        ; sub_1685B+6p ReadTrack+27p
                mov     al, ds:DiskType
                call    sub_1690A
                cmp     ds:DiskType, 7
                jnz     short loc_168D6
                cmp     ds:byte_167D5, 0
                jz      short loc_168F1
                inc     al
                inc     ah

loc_168F1:                              ; CODE XREF: sub_168BD+19j
                                        ; SetReadspeed+12j
                mov     dx, ds:TC_Port5
                out     dx, al
                mov     al, ah
                mov     dx, ds:TC_Port4
                out     dx, al
                mov     al, ds:TC_Port1Byte
                and     al, 0F0h
                or      al, bl
                or      al, 20h
                call    WriteTC_Port1
                retn
SetReadspeed    endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1690A       proc near               ; CODE XREF: sub_168BD+3p
                                        ; SetReadspeed+3p
                call    sub_168AE
                cmp     cl, 2
                jbe     short loc_16914
                mov     cl, 0

loc_16914:                              ; CODE XREF: sub_1690A+6j
                cmp     al, 0FFh
                jnz     short loc_1691A
                mov     al, 7

loc_1691A:                              ; CODE XREF: sub_1690A+Cj
                and     al, 7Fh
                mov     ah, 0
                mov     bx, ax
                shl     bx, 1
                add     bx, ax
                add     bx, cx
                shl     bx, 1
                mov     ax, ds:ReadClkTbl[bx]
                mov     bl, 2
                cmp     al, 0F0h ; '='
                jb      short locret_16936
                mov     bl, ah
                mov     ah, al

locret_16936:                           ; CODE XREF: sub_1690A+26j
                retn
sub_1690A       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_16937       proc near               ; CODE XREF: WriteTrack+112p
                cmp     ds:word_15F82, 0
                jnz     short loc_16966
                mov     bl, ds:CurrentDrive
                mov     bh, 0
                shl     bx, 1
                mov     di, word ptr ds:stru_15F64.Drive0[bx]
                mov     si, 5Eh ; '^'
                mov     cx, 64h ; 'd'
                mov     bx, 0

loc_16953:                              ; CODE XREF: sub_16937+2Dj
                mov     ax, di
                mul     si
                div     cx
                mov     ds:word_15F82[bx], ax
                add     bx, 2
                inc     si
                cmp     si, 6Ah ; 'j'
                jbe     short loc_16953

loc_16966:                              ; CODE XREF: sub_16937+5j
                call    GetTrkDatOfs
                call    RdTrkLngthTbl
                cmp     ds:DiskType, 7
                jnb     short loc_169AC
                call    sub_1AC25
                add     si, dx
                sub     si, 8
                sub     dx, 8
                mov     cx, 0Fh

loc_16981:                              ; CODE XREF: sub_16937+6Dj
                mov     ax, es:[si]
                cmp     ax, es:[si-5]
                jnz     short loc_169A6
                mov     ax, es:[si+2]
                cmp     ax, es:[si-3]
                jnz     short loc_169A6
                mov     al, es:[si+4]
                cmp     al, es:[si-1]
                jnz     short loc_169A6
                sub     si, 5
                sub     dx, 5
                loop    loc_16981

loc_169A6:                              ; CODE XREF: sub_16937+51j
                                        ; sub_16937+5Bj sub_16937+65j
                add     dx, 5
                jmp     short loc_169E1
; ---------------------------------------------------------------------------
                align 2

loc_169AC:                              ; CODE XREF: sub_16937+3Aj
                cmp     ds:DiskType, 8
                jnz     short loc_169B9
                sub     dx, 46h ; 'F'
                jmp     short loc_169E1
; ---------------------------------------------------------------------------
                db 90h
; ---------------------------------------------------------------------------

loc_169B9:                              ; CODE XREF: sub_16937+7Aj
                test    byte ptr ds:TrackTypeTable[bx], 80h
                jnz     short loc_169E4
                cmp     ds:DiskType, 7
                jnz     short loc_169E4
                call    sub_1AC25
                add     si, dx
                sub     si, 4
                mov     ax, es:[si]
                mov     cx, 46h ; 'F'

loc_169D5:                              ; CODE XREF: sub_16937+A8j
                dec     si
                dec     si
                sub     dx, 2
                cmp     ax, es:[si]
                jnz     short loc_169E1
                loop    loc_169D5

loc_169E1:                              ; CODE XREF: sub_16937+72j
                                        ; sub_16937+7Fj sub_16937+A6j
                add     dx, 0Ch

loc_169E4:                              ; CODE XREF: sub_16937+87j
                                        ; sub_16937+8Ej
                mov     cx, dx
                call    RdTrkLngthTbl
                mov     ax, dx
                sub     ax, cx
                cmp     ax, 8
                jb      short loc_169F5
                sub     dx, 8

loc_169F5:                              ; CODE XREF: sub_16937+B9j
                mov     bh, 0
                mov     bl, ds:CurrentDrive
                shl     bx, 1

loc_169FD:
                mov     ax, word ptr ds:stru_15F64.Drive0[bx]
                cmp     ds:DiskType, 7
                jnb     short loc_16A0A
                shr     ax, 1

loc_16A0A:                              ; CODE XREF: sub_16937+CFj
                cmp     dx, ax
                jb      short loc_16A10
                mov     dx, cx

loc_16A10:                              ; CODE XREF: sub_16937+D5j
                mov     bx, word ptr ds:stru_15F64.Drive0[bx]
                mov     cx, dx
                mov     ax, 60h ; '`'
                mul     bx
                div     cx
                mov     dx, 101h
                sub     dx, ax
                mov     ax, dx
                mov     ds:TC_Port4Byte, al
                jmp     short loc_16A61
; ---------------------------------------------------------------------------
                align 2
                mov     bx, 0

loc_16A2D:                              ; CODE XREF: sub_16937+102j
                cmp     dx, ds:word_15F82[bx]
                jb      short loc_16A49
                add     bx, 2
                cmp     bx, 0Eh
                jb      short loc_16A2D

loc_16A3B:                              ; CODE XREF: sub_16937+110j
                cmp     cx, ds:word_15F82[bx]
                jb      short loc_16A49
                add     bx, 2
                cmp     bx, 1Ah
                jb      short loc_16A3B

loc_16A49:                              ; CODE XREF: sub_16937+FAj
                                        ; sub_16937+108j
                shr     bx, 1
                mov     al, byte ptr ds:unk_161BD[bx]
                mov     ds:TC_Port4Byte, al
                call    sub_168AE
                cmp     cl, 0
                jz      short loc_16A61
                mov     al, ds:TC_Port4Byte
                inc     al
                shr     al, 1

loc_16A61:                              ; CODE XREF: sub_16937+F0j
                                        ; sub_16937+121j
                mov     al, ds:TC_Port4Byte
                mov     ds:byte_15F9C, al
                call    WriteTC_Port4
                mov     bl, 4
                cmp     al, 0C0h ; '+'
                jnb     short loc_16A72
                mov     bl, 0

loc_16A72:                              ; CODE XREF: sub_16937+137j
                mov     al, ds:TC_Port1Byte
                and     al, 0FBh
                or      al, bl
                call    WriteTC_Port1
                retn
sub_16937       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


GetTC_Port_DMA  proc near               ; CODE XREF: _Main+BFp
                mov     al, 0Ch         ; enable diskette controller and DMA.
                call    WriteDOR
                mov     al, 64h ; 'd'
                call    Delay
                mov     ax, ds:TC_Port_Base
                call    sub_16B6E
                jnb     short loc_16AB0
                mov     ax, ds:TC_Addr1
                call    sub_16B6E
                jnb     short loc_16AB0
                mov     ax, ds:TC_Addr2
                call    sub_16B6E
                jnb     short loc_16AB0
                mov     ax, ds:TC_Addr3
                call    sub_16B6E
                jnb     short loc_16AB0
                mov     ax, ds:TC_Addr4
                call    sub_16B6E
                jnb     short loc_16AB0
                retn
; ---------------------------------------------------------------------------

loc_16AB0:                              ; CODE XREF: GetTC_Port_DMA+10j
                                        ; GetTC_Port_DMA+18j
                                        ; GetTC_Port_DMA+20j
                                        ; GetTC_Port_DMA+28j
                                        ; GetTC_Port_DMA+30j
                mov     ds:DMAWrdCntPort, 3 ; Port 03h RW  DMA channel 1 word count byte 0, then byte 1
                mov     ds:DMACurrAddrPort, 2 ; Port 02h R-  DMA channel 1 current address byte  0, then byte 1
                                        ;             -W  DMA channel 1 base address byte 0, then byte 1
                mov     ds:DMAPageRegPort, 83h ; 'â' ; Port 83h RW  DMA channel 1 address byte 2
                mov     ds:DMA_Channel, 1
                in      al, dx
                and     al, 20h
                jnz     short loc_16AE3
                mov     ds:DMAWrdCntPort, 5 ; Port 05h RW  DMA channel 2 word count byte 0, then byte 1
                mov     ds:DMACurrAddrPort, 4 ; Port 04h R-  DMA channel 2 current address byte  0, then byte 1
                                        ;             -W  DMA channel 2 base address byte 0, then byte 1
                mov     ds:DMAPageRegPort, 81h ; 'ü' ; Port 81h RW  DMA channel 2 address byte 2
                mov     ds:DMA_Channel, 2

loc_16AE3:                              ; CODE XREF: GetTC_Port_DMA+4Dj
                sub     dx, 2
                mov     ds:TC_Port_Base, dx
                mov     ds:TC_Port0, dx
                inc     dx
                mov     ds:TC_Port1, dx
                inc     dx
                mov     ds:TC_Port2, dx
                inc     dx
                mov     ds:TC_Port3, dx
                inc     dx
                mov     ds:TC_Port4, dx
                inc     dx
                mov     ds:TC_Port5, dx
                inc     dx
                mov     ds:TC_Port6, dx
                inc     dx
                mov     ds:TC_Port7, dx
                push    di
                push    si
                push    es
                mov     ax, 0F000h      ; BIOS segment
                mov     es, ax
                assume es:nothing
                mov     si, 0C050h      ; offset within BIOS to check for "OLIVETTI".
                mov     di, 0

loc_16B1F:                              ; CODE XREF: GetTC_Port_DMA+B2j
                mov     al, es:[si]
                xor     al, byte ptr ds:aOlivetti[di] ; "OLIVETTI"
                and     al, 7Fh
                jnz     short loc_16B37
                inc     si
                inc     di
                cmp     di, 8
                jb      short loc_16B1F
                mov     ds:FloppyCtlrPort, 65h ; 'e'

loc_16B37:                              ; CODE XREF: GetTC_Port_DMA+ABj
                pop     es
                assume es:nothing
                pop     si
                pop     di
                mov     ds:byte_15FA7, 0
                mov     ah, 15h
                mov     dl, 0
                int     13h             ; DISK - DISK - GET TYPE (AT,XT2,XT286,CONV,PS)
                                        ; DL = drive ID
                                        ; Return: CF set on error, AH = disk type
                jb      short loc_16B6C
                cmp     ah, 2
                jz      short loc_16B59
                mov     ah, 15h
                mov     dl, 1
                int     13h             ; DISK - DISK - GET TYPE (AT,XT2,XT286,CONV,PS)
                                        ; DL = drive ID
                                        ; Return: CF set on error, AH = disk type
                jb      short loc_16B59
                cmp     ah, 2
                jnz     short loc_16B6C

loc_16B59:                              ; CODE XREF: GetTC_Port_DMA+CDj
                                        ; GetTC_Port_DMA+D5j
                push    ds
                mov     ax, seg bdata
                mov     ds, ax
                assume ds:bdata
                mov     al, dsk0_media_st ; Media state for diskette drive 0
                                        ;     7      6      5      4
                                        ;  data xfer rate  two   media
                                        ;   00=500K bit/s  step  known
                                        ;   01=300K bit/s
                                        ;   10=250K bit/s
                                        ;   11=1M bit/sec
                                        ;     3      2      1      0
                                        ;  unused  -----state of drive-----
                                        ;          bits floppy  drive state
                                        ;          000=  360K in 360K, ?
                                        ;          001=  360K in 1.2M, ?
                                        ;          010=  1.2M in 1.2M, ?
                                        ;          011=  360K in 360K, ok
                                        ;          100=  360K in 1.2M, ok
                                        ;          101=  1.2M in 1.2M, ok
                                        ;          111=  720K in 720K, ok
                                        ;            or 1.44M in 1.44M
                                        ;         (state not used for 2.88)
                pop     ds
                assume ds:nothing
                cmp     al, 0
                jz      short loc_16B6C
                mov     ds:byte_15FA7, 0FFh

loc_16B6C:                              ; CODE XREF: GetTC_Port_DMA+C8j
                                        ; GetTC_Port_DMA+DAj
                                        ; GetTC_Port_DMA+E8j
                clc
                retn
GetTC_Port_DMA  endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_16B6E       proc near               ; CODE XREF: GetTC_Port_DMA+Dp
                                        ; GetTC_Port_DMA+15p
                                        ; GetTC_Port_DMA+1Dp
                                        ; GetTC_Port_DMA+25p
                                        ; GetTC_Port_DMA+2Dp
                mov     ds:TC_Port_Base, ax
                mov     cx, 14h

loc_16B74:                              ; CODE XREF: sub_16B6E+36j
                mov     dx, ds:TC_Port_Base
                add     dx, 2
                in      al, dx
                jmp     short $+2
                mov     ah, al
                in      al, dx
                cmp     ah, al
                jnz     short loc_16BA8
                and     al, 8Ch ; 'î'
                cmp     al, 8Ch ; 'î'
                jz      short loc_16BA8
                and     ah, 1
                jz      short loc_16BA8
                jmp     short $+2
                in      al, dx
                and     al, 40h
                jnz     short loc_16BA8
                sub     dx, 2
                jmp     short $+2
                in      al, dx
                and     al, 5Fh
                jnz     short loc_16BA8
                add     dx, 2
                loop    loc_16B74
                clc
                retn
; ---------------------------------------------------------------------------

loc_16BA8:                              ; CODE XREF: sub_16B6E+15j
                                        ; sub_16B6E+1Bj sub_16B6E+20j
                                        ; sub_16B6E+27j sub_16B6E+31j
                stc
                retn
sub_16B6E       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_16BAA       proc near               ; CODE XREF: sub_15662+BAp
                                        ; sub_18A07+91p
                push    cx
                call    sub_168AE
                cmp     cl, 1
                jz      short loc_16BB8
                mov     al, 1
                call    sub_16BCA

loc_16BB8:                              ; CODE XREF: sub_16BAA+7j
                pop     cx
                retn
sub_16BAA       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_16BBA       proc near               ; CODE XREF: sub_18A07+619p
                push    cx
                call    sub_168AE
                cmp     cl, 1
                jz      short loc_16BC8
                mov     al, 2
                call    sub_16BCA

loc_16BC8:                              ; CODE XREF: sub_16BBA+7j
                pop     cx
                retn
sub_16BBA       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_16BCA       proc near               ; CODE XREF: sub_16877+17p
                                        ; sub_16BAA+Bp sub_16BBA+Bp
                                        ; sub_1708E+9p sub_1708E+89p
                cmp     ds:byte_15FA7, 0FFh
                jnz     short locret_16BD9
                mov     dx, ds:FloppyCtlrPort
                out     dx, al
                call    sub_16BDA

locret_16BD9:                           ; CODE XREF: sub_16BCA+5j
                retn
sub_16BCA       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_16BDA       proc near               ; CODE XREF: sub_16BCA+Cp sub_17851+Ep
                push    ds
                push    ax
                mov     ax, seg bdata
                mov     ds, ax
                assume ds:bdata
                mov     al, dsk0_media_st ; Media state for diskette drive 0
                                        ;     7      6      5      4
                                        ;  data xfer rate  two   media
                                        ;   00=500K bit/s  step  known
                                        ;   01=300K bit/s
                                        ;   10=250K bit/s
                                        ;   11=1M bit/sec
                                        ;     3      2      1      0
                                        ;  unused  -----state of drive-----
                                        ;          bits floppy  drive state
                                        ;          000=  360K in 360K, ?
                                        ;          001=  360K in 1.2M, ?
                                        ;          010=  1.2M in 1.2M, ?
                                        ;          011=  360K in 360K, ok
                                        ;          100=  360K in 1.2M, ok
                                        ;          101=  1.2M in 1.2M, ok
                                        ;          111=  720K in 720K, ok
                                        ;            or 1.44M in 1.44M
                                        ;         (state not used for 2.88)
                call    sub_16BF6
                mov     dsk0_media_st, al ; Media state for diskette drive 0
                                        ;     7      6      5      4
                                        ;  data xfer rate  two   media
                                        ;   00=500K bit/s  step  known
                                        ;   01=300K bit/s
                                        ;   10=250K bit/s
                                        ;   11=1M bit/sec
                                        ;     3      2      1      0
                                        ;  unused  -----state of drive-----
                                        ;          bits floppy  drive state
                                        ;          000=  360K in 360K, ?
                                        ;          001=  360K in 1.2M, ?
                                        ;          010=  1.2M in 1.2M, ?
                                        ;          011=  360K in 360K, ok
                                        ;          100=  360K in 1.2M, ok
                                        ;          101=  1.2M in 1.2M, ok
                                        ;          111=  720K in 720K, ok
                                        ;            or 1.44M in 1.44M
                                        ;         (state not used for 2.88)
                mov     al, dsk1_media_st ; Media state for diskette drive 1
                                        ;  (see dsk0_media_st)
                call    sub_16BF6
                mov     dsk1_media_st, al ; Media state for diskette drive 1
                                        ;  (see dsk0_media_st)
                pop     ax
                pop     ds
                assume ds:nothing
                retn
sub_16BDA       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_16BF6       proc near               ; CODE XREF: sub_16BDA+Ap
                                        ; sub_16BDA+13p
                and     al, 0EFh
                mov     ah, al
                and     ah, 7
                cmp     ah, 5
                ja      short locret_16C09
                cmp     ah, 3
                jb      short locret_16C09
                sub     al, 3

locret_16C09:                           ; CODE XREF: sub_16BF6+Aj sub_16BF6+Fj
                retn
sub_16BF6       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


WriteDOR        proc near               ; CODE XREF: GetTC_Port_DMA+2p
                                        ; sub_16C3A+26p sub_16E78+58p
                                        ; sub_16F04+8p
                mov     dx, 3F2h
                out     dx, al          ; Floppy: digital output reg bits:
                                        ; 0-1: Drive to select 0-3 (AT: bit 1 not used)
                                        ; 2:   0=reset diskette controller; 1=enable controller
                                        ; 3:   1=enable diskette DMA and interrupts
                                        ; 4-7: drive motor enable.  Set bits to turn drive ON.
                                        ;
                mov     cs:DisketteDOR, al
                retn
WriteDOR        endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


WriteTC_Port4   proc near               ; CODE XREF: sub_15662+102p
                                        ; sub_15662+12Ap sub_15662+134p
                                        ; sub_15662+15Cp sub_15662+180p
                                        ; sub_16937+130p sub_18A07+A3p
                mov     dx, ds:TC_Port4
                out     dx, al
                mov     ds:TC_Port4Byte, al
                retn
WriteTC_Port4   endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


WriteTC_Port3   proc near               ; CODE XREF: sub_15662+10Ap
                                        ; sub_15662+1ABp sub_15A5E+28Ap
                                        ; sub_16865+2p sub_18715+29Ep
                                        ; sub_18A07+57Bp sub_19089+7Fp
                                        ; ReadTrack+D1p
                mov     dx, ds:TC_Port3
                out     dx, al
                mov     ds:TC_Port3Byte, al
                retn
WriteTC_Port3   endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


WriteTC_Port1   proc near               ; CODE XREF: sub_16865+7p
                                        ; SetReadspeed+2Dp sub_16937+142p
                mov     dx, ds:TC_Port1
                out     dx, al
                mov     ds:TC_Port1Byte, al
                retn
WriteTC_Port1   endp

; ---------------------------------------------------------------------------

WriteTC_Port2:                          ; CODE XREF: sub_16892+6j
                mov     dx, ds:TC_Port2
                out     dx, al
                mov     ds:TC_Port2Word, ax
                mov     al, ah
                out     dx, al
                retn

; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_16C3A       proc near               ; CODE XREF: sub_16865+Fp sub_1689B+5p
                                        ; sub_1689B+Fp sub_16F04+11p
                mov     dx, cs:TC_Port7
                mov     cs:TC_Port7Byte, al
                out     dx, al
                and     al, 0F0h
                jz      short locret_16C64
                cmp     al, 10h
                jz      short loc_16C5E
                mov     ah, al
                mov     al, 21h ; '!'   ; select drive and motor 1
                cmp     ah, 20h ; ' '
                jz      short loc_16C5E
                mov     al, 42h ; 'B'   ; select drive and motor 2
                cmp     ah, 40h ; '@'
                jz      short loc_16C5E
                mov     al, 83h ; 'â'   ; select drive and motor 3

loc_16C5E:                              ; CODE XREF: sub_16C3A+10j
                                        ; sub_16C3A+19j sub_16C3A+20j
                or      al, 0Ch         ; Set enable controller and DMA bits.
                call    WriteDOR
                out     dx, al

locret_16C64:                           ; CODE XREF: sub_16C3A+Cj
                retn
sub_16C3A       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_16C65       proc near               ; CODE XREF: ReadWrite+71p
                                        ; ReadWrite+9Dp ReadWrite+2C3p
                mov     ds:word_15FA8, 4E20h
                pushf
                push    dx
                push    cx
                push    bx
                cli
                call    ClearTimer0
                mov     dx, ds:TC_Port_Base
                in      al, dx
                and     al, 80h
                mov     ah, al
                mov     cx, ds:word_15FA8

loc_16C80:                              ; CODE XREF: sub_16C65+29j
                call    Delay2
                mov     dx, ds:TC_Port_Base
                in      al, dx
                and     al, 80h
                cmp     al, ah
                jnz     short loc_16C96
                loop    loc_16C80
                pop     bx
                pop     cx
                pop     dx
                popf
                stc
                retn
; ---------------------------------------------------------------------------

loc_16C96:                              ; CODE XREF: sub_16C65+27j
                                        ; sub_16C65+31j
                loop    loc_16C96
                mov     bl, ds:CurrentDrive
                mov     bh, 0
                cmp     byte ptr ds:stru_15F60.Drive0[bx], 0FFh
                jz      short loc_16CAB

loc_16CA5:                              ; CODE XREF: sub_16C65+210j
                pop     bx
                pop     cx
                pop     dx
                popf
                clc
                retn
; ---------------------------------------------------------------------------

loc_16CAB:                              ; CODE XREF: sub_16C65+3Ej
                mov     dx, ds:TC_Port_Base
                cli
                call    ClearTimer0

loc_16CB3:                              ; CODE XREF: sub_16C65+51j
                in      al, dx
                and     al, 80h
                jnz     short loc_16CB3
                jmp     short $+2

loc_16CBA:                              ; CODE XREF: sub_16C65+58j
                in      al, dx
                and     al, 80h
                jz      short loc_16CBA
                mov     ds:DataRate, 0
                push    bx

loc_16CC6:                              ; CODE XREF: sub_16C65+8Bj
                pushf
                cli
                mov     al, 6           ; Latch timer 0 count.
                                        ; Controller ignores lower nibble this command,
                                        ; unknown why 06h used rather than 0h.
                out     43h, al         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                mov     bl, al
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                mov     bh, al
                mov     al, 6           ; Latch timer 0 count.
                                        ; Controller ignores lower nibble this command,
                                        ; unknown why 06h used rather than 0h.
                out     43h, al         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                mov     ah, al
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                popf
                xchg    ah, al
                sub     ax, bx
                cmp     ah, 0
                jz      short loc_16CC6
                neg     bx
                mov     ds:word_15F80, bx
                pop     bx
                xor     ax, ax
                push    bx

loc_16CFC:                              ; CODE XREF: sub_16C65+C1j
                pushf
                cli
                mov     al, 6           ; Latch timer 0 count.
                                        ; Controller ignores lower nibble this command,
                                        ; unknown why 06h used rather than 0h.
                out     43h, al         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                mov     bl, al
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                mov     bh, al
                mov     al, 6           ; Latch timer 0 count.
                                        ; Controller ignores lower nibble this command,
                                        ; unknown why 06h used rather than 0h.
                out     43h, al         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                mov     ah, al
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                popf
                xchg    ah, al
                sub     ax, bx
                cmp     ah, 0
                jz      short loc_16CFC
                neg     bx
                mov     ax, bx
                sub     ax, cs:word_15F80
                pop     bx
                mov     bx, ax

loc_16D34:                              ; CODE XREF: sub_16C65+113j
                push    bx

loc_16D35:                              ; CODE XREF: sub_16C65+FAj
                pushf
                cli
                mov     al, 6           ; Latch timer 0 count.
                                        ; Controller ignores lower nibble this command,
                                        ; unknown why 06h used rather than 0h.
                out     43h, al         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                mov     bl, al
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                mov     bh, al
                mov     al, 6           ; Latch timer 0 count.
                                        ; Controller ignores lower nibble this command,
                                        ; unknown why 06h used rather than 0h.
                out     43h, al         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                mov     ah, al
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                popf
                xchg    ah, al
                sub     ax, bx
                cmp     ah, 0
                jz      short loc_16D35
                neg     bx
                mov     ax, bx
                sub     ax, cs:word_15F80
                pop     bx
                cmp     ax, bx
                ja      short loc_16D73
                inc     ds:DataRate

loc_16D73:                              ; CODE XREF: sub_16C65+108j
                mov     bx, ax
                in      al, dx
                and     al, 80h
                jnz     short loc_16D34

loc_16D7A:                              ; CODE XREF: sub_16C65+159j
                push    bx

loc_16D7B:                              ; CODE XREF: sub_16C65+140j
                pushf
                cli
                mov     al, 6           ; Latch timer 0 count.
                                        ; Controller ignores lower nibble this command,
                                        ; unknown why 06h used rather than 0h.
                out     43h, al         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                mov     bl, al
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                mov     bh, al
                mov     al, 6           ; Latch timer 0 count.
                                        ; Controller ignores lower nibble this command,
                                        ; unknown why 06h used rather than 0h.
                out     43h, al         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                mov     ah, al
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                popf
                xchg    ah, al
                sub     ax, bx
                cmp     ah, 0
                jz      short loc_16D7B
                neg     bx
                mov     ax, bx
                sub     ax, cs:word_15F80
                pop     bx
                cmp     ax, bx
                ja      short loc_16DB9
                inc     ds:DataRate

loc_16DB9:                              ; CODE XREF: sub_16C65+14Ej
                mov     bx, ax
                in      al, dx
                and     al, 80h
                jz      short loc_16D7A
                push    bx

loc_16DC1:                              ; CODE XREF: sub_16C65+186j
                pushf
                cli
                mov     al, 6           ; Latch timer 0 count.
                                        ; Controller ignores lower nibble this command,
                                        ; unknown why 06h used rather than 0h.
                out     43h, al         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                mov     bl, al
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                mov     bh, al
                mov     al, 6           ; Latch timer 0 count.
                                        ; Controller ignores lower nibble this command,
                                        ; unknown why 06h used rather than 0h.
                out     43h, al         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                mov     ah, al
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                popf
                xchg    ah, al
                sub     ax, bx
                cmp     ah, 0
                jz      short loc_16DC1
                neg     bx
                mov     ax, bx
                sub     ax, cs:word_15F80
                pop     bx
                cmp     ax, bx
                ja      short loc_16DFF
                inc     ds:DataRate

loc_16DFF:                              ; CODE XREF: sub_16C65+194j
                cmp     ds:DataRate, 7
                jbe     short loc_16E14
                mov     ds:DataRate, 7
                mov     ax, 4859h
                mov     ds:byte_13D1C, 0FFh

loc_16E14:                              ; CODE XREF: sub_16C65+19Fj
                mov     ds:word_15F7C, ax
                push    ax
                mov     ax, ds:DataRate
                mov     cx, 20E5h
                mul     cx
                mov     bx, ax
                pop     ax
                mul     cx
                add     dx, bx
                shr     dx, 1
                rcr     ax, 1
                shr     dx, 1
                rcr     ax, 1
                shr     dx, 1
                rcr     ax, 1
                shr     dx, 1
                rcr     ax, 1
                mov     cx, 4E80h
                div     cx
                mov     bh, 0
                mov     bl, ds:CurrentDrive
                mov     byte ptr ds:stru_15F60.Drive0[bx], 0
                cmp     ds:DataRate, 7
                jz      short loc_16E5F
                mov     byte ptr ds:stru_15F60.Drive0[bx], 1
                cmp     ds:DataRate, 5
                jnb     short loc_16E5F
                mov     byte ptr ds:stru_15F60.Drive0[bx], 2

loc_16E5F:                              ; CODE XREF: sub_16C65+1E7j
                                        ; sub_16C65+1F3j
                shl     bx, 1
                mov     word ptr ds:stru_15F64.Drive0[bx], ax
                shl     bx, 1
                mov     ax, ds:word_15F7C
                mov     ds:word_15F6C[bx], ax
                mov     ax, ds:DataRate
                mov     ds:word_15F6E[bx], ax
                jmp     loc_16CA5
sub_16C65       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_16E78       proc near               ; CODE XREF: ReadWrite+124p
                                        ; ReadWrite+146p ReadWrite+280p
                                        ; ReadWrite+2A7p sub_18321+27p
                mov     ds:CurrentDrive, dl
                mov     bl, dl
                mov     bh, 0
                mov     ds:byte_15FAA, 0
                cmp     byte ptr ds:stru_15F60.Drive0[bx], 1
                jnz     short loc_16E91
                mov     ds:byte_15FAA, 0FFh

loc_16E91:                              ; CODE XREF: sub_16E78+12j
                pushf
                cli
                call    ClearTimer0
                push    ds
                push    cx
                in      al, 21h         ; Interrupt controller, 8259A.
                jmp     short $+2
                or      al, 1           ; disable IRQ0
                out     21h, al         ; Interrupt controller, 8259A.
                mov     cx, 40h ; '@'
                mov     ds, cx
                assume ds:bdata
                mov     cl, dl
                mov     al, 1
                shl     al, cl
                mov     dsk_motor_timer, 0FFh ; Motor timer, at 0, turn off motor
                test    byte ptr ds:EndOfCurrTrk, al
                jz      short loc_16EBE
                cmp     cs:BiosModelByte, 0FCh ; 'n' ; FCh=AT,FDh=PCjr,FEh=XT,FF=PC
                ja      short loc_16EEA

loc_16EBE:                              ; CODE XREF: sub_16E78+3Cj
                and     byte ptr ds:EndOfCurrTrk, 0F0h
                or      byte ptr ds:EndOfCurrTrk, al
                mov     al, 10h
                shl     al, cl
                or      al, dl
                or      al, 0Ch         ; enable controller and interrupts
                push    dx
                call    WriteDOR
                push    cs
                pop     ds
                assume ds:seg001
                mov     al, 0FAh ; '·'
                call    Delay
                mov     al, 0FAh ; '·'
                call    Delay
                mov     al, 0FAh ; '·'
                call    Delay
                mov     ax, seg bdata
                mov     ds, ax
                assume ds:bdata
                pop     dx

loc_16EEA:                              ; CODE XREF: sub_16E78+44j
                mov     cx, 0Ah

loc_16EED:                              ; CODE XREF: sub_16E78+83j
                mov     dh, 0
                call    GetDriveStatus
                mov     al, dsk_status_1 ; Status bytes-disk controller chip
                                        ;  Note: 7 info bytes returned from
                                        ;  controller are saved here. Refer
                                        ;  to the NEC uPD 765 chip manual
                                        ;  for the specific info, depending
                                        ;  on the previous command issued.
                xor     al, dl
                and     al, 1
                jz      short loc_16EFD
                loop    loc_16EED

loc_16EFD:                              ; CODE XREF: sub_16E78+81j
                mov     al, dsk_status_1 ; Status bytes-disk controller chip
                                        ;  Note: 7 info bytes returned from
                                        ;  controller are saved here. Refer
                                        ;  to the NEC uPD 765 chip manual
                                        ;  for the specific info, depending
                                        ;  on the previous command issued.
                pop     cx
                pop     ds
                assume ds:nothing
                popf
                retn
sub_16E78       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_16F04       proc near               ; CODE XREF: ReadWrite+109p
                                        ; ReadWrite+256p ReadWrite+262p
                                        ; ReadWrite+316p ReadWrite+3B6p
                                        ; sub_16865+Ap
                pushf
                push    ax
                push    bx
                push    dx
                push    ds
                cli
                mov     al, 0Ch         ; Bits 2 & 3 set, enable diskette controller, enable diskette DMA.
                call    WriteDOR
                mov     al, cs:TC_Port7Byte
                and     al, 0Fh
                call    sub_16C3A
                mov     ax, seg bdata
                mov     ds, ax
                assume ds:bdata
                and     dsk_motor_stat, 0F0h ; Motor running status & disk write
                                        ;  bit 7=1 disk write in progress
                                        ;  bits 6&5 = drive selected 0 to 3
                                        ;     3       2       1       0
                                        ;  drive-3 drive-2 drive-1 drive-0
                                        ;  --------- 1=motor on-----------
                and     dsk_recal_stat, 0F0h ; Recalibrate floppy drive bits
                                        ;    3       2       1       0
                                        ; drive-3 drive-2 drive-1 drive-0
                                        ;
                                        ; bit 7 = interrupt flag
                in      al, 21h         ; Interrupt controller, 8259A.
                jmp     short $+2
                and     al, 0FEh
                out     21h, al         ; Make sure IRQ0 (timer) enabled.
                pop     ds
                assume ds:nothing
                pop     dx
                pop     bx
                pop     ax
                popf
                retn
sub_16F04       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; Sets motor timeout to FFh.

MaxtMotorTimer  proc near               ; CODE XREF: ReadWrite+18Cp
                                        ; ReadWrite+2B7p sub_16F42+1p
                                        ; sub_16FEC+1p sub_1700D+1p
                                        ; seg001:704Bp sub_1708E+68p
                                        ; SetupDMA+3Ap sub_17186+35p
                                        ; CheckDskIntStat+1p seg001:7207p
                                        ; SelectHead+Ap TrackReadOn+2Dp
                                        ; sub_174FB+88p sub_18321+16p
                                        ; sub_18380+42p sub_1ABFF+1p
                                        ; sub_1AC08+1p sub_1AC08+9p
                push    ax
                mov     ax, seg bdata
                mov     ds, ax
                assume ds:bdata
                mov     dsk_motor_timer, 0FFh ; Motor timer, at 0, turn off motor
                pop     ax
                retn
MaxtMotorTimer  endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_16F42       proc near               ; CODE XREF: sub_18321+1Cp
                push    ds
                call    MaxtMotorTimer
                mov     dx, 3F2h
                cli
                mov     al, dsk_motor_stat ; Motor running status & disk write
                                        ;  bit 7=1 disk write in progress
                                        ;  bits 6&5 = drive selected 0 to 3
                                        ;     3       2       1       0
                                        ;  drive-3 drive-2 drive-1 drive-0
                                        ;  --------- 1=motor on-----------
                mov     cl, 4
                shl     al, cl
                test    al, 20h         ; drive 1
                jnz     short loc_16F61
                test    al, 40h
                jnz     short loc_16F5F
                test    al, 80h
                jz      short loc_16F63
                inc     al

loc_16F5F:                              ; CODE XREF: sub_16F42+15j
                inc     al

loc_16F61:                              ; CODE XREF: sub_16F42+11j
                inc     al

loc_16F63:                              ; CODE XREF: sub_16F42+19j
                or      al, 8
                out     dx, al          ; Diskette Digital output register.
                                        ; Enable DMA and interrupts, turn on motor for selected drive.
                mov     dsk_recal_stat, 0 ; Recalibrate floppy drive bits
                                        ;    3       2       1       0
                                        ; drive-3 drive-2 drive-1 drive-0
                                        ;
                                        ; bit 7 = interrupt flag
                mov     dsk_ret_code, 0 ; Controller return code
                                        ;  00h = ok
                                        ;  01h = bad command or parameter
                                        ;  02h = can't find address mark
                                        ;  03h = can't write, protected dsk
                                        ;  04h = sector not found
                                        ;  08h = DMA overrun
                                        ;  09h = DMA attempt over 64K bound
                                        ;  10h = bad CRC on disk read
                                        ;  20h = controller failure
                                        ;  40h = seek failure
                                        ;  80h = timeout, no response
                or      al, 4
                out     dx, al          ; Floppy: digital output reg bits:
                                        ; 0-1: Drive to select 0-3 (AT: bit 1 not used)
                                        ; 2:   0=reset diskette controller; 1=enable controller
                                        ; 3:   1=enable diskette DMA and interrupts
                                        ; 4-7: drive motor enable.  Set bits to turn drive ON.
                                        ;
                mov     cs:DisketteDOR, al
                sti
                call    CheckDskIntStat
                mov     al, dsk_status_1 ; Status bytes-disk controller chip
                                        ;  Note: 7 info bytes returned from
                                        ;  controller are saved here. Refer
                                        ;  to the NEC uPD 765 chip manual
                                        ;  for the specific info, depending
                                        ;  on the previous command issued.
                cmp     al, 0C0h ; '+'
                jz      short loc_16F8A
                or      dsk_ret_code, 20h ; Controller return code
                                        ;  00h = ok
                                        ;  01h = bad command or parameter
                                        ;  02h = can't find address mark
                                        ;  03h = can't write, protected dsk
                                        ;  04h = sector not found
                                        ;  08h = DMA overrun
                                        ;  09h = DMA attempt over 64K bound
                                        ;  10h = bad CRC on disk read
                                        ;  20h = controller failure
                                        ;  40h = seek failure
                                        ;  80h = timeout, no response
                jmp     short loc_16F9B
; ---------------------------------------------------------------------------
                align 2

loc_16F8A:                              ; CODE XREF: sub_16F42+3Ej
                mov     ah, 3
                call    DisketteCommand
                mov     bx, 1
                call    sub_16F9D
                mov     bx, 3
                call    sub_16F9D

loc_16F9B:                              ; CODE XREF: sub_16F42+45j
                pop     ds
                assume ds:nothing
                retn
sub_16F42       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_16F9D       proc near               ; CODE XREF: sub_16F42+50p
                                        ; sub_16F42+56p
                push    ds
                sub     ax, ax
                mov     ds, ax
                assume ds:nothing
                lds     si, ds:dword_10078
                assume ds:nothing
                shr     bx, 1
                mov     ah, [bx+si]
                pop     ds
sub_16F9D       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


DisketteCommand proc near               ; CODE XREF: sub_16F42+4Ap
                                        ; sub_16FEC+6p sub_16FEC+Bp
                                        ; sub_16FEC+13p sub_16FEC+18p
                                        ; sub_1700D+6p sub_1700D+14p
                                        ; sub_1700D+23p seg001:7050p
                                        ; seg001:705Ep sub_1706D+Cp
                                        ; sub_1706D+1Dp sub_1708E+13p
                                        ; sub_1708E+25p sub_1708E+2Cp
                                        ; sub_1708E+33p sub_1708E+3Ap
                                        ; sub_1708E+41p sub_1708E+4Ap
                                        ; sub_1708E+4Fp sub_1708E+64p
                                        ; GetDriveStatus+2p GetDriveStatus+10p
                                        ; CheckDskIntStat+9p seg001:720Cp
                                        ; sub_176B0+21p sub_176B0+30p
                push    ds
                push    dx
                push    cx
                push    bx
                mov     dx, seg bdata
                mov     ds, dx
                assume ds:bdata
                mov     dx, 3F4h
                xor     cx, cx
                mov     bx, 14h

loc_16FBC:                              ; CODE XREF: DisketteCommand+16j
                                        ; DisketteCommand+19j
                in      al, dx          ; Floppy: main status reg bits:
                                        ; 0-3: diskette busy
                                        ; 4: 1=cntrlr busy
                                        ; 5: 1=non-DMA mode
                                        ; 6: Data dir: 1=cntrlr to CPU
                                        ; 7: 1=OK to snd/rcv cmd or data
                test    al, 40h
                jz      short loc_16FCF
                loop    loc_16FBC       ; wait for data ready?
                                        ; Another delay loop, may be trouble on fast CPU.
                dec     bx
                jnz     short loc_16FBC

loc_16FC6:                              ; CODE XREF: DisketteCommand+33j
                or      dsk_ret_code, 80h ; 80h = timeout, no response
                stc
                jmp     short loc_16FE7
; ---------------------------------------------------------------------------
                db 90h
; ---------------------------------------------------------------------------

loc_16FCF:                              ; CODE XREF: DisketteCommand+14j
                xor     cx, cx
                mov     bx, 14h

loc_16FD4:                              ; CODE XREF: DisketteCommand+2Ej
                                        ; DisketteCommand+31j
                in      al, dx          ; Floppy: main status reg bits:
                                        ; 0-3: diskette busy
                                        ; 4: 1=cntrlr busy
                                        ; 5: 1=non-DMA mode
                                        ; 6: Data dir: 1=cntrlr to CPU
                                        ; 7: 1=OK to snd/rcv cmd or data
                test    al, 80h
                jnz     short loc_16FE0 ; wait for access ok?
                                        ; Another delay loop, may be trouble on fast CPU.
                loop    loc_16FD4
                dec     bx
                jnz     short loc_16FD4
                jmp     short loc_16FC6
; ---------------------------------------------------------------------------

loc_16FE0:                              ; CODE XREF: DisketteCommand+2Cj
                mov     al, ah
                mov     dx, 3F5h
                out     dx, al          ; Floppy: FDC command/data register.
                clc

loc_16FE7:                              ; CODE XREF: DisketteCommand+21j
                pop     bx
                pop     cx
                pop     dx
                pop     ds
                assume ds:nothing
                retn
DisketteCommand endp ; sp =  2


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_16FEC       proc near               ; CODE XREF: ReadWrite+2BAp
                                        ; sub_18321+2Bp sub_183E6+1Ap
                push    ds
                call    MaxtMotorTimer
                mov     ah, 7           ; command 7, calibrate drive.
                call    DisketteCommand
                mov     ah, dl
                call    DisketteCommand
                call    CheckDskIntStat
                mov     ah, 7           ; command 7, calibrate drive.
                call    DisketteCommand
                mov     ah, dl
                call    DisketteCommand
                call    CheckDskIntStat
                jmp     short loc_17036
sub_16FEC       endp

; ---------------------------------------------------------------------------
                db 90h

; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1700D       proc near               ; CODE XREF: sub_18313+Ap
                push    ds
                call    MaxtMotorTimer
                mov     ah, 0Fh         ; command 0fh seek cylinder
                call    DisketteCommand
                mov     ah, dh
                shl     ah, 1
                shl     ah, 1
                and     ah, 4
                or      ah, dl
                call    DisketteCommand ; head and drive on which to seek
                mov     ah, ch
                cmp     cs:byte_15FAA, 0
                jz      short loc_17030
                shl     ah, 1

loc_17030:                              ; CODE XREF: sub_1700D+1Fj
                call    DisketteCommand ; cylinder desired
                call    CheckDskIntStat

loc_17036:                              ; CODE XREF: sub_16FEC+1Ej
                pushf
                mov     al, 0Ah
                call    Delay
                popf
                pop     ds
                retn
sub_1700D       endp

; ---------------------------------------------------------------------------
                push    dx
                push    ds
                mov     dl, cs:CurrentDrive
                mov     dh, cs:CurrentSide
                call    MaxtMotorTimer
                mov     ah, 4Ah ; 'J'   ; Diskette controller command 4Ah
                                        ; Read ID
                call    DisketteCommand
                mov     ah, dh
                shl     ah, 1
                shl     ah, 1
                and     ah, 4
                or      ah, dl
                call    DisketteCommand ; drive and head to read id from.
                call    WaitForIRQ6
                jb      short loc_1706A
                call    SaveCtlrReturnCd
                clc

loc_1706A:                              ; CODE XREF: seg001:7064j
                pop     ds
                pop     dx
                retn

; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1706D       proc near               ; CODE XREF: SelectHead+1Cp
                cmp     dh, 80h ; 'Ç'
                jnz     short loc_17076
                call    SaveCtlrReturnCd
                retn
; ---------------------------------------------------------------------------

loc_17076:                              ; CODE XREF: sub_1706D+3j
                mov     ah, 4
                push    dx
                call    DisketteCommand ; Diskette controller command 4h
                                        ; Sense drive status
                pop     dx
                jb      short locret_1708D
                mov     ah, dh
                shl     ah, 1
                shl     ah, 1
                and     ah, 4
                or      ah, dl          ; head and drive to sense
                call    DisketteCommand

locret_1708D:                           ; CODE XREF: sub_1706D+10j
                retn
sub_1706D       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1708E       proc near               ; CODE XREF: sub_15186+A4p
                                        ; sub_15242+Dp
                cmp     ds:byte_13D70, 1
                jnz     short loc_1709A
                mov     al, 1
                call    sub_16BCA

loc_1709A:                              ; CODE XREF: sub_1708E+5j
                push    di
                mov     al, 2
                out     0Ah, al         ; DMA controller, 8237A-5.
                                        ; single mask bit register
                                        ; 0-1: select channel (00=0; 01=1; 10=2; 11=3)
                                        ; 2: 1=set mask for channel; 0=clear mask (enable)
                mov     ah, 46h ; 'F'   ; Diskette controller command 46h
                                        ; Read sector
                call    DisketteCommand
                mov     ah, ds:CurrentSide
                shl     ah, 1
                shl     ah, 1
                and     ah, 4
                or      ah, ds:CurrentDrive ; head and drive to read
                call    DisketteCommand
                mov     ah, ds:Cylinder ; track to read
                call    DisketteCommand
                mov     ah, ds:CurrentHead ; side to read
                call    DisketteCommand
                mov     ah, ds:SectorNumber ; sector to read
                call    DisketteCommand
                mov     ah, ds:SectorSize ; sector size
                call    DisketteCommand
                mov     ah, ds:SectorNumber
                inc     ah
                call    DisketteCommand ; read 1 sector
                mov     ah, 2Ah ; '*'
                call    DisketteCommand ; gap length
                mov     ah, 0FFh
                cmp     ds:SectorSize, 6
                ja      short loc_170F0
                cmp     ds:SectorSize, 0
                jnz     short loc_170F2

loc_170F0:                              ; CODE XREF: sub_1708E+59j
                mov     ah, 0

loc_170F2:                              ; CODE XREF: sub_1708E+60j
                call    DisketteCommand ; data length
                push    ds
                call    MaxtMotorTimer
                call    WaitForIRQ6
                call    SaveCtlrReturnCd
                mov     al, 6
                out     0Ah, al         ; DMA controller, 8237A-5.
                                        ; single mask bit register
                                        ; 0-1: select channel (00=0; 01=1; 10=2; 11=3)
                                        ; 2: 1=set mask for channel; 0=clear mask (enable)
                mov     ax, word ptr ds:dsk_status_1 ; Status bytes-disk controller chip
                                        ;  Note: 7 info bytes returned from
                                        ;  controller are saved here. Refer
                                        ;  to the NEC uPD 765 chip manual
                                        ;  for the specific info, depending
                                        ;  on the previous command issued.
                mov     bx, word ptr ds:dsk_status_3
                pop     ds
                pop     di
                cmp     cs:byte_13D70, 1
                jnz     short locret_1711B
                push    ax
                mov     al, 2
                call    sub_16BCA
                pop     ax

locret_1711B:                           ; CODE XREF: sub_1708E+84j
                retn
sub_1708E       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; Diskette controller command 4h
; Sense drive status.

GetDriveStatus  proc near               ; CODE XREF: sub_16E78+77p
                                        ; sub_18405+Fp
                mov     ah, 4
                call    DisketteCommand
                mov     ah, dh
                shl     ah, 1
                shl     ah, 1
                and     ah, 4
                or      ah, dl          ; head and drive to sense
                call    DisketteCommand
                call    SaveCtlrReturnCd
                retn
GetDriveStatus  endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; Enables the DMA channel being used by the DOB.

UnmaskDMA       proc near               ; CODE XREF: sub_15662+10Dp
                                        ; sub_18A07+E3p sub_19089+54p
                                        ; ReadTrack+6Dp
                mov     al, cs:DMA_Channel
                out     0Ah, al         ; DMA controller, 8237A-5.
                                        ; single mask bit register
                                        ; 0-1: select channel (00=0; 01=1; 10=2; 11=3)
                                        ; 2: 1=set mask for channel; 0=clear mask (enable)
                retn
UnmaskDMA       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; Disables the DMA channel being used by the DOB.

MaskDMA         proc near               ; CODE XREF: sub_15662+BDp
                                        ; sub_15662+1AEp sub_15A5E+282p
                                        ; sub_18715+296p sub_18A07+84p
                                        ; sub_18A07+573p sub_18A07+60Dp
                                        ; sub_19089+77p ReadTrack+C9p
                mov     al, 4
                or      al, cs:DMA_Channel
                out     0Ah, al         ; DMA controller, 8237A-5.
                                        ; single mask bit register
                                        ; 0-1: select channel (00=0; 01=1; 10=2; 11=3)
                                        ; 2: 1=set mask for channel; 0=clear mask (enable)
                retn
MaskDMA         endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


SetupDMA        proc near               ; CODE XREF: sub_15662+E3p
                                        ; sub_15A5E+44p sub_18715+27p
                                        ; sub_18A07+ADp sub_19089+31p
                                        ; ReadTrack+4Ap
                pushf
                push    cx
                cli
                out     0Ch, al         ; DMA controller, 8237A-5.
                                        ; clear byte pointer flip-flop.
                push    ax
                pop     ax
                mov     cl, al
                and     al, 0FCh ; 'n'  ; clear the channel selection bits.
                or      al, ds:DMA_Channel
                out     0Bh, al         ; DMA 8237A-5. mode register bits:
                                        ; 0-1: channel (00=0; 01=1; 10=2; 11=3)
                                        ; 2-3: transfer type (00=verify=Nop; 01=write; 10=read)
                                        ; 4: 1=enable auto-initialization
                                        ; 5: 1=address increment; 0=address decrement
                                        ; 6-7: 00=demand mode; 01=single; 10=block; 11=cascade
                mov     al, 0
                push    dx
                mov     dx, ds:DMACurrAddrPort
                push    ax
                pop     ax
                out     dx, al
                jmp     short $+2
                mov     ax, bx
                out     dx, al
                mov     al, ah
                mov     dx, ds:DMAPageRegPort
                out     dx, al
                mov     dx, ds:DMAWrdCntPort
                push    ds
                mov     ax, cs
                mov     ds, ax
                assume ds:seg001
                mov     al, byte ptr DMACount
                push    ax
                pop     ax
                out     dx, al
                mov     al, byte ptr DMACount+1
                out     dx, al
                call    MaxtMotorTimer
                pop     ds
                assume ds:nothing
                pop     dx
                pop     cx
                popf
                retn
SetupDMA        endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_17186       proc near               ; CODE XREF: sub_15186+A1p
                                        ; sub_15242+Ap
                pushf
                push    cx
                cli
                out     0Ch, al         ; DMA controller, 8237A-5.
                                        ; clear byte pointer flip-flop.
                push    ax
                pop     ax
                mov     cl, al
                and     al, 0FCh
                or      al, 2
                out     0Bh, al         ; DMA 8237A-5. mode register bits:
                                        ; 0-1: channel (00=0; 01=1; 10=2; 11=3)
                                        ; 2-3: transfer type (00=verify=Nop; 01=write; 10=read)
                                        ; 4: 1=enable auto-initialization
                                        ; 5: 1=address increment; 0=address decrement
                                        ; 6-7: 00=demand mode; 01=single; 10=block; 11=cascade
                mov     al, 0
                push    dx
                mov     dx, 4
                push    ax
                pop     ax
                out     dx, al          ; DMA controller, 8237A-5.
                                        ; channel 2 base address
                                        ; (also sets current address)
                jmp     short $+2
                mov     ax, bx
                out     dx, al          ; DMA controller, 8237A-5.
                                        ; channel 2 base address
                                        ; (also sets current address)
                mov     al, ah
                mov     dx, 81h ; 'ü'
                out     dx, al          ; DMA page register 74LS612:
                                        ; Channel 2 (diskette DMA)  (address bits 16-23)
                mov     dx, 5
                push    ds
                mov     ax, cs
                mov     ds, ax
                assume ds:seg001
                mov     al, byte ptr DMACount
                push    ax
                pop     ax
                out     dx, al          ; DMA controller, 8237A-5.
                                        ; channel 2 base address and word count
                mov     al, byte ptr DMACount+1
                out     dx, al          ; DMA controller, 8237A-5.
                                        ; channel 2 base address and word count
                call    MaxtMotorTimer
                pop     ds
                assume ds:nothing
                pop     dx
                pop     cx
                popf
                retn
sub_17186       endp

; ---------------------------------------------------------------------------
                pushf
                push    dx
                mov     dx, cs:DMACurrAddrPort
                cli
                mov     al, 0
                out     dx, al          ; DMA controller, 8237A-5.
                                        ; channel 2 base address
                                        ; (also sets current address)
                jmp     short $+2
                mov     al, bl
                out     dx, al          ; DMA controller, 8237A-5.
                                        ; channel 2 base address
                                        ; (also sets current address)
                inc     dx
                mov     al, byte ptr cs:DMACount
                out     dx, al          ; DMA controller, 8237A-5.
                                        ; channel 2 base address and word count
                mov     al, byte ptr cs:DMACount+1
                out     dx, al          ; DMA controller, 8237A-5.
                                        ; channel 2 base address and word count
                pop     dx
                popf
                retn

; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


CheckDskIntStat proc near               ; CODE XREF: sub_16F42+36p
                                        ; sub_16FEC+Ep sub_16FEC+1Bp
                                        ; sub_1700D+26p
                push    ds              ; waits for int 0Eh (IRQ6) from diskette controller and saves the results.
                call    MaxtMotorTimer
                call    WaitForIRQ6
                mov     ah, 8           ; Diskette controller command 8h
                                        ; Sense interrupt status
                call    DisketteCommand
                call    SaveCtlrReturnCd
                jb      short loc_171FC
                mov     al, ds:dsk_status_1 ; Status bytes-disk controller chip
                                        ;  Note: 7 info bytes returned from
                                        ;  controller are saved here. Refer
                                        ;  to the NEC uPD 765 chip manual
                                        ;  for the specific info, depending
                                        ;  on the previous command issued.
                and     al, 60h
                cmp     al, 60h ; '`'
                jz      short loc_171FE
                clc

loc_171FC:                              ; CODE XREF: CheckDskIntStat+Fj
                pop     ds
                retn
; ---------------------------------------------------------------------------

loc_171FE:                              ; CODE XREF: CheckDskIntStat+18j
                or      ds:dsk_ret_code, 40h ; Controller return code
                                        ;  00h = ok
                                        ;  01h = bad command or parameter
                                        ;  02h = can't find address mark
                                        ;  03h = can't write, protected dsk
                                        ;  04h = sector not found
                                        ;  08h = DMA overrun
                                        ;  09h = DMA attempt over 64K bound
                                        ;  10h = bad CRC on disk read
                                        ;  20h = controller failure
                                        ;  40h = seek failure
                                        ;  80h = timeout, no response
                pop     ds
                stc
                retn
CheckDskIntStat endp

; ---------------------------------------------------------------------------
                push    ds
                call    MaxtMotorTimer
                mov     ah, 8           ; Diskette controller command 8h
                                        ; Sense interrupt status
                call    DisketteCommand
                call    SaveCtlrReturnCd
                jb      short loc_1721E
                mov     al, ds:dsk_status_1 ; Status bytes-disk controller chip
                                        ;  Note: 7 info bytes returned from
                                        ;  controller are saved here. Refer
                                        ;  to the NEC uPD 765 chip manual
                                        ;  for the specific info, depending
                                        ;  on the previous command issued.
                and     al, 60h
                cmp     al, 60h ; '`'
                jz      short loc_17220
                clc

loc_1721E:                              ; CODE XREF: seg001:7212j
                pop     ds
                retn
; ---------------------------------------------------------------------------

loc_17220:                              ; CODE XREF: seg001:721Bj
                or      ds:dsk_ret_code, 40h ; Controller return code
                                        ;  00h = ok
                                        ;  01h = bad command or parameter
                                        ;  02h = can't find address mark
                                        ;  03h = can't write, protected dsk
                                        ;  04h = sector not found
                                        ;  08h = DMA overrun
                                        ;  09h = DMA attempt over 64K bound
                                        ;  10h = bad CRC on disk read
                                        ;  20h = controller failure
                                        ;  40h = seek failure
                                        ;  80h = timeout, no response
                pop     ds
                stc
                retn

; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


WaitForIRQ6     proc near               ; CODE XREF: seg001:7061p
                                        ; sub_1708E+6Bp CheckDskIntStat+4p
                sti
                push    bx
                push    cx
                push    dx
                mov     bl, 14h
                xor     cx, cx

loc_17230:                              ; CODE XREF: WaitForIRQ6+Fj
                                        ; WaitForIRQ6+13j
                test    ds:dsk_recal_stat, 80h ; Bit 7 = Diskette interrupt occurred. (int 0Eh)
                jnz     short loc_17243
                loop    loc_17230
                dec     bl
                jnz     short loc_17230
                or      ds:dsk_ret_code, 80h ; 80h = timeout, no response
                stc

loc_17243:                              ; CODE XREF: WaitForIRQ6+Dj
                pushf
                and     ds:dsk_recal_stat, 7Fh ; clear the interrupt bit.
                popf
                pop     dx
                pop     cx
                pop     bx
                retn
WaitForIRQ6     endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


SaveCtlrReturnCd proc near              ; CODE XREF: seg001:7066p sub_1706D+5p
                                        ; sub_1708E+6Ep GetDriveStatus+13p
                                        ; CheckDskIntStat+Cp seg001:720Fp
                                        ; sub_176B0+42p
                cld
                mov     di, offset dsk_status_1 ; Status bytes-disk controller chip
                                        ;  Note: 7 info bytes returned from
                                        ;  controller are saved here. Refer
                                        ;  to the NEC uPD 765 chip manual
                                        ;  for the specific info, depending
                                        ;  on the previous command issued.
                push    cx
                push    dx
                push    bx
                mov     bl, 7

loc_17257:                              ; CODE XREF: SaveCtlrReturnCd+42j
                mov     bh, 14h
                xor     cx, cx
                mov     dx, 3F4h

loc_1725E:                              ; CODE XREF: SaveCtlrReturnCd+15j
                                        ; SaveCtlrReturnCd+19j
                in      al, dx          ; Floppy: main status reg bits:
                                        ; 7: 1=OK to snd/rcv cmd or data
                test    al, 80h
                jnz     short loc_17272
                loop    loc_1725E
                dec     bh
                jnz     short loc_1725E
                or      ds:dsk_ret_code, 80h ; Controller return code
                                        ;  00h = ok
                                        ;  01h = bad command or parameter
                                        ;  02h = can't find address mark
                                        ;  03h = can't write, protected dsk
                                        ;  04h = sector not found
                                        ;  08h = DMA overrun
                                        ;  09h = DMA attempt over 64K bound
                                        ;  10h = bad CRC on disk read
                                        ;  20h = controller failure
                                        ;  40h = seek failure
                                        ;  80h = timeout, no response

loc_1726E:                              ; CODE XREF: SaveCtlrReturnCd+2Ej
                stc
                jmp     short loc_17295
; ---------------------------------------------------------------------------
                align 2

loc_17272:                              ; CODE XREF: SaveCtlrReturnCd+13j
                in      al, dx          ; Floppy: main status reg bits:
                                        ; 0-3: diskette busy
                                        ; 4: 1=cntrlr busy
                                        ; 5: 1=non-DMA mode
                                        ; 6: Data dir: 1=cntrlr to CPU
                                        ; 7: 1=OK to snd/rcv cmd or data
                test    al, 40h
                jnz     short loc_1727E

loc_17277:                              ; CODE XREF: SaveCtlrReturnCd+44j
                or      ds:dsk_ret_code, 20h ; Controller return code
                                        ;  00h = ok
                                        ;  01h = bad command or parameter
                                        ;  02h = can't find address mark
                                        ;  03h = can't write, protected dsk
                                        ;  04h = sector not found
                                        ;  08h = DMA overrun
                                        ;  09h = DMA attempt over 64K bound
                                        ;  10h = bad CRC on disk read
                                        ;  20h = controller failure
                                        ;  40h = seek failure
                                        ;  80h = timeout, no response
                jmp     short loc_1726E
; ---------------------------------------------------------------------------

loc_1727E:                              ; CODE XREF: SaveCtlrReturnCd+27j
                inc     dx
                in      al, dx          ; Floppy: FDC command/data register.
                mov     [di], al        ; 0040:0042
                inc     di
                mov     cx, 28h ; '('

loc_17286:                              ; CODE XREF: SaveCtlrReturnCd+38j
                loop    loc_17286
                dec     dx
                in      al, dx          ; Floppy: main status reg bits:
                                        ; 0-3: diskette busy
                                        ; 4: 1=cntrlr busy
                                        ; 5: 1=non-DMA mode
                                        ; 6: Data dir: 1=cntrlr to CPU
                                        ; 7: 1=OK to snd/rcv cmd or data
                test    al, 10h
                jz      short loc_17294
                dec     bl
                jnz     short loc_17257
                jmp     short loc_17277
; ---------------------------------------------------------------------------

loc_17294:                              ; CODE XREF: SaveCtlrReturnCd+3Ej
                clc

loc_17295:                              ; CODE XREF: SaveCtlrReturnCd+21j
                pop     bx
                pop     dx
                pop     cx
                retn
SaveCtlrReturnCd endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


SelectHead      proc near               ; CODE XREF: sub_15662+C7p
                                        ; sub_15662+1B4p sub_15A5E+38p
                                        ; sub_15A5E+292p sub_18A07+8Ep
                                        ; sub_18A07+613p ReadTrack+2Ep
                                        ; ReadTrack+D7p
                mov     dl, cs:CurrentDrive
                mov     al, cs:DiskType
                push    ds
                call    MaxtMotorTimer
                cmp     al, 7
                jnb     short loc_172B5
                cmp     cs:CurrentSide, 1
                jz      short loc_172B5
                clc
                pop     ds
                retn
; ---------------------------------------------------------------------------

loc_172B5:                              ; CODE XREF: SelectHead+Fj
                                        ; SelectHead+17j
                call    sub_1706D
                pop     ds
                retn
SelectHead      endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; Delay by amount proportional to AL.

Delay           proc near               ; CODE XREF: GetTC_Port_DMA+7p
                                        ; sub_16E78+5Fp sub_16E78+64p
                                        ; sub_16E78+69p sub_1700D+2Cp
                push    cx
                push    bx
                push    ax
                mov     bl, al

loc_172BF:                              ; CODE XREF: Delay+80j
                push    bx

loc_172C0:                              ; CODE XREF: Delay+30j
                pushf
                cli
                mov     al, 6           ; Latch timer 0 count.
                                        ; Controller ignores lower nibble this command,
                                        ; unknown why 06h used rather than 0h.
                out     43h, al         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                mov     bl, al
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                mov     bh, al
                mov     al, 6           ; Latch timer 0 count.
                                        ; Controller ignores lower nibble this command,
                                        ; unknown why 06h used rather than 0h.
                out     43h, al         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                mov     ah, al
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                popf
                xchg    ah, al
                sub     ax, bx
                cmp     ah, 0
                jz      short loc_172C0
                neg     bx
                mov     ax, bx
                sub     ax, cs:word_15F80
                pop     bx
                mov     cx, ax

loc_172F8:                              ; CODE XREF: Delay+7Aj
                push    bx

loc_172F9:                              ; CODE XREF: Delay+69j
                pushf
                cli
                mov     al, 6           ; Latch timer 0 count.
                                        ; Controller ignores lower nibble this command,
                                        ; unknown why 06h used rather than 0h.
                out     43h, al         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                mov     bl, al
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                mov     bh, al
                mov     al, 6           ; Latch timer 0 count.
                                        ; Controller ignores lower nibble this command,
                                        ; unknown why 06h used rather than 0h.
                out     43h, al         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                mov     ah, al
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                popf
                xchg    ah, al
                sub     ax, bx
                cmp     ah, 0
                jz      short loc_172F9
                neg     bx
                mov     ax, bx
                sub     ax, cs:word_15F80
                pop     bx
                sub     ax, cx
                cmp     ax, 952h
                jb      short loc_172F8
                dec     bl
                jz      short loc_1733C
                jmp     short loc_172BF
; ---------------------------------------------------------------------------

loc_1733C:                              ; CODE XREF: Delay+7Ej
                pop     ax
                pop     bx
                pop     cx
                retn
Delay           endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


Delay2          proc near               ; CODE XREF: sub_16C65+1Bp
                push    cx
                push    ax
                push    bx

loc_17343:                              ; CODE XREF: Delay2+2Dj
                pushf
                cli
                mov     al, 6           ; Latch timer 0 count.
                                        ; Controller ignores lower nibble this command,
                                        ; unknown why 06h used rather than 0h.
                out     43h, al         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                mov     bl, al
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                mov     bh, al
                mov     al, 6           ; Latch timer 0 count.
                                        ; Controller ignores lower nibble this command,
                                        ; unknown why 06h used rather than 0h.
                out     43h, al         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                mov     ah, al
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                popf
                xchg    ah, al
                sub     ax, bx
                cmp     ah, 0
                jz      short loc_17343
                neg     bx
                mov     ax, bx
                sub     ax, cs:word_15F80
                pop     bx
                mov     cx, ax

loc_1737B:                              ; CODE XREF: Delay2+77j
                push    bx

loc_1737C:                              ; CODE XREF: Delay2+66j
                pushf
                cli
                mov     al, 6           ; Latch timer 0 count.
                                        ; Controller ignores lower nibble this command,
                                        ; unknown why 06h used rather than 0h.
                out     43h, al         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                mov     bl, al
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                mov     bh, al
                mov     al, 6           ; Latch timer 0 count.
                                        ; Controller ignores lower nibble this command,
                                        ; unknown why 06h used rather than 0h.
                out     43h, al         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                mov     ah, al
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                popf
                xchg    ah, al
                sub     ax, bx
                cmp     ah, 0
                jz      short loc_1737C
                neg     bx
                mov     ax, bx
                sub     ax, cs:word_15F80
                pop     bx
                sub     ax, cx
                cmp     ax, 0EEh ; 'e'
                jb      short loc_1737B
                pop     ax
                pop     cx
                retn
Delay2          endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; Enables controller, turns on floppy DMA,
; resets transcopy board.

TrackReadOff    proc near               ; CODE XREF: sub_15662+1B7p
                                        ; sub_15A5E+2ADp sub_18A07+616p
                                        ; ReadTrack+DAp
                pushf
                push    bx
                mov     bl, 0Ch
                jmp     short loc_173C7
TrackReadOff    endp

; ---------------------------------------------------------------------------
                db 90h

; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; Selects drive, enables controller, turns off floppy DMA,
; resets transcopy board.

TrackReadOn     proc near               ; CODE XREF: sub_15662+C0p
                                        ; sub_15A5E+2Ap sub_18A07+87p
                                        ; ReadTrack+20p
                pushf
                push    bx
                mov     bl, 4

loc_173C7:                              ; CODE XREF: TrackReadOff+4j
                sti
                jmp     short $+2
                cli
                mov     dl, ds:CurrentDrive
                mov     cl, dl
                mov     al, 10h
                shl     al, cl
                or      al, dl
                or      al, bl
                mov     dx, 3F2h
                out     dx, al          ; Floppy: digital output reg bits:
                                        ; 0-1: Drive to select 0-3 (AT: bit 1 not used)
                                        ; 2:   0=reset diskette controller; 1=enable controller
                                        ; 3:   1=enable diskette DMA and interrupts
                                        ; 4-7: drive motor enable.  Set bits to turn drive ON.
                                        ;
                mov     dx, ds:TC_Port3
                mov     al, ds:TC_Port3Byte
                and     al, 0F9h ; '·'
                or      al, 1
                out     dx, al          ; turn on GO.
                jmp     short $+2
                dec     al
                out     dx, al          ; turn off GO.
                sti
                push    ds
                call    MaxtMotorTimer
                cli
                and     ds:dsk_recal_stat, 7Fh ; Recalibrate floppy drive bits
                                        ;    3       2       1       0
                                        ; drive-3 drive-2 drive-1 drive-0
                                        ;
                                        ; bit 7 = interrupt flag
                pop     ds
                pop     bx
                popf
                retn
TrackReadOn     endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_173FD       proc near               ; CODE XREF: sub_15A5E+27Fp
                                        ; sub_18715+291p sub_18A07+570p
                                        ; ReadTrack+AFp
                mov     dx, cs:DMAWrdCntPort
                in      al, dx          ; DMA controller, 8237A-5.
                                        ; channel 2 current word count
                jmp     short $+2
                mov     bl, al
                in      al, dx          ; DMA controller, 8237A-5.
                                        ; channel 2 current word count
                mov     bh, al
                cmp     bx, 5
                jbe     short WaitForDMA
                cmp     bx, 0FFFFh
                jz      short WaitForDMA
                mov     al, 0
                out     dx, al          ; DMA controller, 8237A-5.
                                        ; channel 2 base address and word count
                jmp     short $+2
                mov     al, 0
                out     dx, al          ; DMA controller, 8237A-5.
                                        ; channel 2 base address and word count
                jmp     short $+2
                in      al, dx          ; DMA controller, 8237A-5.
                                        ; channel 2 current word count
                jmp     short $+2
                mov     bl, al
                in      al, dx          ; DMA controller, 8237A-5.
                                        ; channel 2 current word count
                mov     bh, al
                cmp     bx, 5
                jbe     short WaitForDMA
                cmp     bx, 0FFFFh
                jz      short WaitForDMA
                mov     al, 0
                out     dx, al          ; DMA controller, 8237A-5.
                                        ; channel 2 base address and word count
                jmp     short $+2
                mov     al, 0
                out     dx, al          ; DMA controller, 8237A-5.
                                        ; channel 2 base address and word count
                jmp     short $+2
                in      al, dx          ; DMA controller, 8237A-5.
                                        ; channel 2 current word count
                jmp     short $+2
                mov     bl, al
                in      al, dx          ; DMA controller, 8237A-5.
                                        ; channel 2 current word count
                mov     bh, al
                mov     cx, 10h

loc_17445:                              ; CODE XREF: sub_173FD+48j
                loop    loc_17445
                retn
sub_173FD       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


WaitForDMA      proc near               ; CODE XREF: sub_15662+1A3p
                                        ; sub_173FD+10j sub_173FD+15j
                                        ; sub_173FD+2Cj sub_173FD+31j
                                        ; sub_19089+74p ReadTrack+C6p
                push    dx
                push    cx
                push    bx
                mov     dx, cs:DMAWrdCntPort

loc_17450:                              ; CODE XREF: WaitForDMA+30j
                in      al, dx          ; DMA controller, 8237A-5.
                                        ; channel 2 current word count
                jmp     short $+2
                mov     ah, al
                in      al, dx          ; DMA controller, 8237A-5.
                                        ; channel 2 current word count
                cmp     ax, 0
                jnz     short loc_17466
                in      al, dx          ; DMA controller, 8237A-5.
                                        ; channel 2 current word count
                jmp     short $+2
                mov     ah, al
                in      al, dx          ; DMA controller, 8237A-5.
                                        ; channel 2 current word count
                cmp     ax, 0
                jz      short loc_1747C

loc_17466:                              ; CODE XREF: WaitForDMA+11j
                cmp     ax, 0FFFFh
                jz      short loc_1747C
                mov     bx, ax
                mov     cx, 1F4h

loc_17470:                              ; CODE XREF: WaitForDMA+32j
                in      al, dx          ; DMA controller, 8237A-5.
                                        ; channel 2 current word count
                jmp     short $+2
                mov     ah, al
                in      al, dx          ; DMA controller, 8237A-5.
                                        ; channel 2 current word count
                cmp     ax, bx
                jnz     short loc_17450
                loop    loc_17470

loc_1747C:                              ; CODE XREF: WaitForDMA+1Cj
                                        ; WaitForDMA+21j
                pop     bx
                pop     cx
                pop     dx
                retn
WaitForDMA      endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


ReadDMAWrdCnt   proc near               ; CODE XREF: sub_15662+110p
                                        ; sub_15662+115p sub_15662+137p
                                        ; sub_15662+13Cp sub_15662+15Fp
                                        ; sub_15662+164p sub_15662+183p
                                        ; sub_15662+188p sub_18A07+540p
                                        ; sub_19089+64p ReadTrack+75p
                                        ; ReadTrack+81p
                push    dx
                mov     dx, cs:DMAWrdCntPort
                in      al, dx          ; DMA controller, 8237A-5.
                                        ; channel 2 current word count
                jmp     short $+2
                mov     bl, al
                in      al, dx          ; DMA controller, 8237A-5.
                                        ; channel 2 current word count
                mov     bh, al
                cmp     bl, 0
                jnz     short loc_174A1
                in      al, dx          ; DMA controller, 8237A-5.
                                        ; channel 2 current word count
                jmp     short $+2
                mov     ah, al
                in      al, dx          ; DMA controller, 8237A-5.
                                        ; channel 2 current word count
                xchg    ah, al
                cmp     ax, bx
                jbe     short loc_174A1
                inc     bh

loc_174A1:                              ; CODE XREF: ReadDMAWrdCnt+11j
                                        ; ReadDMAWrdCnt+1Dj
                pop     dx
                retn
ReadDMAWrdCnt   endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


ReadDMACurrAddr proc near               ; CODE XREF: sub_18715+1B2p
                                        ; sub_18A07+E6p sub_18A07+10Fp
                                        ; sub_18A07+28Cp sub_18A07+30Cp
                                        ; sub_18A07+33Cp sub_18A07+36Ap
                                        ; sub_18A07+403p sub_18A07+47Ep
                                        ; sub_18A07+544p
                push    dx
                mov     dx, cs:DMACurrAddrPort
                in      al, dx          ; DMA controller, 8237A-5.
                                        ; channel 2 current address
                jmp     short $+2
                mov     bl, al
                in      al, dx          ; DMA controller, 8237A-5.
                                        ; channel 2 current address
                mov     bh, al
                cmp     bl, 0F8h ; '°'
                jb      short loc_174C4
                in      al, dx          ; DMA controller, 8237A-5.
                                        ; channel 2 current address
                jmp     short $+2
                mov     ah, al
                in      al, dx          ; DMA controller, 8237A-5.
                                        ; channel 2 current address
                xchg    ah, al
                cmp     ax, bx
                jnb     short loc_174C4
                dec     bh

loc_174C4:                              ; CODE XREF: ReadDMACurrAddr+11j
                                        ; ReadDMACurrAddr+1Dj
                pop     dx
                retn
ReadDMACurrAddr endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_174C6       proc near               ; CODE XREF: AnalyzeTrack+127p
                nop
                cmp     ds:KeepTrkLngthFlag, 59h ; 'Y'
                jnz     short locret_174FA
                cmp     ds:word_1006A, 0
                jnz     short locret_174FA
                mov     ax, ds:word_13CC9
                cmp     ax, ds:word_13CEE
                jnz     short locret_174FA
                call    GetInt0E
                mov     ds:word_15FA8, 0

loc_174E7:                              ; CODE XREF: sub_174C6+2Fj
                call    sub_174FB
                jb      short loc_174F7
                inc     ds:word_15FA8
                cmp     ds:word_15FA8, 5
                jb      short loc_174E7

loc_174F7:                              ; CODE XREF: sub_174C6+24j
                call    RestoreInt0E

locret_174FA:                           ; CODE XREF: sub_174C6+6j sub_174C6+Dj
                                        ; sub_174C6+16j
                retn
sub_174C6       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_174FB       proc near               ; CODE XREF: sub_174C6+21p
                cli
                call    ClearTimer0
                mov     bx, 0
                mov     ds:word_15FB3, 0
                mov     ds:word_15FB5, 0
                mov     ds:word_15FB7, 0
                mov     dx, ds:TC_Port_Base

loc_17518:                              ; CODE XREF: sub_174FB+20j
                in      al, dx
                and     al, 80h
                jnz     short loc_17518
                jmp     short $+2

loc_1751F:                              ; CODE XREF: sub_174FB+27j
                in      al, dx
                and     al, 80h
                jz      short loc_1751F
                sti
                push    bx

loc_17526:                              ; CODE XREF: sub_174FB+55j
                pushf
                cli
                mov     al, 6           ; Latch timer 0 count.
                                        ; Controller ignores lower nibble this command,
                                        ; unknown why 06h used rather than 0h.
                out     43h, al         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                mov     bl, al
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                mov     bh, al
                mov     al, 6           ; Latch timer 0 count.
                                        ; Controller ignores lower nibble this command,
                                        ; unknown why 06h used rather than 0h.
                out     43h, al         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                mov     ah, al
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                popf
                xchg    ah, al
                sub     ax, bx
                cmp     ah, 0
                jz      short loc_17526
                neg     bx
                mov     ds:word_15F80, bx
                pop     bx
                xor     ax, ax

loc_1755B:                              ; CODE XREF: sub_174FB+B1j
                push    bx
                call    sub_176B0
                pop     bx
                mov     ax, ds:word_15FAF
                cmp     bx, 0
                jz      short loc_1756C
                sub     ax, ds:word_15FB1

loc_1756C:                              ; CODE XREF: sub_174FB+6Bj
                mov     word ptr ds:unk_15FB9[bx], ax
                mov     ax, ds:word_15FAF
                mov     ds:word_15FB1, ax
                add     bx, 4
                add     ds:word_15FB5, ax
                adc     ds:word_15FB7, 0
                push    ds
                call    MaxtMotorTimer
                mov     cx, word ptr ds:dsk_status_4
                mov     dx, word ptr ds:dsk_status_6
                pop     ds
                mov     si, ds:word_15FB3
                cmp     cx, word ptr ds:unk_13E35[si]
                jnz     short loc_1759F
                cmp     dx, word ptr ds:unk_13E37[si]
                jz      short loc_175A1

loc_1759F:                              ; CODE XREF: sub_174FB+9Cj
                stc
                retn
; ---------------------------------------------------------------------------

loc_175A1:                              ; CODE XREF: sub_174FB+A2j
                add     si, 4
                mov     ds:word_15FB3, si
                cmp     si, ds:word_13CC9
                jb      short loc_1755B
                mov     di, 0
                call    GetTrkDatOfs
                mov     cl, 4
                shl     bx, cl
                mov     bp, bx

loc_175BA:                              ; CODE XREF: sub_174FB+135j
                mov     ax, ds:word_14235[di]
                cmp     di, 0
                jz      short loc_175C7
                sub     ax, word ptr ds:unk_14231[di]

loc_175C7:                              ; CODE XREF: sub_174FB+C6j
                mov     cx, word ptr ds:unk_15FB9[di]
                mov     dx, ds:word_13D71
                mul     dx
                push    cx
                sub     cx, ax
                jnb     short loc_175D8
                neg     cx

loc_175D8:                              ; CODE XREF: sub_174FB+D9j
                cmp     cx, 8000h
                jb      short loc_175E7
                dec     dx
                cmp     ax, 8000h
                jb      short loc_175E7
                add     dx, 2

loc_175E7:                              ; CODE XREF: sub_174FB+E1j
                                        ; sub_174FB+E7j
                pop     ax
                mov     dh, dl
                mov     dl, ah
                mov     ah, al
                mov     al, 0
                shl     ax, 1
                rcl     dx, 1
                shl     ax, 1
                rcl     dx, 1
                mov     bl, ds:CurrentDrive
                mov     bh, 0
                shl     bx, 1
                mov     cx, word ptr ds:stru_15F64.Drive0[bx]
                cmp     cx, dx
                div     cx
                shr     di, 1
                cmp     ds:word_15FA8, 0
                jz      short loc_17620
                mov     cx, 0
                add     ax, word ptr ds:TrackDataBuffer[bp+di]
                adc     cx, 0
                shr     cx, 1
                rcr     ax, 1

loc_17620:                              ; CODE XREF: sub_174FB+114j
                mov     word ptr ds:TrackDataBuffer[bp+di], ax
                shl     di, 1
                add     di, 4
                cmp     di, ds:word_13CEE
                jnb     short locret_17632
                jmp     short loc_175BA
; ---------------------------------------------------------------------------

locret_17632:                           ; CODE XREF: sub_174FB+133j
                retn
sub_174FB       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


GetInt0E        proc near               ; CODE XREF: sub_174C6+18p
                push    es
                cli
                mov     ax, 350Eh
                int     21h             ; DOS - 2+ - GET INTERRUPT VECTOR
                                        ; AL = interrupt number
                                        ; Return: ES:BX = value of interrupt vector
                mov     ds:OldInt0ESeg, es
                mov     ds:OldInt0EOff, bx
                push    cs
                pop     ds
                assume ds:seg001
                mov     dx, offset Int0E_Entry
                mov     ax, 250Eh
                int     21h             ; DOS - SET INTERRUPT VECTOR
                                        ; AL = interrupt number
                                        ; DS:DX = new vector to be used for specified interrupt
                pop     es
                retn
GetInt0E        endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


RestoreInt0E    proc near               ; CODE XREF: sub_174C6+31p
                cli
                push    ds
                push    es
                mov     dx, OldInt0EOff
                mov     ds, OldInt0ESeg
                assume ds:nothing
                mov     ax, 250Eh
                int     21h             ; DOS - SET INTERRUPT VECTOR
                                        ; AL = interrupt number
                                        ; DS:DX = new vector to be used for specified interrupt
                pop     es
                pop     ds
                retn
RestoreInt0E    endp

; ---------------------------------------------------------------------------

Int0E_Entry:                            ; DATA XREF: GetInt0E+11o
                sti                     ; IRQ6 - Diskette controller.
                push    ds
                push    ax
                mov     ax, seg bdata
                mov     ds, ax
                assume ds:bdata
                or      dsk_recal_stat, 80h ; Recalibrate floppy drive bits
                                        ;    3       2       1       0
                                        ; drive-3 drive-2 drive-1 drive-0
                                        ;
                                        ; bit 7 = interrupt flag
                push    bx

loc_1766F:                              ; CODE XREF: seg001:7699j
                pushf
                cli
                mov     al, 6           ; Latch timer 0 count.
                                        ; Controller ignores lower nibble this command,
                                        ; unknown why 06h used rather than 0h.
                out     43h, al         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                mov     bl, al
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                mov     bh, al
                mov     al, 6           ; Latch timer 0 count.
                                        ; Controller ignores lower nibble this command,
                                        ; unknown why 06h used rather than 0h.
                out     43h, al         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                mov     ah, al
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                popf
                xchg    ah, al
                sub     ax, bx
                cmp     ah, 0
                jz      short loc_1766F
                neg     bx
                mov     ax, bx
                sub     ax, cs:word_15F80
                pop     bx
                mov     cs:word_15FAF, ax
                mov     al, 66h ; 'f'
                out     20h, al         ; Interrupt controller, 8259A.
                pop     ax
                pop     ds
                assume ds:nothing
                iret

; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_176B0       proc near               ; CODE XREF: sub_174FB+61p
                cli
                in      al, 21h         ; Interrupt controller, 8259A.
                mov     ds:byte_161B9, al
                in      al, 0A1h        ; Interrupt Controller #2, 8259A
                mov     ds:byte_161BA, al
                mov     al, 0BFh ; '+'
                out     21h, al         ; Interrupt controller, 8259A.
                sti
                push    dx
                push    ds
                mov     dl, ds:CurrentDrive
                mov     dh, ds:CurrentSide
                mov     ax, seg bdata
                mov     ds, ax
                assume ds:bdata
                mov     ah, 4Ah ; 'J'   ; Diskette controller command 4Ah
                                        ; Read ID
                call    DisketteCommand
                mov     ah, dh
                shl     ah, 1
                shl     ah, 1
                and     ah, 4
                or      ah, dl
                sti
                call    DisketteCommand
                hlt
                cli
                mov     al, cs:byte_161B9
                out     21h, al         ; Interrupt controller, 8259A.
                mov     al, cs:byte_161BA
                out     0A1h, al        ; Interrupt Controller #2, 8259A
                sti
                call    SaveCtlrReturnCd
                clc
                pop     ds
                assume ds:nothing
                pop     dx
                retn
sub_176B0       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_176F9       proc near               ; CODE XREF: ReadWrite+14Ep
                cmp     ds:byte_167D4, 0
                jz      short loc_17702
                clc
                retn
; ---------------------------------------------------------------------------

loc_17702:                              ; CODE XREF: sub_176F9+5j
                mov     ax, 203h
                mov     cx, 1
                mov     dh, 0
                mov     dl, ds:CurrentDrive
                mov     bx, offset unk_161CA
                push    cs
                pop     es
                assume es:seg001
                call    sub_17851
                jnb     short loc_17732
                mov     ah, 0
                int     13h             ; DISK - RESET DISK SYSTEM
                                        ; DL = drive (if bit 7 is set both hard disks and floppy disks reset)

loc_1771C:                              ; CODE XREF: sub_176F9+C3j
                clc

loc_1771D:                              ; CODE XREF: sub_176F9+4Fj
                pushf
                mov     ax, 0
                push    cs
                pop     es
                mov     di, offset unk_161CA
                mov     cx, 300h
                rep stosw
                mov     ds:byte_167D4, 0FEh ; '¦'
                popf
                retn
; ---------------------------------------------------------------------------

loc_17732:                              ; CODE XREF: sub_176F9+1Dj
                cmp     ds:byte_15FA7, 0FFh
                jnz     short loc_1774A
                push    ds
                mov     ax, seg bdata
                mov     ds, ax
                assume ds:bdata
                mov     al, dsk_data_rate ; Last data rate for diskette
                                        ;  bits 7 & 6 = 00 for 500K bit/sec
                                        ;             = 01 for 300K bit/sec
                                        ;             = 10 for 250K bit/sec
                                        ;             = 11 for 1M bit/sec
                                        ;  bits 5 & 4 = step rateRate at start of operation
                                        ;  bits 3 & 2 = 00 for 500K bit/sec
                                        ;             = 01 for 300K bit/sec
                                        ;             = 10 for 250K bit/sec
                                        ;             = 11 for 1M bit/sec
                pop     ds
                assume ds:nothing
                and     al, 0C0h
                jnz     short loc_1774A
                stc
                jmp     short loc_1771D
; ---------------------------------------------------------------------------

loc_1774A:                              ; CODE XREF: sub_176F9+3Ej
                                        ; sub_176F9+4Cj
                cmp     ds:byte_161D5, 0
                jnz     short loc_177B5
                cmp     ds:word_161D8, 1
                jnz     short loc_177B5
                mov     ax, ds:word_161E2
                cmp     ax, 0Ah
                ja      short loc_177B5
                cmp     ax, 0
                jz      short loc_177B5
                mov     ds:word_167CC, ax
                mov     ax, ds:word_161E4
                cmp     ax, 2
                ja      short loc_177B5
                cmp     ax, 0
                jz      short loc_177B5
                mov     ds:word_167CA, ax
                mov     al, ds:byte_161D7
                cmp     al, 2
                ja      short loc_177B5
                cmp     al, 0
                jz      short loc_177B5
                mov     ah, 0
                mov     ds:word_167CE, ax
                mov     al, ds:byte_161DA
                mul     ds:byte_161E0
                mov     bx, ax
                mov     ax, ds:word_161DB
                mov     cl, 4
                shr     ax, cl
                add     ax, bx
                inc     ax
                mov     ds:word_167D0, ax
                mov     ax, ds:word_161DD
                mov     cx, ds:word_167CC
                div     cl
                mov     cx, ds:word_167CA
                div     cl
                mov     ah, 0
                mov     ds:word_167D2, ax
                jmp     short loc_177ED
; ---------------------------------------------------------------------------
                db 90h
; ---------------------------------------------------------------------------

loc_177B5:                              ; CODE XREF: sub_176F9+56j
                                        ; sub_176F9+5Dj sub_176F9+65j
                                        ; sub_176F9+6Aj sub_176F9+75j
                                        ; sub_176F9+7Aj sub_176F9+84j
                                        ; sub_176F9+88j
                cmp     ds:byte_163CA, 0F9h ; '·'
                jnb     short loc_177BF
                jmp     loc_1771C
; ---------------------------------------------------------------------------

loc_177BF:                              ; CODE XREF: sub_176F9+C1j
                mov     bh, 0
                mov     bl, ds:byte_163CA
                sub     bl, 0F9h ; '·'
                mov     al, byte ptr ds:unk_167D6[bx]
                mov     ah, 0
                mov     ds:word_167CC, ax
                mov     al, byte ptr ds:unk_167DD[bx]
                mov     ds:word_167CA, ax
                mov     al, byte ptr ds:unk_167E4[bx]
                mov     ds:word_167D0, ax
                mov     al, byte ptr ds:unk_167EB[bx]
                mov     ds:word_167CE, ax
                mov     al, byte ptr ds:unk_167F2[bx]
                mov     ds:word_167D2, ax

loc_177ED:                              ; CODE XREF: sub_176F9+B9j
                mov     di, offset unk_161CA
                mov     cx, 80h ; 'Ç'
                mov     ax, 0
                push    cs
                pop     es
                rep stosw
                mov     cx, 0
                mov     dx, 0
                mov     bx, 1

loc_17803:                              ; CODE XREF: sub_176F9+131j
                                        ; sub_176F9+142j sub_176F9+14Fj
                call    sub_17876
                push    bx
                mov     bx, cx
                shl     bx, 1
                add     bx, dx
                cmp     ax, 0FF7h
                jnz     short loc_17821
                mov     byte ptr ds:unk_161CA[bx], 2
                cmp     bx, 2
                jb      short loc_17821
                mov     byte ptr ds:unk_161C8[bx], 1

loc_17821:                              ; CODE XREF: sub_176F9+117j
                                        ; sub_176F9+121j
                pop     bx
                add     bx, ds:word_167CE
                cmp     bx, ds:word_167CC
                jbe     short loc_17803
                sub     bx, ds:word_167CC
                cmp     ds:word_167CA, 1
                jz      short loc_1783D
                inc     dx
                cmp     dx, 2
                jb      short loc_17803

loc_1783D:                              ; CODE XREF: sub_176F9+13Cj
                mov     bx, 1
                mov     dx, 0
                inc     cx
                cmp     cx, ds:word_167D2
                jb      short loc_17803
                mov     ds:byte_167D4, 0FFh
                clc
                retn
sub_176F9       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_17851       proc near               ; CODE XREF: sub_176F9+1Ap
                mov     ds:word_161BB, ax
                int     13h             ; INT 13 - DISK - READ SECTOR(S) INTO MEMORY
                                        ;         AH = 02h
                                        ;         AL = number of sectors to read (must be nonzero)
                                        ;         CH = low eight bits of cylinder number
                                        ;         CL = sector number 1-63 (bits 0-5)
                                        ;              high two bits of cylinder (bits 6-7, hard disk only)
                                        ;         DH = head number
                                        ;         DL = drive number (bit 7 set for hard disk)
                                        ;         ES:BX -> data buffer
                                        ; Return: CF set on error
                                        ;             if AH = 11h (corrected ECC error), AL = burst length
                                        ;         CF clear if successful
                                        ;         AH = status (see #00234)
                                        ;         AL = number of sectors transferred (only valid if CF set for some
                                        ;               BIOSes)
                jnb     short locret_17875
                cmp     ds:byte_15FA7, 0FFh
                jnz     short loc_17869
                call    sub_16BDA
                mov     ax, ds:word_161BB
                int     13h             ; DISK -
                jnb     short locret_17875

loc_17869:                              ; CODE XREF: sub_17851+Cj
                cmp     ah, 6
                jnz     short loc_17874
                mov     ax, ds:word_161BB
                int     13h             ; DISK -
                retn
; ---------------------------------------------------------------------------

loc_17874:                              ; CODE XREF: sub_17851+1Bj
                stc

locret_17875:                           ; CODE XREF: sub_17851+5j
                                        ; sub_17851+16j
                retn
sub_17851       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_17876       proc near               ; CODE XREF: sub_176F9+10Ap
                push    bx
                push    cx
                push    dx
                call    sub_1789E
                cmp     ax, 0
                jz      short loc_17897
                mov     dx, ax
                shr     ax, 1
                add     ax, dx
                mov     bx, ax
                mov     ax, word ptr ds:byte_163CA[bx]
                test    dx, 1
                jz      short loc_17897
                mov     cl, 4
                shr     ax, cl

loc_17897:                              ; CODE XREF: sub_17876+9j
                                        ; sub_17876+1Bj
                and     ah, 0Fh
                pop     dx
                pop     cx
                pop     bx
                retn
sub_17876       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1789E       proc near               ; CODE XREF: sub_17876+3p
                push    si
                push    di
                push    bx
                push    cx
                push    dx
                mov     ax, dx
                mul     ds:word_167CC
                dec     bx
                add     ax, bx
                adc     dx, 0
                mov     si, ax
                mov     di, dx
                mov     ax, ds:word_167CA
                mul     ds:word_167CC
                mul     cx
                add     ax, si
                adc     dx, di
                sub     ax, ds:word_167D0
                sbb     dx, 0
                jb      short loc_178D3
                div     ds:word_167CE
                inc     ax
                inc     ax
                clc
                jmp     short loc_178D5
; ---------------------------------------------------------------------------
                db 90h
; ---------------------------------------------------------------------------

loc_178D3:                              ; CODE XREF: sub_1789E+29j
                xor     ax, ax

loc_178D5:                              ; CODE XREF: sub_1789E+32j
                pop     dx
                pop     cx
                pop     bx
                pop     di
                pop     si
                retn
sub_1789E       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


ClearTimer0     proc near               ; CODE XREF: sub_15662+B7p
                                        ; sub_1588A+2p sub_15A5E+2Ep
                                        ; sub_16C65+Bp sub_16C65+4Bp
                                        ; sub_16E78+1Bp sub_174FB+1p
                                        ; sub_18715+4p sub_18A07+81p
                                        ; sub_18A07+54Dp ReadTrack+24p
                mov     al, 36h ; '6'   ; timer 0 16 bit mode
                out     43h, al         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                mov     al, 0
                out     40h, al         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                out     40h, al         ; Timer 8253-5 (AT: 8254.2).
                retn
ClearTimer0     endp

; ---------------------------------------------------------------------------
                db    0 ;
                db    8 ;
                db    0 ;
                db    0 ;
word_178EE      dw 0                    ; DATA XREF: SetCursorPos+Cw
word_178F0      dw 0                    ; DATA XREF: UpdateTrkProgDisp+1Dr
                                        ; UpdateTrkProgDisp+22w
                                        ; UpdateTrkProgDisp+42w
                                        ; UpdateTrkProgDisp+5Fw DisplayChar+Dr
                                        ; DisplayChar+63r seg001:7BACw
                                        ; sub_17BB5w sub_17BBEw seg001:7BC7w
                                        ; ClearScreenw ClearScreen+12r
                                        ; sub_17C5F+9r
unk_178F2       db    0 ;               ; DATA XREF: DisplayChar+16r
                                        ; DisplayChar+34r DisplayChar+70r
                                        ; ClearScreen+16r ClearScreen+25r
                db    0 ;
unk_178F4       db  4Fh ; O             ; DATA XREF: DisplayChar+6Ar
                                        ; ClearScreen+1Ar sub_17C5F+1Ar
unk_178F5       db  18h ;               ; DATA XREF: DisplayChar+76r
                                        ; DisplayChar+7Cr
                db    0 ;
                db    0 ;
                db  4Fh ; O
                db    4 ;
                db    0 ;
                db    4 ;
                db  4Fh ; O
                db  12h ;
                db    0 ;
                db  14h ;
                db  4Fh ; O
                db  18h ;
                db    0 ;
                db  0Dh ;
                db  4Fh ; O
                db  12h ;
                db    0 ;
                db    0 ;
word_17908      dw 0                    ; DATA XREF: sub_17E21w sub_17E21+43r
byte_1790A      db 0                    ; DATA XREF: sub_17E21+4w sub_17EB9r
                                        ; sub_17EB9+1Br sub_17EB9+2Cr
                                        ; sub_17EB9+3Dr sub_17EB9+4Er
word_1790B      dw 0                    ; DATA XREF: sub_17C89w seg001:7C92w
                                        ; sub_17C9Bw sub_17C9B+1Fr
                                        ; sub_17CCA+9w sub_17CCA+36r
                                        ; sub_17D41+Cw sub_17D41+32r
                                        ; sub_17C9B+18r sub_17CCA+2Fr
word_1790D      dw 0                    ; DATA XREF: sub_17C9B+6w sub_17C9B+9r
word_1790F      dw 0                    ; DATA XREF: sub_17CCA+Fw
                                        ; sub_17CCA+19r sub_17D41+12w
                                        ; sub_17D41+1Cr
byte_17911      db 0                    ; DATA XREF: sub_17CCA+5w
                                        ; sub_17CCA+58r sub_17D41+8w
                                        ; sub_17D41+A7r
byte_17912      db 0                    ; DATA XREF: sub_17CCA+1w
                                        ; sub_17CCA+5Er sub_17D41+4w
                                        ; sub_17D41+ADr
VideoAttribute  db 37h                  ; DATA XREF: sub_12E04+3Dw
                                        ; sub_12E04+4Bw sub_12E04+99w
                                        ; sub_12E04+A7w sub_12F2E+6Dw
                                        ; sub_12F2E+85w sub_12F2E+E8w
                                        ; sub_12F2E+F8w sub_17AA6+4w
                                        ; sub_17AAF+4w seg001:7ADEw
                                        ; DisplayChar+41r ClearScreen+Fw
                                        ; Sets color of displayed characters.
                                        ; Bitfields for character's display attribute:
                                        ; Bit(s)           Description
                                        ;  7               foreground blink or (alternate) background bright
                                        ;  6-4             background color
                                        ;  3               foreground bright or (alternate) alternate character set
                                        ;  2-0             foreground color
                                        ;
                                        ; Values for character color:
                                        ;                 Normal             Bright
                                        ;  000b           black              dark gray
                                        ;  001b           blue               light blue
                                        ;  010b           green              light green
                                        ;  011b           cyan               light cyan
                                        ;  100b           red                light red
                                        ;  101b           magenta            light magenta
                                        ;  110b           brown              yellow
                                        ;  111b           light gray         white
ColorMono       db 0                    ; DATA XREF: _Main+7w _Main+16w
                                        ; GetCmdLnArgs+6Fw DisplayChar+4Dr
                                        ; Calls for monochrome screen if 0, color if 1
byte_17915      db 0                    ; DATA XREF: sub_17D41+5Dw
                                        ; sub_17D41+7Fr sub_17D41+8Ew
                                        ; sub_17D41+95r
byte_17916      db 0                    ; DATA XREF: sub_17D41+62w
                                        ; sub_17D41+98r
byte_17917      db 0                    ; DATA XREF: sub_17C9B+22r
                                        ; sub_17CCA+65r sub_17D41+40r
                                        ; sub_17E21+62w sub_17E21+7Cw
byte_17918      db 0                    ; DATA XREF: sub_17C9B+11r
                                        ; sub_17CCA+28r sub_17D41+2Br
                                        ; sub_17D41+67r seg001:7E1Cr
                                        ; sub_17E21+6Dw sub_17E21+8Dw
byte_17919      db 0                    ; DATA XREF: sub_17CCA+3Fr
                                        ; sub_17CCA+50r
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
NumDsksScratch  db 0Ah dup(0)           ; DATA XREF: DisplayNumDsks+8w
                                        ; DisplayNumDsks+19w
                                        ; DisplayNumDsks+23r
                                        ; Hex to decimal string decode area
                                        ; for display of number of disks.
                db 0CDh ; -
                db  20h ;

; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


DisplayHex      proc near               ; CODE XREF: DisplayDMA_Port+23p
                                        ; seg001:39AFp DispReadLngth+31p
                                        ; DispReadLngth+44p DispWritLngth+31p
                                        ; DispWritLngth+44p
                cld
                push    cx
                mov     cx, 4
                push    ax

loc_17A2A:                              ; CODE XREF: DisplayHex+1Dj
                pop     ax
                rol     ax, 1
                rol     ax, 1
                rol     ax, 1
                rol     ax, 1
                push    ax
                and     al, 0Fh
                cmp     al, 9
                jbe     short loc_17A3C
                add     al, 7

loc_17A3C:                              ; CODE XREF: DisplayHex+14j
                add     al, '0'
                call    DisplayChar
                loop    loc_17A2A
                pop     ax
                pop     cx
                retn
DisplayHex      endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


DisplayHexTrack proc near               ; CODE XREF: sub_12F2E+19p
                                        ; sub_12F2E+3Fp sub_12F2E+5Bp
                                        ; sub_12F2E+73p sub_12F2E+7Fp
                                        ; sub_12F2E+A7p sub_12F2E+D6p
                                        ; sub_12F2E+F2p sub_12F2E+112p
                                        ; sub_1331E+24p sub_1331E+30p
                                        ; sub_1331E+3Cp sub_13802+1Bp
                                        ; sub_17DF9+11p sub_17DF9+1Fp
                cld
                push    cx
                mov     cx, 2
                push    ax

loc_17A4C:                              ; CODE XREF: DisplayHexTrack+1Dj
                pop     ax
                rol     al, 1
                rol     al, 1
                rol     al, 1
                rol     al, 1
                push    ax
                and     al, 0Fh
                cmp     al, 9
                jbe     short loc_17A5E
                add     al, 7

loc_17A5E:                              ; CODE XREF: DisplayHexTrack+14j
                add     al, '0'
                call    DisplayChar
                loop    loc_17A4C
                pop     ax
                pop     cx
                retn
DisplayHexTrack endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


DisplayDecByte  proc near               ; CODE XREF: DispReadLngth+3Bp
                                        ; DispReadLngth+51p DispWritLngth+3Bp
                                        ; DispWritLngth+51p
                push    ax
                cmp     al, 9
                jbe     short loc_17A6F
                add     al, 7

loc_17A6F:                              ; CODE XREF: DisplayDecByte+3j
                add     al, '0'
                call    DisplayChar
                pop     ax
                retn
DisplayDecByte  endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


DisplayNumDsks  proc near               ; CODE XREF: DispGoodBadDsks+Fp
                                        ; DispGoodBadDsks+21p
                push    ax
                push    bx
                push    dx
                push    di
                push    bp
                mov     di, 6
                mov     ds:NumDsksScratch[di], 24h ; '$'
                mov     bx, 0Ah

loc_17A86:                              ; CODE XREF: DisplayNumDsks+21j
                xor     dx, dx
                div     bx
                xchg    al, dl
                add     al, 30h ; '0'
                dec     di
                mov     ds:NumDsksScratch[di], al
                mov     al, dl
                or      ax, ax
                jnz     short loc_17A86
                lea     dx, NumDsksScratch[di]
                call    DecodeString
                pop     bp
                pop     di
                pop     dx
                pop     bx
                pop     ax
                retn
DisplayNumDsks  endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_17AA6       proc near               ; CODE XREF: UpdateTrkProgDisp+38p
                push    ax
                mov     al, ds:byte_1949B
                mov     ds:VideoAttribute, al
                pop     ax
                retn
sub_17AA6       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_17AAF       proc near               ; CODE XREF: UpdateTrkProgDisp+32p
                push    ax
                mov     al, ds:byte_1949C
                mov     ds:VideoAttribute, al
                pop     ax
                retn
sub_17AAF       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


DecodeString    proc near               ; CODE XREF: DisplayNumDsks+27p
                                        ; DisplayString+Bp
                push    ax
DecodeString    endp

                push    cx
                push    si
                push    dx
                mov     si, dx
                mov     cx, 800h

loc_17AC1:                              ; CODE XREF: seg001:7AD6j
                cld
                lodsb
                cmp     al, 7Ch ; '|'
                jz      short ChangeAttribute
                cmp     al, 1Dh
                jz      short MoveCursor
                cmp     al, 24h ; '$'
                jz      short EndOfString
                or      al, al
                jz      short EndOfString
                call    DisplayChar

loc_17AD6:                              ; CODE XREF: seg001:7AE1j seg001:7AECj
                loop    loc_17AC1

EndOfString:                            ; CODE XREF: seg001:7ACDj seg001:7AD1j
                pop     dx
                pop     si
                pop     cx
                pop     ax
                retn
; ---------------------------------------------------------------------------

ChangeAttribute:                        ; CODE XREF: seg001:7AC5j
                lodsb
                mov     ds:VideoAttribute, al
                jmp     short loc_17AD6
; ---------------------------------------------------------------------------

MoveCursor:                             ; CODE XREF: seg001:7AC9j
                call    ReadCursorPos
                lodsb
                mov     dl, al
                call    SetCursorPos
                jmp     short loc_17AD6

; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_17AEE       proc near               ; CODE XREF: seg001:7AFBp sub_17DF9+9p
                push    ax
                mov     al, 20h ; ' '
                call    DisplayChar
                pop     ax
                retn
sub_17AEE       endp

; ---------------------------------------------------------------------------

loc_17AF6:                              ; CODE XREF: sub_17DF9+Ej
                push    cx
                mov     cl, al
                mov     ch, 0

loc_17AFB:                              ; CODE XREF: seg001:7AFEj
                call    sub_17AEE
                loop    loc_17AFB
                pop     cx
                retn

; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


DisplayChar     proc near               ; CODE XREF: sub_12E04+2Bp
                                        ; sub_12E04+45p sub_12E04+6Cp
                                        ; sub_12E04+87p sub_12E04+A1p
                                        ; sub_12E04+C5p sub_12F2E+12Cp
                                        ; sub_12F2E+157p sub_12F2E+161p
                                        ; sub_12F2E+166p sub_1331E+Cp
                                        ; sub_1331E+18p sub_1331E+4Ap
                                        ; sub_1331E+4Fp sub_1331E+54p
                                        ; DisplayDMA_Port+17p
                                        ; UpdateTrkProgDisp+35p
                                        ; DispReadLngth+36p DispReadLngth+49p
                                        ; DispWritLngth+36p DispWritLngth+49p
                                        ; DisplayHex+1Ap DisplayHexTrack+1Ap
                                        ; DisplayDecByte+9p seg001:7AD3p
                                        ; sub_17AEE+3p sub_17DF9+6p
                                        ; sub_17DF9+1Ap sub_17E21+92p
                push    ax              ; Displays a character with color attribute.
                push    bx
                push    cx
                push    dx
                push    si
                push    bp
                push    ax
                mov     ah, 3
                mov     bh, 0
                int     10h             ; - VIDEO - READ CURSOR POSITION
                                        ; BH = page number
                                        ; Return: DH,DL = row,column, CH = cursor start line, CL = cursor end line
                mov     si, ds:word_178F0
                pop     ax
                cmp     al, 0Dh
                jnz     short loc_17B1F
                mov     dl, byte ptr ds:unk_178F2[si]
                jmp     short loc_17B82
; ---------------------------------------------------------------------------
                db 90h
; ---------------------------------------------------------------------------

loc_17B1F:                              ; CODE XREF: DisplayChar+14j
                cmp     al, 0Ah
                jnz     short loc_17B28
                inc     dh
                jmp     short loc_17B6C
; ---------------------------------------------------------------------------
                align 2

loc_17B28:                              ; CODE XREF: DisplayChar+1Fj
                cmp     al, 7
                jnz     short loc_17B32
                call    Beep
                jmp     short loc_17B82
; ---------------------------------------------------------------------------
                align 2

loc_17B32:                              ; CODE XREF: DisplayChar+28j
                cmp     al, 8
                jnz     short loc_17B41
                cmp     dl, byte ptr ds:unk_178F2[si]
                jz      short loc_17B82
                dec     dl
                jmp     short loc_17B82
; ---------------------------------------------------------------------------
                db 90h
; ---------------------------------------------------------------------------

loc_17B41:                              ; CODE XREF: DisplayChar+32j
                mov     bh, 0
                mov     bl, ds:VideoAttribute
                sub     bl, ds:byte_1949D
                mov     ah, byte ptr ds:unk_1949E[bx]
                cmp     ds:ColorMono, 0
                jnz     short loc_17B5A
                mov     ah, ds:byte_194AE[bx]

loc_17B5A:                              ; CODE XREF: DisplayChar+52j
                mov     bl, ah
                mov     cx, 1
                mov     ah, 9
                int     10h             ; - VIDEO - WRITE ATTRIBUTES/CHARACTERS AT CURSOR POSITION
                                        ; AL = character, BH = display page
                                        ; BL = attributes of character (alpha modes) or color (graphics modes)
                                        ; CX = number of times to write character
                inc     dl
                cmp     ds:word_178F0, 0Ch
                jz      short loc_17B82

loc_17B6C:                              ; CODE XREF: DisplayChar+23j
                cmp     dl, byte ptr ds:unk_178F4[si]
                jbe     short loc_17B78
                mov     dl, byte ptr ds:unk_178F2[si]
                inc     dh

loc_17B78:                              ; CODE XREF: DisplayChar+6Ej
                cmp     dh, byte ptr ds:unk_178F5[si]
                jbe     short loc_17B82
                mov     dh, byte ptr ds:unk_178F5[si]

loc_17B82:                              ; CODE XREF: DisplayChar+1Aj
                                        ; DisplayChar+2Dj DisplayChar+38j
                                        ; DisplayChar+3Cj DisplayChar+68j
                                        ; DisplayChar+7Aj
                call    SetCursorPos
                pop     bp
                pop     si
                pop     dx
                pop     cx
                pop     bx
                pop     ax
                retn
DisplayChar     endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


SetCursorPos    proc near               ; CODE XREF: _Main+119p _Main+1ADp
                                        ; _Main+1CEp _Main+208p _Main+21Bp
                                        ; _Main+227p DuplicatorCommand+Cp
                                        ; DuplicatorCommand+18p sub_12E04+15p
                                        ; sub_12E04+37p sub_12E04+52p
                                        ; sub_12E04+69p sub_12E04+93p
                                        ; sub_12E04+AEp sub_12E04+C2p
                                        ; sub_12F2E+3p sub_12F2E+26p
                                        ; sub_12F2E+3Cp sub_12F2E+67p
                                        ; sub_12F2E+79p sub_12F2E+8Cp
                                        ; sub_12F2E+A4p sub_12F2E+E2p
                                        ; sub_12F2E+FFp sub_12F2E+10Fp
                                        ; sub_12F2E+139p sub_12F2E+152p
                                        ; sub_12F2E+174p sub_12F2E+195p
                                        ; sub_12F2E+1B1p sub_12F2E+1DAp
                                        ; sub_12F2E+1F6p sub_12F2E+21Fp
                                        ; sub_12F2E+23Bp sub_12F2E+269p
                                        ; sub_12F2E+285p sub_132D3+7p
                                        ; ClrMessageWndw+6p sub_1331E+A3p
                                        ; ReadWrite+10Fp ReadWrite+268p
                                        ; sub_13802+15p DisplayDMA_Port+3p
                                        ; DisplayDMA_Port+Fp
                                        ; DisplayDMA_Port+1Dp
                                        ; DispGoodBadDsks+3p
                                        ; DispGoodBadDsks+15p
                                        ; UpdateTrkProgDisp+1Ap
                                        ; UpdateTrkProgDisp+4Bp seg001:39A3p ...
                push    ax
                push    bx
                push    bp
                mov     bh, 0
                mov     ah, 2
                int     10h             ; - VIDEO - SET CURSOR POSITION
                                        ; DH,DL = row, column (0,0 = upper left)
                                        ; BH = page number
                pop     bp
                pop     bx
                pop     ax
                mov     ds:word_178EE, dx
                retn
SetCursorPos    endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


ReadCursorPos   proc near               ; CODE XREF: sub_12E04+1Ep
                                        ; sub_12E04+7Ap sub_12F2E+Cp
                                        ; sub_12F2E+4Ep sub_12F2E+B6p
                                        ; sub_12F2E+120p sub_12F2E+169p
                                        ; sub_12F2E+17Dp sub_12F2E+1C2p
                                        ; sub_12F2E+207p sub_12F2E+251p
                                        ; seg001:7AE3p sub_17C5F+5p
                                        ; sub_17CCA+Cp sub_17D41+Fp
                push    ax
                push    bx
                push    bp
                push    cx
                mov     ah, 3
                mov     bh, 0
                int     10h             ; - VIDEO - READ CURSOR POSITION
                                        ; BH = page number
                                        ; Return: DH,DL = row,column, CH = cursor start line, CL = cursor end line
                pop     cx
                pop     bp
                pop     bx
                pop     ax
                retn
ReadCursorPos   endp

; ---------------------------------------------------------------------------
                mov     ds:word_178F0, 4
                jmp     short loc_17BD6
; ---------------------------------------------------------------------------
                db 90h

; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_17BB5       proc near               ; CODE XREF: _Main+103p sub_1331Ep
                mov     ds:word_178F0, 8
                jmp     short loc_17BD6
sub_17BB5       endp

; ---------------------------------------------------------------------------
                align 2

; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_17BBE       proc near               ; CODE XREF: _Main+162p _Main+1C8p
                                        ; sub_1331E+97p DisplayTracksp
                mov     ds:word_178F0, 0Ch
                jmp     short loc_17BD6
sub_17BBE       endp

; ---------------------------------------------------------------------------
                db  90h ; É
; ---------------------------------------------------------------------------
                mov     ds:word_178F0, 10h
                jmp     short loc_17BD6
; ---------------------------------------------------------------------------
                db  90h ; É

; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


ClearScreen     proc near               ; CODE XREF: _Main+1Bp _Main+DDp
                                        ; _Main+23Ep
                mov     ds:word_178F0, 0

loc_17BD6:                              ; CODE XREF: seg001:7BB2j sub_17BB5+6j
                                        ; sub_17BBE+6j seg001:7BCDj
                push    ax
                push    bx
                push    cx
                push    dx
                push    si
                push    bp
                mov     al, ds:byte_1949B
                mov     ds:VideoAttribute, al
                mov     si, ds:word_178F0
                mov     cx, word ptr ds:unk_178F2[si]
                mov     dx, word ptr ds:unk_178F4[si]
                mov     bh, 7
                mov     ax, 700h
                int     10h             ; - VIDEO - SCROLL PAGE DOWN
                                        ; AL = number of lines to scroll window (0 = blank whole window)
                                        ; BH = attributes to be used on blanked lines
                                        ; CH,CL = row,column of upper left corner of window to scroll
                                        ; DH,DL = row,column of lower right corner of window
                mov     dx, word ptr ds:unk_178F2[si]
                call    SetCursorPos
                pop     bp
                pop     si
                pop     dx
                pop     cx
                pop     bx
                pop     ax
                retn
ClearScreen     endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


Beep            proc near               ; CODE XREF: _Main+1E3p
                                        ; DisplayChar+2Ap sub_17C9B+28p
                                        ; sub_17CCA+16p sub_17D41+19p
                                        ; sub_17E21+59p
                push    ax
                push    bx
                push    cx
                push    dx
                push    si
                cli
                mov     al, 0B6h ; '¦'  ; timer 2 16 bit mode 3
                out     43h, al         ; Timer 8253-5 (AT: 8254.2).
                mov     dx, 400h
                mov     si, dx
                mov     ax, dx
                shr     si, 1
                shr     si, 1
                out     42h, al         ; Timer 8253-5 (AT: 8254.2).
                xchg    ah, al
                out     42h, al         ; Timer 8253-5 (AT: 8254.2).
                xchg    al, ah
                in      al, 61h         ; PC/XT PPI port B bits:
                                        ; 0: Tmr 2 gate --- OR 03H=spkr ON
                                        ; 1: Tmr 2 data -+  AND 0fcH=spkr OFF
                                        ; 3: 1=read high switches
                                        ; 4: 0=enable RAM parity checking
                                        ; 5: 0=enable I/O channel check
                                        ; 6: 0=hold keyboard clock low
                                        ; 7: 0=enable kbrd
                mov     bl, al
                or      al, 3
                out     61h, al         ; PC/XT PPI port B bits:
                                        ; 0: Tmr 2 gate --- OR 03H=spkr ON
                                        ; 1: Tmr 2 data -+  AND 0fcH=spkr OFF
                                        ; 3: 1=read high switches
                                        ; 4: 0=enable RAM parity checking
                                        ; 5: 0=enable I/O channel check
                                        ; 6: 0=hold keyboard clock low
                                        ; 7: 0=enable kbrd
                mov     cx, 2000h

loc_17C2B:                              ; CODE XREF: Beep+46j
                in      al, 62h         ; PC/XT PPI port C. Bits:
                                        ; 0-3: values of DIP switches
                                        ; 5: 1=Timer 2 channel out
                                        ; 6: 1=I/O channel check
                                        ; 7: 1=RAM parity check error occurred.
                and     al, 20h
                cmp     al, bh
                mov     bh, al
                jz      short loc_17C49
                or      al, al
                mov     ax, dx
                jz      short loc_17C3F
                sub     ax, si
                jmp     short loc_17C41
; ---------------------------------------------------------------------------

loc_17C3F:                              ; CODE XREF: Beep+36j
                add     ax, si

loc_17C41:                              ; CODE XREF: Beep+3Aj
                out     42h, al         ; Timer 8253-5 (AT: 8254.2).
                xchg    ah, al
                out     42h, al         ; Timer 8253-5 (AT: 8254.2).
                xchg    al, ah

loc_17C49:                              ; CODE XREF: Beep+30j
                loop    loc_17C2B
                mov     al, bl
                and     al, 0FCh
                out     61h, al         ; PC/XT PPI port B bits:
                                        ; 0: Tmr 2 gate --- OR 03H=spkr ON
                                        ; 1: Tmr 2 data -+  AND 0fcH=spkr OFF
                                        ; 3: 1=read high switches
                                        ; 4: 0=enable RAM parity checking
                                        ; 5: 0=enable I/O channel check
                                        ; 6: 0=hold keyboard clock low
                                        ; 7: 0=enable kbrd
                mov     cx, 3E8h
                sti

loc_17C55:                              ; CODE XREF: Beep+54j
                mul     ax
                loop    loc_17C55
                pop     si
                pop     dx
                pop     cx
                pop     bx
                pop     ax
                retn
Beep            endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_17C5F       proc near               ; CODE XREF: sub_17E21+78p
                push    dx
                push    ax
                push    bx
                push    si
                push    cx
                call    ReadCursorPos
                push    dx
                mov     si, ds:word_178F0

loc_17C6C:                              ; CODE XREF: sub_17C5F+1Ej
                mov     bh, 0
                mov     cx, 1
                mov     ah, 0Ah
                mov     al, 20h ; ' '
                int     10h             ; - VIDEO - WRITE CHARACTERS ONLY AT CURSOR POSITION
                                        ; AL = character, BH = display page - alpha mode
                                        ; BL = color of character (graphics mode, PCjr only)
                                        ; CX = number of times to write character
                inc     dl
                cmp     dl, byte ptr ds:unk_178F4[si]
                jb      short loc_17C6C
                pop     dx
                call    SetCursorPos
                pop     cx
                pop     si
                pop     bx
                pop     ax
                pop     dx
                retn
sub_17C5F       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_17C89       proc near               ; CODE XREF: sub_12F2E+141p
                mov     ds:word_1790B, ax
                mov     ax, 102h
                jmp     short loc_17CA1
sub_17C89       endp

; ---------------------------------------------------------------------------
                align 2
                mov     ds:word_1790B, ax
                mov     ax, 103h
                jmp     short loc_17CA1
; ---------------------------------------------------------------------------
                db 90h

; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_17C9B       proc near               ; CODE XREF: sub_12E04+56p
                                        ; sub_12E04+B2p
                mov     ds:word_1790B, ax
                mov     ax, 101h

loc_17CA1:                              ; CODE XREF: sub_17C89+6j seg001:7C98j
                mov     ds:word_1790D, ax

loc_17CA4:                              ; CODE XREF: sub_17C9B+2Bj
                mov     ax, ds:word_1790D
                call    sub_17E21
                jb      short loc_17CC8
                mov     al, ds:byte_17918
                cmp     al, 0Dh
                jnz     short loc_17CBD
                cmp     byte ptr ds:word_1790B+1, 0FFh
                jz      short loc_17CC3
                mov     al, byte ptr ds:word_1790B

loc_17CBD:                              ; CODE XREF: sub_17C9B+16j
                mov     ah, ds:byte_17917
                clc
                retn
; ---------------------------------------------------------------------------

loc_17CC3:                              ; CODE XREF: sub_17C9B+1Dj
                call    Beep
                jmp     short loc_17CA4
; ---------------------------------------------------------------------------

loc_17CC8:                              ; CODE XREF: sub_17C9B+Fj
                stc
                retn
sub_17C9B       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_17CCA       proc near               ; CODE XREF: sub_12F2E+30p
                                        ; sub_12F2E+98p sub_12F2E+103p
                push    dx
                mov     ds:byte_17912, bh
                mov     ds:byte_17911, bl
                mov     ds:word_1790B, ax
                call    ReadCursorPos
                mov     ds:word_1790F, dx
                jmp     short loc_17CEA
; ---------------------------------------------------------------------------
                align 2

loc_17CE0:                              ; CODE XREF: sub_17CCA+34j
                                        ; sub_17CCA+5Cj sub_17CCA+62j
                call    Beep
                mov     dx, ds:word_1790F
                call    SetCursorPos

loc_17CEA:                              ; CODE XREF: sub_17CCA+13j
                mov     ax, 200h
                call    sub_17E21
                jb      short loc_17D35
                mov     al, ds:byte_17918
                cmp     al, 0Dh
                jnz     short loc_17D06
                cmp     byte ptr ds:word_1790B+1, 0FFh
                jz      short loc_17CE0
                mov     al, byte ptr ds:word_1790B
                jmp     short loc_17D22
; ---------------------------------------------------------------------------
                align 2

loc_17D06:                              ; CODE XREF: sub_17CCA+2Dj
                call    sub_17D38
                cmp     ds:byte_17919, 0Dh
                jz      short loc_17D22
                mov     ah, al
                shl     ah, 1
                shl     ah, 1
                shl     ah, 1
                shl     ah, 1
                mov     al, ds:byte_17919
                call    sub_17D38
                or      al, ah

loc_17D22:                              ; CODE XREF: sub_17CCA+39j
                                        ; sub_17CCA+44j
                cmp     al, ds:byte_17911
                jb      short loc_17CE0
                cmp     al, ds:byte_17912
                ja      short loc_17CE0
                pop     dx
                mov     ah, ds:byte_17917
                clc
                retn
; ---------------------------------------------------------------------------

loc_17D35:                              ; CODE XREF: sub_17CCA+26j
                pop     dx
                stc
                retn
sub_17CCA       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_17D38       proc near               ; CODE XREF: sub_17CCA+3Cp
                                        ; sub_17CCA+53p sub_17D41+7Cp
                cmp     al, 39h ; '9'
                jbe     short loc_17D3E
                sub     al, 7

loc_17D3E:                              ; CODE XREF: sub_17D38+2j
                and     al, 0Fh
                retn
sub_17D38       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_17D41       proc near               ; CODE XREF: sub_12F2E+1A1p
                                        ; sub_12F2E+1E6p sub_12F2E+22Bp
                                        ; sub_12F2E+275p
                push    dx
                push    cx
                push    si
                push    di
                mov     ds:byte_17912, bh
                mov     ds:byte_17911, bl

loc_17D4D:
                mov     ds:word_1790B, ax
                call    ReadCursorPos
                mov     ds:word_1790F, dx
                jmp     short loc_17D64
; ---------------------------------------------------------------------------
                align 2

loc_17D5A:                              ; CODE XREF: sub_17D41+55j
                                        ; sub_17D41+72j sub_17D41+86j
                                        ; sub_17D41+B5j
                call    Beep
                mov     dx, ds:word_1790F
                call    SetCursorPos

loc_17D64:                              ; CODE XREF: sub_17D41+16j
                mov     ax, 506h
                call    sub_17E21
                jb      short loc_17D79
                mov     al, ds:byte_17918
                cmp     al, 0Dh
                jnz     short loc_17D8A
                mov     ax, ds:word_1790B
                jmp     short loc_17D7E
; ---------------------------------------------------------------------------
                db 90h
; ---------------------------------------------------------------------------

loc_17D79:                              ; CODE XREF: sub_17D41+29j
                stc
                jb      short loc_17D7F

loc_17D7C:                              ; CODE XREF: sub_17D41+4Dj
                                        ; sub_17D41+51j
                or      al, 20h

loc_17D7E:                              ; CODE XREF: sub_17D41+35j
                                        ; sub_17D41+B3j
                clc

loc_17D7F:                              ; CODE XREF: sub_17D41+39j
                mov     bl, ah
                mov     ah, ds:byte_17917
                pop     di
                pop     si
                pop     cx
                pop     dx
                retn
; ---------------------------------------------------------------------------

loc_17D8A:                              ; CODE XREF: sub_17D41+30j
                mov     ah, 0FFh
                cmp     al, 'Y'
                jz      short loc_17D7C
                cmp     al, 'N'
                jz      short loc_17D7C
                cmp     al, '-'
                jz      short loc_17D5A
                mov     si, 0
                mov     di, 0
                mov     ds:byte_17915, 0
                mov     ds:byte_17916, 0

loc_17DA8:                              ; CODE XREF: sub_17D41+76j
                                        ; sub_17D41+93j
                mov     al, ds:byte_17918[si]
                cmp     al, '-'
                jnz     short loc_17DB9
                cmp     di, 1
                jz      short loc_17D5A
                inc     di
                inc     si
                jmp     short loc_17DA8
; ---------------------------------------------------------------------------

loc_17DB9:                              ; CODE XREF: sub_17D41+6Dj
                cmp     al, 0Dh
                jz      short loc_17DD6
                call    sub_17D38
                mov     ah, ds:byte_17915[di]
                cmp     ah, 0Fh
                ja      short loc_17D5A
                mov     cl, 4
                shl     ah, cl
                or      al, ah
                mov     ds:byte_17915[di], al
                inc     si
                jmp     short loc_17DA8
; ---------------------------------------------------------------------------

loc_17DD6:                              ; CODE XREF: sub_17D41+7Aj
                mov     al, ds:byte_17915
                mov     ah, ds:byte_17916
                cmp     di, 1
                jz      short loc_17DE4
                mov     ah, al

loc_17DE4:                              ; CODE XREF: sub_17D41+9Fj
                cmp     al, ah
                ja      short loc_17DF6
                cmp     al, ds:byte_17911
                jb      short loc_17DF6
                cmp     ah, ds:byte_17912
                ja      short loc_17DF6
                jmp     short loc_17D7E
; ---------------------------------------------------------------------------

loc_17DF6:                              ; CODE XREF: sub_17D41+A5j
                                        ; sub_17D41+ABj sub_17D41+B1j
                jmp     loc_17D5A
sub_17D41       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_17DF9       proc near               ; CODE XREF: sub_12F2E+18Ep
                                        ; sub_12F2E+1B4p sub_12F2E+1D3p
                                        ; sub_12F2E+1F9p sub_12F2E+218p
                                        ; sub_12F2E+23Ep sub_12F2E+262p
                                        ; sub_12F2E+288p sub_1331E+64p
                                        ; sub_1331E+74p sub_1331E+84p
                                        ; sub_1331E+94p
                cmp     al, 'P'
                jb      short loc_17E0A
                and     al, 0DFh
                call    DisplayChar
                call    sub_17AEE

loc_17E05:                              ; CODE XREF: sub_17DF9+16j
                mov     al, 3
                jmp     loc_17AF6
; ---------------------------------------------------------------------------

loc_17E0A:                              ; CODE XREF: sub_17DF9+2j
                call    DisplayHexTrack
                cmp     al, bl
                jz      short loc_17E05
                mov     al, '-'
                call    DisplayChar
                mov     al, bl
                call    DisplayHexTrack
                retn
sub_17DF9       endp

; ---------------------------------------------------------------------------
                mov     al, ds:byte_17918[si]
                retn

; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_17E21       proc near               ; CODE XREF: sub_17C9B+Cp
                                        ; sub_17CCA+23p sub_17D41+26p
                mov     byte ptr ds:word_17908, ah
                mov     ds:byte_1790A, al
                mov     di, 0

loc_17E2B:                              ; CODE XREF: sub_17E21+5Cj
                                        ; sub_17E21+95j
                mov     ah, 0
                int     16h             ; KEYBOARD - READ CHAR FROM BUFFER, WAIT IF EMPTY
                                        ; Return: AH = scan code, AL = character
                cmp     ax, 0
                jnz     short loc_17E37
                jmp     short loc_17E7F
; ---------------------------------------------------------------------------
                db 90h
; ---------------------------------------------------------------------------

loc_17E37:                              ; CODE XREF: sub_17E21+11j
                cmp     al, 'a'
                jb      short loc_17E41
                cmp     al, 'z'
                ja      short loc_17E41
                and     al, 0DFh

loc_17E41:                              ; CODE XREF: sub_17E21+18j
                                        ; sub_17E21+1Cj
                cmp     ah, 'D'
                jz      short loc_17E7F
                cmp     ah, '<'
                jz      short loc_17E89
                cmp     al, 1Bh
                jz      short loc_17E81
                cmp     al, 'Q'
                jz      short loc_17E7F
                cmp     al, ' '
                jz      short loc_17E89
                cmp     al, 0Dh
                jz      short loc_17E8B
                cmp     al, 8
                jz      short loc_17EA3
                cmp     ah, 'u'
                jz      short loc_17EA3
                cmp     di, ds:word_17908
                jnb     short loc_17E7A
                cmp     ah, 'w'
                jnz     short loc_17E75
                mov     ah, 8
                mov     bh, 0
                int     10h             ; - VIDEO - READ ATTRIBUTES/CHARACTER AT CURSOR POSITION
                                        ; BH = display page
                                        ; Return: AL = character
                                        ; AH = attribute of character (alpha modes)

loc_17E75:                              ; CODE XREF: sub_17E21+4Cj
                call    sub_17EB9
                jnb     short loc_17EAE

loc_17E7A:                              ; CODE XREF: sub_17E21+47j
                                        ; sub_17E21+85j
                call    Beep
                jmp     short loc_17E2B
; ---------------------------------------------------------------------------

loc_17E7F:                              ; CODE XREF: sub_17E21+13j
                                        ; sub_17E21+23j sub_17E21+30j
                mov     al, 'D'

loc_17E81:                              ; CODE XREF: sub_17E21+2Cj
                mov     ah, al
                mov     ds:byte_17917, ah
                stc
                retn
; ---------------------------------------------------------------------------

loc_17E89:                              ; CODE XREF: sub_17E21+28j
                                        ; sub_17E21+34j
                mov     al, '<'

loc_17E8B:                              ; CODE XREF: sub_17E21+38j
                mov     ah, al
                push    ax
                mov     ds:byte_17918[di], 0Dh
                inc     di
                cmp     di, 1
                jz      short loc_17E9C
                call    sub_17C5F

loc_17E9C:                              ; CODE XREF: sub_17E21+76j
                pop     ax
                mov     ds:byte_17917, ah
                clc
                retn
; ---------------------------------------------------------------------------

loc_17EA3:                              ; CODE XREF: sub_17E21+3Cj
                                        ; sub_17E21+41j
                cmp     di, 0
                jz      short loc_17E7A
                dec     di
                mov     al, 8
                jmp     short loc_17EB3
; ---------------------------------------------------------------------------
                align 2

loc_17EAE:                              ; CODE XREF: sub_17E21+57j
                mov     ds:byte_17918[di], al
                inc     di

loc_17EB3:                              ; CODE XREF: sub_17E21+8Aj
                call    DisplayChar
                jmp     loc_17E2B
sub_17E21       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_17EB9       proc near               ; CODE XREF: sub_17E21+54p
                cmp     ds:byte_1790A, 0
                jnz     short loc_17ED4

loc_17EC0:                              ; CODE XREF: sub_17EB9+66j
                cmp     al, '0'
                jb      short loc_17ED2
                cmp     al, '9'
                jbe     short loc_17ED0
                cmp     al, 'A'
                jb      short loc_17ED2
                cmp     al, 'F'
                ja      short loc_17ED2

loc_17ED0:                              ; CODE XREF: sub_17EB9+Dj
                                        ; sub_17EB9+2Aj sub_17EB9+35j
                                        ; sub_17EB9+3Bj sub_17EB9+46j
                                        ; sub_17EB9+4Cj sub_17EB9+5Cj
                                        ; sub_17EB9+60j sub_17EB9+64j
                                        ; sub_17EB9+68j
                clc
                retn
; ---------------------------------------------------------------------------

loc_17ED2:                              ; CODE XREF: sub_17EB9+9j
                                        ; sub_17EB9+11j sub_17EB9+15j
                                        ; sub_17EB9+24j sub_17EB9+28j
                                        ; sub_17EB9+39j sub_17EB9+4Aj
                stc
                retn
; ---------------------------------------------------------------------------

loc_17ED4:                              ; CODE XREF: sub_17EB9+5j
                cmp     ds:byte_1790A, 1
                jnz     short loc_17EE5
                cmp     al, 'A'
                jb      short loc_17ED2
                cmp     al, 'Z'
                ja      short loc_17ED2
                jmp     short loc_17ED0
; ---------------------------------------------------------------------------

loc_17EE5:                              ; CODE XREF: sub_17EB9+20j
                cmp     ds:byte_1790A, 2
                jnz     short loc_17EF6
                cmp     al, '1'
                jz      short loc_17ED0
                cmp     al, '2'
                jnz     short loc_17ED2
                jmp     short loc_17ED0
; ---------------------------------------------------------------------------

loc_17EF6:                              ; CODE XREF: sub_17EB9+31j
                cmp     ds:byte_1790A, 3
                jnz     short loc_17F07
                cmp     al, 'Y'
                jz      short loc_17ED0
                cmp     al, 'N'
                jnz     short loc_17ED2
                jmp     short loc_17ED0
; ---------------------------------------------------------------------------

loc_17F07:                              ; CODE XREF: sub_17EB9+42j
                cmp     ds:byte_1790A, 6
                jnz     short loc_17F21
                cmp     di, 0
                jnz     short loc_17F1B
                cmp     al, 'Y'
                jz      short loc_17ED0
                cmp     al, 'N'
                jz      short loc_17ED0

loc_17F1B:                              ; CODE XREF: sub_17EB9+58j
                cmp     al, '-'
                jz      short loc_17ED0
                jmp     short loc_17EC0
; ---------------------------------------------------------------------------

loc_17F21:                              ; CODE XREF: sub_17EB9+53j
                jmp     short loc_17ED0
sub_17EB9       endp

; ---------------------------------------------------------------------------
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
SyncBytePtr     dw 0                    ; DATA XREF: sub_184FC+16w
                                        ; sub_184FC+28r sub_18594+16w
                                        ; sub_18594+28r sub_18603+5w
                                        ; sub_18603+18w sub_18603+22r
                                        ; points to start of sync bytes in track buffer
word_17F31      dw 0                    ; DATA XREF: sub_18603+9w
                                        ; sub_18603+12r sub_18603+1Cw
                                        ; sub_18603+26r
                db    0 ;
OldInt08Seg     dw 0                    ; DATA XREF: seg001:8439w seg001:8454r
OldInt08Off     dw 0                    ; DATA XREF: seg001:843Dw seg001:8450r
word_17F38      dw 0                    ; DATA XREF: seg001:93CFw seg001:9438r
                                        ; seg001:9487r
word_17F3A      dw 0                    ; DATA XREF: seg001:93D6w seg001:9447r
word_17F3C      dw 0                    ; DATA XREF: seg001:9381w seg001:9395r
                                        ; seg001:93B3r seg001:944Er
CRC_END         dw 0                    ; DATA XREF: CRC+4w CRC+28r
                                        ; End of data for CRC generation.
word_17F40      dw 0                    ; DATA XREF: sub_18A07+94w
                                        ; sub_18A07+EBr sub_18A07+102w
                                        ; sub_18A07+114r sub_18A07+12Bw
                                        ; sub_18A07+295r sub_18A07+2ACw
                                        ; sub_18A07+311r sub_18A07+328w
                                        ; sub_18A07+33Fr sub_18A07+356w
                                        ; sub_18A07+406r sub_18A07+41Dw
                                        ; sub_18A07+481r sub_18A07+498w
DMATrkBufOfs    dw 0                    ; DATA XREF: sub_18A07+1Aw
                                        ; sub_18A07+AAr ReadTrack+15w
                                        ; ReadTrack+45r
DMATrkBufSeg    dw 0                    ; DATA XREF: sub_18A07+16w
                                        ; sub_18A07+A6r ReadTrack+11w
                                        ; ReadTrack+41r
byte_17F46      db 0                    ; DATA XREF: sub_18715+Aw
                                        ; sub_18715+2B2w
byte_17F47      db 2 dup(0)             ; DATA XREF: sub_18715+1F0r
                                        ; sub_18A07+547w
word_17F49      dw 0                    ; DATA XREF: sub_18715+1A1w
                                        ; sub_18715+1E4r sub_18715+26Br
byte_17F4B      db 0                    ; DATA XREF: sub_18715+1A5w
                                        ; sub_18715+1E8r
word_17F4C      dw 0                    ; DATA XREF: sub_18715+1D9w
                                        ; sub_18715+1F7r sub_18715+27Fr
byte_17F4E      db 0                    ; DATA XREF: sub_18715+1DDw
                                        ; sub_18715+1ECr
byte_17F4F      db 0                    ; DATA XREF: sub_18A07+20w
                                        ; sub_18A07+5B2r
word_17F50      dw 0                    ; DATA XREF: sub_18A07+7Dw
                                        ; sub_18A07+28Fr sub_18A07+2CCr
                                        ; sub_18A07+36Dw sub_19028+33w
byte_17F52      db 0                    ; DATA XREF: sub_18715+1CBw
                                        ; sub_18715+274w sub_18715+278r
word_17F53      dw 0                    ; DATA XREF: sub_18A07+32w
                                        ; sub_19160+21r sub_19160+CAr
word_17F55      dw 0                    ; DATA XREF: sub_18A07+39w
                                        ; sub_18A07+6Aw sub_18A07+6Dw
                                        ; sub_18A07+9Ar
word_17F57      dw 0                    ; DATA XREF: sub_19160+34w
                                        ; sub_19160+41w sub_19160+5Br
word_17F59      dw 0                    ; DATA XREF: sub_19160+47w
                                        ; sub_19160+54r sub_19160+62w
byte_17F5B      db 0                    ; DATA XREF: sub_18321+44r
                                        ; sub_18321+4Ew
DMAReadCount    dw 0                    ; DATA XREF: ReadTrack+78w
                                        ; ReadTrack+84r
                db    0 ;
                db    0 ;
                db 0FFh ;
unk_17F61       db  3Fh ; ?             ; DATA XREF: sub_18634+1Co
                db 0CFh ; -
                db 0F3h ; =
                db 0FCh ; n
                db 0AAh ; ¬
                db 0A8h ; ¿
                db  2Ah ; *
                db 0AAh ; ¬
                db  82h ; é
                db 0AAh ; ¬
                db 0A0h ; á
                db 0AAh ; ¬
                db 0AAh ; ¬
                db  0Ah ;
                db 0AAh ; ¬
                db  82h ; é
                db 0AAh ; ¬
                db 0A8h ; ¿
                db  2Ah ; *
                db 0FEh ; ¦
unk_17F75       db  7Fh ;              ; DATA XREF: sub_18634+16o
                db  9Fh ; ƒ
                db 0E7h ; t
                db 0F9h ; ·
byte_17F79      db 52h                  ; DATA XREF: sub_14E52+18r
                                        ; sub_14EA2+15r seg001:829Ar
                db  52h ; R
                db  52h ; R
                db  52h ; R
                db  54h ; T
                db  55h ; U
                db  52h ; R
                db  52h ; R
                db  48h ; H
                db  49h ; I
                db  4Ah ; J
                db  4Ah ; J
                db  4Ah ; J
                db  4Ah ; J
                db  4Ah ; J
                db  4Ah ; J
                db  12h ;
                db  11h ;
                db  12h ;
                db  12h ;
                db  14h ;
                db  15h ;
                db  14h ;
                db  12h ;
                db  12h ;
                db  11h ;
                db  12h ;
                db  12h ;
                db  12h ;
                db  12h ;
                db  12h ;
                db  12h ;
                db  22h ; "
                db  22h ; "
                db  22h ; "
                db  22h ; "
                db  24h ; $
                db  25h ; %
                db  24h ; $
                db  22h ; "
                db  28h ; (
                db  29h ; )
                db  2Ah ; *
                db  2Ah ; *
                db  28h ; (
                db  29h ; )
                db  2Ah ; *
                db  2Ah ; *
                db  22h ; "
                db  22h ; "
                db  22h ; "
                db  22h ; "
                db  24h ; $
                db  25h ; %
                db  24h ; $
                db  22h ; "
                db  28h ; (
                db  29h ; )
                db  2Ah ; *
                db  2Ah ; *
                db  28h ; (
                db  29h ; )
                db  2Ah ; *
                db  2Ah ; *
                db  4Ah ; J
                db  45h ; E
                db  4Ah ; J
                db  4Ah ; J
                db  44h ; D
                db  45h ; E
                db  44h ; D
                db  4Ah ; J
                db  48h ; H
                db  49h ; I
                db  4Ah ; J
                db  4Ah ; J
                db  48h ; H
                db  49h ; I
                db  4Ah ; J
                db  4Ah ; J
                db  52h ; R
                db  51h ; Q
                db  52h ; R
                db  52h ; R
                db  54h ; T
                db  55h ; U
                db  54h ; T
                db  52h ; R
                db  52h ; R
                db  51h ; Q
                db  52h ; R
                db  52h ; R
                db  58h ; X
                db  55h ; U
                db  52h ; R
                db  52h ; R
                db  4Ah ; J
                db  45h ; E
                db  4Ah ; J
                db  4Ah ; J
                db  44h ; D
                db  45h ; E
                db  44h ; D
                db  4Ah ; J
                db  48h ; H
                db  49h ; I
                db  4Ah ; J
                db  4Ah ; J
                db  48h ; H
                db  49h ; I
                db  4Ah ; J
                db  4Ah ; J
                db  4Ah ; J
                db  45h ; E
                db  4Ah ; J
                db  4Ah ; J
                db  44h ; D
                db  45h ; E
                db  44h ; D
                db  4Ah ; J
                db  48h ; H
                db  49h ; I
                db  4Ah ; J
                db  4Ah ; J
                db  48h ; H
                db  49h ; I
                db  4Ah ; J
                db  4Ah ; J
                db  88h ; ê
                db  89h ; ë
                db  8Ah ; è
                db  8Ah ; è
                db  94h ; ö
                db  95h ; ò
                db  94h ; ö
                db  92h ; Æ
                db  88h ; ê
                db  89h ; ë
                db  8Ah ; è
                db  8Ah ; è
                db  88h ; ê
                db  89h ; ë
                db  8Ah ; è
                db  8Ah ; è
                db  92h ; Æ
                db  91h ; æ
                db  92h ; Æ
                db  92h ; Æ
                db  94h ; ö
                db  95h ; ò
                db  94h ; ö
                db  92h ; Æ
                db  92h ; Æ
                db  91h ; æ
                db  92h ; Æ
                db  92h ; Æ
                db  94h ; ö
                db  95h ; ò
                db  92h ; Æ
                db  92h ; Æ
                db 0A2h ; ó
                db 0A5h ; Ñ
                db 0A2h ; ó
                db 0A2h ; ó
                db 0A4h ; ñ
                db 0A5h ; Ñ
                db 0A4h ; ñ
                db 0A2h ; ó
                db 0A8h ; ¿
                db 0A9h ; ¬
                db 0AAh ; ¬
                db 0AAh ; ¬
                db 0A8h ; ¿
                db 0A9h ; ¬
                db 0AAh ; ¬
                db 0AAh ; ¬
                db 0A2h ; ó
                db 0A5h ; Ñ
                db 0A2h ; ó
                db 0A2h ; ó
                db 0A4h ; ñ
                db 0A5h ; Ñ
                db 0A4h ; ñ
                db 0A2h ; ó
                db 0A8h ; ¿
                db 0A9h ; ¬
                db 0AAh ; ¬
                db 0AAh ; ¬
                db 0A8h ; ¿
                db 0A9h ; ¬
                db 0AAh ; ¬
                db 0AAh ; ¬
                db  88h ; ê
                db  89h ; ë
                db  8Ah ; è
                db  8Ah ; è
                db  94h ; ö
                db  95h ; ò
                db  94h ; ö
                db  92h ; Æ
                db  88h ; ê
                db  89h ; ë
                db  8Ah ; è
                db  8Ah ; è
                db  88h ; ê
                db  89h ; ë
                db  8Ah ; è
                db  8Ah ; è
                db  92h ; Æ
                db  91h ; æ
                db  92h ; Æ
                db  92h ; Æ
                db  94h ; ö
                db  95h ; ò
                db  94h ; ö
                db  92h ; Æ
                db  92h ; Æ
                db  91h ; æ
                db  92h ; Æ
                db  92h ; Æ
                db  94h ; ö
                db  95h ; ò
                db  92h ; Æ
                db  92h ; Æ
                db  52h ; R
                db  52h ; R
                db  52h ; R
                db  52h ; R
                db  52h ; R
                db  52h ; R
                db  52h ; R
                db  52h ; R
                db  52h ; R
                db  52h ; R
                db  52h ; R
                db  52h ; R
                db  52h ; R
                db  52h ; R
                db  52h ; R
                db  52h ; R
                db  52h ; R
                db  52h ; R
                db  52h ; R
                db  52h ; R
                db  52h ; R
                db  52h ; R
                db  52h ; R
                db  52h ; R
                db  52h ; R
                db  52h ; R
                db  52h ; R
                db  52h ; R
                db  52h ; R
                db  52h ; R
                db  52h ; R
                db  52h ; R
byte_18079      db 3Ch                  ; DATA XREF: seg001:82E8r
                db  39h ; 9
                db  32h ; 2
                db  33h ; 3
                db  24h ; $
                db  25h ; %
                db  26h ; &
                db  27h ; '
                db  3Ch ; <
                db  49h ; I
                db  4Ah ; J
                db  4Bh ; K
                db  4Ch ; L
                db  4Dh ; M
                db  4Eh ; N
                db  4Fh ; O
                db  3Ch ; <
                db  39h ; 9
                db  32h ; 2
                db  33h ; 3
                db  34h ; 4
                db  35h ; 5
                db  36h ; 6
                db  37h ; 7
                db  3Ch ; <
                db  39h ; 9
                db  3Ah ; :
                db  3Bh ; ;
                db  3Ch ; <
                db  3Dh ; =
                db  3Eh ; >
                db  3Fh ; ?
                db  2Ch ; ,
                db  29h ; )
                db  2Ah ; *
                db  2Bh ; +
                db  24h ; $
                db  25h ; %
                db  26h ; &
                db  27h ; '
                db  2Ch ; ,
                db  29h ; )
                db  2Ah ; *
                db  2Bh ; +
                db  2Ch ; ,
                db  2Dh ; -
                db  2Eh ; .
                db  2Fh ; /
                db  3Ch ; <
                db  35h ; 5
                db  32h ; 2
                db  33h ; 3
                db  34h ; 4
                db  35h ; 5
                db  36h ; 6
                db  37h ; 7
                db  3Ch ; <
                db  39h ; 9
                db  3Ah ; :
                db  3Bh ; ;
                db  3Ch ; <
                db  3Dh ; =
                db  3Eh ; >
                db  3Fh ; ?
                db  4Ch ; L
                db  49h ; I
                db  5Ah ; Z
                db  5Bh ; [
                db  54h ; T
                db  55h ; U
                db  56h ; V
                db  57h ; W
                db  4Ch ; L
                db  49h ; I
                db  4Ah ; J
                db  4Bh ; K
                db  4Ch ; L
                db  4Dh ; M
                db  4Eh ; N
                db  4Fh ; O
                db  5Ch ; \
                db  59h ; Y
                db  52h ; R
                db  53h ; S
                db  54h ; T
                db  55h ; U
                db  56h ; V
                db  57h ; W
                db  52h ; R
                db  59h ; Y
                db  5Ah ; Z
                db  5Bh ; [
                db  5Ch ; \
                db  5Dh ; ]
                db  5Eh ; ^
                db  5Fh ; _
                db  64h ; d
                db  65h ; e
                db  6Ah ; j
                db  6Bh ; k
                db  64h ; d
                db  65h ; e
                db  66h ; f
                db  67h ; g
                db  69h ; i
                db  69h ; i
                db  6Ah ; j
                db  6Bh ; k
                db  6Ch ; l
                db  6Dh ; m
                db  6Eh ; n
                db  6Fh ; o
                db  72h ; r
                db  73h ; s
                db  72h ; r
                db  73h ; s
                db  74h ; t
                db  75h ; u
                db  76h ; v
                db  77h ; w
                db  79h ; y
                db  79h ; y
                db  7Ah ; z
                db  7Bh ; {
                db  7Ch ; |
                db  7Dh ; }
                db  7Eh ; ~
                db  7Fh ; 
                db  9Ch ; £
                db  95h ; ò
                db  92h ; Æ
                db  93h ; ô
                db  94h ; ö
                db  95h ; ò
                db  96h ; û
                db  97h ; ù
                db  9Ah ; Ü
                db 0A9h ; ¬
                db 0AAh ; ¬
                db 0ABh ; ½
                db 0ACh ; ¼
                db 0ADh ; ¡
                db 0AEh ; «
                db 0AFh ; »
                db  92h ; Æ
                db  95h ; ò
                db  92h ; Æ
                db  93h ; ô
                db  94h ; ö
                db  95h ; ò
                db  96h ; û
                db  97h ; ù
                db  99h ; Ö
                db  99h ; Ö
                db  9Ah ; Ü
                db  9Bh ; ¢
                db  9Ch ; £
                db  9Dh ; ¥
                db  9Eh ; P
                db  9Fh ; ƒ
                db 0A4h ; ñ
                db 0A5h ; Ñ
                db 0AAh ; ¬
                db 0ABh ; ½
                db 0A4h ; ñ
                db 0A5h ; Ñ
                db 0A6h ; ª
                db 0A7h ; º
                db 0A9h ; ¬
                db 0A9h ; ¬
                db 0AAh ; ¬
                db 0ABh ; ½
                db 0ACh ; ¼
                db 0ADh ; ¡
                db 0AEh ; «
                db 0AFh ; »
                db 0B2h ; ¦
                db 0B5h ; ¦
                db 0B2h ; ¦
                db 0B3h ; ¦
                db 0B4h ; ¦
                db 0B5h ; ¦
                db 0B6h ; ¦
                db 0B7h ; +
                db 0B9h ; ¦
                db 0B9h ; ¦
                db 0BAh ; ¦
                db 0BBh ; +
                db 0BCh ; +
                db 0BDh ; +
                db 0BEh ; +
                db 0BFh ; +
                db 0CCh ; ¦
                db 0CDh ; -
                db 0CAh ; -
                db 0CBh ; -
                db 0D4h ; +
                db 0D5h ; +
                db 0D6h ; +
                db 0D6h ; +
                db 0C9h ; +
                db 0C9h ; +
                db 0CAh ; -
                db 0CBh ; -
                db 0CCh ; ¦
                db 0CDh ; -
                db 0CEh ; +
                db 0CFh ; -
                db 0D2h ; -
                db 0D5h ; +
                db 0D2h ; -
                db 0D3h ; +
                db 0D4h ; +
                db 0D5h ; +
                db 0D6h ; +
                db 0D7h ; +
                db 0D9h ; +
                db 0D9h ; +
                db 0DAh ; +
                db 0DBh ; ¦
                db 0DCh ; _
                db 0DDh ; ¦
                db 0DEh ; ¦
                db 0DFh ; ¯
                db 0E4h ; S
                db 0E5h ; s
                db 0EAh ; O
                db 0EBh ; d
                db 0E4h ; S
                db 0E5h ; s
                db 0E6h ; µ
                db 0E7h ; t
                db 0E9h ; T
                db 0E9h ; T
                db 0EAh ; O
                db 0EBh ; d
                db 0ECh ; 8
                db 0EDh ; f
                db 0EEh ; e
                db 0EFh ; n
                db 0F2h ; =
                db 0F3h ; =
                db 0F2h ; =
                db 0F3h ; =
                db 0F4h ; (
                db 0F5h ; )
                db 0F6h ; ÷
                db 0F7h ; ˜
                db 0F9h ; ·
                db 0F9h ; ·
                db 0FAh ; ·
                db 0FBh ; v
                db 0FCh ; n
                db 0FDh ; ²
                db 0FEh ; ¦
                db 0FFh ;
MFM_CLK_TBL     db 0FFh, 0FEh, 0FCh, 0FCh, 0F9h, 0F8h, 0F8h, 0F8h, 0F3h
                                        ; DATA XREF: GET_MFM_CLK+7r
                db 0F2h, 0F0h, 0F0h, 0F1h, 0F0h, 0F0h, 0F0h, 0E7h, 0E6h
                db 0E4h, 0E4h, 0E1h, 0E0h, 0E0h, 0E0h, 0E3h, 0E2h, 0E0h
                db 0E0h, 0E1h, 0E0h, 0E0h, 0E0h, 0CFh, 0CEh, 0CCh, 0CCh
                db 0C9h, 0C8h, 0C8h, 0C8h, 0C3h, 0C2h, 0C0h, 0C0h, 0C1h
                db 0C0h, 0C0h, 0C0h, 0C7h, 0C6h, 0C4h, 0C4h, 0C1h, 0C0h
                db 0C0h, 0C0h, 0C3h, 0C2h, 0C0h, 0C0h, 0C1h, 0C0h, 0C0h
                db 0C0h, 9Fh, 9Eh, 9Ch, 9Ch, 99h, 98h, 98h, 98h, 93h, 92h
                db 90h, 90h, 91h, 90h, 90h, 90h, 87h, 86h, 84h, 84h, 81h
                db 80h, 80h, 80h, 83h, 82h, 80h, 80h, 81h, 80h, 80h, 80h
                db 8Fh, 8Eh, 8Ch, 8Ch, 89h, 88h, 88h, 88h, 83h, 82h, 80h
                db 80h, 81h, 80h, 80h, 80h, 87h, 86h, 84h, 84h, 81h, 80h
                db 80h, 80h, 83h, 82h, 80h, 80h, 81h, 80h, 80h, 80h, 3Fh
                db 3Eh, 3Ch, 3Ch, 39h, 38h, 38h, 38h, 33h, 32h, 30h, 30h
                db 31h, 30h, 30h, 30h, 27h, 26h, 24h, 24h, 21h, 20h, 20h
                db 20h, 23h, 22h, 20h, 20h, 21h, 20h, 20h, 20h, 0Fh, 0Eh
                db 0Ch, 0Ch, 9, 8, 8, 8, 3, 2, 0, 0, 1, 0, 0, 0, 7, 6
                db 4, 4, 1, 0, 0, 0, 3, 2, 0, 0, 1, 0, 0, 0, 1Fh, 1Eh
                db 1Ch, 1Ch, 19h, 18h, 18h, 18h, 13h, 12h, 10h, 10h, 11h
                db 10h, 10h, 10h, 7, 6, 4, 4, 1, 0, 0, 0, 3, 2, 0, 0, 1
                db 0, 0, 0, 0Fh, 0Eh, 0Ch, 0Ch, 9, 8, 8, 8, 3, 2, 0, 0
                db 1, 0, 0, 0, 7, 6, 4, 4, 1, 0, 0, 0, 3, 2, 0, 0, 1, 0
                db 0, 0
; ---------------------------------------------------------------------------

loc_18279:                              ; CODE XREF: AnalyzeTrack+166p
                push    si
                push    es
                push    bx
                push    dx
                push    ds
                mov     si, ds:word_13CF2
                mov     dx, ds:word_13CF4
                add     dx, 40h ; '@'
                mov     al, ds:DiskType
                and     al, 7Fh
                cmp     al, 7
                jb      short loc_182E2
                push    es
                pop     ds
                assume ds:seg001
                mov     bh, 0
                mov     ah, 1

loc_18298:                              ; CODE XREF: seg001:82DAj
                mov     bl, [si]
                mov     al, cs:byte_17F79[bx]
                test    ah, 1
                jz      short loc_182A6
                and     al, 7Fh

loc_182A6:                              ; CODE XREF: seg001:82A2j
                test    al, 0E0h
                jnz     short loc_182B4
                test    ah, 1
                jnz     short loc_182CF
                or      al, 80h
                jmp     short loc_182CF
; ---------------------------------------------------------------------------
                align 2

loc_182B4:                              ; CODE XREF: seg001:82A8j
                test    ah, 7
                jnz     short loc_182C4
                test    al, 80h
                jnz     short loc_182CF
                or      byte ptr [si-1], 1
                jmp     short loc_182CF
; ---------------------------------------------------------------------------
                align 2

loc_182C4:                              ; CODE XREF: seg001:82B7j
                test    al, 0C0h
                jnz     short loc_182CF
                test    ah, 3
                jnz     short loc_182CF
                or      al, 80h

loc_182CF:                              ; CODE XREF: seg001:82ADj seg001:82B1j
                                        ; seg001:82BBj seg001:82C1j
                                        ; seg001:82C6j seg001:82CBj
                cmp     al, bl
                jz      short $+2
                mov     [si], al
                mov     ah, al
                inc     si
                cmp     si, dx
                jb      short loc_18298

loc_182DC:                              ; CODE XREF: seg001:8311j
                pop     ds
                assume ds:nothing
                pop     dx
                pop     bx
                pop     es
                assume es:nothing
                pop     si
                retn
; ---------------------------------------------------------------------------

loc_182E2:                              ; CODE XREF: seg001:8290j
                push    es
                pop     ds
                assume ds:nothing
                mov     bh, 0

loc_182E6:                              ; CODE XREF: seg001:830Fj
                mov     bl, [si]
                mov     al, cs:byte_18079[bx]
                mov     [si], al
                test    al, 3
                jnz     short loc_182FF
                test    byte ptr [si+1], 80h
                jnz     short loc_182FF
                or      byte ptr [si], 1
                jmp     short loc_1830C
; ---------------------------------------------------------------------------
                db 90h
; ---------------------------------------------------------------------------

loc_182FF:                              ; CODE XREF: seg001:82F1j seg001:82F7j
                test    al, 0C0h
                jnz     short loc_1830C
                test    byte ptr [si-1], 1
                jnz     short loc_1830C
                or      byte ptr [si], 80h

loc_1830C:                              ; CODE XREF: seg001:82FCj seg001:8301j
                                        ; seg001:8307j
                inc     si
                cmp     si, dx
                jb      short loc_182E6
                jmp     short loc_182DC

; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_18313       proc near               ; CODE XREF: ReadWrite+16Ap
                                        ; ReadWrite+183p ReadWrite+30Ep
                                        ; sub_15A5E+2A5p sub_183E6+5p
                                        ; sub_183E6+Dp
                mov     dl, ds:CurrentDrive
                mov     dh, 0
                mov     ch, ds:CurrentCylinder
                call    sub_1700D
                retn
sub_18313       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_18321       proc near               ; CODE XREF: ReadWrite+6Bp
                                        ; ReadWrite+90p ReadWrite+12Ep
                                        ; ReadWrite+17Ap ReadWrite+28Ap
                                        ; ReadWrite+3DEp ReadWrite+3F1p
                                        ; sub_15A5E+29Ep
                mov     ds:CurrentDrive, al
                cmp     ds:byte_15FA7, 0FFh
                jnz     short loc_1832E
                call    sub_18380

loc_1832E:                              ; CODE XREF: sub_18321+8j
                mov     cl, ds:CurrentDrive
                mov     al, 1
                shl     al, cl
                push    ds
                call    MaxtMotorTimer
                mov     ds:dsk_motor_stat, al ; Motor running status & disk write
                                        ;  bit 7=1 disk write in progress
                                        ;  bits 6&5 = drive selected 0 to 3
                                        ;     3       2       1       0
                                        ;  drive-3 drive-2 drive-1 drive-0
                                        ;  --------- 1=motor on-----------
                call    sub_16F42
                pop     ds
                assume ds:nothing
                call    sub_1685B
                mov     dl, ds:CurrentDrive
                call    sub_16E78
                push    ax
                call    sub_16FEC
                mov     bl, ds:CurrentDrive
                mov     bh, 0
                cmp     ds:byte_1009B[bx], 0
                jnz     short loc_18365
                push    bx
                call    sub_183E6
                pop     bx
                mov     ds:byte_1009B[bx], al

loc_18365:                              ; CODE XREF: sub_18321+39j
                cmp     ds:byte_17F5B, 0
                jnz     short loc_18374
                call    sub_18429
                mov     ds:byte_17F5B, 0FFh

loc_18374:                              ; CODE XREF: sub_18321+49j
                pop     ax
                mov     bl, ds:CurrentDrive
                mov     bh, 0
                mov     ah, ds:byte_1009B[bx]
                retn
sub_18321       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_18380       proc near               ; CODE XREF: sub_18321+Ap
                mov     dl, ds:CurrentDrive
                mov     ah, 8
                int     13h             ; DISK - DISK - GET CURRENT DRIVE PARAMETERS (XT,AT,XT286,CONV,PS)
                                        ; DL = drive number
                                        ; Return: CF set on error, AH = status code, BL = drive type
                                        ; DL = number of consecutive drives
                                        ; DH = maximum value for head number, ES:DI -> drive parameter
                jb      short loc_183B4
                cmp     bl, 0           ; 0 = error/no drive?
                jz      short loc_183B4
                cmp     bl, 2           ; 2 = 1.2M drive
                jnz     short loc_18397
                mov     cx, 2709h       ; 27h tracks, 9 sectors/track

loc_18397:                              ; CODE XREF: sub_18380+12j
                cmp     bl, 4           ; 4 = 1.44M drive
                jnz     short loc_1839E
                mov     cl, 9           ; 9 sectors/track

loc_1839E:                              ; CODE XREF: sub_18380+1Aj
                mov     ah, 18h
                mov     dl, ds:CurrentDrive
                int     13h             ; DISK - SET MEDIA TYPE FOR FORMAT (AT model 3x9,XT2,XT286,PS)
                                        ; DL = drive number, CH = lower 8 bits of number of tracks, CL = sectors per track
                jnb     short locret_183B3
                cmp     ah, 6           ; 6 = diskette change line active.
                jnz     short loc_183B4
                mov     ah, 18h
                int     13h             ; DISK - SET MEDIA TYPE FOR FORMAT (AT model 3x9,XT2,XT286,PS)
                                        ; DL = drive number, CH = lower 8 bits of number of tracks, CL = sectors per track
                jb      short loc_183B4

locret_183B3:                           ; CODE XREF: sub_18380+26j
                retn
; ---------------------------------------------------------------------------

loc_183B4:                              ; CODE XREF: sub_18380+8j sub_18380+Dj
                                        ; sub_18380+2Bj sub_18380+31j
                mov     dl, ds:CurrentDrive
                cmp     dl, 1
                ja      short loc_183DF
                mov     bl, dl
                mov     bh, 0
                push    ds
                call    MaxtMotorTimer
                mov     al, ds:dsk0_media_st[bx] ; Media state for diskette drive 0
                                        ;     7      6      5      4
                                        ;  data xfer rate  two   media
                                        ;   00=500K bit/s  step  known
                                        ;   01=300K bit/s
                                        ;   10=250K bit/s
                                        ;   11=1M bit/sec
                                        ;     3      2      1      0
                                        ;  unused  -----state of drive-----
                                        ;          bits floppy  drive state
                                        ;          000=  360K in 360K, ?
                                        ;          001=  360K in 1.2M, ?
                                        ;          010=  1.2M in 1.2M, ?
                                        ;          011=  360K in 360K, ok
                                        ;          100=  360K in 1.2M, ok
                                        ;          101=  1.2M in 1.2M, ok
                                        ;          111=  720K in 720K, ok
                                        ;            or 1.44M in 1.44M
                                        ;         (state not used for 2.88)
                pop     ds
                and     al, 7
                cmp     al, 5
                ja      short loc_183DF
                cmp     al, 3
                jb      short loc_183D6
                sub     al, 3

loc_183D6:                              ; CODE XREF: sub_18380+52j
                cmp     al, 0
                jnz     short loc_183DF
                mov     al, 1
                jmp     short loc_183E1
; ---------------------------------------------------------------------------
                db 90h
; ---------------------------------------------------------------------------

loc_183DF:                              ; CODE XREF: sub_18380+3Bj
                                        ; sub_18380+4Ej sub_18380+58j
                mov     al, 2

loc_183E1:                              ; CODE XREF: sub_18380+5Cj
                mov     ah, 17h
                int     13h             ; DISK - DISK - SET TYPE (AT,XT2,XT286,CONV,PS
                                        ; AL = disk type AL = 02h - regular disk in high-capacity drive
                retn
sub_18380       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_183E6       proc near               ; CODE XREF: sub_18321+3Cp
                mov     ds:CurrentCylinder, 28h ; '('
                call    sub_18313
                mov     ds:CurrentCylinder, 1
                call    sub_18313
                call    sub_18405
                mov     al, 27h ; '''
                jnz     short loc_183FF
                inc     al

loc_183FF:                              ; CODE XREF: sub_183E6+15j
                push    ax
                call    sub_16FEC
                pop     ax
                retn
sub_183E6       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_18405       proc near               ; CODE XREF: sub_183E6+10p
                mov     dl, ds:CurrentDrive
                push    ds
                mov     cx, seg bdata
                mov     ds, cx
                assume ds:bdata
                mov     cx, 0Ah

loc_18412:                              ; CODE XREF: sub_18405+1Bj
                mov     dh, 0
                call    GetDriveStatus
                mov     al, dsk_status_1 ; Status bytes-disk controller chip
                                        ;  Note: 7 info bytes returned from
                                        ;  controller are saved here. Refer
                                        ;  to the NEC uPD 765 chip manual
                                        ;  for the specific info, depending
                                        ;  on the previous command issued.
                xor     al, dl
                and     al, 1
                jz      short loc_18422
                loop    loc_18412

loc_18422:                              ; CODE XREF: sub_18405+19j
                mov     al, dsk_status_1 ; Status bytes-disk controller chip
                                        ;  Note: 7 info bytes returned from
                                        ;  controller are saved here. Refer
                                        ;  to the NEC uPD 765 chip manual
                                        ;  for the specific info, depending
                                        ;  on the previous command issued.
                pop     ds
                assume ds:nothing
                and     al, 10h
                retn
sub_18405       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_18429       proc near               ; CODE XREF: sub_18321+4Bp
                mov     al, 5
                out     0Ah, al         ; DMA controller, 8237A-5.
                                        ; Disable (mask) channel 1
                mov     al, 6
                out     0Ah, al         ; DMA controller, 8237A-5.
                                        ; Disable (mask) channel 2
                retn
sub_18429       endp

; ---------------------------------------------------------------------------

GetInt08:
                push    es
                cli
                mov     ax, 3508h
                int     21h             ; DOS - 2+ - GET INTERRUPT VECTOR
                                        ; AL = interrupt number
                                        ; Return: ES:BX = value of interrupt vector
                mov     ds:OldInt08Seg, es
                mov     ds:OldInt08Off, bx
                push    cs
                pop     ds
                assume ds:seg001
                mov     dx, offset Int08Entry
                mov     ax, 2508h
                int     21h             ; DOS - SET INTERRUPT VECTOR
                                        ; AL = interrupt number
                                        ; DS:DX = new vector to be used for specified interrupt
                pop     es
                retn
; ---------------------------------------------------------------------------

RestoreInt08:
                cli
                push    ds
                push    es
                mov     dx, OldInt08Off
                mov     ds, OldInt08Seg
                assume ds:nothing
                mov     ax, 2508h
                int     21h             ; DOS - SET INTERRUPT VECTOR
                                        ; AL = interrupt number
                                        ; DS:DX = new vector to be used for specified interrupt
                pop     es
                pop     ds
                retn
; ---------------------------------------------------------------------------

Int08Entry:                             ; DATA XREF: seg001:8443o
                sti                     ; IRQ0 - Sytem Timer.
                push    ax
                inc     cs:DataRate
                mov     al, 20h ; ' '
                out     20h, al         ; Interrupt controller, 8259A.
                pop     ax
                iret

; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1846D       proc near               ; CODE XREF: sub_153CE+52p
                                        ; sub_153CE+6Fp sub_15498+5Ap
                                        ; sub_184FC+37p sub_18634+46p
                mov     al, es:[si]
                shr     al, cl
                and     al, 1
                dec     cl
                js      short loc_1847A
                clc
                retn
; ---------------------------------------------------------------------------

loc_1847A:                              ; CODE XREF: sub_1846D+9j
                mov     cl, 7
                inc     si
                cmp     ds:EndOfCurrTrk, si
                retn
sub_1846D       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_18482       proc near               ; CODE XREF: sub_184FC+3Cp
                                        ; sub_184FC+49p sub_18594+3Ap
                                        ; sub_18634+49p sub_18634+50p
                                        ; sub_18634+5Bp sub_18634+5Ep
                                        ; sub_18634+61p sub_18634+64p
                                        ; sub_18634+67p
                mov     ah, es:[si]
                shr     ah, cl
                and     ah, 1
                dec     cl
                jns     short loc_18497
                mov     cl, 7
                inc     si
                cmp     ds:EndOfCurrTrk, si
                jb      short locret_184B0

loc_18497:                              ; CODE XREF: sub_18482+Aj
                mov     al, es:[si]
                shr     al, cl
                and     al, 1
                dec     cl
                jns     short loc_184AB
                mov     cl, 7
                inc     si
                cmp     ds:EndOfCurrTrk, si
                jb      short locret_184B0

loc_184AB:                              ; CODE XREF: sub_18482+1Ej
                shl     ah, 1
                or      al, ah
                clc

locret_184B0:                           ; CODE XREF: sub_18482+13j
                                        ; sub_18482+27j
                retn
sub_18482       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; Decodes a bytes worth of raw MFM from ES:SI
; Data returned in DL, clock bits in DH.

MFMDecode       proc near               ; CODE XREF: sub_149C2+4Ap
                                        ; sub_149C2+4Dp sub_149C2+50p
                                        ; sub_149C2+6Ep sub_149C2+71p
                                        ; sub_149C2+74p sub_14AEF+32p
                                        ; sub_14AEF+35p sub_14AEF+38p
                                        ; sub_14AEF+45p sub_14AEF+48p
                                        ; sub_14AEF+4Bp sub_14B86+139p
                                        ; sub_14B86+1A4p sub_14B86+1B0p
                                        ; sub_14B86+1C5p sub_14B86+1E0p
                                        ; sub_14B86+1EAp sub_14DA4+Fp
                                        ; sub_14DA4+12p sub_14DA4+15p
                                        ; sub_14DA4+5Bp sub_14DA4+8Ep
                                        ; sub_14DA4+A1p sub_14F1F+23p
                                        ; sub_15045+29p sub_15045+30p
                                        ; sub_15045+37p sub_15045+98p
                                        ; sub_15045+A0p sub_15045+A8p
                                        ; sub_15045+B0p sub_15242+69p
                                        ; sub_15242+6Cp sub_15242+6Fp
                                        ; sub_153CE+30p sub_153CE+33p
                                        ; sub_153CE+36p sub_153CE+45p
                                        ; sub_153CE+5Cp sub_153CE+7Bp
                                        ; sub_15498+12p sub_15498+15p
                                        ; sub_15498+18p sub_15498+24p
                                        ; sub_15498+37p sub_15498+4Dp
                                        ; sub_184FC+58p sub_1856B+5p
                                        ; sub_1856B+8p ...
                push    cx
                mov     ah, es:[si]
                inc     si
                cmp     ds:EndOfCurrTrk, si
                jb      short loc_184ED
                mov     al, es:[si]
                mov     ch, 7
                sub     ch, cl
                mov     cl, ch
                shl     ax, cl
                mov     dh, ah
                mov     ah, es:[si]
                inc     si
                cmp     ds:EndOfCurrTrk, si
                jb      short loc_184ED
                mov     al, es:[si]
                shl     ax, cl
                mov     al, ah
                mov     ah, dh
                mov     ch, 8

loc_184DE:                              ; CODE XREF: MFMDecode+37j
                shl     ax, 1
                rcl     dh, 1
                shl     ax, 1
                rcl     dl, 1
                dec     ch
                jnz     short loc_184DE
                pop     cx
                clc
                retn
; ---------------------------------------------------------------------------

loc_184ED:                              ; CODE XREF: MFMDecode+9j
                                        ; MFMDecode+20j
                pop     cx
                stc
                retn
MFMDecode       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_184F0       proc near               ; CODE XREF: sub_184FC+52p
                                        ; sub_184FC+55p sub_18594+49p
                                        ; sub_18594+4Cp sub_18634+6Ep
                                        ; sub_18634+71p
                inc     cl
                cmp     cl, 8
                jz      short loc_184F8
                retn
; ---------------------------------------------------------------------------

loc_184F8:                              ; CODE XREF: sub_184F0+5j
                mov     cl, 0
                dec     si
                retn
sub_184F0       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_184FC       proc near               ; CODE XREF: sub_149C2+45p
                                        ; sub_149C2+69p sub_14AEF+2Dp
                                        ; sub_14AEF+40p sub_14B86+199p
                                        ; sub_14DA4+Ap sub_15045+21p
                                        ; sub_15242+66p sub_153CE+2Dp
                                        ; sub_15498+Fp sub_1856Bp
                                        ; sub_189E1+7p sub_19089+8Ap
                                        ; sub_19089+9Ap seg001:940Ap
                                        ; seg001:9415p seg001:941Ep
                cld
                push    bx

loc_184FE:                              ; CODE XREF: sub_184FC+10j
                                        ; sub_184FC+2Fj sub_184FC+67j
                lods    byte ptr es:[si]
                cmp     al, 55h ; 'U'
                jz      short loc_18511
                cmp     al, 0AAh ; '¬'
                jz      short loc_18511
                cmp     si, ds:EndOfCurrTrk
                jbe     short loc_184FE

ErrorExit850E:                          ; CODE XREF: sub_184FC+1Fj
                                        ; sub_184FC+3Aj sub_184FC+3Fj
                                        ; sub_184FC+4Cj sub_184FC+5Bj
                pop     bx
                stc
                retn
; ---------------------------------------------------------------------------

loc_18511:                              ; CODE XREF: sub_184FC+6j sub_184FC+Aj
                dec     si
                mov     ds:SyncBytePtr, si

loc_18516:                              ; CODE XREF: sub_184FC+24j
                inc     si
                cmp     si, ds:EndOfCurrTrk
                ja      short ErrorExit850E
                cmp     al, es:[si]
                jz      short loc_18516
                mov     ax, si
                sub     ax, ds:SyncBytePtr
                cmp     ax, 3
                jb      short loc_184FE
                dec     si
                mov     cl, 7
                jmp     short loc_18538
; ---------------------------------------------------------------------------
                db 90h
; ---------------------------------------------------------------------------

loc_18533:                              ; CODE XREF: sub_184FC+43j
                call    sub_1846D
                jb      short ErrorExit850E

loc_18538:                              ; CODE XREF: sub_184FC+34j
                                        ; sub_184FC+47j
                call    sub_18482
                jb      short ErrorExit850E
                cmp     al, 1
                jz      short loc_18533
                cmp     al, 2
                jnz     short loc_18538

loc_18545:                              ; CODE XREF: sub_184FC+50j
                call    sub_18482
                jb      short ErrorExit850E
                cmp     al, 2
                jz      short loc_18545
                call    sub_184F0
                call    sub_184F0
                call    MFMDecode
                jb      short ErrorExit850E
                cmp     dx, 0AA1h       ; DL=A1h=address mark
                jz      short loc_18565
                cmp     dx, 14C2h       ; DL=C2h=index mark
                jnz     short loc_184FE

loc_18565:                              ; CODE XREF: sub_184FC+61j
                clc
                pop     bx
                retn
sub_184FC       endp

; ---------------------------------------------------------------------------
                stc
                pop     bx
                retn

; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1856B       proc near               ; CODE XREF: seg001:492Ep
                                        ; sub_1856B+14j sub_1856B+22j
                call    sub_184FC
                jb      short locret_18590
                call    MFMDecode
                call    MFMDecode
                call    MFMDecode
                and     dl, 0Fh
                cmp     dl, 3
                jnz     short sub_1856B
                call    MFMDecode
                call    MFMDecode
                and     dl, 0Fh
                cmp     dl, 1
                jnz     short sub_1856B
                clc

locret_18590:                           ; CODE XREF: sub_1856B+3j
                retn
sub_1856B       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_18591       proc near               ; CODE XREF: seg001:4902p
                jmp     short sub_18594
sub_18591       endp

; ---------------------------------------------------------------------------
                align 2

; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_18594       proc near               ; CODE XREF: sub_18591j sub_189E1+16p
                push    bx

loc_18595:                              ; CODE XREF: sub_18594+11j
                                        ; sub_18594+2Fj sub_18594+47j
                                        ; sub_18594+6Aj
                mov     al, es:[si]
                cmp     al, 55h ; 'U'
                jz      short loc_185AA
                cmp     al, 0AAh ; '¬'
                jz      short loc_185AA
                inc     si
                cmp     si, ds:EndOfCurrTrk
                jbe     short loc_18595

loc_185A7:                              ; CODE XREF: sub_18594+1Fj
                                        ; sub_18594+3Dj sub_18594+52j
                pop     bx
                stc
                retn
; ---------------------------------------------------------------------------

loc_185AA:                              ; CODE XREF: sub_18594+6j sub_18594+Aj
                mov     ds:SyncBytePtr, si

loc_185AE:                              ; CODE XREF: sub_18594+24j
                inc     si
                cmp     si, ds:EndOfCurrTrk
                ja      short loc_185A7
                cmp     al, es:[si]
                jz      short loc_185AE
                mov     cx, si
                sub     cx, ds:SyncBytePtr
                cmp     cx, 4
                jb      short loc_18595
                dec     si
                mov     cl, 7
                cmp     al, 55h ; 'U'
                jnz     short loc_185CE
                mov     cl, 6

loc_185CE:                              ; CODE XREF: sub_18594+36j
                                        ; sub_18594+45j
                call    sub_18482
                jb      short loc_185A7
                cmp     al, 3
                jz      short loc_185DD
                cmp     al, 2
                jz      short loc_185CE
                jmp     short loc_18595
; ---------------------------------------------------------------------------

loc_185DD:                              ; CODE XREF: sub_18594+41j
                call    sub_184F0
                call    sub_184F0
                call    MFMDecode
                jb      short loc_185A7
                cmp     dh, 0C7h ; '¦'
                jnz     short loc_185FE
                cmp     dl, 0FEh ; '¦'
                jz      short loc_18600
                cmp     dl, 0F8h ; '°'
                jb      short loc_185FE
                cmp     dl, 0FBh ; 'v'
                ja      short loc_185FE
                jz      short loc_18600

loc_185FE:                              ; CODE XREF: sub_18594+57j
                                        ; sub_18594+61j sub_18594+66j
                jmp     short loc_18595
; ---------------------------------------------------------------------------

loc_18600:                              ; CODE XREF: sub_18594+5Cj
                                        ; sub_18594+68j
                clc
                pop     bx
                retn
sub_18594       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_18603       proc near               ; CODE XREF: seg001:48C7p
                call    sub_18634
                jb      short locret_18633
                mov     ds:SyncBytePtr, di
                mov     ds:word_17F31, bp

loc_18610:                              ; CODE XREF: sub_18603+16j
                                        ; sub_18603+20j
                call    sub_18634
                jb      short loc_18625
                cmp     bp, ds:word_17F31
                jbe     short loc_18610
                mov     ds:SyncBytePtr, di
                mov     ds:word_17F31, bp
                jmp     short loc_18610
; ---------------------------------------------------------------------------

loc_18625:                              ; CODE XREF: sub_18603+10j
                mov     si, ds:SyncBytePtr
                mov     bp, ds:word_17F31
                sub     bp, 9
                add     si, bp
                clc

locret_18633:                           ; CODE XREF: sub_18603+3j
                retn
sub_18603       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_18634       proc near               ; CODE XREF: sub_18603p sub_18603+Dp
                                        ; sub_18634+12j sub_18634+3Cj
                                        ; sub_189E1+12p
                mov     di, si
                mov     al, es:[si]
                cmp     al, 0FFh
                jz      short loc_18650
                cmp     al, 0FEh ; '¦'
                jz      short loc_1864A
                inc     si
                cmp     si, ds:EndOfCurrTrk
                jbe     short sub_18634
                stc
                retn
; ---------------------------------------------------------------------------

loc_1864A:                              ; CODE XREF: sub_18634+Bj
                mov     bx, offset unk_17F75
                jmp     short loc_18653
; ---------------------------------------------------------------------------
                align 2

loc_18650:                              ; CODE XREF: sub_18634+7j
                mov     bx, offset unk_17F61

loc_18653:                              ; CODE XREF: sub_18634+19j
                mov     bp, 1
                mov     cx, 4

loc_18659:                              ; CODE XREF: sub_18634+2Fj
                                        ; sub_18634+37j
                inc     si
                mov     al, es:[si]
                cmp     al, [bx]
                jnz     short loc_1866D
                inc     bx
                inc     bp
                loop    loc_18659
                mov     cx, 5
                sub     bx, 5
                jmp     short loc_18659
; ---------------------------------------------------------------------------

loc_1866D:                              ; CODE XREF: sub_18634+2Bj
                cmp     bp, 8
                jb      short sub_18634
                sub     si, 4
                mov     cl, 7
                jmp     short loc_1867D
; ---------------------------------------------------------------------------
                align 2

loc_1867A:                              ; CODE XREF: sub_18634+4Ej
                                        ; sub_18634+55j
                call    sub_1846D

loc_1867D:                              ; CODE XREF: sub_18634+43j
                call    sub_18482
                cmp     al, 3
                jnz     short loc_1867A

loc_18684:                              ; CODE XREF: sub_18634+59j
                call    sub_18482
                cmp     al, 2
                jz      short loc_1867A
                cmp     al, 0
                jnz     short loc_18684

loc_1868F:                              ; CODE XREF: sub_18634+6Cj
                call    sub_18482
                call    sub_18482
                call    sub_18482
                call    sub_18482
                call    sub_18482
                cmp     al, 0
                jz      short loc_1868F
                call    sub_184F0
                call    sub_184F0
                dec     si
                dec     si
                mov     bp, si
                sub     bp, di
                clc
                retn
sub_18634       endp

; ---------------------------------------------------------------------------
                stc
                retn

; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; Gets the clock bits for normal (non address mark)
; bytes to be MFM encoded. Input byte to be encoded in AL,
; previous bit cell in AH. Returns clock bits in AH, AL
; unchanged.

GET_MFM_CLK     proc near               ; CODE XREF: Encode_MFM_Normal+4p
                push    bx
                shr     ah, 1           ; check incoming phase from previous bit cell.
                mov     ah, 0
                mov     bx, ax
                mov     ah, ds:MFM_CLK_TBL[bx]
                jnb     short loc_186C2 ; adjust for incoming phase
                and     ah, 7Fh

loc_186C2:                              ; CODE XREF: GET_MFM_CLK+Bj
                pop     bx
                retn
GET_MFM_CLK     endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; MFM encodes byte in AL with normal clock.
; Output to ES:SI.

Encode_MFM_Normal proc near             ; CODE XREF: RepMFM+2p IDCRC+26p
                                        ; IDCRC+2Bp sub_15662+9Bp
                mov     ah, es:[si-1]   ; Get previous bit cell
                call    GET_MFM_CLK
Encode_MFM_Normal endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; MFM encodes byte in AL with clock in AH.
; Output to ES:SI.

Encode_MFM_AM   proc near               ; CODE XREF: RepMFM_Clk+4p
                push    cx
                push    dx
                mov     cx, 8

loc_186D0:                              ; CODE XREF: Encode_MFM_AM+Dj
                shl     ah, 1
                rcl     dx, 1
                shl     al, 1
                rcl     dx, 1
                loop    loc_186D0
                xchg    dh, dl
                mov     es:[si], dx
                inc     si
                inc     si
                pop     dx
                pop     cx
                retn
Encode_MFM_AM   endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; Generates a CRC from data at ES:SI with length AX.
; Return in BX.

CRC             proc near               ; CODE XREF: IDCRC+1Fp
                push    dx
                push    cx
                add     ax, si
                mov     ds:CRC_END, ax
                mov     bx, 0FFFFh

loc_186EE:                              ; CODE XREF: CRC+2Cj
                mov     cx, 8
                mov     dh, es:[si]

loc_186F4:                              ; CODE XREF: CRC+24j
                mov     ah, dh
                shl     dh, 1
                xor     ah, bh
                shl     ah, 1
                mov     ax, 0
                jnb     short loc_18704
                mov     ax, 1021h

loc_18704:                              ; CODE XREF: CRC+1Bj
                shl     bx, 1
                xor     bx, ax
                loop    loc_186F4
                inc     si
                inc     si
                cmp     si, ds:CRC_END
                jb      short loc_186EE
                pop     cx
                pop     dx
                retn
CRC             endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_18715       proc near               ; CODE XREF: sub_18A07+5F9p
                push    ds
                push    es
                push    di
                push    si
                call    ClearTimer0
                call    sub_168BD
                mov     ds:byte_17F46, 2
                mov     ds:byte_10066, 0

loc_18729:                              ; CODE XREF: sub_18715+2B8j
                mov     bx, ds:TrackBufSeg
                mov     ax, ds:TrackBufOfs
                mov     bl, ah
                shr     bh, 1
                shr     bh, 1
                shr     bh, 1
                shr     bh, 1
                mov     al, 46h ; 'F'
                call    SetupDMA
                mov     dx, ds:TC_Port_Base
                cmp     ds:CopyXIDXFlag, 'Y'
                jnz     short loc_18752
                cmp     ds:byte_10066, 0
                jmp     short loc_18755
; ---------------------------------------------------------------------------
                align 2

loc_18752:                              ; CODE XREF: sub_18715+33j
                jmp     loc_18881
; ---------------------------------------------------------------------------

loc_18755:                              ; CODE XREF: sub_18715+3Aj
                mov     di, ds:trackSkewDly2
                mov     bx, ds:word_13D18

loc_1875D:                              ; CODE XREF: sub_18715+4Bj
                in      al, dx
                and     al, 80h
                jnz     short loc_1875D
                jmp     short loc_18765
; ---------------------------------------------------------------------------
                db 90h
; ---------------------------------------------------------------------------

loc_18765:                              ; CODE XREF: sub_18715+4Dj
                                        ; sub_18715+53j
                in      al, dx
                and     al, 80h
                jz      short loc_18765
                push    bx

loc_1876B:                              ; CODE XREF: sub_18715+87j
                mov     al, 6           ; Latch timer 0 count.
                                        ; Controller ignores lower nibble this command,
                                        ; unknown why 06h used rather than 0h.
                out     43h, al         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                jmp     short $+2
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                jmp     short $+2
                mov     bl, al
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                jmp     short $+2
                mov     bh, al
                mov     al, 6           ; Latch timer 0 count.
                                        ; Controller ignores lower nibble this command,
                                        ; unknown why 06h used rather than 0h.
                out     43h, al         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                jmp     short $+2
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                jmp     short $+2
                mov     ah, al
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                xchg    ah, al
                sub     ax, bx
                cmp     ah, 0
                jz      short loc_1876B
                neg     bx
                mov     ds:word_13D0E, bx
                pop     bx
                xor     ax, ax
                cmp     di, 0
                jnz     short loc_187AF
                jmp     loc_18832
; ---------------------------------------------------------------------------

loc_187AF:                              ; CODE XREF: sub_18715+95j
                push    bx

loc_187B0:                              ; CODE XREF: sub_18715+CCj
                mov     al, 6           ; Latch timer 0 count.
                                        ; Controller ignores lower nibble this command,
                                        ; unknown why 06h used rather than 0h.
                out     43h, al         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                jmp     short $+2
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                jmp     short $+2
                mov     bl, al
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                jmp     short $+2
                mov     bh, al
                mov     al, 6           ; Latch timer 0 count.
                                        ; Controller ignores lower nibble this command,
                                        ; unknown why 06h used rather than 0h.
                out     43h, al         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                jmp     short $+2
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                jmp     short $+2
                mov     ah, al
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                xchg    ah, al
                sub     ax, bx
                cmp     ah, 0
                jz      short loc_187B0
                neg     bx
                mov     ax, bx
                sub     ax, ds:word_13D0E
                pop     bx

loc_187EC:                              ; CODE XREF: sub_18715+118j
                                        ; sub_18715+11Bj
                mov     cx, ax
                push    bx

loc_187EF:                              ; CODE XREF: sub_18715+10Bj
                mov     al, 6           ; Latch timer 0 count.
                                        ; Controller ignores lower nibble this command,
                                        ; unknown why 06h used rather than 0h.
                out     43h, al         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                jmp     short $+2
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                jmp     short $+2
                mov     bl, al
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                jmp     short $+2
                mov     bh, al
                mov     al, 6           ; Latch timer 0 count.
                                        ; Controller ignores lower nibble this command,
                                        ; unknown why 06h used rather than 0h.
                out     43h, al         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                jmp     short $+2
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                jmp     short $+2
                mov     ah, al
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                xchg    ah, al
                sub     ax, bx
                cmp     ah, 0
                jz      short loc_187EF
                neg     bx
                mov     ax, bx
                sub     ax, ds:word_13D0E
                pop     bx
                cmp     ax, cx
                ja      short loc_187EC
                dec     di
                jnz     short loc_187EC

loc_18832:                              ; CODE XREF: sub_18715+97j
                cmp     bx, 0Ah
                jb      short loc_1888E

loc_18837:                              ; CODE XREF: sub_18715+167j
                mov     cx, ax
                push    bx

loc_1883A:                              ; CODE XREF: sub_18715+156j
                mov     al, 6           ; Latch timer 0 count.
                                        ; Controller ignores lower nibble this command,
                                        ; unknown why 06h used rather than 0h.
                out     43h, al         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                jmp     short $+2
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                jmp     short $+2
                mov     bl, al
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                jmp     short $+2
                mov     bh, al
                mov     al, 6           ; Latch timer 0 count.
                                        ; Controller ignores lower nibble this command,
                                        ; unknown why 06h used rather than 0h.
                out     43h, al         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                jmp     short $+2
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                jmp     short $+2
                mov     ah, al
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                xchg    ah, al
                sub     ax, bx
                cmp     ah, 0
                jz      short loc_1883A
                neg     bx
                mov     ax, bx
                sub     ax, ds:word_13D0E
                pop     bx
                cmp     ax, cx
                jb      short loc_1888E
                cmp     ax, bx
                jb      short loc_18837
                jmp     short loc_1888E
; ---------------------------------------------------------------------------
                db 90h
; ---------------------------------------------------------------------------

loc_18881:                              ; CODE XREF: sub_18715+3Dj
                                        ; sub_18715+16Fj
                in      al, dx
                and     al, 80h
                jnz     short loc_18881
                jmp     short loc_18889
; ---------------------------------------------------------------------------
                db 90h
; ---------------------------------------------------------------------------

loc_18889:                              ; CODE XREF: sub_18715+171j
                                        ; sub_18715+177j
                in      al, dx
                and     al, 80h
                jz      short loc_18889

loc_1888E:                              ; CODE XREF: sub_18715+120j
                                        ; sub_18715+163j sub_18715+169j
                mov     al, ds:TC_Port3Byte
                or      al, 3
                mov     ds:TC_Port3Byte, al
                add     dx, 3
                out     dx, al          ; turn on GO and RDENBL
                sub     dx, 3
                mov     al, ds:DMA_Channel
                out     0Ah, al         ; DMA controller, 8237A-5.
                                        ; single mask bit register
                                        ; 0-1: select channel (00=0; 01=1; 10=2; 11=3)
                                        ; 2: 1=set mask for channel; 0=clear mask (enable)
                call    sub_1AC25
                mov     ds:CurrTrackBufOfs, si
                mov     dx, si
                add     dx, ds:ReadLengthBytes
                mov     ds:EndOfCurrTrk, dx
                call    sub_189E1
                mov     ds:word_17F49, si
                mov     ds:byte_17F4B, cl
                mov     ax, ds:CurrTrackBufOfs
                sub     si, ax
                add     si, ds:TrackBufOfs

loc_188C7:                              ; CODE XREF: sub_18715+1B7j
                call    ReadDMACurrAddr
                cmp     bx, si
                jb      short loc_188C7
                mov     si, ds:TrackBufOfs
                mov     dx, si
                add     dx, ds:ReadLengthBytes
                add     dx, 180h
                mov     ds:EndOfCurrTrk, dx
                mov     ds:byte_17F52, 0

loc_188E5:                              ; CODE XREF: sub_18715+286j
                mov     es, ds:TrackBufSeg
                call    sub_189E1
                jb      short loc_18931
                mov     ds:word_17F4C, si
                mov     ds:byte_17F4E, cl
                call    sub_1AC25
                mov     si, ds:word_17F49
                mov     ch, ds:byte_17F4B
                mov     cl, ds:byte_17F4E
                mov     dx, word ptr ds:byte_17F47
                sub     dx, 38h ; '8'
                mov     di, ds:word_17F4C
                mov     ds, ds:TrackBufSeg
                cmp     cl, ch
                jnb     short loc_1891D
                dec     si
                sub     ch, cl
                mov     cl, 8

loc_1891D:                              ; CODE XREF: sub_18715+201j
                sub     cl, ch
                mov     bx, 4000h
                cld
                cmp     cl, 4
                jb      short loc_1893A
                mov     ch, 8
                sub     ch, cl
                mov     cl, ch
                jmp     short loc_18956
; ---------------------------------------------------------------------------
                db 90h
; ---------------------------------------------------------------------------

loc_18931:                              ; CODE XREF: sub_18715+1D7j
                                        ; sub_18715+289j
                mov     cs:byte_10066, 'C'
                jmp     short loc_189A6
; ---------------------------------------------------------------------------
                align 2

loc_1893A:                              ; CODE XREF: sub_18715+211j
                                        ; sub_18715+236j sub_18715+23Dj
                lods    word ptr es:[si]
                dec     si
                xchg    ah, al
                shl     ax, cl
                cmp     ah, [di]
                jnz     short loc_18950
                mov     bx, 4000h
                inc     di
                cmp     si, dx
                jb      short loc_1893A
                jmp     short loc_189A0
; ---------------------------------------------------------------------------
                align 2

loc_18950:                              ; CODE XREF: sub_18715+22Ej
                dec     si
                dec     bx
                jnz     short loc_1893A
                jz      short loc_18970

loc_18956:                              ; CODE XREF: sub_18715+219j
                                        ; sub_18715+252j sub_18715+259j
                lods    word ptr es:[si]
                dec     si
                xchg    ah, al
                shr     ax, cl
                cmp     al, [di]
                jnz     short loc_1896C
                mov     bx, 4000h
                inc     di
                cmp     si, dx
                jb      short loc_18956
                jmp     short loc_189A0
; ---------------------------------------------------------------------------
                align 2

loc_1896C:                              ; CODE XREF: sub_18715+24Aj
                dec     si
                dec     bx
                jnz     short loc_18956

loc_18970:                              ; CODE XREF: sub_18715+23Fj
                cmp     cl, 0
                jz      short loc_1897A
                cmp     cl, 4
                jnz     short loc_1897B

loc_1897A:                              ; CODE XREF: sub_18715+25Ej
                nop

loc_1897B:                              ; CODE XREF: sub_18715+263j
                push    cs
                pop     ds
                assume ds:seg001
                add     si, 2
                sub     si, word_17F49
                cmp     si, 20h ; ' '
                ja      short loc_1899E
                inc     byte_17F52
                cmp     byte_17F52, 4
                ja      short loc_1899E
                mov     si, word_17F4C
                add     si, 8
                jmp     loc_188E5
; ---------------------------------------------------------------------------

loc_1899E:                              ; CODE XREF: sub_18715+272j
                                        ; sub_18715+27Dj
                jmp     short loc_18931
; ---------------------------------------------------------------------------

loc_189A0:                              ; CODE XREF: sub_18715+238j
                                        ; sub_18715+254j
                mov     cs:byte_10066, 0

loc_189A6:                              ; CODE XREF: sub_18715+222j
                call    sub_173FD
                push    cs
                pop     ds
                call    MaskDMA
                mov     al, TC_Port3Byte
                and     al, 0F8h
                call    WriteTC_Port3
                cmp     KeepTrkLngthFlag, 'Y'
                jnz     short loc_189C0
                jmp     short loc_189C0
; ---------------------------------------------------------------------------
                align 2

loc_189C0:                              ; CODE XREF: sub_18715+2A6j
                                        ; sub_18715+2A8j
                cmp     byte_10066, 0
                jz      short loc_189D0
                dec     byte_17F46
                jz      short loc_189D0
                jmp     loc_18729
; ---------------------------------------------------------------------------

loc_189D0:                              ; CODE XREF: sub_18715+2B0j
                                        ; sub_18715+2B6j
                pop     si
                pop     di
                pop     es
                pop     ds
                assume ds:nothing
                cmp     ds:byte_10066, 0
                clc
                jz      short loc_189DD
                stc

loc_189DD:                              ; CODE XREF: sub_18715+2C5j
                mov     al, ds:byte_10066
                retn
sub_18715       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_189E1       proc near               ; CODE XREF: sub_18715+19Ep
                                        ; sub_18715+1D4p
                cmp     ds:DiskType, 7
                jb      short loc_189EC
                call    sub_184FC
                retn
; ---------------------------------------------------------------------------

loc_189EC:                              ; CODE XREF: sub_189E1+5j
                cmp     ds:DiskType, 4
                jnz     short loc_189F7
                call    sub_18634
                retn
; ---------------------------------------------------------------------------

loc_189F7:                              ; CODE XREF: sub_189E1+10j
                call    sub_18594
                retn
sub_189E1       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_189FB       proc near               ; CODE XREF: seg001:937Bp
                mov     bx, ds:TrackBufSeg
                mov     ax, ds:TrackBufOfs
                mov     bl, ah
                jmp     short loc_18A13
sub_189FB       endp

; ---------------------------------------------------------------------------
                db 90h

; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_18A07       proc near               ; CODE XREF: ReadWrite+337p
                call    GetTrkDatOfs
                mov     ax, word ptr ds:CurrTrackBufSeg
                mov     al, byte ptr ds:(TrackOffsTbl+1)[bx]
                mov     bx, ax

loc_18A13:                              ; CODE XREF: sub_189FB+9j
                shr     bh, 1
                shr     bh, 1
                shr     bh, 1
                shr     bh, 1
                mov     al, 4Ah ; 'J'
                mov     ds:DMATrkBufSeg, bx
                mov     ds:DMATrkBufOfs, ax
                mov     al, ds:byte_10068
                mov     ds:byte_17F4F, al
                mov     bx, 0

loc_18A2D:                              ; CODE XREF: sub_18A07+30j
                cmp     ds:word_14435[bx], 0FFFEh
                jz      short loc_18A39
                add     bx, 4
                jmp     short loc_18A2D
; ---------------------------------------------------------------------------

loc_18A39:                              ; CODE XREF: sub_18A07+2Bj
                mov     ds:word_17F53, bx
                call    SetDmaCount
                mov     ds:word_17F55, ax
                mov     ds:byte_13D04, 0
                cmp     ds:KeepTrkLngthFlag, 'Y'
                jnz     short loc_18A87
                cmp     ds:CopyXIDXFlag, 'Y'
                jnz     short loc_18A87
                cmp     ds:word_1006A, 8
                jnb     short loc_18A87
                mov     ds:byte_13D04, 0FFh
                mov     ax, ds:TrackLengthBits
                add     ax, 5
                shr     ax, 1
                shr     ax, 1
                shr     ax, 1
                add     ax, 2000h
                mov     ds:word_17F55, ax
                add     ds:word_17F55, 3
                call    GetTrkDatOfs
                mov     bh, byte ptr ds:(TrackOffsTbl+1)[bx]
                mov     bl, 0
                add     ax, bx
                mov     ds:word_17F50, ax

loc_18A87:                              ; CODE XREF: sub_18A07+46j
                                        ; sub_18A07+4Dj sub_18A07+54j
                cli
                call    ClearTimer0
                call    MaskDMA
                call    TrackReadOn
                mov     dh, ds:CurrentSide
                call    SelectHead
                call    sub_16BAA

loc_18A9B:                              ; CODE XREF: sub_18A07+5AFj
                                        ; sub_18A07+5D9j sub_18A07+608j
                mov     ds:word_17F40, 0
                mov     ax, ds:word_17F55
                mov     ds:DMACount, ax
                mov     al, ds:byte_15F9C
                call    WriteTC_Port4
                mov     bx, ds:DMATrkBufSeg
                mov     ax, ds:DMATrkBufOfs
                call    SetupDMA
                mov     di, ds:TrackSkewDly1
                mov     bx, ds:word_10072
                mov     cx, bx
                or      cx, di
                mov     dx, ds:TC_Port_Base
                cmp     ds:CopyXIDXFlag, 'Y'
                jz      short loc_18B42

loc_18ACE:                              ; CODE XREF: sub_18A07+CAj
                in      al, dx
                and     al, 80h
                jnz     short loc_18ACE
                jmp     short loc_18AD6
; ---------------------------------------------------------------------------
                align 2

loc_18AD6:                              ; CODE XREF: sub_18A07+CCj
                                        ; sub_18A07+D2j
                in      al, dx
                and     al, 80h
                jz      short loc_18AD6
                mov     al, ds:TC_Port3Byte
                or      al, 5
                add     dx, 3
                out     dx, al          ; turn on GO and WTENBL
                sub     dx, 3
                mov     ds:TC_Port3Byte, al
                call    UnmaskDMA

loc_18AED:                              ; CODE XREF: sub_18A07+10Dj
                call    ReadDMACurrAddr
                mov     ax, bx
                mov     bx, ds:word_17F40
                cmp     ax, ds:word_14435[bx]
                jb      short loc_18B11
                shr     bx, 1
                mov     al, byte ptr ds:unk_14535[bx]
                add     dx, 4
                out     dx, al
                sub     dx, 4
                add     ds:word_17F40, 2
                mov     ds:TC_Port4Byte, al

loc_18B11:                              ; CODE XREF: sub_18A07+F3j
                in      al, dx
                and     al, 80h
                jnz     short loc_18AED

loc_18B16:                              ; CODE XREF: sub_18A07+136j
                call    ReadDMACurrAddr
                mov     ax, bx
                mov     bx, ds:word_17F40
                cmp     ax, ds:word_14435[bx]
                jb      short loc_18B3A
                shr     bx, 1
                mov     al, byte ptr ds:unk_14535[bx]
                add     dx, 4
                out     dx, al
                sub     dx, 4
                add     ds:word_17F40, 2
                mov     ds:TC_Port4Byte, al

loc_18B3A:                              ; CODE XREF: sub_18A07+11Cj
                in      al, dx
                and     al, 80h
                jz      short loc_18B16
                jmp     loc_18F3B
; ---------------------------------------------------------------------------

loc_18B42:                              ; CODE XREF: sub_18A07+C5j
                                        ; sub_18A07+13Ej
                in      al, dx
                and     al, 80h
                jnz     short loc_18B42
                jmp     short loc_18B4A
; ---------------------------------------------------------------------------
                align 2

loc_18B4A:                              ; CODE XREF: sub_18A07+140j
                                        ; sub_18A07+146j
                in      al, dx
                and     al, 80h
                jz      short loc_18B4A
                cmp     cx, 0
                jnz     short loc_18B57
                jmp     loc_18C6B
; ---------------------------------------------------------------------------

loc_18B57:                              ; CODE XREF: sub_18A07+14Bj
                push    bx

loc_18B58:                              ; CODE XREF: sub_18A07+182j
                mov     al, 6           ; Latch timer 0 count.
                                        ; Controller ignores lower nibble this command,
                                        ; unknown why 06h used rather than 0h.
                out     43h, al         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                jmp     short $+2
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                jmp     short $+2
                mov     bl, al
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                jmp     short $+2
                mov     bh, al
                mov     al, 6           ; Latch timer 0 count.
                                        ; Controller ignores lower nibble this command,
                                        ; unknown why 06h used rather than 0h.
                out     43h, al         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                jmp     short $+2
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                jmp     short $+2
                mov     ah, al
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                xchg    ah, al
                sub     ax, bx
                cmp     ah, 0
                jz      short loc_18B58
                neg     bx
                mov     ds:word_13D0E, bx
                pop     bx
                xor     ax, ax
                cmp     di, 0
                jnz     short loc_18B9C
                jmp     loc_18C1F
; ---------------------------------------------------------------------------

loc_18B9C:                              ; CODE XREF: sub_18A07+190j
                push    bx

loc_18B9D:                              ; CODE XREF: sub_18A07+1C7j
                mov     al, 6           ; Latch timer 0 count.
                                        ; Controller ignores lower nibble this command,
                                        ; unknown why 06h used rather than 0h.
                out     43h, al         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                jmp     short $+2
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                jmp     short $+2
                mov     bl, al
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                jmp     short $+2
                mov     bh, al
                mov     al, 6           ; Latch timer 0 count.
                                        ; Controller ignores lower nibble this command,
                                        ; unknown why 06h used rather than 0h.
                out     43h, al         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                jmp     short $+2
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                jmp     short $+2
                mov     ah, al
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                xchg    ah, al
                sub     ax, bx
                cmp     ah, 0
                jz      short loc_18B9D
                neg     bx
                mov     ax, bx
                sub     ax, ds:word_13D0E
                pop     bx

loc_18BD9:                              ; CODE XREF: sub_18A07+213j
                                        ; sub_18A07+216j
                mov     cx, ax
                push    bx

loc_18BDC:                              ; CODE XREF: sub_18A07+206j
                mov     al, 6           ; Latch timer 0 count.
                                        ; Controller ignores lower nibble this command,
                                        ; unknown why 06h used rather than 0h.
                out     43h, al         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                jmp     short $+2
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                jmp     short $+2
                mov     bl, al
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                jmp     short $+2
                mov     bh, al
                mov     al, 6           ; Latch timer 0 count.
                                        ; Controller ignores lower nibble this command,
                                        ; unknown why 06h used rather than 0h.
                out     43h, al         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                jmp     short $+2
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                jmp     short $+2
                mov     ah, al
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                xchg    ah, al
                sub     ax, bx
                cmp     ah, 0
                jz      short loc_18BDC
                neg     bx
                mov     ax, bx
                sub     ax, ds:word_13D0E
                pop     bx
                cmp     ax, cx
                ja      short loc_18BD9
                dec     di
                jnz     short loc_18BD9

loc_18C1F:                              ; CODE XREF: sub_18A07+192j
                cmp     bx, 0Ah
                jb      short loc_18C6B

loc_18C24:                              ; CODE XREF: sub_18A07+262j
                mov     cx, ax
                push    bx

loc_18C27:                              ; CODE XREF: sub_18A07+251j
                mov     al, 6           ; Latch timer 0 count.
                                        ; Controller ignores lower nibble this command,
                                        ; unknown why 06h used rather than 0h.
                out     43h, al         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                jmp     short $+2
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                jmp     short $+2
                mov     bl, al
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                jmp     short $+2
                mov     bh, al
                mov     al, 6           ; Latch timer 0 count.
                                        ; Controller ignores lower nibble this command,
                                        ; unknown why 06h used rather than 0h.
                out     43h, al         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                jmp     short $+2
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                jmp     short $+2
                mov     ah, al
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                xchg    ah, al
                sub     ax, bx
                cmp     ah, 0
                jz      short loc_18C27
                neg     bx
                mov     ax, bx
                sub     ax, ds:word_13D0E
                pop     bx
                cmp     ax, cx
                jb      short loc_18C6B
                cmp     ax, bx
                jb      short loc_18C24

loc_18C6B:                              ; CODE XREF: sub_18A07+14Dj
                                        ; sub_18A07+21Bj sub_18A07+25Ej
                mov     al, ds:TC_Port3Byte
                or      al, 5
                mov     ds:TC_Port3Byte, al
                add     dx, 3
                out     dx, al          ; turn on GO and WTENBL
                sub     dx, 3
                mov     al, ds:DMA_Channel
                out     0Ah, al         ; Unmask DMA
                cmp     ds:byte_13D04, 0
                jnz     short loc_18C93
                cmp     ds:byte_13D1C, 0
                jz      short loc_18C90
                call    sub_19028

loc_18C90:                              ; CODE XREF: sub_18A07+284j
                jmp     short loc_18D0C
; ---------------------------------------------------------------------------
                db 90h
; ---------------------------------------------------------------------------

loc_18C93:                              ; CODE XREF: sub_18A07+27Dj
                                        ; sub_18A07+29Dj sub_18A07+2BBj
                                        ; sub_18A07+371j
                call    ReadDMACurrAddr
                cmp     bx, ds:word_17F50
                jnb     short loc_18D05
                mov     si, ds:word_17F40
                cmp     bx, ds:word_14435[si]
                jb      short loc_18C93
                shr     si, 1
                mov     al, byte ptr ds:unk_14535[si]
                add     dx, 4
                out     dx, al
                sub     dx, 4
                add     ds:word_17F40, 2
                mov     ds:TC_Port4Byte, al
                shl     si, 1
                cmp     word ptr ds:unk_14437[si], 0FFFEh
                jnz     short loc_18C93
                mov     dx, ds:DMACurrAddrPort
                mov     si, ds:TC_Port3
                mov     cl, ds:TC_Port3Byte
                and     cl, 0F9h
                mov     di, ds:word_17F50

loc_18CD7:                              ; CODE XREF: sub_18A07+2F1j
                in      al, dx
                jmp     short $+2
                jmp     short $+2
                mov     bl, al
                in      al, dx
                mov     bh, al
                cmp     bl, 0F8h ; '°'
                jb      short loc_18CF6
                in      al, dx
                jmp     short $+2
                jmp     short $+2
                mov     ah, al
                in      al, dx
                xchg    ah, al
                cmp     ax, bx
                jnb     short loc_18CF6
                dec     bh

loc_18CF6:                              ; CODE XREF: sub_18A07+2DDj
                                        ; sub_18A07+2EBj
                cmp     bx, di
                jb      short loc_18CD7
                mov     dx, si
                mov     al, cl
                out     dx, al
                mov     ds:TC_Port3Byte, al
                jmp     loc_18F47
; ---------------------------------------------------------------------------

loc_18D05:                              ; CODE XREF: sub_18A07+293j
                mov     dx, ds:TC_Port_Base
                jmp     loc_18F3B
; ---------------------------------------------------------------------------

loc_18D0C:                              ; CODE XREF: sub_18A07+289j
                                        ; sub_18A07+333j
                cmp     ds:KeepTrkLngthFlag, 'Y'
                jnz     short loc_18D37
                call    ReadDMACurrAddr
                mov     ax, bx
                mov     bx, ds:word_17F40
                cmp     ax, ds:word_14435[bx]
                jb      short loc_18D37
                shr     bx, 1
                mov     al, byte ptr ds:unk_14535[bx]
                add     dx, 4
                out     dx, al
                sub     dx, 4
                add     ds:word_17F40, 2
                mov     ds:TC_Port4Byte, al

loc_18D37:                              ; CODE XREF: sub_18A07+30Aj
                                        ; sub_18A07+319j
                in      al, dx
                and     al, 80h
                jnz     short loc_18D0C

loc_18D3C:                              ; CODE XREF: sub_18A07+361j
                cmp     ds:KeepTrkLngthFlag, 'Y'
                jnz     short loc_18D65
                call    ReadDMACurrAddr
                mov     si, ds:word_17F40
                cmp     bx, ds:word_14435[si]
                jb      short loc_18D65
                shr     si, 1
                mov     al, byte ptr ds:unk_14535[si]
                add     dx, 4
                out     dx, al
                sub     dx, 4
                add     ds:word_17F40, 2
                mov     ds:TC_Port4Byte, al

loc_18D65:                              ; CODE XREF: sub_18A07+33Aj
                                        ; sub_18A07+347j
                in      al, dx
                and     al, 80h
                jz      short loc_18D3C
                cmp     ds:byte_13D1C, 0
                jz      short loc_18D7B
                call    ReadDMACurrAddr
                add     ds:word_17F50, bx
                jmp     loc_18C93
; ---------------------------------------------------------------------------

loc_18D7B:                              ; CODE XREF: sub_18A07+368j
                push    bx

loc_18D7C:                              ; CODE XREF: sub_18A07+3A6j
                mov     al, 6           ; Latch timer 0 count.
                                        ; Controller ignores lower nibble this command,
                                        ; unknown why 06h used rather than 0h.
                out     43h, al         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                jmp     short $+2
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                jmp     short $+2
                mov     bl, al
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                jmp     short $+2
                mov     bh, al
                mov     al, 6           ; Latch timer 0 count.
                                        ; Controller ignores lower nibble this command,
                                        ; unknown why 06h used rather than 0h.
                out     43h, al         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                jmp     short $+2
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                jmp     short $+2
                mov     ah, al
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                xchg    ah, al
                sub     ax, bx
                cmp     ah, 0
                jz      short loc_18D7C
                neg     bx
                mov     ds:word_13D0E, bx
                pop     bx
                xor     ax, ax
                mov     di, ds:TrackSkewDly1
                cmp     di, 0
                jnz     short loc_18DC4
                jmp     loc_18E70
; ---------------------------------------------------------------------------

loc_18DC4:                              ; CODE XREF: sub_18A07+3B8j
                push    bx

loc_18DC5:                              ; CODE XREF: sub_18A07+3EFj
                mov     al, 6           ; Latch timer 0 count.
                                        ; Controller ignores lower nibble this command,
                                        ; unknown why 06h used rather than 0h.
                out     43h, al         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                jmp     short $+2
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                jmp     short $+2
                mov     bl, al
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                jmp     short $+2
                mov     bh, al
                mov     al, 6           ; Latch timer 0 count.
                                        ; Controller ignores lower nibble this command,
                                        ; unknown why 06h used rather than 0h.
                out     43h, al         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                jmp     short $+2
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                jmp     short $+2
                mov     ah, al
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                xchg    ah, al
                sub     ax, bx
                cmp     ah, 0
                jz      short loc_18DC5
                neg     bx
                mov     ax, bx
                sub     ax, ds:word_13D0E
                pop     bx

loc_18E01:                              ; CODE XREF: sub_18A07+464j
                                        ; sub_18A07+467j
                mov     cx, ax
                cmp     ds:KeepTrkLngthFlag, 'Y'
                jnz     short loc_18E2C
                call    ReadDMACurrAddr
                mov     si, ds:word_17F40
                cmp     bx, ds:word_14435[si]
                jb      short loc_18E2C
                shr     si, 1
                mov     al, byte ptr ds:unk_14535[si]
                add     dx, 4
                out     dx, al
                sub     dx, 4
                add     ds:word_17F40, 2
                mov     ds:TC_Port4Byte, al

loc_18E2C:                              ; CODE XREF: sub_18A07+401j
                                        ; sub_18A07+40Ej
                push    bx

loc_18E2D:                              ; CODE XREF: sub_18A07+457j
                mov     al, 6           ; Latch timer 0 count.
                                        ; Controller ignores lower nibble this command,
                                        ; unknown why 06h used rather than 0h.
                out     43h, al         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                jmp     short $+2
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                jmp     short $+2
                mov     bl, al
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                jmp     short $+2
                mov     bh, al
                mov     al, 6           ; Latch timer 0 count.
                                        ; Controller ignores lower nibble this command,
                                        ; unknown why 06h used rather than 0h.
                out     43h, al         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                jmp     short $+2
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                jmp     short $+2
                mov     ah, al
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                xchg    ah, al
                sub     ax, bx
                cmp     ah, 0
                jz      short loc_18E2D
                neg     bx
                mov     ax, bx
                sub     ax, ds:word_13D0E
                pop     bx
                cmp     ax, cx
                ja      short loc_18E01
                dec     di
                jnz     short loc_18E01

loc_18E70:                              ; CODE XREF: sub_18A07+3BAj
                mov     cx, ds:word_10072
                cmp     cx, 0Ah
                jnb     short loc_18E7C
                jmp     loc_18F3B
; ---------------------------------------------------------------------------

loc_18E7C:                              ; CODE XREF: sub_18A07+470j
                                        ; sub_18A07+4E9j
                mov     bp, ax
                cmp     ds:KeepTrkLngthFlag, 'Y'
                jnz     short loc_18EAD
                call    ReadDMACurrAddr
                mov     si, ds:word_17F40
                cmp     bx, ds:word_14435[si]
                jb      short loc_18EAD
                shr     si, 1
                mov     al, byte ptr ds:unk_14535[si]
                add     dx, 4
                out     dx, al
                sub     dx, 4
                add     ds:word_17F40, 2
                shl     si, 1
                cmp     word ptr ds:unk_14437[si], 0FFFEh
                jz      short loc_18EF6

loc_18EAD:                              ; CODE XREF: sub_18A07+47Cj
                                        ; sub_18A07+489j
                push    bx

loc_18EAE:                              ; CODE XREF: sub_18A07+4D8j
                mov     al, 6           ; Latch timer 0 count.
                                        ; Controller ignores lower nibble this command,
                                        ; unknown why 06h used rather than 0h.
                out     43h, al         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                jmp     short $+2
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                jmp     short $+2
                mov     bl, al
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                jmp     short $+2
                mov     bh, al
                mov     al, 6           ; Latch timer 0 count.
                                        ; Controller ignores lower nibble this command,
                                        ; unknown why 06h used rather than 0h.
                out     43h, al         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                jmp     short $+2
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                jmp     short $+2
                mov     ah, al
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                xchg    ah, al
                sub     ax, bx
                cmp     ah, 0
                jz      short loc_18EAE
                neg     bx
                mov     ax, bx
                sub     ax, ds:word_13D0E
                pop     bx
                cmp     ax, bp
                jb      short loc_18F3B
                cmp     ax, cx
                jb      short loc_18E7C
                jnb     short loc_18F3B

loc_18EF4:                              ; CODE XREF: sub_18A07+532j
                mov     bp, ax

loc_18EF6:                              ; CODE XREF: sub_18A07+4A4j
                push    bx

loc_18EF7:                              ; CODE XREF: sub_18A07+521j
                mov     al, 6           ; Latch timer 0 count.
                                        ; Controller ignores lower nibble this command,
                                        ; unknown why 06h used rather than 0h.
                out     43h, al         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                jmp     short $+2
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                jmp     short $+2
                mov     bl, al
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                jmp     short $+2
                mov     bh, al
                mov     al, 6           ; Latch timer 0 count.
                                        ; Controller ignores lower nibble this command,
                                        ; unknown why 06h used rather than 0h.
                out     43h, al         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                jmp     short $+2
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                jmp     short $+2
                jmp     short $+2
                mov     ah, al
                in      al, 40h         ; Timer 8253-5 (AT: 8254.2).
                xchg    ah, al
                sub     ax, bx
                cmp     ah, 0
                jz      short loc_18EF7
                neg     bx
                mov     ax, bx
                sub     ax, ds:word_13D0E
                pop     bx
                cmp     ax, bp
                jb      short loc_18F3B
                cmp     ax, cx
                jb      short loc_18EF4

loc_18F3B:                              ; CODE XREF: sub_18A07+138j
                                        ; sub_18A07+302j sub_18A07+472j
                                        ; sub_18A07+4E5j sub_18A07+4EBj
                                        ; sub_18A07+52Ej
                mov     al, ds:TC_Port3Byte
                and     al, 0F9h ; '·'
                add     dx, 3
                out     dx, al          ; turn off WTENBL and RDENBL
                mov     ds:TC_Port3Byte, al

loc_18F47:                              ; CODE XREF: sub_18A07+2FBj
                call    ReadDMAWrdCnt
                push    bx
                call    ReadDMACurrAddr
                mov     word ptr ds:byte_17F47, bx
                pop     bx
                cli
                call    ClearTimer0
                in      al, 21h         ; Interrupt controller, 8259A.
                jmp     short $+2
                jmp     short $+2
                or      al, 1
                and     al, 0FDh
                out     21h, al         ; Interrupt controller, 8259A.
                mov     ax, ds:DMACount
                sub     ax, bx
                sub     ax, 1
                mov     ds:ReadLengthBytes, ax
                shl     ax, 1
                shl     ax, 1
                shl     ax, 1
                mov     ds:WrittenLength, ax
                call    sub_173FD
                call    MaskDMA
                mov     al, ds:TC_Port3Byte
                and     al, 0F8h
                call    WriteTC_Port3
                cmp     ds:KeepTrkLngthFlag, 'Y'
                jnz     short loc_18FEB
                call    sub_19089
                mov     ds:WrittenLength, ax
                mov     ds:word_13D02, dx
                mov     dx, ax
                sub     dx, ds:TrackLengthBits
                jns     short loc_18FA0
                neg     dx

loc_18FA0:                              ; CODE XREF: sub_18A07+595j
                cmp     dx, ds:word_1006A
                jbe     short loc_18FEB
                push    dx
                call    DispWritLngth
                pop     dx
                cmp     dx, 6
                ja      short loc_18FB9
                dec     ds:byte_10068
                jz      short loc_18FB9
                jmp     loc_18A9B
; ---------------------------------------------------------------------------

loc_18FB9:                              ; CODE XREF: sub_18A07+5A7j
                                        ; sub_18A07+5ADj
                mov     al, ds:byte_17F4F
                mov     ds:byte_10068, al
                dec     ds:byte_10069
                jz      short loc_18FE3
                cmp     ds:word_1006A, 8
                jnb     short loc_18FDD
                mov     al, 1
                call    sub_138EE
                cmp     ds:byte_10069, 1Eh
                jnb     short loc_18FDD
                mov     al, 2
                call    sub_138EE

loc_18FDD:                              ; CODE XREF: sub_18A07+5C3j
                                        ; sub_18A07+5CFj
                call    sub_19160
                jmp     loc_18A9B
; ---------------------------------------------------------------------------

loc_18FE3:                              ; CODE XREF: sub_18A07+5BCj
                mov     ds:byte_10066, 'K'
                jmp     short loc_19012
; ---------------------------------------------------------------------------
                db 90h
; ---------------------------------------------------------------------------

loc_18FEB:                              ; CODE XREF: sub_18A07+583j
                                        ; sub_18A07+59Dj
                cmp     ds:VerifyWrtFlag, 'N'
                clc
                jz      short loc_19013
                call    GetTrkDatOfs
                mov     bl, byte ptr ds:TrackTypeTable[bx]
                test    bl, 0C0h
                clc
                jnz     short loc_19013
                call    sub_18715
                jnb     short loc_19013
                cmp     al, 0
                jnz     short loc_19012
                dec     ds:byte_10069
                jz      short loc_19012
                jmp     loc_18A9B
; ---------------------------------------------------------------------------

loc_19012:                              ; CODE XREF: sub_18A07+5E1j
                                        ; sub_18A07+600j sub_18A07+606j
                stc

loc_19013:                              ; CODE XREF: sub_18A07+5EAj
                                        ; sub_18A07+5F7j sub_18A07+5FCj
                pushf
                call    MaskDMA
                sti
                mov     dh, 80h ; 'Ç'
                call    SelectHead
                call    TrackReadOff
                call    sub_16BBA
                mov     al, ds:byte_10066
                popf
                retn
sub_18A07       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_19028       proc near               ; CODE XREF: sub_18A07+286p
                push    dx
                cmp     ds:KeepTrkLngthFlag, 'Y'
                jz      short loc_19060
                mov     al, 0
                sub     al, ds:TC_Port4Byte
                inc     al
                mov     ah, 0
                mov     bx, 4C6h
                mul     bx
                mov     bx, 6
                div     bx

loc_19044:                              ; CODE XREF: sub_19028+5Fj
                mov     bx, ax
                mov     dx, ds:TrackSkewDly1
                mov     ax, ds:word_10072

loc_1904D:
                mov     dh, dl
                mov     dl, ah
                mov     ah, al
                mov     al, 0
                shl     ax, 1
                rcl     dx, 1
                div     bx
                mov     ds:word_17F50, ax
                pop     dx
                retn
; ---------------------------------------------------------------------------

loc_19060:                              ; CODE XREF: sub_19028+6j
                mov     bh, 0
                mov     bl, ds:CurrentDrive
                shl     bl, 1
                shl     bl, 1
                mov     dx, ds:word_15F6E[bx]
                mov     ax, ds:word_15F6C[bx]
                mov     dh, dl
                mov     dl, ah
                mov     ah, al
                mov     al, 0
                shl     ax, 1
                rcl     dx, 1
                push    dx
                call    RdTrkLngthTbl
                mov     bx, dx
                pop     dx
                div     bx
                jmp     short loc_19044
sub_19028       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_19089       proc near               ; CODE XREF: sub_18A07+585p
                mov     ax, ds:EndOfCurrTrk
                push    ax
                mov     ds:EndOfCurrTrk, 69FEh
                cmp     ds:word_1006A, 8
                jb      short loc_1909D
                jmp     loc_19152
; ---------------------------------------------------------------------------

loc_1909D:                              ; CODE XREF: sub_19089+Fj
                call    SetDmaCount
                shl     ds:DMACount, 1
                call    sub_168BD
                mov     bx, ds:TrackBufSeg
                mov     ax, ds:TrackBufOfs
                mov     bl, ah
                shr     bh, 1
                shr     bh, 1
                shr     bh, 1
                shr     bh, 1
                mov     al, 46h ; 'F'
                call    SetupDMA
                mov     dx, ds:TC_Port_Base

loc_190C1:                              ; CODE XREF: sub_19089+3Bj
                in      al, dx
                and     al, 80h
                jnz     short loc_190C1
                jmp     short loc_190C9
; ---------------------------------------------------------------------------
                db 90h
; ---------------------------------------------------------------------------

loc_190C9:                              ; CODE XREF: sub_19089+3Dj
                                        ; sub_19089+43j
                in      al, dx
                and     al, 80h
                jz      short loc_190C9
                mov     al, ds:TC_Port3Byte
                or      al, 3
                add     dx, 3
                out     dx, al          ; turn on RDENBL and GO
                sub     dx, 3
                mov     ds:TC_Port3Byte, al
                call    UnmaskDMA

loc_190E0:                              ; CODE XREF: sub_19089+5Aj
                in      al, dx
                and     al, 80h
                jnz     short loc_190E0
                jmp     short loc_190E8
; ---------------------------------------------------------------------------
                align 2

loc_190E8:                              ; CODE XREF: sub_19089+5Cj
                                        ; sub_19089+62j
                in      al, dx
                and     al, 80h
                jz      short loc_190E8
                call    ReadDMAWrdCnt
                mov     ax, ds:DMACount
                sub     ax, bx
                mov     ds:ReadLengthBytes, ax
                sub     ds:ReadLengthBytes, 0
                call    WaitForDMA
                call    MaskDMA
                mov     al, ds:TC_Port3Byte
                and     al, 0F8h
                call    WriteTC_Port3
                mov     es, ds:TrackBufSeg
                mov     si, ds:TrackBufOfs
                call    sub_184FC
                jb      short loc_19152
                mov     ch, 0
                push    si
                push    cx
                add     si, ds:ReadLengthBytes
                sub     si, 14h
                call    sub_184FC
                mov     ch, 0
                pop     bx
                pop     ax
                jb      short loc_19152
                sub     si, ax
                mov     ax, si
                mov     dx, si
                sub     dx, ds:ReadLengthBytes
                cmp     dx, 3
                jbe     short loc_19140
                cmp     dx, 0FFFDh
                jb      short loc_19152

loc_19140:                              ; CODE XREF: sub_19089+B0j
                mov     dx, 8
                mul     dx
                add     ax, bx
                sub     ax, cx
                sbb     dx, 0
                pop     bx
                mov     ds:EndOfCurrTrk, bx
                retn
; ---------------------------------------------------------------------------

loc_19152:                              ; CODE XREF: sub_19089+11j
                                        ; sub_19089+8Dj sub_19089+A1j
                                        ; sub_19089+B5j
                mov     ax, ds:ReadLengthBytes
                mov     dx, 8
                mul     dx
                pop     bx
                mov     ds:EndOfCurrTrk, bx
                retn
sub_19089       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_19160       proc near               ; CODE XREF: sub_18A07+5D6p
                mov     dx, ds:TrackLengthBits
                sub     dx, ds:WrittenLength
                mov     ax, dx
                test    ah, 80h
                jz      short loc_19171
                neg     ax

loc_19171:                              ; CODE XREF: sub_19160+Dj
                mov     cl, 3
                cmp     ax, 10h
                ja      short loc_1917A
                mov     cl, 2

loc_1917A:                              ; CODE XREF: sub_19160+16j
                shl     dx, cl
                mov     ax, dx
                mov     dx, 0
                mov     cx, ds:word_17F53
                cmp     cx, 0
                jnz     short loc_1918D
                mov     cx, 4

loc_1918D:                              ; CODE XREF: sub_19160+28j
                shr     cx, 1
                shr     cx, 1
                cwd
                idiv    cx
                mov     ds:word_17F57, 1
                test    dh, 80h
                jz      short loc_191A7
                neg     dx
                mov     ds:word_17F57, 0FFFFh

loc_191A7:                              ; CODE XREF: sub_19160+3Dj
                mov     ds:word_17F59, dx
                mov     di, ax
                mov     bx, 2

loc_191B0:                              ; CODE XREF: sub_19160+D0j
                sub     ds:word_14435[bx], di
                cmp     ds:word_17F59, 0
                jz      short loc_191C6
                mov     ax, ds:word_17F57
                sub     ds:word_14435[bx], ax
                dec     ds:word_17F59

loc_191C6:                              ; CODE XREF: sub_19160+59j
                mov     cx, ds:word_14435[bx]
                cmp     cx, word ptr ds:unk_14437[bx]
                jbe     short loc_191F9
                add     ds:word_14435[bx], di
                mov     ax, word ptr ds:unk_14437[bx]
                sub     ax, ds:word_14435[bx]
                add     ax, word ptr ds:unk_14433[bx]
                mov     ds:word_14435[bx], ax
                shr     bx, 1
                mov     cl, byte ptr ds:unk_14534[bx]
                mov     byte ptr ds:unk_14535[bx], cl
                dec     cl
                mov     byte ptr ds:unk_14534[bx], cl
                shl     bx, 1
                jmp     short loc_19227
; ---------------------------------------------------------------------------
                db 90h
; ---------------------------------------------------------------------------

loc_191F9:                              ; CODE XREF: sub_19160+6Ej
                cmp     cx, word ptr ds:unk_14433[bx]
                jnb     short loc_19227
                add     ds:word_14435[bx], di
                mov     ax, ds:word_14435[bx]
                sub     ax, word ptr ds:unk_14433[bx]
                mov     cx, word ptr ds:unk_14437[bx]
                sub     cx, ax
                mov     ds:word_14435[bx], cx
                shr     bx, 1
                mov     ch, byte ptr ds:unk_14535[bx]
                mov     byte ptr ds:unk_14534[bx], ch
                inc     ch
                mov     byte ptr ds:unk_14535[bx], ch
                shl     bx, 1

loc_19227:                              ; CODE XREF: sub_19160+96j
                                        ; sub_19160+9Dj
                add     bx, 4
                cmp     bx, ds:word_17F53
                jnb     short locret_19233
                jmp     loc_191B0
; ---------------------------------------------------------------------------

locret_19233:                           ; CODE XREF: sub_19160+CEj
                retn
sub_19160       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_19234       proc near               ; CODE XREF: seg001:9384p
                mov     bx, ds:TrackBufSeg
                mov     ax, ds:TrackBufOfs
                mov     bl, ah
                jmp     short loc_19249
sub_19234       endp

; ---------------------------------------------------------------------------
                align 2

; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


ReadTrack       proc near               ; CODE XREF: ReadWrite+172p
                mov     bx, ds:TrackBufSeg
                mov     ax, ds:TrackBufOfs
                mov     bl, ah

loc_19249:                              ; CODE XREF: sub_19234+9j
                shr     bh, 1
                shr     bh, 1
                shr     bh, 1
                shr     bh, 1
                mov     ds:DMATrkBufSeg, bx
                mov     ds:DMATrkBufOfs, ax
                call    SetDmaCount
                shl     ax, 1
                mov     ds:DMACount, ax
                call    TrackReadOn
                cli
                call    ClearTimer0
                call    SetReadspeed
                mov     dh, ds:CurrentSide
                call    SelectHead
                mov     al, ds:TC_Port3Byte
                or      al, 2
                mov     dx, ds:TC_Port_Base
                add     dx, 3
                out     dx, al          ; turn on RDENBL (bit 2)
                mov     ds:TC_Port3Byte, al
                mov     bx, ds:DMATrkBufSeg
                mov     ax, ds:DMATrkBufOfs
                mov     al, 46h ; 'F'   ; DMA mode: Write to memory, count up, single.
                call    SetupDMA
                mov     dx, ds:TC_Port_Base

loc_19291:                              ; CODE XREF: ReadTrack+54j
                in      al, dx
                and     al, 80h
                jnz     short loc_19291 ; wait for index to go high
                jmp     short loc_19299
; ---------------------------------------------------------------------------
                db 90h
; ---------------------------------------------------------------------------

loc_19299:                              ; CODE XREF: ReadTrack+56j
                                        ; ReadTrack+5Cj
                in      al, dx
                and     al, 80h
                jz      short loc_19299 ; wait for index to go low
                mov     al, ds:TC_Port3Byte
                or      al, 3
                add     dx, 3
                out     dx, al          ; turn on GO and RDENBL
                sub     dx, 3
                mov     ds:TC_Port3Byte, al
                call    UnmaskDMA

loc_192B0:                              ; CODE XREF: ReadTrack+73j
                in      al, dx
                and     al, 80h
                jnz     short loc_192B0
                call    ReadDMAWrdCnt
                mov     ds:DMAReadCount, bx

loc_192BC:                              ; CODE XREF: ReadTrack+7Fj
                in      al, dx
                and     al, 80h
                jz      short loc_192BC
                call    ReadDMAWrdCnt
                mov     ax, ds:DMAReadCount
                sub     ax, bx
                cmp     ax, 100h
                jnb     short loc_192F5
                mov     ds:ReadLengthBytes, 3100h
                mov     ds:TrackLengthBits, 8800h
                push    di
                push    es
                mov     es, ds:TrackBufSeg
                mov     di, ds:TrackBufOfs
                mov     cx, 3500h
                mov     ax, 0
                cld
                rep stosw
                pop     es
                pop     di
                call    sub_173FD
                jmp     short loc_19309
; ---------------------------------------------------------------------------
                db 90h
; ---------------------------------------------------------------------------

loc_192F5:                              ; CODE XREF: ReadTrack+8Cj
                mov     ax, ds:DMACount
                sub     ax, bx
                mov     ds:ReadLengthBytes, ax
                shl     ax, 1
                shl     ax, 1
                shl     ax, 1
                mov     ds:TrackLengthBits, ax
                call    WaitForDMA

loc_19309:                              ; CODE XREF: ReadTrack+B2j
                call    MaskDMA
                mov     al, ds:TC_Port3Byte
                and     al, 0F8h ; '°'  ; GO and RDENBL off.
                call    WriteTC_Port3
                sti
                mov     dh, 80h ; 'Ç'
                call    SelectHead
                call    TrackReadOff
                retn
ReadTrack       endp

; ---------------------------------------------------------------------------
                cmp     ds:CurrentCylinder, ' '
                jb      short loc_19350
                cmp     ds:KeepTrkLngthFlag, 'Y'
                jz      short loc_19350
                cmp     ds:CpyWkBitsFlag, 'Y'
                jnz     short loc_19350
                mov     ds:byte_10097, 1
                push    bx
                call    GetTrkDatOfs
                test    byte ptr ds:TrackTypeTable[bx], 40h
                pop     bx
                jnz     short loc_19356
                mov     ds:byte_10097, 0FFh
                cmp     ds:byte_10086, 1
                jz      short loc_19356

loc_19350:                              ; CODE XREF: seg001:9323j seg001:932Aj
                                        ; seg001:9331j
                mov     ds:byte_10097, 0
                retn
; ---------------------------------------------------------------------------

loc_19356:                              ; CODE XREF: seg001:9342j seg001:934Ej
                push    bx
                push    cx
                push    dx
                push    es
                push    si
                push    di
                mov     es, ds:TrackBufSeg
                mov     si, ds:TrackBufOfs
                push    si
                push    es
                mov     cx, 1A80h

loc_19369:                              ; CODE XREF: seg001:9370j
                mov     word ptr es:[si], 0AAAAh
                inc     si
                inc     si
                loop    loc_19369
                mov     al, ds:CopyXIDXFlag
                push    ax
                mov     ds:CopyXIDXFlag, 'N'
                call    sub_189FB
                mov     ax, ds:ReadLengthBytes
                mov     ds:word_17F3C, ax
                call    sub_19234
                pop     ax
                mov     ds:CopyXIDXFlag, al
                pop     es
                pop     si
                mov     bx, si
                add     si, 0Ch
                mov     ax, es:[si]
                mov     cx, ds:word_17F3C
                sub     cx, 12h
                shr     cx, 1

loc_1939E:                              ; CODE XREF: seg001:93A5j
                inc     si
                inc     si
                cmp     ax, es:[si]
                jnz     short loc_193AF
                loop    loc_1939E

loc_193A7:                              ; CODE XREF: seg001:93C1j
                mov     ds:byte_10097, 0
                jmp     loc_19493
; ---------------------------------------------------------------------------

loc_193AF:                              ; CODE XREF: seg001:93A3j
                mov     di, si
                mov     si, bx
                add     si, ds:word_17F3C
                sub     si, 12h
                mov     ax, es:[si]

loc_193BD:                              ; CODE XREF: seg001:93C6j
                dec     si
                dec     si
                cmp     si, di
                jb      short loc_193A7
                cmp     ax, es:[si]
                jz      short loc_193BD
                mov     ax, si
                sub     ax, di
                add     ax, 1
                mov     ds:word_17F38, ax
                mov     si, di
                sub     si, bx
                mov     ds:word_17F3A, si
                call    sub_1AC25
                mov     bx, si
                cmp     ds:byte_10097, 1
                jnz     short loc_193FC
                call    RdTrkLngthTbl
                mov     cx, dx
                shr     cx, 1
                mov     ax, 0

loc_193F0:                              ; CODE XREF: seg001:93F7j
                inc     si
                inc     si
                cmp     es:[si], ax
                jz      short loc_19440
                loop    loc_193F0
                jmp     loc_19493
; ---------------------------------------------------------------------------

loc_193FC:                              ; CODE XREF: seg001:93E4j
                call    RdTrkLngthTbl
                add     dx, si
                mov     ds:EndOfCurrTrk, dx
                add     si, 30h ; '0'
                mov     cl, 7
                call    sub_184FC
                jb      short loc_19426
                cmp     dx, 0AA1h
                jz      short loc_1941A
                call    sub_184FC
                jb      short loc_19426

loc_1941A:                              ; CODE XREF: seg001:9413j
                push    si
                add     si, 8
                call    sub_184FC
                mov     ax, si
                mov     cx, si
                pop     si

loc_19426:                              ; CODE XREF: seg001:940Dj seg001:9418j
                jb      short loc_19493
                sub     cx, si
                cmp     cx, 80h ; 'Ç'
                jb      short loc_19432
                mov     si, ax

loc_19432:                              ; CODE XREF: seg001:942Ej
                sub     si, 1Ah
                mov     ax, 64h ; 'd'
                add     ax, ds:word_17F38
                shr     ax, 1
                sub     si, ax

loc_19440:                              ; CODE XREF: seg001:93F5j
                sub     si, bx
                jns     short loc_19447
                mov     si, 0

loc_19447:                              ; CODE XREF: seg001:9442j
                mov     ax, ds:word_17F3A
                sub     ax, si
                jns     short loc_19452
                add     ax, ds:word_17F3C

loc_19452:                              ; CODE XREF: seg001:944Cj
                sub     ax, 8
                jns     short loc_1945A
                mov     ax, 2

loc_1945A:                              ; CODE XREF: seg001:9455j
                cmp     ds:byte_10056, 20h ; ' '
                jz      short loc_1947D
                push    ax
                mov     al, ds:byte_10056
                mov     ah, 0
                shr     ax, 1
                shr     ax, 1
                shr     ax, 1
                and     ax, 1Fh
                mov     cx, 24h ; '$'
                sub     cx, ax
                pop     ax
                mul     cx
                mov     cx, 20h ; ' '
                div     cx

loc_1947D:                              ; CODE XREF: seg001:945Fj
                mov     ds:word_10072, ax
                call    GetTrkDatOfs
                or      ds:TrackSkewTbl[bx], ax
                cmp     ds:word_17F38, 32h ; '2'
                ja      short loc_19493
                or      byte ptr ds:TrackTypeTable[bx], 40h

loc_19493:                              ; CODE XREF: seg001:93ACj seg001:93F9j
                                        ; seg001:9426j seg001:948Cj
                pop     di
                pop     si
                pop     es
                pop     dx
                pop     cx
                pop     bx
                retn
; ---------------------------------------------------------------------------
byte_1949A      db 33h                  ; DATA XREF: sub_12E04+3Ar
                                        ; sub_12E04+96r sub_12F2E+6Ar
                                        ; sub_12F2E+E5r
byte_1949B      db 37h                  ; DATA XREF: sub_12E04+48r
                                        ; sub_12E04+A4r sub_12F2E+82r
                                        ; sub_12F2E+F5r sub_17AA6+1r
                                        ; ClearScreen+Cr
byte_1949C      db 3Dh                  ; DATA XREF: sub_17AAF+1r
byte_1949D      db 30h                  ; DATA XREF: DisplayChar+45r
unk_1949E       db    0 ;               ; DATA XREF: DisplayChar+49r
                db    3 ;
                db  0Eh ;
                db  0Ch ;
                db  0Ah ;
                db  0Ch ;
                db  0Ah ;
                db    7 ;
                db    8 ;
                db    9 ;
                db  0Ah ;
                db  0Bh ;
                db  0Ch ;
                db  17h ;
                db  0Fh ;
                db  0Fh ;
byte_194AE      db 0                    ; DATA XREF: DisplayChar+54r
                db    7 ;
                db  0Fh ;
                db    7 ;
                db    7 ;
                db    7 ;
                db    7 ;
                db    7 ;
                db    7 ;
                db    7 ;
                db    7 ;
                db    7 ;
                db    7 ;
                db  70h ; p
                db  0Fh ;
                db  0Fh ;
                db 0CDh ; -
                db  20h ;

; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


DisplayString   proc near               ; CODE XREF: _Main+49p _Main+A8p
                                        ; _Main+B9p _Main+C7p _Main+D7p
                                        ; _Main+E3p _Main+F7p _Main+FDp
                                        ; _Main+11Fp _Main+168p _Main+1B3p
                                        ; _Main+22Dp DuplicatorCommand+12p
                                        ; DuplicatorCommand+20p sub_12E04+1Bp
                                        ; sub_12E04+77p sub_12F2E+9p
                                        ; sub_12F2E+4Bp sub_12F2E+B3p
                                        ; sub_12F2E+11Dp sub_12F2E+17Ap
                                        ; sub_12F2E+1BFp sub_12F2E+204p
                                        ; sub_12F2E+24Ep sub_132D3+Bp
                                        ; ClrMessageWndw+Cp sub_1331E+6p
                                        ; sub_1331E+12p sub_1331E+1Ep
                                        ; sub_1331E+2Ap sub_1331E+36p
                                        ; sub_1331E+42p sub_1331E+5Ap
                                        ; sub_1331E+6Ap sub_1331E+7Ap
                                        ; sub_1331E+8Ap sub_1331E+9Dp
                                        ; sub_1331E+A9p ReadWrite+115p
                                        ; ReadWrite+26Ep DisplayTracks+10p
                                        ; DisplayDMA_Port+9p
                                        ; DispGoodBadDsks+9p
                                        ; DispGoodBadDsks+1Bp
                                        ; UpdateTrkProgDisp+51p
                                        ; UpdateTrkProgDisp+5Bp seg001:39A9p
                                        ; DispReadLngth+9p DispWritLngth+9p
                                        ; sub_13A5E+Cp
                push    ax
                push    dx
                cbw
                shl     ax, 1
                xchg    ax, bx
                mov     dx, word ptr ds:StringOffsets.field_0[bx]
                xchg    ax, bx
                call    DecodeString
                pop     dx
                pop     ax
                retn
DisplayString   endp

; ---------------------------------------------------------------------------
byte_194D1      db 2Eh                  ; DATA XREF: ReadWrite+354r
                                        ; ReadWrite+35Ar
                db  2Eh ; .
byte_194D3      db 56h                  ; DATA XREF: ReadWrite+34Er
                db  4Bh ; K
StringOffsets   dw offset aInsufficientmem; field_0 ; DATA XREF: DisplayString+6r
                dw offset aVerifyWrite? ; field_1
                dw offset aTcmRequiresAMini; field_2
                dw offset aStartingTrack; field_3
                dw offset aEndingTrack  ; field_4
                dw offset aTrackIncrement; field_5
                dw offset aKeepTrackLength; field_6
                dw offset acopyWeakBits?; field_7
                dw offset acopyAcrossIndex; field_8
                dw offset aline         ; field_9
                dw offset aInsertDiskette; field_A
                dw offset aSourceDrive  ; field_B
                dw offset aTargetDrive  ; field_C
                dw offset aNumberOfSides; field_D
                dw offset aTitle_Copyright; field_E
                dw offset aPressQToQuit ; field_F
                dw offset aTrackNumbers ; field_10
                dw offset aLength       ; field_11
                dw offset a15Spaces     ; field_12
                dw offset aTargetIsWP   ; field_13
                dw offset aMessagesBox  ; field_14
                dw offset aInsertSourceDisk; field_15
                dw offset aInsertTargetDisk; field_16
                dw offset aSpacesClrMsgWndw; field_17
                dw offset aCheckSourceDisk; field_18
                dw offset aDiskFullError; field_19
                dw offset aCheckTargetDisk; field_1A
                dw offset aPleaseUseTCM ; field_1B
                dw offset aEnterSourceDrive; field_1C
                dw offset aEnterTargetDrive; field_1D
                dw offset aEnterFirstTrack; field_1E
                dw offset aEnterLastTrack; field_1F
                dw offset aEnterTrkSpacing; field_20
                dw offset aEnterNumSides; field_21
                dw offset aInsertDisksBegin; field_22
                dw offset aImportantNotice; field_23
                dw offset aPlaceSourceDisk; field_24
                dw offset aPlaceTargetDisk; field_25
                dw offset aPressSpace   ; field_26
                dw offset aDupProcComplete; field_27
                dw offset aMakeAnotherCopy?; field_28
                dw offset aTargetDrvIsWP; field_29
                dw offset aDupProcStopped; field_2A
                dw offset aUnableToFindDOB; field_2B
                dw offset aInvalidCommand; field_2C
                dw offset aPressEnter   ; field_2D
                dw offset aChkSrcDsk    ; field_2E
                dw offset aDOBDoesNotReq; field_2F
                dw offset aChkTargetDsk ; field_30
                dw offset aDupHopperOpn ; field_31
                dw offset aDiskJam      ; field_32
                dw offset aInputBinEmpty; field_33
                dw offset aLoaderOffline; field_34
                dw offset aUnknownResponse; field_35
                dw offset aDMAChanlPort ; field_36
                dw offset aDiskGood     ; field_37
                dw offset aDiskBad      ; field_38
                dw offset aGoodDisks    ; field_39
                dw offset aBadDisks     ; field_3A
                dw offset aDiskWPPresskey; field_3B
                dw offset aTrackNumbers2; field_3C
                dw offset aDiskType     ; field_3D
                dw offset aNullMsg0     ; field_3E
                dw offset aNullMsg1     ; field_3F
                dw offset aNullMsg2     ; field_40
                dw offset AnullMsg3     ; field_41
                dw offset aApple        ; field_42
                dw offset aFm           ; field_43
                dw offset aNullMsg4     ; field_44
                dw offset aMfm          ; field_45
                dw offset aAmiga        ; field_46
                dw offset aMarginalCtlr ; field_47
                dw offset aMarginalTimer; field_48
                dw offset aEnterTracks  ; field_49
                dw offset aIncompatibleImg; field_4A
aInsufficientmem db 0Dh,0Ah,0Ah          ; field_0 ; DATA XREF: seg001:94D5o
                db 7                    ; field_3
                db '  Insufficient memory.',0Dh,0Ah,0; field_4
aVerifyWrite?   db 0Dh,0Ah              ; field_0 ; DATA XREF: seg001:94D5o
                db 7Ch                  ; field_2
                db 34h                  ; field_3
                db 'Verify write?     ' ; field_4
                db 7Ch                  ; field_16
                db 37h                  ; field_17
                db ' ',0                ; field_18
aTcmRequiresAMini db 0Dh,0Ah              ; field_0 ; DATA XREF: seg001:94D5o
                db 7                    ; field_2
                db 'TCM requires a minimum of 1.25 megabytes',0Dh,0Ah; field_3
                db 'of free RAM. Please run TC instead.',0Dh,0Ah,0; field_3
aStartingTrack  db 0Dh,0Ah,0Ah          ; field_0 ; DATA XREF: seg001:94D5o
                db 7Ch                  ; field_3
                db 34h                  ; field_4
                db 'Starting track:   ' ; field_5
                db 7Ch                  ; field_17
                db 37h                  ; field_18
                db 0                    ; field_19
aEndingTrack    db 0Dh,0Ah              ; field_0 ; DATA XREF: seg001:94D5o
                db 7Ch                  ; field_2
                db 34h                  ; field_3
                db 'Ending   track:   ' ; field_4
                db 7Ch                  ; field_16
                db 37h                  ; field_17
                db 0                    ; field_18
aTrackIncrement db 0Dh,0Ah,0Ah          ; field_0 ; DATA XREF: seg001:94D5o
                db 7Ch                  ; field_3
                db 34h                  ; field_4
                db 'Track increment:  ' ; field_5
                db 7Ch                  ; field_17
                db 37h                  ; field_18
                db 0                    ; field_19
aKeepTrackLength db 0Dh,0Ah              ; field_0 ; DATA XREF: seg001:94D5o
                db 7Ch                  ; field_2
                db 34h                  ; field_3
                db 'Keep track length? '; field_4
                db 7Ch                  ; field_17
                db 37h                  ; field_18
                db 0                    ; field_19
acopyWeakBits?  db 0Dh,0Ah              ; field_0 ; DATA XREF: seg001:94D5o
                db 7Ch                  ; field_2
                db 34h                  ; field_3
                db 'Copy weak bits?    '; field_4
                db 7Ch                  ; field_17
                db 37h                  ; field_18
                db 0                    ; field_19
acopyAcrossIndex db 0Dh,0Ah              ; field_0 ; DATA XREF: seg001:94D5o
                db 7Ch                  ; field_2
                db 34h                  ; field_3
                db 'Copy across index? '; field_4
                db 7Ch                  ; field_17
                db 37h                  ; field_18
                db 0                    ; field_19
aline           db 7Ch                  ; field_0 ; DATA XREF: seg001:94D5o
                db 36h                  ; field_1
                db '------------------------------------------------------------'; field_2
                db '--------------------',0; field_2
aInsertDiskette db '                              '; field_0 ; DATA XREF: seg001:94D5o
                db 7Ch                  ; field_1E
                db 36h                  ; field_1F
                db '- INSERT DISKETTES -',0Dh,0Ah; field_20
                db 0Ah                  ; field_20
                db '                       '; field_20
                db 7Ch                  ; field_4E
                db 3Eh                  ; field_4F
                db 'SPACE'              ; field_50
                db 7Ch                  ; field_55
                db 36h                  ; field_56
                db ' to Begin          '; field_57
                db 7Ch                  ; field_6A
                db 3Eh                  ; field_6B
                db 'Q'                  ; field_6C
                db 7Ch                  ; field_6D
                db 36h                  ; field_6E
                db ' to Quit',0Dh,0Ah   ; field_6F
                db '                       '; field_6F
                db 7Ch                  ; field_90
                db 3Eh                  ; field_91
                db 'ESC'                ; field_92
                db 7Ch                  ; field_95
                db 36h                  ; field_96
                db '   to Restart        '; field_97
                db 7Ch                  ; field_AC
                db 3Eh                  ; field_AD
                db 'ENTER'              ; field_AE
                db 7Ch                  ; field_B3
                db 36h                  ; field_B4
                db ' to Accept'         ; field_B5
                db 7Ch                  ; field_BF
                db 37h                  ; field_C0
                db 0                    ; field_C1
aSourceDrive    db 0Dh,0Dh,0Ah          ; field_0 ; DATA XREF: seg001:94D5o
                db 7Ch                  ; field_3
                db 34h                  ; field_4
                db 'Source drive:      '; field_5
                db 7Ch                  ; field_18
                db 37h                  ; field_19
                db 0                    ; field_1A
aTargetDrive    db 0Dh,0Ah              ; field_0 ; DATA XREF: seg001:94D5o
                db 7Ch                  ; field_2
                db 34h                  ; field_3
                db 'Target drive:      '; field_4
                db 7Ch                  ; field_17
                db 37h                  ; field_18
                db 0                    ; field_19
aNumberOfSides  db 0Dh,0Ah,0Ah          ; field_0 ; DATA XREF: seg001:94D5o
                db 7Ch                  ; field_3
                db 34h                  ; field_4
                db 'Number of sides:   '; field_5
                db 7Ch                  ; field_18
                db 37h                  ; field_19
                db 0                    ; field_1A
aTitle_Copyright db '                '   ; field_0 ; DATA XREF: seg001:94D5o
                db 7Ch                  ; field_10
                db 31h                  ; field_11
                db '+------------------------------------------------+',0Dh,0Ah; field_12
                db '                '   ; field_12
                db 7Ch                  ; field_56
                db 31h                  ; field_57
                db '¦                 ' ; field_58
                db 7Ch                  ; field_6A
                db 32h                  ; field_6B
                db 'TRANSCOPY V5.4'     ; field_6C
                db 7Ch                  ; field_7A
                db 31h                  ; field_7B
                db '                 ¦',0Dh,0Ah; field_7C
                db '                '   ; field_7C
                db 7Ch                  ; field_A0
                db 31h                  ; field_A1
                db '¦  '                ; field_A2
                db 7Ch                  ; field_A5
                db 32h                  ; field_A6
                db '(C) 1985-1989 by CENTRAL POINT SOFTWARE, INC.'; field_A7
                db 7Ch                  ; field_D4
                db 31h                  ; field_D5
                db ' ¦',0Dh,0Ah         ; field_D6
                db '                '   ; field_D6
                db 7Ch                  ; field_EA
                db 31h                  ; field_EB
                db '+------------------------------------------------+'; field_EC
                db 7Ch                  ; field_11E
                db 37h                  ; field_11F
                db 0Dh,0Ah              ; field_120
                db 0Ah,0                ; field_120
aPressQToQuit   db 1Dh                  ; field_0 ; DATA XREF: seg001:94D5o
                db 32h                  ; field_1
                db 7Ch                  ; field_2
                db 33h                  ; field_3
                db 'Press '             ; field_4
                db 7Ch                  ; field_A
                db 3Fh                  ; field_B
                db 'Q'                  ; field_C
                db 7Ch                  ; field_D
                db 33h                  ; field_E
                db ' to quit or',0Dh,0Ah; field_F
                db 1Dh                  ; field_1C
                db 32h                  ; field_1D
                db 7Ch                  ; field_1E
                db 33h                  ; field_1F
                db 'Press '             ; field_20
                db 7Ch                  ; field_26
                db 3Fh                  ; field_27
                db 'ENTER'              ; field_28
                db 7Ch                  ; field_2D
                db 33h                  ; field_2E
                db ' to continue...'    ; field_2F
                db 7Ch                  ; field_3E
                db 37h                  ; field_3F
                db 0                    ; field_40
aTrackNumbers   db 7Ch                  ; field_0 ; DATA XREF: seg001:94D5o
                db 35h                  ; field_1
                db '  HEX   000000000000000011111111111111112222222222',0Dh,0Ah; field_2
                db 'TRACK   0123456789ABCDEF0123456789ABCDEF0123456789',0Dh,0Ah; field_2
                db '--------------------------------------------------',0Dh,0Ah; field_2
                db 'SIDE 0:',0Dh,0Ah    ; field_2
                db 'SIDE 1:'            ; field_2
                db 7Ch                  ; field_AE
                db 37h                  ; field_AF
                db 0                    ; field_B0
aLength         db 7Ch                  ; field_0 ; DATA XREF: seg001:94D5o
                db 35h                  ; field_1
                db 'LENGTH: '           ; field_2
                db 7Ch                  ; field_A
                db 37h                  ; field_B
                db 0                    ; field_C
a15Spaces       db '               ',0  ; field_0 ; DATA XREF: seg001:94D5o
aTargetIsWP     db 7                    ; field_0 ; DATA XREF: seg001:94D5o
                db 1Dh                  ; field_1
                db 37h                  ; field_2
                db 7Ch                  ; field_3
                db 33h                  ; field_4
                db 'Target diskette is',0Dh,0Ah; field_5
                db 1Dh                  ; field_19
                db 38h                  ; field_1A
                db 7Ch                  ; field_1B
                db 3Fh                  ; field_1C
                db 'WRITE PROTECTED'    ; field_1D
                db 7Ch                  ; field_2C
                db 33h                  ; field_2D
                db '.',0Dh,0Ah          ; field_2E
                db 1Dh                  ; field_31
                db 32h                  ; field_32
                db 'Press '             ; field_33
                db 7Ch                  ; field_39
                db 3Fh                  ; field_3A
                db 'Q'                  ; field_3B
                db 7Ch                  ; field_3C
                db 33h                  ; field_3D
                db ' to quit or',0Dh,0Ah; field_3E
                db 1Dh                  ; field_4B
                db 32h                  ; field_4C
                db 'Press '             ; field_4D
                db 7Ch                  ; field_53
                db 3Fh                  ; field_54
                db 'ENTER'              ; field_55
                db 7Ch                  ; field_5A
                db 33h                  ; field_5B
                db ' to continue...'    ; field_5C
                db 7Ch                  ; field_6B
                db 37h                  ; field_6C
                db 0                    ; field_6D
aMessagesBox    db 1Dh                  ; field_0 ; DATA XREF: seg001:94D5o
                db 30h                  ; field_1
                db 7Ch                  ; field_2
                db 31h                  ; field_3
                db '+-----------------------------+',0Dh,0Ah; field_4
                db 1Dh                  ; field_25
                db 30h                  ; field_26
                db '¦'                  ; field_27
                db 1Dh                  ; field_28
                db 3Ch                  ; field_29
                db 7Ch                  ; field_2A
                db 33h                  ; field_2B
                db 'MESSAGES'           ; field_2C
                db 7Ch                  ; field_34
                db 31h                  ; field_35
                db 1Dh                  ; field_36
                db 4Eh                  ; field_37
                db '¦',0Dh,0Ah          ; field_38
                db 1Dh                  ; field_3B
                db 30h                  ; field_3C
                db '¦-----------------------------¦',0Dh,0Ah; field_3D
                db 1Dh                  ; field_5E
                db 30h                  ; field_5F
                db '¦'                  ; field_60
                db 1Dh                  ; field_61
                db 4Eh                  ; field_62
                db '¦',0Dh,0Ah          ; field_63
                db 1Dh                  ; field_66
                db 30h                  ; field_67
                db '¦'                  ; field_68
                db 1Dh                  ; field_69
                db 4Eh                  ; field_6A
                db '¦',0Dh,0Ah          ; field_6B
                db 1Dh                  ; field_6E
                db 30h                  ; field_6F
                db '¦'                  ; field_70
                db 1Dh                  ; field_71
                db 4Eh                  ; field_72
                db '¦',0Dh,0Ah          ; field_73
                db 1Dh                  ; field_76
                db 30h                  ; field_77
                db '¦'                  ; field_78
                db 1Dh                  ; field_79
                db 4Eh                  ; field_7A
                db '¦',0Dh,0Ah          ; field_7B
                db 1Dh                  ; field_7E
                db 30h                  ; field_7F
                db '¦'                  ; field_80
                db 1Dh                  ; field_81
                db 4Eh                  ; field_82
                db '¦',0Dh,0Ah          ; field_83
                db 1Dh                  ; field_86
                db 30h                  ; field_87
                db '+-----------------------------+'; field_88
                db 7Ch                  ; field_A7
                db 37h                  ; field_A8
                db 0                    ; field_A9
aInsertSourceDisk db 1Dh                  ; field_0 ; DATA XREF: seg001:94D5o
                db 33h                  ; field_1
                db 7Ch                  ; field_2
                db 33h                  ; field_3
                db 'Insert '            ; field_4
                db 7Ch                  ; field_B
                db 3Fh                  ; field_C
                db 'SOURCE'             ; field_D
                db 7Ch                  ; field_13
                db 33h                  ; field_14
                db ' diskette ',0Dh,0Ah ; field_15
                db 1Dh                  ; field_21
                db 36h                  ; field_22
                db 'and press '         ; field_23
                db 7Ch                  ; field_2D
                db 3Fh                  ; field_2E
                db 'ENTER'              ; field_2F
                db 7Ch                  ; field_34
                db 33h                  ; field_35
                db '...'                ; field_36
                db 7Ch                  ; field_39
                db 37h                  ; field_3A
                db 0                    ; field_3B
aInsertTargetDisk db 1Dh                  ; field_0 ; DATA XREF: seg001:94D5o
                db 33h                  ; field_1
                db 7Ch                  ; field_2
                db 33h                  ; field_3
                db 'Insert '            ; field_4
                db 7Ch                  ; field_B
                db 3Fh                  ; field_C
                db 'TARGET'             ; field_D
                db 7Ch                  ; field_13
                db 33h                  ; field_14
                db ' diskette',0Dh,0Ah  ; field_15
                db 1Dh                  ; field_20
                db 36h                  ; field_21
                db 'and press '         ; field_22
                db 7Ch                  ; field_2C
                db 3Fh                  ; field_2D
                db 'ENTER'              ; field_2E
                db 7Ch                  ; field_33
                db 33h                  ; field_34
                db '...'                ; field_35
                db 7Ch                  ; field_38
                db 37h                  ; field_39
                db 0                    ; field_3A
aSpacesClrMsgWndw db 1Dh                  ; field_0 ; DATA XREF: seg001:94D5o
                db 31h                  ; field_1
                db '                             ',0Dh,0Ah; field_2
                db 1Dh                  ; field_21
                db 31h                  ; field_22
                db '                             ',0Dh,0Ah; field_23
                db 1Dh                  ; field_42
                db 31h                  ; field_43
                db '                             ',0Dh,0Ah; field_44
                db 1Dh                  ; field_63
                db 31h                  ; field_64
                db '                             ',0Dh,0Ah; field_65
                db 1Dh                  ; field_84
                db 31h                  ; field_85
                db '                             ',0; field_86
aCheckSourceDisk db 7                    ; field_0 ; DATA XREF: seg001:94D5o
                db 1Dh                  ; field_1
                db 37h                  ; field_2
                db 7Ch                  ; field_3
                db 33h                  ; field_4
                db 'Check diskette in',0Dh,0Ah; field_5
                db 1Dh                  ; field_18
                db 38h                  ; field_19
                db 7Ch                  ; field_1A
                db 3Fh                  ; field_1B
                db 'SOURCE'             ; field_1C
                db 7Ch                  ; field_22
                db 33h                  ; field_23
                db ' drive.',0Dh,0Ah    ; field_24
                db 1Dh                  ; field_2D
                db 32h                  ; field_2E
                db 'Press '             ; field_2F
                db 7Ch                  ; field_35
                db 3Fh                  ; field_36
                db 'Q'                  ; field_37
                db 7Ch                  ; field_38
                db 33h                  ; field_39
                db ' to quit or',0Dh,0Ah; field_3A
                db 1Dh                  ; field_47
                db 32h                  ; field_48
                db 'Press '             ; field_49
                db 7Ch                  ; field_4F
                db 3Fh                  ; field_50
                db 'ENTER'              ; field_51
                db 7Ch                  ; field_56
                db 33h                  ; field_57
                db ' to continue...'    ; field_58
                db 7Ch                  ; field_67
                db 37h                  ; field_68
                db 0                    ; field_69
aDiskFullError  db 7                    ; field_0 ; DATA XREF: seg001:94D5o
                db 1Dh                  ; field_1
                db 37h                  ; field_2
                db 7Ch                  ; field_3
                db 33h                  ; field_4
                db 'Disk full error on',0Dh,0Ah; field_5
                db 1Dh                  ; field_19
                db 38h                  ; field_1A
                db 7Ch                  ; field_1B
                db 3Fh                  ; field_1C
                db 'TARGET'             ; field_1D
                db 7Ch                  ; field_23
                db 33h                  ; field_24
                db ' drive.',0Dh,0Ah    ; field_25
                db 1Dh                  ; field_2E
                db 32h                  ; field_2F
                db 'Press '             ; field_30
                db 7Ch                  ; field_36
                db 3Fh                  ; field_37
                db 'Q'                  ; field_38
                db 7Ch                  ; field_39
                db 33h                  ; field_3A
                db ' to quit or',0Dh,0Ah; field_3B
                db 1Dh                  ; field_48
                db 32h                  ; field_49
                db 'Press '             ; field_4A
                db 7Ch                  ; field_50
                db 3Fh                  ; field_51
                db 'ENTER'              ; field_52
                db 7Ch                  ; field_57
                db 33h                  ; field_58
                db ' to continue...'    ; field_59
                db 7Ch                  ; field_68
                db 37h                  ; field_69
                db 0                    ; field_6A
aCheckTargetDisk db 7                    ; field_0 ; DATA XREF: seg001:94D5o
                db 1Dh                  ; field_1
                db 37h                  ; field_2
                db 7Ch                  ; field_3
                db 33h                  ; field_4
                db 'Check diskette in',0Dh,0Ah; field_5
                db 1Dh                  ; field_18
                db 38h                  ; field_19
                db 7Ch                  ; field_1A
                db 3Fh                  ; field_1B
                db 'TARGET'             ; field_1C
                db 7Ch                  ; field_22
                db 33h                  ; field_23
                db ' drive.',0Dh,0Ah    ; field_24
                db 1Dh                  ; field_2D
                db 32h                  ; field_2E
                db 'Press '             ; field_2F
                db 7Ch                  ; field_35
                db 3Fh                  ; field_36
                db 'Q'                  ; field_37
                db 7Ch                  ; field_38
                db 33h                  ; field_39
                db ' to quit or',0Dh,0Ah; field_3A
                db 1Dh                  ; field_47
                db 32h                  ; field_48
                db 'Press '             ; field_49
                db 7Ch                  ; field_4F
                db 3Fh                  ; field_50
                db 'ENTER'              ; field_51
                db 7Ch                  ; field_56
                db 33h                  ; field_57
                db ' to continue...'    ; field_58
                db 7Ch                  ; field_67
                db 37h                  ; field_68
                db 0                    ; field_69
aPleaseUseTCM   db 7                    ; field_0 ; DATA XREF: seg001:94D5o
                db 1Dh                  ; field_1
                db 32h                  ; field_2
                db 7Ch                  ; field_3
                db 33h                  ; field_4
                db 'Please use TCM to copy',0Dh,0Ah; field_5
                db 1Dh                  ; field_1D
                db 32h                  ; field_1E
                db 'this disk.',0Dh,0Ah ; field_1F
                db 1Dh                  ; field_2B
                db 32h                  ; field_2C
                db 'Press '             ; field_2D
                db 7Ch                  ; field_33
                db 3Fh                  ; field_34
                db 'Q'                  ; field_35
                db 7Ch                  ; field_36
                db 33h                  ; field_37
                db ' to quit or',0Dh,0Ah; field_38
                db 1Dh                  ; field_45
                db 32h                  ; field_46
                db 'Press '             ; field_47
                db 7Ch                  ; field_4D
                db 3Fh                  ; field_4E
                db 'ENTER'              ; field_4F
                db 7Ch                  ; field_54
                db 33h                  ; field_55
                db ' to continue...'    ; field_56
                db 7Ch                  ; field_65
                db 37h                  ; field_66
                db 0                    ; field_67
aEnterSourceDrive db 1Dh                  ; field_0 ; DATA XREF: seg001:94D5o
                db 32h                  ; field_1
                db 7Ch                  ; field_2
                db 33h                  ; field_3
                db 'Enter letter (A -  ) of',0Dh,0Ah; field_4
                db 1Dh                  ; field_1D
                db 32h                  ; field_1E
                db 'drive that will contain',0Dh,0Ah; field_1F
                db 1Dh                  ; field_38
                db 32h                  ; field_39
                db 'the source diskette.'; field_3A
                db 7Ch                  ; field_4E
                db 37h                  ; field_4F
                db 0                    ; field_50
aEnterTargetDrive db 1Dh                  ; field_0 ; DATA XREF: seg001:94D5o
                db 32h                  ; field_1
                db 7Ch                  ; field_2
                db 33h                  ; field_3
                db 'Enter letter (A -  ) of',0Dh,0Ah; field_4
                db 1Dh                  ; field_1D
                db 32h                  ; field_1E
                db 'drive that will contain',0Dh,0Ah; field_1F
                db 1Dh                  ; field_38
                db 32h                  ; field_39
                db 'the target diskette.',0Dh,0Ah; field_3A
                db 1Dh                  ; field_50
                db 32h                  ; field_51
                db 'This may be the same as the',0Dh,0Ah; field_52
                db 1Dh                  ; field_6F
                db 32h                  ; field_70
                db 'source drive.'      ; field_71
                db 7Ch                  ; field_7E
                db 37h                  ; field_7F
                db 0                    ; field_80
aEnterFirstTrack db 1Dh                  ; field_0 ; DATA XREF: seg001:94D5o
                db 32h                  ; field_1
                db 7Ch                  ; field_2
                db 33h                  ; field_3
                db 'Enter first track to copy.',0Dh,0Ah; field_4
                db 1Dh                  ; field_20
                db 32h                  ; field_21
                db '(00 - 29 for 5.25" drives)',0Dh,0Ah; field_22
                db 1Dh                  ; field_3E
                db 32h                  ; field_3F
                db '(00 - 4F for 3.5" drives)'; field_40
                db 7Ch                  ; field_59
                db 37h                  ; field_5A
                db 0                    ; field_5B
aEnterLastTrack db 1Dh                  ; field_0 ; DATA XREF: seg001:94D5o
                db 32h                  ; field_1
                db 7Ch                  ; field_2
                db 33h                  ; field_3
                db 'Enter last track to copy.',0Dh,0Ah; field_4
                db 1Dh                  ; field_1F
                db 32h                  ; field_20
                db '(   - 29 for 5.25" drives)',0Dh,0Ah; field_21
                db 1Dh                  ; field_3D
                db 32h                  ; field_3E
                db '(   - 4F for 3.5" drives)'; field_3F
                db 7Ch                  ; field_58
                db 37h                  ; field_59
                db 0                    ; field_5A
aEnterTrkSpacing db 1Dh                  ; field_0 ; DATA XREF: seg001:94D5o
                db 32h                  ; field_1
                db 7Ch                  ; field_2
                db 33h                  ; field_3
                db 'Enter spacing between',0Dh,0Ah; field_4
                db 1Dh                  ; field_1B
                db 32h                  ; field_1C
                db 'tracks (01 -   ).'  ; field_1D
                db 7Ch                  ; field_2E
                db 37h                  ; field_2F
                db 0                    ; field_30
aEnterNumSides  db 1Dh                  ; field_0 ; DATA XREF: seg001:94D5o
                db 32h                  ; field_1
                db 7Ch                  ; field_2
                db 33h                  ; field_3
                db 'Enter number of sides',0Dh,0Ah; field_4
                db 1Dh                  ; field_1B
                db 32h                  ; field_1C
                db 'to copy (1 or 2).'  ; field_1D
                db 7Ch                  ; field_2E
                db 37h                  ; field_2F
                db 0                    ; field_30
aInsertDisksBegin db '                              '; field_0 ; DATA XREF: seg001:94D5o
                db 7Ch                  ; field_1E
                db 36h                  ; field_1F
                db '- INSERT DISKETTES -',0Dh,0Ah; field_20
                db 0Ah                  ; field_20
                db '                       '; field_20
                db 7Ch                  ; field_4E
                db 3Eh                  ; field_4F
                db 'SPACE'              ; field_50
                db 7Ch                  ; field_55
                db 36h                  ; field_56
                db ' to Begin          '; field_57
                db 7Ch                  ; field_6A
                db 3Eh                  ; field_6B
                db 'Q'                  ; field_6C
                db 7Ch                  ; field_6D
                db 36h                  ; field_6E
                db ' to Quit',0Dh,0Ah   ; field_6F
                db '                       '; field_6F
                db 7Ch                  ; field_90
                db 3Eh                  ; field_91
                db 'ESC'                ; field_92
                db 7Ch                  ; field_95
                db 36h                  ; field_96
                db '   to Restart'      ; field_97
                db 7Ch                  ; field_A4
                db 37h                  ; field_A5
                db 0                    ; field_A6
aImportantNotice db 0Dh,0Ah,0Ah          ; field_0 ; DATA XREF: seg001:94D5o
                db 7Ch                  ; field_3
                db 33h                  ; field_4
                db 'IMPORTANT NOTICE: This product is provided for the purpose o'; field_5
                db 'f',0Dh,0Ah          ; field_5
                db 'enabling you to make archival copies only. Under the Copyrig'; field_5
                db 'ht Law',0Dh,0Ah     ; field_5
                db 'you, as the owner of a copy of a computer program, are entit'; field_5
                db 'led',0Dh,0Ah        ; field_5
                db 'to make a new copy for archival purposes only and this produ'; field_5
                db 'ct',0Dh,0Ah         ; field_5
                db 'will enable you to do so. This product is supplied for no ot'; field_5
                db 'her',0Dh,0Ah        ; field_5
                db 'purpose and you are not permitted to utilize it for any use,'; field_5
                db ' other',0Dh,0Ah     ; field_5
                db 'than that specified. By using this product, you agree to be '; field_5
                db 'bound',0Dh,0Ah      ; field_5
                db 'by the terms of this notice.'; field_5
                db 7Ch                  ; field_1ED
                db 37h                  ; field_1EE
                db 0Dh,0Ah,0            ; field_1EF
aPlaceSourceDisk db 0Dh,0Ah              ; field_0 ; DATA XREF: seg001:94D5o
                db 7Ch                  ; field_2
                db 33h                  ; field_3
                db 'Place SOURCE diskette in drive '; field_4
                db 7Ch                  ; field_23
                db 37h                  ; field_24
                db 0                    ; field_25
aPlaceTargetDisk db 0Dh,0Ah,0Ah          ; field_0 ; DATA XREF: seg001:94D5o
                db 7Ch                  ; field_3
                db 33h                  ; field_4
                db 'Place TARGET diskette in drive '; field_5
                db 7Ch                  ; field_24
                db 37h                  ; field_25
                db 0                    ; field_26
aPressSpace     db 0Dh,0Ah              ; field_0 ; DATA XREF: seg001:94D5o
                db 7Ch                  ; field_2
                db 33h                  ; field_3
                db 'Press SPACE to proceed, Q to quit.'; field_4
                db 7Ch                  ; field_26
                db 37h                  ; field_27
                db 0                    ; field_28
aDupProcComplete db 0Dh,0Ah              ; field_0 ; DATA XREF: seg001:94D5o
                db 7Ch                  ; field_2
                db 33h                  ; field_3
                db 'Duplication process complete.'; field_4
                db 7Ch                  ; field_21
                db 37h                  ; field_22
                db 0Dh,0Ah              ; field_23
aMakeAnotherCopy? db 0Dh,0Ah              ; field_0 ; DATA XREF: seg001:94D5o
                db 7Ch                  ; field_2
                db 33h                  ; field_3
                db 'Do you want to make another copy? (Y/N) '; field_4
                db 7Ch                  ; field_2C
                db 37h                  ; field_2D
                db 0                    ; field_2E
aTargetDrvIsWP  db 0Dh,0Ah              ; field_0 ; DATA XREF: seg001:94D5o
                db 7                    ; field_2
                db 7Ch                  ; field_3
                db 33h                  ; field_4
                db 'Target drive is WRITE PROTECTED.'; field_5
                db 7Ch                  ; field_25
                db 37h                  ; field_26
                db 0Dh,0Ah,0            ; field_27
aDupProcStopped db 0Dh,0Ah              ; field_0 ; DATA XREF: seg001:94D5o
                db 7Ch                  ; field_2
                db 33h                  ; field_3
                db 'Duplication process stopped.'; field_4
                db 7Ch                  ; field_20
                db 37h                  ; field_21
                db 0Dh,0Ah,0            ; field_22
aUnableToFindDOB db 0Dh,0Ah,0Ah          ; field_0 ; DATA XREF: seg001:94D5o
                db 7                    ; field_3
                db '  Unable to find Deluxe Option Board.',0Dh,0Ah; field_4
                db '  Please refer to Troubleshooting Section in manual.',0Ah,0; field_4
aInvalidCommand db 0Dh,0Ah,0Ah          ; field_0 ; DATA XREF: seg001:94D5o
                db 7                    ; field_3
                db '  Invalid command line.',0Dh,0Ah; field_4
                db 0Ah,0                ; field_4
aPressEnter     db 0Dh,0Ah              ; field_0 ; DATA XREF: seg001:94D5o
                db 7Ch                  ; field_2
                db 33h                  ; field_3
                db 'Press ENTER to continue.'; field_4
                db 7Ch                  ; field_1C
                db 37h                  ; field_1D
                db 0                    ; field_1E
aChkSrcDsk      db 0Dh,0Ah              ; field_0 ; DATA XREF: seg001:94D5o
                db 7                    ; field_2
                db 7Ch                  ; field_3
                db 33h                  ; field_4
                db 'Check diskette in Source drive.'; field_5
                db 7Ch                  ; field_24
                db 37h                  ; field_25
                db 0Dh,0Ah,0            ; field_26
aDOBDoesNotReq  db 0Dh,0Ah,0Ah          ; field_0 ; DATA XREF: seg001:94D5o
                db 7                    ; field_3
                db 'Deluxe Option Board does not require ',27h,'/C',27h,' parame'; field_4
                db 'ter.',0Dh,0Ah       ; field_4
                db 'Please set ',27h,'DMA 1 / DMA 2',27h,' jumper on board to de'; field_4
                db 'sired DMA channel.',0Dh,0Ah; field_4
                db 0Ah                  ; field_4
                db 'Press any key to continue...',0; field_4
aChkTargetDsk   db 0Dh,0Ah              ; field_0 ; DATA XREF: seg001:94D5o
                db 7                    ; field_2
                db 7Ch                  ; field_3
                db 33h                  ; field_4
                db 'Check diskette in Target drive.'; field_5
                db 7Ch                  ; field_24
                db 37h                  ; field_25
                db 0Dh,0Ah,0            ; field_26
aDupHopperOpn   db 7                    ; field_0 ; DATA XREF: seg001:94D5o
                db 1Dh                  ; field_1
                db 32h                  ; field_2
                db 7Ch                  ; field_3
                db 33h                  ; field_4
                db 'Duplicator hopper drawer',0Dh,0Ah; field_5
                db 1Dh                  ; field_1F
                db 32h                  ; field_20
                db 'is open!',0Dh,0Ah   ; field_21
                db 1Dh                  ; field_2B
                db 32h                  ; field_2C
                db 'Close and press a key',0Dh,0Ah; field_2D
                db 1Dh                  ; field_44
                db 32h                  ; field_45
                db 'to continue.'       ; field_46
                db 7Ch                  ; field_52
                db 37h                  ; field_53
                db 0                    ; field_54
aDiskJam        db 7                    ; field_0 ; DATA XREF: seg001:94D5o
                db 1Dh                  ; field_1
                db 32h                  ; field_2
                db 7Ch                  ; field_3
                db 33h                  ; field_4
                db 'A disk has jammed in',0Dh,0Ah; field_5
                db 1Dh                  ; field_1B
                db 32h                  ; field_1C
                db 'the dupilicator.',0Dh,0Ah; field_1D
                db 1Dh                  ; field_2F
                db 32h                  ; field_30
                db 'Correct and press a key',0Dh,0Ah; field_31
                db 1Dh                  ; field_4A
                db 32h                  ; field_4B
                db 'to continue.'       ; field_4C
                db 7Ch                  ; field_58
                db 37h                  ; field_59
                db 0                    ; field_5A
aInputBinEmpty  db 7                    ; field_0 ; DATA XREF: seg001:94D5o
                db 1Dh                  ; field_1
                db 32h                  ; field_2
                db 7Ch                  ; field_3
                db 33h                  ; field_4
                db 'The duplicator input bin',0Dh,0Ah; field_5
                db 1Dh                  ; field_1F
                db 32h                  ; field_20
                db 'is empty!',0Dh,0Ah  ; field_21
                db 1Dh                  ; field_2C
                db 32h                  ; field_2D
                db 'Fill with diskettes and',0Dh,0Ah; field_2E
                db 1Dh                  ; field_47
                db 32h                  ; field_48
                db 'press a key to continue.'; field_49
                db 7Ch                  ; field_61
                db 37h                  ; field_62
                db 0                    ; field_63
aLoaderOffline  db 7                    ; field_0 ; DATA XREF: seg001:94D5o
                db 1Dh                  ; field_1
                db 32h                  ; field_2
                db 7Ch                  ; field_3
                db 33h                  ; field_4
                db 'Loader is off-line.',0Dh,0Ah; field_5
                db 1Dh                  ; field_1A
                db 32h                  ; field_1B
                db 'Press any key to continue.'; field_1C
                db 7Ch                  ; field_36
                db 37h                  ; field_37
                db 0                    ; field_38
aUnknownResponse db 7                    ; field_0 ; DATA XREF: seg001:94D5o
                db 1Dh                  ; field_1
                db 32h                  ; field_2
                db 7Ch                  ; field_3
                db 33h                  ; field_4
                db 'An unknown response has',0Dh,0Ah; field_5
                db 1Dh                  ; field_1E
                db 32h                  ; field_1F
                db 'been received.',0Dh,0Ah; field_20
                db 1Dh                  ; field_30
                db 32h                  ; field_31
                db 'Press any key to continue.'; field_32
                db 7Ch                  ; field_4C
                db 37h                  ; field_4D
                db 0                    ; field_4E
aDMAChanlPort   db 7Ch                  ; field_0 ; DATA XREF: seg001:94D5o
                db 35h                  ; field_1
                db 'DMA Channel:      Port:     '; field_2
                db 7Ch                  ; field_1E
                db 37h                  ; field_1F
                db 0                    ; field_20
aDiskGood       db 1Dh                  ; field_0 ; DATA XREF: seg001:94D5o
                db 32h                  ; field_1
                db 7Ch                  ; field_2
                db 33h                  ; field_3
                db 'Disk was GOOD.',0Dh,0Ah; field_4
                db 1Dh                  ; field_14
                db 32h                  ; field_15
                db 'Insert next disk and',0Dh,0Ah; field_16
                db 1Dh                  ; field_2C
                db 32h                  ; field_2D
                db 'press a key.'       ; field_2E
                db 7Ch                  ; field_3A
                db 37h                  ; field_3B
                db 0                    ; field_3C
aDiskBad        db 7                    ; field_0 ; DATA XREF: seg001:94D5o
                db 1Dh                  ; field_1
                db 32h                  ; field_2
                db 7Ch                  ; field_3
                db 33h                  ; field_4
                db 'Disk was BAD!',0Dh,0Ah; field_5
                db 1Dh                  ; field_14
                db 32h                  ; field_15
                db 'Insert next disk and',0Dh,0Ah; field_16
                db 1Dh                  ; field_2C
                db 32h                  ; field_2D
                db 'press a key.'       ; field_2E
                db 7Ch                  ; field_3A
                db 37h                  ; field_3B
                db 0                    ; field_3C
aGoodDisks      db 7Ch                  ; field_0 ; DATA XREF: seg001:94D5o
                db 35h                  ; field_1
                db 'Good disks: ',0     ; field_2
aBadDisks       db 7Ch                  ; field_0 ; DATA XREF: seg001:94D5o
                db 35h                  ; field_1
                db 'Bad  disks: ',0     ; field_2
aDiskWPPresskey db 7                    ; field_0 ; DATA XREF: seg001:94D5o
                db 1Dh                  ; field_1
                db 32h                  ; field_2
                db 7Ch                  ; field_3
                db 33h                  ; field_4
                db 'Disk is write-protected!',0Dh,0Ah; field_5
                db 1Dh                  ; field_1F
                db 32h                  ; field_20
                db 'Press a key to continue.'; field_21
                db 7Ch                  ; field_39
                db 37h                  ; field_3A
                db 0                    ; field_3B
aTrackNumbers2  db 7Ch                  ; field_0 ; DATA XREF: seg001:94D5o
                db 35h                  ; field_1
                db '000000000000000011111111111111112222222222222222333333333333'; field_2
                db '333344444444444444440123456789ABCDEF0123456789ABCDEF01234567'; field_2
                db '89ABCDEF0123456789ABCDEF0123456789ABCDEF--------------------'; field_2
                db '------------------------------------------------------------'; field_2
                db 0Dh,0Ah              ; field_2
                db 7Ch                  ; field_F4
                db 37h                  ; field_F5
                db 0                    ; field_F6
aDiskType       db 7Ch                  ; field_0 ; DATA XREF: seg001:94D5o
                db 35h                  ; field_1
                db 'Disk type:'         ; field_2
                db 7Ch                  ; field_C
                db 37h                  ; field_D
                db ' ',0                ; field_E
aNullMsg0       db 0                    ; field_0 ; DATA XREF: seg001:94D5o
aNullMsg1       db 0                    ; field_0 ; DATA XREF: seg001:94D5o
aNullMsg2       db 0                    ; field_0 ; DATA XREF: seg001:94D5o
AnullMsg3       db 0                    ; field_0 ; DATA XREF: seg001:94D5o
aApple          db 'Apple   ',0         ; field_0 ; DATA XREF: seg001:94D5o
aFm             db 'FM      ',0         ; field_0 ; DATA XREF: seg001:94D5o
aNullMsg4       db 0                    ; field_0 ; DATA XREF: seg001:94D5o
aMfm            db 'MFM     ',0         ; field_0 ; DATA XREF: seg001:94D5o
aAmiga          db 'Amiga   ',0         ; field_0 ; DATA XREF: seg001:94D5o
aMarginalCtlr   db 1Dh                  ; field_0 ; DATA XREF: seg001:94D5o
                db 32h                  ; field_1
                db 7Ch                  ; field_2
                db 33h                  ; field_3
                db 'Target disk may not boot',0Dh,0Ah; field_4
                db 1Dh                  ; field_1E
                db 32h                  ; field_1F
                db 'reliably on this machine due',0Dh,0Ah; field_20
                db 1Dh                  ; field_3E
                db 32h                  ; field_3F
                db 'to marginal disk controller.',0Dh,0Ah; field_40
                db 1Dh                  ; field_5E
                db 32h                  ; field_5F
                db 7Ch                  ; field_60
                db 33h                  ; field_61
                db 'Press '             ; field_62
                db 7Ch                  ; field_68
                db 3Fh                  ; field_69
                db 'Q'                  ; field_6A
                db 7Ch                  ; field_6B
                db 33h                  ; field_6C
                db ' to quit or',0Dh,0Ah; field_6D
                db 1Dh                  ; field_7A
                db 32h                  ; field_7B
                db 7Ch                  ; field_7C
                db 33h                  ; field_7D
                db 'Press '             ; field_7E
                db 7Ch                  ; field_84
                db 3Fh                  ; field_85
                db 'ENTER'              ; field_86
                db 7Ch                  ; field_8B
                db 33h                  ; field_8C
                db ' to continue...'    ; field_8D
                db 7Ch                  ; field_9C
                db 37h                  ; field_9D
                db 0                    ; field_9E
aMarginalTimer  db 1Dh                  ; field_0 ; DATA XREF: seg001:94D5o
                db 32h                  ; field_1
                db 7Ch                  ; field_2
                db 33h                  ; field_3
                db 'Target disk may not boot',0Dh,0Ah; field_4
                db 1Dh                  ; field_1E
                db 32h                  ; field_1F
                db 'reliably due to marginal',0Dh,0Ah; field_20
                db 1Dh                  ; field_3A
                db 32h                  ; field_3B
                db 'timer logic on motherboard.',0Dh,0Ah; field_3C
                db 1Dh                  ; field_59
                db 32h                  ; field_5A
                db 7Ch                  ; field_5B
                db 33h                  ; field_5C
                db 'Press '             ; field_5D
                db 7Ch                  ; field_63
                db 3Fh                  ; field_64
                db 'Q'                  ; field_65
                db 7Ch                  ; field_66
                db 33h                  ; field_67
                db ' to quit or',0Dh,0Ah; field_68
                db 1Dh                  ; field_75
                db 32h                  ; field_76
                db 7Ch                  ; field_77
                db 33h                  ; field_78
                db 'Press '             ; field_79
                db 7Ch                  ; field_7F
                db 3Fh                  ; field_80
                db 'ENTER'              ; field_81
                db 7Ch                  ; field_86
                db 33h                  ; field_87
                db ' to continue...'    ; field_88
                db 7Ch                  ; field_97
                db 37h                  ; field_98
                db 0                    ; field_99
aEnterTracks    db 1Dh                  ; field_0 ; DATA XREF: seg001:94D5o
                db 32h                  ; field_1
                db 7Ch                  ; field_2
                db 33h                  ; field_3
                db 'Enter '             ; field_4
                db 7Ch                  ; field_A
                db 3Fh                  ; field_B
                db 'Y'                  ; field_C
                db 7Ch                  ; field_D
                db 33h                  ; field_E
                db ' for all tracks,',0Dh,0Ah; field_F
                db 1Dh                  ; field_21
                db 32h                  ; field_22
                db 7Ch                  ; field_23
                db 3Fh                  ; field_24
                db 'N'                  ; field_25
                db 7Ch                  ; field_26
                db 33h                  ; field_27
                db ' for no tracks, a single',0Dh,0Ah; field_28
                db 1Dh                  ; field_42
                db 32h                  ; field_43
                db 'track number or a range of',0Dh,0Ah; field_44
                db 1Dh                  ; field_60
                db 32h                  ; field_61
                db 'tracks.'            ; field_62
                db 7Ch                  ; field_69
                db 37h                  ; field_6A
                db 0                    ; field_6B
aIncompatibleImg db 1Dh                  ; field_0 ; DATA XREF: seg001:94D5o
                db 32h                  ; field_1
                db 7                    ; field_2
                db 7Ch                  ; field_3
                db 33h                  ; field_4
                db 'Incompatible image file.',0Dh,0Ah; field_5
                db 0Dh,0Ah              ; field_5
                db 1Dh                  ; field_21
                db 32h                  ; field_22
                db 7Ch                  ; field_23
                db 33h                  ; field_24
                db 'Press '             ; field_25
                db 7Ch                  ; field_2B
                db 3Fh                  ; field_2C
                db 'Q'                  ; field_2D
                db 7Ch                  ; field_2E
                db 33h                  ; field_2F
                db ' to quit or',0Dh,0Ah; field_30
                db 1Dh                  ; field_3D
                db 32h                  ; field_3E
                db 7Ch                  ; field_3F
                db 33h                  ; field_40
                db 'Press '             ; field_41
                db 7Ch                  ; field_47
                db 3Fh                  ; field_48
                db 'ENTER'              ; field_49
                db 7Ch                  ; field_4E
                db 33h                  ; field_4F
                db ' to continue...'    ; field_50
                db 7Ch                  ; field_5F
                db 37h                  ; field_60
                db 0                    ; field_61
                db    0 ;
byte_1AAF5      db 0                    ; DATA XREF: sub_1AC37+3w sub_1AC37+8r
                                        ; sub_1AC37+1Er sub_1AC63+Aw
                                        ; sub_1AC63+1Ar sub_1AC85+3Br
                                        ; sub_1AC85+4Ar sub_1AC85+5Dw
                                        ; sub_1AC85+61r sub_1ACFA+Cr
                                        ; sub_1ACFA+12w sub_1ACFA+1Cr
                                        ; sub_1AD2Fr
byte_1AAF6      db 0                    ; DATA XREF: sub_1AC37+25w sub_1AC85r
                                        ; sub_1AC85+7w
word_1AAF7      dw 0                    ; DATA XREF: sub_14861+26w
                                        ; sub_1AC85+30r
word_1AAF9      dw 0                    ; DATA XREF: sub_1AB5D+5w
                                        ; sub_1AB5D+17r sub_1AB5D+29w
                                        ; sub_1AB90+5w sub_1AB90+17r

; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1AAFB       proc near               ; CODE XREF: sub_12E04+E3p
                mov     ah, 0
                cmp     al, 0
                jnz     short loc_1AB07
                cmp     dh, dl
                jz      short loc_1AB07
                mov     ah, 1

loc_1AB07:                              ; CODE XREF: sub_1AAFB+4j sub_1AAFB+8j
                call    sub_1AFAC
                cmp     al, 0
                jnz     short locret_1AB41
                mov     cs:word_10093, cx
                mov     bx, ds
                push    cs
                pop     ds
                assume ds:seg001
                mov     TrackBufSeg, bx
                mov     word_10059, bx
                mov     cl, 4
                shr     bx, cl
                mov     byte_1005B, bh
                mov     TrackBufOfs, 0
                mov     word_1005C, 7000h
                mov     word_1005E, 9000h
                shl     dh, 1
                add     dh, dl
                mov     byte_100B7, dh

locret_1AB41:                           ; CODE XREF: sub_1AAFB+11j
                retn
sub_1AAFB       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1AB42       proc near               ; CODE XREF: ReadWrite+20p
                cmp     byte_100B7, 1
                jz      short locret_1AB5C
                mov     DiskType, 0FFh
                mov     ax, 0
                cld
                push    cs
                pop     es
                assume es:seg001
                mov     di, offset TrackOffsTbl
                mov     cx, 100h
                rep stosw

locret_1AB5C:                           ; CODE XREF: sub_1AB42+5j
                retn
sub_1AB42       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1AB5D       proc near               ; CODE XREF: ReadWrite+24Dp
                mov     al, 0
                call    sub_1B071
                mov     word_1AAF9, es
                mov     al, 0
                call    sub_1AC08
                mov     si, 0BAh ; '¦'
                mov     di, 100h
                push    ds
                push    cs
                pop     ds
                mov     es, cs:word_1AAF9
                assume es:nothing
                mov     cx, 2805h
                shr     cx, 1
                rep movsw
                pop     ds
                assume ds:nothing
                mov     al, 0
                call    sub_1B071
                mov     ds:word_1AAF9, es
                mov     al, 0
                call    sub_1ABFF
                retn
sub_1AB5D       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1AB90       proc near               ; CODE XREF: sub_12E04+102p
                mov     al, 0
                call    sub_1B071
                mov     ds:word_1AAF9, es
                mov     al, 0
                call    sub_1AC08
                mov     di, 0BAh ; '¦'
                mov     si, 100h
                push    ds
                push    cs
                pop     es
                assume es:seg001
                mov     ds, cs:word_1AAF9
                mov     cx, 2805h
                shr     cx, 1
                cmp     byte ptr [si+4], 'N'
                jnb     short loc_1ABFC
                rep movsw
                pop     ds
                mov     bx, ds:TrackTypeTable
                mov     ds:KeepTrkLngth0, 'n'
                mov     ds:CopyXIDX0, 'n'
                mov     ds:CopyWkBits0, 'n'
                mov     ds:VerifyWrite0, 'n'
                test    bl, 1
                jz      short loc_1ABDC
                mov     ds:KeepTrkLngth0, 'y'

loc_1ABDC:                              ; CODE XREF: sub_1AB90+45j
                test    bl, 2
                jz      short loc_1ABE6
                mov     ds:CopyXIDX0, 'y'

loc_1ABE6:                              ; CODE XREF: sub_1AB90+4Fj
                test    bl, 4
                jz      short loc_1ABF0
                mov     ds:CopyWkBits0, 'y'

loc_1ABF0:                              ; CODE XREF: sub_1AB90+59j
                test    bl, 8
                jz      short loc_1ABFA
                mov     ds:VerifyWrite0, 'y'

loc_1ABFA:                              ; CODE XREF: sub_1AB90+63j
                clc
                retn
; ---------------------------------------------------------------------------

loc_1ABFC:                              ; CODE XREF: sub_1AB90+25j
                pop     ds
                stc
                retn
sub_1AB90       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1ABFF       proc near               ; CODE XREF: sub_1AB5D+2Fp
                                        ; sub_1AC85+4Dp sub_1AD2F+3p
                push    ds
                call    MaxtMotorTimer
                pop     ds
                call    sub_1B0DC
                retn
sub_1ABFF       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1AC08       proc near               ; CODE XREF: sub_1AB5D+Bp sub_1AB90+Bp
                                        ; sub_1AC63+1Dp sub_1ACFA+1Fp
                push    ds
                call    MaxtMotorTimer
                pop     ds
                call    sub_1B094
                push    ds
                call    MaxtMotorTimer
                pop     ds
                retn
sub_1AC08       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; Calculates track number from cylinder and head,
; then multiplies by 2 for addressing word per track
; tables. Offset returned in BX.

GetTrkDatOfs    proc near               ; CODE XREF: SetOptionFlags+DAp
                                        ; sub_13882+1p WrtTrkLnTbl+2p
                                        ; RdTrkLngthTbl+1p AnalyzeTrack+1Bp
                                        ; sub_149C2+26p sub_14AEF+78p
                                        ; sub_14FE4+6p sub_14FF4+15p
                                        ; sub_15013+15p WriteTrack+3p
                                        ; sub_159E0+Cp sub_159E0+76p
                                        ; sub_15D77+65p sub_15D77+99p
                                        ; sub_16937+2Fp sub_174FB+B6p
                                        ; sub_18A07p sub_18A07+72p
                                        ; sub_18A07+5ECp seg001:9339p
                                        ; seg001:9480p sub_1AC25+1p
                                        ; sub_1AC37+18p sub_1AC63+3p
                                        ; sub_1AC85+38p sub_1ACFAp
                mov     bh, 0
                mov     bl, ds:CurrentCylinder
                shl     bx, 1
                add     bl, ds:CurrentSide
                shl     bx, 1
                retn
GetTrkDatOfs    endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1AC25       proc near               ; CODE XREF: sub_14861p sub_15D77+23p
                                        ; sub_16937+3Cp sub_16937+90p
                                        ; sub_18715+18Dp sub_18715+1E1p
                                        ; seg001:93DAp
                push    ax
                call    GetTrkDatOfs
                mov     ax, ds:TrackOffsTbl[bx]
                mov     al, 0
                mov     si, ax
                mov     es, word ptr ds:CurrTrackBufSeg
                assume es:nothing
                pop     ax
                retn
sub_1AC25       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1AC37       proc near               ; CODE XREF: ReadWrite+13Fp
                call    sub_1AD37
                mov     ds:byte_1AAF5, 0
                mov     al, ds:byte_1AAF5
                call    sub_1B071
                mov     word ptr ds:CurrTrackBufSeg, es
                mov     ds:word_10091, 0
                call    GetTrkDatOfs
                mov     ax, 4000h
                mov     al, ds:byte_1AAF5
                mov     ds:TrackOffsTbl[bx], ax
                mov     ds:byte_1AAF6, 0
                clc
                retn
sub_1AC37       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1AC63       proc near               ; CODE XREF: ReadWrite+2A0p
                call    sub_1AD37
                call    GetTrkDatOfs
                mov     ax, ds:TrackOffsTbl[bx]
                mov     ds:byte_1AAF5, al
                call    sub_1B071
                mov     word ptr ds:CurrTrackBufSeg, es
                mov     ds:word_10091, 0
                mov     al, ds:byte_1AAF5
                call    sub_1AC08
                clc
                retn
sub_1AC63       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1AC85       proc near               ; CODE XREF: ReadWrite+1C3p
                cmp     ds:byte_1AAF6, 0
                jnz     short loc_1AC94
                mov     ds:byte_1AAF6, 1
                jmp     short loc_1ACC8
; ---------------------------------------------------------------------------
                align 2

loc_1AC94:                              ; CODE XREF: sub_1AC85+5j
                mov     ax, 0
                cmp     ds:word_10093, 1
                ja      short loc_1ACAF
                cmp     ds:NumberOfSides, 1
                jz      short loc_1ACAF
                cmp     ds:CurrentSide, 1
                jz      short loc_1ACAF
                call    SetDmaCount

loc_1ACAF:                              ; CODE XREF: sub_1AC85+17j
                                        ; sub_1AC85+1Ej sub_1AC85+25j
                mov     dx, ds:word_13D05
                add     ax, dx
                mov     dx, ds:word_1AAF7
                add     ax, dx
                jb      short loc_1ACCF

loc_1ACBD:                              ; CODE XREF: sub_1AC85+6Dj
                call    GetTrkDatOfs
                mov     dl, ds:byte_1AAF5
                mov     ds:TrackOffsTbl[bx], dx

loc_1ACC8:                              ; CODE XREF: sub_1AC85+Cj
                call    sub_14861
                mov     al, 0
                clc
                retn
; ---------------------------------------------------------------------------

loc_1ACCF:                              ; CODE XREF: sub_1AC85+36j
                mov     al, ds:byte_1AAF5
                call    sub_1ABFF
                mov     ds:word_10093, cx
                cmp     al, 0
                jnz     short loc_1ACF8
                cmp     cx, 0
                jz      short loc_1ACF4
                inc     ds:byte_1AAF5
                mov     al, ds:byte_1AAF5
                call    sub_1B071
                mov     word ptr ds:CurrTrackBufSeg, es
                mov     dh, 0
                jmp     short loc_1ACBD
; ---------------------------------------------------------------------------

loc_1ACF4:                              ; CODE XREF: sub_1AC85+5Bj
                                        ; sub_1AC85+73j
                mov     al, 1
                stc
                retn
; ---------------------------------------------------------------------------

loc_1ACF8:                              ; CODE XREF: sub_1AC85+56j
                jmp     short loc_1ACF4
sub_1AC85       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1ACFA       proc near               ; CODE XREF: ReadWrite+311p
                call    GetTrkDatOfs
                mov     ax, ds:TrackOffsTbl[bx]
                cmp     ax, 0
                jz      short loc_1AD28
                cmp     al, ds:byte_1AAF5
                jz      short loc_1AD24
                mov     ds:byte_1AAF5, al
                call    sub_1B071
                mov     word ptr ds:CurrTrackBufSeg, es
                mov     al, ds:byte_1AAF5
                call    sub_1AC08
                cmp     al, 2
                jz      short locret_1AD27
                cmp     al, 0
                jnz     short loc_1AD2D

loc_1AD24:                              ; CODE XREF: sub_1ACFA+10j
                mov     al, 0
                clc

locret_1AD27:                           ; CODE XREF: sub_1ACFA+24j
                                        ; sub_1ACFA+31j
                retn
; ---------------------------------------------------------------------------

loc_1AD28:                              ; CODE XREF: sub_1ACFA+Aj
                                        ; sub_1ACFA+33j
                mov     al, 1
                stc
                jmp     short locret_1AD27
; ---------------------------------------------------------------------------

loc_1AD2D:                              ; CODE XREF: sub_1ACFA+28j
                jmp     short loc_1AD28
sub_1ACFA       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1AD2F       proc near               ; CODE XREF: ReadWrite+243p
                mov     al, ds:byte_1AAF5
                call    sub_1ABFF
                clc
                retn
sub_1AD2F       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1AD37       proc near               ; CODE XREF: sub_1AC37p sub_1AC63p
                push    ax
                push    ds
                cmp     ds:byte_100B7, 0
                jz      short loc_1AD48
                mov     ax, seg seg002
                mov     ds, ax
                assume ds:seg002
                call    sub_1BBAF

loc_1AD48:                              ; CODE XREF: sub_1AD37+7j
                pop     ds
                assume ds:nothing
                pop     ax
                retn
sub_1AD37       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


DuplicatorVector proc near              ; CODE XREF: DuplicatorCommand+3p
                                        ; DuplicatorCommand+41p
                                        ; DuplicatorCommand+4Ap
                                        ; DuplicatorCommand+58p
                mov     ax, 0           ; Disk duplicator patches in a far call here??
                clc
                retn
DuplicatorVector endp

; ---------------------------------------------------------------------------
byte_1AD50      db 2 dup(0FFh)          ; DATA XREF: sub_1B5EE+13r
                                        ; sub_1B5EE+B2w sub_1B6BD+1w
                                        ; sub_1B72B+3w
word_1AD52      dw 0                    ; DATA XREF: sub_1B46B+1Bw
                                        ; sub_1B5EE+16r sub_1B5EE+AFr
word_1AD54      dw 0                    ; DATA XREF: sub_1AFAC+68r
                                        ; sub_1B12A+2Br sub_1B12A+34r
                                        ; sub_1B12A+3Aw sub_1B46B+13w
                                        ; sub_1B48D+13w sub_1B4A6+14w
                                        ; sub_1B4F2+4r sub_1B518+Ar
                                        ; sub_1B54A+15r
word_1AD56      dw 0                    ; DATA XREF: sub_1B12A+6r sub_1B12A+Fr
                                        ; sub_1B12A+51w sub_1B302+13w
                                        ; sub_1B302+2Ar
word_1AD58      dw 0                    ; DATA XREF: sub_1B302+6Aw
                                        ; sub_1B5EE+2Fr sub_1B5EE+41r
                                        ; sub_1B5EE+63r sub_1B72B+13r
                                        ; sub_1B72B+42r
word_1AD5A      dw 0                    ; DATA XREF: sub_1B302+31w
                                        ; sub_1B302+3Ar
word_1AD5C      dw 0                    ; DATA XREF: sub_1B302+9w
                                        ; sub_1B302+27r
word_1AD5E      dw 0                    ; DATA XREF: sub_1AFAC+A4r
                                        ; sub_1B094+31r sub_1B0DC+31r
                                        ; sub_1B1A8+8r sub_1B302+21w
                                        ; sub_1B302+3Dr sub_1B4C1+9r
                                        ; sub_1B531+Er sub_1B5CB+11r
                                        ; sub_1B7B2+8r sub_1B7B2+10r
                                        ; sub_1B7F2+23w
word_1AD60      dw 0                    ; DATA XREF: sub_1AFAC+A8r
                                        ; sub_1B302+37w
word_1AD62      dw 0                    ; DATA XREF: sub_1B302+24w
                                        ; sub_1B581+3r
byte_1AD64      db 2 dup(0)             ; DATA XREF: sub_1B7B2+14w
                                        ; sub_1B7B2+18w sub_1B7B2+3Bw
                                        ; sub_1B7F2+13r sub_1B7F2+1Bw
                                        ; sub_1B7F2+1Fr
word_1AD66      dw 0                    ; DATA XREF: sub_1B7B2+Cw sub_1B7F2+Fr
                                        ; sub_1B7F2+17w
word_1AD68      dw 0                    ; DATA XREF: sub_1B1A8+2Er
                                        ; sub_1B1FC+9r GetEMS+Aw GetEMS+2Dr
                                        ; sub_1B4C1+Er sub_1B531+9r
                                        ; sub_1B5EE+69r sub_1B5EE+7Br
                                        ; sub_1B72B+48r sub_1B7B2+38r
                                        ; sub_1B7F2+2Er
word_1AD6A      dw 0                    ; DATA XREF: sub_1B12A+15r
                                        ; sub_1B12A+25w GetEMS+20w GetEMS+53w
                                        ; sub_1B5EE+70r sub_1B5EE+98r
                                        ; sub_1B72B+4Fr sub_1B72B+5Er
                                        ; sub_1B7B2+23r
word_1AD6C      dw 0                    ; DATA XREF: sub_1B12A+1Er GetEMS+24w
                                        ; sub_1B597+Dr
byte_1AD6E      db 3 dup(0)             ; DATA XREF: sub_1B1A8+27r GetEMS+28w
                                        ; GetEMS+4Aw sub_1B4C1+2r
                                        ; sub_1B531+2r sub_1B72B+2Cr
                                        ; sub_1B7B2+2Cr sub_1B7F2+27w
                                        ; sub_1B7F2+39w
byte_1AD71      db 0                    ; DATA XREF: sub_1AFAC+4Dr
byte_1AD72      db 0                    ; DATA XREF: sub_1B4C1+16r
                                        ; sub_1B72B+25r sub_1B7B2+1r
                                        ; sub_1B7F2+8r
byte_1AD73      db 0                    ; DATA XREF: sub_1B12A+57w
                                        ; sub_1B302+49r sub_1B5EE+3Ar
                                        ; sub_1B72B+1Cr sub_1B7B2+1Ew
                                        ; sub_1B7B2+33w
byte_1AD74      db 0                    ; DATA XREF: sub_1AFAC+Cw
                                        ; sub_1AFAC+14r sub_1B210+1Cr
                                        ; sub_1B46B+6r
byte_1AD75      db 0                    ; DATA XREF: sub_1AFAC+1Fw
                                        ; sub_1AFAC+30r sub_1AFAC+44r
                                        ; sub_1AFAC+9Cr
byte_1AD76      db 0                    ; DATA XREF: sub_1AFAC+10w
                                        ; sub_1AFAC+22r sub_1AFAC+81r
                                        ; sub_1B210+1Fr sub_1B48D+6r
                                        ; sub_1B5EE+1Fr sub_1B5EE+B5r
byte_1AD77      db 0                    ; DATA XREF: sub_1AFAC+2Dw
                                        ; sub_1AFAC+33r sub_1AFAC+47r
                                        ; sub_1AFAC+59r sub_1AFAC+A0r
byte_1AD78      db 0FFh                 ; DATA XREF: sub_1B5EE+1Cr
                                        ; sub_1B5EE+B8w
byte_1AD79      db 0                    ; DATA XREF: sub_1AFAC+54w
                                        ; sub_1AFAC+74w sub_1AFAC+90w
                                        ; sub_1B12A+40r sub_1B18Fr
                                        ; sub_1B4C1+1Dr sub_1B54A+4r
                                        ; sub_1B7F2+1r
word_1AD7A      dw 0                    ; DATA XREF: sub_1AFAC+87w
                                        ; sub_1B40F+12w sub_1B5EE+5Br
                                        ; sub_1B5EE+90r sub_1B5EE+A6r
                                        ; sub_1B6BD+18r sub_1B7B2+26r
byte_1AD7C      db 0                    ; DATA XREF: sub_1B094+12w
                                        ; sub_1B094+16r sub_1B094+23r
                                        ; sub_1B0DC+12w sub_1B0DC+16r
                                        ; sub_1B0DC+23r sub_1B1A8+4w
                                        ; sub_1B1A8+Dr sub_1B1A8+1Dr
                                        ; sub_1B1FCr
byte_1AD7D      db 0                    ; DATA XREF: sub_1AFAC+8w
                                        ; sub_1B72B+33r sub_1B72B+64r
aC_Mm           db 'C:$$$$$$$$.$MM',0   ; DATA XREF: sub_1B12A+49o
                                        ; sub_1B4A6+7o sub_1B4A6+Fw
byte_1AD8D      db 0                    ; DATA XREF: sub_1B210+28w
                                        ; sub_1B210+50w sub_1B4A6+Ar
word_1AD8E      dw 0                    ; DATA XREF: sub_1B210+2Cw
                                        ; sub_1B210+4Ar sub_1B210+54w
                                        ; sub_1B72B+6Br sub_1B72B+7Dr
unk_1AD90       db    0 ;               ; DATA XREF: sub_1B210+46w
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
unk_1ADA2       db    0 ;               ; DATA XREF: sub_1B1E2+7w sub_1B1EF+7r
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
word_1AFA2      dw 0                    ; DATA XREF: sub_1AFAC+98w
                                        ; sub_1B071+7r sub_1B094+6r
                                        ; sub_1B0DC+6r sub_1B0DC+39r
                                        ; sub_1B5EE+25r
word_1AFA4      dw 0                    ; DATA XREF: sub_1B071+Dw sub_1B094+Cw
                                        ; sub_1B0DC+Cw sub_1B0DC+3Dr
                                        ; sub_1B54A+Br
OldInt24Off2    dw 0                    ; DATA XREF: GetInt24_2+Bw
                                        ; RestoreInt24_2+4r
OldInt24Seg2    dw 0                    ; DATA XREF: GetInt24_2+10w
                                        ; RestoreInt24_2+9r
DosMajorVer     db 2                    ; DATA XREF: sub_1B29C+7w seg001:B706r
byte_1AFAB      db 0                    ; DATA XREF: sub_1B302+5Dr

; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1AFAC       proc near               ; CODE XREF: _Main+34p sub_1AAFB+Cp
                push    cs
                pop     ds
                assume ds:seg001
                call    sub_1B29C
                call    GetInt24_2
                mov     byte_1AD7D, ah
                mov     byte_1AD74, dl
                mov     byte_1AD76, dh
                mov     al, byte_1AD74
                call    sub_1B276
                jnb     short loc_1AFCB
                jmp     loc_1B064
; ---------------------------------------------------------------------------

loc_1AFCB:                              ; CODE XREF: sub_1AFAC+1Aj
                mov     byte_1AD75, al
                mov     al, byte_1AD76
                call    sub_1B276
                jnb     short loc_1AFD9
                jmp     loc_1B064
; ---------------------------------------------------------------------------

loc_1AFD9:                              ; CODE XREF: sub_1AFAC+28j
                mov     byte_1AD77, al
                mov     al, byte_1AD75
                and     al, byte_1AD77
                jz      short loc_1AFE8
                jmp     short loc_1B064
; ---------------------------------------------------------------------------
                align 2

loc_1AFE8:                              ; CODE XREF: sub_1AFAC+37j
                call    sub_1B210
                jnb     short loc_1AFF0
                jmp     short loc_1B05E
; ---------------------------------------------------------------------------
                align 2

loc_1AFF0:                              ; CODE XREF: sub_1AFAC+3Fj
                mov     al, byte_1AD75
                cmp     al, byte_1AD77
                jz      short loc_1B03C
                cmp     byte_1AD71, 0
                jnz     short loc_1B064
                mov     byte_1AD79, 1
                cmp     byte_1AD77, 0
                jnz     short loc_1B020
                call    sub_1B46B
                cmp     ax, 0FFFFh
                jz      short loc_1B06A
                mov     ax, word_1AD54
                call    sub_1B40F
                call    sub_1B5EE
                jmp     short loc_1B044
; ---------------------------------------------------------------------------
                align 2

loc_1B020:                              ; CODE XREF: sub_1AFAC+5Ej
                mov     byte_1AD79, 2
                call    sub_1B48D
                cmp     ax, 0FFFFh
                jz      short loc_1B06A
                mov     al, byte_1AD76
                call    sub_1B428
                mov     word_1AD7A, ax
                call    sub_1B6BD
                jmp     short loc_1B044
; ---------------------------------------------------------------------------
                align 2

loc_1B03C:                              ; CODE XREF: sub_1AFAC+4Bj
                mov     byte_1AD79, 0
                call    sub_1B72B

loc_1B044:                              ; CODE XREF: sub_1AFAC+71j
                                        ; sub_1AFAC+8Dj
                mov     word_1AFA2, cx
                mov     dl, byte_1AD75
                mov     dh, byte_1AD77
                mov     es, word_1AD5E
                mov     ds, word_1AD60
                assume ds:nothing
                clc
                mov     al, 0
                jmp     short loc_1B06D
; ---------------------------------------------------------------------------
                align 2

loc_1B05E:                              ; CODE XREF: sub_1AFAC+41j
                stc
                mov     al, 8
                jmp     short loc_1B06D
; ---------------------------------------------------------------------------
                align 2

loc_1B064:                              ; CODE XREF: sub_1AFAC+1Cj
                                        ; sub_1AFAC+2Aj sub_1AFAC+39j
                                        ; sub_1AFAC+52j
                stc
                mov     al, 1
                jmp     short loc_1B06D
; ---------------------------------------------------------------------------
                align 2

loc_1B06A:                              ; CODE XREF: sub_1AFAC+66j
                                        ; sub_1AFAC+7Fj
                stc
                mov     al, 5

loc_1B06D:                              ; CODE XREF: sub_1AFAC+AFj
                                        ; sub_1AFAC+B5j sub_1AFAC+BBj
                call    RestoreInt24_2
                retn
sub_1AFAC       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1B071       proc near               ; CODE XREF: sub_1AB5D+2p
                                        ; sub_1AB5D+26p sub_1AB90+2p
                                        ; sub_1AC37+Bp sub_1AC63+Dp
                                        ; sub_1AC85+64p sub_1ACFA+15p
                push    ds
                push    bx
                push    cx
                push    cs
                pop     ds
                assume ds:seg001
                xor     ah, ah
                cmp     ax, word_1AFA2
                jnb     short loc_1B08D
                mov     word_1AFA4, ax
                call    sub_1B1A8
                call    sub_1B1FC
                mov     al, 0
                clc
                jmp     short loc_1B090
; ---------------------------------------------------------------------------
                db 90h
; ---------------------------------------------------------------------------

loc_1B08D:                              ; CODE XREF: sub_1B071+Bj
                mov     al, 2
                stc

loc_1B090:                              ; CODE XREF: sub_1B071+19j
                pop     cx
                pop     bx
                pop     ds
                assume ds:nothing
                retn
sub_1B071       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1B094       proc near               ; CODE XREF: sub_1AC08+5p
                push    ds
                push    bx
                push    cs
                pop     ds
                assume ds:seg001
                xor     ah, ah
                cmp     ax, word_1AFA2
                jnb     short loc_1B0D6
                mov     word_1AFA4, ax
                call    sub_1B1EF
                mov     byte_1AD7C, ah
                cmp     byte_1AD7C, 2
                jnz     short loc_1B0B7
                call    sub_1B4C1
                jmp     short loc_1B0CD
; ---------------------------------------------------------------------------
                db 90h
; ---------------------------------------------------------------------------

loc_1B0B7:                              ; CODE XREF: sub_1B094+1Bj
                cmp     byte_1AD7C, 0
                jnz     short loc_1B0C4
                call    nullsub_1
                jmp     short loc_1B0CD
; ---------------------------------------------------------------------------
                align 2

loc_1B0C4:                              ; CODE XREF: sub_1B094+28j
                push    es
                mov     es, word_1AD5E
                call    sub_1B4F2
                pop     es

loc_1B0CD:                              ; CODE XREF: sub_1B094+20j
                                        ; sub_1B094+2Dj
                call    sub_1B1FC
                mov     al, 0
                clc
                jmp     short loc_1B0D9
; ---------------------------------------------------------------------------
                align 2

loc_1B0D6:                              ; CODE XREF: sub_1B094+Aj
                mov     al, 2
                stc

loc_1B0D9:                              ; CODE XREF: sub_1B094+3Fj
                pop     bx
                pop     ds
                assume ds:nothing
                retn
sub_1B094       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1B0DC       proc near               ; CODE XREF: sub_1ABFF+5p
                push    ds
                push    bx
                push    cs
                pop     ds
                assume ds:seg001
                xor     ah, ah
                cmp     ax, word_1AFA2
                jnb     short loc_1B124
                mov     word_1AFA4, ax
                call    sub_1B1EF
                mov     byte_1AD7C, ah
                cmp     byte_1AD7C, 2
                jnz     short loc_1B0FF
                call    sub_1B531
                jmp     short loc_1B115
; ---------------------------------------------------------------------------
                db 90h
; ---------------------------------------------------------------------------

loc_1B0FF:                              ; CODE XREF: sub_1B0DC+1Bj
                cmp     byte_1AD7C, 0
                jnz     short loc_1B10C
                call    nullsub_2
                jmp     short loc_1B115
; ---------------------------------------------------------------------------
                align 2

loc_1B10C:                              ; CODE XREF: sub_1B0DC+28j
                push    es
                mov     es, word_1AD5E
                call    sub_1B54A
                pop     es

loc_1B115:                              ; CODE XREF: sub_1B0DC+20j
                                        ; sub_1B0DC+2Dj
                mov     cx, word_1AFA2
                sub     cx, word_1AFA4
                dec     cx
                mov     al, 0
                clc
                jmp     short loc_1B127
; ---------------------------------------------------------------------------
                align 2

loc_1B124:                              ; CODE XREF: sub_1B0DC+Aj
                mov     al, 2
                stc

loc_1B127:                              ; CODE XREF: sub_1B0DC+45j
                pop     bx
                pop     ds
                assume ds:nothing
                retn
sub_1B0DC       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1B12A       proc near               ; CODE XREF: _Main+3Dp _Main+241p
                                        ; sub_12E04+5p sub_12E04+EFp
                                        ; ReadWrite+1D7p ReadWrite+406p
                                        ; ReadWrite+431p
                push    bx
                push    dx
                push    es
                push    ds
                push    cs
                pop     ds
                assume ds:seg001
                cmp     word_1AD56, 0
                jz      short loc_1B17B
                mov     ah, 49h ; 'I'
                mov     es, word_1AD56
                int     21h             ; DOS - 2+ - FREE MEMORY
                                        ; ES = segment address of area to be freed
                cmp     word_1AD6A, 0
                jz      short loc_1B155
                mov     ah, 45h ; 'E'
                mov     dx, word_1AD6C
                call    CallInt67
                mov     word_1AD6A, 0

loc_1B155:                              ; CODE XREF: sub_1B12A+1Aj
                cmp     word_1AD54, 0
                jz      short loc_1B17B
                mov     ah, 3Eh ; '>'
                mov     bx, word_1AD54
                int     21h             ; DOS - 2+ - CLOSE A FILE WITH HANDLE
                                        ; BX = file handle
                mov     word_1AD54, 0
                cmp     byte_1AD79, 0
                jnz     short loc_1B178
                mov     ah, 41h ; 'A'
                mov     dx, offset aC_Mm ; "C:$$$$$$$$.$MM"
                int     21h             ; DOS - 2+ - DELETE A FILE (UNLINK)
                                        ; DS:DX -> ASCIZ pathname of file to delete (no wildcards allowed)

loc_1B178:                              ; CODE XREF: sub_1B12A+45j
                call    sub_1B2C5

loc_1B17B:                              ; CODE XREF: sub_1B12A+Bj
                                        ; sub_1B12A+30j
                mov     word_1AD56, 0
                mov     byte_1AD73, 0
                mov     ax, 0
                clc
                pop     ds
                assume ds:nothing
                pop     es
                pop     dx
                pop     bx
                retn
sub_1B12A       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1B18F       proc near               ; CODE XREF: ReadWrite+1DAp
                                        ; ReadWrite+409p
                cmp     ds:byte_1AD79, 2
                jnz     short loc_1B1A4
                mov     ax, seg seg002
                push    ds
                mov     ds, ax
                assume ds:seg002
                mov     dx, offset unk_1D94A
                mov     ah, 41h
                int     21h             ; DOS - 2+ - DELETE A FILE (UNLINK)
                                        ; DS:DX -> ASCIZ pathname of file to delete (no wildcards allowed)
                pop     ds
                assume ds:nothing

loc_1B1A4:                              ; CODE XREF: sub_1B18F+5j
                mov     ax, 0
                retn
sub_1B18F       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1B1A8       proc near               ; CODE XREF: sub_1B071+10p
                push    ax
                call    sub_1B1EF
                mov     ds:byte_1AD7C, ah
                mov     es, cs:word_1AD5E
                cmp     ds:byte_1AD7C, 0
                jnz     short loc_1B1C2
                call    sub_1B581
                jmp     short loc_1B1E0
; ---------------------------------------------------------------------------
                align 2

loc_1B1C2:                              ; CODE XREF: sub_1B1A8+12j
                call    sub_1B7F2
                cmp     ds:byte_1AD7C, 2
                jnz     short loc_1B1DD
                call    sub_1B597
                cmp     ds:byte_1AD6E, 0
                jz      short loc_1B1E0
                mov     es, ds:word_1AD68
                jmp     short loc_1B1E0
; ---------------------------------------------------------------------------
                db 90h
; ---------------------------------------------------------------------------

loc_1B1DD:                              ; CODE XREF: sub_1B1A8+22j
                call    sub_1B518

loc_1B1E0:                              ; CODE XREF: sub_1B1A8+17j
                                        ; sub_1B1A8+2Cj sub_1B1A8+32j
                pop     ax
                retn
sub_1B1A8       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1B1E2       proc near               ; CODE XREF: sub_1B5EE+4Ap
                                        ; sub_1B5EE+7Fp sub_1B5EE+A2p
                                        ; sub_1B6BD+Ep
                push    bx
                xor     bx, bx
                mov     bl, cl
                shl     bx, 1
                mov     word ptr ds:unk_1ADA2[bx], ax
                pop     bx
                retn
sub_1B1E2       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1B1EF       proc near               ; CODE XREF: sub_1B094+Fp sub_1B0DC+Fp
                                        ; sub_1B1A8+1p
                push    bx
                xor     bx, bx
                mov     bl, al
                shl     bx, 1
                mov     ax, word ptr ds:unk_1ADA2[bx]
                pop     bx
                retn
sub_1B1EF       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1B1FC       proc near               ; CODE XREF: sub_1B071+13p
                                        ; sub_1B094+39p
                mov     ah, ds:byte_1AD7C
                cmp     ah, 2
                jnz     short locret_1B20F
                test    ds:word_1AD68, 0FFFh
                jnz     short locret_1B20F
                mov     ah, 0

locret_1B20F:                           ; CODE XREF: sub_1B1FC+7j sub_1B1FC+Fj
                retn
sub_1B1FC       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1B210       proc near               ; CODE XREF: sub_1AFAC+3Cp
                push    ax
                push    bx
                push    cx
                mov     bx, 0FFFFh
                mov     ah, 48h
                int     21h             ; DOS - 2+ - ALLOCATE MEMORY
                                        ; BX = number of 16-byte paragraphs desired
                cmp     bx, 0FFFFh
                jz      short loc_1B271
                call    sub_1B302
                jb      short loc_1B271
                call    CheckEMS
                jb      short loc_1B22C
                call    GetEMS

loc_1B22C:                              ; CODE XREF: sub_1B210+17j
                mov     al, ds:byte_1AD74
                cmp     al, ds:byte_1AD76
                jnz     short loc_1B26D
                mov     cx, 2
                mov     ds:byte_1AD8D, cl
                mov     ds:word_1AD8E, 0

loc_1B242:                              ; CODE XREF: sub_1B210+5Bj
                mov     al, cl
                call    sub_1B276
                jb      short loc_1B267
                cmp     al, 0
                jz      short loc_1B267
                mov     al, cl
                call    sub_1B428
                mov     bx, cx
                shl     bx, 1
                mov     word ptr ds:unk_1AD90[bx], ax
                cmp     ds:word_1AD8E, ax
                jnb     short loc_1B267
                mov     ds:byte_1AD8D, cl
                mov     ds:word_1AD8E, ax

loc_1B267:                              ; CODE XREF: sub_1B210+37j
                                        ; sub_1B210+3Bj sub_1B210+4Ej
                inc     cx
                cmp     cx, 8
                jl      short loc_1B242

loc_1B26D:                              ; CODE XREF: sub_1B210+23j
                clc
                jmp     short loc_1B272
; ---------------------------------------------------------------------------
                db 90h
; ---------------------------------------------------------------------------

loc_1B271:                              ; CODE XREF: sub_1B210+Dj
                                        ; sub_1B210+12j
                stc

loc_1B272:                              ; CODE XREF: sub_1B210+5Ej
                pop     cx
                pop     bx
                pop     ax
                retn
sub_1B210       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1B276       proc near               ; CODE XREF: sub_1AFAC+17p
                                        ; sub_1AFAC+25p sub_1B210+34p
                push    bx
                push    cx
                push    si
                cmp     al, 1
                jbe     short loc_1B289
                call    sub_1B2AA
                jb      short loc_1B297
                call    sub_1C4D0
                test    al, 80h
                jnz     short loc_1B290

loc_1B289:                              ; CODE XREF: sub_1B276+5j
                mov     ax, 0
                clc
                jmp     short loc_1B298
; ---------------------------------------------------------------------------
                align 2

loc_1B290:                              ; CODE XREF: sub_1B276+11j
                mov     ax, 1
                clc
                jmp     short loc_1B298
; ---------------------------------------------------------------------------
                db 90h
; ---------------------------------------------------------------------------

loc_1B297:                              ; CODE XREF: sub_1B276+Aj
                stc

loc_1B298:                              ; CODE XREF: sub_1B276+17j
                                        ; sub_1B276+1Ej
                pop     si
                pop     cx
                pop     bx
                retn
sub_1B276       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1B29C       proc near               ; CODE XREF: sub_1AFAC+2p
                push    ax
                push    bx
                push    cx
                mov     ah, 30h
                int     21h             ; DOS - GET DOS VERSION
                                        ; Return: AL = major version number (00h for DOS 1.x)
                mov     ds:DosMajorVer, al
                pop     cx
                pop     bx
                pop     ax
                retn
sub_1B29C       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1B2AA       proc near               ; CODE XREF: sub_1B276+7p
                push    ax
                push    bx
                push    cx
                push    dx
                push    ax
                mov     ah, 19h
                int     21h             ; DOS - GET DEFAULT DISK NUMBER
                mov     dl, al
                mov     ah, 0Eh
                int     21h             ; DOS - SELECT DISK
                                        ; DL = new default drive number (0 = A, 1 = B, etc.)
                                        ; Return: AL = number of logical drives
                mov     cl, al
                pop     ax
                dec     cl
                cmp     cl, al
                pop     dx
                pop     cx
                pop     bx
                pop     ax
                retn
sub_1B2AA       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1B2C5       proc near               ; CODE XREF: sub_1B12A+4Ep
                push    ax
                push    bx
                push    cx
                push    dx
                push    ds
                mov     ax, seg seg002
                mov     ds, ax
                assume ds:seg002
                mov     dx, offset unk_1D94A
                mov     al, 0
                mov     ah, 3Dh
                int     21h             ; DOS - 2+ - OPEN DISK FILE WITH HANDLE
                                        ; DS:DX -> ASCIZ filename
                                        ; AL = access mode
                                        ; 0 - read
                jb      short loc_1B2FC
                mov     bx, ax
                mov     ah, 42h ; 'B'
                mov     al, 2
                xor     cx, cx
                xor     dx, dx
                int     21h             ; DOS - 2+ - MOVE FILE READ/WRITE POINTER (LSEEK)
                                        ; AL = method: offset from end of file
                jb      short loc_1B2FC
                or      ax, dx
                push    ax
                mov     ah, 3Eh
                int     21h             ; DOS - 2+ - CLOSE A FILE WITH HANDLE
                                        ; BX = file handle
                pop     ax
                cmp     ax, 0
                jnz     short loc_1B2FC
                mov     dx, offset unk_1D94A
                mov     ah, 41h
                int     21h             ; DOS - 2+ - DELETE A FILE (UNLINK)
                                        ; DS:DX -> ASCIZ pathname of file to delete (no wildcards allowed)

loc_1B2FC:                              ; CODE XREF: sub_1B2C5+13j
                                        ; sub_1B2C5+21j sub_1B2C5+2Ej
                pop     ds
                assume ds:nothing
                pop     dx
                pop     cx
                pop     bx
                pop     ax
                retn
sub_1B2C5       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1B302       proc near               ; CODE XREF: sub_1B210+Fp
                push    ax
                push    bx
                push    cx
                cmp     bx, 1A00h
                jb      short loc_1B373
                mov     ds:word_1AD5C, bx
                mov     ah, 48h
                int     21h             ; DOS - 2+ - ALLOCATE MEMORY
                                        ; BX = number of 16-byte paragraphs desired
                jb      short loc_1B373
                mov     ds:word_1AD56, ax
                test    ax, 0FFFh
                jz      short loc_1B323
                and     ax, 0F000h
                add     ax, 1000h

loc_1B323:                              ; CODE XREF: sub_1B302+19j
                mov     ds:word_1AD5E, ax
                mov     ds:word_1AD62, ax
                mov     ax, ds:word_1AD5C
                add     ax, ds:word_1AD56
                sub     ax, 10h
                mov     ds:word_1AD5A, ax
                and     ax, 0F000h
                mov     ds:word_1AD60, ax
                mov     ax, ds:word_1AD5A
                sub     ax, ds:word_1AD5E
                cmp     ax, 1A00h
                jb      short loc_1B373
                call    sub_1B7B2
                cmp     ds:byte_1AD73, 0
                jz      short loc_1B357
                cmp     ax, 2A00h
                jb      short loc_1B373

loc_1B357:                              ; CODE XREF: sub_1B302+4Ej
                add     ax, 800h
                mov     cl, 0Ch
                shr     ax, cl
                dec     ax
                cmp     ds:byte_1AFAB, 0
                jz      short loc_1B367
                dec     ax

loc_1B367:                              ; CODE XREF: sub_1B302+62j
                cmp     ax, 0
                jz      short loc_1B373
                mov     ds:word_1AD58, ax
                clc
                jmp     short loc_1B374
; ---------------------------------------------------------------------------
                db 90h
; ---------------------------------------------------------------------------

loc_1B373:                              ; CODE XREF: sub_1B302+7j
                                        ; sub_1B302+11j sub_1B302+44j
                                        ; sub_1B302+53j sub_1B302+68j
                stc

loc_1B374:                              ; CODE XREF: sub_1B302+6Ej
                pop     cx
                pop     bx
                pop     ax
                retn
sub_1B302       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


CallInt67       proc near               ; CODE XREF: sub_1B12A+22p GetEMS+5p
                                        ; GetEMS+10p GetEMS+17p sub_1B597+13p
                push    ax

loc_1B379:                              ; CODE XREF: CallInt67+6j
                int     67h             ;  - LIM EMS
                cmp     ah, 82h ; 'é'
                jz      short loc_1B379
                or      ah, ah
                pop     ax
                retn
CallInt67       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


GetEMS          proc near               ; CODE XREF: sub_1B210+19p
                push    ax
                push    bx
                push    dx
                mov     ah, 41h ; 'A'   ; INT 67 - LIM EMS - GET PAGE FRAME SEGMENT
                                        ;         AH = 41h
                                        ; Return: AH = status (see also AH=40h)
                                        ;             00h function successful
                                        ;                 BX = segment of page frame
                call    CallInt67
                jnz     short loc_1B3D7
                mov     ds:word_1AD68, bx
                mov     ah, 42h ; 'B'   ; INT 67 - LIM EMS - GET NUMBER OF PAGES
                                        ;         AH = 42h
                                        ; Return: AH = status (see also AH=40h)
                                        ;             00h function successful
                                        ;                 BX = number of unallocated pages
                                        ;                 DX = total number of pages
                call    CallInt67
                jnz     short loc_1B3D7
                mov     ah, 43h ; 'C'   ; INT 67 - LIM EMS - GET HANDLE AND ALLOCATE MEMORY
                                        ;         AH = 43h
                                        ;         BX = number of logical pages to allocate
                                        ; Return: AH = status (00h,80h,81h,84h,85h,87h,88h,89h) (see #3500)
                                        ;         DX = handle if AH=00h
                call    CallInt67
                jnz     short loc_1B3D7
                shr     bx, 1
                shr     bx, 1
                mov     ds:word_1AD6A, bx
                mov     ds:word_1AD6C, dx
                mov     ds:byte_1AD6E, 0
                test    ds:word_1AD68, 0FFFh
                jnz     short loc_1B3D3
                push    ds
                push    si
                push    di
                push    cx
                mov     ax, seg seg002
                mov     ds, ax
                assume ds:seg002
                call    sub_1C067
                pop     cx
                pop     di
                pop     si
                pop     ds
                assume ds:nothing
                cmp     ax, 0
                jnz     short loc_1B3D3
                mov     ds:byte_1AD6E, 1

loc_1B3D3:                              ; CODE XREF: GetEMS+33j GetEMS+48j
                clc
                jmp     short loc_1B3DE
; ---------------------------------------------------------------------------
                db 90h
; ---------------------------------------------------------------------------

loc_1B3D7:                              ; CODE XREF: GetEMS+8j GetEMS+13j
                                        ; GetEMS+1Aj
                mov     ds:word_1AD6A, 0
                stc

loc_1B3DE:                              ; CODE XREF: GetEMS+50j
                pop     dx
                pop     bx
                pop     ax
                retn
GetEMS          endp

; ---------------------------------------------------------------------------
aEmmxxxx0       db 'EMMXXXX0'           ; DATA XREF: CheckEMS+Eo

; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


CheckEMS        proc near               ; CODE XREF: sub_1B210+14p
                push    ax
                push    cx
                push    si
                push    di
                push    es
                mov     ah, 35h ; '5'
                mov     al, 67h ; 'g'
                int     21h             ; DOS - 2+ - GET INTERRUPT VECTOR
                                        ; AL = interrupt number
                                        ; Return: ES:BX = value of interrupt vector
                mov     di, 0Ah
                lea     si, aEmmxxxx0   ; "EMMXXXX0"
                mov     cx, 8
                cld
                repe cmpsb
                jz      short loc_1B408
                stc
                jmp     short loc_1B409
; ---------------------------------------------------------------------------
                align 2

loc_1B408:                              ; CODE XREF: CheckEMS+18j
                clc

loc_1B409:                              ; CODE XREF: CheckEMS+1Bj
                pop     es
                pop     di
                pop     si
                pop     cx
                pop     ax
                retn
CheckEMS        endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1B40F       proc near               ; CODE XREF: sub_1AFAC+6Bp
                push    bx
                push    cx
                push    dx
                mov     bx, ax
                xor     cx, cx
                xor     dx, dx
                mov     ah, 42h ; 'B'
                mov     al, 2
                int     21h             ; DOS - 2+ - MOVE FILE READ/WRITE POINTER (LSEEK)
                                        ; AL = method: offset from end of file
                inc     dx
                mov     ax, dx
                mov     ds:word_1AD7A, ax
                pop     dx
                pop     cx
                pop     bx
                retn
sub_1B40F       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1B428       proc near               ; CODE XREF: sub_1AFAC+84p
                                        ; sub_1B210+3Fp
                push    bx
                push    cx
                push    dx
                mov     dl, al
                inc     dl
                mov     ah, 36h
                int     21h             ; DOS - 2+ - GET DISK SPACE
                                        ; DL = drive code (0 = default, 1 = A, 2 = B, etc.)
                cmp     ax, 0FFFFh
                jz      short loc_1B441
                mul     cx
                mul     bx
                mov     ax, dx
                jmp     short loc_1B444
; ---------------------------------------------------------------------------
                db 90h
; ---------------------------------------------------------------------------

loc_1B441:                              ; CODE XREF: sub_1B428+Ej
                mov     ax, 0

loc_1B444:                              ; CODE XREF: sub_1B428+16j
                pop     dx
                pop     cx
                pop     bx
                retn
sub_1B428       endp

; ---------------------------------------------------------------------------
                push    bx
                push    cx
                push    dx
                mov     dl, al
                inc     dl
                mov     ah, 36h
                int     21h             ; DOS - 2+ - GET DISK SPACE
                                        ; DL = drive code (0 = default, 1 = A, 2 = B, etc.)
                cmp     ax, 0FFFFh
                jz      short loc_1B464
                push    dx
                mul     cx
                pop     dx
                mul     dx
                mov     ax, dx
                clc
                jmp     short loc_1B467
; ---------------------------------------------------------------------------
                db  90h ; É
; ---------------------------------------------------------------------------

loc_1B464:                              ; CODE XREF: seg001:B456j
                mov     ax, 0

loc_1B467:                              ; CODE XREF: seg001:B461j
                pop     dx
                pop     cx
                pop     bx
                retn

; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1B46B       proc near               ; CODE XREF: sub_1AFAC+60p
                push    ds
                mov     ax, seg seg002
                mov     ds, ax
                assume ds:seg002
                mov     al, cs:byte_1AD74
                xor     ah, ah
                push    ax
                call    sub_1BA38
                add     sp, 2
                mov     cs:word_1AD54, ax
                push    word_1D932
                pop     cs:word_1AD52
                pop     ds
                assume ds:nothing
                retn
sub_1B46B       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1B48D       proc near               ; CODE XREF: sub_1AFAC+79p
                push    ds
                mov     ax, seg seg002
                mov     ds, ax
                assume ds:seg002
                mov     al, cs:byte_1AD76
                xor     ah, ah
                push    ax
                call    sub_1B832
                add     sp, 2
                mov     cs:word_1AD54, ax
                pop     ds
                assume ds:nothing
                retn
sub_1B48D       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1B4A6       proc near               ; CODE XREF: sub_1B72B+72p
                push    ax
                push    cx
                push    dx
                mov     ah, 3Ch ; '<'
                xor     cx, cx
                mov     dx, offset aC_Mm ; "C:$$$$$$$$.$MM"
                mov     al, ds:byte_1AD8D
                add     al, 41h ; 'A'
                mov     byte ptr ds:aC_Mm, al ; "C:$$$$$$$$.$MM"
                int     21h             ; DOS - 2+ - CREATE A FILE WITH HANDLE (CREAT)
                                        ; CX = attributes for file
                                        ; DS:DX -> ASCIZ filename (may include drive and path)
                mov     ds:word_1AD54, ax
                pop     dx
                pop     cx
                pop     ax
                retn
sub_1B4A6       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1B4C1       proc near               ; CODE XREF: sub_1B094+1Dp
                push    ax
                push    es
                cmp     ds:byte_1AD6E, 0
                jnz     short loc_1B4EE
                mov     es, ds:word_1AD5E
                push    ds
                mov     ds, ds:word_1AD68
                call    sub_1B5B8
                pop     ds
                cmp     ds:byte_1AD72, 0
                jz      short loc_1B4EE
                cmp     ds:byte_1AD79, 2
                jz      short loc_1B4EE
                cmp     al, 0
                jbe     short loc_1B4EE
                dec     al
                call    sub_1B597

loc_1B4EE:                              ; CODE XREF: sub_1B4C1+7j
                                        ; sub_1B4C1+1Bj sub_1B4C1+22j
                                        ; sub_1B4C1+26j
                pop     es
                pop     ax
                retn
sub_1B4C1       endp

; [00000001 BYTES: COLLAPSED FUNCTION nullsub_1. PRESS KEYPAD "+" TO EXPAND]

; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1B4F2       proc near               ; CODE XREF: sub_1B094+35p
                                        ; sub_1B5EE+57p sub_1B5EE+8Cp
                push    ax
                push    bx
                push    cx
                push    dx
                mov     bx, ds:word_1AD54
                mov     cx, 8000h
                mov     dx, 0
                push    ds
                mov     ah, 3Fh ; '?'
                push    es
                pop     ds
                assume ds:nothing
                int     21h             ; DOS - 2+ - READ FROM FILE WITH HANDLE
                                        ; BX = file handle, CX = number of bytes to read
                                        ; DS:DX -> buffer
                mov     ax, ds
                add     ax, 800h
                mov     ds, ax
                assume ds:nothing
                mov     ah, 3Fh
                int     21h             ; DOS - 2+ - READ FROM FILE WITH HANDLE
                                        ; BX = file handle, CX = number of bytes to read
                                        ; DS:DX -> buffer
                pop     ds
                assume ds:nothing
                pop     dx
                pop     cx
                pop     bx
                pop     ax
                retn
sub_1B4F2       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1B518       proc near               ; CODE XREF: sub_1B1A8+35p
                                        ; sub_1B5EE+50p sub_1B5EE+85p
                push    ax
                push    bx
                push    cx
                push    dx
                xor     cx, cx
                mov     cl, al
                xor     dx, dx
                mov     bx, ds:word_1AD54
                xor     al, al
                mov     ah, 42h
                int     21h             ; DOS - 2+ - MOVE FILE READ/WRITE POINTER (LSEEK)
                                        ; AL = method: offset from beginning of file
                pop     dx
                pop     cx
                pop     bx
                pop     ax
                retn
sub_1B518       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1B531       proc near               ; CODE XREF: sub_1B0DC+1Dp
                push    ds
                push    es
                cmp     ds:byte_1AD6E, 0
                jnz     short loc_1B546
                mov     es, cs:word_1AD68
                mov     ds, ds:word_1AD5E
                call    sub_1B5B8

loc_1B546:                              ; CODE XREF: sub_1B531+7j
                pop     es
                pop     ds
                retn
sub_1B531       endp

; [00000001 BYTES: COLLAPSED FUNCTION nullsub_2. PRESS KEYPAD "+" TO EXPAND]

; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1B54A       proc near               ; CODE XREF: sub_1B0DC+35p
                push    ax
                push    bx
                push    cx
                push    dx
                cmp     ds:byte_1AD79, 0
                jz      short loc_1B55F
                cmp     ds:word_1AFA4, 0
                ja      short loc_1B55F
                call    sub_1B5CB

loc_1B55F:                              ; CODE XREF: sub_1B54A+9j
                                        ; sub_1B54A+10j
                mov     bx, ds:word_1AD54
                mov     cx, 8000h
                mov     dx, 0
                push    ds
                push    es
                pop     ds
                assume ds:nothing
                mov     ah, 40h
                int     21h             ; DOS - 2+ - WRITE TO FILE WITH HANDLE
                                        ; BX = file handle, CX = number of bytes to write, DS:DX -> buffer
                mov     ax, ds
                add     ax, 800h
                mov     ds, ax
                assume ds:nothing
                mov     ah, 40h
                int     21h             ; DOS - 2+ - WRITE TO FILE WITH HANDLE
                                        ; BX = file handle, CX = number of bytes to write, DS:DX -> buffer
                pop     ds
                assume ds:nothing
                pop     dx
                pop     cx
                pop     bx
                pop     ax
                retn
sub_1B54A       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1B581       proc near               ; CODE XREF: sub_1B1A8+14p
                                        ; sub_1B5EE+54p
                push    ax
                push    bx
                push    cx
                mov     bx, cs:word_1AD62
                mov     cl, 0Ch
                shr     bx, cl
                add     bl, al
                shl     bx, cl
                mov     es, bx
                pop     cx
                pop     bx
                pop     ax
                retn
sub_1B581       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1B597       proc near               ; CODE XREF: sub_1B1A8+24p
                                        ; sub_1B4C1+2Ap sub_1B5EE+89p
                push    ax
                push    bx
                push    dx
                xor     ah, ah
                mov     bx, ax
                shl     bx, 1
                shl     bx, 1
                mov     al, 0
                mov     dx, ds:word_1AD6C
                mov     ah, 44h ; 'D'

loc_1B5AA:                              ; CODE XREF: sub_1B597+1Bj
                call    CallInt67
                inc     al
                inc     bx
                cmp     al, 4
                jl      short loc_1B5AA
                pop     dx
                pop     bx
                pop     ax
                retn
sub_1B597       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1B5B8       proc near               ; CODE XREF: sub_1B4C1+12p
                                        ; sub_1B531+12p
                push    cx
                push    si
                push    di
                mov     si, 0
                mov     di, 0
                mov     cx, 8000h
                cld
                rep movsw
                pop     di
                pop     si
                pop     cx
                retn
sub_1B5B8       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1B5CB       proc near               ; CODE XREF: sub_1B54A+12p
                push    ds
                push    es
                push    ax
                push    cx
                push    si
                push    di
                mov     cx, 80h ; 'Ç'
                mov     ax, seg seg002
                mov     ds, ax
                assume ds:seg002
                mov     si, offset word_1E2B2
                mov     es, cs:word_1AD5E
                mov     di, 0
                cld
                rep movsw
                pop     di
                pop     si
                pop     cx
                pop     ax
                pop     es
                pop     ds
                assume ds:nothing
                retn
sub_1B5CB       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1B5EE       proc near               ; CODE XREF: sub_1AFAC+6Ep
                push    ax
                push    bx
                push    es
                push    ds
                push    si
                push    di
                push    cx
                mov     ax, seg seg002
                mov     ds, ax
                assume ds:seg002
                call    sub_1C08D
                pop     cx
                pop     di
                pop     si
                pop     ds
                assume ds:nothing
                mov     ax, word ptr ds:byte_1AD50
                cmp     ax, ds:word_1AD52
                jnz     short loc_1B61A
                mov     al, ds:byte_1AD78
                cmp     al, ds:byte_1AD76
                jnz     short loc_1B61A
                mov     cx, ds:word_1AFA2
                jmp     loc_1B69D
; ---------------------------------------------------------------------------

loc_1B61A:                              ; CODE XREF: sub_1B5EE+1Aj
                                        ; sub_1B5EE+23j
                mov     cx, 0
                cmp     ds:word_1AD58, 1
                jbe     short loc_1B657
                mov     al, 1
                mov     ah, 0
                cmp     ds:byte_1AD73, 0
                jz      short loc_1B638
                cmp     ds:word_1AD58, 2
                jbe     short loc_1B657
                mov     al, 2

loc_1B638:                              ; CODE XREF: sub_1B5EE+3Fj
                                        ; sub_1B5EE+67j
                call    sub_1B1E2
                push    ax
                mov     ax, cx
                call    sub_1B518
                pop     ax
                call    sub_1B581
                call    sub_1B4F2
                inc     cx
                cmp     cx, ds:word_1AD7A
                jnb     short loc_1B69D
                inc     al
                cmp     al, byte ptr ds:word_1AD58
                jb      short loc_1B638

loc_1B657:                              ; CODE XREF: sub_1B5EE+34j
                                        ; sub_1B5EE+46j
                cmp     ds:word_1AD68, 0
                jz      short loc_1B68C
                cmp     ds:word_1AD6A, 0
                jz      short loc_1B68C
                mov     ah, 2
                mov     al, 0
                mov     es, ds:word_1AD68

loc_1B66D:                              ; CODE XREF: sub_1B5EE+9Cj
                call    sub_1B1E2
                push    ax
                mov     ax, cx
                call    sub_1B518
                pop     ax
                call    sub_1B597
                call    sub_1B4F2
                inc     cx
                cmp     cx, ds:word_1AD7A
                jnb     short loc_1B69D
                inc     al
                cmp     al, byte ptr ds:word_1AD6A
                jb      short loc_1B66D

loc_1B68C:                              ; CODE XREF: sub_1B5EE+6Ej
                                        ; sub_1B5EE+75j
                mov     ah, 1

loc_1B68E:                              ; CODE XREF: sub_1B5EE+AAj
                mov     al, cl
                call    sub_1B1E2
                inc     cx
                cmp     cx, ds:word_1AD7A
                jb      short loc_1B68E
                jmp     short loc_1B69D
; ---------------------------------------------------------------------------
                db 90h
; ---------------------------------------------------------------------------

loc_1B69D:                              ; CODE XREF: sub_1B5EE+29j
                                        ; sub_1B5EE+5Fj sub_1B5EE+94j
                                        ; sub_1B5EE+ACj
                mov     ax, ds:word_1AD52
                mov     word ptr ds:byte_1AD50, ax
                mov     al, ds:byte_1AD76
                mov     ds:byte_1AD78, al
                push    ds
                push    si
                push    di
                push    cx
                mov     ax, seg seg002
                mov     ds, ax
                assume ds:seg002
                call    sub_1C11E
                pop     cx
                pop     di
                pop     si
                pop     ds
                assume ds:nothing
                pop     es
                pop     bx
                pop     ax
                retn
sub_1B5EE       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1B6BD       proc near               ; CODE XREF: sub_1AFAC+8Ap
                push    ax
                mov     word ptr ds:byte_1AD50, 0FFFFh
                mov     cx, 0
                mov     ah, 1

loc_1B6C9:                              ; CODE XREF: sub_1B6BD+1Cj
                mov     al, cl
                call    sub_1B1E2
                inc     cx
                cmp     cx, 100h
                jnb     short loc_1B6DB
                cmp     cx, ds:word_1AD7A
                jb      short loc_1B6C9

loc_1B6DB:                              ; CODE XREF: sub_1B6BD+16j
                pop     ax
                retn
sub_1B6BD       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


GetInt24_2      proc near               ; CODE XREF: sub_1AFAC+5p
                push    ax
                push    bx
                push    dx
                push    ds
                push    es
                mov     ah, 35h ; '5'
                mov     al, 24h ; '$'
                int     21h             ; DOS - 2+ - GET INTERRUPT VECTOR
                                        ; AL = interrupt number
                                        ; Return: ES:BX = value of interrupt vector
                mov     cs:OldInt24Off2, bx
                mov     cs:OldInt24Seg2, es
                mov     dx, offset Int_24_Handler2
                push    cs
                pop     ds
                assume ds:seg001
                mov     ah, 25h ; '%'
                mov     al, 24h ; '$'
                int     21h             ; DOS - SET INTERRUPT VECTOR
                                        ; AL = interrupt number
                                        ; DS:DX = new vector to be used for specified interrupt
                pop     es
                pop     ds
                assume ds:nothing
                pop     dx
                pop     bx
                pop     ax
                retn
GetInt24_2      endp

; ---------------------------------------------------------------------------

Int_24_Handler2:                        ; DATA XREF: GetInt24_2+15o
                mov     ax, 3
                cmp     cs:DosMajorVer, 3
                jnb     short loc_1B711
                mov     ax, 0

loc_1B711:                              ; CODE XREF: seg001:B70Cj
                iret

; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


RestoreInt24_2  proc near               ; CODE XREF: sub_1AFAC+C1p
                pushf
                push    ax
                push    dx
                push    ds
                mov     dx, cs:OldInt24Off2
                mov     ds, cs:OldInt24Seg2
                mov     ah, 25h ; '%'
                mov     al, 24h ; '$'
                int     21h             ; DOS - SET INTERRUPT VECTOR
                                        ; AL = interrupt number
                                        ; DS:DX = new vector to be used for specified interrupt
                pop     ds
                pop     dx
                pop     ax
                popf
                retn
RestoreInt24_2  endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1B72B       proc near               ; CODE XREF: sub_1AFAC+95p
                push    es
                push    ax
                push    di
                mov     word ptr ds:byte_1AD50, 0FFFFh
                mov     cx, 0
                mov     al, 0
                mov     di, 0ADA2h
                push    cs
                pop     es
                assume es:seg001
                cmp     ds:word_1AD58, 1
                jbe     short loc_1B773
                mov     al, 2
                cmp     ds:byte_1AD73, 0
                jnz     short loc_1B767
                mov     al, 1
                cmp     ds:byte_1AD72, 0
                jnz     short loc_1B767
                cmp     ds:byte_1AD6E, 0
                jz      short loc_1B767
                cmp     ds:byte_1AD7D, 0
                jz      short loc_1B767
                mov     al, 0

loc_1B767:                              ; CODE XREF: sub_1B72B+21j
                                        ; sub_1B72B+2Aj sub_1B72B+31j
                                        ; sub_1B72B+38j
                mov     ah, 0

loc_1B769:                              ; CODE XREF: sub_1B72B+46j
                stosw
                inc     cx
                inc     al
                cmp     al, byte ptr ds:word_1AD58
                jb      short loc_1B769

loc_1B773:                              ; CODE XREF: sub_1B72B+18j
                cmp     ds:word_1AD68, 0
                jz      short loc_1B78F
                cmp     ds:word_1AD6A, 0
                jz      short loc_1B78F
                mov     ah, 2
                mov     al, 0

loc_1B785:                              ; CODE XREF: sub_1B72B+62j
                stosw
                inc     cx
                inc     al
                cmp     al, byte ptr ds:word_1AD6A
                jb      short loc_1B785

loc_1B78F:                              ; CODE XREF: sub_1B72B+4Dj
                                        ; sub_1B72B+54j
                cmp     ds:byte_1AD7D, 0
                jnz     short loc_1B7AE
                cmp     ds:word_1AD8E, 0
                jz      short loc_1B7AE
                call    sub_1B4A6
                mov     ah, 1
                mov     al, 0

loc_1B7A4:                              ; CODE XREF: sub_1B72B+81j
                stosw
                inc     cx
                inc     al
                cmp     al, byte ptr ds:word_1AD8E
                jb      short loc_1B7A4

loc_1B7AE:                              ; CODE XREF: sub_1B72B+69j
                                        ; sub_1B72B+70j
                pop     di
                pop     ax
                pop     es
                assume es:nothing
                retn
sub_1B72B       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1B7B2       proc near               ; CODE XREF: sub_1B302+46p
                push    ax
                cmp     ds:byte_1AD72, 0
                jz      short loc_1B7F0
                push    ds:word_1AD5E
                pop     ds:word_1AD66
                push    ds:word_1AD5E
                pop     word ptr ds:byte_1AD64
                add     word ptr ds:byte_1AD64, 1000h
                mov     ds:byte_1AD73, 1
                mov     ax, ds:word_1AD6A
                cmp     ax, ds:word_1AD7A
                jb      short loc_1B7F0
                cmp     ds:byte_1AD6E, 0
                jz      short loc_1B7F0
                mov     ds:byte_1AD73, 0
                mov     ax, ds:word_1AD68
                mov     word ptr ds:byte_1AD64, ax

loc_1B7F0:                              ; CODE XREF: sub_1B7B2+6j
                                        ; sub_1B7B2+2Aj sub_1B7B2+31j
                pop     ax
                retn
sub_1B7B2       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1B7F2       proc near               ; CODE XREF: sub_1B1A8+1Ap
                push    ax
                cmp     ds:byte_1AD79, 2
                jz      short loc_1B830
                cmp     ds:byte_1AD72, 0
                jz      short loc_1B830
                push    ds:word_1AD66
                push    word ptr ds:byte_1AD64
                pop     ds:word_1AD66
                pop     word ptr ds:byte_1AD64
                mov     es, word ptr ds:byte_1AD64
                mov     ds:word_1AD5E, es
                mov     ds:byte_1AD6E, 0
                mov     ax, es
                cmp     ax, ds:word_1AD68
                jnz     short loc_1B830
                test    ax, 0FFFh
                jnz     short loc_1B830
                mov     ds:byte_1AD6E, 1

loc_1B830:                              ; CODE XREF: sub_1B7F2+6j sub_1B7F2+Dj
                                        ; sub_1B7F2+32j sub_1B7F2+37j
                pop     ax
                retn
sub_1B7F2       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; Attributes: bp-based frame

sub_1B832       proc near               ; CODE XREF: sub_1B48D+Dp

var_6           = word ptr -6
var_4           = word ptr -4
var_2           = word ptr -2
arg_0           = word ptr  4

                push    bp
                mov     bp, sp
                mov     ax, 6
                call    __chkstk
                mov     ds:word_1E2B2, 0A55Ah
                mov     ax, ds:word_1D936
                inc     ds:word_1D936
                or      ax, ax
                jnz     short loc_1B8AD
                mov     ax, 2
                push    ax
                call    sub_1BFA8
                add     sp, 2
                mov     bx, ax
                mov     [bp+var_4], bx
                cmp     byte ptr [bx], 0
                jz      short loc_1B8AD
                push    bx
                push    [bp+arg_0]
                call    sub_1BB88
                add     sp, 4
                mov     [bp+var_6], ax
                push    ax
                call    sub_1C268
                add     sp, 2
                mov     [bp+var_2], ax
                or      ax, ax
                jle     short loc_1B884
                push    ax
                call    _close
                add     sp, 2
                jmp     short loc_1B8AD
; ---------------------------------------------------------------------------

loc_1B884:                              ; CODE XREF: sub_1B832+47j
                push    [bp+var_6]
                call    sub_1C2BD
                add     sp, 2
                mov     [bp+var_2], ax
                or      ax, ax
                jle     short loc_1B8AD
                push    [bp+var_4]
                mov     ax, 48h ; 'H'
                push    ax
                call    sub_1C714
                add     sp, 4
                mov     ds:byte_1E2B4, 0
                mov     ds:byte_1E2D4, 0
                jmp     short loc_1B8B9
; ---------------------------------------------------------------------------

loc_1B8AD:                              ; CODE XREF: sub_1B832+18j
                                        ; sub_1B832+2Cj sub_1B832+50j
                                        ; sub_1B832+60j
                push    [bp+arg_0]
                call    sub_1B8C6
                add     sp, 2
                mov     [bp+var_2], ax

loc_1B8B9:                              ; CODE XREF: sub_1B832+79j
                mov     ds:word_10044, 1
                mov     ax, [bp+var_2]
                mov     sp, bp
                pop     bp
                retn
sub_1B832       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; Attributes: bp-based frame

sub_1B8C6       proc near               ; CODE XREF: sub_1B832+7Ep

var_12          = byte ptr -12h
var_10          = byte ptr -10h
var_6           = word ptr -6
var_4           = word ptr -4
var_2           = word ptr -2
arg_0           = word ptr  4

                push    bp
                mov     bp, sp
                mov     ax, 12h
                call    __chkstk
                mov     [bp+var_4], 0FFFFh
                call    sub_1C23E
                mov     ax, 0A04h
                push    ax
                mov     ax, 48h ; 'H'
                push    ax
                mov     ax, 11h
                push    ax
                mov     ax, 19h
                push    ax
                mov     ax, 5
                push    ax
                call    sub_1C1D7
                add     sp, 0Ah
                push    [bp+arg_0]
                call    sub_1BEC1
                add     sp, 2
                call    sub_1BDF1
                mov     ax, 6Ah ; 'j'
                push    ax
                mov     ax, 0Fh
                push    ax
                call    sub_1BBF6
                add     sp, 4

loc_1B90B:                              ; CODE XREF: sub_1B8C6+9Ej
                mov     ax, 8
                push    ax
                lea     ax, [bp+var_10]
                push    ax
                mov     ax, 32h ; '2'
                push    ax
                mov     ax, 0Fh
                push    ax
                call    sub_1C3CA
                add     sp, 8
                mov     [bp+var_2], ax
                lea     ax, [bp+var_10]
                mov     [bp+var_6], ax
                jmp     short loc_1B940
; ---------------------------------------------------------------------------

loc_1B92C:                              ; CODE XREF: sub_1B8C6+84j
                mov     al, [bp+var_12]
                cbw
                mov     bx, ax
                test    byte ptr ds:asc_1EC89[bx], 7 ; "         (((((                  H"
                jnz     short loc_1B93D
                cmp     al, 5Fh ; '_'
                jnz     short loc_1B94C

loc_1B93D:                              ; CODE XREF: sub_1B8C6+71j
                inc     [bp+var_6]

loc_1B940:                              ; CODE XREF: sub_1B8C6+64j
                mov     bx, [bp+var_6]
                mov     al, [bx]
                mov     [bp+var_12], al
                or      al, al
                jnz     short loc_1B92C

loc_1B94C:                              ; CODE XREF: sub_1B8C6+75j
                mov     bx, [bp+var_6]
                cmp     byte ptr [bx], 0
                jz      short loc_1B95E
                mov     ax, offset aBadFilename ; "Bad Filename"
                push    ax
                call    sub_1C147
                add     sp, 2

loc_1B95E:                              ; CODE XREF: sub_1B8C6+8Cj
                mov     bx, [bp+var_6]
                cmp     byte ptr [bx], 0
                jnz     short loc_1B90B
                cmp     [bp+var_2], 0
                jg      short loc_1B96F
                jmp     loc_1BA06
; ---------------------------------------------------------------------------

loc_1B96F:                              ; CODE XREF: sub_1B8C6+A4j
                lea     ax, [bp+var_10]
                push    ax
                call    sub_1C790
                add     sp, 2
                lea     ax, [bp+var_10]
                push    ax
                push    [bp+arg_0]
                call    sub_1BB88
                add     sp, 4
                mov     [bp+var_6], ax
                push    ax
                call    sub_1C268
                add     sp, 2
                mov     [bp+var_4], ax
                or      ax, ax
                jle     short loc_1B9AF
                push    ax
                call    sub_1C27F
                add     sp, 2
                mov     ax, offset aFileExists ; "File Exists"
                push    ax
                call    sub_1C147
                add     sp, 2
                mov     [bp+var_4], 0FFFFh
                jmp     short loc_1BA06
; ---------------------------------------------------------------------------

loc_1B9AF:                              ; CODE XREF: sub_1B8C6+CFj
                push    [bp+var_6]
                call    sub_1C2BD
                add     sp, 2
                mov     [bp+var_4], ax
                cmp     ax, 0FFFFh
                jnz     short loc_1B9CC
                mov     ax, offset aCreateFailure ; "Create Failure"
                push    ax
                call    sub_1C147
                add     sp, 2
                jmp     short loc_1BA06
; ---------------------------------------------------------------------------

loc_1B9CC:                              ; CODE XREF: sub_1B8C6+F8j
                mov     ax, offset aInfo ; "Info>"
                push    ax
                mov     ax, 0Fh
                push    ax
                call    sub_1BBF6
                add     sp, 4
                mov     ax, 1Fh
                push    ax
                mov     ax, 9C4h
                push    ax
                mov     ax, 21h ; '!'
                push    ax
                mov     ax, 0Fh
                push    ax
                call    sub_1C3CA
                add     sp, 8
                mov     ax, 1Fh
                push    ax
                mov     ax, 9E4h
                push    ax
                mov     ax, 21h ; '!'
                push    ax
                mov     ax, 10h
                push    ax
                call    sub_1C3CA
                add     sp, 8

loc_1BA06:                              ; CODE XREF: sub_1B8C6+A6j
                                        ; sub_1B8C6+E7j sub_1B8C6+104j
                mov     ax, 0A04h
                push    ax
                mov     ax, 48h ; 'H'
                push    ax
                mov     ax, 11h
                push    ax
                mov     ax, 19h
                push    ax
                mov     ax, 5
                push    ax
                call    sub_1C208
                add     sp, 0Ah
                call    sub_1C254
                lea     ax, [bp+var_10]
                push    ax
                mov     ax, 48h ; 'H'
                push    ax
                call    sub_1C714
                add     sp, 4
                mov     ax, [bp+var_4]
                mov     sp, bp
                pop     bp
                retn
sub_1B8C6       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; Attributes: bp-based frame

sub_1BA38       proc near               ; CODE XREF: sub_1B46B+Dp

var_4           = word ptr -4
var_2           = word ptr -2
arg_0           = word ptr  4

                push    bp
                mov     bp, sp
                mov     ax, 4
                call    __chkstk
                mov     ax, ds:word_1D936
                inc     ds:word_1D936
                or      ax, ax
                jnz     short loc_1BABB
                mov     ax, 1
                push    ax
                call    sub_1BFA8
                add     sp, 2
                mov     bx, ax
                mov     [bp+var_4], bx
                cmp     byte ptr [bx], 0
                jz      short loc_1BABB
                push    bx
                push    [bp+arg_0]
                call    sub_1BB88
                add     sp, 4
                push    ax
                call    sub_1C268
                add     sp, 2
                mov     [bp+var_2], ax
                or      ax, ax
                jle     short loc_1BABB
                push    [bp+var_4]
                mov     ax, 48h ; 'H'
                push    ax
                call    sub_1C714
                add     sp, 4
                push    [bp+arg_0]
                call    sub_1BEC1
                add     sp, 2
                mov     ds:word_1D932, 0

loc_1BA94:                              ; CODE XREF: sub_1BA38+81j
                mov     ax, ds:EndOfCurrTrk+1
                cmp     ds:word_1D932, ax
                jge     short loc_1BAC7
                mov     ax, 4Ah ; 'J'
                imul    ds:word_1D932
                add     ax, 82h ; 'é'
                push    ax
                push    [bp+var_4]
                call    sub_1C6C2
                add     sp, 4
                or      ax, ax
                jz      short loc_1BAC7
                inc     ds:word_1D932
                jmp     short loc_1BA94
; ---------------------------------------------------------------------------

loc_1BABB:                              ; CODE XREF: sub_1BA38+12j
                                        ; sub_1BA38+26j sub_1BA38+3Ej
                push    [bp+arg_0]
                call    sub_1BACE
                add     sp, 2
                mov     [bp+var_2], ax

loc_1BAC7:                              ; CODE XREF: sub_1BA38+63j
                                        ; sub_1BA38+7Bj
                mov     ax, [bp+var_2]
                mov     sp, bp
                pop     bp
                retn
sub_1BA38       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; Attributes: bp-based frame

sub_1BACE       proc near               ; CODE XREF: sub_1BA38+86p

var_4           = word ptr -4
var_2           = word ptr -2
arg_0           = word ptr  4

                push    bp
                mov     bp, sp
                mov     ax, 4
                call    __chkstk
                mov     [bp+var_2], 0FFFFh
                call    sub_1C23E
                mov     ax, 0A04h
                push    ax
                mov     ax, 48h ; 'H'
                push    ax
                mov     ax, 11h
                push    ax
                mov     ax, 19h
                push    ax
                mov     ax, 5
                push    ax
                call    sub_1C1D7
                add     sp, 0Ah
                push    [bp+arg_0]
                call    sub_1BEC1
                add     sp, 2
                call    sub_1BDF1
                cmp     ds:word_1D930, 0
                jle     short loc_1BB14
                call    sub_1BD04
                mov     [bp+var_4], ax
                jmp     short loc_1BB1E
; ---------------------------------------------------------------------------

loc_1BB14:                              ; CODE XREF: sub_1BACE+3Cj
                mov     ax, offset aNoImageAvailab ; "No Image Available"
                push    ax
                call    sub_1C147
                add     sp, 2

loc_1BB1E:                              ; CODE XREF: sub_1BACE+44j
                cmp     [bp+var_4], 0
                jl      short loc_1BB49
                cmp     ds:word_1D932, 0
                jl      short loc_1BB49
                mov     ax, 4Ah ; 'J'
                imul    ds:word_1D932
                add     ax, 82h ; 'é'
                push    ax
                push    [bp+arg_0]
                call    sub_1BB88
                add     sp, 4
                push    ax
                call    sub_1C268
                add     sp, 2
                mov     [bp+var_2], ax

loc_1BB49:                              ; CODE XREF: sub_1BACE+54j
                                        ; sub_1BACE+5Bj
                mov     ax, 0A04h
                push    ax
                mov     ax, 48h ; 'H'
                push    ax
                mov     ax, 11h
                push    ax
                mov     ax, 19h
                push    ax
                mov     ax, 5
                push    ax
                call    sub_1C208
                add     sp, 0Ah
                call    sub_1C254
                mov     ds:word_1D934, 0
                mov     ax, 4Ah ; 'J'
                imul    ds:word_1D932
                add     ax, 82h ; 'é'
                push    ax
                mov     ax, 48h ; 'H'
                push    ax
                call    sub_1C714
                add     sp, 4
                mov     ax, [bp+var_2]
                mov     sp, bp
                pop     bp
                retn
sub_1BACE       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; Attributes: bp-based frame

sub_1BB88       proc near               ; CODE XREF: sub_1B832+32p
                                        ; sub_1B8C6+BAp sub_1BA38+2Cp
                                        ; sub_1BACE+6Bp sub_1BEC1+76p

arg_0           = word ptr  4
arg_2           = word ptr  6

                push    bp
                mov     bp, sp
                xor     ax, ax
                call    __chkstk
                push    [bp+arg_2]
                mov     ax, [bp+arg_0]
                add     ax, 41h ; 'A'
                push    ax
                mov     ax, offset aCS_img ; "%c:%s.IMG"
                push    ax
                mov     ax, 5Ah ; 'Z'
                push    ax
                call    _printf
                add     sp, 8
                mov     ax, 5Ah ; 'Z'
                mov     sp, bp
                pop     bp
                retn
sub_1BB88       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; Attributes: bp-based frame

sub_1BBAF       proc near               ; CODE XREF: sub_1AD37+Ep

var_2           = word ptr -2

                push    bp
                mov     bp, sp
                mov     ax, 2
                call    __chkstk
                cmp     ds:word_10044, 0
                jnz     short loc_1BBC6
                mov     [bp+var_2], 5
                jmp     short loc_1BBCB
; ---------------------------------------------------------------------------

loc_1BBC6:                              ; CODE XREF: sub_1BBAF+Ej
                mov     [bp+var_2], 6

loc_1BBCB:                              ; CODE XREF: sub_1BBAF+15j
                mov     ax, offset asc_1E81F ; ":"
                push    ax
                mov     ax, 7
                push    ax
                mov     ax, 14h
                push    ax
                push    [bp+var_2]
                call    sub_1C180
                add     sp, 8
                mov     ax, 48h ; 'H'
                push    ax
                mov     ax, 7
                push    ax
                mov     ax, 15h
                push    ax
                push    [bp+var_2]
                call    sub_1C180
                mov     sp, bp
                pop     bp
                retn
sub_1BBAF       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; Attributes: bp-based frame

sub_1BBF6       proc near               ; CODE XREF: sub_1B8C6+3Fp
                                        ; sub_1B8C6+10Ep sub_1C147+25p

arg_0           = word ptr  4
arg_2           = word ptr  6

                push    bp
                mov     bp, sp
                xor     ax, ax
                call    __chkstk
                push    [bp+arg_0]
                call    sub_1BCE6
                add     sp, 2
                push    [bp+arg_2]
                mov     ax, 7
                push    ax
                mov     ax, 1Bh
                push    ax
                push    [bp+arg_0]
                call    sub_1C180
                mov     sp, bp
                pop     bp
                retn
sub_1BBF6       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; Attributes: bp-based frame

sub_1BC1C       proc near               ; CODE XREF: sub_1BD04+28p
                                        ; sub_1BD04+43p sub_1BD04+88p
                                        ; sub_1BDF1+20p

var_4           = word ptr -4
var_2           = word ptr -2
arg_0           = word ptr  4
arg_2           = word ptr  6

                push    bp
                mov     bp, sp
                mov     ax, 4
                call    __chkstk
                mov     ax, [bp+arg_0]
                cwd
                xor     ax, dx
                sub     ax, dx
                mov     cx, 2
                sar     ax, cl
                xor     ax, dx
                sub     ax, dx
                add     ax, 6
                mov     [bp+var_2], ax
                mov     ax, [bp+arg_0]
                cwd
                mov     cx, 4
                idiv    cx
                mov     ax, dx
                shl     dx, 1
                shl     dx, 1
                add     dx, ax
                shl     dx, 1
                add     dx, 1Dh
                mov     [bp+var_4], dx
                mov     ax, 4Ah ; 'J'
                imul    [bp+arg_0]
                add     ax, 82h ; 'é'
                push    ax
                cmp     [bp+arg_2], 0
                jz      short loc_1BC6A
                mov     ax, 0Fh
                jmp     short loc_1BC6D
; ---------------------------------------------------------------------------

loc_1BC6A:                              ; CODE XREF: sub_1BC1C+47j
                mov     ax, 7

loc_1BC6D:                              ; CODE XREF: sub_1BC1C+4Cj
                push    ax
                push    [bp+var_4]
                push    [bp+var_2]
                call    sub_1C180
                mov     sp, bp
                pop     bp
                retn
sub_1BC1C       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; Attributes: bp-based frame

sub_1BC7B       proc near               ; CODE XREF: sub_1BD04+1Ap
                                        ; sub_1BD04+92p

arg_0           = word ptr  4

                push    bp
                mov     bp, sp
                xor     ax, ax
                call    __chkstk
                mov     ax, 0Fh
                push    ax
                call    sub_1BCE6
                add     sp, 2
                mov     ax, offset aInfo_0 ; "Info >"
                push    ax
                mov     ax, 7
                push    ax
                mov     ax, 1Bh
                push    ax
                mov     ax, 0Fh
                push    ax
                call    sub_1C180
                add     sp, 8
                mov     ax, 4Ah ; 'J'
                imul    [bp+arg_0]
                add     ax, 8Ch ; 'î'
                push    ax
                mov     ax, 0Fh
                push    ax
                mov     ax, 25h ; '%'
                push    ax
                mov     ax, 0Fh
                push    ax
                call    sub_1C180
                add     sp, 8
                mov     ax, 10h
                push    ax
                call    sub_1BCE6
                add     sp, 2
                mov     ax, 4Ah ; 'J'
                imul    [bp+arg_0]
                add     ax, 0ACh ; '¼'
                push    ax
                mov     ax, 0Fh
                push    ax
                mov     ax, 25h ; '%'
                push    ax
                mov     ax, 10h
                push    ax
                call    sub_1C180
                mov     sp, bp
                pop     bp
                retn
sub_1BC7B       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; Attributes: bp-based frame

sub_1BCE6       proc near               ; CODE XREF: sub_1BBF6+Bp sub_1BC7B+Cp
                                        ; sub_1BC7B+48p sub_1C147+32p

arg_0           = word ptr  4

                push    bp
                mov     bp, sp
                xor     ax, ax
                call    __chkstk
                mov     ax, 1018h
                push    ax
                mov     ax, 7
                push    ax
                mov     ax, 19h
                push    ax
                push    [bp+arg_0]
                call    sub_1C180
                mov     sp, bp
                pop     bp
                retn
sub_1BCE6       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; Attributes: bp-based frame

sub_1BD04       proc near               ; CODE XREF: sub_1BACE+3Ep

var_4           = word ptr -4
var_2           = word ptr -2

                push    bp
                mov     bp, sp
                mov     ax, 4
                call    __chkstk
                mov     ax, ds:word_1D930
                cmp     ds:word_1D932, ax
                jl      short loc_1BD1A
                dec     ax
                mov     ds:word_1D932, ax

loc_1BD1A:                              ; CODE XREF: sub_1BD04+10j
                push    ds:word_1D932
                call    sub_1BC7B
                add     sp, 2
                mov     ax, 1
                push    ax
                push    ds:word_1D932
                call    sub_1BC1C
                add     sp, 4

loc_1BD32:                              ; CODE XREF: sub_1BD04+9Cj
                call    sub_1C1AF
                mov     [bp+var_2], ax
                mov     al, byte ptr [bp+var_2]
                sub     ah, ah
                mov     [bp+var_4], ax
                sub     ax, ax
                push    ax
                push    ds:word_1D932
                call    sub_1BC1C
                add     sp, 4
                mov     ax, [bp+var_2]
                mov     cl, 8
                sar     ax, cl
                cmp     ax, 44h ; 'D'
                jnz     short loc_1BD5C
                jmp     loc_1BDEA
; ---------------------------------------------------------------------------

loc_1BD5C:                              ; CODE XREF: sub_1BD04+53j
                cmp     ax, 48h ; 'H'
                jz      short loc_1BD78
                cmp     ax, 4Bh ; 'K'
                jz      short loc_1BDD7
                cmp     ax, 4Dh ; 'M'
                jz      short loc_1BDB9
                cmp     ax, 50h ; 'P'
                jz      short loc_1BDA6
                cmp     [bp+var_4], 1Bh
                jnz     short loc_1BD84
                jmp     short loc_1BDEA
; ---------------------------------------------------------------------------

loc_1BD78:                              ; CODE XREF: sub_1BD04+5Bj
                cmp     ds:word_1D932, 4
                jl      short loc_1BD84
                sub     ds:word_1D932, 4

loc_1BD84:                              ; CODE XREF: sub_1BD04+70j
                                        ; sub_1BD04+79j sub_1BD04+ACj
                                        ; sub_1BD04+B3j sub_1BD04+C1j
                                        ; sub_1BD04+CBj sub_1BD04+D1j
                                        ; sub_1BD04+DEj sub_1BD04+E4j
                mov     ax, 1
                push    ax
                push    ds:word_1D932
                call    sub_1BC1C
                add     sp, 4
                push    ds:word_1D932
                call    sub_1BC7B
                add     sp, 2
                cmp     [bp+var_4], 0Dh
                jnz     short loc_1BD32
                sub     ax, ax
                jmp     short loc_1BDED
; ---------------------------------------------------------------------------

loc_1BDA6:                              ; CODE XREF: sub_1BD04+6Aj
                mov     ax, ds:word_1D932
                add     ax, 4
                cmp     ax, ds:word_1D930
                jge     short loc_1BD84
                add     ds:word_1D932, 4
                jmp     short loc_1BD84
; ---------------------------------------------------------------------------

loc_1BDB9:                              ; CODE XREF: sub_1BD04+65j
                mov     ax, ds:word_1D932
                cwd
                mov     cx, 4
                idiv    cx
                cmp     dx, 3
                jge     short loc_1BD84
                mov     ax, ds:word_1D930
                dec     ax
                cmp     ax, ds:word_1D932
                jle     short loc_1BD84
                inc     ds:word_1D932
                jmp     short loc_1BD84
; ---------------------------------------------------------------------------

loc_1BDD7:                              ; CODE XREF: sub_1BD04+60j
                mov     ax, ds:word_1D932
                cwd
                mov     cx, 4
                idiv    cx
                or      dx, dx
                jle     short loc_1BD84
                dec     ds:word_1D932
                jmp     short loc_1BD84
; ---------------------------------------------------------------------------

loc_1BDEA:                              ; CODE XREF: sub_1BD04+55j
                                        ; sub_1BD04+72j
                mov     ax, 0FFFFh

loc_1BDED:                              ; CODE XREF: sub_1BD04+A0j
                mov     sp, bp
                pop     bp
                retn
sub_1BD04       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; Attributes: bp-based frame

sub_1BDF1       proc near               ; CODE XREF: sub_1B8C6+34p
                                        ; sub_1BACE+34p

var_2           = word ptr -2

                push    bp
                mov     bp, sp
                mov     ax, 2
                call    __chkstk
                call    sub_1BE26
                cmp     ds:word_1D930, 0
                jle     short loc_1BE22
                mov     [bp+var_2], 0
                jmp     short loc_1BE1A
; ---------------------------------------------------------------------------

loc_1BE0B:                              ; CODE XREF: sub_1BDF1+2Fj
                sub     ax, ax
                push    ax
                push    [bp+var_2]
                call    sub_1BC1C
                add     sp, 4
                inc     [bp+var_2]

loc_1BE1A:                              ; CODE XREF: sub_1BDF1+18j
                mov     ax, ds:word_1D930
                cmp     [bp+var_2], ax
                jl      short loc_1BE0B

loc_1BE22:                              ; CODE XREF: sub_1BDF1+11j
                mov     sp, bp
                pop     bp
                retn
sub_1BDF1       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; Attributes: bp-based frame

sub_1BE26       proc near               ; CODE XREF: sub_1BDF1+9p

var_2           = word ptr -2

                push    bp
                mov     bp, sp
                mov     ax, 2
                call    __chkstk
                mov     ax, offset asc_1E8D8 ; "+--------------------------------------"...
                push    ax
                mov     ax, 7
                push    ax
                mov     ax, 19h
                push    ax
                mov     ax, 5
                push    ax
                call    sub_1C180
                add     sp, 8
                mov     [bp+var_2], 6

loc_1BE4A:                              ; CODE XREF: sub_1BE26+40j
                mov     ax, offset asc_1E908 ; "¦                                      "...
                push    ax
                mov     ax, 7
                push    ax
                mov     ax, 19h
                push    ax
                push    [bp+var_2]
                call    sub_1C180
                add     sp, 8
                inc     [bp+var_2]
                cmp     [bp+var_2], 0Eh
                jl      short loc_1BE4A
                mov     ax, offset asc_1E938 ; "¦--------------------------------------"...
                push    ax
                mov     ax, 7
                push    ax
                mov     ax, 19h
                push    ax
                mov     ax, 0Eh
                push    ax
                call    sub_1C180
                add     sp, 8
                mov     ax, offset asc_1E908 ; "¦                                      "...
                push    ax
                mov     ax, 7
                push    ax
                mov     ax, 19h
                push    ax
                mov     ax, 0Fh
                push    ax
                call    sub_1C180
                add     sp, 8
                mov     ax, offset asc_1E908 ; "¦                                      "...
                push    ax
                mov     ax, 7
                push    ax
                mov     ax, 19h
                push    ax
                mov     ax, 10h
                push    ax
                call    sub_1C180
                add     sp, 8
                mov     ax, offset asc_1E968 ; "+--------------------------------------"...
                push    ax
                mov     ax, 7
                push    ax
                mov     ax, 19h
                push    ax
                mov     ax, 11h
                push    ax
                call    sub_1C180
                mov     sp, bp
                pop     bp
                retn
sub_1BE26       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; Attributes: bp-based frame

sub_1BEC1       proc near               ; CODE XREF: sub_1B8C6+2Ep
                                        ; sub_1BA38+50p sub_1BACE+2Ep

var_16          = byte ptr -16h
var_14          = word ptr -14h
var_12          = word ptr -12h
var_E           = byte ptr -0Eh
var_4           = word ptr -4
var_2           = word ptr -2
arg_0           = byte ptr  4

                push    bp
                mov     bp, sp
                mov     ax, 16h
                call    __chkstk
                push    si
                mov     ds:word_1D930, 0
                mov     al, [bp+arg_0]
                add     al, 41h ; 'A'
                mov     byte ptr ds:aC_img, al ; "C:*.IMG"
                mov     ax, 52h ; 'R'
                push    ax
                call    __dos_findfirst
                add     sp, 2
                mov     [bp+var_12], ax
                jmp     loc_1BF9A
; ---------------------------------------------------------------------------

loc_1BEE9:                              ; CODE XREF: sub_1BEC1+DFj
                cmp     ds:word_1D930, 20h ; ' '
                jl      short loc_1BEF3
                jmp     loc_1BFA3
; ---------------------------------------------------------------------------

loc_1BEF3:                              ; CODE XREF: sub_1BEC1+2Dj
                lea     ax, [bp+var_E]
                mov     [bp+var_14], ax
                mov     ax, 4Ah ; 'J'
                imul    ds:word_1D930
                add     ax, 82h ; 'é'
                mov     [bp+var_2], ax
                jmp     short loc_1BF1E
; ---------------------------------------------------------------------------

loc_1BF08:                              ; CODE XREF: sub_1BEC1+67j
                cmp     [bp+var_16], 2Eh ; '.'
                jz      short loc_1BF2A
                mov     bx, [bp+var_14]
                inc     [bp+var_14]
                mov     si, [bp+var_12]
                inc     [bp+var_12]
                mov     al, [si]
                mov     [bx], al

loc_1BF1E:                              ; CODE XREF: sub_1BEC1+45j
                mov     bx, [bp+var_12]
                mov     al, [bx]
                mov     [bp+var_16], al
                or      al, al
                jnz     short loc_1BF08

loc_1BF2A:                              ; CODE XREF: sub_1BEC1+4Bj
                mov     bx, [bp+var_14]
                mov     byte ptr [bx], 0
                lea     ax, [bp+var_E]
                push    ax
                push    word ptr [bp+arg_0]
                call    sub_1BB88
                add     sp, 4
                push    ax
                call    sub_1C268
                add     sp, 2
                mov     [bp+var_4], ax
                mov     ax, 42h ; 'B'
                push    ax
                mov     ax, offset word_1E2B2
                push    ax
                push    [bp+var_4]
                call    sub_1C28D
                add     sp, 6
                lea     ax, [bp+var_E]
                push    ax
                push    [bp+var_2]
                call    sub_1C714
                add     sp, 4
                mov     ax, offset byte_1E2B4
                push    ax
                mov     ax, [bp+var_2]
                add     ax, 0Ah
                push    ax
                call    sub_1C714
                add     sp, 4
                mov     ax, offset byte_1E2D4
                push    ax
                mov     ax, [bp+var_2]
                add     ax, 2Ah ; '*'
                push    ax
                call    sub_1C714
                add     sp, 4
                push    [bp+var_4]
                call    sub_1C27F
                add     sp, 2
                call    sub_1C2FA
                mov     [bp+var_12], ax
                inc     ds:word_1D930

loc_1BF9A:                              ; CODE XREF: sub_1BEC1+25j
                cmp     [bp+var_12], 0
                jz      short loc_1BFA3
                jmp     loc_1BEE9
; ---------------------------------------------------------------------------

loc_1BFA3:                              ; CODE XREF: sub_1BEC1+2Fj
                                        ; sub_1BEC1+DDj
                pop     si
                mov     sp, bp
                pop     bp
                retn
sub_1BEC1       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; Attributes: bp-based frame

sub_1BFA8       proc near               ; CODE XREF: sub_1B832+1Ep
                                        ; sub_1BA38+18p

var_6           = byte ptr -6
var_4           = word ptr -4
var_2           = word ptr -2
arg_0           = word ptr  4

                push    bp
                mov     bp, sp
                mov     ax, 6
                call    __chkstk
                mov     [bp+var_4], 0
                call    sub_1C317
                mov     [bp+var_2], ax
                jmp     short loc_1C00E
; ---------------------------------------------------------------------------

loc_1BFBE:                              ; CODE XREF: sub_1BFA8+6Cj
                mov     ax, [bp+arg_0]
                dec     [bp+arg_0]
                or      ax, ax
                jz      short loc_1C016
                jmp     short loc_1BFD3
; ---------------------------------------------------------------------------

loc_1BFCA:                              ; CODE XREF: sub_1BFA8+35j
                cmp     [bp+var_6], 3Ah ; ':'
                jz      short loc_1BFDF
                inc     [bp+var_2]

loc_1BFD3:                              ; CODE XREF: sub_1BFA8+20j
                mov     bx, [bp+var_2]
                mov     al, [bx]
                mov     [bp+var_6], al
                or      al, al
                jnz     short loc_1BFCA

loc_1BFDF:                              ; CODE XREF: sub_1BFA8+26j
                mov     bx, [bp+var_2]
                cmp     byte ptr [bx], 0
                jz      short loc_1C00E
                inc     [bp+var_2]
                mov     ax, [bp+var_2]
                mov     [bp+var_4], ax
                jmp     short loc_1C002
; ---------------------------------------------------------------------------

loc_1BFF2:                              ; CODE XREF: sub_1BFA8+64j
                mov     al, [bp+var_6]
                cbw
                mov     bx, ax
                test    byte ptr ds:asc_1EC89[bx], 7 ; "         (((((                  H"
                jz      short loc_1C00E
                inc     [bp+var_2]

loc_1C002:                              ; CODE XREF: sub_1BFA8+48j
                mov     bx, [bp+var_2]
                mov     al, [bx]
                mov     [bp+var_6], al
                or      al, al
                jnz     short loc_1BFF2

loc_1C00E:                              ; CODE XREF: sub_1BFA8+14j
                                        ; sub_1BFA8+3Dj sub_1BFA8+55j
                mov     bx, [bp+var_2]
                cmp     byte ptr [bx], 0
                jnz     short loc_1BFBE

loc_1C016:                              ; CODE XREF: sub_1BFA8+1Ej
                mov     bx, [bp+var_2]
                mov     byte ptr [bx], 0
                mov     ax, [bp+var_4]
                mov     sp, bp
                pop     bp
                retn
sub_1BFA8       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; Attributes: bp-based frame

sub_1C023       proc near               ; CODE XREF: sub_1C067+Cp seg001:C086p

var_2           = word ptr -2
arg_0           = word ptr  4

                push    bp
                mov     bp, sp
                mov     ax, 2
                call    __chkstk
                call    sub_1C317
                mov     [bp+var_2], ax
                jmp     short loc_1C055
; ---------------------------------------------------------------------------

loc_1C034:                              ; CODE XREF: sub_1C023+3Bj
                mov     bx, [bp+var_2]
                cmp     byte ptr [bx], 2Fh ; '/'
                jnz     short loc_1C055
                mov     ax, 2
                push    ax
                mov     ax, bx
                inc     ax
                push    ax
                push    [bp+arg_0]
                call    _strnicmp
                add     sp, 6
                or      ax, ax
                jnz     short loc_1C055
                sub     ax, ax
                jmp     short loc_1C063
; ---------------------------------------------------------------------------

loc_1C055:                              ; CODE XREF: sub_1C023+Fj
                                        ; sub_1C023+17j sub_1C023+2Cj
                mov     bx, [bp+var_2]
                inc     [bp+var_2]
                cmp     byte ptr [bx], 0
                jnz     short loc_1C034
                mov     ax, 0FFFFh

loc_1C063:                              ; CODE XREF: sub_1C023+30j
                mov     sp, bp
                pop     bp
                retn
sub_1C023       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; Attributes: bp-based frame

sub_1C067       proc near               ; CODE XREF: GetEMS+3Ep
                push    bp
                mov     bp, sp
                xor     ax, ax
                call    __chkstk
                mov     ax, offset aDm  ; "DM"
                push    ax
                call    sub_1C023
                mov     sp, bp
                pop     bp
                retn
sub_1C067       endp

; ---------------------------------------------------------------------------
                push    bp
                mov     bp, sp
                xor     ax, ax
                call    __chkstk
                mov     ax, offset aCr  ; "CR"
                push    ax
                call    sub_1C023
                mov     sp, bp
                pop     bp
                retn

; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; Attributes: bp-based frame

sub_1C08D       proc near               ; CODE XREF: sub_1B5EE+Cp

var_50          = byte ptr -50h

                push    bp
                mov     bp, sp
                mov     ax, 50h ; 'P'
                call    __chkstk
                call    sub_1C23E
                mov     ax, 0A04h
                push    ax
                mov     ax, 48h ; 'H'
                push    ax
                mov     ax, 8
                push    ax
                mov     ax, 19h
                push    ax
                mov     ax, 5
                push    ax
                call    sub_1C1D7
                add     sp, 0Ah
                mov     ax, offset asc_1E8D8 ; "+--------------------------------------"...
                push    ax
                mov     ax, 7
                push    ax
                mov     ax, 19h
                push    ax
                mov     ax, 5
                push    ax
                call    sub_1C180
                add     sp, 8
                mov     ax, offset asc_1E908 ; "¦                                      "...
                push    ax
                mov     ax, 7
                push    ax
                mov     ax, 19h
                push    ax
                mov     ax, 6
                push    ax
                call    sub_1C180
                add     sp, 8
                mov     ax, offset asc_1E968 ; "+--------------------------------------"...
                push    ax
                mov     ax, 7
                push    ax
                mov     ax, 19h
                push    ax
                mov     ax, 7
                push    ax
                call    sub_1C180
                add     sp, 8
                mov     ax, 48h ; 'H'
                push    ax
                mov     ax, offset aLoadingImageS_ ; "Loading Image %s ..."
                push    ax
                lea     ax, [bp+var_50]
                push    ax
                call    _printf
                add     sp, 6
                lea     ax, [bp+var_50]
                push    ax
                mov     ax, 7
                push    ax
                mov     ax, 1Bh
                push    ax
                mov     ax, 6
                push    ax
                call    sub_1C180
                mov     sp, bp
                pop     bp
                retn
sub_1C08D       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; Attributes: bp-based frame

sub_1C11E       proc near               ; CODE XREF: sub_1B5EE+C4p
                push    bp
                mov     bp, sp
                xor     ax, ax
                call    __chkstk
                mov     ax, 0A04h
                push    ax
                mov     ax, 48h ; 'H'
                push    ax
                mov     ax, 8
                push    ax
                mov     ax, 19h
                push    ax
                mov     ax, 5
                push    ax
                call    sub_1C208
                add     sp, 0Ah
                call    sub_1C254
                mov     sp, bp
                pop     bp
                retn
sub_1C11E       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; Attributes: bp-based frame

sub_1C147       proc near               ; CODE XREF: sub_1B8C6+92p
                                        ; sub_1B8C6+DCp sub_1B8C6+FEp
                                        ; sub_1BACE+4Ap

var_30          = byte ptr -30h
arg_0           = word ptr  4

                push    bp
                mov     bp, sp
                mov     ax, 30h ; '0'
                call    __chkstk
                call    Beep2
                push    [bp+arg_0]
                mov     ax, offset aSEnterToContin ; "%s - [Enter] To Continue"
                push    ax
                lea     ax, [bp+var_30]
                push    ax
                call    _printf
                add     sp, 6
                lea     ax, [bp+var_30]
                push    ax
                mov     ax, 10h
                push    ax
                call    sub_1BBF6
                add     sp, 4
                call    sub_1C396
                mov     ax, 10h
                push    ax
                call    sub_1BCE6
                mov     sp, bp
                pop     bp
                retn
sub_1C147       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; Attributes: bp-based frame

sub_1C180       proc near               ; CODE XREF: sub_1BBAF+2Bp
                                        ; sub_1BBAF+40p sub_1BBF6+1Fp
                                        ; sub_1BC1C+58p sub_1BC7B+22p
                                        ; sub_1BC7B+3Ep sub_1BC7B+64p
                                        ; sub_1BCE6+17p sub_1BE26+19p
                                        ; sub_1BE26+33p sub_1BE26+52p
                                        ; sub_1BE26+68p sub_1BE26+7Ep
                                        ; sub_1BE26+94p sub_1C08D+36p
                                        ; sub_1C08D+4Cp sub_1C08D+62p
                                        ; sub_1C08D+8Ap

arg_0           = byte ptr  4
arg_2           = byte ptr  6
arg_4           = byte ptr  8
arg_6           = word ptr  0Ah

                push    bp
                mov     bp, sp
                push    si
                mov     si, [bp+arg_6]
                mov     dh, [bp+arg_0]
                mov     dl, [bp+arg_2]
                cmp     byte ptr [si], 0
                jz      short loc_1C1AC

loc_1C192:                              ; CODE XREF: sub_1C180+2Aj
                mov     bh, 0
                mov     ah, 2
                int     10h             ; - VIDEO - SET CURSOR POSITION
                                        ; DH,DL = row, column (0,0 = upper left)
                                        ; BH = page number
                mov     bl, [bp+arg_4]
                mov     al, [si]
                mov     cx, 1
                mov     ah, 9
                int     10h             ; - VIDEO - WRITE ATTRIBUTES/CHARACTERS AT CURSOR POSITION
                                        ; AL = character, BH = display page
                                        ; BL = attributes of character (alpha modes) or color (graphics modes)
                                        ; CX = number of times to write character
                inc     dl
                inc     si
                cmp     byte ptr [si], 0
                jnz     short loc_1C192

loc_1C1AC:                              ; CODE XREF: sub_1C180+10j
                pop     si
                pop     bp
                retn
sub_1C180       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1C1AF       proc near               ; CODE XREF: sub_1BD04+2Ep
                                        ; sub_1C396+9p
                mov     ah, 0
                int     16h             ; KEYBOARD - READ CHAR FROM BUFFER, WAIT IF EMPTY
                                        ; Return: AH = scan code, AL = character
                retn
sub_1C1AF       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; Attributes: bp-based frame

sub_1C1B4       proc near               ; CODE XREF: sub_1C3CA+1Fp
                                        ; sub_1C3CA+4Ap sub_1C3CA+64p
                                        ; sub_1C3CA+A3p sub_1C3CA+C5p

arg_0           = byte ptr  4
arg_2           = byte ptr  6
arg_4           = byte ptr  8

                push    bp
                mov     bp, sp
                push    bx
                push    cx
                push    dx
                mov     dh, [bp+arg_0]
                mov     dl, [bp+arg_2]
                mov     bh, 0
                mov     ah, 2
                int     10h             ; - VIDEO - SET CURSOR POSITION
                                        ; DH,DL = row, column (0,0 = upper left)
                                        ; BH = page number
                mov     al, [bp+arg_4]
                mov     bl, 7
                mov     cx, 1
                mov     ah, 9
                int     10h             ; - VIDEO - WRITE ATTRIBUTES/CHARACTERS AT CURSOR POSITION
                                        ; AL = character, BH = display page
                                        ; BL = attributes of character (alpha modes) or color (graphics modes)
                                        ; CX = number of times to write character
                pop     dx
                pop     cx
                pop     bx
                pop     bp
                retn
sub_1C1B4       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; Attributes: bp-based frame

sub_1C1D7       proc near               ; CODE XREF: sub_1B8C6+25p
                                        ; sub_1BACE+25p sub_1C08D+20p

arg_0           = byte ptr  4
arg_2           = byte ptr  6
arg_4           = byte ptr  8
arg_6           = byte ptr  0Ah
arg_8           = word ptr  0Ch

                push    bp
                mov     bp, sp
                push    bx
                push    dx
                push    di
                push    es
                push    ds
                pop     es
                assume es:nothing
                mov     dh, [bp+arg_0]
                mov     di, [bp+arg_8]
                mov     bh, 0

loc_1C1E8:                              ; CODE XREF: sub_1C1D7+29j
                mov     dl, [bp+arg_2]

loc_1C1EB:                              ; CODE XREF: sub_1C1D7+22j
                mov     ah, 2
                int     10h             ; - VIDEO - SET CURSOR POSITION
                                        ; DH,DL = row, column (0,0 = upper left)
                                        ; BH = page number
                mov     ah, 8
                int     10h             ; - VIDEO - READ ATTRIBUTES/CHARACTER AT CURSOR POSITION
                                        ; BH = display page
                                        ; Return: AL = character
                                        ; AH = attribute of character (alpha modes)
                stosw
                inc     dl
                cmp     [bp+arg_6], dl
                ja      short loc_1C1EB
                inc     dh
                cmp     [bp+arg_4], dh
                jge     short loc_1C1E8
                pop     es
                assume es:nothing
                pop     di
                pop     dx
                pop     bx
                pop     bp
                retn
sub_1C1D7       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; Attributes: bp-based frame

sub_1C208       proc near               ; CODE XREF: sub_1B8C6+154p
                                        ; sub_1BACE+8Fp sub_1C11E+1Cp

arg_0           = byte ptr  4
arg_2           = byte ptr  6
arg_4           = byte ptr  8
arg_6           = byte ptr  0Ah
arg_8           = word ptr  0Ch

                push    bp
                mov     bp, sp
                push    bx
                push    cx
                push    dx
                push    si
                mov     dh, [bp+arg_0]
                mov     si, [bp+arg_8]
                mov     bh, 0
                mov     cx, 1

loc_1C21A:                              ; CODE XREF: sub_1C208+2Ej
                mov     dl, [bp+arg_2]

loc_1C21D:                              ; CODE XREF: sub_1C208+27j
                mov     bh, 0
                mov     ah, 2
                int     10h             ; - VIDEO - SET CURSOR POSITION
                                        ; DH,DL = row, column (0,0 = upper left)
                                        ; BH = page number
                lodsw
                mov     bl, ah
                mov     ah, 9
                int     10h             ; - VIDEO - WRITE ATTRIBUTES/CHARACTERS AT CURSOR POSITION
                                        ; AL = character, BH = display page
                                        ; BL = attributes of character (alpha modes) or color (graphics modes)
                                        ; CX = number of times to write character
                inc     dl
                cmp     [bp+arg_6], dl
                ja      short loc_1C21D
                inc     dh
                cmp     [bp+arg_4], dh
                jge     short loc_1C21A
                pop     si
                pop     dx
                pop     cx
                pop     bx
                pop     bp
                retn
sub_1C208       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1C23E       proc near               ; CODE XREF: sub_1B8C6+Ep sub_1BACE+Ep
                                        ; sub_1C08D+9p
                push    bx
                push    cx
                push    dx
                mov     bh, 0
                mov     ah, 3
                int     10h             ; - VIDEO - READ CURSOR POSITION
                                        ; BH = page number
                                        ; Return: DH,DL = row,column, CH = cursor start line, CL = cursor end line
                mov     cs:word_1C252, dx
                mov     ax, dx
                pop     dx
                pop     cx
                pop     bx
                retn
sub_1C23E       endp

; ---------------------------------------------------------------------------
word_1C252      dw 0                    ; DATA XREF: sub_1C23E+9w sub_1C254+6r
                                        ; sub_1C254+Dr

; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1C254       proc near               ; CODE XREF: sub_1B8C6+15Ap
                                        ; sub_1BACE+95p sub_1C11E+22p
                push    bx
                push    dx
                mov     bh, 0
                mov     ah, 2
                mov     dx, cs:word_1C252
                int     10h             ; - VIDEO - SET CURSOR POSITION
                                        ; DH,DL = row, column (0,0 = upper left)
                                        ; BH = page number
                mov     ax, cs:word_1C252
                pop     dx
                pop     bx
                retn
sub_1C254       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; Attributes: bp-based frame

sub_1C268       proc near               ; CODE XREF: sub_1B832+3Cp
                                        ; sub_1B8C6+C4p sub_1BA38+33p
                                        ; sub_1BACE+72p sub_1BEC1+7Dp

arg_0           = word ptr  4

                push    bp
                mov     bp, sp
                push    cx
                push    dx
                mov     ah, 3Dh ; '='
                xor     al, al
                mov     dx, [bp+arg_0]
                int     21h             ; DOS - 2+ - OPEN DISK FILE WITH HANDLE
                                        ; DS:DX -> ASCIZ filename
                                        ; AL = access mode
                                        ; 0 - read
                jnb     short loc_1C27B
                mov     ax, 0FFFFh

loc_1C27B:                              ; CODE XREF: sub_1C268+Ej
                pop     dx
                pop     cx
                pop     bp
                retn
sub_1C268       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; Attributes: bp-based frame

sub_1C27F       proc near               ; CODE XREF: sub_1B8C6+D2p
                                        ; sub_1BEC1+C9p

arg_0           = word ptr  4

                push    bp
                mov     bp, sp
                push    bx
                mov     ah, 3Eh ; '>'
                mov     bx, [bp+arg_0]
                int     21h             ; DOS - 2+ - CLOSE A FILE WITH HANDLE
                                        ; BX = file handle
                pop     bx
                pop     bp
                retn
sub_1C27F       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; Attributes: bp-based frame

sub_1C28D       proc near               ; CODE XREF: sub_1BEC1+91p

arg_0           = word ptr  4
arg_2           = word ptr  6
arg_4           = word ptr  8

                push    bp
                mov     bp, sp
                push    bx
                push    cx
                push    dx
                mov     ah, 3Fh ; '?'
                mov     bx, [bp+arg_0]
                mov     cx, [bp+arg_4]
                mov     dx, [bp+arg_2]
                int     21h             ; DOS - 2+ - READ FROM FILE WITH HANDLE
                                        ; BX = file handle, CX = number of bytes to read
                                        ; DS:DX -> buffer
                pop     dx
                pop     cx
                pop     bx
                pop     bp
                retn
sub_1C28D       endp

; ---------------------------------------------------------------------------
                push    bp
                mov     bp, sp
                push    bx
                push    cx
                push    dx
                mov     ah, 40h ; '@'
                mov     bx, [bp+4]
                mov     cx, [bp+8]
                mov     dx, [bp+6]
                int     21h             ; DOS - 2+ - WRITE TO FILE WITH HANDLE
                                        ; BX = file handle, CX = number of bytes to write, DS:DX -> buffer
                pop     dx
                pop     cx
                pop     bx
                pop     bp
                retn

; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; Attributes: bp-based frame

sub_1C2BD       proc near               ; CODE XREF: sub_1B832+55p
                                        ; sub_1B8C6+ECp

arg_0           = word ptr  4

                push    bp
                mov     bp, sp
                push    cx
                push    dx
                mov     ah, 3Ch ; '<'
                xor     cx, cx
                mov     dx, [bp+arg_0]
                int     21h             ; DOS - 2+ - CREATE A FILE WITH HANDLE (CREAT)
                                        ; CX = attributes for file
                                        ; DS:DX -> ASCIZ filename (may include drive and path)
                jnb     short loc_1C2D0
                mov     ax, 0FFFFh

loc_1C2D0:                              ; CODE XREF: sub_1C2BD+Ej
                pop     dx
                pop     cx
                pop     bp
                retn
sub_1C2BD       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; Attributes: bp-based frame

__dos_findfirst proc near               ; CODE XREF: sub_1BEC1+1Cp

arg_0           = word ptr  4

                push    bp              ; the name is a guess
                mov     bp, sp
                mov     dx, offset DiskXferBuff
                mov     ah, 1Ah
                int     21h             ; DOS - SET DISK TRANSFER AREA ADDRESS
                                        ; DS:DX -> disk transfer buffer
                mov     dx, [bp+arg_0]
                xor     cx, cx
                mov     ah, 4Eh
                int     21h             ; DOS - 2+ - FIND FIRST ASCIZ (FINDFIRST)
                                        ; CX = search attributes
                                        ; DS:DX -> ASCIZ filespec
                                        ; (drive, path, and wildcards allowed)
                mov     ah, 0
                or      ax, ax
                jz      short loc_1C2F2
                xor     ax, ax
                jmp     short loc_1C2F8
; ---------------------------------------------------------------------------
                align 2

loc_1C2F2:                              ; CODE XREF: __dos_findfirst+17j
                mov     ax, offset DiskXferBuff
                add     ax, 1Eh

loc_1C2F8:                              ; CODE XREF: __dos_findfirst+1Bj
                pop     bp
                retn
__dos_findfirst endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1C2FA       proc near               ; CODE XREF: sub_1BEC1+CFp
                mov     dx, offset DiskXferBuff
                mov     ah, 1Ah
                int     21h             ; DOS - SET DISK TRANSFER AREA ADDRESS
                                        ; DS:DX -> disk transfer buffer
                mov     ah, 4Fh
                int     21h             ; DOS - 2+ - FIND NEXT ASCIZ (FINDNEXT)
                                        ; [DTA] = data block from
                                        ; last AH = 4Eh/4Fh call
                mov     ah, 0
                or      ax, ax
                jz      short loc_1C310
                xor     ax, ax
                jmp     short locret_1C316
; ---------------------------------------------------------------------------
                align 2

loc_1C310:                              ; CODE XREF: sub_1C2FA+Fj
                mov     ax, offset DiskXferBuff
                add     ax, 1Eh

locret_1C316:                           ; CODE XREF: sub_1C2FA+13j
                retn
sub_1C2FA       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1C317       proc near               ; CODE XREF: sub_1BFA8+Ep sub_1C023+9p
                push    ds
                push    es
                push    si
                push    di
                push    cx
                push    ds
                pop     es
                assume es:nothing
                mov     ax, cs
                sub     ax, 10h
                mov     ds, ax
                assume ds:PSP
                mov     si, offset TailByte
                mov     di, offset unk_1E888
                mov     cx, 50h ; 'P'
                cld
                rep movsb
                mov     ax, offset unk_1E888
                pop     cx
                pop     di
                pop     si
                pop     es
                assume es:nothing
                pop     ds
                assume ds:nothing
                retn
sub_1C317       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


Beep2           proc near               ; CODE XREF: sub_1C147+9p
                push    ax
                push    bx
                push    cx
                push    dx
                push    si
                cli
                mov     al, 0B6h ; '¦'  ; timer 2 16 bit mode 3
                out     43h, al         ; Timer 8253-5 (AT: 8254.2).
                mov     dx, 400h
                mov     si, dx
                mov     ax, dx
                shr     si, 1
                shr     si, 1
                out     42h, al         ; Timer 8253-5 (AT: 8254.2).
                xchg    ah, al
                out     42h, al         ; Timer 8253-5 (AT: 8254.2).
                xchg    al, ah
                in      al, 61h         ; PC/XT PPI port B bits:
                                        ; 0: Tmr 2 gate --- OR 03H=spkr ON
                                        ; 1: Tmr 2 data -+  AND 0fcH=spkr OFF
                                        ; 3: 1=read high switches
                                        ; 4: 0=enable RAM parity checking
                                        ; 5: 0=enable I/O channel check
                                        ; 6: 0=hold keyboard clock low
                                        ; 7: 0=enable kbrd
                mov     bl, al
                or      al, 3
                out     61h, al         ; PC/XT PPI port B bits:
                                        ; 0: Tmr 2 gate --- OR 03H=spkr ON
                                        ; 1: Tmr 2 data -+  AND 0fcH=spkr OFF
                                        ; 3: 1=read high switches
                                        ; 4: 0=enable RAM parity checking
                                        ; 5: 0=enable I/O channel check
                                        ; 6: 0=hold keyboard clock low
                                        ; 7: 0=enable kbrd
                mov     cx, 2000h

loc_1C362:                              ; CODE XREF: Beep2+46j
                in      al, 62h         ; PC/XT PPI port C. Bits:
                                        ; 0-3: values of DIP switches
                                        ; 5: 1=Timer 2 channel out
                                        ; 6: 1=I/O channel check
                                        ; 7: 1=RAM parity check error occurred.
                and     al, 20h
                cmp     al, bh
                mov     bh, al
                jz      short loc_1C380
                or      al, al
                mov     ax, dx
                jz      short loc_1C376
                sub     ax, si
                jmp     short loc_1C378
; ---------------------------------------------------------------------------

loc_1C376:                              ; CODE XREF: Beep2+36j
                add     ax, si

loc_1C378:                              ; CODE XREF: Beep2+3Aj
                out     42h, al         ; Timer 8253-5 (AT: 8254.2).
                xchg    ah, al
                out     42h, al         ; Timer 8253-5 (AT: 8254.2).
                xchg    al, ah

loc_1C380:                              ; CODE XREF: Beep2+30j
                loop    loc_1C362
                mov     al, bl
                and     al, 0FCh
                out     61h, al         ; PC/XT PPI port B bits:
                                        ; 0: Tmr 2 gate --- OR 03H=spkr ON
                                        ; 1: Tmr 2 data -+  AND 0fcH=spkr OFF
                                        ; 3: 1=read high switches
                                        ; 4: 0=enable RAM parity checking
                                        ; 5: 0=enable I/O channel check
                                        ; 6: 0=hold keyboard clock low
                                        ; 7: 0=enable kbrd
                mov     cx, 3E8h
                sti

loc_1C38C:                              ; CODE XREF: Beep2+54j
                mul     ax
                loop    loc_1C38C
                pop     si
                pop     dx
                pop     cx
                pop     bx
                pop     ax
                retn
Beep2           endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; Attributes: bp-based frame

sub_1C396       proc near               ; CODE XREF: sub_1C147+2Bp
                                        ; sub_1C3CA+50p

var_4           = word ptr -4
var_2           = word ptr -2

                push    bp
                mov     bp, sp
                mov     ax, 4
                call    __chkstk
                call    sub_1C1AF
                mov     [bp+var_4], ax
                cmp     byte ptr [bp+var_4], 0
                jz      short loc_1C3B2
                mov     al, byte ptr [bp+var_4]

loc_1C3AE:                              ; CODE XREF: sub_1C396+2Ej
                sub     ah, ah
                jmp     short loc_1C3C6
; ---------------------------------------------------------------------------

loc_1C3B2:                              ; CODE XREF: sub_1C396+13j
                mov     ax, [bp+var_4]
                sub     al, al
                mov     cl, 8
                shr     ax, cl
                mov     [bp+var_2], ax
                mov     bx, ax
                mov     al, ds:byte_1E998[bx]
                jmp     short loc_1C3AE
; ---------------------------------------------------------------------------

loc_1C3C6:                              ; CODE XREF: sub_1C396+1Aj
                mov     sp, bp
                pop     bp
                retn
sub_1C396       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; Attributes: bp-based frame

sub_1C3CA       proc near               ; CODE XREF: sub_1B8C6+55p
                                        ; sub_1B8C6+124p sub_1B8C6+13Ap

var_4           = word ptr -4
var_2           = word ptr -2
arg_0           = word ptr  4
arg_2           = word ptr  6
arg_4           = word ptr  8
arg_6           = word ptr  0Ah

                push    bp
                mov     bp, sp
                mov     ax, 4
                call    __chkstk
                push    si
                mov     [bp+var_2], 0
                jmp     short loc_1C3F2
; ---------------------------------------------------------------------------

loc_1C3DB:                              ; CODE XREF: sub_1C3CA+2Ej
                mov     ax, 20h ; ' '
                push    ax
                mov     ax, [bp+arg_2]
                add     ax, [bp+var_2]
                push    ax
                push    [bp+arg_0]
                call    sub_1C1B4
                add     sp, 6
                inc     [bp+var_2]

loc_1C3F2:                              ; CODE XREF: sub_1C3CA+Fj
                mov     ax, [bp+arg_6]
                cmp     [bp+var_2], ax
                jl      short loc_1C3DB
                or      ax, ax
                jg      short loc_1C401
                jmp     loc_1C4AD
; ---------------------------------------------------------------------------

loc_1C401:                              ; CODE XREF: sub_1C3CA+32j
                mov     [bp+var_2], 0

loc_1C406:                              ; CODE XREF: sub_1C3CA+D7j
                mov     ax, 0DBh ; '¦'
                push    ax
                mov     ax, [bp+arg_2]
                add     ax, [bp+var_2]
                push    ax
                push    [bp+arg_0]
                call    sub_1C1B4
                add     sp, 6
                call    sub_1C396
                mov     [bp+var_4], ax
                mov     ax, 20h ; ' '
                push    ax
                mov     ax, [bp+arg_2]
                add     ax, [bp+var_2]
                push    ax
                push    [bp+arg_0]
                call    sub_1C1B4
                add     sp, 6
                mov     ax, [bp+var_4]
                cmp     ax, 8
                jz      short loc_1C478
                cmp     ax, 0Dh
                jz      short loc_1C495
                cmp     ax, 1Bh
                jz      short loc_1C4B2
                mov     ax, [bp+arg_6]
                cmp     [bp+var_2], ax
                jge     short loc_1C495
                cmp     [bp+var_4], 80h ; 'Ç'
                jge     short loc_1C495
                mov     bx, [bp+var_2]
                mov     si, [bp+arg_4]
                mov     al, byte ptr [bp+var_4]
                mov     [bx+si], al
                push    [bp+var_4]
                mov     ax, [bp+arg_2]
                add     ax, [bp+var_2]
                push    ax
                push    [bp+arg_0]
                call    sub_1C1B4
                add     sp, 6
                inc     [bp+var_2]
                jmp     short loc_1C495
; ---------------------------------------------------------------------------

loc_1C478:                              ; CODE XREF: sub_1C3CA+70j
                cmp     [bp+var_2], 0
                jle     short loc_1C481
                dec     [bp+var_2]

loc_1C481:                              ; CODE XREF: sub_1C3CA+B2j
                mov     ax, 20h ; ' '
                push    ax
                mov     ax, [bp+arg_2]
                add     ax, [bp+var_2]
                push    ax
                push    [bp+arg_0]
                call    sub_1C1B4
                add     sp, 6

loc_1C495:                              ; CODE XREF: sub_1C3CA+75j
                                        ; sub_1C3CA+82j sub_1C3CA+89j
                                        ; sub_1C3CA+ACj sub_1C3CA+EDj
                cmp     [bp+var_4], 0Dh
                jz      short loc_1C4A4
                cmp     [bp+var_4], 1Bh
                jz      short loc_1C4A4
                jmp     loc_1C406
; ---------------------------------------------------------------------------

loc_1C4A4:                              ; CODE XREF: sub_1C3CA+CFj
                                        ; sub_1C3CA+D5j
                mov     bx, [bp+var_2]
                mov     si, [bp+arg_4]
                mov     byte ptr [bx+si], 0

loc_1C4AD:                              ; CODE XREF: sub_1C3CA+34j
                mov     ax, [bp+var_2]
                jmp     short loc_1C4B9
; ---------------------------------------------------------------------------

loc_1C4B2:                              ; CODE XREF: sub_1C3CA+7Aj
                mov     [bp+var_2], 0
                jmp     short loc_1C495
; ---------------------------------------------------------------------------

loc_1C4B9:                              ; CODE XREF: sub_1C3CA+E6j
                pop     si
                mov     sp, bp
                pop     bp
                retn
sub_1C3CA       endp

; ---------------------------------------------------------------------------
byte_1C4BE      db 0                    ; DATA XREF: sub_1C4D0+6w
                                        ; sub_1C4D0+1Ar sub_1C4D0+2Dr
                                        ; sub_1C4D0+3Ar
byte_1C4BF      db 0FFh                 ; DATA XREF: sub_1C4D0+Aw
                                        ; sub_1C4D0+5Ar seg001:C560w
OldInt13Off     dw 0                    ; DATA XREF: GetInt13+Bw
                                        ; RestoreInt13+3r
OldInt13Seg     dw 0                    ; DATA XREF: GetInt13+10w
                                        ; RestoreInt13+8r
byte_1C4C4      db 0                    ; DATA XREF: sub_1C4D0+10w
                                        ; sub_1C4D0+25w sub_1C4D0+45r
                                        ; sub_1C4D0+51r
; ---------------------------------------------------------------------------
                push    bp
                mov     bp, sp
                mov     al, [bp+4]
                call    sub_1C4D0
                pop     bp
                retn

; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1C4D0       proc near               ; CODE XREF: sub_1B276+Cp seg001:C4CBp
                push    ds
                push    bx
                push    cx
                push    dx
                push    cs
                pop     ds
                assume ds:seg001
                mov     cs:byte_1C4BE, al
                mov     cs:byte_1C4BF, 0FFh
                mov     cs:byte_1C4C4, 0
                mov     ah, 44h ; 'D'
                mov     al, 0Eh
                mov     bl, cs:byte_1C4BE
                inc     bl
                int     21h             ; DOS - 2+ - IOCTL -
                jb      short loc_1C4F9
                mov     cs:byte_1C4C4, al

loc_1C4F9:                              ; CODE XREF: sub_1C4D0+23j
                mov     ah, 44h ; 'D'
                mov     al, 0Fh
                mov     bl, cs:byte_1C4BE
                inc     bl
                int     21h             ; DOS - 2+ - IOCTL -
                cli
                call    GetInt13
                mov     al, cs:byte_1C4BE
                call    sub_1C581
                call    RestoreInt13
                sti
                cmp     cs:byte_1C4C4, 0
                jz      short loc_1C528
                mov     ah, 44h ; 'D'
                mov     al, 0Fh
                mov     bl, cs:byte_1C4C4
                int     21h             ; DOS - 2+ - IOCTL -

loc_1C528:                              ; CODE XREF: sub_1C4D0+4Bj
                xor     ah, ah
                mov     al, cs:byte_1C4BF
                cmp     al, 0FFh
                jnz     short loc_1C535
                mov     ax, 0FFFFh

loc_1C535:                              ; CODE XREF: sub_1C4D0+60j
                pop     dx
                pop     cx
                pop     bx
                pop     ds
                assume ds:nothing
                retn
sub_1C4D0       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


GetInt13        proc near               ; CODE XREF: sub_1C4D0+37p
                push    ax
                push    bx
                push    dx
                push    ds
                push    es
                mov     ah, 35h ; '5'
                mov     al, 13h
                int     21h             ; DOS - 2+ - GET INTERRUPT VECTOR
                                        ; AL = interrupt number
                                        ; Return: ES:BX = value of interrupt vector
                mov     cs:OldInt13Off, bx
                mov     cs:OldInt13Seg, es
                mov     dx, offset Int13Entry
                push    cs
                pop     ds
                assume ds:seg001
                mov     ah, 25h ; '%'
                mov     al, 13h
                int     21h             ; DOS - SET INTERRUPT VECTOR
                                        ; AL = interrupt number
                                        ; DS:DX = new vector to be used for specified interrupt
                pop     es
                pop     ds
                assume ds:nothing
                pop     dx
                pop     bx
                pop     ax
                retn
GetInt13        endp

; ---------------------------------------------------------------------------

Int13Entry:                             ; DATA XREF: GetInt13+15o
                mov     cs:byte_1C4BF, dl
                mov     ax, 0
                clc
                iret

; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


RestoreInt13    proc near               ; CODE XREF: sub_1C4D0+41p
                push    ax
                push    dx
                push    ds
                mov     dx, cs:OldInt13Off
                mov     ds, cs:OldInt13Seg
                mov     ah, 25h ; '%'
                mov     al, 13h
                int     21h             ; DOS - SET INTERRUPT VECTOR
                                        ; AL = interrupt number
                                        ; DS:DX = new vector to be used for specified interrupt
                pop     ds
                pop     dx
                pop     ax
                retn
RestoreInt13    endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1C581       proc near               ; CODE XREF: sub_1C4D0+3Ep
                push    ds
                push    cx
                push    si
                push    di
                push    bp
                mov     bx, seg seg002
                mov     ds, bx
                assume ds:seg002
                mov     bx, offset DiskXferBuf2
                mov     cx, 1
                mov     dx, 0
                int     25h             ; DOS - ABSOLUTE DISK READ (except DOS 4.0/COMPAQ DOS 3.31 >32M partitn)
                                        ; AL = drive number (0=A, 1=B, etc), DS:BX = Disk Transfer Address (buffer)
                                        ; CX = number of sectors to read, DX = first relative sector to read
                                        ; Return: CF set on error
                popf
                pop     bp
                pop     di
                pop     si
                pop     cx
                pop     ds
                assume ds:nothing
                retn
sub_1C581       endp ; sp =  2

; [00000016 BYTES: COLLAPSED FUNCTION __chkstk. PRESS KEYPAD "+" TO EXPAND]

; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; Attributes: bp-based frame

_close          proc near               ; CODE XREF: sub_1B832+4Ap

arg_0           = word ptr  4

                push    bp
                mov     bp, sp
                mov     bx, [bp+arg_0]
                mov     ah, 3Eh
                int     21h             ; DOS - 2+ - CLOSE A FILE WITH HANDLE
                                        ; BX = file handle
                jb      short loc_1C5C4
                mov     ds:IOCTLFlags[bx], 0

loc_1C5C4:                              ; CODE XREF: _close+Aj
                jmp     __dosret0
_close          endp

                assume ss:seg003, ds:PSP

; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


                public start
start           proc near
                mov     ah, 30h
                int     21h             ; DOS - GET DOS VERSION
                                        ; Return: AL = major version number (00h for DOS 1.x)
                cmp     al, 2
                jnb     short DosVerOK
                mov     ax, 4
                push    ax
                call    __NMSG_TEXT
                xchg    ax, dx
                mov     ah, 9
                int     21h             ; DOS - PRINT STRING
                                        ; DS:DX -> string terminated by "$"
                int     20h             ; DOS - PROGRAM TERMINATION
                                        ; returns to DOS--identical to INT 21/AH=00h
; ---------------------------------------------------------------------------

DosVerOK:                               ; CODE XREF: start+6j
                mov     di, seg seg002
                mov     si, FreeSeg
                sub     si, di
                cmp     si, 1000h
                jb      short loc_1C5EF
                mov     si, 1000h

loc_1C5EF:                              ; CODE XREF: start+23j
                cli
                mov     ss, di
                assume ss:seg002
                add     sp, offset TopOfStack
                sti
                jnb     short loc_1C604
                xor     ax, ax
                push    ax
                call    __NMSG_WRITE
                mov     ax, 4CFFh
                int     21h             ; DOS - 2+ - QUIT WITH EXIT CODE (EXIT)
                                        ; AL = exit code
; ---------------------------------------------------------------------------

loc_1C604:                              ; CODE XREF: start+30j
                and     sp, 0FFFEh
                mov     ss:word_1EC36, sp
                mov     ss:word_1EC34, sp
                mov     ax, si
                mov     cl, 4
                shl     ax, cl
                dec     ax
                mov     ss:word_1EC32, ax
                add     si, di
                mov     FreeSeg, si
                mov     bx, es
                sub     bx, si
                neg     bx
                mov     ah, 4Ah
                int     21h             ; DOS - 2+ - ADJUST MEMORY BLOCK SIZE (SETBLOCK)
                                        ; ES = segment address of block to change
                                        ; BX = new size in paragraphs
                mov     ss:PSP_SEG, ds
                push    ss
                pop     es
                assume es:seg002
                cld
                mov     di, offset word_1F046 ; start of stack
                mov     cx, 1B80h       ; end of stack
                sub     cx, di
                xor     ax, ax
                rep stosb               ; clear stack
                push    ss
                pop     ds
                assume ds:seg002
                call    __cinit
                push    ss
                pop     ds
                call    __setargv
                call    __setenvp
                xor     bp, bp
                push    envp
                push    argv
                push    argc
                call    _Main
                push    ax
                call    _exit

__cintDIV:                              ; DATA XREF: __cinit+30o
                mov     ax, 3

__amsg_exit:                            ; CODE XREF: __chkstk+13j
                                        ; __myalloc+3Fj sub_1D730+3j
                push    ax
                call    __NMSG_WRITE
                mov     ax, 0FFh
                push    ax
                call    C_Exit
start           endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; Attributes: bp-based frame

_printf         proc near               ; CODE XREF: sub_1BB88+1Ap
                                        ; sub_1C08D+74p sub_1C147+17p

arg_0           = word ptr  4
arg_2           = word ptr  6
arg_4           = byte ptr  8

                push    bp
                mov     bp, sp
                sub     sp, 0Ch
                push    di
                push    si
                mov     di, bp
                sub     di, 0Ah
                mov     byte ptr [di+6], 42h ; 'B'
                mov     ax, [bp+arg_0]
                mov     [di+4], ax
                mov     [di], ax
                mov     word ptr [di+2], 7FFFh
                lea     ax, [bp+arg_4]
                push    ax
                push    [bp+arg_2]
                push    di
                call    __output
                add     sp, 6
                mov     si, ax
                dec     word ptr [di+2]
                js      short loc_1C6B0
                sub     al, al
                mov     bx, [di]
                inc     word ptr [di]
                mov     [bx], al
                sub     ah, ah
                jmp     short loc_1C6BA
; ---------------------------------------------------------------------------

loc_1C6B0:                              ; CODE XREF: _printf+31j
                push    di
                sub     ax, ax
                push    ax
                call    __flsbuf
                add     sp, 4

loc_1C6BA:                              ; CODE XREF: _printf+3Dj
                mov     ax, si
                pop     si
                pop     di
                mov     sp, bp
                pop     bp
                retn
_printf         endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; Attributes: bp-based frame

sub_1C6C2       proc near               ; CODE XREF: sub_1BA38+73p

arg_0           = word ptr  4
arg_2           = word ptr  6

                push    bp
                mov     bp, sp
                push    di
                push    si
                mov     si, [bp+arg_0]
                mov     di, [bp+arg_2]
                push    ds
                pop     es
                mov     bh, 'A'
                mov     bl, 'Z'
                mov     ch, ' '

loc_1C6D5:                              ; CODE XREF: sub_1C6C2+39j
                mov     ah, [si]
                mov     al, [di]
                or      ah, ah
                jz      short loc_1C6FD
                or      al, al
                jz      short loc_1C6FD
                inc     si
                inc     di
                cmp     ah, bh
                jb      short loc_1C6ED
                cmp     ah, bl
                ja      short loc_1C6ED
                add     ah, ch

loc_1C6ED:                              ; CODE XREF: sub_1C6C2+23j
                                        ; sub_1C6C2+27j
                cmp     al, bh
                jb      short loc_1C6F7
                cmp     al, bl
                ja      short loc_1C6F7
                add     al, ch

loc_1C6F7:                              ; CODE XREF: sub_1C6C2+2Dj
                                        ; sub_1C6C2+31j
                cmp     ah, al
                jnz     short loc_1C703
                jmp     short loc_1C6D5
; ---------------------------------------------------------------------------

loc_1C6FD:                              ; CODE XREF: sub_1C6C2+19j
                                        ; sub_1C6C2+1Dj
                xor     cx, cx
                cmp     ah, al
                jz      short loc_1C70C

loc_1C703:                              ; CODE XREF: sub_1C6C2+37j
                mov     cx, 0
                jb      short loc_1C70A
                dec     cx
                dec     cx

loc_1C70A:                              ; CODE XREF: sub_1C6C2+44j
                not     cx

loc_1C70C:                              ; CODE XREF: sub_1C6C2+3Fj
                mov     ax, cx
                pop     si
                pop     di
                mov     sp, bp
                pop     bp
                retn
sub_1C6C2       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; Attributes: bp-based frame

sub_1C714       proc near               ; CODE XREF: sub_1B832+69p
                                        ; sub_1B8C6+165p sub_1BA38+47p
                                        ; sub_1BACE+ADp sub_1BEC1+9Ep
                                        ; sub_1BEC1+AFp sub_1BEC1+C0p

arg_0           = word ptr  4
arg_2           = word ptr  6

                push    bp
                mov     bp, sp
                push    di
                push    si
                push    ds
                pop     es
                mov     di, [bp+arg_2]
                mov     si, di
                xor     ax, ax
                mov     cx, 0FFFFh
                repne scasb
                inc     cx
                neg     cx
                mov     di, [bp+arg_0]
                mov     dx, di
                rep movsb
                mov     ax, dx
                pop     si
                pop     di
                mov     sp, bp
                pop     bp
                retn
sub_1C714       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; Attributes: library function bp-based frame

_strnicmp       proc near               ; CODE XREF: sub_1C023+24p

arg_0           = word ptr  4
arg_2           = word ptr  6
arg_4           = word ptr  8

                push    bp
                mov     bp, sp
                push    di
                push    si
                mov     si, [bp+arg_0]
                mov     di, [bp+arg_2]
                push    ds
                pop     es
                mov     cx, [bp+arg_4]
                jcxz    short loc_1C788
                mov     bh, 41h ; 'A'
                mov     bl, 5Ah ; 'Z'
                mov     dh, 20h ; ' '

loc_1C751:                              ; CODE XREF: _strnicmp+3Ej
                mov     ah, [si]
                mov     al, [di]
                or      ah, ah
                jz      short loc_1C779
                or      al, al
                jz      short loc_1C779
                inc     si
                inc     di
                cmp     ah, bh
                jb      short loc_1C769
                cmp     ah, bl
                ja      short loc_1C769
                add     ah, dh

loc_1C769:                              ; CODE XREF: _strnicmp+28j
                                        ; _strnicmp+2Cj
                cmp     al, bh
                jb      short loc_1C773
                cmp     al, bl
                ja      short loc_1C773
                add     al, dh

loc_1C773:                              ; CODE XREF: _strnicmp+32j
                                        ; _strnicmp+36j
                cmp     ah, al
                jnz     short loc_1C77F
                loop    loc_1C751

loc_1C779:                              ; CODE XREF: _strnicmp+1Ej
                                        ; _strnicmp+22j
                xor     cx, cx
                cmp     ah, al
                jz      short loc_1C788

loc_1C77F:                              ; CODE XREF: _strnicmp+3Cj
                mov     cx, 0
                jb      short loc_1C786
                dec     cx
                dec     cx

loc_1C786:                              ; CODE XREF: _strnicmp+49j
                not     cx

loc_1C788:                              ; CODE XREF: _strnicmp+10j
                                        ; _strnicmp+44j
                mov     ax, cx
                pop     si
                pop     di
                mov     sp, bp
                pop     bp
                retn
_strnicmp       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; Attributes: bp-based frame

sub_1C790       proc near               ; CODE XREF: sub_1B8C6+ADp

arg_0           = word ptr  4

                push    bp
                mov     bp, sp
                push    si
                mov     si, [bp+arg_0]
                mov     dx, si
                mov     bh, 61h ; 'a'
                mov     bl, 7Ah ; 'z'
                mov     al, 20h ; ' '
                xor     ch, ch

loc_1C7A1:                              ; CODE XREF: sub_1C790+22j
                mov     cl, [si]
                jcxz    short loc_1C7B4
                cmp     cl, bh
                jb      short loc_1C7B1
                cmp     cl, bl
                ja      short loc_1C7B1
                sub     cl, al
                mov     [si], cl

loc_1C7B1:                              ; CODE XREF: sub_1C790+17j
                                        ; sub_1C790+1Bj
                inc     si
                jmp     short loc_1C7A1
; ---------------------------------------------------------------------------

loc_1C7B4:                              ; CODE XREF: sub_1C790+13j
                mov     ax, dx
                pop     si
                mov     sp, bp
                pop     bp
                retn
sub_1C790       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; Attributes: bp-based frame

__flsbuf        proc near               ; CODE XREF: _printf+43p sub_1D006+31p
                                        ; sub_1D04F+3Dp sub_1D0B4+40p

var_2           = word ptr -2
arg_0           = byte ptr  4
arg_2           = word ptr  6

                push    bp
                mov     bp, sp
                sub     sp, 4
                push    di
                push    si
                mov     si, [bp+arg_2]
                test    byte ptr [si+6], 83h
                jz      short loc_1C7D2
                test    byte ptr [si+6], 40h
                jz      short loc_1C7DC

loc_1C7D2:                              ; CODE XREF: __flsbuf+Fj __flsbuf+25j
                                        ; __flsbuf+11Dj
                or      byte ptr [si+6], 20h
                mov     ax, 0FFFFh
                jmp     loc_1C8E0
; ---------------------------------------------------------------------------

loc_1C7DC:                              ; CODE XREF: __flsbuf+15j
                test    byte ptr [si+6], 1
                jnz     short loc_1C7D2
                or      byte ptr [si+6], 2
                and     byte ptr [si+6], 0EFh
                sub     ax, ax
                mov     [si+2], ax
                mov     di, ax
                mov     [bp+var_2], di
                test    byte ptr [si+6], 8
                jnz     short loc_1C80D
                mov     al, [si+7]
                cbw
                mov     bx, ax
                shl     bx, 1
                add     bx, ax
                shl     bx, 1
                test    byte_1EE9E[bx], 1
                jz      short loc_1C84D

loc_1C80D:                              ; CODE XREF: __flsbuf+3Dj
                mov     di, [si]
                sub     di, [si+4]
                mov     ax, [si+4]
                inc     ax
                mov     [si], ax
                mov     al, [si+7]
                cbw
                mov     bx, ax
                shl     bx, 1
                add     bx, ax
                shl     bx, 1
                mov     ax, word_1EEA0[bx]
                dec     ax
                mov     [si+2], ax
                or      di, di
                jle     short loc_1C842
                push    di
                push    word ptr [si+4]
                mov     al, [si+7]
                cbw
                push    ax
                call    _lseek
                add     sp, 6
                mov     [bp+var_2], ax

loc_1C842:                              ; CODE XREF: __flsbuf+73j __flsbuf+DFj
                mov     bx, [si+4]
                mov     al, [bp+arg_0]
                mov     [bx], al
                jmp     loc_1C8D3
; ---------------------------------------------------------------------------

loc_1C84D:                              ; CODE XREF: __flsbuf+50j
                test    byte ptr [si+6], 4
                jnz     short loc_1C8BD
                cmp     si, 1516h
                jnz     short loc_1C89C
                mov     al, [si+7]
                cbw
                push    ax
                call    _isatty
                add     sp, 2
                or      ax, ax
                jnz     short loc_1C8B9
                inc     word_1EDFC
                mov     word ptr [si+4], 1780h
                mov     al, [si+7]
                cbw
                mov     bx, ax
                shl     bx, 1
                add     bx, ax
                shl     bx, 1
                mov     byte_1EE9E[bx], 1
                mov     word ptr [si], 1781h

loc_1C886:                              ; CODE XREF: __flsbuf+FCj
                cbw
                mov     bx, ax
                shl     bx, 1
                add     bx, ax
                shl     bx, 1
                mov     word_1EEA0[bx], 200h
                mov     word ptr [si+2], 1FFh
                jmp     short loc_1C842
; ---------------------------------------------------------------------------

loc_1C89C:                              ; CODE XREF: __flsbuf+9Cj
                mov     ax, 200h
                push    ax
                call    unknown_libname_2
                add     sp, 2
                mov     [si+4], ax
                or      ax, ax
                jz      short loc_1C8B9
                or      byte ptr [si+6], 8
                inc     ax
                mov     [si], ax
                mov     al, [si+7]
                jmp     short loc_1C886
; ---------------------------------------------------------------------------

loc_1C8B9:                              ; CODE XREF: __flsbuf+ABj __flsbuf+F0j
                or      byte ptr [si+6], 4

loc_1C8BD:                              ; CODE XREF: __flsbuf+96j
                mov     di, 1
                push    di
                lea     ax, [bp+arg_0]
                push    ax
                mov     al, [si+7]
                cbw
                push    ax
                call    _lseek
                add     sp, 6
                mov     [bp+var_2], ax

loc_1C8D3:                              ; CODE XREF: __flsbuf+8Fj
                cmp     [bp+var_2], di
                jz      short loc_1C8DB
                jmp     loc_1C7D2
; ---------------------------------------------------------------------------

loc_1C8DB:                              ; CODE XREF: __flsbuf+11Bj
                mov     al, [bp+arg_0]
                sub     ah, ah

loc_1C8E0:                              ; CODE XREF: __flsbuf+1Ej
                pop     si
                pop     di
                mov     sp, bp
                pop     bp
                retn
__flsbuf        endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


__nullcheck     proc near               ; CODE XREF: C_Exit+Cp
                push    si
                xor     si, si
                mov     cx, 36h ; '6'
                xor     ah, ah
                cld

loc_1C8EF:                              ; CODE XREF: __nullcheck+Cj
                lodsb
                xor     ah, al
                loop    loc_1C8EF
                xor     ah, 55h
                jz      short loc_1C900
                mov     ax, 1
                push    ax
                call    __NMSG_WRITE

loc_1C900:                              ; CODE XREF: __nullcheck+11j
                pop     si
                retn
__nullcheck     endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


__cinit         proc near               ; CODE XREF: start+7Cp
                mov     ah, 30h         ; the name is a guess
                int     21h             ; DOS - GET DOS VERSION
                                        ; Return: AL = major version number (00h for DOS 1.x)
                mov     DOSVersion, ax
                mov     bx, 4

loc_1C90C:                              ; CODE XREF: __cinit+1Cj
                mov     ax, 4400h
                int     21h             ; DOS - 2+ - IOCTL - GET DEVICE INFORMATION
                                        ; BX = file or device handle
                jb      short loc_1C91D
                test    dl, 80h         ; Character device if bit 7 set, disk file if clear.
                jz      short loc_1C91D
                or      IOCTLFlags[bx], 40h

loc_1C91D:                              ; CODE XREF: __cinit+Fj
                dec     bx
                jns     short loc_1C90C
                mov     ax, 3500h
                int     21h             ; DOS - 2+ - GET INTERRUPT VECTOR
                                        ; AL = interrupt number
                                        ; Return: ES:BX = value of interrupt vector
                mov     word ptr OldInt0Vector, bx
                mov     word ptr OldInt0Vector+2, es
                push    cs
                pop     ds
                assume ds:seg001
                mov     ax, 2500h
                mov     dx, offset __cintDIV
                int     21h             ; DOS - SET INTERRUPT VECTOR
                                        ; AL = interrupt number
                                        ; DS:DX = new vector to be used for specified interrupt
                push    ss
                pop     ds
                assume ds:seg002
                mov     cx, word_1EF32
                jcxz    short loc_1C966
                mov     es, PSP_SEG
                assume es:nothing
                mov     si, es:EnviroBlkSeg ; Segment of environment block
                lds     ax, dword_1EF34
                assume ds:nothing
                mov     dx, ds
                xor     bx, bx
                call    dword ptr ss:unk_1EF30
                lds     ax, ss:dword_1EF38
                mov     dx, ds
                mov     bx, 3
                call    dword ptr ss:unk_1EF30
                push    ss
                pop     ds
                assume ds:seg002

loc_1C966:                              ; CODE XREF: __cinit+3Bj
                mov     es, PSP_SEG
                mov     cx, es:EnviroBlkSeg ; Segment of environment block
                jcxz    short loc_1C9A5
                mov     es, cx
                xor     di, di

loc_1C975:                              ; CODE XREF: __cinit+8Cj
                cmp     byte ptr es:[di], 0
                jz      short loc_1C9A5
                mov     cx, 0Ch
                mov     si, offset unk_1ED8A
                repe cmpsb
                jz      short loc_1C990
                mov     cx, 7FFFh
                xor     ax, ax
                repne scasb
                jnz     short loc_1C9A5
                jmp     short loc_1C975
; ---------------------------------------------------------------------------

loc_1C990:                              ; CODE XREF: __cinit+81j
                push    es
                push    ds
                pop     es
                assume es:seg002
                pop     ds
                assume ds:nothing
                mov     si, di
                mov     di, offset IOCTLFlags
                lodsb
                cbw
                xchg    ax, cx

loc_1C99C:                              ; CODE XREF: __cinit+A1j
                lodsb
                inc     al
                jz      short loc_1C9A2
                dec     ax

loc_1C9A2:                              ; CODE XREF: __cinit+9Dj
                stosb
                loop    loc_1C99C

loc_1C9A5:                              ; CODE XREF: __cinit+6Dj __cinit+77j
                                        ; __cinit+8Aj
                push    ss
                pop     ds
                assume ds:seg002
                mov     si, offset off_1EF3C
                mov     di, offset off_1EF3C
                call    sub_1CA0D
                retn
__cinit         endp

; ---------------------------------------------------------------------------

_exit:                                  ; CODE XREF: start+99p
                push    bp
                mov     bp, sp
                mov     si, offset unk_1F06A
                mov     di, offset unk_1F06A
                call    sub_1CA0D
                mov     si, offset off_1EF3C
                mov     di, offset aNmsg ; "<<NMSG>>"
                call    sub_1CA0D
                jmp     short loc_1C9CB

; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; Attributes: bp-based frame

C_Exit          proc near               ; CODE XREF: start+A7p

arg_0           = word ptr  4

                push    bp
                mov     bp, sp

loc_1C9CB:                              ; CODE XREF: seg001:C9C6j
                mov     si, 164Eh
                mov     di, 164Eh
                call    sub_1CA0D
                call    __nullcheck
                mov     cx, 14h
                xor     bx, bx

loc_1C9DC:                              ; CODE XREF: C_Exit+20j
                test    byte ptr [bx+14BEh], 1
                jz      short loc_1C9E7
                mov     ah, 3Eh
                int     21h             ; DOS - 2+ - CLOSE A FILE WITH HANDLE
                                        ; BX = file handle

loc_1C9E7:                              ; CODE XREF: C_Exit+19j
                inc     bx
                loop    loc_1C9DC
                call    __ctermsub
                mov     ax, [bp+arg_0]
                mov     ah, 4Ch
                int     21h             ; DOS - 2+ - QUIT WITH EXIT CODE (EXIT)
C_Exit          endp                    ; AL = exit code


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


__ctermsub      proc near               ; CODE XREF: C_Exit+22p
                mov     cx, word_1EF32
                jcxz    short loc_1CA01
                mov     bx, 2
                call    dword ptr unk_1EF30

loc_1CA01:                              ; CODE XREF: __ctermsub+4j
                push    ds
                lds     dx, OldInt0Vector
                assume ds:nothing
                mov     ax, 2500h
                int     21h             ; DOS - SET INTERRUPT VECTOR
                                        ; AL = interrupt number
                                        ; DS:DX = new vector to be used for specified interrupt
                pop     ds
                retn
__ctermsub      endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1CA0D       proc near               ; CODE XREF: __cinit+ABp seg001:C9BAp
                                        ; seg001:C9C3p C_Exit+9p sub_1CA0D+8j
                                        ; sub_1CA0D+Cj
                cmp     si, di
                jnb     short locret_1CA1B
                dec     di
                dec     di
                mov     cx, [di]
                jcxz    short sub_1CA0D
                call    cx
                jmp     short sub_1CA0D
; ---------------------------------------------------------------------------

locret_1CA1B:                           ; CODE XREF: sub_1CA0D+2j
                retn
sub_1CA0D       endp

; ---------------------------------------------------------------------------

__dosret0:                              ; CODE XREF: _close+11j
                jb      short loc_1CA26
                xor     ax, ax
                mov     sp, bp
                pop     bp
                retn
; ---------------------------------------------------------------------------

__dosretax:                             ; CODE XREF: _lseek+18j _lseek+A3j
                                        ; _lseek+AFj
                jnb     short loc_1CA2C

loc_1CA26:                              ; CODE XREF: seg001:CA1Cj
                call    sub_1CA36
                mov     ax, 0FFFFh

loc_1CA2C:                              ; CODE XREF: seg001:CA24j
                mov     sp, bp
                pop     bp
                retn
; ---------------------------------------------------------------------------
                xor     ah, ah
                call    sub_1CA36
                retn

; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1CA36       proc near               ; CODE XREF: seg001:CA26p seg001:CA32p
                mov     ds:byte_1EDAC, al
                or      ah, ah
                jnz     short loc_1CA60
                cmp     byte ptr ds:DOSVersion, 3
                jb      short loc_1CA51
                cmp     al, 22h ; '"'
                jnb     short loc_1CA55
                cmp     al, 20h ; ' '
                jb      short loc_1CA51
                mov     al, 5
                jmp     short loc_1CA57
; ---------------------------------------------------------------------------
                db 90h
; ---------------------------------------------------------------------------

loc_1CA51:                              ; CODE XREF: sub_1CA36+Cj
                                        ; sub_1CA36+14j
                cmp     al, 13h
                jbe     short loc_1CA57

loc_1CA55:                              ; CODE XREF: sub_1CA36+10j
                mov     al, 13h

loc_1CA57:                              ; CODE XREF: sub_1CA36+18j
                                        ; sub_1CA36+1Dj
                mov     bx, offset unk_1EDD2
                xlat

loc_1CA5B:                              ; CODE XREF: sub_1CA36+2Cj
                cbw
                mov     ds:word_1EDA2, ax
                retn
; ---------------------------------------------------------------------------

loc_1CA60:                              ; CODE XREF: sub_1CA36+5j
                mov     al, ah
                jmp     short loc_1CA5B
sub_1CA36       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; Attributes: bp-based frame

__NMSG_TEXT     proc near               ; CODE XREF: start+Cp __NMSG_WRITE+7p

arg_0           = word ptr  4

                push    bp
                mov     bp, sp
                push    si
                push    di
                mov     ax, seg seg002
                mov     ds, ax
                assume ds:seg002
                push    ds
                pop     es
                mov     dx, [bp+arg_0]
                mov     si, offset Nmsg_Text

loc_1CA76:                              ; CODE XREF: __NMSG_TEXT+25j
                lodsw
                cmp     ax, dx
                jz      short loc_1CA8B
                inc     ax
                xchg    ax, si
                jz      short loc_1CA8B
                xchg    ax, di
                xor     ax, ax
                mov     cx, 0FFFFh
                repne scasb
                mov     si, di
                jmp     short loc_1CA76
; ---------------------------------------------------------------------------

loc_1CA8B:                              ; CODE XREF: __NMSG_TEXT+15j
                                        ; __NMSG_TEXT+19j
                xchg    ax, si
                pop     di
                pop     si
                mov     sp, bp
                pop     bp
                retn    2
__NMSG_TEXT     endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; Attributes: bp-based frame

__NMSG_WRITE    proc near               ; CODE XREF: start+35p start+A0p
                                        ; __nullcheck+17p

arg_0           = word ptr  4

                push    bp
                mov     bp, sp
                push    di
                push    [bp+arg_0]
                call    __NMSG_TEXT
                or      ax, ax
                jz      short loc_1CAB6
                xchg    ax, dx
                mov     di, dx
                xor     ax, ax
                mov     cx, 0FFFFh
                repne scasb
                not     cx
                dec     cx
                mov     bx, 2
                mov     ah, 40h
                int     21h             ; DOS - 2+ - WRITE TO FILE WITH HANDLE
                                        ; BX = file handle, CX = number of bytes to write, DS:DX -> buffer

loc_1CAB6:                              ; CODE XREF: __NMSG_WRITE+Cj
                pop     di
                mov     sp, bp
                pop     bp
                retn    2
__NMSG_WRITE    endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; Attributes: bp-based frame

__output        proc near               ; CODE XREF: _printf+26p

var_162         = word ptr -162h
var_15E         = byte ptr -15Eh
arg_0           = word ptr  4
arg_2           = word ptr  6
arg_4           = word ptr  8

                push    bp
                mov     bp, sp
                mov     ax, 162h
                call    __chkstk
                push    di
                push    si
                mov     si, [bp+arg_2]
                lea     ax, [bp+var_15E]
                mov     word_1F054, ax
                mov     ax, [bp+arg_4]
                mov     word_1F050, ax
                mov     ax, [bp+arg_0]
                mov     word_1F04A, ax
                mov     word_1F062, 0
                mov     word_1F060, 0
                jmp     loc_1CD26
; ---------------------------------------------------------------------------

loc_1CAED:                              ; CODE XREF: __output+26Ej
                cmp     byte ptr [si], '%'
                jz      short loc_1CAF5
                jmp     loc_1CCBD
; ---------------------------------------------------------------------------

loc_1CAF5:                              ; CODE XREF: __output+33j
                mov     word_1F05A, 1
                sub     ax, ax
                mov     word_1F058, ax
                mov     word_1F046, ax
                mov     word_1F05C, ax
                mov     word_1F04E, ax
                mov     word_1F052, ax
                mov     word_1F048, ax
                mov     word_1F04C, ax
                mov     word_1F066, ax
                mov     word_1F068, ax
                mov     word_1F056, ' '
                cmp     byte ptr [si+1], '0'
                jnz     short loc_1CB5F
                inc     si
                mov     word_1F056, '0'
                jmp     short loc_1CB5F
; ---------------------------------------------------------------------------

loc_1CB2D:                              ; CODE XREF: __output+AFj
                cmp     byte ptr [si], '-'
                jnz     short loc_1CB38
                inc     word_1F068
                jmp     short loc_1CB5F
; ---------------------------------------------------------------------------

loc_1CB38:                              ; CODE XREF: __output+73j
                cmp     byte ptr [si], '+'
                jnz     short loc_1CB49
                inc     word_1F058
                mov     word_1F048, 0
                jmp     short loc_1CB5F
; ---------------------------------------------------------------------------

loc_1CB49:                              ; CODE XREF: __output+7Ej
                cmp     byte ptr [si], ' '
                jnz     short loc_1CB5B
                cmp     word_1F058, 0
                jnz     short loc_1CB5F
                inc     word_1F048
                jmp     short loc_1CB5F
; ---------------------------------------------------------------------------

loc_1CB5B:                              ; CODE XREF: __output+8Fj
                inc     word_1F066

loc_1CB5F:                              ; CODE XREF: __output+65j __output+6Ej
                                        ; __output+79j __output+8Aj
                                        ; __output+96j __output+9Cj
                inc     si
                mov     al, [si]
                cbw
                push    ax
                call    sub_1D2A4       ; flagchar
                add     sp, 2
                or      ax, ax
                jnz     short loc_1CB2D
                push    si
                mov     ax, offset word_1F05E
                push    ax
                call    sub_1D239       ; getnum
                add     sp, 4
                mov     si, ax
                cmp     byte ptr [si], '.'
                jnz     short loc_1CB92
                inc     word_1F052
                inc     si
                push    si
                mov     ax, offset word_1F05A
                push    ax
                call    sub_1D239       ; getnum
                add     sp, 4
                mov     si, ax

loc_1CB92:                              ; CODE XREF: __output+C1j
                mov     al, [si]
                cbw
                cmp     ax, 'F'
                jz      short loc_1CBD3
                cmp     ax, 'N'
                jz      short loc_1CBDB
                cmp     ax, 'h'
                jz      short loc_1CBCB
                cmp     ax, 'l'
                jz      short loc_1CBB0
                cmp     ax, 'p'
                jz      short loc_1CBD3
                jmp     short loc_1CBB6
; ---------------------------------------------------------------------------

loc_1CBB0:                              ; CODE XREF: __output+EAj
                mov     word_1F04E, 2

loc_1CBB6:                              ; CODE XREF: __output+F1j
                                        ; __output+114j __output+11Cj
                                        ; __output+124j
                cmp     word_1F04E, 0
                jz      short loc_1CBC3
                cmp     byte ptr [si], 'p'
                jz      short loc_1CBC3
                inc     si

loc_1CBC3:                              ; CODE XREF: __output+FEj
                                        ; __output+103j
                cmp     byte ptr [si], 0
                jnz     short loc_1CBE3
                jmp     loc_1CD2E
; ---------------------------------------------------------------------------

loc_1CBCB:                              ; CODE XREF: __output+E5j
                mov     word_1F04E, 1
                jmp     short loc_1CBB6
; ---------------------------------------------------------------------------

loc_1CBD3:                              ; CODE XREF: __output+DBj __output+EFj
                mov     word_1F04E, 10h
                jmp     short loc_1CBB6
; ---------------------------------------------------------------------------

loc_1CBDB:                              ; CODE XREF: __output+E0j
                mov     word_1F04E, 8
                jmp     short loc_1CBB6
; ---------------------------------------------------------------------------

loc_1CBE3:                              ; CODE XREF: __output+109j
                mov     al, [si]
                cbw
                mov     [bp+var_162], ax
                cmp     ax, 'E'
                jz      short loc_1CBF9
                cmp     ax, 'G'
                jz      short loc_1CBF9
                cmp     ax, 'X'
                jnz     short loc_1CC02

loc_1CBF9:                              ; CODE XREF: __output+130j
                                        ; __output+135j
                inc     word_1F046
                add     [bp+var_162], ' '

loc_1CC02:                              ; CODE XREF: __output+13Aj
                mov     ax, [bp+var_162]
                sub     ax, 'c'
                cmp     ax, 15h
                jbe     short loc_1CC11
                jmp     loc_1CCB3
; ---------------------------------------------------------------------------

loc_1CC11:                              ; CODE XREF: __output+14Fj
                add     ax, ax
                xchg    ax, bx
                jmp     cs:off_1CCC1[bx]

loc_1CC19:                              ; DATA XREF: __output+21Ao
                mov     bx, word_1F050
                mov     bx, [bx]
                mov     ax, word_1F060
                mov     [bx], ax
                jmp     loc_1CCED
; ---------------------------------------------------------------------------

loc_1CC27:                              ; CODE XREF: __output+157j
                                        ; DATA XREF: __output+228o
                inc     word_1F05C

loc_1CC2B:                              ; CODE XREF: __output+157j
                                        ; DATA XREF: __output+206o
                                        ; __output+210o
                mov     word_1F066, 0
                mov     ax, 0Ah

loc_1CC34:                              ; CODE XREF: __output+184j
                                        ; __output+1DEj
                push    ax
                call    sub_1CD4D       ; iprint

loc_1CC38:                              ; CODE XREF: __output+1E6j
                                        ; __output+1F4j
                add     sp, 2
                jmp     loc_1CCED
; ---------------------------------------------------------------------------

loc_1CC3E:                              ; CODE XREF: __output+157j
                                        ; DATA XREF: __output+21Co
                mov     ax, 8
                jmp     short loc_1CC34
; ---------------------------------------------------------------------------

loc_1CC43:                              ; CODE XREF: __output+157j
                                        ; DATA XREF: __output+21Eo
                inc     word_1F04C
                mov     word_1F05A, 4
                inc     word_1F046
                inc     word_1F052
                cmp     word_1F04E, 2
                jz      short loc_1CC63
                cmp     word_1F04E, 10h
                jnz     short loc_1CC98

loc_1CC63:                              ; CODE XREF: __output+19Dj
                mov     word_1F04E, 0
                add     word_1F050, 2
                mov     ax, 10h
                push    ax
                call    sub_1CD4D       ; iprint
                add     sp, 2
                mov     ax, 3Ah ; ':'
                push    ax
                call    sub_1D006       ; _outc
                add     sp, 2
                sub     word_1F050, 4
                mov     ax, 10h
                push    ax
                call    sub_1CD4D       ; iprint
                add     sp, 2
                add     word_1F050, 2
                jmp     short loc_1CCED
; ---------------------------------------------------------------------------

loc_1CC98:                              ; CODE XREF: __output+157j
                                        ; __output+1A4j
                                        ; DATA XREF: __output+22Eo
                mov     ax, 10h
                jmp     short loc_1CC34
; ---------------------------------------------------------------------------

loc_1CC9D:                              ; CODE XREF: __output+157j
                                        ; DATA XREF: __output+224o
                sub     ax, ax

loc_1CC9F:                              ; CODE XREF: __output+1EBj
                push    ax
                call    sub_1CE82       ; sprint
                jmp     short loc_1CC38
; ---------------------------------------------------------------------------

loc_1CCA5:                              ; CODE XREF: __output+157j
                                        ; DATA XREF: __output+204o
                mov     ax, 1
                jmp     short loc_1CC9F
; ---------------------------------------------------------------------------

loc_1CCAA:                              ; CODE XREF: __output+157j
                                        ; DATA XREF: __output+208o
                                        ; __output+20Ao __output+20Co
                push    [bp+var_162]
                call    sub_1CF66       ; fprint
                jmp     short loc_1CC38
; ---------------------------------------------------------------------------

loc_1CCB3:                              ; CODE XREF: __output+151j
                                        ; __output+157j
                                        ; DATA XREF: __output+20Eo
                                        ; __output+212o __output+214o
                                        ; __output+216o __output+218o
                                        ; __output+220o __output+222o
                                        ; __output+226o __output+22Ao
                                        ; __output+22Co
                cmp     word_1F04E, 0
                jz      short loc_1CCBD
                mov     ax, si
                dec     si

loc_1CCBD:                              ; CODE XREF: __output+35j
                                        ; __output+1FBj
                mov     di, si
                jmp     short loc_1CD0F
; ---------------------------------------------------------------------------
off_1CCC1       dw offset loc_1CCA5     ; DATA XREF: __output+157r
                dw offset loc_1CC2B
                dw offset loc_1CCAA
                dw offset loc_1CCAA
                dw offset loc_1CCAA
                dw offset loc_1CCB3
                dw offset loc_1CC2B
                dw offset loc_1CCB3
                dw offset loc_1CCB3
                dw offset loc_1CCB3
                dw offset loc_1CCB3
                dw offset loc_1CC19
                dw offset loc_1CC3E
                dw offset loc_1CC43
                dw offset loc_1CCB3
                dw offset loc_1CCB3
                dw offset loc_1CC9D
                dw offset loc_1CCB3
                dw offset loc_1CC27
                dw offset loc_1CCB3
                dw offset loc_1CCB3
                dw offset loc_1CC98
; ---------------------------------------------------------------------------

loc_1CCED:                              ; CODE XREF: __output+167j
                                        ; __output+17Ej __output+1D9j
                cmp     word_1F062, 0
                jz      short loc_1CD07
                cmp     word_1F060, 0
                jnz     short loc_1CD44
                mov     bx, word_1F04A
                test    byte ptr [bx+6], 20h
                jnz     short loc_1CD3F
                jmp     short loc_1CD44
; ---------------------------------------------------------------------------

loc_1CD07:                              ; CODE XREF: __output+235j
                inc     si
                jmp     short loc_1CD26
; ---------------------------------------------------------------------------

loc_1CD0A:                              ; CODE XREF: __output+256j
                cmp     byte ptr [di], '%'
                jz      short loc_1CD15

loc_1CD0F:                              ; CODE XREF: __output+202j
                inc     di
                cmp     byte ptr [di], 0
                jnz     short loc_1CD0A

loc_1CD15:                              ; CODE XREF: __output+250j
                mov     ax, di
                sub     ax, si
                push    ax
                mov     ax, si
                push    ds
                push    ax
                call    sub_1D0B4       ; putbuf
                add     sp, 6
                mov     si, di

loc_1CD26:                              ; CODE XREF: __output+2Dj
                                        ; __output+24Bj
                cmp     byte ptr [si], 0
                jz      short loc_1CD2E
                jmp     loc_1CAED
; ---------------------------------------------------------------------------

loc_1CD2E:                              ; CODE XREF: __output+10Bj
                                        ; __output+26Cj
                cmp     word_1F060, 0
                jnz     short loc_1CD44
                mov     bx, word_1F04A
                test    byte ptr [bx+6], 20h
                jz      short loc_1CD44

loc_1CD3F:                              ; CODE XREF: __output+246j
                mov     ax, 0FFFFh
                jmp     short loc_1CD47
; ---------------------------------------------------------------------------

loc_1CD44:                              ; CODE XREF: __output+23Cj
                                        ; __output+248j __output+276j
                                        ; __output+280j
                mov     ax, word_1F060

loc_1CD47:                              ; CODE XREF: __output+285j
                pop     si
                pop     di
                mov     sp, bp
                pop     bp
                retn
__output        endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; iprint
; Attributes: bp-based frame

sub_1CD4D       proc near               ; CODE XREF: __output+178p
                                        ; __output+1B5p __output+1CEp

var_A           = word ptr -0Ah
var_8           = word ptr -8
var_6           = word ptr -6
var_2           = word ptr -2
arg_0           = word ptr  4

                push    bp
                mov     bp, sp
                mov     ax, 18h
                call    __chkstk
                push    di
                push    si
                cmp     [bp+arg_0], 0Ah
                jz      short loc_1CD62
                inc     word_1F05C

loc_1CD62:                              ; CODE XREF: sub_1CD4D+Fj
                cmp     word_1F04E, 2
                jz      short loc_1CD70
                cmp     word_1F04E, 10h
                jnz     short loc_1CD86

loc_1CD70:                              ; CODE XREF: sub_1CD4D+1Aj
                mov     bx, word_1F050
                mov     ax, [bx]
                mov     dx, [bx+2]
                mov     [bp+var_8], ax
                mov     [bp+var_6], dx
                add     word_1F050, 4
                jmp     short loc_1CDAF
; ---------------------------------------------------------------------------

loc_1CD86:                              ; CODE XREF: sub_1CD4D+21j
                cmp     word_1F05C, 0
                jz      short loc_1CD9D
                mov     bx, word_1F050
                mov     ax, [bx]
                mov     [bp+var_8], ax
                mov     [bp+var_6], 0
                jmp     short loc_1CDAA
; ---------------------------------------------------------------------------

loc_1CD9D:                              ; CODE XREF: sub_1CD4D+3Ej
                mov     bx, word_1F050
                mov     ax, [bx]
                cwd
                mov     [bp+var_8], ax
                mov     [bp+var_6], dx

loc_1CDAA:                              ; CODE XREF: sub_1CD4D+4Ej
                add     word_1F050, 2

loc_1CDAF:                              ; CODE XREF: sub_1CD4D+37j
                cmp     word_1F066, 0
                jz      short loc_1CDC3
                mov     ax, [bp+var_8]
                or      ax, [bp+var_6]
                jz      short loc_1CDC3
                mov     ax, [bp+arg_0]
                jmp     short loc_1CDC5
; ---------------------------------------------------------------------------

loc_1CDC3:                              ; CODE XREF: sub_1CD4D+67j
                                        ; sub_1CD4D+6Fj
                sub     ax, ax

loc_1CDC5:                              ; CODE XREF: sub_1CD4D+74j
                mov     word_1F064, ax
                mov     si, word_1F054
                cmp     word_1F05C, 0
                jnz     short loc_1CDFD
                cmp     [bp+var_6], 0
                jge     short loc_1CDFD
                cmp     [bp+arg_0], 0Ah
                jnz     short loc_1CDF6
                mov     byte ptr [si], 2Dh ; '-'
                inc     si
                mov     ax, [bp+var_8]
                mov     dx, [bp+var_6]
                neg     ax
                adc     dx, 0
                neg     dx
                mov     [bp+var_8], ax
                mov     [bp+var_6], dx

loc_1CDF6:                              ; CODE XREF: sub_1CD4D+90j
                mov     [bp+var_A], 1
                jmp     short loc_1CE02
; ---------------------------------------------------------------------------

loc_1CDFD:                              ; CODE XREF: sub_1CD4D+84j
                                        ; sub_1CD4D+8Aj
                mov     [bp+var_A], 0

loc_1CE02:                              ; CODE XREF: sub_1CD4D+AEj
                mov     di, bp
                sub     di, 18h
                push    [bp+arg_0]
                push    di
                push    [bp+var_6]
                push    [bp+var_8]
                call    _ultoa
                add     sp, 8
                cmp     word_1F052, 0
                jz      short loc_1CE3E
                push    di
                call    _strlen
                add     sp, 2
                mov     cx, word_1F05A
                sub     cx, ax
                mov     [bp+var_2], cx
                jmp     short loc_1CE34
; ---------------------------------------------------------------------------

loc_1CE30:                              ; CODE XREF: sub_1CD4D+EFj
                mov     byte ptr [si], 30h ; '0'
                inc     si

loc_1CE34:                              ; CODE XREF: sub_1CD4D+E1j
                mov     ax, [bp+var_2]
                dec     [bp+var_2]
                or      ax, ax
                jg      short loc_1CE30

loc_1CE3E:                              ; CODE XREF: sub_1CD4D+CFj
                                        ; sub_1CD4D+109j
                mov     al, [di]
                mov     [si], al
                cmp     word_1F046, 0
                jz      short loc_1CE50
                cmp     al, 61h ; 'a'
                jl      short loc_1CE50
                sub     byte ptr [si], 20h ; ' '

loc_1CE50:                              ; CODE XREF: sub_1CD4D+FAj
                                        ; sub_1CD4D+FEj
                inc     si
                inc     di
                cmp     byte ptr [di-1], 0
                jnz     short loc_1CE3E
                cmp     word_1F05C, 0
                jnz     short loc_1CE73
                mov     ax, word_1F058
                or      ax, word_1F048
                jz      short loc_1CE73
                cmp     [bp+var_A], 0
                jnz     short loc_1CE73
                mov     ax, 1
                jmp     short loc_1CE75
; ---------------------------------------------------------------------------

loc_1CE73:                              ; CODE XREF: sub_1CD4D+110j
                                        ; sub_1CD4D+119j sub_1CD4D+11Fj
                sub     ax, ax

loc_1CE75:                              ; CODE XREF: sub_1CD4D+124j
                push    ax
                call    sub_1D11F       ; _out
                add     sp, 2
                pop     si
                pop     di
                mov     sp, bp
                pop     bp
                retn
sub_1CD4D       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; sprint
; Attributes: bp-based frame

sub_1CE82       proc near               ; CODE XREF: __output+1E3p

var_C           = word ptr -0Ch
var_A           = word ptr -0Ah
var_8           = word ptr -8
var_4           = dword ptr -4
arg_0           = word ptr  4

                push    bp
                mov     bp, sp
                mov     ax, 10h
                call    __chkstk
                push    di
                push    si
                mov     word_1F056, 20h ; ' '
                cmp     [bp+arg_0], 0
                jz      short loc_1CEAD
                mov     si, 1
                mov     ax, word_1F050
                mov     [bp+var_C], ax
                mov     [bp+var_A], ds
                add     word_1F050, 2
                jmp     loc_1CF31
; ---------------------------------------------------------------------------

loc_1CEAD:                              ; CODE XREF: sub_1CE82+15j
                cmp     word_1F04E, 10h
                jnz     short loc_1CECA
                mov     bx, word_1F050
                mov     ax, [bx]
                mov     dx, [bx+2]
                mov     [bp+var_C], ax
                mov     [bp+var_A], dx
                add     word_1F050, 4
                jmp     short loc_1CEDE
; ---------------------------------------------------------------------------

loc_1CECA:                              ; CODE XREF: sub_1CE82+30j
                mov     bx, word_1F050
                mov     ax, [bx]
                mov     [bp+var_8], ax
                mov     [bp+var_C], ax
                mov     [bp+var_A], ds
                add     word_1F050, 2

loc_1CEDE:                              ; CODE XREF: sub_1CE82+46j
                cmp     word_1F04E, 10h
                jnz     short loc_1CEF2
                mov     ax, [bp+var_C]
                or      ax, [bp+var_A]
                jnz     short loc_1CF01
                mov     ax, offset aNull ; "(null)"
                jmp     short loc_1CEFB
; ---------------------------------------------------------------------------

loc_1CEF2:                              ; CODE XREF: sub_1CE82+61j
                cmp     [bp+var_8], 0
                jnz     short loc_1CF01
                mov     ax, offset aNull_0 ; "(null)"

loc_1CEFB:                              ; CODE XREF: sub_1CE82+6Ej
                mov     [bp+var_C], ax
                mov     [bp+var_A], ds

loc_1CF01:                              ; CODE XREF: sub_1CE82+69j
                                        ; sub_1CE82+74j
                mov     ax, [bp+var_C]
                mov     dx, [bp+var_A]
                mov     word ptr [bp+var_4], ax
                mov     word ptr [bp+var_4+2], dx
                sub     si, si
                jmp     short loc_1CF15
; ---------------------------------------------------------------------------

loc_1CF11:                              ; CODE XREF: sub_1CE82+9Aj
                inc     word ptr [bp+var_4]
                inc     si

loc_1CF15:                              ; CODE XREF: sub_1CE82+8Dj
                les     bx, [bp+var_4]
                assume es:nothing
                cmp     byte ptr es:[bx], 0
                jnz     short loc_1CF11
                cmp     word_1F052, 0
                jz      short loc_1CF31
                mov     ax, si
                cmp     ax, word_1F05A
                jbe     short loc_1CF31
                mov     si, word_1F05A

loc_1CF31:                              ; CODE XREF: sub_1CE82+28j
                                        ; sub_1CE82+A1j sub_1CE82+A9j
                mov     di, word_1F05E
                sub     di, si
                cmp     word_1F068, 0
                jnz     short loc_1CF45
                push    di
                call    sub_1D04F       ; putpad
                add     sp, 2

loc_1CF45:                              ; CODE XREF: sub_1CE82+BAj
                push    si
                push    [bp+var_A]
                push    [bp+var_C]
                call    sub_1D0B4       ; putbuf
                add     sp, 6
                cmp     word_1F068, 0
                jz      short loc_1CF60
                push    di
                call    sub_1D04F       ; putpad
                add     sp, 2

loc_1CF60:                              ; CODE XREF: sub_1CE82+D5j
                pop     si
                pop     di
                mov     sp, bp
                pop     bp
                retn
sub_1CE82       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; fprint
; Attributes: bp-based frame

sub_1CF66       proc near               ; CODE XREF: __output+1F1p

var_2           = word ptr -2
arg_0           = word ptr  4

                push    bp
                mov     bp, sp
                mov     ax, 2
                call    __chkstk
                mov     ax, word_1F050
                mov     [bp+var_2], ax
                cmp     word_1F052, 0
                jnz     short loc_1CF82
                mov     word_1F05A, 6

loc_1CF82:                              ; CODE XREF: sub_1CF66+14j
                push    word_1F046
                push    word_1F05A
                push    [bp+arg_0]
                push    word_1F054
                push    [bp+var_2]
                call    sub_1D417
                add     sp, 0Ah
                cmp     [bp+arg_0], 'g'
                jz      short loc_1CFA6
                cmp     [bp+arg_0], 'G'
                jnz     short loc_1CFBE

loc_1CFA6:                              ; CODE XREF: sub_1CF66+38j
                cmp     word_1F066, 0
                jnz     short loc_1CFBE
                cmp     word_1F05A, 0
                jz      short loc_1CFBE
                push    word_1F054
                call    sub_1D417
                add     sp, 2

loc_1CFBE:                              ; CODE XREF: sub_1CF66+3Ej
                                        ; sub_1CF66+45j sub_1CF66+4Cj
                cmp     word_1F066, 0
                jz      short loc_1CFD6
                cmp     word_1F05A, 0
                jnz     short loc_1CFD6
                push    word_1F054
                call    sub_1D417
                add     sp, 2

loc_1CFD6:                              ; CODE XREF: sub_1CF66+5Dj
                                        ; sub_1CF66+64j
                add     word_1F050, 8
                mov     word_1F064, 0
                mov     ax, word_1F058
                or      ax, word_1F048
                jz      short loc_1CFFC
                push    [bp+var_2]
                call    sub_1D417
                add     sp, 2
                or      ax, ax
                jz      short loc_1CFFC
                mov     ax, 1
                jmp     short loc_1CFFE
; ---------------------------------------------------------------------------

loc_1CFFC:                              ; CODE XREF: sub_1CF66+82j
                                        ; sub_1CF66+8Fj
                sub     ax, ax

loc_1CFFE:                              ; CODE XREF: sub_1CF66+94j
                push    ax
                call    sub_1D11F       ; _out
                mov     sp, bp
                pop     bp
                retn
sub_1CF66       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; _outc
; Attributes: bp-based frame

sub_1D006       proc near               ; CODE XREF: __output+1BFp
                                        ; sub_1D11F+40p sub_1D1E7+18p
                                        ; sub_1D206+Cp sub_1D206+29p

arg_0           = byte ptr  4

                push    bp
                mov     bp, sp
                xor     ax, ax
                call    __chkstk
                push    si
                cmp     word_1F062, 0
                jnz     short loc_1D04A
                mov     bx, word_1F04A
                dec     word ptr [bx+2]
                js      short loc_1D030
                mov     al, [bp+arg_0]
                mov     bx, word_1F04A
                mov     si, [bx]
                inc     word ptr [bx]
                mov     [si], al
                sub     ah, ah
                jmp     short loc_1D03D
; ---------------------------------------------------------------------------

loc_1D030:                              ; CODE XREF: sub_1D006+17j
                push    word_1F04A
                push    word ptr [bp+arg_0]
                call    __flsbuf
                add     sp, 4

loc_1D03D:                              ; CODE XREF: sub_1D006+28j
                inc     ax
                jnz     short loc_1D046
                inc     word_1F062
                jmp     short loc_1D04A
; ---------------------------------------------------------------------------

loc_1D046:                              ; CODE XREF: sub_1D006+38j
                inc     word_1F060

loc_1D04A:                              ; CODE XREF: sub_1D006+Ej
                                        ; sub_1D006+3Ej
                pop     si
                mov     sp, bp
                pop     bp
                retn
sub_1D006       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; putpad
; Attributes: bp-based frame

sub_1D04F       proc near               ; CODE XREF: sub_1CE82+BDp
                                        ; sub_1CE82+D8p sub_1D11F+7Cp
                                        ; sub_1D11F+BCp

arg_0           = word ptr  4

                push    bp
                mov     bp, sp
                mov     ax, 2
                call    __chkstk
                push    di
                push    si
                cmp     word_1F062, 0
                jnz     short loc_1D0AE
                mov     si, [bp+arg_0]
                or      si, si
                jle     short loc_1D0AE
                jmp     short loc_1D099
; ---------------------------------------------------------------------------

loc_1D06A:                              ; CODE XREF: sub_1D04F+4Fj
                mov     bx, word_1F04A
                dec     word ptr [bx+2]
                js      short loc_1D084
                mov     al, byte ptr word_1F056
                mov     bx, word_1F04A
                mov     di, [bx]
                inc     word ptr [bx]
                mov     [di], al
                sub     ah, ah
                jmp     short loc_1D092
; ---------------------------------------------------------------------------

loc_1D084:                              ; CODE XREF: sub_1D04F+22j
                push    word_1F04A
                push    word_1F056
                call    __flsbuf
                add     sp, 4

loc_1D092:                              ; CODE XREF: sub_1D04F+33j
                inc     ax
                jnz     short loc_1D099
                inc     word_1F062

loc_1D099:                              ; CODE XREF: sub_1D04F+19j
                                        ; sub_1D04F+44j
                mov     ax, si
                dec     si
                or      ax, ax
                jg      short loc_1D06A
                cmp     word_1F062, 0
                jnz     short loc_1D0AE
                mov     ax, [bp+arg_0]
                add     word_1F060, ax

loc_1D0AE:                              ; CODE XREF: sub_1D04F+10j
                                        ; sub_1D04F+17j sub_1D04F+56j
                pop     si
                pop     di
                mov     sp, bp
                pop     bp
                retn
sub_1D04F       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; putbuf
; Attributes: bp-based frame

sub_1D0B4       proc near               ; CODE XREF: __output+261p
                                        ; sub_1CE82+CAp sub_1D11F+A8p

arg_0           = dword ptr  4
arg_4           = word ptr  8

                push    bp
                mov     bp, sp
                mov     ax, 2
                call    __chkstk
                push    di
                push    si
                mov     si, [bp+arg_4]
                cmp     word_1F062, 0
                jnz     short loc_1D119
                jmp     short loc_1D104
; ---------------------------------------------------------------------------

loc_1D0CB:                              ; CODE XREF: sub_1D0B4+55j
                mov     bx, word_1F04A
                dec     word ptr [bx+2]
                js      short loc_1D0E8
                les     bx, [bp+arg_0]
                mov     al, es:[bx]
                mov     bx, word_1F04A
                mov     di, [bx]
                inc     word ptr [bx]
                mov     [di], al
                sub     ah, ah
                jmp     short loc_1D0FA
; ---------------------------------------------------------------------------

loc_1D0E8:                              ; CODE XREF: sub_1D0B4+1Ej
                push    word_1F04A
                les     bx, [bp+arg_0]
                mov     al, es:[bx]
                cbw
                push    ax
                call    __flsbuf
                add     sp, 4

loc_1D0FA:                              ; CODE XREF: sub_1D0B4+32j
                inc     ax
                jnz     short loc_1D101
                inc     word_1F062

loc_1D101:                              ; CODE XREF: sub_1D0B4+47j
                inc     word ptr [bp+arg_0]

loc_1D104:                              ; CODE XREF: sub_1D0B4+15j
                mov     ax, si
                dec     si
                or      ax, ax
                jnz     short loc_1D0CB
                cmp     word_1F062, 0
                jnz     short loc_1D119
                mov     ax, [bp+arg_4]
                add     word_1F060, ax

loc_1D119:                              ; CODE XREF: sub_1D0B4+13j
                                        ; sub_1D0B4+5Cj
                pop     si
                pop     di
                mov     sp, bp
                pop     bp
                retn
sub_1D0B4       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; _out
; Attributes: bp-based frame

sub_1D11F       proc near               ; CODE XREF: sub_1CD4D+129p
                                        ; sub_1CF66+99p

var_8           = word ptr -8
var_6           = word ptr -6
var_4           = word ptr -4
arg_0           = word ptr  4

                push    bp
                mov     bp, sp
                mov     ax, 0Ah
                call    __chkstk
                push    di
                push    si
                mov     si, word_1F054
                sub     ax, ax
                mov     [bp+var_4], ax
                mov     [bp+var_8], ax
                mov     di, word_1F05E
                push    si
                call    _strlen
                add     sp, 2
                mov     [bp+var_6], ax
                sub     di, ax
                sub     di, [bp+arg_0]
                cmp     word_1F068, 0
                jnz     short loc_1D168
                cmp     byte ptr [si], '-'
                jnz     short loc_1D168
                cmp     word_1F056, '0'
                jnz     short loc_1D168
                lodsb
                cbw
                push    ax
                call    sub_1D006       ; _outc
                add     sp, 2
                dec     [bp+var_6]

loc_1D168:                              ; CODE XREF: sub_1D11F+2Fj
                                        ; sub_1D11F+34j sub_1D11F+3Bj
                cmp     word_1F056, '0'
                jz      short loc_1D17A
                or      di, di
                jle     short loc_1D17A
                cmp     word_1F068, 0
                jz      short loc_1D193

loc_1D17A:                              ; CODE XREF: sub_1D11F+4Ej
                                        ; sub_1D11F+52j
                cmp     [bp+arg_0], 0
                jz      short loc_1D186
                inc     [bp+var_8]
                call    sub_1D1E7       ; putsign

loc_1D186:                              ; CODE XREF: sub_1D11F+5Fj
                cmp     word_1F064, 0
                jz      short loc_1D193
                inc     [bp+var_4]
                call    sub_1D206       ; putprefix

loc_1D193:                              ; CODE XREF: sub_1D11F+59j
                                        ; sub_1D11F+6Cj
                cmp     word_1F068, 0
                jnz     short loc_1D1C0
                push    di
                call    sub_1D04F       ; putpad
                add     sp, 2
                cmp     [bp+arg_0], 0
                jz      short loc_1D1B0
                cmp     [bp+var_8], 0
                jnz     short loc_1D1B0
                call    sub_1D1E7       ; putsign

loc_1D1B0:                              ; CODE XREF: sub_1D11F+86j
                                        ; sub_1D11F+8Cj
                cmp     word_1F064, 0
                jz      short loc_1D1C0
                cmp     [bp+var_4], 0
                jnz     short loc_1D1C0
                call    sub_1D206       ; putprefix

loc_1D1C0:                              ; CODE XREF: sub_1D11F+79j
                                        ; sub_1D11F+96j sub_1D11F+9Cj
                push    [bp+var_6]
                mov     ax, si
                push    ds
                push    ax
                call    sub_1D0B4       ; putbuf
                add     sp, 6
                cmp     word_1F068, 0
                jz      short loc_1D1E1
                mov     word_1F056, 20h ; ' '
                push    di
                call    sub_1D04F       ; putpad
                add     sp, 2

loc_1D1E1:                              ; CODE XREF: sub_1D11F+B3j
                pop     si
                pop     di
                mov     sp, bp
                pop     bp
                retn
sub_1D11F       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; putsign
; Attributes: bp-based frame

sub_1D1E7       proc near               ; CODE XREF: sub_1D11F+64p
                                        ; sub_1D11F+8Ep
                push    bp
                mov     bp, sp
                xor     ax, ax
                call    __chkstk
                cmp     word_1F058, 0
                jz      short loc_1D1FB
                mov     ax, 2Bh ; '+'
                jmp     short loc_1D1FE
; ---------------------------------------------------------------------------

loc_1D1FB:                              ; CODE XREF: sub_1D1E7+Dj
                mov     ax, 20h ; ' '

loc_1D1FE:                              ; CODE XREF: sub_1D1E7+12j
                push    ax
                call    sub_1D006       ; _outc
                mov     sp, bp
                pop     bp
                retn
sub_1D1E7       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; putprefix
; Attributes: bp-based frame

sub_1D206       proc near               ; CODE XREF: sub_1D11F+71p
                                        ; sub_1D11F+9Ep
                push    bp
                mov     bp, sp
                xor     ax, ax
                call    __chkstk
                mov     ax, 30h ; '0'
                push    ax
                call    sub_1D006       ; _outc
                add     sp, 2
                cmp     word_1F064, 10h
                jnz     short loc_1D235
                cmp     word_1F046, 0
                jz      short loc_1D22B
                mov     ax, 'X'
                jmp     short loc_1D22E
; ---------------------------------------------------------------------------

loc_1D22B:                              ; CODE XREF: sub_1D206+1Ej
                mov     ax, 78h ; 'x'

loc_1D22E:                              ; CODE XREF: sub_1D206+23j
                push    ax
                call    sub_1D006       ; _outc
                add     sp, 2

loc_1D235:                              ; CODE XREF: sub_1D206+17j
                mov     sp, bp
                pop     bp
                retn
sub_1D206       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; getnum
; Attributes: bp-based frame

sub_1D239       proc near               ; CODE XREF: __output+B6p __output+CDp

arg_0           = word ptr  4
arg_2           = word ptr  6

                push    bp
                mov     bp, sp
                mov     ax, 2
                call    __chkstk
                push    di
                push    si
                mov     si, [bp+arg_2]
                cmp     byte ptr [si], '*'
                jnz     short loc_1D25D
                mov     bx, word_1F050
                mov     al, [bx]
                cbw
                mov     di, ax
                add     word_1F050, 2
                inc     si
                jmp     short loc_1D297
; ---------------------------------------------------------------------------

loc_1D25D:                              ; CODE XREF: sub_1D239+11j
                sub     di, di
                cmp     byte ptr [si], 30h ; '0'
                jl      short loc_1D297
                cmp     byte ptr [si], 39h ; '9'
                jg      short loc_1D297
                cmp     word_1F052, di
                jnz     short loc_1D27A
                cmp     byte ptr [si], 30h ; '0'
                jnz     short loc_1D27A
                mov     word_1F056, 30h ; '0'

loc_1D27A:                              ; CODE XREF: sub_1D239+34j
                                        ; sub_1D239+39j sub_1D239+5Cj
                lodsb
                cbw
                mov     cx, di
                shl     cx, 1
                shl     cx, 1
                add     cx, di
                shl     cx, 1
                add     cx, ax
                sub     cx, 30h ; '0'
                mov     di, cx
                cmp     byte ptr [si], 30h ; '0'
                jl      short loc_1D297
                cmp     byte ptr [si], 39h ; '9'
                jle     short loc_1D27A

loc_1D297:                              ; CODE XREF: sub_1D239+22j
                                        ; sub_1D239+29j sub_1D239+2Ej
                                        ; sub_1D239+57j
                mov     bx, [bp+arg_0]
                mov     [bx], di
                mov     ax, si
                pop     si
                pop     di
                mov     sp, bp
                pop     bp
                retn
sub_1D239       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; flagchar
; Attributes: bp-based frame

sub_1D2A4       proc near               ; CODE XREF: __output+A7p

arg_0           = byte ptr  4

                push    bp
                mov     bp, sp
                mov     ax, 2
                call    __chkstk
                push    si
                mov     si, offset asc_1EDF4 ; "+- #"
                jmp     short loc_1D2C0
; ---------------------------------------------------------------------------

loc_1D2B3:                              ; CODE XREF: sub_1D2A4+1Fj
                mov     al, [si]
                cmp     [bp+arg_0], al
                jnz     short loc_1D2BF
                mov     ax, 1
                jmp     short loc_1D2C7
; ---------------------------------------------------------------------------

loc_1D2BF:                              ; CODE XREF: sub_1D2A4+14j
                inc     si

loc_1D2C0:                              ; CODE XREF: sub_1D2A4+Dj
                cmp     byte ptr [si], 0
                jnz     short loc_1D2B3
                sub     ax, ax

loc_1D2C7:                              ; CODE XREF: sub_1D2A4+19j
                pop     si
                mov     sp, bp
                pop     bp
                retn
sub_1D2A4       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; the name is a guess

__setargv       proc near               ; CODE XREF: start+81p
                pop     word_1EDFA
                mov     ds, PSP_SEG
                assume ds:nothing
                push    ss
                pop     es
                assume es:seg002
                mov     si, 80h ; 'Ç'
                lodsb
                cbw
                cmp     byte ptr es:DOSVersion, 3
                jb      short loc_1D328
                push    ax
                mov     es, ds:EnviroBlkSeg ; Segment of environment block
                assume es:nothing
                xor     ax, ax
                mov     cx, ax
                not     cx
                mov     di, ax

loc_1D2F0:                              ; CODE XREF: __setargv+29j
                repne scasb
                cmp     es:[di], al
                jnz     short loc_1D2F0
                add     di, 3
                mov     cx, ax
                not     cx
                push    di
                repne scasb
                pop     si
                add     cx, 2
                neg     cx
                pop     bx
                mov     ax, bx
                add     ax, cx
                add     ax, 3
                and     ax, 0FFFEh
                sub     sp, ax
                mov     di, sp
                push    ds
                push    es
                pop     ds
                assume ds:nothing
                push    ss
                pop     es
                assume es:seg002
                rep movsb
                mov     al, 20h ; ' '
                stosb
                mov     cx, bx
                pop     ds
                assume ds:nothing
                mov     si, 81h ; 'ü'
                jmp     short loc_1D336
; ---------------------------------------------------------------------------

loc_1D328:                              ; CODE XREF: __setargv+15j
                mov     cx, ax
                add     al, 4
                and     al, 0FEh
                sub     sp, ax
                mov     di, sp
                mov     ax, 2043h
                stosw

loc_1D336:                              ; CODE XREF: __setargv+5Aj
                rep movsb
                mov     ax, cx
                stosb
                mov     si, sp
                push    ss
                pop     ds
                assume ds:seg002
                push    ax
                mov     bx, sp

loc_1D342:                              ; CODE XREF: __setargv+80j
                                        ; __setargv+9Aj
                mov     di, si
                lodsb
                or      al, al
                jz      short loc_1D369
                call    sub_1D383
                jz      short loc_1D342
                dec     si
                push    si
                inc     argc

loc_1D354:                              ; CODE XREF: __setargv+94j
                lodsb
                call    sub_1D38A
                stosb
                or      al, al
                jz      short loc_1D369
                call    sub_1D383
                jnz     short loc_1D354
                mov     byte ptr [di-1], 0
                jmp     short loc_1D342
; ---------------------------------------------------------------------------
                stosb

loc_1D369:                              ; CODE XREF: __setargv+7Bj
                                        ; __setargv+8Fj
                mov     si, sp

loc_1D36B:                              ; CODE XREF: __setargv+ABj
                dec     bx
                dec     bx
                cmp     si, bx
                jnb     short loc_1D379
                lodsw
                xchg    ax, [bx]
                mov     [si-2], ax
                jmp     short loc_1D36B
; ---------------------------------------------------------------------------

loc_1D379:                              ; CODE XREF: __setargv+A3j
                mov     bx, sp
                mov     argv, sp
                jmp     word_1EDFA
__setargv       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1D383       proc near               ; CODE XREF: __setargv+7Dp
                                        ; __setargv+91p
                cmp     al, 9
                jz      short locret_1D389
                cmp     al, 20h ; ' '

locret_1D389:                           ; CODE XREF: sub_1D383+2j
                retn
sub_1D383       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1D38A       proc near               ; CODE XREF: __setargv+89p
                                        ; sub_1D38A+24j
                cmp     al, '\'
                jnz     short loc_1D396
                cmp     byte ptr [si], '"'
                jnz     short loc_1D396
                lodsb
                jmp     short locret_1D3B0
; ---------------------------------------------------------------------------

loc_1D396:                              ; CODE XREF: sub_1D38A+2j sub_1D38A+7j
                cmp     al, '"'
                jnz     short locret_1D3B0

loc_1D39A:                              ; CODE XREF: sub_1D38A+21j
                lodsb
                cmp     al, 0Dh
                jz      short locret_1D3B0
                cmp     al, '"'
                jnz     short loc_1D3AA
                cmp     byte ptr [si-2], '\'
                jnz     short loc_1D3AD
                dec     di

loc_1D3AA:                              ; CODE XREF: sub_1D38A+17j
                stosb
                jmp     short loc_1D39A
; ---------------------------------------------------------------------------

loc_1D3AD:                              ; CODE XREF: sub_1D38A+1Dj
                lodsb
                jmp     short sub_1D38A
; ---------------------------------------------------------------------------

locret_1D3B0:                           ; CODE XREF: sub_1D38A+Aj sub_1D38A+Ej
                                        ; sub_1D38A+13j
                retn
sub_1D38A       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; Attributes: library function bp-based frame

__setenvp       proc near               ; CODE XREF: start+84p
                push    bp
                mov     bp, sp
                push    bp
                mov     ds, PSP_SEG
                assume ds:nothing
                xor     cx, cx
                mov     ax, cx
                mov     bp, cx
                mov     di, cx
                dec     cx
                mov     si, ds:EnviroBlkSeg ; Segment of environment block
                or      si, si
                jz      short loc_1D3D2
                mov     es, si
                assume es:nothing

loc_1D3CC:                              ; CODE XREF: __setenvp+1Fj
                repne scasb
                inc     bp
                scasb
                jnz     short loc_1D3CC

loc_1D3D2:                              ; CODE XREF: __setenvp+17j
                inc     bp
                xchg    ax, di
                inc     ax
                and     al, 0FEh
                mov     di, bp
                shl     bp, 1
                add     ax, bp
                push    ss
                pop     ds
                assume ds:seg002
                push    di
                mov     di, 9
                call    __myalloc
                pop     di
                mov     cx, di
                mov     di, bp
                add     di, ax
                mov     envp, bp
                push    ds
                pop     es
                assume es:seg002
                mov     ds, si
                assume ds:nothing
                xor     si, si
                dec     cx
                jcxz    short loc_1D40D

loc_1D3FA:                              ; CODE XREF: __setenvp+5Aj
                cmp     word ptr [si], 433Bh
                jz      short loc_1D405
                mov     [bp+0], di
                inc     bp
                inc     bp

loc_1D405:                              ; CODE XREF: __setenvp+4Dj
                                        ; __setenvp+58j
                lodsb
                stosb
                or      al, al
                jnz     short loc_1D405
                loop    loc_1D3FA

loc_1D40D:                              ; CODE XREF: __setenvp+47j
                mov     [bp+0], cx
                push    ss
                pop     ds
                assume ds:seg002
                pop     bp
                mov     sp, bp
                pop     bp
                retn
__setenvp       endp ; sp =  2


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1D417       proc near               ; CODE XREF: sub_1CF66+2Ep
                                        ; sub_1CF66+52p sub_1CF66+6Ap
                                        ; sub_1CF66+87p
                call    sub_1D730
sub_1D417       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; Attributes: bp-based frame

_isatty         proc near               ; CODE XREF: __flsbuf+A3p

arg_0           = word ptr  4

                push    bp
                mov     bp, sp
                mov     bx, [bp+arg_0]
                cmp     bx, 14h
                jge     short loc_1D436
                cmp     bx, 0
                jl      short loc_1D436
                test    IOCTLFlags[bx], 40h
                jz      short loc_1D436
                mov     ax, 1
                jmp     short loc_1D438
; ---------------------------------------------------------------------------

loc_1D436:                              ; CODE XREF: _isatty+9j _isatty+Ej
                                        ; _isatty+15j
                xor     ax, ax

loc_1D438:                              ; CODE XREF: _isatty+1Aj
                mov     sp, bp
                pop     bp
                retn
_isatty         endp

; ---------------------------------------------------------------------------
                push    bp
                mov     bp, sp
                mov     bx, [bp+4]
                or      byte ptr [bx-2], 1
                mov     sp, bp
                pop     bp
                retn

; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; Attributes: bp-based frame

unknown_libname_2 proc near             ; CODE XREF: __flsbuf+E5p

arg_0           = word ptr  4

                push    bp
                mov     bp, sp
                push    si
                push    di
                mov     bx, offset word_1EF18
                cmp     word ptr [bx], 0
                jnz     short loc_1D480
                push    ds
                pop     es
                mov     ax, 5
                call    __amallocbrk
                jnz     short loc_1D466
                xor     ax, ax
                cwd
                jmp     short loc_1D48A
; ---------------------------------------------------------------------------

loc_1D466:                              ; CODE XREF: unknown_libname_2+15j
                inc     ax
                and     al, 0FEh
                mov     word_1EF18, ax
                mov     word_1EF1A, ax
                xchg    ax, si
                mov     word ptr [si], 1
                add     si, 4
                mov     word ptr [si-2], 0FFFEh
                mov     word_1EF1E, si

loc_1D480:                              ; CODE XREF: unknown_libname_2+Bj
                mov     cx, [bp+arg_0]
                mov     ax, ds
                mov     es, ax
                call    __amalloc

loc_1D48A:                              ; CODE XREF: unknown_libname_2+1Aj
                pop     di
                pop     si
                mov     sp, bp
                pop     bp
                retn
unknown_libname_2 endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; Attributes: library function

__myalloc       proc near               ; CODE XREF: __setenvp+32p
                mov     dx, ax
                add     ax, word_1EC36
                jb      short loc_1D4CD
                cmp     word_1EC32, ax
                jnb     short loc_1D4C3
                add     ax, 0Fh
                push    ax
                rcr     ax, 1
                mov     cl, 3
                shr     ax, cl
                mov     cx, ds
                mov     bx, PSP_SEG
                sub     cx, bx
                add     ax, cx
                mov     es, bx
                assume es:nothing
                mov     bx, ax
                mov     ah, 4Ah
                int     21h             ; DOS - 2+ - ADJUST MEMORY BLOCK SIZE (SETBLOCK)
                                        ; ES = segment address of block to change
                                        ; BX = new size in paragraphs
                pop     ax
                jb      short loc_1D4CD
                and     al, 0F0h
                dec     ax
                mov     word_1EC32, ax

loc_1D4C3:                              ; CODE XREF: __myalloc+Cj
                xchg    ax, bp
                mov     bp, word_1EC36
                add     word_1EC36, dx
                retn
; ---------------------------------------------------------------------------

loc_1D4CD:                              ; CODE XREF: __myalloc+6j
                                        ; __myalloc+2Bj
                mov     ax, di
                jmp     __amsg_exit
__myalloc       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; Attributes: bp-based frame

_strlen         proc near               ; CODE XREF: sub_1CD4D+D2p
                                        ; sub_1D11F+1Cp

arg_0           = word ptr  4

                push    bp
                mov     bp, sp
                push    di
                push    ds
                pop     es
                assume es:seg002
                mov     di, [bp+arg_0]
                xor     ax, ax
                mov     cx, 0FFFFh
                repne scasb
                mov     ax, cx
                inc     ax
                inc     ax
                neg     ax
                pop     di
                mov     sp, bp
                pop     bp
                retn
_strlen         endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; Attributes: bp-based frame

_ultoa          proc near               ; CODE XREF: sub_1CD4D+C4p
                push    bp
                mov     bp, sp
                push    si
                push    di
                mov     bl, 0
                jmp     __cltoasub
_ultoa          endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; Attributes: bp-based frame

_lseek          proc near               ; CODE XREF: __flsbuf+7Ep
                                        ; __flsbuf+10Fp _fflush+44p

arg_0           = word ptr  4
arg_2           = word ptr  6
arg_4           = word ptr  8

                push    bp
                mov     bp, sp
                mov     bx, [bp+arg_0]
                test    IOCTLFlags[bx], 20h
                jz      short loc_1D512
                mov     ax, 4202h
                xor     cx, cx
                mov     dx, cx
                int     21h             ; DOS - 2+ - MOVE FILE READ/WRITE POINTER (LSEEK)
                                        ; AL = method: offset from end of file
                jnb     short loc_1D512
                jmp     __dosretax
; ---------------------------------------------------------------------------

loc_1D512:                              ; CODE XREF: _lseek+Bj _lseek+16j
                test    IOCTLFlags[bx], 80h
                jnz     short loc_1D51C
                jmp     loc_1D59D
; ---------------------------------------------------------------------------

loc_1D51C:                              ; CODE XREF: _lseek+20j
                mov     cx, [bp+arg_4]
                mov     dx, [bp+arg_2]
                push    ds
                pop     es
                xor     ax, ax
                cld
                push    di
                push    si
                mov     si, ax
                mov     di, dx

loc_1D52D:                              ; CODE XREF: _lseek+6Fj
                jcxz    short loc_1D594
                mov     ax, 400Ah
                repne scasb
                jnz     short loc_1D568
                push    cx
                mov     cx, di
                sub     cx, dx
                dec     cx
                jcxz    short loc_1D54E
                int     21h             ; DOS - 2+ - WRITE TO FILE WITH HANDLE
                                        ; BX = file handle, CX = number of bytes to write, DS:DX -> buffer
                pushf
                add     si, ax
                popf
                jnb     short loc_1D54A
                mov     ah, 9
                jmp     short loc_1D593
; ---------------------------------------------------------------------------

loc_1D54A:                              ; CODE XREF: _lseek+4Dj
                or      ax, ax
                jz      short loc_1D57D

loc_1D54E:                              ; CODE XREF: _lseek+45j
                inc     si
                mov     cx, 2
                mov     dx, offset unk_1EF22
                mov     ah, 40h
                int     21h             ; DOS - 2+ - WRITE TO FILE WITH HANDLE
                                        ; BX = file handle, CX = number of bytes to write, DS:DX -> buffer
                jnb     short loc_1D55F
                mov     ah, 9
                jmp     short loc_1D593
; ---------------------------------------------------------------------------

loc_1D55F:                              ; CODE XREF: _lseek+62j
                or      ax, ax
                jz      short loc_1D57D
                pop     cx
                mov     dx, di
                jmp     short loc_1D52D
; ---------------------------------------------------------------------------

loc_1D568:                              ; CODE XREF: _lseek+3Dj
                push    cx
                mov     cx, di
                sub     cx, dx
                int     21h             ; DOS - PRINT STRING
                                        ; DS:DX -> string terminated by "$"
                pushf
                add     si, ax
                popf
                jnb     short loc_1D579
                mov     ah, 9
                jmp     short loc_1D593
; ---------------------------------------------------------------------------

loc_1D579:                              ; CODE XREF: _lseek+7Cj
                or      ax, ax
                jnz     short loc_1D593

loc_1D57D:                              ; CODE XREF: _lseek+55j _lseek+6Aj
                test    IOCTLFlags[bx], 40h
                jz      short loc_1D58F
                mov     bx, [bp+arg_2]
                cmp     byte ptr [bx], 1Ah
                jnz     short loc_1D58F
                clc
                jmp     short loc_1D593
; ---------------------------------------------------------------------------

loc_1D58F:                              ; CODE XREF: _lseek+8Bj _lseek+93j
                stc
                mov     ax, 1C00h

loc_1D593:                              ; CODE XREF: _lseek+51j _lseek+66j
                                        ; _lseek+80j _lseek+84j _lseek+96j
                pop     cx

loc_1D594:                              ; CODE XREF: _lseek+36j
                jb      short loc_1D598
                mov     ax, si

loc_1D598:                              ; CODE XREF: _lseek+9Dj
                pop     si
                pop     di

loc_1D59A:                              ; CODE XREF: _lseek+BDj _lseek+C1j
                                        ; _lseek+D2j _lseek+D8j
                jmp     __dosretax
; ---------------------------------------------------------------------------

loc_1D59D:                              ; CODE XREF: _lseek+22j
                mov     cx, [bp+arg_4]
                or      cx, cx
                jnz     short loc_1D5A9
                mov     ax, cx
                jmp     __dosretax
; ---------------------------------------------------------------------------

loc_1D5A9:                              ; CODE XREF: _lseek+ABj
                mov     dx, [bp+arg_2]
                mov     ah, 40h
                int     21h             ; DOS - 2+ - WRITE TO FILE WITH HANDLE
                                        ; BX = file handle, CX = number of bytes to write, DS:DX -> buffer
                jnb     short loc_1D5B6
                mov     ah, 9
                jmp     short loc_1D59A
; ---------------------------------------------------------------------------

loc_1D5B6:                              ; CODE XREF: _lseek+B9j
                or      ax, ax
                jnz     short loc_1D59A
                test    IOCTLFlags[bx], 40h
                jz      short loc_1D5CB
                mov     bx, dx
                cmp     byte ptr [bx], 1Ah
                jnz     short loc_1D5CB
                clc
                jmp     short loc_1D59A
; ---------------------------------------------------------------------------

loc_1D5CB:                              ; CODE XREF: _lseek+C8j _lseek+CFj
                stc
                mov     ax, 1C00h
                jmp     short loc_1D59A
_lseek          endp

; ---------------------------------------------------------------------------

loc_1D5D1:                              ; CODE XREF: __amalloc+3j
                jmp     loc_1D6A0

; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


__amalloc       proc near               ; CODE XREF: unknown_libname_2+3Dp
                cmp     cx, 0FFEEh
                jnb     short loc_1D5D1
                inc     cx
                and     cl, 0FEh
                mov     si, [bx+2]
                cld
                lodsw
                mov     di, si
                test    al, 1
                jz      short loc_1D62A

loc_1D5E8:                              ; CODE XREF: __amalloc+2Cj
                dec     ax
                cmp     ax, cx
                jnb     short loc_1D602
                mov     dx, ax
                add     si, ax
                lodsw
                test    al, 1
                jz      short loc_1D62A
                add     ax, dx
                add     ax, 2
                mov     si, di
                mov     [si-2], ax
                jmp     short loc_1D5E8
; ---------------------------------------------------------------------------

loc_1D602:                              ; CODE XREF: __amalloc+17j
                                        ; __amalloc+6Fj
                mov     di, si
                jz      short loc_1D612
                add     di, cx
                mov     [si-2], cx
                sub     ax, cx
                dec     ax
                mov     [di], ax
                jmp     short loc_1D617
; ---------------------------------------------------------------------------

loc_1D612:                              ; CODE XREF: __amalloc+30j
                add     di, cx
                dec     byte ptr [si-2]

loc_1D617:                              ; CODE XREF: __amalloc+3Cj
                mov     ax, si
                mov     dx, ds
                mov     cx, ss
                cmp     dx, cx
                jz      short loc_1D626
                mov     es:word_1EF28, ds

loc_1D626:                              ; CODE XREF: __amalloc+4Bj
                mov     [bx+2], di
                retn
; ---------------------------------------------------------------------------

loc_1D62A:                              ; CODE XREF: __amalloc+12j
                                        ; __amalloc+20j
                mov     es:byte_1EF2C, 2

loc_1D630:                              ; CODE XREF: __amalloc+68j
                                        ; __amalloc+78j
                cmp     ax, 0FFFEh
                jz      short loc_1D65A
                mov     di, si
                add     si, ax

loc_1D639:                              ; CODE XREF: __amalloc+A7j
                                        ; __amalloc+CAj
                lodsw
                test    al, 1
                jz      short loc_1D630
                mov     di, si

loc_1D640:                              ; CODE XREF: __amalloc+84j
                dec     ax
                cmp     ax, cx
                jnb     short loc_1D602
                mov     dx, ax
                add     si, ax
                lodsw
                test    al, 1
                jz      short loc_1D630
                add     ax, dx
                add     ax, 2
                mov     si, di
                mov     [si-2], ax
                jmp     short loc_1D640
; ---------------------------------------------------------------------------

loc_1D65A:                              ; CODE XREF: __amalloc+5Fj
                mov     ax, [bx+8]
                or      ax, ax
                jz      short loc_1D665
                mov     ds, ax
                assume ds:nothing
                jmp     short loc_1D679
; ---------------------------------------------------------------------------

loc_1D665:                              ; CODE XREF: __amalloc+8Bj
                dec     es:byte_1EF2C
                jz      short loc_1D67D
                mov     ax, ds
                mov     di, ss
                cmp     ax, di
                jz      short loc_1D679
                mov     ds, es:word_1EF24
                assume ds:nothing

loc_1D679:                              ; CODE XREF: __amalloc+8Fj
                                        ; __amalloc+9Ej
                mov     si, [bx]
                jmp     short loc_1D639
; ---------------------------------------------------------------------------

loc_1D67D:                              ; CODE XREF: __amalloc+96j
                mov     si, [bx+6]
                xor     ax, ax
                call    __amlink
                cmp     ax, si
                jz      short loc_1D696
                and     al, 1
                inc     ax
                inc     ax
                cbw
                call    __amlink
                jz      short loc_1D6A0
                dec     byte ptr [di-2]

loc_1D696:                              ; CODE XREF: __amalloc+B3j
                call    __amexpand
                jz      short loc_1D6A0
                xchg    ax, si
                dec     si
                dec     si
                jmp     short loc_1D639
; ---------------------------------------------------------------------------

loc_1D6A0:                              ; CODE XREF: seg001:D5D1j
                                        ; __amalloc+BDj __amalloc+C5j
                mov     ax, ds
                mov     cx, ss
                cmp     ax, cx
                jz      short loc_1D6AC
                mov     es:word_1EF28, ax

loc_1D6AC:                              ; CODE XREF: __amalloc+D2j
                mov     ax, [bx]
                mov     [bx+2], ax
                xor     ax, ax
                cwd
                retn
__amalloc       endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


__amexpand      proc near               ; CODE XREF: __amalloc+C2p
                push    cx
                mov     ax, [di-2]
                test    al, 1
                jz      short loc_1D6C0
                sub     cx, ax
                dec     cx

loc_1D6C0:                              ; CODE XREF: __amexpand+6j
                inc     cx
                inc     cx
                mov     dx, 7FFFh

loc_1D6C5:                              ; CODE XREF: __amexpand+19j
                cmp     dx, es:word_1EF2A
                jbe     short loc_1D6D0
                shr     dx, 1
                jnz     short loc_1D6C5

loc_1D6D0:                              ; CODE XREF: __amexpand+15j
                                        ; __amexpand+34j
                mov     ax, cx
                add     ax, si
                jb      short loc_1D6EB
                add     ax, dx
                jb      short loc_1D6E7
                not     dx
                and     ax, dx
                sub     ax, si
                call    __amlink
                jnz     short loc_1D6ED
                not     dx

loc_1D6E7:                              ; CODE XREF: __amexpand+23j
                shr     dx, 1
                jnz     short loc_1D6D0

loc_1D6EB:                              ; CODE XREF: __amexpand+1Fj
                xor     ax, ax

loc_1D6ED:                              ; CODE XREF: __amexpand+2Ej
                pop     cx
                retn
__amexpand      endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


__amlink        proc near               ; CODE XREF: __amalloc+AEp
                                        ; __amalloc+BAp __amexpand+2Bp
                push    dx
                push    cx
                call    __amallocbrk
                jz      short loc_1D70E
                push    di
                mov     di, si
                mov     si, ax
                add     si, dx
                mov     word ptr [si-2], 0FFFEh
                mov     [bx+6], si
                mov     dx, si
                sub     dx, di
                dec     dx
                mov     [di-2], dx
                pop     ax

loc_1D70E:                              ; CODE XREF: __amlink+5j
                pop     cx
                pop     dx
                retn
__amlink        endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


__amallocbrk    proc near               ; CODE XREF: unknown_libname_2+12p
                                        ; __amlink+2p
                push    bx
                push    ax
                xor     dx, dx
                push    ds
                push    dx
                push    dx
                push    ax
                mov     ax, 1
                push    ax
                push    es
                pop     ds
                assume ds:seg002
                call    _brkctl
                add     sp, 8
                cmp     dx, 0FFFFh
                pop     ds
                assume ds:nothing
                pop     dx
                pop     bx
                jz      short locret_1D72F
                or      dx, dx

locret_1D72F:                           ; CODE XREF: __amallocbrk+1Aj
                retn
__amallocbrk    endp


; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦


sub_1D730       proc near               ; CODE XREF: sub_1D417p
                mov     ax, 2
                jmp     __amsg_exit
sub_1D730       endp

; ---------------------------------------------------------------------------

_flushall:                              ; DATA XREF: seg002:164Co
                push    bp
                mov     bp, sp
                sub     sp, 4
                push    di
                push    si
                mov     si, offset unk_1EDFE
                sub     di, di
                jmp     short loc_1D759
; ---------------------------------------------------------------------------

loc_1D745:                              ; CODE XREF: seg001:D75Dj
                test    byte ptr [si+6], 83h
                jz      short loc_1D756
                push    si
                call    _fflush
                add     sp, 2
                inc     ax
                jz      short loc_1D756
                inc     di

loc_1D756:                              ; CODE XREF: seg001:D749j seg001:D753j
                add     si, 8

loc_1D759:                              ; CODE XREF: seg001:D743j
                cmp     ds:word_1EF16, si
                jnb     short loc_1D745
                mov     ax, di
                pop     si
                pop     di
                mov     sp, bp
                pop     bp
                retn
; ---------------------------------------------------------------------------

__cltoasub:                             ; CODE XREF: _ultoa+7j
                mov     cx, [bp+0Ah]
                mov     ax, [bp+4]
                mov     dx, [bp+6]
                mov     di, [bp+8]
                push    di
                push    ds
                pop     es
                assume es:nothing
                cld
                xchg    ax, bx
                or      al, al
                jz      short loc_1D78F
                cmp     cx, 0Ah
                jnz     short loc_1D78F
                or      dx, dx
                jns     short loc_1D78F
                mov     al, 2Dh ; '-'
                stosb
                neg     bx
                adc     dx, 0
                neg     dx

loc_1D78F:                              ; CODE XREF: seg001:D77Aj seg001:D77Fj
                                        ; seg001:D783j
                mov     si, di

loc_1D791:                              ; CODE XREF: seg001:D7ADj
                xchg    ax, dx
                xor     dx, dx
                or      ax, ax
                jz      short loc_1D79A
                div     cx

loc_1D79A:                              ; CODE XREF: seg001:D796j
                xchg    ax, bx
                div     cx
                xchg    ax, dx
                xchg    dx, bx
                add     al, 30h ; '0'
                cmp     al, 39h ; '9'
                jbe     short loc_1D7A8
                add     al, 27h ; '''

loc_1D7A8:                              ; CODE XREF: seg001:D7A4j
                stosb
                mov     ax, dx
                or      ax, bx
                jnz     short loc_1D791
                mov     [di], al
                dec     di

loc_1D7B2:                              ; CODE XREF: seg001:D7BBj
                lodsb
                xchg    al, [di]
                mov     [si-1], al
                dec     di
                cmp     si, di
                jb      short loc_1D7B2
                pop     ax
                pop     di
                pop     si
                mov     sp, bp
                pop     bp
                retn

; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; Attributes: library function bp-based frame

_brkctl         proc near               ; CODE XREF: __amallocbrk+Ep

arg_0           = word ptr  4
arg_2           = word ptr  6
arg_4           = word ptr  8
arg_8           = word ptr  0Ch

                push    bp
                mov     bp, sp
                push    si
                push    di
                push    es
                cmp     [bp+arg_4], 0
                jnz     short loc_1D808
                mov     di, offset word_1EC36
                mov     dx, [bp+arg_2]
                mov     ax, [bp+arg_0]
                dec     ax
                jnz     short loc_1D7E3
                call    sub_1D832
                jb      short loc_1D808
                jmp     short loc_1D82B
; ---------------------------------------------------------------------------

loc_1D7E3:                              ; CODE XREF: _brkctl+16j
                mov     si, ds:word_1EC86
                dec     ax
                jz      short loc_1D7FB
                cmp     si, di
                jz      short loc_1D7FB
                mov     ax, [si+2]
                mov     [bp+arg_8], ax
                push    si
                call    sub_1D832
                pop     si
                jnb     short loc_1D82B

loc_1D7FB:                              ; CODE XREF: _brkctl+24j _brkctl+28j
                add     si, 4
                cmp     si, offset word_1EC86
                jnb     short loc_1D808
                or      dx, dx
                jnz     short loc_1D80E

loc_1D808:                              ; CODE XREF: _brkctl+Aj _brkctl+1Bj
                                        ; _brkctl+3Ej _brkctl+59j
                mov     ax, 0FFFFh
                cwd
                jmp     short loc_1D82B
; ---------------------------------------------------------------------------

loc_1D80E:                              ; CODE XREF: _brkctl+42j
                mov     bx, dx
                add     bx, 0Fh
                rcr     bx, 1
                mov     cl, 3
                shr     bx, cl
                mov     ah, 48h
                int     21h             ; DOS - 2+ - ALLOCATE MEMORY
                                        ; BX = number of 16-byte paragraphs desired
                jb      short loc_1D808
                xchg    ax, dx
                mov     [si], ax
                mov     [si+2], dx
                mov     ds:word_1EC86, si
                xor     ax, ax

loc_1D82B:                              ; CODE XREF: _brkctl+1Dj _brkctl+35j
                                        ; _brkctl+48j
                pop     es
                assume es:nothing
                pop     di
                pop     si
                mov     sp, bp
                pop     bp
                retn
_brkctl         endp

; [00000056 BYTES: COLLAPSED FUNCTION sub_1D832. PRESS KEYPAD "+" TO EXPAND]

; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦

; Attributes: library function bp-based frame

_fflush         proc near               ; CODE XREF: seg001:D74Cp

var_4           = word ptr -4
arg_0           = word ptr  4

                push    bp
                mov     bp, sp
                sub     sp, 4
                push    di
                push    si
                mov     si, [bp+arg_0]
                sub     di, di
                mov     al, [si+6]
                and     al, 3
                cmp     al, 2
                jnz     short loc_1D8DE
                test    byte ptr [si+6], 8
                jnz     short loc_1D8B7
                mov     al, [si+7]
                cbw
                mov     bx, ax
                shl     bx, 1
                add     bx, ax
                shl     bx, 1
                test    ds:byte_1EE9E[bx], 1
                jz      short loc_1D8DE

loc_1D8B7:                              ; CODE XREF: _fflush+1Aj
                mov     ax, [si]
                sub     ax, [si+4]
                mov     [bp+var_4], ax
                or      ax, ax
                jle     short loc_1D8DE
                push    ax
                push    word ptr [si+4]
                mov     al, [si+7]
                cbw
                push    ax
                call    _lseek
                add     sp, 6
                cmp     ax, [bp+var_4]
                jz      short loc_1D8DE
                or      byte ptr [si+6], 20h
                mov     di, 0FFFFh

loc_1D8DE:                              ; CODE XREF: _fflush+14j _fflush+2Dj
                                        ; _fflush+39j _fflush+4Dj
                mov     ax, [si+4]
                mov     [si], ax
                mov     word ptr [si+2], 0
                mov     ax, di
                pop     si
                pop     di
                mov     sp, bp
                pop     bp
                retn
_fflush         endp

seg001          ends

; ---------------------------------------------------------------------------

; Segment type: Regular
seg002          segment byte public 'UNK' use16
                assume cs:seg002
                assume es:nothing, ss:nothing, ds:nothing, fs:nothing, gs:nothing
                db    0 ;
unk_1D8F1       db    0 ;
unk_1D8F2       db    0 ;
unk_1D8F3       db    0 ;
unk_1D8F4       db    0 ;
unk_1D8F5       db    0 ;
unk_1D8F6       db    0 ;
unk_1D8F7       db    0 ;               ; DATA XREF: sub_13AA7o
aCLibraryCCopyr db 'C Library - (C)Copyright Microsoft Corp 1986'
                db  1Fh ;
                db    0 ;
unk_1D926       db    0 ;
                db    0 ;
                db    0 ;
unk_1D929       db    0 ;
unk_1D92A       db    0 ;
                db    0 ;
unk_1D92C       db    0 ;
unk_1D92D       db    0 ;
unk_1D92E       db    0 ;
                db    0 ;
word_1D930      dw 0                    ; DATA XREF: sub_1BACE+37r
                                        ; sub_1BD04+9r sub_1BD04+A8r
                                        ; sub_1BD04+C3r sub_1BDF1+Cr
                                        ; sub_1BDF1+29r sub_1BEC1+Aw
                                        ; sub_1BEC1+28r sub_1BEC1+3Br
                                        ; sub_1BEC1+D5w
word_1D932      dw 0                    ; DATA XREF: sub_1B46B+17r
                                        ; sub_1BA38+56w sub_1BA38+5Fr
                                        ; sub_1BA38+68r sub_1BA38+7Dw
                                        ; sub_1BACE+56r sub_1BACE+60r
                                        ; sub_1BACE+A1r sub_1BD04+Cr
                                        ; sub_1BD04+13w sub_1BD04+16r
                                        ; sub_1BD04+24r sub_1BD04+3Fr
                                        ; sub_1BD04+74r sub_1BD04+7Bw
                                        ; sub_1BD04+84r sub_1BD04+8Er
                                        ; sub_1BD04+A2r sub_1BD04+AEw
                                        ; sub_1BD04+B5r sub_1BD04+C7r
                                        ; sub_1BD04+CDw sub_1BD04+D3r
                                        ; sub_1BD04+E0w
word_1D934      dw 0                    ; DATA XREF: sub_1BACE+98w
word_1D936      dw 0                    ; DATA XREF: sub_1B832+Fr
                                        ; sub_1B832+12w sub_1BA38+9r
                                        ; sub_1BA38+Cw
unk_1D938       db    0 ;
unk_1D939       db    0 ;
unk_1D93A       db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db 0
                db    0 ;
                db    0 ;
aC_img          db 'C:*.IMG',0          ; DATA XREF: sub_1BEC1+15w
unk_1D94A       db    0 ;               ; DATA XREF: sub_1B18F+Do sub_1B2C5+Ao
                                        ; sub_1B2C5+30o
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
aEnterNewImageN db 'Enter New Image Name >',0
unk_1D971       db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db 0
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
word_1E2B2      dw 0                    ; DATA XREF: sub_1B5CB+Eo sub_1B832+9w
                                        ; sub_1BEC1+8Ao
byte_1E2B4      db 0                    ; DATA XREF: sub_1B832+6Fw
                                        ; sub_1BEC1+A4o
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
byte_1E2D4      db 0                    ; DATA XREF: sub_1B832+74w
                                        ; sub_1BEC1+B5o
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
aBadFilename    db 'Bad Filename',0     ; DATA XREF: sub_1B8C6+8Eo
aFileExists     db 'File Exists',0      ; DATA XREF: sub_1B8C6+D8o
aCreateFailure  db 'Create Failure',0   ; DATA XREF: sub_1B8C6+FAo
aInfo           db 'Info>',0            ; DATA XREF: sub_1B8C6+106o
aNoImageAvailab db 'No Image Available',0 ; DATA XREF: sub_1BACE+46o
aCS_img         db '%c:%s.IMG',0        ; DATA XREF: sub_1BB88+12o
asc_1E81F       db ':',0                ; DATA XREF: sub_1BBAF+1Co
aInfo_0         db 'Info >',0           ; DATA XREF: sub_1BC7B+12o
aDm             db 'DM',0               ; DATA XREF: sub_1C067+8o
aCr             db 'CR',0               ; DATA XREF: seg001:C082o
aLoadingImageS_ db 'Loading Image %s ...',0 ; DATA XREF: sub_1C08D+6Co
aSEnterToContin db '%s - [Enter] To Continue',0 ; DATA XREF: sub_1C147+Fo
DiskXferBuff    db    0 ;               ; DATA XREF: __dos_findfirst+3o
                                        ; __dos_findfirst+1Eo sub_1C2FAo
                                        ; sub_1C2FA+16o
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
unk_1E888       db    0 ;               ; DATA XREF: sub_1C317+11o
                                        ; sub_1C317+1Ao
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
asc_1E8D8       db '+---------------------------------------------+',0
                                        ; DATA XREF: sub_1BE26+9o
                                        ; sub_1C08D+26o
asc_1E908       db '¦                                             ¦',0
                                        ; DATA XREF: sub_1BE26+24o
                                        ; sub_1BE26+58o sub_1BE26+6Eo
                                        ; sub_1C08D+3Co
asc_1E938       db '¦---------------------------------------------¦',0
                                        ; DATA XREF: sub_1BE26+42o
asc_1E968       db '+---------------------------------------------+',0
                                        ; DATA XREF: sub_1BE26+84o
                                        ; sub_1C08D+52o
byte_1E998      db 0                    ; DATA XREF: sub_1C396+2Ar
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db  8Fh ; Å
                db 0D1h ; -
                db 0D8h ; +
                db 0C5h ; +
                db 0D2h ; -
                db 0D4h ; +
                db 0D9h ; +
                db 0D5h ; +
                db 0C9h ; +
                db 0CFh ; -
                db 0D0h ; -
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db 0C1h ; -
                db 0D3h ; +
                db 0C4h ; -
                db 0C6h ; ¦
                db 0C7h ; ¦
                db 0C8h ; +
                db 0CAh ; -
                db 0CBh ; -
                db 0CCh ; ¦
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db 0DAh ; +
                db 0D8h ; +
                db 0C3h ; +
                db 0D6h ; +
                db 0C2h ; -
                db 0CEh ; +
                db 0CDh ; -
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db  80h ; Ç
                db  81h ; ü
                db  82h ; é
                db  83h ; â
                db  84h ; ä
                db  85h ; à
                db  86h ; å
                db  87h ; ç
                db  88h ; ê
                db  89h ; ë
                db    0 ;
                db    0 ;
                db  8Ah ; è
                db  8Dh ; ì
                db  9Ah ; Ü
                db    0 ;
                db  8Bh ; ï
                db    0 ;
                db  9Bh ; ¢
                db    0 ;
                db  8Ch ; î
                db  8Eh ; Ä
                db  9Ch ; £
                db  9Dh ; ¥
                db  9Eh ; P
                db  90h ; É
                db  91h ; æ
                db  92h ; Æ
                db  93h ; ô
                db  94h ; ö
                db  95h ; ò
                db  96h ; û
                db  97h ; ù
                db  98h ; ÿ
                db  99h ; Ö
                db 0A0h ; á
                db 0A1h ; í
                db 0A2h ; ó
                db 0A3h ; ú
                db 0A4h ; ñ
                db 0A5h ; Ñ
                db 0A6h ; ª
                db 0A7h ; º
                db 0A8h ; ¿
                db 0A9h ; ¬
                db 0E0h ; a
                db 0E1h ; ß
                db 0E2h ; G
                db 0E3h ; p
                db 0E4h ; S
                db 0E5h ; s
                db 0E6h ; µ
                db 0E7h ; t
                db 0E8h ; F
                db 0E9h ; T
                db 0AEh ; «
                db 0ABh ; ½
                db 0BBh ; +
                db 0ACh ; ¼
                db 0BCh ; +
                db 0AAh ; ¬
                db 0B1h ; ¦
                db 0B2h ; ¦
                db 0B3h ; ¦
                db 0B4h ; ¦
                db 0B5h ; ¦
                db 0B6h ; ¦
                db 0B7h ; +
                db 0B8h ; +
                db 0B9h ; ¦
                db 0B0h ; ¦
                db 0BDh ; +
                db 0BEh ; +
                db 0BAh ; ¦
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
DiskXferBuf2    db    0 ;               ; DATA XREF: sub_1C581+Ao
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
word_1EC30      dw 1C80h                ; DATA XREF: __chkstk+7r
word_1EC32      dw 0                    ; DATA XREF: start+52w __myalloc+8r
                                        ; __myalloc+30w sub_1D832+24r
                                        ; sub_1D832+4Cw
word_1EC34      dw 0                    ; DATA XREF: start+46w
word_1EC36      dw 0                    ; DATA XREF: start+41w __myalloc+2r
                                        ; __myalloc+34r __myalloc+38w
                                        ; _brkctl+Co
                dw seg seg002
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
word_1EC86      dw 1346h                ; DATA XREF: _brkctl+1Fr _brkctl+3Ao
                                        ; _brkctl+61w
                db    0 ;
asc_1EC89       db '         (((((                  H' ; DATA XREF: sub_1B8C6+6Cr
                                        ; sub_1BFA8+50r
                db  10h ;
                db  10h ;
                db  10h ;
                db  10h ;
                db  10h ;
                db  10h ;
                db  10h ;
                db  10h ;
                db  10h ;
                db  10h ;
                db  10h ;
                db  10h ;
                db  10h ;
                db  10h ;
                db  10h ;
                db  84h ; ä
                db  84h ; ä
                db  84h ; ä
                db  84h ; ä
                db  84h ; ä
                db  84h ; ä
                db  84h ; ä
                db  84h ; ä
                db  84h ; ä
                db  84h ; ä
                db  10h ;
                db  10h ;
                db  10h ;
                db  10h ;
                db  10h ;
                db  10h ;
                db  10h ;
                db  81h ; ü
                db  81h ; ü
                db  81h ; ü
                db  81h ; ü
                db  81h ; ü
                db  81h ; ü
                db    1 ;
                db    1 ;
                db    1 ;
                db    1 ;
                db    1 ;
                db    1 ;
                db    1 ;
                db    1 ;
                db    1 ;
                db    1 ;
                db    1 ;
                db    1 ;
                db    1 ;
                db    1 ;
                db    1 ;
                db    1 ;
                db    1 ;
                db    1 ;
                db    1 ;
                db    1 ;
                db  10h ;
                db  10h ;
                db  10h ;
                db  10h ;
                db  10h ;
                db  10h ;
                db  82h ; é
                db  82h ; é
                db  82h ; é
                db  82h ; é
                db  82h ; é
                db  82h ; é
                db    2 ;
                db    2 ;
                db    2 ;
                db    2 ;
                db    2 ;
                db    2 ;
                db    2 ;
                db    2 ;
                db    2 ;
                db    2 ;
                db    2 ;
                db    2 ;
                db    2 ;
                db    2 ;
                db    2 ;
                db    2 ;
                db    2 ;
                db    2 ;
                db    2 ;
                db    2 ;
                db  10h ;
                db  10h ;
                db  10h ;
                db  10h ;
                db  20h ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
unk_1ED8A       db  3Bh ; ;             ; DATA XREF: __cinit+7Co
aC_file_info    db 'C_FILE_INFO'
OldInt0Vector   dd 0                    ; DATA XREF: __cinit+23w __ctermsub+Er
                                        ; __cinit+27w
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
word_1EDA2      dw 0                    ; DATA XREF: sub_1CA36+26w
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
PSP_SEG         dw 0                    ; DATA XREF: start+66w __cinit+3Dr
                                        ; __cinit+64r __setargv+4r
                                        ; __setenvp+4r __myalloc+1Ar
                                        ; sub_1D832+3Br
DOSVersion      dw 0                    ; DATA XREF: __cinit+4w sub_1CA36+7r
                                        ; __setargv+Fr
byte_1EDAC      db 0                    ; DATA XREF: sub_1CA36w
                db    0 ;
IOCTLFlags      db 3 dup(81h), 2 dup(1) ; DATA XREF: _close+Cw __cinit+16w
                                        ; __cinit+94o _isatty+10r _lseek+6r
                                        ; _lseek+1Br _lseek+86r _lseek+C3r
                                        ; 1 byte per file handle, bit 6 is character/file flag, other bits not known yet.
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
argc            dw 0                    ; DATA XREF: start+91r __setargv+84w
                                        ; the name is a guess
argv            dw 0                    ; DATA XREF: start+8Dr __setargv+AFw
                                        ; the name is a guess
envp            dw 0                    ; DATA XREF: start+89r __setenvp+3Cw
                                        ; the name is a guess
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
unk_1EDD2       db    0 ;               ; DATA XREF: sub_1CA36+21o
                db  16h ;
                db    2 ;
                db    2 ;
                db  18h ;
                db  0Dh ;
                db    9 ;
                db  0Ch ;
                db  0Ch ;
                db  0Ch ;
                db    7 ;
                db    8 ;
                db 0FFh ;
                db 0FFh ;
                db 0FFh ;
                db  12h ;
                db  0Dh ;
                db  12h ;
                db    2 ;
                db 0FFh ;
aNull           db '(null)',0           ; DATA XREF: sub_1CE82+6Bo
aNull_0         db '(null)',0           ; DATA XREF: sub_1CE82+76o
asc_1EDF4       db '+- #',0             ; DATA XREF: sub_1D2A4+Ao
                db    0 ;
word_1EDFA      dw 0                    ; DATA XREF: __setargvw __setargv+B3r
word_1EDFC      dw 0                    ; DATA XREF: __flsbuf+ADw
unk_1EDFE       db  80h ; Ç             ; DATA XREF: seg001:D73Eo
                db  19h ;
                db    0 ;
                db    0 ;
                db  80h ; Ç
                db  19h ;
                db    1 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    2 ;
                db    1 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    6 ;
                db    2 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db  84h ; ä
                db    3 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    2 ;
                db    4 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
byte_1EE9E      db 1                    ; DATA XREF: __flsbuf+4Br __flsbuf+C2w
                                        ; _fflush+28r
                db    0 ;
word_1EEA0      dw 200h                 ; DATA XREF: __flsbuf+69r __flsbuf+D4w
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
                db    0 ;
word_1EF16      dw 15A6h                ; DATA XREF: seg001:D759r
word_1EF18      dw 0                    ; DATA XREF: unknown_libname_2+5o
                                        ; unknown_libname_2+1Fw
word_1EF1A      dw 0                    ; DATA XREF: unknown_libname_2+22w
                db    0 ;
                db    0 ;
word_1EF1E      dw 0                    ; DATA XREF: unknown_libname_2+32w
                db    0 ;
                db    0 ;
unk_1EF22       db  0Dh ;               ; DATA XREF: _lseek+5Bo
                db  0Ah ;
word_1EF24      dw 0                    ; DATA XREF: __amalloc+A0r
                align 4
word_1EF28      dw 0                    ; DATA XREF: __amalloc+4Dw
                                        ; __amalloc+D4w
word_1EF2A      dw 2000h                ; DATA XREF: __amexpand+10r
byte_1EF2C      db 0                    ; DATA XREF: __amalloc+56w
                                        ; __amalloc+91w
                align 4
unk_1EF30       db    0 ;               ; DATA XREF: __cinit+4Er __cinit+5Dr
                                        ; __ctermsub+9r
                db    0 ;
word_1EF32      dw 0                    ; DATA XREF: __cinit+37r __ctermsubr
dword_1EF34     dd 0                    ; DATA XREF: __cinit+46r
dword_1EF38     dd 0                    ; DATA XREF: __cinit+53r
off_1EF3C       dw offset _flushall     ; DATA XREF: __cinit+A5o __cinit+A8o
                                        ; seg001:C9BDo
aNmsg           db '<<NMSG>>'           ; DATA XREF: seg001:C9C0o
Nmsg_Text       dw 1                    ; DATA XREF: __NMSG_TEXT+Fo
                                        ; NMSG1
aError2001NullP db 0Dh,0Ah
                db 'error 2001: Null pointer assignment',0Dh,0Ah,0
                dw 0                    ; NMSG0
aError2000Stack db 0Dh,0Ah
                db 'error 2000: Stack overflow',0Dh,0Ah,0
                dw 3                    ; NMSG3
aError2003Integ db 0Dh,0Ah
                db 'error 2003: Integer divide by 0',0Dh,0Ah,0
                dw 4                    ; NMSG4
aError2004Dos2_ db 0Dh,0Ah
                db 'error 2004: DOS 2.0 or later required',0Dh,0Ah
                db '$',0
                dw 9                    ; NMSG9
aError2009NotEn db 0Dh,0Ah
                db 'error 2009: Not enough space for environment',0Dh,0Ah,0
                dw 2                    ; NMSG2
aError2002Float db 0Dh,0Ah
                db 'error 2002: Floating point not loaded',0Dh,0Ah,0
                db 0FFh ;
                db 0FFh ;
                db 0FFh ;
word_1F046      dw 0                    ; DATA XREF: start+6Eo __output+43w
                                        ; __output+13Cw __output+190w
                                        ; sub_1CD4D+F5r sub_1CF66+1Cr
                                        ; sub_1D206+19r
word_1F048      dw 0                    ; DATA XREF: __output+4Fw __output+84w
                                        ; __output+98w sub_1CD4D+115r
                                        ; sub_1CF66+7Er
word_1F04A      dw 0                    ; DATA XREF: __output+1Ew
                                        ; __output+23Er __output+278r
                                        ; sub_1D006+10r sub_1D006+1Cr
                                        ; sub_1D006+2Ar sub_1D04F+1Br
                                        ; sub_1D04F+27r sub_1D04F+35r
                                        ; sub_1D0B4+17r sub_1D0B4+26r
                                        ; sub_1D0B4+34r
word_1F04C      dw 0                    ; DATA XREF: __output+52w
                                        ; __output+186w
word_1F04E      dw 0                    ; DATA XREF: __output+49w __output+F3w
                                        ; __output+F9r __output+10Ew
                                        ; __output+116w __output+11Ew
                                        ; __output+198r __output+19Fr
                                        ; __output+1A6w __output+1F6r
                                        ; sub_1CD4D+15r sub_1CD4D+1Cr
                                        ; sub_1CE82+2Br sub_1CE82+5Cr
word_1F050      dw ?                    ; DATA XREF: __output+18w
                                        ; __output+15Cr __output+1ACw
                                        ; __output+1C5w __output+1D4w
                                        ; sub_1CD4D+23r sub_1CD4D+32w
                                        ; sub_1CD4D+40r sub_1CD4D+50r
                                        ; sub_1CD4D+5Dw sub_1CE82+1Ar
                                        ; sub_1CE82+23w sub_1CE82+32r
                                        ; sub_1CE82+41w sub_1CE82+48r
                                        ; sub_1CE82+57w sub_1CF66+9r
                                        ; sub_1CF66+70w sub_1D239+13r
                                        ; sub_1D239+1Cw
word_1F052      dw ?                    ; DATA XREF: __output+4Cw __output+C3w
                                        ; __output+194w sub_1CD4D+CAr
                                        ; sub_1CE82+9Cr sub_1CF66+Fr
                                        ; sub_1D239+30r
word_1F054      dw ?                    ; DATA XREF: __output+12w
                                        ; sub_1CD4D+7Br sub_1CF66+27r
                                        ; sub_1CF66+4Er sub_1CF66+66r
                                        ; sub_1D11F+Br
word_1F056      dw ?                    ; DATA XREF: __output+5Bw __output+68w
                                        ; sub_1CE82+Bw sub_1D04F+24r
                                        ; sub_1D04F+39r sub_1D11F+36r
                                        ; sub_1D11F+49r sub_1D11F+B5w
                                        ; sub_1D239+3Bw
word_1F058      dw ?                    ; DATA XREF: __output+40w __output+80w
                                        ; __output+91r sub_1CD4D+112r
                                        ; sub_1CF66+7Br sub_1D1E7+8r
word_1F05A      dw ?                    ; DATA XREF: __output+38w __output+C9o
                                        ; __output+18Aw sub_1CD4D+D8r
                                        ; sub_1CE82+A5r sub_1CE82+ABr
                                        ; sub_1CF66+16w sub_1CF66+20r
                                        ; sub_1CF66+47r sub_1CF66+5Fr
word_1F05C      dw ?                    ; DATA XREF: __output+46w
                                        ; __output+16Aw sub_1CD4D+11w
                                        ; sub_1CD4D+39r sub_1CD4D+7Fr
                                        ; sub_1CD4D+10Br
word_1F05E      dw ?                    ; DATA XREF: __output+B2o
                                        ; sub_1CE82+AFr sub_1D11F+17r
word_1F060      dw ?                    ; DATA XREF: __output+27w
                                        ; __output+162r __output+237r
                                        ; __output+271r __output+287r
                                        ; sub_1D006+40w sub_1D04F+5Bw
                                        ; sub_1D0B4+61w
word_1F062      dw ?                    ; DATA XREF: __output+21w
                                        ; __output+230r sub_1D006+9r
                                        ; sub_1D006+3Aw sub_1D04F+Br
                                        ; sub_1D04F+46w sub_1D04F+51r
                                        ; sub_1D0B4+Er sub_1D0B4+49w
                                        ; sub_1D0B4+57r
word_1F064      dw ?                    ; DATA XREF: sub_1CD4D+78w
                                        ; sub_1CF66+75w sub_1D11F+67r
                                        ; sub_1D11F+91r sub_1D206+12r
word_1F066      dw ?                    ; DATA XREF: __output+55w __output+9Ew
                                        ; __output+16Ew sub_1CD4D+62r
                                        ; sub_1CF66+40r sub_1CF66+58r
word_1F068      dw ?                    ; DATA XREF: __output+58w __output+75w
                                        ; sub_1CE82+B5r sub_1CE82+D0r
                                        ; sub_1D11F+2Ar sub_1D11F+54r
                                        ; sub_1D11F+74r sub_1D11F+AEr
unk_1F06A       db    ? ;               ; DATA XREF: seg001:C9B4o seg001:C9B7o
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
                db    ? ;
TopOfStack      db    ? ;               ; DATA XREF: start+2Bo
                db    ? ;
seg002          ends

; ---------------------------------------------------------------------------

; Segment type: Uninitialized
seg003          segment byte stack 'STACK' use16
                assume cs:seg003
                assume es:nothing, ss:nothing, ds:nothing, fs:nothing, gs:nothing
byte_1F470      db 400h dup(?)
seg003          ends


                end start