mirror of
https://github.com/holub/mame
synced 2025-05-23 22:20:01 +03:00
another megadriv.c update
This commit is contained in:
parent
0cfb585253
commit
dbdc1594ff
@ -274,6 +274,7 @@ a tilemap-like structure, from which data is copied)
|
|||||||
#ifdef MESS
|
#ifdef MESS
|
||||||
#include "devices/chd_cd.h"
|
#include "devices/chd_cd.h"
|
||||||
#endif
|
#endif
|
||||||
|
#include "sound/rf5c68.h"
|
||||||
|
|
||||||
#define MEGADRIV_VDP_VRAM(address) megadrive_vdp_vram[(address)&0x7fff]
|
#define MEGADRIV_VDP_VRAM(address) megadrive_vdp_vram[(address)&0x7fff]
|
||||||
|
|
||||||
@ -3936,6 +3937,39 @@ static READ16_HANDLER( scd_a12002_memory_mode_r )
|
|||||||
((segacd_maincpu_has_ram_access) << 0);
|
((segacd_maincpu_has_ram_access) << 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* I'm still not 100% clear how this works, the sources I have are a bit vague,
|
||||||
|
it might still be incorrect in both modes
|
||||||
|
*/
|
||||||
|
|
||||||
|
// DMNA = Decleration Mainram No Access (bit 0)
|
||||||
|
// RET = Return access (bit 1)
|
||||||
|
|
||||||
|
/* In Mode 0
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* In Mode 1
|
||||||
|
|
||||||
|
|
||||||
|
RET
|
||||||
|
|
||||||
|
0 = Main CPU Accesses WordRam0 (1st Half of WordRAM)
|
||||||
|
Sub CPU Accesses WordRam1 (2nd Half of WordRAM)
|
||||||
|
|
||||||
|
1 = Main CPU Accesses WordRam1 (2nd Half of WordRAM)
|
||||||
|
Sub CPU Accesses WordRam0 (1st Half of WordRAM)
|
||||||
|
|
||||||
|
DMNA
|
||||||
|
|
||||||
|
Setting this bis sends a Swap request to the SUB-CPU (Main CPU access only?)
|
||||||
|
1 = Swap Reqested / In Progress
|
||||||
|
0 = Swap Complete
|
||||||
|
|
||||||
|
(personal note, is this just a software flag? in this mode? sub p11/p12)
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
static WRITE16_HANDLER( scd_a12002_memory_mode_w )
|
static WRITE16_HANDLER( scd_a12002_memory_mode_w )
|
||||||
{
|
{
|
||||||
//printf("scd_a12002_memory_mode_w %04x %04x\n", data, mem_mask);
|
//printf("scd_a12002_memory_mode_w %04x %04x\n", data, mem_mask);
|
||||||
@ -3946,7 +3980,7 @@ static WRITE16_HANDLER( scd_a12002_memory_mode_w )
|
|||||||
//if (data&0x0001) printf("ret bit set (invalid? can't set from main68k?)\n");
|
//if (data&0x0001) printf("ret bit set (invalid? can't set from main68k?)\n");
|
||||||
if (data&0x0002)
|
if (data&0x0002)
|
||||||
{
|
{
|
||||||
//printf("dmn set (swap requested)\n"); // give ram to sub?
|
//printf("dmna set (swap requested)\n"); // give ram to sub?
|
||||||
|
|
||||||
// this should take some time?
|
// this should take some time?
|
||||||
segacd_maincpu_has_ram_access = 0;
|
segacd_maincpu_has_ram_access = 0;
|
||||||
@ -4001,7 +4035,7 @@ static WRITE16_HANDLER( segacd_sub_memory_mode_w )
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//if (data&0x0002) printf("dmn set (swap requested) (invalid, can't be set from sub68k?\n");
|
//if (data&0x0002) printf("dmna set (swap requested) (invalid, can't be set from sub68k?\n");
|
||||||
|
|
||||||
//if (data&0x0004)
|
//if (data&0x0004)
|
||||||
{
|
{
|
||||||
@ -4281,9 +4315,19 @@ static READ16_HANDLER( segacd_main_dataram_part1_r )
|
|||||||
}
|
}
|
||||||
else if (segacd_ram_mode==1)
|
else if (segacd_ram_mode==1)
|
||||||
{
|
{
|
||||||
printf("Unspported: segacd_main_dataram_part1_r in mode 1\n");
|
|
||||||
|
if (offset<0x20000/2)
|
||||||
|
{
|
||||||
|
// wordram accees
|
||||||
|
printf("Unspported: segacd_main_dataram_part1_r (word RAM) in mode 1\n");
|
||||||
return 0x0000;
|
return 0x0000;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("Unspported: segacd_main_dataram_part1_r (Cell rearranged RAM) in mode 1\n");
|
||||||
|
return 0x0000;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return 0x0000;
|
return 0x0000;
|
||||||
}
|
}
|
||||||
@ -4305,7 +4349,15 @@ static WRITE16_HANDLER( segacd_main_dataram_part1_w )
|
|||||||
}
|
}
|
||||||
else if (segacd_ram_mode==1)
|
else if (segacd_ram_mode==1)
|
||||||
{
|
{
|
||||||
printf("Unspported: segacd_main_dataram_part1_w in mode 1\n");
|
if (offset<0x20000/2)
|
||||||
|
{
|
||||||
|
printf("Unspported: segacd_main_dataram_part1_w (word RAM) in mode 1\n");
|
||||||
|
// wordram accees
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("Unspported: segacd_main_dataram_part1_w (Cell rearranged RAM) in mode 1 (illega?)\n"); // is this legal??
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4985,7 +5037,7 @@ static READ16_HANDLER( segacd_sub_dataram_part1_r )
|
|||||||
}
|
}
|
||||||
else if (segacd_ram_mode==1)
|
else if (segacd_ram_mode==1)
|
||||||
{
|
{
|
||||||
printf("Unspported: segacd_sub_dataram_part1_r in mode 1\n");
|
printf("Unspported: segacd_sub_dataram_part1_r in mode 1 (Word RAM Expander - 1 Byte Per Pixel)\n");
|
||||||
return 0x0000;
|
return 0x0000;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5009,7 +5061,7 @@ static WRITE16_HANDLER( segacd_sub_dataram_part1_w )
|
|||||||
}
|
}
|
||||||
else if (segacd_ram_mode==1)
|
else if (segacd_ram_mode==1)
|
||||||
{
|
{
|
||||||
printf("Unspported: segacd_sub_dataram_part1_w in mode 1\n");
|
printf("Unspported: segacd_sub_dataram_part1_w in mode 1 (Word RAM Expander - 1 Byte Per Pixel)\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5017,12 +5069,12 @@ static READ16_HANDLER( segacd_sub_dataram_part2_r )
|
|||||||
{
|
{
|
||||||
if (segacd_ram_mode==0)
|
if (segacd_ram_mode==0)
|
||||||
{
|
{
|
||||||
printf("ILLEGAL segacd_sub_dataram_part2_r in mode 1\n");
|
printf("ILLEGAL segacd_sub_dataram_part2_r in mode 0\n"); // not mapepd to anything in mode 0
|
||||||
return 0x0000;
|
return 0x0000;
|
||||||
}
|
}
|
||||||
else if (segacd_ram_mode==1)
|
else if (segacd_ram_mode==1)
|
||||||
{
|
{
|
||||||
printf("Unspported: segacd_sub_dataram_part2_r in mode 1\n");
|
printf("Unspported: segacd_sub_dataram_part2_r in mode 1 (Word RAM)\n");
|
||||||
return 0x0000;
|
return 0x0000;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5033,11 +5085,11 @@ static WRITE16_HANDLER( segacd_sub_dataram_part2_w )
|
|||||||
{
|
{
|
||||||
if (segacd_ram_mode==0)
|
if (segacd_ram_mode==0)
|
||||||
{
|
{
|
||||||
printf("ILLEGAL segacd_sub_dataram_part2_w in mode 1\n");
|
printf("ILLEGAL segacd_sub_dataram_part2_w in mode 0\n"); // not mapepd to anything in mode 0
|
||||||
}
|
}
|
||||||
else if (segacd_ram_mode==1)
|
else if (segacd_ram_mode==1)
|
||||||
{
|
{
|
||||||
printf("Unsupported: segacd_sub_dataram_part2_w in mode 1\n");
|
printf("Unsupported: segacd_sub_dataram_part2_w in mode 1 (Word RAM)\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5572,7 +5624,10 @@ static ADDRESS_MAP_START( segacd_map, ADDRESS_SPACE_PROGRAM, 16 )
|
|||||||
|
|
||||||
AM_RANGE(0xfe0000, 0xfe3fff) AM_RAM // backup RAM, odd bytes only!
|
AM_RANGE(0xfe0000, 0xfe3fff) AM_RAM // backup RAM, odd bytes only!
|
||||||
|
|
||||||
AM_RANGE(0xff0000, 0xff7fff) AM_RAM // PCM, RF5C164
|
AM_RANGE(0xff0000, 0xff001f) AM_DEVWRITE8("rfsnd", rf5c68_w, 0x00ff) // PCM, RF5C164
|
||||||
|
AM_RANGE(0xff2000, 0xff3fff) AM_DEVREADWRITE8("rfsnd", rf5c68_mem_r, rf5c68_mem_w,0x00ff) // PCM, RF5C164
|
||||||
|
|
||||||
|
|
||||||
AM_RANGE(0xff8000 ,0xff8001) AM_READWRITE(segacd_sub_led_ready_r, segacd_sub_led_ready_w)
|
AM_RANGE(0xff8000 ,0xff8001) AM_READWRITE(segacd_sub_led_ready_r, segacd_sub_led_ready_w)
|
||||||
AM_RANGE(0xff8002 ,0xff8003) AM_READWRITE(segacd_sub_memory_mode_r, segacd_sub_memory_mode_w)
|
AM_RANGE(0xff8002 ,0xff8003) AM_READWRITE(segacd_sub_memory_mode_r, segacd_sub_memory_mode_w)
|
||||||
|
|
||||||
@ -8542,6 +8597,10 @@ MACHINE_CONFIG_DERIVED( genesis_scd, megadriv )
|
|||||||
MDRV_SOUND_ROUTE( 0, "lspeaker", 1.00 )
|
MDRV_SOUND_ROUTE( 0, "lspeaker", 1.00 )
|
||||||
MDRV_SOUND_ROUTE( 1, "rspeaker", 1.00 )
|
MDRV_SOUND_ROUTE( 1, "rspeaker", 1.00 )
|
||||||
|
|
||||||
|
MDRV_SOUND_ADD("rfsnd", RF5C68, SEGACD_CLOCK) // RF5C164!
|
||||||
|
MDRV_SOUND_ROUTE( 0, "lspeaker", 0.25 )
|
||||||
|
MDRV_SOUND_ROUTE( 1, "rspeaker", 0.25 )
|
||||||
|
|
||||||
#ifdef MESS
|
#ifdef MESS
|
||||||
MDRV_CDROM_ADD( "cdrom" )
|
MDRV_CDROM_ADD( "cdrom" )
|
||||||
#endif
|
#endif
|
||||||
@ -8556,6 +8615,10 @@ MACHINE_CONFIG_DERIVED( genesis_32x_scd, genesis_32x )
|
|||||||
MDRV_SOUND_ROUTE( 0, "lspeaker", 1.00 )
|
MDRV_SOUND_ROUTE( 0, "lspeaker", 1.00 )
|
||||||
MDRV_SOUND_ROUTE( 1, "rspeaker", 1.00 )
|
MDRV_SOUND_ROUTE( 1, "rspeaker", 1.00 )
|
||||||
|
|
||||||
|
MDRV_SOUND_ADD("rfsnd", RF5C68, SEGACD_CLOCK) // RF5C164
|
||||||
|
MDRV_SOUND_ROUTE( 0, "lspeaker", 0.25 )
|
||||||
|
MDRV_SOUND_ROUTE( 1, "rspeaker", 0.25 )
|
||||||
|
|
||||||
#ifdef MESS
|
#ifdef MESS
|
||||||
MDRV_CDROM_ADD( "cdrom" )
|
MDRV_CDROM_ADD( "cdrom" )
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user