;+
; disassembly of Savage_040-060_8bit-Demo
; hacked to work in variable resolution (videomem up to 512K)
; if anyone want to make 030 version of it - it shouldn't be too hard. 
; just replace the mmu stuff... i don't have 030...
;
;                                                        -- MACTEP
;-

	machine	68040
	incdir	"where:your/includes/are"
	include "exec/exec_lib.i"
	include "exec/memory.i"
	include "intuition/intuition_lib.i"
	include "intuition/screens.i"
	include "graphics/graphics_lib.i"

MyIntuitionBase	equ     0
MyGraphicsBase	equ	4
MyViewPort	equ     8
DirtyBuffer	equ     $c
MyScreen        equ	$10
MyPlanes        equ	$14
VideoBuffer	equ	$18
DeltaBuffer	equ	$1c
PlanesStart	equ	$20
MMUType		equ	$24
DirtyBuffer2	equ     $26
BufSizeIn4K	equ	$2a
Palette		equ	$2e

	SECTION "",CODE       ;000 002420

	MOVEQ	#0,D0
	RTS

		dc.l	"SHAP"
		dc.l	"EEXV"
		dc.l    entry

entry		dc.l	"€LEV",1
		dc.l	"€VER",2
		dc.l	"€REV",2
		dc.l	"€NAM",name
		dc.l	"€$VE",version
		dc.l	"€AUT",aut
		dc.l	"€OPN",open
		dc.l	"€REF",refresh
		dc.l	"€CLS",close
		dc.l	"€L32",l32
		dc.l	0
		dc.l	0

name		dc.b	"Savage040-060-MMU",0,0,0

version		dc.b	"$VER: Savage040-060-MMU 2.2 (01.12.96) "
		dc.b	"704x562 8bit Driver - Cracked by MACTEP",0
		dc.b	$65
		dc.w	$B200

aut		dc.l	$70483033
		dc.l	$4E31782F
		dc.l	$43446920
		dc.l	$284CE173
		dc.l	$7A6CF320
		dc.l	$54F672F6
		dc.l	$6B292072

open:
	MOVEM.L	D2-D7/A2-A6,-(A7)
	MOVEA.L	A0,A4
	MOVEA.L	A1,A5
	MOVE.L	A6,ShapeBase
	MOVE.L	4.W,ExecBase
	MOVEA.L	ExecBase,A6
	MOVE.L	#3538+8,D0 			; 3538
	MOVE.L	#MEMF_PUBLIC+MEMF_CLEAR,D1
	jsr	_LVOAllocVec(a6)
	TST.L	D0
	BEQ.W   fail

	MOVEA.L	D0,A2
	MOVEA.L	ShapeBase,A6
	MOVEA.L	A4,A0
	MOVE.L	#$80534358,D0           ; "SCX"
	MOVEQ	#0,D1
	JSR	-$24(A6)
	MOVE.L	D0,st_width
	MOVE.L	D0,xsize
	andi.l	#$1f,d0
	BNE.W   fail

	MOVEA.L	A4,A0
	MOVE.L	#$80534359,D0		; "SCY"
	MOVEQ	#0,D1
	JSR	-$24(A6)
	MOVE.L	D0,st_height
	MOVE.L	D0,ysize
