mirror of
https://github.com/holub/mame
synced 2025-10-06 17:08:28 +03:00
Added FM resyncs in READ_TRACK, changed threshold.
This commit is contained in:
parent
031c9ca8fb
commit
a6f79509a1
@ -18,8 +18,10 @@
|
|||||||
#define LOG_WRITE (1U << 10) // Show write operation on image
|
#define LOG_WRITE (1U << 10) // Show write operation on image
|
||||||
#define LOG_TRANSITION (1U << 11) // Show transitions
|
#define LOG_TRANSITION (1U << 11) // Show transitions
|
||||||
#define LOG_STATE (1U << 12) // Show state machine
|
#define LOG_STATE (1U << 12) // Show state machine
|
||||||
|
#define LOG_LIVE (1U << 13) // Live states
|
||||||
|
#define LOG_FUNC (1U << 14) // Function calls
|
||||||
|
|
||||||
//#define VERBOSE (LOG_GENERAL | LOG_SETUP| LOG_COMMAND | LOG_STATE | LOG_LINES )
|
#define VERBOSE (LOG_GENERAL )
|
||||||
//#define LOG_OUTPUT_STREAM std::cout
|
//#define LOG_OUTPUT_STREAM std::cout
|
||||||
|
|
||||||
#include "logmacro.h"
|
#include "logmacro.h"
|
||||||
@ -36,6 +38,8 @@
|
|||||||
#define LOGWRITE(...) LOGMASKED(LOG_WRITE, __VA_ARGS__)
|
#define LOGWRITE(...) LOGMASKED(LOG_WRITE, __VA_ARGS__)
|
||||||
#define LOGTRANSITION(...) LOGMASKED(LOG_TRANSITION, __VA_ARGS__)
|
#define LOGTRANSITION(...) LOGMASKED(LOG_TRANSITION, __VA_ARGS__)
|
||||||
#define LOGSTATE(...) LOGMASKED(LOG_STATE, __VA_ARGS__)
|
#define LOGSTATE(...) LOGMASKED(LOG_STATE, __VA_ARGS__)
|
||||||
|
#define LOGLIVE(...) LOGMASKED(LOG_LIVE, __VA_ARGS__)
|
||||||
|
#define LOGFUNC(...) LOGMASKED(LOG_FUNC, __VA_ARGS__)
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
#define FUNCNAME __func__
|
#define FUNCNAME __func__
|
||||||
@ -244,7 +248,7 @@ void wd_fdc_device_base::device_timer(emu_timer &timer, device_timer_id id, int
|
|||||||
|
|
||||||
void wd_fdc_device_base::command_end()
|
void wd_fdc_device_base::command_end()
|
||||||
{
|
{
|
||||||
LOGCOMMAND("%s\n", FUNCNAME);
|
LOGFUNC("%s\n", FUNCNAME);
|
||||||
main_state = sub_state = IDLE;
|
main_state = sub_state = IDLE;
|
||||||
motor_timeout = 0;
|
motor_timeout = 0;
|
||||||
|
|
||||||
@ -640,7 +644,7 @@ void wd_fdc_device_base::read_id_start()
|
|||||||
|
|
||||||
void wd_fdc_device_base::read_id_continue()
|
void wd_fdc_device_base::read_id_continue()
|
||||||
{
|
{
|
||||||
LOG("%s\n", FUNCNAME);
|
LOGFUNC("%s\n", FUNCNAME);
|
||||||
for(;;) {
|
for(;;) {
|
||||||
switch(sub_state) {
|
switch(sub_state) {
|
||||||
case SPINUP:
|
case SPINUP:
|
||||||
@ -949,7 +953,7 @@ void wd_fdc_device_base::interrupt_start()
|
|||||||
|
|
||||||
void wd_fdc_device_base::general_continue()
|
void wd_fdc_device_base::general_continue()
|
||||||
{
|
{
|
||||||
LOG("%s\n", FUNCNAME);
|
LOGFUNC("%s\n", FUNCNAME);
|
||||||
if(cur_live.state != IDLE) {
|
if(cur_live.state != IDLE) {
|
||||||
live_run();
|
live_run();
|
||||||
if(cur_live.state != IDLE)
|
if(cur_live.state != IDLE)
|
||||||
@ -1230,7 +1234,7 @@ uint8_t wd_fdc_device_base::data_r()
|
|||||||
|
|
||||||
void wd_fdc_device_base::gen_w(int reg, uint8_t val)
|
void wd_fdc_device_base::gen_w(int reg, uint8_t val)
|
||||||
{
|
{
|
||||||
LOGSETUP("%s %02x: %02x\n", FUNCNAME, reg, val);
|
LOGFUNC("%s %02x: %02x\n", FUNCNAME, reg, val);
|
||||||
switch(reg) {
|
switch(reg) {
|
||||||
case 0: cmd_w(val); break;
|
case 0: cmd_w(val); break;
|
||||||
case 1: track_w(val); break;
|
case 1: track_w(val); break;
|
||||||
@ -1404,7 +1408,7 @@ READ_LINE_MEMBER(wd_fdc_device_base::enp_r)
|
|||||||
|
|
||||||
void wd_fdc_device_base::live_start(int state)
|
void wd_fdc_device_base::live_start(int state)
|
||||||
{
|
{
|
||||||
LOG("%s\n", FUNCNAME);
|
LOGFUNC("%s\n", FUNCNAME);
|
||||||
cur_live.tm = machine().time();
|
cur_live.tm = machine().time();
|
||||||
cur_live.state = state;
|
cur_live.state = state;
|
||||||
cur_live.next_state = -1;
|
cur_live.next_state = -1;
|
||||||
@ -1429,7 +1433,7 @@ void wd_fdc_device_base::live_start(int state)
|
|||||||
|
|
||||||
void wd_fdc_device_base::checkpoint()
|
void wd_fdc_device_base::checkpoint()
|
||||||
{
|
{
|
||||||
LOG("%s\n", FUNCNAME);
|
LOGFUNC("%s\n", FUNCNAME);
|
||||||
pll_commit(floppy, cur_live.tm);
|
pll_commit(floppy, cur_live.tm);
|
||||||
checkpoint_live = cur_live;
|
checkpoint_live = cur_live;
|
||||||
pll_save_checkpoint();
|
pll_save_checkpoint();
|
||||||
@ -1582,7 +1586,7 @@ void wd_fdc_device_base::live_run(attotime limit)
|
|||||||
for(;;) {
|
for(;;) {
|
||||||
switch(cur_live.state) {
|
switch(cur_live.state) {
|
||||||
case SEARCH_ADDRESS_MARK_HEADER:
|
case SEARCH_ADDRESS_MARK_HEADER:
|
||||||
//LOG("%s - SEARCH_ADDRESS_MARK_HEADER\n", FUNCNAME);
|
LOGLIVE("%s - SEARCH_ADDRESS_MARK_HEADER\n", FUNCNAME);
|
||||||
if(read_one_bit(limit))
|
if(read_one_bit(limit))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -1616,7 +1620,7 @@ void wd_fdc_device_base::live_run(attotime limit)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case READ_HEADER_BLOCK_HEADER: {
|
case READ_HEADER_BLOCK_HEADER: {
|
||||||
LOG("%s - READ_HEADER_BLOCK_HEADER\n", FUNCNAME);
|
LOGLIVE("%s - READ_HEADER_BLOCK_HEADER\n", FUNCNAME);
|
||||||
if(read_one_bit(limit))
|
if(read_one_bit(limit))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -1657,7 +1661,7 @@ void wd_fdc_device_base::live_run(attotime limit)
|
|||||||
}
|
}
|
||||||
|
|
||||||
case READ_ID_BLOCK_TO_LOCAL: {
|
case READ_ID_BLOCK_TO_LOCAL: {
|
||||||
LOG("%s - READ_ID_BLOCK_TO_LOCAL\n", FUNCNAME);
|
LOGLIVE("%s - READ_ID_BLOCK_TO_LOCAL\n", FUNCNAME);
|
||||||
if(read_one_bit(limit))
|
if(read_one_bit(limit))
|
||||||
return;
|
return;
|
||||||
if(cur_live.bit_counter & 15)
|
if(cur_live.bit_counter & 15)
|
||||||
@ -1673,7 +1677,7 @@ void wd_fdc_device_base::live_run(attotime limit)
|
|||||||
}
|
}
|
||||||
|
|
||||||
case READ_ID_BLOCK_TO_DMA:
|
case READ_ID_BLOCK_TO_DMA:
|
||||||
LOG("%s - READ_ID_BLOCK_TO_DMA\n", FUNCNAME);
|
LOGLIVE("%s - READ_ID_BLOCK_TO_DMA\n", FUNCNAME);
|
||||||
if(read_one_bit(limit))
|
if(read_one_bit(limit))
|
||||||
return;
|
return;
|
||||||
if(cur_live.bit_counter & 15)
|
if(cur_live.bit_counter & 15)
|
||||||
@ -1682,7 +1686,7 @@ void wd_fdc_device_base::live_run(attotime limit)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
case READ_ID_BLOCK_TO_DMA_BYTE:
|
case READ_ID_BLOCK_TO_DMA_BYTE:
|
||||||
LOG("%s - READ_ID_BLOCK_TO_DMA_BYTE\n", FUNCNAME);
|
LOGLIVE("%s - READ_ID_BLOCK_TO_DMA_BYTE\n", FUNCNAME);
|
||||||
data = cur_live.data_reg;
|
data = cur_live.data_reg;
|
||||||
if(cur_live.bit_counter == 16)
|
if(cur_live.bit_counter == 16)
|
||||||
sector = data;
|
sector = data;
|
||||||
@ -1703,7 +1707,7 @@ void wd_fdc_device_base::live_run(attotime limit)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case SEARCH_ADDRESS_MARK_DATA:
|
case SEARCH_ADDRESS_MARK_DATA:
|
||||||
LOG("%s - SEARCH_ADDRESS_MARK_DATA\n", FUNCNAME);
|
LOGLIVE("%s - SEARCH_ADDRESS_MARK_DATA\n", FUNCNAME);
|
||||||
if(read_one_bit(limit))
|
if(read_one_bit(limit))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -1755,7 +1759,7 @@ void wd_fdc_device_base::live_run(attotime limit)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case READ_DATA_BLOCK_HEADER: {
|
case READ_DATA_BLOCK_HEADER: {
|
||||||
LOG("%s - READ_DATA_BLOCK_HEADER\n", FUNCNAME);
|
LOGLIVE("%s - READ_DATA_BLOCK_HEADER\n", FUNCNAME);
|
||||||
if(read_one_bit(limit))
|
if(read_one_bit(limit))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -1795,13 +1799,13 @@ void wd_fdc_device_base::live_run(attotime limit)
|
|||||||
}
|
}
|
||||||
|
|
||||||
case SEARCH_ADDRESS_MARK_DATA_FAILED:
|
case SEARCH_ADDRESS_MARK_DATA_FAILED:
|
||||||
LOG("%s - SEARCH_ADDRESS_MARK_DATA_FAILED\n", FUNCNAME);
|
LOGLIVE("%s - SEARCH_ADDRESS_MARK_DATA_FAILED\n", FUNCNAME);
|
||||||
status |= S_RNF;
|
status |= S_RNF;
|
||||||
cur_live.state = IDLE;
|
cur_live.state = IDLE;
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case READ_SECTOR_DATA: {
|
case READ_SECTOR_DATA: {
|
||||||
LOG("%s - READ_SECTOR_DATA\n", FUNCNAME);
|
LOGLIVE("%s - READ_SECTOR_DATA\n", FUNCNAME);
|
||||||
if(read_one_bit(limit))
|
if(read_one_bit(limit))
|
||||||
return;
|
return;
|
||||||
if(cur_live.bit_counter & 15)
|
if(cur_live.bit_counter & 15)
|
||||||
@ -1823,7 +1827,7 @@ void wd_fdc_device_base::live_run(attotime limit)
|
|||||||
}
|
}
|
||||||
|
|
||||||
case READ_SECTOR_DATA_BYTE:
|
case READ_SECTOR_DATA_BYTE:
|
||||||
LOG("%s - READ_SECTOR_DATA_BYTE\n", FUNCNAME);
|
LOGLIVE("%s - READ_SECTOR_DATA_BYTE\n", FUNCNAME);
|
||||||
data = cur_live.data_reg;
|
data = cur_live.data_reg;
|
||||||
set_drq();
|
set_drq();
|
||||||
cur_live.state = READ_SECTOR_DATA;
|
cur_live.state = READ_SECTOR_DATA;
|
||||||
@ -1831,14 +1835,22 @@ void wd_fdc_device_base::live_run(attotime limit)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case READ_TRACK_DATA: {
|
case READ_TRACK_DATA: {
|
||||||
LOG("%s - READ_TRACK_DATA\n", FUNCNAME);
|
LOGLIVE("%s - READ_TRACK_DATA\n", FUNCNAME);
|
||||||
if(read_one_bit(limit))
|
if(read_one_bit(limit))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if(cur_live.bit_counter != 16
|
if(cur_live.bit_counter != 16
|
||||||
&& cur_live.shift_reg != 0x4489
|
// MFM resyncs
|
||||||
&& cur_live.shift_reg != 0x5224)
|
&& !(!dden && (cur_live.shift_reg == 0x4489
|
||||||
|
|| cur_live.shift_reg == 0x5224))
|
||||||
|
// FM resyncs
|
||||||
|
&& !(dden && (cur_live.shift_reg == 0xf57e // FM IDAM
|
||||||
|
|| cur_live.shift_reg == 0xf56f // FM DAM
|
||||||
|
|| cur_live.shift_reg == 0xf56a)) // FM DDAM
|
||||||
|
)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
||||||
// Incorrect, hmmm
|
// Incorrect, hmmm
|
||||||
// Probably >2 + not just after a sync if <16
|
// Probably >2 + not just after a sync if <16
|
||||||
|
|
||||||
@ -1848,7 +1860,8 @@ void wd_fdc_device_base::live_run(attotime limit)
|
|||||||
// 8: 00.00.0a.a1 9: ff.ff.e1.a1 10: 00.00.14.a1 11: ff.ff.ce.a1
|
// 8: 00.00.0a.a1 9: ff.ff.e1.a1 10: 00.00.14.a1 11: ff.ff.ce.a1
|
||||||
// 12: 00.00.14.a1 13: ff.ff.c2.a1 14: 00.00.14.a1 15: ff.ff.c2.a1
|
// 12: 00.00.14.a1 13: ff.ff.c2.a1 14: 00.00.14.a1 15: ff.ff.c2.a1
|
||||||
|
|
||||||
bool output_byte = cur_live.bit_counter > 5;
|
// MZ: TI99 "DISkASSEMBLER" copy protection requires a threshold of 8
|
||||||
|
bool output_byte = cur_live.bit_counter > 8;
|
||||||
|
|
||||||
cur_live.data_separator_phase = false;
|
cur_live.data_separator_phase = false;
|
||||||
cur_live.bit_counter = 0;
|
cur_live.bit_counter = 0;
|
||||||
@ -1861,7 +1874,7 @@ void wd_fdc_device_base::live_run(attotime limit)
|
|||||||
}
|
}
|
||||||
|
|
||||||
case READ_TRACK_DATA_BYTE:
|
case READ_TRACK_DATA_BYTE:
|
||||||
LOG("%s - READ_TRACK_DATA_BYTE\n", FUNCNAME);
|
LOGLIVE("%s - READ_TRACK_DATA_BYTE\n", FUNCNAME);
|
||||||
data = cur_live.data_reg;
|
data = cur_live.data_reg;
|
||||||
set_drq();
|
set_drq();
|
||||||
cur_live.state = READ_TRACK_DATA;
|
cur_live.state = READ_TRACK_DATA;
|
||||||
@ -2307,7 +2320,7 @@ int wd_fdc_digital_device_base::digital_pll_t::get_next_bit(attotime &tm, floppy
|
|||||||
LOGTRANSITION("transition_time=%s\n", tts(when).c_str());
|
LOGTRANSITION("transition_time=%s\n", tts(when).c_str());
|
||||||
*/
|
*/
|
||||||
for(;;) {
|
for(;;) {
|
||||||
// LOGTRANSITION)("slot=%2d, counter=%03x\n", slot, counter);
|
// LOGTRANSITION("slot=%2d, counter=%03x\n", slot, counter);
|
||||||
attotime etime = ctime+delays[slot];
|
attotime etime = ctime+delays[slot];
|
||||||
// LOGTRANSITION("etime=%s\n", tts(etime).c_str());
|
// LOGTRANSITION("etime=%s\n", tts(etime).c_str());
|
||||||
if(etime > limit)
|
if(etime > limit)
|
||||||
|
Loading…
Reference in New Issue
Block a user