SINE.GIF

sinegif

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 Louie.Pace@Xlibris.com at Xlibris.com.
(refer your order to BID 38633)


1