;	CMPI.L	#562,D0			; F I X E D   S I Z E
;	BNE.W	fail

	MOVEA.L	A4,A0
	MOVE.L	#$80444944,D0           ; "DID"
	MOVEQ	#0,D1
	JSR	-$24(A6)
	MOVE.L	D0,st_did

	MOVEA.L	ShapeBase,A6
	MOVEA.L	A4,A0
	MOVE.L	#$80564D44,D0           ; "VMD"
	MOVEQ	#0,D1
	JSR	-$24(A6)
	MOVE.W	D0,MMUType(a2)
	CMPI.L	#3,D0
	BNE.W	fail

	MOVEA.L	A4,A0
	MOVE.L	#$804F5653,D0           ; "OVS"
	MOVEQ	#1,D1
	JSR	-$24(A6)
	MOVE.L	D0,st_overscan

	MOVEA.L	ExecBase,A6
	LEA	intuition_name(PC),A1
	MOVEQ	#39,D0
	JSR	_LVOOpenLibrary(A6)
	MOVE.L	D0,MyIntuitionBase(a2)
	BEQ.W	fail

	MOVEA.L	ExecBase,A6
	LEA	graphics_name(PC),A1
	MOVEQ	#39,D0
	JSR	_LVOOpenLibrary(A6)
	MOVE.L	D0,MyGraphicsBase(a2)
	BEQ.W	fail

	MOVE.L	xsize,D0		; X
	MOVE.L	ysize,D1                ; Y
	MULU.L	D1,D0
	ADDI.L	#$00001000,D0		; 4K
	move.l	d0,d3
	MOVE.L	D0,bufsize_plus_4k
	ADDI.L	#$00000400,D0		; 1K
	MOVE.L	D0,L00004A

        asr.l	#6,d3
        asr.l	#6,d3
	subq	#2,d3
	move.l	d3,BufSizeIn4K(a2)

	MOVEA.L	ExecBase,A6
	MOVE.L	#MEMF_CHIP+MEMF_CLEAR,D1
	JSR	_LVOAllocMem(A6)
	TST.L	D0
	BEQ.W	fail

	ANDI.L	#$FFFFFC00,D0
	ADDI.L	#$00000400,D0
	MOVE.L	D0,D3
	MOVE.L	L00004A,D0
	JSR	_LVOFreeMem(A6)
	MOVE.L	bufsize_plus_4k,D0
	MOVEA.L	D3,A1
	MOVEA.L	ExecBase,A6
	JSR	_LVOAllocAbs(A6)
	TST.L	D0
	BEQ.W	fail

	MOVE.L	bufsize_plus_4k,D1
	ASR.L	#3,D1
	MOVE.L	D1,L00002A
	MOVE.L	D0,PlanesStart(a2)
	LEA	planes,A0
	MOVE.L	D0,(A0)+
	ADD.L	D1,D0
	MOVE.L	D0,(A0)+
	ADD.L	D1,D0
	MOVE.L	D0,(A0)+
	ADD.L	D1,D0
	MOVE.L	D0,(A0)+
	ADD.L	D1,D0
	MOVE.L	D0,(A0)+
	ADD.L	D1,D0
	MOVE.L	D0,(A0)+
	ADD.L	D1,D0
	MOVE.L	D0,(A0)+
	ADD.L	D1,D0
	MOVE.L	D0,(A0)+
	MOVEA.L	MyGraphicsBase(a2),A6
	LEA	bitmap,A0
	MOVEQ	#8,D0
	MOVE.L	xsize,D1
	MOVE.L	ysize,D2
	JSR	_LVOInitBitMap(A6)
	LEA	bitmap,A0
	MOVE.L	A0,st_bitmap

	MOVE.L	bufsize_plus_4k,D0
	ADDI.L	#$00040000,D0		; 512 * 512
	MOVE.L	D0,L00004A
	MOVEA.L	ExecBase,A6
	MOVE.L	#$00010001,D1
	JSR	_LVOAllocMem(A6)
	TST.L	D0
	MOVEA.L	D0,A1
	BEQ.B	L00000A

	ANDI.L	#$FFFC0000,D0
	ADDI.L	#$00040000,D0           ; 512 * 512
	MOVE.L	D0,D3
	MOVE.L	L00004A,D0
	JSR	_LVOFreeMem(A6)
	MOVE.L	bufsize_plus_4k,D0
	MOVEA.L	D3,A1
	MOVEA.L	ExecBase,A6
	JSR	_LVOAllocAbs(A6)
	TST.L	D0
	BEQ.B	L00000A

	MOVE.L	D0,VideoBuffer(a2)
	CMPI.L	#$00200000,D0
	BHI.W	L000014
	BSR.W	L00001A
	LEA	L00000F(PC),A1
	BRA.W	L00001E
L00000A:
	BSR.B	L00000B
	BRA.W	fail
L00000B:
	MOVEA.L	PlanesStart(a2),A1
	MOVE.L	bufsize_plus_4k,D0
	MOVEA.L	ExecBase,A6
	JMP	_LVOFreeMem(A6)

L00000C		dc.b	"Savage Error!",0,0
L00000D		dc.b	"  The MACINTOSH video memory is   ",$0a
		dc.b	"    located in the Chip memory!   ",0
L00000E		dc.b	"Quit",0
		dc.l	$0045D400	;" EÔ "
