Homebrew Updates about nesDS...

  • Thread starter Thread starter huiminghao
  • Start date Start date
  • Views Views 283,512
  • Replies Replies 1,409
  • Likes Likes 15
Hi, just wanted to say many thanks for working on this emulator and for being so generous to take request.

I personally would like to see Pinbot working, it's completely unplayable with garbled graphics which is shame.

I's also love if you could possibly add a bilinear filter to the emulator, I find that there are no filter options to disguise the ugly scaling issues.

Also is it possible to make the sound louder at all?

Thank you so much, I love this emulator and playing NES on DS just feels so great!
 
Another Great update from Huimingao... Thanks
laugh.gif
 
cloudskipa said:
Also is it possible to make the sound louder at all?
This has been asked a few times and the answer is no.
The sound level is the sound level.



Well... Yay FDS support!
Boo being late to the party lol.
 
<!--quoteo(post=3551220:date=Mar 28 2011, 09:52 AM:name=twiztidsinz)--><div class='quotetop'>QUOTE(twiztidsinz @ Mar 28 2011, 09:52 AM) <a href="index.php?act=findpost&pid=3551220"><{POST_SNAPBACK}></a></div><div class='quotemain'><!--quotec--><!--quoteo(post=3550985:date=Mar 28 2011, 08:07 AM:name=cloudskipa)--><div class='quotetop'>QUOTE(cloudskipa @ Mar 28 2011, 08:07 AM) <a href="index.php?act=findpost&pid=3550985"><{POST_SNAPBACK}></a></div><div class='quotemain'><!--quotec-->Also is it possible to make the sound louder at all?<!--QuoteEnd--></div><!--QuoteEEnd-->This has been asked a few times and the answer is no.
The sound level is the sound level.




<!--sizeo:5--><span style="font-size:18pt;line-height:100%"><!--/sizeo--><b>PURE SPECULATION</b><!--sizec--></span><!--/sizec-->
<!--sizeo:3--><span style="font-size:12pt;line-height:100%"><!--/sizeo-->FDS Support coming to nesDS? Possibly!<!--sizec--></span><!--/sizec-->

I updated my svn, and I noticed a new file... "\arm9\source\mappers\map20.s"
Ran the Make command and got an error: "Error: file not found: diskbios.bin"
A quick google search for "<a href="http://www.google.com/search?q=nes+mapper+20" target="_blank">nes mapper 20</a>" leads me to <a href="http://www.zophar.net/wwwthreads/showflat.php?Cat=&Board=general&Number=290005&page=5&view=expanded&sb=5&o=0" target="_blank">this post</a>:<!--quoteo--><div class='quotetop'>QUOTE</div><div class='quotemain'><!--quotec-->In reply to:
--------------------------------------------------------------------------------
One single question. Is there any NES emulator that supports mapper 20?
--------------------------------------------------------------------------------

*checks iNES header checker info*

"20 - FDS"<!--QuoteEnd--></div><!--QuoteEEnd-->


Only problem is, the FDS disk image is "Disksys.rom", not "diskbios.bin", so it's possible that this is a custom file?
<!--QuoteEnd--></div><!--QuoteEEnd-->

Maybe the source of VirtuaNes can help, I saw a file called FDS in the directory Mapper, in NES, and int it mentions a "GetDISKBIOS()"...

