Previous 199869 Revisions Next

r33768 Tuesday 9th December, 2014 at 14:47:35 UTC by Jürgen Buchmüller
Add logging to r10788 and fix timer setup (nw)
[src/emu/machine]r10788.c r10788.h
[src/mame/drivers]gts1.c

trunk/src/emu/machine/r10788.c
r242279r242280
4141#include "emu.h"
4242#include "machine/r10788.h"
4343
44#define   VERBOSE   1
45#if VERBOSE
46#define LOG(x) logerror x
47#else
48#define LOG(x)
49#endif
4450
4551/*************************************
4652 *
r242279r242280
5359r10788_device::r10788_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
5460    : device_t(mconfig, R10788, "Rockwell 10788", tag, owner, clock, "r10788", __FILE__),
5561        m_reg(),
56        m_ktr(0), m_kts(0), m_kla(0), m_klb(0), m_enable(3), m_ker(0),
57        m_scan_counter(0),
62        m_ktr(0), m_kts(0), m_kla(0), m_klb(0), m_mask_a(15), m_mask_b(15), m_ker(0),
63        m_io_counter(0), m_scan_counter(0),
5864        m_display(*this)
5965{
6066}
r242279r242280
7177    save_item(NAME(m_kts));
7278    save_item(NAME(m_kla));
7379    save_item(NAME(m_klb));
74    save_item(NAME(m_enable));
80    save_item(NAME(m_mask_a));
81    save_item(NAME(m_mask_b));
7582    save_item(NAME(m_ker));
83    save_item(NAME(m_io_counter));
7684    save_item(NAME(m_scan_counter));
7785
7886    m_timer = timer_alloc(TIMER_DISPLAY);
79    m_timer->adjust(clocks_to_attotime(36));
87    // recurring timer every 36 cycles
88    m_timer->adjust(clocks_to_attotime(36), 0, clocks_to_attotime(36));
8089}
8190
8291/**
r242279r242280
9099    m_kts = 0;
91100    m_kla = 0;
92101    m_klb = 0;
93    m_enable = 3;
102    m_mask_a = 15;
103    m_mask_b = 15;
94104    m_ker = 0;
95105    m_scan_counter = 0;
96106}
r242279r242280
105115 */
106116void r10788_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
107117{
108    m_scan_counter = (m_scan_counter + 1) % 16;
118    UINT8 data;
109119    switch (id)
110120    {
111121        case TIMER_DISPLAY:
112            m_display(m_scan_counter, m_reg[0][m_scan_counter] << 4 | m_reg[1][m_scan_counter], 0xff);
122            data = (m_reg[0][m_scan_counter] & m_mask_a) +
123                   16 * (m_reg[1][m_scan_counter] & m_mask_b);
124            LOG(("%s: scan counter:%2d data:%02x\n", __FUNCTION__, m_scan_counter, data));
125            m_display(m_scan_counter, data, 0xff);
113126            break;
127        default:
128            LOG(("%s: invalid timer id:%d\n", __FUNCTION__, id));
114129    }
130    m_scan_counter = (m_scan_counter + 1) % 16;
115131}
116132
117133/*************************************
r242279r242280
132148    switch (offset)
133149    {
134150        case KTR:  // Transfer Keyboard Return
151            LOG(("%s: KTR data:%02x\n", __FUNCTION__, data));
135152            m_ktr = data;
136153            break;
137154        case KTS:  // Transfer Keyboard Strobe
155            LOG(("%s: KTS data:%02x\n", __FUNCTION__, data));
138156            m_kts = data;
139157            break;
140158        case KLA:  // Load Display Register A
159            LOG(("%s: KLA [%2d] data:%02x\n", __FUNCTION__, m_io_counter, data));
141160            m_kla = data;
161            m_reg[0][m_io_counter] = m_kla;
142162            break;
143163        case KLB:  // Load Display Register B
164            LOG(("%s: KLB [%2d] data:%02x\n", __FUNCTION__, m_io_counter, data));
144165            m_klb = data;
166            m_reg[1][m_io_counter] = m_kla;
145167            break;
146168        case KDN:  // Turn On Display
147            m_enable = 1 | 2;
169            LOG(("%s: KDN data:%02x\n", __FUNCTION__, data));
170            m_mask_a = 15;
171            m_mask_b = 15;
148172            break;
149173        case KAF:  // Turn Off A
150            m_enable &= ~1;
174            LOG(("%s: KAF data:%02x\n", __FUNCTION__, data));
175            m_mask_a = 0;
176            m_mask_b &= ~3;
151177            break;
152178        case KBF:  // Turn Off B
153            m_enable &= ~1;
179            LOG(("%s: KBF data:%02x\n", __FUNCTION__, data));
180            m_mask_b &= ~12;
154181            break;
155182        case KER:  // Reset Keyboard Error
183            LOG(("%s: KER data:%02x\n", __FUNCTION__, data));
156184            m_ker = 10;
157185            break;
158186    }
r242279r242280
167195    {
168196        case KTR:  // Transfer Keyboard Return
169197            data = m_ktr;
198            LOG(("%s: KTR data:%02x\n", __FUNCTION__, data));
170199            break;
171200        case KTS:  // Transfer Keyboard Strobe
172201            data = m_kts;
202            LOG(("%s: KTS data:%02x\n", __FUNCTION__, data));
173203            break;
174204        case KLA:  // Load Display Register A
205            m_kla = m_reg[0][m_io_counter];
175206            data = m_kla;
207            LOG(("%s: KLA [%2d] data:%02x\n", __FUNCTION__, m_io_counter, data));
176208            break;
177209        case KLB:  // Load Display Register B
210            m_klb = m_reg[1][m_io_counter];
178211            data = m_klb;
212            LOG(("%s: KLB [%2d] data:%02x\n", __FUNCTION__, m_io_counter, data));
213            // FIXME: does it automagically increment at KLB write?
214            m_io_counter = (m_io_counter + 1) % 16;
179215            break;
180216        case KDN:  // Turn On Display
217            LOG(("%s: KDN data:%02x\n", __FUNCTION__, data));
181218            break;
182219        case KAF:  // Turn Off A
220            LOG(("%s: KAF data:%02x\n", __FUNCTION__, data));
183221            break;
184222        case KBF:  // Turn Off B
223            LOG(("%s: KBF data:%02x\n", __FUNCTION__, data));
185224            break;
186225        case KER:  // Reset Keyboard Error
226            LOG(("%s: KER data:%02x\n", __FUNCTION__, data));
187227            break;
188228    }
189229    return data;
trunk/src/emu/machine/r10788.h
r242279r242280
6060    UINT8        m_kts;                 //!< transfer keyboard strobe value
6161    UINT8        m_kla;                 //!< display register A value
6262    UINT8        m_klb;                 //!< display register B value
63    UINT8        m_enable;              //!< display enable flags for A (1) and B (2)
63    UINT8        m_mask_a;              //!< display enable bits for A
64    UINT8        m_mask_b;              //!< display enable bits for B
6465    UINT8        m_ker;                 //!< keyboard error value
66    int          m_io_counter;          //!< current I/O register index
6567    int          m_scan_counter;        //!< current display scan
6668    devcb_write8 m_display;             //!< display updater
6769    emu_timer*   m_timer;               //!< timer running at clock / 18 / 36
trunk/src/mame/drivers/gts1.c
r242279r242280
216216 */
217217WRITE8_MEMBER(gts1_state::gts1_display_w)
218218{
219    LOG(("%s: offset:%d data:%02x\n", __FUNCTION__, offset, data));
219220    output_set_digit_value(offset, data);
220221}
221222


Previous 199869 Revisions Next


© 1997-2024 The MAME Team