trunk/src/mame/drivers/imolagp.c
| r20217 | r20218 | |
| 1 | 1 | /*************************************************************************** |
| 2 | | IMOLA GP by Alberici |
| 3 | 2 | |
| 4 | | todo: |
| 3 | IMOLA GP by RB Bologna (Alberici?) |
| 4 | |
| 5 | TODO: |
| 5 | 6 | - document remaining dips |
| 6 | | - bogus colors |
| 7 | | - need better mappings for accelerator/shifter |
| 8 | | - eliminate need for master-cpu communications hack |
| 7 | - need better mappings for shifter, currently 3 buttons |
| 8 | - improve analog steering |
| 9 | - correct timing (cpu and video) - see sprites disappear partially |
| 10 | - vreg[0xf] autosteering |
| 11 | - verify colors |
| 12 | |
| 9 | 13 | ======================================== |
| 10 | 14 | www.andys-arcade.com |
| 11 | 15 | |
| r20217 | r20218 | |
| 69 | 73 | Andy Welburn |
| 70 | 74 | www.andys-arcade.com |
| 71 | 75 | |
| 72 | | Known issues: |
| 73 | | - the 8255 is not hooked up |
| 74 | 76 | ***************************************************************************/ |
| 75 | 77 | |
| 76 | 78 | #include "emu.h" |
| r20217 | r20218 | |
| 81 | 83 | #include "imolagp.lh" |
| 82 | 84 | |
| 83 | 85 | |
| 84 | | #define HLE_COM |
| 85 | | |
| 86 | | |
| 87 | 86 | class imolagp_state : public driver_device |
| 88 | 87 | { |
| 89 | 88 | public: |
| 90 | 89 | imolagp_state(const machine_config &mconfig, device_type type, const char *tag) |
| 91 | 90 | : driver_device(mconfig, type, tag), |
| 92 | | m_maincpu(*this,"maincpu"), |
| 93 | | m_slave_workram(*this, "slave_workram"){ } |
| 91 | m_maincpu(*this, "maincpu"), |
| 92 | m_slavecpu(*this, "slave") |
| 93 | { } |
| 94 | 94 | |
| 95 | 95 | required_device<cpu_device> m_maincpu; |
| 96 | | required_shared_ptr<UINT8> m_slave_workram; // used only ifdef HLE_COM |
| 96 | required_device<cpu_device> m_slavecpu; |
| 97 | 97 | |
| 98 | | #ifdef HLE_COM |
| 99 | | UINT8 m_mComData[0x100]; |
| 100 | | int m_mComCount; |
| 101 | | |
| 102 | | #else |
| 103 | | UINT8 m_mLatchedData[2]; |
| 104 | | #endif |
| 105 | | |
| 106 | | UINT8 m_control; |
| 98 | UINT8 m_videoram[2][0x4000]; // 2 layers of 16KB |
| 99 | UINT8 m_comms_latch[2]; |
| 100 | UINT8 m_vcontrol; |
| 101 | UINT8 m_vreg[0x10]; |
| 107 | 102 | UINT8 m_scroll; |
| 108 | 103 | UINT8 m_steerlatch; |
| 109 | | int m_draw_mode; |
| 110 | | int m_oldsteer; |
| 104 | UINT8 m_draw_mode; |
| 105 | UINT8 m_oldsteer; |
| 111 | 106 | |
| 112 | | /* devices */ |
| 113 | | cpu_device *m_slavecpu; |
| 114 | | |
| 115 | | /* memory */ |
| 116 | | UINT8 m_videoram[3][0x4000]; |
| 117 | | |
| 118 | 107 | DECLARE_WRITE8_MEMBER(transmit_data_w); |
| 119 | 108 | DECLARE_READ8_MEMBER(trigger_slave_nmi_r); |
| 120 | 109 | DECLARE_READ8_MEMBER(receive_data_r); |
| 121 | | DECLARE_WRITE8_MEMBER(imola_ledram_w); |
| 122 | | DECLARE_READ8_MEMBER(steerlatch_r); |
| 110 | DECLARE_WRITE8_MEMBER(imola_led_board_w); |
| 111 | DECLARE_READ8_MEMBER(vreg_data_r); |
| 123 | 112 | DECLARE_WRITE8_MEMBER(screenram_w); |
| 124 | | DECLARE_READ8_MEMBER(imola_slave_port05r); |
| 125 | | DECLARE_READ8_MEMBER(imola_slave_port06r); |
| 126 | | DECLARE_READ8_MEMBER(imola_slave_port81r); |
| 127 | | DECLARE_READ8_MEMBER(imola_slave_port82r); |
| 113 | DECLARE_READ8_MEMBER(imola_draw_mode_r); |
| 128 | 114 | DECLARE_WRITE8_MEMBER(vreg_control_w); |
| 129 | 115 | DECLARE_WRITE8_MEMBER(vreg_data_w); |
| 116 | DECLARE_CUSTOM_INPUT_MEMBER(imolagp_steerlatch_r); |
| 117 | INTERRUPT_GEN_MEMBER(slave_vblank_irq); |
| 118 | |
| 130 | 119 | virtual void machine_start(); |
| 131 | 120 | virtual void machine_reset(); |
| 132 | 121 | virtual void video_start(); |
| 122 | virtual void palette_init(); |
| 133 | 123 | UINT32 screen_update_imolagp(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 134 | | INTERRUPT_GEN_MEMBER(vblank_irq); |
| 135 | 124 | }; |
| 136 | 125 | |
| 137 | 126 | |
| 138 | | #ifdef HLE_COM |
| 127 | /*************************************************************************** |
| 139 | 128 | |
| 140 | | WRITE8_MEMBER(imolagp_state::transmit_data_w) |
| 141 | | { |
| 142 | | m_mComData[m_mComCount++] = data; |
| 143 | | } |
| 129 | Video |
| 144 | 130 | |
| 145 | | READ8_MEMBER(imolagp_state::trigger_slave_nmi_r) |
| 146 | | { |
| 147 | | return 0; |
| 148 | | } |
| 131 | ***************************************************************************/ |
| 149 | 132 | |
| 150 | | READ8_MEMBER(imolagp_state::receive_data_r) |
| 133 | void imolagp_state::palette_init() |
| 151 | 134 | { |
| 152 | | return 0; |
| 153 | | } |
| 154 | | |
| 155 | | #else |
| 156 | | /* the master cpu transmits data to the slave CPU one word at a time using a rapid sequence of triggered NMIs |
| 157 | | * the slave cpu pauses as it enters its irq, awaiting this burst of data |
| 158 | | */ |
| 159 | | WRITE8_MEMBER(imolagp_state::transmit_data_w) |
| 160 | | { |
| 161 | | m_mLatchedData[offset] = data; |
| 162 | | } |
| 163 | | READ8_MEMBER(imolagp_state::trigger_slave_nmi_r) |
| 164 | | { |
| 165 | | m_slave->execute().set_input_line(INPUT_LINE_NMI, PULSE_LINE); |
| 166 | | return 0; |
| 167 | | } |
| 168 | | |
| 169 | | READ8_MEMBER(imolagp_state::receive_data_r) |
| 170 | | { |
| 171 | | return m_mLatchedData[offset]; |
| 172 | | } |
| 173 | | #endif |
| 174 | | |
| 175 | | static void initialize_colors( running_machine &machine ) |
| 176 | | { |
| 177 | | /* optional runtime remapping of colors */ |
| 178 | | static const UINT8 color[0x10][3] = |
| 179 | | { /* wrong! need color-accurate screenshots to fix */ |
| 180 | | { 0x44,0x44,0x00 }, |
| 181 | | { 0x7f,0xff,0xff }, |
| 182 | | { 0xff,0x00,0x7f }, /* opp car */ |
| 183 | | { 0x00,0x00,0xff }, /* road(2) */ |
| 184 | | { 0xff,0xff,0x00 }, |
| 185 | | { 0x00,0x88,0x00 }, /* grass */ |
| 186 | | { 0x7f,0x00,0x00 }, |
| 187 | | { 0x00,0xff,0xff }, /* house front */ |
| 188 | | { 0xff,0x00,0x00 }, /* player car body */ |
| 189 | | { 0xff,0x00,0x00 }, /* house roof right */ |
| 190 | | { 0xff,0x7f,0x00 }, |
| 191 | | { 0xff,0x00,0xff }, /* house roof left */ |
| 192 | | { 0xff,0xff,0xff }, /* rescue truck trim */ |
| 193 | | { 0xff,0xff,0x00 }, /* roadside grass */ |
| 194 | | { 0xff,0xff,0xff }, /* driveway, headlight */ |
| 195 | | { 0xff,0xff,0xff } /* house crease, door */ |
| 196 | | }; |
| 197 | | int i; |
| 198 | | for (i = 0; i < 0x10; i++) |
| 135 | // palette seems like 3bpp + intensity |
| 136 | for (int i = 0; i < 8; i++) |
| 199 | 137 | { |
| 200 | | palette_set_color_rgb( machine, i * 2 + 0, 0, 0, 0 ); |
| 201 | | palette_set_color_rgb( machine, i * 2 + 1, color[i][0], color[i][1], color[i][2] ); |
| 138 | palette_set_color_rgb(machine(), i*4+0, 0, 0, 0); |
| 139 | palette_set_color_rgb(machine(), i*4+1, pal1bit(i >> 2)/2, pal1bit(i >> 1)/2, pal1bit(i >> 0)/2); |
| 140 | palette_set_color_rgb(machine(), i*4+2, 0, 0, 0); |
| 141 | palette_set_color_rgb(machine(), i*4+3, pal1bit(i >> 2), pal1bit(i >> 1), pal1bit(i >> 0)); |
| 202 | 142 | } |
| 203 | 143 | } |
| 204 | 144 | |
| r20217 | r20218 | |
| 206 | 146 | { |
| 207 | 147 | memset(m_videoram, 0, sizeof(m_videoram)); |
| 208 | 148 | save_item(NAME(m_videoram)); |
| 209 | | |
| 210 | | initialize_colors(machine()); |
| 211 | 149 | } |
| 212 | 150 | |
| 213 | 151 | |
| 214 | 152 | UINT32 imolagp_state::screen_update_imolagp(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) |
| 215 | 153 | { |
| 216 | | int scroll2 = m_scroll ^ 0x03; |
| 217 | | int pass; |
| 218 | | for (pass = 0; pass < 2; pass++) |
| 154 | // draw solid background layer first, then sprites on top |
| 155 | for (int layer = 0; layer < 2; layer++) |
| 219 | 156 | { |
| 220 | | int i; |
| 221 | | const UINT8 *source = m_videoram[pass * 2]; |
| 222 | | |
| 223 | | for (i = 0; i < 0x4000; i++) |
| 157 | for (int y = cliprect.min_y; y <= cliprect.max_y; y++) |
| 224 | 158 | { |
| 225 | | int pen; |
| 226 | | int y = (i / 0x40); |
| 227 | | int x = (i & 0x3f) * 4 - scroll2; |
| 159 | const UINT8 *source = &m_videoram[layer][(y & 0xff) * 0x40]; |
| 228 | 160 | UINT16 *dest = &bitmap.pix16(y & 0xff); |
| 229 | | int data = source[i]; |
| 230 | | if (data || pass == 0) |
| 161 | for (int i = 0; i < 0x40; i++) |
| 231 | 162 | { |
| 232 | | int color = (data & 0xf0) >> 3; |
| 233 | | data &= 0x0f; |
| 234 | | pen = ((data >> 3) & 1); dest[(x + 3) & 0xff] = color | pen; |
| 235 | | pen = ((data >> 2) & 1); dest[(x + 2) & 0xff] = color | pen; |
| 236 | | pen = ((data >> 1) & 1); dest[(x + 1) & 0xff] = color | pen; |
| 237 | | pen = ((data >> 0) & 1); dest[(x + 0) & 0xff] = color | pen; |
| 163 | UINT8 data = source[i]; |
| 164 | if (data || layer == 0) |
| 165 | { |
| 166 | // one color per each 4 pixels |
| 167 | UINT8 color = (data & 0xf0) >> 3; |
| 168 | UINT8 x = (i << 2) - (m_scroll ^ 3); |
| 169 | for (int x2 = 0; x2 < 4; x2++) |
| 170 | { |
| 171 | UINT8 offset = x + x2; |
| 172 | if (offset >= cliprect.min_x && offset <= cliprect.max_x) |
| 173 | dest[offset] = color | (data >> x2 & 1); |
| 174 | } |
| 175 | } |
| 238 | 176 | } |
| 239 | 177 | } |
| 240 | 178 | } |
| 179 | |
| 241 | 180 | return 0; |
| 242 | 181 | } |
| 243 | 182 | |
| 244 | | WRITE8_MEMBER(imolagp_state::imola_ledram_w) |
| 245 | | { |
| 246 | | data &= 0xf; |
| 247 | 183 | |
| 248 | | switch (offset) |
| 249 | | { |
| 250 | | case 0x00: output_set_value("score1000", data); break; |
| 251 | | case 0x01: output_set_value("score100", data); break; |
| 252 | | case 0x02: output_set_value("score10", data); break; |
| 253 | | case 0x03: output_set_value("score1", data); break; |
| 254 | | case 0x04: output_set_value("time10", data ); break; |
| 255 | | case 0x05: output_set_value("time1", data ); break; |
| 256 | 184 | |
| 257 | | case 0x08: output_set_value("hs5_10", data); break; |
| 258 | | case 0x09: output_set_value("hs5_1", data); break; |
| 185 | /*************************************************************************** |
| 259 | 186 | |
| 260 | | case 0x10: output_set_value("hs4_1000", data); break; |
| 261 | | case 0x11: output_set_value("hs4_100", data); break; |
| 262 | | case 0x12: output_set_value("hs4_10", data); break; |
| 263 | | case 0x13: output_set_value("hs4_1", data); break; |
| 264 | | case 0x14: output_set_value("hs5_1000", data); break; |
| 265 | | case 0x15: output_set_value("hs5_100", data); break; |
| 187 | I/O and Memory Maps |
| 266 | 188 | |
| 267 | | case 0x0a: output_set_value("numplays10", data ); break; |
| 268 | | case 0x0b: output_set_value("numplays1", data ); break; |
| 269 | | case 0x0c: output_set_value("credit10", data); break; |
| 270 | | case 0x0d: output_set_value("credit1", data); break; |
| 189 | ***************************************************************************/ |
| 271 | 190 | |
| 272 | | case 0x18: output_set_value("hs2_10", data); break; |
| 273 | | case 0x19: output_set_value("hs2_1", data); break; |
| 274 | | case 0x1a: output_set_value("hs3_1000", data); break; |
| 275 | | case 0x1b: output_set_value("hs3_100", data); break; |
| 276 | | case 0x1c: output_set_value("hs3_10", data); break; |
| 277 | | case 0x1d: output_set_value("hs3_1", data); break; |
| 278 | | |
| 279 | | case 0x20: output_set_value("hs1_1000", data); break; |
| 280 | | case 0x21: output_set_value("hs1_100", data); break; |
| 281 | | case 0x22: output_set_value("hs1_10", data); break; |
| 282 | | case 0x23: output_set_value("hs1_1", data); break; |
| 283 | | case 0x24: output_set_value("hs2_1000", data); break; |
| 284 | | case 0x25: output_set_value("hs2_100", data); break; |
| 285 | | |
| 286 | | default: |
| 287 | | break; |
| 288 | | } |
| 191 | /* The master CPU transmits data to the slave CPU one word at a time using a rapid sequence of triggered NMIs. |
| 192 | * The slave CPU pauses as it enters its irq, awaiting this burst of data. |
| 193 | * Handling the NMI takes more time than triggering the NMI, implying that the slave CPU either runs at |
| 194 | * a higher clock, or has a way to force the main CPU to wait. |
| 195 | */ |
| 196 | WRITE8_MEMBER(imolagp_state::transmit_data_w) |
| 197 | { |
| 198 | m_comms_latch[offset] = data; |
| 289 | 199 | } |
| 290 | 200 | |
| 291 | | READ8_MEMBER(imolagp_state::steerlatch_r) |
| 201 | READ8_MEMBER(imolagp_state::receive_data_r) |
| 292 | 202 | { |
| 293 | | return m_steerlatch; |
| 203 | return m_comms_latch[offset]; |
| 294 | 204 | } |
| 295 | 205 | |
| 296 | | WRITE8_MEMBER(imolagp_state::screenram_w) |
| 297 | | { /* ?! */ |
| 298 | | switch (m_draw_mode) |
| 299 | | { |
| 300 | | case 0x82: |
| 301 | | case 0x81: |
| 302 | | case 0x05: |
| 303 | | m_videoram[1][offset] = data; |
| 304 | | break; |
| 305 | | case 0x06: |
| 306 | | m_videoram[0][offset] = data; |
| 307 | | break; |
| 308 | | default: |
| 309 | | break; |
| 310 | | } |
| 206 | READ8_MEMBER(imolagp_state::trigger_slave_nmi_r) |
| 207 | { |
| 208 | m_slavecpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); |
| 209 | return 0; |
| 311 | 210 | } |
| 312 | 211 | |
| 313 | | READ8_MEMBER(imolagp_state::imola_slave_port05r) |
| 212 | |
| 213 | WRITE8_MEMBER(imolagp_state::imola_led_board_w) |
| 314 | 214 | { |
| 315 | | memcpy(m_videoram[2], m_videoram[1], 0x4000); /* hack! capture before sprite plane is erased */ |
| 316 | | m_draw_mode = 0x05; |
| 317 | | return 0; |
| 215 | // not sure what chip is used here, this is copied from turbo.c |
| 216 | static const UINT8 ls48_map[16] = |
| 217 | { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7c,0x07,0x7f,0x67,0x58,0x4c,0x62,0x69,0x78,0x00 }; |
| 218 | |
| 219 | output_set_digit_value(offset, ls48_map[data & 0x0f]); |
| 220 | /* |
| 221 | score: 0, 1, 2, 3 |
| 222 | time: 4, 5 |
| 223 | result: 10, 11 |
| 224 | credits: 12, 13 |
| 225 | highscore 1: 32, 33, 34, 35 |
| 226 | highscore 2: 36, 37, 24, 25 |
| 227 | highscore 3: 26, 27, 28, 29 |
| 228 | highscore 4: 16, 17, 18, 19 |
| 229 | highscore 5: 20, 21, 8, 9 |
| 230 | */ |
| 318 | 231 | } |
| 319 | 232 | |
| 320 | | READ8_MEMBER(imolagp_state::imola_slave_port06r) |
| 233 | |
| 234 | WRITE8_MEMBER(imolagp_state::vreg_control_w) |
| 321 | 235 | { |
| 322 | | m_draw_mode = 0x06; |
| 323 | | return 0; |
| 236 | m_vcontrol = data & 0xf; |
| 324 | 237 | } |
| 325 | 238 | |
| 326 | | READ8_MEMBER(imolagp_state::imola_slave_port81r) |
| 239 | READ8_MEMBER(imolagp_state::vreg_data_r) |
| 327 | 240 | { |
| 328 | | m_draw_mode = 0x81; |
| 329 | | memcpy(m_videoram[2], m_videoram[1], 0x4000); /* hack! capture before sprite plane is erased */ |
| 330 | 241 | return 0; |
| 242 | //return 0xf7; // -> go left? |
| 243 | //return 0x17; // it checks for this too |
| 331 | 244 | } |
| 332 | 245 | |
| 333 | | READ8_MEMBER(imolagp_state::imola_slave_port82r) |
| 246 | WRITE8_MEMBER(imolagp_state::vreg_data_w) |
| 334 | 247 | { |
| 335 | | m_draw_mode = 0x82; |
| 336 | | return 0; |
| 248 | // $07: always $ff? |
| 249 | // $0e: x scroll |
| 250 | // $0f: auto-steer related |
| 251 | m_vreg[m_vcontrol] = data; |
| 337 | 252 | } |
| 338 | 253 | |
| 339 | | WRITE8_MEMBER(imolagp_state::vreg_control_w) |
| 254 | |
| 255 | WRITE8_MEMBER(imolagp_state::screenram_w) |
| 340 | 256 | { |
| 341 | | m_control = data; |
| 257 | // when in tunnel: $81/$82 -> sprite ram? |
| 258 | if (m_draw_mode & 0x80) |
| 259 | m_videoram[1][offset] = data; |
| 260 | |
| 261 | // sprites: $05 |
| 262 | else if (m_draw_mode & 0x01) |
| 263 | m_videoram[1][offset] = data; |
| 264 | |
| 265 | // background: $06 |
| 266 | else |
| 267 | m_videoram[0][offset] = data; |
| 342 | 268 | } |
| 343 | 269 | |
| 344 | | WRITE8_MEMBER(imolagp_state::vreg_data_w) |
| 270 | READ8_MEMBER(imolagp_state::imola_draw_mode_r) |
| 345 | 271 | { |
| 346 | | switch (m_control) |
| 347 | | { |
| 348 | | case 0x0e: |
| 349 | | m_scroll = data; |
| 350 | | break; |
| 351 | | case 0x07: /* always 0xff? */ |
| 352 | | case 0x0f: /* 0xff or 0x00 */ |
| 353 | | default: |
| 354 | | logerror("vreg[0x%02x]:=0x%02x\n", m_control, data); |
| 355 | | break; |
| 356 | | } |
| 272 | // the game reads a port before and after writing to screen ram |
| 273 | m_draw_mode = offset; |
| 274 | return 0; |
| 357 | 275 | } |
| 358 | 276 | |
| 359 | | static ADDRESS_MAP_START( readport_master, AS_IO, 8, imolagp_state ) |
| 360 | | ADDRESS_MAP_GLOBAL_MASK(0xff) |
| 361 | | AM_RANGE(0x00, 0x00) AM_READ(trigger_slave_nmi_r) |
| 362 | | ADDRESS_MAP_END |
| 363 | | |
| 364 | | static ADDRESS_MAP_START( imolagp_master, AS_PROGRAM, 8, imolagp_state ) |
| 277 | static ADDRESS_MAP_START( imolagp_master_map, AS_PROGRAM, 8, imolagp_state ) |
| 365 | 278 | AM_RANGE(0x0000, 0x1fff) AM_ROM |
| 366 | 279 | AM_RANGE(0x2000, 0x23ff) AM_RAM |
| 367 | | AM_RANGE(0x2800, 0x2800) AM_READ_PORT("2800") /* gas */ |
| 368 | | AM_RANGE(0x2802, 0x2802) AM_READ(steerlatch_r) AM_WRITENOP |
| 369 | | /* AM_RANGE(0x2803, 0x2803) ? */ |
| 280 | AM_RANGE(0x2800, 0x2803) AM_DEVREADWRITE("ppi8255", i8255_device, read, write) |
| 370 | 281 | AM_RANGE(0x3000, 0x3000) AM_WRITE(vreg_control_w) |
| 371 | 282 | AM_RANGE(0x37f0, 0x37f0) AM_DEVWRITE_LEGACY("aysnd", ay8910_address_w) |
| 372 | | /* AM_RANGE(0x37f7, 0x37f7) ? */ |
| 373 | | AM_RANGE(0x3800, 0x3800) AM_WRITE(vreg_data_w) |
| 283 | // AM_RANGE(0x37f7, 0x37f7) AM_NOP |
| 284 | AM_RANGE(0x3800, 0x3800) AM_READWRITE(vreg_data_r, vreg_data_w) |
| 374 | 285 | AM_RANGE(0x3810, 0x3810) AM_DEVWRITE_LEGACY("aysnd", ay8910_data_w) |
| 375 | | AM_RANGE(0x4000, 0x4000) AM_READ_PORT("DSWA") /* DSWA */ |
| 376 | | AM_RANGE(0x5000, 0x50ff) AM_WRITE(imola_ledram_w) |
| 286 | AM_RANGE(0x4000, 0x4000) AM_READ_PORT("DSWA") |
| 377 | 287 | AM_RANGE(0x47ff, 0x4800) AM_WRITE(transmit_data_w) |
| 378 | | AM_RANGE(0x6000, 0x6000) AM_READ_PORT("DSWB") /* DSWB */ |
| 288 | AM_RANGE(0x5000, 0x50ff) AM_WRITE(imola_led_board_w) |
| 289 | AM_RANGE(0x5800, 0x5800) AM_READ_PORT("DSWA") // assume mirror |
| 290 | AM_RANGE(0x6000, 0x6000) AM_READ_PORT("DSWB") |
| 379 | 291 | ADDRESS_MAP_END |
| 380 | 292 | |
| 381 | | static ADDRESS_MAP_START( readport_slave, AS_IO, 8, imolagp_state ) |
| 293 | static ADDRESS_MAP_START( imolagp_master_io, AS_IO, 8, imolagp_state ) |
| 382 | 294 | ADDRESS_MAP_GLOBAL_MASK(0xff) |
| 383 | | AM_RANGE(0x05,0x05) AM_READ(imola_slave_port05r) |
| 384 | | AM_RANGE(0x06,0x06) AM_READ(imola_slave_port06r) |
| 385 | | AM_RANGE(0x81,0x81) AM_READ(imola_slave_port81r) |
| 386 | | AM_RANGE(0x82,0x82) AM_READ(imola_slave_port82r) |
| 295 | AM_RANGE(0x00, 0x00) AM_READ(trigger_slave_nmi_r) |
| 387 | 296 | ADDRESS_MAP_END |
| 388 | 297 | |
| 389 | | static ADDRESS_MAP_START( imolagp_slave, AS_PROGRAM, 8, imolagp_state ) |
| 390 | | AM_RANGE(0x0000, 0x03ff) AM_ROM |
| 391 | | AM_RANGE(0x0800, 0x0bff) AM_ROM |
| 392 | | AM_RANGE(0x1000, 0x13ff) AM_ROM |
| 393 | | AM_RANGE(0x1c00, 0x3fff) AM_ROM |
| 394 | | AM_RANGE(0x4000, 0x43ff) AM_RAM AM_SHARE("slave_workram") |
| 298 | |
| 299 | static ADDRESS_MAP_START( imolagp_slave_map, AS_PROGRAM, 8, imolagp_state ) |
| 300 | AM_RANGE(0x0000, 0x3fff) AM_ROM |
| 301 | AM_RANGE(0x4000, 0x43ff) AM_RAM |
| 395 | 302 | AM_RANGE(0x9fff, 0xa000) AM_READ(receive_data_r) |
| 396 | 303 | AM_RANGE(0xc000, 0xffff) AM_WRITE(screenram_w) |
| 397 | 304 | ADDRESS_MAP_END |
| 398 | 305 | |
| 306 | static ADDRESS_MAP_START( imolagp_slave_io, AS_IO, 8, imolagp_state ) |
| 307 | ADDRESS_MAP_GLOBAL_MASK(0xff) |
| 308 | AM_RANGE(0x00,0xff) AM_READ(imola_draw_mode_r) |
| 309 | ADDRESS_MAP_END |
| 399 | 310 | |
| 311 | |
| 312 | |
| 313 | /*************************************************************************** |
| 314 | |
| 315 | Inputs |
| 316 | |
| 317 | ***************************************************************************/ |
| 318 | |
| 319 | CUSTOM_INPUT_MEMBER(imolagp_state::imolagp_steerlatch_r) |
| 320 | { |
| 321 | return m_steerlatch & 0xf; |
| 322 | } |
| 323 | |
| 400 | 324 | static INPUT_PORTS_START( imolagp ) |
| 401 | 325 | PORT_START("DSWA") /* 0x4000 */ |
| 402 | 326 | PORT_DIPNAME( 0x07, 0x00, DEF_STR( Coin_A ) ) |
| r20217 | r20218 | |
| 408 | 332 | PORT_DIPSETTING( 0x02, DEF_STR( 3C_1C ) ) |
| 409 | 333 | PORT_DIPSETTING( 0x01, DEF_STR( 2C_1C ) ) |
| 410 | 334 | PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) ) |
| 411 | | PORT_DIPNAME( 0x18, 0x00, DEF_STR( Unknown ) ) /* ? */ |
| 412 | | PORT_DIPSETTING( 0x00, "DSWA-0" ) |
| 413 | | PORT_DIPSETTING( 0x08, "DSWA-1" ) |
| 414 | | PORT_DIPSETTING( 0x10, "DSWA-2" ) |
| 415 | | PORT_DIPSETTING( 0x18, "DSWA-3" ) |
| 335 | PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) ) |
| 336 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 337 | PORT_DIPSETTING( 0x08, DEF_STR( On ) ) |
| 338 | PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) |
| 339 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 340 | PORT_DIPSETTING( 0x10, DEF_STR( On ) ) |
| 416 | 341 | PORT_DIPNAME( 0xe0, 0x00, DEF_STR( Test ) ) |
| 417 | 342 | PORT_DIPSETTING( 0x00, DEF_STR(Off) ) |
| 418 | 343 | PORT_DIPSETTING( 0x20, "TEST A" ) |
| r20217 | r20218 | |
| 433 | 358 | PORT_DIPSETTING( 0x02, DEF_STR( 3C_1C ) ) |
| 434 | 359 | PORT_DIPSETTING( 0x01, DEF_STR( 2C_1C ) ) |
| 435 | 360 | PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) ) |
| 436 | | PORT_DIPNAME( 0x18, 0x00, DEF_STR( Unknown ) ) /* ? */ |
| 437 | | PORT_DIPSETTING( 0x00, "DSWB-0" ) |
| 438 | | PORT_DIPSETTING( 0x08, "DSWB-1" ) |
| 439 | | PORT_DIPSETTING( 0x10, "DSWB-2" ) |
| 440 | | PORT_DIPSETTING( 0x18, "DSWB-3" ) |
| 361 | PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) ) |
| 362 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 363 | PORT_DIPSETTING( 0x08, DEF_STR( On ) ) |
| 364 | PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) |
| 365 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 366 | PORT_DIPSETTING( 0x10, DEF_STR( On ) ) |
| 441 | 367 | PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) ) |
| 442 | | PORT_DIPSETTING( 0x00, "DSWB-0" ) |
| 443 | | PORT_DIPSETTING( 0x20, "DSWB-1" ) |
| 368 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 369 | PORT_DIPSETTING( 0x20, DEF_STR( On ) ) |
| 444 | 370 | PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unused ) ) |
| 445 | 371 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 446 | 372 | PORT_DIPSETTING( 0x40, DEF_STR( On ) ) |
| r20217 | r20218 | |
| 448 | 374 | PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) |
| 449 | 375 | PORT_DIPSETTING( 0x80, DEF_STR( On ) ) |
| 450 | 376 | |
| 451 | | PORT_START("2800") /* 2800 */ /* speed: 08 00 0F 1C 0F 00 1E 3D */ |
| 452 | | // PORT_DIPNAME( 0x03, 0x03, "Pedal" ) |
| 453 | | // PORT_DIPSETTING( 0x01, "STOPPED" ) |
| 454 | | // PORT_DIPSETTING( 0x00, "SLOW" ) |
| 455 | | // PORT_DIPSETTING( 0x02, "MEDIUM" ) |
| 456 | | // PORT_DIPSETTING( 0x03, "FAST" ) |
| 377 | PORT_START("IN0") |
| 378 | PORT_BIT( 0x0f, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, imolagp_state, imolagp_steerlatch_r, NULL) |
| 379 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 380 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN1 ) |
| 381 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN2 ) |
| 382 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 383 | |
| 384 | PORT_START("IN1") |
| 457 | 385 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) |
| 458 | 386 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) |
| 459 | | // PORT_DIPNAME( 0x04, 0x04, "Stick Shift" ) |
| 460 | | // PORT_DIPSETTING( 0x0, DEF_STR(Low) ) |
| 461 | | // PORT_DIPSETTING( 0x4, DEF_STR(High) ) |
| 462 | 387 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) |
| 388 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 389 | |
| 390 | PORT_START("STEER") |
| 391 | PORT_BIT( 0x0f, 0x00, IPT_DIAL ) PORT_SENSITIVITY(100) PORT_KEYDELTA(1) |
| 392 | INPUT_PORTS_END |
| 393 | |
| 394 | |
| 395 | static INPUT_PORTS_START( imolagpo ) |
| 396 | PORT_INCLUDE( imolagp ) |
| 397 | |
| 398 | PORT_MODIFY("IN0") |
| 399 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) |
| 400 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) |
| 401 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) |
| 463 | 402 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN1 ) |
| 464 | 403 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN2 ) |
| 465 | | PORT_BIT( 0xe0, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 404 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 405 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 406 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) |
| 466 | 407 | |
| 467 | | PORT_START("2802") /* 2802 */ |
| 468 | | PORT_BIT( 0x0f, 0x00, IPT_DIAL ) PORT_SENSITIVITY(100) PORT_KEYDELTA(1) PORT_PLAYER(1) |
| 408 | PORT_MODIFY("IN1") |
| 409 | PORT_BIT( 0x0f, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, imolagp_state, imolagp_steerlatch_r, NULL) |
| 469 | 410 | INPUT_PORTS_END |
| 470 | 411 | |
| 471 | | /***************************************************************************/ |
| 472 | 412 | |
| 473 | 413 | |
| 414 | /*************************************************************************** |
| 415 | |
| 416 | Machine Config |
| 417 | |
| 418 | ***************************************************************************/ |
| 419 | |
| 474 | 420 | static TIMER_DEVICE_CALLBACK ( imolagp_nmi_cb ) |
| 475 | 421 | { |
| 476 | 422 | imolagp_state *state = timer.machine().driver_data<imolagp_state>(); |
| 477 | | |
| 423 | int newsteer = timer.machine().root_device().ioport("STEER")->read() & 0xf; |
| 424 | if (newsteer != state->m_oldsteer) |
| 478 | 425 | { |
| 479 | | int newsteer = timer.machine().root_device().ioport("2802")->read() & 0xf; |
| 480 | | if (newsteer != state->m_oldsteer) |
| 426 | if ((newsteer - state->m_oldsteer) & 0x8) |
| 481 | 427 | { |
| 482 | | if (state->m_steerlatch == 0) |
| 483 | | state->m_steerlatch = 0x03; |
| 484 | | else if ((newsteer - state->m_oldsteer) & 0x8) |
| 485 | | { |
| 486 | | state->m_steerlatch = ((state->m_steerlatch << 1) | (state->m_steerlatch >> 3)) & 0xf; |
| 487 | | state->m_oldsteer = (state->m_oldsteer - 1) & 0xf; |
| 488 | | } |
| 489 | | else |
| 490 | | { |
| 491 | | state->m_oldsteer = (state->m_oldsteer + 1) & 0xf; |
| 492 | | } |
| 493 | | state->m_maincpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); |
| 428 | // shift |
| 429 | state->m_steerlatch = (state->m_steerlatch << 1) | (~state->m_steerlatch >> 1 & 1); |
| 430 | state->m_oldsteer = (state->m_oldsteer - 1) & 0xf; |
| 494 | 431 | } |
| 432 | else |
| 433 | { |
| 434 | state->m_oldsteer = (state->m_oldsteer + 1) & 0xf; |
| 435 | } |
| 436 | state->m_maincpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); |
| 495 | 437 | } |
| 496 | 438 | } |
| 497 | 439 | |
| 498 | | INTERRUPT_GEN_MEMBER(imolagp_state::vblank_irq) |
| 440 | INTERRUPT_GEN_MEMBER(imolagp_state::slave_vblank_irq) |
| 499 | 441 | { |
| 500 | | #ifdef HLE_COM |
| 501 | | memcpy(&m_slave_workram[0x80], m_mComData, m_mComCount); |
| 502 | | m_mComCount = 0; |
| 503 | | #endif |
| 442 | m_scroll = m_vreg[0xe]; // latch scroll |
| 504 | 443 | device.execute().set_input_line(0, HOLD_LINE); |
| 505 | | } /* master_interrupt */ |
| 444 | } |
| 506 | 445 | |
| 507 | 446 | |
| 508 | 447 | static I8255A_INTERFACE( ppi8255_intf ) |
| 509 | 448 | { |
| 510 | | DEVCB_NULL, /* Port A read */ |
| 511 | | DEVCB_NULL, /* Port A write */ |
| 512 | | DEVCB_NULL, /* Port B read */ |
| 513 | | DEVCB_NULL, /* Port B write */ |
| 514 | | DEVCB_NULL, /* Port C read */ |
| 515 | | DEVCB_NULL, /* Port C write */ |
| 449 | // mode $91 - ports A & C-lower as input, ports B & C-upper as output |
| 450 | DEVCB_INPUT_PORT("IN0"), |
| 451 | DEVCB_NULL, |
| 452 | DEVCB_UNMAPPED, |
| 453 | DEVCB_UNMAPPED, |
| 454 | DEVCB_INPUT_PORT("IN1"), |
| 455 | DEVCB_NULL |
| 516 | 456 | }; |
| 517 | 457 | |
| 518 | 458 | |
| 519 | 459 | void imolagp_state::machine_start() |
| 520 | 460 | { |
| 521 | | m_slavecpu = machine().device<cpu_device>("slave"); |
| 522 | | |
| 523 | | save_item(NAME(m_control)); |
| 461 | save_item(NAME(m_vcontrol)); |
| 462 | save_item(NAME(m_vreg)); |
| 524 | 463 | save_item(NAME(m_scroll)); |
| 525 | 464 | save_item(NAME(m_steerlatch)); |
| 526 | 465 | save_item(NAME(m_draw_mode)); |
| 527 | 466 | save_item(NAME(m_oldsteer)); |
| 528 | | #ifdef HLE_COM |
| 529 | | save_item(NAME(m_mComData)); |
| 530 | | save_item(NAME(m_mComCount)); |
| 531 | | #else |
| 532 | | save_item(NAME(m_mLatchedData)); |
| 533 | | #endif |
| 467 | save_item(NAME(m_comms_latch)); |
| 534 | 468 | } |
| 535 | 469 | |
| 536 | 470 | void imolagp_state::machine_reset() |
| 537 | 471 | { |
| 538 | | m_control = 0; |
| 539 | | m_scroll = 0; |
| 540 | | m_steerlatch = 0; |
| 541 | | m_draw_mode = 0; |
| 542 | | m_oldsteer = 0; |
| 543 | | #ifdef HLE_COM |
| 544 | | m_mComCount = 0; |
| 545 | | memset(m_mComData, 0, 0x100); |
| 546 | | #else |
| 547 | | m_mLatchedData[0] = 0; |
| 548 | | m_mLatchedData[1] = 0; |
| 549 | | #endif |
| 550 | 472 | } |
| 551 | 473 | |
| 552 | 474 | static MACHINE_CONFIG_START( imolagp, imolagp_state ) |
| 553 | 475 | |
| 554 | | MCFG_CPU_ADD("maincpu", Z80,8000000) /* ? */ |
| 555 | | MCFG_CPU_PROGRAM_MAP(imolagp_master) |
| 556 | | MCFG_CPU_IO_MAP(readport_master) |
| 557 | | MCFG_CPU_VBLANK_INT_DRIVER("screen", imolagp_state, vblank_irq) |
| 476 | /* basic machine hardware */ |
| 477 | MCFG_CPU_ADD("maincpu", Z80, 3000000) // ? (assume slower than slave) |
| 478 | MCFG_CPU_PROGRAM_MAP(imolagp_master_map) |
| 479 | MCFG_CPU_IO_MAP(imolagp_master_io) |
| 480 | MCFG_CPU_VBLANK_INT_DRIVER("screen", imolagp_state, irq0_line_hold) |
| 558 | 481 | MCFG_TIMER_ADD_PERIODIC("pot_irq", imolagp_nmi_cb, attotime::from_hz(60*3)) |
| 559 | 482 | |
| 560 | | MCFG_CPU_ADD("slave", Z80,8000000) /* ? */ |
| 561 | | MCFG_CPU_PROGRAM_MAP(imolagp_slave) |
| 562 | | MCFG_CPU_IO_MAP(readport_slave) |
| 563 | | MCFG_CPU_VBLANK_INT_DRIVER("screen", imolagp_state, irq0_line_hold) |
| 483 | MCFG_CPU_ADD("slave", Z80, 4000000) // ? |
| 484 | MCFG_CPU_PROGRAM_MAP(imolagp_slave_map) |
| 485 | MCFG_CPU_IO_MAP(imolagp_slave_io) |
| 486 | MCFG_CPU_VBLANK_INT_DRIVER("screen", imolagp_state, slave_vblank_irq) |
| 564 | 487 | |
| 565 | | MCFG_QUANTUM_TIME(attotime::from_hz(6000)) |
| 488 | MCFG_QUANTUM_PERFECT_CPU("maincpu") |
| 566 | 489 | |
| 567 | | |
| 568 | 490 | MCFG_I8255A_ADD( "ppi8255", ppi8255_intf ) |
| 569 | 491 | |
| 492 | /* video hardware */ |
| 570 | 493 | MCFG_SCREEN_ADD("screen", RASTER) |
| 571 | 494 | MCFG_SCREEN_REFRESH_RATE(60) |
| 572 | | MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) |
| 495 | MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) |
| 573 | 496 | MCFG_SCREEN_SIZE(256,256) |
| 574 | | MCFG_SCREEN_VISIBLE_AREA(0+64-16,255,0+16,255) |
| 575 | | MCFG_SCREEN_UPDATE_DRIVER(imolagp_state, screen_update_imolagp) |
| 497 | MCFG_SCREEN_VISIBLE_AREA(0+48,255,0+16,255) |
| 576 | 498 | |
| 499 | MCFG_SCREEN_UPDATE_DRIVER(imolagp_state, screen_update_imolagp) |
| 577 | 500 | MCFG_PALETTE_LENGTH(0x20) |
| 501 | MCFG_VIDEO_ATTRIBUTES(VIDEO_UPDATE_SCANLINE) |
| 502 | |
| 503 | /* sound hardware */ |
| 578 | 504 | MCFG_SPEAKER_STANDARD_MONO("mono") |
| 579 | | MCFG_SOUND_ADD("aysnd", AY8910, 2000000) |
| 580 | | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) |
| 505 | MCFG_SOUND_ADD("aysnd", AY8910, 2000000) // ? |
| 506 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.5) |
| 581 | 507 | MACHINE_CONFIG_END |
| 582 | 508 | |
| 583 | | ROM_START( imolagp ) |
| 509 | |
| 510 | ROM_START( imolagp ) // same hardware, but larger video roms |
| 584 | 511 | ROM_REGION( 0x10000, "maincpu", 0 ) /* Z80 code */ |
| 585 | 512 | ROM_LOAD( "03.bin", 0x0000, 0x0800, CRC(a8be1c83) SHA1(e3147515f9f44e435192db838ffbb5c592f6e8d7) ) |
| 586 | 513 | ROM_LOAD( "01.bin", 0x0800, 0x0800, CRC(aa6fc1ea) SHA1(3f9c559aaba7b00ffd0210c6977dd4f966451a4b) ) |
| r20217 | r20218 | |
| 600 | 527 | |
| 601 | 528 | ROM_START( imolagpo ) |
| 602 | 529 | ROM_REGION( 0x10000, "maincpu", 0 ) /* Z80 code */ |
| 603 | | ROM_LOAD( "yd.bin", 0x0000, 0x800, CRC(5eb61bb7) SHA1(b897ecc7fa9aa1ae4e095d22d16a901b9d439a8e) ) |
| 604 | | ROM_LOAD( "yc.bin", 0x0800, 0x800, CRC(f7468a3b) SHA1(af1664e30b732b3d5321e76659961af3ebeb1237) ) |
| 605 | | ROM_LOAD( "yb.bin", 0x1000, 0x800, CRC(9f21506e) SHA1(6b46ff4815b8a02b190ec13e067f9a6687980774) ) |
| 606 | | ROM_LOAD( "ya.bin", 0x1800, 0x800, CRC(23fbcf14) SHA1(e8b5a9b01f715356c14aa41dbc9ca26732d3a4e4) ) |
| 530 | ROM_LOAD( "yd.bin", 0x0000, 0x0800, CRC(5eb61bb7) SHA1(b897ecc7fa9aa1ae4e095d22d16a901b9d439a8e) ) |
| 531 | ROM_LOAD( "yc.bin", 0x0800, 0x0800, CRC(f7468a3b) SHA1(af1664e30b732b3d5321e76659961af3ebeb1237) ) |
| 532 | ROM_LOAD( "yb.bin", 0x1000, 0x0800, CRC(9f21506e) SHA1(6b46ff4815b8a02b190ec13e067f9a6687980774) ) |
| 533 | ROM_LOAD( "ya.bin", 0x1800, 0x0800, CRC(23fbcf14) SHA1(e8b5a9b01f715356c14aa41dbc9ca26732d3a4e4) ) |
| 607 | 534 | |
| 608 | | ROM_REGION( 0x10000, "slave", 0 ) /* Z80 code */ |
| 609 | | ROM_LOAD( "xx.bin", 0x0000, 0x400, CRC(059d6294) SHA1(38f075753e7a9fcabb857e5587e8a5966052cbcd) ) |
| 610 | | ROM_LOAD( "xm.bin", 0x0800, 0x400, CRC(64ebb7de) SHA1(fc5477bbedf44e93a578a71d2ff376f6f0b51a71) ) // ? gfx: B |
| 611 | | ROM_LOAD( "xc.bin", 0x1000, 0x400, CRC(397fd1f3) SHA1(e6b927933847ddcdbbcbeb5e5f37fea063356b24) ) |
| 612 | | ROM_LOAD( "xi.bin", 0x1c00, 0x400, CRC(ef54efa2) SHA1(c8464f11ccfd9eaf9aefb2cd3ac2b9e8bc2d11b6) ) // contains bitmap for "R.B." |
| 613 | | ROM_LOAD( "xy.bin", 0x2000, 0x400, CRC(fea8e31e) SHA1(f85eac74d32ebd28170b466b136faf21a8ab220f) ) |
| 614 | | ROM_LOAD( "xd.bin", 0x2400, 0x400, CRC(0c601fc9) SHA1(e655f292b502a14068f5c35428001f8ceedf3637) ) |
| 615 | | ROM_LOAD( "xs.bin", 0x2800, 0x400, CRC(5d15ac52) SHA1(b4f97854018f72e4086c7d830d1b312aea1420a7) ) |
| 616 | | ROM_LOAD( "xa.bin", 0x2c00, 0x400, CRC(a95f5461) SHA1(2645fb93bc4ad5354eef5a385fa94021fb7291dc) ) // ? car - good? |
| 617 | | ROM_LOAD( "xp.bin", 0x3000, 0x400, CRC(4b6d63ef) SHA1(16f9e31e588b989f5259ab59c0a3a2c7787f3a16) ) // ? gfx: AEIOSXTDNMVGYRPL |
| 618 | | ROM_LOAD( "xo.bin", 0x3400, 0x400, CRC(c1d7f67c) SHA1(2ddfe9e59e323cd041fd760531b9e15ccd050058) ) // ? gfx: C |
| 619 | | ROM_LOAD( "xr.bin", 0x3800, 0x400, CRC(8a8667aa) SHA1(53f34b6c5327d4398de644d7f318d460da56c2de) ) // ? gfx: sign+explosion |
| 620 | | ROM_LOAD( "xe.bin", 0x3c00, 0x400, CRC(e0e81120) SHA1(14a77dfd069be342df4dbb1b747443c6d121d3fe) ) // ? car+misc |
| 535 | ROM_REGION( 0x10000, "slave", ROMREGION_ERASEFF ) /* Z80 code */ |
| 536 | ROM_LOAD( "xx.bin", 0x0000, 0x0400, CRC(059d6294) SHA1(38f075753e7a9fcabb857e5587e8a5966052cbcd) ) |
| 537 | // empty socket, please don't put NO_DUMP unless 100% sure |
| 538 | ROM_LOAD( "xm.bin", 0x0800, 0x0400, CRC(64ebb7de) SHA1(fc5477bbedf44e93a578a71d2ff376f6f0b51a71) ) // ? gfx: B |
| 539 | // empty socket, " |
| 540 | ROM_LOAD( "xc.bin", 0x1000, 0x0400, CRC(397fd1f3) SHA1(e6b927933847ddcdbbcbeb5e5f37fea063356b24) ) |
| 541 | // empty socket, " |
| 542 | // empty socket, " |
| 543 | ROM_LOAD( "xi.bin", 0x1c00, 0x0400, CRC(ef54efa2) SHA1(c8464f11ccfd9eaf9aefb2cd3ac2b9e8bc2d11b6) ) // contains bitmap for "R.B." |
| 544 | ROM_LOAD( "xy.bin", 0x2000, 0x0400, CRC(fea8e31e) SHA1(f85eac74d32ebd28170b466b136faf21a8ab220f) ) |
| 545 | ROM_LOAD( "xd.bin", 0x2400, 0x0400, CRC(0c601fc9) SHA1(e655f292b502a14068f5c35428001f8ceedf3637) ) |
| 546 | ROM_LOAD( "xs.bin", 0x2800, 0x0400, CRC(5d15ac52) SHA1(b4f97854018f72e4086c7d830d1b312aea1420a7) ) |
| 547 | ROM_LOAD( "xa.bin", 0x2c00, 0x0400, CRC(a95f5461) SHA1(2645fb93bc4ad5354eef5a385fa94021fb7291dc) ) // ? car - good? |
| 548 | ROM_LOAD( "xp.bin", 0x3000, 0x0400, CRC(4b6d63ef) SHA1(16f9e31e588b989f5259ab59c0a3a2c7787f3a16) ) // ? gfx: AEIOSXTDNMVGYRPL |
| 549 | ROM_LOAD( "xo.bin", 0x3400, 0x0400, CRC(c1d7f67c) SHA1(2ddfe9e59e323cd041fd760531b9e15ccd050058) ) // ? gfx: C |
| 550 | ROM_LOAD( "xr.bin", 0x3800, 0x0400, CRC(8a8667aa) SHA1(53f34b6c5327d4398de644d7f318d460da56c2de) ) // ? gfx: sign+explosion |
| 551 | ROM_LOAD( "xe.bin", 0x3c00, 0x0400, CRC(e0e81120) SHA1(14a77dfd069be342df4dbb1b747443c6d121d3fe) ) // ? car+misc |
| 621 | 552 | ROM_END |
| 622 | 553 | |
| 623 | 554 | |
| 624 | 555 | /* YEAR, NAME, PARENT, MACHINE, INPUT, INIT, MONITOR, COMPANY, FULLNAME, FLAGS */ |
| 625 | 556 | GAMEL(1983?, imolagp, 0, imolagp, imolagp, driver_device, 0, ROT90, "RB Bologna", "Imola Grand Prix (set 1)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_COLORS | GAME_SUPPORTS_SAVE, layout_imolagp ) // made by Alberici? year not shown, PCB labels suggests it's from 1983 |
| 626 | | GAMEL(1983?, imolagpo, imolagp, imolagp, imolagp, driver_device, 0, ROT90, "RB Bologna", "Imola Grand Prix (set 2)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_COLORS | GAME_SUPPORTS_SAVE, layout_imolagp ) // " |
| 557 | GAMEL(1983?, imolagpo, imolagp, imolagp, imolagpo, driver_device, 0, ROT90, "RB Bologna", "Imola Grand Prix (set 2)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_COLORS | GAME_SUPPORTS_SAVE, layout_imolagp ) // " |
trunk/src/mame/layout/imolagp.lay
| r20217 | r20218 | |
| 1 | 1 | <?xml version="1.0"?> |
| 2 | 2 | <mamelayout version="2"> |
| 3 | |
| 4 | <!-- define elements --> |
| 5 | |
| 6 | <element name="digit" defstate="0"> |
| 7 | <led7seg> |
| 8 | <color red="1.0" green="0.1" blue="0.1" /> |
| 9 | </led7seg> |
| 10 | </element> |
| 11 | |
| 12 | <element name="static_black"> |
| 13 | <rect> |
| 14 | <color red="0.0" green="0.0" blue="0.0" /> |
| 15 | </rect> |
| 16 | </element> |
| 17 | |
| 18 | <element name="static_gray"> |
| 19 | <rect> |
| 20 | <color red="0.6" green="0.6" blue="0.6" /> |
| 21 | </rect> |
| 22 | </element> |
| 23 | |
| 24 | <element name="static_white"> |
| 25 | <rect> |
| 26 | <color red="0.95" green="0.95" blue="0.95" /> |
| 27 | </rect> |
| 28 | </element> |
| 29 | <element name="disk_white"> |
| 30 | <disk> |
| 31 | <color red="0.95" green="0.95" blue="0.95" /> |
| 32 | </disk> |
| 33 | </element> |
| 34 | |
| 35 | <element name="static_red"> |
| 36 | <rect> |
| 37 | <color red="0.8" green="0.1" blue="0.0" /> |
| 38 | </rect> |
| 39 | </element> |
| 40 | <element name="disk_red"> |
| 41 | <disk> |
| 42 | <color red="0.8" green="0.1" blue="0.0" /> |
| 43 | </disk> |
| 44 | </element> |
| 45 | |
| 46 | <element name="static_green"> |
| 47 | <rect> |
| 48 | <color red="0.15" green="0.8" blue="0.1" /> |
| 49 | </rect> |
| 50 | </element> |
| 51 | <element name="disk_green"> |
| 52 | <disk> |
| 53 | <color red="0.15" green="0.8" blue="0.1" /> |
| 54 | </disk> |
| 55 | </element> |
| 56 | |
| 57 | <element name="static_yellow"> |
| 58 | <rect> |
| 59 | <color red="0.8" green="0.75" blue="0.1" /> |
| 60 | </rect> |
| 61 | </element> |
| 62 | <element name="disk_yellow"> |
| 63 | <disk> |
| 64 | <color red="0.8" green="0.75" blue="0.1" /> |
| 65 | </disk> |
| 66 | </element> |
| 67 | |
| 68 | |
| 69 | <!-- define text --> |
| 70 | |
| 71 | <element name="text_result"> |
| 72 | <text string="result" align="1"> |
| 73 | <color red="1.0" green="1.0" blue="1.0" /> |
| 74 | </text> |
| 75 | </element> |
| 76 | <element name="text_credits"> |
| 77 | <text string="credits" align="1"> |
| 78 | <color red="1.0" green="1.0" blue="1.0" /> |
| 79 | </text> |
| 80 | </element> |
| 81 | |
| 82 | <element name="text_time"> |
| 83 | <text string="TIME"> |
| 84 | <color red="1.0" green="1.0" blue="1.0" /> |
| 85 | </text> |
| 86 | </element> |
| 87 | |
| 88 | <element name="text_s"> |
| 89 | <text string="S"> |
| 90 | <color red="1.0" green="1.0" blue="1.0" /> |
| 91 | </text> |
| 92 | </element> |
| 93 | <element name="text_c"> |
| 94 | <text string="C"> |
| 95 | <color red="1.0" green="1.0" blue="1.0" /> |
| 96 | </text> |
| 97 | </element> |
| 98 | <element name="text_o"> |
| 99 | <text string="O"> |
| 100 | <color red="1.0" green="1.0" blue="1.0" /> |
| 101 | </text> |
| 102 | </element> |
| 103 | <element name="text_r"> |
| 104 | <text string="R"> |
| 105 | <color red="1.0" green="1.0" blue="1.0" /> |
| 106 | </text> |
| 107 | </element> |
| 108 | <element name="text_e"> |
| 109 | <text string="E"> |
| 110 | <color red="1.0" green="1.0" blue="1.0" /> |
| 111 | </text> |
| 112 | </element> |
| 113 | |
| 114 | <element name="text_i"> |
| 115 | <text string="I"> |
| 116 | <color red="1.0" green="1.0" blue="1.0" /> |
| 117 | </text> |
| 118 | </element> |
| 119 | <element name="text_n"> |
| 120 | <text string="N"> |
| 121 | <color red="1.0" green="1.0" blue="1.0" /> |
| 122 | </text> |
| 123 | </element> |
| 124 | <element name="text_f"> |
| 125 | <text string="F"> |
| 126 | <color red="1.0" green="1.0" blue="1.0" /> |
| 127 | </text> |
| 128 | </element> |
| 129 | |
| 130 | <element name="text_h"> |
| 131 | <text string="H"> |
| 132 | <color red="1.0" green="1.0" blue="1.0" /> |
| 133 | </text> |
| 134 | </element> |
| 135 | <element name="text_g"> |
| 136 | <text string="G"> |
| 137 | <color red="1.0" green="1.0" blue="1.0" /> |
| 138 | </text> |
| 139 | </element> |
| 140 | |
| 141 | <element name="text_1"> |
| 142 | <text string="1" align="2"> |
| 143 | <color red="1.0" green="1.0" blue="1.0" /> |
| 144 | </text> |
| 145 | </element> |
| 146 | <element name="text_2"> |
| 147 | <text string="2" align="2"> |
| 148 | <color red="1.0" green="1.0" blue="1.0" /> |
| 149 | </text> |
| 150 | </element> |
| 151 | <element name="text_3"> |
| 152 | <text string="3" align="2"> |
| 153 | <color red="1.0" green="1.0" blue="1.0" /> |
| 154 | </text> |
| 155 | </element> |
| 156 | <element name="text_4"> |
| 157 | <text string="4" align="2"> |
| 158 | <color red="1.0" green="1.0" blue="1.0" /> |
| 159 | </text> |
| 160 | </element> |
| 161 | <element name="text_5"> |
| 162 | <text string="5" align="2"> |
| 163 | <color red="1.0" green="1.0" blue="1.0" /> |
| 164 | </text> |
| 165 | </element> |
| 166 | |
| 167 | <element name="text_st"> |
| 168 | <text string="st" align="1"> |
| 169 | <color red="1.0" green="1.0" blue="1.0" /> |
| 170 | </text> |
| 171 | </element> |
| 172 | <element name="text_nd"> |
| 173 | <text string="nd" align="1"> |
| 174 | <color red="1.0" green="1.0" blue="1.0" /> |
| 175 | </text> |
| 176 | </element> |
| 177 | <element name="text_rd"> |
| 178 | <text string="rd" align="1"> |
| 179 | <color red="1.0" green="1.0" blue="1.0" /> |
| 180 | </text> |
| 181 | </element> |
| 182 | <element name="text_th"> |
| 183 | <text string="th" align="1"> |
| 184 | <color red="1.0" green="1.0" blue="1.0" /> |
| 185 | </text> |
| 186 | </element> |
| 187 | |
| 188 | |
| 189 | |
| 3 | 190 | <view name="Simple LEDs"> |
| 191 | <bounds left="0" top="-124" right="300" bottom="325" /> |
| 192 | |
| 193 | <!-- NOTE: visible screen is not 3:4, partially cut from view horizontally --> |
| 194 | <!-- (see imolagp.c MCFG_SCREEN_VISIBLE_AREA) --> |
| 195 | |
| 4 | 196 | <screen index="0"> |
| 5 | | <bounds left="0" top="0" right="3" bottom="4" /> |
| 197 | <bounds left="0" top="0" right="300" bottom="325" /> |
| 6 | 198 | </screen> |
| 199 | |
| 200 | |
| 201 | <!-- color bars --> |
| 202 | |
| 203 | <bezel element="static_green"> |
| 204 | <bounds x="0" y="-120" width="8" height="116" /> |
| 205 | </bezel> |
| 206 | <bezel element="disk_green"> |
| 207 | <bounds x="0" y="-124" width="8" height="8" /> |
| 208 | </bezel> |
| 209 | |
| 210 | <bezel element="static_red"> |
| 211 | <bounds x="10" y="-120" width="8" height="116" /> |
| 212 | </bezel> |
| 213 | <bezel element="disk_red"> |
| 214 | <bounds x="10" y="-124" width="8" height="8" /> |
| 215 | </bezel> |
| 216 | |
| 217 | <bezel element="static_red"> |
| 218 | <bounds x="26" y="-60" width="8" height="56" /> |
| 219 | </bezel> |
| 220 | <bezel element="disk_red"> |
| 221 | <bounds x="26" y="-64" width="8" height="8" /> |
| 222 | </bezel> |
| 223 | |
| 224 | <bezel element="static_green"> |
| 225 | <bounds x="95" y="-60" width="8" height="56" /> |
| 226 | </bezel> |
| 227 | <bezel element="disk_green"> |
| 228 | <bounds x="95" y="-64" width="8" height="8" /> |
| 229 | </bezel> |
| 230 | |
| 231 | <bezel element="static_yellow"> |
| 232 | <bounds x="105" y="-60" width="8" height="56" /> |
| 233 | </bezel> |
| 234 | <bezel element="disk_yellow"> |
| 235 | <bounds x="105" y="-64" width="8" height="8" /> |
| 236 | </bezel> |
| 237 | |
| 238 | <bezel element="static_red"> |
| 239 | <bounds x="115" y="-60" width="8" height="56" /> |
| 240 | </bezel> |
| 241 | <bezel element="disk_red"> |
| 242 | <bounds x="115" y="-64" width="8" height="8" /> |
| 243 | </bezel> |
| 244 | |
| 245 | <bezel element="static_white"> |
| 246 | <bounds x="177" y="-60" width="8" height="56" /> |
| 247 | </bezel> |
| 248 | <bezel element="disk_white"> |
| 249 | <bounds x="177" y="-64" width="8" height="8" /> |
| 250 | </bezel> |
| 251 | |
| 252 | <bezel element="static_green"> |
| 253 | <bounds x="187" y="-60" width="8" height="56" /> |
| 254 | </bezel> |
| 255 | <bezel element="disk_green"> |
| 256 | <bounds x="187" y="-64" width="8" height="8" /> |
| 257 | </bezel> |
| 258 | |
| 259 | <bezel element="static_yellow"> |
| 260 | <bounds x="282" y="-120" width="8" height="116" /> |
| 261 | </bezel> |
| 262 | <bezel element="disk_yellow"> |
| 263 | <bounds x="282" y="-124" width="8" height="8" /> |
| 264 | </bezel> |
| 265 | |
| 266 | <bezel element="static_green"> |
| 267 | <bounds x="292" y="-120" width="8" height="116" /> |
| 268 | </bezel> |
| 269 | <bezel element="disk_green"> |
| 270 | <bounds x="292" y="-124" width="8" height="8" /> |
| 271 | </bezel> |
| 272 | |
| 273 | |
| 274 | <!-- score --> |
| 275 | |
| 276 | <bezel element="text_s"> |
| 277 | <bounds x="10" y="-122" width="8" height="9" /> |
| 278 | </bezel> |
| 279 | <bezel element="text_c"> |
| 280 | <bounds x="10" y="-112.5" width="8" height="9" /> |
| 281 | </bezel> |
| 282 | <bezel element="text_o"> |
| 283 | <bounds x="10" y="-103" width="8" height="9" /> |
| 284 | </bezel> |
| 285 | <bezel element="text_r"> |
| 286 | <bounds x="10" y="-93.5" width="8" height="9" /> |
| 287 | </bezel> |
| 288 | <bezel element="text_e"> |
| 289 | <bounds x="10" y="-84" width="8" height="9" /> |
| 290 | </bezel> |
| 291 | |
| 292 | <bezel element="static_gray"> |
| 293 | <bounds x="20" y="-117" width="73" height="31" /> |
| 294 | </bezel> |
| 295 | <bezel element="static_black"> |
| 296 | <bounds x="22" y="-115" width="69" height="27" /> |
| 297 | </bezel> |
| 298 | |
| 299 | <bezel name="digit0" element="digit"> |
| 300 | <bounds x="26.5" y="-113" width="15" height="23" /> |
| 301 | </bezel> |
| 302 | <bezel name="digit1" element="digit"> |
| 303 | <bounds x="41.5" y="-113" width="15" height="23" /> |
| 304 | </bezel> |
| 305 | <bezel name="digit2" element="digit"> |
| 306 | <bounds x="56.5" y="-113" width="15" height="23" /> |
| 307 | </bezel> |
| 308 | <bezel name="digit3" element="digit"> |
| 309 | <bounds x="71.5" y="-113" width="15" height="23" /> |
| 310 | </bezel> |
| 311 | |
| 312 | |
| 313 | <!-- result/credits --> |
| 314 | |
| 315 | <bezel element="text_i"> |
| 316 | <bounds x="26" y="-54" width="8" height="9" /> |
| 317 | </bezel> |
| 318 | <bezel element="text_n"> |
| 319 | <bounds x="26" y="-44.5" width="8" height="9" /> |
| 320 | </bezel> |
| 321 | <bezel element="text_f"> |
| 322 | <bounds x="26" y="-35" width="8" height="9" /> |
| 323 | </bezel> |
| 324 | <bezel element="text_o"> |
| 325 | <bounds x="26" y="-25.5" width="8" height="9" /> |
| 326 | </bezel> |
| 327 | |
| 328 | <bezel element="static_gray"> |
| 329 | <bounds x="36" y="-57" width="57" height="43" /> |
| 330 | </bezel> |
| 331 | <bezel element="static_black"> |
| 332 | <bounds x="38" y="-55" width="53" height="39" /> |
| 333 | </bezel> |
| 334 | |
| 335 | <bezel name="digit10" element="digit"> |
| 336 | <bounds x="42" y="-53" width="10" height="15" /> |
| 337 | </bezel> |
| 338 | <bezel name="digit11" element="digit"> |
| 339 | <bounds x="52" y="-53" width="10" height="15" /> |
| 340 | </bezel> |
| 341 | |
| 342 | <bezel name="digit12" element="digit"> |
| 343 | <bounds x="42" y="-33" width="10" height="15" /> |
| 344 | </bezel> |
| 345 | <bezel name="digit13" element="digit"> |
| 346 | <bounds x="52" y="-33" width="10" height="15" /> |
| 347 | </bezel> |
| 348 | |
| 349 | <bezel element="text_result"> |
| 350 | <bounds x="65" y="-54" width="40" height="10" /> |
| 351 | </bezel> |
| 352 | <bezel element="text_credits"> |
| 353 | <bounds x="65" y="-34" width="40" height="10" /> |
| 354 | </bezel> |
| 355 | |
| 356 | |
| 357 | <!-- time --> |
| 358 | |
| 359 | <!-- (the area above TIME has a racecar drawn on the cab) --> |
| 360 | |
| 361 | <bezel element="static_green"> |
| 362 | <bounds x="125" y="-64" width="50" height="55" /> |
| 363 | </bezel> |
| 364 | <bezel element="static_black"> |
| 365 | <bounds x="129" y="-59" width="42" height="30" /> |
| 366 | </bezel> |
| 367 | <bezel element="static_gray"> |
| 368 | <bounds x="129" y="-45" width="42" height="31" /> |
| 369 | </bezel> |
| 370 | <bezel element="static_black"> |
| 371 | <bounds x="131" y="-43" width="38" height="27" /> |
| 372 | </bezel> |
| 373 | |
| 374 | <bezel element="text_time"> |
| 375 | <bounds x="129" y="-60" width="42" height="15" /> |
| 376 | </bezel> |
| 377 | |
| 378 | <bezel name="digit4" element="digit"> |
| 379 | <bounds x="135" y="-41" width="15" height="23" /> |
| 380 | </bezel> |
| 381 | <bezel name="digit5" element="digit"> |
| 382 | <bounds x="150" y="-41" width="15" height="23" /> |
| 383 | </bezel> |
| 384 | |
| 385 | |
| 386 | <!-- highscores --> |
| 387 | |
| 388 | <bezel element="static_gray"> |
| 389 | <bounds x="197" y="-117" width="83" height="103" /> |
| 390 | </bezel> |
| 391 | <bezel element="static_black"> |
| 392 | <bounds x="199" y="-115" width="79" height="99" /> |
| 393 | </bezel> |
| 394 | |
| 395 | <bezel element="text_1"> |
| 396 | <bounds x="212" y="-114" width="10" height="15" /> |
| 397 | </bezel> |
| 398 | <bezel element="text_st"> |
| 399 | <bounds x="222.5" y="-114" width="10" height="10" /> |
| 400 | </bezel> |
| 401 | <bezel name="digit32" element="digit"> |
| 402 | <bounds x="234" y="-113" width="10" height="15" /> |
| 403 | </bezel> |
| 404 | <bezel name="digit33" element="digit"> |
| 405 | <bounds x="244" y="-113" width="10" height="15" /> |
| 406 | </bezel> |
| 407 | <bezel name="digit34" element="digit"> |
| 408 | <bounds x="254" y="-113" width="10" height="15" /> |
| 409 | </bezel> |
| 410 | <bezel name="digit35" element="digit"> |
| 411 | <bounds x="264" y="-113" width="10" height="15" /> |
| 412 | </bezel> |
| 413 | |
| 414 | <bezel element="text_2"> |
| 415 | <bounds x="212" y="-94" width="10" height="15" /> |
| 416 | </bezel> |
| 417 | <bezel element="text_nd"> |
| 418 | <bounds x="222.5" y="-94" width="10" height="10" /> |
| 419 | </bezel> |
| 420 | <bezel name="digit36" element="digit"> |
| 421 | <bounds x="234" y="-93" width="10" height="15" /> |
| 422 | </bezel> |
| 423 | <bezel name="digit37" element="digit"> |
| 424 | <bounds x="244" y="-93" width="10" height="15" /> |
| 425 | </bezel> |
| 426 | <bezel name="digit24" element="digit"> |
| 427 | <bounds x="254" y="-93" width="10" height="15" /> |
| 428 | </bezel> |
| 429 | <bezel name="digit25" element="digit"> |
| 430 | <bounds x="264" y="-93" width="10" height="15" /> |
| 431 | </bezel> |
| 432 | |
| 433 | <bezel element="text_3"> |
| 434 | <bounds x="212" y="-74" width="10" height="15" /> |
| 435 | </bezel> |
| 436 | <bezel element="text_rd"> |
| 437 | <bounds x="222.5" y="-74" width="10" height="10" /> |
| 438 | </bezel> |
| 439 | <bezel name="digit26" element="digit"> |
| 440 | <bounds x="234" y="-73" width="10" height="15" /> |
| 441 | </bezel> |
| 442 | <bezel name="digit27" element="digit"> |
| 443 | <bounds x="244" y="-73" width="10" height="15" /> |
| 444 | </bezel> |
| 445 | <bezel name="digit28" element="digit"> |
| 446 | <bounds x="254" y="-73" width="10" height="15" /> |
| 447 | </bezel> |
| 448 | <bezel name="digit29" element="digit"> |
| 449 | <bounds x="264" y="-73" width="10" height="15" /> |
| 450 | </bezel> |
| 451 | |
| 452 | <bezel element="text_4"> |
| 453 | <bounds x="212" y="-54" width="10" height="15" /> |
| 454 | </bezel> |
| 455 | <bezel element="text_th"> |
| 456 | <bounds x="222.5" y="-54" width="10" height="10" /> |
| 457 | </bezel> |
| 458 | <bezel name="digit16" element="digit"> |
| 459 | <bounds x="234" y="-53" width="10" height="15" /> |
| 460 | </bezel> |
| 461 | <bezel name="digit17" element="digit"> |
| 462 | <bounds x="244" y="-53" width="10" height="15" /> |
| 463 | </bezel> |
| 464 | <bezel name="digit18" element="digit"> |
| 465 | <bounds x="254" y="-53" width="10" height="15" /> |
| 466 | </bezel> |
| 467 | <bezel name="digit19" element="digit"> |
| 468 | <bounds x="264" y="-53" width="10" height="15" /> |
| 469 | </bezel> |
| 470 | |
| 471 | <bezel element="text_5"> |
| 472 | <bounds x="212" y="-34" width="10" height="15" /> |
| 473 | </bezel> |
| 474 | <bezel element="text_th"> |
| 475 | <bounds x="222.5" y="-34" width="10" height="10" /> |
| 476 | </bezel> |
| 477 | <bezel name="digit20" element="digit"> |
| 478 | <bounds x="234" y="-33" width="10" height="15" /> |
| 479 | </bezel> |
| 480 | <bezel name="digit21" element="digit"> |
| 481 | <bounds x="244" y="-33" width="10" height="15" /> |
| 482 | </bezel> |
| 483 | <bezel name="digit8" element="digit"> |
| 484 | <bounds x="254" y="-33" width="10" height="15" /> |
| 485 | </bezel> |
| 486 | <bezel name="digit9" element="digit"> |
| 487 | <bounds x="264" y="-33" width="10" height="15" /> |
| 488 | </bezel> |
| 489 | |
| 490 | <bezel element="static_red"> |
| 491 | <bounds x="199" y="-115" width="14" height="99" /> |
| 492 | </bezel> |
| 493 | <bezel element="text_h"> |
| 494 | <bounds x="199" y="-113" width="14" height="9" /> |
| 495 | </bezel> |
| 496 | <bezel element="text_i"> |
| 497 | <bounds x="199" y="-103.5" width="14" height="9" /> |
| 498 | </bezel> |
| 499 | <bezel element="text_g"> |
| 500 | <bounds x="199" y="-94" width="14" height="9" /> |
| 501 | </bezel> |
| 502 | <bezel element="text_h"> |
| 503 | <bounds x="199" y="-84.5" width="14" height="9" /> |
| 504 | </bezel> |
| 505 | <bezel element="text_s"> |
| 506 | <bounds x="199" y="-75" width="14" height="9" /> |
| 507 | </bezel> |
| 508 | <bezel element="text_c"> |
| 509 | <bounds x="199" y="-65.5" width="14" height="9" /> |
| 510 | </bezel> |
| 511 | <bezel element="text_o"> |
| 512 | <bounds x="199" y="-56" width="14" height="9" /> |
| 513 | </bezel> |
| 514 | <bezel element="text_r"> |
| 515 | <bounds x="199" y="-46.5" width="14" height="9" /> |
| 516 | </bezel> |
| 517 | <bezel element="text_e"> |
| 518 | <bounds x="199" y="-37" width="14" height="9" /> |
| 519 | </bezel> |
| 520 | <bezel element="text_s"> |
| 521 | <bounds x="199" y="-27.5" width="14" height="9" /> |
| 522 | </bezel> |
| 523 | |
| 524 | |
| 7 | 525 | </view> |
| 8 | 526 | </mamelayout> |