**********************************************************************
;	Tetris auf der Workbench
;
;	by BRAINDEATH '91
;
;	WBTeto V1.0
;
; Tabulator-Größe : 08
;

	INCLUDE "MAXON ASM VOL.2:Includes/lvo.i"

**********************************************************************
CALL	MACRO
	IFEQ	NARG-2
	  IFC	\2,Exec
	  move.l Exec.w,a6
	  ELSE
	  move.l \2Base(a5),a6
	  ENDIF
	ENDIF
	jsr	_LVO\1(a6)
	ENDM
**********************************************************************
Border_3D	MACRO
X=\3
Y=\4
		dc.w	\1,\2
		dc.b	2,0
		dc.b	0,6
		dc.l	Coor1\@,Border2\@
Coor1\@		dc.w	0,0,x-2,0,0,0,0,y-1,1,y-1,1,0
Border2\@	dc.w	\1,\2
		dc.b	1,0
		dc.b	0,6
		dc.l	Coor2\@,0
Coor2\@		dc.w	x,1,x,y,x-1,y,x-1,1,x-1,y,2,y
		ENDM
**********************************************************************
Exec	=	4

**********************************************************************

	; Datenbereich

	rsreset
IntBase		RS.L	1
GfxBase		RS.L	1
WB_MSG		RS.L	1
WinStr		RS.L	1
WinRPort	RS.L	1
Score		RS.L	1
SignalBit	RS.L	1
OwnTask		RS.L	1
TimeDiv		RS.W	1
InitTimer	RS.W	1
LevelDiv	RS.W	1
YCor		RS.W	1
XCor		RS.W	1
ActualPiece	RS.L	1
ActualPNum	RS.W	1
ActualNum	RS.W	1
Seed		RS.W	1
NextPiece	RS.W	1
Pause		RS.W	1
GameOver	RS.W	1

DataSIZE	EQU	__RS


Start
	BASEREG	OFF

	lea	Data,a5

	BASEREG	A5,Data

	sub.l	a1,a1
	Call	FindTask,Exec	;Task suchen
	move.l	d0,OwnTask(a5)

	move.l	d0,a2
	tst.l	$AC(a2)		;kommen wir vom CLI ?
	bne.s	0$		;nein !
	lea	$5C(a2),a2	;MSG-Port
	move.l	a2,a0
	Call	WaitPort
	move.l	a2,a0
	Call	GetMsg
	move.l	d0,WB_MSG(a5)	;merken
0$
	lea	IntName,a1
	moveq	#33,d0
	Call	OpenLibrary
	move.l	#$38004,d7	;Alert-Code
	move.l	d0,IntBase(a5)
	beq	ExitAlert	;Fehler !

	lea	GfxName,a1
	moveq	#33,d0
	Call	OpenLibrary
	move.l	#$38002,d7
	move.l	d0,GfxBase(a5)
	beq	ExitAlert

	lea	NewWindow,a0	;Window-Str
	Call	OpenWindow,Int	;öffnen
	move.l	d0,WinStr(a5)
	beq	Exit		;kein Fenster !

	move.l	d0,a0		;nach a0
	move.l	50(a0),WinRPort(a5)	;RastPort

	moveq	#-1,d0		;Bitnummer egal !
	Call	AllocSignal,Exec	;Signalbit holen
	move.l	d0,SignalBit(a5)	;merken
	bmi	Exit			;Fehler !

	lea	IntNode,a1
	moveq	#5,d0			;VBI
	Call	AddIntServer		;installieren

	move.l	WinRPort(a5),a1
	moveq	#1,d0
	Call	SetAPen,Gfx

	lea	TextAttr,a0		;Topaz 8
	Call	OpenFont,Gfx		;öffnen
	move.l	d0,TextFont

	move.l	WinRPort(a5),a1
	move.l	TextFont,a0		;und für Fenster
	Call	SetFont,Gfx		;verwenden
	
	move.l	WinRPort(a5),a1
	moveq	#8,d0
	moveq	#18,d1
	Call	Move

	move.l	WinRPort(a5),a1
	lea	MStr1,a0
	moveq	#8,d0
	Call	Text

	move.l	WinRPort(a5),a1
	moveq	#8,d0
	moveq	#26,d1
	Call	Move

	move.l	WinRPort(a5),a1
	lea	MStr2,a0
	moveq	#8,d0
	Call	Text

	move.l	WinRPort(a5),a1
	moveq	#14,d0
	moveq	#39,d1
	Call	Move

	move.l	WinRPort(a5),a1
	lea	MStr3,a0
	moveq	#6,d0
	Call	Text

