Fixed FLASHing 'S' in AppleII+ mode!

Renamed: TRACKS -> TRACKS_MAX
Added new var g_uNumTracksInImage - derived from disk image size
Enabled Edit&Continue debugging in VS2005 vcproj
This commit is contained in:
tomch 2009-02-24 22:13:46 +00:00
parent e94421f3bc
commit 03d528ca5e
5 changed files with 40 additions and 28 deletions

View File

@ -143,6 +143,7 @@
Optimization="0" Optimization="0"
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;HAS_M6803" PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;HAS_M6803"
RuntimeLibrary="1" RuntimeLibrary="1"
EnableFunctionLevelLinking="true"
UsePrecompiledHeader="0" UsePrecompiledHeader="0"
PrecompiledHeaderFile=".\Debug/Applewin.pch" PrecompiledHeaderFile=".\Debug/Applewin.pch"
AssemblerListingLocation=".\Debug/" AssemblerListingLocation=".\Debug/"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

View File

@ -57,10 +57,9 @@ static BYTE __stdcall DiskSetWriteMode (WORD pc, WORD addr, BYTE bWrite, BYTE d,
// Public _________________________________________________________________________________________ // Public _________________________________________________________________________________________
BOOL enhancedisk = 1; BOOL enhancedisk = 1;
// dynamic array of strings string DiskPathFilename[]; // dynamic array of strings
string DiskPathFilename[]; UINT g_uNumTracksInImage = 0;
bool bSaveDiskImage = true;
// Private ________________________________________________________________________________________ // Private ________________________________________________________________________________________
@ -84,13 +83,14 @@ static BYTE __stdcall DiskSetWriteMode (WORD pc, WORD addr, BYTE bWrite, BYTE d,
int nibbles; int nibbles;
}; };
static WORD currdrive = 0; static WORD currdrive = 0;
static BOOL diskaccessed = 0; static BOOL diskaccessed = 0;
static Disk_t g_aFloppyDisk[DRIVES]; static Disk_t g_aFloppyDisk[DRIVES];
static BYTE floppylatch = 0; static BYTE floppylatch = 0;
static BOOL floppymotoron = 0; static BOOL floppymotoron = 0;
static BOOL floppywritemode = 0; static BOOL floppywritemode = 0;
static WORD phases; // state bits for stepper magnet phases 0 - 3 static WORD phases; // state bits for stepper magnet phases 0 - 3
static bool bSaveDiskImage = true;
static void CheckSpinning(); static void CheckSpinning();
static Disk_Status_e GetDriveLightStatus( const int iDrive ); static Disk_Status_e GetDriveLightStatus( const int iDrive );
@ -249,7 +249,7 @@ static void ReadTrack (int iDrive)
Disk_t *pFloppy = &g_aFloppyDisk[ iDrive ]; Disk_t *pFloppy = &g_aFloppyDisk[ iDrive ];
if (pFloppy->track >= TRACKS) if (pFloppy->track >= (int)g_uNumTracksInImage)
{ {
pFloppy->trackimagedata = 0; pFloppy->trackimagedata = 0;
return; return;
@ -308,7 +308,7 @@ static void WriteTrack (int iDrive)
{ {
Disk_t *pFloppy = &g_aFloppyDisk[ iDrive ]; Disk_t *pFloppy = &g_aFloppyDisk[ iDrive ];
if (pFloppy->track >= TRACKS) if (pFloppy->track >= (int)g_uNumTracksInImage)
return; return;
if (pFloppy->writeprotected) if (pFloppy->writeprotected)
@ -382,7 +382,7 @@ static BYTE __stdcall DiskControlStepper (WORD, WORD address, BYTE, BYTE, ULONG)
if (direction) if (direction)
{ {
fptr->phase = MAX(0, MIN(79, fptr->phase + direction)); fptr->phase = MAX(0, MIN(79, fptr->phase + direction));
int newtrack = MIN(TRACKS-1, fptr->phase >> 1); // (round half tracks down) int newtrack = MIN((int)g_uNumTracksInImage-1, fptr->phase >> 1); // (round half tracks down)
LOG_DISK("newtrack %2X%s\r", newtrack, (fptr->phase & 1) ? ".5" : ""); LOG_DISK("newtrack %2X%s\r", newtrack, (fptr->phase & 1) ? ".5" : "");
if (newtrack != fptr->track) if (newtrack != fptr->track)
{ {

View File

@ -6,10 +6,12 @@
#define DRIVES 2 #define DRIVES 2
#define TRACKS_STANDARD 35 #define TRACKS_STANDARD 35
#define TRACKS_EXTRA 5 // Allow up to a 40-track .dsk image (160KB) #define TRACKS_EXTRA 5 // Allow up to a 40-track .dsk image (160KB)
#define TRACKS (TRACKS_STANDARD+TRACKS_EXTRA) #define TRACKS_MAX (TRACKS_STANDARD+TRACKS_EXTRA)
extern BOOL enhancedisk; extern BOOL enhancedisk;
extern string DiskPathFilename[2]; extern string DiskPathFilename[2];
extern UINT g_uNumTracksInImage;
void DiskInitialize (); // DiskManagerStartup() void DiskInitialize (); // DiskManagerStartup()
void DiskDestroy (); // no, doesn't "destroy" the disk image. DiskManagerShutdown() void DiskDestroy (); // no, doesn't "destroy" the disk image. DiskManagerShutdown()

View File

@ -44,7 +44,7 @@ typedef struct _imageinforec {
BOOL writeprotected; BOOL writeprotected;
DWORD headersize; DWORD headersize;
LPBYTE header; LPBYTE header;
BOOL validtrack[TRACKS]; BOOL validtrack[TRACKS_MAX];
} imageinforec, *imageinfoptr; } imageinforec, *imageinfoptr;
typedef BOOL (*boottype )(imageinfoptr); typedef BOOL (*boottype )(imageinfoptr);
@ -426,22 +426,31 @@ DWORD AplDetect (LPBYTE imageptr, DWORD imagesize) {
static bool IsValidImageSize(DWORD uImageSize) static bool IsValidImageSize(DWORD uImageSize)
{ {
if ((TRACKS>TRACKS_STANDARD) && (uImageSize > TRACKS*TRACK_DENIBBLIZED_SIZE)) g_uNumTracksInImage = 0;
if ((TRACKS_MAX>TRACKS_STANDARD) && (uImageSize > TRACKS_MAX*TRACK_DENIBBLIZED_SIZE))
return false; // >160KB return false; // >160KB
//
bool bValidSize = false;
if (uImageSize >= TRACKS_STANDARD*TRACK_DENIBBLIZED_SIZE) if (uImageSize >= TRACKS_STANDARD*TRACK_DENIBBLIZED_SIZE)
{ {
// Is uImageSize == 140KB + n*4K? // Is uImageSize == 140KB + n*4K?
const bool bStandardSize = (((uImageSize - TRACKS_STANDARD*TRACK_DENIBBLIZED_SIZE) % TRACK_DENIBBLIZED_SIZE) == 0); bValidSize = (((uImageSize - TRACKS_STANDARD*TRACK_DENIBBLIZED_SIZE) % TRACK_DENIBBLIZED_SIZE) == 0);
if (bStandardSize) }
return true; else
{
bValidSize = ( ((uImageSize >= 143105) && (uImageSize <= 143364)) ||
(uImageSize == 143403) ||
(uImageSize == 143488) );
} }
const bool bInvalidSize = ( ((uImageSize < 143105) || (uImageSize > 143364)) && if (bValidSize)
(uImageSize != 143403) && g_uNumTracksInImage = uImageSize / TRACK_DENIBBLIZED_SIZE;
(uImageSize != 143488) );
return !bInvalidSize; return bValidSize;
} }
/**************************************************************************** /****************************************************************************
@ -732,11 +741,11 @@ BOOL ImageBoot (HIMAGE imagehandle) {
} }
//=========================================================================== //===========================================================================
void ImageClose (HIMAGE imagehandle) { void ImageClose (HIMAGE imagehandle){
imageinfoptr ptr = (imageinfoptr)imagehandle; imageinfoptr ptr = (imageinfoptr)imagehandle;
if (ptr->file != INVALID_HANDLE_VALUE) if (ptr->file != INVALID_HANDLE_VALUE)
CloseHandle(ptr->file); CloseHandle(ptr->file);
for (int track = 0; track < TRACKS; track++) for (UINT track = 0; track < g_uNumTracksInImage; track++)
if (!ptr->validtrack[track]) { if (!ptr->validtrack[track]) {
DeleteFile(ptr->filename); DeleteFile(ptr->filename);
break; break;
@ -906,7 +915,7 @@ int ImageOpen (LPCTSTR imagefilename,
((imageinfoptr)*hDiskImage_)->offset = pImage-view; ((imageinfoptr)*hDiskImage_)->offset = pImage-view;
((imageinfoptr)*hDiskImage_)->writeprotected = *pWriteProtected_; ((imageinfoptr)*hDiskImage_)->writeprotected = *pWriteProtected_;
for (int track = 0; track < TRACKS; track++) for (UINT track = 0; track < g_uNumTracksInImage; track++)
((imageinfoptr)*hDiskImage_)->validtrack[track] = (size > 0); ((imageinfoptr)*hDiskImage_)->validtrack[track] = (size > 0);
return IMAGE_ERROR_NONE; // HACK: MAGIC # 0 return IMAGE_ERROR_NONE; // HACK: MAGIC # 0