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"
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;HAS_M6803"
RuntimeLibrary="1"
EnableFunctionLevelLinking="true"
UsePrecompiledHeader="0"
PrecompiledHeaderFile=".\Debug/Applewin.pch"
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 _________________________________________________________________________________________
BOOL enhancedisk = 1;
// dynamic array of strings
string DiskPathFilename[];
bool bSaveDiskImage = true;
BOOL enhancedisk = 1;
string DiskPathFilename[]; // dynamic array of strings
UINT g_uNumTracksInImage = 0;
// Private ________________________________________________________________________________________
@ -84,13 +83,14 @@ static BYTE __stdcall DiskSetWriteMode (WORD pc, WORD addr, BYTE bWrite, BYTE d,
int nibbles;
};
static WORD currdrive = 0;
static BOOL diskaccessed = 0;
static Disk_t g_aFloppyDisk[DRIVES];
static BYTE floppylatch = 0;
static BOOL floppymotoron = 0;
static BOOL floppywritemode = 0;
static WORD phases; // state bits for stepper magnet phases 0 - 3
static WORD currdrive = 0;
static BOOL diskaccessed = 0;
static Disk_t g_aFloppyDisk[DRIVES];
static BYTE floppylatch = 0;
static BOOL floppymotoron = 0;
static BOOL floppywritemode = 0;
static WORD phases; // state bits for stepper magnet phases 0 - 3
static bool bSaveDiskImage = true;
static void CheckSpinning();
static Disk_Status_e GetDriveLightStatus( const int iDrive );
@ -249,7 +249,7 @@ static void ReadTrack (int iDrive)
Disk_t *pFloppy = &g_aFloppyDisk[ iDrive ];
if (pFloppy->track >= TRACKS)
if (pFloppy->track >= (int)g_uNumTracksInImage)
{
pFloppy->trackimagedata = 0;
return;
@ -308,7 +308,7 @@ static void WriteTrack (int iDrive)
{
Disk_t *pFloppy = &g_aFloppyDisk[ iDrive ];
if (pFloppy->track >= TRACKS)
if (pFloppy->track >= (int)g_uNumTracksInImage)
return;
if (pFloppy->writeprotected)
@ -382,7 +382,7 @@ static BYTE __stdcall DiskControlStepper (WORD, WORD address, BYTE, BYTE, ULONG)
if (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" : "");
if (newtrack != fptr->track)
{

View File

@ -6,10 +6,12 @@
#define DRIVES 2
#define TRACKS_STANDARD 35
#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 UINT g_uNumTracksInImage;
void DiskInitialize (); // DiskManagerStartup()
void DiskDestroy (); // no, doesn't "destroy" the disk image. DiskManagerShutdown()

View File

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