src/mess/drivers/jupiter.c
| r14041 | r14042 | |
| 5 | 5 | */ |
| 6 | 6 | |
| 7 | 7 | #define ADDRESS_MAP_MODERN |
| 8 | #define VIDEO_START_MEMBER(name) void name::video_start() |
| 9 | #define SCREEN_UPDATE_MEMBER(name) UINT32 name::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) |
| 8 | 10 | |
| 9 | 11 | #include "emu.h" |
| 10 | 12 | #include "cpu/m6800/m6800.h" |
| r14041 | r14042 | |
| 60 | 62 | //------------------------------------------------- |
| 61 | 63 | |
| 62 | 64 | static ADDRESS_MAP_START( jupiter3_mem, AS_PROGRAM, 8, jupiter3_state ) |
| 63 | | AM_RANGE(0x0000, 0x0fff) AM_ROM AM_REGION(Z80_TAG, 0) |
| 65 | AM_RANGE(0x0000, 0xbfff) AM_RAM AM_BASE(m_p_ram) |
| 66 | AM_RANGE(0xc000, 0xdfff) AM_RAM AM_BASE(m_p_videoram) |
| 67 | AM_RANGE(0xe000, 0xefff) AM_ROM AM_REGION(Z80_TAG, 0) |
| 68 | AM_RANGE(0xf000, 0xffff) AM_RAM |
| 64 | 69 | ADDRESS_MAP_END |
| 65 | 70 | |
| 66 | 71 | |
| r14041 | r14042 | |
| 69 | 74 | //------------------------------------------------- |
| 70 | 75 | |
| 71 | 76 | static ADDRESS_MAP_START( jupiter3_io, AS_IO, 8, jupiter3_state ) |
| 77 | ADDRESS_MAP_GLOBAL_MASK(0xff) |
| 78 | AM_RANGE(0xb0, 0xb0) AM_READ(status_r) |
| 79 | AM_RANGE(0xb2, 0xb2) AM_READ(key_r) |
| 72 | 80 | ADDRESS_MAP_END |
| 73 | 81 | |
| 74 | 82 | |
| r14041 | r14042 | |
| 81 | 89 | // INPUT_PORTS( jupiter ) |
| 82 | 90 | //------------------------------------------------- |
| 83 | 91 | |
| 84 | | INPUT_PORTS_START( jupiter ) |
| 92 | static INPUT_PORTS_START( jupiter ) |
| 85 | 93 | INPUT_PORTS_END |
| 86 | 94 | |
| 95 | READ8_MEMBER( jupiter3_state::key_r ) |
| 96 | { |
| 97 | UINT8 ret = m_term_data; |
| 98 | m_term_data = 0; |
| 99 | return ret; |
| 100 | } |
| 87 | 101 | |
| 102 | READ8_MEMBER( jupiter3_state::status_r ) |
| 103 | { |
| 104 | return (m_term_data) ? 0x80 : 0x00; |
| 105 | } |
| 88 | 106 | |
| 107 | WRITE8_MEMBER( jupiter3_state::kbd_put ) |
| 108 | { |
| 109 | m_term_data = data ^ 0x80; |
| 110 | } |
| 111 | |
| 112 | |
| 89 | 113 | //************************************************************************** |
| 114 | // VIDEO |
| 115 | //************************************************************************** |
| 116 | |
| 117 | VIDEO_START_MEMBER( jupiter3_state ) |
| 118 | { |
| 119 | m_p_chargen = machine().region("chargen")->base(); |
| 120 | } |
| 121 | |
| 122 | SCREEN_UPDATE_MEMBER( jupiter3_state ) |
| 123 | { |
| 124 | UINT8 y,ra,chr,gfx; |
| 125 | UINT16 sy=0,ma=0,x; |
| 126 | |
| 127 | for (y = 0; y < 32; y++) |
| 128 | { |
| 129 | for (ra = 0; ra < 10; ra++) |
| 130 | { |
| 131 | UINT16 *p = &bitmap.pix16(sy++); |
| 132 | |
| 133 | for (x = ma; x < ma + 64; x++) |
| 134 | { |
| 135 | gfx = 0; |
| 136 | if (ra < 9) |
| 137 | { |
| 138 | chr = m_p_videoram[x]; |
| 139 | gfx = m_p_chargen[(chr<<4) | ra ]; |
| 140 | } |
| 141 | |
| 142 | /* Display a scanline of a character */ |
| 143 | *p++ = BIT(gfx, 7); |
| 144 | *p++ = BIT(gfx, 6); |
| 145 | *p++ = BIT(gfx, 5); |
| 146 | *p++ = BIT(gfx, 4); |
| 147 | *p++ = BIT(gfx, 3); |
| 148 | *p++ = BIT(gfx, 2); |
| 149 | *p++ = BIT(gfx, 1); |
| 150 | *p++ = BIT(gfx, 0); |
| 151 | } |
| 152 | } |
| 153 | ma+=64; |
| 154 | } |
| 155 | return 0; |
| 156 | } |
| 157 | |
| 158 | |
| 159 | |
| 160 | |
| 161 | //************************************************************************** |
| 90 | 162 | // DEVICE CONFIGURATION |
| 91 | 163 | //************************************************************************** |
| 92 | 164 | |
| r14041 | r14042 | |
| 96 | 168 | |
| 97 | 169 | static const floppy_interface jupiter_floppy_interface = |
| 98 | 170 | { |
| 99 | | DEVCB_NULL, |
| 100 | 171 | DEVCB_NULL, |
| 101 | | DEVCB_NULL, |
| 102 | | DEVCB_NULL, |
| 103 | | DEVCB_NULL, |
| 104 | | FLOPPY_STANDARD_5_25_SSDD_40, |
| 105 | | LEGACY_FLOPPY_OPTIONS_NAME(default), |
| 106 | | NULL, |
| 172 | DEVCB_NULL, |
| 173 | DEVCB_NULL, |
| 174 | DEVCB_NULL, |
| 175 | DEVCB_NULL, |
| 176 | FLOPPY_STANDARD_5_25_SSDD_40, |
| 177 | LEGACY_FLOPPY_OPTIONS_NAME(default), |
| 178 | NULL, |
| 107 | 179 | NULL |
| 108 | 180 | }; |
| 109 | 181 | |
| r14041 | r14042 | |
| 120 | 192 | // GENERIC_TERMINAL_INTERFACE( terminal_intf ) |
| 121 | 193 | //------------------------------------------------- |
| 122 | 194 | |
| 123 | | static GENERIC_TERMINAL_INTERFACE( terminal_intf ) |
| 195 | static GENERIC_TERMINAL_INTERFACE( jupiter2_terminal_intf ) |
| 124 | 196 | { |
| 125 | 197 | DEVCB_NULL |
| 126 | 198 | }; |
| 127 | 199 | |
| 200 | static GENERIC_TERMINAL_INTERFACE( jupiter3_terminal_intf ) |
| 201 | { |
| 202 | DEVCB_DRIVER_MEMBER(jupiter3_state, kbd_put) |
| 203 | }; |
| 128 | 204 | |
| 129 | 205 | |
| 206 | |
| 130 | 207 | //************************************************************************** |
| 131 | 208 | // MACHINE INITIALIZATION |
| 132 | 209 | //************************************************************************** |
| r14041 | r14042 | |
| 144 | 221 | // MACHINE_START( jupiter3 ) |
| 145 | 222 | //------------------------------------------------- |
| 146 | 223 | |
| 147 | | void jupiter3_state::machine_start() |
| 224 | void jupiter3_state::machine_reset() |
| 148 | 225 | { |
| 226 | UINT8* ROM = machine().region(Z80_TAG)->base(); |
| 227 | memcpy(m_p_ram, ROM, 0x1000); |
| 228 | cpu_set_reg(m_maincpu, STATE_GENPC, 0xe000); |
| 149 | 229 | } |
| 150 | 230 | |
| 151 | 231 | |
| r14041 | r14042 | |
| 159 | 239 | //------------------------------------------------- |
| 160 | 240 | |
| 161 | 241 | static MACHINE_CONFIG_START( jupiter, jupiter2_state ) |
| 162 | | // basic machine hardware |
| 163 | | MCFG_CPU_ADD(MCM6571AP_TAG, M6800, 2000000) |
| 164 | | MCFG_CPU_PROGRAM_MAP(jupiter_m6800_mem) |
| 165 | | MCFG_CPU_IO_MAP(jupiter_m6800_io) |
| 242 | // basic machine hardware |
| 243 | MCFG_CPU_ADD(MCM6571AP_TAG, M6800, 2000000) |
| 244 | MCFG_CPU_PROGRAM_MAP(jupiter_m6800_mem) |
| 245 | MCFG_CPU_IO_MAP(jupiter_m6800_io) |
| 166 | 246 | |
| 167 | | // video hardware |
| 247 | // video hardware |
| 168 | 248 | MCFG_FRAGMENT_ADD( generic_terminal ) |
| 169 | 249 | |
| 170 | 250 | // devices |
| 171 | 251 | MCFG_FD1771_ADD(INS1771N1_TAG, fdc_intf) |
| 172 | | MCFG_GENERIC_TERMINAL_ADD(TERMINAL_TAG, terminal_intf) |
| 252 | MCFG_GENERIC_TERMINAL_ADD(TERMINAL_TAG, jupiter2_terminal_intf) |
| 173 | 253 | |
| 174 | 254 | // internal ram |
| 175 | 255 | MCFG_RAM_ADD(RAM_TAG) |
| r14041 | r14042 | |
| 182 | 262 | //------------------------------------------------- |
| 183 | 263 | |
| 184 | 264 | static MACHINE_CONFIG_START( jupiter3, jupiter3_state ) |
| 185 | | // basic machine hardware |
| 265 | // basic machine hardware |
| 186 | 266 | MCFG_CPU_ADD(Z80_TAG, Z80, 4000000) |
| 187 | | MCFG_CPU_PROGRAM_MAP(jupiter3_mem) |
| 188 | | MCFG_CPU_IO_MAP(jupiter3_io) |
| 267 | MCFG_CPU_PROGRAM_MAP(jupiter3_mem) |
| 268 | MCFG_CPU_IO_MAP(jupiter3_io) |
| 189 | 269 | |
| 190 | | // video hardware |
| 191 | | MCFG_FRAGMENT_ADD( generic_terminal ) |
| 270 | // video hardware |
| 271 | MCFG_SCREEN_ADD("screen", RASTER) |
| 272 | MCFG_SCREEN_REFRESH_RATE(60) |
| 273 | MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ |
| 274 | MCFG_SCREEN_UPDATE_DRIVER(jupiter3_state, screen_update) |
| 275 | MCFG_SCREEN_SIZE(512, 320) |
| 276 | MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0, 320-1) |
| 277 | MCFG_PALETTE_LENGTH(2) |
| 278 | MCFG_PALETTE_INIT(black_and_white) |
| 192 | 279 | |
| 193 | 280 | // devices |
| 194 | 281 | MCFG_FD1771_ADD(INS1771N1_TAG, fdc_intf) |
| 195 | | MCFG_GENERIC_TERMINAL_ADD(TERMINAL_TAG, terminal_intf) |
| 282 | MCFG_GENERIC_TERMINAL_ADD(TERMINAL_TAG, jupiter3_terminal_intf) |
| 196 | 283 | |
| 197 | 284 | // internal ram |
| 198 | 285 | MCFG_RAM_ADD(RAM_TAG) |
| r14041 | r14042 | |
| 229 | 316 | ROM_LOAD( "jove 2.0 78_034 4v2d000 2.6c", 0x0400, 0x0400, CRC(ee98dd32) SHA1(0513261c7c0d911225ea957ee67394871a36ada4) ) |
| 230 | 317 | ROM_LOAD( "jove 2.0 78_034 4v2d000 3.1d", 0x0800, 0x0400, CRC(51476b1d) SHA1(ab6f4eb244bcf9718aafdae67da086ec81f33fa6) ) |
| 231 | 318 | ROM_LOAD( "jove 2.0 78_034 4v2d000 4.6d", 0x0c00, 0x0400, CRC(16a9595d) SHA1(06150278650590497732e1f3f42356de56737921) ) |
| 319 | |
| 320 | // character generator is missing, using one from c10 for now |
| 321 | ROM_REGION( 0x2000, "chargen", 0 ) |
| 322 | ROM_LOAD( "c10_char.bin", 0x0000, 0x2000, BAD_DUMP CRC(cb530b6f) SHA1(95590bbb433db9c4317f535723b29516b9b9fcbf)) |
| 232 | 323 | ROM_END |
| 233 | 324 | |
| 234 | 325 | |
| r14041 | r14042 | |
| 284 | 375 | // SYSTEM DRIVERS |
| 285 | 376 | //************************************************************************** |
| 286 | 377 | |
| 287 | | // YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS |
| 288 | | COMP( 1976, jupiter2, 0, 0, jupiter, jupiter, jupiter, "Wave Mate", "Jupiter II", GAME_NOT_WORKING | GAME_NO_SOUND_HW ) |
| 289 | | COMP( 1976, jupiter3, 0, 0, jupiter3, jupiter, jupiter3, "Wave Mate", "Jupiter III", GAME_NOT_WORKING | GAME_NO_SOUND_HW ) |
| 378 | // YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS |
| 379 | COMP( 1976, jupiter2, 0, 0, jupiter, jupiter, jupiter, "Wave Mate", "Jupiter II", GAME_NOT_WORKING | GAME_NO_SOUND_HW ) |
| 380 | COMP( 1976, jupiter3, 0, 0, jupiter3, jupiter, jupiter3,"Wave Mate", "Jupiter III", GAME_NOT_WORKING | GAME_NO_SOUND_HW ) |