Entry_NEWGame

	bsr	NewGame
9$
	move.w	$dff006,d0
	and.w	#7,d0
	cmp.b	#7,d0
	beq.s	9$
	move.w	d0,NextPiece(a5)	

	bsr	CreateNew		;ein neues Teil !
.LOOP
	moveq	#0,d0
	moveq	#0,d1
	move.l	WinStr(a5),a0
	move.l	$56(a0),a0		;Msg-Port
	move.b	15(a0),d1		;Sig-Bit
	bset	d1,d0			;Maske
	move.l	SignalBit(a5),d1
	bset	d1,d0

	Call	Wait,Exec		;warten
	move.l	SignalBit(a5),d1

	btst	d1,d0			;Signal vom Server ?
	beq.s	1$			;nein !

	bsr	TimeOut			;behandeln
1$
	move.l	WinStr(a5),a0
	move.l	$56(a0),a0		;UserPort nach a0
	Call	GetMsg,Exec		;Msg holen
	tst.l	d0
	beq.s	.LOOP			;keine da !

	move.l	d0,a1
	move.l	$14(a1),-(sp)		;IDCMP
	move.l	$1C(a1),-(sp)		;IAddress
	move.w	$18(a1),-(sp)		;Code
	move.w	$1a(a1),-(sp)		;Qualifier
	Call	ReplyMsg
	move.w	(sp)+,d2		;Qualifier
	move.w	(sp)+,d1		;Code
	move.l	(sp)+,a0		;IAddress
	move.l	(sp)+,d0		;IDCMP

	cmp.w	#$200,d0		;CLOSEWINDOW ?
	beq  	.ENDE			;nein !

	cmp.w	#$40,d0			;GADGETUP ?
	bne.s	.NoGadget		;nein !

	move.w	$26(a0),d0		;ID nach d0

	tst.w	GameOver(a5)
	bne.s	.Gad1
	cmp.w	#2,d0			;Pause ?
	bne.s	.Gad1			;nein !

	not.w	Pause(a5)

	bsr	OutStatus		;Status ausgeben

	bra  	.LOOP

.Gad1
	cmp.w	#3,d0			;NEW ?
	bne  	.LOOP			;nein !
	bra	Entry_NEWGame		;doch !

.NoGadget
	cmp.w	#$400,d0		;RAWKEY ?
	bne  	.LOOP			;nein !

	tst.w	GameOver(a5)
	bne	.LOOP

	tst.w	Pause(a5)		;Pause ?
	bne.s	.Key4			;ja !

	cmp.w	#$2F,d1			;"5" ?
	bne.s	.Key1			;nein !
	bsr	Right			;rechts
	bra	.LOOP

.Key1	cmp.b	#$2D,d1			;"4" ?
	bne.s	.Key2
	bsr	Left
	bra	.LOOP

.Key2
	cmp.b	#$2E,d1			;"5" ?
	bne.s	.Key3
	bsr	Rotate
	bra	.LOOP

.Key3
	cmp.b	#$40,d1			;SPACE ?
	bne.s	.Key4
	bsr	Drop
	bra	.LOOP

.Key4
	cmp.b	#$19,d1			;"P" ?
	bne	.LOOP			;nein !
	not.w	Pause(a5)

	bsr	OutStatus		;Status ausgeben

	bra	.LOOP

.ENDE	lea	IntNode,a1
	moveq	#5,d0
	Call	RemIntServer,Exec	;Server entfernen

	bra	Exit

**********************************************************************
*	das aktuelle Teil um eine Position nach rechts

Right
	movem.l	d0-d1/a0,-(sp)
	move.w	XCor(a5),d0
	move.w	YCor(a5),d1
	move.l	ActualPiece(a5),a0
	addq.w	#1,d0
	bsr	Check			;paßt Teil noch ?
	bne.s	0$			;nein !

	move.l	ActualPiece(a5),a0
	moveq	#0,d0
	bsr	DrawPiece
	addq.w	#1,XCor(a5)
	move.l	ActualPiece(a5),a0
	moveq	#3,d0
	bsr	DrawPiece
