Thanks. It finally makes sense..
PFS3 has following code, standard PFS3 does not have TRACKDISK define:
static BOOL TestRemovability(globaldata *g)
struct DriveGeometry *geom = g->geom;
struct IOExtTD *request = g->request;
request->iotd_Req.io_Data = g->geom;
request->iotd_Req.io_Command = TD_GETGEOMETRY;
request->iotd_Req.io_Length = sizeof(struct DriveGeometry);
if(DoIO((struct IORequest *)request) == NULL)
result = geom->dg_Flags & DGF_REMOVABLE;
result = 1; /* trackdisk assumed to be removable */
struct DosEnvec *env = g->dosenvec;
if( (env->de_Surfaces <= 2) && (env->de_LowCyl == 0) )
result = 1; /* to accomodate things like the diskspare.device */
result = 0; /* disk is assumed to be NOT removable by default */
return 1; /* to accomodate SyQuest, Floptical etc */
I enabled TRACKDISK so that floppy changes also work (This define is required because it is also used in other parts of code). But g->trackdisk is only true if device is trackdisk.device (or diskspare) -> code falls back to that DosEnvec check that I assume returns false when using your usb device?
If false is returned: no ADDCHANGEINT but REMCHANGEINT with NULL io request is still called during ACTION_DIE -> crash.
In next and hopefully final version TestRemovability() will always return true which should fix this problem.