trunk/hash/tutor.xml
r249118 | r249119 | |
15 | 15 | 005E Frogger ~ フロッガー [dumped] |
16 | 16 | 006E Scramble ~ スクランブル [dumped] |
17 | 17 | 007E NightFlight ~ ナイトフライト [dumped] |
18 | | 008E Marine Adventure ~ マリン アドベンチャー [dumped] |
| 18 | 008E Marine Adventure ~ マリン アドベンチーャ [dumped] |
19 | 19 | 009E Mission Attack ~ ミッション アタック [dumped] |
20 | | 010E Traffic Jam ~ トラフィック ジャム |
21 | | 011E Mystery Gold ~ ミステリー ゴールド |
| 20 | 010E Traffic Jam ~ トラフィック ジャム [dumped] |
| 21 | 011E Mystery Gold ~ ミステリー ゴールド [dumped] |
22 | 22 | 012E DonPan ~ ドンバン [dumped] |
23 | 23 | 013E Mickey Athletic Land ~ ミッキー アスレチックランド [dumped] |
24 | 24 | 014E Pooyan ~ プーヤン |
25 | 25 | 015E Jungler ~ ジャングラー |
26 | 26 | 016E Guttang Gottong ~ ガッタンゴットン |
27 | | 017E Maze Patrol ~ メイズ パトロール |
| 27 | 017E Maze Patrol ~ メイズ パトロール [dumped] |
28 | 28 | 018E Tron ~ トロン |
29 | | 019E Mr. Do! ~ Mr.DO! |
| 29 | 019E Mr. Do! ~ Mr.DO! [dumped] |
30 | 30 | 020E Bermuda Triangle ~ バミューダ・ トライアングル |
31 | 31 | 021E 4-nin Mahjan ~ 四人麻雀 |
32 | 32 | 022E Triplecommand ~ トリプルコマンド |
r249118 | r249119 | |
218 | 218 | </dataarea> |
219 | 219 | </part> |
220 | 220 | </software> |
| 221 | |
| 222 | <software name="Maze Patrol"> |
| 223 | <description>Maze Patrol (Jpn)</description> |
| 224 | <year>1983</year> |
| 225 | <publisher>Tomy</publisher> |
| 226 | <info name="alt_title" value="メイズ パトロール"/> |
| 227 | <info name="serial" value="017E"/> |
| 228 | <part name="cart" interface="tutor_cart"> |
| 229 | <dataarea name="rom" size="8192"> |
| 230 | <rom name="tomy 36.7.u1" size="8192" crc="f3059779" sha1="fd51c445f0356ed3796bdbbd4a7f6086d7bb5331" offset="0" /> |
| 231 | </dataarea> |
| 232 | </part> |
| 233 | </software> |
221 | 234 | |
222 | 235 | <software name="athland"> |
223 | 236 | <description>Mickey Athletic Land (Jpn)</description> |
r249118 | r249119 | |
257 | 270 | </dataarea> |
258 | 271 | </part> |
259 | 272 | </software> |
| 273 | |
| 274 | <software name="mysteryg"> |
| 275 | <description>Mystery Gold (Jpn)</description> |
| 276 | <year>1983</year> |
| 277 | <publisher>Tomy</publisher> |
| 278 | <info name="alt_title" value="ミステリー ゴールド"/> |
| 279 | <info name="serial" value="011E"/> |
| 280 | <part name="cart" interface="tutor_cart"> |
| 281 | <dataarea name="rom" size="8192"> |
| 282 | <rom name="mysteryg.bin" size="8192" crc="2c4f30b8" sha1="8d1fcb8e86f4e2d5557a7c39e7859811311a966a" offset="0" /> |
| 283 | </dataarea> |
| 284 | </part> |
| 285 | </software> |
| 286 | |
| 287 | <software name="mrdo"> |
| 288 | <description>Mr. Do! (Jpn)</description> |
| 289 | <year>1983</year> |
| 290 | <publisher>Tomy</publisher> |
| 291 | <info name="alt_title" value="Mr.DO!"/> |
| 292 | <info name="serial" value="019E"/> |
| 293 | <part name="cart" interface="tutor_cart"> |
| 294 | <dataarea name="rom" size="8192"> |
| 295 | <rom name="tomy 3l1.ic1.bin" size="8192" crc="1dfa3f4b" sha1="93d1c17c5edd44f27c28cde88a68f609b77feb0c" offset="0" /> |
| 296 | </dataarea> |
| 297 | </part> |
| 298 | </software> |
260 | 299 | |
261 | 300 | <software name="nflight"> |
262 | 301 | <description>Night Flight (Jpn)</description> |
r249118 | r249119 | |
334 | 373 | </part> |
335 | 374 | </software> |
336 | 375 | |
337 | | <software name="trafjam"> |
| 376 | <software name="trafjam" cloneof="trafjam"> |
338 | 377 | <!-- Stock No: 8103, (Japanese 010E)--> |
339 | | <description>Traffic Jam</description> |
340 | | <year>1983</year> |
| 378 | <description>Traffic Jam (Jpn)</description> |
| 379 | <year>1982</year> |
341 | 380 | <publisher>Tomy</publisher> |
342 | 381 | <part name="cart" interface="tutor_cart"> |
343 | 382 | <dataarea name="rom" size="8192"> |
344 | | <rom name="trafjam.bin" size="8192" crc="c0c78141" sha1="2ba074955a1507ca9f6cde8987695f495e81aeab" offset="0" /> |
| 383 | <rom name="tomy 33.5.ic1" size="8192" crc="c970f2c3" sha1="086825470d349f3bbd598bbb8b8c9e13aa2458b6" offset="0" /> |
345 | 384 | </dataarea> |
346 | 385 | </part> |
347 | 386 | </software> |
348 | 387 | |
349 | | <software name="trafjama" cloneof="trafjam"> |
| 388 | <software name="trafjama"> |
350 | 389 | <!-- Stock No: 8103, (Japanese 010E)--> |
351 | | <description>Traffic Jam (Alt)</description> |
352 | | <year>1982</year> |
| 390 | <description>Traffic Jam (USA)</description> |
| 391 | <year>1983</year> |
353 | 392 | <publisher>Tomy</publisher> |
354 | 393 | <part name="cart" interface="tutor_cart"> |
355 | 394 | <dataarea name="rom" size="8192"> |
356 | | <rom name="trafjama.bin" size="8192" crc="c970f2c3" sha1="086825470d349f3bbd598bbb8b8c9e13aa2458b6" offset="0" /> |
| 395 | <rom name="trafjama.bin" size="8192" crc="c0c78141" sha1="2ba074955a1507ca9f6cde8987695f495e81aeab" offset="0" /> |
357 | 396 | </dataarea> |
358 | 397 | </part> |
359 | 398 | </software> |
trunk/src/mame/drivers/konendev.c
r249118 | r249119 | |
63 | 63 | |
64 | 64 | DECLARE_READ32_MEMBER(mcu2_r); |
65 | 65 | DECLARE_READ32_MEMBER(ifu2_r); |
66 | | DECLARE_READ32_MEMBER(ctrl0_r); |
67 | | DECLARE_READ32_MEMBER(ctrl1_r); |
68 | | DECLARE_READ32_MEMBER(ctrl2_r); |
69 | | DECLARE_READ32_MEMBER(rtc_r); |
70 | | DECLARE_WRITE32_MEMBER(rtc_w); |
| 66 | DECLARE_READ32_MEMBER(unk_78800004_r); |
| 67 | DECLARE_READ32_MEMBER(unk_78a00000_r); |
| 68 | DECLARE_READ32_MEMBER(unk_78e00000_r); |
71 | 69 | DECLARE_WRITE32_MEMBER(eeprom_w); |
72 | | DECLARE_READ32_MEMBER(sound_data_r); |
73 | | DECLARE_WRITE32_MEMBER(sound_data_w); |
74 | 70 | |
75 | 71 | DECLARE_WRITE_LINE_MEMBER(gcu_interrupt); |
76 | | INTERRUPT_GEN_MEMBER(vbl_interrupt); |
77 | 72 | |
78 | | UINT8 rtc_dev_r(UINT32 reg); |
79 | | |
80 | 73 | UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
81 | 74 | }; |
82 | 75 | |
r249118 | r249119 | |
101 | 94 | { |
102 | 95 | r &= ~0x4000; // MCU2 presence |
103 | 96 | r &= ~0x2000; // IFU2 presence |
104 | | r &= ~0x1000; // FMU2 presence |
| 97 | r &= ~0x1000; // FMU2 presence |
105 | 98 | } |
106 | 99 | if (ACCESSING_BITS_0_7) |
107 | 100 | { |
108 | | r |= ioport("DSW")->read() & 0xff; |
109 | | |
110 | | //r |= 0x80; // 0 = ram clear? |
111 | | //r |= 0x40; // logic door |
112 | | r |= 0x04; // battery 1 status |
113 | | r |= 0x10; // battery 2 status |
| 101 | r |= 0x40; // logic door |
| 102 | r |= 0x04; // battery 1 status |
| 103 | r |= 0x10; // battery 2 status |
114 | 104 | } |
115 | 105 | |
116 | 106 | return r; |
r249118 | r249119 | |
128 | 118 | return r; |
129 | 119 | } |
130 | 120 | |
131 | | // This seems to be Epson RTC-72423 |
132 | | UINT8 konendev_state::rtc_dev_r(UINT32 reg) |
| 121 | READ32_MEMBER(konendev_state::unk_78800004_r) |
133 | 122 | { |
134 | | switch (reg) |
135 | | { |
136 | | case 0x0: return 9; |
137 | | case 0x1: return 5; |
138 | | case 0x2: return 3; |
139 | | case 0x3: return 2; |
140 | | case 0x4: return 1; |
141 | | case 0x5: return 0; |
142 | | case 0x6: return 7; |
143 | | case 0x7: return 2; |
144 | | case 0x8: return 2; |
145 | | case 0x9: return 1; |
146 | | case 0xa: return 5; |
147 | | case 0xb: return 1; |
148 | | case 0xc: return 3; |
149 | | } |
150 | | |
151 | | return 0; |
| 123 | return 0xffffffff; |
152 | 124 | } |
153 | 125 | |
154 | | READ32_MEMBER(konendev_state::rtc_r) |
| 126 | READ32_MEMBER(konendev_state::unk_78a00000_r) |
155 | 127 | { |
156 | | UINT32 r = 0; |
157 | | |
158 | | if (ACCESSING_BITS_24_31) |
159 | | r |= (UINT32)(rtc_dev_r(offset * 4)) << 24; |
160 | | if (ACCESSING_BITS_16_23) |
161 | | r |= (UINT32)(rtc_dev_r((offset * 4)+1)) << 16; |
162 | | if (ACCESSING_BITS_8_15) |
163 | | r |= (UINT32)(rtc_dev_r((offset * 4)+2)) << 8; |
164 | | if (ACCESSING_BITS_0_7) |
165 | | r |= (UINT32)(rtc_dev_r((offset * 4)+3)); |
166 | | |
167 | | return r; |
| 128 | return 0xffffffff; |
168 | 129 | } |
169 | 130 | |
170 | | WRITE32_MEMBER(konendev_state::rtc_w) |
| 131 | READ32_MEMBER(konendev_state::unk_78e00000_r) |
171 | 132 | { |
| 133 | return 0xffffffff; |
172 | 134 | } |
173 | 135 | |
174 | | READ32_MEMBER(konendev_state::ctrl0_r) |
175 | | { |
176 | | return ((UINT32)(ioport("IN1")->read() & 0xffff) << 16) | 0xffff; |
177 | | } |
178 | | |
179 | | READ32_MEMBER(konendev_state::ctrl1_r) |
180 | | { |
181 | | // 0x01000000 = main door optic |
182 | | // 0x00000010 = hard meter access |
183 | | |
184 | | return 0xfeffffef; |
185 | | } |
186 | | |
187 | | READ32_MEMBER(konendev_state::ctrl2_r) |
188 | | { |
189 | | return ((UINT32)(ioport("IN0")->read() & 0xffff) << 16) | 0xffff; |
190 | | } |
191 | | |
192 | 136 | WRITE32_MEMBER(konendev_state::eeprom_w) |
193 | 137 | { |
194 | 138 | if (ACCESSING_BITS_0_7) |
r249118 | r249119 | |
199 | 143 | } |
200 | 144 | } |
201 | 145 | |
202 | | READ32_MEMBER(konendev_state::sound_data_r) |
203 | | { |
204 | | return 0xffffffff; |
205 | | } |
206 | | |
207 | | WRITE32_MEMBER(konendev_state::sound_data_w) |
208 | | { |
209 | | } |
210 | | |
211 | 146 | static ADDRESS_MAP_START( konendev_map, AS_PROGRAM, 32, konendev_state ) |
212 | 147 | AM_RANGE(0x00000000, 0x00ffffff) AM_RAM |
213 | 148 | AM_RANGE(0x78000000, 0x78000003) AM_READ(mcu2_r) |
214 | | AM_RANGE(0x78080000, 0x7808000f) AM_READWRITE(rtc_r, rtc_w) |
215 | | AM_RANGE(0x780c0000, 0x780c0003) AM_READWRITE(sound_data_r, sound_data_w) |
216 | 149 | AM_RANGE(0x78100000, 0x78100003) AM_WRITE(eeprom_w) |
217 | 150 | AM_RANGE(0x78800000, 0x78800003) AM_READ(ifu2_r) |
218 | | AM_RANGE(0x78800004, 0x78800007) AM_READ(ctrl0_r) |
219 | | AM_RANGE(0x78a00000, 0x78a0001f) AM_READ(ctrl1_r) |
220 | | AM_RANGE(0x78e00000, 0x78e00003) AM_READ(ctrl2_r) |
| 151 | AM_RANGE(0x78800004, 0x78800007) AM_READ(unk_78800004_r) |
| 152 | AM_RANGE(0x78a00000, 0x78a0001f) AM_READ(unk_78a00000_r) |
| 153 | AM_RANGE(0x78e00000, 0x78e00003) AM_READ(unk_78e00000_r) |
| 154 | // AM_RANGE(0x78000000, 0x78000003) AM_READNOP |
| 155 | // AM_RANGE(0x78100000, 0x7810001b) AM_RAM |
| 156 | // AM_RANGE(0x78a00014, 0x78a00017) AM_WRITENOP |
221 | 157 | AM_RANGE(0x79000000, 0x79000003) AM_DEVWRITE("gcu", k057714_device, fifo_w) |
222 | 158 | AM_RANGE(0x79800000, 0x798000ff) AM_DEVREADWRITE("gcu", k057714_device, read, write) |
223 | 159 | AM_RANGE(0x7a000000, 0x7a01ffff) AM_RAM AM_SHARE("nvram0") |
r249118 | r249119 | |
228 | 164 | |
229 | 165 | |
230 | 166 | static INPUT_PORTS_START( konendev ) |
231 | | PORT_START("IN0") |
232 | | PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_GAMBLE_TAKE ) // "Take Win" button |
233 | | PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_GAMBLE_BET ) // "Gamble" button |
234 | | PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON1 ) // "25 Lines" button |
235 | | PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON2 ) // "20 Lines" button |
236 | | PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_BUTTON3 ) // "15 Lines" button |
237 | | PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON4 ) // "10 Lines" button |
238 | | PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON5 ) // "5 Lines" button |
239 | | PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_BUTTON6 ) // "1 Line" button |
240 | | PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON7 ) // "Reserve" button |
241 | | PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON8 ) // "Collect" button |
242 | | PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON9 ) // "Bet 20" button |
243 | | PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON10 ) // "Bet 10" button |
244 | | PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_BUTTON11 ) // "Bet 5" button |
245 | | PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON12 ) // "Bet 3" button |
246 | | PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON13 ) // "Bet 2" button |
247 | | PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON14 ) // "Bet 1" button |
248 | | |
249 | | PORT_START("IN1") |
250 | | PORT_BIT( 0xc000, IP_ACTIVE_LOW, IPT_UNUSED ) |
251 | | PORT_SERVICE( 0x2000, IP_ACTIVE_LOW ) // Audit key |
252 | | PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON16 ) // Reset key |
253 | | PORT_DIPNAME( 0x0800, 0x0800, "Main door switch" ) |
254 | | PORT_DIPSETTING( 0x0800, DEF_STR( Off ) ) |
255 | | PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) |
256 | | PORT_DIPNAME( 0x0400, 0x0400, "Cashbox door" ) |
257 | | PORT_DIPSETTING( 0x0400, DEF_STR( Off ) ) |
258 | | PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) |
259 | | PORT_BIT( 0x0300, IP_ACTIVE_LOW, IPT_UNUSED ) |
260 | | PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNUSED ) |
261 | | PORT_DIPNAME( 0x0040, 0x0040, "BNA Door" ) |
262 | | PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) |
263 | | PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) |
264 | | PORT_DIPNAME( 0x0020, 0x0020, "BNA Transport Exist" ) |
265 | | PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) |
266 | | PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) |
267 | | PORT_DIPNAME( 0x0010, 0x0010, "BNA Stacker Exist" ) |
268 | | PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) |
269 | | PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) |
270 | | PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNUSED ) |
271 | | PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNUSED ) |
272 | | PORT_DIPNAME( 0x0002, 0x0002, "BNA Power" ) |
273 | | PORT_DIPSETTING( 0x0002, DEF_STR( Off ) ) |
274 | | PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) |
275 | | PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNUSED ) |
276 | | |
277 | | PORT_START("DSW") |
278 | | PORT_DIPNAME( 0x80, 0x80, "Ram Clear" ) |
279 | | PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) |
280 | | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
281 | | PORT_DIPNAME( 0x40, 0x00, "Logic Door" ) |
282 | | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
283 | | PORT_DIPSETTING( 0x40, DEF_STR( On ) ) |
284 | 167 | INPUT_PORTS_END |
285 | 168 | |
286 | 169 | |
287 | 170 | WRITE_LINE_MEMBER(konendev_state::gcu_interrupt) |
288 | 171 | { |
289 | | m_maincpu->set_input_line(INPUT_LINE_IRQ1, state); |
290 | | m_maincpu->set_input_line(INPUT_LINE_IRQ3, state); |
| 172 | m_maincpu->set_input_line(INPUT_LINE_IRQ0, state); |
291 | 173 | } |
292 | 174 | |
293 | 175 | |
294 | | INTERRUPT_GEN_MEMBER(konendev_state::vbl_interrupt) |
295 | | { |
296 | | device.execute().set_input_line(INPUT_LINE_IRQ1, ASSERT_LINE); |
297 | | device.execute().set_input_line(INPUT_LINE_IRQ3, ASSERT_LINE); |
298 | | } |
299 | 176 | |
300 | 177 | static MACHINE_CONFIG_START( konendev, konendev_state ) |
301 | 178 | /* basic machine hardware */ |
302 | 179 | MCFG_CPU_ADD("maincpu", PPC403GCX, 32000000) // Clock unknown |
303 | 180 | MCFG_CPU_PROGRAM_MAP(konendev_map) |
304 | | MCFG_CPU_VBLANK_INT_DRIVER("screen", konendev_state, vbl_interrupt) |
305 | 181 | |
306 | 182 | /* video hardware */ |
307 | 183 | MCFG_PALETTE_ADD_RRRRRGGGGGBBBBB("palette") |
r249118 | r249119 | |
482 | 358 | DRIVER_INIT_MEMBER(konendev_state,enchlamp) |
483 | 359 | { |
484 | 360 | UINT32 *rom = (UINT32*)memregion("program")->base(); |
485 | | rom[0x24/4] = 0x00002743; // patch flash checksum for now |
486 | | |
487 | | // patch sound data checksums |
488 | | rom[0x2d924/4] = 0x00000000; |
489 | | rom[0x2d928/4] = 0x00000000; |
490 | | rom[0x2d934/4] = 0x00000000; |
491 | | rom[0x2d938/4] = 0x00000000; |
| 361 | rom[0x24/4] = 0x00002743; // patch flash checksum for now |
492 | 362 | |
493 | | rom[0] = 0x5782b930; // new checksum for program rom |
| 363 | rom[0] = 0xd43eb930; // new checksum for program rom |
494 | 364 | } |
495 | 365 | |
496 | 366 | // has a flash dump? |
trunk/src/mame/drivers/suna8.c
r249118 | r249119 | |
27 | 27 | |
28 | 28 | - hardhea2: in test mode press P1&P2 button 2 to see a picture of each level |
29 | 29 | - Rough Ranger default dipswitch settings are based on the settings listed in |
30 | | the Sharp Image licensed Rough Ranger manual / NOTICE sheet dated 8-5-88 |
31 | | - rranger video: http://www.nicovideo.jp/watch/sm15788808 (not perfect: fireball masking, lev. 5; masking/missing legs, lev. 10) |
32 | | - hardhead video: https://youtu.be/zamQvXr9_xs |
33 | | - starfigh video: http://youtu.be/SIwV7wjvnHM (missing starfield effect!) |
| 30 | the Sharp Image licensed Rough Ranger manaul / NOTICE sheet dated 8-5-88 |
| 31 | - starfigh video: http://youtu.be/SIwV7wjvnHM -> missing starfield effect! |
34 | 32 | - brickzn video: http://youtu.be/yfU1C7A3iZI (recorded from v6.0, Joystick version) |
35 | 33 | |
36 | 34 | ***************************************************************************/ |
r249118 | r249119 | |
1887 | 1885 | MCFG_PALETTE_FORMAT(RRRRGGGGBBBBxxxx) |
1888 | 1886 | MCFG_PALETTE_ENDIANNESS(ENDIANNESS_BIG) |
1889 | 1887 | |
1890 | | MCFG_VIDEO_START_OVERRIDE(suna8_state,suna8_text) |
| 1888 | MCFG_VIDEO_START_OVERRIDE(suna8_state,suna8_textdim12) |
1891 | 1889 | |
1892 | 1890 | /* sound hardware */ |
1893 | 1891 | MCFG_SPEAKER_STANDARD_MONO("mono") |
r249118 | r249119 | |
1941 | 1939 | MCFG_PALETTE_FORMAT(RRRRGGGGBBBBxxxx) |
1942 | 1940 | MCFG_PALETTE_ENDIANNESS(ENDIANNESS_BIG) |
1943 | 1941 | |
1944 | | MCFG_VIDEO_START_OVERRIDE(suna8_state,suna8_text) |
| 1942 | MCFG_VIDEO_START_OVERRIDE(suna8_state,suna8_textdim8) |
1945 | 1943 | |
1946 | 1944 | /* sound hardware */ |
1947 | 1945 | MCFG_SPEAKER_STANDARD_MONO("mono") |
r249118 | r249119 | |
2923 | 2921 | m_bank1->configure_entries(0, 16, memregion("maincpu")->base() + 0x10000, 0x4000); |
2924 | 2922 | } |
2925 | 2923 | |
2926 | | GAME( 1988, sranger, 0, rranger, rranger, suna8_state, suna8, ROT0, "SunA", "Super Ranger (v2.0)", MACHINE_IMPERFECT_GRAPHICS ) |
2927 | | GAME( 1988, rranger, sranger, rranger, rranger, suna8_state, suna8, ROT0, "SunA (Sharp Image license)", "Rough Ranger (v2.0)", MACHINE_IMPERFECT_GRAPHICS ) |
2928 | | GAME( 1988, rrangerb, sranger, rranger, rranger, suna8_state, suna8, ROT0, "bootleg", "Rough Ranger (v2.0, bootleg)", MACHINE_IMPERFECT_GRAPHICS ) |
2929 | | GAME( 1988, srangero, sranger, rranger, rranger, suna8_state, suna8, ROT0, "SunA", "Super Ranger (older)", MACHINE_IMPERFECT_GRAPHICS ) |
2930 | | GAME( 1988, srangern, sranger, rranger, rranger, suna8_state, suna8, ROT0, "SunA (NOVA license)", "Super Ranger (older, NOVA license)", MACHINE_IMPERFECT_GRAPHICS ) |
2931 | | GAME( 1988, srangerw, sranger, rranger, rranger, suna8_state, suna8, ROT0, "SunA (WDK license)", "Super Ranger (older, WDK license)", MACHINE_IMPERFECT_GRAPHICS ) |
2932 | | GAME( 1988, srangerb, sranger, rranger, rranger, suna8_state, suna8, ROT0, "bootleg (NYWA)", "Super Ranger (older, bootleg)", MACHINE_IMPERFECT_GRAPHICS ) |
| 2924 | GAME( 1988, sranger, 0, rranger, rranger, suna8_state, suna8, ROT0, "SunA", "Super Ranger (v2.0)", 0 ) |
| 2925 | GAME( 1988, rranger, sranger, rranger, rranger, suna8_state, suna8, ROT0, "SunA (Sharp Image license)", "Rough Ranger (v2.0)", 0 ) |
| 2926 | GAME( 1988, rrangerb, sranger, rranger, rranger, suna8_state, suna8, ROT0, "bootleg", "Rough Ranger (v2.0, bootleg)", 0 ) |
| 2927 | GAME( 1988, srangero, sranger, rranger, rranger, suna8_state, suna8, ROT0, "SunA", "Super Ranger (older)", 0 ) |
| 2928 | GAME( 1988, srangern, sranger, rranger, rranger, suna8_state, suna8, ROT0, "SunA (NOVA license)", "Super Ranger (older, NOVA license)", 0 ) |
| 2929 | GAME( 1988, srangerw, sranger, rranger, rranger, suna8_state, suna8, ROT0, "SunA (WDK license)", "Super Ranger (older, WDK license)", 0 ) |
| 2930 | GAME( 1988, srangerb, sranger, rranger, rranger, suna8_state, suna8, ROT0, "bootleg (NYWA)", "Super Ranger (older, bootleg)", 0 ) |
2933 | 2931 | |
2934 | 2932 | GAME( 1988, hardhead, 0, hardhead, hardhead, suna8_state, hardhead, ROT0, "SunA", "Hard Head", 0 ) |
2935 | 2933 | GAME( 1988, hardheadb, hardhead, hardhead, hardhead, suna8_state, hardhedb, ROT0, "bootleg", "Hard Head (bootleg)", 0 ) |
trunk/src/mame/video/suna8.c
r249118 | r249119 | |
17 | 17 | sent to the screen. Each sprite uses 4 bytes, held within the last |
18 | 18 | page of tiles. |
19 | 19 | |
| 20 | * Note: later games use a more complex format than the following, |
| 21 | which is yet to be completely understood. |
| 22 | |
| 23 | [ Sprites Format ] |
| 24 | |
| 25 | Offset: Bits: Value: |
| 26 | |
| 27 | 0.b Y (Bottom up) |
| 28 | |
| 29 | 1.b 7--- ---- Sprite Size (1 = 2x32 tiles; 0 = 2x2) |
| 30 | |
| 31 | 2x2 Sprites: |
| 32 | -65- ---- Tiles Row (height = 8 tiles) |
| 33 | ---4 ---- Page |
| 34 | |
| 35 | 2x32 Sprites: |
| 36 | -6-- ---- Ignore X (Multisprite) |
| 37 | --54 ---- Page |
| 38 | |
| 39 | ---- 3210 Tiles Column (width = 2 tiles) |
| 40 | |
| 41 | 2.b X |
| 42 | |
| 43 | 3.b 7--- ---- |
| 44 | -6-- ---- X (Sign Bit) |
| 45 | --54 3--- |
| 46 | ---- -210 Tiles Bank |
| 47 | |
| 48 | |
| 49 | [ Sprite's Tiles Format ] |
| 50 | |
| 51 | |
| 52 | Offset: Bits: Value: |
| 53 | |
| 54 | 0.b Code (Low Bits) |
| 55 | |
| 56 | 1.b 7--- ---- Flip Y |
| 57 | -6-- ---- Flip X |
| 58 | --54 32-- Color |
| 59 | ---- --10 Code (High Bits) |
| 60 | |
| 61 | |
| 62 | |
20 | 63 | Set TILEMAPS to 1 to debug. |
21 | 64 | Press Z (you see the "tilemaps" in RAM) or |
22 | 65 | Press X (you see the "tilemaps" in ROM) then |
r249118 | r249119 | |
29 | 72 | |
30 | 73 | #include "emu.h" |
31 | 74 | #include "includes/suna8.h" |
32 | | #include "drawgfxm.h" |
33 | 75 | |
34 | 76 | /*************************************************************************** |
35 | 77 | For Debug: there's no tilemap, just sprites. |
r249118 | r249119 | |
138 | 180 | |
139 | 181 | |
140 | 182 | |
141 | | void suna8_state::suna8_vh_start_common(bool has_text, GFXBANK_TYPE_T gfxbank_type) |
| 183 | void suna8_state::suna8_vh_start_common(int text_dim, GFXBANK_TYPE_T gfxbank_type) |
142 | 184 | { |
143 | | m_has_text = has_text; |
| 185 | m_text_dim = text_dim; |
144 | 186 | m_spritebank = 0; |
145 | 187 | m_gfxbank = 0; |
146 | 188 | m_gfxbank_type = gfxbank_type; |
147 | 189 | m_palettebank = 0; |
148 | 190 | |
149 | | if (!m_has_text) |
| 191 | if (!m_text_dim) |
150 | 192 | { |
151 | 193 | m_banked_paletteram.allocate(0x200 * 2); |
152 | 194 | |
r249118 | r249119 | |
157 | 199 | #if TILEMAPS |
158 | 200 | m_bg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(suna8_state::get_tile_info),this), TILEMAP_SCAN_COLS, |
159 | 201 | |
160 | | 8, 8, 0x20*(m_has_text ? 4 : 16), 0x20); |
| 202 | 8, 8, 0x20*(m_text_dim ? 4 : 16), 0x20); |
161 | 203 | |
162 | 204 | m_bg_tilemap->set_transparent_pen(15); |
163 | 205 | #endif |
164 | 206 | } |
165 | 207 | |
166 | | VIDEO_START_MEMBER(suna8_state,suna8_text) { suna8_vh_start_common( true, GFXBANK_TYPE_SPARKMAN); } |
167 | | VIDEO_START_MEMBER(suna8_state,suna8_sparkman) { suna8_vh_start_common( false, GFXBANK_TYPE_SPARKMAN); } |
168 | | VIDEO_START_MEMBER(suna8_state,suna8_brickzn) { suna8_vh_start_common( false, GFXBANK_TYPE_BRICKZN); } |
169 | | VIDEO_START_MEMBER(suna8_state,suna8_starfigh) { suna8_vh_start_common( false, GFXBANK_TYPE_STARFIGH); } |
| 208 | VIDEO_START_MEMBER(suna8_state,suna8_textdim8) { suna8_vh_start_common( 8, GFXBANK_TYPE_SPARKMAN); } |
| 209 | VIDEO_START_MEMBER(suna8_state,suna8_textdim12) { suna8_vh_start_common( 12, GFXBANK_TYPE_SPARKMAN); } |
| 210 | VIDEO_START_MEMBER(suna8_state,suna8_sparkman) { suna8_vh_start_common( 0, GFXBANK_TYPE_SPARKMAN); } |
| 211 | VIDEO_START_MEMBER(suna8_state,suna8_brickzn) { suna8_vh_start_common( 0, GFXBANK_TYPE_BRICKZN); } |
| 212 | VIDEO_START_MEMBER(suna8_state,suna8_starfigh) { suna8_vh_start_common( 0, GFXBANK_TYPE_STARFIGH); } |
170 | 213 | |
171 | 214 | /*************************************************************************** |
172 | 215 | |
r249118 | r249119 | |
176 | 219 | |
177 | 220 | ***************************************************************************/ |
178 | 221 | |
179 | | #define PIXEL_OP_REBASE_TRANSPEN_PRIORITY_MASK(DEST, PRIORITY, SOURCE) \ |
180 | | do \ |
181 | | { \ |
182 | | UINT32 srcdata = (SOURCE); \ |
183 | | if (srcdata != trans_pen) \ |
184 | | { \ |
185 | | if ((PRIORITY) == 0) \ |
186 | | (DEST) = color + srcdata; \ |
187 | | } \ |
188 | | } \ |
189 | | while (0) |
190 | | |
191 | | class mygfx_element : public gfx_element |
| 222 | void suna8_state::draw_normal_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect, int which) |
192 | 223 | { |
193 | | public: |
194 | | void prio_mask_transpen(bitmap_ind16 &dest, const rectangle &cliprect, |
195 | | UINT32 code, UINT32 color, int flipx, int flipy, INT32 destx, INT32 desty, |
196 | | bitmap_ind8 &priority, UINT32 trans_pen) |
197 | | { |
198 | | color = colorbase() + granularity() * (color % colors()); |
199 | | code %= elements(); |
200 | | DRAWGFX_CORE(UINT16, PIXEL_OP_REBASE_TRANSPEN_PRIORITY_MASK, UINT8); |
201 | | } |
202 | | }; |
203 | | |
204 | | /*************************************************************************** |
205 | | |
206 | | [ Sprites Format ] |
207 | | |
208 | | * Note: later games use a more complex format than the following |
209 | | |
210 | | Offset: Bits: Value: |
211 | | |
212 | | 0.b Y (Bottom up) |
213 | | |
214 | | 1.b 7--- ---- Sprite Size (1 = 2x32 tiles; 0 = 2x2) |
215 | | |
216 | | 2x2 Sprites: |
217 | | -65- ---- Tiles Row (height = 8 tiles) |
218 | | ---4 ---- Page |
219 | | |
220 | | 2x32 Sprites: |
221 | | -6-- ---- Ignore X (Multisprite) |
222 | | --54 ---- Page |
223 | | |
224 | | ---- 3210 Tiles Column (width = 2 tiles) |
225 | | |
226 | | 2.b X |
227 | | |
228 | | 3.b 7--- ---- Text Sprite |
229 | | -6-- ---- X (Sign Bit) <- Also Set For Text Sprites |
230 | | --54 3210 Tiles Bank ($400 tiles each) |
231 | | |
232 | | |
233 | | [ Sprite's Tiles Format ] |
234 | | |
235 | | |
236 | | Offset: Bits: Value: |
237 | | |
238 | | 0.b Code (Low Bits) |
239 | | |
240 | | 1.b 7--- ---- Flip Y |
241 | | -6-- ---- Flip X |
242 | | --54 32-- Color |
243 | | ---- --10 Code (High Bits) |
244 | | |
245 | | ***************************************************************************/ |
246 | | |
247 | | void suna8_state::draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int start, int end, int which) |
248 | | { |
249 | 224 | UINT8 *spriteram = m_spriteram + which * 0x2000 * 2; |
250 | 225 | |
| 226 | int i; |
251 | 227 | int mx = 0; // multisprite x counter |
252 | 228 | |
253 | 229 | int max_x = m_screen->width() - 8; |
254 | 230 | int max_y = m_screen->height() - 8; |
255 | 231 | |
256 | | if (m_has_text) |
257 | | screen.priority().fill(0, cliprect); |
258 | | |
259 | | for (int i = start; i < end; i += 4) |
| 232 | for (i = 0x1d00; i < 0x2000; i += 4) |
260 | 233 | { |
261 | 234 | int srcpg, srcx,srcy, dimx,dimy, tx, ty; |
262 | 235 | int gfxbank, colorbank = 0, flipx,flipy, multisprite; |
r249118 | r249119 | |
266 | 239 | int x = spriteram[i + 2]; |
267 | 240 | int bank = spriteram[i + 3]; |
268 | 241 | |
269 | | bool read_mask = false; |
270 | | |
271 | | if (m_has_text) |
| 242 | if (m_text_dim) |
272 | 243 | { |
273 | 244 | // Older, simpler hardware: hardhead, rranger |
274 | | |
275 | | // rranger (20:18): |
276 | | // fireball (fe00: 19 00 28 07) not masked by text (fd48: e0 00 00 c0, fd4c: 10 00 00 c0), fire (fdb0: 30 00 00 c0, fdb4: 20 00 00 c0) |
277 | | // fireball (fe00: 20 00 ba 07) is masked!? But only by fire? |
278 | | // rranger (33:04, 35:17): |
279 | | // generally no masking by fire, but there are missing legs on some enemies. |
280 | | // Could be a sprite limit hit, as there are many sprites on that line, and it's affected by the horizontal (dead) player |
281 | | read_mask = true; |
282 | | |
283 | | if ((bank & 0xc0) == 0xc0) |
284 | | { |
285 | | // hardhead: fd88/8c/90 -> f994..f9c0 |
286 | | // rranger: fd48/4c -> f980..f9ac |
287 | | // fdb0/b4 -> f9c0..f9fc |
288 | | // note: fireballs in level 5 (fe20/40) should go above flames and score (text sprites) |
289 | | int text_list = (i - start) & 0x20; |
290 | | int text_start = text_list ? 0x19c0 : 0x1980; |
291 | | bool write_mask = (text_list == 0); // hack? |
292 | | draw_text_sprites(screen, bitmap, cliprect, text_start, text_start + 0x80, y, write_mask); |
293 | | continue; |
294 | | } |
295 | | |
296 | 245 | flipx = 0; |
297 | 246 | flipy = 0; |
298 | 247 | gfxbank = bank & 0x3f; |
r249118 | r249119 | |
314 | 263 | } |
315 | 264 | else |
316 | 265 | { |
317 | | // Newer, more complex hardware: brickzn, hardhea2, sparkman, starfigh |
| 266 | // Newer, more complex hardware: brickzn, hardhea2, sparkman?, starfigh |
318 | 267 | switch( code & 0xc0 ) |
319 | 268 | { |
320 | 269 | case 0xc0: |
r249118 | r249119 | |
333 | 282 | gfxbank = bank & 0x1f; |
334 | 283 | srcpg = (code >> 4) & 3; |
335 | 284 | break; |
| 285 | // hardhea2: fire code=52/54 bank=a4; player code=02/04/06 bank=08; arrow:code=16 bank=27 |
336 | 286 | case 0x40: |
337 | | // hardhea2: fire code=52/54 bank=a4; player code=02/04/06 bank=08; arrow:code=16 bank=27 |
338 | 287 | dimx = 4; dimy = 4; |
339 | 288 | srcx = (code & 0xe) * 2; |
340 | 289 | flipx = code & 0x01; |
r249118 | r249119 | |
398 | 347 | x = x - ((bank & 0x40) ? 0x100 : 0); |
399 | 348 | y = (0x100 - y - dimy*8 ) & 0xff; |
400 | 349 | |
401 | | // Multi Sprite |
| 350 | /* Multi Sprite */ |
402 | 351 | if ( multisprite ) { mx += dimx*8; x = mx; } |
403 | 352 | else mx = x; |
404 | 353 | |
r249118 | r249119 | |
430 | 379 | sy = max_y - sy; tile_flipy = !tile_flipy; |
431 | 380 | } |
432 | 381 | |
433 | | int code = tile + (attr & 0x3)*0x100 + gfxbank; |
434 | | int color = (((attr >> 2) & 0xf) ^ colorbank) + 0x10 * m_palettebank; // player2 in hardhea2 and sparkman |
435 | | |
436 | | if (read_mask) |
437 | | ((mygfx_element*)(m_gfxdecode->gfx(which)))->prio_mask_transpen(bitmap, cliprect, |
438 | | code, color, tile_flipx, tile_flipy, sx, sy, screen.priority(), 0xf); |
439 | | else |
440 | | m_gfxdecode->gfx(which)->transpen(bitmap, cliprect, |
441 | | code, color, tile_flipx, tile_flipy, sx, sy, 0xf); |
| 382 | m_gfxdecode->gfx(which)->transpen(bitmap,cliprect, |
| 383 | tile + (attr & 0x3)*0x100 + gfxbank, |
| 384 | (((attr >> 2) & 0xf) ^ colorbank) + 0x10 * m_palettebank, // player2 in hardhea2 and sparkman |
| 385 | tile_flipx, tile_flipy, |
| 386 | sx, sy, 0xf); |
442 | 387 | } |
443 | 388 | } |
| 389 | |
444 | 390 | } |
445 | 391 | } |
446 | 392 | |
447 | | /*************************************************************************** |
448 | | |
449 | | [ Text Sprites Format ] |
450 | | |
451 | | Offset: Bits: Value: |
452 | | |
453 | | 0.b Tiles Y (height = 2 tiles) |
454 | | |
455 | | 1.b 7--- ---- 0 = Skip Sprite |
456 | | -6-- ---- |
457 | | --54 ---- Page |
458 | | ---- 3210 Tiles Column (width = 2 tiles) |
459 | | |
460 | | 2.b X |
461 | | |
462 | | 3.b 7--- ---- 0 = Last Sprite |
463 | | -6-- ---- X (Sign Bit) |
464 | | --54 3210 Tiles Bank ($400 tiles each) |
465 | | |
466 | | Each text sprite is 2x2 tiles |
467 | | |
468 | | ***************************************************************************/ |
469 | | |
470 | | void suna8_state::draw_text_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int start, int end, int ypos, bool write_mask) |
| 393 | void suna8_state::draw_text_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect) |
471 | 394 | { |
472 | 395 | UINT8 *spriteram = m_spriteram; |
| 396 | int i; |
473 | 397 | |
474 | 398 | int max_x = m_screen->width() - 8; |
475 | 399 | int max_y = m_screen->height() - 8; |
476 | 400 | |
477 | | bool last = false; |
478 | | for (int i = start; i < end && !last; i += 4) |
| 401 | for (i = 0x1900; i < 0x19ff; i += 4) |
479 | 402 | { |
480 | 403 | int srcpg, srcx,srcy, dimx,dimy, tx, ty; |
481 | 404 | |
r249118 | r249119 | |
485 | 408 | int bank = spriteram[i + 3]; |
486 | 409 | |
487 | 410 | if (~code & 0x80) continue; |
488 | | last = !(bank & 0x80); |
489 | 411 | |
490 | | dimx = 2; dimy = 2; |
491 | | srcx = (code & 0xf) * 2; srcy = ((y & 0xf8) - (ypos & 0xf8) - 0x10) / 8; |
| 412 | dimx = 2; dimy = m_text_dim; |
| 413 | srcx = (code & 0xf) * 2; srcy = (y & 0xf0) / 8; |
492 | 414 | srcpg = (code >> 4) & 3; |
493 | 415 | |
494 | 416 | x = x - ((bank & 0x40) ? 0x100 : 0); |
| 417 | y = 0; |
495 | 418 | |
496 | 419 | bank = (bank & 0x3f) * 0x400; |
497 | 420 | |
r249118 | r249119 | |
499 | 422 | { |
500 | 423 | for (tx = 0; tx < dimx; tx ++) |
501 | 424 | { |
| 425 | int real_ty = (ty < (dimy/2)) ? ty : (ty + 0x20 - dimy); |
| 426 | |
502 | 427 | int addr = (srcpg * 0x20 * 0x20) + |
503 | 428 | ((srcx + tx) & 0x1f) * 0x20 + |
504 | | ((srcy + ty) & 0x1f); |
| 429 | ((srcy + real_ty) & 0x1f); |
505 | 430 | |
506 | 431 | int tile = spriteram[addr*2 + 0]; |
507 | 432 | int attr = spriteram[addr*2 + 1]; |
r249118 | r249119 | |
510 | 435 | int flipy = attr & 0x80; |
511 | 436 | |
512 | 437 | int sx = x + tx * 8; |
513 | | int sy = (0xf0 - ypos + ty * 8) & 0xff; |
| 438 | int sy = (y + real_ty * 8) & 0xff; |
514 | 439 | |
515 | 440 | if (flip_screen()) |
516 | 441 | { |
r249118 | r249119 | |
518 | 443 | sy = max_y - sy; flipy = !flipy; |
519 | 444 | } |
520 | 445 | |
521 | | m_gfxdecode->gfx(0)->transpen(bitmap, cliprect, |
| 446 | m_gfxdecode->gfx(0)->transpen(bitmap,cliprect, |
522 | 447 | tile + (attr & 0x3)*0x100 + bank, |
523 | 448 | (attr >> 2) & 0xf, |
524 | 449 | flipx, flipy, |
525 | | sx, sy, 0xf ); |
| 450 | sx, sy, 0xf); |
526 | 451 | } |
527 | 452 | } |
528 | | } |
529 | 453 | |
530 | | if (write_mask) |
531 | | { |
532 | | // Fill the text sprites row with high priority for masking |
533 | | int sy = (0xf0 - ypos) & 0xff; |
534 | | if (flip_screen()) |
535 | | sy = max_y - sy - 8; |
536 | | rectangle text_clip(cliprect.min_x, cliprect.max_x, sy, sy + 0x10 - 1); |
537 | | text_clip &= cliprect; |
538 | | screen.priority().fill(1, text_clip); |
539 | 454 | } |
540 | 455 | } |
541 | 456 | |
r249118 | r249119 | |
549 | 464 | |
550 | 465 | UINT32 suna8_state::screen_update_suna8(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) |
551 | 466 | { |
552 | | // see hardhead, hardhea2 test mode (press button 2 for both players) |
| 467 | /* see hardhead, hardhea2 test mode (press button 2 for both players) */ |
553 | 468 | bitmap.fill(0xff, cliprect); |
554 | 469 | |
555 | 470 | #ifdef MAME_DEBUG |
r249118 | r249119 | |
566 | 481 | if (machine().input().code_pressed_once(KEYCODE_S)) { m_trombank++; machine().tilemap().mark_all_dirty(); } |
567 | 482 | |
568 | 483 | m_trombank &= 0xf; |
569 | | m_page &= m_has_text ? 3 : (m_gfxdecode->gfx(1) ? 15 : 7); |
| 484 | m_page &= m_text_dim ? 3 : (m_gfxdecode->gfx(1) ? 15 : 7); |
570 | 485 | m_tiles %= max_tiles; |
571 | 486 | if (m_tiles < 0) m_tiles += max_tiles; |
572 | 487 | |
r249118 | r249119 | |
578 | 493 | m_rombank, m_palettebank, m_spritebank, |
579 | 494 | m_page, m_tiles, m_trombank); |
580 | 495 | #endif |
581 | | return 0; |
582 | 496 | } |
| 497 | else |
583 | 498 | #endif |
584 | 499 | #endif |
| 500 | { |
| 501 | // Normal sprites |
| 502 | draw_normal_sprites(bitmap,cliprect, 0); |
585 | 503 | |
586 | | // Sprites |
587 | | draw_sprites(screen, bitmap, cliprect, 0x1d00, 0x2000, 0); |
| 504 | // More normal sprites (second sprite "chip" in sparkman) |
| 505 | if (m_gfxdecode->gfx(1)) |
| 506 | draw_normal_sprites(bitmap,cliprect, 1); |
588 | 507 | |
589 | | // More sprites (second sprite "chip" in sparkman) |
590 | | if (m_gfxdecode->gfx(1)) |
591 | | draw_sprites(screen, bitmap, cliprect, 0x1d00, 0x2000, 1); |
592 | | |
| 508 | // Text sprites (earlier games only) |
| 509 | if (m_text_dim) |
| 510 | draw_text_sprites(bitmap,cliprect); |
| 511 | } |
593 | 512 | return 0; |
594 | 513 | } |
trunk/src/mess/drivers/ie15.c
r249118 | r249119 | |
396 | 396 | |
397 | 397 | static ADDRESS_MAP_START( ie15_io, AS_IO, 8, ie15_state ) |
398 | 398 | ADDRESS_MAP_UNMAP_HIGH |
399 | | AM_RANGE(000, 000) AM_READWRITE(mem_r, mem_w) // 00h W: memory request, R: memory data [6.1.2.2] |
| 399 | AM_RANGE(000, 000) AM_READ(mem_r) AM_WRITE(mem_w) // 00h W: memory request, R: memory data [6.1.2.2] |
400 | 400 | AM_RANGE(001, 001) AM_READ(serial_rx_ready_r) AM_WRITENOP // 01h W: memory latch [6.1.2.2] |
401 | 401 | AM_RANGE(002, 002) AM_WRITE(mem_addr_hi_w) // 02h W: memory address high [6.1.2.2] |
402 | 402 | AM_RANGE(003, 003) AM_WRITE(mem_addr_lo_w) // 03h W: memory address low [6.1.2.2] |
403 | 403 | AM_RANGE(004, 004) AM_WRITE(mem_addr_inc_w) // 04h W: memory address counter + [6.1.2.2] |
404 | 404 | AM_RANGE(005, 005) AM_WRITE(mem_addr_dec_w) // 05h W: memory address counter - [6.1.2.2] |
405 | | AM_RANGE(006, 006) AM_READWRITE(serial_r, serial_w) // 06h W: serial port data [6.1.5.4] |
| 405 | AM_RANGE(006, 006) AM_READ(serial_r) AM_WRITE(serial_w) // 06h W: serial port data [6.1.5.4] |
406 | 406 | // port 7 is handled in cpu core |
407 | | AM_RANGE(010, 010) AM_READWRITE(serial_tx_ready_r, beep_w) // 08h W: speaker control [6.1.5.4] |
| 407 | AM_RANGE(010, 010) AM_READ(serial_tx_ready_r) AM_WRITE(beep_w) // 08h W: speaker control [6.1.5.4] |
408 | 408 | AM_RANGE(011, 011) AM_READ(kb_r) // 09h R: keyboard data [6.1.5.2] |
409 | 409 | AM_RANGE(012, 012) AM_READ(kb_s_red_r) // 0Ah I: keyboard mode "RED" [6.1.5.2] |
410 | 410 | AM_RANGE(013, 013) AM_READ(kb_ready_r) // 0Bh R: keyboard data ready [6.1.5.2] |
411 | | AM_RANGE(014, 014) AM_READWRITE(kb_s_sdv_r, serial_speed_w) // 0Ch W: serial port speed [6.1.3.1], R: keyboard mode "SDV" [6.1.5.2] |
412 | | AM_RANGE(015, 015) AM_READWRITE(kb_s_dk_r, kb_ready_w) // 0Dh I: keyboard mode "DK" [6.1.5.2] |
| 411 | AM_RANGE(014, 014) AM_READ(kb_s_sdv_r) AM_WRITE(serial_speed_w) // 0Ch W: serial port speed [6.1.3.1], R: keyboard mode "SDV" [6.1.5.2] |
| 412 | AM_RANGE(015, 015) AM_READ(kb_s_dk_r) AM_WRITE(kb_ready_w) // 0Dh I: keyboard mode "DK" [6.1.5.2] |
413 | 413 | AM_RANGE(016, 016) AM_READ(kb_s_dupl_r) // 0Eh I: keyboard mode "DUPL" [6.1.5.2] |
414 | 414 | AM_RANGE(017, 017) AM_READ(kb_s_lin_r) // 0Fh I: keyboard mode "LIN" [6.1.5.2] |
415 | 415 | // simulation of flag registers |
416 | | AM_RANGE(020, 027) AM_READWRITE(flag_r, flag_w) |
| 416 | AM_RANGE(020, 027) AM_READ(flag_r) AM_WRITE(flag_w) |
417 | 417 | ADDRESS_MAP_END |
418 | 418 | |
419 | 419 | /* Input ports */ |
r249118 | r249119 | |
454 | 454 | m_serial_tx_ready = m_serial_rx_ready = IE_TRUE; |
455 | 455 | set_data_frame(1 /* start bits */, 8 /* data bits */, PARITY_NONE, STOP_BITS_1); |
456 | 456 | // device supports rates from 150 to 9600 baud but null_modem has hardcoded 9600 |
457 | | set_rate(9600); |
| 457 | set_tra_rate(9600); |
| 458 | set_rcv_rate(9600); |
458 | 459 | } |
459 | 460 | |
460 | 461 | void ie15_state::video_start() |