* TURBO.asm
* (W) 1988 by O.Wagner,Landsberge 5,4322 Sprockhövel 2
*
* Schaltet sämtliche DMA ab, um Rechenvorgänge zu
* beschleunigen.
* Aktivierung: Fenster anklicken, rechts drücken.
* Jeder weitere Klick schaltet DMA wieder an.
*
* V2.0 für A68k,BLINK und SMALL.LIB
*
* a68k turbo.asm
* blink turbo.o,small.lib to turbo sc sd nd
call	MACRO
	xref	_LVO\1
	jsr	_LVO\1(a6)
	ENDM

	CODE	entry
* einsprung
	move.l	4,a6
* kommen wir von der WB ?
	moveq	#0,d6	* Exec Message
	move.l	d6,a1
	call	FindTask
	move.l	d0,a1
	tst.l	$ac(a1)
* nö
	bne.s	nowb
* message holen
	lea	$5c(a1),a0
	call	WaitPort
	call	GetMsg
	move.l	d0,d6
nowb:
* intuition öffnen
	lea	intname(pc),a1
	call	OldOpenLibrary
	move.l	d0,d7
* fenster öffnen
	lea	newwind(pc),a0
	move.l	d7,a6
	call	OpenWindow
	move.l	d0,a5
	tst.l	d0
	beq	nowind		* nix Fenster
* linker unterer rand
	move.l	46(a5),a0	* screen
	move.w	12(a0),d0	* width
	move.w	14(a0),d1	* height
	sub.w	#10,d1
	sub.w	#126,d0
	move.l	a5,a0
* fenster verschieben
	call	MoveWindow
	move.l	4,a6
	move.l	86(a5),a3
loop:
* auf nachricht warten
	move.l	a3,a0
	call	WaitPort
	move.l	a3,a0
	call	GetMsg
	move.l	d0,a1
	move.l	20(a1),d5
	move.w	24(a1),d4
* zurück an Absender
	call	ReplyMsg
	cmp.w	#$200,d5	* CloseWindow ?
	beq.s	quit
	cmp.w	#$8,d5
	bne.s	loop
	cmp.w	#$69,d4
	bne.s	loop
* DMA aus
	move.w	#%0000000110101111,$dff096
* zweimal nachricht abwarten:
* 1) MOUSE_UP (rechts)
* 2) sonstige...
	move.l	a3,a0
	call	WaitPort
	move.l	a3,a0
	call	GetMsg
	move.l	d0,a1
	call	ReplyMsg	
	move.l	a3,a0
	call	WaitPort
	move.l	a3,a0
	call	GetMsg
	move.l	d0,a1
	call	ReplyMsg	
* DMA wieder ein
	move.w	#%1000000110100000,$dff096
	bra.s	loop
quit:
	move.l	d7,a6
	move.l	a5,a0
* Fenster zu!
	call	CloseWindow
nowind:
	move.l	4,a6
	tst.l	d6
	beq.s	nomsg
* wb-msg beantworten
	call	Forbid
	move.l	d6,a1
	call	ReplyMsg
nomsg:
	moveq	#0,d0
	rts

intname:
	dc.b	'intuition.library',0
newwind:
	dc.w	0,0,126,10
	dc.b	2,3
	dc.l	$4+$8+$200+$400+$4000+$8000+$10000+$40000+$80000
	dc.l	$2+$4+$8+$40+$10000
	dc.l	0,0
	dc.l	wint	* titel
	dc.l	0,0
* Achtung: gehört noch zur Fenster-struktur
* (spart 6 byte)
wint:	dc.b	'TURBO',0,0,0
	dc.w	$1	* auf WB

	END
