***********************************
** Hardware includes - SLADE/A51 **
** Includes AGA too! Of course!  **
***********************************

*****************************
** Code hardware registers **
*****************************

Dmaconr		= $002
Vposr		= $004
Vhposr		= $006
Dskdatr		= $008
Joy0dat		= $00a
Joy1dat		= $00c
Clxdat		= $00e
Adkconr		= $010
Pot0dat		= $012
Pot1dat		= $014
Potgor		= $016
Serdatr		= $018
Dskbytr		= $01a
Intenar		= $01c
Intreqr		= $01e
Dskpth		= $020
Dskptl		= $022
Dsklen		= $024
Dskdat		= $026
Repftr		= $028
Vposw		= $02a
Vhposw		= $02c
Copcon		= $02e
Serdat		= $030
Serper		= $032
Potgo		= $034
Joytest		= $036
Str		= $038
Strvbl		= $03a
Strhor		= $03c
Strlong		= $03e
Bltcon0		= $040
Bltcon1		= $042
Bltafwm		= $044
Bltalwm		= $046
Bltcpth		= $048
Bltcptl		= $04a
Bltbpth		= $04c
Bltbptl		= $04e
Bltapth		= $050
Bltaptl		= $052
Bltdpth		= $054
Bltdptl		= $056
Bltsize		= $058
Bltcon0l	= $05a
Bltsizv 	= $05c
Bplsizh 	= $05e
Bltcmod 	= $060
Bltbmod 	= $062
Bltamod 	= $064
Bltdmod 	= $066
Bltcdat 	= $070
Bltbdat 	= $072
Bltadat 	= $074
SPRHDAT 	= $078
DeniseID 	= $07c
Dsksync 	= $07e
Cop1lch 	= $080
Cop1lcl 	= $082
Cop2lch 	= $084
Cop2lcl 	= $086
Copjmp1 	= $088
Copjmp2 	= $08a
Copins   	= $08c
Dmacon   	= $096
Clxcon   	= $098
Intena   	= $09a
Intreq   	= $09c
Adkcon   	= $09e
Aud0lch 	= $0a0
Aud01cl 	= $0a2
Aud0len 	= $0a4
Aud0per 	= $0a6
Aud0vol 	= $0a8
Aud0dat 	= $0aa
Aud1lch 	= $0b0
Aud1lcl 	= $0b2
Aud1len 	= $0b4
Aud1per 	= $0b6
Aud1vol 	= $0b8
Aud1dat 	= $0ba
Aud2lch 	= $0c0
Aud2lcl 	= $0c2
Aud2len 	= $0c4
Aud2per 	= $0c6
Aud2vol 	= $0c8
Aud2dat 	= $0ca
Aud3lch 	= $0d0
Aud3lcl 	= $0d2
Aud3len 	= $0d4
Aud3per 	= $0d6
Aud3vol 	= $0d8
Aud3dat 	= $0da

*******************************
** Copper hardware registers **
*******************************

DIWSTRT 	= $008e
DIWSTOP 	= $0090
DDFSTRT 	= $0092
DDFSTOP 	= $0094
BPL1PTH 	= $00e0
BPL1PTL 	= $00e2
BPL2PTH 	= $00e4
BPL2PTL 	= $00e6
BPL3PTH 	= $00e8
BPL3PTL 	= $00ea
BPL4PTH 	= $00ec
BPL4PTL 	= $00ee
BPL5PTH 	= $00f0
BPL5PTL 	= $00f2
BPL6PTH 	= $00f4
BPL6PTL 	= $00f6
BPL7PTH 	= $00f8
BPL7PTL 	= $00fa
BPL8PTH 	= $00fc
BPL8PTL 	= $00fe
BPLCON0 	= $0100
BPLCON1 	= $0102
BPLCON2 	= $0104
BPLCON3 	= $0106
BPL1MOD 	= $0108
BPL2MOD 	= $010a
BPLCON4 	= $010c
BPL1DAT 	= $0110
BPL2DAT 	= $0112
BPL3DAT 	= $0114
BPL4DAT 	= $0116
BPL5DAT 	= $0118
BPL6DAT 	= $011a
SPR0PTH 	= $0120
SPR0PTL 	= $0122
SPR1PTH 	= $0124
SPR1PTL 	= $0126
SPR2PTH 	= $0128
SPR2PTL 	= $012a
SPR3PTH 	= $012c
SPR3PTL 	= $012e
SPR4PTH 	= $0130
SPR4PTL 	= $0132
SPR5PTH 	= $0134
SPR5PTL 	= $0136
SPR6PTH 	= $0138
SPR6PTL 	= $013a
SPR7PTH 	= $013c
SPR7PTL 	= $013e
SPR0POS 	= $0140
SPR0CTL 	= $0142
SPR0DATA	= $0144
SPR0DATB	= $0146
SPR1POS 	= $0148
SPR1CTL 	= $014a
SPR1DATA	= $014c
SPR1DATB 	= $014e
SPR2POS 	= $0150
SPR2CTL 	= $0152
SPR2DATA 	= $0154
SPR2DATB 	= $0156
SPR3POS 	= $0158
SPR3CTL 	= $015a
SPR3DATA 	= $015c
SPR3DATB 	= $015e
SPR4POS 	= $0160
SPR4CTL 	= $0162
SPR4DATA 	= $0164
SPR4DATB 	= $0166
SPR5POS 	= $0168
SPR5CTL 	= $016a
SPR5DATA 	= $016c
SPR5DATB 	= $016e
SPR6POS 	= $0170
SPR6CTL 	= $0172
SPR6DATA 	= $0174
SPR6DATB 	= $0176
SPR7POS 	= $0178
SPR7CTL 	= $017a
SPR7DATA 	= $017c
SPR7DATB 	= $017e
COL00	 	= $0180
COL01 		= $0182
COL02 		= $0184
COL03 		= $0186
COL04 		= $0188
COL05 		= $018a
COL06 		= $018c
COL07 		= $018e
COL08 		= $0190
COL09 		= $0192
COL10 		= $0194
COL11 		= $0196
COL12 		= $0198
COL13 		= $019a
COL14 		= $019c
COL15 		= $019e
COL16 		= $01a0
COL17 		= $01a2
COL18 		= $01a4
COL19 		= $01a6
COL20 		= $01a8
COL21 		= $01aa
COL22 		= $01ac
COL23 		= $01ae
COL24 		= $01b0
COL25 		= $01b2
COL26 		= $01b4
COL27 		= $01b6
COL28 		= $01b8
COL29 		= $01ba
COL30 		= $01bc
COL31 		= $01be
HTOTAL 		= $01c0
HSSTOP 		= $01c2
HBSTRT 		= $01c4
HBSTOP 		= $01c6
VTOTAL 		= $01c8
VSSTOP 		= $01ca
VBSTRT 		= $01cc
VBSTOP 		= $01ce
SPRHSTRT	= $01d0
SPRHSTOP	= $01d2
BLTHSTRT	= $01d4
BLTHSTOP	= $01d6
HHPOSW 		= $01d8
HHPOSR		= $01da
BEAMCON0	= $01dc
HSSTRT 		= $01de
VSSTRT 		= $01e0
HCENTER 	= $01e2
DIWHIGH 	= $01e4
BPLHMOD 	= $01e6
SPRHPTH 	= $01e8
SPRHPTL 	= $01ea
BPL1HPTH 	= $01ec
BPL1HPTL 	= $01ee
FMODE 		= $01fc

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