<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'>//////////////////////////////////////////////////////////////////////////
// Mapper020 Nintendo Disk System(FDS) //
//////////////////////////////////////////////////////////////////////////
void Mapper020::Reset()
{
irq_type = 0;

irq_enable = irq_repeat = 0;
irq_counter = irq_latch = 0;
irq_occur = 0;
irq_transfer = 0;

disk_enable = 0xFF;
sound_enable = 0xFF;

block_point = 0;
block_mode = 0;
RW_start = 0xFF;
size_file_data = 0;
file_amount = 0;
point = 0;
first_access = 0;

disk_eject = 0xFF;
drive_ready = 0;

disk_side = 0xFF; // Eject
disk = disk_w = NULL;

// Mechanical sound
sound_startup_flag = 0xFF;
sound_startup_timer = -1; // stop
sound_seekend_timer = -1; // stop
MechanicalSound( MECHANICAL_SOUND_ALLSTOP );

// ::memset( DRAM, 0xFF, sizeof(DRAM) );
SetPROM_Bank( 3, DRAM+0x0000, BANKTYPE_DRAM );
SetPROM_Bank( 4, DRAM+0x2000, BANKTYPE_DRAM );
SetPROM_Bank( 5, DRAM+0x4000, BANKTYPE_DRAM );
SetPROM_Bank( 6, DRAM+0x6000, BANKTYPE_DRAM );
SetPROM_Bank( 7, nes->rom->GetDISKBIOS(), BANKTYPE_ROM );
SetCRAM_8K_Bank( 0 );

// ƒfƒtƒHƒ‹ƒg
// nes->SetIrqType( NES::IRQ_HSYNC );

// ‹A‚Á‚Ä‚«‚½ƒ}ƒŠƒIƒuƒ‰ƒU[ƒY
if( nes->rom->GetMakerID() == 0x01 && nes->rom->GetGameID() == 0x4b4d4152 ) {
nes->SetRenderMethod( NES::PRE_ALL_RENDER );
}

// ƒKƒ‹ƒtƒH[ƒX
if( nes->rom->GetMakerID() == 0xB6 && nes->rom->GetGameID() == 0x47414C20 ) {
nes->SetRenderMethod( NES::PRE_ALL_RENDER );
}
// ƒtƒ@ƒCƒA[ƒoƒ€
if( nes->rom->GetMakerID() == 0xB6 && nes->rom->GetGameID() == 0x46424D20 ) {
nes->SetRenderMethod( NES::PRE_ALL_RENDER );
}
// ‚R‚cƒzƒbƒgƒ‰ƒŠ[
if( nes->rom->GetMakerID() == 0x01 && nes->rom->GetGameID() == 0x54445245 ) {
nes->SetRenderMethod( NES::PRE_ALL_RENDER );
irq_type = 1; // ƒCƒ“ƒ`ƒL
}
// ƒ^ƒCƒ€ƒcƒCƒXƒg
if( nes->rom->GetMakerID() == 0x01 && nes->rom->GetGameID() == 0x54540120 ) {
nes->SetRenderMethod( NES::PRE_ALL_RENDER );
}
// ƒoƒCƒIƒ~ƒ‰ƒNƒ‹‚Ú‚­‚Á‚ăEƒp
if( nes->rom->GetMakerID() == 0xA4 && nes->rom->GetGameID() == 0x424F4B20 ) {
nes->SetRenderMethod( NES::PRE_ALL_RENDER );
}
// ƒpƒbƒgƒpƒbƒgƒSƒ‹ƒt
if( nes->rom->GetMakerID() == 0x99 && nes->rom->GetGameID() == 0x50504720 ) {
irq_type = 99;
}

// ƒpƒ`‚à‚ñ
if( nes->rom->GetMakerID() == 0x00 && nes->rom->GetGameID() == 0x00000000 ) {
::memset( RAM+0x100, 0xFF, 0x100 );
}

DEBUGOUT( "MAKER ID=%02X\n", nes->rom->GetMakerID() );
DEBUGOUT( "GAME ID=%08X\n", nes->rom->GetGameID() );

nes->apu->SelectExSound( 4 );

// ExCmdWrite( EXCMDWR_DISKINSERT, 0 );
// Disk 0, Side A‚ðƒZƒbƒg
disk = nes->rom->GetPROM()+16+65500*0;
disk_w = nes->rom->GetDISK()+16+65500*0;

disk_side = 0;
disk_eject = 0xFF;
drive_ready = 0;
disk_mount_count = 119;

nes->Command( NES::NESCMD_DISK_THROTTLE_OFF );

bDiskThrottle = FALSE;
DiskThrottleTime = 0;
}

