brother/pn8800fxb: Add buzzer and battery state

This commit is contained in:
Dirk Best 2023-12-21 13:33:26 +01:00
parent 0b7dbf53e0
commit b1e2be4cdb

View File

@ -20,7 +20,6 @@
- Fix ROM banking (ROM self-test shows NG)
- Improve video emulation (offset, modes, etc.)
- Floppy
- Buzzer
- Centronics
- Modem
- Soft power off/on
@ -41,9 +40,11 @@
#include "cpu/z180/z180.h"
#include "machine/rp5c01.h"
#include "machine/timer.h"
#include "sound/beep.h"
#include "emupal.h"
#include "screen.h"
#include "speaker.h"
namespace {
@ -62,6 +63,7 @@ public:
m_palette(*this, "palette"),
m_gfxdecode(*this, "gfxdecode"),
m_keys(*this, "KO%u", 0U),
m_buzzer(*this, "buzzer"),
m_lomem_view(*this, "lomem")
{ }
@ -77,6 +79,7 @@ private:
required_device<palette_device> m_palette;
required_device<gfxdecode_device> m_gfxdecode;
required_ioport_array<9> m_keys;
required_device<beep_device> m_buzzer;
memory_view m_lomem_view;
uint8_t m_key_select;
@ -109,6 +112,8 @@ private:
void video_offset_w(uint8_t data);
void cursor_ctrl_w(uint8_t data);
void buzzer_w(uint8_t data);
void mem_change_w(uint8_t data);
void bank_select_w(uint8_t data);
void int_ack_w(uint8_t data);
@ -152,19 +157,19 @@ void pn8800fxb_state::io_map(address_map &map)
map(0x77, 0x77).w(FUNC(pn8800fxb_state::cursor_ctrl_w));
// 78-7f mode select
// 80-87 fdc
// 88-8f input
map(0x88, 0x88).mirror(0x07).portr("misc");
map(0x90, 0x90).mirror(0x07).w(FUNC(pn8800fxb_state::mem_change_w));
// 98-9f rs break
// a0-a7 rs232
map(0xa8, 0xa8).mirror(0x07).nopr(); // "not used" - but read often
// b0-b7 power supply
map(0xb0, 0xb0).mirror(0x07).portr("power");
map(0xb8, 0xb8).rw(FUNC(pn8800fxb_state::keyboard_r), FUNC(pn8800fxb_state::keyboard_w));
// c0-c7 cdcc data
// c8-cf cdcc control
map(0xd0, 0xdf).rw("rtc", FUNC(tc8521_device::read), FUNC(tc8521_device::write));
map(0xe0, 0xe0).mirror(0x07).w(FUNC(pn8800fxb_state::bank_select_w));
// e8-ef ga test
// f0-f7 buzzer
map(0xf0, 0xf0).mirror(0x07).w(FUNC(pn8800fxb_state::buzzer_w));
map(0xf8, 0xf8).mirror(0x07).w(FUNC(pn8800fxb_state::int_ack_w));
}
@ -174,6 +179,23 @@ void pn8800fxb_state::io_map(address_map &map)
//**************************************************************************
static INPUT_PORTS_START( pn8800fxb )
PORT_START("misc")
// 0x01 sp3
// 0x02 index
PORT_CONFNAME(0x04, 0x00, "AC Adaptor")
PORT_CONFSETTING( 0x00, "Good")
PORT_CONFSETTING( 0x04, "Not Good")
// 0x08 sp1
PORT_START("power")
PORT_CONFNAME(0x01, 0x00, "Li Battery")
PORT_CONFSETTING( 0x00, "Good")
PORT_CONFSETTING( 0x01, "Not Good")
PORT_CONFNAME(0x06, 0x00, "NiCd Battery")
PORT_CONFSETTING( 0x00, "Good")
PORT_CONFSETTING( 0x02, "Low")
PORT_CONFSETTING( 0x04, "Not Good")
PORT_START("KO0")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LEFT) PORT_CHAR(UCHAR_MAMEKEY(LEFT)) PORT_NAME("\xe2\x86\x90 EXPR") // ←
@ -491,6 +513,20 @@ static GFXDECODE_START( gfx )
GFXDECODE_END
//**************************************************************************
// AUDIO EMULATION
//**************************************************************************
void pn8800fxb_state::buzzer_w(uint8_t data)
{
// 7------- buzzer
// -654321- not used
// -------0 4khzoff
m_buzzer->set_state(BIT(data, 7));
}
//**************************************************************************
// MACHINE EMULATION
//**************************************************************************
@ -583,6 +619,10 @@ void pn8800fxb_state::pn8800fxb(machine_config &config)
GFXDECODE(config, m_gfxdecode, m_palette, gfx);
// sound hardware
SPEAKER(config, "mono").front_center();
BEEP(config, m_buzzer, 4'000).add_route(ALL_OUTPUTS, "mono", 1.0); // 4.0 kHz generated by the gate array
TC8521(config, "rtc", XTAL(32'768));
// alarm output connected to auto power-on
}
@ -606,4 +646,4 @@ ROM_END
//**************************************************************************
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
COMP( 1996, pn8800, 0, 0, pn8800fxb, pn8800fxb, pn8800fxb_state, empty_init, "Brother", "PN-8800FXB", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE )
COMP( 1996, pn8800, 0, 0, pn8800fxb, pn8800fxb, pn8800fxb_state, empty_init, "Brother", "PN-8800FXB", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )