diff options
Diffstat (limited to 'src/devices/video/pc_vga.h')
-rw-r--r-- | src/devices/video/pc_vga.h | 577 |
1 files changed, 100 insertions, 477 deletions
diff --git a/src/devices/video/pc_vga.h b/src/devices/video/pc_vga.h index 22d8ba33a65..679f7e2c22e 100644 --- a/src/devices/video/pc_vga.h +++ b/src/devices/video/pc_vga.h @@ -11,11 +11,19 @@ #ifndef MAME_VIDEO_PC_VGA_H #define MAME_VIDEO_PC_VGA_H +#pragma once + +#include "ibm8514a.h" + #include "screen.h" + // ======================> vga_device -class vga_device : public device_t, public device_video_interface, public device_palette_interface +class vga_device : public device_t + , public device_video_interface + , public device_palette_interface + , public device_memory_interface { friend class ibm8514a_device; @@ -26,19 +34,17 @@ public: virtual void zero(); virtual uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); - virtual READ8_MEMBER(port_03b0_r); - virtual WRITE8_MEMBER(port_03b0_w); - virtual READ8_MEMBER(port_03c0_r); - virtual WRITE8_MEMBER(port_03c0_w); - virtual READ8_MEMBER(port_03d0_r); - virtual WRITE8_MEMBER(port_03d0_w); - virtual READ8_MEMBER(mem_r); - virtual WRITE8_MEMBER(mem_w); - virtual READ8_MEMBER(mem_linear_r); - virtual WRITE8_MEMBER(mem_linear_w); - virtual TIMER_CALLBACK_MEMBER(vblank_timer_cb); + void io_map(address_map &map); + + virtual uint8_t mem_r(offs_t offset); + virtual void mem_w(offs_t offset, uint8_t data); + virtual uint8_t mem_linear_r(offs_t offset); + virtual void mem_linear_w(offs_t offset,uint8_t data); void set_offset(uint16_t val) { vga.crtc.offset = val; } + void set_vram_size(size_t vram_size) { vga.svga_intf.vram_size = vram_size; } + // FIXME: should be protected, but virge_pci.cpp violates this + inline uint16_t get_crtc_port() { return BIT(vga.miscellaneous_output, 0) ? 0x3d0 : 0x3b0; } protected: enum @@ -58,12 +64,15 @@ protected: vga_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + TIMER_CALLBACK_MEMBER(vblank_timer_cb); + // device-level overrides virtual void device_start() override; virtual void device_reset() override; + virtual ioport_constructor device_input_ports() const override; // device_palette_interface overrides - virtual uint32_t palette_entries() const override { return 0x100; } + virtual uint32_t palette_entries() const noexcept override { return 0x100; } void vga_vh_text(bitmap_rgb32 &bitmap, const rectangle &cliprect); void vga_vh_ega(bitmap_rgb32 &bitmap, const rectangle &cliprect); @@ -72,19 +81,56 @@ protected: void vga_vh_mono(bitmap_rgb32 &bitmap, const rectangle &cliprect); virtual uint8_t pc_vga_choosevideomode(); void recompute_params_clock(int divisor, int xtal); - uint8_t crtc_reg_read(uint8_t index); virtual void recompute_params(); - void crtc_reg_write(uint8_t index, uint8_t data); - void seq_reg_write(uint8_t index, uint8_t data); uint8_t vga_vblank(); - READ8_MEMBER(vga_crtc_r); - WRITE8_MEMBER(vga_crtc_w); - uint8_t gc_reg_read(uint8_t index); - void attribute_reg_write(uint8_t index, uint8_t data); - void gc_reg_write(uint8_t index,uint8_t data); + + virtual space_config_vector memory_space_config() const override; + + virtual void io_3bx_3dx_map(address_map &map); + + u8 crtc_address_r(offs_t offset); + void crtc_address_w(offs_t offset, u8 data); + virtual u8 crtc_data_r(offs_t offset); + virtual void crtc_data_w(offs_t offset, u8 data); + u8 input_status_1_r(offs_t offset); + void feature_control_w(offs_t offset, u8 data); + + virtual void io_3cx_map(address_map &map); + + u8 atc_address_r(offs_t offset); + void atc_address_data_w(offs_t offset, u8 data); + u8 atc_data_r(offs_t offset); + u8 input_status_0_r(offs_t offset); + void miscellaneous_output_w(offs_t offset, u8 data); + u8 sequencer_address_r(offs_t offset); + void sequencer_address_w(offs_t offset, u8 data); + virtual u8 sequencer_data_r(offs_t offset); + virtual void sequencer_data_w(offs_t offset, u8 data); + u8 ramdac_mask_r(offs_t offset); + void ramdac_mask_w(offs_t offset, u8 data); + u8 ramdac_state_r(offs_t offset); + void ramdac_read_index_w(offs_t offset, u8 data); + u8 ramdac_write_index_r(offs_t offset); + void ramdac_write_index_w(offs_t offset, u8 data); + u8 ramdac_data_r(offs_t offset); + void ramdac_data_w(offs_t offset, u8 data); + u8 feature_control_r(offs_t offset); + u8 miscellaneous_output_r(offs_t offset); + virtual u8 gc_address_r(offs_t offset); + virtual void gc_address_w(offs_t offset, u8 data); + virtual u8 gc_data_r(offs_t offset); + virtual void gc_data_w(offs_t offset, u8 data); + + virtual void crtc_map(address_map &map); + virtual void sequencer_map(address_map &map); + virtual void gc_map(address_map &map); + virtual void attribute_map(address_map &map); + + // NOTE: do not use the subclassed result when determining pitch in SVGA modes. + // dw & word mode should apply to normal VGA modes only. virtual uint16_t offset(); - virtual uint32_t start_addr(); - inline uint8_t vga_latch_write(int offs, uint8_t data); + virtual uint32_t latch_start_addr() { return vga.crtc.start_addr_latch; } + virtual uint8_t vga_latch_write(int offs, uint8_t data); inline uint8_t rotate_right(uint8_t val) { return (val >> vga.gc.rotate_count) | (val << (8 - vga.gc.rotate_count)); } inline uint8_t vga_logical_op(uint8_t data, uint8_t plane, uint8_t mask) { @@ -108,21 +154,18 @@ protected: return res; } - + virtual bool get_interlace_mode() { return false; } + virtual void palette_update(); struct vga_t { - vga_t(device_t &owner) : read_dipswitch(owner) { } - - read8_delegate read_dipswitch; + vga_t(device_t &owner) { } struct { size_t vram_size; - int seq_regcount; - int crtc_regcount; } svga_intf; - std::vector<uint8_t> memory; + std::unique_ptr<uint8_t []> memory; uint32_t pens[16]; /* the current 16 pens */ uint8_t miscellaneous_output; @@ -235,7 +278,29 @@ protected: struct { uint8_t reg; } oak; } vga; + required_ioport m_input_sense; + emu_timer *m_vblank_timer; + + enum { + MAIN_IF_REG = 0, + CRTC_REG, + GC_REG, + SEQ_REG, + ATC_REG, + // pointer for subclasses to declare further spaces + EXT_REG + }; + + address_space_config m_main_if_space_config; + address_space_config m_crtc_space_config; + address_space_config m_gc_space_config; + address_space_config m_seq_space_config; + address_space_config m_atc_space_config; + + bool m_ioas = false; +private: + uint32_t start_addr(); }; @@ -262,468 +327,26 @@ protected: void svga_vh_rgb32(bitmap_rgb32 &bitmap, const rectangle &cliprect); virtual uint8_t pc_vga_choosevideomode() override; virtual void device_start() override; + virtual u16 line_compare_mask(); struct { - uint8_t bank_r,bank_w; + uint8_t bank_r, bank_w; uint8_t rgb8_en; uint8_t rgb15_en; uint8_t rgb16_en; uint8_t rgb24_en; uint8_t rgb32_en; uint8_t id; + bool ignore_chain4; } svga; }; -// ======================> ibm8514_device - -class ibm8514a_device : public device_t -{ -public: - ibm8514a_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - - template <typename T> void set_vga(T &&tag) { m_vga.set_tag(std::forward<T>(tag)); } - void set_vga_owner() { m_vga.set_tag(DEVICE_SELF); } - - void enabled(); - - bool is_8514a_enabled() { return ibm8514.enabled; } - bool is_passthrough_set() { return ibm8514.passthrough; } - - READ16_MEMBER(ibm8514_gpstatus_r); - WRITE16_MEMBER(ibm8514_cmd_w); - WRITE16_MEMBER(ibm8514_display_ctrl_w); - READ16_MEMBER(ibm8514_line_error_r); - WRITE16_MEMBER(ibm8514_line_error_w); - READ8_MEMBER(ibm8514_status_r); - WRITE8_MEMBER(ibm8514_htotal_w); - READ16_MEMBER(ibm8514_substatus_r); - WRITE16_MEMBER(ibm8514_subcontrol_w); - READ16_MEMBER(ibm8514_subcontrol_r); - READ16_MEMBER(ibm8514_htotal_r); - READ16_MEMBER(ibm8514_vtotal_r); - WRITE16_MEMBER(ibm8514_vtotal_w); - READ16_MEMBER(ibm8514_vdisp_r); - WRITE16_MEMBER(ibm8514_vdisp_w); - READ16_MEMBER(ibm8514_vsync_r); - WRITE16_MEMBER(ibm8514_vsync_w); - READ16_MEMBER(ibm8514_desty_r); - WRITE16_MEMBER(ibm8514_desty_w); - READ16_MEMBER(ibm8514_destx_r); - WRITE16_MEMBER(ibm8514_destx_w); - READ16_MEMBER(ibm8514_ssv_r); - WRITE16_MEMBER(ibm8514_ssv_w); - READ16_MEMBER(ibm8514_currentx_r); - WRITE16_MEMBER(ibm8514_currentx_w); - READ16_MEMBER(ibm8514_currenty_r); - WRITE16_MEMBER(ibm8514_currenty_w); - READ16_MEMBER(ibm8514_width_r); - WRITE16_MEMBER(ibm8514_width_w); - READ16_MEMBER(ibm8514_fgcolour_r); - WRITE16_MEMBER(ibm8514_fgcolour_w); - READ16_MEMBER(ibm8514_bgcolour_r); - WRITE16_MEMBER(ibm8514_bgcolour_w); - READ16_MEMBER(ibm8514_multifunc_r); - WRITE16_MEMBER(ibm8514_multifunc_w); - READ16_MEMBER(ibm8514_backmix_r); - WRITE16_MEMBER(ibm8514_backmix_w); - READ16_MEMBER(ibm8514_foremix_r); - WRITE16_MEMBER(ibm8514_foremix_w); - READ16_MEMBER(ibm8514_pixel_xfer_r); - virtual WRITE16_MEMBER(ibm8514_pixel_xfer_w); - READ16_MEMBER(ibm8514_read_mask_r); - WRITE16_MEMBER(ibm8514_read_mask_w); - READ16_MEMBER(ibm8514_write_mask_r); - WRITE16_MEMBER(ibm8514_write_mask_w); - WRITE16_MEMBER(ibm8514_advfunc_w); - - void ibm8514_wait_draw(); - struct - { - uint16_t htotal; // Horizontal total (9 bits) - uint16_t vtotal; // Vertical total adjust (3 bits), Vertical total base (9 bit) - uint16_t vdisp; - uint16_t vsync; - uint16_t subctrl; - uint16_t substatus; - uint8_t display_ctrl; - uint16_t ssv; - uint16_t ec0; - uint16_t ec1; - uint16_t ec2; - uint16_t ec3; - bool gpbusy; - bool data_avail; - int16_t dest_x; - int16_t dest_y; - int16_t curr_x; - int16_t curr_y; - int16_t prev_x; - int16_t prev_y; - int16_t line_axial_step; - int16_t line_diagonal_step; - int16_t line_errorterm; - uint16_t current_cmd; - uint16_t src_x; - uint16_t src_y; - int16_t scissors_left; - int16_t scissors_right; - int16_t scissors_top; - int16_t scissors_bottom; - uint16_t rect_width; - uint16_t rect_height; - uint32_t fgcolour; - uint32_t bgcolour; - uint16_t fgmix; - uint16_t bgmix; - uint32_t pixel_xfer; - uint16_t pixel_control; - uint8_t bus_size; - uint8_t multifunc_sel; - uint16_t multifunc_misc; - uint32_t read_mask; - uint32_t write_mask; - uint16_t advfunction_ctrl; - bool enabled; - bool passthrough; - - int state; - uint8_t wait_vector_len; - uint8_t wait_vector_dir; - bool wait_vector_draw; - uint8_t wait_vector_count; - - } ibm8514; - -protected: - ibm8514a_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); - - virtual void device_start() override; - void ibm8514_write(uint32_t offset, uint32_t src); - void ibm8514_write_fg(uint32_t offset); - void ibm8514_write_bg(uint32_t offset); - - required_device<svga_device> m_vga; // for pass-through -private: - void ibm8514_draw_vector(uint8_t len, uint8_t dir, bool draw); - void ibm8514_wait_draw_ssv(); - void ibm8514_draw_ssv(uint8_t data); - void ibm8514_wait_draw_vector(); - - //uint8_t* m_vram; // the original 8514/A has it's own VRAM, but most VGA+8514 combination cards will have - // only one set of VRAM, so this will only be needed in standalone 8514/A cards - //uint32_t m_vramsize; -}; - -// device type definition -DECLARE_DEVICE_TYPE(IBM8514A, ibm8514a_device) - - -class mach8_device : public ibm8514a_device -{ -public: - mach8_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - - READ16_MEMBER(mach8_ec0_r); - WRITE16_MEMBER(mach8_ec0_w); - READ16_MEMBER(mach8_ec1_r); - WRITE16_MEMBER(mach8_ec1_w); - READ16_MEMBER(mach8_ec2_r); - WRITE16_MEMBER(mach8_ec2_w); - READ16_MEMBER(mach8_ec3_r); - WRITE16_MEMBER(mach8_ec3_w); - READ16_MEMBER(mach8_ext_fifo_r); - WRITE16_MEMBER(mach8_linedraw_index_w); - READ16_MEMBER(mach8_bresenham_count_r); - WRITE16_MEMBER(mach8_bresenham_count_w); - WRITE16_MEMBER(mach8_linedraw_w); - READ16_MEMBER(mach8_linedraw_r); - READ16_MEMBER(mach8_scratch0_r); - WRITE16_MEMBER(mach8_scratch0_w); - READ16_MEMBER(mach8_scratch1_r); - WRITE16_MEMBER(mach8_scratch1_w); - READ16_MEMBER(mach8_config1_r); - READ16_MEMBER(mach8_config2_r); - READ16_MEMBER(mach8_sourcex_r); - READ16_MEMBER(mach8_sourcey_r); - WRITE16_MEMBER(mach8_ext_leftscissor_w); - WRITE16_MEMBER(mach8_ext_topscissor_w); - READ16_MEMBER(mach8_clksel_r) { return mach8.clksel; } - WRITE16_MEMBER(mach8_crt_pitch_w); - WRITE16_MEMBER(mach8_patt_data_w) { logerror("Mach8: Pattern Data write (unimplemented)\n"); } - WRITE16_MEMBER(mach8_ge_offset_l_w); - WRITE16_MEMBER(mach8_ge_offset_h_w); - WRITE16_MEMBER(mach8_ge_pitch_w); - READ16_MEMBER(mach8_ge_ext_config_r) { return mach8.ge_ext_config; } - WRITE16_MEMBER(mach8_ge_ext_config_w); // TODO: handle 8-bit I/O - WRITE16_MEMBER(mach8_scan_x_w); - WRITE16_MEMBER(mach8_dp_config_w); - READ16_MEMBER(mach8_readonly_r) { return 0; } - WRITE16_MEMBER(mach8_pixel_xfer_w); - WRITE16_MEMBER(mach8_clksel_w) { mach8.ati_mode = true; ibm8514.passthrough = data & 0x0001; mach8.clksel = data; } // read only on the mach8 - WRITE16_MEMBER(mach8_advfunc_w) { mach8.ati_mode = false; ibm8514_advfunc_w(space,offset,data,mem_mask); } - uint16_t get_ext_config() { return mach8.ge_ext_config; } - uint16_t offset() { if(mach8.ati_mode) return mach8.ge_pitch; else return 128; } - -protected: - mach8_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); - virtual void device_start() override; - struct - { - uint16_t scratch0; - uint16_t scratch1; - uint16_t linedraw; - uint16_t clksel; - uint16_t crt_pitch; - uint16_t dp_config; - uint32_t ge_offset; - uint16_t ge_pitch; - uint16_t ge_ext_config; // usage varies between the mach8 and mach32 (except for 8514/A monitor alias) - uint16_t scan_x; - bool ati_mode; - } mach8; - -private: - void mach8_wait_scan(); - -}; - -// device type definition -DECLARE_DEVICE_TYPE(MACH8, mach8_device) - - -// ======================> tseng_vga_device - -class tseng_vga_device : public svga_device -{ -public: - // construction/destruction - tseng_vga_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - - virtual READ8_MEMBER(port_03b0_r) override; - virtual WRITE8_MEMBER(port_03b0_w) override; - virtual READ8_MEMBER(port_03c0_r) override; - virtual WRITE8_MEMBER(port_03c0_w) override; - virtual READ8_MEMBER(port_03d0_r) override; - virtual WRITE8_MEMBER(port_03d0_w) override; - virtual READ8_MEMBER(mem_r) override; - virtual WRITE8_MEMBER(mem_w) override; - -protected: - virtual void device_start() override; - -private: - void tseng_define_video_mode(); - uint8_t tseng_crtc_reg_read(uint8_t index); - void tseng_crtc_reg_write(uint8_t index, uint8_t data); - uint8_t tseng_seq_reg_read(uint8_t index); - void tseng_seq_reg_write(uint8_t index, uint8_t data); - void tseng_attribute_reg_write(uint8_t index, uint8_t data); - - struct - { - uint8_t reg_3d8; - uint8_t dac_ctrl; - uint8_t dac_state; - uint8_t horz_overflow; - uint8_t aux_ctrl; - bool ext_reg_ena; - uint8_t misc1; - uint8_t misc2; - }et4k; - -}; - - -// device type definition -DECLARE_DEVICE_TYPE(TSENG_VGA, tseng_vga_device) - - -// ======================> ati_vga_device - -class ati_vga_device : public svga_device -{ -public: - // construction/destruction - ati_vga_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - - virtual READ8_MEMBER(mem_r) override; - virtual WRITE8_MEMBER(mem_w) override; - - // VGA registers - virtual READ8_MEMBER(port_03c0_r) override; - READ8_MEMBER(ati_port_ext_r); - WRITE8_MEMBER(ati_port_ext_w); - - virtual uint16_t offset() override; - - mach8_device* get_8514() { return m_8514; } -protected: - ati_vga_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); - - virtual void device_start() override; - virtual void device_add_mconfig(machine_config &config) override; - virtual void ati_define_video_mode(); - void set_dot_clock(); - struct - { - uint8_t ext_reg[64]; - uint8_t ext_reg_select; - uint8_t vga_chip_id; - } ati; - -private: - mach8_device* m_8514; -}; - -// device type definition -DECLARE_DEVICE_TYPE(ATI_VGA, ati_vga_device) - - -// ======================> s3_vga_device - -class s3_vga_device : public ati_vga_device -{ -public: - // construction/destruction - s3_vga_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - - virtual READ8_MEMBER(port_03b0_r) override; - virtual WRITE8_MEMBER(port_03b0_w) override; - virtual READ8_MEMBER(port_03c0_r) override; - virtual WRITE8_MEMBER(port_03c0_w) override; - virtual READ8_MEMBER(port_03d0_r) override; - virtual WRITE8_MEMBER(port_03d0_w) override; - virtual READ8_MEMBER(mem_r) override; - virtual WRITE8_MEMBER(mem_w) override; - - virtual uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) override; - - virtual TIMER_CALLBACK_MEMBER(vblank_timer_cb) override; - - ibm8514a_device* get_8514() { return m_8514; } - -protected: - s3_vga_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); - - // device-level overrides - virtual void device_start() override; - virtual void device_reset() override; - virtual void device_add_mconfig(machine_config &config) override; - - struct - { - uint8_t memory_config; - uint8_t ext_misc_ctrl_2; - uint8_t crt_reg_lock; - uint8_t reg_lock1; - uint8_t reg_lock2; - uint8_t enable_8514; - uint8_t enable_s3d; - uint8_t cr3a; - uint8_t cr42; - uint8_t cr43; - uint8_t cr51; - uint8_t cr53; - uint8_t id_high; - uint8_t id_low; - uint8_t revision; - uint8_t id_cr30; - uint32_t strapping; // power-on strapping bits - uint8_t sr10; // MCLK PLL - uint8_t sr11; // MCLK PLL - uint8_t sr12; // DCLK PLL - uint8_t sr13; // DCLK PLL - uint8_t sr15; // CLKSYN control 2 - uint8_t sr17; // CLKSYN test - uint8_t clk_pll_r; // individual DCLK PLL values - uint8_t clk_pll_m; - uint8_t clk_pll_n; - - // data for memory-mapped I/O - uint16_t mmio_9ae8; - uint16_t mmio_bee8; - uint16_t mmio_96e8; - - // hardware graphics cursor - uint8_t cursor_mode; - uint16_t cursor_x; - uint16_t cursor_y; - uint16_t cursor_start_addr; - uint8_t cursor_pattern_x; // cursor pattern origin - uint8_t cursor_pattern_y; - uint8_t cursor_fg[4]; - uint8_t cursor_bg[4]; - uint8_t cursor_fg_ptr; - uint8_t cursor_bg_ptr; - uint8_t extended_dac_ctrl; - } s3; - virtual uint16_t offset() override; - -private: - uint8_t s3_crtc_reg_read(uint8_t index); - void s3_define_video_mode(void); - void s3_crtc_reg_write(uint8_t index, uint8_t data); - uint8_t s3_seq_reg_read(uint8_t index); - void s3_seq_reg_write(uint8_t index, uint8_t data); - ibm8514a_device* m_8514; -}; - -// device type definition -DECLARE_DEVICE_TYPE(S3_VGA, s3_vga_device) - -// ======================> gamtor_vga_device - -class gamtor_vga_device : public svga_device -{ -public: - // construction/destruction - gamtor_vga_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - - - virtual READ8_MEMBER(port_03b0_r) override; - virtual WRITE8_MEMBER(port_03b0_w) override; - virtual READ8_MEMBER(port_03c0_r) override; - virtual WRITE8_MEMBER(port_03c0_w) override; - virtual READ8_MEMBER(port_03d0_r) override; - virtual WRITE8_MEMBER(port_03d0_w) override; - virtual READ8_MEMBER(mem_r) override; - virtual WRITE8_MEMBER(mem_w) override; -}; - - -// device type definition -DECLARE_DEVICE_TYPE(GAMTOR_VGA, gamtor_vga_device) /* pega notes (paradise) build in amstrad pc1640 - ROM_LOAD("40100", 0xc0000, 0x8000, CRC(d2d1f1ae)) - - 4 additional dipswitches - seems to have emulation modes at register level - (mda/hgc lines bit 8 not identical to ega/vga) - - standard ega/vga dipswitches - 00000000 320x200 - 00000001 640x200 hanging - 00000010 640x200 hanging - 00000011 640x200 hanging - - 00000100 640x350 hanging - 00000101 640x350 hanging EGA mono - 00000110 320x200 - 00000111 640x200 - - 00001000 640x200 - 00001001 640x200 - 00001010 720x350 partial visible - 00001011 720x350 partial visible - - 00001100 320x200 - 00001101 320x200 - 00001110 320x200 - 00001111 320x200 + ROM_LOAD("40100", 0xc0000, 0x8000, CRC(d2d1f1ae) SHA1(98302006ee38a17c09bd75504cc18c0649174e33) ) */ @@ -731,7 +354,7 @@ DECLARE_DEVICE_TYPE(GAMTOR_VGA, gamtor_vga_device) oak vga (oti 037 chip) (below bios patch needed for running) - ROM_LOAD("oakvga.bin", 0xc0000, 0x8000, CRC(318c5f43)) + ROM_LOAD("oakvga.bin", 0xc0000, 0x8000, CRC(318c5f43) SHA1(2aeb6cf737fd87dfd08c9f5b5bc421fcdbab4ce9) ) */ |