	opt l-,d+,s-,n+
	plen 72
	llen 80
	ttl "Kreis\Ellipse"
	
* INCLUDE-Files laden

	include df0:include/exec/exec_lib.i
	include df0:include/math/mathffp_lib.i
	include df0:include/intuition/intuition_lib.i
	include df0:include/graphics/graphics_lib.i
	include df0:include/startup

* MACRO-Definitionen		
	

* Struktur für Windows

WINDOW       macro							
             dc.w       \1      ;Linke Ecke
             dc.w       \2	;Obere Ecke
             dc.w       \3	;Breite
             dc.w       \4	;Hoehe
             dc.b       0,1	;Farben
             dc.l       \5	;Flags für Events
             dc.l   $1006	;Window Flags
             dc.l       \6      ;Zeiger auf erstes Gadget
             dc.l       0       ;Check Mark
             dc.l       \7      ;Windowname						
\8           dc.l       0	;Screenpointer
             dc.l       0	;Bit Map
             dc.w      \3	;Mindest-Breite
             dc.w      \4 	;Mindest-Hoehe
             dc.w      \3	;Maximale Breite
             dc.w      \4	;Maximale Hoehe
             dc.w      15	;Window-Typ
	     endm

* Struktur für Screens

SCREEN		macro  
	   dc.w       0		;linke Ecke
	   dc.w       0		;obere Ecke
	   dc.w       \1	;Breite
	   dc.w       \2	;Höhe
	   dc.w       2		;Tiefe (Bitplanes)
	   dc.b       2,3	;Farben
	   dc.w       \3	;Modus
	   dc.w      15		;Screentyp
	   dc.l       0		;Zeichensatz
	   dc.l       \4	;Screentitel
	   dc.l       0		;Gadgets
	   dc.l       0		;Bitmap
		endm



begin	lea intname,a1		;Intuition-Library öffnen
	clr.l d0
	CALLEXEC OpenLibrary
	tst.l d0			
	beq fini2
	move.l d0,_IntuitionBase

	lea grafname,a1		;Grafik-Library öffnen
	clr.l d0
	CALLEXEC OpenLibrary
	tst.l d0
	beq fini3
	move.l d0,_GfxBase

	lea ffpname,a1		;Mathematik-Library öffnen
	clr.l d0
	CALLEXEC OpenLibrary
	tst.l d0
	beq fini4
	move.l d0,_MathBase


	lea screen_defs,a0		;Screen öffnen
	CALLINT OpenScreen
	move.l d0,screenpointer		;Pointer für
	move.l d0,point1		;Window

	lea plotwindow,a0		;Window öffnen
	CALLINT OpenWindow
	move.l d0,windowpointer


	move.l screenpointer,a0		;Adresse Bitmap
	move.l $58(a0),a0		;holen
	move.l $08(a0),a4


	move.l #255,d7			;x-Radius
	move.l #107,d6			;y-Radius
	move.l #320,d5			;x-Mittelpunkt
	move.l #128,d4			;y-Mittelpunkt

	move.l #26,zaehler
	clr.b modus
	clr.l startwinkel		;Startwinkel = 0 Grad
	move.l #$C90FD943,endwinkel	;Endwinkel =1.999 * PI

l1	move.l startwinkel,d2
	move.l endwinkel,d3
	bsr ellipse			;Ellipse setzen
	subi.l #10,d7
	subq.l #1,zaehler
	bne l1

	move.l #255,d7			;x-Radius
	move.l #27,zaehler

l2	move.l startwinkel,d2
	move.l endwinkel,d3
	bsr ellipse			;Ellipse setzen
	subq.l #4,d6
	subq.l #1,zaehler
	bne l2


	move.l #$FFFFF,d0		;Warteschleife
loop	subq.l #1,d0
	bne loop


	move.l windowpointer,a0		;Window schliessen
	CALLINT CloseWindow	
				
	move.l screenpointer,a0		;Screen schliessen
	CALLINT CloseScreen

fini4	move.l _MathBase,a1
	CALLEXEC CloseLibrary
fini3	move.l _GfxBase,a1
	CALLEXEC CloseLibrary
fini2	move.l _IntuitionBase,a1
	CALLEXEC CloseLibrary
fini1	rts

	cnop 0,2

zaehler dc.l 0		

_IntuitionBase   dc.l 0
_GfxBase	 dc.l 0
_MathBase	 dc.l 0
					
grafname  	dc.b "graphics.library",0
		cnop 0,2
