Skip to content

Commit 798d1d8

Browse files
committed
Merge remote-tracking branch 'upstream/master'
2 parents f6c76f4 + e6c3d78 commit 798d1d8

File tree

9 files changed

+228
-166
lines changed

9 files changed

+228
-166
lines changed

src/mame/apple/macpwrbkmsc.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -587,7 +587,7 @@ void macpbmsc_state::macpd2xx_base_map(address_map &map)
587587
map(0x50f04000, 0x50f05fff).rw(FUNC(macpbmsc_state::scc_r), FUNC(macpbmsc_state::scc_w));
588588
map(0x50f06000, 0x50f07fff).rw(FUNC(macpbmsc_state::scsi_drq_r), FUNC(macpbmsc_state::scsi_drq_w));
589589
map(0x50f10000, 0x50f11fff).rw(FUNC(macpbmsc_state::scsi_r), FUNC(macpbmsc_state::scsi_w));
590-
map(0x50f12060, 0x50f12063).r(FUNC(macpbmsc_state::scsi_drq_r));
590+
map(0x50f12000, 0x50f13fff).rw(FUNC(macpbmsc_state::scsi_drq_r), FUNC(macpbmsc_state::scsi_drq_w));
591591
}
592592

593593
void macpbmsc_state::macpd210_map(address_map &map)

src/mame/konami/konamigx.h

+4
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,7 @@ class konamigx_state : public driver_device
144144
void konamigx_precache_registers(void);
145145

146146
void wipezbuf(int noshadow);
147+
void set_brightness(int layer);
147148

148149
void dmastart_callback(int data);
149150

@@ -247,6 +248,9 @@ class konamigx_state : public driver_device
247248
uint16_t *m_gx_spriteram = nullptr;
248249
std::unique_ptr<uint16_t[]> m_gx_spriteram_alloc;
249250

251+
u8 m_current_brightness = 0xff;
252+
u8 m_brightness[3]{};
253+
250254
// mirrored K054338 settings
251255
int *m_K054338_shdRGB = nullptr;
252256

src/mame/konami/konamigx_m.cpp

