org $74300
load $74300

open = -30
close = -36
mode_old = 1005
mode_new = 1006
execbase = 4
openlib = -408
closelib = -414
read = -42

DATA   = $050000
MT_SAMPLEINFO = $62000

AUD0LCH= $DFF0A0
AUD0LCL= $DFF0A2
AUD0LEN= $DFF0A4
AUD0PER= $DFF0A6
AUD0VOL= $DFF0A8
AYD0DAT= $DFF0AA
AUD0LC = $DFF0A0
SET    = $08000
CLEAR  = 0
AUD0EN = $01
DMAEN  = $0200
DMACON  = $DFF096
COPPERDMA = $80
SETBIT    = $8000
BPLCON0 = $DFF100
BPLCON1 = $DFF102
BPLCON2 = $DFF104
BPL1MOD = $DFF108
DDFSTRT = $DFF092
DDFSTOP = $DFF094
DIWSTRT = $DFF08E
DIWSTOP = $DFF090
VPOSR   = $DFF004
COLOR00 = $DFF180
COLOR01 = $DFF182
COLOR02 = $DFF184
COLOR03 = $DFF186

run:
	MOVE.L EXECBASE,A6
	JSR -132(A6)

	BSR SETDISP
	BSR GETGFXBASE
	BSR STARTCOPPER
	
MAIN:
	MOVE.B $DFF006,D0
	CMPI.B #$10,D0
	BNE MAIN
	ANDI.B #1,$DFF005
	BNE MAIN

	BSR SPSCROLL
	BSR SCBPL
	BSR SPSCROLL
	BSR SPRMV

	ANDI.B #64,$BFE001
	BNE MAIN

	MOVE.L EXECBASE,A6
	JSR -138(A6)

	MOVE.W #COPPERDMA,DMACON
	MOVE.L COPADR,A0
	MOVE.L OLDLIST,(A0)
	MOVE.W #SETBIT+COPPERDMA,DMACON
	MOVE.W #CLEAR+AUD0EN,DMACON

	RTS
EVEN
COPADR: DC.L 0
OLDLIST: DC.L 0
HST:	 DC.L 1

SCBPL:
	LEA SCVAL,A0
	ADDI.W #$44,2(A0)
	CMPI.W #$0110,2(A0)
	BEQ CADR
	RTS
	CADR:
	MOVE.W #$0,2(A0)
	LEA SCADRS,A0
	SUBI.W #$2,6(A0)
	SUBI.W #$2,14(A0)
	SUBI.W #$2,22(A0)
	CMPI.W #$5700,6(A0)
	BEQ NULSTL
	RTS
	NULSTL:
	MOVE.W #$5712,6(A0)
	MOVE.W #$9F12,14(A0)
	MOVE.W #$E712,22(A0) 
	RTS

SPRMV:
	SUBI.L #$1,HST
	BEQ SPRMVOK
	RTS
	SPRMVOK:
	MOVE.L #$1,HST
	LEA SPPOSTABEL,A0	
	LEA POSTABEL,A5
	MOVE.L #17,D0
	LEA $73BC8,A2
	LEA $73F2C,A3

	GPS:
	ADDI.B #$2,(A0)
	CMPI.B #178,(A0)
	BNE PIT1OK
	MOVE.B #$0,(A0)
	PIT1OK:
	CLR.L D3
	MOVE.B (A0),D3
	CLR.L D2
	MOVE.L D3,A4
	MOVE.W (A5,A4),D2
	MOVE.L #$2,D1
	DIVU D1,D2
	ADDI.B #$40,D2
	MOVE.B D2,1(A2) 
	MOVE.B #$15,D1
	SUBI.B D2,D1
	MOVE.B D1,1(A3)
	
	ADDI.L #$30,A2
	ADDI.L #$30,A3
	ADDI.L #$1,A0
	DBRA D0,GPS
	RTS	

EVEN
SPPOSTABEL:	DC.B 0,8,16,24,32,40,48,56,64,72,80,88,96,104,112
		DC.B 120,128,136,144,152,160,168,176

