; ---------------------------------------------------------------------------
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