trunk/src/mess/drivers/ymmu100.c
| r19309 | r19310 | |
| 69 | 69 | |
| 70 | 70 | #include "emu.h" |
| 71 | 71 | #include "cpu/h83002/h8.h" |
| 72 | #include "video/hd44780.h" |
| 72 | 73 | |
| 73 | 74 | static INPUT_PORTS_START( mu100 ) |
| 74 | 75 | INPUT_PORTS_END |
| r19309 | r19310 | |
| 76 | 77 | class mu100_state : public driver_device |
| 77 | 78 | { |
| 78 | 79 | public: |
| 80 | enum { |
| 81 | P2_LCD_RS = 0x01, |
| 82 | P2_LCD_RW = 0x02, |
| 83 | P2_LCD_ENABLE = 0x04 |
| 84 | }; |
| 85 | |
| 79 | 86 | mu100_state(const machine_config &mconfig, device_type type, const char *tag) |
| 80 | 87 | : driver_device(mconfig, type, tag), |
| 81 | | m_maincpu(*this, "maincpu") |
| 88 | m_maincpu(*this, "maincpu"), |
| 89 | m_lcd(*this, "lcd") |
| 82 | 90 | { } |
| 83 | 91 | |
| 84 | 92 | required_device<cpu_device> m_maincpu; |
| 93 | required_device<hd44780_device> m_lcd; |
| 85 | 94 | |
| 95 | UINT8 cur_p1, cur_p2; |
| 96 | |
| 86 | 97 | DECLARE_READ8_MEMBER(adc7_r); |
| 98 | DECLARE_WRITE8_MEMBER(p1_w); |
| 99 | DECLARE_READ8_MEMBER(p1_r); |
| 100 | DECLARE_WRITE8_MEMBER(p2_w); |
| 101 | DECLARE_READ8_MEMBER(p2_r); |
| 102 | |
| 103 | virtual void palette_init(); |
| 87 | 104 | }; |
| 88 | 105 | |
| 106 | |
| 89 | 107 | static ADDRESS_MAP_START( mu100_map, AS_PROGRAM, 16, mu100_state ) |
| 90 | 108 | AM_RANGE(0x000000, 0x1fffff) AM_ROM AM_REGION("maincpu", 0) |
| 91 | 109 | AM_RANGE(0x200000, 0x21ffff) AM_RAM // 128K work RAM |
| r19309 | r19310 | |
| 97 | 115 | return 0; |
| 98 | 116 | } |
| 99 | 117 | |
| 118 | WRITE8_MEMBER(mu100_state::p1_w) |
| 119 | { |
| 120 | cur_p1 = data; |
| 121 | } |
| 122 | |
| 123 | READ8_MEMBER(mu100_state::p1_r) |
| 124 | { |
| 125 | if((cur_p2 & P2_LCD_ENABLE)) { |
| 126 | if(cur_p2 & P2_LCD_RW) { |
| 127 | if(cur_p2 & P2_LCD_RS) |
| 128 | return m_lcd->data_read(space, offset); |
| 129 | else |
| 130 | return m_lcd->control_read(space, offset); |
| 131 | } else |
| 132 | return 0x00; |
| 133 | } |
| 134 | |
| 135 | return 0xff; |
| 136 | } |
| 137 | |
| 138 | WRITE8_MEMBER(mu100_state::p2_w) |
| 139 | { |
| 140 | // LCB enable edge |
| 141 | if(!(cur_p2 & P2_LCD_ENABLE) && (data & P2_LCD_ENABLE)) { |
| 142 | if(!(cur_p2 & P2_LCD_RW)) { |
| 143 | if(cur_p2 & P2_LCD_RS) |
| 144 | m_lcd->data_write(space, offset, cur_p1); |
| 145 | else |
| 146 | m_lcd->control_write(space, offset, cur_p1); |
| 147 | } |
| 148 | } |
| 149 | cur_p2 = data; |
| 150 | } |
| 151 | |
| 152 | READ8_MEMBER(mu100_state::p2_r) |
| 153 | { |
| 154 | return cur_p2; |
| 155 | } |
| 156 | |
| 157 | void mu100_state::palette_init() |
| 158 | { |
| 159 | palette_set_color(machine(), 0, MAKE_RGB(255, 255, 255)); |
| 160 | palette_set_color(machine(), 1, MAKE_RGB(0, 0, 0)); |
| 161 | } |
| 162 | |
| 100 | 163 | static ADDRESS_MAP_START( mu100_iomap, AS_IO, 8, mu100_state ) |
| 164 | AM_RANGE(H8_PORT_1, H8_PORT_1) AM_READWRITE(p1_r, p1_w) |
| 165 | AM_RANGE(H8_PORT_2, H8_PORT_2) AM_READWRITE(p2_r, p2_w) |
| 101 | 166 | AM_RANGE(H8_ADC_7_H, H8_ADC_7_L) AM_READ(adc7_r) |
| 102 | 167 | ADDRESS_MAP_END |
| 103 | 168 | |
| 169 | static HD44780_INTERFACE( lcd_config ) |
| 170 | { |
| 171 | 4, |
| 172 | 20, |
| 173 | NULL |
| 174 | }; |
| 175 | |
| 104 | 176 | static MACHINE_CONFIG_START( mu100, mu100_state ) |
| 105 | 177 | MCFG_CPU_ADD( "maincpu", H8S2655, XTAL_16MHz ) |
| 106 | 178 | MCFG_CPU_PROGRAM_MAP( mu100_map ) |
| 107 | 179 | MCFG_CPU_IO_MAP( mu100_iomap ) |
| 108 | 180 | |
| 181 | MCFG_HD44780_ADD("lcd", lcd_config) |
| 182 | |
| 183 | MCFG_SCREEN_ADD("screen", LCD) |
| 184 | MCFG_SCREEN_REFRESH_RATE(50) |
| 185 | MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate, asynchronous updating anyway */ |
| 186 | MCFG_SCREEN_UPDATE_DEVICE("lcd", hd44780_device, screen_update) |
| 187 | MCFG_SCREEN_SIZE(320, 200) |
| 188 | MCFG_SCREEN_VISIBLE_AREA(0, 320-1, 0, 200-1) |
| 189 | MCFG_PALETTE_LENGTH(2) |
| 190 | |
| 109 | 191 | MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") |
| 110 | 192 | MACHINE_CONFIG_END |
| 111 | 193 | |
| r19309 | r19310 | |
| 118 | 200 | ROM_LOAD32_WORD( "sx743b0.ic35", 0x000002, 0x400000, CRC(a9109a6c) SHA1(a67bb49378a38a2d809bd717d286e18bc6496db0) ) |
| 119 | 201 | ROM_LOAD32_WORD( "xt445a0-828.ic36", 0x800000, 0x1000000, CRC(d4483a43) SHA1(5bfd0762dea8598eda19db20251dac20e31fa02c) ) |
| 120 | 202 | ROM_LOAD32_WORD( "xt461a0-829.ic37", 0x800002, 0x1000000, CRC(c5af4501) SHA1(1c88de197c36382311053add8b19a5740802cb78) ) |
| 203 | |
| 204 | ROM_REGION( 0x0860, "lcd", ROMREGION_ERASE ) |
| 205 | ROM_LOAD( "44780a00.bin", 0x0000, 0x0860, BAD_DUMP CRC(3a89024c) SHA1(5a87b68422a916d1b37b5be1f7ad0b3fb3af5a8d)) |
| 121 | 206 | ROM_END |
| 122 | 207 | |
| 123 | 208 | CONS( 1997, mu100, 0, 0, mu100, mu100, driver_device, 0, "Yamaha", "MU100", GAME_NOT_WORKING ) |