EVEN
SPSCROLL:
	SUBI.L #$1,SMTEL
	BNE CHAR_OK
	MOVE.L #$10,SMTEL
	LEA $73700,A0
	ADDI.L #$468,A0
	LEA $72F00,A1
	MOVE.L CHRTEL,A2
	ADDI.L #$1,CHRTEL
	CLR.L D0
	MOVE.B (A2),D0
	CMPI.B #$FF,D0
	BNE ASCII_OK		
	MOVE.L #SCTEXT,CHRTEL
	MOVE.B SCTEXT,D0
	ASCII_OK:
	SUBI.B #32,D0
	CLR.L D1
	MOVE.W #32,D1
	MULS D1,D0
	ADDI.L D0,A1
	MOVE.L #15,D2
	W_CHAR:
	MOVE.W (A1)+,(A0)
	ADDI.L #$4,A0
	DBRA D2,W_CHAR
	
	CHAR_OK:
	LEA $73700,A0
	ADDI.L #$4,A0
	MOVE.L #300,D0
	SMOOTH_SCROLL:
	MOVE.W 4(A0),(A0)
	ADDI.L #$4,A0
	DBRA D0,SMOOTH_SCROLL

	RTS
	
EVEN	
	
SMTEL:	DC.L 1
CHRTEL:	DC.L SCTEXT
SCTEXT:	DC.B " ONCE AGAIN....    HELLO !! AND WELCOME TO "
	DC.B "ANOTHER DEMO BY THE VISITORS. THIS DEMOCOLL"
	DC.B "ECTION MIGHT BE THE LAST FOR SOME TIME, BUT"
	DC.B " DON'T WORRY, WI'LL BE BACK, WITH SOME REAL"
	DC.B " SUPER DEMOS....       LOOK OUT FOR THE T.A"
	DC.B ".M DISK, A DISK PACKED WITH EVERY PROGRAM Y"
	DC.B "OU NEED TO PACK YOUR INTROS TOGETHER !!    "
	DC.B "WELL I THINK IT'S TIME FOR THE UPDATED GREE"
	DC.B "TINGS...   THE VISITORS SENDS OVERALL-SPACE"
	DC.B "-WORLDWIDE PICKABOOS TO: "
	DC.B " == ACKERLIGHT ==   == AXENON ==   GOOFY CR"
	DC.B "ACKINGS ==   == REFLEX ==   == THE DESTROYE"
	DC.B "R TEAM ==   == THE ELECTRONIC BOYS ==   == "
	DC.B "THE FIANL SQUADRON INTERNATIONAL ==   == TH"
	DC.B "E NEW ACES ==   == UNITED CRACKERS ==   END"
	DC.B " OF PICKABOOS.            THAT JUST ABOUT D"
	DC.B "OES IT FOR NOW, SO BYE...                  "
	DC.B " 9876543210"
	DC.B $FF
EVEN	
SETDISP:	
	MOVE.W #$1200,BPLCON0
	MOVE.W #0,BPLCON1
	MOVE.W #0,BPL1MOD
	MOVE.W #$0028,DDFSTRT
	MOVE.W #$00D8,DDFSTOP
	MOVE.W #$1C71,DIWSTRT
	MOVE.W #$3BD1,DIWSTOP
	MOVE.W #$0F00,COLOR00
	MOVE.W #$0FF0,COLOR01
	
	RTS

STARTCOPPER:
	
	MOVE.L GFXBASE,A0
	ADD.L #$32,A0
	MOVE.L A0,COPADR
	MOVE.L (A0),OLDLIST
	MOVE.W #COPPERDMA,DMACON
	MOVE.L #COPPERLIST,(A0)
	MOVE.W #SETBIT+COPPERDMA,DMACON
	RTS

GETGFXBASE:

	MOVE.L EXECBASE,A6
	LEA GFXNAME,A1
	JSR -408(A6)
	MOVE.L D0,GFXBASE
	RTS



AUDPL:	LEA DATA,a0
        MOVE.L a0,AUD0LC
        MOVE.W #$8d00,AUD0LEN
        MOVE.W #64,AUD0VOL
        MOVE.W #400,AUD0PER
        MOVE.W #SET+DMAEN+AUD0EN,DMACON
RTS