intname  	dc.b "intuition.library",0
		cnop 0,2
ffpname 	dc.b "mathffp.library",0
		cnop 0,2


* Strukturen
* a) SCREENS

screen_defs	SCREEN 640,400,$8000,plottitel

plottitel   dc.b "Funktion plotten",0
	cnop 0,4

screenpointer  dc.l 0
  
* b) WINDOWS

plotwindow   WINDOW 0,0,640,256,$200,0,plotwindowname,point1

plotwindowname  dc.b "Kreis/Ellipsendarstellung",0
	cnop 0,4

windowpointer dc.l 0
		even	


*Ellipsenroutine*

*Üebergabe :         D7: X-Radius           D6:Y-Radius
*(alle word) 	     D5: X-Mittelpunkt      D4: Y-Mittelpunkt
*	             D2: Startwinkel (FFP)  D3: Endwinkel  (FFP)
*		     A4: Zeiger auf Bitmap
* 		     modus : 0=setzen, 1=invertieren, 255=löschen


ellipse		move.l d2,d0
		bsr winkel		;Startpunktberechnung
		move.b d2,startqua	;Startquadrant
		move.w d0,startpunkt	;Startpunkt
		move.l d3,d0
		bsr winkel		;Endpunktberechnung
		move.b d2,endqua	;Endquadrant
		move.w d0,endpunkt	;Endpunkt
		move.b startqua,d0
		cmpi.b #1,d0		;erster Quadrant ?
		bne ausschnitt		;Nein, nur Ausschnitt
		move.w startpunkt,d0	;Stratpunkt = 0 ?
		bne ausschnitt		;Nein, nur Ausschnitt
		move.b endqua,d0
		cmpi.b #4,d0		;letzter Quadrant ?
		bne ausschnitt		;Nein, nur Ausschnitt
		move.w endpunkt,d0	
		cmpi.w #390,d0		;Endpunkt = 390 ?
		bne ausschnitt		;Nein, nur Ausschnitt

		
* Ganzen Kreis oder Ellipse zeichnen (ca. 2.5 - 8 * schneller als DrawEllipse)


vollellipse     move.w #391,d3		;Zähler setzen
		move.w #1,d2
		lea cos-1,a5		;Zeiger auf SIN/COS- und Bit-
		lea bittab,a2		;Tabbellen
elloop	 	clr.l d0
		clr.l d1
		move.b (a5,d3.w),d0	;Tabellenwert
		mulu d7,d0		;* x-Radius
		divu #255,d0		;/ 255
		move.w d0,xoff		;= x-Offset
		move.b (a5,d2.w),d1	;Tabellenwert
		mulu d6,d1		;* y-Radius
		divu #255,d1		;/ 255
		move.w d1,yoff		;= y-Offset
		add.w d5,d0		;Mittelpunkts-
		move.w d0,xkoord	;Koordinaten x
		cmpi.w #639,d0		;hinzuaddieren
		bge notpunkt1		;auf Bereichsüberschreitung
		add.w d4,d1		;prüfen
		move.w d1,ykoord
		cmpi.w #255,d1
		bge notpunkt1		;Das gleiche mit y
		bsr plot		;Punkt 1 = xm+xoff/ym+yoff
notpunkt1	move.w xkoord,d0
		cmpi.w #639,d0
		bge notpunkt2
		move.w d4,d1		;wie oben für Punkt 2
		sub.w yoff,d1
		move.w d1,ykoord1
		blt notpunkt2
		bsr plot		;Punkt 2 = xm+xoff/ym-yoff
notpunkt2	move.w d5,d0
		sub.w xoff,d0
		move.w d0,xkoord1
		blt notpunkt3		;wie oben für Punkt 3
		move.w ykoord,d1
		cmpi.w #255,d1
		bge notpunkt3
		bsr plot		;Punkt 3 = xm-xoff/ym+yoff
notpunkt3	move.w xkoord1,d0
		blt notpunkt4
		move.w ykoord1,d1	;wie oben für Punkt 4
		blt notpunkt4		
		bsr plot		;Punkt 4 = xm-xoff/ym-yoff
notpunkt4       addq.w #1,d2
		subq.w #1,d3
		bne elloop
		rts


* Kreis- oder Ellipsenteil zeichnen

ausschnitt	move.l #391,d0		;Tabellen mit Tabellenwerten
		moveq.l #1,d1		;*Radius/255 aufbauen
		clr.l d2
		lea cos-1,a2
		lea austab1,a5
		lea austab2,a6
