diff --git a/src/mame/drivers/myb3k.cpp b/src/mame/drivers/myb3k.cpp index d93fcba385a..c13495e1732 100644 --- a/src/mame/drivers/myb3k.cpp +++ b/src/mame/drivers/myb3k.cpp @@ -51,8 +51,9 @@ #define LOG_PIC (1U << 3) #define LOG_CRT (1U << 4) #define LOG_DMA (1U << 5) +#define LOG_KBD (1U << 6) -//#define VERBOSE (LOG_GENERAL | LOG_DMA ) +//#define VERBOSE (LOG_GENERAL | LOG_CRT) //#define LOG_OUTPUT_STREAM std::cout #include "logmacro.h" @@ -62,6 +63,7 @@ #define LOGPIC(...) LOGMASKED(LOG_PIC, __VA_ARGS__) #define LOGCRT(...) LOGMASKED(LOG_CRT, __VA_ARGS__) #define LOGDMA(...) LOGMASKED(LOG_DMA, __VA_ARGS__) +#define LOGKBD(...) LOGMASKED(LOG_KBD, __VA_ARGS__) #ifdef _MSC_VER #define FUNCNAME __func__ @@ -100,6 +102,7 @@ public: DECLARE_WRITE8_MEMBER(ppi_porta_w); DECLARE_READ8_MEMBER(ppi_portb_r); + DECLARE_WRITE8_MEMBER(ppi_portc_w); DECLARE_READ8_MEMBER( io_dack0_r ){ uint8_t tmp = m_isabus->dack_r(0); LOGDMA("%s: %02x\n", FUNCNAME, tmp); return tmp; } DECLARE_READ8_MEMBER( io_dack1_r ){ uint8_t tmp = m_isabus->dack_r(1); LOGDMA("%s: %02x\n", FUNCNAME, tmp); return tmp; } @@ -151,13 +154,16 @@ void myb3k_state::video_start() READ8_MEMBER( myb3k_state::myb3k_kbd_r ) { + LOGKBD("%s: %02x\n", FUNCNAME, m_kbd_data); // IN from port 0x04 enables a 74LS244 buffer that // presents to the CPU the parallell bits from the 74LS164 // serial to parallel converter. + m_pic8259->ir1_w(CLEAR_LINE); return m_kbd_data; } void myb3k_state::kbd_set_data_and_interrupt(u8 data) { + LOGKBD("%s: %02x\n", FUNCNAME, data); m_kbd_data = data; m_pic8259->ir1_w(ASSERT_LINE); } @@ -190,9 +196,9 @@ uint32_t myb3k_state::screen_update_myb3k(screen_device &screen, bitmap_ind16 &b //popmessage("%02x %d",m_vmode,h_step); - for(y=0;ylevel_w(state ? 1 : 0); + m_speaker->level_w(state ? 1 : 0); } WRITE8_MEMBER(myb3k_state::dma_segment_w) @@ -466,7 +474,7 @@ WRITE8_MEMBER(myb3k_state::dma_memory_write_byte) WRITE8_MEMBER( myb3k_state::ppi_porta_w ) { - LOGPPI("%s: %d\n", FUNCNAME, data); + LOGPPI("%s: %02x\n", FUNCNAME, data); return; } @@ -477,6 +485,31 @@ READ8_MEMBER( myb3k_state::ppi_portb_r ) return ioport("DSW1")->read(); } +WRITE8_MEMBER( myb3k_state::ppi_portc_w ) +{ + LOGPPI("%s: %02x\n", FUNCNAME, data); + LOGPPI(" - STROBE : %d\n", (data & PC0_STROBE) ? 1 : 0); + LOGPPI(" - SETPAGE: %d\n", (data & PC1_SETPAGE) ? 1 : 0); + LOGPPI(" - DISPST : %d\n", (data & PC2_DISPST) ? 1 : 0); + LOGPPI(" - LPENB : %d\n", (data & PC3_LPENB) ? 1 : 0); + LOGPPI(" - CURSR : %d\n", (data & PC4_CURSR) ? 1 : 0); + LOGPPI(" - BUZON : %d\n", (data & PC5_BUZON) ? 1 : 0); + LOGPPI(" - CMTWRD : %d\n", (data & PC6_CMTWRD) ? 1 : 0); + LOGPPI(" - CMTEN : %d\n", (data & PC7_CMTEN) ? 1 : 0); + LOGPPI(" => CMTEN: %d BUZON: %d\n", (data & PC7_CMTEN) ? 1 : 0, (data & PC5_BUZON)? 1 : 0); + + /* + * The actual logic around enabling the buzzer is a bit more complicated involving the cassette interface + * According to the schematics gate1 is enabled if either + * (CMTEN is inactive high and BUZON active high) OR + * (CMTEN is active low and CMTRD is inactive high) + * and CMTRD is low). Problem is that the schematics fails to show where CMTRD comes from so only the first case is emulated + */ + m_pit8253->write_gate1(!(data & PC5_BUZON) && (data & PC7_CMTEN)? 1 : 0); + + return; +} + static const gfx_layout myb3k_charlayout = { 8, 8, @@ -531,7 +564,7 @@ static MACHINE_CONFIG_START( myb3k ) MCFG_DEVICE_ADD("ppi", I8255A, 0) MCFG_I8255_OUT_PORTA_CB(WRITE8(myb3k_state, ppi_porta_w)) MCFG_I8255_IN_PORTB_CB(READ8(myb3k_state, ppi_portb_r)) -// MCFG_I8255_IN_PORTC_CB(READ8(myb3k_state, ppi_portc_r)) + MCFG_I8255_OUT_PORTC_CB(WRITE8(myb3k_state, ppi_portc_w)) /* DMA chip */ MCFG_DEVICE_ADD("dma", I8257, XTAL_14_31818MHz / 6)