*****************************************
*	SYSTEM STARTER	V 2.0		*
*  Code  written by SONNY/Darkness	*
*  Major changes by TROGLOBYTE/Darkness	*
*  Last Version Updated : 15/Ene/94	*
*****************************************

	SECTION Troglobyte,CODE	; Codigo (CHIP/FAST)

InitSys	bsr.s	OSout		; Quitamos el control al Amiga OS

	bsr.w	Start		; Nuestro PROGRAMA !!!

	bsr.w	OSin		; Devolvemos el control al Amiga OS
	rts			; ADIOS !!!
	DC.B	'$VER: Darkness 2.0 15/Ene/94',0	** N. Version
	even

OSout	movea.l	4.w,a6			; System Base
	lea	GfxLib,a1
	moveq	#0,d0
	jsr	-552(a6)		; OpenLibrary
	move.l	d0,GfxBase		; Save Graphics_lib base
	move.l	d0,a6
	move.l	38(a6),OldCopper	; gb_CopInit	Sys Copper
	move.l	34(a6),OldView		; gb_ActiView	Sys View
	jsr	-456(a6)		; Own Blitter
	lea	0.w,a1		;LoadView Null
	jsr	-222(a6)	;LoadView
	jsr	-270(a6)	;WaitTOF
	jsr	-270(a6)

	movea.l	4.w,a6			; System Base
	jsr	-132(a6)		; Forbid
	jsr	-150(a6)		; SuperState
	move.l	d0,SysStack		; System stack
	btst.b	#0,$129(a6)	; are we at least 68010? ($129=AttnFlags+1)
	beq.s	.68000			; nope.
	dc.w	$4e7a,$0801	;=movec.l vbr,d0 ; pero MDevPac no lo acepta
	move.l	d0,VectorBase		; Get Real VBR

.68000	move	$dff01c,IntEnaR		; Initialize custom chips
	move	$dff01e,IntReqR		; Save old valours first
	move	$dff002,DmaConR
	move	$dff010,AdkConR
	move	#%0111111111111111,$dff09a	; INTENA
	move	#%1100000000100000,$dff09a	* Enable desired IRQs
.Spr	move.l	$dff004,D0		; Wait RASTER to
	and.l	#$0001FF00,D0		; disable SPRITES
	bne.s	.Spr
	move	#%0111111111111111,$dff096	; DMACONW
	move	#%1000001111000000,$dff096	* Enable desired DMAs

	move	$dff07c,d0		;Ponerlo en/antes/despues de Copper?
	cmp.b	#$f8,d0
	bne.s	.NotAGA			; Not AGA
	move	#0,$dff1fc		* Fix AGA Res     (Ponerlo en Copper?)

.NotAGA	move.l	VectorBase,a0
	move.l	$6c(a0),Int3Save	; Save level 3 vector
	move.l	#INTER,$6c(a0)		; Set OUR! own interrupt

	move.l	#COPPER,$dff080			; Set OUR! Copper List
	rts

OSin	move.l	VectorBase,a0
	move.l	Int3Save,$6c(a0)	; Reset Interrupts
	move	IntEnaR,d7		; Reset custom chips
	bset	#$f,d7
	move	d7,$dff09a		; Reset Interrupts
	move	IntReqR,d7
	bset	#$f,d7
	move	d7,$dff09c		; Reset interrupt request
	move	DmaConR,d7
	bset	#$f,d7
	move	d7,$dff096		; Reset DMAConw
	move	AdkConR,d7
	bset	#$f,d7
	move	d7,$dff09e		; Reset ADK

	move.l	GfxBase,a6
	movea.l	OldView,a1
	jsr	-222(a6)	;LoadView
	move.l	OldCopper,$dff080	; Reset System Copper
	jsr	-462(a6)		; DisOwn Blitter

	movea.l	4.w,a6			; System Base
	move.l	GfxBase,a1	; Close Graphics_lib
	jsr	-414(a6)	; CloseLibrary
	jsr	-138(a6)		; Permit
	move.l	SysStack,d0		; Systemstack
	jsr	-156(a6)		; UserState

	moveq.l	#0,D0
	rts

***************** INTERRUPCION

INTER	movem.l	A0-A6/D0-D7,-(sp)

; Aqui dentro poner las rutinas que van cada 50avo de segundo

	btst	#4,$dff01e
	beq	sale
	lea	color,a0
	add.w	#1,colormap
	cmp.w	#$0fff,colormap
	bne	sigue
	clr.w	colormap