0$
	movem.l	(sp)+,d0-d1/a0
	rts

**********************************************************************
*	das aktuelle Teil um eine Position nach links

Left
	movem.l	d0-d1/a0,-(sp)
	move.w	XCor(a5),d0
	beq.s	0$			;nicht möglich !
	move.w	YCor(a5),d1
	move.l	ActualPiece(a5),a0
	subq.w	#1,d0
	bsr	Check			;paßt Teil noch ?
	bne.s	0$			;nein !

	move.l	ActualPiece(a5),a0
	moveq	#0,d0
	bsr	DrawPiece
	subq.w	#1,XCor(a5)
	move.l	ActualPiece(a5),a0
	moveq	#3,d0
	bsr	DrawPiece
0$
	movem.l	(sp)+,d0-d1/a0
	rts

**********************************************************************
*	Teil rotieren

Rotate
	movem.l	d0-d1/a0,-(sp)

	lea	Piece_1,a0
	move.w	ActualPNum(a5),d0
	lsl.w	#6,d0
	add.w	d0,a0

	move.w	ActualNum(a5),d0
	addq.w	#1,d0
	and.w	#3,d0
	lsl.w	#4,d0
	add.w	d0,a0

	move.w	XCor(a5),d0
	move.w	YCor(a5),d1
	bsr	Check			;möglich ?
	bne.s	0$			;nein !

	move.l	a0,-(sp)		;Adresse retten
	move.l	ActualPiece(a5),a0
	moveq	#0,d0			;löschen
	bsr	DrawPiece
	move.l	(sp)+,a0

	moveq	#3,d0
	addq.w	#1,ActualNum(a5)
	and.w	#3,ActualNum(a5)
	move.l	a0,ActualPiece(a5)
	bsr	DrawPiece
0$
	movem.l	(sp)+,d0-d1/a0
	rts

**********************************************************************
*	Teil fällt nach unten

Drop
	movem.l	d0-d2/a0-a1,-(sp)

	move.l	ActualPiece(a5),a0
	moveq	#0,d0
	bsr	DrawPiece		;löschen

	move.w	XCor(a5),d0
	move.w	YCor(a5),d1

0$	addq.w	#1,d1
	bsr	Check
	beq.s	0$

	subq.w	#1,d1
	move.w	d1,YCor(a5)

	moveq	#3,d0			;zeichnen
	bsr	DrawPiece

	add.l	#15,Score(a5)
	bsr	TimeOut

	movem.l	(sp)+,d0-d2/a0-a1
	rts	

**********************************************************************
*	testen, ob das Teil in A0 an Position D0/D1 paßt
*	wenn ja, dann Z-Flag = 1

Check
	movem.l	d0-d4/a0-a1,-(sp)	;Register retten
	lea	Field,a1
	moveq	#3,d4			;immer 4 Teile !
0$	move.w	(a0)+,d2		;X-Koordinate
	move.w	(a0)+,d3		;Y-Koordinate
	asr.w	#3,d2
	asr.w	#2,d3
	add.w	d0,d2
	add.w	d1,d3			;endgültige Koordinaten

	cmp.w	#10,d2			;X>15 ?
	bcc.s	2$			;ja !
	cmp.w	#20,d3			;Y>29 ?
	bcc.s	2$			;ja !

	lsl.w	#4,d3			;*16
	add.w	d2,d3
	tst.b	(a1,d3.w)		;Feld leer ?
	bne.s	2$			;nein !

	dbra	d4,0$			;weiter !
	moveq	#0,d0			;alles OK !
	movem.l	(sp)+,d0-d4/a0-a1
	rts

2$	moveq	#-1,d0			;nicht möglich !
	movem.l	(sp)+,d0-d4/a0-a1
	rts

**********************************************************************
*	Linien zeichnen

DrawLines
	movem.l	d0-d1/a0-a2,-(sp)
	move.l	a0,a2		;Tabelle nach a2
	move.w	(a2)+,d0	;Zeichenfarbe
	move.l	WinRPort(a5),a1	;RastPort
	Call	SetAPen,Gfx	;Farbe setzen
	move.w	(a2)+,d0	;Koordinaten
	move.w	(a2)+,d1
	move.l	WinRPort(a5),a1
	Call	Move
