jmp 	run

**** MKBS1-README  


EXECBASE=	$04

DMACON=		$dff096
ADKCON=		$dff09e

AUD0LCH=	$DFF0A0
AUD0LCL=	$DFF0A2
AUD0LEN=	$DFF0A4
AUD0PER=	$DFF0A6
AUD0VOL=	$DFF0A8

AUD1LCH=	$DFF0B0
AUD1LCL=	$DFF0B2
AUD1LEN=	$DFF0B4
AUD1PER=	$DFF0B6
AUD1VOL=	$DFF0B8

AUD2LCH=	$DFF0C0
AUD2LCL=	$DFF0C2
AUD2LEN=	$DFF0C4
AUD2PER=	$DFF0C6
AUD2VOL=	$DFF0C8

AUD3LCH=	$DFF0D0
AUD3LCL=	$DFF0D2
AUD3LEN=	$DFF0D4
AUD3PER=	$DFF0D6
AUD3VOL=	$DFF0D8


OpenLib=	-408
CloseLib=	-414

OpenDevice=	-444
CloseDevice=	-450

Open=		-30
Close=		-36

Write=		-48
Read=		-42

Lock=		-84
UnLock=		-90

CreateDir=	-120
CurrentDir=	-126
Delay=		-198

DoIo=		-456
FindTask=	-294

AddPort=	-354
RemPort=	-360

AllocMem=	-198
Freemem=	-210

run:

subq	#01,d0
beq	NoPars

SearchArgs:

cmp.b	#$20,(a0)+
bne	FoundArgs
dbra	d0,SearchArgs

FoundArgs:

move.b	-(a0),d0	; Compensate for the (a0)+
move.b	d0,PathFileName+2
move.b	d0,DirName+2
sub.b	#'0',d0
move.b	d0,DriveNumber

NoPars:

; playmusicroutine

Mus1Mem:
move.l	EXECBASE,a6
move.l	#Mus1TabSize,d0
move.l	#$10002,d1
jsr	AllocMem(a6)
move.l	d0,Mus1TabAddr
beq	NoMus1Mem
move.l	d0,a4
lea	Mus1TabStrt,a3
move.l	#Mus1TabSize,d3		;counter

Mus1Copy:
move.b	(a3)+,(a4)+
sub.l	#1,d3
bne	Mus1Copy

Mod1Mem:
move.l	EXECBASE,a6
move.l	#Mod1TabSize,d0
move.l	#$10002,d1
jsr	AllocMem(a6)
move.l	d0,Mod1TabAddr
beq	NoMod1Mem
move.l	d0,a4
lea	Mod1TabStrt,a3
move.l	#Mod1TabSize,d3		;counter

Mod1Copy:
move.b	(a3)+,(a4)+
sub.l	#1,d3
bne	Mod1Copy

Mus2Mem:
move.l	EXECBASE,a6
move.l	#Mus2TabSize,d0
move.l	#$10002,d1
jsr	AllocMem(a6)
move.l	d0,Mus2TabAddr
beq	NoMus2Mem
move.l	d0,a4
lea	Mus2TabStrt,a3
move.l	#Mus2TabSize,d3		;counter

Mus2Copy:
move.b	(a3)+,(a4)+
sub.l	#1,d3
bne	Mus2Copy

Mod2Mem:
move.l	EXECBASE,a6
move.l	#Mod2TabSize,d0
move.l	#$10002,d1
jsr	AllocMem(a6)
move.l	d0,Mod2TabAddr
beq	NoMod2Mem
move.l	d0,a4
lea	Mod2TabStrt,a3
move.l	#Mod2TabSize,d3		;counter

Mod2Copy:
move.b	(a3)+,(a4)+
sub.l	#1,d3
bne	Mod2Copy

move.l	Mus1TabAddr,AUD1LCH
move.w	#Mus1TabSize/2,AUD1LEN
move.w	#64,AUD1VOL

move.l	Mod1TabAddr,AUD0LCH
move.w	#Mod1TabSize/2,AUD0LEN
move.w	#32000,AUD0PER

move.l	Mus2TabAddr,AUD3LCH
move.w	#Mus2TabSize/2,AUD3LEN
move.w	#64,AUD3VOL

move.l	Mod2TabAddr,AUD2LCH
move.w	#Mod2TabSize/2,AUD2LEN
move.w	#64000,AUD2PER