sigue	move.w	colormap,(a0)

	move	#$30,$dff09c		
	movem.l	(sp)+,A0-A6/D0-D7
	rte


sale	move	#$20,$dff09c
	movem.l	(sp)+,A0-A6/D0-D7
	rte				

***************** PROGRAMA

Start				; Inicializamos nuestro Programa aqui
	lea	CopBPLS,a0	; Inicializamos la Copper con
	move.l	#BPL1C,d0	; las direcciones donde estan los
	move	d0,6(a0)	; graficos de los BitPlanes que usamos
	swap	d0
	move	d0,2(a0)
	move.l	#BPL2C,d0
	move	d0,14(a0)
	swap	d0
	move	d0,10(a0)
	move.l	#BPL3C,d0
	move	d0,22(a0)
	swap	d0
	move	d0,18(a0)

MAIN				; Programa Principal



;salimos con el boton izquierdo del raton.

LMB	btst 	#6,$bfe001	; Apreto Raton izquierdo ?
	bne.s 	MAIN		; NO = Salta a MAIN
	rts			; SI = Volvemos para salir


***************** COPPER LIST

	SECTION Graficos,DATA_C		; Datos   (CHIP)

COPPER	dc.w $0001,$fffe	
	dc.w $100,$3200			* BPLCONtrol0 [3 BPLS]
	dc.w $102,$0000,$104,$0000	* BPLCON1,BPLCON2
	dc.w $108,$0000,$10A,$0000	* BPLMODulos
	dc.w $08e,$2881,$090,$28C1	* DIWindow Size YX
	dc.w $092,$0038,$094,$00D0	* DDFetch

CopBPLS	dc.w $00e0,$0000,$00e2,$0000	* BPL1PT = BitPlane1Pointers
	dc.w $00e4,$0000,$00e6,$0000	* BPL2
	dc.w $00e8,$0000,$00eA,$0000
;	dc.w $00eC,$0000,$00eE,$0000	* Como solo usamos 3 planos
;	dc.w $00F0,$0000,$00F2,$0000	* no hace falta que pongamos estos
;	dc.w $00F4,$0000,$00F6,$0000	* BPL6

	dc.w $9601,$fffe	;wait cualquier pos. vert.
	dc.w $009c,$8010	;move y provoca interrupt nivel 3
	dc.w $0180
color	dc.w $0000		
	dc.w $00e3,$80fe	;termina la linea
	dc.w $0088,$0		;vuelve a empezar 


;	dc.w $180,$f00,$182,$f22,$184,$f44,$186,$f66	* Colores 0-7
;	dc.w $188,$f88,$18a,$faa,$18c,$fcc,$18e,$fee
;	dc.w $190,$00f,$192,$009,$194,$da7,$196,$c96	* 8-15
;	dc.w $198,$fff,$19a,$b52,$19c,$b40,$19e,$930
;	dc.w $1a0,$000,$1a2,$fff,$1a4,$b00,$1a6,$900	* 16-23
;	dc.w $1a8,$ccc,$1aa,$aaa,$1ac,$060,$1ae,$050
;	dc.w $1b0,$00f,$1b2,$009,$1b4,$da7,$1b6,$c96	* 24-31
;	dc.w $1b8,$fff,$1ba,$b52,$1bc,$b40,$1be,$930
	
	dc.w $ffff,$fffe,$ffff,$fffe	; Doble End of COPPER


;Las 3 siguientes instrucciones son los 3 BitPlanes de la pantalla
;el comando dcb.b rellena una zona de memoria con el dato que se le de

Plano1	dcb.b	10240,$00	; (320    *256)/8 = 10240 bytes
	dcb.b	10240,$00	; (Xpixels*Yp.)/8 = tamaņo de cada plano
	dcb.b	10240,$00	; Usamos 3 planos
;	INCBIN	df0:MiDibujo.raw

BPL1C	equ	Plano1		;Estos son las direcciones donde
BPL2C	equ	Plano1+10240	;comienza cada BitPlane
BPL3C	equ	Plano1+20480

************** DATAS

	SECTION FastData,DATA		; Datos (FAST/CHIP)

GfxLib		dc.b	"graphics.library",0,0
IntEnaR		dc.w	0
IntReqR		dc.w	0
DmaConR		dc.w	0
AdkConR		dc.w	0
SysStack	dc.l	0
Int3Save	dc.l	0
GfxBase		dc.l	0
OldCopper	dc.l	0
OldView		dc.l	0
VectorBase	dc.l	0
Colormap	dc.w	0



