WHDLoad MantisBT - RawDIC
View Issue Details
0002925RawDIC[All Projects] Generalpublic2014-01-19 12:012017-11-09 14:29
ReporterCodetapper 
Assigned ToWepl 
PrioritynormalSeveritymajorReproducibilityalways
StatusclosedResolutionfixed 
PlatformOSOS Version
Product Version4.6 
Target Version5.0Fixed in Version5.0 
MachineA1200
CPU68030
CPUSpeed50
ChipSetAGA
GFXCardNone
ChipMem2 MB
FastMem32 MB
WorkbenchOS 3.0
KickROM39 - Kick 3.0
KickSoft40 - Kick 3.1
Summary0002925: File exceeds diskimage message
DescriptionYou cannot use a CRC entry on a multiple disk game when only the 2nd/3rd/4th disk has a different track list from the first disk. You get the message "file exceeds diskimage" coming up every single time, no matter if the disk CRC matches or not.
Steps To ReproduceAs an example, this code will NOT work as there are multiple disk structures setup but the CRC check is done on disk 2:
---
DSK_1 dc.l DSK_2_SPS1336 ; Pointer to next disk structure
        dc.w 1 ; Disk structure version
        dc.w 0 ; Disk flags
        dc.l TL_1 ; List of tracks which contain data
        dc.l 0 ; UNUSED, ALWAYS SET TO 0!
        dc.l FL_NULL ; List of files to be saved
        dc.l 0 ; Table of certain tracks with CRC values
        dc.l 0 ; Alternative disk structure, if CRC failed
        dc.l 0 ; Called before a disk is read
        dc.l 0 ; Called after a disk has been read

DSK_2_SPS1336 dc.l 0 ; Pointer to next disk structure
        dc.w 1 ; Disk structure version
        dc.w 0 ; Disk flags
        dc.l TL_1 ; List of tracks which contain data
        dc.l 0 ; UNUSED, ALWAYS SET TO 0!
        dc.l FL_NULL ; List of files to be saved
        dc.l CRC_2_SPS1336 ; Table of certain tracks with CRC values
        dc.l DSK_2_Copylock ; Alternative disk structure, if CRC failed
        dc.l 0 ; Called before a disk is read
        dc.l 0 ; Called after a disk has been read

DSK_2_Copylock dc.l 0 ; Pointer to next disk structure
        dc.w 1 ; Disk structure version
        dc.w 0 ; Disk flags
        dc.l TL_1 ; List of tracks which contain data
        dc.l 0 ; UNUSED, ALWAYS SET TO 0!
        dc.l FL_NULL ; List of files to be saved
        dc.l 0 ; Table of certain tracks with CRC values
        dc.l 0 ; Alternative disk structure, if CRC failed
        dc.l 0 ; Called before a disk is read
        dc.l 0 ; Called after a disk has been read

CRC_2_SPS1336 CRCENTRY 0,$20af
        CRCEND
---
But doing it this way will work, ie. put the CRC check on disk 1 and branch to a different disk 2 structure:
---
DSK_1 dc.l DSK_2_SPS1336 ; Pointer to next disk structure
        dc.w 1 ; Disk structure version
        dc.w 0 ; Disk flags
        dc.l TL_1 ; List of tracks which contain data
        dc.l 0 ; UNUSED, ALWAYS SET TO 0!
        dc.l FL_NULL ; List of files to be saved
        dc.l CRC_1_SPS1336 ; Table of certain tracks with CRC values
        dc.l DSK_1_Copylock ; Alternative disk structure, if CRC failed
        dc.l 0 ; Called before a disk is read
        dc.l 0 ; Called after a disk has been read

DSK_1_Copylock dc.l DSK_2_Copylock ; Pointer to next disk structure
        dc.w 1 ; Disk structure version
        dc.w 0 ; Disk flags
        dc.l TL_1 ; List of tracks which contain data
        dc.l 0 ; UNUSED, ALWAYS SET TO 0!
        dc.l FL_NULL ; List of files to be saved
        dc.l 0 ; Table of certain tracks with CRC values
        dc.l 0 ; Alternative disk structure, if CRC failed
        dc.l 0 ; Called before a disk is read
        dc.l 0 ; Called after a disk has been read

DSK_2_SPS1336 dc.l 0 ; Pointer to next disk structure
        dc.w 1 ; Disk structure version
        dc.w 0 ; Disk flags
        dc.l TL_1 ; List of tracks which contain data
        dc.l 0 ; UNUSED, ALWAYS SET TO 0!
        dc.l FL_NULL ; List of files to be saved
        dc.l 0 ; Table of certain tracks with CRC values
        dc.l 0 ; Alternative disk structure, if CRC failed
        dc.l 0 ; Called before a disk is read
        dc.l 0 ; Called after a disk has been read

DSK_2_Copylock dc.l 0 ; Pointer to next disk structure
        dc.w 1 ; Disk structure version
        dc.w 0 ; Disk flags
        dc.l TL_1 ; List of tracks which contain data
        dc.l 0 ; UNUSED, ALWAYS SET TO 0!
        dc.l FL_NULL ; List of files to be saved
        dc.l 0 ; Table of certain tracks with CRC values
        dc.l 0 ; Alternative disk structure, if CRC failed
        dc.l 0 ; Called before a disk is read
        dc.l 0 ; Called after a disk has been read

CRC_1_SPS1336 CRCENTRY 0,$ca88
        CRCEND
---

While updating the Putty/Silly Putty install, disk 1 on all versions can use the same tracklist as it has a copylock on track 1 on most versions and a completely blank track on the others.

But disk 2 on some versions has a copylock on one version, blank data on a couple of others, and real data on another version. Hence I thought I'd just do a CRC check on disk 2 for the copylock version and pick the right disk, then for disk 3 all versions can use the same tracklist again.

But you get "File exceeds diskimage" appearing the instant disk 1 has finished! I tried on various RawDIC versions, the oldest being v1.9 and they all seem to be buggy. I guess it has never worked properly.
TagsNo tags attached.
Attached Files

Notes
(0005827)
Wepl   
2017-11-09 14:29   
is solved in release 5.0, mainloop did not reset diskload flag before checking crc

Issue History
2014-01-19 12:01CodetapperNew Issue
2017-10-21 15:40WeplAssigned To => Wepl
2017-10-21 15:40WeplStatusnew => assigned
2017-11-07 23:08WeplTarget Version => 5.0
2017-11-09 14:27WeplFixed in Version => 5.0
2017-11-09 14:29WeplNote Added: 0005827
2017-11-09 14:29WeplStatusassigned => closed
2017-11-09 14:29WeplResolutionopen => fixed