move.w	#$00ff,ADKCON	;reset
move.w	#$8050,ADKCON

; bit 4 : channel 0 modulates period of channel 1
; bit 6 : channel 2 modulates period of channel 3

move.w	#$820f,DMACON	; start channel 0,1,2,3

; end of playmusicroutine

move.l	EXECBASE,a6
lea	dosname,a1
jsr	OpenLib(a6)
beq	NoDosBase
move.l	d0,DosBase

move.l	DosBase,a6
move.l	#fenstername,d1
move.l	#1005,d2	; Modus OLD
jsr	Open(a6)
beq	NoConHandle
move.l	d0,conhandle


;move.l	DosBase,a6
move.l	conhandle,d1
move.l	#fenstertext1,d2
move.l	#fenstertext1end-fenstertext1,d3
jsr	Write(a6)

;move.l	DosBase,a6
move.l	conhandle,d1
move.l	#PathFileName,d2
move.l	#PathFileNameEnd-PathFileName,d3
jsr	Write(a6)

;move.l	DosBase,a6
move.l	conhandle,d1
move.l	#fenstertext2,d2
move.l	#fenstertext2end-fenstertext2,d3
jsr	Write(a6)

;move.l	DosBase,a6
move.l	conhandle,d1
move.l	#FileText,d2
move.l	#FileTextEnd-FileText,d3
jsr	Write(a6)

;move.l	DosBase,a6
move.l	conhandle,d1
move.l	#fenstertext3,d2
move.l	#fenstertext3end-fenstertext3,d3
jsr	Write(a6)

LmbRmbTest:
btst	#10,$dff016
beq	CloseConsole
btst	#6,$bfe001
bne	LmbRmbTest

CreateFile:

MakeSubDir:


;move.l	DosBase,a6
move.l	#DirName,d1
jsr	CreateDir(a6)
beq	CloseConsole
move.l	d0,DirLock

; Dir Lock in D1
jsr	CurrentDir(a6)
move.l	d0,OldLock

;move.l	DosBase,a6
move.l	#FileName,d1
move.l	#1006,d2	;Mode_Write
jsr	Open(a6)
beq	CloseConsole
move.l	d0,FileHandle

;move.l	DosBase,a6
move.l	FileHandle,d1
move.l	#FileText,d2
move.l	#FileTextEnd-FileText,d3
jsr	Write(a6)
cmp.l	#-1,d0
beq	CloseFile	; Couldn't write to file so now close it
move.b	#1,FileWrittenFlag	; File O.K.

CloseFile:
;move.l	DosBase,a6
move.l	FileHandle,d1
jsr	Close(a6)

move.l	OldLock,d1
jsr	CurrentDir(a6)

;move.l	DosBase,a6
move.l	DirLock,d1
jsr	UnLock(a6)

cmp.b	#1,FileWrittenFlag
bne 	CloseConsole

; Tot HIER O.K.

;TrackDiskDevice routines

;move.l	DosBase,a6
move.l	#PathFileName,d1
move.l	#-2,d2
jsr	Lock(a6)
beq	CloseConsole
move.l	d0,d1	; Copy the BPTR to D1

lsl.l	#2,d0	; Convert Lock BPTR to APTR
move.l	d0,a0
move.l	4(a0),SectorNr	
; Copy FileHeaderBlockNr to SectorNr
beq	NoSectorNr

;move.l	DosBase,a6
; BPTR_Lock already in D1
jsr	UnLock(a6)


OpenTrackDevice:
move.l	EXECBASE,a6
move.l	#512,d0
move.l	#$10002,d1
jsr	AllocMem(a6)
beq	NoDiskBufferMem
move.l	d0,DiskBufferAddr

move.l	EXECBASE,a6
sub.l	a1,a1
jsr	FindTask(a6)
move.l	d0,ReadReply+$10	;Set SigTask

lea 	ReadReply,a1
jsr	AddPort(a6)

lea	DiskIoReq,a1

clr.l	d0
move.b	DriveNumber,d0
clr.l	d1
lea	TrackDiskDevice,a0
move.l	EXECBASE,a6
jsr	OpenDevice(a6)
tst.l	d0
bne	NoTrackDiskDevice

