Skip to content

Commit 94fea4d

Browse files
committed
MSSTAT and SSTAT are inter-cpu communication signals
1 parent 63b20d9 commit 94fea4d

File tree

1 file changed

+61
-24
lines changed

1 file changed

+61
-24
lines changed

src/mame/technics/kn5000.cpp

Lines changed: 61 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,8 @@ class kn5000_state : public driver_device
107107
, m_CPL_LED(*this, "CPL_%u", 0U)
108108
, m_CPR_LED(*this, "CPR_%u", 0U)
109109
, m_led_row(0)
110+
, m_mstat(0)
111+
, m_sstat(0)
110112
{ }
111113

112114
void kn5000(machine_config &config);
@@ -122,6 +124,8 @@ class kn5000_state : public driver_device
122124
output_finder<50> m_CPL_LED;
123125
output_finder<69> m_CPR_LED;
124126
uint8_t m_led_row;
127+
uint8_t m_mstat;
128+
uint8_t m_sstat;
125129

126130
virtual void machine_start() override;
127131
virtual void machine_reset() override;
@@ -219,11 +223,11 @@ static INPUT_PORTS_START(kn5000)
219223
PORT_DIPSETTING( 0x01, DEF_STR(Off))
220224

221225
PORT_START("COM_SELECT")
222-
PORT_DIPNAME(0x0f, 0x0e, "Computer Interface Selection")
223-
PORT_DIPSETTING( 0x0e, "MIDI")
224-
PORT_DIPSETTING( 0x0d, "PC1")
225-
PORT_DIPSETTING( 0x0b, "PC2")
226-
PORT_DIPSETTING( 0x07, "Mac")
226+
PORT_DIPNAME(0xf0, 0xe0, "Computer Interface Selection")
227+
PORT_DIPSETTING( 0xe0, "MIDI")
228+
PORT_DIPSETTING( 0xd0, "PC1")
229+
PORT_DIPSETTING( 0xb0, "PC2")
230+
PORT_DIPSETTING( 0x70, "Mac")
227231

228232
PORT_START("CPR_SEG0")
229233
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED )
@@ -672,6 +676,9 @@ void kn5000_state::cpanel_leds_w(offs_t offset, uint8_t data)
672676

