*------------------------------------------------------------------------------*
	CODE
*­·­·­·­·­·­·­·­·­·­·­·­·­·­·­·­·­·­·­ Store Stack
	move.l	SP,Stack		
*­·­·­·­·­·­·­·­·­·­·­·­·­·­·­·­·­·­·­·­ Open Dos
	movea.l	ExeBase,a6
	lea	DosBase,A1
	clr.l	d0
	jsr	_OpenLibrary(a6)	;Open Dos Library
	move.l	d0,DosBase		;Store DosBase
*­·­·­·­·­·­·­·­·­·­·­·­·­·­·­·­·­·­·­·­ Check if run from WB.
	clr.l	d0
	suba.l	a1,a1
	jsr	_FindTask(a6)		;ExeBase in A6
	move.l	d0,Task
	move.l	d0,a2
	tst.l	Proc.CLI(a2)
	beq.s	StartFromWB
*­·­·­·­·­·­·­·­·­·­·­·­·­·­·­·­·­·­·­·­ Start From CLI
StartFromCLI:
	move.l	#1,EndFromWB
	bra.s	StartProgram
*­·­·­·­·­·­·­·­·­·­·­·­·­·­·­·­·­·­·­·­ Start From WB
StartFromWB:
	movea.l	ExeBase,a6
	lea	Proc.MsgPort(a2),a0
	jsr	_WaitPort(a6)
	lea	Proc.MsgPort(a2),a0
	jsr	_GetMsg(a6)
	move.l	d0,WBMsg
*­·­·­·­·­·­·­·­·­·­·­·­·­·­·­·­·­·­·­·­ Open Libraries
StartProgram:
	lea	IntBase,a1
	jsr	_OpenLibrary(a6)
	move.l	d0,IntBase
*------------------------------------------------------------------------------*
	move.l	IntBase,a6
	lea	NewScrn,a0
	jsr	_OpenScreen(a6)
	move.l	d0,ScreenBase
	move.l	d0,a0
	move.l	192(a0),Bit1
	move.l	196(a0),Bit2
	
	jsr	_OpenWorkBench(a6)
	move.l	d0,WBScreenBase
	move.l	d0,a0
	move.l	192(a0),WBBit1
	move.l	196(a0),WBBit2
*------------------------------------------------------------------------------*
	clr.l	d0
CopyData:
	move.l	#15999,d4
	move.l	WBBit1,a0
	move.l	Bit1,d1
	addi.l	#16000,d1
	move.l	d1,a1
	bsr	Copy

	move.l	#15999,d4
	move.l	WBBit2,a0
	move.l	Bit2,d1
	addi.l	#16000,d1
	move.l	d1,a1
	bsr	Copy

*	move.l	IntBase,a6
	move.l	ScreenBase,a0
	jsr	_ScreenToFront(a6)

Wait:
*	Check keyboard     $BFEC01 
	move.b	$BFEC01,d0
	andi.b	#%00000001,d0		;0= NO key press
	move.b	d0,d2
*	Check left mouse button
	move.b	$00BFE001,d0
	andi.b	#%01000000,d0		
	lsr	#6,d0
	eor	#1,d0			;0= NO button press
	add.b	d0,d2
	cmpi.b	#0,d2
	beq.s	Wait

*------------------------------------------------------------------------------*
	move.l	ScreenBase,a0
	jsr	_CloseScreen(a6)
*------------------------------------------------------------------------------*
Exit:	move.l	ExeBase,a6
	move.l	IntBase,a1
	jsr	_CloseLibrary(a6)
*­·­·­·­·­·­·­·­·­·­·­·­·­·­·­·­·­·­·­·­ End Program
EndProgram:
	tst.l	EndFromWB
	beq.s	Reply
CloseLibs:
	clr.l	d1
	movea.l	DosBase,a6
	jsr	_Exit(a6)		; DosBase in A6
	movea.l	ExeBase,a6
	move.l	DosBase,a1
	jsr	_CloseLibrary(a6)

	RTS				; Exit program
Reply:
	move.l	d0,-(SP)
	tst.l	WBMsg
	beq.s	CloseLibs
	movea.l	ExeBase,a6
	move.l	WBMsg,a1
	jsr	_ReplyMsg(a6)
	bra.s	CloseLibs
*------------------------------------------------------------------------------*
Copy:	move.b	(a0)+,d0

	clr.l	d2
	clr.l	d1
	move.b	d0,d2
	andi.b	#$00000001,d2
	or.b	d2,d1
	move.l	#6,d5
BitFlip:
	rol.b	#1,d1
	move.b	d0,d2
	ror.b	#1,d2
	move.b	d2,d0
	andi.b	#$00000001,d2
	or.b	d2,d1
	dbf.s	d5,BitFlip

	move.b	d1,-(a1)
	dbf.s	d4,Copy
	rts
*------------------------------------------------------------------------------*
	DATA
IntBase:	dc.b	"intuition.library",0
DosBase:	dc.b	"dos.library",0
WBBit1		dc.l	0
WBBit2		dc.l	0
Bit1		dc.l	0
Bit2		dc.l	0
ScreenBase:	dc.l	0
WBScreenBase:	dc.l	0
NewScrn:	dc.w 	0,0,640,200,4				; LE,TE,W,H,D
 		dc.b 	1,2					; DP,BP
		dc.w 	V_HIRES,SCREENQUIET!SCREENBEHIND	;VM,T
		dc.l 	0,0,0,0					; F,T,G,CBM
		dc.b 	0
	EVEN
ExeBase		EQU	4
_OpenLibrary	EQU	-408
_CloseLibrary	EQU	-414
_OpenWorkBench	EQU	-210
_CloseScreen	EQU	-66
_OpenScreen	EQU	-198
_ScreenToFront	EQU	-252
SCREENBEHIND    EQU     $0080
SCREENQUIET     EQU     $0100
V_HIRES     EQU     $8000


WD_RPort		EQU	$00000032
FH.Type			EQU	$00000008
Proc.CLI		EQU	$000000AC
Proc.ConsoleTask	EQU	$000000A4
Proc.MsgPort		EQU	$0000005C
_GetMsg			EQU	$FFFFFE8C	;ExeBase
_ReplyMsg		EQU	$FFFFFE86
_FindTask		EQU	$FFFFFEDA
_Exit			EQU	$FFFFFF70	;DOSBASE
_WaitPort		EQU	$FFFFFE80
Stack			dc.l	0
Task			dc.l	0
EndFromWB		dc.l	0
WBMsg			dc.l	0
	END


