mirror of
https://github.com/AppleWin/AppleWin.git
synced 2024-06-01 14:41:33 +00:00
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:
parent
e94421f3bc
commit
03d528ca5e
|
@ -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 |
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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()
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue
Block a user