View Single Post
Old 28 September 2012, 11:55   #54
Toni Wilen
WinUAE developer
Join Date: Aug 2001
Location: Hämeenlinna/Finland
Age: 43
Posts: 22,110
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;
  BOOL result;

		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.
Toni Wilen is online now  
Page generated in 0.04318 seconds with 10 queries