673677
void kn5000_state::machine_start()
674678
{
679+
save_item(NAME(m_mstat));
680+
save_item(NAME(m_sstat));
681+
675682
#ifdef EXTENSION_VIEW
676683
if(m_extension)
677684
{
@@ -713,64 +720,79 @@ void kn5000_state::kn5000(machine_config &config)
713720
// m_maincpu->port?_write().set(FUNC(kn5000_state::maincpu_port?_w));
714721
//
715722

716-
// PORT 7:
723+
724+
// MAINCPU PORT 7:
717725
// bit 5 (~BUSRQ pin): RY/~BY pin of maincpu ROMs
718726
m_maincpu->port7_read().set([] { return (1 << 5); }); // checked at EF3735 (v10 ROM)
719727

720-
// PORT 8:
728+
729+
// MAINCPU PORT 8:
721730
// bit 6 (~WAIT pin) (input): Something involving VGA.RDY, FDC.DMAACK
722731
// and shift-register @ IC18
723732

724-
// PORT A:
733+
734+
// MAINCPU PORT A:
725735
// bit 0: sub_cpu ~RESET / SRST
726736

727-
// PORT C:
737+
738+
// MAINCPU PORT C:
728739
// bit 0 (input) = "check terminal" switch
729740
// bit 1 (output) = "check terminal" LED
730741
m_maincpu->portc_read().set([this] { return ioport("CN11")->read(); });
731742
m_maincpu->portc_write().set([this] (u8 data) { m_checking_device_led_cn11->set_state(BIT(data, 1) == 0); });
732743

733-
// PORT D:
744+
745+
// MAINCPU PORT D:
734746
// bit 0 (output) = FDCRST
735747
// bit 6 (input) = FD.I/O
736748
m_maincpu->portd_write().set([this] (u8 data) { m_fdc->reset_w(BIT(data, 0)); });
737749
// TODO: bit 6!
738750

739751

740-
// PORT E:
752+
// MAINCPU PORT E:
741753
// bit 0 (input) = +5v
742754
// bit 2 (input) = HDDRDY
743755
// bit 4 (?) = MICSNS
744756
m_maincpu->porte_read().set([] { return 1; }); //checked at EF05A6 (v10 ROM)
745-
// FIXME: Bit 0 should only be 1 if the optional hard-drive extension board is disabled
757+
// FIXME: Bit 0 should only be 1 if the
758+
// optional hard-drive extension board is disabled;
759+
746760

747-
// PORT F:
761+
// MAINCPU PORT F:
748762
// bit 2 (OUTPUT) = Something related to "RESET CONTROL" circuits?
749763

750-
// PORT G:
764+
765+
// MAINCPU PORT G:
751766
// bit 2 (input) = FS1 (Foot Switches and Foot Controler ?)
752767
// bit 3 (input) = FS2
753768
// bit 4 (input) = FC1
754769
// bit 5 (input) = FC2
755770
// bit 6 (input) = FC3
756771
// bit 7 (input) = FC4
757772

758-
// PORT H:
773+
774+
// MAINCPU PORT H:
759775
// bit 1 = TC1 Terminal count - microDMA
760776
m_maincpu->porth_read().set([] { return 2; }); // area/region detection: checked at EF083E (v10 ROM)
761-
// FIXME: These are resistors on the pcb,
762-
// but could be declared in the driver as a 2 bit DIP-Switch for area/region selection.
763-
764-
// PORT Z:
765-
// bit 0 = MSTAT0 SUBCPU: PORT D2
766-
// bit 1 = MSTAT1 SUBCPU: PORT D4
767-
// bit 2 = SSTAT0 SUBCPU: PORT D0
768-
// bit 3 = SSTAT1 SUBCPU: PORT D1
777+
// FIXME: These are resistors on the pcb, but could be declared
778+
// in the driver as a 2 bit DIP-Switch for area/region selection.
779+
780+
781+
// MAINCPU PORT Z:
782+
// bit 0 = (output) MSTAT0
783+
// bit 1 = (output) MSTAT1
784+
// bit 2 = (input) SSTAT0
785+
// bit 3 = (input) SSTAT1
769786
// bit 4 = COM.PC2
770787
// bit 5 = COM.PC1
771788
// bit 6 = COM.MAC
772789
// bit 7 = COM.MIDI
773-
m_maincpu->portz_read().set_ioport("COM_SELECT");
790+
m_maincpu->portz_read().set([this] {
791+
return ioport("COM_SELECT")->read() | (m_sstat << 2);
792+
});
793+
m_maincpu->portz_write().set([this] (u8 data) {
794+
m_mstat = data & 3;
795+
});
774796

775797

776798
// RX0/TX0 = MRXD/MTXD
@@ -786,6 +808,21 @@ void kn5000_state::kn5000(machine_config &config)
786808
m_subcpu->set_addrmap(AS_PROGRAM, &kn5000_state::subcpu_mem);
787809
// Interrupt 0: CLK on "to_subcpu_latch"
788810

811+
812+
// SUBCPU PORT D:
813+
// bit 0 = (output) SSTAT0
814+
// bit 1 = (output) SSTAT1
815+
// bit 2 = (input) MSTAT0
816+
// bit 3 (not used)
817+
// bit 4 = (input) MSTAT1
818+
m_subcpu->portd_read().set([this] {
819+
return (BIT(m_mstat, 0) << 2) | (BIT(m_mstat, 1) << 4);
820+
});
821+
m_subcpu->portd_write().set([this] (u8 data) {
822+
m_sstat = data & 3;
823+
});
824+
825+
789826
GENERIC_LATCH_8(config, "to_maincpu_latch"); // @ IC23
790827
GENERIC_LATCH_8(config, "to_subcpu_latch"); // @ IC22
791828

0 commit comments

Comments
 (0)