Bumped version to 0.122u2. Spacing cleanups.

This commit is contained in:
Aaron Giles 2007-12-31 02:22:13 +00:00
parent 460437f8d1
commit 0e20c80517
20 changed files with 319 additions and 319 deletions

View File

@ -48,9 +48,9 @@
#define FP_XFD(r) *( (double *)(sh4.xf+(r)) ) // double precision extended floating point register r #define FP_XFD(r) *( (double *)(sh4.xf+(r)) ) // double precision extended floating point register r
#ifdef LSB_FIRST #ifdef LSB_FIRST
#define FP_RS2(r) sh4.fr[(r) ^ sh4.fpu_pr] #define FP_RS2(r) sh4.fr[(r) ^ sh4.fpu_pr]
#define FP_RFS2(r) *( (float *)(sh4.fr+((r) ^ sh4.fpu_pr)) ) #define FP_RFS2(r) *( (float *)(sh4.fr+((r) ^ sh4.fpu_pr)) )
#define FP_XS2(r) sh4.xf[(r) ^ sh4.fpu_pr] #define FP_XS2(r) sh4.xf[(r) ^ sh4.fpu_pr]
#define FP_XFS2(r) *( (float *)(sh4.xf+((r) ^ sh4.fpu_pr)) ) #define FP_XFS2(r) *( (float *)(sh4.xf+((r) ^ sh4.fpu_pr)) )
#endif #endif
typedef struct typedef struct
@ -3094,13 +3094,13 @@ INLINE void FMOVFR(UINT32 m,UINT32 n)
/* FLDI1 FRn 1111nnnn10011101 */ /* FLDI1 FRn 1111nnnn10011101 */
INLINE void FLDI1(UINT32 n) INLINE void FLDI1(UINT32 n)
{ {
sh4.fr[n] = 0x3F800000; sh4.fr[n] = 0x3F800000;
} }
/* FLDI0 FRn 1111nnnn10001101 */ /* FLDI0 FRn 1111nnnn10001101 */
INLINE void FLDI0(UINT32 n) INLINE void FLDI0(UINT32 n)
{ {
sh4.fr[n] = 0; sh4.fr[n] = 0;
} }
/* FLDS FRm,FPUL 1111mmmm00011101 */ /* FLDS FRm,FPUL 1111mmmm00011101 */
@ -3233,10 +3233,10 @@ INLINE void FCNVDS(UINT32 n)
if (sh4.fpu_pr) { /* PR = 1 */ if (sh4.fpu_pr) { /* PR = 1 */
n = n & 14; n = n & 14;
#ifdef LSB_FIRST #ifdef LSB_FIRST
if (sh4.fpscr & RM) if (sh4.fpscr & RM)
sh4.fr[n] &= 0xe0000000; /* round toward zero*/ sh4.fr[n] &= 0xe0000000; /* round toward zero*/
#else #else
if (sh4.fpscr & RM) if (sh4.fpscr & RM)
sh4.fr[n | 1] &= 0xe0000000; /* round toward zero*/ sh4.fr[n | 1] &= 0xe0000000; /* round toward zero*/
#endif #endif
*((float *)&sh4.fpul) = (float)FP_RFD(n); *((float *)&sh4.fpul) = (float)FP_RFD(n);

View File

@ -318,8 +318,8 @@ static void check_irqs(void)
int i; int i;
/* external interrupts are level-sensitive on the '31 and can be /* external interrupts are level-sensitive on the '31 and can be
configured as such on the '32; in that case, if the external configured as such on the '32; in that case, if the external
signal is high, we need to update the value in IF accordingly */ signal is high, we need to update the value in IF accordingly */
if (!tms32031.is_32032 || (IREG(TMR_ST) & 0x4000) == 0) if (!tms32031.is_32032 || (IREG(TMR_ST) & 0x4000) == 0)
IREG(TMR_IF) |= tms32031.irq_state & 0x0f; IREG(TMR_IF) |= tms32031.irq_state & 0x0f;
@ -341,13 +341,13 @@ static void check_irqs(void)
if (!tms32031.delayed) if (!tms32031.delayed)
{ {
UINT16 intmask = 1 << (whichtrap - 1); UINT16 intmask = 1 << (whichtrap - 1);
/* bit in IF is cleared when interrupt is taken */ /* bit in IF is cleared when interrupt is taken */
IREG(TMR_IF) &= ~intmask; IREG(TMR_IF) &= ~intmask;
trap(whichtrap); trap(whichtrap);
/* after auto-clearing the interrupt bit, we need to re-trigger /* after auto-clearing the interrupt bit, we need to re-trigger
level-sensitive interrupts */ level-sensitive interrupts */
if (!tms32031.is_32032 || (IREG(TMR_ST) & 0x4000) == 0) if (!tms32031.is_32032 || (IREG(TMR_ST) & 0x4000) == 0)
IREG(TMR_IF) |= tms32031.irq_state & 0x0f; IREG(TMR_IF) |= tms32031.irq_state & 0x0f;
} }
@ -359,7 +359,7 @@ static void check_irqs(void)
static void set_irq_line(int irqline, int state) static void set_irq_line(int irqline, int state)
{ {
UINT16 intmask = 1 << irqline; UINT16 intmask = 1 << irqline;
/* ignore anything out of range */ /* ignore anything out of range */
if (irqline >= 12) if (irqline >= 12)
return; return;

View File

@ -40,7 +40,7 @@ static int speech_rom_read_bit(void)
const UINT8 *table = memory_region(info->intf->rom_region); const UINT8 *table = memory_region(info->intf->rom_region);
int r; int r;
if (info->speech_rom_bitnum<0) if (info->speech_rom_bitnum<0)
r = 0; r = 0;
else else
@ -55,7 +55,7 @@ static void speech_rom_set_addr(int addr)
{ {
struct tms5110_info *info = sndti_token(SOUND_TMS5110, 0); struct tms5110_info *info = sndti_token(SOUND_TMS5110, 0);
info->speech_rom_bitnum = addr * 8 - 1; info->speech_rom_bitnum = addr * 8 - 1;
} }
/****************************************************************************** /******************************************************************************

View File

@ -1395,7 +1395,7 @@ void dsd_566_reset(node_description *node)
#define DSD_LS624__C (*(node->input[3])) #define DSD_LS624__C (*(node->input[3]))
#define DSD_LS624__OUTTYPE (*(node->input[4])) #define DSD_LS624__OUTTYPE (*(node->input[4]))
/* /*
* These formulas are derived from diagrams in the datasheet! * These formulas are derived from diagrams in the datasheet!
* They are not based on any law. The function is not * They are not based on any law. The function is not
* described anywhere. * described anywhere.
@ -1459,7 +1459,7 @@ void dsd_ls624_reset(node_description *node)
context->remain = 0; context->remain = 0;
context->state = 0; context->state = 0;
context->outtype = DSD_LS624__OUTTYPE; context->outtype = DSD_LS624__OUTTYPE;
/* Step the output */ /* Step the output */
dsd_ls624_step(node); dsd_ls624_step(node);
} }

View File

@ -2932,13 +2932,13 @@
* DISCRETE_74LS624 - VCO. * DISCRETE_74LS624 - VCO.
* *
* Simplified 74LS624 - calculated frequencies should match datasheet * Simplified 74LS624 - calculated frequencies should match datasheet
* for C > 1nF. Output is Logic (1/0) * for C > 1nF. Output is Logic (1/0)
* *
* The datasheet gives no formulae. The implementation therefore is * The datasheet gives no formulae. The implementation therefore is
* a rough model of the diagrams given. * a rough model of the diagrams given.
* *
* For a LS628, use VRng = 3.2 * For a LS628, use VRng = 3.2
* *
* V+ * V+
* | * |
* .---------. * .---------.
@ -2953,7 +2953,7 @@
* | | | * | | |
* '---|CX2 | * '---|CX2 |
* '---------' * '---------'
* | * |
* GND * GND
* *
* Declaration syntax * Declaration syntax
@ -2963,14 +2963,14 @@
* vMod node or static value, * vMod node or static value,
* vRng node or static value, * vRng node or static value,
* C node or static value in Farads, * C node or static value in Farads,
* Type of output static value) * Type of output static value)
* *
* Type of Output * Type of Output
* DISC_LS624_OUT_ENERGY Energy - use for audio output * DISC_LS624_OUT_ENERGY Energy - use for audio output
* DISC_LS624_OUT_LOGIC Logic ( 0 or 1) * DISC_LS624_OUT_LOGIC Logic ( 0 or 1)
* DISC_LS624_OUT_COUNT_F Number of Falling edges * DISC_LS624_OUT_COUNT_F Number of Falling edges
* DISC_LS624_OUT_COUNT_R Number of Rising edges * DISC_LS624_OUT_COUNT_R Number of Rising edges
* *
*********************************************************************** ***********************************************************************
* *
* DISCRETE_CUSTOMx - Link to custom code * DISCRETE_CUSTOMx - Link to custom code

View File