BYTE Mapper020::ExRead( WORD addr )
{
BYTE data = addr>>8;

switch( addr ) {
case 0x4030: // Disk I/O status
data = 0x80;
data |= (irq_occur && !irq_transfer)?0x01:0x00;
data |= (irq_occur && irq_transfer)?0x02:0x00;
irq_occur = 0;

// Clear Timer IRQ
nes->cpu->ClrIRQ( IRQ_MAPPER );
// Clear Disk IRQ
nes->cpu->ClrIRQ( IRQ_MAPPER2 );
break;
case 0x4031: // Disk data read
if( !RW_mode )
return 0xFF;

first_access = 0;

if( disk ) {
switch( block_mode ) {
case BLOCK_VOLUME_LABEL:
data = disk[block_point];
if( block_point < SIZE_VOLUME_LABEL ) {
block_point++;
} else {
data = 0;
}
return data;
case BLOCK_FILE_AMOUNT:
data = disk[ block_point + point ];
if( block_point < SIZE_FILE_AMOUNT ) {
block_point++;
file_amount = data;
} else {
data = 0;
}
return data;
case BLOCK_FILE_HEADER:
data = disk[ block_point + point ];
if( block_point == 13 )
size_file_data = data;
else if( block_point == 14 )
size_file_data += ((INT)data<<8);

if( block_point < SIZE_FILE_HEADER ) {
block_point++;
} else {
data = 0;
}
return data;
case BLOCK_FILE_DATA:
data = disk[ block_point + point ];
if( block_point < size_file_data + 1 ) {
block_point++;
} else {
data = 0;
}
return data;
}
} else {
return 0xFF;
}
break;
case 0x4032: // Disk status
data = 0x40;
data |= disk_eject?0x01:0x00;
data |= disk_eject?0x04:0x00;
data |= (!disk_eject && disk_motor_mode && !drive_reset)?0x00:0x02;
break;
case 0x4033: // External connector data/Battery sense
data = 0x80;
break;
default:
if( addr >= 0x4040 )
data = nes->apu->ExRead( addr );
break;
}

//if( addr >= 0x4030 && addr <= 0x4033 ){
//DEBUGOUT( "R %04X %02X\n", addr, data );
//}
return data;
}

