שתשת                                        ***************************************************************************
**        A LITTLE PIECE OF ASSEMBLER CODE TO DISPLAY A PICTURE!.        **
**  SET UP YER PICTURE AS A 16 COLOUR HIRES (640*512) PICTURE AND THEN   **
**       CONVERT IT TO RAW USING IFFMASTER OR A SIMILAR PROGRAM          **
**		     PICTURE MUST ALSO BE INTERLACED			 **
**	THIS CODE IS NOT SYSTEM FRIENDLY AS IS MASHES THE HARDWARE       **
**	  ORGINAL SOURCE CODE BY ROMBUS/NA UPDATED A LITTLE BY 		 **   
**      SLADE/A51 IN 1996 RELEASED AS FREEWARE - DO YOU YOU WANT TO IT   **
**     		    THIS CODE WILL WORK OK ON AN A1200 	 		 **
***************************************************************************


SCREENSIZE equ (640/8)*512	; SCREEN SIZE


	INCLUDE ram:SMITH.I 	; This is my include file
						; it contains all the macro`s
						; and equ`s that I use!.

	section prog,code	; PROGRAM CODE


Start:
	lea picture,a0		; LOAD EFFECTIVE ADDRESS OF PICTURE IN A0
	move.l a0,d0		; MOVE A0 TO D0.
	lea bitplanes+2,a1	; LOAD EFFECTIVE ADDRESS OF BITPLANE+2 IN A1
	move.w #5,d1		; MOVE 5 INTO D1
	move.l #screensize,d2	; MOVE SCREENSIZE INTO D2.

.loop	swap d0			; START LOOP AND SWAP D0
	move.w d0,(a1)		; MOVE D0 INTO A1
	lea 4(a1),a1		; LOAD EFFECTIVE ADDRESS OF 4 INTO A1
	swap d0			; SWAP DO AGAIN
	move.w d0,(a1)		; MOVE CONTENTS OF D0 INTO A1
	lea 4(a1),a1		; LOAD EFFECTIVE ADDRESS OF 4 INTO A1
	add.l d2,d0		; ADD D2 TO D0
	dbra d1,.loop		; DO A BRANCH TO D1,.LOOP
	
	move.l #0,0		
	lea gfxlib(pc),a1	; LOAD THE GRAHICS LIBRARY NAME INTO A1
 	move.l 4.w,a6		; MOVE 4 WORDS INTO A6
 	jsr oldopen(a6)		; OPEN THE LIBRARY (GRAPHICS)
	move.l d0,A1		; MOVE D0 TO A1
	move.l 38(A1),oldcopper ; MOVE 38BITS OF A1 INTO THE OLDCOPPER
	jsr closelib(a6)	; JUMP TO CLOSE THE LIB.
	jsr forbid(a6)		; JUMP TO FORBID
 	move.l #NC,$dff080	; MOVE NEW COPPER IN.

wait:	tstlmb  wait		; A MACRO TO TEST FOR LEFT MOUSE MUTTON
	jsr permit(a6)		; JUMP TO PERMIT
 	move.l oldcopper,$dff080; MOVE THE OLD COPPER BACK WHEN THE WAITS ENDED
	moveq #0,d0		; CLEAR DO
	rts			; RETURN TO SUBROUNTINE

gfxlib: dc.b "graphics.library",0 ; GFX LIB NAME
	even			  ; AT EVEN ADDRESS

gfxbase: dc.l 0

oldcopper: DC.l 0

	section copperlist,data_c 		; Stick in Chip RAM.

NC:	dc.w BPLCON0,%1100001000000100		;BPLCON0 (screen control)
	   	     ;FEDCBA9876543210

	dc.w BPLCON1,$0				;BPLCON1 (Horizontal scroll)
	dc.w BPLCON2,$0				;BPLCON2 (Priority control)
	dc.w BPLCON3,$0				;BPLCON3 (On aga amiga only)
						; The line above resets the AGA
						; sprites,palette and dual
						; playfield.
	dc.w BPL1MOD,80				;BPL1MOD (odd planes modulo)
	dc.w BPL2MOD,80				;BPL2MOD (even ''     '')
	dc.w FMODE,0				;FMODE (For aga only)
						; reset the sprites and burst 
						; reset.
	
 	dc.w DDFSTRT,$3C			;DDFSTRT (screen start)
	dc.w DDFSTOP,$D4			;DDFSTOP (screen stop)
	dc.w DIWSTRT,$2C81			;DIWSTRT (window start)
	dc.w DIWSTOP,$F4C1			;DIWSTOP (window stop)

bitplanes:
	
	dc.w BPL1PTH,0,BPL1PTL,0		; ADDRESS OF THE FOUR
	dc.w BPL2PTH,0,BPL2PTL,0		; BITPLANES WE ARE USING
        dc.w BPL3PTH,0,BPL3PTL,0
        dc.w BPL4PTH,0,BPL4PTL,0

sprites:
	dc.w SPR0PTH,0,SPR0PTL,0
	dc.w SPR1PTH,0,SPR1PTH,0
	dc.w SPR2PTH,0,SPR2PTH,0
	dc.w SPR3PTH,0,SPR3PTH,0
	dc.w SPR4PTH,0,SPR4PTH,0
	dc.w SPR5PTH,0,SPR5PTH,0
	dc.w SPR6PTH,0,SPR6PTH,0
	dc.w SPR7PTH,0,SPR7PTH,0 		;Address of sprites

	dc.w	COL00,$0000			;COL 0
	dc.w	COL01,$0000			;COL 1
	dc.w	COL02,$0110			;COL 2
	dc.w	COL03,$0111			;COL 3
	dc.w	COL04,$0211			;COL 4
	dc.w	COL05,$0000			;COL 5
	dc.w	COL06,$0221			;COL 6
	dc.w	COL07,$0332			;COL 7
	dc.w	COL08,$0432			;COL 8
	dc.w	COL09,$0443			;COL 9
	dc.w	COL10,$0543			;COL 10
	dc.w	COL11,$0654			;COL 11
	dc.w	COL12,$0754			;COL 12
	dc.w	COL13,$0765			;COL 13
	dc.w	COL14,$0865			;COL 14
	dc.w	COL15,$0CBB			;COL 15

	dc.w $5501,$fffe,$180,$0F0	; The two little green bars
	dc.w $5601,$fffe,$180,$000
	
	dc.w $Fa01,$fffe,$180,$0F0	; are drawn using these fours
	dc.w $Fb01,$fffe,$180,$000	; lines of code.

 	dc.w $FFFF,$FFFE		; Copper Stop.

	
picture: incbin ram:AREA51_HIRES_16.bm

	end
