Skip to content

Commit 7220103

Browse files
author
Adam
committed
- duart & diag register
1 parent 04a5015 commit 7220103

1 file changed

Lines changed: 37 additions & 4 deletions

File tree

src/mame/tektronix/tek440x.cpp

Lines changed: 37 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,12 @@ class tek440x_state : public driver_device
108108
u8 mapcntl_r();
109109
void mapcntl_w(u8 data);
110110
void sound_w(u8 data);
111+
u8 diag_r();
111112
void diag_w(u8 data);
113+
114+
// need to handle loopback mode
115+
u8 duart_r(offs_t offset);
116+
void duart_w(offs_t offset, u8 data);
112117

113118
void kb_rdata_w(int state);
114119
void kb_tdata_w(int state);
@@ -138,6 +143,7 @@ class tek440x_state : public driver_device
138143
bool m_kb_tdata;
139144
bool m_kb_rclamp;
140145
bool m_kb_loop;
146+
u8 m_diag;
141147
};
142148

143149
/*************************************
@@ -153,8 +159,8 @@ void tek440x_state::machine_start()
153159
save_item(NAME(m_kb_rdata));
154160
save_item(NAME(m_kb_tdata));
155161
save_item(NAME(m_kb_rclamp));
156-
save_item(NAME(m_kb_loop));
157-
}
162+
save_item(NAME(m_kb_loop));
163+
save_item(NAME(m_diag));
158164

159165

160166

@@ -272,12 +278,19 @@ void tek440x_state::sound_w(u8 data)
272278
m_boot = false;
273279
}
274280

281+
u8 tek440x_state::diag_r()
282+
{
283+
return m_diag;
284+
}
285+
275286
void tek440x_state::diag_w(u8 data)
276287
{
277288
if (!m_kb_rclamp && m_kb_loop != BIT(data, 7))
278289
m_keyboard->kdo_w(!BIT(data, 7) || m_kb_tdata);
279290

280291
m_kb_loop = BIT(data, 7);
292+
m_diag = data;
293+
281294
}
282295

283296
void tek440x_state::kb_rdata_w(int state)
@@ -312,6 +325,25 @@ void tek440x_state::kb_tdata_w(int state)
312325
}
313326
}
314327

328+
u8 tek440x_state::duart_r(offs_t offset)
329+
{
330+
return m_duart->read(offset);
331+
}
332+
333+
void tek440x_state::duart_w(offs_t offset, u8 data)
334+
{
335+
// Transmit Buffer?
336+
if (offset == 3)
337+
{
338+
if (m_kb_loop)
339+
{
340+
m_duart->write(0x0, 0x80);
341+
}
342+
}
343+
344+
m_duart->write(offset, data);
345+
}
346+
315347
void tek440x_state::logical_map(address_map &map)
316348
{
317349
map(0x000000, 0x7fffff).rw(FUNC(tek440x_state::memory_r), FUNC(tek440x_state::memory_w));
@@ -346,10 +378,11 @@ void tek440x_state::physical_map(address_map &map)
346378

347379
// 7a0000-7bffff peripheral board I/O
348380
// 7a0000-7affff: reserved
349-
map(0x7b0000, 0x7b0000).w(FUNC(tek440x_state::diag_w));
381+
map(0x7b0000, 0x7b0000).rw(FUNC(tek440x_state::diag_r),FUNC(tek440x_state::diag_w));
350382
// 7b1000-7b1fff: diagnostic registers
351383
// 7b2000-7b3fff: Centronics printer data
352-
map(0x7b4000, 0x7b401f).rw(m_duart, FUNC(mc68681_device::read), FUNC(mc68681_device::write)).umask16(0xff00);
384+
385+
map(0x7b4000, 0x7b401f).rw(FUNC(tek440x_state::duart_r), FUNC(tek440x_state::duart_w)).umask16(0xff00);
353386
// 7b6000-7b7fff: Mouse
354387
map(0x7b8000, 0x7b8003).mirror(0x100).rw("timer", FUNC(am9513_device::read16), FUNC(am9513_device::write16));
355388
// 7ba000-7bbfff: MC146818 RTC

0 commit comments

Comments
 (0)