Skip to content

Commit 06cbc64

Browse files
m68hc05: SCI BAUD Register
This allows r/w and reset behavior for the BAUD register. Implementation of the SCI depends on these bytes. Reference: mc68hc05c8a and MC68HC05C4 datasheets.
1 parent 8f2661c commit 06cbc64

2 files changed

Lines changed: 26 additions & 6 deletions

File tree

src/devices/cpu/m6805/m68hc05.cpp

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,7 @@ m68hc05_device::m68hc05_device(
160160
, m_port_irq_state(false)
161161
, m_irq_line_state(false)
162162
, m_irq_latch(0)
163+
, m_baud(0x00)
163164
, m_sccr1(0x00)
164165
, m_tcmp_cb(*this)
165166
, m_tcap_state(false)
@@ -412,6 +413,16 @@ u8 m68hc05_device::timer_r(offs_t offset)
412413
}
413414

414415

416+
u8 m68hc05_device::baud_r()
417+
{
418+
return m_baud & 0x37;
419+
}
420+
421+
void m68hc05_device::baud_w(u8 data)
422+
{
423+
m_baud = data & 0x37;
424+
}
425+
415426
u8 m68hc05_device::sccr1_r()
416427
{
417428
return m_sccr1 & 0xd1;
@@ -490,6 +501,7 @@ void m68hc05_device::device_start()
490501
save_item(NAME(m_trl_buf));
491502
save_item(NAME(m_trl_latched));
492503

504+
save_item(NAME(m_baud));
493505
save_item(NAME(m_sccr1));
494506
// save COP watchdogs
495507
save_item(NAME(m_pcop_cnt));
@@ -533,6 +545,9 @@ void m68hc05_device::device_reset()
533545
m_irq_latch = 0;
534546
update_port_irq();
535547

548+
// SCI reset
549+
m_baud &= 0x07;
550+
536551
// timer reset
537552
m_tcr &= 0x02;
538553
m_tsr_seen = 0x00;
@@ -715,6 +730,7 @@ void m68hc05_device::add_port_state(std::array<bool, PORT_COUNT> const &ddr)
715730

716731
void m68hc05_device::add_sci_state()
717732
{
733+
state_add(M68HC05_BAUD, "BAUD", m_baud).mask(0x37);
718734
state_add(M68HC05_SCCR1, "SCCR1", m_sccr1).mask(0xd1);
719735
}
720736

@@ -801,7 +817,7 @@ void m68hc05c4_device::c4_map(address_map &map)
801817
// 0x000a SPCR
802818
// 0x000b SPSR
803819
// 0x000c SPDR
804-
// 0x000d BAUD
820+
map(0x000d, 0x000d).rw(FUNC(m68hc05c4_device::baud_r), FUNC(m68hc05c4_device::baud_w));
805821
map(0x000e, 0x000e).rw(FUNC(m68hc05c4_device::sccr1_r), FUNC(m68hc05c4_device::sccr1_w));
806822
// 0x000f SCCR2
807823
// 0x0010 SCSR
@@ -869,7 +885,7 @@ void m68hc05c8_device::c8_map(address_map &map)
869885
// 0x000a SPCR
870886
// 0x000b SPSR
871887
// 0x000c SPDR
872-
// 0x000d BAUD
888+
map(0x000d, 0x000d).rw(FUNC(m68hc05c8_device::baud_r), FUNC(m68hc05c8_device::baud_w));
873889
map(0x000e, 0x000e).rw(FUNC(m68hc05c8_device::sccr1_r), FUNC(m68hc05c8_device::sccr1_w));
874890
// 0x000f SCCR2
875891
// 0x0010 SCSR
@@ -937,7 +953,7 @@ void m68hc705c4a_device::c4a_map(address_map &map)
937953
// 0x000a SPCR
938954
// 0x000b SPSR
939955
// 0x000c SPDR
940-
// 0x000d BAUD
956+
map(0x000d, 0x000d).rw(FUNC(m68hc705c4a_device::baud_r), FUNC(m68hc705c4a_device::baud_w));
941957
map(0x000e, 0x000e).rw(FUNC(m68hc705c4a_device::sccr1_r), FUNC(m68hc705c4a_device::sccr1_w));
942958
// 0x000f SCCR2
943959
// 0x0010 SCSR
@@ -1031,7 +1047,7 @@ void m68hc705c8a_device::c8a_map(address_map &map)
10311047
// 0x000a SPCR
10321048
// 0x000b SPSR
10331049
// 0x000c SPDR
1034-
// 0x000d BAUD
1050+
map(0x000d, 0x000d).rw(FUNC(m68hc705c8a_device::baud_r), FUNC(m68hc705c8a_device::baud_w));
10351051
map(0x000e, 0x000e).rw(FUNC(m68hc705c8a_device::sccr1_r), FUNC(m68hc705c8a_device::sccr1_w));
10361052
// 0x000f SCCR2
10371053
// 0x0010 SCSR
@@ -1226,7 +1242,7 @@ void m68hc05l9_device::l9_map(address_map &map)
12261242
// 0x0009-0x000a configuration
12271243
// 0x000b minute alarm
12281244
// 0x000c hour alarm
1229-
// 0x000d BAUD
1245+
map(0x000d, 0x000d).rw(FUNC(m68hc05l9_device::baud_r), FUNC(m68hc05l9_device::baud_w));
12301246
map(0x000e, 0x000e).rw(FUNC(m68hc05l9_device::sccr1_r), FUNC(m68hc05l9_device::sccr1_w));
12311247
// 0x000f SCCR2
12321248
// 0x0010 SCSR
@@ -1299,7 +1315,7 @@ void m68hc05l11_device::l11_map(address_map &map)
12991315
// 0x000a port F direction
13001316
// 0x000b minute alarm
13011317
// 0x000c hour alarm
1302-
// 0x000d BAUD
1318+
map(0x000d, 0x000d).rw(FUNC(m68hc05l11_device::baud_r), FUNC(m68hc05l11_device::baud_w));
13031319
map(0x000e, 0x000e).rw(FUNC(m68hc05l11_device::sccr1_r), FUNC(m68hc05l11_device::sccr1_w));
13041320
// 0x000f SCCR2
13051321
// 0x0010 SCSR

src/devices/cpu/m6805/m68hc05.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ class m68hc05_device : public m6805_base_device
7272
M68HC05_PS,
7373
M68HC05_TR,
7474

75+
M68HC05_BAUD,
7576
M68HC05_SCCR1,
7677

7778
M68HC05_COPRST,
@@ -110,6 +111,8 @@ class m68hc05_device : public m6805_base_device
110111
void ocr_w(offs_t offset, u8 data);
111112
u8 timer_r(offs_t offset);
112113

114+
u8 baud_r();
115+
void baud_w(u8 data);
113116
u8 sccr1_r();
114117
void sccr1_w(u8 data);
115118
void set_ncope(bool state) { m_ncope = state ? 1 : 0; }
@@ -168,6 +171,7 @@ class m68hc05_device : public m6805_base_device
168171
u8 m_irq_latch;
169172

170173
// serial communications interface
174+
u8 m_baud;
171175
u8 m_sccr1;
172176
// timer/counter
173177
devcb_write_line m_tcmp_cb;

0 commit comments

Comments
 (0)