move.l	SectorNr,d0
move.w	#2,d5	;Read
jsr	ReadWriteSector		; d0= sectornr / d5= Command

move.l	DiskBufferAddr,a0
move.l	#$-1,324(a0)		; FileSize in bytes
ori.l	#$01,320(a0)		; ProtectionStatus	
move.l	SectorNr,496(a0)	; Next Block with same hash = ItSelf

CalcCheckSum:
move.l	DiskBufferAddr,a0
move.l	a0,a1
move.l	#$7f,d1
clr.l	d0
move.l	d0,20(a1)
CheckSumLoop:
sub.l	(a0)+,d0
dbf	d1,ChecksumLoop
move.l	d0,20(a1)	; Correct CheckSum value

move.l	SectorNr,d0
move.w	#3,d5		; Write
jsr	ReadWriteSector

lea	DiskIoReq,a1
move.w	#4,28(a1)	; Update
jsr	DoIo(a6)

move.l	DosBase,a6
move.l	#250,d1
jsr	Delay(a6)

;move.l	EXECBASE,a6
;lea	DiskIoReq,a1
;move.w	#5,28(a1)	; Clear
;jsr	DoIo(a6)

;move.l	SectorNr,d0
;move.w	#2,d5	;Read
;jsr	ReadWriteSector

jsr	DriveMotorOff


NoSectorNr:

lea	DiskIoReq,a1
jsr	CloseDevice(a6)

NoTrackDiskDevice:
move.l	EXECBASE,a6
lea	ReadReply,a1
jsr	RemPort(a6)

move.l	DiskBufferAddr,a1
move.l	#512,d0
jsr	FreeMem(a6)


NoDiskBufferMem:
CloseConsole:
move.l	ConHandle,d1
move.l	DosBase,a6
jsr	Close(a6)

NoConHandle:
move.l	EXECBASE,a6
move.l	DosBase,a1
jsr	CloseLib(a6)

NoDosBase:

; stopmusic and FreeMem

move.w	#$0,AUD1VOL
move.w	#$0,AUD3VOL

move.w	#$000f,DMACON	;stop all channels
move.w	#$0050,ADKCON	;reset

move.l	EXECBASE,a6
move.l	#Mod2TabSize,d0
move.l	Mod2TabAddr,a1
jsr	FreeMem(a6)

NoMod2Mem:
move.l	EXECBASE,a6
move.l	#Mus2TabSize,d0
move.l	Mus2TabAddr,a1
jsr	FreeMem(a6)

NoMus2Mem:
move.l	EXECBASE,a6
move.l	#Mod1TabSize,d0
move.l	Mod1TabAddr,a1
jsr	FreeMem(a6)

NoMod1Mem:
move.l	EXECBASE,a6
move.l	#Mus1TabSize,d0
move.l	Mus1TabAddr,a1
jsr	FreeMem(a6)

NoMus1Mem:

move.l	#$0,d0

rts

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


ReadWriteSector:	; subroutine
; d0 = sectornr
; d5 = command
lea	DiskIoReq,a1
move.l	#ReadReply,14(a1)
move.w	d5,28(a1)
move.l	DiskBufferAddr,40(a1)
move.l	#512,36(a1)	;1 sector = lenght
mulu	#512,d0
move.l	d0,44(a1)	; offset
move.l	d0,d2
move.l	EXECBASE,a6
jsr	DoIo(a6)
rts

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

DriveMotorOff:
lea	DiskIoReq,a1
move.w	#9,28(a1)	;TD_MOTOR
move.l	#0,36(a1)	; Motor Off
move.l	EXECBASE,a6
jsr	DoIO(a6)
rts
 

**************
upper:
cmp.b	#'a',d2
blo	upperx
cmp.b	#'z',d2
bhi	upperx
sub	#$20,d2
upperx:
rts