ausloop1	clr.l d3
		move.b (a2,d0.w),d3
		mulu d7,d3
		divu #255,d3
		move.w d3,(a5,d2.w)
		clr.l d3
		move.b (a2,d1.w),d3
		mulu d6,d3
		divu #255,d3
		move.w d3,(a6,d2.w)
		addq.w #1,d1
		addq.w #2,d2
		subq.w #1,d0
		bne ausloop1
		lea bittab,a2
		move.w endpunkt,d0	;Wenn Endpunkt = 0 oder 1, dann
		cmpi.w #1,d0
		bhi weiter1		;2 setzen, da sonst Fehler 
		move.w #2,endpunkt
weiter1		clr.l d0
		clr.l d1
		move.b startqua,d0
		subi.b #1,d0
		mulu #16,d0		;(Startquadrant-1) * 16
		move.b endqua,d1	;plus (Endquadrant-1) * 4
		subi.b #1,d1
		mulu #4,d1	
		add.b d1,d0
		addi.l #sprung,d0	;Tabellenstart
		move.l d0,a0		;Tabellenadresse
		move.l (a0),a0		;Startadresse auslesen	
		jmp (a0)		;und anspringen

sprung		dc.l s1e1,s1e2,s1e3,s1e4
		dc.l s2e1,s2e2,s2e3,s2e4
		dc.l s3e1,s3e2,s3e3,s3e4
		dc.l s4e1,s4e2,s4e3,s4e4

		cnop 0,4

austab1		ds.w 392
austab2		ds.w 392



* Start im 1., Ende im 1. Quadranten

s1e1		move.w startpunkt,d0
		cmp.w endpunkt,d0
		blt s1e11
		move.w #391,d1
		bsr erster
		move.w #1,d0
		bra s2e11
s1e11		move.w endpunkt,d1
		bra erster


* Start im 1., Ende im 2. Quadranten

s1e2		move.w startpunkt,d0
s1e22		move.w #391,d1
		bsr erster
		move.w #1,d0
		move.w endpunkt,d1
		bra zweiter

* Start im 1., Ende im 3. Quadranten

s1e3		move.w startpunkt,d0
s1e333		move.w #391,d1
		bsr erster
		move.w #1,d0
s1e33		move.w #391,d1
		bsr zweiter
		move.w #1,d0
		move.w endpunkt,d1
		bra dritter


* Start im 1., Ende im 4. Quadranten

s1e4		move.w startpunkt,d0
s1e4444		move.w #391,d1
		bsr erster
		move.w #1,d0
s1e44		move.w #391,d1
		bsr zweiter
		move.w #1,d0
s1e444		move.w #391,d1
		bsr dritter
		move.w #1,d0
		move.w endpunkt,d1
		bra vierter


* Start im 2., Ende im 1. Quadranten

s2e1		move.w startpunkt,d0
s2e11		move.w #391,d1
		bsr zweiter
		move.w #1,d0
s2e111		move.w #391,d1
		bsr dritter
		move.w #1,d0
s2e1111		move.w #391,d1
		bsr vierter
		move.w #1,d0
		move.w endpunkt,d1
		bra erster


* Start im 2., Ende im 2. Quadranten

s2e2		move.w startpunkt,d0
		cmp.w endpunkt,d0
		blt s2e22
		move.w #391,d1
		bsr zweiter
		move.w #1,d0
		bra s3e22
s2e22		move.w endpunkt,d1
		bra zweiter


* Start im 2., Ende im 3. Quadranten

s2e3		move.w startpunkt,d0
		bra s1e33



* Start im 2., Ende im 4. Quadranten

s2e4		move.w startpunkt,d0
		bra s1e44



* Start im 3., Ende im 1. Quadranten

s3e1		move.w startpunkt,d0
		bra s2e111



* Start im 3., Ende im 2. Quadranten

s3e2		move.w startpunkt,d0
s3e22		move.w #391,d1
		bsr dritter
		move.w #1,d0
s3e222		move.w #391,d1
		bsr vierter
		move.w #1,d0
		bra s1e22


* Start im 3., Ende im 3. Quadranten

s3e3		move.w startpunkt,d0
		cmp.w endpunkt,d0
		blt s3e33
		move.w #391,d1
		bsr dritter
		move.w #1,d0
		bra s4e33
s3e33		move.w endpunkt,d1
		bra dritter


* Start im 3., Ende im 4. Quadranten

s3e4		move.w startpunkt,d0
		bra s1e444


* Start im 4., Ende im 1. Quadranten

