#29564 - ScottLininger - Mon Nov 22, 2004 12:12 am
Hey kids,
Got my DS this afternoon. Whoohoo! Here are my observations about the differences between it and the SP, so far:
1. Top screen subpixels are RGB not BGR
This is weird. The subpixels on the SP LCD are GBR (green,blue,red). The touch screen on the DS is still GBR, but the TOP screen is RGB.
This really doesn't affect much unless you're playing with subpixel rendered fonts or a high-colordepth engine that takes advantage of subpixels (which I've never seen in any current GB game, but has potential with the DS's faster processor.) If you're a DS developer and want to use subpixels, you'll have an extra layer of processing to use the same assets on both screens.
Here's a small demo you can run to see what I mean. The displayed text that is MUCH clearer on hardware when the subpixel order matches.
Swap the screen that the demo is running in and you'll see a marked difference...
2. The Gamma levels are way brighter on the DS
Load up the same screen on both your SP and your DS. The DS is a lot brighter and more vibrant, which is GREAT from a player's perspective. From a developer's perspective, it means that giving the player the option to change their brightness is even more important.
Hopefully, someone will discover a way to detect at runtime if you're on the DS so you can adjust the gamma automatically.
3. The DS is easier to hold
There have always been complaints from adults about the size of the SP, especially for games that make use of the shoulder buttons. The DS is much more comfortable to hold, in my opinion. (Though the tiny stylus still makes for cramped fingers... Hopefully someone will release a larger stylus for larger hands. Until then, I think I'll tape mine to a chopstick ;)
-Scott
#29570 - Abscissa - Mon Nov 22, 2004 2:15 am
ScottLininger wrote: |
3. The DS is easier to hold
There have always been complaints from adults about the size of the SP, especially for games that make use of the shoulder buttons. The DS is much more comfortable to hold, in my opinion. |
THANK GOD!!! My GBA isn't the SP, but playing Metroid Fusion, in particular, was an excruciatingly painful ordeal. And I mean painful as in literally, not just from all of the "Here's what you do next..." stuff ;). I've entirely stopped using my GBA for anything but flash carts, in favor of the GBA Player. In part because of the bigger screen, but also because it doesn't hurt my hands (as much).
#29578 - ScottLininger - Mon Nov 22, 2004 4:42 am
I just attached one of my styluses (styli?) to a nicely-padded plastic pen handle. And, oy, much more comfortable. Allowed me to double my high score on the Metroid demo.
Has anyone seen the "thumb nub" accessory in a store? I was told they they DO exist, but I couldn't find one.
-Scott
#29581 - rooter - Mon Nov 22, 2004 4:53 am
ScottLininger wrote: |
I just attached one of my styluses (styli?) to a nicely-padded plastic pen handle. And, oy, much more comfortable. Allowed me to double my high score on the Metroid demo.
Has anyone seen the "thumb nub" accessory in a store? I was told they they DO exist, but I couldn't find one.
-Scott |
the thumb nub comes with the system ;) its on the end of the wrist strap.
#29583 - DekuTree64 - Mon Nov 22, 2004 5:01 am
Did yours not have a wrist strap at all? The thumb-nub is hard to spot but it's there. Just a little square bump of plastic on the end of the strap. Mario is much easier with it. Metroid works best with the pen though, I think.
_________________
___________
The best optimization is to do nothing at all.
Therefore a fully optimized program doesn't exist.
-Deku
#29585 - ScottLininger - Mon Nov 22, 2004 5:22 am
rooter wrote: |
the thumb nub comes with the system ;) its on the end of the wrist strap. |
Well I'll be a monkey's uncle... It's like when I leave a $20 bill in my jacket and don't discover it for months. Free stuff!
;)
Next time maybe I'll read the manual...
-Scott
#29591 - allenu - Mon Nov 22, 2004 6:16 am
Hey, the thing has a standard headphone jack as well! I just tried it and it sounds great!
#29594 - dagamer34 - Mon Nov 22, 2004 7:26 am
The good thing is my Majecso GameBoy Advance SP headphones still work anyway!
_________________
Little kids and Playstation 2's don't mix. :(
#29604 - Krakken - Mon Nov 22, 2004 2:21 pm
ScottLininger wrote: |
Hopefully, someone will discover a way to detect at runtime if you're on the DS so you can adjust the gamma automatically. |
Seems there is. The GBA mode DS BIOS differs by one bit at the end. We can use this to detect the system and adjust automatically! Happy days!
http://zerohaven.com/ds/wiki/index.php?title=Misc:Misc
#29607 - ScottLininger - Mon Nov 22, 2004 3:30 pm
Krakken wrote: |
Seems there is. The GBA mode DS BIOS differs by one bit at the end. We can use this to detect the system and adjust automatically! Happy days! |
That's awesome! Any chance you could mock up some C code to do the detection?
-Scott
#29616 - caitsith2 - Mon Nov 22, 2004 6:48 pm
A simple old MidiKey2Freq call pointing to that differing byte location is all thats really needed. It would be helpful if we knew exactly what byte of the bios that is, and what that byte contains on the DS compared to the GBA.
#29635 - Krakken - Tue Nov 23, 2004 12:47 am
Yeah it would. If I had my DS I could dump the BIOS and check myself. You'll have to ask Joat or if you have a flash cart, try this:
(catsith2's code from a while back)
Code: |
int i, j;
for (i=0;i<0x4000;i++)
{
j = MidiKey2Freq(i-(((i & 3)+1)| 3), 168, 0);
j = j * 2;
j = j >> 24;
//Code here to somehow transfer j over to your PC. How you do
// that transfer, depends on what kind of real hardware/pc
// development setup you have. One possibility, if you use just a
// flashcart, is to write j over into the sram, then dump that sram
// later.
}
|
#29668 - FluBBa - Tue Nov 23, 2004 4:42 pm
Has anyone used the calculatechecksum swi?
Quote: |
SWI 13 (0Dh) - GetBiosChecksum (Undocumented)
Calculates the checksum of the BIOS ROM (by reading in 32bit units, and adding up these values). The current BIOS version is having a checksum of BAAE187Fh. IRQ and FIQ are disabled during execution.
Parameters: None. Return: r0=Checksum. |
If that is all it takes to check for a DS?
_________________
I probably suck, my not is a programmer.
#29698 - Krakken - Wed Nov 24, 2004 1:05 am
FluBBa wrote: |
Has anyone used the calculatechecksum swi?
Quote: | SWI 13 (0Dh) - GetBiosChecksum (Undocumented)
Calculates the checksum of the BIOS ROM (by reading in 32bit units, and adding up these values). The current BIOS version is having a checksum of BAAE187Fh. IRQ and FIQ are disabled during execution.
Parameters: None. Return: r0=Checksum. |
If that is all it takes to check for a DS? |
Sure that should work too and seems an even easier method to use.
#29767 - FluBBa - Wed Nov 24, 2004 10:33 pm
It seems the GetBIOSChecksum swi crashes on the old (prototype) bios...
Can anyone test it out on the DS and see what the actual checksum is, or just which byte that is different?
_________________
I probably suck, my not is a programmer.
#29793 - ScottLininger - Thu Nov 25, 2004 4:59 am
FluBBa wrote: |
It seems the GetBIOSChecksum swi crashes on the old (prototype) bios...
Can anyone test it out on the DS and see what the actual checksum is, or just which byte that is different? |
If someone can send me some code for how to call an SWI from C, I'd be happy to. I've just never played with this before.
-Scott
#29836 - FluBBa - Thu Nov 25, 2004 7:33 pm
I'm probably not the one to say how to do this tuff as I don't use gcc...
but I found this in the C/C++ forum.
Code: |
s32 SWIDiv(s32 num, s32 denom) { asm("swi 0x60000"); } |
For calling the Div function.
_________________
I probably suck, my not is a programmer.
#29839 - [mRg] - Thu Nov 25, 2004 8:31 pm
I coded a quick little proggy to do the SWI and print the result ...
http://www.stephenpope.co.uk/gba/Checksum.zip
If anyone with a DS wants to try it they are very welcome let me know the result as Im still wating for my DS and Im be curious to see what the value is :P
Hope its useful anyway !
[mRg]
#29876 - Joat - Fri Nov 26, 2004 7:16 am
Code snippet:
Code: |
uint32 getChecksum(void) {
// Figure out what we're running on
uint32 result;
asm volatile("swi 0x0D\n"
"mov r0, %0\n"
: "=r"(result) : : "r1", "r2", "r3"
);
return result;
}
...
value = getChecksum();
if (value == 0xBAAE1880)
drawString(0, 19, "Nintendo DS detected");
else if (value == 0xBAAE187F)
drawString(0, 19, "Nintendo GBA detected");
else
drawString(0, 19, "Emulator detected");
|
Of course, an emulator with the original bios loaded will return the correct value for a GBA, but an emulator which is simulating the functions in C probably does not emulate this func at all, and either crashes or returns something invalid.
Forgive me if the inline asm is dodgy, I never use GCC's stupid mechanism, its much easier to just stuff it in a .s file.
Anyways, values were obtained from a real DS and a real GBA (original jpn model, but the SP bios is the same). The bit that is different (1 instead of 0), is at 0x3F0C, and is completly unused during any normal boot process, it is specifically and only there to be detected by a bios dump or get checksum call.[/code]
_________________
Joat
http://www.bottledlight.com
#29909 - FluBBa - Fri Nov 26, 2004 1:07 pm
Thank you for the help Joat, are you going to update Mappy also? =)
_________________
I probably suck, my not is a programmer.
#30050 - ScottLininger - Sat Nov 27, 2004 11:40 pm
Joat wrote: |
Code: |
uint32 getChecksum(void) {
// Figure out what we're running on
uint32 result;
asm volatile("swi 0x0D\n"
"mov r0, %0\n"
: "=r"(result) : : "r1", "r2", "r3"
);
return result;
}
...
value = getChecksum();
if (value == 0xBAAE1880)
drawString(0, 19, "Nintendo DS detected");
else if (value == 0xBAAE187F)
drawString(0, 19, "Nintendo GBA detected");
else
drawString(0, 19, "Emulator detected");
|
|
I just compiled and tested this and it WORKS! Thanks for the code, Joat.
That is perhaps the first piece of running homebrew code specifically targeting the DS hardware. Yeeha!
-Scott
#30062 - Roamin - Sun Nov 28, 2004 1:55 am
I have executed checksum.gba on both my gba SP and DS and here's the results:
GBA SP:
CHECKSUM:OK! (BAAE187F)
DS:
CHECKSUM: NOT GBA - BAAE188
Seems to work fine.
Roamin
Flash hardware used: F2A 256m
#30074 - mymateo - Sun Nov 28, 2004 2:59 am
Well, I'll be... I tested out both the RGB/BGR and the checksum, and wow you guys are smart. So I guess this means that, if you want a more true-to-life GBA experience on the DS, you should use the bottom screen. And the added bonus of combining these two efforts would be, I guess, detecting the DS, and asking the user which screen they're using so the programmer can switch the color order to clean up the graphics if need be! ... I need a girlfriend or a life, it's sad when I get excited over things like this... Anyways--
I noticed something else. I loaded up the BGR/RGB demo on my GBA, yanked out the card (I know, probably not the smartest thing but I don't have 2 flash cards) and loaded it up on the DS to compare them. When I looked really closely, it seems that the DS is a little cripser all around, so it's no surprise that the BGR looked crisper on the DS than the GBA, but for some reason, the RGB on the DS looked a little less readable, a little more blurry if you will.
Has anyone else noticed this, or am I seeing things??
#30088 - ScottLininger - Sun Nov 28, 2004 4:21 am
mymateo wrote: |
When I looked really closely, it seems that the DS is a little cripser all around, so it's no surprise that the BGR looked crisper on the DS than the GBA, but for some reason, the RGB on the DS looked a little less readable, a little more blurry if you will.
Has anyone else noticed this, or am I seeing things?? |
I think this is because of improved gamma on the DS. Essentially, blacks are more black and whites are more white, so the overall contrast is much better on the DS.
Plus, the physical pixels on the DS are *slightly* smaller. 240 pixels on the DS measure about 10mm smaller than on the SP... And anytime the pixels are smaller, the display will be more crisp.
So no, you're not seeing things. :)
-Scott
#30101 - mymateo - Sun Nov 28, 2004 6:35 am
Whew, that's good. For a while, I thought I was seeing double, too... (DS Joke)
#30388 - Joat - Tue Nov 30, 2004 9:27 pm
Flubba, I've actually fixed a lot of bugs and added some new features to Mappy, but I never seem to have the time to round things off (like fixing the last few sound problems, and the type inspector for sdb) and get a new release out. So I'll say eventually, probably.
_________________
Joat
http://www.bottledlight.com
#30857 - EaDS Milliways - Sun Dec 05, 2004 4:56 pm
ScottLininger wrote: |
If you're a DS developer and want to use subpixels, you'll have an extra layer of processing to use the same assets on both screens.
-Scott |
You can actually see this in "Feel the Magic." If I hadn't seen this here first, I might have thought something was wrong with my system! :)
#30862 - mymateo - Sun Dec 05, 2004 6:07 pm
Although I can see there's a difference, can someone briefly explain what exactly a subpixel is/how it works? (Fairly plain english would be nice for people like me who aren't uber-smart) Thanks
#30870 - tepples - Sun Dec 05, 2004 6:52 pm
All is explained in the first Google result for sub-pixel and the Wikipedia article on ClearType, which I mostly wrote.
_________________
-- Where is he?
-- Who?
-- You know, the human.
-- I think he moved to Tilwick.
#30904 - mymateo - Mon Dec 06, 2004 12:10 am
Ah, very informative... and easy to understand! It all makes perfect sense now, thank you!