L00000F		dc.l	0
		dc.l	0
		dc.l	L00000C
		dc.l	L00000D
		dc.l	L00000E
		dc.l	0

L000010:
	MOVEA.L	ExecBase,A6
	MOVEA.L	DeltaBuffer(a2),A1
	MOVE.L	bufsize_plus_4k,D0
	JMP	_LVOFreeMem(A6)
L000013:
	BSR.W	L00001A
	BRA.W	fail

L000014:
	MOVE.L	bufsize_plus_4k,D0
	ADDI.L	#$00000400,D0
	MOVE.L	D0,L00004A
	MOVEA.L	ExecBase,A6
	MOVE.L	#$00010001,D1
	JSR	_LVOAllocMem(A6)
	TST.L	D0
	MOVEA.L	D0,A1
	BEQ.B	L000013

	ANDI.L	#$FFFFFC00,D0
	ADDI.L	#$00000400,D0
	MOVE.L	D0,D3
	MOVE.L	L00004A,D0
	JSR	_LVOFreeMem(A6)
	MOVE.L	bufsize_plus_4k,D0
	MOVEA.L	D3,A1
	MOVEA.L	ExecBase,A6
	JSR	_LVOAllocAbs(A6)
	TST.L	D0
	BEQ.B	L000013

	MOVE.L	D0,DeltaBuffer(a2)
	CMPI.L	#$00200000,D0
	BHI.W	L000019
	BSR.W	L00001A
	BSR.W	L000010
	LEA	L000018(PC),A1
	BRA.W	L00001E
L000017:
	dc.b	"  The Delta-Buffer located  ",$a
	dc.b	"     in the Chip memory!    ",0
	dc.w	"[C"
L000018:
	dc.l	0
	dc.l	0
	dc.l	L00000C
	dc.l	L000017
	dc.l	L00000E
	dc.l	$00000000
L000019:
	MOVEA.L	ExecBase,A6
	MOVE.L	A5,-(A7)
	LEA	move_srp_d0(PC),A5
	JSR	_LVOSupervisor(A6)
	MOVEA.L	(A7)+,A5
	BRA.B	L000022

L00001A:
	BSR.W	L00000B
	MOVEA.L	ExecBase,A6
	MOVEA.L	VideoBuffer(a2),A1
	MOVE.L	bufsize_plus_4k,D0
	JMP	_LVOFreeMem(A6)

L00001C:
	BSR.B	L00001A
	BSR.W	L000010
	BRA.W	fail

L00001E:
	MOVEA.L	MyIntuitionBase(a2),A6
	MOVEA.L	#0,A0
	MOVEA.L	#0,A2
	MOVEA.L	#0,A3
	JSR	_LVOEasyRequestArgs(A6)
	BRA.W	fail

move_srp_d0:			; this function executed in supervisor mode
	MOVEC	SRP,D0
	RTE

L000022:
	MOVEA.L	D0,A0			; srp,a0

	MOVE.L	VideoBuffer(a2),D1
	DIVU.L	#$02000000,D1		; 64MB
	LSL.L	#2,D1
	MOVEA.L	$00(A0,D1.L),A1
	MOVE.L	A1,D2
	ANDI.L	#$FFFFFF00,D2
	MOVEA.L	D2,A1
	MOVEA.L	A1,A0
	MOVE.L	VideoBuffer(a2),D1
	DIVU.L	#$02000000,D1
	MULU.L	#$02000000,D1
	MOVE.L	VideoBuffer(a2),D0
	SUB.L	D1,D0			; addr % 64MB
	DIVU.L	#$00040000,D0		; 256K
	ASL.L	#2,D0
	MOVE.L	$00(A0,D0.L),D2
	ANDI.L	#$FFFFFF00,D2
	MOVE.L	D2,DirtyBuffer(a2)		; dirty

