mirror of
https://github.com/holub/mame
synced 2025-10-06 17:08:28 +03:00
magmax.cpp: device_finder (nw)
This commit is contained in:
parent
755f17458b
commit
d1d7649292
@ -30,7 +30,6 @@ Stephh's notes (based on the game M68000 code and some tests) :
|
||||
|
||||
#include "cpu/m68000/m68000.h"
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "sound/ay8910.h"
|
||||
#include "speaker.h"
|
||||
|
||||
|
||||
@ -39,7 +38,7 @@ WRITE16_MEMBER(magmax_state::cpu_irq_ack_w)
|
||||
m_maincpu->set_input_line(M68K_IRQ_1, CLEAR_LINE);
|
||||
}
|
||||
|
||||
READ8_MEMBER(magmax_state::magmax_sound_r)
|
||||
READ8_MEMBER(magmax_state::sound_r)
|
||||
{
|
||||
return (m_soundlatch->read(space, 0) << 1) | m_LS74_q;
|
||||
}
|
||||
@ -96,11 +95,6 @@ void magmax_state::machine_reset()
|
||||
|
||||
WRITE8_MEMBER(magmax_state::ay8910_portA_0_w)
|
||||
{
|
||||
ay8910_device *ay1 = machine().device<ay8910_device>("ay1");
|
||||
ay8910_device *ay2 = machine().device<ay8910_device>("ay2");
|
||||
ay8910_device *ay3 = machine().device<ay8910_device>("ay3");
|
||||
float percent;
|
||||
|
||||
/*There are three AY8910 chips and four(!) separate amplifiers on the board
|
||||
* Each of AY channels is hardware mapped in following way:
|
||||
* amplifier 0 gain x 1.00 <- AY0 CHA
|
||||
@ -108,10 +102,10 @@ float percent;
|
||||
* amplifier 2 gain x 4.54 (150K/33K) <- AY1 CHC + AY2 CHA
|
||||
* amplifier 3 gain x 4.54 (150K/33K) <- AY2 CHB + AY2 CHC
|
||||
*
|
||||
* Each of the amps has its own analog cuircit:
|
||||
* Each of the amps has its own analog circuit:
|
||||
* amp0, amp1 and amp2 are different from each other; amp3 is the same as amp2
|
||||
*
|
||||
* Outputs of those amps are inputs to post amps, each having own cuircit
|
||||
* Outputs of those amps are inputs to post amps, each having own circuit
|
||||
* that is partially controlled by AY #0 port A.
|
||||
* PORT A BIT 0 - control postamp 0 (gain x10.0 | gain x 5.00)
|
||||
* PORT A BIT 1 - control postamp 1 (gain x4.54 | gain x 2.27)
|
||||
@ -120,7 +114,7 @@ float percent;
|
||||
*
|
||||
* The "control" means assert/clear input pins on chip called 4066 (it is analog switch)
|
||||
* which results in volume gain (exactly 2 times).
|
||||
* I use mixer_set_volume() to emulate the effect.
|
||||
* I use set_output_gain() to emulate the effect.
|
||||
|
||||
gain summary:
|
||||
port A control ON OFF
|
||||
@ -152,30 +146,30 @@ bit3 - SOUND Chan#8 name=AY-3-8910 #2 Ch C
|
||||
|
||||
/*popmessage("gain_ctrl = %2x",data&0x0f);*/
|
||||
|
||||
percent = (m_gain_control & 1) ? 1.0 : 0.50;
|
||||
ay1->set_output_gain(0, percent);
|
||||
float percent = (m_gain_control & 1) ? 1.0 : 0.50;
|
||||
m_ay[0]->set_output_gain(0, percent);
|
||||
//fixme: set_RC_filter(0,10000,100000000,0,10000); /* 10K, 10000pF = 0.010uF */
|
||||
|
||||
percent = (m_gain_control & 2) ? 0.45 : 0.23;
|
||||
ay1->set_output_gain(1, percent);
|
||||
ay1->set_output_gain(2, percent);
|
||||
ay2->set_output_gain(0, percent);
|
||||
ay2->set_output_gain(1, percent);
|
||||
m_ay[0]->set_output_gain(1, percent);
|
||||
m_ay[0]->set_output_gain(2, percent);
|
||||
m_ay[1]->set_output_gain(0, percent);
|
||||
m_ay[1]->set_output_gain(1, percent);
|
||||
//fixme: set_RC_filter(1,4700,100000000,0,4700); /* 4.7K, 4700pF = 0.0047uF */
|
||||
//fixme: set_RC_filter(2,4700,100000000,0,4700); /* 4.7K, 4700pF = 0.0047uF */
|
||||
//fixme: set_RC_filter(3,4700,100000000,0,4700); /* 4.7K, 4700pF = 0.0047uF */
|
||||
//fixme: set_RC_filter(4,4700,100000000,0,4700); /* 4.7K, 4700pF = 0.0047uF */
|
||||
|
||||
percent = (m_gain_control & 4) ? 0.45 : 0.23;
|
||||
ay2->set_output_gain(2, percent);
|
||||
ay3->set_output_gain(0, percent);
|
||||
m_ay[1]->set_output_gain(2, percent);
|
||||
m_ay[2]->set_output_gain(0, percent);
|
||||
|
||||
percent = (m_gain_control & 8) ? 0.45 : 0.23;
|
||||
ay3->set_output_gain(1, percent);
|
||||
ay3->set_output_gain(2, percent);
|
||||
m_ay[2]->set_output_gain(1, percent);
|
||||
m_ay[2]->set_output_gain(2, percent);
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(magmax_state::magmax_vreg_w)
|
||||
WRITE16_MEMBER(magmax_state::vreg_w)
|
||||
{
|
||||
/* VRAM CONTROL REGISTER */
|
||||
/* bit0 - coin counter 1 */
|
||||
@ -186,28 +180,31 @@ WRITE16_MEMBER(magmax_state::magmax_vreg_w)
|
||||
/* bit5 - sprite bank MSB (DP1) */
|
||||
/* bit6 - BG display enable (BE)*/
|
||||
COMBINE_DATA(m_vreg);
|
||||
|
||||
machine().bookkeeping().coin_counter_w(0, BIT(data, 0));
|
||||
machine().bookkeeping().coin_counter_w(1, BIT(data, 1));
|
||||
}
|
||||
|
||||
|
||||
|
||||
void magmax_state::magmax_map(address_map &map)
|
||||
void magmax_state::main_map(address_map &map)
|
||||
{
|
||||
map(0x000000, 0x013fff).rom();
|
||||
map(0x018000, 0x018fff).ram();
|
||||
map(0x020000, 0x0207ff).ram().share("videoram");
|
||||
map(0x028000, 0x0281ff).ram().share("spriteram");
|
||||
map(0x020000, 0x0207ff).ram().share(m_videoram);
|
||||
map(0x028000, 0x0281ff).ram().share(m_spriteram);
|
||||
map(0x030000, 0x030001).portr("P1");
|
||||
map(0x030002, 0x030003).portr("P2");
|
||||
map(0x030004, 0x030005).portr("SYSTEM");
|
||||
map(0x030006, 0x030007).portr("DSW");
|
||||
map(0x030010, 0x030011).w(FUNC(magmax_state::magmax_vreg_w)).share("vreg");
|
||||
map(0x030012, 0x030013).writeonly().share("scroll_x");
|
||||
map(0x030014, 0x030015).writeonly().share("scroll_y");
|
||||
map(0x030010, 0x030011).w(FUNC(magmax_state::vreg_w)).share(m_vreg);
|
||||
map(0x030012, 0x030013).writeonly().share(m_scroll_x);
|
||||
map(0x030014, 0x030015).writeonly().share(m_scroll_y);
|
||||
map(0x03001d, 0x03001d).w(m_soundlatch, FUNC(generic_latch_8_device::write));
|
||||
map(0x03001e, 0x03001f).w(FUNC(magmax_state::cpu_irq_ack_w));
|
||||
}
|
||||
|
||||
void magmax_state::magmax_sound_map(address_map &map)
|
||||
void magmax_state::sound_map(address_map &map)
|
||||
{
|
||||
map.global_mask(0x7fff); // A15 not connected
|
||||
map(0x0000, 0x3fff).rom();
|
||||
@ -215,13 +212,13 @@ void magmax_state::magmax_sound_map(address_map &map)
|
||||
map(0x6000, 0x67ff).mirror(0x1800).ram();
|
||||
}
|
||||
|
||||
void magmax_state::magmax_sound_io_map(address_map &map)
|
||||
void magmax_state::sound_io_map(address_map &map)
|
||||
{
|
||||
map.global_mask(0xff);
|
||||
map(0x00, 0x01).w("ay1", FUNC(ay8910_device::address_data_w));
|
||||
map(0x02, 0x03).w("ay2", FUNC(ay8910_device::address_data_w));
|
||||
map(0x04, 0x05).w("ay3", FUNC(ay8910_device::address_data_w));
|
||||
map(0x06, 0x06).r(FUNC(magmax_state::magmax_sound_r));
|
||||
map(0x00, 0x01).w(m_ay[0], FUNC(ay8910_device::address_data_w));
|
||||
map(0x02, 0x03).w(m_ay[1], FUNC(ay8910_device::address_data_w));
|
||||
map(0x04, 0x05).w(m_ay[2], FUNC(ay8910_device::address_data_w));
|
||||
map(0x06, 0x06).r(FUNC(magmax_state::sound_r));
|
||||
}
|
||||
|
||||
|
||||
@ -323,54 +320,54 @@ static const gfx_layout spritelayout =
|
||||
};
|
||||
|
||||
static GFXDECODE_START( gfx_magmax )
|
||||
GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 1 ) /*no color codes*/
|
||||
GFXDECODE_ENTRY( "gfx2", 0, spritelayout, 1*16, 16 ) /*16 color codes*/
|
||||
GFXDECODE_ENTRY( "chars", 0, charlayout, 0, 1 ) /*no color codes*/
|
||||
GFXDECODE_ENTRY( "sprites", 0, spritelayout, 1*16, 16 ) /*16 color codes*/
|
||||
GFXDECODE_END
|
||||
|
||||
|
||||
MACHINE_CONFIG_START(magmax_state::magmax)
|
||||
|
||||
/* basic machine hardware */
|
||||
MCFG_DEVICE_ADD("maincpu", M68000, XTAL(16'000'000)/2) /* verified on pcb */
|
||||
MCFG_DEVICE_PROGRAM_MAP(magmax_map)
|
||||
MCFG_DEVICE_ADD(m_maincpu, M68000, XTAL(16'000'000)/2) /* verified on pcb */
|
||||
MCFG_DEVICE_PROGRAM_MAP(main_map)
|
||||
MCFG_DEVICE_VBLANK_INT_DRIVER("screen", magmax_state, irq1_line_assert)
|
||||
|
||||
MCFG_DEVICE_ADD("audiocpu", Z80,XTAL(20'000'000)/8) /* verified on pcb */
|
||||
MCFG_DEVICE_PROGRAM_MAP(magmax_sound_map)
|
||||
MCFG_DEVICE_IO_MAP(magmax_sound_io_map)
|
||||
MCFG_DEVICE_ADD(m_audiocpu, Z80,XTAL(20'000'000)/8) /* verified on pcb */
|
||||
MCFG_DEVICE_PROGRAM_MAP(sound_map)
|
||||
MCFG_DEVICE_IO_MAP(sound_io_map)
|
||||
|
||||
MCFG_QUANTUM_TIME(attotime::from_hz(600))
|
||||
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
MCFG_SCREEN_ADD(m_screen, RASTER)
|
||||
MCFG_SCREEN_REFRESH_RATE(60)
|
||||
MCFG_SCREEN_SIZE(32*8, 32*8)
|
||||
MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(magmax_state, screen_update_magmax)
|
||||
MCFG_SCREEN_PALETTE("palette")
|
||||
MCFG_SCREEN_UPDATE_DRIVER(magmax_state, screen_update)
|
||||
MCFG_SCREEN_PALETTE(m_palette)
|
||||
|
||||
MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_magmax)
|
||||
MCFG_PALETTE_ADD("palette", 1*16 + 16*16 + 256)
|
||||
MCFG_DEVICE_ADD(m_gfxdecode, GFXDECODE, m_palette, gfx_magmax)
|
||||
MCFG_PALETTE_ADD(m_palette, 1*16 + 16*16 + 256)
|
||||
MCFG_PALETTE_INDIRECT_ENTRIES(256)
|
||||
MCFG_PALETTE_INIT_OWNER(magmax_state, magmax)
|
||||
|
||||
/* sound hardware */
|
||||
SPEAKER(config, "mono").front_center();
|
||||
|
||||
MCFG_DEVICE_ADD("ay1", AY8910, XTAL(20'000'000)/16) /* verified on pcb */
|
||||
MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(*this, magmax_state, ay8910_portA_0_w)) /*write port A*/
|
||||
MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(*this, magmax_state, ay8910_portB_0_w)) /*write port B*/
|
||||
MCFG_DEVICE_ADD(m_ay[0], AY8910, XTAL(20'000'000)/16) /* verified on pcb */
|
||||
MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(*this, magmax_state, ay8910_portA_0_w))
|
||||
MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(*this, magmax_state, ay8910_portB_0_w))
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40)
|
||||
|
||||
MCFG_DEVICE_ADD("ay2", AY8910, XTAL(20'000'000)/16) /* verified on pcb */
|
||||
MCFG_DEVICE_ADD(m_ay[1], AY8910, XTAL(20'000'000)/16) /* verified on pcb */
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40)
|
||||
|
||||
MCFG_DEVICE_ADD("ay3", AY8910, XTAL(20'000'000)/16) /* verified on pcb */
|
||||
MCFG_DEVICE_ADD(m_ay[2], AY8910, XTAL(20'000'000)/16) /* verified on pcb */
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40)
|
||||
|
||||
MCFG_GENERIC_LATCH_8_ADD("soundlatch")
|
||||
MCFG_GENERIC_LATCH_DATA_PENDING_CB(INPUTLINE("audiocpu", 0))
|
||||
MCFG_GENERIC_LATCH_8_ADD(m_soundlatch)
|
||||
MCFG_GENERIC_LATCH_DATA_PENDING_CB(INPUTLINE(m_audiocpu, 0))
|
||||
MCFG_GENERIC_LATCH_SEPARATE_ACKNOWLEDGE(true)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
@ -388,10 +385,10 @@ ROM_START( magmax )
|
||||
ROM_LOAD( "15.17b", 0x00000, 0x2000, CRC(19e7b983) SHA1(b1cd0b728e7cce87d9b1039be179d0915d939a4f) )
|
||||
ROM_LOAD( "16.18b", 0x02000, 0x2000, CRC(055e3126) SHA1(8c9b03eb7588512ef17f8c1b731a2fd7cf372bf8) )
|
||||
|
||||
ROM_REGION( 0x02000, "gfx1", 0 ) /* chars */
|
||||
ROM_REGION( 0x02000, "chars", 0 )
|
||||
ROM_LOAD( "23.15g", 0x00000, 0x2000, CRC(a7471da2) SHA1(ec2815a5801bc55955e612173a845399fd493eb7) )
|
||||
|
||||
ROM_REGION( 0x10000, "gfx2", 0 ) /* sprites */
|
||||
ROM_REGION( 0x10000, "sprites", 0 )
|
||||
ROM_LOAD( "17.3e", 0x00000, 0x2000, CRC(8e305b2e) SHA1(74c318089f6bebafbee31c22302e93a09d3ffa32) )
|
||||
ROM_LOAD( "18.5e", 0x02000, 0x2000, CRC(14c55a60) SHA1(fd2a1b434bb65502f0f791995caf1cd869ccd254) )
|
||||
ROM_LOAD( "19.6e", 0x04000, 0x2000, CRC(fa4141d8) SHA1(a5279d1ada5a13df14a8bbc18ceeea79f82a4c23) )
|
||||
|
@ -2,6 +2,7 @@
|
||||
// copyright-holders:Takahiro Nogi
|
||||
#include "screen.h"
|
||||
#include "machine/gen_latch.h"
|
||||
#include "sound/ay8910.h"
|
||||
|
||||
class magmax_state : public driver_device
|
||||
{
|
||||
@ -13,18 +14,36 @@ public:
|
||||
m_vreg(*this, "vreg"),
|
||||
m_scroll_x(*this, "scroll_x"),
|
||||
m_scroll_y(*this, "scroll_y"),
|
||||
m_rom18B(*this, "user1"),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_audiocpu(*this, "audiocpu"),
|
||||
m_ay(*this, "ay%u", 0U),
|
||||
m_soundlatch(*this, "soundlatch"),
|
||||
m_gfxdecode(*this, "gfxdecode"),
|
||||
m_screen(*this, "screen"),
|
||||
m_palette(*this, "palette") { }
|
||||
|
||||
void magmax(machine_config &config);
|
||||
|
||||
protected:
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
virtual void video_start() override;
|
||||
|
||||
private:
|
||||
required_shared_ptr<uint16_t> m_videoram;
|
||||
required_shared_ptr<uint16_t> m_spriteram;
|
||||
required_shared_ptr<uint16_t> m_vreg;
|
||||
required_shared_ptr<uint16_t> m_scroll_x;
|
||||
required_shared_ptr<uint16_t> m_scroll_y;
|
||||
required_region_ptr<uint8_t> m_rom18B;
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<cpu_device> m_audiocpu;
|
||||
required_device_array<ay8910_device, 3> m_ay;
|
||||
required_device<generic_latch_8_device> m_soundlatch;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<screen_device> m_screen;
|
||||
required_device<palette_device> m_palette;
|
||||
|
||||
uint8_t m_sound_latch;
|
||||
uint8_t m_LS74_clr;
|
||||
@ -34,25 +53,18 @@ public:
|
||||
int m_flipscreen;
|
||||
std::unique_ptr<uint32_t[]> m_prom_tab;
|
||||
bitmap_ind16 m_bitmap;
|
||||
|
||||
DECLARE_WRITE16_MEMBER(cpu_irq_ack_w);
|
||||
DECLARE_READ8_MEMBER(magmax_sound_r);
|
||||
DECLARE_WRITE16_MEMBER(magmax_vreg_w);
|
||||
DECLARE_READ8_MEMBER(sound_r);
|
||||
DECLARE_WRITE16_MEMBER(vreg_w);
|
||||
DECLARE_WRITE8_MEMBER(ay8910_portB_0_w);
|
||||
DECLARE_WRITE8_MEMBER(ay8910_portA_0_w);
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
virtual void video_start() override;
|
||||
|
||||
DECLARE_PALETTE_INIT(magmax);
|
||||
uint32_t screen_update_magmax(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
TIMER_CALLBACK_MEMBER(scanline_callback);
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<cpu_device> m_audiocpu;
|
||||
required_device<generic_latch_8_device> m_soundlatch;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<screen_device> m_screen;
|
||||
required_device<palette_device> m_palette;
|
||||
void magmax(machine_config &config);
|
||||
void magmax_map(address_map &map);
|
||||
void magmax_sound_io_map(address_map &map);
|
||||
void magmax_sound_map(address_map &map);
|
||||
|
||||
void main_map(address_map &map);
|
||||
void sound_io_map(address_map &map);
|
||||
void sound_map(address_map &map);
|
||||
};
|
||||
|
@ -29,10 +29,9 @@ Additional tweaking by Jarek Burczynski
|
||||
PALETTE_INIT_MEMBER(magmax_state, magmax)
|
||||
{
|
||||
const uint8_t *color_prom = memregion("proms")->base();
|
||||
int i;
|
||||
|
||||
/* create a lookup table for the palette */
|
||||
for (i = 0; i < 0x100; i++)
|
||||
for (int i = 0; i < 0x100; i++)
|
||||
{
|
||||
int r = pal4bit(color_prom[i + 0x000]);
|
||||
int g = pal4bit(color_prom[i + 0x100]);
|
||||
@ -45,25 +44,24 @@ PALETTE_INIT_MEMBER(magmax_state, magmax)
|
||||
color_prom += 0x300;
|
||||
|
||||
/* characters use colors 0-0x0f */
|
||||
for (i = 0; i < 0x10; i++)
|
||||
for (int i = 0; i < 0x10; i++)
|
||||
palette.set_pen_indirect(i, i);
|
||||
|
||||
/*sprites use colors 0x10-0x1f, color 0x1f being transparent*/
|
||||
for (i = 0x10; i < 0x110; i++)
|
||||
for (int i = 0x10; i < 0x110; i++)
|
||||
{
|
||||
uint8_t ctabentry = (color_prom[i - 0x10] & 0x0f) | 0x10;
|
||||
palette.set_pen_indirect(i, ctabentry);
|
||||
}
|
||||
|
||||
/* background uses all colors (no lookup table) */
|
||||
for (i = 0x110; i < 0x210; i++)
|
||||
for (int i = 0x110; i < 0x210; i++)
|
||||
palette.set_pen_indirect(i, i - 0x110);
|
||||
|
||||
}
|
||||
|
||||
void magmax_state::video_start()
|
||||
{
|
||||
int i,v;
|
||||
uint8_t * prom14D = memregion("user2")->base();
|
||||
|
||||
/* Set up save state */
|
||||
@ -74,21 +72,17 @@ void magmax_state::video_start()
|
||||
m_screen->register_screen_bitmap(m_bitmap);
|
||||
|
||||
/* Allocate temporary bitmap */
|
||||
for (i=0; i<256; i++)
|
||||
for (int i = 0; i < 256; i++)
|
||||
{
|
||||
v = (prom14D[i] << 4) + prom14D[i + 0x100];
|
||||
int v = (prom14D[i] << 4) + prom14D[i + 0x100];
|
||||
m_prom_tab[i] = ((v&0x1f)<<8) | ((v&0x10)<<10) | ((v&0xe0)>>1); /*convert data into more useful format*/
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
uint32_t magmax_state::screen_update_magmax(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
uint32_t magmax_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
uint16_t *videoram = m_videoram;
|
||||
uint16_t *spriteram16 = m_spriteram;
|
||||
int offs;
|
||||
|
||||
/* bit 2 flip screen */
|
||||
m_flipscreen = *m_vreg & 0x04;
|
||||
|
||||
@ -97,17 +91,14 @@ uint32_t magmax_state::screen_update_magmax(screen_device &screen, bitmap_ind16
|
||||
bitmap.fill(0, cliprect);
|
||||
else
|
||||
{
|
||||
int v;
|
||||
uint8_t * rom18B = memregion("user1")->base();
|
||||
uint32_t scroll_h = (*m_scroll_x) & 0x3fff;
|
||||
uint32_t scroll_v = (*m_scroll_y) & 0xff;
|
||||
|
||||
/*clear background-over-sprites bitmap*/
|
||||
m_bitmap.fill(0);
|
||||
|
||||
for (v = 2*8; v < 30*8; v++) /*only for visible area*/
|
||||
for (int v = 2*8; v < 30*8; v++) /*only for visible area*/
|
||||
{
|
||||
int h;
|
||||
uint16_t line_data[256];
|
||||
|
||||
uint32_t map_v_scr_100 = (scroll_v + v) & 0x100;
|
||||
@ -117,7 +108,7 @@ uint32_t magmax_state::screen_update_magmax(screen_device &screen, bitmap_ind16
|
||||
|
||||
pen_t pen_base = 0x110 + 0x20 + (map_v_scr_100>>1);
|
||||
|
||||
for (h = 0; h < 0x100; h++)
|
||||
for (int h = 0; h < 0x100; h++)
|
||||
{
|
||||
uint32_t graph_data;
|
||||
uint32_t graph_color;
|
||||
@ -129,9 +120,9 @@ uint32_t magmax_state::screen_update_magmax(screen_device &screen, bitmap_ind16
|
||||
if (!map_v_scr_100)
|
||||
{
|
||||
if (h & 0x80)
|
||||
LS283 = LS283 + (rom18B[ map_v_scr_1fe_6 + (h ^ 0xff) ] ^ 0xff);
|
||||
LS283 = LS283 + (m_rom18B[ map_v_scr_1fe_6 + (h ^ 0xff) ] ^ 0xff);
|
||||
else
|
||||
LS283 = LS283 + rom18B[ map_v_scr_1fe_6 + h ] + 0xff01;
|
||||
LS283 = LS283 + m_rom18B[ map_v_scr_1fe_6 + h ] + 0xff01;
|
||||
}
|
||||
|
||||
prom_data = m_prom_tab[ (LS283 >> 6) & 0xff ];
|
||||
@ -140,12 +131,12 @@ uint32_t magmax_state::screen_update_magmax(screen_device &screen, bitmap_ind16
|
||||
rom18D_addr += (prom_data & 0x1f00) + ((LS283 & 0x38) >>3);
|
||||
|
||||
rom15F_addr &= 0x201c;
|
||||
rom15F_addr += (rom18B[0x4000 + rom18D_addr ]<<5) + ((LS283 & 0x6)>>1);
|
||||
rom15F_addr += (m_rom18B[0x4000 + rom18D_addr ]<<5) + ((LS283 & 0x6)>>1);
|
||||
rom15F_addr += (prom_data & 0x4000);
|
||||
|
||||
graph_color = (prom_data & 0x0070);
|
||||
|
||||
graph_data = rom18B[0x8000 + rom15F_addr];
|
||||
graph_data = m_rom18B[0x8000 + rom15F_addr];
|
||||
if ((LS283 & 1))
|
||||
graph_data >>= 4;
|
||||
graph_data &= 0x0f;
|
||||
@ -159,9 +150,8 @@ uint32_t magmax_state::screen_update_magmax(screen_device &screen, bitmap_ind16
|
||||
|
||||
if (m_flipscreen)
|
||||
{
|
||||
int i;
|
||||
uint16_t line_data_flip_x[256];
|
||||
for (i=0; i<256; i++)
|
||||
for (int i = 0; i < 256; i++)
|
||||
line_data_flip_x[i] = line_data[255-i];
|
||||
draw_scanline16(bitmap, 0, 255-v, 256, line_data_flip_x, nullptr);
|
||||
}
|
||||
@ -171,21 +161,19 @@ uint32_t magmax_state::screen_update_magmax(screen_device &screen, bitmap_ind16
|
||||
}
|
||||
|
||||
/* draw the sprites */
|
||||
for (offs = 0; offs < m_spriteram.bytes()/2; offs += 4)
|
||||
for (int offs = 0; offs < m_spriteram.bytes()/2; offs += 4)
|
||||
{
|
||||
int sx, sy;
|
||||
|
||||
sy = spriteram16[offs] & 0xff;
|
||||
int sy = m_spriteram[offs] & 0xff;
|
||||
|
||||
if (sy)
|
||||
{
|
||||
int code = spriteram16[offs + 1] & 0xff;
|
||||
int attr = spriteram16[offs + 2] & 0xff;
|
||||
int code = m_spriteram[offs + 1] & 0xff;
|
||||
int attr = m_spriteram[offs + 2] & 0xff;
|
||||
int color = (attr & 0xf0) >> 4;
|
||||
int flipx = attr & 0x04;
|
||||
int flipy = attr & 0x08;
|
||||
|
||||
sx = (spriteram16[offs + 3] & 0xff) - 0x80 + 0x100 * (attr & 0x01);
|
||||
int sx = (m_spriteram[offs + 3] & 0xff) - 0x80 + 0x100 * (attr & 0x01);
|
||||
sy = 239 - sy;
|
||||
|
||||
if (m_flipscreen)
|
||||
@ -212,12 +200,11 @@ uint32_t magmax_state::screen_update_magmax(screen_device &screen, bitmap_ind16
|
||||
copybitmap_trans(bitmap, m_bitmap, m_flipscreen,m_flipscreen,0,0, cliprect, 0);
|
||||
|
||||
/* draw the foreground characters */
|
||||
for (offs = 32*32-1; offs >= 0; offs -= 1)
|
||||
for (int offs = 32*32-1; offs >= 0; offs -= 1)
|
||||
{
|
||||
//int page = (*m_vreg>>3) & 0x1;
|
||||
int code;
|
||||
int code = m_videoram[offs /*+ page*/] & 0xff;
|
||||
|
||||
code = videoram[offs /*+ page*/] & 0xff;
|
||||
if (code)
|
||||
{
|
||||
int sx = (offs % 32);
|
||||
|
Loading…
Reference in New Issue
Block a user