mirror of
https://github.com/ksherlock/ample.git
synced 2025-02-08 12:30:52 +00:00
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 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;
|
||||
|
||||
|
||||
|
@ -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 _
|
||||
|
@ -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];
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user