; screen buffer can be > 256K, so get pointer to the second MMU table

	ADDQ.L	#4,D0
	MOVE.L	$00(A0,D0.L),D2
	ANDI.L	#$FFFFFF00,D2
	MOVE.L	D2,DirtyBuffer2(a2)		; dirty

	moveq	#0,d2
	MOVEA.L	ShapeBase,A6
	MOVEA.L	A5,A0
	MOVE.L	#$80434F4E,D0		; "CON"
	JSR	-$001E(A6)
	MOVEA.L	D0,A0
	MOVE.L	A2,$0004(A0)


	MOVEA.L	MyIntuitionBase(a2),A6
	SUBA.L	A0,A0
	LEA	screen_tags,A1
	JSR	_LVOOpenScreenTagList(A6)
	MOVEA.L	D0,A3
	MOVE.L	D0,MyScreen(a2)
	BEQ.W	L00001C
	MOVEA.L	D0,A1
	LEA	$002C(A1),A0		; ViewPort
	MOVE.L	A0,MyViewPort(a2)
	MOVEA.L	$0004(A0),A0            ; ColorMap
	LEA	vidcon_tags,A1
	MOVEA.L	MyGraphicsBase(a2),A6
	JSR	_LVOVideoControl(A6)
	MOVEA.L	MyIntuitionBase(a2),A6
	JSR	_LVORemakeDisplay(A6)
	MOVEA.L	ShapeBase,A6
	MOVEA.L	A5,A0
	MOVE.L	#$80534352,D0		; "SCR"
	JSR	-$001E(A6)
	MOVEA.L	D0,A0
	MOVE.L	A3,$0004(A0)
	MOVEA.L	MyScreen(a2),A1
	LEA	$0054(A1),A1		; 84 - RastPort
	MOVEA.L	$0004(A1),A1            ; BitMap
	MOVEA.L	$0008(A1),A1            ; Planes
	MOVE.L	A1,MyPlanes(a2)
	MOVEA.L	ShapeBase,A6
	MOVEA.L	A5,A0
	MOVE.L	#$80424153,D0		; "BAS"
	JSR	-$001E(A6)
	TST.L	D0
	BEQ.B	L000023
	MOVEA.L	D0,A1
	MOVE.L	VideoBuffer(a2),$0004(A1)
L000023:
	MOVEA.L	ShapeBase,A6
	MOVEA.L	A5,A0
	MOVE.L	#$804D4F44,D0		; "MOD"
	JSR	-$001E(A6)
	TST.L	D0
	BEQ.B	L000024
	MOVEA.L	D0,A1
	MOVE.L	xsize,$0004(A1)
L000024:
	MOVEA.L	ShapeBase,A6
	MOVEA.L	A5,A0
	MOVE.L	#$80525459,D0		; "RTY"
	JSR	-$001E(A6)
	TST.L	D0
	BEQ.B	L000025
	MOVEA.L	D0,A1
	MOVE.L	#1,$0004(A1)
L000025:
	MOVEM.L	(A7)+,D2-D7/A2-A6
	MOVEQ	#0,D0
	RTS

fail:
	MOVEM.L	(A7)+,D2-D7/A2-A6
	MOVEQ	#-1,D0
	RTS

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

refresh:
	MOVEM.L	D1-D7/A0-A6,-(A7)
	MOVEA.L	DirtyBuffer(a2),A0
	MOVEA.L	DirtyBuffer2(a2),Dirty2
	move.l	BufSizeIn4K(a2),d2
	MOVEA.L	MyPlanes(a2),A1
	MOVEA.L	DeltaBuffer(a2),A3
	MOVEA.L	VideoBuffer(a2),A2

	clr.l	Rest
	cmpi.l	#63,d2
        bmi.s	oneseg
	move.l	d2,Rest
	move.l	#63,d2
	sub.l	d2,Rest
oneseg:
	ADDQ.L	#3,A0
L000028:
	BTST	#4,(A0)         ; ditry? (4K page)
	BNE.W	L00002B
	ADDA.L	#$00001000,A2
	ADDA.L	#$00001000,A3
	ADDA.L	#$00000200,A1
L000029:
	ADDQ.L	#4,A0
	DBF	D2,L000028

	move.l	Rest,d2
	beq.s   oneseg1
	clr.l	Rest
	move.l  Dirty2,a0
	bra.s   oneseg

oneseg1:
	MOVEM.L	(A7)+,D1-D7/A0-A6
	MOVEQ	#$00,D0
	RTS

L00002A:
	ORI.B	#$00,D0
L00002B:
	MOVE.B	#$21,(A0)
	MOVEQ	#$7F,D1		; 128 times 32 = 4K
	MOVE.L	D2,L000037
	MOVE.L	A0,L000036
	MOVEA.L	L00002A(PC),A0
