; Hard-Trackdisk Example Routine - Loads sectors 880 to 883 off drive 0
; into $c0000 with an MFM buffer at $f0000
; 
; No interrupts/exceptions are interfered with, and code is fully multi-
; taskable (within a Hardware or System based program)
;
; This is not an interupt-driven routine. nor will it ever be, i couldn't
; be fucked to do it...  but wait n'see,  i may have something sticky up
; my sleeve.
;
; Coded by psyKo, extreme hassle and lots of time have gone into this fucker
; so i hope you spread 4 all 2 c..          (retro corp production, 19/5/93)

; Note:  This is the new-improved meatier/chunkier version..
; New control codes for the NuTrakker Segment are:

; d0 = 0   -   Find available drives
; d0 = 1   -   (new function)  Reset drive (d1=drive) head to track zero
; d0 = 2   -   Read Sectors

; The Zero Head function you should use before you load a set of sectors,
; NOTE:  you dont have to do it every time you access the disk, just use
; it in initialization, and after a disk-change, or before a mass-multiple
; sector read (several Trakker Read Calls)...  i hope it worx

; FINAL manufacture by Mr. Spillage 21-5-93

	Opt	c-
	Section	"HardNuTrackDisk Example",Code_c

	IncDir	Df1:

Drive	= 1

Start	Movem.l	d0-d7/a0-a6,-(sp) 
	Bsr	KillSys	  
	
	Lea	CopperList(pc),a0 
	Lea	HardWare,a6	  
	Move.l	a0,Cop1Lc(a6)	  
	Move.w	#$83c0,DMACon(a6)

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

	Moveq	#0,d0	; Setup Code
	Bsr	TrackDisk+$20	; Find Active Drives	

; d0 - is returned with active disk drives, bits 0-3 represent drives 0-3

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

	Moveq	#1,d0	; Zero Head Code
	Moveq	#Drive,d1	; Zero drive number
	Bsr	TrackDisk+$20	; Reset Track.
	
	Moveq	#2,d0	; Read Sector Code
	Moveq	#Drive,d1	; Drive Number
	Move.w	#880,d2	; Start Sector 880
	Move.w	#883,d3	; End Sector 883
	Lea	$c5000,a0	; Data Address
	Lea	$f0000,a1	; MFM Buffer pointer
	Bsr	TrackDisk+$20	; Read Sectors

	Moveq	#2,d0	; Read Sector Code
	Moveq	#Drive,d1	; Drive Number
	Move.w	#0,d2	; Start Sector 0
	Move.w	#3,d3	; End Sector 3
	Lea	$c5800,a0	; Data Address
	Lea	$f0000,a1	; MFM Buffer pointer
	Bsr	TrackDisk+$20	; Read Sectors

	Moveq	#2,d0	; Read Sector Code
	Moveq	#Drive,d1	; Drive Number
	Move.w	#1400,d2	; Start Sector 0
	Move.w	#1403,d3	; End Sector 3
	Lea	$c5c00,a0	; Data Address
	Lea	$f0000,a1	; MFM Buffer pointer
	Bsr	TrackDisk+$20	; Read Sectors

; read those fucking sectors in from 880 to 883 off drive 1, fucking less
; hassle than fucking trackdisk.device, and no fucking Amiga fucking DOS
; to share your disgusting fucking memory fucking with...

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

; pleese, just dont ask why i'm fucking pissed off..

	Bsr	ReturnSys	  
	Movem.l	(sp)+,d0-d7/a0-a6 
	Moveq	#0,d0	  
	Rts

KillSys	Bsr.s	SysWait	

	Move.l	$4,a6	
	Lea	GFXName(pc),a1	
	Moveq	#0,d0	
	Jsr	-552(a6)	
		
	Lea	OldCop1(pc),a5
	Move.l	$26(a0),$0(a5)	
	Move.l	$32(a0),$4(a5)	
	
	Lea	HardWare,a6
	Move.w	IntEnaR(a6),d0	
	Move.w	DMAConR(a6),d1  
	Or.w	#$8000,d0	
	And.w	#$03ff,d1	
	Or.w	#$8000,d1	
	Move.w	d0,$8(a5)	
	Move.w	d1,$a(a5)	
	
	Move.w	#$7fff,IntEna(a6) 
	Move.w	#$7fff,DMACon(a6) 
	Rts

SysWait	Move.w	#15,d7	
SysWaitLoop	Move.l	#$05000,d1	
	Bsr.s	WaitVBL	
	Bsr.s	DoWaitVBL	
	Dbf	d7,SysWaitLoop	
	Rts

DoWaitVBL	Move.l	#$03000,d1	
WaitVBL	Movem.l	d0-d1/a6,-(sp)	
	Lea	HardWare,a6	
WaitVBLLoop	Move.l	VPosR(a6),d0	
	And.l	#$1ff00,d0	
	Cmp.l	d1,d0	
	Bne.s	WaitVBLLoop	
	Movem.l	(sp)+,d0-d1/a6	
	Rts		

ReturnSys	Lea	HardWare,a6	
	Move.w	OldIntEna(pc),IntEna(a6)
	Move.w	OldDMACon(pc),DMACon(a6)
	Move.l	OldCop1(pc),Cop1lc(a6)
	Move.l	OldCop2(pc),Cop2lc(a6)
	Rts

