home *** CD-ROM | disk | FTP | other *** search
- ùúùúÿ:ÿ:ÿ:ÿ:ÿ:ÿ:ÿ:ÿ:ÿ:****************************************
- *** Routines for reading DOS sectors ***
- *** With error checking ***
- *** and timer waiting ***
- *** Coded 901222 by Conqueror AGILE ***
- ****************************************
-
- ; SECTORLOADER... FOR STANDARD AMIGADOS
- ; PLEASE DONT SPREAD THIS ONE, KYLE !!
-
- DriveNr: =0 ;0=df0:, 1=df1: etc
- DiskBuf: =$78000 ;put disk buffer here
- Retries: =5 ;# of retries if read error
-
- Head: =2 ;dont
- Count: =4 ;change
-
- S: Pea Trap(pc)
- Move.L (sp)+,$80.W
- Trap #0
- Rts
- Trap: Move.W #$2700,SR
- Bsr.S LS
- Rte
-
- LS: Movem.L d0-d7/a0-a6,-(sp)
- Lea $bfd100,a5
- Bclr #7,(a5)
- Lea CurrentTrack(pc),a6 ;put temp data here
- Bset #DriveNr+3,(a5)
- Move.L #$55555555,d5
- Bclr #DriveNr+3,(a5)
-
- Lea $40000,a0 ;load address
- Move.W #0,d0 ;start sector
- Move.W #23,d1 ;# of sectors to load
-
- LoadMore:
- Bsr.S Load
- Addq.W #1,d0
- Subq.W #1,d1
- Bne.S LoadMore
-
- Exit: Bset #7,(a5)
- Bset #DriveNr+3,(a5)
- Bclr #DriveNr+3,(a5)
- Movem.L (sp)+,d0-d7/a0-a6
- Rts
-
-
- StepMore:
- Bset #1,(a5) ;Towards Track 0
- Bsr.S Step
- FindTrack0:
- Btst #4,$f01(a5)
- Bne.S StepMore
- Sf (a6)
- FindTrack:
- Tst.B (a6)
- Bmi.S FindTrack0
- NextTrack:
- Cmp.B (a6),d2
- Beq.S SameTrack
- Bcc.S LowerTrack
- HigherTrack:
- Bset #1,(a5)
- Subq.B #1,(a6)
- Bra.S GetCloser
- LowerTrack:
- Bclr #1,(a5)
- Addq.B #1,(a6)
- GetCloser:
- Bsr.S Step
- Bra.S NextTrack
-
- Step: Bclr #0,(a5)
- Bset #0,(a5)
- Wait: Move.B #$00,$500(a5)
- Move.B #$10,$600(a5) ;change this for step delay
- Move.B #$19,$e00(a5)
- Delay: Btst #0,$e00(a5)
- Bne.S Delay
- SameTrack:
- Btst #5,$f01(a5)
- Bne.S SameTrack
- Rts
-
- Load: Lea DiskBuf,a4
- Move.L d0,d2
- Ext.L d2
- Divu #11,d2
- Move.L d2,d4
- Swap d4
- Cmp.W Head(a6),d2
- Beq.S InMem
- Move.W d2,Head(a6)
- Bset #2,(a5)
- Btst #0,d2
- Beq.S Side0
- Bclr #2,(a5)
- Side0: Lsr.W #1,d2
- Bsr.S FindTrack
- Move.W #Retries,Count(a6) ;retries to read if error
- Bra.S Read
- ReadError:
- Subq.W #1,Count(a6)
- Bne.S Read
- Moveq #-1,d2
- Move.L d2,(a6)
- Bra.S Load
- Read: Lea DiskBuf,a4
- Lea $dff024,a3
- Move.W #$8210,$72(a3)
- Move.L #$00027f00,$78(a3)
- Move.W #$9500,$7a(a3)
- Move.W #$4489,$5a(a3)
- Move.L a4,-4(a3)
- Move.W #$8000+$1900,(a3)
- Move.W #$8000+$1900,(a3)
- Move.L #$a0000,d7
- DskBlk: Subq.L #1,d7
- Beq.S ReadError
- Btst #1,-5(a3)
- Beq.S DskBlk
-
- InMem:
-
- DeCode: Moveq #11-1,d6
- FindSync:
- Cmp.W #$4489,(a4)+
- Bne.S FindSync
- Cmp.W #$4489,(a4)
- Beq.S FindSync
- Movem.L (a4),d2/d3
- Bsr.S DecodeLWord
- Lsr.W #8,d2
- Cmp.W d4,d2
- Beq.S JustOk
- Lea [512+28]*2(a4),a4 ;loop 11 ggr
- Dbf d6,FindSync
- Bra.S ReadError
-
- JustOk: Swap d2
- Cmp.B Head+1(a6),d2
- Bne.S ReadError
-
- Lea $30(a4),a4
- Move.L (a4)+,d2
- Move.L (a4)+,d3
- Bsr.S DecodeLWord
- Move.W #$ff,d7 ;$400 LWords raw data
- Moveq #0,d3
- CalcCheck:
- Move.L (a4)+,d4
- Eor.L d4,d3
- Dbf d7,CalcCheck
- And.L d5,d3
- Cmp.L d3,d2 ;checksum error
- Bne.L ReadError
-
- Lea -$400(a4),a4
- Moveq #[512/4]-1,d7
- DCode: Move.L 512(a4),d3
- Move.L (a4)+,d2
- And.L d5,d2
- And.L d5,d3
- Add.L d2,d2
- Or.L d3,d2
- Move.L d2,(a0)+
- Dbf d7,DCode
- Rts
-
- DecodeLWord:
- And.L d5,d2
- And.L d5,d3
- Add.L d2,d2
- Or.L d3,d2
- Rts
-
- CurrentTrack:
- Dc.W -1
- CurrentHead:
- Dc.W -1
- ErrCount:
- Dc.W Retries
- E:
-
-