L00002C:
	CMPM.L	(A2)+,(A3)+	; 8 longs = 32 bytes
	BNE.B	L000035
	CMPM.L	(A2)+,(A3)+
	BNE.B	L000034
	CMPM.L	(A2)+,(A3)+
	BNE.B	L000033
	CMPM.L	(A2)+,(A3)+
	BNE.B	L000032
	CMPM.L	(A2)+,(A3)+
	BNE.B	L000031
	CMPM.L	(A2)+,(A3)+
	BNE.B	L000030
	CMPM.L	(A2)+,(A3)+
	BNE.B	L00002F
	CMPM.L	(A2)+,(A3)+
	BNE.B	L00002E
L00002D:
	ADDQ.L	#4,A1
	DBF	D1,L00002C
	MOVE.L	L000037(PC),D2
	MOVEA.L	L000036(PC),A0
	BRA.W	L000029
L00002E:
	SUBQ.L	#4,A2
	SUBQ.L	#4,A3
L00002F:
	SUBQ.L	#4,A2
	SUBQ.L	#4,A3
L000030:
	SUBQ.L	#4,A2
	SUBQ.L	#4,A3
L000031:
	SUBQ.L	#4,A2
	SUBQ.L	#4,A3
L000032:
	SUBQ.L	#4,A2
	SUBQ.L	#4,A3
L000033:
	SUBQ.L	#4,A2
	SUBQ.L	#4,A3
L000034:
	SUBQ.L	#4,A2
	SUBQ.L	#4,A3
