diff subboot.s68 @ 3:97ec271a513f

Bunch of changes
author Mike Pavone <pavone@retrodev.com>
date Mon, 02 Sep 2013 21:22:47 -0700
parents bbfa7bf69620
children
line wrap: on
line diff
--- a/subboot.s68	Tue May 01 20:43:25 2012 -0700
+++ b/subboot.s68	Mon Sep 02 21:22:47 2013 -0700
@@ -1,19 +1,313 @@
 	org $6000
 SubHeaderStart
-	dc.b 'MAIN FOOBAR', 0
+	dc.b 'MAIN       ', 0
 	align 4
 	dc.l 0
 	dc.l End-SubHeaderStart
 	dc.l EntryPoints-SubHeaderStart
+	dc.l 0
 EntryPoints
 	dc.w Main-EntryPoints
-	dc.w Main-EntryPoints
-	dc.w Int2Handler-EntryPoints
+;	dc.w Main-EntryPoints
+;	dc.w Int2Handler-EntryPoints
 	dc.w 0
 Main
-	bra Main
+	andi.b	#$FA,$FF8003		;set 2Mbit mode
+
+	lea	Packet(pc),a5
+	jsr	ReadCD
+
+	move.l	$80A2,(a5)
+	move.l	(a5),d0
+	move.l	$80AA,d0
+	lsr.l	#8,d0
+	lsr.l	#3,d0
+	move.l	d0,4(a5)
+	move.l	#$8000,8(a5)
+	jsr	ReadCD
+
+	move.b	#0,$FF800F
+
+
+Wait:
+	tst.b	$FF800E
+	bne	Wait
+	move.b	#1,$FF800F
+Wait2:
+	tst.b	$FF800E
+	beq	Wait2
+
+	moveq	#0,d0
+	move.b	$FF800E,d0
+	cmpi.b	#8,d0
+	bgt	Wait
+	add.w	d0,d0
+	add.w	d0,d0
+	jmp	FuncTable(pc,d0)
+FuncTable:
+	bra.w	Wait				;0x0
+	bra.w	FileList			;0x1
+	bra.w	FileByNumber			;0x2
+	bra.w	FileByNameSimple		;0x3
+	bra.w	FileByNameExtended		;0x4
+	bra.w	SetExtended			;0x5
+	bra.w	Jump				;0x6
+	bra.w	JumpSub				;0x7
+	bra.w	PlayRAW				;0x8
+
+
+
+FileList:
+
+	move.l	#$8000,a0
+	move.l	#$80000,a1
+NextFile:
+	moveq	#0,d0
+	move.b	(a0),d0		;get record length
+	beq	EndList
+	move.l	6(a0),$20(a1)		;file location
+	move.l	$E(a0),$24(a1)		;file length
+	moveq	#0,d1
+	move.b	$20(a0),d1		;file name length
+	subi.w	#1,d1
+	beq	Terminate		;skip copy if length = 0		
+	lea	$21(a0),a2
+	movea.l	a1,a4
+CopyName:
+	move.b	(a2)+,(a4)+		;copy filename to new table
+	dbra	d1,CopyName
+Terminate:
+	move.b	#0,(a4)
+
+	adda.l	d0,a0
+	add.l	#$28,a1
+	bra	NextFile
+	
+EndList:
+	move.b	#$FF,(a1)
+	ori.b	#1,$FF8003
+	move.b	#0,$FF800F
+	bra	Wait
+
+
+
+
+
+FileByNumber:
+	lea	Packet(pc),a5
+	move.l	$FF8010,(a5)
+	move.l	$FF8014,d0
+	move.l	$FF8018,8(a5)
+File:
+	move.l	d0,$FF8020
+	move.l	d0,d1
+	lsr.l	#8,d1
+	lsr.l	#3,d1
+	andi.l	#$7FF,d0
+	beq	SectorAligned
+	addq	#1,d1
+
+SectorAligned:
+	move.l	d1,4(a5)
+
+	bsr	ReadCD
+
+	move.l	$8000,d7
+
+	ori.b	#1,$FF8003
+
+	move.b	#0,$FF800F
 	