void Mapper020::ExWrite( WORD addr, BYTE data )
{
//DEBUGOUT( "W %04X %02X C:%d\n", addr, data, nes->cpu->GetTotalCycles() );
switch( addr ) {
case 0x4020: // IRQ latch low
irq_latch = (irq_latch&0xFF00)|data;
break;
case 0x4021: // IRQ latch high
irq_latch = (irq_latch&0x00FF)|((WORD)data<<8);
break;
case 0x4022: // IRQ control
irq_repeat = data & 0x01;
irq_enable = (data & 0x02) && (disk_enable);
irq_occur = 0;
if( irq_enable ) {
irq_counter = irq_latch;
} else {
// Clear Timer IRQ
nes->cpu->ClrIRQ( IRQ_MAPPER );
}
break;

case 0x4023: // 2C33 control
disk_enable = data & 0x01;
if( !disk_enable ) {
irq_enable = 0;
irq_occur = 0;
// Clear Timer IRQ
nes->cpu->ClrIRQ( IRQ_MAPPER );
// Clear Disk IRQ
nes->cpu->ClrIRQ( IRQ_MAPPER2 );
}
break;

case 0x4024: // Data write
// Clear Disk IRQ
nes->cpu->ClrIRQ( IRQ_MAPPER2 );

if( RW_mode )
break;

if( first_access ) {
first_access = 0;
break;
}

if( disk ) {
switch( block_mode ) {
case BLOCK_VOLUME_LABEL:
if( block_point < SIZE_VOLUME_LABEL-1 ) {
disk[ block_point ] = data;
disk_w[ block_point ] = 0xFF;
block_point++;
}
break;
case BLOCK_FILE_AMOUNT:
if( block_point < SIZE_FILE_AMOUNT ) {
disk[ block_point + point ] = data;
disk_w[ block_point + point ] = 0xFF;
block_point++;
}
break;
case BLOCK_FILE_HEADER:
if( block_point < SIZE_FILE_HEADER ) {
disk[ block_point + point ] = data;
disk_w[ block_point + point ] = 0xFF;
if( block_point == 13 )
size_file_data = data;
else if( block_point == 14 )
size_file_data |= data << 8;
block_point++;
}
break;
case BLOCK_FILE_DATA:
if( block_point < size_file_data+1 ) {
disk[ block_point + point ] = data;
disk_w[ block_point + point ] = 0xFF;
block_point++;
}
break;
}
}
break;

case 0x4025: // Disk I/O control
// Š„‚螂ݓ]‘—
irq_transfer = data & 0x80;
if( !irq_transfer ) {
nes->cpu->ClrIRQ( IRQ_MAPPER2 );
}

if( !RW_start && (data & 0x40) ) {
block_point = 0;
switch( block_mode ) {
case BLOCK_READY:
block_mode = BLOCK_VOLUME_LABEL;
point = 0;
break;
case BLOCK_VOLUME_LABEL:
block_mode = BLOCK_FILE_AMOUNT;
point += SIZE_VOLUME_LABEL;
break;
case BLOCK_FILE_AMOUNT:
block_mode = BLOCK_FILE_HEADER;
point += SIZE_FILE_AMOUNT;
break;
case BLOCK_FILE_HEADER:
block_mode = BLOCK_FILE_DATA;
point += SIZE_FILE_HEADER;
break;
case BLOCK_FILE_DATA:
block_mode = BLOCK_FILE_HEADER;
point += size_file_data+1;
break;
}

// ʼn‚Ì‚P‰ñ–Ú‚Ì‘‚«ž‚݂𖳎‹‚·‚邽‚ß
first_access = 0xFF;
}

// “ǂݑ‚«ƒXƒ^[ƒg
RW_start = data & 0x40;

// “ǂݑ‚«ƒ‚[ƒh
RW_mode = data & 0x04;

// “ǂݑ‚«‚ÌƒŠƒZƒbƒg
if( data&0x02 ) {
point = 0;
block_point = 0;
block_mode = BLOCK_READY;
RW_start = 0xFF;
drive_reset = 0xFF;

sound_startup_flag = 0;
sound_startup_timer = -1; // stop
} else {
drive_reset = 0;

if( !sound_startup_flag ) {
MechanicalSound( MECHANICAL_SOUND_MOTOR_ON );
sound_startup_flag = 0xFF;
sound_startup_timer = 40;
sound_seekend_timer = 60*7;
}
}

// ƒfƒBƒXƒNƒ‚[ƒ^[‚̃Rƒ“ƒgƒ[ƒ‹
disk_motor_mode = data & 0x01;
if( !(data & 0x01) ) {
if( sound_seekend_timer >= 0 ) {
sound_seekend_timer = -1;
MechanicalSound( MECHANICAL_SOUND_MOTOR_OFF );
}
}

// Mirror
if( data&0x08 ) SetVRAM_Mirror( VRAM_HMIRROR );
else SetVRAM_Mirror( VRAM_VMIRROR );
break;

case 0x4026: // External connector output/Battery sense
break;
default:
if( addr >= 0x4040 )
nes->apu->ExWrite( addr, data );
break;
}
}

void Mapper020::WriteLow( WORD addr, BYTE data )
{
DRAM[addr-0x6000] = data;
}

void Mapper020::Write( WORD addr, BYTE data )
{
if( addr < 0xE000 ) {
DRAM[addr-0x6000] = data;
}
}

void Mapper020::Clock( INT cycles )
{
// Timer IRQ
if( irq_enable ) {
if( !irq_type ) {
irq_counter -= cycles;
}
if( irq_counter <= 0 ) {
//// irq_counter &= 0xFFFF;
irq_counter += irq_latch;

if( !irq_occur ) {
irq_occur = 0xFF;
if( !irq_repeat ) {
irq_enable = 0;
}
if( irq_type != 99 ) {
nes->cpu->SetIRQ( IRQ_MAPPER );
} else {
nes->cpu->SetIRQ( IRQ_TRIGGER2 );
}
}
}
if( irq_type ) {
irq_counter -= cycles;
}
}
}

void Mapper020::HSync( INT scanline )
{
// Disk IRQ
if( irq_transfer ) {
nes->cpu->SetIRQ( IRQ_MAPPER2 );
}
}