0$	move.l	WinRPort(a5),a1	;Rastport
	move.w	(a2)+,d0
	beq.s	1$		;fertig !
	move.w	(a2)+,d1
	Call	Draw		;zeichnen
	bra.s	0$
1$
	movem.l	(sp)+,d0-d1/a0-a2	;Regs vom Stack
	rts

**********************************************************************
*	Score addieren und neu ausgeben

OutScore
	movem.l	d0-d1/a0-a2,-(sp)	;Regs retten
	add.l	d0,Score(a5)		;addieren
	move.l	Score(a5),d0
	bsr	ConDez			;konvertieren

	move.l	WinRPort(a5),a1
	moveq	#74,d0
	moveq	#18,d1
	Call	Move,Gfx

	move.l	WinRPort(a5),a1
	lea	ASCIIBuff,a0
	moveq	#10,d0
	Call	Text

	movem.l	(sp)+,d0-d1/a0-a2
	rts

**********************************************************************
*	Status ausgeben

OutStatus
	movem.l	d0-d1/a0-a2,-(sp)

	move.l	WinRPort(a5),a1
	moveq	#82,d0
	moveq	#26,d1
	Call	Move,Gfx

	lea	Stat_GO,a0
	tst.w	GameOver(a5)
	bne.s	0$

	lea	Stat_Run,a0
	tst.w	Pause(a5)
	beq.s	0$
	lea	Stat_Pause,a0
0$
	move.l	WinRPort(a5),a1
	moveq	#9,d0
	Call	Text

	movem.l	(sp)+,d0-d1/a0-a2
	rts

**********************************************************************
*	nach dezimal konvertieren

ConDez
	movem.l	d0-d3/a0-a1,-(sp)
	lea	PowersOfTen,a1
	lea	ASCIIBuff,a0
	moveq	#0,d3			;führende Null
0$	moveq	#$30,d2			;ASCII
1$	sub.l	(a1),d0
	bmi.s	2$
	addq.b	#1,d2
	st	d3			;keine führenden Nullen !
	bra.s	1$
2$	move.b	#$20,(a0)
	cmp.b	#'0',d2			;führende Null ?
	bne.s	3$			;nein !
	tst.b	d3
	beq.s	4$
3$	move.b	d2,(a0)			;eintragen
4$	addq.w	#1,a0
	add.l	(a1),d0
	addq.w	#4,a1
	tst.l	(a1)
	bne.s	0$
	or.b	#$30,-1(a0)		;letzte Ziffer
	movem.l	(sp)+,d0-d3/a0-a1
	rts

**********************************************************************
*	Teil zeichnen
*	Tabelle in a0
*	Farbe in d0

DrawNext
	movem.l	d0-d6/a0-a3,-(sp)

	moveq	#66,d5
	moveq	#32,d6
	bra.s	DP_Entry

DrawPiece
	movem.l	d0-d6/a0-a3,-(sp)	;Regs retten

	moveq	#66,d5
	moveq	#45,d6
DP_Entry
	move.l	a0,a2			;Tabelle nach a2
	lea	PImage,a3		;Image nach a3
	move.b	d0,15(a3)		;Farbe eintragen
	move.w	YCor(a5),d2		;Y-Koordinate
	lsl.w	#2,d2			;*8
	move.w	XCor(a5),d3		;X-Koordinate
	lsl.w	#3,d3			;*8
	moveq	#3,d4			;immer 3 Steine	
0$
	move.w	(a2)+,d0		;X-Offset
	move.w	(a2)+,d1		;Y-Offset
	add.w	d5,d0
	add.w	d6,d1

	add.w	d2,d1			;addieren
	add.w	d3,d0

	move.w	d0,(a3)
	move.w	d1,2(a3)
	move.l	a3,a1
	move.l	WinRPort(a5),a0
	moveq	#0,d0
	moveq	#0,d1
	Call	DrawImage,Int
	dbra	d4,0$
1$	movem.l	(sp)+,d0-d6/a0-a3
	rts

**********************************************************************
*	einen neuen Stein erzeugen