LOAD:	
	move.l execbase,a6
	lea dosname,a1
	moveq #0,d0
	jsr openlib(a6)
	move.l d0,dosbase

openfile:
	move.l dosbase,a6
	move.l #filename,d1
	move.l #mode_old,d2
	jsr open(a6)
	move.l d0,filehd

	move.l #$40000,d2
	move.l dosbase,a6
	move.l filehd,d1
	move.l #$ffffff,d3
	jsr read(a6)

closefile:
	move.l dosbase,a6
	move.l filehd,d1
	jsr close(a6)

	move.l execbase,a6
	move.l dosbase,a1
	jsr closelib(a6)

rts

even
filehd: dc.l 0
filename: dc.b "df0:ISH-BANE",0
even
dosname: dc.b "dos.library",0
even
dosbase: dc.l 0
even


GFXNAME:	DC.B "graphics.library",0
EVEN
GFXBASE: 	DC.L 0
EVEN

COPPERLIST:
	
	DC.W $0100,$3200

SCADRS:
	DC.W $00E0,$0006
	DC.W $00E2,$5712
	DC.W $00E4,$0006
	DC.W $00E6,$9f12
	DC.W $00E8,$0006
	DC.W $00EA,$e712

SCVAL:	DC.W $0102,$0000

	DC.W $0108,$0012
	DC.W $010A,$0012
	
	DC.W $0124,$0007
	DC.W $0126,$3700
	DC.W $0120,$0007
	DC.W $0122,$3BC8
	DC.W $0128,$0007
	DC.W $012A,$3F2C

	DC.W $0180,$000
	DC.W $0182,$004
	DC.W $0184,$115
	DC.W $0186,$227
	DC.W $0188,$448
	DC.W $018A,$669
	DC.W $018C,$99B
	DC.W $018E,$CCC

	DC.W $01A2,$0FF0
	DC.W $01A4,$0088
	DC.W $01A6,$0044
	DC.W $01AA,$0FF0
	DC.W $01AC,$0088
	DC.W $01AE,$0044

	DC.W $FFFF,$FFFE


EVEN
POSTABEL:
	DC.W 0,1,1,2
	DC.W 3,4,5,6,8,10,11,13,16,18,21,23
	DC.W 26,29,32,36,39,43,46,50,54,58,62,67,71
	DC.W 75,80,85,89,94,99,104,109,114,119,124,130,135,140,145,150
	DC.W 155,160,165,170,176,181,186,191,196,201,206,211,215,220
	DC.W 225,229,233,238,242,246,250,254,257,261,264,268,271,274
	DC.W 277,279,282,284,287,289,290,292,294,295,296,297,298,299
	DC.W 299,300

EVEN
***********************************
***********************************
**                               **
** SoundTracker V2.0 Playroutine **
**                               **
**   Coding : The Exterminator   **
**                               **
**     © The Jungle Command      **
**                               **
***********************************
***********************************



mt_speed=$1f4

mt_init:
move.l		#$50000,mt_sample1
move.l		#$51400,mt_sample2
move.l		#$53b00,mt_sample3
move.l		#$56000,mt_sample4
move.l		#$57000,mt_sample5
move.l		#$59700,mt_sample6
move.l		#$5ad00,mt_sample7
move.l		#$5c800,mt_sample8
move.l		#$50000,mt_sample9
move.l		#$50000,mt_sample10
move.l		#$5e200,mt_sample11
move.l		#$5ee00,mt_sample12
move.l		#$5fc00,mt_sample13
move.l		#$60400,mt_sample14
move.l		#$61400,mt_sample15

move.l		#mt_sample1,a0
clr.l		d0
mt_clear:
move.l		(a0,d0),a1
clr.l		(a1)
addq		#4,d0
cmp.l		#$3c,d0
bne.s		mt_clear

move.w		#0,$dff0a8
move.w		#0,$dff0b8
move.w		#0,$dff0c8
move.w		#0,$dff0d8
eor.w		#$c000,mt_voice0+12
clr.l		mt_partnrplay
clr.l		mt_partnote
clr.l		mt_partpoint

move.b		mt_sampleinfo+$1d6,mt_maxpart+1
move.b		mt_sampleinfo+$1d7,mt_kn1+1
rts

