summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/includes/hng64.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/includes/hng64.h')
-rw-r--r--src/mame/includes/hng64.h532
1 files changed, 0 insertions, 532 deletions
diff --git a/src/mame/includes/hng64.h b/src/mame/includes/hng64.h
deleted file mode 100644
index d7965ecf30c..00000000000
--- a/src/mame/includes/hng64.h
+++ /dev/null
@@ -1,532 +0,0 @@
-// license:LGPL-2.1+
-// copyright-holders:David Haywood, Angelo Salese, ElSemi, Andrew Gardner
-#ifndef MAME_INCLUDES_HNG64_H
-#define MAME_INCLUDES_HNG64_H
-
-#pragma once
-
-#include "machine/msm6242.h"
-#include "machine/timer.h"
-#include "cpu/mips/mips3.h"
-#include "cpu/nec/v5x.h"
-#include "sound/l7a1045_l6028_dsp_a.h"
-#include "video/poly.h"
-#include "cpu/tlcs870/tlcs870.h"
-#include "machine/mb8421.h"
-#include "emupal.h"
-#include "screen.h"
-#include "tilemap.h"
-
-enum hng64trans_t
-{
- HNG64_TILEMAP_NORMAL = 1,
- HNG64_TILEMAP_ADDITIVE,
- HNG64_TILEMAP_ALPHA
-};
-
-struct blit_parameters
-{
- bitmap_rgb32 * bitmap;
- rectangle cliprect;
- uint32_t tilemap_priority_code;
- uint8_t mask;
- uint8_t value;
- uint8_t alpha;
- hng64trans_t drawformat;
-};
-
-#define HNG64_MASTER_CLOCK 50000000
-
-
-/////////////////
-/// 3d Engine ///
-/////////////////
-
-struct polyVert
-{
- float worldCoords[4]; // World space coordinates (X Y Z 1.0)
-
- float texCoords[4]; // Texture coordinates (U V 0 1.0) -> OpenGL style...
-
- float normal[4]; // Normal (X Y Z 1.0)
- float clipCoords[4]; // Homogeneous screen space coordinates (X Y Z W)
-
- float light[3]; // The intensity of the illumination at this point
-};
-
-struct polygon
-{
- int n; // Number of sides
- polyVert vert[10]; // Vertices (maximum number per polygon is 10 -> 3+6)
-
- float faceNormal[4]; // Normal of the face overall - for calculating visibility and flat-shading...
- int visible; // Polygon visibility in scene
-
- uint8_t texIndex; // Which texture to draw from (0x00-0x0f)
- uint8_t texType; // How to index into the texture
- uint8_t texPageSmall; // Does this polygon use 'small' texture pages?
- uint8_t texPageHorizOffset; // If it does use small texture pages, how far is this page horizontally offset?
- uint8_t texPageVertOffset; // If it does use small texture pages, how far is this page vertically offset?
-
- uint32_t palOffset; // The base offset where this object's palette starts.
- uint32_t palPageSize; // The size of the palette page that is being pointed to.
-
- uint32_t debugColor; // Will go away someday. Used to explicitly color polygons for debugging.
-};
-
-
-/////////////////////////
-/// polygon rendering ///
-/////////////////////////
-
-// Refer to the clipping planes as numbers
-#define HNG64_LEFT 0
-#define HNG64_RIGHT 1
-#define HNG64_TOP 2
-#define HNG64_BOTTOM 3
-#define HNG64_NEAR 4
-#define HNG64_FAR 5
-
-
-////////////////////////////////////
-/// Polygon rasterizer interface ///
-////////////////////////////////////
-
-const int HNG64_MAX_POLYGONS = 10000;
-
-typedef frustum_clip_vertex<float, 5> hng64_clip_vertex;
-
-struct hng64_poly_data
-{
- uint8_t texType;
- uint8_t texIndex;
- uint8_t texPageSmall;
- uint8_t texPageHorizOffset;
- uint8_t texPageVertOffset;
- int palOffset;
- int palPageSize;
- int debugColor;
-};
-
-class hng64_state;
-
-class hng64_poly_renderer : public poly_manager<float, hng64_poly_data, 7, HNG64_MAX_POLYGONS>
-{
-public:
- hng64_poly_renderer(hng64_state& state);
-
- void drawShaded(polygon *p);
- void render_scanline(int32_t scanline, const extent_t& extent, const hng64_poly_data& renderData, int threadid);
-
- hng64_state& state() { return m_state; }
- bitmap_rgb32& colorBuffer3d() { return m_colorBuffer3d; }
- float* depthBuffer3d() { return m_depthBuffer3d.get(); }
-
-private:
- hng64_state& m_state;
-
- // (Temporarily class members - someday they will live in the memory map)
- bitmap_rgb32 m_colorBuffer3d;
- std::unique_ptr<float[]> m_depthBuffer3d;
-};
-
-
-// TODO, this could become the IO board device emulation
-class hng64_lamps_device : public device_t
-{
-public:
- hng64_lamps_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
-
- auto lamps0_out_cb() { return m_lamps_out_cb[0].bind(); }
- auto lamps1_out_cb() { return m_lamps_out_cb[1].bind(); }
- auto lamps2_out_cb() { return m_lamps_out_cb[2].bind(); }
- auto lamps3_out_cb() { return m_lamps_out_cb[3].bind(); }
- auto lamps4_out_cb() { return m_lamps_out_cb[4].bind(); }
- auto lamps5_out_cb() { return m_lamps_out_cb[5].bind(); }
- auto lamps6_out_cb() { return m_lamps_out_cb[6].bind(); }
- auto lamps7_out_cb() { return m_lamps_out_cb[7].bind(); }
-
- void lamps_w(offs_t offset, uint8_t data) { m_lamps_out_cb[offset](data); }
-
-protected:
- virtual void device_start() override;
-
-private:
- devcb_write8::array<8> m_lamps_out_cb;
-};
-
-
-class hng64_state : public driver_device
-{
-public:
- hng64_state(const machine_config &mconfig, device_type type, const char *tag) :
- driver_device(mconfig, type, tag),
- m_screen(*this, "screen"),
- m_palette(*this, "palette"),
- m_maincpu(*this, "maincpu"),
- m_audiocpu(*this, "audiocpu"),
- m_iomcu(*this, "iomcu"),
- m_lamps(*this, "lamps"),
- m_dt71321_dpram(*this, "dt71321_dpram"),
- m_dsp(*this, "l7a1045"),
- m_comm(*this, "network"),
- m_rtc(*this, "rtc"),
- m_mainram(*this, "mainram"),
- m_cart(*this, "cart"),
- m_sysregs(*this, "sysregs"),
- m_rombase(*this, "rombase"),
- m_spriteram(*this, "spriteram"),
- m_spriteregs(*this, "spriteregs"),
- m_videoram(*this, "videoram"),
- m_videoregs(*this, "videoregs"),
- m_tcram(*this, "tcram"),
- m_fbtable(*this, "fbtable"),
- m_comhack(*this, "comhack"),
- m_fbram1(*this, "fbram1"),
- m_fbram2(*this, "fbram2"),
- m_idt7133_dpram(*this, "com_ram"),
- m_gfxdecode(*this, "gfxdecode"),
- m_in(*this, "IN%u", 0U),
- m_an_in(*this, "AN%u", 0U),
- m_samsho64_3d_hack(0),
- m_roadedge_3d_hack(0)
- { }
-
- void hng64(machine_config &config);
- void hng64_default(machine_config &config);
- void hng64_drive(machine_config &config);
- void hng64_shoot(machine_config &config);
- void hng64_fight(machine_config &config);
-
- void init_roadedge();
- void init_hng64_drive();
- void init_hng64();
- void init_hng64_shoot();
- void init_ss64();
- void init_hng64_fght();
-
- uint8_t *m_texturerom;
- required_device<screen_device> m_screen;
- required_device<palette_device> m_palette;
-
-private:
- /* TODO: NOT measured! */
- const int PIXEL_CLOCK = (HNG64_MASTER_CLOCK*2)/4; // x 2 is due to the interlaced screen ...
-
- const int HTOTAL = 0x200+0x100;
- const int HBEND = 0;
- const int HBSTART = 0x200;
-
- const int VTOTAL = 264*2;
- const int VBEND = 0;
- const int VBSTART = 224*2;
-
-
- required_device<mips3_device> m_maincpu;
- required_device<v53a_device> m_audiocpu;
- required_device<tmp87ph40an_device> m_iomcu;
- required_device<hng64_lamps_device> m_lamps;
- required_device<idt71321_device> m_dt71321_dpram;
- required_device<l7a1045_sound_device> m_dsp;
- required_device<cpu_device> m_comm;
- required_device<msm6242_device> m_rtc;
-
- required_shared_ptr<uint32_t> m_mainram;
- required_shared_ptr<uint32_t> m_cart;
- required_shared_ptr<uint32_t> m_sysregs;
- required_shared_ptr<uint32_t> m_rombase;
- required_shared_ptr<uint32_t> m_spriteram;
- required_shared_ptr<uint32_t> m_spriteregs;
- required_shared_ptr<uint32_t> m_videoram;
- required_shared_ptr<uint32_t> m_videoregs;
- required_shared_ptr<uint32_t> m_tcram;
-
- std::unique_ptr<uint16_t[]> m_dl;
- required_shared_ptr<uint32_t> m_fbtable;
- required_shared_ptr<uint32_t> m_comhack;
- required_shared_ptr<uint32_t> m_fbram1;
- required_shared_ptr<uint32_t> m_fbram2;
-
- required_shared_ptr<uint32_t> m_idt7133_dpram;
- //required_shared_ptr<uint8_t> m_com_mmu_mem;
-
- required_device<gfxdecode_device> m_gfxdecode;
-
- required_ioport_array<8> m_in;
- required_ioport_array<8> m_an_in;
-
-
- void hng64_default_lamps0_w(uint8_t data) { logerror("lamps0 %02x\n", data); }
- void hng64_default_lamps1_w(uint8_t data) { logerror("lamps1 %02x\n", data); }
- void hng64_default_lamps2_w(uint8_t data) { logerror("lamps2 %02x\n", data); }
- void hng64_default_lamps3_w(uint8_t data) { logerror("lamps3 %02x\n", data); }
- void hng64_default_lamps4_w(uint8_t data) { logerror("lamps4 %02x\n", data); }
- void hng64_default_lamps5_w(uint8_t data) { logerror("lamps5 %02x\n", data); }
- void hng64_default_lamps6_w(uint8_t data) { logerror("lamps6 %02x\n", data); }
- void hng64_default_lamps7_w(uint8_t data) { logerror("lamps7 %02x\n", data); }
-
- void hng64_drive_lamps7_w(uint8_t data);
- void hng64_drive_lamps6_w(uint8_t data);
- void hng64_drive_lamps5_w(uint8_t data);
-
- void hng64_shoot_lamps7_w(uint8_t data);
- void hng64_shoot_lamps6_w(uint8_t data);
-
- void hng64_fight_lamps6_w(uint8_t data);
-
- int m_samsho64_3d_hack;
- int m_roadedge_3d_hack;
-
- uint8_t m_fbcontrol[4];
-
- std::unique_ptr<uint16_t[]> m_soundram;
- std::unique_ptr<uint16_t[]> m_soundram2;
-
- /* Communications stuff */
- std::unique_ptr<uint8_t[]> m_com_op_base;
- std::unique_ptr<uint8_t[]> m_com_virtual_mem;
- uint8_t m_com_shared[8];
-
- int32_t m_dma_start;
- int32_t m_dma_dst;
- int32_t m_dma_len;
-
- uint16_t m_mcu_en;
-
- uint32_t m_activeDisplayList;
- uint32_t m_no_machine_error_code;
-
- uint32_t m_unk_vreg_toggle;
- uint32_t m_p1_trig;
-
- //uint32_t *q2;
-
- uint8_t m_screen_dis;
-
- struct hng64_tilemap {
- tilemap_t *m_tilemap_8x8;
- tilemap_t *m_tilemap_16x16;
- tilemap_t *m_tilemap_16x16_alt;
- };
-
- hng64_tilemap m_tilemap[4];
-
- uint8_t m_additive_tilemap_debug;
-
- uint32_t m_old_animmask;
- uint32_t m_old_animbits;
- uint16_t m_old_tileflags[4];
-
- // 3d State
- int m_paletteState3d;
- float m_projectionMatrix[16];
- float m_modelViewMatrix[16];
- float m_cameraMatrix[16];
-
- float m_lightStrength;
- float m_lightVector[3];
-
- uint32_t hng64_com_r(offs_t offset);
- void hng64_com_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
- void hng64_com_share_w(offs_t offset, uint8_t data);
- uint8_t hng64_com_share_r(offs_t offset);
- void hng64_com_share_mips_w(offs_t offset, uint8_t data);
- uint8_t hng64_com_share_mips_r(offs_t offset);
- uint32_t hng64_sysregs_r(offs_t offset, uint32_t mem_mask = ~0);
- void hng64_sysregs_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
- uint32_t hng64_rtc_r(offs_t offset, uint32_t mem_mask = ~0);
- void hng64_rtc_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
- uint32_t hng64_dmac_r(offs_t offset, uint32_t mem_mask = ~0);
- void hng64_dmac_w(address_space &space, offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
- uint32_t hng64_irqc_r(offs_t offset, uint32_t mem_mask = ~0);
- void hng64_irqc_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
- void hng64_mips_to_iomcu_irq_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
-
- uint8_t hng64_dualport_r(offs_t offset);
- void hng64_dualport_w(offs_t offset, uint8_t data);
-
- uint8_t hng64_fbcontrol_r(offs_t offset);
- void hng64_fbcontrol_w(offs_t offset, uint8_t data);
-
- void hng64_fbunkpair_w(offs_t offset, uint16_t data);
- void hng64_fbscroll_w(offs_t offset, uint16_t data);
-
- void hng64_fbunkbyte_w(offs_t offset, uint8_t data);
-
- uint32_t hng64_fbtable_r(offs_t offset, uint32_t mem_mask = ~0);
- void hng64_fbtable_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
-
- uint32_t hng64_fbram1_r(offs_t offset);
- void hng64_fbram1_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
-
- uint32_t hng64_fbram2_r(offs_t offset);
- void hng64_fbram2_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
-
- void dl_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
- //uint32_t dl_r();
- void dl_control_w(uint32_t data);
- void dl_upload_w(uint32_t data);
- void dl_unk_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
- uint32_t dl_vreg_r();
-
- void tcram_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
- uint32_t tcram_r(offs_t offset);
-
- void hng64_soundram_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
- uint32_t hng64_soundram_r(offs_t offset);
- void hng64_vregs_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
-
- // not actually used, but left in code so you can turn it and see the (possibly undesired?) behavior, see notes in memory map
- void hng64_soundram2_w(uint32_t data);
- uint32_t hng64_soundram2_r();
-
- void hng64_soundcpu_enable_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
-
- void hng64_sprite_clear_even_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
- void hng64_sprite_clear_odd_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
- void hng64_videoram_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0);
-
- // shared ram access
- uint8_t ioport0_r();
- void ioport0_w(uint8_t data);
- void ioport7_w(uint8_t data);
-
- // input port access
- uint8_t ioport3_r();
- void ioport3_w(uint8_t data);
- void ioport1_w(uint8_t data);
-
- // unknown access
- void ioport4_w(uint8_t data);
-
- // analog input access
- uint8_t anport0_r();
- uint8_t anport1_r();
- uint8_t anport2_r();
- uint8_t anport3_r();
- uint8_t anport4_r();
- uint8_t anport5_r();
- uint8_t anport6_r();
- uint8_t anport7_r();
-
- DECLARE_WRITE_LINE_MEMBER( sio0_w );
-
- uint8_t m_port7;
- uint8_t m_port1;
-
- int m_ex_ramaddr;
- int m_ex_ramaddr_upper;
-
- TIMER_CALLBACK_MEMBER(tempio_irqon_callback);
- TIMER_CALLBACK_MEMBER(tempio_irqoff_callback);
- emu_timer *m_tempio_irqon_timer;
- emu_timer *m_tempio_irqoff_timer;
- void init_io();
-
- void init_hng64_reorder_gfx();
-
- void set_irq(uint32_t irq_vector);
- uint32_t m_irq_pending;
-
- TIMER_CALLBACK_MEMBER(comhack_callback);
- emu_timer *m_comhack_timer;
-
-
- int m_irq_level;
- TILE_GET_INFO_MEMBER(get_hng64_tile0_8x8_info);
- TILE_GET_INFO_MEMBER(get_hng64_tile0_16x16_info);
- TILE_GET_INFO_MEMBER(get_hng64_tile1_8x8_info);
- TILE_GET_INFO_MEMBER(get_hng64_tile1_16x16_info);
- TILE_GET_INFO_MEMBER(get_hng64_tile2_8x8_info);
- TILE_GET_INFO_MEMBER(get_hng64_tile2_16x16_info);
- TILE_GET_INFO_MEMBER(get_hng64_tile3_8x8_info);
- TILE_GET_INFO_MEMBER(get_hng64_tile3_16x16_info);
- virtual void machine_start() override;
- virtual void machine_reset() override;
- virtual void video_start() override;
- uint32_t screen_update_hng64(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
- DECLARE_WRITE_LINE_MEMBER(screen_vblank_hng64);
- TIMER_DEVICE_CALLBACK_MEMBER(hng64_irq);
- void do_dma(address_space &space);
-
- void hng64_mark_all_tiles_dirty(int tilemap);
- void hng64_mark_tile_dirty(int tilemap, int tile_index);
- void hng64_drawtilemap(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, int tm);
-
- void hng64_tilemap_draw_roz_core(screen_device &screen, tilemap_t *tmap, const blit_parameters *blit,
- uint32_t startx, uint32_t starty, int incxx, int incxy, int incyx, int incyy, int wraparound);
-
- void hng64_tilemap_draw_roz(screen_device &screen, bitmap_rgb32 &dest, const rectangle &cliprect, tilemap_t *tmap,
- uint32_t startx, uint32_t starty, int incxx, int incxy, int incyx, int incyy,
- int wraparound, uint32_t flags, uint8_t priority, hng64trans_t drawformat);
-
- void hng64_tilemap_draw_roz_primask(screen_device &screen, bitmap_rgb32 &dest, const rectangle &cliprect, tilemap_t *tmap,
- uint32_t startx, uint32_t starty, int incxx, int incxy, int incyx, int incyy,
- int wraparound, uint32_t flags, uint8_t priority, uint8_t priority_mask, hng64trans_t drawformat);
-
-
-
-
- std::unique_ptr<hng64_poly_renderer> m_poly_renderer;
-
- TIMER_CALLBACK_MEMBER(hng64_3dfifo_processed);
- emu_timer *m_3dfifo_timer;
-
- uint16_t* m_vertsrom;
- int m_vertsrom_size;
- std::vector<polygon> m_polys; // HNG64_MAX_POLYGONS
-
- void clear3d();
- void hng64_command3d(const uint16_t* packet);
- void draw_sprites(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
- void transition_control(bitmap_rgb32 &bitmap, const rectangle &cliprect);
- void setCameraTransformation(const uint16_t* packet);
- void setLighting(const uint16_t* packet);
- void set3dFlags(const uint16_t* packet);
- void setCameraProjectionMatrix(const uint16_t* packet);
- void recoverPolygonBlock(const uint16_t* packet, int& numPolys);
- void printPacket(const uint16_t* packet, int hex);
- float uToF(uint16_t input);
- void matmul4(float *product, const float *a, const float *b);
- void vecmatmul4(float *product, const float *a, const float *b);
- float vecDotProduct(const float *a, const float *b);
- void setIdentity(float *matrix);
- void normalize(float* x);
-
- void reset_sound();
- void reset_net();
-
- DECLARE_WRITE_LINE_MEMBER(dma_hreq_cb);
- uint8_t dma_memr_cb(offs_t offset);
- void dma_iow3_cb(uint8_t data);
- DECLARE_WRITE_LINE_MEMBER(tcu_tm0_cb);
- DECLARE_WRITE_LINE_MEMBER(tcu_tm1_cb);
- DECLARE_WRITE_LINE_MEMBER(tcu_tm2_cb);
-
-
-
- uint16_t hng64_sound_port_0008_r(offs_t offset, uint16_t mem_mask = ~0);
- void hng64_sound_port_0008_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
-
- void hng64_sound_port_000a_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
- void hng64_sound_port_000c_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
-
- void hng64_sound_port_0080_w(uint16_t data);
-
- void hng64_sound_bank_w(offs_t offset, uint16_t data);
- uint16_t main_sound_comms_r(offs_t offset);
- void main_sound_comms_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
- uint16_t sound_comms_r(offs_t offset);
- void sound_comms_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
- uint16_t main_latch[2];
- uint16_t sound_latch[2];
- void hng64_audio(machine_config &config);
- void hng64_network(machine_config &config);
- void hng_comm_io_map(address_map &map);
- void hng_comm_map(address_map &map);
- void hng_map(address_map &map);
- void hng_sound_io(address_map &map);
- void hng_sound_map(address_map &map);
-};
-
-#endif // MAME_INCLUDES_HNG64_H