title ;sine wave curve & scale & signature
page ,132 ;80386/80286 ASSEMBLY LANGUAGE PROGRAMMING
.8087
;;.model small
;;.stack 100h
exxu macro ;MACROS ARE INSERTED WHERE NEEDED!
push ax
push bx
push cx
push dx
push ds:si
push es:di
push sp
endm
exxo macro
pop sp
pop es:di
pop ds:si
pop dx
pop cx
pop bx
pop ax
endm
scr macro
mov ah,0 ;set hires screen
mov al,14 ;al=0eh 640x200 16 color graphics
int 10h ;video service pg1513
endm
wdot macro
mov ah,12 ;=0ch write pixle al=color cx=col dx=line pg1517
int 10h
endm
cdot macro
mov al,11 ;cyan11 white15 maga13 blue16
mov cx,xaxis ;col
mov dh,0
mov dl,yaxis ;row
wdot
endm
htic macro ;tic col 45-50-55
mov cx,45
h1: wdot
inc cl
cmp cl,55
jle h1
endm
vtic macro ;tic row 97-100-103
mov dx,97
v1: wdot
inc dl
cmp dl,103
jle v1
endm
pixi macro ;writes pixels LETTERS and SIGNATURE
local p0,p1,p2
p2: push ax
push si
push di
push cx
mov ch,0
mov cl,[si] ;peek wrtng[i] letters etc.
lea di,raysig ;ray signature coords
p1: inc di ;word req.
inc di
loop p1
pop cx
cmp cl,0 ;bad one must have a number to subtract from!
jnz p0
inc cx ;ie. jmp if < 2 or larger etc.
p0: mov al,cl
mov ah,dl
mov bx,[di] ;new rel coord
add ax,bx ;bad -- add coord to old coord or subtract
mov cl,al
and ah,7fh ;?? not that high
mov dl,ah ;then coord may be 255 etc.
mov al,color ;13magenta 14yellow 4
wdot ;write pixel
pop di
pop si
pop ax
inc di
inc si
mov bx,di
clc
sub bx,nmbr
clc
or bl,bh
cmp bl,0
jnz p2
endm
stack1 segment para 'stack'
db 64 dup ('mystack ')
stack1 ends
mydata segment para 'data'
angle dw 0
temp dw ?
consta dd 180.0
multip dw 90
xaxis dw 50
yaxis db 0
sine dw 91 dup (?)
vctr db ?
nmbr dw ?
color db ?
raysig db 0,0,1,0,1,1,0,1,255,0,255,255,255,254,0,255,1,255
;;9 a b c d e f 16
db 250,11,2,253,253,3,3,1,2,6,0,254,3,7,2,3
;;17 18 19 20 21 22 23 24
db 247,30,2,253,252,7,10,237,250,20,8,237,247,9,247,9,0,0,0,0
pie dw 1,1,6,1,6,1,6,1,6,5,1,1,1,1,1,1,5,4
dw 1,4,1,3,1,3,1,12
one dw 1,1,1,1,7,7,7,7,5,8,1,3,3,3,3,3,1,1,12
two dw 7,8,8,1,8,7,7,5,5,5,5,4,1,8,1,1,1,2,3,4,5,4,4,1,1,1,1,7,1,3,13
three dw 7,1,3,1,1,1,7,7,7,5,8,6,5,5,4,1,8,1,1,2,4,2,3,12
sl dw 7,1,7,1,7,1,7,1,7,1,7,1,7,1,15
four dw 15,7,2,1,6,7,1,7,1,7,1,1,4,1,4,1,4,1,4,5,1,1,1,4,5,4,1,1,1,12
min dw 7,7,1,3,1,7,1,3,7,1,3,7,1,3,7,1,3,7,1,3,16
zero dw 8,7,7,7,7,8,1,1,1,1,2,3,3,3,3,4,5,5,5,5,7,7,7,7,7,8,1,1,2
dw 4,4,3,4,8,7,8,8,1,1,3,3,3,3
sgntr dw 3,5,3,5,2,5,2,1,1,5,2,1,1,1,1,7,1,1,7,1,6,1,7,1,6,1
dw 7,1,6,1,6,1,7,1,6,1,6,1,7,1,6,1,6,1,7,1,6,1,7,1,6,1,6,1,7,1,6
dw 1,7,1,7,1,7,1,7,1,7,1,7,1,7,1
dw 5,3,5,3,5,4,1,4,1,4,1,4,1,4,1,1,4,1,4,1,4,1,4,1,4,1,4,1,1,4,1
dw 4,1,4,1,4,1,4,1,4,1,1,4,1,4,1,4,1,4,1,4,1,4
dw 8,7,7,1,6,1,7,1,6,1,6,1,7,1,6,1,6,1,7,1,6,1,7,1,6,1,6,1,7,1,6
dw 1,6,1,7,1,6,1,7,1,6,1,7,1,7,1,7,1,7,1,6,1,7,1,7,1
dw 21
;;N
dw 8,8,8,8,8,8,7,8,7,10,7,1,4,11,3,4,3,3,3,2,1,1,8,1
;;i
dw 8,8,8,7,8,7,8,8,1,1,2,6,5,5,4,4,3,2,1,2,1,1,8,1
;;c
dw 8,8,8,8,8,7,8,8,8,8,8,7,8,7,8,7,8,7,8,7,7,8,7,6,6,5,5,4,4,3
dw 3,3,4,3,3,4,3,3,4,3,3,3,4,3,3,3,3,3,3,3,7,7,7,7,1,1,1,2,4,5
dw 5,1,2,1,1,8,1,20
;;k
dw 7,1,7,1,7,1,1,7,1,1,1,1,4,1,1,4,1,3,1,4,1,4,1,4,1,4,1,4,1
dw 4,1,4,1,4,1,4,5,2,5,2,5,2,5,3,5,2,5,2,5,2,1,1,1,1,7,1,7,1,7
dw 1,6,1,7,1,6,1,7,1,6,1,7,1,6,1,7,1,6,1,7,1,6,1,6,1,7,1,6,1,7
dw 1,6,1,7,1,6,1,7,1,6,1,7,1,7,1,7,1,7,1,7,1,7,1,1,7,1,21
;;V
dw 8,8,8,7,1,2,2,8,4,6,6,7,7,8,8,1,1,8,3,3,4,3,3,2,1,8,1
;;a
dw 8,8,7,7,8,7,8,7,1,1,3,3,3,4,3,3,7,7,8,8,7,8,7,8,8,1,3,3,4,3,3
dw 1,1,20
;;n
dw 7,1,7,1,7,1,1,7,1,1,1,1,4,1,1,4,1,3,1,4,1,4,1,4,1,4,1,4,1
dw 4,1,4,1,4,1,4,5,2,5,2,5,2,5,3,5,2,5,2,5,2,1,1,1,1,7,1,7,1,7
dw 1,6,1,7,1,6,1,7,1,6,1,7,1,6,1,7,1,6,1,7,1,6,1,6,1,7,1,6,1,7
dw 1,6,1,7,1,6,1,7,1,6,1,7,1,7,1,7,1,7,1,7,1,7,1,1,7,1,21
;;V
dw 8,8,8,8,8,8,8,8,8,8,7,8,8,7,8,8,7,8,7,8,7,7,7,7,7,6,5,5,4,3,4,3,4,3
dw 4,3,3,4,3,3,4,3,3,3,3,3,2,3,3,3,2,1,8,1
;;l
dw 8,8,8,8,8,8,7,8,7,10,7,1,4,11,3,4,3,3,3,2,1,1,8,1
;;i
dw 8,8,8,8,8,8,7,7,5,5,4,4,3,3,3,2,1,1,8,1
;;e
dw 8,8,8,8,7,7,8,7,7,8,7,7,8,7,7,8,7,7,8,7,7,8,24,8,1,1,8,1,1,8
dw 1,1,8,1,1,8,24,3,3,3,3,3,2,1,2,1,2,1,2
;;t
dw ,4,5,4,5,4,5,5,4,5,4,5,4,5,5,4,5,4,5,5,4,5,4,5
dw ,5,4,5,4,5,5,4,5,4,5,4,5,5,4,5,4,5,5,4,5,4,5
dw ,5,4,5,4,5,5,4,5,4,5,4,5,5,4,5,4,5,5,4,5,4,5
dw ,5,4,5,4,5,5,4,5,4,5,4,5,5,4,5,4,5,5,4,5,4,5
dw ,5,4,5,4,5,5,4,5,4,5,4,5,5,4,5,4,5,5,4,5,4,5
dw ,5,4,5,4,5,5,4,5,4,5,4,5,5,4,5,4,5,5,4,5,4,5
dw ,5,4,5,4,5,5,4,5,4,5,4,5,5,4,5,4,5,5,4,5,4,5
dw ,5,4,5,4,5,5,4,5,4,5,4,5,5,4,5,4,5,5,4,5,4,5
dw ,5,4,5,4,5,5,4,5,4,5,4,5,5,4,5,4,5,5,4,5,4,5
dw ,5,4,5,4,5,5,4,5,4,5,4,5,5,4,5,4,5,5,4,5,4,5
dw ,5,4,5,4,5,5,4,5,4,5,4,5,5,4,5,4,5,5,4,5,4,5
dw ,5,4,5,4,5,5,4,5,4,5,4,5,5,4,5,4,5,5,4,5,4,5
mydata ends
mycode segment para 'code'
main proc far
assume cs:mycode,ds:mydata,ss:stack1
sub ax,ax
mov ax,mydata
mov ds,ax
push ds
push ds
mov si,0
again: mov ax,angle
cmp ax,45 ;<=45 ie sin >45 ie cos
jle cont
neg ax ;cos a = sine(90-a)
add ax,90
cont: mov temp,ax ;a or (90-a)
finit ;enter calc mode of math coprocessor
fldpi ;psh pi=.044880x7=3.14156
fld consta ;psh 180
fdiv ;t=u/t = pi/180
fild temp ;psh a
fmul ;t=t*u = a*pi/180
fptan ;t=sin(t) u=cos(t) x/y
fwait ;exit calc mode
mov ax,angle
cmp ax,45 ;<=45>>sin
jle sinin
fxch st(1) ;t=cos u=sin t=st(0)=sp u=st(1) =>st(2)
sinin: fmul st(0),st ;t=sin/or cos t=x^2 u=y
fxch st(1) ;t=y u=x^2 NB x=rcos y=rsin
fld st(0)
fmul st(0),st ;t=y^2 u=y >=x^2
fadd st(0),st(2) ;x^2+y^2
fsqrt ;t=r u=y >=x^2
fdivp st(1),st ;t=r u=y/r=sin >=x^2 & pop
fimul multip ;t=90*t=90sin integer
fistp sine[si] ;pop 90sin into storage
fwait ;exit calc mode?
add si,2 ;inc sine storage
add angle,1 ;inc angle
cmp angle,90
jle again
scr ;200x640 graphics
exxu
mov cx,0 ;(0,0)
mov dx,184fh ;(200,640)
mov bh,7 ;7grey 15w14y13m 1bl2gn3lbl4r5m6o
mov ax,0700h ;background color
int 10h
exxo
iloop: mov si,0
mov ax,xaxis
cmp ax,230 ;180+50
jle newquad
sub ax,180
newquad:
cmp ax,140 ;90+50
jle secquad
neg ax
add ax,280 ;180+50+50
secquad:
add si,ax ;sine i 0->90
sub si,50 ;sub 50 axis offset from screen
shl si,1 ;times two
mov al,byte ptr sine[si]
cmp xaxis,230 ;180+50
jge bigdis
neg al
add al,100 ;top loop 90 raises xaxis
jmp ready
bigdis: add al,99 ;bottom loop
ready: mov yaxis,al
cdot
push dx
cmp xaxis,230 ;180+50
jge r1
inc dx
jmp r2
r1: dec dx
r2: wdot ;thicken line
pop dx
add xaxis,1
cmp xaxis,410 ;360+50
jle iloop
mov dx,10 ;horz tic
mov al,14 ;yellow
mov bl,4
x1: htic
add dx,45
dec bl
cmp bl,0
jge x1
mov cx,50 ;yellow vert tic
mov bl,3
x2: add cx,90
vtic
dec bl
cmp bl,0
jge x2
mov al,5 ;0 ;4 ;brown y-axis
mov dx,10
mov cx,50
bk1: wdot ;vert line
inc dx
cmp dx,190
jl bk1
mov al,0 ;black x-axis
mov dx,100
mov cx,45
bk2: wdot ;horz line
inc cx
cmp cx,415 ;360+50+5
jl bk2
pop es
pop ds
mov color,10
;1blue ;9dblue;14;yellow;5purple;12orange;4brown;15white
;;LETTERS 1 one
mov cx,25 ;col
mov dx,13 ;row
mov di,1
lea si,one ;pix start
mov nmbr,38 ;pi No. 44
pixi
;;LETTERS 1/2 one
mov cx,10 ;col
mov dx,58 ;row
mov di,1
lea si,one ;pix start
mov nmbr,39 ;pi No. 44
pixi
;;LETTERS 1/2 sl
mov di,1
lea si,sl ;pix start
mov nmbr,30 ;pi No. 28
pixi
;;LETTERS 1/2 two
mov di,1
lea si,two ;pix start
mov nmbr,62 ;pi No.
pixi
;;LETTERS 0 zero
mov cx,25 ;col
mov dx,104 ;row
mov di,1
lea si,zero ;pix start
mov nmbr,88 ;pi No. 44
pixi
mov color,9
;;LETTERS pie/4 pie
mov cx,127 ;col
mov dx,110 ;row
mov di,1
lea si,pie ;pix start
mov nmbr,55 ;pi No.
pixi
;;LETTERS pie/4 sl
mov di,1
lea si,sl ;pix start
mov nmbr,27 ;pi No.
pixi
dec dx
;;LETTERS pie/4
mov di,1
lea si,four ;pix start
mov nmbr,48 ;pi No.
pixi
;;LETTERS pie/2 pie
mov cx,217 ;col
mov dx,110 ;row
mov di,1
lea si,pie ;pix start
mov nmbr,55 ;pi No.
pixi
;;LETTERS pie/2 sl
mov di,1
lea si,sl ;pix start
mov nmbr,30 ;pi No.
pixi
;;LETTERS pie/2 two
mov di,1
lea si,two ;pix start
mov nmbr,62 ;pi No.
pixi
;;LETTERS 3pie/4 three
mov cx,305 ;col
mov dx,110 ;row
mov di,1
lea si,three ;pix start
mov nmbr,48 ;pi No.
pixi
inc cx
inc cx
;;LETTERS 3pie/4 pie
mov di,1
lea si,pie ;pix start
mov nmbr,55 ;pi No.
pixi
;;LETTERS 3pie/4 sl
mov di,1
lea si,sl ;pix start
mov nmbr,27 ;pi No.
pixi
dec dx
;;LETTERS 3pie/4
mov di,1
lea si,four ;pix start
mov nmbr,48 ;pi No.
pixi
;;LETTERS pie pie
mov cx,416 ;col
mov dx,110 ;row
mov di,1
lea si,pie ;pix start
mov nmbr,50 ;pi No.
pixi
;;WRITING SIGNATURE
mov cx,0105h ;col
mov dx,90 ;row
mov di,1
lea si,sgntr ;pix start
mov nmbr,1820 ;Nick Van Vliet
mov color,15 ;5
;0 black 1 blue 2 green 3 lblue 4 brown 5 purple 6 lbrown 7 grey 8 dgrey
;9 dblue 10 lgreen 11 cyan 12 red 13 lpurple 14 yellow 15 white 16 black
pixi
;;;EXIT PROGRAM
mov ah,7 ;wait for keyboard char ==>al
int 21h ;char input no echo pg1201
mov al,3 ;al=03h 80x25 color Alpha.
mov ah,0 ;set video mode
int 10h ;video service pg1513
mov ax,4c00h ; Gives control to DOS
int 21h ;ah=0 terminate cs=psp pg1187
main endp
mycode ends
end main
HOME PAGE
UPDATED DISPLAY
Would you like to order my
'Machine Code Training For The IBM-PC Using Debug.Exe'
which contains a complete desciption, with comments,
of all updated Chess COM programs and other COM programs.
Contact [email protected] at Xlibris.com.
(refer your order to BID 38633)