src/mess/drivers/prof180x.c
| r9700 | r9701 | |
| 6 | 6 | |
| 7 | 7 | ****************************************************************************/ |
| 8 | 8 | |
| 9 | /* |
| 10 | |
| 11 | TODO: |
| 12 | |
| 13 | - HD64180 CPU (DMA, MMU, SIO, etc) (Z80180 like) |
| 14 | - memory banking |
| 15 | - keyboard |
| 16 | - floppy |
| 17 | - floppy motor off timer |
| 18 | - floppy index callback |
| 19 | - RTC |
| 20 | |
| 21 | */ |
| 22 | |
| 23 | #define ADDRESS_MAP_MODERN |
| 24 | |
| 9 | 25 | #include "emu.h" |
| 10 | 26 | #include "cpu/z80/z80.h" |
| 27 | #include "devices/messram.h" |
| 28 | #include "machine/ctronics.h" |
| 29 | #include "machine/upd765.h" |
| 30 | #include "includes/prof180.h" |
| 11 | 31 | |
| 32 | void prof180x_state::bankswitch() |
| 33 | { |
| 34 | switch ((m_mm1 << 1) | m_mm0) |
| 35 | { |
| 36 | case 0: |
| 37 | // bank0_r = EPROM, bank0_w = RAM, bank1 = RAM |
| 38 | break; |
| 39 | |
| 40 | case 1: |
| 41 | // bank0_r = RAM, bank0_w = RAM, bank1 = RAM |
| 42 | break; |
| 43 | |
| 44 | case 2: |
| 45 | // bank0_r = UNMAP, bank0_w = UNMAP, bank1 = RAM |
| 46 | break; |
| 47 | |
| 48 | case 3: |
| 49 | // bank0_r = RAM, bank0_w = RAM, bank1 = UNMAP |
| 50 | break; |
| 51 | } |
| 52 | } |
| 12 | 53 | |
| 13 | | class prof180x_state : public driver_device |
| 54 | void prof180x_state::ls259_w(int flag, int value) |
| 14 | 55 | { |
| 15 | | public: |
| 16 | | prof180x_state(running_machine &machine, const driver_device_config_base &config) |
| 17 | | : driver_device(machine, config) { } |
| 56 | switch (flag) |
| 57 | { |
| 58 | case 0: // C0 |
| 59 | m_c0 = value; |
| 60 | break; |
| 18 | 61 | |
| 19 | | }; |
| 62 | case 1: // C1 |
| 63 | m_c1 = value; |
| 64 | break; |
| 20 | 65 | |
| 66 | case 2: // C2 |
| 67 | m_c2 = value; |
| 68 | break; |
| 21 | 69 | |
| 22 | | static ADDRESS_MAP_START(prof180x_mem, ADDRESS_SPACE_PROGRAM, 8) |
| 23 | | ADDRESS_MAP_UNMAP_HIGH |
| 24 | | AM_RANGE( 0x0000, 0x1fff ) AM_ROM |
| 25 | | AM_RANGE( 0x2000, 0xffff ) AM_RAM |
| 70 | case 3: // MINI |
| 71 | break; |
| 72 | |
| 73 | case 4: // MM0 |
| 74 | m_mm0 = value; |
| 75 | bankswitch(); |
| 76 | break; |
| 77 | |
| 78 | case 5: // RTC |
| 79 | break; |
| 80 | |
| 81 | case 6: // PEPS |
| 82 | break; |
| 83 | |
| 84 | case 7: // MM1 |
| 85 | m_mm1 = value; |
| 86 | bankswitch(); |
| 87 | break; |
| 88 | } |
| 89 | } |
| 90 | |
| 91 | WRITE8_MEMBER( prof180x_state::flr_w ) |
| 92 | { |
| 93 | /* |
| 94 | |
| 95 | bit description |
| 96 | |
| 97 | 0 VAL |
| 98 | 1 FLG0 |
| 99 | 2 FLG1 |
| 100 | 3 FLG2 |
| 101 | 4 |
| 102 | 5 |
| 103 | 6 |
| 104 | 7 |
| 105 | |
| 106 | */ |
| 107 | |
| 108 | int val = BIT(data, 0); |
| 109 | int flg = (data >> 1) & 0x07; |
| 110 | |
| 111 | ls259_w(flg, val); |
| 112 | } |
| 113 | |
| 114 | READ8_MEMBER( prof180x_state::status0_r ) |
| 115 | { |
| 116 | /* |
| 117 | |
| 118 | bit description |
| 119 | |
| 120 | 0 BUSY |
| 121 | 1 |
| 122 | 2 |
| 123 | 3 |
| 124 | 4 B-E |
| 125 | 5 IDX |
| 126 | 6 |
| 127 | 7 MOT |
| 128 | |
| 129 | */ |
| 130 | |
| 131 | return 0; |
| 132 | } |
| 133 | |
| 134 | READ8_MEMBER( prof180x_state::status1_r ) |
| 135 | { |
| 136 | /* |
| 137 | |
| 138 | bit description |
| 139 | |
| 140 | 0 FREE |
| 141 | 1 |
| 142 | 2 |
| 143 | 3 |
| 144 | 4 J18 |
| 145 | 5 J19 |
| 146 | 6 |
| 147 | 7 TDO |
| 148 | |
| 149 | */ |
| 150 | |
| 151 | return 0; |
| 152 | } |
| 153 | |
| 154 | READ8_MEMBER( prof180x_state::status_r ) |
| 155 | { |
| 156 | return BIT(offset, 8) ? status1_r(space, offset) : status0_r(space, offset); |
| 157 | } |
| 158 | |
| 159 | /* Address Maps */ |
| 160 | |
| 161 | static ADDRESS_MAP_START( prof180x_mem, ADDRESS_SPACE_PROGRAM, 8, prof180x_state ) |
| 162 | AM_RANGE(0x00000, 0x3ffff) AM_READ_BANK("bank0_r") AM_WRITE_BANK("bank0_w") |
| 163 | AM_RANGE(0x40000, 0x7ffff) AM_RAMBANK("bank1") |
| 26 | 164 | ADDRESS_MAP_END |
| 27 | 165 | |
| 28 | | static ADDRESS_MAP_START( prof180x_io , ADDRESS_SPACE_IO, 8) |
| 29 | | ADDRESS_MAP_UNMAP_HIGH |
| 166 | static ADDRESS_MAP_START( prof180x_io , ADDRESS_SPACE_IO, 8, prof180x_state ) |
| 167 | AM_RANGE(0x08, 0x08) AM_MIRROR(0xff00) AM_WRITE(flr_w) |
| 168 | AM_RANGE(0x09, 0x09) AM_MASK(0xff00) AM_READ(status_r) |
| 169 | AM_RANGE(0x0a, 0x0a) AM_MIRROR(0xff00) AM_DEVREADWRITE_LEGACY(FDC9268_TAG, upd765_dack_r, upd765_dack_w) |
| 170 | AM_RANGE(0x0b, 0x0b) AM_MIRROR(0xff00) AM_DEVWRITE_LEGACY(CENTRONICS_TAG, centronics_data_w) |
| 171 | AM_RANGE(0x0c, 0x0c) AM_MIRROR(0xff00) AM_DEVREAD_LEGACY(FDC9268_TAG, upd765_status_r) |
| 172 | AM_RANGE(0x0d, 0x0d) AM_MIRROR(0xff00) AM_DEVREADWRITE_LEGACY(FDC9268_TAG, upd765_data_r, upd765_data_w) |
| 30 | 173 | ADDRESS_MAP_END |
| 31 | 174 | |
| 32 | 175 | /* Input ports */ |
| 176 | |
| 33 | 177 | static INPUT_PORTS_START( prof180x ) |
| 34 | 178 | INPUT_PORTS_END |
| 35 | 179 | |
| 180 | /* Video */ |
| 36 | 181 | |
| 37 | | static MACHINE_RESET(prof180x) |
| 182 | static const struct upd765_interface fdc_intf = |
| 38 | 183 | { |
| 39 | | } |
| 184 | DEVCB_NULL, |
| 185 | DEVCB_NULL, // DEVCB_CPU_INPUT_LINE(HD64180_TAG, INPUT_LINE_DREQ1) |
| 186 | NULL, |
| 187 | UPD765_RDY_PIN_CONNECTED, |
| 188 | { FLOPPY_0, FLOPPY_1, NULL, NULL } |
| 189 | }; |
| 40 | 190 | |
| 41 | | static VIDEO_START( prof180x ) |
| 191 | static const floppy_config prof180x_floppy_config = |
| 42 | 192 | { |
| 193 | DEVCB_NULL, |
| 194 | DEVCB_NULL, |
| 195 | DEVCB_NULL, |
| 196 | DEVCB_NULL, |
| 197 | DEVCB_NULL, |
| 198 | FLOPPY_STANDARD_5_25_DSHD, |
| 199 | FLOPPY_OPTIONS_NAME(default), |
| 200 | NULL |
| 201 | }; |
| 202 | |
| 203 | /* |
| 204 | static RTC8583_INTERFCE( rtc_intf ) |
| 205 | { |
| 206 | DEVCB_CPU_INPUT_LINE(HD64180_TAG, INPUT_LINE_INT2) |
| 207 | }; |
| 208 | */ |
| 209 | |
| 210 | void prof180x_state::machine_start() |
| 211 | { |
| 212 | // register for state saving |
| 213 | state_save_register_global(machine, m_c0); |
| 214 | state_save_register_global(machine, m_c1); |
| 215 | state_save_register_global(machine, m_c2); |
| 216 | state_save_register_global(machine, m_mm0); |
| 217 | state_save_register_global(machine, m_mm1); |
| 43 | 218 | } |
| 44 | 219 | |
| 45 | | static VIDEO_UPDATE( prof180x ) |
| 220 | void prof180x_state::machine_reset() |
| 46 | 221 | { |
| 47 | | return 0; |
| 222 | for (int i = 0; i < 8; i++) |
| 223 | { |
| 224 | ls259_w(i, 0); |
| 225 | } |
| 48 | 226 | } |
| 49 | 227 | |
| 50 | 228 | static MACHINE_CONFIG_START( prof180x, prof180x_state ) |
| 51 | 229 | /* basic machine hardware */ |
| 52 | | MDRV_CPU_ADD("maincpu",Z80, XTAL_4MHz) // HD64180 |
| 230 | MDRV_CPU_ADD(HD64180_TAG, Z80, XTAL_9_216MHz) // HD64180 |
| 53 | 231 | MDRV_CPU_PROGRAM_MAP(prof180x_mem) |
| 54 | 232 | MDRV_CPU_IO_MAP(prof180x_io) |
| 55 | 233 | |
| 56 | | MDRV_MACHINE_RESET(prof180x) |
| 57 | | |
| 58 | 234 | /* video hardware */ |
| 59 | | MDRV_SCREEN_ADD("screen", RASTER) |
| 235 | MDRV_SCREEN_ADD(SCREEN_TAG, RASTER) |
| 60 | 236 | MDRV_SCREEN_REFRESH_RATE(50) |
| 61 | 237 | MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ |
| 62 | 238 | MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) |
| r9700 | r9701 | |
| 65 | 241 | MDRV_PALETTE_LENGTH(2) |
| 66 | 242 | MDRV_PALETTE_INIT(black_and_white) |
| 67 | 243 | |
| 68 | | MDRV_VIDEO_START(prof180x) |
| 69 | | MDRV_VIDEO_UPDATE(prof180x) |
| 244 | /* devices */ |
| 245 | MDRV_FLOPPY_4_DRIVES_ADD(prof180x_floppy_config) |
| 246 | MDRV_UPD765A_ADD(FDC9268_TAG, fdc_intf) |
| 247 | //MDRV_RTC8583_ADD(MK3835_TAG, rtc_intf) |
| 248 | MDRV_CENTRONICS_ADD(CENTRONICS_TAG, standard_centronics) |
| 249 | |
| 250 | /* internal ram */ |
| 251 | MDRV_RAM_ADD("messram") |
| 252 | MDRV_RAM_DEFAULT_SIZE("128K") |
| 253 | MDRV_RAM_EXTRA_OPTIONS("256K,512K") |
| 70 | 254 | MACHINE_CONFIG_END |
| 71 | 255 | |
| 72 | 256 | /* ROM definition */ |
| 257 | |
| 73 | 258 | ROM_START( prof180x ) |
| 74 | | ROM_REGION( 0x10000, "maincpu", 0 ) |
| 75 | | ROM_LOAD( "pmon1_3.bin", 0x0000, 0x4000, CRC(32986688) SHA1(a6229d7e66ef699722ca3d41179fe3f1b75185d4)) |
| 76 | | ROM_LOAD( "pmon1_4.bin", 0x0000, 0x4000, CRC(ed03f49f) SHA1(e016f9e0b89ab64c6203e2e46501d0b09f74ee9b)) |
| 77 | | ROM_LOAD( "pmon1_5.bin", 0x0000, 0x4000, CRC(f43d185c) SHA1(a7a219b3d48c74602b3116cfcd34e44d6e7bc423)) |
| 78 | | ROM_LOAD( "pmon.bin", 0x0000, 0x4000, CRC(4f3732d7) SHA1(7dc27262db4e0c8f109470253b9364a216909f2c)) |
| 79 | | ROM_LOAD( "eboot1.bin", 0x0000, 0x8000, CRC(7a164b3c) SHA1(69367804b5cbc0633e3d7bbbcc256c2c8c9e7aca)) |
| 80 | | ROM_LOAD( "eboot2.bin", 0x0000, 0x8000, CRC(0c2d4301) SHA1(f1a4f457e287b19e14d8ccdbc0383f183d8a3efe)) |
| 81 | | ROM_LOAD( "epmon1.bin", 0x0000, 0x10000, CRC(27aabfb4) SHA1(41adf038c474596dbf7d387a1a7f33ed86aa7869)) |
| 82 | | ROM_LOAD( "epmon2.bin", 0x0000, 0x10000, CRC(3b8a7b59) SHA1(33741f0725e3eaa21c6881c712579b3c1fd30607)) |
| 83 | | ROM_LOAD( "epmon3.bin", 0x0000, 0x10000, CRC(51313af1) SHA1(60c293171a1c7cb9a5ff6d681e61894f44fddbd1)) |
| 259 | ROM_REGION( 0x10000, HD64180_TAG, 0 ) |
| 260 | ROM_SYSTEM_BIOS( 0, "pmon13", "pmon v1.3" ) |
| 261 | ROMX_LOAD( "pmon1_3.z16", 0x00000, 0x04000, CRC(32986688) SHA1(a6229d7e66ef699722ca3d41179fe3f1b75185d4), ROM_BIOS(1) ) |
| 262 | ROM_SYSTEM_BIOS( 1, "pmon14", "pmon v1.4" ) |
| 263 | ROMX_LOAD( "pmon1_4.z16", 0x00000, 0x04000, CRC(ed03f49f) SHA1(e016f9e0b89ab64c6203e2e46501d0b09f74ee9b), ROM_BIOS(2) ) |
| 264 | ROM_SYSTEM_BIOS( 2, "pmon15", "pmon v1.5" ) |
| 265 | ROMX_LOAD( "pmon1_5.z16", 0x00000, 0x04000, CRC(f43d185c) SHA1(a7a219b3d48c74602b3116cfcd34e44d6e7bc423), ROM_BIOS(3) ) |
| 266 | ROM_SYSTEM_BIOS( 3, "pmon", "pmon" ) |
| 267 | ROMX_LOAD( "pmon.z16", 0x00000, 0x04000, CRC(4f3732d7) SHA1(7dc27262db4e0c8f109470253b9364a216909f2c), ROM_BIOS(4) ) |
| 268 | ROM_SYSTEM_BIOS( 4, "eboot1", "eboot1" ) |
| 269 | ROMX_LOAD( "eboot1.z16", 0x00000, 0x08000, CRC(7a164b3c) SHA1(69367804b5cbc0633e3d7bbbcc256c2c8c9e7aca), ROM_BIOS(5) ) |
| 270 | ROM_SYSTEM_BIOS( 5, "eboot2", "eboot2" ) |
| 271 | ROMX_LOAD( "eboot2.z16", 0x00000, 0x08000, CRC(0c2d4301) SHA1(f1a4f457e287b19e14d8ccdbc0383f183d8a3efe), ROM_BIOS(6) ) |
| 272 | ROM_SYSTEM_BIOS( 6, "epmon1", "epmon1" ) |
| 273 | ROMX_LOAD( "epmon1.z16", 0x00000, 0x10000, CRC(27aabfb4) SHA1(41adf038c474596dbf7d387a1a7f33ed86aa7869), ROM_BIOS(7) ) |
| 274 | ROM_SYSTEM_BIOS( 7, "epmon2", "epmon2" ) |
| 275 | ROMX_LOAD( "epmon2.z16", 0x00000, 0x10000, CRC(3b8a7b59) SHA1(33741f0725e3eaa21c6881c712579b3c1fd30607), ROM_BIOS(8) ) |
| 276 | ROM_SYSTEM_BIOS( 8, "epmon3", "epmon3" ) |
| 277 | ROMX_LOAD( "epmon3.z16", 0x00000, 0x10000, CRC(51313af1) SHA1(60c293171a1c7cb9a5ff6d681e61894f44fddbd1), ROM_BIOS(9) ) |
| 278 | |
| 279 | ROM_REGION( 0x157, "plds", 0 ) |
| 280 | ROM_LOAD( "pal14l8.z10", 0x000, 0x157, NO_DUMP ) |
| 84 | 281 | ROM_END |
| 85 | 282 | |
| 283 | ROM_START( prof181x ) |
| 284 | ROM_REGION( 0x10000, HD64180_TAG, 0 ) |
| 285 | ROM_SYSTEM_BIOS( 0, "pmon13", "pmon v1.3" ) |
| 286 | ROMX_LOAD( "pmon1_3.u13", 0x00000, 0x04000, CRC(32986688) SHA1(a6229d7e66ef699722ca3d41179fe3f1b75185d4), ROM_BIOS(1) ) |
| 287 | ROM_SYSTEM_BIOS( 1, "pmon14", "pmon v1.4" ) |
| 288 | ROMX_LOAD( "pmon1_4.u13", 0x00000, 0x04000, CRC(ed03f49f) SHA1(e016f9e0b89ab64c6203e2e46501d0b09f74ee9b), ROM_BIOS(2) ) |
| 289 | ROM_SYSTEM_BIOS( 2, "pmon15", "pmon v1.5" ) |
| 290 | ROMX_LOAD( "pmon1_5.u13", 0x00000, 0x04000, CRC(f43d185c) SHA1(a7a219b3d48c74602b3116cfcd34e44d6e7bc423), ROM_BIOS(3) ) |
| 291 | ROM_SYSTEM_BIOS( 3, "pmon", "pmon" ) |
| 292 | ROMX_LOAD( "pmon.u13", 0x00000, 0x04000, CRC(4f3732d7) SHA1(7dc27262db4e0c8f109470253b9364a216909f2c), ROM_BIOS(4) ) |
| 293 | ROM_SYSTEM_BIOS( 4, "eboot1", "eboot1" ) |
| 294 | ROMX_LOAD( "eboot1.u13", 0x00000, 0x08000, CRC(7a164b3c) SHA1(69367804b5cbc0633e3d7bbbcc256c2c8c9e7aca), ROM_BIOS(5) ) |
| 295 | ROM_SYSTEM_BIOS( 5, "eboot2", "eboot2" ) |
| 296 | ROMX_LOAD( "eboot2.u13", 0x00000, 0x08000, CRC(0c2d4301) SHA1(f1a4f457e287b19e14d8ccdbc0383f183d8a3efe), ROM_BIOS(6) ) |
| 297 | ROM_SYSTEM_BIOS( 6, "epmon1", "epmon1" ) |
| 298 | ROMX_LOAD( "epmon1.u13", 0x00000, 0x10000, CRC(27aabfb4) SHA1(41adf038c474596dbf7d387a1a7f33ed86aa7869), ROM_BIOS(7) ) |
| 299 | ROM_SYSTEM_BIOS( 7, "epmon2", "epmon2" ) |
| 300 | ROMX_LOAD( "epmon2.u13", 0x00000, 0x10000, CRC(3b8a7b59) SHA1(33741f0725e3eaa21c6881c712579b3c1fd30607), ROM_BIOS(8) ) |
| 301 | ROM_SYSTEM_BIOS( 8, "epmon3", "epmon3" ) |
| 302 | ROMX_LOAD( "epmon3.u13", 0x00000, 0x10000, CRC(51313af1) SHA1(60c293171a1c7cb9a5ff6d681e61894f44fddbd1), ROM_BIOS(9) ) |
| 303 | |
| 304 | ROM_REGION( 0x157, "plds", 0 ) // converted from JED files |
| 305 | ROM_LOAD( "pal20v8.u14", 0x000, 0x157, CRC(46da52b0) SHA1(c11362223c0d5c57c6ef970e66d674b89d8e7784) ) |
| 306 | ROM_LOAD( "pal20v8.u15", 0x000, 0x157, CRC(19fef936) SHA1(579ad23ee3c0b1c64c584383f9c8085c6ce3d094) ) |
| 307 | ROM_LOAD( "pal20v8.u19", 0x000, 0x157, CRC(69348c3b) SHA1(6eb8432660eb9b639a95b1973a54dab8b99f10ef) ) |
| 308 | ROM_LOAD( "pal20v8.u21", 0x000, 0x157, CRC(6df4e281) SHA1(602fa4637cd9356acc31b2adfb3a084fd5a0bfcb) ) |
| 309 | ROM_END |
| 310 | |
| 86 | 311 | /* Driver */ |
| 87 | 312 | |
| 88 | 313 | /* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */ |
| 89 | | COMP( 1986, prof180x, 0, 0, prof180x, prof180x, 0, "Conitec Datensysteme", "PROF-180X", GAME_NOT_WORKING | GAME_NO_SOUND) |
| 314 | COMP( 1986, prof180x, 0, 0, prof180x, prof180x, 0, "Conitec Datensysteme", "PROF-180X", GAME_NOT_WORKING | GAME_NO_SOUND ) |
| 315 | COMP( 1992, prof181x, prof180x,0, prof180x, prof180x, 0, "Conitec Datensysteme", "PROF-181X", GAME_NOT_WORKING | GAME_NO_SOUND ) |