L000035:
	SUBQ.L	#4,A2
	SUBQ.L	#4,A3
	MOVE.L	D1,-(A7)
	MOVEM.L	(A2)+,D0-D7
	MOVE.L	D0,(A3)+
	MOVE.L	D1,(A3)+
	MOVE.L	D2,(A3)+
	MOVE.L	D3,(A3)+
	MOVE.L	D4,(A3)+
	MOVE.L	D5,(A3)+
	MOVE.L	D6,(A3)+
	MOVE.L	D7,(A3)+
	MOVE.L	A1,-(A7)
	MOVE.L	A3,-(A7)
	MOVEA.L	#$00FF00FF,A3
	MOVEA.L	#$0F0F0F0F,A4
	MOVEA.L	D4,A6
	MOVE.W	D0,D4
	SWAP	D4
	MOVE.W	D4,D0
	MOVE.W	A6,D4
	MOVEA.L	D5,A6
	MOVE.W	D1,D5
	SWAP	D5
	MOVE.W	D5,D1
	MOVE.W	A6,D5
	MOVEA.L	D6,A6
	MOVE.W	D2,D6
	SWAP	D6
	MOVE.W	D6,D2
	MOVE.W	A6,D6
	MOVEA.L	D7,A6
	MOVE.W	D3,D7
	SWAP	D7
	MOVE.W	D7,D3
	MOVE.W	A6,D7
	MOVEA.L	D6,A5
	MOVEA.L	D7,A6
	MOVE.L	A3,D6
	MOVE.L	D6,D7
	AND.L	D0,D6
	AND.L	D2,D7
	EOR.L	D6,D0
	EOR.L	D7,D2
	LSR.L	#8,D2
	LSL.L	#8,D6
	OR.L	D2,D0
	OR.L	D7,D6
	MOVE.L	A3,D7
	MOVE.L	D7,D2
	AND.L	D1,D7
	AND.L	D3,D2
	EOR.L	D7,D1
	EOR.L	D2,D3
	LSR.L	#8,D3
	LSL.L	#8,D7
	OR.L	D3,D1
	OR.L	D2,D7
	MOVE.L	A4,D2
	MOVE.L	D2,D3
	AND.L	D0,D2
	AND.L	D1,D3
	EOR.L	D2,D0
	EOR.L	D3,D1
	LSR.L	#4,D1
	LSL.L	#4,D2
	OR.L	D1,D0
	OR.L	D3,D2
	MOVE.L	A4,D3
	MOVE.L	D3,D1
	AND.L	D6,D3
	AND.L	D7,D1
	EOR.L	D3,D6
	EOR.L	D1,D7
	LSR.L	#4,D7
	LSL.L	#4,D3
	OR.L	D7,D6
	OR.L	D1,D3
	EXG	D2,A5
	EXG	D3,A6
	MOVE.L	A3,D1
	MOVE.L	D1,D7
	AND.L	D4,D1
	AND.L	D2,D7
	EOR.L	D1,D4
	EOR.L	D7,D2
	LSR.L	#8,D2
	LSL.L	#8,D1
	OR.L	D2,D4
	OR.L	D7,D1
	MOVE.L	A3,D7
	MOVE.L	D7,D2
	AND.L	D5,D7
	AND.L	D3,D2
	EOR.L	D7,D5
	EOR.L	D2,D3
	LSR.L	#8,D3
	LSL.L	#8,D7
	OR.L	D3,D5
	OR.L	D2,D7
	MOVE.L	A4,D2
	MOVE.L	D2,D3
	AND.L	D4,D2
	AND.L	D5,D3
	EOR.L	D2,D4
	EOR.L	D3,D5
	LSR.L	#4,D5
	LSL.L	#4,D2
	OR.L	D5,D4
	OR.L	D3,D2
	MOVE.L	A4,D3
	MOVE.L	D3,D5
	AND.L	D1,D3
	AND.L	D7,D5
	EOR.L	D3,D1
	EOR.L	D5,D7
	LSR.L	#4,D7
	LSL.L	#4,D3
	OR.L	D7,D1
	OR.L	D5,D3
	EXG	D0,A5
	EXG	D6,A6
	MOVEA.L	#$33333333,A3
	MOVEA.L	#$55555555,A4
	MOVE.L	A3,D5
	MOVE.L	D5,D7
	AND.L	D0,D5
	AND.L	D2,D7
	EOR.L	D5,D0
	EOR.L	D7,D2
	LSR.L	#2,D2
	LSL.L	#2,D5
	OR.L	D2,D0
	OR.L	D7,D5
	MOVE.L	A3,D7
	MOVE.L	D7,D2
	AND.L	D6,D7
	AND.L	D3,D2
	EOR.L	D7,D6
	EOR.L	D2,D3
	LSR.L	#2,D3
	LSL.L	#2,D7
	OR.L	D3,D6
	OR.L	D2,D7
	MOVE.L	A4,D2
	MOVE.L	D2,D3
	AND.L	D5,D2
	AND.L	D7,D3
	EOR.L	D2,D5
	EOR.L	D3,D7
	LSR.L	#1,D7
	LSL.L	#1,D2
	OR.L	D3,D2
	MOVE.L	D2,(A1)
	OR.L	D7,D5
	ADDA.L	A0,A1
	MOVE.L	D5,(A1)
	MOVE.L	A4,D3
	MOVE.L	D3,D7
	AND.L	D0,D3
	AND.L	D6,D7
	EOR.L	D3,D0
	EOR.L	D7,D6
	LSR.L	#1,D6
	LSL.L	#1,D3
	OR.L	D7,D3
	ADDA.L	A0,A1
	MOVE.L	D3,(A1)
	OR.L	D6,D0
	ADDA.L	A0,A1
	MOVE.L	D0,(A1)
	MOVE.L	A5,D5
	MOVE.L	A6,D7
	MOVE.L	A3,D0
	MOVE.L	D0,D6
	AND.L	D5,D0
	AND.L	D4,D6
	EOR.L	D0,D5
	EOR.L	D6,D4
	LSR.L	#2,D4
	LSL.L	#2,D0
	OR.L	D4,D5
	OR.L	D6,D0
	MOVE.L	A3,D6
	MOVE.L	D6,D4
	AND.L	D7,D6
	AND.L	D1,D4
	EOR.L	D6,D7
	EOR.L	D4,D1
	LSR.L	#2,D1
	LSL.L	#2,D6
	OR.L	D1,D7
	OR.L	D4,D6
	MOVE.L	A4,D4
	MOVE.L	D4,D1
	AND.L	D0,D4
	AND.L	D6,D1
	EOR.L	D4,D0
	EOR.L	D1,D6
	LSR.L	#1,D6
	LSL.L	#1,D4
	OR.L	D1,D4
	ADDA.L	A0,A1
	MOVE.L	D4,(A1)
	OR.L	D6,D0
	ADDA.L	A0,A1
	MOVE.L	D0,(A1)
	MOVE.L	A4,D1
	MOVE.L	D1,D6
	AND.L	D5,D1
	AND.L	D7,D6
	EOR.L	D1,D5
	EOR.L	D6,D7
	LSR.L	#1,D7
	LSL.L	#1,D1
	OR.L	D6,D1
	ADDA.L	A0,A1
	MOVE.L	D1,(A1)
	OR.L	D7,D5
	ADDA.L	A0,A1
	MOVE.L	D5,(A1)
	MOVEA.L	(A7)+,A3
	MOVEA.L	(A7)+,A1
	MOVE.L	(A7)+,D1
	BRA.W	L00002D