void Mapper020::VSync()
{
if( disk && disk_eject ) {
if( disk_mount_count > 120 ) {
disk_eject = 0;
} else {
disk_mount_count++;
}
}

// if( disk && (disk_mount_count > 120) ) {
if( disk ) {
if( sound_startup_timer > 0 ) {
sound_startup_timer--;
} else if( sound_startup_timer == 0 ) {
sound_startup_timer--;
MechanicalSound( MECHANICAL_SOUND_BOOT );
}

if( sound_seekend_timer > 0 ) {
sound_seekend_timer--;
} else if( sound_seekend_timer == 0 ) {
sound_seekend_timer--;
MechanicalSound( MECHANICAL_SOUND_MOTOR_OFF );
MechanicalSound( MECHANICAL_SOUND_SEEKEND );
sound_startup_flag = 0;
}
}

if( irq_transfer || (disk && disk_mount_count < 120) ) {
if( DiskThrottleTime > 2 ) {
bDiskThrottle = TRUE;
} else {
bDiskThrottle = FALSE;
DiskThrottleTime++;
}
} else {
DiskThrottleTime = 0;
bDiskThrottle = FALSE;
}
if( !bDiskThrottle ) {
nes->Command( NES::NESCMD_DISK_THROTTLE_OFF );
} else {
nes->Command( NES::NESCMD_DISK_THROTTLE_ON );
}
}

BYTE Mapper020::ExCmdRead( EXCMDRD cmd )
{
BYTE data = 0x00;

if( cmd == EXCMDRD_DISKACCESS ) {
if( irq_transfer )
return 0xFF;
}

return data;
}

void Mapper020::ExCmdWrite( EXCMDWR cmd, BYTE data )
{
switch( cmd ) {
case EXCMDWR_NONE:
break;
case EXCMDWR_DISKINSERT:
disk = nes->rom->GetPROM()+16+65500*data;
disk_w = nes->rom->GetDISK()+16+65500*data;
disk_side = data;
disk_eject = 0xFF;
drive_ready = 0;
disk_mount_count = 0;
break;
case EXCMDWR_DISKEJECT:
disk = NULL; // ‚Ƃ肠‚¦‚¸
disk_w = NULL;
disk_side = 0xFF;
disk_eject = 0xFF;
drive_ready = 0;
disk_mount_count = 0;
break;
}
}

void Mapper020::MechanicalSound( INT type )
{
switch( type ) {
case MECHANICAL_SOUND_BOOT:
// Head start point CAM sound.
if( Config.sound.bExtraSoundEnable )
DirectSound.EsfPlay( ESF_DISKSYSTEM_BOOT );
break;
case MECHANICAL_SOUND_SEEKEND:
if( Config.sound.bExtraSoundEnable )
DirectSound.EsfPlay( ESF_DISKSYSTEM_SEEKEND );
// Reset or Seekend sound.
break;
case MECHANICAL_SOUND_MOTOR_ON:
if( Config.sound.bExtraSoundEnable )
DirectSound.EsfPlayLoop( ESF_DISKSYSTEM_MOTOR );
// Start Motor sound.(loop)
break;
case MECHANICAL_SOUND_MOTOR_OFF:
DirectSound.EsfStop( ESF_DISKSYSTEM_MOTOR );
// Stop Motor sound.(loop)
break;
case MECHANICAL_SOUND_ALLSTOP:
// Stop sound.
DirectSound.EsfAllStop();
break;
default:
break;
}
}

void Mapper020::SaveState( LPBYTE p )
{
p[0] = irq_enable;
p[1] = irq_repeat;
p[2] = irq_occur;
p[3] = irq_transfer;

*(INT*)&p[4] = irq_counter;
*(INT*)&p[8] = irq_latch;

p[12] = disk_enable;
p[13] = sound_enable;
p[14] = RW_start;
p[15] = RW_mode;
p[16] = disk_motor_mode;
p[17] = disk_eject;
p[18] = drive_ready;
p[19] = drive_reset;

*(INT*)&p[20] = block_point;
*(INT*)&p[24] = block_mode;
*(INT*)&p[28] = size_file_data;
*(INT*)&p[32] = file_amount;
*(INT*)&p[36] = point;

p[40] = first_access;
p[41] = disk_side;
p[42] = disk_mount_count;

p[44] = sound_startup_flag;
*(INT*)&p[48] = sound_startup_timer;
*(INT*)&p[52] = sound_seekend_timer;
}