CreateNew
	move.w	$dff006,d0	;VHPosR
	add.w	Seed(a5),d0
	add.w	d0,Seed(a5)
	and.w	#7,d0		;nur 0-7 !
	cmp.w	#7,d0
	beq.s	CreateNew

	move.w	NextPiece(a5),d1
	move.w	d0,NextPiece(a5)

	move.w	d1,d0
	move.w	d0,ActualPNum(a5)	;Nummer merken

	lsl.w	#6,d0		;*64
	lea	Piece_1,a0
	add.w	d0,a0
	move.l	a0,ActualPiece(a5)
	clr.w	ActualNum(a5)
	clr.w	YCor(a5)
	move.w	#4,XCor(a5)

	moveq	#4,d0
	moveq	#0,d1
	bsr	Check			;Game over ?
	bne.s	Game_Over		;ja !

	moveq	#3,d0		;Farbe #3
	bsr	DrawPiece	;zeichnen
	moveq	#0,d0
	bsr	DrawNext	;Next löschen

	move.w	NextPiece(a5),d0
	lsl.w	#6,d0		;*64
	lea	Piece_1,a0
	add.w	d0,a0
	moveq	#3,d0
	bra	DrawNext

Game_Over
	move.w	#-1,Pause(a5)
	move.w	#-1,GameOver(a5)
	bra	OutStatus

**********************************************************************

IntNode
	dc.l	0,0
	dc.b	2,0
	dc.l	0
	dc.l	0,VBI_Int

VBI_Int
	movem.l	d0-a6,-(sp)

	BASEREG	OFF
	lea	Data,a5		; Datenbereich nach a5

	BASEREG	A5,DATA
	tst.w	Pause(a5)
	bne.s	2$		;PAUSE !!!

	subq.w	#1,TimeDiv(a5)	; Zähler
	bpl.s	0$		; noch nicht fertig !
	move.l	OwnTask(a5),a1
	moveq	#0,d0
	move.l	SignalBit(a5),d1
	bset	d1,d0
	Call	Signal,Exec	; Task wecken
	move.w	InitTimer(a5),TimeDiv(a5)
0$
	subq.w	#1,LevelDiv(a5)
	bpl.s	2$
	tst.w	InitTimer(a5)
	beq.s	1$
	subq.w	#1,InitTimer(a5)
1$	move.w	#1200,LevelDiv(a5)

2$	moveq	#0,d0
	movem.l	(sp)+,d0-a6
	rts

**********************************************************************

TimeOut
	movem.l	d0-d4/a0-a1,-(sp)
	move.w	YCor(a5),d1		;Y-Koordinate nach d1
	move.w	XCor(a5),d0
	move.l	ActualPiece(a5),a0
	addq.w	#1,d1
	bsr	Check			;tiefer ?
	bne.s	LayDown			;nein !

	move.l	ActualPiece(a5),a0
	moveq	#0,d0
	bsr	DrawPiece
	addq.w	#1,YCor(a5)
	move.l	ActualPiece(a5),a0
	moveq	#3,d0
	bsr	DrawPiece
	movem.l	(sp)+,d0-d4/a0-a1	;Regs vom Stack
	rts

LayDown
	move.l	ActualPiece(a5),a0
	move.w	XCor(a5),d0
	move.w	YCor(a5),d1
	lea	Field,a1

	moveq	#3,d4			;immer 4 Teile !
0$	move.w	(a0)+,d2		;X-Koordinate
	move.w	(a0)+,d3		;Y-Koordinate
	asr.w	#3,d2
	asr.w	#2,d3
	add.w	d0,d2
	add.w	d1,d3			;endgültige Koordinaten

	lsl.w	#4,d3			;*16
	add.w	d2,d3
	st	(a1,d3.w)		;Feld besetzen !
	dbra	d4,0$			;weiter !

	moveq	#15,d0
	bsr	OutScore
	bsr	TestLine
	bsr	CreateNew

	movem.l	(sp)+,d0-d4/a0-a1	;Regs vom Stack
	rts

**********************************************************************
*	Testen, ob Zeile voll

TestLine
	movem.l	d0-d4/a0-a3,-(sp)
	moveq	#0,d5			;Score
	lea	Field,a1
	lea	Field-32,a2
	moveq	#19,d4			;20 Zeilen
