summaryrefslogtreecommitdiffstatshomepage
path: root/scripts/src/devices.lua
blob: cbdb046f3974c0fc6993003371c7322c58167a64 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
-- license:BSD-3-Clause
-- copyright-holders:MAMEdev Team

---------------------------------------------------------------------------
--
--   devices.lua
--
--   Rules for building device cores
--
---------------------------------------------------------------------------

function devicesProject(_target, _subtarget)

	disasm_files = { }
	disasm_dependency = { }
	disasm_custombuildtask = { }

	project ("optional")
	uuid (os.uuid("optional-" .. _target .."_" .. _subtarget))
	kind (LIBTYPE)
	targetsubdir(_target .."_" .. _subtarget)

	if (_OPTIONS["targetos"] ~= "asmjs") then
		options {
			"ArchiveSplit",
		}
	end

	addprojectflags()
	precompiledheaders()

	includedirs {
		MAME_DIR .. "src/osd",
		MAME_DIR .. "src/emu",
		MAME_DIR .. "src/devices",
		MAME_DIR .. "src/lib/netlist",
		MAME_DIR .. "src/mame", -- used for sound amiga
		MAME_DIR .. "src/lib",
		MAME_DIR .. "src/lib/util",
		MAME_DIR .. "3rdparty",
		GEN_DIR  .. "emu",
		GEN_DIR  .. "emu/layout",
		ext_includedir("expat"),
		ext_includedir("lua"),
		ext_includedir("flac"),
	}

	dofile(path.join("src", "cpu.lua"))

	dofile(path.join("src", "sound.lua"))

	dofile(path.join("src", "video.lua"))

	dofile(path.join("src", "machine.lua"))

	dofile(path.join("src", "bus.lua"))

if #disasm_files > 0 then
	project ("dasm")
	uuid ("f2d28b0a-6da5-4f78-b629-d834aa00429d")
	kind (LIBTYPE)
	targetsubdir(_target .."_" .. _subtarget)
	addprojectflags()
	precompiledheaders()

	includedirs {
		MAME_DIR .. "src/osd",
		MAME_DIR .. "src/emu",
		MAME_DIR .. "src/devices",
		MAME_DIR .. "src/lib",
		MAME_DIR .. "src/lib/util",
		MAME_DIR .. "3rdparty",
		GEN_DIR  .. "emu",
		ext_includedir("expat"),
		ext_includedir("lua"),
	}

	files {
		disasm_files
	}

	if #disasm_dependency > 0 then
		dependency {
			disasm_dependency[1]
		}
	end

	if #disasm_custombuildtask > 0 then
		custombuildtask {
			disasm_custombuildtask[1]
		}
	end
end

end
="w"> 0); } /*************************************************************************** Start the video hardware emulation. ***************************************************************************/ void msisaac_state::video_start() { m_bg_tilemap = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(msisaac_state::get_bg_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 32, 32); m_bg2_tilemap = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(msisaac_state::get_bg2_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 32, 32); m_fg_tilemap = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(msisaac_state::get_fg_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 32, 32); m_bg2_tilemap->set_transparent_pen(0); m_fg_tilemap->set_transparent_pen(0); } /*************************************************************************** Memory handlers ***************************************************************************/ WRITE8_MEMBER(msisaac_state::msisaac_fg_scrolly_w) { m_fg_tilemap->set_scrolly(0, data); } WRITE8_MEMBER(msisaac_state::msisaac_fg_scrollx_w) { m_fg_tilemap->set_scrollx(0, 9 + data); } WRITE8_MEMBER(msisaac_state::msisaac_bg2_scrolly_w) { m_bg2_tilemap->set_scrolly(0, data); } WRITE8_MEMBER(msisaac_state::msisaac_bg2_scrollx_w) { m_bg2_tilemap->set_scrollx(0, 9 + 2 + data); } WRITE8_MEMBER(msisaac_state::msisaac_bg_scrolly_w) { m_bg_tilemap->set_scrolly(0, data); } WRITE8_MEMBER(msisaac_state::msisaac_bg_scrollx_w) { m_bg_tilemap->set_scrollx(0, 9 + 4 + data); } #ifdef UNUSED_FUNCTION WRITE8_MEMBER(msisaac_state::msisaac_textbank1_w) { if (textbank1!=data) { textbank1 = data; fg_tilemap->mark_all_dirty(); } } #endif WRITE8_MEMBER(msisaac_state::msisaac_bg2_textbank_w) { if (m_bg2_textbank != data ) { m_bg2_textbank = data; m_bg2_tilemap->mark_all_dirty(); //check if we are correct on this one if ((data != 8) && (data != 0)) { logerror("bg2 control=%2x\n", data); } } } WRITE8_MEMBER(msisaac_state::msisaac_bg_videoram_w) { m_videoram2[offset] = data; m_bg_tilemap->mark_tile_dirty(offset); } WRITE8_MEMBER(msisaac_state::msisaac_bg2_videoram_w) { m_videoram3[offset] = data; m_bg2_tilemap->mark_tile_dirty(offset); } WRITE8_MEMBER(msisaac_state::msisaac_fg_videoram_w) { m_videoram[offset] = data; m_fg_tilemap->mark_tile_dirty(offset); } /*************************************************************************** Display refresh ***************************************************************************/ void msisaac_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect ) { const UINT8 *source = m_spriteram + 32 * 4 - 4; const UINT8 *finish = m_spriteram; /* ? */ while (source >= finish) { int sx = source[0]; int sy = 240 - source[1] - 1; int attributes = source[2]; int sprite_number = source[3]; int color = (attributes >> 4) & 0xf; int flipx = (attributes & 0x1); int flipy = (attributes & 0x2); gfx_element *gfx = machine().gfx[2]; if (attributes & 4) { //color = rand() & 15; gfx = machine().gfx[3]; } if (attributes & 8) /* double size sprite */ { switch (attributes & 3) { case 0: /* flipx==0 && flipy==0 */ gfx->transpen(bitmap,cliprect, sprite_number+1,color, flipx,flipy, sx,sy-16,0 ); gfx->transpen(bitmap,cliprect, sprite_number,color, flipx,flipy, sx,sy,0 ); break; case 1: /* flipx==1 && flipy==0 */ gfx->transpen(bitmap,cliprect, sprite_number+1,color, flipx,flipy, sx,sy-16,0 ); gfx->transpen(bitmap,cliprect, sprite_number,color, flipx,flipy, sx,sy,0 ); break; case 2: /* flipx==0 && flipy==1 */ gfx->transpen(bitmap,cliprect, sprite_number,color, flipx,flipy, sx,sy-16,0 ); gfx->transpen(bitmap,cliprect, sprite_number+1,color, flipx,flipy, sx,sy,0 ); break; case 3: /* flipx==1 && flipy==1 */ gfx->transpen(bitmap,cliprect, sprite_number,color, flipx,flipy, sx,sy-16,0 ); gfx->transpen(bitmap,cliprect, sprite_number+1,color, flipx,flipy, sx,sy,0 ); break; } } else { gfx->transpen(bitmap,cliprect, sprite_number, color, flipx,flipy, sx,sy,0 ); } source -= 4; } } UINT32 msisaac_state::screen_update_msisaac(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0); m_bg2_tilemap->draw(screen, bitmap, cliprect, 0, 0); draw_sprites(bitmap, cliprect); m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 0); return 0; }