summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author Miodrag Milanovic <mmicko@gmail.com>2012-11-22 11:14:43 +0000
committer Miodrag Milanovic <mmicko@gmail.com>2012-11-22 11:14:43 +0000
commit20ecc3a84ca4c6d0aa3c100261838dfc503a34e1 (patch)
treebe8ef9da3c5ea97848c1bdcf5372be9e6005c72b /src
parent9317915eed9388cfdb344a8c9cd92d80727999fe (diff)
Added some more findings of TIM 011 (no whatsnew)
Diffstat (limited to 'src')
-rw-r--r--src/mess/drivers/tim011.c106
1 files changed, 100 insertions, 6 deletions
diff --git a/src/mess/drivers/tim011.c b/src/mess/drivers/tim011.c
index fe053d4b0f1..fdf68715be3 100644
--- a/src/mess/drivers/tim011.c
+++ b/src/mess/drivers/tim011.c
@@ -8,38 +8,86 @@
#include "emu.h"
#include "cpu/z180/z180.h"
+#include "formats/hxcmfm_dsk.h"
+#include "formats/imd_dsk.h"
+#include "formats/mfi_dsk.h"
+#include "machine/upd765.h"
+#define FDC9266_TAG "u43"
class tim011_state : public driver_device
{
public:
tim011_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag) { }
+ : driver_device(mconfig, type, tag),
+ m_maincpu(*this, "maincpu"),
+ m_fdc(*this, FDC9266_TAG),
+ m_floppy0(*this, FDC9266_TAG ":0:35dd"),
+ m_floppy1(*this, FDC9266_TAG ":1:35dd"),
+ m_floppy2(*this, FDC9266_TAG ":2:35dd"),
+ m_floppy3(*this, FDC9266_TAG ":3:35dd") { }
+
virtual void machine_reset();
virtual void video_start();
UINT32 screen_update_tim011(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+ DECLARE_WRITE8_MEMBER(print_w);
+ DECLARE_WRITE8_MEMBER(scroll_w);
+ DECLARE_WRITE8_MEMBER(fdc_dma_w);
+ DECLARE_READ8_MEMBER(print_r);
+ DECLARE_READ8_MEMBER(scroll_r);
+ void irq_w(bool state);
+ void drq_w(bool state);
+ UINT8 m_scroll;
+
+ required_device<cpu_device> m_maincpu;
+ required_device<upd765a_device> m_fdc;
+ required_device<floppy_image_device> m_floppy0;
+ required_device<floppy_image_device> m_floppy1;
+ required_device<floppy_image_device> m_floppy2;
+ required_device<floppy_image_device> m_floppy3;
};
static ADDRESS_MAP_START(tim011_mem, AS_PROGRAM, 8, tim011_state)
ADDRESS_MAP_UNMAP_HIGH
- AM_RANGE(0x00000, 0x01fff) AM_ROM
- AM_RANGE(0x40000, 0x7ffff) AM_RAM
+ AM_RANGE(0x00000, 0x01fff) AM_ROM AM_MIRROR(0x3e000)
+ AM_RANGE(0x40000, 0x7ffff) AM_RAM // 256KB RAM 8 * 41256 DRAM
ADDRESS_MAP_END
static ADDRESS_MAP_START(tim011_io, AS_IO, 8, tim011_state)
ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(0x0000, 0x007f) AM_RAM /* Z180 internal registers */
- AM_RANGE(0x8000, 0xffff) AM_RAM
+ AM_RANGE(0x0080, 0x009f) AM_DEVICE(FDC9266_TAG, upd765a_device, map)
+ //AM_RANGE(0x00a0, 0x00a0) AM_MIRROR(0x001f) AM_WRITE(fdc_dma_w)
+ //AM_RANGE(0x00c0, 0x00c1) AM_MIRROR(0x000e) AM_READWRITE(print_r,print_w)
+ //AM_RANGE(0x00d0, 0x00d0) AM_MIRROR(0x000f) AM_READWRITE(scroll_r,scroll_w)
+ AM_RANGE(0x8000, 0xffff) AM_RAM // Video RAM 43256 SRAM (32KB)
ADDRESS_MAP_END
/* Input ports */
static INPUT_PORTS_START( tim011 )
INPUT_PORTS_END
+void tim011_state::irq_w(bool state)
+{
+ m_maincpu->set_input_line(2, state);
+}
+
+void tim011_state::drq_w(bool state)
+{
+ printf("drq_w\n");
+}
void tim011_state::machine_reset()
{
+ // motor is actually connected on TXS pin of CPU
+ m_floppy0->mon_w(0);
+ m_floppy1->mon_w(0);
+ m_floppy2->mon_w(0);
+ m_floppy3->mon_w(0);
+
+ m_fdc->setup_intrq_cb(upd765a_device::line_cb(FUNC(tim011_state::irq_w), this));
+ m_fdc->setup_drq_cb(upd765a_device::line_cb(FUNC(tim011_state::drq_w), this));
}
void tim011_state::video_start()
@@ -51,14 +99,60 @@ UINT32 tim011_state::screen_update_tim011(screen_device &screen, bitmap_ind16 &b
return 0;
}
+WRITE8_MEMBER(tim011_state::fdc_dma_w)
+{
+ printf("fdc_dma_w :%02x\n",data);
+}
+
+WRITE8_MEMBER(tim011_state::print_w)
+{
+ //printf("print_w :%02x\n",data);
+}
+
+READ8_MEMBER(tim011_state::print_r)
+{
+ //printf("print_r\n");
+ return 0;
+}
+
+WRITE8_MEMBER(tim011_state::scroll_w)
+{
+ m_scroll = data;
+}
+
+READ8_MEMBER(tim011_state::scroll_r)
+{
+ return m_scroll;
+}
+
+static SLOT_INTERFACE_START( tim011_floppies )
+ SLOT_INTERFACE( "35dd", FLOPPY_35_DD )
+SLOT_INTERFACE_END
+
+static const floppy_format_type tim011_floppy_formats[] = {
+ FLOPPY_IMD_FORMAT,
+ FLOPPY_MFI_FORMAT,
+ FLOPPY_MFM_FORMAT,
+ NULL
+};
+
static MACHINE_CONFIG_START( tim011,tim011_state )
/* basic machine hardware */
- MCFG_CPU_ADD("maincpu",Z180, XTAL_12_288MHz / 2)
+ MCFG_CPU_ADD("maincpu",Z180, XTAL_12_288MHz / 2) // location U17 HD64180
MCFG_CPU_PROGRAM_MAP(tim011_mem)
MCFG_CPU_IO_MAP(tim011_io)
MCFG_CPU_VBLANK_INT_DRIVER("screen", tim011_state, irq0_line_hold)
+// MCFG_CPU_ADD("keyboard",COSMAC, XTAL_1_75MHz) // CDP1802, uknown clock
+ // FDC9266 location U43 XTAL_8MHz
+ MCFG_UPD765A_ADD(FDC9266_TAG, true, true)
+ /* floppy drives */
+ MCFG_FLOPPY_DRIVE_ADD(FDC9266_TAG ":0", tim011_floppies, "35dd", 0, tim011_floppy_formats)
+ MCFG_FLOPPY_DRIVE_ADD(FDC9266_TAG ":1", tim011_floppies, "35dd", 0, tim011_floppy_formats)
+ MCFG_FLOPPY_DRIVE_ADD(FDC9266_TAG ":2", tim011_floppies, "35dd", 0, tim011_floppy_formats)
+ MCFG_FLOPPY_DRIVE_ADD(FDC9266_TAG ":3", tim011_floppies, "35dd", 0, tim011_floppy_formats)
+
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(50)
@@ -73,7 +167,7 @@ MACHINE_CONFIG_END
/* ROM definition */
ROM_START( tim011 )
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
- ROM_LOAD( "sys_tim011.bin", 0x0000, 0x2000, CRC(5b4f1300) SHA1(d324991c4292d7dcde8b8d183a57458be8a2be7b))
+ ROM_LOAD( "sys_tim011.u16", 0x0000, 0x2000, CRC(5b4f1300) SHA1(d324991c4292d7dcde8b8d183a57458be8a2be7b))
ROM_REGION( 0x10000, "keyboard", ROMREGION_ERASEFF )
ROM_LOAD( "keyb_tim011.bin", 0x0000, 0x1000, CRC(a99c40a6) SHA1(d6d505271d91df4e079ec3c0a4abbe75ae9d649b))
ROM_END