Here is the code. It generates a 432byte length .COM executable file that needs to run from command line at full screen (uses graphic resources). So, what is this program for?, do you dare to give an answer?
CODE
;To assemble, use A86 assembler under DOS/WIN machine. It generates a 432 byte COM executable.
SCRX equ LOOP1-2
SCRY equ LOOP2-2
INCX equ INITCOORD+400
INCY equ INCX+10
ITER equ INCY+10
MOUSX equ ITER+2
MOUSY equ ITER+4
XMIN equ INITCOORD+15
XMAX equ INITCOORD+25
YMIN equ INITCOORD+35
YMAX equ INITCOORD+45
CUATRO equ INITCOORD+55
INITMB: MOV CX,200
MOV W[ITER],CX
LEA DI,INITCOORD+15
REP STOSB
LEA SI,INITCOORD
LEA DI,INITCOORD+15+7
MOV CL,50-7
XOR AH,AH
L0: CMP AH,10
JNE L3
XOR AH,AH
L3: XOR AL,AL
CMP AH,2
JA L1
LODSB
L1: STOSB
INC AH
LOOP L0
THEMB:
MOV AX,02
INT 33h
DELTAVALUE:
FINIT
FLD T[XMAX]
FLD T[XMIN]
FSUBP ST(1),ST
FILD W[SCRX]
FDIVP ST(1),ST
FSTP T[INCX]
FLD T[YMAX]
FLD T[YMIN]
FSUBP ST(1),ST
FILD W[SCRY]
FDIVP ST(1),ST
FSTP T[INCY]
MOV AX,12h
INT 10h
DRAWMB:
FINIT
FLD T[XMIN]
FLDZ
MOV CX,640
LOOP1:
PUSH CX
FLD T[YMIN]
FSTP ST(1)
MOV CX,480
LOOP2:
PUSH CX
CALL ITERING
FLD T[INCY]
FADDP ST(1),ST
POP CX
LOOP LOOP2
FLD T[INCX]
FADDP ST(2),ST
POP CX
LOOP LOOP1
MOUSEHANDLE:
XOR AX,AX
INT 33h
OR AL,AL
JE EXIT3
INC AX
INC AX
INT 33h
MWAIT:
MOV AX,100h
INT 16h
JNZ EXIT3
MOV AX,3
INT 33h
CMP BL,1
JE ZOOM
JL MWAIT
JMP INITMB
XOR AX,AX
INT 16h
EXIT3: MOV AX,2
INT 33h
MOV AX,3
INT 10h
MOV AH,09
LEA DX,[SIGNATURE]
INT 21h
MOV AX,4C00h
INT 21h
ZOOM:
SUB DX,120
SUB CX,160
CALL ZOOM_TMP
ADD DX,240
ADD CX,320
CALL ZOOM_TMP
FSTP T[YMAX]
FSTP T[XMAX]
FSTP T[YMIN]
FSTP T[XMIN]
ADD W[ITER],150
JMP THEMB
ITERING:
FLDZ
FLDZ
FLDZ
FLDZ
MOV DL,0Eh
MOV CX,W[ITER]
LAZO1:
FST ST(1)
FMUL ST,ST
INC DL
AND DL,0Fh
FXCH ST(1),ST
FMUL ST,ST(2)
OR DL,DL
JNZ SIGUE
INC DL
SIGUE: FADD ST,ST
FADD ST,ST(4)
FINCSTP
FINCSTP
FST ST(1)
FMUL ST,ST
FXCH ST(1),ST
FDECSTP
FST ST(1)
FINCSTP
FCHS
FADD ST,ST(1)
FADD ST,ST(3)
FDECSTP
FDECSTP
FLDZ
FADD ST,ST(2)
FADD ST,ST(4)
FLD T[CUATRO]
FCOMPP
FSTSW AX
FWAIT
SAHF
JNA SALIR
LOOP LAZO1
XOR DL,DL
SALIR:
FSTP ST
FSTP ST
FSTP ST
FSTP ST
MOV BP,SP
MOV AL,DL
MOV CX,640
MOV DX,480
MOV BX,[BP+2]
SUB DX,BX
MOV BX,[BP+4]
SUB CX,BX
MOV AH,0Ch
XOR BX,BX
INT 10h
RET
ZOOM_TMP:
MOV W[MOUSY],DX
MOV W[MOUSX],CX
FLD T[INCX]
FIMUL W[MOUSX]
FLD T[XMIN]
FADDP ST(1),ST
FLD T[INCY]
FIMUL W[MOUSY]
FLD T[YMIN]
FADDP ST(1),ST
RET
SIGNATURE:
DB "By DrK3055A.",10,13,'$'
INITCOORD:
DB 80h,0,0C0h,0C0h,0FFh,03Fh,0A0h,0FFh,0BFh,0A0h,0FFh,03Fh,080h,1,040h
Also, it was my first atempt for programming the Floating Point Unit by te use of assembler.


