jmp 	run

**** MKBS1-README  

CHIPCLEAR=	$00010002

EXECBASE=	$04

DMACON=		$dff096
ADKCON=		$dff09e


OpenLib=	-408
CloseLib=	-414

OpenDevice=	-444
CloseDevice=	-450

Open=		-30
Close=		-36

Write=		-48
Read=		-42

Lock=		-84
UnLock=		-90

DoIo=		-456
FindTask=	-294

AddPort=	-354
RemPort=	-360

AllocMem=	-198
Freemem=	-210


OutPut=		-60

run:

move.l	a0,commpnt
move.l	d0,commlen


move.l	EXECBASE,a6
lea	dosname,a1
clr.l	d0
jsr	OpenLib(a6)
move.l	d0,dosbase
beq	nodos

move.l	dosbase,a6
jsr	OutPut(a6)
move.l	d0,outbase


;TrackDiskDevice routines

SearchFileHeader:
sub.l	#1,commlen
move.l	commpnt,a0
move.l	commlen,d0
clr.l	d2
move.l	d0,d1
subq	#1,d1	; teller = lenght - 1
hashloop:
mulu	#13,d0
move.b	(a0)+,d2
jsr 	upper
add	d2,d0
and	#$7ff,d0
dbra	d1,hashloop

divu	#72,d0
swap	d0
addq	#6,d0
move.w	d0,hash

move.l	#hashtxt,d2
bsr	prtxt
move	hash,d0
bsr	phex


OpenTrackDevice:
	;	move.l	EXECBASE,a6
	;	move.l	#512,d0
	;	move.l	CHIPCLEAR,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
clr.l	d1
lea	TrackDiskDevice,a0
move.l	EXECBASE,a6
jsr	OpenDevice(a6)
tst.l	d0
bne	error

move.l	#880,d0
bsr	loadsec

move.l	#voltxt,d2
bsr	prtxt
move.l	dosbase,a6
move.l	outbase,d1
move.l	#diskbuff + 433,d2
clr.l	d3
move.b	diskbuff + 432,d3
jsr	Write(a6)

lea	diskbuff,a0
clr.l	d0
move.w	hash,d0
lsl	#2,d0
move.l	0(a0,d0),d0
tst.l	d0
beq	none

loadloop:
move.l	d0,sector
jsr	loadsec
move.l	commpnt,a0
lea	diskbuff+432,a1	; name lenght
move.l	commlen,d0
cmp.b	(a1)+,d0	; Lenght same ?
bne	nextsec
subq	#1,d0

nameloop:
move.b	(a1)+,d2
bsr	upper
move.w	d2,d1
move.b	(a0)+,d2
bsr	upper
cmp.b	d1,d2
bne	nextsec
dbra	d0,nameloop
bra	sectorok

nextsec:
move.l	diskbuff + 496,d0
tst.l	d0
bne	loadloop

none:
move.l	#unknown,d2
bsr	prtxt
bra	ende

sectorok:
move.l	#header,d2
bsr	prtxt
move.l	sector,d0
bsr	phex

ende:

move.l	#crtxt,d2
bsr	prtxt

move.l	EXECBASE,a6
lea	DiskIoReq,a1
jsr	CloseDevice(a6)

error:

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


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

nodos:

move.l	#$0,d0

rts

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

loadsec:	; subroutine
lea	DiskIoReq,a1
move.l	#readreply,14(a1)
move.w	#2,28(a1)
move.l	#diskbuff,40(a1)
move.l	#512,36(a1)	;1 sector = lenght
mulu	#512,d0
move.l	d0,44(a1)	; offset
move.l	EXECBASE,a6
jsr	DoIo(a6)

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

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

phex:
lea	outpuff,a0
move.w	d0,d2
move.w	#3,d3
niblop:
rol	#4,d2
move.w	d2,d1
and	#$f,d1
add	#$30,d1
cmp	#'9',d1
bls	nibok
add	#7,d1
nibok:
move.b	d1,(a0)+
dbra	d3,niblop
move.b	#$20,(a0)

move.l	dosbase,a6
move.l	outbase,d1
move.l	#outpuff,d2
move.l	#5,d3
jmp	Write(a6)

prtxt:
move.l	dosbase,a6
move.l	outbase,d1
move.l	#12,d3
jmp	Write(a6)


**************
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

hashtxt:	dc.b	$a,'Hashnum:    '
voltxt:		dc.b	$a,'Volume:     '
unknown:	dc.b	$a,'-unknown-   '
header:		dc.b	$a,'Header:     '
crtxt:		dc.b	'           ',$a
even
outpuff:	blk.b	6
sector:		blk.l	1
counter:	blk.w	1


dosbase:	blk.l	1
outbase:	blk.l	1
hash:		blk.w	1,0
commpnt:	blk.l	1
commlen:	blk.l	1

even
diskbuff:	blk.b 	512,0
readreply:	blk.l	8,0
even

DiskIoReq:
Message:	blk.b	20,0
Io:		blk.b	12,0
IoReq:		blk.b	16,0
even

