trunk/src/mess/drivers/hp9k.c
| r18587 | r18588 | |
| 1 | |
| 1 | 2 | /*************************************************************************** |
| 2 | 3 | |
| 3 | | Skeleton driver for HP9816 (HP Series 200 series, Technical Desktops) |
| 4 | HP 9816 |
| 5 | 1982 |
| 6 | MESS driver by friol (dantonag (at) gmail.com) |
| 7 | System reference mainly from O.De Smet |
| 8 | Driver started on 10/01/2012 |
| 4 | 9 | |
| 5 | | see for docs: http://www.hpmuseum.net/collection_document.php |
| 10 | === |
| 6 | 11 | |
| 7 | | TODO: everything! |
| 12 | Memory map: |
| 8 | 13 | |
| 14 | 000000-00ffff - system rom |
| 15 | 428000-428fff - keyboard |
| 16 | 510000-51ffff - videoram |
| 17 | 530000-53ffff - graphic memory |
| 18 | 5f0000-5f3fff - system PROM |
| 19 | xxxxxx-ffffff - system RAM |
| 20 | |
| 21 | === |
| 22 | |
| 23 | - 0x408: startup code, 68000 registers test |
| 24 | - 0x1002: bootrom test |
| 25 | - 0x1d18: PROM test |
| 26 | - 0x103C: prints "bootrom failed" |
| 27 | - 0x1150: other boot test |
| 28 | - 0x1164: keyboard test |
| 29 | - 0x1202: post-kbd test |
| 30 | - 0x12c6: "loading memory" test |
| 31 | |
| 32 | === |
| 33 | |
| 34 | TODO: boot tests fail |
| 35 | |
| 9 | 36 | ****************************************************************************/ |
| 10 | 37 | |
| 11 | 38 | #include "emu.h" |
| 12 | 39 | #include "cpu/m68000/m68000.h" |
| 13 | | //#include "video/mc6845.h" |
| 40 | #include "video/mc6845.h" |
| 41 | #include "machine/terminal.h" |
| 14 | 42 | //#include "machine/ins8250.h" |
| 15 | 43 | |
| 44 | #define HP9816_CHDIMX 8 |
| 45 | #define HP9816_CHDIMY 16 |
| 46 | #define HP9816_ROWX 80 |
| 47 | #define HP9816_ROWY 25 |
| 16 | 48 | |
| 49 | // |
| 50 | |
| 51 | static UINT8 prom16a[256] = { |
| 52 | 0x00,0x00, // checksum |
| 53 | 0x00, // 256 bytes idprom |
| 54 | '2', '0', '1', '0', 'A', '0', '0', '0', '0', '0', '0', // serial in ascii DDDDCSSSSSS date code, country, serial number |
| 55 | '9', '8', '1', '6', 'A', ' ', ' ', // product number |
| 56 | 0xff, // 8 bits processor board config |
| 57 | 0x01, // keyboard 98203B |
| 58 | 0x02, // CRT alpha see crtid for monitor |
| 59 | 0x03, // HP-IB |
| 60 | 0x04, // Graphics |
| 61 | 0xff, // end |
| 62 | 0xff, |
| 63 | 0xff, |
| 64 | 0xff, |
| 65 | 0xff, |
| 66 | 0xff, |
| 67 | 0xff, |
| 68 | 0xff, |
| 69 | 0xff, |
| 70 | 0xff, |
| 71 | 0xff, |
| 72 | 0xff, |
| 73 | 0xff,0xfe,0x00,0x00, // bottom minimun address for ram size |
| 74 | 0xff,0xff, // 16 required IO cards here not used |
| 75 | 0xff,0xff, |
| 76 | 0xff,0xff, |
| 77 | 0xff,0xff, |
| 78 | 0xff,0xff, |
| 79 | 0xff,0xff, |
| 80 | 0xff,0xff, |
| 81 | 0xff,0xff, |
| 82 | 0xff,0xff, |
| 83 | 0xff,0xff, |
| 84 | 0xff,0xff, |
| 85 | 0xff,0xff, |
| 86 | 0xff,0xff, |
| 87 | 0xff,0xff, |
| 88 | 0xff,0xff, |
| 89 | 0xff,0xff, |
| 90 | 0xff,0xff,0xff,0xff, // boot msus to try before Boot list scan |
| 91 | 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, // Boot file name |
| 92 | 0x00,0x00,0x00,0x00, // delay in millisec before boot scan |
| 93 | 0x00, // owner byte, HP format |
| 94 | 0x00, // id prom revision byte : 0x00 |
| 95 | 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, // rest reserved at 0xFF |
| 96 | 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, |
| 97 | 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, |
| 98 | 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, |
| 99 | 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, |
| 100 | 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, |
| 101 | 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, |
| 102 | 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, |
| 103 | 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, |
| 104 | 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff |
| 105 | }; |
| 106 | |
| 107 | // |
| 108 | |
| 17 | 109 | class hp9k_state : public driver_device |
| 18 | 110 | { |
| 111 | private: |
| 112 | |
| 113 | int crtc_curreg; |
| 114 | int crtc_addrStartHi; |
| 115 | int crtc_addrStartLow; |
| 116 | |
| 117 | void calc_prom_crc(UINT8* prom); |
| 118 | void putChar(UINT8 thec,int x,int y,bitmap_ind16 &bitmap); |
| 119 | |
| 19 | 120 | public: |
| 20 | 121 | hp9k_state(const machine_config &mconfig, device_type type, const char *tag) |
| 21 | 122 | : driver_device(mconfig, type, tag), |
| 22 | | m_maincpu(*this, "maincpu") |
| 23 | | , |
| 24 | | m_p_videoram(*this, "p_videoram"){ } |
| 123 | m_maincpu(*this, "maincpu"), |
| 124 | //m_terminal(*this, TERMINAL_TAG), |
| 125 | m_6845(*this, "mc6845") |
| 126 | { |
| 127 | kbdBit=0; |
| 128 | crtc_curreg=0; |
| 129 | crtc_addrStartHi=0; |
| 130 | crtc_addrStartLow=0; |
| 131 | calc_prom_crc(prom16a); |
| 132 | } |
| 25 | 133 | |
| 134 | UINT8 kbdBit; |
| 135 | |
| 26 | 136 | required_device<cpu_device> m_maincpu; |
| 27 | | required_shared_ptr<UINT16> m_p_videoram; |
| 28 | | virtual void machine_reset(); |
| 29 | | virtual void video_start(); |
| 30 | | UINT32 screen_update_hp9k(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 137 | //required_device<device_t> m_terminal; |
| 138 | required_device<mc6845_device> m_6845; |
| 139 | |
| 140 | UINT8 m_videoram[0x4000]; |
| 141 | UINT8 m_screen[0x800]; |
| 142 | |
| 143 | DECLARE_DRIVER_INIT(hp9k); |
| 144 | |
| 145 | DECLARE_READ16_MEMBER(buserror_r); |
| 146 | DECLARE_WRITE16_MEMBER(buserror_w); |
| 147 | |
| 148 | DECLARE_READ16_MEMBER(hp9k_videoram_r); |
| 149 | DECLARE_WRITE16_MEMBER(hp9k_videoram_w); |
| 150 | |
| 151 | DECLARE_READ16_MEMBER(hp9k_prom_r); |
| 152 | DECLARE_WRITE16_MEMBER(hp9k_prom_w); |
| 153 | |
| 154 | DECLARE_READ16_MEMBER(keyboard_r); |
| 155 | DECLARE_WRITE16_MEMBER(keyboard_w); |
| 156 | |
| 157 | DECLARE_READ16_MEMBER(leds_r); |
| 158 | DECLARE_WRITE16_MEMBER(leds_w); |
| 159 | |
| 160 | DECLARE_WRITE8_MEMBER(kbd_put); |
| 161 | |
| 162 | UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 31 | 163 | }; |
| 32 | 164 | |
| 165 | // |
| 33 | 166 | |
| 167 | void hp9k_state::calc_prom_crc(UINT8* prom) |
| 168 | { |
| 169 | int chksum; |
| 170 | int i; |
| 171 | |
| 172 | chksum = 0; |
| 173 | for (i=0; i < 256; i+=2) |
| 174 | { |
| 175 | chksum += ((prom[i] << 8) | prom[i+1]); |
| 176 | if (chksum&0x10000) chksum++; |
| 177 | chksum&=0xffff; |
| 178 | } |
| 179 | |
| 180 | chksum=(chksum+1)&0xffff; |
| 181 | |
| 182 | if (chksum!=0) |
| 183 | { |
| 184 | chksum=(0x10000-chksum); |
| 185 | prom[0]=(UINT8)(chksum>>8); |
| 186 | prom[1]=(UINT8)(chksum&0xff); |
| 187 | } |
| 188 | } |
| 189 | |
| 190 | READ16_MEMBER( hp9k_state::keyboard_r ) |
| 191 | { |
| 192 | //printf("keyboard read at [%x] mask [%x]\n",offset,mem_mask); |
| 193 | return 0x31; |
| 194 | } |
| 195 | |
| 196 | WRITE16_MEMBER( hp9k_state::keyboard_w ) |
| 197 | { |
| 198 | //printf("keyboard write of [%x] at [%x]\n",data,offset); |
| 199 | } |
| 200 | |
| 201 | READ16_MEMBER( hp9k_state::leds_r ) |
| 202 | { |
| 203 | //printf("warning: leds read at [%x] mm [%x]\n",offset,mem_mask); |
| 204 | return 0; |
| 205 | } |
| 206 | |
| 207 | WRITE16_MEMBER( hp9k_state::leds_w ) |
| 208 | { |
| 209 | //printf("warning: leds write of [%x] at [%x] mm [%x]\n",data,offset,mem_mask); |
| 210 | } |
| 211 | |
| 212 | READ16_MEMBER( hp9k_state::hp9k_prom_r ) |
| 213 | { |
| 214 | //if (mem_mask!=0xff) printf("read of PROM at [%x] mem_mask [%x]\n",offset,mem_mask); |
| 215 | int k=prom16a[offset&0xff]; |
| 216 | if (mem_mask==0xff00) return (k<<8); |
| 217 | else return k; |
| 218 | //return 0; |
| 219 | } |
| 220 | |
| 221 | WRITE16_MEMBER( hp9k_state::hp9k_prom_w ) |
| 222 | { |
| 223 | //printf("Error: write to prom\n"); |
| 224 | } |
| 225 | |
| 226 | READ16_MEMBER( hp9k_state::hp9k_videoram_r ) |
| 227 | { |
| 228 | offset&=0x3fff; |
| 229 | |
| 230 | //printf("videoram read at [%x] mem_mask [%x]\n",offset,mem_mask); |
| 231 | |
| 232 | if (offset==0x0001) |
| 233 | { |
| 234 | //printf("m6845 read at [%x] mem_mask [%x]\n",offset,mem_mask); |
| 235 | return m_6845->register_r(space,0); |
| 236 | } |
| 237 | else |
| 238 | { |
| 239 | if (mem_mask==0xff00) |
| 240 | { |
| 241 | return m_videoram[offset]<<8; |
| 242 | } |
| 243 | else |
| 244 | { |
| 245 | return m_videoram[offset]; |
| 246 | } |
| 247 | } |
| 248 | } |
| 249 | |
| 250 | WRITE16_MEMBER( hp9k_state::hp9k_videoram_w ) |
| 251 | { |
| 252 | offset&=0x3fff; |
| 253 | |
| 254 | if (offset==0x0000) |
| 255 | { |
| 256 | //printf("6845 address write [%x] at [%x] mask [%x]\n",data,offset,mem_mask); |
| 257 | data&=0x1f; |
| 258 | m_6845->address_w( space, 0, data ); |
| 259 | crtc_curreg=data; |
| 260 | } |
| 261 | else if (offset==0x0001) |
| 262 | { |
| 263 | //printf("6845 register write [%x] at [%x] mask [%x]\n",data,offset,mem_mask); |
| 264 | m_6845->register_w( space, 0, data ); |
| 265 | if (crtc_curreg==0x0c) crtc_addrStartHi=data; |
| 266 | if (crtc_curreg==0x0d) crtc_addrStartLow=data; |
| 267 | } |
| 268 | else |
| 269 | { |
| 270 | //printf("videoram write [%x] at [%x]\n",data,offset); |
| 271 | |
| 272 | if (mem_mask==0xff00) |
| 273 | { |
| 274 | m_screen[offset&0x7ff]=data>>8; |
| 275 | m_videoram[offset&0x3fff]=data>>8; |
| 276 | |
| 277 | //UINT8 *rom = machine().region("bootrom")->base(); |
| 278 | //rom[0x90B]=0x00; |
| 279 | } |
| 280 | else |
| 281 | { |
| 282 | m_screen[offset&0x7ff]=data; |
| 283 | m_videoram[offset&0x3fff]=data; |
| 284 | } |
| 285 | } |
| 286 | } |
| 287 | |
| 288 | READ16_MEMBER(hp9k_state::buserror_r) |
| 289 | { |
| 290 | m_maincpu->set_input_line(M68K_LINE_BUSERROR, ASSERT_LINE); |
| 291 | m_maincpu->set_input_line(M68K_LINE_BUSERROR, CLEAR_LINE); |
| 292 | return 0; |
| 293 | } |
| 294 | |
| 295 | WRITE16_MEMBER(hp9k_state::buserror_w) |
| 296 | { |
| 297 | m_maincpu->set_input_line(M68K_LINE_BUSERROR, ASSERT_LINE); |
| 298 | m_maincpu->set_input_line(M68K_LINE_BUSERROR, CLEAR_LINE); |
| 299 | } |
| 300 | |
| 34 | 301 | static ADDRESS_MAP_START(hp9k_mem, AS_PROGRAM, 16, hp9k_state) |
| 35 | 302 | ADDRESS_MAP_UNMAP_HIGH |
| 36 | | AM_RANGE(0x000000, 0x00ffff) AM_ROM |
| 37 | | AM_RANGE(0x010000, 0x3fffff) AM_RAM // guessing |
| 38 | | AM_RANGE(0x512000, 0x512fff) AM_RAM AM_SHARE("p_videoram") // videoram |
| 39 | | AM_RANGE(0xffc000, 0xffffff) AM_RAM // system ram |
| 303 | AM_RANGE(0x000000, 0x000909) AM_ROM AM_REGION("bootrom",0) |
| 304 | AM_RANGE(0x00090a, 0x00090d) AM_READWRITE(leds_r,leds_w) |
| 305 | AM_RANGE(0x00090e, 0x00ffff) AM_ROM AM_REGION("bootrom",0x90e) |
| 306 | AM_RANGE(0x010000, 0x427fff) AM_READWRITE(buserror_r,buserror_w) |
| 307 | AM_RANGE(0x428000, 0x428fff) AM_READWRITE(keyboard_r,keyboard_w) |
| 308 | AM_RANGE(0x429000, 0x50ffff) AM_READWRITE(buserror_r,buserror_w) |
| 309 | AM_RANGE(0x510000, 0x51ffff) AM_READWRITE(hp9k_videoram_r,hp9k_videoram_w) |
| 310 | AM_RANGE(0x520000, 0x52ffff) AM_READWRITE(buserror_r,buserror_w) |
| 311 | AM_RANGE(0x530000, 0x53ffff) AM_RAM // graphic memory |
| 312 | AM_RANGE(0x540000, 0x5effff) AM_READWRITE(buserror_r,buserror_w) |
| 313 | AM_RANGE(0x5f0000, 0x5f3fff) AM_READWRITE(hp9k_prom_r,hp9k_prom_w) |
| 314 | //AM_RANGE(0x5f0000, 0x5f3fff) AM_READWRITE(buserror_r,buserror_w) |
| 315 | AM_RANGE(0x5f4000, 0xfbffff) AM_READWRITE(buserror_r,buserror_w) |
| 316 | AM_RANGE(0xFC0000, 0xffffff) AM_RAM // system ram |
| 40 | 317 | ADDRESS_MAP_END |
| 41 | 318 | |
| 42 | 319 | |
| r18587 | r18588 | |
| 45 | 322 | INPUT_PORTS_END |
| 46 | 323 | |
| 47 | 324 | |
| 48 | | void hp9k_state::machine_reset() |
| 325 | DRIVER_INIT_MEMBER(hp9k_state,hp9k) |
| 49 | 326 | { |
| 50 | 327 | } |
| 51 | 328 | |
| 52 | | /* F4 Character Displayer */ |
| 53 | 329 | static const gfx_layout hp9k_charlayout = |
| 54 | 330 | { |
| 55 | | 8, 16, /* 8 x 16 characters */ |
| 331 | HP9816_CHDIMX, HP9816_CHDIMY, |
| 56 | 332 | 256, /* 256 characters */ |
| 57 | 333 | 1, /* 1 bits per pixel */ |
| 58 | 334 | { 0 }, /* no bitplanes */ |
| r18587 | r18588 | |
| 64 | 340 | }; |
| 65 | 341 | |
| 66 | 342 | static GFXDECODE_START( hp9k ) |
| 67 | | GFXDECODE_ENTRY( "maincpu", 0x2000, hp9k_charlayout, 0, 1 ) |
| 343 | GFXDECODE_ENTRY( "bootrom", 0x2000, hp9k_charlayout, 0, 1 ) |
| 68 | 344 | GFXDECODE_END |
| 69 | 345 | |
| 70 | | |
| 71 | | void hp9k_state::video_start() |
| 346 | void hp9k_state::putChar(UINT8 thec,int x,int y,bitmap_ind16 &bitmap) |
| 72 | 347 | { |
| 348 | const UINT8* pchar=machine().gfx[0]->get_data(thec); |
| 349 | |
| 350 | for (int py=0;py<HP9816_CHDIMY;py++) |
| 351 | { |
| 352 | for (int px=0;px<HP9816_CHDIMX;px++) |
| 353 | { |
| 354 | UINT16 *dest=&bitmap.pix16((y*(HP9816_CHDIMY))+py,(x*(HP9816_CHDIMX))+px); |
| 355 | *dest=pchar[px+(py*8)]; |
| 356 | } |
| 357 | } |
| 73 | 358 | } |
| 74 | 359 | |
| 75 | | UINT32 hp9k_state::screen_update_hp9k(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) |
| 360 | UINT32 hp9k_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) |
| 76 | 361 | { |
| 362 | //UINT8* pvram=&m_screen[1]; |
| 363 | |
| 364 | int startAddr=((crtc_addrStartLow&0xff)|((crtc_addrStartHi<<8)))&0x3fff; |
| 365 | int chStart=startAddr&0x1fff; |
| 366 | |
| 367 | for (int r=0;r<HP9816_ROWY;r++) |
| 368 | { |
| 369 | for (int c=0;c<HP9816_ROWX;c++) |
| 370 | { |
| 371 | //UINT8 thec=pvram[((c+(r*80))+160+47)&0x7ff]; |
| 372 | //UINT8 thec=m_videoram[((c+(r*80))+startAddr)]; |
| 373 | UINT8 thec=m_screen[chStart&0x7ff]; |
| 374 | putChar(thec,c,r,bitmap); |
| 375 | chStart++; |
| 376 | } |
| 377 | } |
| 378 | |
| 379 | //putChar(0x44,0,0,pscr); |
| 77 | 380 | return 0; |
| 78 | 381 | } |
| 79 | 382 | |
| 383 | WRITE8_MEMBER( hp9k_state::kbd_put ) |
| 384 | { |
| 385 | kbdBit=data; |
| 386 | } |
| 387 | |
| 388 | static const mc6845_interface hp9k_mc6845_intf = { |
| 389 | "screen", /* name of screen */ |
| 390 | 8, /* number of dots per character */ |
| 391 | NULL, |
| 392 | NULL, /* handler to display a scanline */ |
| 393 | NULL, |
| 394 | DEVCB_NULL, |
| 395 | DEVCB_NULL, |
| 396 | DEVCB_NULL, |
| 397 | DEVCB_NULL, |
| 398 | NULL |
| 399 | }; |
| 400 | |
| 80 | 401 | static MACHINE_CONFIG_START( hp9k, hp9k_state ) |
| 81 | 402 | /* basic machine hardware */ |
| 82 | 403 | MCFG_CPU_ADD("maincpu",M68000, XTAL_8MHz) |
| 83 | 404 | MCFG_CPU_PROGRAM_MAP(hp9k_mem) |
| 84 | 405 | |
| 406 | /* video hardware */ |
| 85 | 407 | |
| 86 | | /* video hardware */ |
| 87 | 408 | MCFG_SCREEN_ADD("screen", RASTER) |
| 88 | 409 | MCFG_SCREEN_REFRESH_RATE(50) |
| 89 | | MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ |
| 90 | | MCFG_SCREEN_SIZE(640, 480) |
| 91 | | MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 480-1) |
| 92 | | MCFG_SCREEN_UPDATE_DRIVER(hp9k_state, screen_update_hp9k) |
| 410 | MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) |
| 411 | MCFG_SCREEN_SIZE(HP9816_ROWX*HP9816_CHDIMX, HP9816_ROWY*HP9816_CHDIMY) |
| 412 | MCFG_SCREEN_VISIBLE_AREA(0, (HP9816_ROWX*HP9816_CHDIMX)-1, 0, (HP9816_ROWY*HP9816_CHDIMY)-1) |
| 413 | |
| 414 | MCFG_SCREEN_UPDATE_DRIVER(hp9k_state, screen_update) |
| 415 | |
| 93 | 416 | MCFG_GFXDECODE(hp9k) |
| 94 | 417 | MCFG_PALETTE_LENGTH(2) |
| 95 | 418 | MCFG_PALETTE_INIT(black_and_white) |
| 419 | |
| 420 | MCFG_MC6845_ADD( "mc6845", MC6845, XTAL_16MHz / 16, hp9k_mc6845_intf ) |
| 96 | 421 | MACHINE_CONFIG_END |
| 97 | 422 | |
| 98 | 423 | /* ROM definition */ |
| 99 | 424 | ROM_START( hp9816 ) |
| 100 | | ROM_REGION16_BE(0x1000000, "maincpu", 0) |
| 425 | ROM_REGION16_BE(0x10000, "bootrom", 0) |
| 426 | |
| 101 | 427 | ROM_DEFAULT_BIOS("bios40") |
| 102 | 428 | ROM_SYSTEM_BIOS(0, "bios40", "Bios v4.0") |
| 103 | 429 | ROMX_LOAD( "rom40.bin", 0x0000, 0x10000, CRC(36005480) SHA1(645a077ffd95e4c31f05cd8bbd6e4554b12813f1), ROM_BIOS(1) ) |
| 104 | 430 | ROM_SYSTEM_BIOS(1, "bios30", "Bios v3.0") |
| 105 | 431 | ROMX_LOAD( "rom30.bin", 0x0000, 0x10000, CRC(05c07e75) SHA1(3066a65e6137482041f9a77d09ee2289fe0974aa), ROM_BIOS(2) ) |
| 432 | |
| 106 | 433 | ROM_END |
| 107 | 434 | |
| 108 | 435 | /* Driver */ |
| 109 | 436 | |
| 110 | 437 | /* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */ |
| 111 | | COMP( 1982, hp9816, 0, 0, hp9k, hp9k, driver_device, 0, "Hewlett Packard", "HP 9816", GAME_NOT_WORKING | GAME_NO_SOUND) |
| 438 | COMP( 1982, hp9816, 0, 0, hp9k, hp9k, hp9k_state, hp9k, "Hewlett Packard", "HP 9816" , GAME_NOT_WORKING | GAME_NO_SOUND ) |