+42-25
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,8 @@ uint16_t konamigx_state::K055550_word_r(offs_t offset)
5353
void konamigx_state::K055550_word_w(offs_t offset, uint16_t data, uint16_t mem_mask)
5454
{
5555
auto &mspace = m_maincpu->space(AS_PROGRAM);
56-
uint32_t adr, bsize, count, i, lim;
57-
int src, tgt, srcend, tgtend, skip, cx1, sx1, wx1, cy1, sy1, wy1, cz1, sz1, wz1, c2, s2, w2;
56+
uint32_t adr, bsize, count, i, lim, src, dst;
57+
int tgt, srcend, tgtend, skip, cx1, sx1, wx1, cy1, sy1, wy1, cz1, sz1, wz1, c2, s2, w2;
5858
int dx, dy, angle;
5959

6060
COMBINE_DATA(m_prot_data+offset);
@@ -71,10 +71,25 @@ void konamigx_state::K055550_word_w(offs_t offset, uint16_t data, uint16_t mem_m
7171
count = (m_prot_data[0] & 0xff) + 1;
7272

7373
lim = adr+bsize*count;
74-
for(i=adr; i<lim; i+=2)
74+
for (i = adr; i < lim; i += 2)
7575
mspace.write_word(i, m_prot_data[0x1a/2]);
7676
break;
7777

78+
case 0x98: // memcpy of some kind. incomplete
79+
// known use cases:
80+
// viostorm: transfer "color check" palette
81+
82+
dst = (m_prot_data[7] << 16) | m_prot_data[8];
83+
src = (m_prot_data[2] << 16) | m_prot_data[3];
84+
count = (m_prot_data[10] << 16 | m_prot_data[11]) >> 2;
85+
86+
for (int x = 0; x < count; ++x)
87+
{
88+
const u32 src_data = mspace.read_dword(src + x * 8);
89+
mspace.write_dword(dst + x * 4, src_data);
90+
}
91+
break;
92+
7893
// WARNING: The following cases are speculation based with questionable accuracy!(AAT)
7994

8095
case 0x87: // unknown memory write (Violent Storm at 0x00b6ea)
@@ -101,7 +116,7 @@ void konamigx_state::K055550_word_w(offs_t offset, uint16_t data, uint16_t mem_m
101116
tgtend = srcend + bsize;
102117

103118
// let's hope GCC will inline the mem24bew calls
104-
for (src=adr; src<srcend; src+=bsize)
119+
for (src = adr; src < srcend; src += bsize)
105120
{
106121
cx1 = (short)mspace.read_word(src);
107122
sx1 = (short)mspace.read_word(src + 2);
@@ -118,24 +133,24 @@ void konamigx_state::K055550_word_w(offs_t offset, uint16_t data, uint16_t mem_m
118133
count = i = src + skip;
119134
tgt = src + bsize;
120135

121-
for (; count<tgt; count++) mspace.write_byte(count, 0);
136+
for (; count < tgt; count++) mspace.write_byte(count, 0);
122137

123-
for (; tgt<tgtend; i++, tgt+=bsize)
138+
for (; tgt < tgtend; i++, tgt += bsize)
124139
{
125140
c2 = (short)mspace.read_word(tgt);
126141
s2 = (short)mspace.read_word(tgt + 2);
127142
w2 = (short)mspace.read_word(tgt + 4);
128-
if (abs((cx1+sx1)-(c2+s2))>=wx1+w2) continue; // X rejection
143+
if (abs((cx1 + sx1) - (c2 + s2)) >= wx1 + w2) continue; // X rejection
129144

130145
c2 = (short)mspace.read_word(tgt + 6);
131146
s2 = (short)mspace.read_word(tgt + 8);
132147
w2 = (short)mspace.read_word(tgt +10);
133-
if (abs((cy1+sy1)-(c2+s2))>=wy1+w2) continue; // Y rejection
148+
if (abs((cy1 + sy1) - (c2 + s2)) >= wy1 + w2) continue; // Y rejection
134149

135150
c2 = (short)mspace.read_word(tgt +12);
136151
s2 = (short)mspace.read_word(tgt +14);
137152
w2 = (short)mspace.read_word(tgt +16);
138-
if (abs((cz1+sz1)-(c2+s2))>=wz1+w2) continue; // Z rejection
153+
if (abs((cz1 + sz1) - (c2 + s2)) >= wz1 + w2) continue; // Z rejection
139154

140155
mspace.write_byte(i, 0x80); // collision confirmed
141156
}
@@ -211,13 +226,13 @@ void konamigx_state::K053990_martchmp_word_w(offs_t offset, uint16_t data, uint1
211226
dst_skip += element_size;
212227

213228
if (element_size == 1)
214-
for (i=src_count; i; i--)
229+
for (i = src_count; i; i--)
215230
{
216231
mspace.write_byte(dst_addr, mspace.read_byte(src_addr));
217232
src_addr += src_skip;
218233
dst_addr += dst_skip;
219234
}
220-
else for (i=src_count; i; i--)
235+
else for (i = src_count; i; i--)
221236
{
222237
mspace.write_word(dst_addr, mspace.read_word(src_addr));
223238
src_addr += src_skip;
@@ -387,7 +402,7 @@ if((data1=obj[0])&0x80000000)\
387402
case 0x11010010: i = 5; vmask = 0x1ff; break;
388403
case 0x01111018: i = 4; break;
389404
case 0x10010011: i = 3;
390-
if ((srcbase[0x1c75]&0xff)==32) m_k055555->K055555_write_reg(K55_BLEND_ENABLES,36); // (TEMPORARY)
405+
if ((srcbase[0x1c75] & 0xff) == 32) m_k055555->K055555_write_reg(K55_BLEND_ENABLES,36); // (TEMPORARY)
391406
break;
392407
case 0x11010811: i = 2; break;
393408
case 0x10000010: i = 1; break;
@@ -424,8 +439,8 @@ if((data1=obj[0])&0x80000000)\
424439
// decode Lord British (the designer must be a Richard Garriot fan too:)
425440
if (srcbase[0x0848/4] & 0x0000ffff)
426441
{
427-
hoffs = srcbase[0x08b0/4]>>16;
428-
voffs = srcbase[0x08b4/4]>>16;
442+
hoffs = srcbase[0x08b0/4] >> 16;
443+
voffs = srcbase[0x08b4/4] >> 16;
429444
hoffs -= hcorr;
430445
voffs -= vcorr;
431446
obj = &srcbase[0x084c/4];
@@ -445,8 +460,8 @@ if((data1=obj[0])&0x80000000)\
445460
i = src[7] & 0xf;
446461
if (!i) continue; // reject retired or zero-element groups
447462
i <<= 2;
448-
hoffs = src[5]>>16;
449-
voffs = src[6]>>16;
463+
hoffs = src[5] >> 16;
464+
voffs = src[6] >> 16;
450465
hoffs -= hcorr;
451466
voffs -= vcorr;
452467
obj = src + 8;
@@ -456,9 +471,9 @@ if((data1=obj[0])&0x80000000)\
456471
{
457472
EXTRACT_EVEN
458473
}
459-
while ((obj+=4)<objend);
474+
while ((obj += 4) < objend);
460475
}
461-
while ((src+=0x30)<srcend);
476+
while ((src += 0x30) < srcend);
462477

463478
// clear residual data
464479
if (j) do { *dst = 0; dst += 8; } while (--j);
@@ -480,7 +495,7 @@ void konamigx_state::fantjour_dma_w(offs_t offset, uint32_t data, uint32_t mem_m
480495
{
481496
auto &mspace = m_maincpu->space(AS_PROGRAM);
482497
COMBINE_DATA(m_fantjour_dma + offset);
483-
if(!offset && ACCESSING_BITS_24_31) {
498+
if (!offset && ACCESSING_BITS_24_31) {
484499
uint32_t sa = m_fantjour_dma[1];
485500
// uint16_t ss = (m_fantjour_dma[2] & 0xffff0000) >> 16;
486501
// uint32_t sb = ((m_fantjour_dma[2] & 0xffff) << 16) | ((m_fantjour_dma[3] & 0xffff0000) >> 16);
@@ -496,16 +511,18 @@ void konamigx_state::fantjour_dma_w(offs_t offset, uint32_t data, uint32_t mem_m
496511
uint32_t x = m_fantjour_dma[6];
497512
uint32_t i1, i2;
498513

499-
if(mode == 0x93)
500-
for(i1=0; i1 <= sz2; i1++)
501-
for(i2=0; i2 < db; i2+=4) {
514+
if (mode == 0x93)
515+
for (i1 = 0; i1 <= sz2; i1++)
516+
for (i2 = 0; i2 < db; i2 += 4)
517+
{
502518
mspace.write_dword(da, mspace.read_dword(sa) ^ x);
503519
da += 4;
504520
sa += 4;
505521
}
506-
else if(mode == 0x8f)
507-
for(i1=0; i1 <= sz2; i1++)
508-
for(i2=0; i2 < db; i2+=4) {
522+
else if (mode == 0x8f)
523+
for (i1 = 0; i1 <= sz2; i1++)
524+
for (i2 = 0; i2 < db; i2 += 4)
525+
{
509526
mspace.write_dword(da, x);
510527
da += 4;
511528
}

src/mame/konami/konamigx_v.cpp

+24
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,10 @@ void konamigx_state::konamigx_precache_registers(void)
5454
m_vmixon = m_k055555->K055555_read_register(K55_VINMIX_ON);
5555
m_osinmix = m_k055555->K055555_read_register(K55_OSBLEND_ENABLES);
5656
m_osmixon = m_k055555->K055555_read_register(K55_OSBLEND_ON);
57+
58+
m_brightness[0] = u8(m_k054338->register_r(K338_REG_BRI3));
59+
m_brightness[1] = u8(m_k054338->register_r(K338_REG_BRI3 + 1) >> 8);
60+
m_brightness[2] = u8(m_k054338->register_r(K338_REG_BRI3 + 1));
5761
}
5862

5963
inline int konamigx_state::K053247GX_combine_c18(int attrib) // (see p.46)
@@ -243,6 +247,22 @@ void konamigx_state::wipezbuf(int noshadow)
243247
}
244248
}
245249

250+
void konamigx_state::set_brightness(int layer)
251+
{
252+
const u8 bri_mode = (m_k055555->K055555_read_register(K55_VBRI) >> layer * 2) & 0b11;
253+
254+
const u8 new_brightness = bri_mode ? m_brightness[bri_mode - 1] : 0xff;
255+
256+
if (m_current_brightness != new_brightness)
257+
{
258+
m_current_brightness = new_brightness;
259+
for (int x = 0; x < m_palette->entries(); ++x)
260+
{
261+
m_palette->set_pen_contrast(x, m_current_brightness / 255.0);
262+
}
263+
}
264+
}
265+
246266
/*
247267
* Sprite Format
248268
* ------------------
@@ -664,6 +684,8 @@ void konamigx_state::gx_draw_basic_tilemaps(screen_device &screen, bitmap_rgb32
664684
int disp = m_k055555->K055555_read_register(K55_INPUT_ENABLES);
665685
if (disp & (1<<code))
666686
{
687+
set_brightness(code);
688+
667689
if (j == GXMIX_BLEND_NONE) { temp1 = 0xff; temp2 = temp3 = 0; } else
668690
if (j == GXMIX_BLEND_FORCE) { temp1 = 0x00; temp2 = mixerflags>>(i+16); temp3 = 3; }
669691
else
@@ -1135,6 +1157,8 @@ void konamigx_state::common_init()
11351157
save_item(NAME(m_vmixon));
11361158
save_item(NAME(m_osinmix));
11371159
save_item(NAME(m_osmixon));
1160+
save_item(NAME(m_current_brightness));
1161+
save_item(NAME(m_brightness));
11381162

11391163
m_gx_tilemode = 0;
11401164

0 commit comments

Comments
 (0)