0$	moveq	#9,d2			;10 Steine
1$	tst.b	(a1)+
	beq.s	4$			;keine Zeile !
	dbra	d2,1$

	lea	-16(a1),a0
	move.l	a1,-(sp)
2$	move.b	-(a0),-(a1)
	cmp.l	a2,a1
	bcc.s	2$

	add.l	#100,d5			;Score für Zeile
	move.l	(sp)+,a1
	addq.w	#6,a1
3$	dbra	d4,0$			;weiter !
	bra.s	5$


4$	addq.w	#6,a1
	add.w	d2,a1
	bra.s	3$
	
5$	
	tst.l	d5			;Zeile voll ?
	beq.s	9$			;nein !

	move.l	d5,d0
	bsr	OutScore

	bsr	OutField		;Feld ausgeben

9$	movem.l	(sp)+,d0-d4/a0-a3
	rts

**********************************************************************
*	Spielfeld komplett ausgeben

OutField
	movem.l	d0-d3/a0-a2,-(sp)

	lea	Plane,a0		;Plane nach a0
	lea	10*80(a0),a1
	lea	Field,a2
	moveq	#19,d2			;20 Zeilen
5$	moveq	#9,d3			;10 Spalten
6$	moveq	#0,d0
	tst.b	(a2)+			;frei ?
	beq.s	7$			;ja !
	moveq	#-1,d0
7$
	move.b	d0,(a0)
	move.b	d0,10(a0)
	move.b	d0,20(a0)
	move.b	d0,30(a0)

	move.b	d0,(a1)
	move.b	d0,10(a1)
	move.b	d0,20(a1)
	move.b	d0,30(a1)

	addq.w	#1,a0
	addq.w	#1,a1
	dbra	d3,6$

	add.w	#30,a0
	add.w	#30,a1
	addq.w	#6,a2
	dbra	d2,5$

	lea	FieldImage,a1
	move.l	WinRPort(a5),a0
	moveq	#0,d0
	moveq	#0,d1
	Call	DrawImage,Int

	movem.l	(sp)+,d0-d3/a0-a2
	rts

**********************************************************************
*	ein neues Spiel

NewGame
	movem.l	d0/a0,-(sp)

	clr.w	GameOver(a5)
	clr.w	Pause(a5)

	lea	Field,a0
	move.w	#16*20-1,d0
0$	clr.b	(a0)+
	dbra	d0,0$

	move.w	NextPiece(a5),d0
	lsl.w	#6,d0			;*64
	lea	Piece_1,a0
	add.w	d0,a0
	moveq	#0,d0
	move.w	#4,XCor(a5)
	bsr	DrawNext		;löschen

	lea	Container,a0	;Tabelle mit Containerkoordinaten
	bsr	DrawLines	;zeichnen
	lea	Box,a0		;Tabelle mit Koordinaten
	bsr	DrawLines	;zeichnen

	clr.l	Score(a5)
	moveq	#0,d0
	bsr	OutScore
	move.w	#30,InitTimer(a5)
	bsr	OutField
	bsr	OutStatus
	movem.l	(sp)+,d0/a0
	rts

**********************************************************************

Exit
	moveq	#0,d7		;kein Alert !
ExitAlert
	move.l	SignalBit(a5),d0
	bls.s	5$
	Call	FreeSignal,Exec
5$
	move.l	WinStr(a5),d0
	beq.s	4$
	move.l	d0,a0
	Call	CloseWindow,Int
4$
	move.l	Exec.w,a6
	move.l	IntBase(a5),d0
	beq.s	0$
	move.l	d0,a1
	Call	CloseLibrary
0$
	move.l	GfxBase(a5),d0
	beq.s	1$
	move.l	d0,a1
	Call	CloseLibrary
1$
	move.l	WB_MSG(a5),d0
	beq.s	2$
	move.l	d0,a1
	Call	ReplyMsg
2$
	tst.l	d7		;Alert ?
	beq.s	3$		;nein !
	lea	.AC,a5
	Call	Alert
3$
	moveq	#0,d0
	rts
.AC
	dc.l	-1,-1