s4e1		move.w startpunkt,d0
		bra s2e1111


* Start im 4., Ende im 2. Quadranten

s4e2		move.w startpunkt,d0
		bra s3e222



* Start im 4., Ende im 3. Quadranten

s4e3		move.w startpunkt,d0
s4e33		move.w #391,d1
		bsr vierter
		move.w #1,d0
		bra s1e333


* Start im 4., Ende im 4. Quadranten

s4e4		move.w startpunkt,d0
		cmp.w endpunkt,d0
		blt s4e44
		move.w #391,d1
		bsr vierter
		move.w #1,d0
		bra s1e4444
s4e44		move.w endpunkt,d1
		bra vierter

		

* Ersten Quadranten zeichnen *

erster		move.w #391,d2		;Zähler setzen und 
		sub.w d0,d2
		move.w d2,zaehl1
		move.w #391,d2		;invertieren
		sub.w d1,d2
		move.w d2,zaehl2
loopq1		move.w zaehl2,d2
		lsl #1,d2		;Zähler mal 2
		move.w (a5,d2.w),d0
		add.w d5,d0
		cmpi.w #639,d0		;x = xr + xoff
		bge noeins
		move.w (a6,d2.w),d3
		move.w d4,d1
		sub.w d3,d1		;y = yr - yoff
		blt noeins
		bsr plot
noeins		addq.w #1,zaehl2
		move.w zaehl1,d0
		cmp.w zaehl2,d0
		bne loopq1
		rts

		
* Zweiten Quadranten zeichnen *

zweiter		move.w d1,zaehl1	;Zähler setzen
		move.w d0,zaehl2
loopq2		move.w zaehl2,d2
		lsl #1,d2		;Zähler mal 2
		move.w (a5,d2.w),d0
		add.w d5,d0
		cmpi.w #639,d0		;x = xr + xoff
		bge nozwei
		move.w (a6,d2.w),d1
		add.w d4,d1		;y = yr + yoff
		cmpi.w #255,d1
		bge nozwei
		bsr plot
nozwei		addq.w #1,zaehl2
		move.w zaehl1,d0
		cmp.w zaehl2,d0
		bne loopq2
		rts


* Dritten Quadranten zeichnen *

dritter		move.w #391,d2		;Zähler setzen und 
		sub.w d0,d2
		move.w d2,zaehl1
		move.w #391,d2		;invertieren
		sub.w d1,d2
		move.w d2,zaehl2
loopq3		move.w zaehl2,d2
		lsl #1,d2		;Zähler mal 2
		move.w (a5,d2.w),d3
		move.w d5,d0
		sub.w d3,d0		;x = xr - xoff
		blt nodrei
		move.w (a6,d2.w),d1
		add.w d4,d1		;y = yr + yoff
		cmpi.w #255,d1
		bge nodrei
		bsr plot
nodrei		addq.w #1,zaehl2
		move.w zaehl1,d0
		cmp.w zaehl2,d0
		bne loopq3
		rts


* Vierten Quadranten zeichnen *

vierter		move.w d1,zaehl1	;Zähler setzen
		move.w d0,zaehl2
loopq4		move.w zaehl2,d2
		lsl #1,d2		;Zähler mal 2
		move.w (a5,d2.w),d3
		move.w d5,d0
		sub.w d3,d0
		blt novier
		move.w (a6,d2.w),d3
		move.w d4,d1
		sub.w d3,d1		;y = yr - yoff
		blt novier
		bsr plot
novier		addq.w #1,zaehl2
		move.w zaehl1,d0
		cmp.w zaehl2,d0
		bne loopq4
		rts


xkoord		dc.w 0
xkoord1		dc.w 0
ykoord		dc.w 0
ykoord1		dc.w 0
xoff		dc.w 0
yoff		dc.w 0
startqua	dc.b 0
		even
endqua		dc.b 0
		even
startpunkt	dc.w 0
endpunkt	dc.w 0
zaehl1		dc.w 0
zaehl2		dc.w 0
modus		dc.b 0
		even
startwinkel	dc.l 0
endwinkel	dc.l 0



* Quadranten- und Punktberechnung

