summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/machine/wd_fdc.cpp
diff options
context:
space:
mode:
author Joakim Larsson Edstrom <joakimlarsson42@gmail.com>2017-12-15 22:32:31 +0100
committer Joakim Larsson Edstrom <joakimlarsson42@gmail.com>2017-12-15 22:32:31 +0100
commit9434fb20a30c2c5b020e296117a02ecd32aed7c7 (patch)
tree50273f4c55f2ce121b250fba61e72c5df8a46d18 /src/devices/machine/wd_fdc.cpp
parent479a9c81238c5fdbddd9bc3d8f4db2a6d18f5a07 (diff)
wd_fdc.cpp: updated debug printouts to use logmacro.h LOG messages, feel free to revert if not for the better
Diffstat (limited to 'src/devices/machine/wd_fdc.cpp')
-rw-r--r--src/devices/machine/wd_fdc.cpp256
1 files changed, 140 insertions, 116 deletions
diff --git a/src/devices/machine/wd_fdc.cpp b/src/devices/machine/wd_fdc.cpp
index 8baeff7edf0..9e4c5738ebb 100644
--- a/src/devices/machine/wd_fdc.cpp
+++ b/src/devices/machine/wd_fdc.cpp
@@ -5,6 +5,44 @@
#include "debugger.h"
+//#define LOG_GENERAL (1U << 0) //defined in logmacro.h already
+#define LOG_SETUP (1U << 1) // Shows register setup
+#define LOG_SHIFT (1U << 2) // Shows shift register contents
+#define LOG_COMP (1U << 3) // Shows operations on the CPU side
+#define LOG_COMMAND (1U << 4) // Shows command invocation
+#define LOG_SYNC (1U << 5) // Shows sync actions
+#define LOG_LINES (1U << 6) // Show control lines
+#define LOG_EVENT (1U << 7) // Show events
+#define LOG_MATCH (1U << 8) // Show sector match operation
+#define LOG_DESC (1U << 9) // Show track description
+#define LOG_WRITE (1U << 10) // Show write operation on image
+#define LOG_TRANSITION (1U << 11) // Show transitions
+#define LOG_STATE (1U << 12) // Show state machine
+
+//#define VERBOSE (LOG_GENERAL | LOG_SETUP| LOG_COMMAND | LOG_STATE | LOG_LINES )
+//#define LOG_OUTPUT_STREAM std::cout
+
+#include "logmacro.h"
+
+#define LOGSETUP(...) LOGMASKED(LOG_SETUP, __VA_ARGS__)
+#define LOGSHIFT(...) LOGMASKED(LOG_SHIFT, __VA_ARGS__)
+#define LOGCOMP(...) LOGMASKED(LOG_COMP, __VA_ARGS__)
+#define LOGCOMMAND(...) LOGMASKED(LOG_COMMAND, __VA_ARGS__)
+#define LOGSYNC(...) LOGMASKED(LOG_SYNC, __VA_ARGS__)
+#define LOGLINES(...) LOGMASKED(LOG_LINES, __VA_ARGS__)
+#define LOGEVENT(...) LOGMASKED(LOG_EVENT, __VA_ARGS__)
+#define LOGMATCH(...) LOGMASKED(LOG_MATCH, __VA_ARGS__)
+#define LOGDESC(...) LOGMASKED(LOG_DESC, __VA_ARGS__)
+#define LOGWRITE(...) LOGMASKED(LOG_WRITE, __VA_ARGS__)
+#define LOGTRANSITION(...) LOGMASKED(LOG_TRANSITION, __VA_ARGS__)
+#define LOGSTATE(...) LOGMASKED(LOG_STATE, __VA_ARGS__)
+
+#ifdef _MSC_VER
+#define FUNCNAME __func__
+#else
+#define FUNCNAME __PRETTY_FUNCTION__
+#endif
+
DEFINE_DEVICE_TYPE(FD1771, fd1771_device, "fd1771", "FD1771 FDC")
DEFINE_DEVICE_TYPE(FD1781, fd1781_device, "fd1781", "FD1781 FDC")
@@ -35,43 +73,6 @@ DEFINE_DEVICE_TYPE(WD1770, wd1770_device, "wd1770", "Western Digital
DEFINE_DEVICE_TYPE(WD1772, wd1772_device, "wd1772", "Western Digital WD1772 FDC")
DEFINE_DEVICE_TYPE(WD1773, wd1773_device, "wd1773", "Western Digital WD1773 FDC")
-/*
- Debugging flags. Set to 0 or 1.
-*/
-
-// Shows shift register contents
-#define TRACE_SHIFT 0
-
-// Shows operations on the CPU side
-#define TRACE_COMP 0
-
-// Shows command invocation
-#define TRACE_COMMAND 0
-
-// Shows sync actions
-#define TRACE_SYNC 0
-
-// Show control lines
-#define TRACE_LINES 0
-
-// Show events
-#define TRACE_EVENT 0
-
-// Show sector match operation
-#define TRACE_MATCH 0
-
-// Show track description
-#define TRACE_DESC 0
-
-// Show write operation on image
-#define TRACE_WRITE 0
-
-// Show transitions
-#define TRACE_TRANSITION 0
-
-// Show state machine
-#define TRACE_STATE 0
-
wd_fdc_device_base::wd_fdc_device_base(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, type, tag, owner, clock),
intrq_cb(*this),
@@ -209,7 +210,7 @@ WRITE_LINE_MEMBER(wd_fdc_device_base::dden_w)
if(dden != bool(state)) {
dden = bool(state);
- if (TRACE_LINES) logerror("select %s\n", dden ? "fm" : "mfm");
+ LOGLINES("select %s\n", dden ? "fm" : "mfm");
}
}
@@ -228,7 +229,7 @@ std::string wd_fdc_device_base::ttsn()
void wd_fdc_device_base::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
{
- if (TRACE_EVENT) logerror("Event fired for timer %s\n", (id==TM_GEN)? "TM_GEN" : (id==TM_CMD)? "TM_CMD" : (id==TM_TRACK)? "TM_TRACK" : "TM_SECTOR");
+ LOGEVENT("Event fired for timer %s\n", (id==TM_GEN)? "TM_GEN" : (id==TM_CMD)? "TM_CMD" : (id==TM_TRACK)? "TM_TRACK" : "TM_SECTOR");
live_sync();
switch(id) {
@@ -243,6 +244,7 @@ void wd_fdc_device_base::device_timer(emu_timer &timer, device_timer_id id, int
void wd_fdc_device_base::command_end()
{
+ LOGCOMMAND("%s\n", FUNCNAME);
main_state = sub_state = IDLE;
motor_timeout = 0;
@@ -256,7 +258,7 @@ void wd_fdc_device_base::command_end()
void wd_fdc_device_base::seek_start(int state)
{
- if (TRACE_COMMAND) logerror("cmd: seek %d %x (track=%d)\n", state, data, track);
+ LOGCOMMAND("cmd: seek %d %x (track=%d)\n", state, data, track);
main_state = state;
status &= ~(S_CRC|S_RNF|S_SPIN);
if(head_control) {
@@ -276,7 +278,7 @@ void wd_fdc_device_base::seek_continue()
for(;;) {
switch(sub_state) {
case SPINUP:
- if (TRACE_STATE) logerror("SPINUP\n");
+ LOGSTATE("SPINUP\n");
if(!(status & S_MON)) {
spinup();
return;
@@ -287,11 +289,11 @@ void wd_fdc_device_base::seek_continue()
break;
case SPINUP_WAIT:
- if (TRACE_STATE) logerror("SPINUP_WAIT\n");
+ LOGSTATE("SPINUP_WAIT\n");
return;
case SPINUP_DONE:
- if (TRACE_STATE) logerror("SPINUP_DONE\n");
+ LOGSTATE("SPINUP_DONE\n");
if(main_state == RESTORE && floppy && !floppy->trk00_r()) {
sub_state = SEEK_WAIT_STEP_TIME;
delay_cycles(t_gen, step_times[command & 3]);
@@ -309,7 +311,7 @@ void wd_fdc_device_base::seek_continue()
break;
case SEEK_MOVE:
- if (TRACE_STATE) logerror("SEEK_MOVE\n");
+ LOGSTATE("SEEK_MOVE\n");
if(floppy) {
floppy->dir_w(last_dir);
floppy->stp_w(0);
@@ -325,11 +327,11 @@ void wd_fdc_device_base::seek_continue()
return;
case SEEK_WAIT_STEP_TIME:
- if (TRACE_STATE) logerror("SEEK_WAIT_STEP_TIME\n");
+ LOGSTATE("SEEK_WAIT_STEP_TIME\n");
return;
case SEEK_WAIT_STEP_TIME_DONE: {
- if (TRACE_STATE) logerror("SEEK_WAIT_STEP_TIME_DONE\n");
+ LOGSTATE("SEEK_WAIT_STEP_TIME_DONE\n");
bool done = false;
switch(main_state) {
case RESTORE:
@@ -362,16 +364,16 @@ void wd_fdc_device_base::seek_continue()
}
case SEEK_WAIT_STABILIZATION_TIME:
- if (TRACE_STATE) logerror("SEEK_WAIT_STABILIZATION_TIME\n");
+ LOGSTATE("SEEK_WAIT_STABILIZATION_TIME\n");
return;
case SEEK_WAIT_STABILIZATION_TIME_DONE:
- if (TRACE_STATE) logerror("SEEK_WAIT_STABILIZATION_TIME_DONE\n");
+ LOGSTATE("SEEK_WAIT_STABILIZATION_TIME_DONE\n");
sub_state = SEEK_DONE;
break;
case SEEK_DONE:
- if (TRACE_STATE) logerror("SEEK_DONE\n");
+ LOGSTATE("SEEK_DONE\n");
status |= S_HLD;
hld = true;
if (!hld_cb.isnull())
@@ -391,7 +393,7 @@ void wd_fdc_device_base::seek_continue()
return;
case SCAN_ID:
- if (TRACE_STATE) logerror("SCAN_ID\n");
+ LOGSTATE("SCAN_ID\n");
if(cur_live.idbuf[0] != track) {
live_start(SEARCH_ADDRESS_MARK_HEADER);
return;
@@ -405,7 +407,7 @@ void wd_fdc_device_base::seek_continue()
return;
case SCAN_ID_FAILED:
- if (TRACE_STATE) logerror("SCAN_ID_FAILED\n");
+ LOGSTATE("SCAN_ID_FAILED\n");
status |= S_RNF;
command_end();
return;
@@ -419,8 +421,7 @@ void wd_fdc_device_base::seek_continue()
bool wd_fdc_device_base::sector_matches() const
{
- if(TRACE_MATCH)
- logerror("matching read T=%02x H=%02x S=%02x L=%02x - searched T=%02x S=%02x\n",
+ LOGMATCH("matching read T=%02x H=%02x S=%02x L=%02x - searched T=%02x S=%02x\n",
cur_live.idbuf[0], cur_live.idbuf[1], cur_live.idbuf[2], cur_live.idbuf[3],
track, sector);
@@ -441,7 +442,7 @@ bool wd_fdc_device_base::is_ready()
void wd_fdc_device_base::read_sector_start()
{
- if (TRACE_COMMAND) logerror("cmd: read sector%s (c=%02x) t=%d, s=%d\n", command & 0x10 ? " multiple" : "", command, track, sector);
+ LOGCOMMAND("cmd: read sector%s (c=%02x) t=%d, s=%d\n", command & 0x10 ? " multiple" : "", command, track, sector);
if(!is_ready()) {
command_end();
return;
@@ -462,7 +463,7 @@ void wd_fdc_device_base::read_sector_continue()
for(;;) {
switch(sub_state) {
case SPINUP:
- if (TRACE_STATE) logerror("SPINUP\n");
+ LOGSTATE("SPINUP\n");
if(!(status & S_MON)) {
spinup();
return;
@@ -471,11 +472,11 @@ void wd_fdc_device_base::read_sector_continue()
break;
case SPINUP_WAIT:
- if (TRACE_STATE) logerror("SPINUP_WAIT\n");
+ LOGSTATE("SPINUP_WAIT\n");
return;
case SPINUP_DONE:
- if (TRACE_STATE) logerror("SPINUP_DONE\n");
+ LOGSTATE("SPINUP_DONE\n");
if(command & 4) {
sub_state = SETTLE_WAIT;
delay_cycles(t_gen, settle_time());
@@ -486,18 +487,18 @@ void wd_fdc_device_base::read_sector_continue()
}
case SETTLE_WAIT:
- if (TRACE_STATE) logerror("SETTLE_WAIT\n");
+ LOGSTATE("SETTLE_WAIT\n");
return;
case SETTLE_DONE:
- if (TRACE_STATE) logerror("SETTLE_DONE\n");
+ LOGSTATE("SETTLE_DONE\n");
sub_state = SCAN_ID;
counter = 0;
live_start(SEARCH_ADDRESS_MARK_HEADER);
return;
case SCAN_ID:
- if (TRACE_STATE) logerror("SCAN_ID\n");
+ LOGSTATE("SCAN_ID\n");
if(!sector_matches()) {
live_start(SEARCH_ADDRESS_MARK_HEADER);
return;
@@ -513,13 +514,13 @@ void wd_fdc_device_base::read_sector_continue()
return;
case SCAN_ID_FAILED:
- if (TRACE_STATE) logerror("SCAN_ID_FAILED\n");
+ LOGSTATE("SCAN_ID_FAILED\n");
status |= S_RNF;
command_end();
return;
case SECTOR_READ:
- if (TRACE_STATE) logerror("SECTOR_READ\n");
+ LOGSTATE("SECTOR_READ\n");
if(cur_live.crc)
status |= S_CRC;
@@ -541,7 +542,7 @@ void wd_fdc_device_base::read_sector_continue()
void wd_fdc_device_base::read_track_start()
{
- if (TRACE_COMMAND) logerror("cmd: read track (c=%02x) t=%d\n", command, track);
+ LOGCOMMAND("cmd: read track (c=%02x) t=%d\n", command, track);
if(!is_ready()) {
command_end();
@@ -563,7 +564,7 @@ void wd_fdc_device_base::read_track_continue()
for(;;) {
switch(sub_state) {
case SPINUP:
- if (TRACE_STATE) logerror("SPINUP\n");
+ LOGSTATE("SPINUP\n");
if(!(status & S_MON)) {
spinup();
return;
@@ -572,11 +573,11 @@ void wd_fdc_device_base::read_track_continue()
break;
case SPINUP_WAIT:
- if (TRACE_STATE) logerror("SPINUP_WAIT\n");
+ LOGSTATE("SPINUP_WAIT\n");
return;
case SPINUP_DONE:
- if (TRACE_STATE) logerror("SPINUP_DONE\n");
+ LOGSTATE("SPINUP_DONE\n");
if(command & 4) {
sub_state = SETTLE_WAIT;
delay_cycles(t_gen, settle_time());
@@ -588,26 +589,26 @@ void wd_fdc_device_base::read_track_continue()
}
case SETTLE_WAIT:
- if (TRACE_STATE) logerror("SETTLE_WAIT\n");
+ LOGSTATE("SETTLE_WAIT\n");
return;
case SETTLE_DONE:
- if (TRACE_STATE) logerror("SETTLE_DONE\n");
+ LOGSTATE("SETTLE_DONE\n");
sub_state = WAIT_INDEX;
return;
case WAIT_INDEX:
- if (TRACE_STATE) logerror("WAIT_INDEX\n");
+ LOGSTATE("WAIT_INDEX\n");
return;
case WAIT_INDEX_DONE:
- if (TRACE_STATE) logerror("WAIT_INDEX_DONE\n");
+ LOGSTATE("WAIT_INDEX_DONE\n");
sub_state = TRACK_DONE;
live_start(READ_TRACK_DATA);
return;
case TRACK_DONE:
- if (TRACE_STATE) logerror("TRACK_DONE\n");
+ LOGSTATE("TRACK_DONE\n");
command_end();
return;
@@ -620,8 +621,9 @@ void wd_fdc_device_base::read_track_continue()
void wd_fdc_device_base::read_id_start()
{
- if (TRACE_COMMAND) logerror("cmd: read id (c=%02x)\n", command);
+ LOGCOMMAND("cmd: read id (c=%02x)\n", command);
if(!is_ready()) {
+ LOGCOMMAND("cmd: - not ready!");
command_end();
return;
}
@@ -638,10 +640,11 @@ void wd_fdc_device_base::read_id_start()
void wd_fdc_device_base::read_id_continue()
{
+ LOG("%s\n", FUNCNAME);
for(;;) {
switch(sub_state) {
case SPINUP:
- if (TRACE_STATE) logerror("SPINUP\n");
+ LOGSTATE("SPINUP\n");
if(!(status & S_MON)) {
spinup();
return;
@@ -650,11 +653,11 @@ void wd_fdc_device_base::read_id_continue()
break;
case SPINUP_WAIT:
- if (TRACE_STATE) logerror("SPINUP_WAIT\n");
+ LOGSTATE("SPINUP_WAIT\n");
return;
case SPINUP_DONE:
- if (TRACE_STATE) logerror("SPINUP_DONE\n");
+ LOGSTATE("SPINUP_DONE\n");
if(command & 4) {
sub_state = SETTLE_WAIT;
delay_cycles(t_gen, settle_time());
@@ -665,23 +668,23 @@ void wd_fdc_device_base::read_id_continue()
}
case SETTLE_WAIT:
- if (TRACE_STATE) logerror("SETTLE_WAIT\n");
+ LOGSTATE("SETTLE_WAIT\n");
return;
case SETTLE_DONE:
- if (TRACE_STATE) logerror("SETTLE_DONE\n");
+ LOGSTATE("SETTLE_DONE\n");
sub_state = SCAN_ID;
counter = 0;
live_start(SEARCH_ADDRESS_MARK_HEADER);
return;
case SCAN_ID:
- if (TRACE_STATE) logerror("SCAN_ID\n");
+ LOGSTATE("SCAN_ID\n");
command_end();
return;
case SCAN_ID_FAILED:
- if (TRACE_STATE) logerror("SCAN_ID_FAILED\n");
+ LOGSTATE("SCAN_ID_FAILED\n");
status |= S_RNF;
command_end();
return;
@@ -695,7 +698,7 @@ void wd_fdc_device_base::read_id_continue()
void wd_fdc_device_base::write_track_start()
{
- if (TRACE_COMMAND) logerror("cmd: write track (c=%02x) t=%d\n", command, track);
+ LOGCOMMAND("cmd: write track (c=%02x) t=%d\n", command, track);
if(!is_ready()) {
command_end();
@@ -722,7 +725,7 @@ void wd_fdc_device_base::write_track_continue()
for(;;) {
switch(sub_state) {
case SPINUP:
- if (TRACE_STATE) logerror("SPINUP\n");
+ LOGSTATE("SPINUP\n");
if(!(status & S_MON)) {
spinup();
return;
@@ -731,11 +734,11 @@ void wd_fdc_device_base::write_track_continue()
break;
case SPINUP_WAIT:
- if (TRACE_STATE) logerror("SPINUP_WAIT\n");
+ LOGSTATE("SPINUP_WAIT\n");
return;
case SPINUP_DONE:
- if (TRACE_STATE) logerror("SPINUP_DONE\n");
+ LOGSTATE("SPINUP_DONE\n");
if(command & 4) {
sub_state = SETTLE_WAIT;
delay_cycles(t_gen, settle_time());
@@ -746,22 +749,22 @@ void wd_fdc_device_base::write_track_continue()
}
case SETTLE_WAIT:
- if (TRACE_STATE) logerror("SETTLE_WAIT\n");
+ LOGSTATE("SETTLE_WAIT\n");
return;
case SETTLE_DONE:
- if (TRACE_STATE) logerror("SETTLE_DONE\n");
+ LOGSTATE("SETTLE_DONE\n");
set_drq();
sub_state = DATA_LOAD_WAIT;
delay_cycles(t_gen, 192);
return;
case DATA_LOAD_WAIT:
- if (TRACE_STATE) logerror("DATA_LOAD_WAIT\n");
+ LOGSTATE("DATA_LOAD_WAIT\n");
return;
case DATA_LOAD_WAIT_DONE:
- if (TRACE_STATE) logerror("DATA_LOAD_WAIT_DONE\n");
+ LOGSTATE("DATA_LOAD_WAIT_DONE\n");
if(drq) {
status |= S_LOST;
drop_drq();
@@ -772,18 +775,18 @@ void wd_fdc_device_base::write_track_continue()
break;
case WAIT_INDEX:
- if (TRACE_STATE) logerror("WAIT_INDEX\n");
+ LOGSTATE("WAIT_INDEX\n");
return;
case WAIT_INDEX_DONE:
- if (TRACE_STATE) logerror("WAIT_INDEX_DONE\n");
+ LOGSTATE("WAIT_INDEX_DONE\n");
sub_state = TRACK_DONE;
live_start(WRITE_TRACK_DATA);
pll_start_writing(machine().time());
return;
case TRACK_DONE:
- if (TRACE_STATE) logerror("TRACK_DONE\n");
+ LOGSTATE("TRACK_DONE\n");
if(format_last_byte_count) {
char buf[32];
if(format_last_byte_count > 1)
@@ -792,7 +795,7 @@ void wd_fdc_device_base::write_track_continue()
sprintf(buf, "%02x", format_last_byte);
format_description_string += buf;
}
- if (TRACE_DESC) logerror("track description %s\n", format_description_string.c_str());
+ LOGDESC("track description %s\n", format_description_string.c_str());
command_end();
return;
@@ -806,7 +809,7 @@ void wd_fdc_device_base::write_track_continue()
void wd_fdc_device_base::write_sector_start()
{
- if (TRACE_COMMAND) logerror("cmd: write sector%s (c=%02x) t=%d, s=%d\n", command & 0x10 ? " multiple" : "", command, track, sector);
+ LOGCOMMAND("cmd: write sector%s (c=%02x) t=%d, s=%d\n", command & 0x10 ? " multiple" : "", command, track, sector);
if(!is_ready()) {
command_end();
@@ -828,7 +831,7 @@ void wd_fdc_device_base::write_sector_continue()
for(;;) {
switch(sub_state) {
case SPINUP:
- if (TRACE_STATE) logerror("SPINUP\n");
+ LOGSTATE("SPINUP\n");
if(!(status & S_MON)) {
spinup();
return;
@@ -837,11 +840,11 @@ void wd_fdc_device_base::write_sector_continue()
break;
case SPINUP_WAIT:
- if (TRACE_STATE) logerror("SPINUP_WAIT\n");
+ LOGSTATE("SPINUP_WAIT\n");
return;
case SPINUP_DONE:
- if (TRACE_STATE) logerror("SPINUP_DONE\n");
+ LOGSTATE("SPINUP_DONE\n");
if(command & 4) {
sub_state = SETTLE_WAIT;
delay_cycles(t_gen, settle_time());
@@ -852,18 +855,18 @@ void wd_fdc_device_base::write_sector_continue()
}
case SETTLE_WAIT:
- if (TRACE_STATE) logerror("SETTLE_WAIT\n");
+ LOGSTATE("SETTLE_WAIT\n");
return;
case SETTLE_DONE:
- if (TRACE_STATE) logerror("SETTLE_DONE\n");
+ LOGSTATE("SETTLE_DONE\n");
sub_state = SCAN_ID;
counter = 0;
live_start(SEARCH_ADDRESS_MARK_HEADER);
return;
case SCAN_ID:
- if (TRACE_STATE) logerror("SCAN_ID\n");
+ LOGSTATE("SCAN_ID\n");
if(!sector_matches()) {
live_start(SEARCH_ADDRESS_MARK_HEADER);
return;
@@ -879,13 +882,13 @@ void wd_fdc_device_base::write_sector_continue()
return;
case SCAN_ID_FAILED:
- if (TRACE_STATE) logerror("SCAN_ID_FAILED\n");
+ LOGSTATE("SCAN_ID_FAILED\n");
status |= S_RNF;
command_end();
return;
case SECTOR_WRITE:
- if (TRACE_STATE) logerror("SECTOR_WRITE\n");
+ LOGSTATE("SECTOR_WRITE\n");
if(command & 0x10) {
sector++;
sub_state = SPINUP_DONE;
@@ -904,7 +907,7 @@ void wd_fdc_device_base::write_sector_continue()
void wd_fdc_device_base::interrupt_start()
{
- if (TRACE_COMMAND) logerror("cmd: forced interrupt (c=%02x)\n", command);
+ LOGCOMMAND("cmd: forced interrupt (c=%02x)\n", command);
if(status & S_BUSY) {
main_state = sub_state = cur_live.state = IDLE;
@@ -946,6 +949,7 @@ void wd_fdc_device_base::interrupt_start()
void wd_fdc_device_base::general_continue()
{
+ LOG("%s\n", FUNCNAME);
if(cur_live.state != IDLE) {
live_run();
if(cur_live.state != IDLE)
@@ -1025,6 +1029,10 @@ void wd_fdc_device_base::do_cmd_w()
command = cmd_buffer;
cmd_buffer = -1;
+ LOGCOMMAND("%s %02x: %s\n", FUNCNAME, cmd_buffer, std::array<char const *, 16>
+ {{"RESTORE", "SEEK", "STEP", "STEP", "STEP", "STEP", "STEP", "STEP",
+ "READ sector start", "READ sector start", "WRITE sector start", "WRITE sector start",
+ "READ ID start", "INTERRUPT start", "READ track start", "WRITE track start"}}[(command >> 4) & 0x0f]);
switch(command & 0xf0) {
case 0x00:
last_dir = 1;
@@ -1073,8 +1081,8 @@ void wd_fdc_device_base::do_cmd_w()
void wd_fdc_device_base::cmd_w(uint8_t val)
{
- if (TRACE_COMP) logerror("Initiating command %02x\n", val);
if (inverted_bus) val ^= 0xff;
+ LOGCOMP("Initiating command %02x\n", val);
if(intrq && !(intrq_cond & I_IMM)) {
intrq = false;
@@ -1222,6 +1230,7 @@ uint8_t wd_fdc_device_base::data_r()
void wd_fdc_device_base::gen_w(int reg, uint8_t val)
{
+ LOGSETUP("%s %02x: %02x\n", FUNCNAME, reg, val);
switch(reg) {
case 0: cmd_w(val); break;
case 1: track_w(val); break;
@@ -1395,6 +1404,7 @@ READ_LINE_MEMBER(wd_fdc_device_base::enp_r)
void wd_fdc_device_base::live_start(int state)
{
+ LOG("%s\n", FUNCNAME);
cur_live.tm = machine().time();
cur_live.state = state;
cur_live.next_state = -1;
@@ -1419,6 +1429,7 @@ void wd_fdc_device_base::live_start(int state)
void wd_fdc_device_base::checkpoint()
{
+ LOG("%s\n", FUNCNAME);
pll_commit(floppy, cur_live.tm);
checkpoint_live = cur_live;
pll_save_checkpoint();
@@ -1440,12 +1451,12 @@ void wd_fdc_device_base::live_sync()
{
if(!cur_live.tm.is_never()) {
if(cur_live.tm > machine().time()) {
- if (TRACE_SYNC) logerror("%s: Rolling back and replaying (%s)\n", ttsn().c_str(), tts(cur_live.tm).c_str());
+ LOGSYNC("%s: Rolling back and replaying (%s)\n", ttsn().c_str(), tts(cur_live.tm).c_str());
rollback();
live_run(machine().time());
pll_commit(floppy, cur_live.tm);
} else {
- if (TRACE_SYNC) logerror("%s: Committing (%s)\n", ttsn().c_str(), tts(cur_live.tm).c_str());
+ LOGSYNC("%s: Committing (%s)\n", ttsn().c_str(), tts(cur_live.tm).c_str());
pll_commit(floppy, cur_live.tm);
if(cur_live.next_state != -1) {
cur_live.state = cur_live.next_state;
@@ -1510,7 +1521,7 @@ bool wd_fdc_device_base::write_one_bit(const attotime &limit)
void wd_fdc_device_base::live_write_raw(uint16_t raw)
{
- if (TRACE_WRITE) logerror("write raw %04x, CRC=%04x\n", raw, cur_live.crc);
+ LOGWRITE("write raw %04x, CRC=%04x\n", raw, cur_live.crc);
cur_live.shift_reg = raw;
cur_live.data_bit_context = raw & 1;
}
@@ -1529,7 +1540,7 @@ void wd_fdc_device_base::live_write_mfm(uint8_t mfm)
}
cur_live.shift_reg = raw;
cur_live.data_bit_context = context;
- if (TRACE_WRITE) logerror("live_write_mfm byte=%02x, raw=%04x, CRC=%04x\n", mfm, raw, cur_live.crc);
+ LOGWRITE("live_write_mfm byte=%02x, raw=%04x, CRC=%04x\n", mfm, raw, cur_live.crc);
}
@@ -1542,11 +1553,12 @@ void wd_fdc_device_base::live_write_fm(uint8_t fm)
cur_live.data_reg = fm;
cur_live.shift_reg = raw;
cur_live.data_bit_context = fm & 1;
- if (TRACE_WRITE) logerror("live_write_fm byte=%02x, raw=%04x, CRC=%04x\n", fm, raw, cur_live.crc);
+ LOGWRITE("live_write_fm byte=%02x, raw=%04x, CRC=%04x\n", fm, raw, cur_live.crc);
}
void wd_fdc_device_base::live_run(attotime limit)
{
+ // LOG("%s\n", FUNCNAME);
if(cur_live.state == IDLE || cur_live.next_state != -1)
return;
@@ -1570,10 +1582,11 @@ void wd_fdc_device_base::live_run(attotime limit)
for(;;) {
switch(cur_live.state) {
case SEARCH_ADDRESS_MARK_HEADER:
+ //LOG("%s - SEARCH_ADDRESS_MARK_HEADER\n", FUNCNAME);
if(read_one_bit(limit))
return;
- if (TRACE_SHIFT) logerror("%s: shift = %04x data=%02x c=%d\n", tts(cur_live.tm).c_str(), cur_live.shift_reg,
+ LOGSHIFT("%s: shift = %04x data=%02x c=%d\n", tts(cur_live.tm).c_str(), cur_live.shift_reg,
(cur_live.shift_reg & 0x4000 ? 0x80 : 0x00) |
(cur_live.shift_reg & 0x1000 ? 0x40 : 0x00) |
(cur_live.shift_reg & 0x0400 ? 0x20 : 0x00) |
@@ -1603,10 +1616,11 @@ void wd_fdc_device_base::live_run(attotime limit)
break;
case READ_HEADER_BLOCK_HEADER: {
+ LOG("%s - READ_HEADER_BLOCK_HEADER\n", FUNCNAME);
if(read_one_bit(limit))
return;
- if (TRACE_SHIFT) logerror("%s: shift = %04x data=%02x counter=%d\n", tts(cur_live.tm).c_str(), cur_live.shift_reg,
+ LOGSHIFT("%s: shift = %04x data=%02x counter=%d\n", tts(cur_live.tm).c_str(), cur_live.shift_reg,
(cur_live.shift_reg & 0x4000 ? 0x80 : 0x00) |
(cur_live.shift_reg & 0x1000 ? 0x40 : 0x00) |
(cur_live.shift_reg & 0x0400 ? 0x20 : 0x00) |
@@ -1643,6 +1657,7 @@ void wd_fdc_device_base::live_run(attotime limit)
}
case READ_ID_BLOCK_TO_LOCAL: {
+ LOG("%s - READ_ID_BLOCK_TO_LOCAL\n", FUNCNAME);
if(read_one_bit(limit))
return;
if(cur_live.bit_counter & 15)
@@ -1658,6 +1673,7 @@ void wd_fdc_device_base::live_run(attotime limit)
}
case READ_ID_BLOCK_TO_DMA:
+ LOG("%s - READ_ID_BLOCK_TO_DMA\n", FUNCNAME);
if(read_one_bit(limit))
return;
if(cur_live.bit_counter & 15)
@@ -1666,6 +1682,7 @@ void wd_fdc_device_base::live_run(attotime limit)
return;
case READ_ID_BLOCK_TO_DMA_BYTE:
+ LOG("%s - READ_ID_BLOCK_TO_DMA_BYTE\n", FUNCNAME);
data = cur_live.data_reg;
if(cur_live.bit_counter == 16)
sector = data;
@@ -1686,10 +1703,11 @@ void wd_fdc_device_base::live_run(attotime limit)
break;
case SEARCH_ADDRESS_MARK_DATA:
+ LOG("%s - SEARCH_ADDRESS_MARK_DATA\n", FUNCNAME);
if(read_one_bit(limit))
return;
- if (TRACE_SHIFT) logerror("%s: shift = %04x data=%02x c=%d.%x\n", tts(cur_live.tm).c_str(), cur_live.shift_reg,
+ LOGSHIFT("%s: shift = %04x data=%02x c=%d.%x\n", tts(cur_live.tm).c_str(), cur_live.shift_reg,
(cur_live.shift_reg & 0x4000 ? 0x80 : 0x00) |
(cur_live.shift_reg & 0x1000 ? 0x40 : 0x00) |
(cur_live.shift_reg & 0x0400 ? 0x20 : 0x00) |
@@ -1737,10 +1755,11 @@ void wd_fdc_device_base::live_run(attotime limit)
break;
case READ_DATA_BLOCK_HEADER: {
+ LOG("%s - READ_DATA_BLOCK_HEADER\n", FUNCNAME);
if(read_one_bit(limit))
return;
- if (TRACE_SHIFT) logerror("%s: shift = %04x data=%02x counter=%d\n", tts(cur_live.tm).c_str(), cur_live.shift_reg,
+ LOGSHIFT("%s: shift = %04x data=%02x counter=%d\n", tts(cur_live.tm).c_str(), cur_live.shift_reg,
(cur_live.shift_reg & 0x4000 ? 0x80 : 0x00) |
(cur_live.shift_reg & 0x1000 ? 0x40 : 0x00) |
(cur_live.shift_reg & 0x0400 ? 0x20 : 0x00) |
@@ -1776,11 +1795,13 @@ void wd_fdc_device_base::live_run(attotime limit)
}
case SEARCH_ADDRESS_MARK_DATA_FAILED:
+ LOG("%s - SEARCH_ADDRESS_MARK_DATA_FAILED\n", FUNCNAME);
status |= S_RNF;
cur_live.state = IDLE;
return;
case READ_SECTOR_DATA: {
+ LOG("%s - READ_SECTOR_DATA\n", FUNCNAME);
if(read_one_bit(limit))
return;
if(cur_live.bit_counter & 15)
@@ -1802,6 +1823,7 @@ void wd_fdc_device_base::live_run(attotime limit)
}
case READ_SECTOR_DATA_BYTE:
+ LOG("%s - READ_SECTOR_DATA_BYTE\n", FUNCNAME);
data = cur_live.data_reg;
set_drq();
cur_live.state = READ_SECTOR_DATA;
@@ -1809,6 +1831,7 @@ void wd_fdc_device_base::live_run(attotime limit)
break;
case READ_TRACK_DATA: {
+ LOG("%s - READ_TRACK_DATA\n", FUNCNAME);
if(read_one_bit(limit))
return;
if(cur_live.bit_counter != 16
@@ -1838,6 +1861,7 @@ void wd_fdc_device_base::live_run(attotime limit)
}
case READ_TRACK_DATA_BYTE:
+ LOG("%s - READ_TRACK_DATA_BYTE\n", FUNCNAME);
data = cur_live.data_reg;
set_drq();
cur_live.state = READ_TRACK_DATA;
@@ -2278,14 +2302,14 @@ int wd_fdc_digital_device_base::digital_pll_t::get_next_bit(attotime &tm, floppy
{
attotime when = floppy ? floppy->get_next_transition(ctime) : attotime::never;
- /* if (TRACE_TRANSITION)
+ /*
if(!when.is_never())
- logerror("transition_time=%s\n", tts(when).c_str());
+ LOGTRANSITION("transition_time=%s\n", tts(when).c_str());
*/
for(;;) {
- // if (TRACE_TRANSITION) logerror("slot=%2d, counter=%03x\n", slot, counter);
+ // LOGTRANSITION)("slot=%2d, counter=%03x\n", slot, counter);
attotime etime = ctime+delays[slot];
- // if (TRACE_TRANSITION) logerror("etime=%s\n", tts(etime).c_str());
+ // LOGTRANSITION("etime=%s\n", tts(etime).c_str());
if(etime > limit)
return -1;
if(transition_time == 0xffff && !when.is_never() && etime >= when)
@@ -2311,7 +2335,7 @@ int wd_fdc_digital_device_base::digital_pll_t::get_next_bit(attotime &tm, floppy
if(counter & 0x800)
break;
}
- //if (TRACE_TRANSITION) logerror("first transition, time=%03x, inc=%3d\n", transition_time, increment);
+ //LOGTRANSITION("first transition, time=%03x, inc=%3d\n", transition_time, increment);
int bit = transition_time != 0xffff;
if(transition_time != 0xffff) {