void Mapper020::LoadState( LPBYTE p )
{
irq_enable = p[0];
irq_repeat = p[1];
irq_occur = p[2];
irq_transfer = p[3];

irq_counter = *(INT*)&p[4];
irq_latch = *(INT*)&p[8];

disk_enable = p[12];
sound_enable = p[13];
RW_start = p[14];
RW_mode = p[15];
disk_motor_mode = p[16];
disk_eject = p[17];
drive_ready = p[18];
drive_reset = p[19];

block_point = *(INT*)&p[20];
block_mode = *(INT*)&p[24];
size_file_data = *(INT*)&p[28];
file_amount = *(INT*)&p[32];
point = *(INT*)&p[36];

first_access = p[40];
disk_side = p[41];
disk_mount_count= p[42];

sound_startup_flag = p[44];
sound_startup_timer = *(INT*)&p[48];
sound_seekend_timer = *(INT*)&p[52];

if( disk_side != 0xFF ) {
disk = nes->rom->GetPROM()+sizeof(NESHEADER)+65500*disk_side;
disk_w = nes->rom->GetDISK()+sizeof(NESHEADER)+65500*disk_side;
} else {
disk = NULL;
disk_w = NULL;
}

// DiskBios Setup(ƒXƒe[ƒg‚Åã‘‚«‚³‚ê‚Ä‚¢‚éˆ×)
SetPROM_Bank( 7, nes->rom->GetDISKBIOS(), BANKTYPE_ROM );
}
</div>

Oh! I forgot: <img src="style_emoticons/<#EMO_DIR#>/yaynds.gif" style="vertical-align:middle" emoid=":yaynds:" border="0" alt="yaynds.gif" />

Special Thanks to Norix, creator of <a href="http://virtuanes.s1.xrea.com/" target="_blank">VirtuaNes</a>. <img src="style_emoticons/<#EMO_DIR#>/grog.gif" style="vertical-align:middle" emoid=":grog:" border="0" alt="grog.gif" />
 
The log message from the latest commit:

QUOTE said:
Just for a backup. FDS in on the way...

Cool. It will be nice if some time down the line the DS mic is enabled for FDS features like haggling in Kid Icarus and killing the big-eared baddies in Legend of Zelda.
 
twiztidsinz said:
kineticUK said:
I've got one issue with the current versions which I just wanted to ask here about (in the hope that it can be fixed). Currently using 046 version.

When I load any game, at first it doesnt display the game correctly and there are small parts of the image missing. It kinda looks like a certain few scanlines in the display are missing, very hard to explain but easier to see problem when you look at it. Display is almost perfect though so doesnt look too bad (some might just think its normal and just caused by the scaling).

If I go to the settings and just change that display option (the flicker/alerp thing) from the default setting to another eg "flicker", nesds then corrects the display and its perfect. I then set that option back to the default. No more problem display, but I have to do this after loading each game.

I hope this is readable.
Thanks.
It's in the INI file:CODE;0=flicker 1=noflicker 2=alphalerp
Blend=0
Default is 1.
No thats not what I meant but thanks for replying.
I have to "touch" that option before the game will display correctly. The graphics always look like small parts are missing after a rom is first loaded. I have to adjust that setting once after loading a game and change it from default to any other option (then the missing parts re-appear) and then back to its original setting (now it looks perfectly fine no missing pixels, lines or whatever). Say for example .ini default is flicker, when I load a game it doesnt look as it should, but if I quickly switch it to noflicker (fixed) then back to flicker (stays fixed), then it clears up the problem and i now have my original default setting but no more problem missing pixel/scanlines.
I need to get some photos to illustrate what I mean, pretty sure I read someone else mention same thing earlier in this thread I'll also see if I can find that post. I thought it was a not very obvious bug.
 
