diff --git a/src/mame/drivers/artmagic.c b/src/mame/drivers/artmagic.c index 9390f92ee89..89b4da6c7f9 100644 --- a/src/mame/drivers/artmagic.c +++ b/src/mame/drivers/artmagic.c @@ -1112,43 +1112,37 @@ ROM_END * *************************************/ -static void decrypt_ultennis(running_machine &machine) +void artmagic_state::decrypt_ultennis() { - artmagic_state *state = machine.driver_data(); - int i; - /* set up the parameters for the blitter data decryption which will happen at runtime */ - for (i = 0;i < 16;i++) + for (int i = 0; i < 16; i++) { - state->m_xor[i] = 0x0462; - if (i & 1) state->m_xor[i] ^= 0x0011; - if (i & 2) state->m_xor[i] ^= 0x2200; - if (i & 4) state->m_xor[i] ^= 0x4004; - if (i & 8) state->m_xor[i] ^= 0x0880; + m_xor[i] = 0x0462; + if (i & 1) m_xor[i] ^= 0x0011; + if (i & 2) m_xor[i] ^= 0x2200; + if (i & 4) m_xor[i] ^= 0x4004; + if (i & 8) m_xor[i] ^= 0x0880; } } -static void decrypt_cheesech(running_machine &machine) +void artmagic_state::decrypt_cheesech() { - artmagic_state *state = machine.driver_data(); - int i; - /* set up the parameters for the blitter data decryption which will happen at runtime */ - for (i = 0;i < 16;i++) + for (int i = 0; i < 16; i++) { - state->m_xor[i] = 0x0891; - if (i & 1) state->m_xor[i] ^= 0x1100; - if (i & 2) state->m_xor[i] ^= 0x0022; - if (i & 4) state->m_xor[i] ^= 0x0440; - if (i & 8) state->m_xor[i] ^= 0x8008; + m_xor[i] = 0x0891; + if (i & 1) m_xor[i] ^= 0x1100; + if (i & 2) m_xor[i] ^= 0x0022; + if (i & 4) m_xor[i] ^= 0x0440; + if (i & 8) m_xor[i] ^= 0x8008; } } DRIVER_INIT_MEMBER(artmagic_state,ultennis) { - decrypt_ultennis(machine()); + decrypt_ultennis(); m_is_stoneball = 0; m_protection_handler = ultennis_protection; @@ -1159,7 +1153,7 @@ DRIVER_INIT_MEMBER(artmagic_state,ultennis) DRIVER_INIT_MEMBER(artmagic_state,cheesech) { - decrypt_cheesech(machine()); + decrypt_cheesech(); m_is_stoneball = 0; m_protection_handler = cheesech_protection; } @@ -1167,7 +1161,7 @@ DRIVER_INIT_MEMBER(artmagic_state,cheesech) DRIVER_INIT_MEMBER(artmagic_state,stonebal) { - decrypt_ultennis(machine()); + decrypt_ultennis(); m_is_stoneball = 1; /* blits 1 line high are NOT encrypted, also different first pixel decrypt */ m_protection_handler = stonebal_protection; } @@ -1175,7 +1169,7 @@ DRIVER_INIT_MEMBER(artmagic_state,stonebal) DRIVER_INIT_MEMBER(artmagic_state,shtstar) { /* wrong */ - decrypt_ultennis(machine()); + decrypt_ultennis(); m_is_stoneball =0; m_protection_handler = stonebal_protection; } diff --git a/src/mame/includes/artmagic.h b/src/mame/includes/artmagic.h index e300ba1cb9b..478f41e99a1 100644 --- a/src/mame/includes/artmagic.h +++ b/src/mame/includes/artmagic.h @@ -18,16 +18,21 @@ public: artmagic_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), + m_maincpu(*this, "maincpu"), + m_oki(*this, "oki"), + m_tms(*this, "tms"), m_tlc34076(*this, "tlc34076"), m_control(*this, "control"), m_vram0(*this, "vram0"), - m_vram1(*this, "vram1"), - m_maincpu(*this, "maincpu"), - m_oki(*this, "oki"), - m_tms(*this, "tms") { } + m_vram1(*this, "vram1") { } + required_device m_maincpu; + required_device m_oki; + required_device m_tms; required_device m_tlc34076; + required_shared_ptr m_control; + UINT8 m_tms_irq; UINT8 m_hack_irq; UINT8 m_prot_input[16]; @@ -61,9 +66,11 @@ public: virtual void machine_start(); virtual void machine_reset(); virtual void video_start(); - required_device m_maincpu; - required_device m_oki; - required_device m_tms; + void decrypt_cheesech(); + void decrypt_ultennis(); + void execute_blit(); + inline UINT16 *address_to_vram(offs_t *address); + protected: virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); }; diff --git a/src/mame/video/artmagic.c b/src/mame/video/artmagic.c index 489ebf29003..f613737652f 100644 --- a/src/mame/video/artmagic.c +++ b/src/mame/video/artmagic.c @@ -21,14 +21,14 @@ * *************************************/ -INLINE UINT16 *address_to_vram(artmagic_state *state, offs_t *address) +inline UINT16 *artmagic_state::address_to_vram(offs_t *address) { offs_t original = *address; *address = TOWORD(original & 0x001fffff); if (original < 0x001fffff) - return state->m_vram0; + return m_vram0; else if (original >= 0x00400000 && original < 0x005fffff) - return state->m_vram1; + return m_vram1; return NULL; } @@ -62,7 +62,7 @@ void artmagic_state::video_start() void artmagic_to_shiftreg(address_space &space, offs_t address, UINT16 *data) { artmagic_state *state = space.machine().driver_data(); - UINT16 *vram = address_to_vram(state, &address); + UINT16 *vram = state->address_to_vram(&address); if (vram) memcpy(data, &vram[address], TOBYTE(0x2000)); } @@ -71,7 +71,7 @@ void artmagic_to_shiftreg(address_space &space, offs_t address, UINT16 *data) void artmagic_from_shiftreg(address_space &space, offs_t address, UINT16 *data) { artmagic_state *state = space.machine().driver_data(); - UINT16 *vram = address_to_vram(state, &address); + UINT16 *vram = state->address_to_vram(&address); if (vram) memcpy(&vram[address], data, TOBYTE(0x2000)); } @@ -84,18 +84,17 @@ void artmagic_from_shiftreg(address_space &space, offs_t address, UINT16 *data) * *************************************/ -static void execute_blit(running_machine &machine) +void artmagic_state::execute_blit() { - artmagic_state *state = machine.driver_data(); - UINT16 *dest = state->m_blitter_page ? state->m_vram0 : state->m_vram1; - int offset = ((state->m_blitter_data[1] & 0xff) << 16) | state->m_blitter_data[0]; - int color = (state->m_blitter_data[1] >> 4) & 0xf0; - int x = (INT16)state->m_blitter_data[2]; - int y = (INT16)state->m_blitter_data[3]; - int maskx = state->m_blitter_data[6] & 0xff; - int masky = state->m_blitter_data[6] >> 8; - int w = ((state->m_blitter_data[7] & 0xff) + 1) * 4; - int h = (state->m_blitter_data[7] >> 8) + 1; + UINT16 *dest = m_blitter_page ? m_vram0 : m_vram1; + int offset = ((m_blitter_data[1] & 0xff) << 16) | m_blitter_data[0]; + int color = (m_blitter_data[1] >> 4) & 0xf0; + int x = (INT16)m_blitter_data[2]; + int y = (INT16)m_blitter_data[3]; + int maskx = m_blitter_data[6] & 0xff; + int masky = m_blitter_data[6] >> 8; + int w = ((m_blitter_data[7] & 0xff) + 1) * 4; + int h = (m_blitter_data[7] >> 8) + 1; int i, j, sx, sy, last; #if 0 @@ -106,10 +105,10 @@ static void execute_blit(running_machine &machine) logerror("%s:Blit from %06X to (%d,%d) %dx%d -- %04X %04X %04X %04X %04X %04X %04X %04X\n", machine.describe_context(), offset, x, y, w, h, - state->m_blitter_data[0], state->m_blitter_data[1], - state->m_blitter_data[2], state->m_blitter_data[3], - state->m_blitter_data[4], state->m_blitter_data[5], - state->m_blitter_data[6], state->m_blitter_data[7]); + m_blitter_data[0], m_blitter_data[1], + m_blitter_data[2], m_blitter_data[3], + m_blitter_data[4], m_blitter_data[5], + m_blitter_data[6], m_blitter_data[7]); if (!f) f = fopen("artmagic.log", "w"); @@ -124,16 +123,16 @@ static void execute_blit(running_machine &machine) fprintf(f, "----------------------\n" "%s:Blit from %06X to (%d,%d) %dx%d -- %04X %04X %04X %04X %04X %04X %04X %04X\n", machine.describe_context(), offset, x, y, w, h, - state->m_blitter_data[0], state->m_blitter_data[1], - state->m_blitter_data[2], state->m_blitter_data[3], - state->m_blitter_data[4], state->m_blitter_data[5], - state->m_blitter_data[6], state->m_blitter_data[7]); + m_blitter_data[0], m_blitter_data[1], + m_blitter_data[2], m_blitter_data[3], + m_blitter_data[4], m_blitter_data[5], + m_blitter_data[6], m_blitter_data[7]); fprintf(f, "\t"); for (i = 0; i < h; i++) { for (j = 0; j < w; j += 4) - fprintf(f, "%04X ", state->m_blitter_base[tempoffs++]); + fprintf(f, "%04X ", m_blitter_base[tempoffs++]); fprintf(f, "\n\t"); } fprintf(f, "\n\t"); @@ -144,19 +143,19 @@ static void execute_blit(running_machine &machine) if (i == 0) /* first line */ { /* ultennis, stonebal */ - last ^= (state->m_blitter_data[7] & 0x0001); - if (state->m_is_stoneball) - last ^= ((state->m_blitter_data[0] & 0x0020) >> 3); + last ^= (m_blitter_data[7] & 0x0001); + if (m_is_stoneball) + last ^= ((m_blitter_data[0] & 0x0020) >> 3); else /* ultennis */ - last ^= ((state->m_blitter_data[0] & 0x0040) >> 4); + last ^= ((m_blitter_data[0] & 0x0040) >> 4); /* cheesech */ - last ^= ((state->m_blitter_data[7] & 0x0400) >> 9); - last ^= ((state->m_blitter_data[0] & 0x2000) >> 10); + last ^= ((m_blitter_data[7] & 0x0400) >> 9); + last ^= ((m_blitter_data[0] & 0x2000) >> 10); } else /* following lines */ { - int val = state->m_blitter_base[tempoffs]; + int val = m_blitter_base[tempoffs]; /* ultennis, stonebal */ last ^= 4; @@ -172,12 +171,12 @@ static void execute_blit(running_machine &machine) for (j = 0; j < w; j += 4) { static const char hex[] = ".123456789ABCDEF"; - int val = state->m_blitter_base[tempoffs++]; + int val = m_blitter_base[tempoffs++]; int p1, p2, p3, p4; - p1 = last = ((val ^ state->m_xor[last]) >> 0) & 0xf; - p2 = last = ((val ^ state->m_xor[last]) >> 4) & 0xf; - p3 = last = ((val ^ state->m_xor[last]) >> 8) & 0xf; - p4 = last = ((val ^ state->m_xor[last]) >> 12) & 0xf; + p1 = last = ((val ^ m_xor[last]) >> 0) & 0xf; + p2 = last = ((val ^ m_xor[last]) >> 4) & 0xf; + p3 = last = ((val ^ m_xor[last]) >> 8) & 0xf; + p4 = last = ((val ^ m_xor[last]) >> 12) & 0xf; fprintf(f, "%c%c%c%c ", hex[p1], hex[p2], hex[p3], hex[p4]); } fprintf(f, "\n\t"); @@ -213,19 +212,19 @@ static void execute_blit(running_machine &machine) if (i == 0) /* first line */ { /* ultennis, stonebal */ - last ^= (state->m_blitter_data[7] & 0x0001); - if (state->m_is_stoneball) - last ^= ((state->m_blitter_data[0] & 0x0020) >> 3); + last ^= (m_blitter_data[7] & 0x0001); + if (m_is_stoneball) + last ^= ((m_blitter_data[0] & 0x0020) >> 3); else /* ultennis */ - last ^= (((state->m_blitter_data[0] + 1) & 0x0040) >> 4); + last ^= (((m_blitter_data[0] + 1) & 0x0040) >> 4); /* cheesech */ - last ^= ((state->m_blitter_data[7] & 0x0400) >> 9); - last ^= ((state->m_blitter_data[0] & 0x2000) >> 10); + last ^= ((m_blitter_data[7] & 0x0400) >> 9); + last ^= ((m_blitter_data[0] & 0x2000) >> 10); } else /* following lines */ { - int val = state->m_blitter_base[offset & state->m_blitter_mask]; + int val = m_blitter_base[offset & m_blitter_mask]; /* ultennis, stonebal */ last ^= 4; @@ -240,13 +239,13 @@ static void execute_blit(running_machine &machine) for (j = 0; j < w; j += 4) { - UINT16 val = state->m_blitter_base[(offset + j/4) & state->m_blitter_mask]; + UINT16 val = m_blitter_base[(offset + j/4) & m_blitter_mask]; if (sx < 508) { - if (h == 1 && state->m_is_stoneball) + if (h == 1 && m_is_stoneball) last = ((val) >> 0) & 0xf; else - last = ((val ^ state->m_xor[last]) >> 0) & 0xf; + last = ((val ^ m_xor[last]) >> 0) & 0xf; if (!((maskx << ((j/2) & 7)) & 0x80)) { if (last && sx >= 0 && sx < 512) @@ -254,20 +253,20 @@ static void execute_blit(running_machine &machine) sx++; } - if (h == 1 && state->m_is_stoneball) + if (h == 1 && m_is_stoneball) last = ((val) >> 4) & 0xf; else - last = ((val ^ state->m_xor[last]) >> 4) & 0xf; + last = ((val ^ m_xor[last]) >> 4) & 0xf; { if (last && sx >= 0 && sx < 512) dest[tsy + sx] = color | (last); sx++; } - if (h == 1 && state->m_is_stoneball) + if (h == 1 && m_is_stoneball) last = ((val) >> 8) & 0xf; else - last = ((val ^ state->m_xor[last]) >> 8) & 0xf; + last = ((val ^ m_xor[last]) >> 8) & 0xf; if (!((maskx << ((j/2) & 7)) & 0x40)) { if (last && sx >= 0 && sx < 512) @@ -275,10 +274,10 @@ static void execute_blit(running_machine &machine) sx++; } - if (h == 1 && state->m_is_stoneball) + if (h == 1 && m_is_stoneball) last = ((val) >> 12) & 0xf; else - last = ((val ^ state->m_xor[last]) >> 12) & 0xf; + last = ((val ^ m_xor[last]) >> 12) & 0xf; { if (last && sx >= 0 && sx < 512) dest[tsy + sx] = color | (last); @@ -295,7 +294,7 @@ static void execute_blit(running_machine &machine) g_profiler.stop(); #if (!INSTANT_BLIT) - state->m_blitter_busy_until = machine.time() + attotime::from_nsec(w*h*20); + m_blitter_busy_until = machine.time() + attotime::from_nsec(w*h*20); #endif } @@ -322,7 +321,7 @@ WRITE16_MEMBER(artmagic_state::artmagic_blitter_w) /* offset 3 triggers the blit */ if (offset == 3) - execute_blit(machine()); + execute_blit(); /* offset 4 contains the target page */ else if (offset == 4) @@ -341,7 +340,7 @@ void artmagic_scanline(screen_device &screen, bitmap_rgb32 &bitmap, int scanline { artmagic_state *state = screen.machine().driver_data(); offs_t offset = (params->rowaddr << 12) & 0x7ff000; - UINT16 *vram = address_to_vram(state, &offset); + UINT16 *vram = state->address_to_vram(&offset); UINT32 *dest = &bitmap.pix32(scanline); const rgb_t *pens = state->m_tlc34076->get_pens(); int coladdr = params->coladdr << 1;