|
ForumsSega Master System / Mark III / Game GearSG-1000 / SC-3000 / SF-7000 / OMV |
Home - Forums - Games - Scans - Maps - Cheats - Credits Music - Videos - Development - Hacks - Translations - Homebrew |
Goto page Previous 1, 2, 3, 4, 5 ... 15, 16, 17 Next |
Author | Message |
---|---|
|
Posted: Tue Apr 21, 2015 4:56 pm |
Can you do that with graphics/misc data in bank 2? I only used PSGLib as an example. :¬) | |
|
Posted: Wed Apr 22, 2015 6:36 am |
i'm changing banks on Gaudream for title screen, for game, for game over... | |
|
Posted: Sun Apr 26, 2015 11:52 pm |
How could this help us making ports from GG to SMS? Because the hardest part is:
About the SPRITES Let sprites to appear outside of the GG screen size and.. About the BACKGROUNDS They don't show themselves correctly because of two reasons 1.- The scroll vertical/horizontal gives priority to the GG screen size not the SMS's so we could see downside to upside and/or the rightside to leftside. 2.- The background refreshes outside the GG screen size not the SMS's |
|
|
Posted: Mon Apr 27, 2015 6:46 am |
Not at all? You want to patch games, adding in a C runtime isn't going to help. | |
|
Posted: Mon Apr 27, 2015 6:38 pm |
Cool. I can't wait for the source for this excellent little game to be released. :¬D |
|
|
Posted: Mon Apr 27, 2015 8:04 pm |
Ok, I need a bit of help. There's a bit of a problem with my custom print script.
void TPGG_print (void *src, unsigned char x, unsigned char y) {
//unsigned int k; unsigned int xt; unsigned int yt; xt = x; yt = y; //tt = T; //SMS_setNextTileatXY(x, y); //8 3 while (true) { //T=*src++; SMS_waitForVBlank(); SMS_enableLineInterrupt(); T = ((unsigned char*)src) + 1; if (T == 0x07) { k=SMS_getKeysPressed(); while (k != GG_KEY_START) { k=SMS_getKeysPressed(); SMS_waitForVBlank(); SMS_enableLineInterrupt(); } } else if (T == 0x0D) { yt++; xt=x; } else if (T == 0x1A) { break; } else { if (T > 0x1F) { SMS_setTileatXY(xt, yt, (T - 32)); xt++; } } } } ...and this error happens.
Thanks in advance. :¬) |
|
|
Posted: Mon Apr 27, 2015 8:44 pm |
unsigned int xt; unsigned int yt; xt = x; yt = y; xt and yt are int, but x and y ara chars :-) |
|
|
Posted: Mon Apr 27, 2015 9:50 pm |
The offending line 54 states:
T is defined in line 13 of test.c
So you are trying to indirect a pointer from an void * / unsigned char (8 bits) to an unsigned integer (16 bits), and also increase the pointer by 1. (pointer arithmetic with a void pointer is not allowed) I guess you actually want to dereference the pointer in order to assign the (8 bit) value pointed by the pointer to T (16 bits). So you have to change the void * src into unsigned char *src inside the declaration of TPGG_print the assignment x to xt and y to yt is permissable: xt and yt (16 bits) are wide enough to accommodate the 8 bits values of x and y. (implicit conversion through integral promotion) |
|
|
Posted: Tue May 05, 2015 8:24 am |
Yes, that's how it works. You could have a global variable to keep the value of the last bank you mapped to slot 2, save that value just before switching bank to the one where your song is stored, execute PSGFrame and restore the slot 2 mapping as it was before using the value you saved. I hope this helps :) |
|
|
Posted: Tue May 19, 2015 12:11 pm |
So, how are things going?
Camtronic16? kusfo? Anyone? Still using this or got bored? |
|
|
Posted: Tue May 19, 2015 12:28 pm |
I've been working in another project ("Antarex" for 1985Alternativo) since we are showing a playing demo this saturday. I'll resume my work in "Gaudream" next week (I already have changed quite a lot of things) :-D | |
|
Posted: Tue May 19, 2015 6:31 pm |
I'm not bored. I'm just waiting for a bank switching/anything-to-do-with-devkitsms tutorial. I also haven't been able to go on this as much lately as I'm currently doing some exams. I'm (hopefully) going to collage sooner or later! :¬) |
|
|
Posted: Tue May 19, 2015 7:39 pm |
yeah, still no tutorial apart from the github wiki...
Anyway bank switching isn't so complicated. You place some assets (tiles, tilemaps, PSG tunes, SFX, etc...) in separate files and name these files bank2.c, bank3.c etc... Then you have to compile everything together as explained in the "How to use more than 48KB in your ROM" section here. In your code, whenever you need to access one of these assets you should use the macro SMS_mapROMBank(n);
where n would of course be the number of the bank which contains the assets you need. If something isn't right clear let me know :) |
|
|
Posted: Tue May 19, 2015 9:00 pm |
Just a bunch of Gaudream's code using bankswitchin. As you can see, you do the bankswicthing just before using the resource:
#include <stdbool.h>
#include "SMSlib.h" #include "PSGlib.h" #include "bank2.h" #include "bank3.h" #include "bank4.h" #include "bank5.h" #include "bank6.h" #include "data.h" . . . . . unsigned int scrollX; unsigned int scrolly; bool gameover = false; bool lifelost = false; unsigned int currentVRAMPosTilemap; unsigned int currentVRAMPosSprites; . . . unsigned char currentRefreshTilemapColumn; unsigned int currentFrame; void init_console() { SMS_init(); SMS_VDPturnOnFeature(VDPFEATURE_HIDEFIRSTCOL); SMS_displayOn(); } void reset_variables() { currentVRAMPosTilemap = 0; . scrollX = 0; scrolly = 0; . . . chargingCounter = 0; SMS_initSprites(); SMS_finalizeSprites(); SMS_copySpritestoSAT(); SMS_setBGScrollX(0 - scrollX); SMS_loadSpritePalette(blackPalette); SMS_loadBGPalette(blackPalette); } void logo_inicial() { SMS_mapROMBank(4); SMS_loadTiles(Logo1985tiles_bin, currentVRAMPosTilemap, Logo1985tiles_bin_size); //tiles logo SMS_loadTileMap(0, 0, (unsigned int *) Logo1985tilemap_bin, Logo1985tilemap_bin_size); SMS_loadBGPalette(Logo1985palette_bin_step1); SMS_setBackdropColor(3); PSGPlay(logo1985_psg); while (currentFrame < (FADE_FRAME_COUNT * 9)) { . . . . PSGFrame(); SMS_waitForVBlank(); } PSGStop(); SMS_loadBGPalette(blackPalette); SMS_displayOff(); } void pantalla_principal() { . . SMS_mapROMBank(3); SMS_loadTiles(presentacionTiles_bin, currentVRAMPosTilemap, presentacionTiles_bin_size); //tiles logo SMS_loadTileMap(0, 0, (unsigned int *) presentacionTileMap_bin, presentacionTileMap_bin_size); SMS_loadBGPalette(presentacionPalette_bin); SMS_setBackdropColor(3); SMS_displayOn(); PSGPlay(title_psg); currentFrame = 0; while (1) { keyPressed = SMS_getKeysPressed(); if (keyPressed & PORT_A_KEY_1) { break; } PSGFrame(); currentFrame++; SMS_waitForVBlank(); } PSGStop(); PSGSFXPlay(start_psg,SFX_CHANNEL2); while (PSGSFXGetStatus() == PSG_PLAYING) { PSGSFXFrame(); SMS_waitForVBlank(); } PSGSFXStop(); . . SMS_loadBGPalette(presentacionPalette_bin_step1); . . } void fillFirstTilemap() { unsigned char i = 0; unsigned char j = 0; while (i < NUM_COLUMNS) { . . . i++; } } void init_level(){ currentFrame = 0; scrollX = 0; . . . fillFirstTilemap(); . . . } void pintar_sprites() { . . . SMS_copySpritestoSAT(); SMS_initSprites(); . . . SMS_finalizeSprites(); } void bucle_juego() { currentVRAMPosTilemap = 0; currentVRAMPosSprites = BASE_ADRESS_SPRITES; //cambiamos al map 4 SMS_mapROMBank(2); SMS_loadTiles(level1Tiles_bin, currentVRAMPosTilemap, level1Tiles_bin_size); //tiles nivel currentVRAMPosTilemap = currentVRAMPosTilemap + (level1Tiles_bin_size >> 5); SMS_loadBGPalette(level1Palette_bin); SMS_loadTiles(DragonTiles_bin, currentVRAMPosSprites, DragonTiles_bin_size); currentVRAMPosSprites = currentVRAMPosSprites + (DragonTiles_bin_size >> 5); SMS_loadTiles(VidaTiles_bin, currentVRAMPosSprites, VidaTiles_bin_size); . . SMS_loadTiles(MosaiquitoTiles_bin, currentVRAMPosSprites, MosaiquitoTiles_bin_size); . . SMS_loadTiles(font_bin, currentVRAMPosSprites,font_bin_size); . . SMS_displayOn(); SMS_mapROMBank(5); PSGPlay(ingame_psg); while (!gameover) { . . . . currentFrame++; PSGFrame(); if (PSGSFXGetStatus() == PSG_PLAYING) { PSGSFXFrame(); } else { PSGSFXStop(); } SMS_waitForVBlank(); pintar_sprites(); } } PSGStop(); PSGSFXStop(); } void game_over() { . . SMS_mapROMBank(6); SMS_setBGScrollX(0); SMS_loadTiles(gameoverTiles_bin, currentVRAMPosTilemap, gameoverTiles_bin_size); //tiles logo SMS_loadTileMap(0, 0, (unsigned int *) gameoverTilemap_bin, gameoverTilemap_bin_size); SMS_loadBGPalette(gameoverPalette_bin); SMS_setBackdropColor(3); SMS_initSprites(); SMS_finalizeSprites(); SMS_copySpritestoSAT(); PSGPlayNoRepeat(gover_psg); while (PSGGetStatus() == PSG_PLAYING) { PSGFrame(); SMS_waitForVBlank(); } } void main() { init_console(); while (1) { reset_variables(); logo_inicial(); pantalla_principal(); bucle_juego(); game_over(); } } SMS_EMBED_SEGA_ROM_HEADER(9999, 0); // code 9999 hopefully free, here this means 'homebrew' SMS_EMBED_SDSC_HEADER(0, 4, 2015, 4, 13, "1985Alternativo\\2015", "Gaudream", "Flappy Bird Clone for SMSPower Compo'15"); |
|
|
Posted: Wed May 20, 2015 8:13 am |
I guess the folder to bank converter could define macros for the bank number for each data chunk to make it a bit less fragile. | |
|
Posted: Wed May 20, 2015 8:37 am |
Cunning! :)
Yeah, I think I might add an optional third parameter so that -if specified- folder2c will also create a #define [assetname]_bank for each asset. This way you would also be able to move assets from a folder to another (so from a bank to a different one) without having to change your sources. |
|
|
Posted: Wed May 20, 2015 11:19 am |
Now it does what Maxim said :) | |
|
Posted: Wed May 20, 2015 8:18 pm |
Well I tried but I got a 'fatal' error.
....even though I followed the instructions on the GitHub page. :¬| Here's the .bat file I made. @echo off
echo Build data.c from data folder folder2c Assets Data 1 sdcc -c -mz80 --std-sdcc99 Data.c echo Build Main sdcc -c -mz80 --std-sdcc99 --constseg BANK2 Data.c sdcc -mz80 --std-sdcc99 --fomit-frame-pointer --data-loc 0xC000 -Wl-b_BANK2=0x8000 -DTARGET_GG Game.c SMSlib\SMSlib_GG.rel PSGlib\PSGlib.rel Data.rel ihx2sms Game.ihx Game.gg echo DONE! Converted to Portal.gg pause It compiles without any error until it gets to the IHX to SMS (or in this case GG) conversion. Please help if possible. Thanks in advance. :¬) |
|
|
Posted: Thu May 21, 2015 8:15 am |
I would say you're maybe putting more than 16KB in a single bank. folder2c output should tell you how many bytes are in the converted file.
Also, you're probably mixing things, since you're using '1' as a third parameter in folder2c call, and compiling the data as BANK2... Last, I suggest you remove '--fomit-frame-pointer' which is still not 100% perfectly working in SDCC and '-DTARGET_GG' which is useless when compiling your code. One last thing: make sure you're using latest ihx2sms, there was a nasty bug in it until March 30. (p.s. it's quite unusual to see a single additional BANK, are you sure 48KB ROM aren't enough? Or are you planning to add more banks as you proceed?) |
|
|
Posted: Wed Jun 03, 2015 8:47 am |
Did some of the suggestions actually helped?
edit: I just added void SMS_loadPSGaidencompressedTiles (void *src, unsigned int Tilefrom);
to load PSGaiden compressed tilesets. I wonder why nobody requested that feature before... |
|
|
Posted: Wed Jun 03, 2015 9:01 pm |
Not quite. I tried some of your fixes but then I get an error that's not helpful in the slightest.
without saying what file it was trying to access. >:¬( Just try compiling it using 'build.bat'! Any suggestions are welcome. :¬) |
|
|
Posted: Thu Jun 04, 2015 8:33 am |
OK, I could compile it changing your build.bat a bit.
Note that I compiled test.c separately, before the linking phase... there's still a bug within SDCC when compiling a source file and linking at the same time, so it's better compile every .c file separately and link in a final separate command. See this example batch file: folder2c 1Graphics graphics 2
folder2c 1Sound sound 3 folder2c 1Text text 4 sdcc -c -mz80 --std-sdcc99 --constseg BANK2 graphics.c sdcc -c -mz80 --std-sdcc99 --constseg BANK3 sound.c sdcc -c -mz80 --std-sdcc99 --constseg BANK4 text.c sdcc -c -mz80 --std-sdcc99 -DTARGET_GG test.c sdcc -mz80 --std-sdcc99 --data-loc 0xC000 -Wl-b_BANK2=0x8000 -Wl-b_BANK3=0x8000 -Wl-b_BANK4=0x8000 test.rel SMSlib\SMSlib_GG.rel PSGlib\PSGlib.rel Graphics.rel Sound.rel text.rel ihx2sms test.ihx test.gg note that you have to use -DTARGET_GG only when compiling your test.c, and in the linking phase you have to specify a -Wl-b_BANKn=0x8000 for each one of your additional banks. Finally, the order of the .rel in the call should have your program first, then the libraries and finally the other rel files in the order you need them. also, in your test.c file, at line 19, a semicolon is missing at the end of line. After that, it compiles fine :) |
|
|
Posted: Fri Jun 05, 2015 2:37 pm |
Ah, okay! I hadn't noticed that missing semi-colon while testing! :¬P Anyway, thanks for the new .bat file. It now works great and one of the only things I have to do now is sort the banks out. ----- Also, could someone help me with some scrolling please? I've been trying to use the Mappy tile editor found at http://tilemap.co.uk/mappy.php to create my level maps but I'm a bit of a noob when it comes to scrolling huge maps (or SMS/GG programming in general :¬P) Would it be possible to add in a couple of basic functions to help with this? Just functions that load up a map file and can scroll it around like this... //Just a basic example
SMS_mappyLoad(levelmap_map, 0, 0, 10); //Load the level map file at positions 0, 0 with the tiles starting at tile number 10 (so if the tile number in the map file is 3, it displays tile number 13) while(true) { scrollx++; //increment x scroll for scrolling function if(scrollx % 8 == 0) { //if scrollx is a multiple of 8 SMS_scrollLineMap(RIGHT); //scrolls in the next tiles at the right scrollx = 1 //resets the scroll value } } ...and maybe a basic collision detection routine using the collision built-in to Mappy in the block editor or animated tiles support if you want. Thanks in advance. |
|
|
Posted: Fri Jun 05, 2015 4:02 pm |
I'm not sure anyone has released code for using Mappy's data file(s) in an SMS game. You would probably want to have options for the tile size (not just 8x8). It's quite an advanced feature request. | |
|
Posted: Fri Jun 05, 2015 5:14 pm |
Nah, just 8x8 is what I need to keep things simple. :¬) Mappy comes with a bit of documentation about one of it's file types (the .FMP file format) and it comes with script support for converting it to any other file type so I just really need a basic level map scrolling tutorial. |
|
|
Posted: Mon Jun 08, 2015 9:16 am |
scrolling large maps isn't so complicated, and you can manipulate the tilemap using the functions
void SMS_setTileatXY (unsigned char x, unsigned char y, unsigned int tile);
void SMS_setNextTileatXY (unsigned char x, unsigned char y); void SMS_setTile (unsigned int tile); for instance, say you want the screen to scroll up: you have to load a new line of tiles into the first line below the lower border of the screen and you can do that by calling SMS_setNextTileatXY(0,24)
followed by 32 SMS_setTile(YourTileNum)
since the VRAM pointer automatically advances to pointing the next tile. If your map is stored as a 2D array, you could even use void SMS_loadTileMapArea (unsigned char x, unsigned char y, unsigned int *src, unsigned char width, unsigned char height);
to load a whole new line at once. When you're over the 28th line of tiles, you should start overwriting the first line in the tilemap (a.k.a. PNT) For horizontal scrolling, you can do basically the same thing, even if you're probably going to use a loop of void SMS_setTileatXY()
since you're going to update VRAM tiles which are stored apart from each other. -------------------------- For mappy maps, you could try using FMP2GBA which converts a Mappy map into a C array. Unfortunately it seems to support 8x8 tiling only and also doesn't support animated tiles. In Anguna - the Prison Dungeon, I took the original game FMP maps and converted to C arrays using for /F "tokens=1-10 delims=." %%i in ('dir *.fmp /b') do (
fmp2gba %%i.fmp %%i.c level_%%i NOGFX ) which turned every 'somename.FMP' in my folder into a 'somename.c' containing arrays like const unsigned short level_somename_map[] = { <map tiles numbers here> }
which is just what you need, IMHO. I hope it helps! :) |
|
|
Posted: Wed Jun 17, 2015 10:44 am |
Thanks! :¬) I'm now making a test game for scrolling. However, there is some error when using the latest version. which points to ...which is weird considering it never happened in the older versions. ...and yes, I'm using <stdbool.h>. |
|
|
Posted: Wed Jun 17, 2015 11:28 am |
Check if you didn't change the order of your includes.
stdbool.h should come BEFORE SMSlib.h in every C source file you're including it. #include <stdbool.h>
#include "SMSlib.h" |
|
|
Posted: Wed Jun 17, 2015 2:10 pm |
Oh silly me. :¬P Fixed it now. I need to get more sleep... But I'm having a problem with bank switching. #include <stdbool.h>
#include "devkitSMS-master\SMSLib\SMSLib.h" #include "graphics.h" //#include "devkitSMS-master\PSGLib\PSGLib.h" void main() { SMS_mapROMBank(1); SMS_loadPSGaidencompressedTiles(title_pscompr, 0); SMS_loadSTMcompressedTileMap (0, 0, title_stmcompr); GG_loadBGPalette(title_bin); while (true) { SMS_waitForVBlank(); } } This code is supposed to render a title screen, but the screen is just black. Please help... :¬) |
|
|
Posted: Wed Jun 17, 2015 2:19 pm |
You're probably doing everything correctly, you just forgot to turn screen on...
SMS_displayOn();
place that after the palette loading ...also, you could use SMS_mapROMBank(title_pscompr_bank);
instead of that 1 in there... edit: are you sure you're using PS Gaiden compressed tiles (.psgcompr)? It's NOT the same as Phantasy Star RLE (pscompr)... |
|
|
Posted: Wed Jun 17, 2015 4:34 pm |
Oh, OK. :¬P I didn't realise it didn't enable the screen on init. Also, I had no idea about the differences between the compressors. Thanks for pointing them out. :¬D |
|
|
Posted: Fri Jun 26, 2015 9:59 am |
Update rolled.
SMS_displayOn() and SMS_displayOff() macros no longer disable vertical interrupt, as it wasn't needed and could cause problems to line interrupt and pad reading. Also, I added support for projects that need fewer sprites and for those needing DI/EI nesting (this feature requires SDCC 3.5.1 but it still has some quirks that need to be fixed... so please keep on using SDCC 3.4.0 for normal operations...) |
|
|
Posted: Mon Jun 29, 2015 11:07 am |
Moving to SDCC 3.5.1 - supports preliminar DI/EI nesting. Probably not so useful after all. | |
|
Posted: Mon Sep 14, 2015 9:16 pm |
It would be nice to have some helper functions for converting (curses based) text mode games like putchar(ch, x, y). I also miss a random function for simple card games. | |
|
Posted: Mon Sep 14, 2015 11:08 pm |
SDCC implements most of stdio.h; you just have to define void putchar(char c), and the rest should automatically work. A half-baked putchar() implementation could be as simple as that: void putchar (char c) { SMS_setTile(c - 32); } And you could use it like so: SMS_setNextTileatXY(6, 5); printf("This is an example. Have a number: %d", 42); Of course, the code above can't handle line breaks, and it won't scroll the text if the cursor tries to move below the screen, but it's already a start.
SDCC includes most of the C standard library, including rand(). |
|
|
Posted: Tue Sep 15, 2015 6:54 am |
Zexall contains much of a console emulator, including line breaks and scrolling. For a real text mode game you might want to go to the the legacy text mode with more columns. | |
|
Posted: Tue Sep 15, 2015 8:23 am |
haroldoop pretty much said it all... anyway to handle texts you'll probably want to:
- load tiles containing your charset somewhere in VRAM - update (a part of) the screen tilemap according to the text you want to render you can do both with the provided functions. On top of those then you can build your own functions (eg. for handling word wrap, windowing, scrolling text locally, etc etc...) |
|
|
Posted: Wed Oct 07, 2015 10:36 am |
Hey, I'm new to the forums!
First of all congrats for the hard work and thanks for giving us the possibility of creating games for our favourite console. I'm developing some tests and while I was at it I noticed that every button/direction in the pads which fell in the most significant byte weren't read (MSB was always 0). That included left, right, 1 and 2 from PAD 2. I checked the sources and the SMS specs and found a small typo. IOPortH in SMSlib.c should point to 0xDD, not to 0xDE. Changing the value to 0xDD makes both pads work. Thank you again. |
|
|
Posted: Wed Oct 07, 2015 10:49 am |
Nice to see you here na_th_an! :-D | |
|
Posted: Wed Oct 07, 2015 11:01 am |
Hey, nice to see you too ;)
I'm just fiddling around for the moment. But my fiddling has a second player so... :D |
|
|
Posted: Wed Oct 07, 2015 11:22 am |
You're damn right! Thanks for highlighting the problem, I have now fixed it in the repo. :) |
|
|
Posted: Wed Oct 07, 2015 2:42 pm |
Glad to be of help!
And while we are at it, just a simple question: do you plan 8x16 sprite support in the future? |
|
|
Posted: Wed Oct 07, 2015 3:19 pm |
Well, not a simple question.
I could simply say that 8x16 sprites are already supported, just use SMS_VDPturnOnFeature (VDPFEATURE_USETALLSPRITES);
but the truth is that the SMS_addSpriteClipping function expects sprites to be 8x8. A workaround anyway could be 'tweaking' the clipping window SMS_setClippingWindow(0,0,255,191+8);
... or just don't use this, and do your clipping yourself and use SMS_addSprite. So, you see, even if officially unsupported they could be unofficially supported ;) Let me know if you find other bugs or you feel there's some missing feature, thanks! |
|
|
Posted: Wed Oct 07, 2015 7:57 pm |
This is pretty cool! Hope to see some more ambitious demos being used with this library for the next coding competition. | |
|
Posted: Thu Oct 08, 2015 6:30 am |
That's awesome, thanks. Exactly what I needed. I love the way this library it's built. It gives you exactly what you need with 0 hassle. Great job! |
|
|
Posted: Sat Oct 10, 2015 12:54 pm |
Ok, sorry, I realized this is just plain wrong. :| Proper support for 8x16 sprites in SMS_addSpriteClipping is on the way. |
|
|
Posted: Mon Oct 12, 2015 9:39 am |
Library updated. Now you can change sprite mode directly using this newer function:
void SMS_setSpriteMode (unsigned char mode)
the following modes are defined: SPRITEMODE_NORMAL
SPRITEMODE_TALL SPRITEMODE_ZOOMED SPRITEMODE_TALL_ZOOMED which means support for 8x8, 8x16 and 2x zoomed sprites too (that is 16x16 and 16x32) Please remember that there's a hardware problem with zoomed sprites on first revision SMS, as Charles detailed:
Also, MegaDrive/Genesis VDP doesn't support sprite zooming so... beware. |
|
|
Posted: Tue Oct 13, 2015 6:05 am |
Thanks, 8x16 sprites are a must if you want bigger buddies.
While we are at it, if you accept suggestions for new features, a PAL/NTSC detection would be nice. Of course we can use the snippets found in the dev section of this site, but have them built in the library would come up handy. |
|
|
Posted: Tue Oct 13, 2015 8:12 am |
of course! :) I can try adding code that identifies PAL/NTSC and the VDP revision too, and of course functions to query the result... mmm... I'll work on that :) edit: PAL/NTSC detection is on the way. I'd like to run a few tests on hardware before releasing the newer function, though. |
|
|
Posted: Wed Oct 14, 2015 7:38 am |
PAL/NTSC detection added, it's performed on initialization and you can query that using the newly added function (which is SMS only)
SMS_VDPType (void)
that could return one of the two bit constants VDP_PAL and VDP_NTSC, according to 50/60 Hz screen refresh rate. It seems to work correctly both on emulators (Emulicious and MEKA) and on my SMS II fitted with a 50/60 Hz switch. In my plans I'll add also 'hardware model' detection, at a later time. example usage: if (SMS_VDPType() & VDP_NTSC)
SMS_setBGPaletteColor(0,0x03); // red else if (SMS_VDPType() & VDP_PAL) SMS_setBGPaletteColor(0,0x30); // blue |
|
Goto page Previous 1, 2, 3, 4, 5 ... 15, 16, 17 Next |