+	bra	Wait
+
+
+
+
+FileByNameSimple:
+	lea	Packet(pc),a5
+	move.l	#$80000,8(a5)
+	move.l	#$40000,4(a5)
+	move.l	#0,(BeginOffset)
+
+FileByNameExtended:
+	move.l	#$FF8010,a0
+	bsr	FindFile
+	bcc	FileNotFound
+
+	lsl.l	#8,d1
+	lsl.l	#3,d1
+	add.l	(BeginOffset),d1
+	sub.l	(BeginOffset),d0
+	lsr.l	#8,d1
+	lsr.l	#3,d1
+
+	lea	Packet(pc),a5
+
+	move.l	4(a5),d3
+	cmp.l	d0,d3
+	bgt	TooBig			;File is either smaller than requested length or size of WordRAM
+
+	move.l	d3,d0
+TooBig:
+
+	move.l	d1,(a5)
+	bra	File
+
+FileNotFound:
+	ori.b	#1,$FF8003
+	move.b	#$FF,$FF800F
+	bra	Wait
+
+
+
+
+SetExtended:
+	lea	Packet(pc),a5
+	move.l	$FF8010,8(a5)
+	move.l	$FF8014,4(a5)
+	move.l	$FF8018,(BeginOffset)
+
+	move.b	#0,$FF800F
+	bra	Wait
+
+
+
+Jump:
+	move.l	$FF8010,a0
+	jmp	(a0)
+
+JumpSub:
+	move.l	$FF8010,a0
+	jsr	(a0)
+
+	move.b	#0,$FF800F
+	bra 	Wait
+
+PlayRAW:
+
+
+	move.l	$FF8010,a0		;get start address
+	move.w	$FF8014,d2		;get playback frequency
+
+
+	move.w	#$F,d6
+	move.b	#$FF,d1
+
+
+BankLoop:
+
+	addq	#1,d1			;increment bank
+	move.b	d1,$FF000F		;turn off sound production,and set waveform memory bank
+	move.l	#$FF2001,a1
+	move.w	#$FFF,d7
+
+MoveIt:
+	move.b	(a0)+,d0
+	move.b	d0,(a1)
+	addq	#2,a1
+	cmp.b	#$FF,d0
+	dbeq	d7,MoveIt
+
+	dbeq	d6,BankLoop
+
+	move.b	#$40,$FF000F		;set control to channel 0
+
+	move.b	#$FF,$FF0001		;set volume
+
+	move.b	#$FF,$FF0003		;set Pan
+
+	move.b	#$00,$FF0005		;set FDL (Playback frequency low order byte)
+
+	move.b	#$08,$FF0007		;set FDH (Playback frequency high order byte)
+
+	move.b	#$00,$FF0009		;LSL (Loop Start Address low order byte)
+
+	move.b	#$00,$FF000B		;LSH (Loop Start Address high order byte)
+
+	move.b	#$00,$FF000D		;ST (Start address high order byte,low order byte is always equal to 0)
+
+	move.b	#$FE,$FF0011		;turn on channel 0
+
+	move.b	#$80,$FF000F		;start sound playback
+
+	move.b	#0,$FF800F
+
+	bra	Wait
+
+
+
+FindFile:
+	move.l	#$8000,a2
+
+NextName:
+	moveq	#0,d3
+	move.b	(a2),d3
+	beq	NotFound
+
+	lea	$21(a2),a3
+	move.l	a0,a1
+Compare:
+	tst.b	(a1)
+	beq	Found
+	cmp.b	(a1)+,(a3)+
+	beq	Compare
+
+	add.l 	d3,a2
+	bra	NextName
+
+NotFound:	
+	move	#0,CCR
+	rts
+
+Found:
+	move.l	$E(a2),d0
+	move.l	6(a2),d1
+	move	#1,CCR
+	rts	
+
+
+
+
+ReadCD:	
+	movea.l	a5,a0
+	move.w	#$89,d0		;init CD controller
+	jsr 	$5f22
+	move.w	#$20,d0		;start read operation
+	jsr	$5f22
+
+Check:
+	move.w	#$8A,d0		;check for data
+	jsr	$5f22
+	bcs	Check
+
+Check2:
+	move.w	#$8B,d0
+	jsr	$5f22
+	bcc	Check2
+
+Check3:
+	move.w	#$8C,d0
+	movea.l	8(a5),a0
+	lea	$C(a5),a1
+	jsr	$5f22
+	bcc	Check3
+
+	move.w	#$8D,d0
+	jsr	$5f22
+
+	addi.l	#$800,8(a5)
+	addq.l	#1,(a5)
+	subq.l	#1,4(a5)
+	bne	Check
+	rts
 Int2Handler
 	rte
 	
+BeginOffset:
+	dc.l	$0
+Packet:
+	dc.l	$10, 1, $8000, ExtraJunk, 0
+ExtraJunk:
+	dc.b	0
+	
 End