@ -1,57 +1,57 @@
/********************************************************************************************** /**********************************************************************************************
TMS5110 simulator (modified from TMS5220 by Jarek Burczynski) TMS5110 simulator (modified from TMS5220 by Jarek Burczynski)
Written for MAME by Frank Palazzolo Written for MAME by Frank Palazzolo
With help from Neill Corlett With help from Neill Corlett
Additional tweaking by Aaron Giles Additional tweaking by Aaron Giles
Various fixes by Lord Nightmare Various fixes by Lord Nightmare
Additional enhancements by Couriersud Additional enhancements by Couriersud
Todo:
- implement CS
- implement missing commands
TMS5100:
+-----------------+
TST | 1 28 | CS
PDC | 2 27 | CTL8
ROM CK | 3 26 | ADD8
CPU CK | 4 25 | CTL1
VDD | 5 24 | ADD1
CR OSC | 6 23 | CTL2
RC OSC | 7 22 | ADD2
T11 | 8 21 | ADD4
NC | 9 20 | CTL4
I/O | 10 19 | M1
SPK1 | 11 18 | NC
SPK2 | 12 17 | NC
PROM OUT | 13 16 | NC
VSS | 14 15 | M0
+-----------------+
M58817 Todo:
- implement CS
- implement missing commands
The following connections could be derived from radar scope schematics. TMS5100:
The M58817 is not 100% pin compatible to the 5100, but really close.
+-----------------+ +-----------------+
(NC) | 1 28 | CS TST | 1 28 | CS
PDC | 2 27 | CTL8 PDC | 2 27 | CTL8
ROM CK | 3 26 | ADD8 (to 58819) ROM CK | 3 26 | ADD8
(NC) | 4 25 | CTL1 CPU CK | 4 25 | CTL1
(VDD,-5) | 5 24 | ADD1 (to 58819) VDD | 5 24 | ADD1
(GND) | 6 23 | CTL2 CR OSC | 6 23 | CTL2
Xin | 7 22 | ADD2 (to 58819) RC OSC | 7 22 | ADD2
Xout | 8 21 | ADD4 (to 58819) T11 | 8 21 | ADD4
(NC) | 9 20 | CTL4 NC | 9 20 | CTL4
(VDD,-5) | 10 19 | Status back to CPU I/O | 10 19 | M1
(NC) | 11 18 | C1 (to 58819) SPK1 | 11 18 | NC
SPKR | 12 17 | (NC) SPK2 | 12 17 | NC
SPKR | 13 16 | C0 (to 58819) PROM OUT | 13 16 | NC
(NC) | 14 15 | (5V) VSS | 14 15 | M0
+-----------------+ +-----------------+
M58817
The following connections could be derived from radar scope schematics.
The M58817 is not 100% pin compatible to the 5100, but really close.
+-----------------+
(NC) | 1 28 | CS
PDC | 2 27 | CTL8
ROM CK | 3 26 | ADD8 (to 58819)
(NC) | 4 25 | CTL1
(VDD,-5) | 5 24 | ADD1 (to 58819)
(GND) | 6 23 | CTL2
Xin | 7 22 | ADD2 (to 58819)
Xout | 8 21 | ADD4 (to 58819)
(NC) | 9 20 | CTL4
(VDD,-5) | 10 19 | Status back to CPU
(NC) | 11 18 | C1 (to 58819)
SPKR | 12 17 | (NC)
SPKR | 13 16 | C0 (to 58819)
(NC) | 14 15 | (5V)
+-----------------+
***********************************************************************************************/ ***********************************************************************************************/
@ -263,7 +263,7 @@ void tms5110_reset_chip(void *chip)
/****************************************************************************************** /******************************************************************************************
tms5110_set_M0_callback -- set M0 callback for the TMS5110 tms5110_set_M0_callback -- set M0 callback for the TMS5110
******************************************************************************************/ ******************************************************************************************/
@ -275,7 +275,7 @@ void tms5110_set_M0_callback(void *chip, int (*func)(void))
/****************************************************************************************** /******************************************************************************************
tms5110_set_load_address -- set M0 callback for the TMS5110 tms5110_set_load_address -- set M0 callback for the TMS5110
******************************************************************************************/ ******************************************************************************************/
@ -287,7 +287,7 @@ void tms5110_set_load_address(void *chip, void (*func)(int))
/****************************************************************************************** /******************************************************************************************
FIFO_data_write -- handle bit data write to the TMS5110 (as a result of toggling M0 pin) FIFO_data_write -- handle bit data write to the TMS5110 (as a result of toggling M0 pin)
******************************************************************************************/ ******************************************************************************************/
static void FIFO_data_write(struct tms5110 *tms, int data) static void FIFO_data_write(struct tms5110 *tms, int data)
@ -310,7 +310,7 @@ static void FIFO_data_write(struct tms5110 *tms, int data)
/****************************************************************************************** /******************************************************************************************
extract_bits -- extract a specific number of bits from the FIFO extract_bits -- extract a specific number of bits from the FIFO
******************************************************************************************/ ******************************************************************************************/
@ -359,14 +359,14 @@ static void perform_dummy_read(struct tms5110 *tms)
/********************************************************************************************** /**********************************************************************************************
tms5110_status_read -- read status from the TMS5110 tms5110_status_read -- read status from the TMS5110
bit 0 = TS - Talk Status is active (high) when the VSP is processing speech data. bit 0 = TS - Talk Status is active (high) when the VSP is processing speech data.
Talk Status goes active at the initiation of a SPEAK command. Talk Status goes active at the initiation of a SPEAK command.
It goes inactive (low) when the stop code (Energy=1111) is processed, or It goes inactive (low) when the stop code (Energy=1111) is processed, or
immediately(?????? not TMS5110) by a RESET command. immediately(?????? not TMS5110) by a RESET command.
TMS5110 datasheets mention this is only available as a result of executing TMS5110 datasheets mention this is only available as a result of executing
TEST TALK command. TEST TALK command.
***********************************************************************************************/ ***********************************************************************************************/
@ -383,7 +383,7 @@ int tms5110_status_read(void *chip)
/********************************************************************************************** /**********************************************************************************************
tms5110_ready_read -- returns the ready state of the TMS5110 tms5110_ready_read -- returns the ready state of the TMS5110
***********************************************************************************************/ ***********************************************************************************************/
@ -397,7 +397,7 @@ int tms5110_ready_read(void *chip)
/********************************************************************************************** /**********************************************************************************************
tms5110_process -- fill the buffer with a specific number of samples tms5110_process -- fill the buffer with a specific number of samples
***********************************************************************************************/ ***********************************************************************************************/
@ -418,12 +418,12 @@ void tms5110_process(void *chip, INT16 *buffer, unsigned int size)
/* a "dummy read" is mentioned in the tms5200 datasheet */ /* a "dummy read" is mentioned in the tms5200 datasheet */
/* The Bagman speech roms data are organized in such a way that /* The Bagman speech roms data are organized in such a way that
** the bit at address 0 is NOT a speech data. The bit at address 1 ** the bit at address 0 is NOT a speech data. The bit at address 1
** is the speech data. It seems that the tms5110 performs a dummy read ** is the speech data. It seems that the tms5110 performs a dummy read
** just before it executes a SPEAK command. ** just before it executes a SPEAK command.
** This has been moved to command logic ... ** This has been moved to command logic ...
** perform_dummy_read(tms); ** perform_dummy_read(tms);
*/ */
/* clear out the new frame parameters (it will become old frame just before the first call to parse_frame() ) */ /* clear out the new frame parameters (it will become old frame just before the first call to parse_frame() ) */
tms->new_energy = 0; tms->new_energy = 0;
@ -486,9 +486,9 @@ void tms5110_process(void *chip, INT16 *buffer, unsigned int size)
else if ((tms->old_energy == 0) && (tms->new_energy != 0)) /* was the old frame a zero-energy frame? */ else if ((tms->old_energy == 0) && (tms->new_energy != 0)) /* was the old frame a zero-energy frame? */
{ {
/* if so, and if the new frame is non-zero energy frame then the new parameters /* if so, and if the new frame is non-zero energy frame then the new parameters
should become our current and target parameters immediately, should become our current and target parameters immediately,
i.e. we should NOT interpolate them slowly in. i.e. we should NOT interpolate them slowly in.
*/ */
/*logerror("processing non-zero energy frame after zero-energy frame\n");*/ /*logerror("processing non-zero energy frame after zero-energy frame\n");*/
tms->target_energy = tms->new_energy; tms->target_energy = tms->new_energy;
@ -499,8 +499,8 @@ void tms5110_process(void *chip, INT16 *buffer, unsigned int size)
else if ((tms->old_pitch == 0) && (tms->new_pitch != 0)) /* is this a change from unvoiced to voiced frame ? */ else if ((tms->old_pitch == 0) && (tms->new_pitch != 0)) /* is this a change from unvoiced to voiced frame ? */
{ {
/* if so, then the new parameters should become our current and target parameters immediately, /* if so, then the new parameters should become our current and target parameters immediately,
i.e. we should NOT interpolate them slowly in. i.e. we should NOT interpolate them slowly in.
*/ */
/*if (DEBUG_5110) logerror("processing frame: UNVOICED->VOICED frame change\n");*/ /*if (DEBUG_5110) logerror("processing frame: UNVOICED->VOICED frame change\n");*/
tms->target_energy = tms->new_energy; tms->target_energy = tms->new_energy;
tms->target_pitch = tms->current_pitch = tms->new_pitch; tms->target_pitch = tms->current_pitch = tms->new_pitch;
@ -510,8 +510,8 @@ void tms5110_process(void *chip, INT16 *buffer, unsigned int size)
else if ((tms->old_pitch != 0) && (tms->new_pitch == 0)) /* is this a change from voiced to unvoiced frame ? */ else if ((tms->old_pitch != 0) && (tms->new_pitch == 0)) /* is this a change from voiced to unvoiced frame ? */
{ {
/* if so, then the new parameters should become our current and target parameters immediately, /* if so, then the new parameters should become our current and target parameters immediately,
i.e. we should NOT interpolate them slowly in. i.e. we should NOT interpolate them slowly in.
*/ */
/*if (DEBUG_5110) logerror("processing frame: VOICED->UNVOICED frame change\n");*/ /*if (DEBUG_5110) logerror("processing frame: VOICED->UNVOICED frame change\n");*/
tms->target_energy = tms->new_energy; tms->target_energy = tms->new_energy;
tms->target_pitch = tms->current_pitch = tms->new_pitch; tms->target_pitch = tms->current_pitch = tms->new_pitch;
@ -662,7 +662,7 @@ empty:
/****************************************************************************************** /******************************************************************************************
CTL_set -- set CTL pins named CTL1, CTL2, CTL4 and CTL8 CTL_set -- set CTL pins named CTL1, CTL2, CTL4 and CTL8
******************************************************************************************/ ******************************************************************************************/
@ -674,7 +674,7 @@ void tms5110_CTL_set(void *chip, int data)
/****************************************************************************************** /******************************************************************************************
PDC_set -- set Processor Data Clock. Execute CTL_pins command on hi-lo transition. PDC_set -- set Processor Data Clock. Execute CTL_pins command on hi-lo transition.
******************************************************************************************/ ******************************************************************************************/
@ -740,7 +740,7 @@ void tms5110_PDC_set(void *chip, int data)
/****************************************************************************************** /******************************************************************************************
parse_frame -- parse a new frame's worth of data; returns 0 if not enough bits in buffer parse_frame -- parse a new frame's worth of data; returns 0 if not enough bits in buffer
******************************************************************************************/ ******************************************************************************************/

View File

@ -10,10 +10,10 @@
* 4234761 * 4234761
* 4189779 * 4189779
* 4449233 * 4449233
* *
* All patents give interpolation coefficients * All patents give interpolation coefficients
* { 8, 8, 8, 4, 4, 2, 2, 1 } * { 8, 8, 8, 4, 4, 2, 2, 1 }
* This sequence will not calculate the published * This sequence will not calculate the published
* fractions: * fractions:
* 1 8 0.125 * 1 8 0.125
* 2 8 0.234 * 2 8 0.234
@ -23,7 +23,7 @@
* 6 2 0.717 * 6 2 0.717
* 7 2 0.859 * 7 2 0.859
* 0 1 1.000 * 0 1 1.000
* *
* Instead, { 8, 8, 8, 4, 4, 4, 2, 1 } * Instead, { 8, 8, 8, 4, 4, 4, 2, 1 }
* will calculate those coefficients and this has been used below. * will calculate those coefficients and this has been used below.
*/ */

View File

@ -650,7 +650,7 @@ DISCRETE_SOUND_END
#define JR_C15 CAP_U(22) #define JR_C15 CAP_U(22)
#define JR_C16 CAP_U(3.3) #define JR_C16 CAP_U(3.3)
#define JR_C17 CAP_U(3.3) // ??? illegible #define JR_C17 CAP_U(3.3) // ??? illegible
#define JR_C18 CAP_N(22) #define JR_C18 CAP_N(22)
#define JR_C19 CAP_N(4.7) #define JR_C19 CAP_N(4.7)
#define JR_C20 CAP_U(0.12) #define JR_C20 CAP_U(0.12)
#define JR_C21 CAP_N(56) #define JR_C21 CAP_N(56)
@ -680,7 +680,7 @@ DISCRETE_SOUND_END
DISCRETE_ONESHOTR(_N, 0, _T, TTL_HIGH, (0.33 * (_R) * (_C) * (1.0+700./(_R))), DISC_ONESHOT_RETRIG | DISC_ONESHOT_REDGE | DISC_OUT_ACTIVE_LOW) DISCRETE_ONESHOTR(_N, 0, _T, TTL_HIGH, (0.33 * (_R) * (_C) * (1.0+700./(_R))), DISC_ONESHOT_RETRIG | DISC_ONESHOT_REDGE | DISC_OUT_ACTIVE_LOW)
#define DISCRETE_BITSET(_N, _N1, _B) DISCRETE_TRANSFORM3(_N, 1, _N1, 1 << ((_B)-1), 0, "01&2>") #define DISCRETE_BITSET(_N, _N1, _B) DISCRETE_TRANSFORM3(_N, 1, _N1, 1 << ((_B)-1), 0, "01&2>")
#define DISCRETE_ENERGY_NAND(_N, _E, _N1, _N2) DISCRETE_TRANSFORM3(_N, _E, _N1, _N2, 1, "201*-") #define DISCRETE_ENERGY_NAND(_N, _E, _N1, _N2) DISCRETE_TRANSFORM3(_N, _E, _N1, _N2, 1, "201*-")
static const discrete_mixer_desc dkongjr_mixer_desc = static const discrete_mixer_desc dkongjr_mixer_desc =
{DISC_MIXER_IS_RESISTOR, {DISC_MIXER_IS_RESISTOR,
@ -743,34 +743,34 @@ static DISCRETE_SOUND_START(dkongjr)
DISCRETE_LOGIC_INVERT(DS_SOUND7,1,DS_SOUND7_INV) DISCRETE_LOGIC_INVERT(DS_SOUND7,1,DS_SOUND7_INV)
DISCRETE_LOGIC_INVERT(DS_SOUND9,1,DS_SOUND9_INV) DISCRETE_LOGIC_INVERT(DS_SOUND9,1,DS_SOUND9_INV)
/************************************************/ /************************************************/
/* SOUND1 */ /* SOUND1 */
/************************************************/ /************************************************/
DISCRETE_LS123(NODE_10, DS_SOUND1_INV, JR_R9, JR_C15) DISCRETE_LS123(NODE_10, DS_SOUND1_INV, JR_R9, JR_C15)
DISCRETE_TRANSFORM2(NODE_11,1,NODE_104,TTL_HIGH,"0!1*") DISCRETE_TRANSFORM2(NODE_11,1,NODE_104,TTL_HIGH,"0!1*")
DISCRETE_LOGIC_INVERT(NODE_12,1,NODE_10) DISCRETE_LOGIC_INVERT(NODE_12,1,NODE_10)
DISCRETE_MIXER2(NODE_13, 1, NODE_10, NODE_11, &dkongjr_s1_mixer_desc) DISCRETE_MIXER2(NODE_13, 1, NODE_10, NODE_11, &dkongjr_s1_mixer_desc)
DISCRETE_74LS624( NODE_14, 1, NODE_13, 0.98*DK_SUP_V, JR_C22, DISC_LS624_OUT_ENERGY) DISCRETE_74LS624( NODE_14, 1, NODE_13, 0.98*DK_SUP_V, JR_C22, DISC_LS624_OUT_ENERGY)
DISCRETE_RCDISC_MODULATED(NODE_15, 1, NODE_12, NODE_14, 120, JR_R27, RES_K(0.001), JR_R28, JR_C28, DK_SUP_V) DISCRETE_RCDISC_MODULATED(NODE_15, 1, NODE_12, NODE_14, 120, JR_R27, RES_K(0.001), JR_R28, JR_C28, DK_SUP_V)
/* The following circuit does not match 100%, however works. /* The following circuit does not match 100%, however works.
* To be exact, we need a C-R-C-R circuit, we actually do not have. * To be exact, we need a C-R-C-R circuit, we actually do not have.
*/ */
DISCRETE_CRFILTER_VREF(NODE_16, 1, NODE_15, JR_R4, JR_C23, 2.5) DISCRETE_CRFILTER_VREF(NODE_16, 1, NODE_15, JR_R4, JR_C23, 2.5)
DISCRETE_RCFILTER(DS_OUT_SOUND1, 1, NODE_16, JR_R19, JR_C21) DISCRETE_RCFILTER(DS_OUT_SOUND1, 1, NODE_16, JR_R19, JR_C21)
/************************************************/ /************************************************/
/* SOUND2 */ /* SOUND2 */
/************************************************/ /************************************************/
DISCRETE_74LS624( NODE_20, 1, 0, 0.98*DK_SUP_V, JR_C20, DISC_LS624_OUT_COUNT_F) DISCRETE_74LS624( NODE_20, 1, 0, 0.98*DK_SUP_V, JR_C20, DISC_LS624_OUT_COUNT_F)
DISCRETE_LFSR_NOISE(NODE_21, 1, 1, NODE_20, 1.0, 0, 0.5, &dkongjr_lfsr) DISCRETE_LFSR_NOISE(NODE_21, 1, 1, NODE_20, 1.0, 0, 0.5, &dkongjr_lfsr)
DISCRETE_LS123_INV(NODE_25, DS_SOUND2_INV, JR_R17, JR_C27) DISCRETE_LS123_INV(NODE_25, DS_SOUND2_INV, JR_R17, JR_C27)
DISCRETE_RCDISC_MODULATED(NODE_26, 1, NODE_25, NODE_21, 120, JR_R24, RES_K(0.001), JR_R18, JR_C29, DK_SUP_V) DISCRETE_RCDISC_MODULATED(NODE_26, 1, NODE_25, NODE_21, 120, JR_R24, RES_K(0.001), JR_R18, JR_C29, DK_SUP_V)
/* The following circuit does not match 100%, however works. /* The following circuit does not match 100%, however works.
* To be exact, we need a C-R-C-R circuit, we actually do not have. * To be exact, we need a C-R-C-R circuit, we actually do not have.
*/ */
DISCRETE_CRFILTER_VREF(NODE_27, 1, NODE_26, JR_R6, JR_C30, 2.5) DISCRETE_CRFILTER_VREF(NODE_27, 1, NODE_26, JR_R6, JR_C30, 2.5)
DISCRETE_RCFILTER(DS_OUT_SOUND2, 1, NODE_27, JR_R2, JR_C25) DISCRETE_RCFILTER(DS_OUT_SOUND2, 1, NODE_27, JR_R2, JR_C25)
@ -783,37 +783,37 @@ static DISCRETE_SOUND_START(dkongjr)
DISCRETE_74LS624( NODE_92, 1, NODE_91, DK_SUP_V, JR_C37, DISC_LS624_OUT_ENERGY) DISCRETE_74LS624( NODE_92, 1, NODE_91, DK_SUP_V, JR_C37, DISC_LS624_OUT_ENERGY)
DISCRETE_ENERGY_NAND(NODE_93, 1, NODE_92, DS_SOUND9) DISCRETE_ENERGY_NAND(NODE_93, 1, NODE_92, DS_SOUND9)
DISCRETE_MULTIPLY(DS_OUT_SOUND9, 1, NODE_93, TTL_HIGH) DISCRETE_MULTIPLY(DS_OUT_SOUND9, 1, NODE_93, TTL_HIGH)
/************************************************/ /************************************************/
/* SOUND0 / SOUND7 */ /* SOUND0 / SOUND7 */
/************************************************/ /************************************************/
DISCRETE_COUNTER(NODE_100,1,0,NODE_118,0xFFFF,DISC_COUNT_UP,0,DISC_CLK_BY_COUNT) DISCRETE_COUNTER(NODE_100,1,0,NODE_118,0xFFFF,DISC_COUNT_UP,0,DISC_CLK_BY_COUNT)
DISCRETE_BITSET(NODE_101, NODE_100, 7) //LS157 2A DISCRETE_BITSET(NODE_101, NODE_100, 7) //LS157 2A
DISCRETE_BITSET(NODE_102, NODE_100, 4) //LS157 2B DISCRETE_BITSET(NODE_102, NODE_100, 4) //LS157 2B
DISCRETE_BITSET(NODE_103, NODE_100, 13) //LS157 3A DISCRETE_BITSET(NODE_103, NODE_100, 13) //LS157 3A
DISCRETE_BITSET(NODE_104, NODE_100, 12) //LS157 3B DISCRETE_BITSET(NODE_104, NODE_100, 12) //LS157 3B
/* LS157 Switches */ /* LS157 Switches */
DISCRETE_SWITCH(NODE_105, 1, DS_SOUND7_INV, GND, NODE_113) // Switch 1 from LS624 DISCRETE_SWITCH(NODE_105, 1, DS_SOUND7_INV, GND, NODE_113) // Switch 1 from LS624
DISCRETE_SWITCH(NODE_106, 1, DS_SOUND7_INV, NODE_101, NODE_102) // Switch 2 DISCRETE_SWITCH(NODE_106, 1, DS_SOUND7_INV, NODE_101, NODE_102) // Switch 2
DISCRETE_SWITCH(NODE_107, 1, DS_SOUND7_INV, NODE_103, NODE_104) // Switch 3 DISCRETE_SWITCH(NODE_107, 1, DS_SOUND7_INV, NODE_103, NODE_104) // Switch 3
DISCRETE_LS123(NODE_110, DS_SOUND0_INV, JR_R8, JR_C14) DISCRETE_LS123(NODE_110, DS_SOUND0_INV, JR_R8, JR_C14)
DISCRETE_TRANSFORM2(NODE_111, 1, TTL_HIGH, NODE_110, "01-") DISCRETE_TRANSFORM2(NODE_111, 1, TTL_HIGH, NODE_110, "01-")
DISCRETE_RCFILTER(NODE_112, 1, NODE_111, JR_R10, JR_C17) DISCRETE_RCFILTER(NODE_112, 1, NODE_111, JR_R10, JR_C17)
DISCRETE_74LS624(NODE_113, 1, NODE_112, DK_SUP_V, JR_C18, DISC_LS624_OUT_ENERGY) DISCRETE_74LS624(NODE_113, 1, NODE_112, DK_SUP_V, JR_C18, DISC_LS624_OUT_ENERGY)
DISCRETE_LOGIC_XOR(NODE_115, 1, NODE_105, NODE_106) DISCRETE_LOGIC_XOR(NODE_115, 1, NODE_105, NODE_106)
DISCRETE_TRANSFORM2(NODE_116,1, NODE_107, TTL_HIGH, "0!1*") DISCRETE_TRANSFORM2(NODE_116,1, NODE_107, TTL_HIGH, "0!1*")
DISCRETE_RCFILTER(NODE_117, 1, NODE_116, JR_R11, JR_C16) DISCRETE_RCFILTER(NODE_117, 1, NODE_116, JR_R11, JR_C16)
DISCRETE_74LS624(NODE_118, 1, NODE_117, DK_SUP_V, JR_C19, DISC_LS624_OUT_COUNT_F) DISCRETE_74LS624(NODE_118, 1, NODE_117, DK_SUP_V, JR_C19, DISC_LS624_OUT_COUNT_F)
DISCRETE_LOGIC_NAND(NODE_120, 1, NODE_115, NODE_110) DISCRETE_LOGIC_NAND(NODE_120, 1, NODE_115, NODE_110)
DISCRETE_MULTIPLY(DS_OUT_SOUND0, 1, NODE_120, TTL_HIGH) DISCRETE_MULTIPLY(DS_OUT_SOUND0, 1, NODE_120, TTL_HIGH)
/************************************************/ /************************************************/
/* DAC */ /* DAC */
/************************************************/ /************************************************/
@ -838,12 +838,12 @@ static DISCRETE_SOUND_START(dkongjr)
DISCRETE_MIXER5(NODE_288, 1, DS_OUT_SOUND9, DS_OUT_SOUND0, DS_OUT_SOUND2, DS_OUT_SOUND1, DS_OUT_DAC, &dkongjr_mixer_desc) DISCRETE_MIXER5(NODE_288, 1, DS_OUT_SOUND9, DS_OUT_SOUND0, DS_OUT_SOUND2, DS_OUT_SOUND1, DS_OUT_DAC, &dkongjr_mixer_desc)
/* Amplifier: internal amplifier /* Amplifier: internal amplifier
* Just a 1:n amplifier without filters - just the output filter * Just a 1:n amplifier without filters - just the output filter
*/ */
DISCRETE_CRFILTER(NODE_295,1,NODE_288, 1000, JR_C13) DISCRETE_CRFILTER(NODE_295,1,NODE_288, 1000, JR_C13)
DISCRETE_OUTPUT(NODE_295, 32767.0/5.0 * 10) DISCRETE_OUTPUT(NODE_295, 32767.0/5.0 * 10)
DISCRETE_SOUND_END DISCRETE_SOUND_END
/**************************************************************** /****************************************************************
@ -918,15 +918,15 @@ Addresses found at @0x510, cpu2
5: 10 10 10 trouble, trouble, trouble 5: 10 10 10 trouble, trouble, trouble
6: 12 12 all pilots climb up 6: 12 12 all pilots climb up
7: 20 engine trouble 7: 20 engine trouble
PA5 ==> CS 28 PA5 ==> CS 28
PA4 ==> PDC 2 PA4 ==> PDC 2
PA0 ==> CTL1 25 PA0 ==> CTL1 25
PA1 ==> CTL2 23 PA1 ==> CTL2 23
PA2 ==> CTL4 20 PA2 ==> CTL4 20
PA3 ==> CTL8 27 PA3 ==> CTL8 27
M1 19 ==> PA6 M1 on TMS5100 M1 19 ==> PA6 M1 on TMS5100
12,13 Speaker 12,13 Speaker
7,8 Xin, Xout (5100: RC-OSC, T11) 7,8 Xin, Xout (5100: RC-OSC, T11)
24 A0 (5100: ADD1) 24 A0 (5100: ADD1)
@ -936,33 +936,33 @@ Addresses found at @0x510, cpu2
16 C0 (5100: NC) 16 C0 (5100: NC)
18 C1 (5100: NC) 18 C1 (5100: NC)
3 CLK (5100: ROM-CK) 3 CLK (5100: ROM-CK)
For documentation purposes: For documentation purposes:
Addresses Addresses
{ 0x0000, 0x007a, 0x018b, 0x0320, 0x036c, 0x03c4, 0x041c, 0x0520, 0x063e } { 0x0000, 0x007a, 0x018b, 0x0320, 0x036c, 0x03c4, 0x041c, 0x0520, 0x063e }
and related samples interface and related samples interface
static const char *const radarsc1_sample_names[] = static const char *const radarsc1_sample_names[] =
{ {
"*radarsc1", "*radarsc1",
"10.wav", "10.wav",
"12.wav", "12.wav",
"14.wav", "14.wav",
"16.wav", "16.wav",
"18.wav", "18.wav",
"1A.wav", "1A.wav",
"1C.wav", "1C.wav",
"1E.wav", "1E.wav",
"20.wav", "20.wav",
0 0
}; };
static const struct Samplesinterface radarsc1_samples_interface = static const struct Samplesinterface radarsc1_samples_interface =
{ {
8, 8,
radarsc1_sample_names radarsc1_sample_names
}; };
*/ */
@ -971,7 +971,7 @@ static WRITE8_HANDLER( M58817_command_w )
logerror("PA Write %x\n", data); logerror("PA Write %x\n", data);
tms5110_CTL_w(0, data & 0x0f); tms5110_CTL_w(0, data & 0x0f);
tms5110_PDC_w(0, (data>>4) & 0x01); tms5110_PDC_w(0, (data>>4) & 0x01);
// FIXME 0x20 is CS // FIXME 0x20 is CS
} }
@ -1004,16 +1004,16 @@ static READ8_HANDLER( dkong_sh_t1_r )
static WRITE8_HANDLER( dkong_voice_w ) static WRITE8_HANDLER( dkong_voice_w )
{ {
/* only provided for documentation purposes /* only provided for documentation purposes
* not actually used * not actually used
*/ */
logerror("dkong_speech_w: 0x%02x\n", data); logerror("dkong_speech_w: 0x%02x\n", data);
} }
static READ8_HANDLER( dkong_voice_status_r ) static READ8_HANDLER( dkong_voice_status_r )
{ {
/* only provided for documentation purposes /* only provided for documentation purposes
* not actually used * not actually used
*/ */
return 0; return 0;
} }
@ -1022,7 +1022,7 @@ static READ8_HANDLER( dkong_sh_tune_r )
dkong_state *state = Machine->driver_data; dkong_state *state = Machine->driver_data;
UINT8 *SND = memory_region(REGION_CPU2); UINT8 *SND = memory_region(REGION_CPU2);
if ( state->page & 0x40 ) if ( state->page & 0x40 )
{ {
return (soundlatch_r(0) & 0x0F) | (dkong_voice_status_r(0)<<4); return (soundlatch_r(0) & 0x0F) | (dkong_voice_status_r(0)<<4);
} }
@ -1166,10 +1166,10 @@ WRITE8_HANDLER( dkongjr_snd_w1 )
I8035_P2_W_AL(5,data & 1); I8035_P2_W_AL(5,data & 1);
break; break;
case 4: /* Port 4 write */ case 4: /* Port 4 write */
I8035_T_W_AL(1, data & 1); I8035_T_W_AL(1, data & 1);
break; break;
case 5: /* Port 5 write */ case 5: /* Port 5 write */
I8035_T_W_AL(0, data & 1); I8035_T_W_AL(0, data & 1);
break; break;
case 6: /* Port 6 write ==> PB 4 */ case 6: /* Port 6 write ==> PB 4 */
I8035_P2_W_AL(4,data & 1); I8035_P2_W_AL(4,data & 1);
@ -1201,7 +1201,7 @@ static ADDRESS_MAP_START( dkong_sound_map, ADDRESS_SPACE_PROGRAM, 8 )
ADDRESS_MAP_END ADDRESS_MAP_END
static ADDRESS_MAP_START( dkong_sound_io_map, ADDRESS_SPACE_IO, 8 ) static ADDRESS_MAP_START( dkong_sound_io_map, ADDRESS_SPACE_IO, 8 )
AM_RANGE(0x00, 0xff) AM_READWRITE(dkong_sh_tune_r, dkong_voice_w) AM_RANGE(0x00, 0xff) AM_READWRITE(dkong_sh_tune_r, dkong_voice_w)
AM_RANGE(I8039_bus, I8039_bus) AM_READWRITE(dkong_sh_tune_r, dkong_voice_w) AM_RANGE(I8039_bus, I8039_bus) AM_READWRITE(dkong_sh_tune_r, dkong_voice_w)
AM_RANGE(I8039_p1, I8039_p1) AM_READWRITE(dkong_sh_p1_r, dkong_sh_p1_w) AM_RANGE(I8039_p1, I8039_p1) AM_READWRITE(dkong_sh_p1_r, dkong_sh_p1_w)
AM_RANGE(I8039_p2, I8039_p2) AM_READWRITE(dkong_sh_p2_r, dkong_sh_p2_w) AM_RANGE(I8039_p2, I8039_p2) AM_READWRITE(dkong_sh_p2_r, dkong_sh_p2_w)
@ -1314,7 +1314,7 @@ MACHINE_DRIVER_START( dkongjr_audio )
MDRV_SOUND_RESET(dkong) MDRV_SOUND_RESET(dkong)
MDRV_SPEAKER_STANDARD_MONO("mono") MDRV_SPEAKER_STANDARD_MONO("mono")
MDRV_SOUND_ADD_TAG("discrete", DISCRETE, 0) MDRV_SOUND_ADD_TAG("discrete", DISCRETE, 0)
MDRV_SOUND_CONFIG_DISCRETE(dkongjr) MDRV_SOUND_CONFIG_DISCRETE(dkongjr)
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)

View File

@ -550,7 +550,7 @@ static MACHINE_DRIVER_START( cabal )
MDRV_CPU_VBLANK_INT(irq1_line_hold,1) MDRV_CPU_VBLANK_INT(irq1_line_hold,1)
MDRV_CPU_ADD(Z80, 3579580) /* verified on pcb */ MDRV_CPU_ADD(Z80, 3579580) /* verified on pcb */
/* audio CPU */ /* audio CPU */
MDRV_CPU_PROGRAM_MAP(readmem_sound,writemem_sound) MDRV_CPU_PROGRAM_MAP(readmem_sound,writemem_sound)
MDRV_SCREEN_REFRESH_RATE(60) MDRV_SCREEN_REFRESH_RATE(60)

View File

@ -1240,7 +1240,7 @@ static MACHINE_DRIVER_START( midres )
MDRV_CPU_PROGRAM_MAP(midres_readmem,midres_writemem) MDRV_CPU_PROGRAM_MAP(midres_readmem,midres_writemem)
MDRV_CPU_VBLANK_INT(irq6_line_hold,1)/* VBL */ MDRV_CPU_VBLANK_INT(irq6_line_hold,1)/* VBL */
MDRV_CPU_ADD(H6280, 24000000/4/3) MDRV_CPU_ADD(H6280, 24000000/4/3)
/* audio CPU */ /* verified on pcb (6Mhz is XIN on pin 10 of H6280, pin 14 (HSM) is high so XIN/3 */ /* audio CPU */ /* verified on pcb (6Mhz is XIN on pin 10 of H6280, pin 14 (HSM) is high so XIN/3 */
MDRV_CPU_PROGRAM_MAP(midres_s_readmem,midres_s_writemem) MDRV_CPU_PROGRAM_MAP(midres_s_readmem,midres_s_writemem)

View File

@ -4,18 +4,18 @@ TODO:
- write a shootgal palette_init - write a shootgal palette_init
- Pestplce colors and origin - Pestplce colors and origin
- Shooting Gallery: Shootgal.txt mentions speech pcb, - Shooting Gallery: Shootgal.txt mentions speech pcb,
mikesarcade.com dk conversion - Clarify mikesarcade.com dk conversion - Clarify
- 8ballact: read 1507 no mapped - 8ballact: read 1507 no mapped
- dkong3 dma (Z80 dma) - dkong3 dma (Z80 dma)
- implement 74LS259 (8bit addressable latches), - implement 74LS259 (8bit addressable latches),
74LS175 (QUAD D FlipFlop), 74LS373 (Octal transparent latch) 74LS175 (QUAD D FlipFlop), 74LS373 (Octal transparent latch)
Done: Done:
- dkongjr discrete interface - dkongjr discrete interface
- when i am retired: implement 8257 DMA controller - when i am retired: implement 8257 DMA controller
- drakton - add dkongjr conversion - drakton - add dkongjr conversion
- for documentation: hook up speech interface still present on radarscp (TRS02) - for documentation: hook up speech interface still present on radarscp (TRS02)
and early dkong (TKG02/TKG03) pcbs. and early dkong (TKG02/TKG03) pcbs.
- radarscp_grid_color_w() is wrong, it probably isn't supposed to change - radarscp_grid_color_w() is wrong, it probably isn't supposed to change
the grid color. There are reports of the grid being constantly blue in the grid color. There are reports of the grid being constantly blue in
@ -59,12 +59,12 @@ Done:
Couriersud: 12/2007 Couriersud: 12/2007
- Cosmetic changes - Cosmetic changes
- Fixed regression in radarscp sound - Fixed regression in radarscp sound
- Added dipswitch locations to dkong3b - Added dipswitch locations to dkong3b
- Added dkongjr discrete sound - Added dkongjr discrete sound
- Proper interface Z80 - I8035 for dkongjr - Proper interface Z80 - I8035 for dkongjr
- Changed discrete sound output factors - Changed discrete sound output factors
- changed dkong/radarscp based games to use hardware-conformant I8035 memory maps - changed dkong/radarscp based games to use hardware-conformant I8035 memory maps
- Added drakton clone drktnjr on dkongjr hardware - Added drakton clone drktnjr on dkongjr hardware
- wrote M58817 sound driver and hooked it up - wrote M58817 sound driver and hooked it up
@ -505,7 +505,7 @@ static READ8_HANDLER( dkong_in2_r )
{ {
UINT8 r; UINT8 r;
#if DEBUG_DISC_SOUND #if DEBUG_DISC_SOUND
static UINT8 ui_snd = 0; static UINT8 ui_snd = 0;
static UINT8 lst = 0; static UINT8 lst = 0;
if (!lst && (readinputportbytag("TST") & 0x01)) if (!lst && (readinputportbytag("TST") & 0x01))
@ -519,7 +519,7 @@ static READ8_HANDLER( dkong_in2_r )
else else
dkongjr_snd_w2(ui_snd-8, (readinputportbytag("TST") & 0x02)>>1); dkongjr_snd_w2(ui_snd-8, (readinputportbytag("TST") & 0x02)>>1);
#endif #endif
r = (readinputportbytag("IN2") & 0xBF) | (dkong_audio_status_r(0) << 6); r = (readinputportbytag("IN2") & 0xBF) | (dkong_audio_status_r(0) << 6);
coin_counter_w(offset, r >> 7); coin_counter_w(offset, r >> 7);
if (r & 0x10) if (r & 0x10)
@ -1054,11 +1054,11 @@ static INPUT_PORTS_START( dkongjr )
PORT_INCLUDE( dkong_in1_4 ) PORT_INCLUDE( dkong_in1_4 )
PORT_INCLUDE( dkong_in2 ) PORT_INCLUDE( dkong_in2 )
PORT_INCLUDE( dkong_dsw0 ) PORT_INCLUDE( dkong_dsw0 )
#if DEBUG_DISC_SOUND #if DEBUG_DISC_SOUND
PORT_START_TAG("TST") /* TST */ PORT_START_TAG("TST") /* TST */
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CODE(KEYCODE_A) PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CODE(KEYCODE_A)
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CODE(KEYCODE_B) PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CODE(KEYCODE_B)
#endif #endif
INPUT_PORTS_END INPUT_PORTS_END

View File

@ -62,7 +62,7 @@ static MACHINE_START( midzeus )
gun_timer[0] = timer_alloc(invasn_gun_callback, NULL); gun_timer[0] = timer_alloc(invasn_gun_callback, NULL);
gun_timer[1] = timer_alloc(invasn_gun_callback, NULL); gun_timer[1] = timer_alloc(invasn_gun_callback, NULL);
state_save_register_global(gun_control); state_save_register_global(gun_control);
state_save_register_global(gun_irq_state); state_save_register_global(gun_irq_state);
state_save_register_global_array(gun_x); state_save_register_global_array(gun_x);
@ -142,7 +142,7 @@ static WRITE32_HANDLER( cmos_protect_w )
static READ32_HANDLER( timekeeper_r ) static READ32_HANDLER( timekeeper_r )
{ {
UINT8 result = timekeeper_0_r(offset); UINT8 result = timekeeper_0_r(offset);
// logerror("%06X:cmos_time_r(%X) = %02X\n", activecpu_get_pc(), offset, result); // logerror("%06X:cmos_time_r(%X) = %02X\n", activecpu_get_pc(), offset, result);
return result; return result;
} }
@ -151,7 +151,7 @@ static WRITE32_HANDLER( timekeeper_w )
{ {
if (!cmos_protected) if (!cmos_protected)
{ {
// logerror("%06X:cmos_time_w(%X) = %02X\n", activecpu_get_pc(), offset, data); // logerror("%06X:cmos_time_w(%X) = %02X\n", activecpu_get_pc(), offset, data);
timekeeper_0_w(offset, data); timekeeper_0_w(offset, data);
} }
cmos_protected = TRUE; cmos_protected = TRUE;
@ -190,7 +190,7 @@ static READ32_HANDLER( zpram_r )
static NVRAM_HANDLER( midzeus2 ) static NVRAM_HANDLER( midzeus2 )
{ {
nvram_handler_timekeeper_0(machine, file, read_or_write); nvram_handler_timekeeper_0(machine, file, read_or_write);
if (read_or_write) if (read_or_write)
mame_fwrite(file, zpram, zpram_size); mame_fwrite(file, zpram, zpram_size);
else if (file) else if (file)
@ -882,7 +882,7 @@ static INPUT_PORTS_START( thegrid )
PORT_START PORT_START
PORT_BIT( 0x00ff, IP_ACTIVE_LOW, IPT_SPECIAL ) PORT_CUSTOM(custom_49way_r, "49WAYX\0" "49WAYY") PORT_BIT( 0x00ff, IP_ACTIVE_LOW, IPT_SPECIAL ) PORT_CUSTOM(custom_49way_r, "49WAYX\0" "49WAYY")
PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START_TAG("49WAYX") PORT_START_TAG("49WAYX")
PORT_BIT( 0xff, 0x38, IPT_AD_STICK_X ) PORT_MINMAX(0x00,0x6f) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_BIT( 0xff, 0x38, IPT_AD_STICK_X ) PORT_MINMAX(0x00,0x6f) PORT_SENSITIVITY(100) PORT_KEYDELTA(10)

View File

@ -861,7 +861,7 @@ static MACHINE_DRIVER_START( wizdfire )
MDRV_CPU_PROGRAM_MAP(wizdfire_readmem,wizdfire_writemem) MDRV_CPU_PROGRAM_MAP(wizdfire_readmem,wizdfire_writemem)
MDRV_CPU_VBLANK_INT(irq6_line_hold,1) MDRV_CPU_VBLANK_INT(irq6_line_hold,1)
MDRV_CPU_ADD(H6280,32220000/4/3) MDRV_CPU_ADD(H6280,32220000/4/3)
MDRV_CPU_PROGRAM_MAP(sound_readmem,sound_writemem) MDRV_CPU_PROGRAM_MAP(sound_readmem,sound_writemem)
MDRV_SCREEN_REFRESH_RATE(58) MDRV_SCREEN_REFRESH_RATE(58)

View File

@ -26,9 +26,9 @@
NOTES: NOTES:
rjetus: rjetus:
- If you get a blank screen on startup you need to press F2 and choose "Reset settings", - If you get a blank screen on startup you need to press F2 and choose "Reset settings",
followed by "Exit". This will create a proper NVRAM followed by "Exit". This will create a proper NVRAM
TODO: TODO:
- Alpha blending. Screen shot on www.system16.com show that during attract mode - Alpha blending. Screen shot on www.system16.com show that during attract mode

View File

@ -175,7 +175,7 @@ Notes:
ROMs - ROMs -
UA0-6 to AU0-13 DIP42 maskROM, read as MX27C2100 (2 Meg) UA0-6 to AU0-13 DIP42 maskROM, read as MX27C2100 (2 Meg)
UA0-2 DIP32 27C1000 EPROM UA0-2 DIP32 27C1000 EPROM
All other ROMs DIP32 read as 27C1000 All other ROMs DIP32 read as 27C1000
All ROMs have IC locations, but the PCB also has IC locations so components All ROMs have IC locations, but the PCB also has IC locations so components
can be referenced with IC# or location. See above diagram for info. can be referenced with IC# or location. See above diagram for info.

View File

@ -110,7 +110,7 @@ static WRITE16_HANDLER( z80_shared_w )
*************************************/ *************************************/
static INPUT_PORTS_START( tx1 ) static INPUT_PORTS_START( tx1 )
PORT_START_TAG("DSW") PORT_START_TAG("DSW")
PORT_DIPNAME( 0x001c, 0x0000, DEF_STR( Coin_A ) ) PORT_DIPNAME( 0x001c, 0x0000, DEF_STR( Coin_A ) )
PORT_DIPSETTING( 0x0008, DEF_STR( 3C_1C ) ) PORT_DIPSETTING( 0x0008, DEF_STR( 3C_1C ) )
PORT_DIPSETTING( 0x0004, DEF_STR( 2C_1C ) ) PORT_DIPSETTING( 0x0004, DEF_STR( 2C_1C ) )

View File

@ -56,7 +56,7 @@ struct _poly_extra_data
static TIMER_CALLBACK( scanline_timer_cb ) static TIMER_CALLBACK( scanline_timer_cb )
{ {
int scanline = param; int scanline = param;
if (scanline != -1) if (scanline != -1)
{ {
cpunum_set_input_line(0, 0, ASSERT_LINE); cpunum_set_input_line(0, 0, ASSERT_LINE);

View File

@ -288,8 +288,8 @@ static void exit_handler(running_machine *machine)
{ {
if (i % 4 == 0) fprintf(f, "%03X%03X: ", i / WAVERAM0_WIDTH, i % WAVERAM0_WIDTH); if (i % 4 == 0) fprintf(f, "%03X%03X: ", i / WAVERAM0_WIDTH, i % WAVERAM0_WIDTH);
fprintf(f, " %08X %08X ", fprintf(f, " %08X %08X ",
WAVERAM_READ32(waveram[0], i*2+0), WAVERAM_READ32(waveram[0], i*2+0),
WAVERAM_READ32(waveram[0], i*2+1)); WAVERAM_READ32(waveram[0], i*2+1));
if (i % 4 == 3) fprintf(f, "\n"); if (i % 4 == 3) fprintf(f, "\n");
} }
fclose(f); fclose(f);
@ -673,7 +673,7 @@ static void zeus_register_update(offs_t offset)
(offset == 0xb2 && (zeusbase[0xb6] & 0x02000000) != 0)) (offset == 0xb2 && (zeusbase[0xb6] & 0x02000000) != 0))
{ {
void *dest; void *dest;
if (zeusbase[0xb6] & 0x80000000) if (zeusbase[0xb6] & 0x80000000)
dest = waveram1_ptr_from_expanded_addr(zeusbase[0xb4]); dest = waveram1_ptr_from_expanded_addr(zeusbase[0xb4]);
else else
@ -697,7 +697,7 @@ static void zeus_register_update(offs_t offset)
if (zeusbase[0xb6] & 0x00010000) if (zeusbase[0xb6] & 0x00010000)
{ {
const UINT32 *src; const UINT32 *src;
if (zeusbase[0xb6] & 0x80000000) if (zeusbase[0xb6] & 0x80000000)
src = waveram1_ptr_from_expanded_addr(zeusbase[0xb4]); src = waveram1_ptr_from_expanded_addr(zeusbase[0xb4]);
else else

View File

@ -249,7 +249,7 @@ INLINE UINT8 get_texel_4bit(const void *base, int y, int x, int width)
* Video startup * Video startup
* *
*************************************/ *************************************/
static TIMER_CALLBACK( int_timer_callback ) static TIMER_CALLBACK( int_timer_callback )
{ {
cpunum_set_input_line(0, 2, ASSERT_LINE); cpunum_set_input_line(0, 2, ASSERT_LINE);
@ -269,9 +269,9 @@ VIDEO_START( midzeus2 )
add_exit_callback(machine, exit_handler); add_exit_callback(machine, exit_handler);
zeus_renderbase = waveram[1]; zeus_renderbase = waveram[1];
int_timer = timer_alloc(int_timer_callback, NULL); int_timer = timer_alloc(int_timer_callback, NULL);
/* save states */ /* save states */
state_save_register_global_pointer(waveram[0], WAVERAM0_WIDTH * WAVERAM0_HEIGHT * 8 / sizeof(waveram[0][0])); state_save_register_global_pointer(waveram[0], WAVERAM0_WIDTH * WAVERAM0_HEIGHT * 8 / sizeof(waveram[0][0]));
state_save_register_global_pointer(waveram[1], WAVERAM1_WIDTH * WAVERAM1_HEIGHT * 12 / sizeof(waveram[1][0])); state_save_register_global_pointer(waveram[1], WAVERAM1_WIDTH * WAVERAM1_HEIGHT * 12 / sizeof(waveram[1][0]));
@ -296,9 +296,9 @@ static void exit_handler(running_machine *machine)
for (i = 0; i < WAVERAM0_WIDTH * WAVERAM0_HEIGHT; i++) for (i = 0; i < WAVERAM0_WIDTH * WAVERAM0_HEIGHT; i++)
{ {
if (i % 4 == 0) fprintf(f, "%03X%03X: ", i / WAVERAM0_WIDTH, i % WAVERAM0_WIDTH); if (i % 4 == 0) fprintf(f, "%03X%03X: ", i / WAVERAM0_WIDTH, i % WAVERAM0_WIDTH);
fprintf(f, " %08X %08X ", fprintf(f, " %08X %08X ",
WAVERAM_READ32(waveram[0], i*2+0), WAVERAM_READ32(waveram[0], i*2+0),
WAVERAM_READ32(waveram[0], i*2+1)); WAVERAM_READ32(waveram[0], i*2+1));
if (i % 4 == 3) fprintf(f, "\n"); if (i % 4 == 3) fprintf(f, "\n");
} }
fclose(f); fclose(f);
@ -308,7 +308,7 @@ static void exit_handler(running_machine *machine)
{ {
reg_info *info; reg_info *info;
int regnum; int regnum;
for (regnum = 0; regnum < 0x80; regnum++) for (regnum = 0; regnum < 0x80; regnum++)
{ {
printf("Register %02X\n", regnum); printf("Register %02X\n", regnum);
@ -326,7 +326,7 @@ static void exit_handler(running_machine *machine)
printf("\t%08X\n", info->value); printf("\t%08X\n", info->value);
} }
} }
for (regnum = 0; regnum < 0x100; regnum++) for (regnum = 0; regnum < 0x100; regnum++)
if (subregwrite_count[regnum] != 0) if (subregwrite_count[regnum] != 0)
{ {
@ -487,7 +487,7 @@ regwrite_count[offset]++;
if (regdata_count[offset] < 256) if (regdata_count[offset] < 256)
{ {
reg_info **tailptr; reg_info **tailptr;
for (tailptr = &regdata[offset]; *tailptr != NULL; tailptr = &(*tailptr)->next) for (tailptr = &regdata[offset]; *tailptr != NULL; tailptr = &(*tailptr)->next)
if ((*tailptr)->value == data) if ((*tailptr)->value == data)
break; break;
@ -633,7 +633,7 @@ static void zeus_register_update(offs_t offset, UINT32 oldval, int logit)
else if (logit) else if (logit)
logerror("\t[40]=%08X [4E]=%08X\n", zeusbase[0x40], zeusbase[0x4e]); logerror("\t[40]=%08X [4E]=%08X\n", zeusbase[0x40], zeusbase[0x4e]);
break; break;
case 0x51: case 0x51:
/* in this mode, crusnexo expects the reads to immediately latch */ /* in this mode, crusnexo expects the reads to immediately latch */
@ -731,7 +731,7 @@ subregwrite_count[which]++;
if (subregdata_count[which] < 256) if (subregdata_count[which] < 256)
{ {
reg_info **tailptr; reg_info **tailptr;
for (tailptr = &subregdata[which]; *tailptr != NULL; tailptr = &(*tailptr)->next) for (tailptr = &subregdata[which]; *tailptr != NULL; tailptr = &(*tailptr)->next)
if ((*tailptr)->value == value) if ((*tailptr)->value == value)
break; break;
@ -750,11 +750,11 @@ if (subregdata_count[which] < 256)
case 0x04: case 0x04:
zeus_renderbase = waveram1_ptr_from_expanded_addr(value << 16); zeus_renderbase = waveram1_ptr_from_expanded_addr(value << 16);
break; break;
case 0x05: case 0x05:
zeus_texbase = value % (WAVERAM0_HEIGHT * WAVERAM0_WIDTH); zeus_texbase = value % (WAVERAM0_HEIGHT * WAVERAM0_WIDTH);
break; break;
case 0x40: case 0x40:
zeus_unknown_40 = value & 0xffffff; zeus_unknown_40 = value & 0xffffff;
zeus_quad_size = (zeus_unknown_40 == 0) ? 10 : 14; zeus_quad_size = (zeus_unknown_40 == 0) ? 10 : 14;
@ -773,7 +773,7 @@ if (subregdata_count[which] < 256)
static int zeus_fifo_process(const UINT32 *data, int numwords) static int zeus_fifo_process(const UINT32 *data, int numwords)
{ {
int dataoffs = 0; int dataoffs = 0;
/* handle logging */ /* handle logging */
switch (data[0] >> 24) switch (data[0] >> 24)
{ {
@ -786,28 +786,28 @@ static int zeus_fifo_process(const UINT32 *data, int numwords)
if (((data[0] >> 16) & 0x7f) != 0x08) if (((data[0] >> 16) & 0x7f) != 0x08)
zeus_register32_w((data[0] >> 16) & 0x7f, data[1], log_fifo); zeus_register32_w((data[0] >> 16) & 0x7f, data[1], log_fifo);
break; break;
/* 0x08: set matrix and point (thegrid) */ /* 0x08: set matrix and point (thegrid) */
case 0x08: case 0x08:
if (numwords < 14) if (numwords < 14)
return FALSE; return FALSE;
dataoffs = 1; dataoffs = 1;
/* 0x07: set matrix and point (crusnexo) */ /* 0x07: set matrix and point (crusnexo) */
case 0x07: case 0x07:
if (numwords < 13) if (numwords < 13)
return FALSE; return FALSE;
/* extract the matrix from the raw data */ /* extract the matrix from the raw data */
zeus_matrix[0][0] = convert_tms3203x_fp_to_float(data[dataoffs + 1]); zeus_matrix[0][0] = convert_tms3203x_fp_to_float(data[dataoffs + 1]);
zeus_matrix[0][1] = convert_tms3203x_fp_to_float(data[dataoffs + 2]); zeus_matrix[0][1] = convert_tms3203x_fp_to_float(data[dataoffs + 2]);
zeus_matrix[0][2] = convert_tms3203x_fp_to_float(data[dataoffs + 3]); zeus_matrix[0][2] = convert_tms3203x_fp_to_float(data[dataoffs + 3]);
zeus_matrix[1][0] = convert_tms3203x_fp_to_float(data[dataoffs + 4]); zeus_matrix[1][0] = convert_tms3203x_fp_to_float(data[dataoffs + 4]);
zeus_matrix[1][1] = convert_tms3203x_fp_to_float(data[dataoffs + 5]); zeus_matrix[1][1] = convert_tms3203x_fp_to_float(data[dataoffs + 5]);
zeus_matrix[1][2] = convert_tms3203x_fp_to_float(data[dataoffs + 6]); zeus_matrix[1][2] = convert_tms3203x_fp_to_float(data[dataoffs + 6]);
zeus_matrix[2][0] = convert_tms3203x_fp_to_float(data[dataoffs + 7]); zeus_matrix[2][0] = convert_tms3203x_fp_to_float(data[dataoffs + 7]);
zeus_matrix[2][1] = convert_tms3203x_fp_to_float(data[dataoffs + 8]); zeus_matrix[2][1] = convert_tms3203x_fp_to_float(data[dataoffs + 8]);
zeus_matrix[2][2] = convert_tms3203x_fp_to_float(data[dataoffs + 9]); zeus_matrix[2][2] = convert_tms3203x_fp_to_float(data[dataoffs + 9]);
/* extract the translation point from the raw data */ /* extract the translation point from the raw data */
zeus_point[0] = convert_tms3203x_fp_to_float(data[dataoffs + 10]); zeus_point[0] = convert_tms3203x_fp_to_float(data[dataoffs + 10]);
@ -826,7 +826,7 @@ static int zeus_fifo_process(const UINT32 *data, int numwords)
zeus_point[2]); zeus_point[2]);
} }
break; break;
/* 0x15: set point only (thegrid) */ /* 0x15: set point only (thegrid) */
/* 0x16: set point only (crusnexo) */ /* 0x16: set point only (crusnexo) */
case 0x15: case 0x15:
@ -838,7 +838,7 @@ static int zeus_fifo_process(const UINT32 *data, int numwords)
zeus_point[0] = convert_tms3203x_fp_to_float(data[1]); zeus_point[0] = convert_tms3203x_fp_to_float(data[1]);
zeus_point[1] = convert_tms3203x_fp_to_float(data[2]); zeus_point[1] = convert_tms3203x_fp_to_float(data[2]);
zeus_point[2] = convert_tms3203x_fp_to_float(data[3]); zeus_point[2] = convert_tms3203x_fp_to_float(data[3]);
if (log_fifo) if (log_fifo)
{ {
log_fifo_command(data, numwords, ""); log_fifo_command(data, numwords, "");
@ -848,7 +848,7 @@ static int zeus_fifo_process(const UINT32 *data, int numwords)
zeus_point[2]); zeus_point[2]);
} }
break; break;
/* 0x1c: */ /* 0x1c: */
case 0x1c: case 0x1c:
if (numwords < 4) if (numwords < 4)
@ -874,7 +874,7 @@ static int zeus_fifo_process(const UINT32 *data, int numwords)
waveram_plot_depth(y, x, 0, 0x7fff); waveram_plot_depth(y, x, 0, 0x7fff);
} }
break; break;
/* 0x23: render model in waveram (thegrid) */ /* 0x23: render model in waveram (thegrid) */
/* 0x24: render model in waveram (crusnexo) */ /* 0x24: render model in waveram (crusnexo) */
case 0x23: case 0x23:
@ -885,7 +885,7 @@ static int zeus_fifo_process(const UINT32 *data, int numwords)
log_fifo_command(data, numwords, ""); log_fifo_command(data, numwords, "");
zeus_draw_model(data[1], data[0] & 0xffff, log_fifo); zeus_draw_model(data[1], data[0] & 0xffff, log_fifo);
break; break;
/* 0x31: sync pipeline? (thegrid) */ /* 0x31: sync pipeline? (thegrid) */
/* 0x32: sync pipeline? (crusnexo) */ /* 0x32: sync pipeline? (crusnexo) */
case 0x31: case 0x31:
@ -894,7 +894,7 @@ static int zeus_fifo_process(const UINT32 *data, int numwords)
log_fifo_command(data, numwords, "\n"); log_fifo_command(data, numwords, "\n");
zeus_quad_size = 10; zeus_quad_size = 10;
break; break;
/* 0x38: direct render quad (crusnexo) */ /* 0x38: direct render quad (crusnexo) */
case 0x38: case 0x38:
if (numwords < 12) if (numwords < 12)
@ -991,7 +991,7 @@ static void zeus_draw_model(UINT32 baseaddr, UINT16 count, int logit)
else if (logit) else if (logit)
logerror("unknown offset\n"); logerror("unknown offset\n");
break; break;
case 0x31: /* thegrid */ case 0x31: /* thegrid */
if (logit) if (logit)
logerror("sync?\n"); logerror("sync?\n");
@ -1003,7 +1003,7 @@ static void zeus_draw_model(UINT32 baseaddr, UINT16 count, int logit)
logerror("reg32"); logerror("reg32");
zeus_register32_w((databuffer[0] >> 16) & 0x7f, databuffer[1], logit); zeus_register32_w((databuffer[0] >> 16) & 0x7f, databuffer[1], logit);
break; break;
case 0x38: /* crusnexo/thegrid */ case 0x38: /* crusnexo/thegrid */
zeus_draw_quad(databuffer, texoffs, logit); zeus_draw_quad(databuffer, texoffs, logit);
break; break;
@ -1040,13 +1040,13 @@ static void zeus_draw_quad(const UINT32 *databuffer, UINT32 texoffs, int logit)
poly_extra_data *extra; poly_extra_data *extra;
poly_vertex clipvert[8]; poly_vertex clipvert[8];
poly_vertex vert[4]; poly_vertex vert[4];
// float uscale, vscale; // float uscale, vscale;
float maxy, maxx; float maxy, maxx;
// int val1, val2, texwshift; // int val1, val2, texwshift;
int numverts; int numverts;
int i; int i;
// INT16 normal[3]; // INT16 normal[3];
// INT32 rotnormal[3]; // INT32 rotnormal[3];
int texmode = texoffs & 0xffff; int texmode = texoffs & 0xffff;
if (logit) if (logit)
@ -1065,43 +1065,43 @@ if (input_code_pressed(KEYCODE_Y) && (texoffs & 0xffff) == 0x0dd) return;
callback = render_poly_8bit; callback = render_poly_8bit;
/* /*
0 38800000 0 38800000
1 x2 | x1 1 x2 | x1
2 v1 | u1 2 v1 | u1
3 y2 | y1 3 y2 | y1
4 v2 | u2 4 v2 | u2
5 z2 | z1 5 z2 | z1
6 v3 | u3 6 v3 | u3
7 v4 | u4 7 v4 | u4
8 ??? 8 ???
9 x4 | x3 9 x4 | x3
10 y4 | y3 10 y4 | y3
11 z4 | z3 11 z4 | z3
In memory: In memory:
+0 = ??? +0 = ???
+1 = set via $05410000/value +1 = set via $05410000/value
+2 = x1 +2 = x1
+3 = y1 +3 = y1
+4 = z1 +4 = z1
+5 = x2 +5 = x2
+6 = y2 +6 = y2
+7 = z2 +7 = z2
+8 = x3 +8 = x3
+9 = y3 +9 = y3
+10= z3 +10= z3
+11= x4 +11= x4
+12= y4 +12= y4
+13= z4 +13= z4
+14= uv1 +14= uv1
+15= uv2 +15= uv2
+16= uv3 +16= uv3
+17= uv4 +17= uv4
+18= set via $05200000/$05000000 | (value << 10) (uvoffset?) +18= set via $05200000/$05000000 | (value << 10) (uvoffset?)
+19= ??? +19= ???
38810000 00000000 00C7|FF38 FF5E|FF5E 15400154 11400114 00000000 00000000 FF38|00C7 00A3|00A3 -- quad
38810000 00000000 00C7|FF38 FF5E|FF5E 15400154 11400114 00000000 00000000 FF38|00C7 00A3|00A3 -- quad
xxxx|xxxx yyyy|yyyy xxxx|xxxx yyyy|yyyy xxxx|xxxx yyyy|yyyy xxxx|xxxx yyyy|yyyy
*/ */
@ -1111,7 +1111,7 @@ In memory:
vert[0].p[0] = (INT16)databuffer[6]; vert[0].p[0] = (INT16)databuffer[6];
vert[0].p[1] = (databuffer[1] >> 2) & 0xff; vert[0].p[1] = (databuffer[1] >> 2) & 0xff;
vert[0].p[2] = (databuffer[1] >> 18) & 0xff; vert[0].p[2] = (databuffer[1] >> 18) & 0xff;
vert[1].x = (INT16)(databuffer[2] >> 16); vert[1].x = (INT16)(databuffer[2] >> 16);
vert[1].y = (INT16)(databuffer[3] >> 16); vert[1].y = (INT16)(databuffer[3] >> 16);
vert[1].p[0] = (INT16)(databuffer[6] >> 16); vert[1].p[0] = (INT16)(databuffer[6] >> 16);
@ -1123,7 +1123,7 @@ In memory:
vert[2].p[0] = (INT16)databuffer[7]; vert[2].p[0] = (INT16)databuffer[7];
vert[2].p[1] = (databuffer[4] >> 22) & 0xff; vert[2].p[1] = (databuffer[4] >> 22) & 0xff;
vert[2].p[2] = (databuffer[5] >> 2) & 0xff; vert[2].p[2] = (databuffer[5] >> 2) & 0xff;
vert[3].x = (INT16)(databuffer[8] >> 16); vert[3].x = (INT16)(databuffer[8] >> 16);
vert[3].y = (INT16)(databuffer[9] >> 16); vert[3].y = (INT16)(databuffer[9] >> 16);
vert[3].p[0] = (INT16)(databuffer[7] >> 16); vert[3].p[0] = (INT16)(databuffer[7] >> 16);
@ -1131,36 +1131,36 @@ In memory:
vert[3].p[2] = (databuffer[5] >> 22) & 0xff; vert[3].p[2] = (databuffer[5] >> 22) & 0xff;
/* /*
vert[0].x = (INT16)databuffer[1]; vert[0].x = (INT16)databuffer[1];
vert[0].y = (INT16)databuffer[3]; vert[0].y = (INT16)databuffer[3];
vert[0].p[0] = (INT16)databuffer[5]; vert[0].p[0] = (INT16)databuffer[5];
vert[0].p[1] = (UINT16)databuffer[2]; vert[0].p[1] = (UINT16)databuffer[2];
vert[0].p[2] = (UINT16)(databuffer[2] >> 16); vert[0].p[2] = (UINT16)(databuffer[2] >> 16);
vert[1].x = (INT16)(databuffer[1] >> 16);
vert[1].y = (INT16)(databuffer[3] >> 16);
vert[1].p[0] = (INT16)(databuffer[5] >> 16);
vert[1].p[1] = (UINT16)databuffer[4];
vert[1].p[2] = (UINT16)(databuffer[4] >> 16);
vert[2].x = (INT16)databuffer[9]; vert[1].x = (INT16)(databuffer[1] >> 16);
vert[2].y = (INT16)databuffer[10]; vert[1].y = (INT16)(databuffer[3] >> 16);
vert[2].p[0] = (INT16)databuffer[11]; vert[1].p[0] = (INT16)(databuffer[5] >> 16);
vert[2].p[1] = (UINT16)databuffer[6]; vert[1].p[1] = (UINT16)databuffer[4];
vert[2].p[2] = (UINT16)(databuffer[6] >> 16); vert[1].p[2] = (UINT16)(databuffer[4] >> 16);
vert[3].x = (INT16)(databuffer[9] >> 16); vert[2].x = (INT16)databuffer[9];
vert[3].y = (INT16)(databuffer[10] >> 16); vert[2].y = (INT16)databuffer[10];
vert[3].p[0] = (INT16)(databuffer[11] >> 16); vert[2].p[0] = (INT16)databuffer[11];
vert[3].p[1] = (UINT16)databuffer[7]; vert[2].p[1] = (UINT16)databuffer[6];
vert[3].p[2] = (UINT16)(databuffer[7] >> 16); vert[2].p[2] = (UINT16)(databuffer[6] >> 16);
vert[3].x = (INT16)(databuffer[9] >> 16);
vert[3].y = (INT16)(databuffer[10] >> 16);
vert[3].p[0] = (INT16)(databuffer[11] >> 16);
vert[3].p[1] = (UINT16)databuffer[7];
vert[3].p[2] = (UINT16)(databuffer[7] >> 16);
*/ */
for (i = 0; i < 4; i++) for (i = 0; i < 4; i++)
{ {
float x = vert[i].x; float x = vert[i].x;
float y = vert[i].y; float y = vert[i].y;
float z = vert[i].p[0]; float z = vert[i].p[0];
vert[i].x = x * zeus_matrix[0][0] + y * zeus_matrix[0][1] + z * zeus_matrix[0][2] + zeus_point[0]; vert[i].x = x * zeus_matrix[0][0] + y * zeus_matrix[0][1] + z * zeus_matrix[0][2] + zeus_point[0];
vert[i].y = x * zeus_matrix[1][0] + y * zeus_matrix[1][1] + z * zeus_matrix[1][2] + zeus_point[1]; vert[i].y = x * zeus_matrix[1][0] + y * zeus_matrix[1][1] + z * zeus_matrix[1][2] + zeus_point[1];
vert[i].p[0] = x * zeus_matrix[2][0] + y * zeus_matrix[2][1] + z * zeus_matrix[2][2] + zeus_point[2]; vert[i].p[0] = x * zeus_matrix[2][0] + y * zeus_matrix[2][1] + z * zeus_matrix[2][2] + zeus_point[2];
@ -1168,7 +1168,7 @@ vert[i].p[0] += zbase;
vert[i].p[2] += texoffs >> 16; vert[i].p[2] += texoffs >> 16;
vert[i].p[1] *= 256.0f; vert[i].p[1] *= 256.0f;
vert[i].p[2] *= 256.0f; vert[i].p[2] *= 256.0f;
if (logit) if (logit)
{ {
logerror("\t\t(%f,%f,%f) (%02X,%02X)\n", logerror("\t\t(%f,%f,%f) (%02X,%02X)\n",
@ -1186,8 +1186,8 @@ vert[i].p[0] += zbase;
{ {
// 412.0f here works for crusnexo // 412.0f here works for crusnexo
float ooz = 512.0f / clipvert[i].p[0]; float ooz = 512.0f / clipvert[i].p[0];
// ooz *= 1.0f / (512.0f * 512.0f); // ooz *= 1.0f / (512.0f * 512.0f);
clipvert[i].x *= ooz; clipvert[i].x *= ooz;
clipvert[i].y *= ooz; clipvert[i].y *= ooz;
@ -1207,7 +1207,7 @@ vert[i].p[0] += zbase;
if (clipvert[i].y == maxy) if (clipvert[i].y == maxy)
clipvert[i].y += 0.0005f; clipvert[i].y += 0.0005f;
} }
extra = poly_get_extra_data(poly); extra = poly_get_extra_data(poly);
switch (texmode) switch (texmode)
{ {
@ -1222,7 +1222,7 @@ vert[i].p[0] += zbase;
case 0xc5d: /* crusnexo */ case 0xc5d: /* crusnexo */
extra->texwidth = 256; extra->texwidth = 256;
break; break;
case 0x059: /* crusnexo */ case 0x059: /* crusnexo */
case 0x0d9: /* crusnexo */ case 0x0d9: /* crusnexo */
case 0x119: /* crusnexo: license plates */ case 0x119: /* crusnexo: license plates */
@ -1234,7 +1234,7 @@ vert[i].p[0] += zbase;
case 0x155: /* crusnexo */ case 0x155: /* crusnexo */
extra->texwidth = 64; extra->texwidth = 64;
break; break;
default: default:
{ {
static UINT8 hits[0x10000]; static UINT8 hits[0x10000];
@ -1271,11 +1271,11 @@ static void render_poly_8bit(void *dest, INT32 scanline, const poly_extent *exte
INT32 curz = extent->param[0].start; INT32 curz = extent->param[0].start;
INT32 curu = extent->param[1].start; INT32 curu = extent->param[1].start;
INT32 curv = extent->param[2].start; INT32 curv = extent->param[2].start;
// INT32 curi = extent->param[3].start; // INT32 curi = extent->param[3].start;
INT32 dzdx = extent->param[0].dpdx; INT32 dzdx = extent->param[0].dpdx;
INT32 dudx = extent->param[1].dpdx; INT32 dudx = extent->param[1].dpdx;
INT32 dvdx = extent->param[2].dpdx; INT32 dvdx = extent->param[2].dpdx;
// INT32 didx = extent->param[3].dpdx; // INT32 didx = extent->param[3].dpdx;
const void *texbase = extra->texbase; const void *texbase = extra->texbase;
const void *palbase = extra->palbase; const void *palbase = extra->palbase;
UINT16 transcolor = extra->transcolor; UINT16 transcolor = extra->transcolor;
@ -1317,7 +1317,7 @@ static void render_poly_8bit(void *dest, INT32 scanline, const poly_extent *exte
curz += dzdx; curz += dzdx;
curu += dudx; curu += dudx;
curv += dvdx; curv += dvdx;
// curi += didx; // curi += didx;
} }
} }

View File

@ -9,4 +9,4 @@
***************************************************************************/ ***************************************************************************/
const char build_version[] = "0.122u1 ("__DATE__")"; const char build_version[] = "0.122u2 ("__DATE__")";