vt52: Add debug state register to show address translation; minor adjustments (nw)

This commit is contained in:
AJR 2019-12-21 14:31:13 -05:00
parent 42f5ceb3db
commit d58fe33e0e
3 changed files with 10 additions and 5 deletions

View File

@ -116,6 +116,7 @@ void vt5x_cpu_device::device_start()
state_add(VT5X_X, "X", m_x).formatstr("%03O").mask(0177);
state_add(VT5X_Y, "Y", m_y).formatstr("%02O").mask((1 << m_ybits) - 1);
state_add(VT5X_X8, "X8", m_x8);
state_add<u16>(VT5X_XYAD, "XYAD", [this]() { return translate_xy(); }).formatstr("%04O").mask((1 << (6 + m_ybits)) - 1);
state_add(VT5X_CFF, "CFF", m_cursor_ff);
state_add(VT5X_VID, "VID", m_video_process);
@ -156,13 +157,17 @@ void vt5x_cpu_device::device_reset()
offs_t vt5x_cpu_device::translate_xy() const
{
// A9 A8 A7 A6 A5 A4 A3 A2 A1 A0
// Screen RAM, columns 063: y3 y2 y1 y0 x5 x4 x3 x2 x1 x0
// Screen RAM, columns 6479: 1 1 y1 y0 y3 y2 x3 x2 x1 x0
// Scratchpad (not displayed): 1 1 y1 y0 1 1 x3 x2 x1 x0
const u8 x = m_x ^ (m_x8 ? 8 : 0);
const offs_t y_shifted = (offs_t(m_y) << (10 - m_ybits)) & 01700;
const offs_t ram_bank = offs_t(m_y & ((1 << (m_ybits - 4)) - 1)) << 10;
const offs_t page_sel = offs_t(m_y & ((1 << (m_ybits - 4)) - 1)) << 10;
if (BIT(x, 6) || (y_shifted & 01400) == 01400)
return (x & 0017) | (y_shifted & 01400) >> 4 | y_shifted | 01400 | ram_bank;
return (x & 0017) | (y_shifted & 01400) >> 4 | y_shifted | 01400 | page_sel;
else
return x | y_shifted | ram_bank;
return x | y_shifted | page_sel;
}
void vt5x_cpu_device::execute_te(u8 inst)

View File

@ -12,7 +12,7 @@ public:
enum {
VT5X_PC, VT5X_PAGE,
VT5X_MODE, VT5X_DONE,
VT5X_AC, VT5X_B, VT5X_X, VT5X_Y, VT5X_X8,
VT5X_AC, VT5X_B, VT5X_X, VT5X_Y, VT5X_X8, VT5X_XYAD,
VT5X_CFF, VT5X_VID
};

View File

@ -209,7 +209,7 @@ void vt52_state::vt52(machine_config &mconfig)
AY51013(mconfig, m_uart); // TR1402 or equivalent
screen_device &screen(SCREEN(mconfig, "screen", SCREEN_TYPE_RASTER));
screen.set_raw(13.824_MHz_XTAL, 900, 0, 720, 256, 0, 192);
screen.set_raw(13.824_MHz_XTAL, 900, 0, 720, 256, 0, 240);
screen.set_screen_update(FUNC(vt52_state::screen_update));
SPEAKER(mconfig, "mono").front_center();