Framework fixes:
- Initial memory allocation was using MEMF_LARGEST and did some unnecessary error checking and alignment. - Trackloader skipped over the MFM gap between the end of the track and the start as optimization. However, it turns out that the gap can be smaller when written with non-Amiga controllers or faster rotation speeds. Reduced the skip from 300 words to 200 words, so it will work in these cases. - There was a stupid bug in the trackloader that made the buffer-end detection non-functional.
This commit is contained in:
parent
dd41bf2b6b
commit
b1bd046594
@ -819,13 +819,13 @@ fw_DecodeMfmTrack:
|
||||
clr.l fw_TrackChecksum(a6)
|
||||
.decode
|
||||
.findsyncword
|
||||
lea MFMBUFSIZE(a1),a2
|
||||
lea MFMBUFSIZE(a1),a3
|
||||
.syncloop
|
||||
PUTMSG 70,<"LW %lx">,(a1)
|
||||
cmp.w #MFMsync,(a1)+ ; search for a sync word
|
||||
bne.s .syncloop
|
||||
PUTMSG 60,<"Sync %lx at %p">,(a1),a1
|
||||
cmp.l a1,a2 ; check for end of buffer
|
||||
cmp.l a1,a3 ; check for end of buffer
|
||||
beq .diskerror ; no more sync found
|
||||
cmp.b (a1),d3 ; search for 0-nibble
|
||||
bne.s .syncloop
|
||||
@ -869,11 +869,20 @@ fw_DecodeMfmTrack:
|
||||
cmp.b #1,d4
|
||||
bne.s .nogapskip
|
||||
PUTMSG 60,<"Skipping much of gap after decoding">
|
||||
lea 300*2(a2),a2 ; gap of 300 words should be safe (340 is about normal)
|
||||
; a gap of 300 words should be safe (340 is about normal),
|
||||
; HOWEVER some drives (Greaseweazle?) may write with 2µs pulse length
|
||||
; instead of the Amiga's 1.97356µs or faster rotational speeds,
|
||||
; so the gap may become smaller!
|
||||
; This broke some configurations apparently. Sorry.
|
||||
lea 200*2(a2),a2 ; skip 200 words
|
||||
.nogapskip
|
||||
lea 6(a2),a1
|
||||
cmp.w #(1<<11)-1,d7
|
||||
bne .findsyncword ; decode until the bitmap is complete
|
||||
beq .allsecsfound ; decode until the bitmap is complete
|
||||
lea 6(a2),a1
|
||||
cmp.l a1,a3 ; check for past end of buffer
|
||||
bhi .findsyncword ; continue seeking sync word
|
||||
bra .diskerror ; ooops, we're past the end of the buffer
|
||||
.allsecsfound
|
||||
PUTMSG 50,<"Track Checksum %lx">,fw_TrackChecksum(a6)
|
||||
tst.l fw_TrackChecksum(a6) ; track total chksum OK?
|
||||
bne .diskerror ; no, then retry
|
||||
|
@ -40,7 +40,7 @@ trackmo_AppInit:
|
||||
CALL AvailMem
|
||||
move.l d0,d2
|
||||
beq.s .nofast
|
||||
move.l #(MEMF_LARGEST|MEMF_FAST|MEMF_CLEAR),d1
|
||||
move.l #MEMF_FAST|MEMF_CLEAR,d1
|
||||
CALL AllocMem
|
||||
move.l d0,fw_FastMemStack(a4)
|
||||
bne.s .goodmem
|
||||
@ -51,20 +51,15 @@ trackmo_AppInit:
|
||||
move.l #(MEMF_LARGEST|MEMF_CHIP),d1
|
||||
CALL AvailMem
|
||||
move.l d0,d2
|
||||
beq.s .memerr
|
||||
move.l #(MEMF_CHIP|MEMF_CLEAR),d1
|
||||
CALL AllocMem
|
||||
addq.l #7,d0
|
||||
and.w #-8,d0
|
||||
move.l d0,fw_ChipMemStack(a4)
|
||||
and.w #-8,d2
|
||||
add.l d2,d0
|
||||
move.l d0,fw_ChipMemStackEnd(a4)
|
||||
|
||||
move.l #(MEMF_LARGEST|MEMF_ANY),d1
|
||||
CALL AvailMem
|
||||
move.l d0,d2
|
||||
beq.s .memerr
|
||||
move.l #MEMF_CLEAR,d1
|
||||
CALL AllocMem
|
||||
move.l d0,fw_FastMemStack(a4)
|
||||
|
Loading…
Reference in New Issue
Block a user