mt_music:
addq.l		#1,mt_counter
cmp.l		#6,mt_counter
bne.s		mt_notsix
clr.l		mt_counter
bra.L		mt_rout2

mt_notsix:
lea		mt_aud1temp,a6
tst.b		3(a6)
beq.s		mt_arp1
move.l		#$dff0a0,a5		
bsr.s		mt_arprout

mt_arp1:
lea		mt_aud2temp,a6
tst.b		3(a6)
beq.s		mt_arp2
move.l		#$dff0b0,a5
bsr.s		mt_arprout

mt_arp2:
lea		mt_aud3temp,a6
tst.b		3(a6)
beq.s		mt_arp3
move.l		#$dff0c0,a5
bsr.s		mt_arprout

mt_arp3:
lea		mt_aud4temp,a6
tst.b		3(a6)
beq.s		mt_arp4
move.l		#$dff0d0,a5
bsr.s		mt_arprout
mt_arp4:
bra.L		mt_stop


mt_arprout:
tst.w	24(a6)
beq.s	mt_noslide

clr.w	d0
move.b	25(a6),d0
lsr.b	#4,d0
tst.b	d0
beq.s	mt_voldwn2
bsr.L	mt_pushvol1
bra.s	mt_noslide

mt_voldwn2:
clr.w	d0
move.b	25(a6),d0
bsr.L	mt_pushvol2

mt_noslide:
move.b	2(a6),d0
and.b	#$0f,d0
tst.b	d0
beq.L	mt_arpegrt
cmp.b	#3,d0
beq.L	mt_arpegrt
cmp.b	#4,d0
beq.L	mt_arpegrt
cmp.b	#5,d0
beq.L	mt_arpegrt
cmp.b	#1,d0
beq.s	mt_portup
cmp.b	#6,d0
beq.s	mt_portup
cmp.b	#7,d0
beq.s	mt_portup
cmp.b	#8,d0
beq.s	mt_portup
cmp.b	#2,d0
beq.s	mt_portdwn
cmp.b	#9,d0
beq.s	mt_portdwn
cmp.b	#10,d0
beq.s	mt_portdwn
cmp.b	#11,d0
beq.s	mt_portdwn
cmp.b	#13,d0
beq.s	mt_volup
rts

mt_portup:
clr.w	d0
move.b	3(a6),d0
sub.w	d0,22(a6)
cmp.w	#$71,22(a6)
bpl.s	mt_ok1
move.w	#$71,22(a6)
mt_ok1:
move.w	22(a6),6(a5)
rts

mt_portdwn:
clr.w	d0
move.b	3(a6),d0
add.w	d0,22(a6)
cmp.w	#$358,22(a6)
bmi.s	mt_ok2
move.w	#$358,22(a6)
mt_ok2:
move.w	22(a6),6(a5)
rts

mt_volup:
clr.w	d0
move.b	3(a6),d0
lsr.b	#4,d0
tst.b	d0
beq.s	mt_voldwn
mt_pushvol1:
add.w	d0,$12(a6)
cmp.w	#$40,$12(a6)
bmi.s	mt_ok3
move.w	#$40,$12(a6)
mt_ok3:
move.w	$12(a6),8(a5)
rts

mt_voldwn:
clr.w	d0
move.b	3(a6),d0
mt_pushvol2:
and.b	#$0f,d0
sub.w	d0,$12(a6)
bpl.s	mt_ok4
clr.w	$12(a6)
mt_ok4:
move.w	$12(a6),8(a5)
rts

mt_arpegrt:
cmp.l		#1,mt_counter
beq.s		mt_loop2
cmp.l		#2,mt_counter
beq.s		mt_loop3
cmp.l		#3,mt_counter
beq.s		mt_loop4
cmp.l		#4,mt_counter
beq.s		mt_loop2
cmp.l		#5,mt_counter
beq.s		mt_loop3
rts

mt_loop2:
clr.l		d0
move.b		3(a6),d0
lsr.b		#4,d0
bra.s		mt_cont

mt_loop3:
clr.l		d0
move.b		3(a6),d0
and.b		#$0f,d0
bra.s		mt_cont

mt_loop4:
move.w		16(a6),d2
bra.s		mt_endpart

