mirror of
https://github.com/holub/mame
synced 2025-04-18 22:49:58 +03:00
flex, img: Remove mutable variables from the class
This commit is contained in:
parent
330162f523
commit
8b3c366a04
@ -110,8 +110,8 @@ int flex_format::find_size(util::random_read &io, uint32_t form_factor, const st
|
||||
if (info.month < 1 || info.month > 12 || info.day < 1 || info.day > 31)
|
||||
return -1;
|
||||
|
||||
boot0_sector_id = 1;
|
||||
boot1_sector_id = 2;
|
||||
uint8_t boot0_sector_id = 1;
|
||||
// uint8_t boot1_sector_id = 2;
|
||||
|
||||
// This floppy format uses a strategy of looking for 6800 boot code to
|
||||
// set the numbering of the first two sectors. If this is shown to not
|
||||
@ -122,12 +122,13 @@ int flex_format::find_size(util::random_read &io, uint32_t form_factor, const st
|
||||
// Found a 6800 stack load and branch, looks like a 6800 boot sector.
|
||||
boot0_sector_id = 0;
|
||||
|
||||
// boot1 is not actually used (yet?)
|
||||
// Look for a link to the next sector, normal usage.
|
||||
if (boot1[0] != 0 || boot1[1] != 3)
|
||||
{
|
||||
// if (boot1[0] != 0 || boot1[1] != 3)
|
||||
// {
|
||||
// If not then assume it is a boot sector.
|
||||
boot1_sector_id = 1;
|
||||
}
|
||||
// boot1_sector_id = 1;
|
||||
// }
|
||||
}
|
||||
|
||||
for (int i=0; formats[i].form_factor; i++) {
|
||||
|
@ -48,9 +48,6 @@ private:
|
||||
static const format formats_head1[];
|
||||
static const format formats_track0[];
|
||||
static const format formats_head1_track0[];
|
||||
|
||||
uint8_t boot0_sector_id;
|
||||
uint8_t boot1_sector_id;
|
||||
};
|
||||
|
||||
extern const floppy_format_type FLOPPY_FLEX_FORMAT;
|
||||
|
@ -75,7 +75,8 @@ bool img_format::load(util::random_read &io, uint32_t form_factor, const std::ve
|
||||
std::vector<uint32_t> track_data;
|
||||
|
||||
write_gap(track_data, 0 , PREIDX_GAP);
|
||||
write_mmfm_byte(track_data , INDEX_AM , AM_CLOCK);
|
||||
uint16_t crc = 0;
|
||||
write_mmfm_byte(track_data , INDEX_AM , crc, AM_CLOCK);
|
||||
|
||||
// Compute interleave factor and skew for current track
|
||||
unsigned il_factor;
|
||||
@ -160,24 +161,24 @@ std::vector<uint8_t> img_format::interleaved_sectors(unsigned il_factor)
|
||||
return out;
|
||||
}
|
||||
|
||||
void img_format::write_mmfm_bit(std::vector<uint32_t> &buffer , bool data_bit , bool clock_bit)
|
||||
void img_format::write_mmfm_bit(std::vector<uint32_t> &buffer , bool data_bit , bool clock_bit , uint16_t &crc)
|
||||
{
|
||||
bool had_transition = buffer.size() < 2 ? false : bit_r(buffer, buffer.size() - 1) || bit_r(buffer , buffer.size() - 2);
|
||||
clock_bit = !data_bit && (clock_bit || !had_transition);
|
||||
bit_w(buffer , clock_bit , CELL_SIZE);
|
||||
bit_w(buffer , data_bit , CELL_SIZE);
|
||||
|
||||
if (util::BIT(m_crc , 15) ^ data_bit) {
|
||||
m_crc = (m_crc << 1) ^ CRC_POLY;
|
||||
if (util::BIT(crc , 15) ^ data_bit) {
|
||||
crc = (crc << 1) ^ CRC_POLY;
|
||||
} else {
|
||||
m_crc <<= 1;
|
||||
crc <<= 1;
|
||||
}
|
||||
}
|
||||
|
||||
void img_format::write_mmfm_byte(std::vector<uint32_t> &buffer , uint8_t data , uint8_t clock)
|
||||
void img_format::write_mmfm_byte(std::vector<uint32_t> &buffer , uint8_t data , uint16_t &crc , uint8_t clock)
|
||||
{
|
||||
for (int i = 7; i >= 0; i--) {
|
||||
write_mmfm_bit(buffer , util::BIT(data , i) , util::BIT(clock , i));
|
||||
write_mmfm_bit(buffer , util::BIT(data , i) , util::BIT(clock , i) , crc);
|
||||
}
|
||||
}
|
||||
|
||||
@ -188,19 +189,21 @@ void img_format::write_sync(std::vector<uint32_t> &buffer)
|
||||
|
||||
void img_format::write_crc(std::vector<uint32_t> &buffer , uint16_t crc)
|
||||
{
|
||||
uint16_t xcrc = crc;
|
||||
// Note that CRC is stored with MSB (x^15) first
|
||||
for (unsigned i = 0; i < 16; i++) {
|
||||
write_mmfm_bit(buffer , util::BIT(crc , 15 - i) , 0);
|
||||
write_mmfm_bit(buffer , util::BIT(crc , 15 - i) , 0 , xcrc);
|
||||
}
|
||||
}
|
||||
|
||||
void img_format::write_gap(std::vector<uint32_t> &buffer , unsigned size_00 , unsigned size_ff)
|
||||
{
|
||||
uint16_t crc = 0;
|
||||
for (unsigned i = 0; i < size_00; ++i) {
|
||||
write_mmfm_byte(buffer, 0);
|
||||
write_mmfm_byte(buffer, 0 , crc);
|
||||
}
|
||||
for (unsigned i = 0; i < size_ff; ++i) {
|
||||
write_mmfm_byte(buffer, 0xff);
|
||||
write_mmfm_byte(buffer, 0xff , crc);
|
||||
}
|
||||
}
|
||||
|
||||
@ -228,27 +231,27 @@ void img_format::write_sector(std::vector<uint32_t> &buffer , uint8_t track_no ,
|
||||
// Gap1
|
||||
write_sync(buffer);
|
||||
// ID AM
|
||||
m_crc = 0;
|
||||
write_mmfm_byte(buffer , ID_AM , AM_CLOCK);
|
||||
uint16_t crc = 0;
|
||||
write_mmfm_byte(buffer , ID_AM , crc , AM_CLOCK);
|
||||
// Track #
|
||||
write_mmfm_byte(buffer , track_no);
|
||||
write_mmfm_byte(buffer , 0);
|
||||
write_mmfm_byte(buffer , track_no , crc);
|
||||
write_mmfm_byte(buffer , 0 , crc);
|
||||
// Sector #
|
||||
write_mmfm_byte(buffer , sect_no);
|
||||
write_mmfm_byte(buffer , 0);
|
||||
write_mmfm_byte(buffer , sect_no , crc);
|
||||
write_mmfm_byte(buffer , 0 , crc);
|
||||
// ID CRC
|
||||
write_crc(buffer , m_crc);
|
||||
write_crc(buffer , crc);
|
||||
// Gap 2
|
||||
write_sync(buffer);
|
||||
// Data AM
|
||||
m_crc = 0;
|
||||
write_mmfm_byte(buffer , DATA_AM , AM_CLOCK);
|
||||
crc = 0;
|
||||
write_mmfm_byte(buffer , DATA_AM , crc, AM_CLOCK);
|
||||
for (unsigned i = 0; i < SECTOR_SIZE; i++) {
|
||||
// Data
|
||||
write_mmfm_byte(buffer , sect_data[ i ]);
|
||||
write_mmfm_byte(buffer , sect_data[ i ] , crc);
|
||||
}
|
||||
// Data CRC
|
||||
write_crc(buffer , m_crc);
|
||||
write_crc(buffer , crc);
|
||||
}
|
||||
|
||||
void img_format::fill_with_gap4(std::vector<uint32_t> &buffer)
|
||||
|
@ -36,11 +36,9 @@ public:
|
||||
virtual bool supports_save() const override;
|
||||
|
||||
private:
|
||||
uint16_t m_crc;
|
||||
|
||||
static std::vector<uint8_t> interleaved_sectors(unsigned il_factor);
|
||||
void write_mmfm_bit(std::vector<uint32_t> &buffer , bool data_bit , bool clock_bit);
|
||||
void write_mmfm_byte(std::vector<uint32_t> &buffer , uint8_t data , uint8_t clock = 0);
|
||||
void write_mmfm_bit(std::vector<uint32_t> &buffer , bool data_bit , bool clock_bit , uint16_t &crc);
|
||||
void write_mmfm_byte(std::vector<uint32_t> &buffer , uint8_t data , uint16_t &crc , uint8_t clock = 0);
|
||||
void write_sync(std::vector<uint32_t> &buffer);
|
||||
void write_crc(std::vector<uint32_t> &buffer , uint16_t crc);
|
||||
void write_gap(std::vector<uint32_t> &buffer , unsigned size_00 , unsigned size_ff);
|
||||
|
Loading…
Reference in New Issue
Block a user