tasm + vodka =by moi (no login);Compile with TASM 3.1 ;MOVE THE MOUSE .model huge .486 .stack 200h .data vscreen_buffer db 64000 dup(0) msg1 db "Move the mouse$" first_frame db 1 err1 db "Reallocation failed.$" err2 db "Buffer allocation failed.$" ;buffer dw 0A000h buffer dw 0A000h buffer_off dw 0 mouse_x dw 0 mouse_y dw 0 NUM_POINTS equ 63 points dw NUM_POINTS*2 dup(-1) row_offset dw 0, 320, 640, 960, 1280, 1600, 1920, 2240, 2560, 2880, 3200, 3520, 3840, 4160 dw 4480, 4800, 5120, 5440, 5760, 6080, 6400, 6720, 7040, 7360, 7680, 8000, 8320 dw 8640, 8960, 9280, 9600, 9920, 10240, 10560, 10880, 11200, 11520, 11840, 12160 dw 12480, 12800, 13120, 13440, 13760, 14080, 14400, 14720, 15040, 15360, 15680 dw 16000, 16320, 16640, 16960, 17280, 17600, 17920, 18240, 18560, 18880, 19200 dw 19520, 19840, 20160, 20480, 20800, 21120, 21440, 21760, 22080, 22400, 22720 dw 23040, 23360, 23680, 24000, 24320, 24640, 24960, 25280, 25600, 25920, 26240 dw 26560, 26880, 27200, 27520, 27840, 28160, 28480, 28800, 29120, 29440, 29760 dw 30080, 30400, 30720, 31040, 31360, 31680, 32000, 32320, 32640, 32960, 33280 dw 33600, 33920, 34240, 34560, 34880, 35200, 35520, 35840, 36160, 36480, 36800 dw 37120, 37440, 37760, 38080, 38400, 38720, 39040, 39360, 39680, 40000, 40320 dw 40640, 40960, 41280, 41600, 41920, 42240, 42560, 42880, 43200, 43520, 43840 dw 44160, 44480, 44800, 45120, 45440, 45760, 46080, 46400, 46720, 47040, 47360 dw 47680, 48000, 48320, 48640, 48960, 49280, 49600, 49920, 50240, 50560, 50880 dw 51200, 51520, 51840, 52160, 52480, 52800, 53120, 53440, 53760, 54080, 54400 dw 54720, 55040, 55360, 55680, 56000, 56320, 56640, 56960, 57280, 57600, 57920 dw 58240, 58560, 58880, 59200, 59520, 59840, 60160, 60480, 60800, 61120, 61440 dw 61760, 62080, 62400, 62720, 63040, 63360, 63680 ldx dw ? ldy dw ? lcx dw ? lcy dw ? lsx dw ? lsy dw ? lax dw ? lay dw ? ldx2 dw ? ldy2 dw ? ldymdx2 dw ? ldxmdy2 dw ? sign dw 0FFFFh, 0, 1 abs_xor dw 0FFFFh, 0, 0 abs_add dw 1, 0, 0 .code set_screen proc ;dw mode push bp mov bp,sp mov ax,word ptr [bp+06] pop bp int 10h ret 2 set_screen endp init_mouse proc xor ax,ax int 33h ret init_mouse endp show_mouse proc mov ax,1 int 33h ret show_mouse endp hide_mouse proc mov ax,2 int 33h ret hide_mouse endp get_mouse proc mov ax,3 int 33h ret get_mouse endp getch proc xor ah,ah int 16h ret getch endp quit proc mov ax,4C00h int 21h quit endp bcls proc mov ax,buffer mov es,ax xor di,di cld mov cx,16000 xor eax,eax rep stosd ret bcls endp bpset proc ;dw x, dw y, dw c push bp mov bp,sp mov bx,word ptr [bp+08] mov dx,bx shl dx,6 shl bx,8 add bx,dx add bx,word ptr [bp+10] mov al,byte ptr [bp+06] mov cx,buffer mov es,cx mov byte ptr es:[bx],al pop bp ret 06 bpset endp bcopy proc push ds mov ax,buffer mov ds,ax mov bx,0A000h mov es,bx xor si,si xor di,di mov cx,16000 cld rep movsd pop ds ret bcopy endp print proc ;dw buf push bp mov bp,sp mov ah,9 mov dx,word ptr [bp+06] int 21h pop bp ret 02 print endp init_gfx_buffer proc mov buffer,seg vscreen_buffer mov buffer_off,offset vscreen_buffer ret mov ah,62h int 21h mov es,bx mov ax,4Ah mov bx,1000 int 21h jc init_gfx_buffer__error_1 mov ah,48h mov bx,4000 int 21h jc init_gfx_buffer__error_2 mov buffer,ax ret init_gfx_buffer__error_1: push 3 call set_screen mov ax,offset err1 push ax call print call getch call quit init_gfx_buffer__error_2: push 3 call set_screen mov ax,offset err2 push ax call print call getch call quit init_gfx_buffer endp vsync proc mov dx,3DAh vsync_1: in al,dx and al,8 jz vsync_1 vsync_2: in al,dx and al,8 jnz vsync_2 ret vsync endp add_point proc ;dw x, dw y push bp mov bp,sp mov di,NUM_POINTS*4 ;add_point__1: ;sub di,4 ;push dword ptr points[di-04] ;pop dword ptr points[di] ;cmp di,4 ;ja add_point__1 mov ax,word ptr [bp+08] mov bx,word ptr [bp+06] mov word ptr points[0],ax mov word ptr points[2],bx pop bp ret 04 add_point endp set_pal proc ;dw c, dw r, dw g, dw b push bp mov bp,sp mov dx,3C8h mov al,byte ptr [bp+12] out dx,al inc dx mov al,byte ptr [bp+10] out dx,al mov al,byte ptr [bp+08] out dx,al mov al,byte ptr [bp+06] out dx,al pop bp ret 08 set_pal endp make_pal_gradient proc xor cx,cx make_pal_gradient__1: push cx push cx push cx push cx call set_pal inc cx cmp cx,64 jb make_pal_gradient__1 ret make_pal_gradient endp bline PROC ;dw x1, dw y1, dw x2, dw y2, dw c push bp mov bp,sp mov ax,buffer mov es,ax mov ax,word ptr [bp+10] sub ax,word ptr [bp+14] mov ldx,ax ;ldx = x2 - x1 mov ax,word ptr [bp+08] sub ax,word ptr [bp+12] mov ldy,ax ;ldy = y2 - y1 mov si,word ptr [bp+14] mov di,word ptr [bp+12] mov bx,di ;lay = y1 add bx,bx mov bx,word ptr row_offset[bx] add bx,si mov al,byte ptr [bp+06] mov byte ptr es:[bx],al ;pset(lax,lay),color mov ax,ldx xor bx,bx add ax,ax jc bline_1 cmp ldx,0 setnz bl inc bl bline_1: add bx,bx mov ax,word ptr sign[bx] mov lsx,ax ;lsx = sgn(ldx) mov cx,word ptr abs_add[bx] mov bx,word ptr abs_xor[bx] mov ax,ldx xor ax,bx add ax,cx mov lcx,ax ;lcx = abs(ldx) mov ax,ldy xor bx,bx add ax,ax jc bline_2 cmp ldy,0 setnz bl inc bl bline_2: add bx,bx mov ax,word ptr sign[bx] mov lsy,ax ;lsy = sgn(ldy) mov cx,word ptr abs_add[bx] mov bx,word ptr abs_xor[bx] mov ax,ldy xor ax,bx add ax,cx mov lcy,ax ;lcy = abs(ldy) cmp lcx,ax jl bline_b ;if lcx > lcy then mov ax,lcy add ax,ax mov ldy2,ax mov ax,lcy sub ax,lcx add ax,ax mov ldymdx2,ax mov dx,lcy add dx,dx sub dx,lcx mov cx,lcx bline_a_1: cmp dx,0 jl bline_a_2 add dx,ldymdx2 add di,lsy jmp bline_a_3 bline_a_2: add dx,ldy2 bline_a_3: add si,lsx mov bx,di add bx,bx mov bx,word ptr row_offset[bx] add bx,si add bx,buffer_off mov al,byte ptr [bp+06] mov byte ptr es:[bx],al dec cx jnz bline_a_1 pop bp ret 10 bline_b: ;else mov ax,lcx add ax,ax mov ldx2,ax mov ax,lcx sub ax,lcy add ax,ax mov ldxmdy2,ax mov dx,lcx add dx,dx sub dx,lcy mov cx,lcy bline_b_1: cmp dx,0 jl bline_b_2 add dx,ldxmdy2 add si,lsx jmp bline_b_3 bline_b_2: add dx,ldx2 bline_b_3: add di,lsy mov bx,di add bx,bx mov bx,word ptr row_offset[bx] add bx,si add bx,buffer_off mov al,byte ptr [bp+06] mov byte ptr es:[bx],al dec cx jnz bline_b_1 pop bp ret 10 BLINE ENDP draw_points proc mov di,NUM_POINTS*4 mov si,63-NUM_POINTS draw_points__1: sub di,4 push dword ptr points[di-04] pop dword ptr points[di] cmp di,4 ja draw_points__1 mov di,NUM_POINTS*4 sub di,4 draw_points__2: sub di,4 cmp word ptr points[di+02],-1 je draw_points__skip cmp word ptr points[di+04],-1 je draw_points__skip pusha push word ptr points[di] push word ptr points[di+02] push word ptr points[di+04] push word ptr points[di+06] push si call bline popa draw_points__skip: inc si cmp di,0 jne draw_points__2 ret draw_points endp .startup push 13h call set_screen call make_pal_gradient call init_mouse ;call show_mouse call init_gfx_buffer main: call get_mouse shr cx,1 cmp cx,mouse_x jne update_mouse cmp dx,mouse_y jne update_mouse jmp dont_update_mouse update_mouse: mov mouse_x,cx mov mouse_y,dx push mouse_x push mouse_y call add_point jmp updated_mouse dont_update_mouse: mov mouse_x,cx mov mouse_y,dx updated_mouse: call bcls ;push mouse_x ;push mouse_y ;mov ax,15 ;push ax ;call bpset call draw_points call vsync call bcopy in al,60h cmp al,1 jnz main ;call hide_mouse push 3 call set_screen call quit end from IP address 64.131.83.138 |
| Response Title | Author and Date |
| I made one of those in text mode... | on May 15 |