Mercurial > repos > ghero
view 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 source
org $6000 SubHeaderStart 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 0 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