summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/video
diff options
context:
space:
mode:
author Joakim Larsson Edström <joakimlarsson42@gmail.com>2019-10-11 21:59:27 +0200
committer GitHub <noreply@github.com>2019-10-11 21:59:27 +0200
commit6e98146ef430c6203b294fa3a740357a7baf3699 (patch)
treed455b6ca51102e0576d651a381a5258a77788dc3 /src/devices/video
parent96c9d86f0ac3c8d6c519bdd6614f160608333884 (diff)
parent7261e08a8b7574510e76568557b470fa72205019 (diff)
Merge pull request #5686 from JoakimLarsson/epc_3
Rebase and completion of split out of epc driver and addition of graphics card
Diffstat (limited to 'src/devices/video')
-rw-r--r--src/devices/video/mc6845.cpp47
-rw-r--r--src/devices/video/mc6845.h1
2 files changed, 39 insertions, 9 deletions
diff --git a/src/devices/video/mc6845.cpp b/src/devices/video/mc6845.cpp
index 1c0862f1564..4ce9ed843a3 100644
--- a/src/devices/video/mc6845.cpp
+++ b/src/devices/video/mc6845.cpp
@@ -45,12 +45,18 @@
#include "screen.h"
-#define LOG_REGS (1 << 0U)
-#define LOG_CONFIG (1 << 1U)
-#define VERBOSE (0)
+#define LOG_SETUP (1 << 1U)
+#define LOG_REGS (1 << 2U)
+#define LOG_CONF (1 << 3U)
+
+//#define VERBOSE (LOG_SETUP|LOG_CONF|LOG_REGS)
+//#define LOG_OUTPUT_STREAM std::cout
#include "logmacro.h"
+#define LOGSETUP(...) LOGMASKED(LOG_SETUP, __VA_ARGS__)
+#define LOGREGS(...) LOGMASKED(LOG_REGS, __VA_ARGS__)
+#define LOGCONF(...) LOGMASKED(LOG_CONF, __VA_ARGS__)
DEFINE_DEVICE_TYPE(MC6845, mc6845_device, "mc6845", "Motorola MC6845 CRTC")
DEFINE_DEVICE_TYPE(MC6845_1, mc6845_1_device, "mc6845_1", "Motorola MC6845-1 CRTC")
@@ -213,7 +219,19 @@ uint8_t mc6845_device::register_r()
void mc6845_device::register_w(uint8_t data)
{
- LOGMASKED(LOG_REGS, "%s:M6845 reg 0x%02x = 0x%02x\n", machine().describe_context(), m_register_address_latch, data);
+ LOGREGS("%s:M6845 reg 0x%02x = 0x%02x\n", machine().describe_context(), m_register_address_latch, data);
+
+ /* Omits LOGSETUP logs of cursor registers as they tend to be spammy */
+ if (m_register_address_latch < 0x0e &&
+ m_register_address_latch != 0x0a &&
+ m_register_address_latch != 0x0b) LOGSETUP(" * %02x <= %3u [%02x] %s\n", m_register_address_latch,
+ data, data, std::array<char const *, 16>
+ {{ "R0 - Horizontal Total", "R1 - Horizontal Displayed", "R2 - Horizontal Sync Position",
+ "R3 - Sync Width", "R4 - Vertical Total", "R5 - Vertical Total Adjust",
+ "R6 - Vertical Displayed", "R7 - Vertical Sync Position", "R8 - Interlace & Skew",
+ "R9 - Maximum Raster Address", "R10 - Cursor Start Address", "R11 - Cursor End Address",
+ "R12 - Start Address (H)", "R13 - Start Address (L)", "R14 - Cursor (H)",
+ "R15 - Cursor (L)" }}[(m_register_address_latch & 0x0f)]);
switch (m_register_address_latch)
{
@@ -342,7 +360,7 @@ uint8_t mos8563_device::register_r()
void mos8563_device::register_w(uint8_t data)
{
- LOGMASKED(LOG_REGS, "%s:MOS8563 reg 0x%02x = 0x%02x\n", machine().describe_context(), m_register_address_latch, data);
+ LOGREGS("%s:MOS8563 reg 0x%02x = 0x%02x\n", machine().describe_context(), m_register_address_latch, data);
switch (m_register_address_latch)
{
@@ -429,7 +447,7 @@ uint8_t hd6345_device::register_r()
void hd6345_device::register_w(uint8_t data)
{
- LOGMASKED(LOG_REGS, "%s:HD6345 reg 0x%02x = 0x%02x\n", machine().describe_context(), m_register_address_latch, data);
+ LOGREGS("%s:HD6345 reg 0x%02x = 0x%02x\n", machine().describe_context(), m_register_address_latch, data);
switch (m_register_address_latch)
{
@@ -571,8 +589,8 @@ void mc6845_device::recompute_parameters(bool postload)
else
visarea.set(0 + m_visarea_adjust_min_x, max_visible_x + m_visarea_adjust_max_x, 0 + m_visarea_adjust_min_y, max_visible_y + m_visarea_adjust_max_y);
- LOGMASKED(LOG_CONFIG, "M6845 config screen: HTOTAL: %d VTOTAL: %d MAX_X: %d MAX_Y: %d HSYNC: %d-%d VSYNC: %d-%d Freq: %ffps\n",
- horiz_pix_total, vert_pix_total, max_visible_x, max_visible_y, hsync_on_pos, hsync_off_pos - 1, vsync_on_pos, vsync_off_pos - 1, refresh.as_hz());
+ LOGCONF("M6845 config screen: HTOTAL: %d VTOTAL: %d MAX_X: %d MAX_Y: %d HSYNC: %d-%d VSYNC: %d-%d Freq: %ffps\n",
+ horiz_pix_total, vert_pix_total, max_visible_x, max_visible_y, hsync_on_pos, hsync_off_pos - 1, vsync_on_pos, vsync_off_pos - 1, refresh.as_hz());
if (has_screen())
screen().configure(horiz_pix_total, vert_pix_total, visarea, refresh.as_attoseconds());
@@ -1073,6 +1091,12 @@ uint32_t mc6845_device::screen_update(screen_device &screen, bitmap_rgb32 &bitma
{
assert(!m_update_row_cb.isnull());
+ if (m_display_disabled_msg_shown == true)
+ {
+ logerror("M6845: Valid screen parameters - display reenabled!!!\n");
+ m_display_disabled_msg_shown = false;
+ }
+
/* call the set up function if any */
if (!m_begin_update_cb.isnull())
m_begin_update_cb(bitmap, cliprect);
@@ -1095,7 +1119,11 @@ uint32_t mc6845_device::screen_update(screen_device &screen, bitmap_rgb32 &bitma
}
else
{
- LOGMASKED(LOG_CONFIG, "M6845: Invalid screen parameters - display disabled!!!\n");
+ if (m_display_disabled_msg_shown == false)
+ {
+ logerror("M6845: Invalid screen parameters - display disabled!!!\n");
+ m_display_disabled_msg_shown = true;
+ }
}
return 0;
@@ -1143,6 +1171,7 @@ void mc6845_device::device_start()
m_supports_status_reg_d7 = false;
m_supports_transparent = false;
m_has_valid_parameters = false;
+ m_display_disabled_msg_shown = false;
m_line_enable_ff = false;
m_vsync_ff = 0;
m_raster_counter = 0;
diff --git a/src/devices/video/mc6845.h b/src/devices/video/mc6845.h
index d124dc6fde6..f20b83e5eff 100644
--- a/src/devices/video/mc6845.h
+++ b/src/devices/video/mc6845.h
@@ -219,6 +219,7 @@ protected:
uint16_t m_vsync_on_pos;
uint16_t m_vsync_off_pos;
bool m_has_valid_parameters;
+ bool m_display_disabled_msg_shown;
uint16_t m_current_disp_addr; /* the display address currently drawn (used only in mc6845_update) */