winkel		move.l d0,a5		;merken
		move.l #$80000043,d1	;Ausdruck * 4
		CALLFFP SPMul		
		move.l #$C90FDA43,d1	;durch 2*PI dividieren
		CALLFFP SPDiv
		CALLFFP SPFix		;In Integer wandeln
		move.l d0,a3		;merken
		addi.b #1,d0		;Plus 1
		move.b d0,d2		;merken
		move.l a3,d0		;Quadrant-1 ins FFP-Format
		CALLFFP SPFlt		;wandeln
		move.l #$C90FDA41,d1	;mit PI/2 multiplizieren
		CALLFFP SPMul
		move.l d0,d1		;von Winkel abziehen
		move.l a5,d0	
		CALLFFP SPSub
		move.l #$C3800049,d1	;mit 391 multiplizieren
		CALLFFP SPMul
		move.l #$C90FDA41,d1	;durch PI/2 dividieren
		CALLFFP SPDiv
		CALLFFP SPFix		;in Integer wandeln
		rts

		
* Tabelle mit Cosinus- (vorwärts) und Sinus- (rückwärts) Werten
		

cos	dc.b 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19
	dc.b 20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35
	dc.b 36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51
	dc.b 52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67
	dc.b 68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83
	dc.b 84,85,86,87,88,89,90,91,92,93,94,94,95,96,97,98
	dc.b 99,100,101,102,103,104,105,106,107,108,109,109,110
	dc.b 111,112,113,114,115,116,117,118,119,120,120,121
	dc.b 122,123,124,125,126,127,128,128,129,130,131,132
	dc.b 133,134,135,135,136,137,138,139,140,141,141,142
	dc.b 143,144,145,146,147,147,148,149,150,151,152,152
	dc.b 153,154,155,156,156,157,158,159,160,160,161,162
	dc.b 163,164,164,165,166,167,167,168,169,170,171,171
	dc.b 172,173,174,174,175,176,177,177,178,179,179,180
	dc.b 181,182,182,183,184,184,185,186,187,187,188,189
	dc.b 189,190,191,191,192,193,193,194,195,195,196,197
	dc.b 197,198,199,199,200,200,201,202,202,203,204,204
	dc.b 205,205,206,207,207,208,208,209,210,210,211,211
	dc.b 212,212,213,214,214,215,215,216,216,217,217,218
	dc.b 218,219,219,220,221,221,222,222,223,223,224,224
	dc.b 224,225,225,226,226,227,227,228,228,229,229,230
	dc.b 230,230,231,231,232,232,233,233,233,234,234,235
	dc.b 235,235,236,236,237,237,237,238,238,238,239,239
	dc.b 239,240,240,240,241,241,241,242,242,242,243,243
	dc.b 243,244,244,244,244,245,245,245,246,246,246,246
	dc.b 247,247,247,247,248,248,248,248,249,249,249,249
	dc.b 249,250,250,250,250,250,251,251,251,251,251,251
	dc.b 252,252,252,252,252,252,252,253,253,253,253,253
	dc.b 253,253,253,253,254,254,254,254,254,254,254,254
	dc.b 254,254,254,254,254,254,254,254,254,254,254,254
	dc.b 254,254

 
* Punt setzen/löschen/invertiern

plot	and.l #$FFFF,d0		;INT(X/8)*8 = Byte in Zeile
	move.w d0,a1
        divu #8,d0
	and.l #$FF,d1		;y*80 = Zeilenoffset
	mulu #80,d1
	add.l a4,d1		;Start Bitmap
	add.w d0,d1
 	move.l a1,d0
	move.b (a2,d0.w),d0	;Bit holen
	move.l d1,a1
	move.b (a1),d1		;Grafikbyte holen
	tst.b modus		;Modus holen
	beq setz		;Punkt setzen
	bmi lösch		;Punkt löschen

* Punkt invertieren

	eor.b d0,d1		;Bit invertieren
	move.b d1,(a1)		;Byte setzen
	rts

* Punkt setzen

setz	or.b d0,d1		;Bit setzen
	move.b d1,(a1)		;Byte setzen
	rts

* Punkt löschen

lösch	eor.b #$FF,d0		;Byte umdrehen
	and.b d0,d1		;Bit löschen
	move.b d1,(a1)		;Byte setzen
	rts


* Bits der x-Koordinaten

bittab		dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
		dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
		dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
		dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
		dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
		dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
		dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
		dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
		dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
		dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
		dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
		dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
		dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
		dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
		dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
		dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
		dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
		dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
		dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
		dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
		dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
		dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
		dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
		dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
		dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
		dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
		dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
		dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
		dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
		dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
		dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
		dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
		dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
		dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
		dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
		dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
		dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
		dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
		dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
		dc.b 128,64,32,16,8,4,2,1,128,64,32,16,8,4,2,1
		
