mirror of
https://github.com/holub/mame
synced 2025-04-22 16:31:49 +03:00
Merge branch 'master' of https://github.com/mamedev/mame
This commit is contained in:
commit
6646f87ba8
@ -652,7 +652,10 @@ ioport_field::ioport_field(ioport_port &port, ioport_type type, ioport_value def
|
||||
|
||||
void ioport_field::set_value(ioport_value value)
|
||||
{
|
||||
m_digital_value = value != 0;
|
||||
if (is_analog())
|
||||
live().analog->set_value(s32(value));
|
||||
else
|
||||
m_digital_value = value != 0;
|
||||
}
|
||||
|
||||
|
||||
@ -3234,6 +3237,7 @@ analog_field::analog_field(ioport_field &field)
|
||||
m_accum(0),
|
||||
m_previous(0),
|
||||
m_previousanalog(0),
|
||||
m_prog_analog_value(0),
|
||||
m_minimum(INPUT_ABSOLUTE_MIN),
|
||||
m_maximum(INPUT_ABSOLUTE_MAX),
|
||||
m_center(0),
|
||||
@ -3248,7 +3252,8 @@ analog_field::analog_field(ioport_field &field)
|
||||
m_autocenter(false),
|
||||
m_single_scale(false),
|
||||
m_interpolate(false),
|
||||
m_lastdigital(false)
|
||||
m_lastdigital(false),
|
||||
m_was_written(false)
|
||||
{
|
||||
// compute the shift amount and number of bits
|
||||
for (ioport_value mask = field.mask(); !(mask & 1); mask >>= 1)
|
||||
@ -3487,6 +3492,17 @@ s32 analog_field::apply_settings(s32 value) const
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// set_value - take a new value to be used
|
||||
// at next frame update
|
||||
//-------------------------------------------------
|
||||
|
||||
void analog_field::set_value(s32 value)
|
||||
{
|
||||
m_was_written = true;
|
||||
m_prog_analog_value = value;
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// frame_update - update the internals of a
|
||||
// single analog field periodically
|
||||
@ -3504,7 +3520,14 @@ void analog_field::frame_update(running_machine &machine)
|
||||
// get the new raw analog value and its type
|
||||
input_item_class itemclass;
|
||||
s32 rawvalue = machine.input().seq_axis_value(m_field.seq(SEQ_TYPE_STANDARD), itemclass);
|
||||
|
||||
|
||||
// use programmatically set value if avaiable
|
||||
if (m_was_written)
|
||||
{
|
||||
m_was_written = false;
|
||||
rawvalue = m_prog_analog_value;
|
||||
}
|
||||
|
||||
// if we got an absolute input, it overrides everything else
|
||||
if (itemclass == ITEM_CLASS_ABSOLUTE)
|
||||
{
|
||||
|
@ -1266,7 +1266,10 @@ public:
|
||||
void read(ioport_value &value);
|
||||
float crosshair_read();
|
||||
void frame_update(running_machine &machine);
|
||||
|
||||
|
||||
// setters
|
||||
void set_value(s32 value);
|
||||
|
||||
private:
|
||||
// helpers
|
||||
s32 apply_min_max(s32 value) const;
|
||||
@ -1294,6 +1297,7 @@ private:
|
||||
s32 m_accum; // accumulated value (including relative adjustments)
|
||||
s32 m_previous; // previous adjusted value
|
||||
s32 m_previousanalog; // previous analog value
|
||||
s32 m_prog_analog_value; // programmatically set analog value
|
||||
|
||||
// parameters for modifying live values
|
||||
s32 m_minimum; // minimum adjusted value
|
||||
@ -1315,6 +1319,7 @@ private:
|
||||
bool m_single_scale; // scale joystick differently if default is between min/max
|
||||
bool m_interpolate; // should we do linear interpolation for mid-frame reads?
|
||||
bool m_lastdigital; // was the last modification caused by a digital form?
|
||||
bool m_was_written; // was the last modification caused programmatically?
|
||||
};
|
||||
|
||||
|
||||
|
@ -2,10 +2,15 @@
|
||||
// copyright-holders:Nicola Salmoria
|
||||
/***************************************************************************
|
||||
|
||||
video.c
|
||||
|
||||
Functions to emulate the video hardware of the machine.
|
||||
|
||||
Bullet vs tilemap offsets are correct when compared with PCB videos
|
||||
(both playfield area, and radar area). Bullet vs sprite offsets are also
|
||||
correct.
|
||||
|
||||
The radar area is offset by 3 pixels, also confirmed with PCB video when
|
||||
it does the VRAM check.
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
|
@ -433,14 +433,14 @@ void tubep_state::draw_sprite()
|
||||
|
||||
for (YDOT=0; (YDOT^m_YSize) != 0x00; YDOT++)
|
||||
{
|
||||
/* upper part of the schematic */
|
||||
/* upper part of the schematic */
|
||||
uint32_t ls273_e12 = romD10[ m_romD_addr | YDOT ] & 0x7f;
|
||||
uint32_t romEF_addr_now = m_romEF_addr | ls273_e12;
|
||||
uint32_t E16_add_a = romEF13[ romEF_addr_now ] |
|
||||
((romEF13[0x1000 + romEF_addr_now ]&0x0f)<<8);
|
||||
uint32_t F16_add_b = E16_add_a + m_E16_add_b;
|
||||
|
||||
/* lower part of the schematic */
|
||||
/* lower part of the schematic */
|
||||
uint32_t romHI_addr = (YDOT) | (m_romHI_addr_mid) | (((m_romHI_addr_msb + 0x800) )&0x1800);
|
||||
uint32_t ls273_g4 = romHI2[ romHI_addr ];
|
||||
uint32_t ls273_j4 = romHI2[0x2000+ romHI_addr ];
|
||||
@ -457,7 +457,7 @@ void tubep_state::draw_sprite()
|
||||
|
||||
for (XDOT=0; (XDOT^m_XSize) != 0x00; XDOT++)
|
||||
{
|
||||
/* upper part of the schematic */
|
||||
/* upper part of the schematic */
|
||||
uint32_t romD10_out = romD10[ m_romD_addr | XDOT ];
|
||||
uint32_t F16_add_a = (romD10_out & 0x7e) >>1;
|
||||
uint32_t romCxx_addr = (F16_add_a + F16_add_b ) & 0xffff;
|
||||
@ -467,7 +467,7 @@ void tubep_state::draw_sprite()
|
||||
|
||||
uint8_t sp_data = m_sprite_colorsharedram[ m_colorram_addr_hi | colorram_addr_lo ] & 0x0f; /* 2114 4-bit RAM */
|
||||
|
||||
/* lower part of the schematic */
|
||||
/* lower part of the schematic */
|
||||
romHI_addr = (XDOT) | (m_romHI_addr_mid) | (m_romHI_addr_msb);
|
||||
ls273_g4 = romHI2[ romHI_addr ];
|
||||
ls273_j4 = romHI2[0x2000+ romHI_addr ];
|
||||
@ -494,7 +494,6 @@ WRITE8_MEMBER(tubep_state::tubep_sprite_control_w)
|
||||
{
|
||||
if (offset < 10)
|
||||
{
|
||||
/*graph_ctrl[offset] = data;*/
|
||||
switch(offset)
|
||||
{
|
||||
case 0: /*a*/
|
||||
@ -647,7 +646,7 @@ uint32_t tubep_state::screen_update_tubep(screen_device &screen, bitmap_ind16 &b
|
||||
else
|
||||
sp_data = sp_data1;
|
||||
|
||||
if (sp_data != 0x0f)
|
||||
if (sp_data != 0x0f && h >= 4)
|
||||
{
|
||||
bg_data = m_prom2[sp_data | m_color_A4];
|
||||
draw_text_or_sprite_pixel = true;
|
||||
|
Loading…
Reference in New Issue
Block a user