trunk/src/mess/drivers/tim011.c
| r19104 | r19105 | |
| 8 | 8 | |
| 9 | 9 | #include "emu.h" |
| 10 | 10 | #include "cpu/z180/z180.h" |
| 11 | #include "formats/hxcmfm_dsk.h" |
| 12 | #include "formats/imd_dsk.h" |
| 13 | #include "formats/mfi_dsk.h" |
| 14 | #include "machine/upd765.h" |
| 11 | 15 | |
| 16 | #define FDC9266_TAG "u43" |
| 12 | 17 | |
| 13 | 18 | class tim011_state : public driver_device |
| 14 | 19 | { |
| 15 | 20 | public: |
| 16 | 21 | tim011_state(const machine_config &mconfig, device_type type, const char *tag) |
| 17 | | : driver_device(mconfig, type, tag) { } |
| 22 | : driver_device(mconfig, type, tag), |
| 23 | m_maincpu(*this, "maincpu"), |
| 24 | m_fdc(*this, FDC9266_TAG), |
| 25 | m_floppy0(*this, FDC9266_TAG ":0:35dd"), |
| 26 | m_floppy1(*this, FDC9266_TAG ":1:35dd"), |
| 27 | m_floppy2(*this, FDC9266_TAG ":2:35dd"), |
| 28 | m_floppy3(*this, FDC9266_TAG ":3:35dd") { } |
| 29 | |
| 18 | 30 | virtual void machine_reset(); |
| 19 | 31 | virtual void video_start(); |
| 20 | 32 | UINT32 screen_update_tim011(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 33 | DECLARE_WRITE8_MEMBER(print_w); |
| 34 | DECLARE_WRITE8_MEMBER(scroll_w); |
| 35 | DECLARE_WRITE8_MEMBER(fdc_dma_w); |
| 36 | DECLARE_READ8_MEMBER(print_r); |
| 37 | DECLARE_READ8_MEMBER(scroll_r); |
| 38 | void irq_w(bool state); |
| 39 | void drq_w(bool state); |
| 40 | UINT8 m_scroll; |
| 41 | |
| 42 | required_device<cpu_device> m_maincpu; |
| 43 | required_device<upd765a_device> m_fdc; |
| 44 | required_device<floppy_image_device> m_floppy0; |
| 45 | required_device<floppy_image_device> m_floppy1; |
| 46 | required_device<floppy_image_device> m_floppy2; |
| 47 | required_device<floppy_image_device> m_floppy3; |
| 21 | 48 | }; |
| 22 | 49 | |
| 23 | 50 | |
| 24 | 51 | static ADDRESS_MAP_START(tim011_mem, AS_PROGRAM, 8, tim011_state) |
| 25 | 52 | ADDRESS_MAP_UNMAP_HIGH |
| 26 | | AM_RANGE(0x00000, 0x01fff) AM_ROM |
| 27 | | AM_RANGE(0x40000, 0x7ffff) AM_RAM |
| 53 | AM_RANGE(0x00000, 0x01fff) AM_ROM AM_MIRROR(0x3e000) |
| 54 | AM_RANGE(0x40000, 0x7ffff) AM_RAM // 256KB RAM 8 * 41256 DRAM |
| 28 | 55 | ADDRESS_MAP_END |
| 29 | 56 | |
| 30 | 57 | static ADDRESS_MAP_START(tim011_io, AS_IO, 8, tim011_state) |
| 31 | 58 | ADDRESS_MAP_UNMAP_HIGH |
| 32 | 59 | AM_RANGE(0x0000, 0x007f) AM_RAM /* Z180 internal registers */ |
| 33 | | AM_RANGE(0x8000, 0xffff) AM_RAM |
| 60 | AM_RANGE(0x0080, 0x009f) AM_DEVICE(FDC9266_TAG, upd765a_device, map) |
| 61 | //AM_RANGE(0x00a0, 0x00a0) AM_MIRROR(0x001f) AM_WRITE(fdc_dma_w) |
| 62 | //AM_RANGE(0x00c0, 0x00c1) AM_MIRROR(0x000e) AM_READWRITE(print_r,print_w) |
| 63 | //AM_RANGE(0x00d0, 0x00d0) AM_MIRROR(0x000f) AM_READWRITE(scroll_r,scroll_w) |
| 64 | AM_RANGE(0x8000, 0xffff) AM_RAM // Video RAM 43256 SRAM (32KB) |
| 34 | 65 | ADDRESS_MAP_END |
| 35 | 66 | |
| 36 | 67 | /* Input ports */ |
| 37 | 68 | static INPUT_PORTS_START( tim011 ) |
| 38 | 69 | INPUT_PORTS_END |
| 39 | 70 | |
| 71 | void tim011_state::irq_w(bool state) |
| 72 | { |
| 73 | m_maincpu->set_input_line(2, state); |
| 74 | } |
| 40 | 75 | |
| 76 | void tim011_state::drq_w(bool state) |
| 77 | { |
| 78 | printf("drq_w\n"); |
| 79 | } |
| 80 | |
| 41 | 81 | void tim011_state::machine_reset() |
| 42 | 82 | { |
| 83 | // motor is actually connected on TXS pin of CPU |
| 84 | m_floppy0->mon_w(0); |
| 85 | m_floppy1->mon_w(0); |
| 86 | m_floppy2->mon_w(0); |
| 87 | m_floppy3->mon_w(0); |
| 88 | |
| 89 | m_fdc->setup_intrq_cb(upd765a_device::line_cb(FUNC(tim011_state::irq_w), this)); |
| 90 | m_fdc->setup_drq_cb(upd765a_device::line_cb(FUNC(tim011_state::drq_w), this)); |
| 43 | 91 | } |
| 44 | 92 | |
| 45 | 93 | void tim011_state::video_start() |
| r19104 | r19105 | |
| 51 | 99 | return 0; |
| 52 | 100 | } |
| 53 | 101 | |
| 102 | WRITE8_MEMBER(tim011_state::fdc_dma_w) |
| 103 | { |
| 104 | printf("fdc_dma_w :%02x\n",data); |
| 105 | } |
| 106 | |
| 107 | WRITE8_MEMBER(tim011_state::print_w) |
| 108 | { |
| 109 | //printf("print_w :%02x\n",data); |
| 110 | } |
| 111 | |
| 112 | READ8_MEMBER(tim011_state::print_r) |
| 113 | { |
| 114 | //printf("print_r\n"); |
| 115 | return 0; |
| 116 | } |
| 117 | |
| 118 | WRITE8_MEMBER(tim011_state::scroll_w) |
| 119 | { |
| 120 | m_scroll = data; |
| 121 | } |
| 122 | |
| 123 | READ8_MEMBER(tim011_state::scroll_r) |
| 124 | { |
| 125 | return m_scroll; |
| 126 | } |
| 127 | |
| 128 | static SLOT_INTERFACE_START( tim011_floppies ) |
| 129 | SLOT_INTERFACE( "35dd", FLOPPY_35_DD ) |
| 130 | SLOT_INTERFACE_END |
| 131 | |
| 132 | static const floppy_format_type tim011_floppy_formats[] = { |
| 133 | FLOPPY_IMD_FORMAT, |
| 134 | FLOPPY_MFI_FORMAT, |
| 135 | FLOPPY_MFM_FORMAT, |
| 136 | NULL |
| 137 | }; |
| 138 | |
| 54 | 139 | static MACHINE_CONFIG_START( tim011,tim011_state ) |
| 55 | 140 | /* basic machine hardware */ |
| 56 | | MCFG_CPU_ADD("maincpu",Z180, XTAL_12_288MHz / 2) |
| 141 | MCFG_CPU_ADD("maincpu",Z180, XTAL_12_288MHz / 2) // location U17 HD64180 |
| 57 | 142 | MCFG_CPU_PROGRAM_MAP(tim011_mem) |
| 58 | 143 | MCFG_CPU_IO_MAP(tim011_io) |
| 59 | 144 | MCFG_CPU_VBLANK_INT_DRIVER("screen", tim011_state, irq0_line_hold) |
| 60 | 145 | |
| 146 | // MCFG_CPU_ADD("keyboard",COSMAC, XTAL_1_75MHz) // CDP1802, uknown clock |
| 61 | 147 | |
| 148 | // FDC9266 location U43 XTAL_8MHz |
| 149 | MCFG_UPD765A_ADD(FDC9266_TAG, true, true) |
| 150 | /* floppy drives */ |
| 151 | MCFG_FLOPPY_DRIVE_ADD(FDC9266_TAG ":0", tim011_floppies, "35dd", 0, tim011_floppy_formats) |
| 152 | MCFG_FLOPPY_DRIVE_ADD(FDC9266_TAG ":1", tim011_floppies, "35dd", 0, tim011_floppy_formats) |
| 153 | MCFG_FLOPPY_DRIVE_ADD(FDC9266_TAG ":2", tim011_floppies, "35dd", 0, tim011_floppy_formats) |
| 154 | MCFG_FLOPPY_DRIVE_ADD(FDC9266_TAG ":3", tim011_floppies, "35dd", 0, tim011_floppy_formats) |
| 155 | |
| 62 | 156 | /* video hardware */ |
| 63 | 157 | MCFG_SCREEN_ADD("screen", RASTER) |
| 64 | 158 | MCFG_SCREEN_REFRESH_RATE(50) |
| r19104 | r19105 | |
| 73 | 167 | /* ROM definition */ |
| 74 | 168 | ROM_START( tim011 ) |
| 75 | 169 | ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF ) |
| 76 | | ROM_LOAD( "sys_tim011.bin", 0x0000, 0x2000, CRC(5b4f1300) SHA1(d324991c4292d7dcde8b8d183a57458be8a2be7b)) |
| 170 | ROM_LOAD( "sys_tim011.u16", 0x0000, 0x2000, CRC(5b4f1300) SHA1(d324991c4292d7dcde8b8d183a57458be8a2be7b)) |
| 77 | 171 | ROM_REGION( 0x10000, "keyboard", ROMREGION_ERASEFF ) |
| 78 | 172 | ROM_LOAD( "keyb_tim011.bin", 0x0000, 0x1000, CRC(a99c40a6) SHA1(d6d505271d91df4e079ec3c0a4abbe75ae9d649b)) |
| 79 | 173 | ROM_END |