GFXName	Dc.b	"graphics.library",0
	Even
OldCop1	Dc.l	0	
OldCop2	Dc.l	0	
OldIntEna	Dc.w	0	
OldDmaCon	Dc.w	0	
Screen	Dc.l	$c0000	

Cmv	Macro
	Dc.w	\2,\1
	EndM
	
Cwt	Macro
	Dc.w	(\1*$100)+$01,$fffe
	EndM	

Pal	Macro
	Dc.w	$ffe1,$fffe
	EndM	

EndCop	Macro
	Dc.w	$ffff,$fffe
	EndM	

CopperList	Cwt	$15	
	Cmv	$0200,BplCon0	
	Cmv	$00bb,BplCon1	
	Cmv	$000a,BplCon2	
	Cmv	$0034,DdfStrt	
	Cmv	$00c8,DdfStop	
	Cmv	$1681,DiwStrt	
	Cmv	$36c1,DiwStop
	Cmv	$0,BplMod1	
	Cmv	$0,BplMod2	
	
CopperCols	Cwt	$25		
	Cmv	$0,Color00
	Cmv	$0,Color01
	Cmv	$0,Color02
	Cmv	$0,Color03
	Cmv	$0,Color04
	Cmv	$0,Color05
	Cmv	$0,Color06
	Cmv	$0,Color07
	Cmv	$0,Color08
	Cmv	$0,Color09
	Cmv	$0,Color10
	Cmv	$0,Color11
	Cmv	$0,Color12
	Cmv	$0,Color13
	Cmv	$0,Color14
	Cmv	$0,Color15
	Cmv	$0,Color16
	Cmv	$0,Color17
	Cmv	$0,Color18
	Cmv	$0,Color19
	Cmv	$0,Color20
	Cmv	$0,Color21
	Cmv	$0,Color22
	Cmv	$0,Color23
	Cmv	$0,Color24
	Cmv	$0,Color25
	Cmv	$0,Color26
	Cmv	$0,Color27
	Cmv	$0,Color28
	Cmv	$0,Color29
	Cmv	$0,Color30
	Cmv	$0,Color31
	
CopperBPLS	Cmv	$c,BplPt0h	
	Cmv	$0,BplPt0l	
	Cmv	$0,BplPt1h	
	Cmv	$0,BplPt1l	
	Cmv	$0,BplPt2h	
	Cmv	$0,BplPt2l	
	Cmv	$0,BplPt3h	
	Cmv	$0,BplPt3l	
	Cmv	$0,BplPt4h
	Cmv	$0,BplPt4l 
	
	Cwt	$28	
	Cmv	$1200,BplCon0	

	EndCop

TrackDisk	Incbin	MyMateMarmite/NuTrakkerFINAL-Seg

****Custom Chip Registers****

Hardware	= $Dff000

;Control Registers

Dmaconr	= $002
Vposr	= $004
Vhposr	= $006
Joy0dat	= $00A
Joy1dat	= $00C
Clxdat	= $00E
Intenar	= $01C
Intereqr	= $01E
Copcon	= $02E

;Blitter Registers

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
Bltcmod	= $060
Bltbmod	= $062
Bltamod	= $064
Bltdmod	= $066
Bltcdat	= $070
Bltbdat	= $072
Bltadat	= $074

;Copper Registers

Cop1lc	= $080
Cop1lch	= $080
Cop1lcl	= $082
Cop2lc	= $084
Cop2lch	= $084
Cop2lcl	= $086
Copjmp1	= $088
Copjmp2	= $08A
Diwstrt	= $08E
Diwstop	= $090
Ddfstrt	= $092
Ddfstop	= $094
Dmacon	= $096
Clxcon	= $098
Intena	= $09A
Intreq	= $09C

;BitPlane Registers 

BplCon0	= $100
BplCon1	= $102
BplCon2	= $104
BplMod1	= $108
BplMod2	= $10a

BplPt0h	= $0e0
BplPt0l	= $0e2
BplPt1h	= $0e4
BplPt1l	= $0e6
BplPt2h	= $0e8
BplPt2l	= $0ea
BplPt3h	= $0ec
BplPt3l	= $0ee
BplPt4h	= $0f0
BplPt4l	= $0f2
BplPt5h	= $0f4
BplPt5l	= $0f6

;Colour Registers

Color00	= $180
Color01	= $182
Color02	= $184
Color03	= $186
Color04	= $188
Color05	= $18a
Color06	= $18c
Color07	= $18e
Color08	= $190
Color09	= $192
Color10	= $194
Color11	= $196
Color12	= $198
Color13 	= $19a
Color14 	= $19c
Color15 	= $19e
Color16 	= $1a0
Color17 	= $1a2
Color18 	= $1a4
Color19 	= $1a6
Color20 	= $1a8
Color21 	= $1aa
Color22 	= $1ac
Color23 	= $1ae
Color24 	= $1b0
Color25 	= $1b2
Color26 	= $1b4
Color27 	= $1b6
Color28 	= $1b8
Color29 	= $1ba
Color30 	= $1bc
Color31 	= $1be

EcsNop	= $1fe









