mirror of https://github.com/ksherlock/ample.git
Add back floppy bitmask since floppy order depends on slot order.
This commit is contained in:
parent
24e3b01803
commit
7dbaf4e12d
|
@ -23,7 +23,9 @@ typedef struct Media {
|
||||||
unsigned midiout;
|
unsigned midiout;
|
||||||
unsigned picture;
|
unsigned picture;
|
||||||
unsigned rom;
|
unsigned rom;
|
||||||
//uint64_t floppy_mask;
|
uint64_t floppy_mask_8;
|
||||||
|
uint64_t floppy_mask_5_25;
|
||||||
|
uint64_t floppy_mask_3_5;
|
||||||
} Media;
|
} Media;
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -40,7 +40,8 @@ void MediaAdd(Media *dest, const Media *src) {
|
||||||
// could merge from src media but not currently set there.
|
// could merge from src media but not currently set there.
|
||||||
|
|
||||||
//unsigned count;
|
//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;
|
#define _(name) dest->name += src->name;
|
||||||
|
@ -58,15 +59,25 @@ void MediaAdd(Media *dest, const Media *src) {
|
||||||
_(rom);
|
_(rom);
|
||||||
#undef _
|
#undef _
|
||||||
|
|
||||||
#if 0
|
|
||||||
// TODO - FLOPPY_8
|
// this assumes any device that supports more than 1 floppy size
|
||||||
if ((count = src->floppy_5_25)) {
|
// the order is 8" < 5.25" < 3.5"
|
||||||
uint64_t bits = (1 << count) - 1;
|
|
||||||
//dest->floppy_mask <<= count;
|
if (src_flops) {
|
||||||
bits <<= flops;
|
uint64_t bits = 1 << dest_flops;
|
||||||
dest->floppy_mask |= bits;
|
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);
|
_(picture);
|
||||||
_(rom);
|
_(rom);
|
||||||
|
|
||||||
//_(floppy_mask);
|
_(floppy_mask_8);
|
||||||
|
_(floppy_mask_5_25);
|
||||||
|
_(floppy_mask_3_5);
|
||||||
|
|
||||||
return YES;
|
return YES;
|
||||||
#undef _
|
#undef _
|
||||||
|
|
|
@ -355,6 +355,10 @@
|
||||||
|
|
||||||
//unsigned counts[CATEGORY_COUNT] = { 0 };
|
//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) {
|
for (unsigned j = 0; j < CATEGORY_COUNT; ++j) {
|
||||||
|
|
||||||
//uint64_t floppy_mask = _media.floppy_mask;
|
//uint64_t floppy_mask = _media.floppy_mask;
|
||||||
|
@ -362,49 +366,31 @@
|
||||||
|
|
||||||
MediaCategory *cat = _data[j];
|
MediaCategory *cat = _data[j];
|
||||||
NSInteger valid = [cat validCount];
|
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) {
|
for (NSInteger i = 0; i < valid; ++i) {
|
||||||
|
|
||||||
MediaItem *item = [cat objectAtIndex: i];
|
MediaItem *item = [cat objectAtIndex: i];
|
||||||
NSString *arg = [item argument];
|
NSString *arg = [item argument];
|
||||||
|
|
||||||
++index;
|
switch(j) {
|
||||||
if (!arg) continue;
|
case kIndexFloppy8:
|
||||||
#if 0
|
index = ffsll(floppy_mask_8);
|
||||||
// TODO -- FLOPPY_8 support.
|
floppy_mask_8 &= ~(1 << (index-1));
|
||||||
|
break;
|
||||||
if (j == kIndexFloppy525) {
|
case kIndexFloppy525:
|
||||||
// assumes < 64 floppies....
|
index = ffsll(floppy_mask_5_25);
|
||||||
// infinite loop if no floppy device...
|
floppy_mask_5_25 &= ~(1 << (index-1));
|
||||||
if (floppy_mask == 0) break;
|
break;
|
||||||
while ((floppy_mask & 0x01) == 0) {
|
case kIndexFloppy35:
|
||||||
floppy_mask >>= 1;
|
index = ffsll(floppy_mask_3_5);
|
||||||
|
floppy_mask_3_5 &= ~(1 << (index-1));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
++index;
|
++index;
|
||||||
}
|
|
||||||
} else if (j == kIndexFloppy35) {
|
|
||||||
while ((floppy_mask & 0x01)) {
|
|
||||||
floppy_mask >>= 1;
|
|
||||||
++index;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
++index;
|
|
||||||
floppy_mask >>= 1;
|
|
||||||
if (!arg) continue;
|
if (!arg) continue;
|
||||||
#endif
|
if (!index) continue;
|
||||||
|
|
||||||
[args addObject: [NSString stringWithFormat: @"-%s%u", prefix[j], index]];
|
[args addObject: [NSString stringWithFormat: @"-%s%u", prefix[j], index]];
|
||||||
[args addObject: arg];
|
[args addObject: arg];
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue