basf7100: Initial floppy hookup, tries booting now

This commit is contained in:
Dirk Best 2021-04-08 13:14:01 +02:00
parent b663c4bc50
commit 85b4bcd98c

View File

@ -39,7 +39,7 @@
- 30293E-054 20-04592-054 (?)
TODO:
- Everything
- The floppy is partially hooked up, everything else needs to be done
Notes:
- Runs the BOS operating system, possibly also CP/M?
@ -48,6 +48,8 @@
#include "emu.h"
#include "cpu/z80/z80.h"
#include "machine/wd_fdc.h"
#include "imagedev/floppy.h"
namespace {
@ -63,7 +65,9 @@ public:
basf7100_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_fdccpu(*this, "fdccpu")
m_fdccpu(*this, "fdccpu"),
m_fdc(*this, "fdc"),
m_floppy(*this, "fdc:%u", 0)
{ }
void basf7100(machine_config &config);
@ -75,12 +79,22 @@ protected:
private:
required_device<z80_device> m_maincpu;
required_device<z80_device> m_fdccpu;
required_device<fd1791_device> m_fdc;
required_device_array<floppy_connector, 3> m_floppy;
void mem_map(address_map &map);
void io_map(address_map &map);
void fdc_mem_map(address_map &map);
void fdc_io_map(address_map &map);
uint8_t mmio_r(offs_t offset);
void mmio_w(offs_t offset, uint8_t data);
IRQ_CALLBACK_MEMBER(fdccpu_irq_callback);
uint8_t fdc_ctrl_r();
void fdc_ctrl_w(uint8_t data);
};
@ -90,19 +104,41 @@ private:
void basf7100_state::mem_map(address_map &map)
{
map(0xff00, 0xffff).rw(FUNC(basf7100_state::mmio_r), FUNC(basf7100_state::mmio_w));
}
void basf7100_state::io_map(address_map &map)
{
map.global_mask(0xff);
// map(0x00, 0x03) 8255 (keyboard)
// map(0x04, 0x07) 8255 (printer)
// map(0x08, 0x09).mirror(0x02) 8259
// map(0x0c, 0x0f) 8255
// map(0x10, 0x11) 8251 (primary)
// map(0x12, 0x12) baud rate
// map(0x14, 0x15) 8251 (secondary)
// map(0x16, 0x16) baud rate
// map(0x17, 0x17) rs232 flags/control
// map(0x18, 0x18) interrupt flags
// map(0x1c, 0x1f) switches
// map(0xb0, 0xb3) display hardware clear
// map(0xb8, 0xbb) 8255 (cursor)
// map(0xbc, 0xbf) 8255 (sod)
map(0xc0, 0xc3).rw(m_fdc, FUNC(fd1791_device::read), FUNC(fd1791_device::write));
map(0xc4, 0xc4).rw(FUNC(basf7100_state::fdc_ctrl_r), FUNC(basf7100_state::fdc_ctrl_w));
}
void basf7100_state::fdc_mem_map(address_map &map)
{
map(0xd000, 0xefff).ram();
map(0xfc00, 0xffff).rom().region("fdccpu", 0);
map(0xff00, 0xffff).rw(FUNC(basf7100_state::mmio_r), FUNC(basf7100_state::mmio_w));
}
void basf7100_state::fdc_io_map(address_map &map)
{
map.global_mask(0xff);
map(0x00, 0xff).rw(FUNC(basf7100_state::mmio_r), FUNC(basf7100_state::mmio_w));
}
@ -123,6 +159,44 @@ INPUT_PORTS_END
// MACHINE EMULATION
//**************************************************************************
uint8_t basf7100_state::fdc_ctrl_r()
{
// 7------- unknown, checked after seek cmd
// -6543210 unknown
return 0x80;
}
void basf7100_state::fdc_ctrl_w(uint8_t data)
{
// 7654---- unknown
// ----3--- select drive 0 or motor on?
// -----210 unknown
logerror("fdc_ctrl_w: %04x\n", data);
floppy_image_device *floppy = nullptr;
// hardcoded to drive 0 for now
floppy = m_floppy[0]->get_device();
m_fdc->set_floppy(floppy);
}
uint8_t basf7100_state::mmio_r(offs_t offset)
{
return m_maincpu->space(AS_IO).read_byte(offset);
}
void basf7100_state::mmio_w(offs_t offset, uint8_t data)
{
m_maincpu->space(AS_IO).write_byte(offset, data);
}
IRQ_CALLBACK_MEMBER( basf7100_state::fdccpu_irq_callback )
{
return 0x60;
}
void basf7100_state::machine_start()
{
}
@ -138,6 +212,11 @@ void basf7100_state::machine_reset()
// MACHINE DEFINTIONS
//**************************************************************************
static void basf7100_floppies(device_slot_interface &device)
{
device.option_add("basf6106", FLOPPY_525_SSSD);
}
void basf7100_state::basf7100(machine_config &config)
{
Z80(config, m_maincpu, 4000000);
@ -147,6 +226,14 @@ void basf7100_state::basf7100(machine_config &config)
Z80(config, m_fdccpu, 4000000);
m_fdccpu->set_addrmap(AS_PROGRAM, &basf7100_state::fdc_mem_map);
m_fdccpu->set_addrmap(AS_IO, &basf7100_state::fdc_io_map);
m_fdccpu->set_irq_acknowledge_callback(FUNC(basf7100_state::fdccpu_irq_callback));
// floppy
FD1791(config, m_fdc, 2000000); // unknown clock
m_fdc->intrq_wr_callback().set_inputline(m_fdccpu, INPUT_LINE_IRQ0);
FLOPPY_CONNECTOR(config, "fdc:0", basf7100_floppies, "basf6106", floppy_image_device::default_mfm_floppy_formats);
FLOPPY_CONNECTOR(config, "fdc:1", basf7100_floppies, "basf6106", floppy_image_device::default_mfm_floppy_formats);
FLOPPY_CONNECTOR(config, "fdc:2", basf7100_floppies, "basf6106", floppy_image_device::default_mfm_floppy_formats);
}
@ -161,11 +248,15 @@ ROM_START( basf7120 )
ROM_REGION(0x400, "keyboard", 0)
ROM_LOAD("19-2114-01e.bin", 0x000, 0x400, CRC(d694b5dd) SHA1(6262379ba565c1de072b2b21dc3141db1ec5129c))
ROM_REGION(0x170, "pals", 0)
ROM_LOAD("cpu_board_im561cje_192113-2.u21", 0x000, 0x020, CRC(4405e26f) SHA1(0f93c47e9f546b42a85e5eced58337e0add443c4))
ROM_LOAD("floppy_board_pal10l8mj_19-2131-1.u23", 0x000, 0x028, CRC(f37ed4bc) SHA1(824b4405f396c262cf8116f85eb0b548eabb4c04))
ROM_LOAD("floppy_board_pal10l8mj_19-2132-1.u24", 0x000, 0x028, CRC(b918ff18) SHA1(c6d7cd9642ed32e56b5c1df1ddf3afe09d744ebc))
ROM_LOAD("video_board_30_82s129n.bin", 0x000, 0x100, CRC(89175ac9) SHA1(69b2055bee87e11cc74c70cef2f2bebcbd0004c9))
ROM_REGION(0x20, "cpu_pal", 0)
ROM_LOAD("cpu_board_im561cje_192113-2.u21", 0x00, 0x20, CRC(4405e26f) SHA1(0f93c47e9f546b42a85e5eced58337e0add443c4))
ROM_REGION(0x50, "floppy_pal", 0)
ROM_LOAD("floppy_board_pal10l8mj_19-2131-1.u23", 0x00, 0x28, CRC(f37ed4bc) SHA1(824b4405f396c262cf8116f85eb0b548eabb4c04))
ROM_LOAD("floppy_board_pal10l8mj_19-2132-1.u24", 0x28, 0x28, CRC(b918ff18) SHA1(c6d7cd9642ed32e56b5c1df1ddf3afe09d744ebc))
ROM_REGION(0x100, "video_pal", 0)
ROM_LOAD("video_board_30_82s129n.bin", 0x000, 0x100, CRC(89175ac9) SHA1(69b2055bee87e11cc74c70cef2f2bebcbd0004c9))
ROM_END
@ -177,4 +268,4 @@ ROM_END
//**************************************************************************
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
COMP( 1982, basf7120, 0, 0, basf7100, basf7100, basf7100_state, empty_init, "BASF", "7120", MACHINE_IS_SKELETON )
COMP( 1982, basf7120, 0, 0, basf7100, basf7100, basf7100_state, empty_init, "BASF", "7120", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )