summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Angelo Salese <angelosa@users.noreply.github.com>2013-09-12 17:34:38 +0000
committer Angelo Salese <angelosa@users.noreply.github.com>2013-09-12 17:34:38 +0000
commitddf4c2f101375465bb6001bb7f3ee4bddd31cfe2 (patch)
tree9bcef8de841641d8d6cd704d9fd7125ba13168e6
parent8b907e1af9efa5cec6846ca5098738b0bf207241 (diff)
Preliminary startx/starty support, display is repeated on left-right edges, to be improved
-rw-r--r--src/emu/cpu/avr8/avr8.c4
-rw-r--r--src/mame/video/powervr2.c50
-rw-r--r--src/mess/drivers/sbc6510.c2
3 files changed, 33 insertions, 23 deletions
diff --git a/src/emu/cpu/avr8/avr8.c b/src/emu/cpu/avr8/avr8.c
index bfb1162786a..ecaf238c72d 100644
--- a/src/emu/cpu/avr8/avr8.c
+++ b/src/emu/cpu/avr8/avr8.c
@@ -2648,7 +2648,9 @@ void avr8_device::execute_run()
break;
case 0x0080: // SLEEP
//output += sprintf( output, "SLEEP" );
- unimplemented_opcode(op);
+ m_pc--;
+ opcycles = 1;
+ //unimplemented_opcode(op);
break;
case 0x0090: // BREAK
//output += sprintf( output, "BREAK" );
diff --git a/src/mame/video/powervr2.c b/src/mame/video/powervr2.c
index 5c64b1f48d2..7db013801b5 100644
--- a/src/mame/video/powervr2.c
+++ b/src/mame/video/powervr2.c
@@ -104,7 +104,7 @@ const int powervr2_device::pvr_wordspolygon[24] = {8,8,8,8,8, 8, 8,8,8,8,16,16,8
#define DEBUG_FIFO_POLY (0)
#define DEBUG_PVRTA 0
#define DEBUG_PVRDLIST (0)
-#define DEBUG_PALRAM (1)
+#define DEBUG_PALRAM (0)
#define DEBUG_PVRCTRL (0)
inline INT32 powervr2_device::clamp(INT32 in, INT32 min, INT32 max)
@@ -1541,18 +1541,19 @@ void powervr2_device::update_screen_format()
INT32 spg_hbend = (spg_hblank >> 16) & 0x3ff;
INT32 spg_vbstart = spg_vblank & 0x3ff;
INT32 spg_vbend = (spg_vblank >> 16) & 0x3ff;
- INT32 vo_horz_start_pos = vo_startx & 0x3ff;
- INT32 vo_vert_start_pos_f1 = vo_starty & 0x3ff;
+ //INT32 vo_horz_start_pos = vo_startx & 0x3ff;
+ //INT32 vo_vert_start_pos_f1 = vo_starty & 0x3ff;
int pclk = spg_clks[(spg_control >> 6) & 3] * (((spg_control & 0x10) >> 4)+1);
attoseconds_t refresh = HZ_TO_ATTOSECONDS(pclk) * spg_hsize * spg_vsize;
rectangle visarea = m_screen->visible_area();
- /* FIXME: right visible area calculations aren't known yet*/
- visarea.min_x = 0;
- visarea.max_x = ((spg_hbstart - spg_hbend - vo_horz_start_pos) <= 0x180 ? 320 : 640) - 1;
- visarea.min_y = 0;
- visarea.max_y = ((spg_vbstart - spg_vbend - vo_vert_start_pos_f1) <= 0x100 ? 240 : 480) - 1;
+ /* FIXME: fix if spg_*bend > spg_*bstart */
+ visarea.min_x = spg_hbend;
+ visarea.max_x = spg_hbstart - 1;
+ visarea.min_y = spg_vbend;
+ visarea.max_y = spg_vbstart - 1;
+ //printf("%d %d %d\n",spg_vbstart,spg_vbend,vo_vert_start_pos_f1);
m_screen->configure(spg_hsize, spg_vsize, visarea, refresh );
}
@@ -2952,7 +2953,7 @@ void powervr2_device::pvr_accumulationbuffer_to_framebuffer(address_space &space
break;
// used by Suchie3
- case 0x04: // 888 RGB 24-bit (HACK! should not downconvert and pvr_drawframebuffer should change accordingly)
+ case 0x04: // 888 RGB 24-bit
{
switch(unpackmode)
{
@@ -2995,6 +2996,11 @@ void powervr2_device::pvr_drawframebuffer(bitmap_rgb32 &bitmap,const rectangle &
UINT32 *fbaddr;
UINT32 c;
UINT32 r,g,b;
+ //INT32 vo_horz_start_pos = vo_startx & 0x3ff;
+ UINT8 interlace_on = ((spg_control & 0x10) >> 4);
+ INT32 ystart_f1 = (vo_starty & 0x3ff) << interlace_on;
+ //INT32 ystart_f2 = (vo_starty >> 16) & 0x3ff;
+ INT32 hstart = (vo_startx & 0x3ff);
UINT8 unpackmode = (fb_r_ctrl & 0x0000000c) >>2; // aka fb_depth
UINT8 enable = (fb_r_ctrl & 0x00000001);
@@ -3009,6 +3015,8 @@ void powervr2_device::pvr_drawframebuffer(bitmap_rgb32 &bitmap,const rectangle &
dy++;
dy*=2; // probably depends on interlace mode, fields etc...
+// popmessage("%d %d %d %d %d",ystart_f1,ystart_f2,interlace_on,spg_vblank & 0x3ff,(spg_vblank >> 16) & 0x3ff);
+
switch (unpackmode)
{
case 0x00: // 0555 RGB 16-bit, Cleo Fortune Plus
@@ -3020,7 +3028,7 @@ void powervr2_device::pvr_drawframebuffer(bitmap_rgb32 &bitmap,const rectangle &
{
for (x=0;x < xi;x++)
{
- fbaddr=&bitmap.pix32(y, x*2+0);
+ fbaddr=&bitmap.pix32(y + ystart_f1, x*2+0 + hstart);
c=*((reinterpret_cast<UINT16 *>(dc_framebuffer_ram)) + (WORD2_XOR_LE(addrp) >> 1));
b = (c & 0x001f) << 3;
@@ -3030,7 +3038,7 @@ void powervr2_device::pvr_drawframebuffer(bitmap_rgb32 &bitmap,const rectangle &
if (y<=cliprect.max_y)
*fbaddr = b | (g<<8) | (r<<16);
- fbaddr=&bitmap.pix32(y, x*2+1);
+ fbaddr=&bitmap.pix32(y + ystart_f1, x*2+1 + hstart);
if (y<=cliprect.max_y)
*fbaddr = b | (g<<8) | (r<<16);
addrp+=2;
@@ -3040,7 +3048,7 @@ void powervr2_device::pvr_drawframebuffer(bitmap_rgb32 &bitmap,const rectangle &
{
for (x=0;x < xi;x++)
{
- fbaddr=&bitmap.pix32(y, x);
+ fbaddr=&bitmap.pix32(y + ystart_f1, x + hstart);
c=*((reinterpret_cast<UINT16 *>(dc_framebuffer_ram)) + (WORD2_XOR_LE(addrp) >> 1));
b = (c & 0x001f) << 3;
@@ -3064,7 +3072,7 @@ void powervr2_device::pvr_drawframebuffer(bitmap_rgb32 &bitmap,const rectangle &
{
for (x=0;x < xi;x++)
{
- fbaddr=&bitmap.pix32(y, x*2+0);
+ fbaddr=&bitmap.pix32(y + ystart_f1, x*2+0 + hstart);
c=*((reinterpret_cast<UINT16 *>(dc_framebuffer_ram)) + (WORD2_XOR_LE(addrp) >> 1));
b = (c & 0x001f) << 3;
@@ -3074,7 +3082,7 @@ void powervr2_device::pvr_drawframebuffer(bitmap_rgb32 &bitmap,const rectangle &
if (y<=cliprect.max_y)
*fbaddr = b | (g<<8) | (r<<16);
- fbaddr=&bitmap.pix32(y, x*2+1);
+ fbaddr=&bitmap.pix32(y + ystart_f1, x*2+1 + hstart);
if (y<=cliprect.max_y)
*fbaddr = b | (g<<8) | (r<<16);
@@ -3086,7 +3094,7 @@ void powervr2_device::pvr_drawframebuffer(bitmap_rgb32 &bitmap,const rectangle &
{
for (x=0;x < xi;x++)
{
- fbaddr=&bitmap.pix32(y, x);
+ fbaddr=&bitmap.pix32(y + ystart_f1, x + hstart);
c=*((reinterpret_cast<UINT16 *>(dc_framebuffer_ram)) + (WORD2_XOR_LE(addrp) >> 1));
b = (c & 0x001f) << 3;
@@ -3110,7 +3118,7 @@ void powervr2_device::pvr_drawframebuffer(bitmap_rgb32 &bitmap,const rectangle &
{
for (x=0;x < xi;x++)
{
- fbaddr=&bitmap.pix32(y, x*2+0);
+ fbaddr=&bitmap.pix32(y + ystart_f1, x*2+0 + hstart);
c =*(UINT8 *)((reinterpret_cast<UINT8 *>(dc_framebuffer_ram)) + BYTE8_XOR_LE(addrp));
b = c;
@@ -3124,7 +3132,7 @@ void powervr2_device::pvr_drawframebuffer(bitmap_rgb32 &bitmap,const rectangle &
if (y<=cliprect.max_y)
*fbaddr = b | (g<<8) | (r<<16);
- fbaddr=&bitmap.pix32(y, x*2+1);
+ fbaddr=&bitmap.pix32(y + ystart_f1, x*2+1 + hstart);
if (y<=cliprect.max_y)
*fbaddr = b | (g<<8) | (r<<16);
@@ -3135,7 +3143,7 @@ void powervr2_device::pvr_drawframebuffer(bitmap_rgb32 &bitmap,const rectangle &
{
for (x=0;x < xi;x++)
{
- fbaddr=&bitmap.pix32(y, x);
+ fbaddr=&bitmap.pix32(y + ystart_f1, x + hstart);
c =*(UINT8 *)((reinterpret_cast<UINT8 *>(dc_framebuffer_ram)) + BYTE8_XOR_LE(addrp));
b = c;
@@ -3164,7 +3172,7 @@ void powervr2_device::pvr_drawframebuffer(bitmap_rgb32 &bitmap,const rectangle &
{
for (x=0;x < xi;x++)
{
- fbaddr=&bitmap.pix32(y, x*2+0);
+ fbaddr=&bitmap.pix32(y + ystart_f1, x*2+0 + hstart);
c =*((reinterpret_cast<UINT32 *>(dc_framebuffer_ram)) + (WORD2_XOR_LE(addrp) >> 2));
b = (c & 0x0000ff) >> 0;
@@ -3174,7 +3182,7 @@ void powervr2_device::pvr_drawframebuffer(bitmap_rgb32 &bitmap,const rectangle &
if (y<=cliprect.max_y)
*fbaddr = b | (g<<8) | (r<<16);
- fbaddr=&bitmap.pix32(y, x*2+1);
+ fbaddr=&bitmap.pix32(y + ystart_f1, x*2+1 + hstart);
if (y<=cliprect.max_y)
*fbaddr = b | (g<<8) | (r<<16);
@@ -3185,7 +3193,7 @@ void powervr2_device::pvr_drawframebuffer(bitmap_rgb32 &bitmap,const rectangle &
{
for (x=0;x < xi;x++)
{
- fbaddr=&bitmap.pix32(y, x);
+ fbaddr=&bitmap.pix32(y + ystart_f1, x + hstart);
c =*((reinterpret_cast<UINT32 *>(dc_framebuffer_ram)) + (WORD2_XOR_LE(addrp) >> 2));
b = (c & 0x0000ff) >> 0;
diff --git a/src/mess/drivers/sbc6510.c b/src/mess/drivers/sbc6510.c
index 9bf1340ca68..2ee572fd0ac 100644
--- a/src/mess/drivers/sbc6510.c
+++ b/src/mess/drivers/sbc6510.c
@@ -284,7 +284,7 @@ static MACHINE_CONFIG_START( sbc6510, sbc6510_state )
MCFG_CPU_PROGRAM_MAP(sbc6510_mem)
MCFG_CPU_ADD("videocpu",ATMEGA88, XTAL_16MHz)
- MCFG_DEVICE_DISABLE() // trips SLEEP opcode, needs to be emulated
+// MCFG_DEVICE_DISABLE() // trips SLEEP opcode, needs to be emulated
MCFG_CPU_AVR8_CONFIG(atmega88_config)
MCFG_CPU_PROGRAM_MAP(sbc6510_video_mem)
MCFG_CPU_DATA_MAP(sbc6510_video_data)