NewWindow
	dc.w	238,34,164,132
	dc.w	1
	dc.l	$640
	dc.l	$100E
	dc.l	Gad2
	dc.l	0		;Checkmark
	dc.l	Title		;Titel
	dc.l	0,0		;Screen,Bitmap
	dc.w	50,50,200,180
	dc.w	1		;WB_Screen

Gad2	dc.l	Gad3
	dc.w	8,97,49,13,0,1,1
	dc.l	GadgetBorder,0,GTxt2,0,0
	dc.w	2,0,0

GTxt2	dc.b	3,0,0,0
	dc.w	4,3
	dc.l	TextAttr,GStr2,0

Gad3	dc.l	0
	dc.w	8,113,49,13,0,1,1
	dc.l	GadgetBorder,0,GTxt3,0,0
	dc.w	3,0,0

GTxt3	dc.b	3,0,0,0
	dc.w	4,3
	dc.l	TextAttr,GStr3,0

GadgetBorder
	Border_3D 0,0,48,12

Piece_1
	dc.w	0,4,8,4,16,4,8,0
	dc.w	8,0,0,4,8,4,8,8
	dc.w	0,0,8,0,16,0,8,4
	dc.w	0,0,0,4,0,8,8,4

	dc.w	0,0,8,0,0,4,8,4
	dc.w	0,0,8,0,0,4,8,4
	dc.w	0,0,8,0,0,4,8,4
	dc.w	0,0,8,0,0,4,8,4

	dc.w	0,0,8,0,16,0,24,0
	dc.w	0,0,0,4,0,8,0,12
	dc.w	0,0,8,0,16,0,24,0
	dc.w	0,0,0,4,0,8,0,12

	dc.w	0,0,8,0,16,0,16,4
	dc.w	8,0,8,4,8,8,0,8
	dc.w	0,0,0,4,8,4,16,4
	dc.w	0,0,8,0,0,4,0,8

	dc.w	0,4,8,4,16,4,16,0
	dc.w	0,0,0,4,0,8,8,8
	dc.w	0,0,8,0,16,0,0,4
	dc.w	0,0,8,0,8,4,8,8

	dc.w	8,0,16,0,0,4,8,4
	dc.w	0,0,0,4,8,4,8,8
	dc.w	8,0,16,0,0,4,8,4
	dc.w	0,0,0,4,8,4,8,8

	dc.w	0,0,8,0,8,4,16,4
	dc.w	0,4,0,8,8,0,8,4
	dc.w	0,0,8,0,8,4,16,4
	dc.w	0,4,0,8,8,0,8,4

PImage
	dc.w	0,0,8,4,2
	dc.l	0
	dc.b	0,0
	dc.l	0

FieldImage
	dc.w	66,45,80,80,2
	dc.l	Plane
	dc.b	3,0
	dc.l	0


Container
	dc.w	1		;Farbe #1
	dc.w	064,44		;x,y
	dc.w	064,125,147,125,147,044
	dc.w	146,044,146,125,063,125,063,044
	dc.w	146,044
	dc.w	0,0

Box	dc.w	1
	dc.w	008,29
	dc.w	008,42,147,42,147,29
	dc.w	146,29,146,42,007,42,007,29
	dc.w	146,29
	dc.w	0,0


PowersOfTen
	dc.l	1000000000
	dc.l	100000000
	dc.l	10000000
	dc.l	1000000
	dc.l	100000
	dc.l	10000
	dc.l	1000
	dc.l	100
	dc.l	10
	dc.l	1
	dc.l	0

topazname:
	dc.b	"topaz.font",0
	even
textfont:
	dc.l	0
textattr:
	dc.l	topazname
	dc.w	8
	dc.w	0

Data		ds.b	DataSIZE
ASCIIBuff	ds.b	12

		ds.b	64,0
Field		ds.b	16*32

IntName	dc.b	'intuition.library',0
GfxName	dc.b	'graphics.library',0
	even

Title		dc.b	"WB_Teto",0
GStr2		dc.b	'Pause',0
GStr3		dc.b	'New !',0
MStr1		dc.b	'Score  :',0
MStr2		dc.b	'Status :',0
MStr3		dc.b	'Next :',0
Stat_Run	dc.b	'      Run',0
Stat_Pause	dc.b	'    Pause',0
Stat_GO		dc.b	'Game Over',0

	Section	"PL",BSS,CHIP

Plane	ds.b	800*2

	END