kineticUK said:
When I load any game, at first it doesnt display the game correctly and there are small parts of the image missing. It kinda looks like a certain few scanlines in the display are missing, very hard to explain but easier to see problem when you look at it. Display isI have to "touch" that option before the game will display correctly. The graphics always look like small parts are missing after a rom is first loaded. I have to adjust that setting once after loading a game and change it from default to any other option (then the missing parts re-appear) and then back to its original setting (now it looks perfectly fine no missing pixels, lines or whatever). Say for example .ini default is flicker, when I load a game it doesnt look as it should, but if I quickly switch it to noflicker (fixed) then back to flicker (stays fixed), then it clears up the problem and i now have my original default setting but no more problem missing pixel/scanlines.

Though it seems unlikely that it would occur frequently enough to give the impression you describe, perhaps you are inadvertently adjusting the scale of the screen. I've had that happen to me a few times, as the area to adjust seems to extend throughout the touch screen, and it's pretty sensitive.
 
If you do manage to add FDS support, you will be awesome forever.
FDS support + DPCM sound = win.
 
Sir_Voe said:
kineticUK said:
When I load any game, at first it doesnt display the game correctly and there are small parts of the image missing. It kinda looks like a certain few scanlines in the display are missing, very hard to explain but easier to see problem when you look at it. Display isI have to "touch" that option before the game will display correctly. The graphics always look like small parts are missing after a rom is first loaded. I have to adjust that setting once after loading a game and change it from default to any other option (then the missing parts re-appear) and then back to its original setting (now it looks perfectly fine no missing pixels, lines or whatever). Say for example .ini default is flicker, when I load a game it doesnt look as it should, but if I quickly switch it to noflicker (fixed) then back to flicker (stays fixed), then it clears up the problem and i now have my original default setting but no more problem missing pixel/scanlines.

Though it seems unlikely that it would occur frequently enough to give the impression you describe, perhaps you are inadvertently adjusting the scale of the screen. I've had that happen to me a few times, as the area to adjust seems to extend throughout the touch screen, and it's pretty sensitive.
Agree... I think this is an issue where you're unscaling the display just enough to get it to look right without loosing too much screen.
 
twiztidsinz said:
cloudskipa said:
Also is it possible to make the sound louder at all?
This has been asked a few times and the answer is no.
The sound level is the sound level.
Well... Yay FDS support!
Boo being late to the party lol.
E... I just enhanced the sound thing. Now the max volume is twice as former. nesDS used two sound channel to render the NES'sound. Now it uses 6 channels. so the volume could be larger... If 10 channels are used, the max volume could be 4 or even 8 times... But arm7 of NDS wont be able to handle that, because of lack of speed...
Maybe later the PCM sound can be rendered..

I have not done the FDS thing... Yes, the codes are ported form 'Virtuanes'. There are also lots of other codes ported from 'Virtuanes', e.g. mapper4's patch, mapper163(from Virtuanesex, made by a Chinese)... I have to change them to fit NDS...
 
If you are still interested in bootstub, test
http://www.mediafire.com/file/cc4tunwxhkyfkyo/nesds046a1.7z
Again,
1. copy hbmenu to /boot.nds
2. launch boot.nds from Primary Kernel
3. launch nesDS
4. just press L+R+START+SELECT in emulation