L000036		dc.l    0
L000037		dc.l    0
Dirty2		dc.l	0
Rest		dc.l	0

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

close:
	MOVEM.L	D2-D7/A2-A6,-(A7)
	MOVE.L	MyScreen(a2),D0
	MOVEA.L	D0,A0
	MOVEA.L	MyIntuitionBase(a2),A6
	JSR	_LVOCloseScreen(A6)
	MOVE.L	MyGraphicsBase(a2),D0
	MOVEA.L	D0,A1
	MOVEA.L	ExecBase,A6
	JSR	_LVOCloseLibrary(A6)
	MOVE.L	MyIntuitionBase(a2),D0
	MOVEA.L	D0,A1
	MOVEA.L	ExecBase,A6
	JSR	_LVOCloseLibrary(A6)
	BSR.W	L00001A
	BSR.W	L000010
	MOVEA.L	ExecBase,A6
	MOVEA.L	A2,A1
	JSR	_LVOFreeVec(A6)
	MOVEM.L	(A7)+,D2-D7/A2-A6
	MOVEQ	#0,D0
	RTS

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

l32:
	MOVEM.L	D2-D7/A2-A6,-(A7)
	MOVE.L	#$80524742,D0		; "RGB"
	MOVEQ	#0,D1
	JSR	-$0024(A6)
	MOVEA.L	D0,A0
	LEA	Palette(a2),A1
	MOVE.L	#$01000000,(A1)+ 	; load 256 ($100) colors, begin from 0
	MOVE.L	#$000002FF,D1
L00003A:
	MOVE.L	(A0)+,(A1)+
	DBF	D1,L00003A
	CLR.L	(A1)
	MOVEA.L	MyGraphicsBase(a2),A6
	MOVEA.L	MyViewPort(a2),A0
	LEA	Palette(a2),A1
	JSR	_LVOLoadRGB32(A6)
	MOVEM.L	(A7)+,D2-D7/A2-A6
	MOVEQ	#0,D0
	RTS

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

intuition_name	dc.b	"intuition.library",0
graphics_name	dc.b	"graphics.library",0

	SECTION "",DATA       ;001 000184

		dc.l	0
screen_tags	dc.l	SA_Quiet,1
		dc.l	SA_Type,CUSTOMSCREEN
		dc.l	SA_BitMap
st_bitmap	dc.l	0
		dc.l	SA_Behind,0
		dc.l	SA_AutoScroll,1
		dc.l	SA_Left,0
		dc.l	SA_Top,0
		dc.l	SA_Width
st_width	dc.l    704
		dc.l	SA_Height
st_height	dc.l    562
		dc.l	SA_Depth,8
		dc.l	SA_Overscan
st_overscan	dc.l	0
		dc.l	SA_DisplayID
st_did		dc.l	$00029004		; PAL_MONITOR_ID + HIRESLACE_KEY
		dc.l	SA_Title,screen_title
		dc.l	TAG_DONE

vidcon_tags	dc.l	$80000005,1		; VTAG_BORDERBLANK_SET
		dc.l	TAG_DONE

screen_title	dc.b	"ShapeShifter Screen",0

bitmap		dc.w	0		;   BytesPerRow
		dc.w    0               ;   Rows
		dc.b	0               ;   Flags
		dc.b	0		;   Depth
		dc.w 	0
planes		dc.l	0               ;   Planes[8]
		dc.l	0
		dc.l	0
		dc.l	0
		dc.l	0
		dc.l	0
		dc.l	0
		dc.l	0

	SECTION "",BSS        ;002 000024

ExecBase	ds.l	1
ShapeBase	ds.l	1
bufsize_plus_4k	ds.l	1	; RGB? buffer size + 4K
L00004A		ds.l	1
xsize		ds.l	1
ysize		ds.l	1
