trunk/src/mess/drivers/itt3030.c
| r26514 | r26515 | |
| 2 | 2 | |
| 3 | 3 | ITT 3030 |
| 4 | 4 | |
| 5 | |
| 6 | ToDo: |
| 7 | - Check Beeper |
| 8 | - hook up keyboard |
| 9 | - According to the manual, the keyboard is based on a 8278 ... it's nowhere to be found. The keyboard / video card has a 8741 instead of which a ROM dump exists |
| 10 | - memory map |
| 11 | - serial port |
| 12 | - daisy chain |
| 13 | - ... |
| 14 | |
| 15 | |
| 16 | CPU Board, all ICs shown: |
| 17 | |
| 18 | |-----------------------------------------------------------------| |
| 19 | | | |
| 20 | | 74LS640N Z80_Combo 74LS138N | |
| 21 | | 74LS00N | |
| 22 | | 74LS240N 74LS74AN | |
| 23 | | 74LS00N | |
| 24 | |C 74LS240N Z80_CPU 74LS240N C| |
| 25 | |N 74LS74AN N| |
| 26 | |1 74LS241N 74LS240N 2| |
| 27 | | ROM_1 74LS20N 74LS38N | |
| 28 | | 74LS240N 74LS240N | |
| 29 | | 74LS04N 74LS02N | |
| 30 | | 74LS138N 74LS74AN | |
| 31 | | 74LS175N | |
| 32 | | 75154N 74LS156N 74LS00N | |
| 33 | | 74LS123N | |
| 34 | | 75150P 75150P 74LS175N X1 74LS00N 74LS132N | |
| 35 | |-----------------------------------------------------------------| |
| 36 | |
| 37 | Z80_Combo: Mostek MK3886 Z80 Combo Chip, Serial, Timer, 256 bytes RAM, Interrupt Controller |
| 38 | Z80_CPU: Zilog Z80A CPU |
| 39 | ROM_1: NEC D2716D marked "BOOTV1.2" |
| 40 | X1: Crystal 4,194 MHz |
| 41 | CN1: Bus Connector |
| 42 | CN2: Memory Board Connector |
| 43 | |
| 44 | ---------------------------------------------------------------------------------- |
| 45 | |
| 46 | Video / Keyboard Combination board, all ICs shown: |
| 47 | |
| 48 | |-----------------------------------------------------------------| |
| 49 | | | |
| 50 | | X1 74276N MCU_1 74LS85N | |
| 51 | | | |
| 52 | | 74LS138N 74LS240 74LS240N | |
| 53 | | 75LS257AN 74LS166AN | |
| 54 | | 74LS08N 74LS85N 74LS241N | |
| 55 | | 75LS257AN ROM_1 C| |
| 56 | | 74LS132N 74LS32N 74LS240N N| |
| 57 | | 75LS257AN 1| |
| 58 | | 74LS10N 74LS08N 74LS240N | |
| 59 | | 75LS257AN RAM_1 | |
| 60 | | 74LS163AN 74LS173AN 74LS374N | |
| 61 | | | |
| 62 | | 74LS86N 74LS240N 74LS640N | |
| 63 | | Video_1 | |
| 64 | | 74LS74AN 74LS240N 74LS640N | |
| 65 | |-----------------------------------------------------------------| |
| 66 | |
| 67 | X1: Crystal 6 MHz |
| 68 | MCU_1: NEC D8741AD marked "V1.1 3030" |
| 69 | ROM_1: MBM 2716 marked "GB 136-0" |
| 70 | RAM_1: NEC D4016D |
| 71 | Video_1 Video-IC SND5027E, compatible with TMS9927 |
| 72 | |
| 73 | ---------------------------------------------------------------------------------- |
| 74 | |
| 75 | Floppy Controller board, all ICs shown |
| 76 | |
| 77 | |-----------------------------------------------------------------| |
| 78 | | | |
| 79 | | X1 74LS51N F 74LS74AN 74LS02N MC4044P | |
| 80 | | D 567 | |
| 81 | | 74LS04N C 74LS00N 74LS01N ::: MC4024P | |
| 82 | | | |
| 83 | | 74LS00N 1 74LS74AN 74LS74AN 74LS14N C| |
| 84 | | 7 N| |
| 85 | | 74LS240N 9 74LS161N 74LS393N 74LS74AN 1| |
| 86 | | 1 | |
| 87 | | 74LS132N 74LS14N 74LS14N 74LS374N | |
| 88 | | | |
| 89 | | 74LS123N 74LS04N 74LS163N 74LS14N 74LS241N | |
| 90 | | | |
| 91 | | 74LS393N 74LS138 74LS175N 74LS85N 74LS645N | |
| 92 | | | |
| 93 | |-----------------------------------------------------------------| |
| 94 | |
| 95 | X1: Crystal 8 MHz |
| 96 | FDC: Siemens SAB1791-02P |
| 97 | 567: Jumper Pad (emtpy) |
| 98 | |
| 99 | ---------------------------------------------------------------------------------- |
| 100 | |
| 101 | 256K RAM board, all ICs shown: |
| 102 | |
| 103 | |-----------------------------------------------------------------| |
| 104 | | | |
| 105 | | HM4864P HM4864P HM4864P HM4864P 74LS245N | |
| 106 | | | |
| 107 | | HM4864P HM4864P HM4864P HM4864P P 74LS14N | |
| 108 | | R | |
| 109 | | HM4864P HM4864P HM4864P HM4864P M 74LS00N | |
| 110 | | C| |
| 111 | | HM4864P HM4864P HM4864P HM4864P AM A N| |
| 112 | | 29 M 1| |
| 113 | | HM4864P HM4864P HM4864P HM4864P 66 2 | |
| 114 | | PC 9 | |
| 115 | | HM4864P HM4864P HM4864P HM4864P 6 | |
| 116 | | AM 4 | |
| 117 | | HM4864P HM4864P HM4864P HM4864P 29 8 | |
| 118 | | 66 P | |
| 119 | | HM4864P HM4864P HM4864P HM4864P PC C | |
| 120 | | SN7474N | |
| 121 | |-----------------------------------------------------------------| |
| 122 | |
| 123 | PRM: N82S129F 1K Bipolar PROM |
| 124 | AM2966PC: Octal Dynamic Memory Drivers with Three-State Outputs |
| 125 | AM29648PC |
| 126 | CN1: Connector to CN2 of Z80 CPU card |
| 127 | |
| 128 | ---------------------------------------------------------------------------------- |
| 129 | |
| 130 | Parallel I/O board, all ICs shown: |
| 131 | |
| 132 | |-------------------------------------| | |
| 133 | | | |
| 134 | | 74 74 | |
| 135 | | LS LS Z80A PIO | |
| 136 | | 00 14 | |
| 137 | | N N | |
| 138 | | | |
| 139 | | | |
| 140 | | 74 74 74 74 D4 74 | |
| 141 | | LS LS LS LS I3 LS | |
| 142 | | 13 14 24 85 P2 64 | |
| 143 | | 2N N 1N N 1 0N | |
| 144 | | | |
| 145 | | CN1 | |
| 146 | | | |
| 147 | | 74LS00N | |
| 148 | |-------------------------------------| |
| 149 | |
| 150 | CN1: Bus connector |
| 151 | DIP: 4x DIP current setting: off-on-on-off, sets the address for the parallel port |
| 152 | |
| 153 | ---------------------------------------------------------------------------------- |
| 154 | |
| 155 | Beeper Circuit, all ICs shown: |
| 156 | |
| 157 | |---------------------------| | |
| 158 | | | |
| 159 | | BEEP 74LS132N | |
| 160 | | R1 | |
| 161 | | 74LS14N | |
| 162 | | | |
| 163 | | 74LS132N 74LS193N | |
| 164 | | | |
| 165 | | 74LS74AN 74LS165N | |
| 166 | | CN1 | |
| 167 | |---------------------------| |
| 168 | |
| 169 | CN1: Connector to mainboard |
| 170 | R1: looks like a potentiometer |
| 171 | BEEP: Beeper ... touted in the manual as "Hupe" ... i.e. "horn" :) |
| 172 | |
| 173 | ---------------------------------------------------------------------------------- |
| 174 | |
| 175 | Other boards and extensions mentioned in the manual: |
| 176 | - S100 bus adapter board |
| 177 | - IEEE 488 bus adapter board |
| 178 | - 64K memory board |
| 179 | - 8086 CPU board |
| 180 | - external harddisk |
| 181 | - TV adapter B/W (TV, Save/Load from Audio Cassette) with PROM/RAM/BASIC-Module with 16K or 32K RAM |
| 182 | - TV adapter color with connection to Video / Keyboard combination card |
| 183 | - Monitor adapters B/W and color |
| 184 | - Video / Keyboard interface 2 with grayscale, 8 colors, loadable character set, blinking |
| 185 | - Graphics Adapter with 16 colours, hi-res 512x256 pixels |
| 186 | - RTC |
| 187 | - Arithmetics chip |
| 188 | |
| 5 | 189 | ***************************************************************************/ |
| 6 | 190 | |
| 7 | 191 | |
| 8 | 192 | #include "emu.h" |
| 9 | 193 | #include "cpu/z80/z80.h" |
| 194 | #include "machine/wd_fdc.h" |
| 195 | #include "machine/bankdev.h" |
| 196 | #include "formats/itt3030_dsk.h" |
| 197 | #include "video/tms9927.h" //Display hardware |
| 198 | #include "sound/beep.h" |
| 199 | #include "cpu/mcs48/mcs48.h" //Keyboard MCU ... talks to the 8278 on the keyboard circuit |
| 10 | 200 | |
| 11 | | #define MAIN_CLOCK XTAL_8MHz |
| 12 | 201 | |
| 202 | #define MAIN_CLOCK XTAL_4.194MHz |
| 203 | |
| 13 | 204 | class itt3030_state : public driver_device |
| 14 | 205 | { |
| 15 | 206 | public: |
| 16 | 207 | itt3030_state(const machine_config &mconfig, device_type type, const char *tag) |
| 17 | | : driver_device(mconfig, type, tag), |
| 18 | | m_maincpu(*this, "maincpu") |
| 208 | : driver_device(mconfig, type, tag) |
| 209 | , m_maincpu(*this, "maincpu") |
| 210 | , m_crtc(*this, "crt5027") |
| 211 | , m_fdc (*this, "fdc") |
| 212 | , m_floppy0(*this, "fdc:0") |
| 213 | , m_floppy1(*this, "fdc:1") |
| 214 | , m_beep(*this, "beeper") |
| 19 | 215 | { } |
| 20 | 216 | |
| 21 | 217 | // devices |
| 22 | 218 | required_device<cpu_device> m_maincpu; |
| 219 | required_device<crt5027_device> m_crtc; |
| 220 | required_device<fd1791_t> m_fdc; |
| 221 | required_device<floppy_connector> m_floppy0; |
| 222 | required_device<floppy_connector> m_floppy1; |
| 223 | required_device<beep_device> m_beep; |
| 23 | 224 | |
| 24 | 225 | // screen updates |
| 25 | 226 | UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| r26514 | r26515 | |
| 32 | 233 | virtual void video_start(); |
| 33 | 234 | public: |
| 34 | 235 | |
| 35 | | DECLARE_READ8_MEMBER(unk1_r); |
| 236 | DECLARE_READ8_MEMBER(vsync_r); |
| 36 | 237 | DECLARE_READ8_MEMBER(unk2_r); |
| 238 | DECLARE_WRITE8_MEMBER( beep_w ); |
| 239 | DECLARE_FLOPPY_FORMATS(itt3030_floppy_formats); |
| 37 | 240 | private: |
| 38 | 241 | UINT8 m_unk; |
| 242 | floppy_image_device *m_floppy; |
| 243 | |
| 39 | 244 | }; |
| 40 | 245 | |
| 41 | 246 | void itt3030_state::video_start() |
| r26514 | r26515 | |
| 43 | 248 | m_unk = 0x80; |
| 44 | 249 | } |
| 45 | 250 | |
| 46 | | READ8_MEMBER(itt3030_state::unk1_r) |
| 251 | READ8_MEMBER(itt3030_state::vsync_r) |
| 47 | 252 | { |
| 48 | | UINT8 ret = m_unk; |
| 49 | | m_unk ^= 0x80; |
| 50 | | return ret; |
| 253 | return machine().primary_screen->vblank() ? 0x80 : 0; |
| 51 | 254 | } |
| 52 | 255 | |
| 53 | 256 | READ8_MEMBER(itt3030_state::unk2_r) |
| r26514 | r26515 | |
| 55 | 258 | return 0x40; |
| 56 | 259 | } |
| 57 | 260 | |
| 261 | WRITE8_MEMBER( itt3030_state::beep_w ) |
| 262 | { |
| 263 | m_beep->set_state(data&0x32); |
| 264 | } |
| 265 | |
| 58 | 266 | UINT32 itt3030_state::screen_update( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) |
| 59 | 267 | { |
| 60 | 268 | address_space &space = m_maincpu->space(AS_PROGRAM); |
| r26514 | r26515 | |
| 72 | 280 | } |
| 73 | 281 | |
| 74 | 282 | static ADDRESS_MAP_START( itt3030_map, AS_PROGRAM, 8, itt3030_state ) |
| 75 | | AM_RANGE(0x0000, 0x07ff) AM_ROM |
| 76 | | AM_RANGE(0x0800, 0xffff) AM_RAM |
| 283 | AM_RANGE(0x0000, 0x07ff) AM_ROM AM_REGION("maincpu", 0) |
| 284 | AM_RANGE(0x0800, 0x0fff) AM_ROM AM_REGION("maincpu", 0) |
| 285 | AM_RANGE(0x1000, 0xffff) AM_RAM |
| 77 | 286 | ADDRESS_MAP_END |
| 78 | 287 | |
| 79 | 288 | |
| 80 | 289 | static ADDRESS_MAP_START( itt3030_io, AS_IO, 8, itt3030_state ) |
| 81 | 290 | ADDRESS_MAP_GLOBAL_MASK(0xff) |
| 82 | | AM_RANGE(0x0031, 0x0031) AM_READ(unk2_r) |
| 83 | | AM_RANGE(0x0035, 0x0035) AM_READ(unk1_r) |
| 291 | AM_RANGE(0x20, 0x26) AM_DEVREADWRITE("crt5027", crt5027_device, read, write) |
| 292 | AM_RANGE(0x31, 0x31) AM_READ(unk2_r) |
| 293 | AM_RANGE(0x32, 0x32) AM_WRITE(beep_w) |
| 294 | AM_RANGE(0x35, 0x35) AM_READ(vsync_r) |
| 295 | AM_RANGE(0x50, 0x55) AM_DEVREADWRITE("fdc", fd1791_t, read, write) |
| 296 | |
| 84 | 297 | ADDRESS_MAP_END |
| 85 | 298 | |
| 86 | 299 | static INPUT_PORTS_START( itt3030 ) |
| r26514 | r26515 | |
| 111 | 324 | { |
| 112 | 325 | } |
| 113 | 326 | |
| 327 | FLOPPY_FORMATS_MEMBER( itt3030_state::itt3030_floppy_formats ) |
| 328 | FLOPPY_ITT3030_FORMAT |
| 329 | FLOPPY_FORMATS_END |
| 330 | |
| 331 | |
| 332 | static SLOT_INTERFACE_START( itt3030_floppies ) |
| 333 | SLOT_INTERFACE( "525dd", FLOPPY_525_DD ) |
| 334 | SLOT_INTERFACE_END |
| 335 | |
| 336 | |
| 337 | static struct tms9927_interface crtc_intf = |
| 338 | { |
| 339 | 16, // pixels per video memory address |
| 340 | NULL // "self-load data"? |
| 341 | }; |
| 342 | |
| 114 | 343 | static MACHINE_CONFIG_START( itt3030, itt3030_state ) |
| 115 | 344 | |
| 116 | 345 | /* basic machine hardware */ |
| r26514 | r26515 | |
| 121 | 350 | /* video hardware */ |
| 122 | 351 | MCFG_SCREEN_ADD("screen", RASTER) |
| 123 | 352 | MCFG_SCREEN_REFRESH_RATE(60) |
| 124 | | MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) |
| 353 | MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(250)) |
| 125 | 354 | MCFG_SCREEN_UPDATE_DRIVER(itt3030_state, screen_update) |
| 126 | 355 | MCFG_SCREEN_SIZE(80*8, 24*16) |
| 127 | 356 | MCFG_SCREEN_VISIBLE_AREA(0, 80*8-1, 0, 24*16-1) |
| 357 | |
| 358 | /* devices */ |
| 359 | MCFG_DEVICE_ADD("crt5027", CRT5027, XTAL_6MHz) |
| 360 | MCFG_DEVICE_CONFIG(crtc_intf) |
| 361 | MCFG_FD1791x_ADD("fdc", XTAL_20MHz / 20) |
| 362 | MCFG_WD_FDC_FORCE_READY |
| 363 | MCFG_FLOPPY_DRIVE_ADD("fdc:0", itt3030_floppies, "525dd", itt3030_state::itt3030_floppy_formats) |
| 364 | MCFG_FLOPPY_DRIVE_ADD("fdc:1", itt3030_floppies, "525dd", itt3030_state::itt3030_floppy_formats) |
| 128 | 365 | |
| 129 | 366 | MCFG_GFXDECODE(itt3030) |
| 130 | 367 | |
| r26514 | r26515 | |
| 132 | 369 | MCFG_PALETTE_INIT_OVERRIDE(driver_device, black_and_white) |
| 133 | 370 | |
| 134 | 371 | /* sound hardware */ |
| 135 | | MCFG_SPEAKER_STANDARD_MONO("mono") |
| 372 | MCFG_SPEAKER_STANDARD_MONO( "mono" ) |
| 373 | MCFG_SOUND_ADD( "beeper", BEEP, 0 ) |
| 374 | MCFG_SOUND_ROUTE( ALL_OUTPUTS, "mono", 1.00 ) |
| 375 | |
| 136 | 376 | MACHINE_CONFIG_END |
| 137 | 377 | |
| 138 | 378 | |