mt_cont:
lsl.w		#1,d0
clr.l		d1
move.w		16(a6),d1
lea		mt_arpeggio,a0
mt_loop5:
move.w		(a0,d0),d2
cmp.w		(a0),d1
beq.s		mt_endpart
addq.l		#2,a0
bra.s		mt_loop5

mt_endpart:
move.w		d2,6(a5)
rts

mt_rout2:
lea		mt_sampleinfo,a0
move.l		a0,a3
add.l		#$0c,a3
move.l		a0,a2
add.l		#$1d8,a2
add.l		#$258,a0
move.l		mt_partnrplay,d0
clr.l		d1
move.b		(a2,d0),d1
mulu		#$0400,d1
add.l		mt_partnote,d1
move.l		d1,mt_partpoint
clr.w		mt_dmacon

move.l		#$dff0a0,a5
lea		mt_aud1temp,a6
bsr.L		mt_playit

move.l		#$dff0b0,a5
lea		mt_aud2temp,a6
bsr.L		mt_playit

move.l		#$dff0c0,a5
lea		mt_aud3temp,a6
bsr.L		mt_playit

move.l		#$dff0d0,a5
lea		mt_aud4temp,a6
bsr.L		mt_playit

move.l		#mt_speed,d0
mt_rls:
dbf		d0,mt_rls

move.l		#$8000,d0
add.w		mt_dmacon,d0
move.w		d0,$dff096

move.l		#mt_aud4temp,a6
cmp.w		#1,14(a6)
bne.s		mt_voice3
move.l		10(a6),$dff0d0
move.w		#1,$dff0d4
mt_voice3:
move.l		#mt_aud3temp,a6
cmp.w		#1,14(a6)
bne.s		mt_voice2
move.l		10(a6),$dff0c0
move.w		#1,$dff0c4
mt_voice2:
move.l		#mt_aud2temp,a6
cmp.w		#1,14(a6)
bne.s		mt_voice1
move.l		10(a6),$dff0b0
move.w		#1,$dff0b4
mt_voice1:
move.l		#mt_aud1temp,a6
cmp.w		#1,14(a6)
bne.s		mt_voice0
move.l		10(a6),$dff0a0
move.w		#1,$dff0a4

mt_voice0:
lea		mt_modulate,a0
move.l		mt_partnote,d0
lsl.b		#7,d0
add.l		#$10,d0
move.l		d0,mt_partnote
cmp.l		#$400,d0
bne.s		mt_stop
clr.l		mt_partnote
addq.l		#1,mt_partnrplay
clr.l		d0
move.w		mt_maxpart,d0
move.l		mt_partnrplay,d1
cmp.l		d0,d1
bne.s		mt_stop
clr.l		mt_partnrplay
mt_stop:
rts


mt_playit:
move.l		(a0,d1),(a6)
addq.l		#4,d1
clr.l		d2
move.b		2(a6),d2
and.b		#$f0,d2
lsr.b		#4,d2
tst.b		d2
beq.s		mt_nosamplechange

clr.l		d3
lea		mt_samples,a1
move.l		d2,d4
mulu		#4,d2
mulu		#$1e,d4
move.l		(a1,d2),4(a6)
move.w		(a3,d4),8(a6)
move.w		2(a3,d4),18(a6)
move.w		4(a3,d4),d3
tst.w		d3
beq.s		mt_displace
move.l		4(a6),d2
add.l		d3,d2
move.l		d2,4(a6)
move.l		d2,10(a6)
move.w		6(a3,d4),8(a6)
move.w		6(a3,d4),14(a6)
move.w		18(a6),8(a5)
bra.s		mt_nosamplechange
mt_displace:
move.l		4(a6),d2
add.l		d3,d2
move.l		d2,10(a6)
move.w		6(a3,d4),14(a6)
move.w		18(a6),8(a5)
mt_nosamplechange:
tst.w		(a6)
beq.s		mt_retrout
move.w		(a6),16(a6)
move.w		20(a6),$dff096
move.l		4(a6),(a5)
move.w		8(a6),4(a5)
move.w		(a6),6(a5)
move.w		20(a6),d0
or.w		d0,mt_dmacon