; Other registers

lvl1vec 	= $64
lvl2vec		= $68
lvl3vec		= $6c
lvl4vec		= $70
lvl5vec		= $74
lvl6vec		= $78
lvl7vec		= $7c

execbase	= 4				; Offset of Execbase
oldopen		= -408
openlib		= -552				; Offset for OpenLibrary
closelib	= -414				; Offset for CloseLibrary
allocmem	= -198
freemem		= -210
forbid		= -138
permit		= -132 
disable		= -120
enable		= -126

version		= 0				; Minimum library version

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

; Macro list

*******************************************************************************
** Test LMB and if not pressed jump to label 1.                              **
*******************************************************************************

tstlmb		MACRO
		btst.b	#6,$Bfe001
		bne	\1
		ENDM

*******************************************************************************
** Test RMB and if not pressed jump to label 1.                              **
*******************************************************************************

tstrmb		MACRO
		btst.b	#$0a,$dff016
		bne	\1
		ENDM

*******************************************************************************
** Pause until left mouse button is pressed.                                 **
*******************************************************************************

waitlmb		MACRO
.wait\@		btst.b	#6,$bfe001
		bne	.wait\@
		ENDM

*******************************************************************************
** Pause until right mouse button is pressed.                                **
*******************************************************************************

waitrmb		MACRO
.wait\@		btst.b	#$0a,$dff016
		bne	.wait\@
		ENDM

*******************************************************************************
** Wait for blitter to be ready.                                             **
*******************************************************************************

waitblit	MACRO
.wait\@		btst	#14,$dff002
		bne	.Wait\@
		ENDM

*******************************************************************************
** Wait for a vertical blank. Line $2000 (1st Raster line).                  **
*******************************************************************************

waitvbl		MACRO
		move.l	d6,-(sp)
.loop\@		move.l	Vposr(a6),d6
		andi.l	#$1ff00,d6
		cmpi.w	#$2000,d6
		bne.s	.loop\@
		move.l	(sp)+,d6
		ENDM

*******************************************************************************
** Wait for DMA raster line.                                                 **
*******************************************************************************

waitpos		MACRO
.pos\@		cmp.b	#\1,$dff006
		bne.s	.pos\@
		ENDM

*******************************************************************************
** Pause for <n> raster lines.                                               **
*******************************************************************************

pause		MACRO
		movem.l	d5/d6,-(sp)
		move.l	#\1,d5
.loop\@		move.b	Vhposr(a6),d6
.waitline\@	cmp.b	Vhposr(a6),d6
		beq.s	.waitline\@
		dbf	d5,.loop\@
		movem.l	(sp)+,d5/d6
		ENDM

*******************************************************************************
** Save all registers to stackpointer.                                       **
*******************************************************************************

push		MACRO
		movem.l	d0-d7/a0-a6,-(sp)
		ENDM

*******************************************************************************
** Restore the registers from stackpointer.                                  **
*******************************************************************************

pop		MACRO
		movem.l	(sp)+,d0-d7/a0-a6
		ENDM

*******************************************************************************
** Insert a new palette into the copperlist                                  **
*******************************************************************************

setpal		MACRO
		push				; Store all registers
		move.w	(a1)+,d5		; How many colours
.loop		move.w	(a1)+,2(a0)		; Move next colour into c/l
		addq.l	#4,a0			; Goto next c/l address
		dbra	d5,.loop		; Do all the colours
		pop				; Restore all registers
		ENDM

*******************************************************************************
** Double buffer. Swaps between a logical and work area.                     **
*******************************************************************************

dblbuf		MACRO
		lea	\1,a2
		movem.l	(a2)+,d0/d1
		exg.l	d0,d1
		movem.l	d0/d1,-(a2)
		move.l	d1,a0
		bsr.w	showpic
		ENDM

*******************************************************************************
** Acknowledge interrupt.                                                    **
*******************************************************************************

ack_int		MACRO
		move.w	#\1,Intreq+$dff000
		ENDM

