[PATCH 3/8] wmdots: Move files up one directory.

Doug Torrance <[email protected]>
Newsgroups gmane.compw.window-managers.windowmaker.devel
Message-ID <[email protected]>
Since wmgeneral directory no longer exists, having wmdots/wmdots/* seems
pointless.
---
 wmdots/Makefile                     |  23 +
 wmdots/master.xpm                   |  87 ++++
 wmdots/old_dos_demo/dow.a           | 860 ++++++++++++++++++++++++++++++++++++
 wmdots/old_dos_demo/dow.com         | Bin 0 -> 12874 bytes
 wmdots/old_dos_demo/sintab.s        | 528 ++++++++++++++++++++++
 wmdots/old_dos_demo/trig.s          |  29 ++
 wmdots/sintab.c                     |  75 ++++
 wmdots/wmdots.c                     | 667 ++++++++++++++++++++++++++++
 wmdots/wmdots/Makefile              |  23 -
 wmdots/wmdots/master.xpm            |  87 ----
 wmdots/wmdots/old_dos_demo/dow.a    | 860 ------------------------------------
 wmdots/wmdots/old_dos_demo/dow.com  | Bin 12874 -> 0 bytes
 wmdots/wmdots/old_dos_demo/sintab.s | 528 ----------------------
 wmdots/wmdots/old_dos_demo/trig.s   |  29 --
 wmdots/wmdots/sintab.c              |  75 ----
 wmdots/wmdots/wmdots.c              | 667 ----------------------------
 16 files changed, 2269 insertions(+), 2269 deletions(-)
 create mode 100755 wmdots/Makefile
 create mode 100644 wmdots/master.xpm
 create mode 100644 wmdots/old_dos_demo/dow.a
 create mode 100644 wmdots/old_dos_demo/dow.com
 create mode 100644 wmdots/old_dos_demo/sintab.s
 create mode 100644 wmdots/old_dos_demo/trig.s
 create mode 100644 wmdots/sintab.c
 create mode 100644 wmdots/wmdots.c
 delete mode 100755 wmdots/wmdots/Makefile
 delete mode 100644 wmdots/wmdots/master.xpm
 delete mode 100644 wmdots/wmdots/old_dos_demo/dow.a
 delete mode 100644 wmdots/wmdots/old_dos_demo/dow.com
 delete mode 100644 wmdots/wmdots/old_dos_demo/sintab.s
 delete mode 100644 wmdots/wmdots/old_dos_demo/trig.s
 delete mode 100644 wmdots/wmdots/sintab.c
 delete mode 100644 wmdots/wmdots/wmdots.c

diff --git a/wmdots/Makefile b/wmdots/Makefile
new file mode 100755
index 0000000..46cea12
--- /dev/null
+++ b/wmdots/Makefile
@@ -0,0 +1,23 @@
+LIBDIR = -L/usr/X11R6/lib
+LIBS   = -lXpm -lXext -lX11 -ldockapp
+OBJS =	wmdots.o
+
+.c.o:
+	cc -c -g -O2 -Wall $< -o $*.o
+
+wmifs: $(OBJS)
+	cc -o wmdots $^ -lXext $(LIBDIR) $(LIBS)
+
+all:: wmdots
+
+clean::
+	for i in $(OBJS) ; do \
+		rm $$i ; \
+	done
+	rm wmdots
+
+install::
+	cp -f wmdots /usr/local/bin/
+	chmod 755 /usr/local/bin/wmdots
+	chown root:root /usr/local/bin/wmdots
+
diff --git a/wmdots/master.xpm b/wmdots/master.xpm
new file mode 100644
index 0000000..e1514ad
--- /dev/null
+++ b/wmdots/master.xpm
@@ -0,0 +1,87 @@
+/* XPM */
+static char * master_xpm[] = {
+"64 66 18 1",
+" 	c None",
+".	c #000000",
+"+	c #C300FF",
+"@	c #B500F2",
+"#	c #A800E5",
+"$	c #9E00D8",
+"%	c #9200CC",
+"&	c #8500BF",
+"*	c #7900B2",
+"=	c #6E00A5",
+"-	c #660099",
+";	c #5D008C",
+">	c #52007F",
+",	c #480072",
+"'	c #3E0066",
+")	c #37005B",
+"!	c #2D004C",
+"~	c #25003F",
+"                                                                ",
+"                                                                ",
+"                                                                ",
+"                                                                ",
+"    ......................................................      ",
+"    ......................................................      ",
+"    ......................................................      ",
+"    ......................................................      ",
+"    ......................................................      ",
+"    ......................................................      ",
+"    ......................................................      ",
+"    ......................................................      ",
+"    ......................................................      ",
+"    ......................................................      ",
+"    ......................................................      ",
+"    ......................................................      ",
+"    ......................................................      ",
+"    ......................................................      ",
+"    ......................................................      ",
+"    ......................................................      ",
+"    ......................................................      ",
+"    ......................................................      ",
+"    ......................................................      ",
+"    ......................................................      ",
+"    ......................................................      ",
+"    ......................................................      ",
+"    ......................................................      ",
+"    ......................................................      ",
+"    ......................................................      ",
+"    ......................................................      ",
+"    ......................................................      ",
+"    ......................................................      ",
+"    ......................................................      ",
+"    ......................................................      ",
+"    ......................................................      ",
+"    ......................................................      ",
+"    ......................................................      ",
+"    ......................................................      ",
+"    ......................................................      ",
+"    ......................................................      ",
+"    ......................................................      ",
+"    ......................................................      ",
+"    ......................................................      ",
+"    ......................................................      ",
+"    ......................................................      ",
+"    ......................................................      ",
+"    ......................................................      ",
+"    ......................................................      ",
+"    ......................................................      ",
+"    ......................................................      ",
+"    ......................................................      ",
+"    ......................................................      ",
+"    ......................................................      ",
+"    ......................................................      ",
+"    ......................................................      ",
+"    ......................................................      ",
+"    ......................................................      ",
+"    ......................................................      ",
+"    ......................................................      ",
+"                                                                ",
+"                                                                ",
+"                                                                ",
+"                                                                ",
+"                                                                ",
+"++@@##$$%%&&**==--;;>>,,''))!!~~                                ",
+"++@@##$$%%&&**==--;;>>,,''))!!~~                                "};
diff --git a/wmdots/old_dos_demo/dow.a b/wmdots/old_dos_demo/dow.a
new file mode 100644
index 0000000..85bc6d9
--- /dev/null
+++ b/wmdots/old_dos_demo/dow.a
@@ -0,0 +1,860 @@
+;Dogs of war demo by OnlyMe (now called I440r :)
+;-------------------------------------------------------------------------
+
+        ;Assembles with A386.COM (Registered A86).
+
+;-------------------------------------------------------------------------
+;Equates
+
+MaxPoints       equ 125         ;Maximum number of points in an object
+BumpMap         equ Bumps+320   ;Pointer to second scan line of bump map
+SpotX           equ 160         ;Position of static bump map spotlight
+SpotY           equ 80
+
+;-------------------------------------------------------------------------
+;A based structure (See A86 documentation for explanation)
+
+ struc [bx]             ;Structure does NOT need a name
+Counter         dw ?    ;Countdown to change
+Reset           dw ?    ;Counter reset value
+Position        dw ?    ;Points to item being modified
+Delta           dw ?    ;Speed of change (also direction)
+Upper           dw ?    ;Upper limit for position
+Lower           dw ?    ;Lower limit for position
+ ends
+
+;-------------------------------------------------------------------------
+;Un-Initialised data
+
+ data segment
+
+XAngle          dw ?    ;Angles of rotation for each axis
+YAngle          dw ?    ;  higher numbers rotate faster
+ZAngle          dw ?
+
+X               dw ?    ;Coordinates of point being calculated
+Y               dw ?
+Z               dw ?
+
+XSin            dw ?    ;Sin and Cos for each axis angle of rotation
+YSin            dw ?
+ZSin            dw ?
+XCos            dw ?
+YCos            dw ?
+ZCos            dw ?
+
+NumPoints       dw ?    ;Number of points in current object
+
+;           V---MaxPoints
+Trail1: dw 125 dup ?    ;Display address of previous 8 positions for
+Trail2: dw 125 dup ?    ; each point being rotated.  We only erase a
+Trail3: dw 125 dup ?    ; points 8'th previous position.  This makes
+Trail4: dw 125 dup ?    ; the points leave a trail 7 pixles long
+Trail5: dw 125 dup ?
+Trail6: dw 125 dup ?
+Trail7: dw 125 dup ?
+Trail8: dw 125 dup ?
+
+CharP           dw ?    ;Pointer to font def for scrollie char
+BumpX           dw ?    ;Bump map coordinates being calculated
+BumpY           dw ?
+
+;-------------------------------------------------------------------------
+;A copy of the ROM font moved here so we can reference it using DS
+
+Font:           db 256*8 dup ?
+
+;-------------------------------------------------------------------------
+;Note:
+;
+; The following buffer is the whole of the bump map.  There is 1 scan
+;line of ZERO data above and below the area that will contain the bumps.
+;
+;Therefore the bumpmap is at Bumps+320 (See Equates Above)
+
+Bumps:          db 320*18 dup ?
+
+;-------------------------------------------------------------------------
+;Da Beeph (moo)
+
+ code segment
+
+Start:
+ jmp Main               ;Do it...
+
+;-------------------------------------------------------------------------
+;Pre initialised data...
+
+Shape           dw Cube ;Pointer to current object
+
+HalfH           dw 160  ;Screen coordinates for centre of object
+HalfV           dw 100
+
+XOff            dw 150  ;Position of object in world space
+YOff            dw 150
+ZOff            dw 800
+
+DeltaX          dw 5    ;Rotational speeds on each axis
+DeltaY          dw 4
+DeltaZ          dw 7
+
+;-------------------------------------------------------------------------
+;Modifiers: Tables follows this format:  (as per above based structure)
+;
+; Counter          Count down to next speed/position change
+; Retet            Value to reset counter to
+; Position         Pointer to data item to modify
+; Delta            Ammount to change item (also direction)
+; Upper            Upper limit fot item
+; Lower            Lower limit for item
+
+W1:     dw 30,30,offset DeltaX,2,15,2   ;Modifies X Rotational speed
+W2:     dw 20,20,offset DeltaY,-2,12,4  ;Modifies Y Rotational speed
+W3:     dw 40,40,offset DeltaZ,2,10,7   ;Modifies Z Rotational speed
+W4:     dw 02,02,offset ZOff,-3,800,180 ;Zooms object in and out of screen
+
+;-------------------------------------------------------------------------
+;Bump mapped scrollie banner text stuffz
+
+Bannerp         dw Banner       ;Points to next character
+CharColumn      db 080          ;Mask for next colunn of font def
+
+Banner:
+ db ' *** The Dogs Of WAR demo by OnlyMe! ***          '
+ db 'Begin!                 '
+
+Begin:
+ db 'Oh the dogs they had a meeting     '
+ db 'They came from near and far     '
+ db 'And some dogs came by motor bus     '
+ db 'And some by motor car          '
+
+ db 0
+ dw Flies,Hall
+
+Hall:
+ db 'On entering the meeting hall     '
+ db 'Each dog could take a look     '
+ db 'Where he had to hang his asshole     '
+ db 'Up high upon a hook          '
+
+ db 0
+ dw Cross,Fire
+
+Fire:
+ db 'And when they were assembled     '
+ db 'Each canine son and sire     '
+ db 'Some dirty bulldog son of a bitch     '
+ db 'Jumped up and hollared FIRE          '
+
+ db 0
+ dw Square,Panic
+
+Panic:
+ db 'All was in a panic     '
+ db 'Twas hell upon to look     '
+ db 'Each doggie grabbed at random     '
+ db 'An asshole from a hook          '
+
+ db 0
+ dw Cube,Sore
+
+Sore:
+ db 'Now the assholes were all mixed up     '
+ db 'Which made each doggie sore     '
+ db 'To have to wear another dogs ass     '
+ db 'He''d never worn before          '
+
+ db 0
+ dw Star,Bone
+
+Bone:
+ db 'And that is why until this day     '
+ db 'A dog will drop a bone     '
+ db 'To go and smell another dogs ass     '
+ db 'To see if it''s his OWN!            '
+
+ db '*** THE END ***                       ???          '
+ db 'Now what have i forgotz ????                 '
+ db 'ERM.....                Oh Yea....         '
+
+ db 'Greetings *** ROTATE *** Out To ~~~~~~         '
+
+ db 0
+ dw Heart,Catgirl
+
+Catgirl:
+ db 'Catgirl - Jeg Elsker DEG - Purrrrrrrrrrrrr :)     '
+ db 'Myriaam - Cute Sexy BABE Princess DOLL :) - heheheheheh - '
+ db 'okokokokokokokokokokokokokokokokokokokokokokokokokok     '
+ db 'LuvrsCrs - Manager''ess and savior''ess of UnderNUT #CODERS     '
+ db '-->     '
+
+ db 0
+ dw Square,Unf
+
+Unf:
+ db 'Unf - Fatar - Debonaire - Isomer - Hexsane & MrsHex - '
+ db 'nop - mole - oreo - RatKing - \hatred\ - KBerg - '
+ db 'RyanT - Mafia - Yosha - Jungle - Fid - Binary - '
+ db 'PRIM8 - IiTM - Topanga - Tig2 - deRanged - RuneStar - '
+ db '_RyAn_ - DaParasit - Spansh - CodeX - Wicked - '
+ db 'Likwid - KingTroll - tpanther - ED_Lead - Reptile - '
+
+ db 0
+ dw Cross,NoIdea
+
+NoIdea:
+ db 'Noidea - ^Para^ - Wh0is - Chiew - [QWORD] - LoneWolf - '
+ db 'DaveDavis - PsYkOtIk - ^Ion^ - Weathros - LittleLoc - '
+ db 'MissMilla - Centmo - Entlin - CreepGuy - eom - Xico - '
+ db '^Axe^ & Sturnella - Almighty - o - Zyklon - hammr - '
+ db '|Geo| - '
+ db 'MarkIII (Hi Dad) - Diamond1 & Mermaid1 (Hi Sis1 and Sis2 :) - '
+
+ db 0
+ dw Flies,Snoo
+
+Snoo:
+ db 'Snoo - Queen1 & Truely - Shama - Pink^Rose - Divebum - '
+ db 'DEWDROP - KaDaM2 - Freakmama - mr007 - SIOK - Alih - '
+ db 'Asterix - MoKie - Rats - RoadRoach - masdale - mystie - '
+
+ db 'e|ectricTom - Techa^ - TX-Cowboy - buch - luth - '
+
+ db 0
+ dw Cross,Eche
+
+Eche:
+ db 'BaBs - Ratty - Lexzy - PJ - Blondii - dew - Kittie - '
+ db '^Kristi - strawbery - grlafraid - Krystal1 - ortho - '
+ db 'Danni_ - Anne^ - brokngrl - keldog - AnGelDevo - '
+ db '^DE^ - Avantyful & Niece babe :) - mauddib - lil_miss - '
+ db 'Eche & Godis^ hehehehe - lowlife - X & W -                 '
+ db '******** And Everyone else OnlyMe! dun MISSED            '
+ db '*** THE END IS NOT NEIGH ***                    '
+ db '---====*** Begin Again --->                               ',0
+
+ dw Cube,Begin
+
+;-------------------------------------------------------------------------
+;Do IT!
+
+Main:
+ mov ax,013             ;VGA GFX mode = 320 x 200 x 256
+ int 010
+
+ mov cx,(320*18)/2      ;Erase bump map buffer
+ mov di,Bumps
+ xor ax,ax
+ rep stosw
+
+ call GetPalette        ;Create shaded palette
+ call GetFont           ;Read font data out of ROM into current DS
+ call InitScroll        ;Point to font data for first char of banner
+
+ mov ax,0a000           ;Point ES at video segment
+ mov es,ax
+
+L0:
+ call ChangeAngles      ;Get next angle of rotation for all axis
+ call GetSinCos         ;Calculate Sin and Cos for all rotation angles
+ call DoFrame           ;Rotate all points of shape and display
+ call DoScroll          ;Scroll text through bump map buffer
+ call DoBump            ;Bump map scrolly text and display it
+ call Retrace           ;Wait for next raster frame
+ call ErasePoints       ;Erase all pixles that are 8 frames old
+ call DoDeltas          ;Modify rotational speeds etc
+
+ in al,060              ;Read keyboard port
+ cmp al,081             ;Escape key released?
+ jne L0
+
+;-------------------------------------------------------------------------
+;Exit nicely
+
+ mov ax,3               ;Back to textmode
+ int 010
+ mov ah,2               ;Place cursor at bottom left of display
+ mov dx,01700
+ xor bx,bx
+ int 010
+ mov dx,AuRevoir
+ mov ah,9
+ int 021
+ mov ah,04c             ;Return control to dos
+ int 021
+
+;-------------------------------------------------------------------------
+;Do one frame of rotating object. Calculate and plot all points
+
+;DI points to first trail buffer.  We store the address of every pixle
+;we write into this buffer.  When it comes time to erase these pixles we
+;do not need to recalculat them.  We just collect the address!
+
+DoFrame:
+ xor ch,ch              ;Clear hi byte of loop counter
+ xor di,di              ;Point to start of trail buffer
+ mov si,[Shape]         ;Point to object to be rotated
+ mov cl,[si]            ;Get number of points
+ mov NumPoints,cx       ;We need this count later too...
+ inc si
+L0:
+ movsx ax,[si]          ;Get X coordinate of point
+ mov [X],ax
+ movsx ax,[si+1]        ;Get Y coordinate
+ mov [Y],ax
+ movsx ax,[si+2]        ;Get Z coordinate
+ mov [Z],ax
+ call Rotate            ;Rotate point in 3d
+ call Draw              ;Draw this point
+ add si,3               ;Point to next point
+ add di,2               ;point to next slot of trail buffer
+ dec cx
+ jne L0
+ ret
+
+;-------------------------------------------------------------------------
+;Project a single XYZ point into 2D space on screen
+
+Draw:
+ mov ax,[YOff]          ;YOff * Y / Z+ZOff = Screen Y
+ imul [Y]
+ mov bx,[Z]
+ add bx,[ZOff]
+ idiv bx
+ add ax,[HalfV]         ;Centre object on screen
+
+ cmp dx,0               ;Clip this pixle if outside display area
+ jb short ret
+ cmp ax,200
+ ja short ret
+
+ mov bx,320             ;Calculate 320 * Y...
+ imul bx
+
+ mov bx,ax
+
+ mov ax,[XOff]          ;XOff * X / Z+ ZOff = Screen X
+ mov bp,[X]
+ imul bp
+ mov bp,[Z]
+ add bp,[ZOff]          ;Distance
+ idiv bp
+ add ax,[HalfH]
+
+ cmp dx,0               ;Clip pixle if outside display area
+ jb short ret
+ cmp ax,320
+ ja short ret
+
+ add bx,ax
+
+ mov ax,-1              ;Generate colour for point based on X Y and Z axis
+ sub ax,[Z]             ; of dot
+ xor ax,[X]             ;Divides cube into 8 smaller cubes and alternates
+ or ax,[Y]              ; light/dark (opposite corners same shade)
+ shr ax,4
+ add ax,[X]             ;This addition makes the cube stripey man :)
+ add ax,[Y]
+
+ es mov [bx],al         ;Place a dot with color al
+ mov Trail8[di],bx      ;Save address for erase
+ ret
+
+;-------------------------------------------------------------------------
+;Erase pixles that are 8 frames old.
+
+;Every time a pixles is drawn to the display we remember its video
+;offset (address).  This saves time when we want to erase that dot
+;because we dont need to recalculate the address given an XYZ
+
+ErasePoints:
+ xor di,di
+ mov cx,MaxPoints
+L0:
+ mov bx,Trail8[di]      ;Pixles added to display on THIS frame
+; es dec b[bx]           ; Make them less bright
+ xchg bx,Trail7[di]     ;Pixles one frame old
+; es dec b[bx]           ; Make them less bright
+ xchg bx,Trail6[di]     ;Etc...
+; es dec b[bx]
+ xchg bx,Trail5[di]
+; es dec b[bx]
+ xchg bx,Trail4[di]
+; es dec b[bx]
+ xchg bx,Trail3[di]
+; es dec b[bx]
+ xchg bx,Trail2[di]
+; es dec b[bx]
+ xchg bx,Trail1[di]     ;Pixles 8 frames old
+ es mov b[bx],0         ;Erase them
+ inc di,2
+ dec cx
+ jne L0
+ ret
+
+;-------------------------------------------------------------------------
+;Rotate a single point in 3D space
+
+Rotate:
+ push cx                        ;Need to keep this....
+
+;Rotate object about X axis  (changes Y and Z)
+;
+;Y' = Y * Cos(Xang) - Z. Sin(Xang)
+;Z' = Y * Sin(Xang) + Z. Cos(Xang)
+
+ movsx eax,[Z]          ;Get Z * Sin(X)
+ movsx ebx,[XSin]
+ mul ebx
+ mov ecx,eax            ;Save in cx...
+ movsx eax,[Y]          ;Get Y * Cos(x)
+ movsx ebx,[XCos]
+ imul ebx
+ sub eax,ecx            ;Get Y * Cos(X) - Z * Sin(X)
+ sar eax,14             ;Sin and Cos Table values are scaled up
+ mov bp,ax              ; by 16384.  SHR scales results back down
+
+;We just calculated our new Y coordinate.  We cant yet overwrite the old
+;Y because we still need it to calculated the new Z
+
+ movsx eax,[Z]          ;Get Z * Cos(X)  Exact opposite of above!
+ movsx ebx,[XCos]
+ imul ebx
+ mov ecx,eax            ;Save value...
+ movsx eax,[Y]          ;Get Y * Sin(X)
+ movsx ebx,[XSin]
+ imul ebx
+ add eax,ecx            ;Get Y * Sin(X) + Z * Cos(X)
+ sar eax,14             ;Scale results down by 16384
+
+ mov [Y],bp             ;Set newly calculated Y and Z coordinates
+ mov [Z],ax
+
+;Rotate point in Y axis
+;
+;X' = X * Cos(Yang) - Z * Sin(Yang)
+;Z' = X * Sin(Yang) + Z * Cos(Yang)
+
+ movsx eax,[Z]          ;Following code is very similar to above.
+ movsx ebx,[YSin]       ;It rotates the point in the Y axis
+ imul ebx               ;I.E. It calculates new X and Z
+ mov ecx,eax
+ movsx eax,[X]
+ movsx ebx,[YCos]
+ imul ebx
+ sub eax,ecx
+ sar eax,14
+ mov bp,ax              ;Save new X coord
+
+ movsx eax,[Z]          ;Calculate Z
+ movsx ebx,[YCos]
+ imul ebx
+ mov ecx,eax
+ movsx eax,[X]
+ movsx ebx,[YSin]
+ imul ebx
+ add eax,ecx
+ sar eax,14
+
+ mov [X],bp             ;Set new X and Z for point
+ mov [Z],ax
+
+;Rotate objecct along Z axis
+;
+;X' = X * Cos(Zang) - Y * Sin(Zang)
+;Y' = X * Sin(Zang) + Y * Cos(Zang)
+
+ movsx eax,[Y]          ;Hmmm isnt this... the same, arent we just
+ movsx ebx,[ZSin]       ;doing the same, calculations on in exactly
+ imul ebx               ;The same, way but using different
+ mov ecx,eax            ;Variables?  Couldnt we optimise here ???
+ movsx eax,[X]
+ movsx ebx,[ZCos]       ;Answer...
+ imul ebx               ;
+ sub eax,ecx            ;Yes!  But that is a space optimisation
+ sar eax,14             ;Not a speed optimisation.  The INLINE
+ mov bp,ax              ;method is faster
+
+ movsx eax,[Y]          ;There is also a much better way to do this
+ movsx ebx,[ZCos]       ;that is both smaller and faster.
+ imul ebx
+ mov ecx,eax            ;I.E. Use a Matrix to rotates points
+ movsx eax,[X]          ;This however is much easier to follow
+ movsx ebx,[ZSin]       ;and MAFFZ wuzz never my strong suit :)
+ imul ebx
+ add eax,ecx            ;Maybe if this gets too.. slow ill use
+ sar eax,14             ;matricies tho :)
+
+ mov [X],bp
+ mov [Y],ax
+ pop cx
+ ret
+
+;-------------------------------------------------------------------------
+;calculate new angles of rotation for all points (to angles)
+
+;We do NOT rotate a point by 1 degree on one frame and then rotate that
+;rotated point by 1 degree in the next.  We rotate by 1 degree in the
+;first frame,  by 2 in the next, by 3 in the next etc.
+
+;Every time a point is rotated there is a slight ammount of error in our
+;calculation.  If we rotated previously rotated points we would accumulate
+;errors on each rotation of the point and our object would distort.
+
+;By rotating the SAME points (i.e the original shape) on every frame but
+;by different ammounts each time, we never distort our shape by more
+;than ONE rotations worth of error (which u cant see :)
+
+ChangeAngles:
+ mov ax,[DeltaX]        ;Adjust X angles of rotation
+ add [XAngle],ax
+ mov ax,[DeltaY]        ;And Y
+ add [YAngle],ax
+ mov ax,[DeltaZ]        ;And Z
+ add [ZAngle],ax
+ ret
+
+;-------------------------------------------------------------------------
+;Get Sin and Cos of all 3 angles of rotation.
+
+GetSinCos:
+ mov ax,[XAngle]        ;Get angle
+ call SinCos            ;Get Sin and Cos
+ mov [XSin],ax          ;Save em!
+ mov [XCos],bx
+
+ mov ax,[YAngle]        ;Same but different :)
+ call SinCos
+ mov [YSin],ax
+ mov [YCos],bx
+
+ mov ax,[ZAngle]        ;Same but different :)
+ call SinCos
+ mov [ZSin],ax
+ mov [ZCos],bx
+ ret
+
+;-------------------------------------------------------------------------
+;This moves a value between two limits at a specific rate.
+
+;This code uses the structure defined at the top of the source file.
+
+;The structure is defined as...
+;
+; struc [bx]
+;
+;This makes the address in BX the base of the structure.  A86 now allows
+;us to just name the structure element without reference to BX,  This makes
+;the code easier to read if you understand the mechanism but impossible to
+;follow if you dont :)
+
+;Where you see a something like
+;
+; dec Counter
+;
+;read....
+;
+; dec Counter[bx]
+;
+
+DoDeltas:
+ mov bx,W1              ;Modify X rotation
+ call >L0
+ mov bx,W2              ;Modify Y rotation
+ call >L0
+ mov bx,W3              ;Modify Z rotation
+ call >L0
+ mov bx,W4              ;Zoom in and out
+
+L0:
+ dec Counter            ;Count down to next change
+ jne ret
+ mov ax,Reset           ;Counter hit ZERO.  Reset it
+ mov Counter,ax
+ mov ax,Delta           ;Get rate. of change (also direction)
+ mov si,Position        ;Get pointer to variable to modify
+ add ax,[si]            ;Add delta to variable
+ mov [si],ax            ;Store back
+ cmp ax,Upper           ;Did variable reach upper limit?
+ jl >L2
+L1:
+ neg Delta              ;Change direction!
+ ret
+L2:
+ cmp ax,Lower           ;Did variable reach lower limit?
+ jl L1
+ ret
+
+;-------------------------------------------------------------------------
+;MOA's bump mapping routine. (Yea im uzing this again hehe I like it :)
+;-------------------------------------------------------------------------
+
+DoBump:
+ mov ax,0a000           ;Point to video
+ mov es,ax
+
+ mov si,BumpMap+320*16  ;Point to end of last line of bumpmap
+
+ mov di,16              ;16 scan lines
+ mov ax,di
+ sub ax,SpotY
+ mov BumpY,ax
+
+;-------------------------------------------------------------------------
+
+L0:
+ mov ax,320-2           ;320 Pels per scan
+ mov cx,ax
+ sub ax,SpotX
+ mov BumpX,ax
+
+L1:
+ mov ax,-1[si]          ;Look... No spotlight :) (Addition by OnlyMe)
+ or al,1[si]
+ or ax,-321[si]
+ or al,321[si]
+ test ax
+ jz >L9
+
+ xor ah,ah              ;Clear scratch registers
+ xor bh,bh
+ mov al,[si+1]          ;Read bump heights to left and right of this bump
+ mov bl,[si-1]
+ sub ax,bx              ;Compute differenct
+ sub ax,BumpX           ;I think this gets a 2D normal (erm)
+ cwd
+ xor ax,dx
+ sub ax,dx              ;But Maff izznt my strong suit
+ mov bx,07f
+ sub bx,ax
+ mov ax,bx
+ cwd
+ not dx
+ and bx,dx
+ push bx
+
+ xor ah,ah              ;When i understand how this code actually
+ xor bh,bh              ; works ill add propper comments.  Maybe someone
+ mov al,[si+0141]       ; can fill me in eh
+ mov bl,[si-0140]
+ sub ax,bx
+ sub ax,BumpY
+ cwd
+ xor ax,dx
+ sub ax,dx
+ mov bx,07F
+ sub bx,ax
+ mov ax,bx
+ cwd
+ not dx
+ and bx,dx
+
+ pop ax
+ mul bl
+ shr ax,6+2
+
+L9:
+; shr ax,2
+; add ax,5
+ es mov 0e600-BumpMap[si],al
+
+ dec BumpX
+ dec si
+ loop L1
+
+ dec BumpY
+ sub si,2
+ dec di
+ jnz L0
+ ret
+
+;-------------------------------------------------------------------------
+
+DoScroll:
+ xor si,si              ;First pixle row in current column
+
+ mov bx,BumpMap         ;Erm... Actually.... This is wrong... hehehe
+ mov bp,[CharP]         ;Point to characters font data
+ mov dh,b[CharColumn]   ;Get column mask
+L0:
+ xor cx,cx              ;Assume no bumps (0 pixle)
+ mov al,[bp+si]         ;Get character row from font
+ and al,dh              ;Mask out all but current column
+ if nz mov cx,03030     ;Raise bumps
+ mov [bx],cx            ;Write double width pixle
+ mov 320[bx],cx         ;Double height too!
+ add bx,2*320
+ inc si                 ;Add 1 to row
+ cmp si,8               ;Font is 8 by 8
+ jne L0
+
+ mov ax,ds
+ mov es,ax
+
+ mov si,BumpMap         ;Scroll bumpmap 2 pixles left
+ mov di,si              ;pixles at far left move to far right hehehe
+ add si,2
+ mov cx,320*16/2
+ rep movsw
+
+ ror CharColumn,1       ;Shift row mask 1
+ jnc short ret          ;Wrap round and compute next char
+
+InitScroll:
+ mov si,[BannerP]       ;Get pointer to next char in banner
+ test b[si]             ;End of text?
+ jnz >L0
+
+ inc si
+ lodsw
+ mov [Shape],ax
+ lodsw
+ mov si,ax
+
+L0:
+ xor ah,ah
+ lodsb                  ;Get text character
+ mov [BannerP],si
+ shl ax,3               ;Compute chars ROM offset
+ add ax,Font
+ mov CharP,ax           ;Points to font data for character
+ ret
+
+;-------------------------------------------------------------------------
+;Get a copy of the font data out of ROM into default DS
+
+GetFont:
+ mov ax,0f000           ;Point to ROM
+ mov ds,ax
+ mov si,0fa6e           ;Offset to font data in ROM
+ mov di,Font
+ mov cx,256*2
+ rep movsw
+ mov ax,cs
+ mov ds,ax
+ ret
+
+;-------------------------------------------------------------------------
+;Write a KEWL purple palette (Shut Up! I like PuRplE :P)
+
+GetPalette:
+ mov dx,03C8            ;Write new palette
+ xor cx,cx
+ xor ax,ax
+ out dx,al
+ inc dx
+L0:
+ mov al,cl              ;Select colour number to updata
+ out dx,al              ;Write Red
+ xchg ah,al
+ out dx,al              ;Write Green (Zero)
+ xchg ah,al
+ out dx,al              ;Write Blue
+ inc cl
+ jnz L0
+ ret
+
+;-------------------------------------------------------------------------
+;Shape structure defined as....
+;
+; db number-of-points
+; db x,y,z      of first point
+; db x,y,z ...  of rest
+
+Cube:
+ db 125
+ db -35,-35,-35,-35,-35,-15,-35,-35, 05,-35,-35, 25,-35,-35, 45
+ db -35,-15,-35,-35,-15,-15,-35,-15, 05,-35,-15, 25,-35,-15, 45
+ db -35, 05,-35,-35, 05,-15,-35, 05, 05,-35, 05, 25,-35, 05, 45
+ db -35, 25,-35,-35, 25,-15,-35, 25, 05,-35, 25, 25,-35, 25, 45
+ db -35, 45,-35,-35, 45,-15,-35, 45, 05,-35, 45, 25,-35, 45, 45
+ db -15,-35,-35,-15,-35,-15,-15,-35, 05,-15,-35, 25,-15,-35, 45
+ db -15,-15,-35,-15,-15,-15,-15,-15, 05,-15,-15, 25,-15,-15, 45
+ db -15, 05,-35,-15, 05,-15,-15, 05, 05,-15, 05, 25,-15, 05, 45
+ db -15, 25,-35,-15, 25,-15,-15, 25, 05,-15, 25, 25,-15, 25, 45
+ db -15, 45,-35,-15, 45,-15,-15, 45, 05,-15, 45, 25,-15, 45, 45
+ db  05,-35,-35, 05,-35,-15, 05,-35, 05, 05,-35, 25, 05,-35, 45
+ db  05,-15,-35, 05,-15,-15, 05,-15, 05, 05,-15, 25, 05,-15, 45
+ db  05, 05,-35, 05, 05,-15, 05, 05, 05, 05, 05, 25, 05, 05, 45
+ db  05, 25,-35, 05, 25,-15, 05, 25, 05, 05, 25, 25, 05, 25, 45
+ db  05, 45,-35, 05, 45,-15, 05, 45, 05, 05, 45, 25, 05, 45, 45
+ db  25,-35,-35, 25,-35,-15, 25,-35, 05, 25,-35, 25, 25,-35, 45
+ db  25,-15,-35, 25,-15,-15, 25,-15, 05, 25,-15, 25, 25,-15, 45
+ db  25, 05,-35, 25, 05,-15, 25, 05, 05, 25, 05, 25, 25, 05, 45
+ db  25, 25,-35, 25, 25,-15, 25, 25, 05, 25, 25, 25, 25, 25, 45
+ db  25, 45,-35, 25, 45,-15, 25, 45, 05, 25, 45, 25, 25, 45, 45
+ db  45,-35,-35, 45,-35,-15, 45,-35, 05, 45,-35, 25, 45,-35, 45
+ db  45,-15,-35, 45,-15,-15, 45,-15, 05, 45,-15, 25, 45,-15, 45
+ db  45, 05,-35, 45, 05,-15, 45, 05, 05, 45, 05, 25, 45, 05, 45
+ db  45, 25,-35, 45, 25,-15, 45, 25, 05, 45, 25, 25, 45, 25, 45
+ db  45, 45,-35, 45, 45,-15, 45, 45, 05, 45, 45, 25, 45, 45, 45
+
+Star:
+ db 65
+ db -35,-35, 05,-35,-15, 05,-35, 05, 05,-35, 25, 05,-35, 45, 05
+ db -15,-35, 05,-15,-15, 05,-15, 05, 05,-15, 25, 05,-15, 45, 05
+ db  05,-35, 05, 05,-15, 05, 05, 05, 05, 05, 25, 05, 05, 45, 05
+ db  25,-35, 05, 25,-15, 05, 25, 05, 05, 25, 25, 05, 25, 45, 05
+ db  45,-35, 05, 45,-15, 05, 45, 05, 05, 45, 25, 05, 45, 45, 05
+ db  05,-35,-35, 05,-35,-15, 05,-35, 25, 05,-35, 45,-35, 05,-35
+ db  05,-15,-35, 05,-15,-15, 05,-15, 25, 05,-15, 45,-15, 05,-35
+ db  05, 05,-35, 05, 05,-15, 05, 05, 25, 05, 05, 45, 05, 05,-35
+ db  05, 25,-35, 05, 25,-15, 05, 25, 25, 05, 25, 45, 25, 05,-35
+ db  05, 45,-35, 05, 45,-15, 05, 45, 25, 05, 45, 45, 45, 05,-35
+ db -35, 05,-15,-35, 05, 25,-35, 05, 45,-15, 05,-15,-15, 05, 25
+ db -15, 05, 45, 05, 05,-15, 05, 05, 25, 05, 05, 45, 25, 05,-15
+ db  25, 05, 25, 25, 05, 45, 45, 05,-15, 45, 05, 25, 45, 05, 45
+
+Flies:
+ db 6
+ db -35,-35,-35,-35,-35, 45, 45, 45,-35, 45, 45, 45,  5,-35,  5
+ db   5, 45,  5
+
+Square:
+ db 25
+ db -35,-35,-35,-35,-15,-35,-35, 05,-35,-35, 25,-35,-35, 45,-35
+ db -15,-35,-35,-15,-15,-35,-15, 05,-35,-15, 25,-35,-15, 45,-35
+ db  05,-35,-35, 05,-15,-35, 05, 05,-35, 05, 25,-35, 05, 45,-35
+ db  25,-35,-35, 25,-15,-35, 25, 05,-35, 25, 25,-35, 25, 45,-35
+ db  45,-35,-35, 45,-15,-35, 45, 05,-35, 45, 25,-35, 45, 45,-35
+
+Heart:
+ db 32
+ db -35,-15,-35,-35, 25,-35,-15,-35,-35,-15,-15,-35,-15, 05,-35
+ db -15, 25,-35,-15, 45,-35, 05,-35,-35, 05,-15,-35, 05, 05,-35
+ db  05, 25,-35, 05, 45,-35, 25,-15,-35, 25, 05,-35, 25, 25,-35
+ db  45, 05,-35
+ db -30,-10,-30,-30, 20,-30,-10,-30,-30,-10,-10,-30,-10, 00,-30
+ db -10, 20,-30,-10, 40,-30, 00,-30,-30, 00,-10,-30, 00, 00,-30
+ db  00, 20,-30, 00, 40,-30, 20,-10,-30, 20, 00,-30, 20, 20,-30
+ db  40, 00,-30
+
+;-------------------------------------------------------------------------
+;I discovered this one completely by accident.  I moved a table from the
+;end of this file to somewhere up there... but forgot to move the label
+;(hehehe).  I was therfor referencing a table that is INCLUDED here by my
+;assembler.  It had lotsa junk in with it at first but i cleaned that out
+;and this was the result.  I love this object :) its KEWKL hehehe!
+
+Cross:
+ db 75
+ db 000,000,019,000,005,019,000,014,001,000,032,000,000,07D,000
+ db 000,0C9,000,001,05F,001,001,0AB,001,001,0F6,001,002,041,002
+ db 002,08D,002,002,0D8,002,003,023,003,003,005,004,003,06F,003
+ db 003,0BA,003,004,051,004,004,09C,004,004,0E7,004,005,013,006
+ db 005,032,005,005,07D,005,005,0C8,005,006,05E,006,006,0A9,006
+ db 006,0F4,006,007,03F,007,007,08A,007,007,0D5,007,008,000,009
+ db 008,020,008,008,06B,008,008,0B5,008,009,04B,009,009,095,009
+ db 009,0E0,009,00A,009,00B,00A,02A,00A,00A,075,00A,00A,0BF,00A
+ db 00B,054,00B,00D,007,026,00F,002,028,019,009,032,01E,004,037
+ db 022,00B,03B,02C,006,045,02D,001,046,039,008,052,03D,003,056
+ db 043,00A,05C,04B,000,064,04B,005,064,058,007,071,05B,002,074
+ db 064,009,07C,084,008,09C,088,003,0A1,08D,00A,0A6,096,000,0AF
+ db 096,005,0AF,0A3,007,0BC,0A6,002,0BF,0AE,009,0C7,0B5,004,0CE
+ db 0C2,006,0DB,0C4,001,0DD,0CE,008,0E7,0D3,003,0EC,0D8,00A,0F1
+ db 0E1,005,0FA,0E2,000,0FB,0EE,007,007,0F1,002,00A,0F9,009,011
+
+;=========================================================================
+
diff --git a/wmdots/old_dos_demo/dow.com b/wmdots/old_dos_demo/dow.com
new file mode 100644
index 0000000000000000000000000000000000000000..056de4cd198af25a1dbdb2405351bff413f68aa3
GIT binary patch
literal 12874
zcmb_=30M>7+IB(+`wj|mfk6=v2wT`gGDSf}R1mR>YXb=o*))Jii`}5d1(%*`ZEdlq
z)T*bgwY9C)s?`Z$-**u~0T)1I2_PT{{P%>~)AOJIJJ<DJ*Eds{H#6`0EcbKY?TOHt
zXZR&U%s7RcV6hqM3{8e5ZbPOT!;qoIFvD%koSxCc7kk{Mc&~##YPj{8Q!@nX7se{)
zyM%*-0}&A?Ap(<QQ;5(QVpBjkA(kX26HysNXi`GPT8Xu)5Ao_+CW)0MS-<-A=QA{p
zNX0Z_dKxq`h&Yj$5D|$INvbp{R@Dv5WDwD!L<tciOHL$`BqA9hN)i(>c+yt@+9}ES
zteQmC5t~R%PED2(QE4gv-sjIR(SM9qeP+CFyg)59iI60vN@Vo9^qyYrAx@N#pz0MQ
zijJcfA)=Gh62wHRC|-iCCL|}vt3GdvlgK0l2GU1JO~wNg#Ys~LQA$c&a)LzFY2$9Z
zij5=Eb|)ucaNMiGv)h<!a#oE#PI{aqY1SO+^qiPLk{FdB5&vr&(V`@2k_6|*EcE%M
z=tf@~REChsQZsP&gamrGbf4rHEEXkA#R2GRbz0(X%$BxWH5i*q5Xta+MR0hK>bvR>
zLu%~C3c%UZMJa@o-tBHI8m;;kLBETW;G^mwIPITicx9znsf37?iK3z~u_%?0VVm$C
zeFb2yKTM+X=zo}Dp5eEwb;;=}FZ|Ing_yMjR!o%co83D-*QPir&Xgz;O9;sy?x7b>
zN&dqg5wsunN@#zi&jwC1d@Gxc70gY~L9CM4i4j+O@jg9SmPABJVqT3`eP?`R#8;>N
zk{XATz@zDL8AMuAsx$#_@KY?xQ1uH?MMt_6n-t5EVO%0A8BU@v>?1aL)>VnL*+fbI
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

literal 0
HcmV?d00001

diff --git a/wmdots/old_dos_demo/sintab.s b/wmdots/old_dos_demo/sintab.s
new file mode 100644
index 0000000..89d8d5e
--- /dev/null
+++ b/wmdots/old_dos_demo/sintab.s
@@ -0,0 +1,528 @@
+;Sin and Cos tables based on 4096 degree circle.
+;-------------------------------------------------------------------------
+
+;Does not extend table by a right angle to account for COS...
+; Code takes care of this!
+
+;-------------------------------------------------------------------------
+
+ even 2
+
+SinTab:
+ dw 00000,00019,00032,0004b,00064,0007d,00096,000af     ;000
+ dw 000c9,000e2,000fb,00114,0012d,00146,0015f,00178     ;008
+ dw 00192,001ab,001c4,001dd,001f6,0020f,00228,00241     ;010
+ dw 0025b,00274,0028d,002a6,002bf,002d8,002f1,0030a     ;018
+ dw 00323,0033d,00356,0036f,00388,003a1,003ba,003d3     ;020
+ dw 003ec,00405,0041e,00437,00451,0046a,00483,0049c     ;028
+ dw 004b5,004ce,004e7,00500,00519,00532,0054b,00564     ;030
+ dw 0057d,00596,005af,005c8,005e1,005fa,00613,0062c     ;038
+ dw 00645,0065e,00677,00690,006a9,006c2,006db,006f4     ;040
+ dw 0070d,00726,0073f,00758,00771,0078a,007a3,007bc     ;048
+ dw 007d5,007ee,00807,00820,00839,00852,0086b,00884     ;050
+ dw 0089c,008b5,008ce,008e7,00900,00919,00932,0094b     ;058
+ dw 00964,0097c,00995,009ae,009c7,009e0,009f9,00a11     ;060
+ dw 00a2a,00a43,00a5c,00a75,00a8d,00aa6,00abf,00ad8     ;068
+ dw 00af1,00b09,00b22,00b3b,00b54,00b6c,00b85,00b9e     ;070
+ dw 00bb6,00bcf,00be8,00c01,00c19,00c32,00c4b,00c63     ;078
+ dw 00c7c,00c95,00cad,00cc6,00cde,00cf7,00d10,00d08     ;080
+ dw 00d41,00d59,00d72,00d8b,00da3,00dbc,00dd4,00ded     ;088
+ dw 00e05,00e1e,00e36,00e4f,00e67,00e80,00e98,00eb1     ;090
+ dw 00ec9,00ee2,00efa,00f12,00f2b,00f43,00f5c,00f74     ;098
+ dw 00f8c,00fa5,00fbd,00fd6,00fee,01006,0101f,01037     ;0a0
+ dw 0104f,01068,01080,01098,010b0,010c9,010e1,010f9     ;0a8
+ dw 01111,0112a,01142,0115a,01172,0118a,011a2,011bb     ;0b0
+ dw 011d3,011eb,01203,0121b,01233,0124b,01263,0127b     ;0b8
+ dw 01294,012ac,012c4,012dc,012f4,0130c,01324,0133c     ;0c0
+ dw 01354,0136c,01383,0139b,013b3,013cb,013e3,013fb     ;0c8
+ dw 01413,0142b,01443,0145a,01472,0148a,014a2,014ba     ;0d0
+ dw 014d1,014e9,01501,01519,01530,01548,01560,01577     ;0d8
+ dw 0158f,015a7,015be,015d6,015ee,01605,0161d,01634     ;0e0
+ dw 0164c,01664,0167b,01693,016aa,016c2,016d9,016f1     ;0e8
+ dw 01708,0171f,01737,0174e,01766,0177d,01794,017ac     ;0f0
+ dw 017c3,017da,017f2,01809,01820,01838,0184f,01866     ;0f8
+ dw 0187d,01895,018ac,018c3,018da,018f1,01908,01920     ;100
+ dw 01937,0194e,01965,0197c,01993,019aa,019c1,019d8     ;108
+ dw 019ef,01a06,01a1d,01a34,01a4b,01a62,01a79,01a8f     ;110
+ dw 01aa6,01abd,01ad4,01aeb,01b02,01b18,01b2f,01b46     ;118
+ dw 01b5d,01b73,01b8a,01ba1,01bb7,01bce,01be5,01bfb     ;120
+ dw 01c12,01c28,01c3f,01c55,01c6c,01c83,01c99,01caf     ;128
+ dw 01cc6,01cdc,01cf3,01d09,01d20,01d36,01d4c,01d63     ;130
+ dw 01d79,01d8f,01da6,01dbc,01dd2,01de8,01dfe,01e15     ;138
+ dw 01e2b,01e41,01e57,01e6d,01e83,01e99,01eb0,01ec6     ;140
+ dw 01edc,01ef2,01f08,01f1e,01f34,01f49,01f5f,01f75     ;148
+ dw 01f8b,01fa1,01fb7,01fcd,01fe2,01ff8,0200e,02024     ;150
+ dw 02039,0204f,02065,0207b,02090,020a6,020bb,020d1     ;158
+ dw 020e7,020fc,02112,02127,0213d,02152,02168,0217d     ;160
+ dw 02192,021a8,021bd,021d2,021e8,021fd,02212,02228     ;168
+ dw 0223d,02252,02267,0227d,02292,022a7,022bc,022d1     ;170
+ dw 022e6,022fb,02310,02325,0233a,0234f,02364,02379     ;178
+ dw 0238e,023a3,023b8,023cd,023e1,023f6,0240b,02420     ;180
+ dw 02434,02449,0245e,02473,02487,0249c,024b0,024c5     ;188
+ dw 024da,024ee,02503,02517,0252c,02540,02554,02569     ;190
+ dw 0257d,02592,025a6,025ba,025cf,025e3,025f7,0260b     ;198
+ dw 0261f,02634,02648,0265c,02670,02684,02698,026ac     ;1a0
+ dw 026c0,026d4,026e8,026fc,02710,02724,02738,0274c     ;1a8
+ dw 0275f,02773,02787,0279b,027af,027c2,027d6,027ea     ;1b0
+ dw 027fd,02811,02824,02838,0284b,0285f,02872,02886     ;1b8
+ dw 02899,028ad,028c0,028d4,028e7,028fa,0290e,02921     ;1c0
+ dw 02934,02947,0295a,0296e,02981,02994,029a7,029ba     ;1c8
+ dw 029cd,029e0,029f3,02a06,02a19,02a2c,02a3f,02a52     ;1d0
+ dw 02a65,02a77,02a8a,02a9d,02ab0,02ac2,02ad5,02ae8     ;1d8
+ dw 02afa,02b0d,02b20,02b32,02b45,02b57,02b6a,02b7c     ;1e0
+ dw 02b8e,02ba1,02bb3,02bc6,02bd8,02bea,02bfc,02c0f     ;1e8
+ dw 02c21,02c33,02c45,02c57,02c6a,02c7c,02c8e,02ca0     ;1f0
+ dw 02cb2,02cc4,02cd6,02ce8,02cf9,02d0b,02d1d,02d2f     ;1f8
+ dw 02d41,02d52,02d64,02d76,02d88,02d99,02dab,02dbc     ;200
+ dw 02dce,02de0,02df1,02e03,02e14,02e25,02e37,02e48     ;208
+ dw 02e5a,02e6b,02e7c,02e8d,02e9f,02eb0,02ec1,02ed2     ;210
+ dw 02ee3,02ef4,02f05,02f16,02f28,02f38,02f49,02f5a     ;218
+ dw 02f6b,02f7c,02f8d,02f9e,02faf,02fbf,02fd0,02fe1     ;220
+ dw 02ff1,03002,03013,03023,03034,03044,03055,03065     ;228
+ dw 03076,03086,03096,030a7,030b7,030c7,030d8,030e8     ;230
+ dw 030f8,03108,03118,03128,03138,03149,03159,03169     ;238
+ dw 03179,03188,03198,031a8,031b8,031c8,031d8,031e7     ;240
+ dw 031f7,03207,03216,03226,03236,03245,03255,03264     ;248
+ dw 03274,03283,03293,032a2,032b1,032c1,032d0,032df     ;250
+ dw 032ee,032fe,0330d,0331c,0332b,0333a,03349,03358     ;258
+ dw 03367,03376,03385,03394,033a3,033b2,033c1,033cf     ;260
+ dw 033de,033ed,033fb,0340a,03419,03427,03436,03444     ;268
+ dw 03453,03461,03470,0347e,0348c,0349b,034a9,034b7     ;270
+ dw 034c6,034d4,034e2,034f0,034fe,0350c,0351a,03528     ;278
+ dw 03536,03544,03552,03560,0356e,0357c,03589,03597     ;280
+ dw 035a5,035b3,035c0,035ce,035dc,035e9,035f7,03604     ;288
+ dw 03612,0361f,0362c,0363a,03647,03654,03662,0366f     ;290
+ dw 0367c,03689,03696,036a4,036b1,036be,036cb,036d8     ;298
+ dw 036e5,036f1,036fe,0370b,03718,03725,03731,0373e     ;2a0
+ dw 0374b,03757,03764,03771,0377d,0378a,03796,037a3     ;2a8
+ dw 037af,037bb,037c8,037d4,037e0,037ed,037f9,03805     ;2b0
+ dw 03811,0381d,03829,03835,03841,0384d,03859,03865     ;2b8
+ dw 03871,0387d,03889,03894,038a0,038ac,038b7,038c3     ;2c0
+ dw 038cf,038da,038e6,038f1,038fd,03908,03913,0391f     ;2c8
+ dw 0392a,03935,03941,0394c,03957,03962,0396d,03978     ;2d0
+ dw 03983,0398e,03999,039a4,039af,039ba,039c5,039d0     ;2d8
+ dw 039da,039e5,039f0,039fb,03a05,03a10,03a1a,03a25     ;2e0
+ dw 03a2f,03a3a,03a44,03a4f,03a59,03a63,03a6d,03a78     ;2e0
+ dw 03a82,03a8c,03a96,03aa0,03aaa,03ab4,03abe,03ac8     ;2f0
+ dw 03ad2,03adc,03ae6,03af0,03afa,03b03,03b0d,03b17     ;2f8
+ dw 03b20,03b2a,03b34,03b3d,03b47,03b50,03b59,03b63     ;300
+ dw 03b6c,03b75,03b7f,03b88,03b91,03b9a,03ba3,03bad     ;308
+ dw 03bb6,03bbf,03bc8,03bd1,03bda,03be2,03beb,03bf4     ;310
+ dw 03bfd,03c06,03c0e,03c17,03c20,03c28,03c31,03c39     ;318
+ dw 03c42,03c4a,03c53,03c5b,03c63,03c6c,03c74,03c7c     ;320
+ dw 03c84,03c8c,03c95,03c9d,03ca5,03cad,03cb5,03cbd     ;328
+ dw 03cc5,03ccc,03cd4,03cdc,03ce4,03cec,03cf3,03cfb     ;320
+ dw 03d02,03d0a,03d12,03d19,03d21,03d28,03d2f,03d37     ;338
+ dw 03d3e,03d45,03d4d,03d54,03d5b,03d62,03d69,03d70     ;340
+ dw 03d77,03d7e,03d85,03d8c,03d93,03d9a,03da1,03da7     ;348
+ dw 03dae,03db5,03dbb,03dc2,03dc9,03dcf,03dd6,03ddc     ;350
+ dw 03de2,03de9,03def,03df5,03dfc,03e02,03e08,03e0e     ;358
+ dw 03e14,03e1b,03e21,03e27,03e2d,03e33,03e38,03e3e     ;360
+ dw 03e44,03e4a,03e50,03e55,03e5b,03e61,03e66,03e6c     ;368
+ dw 03e71,03e77,03e7c,03e82,03e87,03e8c,03e92,03e97     ;370
+ dw 03e9c,03ea1,03ea7,03eac,03eb1,03eb6,03ebb,03ec0     ;378
+ dw 03ec5,03eca,03ece,03ed3,03ed8,03edd,03ee1,03ee6     ;380
+ dw 03eeb,03eef,03ef4,03ef8,03efd,03f01,03f06,03f0a     ;388
+ dw 03f0e,03f13,03f17,03f1b,03f1f,03f23,03f27,03f2b     ;390
+ dw 03f2f,03f33,03f37,03f3b,03f3f,03f43,03f47,03f4a     ;398
+ dw 03f4e,03f52,03f55,03f59,03f5d,03f60,03f64,03f67     ;3a0
+ dw 03f6a,03f6e,03f71,03f74,03f78,03f7b,03f7e,03f81     ;3a8
+ dw 03f84,03f87,03f8a,03f8d,03f90,03f93,03f96,03f99     ;3b0
+ dw 03f9c,03f9e,03fa1,03fa4,03fa6,03fa9,03fac,03fae     ;3b8
+ dw 03fb1,03fb3,03fb5,03fb8,03fba,03fbc,03fbf,03fc1     ;3c0
+ dw 03fc3,03fc5,03fc7,03fc9,03fcb,03fcd,03fcf,03fd1     ;3c8
+ dw 03fd3,03fd5,03fd7,03fd8,03fda,03fdc,03fde,03fdf     ;3d0
+ dw 03fe1,03fe2,03fe4,03fe5,03fe7,03fe8,03fe9,03feb     ;3d8
+ dw 03fec,03fed,03fee,03fef,03ff0,03ff1,03ff2,03ff3     ;3e0
+ dw 03ff4,03ff5,03ff6,03ff7,03ff8,03ff9,03ff9,03ffa     ;3e8
+ dw 03ffb,03ffb,03ffc,03ffc,03ffd,03ffd,03ffe,03ffe     ;3f0
+ dw 03ffe,03fff,03fff,03fff,03fff,03fff,03fff,03fff     ;3f8
+
+ dw 03fff,03fff,03fff,03fff,03fff,03fff,03fff,03fff     ;400
+ dw 03ffe,03ffe,03ffe,03ffd,03ffd,03ffc,03ffc,03ffb     ;408
+ dw 03ffb,03ffa,03ff9,03ff9,03ff8,03ff7,03ff6,03ff5     ;410
+ dw 03ff4,03ff3,03ff2,03ff1,03ff0,03fef,03fee,03fed     ;418
+ dw 03fec,03feb,03fe9,03fe8,03fe7,03fe5,03fe4,03fe2     ;420
+ dw 03fe1,03fdf,03fde,03fdc,03fda,03fd8,03fd7,03fd5     ;428
+ dw 03fd3,03fd1,03fcf,03fcd,03fcb,03fc9,03fc7,03fc5     ;430
+ dw 03fc3,03fc1,03fbf,03fbc,03fba,03fb8,03fb5,03fb3     ;438
+ dw 03fb1,03fae,03fac,03fa9,03fa6,03fa4,03fa1,03f9e     ;440
+ dw 03f9c,03f99,03f96,03f93,03f90,03f8d,03f8a,03f87     ;448
+ dw 03f84,03f81,03f7e,03f7b,03f78,03f74,03f71,03f6e     ;450
+ dw 03f6a,03f67,03f64,03f60,03f5d,03f59,03f55,03f52     ;458
+ dw 03f4e,03f4a,03f47,03f43,03f3f,03f3b,03f37,03f33     ;460
+ dw 03f2f,03f2b,03f27,03f23,03f1f,03f1b,03f17,03f13     ;468
+ dw 03f0e,03f0a,03f06,03f01,03efd,03ef8,03ef4,03eef     ;470
+ dw 03eeb,03ee6,03ee1,03edd,03ed8,03ed3,03ece,03eca     ;478
+ dw 03ec5,03ec0,03ebb,03eb6,03eb1,03eac,03ea7,03ea1     ;480
+ dw 03e9c,03e97,03e92,03e8c,03e87,03e82,03e7c,03e77     ;488
+ dw 03e71,03e6c,03e66,03e61,03e5b,03e55,03e50,03e4a     ;490
+ dw 03e44,03e3e,03e38,03e33,03e2d,03e27,03e21,03e1b     ;498
+ dw 03e14,03e0e,03e08,03e02,03dfc,03df5,03def,03de9     ;4a0
+ dw 03de2,03ddc,03dd6,03dcf,03dc9,03dc2,03dbb,03db5     ;4a8
+ dw 03dae,03da7,03da1,03d9a,03d93,03d8c,03d85,03d7e     ;4b0
+ dw 03d77,03d70,03d69,03d62,03d5b,03d54,03d4d,03d45     ;4b8
+ dw 03d3e,03d37,03d2f,03d28,03d21,03d19,03d12,03d0a     ;4c0
+ dw 03d02,03cfb,03cf3,03cec,03ce4,03cdc,03cd4,03ccc     ;4c8
+ dw 03cc5,03cbd,03cb5,03cad,03ca5,03c9d,03c95,03c8c     ;4d0
+ dw 03c84,03c7c,03c74,03c6c,03c63,03c5b,03c53,03c4a     ;4d8
+ dw 03c42,03c39,03c31,03c28,03c20,03c17,03c0e,03c06     ;4e0
+ dw 03bfd,03bf4,03beb,03be2,03bda,03bd1,03bc8,03bbf     ;4e8
+ dw 03bb6,03bad,03ba3,03b9a,03b91,03b88,03b7f,03b75     ;4f0
+ dw 03b6c,03b63,03b59,03b50,03b47,03b3d,03b34,03b2a     ;4f8
+ dw 03b20,03b17,03b0d,03b03,03afa,03af0,03ae6,03adc     ;500
+ dw 03ad2,03ac8,03abe,03ab4,03aaa,03aa0,03a96,03a8c     ;508
+ dw 03a82,03a78,03a6d,03a63,03a59,03a4f,03a44,03a3a     ;510
+ dw 03a2f,03a25,03a1a,03a10,03a05,039fb,039f0,039e5     ;518
+ dw 039da,039d0,039c5,039ba,039af,039a4,03999,0398e     ;520
+ dw 03983,03978,0396d,03962,03957,0394c,03941,03935     ;528
+ dw 0392a,0391f,03913,03908,038fd,038f1,038e6,038da     ;530
+ dw 038cf,038c3,038b7,038ac,038a0,03894,03889,0387d     ;538
+ dw 03871,03865,03859,0384d,03841,03835,03829,0381d     ;540
+ dw 03811,03805,037f9,037ed,037e0,037d4,037c8,037bb     ;548
+ dw 037af,037a3,03796,0378a,0377d,03771,03764,03757     ;550
+ dw 0374b,0373e,03731,03725,03718,0370b,036fe,036f1     ;558
+ dw 036e5,036d8,036cb,036be,036b1,036a4,03696,03689     ;560
+ dw 0367c,0366f,03662,03654,03647,0363a,0362c,0361f     ;568
+ dw 03612,03604,035f7,035e9,035dc,035ce,035c0,035b3     ;570
+ dw 035a5,03597,03589,0357c,0356e,03560,03552,03544     ;578
+ dw 03536,03528,0351a,0350c,034fe,034f0,034e2,034d4     ;580
+ dw 034c6,034b7,034a9,0349b,0348c,0347e,03470,03461     ;588
+ dw 03453,03444,03436,03427,03419,0340a,033fb,033ed     ;590
+ dw 033de,033cf,033c1,033b2,033a3,03394,03385,03376     ;598
+ dw 03367,03358,03349,0333a,0332b,0331c,0330d,032fe     ;5a0
+ dw 032ee,032df,032d0,032c1,032b1,032a2,03293,03283     ;5a8
+ dw 03274,03264,03255,03245,03236,03226,03216,03207     ;5b0
+ dw 031f7,031e7,031d8,031c8,031b8,031a8,03198,03188     ;5b8
+ dw 03179,03169,03159,03149,03138,03128,03118,03108     ;5c0
+ dw 030f8,030e8,030d8,030c7,030b7,030a7,03096,03086     ;5c8
+ dw 03076,03065,03055,03044,03034,03023,03013,03002     ;5d0
+ dw 02ff1,02fe1,02fd0,02fbf,02faf,02f9e,02f8d,02f7c     ;5d8
+ dw 02f6b,02f5a,02f49,02f38,02f27,02f16,02f05,02ef4     ;5e0
+ dw 02ee3,02ed2,02ec1,02eb0,02e9f,02e8d,02e7c,02e6b     ;5e8
+ dw 02e5a,02e48,02e37,02e25,02e14,02e03,02df1,02de0     ;5f0
+ dw 02dce,02dbc,02dab,02d99,02d88,02d76,02d64,02d52     ;5f8
+ dw 02d41,02d2f,02d1d,02d0b,02cf9,02ce8,02cd6,02cc4     ;600
+ dw 02cb2,02ca0,02c8e,02c7c,02c6a,02c57,02c45,02c33     ;608
+ dw 02c21,02c0f,02bfc,02bea,02bd8,02bc6,02bb3,02ba1     ;610
+ dw 02b8e,02b7c,02b6a,02b57,02b45,02b32,02b20,02b0d     ;618
+ dw 02afa,02ae8,02ad5,02ac2,02ab0,02a9d,02a8a,02a77     ;620
+ dw 02a65,02a52,02a3f,02a2c,02a19,02a06,029f3,029e0     ;628
+ dw 029cd,029ba,029a7,02994,02981,0296e,0295a,02947     ;630
+ dw 02934,02921,0290e,028fa,028e7,028d4,028c0,028ad     ;638
+ dw 02899,02886,02872,0285f,0284b,02838,02824,02811     ;640
+ dw 027fd,027ea,027d6,027c2,027af,0279b,02787,02773     ;648
+ dw 0275f,0274c,02738,02724,02710,026fc,026e8,026d4     ;650
+ dw 026c0,026ac,02698,02684,02670,0265c,02648,02634     ;658
+ dw 0261f,0260b,025f7,025e3,025cf,025ba,025a6,02592     ;660
+ dw 0257d,02569,02554,02540,0252c,02517,02503,024ee     ;668
+ dw 024da,024c5,024b0,0249c,02487,02473,0245e,02449     ;670
+ dw 02434,02420,0240b,023f6,023e1,023cd,023b8,023a3     ;678
+ dw 0238e,02379,02364,0234f,0233a,02325,02310,022fb     ;680
+ dw 022e6,022d1,022bc,022a7,02292,0227d,02267,02252     ;688
+ dw 0223d,02228,02212,021fd,021e8,021d2,021bd,021a8     ;690
+ dw 02192,0217d,02168,02152,0213d,02127,02112,020fc     ;698
+ dw 020e7,020d1,020bb,020a6,02090,0207b,02065,0204f     ;6a0
+ dw 02039,02024,0200e,01ff8,01fe2,01fcd,01fb7,01fa1     ;6a8
+ dw 01f8b,01f75,01f5f,01f49,01f34,01f1e,01f08,01ef2     ;6b0
+ dw 01edc,01ec6,01eb0,01e99,01e83,01e6d,01e57,01e41     ;6b8
+ dw 01e2b,01e15,01dfe,01de8,01dd2,01dbc,01da6,01d8f     ;6c0
+ dw 01d79,01d63,01d4c,01d36,01d20,01d09,01cf3,01cdc     ;6c8
+ dw 01cc6,01caf,01c99,01c83,01c6c,01c55,01c3f,01c28     ;6d0
+ dw 01c12,01bfb,01be5,01bce,01bb7,01ba1,01b8a,01b73     ;6d8
+ dw 01b5d,01b46,01b2f,01b18,01b02,01aeb,01ad4,01abd     ;6e0
+ dw 01aa6,01a8f,01a79,01a62,01a4b,01a34,01a1d,01a06     ;6e8
+ dw 019ef,019d8,019c1,019aa,01993,0197c,01965,0194e     ;6f0
+ dw 01937,01920,01908,018f1,018da,018c3,018ac,01895     ;6f8
+ dw 0187d,01866,0184f,01838,01820,01809,017f2,017da     ;700
+ dw 017c3,017ac,01794,0177d,01766,0174e,01737,0171f     ;708
+ dw 01708,016f1,016d9,016c2,016aa,01693,0167b,01664     ;710
+ dw 0164c,01634,0161d,01605,015ee,015d6,015be,015a7     ;718
+ dw 0158f,01577,01560,01548,01530,01519,01501,014e9     ;720
+ dw 014d1,014ba,014a2,0148a,01472,0145a,01443,0142b     ;728
+ dw 01413,013fb,013e3,013cb,013b3,0139b,01383,0136c     ;730
+ dw 01354,0133c,01324,0130c,012f4,012dc,012c4,012ac     ;738
+ dw 01294,0127b,01263,0124b,01233,0121b,01203,011eb     ;740
+ dw 011d3,011bb,011a2,0118a,01172,0115a,01142,0112a     ;748
+ dw 01111,010f9,010e1,010c9,010b0,01098,01080,01068     ;750
+ dw 0104f,01037,0101f,01006,00fee,00fd6,00fbd,00fa5     ;758
+ dw 00f8c,00f74,00f5c,00f43,00f2b,00f12,00efa,00ee2     ;760
+ dw 00ec9,00eb1,00e98,00e80,00e67,00e4f,00e36,00e1e     ;768
+ dw 00e05,00ded,00dd4,00dbc,00da3,00d8b,00d72,00d59     ;770
+ dw 00d41,00d28,00d10,00cf7,00cde,00cc6,00cad,00c94     ;778
+ dw 00c7c,00c63,00c4b,00c32,00c19,00c01,00be8,00bcf     ;780
+ dw 00bb6,00b9e,00b85,00b6c,00b54,00b3b,00b22,00b09     ;788
+ dw 00af1,00ad8,00abf,00aa6,00a8d,00a75,00a5c,00a43     ;790
+ dw 00a2a,00a11,009f9,009e0,009c7,009ae,00995,0097c     ;798
+ dw 00964,0094b,00932,00919,00900,008e7,008ce,008b5     ;7a0
+ dw 0089c,00884,0086b,00852,00839,00820,00807,007ee     ;7a8
+ dw 007d5,007bc,007a3,0078a,00771,00758,0073f,00726     ;7b0
+ dw 0070d,006f4,006db,006c2,006a9,00690,00677,0065e     ;7b8
+ dw 00645,0062c,00613,005fa,005e1,005c8,005af,00596     ;7c0
+ dw 0057d,00564,0054b,00532,00519,00500,004e7,004ce     ;7c8
+ dw 004b5,0049c,00483,0046a,00450,00437,0041e,00405     ;7d0
+ dw 003ec,003d3,003ba,003a1,00388,0036f,00356,0033d     ;7d8
+ dw 00323,0030a,002f1,002d8,002bf,002a6,0028d,00274     ;7e0
+ dw 0025b,00241,00228,0020f,001f6,001dd,001c4,001ab     ;7e8
+ dw 00192,00178,0015f,00146,0012d,00114,000fb,000e2     ;7f0
+ dw 000c9,000af,00096,0007d,00064,0004b,00032,00019     ;7f8
+
+ dw 00000,0ffe7,0ffce,0ffb5,0ff9c,0ff83,0ff6a,0ff51     ;800
+ dw 0ff37,0ff1e,0ff05,0feec,0fed3,0feba,0fea1,0fe88     ;808
+ dw 0fe6e,0fe55,0fe3c,0fe23,0fe0a,0fdf1,0fdd8,0fdbf     ;810
+ dw 0fda5,0fd8c,0fd73,0fd5a,0fd41,0fd28,0fd0f,0fcf6     ;818
+ dw 0fcdd,0fcc3,0fcaa,0fc91,0fc78,0fc5f,0fc46,0fc2d     ;820
+ dw 0fc14,0fbfb,0fbe2,0fbc9,0fbaf,0fb96,0fb7d,0fb64     ;828
+ dw 0fb4b,0fb32,0fb19,0fb00,0fae7,0face,0fab5,0fa9c     ;830
+ dw 0fa83,0fa6a,0fa51,0fa38,0fa1f,0fa06,0f9ed,0f9d4     ;838
+ dw 0f9bb,0f9a2,0f989,0f970,0f957,0f93e,0f925,0f90c     ;840
+ dw 0f8f3,0f8da,0f8c1,0f8a8,0f88f,0f876,0f85d,0f844     ;848
+ dw 0f82b,0f812,0f7f9,0f7e0,0f7c7,0f7ae,0f795,0f77c     ;850
+ dw 0f764,0f74b,0f732,0f719,0f700,0f6e7,0f6ce,0f6b5     ;858
+ dw 0f69c,0f684,0f66b,0f652,0f639,0f620,0f607,0f5ef     ;860
+ dw 0f5d6,0f5bd,0f5a4,0f58b,0f573,0f55a,0f541,0f528     ;868
+ dw 0f50f,0f4f7,0f4de,0f4c5,0f4ac,0f494,0f47b,0f462     ;870
+ dw 0f44a,0f431,0f418,0f3ff,0f3e7,0f3ce,0f3b5,0f39d     ;878
+ dw 0f384,0f36b,0f353,0f33a,0f322,0f309,0f2f0,0f2d8     ;880
+ dw 0f2bf,0f2a7,0f28e,0f275,0f25d,0f244,0f22c,0f213     ;888
+ dw 0f1fb,0f1e2,0f1ca,0f1b1,0f199,0f180,0f168,0f14f     ;890
+ dw 0f137,0f11e,0f106,0f0ee,0f0d5,0f0bd,0f0a4,0f08c     ;898
+ dw 0f074,0f05b,0f043,0f02a,0f012,0effa,0efe1,0efc9     ;8a0
+ dw 0efb1,0ef98,0ef80,0ef68,0ef50,0ef37,0ef1f,0ef07     ;8a8
+ dw 0eeef,0eed6,0eebe,0eea6,0ee8e,0ee76,0ee5e,0ee45     ;8b0
+ dw 0ee2d,0ee15,0edfd,0ede5,0edcd,0edb5,0ed9d,0ed85     ;8b8
+ dw 0ed6c,0ed54,0ed3c,0ed24,0ed0c,0ecf4,0ecdc,0ecc4     ;8c0
+ dw 0ecac,0ec94,0ec7d,0ec65,0ec4d,0ec35,0ec1d,0ec05     ;8c8
+ dw 0ebed,0ebd5,0ebbd,0eba6,0eb8e,0eb76,0eb5e,0eb46     ;8d0
+ dw 0eb2f,0eb17,0eaff,0eae7,0ead0,0eab8,0eaa0,0ea89     ;8d8
+ dw 0ea71,0ea59,0ea42,0ea2a,0ea12,0e9fb,0e9e3,0e9cc     ;8e0
+ dw 0e9b4,0e99c,0e985,0e96d,0e956,0e93e,0e927,0e90f     ;8e8
+ dw 0e8f8,0e8e1,0e8c9,0e8b2,0e89a,0e883,0e86c,0e854     ;8f0
+ dw 0e83d,0e826,0e80e,0e7f7,0e7e0,0e7c8,0e7b1,0e79a     ;8f8
+ dw 0e783,0e76b,0e754,0e73d,0e726,0e70f,0e6f8,0e6e0     ;900
+ dw 0e6c9,0e6b2,0e69b,0e684,0e66d,0e656,0e63f,0e628     ;908
+ dw 0e611,0e5fa,0e5e3,0e5cc,0e5b5,0e59e,0e587,0e571     ;910
+ dw 0e55a,0e543,0e52c,0e515,0e4fe,0e4e8,0e4d1,0e4ba     ;918
+ dw 0e4a3,0e48d,0e476,0e45f,0e449,0e432,0e41b,0e405     ;920
+ dw 0e3ee,0e3d8,0e3c1,0e3ab,0e394,0e37d,0e367,0e351     ;928
+ dw 0e33a,0e324,0e30d,0e2f7,0e2e0,0e2ca,0e2b4,0e29d     ;930
+ dw 0e287,0e271,0e25a,0e244,0e22e,0e218,0e201,0e1eb     ;938
+ dw 0e1d5,0e1bf,0e1a9,0e193,0e17d,0e167,0e150,0e13a     ;940
+ dw 0e124,0e10e,0e0f8,0e0e2,0e0cc,0e0b7,0e0a1,0e08b     ;948
+ dw 0e075,0e05f,0e049,0e033,0e01e,0e008,0dff2,0dfdc     ;950
+ dw 0dfc7,0dfb1,0df9b,0df85,0df70,0df5a,0df45,0df2f     ;958
+ dw 0df19,0df04,0deee,0ded9,0dec3,0deae,0de98,0de83     ;960
+ dw 0de6e,0de58,0de43,0de2e,0de18,0de03,0ddee,0ddd8     ;968
+ dw 0ddc3,0ddae,0dd99,0dd83,0dd6e,0dd59,0dd44,0dd2f     ;970
+ dw 0dd1a,0dd05,0dcf0,0dcdb,0dcc6,0dcb1,0dc9c,0dc87     ;978
+ dw 0dc72,0dc5d,0dc48,0dc33,0dc1f,0dc0a,0dbf5,0dbe0     ;980
+ dw 0dbcc,0dbb7,0dba2,0db8d,0db79,0db64,0db50,0db3b     ;988
+ dw 0db26,0db12,0dafd,0dae9,0dad4,0dac0,0daac,0da97     ;990
+ dw 0da83,0da6e,0da5a,0da46,0da31,0da1d,0da09,0d9f5     ;998
+ dw 0d9e1,0d9cc,0d9b8,0d9a4,0d990,0d97c,0d968,0d954     ;9a0
+ dw 0d940,0d92c,0d918,0d904,0d8f0,0d8dc,0d8c8,0d8b4     ;9a8
+ dw 0d8a1,0d88d,0d879,0d865,0d851,0d83e,0d82a,0d816     ;9b0
+ dw 0d803,0d7ef,0d7dc,0d7c8,0d7b5,0d7a1,0d78d,0d77a     ;9b8
+ dw 0d767,0d753,0d740,0d72c,0d719,0d706,0d6f2,0d6df     ;9c0
+ dw 0d6cc,0d6b9,0d6a6,0d692,0d67f,0d66c,0d659,0d646     ;9c8
+ dw 0d633,0d620,0d60d,0d5fa,0d5e7,0d5d4,0d5c1,0d5ae     ;9d0
+ dw 0d59b,0d589,0d576,0d563,0d550,0d53e,0d52b,0d518     ;9d8
+ dw 0d506,0d4f3,0d4e0,0d4ce,0d4bb,0d4a9,0d496,0d484     ;9e0
+ dw 0d472,0d45f,0d44d,0d43a,0d428,0d416,0d404,0d3f1     ;9e8
+ dw 0d3df,0d3cd,0d3bb,0d3a9,0d396,0d384,0d372,0d360     ;9f0
+ dw 0d34e,0d33c,0d32a,0d318,0d307,0d2f5,0d2e3,0d2d1     ;9f8
+ dw 0d2bf,0d2ad,0d29c,0d28a,0d278,0d267,0d255,0d244     ;a00
+ dw 0d232,0d220,0d20f,0d1fd,0d1ec,0d1db,0d1c9,0d1b8     ;a08
+ dw 0d1a6,0d195,0d184,0d173,0d161,0d150,0d13f,0d12e     ;a10
+ dw 0d11d,0d10c,0d0fb,0d0e9,0d0d8,0d0c8,0d0b7,0d0a6     ;a18
+ dw 0d095,0d084,0d073,0d062,0d051,0d041,0d030,0d01f     ;a20
+ dw 0d00f,0cffe,0cfed,0cfdd,0cfcc,0cfbc,0cfab,0cf9b     ;a28
+ dw 0cf8a,0cf7a,0cf6a,0cf59,0cf49,0cf39,0cf28,0cf18     ;a30
+ dw 0cf08,0cef8,0cee8,0ced8,0cec8,0ceb7,0cea7,0ce97     ;a38
+ dw 0ce87,0ce78,0ce68,0ce58,0ce48,0ce38,0ce28,0ce19     ;a40
+ dw 0ce09,0cdf9,0cdea,0cdda,0cdca,0cdbb,0cdab,0cd9c     ;a48
+ dw 0cd8c,0cd7d,0cd6d,0cd5e,0cd4f,0cd3f,0cd30,0cd21     ;a50
+ dw 0cd12,0cd02,0ccf3,0cce4,0ccd5,0ccc6,0ccb7,0cca8     ;a58
+ dw 0cc99,0cc8a,0cc7b,0cc6c,0cc5d,0cc4e,0cc3f,0cc31     ;a60
+ dw 0cc22,0cc13,0cc05,0cbf6,0cbe7,0cbd9,0cbca,0cbbc     ;a68
+ dw 0cbad,0cb9f,0cb90,0cb82,0cb74,0cb65,0cb57,0cb49     ;a70
+ dw 0cb3a,0cb2c,0cb1e,0cb10,0cb02,0caf4,0cae6,0cad8     ;a78
+ dw 0caca,0cabc,0caae,0caa0,0ca92,0ca84,0ca76,0ca69     ;a80
+ dw 0ca5b,0ca4d,0ca40,0ca32,0ca24,0ca17,0ca09,0c9fc     ;a88
+ dw 0c9ee,0c9e1,0c9d4,0c9c6,0c9b9,0c9ac,0c99e,0c991     ;a90
+ dw 0c984,0c977,0c96a,0c95c,0c94f,0c942,0c935,0c928     ;a98
+ dw 0c91b,0c90f,0c902,0c8f5,0c8e8,0c8db,0c8cf,0c8c2     ;aa0
+ dw 0c8b5,0c8a9,0c89c,0c88f,0c883,0c876,0c86a,0c85d     ;aa8
+ dw 0c851,0c845,0c838,0c82c,0c820,0c813,0c807,0c7fb     ;ab0
+ dw 0c7ef,0c7e3,0c7d7,0c7cb,0c7bf,0c7b3,0c7a7,0c79b     ;ab8
+ dw 0c78f,0c783,0c777,0c76c,0c760,0c754,0c749,0c73d     ;ac0
+ dw 0c731,0c726,0c71a,0c70f,0c703,0c6f8,0c6ed,0c6e1     ;ac8
+ dw 0c6d6,0c6cb,0c6bf,0c6b4,0c6a9,0c69e,0c693,0c688     ;ad0
+ dw 0c67d,0c672,0c667,0c65c,0c651,0c646,0c63b,0c630     ;ad8
+ dw 0c626,0c61b,0c610,0c605,0c5fb,0c5f0,0c5e6,0c5db     ;ae0
+ dw 0c5d1,0c5c6,0c5bc,0c5b1,0c5a7,0c59d,0c593,0c588     ;ae8
+ dw 0c57e,0c574,0c56a,0c560,0c556,0c54c,0c542,0c538     ;af0
+ dw 0c52e,0c524,0c51a,0c510,0c506,0c4fd,0c4f3,0c4e9     ;af8
+ dw 0c4e0,0c4d6,0c4cc,0c4c3,0c4b9,0c4b0,0c4a7,0c49d     ;b00
+ dw 0c494,0c48b,0c481,0c478,0c46f,0c466,0c45d,0c453     ;b08
+ dw 0c44a,0c441,0c438,0c42f,0c426,0c41e,0c415,0c40c     ;b10
+ dw 0c403,0c3fa,0c3f2,0c3e9,0c3e0,0c3d8,0c3cf,0c3c7     ;b18
+ dw 0c3be,0c3b6,0c3ad,0c3a5,0c39d,0c394,0c38c,0c384     ;b20
+ dw 0c37c,0c374,0c36b,0c363,0c35b,0c353,0c34b,0c343     ;b28
+ dw 0c33b,0c334,0c32c,0c324,0c31c,0c314,0c30d,0c305     ;b30
+ dw 0c2fe,0c2f6,0c2ee,0c2e7,0c2df,0c2d8,0c2d1,0c2c9     ;b38
+ dw 0c2c2,0c2bb,0c2b3,0c2ac,0c2a5,0c29e,0c297,0c290     ;b40
+ dw 0c289,0c282,0c27b,0c274,0c26d,0c266,0c25f,0c259     ;b48
+ dw 0c252,0c24b,0c245,0c23e,0c237,0c231,0c22a,0c224     ;b50
+ dw 0c21e,0c217,0c211,0c20b,0c204,0c1fe,0c1f8,0c1f2     ;b58
+ dw 0c1ec,0c1e5,0c1df,0c1d9,0c1d3,0c1cd,0c1c8,0c1c2     ;b60
+ dw 0c1bc,0c1b6,0c1b0,0c1ab,0c1a5,0c19f,0c19a,0c194     ;b68
+ dw 0c18f,0c189,0c184,0c17e,0c179,0c174,0c16e,0c169     ;b70
+ dw 0c164,0c15f,0c159,0c154,0c14f,0c14a,0c145,0c140     ;b78
+ dw 0c13b,0c136,0c132,0c12d,0c128,0c123,0c11f,0c11a     ;b80
+ dw 0c115,0c111,0c10c,0c108,0c103,0c0ff,0c0fa,0c0f6     ;b88
+ dw 0c0f2,0c0ed,0c0e9,0c0e5,0c0e1,0c0dd,0c0d9,0c0d5     ;b90
+ dw 0c0d1,0c0cd,0c0c9,0c0c5,0c0c1,0c0bd,0c0b9,0c0b6     ;b98
+ dw 0c0b2,0c0ae,0c0ab,0c0a7,0c0a3,0c0a0,0c09c,0c099     ;ba0
+ dw 0c096,0c092,0c08f,0c08c,0c088,0c085,0c082,0c07f     ;ba8
+ dw 0c07c,0c079,0c076,0c073,0c070,0c06d,0c06a,0c067     ;bb0
+ dw 0c064,0c062,0c05f,0c05c,0c05a,0c057,0c054,0c052     ;bb8
+ dw 0c04f,0c04d,0c04b,0c048,0c046,0c044,0c041,0c03f     ;bc0
+ dw 0c03d,0c03b,0c039,0c037,0c035,0c033,0c031,0c02f     ;bc8
+ dw 0c02d,0c02b,0c029,0c028,0c026,0c024,0c022,0c021     ;bd0
+ dw 0c01f,0c01e,0c01c,0c01b,0c019,0c018,0c017,0c015     ;bd8
+ dw 0c014,0c013,0c012,0c011,0c010,0c00f,0c00e,0c00d     ;be0
+ dw 0c00c,0c00b,0c00a,0c009,0c008,0c007,0c007,0c006     ;be8
+ dw 0c005,0c005,0c004,0c004,0c003,0c003,0c002,0c002     ;bf0
+ dw 0c002,0c001,0c001,0c001,0c001,0c001,0c001,0c001     ;bf8
+
+ dw 0c001,0c001,0c001,0c001,0c001,0c001,0c001,0c001     ;c00
+ dw 0c002,0c002,0c002,0c003,0c003,0c004,0c004,0c005     ;c08
+ dw 0c005,0c006,0c007,0c007,0c008,0c009,0c00a,0c00b     ;c10
+ dw 0c00c,0c00d,0c00e,0c00f,0c010,0c011,0c012,0c013     ;c18
+ dw 0c014,0c015,0c017,0c018,0c019,0c01b,0c01c,0c01e     ;c20
+ dw 0c01f,0c021,0c022,0c024,0c026,0c028,0c029,0c02b     ;c28
+ dw 0c02d,0c02f,0c031,0c033,0c035,0c037,0c039,0c03b     ;c30
+ dw 0c03d,0c03f,0c041,0c044,0c046,0c048,0c04b,0c04d     ;c38
+ dw 0c04f,0c052,0c054,0c057,0c05a,0c05c,0c05f,0c062     ;c40
+ dw 0c064,0c067,0c06a,0c06d,0c070,0c073,0c076,0c079     ;c48
+ dw 0c07c,0c07f,0c082,0c085,0c088,0c08c,0c08f,0c092     ;c50
+ dw 0c096,0c099,0c09c,0c0a0,0c0a3,0c0a7,0c0ab,0c0ae     ;c58
+ dw 0c0b2,0c0b6,0c0b9,0c0bd,0c0c1,0c0c5,0c0c9,0c0cd     ;c60
+ dw 0c0d1,0c0d5,0c0d9,0c0dd,0c0e1,0c0e5,0c0e9,0c0ed     ;c68
+ dw 0c0f2,0c0f6,0c0fa,0c0ff,0c103,0c108,0c10c,0c111     ;c70
+ dw 0c115,0c11a,0c11f,0c123,0c128,0c12d,0c132,0c136     ;c78
+ dw 0c13b,0c140,0c145,0c14a,0c14f,0c154,0c159,0c15f     ;c80
+ dw 0c164,0c169,0c16e,0c174,0c179,0c17e,0c184,0c189     ;c88
+ dw 0c18f,0c194,0c19a,0c19f,0c1a5,0c1ab,0c1b0,0c1b6     ;c90
+ dw 0c1bc,0c1c2,0c1c8,0c1cd,0c1d3,0c1d9,0c1df,0c1e5     ;c98
+ dw 0c1ec,0c1f2,0c1f8,0c1fe,0c204,0c20b,0c211,0c217     ;ca0
+ dw 0c21e,0c224,0c22a,0c231,0c237,0c23e,0c245,0c24b     ;ca8
+ dw 0c252,0c259,0c25f,0c266,0c26d,0c274,0c27b,0c282     ;cb0
+ dw 0c289,0c290,0c297,0c29e,0c2a5,0c2ac,0c2b3,0c2bb     ;cb8
+ dw 0c2c2,0c2c9,0c2d1,0c2d8,0c2df,0c2e7,0c2ee,0c2f6     ;cc0
+ dw 0c2fe,0c305,0c30d,0c314,0c31c,0c324,0c32c,0c334     ;cc8
+ dw 0c33b,0c343,0c34b,0c353,0c35b,0c363,0c36b,0c374     ;cd0
+ dw 0c37c,0c384,0c38c,0c394,0c39d,0c3a5,0c3ad,0c3b6     ;cd8
+ dw 0c3be,0c3c7,0c3cf,0c3d8,0c3e0,0c3e9,0c3f2,0c3fa     ;ce0
+ dw 0c403,0c40c,0c415,0c41e,0c426,0c42f,0c438,0c441     ;ce8
+ dw 0c44a,0c453,0c45d,0c466,0c46f,0c478,0c481,0c48b     ;cf0
+ dw 0c494,0c49d,0c4a7,0c4b0,0c4b9,0c4c3,0c4cc,0c4d6     ;cf8
+ dw 0c4e0,0c4e9,0c4f3,0c4fd,0c506,0c510,0c51a,0c524     ;d00
+ dw 0c52e,0c538,0c542,0c54c,0c556,0c560,0c56a,0c574     ;d08
+ dw 0c57e,0c588,0c593,0c59d,0c5a7,0c5b1,0c5bc,0c5c6     ;d10
+ dw 0c5d1,0c5db,0c5e6,0c5f0,0c5fb,0c605,0c610,0c61b     ;d18
+ dw 0c626,0c630,0c63b,0c646,0c651,0c65c,0c667,0c672     ;d20
+ dw 0c67d,0c688,0c693,0c69e,0c6a9,0c6b4,0c6bf,0c6cb     ;d28
+ dw 0c6d6,0c6e1,0c6ed,0c6f8,0c703,0c70f,0c71a,0c726     ;d30
+ dw 0c731,0c73d,0c749,0c754,0c760,0c76c,0c777,0c783     ;d38
+ dw 0c78f,0c79b,0c7a7,0c7b3,0c7bf,0c7cb,0c7d7,0c7e3     ;d40
+ dw 0c7ef,0c7fb,0c807,0c813,0c820,0c82c,0c838,0c845     ;d48
+ dw 0c851,0c85d,0c86a,0c876,0c883,0c88f,0c89c,0c8a9     ;d50
+ dw 0c8b5,0c8c2,0c8cf,0c8db,0c8e8,0c8f5,0c902,0c90f     ;d58
+ dw 0c91b,0c928,0c935,0c942,0c94f,0c95c,0c96a,0c977     ;d60
+ dw 0c984,0c991,0c99e,0c9ac,0c9b9,0c9c6,0c9d4,0c9e1     ;d68
+ dw 0c9ee,0c9fc,0ca09,0ca17,0ca24,0ca32,0ca40,0ca4d     ;d70
+ dw 0ca5b,0ca69,0ca77,0ca84,0ca92,0caa0,0caae,0cabc     ;d78
+ dw 0caca,0cad8,0cae6,0caf4,0cb02,0cb10,0cb1e,0cb2c     ;d80
+ dw 0cb3a,0cb49,0cb57,0cb65,0cb74,0cb82,0cb90,0cb9f     ;d88
+ dw 0cbad,0cbbc,0cbca,0cbd9,0cbe7,0cbf6,0cc05,0cc13     ;d90
+ dw 0cc22,0cc31,0cc3f,0cc4e,0cc5d,0cc6c,0cc7b,0cc8a     ;d98
+ dw 0cc99,0cca8,0ccb7,0ccc6,0ccd5,0cce4,0ccf3,0cd02     ;da0
+ dw 0cd12,0cd21,0cd30,0cd3f,0cd4f,0cd5e,0cd6d,0cd7d     ;da8
+ dw 0cd8c,0cd9c,0cdab,0cdbb,0cdca,0cdda,0cdea,0cdf9     ;db0
+ dw 0ce09,0ce19,0ce28,0ce38,0ce48,0ce58,0ce68,0ce78     ;db8
+ dw 0ce88,0ce97,0cea7,0ceb7,0cec8,0ced8,0cee8,0cef8     ;dc0
+ dw 0cf08,0cf18,0cf28,0cf39,0cf49,0cf59,0cf6a,0cf7a     ;dc8
+ dw 0cf8a,0cf9b,0cfab,0cfbc,0cfcc,0cfdd,0cfed,0cffe     ;dd0
+ dw 0d00f,0d01f,0d030,0d041,0d051,0d062,0d073,0d084     ;dd8
+ dw 0d095,0d0a6,0d0b7,0d0c8,0d0d9,0d0ea,0d0fb,0d10c     ;de0
+ dw 0d11d,0d12e,0d13f,0d150,0d161,0d173,0d184,0d195     ;de8
+ dw 0d1a6,0d1b8,0d1c9,0d1db,0d1ec,0d1fd,0d20f,0d220     ;df0
+ dw 0d232,0d244,0d255,0d267,0d278,0d28a,0d29c,0d2ae     ;df8
+ dw 0d2bf,0d2d1,0d2e3,0d2f5,0d307,0d318,0d32a,0d33c     ;e00
+ dw 0d34e,0d360,0d372,0d384,0d396,0d3a9,0d3bb,0d3cd     ;e08
+ dw 0d3df,0d3f1,0d404,0d416,0d428,0d43a,0d44d,0d45f     ;e10
+ dw 0d472,0d484,0d496,0d4a9,0d4bb,0d4ce,0d4e0,0d4f3     ;e18
+ dw 0d506,0d518,0d52b,0d53e,0d550,0d563,0d576,0d589     ;e20
+ dw 0d59b,0d5ae,0d5c1,0d5d4,0d5e7,0d5fa,0d60d,0d620     ;e28
+ dw 0d633,0d646,0d659,0d66c,0d67f,0d692,0d6a6,0d6b9     ;e30
+ dw 0d6cc,0d6df,0d6f2,0d706,0d719,0d72c,0d740,0d753     ;e38
+ dw 0d767,0d77a,0d78e,0d7a1,0d7b5,0d7c8,0d7dc,0d7ef     ;e40
+ dw 0d803,0d816,0d82a,0d83e,0d851,0d865,0d879,0d88d     ;e48
+ dw 0d8a1,0d8b4,0d8c8,0d8dc,0d8f0,0d904,0d918,0d92c     ;e50
+ dw 0d940,0d954,0d968,0d97c,0d990,0d9a4,0d9b8,0d9cc     ;e58
+ dw 0d9e1,0d9f5,0da09,0da1d,0da32,0da46,0da5a,0da6e     ;e60
+ dw 0da83,0da97,0daac,0dac0,0dad4,0dae9,0dafd,0db12     ;e68
+ dw 0db26,0db3b,0db50,0db64,0db79,0db8d,0dba2,0dbb7     ;e70
+ dw 0dbcc,0dbe0,0dbf5,0dc0a,0dc1f,0dc33,0dc48,0dc5d     ;e78
+ dw 0dc72,0dc87,0dc9c,0dcb1,0dcc6,0dcdb,0dcf0,0dd05     ;e80
+ dw 0dd1a,0dd2f,0dd44,0dd59,0dd6e,0dd84,0dd99,0ddae     ;e88
+ dw 0ddc3,0ddd8,0ddee,0de03,0de18,0de2e,0de43,0de58     ;e90
+ dw 0de6e,0de83,0de98,0deae,0dec3,0ded9,0deee,0df04     ;e98
+ dw 0df19,0df2f,0df45,0df5a,0df70,0df85,0df9b,0dfb1     ;ea0
+ dw 0dfc7,0dfdc,0dff2,0e008,0e01e,0e033,0e049,0e05f     ;ea8
+ dw 0e075,0e08b,0e0a1,0e0b7,0e0cc,0e0e2,0e0f8,0e10e     ;eb0
+ dw 0e124,0e13a,0e150,0e167,0e17d,0e193,0e1a9,0e1bf     ;eb8
+ dw 0e1d5,0e1eb,0e202,0e218,0e22e,0e244,0e25a,0e271     ;ec0
+ dw 0e287,0e29d,0e2b4,0e2ca,0e2e0,0e2f7,0e30d,0e324     ;ec8
+ dw 0e33a,0e351,0e367,0e37e,0e394,0e3ab,0e3c1,0e3d8     ;ed0
+ dw 0e3ee,0e405,0e41b,0e432,0e449,0e45f,0e476,0e48d     ;ed8
+ dw 0e4a3,0e4ba,0e4d1,0e4e8,0e4fe,0e515,0e52c,0e543     ;ee0
+ dw 0e55a,0e571,0e587,0e59e,0e5b5,0e5cc,0e5e3,0e5fa     ;ee8
+ dw 0e611,0e628,0e63f,0e656,0e66d,0e684,0e69b,0e6b2     ;ef0
+ dw 0e6c9,0e6e0,0e6f8,0e70f,0e726,0e73d,0e754,0e76b     ;ef8
+ dw 0e783,0e79a,0e7b1,0e7c8,0e7e0,0e7f7,0e80e,0e826     ;f00
+ dw 0e83d,0e854,0e86c,0e883,0e89a,0e8b2,0e8c9,0e8e1     ;f08
+ dw 0e8f8,0e90f,0e927,0e93e,0e956,0e96d,0e985,0e99c     ;f10
+ dw 0e9b4,0e9cc,0e9e3,0e9fb,0ea12,0ea2a,0ea42,0ea59     ;f18
+ dw 0ea71,0ea89,0eaa0,0eab8,0ead0,0eae7,0eaff,0eb17     ;f20
+ dw 0eb2f,0eb46,0eb5e,0eb76,0eb8e,0eba6,0ebbd,0ebd5     ;f28
+ dw 0ebed,0ec05,0ec1d,0ec35,0ec4d,0ec65,0ec7d,0ec94     ;f30
+ dw 0ecac,0ecc4,0ecdc,0ecf4,0ed0c,0ed24,0ed3c,0ed54     ;f38
+ dw 0ed6c,0ed85,0ed9d,0edb5,0edcd,0ede5,0edfd,0ee15     ;f40
+ dw 0ee2d,0ee45,0ee5e,0ee76,0ee8e,0eea6,0eebe,0eed6     ;f48
+ dw 0eeef,0ef07,0ef1f,0ef37,0ef50,0ef68,0ef80,0ef98     ;f50
+ dw 0efb1,0efc9,0efe1,0effa,0f012,0f02a,0f043,0f05b     ;f58
+ dw 0f074,0f08c,0f0a4,0f0bd,0f0d5,0f0ee,0f106,0f11e     ;f60
+ dw 0f137,0f14f,0f168,0f180,0f199,0f1b1,0f1ca,0f1e2     ;f68
+ dw 0f1fb,0f213,0f22c,0f244,0f25d,0f275,0f28e,0f2a7     ;f70
+ dw 0f2bf,0f2d8,0f2f0,0f309,0f322,0f33a,0f353,0f36c     ;f78
+ dw 0f384,0f39d,0f3b5,0f3ce,0f3e7,0f3ff,0f418,0f431     ;f80
+ dw 0f44a,0f462,0f47b,0f494,0f4ac,0f4c5,0f4de,0f4f7     ;f88
+ dw 0f50f,0f528,0f541,0f55a,0f573,0f58b,0f5a4,0f5bd     ;f90
+ dw 0f5d6,0f5ef,0f607,0f620,0f639,0f652,0f66b,0f684     ;f98
+ dw 0f69c,0f6b5,0f6ce,0f6e7,0f700,0f719,0f732,0f74b     ;fa0
+ dw 0f764,0f77c,0f795,0f7ae,0f7c7,0f7e0,0f7f9,0f812     ;fa8
+ dw 0f82b,0f844,0f85d,0f876,0f88f,0f8a8,0f8c1,0f8da     ;fb0
+ dw 0f8f3,0f90c,0f925,0f93e,0f957,0f970,0f989,0f9a2     ;fb8
+ dw 0f9bb,0f9d4,0f9ed,0fa06,0fa1f,0fa38,0fa51,0fa6a     ;fc0
+ dw 0fa83,0fa9c,0fab5,0face,0fae7,0fb00,0fb19,0fb32     ;fc8
+ dw 0fb4b,0fb64,0fb7d,0fb96,0fbb0,0fbc9,0fbe2,0fbfb     ;fd0
+ dw 0fc14,0fc2d,0fc46,0fc5f,0fc78,0fc91,0fcaa,0fcc3     ;fd8
+ dw 0fcdd,0fcf6,0fd0f,0fd28,0fd41,0fd5a,0fd73,0fd8c     ;fe0
+ dw 0fda5,0fdbf,0fdd8,0fdf1,0fe0a,0fe23,0fe3c,0fe55     ;fe8
+ dw 0fe6e,0fe88,0fea1,0feba,0fed3,0feec,0ff05,0ff1e     ;ff0
+ dw 0ff37,0ff51,0ff6a,0ff83,0ff9c,0ffb5,0ffce,0ffe7     ;ff8
+
+;=========================================================================
diff --git a/wmdots/old_dos_demo/trig.s b/wmdots/old_dos_demo/trig.s
new file mode 100644
index 0000000..0917017
--- /dev/null
+++ b/wmdots/old_dos_demo/trig.s
@@ -0,0 +1,29 @@
+;=========================================================================
+;Trig functions for GFX routines   Copyright (c) 1995 by Mark I Manning IV
+;=========================================================================
+
+CosTab          equ SinTab+0800 ;A Right angle foreward in table!
+
+;-------------------------------------------------------------------------
+
+;Return Sin and Cos of angle AX in variables of same name
+
+SinCos:
+ and ax,0fff            ;4096 degrees = 0 degrees
+ mov bx,ax              ;Put into an indexing reg
+ add bx,bx
+ mov ax,SinTab[bx]      ;Get Sin(N)
+ mov Sin,ax             ;Bah no MOV Sin,[BX]... Crap processor!
+
+;Note.
+; Can NOT use mov ax,SinTab[2*ebx] because in following code BX may go
+;  negative and 2* a negative number = DOUBLY NEGATIVE!
+
+ cmp bx,01800           ;Was Sin(N) in last quadrant of circle?
+ if nl sub bx,02000     ;Cos(N) must be in first quadrant then
+ mov bx,CosTab[bx]      ;Get Cos(n)
+ mov Cos,bx             ;Exits with Sin in AX and Cos in BX too!
+ ret
+
+;=========================================================================
+
diff --git a/wmdots/sintab.c b/wmdots/sintab.c
new file mode 100644
index 0000000..945d1c5
--- /dev/null
+++ b/wmdots/sintab.c
@@ -0,0 +1,75 @@
+// Sin and Cos tables based on 512 degree circle.
+// -----------------------------------------------------------------------
+
+short sin_tab[]=
+{
+  0x0000, 0x00c9, 0x0192, 0x025b, 0x0323, 0x03ec, 0x04b5, 0x057d,
+  0x0645, 0x070d, 0x07d5, 0x089c, 0x0964, 0x0a2a, 0x0af1, 0x0bb6,
+  0x0c7c, 0x0d41, 0x0e05, 0x0ec9, 0x0f8c, 0x104f, 0x1111, 0x11d3,
+  0x1294, 0x1354, 0x1413, 0x14d1, 0x158f, 0x164c, 0x1708, 0x17c3,
+  0x187d, 0x1937, 0x19ef, 0x1aa6, 0x1b5d, 0x1c12, 0x1cc6, 0x1d79,
+  0x1e2b, 0x1edc, 0x1f8b, 0x2039, 0x20e7, 0x2192, 0x223d, 0x22e6,
+  0x238e, 0x2434, 0x24da, 0x257d, 0x261f, 0x26c0, 0x275f, 0x27fd,
+  0x2899, 0x2934, 0x29cd, 0x2a65, 0x2afa, 0x2b8e, 0x2c21, 0x2cb2,
+  0x2d41, 0x2dce, 0x2e5a, 0x2ee3, 0x2f6b, 0x2ff1, 0x3076, 0x30f8,
+  0x3179, 0x31f7, 0x3274, 0x32ee, 0x3367, 0x33de, 0x3453, 0x34c6,
+  0x3536, 0x35a5, 0x3612, 0x367c, 0x36e5, 0x374b, 0x37af, 0x3811,
+  0x3871, 0x38cf, 0x392a, 0x3983, 0x39da, 0x3a2f, 0x3a82, 0x3ad2,
+  0x3b20, 0x3b6c, 0x3bb6, 0x3bfd, 0x3c42, 0x3c84, 0x3cc5, 0x3d02,
+  0x3d3e, 0x3d77, 0x3dae, 0x3de2, 0x3e14, 0x3e44, 0x3e71, 0x3e9c,
+  0x3ec5, 0x3eeb, 0x3f0e, 0x3f2f, 0x3f4e, 0x3f6a, 0x3f84, 0x3f9c,
+  0x3fb1, 0x3fc3, 0x3fd3, 0x3fe1, 0x3fec, 0x3ff4, 0x3ffb, 0x3ffe,
+
+  0x3fff, 0x3ffe, 0x3ffb, 0x3ff4, 0x3fec, 0x3fe1, 0x3fd3, 0x3fc3,
+  0x3fb1, 0x3f9c, 0x3f84, 0x3f6a, 0x3f4e, 0x3f2f, 0x3f0e, 0x3eeb,
+  0x3ec5, 0x3e9c, 0x3e71, 0x3e44, 0x3e14, 0x3de2, 0x3dae, 0x3d77,
+  0x3d3e, 0x3d02, 0x3cc5, 0x3c84, 0x3c42, 0x3bfd, 0x3bb6, 0x3b6c,
+  0x3b20, 0x3ad2, 0x3a82, 0x3a2f, 0x39da, 0x3983, 0x392a, 0x38cf,
+  0x3871, 0x3811, 0x37af, 0x374b, 0x36e5, 0x367c, 0x3612, 0x35a5,
+  0x3536, 0x34c6, 0x3453, 0x33de, 0x3367, 0x32ee, 0x3274, 0x31f7,
+  0x3179, 0x30f8, 0x3076, 0x2ff1, 0x2f6b, 0x2ee3, 0x2e5a, 0x2dce,
+  0x2d41, 0x2cb2, 0x2c21, 0x2b8e, 0x2afa, 0x2a65, 0x29cd, 0x2934,
+  0x2899, 0x27fd, 0x275f, 0x26c0, 0x261f, 0x257d, 0x24da, 0x2434,
+  0x238e, 0x22e6, 0x223d, 0x2192, 0x20e7, 0x2039, 0x1f8b, 0x1edc,
+  0x1e2b, 0x1d79, 0x1cc6, 0x1c12, 0x1b5d, 0x1aa6, 0x19ef, 0x1937,
+  0x187d, 0x17c3, 0x1708, 0x164c, 0x158f, 0x14d1, 0x1413, 0x1354,
+  0x1294, 0x11d3, 0x1111, 0x104f, 0x0f8c, 0x0ec9, 0x0e05, 0x0d41,
+  0x0c7c, 0x0bb6, 0x0af1, 0x0a2a, 0x0964, 0x089c, 0x07d5, 0x070d,
+  0x0645, 0x057d, 0x04b5, 0x03ec, 0x0323, 0x025b, 0x0192, 0x00c9,
+
+  0x0000, 0xff37, 0xfe6e, 0xfda5, 0xfcdd, 0xfc14, 0xfb4b, 0xfa83,
+  0xf9bb, 0xf8f3, 0xf82b, 0xf764, 0xf69c, 0xf5d6, 0xf50f, 0xf44a,
+  0xf384, 0xf2bf, 0xf1fb, 0xf137, 0xf074, 0xefb1, 0xeeef, 0xee2d,
+  0xed6c, 0xecac, 0xebed, 0xeb2f, 0xea71, 0xe9b4, 0xe8f8, 0xe83d,
+  0xe783, 0xe6c9, 0xe611, 0xe55a, 0xe4a3, 0xe3ee, 0xe33a, 0xe287,
+  0xe1d5, 0xe124, 0xe075, 0xdfc7, 0xdf19, 0xde6e, 0xddc3, 0xdd1a,
+  0xdc72, 0xdbcc, 0xdb26, 0xda83, 0xd9e1, 0xd940, 0xd8a1, 0xd803,
+  0xd767, 0xd6cc, 0xd633, 0xd59b, 0xd506, 0xd472, 0xd3df, 0xd34e,
+  0xd2bf, 0xd232, 0xd1a6, 0xd11d, 0xd095, 0xd00f, 0xcf8a, 0xcf08,
+  0xce87, 0xce09, 0xcd8c, 0xcd12, 0xcc99, 0xcc22, 0xcbad, 0xcb3a,
+  0xcaca, 0xca5b, 0xc9ee, 0xc984, 0xc91b, 0xc8b5, 0xc851, 0xc7ef,
+  0xc78f, 0xc731, 0xc6d6, 0xc67d, 0xc626, 0xc5d1, 0xc57e, 0xc52e,
+  0xc4e0, 0xc494, 0xc44a, 0xc403, 0xc3be, 0xc37c, 0xc33b, 0xc2fe,
+  0xc2c2, 0xc289, 0xc252, 0xc21e, 0xc1ec, 0xc1bc, 0xc18f, 0xc164,
+  0xc13b, 0xc115, 0xc0f2, 0xc0d1, 0xc0b2, 0xc096, 0xc07c, 0xc064,
+  0xc04f, 0xc03d, 0xc02d, 0xc01f, 0xc014, 0xc00c, 0xc005, 0xc002,
+
+  0xc001, 0xc002, 0xc005, 0xc00c, 0xc014, 0xc01f, 0xc02d, 0xc03d,
+  0xc04f, 0xc064, 0xc07c, 0xc096, 0xc0b2, 0xc0d1, 0xc0f2, 0xc115,
+  0xc13b, 0xc164, 0xc18f, 0xc1bc, 0xc1ec, 0xc21e, 0xc252, 0xc289,
+  0xc2c2, 0xc2fe, 0xc33b, 0xc37c, 0xc3be, 0xc403, 0xc44a, 0xc494,
+  0xc4e0, 0xc52e, 0xc57e, 0xc5d1, 0xc626, 0xc67d, 0xc6d6, 0xc731,
+  0xc78f, 0xc7ef, 0xc851, 0xc8b5, 0xc91b, 0xc984, 0xc9ee, 0xca5b,
+  0xcaca, 0xcb3a, 0xcbad, 0xcc22, 0xcc99, 0xcd12, 0xcd8c, 0xce09,
+  0xce88, 0xcf08, 0xcf8a, 0xd00f, 0xd095, 0xd11d, 0xd1a6, 0xd232,
+  0xd2bf, 0xd34e, 0xd3df, 0xd472, 0xd506, 0xd59b, 0xd633, 0xd6cc,
+  0xd767, 0xd803, 0xd8a1, 0xd940, 0xd9e1, 0xda83, 0xdb26, 0xdbcc,
+  0xdc72, 0xdd1a, 0xddc3, 0xde6e, 0xdf19, 0xdfc7, 0xe075, 0xe124,
+  0xe1d5, 0xe287, 0xe33a, 0xe3ee, 0xe4a3, 0xe55a, 0xe611, 0xe6c9,
+  0xe783, 0xe83d, 0xe8f8, 0xe9b4, 0xea71, 0xeb2f, 0xebed, 0xecac,
+  0xed6c, 0xee2d, 0xeeef, 0xefb1, 0xf074, 0xf137, 0xf1fb, 0xf2bf,
+  0xf384, 0xf44a, 0xf50f, 0xf5d6, 0xf69c, 0xf764, 0xf82b, 0xf8f3,
+  0xf9bb, 0xfa83, 0xfb4b, 0xfc14, 0xfcdd, 0xfda5, 0xfe6e, 0xff37
+};
+
+// =======================================================================
diff --git a/wmdots/wmdots.c b/wmdots/wmdots.c
new file mode 100644
index 0000000..f664209
--- /dev/null
+++ b/wmdots/wmdots.c
@@ -0,0 +1,667 @@
+// WM-Dots the Window Maker 3d Rotating Dots Demo by Mark I Manning IV
+// =======================================================================
+
+// This demo is based on an old DOS demo I did a number of years ago.  The
+// trick was to get it to work in an 64 x 64 window instead of the
+// 320 x 200 of the original. (and in 16 instead of 256 colours :)
+
+// Much of these sources are based on other dockable application sources.
+// For this reason, and because it is the right thing to do, this file is
+// distributed under the GPL.  Use it and abuse it as you will.
+
+// Flames, critisizm and general nukings can be sent to....
+
+//  [email protected]
+
+// I have included the sources (in 100% pure ASM) to the afore mentioned
+// original demo.  These you can also consider covered by the GPL.
+
+// Maybe someone can help me convert the bump mapping in the original to
+// use only 16 colours :)  (actually, I have space in the master.xpm for
+// 32 colours if I retain a 2 x 2 pixle size.  If i go to 1 x 1 i can
+// fit 64 colours in there :)
+
+// Yea... I know... Im supposed to be sparing of system resources like
+// colour allocations but come on guys... this IS a demo after all :)
+// Demos are supposed to be abusive of system resources eh??? :)
+
+//  This source file is 100% TAB FREE. Use any editor/viewer you want
+//  to view it with and set ANY size tabs and it will STILL look right.
+//  TABS ARE EVIL!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+// Also Linus T is wrong. Indentations of 8 are an abomination and so is
+// k&r source formatting.  So There!
+
+// Apart from that... Linus for president :)
+//                    or George W. Bush!!!
+
+// -----------------------------------------------------------------------
+// blah :)
+
+// Version 0.1 beta     Released Saturday October 9 1999
+//
+//    To do...  Fix bug that causes core dump when the "cross" object
+//               rotates outside window (its not a clipping problem).
+//              Find out why the "cross" object is not cross shaped in
+//               this demo when it is in the dos version.
+//              Change pixle sizes to 1 x 1 for objects that are in
+//               the distance.
+//              Move all object definitions out of this file and into
+//               some kind of rc file and allow user defined objects
+//              Add greets to the credits display :)
+//              Impliment better light shading (in object space?)
+//              Prevent dark pixles overwriting light ones
+//
+//    Done...   Scrapped idea about different pixle sizez, it didn't look
+//               as good as i thunked it would :)
+//              Fixed adjust_angle() to be angle +128 not angle +127
+//              Fixed cross by defining xyz as char instead of int
+//              Fixed core dump problem with cross:  Oopts it was a
+//               clipping problem, z clipping points behind camera! :)
+//              Added size macro (prolly a bad name for it tho :)
+//              Implimented better light shading but its still not
+//               quite right yet...
+//              Removed math.h from includes as im not using any
+//               functions therein.  Saved a whopping 4 bytes :)
+//              Added code to draw_point() to prevent dark pels from
+//               being drawn over lighter pels.  Dark pels are further
+//               away and should be BEHIND the lighter ones.  There is
+//               almost no cpu bash here and I dont need to z sort pels
+//
+//
+// Version 0.2 beta     Released Saturday October 9 1999
+//
+//    To do..   Still gotta move objects to rc file....
+//
+//
+//
+//    Done...
+
+// -----------------------------------------------------------------------
+// includes
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+
+#include <X11/xpm.h>
+#include <libdockapp/wmgeneral.h>
+#include "master.xpm"
+#include "sintab.c"             // sin() and cos() are crap!
+
+// -----------------------------------------------------------------------
+// defines
+
+#define PEL_SIZE 2              // 1 or 2 only
+
+#define MAX_POINTS 125          // max # pels in an object
+
+#define MASK_WIDTH 64           // window bitmap mask dimentions
+#define MASK_HEIGHT 64
+#define MASK_SIZE MASK_WIDTH * MASK_HEIGHT
+
+// adjust angle for cos table lookup.  cos = right angle further
+// on in sin table, circle = 512 degrees...
+
+#define adjust(angle) ((angle + 128) & 0x1ff)
+#define size(array) ((sizeof(array) / sizeof(array[0])))
+
+// -----------------------------------------------------------------------
+// typedefs...
+
+typedef struct                  // a point in 3d space
+{
+  char x, y, z;
+}xyz;
+
+typedef struct                  // a point in 2d space
+{
+  int x, y;
+}xy;
+
+typedef struct
+{
+  int counter;                  // count down to next speed/shape change
+  int reset;                    // initial value of counter
+  int *ptr;                     // pointer to item to modify
+  int delta;                    // ammount to change item by
+  int upper;                    // upper limit for item
+  int lower;                    // lower limit for item
+}modifier;
+
+// -----------------------------------------------------------------------
+// object structures...
+
+xyz cube[]=
+{
+  {-35,-35,-35},{-35,-35,-15},{-35,-35, 05},{-35,-35, 25},{-35,-35, 45},
+  {-35,-15,-35},{-35,-15,-15},{-35,-15, 05},{-35,-15, 25},{-35,-15, 45},
+  {-35, 05,-35},{-35, 05,-15},{-35, 05, 05},{-35, 05, 25},{-35, 05, 45},
+  {-35, 25,-35},{-35, 25,-15},{-35, 25, 05},{-35, 25, 25},{-35, 25, 45},
+  {-35, 45,-35},{-35, 45,-15},{-35, 45, 05},{-35, 45, 25},{-35, 45, 45},
+  {-15,-35,-35},{-15,-35,-15},{-15,-35, 05},{-15,-35, 25},{-15,-35, 45},
+  {-15,-15,-35},{-15,-15,-15},{-15,-15, 05},{-15,-15, 25},{-15,-15, 45},
+  {-15, 05,-35},{-15, 05,-15},{-15, 05, 05},{-15, 05, 25},{-15, 05, 45},
+  {-15, 25,-35},{-15, 25,-15},{-15, 25, 05},{-15, 25, 25},{-15, 25, 45},
+  {-15, 45,-35},{-15, 45,-15},{-15, 45, 05},{-15, 45, 25},{-15, 45, 45},
+  { 05,-35,-35},{ 05,-35,-15},{ 05,-35, 05},{ 05,-35, 25},{ 05,-35, 45},
+  { 05,-15,-35},{ 05,-15,-15},{ 05,-15, 05},{ 05,-15, 25},{ 05,-15, 45},
+  { 05, 05,-35},{ 05, 05,-15},{ 05, 05, 05},{ 05, 05, 25},{ 05, 05, 45},
+  { 05, 25,-35},{ 05, 25,-15},{ 05, 25, 05},{ 05, 25, 25},{ 05, 25, 45},
+  { 05, 45,-35},{ 05, 45,-15},{ 05, 45, 05},{ 05, 45, 25},{ 05, 45, 45},
+  { 25,-35,-35},{ 25,-35,-15},{ 25,-35, 05},{ 25,-35, 25},{ 25,-35, 45},
+  { 25,-15,-35},{ 25,-15,-15},{ 25,-15, 05},{ 25,-15, 25},{ 25,-15, 45},
+  { 25, 05,-35},{ 25, 05,-15},{ 25, 05, 05},{ 25, 05, 25},{ 25, 05, 45},
+  { 25, 25,-35},{ 25, 25,-15},{ 25, 25, 05},{ 25, 25, 25},{ 25, 25, 45},
+  { 25, 45,-35},{ 25, 45,-15},{ 25, 45, 05},{ 25, 45, 25},{ 25, 45, 45},
+  { 45,-35,-35},{ 45,-35,-15},{ 45,-35, 05},{ 45,-35, 25},{ 45,-35, 45},
+  { 45,-15,-35},{ 45,-15,-15},{ 45,-15, 05},{ 45,-15, 25},{ 45,-15, 45},
+  { 45, 05,-35},{ 45, 05,-15},{ 45, 05, 05},{ 45, 05, 25},{ 45, 05, 45},
+  { 45, 25,-35},{ 45, 25,-15},{ 45, 25, 05},{ 45, 25, 25},{ 45, 25, 45},
+  { 45, 45,-35},{ 45, 45,-15},{ 45, 45, 05},{ 45, 45, 25},{ 45, 45, 45}
+};
+
+xyz star[]=
+{
+  {-35,-35, 05},{-35,-15, 05},{-35, 05, 05},{-35, 25, 05},{-35, 45, 05},
+  {-15,-35, 05},{-15,-15, 05},{-15, 05, 05},{-15, 25, 05},{-15, 45, 05},
+  { 05,-35, 05},{ 05,-15, 05},{ 05, 05, 05},{ 05, 25, 05},{ 05, 45, 05},
+  { 25,-35, 05},{ 25,-15, 05},{ 25, 05, 05},{ 25, 25, 05},{ 25, 45, 05},
+  { 45,-35, 05},{ 45,-15, 05},{ 45, 05, 05},{ 45, 25, 05},{ 45, 45, 05},
+  { 05,-35,-35},{ 05,-35,-15},{ 05,-35, 25},{ 05,-35, 45},{-35, 05,-35},
+  { 05,-15,-35},{ 05,-15,-15},{ 05,-15, 25},{ 05,-15, 45},{-15, 05,-35},
+  { 05, 05,-35},{ 05, 05,-15},{ 05, 05, 25},{ 05, 05, 45},{ 05, 05,-35},
+  { 05, 25,-35},{ 05, 25,-15},{ 05, 25, 25},{ 05, 25, 45},{ 25, 05,-35},
+  { 05, 45,-35},{ 05, 45,-15},{ 05, 45, 25},{ 05, 45, 45},{ 45, 05,-35},
+  {-35, 05,-15},{-35, 05, 25},{-35, 05, 45},{-15, 05,-15},{-15, 05, 25},
+  {-15, 05, 45},{ 05, 05,-15},{ 05, 05, 25},{ 05, 05, 45},{ 25, 05,-15},
+  { 25, 05, 25},{ 25, 05, 45},{ 45, 05,-15},{ 45, 05, 25},{ 45, 05, 45}
+};
+
+xyz dots[]=
+{
+  {-35,-35,-35},{-35,-35, 45},{ 45, 45,-35},{ 45, 45, 45},{ 5,-35, 5},
+  {  5, 45,  5}
+};
+
+xyz square[]=
+{
+  {-35,-35,-35},{-35,-15,-35},{-35, 05,-35},{-35, 25,-35},{-35, 45,-35},
+  {-15,-35,-35},{-15,-15,-35},{-15, 05,-35},{-15, 25,-35},{-15, 45,-35},
+  { 05,-35,-35},{ 05,-15,-35},{ 05, 05,-35},{ 05, 25,-35},{ 05, 45,-35},
+  { 25,-35,-35},{ 25,-15,-35},{ 25, 05,-35},{ 25, 25,-35},{ 25, 45,-35},
+  { 45,-35,-35},{ 45,-15,-35},{ 45, 05,-35},{ 45, 25,-35},{ 45, 45,-35}
+};
+
+xyz cross[]=
+{
+  {0x00,0x00,0x19}, {0x00,0x05,0x19}, {0x00,0x14,0x01}, {0x00,0x32,0x00},
+  {0x00,0x7D,0x00}, {0x00,0xC9,0x00}, {0x01,0x5F,0x01}, {0x01,0xAB,0x01},
+  {0x01,0xF6,0x01}, {0x02,0x41,0x02}, {0x02,0x8D,0x02}, {0x02,0xD8,0x02},
+  {0x03,0x23,0x03}, {0x03,0x05,0x04}, {0x03,0x6F,0x03}, {0x03,0xBA,0x03},
+  {0x04,0x51,0x04}, {0x04,0x9C,0x04}, {0x04,0xE7,0x04}, {0x05,0x13,0x06},
+  {0x05,0x32,0x05}, {0x05,0x7D,0x05}, {0x05,0xC8,0x05}, {0x06,0x5E,0x06},
+  {0x06,0xA9,0x06}, {0x06,0xF4,0x06}, {0x07,0x3F,0x07}, {0x07,0x8A,0x07},
+  {0x07,0xD5,0x07}, {0x08,0x00,0x09}, {0x08,0x20,0x08}, {0x08,0x6B,0x08},
+  {0x08,0xB5,0x08}, {0x09,0x4B,0x09}, {0x09,0x95,0x09}, {0x09,0xE0,0x09},
+  {0x0A,0x09,0x0B}, {0x0A,0x2A,0x0A}, {0x0A,0x75,0x0A}, {0x0A,0xBF,0x0A},
+  {0x0B,0x54,0x0B}, {0x0D,0x07,0x26}, {0x0F,0x02,0x28}, {0x19,0x09,0x32},
+  {0x1E,0x04,0x37}, {0x22,0x0B,0x3B}, {0x2C,0x06,0x45}, {0x2D,0x01,0x46},
+  {0x39,0x08,0x52}, {0x3D,0x03,0x56}, {0x43,0x0A,0x5C}, {0x4B,0x00,0x64},
+  {0x4B,0x05,0x64}, {0x58,0x07,0x71}, {0x5B,0x02,0x74}, {0x64,0x09,0x7C},
+  {0x84,0x08,0x9C}, {0x88,0x03,0xA1}, {0x8D,0x0A,0xA6}, {0x96,0x00,0xAF},
+  {0x96,0x05,0xAF}, {0xA3,0x07,0xBC}, {0xA6,0x02,0xBF}, {0xAE,0x09,0xC7},
+  {0xB5,0x04,0xCE}, {0xC2,0x06,0xDB}, {0xC4,0x01,0xDD}, {0xCE,0x08,0xE7},
+  {0xD3,0x03,0xEC}, {0xD8,0x0A,0xF1}, {0xE1,0x05,0xFA}, {0xE2,0x00,0xFB},
+  {0xEE,0x07,0x07}, {0xF1,0x02,0x0A}, {0xF9,0x09,0x11}
+};
+
+// -----------------------------------------------------------------------
+// object lists...
+
+xyz *obj_list[]=                // pointers to each object
+{
+  (xyz *) &cube,
+  (xyz *) &dots,
+  (xyz *) &star,
+  (xyz *) &square,
+  (xyz *) &cross
+};
+
+int point_counts[]=             // number of points in each object
+{
+  size(cube),
+  size(dots),
+  size(star),
+  size(square),
+  size(cross)
+};
+
+#define NUM_OBJECTS size(obj_list)
+
+// -----------------------------------------------------------------------
+// i love global variables :)
+
+// I hate 40 page functions with 50 levels if,and and but loop nesting
+
+char *ProgName = NULL;
+char *Version = "0.2 Beta";
+
+int x_angle = 0;                // angles of rotation in each axis
+int y_angle = 0;
+int z_angle = 0;
+
+short cos_x = 0;                // trig stuff
+short cos_y = 0;
+short cos_z = 0;
+short sin_x = 0;
+short sin_y = 0;
+short sin_z = 0;
+
+int x_off = 30;                 // world space position of object
+int y_off = 30;
+int z_off = 150;
+
+int delta_x = 1;                // rotational speed of object
+int delta_y = 1;
+int delta_z = 1;
+
+int itters = 1;                 // number of frames till shape change
+int num_points = 0;             // number of points in object
+int obj_number = 0;
+xyz *object = NULL;             // pointer to current object
+
+xy trail_1[125];                // frame histories
+xy trail_2[125];
+xy trail_3[125];
+
+char *p_buff;                   // addr of pel buffer ( see draw_point() )
+
+// -----------------------------------------------------------------------
+//
+
+modifier w1 =                   // changes x rotation speed
+{
+   30,                          // count down counter
+   34,                          // reset value for countdown counter
+   &delta_x,                    // item to modify on count = 0
+   2,                           // ammount to add to item
+   8,                           // upper limit for item
+   0,                           // lower limit for item
+};
+
+modifier w2 =                   // changes y rotation speed
+{
+  20, 20, &delta_y, -1, 6, 0
+};
+
+modifier w3 =                   // changes z rotation speed
+{
+  30, 30, &delta_z, 1, 7, 0
+};
+
+modifier w4 =                   // zooms object in / out of window
+{
+  4, 4, &z_off, -2, 200, 90
+};
+
+// modifier w5 =                // these two do some funky things with
+// {                            // object space but they tend to make
+//   10,10,&x_off,-3,30,10      // the objects small and look further
+// };                           // away so im not using them
+//
+// modifier w6 =                // but go ahead and take a look at what
+// {                            // they do :)
+//   10,30,&y_off,-5,30,10
+// };
+
+// -----------------------------------------------------------------------
+// draw a point at x/y in specified colour
+
+void draw_point(int x, int y, int c)
+{
+  char *p;
+
+  if(x != -1)                   // is point clipped ?
+  {
+    c <<= 1;                    // adjust c for xpm lookup of colour
+    p = p_buff + (x + (MASK_WIDTH * y));
+
+    if (*p > c)                 // if pel at *p is higher its darker so
+    {                           // its ok to overwrite it
+      *p = c;                   // remember pel colour at this position
+      copyXPMArea(c, 65, PEL_SIZE, PEL_SIZE, x, y);
+    }
+  }
+}
+
+// -----------------------------------------------------------------------
+// Erase previously drawn point (draw again in BLACK!!!)
+
+void erase_point(int x, int y)
+{
+  if(x != -1)                   // is point clipped?
+  {
+    copyXPMArea(34, 65, PEL_SIZE, PEL_SIZE, x, y);
+  }
+}
+
+// -----------------------------------------------------------------------
+// Process pending X events
+
+void do_pending(void)
+{
+  XEvent Event;
+
+  while (XPending(display))             // for all pending events do...
+  {
+    XNextEvent(display, &Event);        // get event type
+
+    switch (Event.type)                 // we are only interested in...
+    {
+      case Expose:                      // expose events and...
+        RedrawWindow();
+      break;
+
+      case DestroyNotify:               // our own "pending" demise :)
+        XCloseDisplay(display);
+        exit(0);
+      break;
+    }
+  }
+}
+
+// -----------------------------------------------------------------------
+// clear frame history buffers
+
+void clear_histories(void)
+{
+  int i = MAX_POINTS;
+
+  while (i--)                           // for loops suck
+  {
+    trail_1[i].x = trail_1[i].y = -1;   // -1 = invalid coordinate
+    trail_2[i].x = trail_2[i].y = -1;   // draw_point() ignores -1
+    trail_3[i].x = trail_3[i].y = -1;
+  }
+}
+
+// -----------------------------------------------------------------------
+// erase points that are 3 frames old. shift frame histories
+
+void do_trails(void)
+{
+  int i = MAX_POINTS;
+
+  while (i--)
+  {
+    erase_point(trail_3[i].x, trail_3[i].y);
+
+    trail_3[i].x = trail_2[i].x;        // shift points within history
+    trail_2[i].x = trail_1[i].x;        //  buffers
+    trail_1[i].x = -1;
+
+    trail_3[i].y = trail_2[i].y;
+    trail_2[i].y = trail_1[i].y;
+    trail_1[i].y = -1;
+  }
+}
+
+// -----------------------------------------------------------------------
+// pre calculate sin and cosine values for x y and z angles of rotation
+
+void sincos(void)
+{
+  sin_x = sin_tab[x_angle];
+  sin_y = sin_tab[y_angle];
+  sin_z = sin_tab[z_angle];
+
+  cos_x = sin_tab[adjust(x_angle)];
+  cos_y = sin_tab[adjust(y_angle)];
+  cos_z = sin_tab[adjust(z_angle)];
+}
+
+// -----------------------------------------------------------------------
+// roatate object about x y and z axis (in object space)
+
+void rotate(int *px, int *py, int *pz)
+{
+  int tx, ty, tz;                       // temp store
+
+  if (x_angle)                          // rotate point about x axis...
+  {
+    ty = (*py * cos_x) - (*pz * sin_x);
+    tz = (*py * sin_x) + (*pz * cos_x);
+
+    *py = (ty >> 14);                   // sin table is scaled up so we
+    *pz = (tz >> 14);                   // must re scale all results down
+  }
+
+  if (y_angle)                          // rotate point about y axis
+  {
+    tx = (*px * cos_y) - (*pz * sin_y);
+    tz = (*px * sin_y) + (*pz * cos_y);
+
+    *px = (tx >> 14);
+    *pz = (tz >> 14);
+  }
+
+  if (z_angle)                          // rotate point about z axis
+  {
+    tx = (*px * cos_z) - (*py * sin_z);
+    ty = (*px * sin_z) + (*py * cos_z);
+
+    *px = (tx >> 14);
+    *py = (ty >> 14);
+  }
+}
+
+// -----------------------------------------------------------------------
+// project point in 3d space onto plane in 2d space
+
+void project(int px, int py, int pz, int *x, int *y)
+{
+  int tx, ty;                   // temp store...
+
+  *x = *y = -1;                 // assume point is clipped
+
+  if ((z_off + pz - 5) < 0)
+  {
+    return;
+  }
+
+  ty = ((y_off * py) / (z_off + pz)) + 30;
+
+  if ((ty > 5) && (ty < 59))
+  {
+    tx = ((x_off * px) / (z_off + pz)) + 30;
+
+    if ((tx > 5) && (tx < 59))
+    {
+      *x = tx;
+      *y = ty;
+    }
+  }
+}
+
+// -----------------------------------------------------------------------
+// draw one frame of object...
+
+void do_frame(void)
+{
+  int px, py, pz;               // 3d coordinates to rotate
+  int x, y, c;                  // 2d coordiantes of point and colour
+  int i = num_points;           // loop counter
+  int j = MASK_SIZE;
+  char pel_buff[MASK_SIZE];     // frame buffer ( see draw_point() )
+  p_buff = &pel_buff[0];
+
+  while (j--)                   // erase pel buffer
+  {
+    pel_buff[j] = 32;
+  }
+
+  do_trails();                  // clear pels that are 3 frames old
+  sincos();                     // calculate all sin/cos values
+
+  while(i--)
+  {
+    px = object[i].x;           // collect point from object
+    py = object[i].y;
+    pz = object[i].z;
+
+    rotate(&px, &py, &pz);      // rotate this point about x/y and z axis
+    project(px, py, pz, &x, &y); // projection = convert xyz to xy
+
+    trail_1[i].x = x;           // store frame history for all pels
+    trail_1[i].y = y;           //  of this frame
+
+    c = (((z_off - 90) / 14) & 15) < 1;
+    c -= ((-pz / 5) - 10);
+
+    draw_point(x, y, c);
+  }
+}
+
+// -----------------------------------------------------------------------
+// adjust rotational speeds / distance between min and max for each
+
+void modify(modifier *mod)
+{
+  mod->counter--;
+
+  if (!mod->counter)
+  {
+    mod->counter = mod->reset;
+
+    *mod->ptr += mod->delta;
+
+    if (*mod->ptr >= mod->upper || *mod->ptr <= mod->lower)
+    {
+      mod->delta = -(mod->delta);
+    }
+  }
+}
+
+// -----------------------------------------------------------------------
+// do the above on each of the 4 modifiers
+
+void do_deltas(void)
+{
+  modify(&w1);                  // modify x rotational speed
+  modify(&w2);                  // modify y rotational speed
+  modify(&w3);                  // modify z rotational speed
+  modify(&w4);                  // zoom object in and out
+//  modify(&w5);		  // not used because they make objects
+//  modify(&w6);		  // stay in the distance
+}
+
+// -----------------------------------------------------------------------
+// adjust x y and z angles of ritation for next frame
+
+void change_angles(void)
+{
+  x_angle += delta_x;
+  y_angle += delta_y;
+  z_angle += delta_z;
+
+  x_angle &= 0x1ff;
+  y_angle &= 0x1ff;
+  z_angle &= 0x1ff;
+}
+
+// -----------------------------------------------------------------------
+
+void do_demo(void)
+{
+  while (1)                     // only way out is to die
+  {
+    while(--itters)             // countdown to next shape change...
+    {                           //   shape change FORCED on entry
+      change_angles();          // adjust angles of rotation
+      do_frame();               // draw object
+      do_deltas();              // modify rotation speeds etc
+
+      RedrawWindow();           // lets see what weve drawn...
+      do_pending();             // quit / expose
+      usleep(50000);            // erm... coders never sleep :)
+    }
+
+    itters = 2500;              // should randomise this
+
+    object = obj_list[obj_number];
+    num_points = point_counts[obj_number++];
+
+    if (obj_number == NUM_OBJECTS)
+    {
+      obj_number = 0;
+    }
+  }
+}
+
+// -----------------------------------------------------------------------
+// display version info and credits
+
+void credits(void)
+{
+  printf("\n");
+  printf("WM-Dots DEMO? version %s\n",Version);
+  printf("    by Mark I Manning IV\n\n");
+  printf("greets to follow soon....\n\n");
+}
+
+// sgore for helping me get star office :)
+
+// -----------------------------------------------------------------------
+// scan command line args
+
+void scan_args(int argc,char **argv)
+{
+  int i;
+
+  for (i = 0; i < argc; i++)
+  {
+    char *arg = argv[i];
+
+    if (*arg == '-')
+    {
+      switch (arg[1])
+      {
+        case 'v':
+          credits();
+          exit(0);
+        break;
+
+        default:
+          ;
+        break;
+      }
+    }
+  }
+}
+
+// -----------------------------------------------------------------------
+// main at BOTTOM of source so we have no EVIL forward refs!!
+
+int main(int argc, char *argv[])
+{
+  char mask[MASK_SIZE];
+
+  ProgName = argv[0];
+  if (strlen(ProgName) >= 5)
+  {
+     ProgName += (strlen(ProgName) - 5);
+  }
+
+  scan_args(argc, argv);
+
+  createXBMfromXPM(mask, master_xpm, MASK_WIDTH, MASK_HEIGHT);
+  openXwindow(argc, argv, master_xpm, mask, MASK_WIDTH, MASK_HEIGHT);
+
+  clear_histories();            // clear frame history buffers
+  do_demo();                    // main = short and sweet :)
+
+  return(0);                    // never gets executed but lets get rid
+}                               //  of that stupid warning :)
+
+// =======================================================================
diff --git a/wmdots/wmdots/Makefile b/wmdots/wmdots/Makefile
deleted file mode 100755
index 46cea12..0000000
--- a/wmdots/wmdots/Makefile
+++ /dev/null
@@ -1,23 +0,0 @@
-LIBDIR = -L/usr/X11R6/lib
-LIBS   = -lXpm -lXext -lX11 -ldockapp
-OBJS =	wmdots.o
-
-.c.o:
-	cc -c -g -O2 -Wall $< -o $*.o
-
-wmifs: $(OBJS)
-	cc -o wmdots $^ -lXext $(LIBDIR) $(LIBS)
-
-all:: wmdots
-
-clean::
-	for i in $(OBJS) ; do \
-		rm $$i ; \
-	done
-	rm wmdots
-
-install::
-	cp -f wmdots /usr/local/bin/
-	chmod 755 /usr/local/bin/wmdots
-	chown root:root /usr/local/bin/wmdots
-
diff --git a/wmdots/wmdots/master.xpm b/wmdots/wmdots/master.xpm
deleted file mode 100644
index e1514ad..0000000
--- a/wmdots/wmdots/master.xpm
+++ /dev/null
@@ -1,87 +0,0 @@
-/* XPM */
-static char * master_xpm[] = {
-"64 66 18 1",
-" 	c None",
-".	c #000000",
-"+	c #C300FF",
-"@	c #B500F2",
-"#	c #A800E5",
-"$	c #9E00D8",
-"%	c #9200CC",
-"&	c #8500BF",
-"*	c #7900B2",
-"=	c #6E00A5",
-"-	c #660099",
-";	c #5D008C",
-">	c #52007F",
-",	c #480072",
-"'	c #3E0066",
-")	c #37005B",
-"!	c #2D004C",
-"~	c #25003F",
-"                                                                ",
-"                                                                ",
-"                                                                ",
-"                                                                ",
-"    ......................................................      ",
-"    ......................................................      ",
-"    ......................................................      ",
-"    ......................................................      ",
-"    ......................................................      ",
-"    ......................................................      ",
-"    ......................................................      ",
-"    ......................................................      ",
-"    ......................................................      ",
-"    ......................................................      ",
-"    ......................................................      ",
-"    ......................................................      ",
-"    ......................................................      ",
-"    ......................................................      ",
-"    ......................................................      ",
-"    ......................................................      ",
-"    ......................................................      ",
-"    ......................................................      ",
-"    ......................................................      ",
-"    ......................................................      ",
-"    ......................................................      ",
-"    ......................................................      ",
-"    ......................................................      ",
-"    ......................................................      ",
-"    ......................................................      ",
-"    ......................................................      ",
-"    ......................................................      ",
-"    ......................................................      ",
-"    ......................................................      ",
-"    ......................................................      ",
-"    ......................................................      ",
-"    ......................................................      ",
-"    ......................................................      ",
-"    ......................................................      ",
-"    ......................................................      ",
-"    ......................................................      ",
-"    ......................................................      ",
-"    ......................................................      ",
-"    ......................................................      ",
-"    ......................................................      ",
-"    ......................................................      ",
-"    ......................................................      ",
-"    ......................................................      ",
-"    ......................................................      ",
-"    ......................................................      ",
-"    ......................................................      ",
-"    ......................................................      ",
-"    ......................................................      ",
-"    ......................................................      ",
-"    ......................................................      ",
-"    ......................................................      ",
-"    ......................................................      ",
-"    ......................................................      ",
-"    ......................................................      ",
-"    ......................................................      ",
-"                                                                ",
-"                                                                ",
-"                                                                ",
-"                                                                ",
-"                                                                ",
-"++@@##$$%%&&**==--;;>>,,''))!!~~                                ",
-"++@@##$$%%&&**==--;;>>,,''))!!~~                                "};
diff --git a/wmdots/wmdots/old_dos_demo/dow.a b/wmdots/wmdots/old_dos_demo/dow.a
deleted file mode 100644
index 85bc6d9..0000000
--- a/wmdots/wmdots/old_dos_demo/dow.a
+++ /dev/null
@@ -1,860 +0,0 @@
-;Dogs of war demo by OnlyMe (now called I440r :)
-;-------------------------------------------------------------------------
-
-        ;Assembles with A386.COM (Registered A86).
-
-;-------------------------------------------------------------------------
-;Equates
-
-MaxPoints       equ 125         ;Maximum number of points in an object
-BumpMap         equ Bumps+320   ;Pointer to second scan line of bump map
-SpotX           equ 160         ;Position of static bump map spotlight
-SpotY           equ 80
-
-;-------------------------------------------------------------------------
-;A based structure (See A86 documentation for explanation)
-
- struc [bx]             ;Structure does NOT need a name
-Counter         dw ?    ;Countdown to change
-Reset           dw ?    ;Counter reset value
-Position        dw ?    ;Points to item being modified
-Delta           dw ?    ;Speed of change (also direction)
-Upper           dw ?    ;Upper limit for position
-Lower           dw ?    ;Lower limit for position
- ends
-
-;-------------------------------------------------------------------------
-;Un-Initialised data
-
- data segment
-
-XAngle          dw ?    ;Angles of rotation for each axis
-YAngle          dw ?    ;  higher numbers rotate faster
-ZAngle          dw ?
-
-X               dw ?    ;Coordinates of point being calculated
-Y               dw ?
-Z               dw ?
-
-XSin            dw ?    ;Sin and Cos for each axis angle of rotation
-YSin            dw ?
-ZSin            dw ?
-XCos            dw ?
-YCos            dw ?
-ZCos            dw ?
-
-NumPoints       dw ?    ;Number of points in current object
-
-;           V---MaxPoints
-Trail1: dw 125 dup ?    ;Display address of previous 8 positions for
-Trail2: dw 125 dup ?    ; each point being rotated.  We only erase a
-Trail3: dw 125 dup ?    ; points 8'th previous position.  This makes
-Trail4: dw 125 dup ?    ; the points leave a trail 7 pixles long
-Trail5: dw 125 dup ?
-Trail6: dw 125 dup ?
-Trail7: dw 125 dup ?
-Trail8: dw 125 dup ?
-
-CharP           dw ?    ;Pointer to font def for scrollie char
-BumpX           dw ?    ;Bump map coordinates being calculated
-BumpY           dw ?
-
-;-------------------------------------------------------------------------
-;A copy of the ROM font moved here so we can reference it using DS
-
-Font:           db 256*8 dup ?
-
-;-------------------------------------------------------------------------
-;Note:
-;
-; The following buffer is the whole of the bump map.  There is 1 scan
-;line of ZERO data above and below the area that will contain the bumps.
-;
-;Therefore the bumpmap is at Bumps+320 (See Equates Above)
-
-Bumps:          db 320*18 dup ?
-
-;-------------------------------------------------------------------------
-;Da Beeph (moo)
-
- code segment
-
-Start:
- jmp Main               ;Do it...
-
-;-------------------------------------------------------------------------
-;Pre initialised data...
-
-Shape           dw Cube ;Pointer to current object
-
-HalfH           dw 160  ;Screen coordinates for centre of object
-HalfV           dw 100
-
-XOff            dw 150  ;Position of object in world space
-YOff            dw 150
-ZOff            dw 800
-
-DeltaX          dw 5    ;Rotational speeds on each axis
-DeltaY          dw 4
-DeltaZ          dw 7
-
-;-------------------------------------------------------------------------
-;Modifiers: Tables follows this format:  (as per above based structure)
-;
-; Counter          Count down to next speed/position change
-; Retet            Value to reset counter to
-; Position         Pointer to data item to modify
-; Delta            Ammount to change item (also direction)
-; Upper            Upper limit fot item
-; Lower            Lower limit for item
-
-W1:     dw 30,30,offset DeltaX,2,15,2   ;Modifies X Rotational speed
-W2:     dw 20,20,offset DeltaY,-2,12,4  ;Modifies Y Rotational speed
-W3:     dw 40,40,offset DeltaZ,2,10,7   ;Modifies Z Rotational speed
-W4:     dw 02,02,offset ZOff,-3,800,180 ;Zooms object in and out of screen
-
-;-------------------------------------------------------------------------
-;Bump mapped scrollie banner text stuffz
-
-Bannerp         dw Banner       ;Points to next character
-CharColumn      db 080          ;Mask for next colunn of font def
-
-Banner:
- db ' *** The Dogs Of WAR demo by OnlyMe! ***          '
- db 'Begin!                 '
-
-Begin:
- db 'Oh the dogs they had a meeting     '
- db 'They came from near and far     '
- db 'And some dogs came by motor bus     '
- db 'And some by motor car          '
-
- db 0
- dw Flies,Hall
-
-Hall:
- db 'On entering the meeting hall     '
- db 'Each dog could take a look     '
- db 'Where he had to hang his asshole     '
- db 'Up high upon a hook          '
-
- db 0
- dw Cross,Fire
-
-Fire:
- db 'And when they were assembled     '
- db 'Each canine son and sire     '
- db 'Some dirty bulldog son of a bitch     '
- db 'Jumped up and hollared FIRE          '
-
- db 0
- dw Square,Panic
-
-Panic:
- db 'All was in a panic     '
- db 'Twas hell upon to look     '
- db 'Each doggie grabbed at random     '
- db 'An asshole from a hook          '
-
- db 0
- dw Cube,Sore
-
-Sore:
- db 'Now the assholes were all mixed up     '
- db 'Which made each doggie sore     '
- db 'To have to wear another dogs ass     '
- db 'He''d never worn before          '
-
- db 0
- dw Star,Bone
-
-Bone:
- db 'And that is why until this day     '
- db 'A dog will drop a bone     '
- db 'To go and smell another dogs ass     '
- db 'To see if it''s his OWN!            '
-
- db '*** THE END ***                       ???          '
- db 'Now what have i forgotz ????                 '
- db 'ERM.....                Oh Yea....         '
-
- db 'Greetings *** ROTATE *** Out To ~~~~~~         '
-
- db 0
- dw Heart,Catgirl
-
-Catgirl:
- db 'Catgirl - Jeg Elsker DEG - Purrrrrrrrrrrrr :)     '
- db 'Myriaam - Cute Sexy BABE Princess DOLL :) - heheheheheh - '
- db 'okokokokokokokokokokokokokokokokokokokokokokokokokok     '
- db 'LuvrsCrs - Manager''ess and savior''ess of UnderNUT #CODERS     '
- db '-->     '
-
- db 0
- dw Square,Unf
-
-Unf:
- db 'Unf - Fatar - Debonaire - Isomer - Hexsane & MrsHex - '
- db 'nop - mole - oreo - RatKing - \hatred\ - KBerg - '
- db 'RyanT - Mafia - Yosha - Jungle - Fid - Binary - '
- db 'PRIM8 - IiTM - Topanga - Tig2 - deRanged - RuneStar - '
- db '_RyAn_ - DaParasit - Spansh - CodeX - Wicked - '
- db 'Likwid - KingTroll - tpanther - ED_Lead - Reptile - '
-
- db 0
- dw Cross,NoIdea
-
-NoIdea:
- db 'Noidea - ^Para^ - Wh0is - Chiew - [QWORD] - LoneWolf - '
- db 'DaveDavis - PsYkOtIk - ^Ion^ - Weathros - LittleLoc - '
- db 'MissMilla - Centmo - Entlin - CreepGuy - eom - Xico - '
- db '^Axe^ & Sturnella - Almighty - o - Zyklon - hammr - '
- db '|Geo| - '
- db 'MarkIII (Hi Dad) - Diamond1 & Mermaid1 (Hi Sis1 and Sis2 :) - '
-
- db 0
- dw Flies,Snoo
-
-Snoo:
- db 'Snoo - Queen1 & Truely - Shama - Pink^Rose - Divebum - '
- db 'DEWDROP - KaDaM2 - Freakmama - mr007 - SIOK - Alih - '
- db 'Asterix - MoKie - Rats - RoadRoach - masdale - mystie - '
-
- db 'e|ectricTom - Techa^ - TX-Cowboy - buch - luth - '
-
- db 0
- dw Cross,Eche
-
-Eche:
- db 'BaBs - Ratty - Lexzy - PJ - Blondii - dew - Kittie - '
- db '^Kristi - strawbery - grlafraid - Krystal1 - ortho - '
- db 'Danni_ - Anne^ - brokngrl - keldog - AnGelDevo - '
- db '^DE^ - Avantyful & Niece babe :) - mauddib - lil_miss - '
- db 'Eche & Godis^ hehehehe - lowlife - X & W -                 '
- db '******** And Everyone else OnlyMe! dun MISSED            '
- db '*** THE END IS NOT NEIGH ***                    '
- db '---====*** Begin Again --->                               ',0
-
- dw Cube,Begin
-
-;-------------------------------------------------------------------------
-;Do IT!
-
-Main:
- mov ax,013             ;VGA GFX mode = 320 x 200 x 256
- int 010
-
- mov cx,(320*18)/2      ;Erase bump map buffer
- mov di,Bumps
- xor ax,ax
- rep stosw
-
- call GetPalette        ;Create shaded palette
- call GetFont           ;Read font data out of ROM into current DS
- call InitScroll        ;Point to font data for first char of banner
-
- mov ax,0a000           ;Point ES at video segment
- mov es,ax
-
-L0:
- call ChangeAngles      ;Get next angle of rotation for all axis
- call GetSinCos         ;Calculate Sin and Cos for all rotation angles
- call DoFrame           ;Rotate all points of shape and display
- call DoScroll          ;Scroll text through bump map buffer
- call DoBump            ;Bump map scrolly text and display it
- call Retrace           ;Wait for next raster frame
- call ErasePoints       ;Erase all pixles that are 8 frames old
- call DoDeltas          ;Modify rotational speeds etc
-
- in al,060              ;Read keyboard port
- cmp al,081             ;Escape key released?
- jne L0
-
-;-------------------------------------------------------------------------
-;Exit nicely
-
- mov ax,3               ;Back to textmode
- int 010
- mov ah,2               ;Place cursor at bottom left of display
- mov dx,01700
- xor bx,bx
- int 010
- mov dx,AuRevoir
- mov ah,9
- int 021
- mov ah,04c             ;Return control to dos
- int 021
-
-;-------------------------------------------------------------------------
-;Do one frame of rotating object. Calculate and plot all points
-
-;DI points to first trail buffer.  We store the address of every pixle
-;we write into this buffer.  When it comes time to erase these pixles we
-;do not need to recalculat them.  We just collect the address!
-
-DoFrame:
- xor ch,ch              ;Clear hi byte of loop counter
- xor di,di              ;Point to start of trail buffer
- mov si,[Shape]         ;Point to object to be rotated
- mov cl,[si]            ;Get number of points
- mov NumPoints,cx       ;We need this count later too...
- inc si
-L0:
- movsx ax,[si]          ;Get X coordinate of point
- mov [X],ax
- movsx ax,[si+1]        ;Get Y coordinate
- mov [Y],ax
- movsx ax,[si+2]        ;Get Z coordinate
- mov [Z],ax
- call Rotate            ;Rotate point in 3d
- call Draw              ;Draw this point
- add si,3               ;Point to next point
- add di,2               ;point to next slot of trail buffer
- dec cx
- jne L0
- ret
-
-;-------------------------------------------------------------------------
-;Project a single XYZ point into 2D space on screen
-
-Draw:
- mov ax,[YOff]          ;YOff * Y / Z+ZOff = Screen Y
- imul [Y]
- mov bx,[Z]
- add bx,[ZOff]
- idiv bx
- add ax,[HalfV]         ;Centre object on screen
-
- cmp dx,0               ;Clip this pixle if outside display area
- jb short ret
- cmp ax,200
- ja short ret
-
- mov bx,320             ;Calculate 320 * Y...
- imul bx
-
- mov bx,ax
-
- mov ax,[XOff]          ;XOff * X / Z+ ZOff = Screen X
- mov bp,[X]
- imul bp
- mov bp,[Z]
- add bp,[ZOff]          ;Distance
- idiv bp
- add ax,[HalfH]
-
- cmp dx,0               ;Clip pixle if outside display area
- jb short ret
- cmp ax,320
- ja short ret
-
- add bx,ax
-
- mov ax,-1              ;Generate colour for point based on X Y and Z axis
- sub ax,[Z]             ; of dot
- xor ax,[X]             ;Divides cube into 8 smaller cubes and alternates
- or ax,[Y]              ; light/dark (opposite corners same shade)
- shr ax,4
- add ax,[X]             ;This addition makes the cube stripey man :)
- add ax,[Y]
-
- es mov [bx],al         ;Place a dot with color al
- mov Trail8[di],bx      ;Save address for erase
- ret
-
-;-------------------------------------------------------------------------
-;Erase pixles that are 8 frames old.
-
-;Every time a pixles is drawn to the display we remember its video
-;offset (address).  This saves time when we want to erase that dot
-;because we dont need to recalculate the address given an XYZ
-
-ErasePoints:
- xor di,di
- mov cx,MaxPoints
-L0:
- mov bx,Trail8[di]      ;Pixles added to display on THIS frame
-; es dec b[bx]           ; Make them less bright
- xchg bx,Trail7[di]     ;Pixles one frame old
-; es dec b[bx]           ; Make them less bright
- xchg bx,Trail6[di]     ;Etc...
-; es dec b[bx]
- xchg bx,Trail5[di]
-; es dec b[bx]
- xchg bx,Trail4[di]
-; es dec b[bx]
- xchg bx,Trail3[di]
-; es dec b[bx]
- xchg bx,Trail2[di]
-; es dec b[bx]
- xchg bx,Trail1[di]     ;Pixles 8 frames old
- es mov b[bx],0         ;Erase them
- inc di,2
- dec cx
- jne L0
- ret
-
-;-------------------------------------------------------------------------
-;Rotate a single point in 3D space
-
-Rotate:
- push cx                        ;Need to keep this....
-
-;Rotate object about X axis  (changes Y and Z)
-;
-;Y' = Y * Cos(Xang) - Z. Sin(Xang)
-;Z' = Y * Sin(Xang) + Z. Cos(Xang)
-
- movsx eax,[Z]          ;Get Z * Sin(X)
- movsx ebx,[XSin]
- mul ebx
- mov ecx,eax            ;Save in cx...
- movsx eax,[Y]          ;Get Y * Cos(x)
- movsx ebx,[XCos]
- imul ebx
- sub eax,ecx            ;Get Y * Cos(X) - Z * Sin(X)
- sar eax,14             ;Sin and Cos Table values are scaled up
- mov bp,ax              ; by 16384.  SHR scales results back down
-
-;We just calculated our new Y coordinate.  We cant yet overwrite the old
-;Y because we still need it to calculated the new Z
-
- movsx eax,[Z]          ;Get Z * Cos(X)  Exact opposite of above!
- movsx ebx,[XCos]
- imul ebx
- mov ecx,eax            ;Save value...
- movsx eax,[Y]          ;Get Y * Sin(X)
- movsx ebx,[XSin]
- imul ebx
- add eax,ecx            ;Get Y * Sin(X) + Z * Cos(X)
- sar eax,14             ;Scale results down by 16384
-
- mov [Y],bp             ;Set newly calculated Y and Z coordinates
- mov [Z],ax
-
-;Rotate point in Y axis
-;
-;X' = X * Cos(Yang) - Z * Sin(Yang)
-;Z' = X * Sin(Yang) + Z * Cos(Yang)
-
- movsx eax,[Z]          ;Following code is very similar to above.
- movsx ebx,[YSin]       ;It rotates the point in the Y axis
- imul ebx               ;I.E. It calculates new X and Z
- mov ecx,eax
- movsx eax,[X]
- movsx ebx,[YCos]
- imul ebx
- sub eax,ecx
- sar eax,14
- mov bp,ax              ;Save new X coord
-
- movsx eax,[Z]          ;Calculate Z
- movsx ebx,[YCos]
- imul ebx
- mov ecx,eax
- movsx eax,[X]
- movsx ebx,[YSin]
- imul ebx
- add eax,ecx
- sar eax,14
-
- mov [X],bp             ;Set new X and Z for point
- mov [Z],ax
-
-;Rotate objecct along Z axis
-;
-;X' = X * Cos(Zang) - Y * Sin(Zang)
-;Y' = X * Sin(Zang) + Y * Cos(Zang)
-
- movsx eax,[Y]          ;Hmmm isnt this... the same, arent we just
- movsx ebx,[ZSin]       ;doing the same, calculations on in exactly
- imul ebx               ;The same, way but using different
- mov ecx,eax            ;Variables?  Couldnt we optimise here ???
- movsx eax,[X]
- movsx ebx,[ZCos]       ;Answer...
- imul ebx               ;
- sub eax,ecx            ;Yes!  But that is a space optimisation
- sar eax,14             ;Not a speed optimisation.  The INLINE
- mov bp,ax              ;method is faster
-
- movsx eax,[Y]          ;There is also a much better way to do this
- movsx ebx,[ZCos]       ;that is both smaller and faster.
- imul ebx
- mov ecx,eax            ;I.E. Use a Matrix to rotates points
- movsx eax,[X]          ;This however is much easier to follow
- movsx ebx,[ZSin]       ;and MAFFZ wuzz never my strong suit :)
- imul ebx
- add eax,ecx            ;Maybe if this gets too.. slow ill use
- sar eax,14             ;matricies tho :)
-
- mov [X],bp
- mov [Y],ax
- pop cx
- ret
-
-;-------------------------------------------------------------------------
-;calculate new angles of rotation for all points (to angles)
-
-;We do NOT rotate a point by 1 degree on one frame and then rotate that
-;rotated point by 1 degree in the next.  We rotate by 1 degree in the
-;first frame,  by 2 in the next, by 3 in the next etc.
-
-;Every time a point is rotated there is a slight ammount of error in our
-;calculation.  If we rotated previously rotated points we would accumulate
-;errors on each rotation of the point and our object would distort.
-
-;By rotating the SAME points (i.e the original shape) on every frame but
-;by different ammounts each time, we never distort our shape by more
-;than ONE rotations worth of error (which u cant see :)
-
-ChangeAngles:
- mov ax,[DeltaX]        ;Adjust X angles of rotation
- add [XAngle],ax
- mov ax,[DeltaY]        ;And Y
- add [YAngle],ax
- mov ax,[DeltaZ]        ;And Z
- add [ZAngle],ax
- ret
-
-;-------------------------------------------------------------------------
-;Get Sin and Cos of all 3 angles of rotation.
-
-GetSinCos:
- mov ax,[XAngle]        ;Get angle
- call SinCos            ;Get Sin and Cos
- mov [XSin],ax          ;Save em!
- mov [XCos],bx
-
- mov ax,[YAngle]        ;Same but different :)
- call SinCos
- mov [YSin],ax
- mov [YCos],bx
-
- mov ax,[ZAngle]        ;Same but different :)
- call SinCos
- mov [ZSin],ax
- mov [ZCos],bx
- ret
-
-;-------------------------------------------------------------------------
-;This moves a value between two limits at a specific rate.
-
-;This code uses the structure defined at the top of the source file.
-
-;The structure is defined as...
-;
-; struc [bx]
-;
-;This makes the address in BX the base of the structure.  A86 now allows
-;us to just name the structure element without reference to BX,  This makes
-;the code easier to read if you understand the mechanism but impossible to
-;follow if you dont :)
-
-;Where you see a something like
-;
-; dec Counter
-;
-;read....
-;
-; dec Counter[bx]
-;
-
-DoDeltas:
- mov bx,W1              ;Modify X rotation
- call >L0
- mov bx,W2              ;Modify Y rotation
- call >L0
- mov bx,W3              ;Modify Z rotation
- call >L0
- mov bx,W4              ;Zoom in and out
-
-L0:
- dec Counter            ;Count down to next change
- jne ret
- mov ax,Reset           ;Counter hit ZERO.  Reset it
- mov Counter,ax
- mov ax,Delta           ;Get rate. of change (also direction)
- mov si,Position        ;Get pointer to variable to modify
- add ax,[si]            ;Add delta to variable
- mov [si],ax            ;Store back
- cmp ax,Upper           ;Did variable reach upper limit?
- jl >L2
-L1:
- neg Delta              ;Change direction!
- ret
-L2:
- cmp ax,Lower           ;Did variable reach lower limit?
- jl L1
- ret
-
-;-------------------------------------------------------------------------
-;MOA's bump mapping routine. (Yea im uzing this again hehe I like it :)
-;-------------------------------------------------------------------------
-
-DoBump:
- mov ax,0a000           ;Point to video
- mov es,ax
-
- mov si,BumpMap+320*16  ;Point to end of last line of bumpmap
-
- mov di,16              ;16 scan lines
- mov ax,di
- sub ax,SpotY
- mov BumpY,ax
-
-;-------------------------------------------------------------------------
-
-L0:
- mov ax,320-2           ;320 Pels per scan
- mov cx,ax
- sub ax,SpotX
- mov BumpX,ax
-
-L1:
- mov ax,-1[si]          ;Look... No spotlight :) (Addition by OnlyMe)
- or al,1[si]
- or ax,-321[si]
- or al,321[si]
- test ax
- jz >L9
-
- xor ah,ah              ;Clear scratch registers
- xor bh,bh
- mov al,[si+1]          ;Read bump heights to left and right of this bump
- mov bl,[si-1]
- sub ax,bx              ;Compute differenct
- sub ax,BumpX           ;I think this gets a 2D normal (erm)
- cwd
- xor ax,dx
- sub ax,dx              ;But Maff izznt my strong suit
- mov bx,07f
- sub bx,ax
- mov ax,bx
- cwd
- not dx
- and bx,dx
- push bx
-
- xor ah,ah              ;When i understand how this code actually
- xor bh,bh              ; works ill add propper comments.  Maybe someone
- mov al,[si+0141]       ; can fill me in eh
- mov bl,[si-0140]
- sub ax,bx
- sub ax,BumpY
- cwd
- xor ax,dx
- sub ax,dx
- mov bx,07F
- sub bx,ax
- mov ax,bx
- cwd
- not dx
- and bx,dx
-
- pop ax
- mul bl
- shr ax,6+2
-
-L9:
-; shr ax,2
-; add ax,5
- es mov 0e600-BumpMap[si],al
-
- dec BumpX
- dec si
- loop L1
-
- dec BumpY
- sub si,2
- dec di
- jnz L0
- ret
-
-;-------------------------------------------------------------------------
-
-DoScroll:
- xor si,si              ;First pixle row in current column
-
- mov bx,BumpMap         ;Erm... Actually.... This is wrong... hehehe
- mov bp,[CharP]         ;Point to characters font data
- mov dh,b[CharColumn]   ;Get column mask
-L0:
- xor cx,cx              ;Assume no bumps (0 pixle)
- mov al,[bp+si]         ;Get character row from font
- and al,dh              ;Mask out all but current column
- if nz mov cx,03030     ;Raise bumps
- mov [bx],cx            ;Write double width pixle
- mov 320[bx],cx         ;Double height too!
- add bx,2*320
- inc si                 ;Add 1 to row
- cmp si,8               ;Font is 8 by 8
- jne L0
-
- mov ax,ds
- mov es,ax
-
- mov si,BumpMap         ;Scroll bumpmap 2 pixles left
- mov di,si              ;pixles at far left move to far right hehehe
- add si,2
- mov cx,320*16/2
- rep movsw
-
- ror CharColumn,1       ;Shift row mask 1
- jnc short ret          ;Wrap round and compute next char
-
-InitScroll:
- mov si,[BannerP]       ;Get pointer to next char in banner
- test b[si]             ;End of text?
- jnz >L0
-
- inc si
- lodsw
- mov [Shape],ax
- lodsw
- mov si,ax
-
-L0:
- xor ah,ah
- lodsb                  ;Get text character
- mov [BannerP],si
- shl ax,3               ;Compute chars ROM offset
- add ax,Font
- mov CharP,ax           ;Points to font data for character
- ret
-
-;-------------------------------------------------------------------------
-;Get a copy of the font data out of ROM into default DS
-
-GetFont:
- mov ax,0f000           ;Point to ROM
- mov ds,ax
- mov si,0fa6e           ;Offset to font data in ROM
- mov di,Font
- mov cx,256*2
- rep movsw
- mov ax,cs
- mov ds,ax
- ret
-
-;-------------------------------------------------------------------------
-;Write a KEWL purple palette (Shut Up! I like PuRplE :P)
-
-GetPalette:
- mov dx,03C8            ;Write new palette
- xor cx,cx
- xor ax,ax
- out dx,al
- inc dx
-L0:
- mov al,cl              ;Select colour number to updata
- out dx,al              ;Write Red
- xchg ah,al
- out dx,al              ;Write Green (Zero)
- xchg ah,al
- out dx,al              ;Write Blue
- inc cl
- jnz L0
- ret
-
-;-------------------------------------------------------------------------
-;Shape structure defined as....
-;
-; db number-of-points
-; db x,y,z      of first point
-; db x,y,z ...  of rest
-
-Cube:
- db 125
- db -35,-35,-35,-35,-35,-15,-35,-35, 05,-35,-35, 25,-35,-35, 45
- db -35,-15,-35,-35,-15,-15,-35,-15, 05,-35,-15, 25,-35,-15, 45
- db -35, 05,-35,-35, 05,-15,-35, 05, 05,-35, 05, 25,-35, 05, 45
- db -35, 25,-35,-35, 25,-15,-35, 25, 05,-35, 25, 25,-35, 25, 45
- db -35, 45,-35,-35, 45,-15,-35, 45, 05,-35, 45, 25,-35, 45, 45
- db -15,-35,-35,-15,-35,-15,-15,-35, 05,-15,-35, 25,-15,-35, 45
- db -15,-15,-35,-15,-15,-15,-15,-15, 05,-15,-15, 25,-15,-15, 45
- db -15, 05,-35,-15, 05,-15,-15, 05, 05,-15, 05, 25,-15, 05, 45
- db -15, 25,-35,-15, 25,-15,-15, 25, 05,-15, 25, 25,-15, 25, 45
- db -15, 45,-35,-15, 45,-15,-15, 45, 05,-15, 45, 25,-15, 45, 45
- db  05,-35,-35, 05,-35,-15, 05,-35, 05, 05,-35, 25, 05,-35, 45
- db  05,-15,-35, 05,-15,-15, 05,-15, 05, 05,-15, 25, 05,-15, 45
- db  05, 05,-35, 05, 05,-15, 05, 05, 05, 05, 05, 25, 05, 05, 45
- db  05, 25,-35, 05, 25,-15, 05, 25, 05, 05, 25, 25, 05, 25, 45
- db  05, 45,-35, 05, 45,-15, 05, 45, 05, 05, 45, 25, 05, 45, 45
- db  25,-35,-35, 25,-35,-15, 25,-35, 05, 25,-35, 25, 25,-35, 45
- db  25,-15,-35, 25,-15,-15, 25,-15, 05, 25,-15, 25, 25,-15, 45
- db  25, 05,-35, 25, 05,-15, 25, 05, 05, 25, 05, 25, 25, 05, 45
- db  25, 25,-35, 25, 25,-15, 25, 25, 05, 25, 25, 25, 25, 25, 45
- db  25, 45,-35, 25, 45,-15, 25, 45, 05, 25, 45, 25, 25, 45, 45
- db  45,-35,-35, 45,-35,-15, 45,-35, 05, 45,-35, 25, 45,-35, 45
- db  45,-15,-35, 45,-15,-15, 45,-15, 05, 45,-15, 25, 45,-15, 45
- db  45, 05,-35, 45, 05,-15, 45, 05, 05, 45, 05, 25, 45, 05, 45
- db  45, 25,-35, 45, 25,-15, 45, 25, 05, 45, 25, 25, 45, 25, 45
- db  45, 45,-35, 45, 45,-15, 45, 45, 05, 45, 45, 25, 45, 45, 45
-
-Star:
- db 65
- db -35,-35, 05,-35,-15, 05,-35, 05, 05,-35, 25, 05,-35, 45, 05
- db -15,-35, 05,-15,-15, 05,-15, 05, 05,-15, 25, 05,-15, 45, 05
- db  05,-35, 05, 05,-15, 05, 05, 05, 05, 05, 25, 05, 05, 45, 05
- db  25,-35, 05, 25,-15, 05, 25, 05, 05, 25, 25, 05, 25, 45, 05
- db  45,-35, 05, 45,-15, 05, 45, 05, 05, 45, 25, 05, 45, 45, 05
- db  05,-35,-35, 05,-35,-15, 05,-35, 25, 05,-35, 45,-35, 05,-35
- db  05,-15,-35, 05,-15,-15, 05,-15, 25, 05,-15, 45,-15, 05,-35
- db  05, 05,-35, 05, 05,-15, 05, 05, 25, 05, 05, 45, 05, 05,-35
- db  05, 25,-35, 05, 25,-15, 05, 25, 25, 05, 25, 45, 25, 05,-35
- db  05, 45,-35, 05, 45,-15, 05, 45, 25, 05, 45, 45, 45, 05,-35
- db -35, 05,-15,-35, 05, 25,-35, 05, 45,-15, 05,-15,-15, 05, 25
- db -15, 05, 45, 05, 05,-15, 05, 05, 25, 05, 05, 45, 25, 05,-15
- db  25, 05, 25, 25, 05, 45, 45, 05,-15, 45, 05, 25, 45, 05, 45
-
-Flies:
- db 6
- db -35,-35,-35,-35,-35, 45, 45, 45,-35, 45, 45, 45,  5,-35,  5
- db   5, 45,  5
-
-Square:
- db 25
- db -35,-35,-35,-35,-15,-35,-35, 05,-35,-35, 25,-35,-35, 45,-35
- db -15,-35,-35,-15,-15,-35,-15, 05,-35,-15, 25,-35,-15, 45,-35
- db  05,-35,-35, 05,-15,-35, 05, 05,-35, 05, 25,-35, 05, 45,-35
- db  25,-35,-35, 25,-15,-35, 25, 05,-35, 25, 25,-35, 25, 45,-35
- db  45,-35,-35, 45,-15,-35, 45, 05,-35, 45, 25,-35, 45, 45,-35
-
-Heart:
- db 32
- db -35,-15,-35,-35, 25,-35,-15,-35,-35,-15,-15,-35,-15, 05,-35
- db -15, 25,-35,-15, 45,-35, 05,-35,-35, 05,-15,-35, 05, 05,-35
- db  05, 25,-35, 05, 45,-35, 25,-15,-35, 25, 05,-35, 25, 25,-35
- db  45, 05,-35
- db -30,-10,-30,-30, 20,-30,-10,-30,-30,-10,-10,-30,-10, 00,-30
- db -10, 20,-30,-10, 40,-30, 00,-30,-30, 00,-10,-30, 00, 00,-30
- db  00, 20,-30, 00, 40,-30, 20,-10,-30, 20, 00,-30, 20, 20,-30
- db  40, 00,-30
-
-;-------------------------------------------------------------------------
-;I discovered this one completely by accident.  I moved a table from the
-;end of this file to somewhere up there... but forgot to move the label
-;(hehehe).  I was therfor referencing a table that is INCLUDED here by my
-;assembler.  It had lotsa junk in with it at first but i cleaned that out
-;and this was the result.  I love this object :) its KEWKL hehehe!
-
-Cross:
- db 75
- db 000,000,019,000,005,019,000,014,001,000,032,000,000,07D,000
- db 000,0C9,000,001,05F,001,001,0AB,001,001,0F6,001,002,041,002
- db 002,08D,002,002,0D8,002,003,023,003,003,005,004,003,06F,003
- db 003,0BA,003,004,051,004,004,09C,004,004,0E7,004,005,013,006
- db 005,032,005,005,07D,005,005,0C8,005,006,05E,006,006,0A9,006
- db 006,0F4,006,007,03F,007,007,08A,007,007,0D5,007,008,000,009
- db 008,020,008,008,06B,008,008,0B5,008,009,04B,009,009,095,009
- db 009,0E0,009,00A,009,00B,00A,02A,00A,00A,075,00A,00A,0BF,00A
- db 00B,054,00B,00D,007,026,00F,002,028,019,009,032,01E,004,037
- db 022,00B,03B,02C,006,045,02D,001,046,039,008,052,03D,003,056
- db 043,00A,05C,04B,000,064,04B,005,064,058,007,071,05B,002,074
- db 064,009,07C,084,008,09C,088,003,0A1,08D,00A,0A6,096,000,0AF
- db 096,005,0AF,0A3,007,0BC,0A6,002,0BF,0AE,009,0C7,0B5,004,0CE
- db 0C2,006,0DB,0C4,001,0DD,0CE,008,0E7,0D3,003,0EC,0D8,00A,0F1
- db 0E1,005,0FA,0E2,000,0FB,0EE,007,007,0F1,002,00A,0F9,009,011
-
-;=========================================================================
-
diff --git a/wmdots/wmdots/old_dos_demo/dow.com b/wmdots/wmdots/old_dos_demo/dow.com
deleted file mode 100644
index 056de4cd198af25a1dbdb2405351bff413f68aa3..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 12874
zcmb_=30M>7+IB(+`wj|mfk6=v2wT`gGDSf}R1mR>YXb=o*))Jii`}5d1(%*`ZEdlq
z)T*bgwY9C)s?`Z$-**u~0T)1I2_PT{{P%>~)AOJIJJ<DJ*Eds{H#6`0EcbKY?TOHt
zXZR&U%s7RcV6hqM3{8e5ZbPOT!;qoIFvD%koSxCc7kk{Mc&~##YPj{8Q!@nX7se{)
zyM%*-0}&A?Ap(<QQ;5(QVpBjkA(kX26HysNXi`GPT8Xu)5Ao_+CW)0MS-<-A=QA{p
zNX0Z_dKxq`h&Yj$5D|$INvbp{R@Dv5WDwD!L<tciOHL$`BqA9hN)i(>c+yt@+9}ES
zteQmC5t~R%PED2(QE4gv-sjIR(SM9qeP+CFyg)59iI60vN@Vo9^qyYrAx@N#pz0MQ
zijJcfA)=Gh62wHRC|-iCCL|}vt3GdvlgK0l2GU1JO~wNg#Ys~LQA$c&a)LzFY2$9Z
zij5=Eb|)ucaNMiGv)h<!a#oE#PI{aqY1SO+^qiPLk{FdB5&vr&(V`@2k_6|*EcE%M
z=tf@~REChsQZsP&gamrGbf4rHEEXkA#R2GRbz0(X%$BxWH5i*q5Xta+MR0hK>bvR>
zLu%~C3c%UZMJa@o-tBHI8m;;kLBETW;G^mwIPITicx9znsf37?iK3z~u_%?0VVm$C
zeFb2yKTM+X=zo}Dp5eEwb;;=}FZ|Ing_yMjR!o%co83D-*QPir&Xgz;O9;sy?x7b>
zN&dqg5wsunN@#zi&jwC1d@Gxc70gY~L9CM4i4j+O@jg9SmPABJVqT3`eP?`R#8;>N
zk{XATz@zDL8AMuAsx$#_@KY?xQ1uH?MMt_6n-t5EVO%0A8BU@v>?1aL)>VnL*+fbI
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

diff --git a/wmdots/wmdots/old_dos_demo/sintab.s b/wmdots/wmdots/old_dos_demo/sintab.s
deleted file mode 100644
index 89d8d5e..0000000
--- a/wmdots/wmdots/old_dos_demo/sintab.s
+++ /dev/null
@@ -1,528 +0,0 @@
-;Sin and Cos tables based on 4096 degree circle.
-;-------------------------------------------------------------------------
-
-;Does not extend table by a right angle to account for COS...
-; Code takes care of this!
-
-;-------------------------------------------------------------------------
-
- even 2
-
-SinTab:
- dw 00000,00019,00032,0004b,00064,0007d,00096,000af     ;000
- dw 000c9,000e2,000fb,00114,0012d,00146,0015f,00178     ;008
- dw 00192,001ab,001c4,001dd,001f6,0020f,00228,00241     ;010
- dw 0025b,00274,0028d,002a6,002bf,002d8,002f1,0030a     ;018
- dw 00323,0033d,00356,0036f,00388,003a1,003ba,003d3     ;020
- dw 003ec,00405,0041e,00437,00451,0046a,00483,0049c     ;028
- dw 004b5,004ce,004e7,00500,00519,00532,0054b,00564     ;030
- dw 0057d,00596,005af,005c8,005e1,005fa,00613,0062c     ;038
- dw 00645,0065e,00677,00690,006a9,006c2,006db,006f4     ;040
- dw 0070d,00726,0073f,00758,00771,0078a,007a3,007bc     ;048
- dw 007d5,007ee,00807,00820,00839,00852,0086b,00884     ;050
- dw 0089c,008b5,008ce,008e7,00900,00919,00932,0094b     ;058
- dw 00964,0097c,00995,009ae,009c7,009e0,009f9,00a11     ;060
- dw 00a2a,00a43,00a5c,00a75,00a8d,00aa6,00abf,00ad8     ;068
- dw 00af1,00b09,00b22,00b3b,00b54,00b6c,00b85,00b9e     ;070
- dw 00bb6,00bcf,00be8,00c01,00c19,00c32,00c4b,00c63     ;078
- dw 00c7c,00c95,00cad,00cc6,00cde,00cf7,00d10,00d08     ;080
- dw 00d41,00d59,00d72,00d8b,00da3,00dbc,00dd4,00ded     ;088
- dw 00e05,00e1e,00e36,00e4f,00e67,00e80,00e98,00eb1     ;090
- dw 00ec9,00ee2,00efa,00f12,00f2b,00f43,00f5c,00f74     ;098
- dw 00f8c,00fa5,00fbd,00fd6,00fee,01006,0101f,01037     ;0a0
- dw 0104f,01068,01080,01098,010b0,010c9,010e1,010f9     ;0a8
- dw 01111,0112a,01142,0115a,01172,0118a,011a2,011bb     ;0b0
- dw 011d3,011eb,01203,0121b,01233,0124b,01263,0127b     ;0b8
- dw 01294,012ac,012c4,012dc,012f4,0130c,01324,0133c     ;0c0
- dw 01354,0136c,01383,0139b,013b3,013cb,013e3,013fb     ;0c8
- dw 01413,0142b,01443,0145a,01472,0148a,014a2,014ba     ;0d0
- dw 014d1,014e9,01501,01519,01530,01548,01560,01577     ;0d8
- dw 0158f,015a7,015be,015d6,015ee,01605,0161d,01634     ;0e0
- dw 0164c,01664,0167b,01693,016aa,016c2,016d9,016f1     ;0e8
- dw 01708,0171f,01737,0174e,01766,0177d,01794,017ac     ;0f0
- dw 017c3,017da,017f2,01809,01820,01838,0184f,01866     ;0f8
- dw 0187d,01895,018ac,018c3,018da,018f1,01908,01920     ;100
- dw 01937,0194e,01965,0197c,01993,019aa,019c1,019d8     ;108
- dw 019ef,01a06,01a1d,01a34,01a4b,01a62,01a79,01a8f     ;110
- dw 01aa6,01abd,01ad4,01aeb,01b02,01b18,01b2f,01b46     ;118
- dw 01b5d,01b73,01b8a,01ba1,01bb7,01bce,01be5,01bfb     ;120
- dw 01c12,01c28,01c3f,01c55,01c6c,01c83,01c99,01caf     ;128
- dw 01cc6,01cdc,01cf3,01d09,01d20,01d36,01d4c,01d63     ;130
- dw 01d79,01d8f,01da6,01dbc,01dd2,01de8,01dfe,01e15     ;138
- dw 01e2b,01e41,01e57,01e6d,01e83,01e99,01eb0,01ec6     ;140
- dw 01edc,01ef2,01f08,01f1e,01f34,01f49,01f5f,01f75     ;148
- dw 01f8b,01fa1,01fb7,01fcd,01fe2,01ff8,0200e,02024     ;150
- dw 02039,0204f,02065,0207b,02090,020a6,020bb,020d1     ;158
- dw 020e7,020fc,02112,02127,0213d,02152,02168,0217d     ;160
- dw 02192,021a8,021bd,021d2,021e8,021fd,02212,02228     ;168
- dw 0223d,02252,02267,0227d,02292,022a7,022bc,022d1     ;170
- dw 022e6,022fb,02310,02325,0233a,0234f,02364,02379     ;178
- dw 0238e,023a3,023b8,023cd,023e1,023f6,0240b,02420     ;180
- dw 02434,02449,0245e,02473,02487,0249c,024b0,024c5     ;188
- dw 024da,024ee,02503,02517,0252c,02540,02554,02569     ;190
- dw 0257d,02592,025a6,025ba,025cf,025e3,025f7,0260b     ;198
- dw 0261f,02634,02648,0265c,02670,02684,02698,026ac     ;1a0
- dw 026c0,026d4,026e8,026fc,02710,02724,02738,0274c     ;1a8
- dw 0275f,02773,02787,0279b,027af,027c2,027d6,027ea     ;1b0
- dw 027fd,02811,02824,02838,0284b,0285f,02872,02886     ;1b8
- dw 02899,028ad,028c0,028d4,028e7,028fa,0290e,02921     ;1c0
- dw 02934,02947,0295a,0296e,02981,02994,029a7,029ba     ;1c8
- dw 029cd,029e0,029f3,02a06,02a19,02a2c,02a3f,02a52     ;1d0
- dw 02a65,02a77,02a8a,02a9d,02ab0,02ac2,02ad5,02ae8     ;1d8
- dw 02afa,02b0d,02b20,02b32,02b45,02b57,02b6a,02b7c     ;1e0
- dw 02b8e,02ba1,02bb3,02bc6,02bd8,02bea,02bfc,02c0f     ;1e8
- dw 02c21,02c33,02c45,02c57,02c6a,02c7c,02c8e,02ca0     ;1f0
- dw 02cb2,02cc4,02cd6,02ce8,02cf9,02d0b,02d1d,02d2f     ;1f8
- dw 02d41,02d52,02d64,02d76,02d88,02d99,02dab,02dbc     ;200
- dw 02dce,02de0,02df1,02e03,02e14,02e25,02e37,02e48     ;208
- dw 02e5a,02e6b,02e7c,02e8d,02e9f,02eb0,02ec1,02ed2     ;210
- dw 02ee3,02ef4,02f05,02f16,02f28,02f38,02f49,02f5a     ;218
- dw 02f6b,02f7c,02f8d,02f9e,02faf,02fbf,02fd0,02fe1     ;220
- dw 02ff1,03002,03013,03023,03034,03044,03055,03065     ;228
- dw 03076,03086,03096,030a7,030b7,030c7,030d8,030e8     ;230
- dw 030f8,03108,03118,03128,03138,03149,03159,03169     ;238
- dw 03179,03188,03198,031a8,031b8,031c8,031d8,031e7     ;240
- dw 031f7,03207,03216,03226,03236,03245,03255,03264     ;248
- dw 03274,03283,03293,032a2,032b1,032c1,032d0,032df     ;250
- dw 032ee,032fe,0330d,0331c,0332b,0333a,03349,03358     ;258
- dw 03367,03376,03385,03394,033a3,033b2,033c1,033cf     ;260
- dw 033de,033ed,033fb,0340a,03419,03427,03436,03444     ;268
- dw 03453,03461,03470,0347e,0348c,0349b,034a9,034b7     ;270
- dw 034c6,034d4,034e2,034f0,034fe,0350c,0351a,03528     ;278
- dw 03536,03544,03552,03560,0356e,0357c,03589,03597     ;280
- dw 035a5,035b3,035c0,035ce,035dc,035e9,035f7,03604     ;288
- dw 03612,0361f,0362c,0363a,03647,03654,03662,0366f     ;290
- dw 0367c,03689,03696,036a4,036b1,036be,036cb,036d8     ;298
- dw 036e5,036f1,036fe,0370b,03718,03725,03731,0373e     ;2a0
- dw 0374b,03757,03764,03771,0377d,0378a,03796,037a3     ;2a8
- dw 037af,037bb,037c8,037d4,037e0,037ed,037f9,03805     ;2b0
- dw 03811,0381d,03829,03835,03841,0384d,03859,03865     ;2b8
- dw 03871,0387d,03889,03894,038a0,038ac,038b7,038c3     ;2c0
- dw 038cf,038da,038e6,038f1,038fd,03908,03913,0391f     ;2c8
- dw 0392a,03935,03941,0394c,03957,03962,0396d,03978     ;2d0
- dw 03983,0398e,03999,039a4,039af,039ba,039c5,039d0     ;2d8
- dw 039da,039e5,039f0,039fb,03a05,03a10,03a1a,03a25     ;2e0
- dw 03a2f,03a3a,03a44,03a4f,03a59,03a63,03a6d,03a78     ;2e0
- dw 03a82,03a8c,03a96,03aa0,03aaa,03ab4,03abe,03ac8     ;2f0
- dw 03ad2,03adc,03ae6,03af0,03afa,03b03,03b0d,03b17     ;2f8
- dw 03b20,03b2a,03b34,03b3d,03b47,03b50,03b59,03b63     ;300
- dw 03b6c,03b75,03b7f,03b88,03b91,03b9a,03ba3,03bad     ;308
- dw 03bb6,03bbf,03bc8,03bd1,03bda,03be2,03beb,03bf4     ;310
- dw 03bfd,03c06,03c0e,03c17,03c20,03c28,03c31,03c39     ;318
- dw 03c42,03c4a,03c53,03c5b,03c63,03c6c,03c74,03c7c     ;320
- dw 03c84,03c8c,03c95,03c9d,03ca5,03cad,03cb5,03cbd     ;328
- dw 03cc5,03ccc,03cd4,03cdc,03ce4,03cec,03cf3,03cfb     ;320
- dw 03d02,03d0a,03d12,03d19,03d21,03d28,03d2f,03d37     ;338
- dw 03d3e,03d45,03d4d,03d54,03d5b,03d62,03d69,03d70     ;340
- dw 03d77,03d7e,03d85,03d8c,03d93,03d9a,03da1,03da7     ;348
- dw 03dae,03db5,03dbb,03dc2,03dc9,03dcf,03dd6,03ddc     ;350
- dw 03de2,03de9,03def,03df5,03dfc,03e02,03e08,03e0e     ;358
- dw 03e14,03e1b,03e21,03e27,03e2d,03e33,03e38,03e3e     ;360
- dw 03e44,03e4a,03e50,03e55,03e5b,03e61,03e66,03e6c     ;368
- dw 03e71,03e77,03e7c,03e82,03e87,03e8c,03e92,03e97     ;370
- dw 03e9c,03ea1,03ea7,03eac,03eb1,03eb6,03ebb,03ec0     ;378
- dw 03ec5,03eca,03ece,03ed3,03ed8,03edd,03ee1,03ee6     ;380
- dw 03eeb,03eef,03ef4,03ef8,03efd,03f01,03f06,03f0a     ;388
- dw 03f0e,03f13,03f17,03f1b,03f1f,03f23,03f27,03f2b     ;390
- dw 03f2f,03f33,03f37,03f3b,03f3f,03f43,03f47,03f4a     ;398
- dw 03f4e,03f52,03f55,03f59,03f5d,03f60,03f64,03f67     ;3a0
- dw 03f6a,03f6e,03f71,03f74,03f78,03f7b,03f7e,03f81     ;3a8
- dw 03f84,03f87,03f8a,03f8d,03f90,03f93,03f96,03f99     ;3b0
- dw 03f9c,03f9e,03fa1,03fa4,03fa6,03fa9,03fac,03fae     ;3b8
- dw 03fb1,03fb3,03fb5,03fb8,03fba,03fbc,03fbf,03fc1     ;3c0
- dw 03fc3,03fc5,03fc7,03fc9,03fcb,03fcd,03fcf,03fd1     ;3c8
- dw 03fd3,03fd5,03fd7,03fd8,03fda,03fdc,03fde,03fdf     ;3d0
- dw 03fe1,03fe2,03fe4,03fe5,03fe7,03fe8,03fe9,03feb     ;3d8
- dw 03fec,03fed,03fee,03fef,03ff0,03ff1,03ff2,03ff3     ;3e0
- dw 03ff4,03ff5,03ff6,03ff7,03ff8,03ff9,03ff9,03ffa     ;3e8
- dw 03ffb,03ffb,03ffc,03ffc,03ffd,03ffd,03ffe,03ffe     ;3f0
- dw 03ffe,03fff,03fff,03fff,03fff,03fff,03fff,03fff     ;3f8
-
- dw 03fff,03fff,03fff,03fff,03fff,03fff,03fff,03fff     ;400
- dw 03ffe,03ffe,03ffe,03ffd,03ffd,03ffc,03ffc,03ffb     ;408
- dw 03ffb,03ffa,03ff9,03ff9,03ff8,03ff7,03ff6,03ff5     ;410
- dw 03ff4,03ff3,03ff2,03ff1,03ff0,03fef,03fee,03fed     ;418
- dw 03fec,03feb,03fe9,03fe8,03fe7,03fe5,03fe4,03fe2     ;420
- dw 03fe1,03fdf,03fde,03fdc,03fda,03fd8,03fd7,03fd5     ;428
- dw 03fd3,03fd1,03fcf,03fcd,03fcb,03fc9,03fc7,03fc5     ;430
- dw 03fc3,03fc1,03fbf,03fbc,03fba,03fb8,03fb5,03fb3     ;438
- dw 03fb1,03fae,03fac,03fa9,03fa6,03fa4,03fa1,03f9e     ;440
- dw 03f9c,03f99,03f96,03f93,03f90,03f8d,03f8a,03f87     ;448
- dw 03f84,03f81,03f7e,03f7b,03f78,03f74,03f71,03f6e     ;450
- dw 03f6a,03f67,03f64,03f60,03f5d,03f59,03f55,03f52     ;458
- dw 03f4e,03f4a,03f47,03f43,03f3f,03f3b,03f37,03f33     ;460
- dw 03f2f,03f2b,03f27,03f23,03f1f,03f1b,03f17,03f13     ;468
- dw 03f0e,03f0a,03f06,03f01,03efd,03ef8,03ef4,03eef     ;470
- dw 03eeb,03ee6,03ee1,03edd,03ed8,03ed3,03ece,03eca     ;478
- dw 03ec5,03ec0,03ebb,03eb6,03eb1,03eac,03ea7,03ea1     ;480
- dw 03e9c,03e97,03e92,03e8c,03e87,03e82,03e7c,03e77     ;488
- dw 03e71,03e6c,03e66,03e61,03e5b,03e55,03e50,03e4a     ;490
- dw 03e44,03e3e,03e38,03e33,03e2d,03e27,03e21,03e1b     ;498
- dw 03e14,03e0e,03e08,03e02,03dfc,03df5,03def,03de9     ;4a0
- dw 03de2,03ddc,03dd6,03dcf,03dc9,03dc2,03dbb,03db5     ;4a8
- dw 03dae,03da7,03da1,03d9a,03d93,03d8c,03d85,03d7e     ;4b0
- dw 03d77,03d70,03d69,03d62,03d5b,03d54,03d4d,03d45     ;4b8
- dw 03d3e,03d37,03d2f,03d28,03d21,03d19,03d12,03d0a     ;4c0
- dw 03d02,03cfb,03cf3,03cec,03ce4,03cdc,03cd4,03ccc     ;4c8
- dw 03cc5,03cbd,03cb5,03cad,03ca5,03c9d,03c95,03c8c     ;4d0
- dw 03c84,03c7c,03c74,03c6c,03c63,03c5b,03c53,03c4a     ;4d8
- dw 03c42,03c39,03c31,03c28,03c20,03c17,03c0e,03c06     ;4e0
- dw 03bfd,03bf4,03beb,03be2,03bda,03bd1,03bc8,03bbf     ;4e8
- dw 03bb6,03bad,03ba3,03b9a,03b91,03b88,03b7f,03b75     ;4f0
- dw 03b6c,03b63,03b59,03b50,03b47,03b3d,03b34,03b2a     ;4f8
- dw 03b20,03b17,03b0d,03b03,03afa,03af0,03ae6,03adc     ;500
- dw 03ad2,03ac8,03abe,03ab4,03aaa,03aa0,03a96,03a8c     ;508
- dw 03a82,03a78,03a6d,03a63,03a59,03a4f,03a44,03a3a     ;510
- dw 03a2f,03a25,03a1a,03a10,03a05,039fb,039f0,039e5     ;518
- dw 039da,039d0,039c5,039ba,039af,039a4,03999,0398e     ;520
- dw 03983,03978,0396d,03962,03957,0394c,03941,03935     ;528
- dw 0392a,0391f,03913,03908,038fd,038f1,038e6,038da     ;530
- dw 038cf,038c3,038b7,038ac,038a0,03894,03889,0387d     ;538
- dw 03871,03865,03859,0384d,03841,03835,03829,0381d     ;540
- dw 03811,03805,037f9,037ed,037e0,037d4,037c8,037bb     ;548
- dw 037af,037a3,03796,0378a,0377d,03771,03764,03757     ;550
- dw 0374b,0373e,03731,03725,03718,0370b,036fe,036f1     ;558
- dw 036e5,036d8,036cb,036be,036b1,036a4,03696,03689     ;560
- dw 0367c,0366f,03662,03654,03647,0363a,0362c,0361f     ;568
- dw 03612,03604,035f7,035e9,035dc,035ce,035c0,035b3     ;570
- dw 035a5,03597,03589,0357c,0356e,03560,03552,03544     ;578
- dw 03536,03528,0351a,0350c,034fe,034f0,034e2,034d4     ;580
- dw 034c6,034b7,034a9,0349b,0348c,0347e,03470,03461     ;588
- dw 03453,03444,03436,03427,03419,0340a,033fb,033ed     ;590
- dw 033de,033cf,033c1,033b2,033a3,03394,03385,03376     ;598
- dw 03367,03358,03349,0333a,0332b,0331c,0330d,032fe     ;5a0
- dw 032ee,032df,032d0,032c1,032b1,032a2,03293,03283     ;5a8
- dw 03274,03264,03255,03245,03236,03226,03216,03207     ;5b0
- dw 031f7,031e7,031d8,031c8,031b8,031a8,03198,03188     ;5b8
- dw 03179,03169,03159,03149,03138,03128,03118,03108     ;5c0
- dw 030f8,030e8,030d8,030c7,030b7,030a7,03096,03086     ;5c8
- dw 03076,03065,03055,03044,03034,03023,03013,03002     ;5d0
- dw 02ff1,02fe1,02fd0,02fbf,02faf,02f9e,02f8d,02f7c     ;5d8
- dw 02f6b,02f5a,02f49,02f38,02f27,02f16,02f05,02ef4     ;5e0
- dw 02ee3,02ed2,02ec1,02eb0,02e9f,02e8d,02e7c,02e6b     ;5e8
- dw 02e5a,02e48,02e37,02e25,02e14,02e03,02df1,02de0     ;5f0
- dw 02dce,02dbc,02dab,02d99,02d88,02d76,02d64,02d52     ;5f8
- dw 02d41,02d2f,02d1d,02d0b,02cf9,02ce8,02cd6,02cc4     ;600
- dw 02cb2,02ca0,02c8e,02c7c,02c6a,02c57,02c45,02c33     ;608
- dw 02c21,02c0f,02bfc,02bea,02bd8,02bc6,02bb3,02ba1     ;610
- dw 02b8e,02b7c,02b6a,02b57,02b45,02b32,02b20,02b0d     ;618
- dw 02afa,02ae8,02ad5,02ac2,02ab0,02a9d,02a8a,02a77     ;620
- dw 02a65,02a52,02a3f,02a2c,02a19,02a06,029f3,029e0     ;628
- dw 029cd,029ba,029a7,02994,02981,0296e,0295a,02947     ;630
- dw 02934,02921,0290e,028fa,028e7,028d4,028c0,028ad     ;638
- dw 02899,02886,02872,0285f,0284b,02838,02824,02811     ;640
- dw 027fd,027ea,027d6,027c2,027af,0279b,02787,02773     ;648
- dw 0275f,0274c,02738,02724,02710,026fc,026e8,026d4     ;650
- dw 026c0,026ac,02698,02684,02670,0265c,02648,02634     ;658
- dw 0261f,0260b,025f7,025e3,025cf,025ba,025a6,02592     ;660
- dw 0257d,02569,02554,02540,0252c,02517,02503,024ee     ;668
- dw 024da,024c5,024b0,0249c,02487,02473,0245e,02449     ;670
- dw 02434,02420,0240b,023f6,023e1,023cd,023b8,023a3     ;678
- dw 0238e,02379,02364,0234f,0233a,02325,02310,022fb     ;680
- dw 022e6,022d1,022bc,022a7,02292,0227d,02267,02252     ;688
- dw 0223d,02228,02212,021fd,021e8,021d2,021bd,021a8     ;690
- dw 02192,0217d,02168,02152,0213d,02127,02112,020fc     ;698
- dw 020e7,020d1,020bb,020a6,02090,0207b,02065,0204f     ;6a0
- dw 02039,02024,0200e,01ff8,01fe2,01fcd,01fb7,01fa1     ;6a8
- dw 01f8b,01f75,01f5f,01f49,01f34,01f1e,01f08,01ef2     ;6b0
- dw 01edc,01ec6,01eb0,01e99,01e83,01e6d,01e57,01e41     ;6b8
- dw 01e2b,01e15,01dfe,01de8,01dd2,01dbc,01da6,01d8f     ;6c0
- dw 01d79,01d63,01d4c,01d36,01d20,01d09,01cf3,01cdc     ;6c8
- dw 01cc6,01caf,01c99,01c83,01c6c,01c55,01c3f,01c28     ;6d0
- dw 01c12,01bfb,01be5,01bce,01bb7,01ba1,01b8a,01b73     ;6d8
- dw 01b5d,01b46,01b2f,01b18,01b02,01aeb,01ad4,01abd     ;6e0
- dw 01aa6,01a8f,01a79,01a62,01a4b,01a34,01a1d,01a06     ;6e8
- dw 019ef,019d8,019c1,019aa,01993,0197c,01965,0194e     ;6f0
- dw 01937,01920,01908,018f1,018da,018c3,018ac,01895     ;6f8
- dw 0187d,01866,0184f,01838,01820,01809,017f2,017da     ;700
- dw 017c3,017ac,01794,0177d,01766,0174e,01737,0171f     ;708
- dw 01708,016f1,016d9,016c2,016aa,01693,0167b,01664     ;710
- dw 0164c,01634,0161d,01605,015ee,015d6,015be,015a7     ;718
- dw 0158f,01577,01560,01548,01530,01519,01501,014e9     ;720
- dw 014d1,014ba,014a2,0148a,01472,0145a,01443,0142b     ;728
- dw 01413,013fb,013e3,013cb,013b3,0139b,01383,0136c     ;730
- dw 01354,0133c,01324,0130c,012f4,012dc,012c4,012ac     ;738
- dw 01294,0127b,01263,0124b,01233,0121b,01203,011eb     ;740
- dw 011d3,011bb,011a2,0118a,01172,0115a,01142,0112a     ;748
- dw 01111,010f9,010e1,010c9,010b0,01098,01080,01068     ;750
- dw 0104f,01037,0101f,01006,00fee,00fd6,00fbd,00fa5     ;758
- dw 00f8c,00f74,00f5c,00f43,00f2b,00f12,00efa,00ee2     ;760
- dw 00ec9,00eb1,00e98,00e80,00e67,00e4f,00e36,00e1e     ;768
- dw 00e05,00ded,00dd4,00dbc,00da3,00d8b,00d72,00d59     ;770
- dw 00d41,00d28,00d10,00cf7,00cde,00cc6,00cad,00c94     ;778
- dw 00c7c,00c63,00c4b,00c32,00c19,00c01,00be8,00bcf     ;780
- dw 00bb6,00b9e,00b85,00b6c,00b54,00b3b,00b22,00b09     ;788
- dw 00af1,00ad8,00abf,00aa6,00a8d,00a75,00a5c,00a43     ;790
- dw 00a2a,00a11,009f9,009e0,009c7,009ae,00995,0097c     ;798
- dw 00964,0094b,00932,00919,00900,008e7,008ce,008b5     ;7a0
- dw 0089c,00884,0086b,00852,00839,00820,00807,007ee     ;7a8
- dw 007d5,007bc,007a3,0078a,00771,00758,0073f,00726     ;7b0
- dw 0070d,006f4,006db,006c2,006a9,00690,00677,0065e     ;7b8
- dw 00645,0062c,00613,005fa,005e1,005c8,005af,00596     ;7c0
- dw 0057d,00564,0054b,00532,00519,00500,004e7,004ce     ;7c8
- dw 004b5,0049c,00483,0046a,00450,00437,0041e,00405     ;7d0
- dw 003ec,003d3,003ba,003a1,00388,0036f,00356,0033d     ;7d8
- dw 00323,0030a,002f1,002d8,002bf,002a6,0028d,00274     ;7e0
- dw 0025b,00241,00228,0020f,001f6,001dd,001c4,001ab     ;7e8
- dw 00192,00178,0015f,00146,0012d,00114,000fb,000e2     ;7f0
- dw 000c9,000af,00096,0007d,00064,0004b,00032,00019     ;7f8
-
- dw 00000,0ffe7,0ffce,0ffb5,0ff9c,0ff83,0ff6a,0ff51     ;800
- dw 0ff37,0ff1e,0ff05,0feec,0fed3,0feba,0fea1,0fe88     ;808
- dw 0fe6e,0fe55,0fe3c,0fe23,0fe0a,0fdf1,0fdd8,0fdbf     ;810
- dw 0fda5,0fd8c,0fd73,0fd5a,0fd41,0fd28,0fd0f,0fcf6     ;818
- dw 0fcdd,0fcc3,0fcaa,0fc91,0fc78,0fc5f,0fc46,0fc2d     ;820
- dw 0fc14,0fbfb,0fbe2,0fbc9,0fbaf,0fb96,0fb7d,0fb64     ;828
- dw 0fb4b,0fb32,0fb19,0fb00,0fae7,0face,0fab5,0fa9c     ;830
- dw 0fa83,0fa6a,0fa51,0fa38,0fa1f,0fa06,0f9ed,0f9d4     ;838
- dw 0f9bb,0f9a2,0f989,0f970,0f957,0f93e,0f925,0f90c     ;840
- dw 0f8f3,0f8da,0f8c1,0f8a8,0f88f,0f876,0f85d,0f844     ;848
- dw 0f82b,0f812,0f7f9,0f7e0,0f7c7,0f7ae,0f795,0f77c     ;850
- dw 0f764,0f74b,0f732,0f719,0f700,0f6e7,0f6ce,0f6b5     ;858
- dw 0f69c,0f684,0f66b,0f652,0f639,0f620,0f607,0f5ef     ;860
- dw 0f5d6,0f5bd,0f5a4,0f58b,0f573,0f55a,0f541,0f528     ;868
- dw 0f50f,0f4f7,0f4de,0f4c5,0f4ac,0f494,0f47b,0f462     ;870
- dw 0f44a,0f431,0f418,0f3ff,0f3e7,0f3ce,0f3b5,0f39d     ;878
- dw 0f384,0f36b,0f353,0f33a,0f322,0f309,0f2f0,0f2d8     ;880
- dw 0f2bf,0f2a7,0f28e,0f275,0f25d,0f244,0f22c,0f213     ;888
- dw 0f1fb,0f1e2,0f1ca,0f1b1,0f199,0f180,0f168,0f14f     ;890
- dw 0f137,0f11e,0f106,0f0ee,0f0d5,0f0bd,0f0a4,0f08c     ;898
- dw 0f074,0f05b,0f043,0f02a,0f012,0effa,0efe1,0efc9     ;8a0
- dw 0efb1,0ef98,0ef80,0ef68,0ef50,0ef37,0ef1f,0ef07     ;8a8
- dw 0eeef,0eed6,0eebe,0eea6,0ee8e,0ee76,0ee5e,0ee45     ;8b0
- dw 0ee2d,0ee15,0edfd,0ede5,0edcd,0edb5,0ed9d,0ed85     ;8b8
- dw 0ed6c,0ed54,0ed3c,0ed24,0ed0c,0ecf4,0ecdc,0ecc4     ;8c0
- dw 0ecac,0ec94,0ec7d,0ec65,0ec4d,0ec35,0ec1d,0ec05     ;8c8
- dw 0ebed,0ebd5,0ebbd,0eba6,0eb8e,0eb76,0eb5e,0eb46     ;8d0
- dw 0eb2f,0eb17,0eaff,0eae7,0ead0,0eab8,0eaa0,0ea89     ;8d8
- dw 0ea71,0ea59,0ea42,0ea2a,0ea12,0e9fb,0e9e3,0e9cc     ;8e0
- dw 0e9b4,0e99c,0e985,0e96d,0e956,0e93e,0e927,0e90f     ;8e8
- dw 0e8f8,0e8e1,0e8c9,0e8b2,0e89a,0e883,0e86c,0e854     ;8f0
- dw 0e83d,0e826,0e80e,0e7f7,0e7e0,0e7c8,0e7b1,0e79a     ;8f8
- dw 0e783,0e76b,0e754,0e73d,0e726,0e70f,0e6f8,0e6e0     ;900
- dw 0e6c9,0e6b2,0e69b,0e684,0e66d,0e656,0e63f,0e628     ;908
- dw 0e611,0e5fa,0e5e3,0e5cc,0e5b5,0e59e,0e587,0e571     ;910
- dw 0e55a,0e543,0e52c,0e515,0e4fe,0e4e8,0e4d1,0e4ba     ;918
- dw 0e4a3,0e48d,0e476,0e45f,0e449,0e432,0e41b,0e405     ;920
- dw 0e3ee,0e3d8,0e3c1,0e3ab,0e394,0e37d,0e367,0e351     ;928
- dw 0e33a,0e324,0e30d,0e2f7,0e2e0,0e2ca,0e2b4,0e29d     ;930
- dw 0e287,0e271,0e25a,0e244,0e22e,0e218,0e201,0e1eb     ;938
- dw 0e1d5,0e1bf,0e1a9,0e193,0e17d,0e167,0e150,0e13a     ;940
- dw 0e124,0e10e,0e0f8,0e0e2,0e0cc,0e0b7,0e0a1,0e08b     ;948
- dw 0e075,0e05f,0e049,0e033,0e01e,0e008,0dff2,0dfdc     ;950
- dw 0dfc7,0dfb1,0df9b,0df85,0df70,0df5a,0df45,0df2f     ;958
- dw 0df19,0df04,0deee,0ded9,0dec3,0deae,0de98,0de83     ;960
- dw 0de6e,0de58,0de43,0de2e,0de18,0de03,0ddee,0ddd8     ;968
- dw 0ddc3,0ddae,0dd99,0dd83,0dd6e,0dd59,0dd44,0dd2f     ;970
- dw 0dd1a,0dd05,0dcf0,0dcdb,0dcc6,0dcb1,0dc9c,0dc87     ;978
- dw 0dc72,0dc5d,0dc48,0dc33,0dc1f,0dc0a,0dbf5,0dbe0     ;980
- dw 0dbcc,0dbb7,0dba2,0db8d,0db79,0db64,0db50,0db3b     ;988
- dw 0db26,0db12,0dafd,0dae9,0dad4,0dac0,0daac,0da97     ;990
- dw 0da83,0da6e,0da5a,0da46,0da31,0da1d,0da09,0d9f5     ;998
- dw 0d9e1,0d9cc,0d9b8,0d9a4,0d990,0d97c,0d968,0d954     ;9a0
- dw 0d940,0d92c,0d918,0d904,0d8f0,0d8dc,0d8c8,0d8b4     ;9a8
- dw 0d8a1,0d88d,0d879,0d865,0d851,0d83e,0d82a,0d816     ;9b0
- dw 0d803,0d7ef,0d7dc,0d7c8,0d7b5,0d7a1,0d78d,0d77a     ;9b8
- dw 0d767,0d753,0d740,0d72c,0d719,0d706,0d6f2,0d6df     ;9c0
- dw 0d6cc,0d6b9,0d6a6,0d692,0d67f,0d66c,0d659,0d646     ;9c8
- dw 0d633,0d620,0d60d,0d5fa,0d5e7,0d5d4,0d5c1,0d5ae     ;9d0
- dw 0d59b,0d589,0d576,0d563,0d550,0d53e,0d52b,0d518     ;9d8
- dw 0d506,0d4f3,0d4e0,0d4ce,0d4bb,0d4a9,0d496,0d484     ;9e0
- dw 0d472,0d45f,0d44d,0d43a,0d428,0d416,0d404,0d3f1     ;9e8
- dw 0d3df,0d3cd,0d3bb,0d3a9,0d396,0d384,0d372,0d360     ;9f0
- dw 0d34e,0d33c,0d32a,0d318,0d307,0d2f5,0d2e3,0d2d1     ;9f8
- dw 0d2bf,0d2ad,0d29c,0d28a,0d278,0d267,0d255,0d244     ;a00
- dw 0d232,0d220,0d20f,0d1fd,0d1ec,0d1db,0d1c9,0d1b8     ;a08
- dw 0d1a6,0d195,0d184,0d173,0d161,0d150,0d13f,0d12e     ;a10
- dw 0d11d,0d10c,0d0fb,0d0e9,0d0d8,0d0c8,0d0b7,0d0a6     ;a18
- dw 0d095,0d084,0d073,0d062,0d051,0d041,0d030,0d01f     ;a20
- dw 0d00f,0cffe,0cfed,0cfdd,0cfcc,0cfbc,0cfab,0cf9b     ;a28
- dw 0cf8a,0cf7a,0cf6a,0cf59,0cf49,0cf39,0cf28,0cf18     ;a30
- dw 0cf08,0cef8,0cee8,0ced8,0cec8,0ceb7,0cea7,0ce97     ;a38
- dw 0ce87,0ce78,0ce68,0ce58,0ce48,0ce38,0ce28,0ce19     ;a40
- dw 0ce09,0cdf9,0cdea,0cdda,0cdca,0cdbb,0cdab,0cd9c     ;a48
- dw 0cd8c,0cd7d,0cd6d,0cd5e,0cd4f,0cd3f,0cd30,0cd21     ;a50
- dw 0cd12,0cd02,0ccf3,0cce4,0ccd5,0ccc6,0ccb7,0cca8     ;a58
- dw 0cc99,0cc8a,0cc7b,0cc6c,0cc5d,0cc4e,0cc3f,0cc31     ;a60
- dw 0cc22,0cc13,0cc05,0cbf6,0cbe7,0cbd9,0cbca,0cbbc     ;a68
- dw 0cbad,0cb9f,0cb90,0cb82,0cb74,0cb65,0cb57,0cb49     ;a70
- dw 0cb3a,0cb2c,0cb1e,0cb10,0cb02,0caf4,0cae6,0cad8     ;a78
- dw 0caca,0cabc,0caae,0caa0,0ca92,0ca84,0ca76,0ca69     ;a80
- dw 0ca5b,0ca4d,0ca40,0ca32,0ca24,0ca17,0ca09,0c9fc     ;a88
- dw 0c9ee,0c9e1,0c9d4,0c9c6,0c9b9,0c9ac,0c99e,0c991     ;a90
- dw 0c984,0c977,0c96a,0c95c,0c94f,0c942,0c935,0c928     ;a98
- dw 0c91b,0c90f,0c902,0c8f5,0c8e8,0c8db,0c8cf,0c8c2     ;aa0
- dw 0c8b5,0c8a9,0c89c,0c88f,0c883,0c876,0c86a,0c85d     ;aa8
- dw 0c851,0c845,0c838,0c82c,0c820,0c813,0c807,0c7fb     ;ab0
- dw 0c7ef,0c7e3,0c7d7,0c7cb,0c7bf,0c7b3,0c7a7,0c79b     ;ab8
- dw 0c78f,0c783,0c777,0c76c,0c760,0c754,0c749,0c73d     ;ac0
- dw 0c731,0c726,0c71a,0c70f,0c703,0c6f8,0c6ed,0c6e1     ;ac8
- dw 0c6d6,0c6cb,0c6bf,0c6b4,0c6a9,0c69e,0c693,0c688     ;ad0
- dw 0c67d,0c672,0c667,0c65c,0c651,0c646,0c63b,0c630     ;ad8
- dw 0c626,0c61b,0c610,0c605,0c5fb,0c5f0,0c5e6,0c5db     ;ae0
- dw 0c5d1,0c5c6,0c5bc,0c5b1,0c5a7,0c59d,0c593,0c588     ;ae8
- dw 0c57e,0c574,0c56a,0c560,0c556,0c54c,0c542,0c538     ;af0
- dw 0c52e,0c524,0c51a,0c510,0c506,0c4fd,0c4f3,0c4e9     ;af8
- dw 0c4e0,0c4d6,0c4cc,0c4c3,0c4b9,0c4b0,0c4a7,0c49d     ;b00
- dw 0c494,0c48b,0c481,0c478,0c46f,0c466,0c45d,0c453     ;b08
- dw 0c44a,0c441,0c438,0c42f,0c426,0c41e,0c415,0c40c     ;b10
- dw 0c403,0c3fa,0c3f2,0c3e9,0c3e0,0c3d8,0c3cf,0c3c7     ;b18
- dw 0c3be,0c3b6,0c3ad,0c3a5,0c39d,0c394,0c38c,0c384     ;b20
- dw 0c37c,0c374,0c36b,0c363,0c35b,0c353,0c34b,0c343     ;b28
- dw 0c33b,0c334,0c32c,0c324,0c31c,0c314,0c30d,0c305     ;b30
- dw 0c2fe,0c2f6,0c2ee,0c2e7,0c2df,0c2d8,0c2d1,0c2c9     ;b38
- dw 0c2c2,0c2bb,0c2b3,0c2ac,0c2a5,0c29e,0c297,0c290     ;b40
- dw 0c289,0c282,0c27b,0c274,0c26d,0c266,0c25f,0c259     ;b48
- dw 0c252,0c24b,0c245,0c23e,0c237,0c231,0c22a,0c224     ;b50
- dw 0c21e,0c217,0c211,0c20b,0c204,0c1fe,0c1f8,0c1f2     ;b58
- dw 0c1ec,0c1e5,0c1df,0c1d9,0c1d3,0c1cd,0c1c8,0c1c2     ;b60
- dw 0c1bc,0c1b6,0c1b0,0c1ab,0c1a5,0c19f,0c19a,0c194     ;b68
- dw 0c18f,0c189,0c184,0c17e,0c179,0c174,0c16e,0c169     ;b70
- dw 0c164,0c15f,0c159,0c154,0c14f,0c14a,0c145,0c140     ;b78
- dw 0c13b,0c136,0c132,0c12d,0c128,0c123,0c11f,0c11a     ;b80
- dw 0c115,0c111,0c10c,0c108,0c103,0c0ff,0c0fa,0c0f6     ;b88
- dw 0c0f2,0c0ed,0c0e9,0c0e5,0c0e1,0c0dd,0c0d9,0c0d5     ;b90
- dw 0c0d1,0c0cd,0c0c9,0c0c5,0c0c1,0c0bd,0c0b9,0c0b6     ;b98
- dw 0c0b2,0c0ae,0c0ab,0c0a7,0c0a3,0c0a0,0c09c,0c099     ;ba0
- dw 0c096,0c092,0c08f,0c08c,0c088,0c085,0c082,0c07f     ;ba8
- dw 0c07c,0c079,0c076,0c073,0c070,0c06d,0c06a,0c067     ;bb0
- dw 0c064,0c062,0c05f,0c05c,0c05a,0c057,0c054,0c052     ;bb8
- dw 0c04f,0c04d,0c04b,0c048,0c046,0c044,0c041,0c03f     ;bc0
- dw 0c03d,0c03b,0c039,0c037,0c035,0c033,0c031,0c02f     ;bc8
- dw 0c02d,0c02b,0c029,0c028,0c026,0c024,0c022,0c021     ;bd0
- dw 0c01f,0c01e,0c01c,0c01b,0c019,0c018,0c017,0c015     ;bd8
- dw 0c014,0c013,0c012,0c011,0c010,0c00f,0c00e,0c00d     ;be0
- dw 0c00c,0c00b,0c00a,0c009,0c008,0c007,0c007,0c006     ;be8
- dw 0c005,0c005,0c004,0c004,0c003,0c003,0c002,0c002     ;bf0
- dw 0c002,0c001,0c001,0c001,0c001,0c001,0c001,0c001     ;bf8
-
- dw 0c001,0c001,0c001,0c001,0c001,0c001,0c001,0c001     ;c00
- dw 0c002,0c002,0c002,0c003,0c003,0c004,0c004,0c005     ;c08
- dw 0c005,0c006,0c007,0c007,0c008,0c009,0c00a,0c00b     ;c10
- dw 0c00c,0c00d,0c00e,0c00f,0c010,0c011,0c012,0c013     ;c18
- dw 0c014,0c015,0c017,0c018,0c019,0c01b,0c01c,0c01e     ;c20
- dw 0c01f,0c021,0c022,0c024,0c026,0c028,0c029,0c02b     ;c28
- dw 0c02d,0c02f,0c031,0c033,0c035,0c037,0c039,0c03b     ;c30
- dw 0c03d,0c03f,0c041,0c044,0c046,0c048,0c04b,0c04d     ;c38
- dw 0c04f,0c052,0c054,0c057,0c05a,0c05c,0c05f,0c062     ;c40
- dw 0c064,0c067,0c06a,0c06d,0c070,0c073,0c076,0c079     ;c48
- dw 0c07c,0c07f,0c082,0c085,0c088,0c08c,0c08f,0c092     ;c50
- dw 0c096,0c099,0c09c,0c0a0,0c0a3,0c0a7,0c0ab,0c0ae     ;c58
- dw 0c0b2,0c0b6,0c0b9,0c0bd,0c0c1,0c0c5,0c0c9,0c0cd     ;c60
- dw 0c0d1,0c0d5,0c0d9,0c0dd,0c0e1,0c0e5,0c0e9,0c0ed     ;c68
- dw 0c0f2,0c0f6,0c0fa,0c0ff,0c103,0c108,0c10c,0c111     ;c70
- dw 0c115,0c11a,0c11f,0c123,0c128,0c12d,0c132,0c136     ;c78
- dw 0c13b,0c140,0c145,0c14a,0c14f,0c154,0c159,0c15f     ;c80
- dw 0c164,0c169,0c16e,0c174,0c179,0c17e,0c184,0c189     ;c88
- dw 0c18f,0c194,0c19a,0c19f,0c1a5,0c1ab,0c1b0,0c1b6     ;c90
- dw 0c1bc,0c1c2,0c1c8,0c1cd,0c1d3,0c1d9,0c1df,0c1e5     ;c98
- dw 0c1ec,0c1f2,0c1f8,0c1fe,0c204,0c20b,0c211,0c217     ;ca0
- dw 0c21e,0c224,0c22a,0c231,0c237,0c23e,0c245,0c24b     ;ca8
- dw 0c252,0c259,0c25f,0c266,0c26d,0c274,0c27b,0c282     ;cb0
- dw 0c289,0c290,0c297,0c29e,0c2a5,0c2ac,0c2b3,0c2bb     ;cb8
- dw 0c2c2,0c2c9,0c2d1,0c2d8,0c2df,0c2e7,0c2ee,0c2f6     ;cc0
- dw 0c2fe,0c305,0c30d,0c314,0c31c,0c324,0c32c,0c334     ;cc8
- dw 0c33b,0c343,0c34b,0c353,0c35b,0c363,0c36b,0c374     ;cd0
- dw 0c37c,0c384,0c38c,0c394,0c39d,0c3a5,0c3ad,0c3b6     ;cd8
- dw 0c3be,0c3c7,0c3cf,0c3d8,0c3e0,0c3e9,0c3f2,0c3fa     ;ce0
- dw 0c403,0c40c,0c415,0c41e,0c426,0c42f,0c438,0c441     ;ce8
- dw 0c44a,0c453,0c45d,0c466,0c46f,0c478,0c481,0c48b     ;cf0
- dw 0c494,0c49d,0c4a7,0c4b0,0c4b9,0c4c3,0c4cc,0c4d6     ;cf8
- dw 0c4e0,0c4e9,0c4f3,0c4fd,0c506,0c510,0c51a,0c524     ;d00
- dw 0c52e,0c538,0c542,0c54c,0c556,0c560,0c56a,0c574     ;d08
- dw 0c57e,0c588,0c593,0c59d,0c5a7,0c5b1,0c5bc,0c5c6     ;d10
- dw 0c5d1,0c5db,0c5e6,0c5f0,0c5fb,0c605,0c610,0c61b     ;d18
- dw 0c626,0c630,0c63b,0c646,0c651,0c65c,0c667,0c672     ;d20
- dw 0c67d,0c688,0c693,0c69e,0c6a9,0c6b4,0c6bf,0c6cb     ;d28
- dw 0c6d6,0c6e1,0c6ed,0c6f8,0c703,0c70f,0c71a,0c726     ;d30
- dw 0c731,0c73d,0c749,0c754,0c760,0c76c,0c777,0c783     ;d38
- dw 0c78f,0c79b,0c7a7,0c7b3,0c7bf,0c7cb,0c7d7,0c7e3     ;d40
- dw 0c7ef,0c7fb,0c807,0c813,0c820,0c82c,0c838,0c845     ;d48
- dw 0c851,0c85d,0c86a,0c876,0c883,0c88f,0c89c,0c8a9     ;d50
- dw 0c8b5,0c8c2,0c8cf,0c8db,0c8e8,0c8f5,0c902,0c90f     ;d58
- dw 0c91b,0c928,0c935,0c942,0c94f,0c95c,0c96a,0c977     ;d60
- dw 0c984,0c991,0c99e,0c9ac,0c9b9,0c9c6,0c9d4,0c9e1     ;d68
- dw 0c9ee,0c9fc,0ca09,0ca17,0ca24,0ca32,0ca40,0ca4d     ;d70
- dw 0ca5b,0ca69,0ca77,0ca84,0ca92,0caa0,0caae,0cabc     ;d78
- dw 0caca,0cad8,0cae6,0caf4,0cb02,0cb10,0cb1e,0cb2c     ;d80
- dw 0cb3a,0cb49,0cb57,0cb65,0cb74,0cb82,0cb90,0cb9f     ;d88
- dw 0cbad,0cbbc,0cbca,0cbd9,0cbe7,0cbf6,0cc05,0cc13     ;d90
- dw 0cc22,0cc31,0cc3f,0cc4e,0cc5d,0cc6c,0cc7b,0cc8a     ;d98
- dw 0cc99,0cca8,0ccb7,0ccc6,0ccd5,0cce4,0ccf3,0cd02     ;da0
- dw 0cd12,0cd21,0cd30,0cd3f,0cd4f,0cd5e,0cd6d,0cd7d     ;da8
- dw 0cd8c,0cd9c,0cdab,0cdbb,0cdca,0cdda,0cdea,0cdf9     ;db0
- dw 0ce09,0ce19,0ce28,0ce38,0ce48,0ce58,0ce68,0ce78     ;db8
- dw 0ce88,0ce97,0cea7,0ceb7,0cec8,0ced8,0cee8,0cef8     ;dc0
- dw 0cf08,0cf18,0cf28,0cf39,0cf49,0cf59,0cf6a,0cf7a     ;dc8
- dw 0cf8a,0cf9b,0cfab,0cfbc,0cfcc,0cfdd,0cfed,0cffe     ;dd0
- dw 0d00f,0d01f,0d030,0d041,0d051,0d062,0d073,0d084     ;dd8
- dw 0d095,0d0a6,0d0b7,0d0c8,0d0d9,0d0ea,0d0fb,0d10c     ;de0
- dw 0d11d,0d12e,0d13f,0d150,0d161,0d173,0d184,0d195     ;de8
- dw 0d1a6,0d1b8,0d1c9,0d1db,0d1ec,0d1fd,0d20f,0d220     ;df0
- dw 0d232,0d244,0d255,0d267,0d278,0d28a,0d29c,0d2ae     ;df8
- dw 0d2bf,0d2d1,0d2e3,0d2f5,0d307,0d318,0d32a,0d33c     ;e00
- dw 0d34e,0d360,0d372,0d384,0d396,0d3a9,0d3bb,0d3cd     ;e08
- dw 0d3df,0d3f1,0d404,0d416,0d428,0d43a,0d44d,0d45f     ;e10
- dw 0d472,0d484,0d496,0d4a9,0d4bb,0d4ce,0d4e0,0d4f3     ;e18
- dw 0d506,0d518,0d52b,0d53e,0d550,0d563,0d576,0d589     ;e20
- dw 0d59b,0d5ae,0d5c1,0d5d4,0d5e7,0d5fa,0d60d,0d620     ;e28
- dw 0d633,0d646,0d659,0d66c,0d67f,0d692,0d6a6,0d6b9     ;e30
- dw 0d6cc,0d6df,0d6f2,0d706,0d719,0d72c,0d740,0d753     ;e38
- dw 0d767,0d77a,0d78e,0d7a1,0d7b5,0d7c8,0d7dc,0d7ef     ;e40
- dw 0d803,0d816,0d82a,0d83e,0d851,0d865,0d879,0d88d     ;e48
- dw 0d8a1,0d8b4,0d8c8,0d8dc,0d8f0,0d904,0d918,0d92c     ;e50
- dw 0d940,0d954,0d968,0d97c,0d990,0d9a4,0d9b8,0d9cc     ;e58
- dw 0d9e1,0d9f5,0da09,0da1d,0da32,0da46,0da5a,0da6e     ;e60
- dw 0da83,0da97,0daac,0dac0,0dad4,0dae9,0dafd,0db12     ;e68
- dw 0db26,0db3b,0db50,0db64,0db79,0db8d,0dba2,0dbb7     ;e70
- dw 0dbcc,0dbe0,0dbf5,0dc0a,0dc1f,0dc33,0dc48,0dc5d     ;e78
- dw 0dc72,0dc87,0dc9c,0dcb1,0dcc6,0dcdb,0dcf0,0dd05     ;e80
- dw 0dd1a,0dd2f,0dd44,0dd59,0dd6e,0dd84,0dd99,0ddae     ;e88
- dw 0ddc3,0ddd8,0ddee,0de03,0de18,0de2e,0de43,0de58     ;e90
- dw 0de6e,0de83,0de98,0deae,0dec3,0ded9,0deee,0df04     ;e98
- dw 0df19,0df2f,0df45,0df5a,0df70,0df85,0df9b,0dfb1     ;ea0
- dw 0dfc7,0dfdc,0dff2,0e008,0e01e,0e033,0e049,0e05f     ;ea8
- dw 0e075,0e08b,0e0a1,0e0b7,0e0cc,0e0e2,0e0f8,0e10e     ;eb0
- dw 0e124,0e13a,0e150,0e167,0e17d,0e193,0e1a9,0e1bf     ;eb8
- dw 0e1d5,0e1eb,0e202,0e218,0e22e,0e244,0e25a,0e271     ;ec0
- dw 0e287,0e29d,0e2b4,0e2ca,0e2e0,0e2f7,0e30d,0e324     ;ec8
- dw 0e33a,0e351,0e367,0e37e,0e394,0e3ab,0e3c1,0e3d8     ;ed0
- dw 0e3ee,0e405,0e41b,0e432,0e449,0e45f,0e476,0e48d     ;ed8
- dw 0e4a3,0e4ba,0e4d1,0e4e8,0e4fe,0e515,0e52c,0e543     ;ee0
- dw 0e55a,0e571,0e587,0e59e,0e5b5,0e5cc,0e5e3,0e5fa     ;ee8
- dw 0e611,0e628,0e63f,0e656,0e66d,0e684,0e69b,0e6b2     ;ef0
- dw 0e6c9,0e6e0,0e6f8,0e70f,0e726,0e73d,0e754,0e76b     ;ef8
- dw 0e783,0e79a,0e7b1,0e7c8,0e7e0,0e7f7,0e80e,0e826     ;f00
- dw 0e83d,0e854,0e86c,0e883,0e89a,0e8b2,0e8c9,0e8e1     ;f08
- dw 0e8f8,0e90f,0e927,0e93e,0e956,0e96d,0e985,0e99c     ;f10
- dw 0e9b4,0e9cc,0e9e3,0e9fb,0ea12,0ea2a,0ea42,0ea59     ;f18
- dw 0ea71,0ea89,0eaa0,0eab8,0ead0,0eae7,0eaff,0eb17     ;f20
- dw 0eb2f,0eb46,0eb5e,0eb76,0eb8e,0eba6,0ebbd,0ebd5     ;f28
- dw 0ebed,0ec05,0ec1d,0ec35,0ec4d,0ec65,0ec7d,0ec94     ;f30
- dw 0ecac,0ecc4,0ecdc,0ecf4,0ed0c,0ed24,0ed3c,0ed54     ;f38
- dw 0ed6c,0ed85,0ed9d,0edb5,0edcd,0ede5,0edfd,0ee15     ;f40
- dw 0ee2d,0ee45,0ee5e,0ee76,0ee8e,0eea6,0eebe,0eed6     ;f48
- dw 0eeef,0ef07,0ef1f,0ef37,0ef50,0ef68,0ef80,0ef98     ;f50
- dw 0efb1,0efc9,0efe1,0effa,0f012,0f02a,0f043,0f05b     ;f58
- dw 0f074,0f08c,0f0a4,0f0bd,0f0d5,0f0ee,0f106,0f11e     ;f60
- dw 0f137,0f14f,0f168,0f180,0f199,0f1b1,0f1ca,0f1e2     ;f68
- dw 0f1fb,0f213,0f22c,0f244,0f25d,0f275,0f28e,0f2a7     ;f70
- dw 0f2bf,0f2d8,0f2f0,0f309,0f322,0f33a,0f353,0f36c     ;f78
- dw 0f384,0f39d,0f3b5,0f3ce,0f3e7,0f3ff,0f418,0f431     ;f80
- dw 0f44a,0f462,0f47b,0f494,0f4ac,0f4c5,0f4de,0f4f7     ;f88
- dw 0f50f,0f528,0f541,0f55a,0f573,0f58b,0f5a4,0f5bd     ;f90
- dw 0f5d6,0f5ef,0f607,0f620,0f639,0f652,0f66b,0f684     ;f98
- dw 0f69c,0f6b5,0f6ce,0f6e7,0f700,0f719,0f732,0f74b     ;fa0
- dw 0f764,0f77c,0f795,0f7ae,0f7c7,0f7e0,0f7f9,0f812     ;fa8
- dw 0f82b,0f844,0f85d,0f876,0f88f,0f8a8,0f8c1,0f8da     ;fb0
- dw 0f8f3,0f90c,0f925,0f93e,0f957,0f970,0f989,0f9a2     ;fb8
- dw 0f9bb,0f9d4,0f9ed,0fa06,0fa1f,0fa38,0fa51,0fa6a     ;fc0
- dw 0fa83,0fa9c,0fab5,0face,0fae7,0fb00,0fb19,0fb32     ;fc8
- dw 0fb4b,0fb64,0fb7d,0fb96,0fbb0,0fbc9,0fbe2,0fbfb     ;fd0
- dw 0fc14,0fc2d,0fc46,0fc5f,0fc78,0fc91,0fcaa,0fcc3     ;fd8
- dw 0fcdd,0fcf6,0fd0f,0fd28,0fd41,0fd5a,0fd73,0fd8c     ;fe0
- dw 0fda5,0fdbf,0fdd8,0fdf1,0fe0a,0fe23,0fe3c,0fe55     ;fe8
- dw 0fe6e,0fe88,0fea1,0feba,0fed3,0feec,0ff05,0ff1e     ;ff0
- dw 0ff37,0ff51,0ff6a,0ff83,0ff9c,0ffb5,0ffce,0ffe7     ;ff8
-
-;=========================================================================
diff --git a/wmdots/wmdots/old_dos_demo/trig.s b/wmdots/wmdots/old_dos_demo/trig.s
deleted file mode 100644
index 0917017..0000000
--- a/wmdots/wmdots/old_dos_demo/trig.s
+++ /dev/null
@@ -1,29 +0,0 @@
-;=========================================================================
-;Trig functions for GFX routines   Copyright (c) 1995 by Mark I Manning IV
-;=========================================================================
-
-CosTab          equ SinTab+0800 ;A Right angle foreward in table!
-
-;-------------------------------------------------------------------------
-
-;Return Sin and Cos of angle AX in variables of same name
-
-SinCos:
- and ax,0fff            ;4096 degrees = 0 degrees
- mov bx,ax              ;Put into an indexing reg
- add bx,bx
- mov ax,SinTab[bx]      ;Get Sin(N)
- mov Sin,ax             ;Bah no MOV Sin,[BX]... Crap processor!
-
-;Note.
-; Can NOT use mov ax,SinTab[2*ebx] because in following code BX may go
-;  negative and 2* a negative number = DOUBLY NEGATIVE!
-
- cmp bx,01800           ;Was Sin(N) in last quadrant of circle?
- if nl sub bx,02000     ;Cos(N) must be in first quadrant then
- mov bx,CosTab[bx]      ;Get Cos(n)
- mov Cos,bx             ;Exits with Sin in AX and Cos in BX too!
- ret
-
-;=========================================================================
-
diff --git a/wmdots/wmdots/sintab.c b/wmdots/wmdots/sintab.c
deleted file mode 100644
index 945d1c5..0000000
--- a/wmdots/wmdots/sintab.c
+++ /dev/null
@@ -1,75 +0,0 @@
-// Sin and Cos tables based on 512 degree circle.
-// -----------------------------------------------------------------------
-
-short sin_tab[]=
-{
-  0x0000, 0x00c9, 0x0192, 0x025b, 0x0323, 0x03ec, 0x04b5, 0x057d,
-  0x0645, 0x070d, 0x07d5, 0x089c, 0x0964, 0x0a2a, 0x0af1, 0x0bb6,
-  0x0c7c, 0x0d41, 0x0e05, 0x0ec9, 0x0f8c, 0x104f, 0x1111, 0x11d3,
-  0x1294, 0x1354, 0x1413, 0x14d1, 0x158f, 0x164c, 0x1708, 0x17c3,
-  0x187d, 0x1937, 0x19ef, 0x1aa6, 0x1b5d, 0x1c12, 0x1cc6, 0x1d79,
-  0x1e2b, 0x1edc, 0x1f8b, 0x2039, 0x20e7, 0x2192, 0x223d, 0x22e6,
-  0x238e, 0x2434, 0x24da, 0x257d, 0x261f, 0x26c0, 0x275f, 0x27fd,
-  0x2899, 0x2934, 0x29cd, 0x2a65, 0x2afa, 0x2b8e, 0x2c21, 0x2cb2,
-  0x2d41, 0x2dce, 0x2e5a, 0x2ee3, 0x2f6b, 0x2ff1, 0x3076, 0x30f8,
-  0x3179, 0x31f7, 0x3274, 0x32ee, 0x3367, 0x33de, 0x3453, 0x34c6,
-  0x3536, 0x35a5, 0x3612, 0x367c, 0x36e5, 0x374b, 0x37af, 0x3811,
-  0x3871, 0x38cf, 0x392a, 0x3983, 0x39da, 0x3a2f, 0x3a82, 0x3ad2,
-  0x3b20, 0x3b6c, 0x3bb6, 0x3bfd, 0x3c42, 0x3c84, 0x3cc5, 0x3d02,
-  0x3d3e, 0x3d77, 0x3dae, 0x3de2, 0x3e14, 0x3e44, 0x3e71, 0x3e9c,
-  0x3ec5, 0x3eeb, 0x3f0e, 0x3f2f, 0x3f4e, 0x3f6a, 0x3f84, 0x3f9c,
-  0x3fb1, 0x3fc3, 0x3fd3, 0x3fe1, 0x3fec, 0x3ff4, 0x3ffb, 0x3ffe,
-
-  0x3fff, 0x3ffe, 0x3ffb, 0x3ff4, 0x3fec, 0x3fe1, 0x3fd3, 0x3fc3,
-  0x3fb1, 0x3f9c, 0x3f84, 0x3f6a, 0x3f4e, 0x3f2f, 0x3f0e, 0x3eeb,
-  0x3ec5, 0x3e9c, 0x3e71, 0x3e44, 0x3e14, 0x3de2, 0x3dae, 0x3d77,
-  0x3d3e, 0x3d02, 0x3cc5, 0x3c84, 0x3c42, 0x3bfd, 0x3bb6, 0x3b6c,
-  0x3b20, 0x3ad2, 0x3a82, 0x3a2f, 0x39da, 0x3983, 0x392a, 0x38cf,
-  0x3871, 0x3811, 0x37af, 0x374b, 0x36e5, 0x367c, 0x3612, 0x35a5,
-  0x3536, 0x34c6, 0x3453, 0x33de, 0x3367, 0x32ee, 0x3274, 0x31f7,
-  0x3179, 0x30f8, 0x3076, 0x2ff1, 0x2f6b, 0x2ee3, 0x2e5a, 0x2dce,
-  0x2d41, 0x2cb2, 0x2c21, 0x2b8e, 0x2afa, 0x2a65, 0x29cd, 0x2934,
-  0x2899, 0x27fd, 0x275f, 0x26c0, 0x261f, 0x257d, 0x24da, 0x2434,
-  0x238e, 0x22e6, 0x223d, 0x2192, 0x20e7, 0x2039, 0x1f8b, 0x1edc,
-  0x1e2b, 0x1d79, 0x1cc6, 0x1c12, 0x1b5d, 0x1aa6, 0x19ef, 0x1937,
-  0x187d, 0x17c3, 0x1708, 0x164c, 0x158f, 0x14d1, 0x1413, 0x1354,
-  0x1294, 0x11d3, 0x1111, 0x104f, 0x0f8c, 0x0ec9, 0x0e05, 0x0d41,
-  0x0c7c, 0x0bb6, 0x0af1, 0x0a2a, 0x0964, 0x089c, 0x07d5, 0x070d,
-  0x0645, 0x057d, 0x04b5, 0x03ec, 0x0323, 0x025b, 0x0192, 0x00c9,
-
-  0x0000, 0xff37, 0xfe6e, 0xfda5, 0xfcdd, 0xfc14, 0xfb4b, 0xfa83,
-  0xf9bb, 0xf8f3, 0xf82b, 0xf764, 0xf69c, 0xf5d6, 0xf50f, 0xf44a,
-  0xf384, 0xf2bf, 0xf1fb, 0xf137, 0xf074, 0xefb1, 0xeeef, 0xee2d,
-  0xed6c, 0xecac, 0xebed, 0xeb2f, 0xea71, 0xe9b4, 0xe8f8, 0xe83d,
-  0xe783, 0xe6c9, 0xe611, 0xe55a, 0xe4a3, 0xe3ee, 0xe33a, 0xe287,
-  0xe1d5, 0xe124, 0xe075, 0xdfc7, 0xdf19, 0xde6e, 0xddc3, 0xdd1a,
-  0xdc72, 0xdbcc, 0xdb26, 0xda83, 0xd9e1, 0xd940, 0xd8a1, 0xd803,
-  0xd767, 0xd6cc, 0xd633, 0xd59b, 0xd506, 0xd472, 0xd3df, 0xd34e,
-  0xd2bf, 0xd232, 0xd1a6, 0xd11d, 0xd095, 0xd00f, 0xcf8a, 0xcf08,
-  0xce87, 0xce09, 0xcd8c, 0xcd12, 0xcc99, 0xcc22, 0xcbad, 0xcb3a,
-  0xcaca, 0xca5b, 0xc9ee, 0xc984, 0xc91b, 0xc8b5, 0xc851, 0xc7ef,
-  0xc78f, 0xc731, 0xc6d6, 0xc67d, 0xc626, 0xc5d1, 0xc57e, 0xc52e,
-  0xc4e0, 0xc494, 0xc44a, 0xc403, 0xc3be, 0xc37c, 0xc33b, 0xc2fe,
-  0xc2c2, 0xc289, 0xc252, 0xc21e, 0xc1ec, 0xc1bc, 0xc18f, 0xc164,
-  0xc13b, 0xc115, 0xc0f2, 0xc0d1, 0xc0b2, 0xc096, 0xc07c, 0xc064,
-  0xc04f, 0xc03d, 0xc02d, 0xc01f, 0xc014, 0xc00c, 0xc005, 0xc002,
-
-  0xc001, 0xc002, 0xc005, 0xc00c, 0xc014, 0xc01f, 0xc02d, 0xc03d,
-  0xc04f, 0xc064, 0xc07c, 0xc096, 0xc0b2, 0xc0d1, 0xc0f2, 0xc115,
-  0xc13b, 0xc164, 0xc18f, 0xc1bc, 0xc1ec, 0xc21e, 0xc252, 0xc289,
-  0xc2c2, 0xc2fe, 0xc33b, 0xc37c, 0xc3be, 0xc403, 0xc44a, 0xc494,
-  0xc4e0, 0xc52e, 0xc57e, 0xc5d1, 0xc626, 0xc67d, 0xc6d6, 0xc731,
-  0xc78f, 0xc7ef, 0xc851, 0xc8b5, 0xc91b, 0xc984, 0xc9ee, 0xca5b,
-  0xcaca, 0xcb3a, 0xcbad, 0xcc22, 0xcc99, 0xcd12, 0xcd8c, 0xce09,
-  0xce88, 0xcf08, 0xcf8a, 0xd00f, 0xd095, 0xd11d, 0xd1a6, 0xd232,
-  0xd2bf, 0xd34e, 0xd3df, 0xd472, 0xd506, 0xd59b, 0xd633, 0xd6cc,
-  0xd767, 0xd803, 0xd8a1, 0xd940, 0xd9e1, 0xda83, 0xdb26, 0xdbcc,
-  0xdc72, 0xdd1a, 0xddc3, 0xde6e, 0xdf19, 0xdfc7, 0xe075, 0xe124,
-  0xe1d5, 0xe287, 0xe33a, 0xe3ee, 0xe4a3, 0xe55a, 0xe611, 0xe6c9,
-  0xe783, 0xe83d, 0xe8f8, 0xe9b4, 0xea71, 0xeb2f, 0xebed, 0xecac,
-  0xed6c, 0xee2d, 0xeeef, 0xefb1, 0xf074, 0xf137, 0xf1fb, 0xf2bf,
-  0xf384, 0xf44a, 0xf50f, 0xf5d6, 0xf69c, 0xf764, 0xf82b, 0xf8f3,
-  0xf9bb, 0xfa83, 0xfb4b, 0xfc14, 0xfcdd, 0xfda5, 0xfe6e, 0xff37
-};
-
-// =======================================================================
diff --git a/wmdots/wmdots/wmdots.c b/wmdots/wmdots/wmdots.c
deleted file mode 100644
index f664209..0000000
--- a/wmdots/wmdots/wmdots.c
+++ /dev/null
@@ -1,667 +0,0 @@
-// WM-Dots the Window Maker 3d Rotating Dots Demo by Mark I Manning IV
-// =======================================================================
-
-// This demo is based on an old DOS demo I did a number of years ago.  The
-// trick was to get it to work in an 64 x 64 window instead of the
-// 320 x 200 of the original. (and in 16 instead of 256 colours :)
-
-// Much of these sources are based on other dockable application sources.
-// For this reason, and because it is the right thing to do, this file is
-// distributed under the GPL.  Use it and abuse it as you will.
-
-// Flames, critisizm and general nukings can be sent to....
-
-//  [email protected]
-
-// I have included the sources (in 100% pure ASM) to the afore mentioned
-// original demo.  These you can also consider covered by the GPL.
-
-// Maybe someone can help me convert the bump mapping in the original to
-// use only 16 colours :)  (actually, I have space in the master.xpm for
-// 32 colours if I retain a 2 x 2 pixle size.  If i go to 1 x 1 i can
-// fit 64 colours in there :)
-
-// Yea... I know... Im supposed to be sparing of system resources like
-// colour allocations but come on guys... this IS a demo after all :)
-// Demos are supposed to be abusive of system resources eh??? :)
-
-//  This source file is 100% TAB FREE. Use any editor/viewer you want
-//  to view it with and set ANY size tabs and it will STILL look right.
-//  TABS ARE EVIL!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-// Also Linus T is wrong. Indentations of 8 are an abomination and so is
-// k&r source formatting.  So There!
-
-// Apart from that... Linus for president :)
-//                    or George W. Bush!!!
-
-// -----------------------------------------------------------------------
-// blah :)
-
-// Version 0.1 beta     Released Saturday October 9 1999
-//
-//    To do...  Fix bug that causes core dump when the "cross" object
-//               rotates outside window (its not a clipping problem).
-//              Find out why the "cross" object is not cross shaped in
-//               this demo when it is in the dos version.
-//              Change pixle sizes to 1 x 1 for objects that are in
-//               the distance.
-//              Move all object definitions out of this file and into
-//               some kind of rc file and allow user defined objects
-//              Add greets to the credits display :)
-//              Impliment better light shading (in object space?)
-//              Prevent dark pixles overwriting light ones
-//
-//    Done...   Scrapped idea about different pixle sizez, it didn't look
-//               as good as i thunked it would :)
-//              Fixed adjust_angle() to be angle +128 not angle +127
-//              Fixed cross by defining xyz as char instead of int
-//              Fixed core dump problem with cross:  Oopts it was a
-//               clipping problem, z clipping points behind camera! :)
-//              Added size macro (prolly a bad name for it tho :)
-//              Implimented better light shading but its still not
-//               quite right yet...
-//              Removed math.h from includes as im not using any
-//               functions therein.  Saved a whopping 4 bytes :)
-//              Added code to draw_point() to prevent dark pels from
-//               being drawn over lighter pels.  Dark pels are further
-//               away and should be BEHIND the lighter ones.  There is
-//               almost no cpu bash here and I dont need to z sort pels
-//
-//
-// Version 0.2 beta     Released Saturday October 9 1999
-//
-//    To do..   Still gotta move objects to rc file....
-//
-//
-//
-//    Done...
-
-// -----------------------------------------------------------------------
-// includes
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <unistd.h>
-
-#include <X11/xpm.h>
-#include <libdockapp/wmgeneral.h>
-#include "master.xpm"
-#include "sintab.c"             // sin() and cos() are crap!
-
-// -----------------------------------------------------------------------
-// defines
-
-#define PEL_SIZE 2              // 1 or 2 only
-
-#define MAX_POINTS 125          // max # pels in an object
-
-#define MASK_WIDTH 64           // window bitmap mask dimentions
-#define MASK_HEIGHT 64
-#define MASK_SIZE MASK_WIDTH * MASK_HEIGHT
-
-// adjust angle for cos table lookup.  cos = right angle further
-// on in sin table, circle = 512 degrees...
-
-#define adjust(angle) ((angle + 128) & 0x1ff)
-#define size(array) ((sizeof(array) / sizeof(array[0])))
-
-// -----------------------------------------------------------------------
-// typedefs...
-
-typedef struct                  // a point in 3d space
-{
-  char x, y, z;
-}xyz;
-
-typedef struct                  // a point in 2d space
-{
-  int x, y;
-}xy;
-
-typedef struct
-{
-  int counter;                  // count down to next speed/shape change
-  int reset;                    // initial value of counter
-  int *ptr;                     // pointer to item to modify
-  int delta;                    // ammount to change item by
-  int upper;                    // upper limit for item
-  int lower;                    // lower limit for item
-}modifier;
-
-// -----------------------------------------------------------------------
-// object structures...
-
-xyz cube[]=
-{
-  {-35,-35,-35},{-35,-35,-15},{-35,-35, 05},{-35,-35, 25},{-35,-35, 45},
-  {-35,-15,-35},{-35,-15,-15},{-35,-15, 05},{-35,-15, 25},{-35,-15, 45},
-  {-35, 05,-35},{-35, 05,-15},{-35, 05, 05},{-35, 05, 25},{-35, 05, 45},
-  {-35, 25,-35},{-35, 25,-15},{-35, 25, 05},{-35, 25, 25},{-35, 25, 45},
-  {-35, 45,-35},{-35, 45,-15},{-35, 45, 05},{-35, 45, 25},{-35, 45, 45},
-  {-15,-35,-35},{-15,-35,-15},{-15,-35, 05},{-15,-35, 25},{-15,-35, 45},
-  {-15,-15,-35},{-15,-15,-15},{-15,-15, 05},{-15,-15, 25},{-15,-15, 45},
-  {-15, 05,-35},{-15, 05,-15},{-15, 05, 05},{-15, 05, 25},{-15, 05, 45},
-  {-15, 25,-35},{-15, 25,-15},{-15, 25, 05},{-15, 25, 25},{-15, 25, 45},
-  {-15, 45,-35},{-15, 45,-15},{-15, 45, 05},{-15, 45, 25},{-15, 45, 45},
-  { 05,-35,-35},{ 05,-35,-15},{ 05,-35, 05},{ 05,-35, 25},{ 05,-35, 45},
-  { 05,-15,-35},{ 05,-15,-15},{ 05,-15, 05},{ 05,-15, 25},{ 05,-15, 45},
-  { 05, 05,-35},{ 05, 05,-15},{ 05, 05, 05},{ 05, 05, 25},{ 05, 05, 45},
-  { 05, 25,-35},{ 05, 25,-15},{ 05, 25, 05},{ 05, 25, 25},{ 05, 25, 45},
-  { 05, 45,-35},{ 05, 45,-15},{ 05, 45, 05},{ 05, 45, 25},{ 05, 45, 45},
-  { 25,-35,-35},{ 25,-35,-15},{ 25,-35, 05},{ 25,-35, 25},{ 25,-35, 45},
-  { 25,-15,-35},{ 25,-15,-15},{ 25,-15, 05},{ 25,-15, 25},{ 25,-15, 45},
-  { 25, 05,-35},{ 25, 05,-15},{ 25, 05, 05},{ 25, 05, 25},{ 25, 05, 45},
-  { 25, 25,-35},{ 25, 25,-15},{ 25, 25, 05},{ 25, 25, 25},{ 25, 25, 45},
-  { 25, 45,-35},{ 25, 45,-15},{ 25, 45, 05},{ 25, 45, 25},{ 25, 45, 45},
-  { 45,-35,-35},{ 45,-35,-15},{ 45,-35, 05},{ 45,-35, 25},{ 45,-35, 45},
-  { 45,-15,-35},{ 45,-15,-15},{ 45,-15, 05},{ 45,-15, 25},{ 45,-15, 45},
-  { 45, 05,-35},{ 45, 05,-15},{ 45, 05, 05},{ 45, 05, 25},{ 45, 05, 45},
-  { 45, 25,-35},{ 45, 25,-15},{ 45, 25, 05},{ 45, 25, 25},{ 45, 25, 45},
-  { 45, 45,-35},{ 45, 45,-15},{ 45, 45, 05},{ 45, 45, 25},{ 45, 45, 45}
-};
-
-xyz star[]=
-{
-  {-35,-35, 05},{-35,-15, 05},{-35, 05, 05},{-35, 25, 05},{-35, 45, 05},
-  {-15,-35, 05},{-15,-15, 05},{-15, 05, 05},{-15, 25, 05},{-15, 45, 05},
-  { 05,-35, 05},{ 05,-15, 05},{ 05, 05, 05},{ 05, 25, 05},{ 05, 45, 05},
-  { 25,-35, 05},{ 25,-15, 05},{ 25, 05, 05},{ 25, 25, 05},{ 25, 45, 05},
-  { 45,-35, 05},{ 45,-15, 05},{ 45, 05, 05},{ 45, 25, 05},{ 45, 45, 05},
-  { 05,-35,-35},{ 05,-35,-15},{ 05,-35, 25},{ 05,-35, 45},{-35, 05,-35},
-  { 05,-15,-35},{ 05,-15,-15},{ 05,-15, 25},{ 05,-15, 45},{-15, 05,-35},
-  { 05, 05,-35},{ 05, 05,-15},{ 05, 05, 25},{ 05, 05, 45},{ 05, 05,-35},
-  { 05, 25,-35},{ 05, 25,-15},{ 05, 25, 25},{ 05, 25, 45},{ 25, 05,-35},
-  { 05, 45,-35},{ 05, 45,-15},{ 05, 45, 25},{ 05, 45, 45},{ 45, 05,-35},
-  {-35, 05,-15},{-35, 05, 25},{-35, 05, 45},{-15, 05,-15},{-15, 05, 25},
-  {-15, 05, 45},{ 05, 05,-15},{ 05, 05, 25},{ 05, 05, 45},{ 25, 05,-15},
-  { 25, 05, 25},{ 25, 05, 45},{ 45, 05,-15},{ 45, 05, 25},{ 45, 05, 45}
-};
-
-xyz dots[]=
-{
-  {-35,-35,-35},{-35,-35, 45},{ 45, 45,-35},{ 45, 45, 45},{ 5,-35, 5},
-  {  5, 45,  5}
-};
-
-xyz square[]=
-{
-  {-35,-35,-35},{-35,-15,-35},{-35, 05,-35},{-35, 25,-35},{-35, 45,-35},
-  {-15,-35,-35},{-15,-15,-35},{-15, 05,-35},{-15, 25,-35},{-15, 45,-35},
-  { 05,-35,-35},{ 05,-15,-35},{ 05, 05,-35},{ 05, 25,-35},{ 05, 45,-35},
-  { 25,-35,-35},{ 25,-15,-35},{ 25, 05,-35},{ 25, 25,-35},{ 25, 45,-35},
-  { 45,-35,-35},{ 45,-15,-35},{ 45, 05,-35},{ 45, 25,-35},{ 45, 45,-35}
-};
-
-xyz cross[]=
-{
-  {0x00,0x00,0x19}, {0x00,0x05,0x19}, {0x00,0x14,0x01}, {0x00,0x32,0x00},
-  {0x00,0x7D,0x00}, {0x00,0xC9,0x00}, {0x01,0x5F,0x01}, {0x01,0xAB,0x01},
-  {0x01,0xF6,0x01}, {0x02,0x41,0x02}, {0x02,0x8D,0x02}, {0x02,0xD8,0x02},
-  {0x03,0x23,0x03}, {0x03,0x05,0x04}, {0x03,0x6F,0x03}, {0x03,0xBA,0x03},
-  {0x04,0x51,0x04}, {0x04,0x9C,0x04}, {0x04,0xE7,0x04}, {0x05,0x13,0x06},
-  {0x05,0x32,0x05}, {0x05,0x7D,0x05}, {0x05,0xC8,0x05}, {0x06,0x5E,0x06},
-  {0x06,0xA9,0x06}, {0x06,0xF4,0x06}, {0x07,0x3F,0x07}, {0x07,0x8A,0x07},
-  {0x07,0xD5,0x07}, {0x08,0x00,0x09}, {0x08,0x20,0x08}, {0x08,0x6B,0x08},
-  {0x08,0xB5,0x08}, {0x09,0x4B,0x09}, {0x09,0x95,0x09}, {0x09,0xE0,0x09},
-  {0x0A,0x09,0x0B}, {0x0A,0x2A,0x0A}, {0x0A,0x75,0x0A}, {0x0A,0xBF,0x0A},
-  {0x0B,0x54,0x0B}, {0x0D,0x07,0x26}, {0x0F,0x02,0x28}, {0x19,0x09,0x32},
-  {0x1E,0x04,0x37}, {0x22,0x0B,0x3B}, {0x2C,0x06,0x45}, {0x2D,0x01,0x46},
-  {0x39,0x08,0x52}, {0x3D,0x03,0x56}, {0x43,0x0A,0x5C}, {0x4B,0x00,0x64},
-  {0x4B,0x05,0x64}, {0x58,0x07,0x71}, {0x5B,0x02,0x74}, {0x64,0x09,0x7C},
-  {0x84,0x08,0x9C}, {0x88,0x03,0xA1}, {0x8D,0x0A,0xA6}, {0x96,0x00,0xAF},
-  {0x96,0x05,0xAF}, {0xA3,0x07,0xBC}, {0xA6,0x02,0xBF}, {0xAE,0x09,0xC7},
-  {0xB5,0x04,0xCE}, {0xC2,0x06,0xDB}, {0xC4,0x01,0xDD}, {0xCE,0x08,0xE7},
-  {0xD3,0x03,0xEC}, {0xD8,0x0A,0xF1}, {0xE1,0x05,0xFA}, {0xE2,0x00,0xFB},
-  {0xEE,0x07,0x07}, {0xF1,0x02,0x0A}, {0xF9,0x09,0x11}
-};
-
-// -----------------------------------------------------------------------
-// object lists...
-
-xyz *obj_list[]=                // pointers to each object
-{
-  (xyz *) &cube,
-  (xyz *) &dots,
-  (xyz *) &star,
-  (xyz *) &square,
-  (xyz *) &cross
-};
-
-int point_counts[]=             // number of points in each object
-{
-  size(cube),
-  size(dots),
-  size(star),
-  size(square),
-  size(cross)
-};
-
-#define NUM_OBJECTS size(obj_list)
-
-// -----------------------------------------------------------------------
-// i love global variables :)
-
-// I hate 40 page functions with 50 levels if,and and but loop nesting
-
-char *ProgName = NULL;
-char *Version = "0.2 Beta";
-
-int x_angle = 0;                // angles of rotation in each axis
-int y_angle = 0;
-int z_angle = 0;
-
-short cos_x = 0;                // trig stuff
-short cos_y = 0;
-short cos_z = 0;
-short sin_x = 0;
-short sin_y = 0;
-short sin_z = 0;
-
-int x_off = 30;                 // world space position of object
-int y_off = 30;
-int z_off = 150;
-
-int delta_x = 1;                // rotational speed of object
-int delta_y = 1;
-int delta_z = 1;
-
-int itters = 1;                 // number of frames till shape change
-int num_points = 0;             // number of points in object
-int obj_number = 0;
-xyz *object = NULL;             // pointer to current object
-
-xy trail_1[125];                // frame histories
-xy trail_2[125];
-xy trail_3[125];
-
-char *p_buff;                   // addr of pel buffer ( see draw_point() )
-
-// -----------------------------------------------------------------------
-//
-
-modifier w1 =                   // changes x rotation speed
-{
-   30,                          // count down counter
-   34,                          // reset value for countdown counter
-   &delta_x,                    // item to modify on count = 0
-   2,                           // ammount to add to item
-   8,                           // upper limit for item
-   0,                           // lower limit for item
-};
-
-modifier w2 =                   // changes y rotation speed
-{
-  20, 20, &delta_y, -1, 6, 0
-};
-
-modifier w3 =                   // changes z rotation speed
-{
-  30, 30, &delta_z, 1, 7, 0
-};
-
-modifier w4 =                   // zooms object in / out of window
-{
-  4, 4, &z_off, -2, 200, 90
-};
-
-// modifier w5 =                // these two do some funky things with
-// {                            // object space but they tend to make
-//   10,10,&x_off,-3,30,10      // the objects small and look further
-// };                           // away so im not using them
-//
-// modifier w6 =                // but go ahead and take a look at what
-// {                            // they do :)
-//   10,30,&y_off,-5,30,10
-// };
-
-// -----------------------------------------------------------------------
-// draw a point at x/y in specified colour
-
-void draw_point(int x, int y, int c)
-{
-  char *p;
-
-  if(x != -1)                   // is point clipped ?
-  {
-    c <<= 1;                    // adjust c for xpm lookup of colour
-    p = p_buff + (x + (MASK_WIDTH * y));
-
-    if (*p > c)                 // if pel at *p is higher its darker so
-    {                           // its ok to overwrite it
-      *p = c;                   // remember pel colour at this position
-      copyXPMArea(c, 65, PEL_SIZE, PEL_SIZE, x, y);
-    }
-  }
-}
-
-// -----------------------------------------------------------------------
-// Erase previously drawn point (draw again in BLACK!!!)
-
-void erase_point(int x, int y)
-{
-  if(x != -1)                   // is point clipped?
-  {
-    copyXPMArea(34, 65, PEL_SIZE, PEL_SIZE, x, y);
-  }
-}
-
-// -----------------------------------------------------------------------
-// Process pending X events
-
-void do_pending(void)
-{
-  XEvent Event;
-
-  while (XPending(display))             // for all pending events do...
-  {
-    XNextEvent(display, &Event);        // get event type
-
-    switch (Event.type)                 // we are only interested in...
-    {
-      case Expose:                      // expose events and...
-        RedrawWindow();
-      break;
-
-      case DestroyNotify:               // our own "pending" demise :)
-        XCloseDisplay(display);
-        exit(0);
-      break;
-    }
-  }
-}
-
-// -----------------------------------------------------------------------
-// clear frame history buffers
-
-void clear_histories(void)
-{
-  int i = MAX_POINTS;
-
-  while (i--)                           // for loops suck
-  {
-    trail_1[i].x = trail_1[i].y = -1;   // -1 = invalid coordinate
-    trail_2[i].x = trail_2[i].y = -1;   // draw_point() ignores -1
-    trail_3[i].x = trail_3[i].y = -1;
-  }
-}
-
-// -----------------------------------------------------------------------
-// erase points that are 3 frames old. shift frame histories
-
-void do_trails(void)
-{
-  int i = MAX_POINTS;
-
-  while (i--)
-  {
-    erase_point(trail_3[i].x, trail_3[i].y);
-
-    trail_3[i].x = trail_2[i].x;        // shift points within history
-    trail_2[i].x = trail_1[i].x;        //  buffers
-    trail_1[i].x = -1;
-
-    trail_3[i].y = trail_2[i].y;
-    trail_2[i].y = trail_1[i].y;
-    trail_1[i].y = -1;
-  }
-}
-
-// -----------------------------------------------------------------------
-// pre calculate sin and cosine values for x y and z angles of rotation
-
-void sincos(void)
-{
-  sin_x = sin_tab[x_angle];
-  sin_y = sin_tab[y_angle];
-  sin_z = sin_tab[z_angle];
-
-  cos_x = sin_tab[adjust(x_angle)];
-  cos_y = sin_tab[adjust(y_angle)];
-  cos_z = sin_tab[adjust(z_angle)];
-}
-
-// -----------------------------------------------------------------------
-// roatate object about x y and z axis (in object space)
-
-void rotate(int *px, int *py, int *pz)
-{
-  int tx, ty, tz;                       // temp store
-
-  if (x_angle)                          // rotate point about x axis...
-  {
-    ty = (*py * cos_x) - (*pz * sin_x);
-    tz = (*py * sin_x) + (*pz * cos_x);
-
-    *py = (ty >> 14);                   // sin table is scaled up so we
-    *pz = (tz >> 14);                   // must re scale all results down
-  }
-
-  if (y_angle)                          // rotate point about y axis
-  {
-    tx = (*px * cos_y) - (*pz * sin_y);
-    tz = (*px * sin_y) + (*pz * cos_y);
-
-    *px = (tx >> 14);
-    *pz = (tz >> 14);
-  }
-
-  if (z_angle)                          // rotate point about z axis
-  {
-    tx = (*px * cos_z) - (*py * sin_z);
-    ty = (*px * sin_z) + (*py * cos_z);
-
-    *px = (tx >> 14);
-    *py = (ty >> 14);
-  }
-}
-
-// -----------------------------------------------------------------------
-// project point in 3d space onto plane in 2d space
-
-void project(int px, int py, int pz, int *x, int *y)
-{
-  int tx, ty;                   // temp store...
-
-  *x = *y = -1;                 // assume point is clipped
-
-  if ((z_off + pz - 5) < 0)
-  {
-    return;
-  }
-
-  ty = ((y_off * py) / (z_off + pz)) + 30;
-
-  if ((ty > 5) && (ty < 59))
-  {
-    tx = ((x_off * px) / (z_off + pz)) + 30;
-
-    if ((tx > 5) && (tx < 59))
-    {
-      *x = tx;
-      *y = ty;
-    }
-  }
-}
-
-// -----------------------------------------------------------------------
-// draw one frame of object...
-
-void do_frame(void)
-{
-  int px, py, pz;               // 3d coordinates to rotate
-  int x, y, c;                  // 2d coordiantes of point and colour
-  int i = num_points;           // loop counter
-  int j = MASK_SIZE;
-  char pel_buff[MASK_SIZE];     // frame buffer ( see draw_point() )
-  p_buff = &pel_buff[0];
-
-  while (j--)                   // erase pel buffer
-  {
-    pel_buff[j] = 32;
-  }
-
-  do_trails();                  // clear pels that are 3 frames old
-  sincos();                     // calculate all sin/cos values
-
-  while(i--)
-  {
-    px = object[i].x;           // collect point from object
-    py = object[i].y;
-    pz = object[i].z;
-
-    rotate(&px, &py, &pz);      // rotate this point about x/y and z axis
-    project(px, py, pz, &x, &y); // projection = convert xyz to xy
-
-    trail_1[i].x = x;           // store frame history for all pels
-    trail_1[i].y = y;           //  of this frame
-
-    c = (((z_off - 90) / 14) & 15) < 1;
-    c -= ((-pz / 5) - 10);
-
-    draw_point(x, y, c);
-  }
-}
-
-// -----------------------------------------------------------------------
-// adjust rotational speeds / distance between min and max for each
-
-void modify(modifier *mod)
-{
-  mod->counter--;
-
-  if (!mod->counter)
-  {
-    mod->counter = mod->reset;
-
-    *mod->ptr += mod->delta;
-
-    if (*mod->ptr >= mod->upper || *mod->ptr <= mod->lower)
-    {
-      mod->delta = -(mod->delta);
-    }
-  }
-}
-
-// -----------------------------------------------------------------------
-// do the above on each of the 4 modifiers
-
-void do_deltas(void)
-{
-  modify(&w1);                  // modify x rotational speed
-  modify(&w2);                  // modify y rotational speed
-  modify(&w3);                  // modify z rotational speed
-  modify(&w4);                  // zoom object in and out
-//  modify(&w5);		  // not used because they make objects
-//  modify(&w6);		  // stay in the distance
-}
-
-// -----------------------------------------------------------------------
-// adjust x y and z angles of ritation for next frame
-
-void change_angles(void)
-{
-  x_angle += delta_x;
-  y_angle += delta_y;
-  z_angle += delta_z;
-
-  x_angle &= 0x1ff;
-  y_angle &= 0x1ff;
-  z_angle &= 0x1ff;
-}
-
-// -----------------------------------------------------------------------
-
-void do_demo(void)
-{
-  while (1)                     // only way out is to die
-  {
-    while(--itters)             // countdown to next shape change...
-    {                           //   shape change FORCED on entry
-      change_angles();          // adjust angles of rotation
-      do_frame();               // draw object
-      do_deltas();              // modify rotation speeds etc
-
-      RedrawWindow();           // lets see what weve drawn...
-      do_pending();             // quit / expose
-      usleep(50000);            // erm... coders never sleep :)
-    }
-
-    itters = 2500;              // should randomise this
-
-    object = obj_list[obj_number];
-    num_points = point_counts[obj_number++];
-
-    if (obj_number == NUM_OBJECTS)
-    {
-      obj_number = 0;
-    }
-  }
-}
-
-// -----------------------------------------------------------------------
-// display version info and credits
-
-void credits(void)
-{
-  printf("\n");
-  printf("WM-Dots DEMO? version %s\n",Version);
-  printf("    by Mark I Manning IV\n\n");
-  printf("greets to follow soon....\n\n");
-}
-
-// sgore for helping me get star office :)
-
-// -----------------------------------------------------------------------
-// scan command line args
-
-void scan_args(int argc,char **argv)
-{
-  int i;
-
-  for (i = 0; i < argc; i++)
-  {
-    char *arg = argv[i];
-
-    if (*arg == '-')
-    {
-      switch (arg[1])
-      {
-        case 'v':
-          credits();
-          exit(0);
-        break;
-
-        default:
-          ;
-        break;
-      }
-    }
-  }
-}
-
-// -----------------------------------------------------------------------
-// main at BOTTOM of source so we have no EVIL forward refs!!
-
-int main(int argc, char *argv[])
-{
-  char mask[MASK_SIZE];
-
-  ProgName = argv[0];
-  if (strlen(ProgName) >= 5)
-  {
-     ProgName += (strlen(ProgName) - 5);
-  }
-
-  scan_args(argc, argv);
-
-  createXBMfromXPM(mask, master_xpm, MASK_WIDTH, MASK_HEIGHT);
-  openXwindow(argc, argv, master_xpm, mask, MASK_WIDTH, MASK_HEIGHT);
-
-  clear_histories();            // clear frame history buffers
-  do_demo();                    // main = short and sweet :)
-
-  return(0);                    // never gets executed but lets get rid
-}                               //  of that stupid warning :)
-
-// =======================================================================
-- 
2.7.4


-- 
To unsubscribe, send mail to [email protected].
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.