mt_retrout:
move.w	20(a6),d0
lsl.w	#4,d0
add.w	20(a6),d0
move.w	d0,$dff09e

tst.w	(a6)
beq.s	mt_nonewper
move.w	(a6),22(a6)
mt_nonewper:

move.b	2(a6),d0
and.b	#$0f,d0
cmp.b	#14,d0
bne.s	mt_noset
move.w	2(a6),24(a6)
rts
mt_noset:
tst.b	3(a6)
bne.s	mt_noclr
clr.w	24(a6)
mt_noclr:
cmp.b	#3,d0
beq.s	mt_modvol
cmp.b	#6,d0
beq.s	mt_modvol
cmp.b	#9,d0
beq.s	mt_modvol
cmp.b	#4,d0
beq.s	mt_modper
cmp.b	#7,d0
beq.s	mt_modper
cmp.b	#10,d0
beq.s	mt_modper
cmp.b	#5,d0
beq.s	mt_modvolper
cmp.b	#8,d0
beq.s	mt_modvolper
cmp.b	#11,d0
beq.s	mt_modvolper
cmp.b	#12,d0
bne.s	mt_nochnge
move.b	3(a6),8(a5)
mt_nochnge:
rts

mt_modvol:
move.w	20(a6),d0
bra.s	mt_push

mt_modper:
move.w	20(a6),d0
lsl.w	#4,d0
bra.s	mt_push

mt_modvolper:
move.w	20(a6),d0
lsl.w	#4,d0
add.w	20(a6),d0

mt_push:
add.w	#$8000,d0
move.w	d0,$dff09e
rts


mt_aud1temp:
dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000
dc.w $0000,$0000,$0001,$0000,$0000
mt_aud2temp:
dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000
dc.w $0000,$0000,$0002,$0000,$0000
mt_aud3temp:
dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000
dc.w $0000,$0000,$0004,$0000,$0000
mt_aud4temp:
dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000
dc.w $0000,$0000,$0008,$0000,$0000
mt_partnote:
dc.l 0
mt_partnrplay:
dc.l 0
mt_counter:
dc.l 0
mt_partpoint:
dc.l 0
mt_samples:
dc.w $0000,$0000
mt_sample1:
dc.l 0
mt_sample2:
dc.l 0
mt_sample3:
dc.l 0
mt_sample4:
dc.l 0
mt_sample5:
dc.l 0
mt_sample6:
dc.l 0
mt_sample7:
dc.l 0
mt_sample8:
dc.l 0
mt_sample9:
dc.l 0
mt_sample10:
dc.l 0
mt_sample11:
dc.l 0
mt_sample12:
dc.l 0
mt_sample13:
dc.l 0
mt_sample14:
dc.l 0
mt_sample15:
dc.l 0
mt_maxpart:
dc.w $0000
mt_kn1:
dc.w $0000
mt_dmacon:
dc.w $0000

mt_modulate:
dc.w $0c39,$0039,$00bf,$ec01,$6630,$0839,$0007,$00bf
dc.w $e001,$6626,$2c79,$0000,$0004,$43fa,$0020,$4eae
dc.w $fe68,$2c40,$4280,$41fa,$0026,$223c,$0000,$0032
dc.w $4eae,$ffa6,$60ee,$0000,$0000,$4e75,$696e,$7475
dc.w $6974,$696f,$6e2e,$6c69,$6272,$6172,$7900,$0104
dc.w $1753,$6f75,$6e64,$5472,$6163,$6b65,$7220,$5632
dc.w $0063,$00f0,$20a9,$2054,$6865,$204a,$756e,$676c
dc.w $6520,$436f,$6d6d,$616e,$6400,$0000

mt_arpeggio:
dc.w $0358,$0328,$02fa,$02d0,$02a6,$0280,$025c
dc.w $023a,$021a,$01fc,$01e0,$01c5,$01ac,$0194,$017d
dc.w $0168,$0153,$0140,$012e,$011d,$010d,$00fe,$00f0
dc.w $00e2,$00d6,$00ca,$00be,$00b4,$00aa,$00a0,$0097
dc.w $008f,$0087,$007f,$0078,$0071,$0000,$0000,$0000

