trunk/src/mess/drivers/c900.c
| r23787 | r23788 | |
| 11 | 11 | |
| 12 | 12 | #include "emu.h" |
| 13 | 13 | #include "cpu/z8000/z8000.h" |
| 14 | #include "machine/terminal.h" |
| 14 | 15 | |
| 16 | |
| 15 | 17 | class c900_state : public driver_device |
| 16 | 18 | { |
| 17 | 19 | public: |
| 18 | 20 | c900_state(const machine_config &mconfig, device_type type, const char *tag) |
| 19 | | : driver_device(mconfig, type, tag) , |
| 20 | | m_maincpu(*this, "maincpu") { } |
| 21 | : driver_device(mconfig, type, tag), |
| 22 | m_maincpu(*this, "maincpu"), |
| 23 | m_terminal(*this, TERMINAL_TAG) |
| 24 | { } |
| 21 | 25 | |
| 22 | | UINT32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); |
| 26 | // UINT32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); |
| 27 | DECLARE_READ16_MEMBER(key_r); |
| 28 | DECLARE_READ16_MEMBER(stat_r); |
| 29 | DECLARE_WRITE8_MEMBER(kbd_put); |
| 30 | UINT8 m_term_data; |
| 23 | 31 | required_device<cpu_device> m_maincpu; |
| 32 | required_device<generic_terminal_device> m_terminal; |
| 24 | 33 | }; |
| 25 | 34 | |
| 26 | 35 | static ADDRESS_MAP_START(c900_mem, AS_PROGRAM, 16, c900_state) |
| 27 | 36 | AM_RANGE(0x0000, 0x7fff) AM_ROM AM_REGION("maincpu", 0) |
| 37 | AM_RANGE(0x8000, 0xffff) AM_RAM |
| 28 | 38 | ADDRESS_MAP_END |
| 29 | 39 | |
| 30 | | static ADDRESS_MAP_START(c900_io, AS_IO, 8, c900_state) |
| 40 | static ADDRESS_MAP_START(c900_io, AS_IO, 16, c900_state) |
| 41 | AM_RANGE(0x100, 0x101) AM_READ(stat_r) |
| 42 | AM_RANGE(0x110, 0x111) AM_READ(key_r) AM_DEVWRITE8(TERMINAL_TAG, generic_terminal_device, write, 0x00ff) |
| 31 | 43 | ADDRESS_MAP_END |
| 32 | 44 | |
| 33 | 45 | static INPUT_PORTS_START( c900 ) |
| 34 | 46 | INPUT_PORTS_END |
| 35 | 47 | |
| 36 | | UINT32 c900_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) |
| 48 | //UINT32 c900_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) |
| 49 | //{ |
| 50 | // return 0; |
| 51 | //} |
| 52 | |
| 53 | |
| 54 | READ16_MEMBER( c900_state::key_r ) |
| 37 | 55 | { |
| 38 | | return 0; |
| 56 | UINT8 ret = m_term_data; |
| 57 | m_term_data = 0; |
| 58 | return ret; |
| 39 | 59 | } |
| 40 | 60 | |
| 61 | READ16_MEMBER( c900_state::stat_r ) |
| 62 | { |
| 63 | return (m_term_data) ? 5 : 4; |
| 64 | } |
| 65 | |
| 66 | WRITE8_MEMBER( c900_state::kbd_put ) |
| 67 | { |
| 68 | m_term_data = data; |
| 69 | } |
| 70 | |
| 71 | static GENERIC_TERMINAL_INTERFACE( terminal_intf ) |
| 72 | { |
| 73 | DEVCB_DRIVER_MEMBER(c900_state, kbd_put) |
| 74 | }; |
| 75 | |
| 41 | 76 | static MACHINE_CONFIG_START( c900, c900_state ) |
| 42 | 77 | /* basic machine hardware */ |
| 43 | 78 | MCFG_CPU_ADD("maincpu", Z8001, 4000000) |
| r23787 | r23788 | |
| 45 | 80 | MCFG_CPU_IO_MAP(c900_io) |
| 46 | 81 | |
| 47 | 82 | /* video hardware */ |
| 48 | | MCFG_SCREEN_ADD("screen", RASTER) |
| 49 | | MCFG_SCREEN_REFRESH_RATE(60) |
| 50 | | MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ |
| 51 | | MCFG_SCREEN_SIZE(512, 256) |
| 52 | | MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0, 256-1) |
| 53 | | MCFG_PALETTE_LENGTH(4) |
| 54 | | MCFG_SCREEN_UPDATE_DRIVER(c900_state, screen_update) |
| 83 | // MCFG_SCREEN_ADD("screen", RASTER) |
| 84 | // MCFG_SCREEN_REFRESH_RATE(60) |
| 85 | // MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ |
| 86 | // MCFG_SCREEN_SIZE(512, 256) |
| 87 | // MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0, 256-1) |
| 88 | // MCFG_PALETTE_LENGTH(4) |
| 89 | // MCFG_SCREEN_UPDATE_DRIVER(c900_state, screen_update) |
| 90 | MCFG_GENERIC_TERMINAL_ADD(TERMINAL_TAG, terminal_intf) |
| 55 | 91 | MACHINE_CONFIG_END |
| 56 | 92 | |
| 57 | 93 | ROM_START( c900 ) |