Add back floppy bitmask since floppy order depends on slot order.

This commit is contained in:
Kelvin Sherlock 2024-02-02 21:06:07 -05:00
parent 24e3b01803
commit 7dbaf4e12d
3 changed files with 47 additions and 46 deletions

View File

@ -23,7 +23,9 @@ typedef struct Media {
unsigned midiout;
unsigned picture;
unsigned rom;
//uint64_t floppy_mask;
uint64_t floppy_mask_8;
uint64_t floppy_mask_5_25;
uint64_t floppy_mask_3_5;
} Media;

View File

@ -40,7 +40,8 @@ void MediaAdd(Media *dest, const Media *src) {
// could merge from src media but not currently set there.
//unsigned count;
//unsigned flops = dest->floppy_8 + dest->floppy_5_25 + dest->floppy_3_5;
unsigned dest_flops = dest->floppy_8 + dest->floppy_5_25 + dest->floppy_3_5;
unsigned src_flops = src->floppy_8 || src->floppy_5_25 || src->floppy_8;
#define _(name) dest->name += src->name;
@ -58,15 +59,25 @@ void MediaAdd(Media *dest, const Media *src) {
_(rom);
#undef _
#if 0
// TODO - FLOPPY_8
if ((count = src->floppy_5_25)) {
uint64_t bits = (1 << count) - 1;
//dest->floppy_mask <<= count;
bits <<= flops;
dest->floppy_mask |= bits;
// this assumes any device that supports more than 1 floppy size
// the order is 8" < 5.25" < 3.5"
if (src_flops) {
uint64_t bits = 1 << dest_flops;
for (unsigned i = 0; i < src->floppy_8; ++i) {
dest->floppy_mask_8 |= bits;
bits <<= 1;
}
for (unsigned i = 0; i < src->floppy_5_25; ++i) {
dest->floppy_mask_5_25 |= bits;
bits <<= 1;
}
for (unsigned i = 0; i < src->floppy_3_5; ++i) {
dest->floppy_mask_3_5 |= bits;
bits <<= 1;
}
}
#endif
}
@ -89,7 +100,9 @@ BOOL MediaEqual(const Media *lhs, const Media *rhs) {
_(picture);
_(rom);
//_(floppy_mask);
_(floppy_mask_8);
_(floppy_mask_5_25);
_(floppy_mask_3_5);
return YES;
#undef _

View File

@ -355,6 +355,10 @@
//unsigned counts[CATEGORY_COUNT] = { 0 };
uint64_t floppy_mask_8 = _media.floppy_mask_8;
uint64_t floppy_mask_5_25 = _media.floppy_mask_5_25;
uint64_t floppy_mask_3_5 = _media.floppy_mask_3_5;
for (unsigned j = 0; j < CATEGORY_COUNT; ++j) {
//uint64_t floppy_mask = _media.floppy_mask;
@ -362,49 +366,31 @@
MediaCategory *cat = _data[j];
NSInteger valid = [cat validCount];
// assumes floppy order is 8", 5.25", 3.5".
switch(j) {
case kIndexFloppy8:
index = 0;
break;
case kIndexFloppy525:
index = _media.floppy_8;
break;
case kIndexFloppy35:
index = _media.floppy_8 + _media.floppy_5_25;
break;
}
for (NSInteger i = 0; i < valid; ++i) {
MediaItem *item = [cat objectAtIndex: i];
NSString *arg = [item argument];
++index;
if (!arg) continue;
#if 0
// TODO -- FLOPPY_8 support.
if (j == kIndexFloppy525) {
// assumes < 64 floppies....
// infinite loop if no floppy device...
if (floppy_mask == 0) break;
while ((floppy_mask & 0x01) == 0) {
floppy_mask >>= 1;
switch(j) {
case kIndexFloppy8:
index = ffsll(floppy_mask_8);
floppy_mask_8 &= ~(1 << (index-1));
break;
case kIndexFloppy525:
index = ffsll(floppy_mask_5_25);
floppy_mask_5_25 &= ~(1 << (index-1));
break;
case kIndexFloppy35:
index = ffsll(floppy_mask_3_5);
floppy_mask_3_5 &= ~(1 << (index-1));
break;
default:
++index;
}
} else if (j == kIndexFloppy35) {
while ((floppy_mask & 0x01)) {
floppy_mask >>= 1;
++index;
}
}
++index;
floppy_mask >>= 1;
if (!arg) continue;
#endif
if (!index) continue;
[args addObject: [NSString stringWithFormat: @"-%s%u", prefix[j], index]];
[args addObject: arg];
}