smc777: Correct master XTAL frequency; add undumped 8041A to configuration

This commit is contained in:
AJR 2024-09-07 16:00:48 -04:00
parent 36f358d2a3
commit edbfe76b37
2 changed files with 10 additions and 7 deletions

View File

@ -109,7 +109,6 @@ const double XTAL::known_xtals[] = {
3'900'000, // 3.9_MHz_XTAL Resonator - Used on some Fidelity boards
3'932'160, // 3.93216_MHz_XTAL Apple Lisa COP421 (197-0016A)
4'000'000, // 4_MHz_XTAL -
4'028'000, // 4.028_MHz_XTAL Sony SMC-777
4'032'000, // 4.032_MHz_XTAL GRiD Compass modem board
4'096'000, // 4.096_MHz_XTAL Used to drive OKI M9810 chips
4'194'304, // 4.194304_MHz_XTAL Used to drive MC146818 / Nintendo Game Boy
@ -420,6 +419,7 @@ const double XTAL::known_xtals[] = {
32'147'000, // 32.147_MHz_XTAL Ampex 210+ 132-column display clock
32'215'900, // 32.2159_MHz_XTAL Sega System 32, Sega Game Gear (close to 9x NTSC subcarrier which is 32.215905Mhz
32'220'000, // 32.22_MHz_XTAL Typically used on 90's Data East PCBs
32'223'800, // 32.2238_MHz_XTAL Sony SMC-777 (~2048x NTSC line rate)
32'256'000, // 32.256_MHz_XTAL Hitachi MB-6890
32'317'400, // 32.3174_MHz_XTAL DEC VT330, VT340
32'530'470, // 32.53047_MHz_XTAL Seta 2

View File

@ -22,6 +22,7 @@
#include "emu.h"
#include "cpu/z80/z80.h"
#include "cpu/mcs48/mcs48.h"
#include "imagedev/floppy.h"
#include "imagedev/snapquik.h"
#include "machine/timer.h"
@ -38,8 +39,6 @@
namespace {
#define MASTER_CLOCK 4.028_MHz_XTAL
#define mc6845_h_char_total (m_crtc_vreg[0]+1)
#define mc6845_h_display (m_crtc_vreg[1])
#define mc6845_h_sync_pos (m_crtc_vreg[2])
@ -1104,11 +1103,15 @@ static void smc777_floppies(device_slot_interface &device)
void smc777_state::smc777(machine_config &config)
{
constexpr XTAL MASTER_CLOCK = 32.2238_MHz_XTAL;
/* basic machine hardware */
Z80(config, m_maincpu, MASTER_CLOCK);
Z80(config, m_maincpu, MASTER_CLOCK / 8); // nominally 4.028 MHz
m_maincpu->set_addrmap(AS_PROGRAM, &smc777_state::smc777_mem);
m_maincpu->set_addrmap(AS_IO, &smc777_state::smc777_io);
I8041A(config, "mcu", 6_MHz_XTAL).set_disable();
/* video hardware */
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_refresh_hz(60);
@ -1122,14 +1125,14 @@ void smc777_state::smc777(machine_config &config)
GFXDECODE(config, m_gfxdecode, m_palette, gfxdecode_device::empty);
HD6845S(config, m_crtc, MASTER_CLOCK/2); /* HD68A45SP; unknown clock, hand tuned to get ~60 fps */
HD6845S(config, m_crtc, MASTER_CLOCK / 16); // HD68A45SP; unknown clock, hand tuned to get ~60 fps
m_crtc->set_screen(m_screen);
m_crtc->set_show_border_area(true);
m_crtc->set_char_width(8);
m_crtc->out_vsync_callback().set(FUNC(smc777_state::vsync_w));
// floppy controller
MB8876(config, m_fdc, 1_MHz_XTAL);
MB8876(config, m_fdc, MASTER_CLOCK / 32); // divider not confirmed
m_fdc->intrq_wr_callback().set(FUNC(smc777_state::fdc_intrq_w));
m_fdc->drq_wr_callback().set(FUNC(smc777_state::fdc_drq_w));
@ -1143,7 +1146,7 @@ void smc777_state::smc777(machine_config &config)
/* sound hardware */
SPEAKER(config, "mono").front_center();
SN76489A(config, "sn1", MASTER_CLOCK).add_route(ALL_OUTPUTS, "mono", 0.50); // unknown clock / divider
SN76489A(config, "sn1", MASTER_CLOCK / 8).add_route(ALL_OUTPUTS, "mono", 0.50); // unknown clock / divider
BEEP(config, m_beeper, 300); // TODO: correct frequency
m_beeper->add_route(ALL_OUTPUTS, "mono", 0.50);