.386p code segment use16 org 0100h assume cs:code, ds:code;, es:code, ss:code d equ dword ptr w equ word ptr b equ byte ptr hx=320 hy=200 vhy=120 start: mov ax,13h int 10h mov ah,9 mov dx,offset text int 21h push 0a000h;+10*(hy-vhy) pop es ;palette xor ax,ax mov dx,03c8h out dx,al inc dx xor di,di pal: mov ax,di shr al,2 out dx,al mov ah,al shr al,1 out dx,al mov al,ah out dx,al ;copy logo mov al,es:[di] shl al,3 add al,64 stosb jnz pal finit mov si,offset rot ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;MAIN ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; igen: mov dx,3dah r1: in al,dx test al,8 jz r1 mov di,(hy-vhy)/2*hx;xor di,di mov bp,-vhy/2 ylo: mov w [si+16],bp ;y mov cx,-hx/2 xlo: fild w [si-4] ;z k120.. mov w [si+20],120 ; fild w [si+20] fild w [si+16] mov w [si+12],cx ;x fild w [si+12] ;x y z push cx bp mov cx,3 rol: fld d [si] ;v x y z roter: fsin fsincos ;c s x y z fld st(2) ;x c s x y z fmul st(0),st(1) ;xc c s x y z fld st(4) ;y xc c s x y z fmul st(0),st(3) ;ys xc.. fsubp st(1) ;ys-xc c s.. fxch st(4) ;y c s x ys-xc z fmulp st(1) ;yc s x ys.. fxch st(2) ;x s yc ys.. fmulp st(1) ;xs yc ys.. faddp st(1) ;xs+ys ys-xc z fxch st(2) ;z y x fxch st(1) ;y z x loop rol mov ch,1 ;nasty.. cl=0.. :) ; mov cx,256 fistp w [si+24] ;y z fistp w [si+28] ;z fistp w [si+32] ; mov bx,w [si+4] ;xor bx,bx mov bp,0200h ;xor bp,bp mov dx,bx ;xor dx,dx rayloop: add bx,w [si+24] add bp,w [si+28] add dx,w [si+32] mov ax,dx and ax,bp and ax,bx and ah,0f8h jnz skip loop rayloop skip: mov al,cl pop bp cx stosb inc cx cmp cx,hx/2 jnz xlo inc bp cmp bp,vhy/2 jnz ylo add w [si+4],bp ;bp = 60...;) fld d [si] fiadd w [si-2] fstp d [si] mov ah,01H ;get keyboard buffer status int 16H jz igen ret k120 dw 120/2 ;-4 drot dw 377; = 0.012*pi*100*100.. periodic.. :D ;-2 rot: ; :P text: db 10,10,'-= MZ1453 / Gunnars Farvebio (c) 2010 =-$' ;0+... dd ?,?,?,?,?,?,?,? posx: ;+4.. dw 0 code ends end start