.model tiny .data shitpic db 1,1, 1,11, 32, 54,20,62,127,107,127,119,127,99,127,62 oldpic db 1,1,2,7,32, 116,175, 132,164, 132,164, 103,164 db 20,164, 20,164, 228, 164 numb db 6 curs1 db 1,1, 0,0, 62,13, 1,1, 1,1, 1,1, 32 curs2 db 4,5, 0,0, 62,13, 1,1, 2,1, 2,1, 64 curs3 db 20,10, 0,0, 62,13, -1,1, 1,2, 1,2, 96 curs4 db 60,1, 0,0, 62,13, 1,-1, 2,2, 2,2, 16 curs5 db 40,7, 0,0, 62,13, -1,-1, 3,3, 3,3, 48 curs6 db 1,12, 0,0, 62,13, 1,1, 1,1, 1,1, 64+16 oldshit db 16*8 dup(?) count db 11 shitptr dw 0 SFlag dw 1080 SStart dw 1080 keyed db 0 vstate db 0,0,0 cpos db 0,0,0,0 OldKey label dword KeyIP dw 0 KeyCS dw 0 OldInt8 label dword oldIP dw ? oldCS dw ? .code cls proc mov di, 4001 cagain: mov byte ptr es:[di]-1, 0 dec di jnz cagain ret cls endp animblit proc mov dl, [si] mov dh, [si]+1 mov cl, [si]+8 dec cl mov [si]+8, cl jnz vert mov cl, [si]+10 mov [si]+8, cl mov cl, [si]+6 add dl, cl mov cl, [si]+2 cmp dl, cl jnz anskip1 mov cl, 1 mov [si]+6, cl anskip1: mov cl, [si]+4 cmp dl, cl jnz vert mov cl, -1 mov [si]+6, cl vert: mov ch, [si]+9 dec ch mov [si]+9, ch jnz novert mov ch, [si]+11 mov [si]+9, ch mov ch, [si]+7 add dh, ch mov ch, [si]+3 cmp dh, ch jnz anskip2 mov ch, 1 mov [si]+7, ch anskip2: mov ch, [si]+5 cmp dh, ch jnz novert mov ch, -1 mov [si]+7, ch novert: mov [si], dl mov [si]+1, dh ret animblit endp blit proc lea di, oldshit mov shitptr, di mov dl, [si] mov dh, [si]+1 call plot mov al, 160 mov dl, [si]+2 sal dl, 4 sub al, dl mov dl, [si]+4 mov bx, si add bx, 4 mov ch, [si]+3 roow: mov cl, [si]+2 pix: inc bx mov ah, [bx] mov dh, 128 pigain: test dh, ah jz nopix cmp dl, 0 jne cupy push di mov di, shitptr mov dl, [di] inc word ptr shitptr pop di mov es:[di]+1, dl mov dl, 0 jmp nopix cupy: push di push dx mov dl,es:[di]+1 mov di, shitptr mov byte ptr [di], 0 inc word ptr shitptr pop dx pop di doit: mov es:[di]+1, dl nopix: add di, 2 clc rcr dh, 1 jnc pigain dec cl jnz pix mov ah, 0 add di, ax dec ch jnz roow stp: ret blit endp plot proc and bh, 0 and di, 0 mov bl, dh sal bx, 4 add di, bx sal bx, 2 add di, bx and dh, 0 add di, dx sal di, 1 ret plot endp start: jmp installation shit: .286 pusha push es push ds push cs pop ds mov ax, 0ba00h mov es, ax main: cmp word ptr SFlag, 0 je SaOk dec word ptr SFlag cmp word ptr SFlag, 0 jne stillok call cls mov ah, 0fh int 10h ; get current video info mov vstate, al mov vstate+1, bh mov ah, 3 ; get current cursor position and size int 10h mov cpos, dh mov cpos+1, dl mov cpos+2, ch mov cpos+3, cl mov ah, 0 ; set text video mode mov al, 131 int 10h mov ah, 5 mov al, 2 int 10h stillok: jmp skipblit SaOk: mov cl, count cmp cl, 11 jne nostart lea si, shitpic call blit nostart: dec byte ptr count cmp cl, 0 jne skipblit mov byte ptr count, 2 blitit: lea di, numb mov bl, [di] inc di ForBL: mov dl, [di] mov dh, [di]+1 push bx push di lea si, shitpic mov [si], dl mov [si]+1, dh mov byte ptr [si]+4, 0 call blit pop si push si call animblit mov cl, [si]+12 mov dl, [si] mov dh, [si]+1 lea si, shitpic mov [si],dl mov [si]+1, dh mov [si]+4, cl call blit pop di pop bx add di, 13 dec bl jnz ForBL skipblit: cmp byte ptr keyed, 0 je nokey mov byte ptr keyed, 0 cmp word ptr SFlag, 0 jnz IzNotZ mov ah, 0 add vstate, 128 mov al, vstate int 10h mov ah, 5 mov al, vstate+1 int 10h mov dh, cpos mov dl, cpos+1 mov bh, vstate+1 mov ah, 2 int 10h mov ch, cpos+2 mov cl, cpos+3 mov ah, 1 int 10h IzNotZ: mov ax, SStart mov SFlag, ax nokey: pop ds pop es popa jmp cs:oldInt8 NewKey: push ds push cs pop ds mov byte ptr keyed, 1 pop ds jmp cs:OldKey installation: push cs pop ds 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, shit mov es:[4*8], ax mov al, 9h mov ah, 35h int 21h mov KeyIP, bx mov KeyCS, es lea dx, NewKey mov al, 9h mov ah, 25h int 21h mov dx, 200h mov al ,0 mov ah, 31h int 21h end start