**********************
DosName:	dc.b	'dos.library',0
even
TrackDiskDevice: dc.b	'trackdisk.device',0
even
fenstername:	dc.b	'CON:0/0/640/200/*** MakeBS1-README *** Programmed by AMY PRODUCTIONS ***',0
even
fenstertext1:	dc.b	$9b,"0;33;40m"
	dc.b	$9b,$32,$30,$68	; LF = LF + RT
	dc.b	'INSTRUCTIONS : YOU CAN PUT A DRIVENUMMER ARGUMENT'
	dc.b	' [0,1,2,3] BEHIND THE ',$0a
	dc.b	'PROGRAMNAME TO SELECT THE DESTINATION DRIVE ON '
	dc.b	'WHICH THE SUBDIR & FILE',$a
	dc.b	'WILL BE WRITTEN.',$9b,"0m",$0a,$0a,$0a 
	dc.b	$9b,"1;32;40m",'IF YOU WANT TO CREATE A SUBDIR WITH A '
	dc.b	'PROTECTED FILE CALLED :',$9b,"0m",$0a
fenstertext1end:
even
fenstertext2:	dc.b	$0a,$0a,$9b,"1;32;40m"
	dc.b	'WITH FILETEXT :'
	dc.b	$9b,"0m",$0a
fenstertext2end:
even
fenstertext3:	dc.b	$0a,$0a,$9b,"1;32;40m"
		dc.b	'[ PRESS LEFT MOUSEBUTTON TO CONTINU '
		dc.b	'OR RIGHT MOUSEBUTTON TO EXIT ]'
		dc.b	$9b,"0m",$0a,$9b,$32,$30,$6c ; LF = LF !
fenstertext3end:
even
PathFileName:	dc.b	'df1:        * BAMIGA SECTOR ONE *        /BS1-README',0
PathFileNameEnd:
even
DirName:	dc.b	'df1:        * BAMIGA SECTOR ONE *        ',0
DirNameEnd:
even
FileName:	dc.b	'BS1-README',0
even
FileText:	dc.b	'BAMIGA SECTOR ONE :',$0a,$0a
		dc.b	$9b,"1;33;40m",'POSTBOX 163,',$0a
		dc.b	'B-2018 ANTWERP 14,',$0a
		dc.b	'BELGIUM [EUROPE].',$9b,"0m",$0a,$0a
		dc.b	'REMEMBER : DIAMONDS ARE FOREVER ...',$0a
FileTextEnd:
even

DosBase:	blk.l	1
ConHandle:	blk.l	1
FileHandle:	blk.l	1
FileWrittenFlag:	blk.b 1,0
even
DriveNumber:	blk.b	1,1
even
DiskBufferAddr:	blk.l 	1,0
ReadReply:	blk.l	8,0
even
DiskIoReq:
Message:	blk.b	20,0
Io:		blk.b	12,0
IoReq:		blk.b	16,0
even
SectorNr:	blk.l	1,0
OldLock:	blk.l	1,0
DirLock:	blk.l	1,0

Mod1TabStrt:
         dc.w 508,513,518,522,524,525,524,522,518,513
         dc.w 508,503,498,494,492,491,492,494,498,503
         dc.w 408,413,418,422,424,425,424,422,418,413
         dc.w 408,403,398,394,392,391,392,394,398,303
Mod1TabStop:
Mod1TabSize=      *-Mod1TabStrt

         even
Mus1TabStrt:
         dc.b	0,49,90,117,127,117,90,49,0,-49 
         dc.b	-90,-117,-127,-117,-90,-49
         dc.b	0,39,80,97,117,97,80,39,0,-39 
         dc.b	-80,-97,-117,-97,-80,-39 
Mus1TabStop:
Mus1TabSize= *-Mus1TabStrt

         even
Mod2TabStrt:
         dc.w 408,413,418,422,424,425,424,422,418,413
         dc.w 408,403,398,394,392,391,392,394,398,303
         dc.w 508,513,518,522,524,525,524,522,518,513
         dc.w 508,503,498,494,492,491,492,494,498,503
Mod2TabStop:
Mod2TabSize= *-Mod2TabStrt

         even
Mus2TabStrt:
         dc.b	0,49,90,117,127,117,90,49,0,-49 
         dc.b	-90,-117,-127,-117,-90,-49
         dc.b	0,39,80,97,117,97,80,39,0,-39 
         dc.b	-80,-97,-117,-97,-80,-39 
         dc.b	0,49,90,117,127,117,90,49,0,-49 
Mus2TabStop:
Mus2TabSize= *-Mus2TabStrt

Mod1TabAddr:
         dc.l      0
Mus1TabAddr:
         dc.l      0
Mod2TabAddr:
         dc.l      0
Mus2TabAddr:
         dc.l      0