Without your test, I might have to remove softreset from current nesDS (which actually isn't working at all)
I mean forcing to poweroff even when it is loaded from hbmenu (which will be against WinterMute).

----
As for FDS, actually nesterDS+ already support it, but unfortunately its source is not open.
 
huiminghao said:
E... I just enhanced the sound thing. Now the max volume is twice as former. nesDS used two sound channel to render the NES'sound. Now it uses 6 channels. so the volume could be larger... If 10 channels are used, the max volume could be 4 or even 8 times... But arm7 of NDS wont be able to handle that, because of lack of speed...
Maybe later the PCM sound can be rendered..
YES. Thank you! You're amazing.
*seal of approval*
So I guess everyone's waiting for the FDS update now.

(also, I'm still occasionally having the sound issues that people were getting earlier)
 
avenir said:
If you are still interested in bootstub, test
http://www.mediafire.com/file/cc4tunwxhkyfkyo/nesds046a1.7z
Again,
1. copy hbmenu to /boot.nds
2. launch boot.nds from Primary Kernel
3. launch nesDS
4. just press L+R+START+SELECT in emulation

Without your test, I might have to remove softreset from current nesDS (which actually isn't working at all)
I mean forcing to poweroff even when it is loaded from hbmenu (which will be against WinterMute).

----
As for FDS, actually nesterDS+ already support it, but unfortunately its source is not open.AceKard2i with AKAIO 1.8.6a, I get a Guru Meditation Error when launching the provided nesDS through hbmenu 0.2.0.
CODEÂÂ Guru Meditation Error!
ÂÂÂÂÂÂÂÂdata abort!

pc: 2020201cÂÂaddr: 2020201c
r0: 00000001ÂÂÂÂr8 : FFFFFA04
r1: 00000E90ÂÂÂÂr9 : 0203AFCC
r2: 00000000ÂÂÂÂr10: 0203AFDC
r3: 53475052ÂÂÂÂr11: 0203AFE8
r4: 0203AFCCÂÂÂÂr12: 04100010
r5: 00000000ÂÂÂÂsp : 0B003468
r6: 02013FE0ÂÂÂÂlr : 020140E9
r7: 00000010ÂÂÂÂpc : 20202024

0B003468:ÂÂ 000081B6 00010001
0B003470:ÂÂ 00000002 00000008
0B003478:ÂÂ 0203AFDC 0203AFE8
0B003480:ÂÂ 0203AFCC 00000000
0B003488:ÂÂ 00000010 0200FBB3
0B003490:ÂÂ 00000008 00000200
0B003498:ÂÂ 00000233 00000001
0B0034A0:ÂÂ 00000000 0B0034B4
0B0034A8:ÂÂ 00000000 0B0034D0
0B0034B0:ÂÂ 0B003CD8 0B003CDC
 
OK I did further test using my AK2i.

If (using RPGS_Acekard AK2 v3.dldi && loaded from hbmenu), Guru Meditation Error occurs.
Actually I had issues with YSMenu on RPGS_Acekard AK2 v2.dldi before, so perhaps some issues remains...
Replacing /__aio/ak2_sd.dldi with Acekard2 4.23 dldi will fix the problem.
Or in this test you can safely use (your favorite filer)
 
avenir said:
OK I did further test using my AK2i.

If (using RPGS_Acekard AK2 v3.dldi && loaded from hbmenu), Guru Meditation Error occurs.
Actually I had issues with YSMenu on RPGS_Acekard AK2 v2.dldi before, so perhaps some issues remains...
Replacing /__aio/ak2_sd.dldi with Acekard2 4.23 dldi will fix the problem.
Or in this test you can safely use (your favorite filer)
Done. It's working now.

When run from HBMenu, L+R+START+SELECT = Reset to HBMenu.
When run from XenoFile, L+R+START+SELECT = DS powers off.
When run from AKAIO, L+R+START+SELECT = DS powers off.
 
OK, seeing my/twiztidsinz's/huiminghao's result, it seems to be safe to merge my patch to svn
yaynds.gif
Thank you so much.
 
huiminghao said:
New version released. FDS supported~I just get a black screen when loading FDS games.

Hao-kun no Fushigi na Tabi (J).fds
Zelda no Densetsu - The Hyrule Fantasy (Japan) (v1.0).fds
Zelda no Densetsu - The Hyrule Fantasy (Japan) (v1.1).fds
scratch that... found my problem.


FDS games must start with:CODEFDS..............*NINTENDO-HVC*
 
twiztidsinz said:
huiminghao said:
New version released. FDS supported~
I just get a black screen when loading FDS games.

Hao-kun no Fushigi na Tabi (J).fds
Zelda no Densetsu - The Hyrule Fantasy (Japan) (v1.0).fds
Zelda no Densetsu - The Hyrule Fantasy (Japan) (v1.1).fds
These games may need a patch, I will check that...
 

Site & Scene News

Popular threads in this forum