Forums

Sega Master System / Mark III / Game Gear
SG-1000 / SC-3000 / SF-7000 / OMV
Home - Forums - Games - Scans - Maps - Cheats - Credits
Music - Videos - Development - Hacks - Translations - Homebrew

View topic - devkitSMS tutorial

Reply to topic Goto page Previous  1, 2
Author Message
  • Joined: 01 Jan 2014
  • Posts: 321
Reply with quote
Post Posted: Thu Oct 13, 2016 9:15 am
Hey Sverx,

Sorry if these questions have been asked before. Redirect me if so.

Is the asset management / bank switching dealt with by the programmer or is it built in to C?

Is there support for using nametable locations other than $7800?

Nice work btw. 20 mins after downloading sdcc and skimming through the tutorial i had the screen divided in to several scrolling sections and sprites flying around.
  View user's profile Send private message
  • Joined: 05 Sep 2013
  • Posts: 2484
Reply with quote
Post Posted: Thu Oct 13, 2016 9:30 am
Current SDCC version doesn't yet support FAR pointers, so there's virtually no support for transparent bankswitching... thus this is dealt with the old manual way.
You can use the

SMS_mapROMBank(n)

macro, for example as in:

SMS_mapROMBank(bg__tiles__psgcompr_bank);
SMS_loadPSGaidencompressedTiles (bg__tiles__psgcompr, BG_TILES);


Nametable (PNT) location is fixed because of the great speed optimizations it involves:

#define SMS_PNTAddress            0x7800

If you need to change location at run time, I can help you fork a SMSlib version that supports that, it shouldn't be too hard. Also, if you need just TWO locations, you could define two constant addresses and duplicate the macros that uses that constants, as

#define XYtoADDR(x,y)             (SMS_PNTAddress|((unsigned int)(y)<<6)|((unsigned char)(x)<<1))

so that you can still use

#define SMS_setNextTileatAddr(a)  SMS_setAddr(a)

for instance.

I hope this helps :)
  View user's profile Send private message Visit poster's website
  • Joined: 01 Jan 2014
  • Posts: 321
Reply with quote
Post Posted: Thu Oct 13, 2016 11:26 pm
Thank you.

One nametable is fine, i was just checking my options. Time to code.
  View user's profile Send private message
  • Joined: 12 Oct 2015
  • Posts: 89
  • Location: Ireland
Reply with quote
Post Posted: Tue Dec 13, 2016 8:15 pm
sverx wrote
I might have these SFXs somewhere, not really sure at the moment :|
BTW I wonder why your own SFX isn't working, it looks like you're doing it the correct way. Channel #2 only, export to VGM, convert to PSG (are you using the -2 switch on vgm2psg converter, right?) and you're done.
If you can't hear that, check if you aren't either firing the SFX at all or you're not calling the PSGSFXFrame() function.


Got this working! I realized what I did wrong in my test program: I played the SFX when I hit the pause key [if (SMS_queryPauseRequested())] but I forgot to immediately call SMS_resetPauseRequest() hence the reason why SFX either didn't play or played "weird".

NB: the other thing I've seen is that I believe you *must* either fade out the SFX volume to nothing or make the last "note" of the SFX silent; otherwise the SFX will continue to "drone" - I thought PSGSFXStop() would stop playing the SFX but doesn't seem to be... Thanks
  View user's profile Send private message Visit poster's website
  • Joined: 05 Sep 2013
  • Posts: 2484
Reply with quote
Post Posted: Wed Dec 14, 2016 10:20 am
SteveProXNA wrote
NB: the other thing I've seen is that I believe you *must* either fade out the SFX volume to nothing or make the last "note" of the SFX silent; otherwise the SFX will continue to "drone" - I thought PSGSFXStop() would stop playing the SFX but doesn't seem to be... Thanks


Actually, that's what happens when your SFX isn't properly converted or fired... let me explain.
When you convert a VGM file to a PSG one (for a SFX), you should use a command line option which tells the converter if you're going to use hardware channel 2 or channel 3 (or both!) - the converter will remove from the file any information about the channels it shouldn't touch.
Then, when you fire that SFX, you should pass the very same information, as it isn't saved into the PSG file (it's a completely header-less format).
When you fail in matching those, you'll likely get that nasty effect.
I hope this helps! :)
  View user's profile Send private message Visit poster's website
  • Joined: 19 Feb 2009
  • Posts: 4
Reply with quote
Post Posted: Fri Feb 10, 2017 10:23 pm
Hi! Sorry for my silly question, but what I have to do to be able to compile for GG?

Loading tiles background is working like a charm. To be able to do this I had to:

1. Set the option "output hex (GG)" at bmp2tile on Pallete tab;
2. Compile using SMSLib_GG
3. Uncomment the #define constant TARGET_GG

Besides that, to ensure my tilemap was draw correctly I had to set the loadtilemap function like this:

void loadAssets(void) {
  SMS_loadPSGaidencompressedTiles(initial_scene__tiles__psgcompr, BG_TILES);
    SMS_loadSTMcompressedTileMapArea(6,3,initial_scene__tilemap__stmcompr,20);
    GG_loadBGPalette(initial_scene__palette__bin);
}


Why I had to set up 6,3 at w,h parameter (instead of 0,0) I don't know yet. Somebody could help me? What I am doing wrong? (I know I had to study more I am trying to).
  View user's profile Send private message
  • Joined: 05 Sep 2013
  • Posts: 2484
Reply with quote
Post Posted: Fri Feb 10, 2017 10:35 pm
It's correct :) The GG screen shows only the central part of the 'virtual' screen, you should image that everything else you load on the tilemap is out of the central 'window', if you get what I mean.
  View user's profile Send private message Visit poster's website
  • Joined: 19 Feb 2009
  • Posts: 4
Reply with quote
Post Posted: Sat Feb 11, 2017 4:46 pm
Last edited by chains on Sat Feb 11, 2017 11:52 pm; edited 1 time in total
sverx wrote
It's correct :) The GG screen shows only the central part of the 'virtual' screen, you should image that everything else you load on the tilemap is out of the central 'window', if you get what I mean.


Yeah! I got it. Makes perfect sense. Thank you!

sverx wrote
Also, if you don't need to move these images over a background, you could use the background itself, changing the tiles according to your frame. That's what I would call an 'animated background', e.g. a torch burning while hanging on a wall, as in Prince of Persia for instance...


That's exactly what I am trying to do.. but no luck until now.

Do you guys have a pattern to calculate the frames per sec or something to do this task? Everything I came up with handles with the OS' "current time", but I can't figure it out how to do it with Z80.

I think I will have to write my own algorithm... I wonder with someone came up with a similar problem and could help me? :)

I've tried to implement an accumulator while in the looping and then after a certain amount of "time" do some other things, clear the memory and repeat. But so long no luck. :(
  View user's profile Send private message
  • Joined: 05 Sep 2013
  • Posts: 2484
Reply with quote
Post Posted: Sat Feb 11, 2017 5:58 pm
On a GG the screen refresh is 60 times per second. The 'trick' is to make your code sync with it, using
SMS_waitForVBlank()

which will stop the processing until vblank starts, which means you'll be at start of the blanking phase, the right time to update VRAM contents (update SAT for instance, and some tiles eventually). Also, as long as you're in vblank, you can use UNSAFE (fast) functions as the VRAM can be accessed at maximum speed with no data corruption.
  View user's profile Send private message Visit poster's website
  • Joined: 19 Feb 2009
  • Posts: 4
Reply with quote
Post Posted: Sat Feb 11, 2017 11:50 pm
Thanks again for your answer. You're great!

That's what I am trying to do.. But I don't figure out why I am not able to emulate a 1s of delay between cycles before drawing something else. Let's do some code to exemplify.

Here's my code:

void titleScene(void) {
  unsigned int ks = 0;
  unsigned int x;
  const unsigned int *pnt;
  loadTitleAssets();
  SMS_displayOn();
  while(gameState == ST_TITLE) {
    ks = SMS_getKeysStatus();
    if(ks & GG_KEY_START) {
      gameState = ST_MAIN;
      break;
    }
    for (x = 0; x < 13; x++) {
      SMS_setNextTileatXY(GG_X+3+x,GG_Y+13);
      pnt = &press_start__tilemap__bin[x*2];
      SMS_setTile(*pnt+++PS_TILES);
    }
    SMS_waitForVBlank();
  }
  SMS_displayOff();
  mainScene();
}


Works great. But I am not happy with it because I want to add a blink animation at the press start phrase. At 1sec the VDP should display "press start" and at the 2sec shouldn't display nothing at all. And so on...

So, I added a simple accumulator to emulate that. At every 60 frames, computes a sec. (just an example)


    [...]
    unsigned char secs = 0;
    unsigned int t = 0;
    [...]
    t++;
    if(t == 60) {
      secs++;
       t = 0;
    }
    SMS_waitForVBlank();
    [...]


So at the draw logic, we may add a new condition:


    for (x = 0; x < 13; x++) {
      SMS_setNextTileatXY(GG_X+3+x,GG_Y+13);
      if(secs == 0) {
        pnt = &press_start__tilemap__bin[x*2];
      } else {
        pnt = &press_start__tilemap__bin[2];
      }
      SMS_setTile(*pnt+++PS_TILES);
    }


That
&press_start__tilemap__bin[2]
means a blank tile.

Makes sense?

But it's not working. The processor is assuming the else condition every time and the "press start" sentence is not appearing. I lack a debug tool to look with more detail at the VDP processing. Do you know something to help with it? I'm using a MacOS.

I am not fluent in english nor C, so I apologize for any inconvenient in advance...

Edit: t = 0;
  View user's profile Send private message
  • Joined: 05 Sep 2013
  • Posts: 2484
Reply with quote
Post Posted: Sun Feb 12, 2017 10:52 am
Hard to tell why it isn't working, it may be the if condition checking just if secs is zero instead of checking if it is odd or even...
BTW I suggest you to switch your approach to a simpler one: just one unsigned char variable, and then check if it's time to draw/erase something or simply do nothing
unsigned char cnt=0;
if (++cnt==1) {
  // draw text
} else if (cnt==61) {
  // erase text
} else if (cnt==120) {
  cnt=0;
}
  View user's profile Send private message Visit poster's website
  • Joined: 22 Oct 2017
  • Posts: 8
Reply with quote
Post Posted: Wed Oct 25, 2017 1:47 am
trying to use bmp2tile to create the assets, but I have no dialog boxes in the program (screenshots attached)

am I missing some files that will allow me to properly use this software? sorry for such a stupid and basic question... in the readme of bmp2tile it describes a number of options as well as "Click on "Save" to save the tile data to a file." and I see none of that.

edit: I opened bmp2tile on a different windows computer and now along the bottom there are options and the ability to save. so it looks like I am missing some DLL or redistributable.

edit 2:
changed the code to use non compressed functions along with my copy/pasted uncompressed tilemaps
SMS_loadTiles(field__tiles__psgcompr, BG_TILES,1216);
SMS_loadTileMap (0, 0, field__tilemap__stmcompr, 4728);
SMS_loadBGPalette(field__palette__bin);
SMS_loadTiles(sprites__tiles__psgcompr, SPRITE_TILES,912);
SMS_loadSpritePalette(sprites__palette__bin);
and the result compiles and plays! looks messed up, but I'm happy.
ss-source.png (34.32 KB)
ss-source.png
ss-tiles.png (56.65 KB)
ss-tiles.png
dependency2.png (115.28 KB)
dependency2.png
hacked.png (108.62 KB)
hacked.png

  View user's profile Send private message
  • Site Admin
  • Joined: 19 Oct 1999
  • Posts: 12866
  • Location: London
Reply with quote
Post Posted: Wed Oct 25, 2017 6:41 am
BMP2Tile does not work well at high DPI settings, please use the compatibility options to disable that.
  View user's profile Send private message Visit poster's website
  • Joined: 05 Sep 2013
  • Posts: 2484
Reply with quote
Post Posted: Wed Oct 25, 2017 9:03 am
Wainstop wrote
changed the code to use non compressed functions along with my copy/pasted uncompressed tilemaps
  SMS_loadTiles(field__tiles__psgcompr, BG_TILES,1216);
  SMS_loadTileMap (0, 0, field__tilemap__stmcompr, 4728);
  SMS_loadBGPalette(field__palette__bin);
  SMS_loadTiles(sprites__tiles__psgcompr, SPRITE_TILES,912);
  SMS_loadSpritePalette(sprites__palette__bin);

and the result compiles and plays! looks messed up, but I'm happy.


it's messed up because you're using compressed tilemaps and tiles (stmcompr, psgcompr) and you're loading them with the functions to load uncompressed assets. Use the proper functions and it will work :)
  View user's profile Send private message Visit poster's website
  • Joined: 22 Oct 2017
  • Posts: 8
Reply with quote
Post Posted: Fri Oct 27, 2017 1:45 am
sverx wrote
it's messed up because you're using compressed tilemaps and tiles (stmcompr, psgcompr) and you're loading them with the functions to load uncompressed assets.


no. I only kept the filenames the same as in the tutorial. the contents of the files are simply copy and pasting out of the edit control of bmp2tile. uncompressed. this was the only option for me, because on my Windows 7 64-bit laptop at 1366x768, bmp2tile does not display any controls whatsoever (as in the screenshots I shared). it's not possible for me to export or save any output except by directly copy and pasting out of the edit box. I have tried compatibility settings.

do you have a suggestion of any other tools to use instead for converting images? also, how should I use the fourth parameter of those uncompressed functions? do I specify the size in bytes of what I am loading?
  View user's profile Send private message
  • Site Admin
  • Joined: 19 Oct 1999
  • Posts: 12866
  • Location: London
Reply with quote
Post Posted: Fri Oct 27, 2017 6:12 am
You can drive BMP2Tile from the command line to generate the compressed assets. Something about your system is making it draw the controls off the screen, I'm not sure what but I expect it is something to do with scaling or font size.
  View user's profile Send private message Visit poster's website
  • Joined: 05 Sep 2013
  • Posts: 2484
Reply with quote
Post Posted: Fri Oct 27, 2017 8:02 am
Wainstop wrote
I only kept the filenames the same as in the tutorial. the contents of the files are simply copy and pasting out of the edit control of bmp2tile.


wow. no, it won't ever work this way, as in the edit control you won't see a binary file but an .asm source instead. Use BMP2Tile command line if you can't make the GUI work, as Maxim suggested.

the last parameter is the size of data, in bytes.
  View user's profile Send private message Visit poster's website
  • Joined: 01 Jan 2014
  • Posts: 321
Reply with quote
Post Posted: Sat Oct 28, 2017 1:39 am
elo,

Is there support for ixh, ixl, iyh, iyl instructions in inline asm?

EDIT: Found info on wiki, no supported.
  View user's profile Send private message
  • Joined: 08 May 2018
  • Posts: 3
Reply with quote
Post Posted: Sun May 13, 2018 7:51 am
bmp2tile043 errors out when loading the provided png containing the score font. After much flailing about, I narrowed it down to the png using RGB directly rather than indexed color. I have converted the png to indexed color (attached) and bmp2tile happily converts it and it loads and works as intended in the tutorial project.

Just hoping to save some future person some time. Sverx, thank you very much for devkitSMS, it is a very nice package.

Also, I am fond of using make over batch files for compilation. Assuming a project folder structure that looks like this:

assets/
banks/
build/
include/
src/
Makefile


The following makefile can be used directly by changing some configuration variables for your project and environment:
## Path Configuration - Modify for your environment ##
SDCC_ROOT=C:/SDCC
DEVKITSMS_ROOT=C:/SDCC/devkitSMS
IHX2SMS = $(SDCC_ROOT)/bin/ihx2sms
ASSETS2BANKS = $(SDCC_ROOT)/bin/assets2banks

# Change to build/ for *nix systems
BUILD = build\\

# Change to banks/ for *nix systems
BANKS = banks\\

## Name of your remove program. If you're on *nix you most likely want `rm' here. ##
REMOVE = del

## Name of move command
MOVE = MOVE /Y

## Program configuration. Target name, libs to link, include directories. ##
TARGET=hello

LIBS = SMSlib.lib
INCLUDES = -Iinclude

CFLAGS  = -c -mz80
LDFLAGS = -mz80 --data-loc 0xC000 -Wl-b_BANK2=0x8000 --no-std-crt0 $(DEVKITSMS_ROOT)/crt0/crt0_sms.rel

## Stop editing here ##

CC = $(SDCC_ROOT)/bin/sdcc

.SUFFIXES: .rel
.PHONY: assets

SRCS = $(notdir $(wildcard src/*.c))
OBJS = $(SRCS:%.c=$(BUILD)%.rel)
BANKOBJS = $(notdir $(wildcard banks/*.rel))

all: assets $(TARGET)

$(TARGET): $(OBJS)
   $(CC) $(LDFLAGS) -o build/$(TARGET).ihx $(OBJS) $(LIBS) banks/$(BANKOBJS)
   $(IHX2SMS) $(BUILD)$(TARGET).ihx $(TARGET).sms

$(BUILD)%.rel: src/%.c
      $(CC) $(CFLAGS) $(INCLUDES) $< -o $(BUILD)

assets:
   $(ASSETS2BANKS) assets --compile
   $(MOVE) *.h ./include
   $(MOVE) *.rel ./banks

clean:
   $(REMOVE) $(TARGET).sms \
      $(BUILD)*.ihx $(BUILD)*.lk $(BUILD)*.map $(BUILD)*.noi \
      $(BUILD)*.asm $(BUILD)*.lst $(BUILD)*.rel $(BUILD)*.sym \
      $(BANKS)*.rel


It contains all the build output to the build/ directory and leaves the built rom in the root of the project.
score.png (1.03 KB)
Indexed color Score PNG
score.png

  View user's profile Send private message
  • Site Admin
  • Joined: 19 Oct 1999
  • Posts: 12866
  • Location: London
Reply with quote
Post Posted: Sun May 13, 2018 9:10 am
Yes, BMP2Tile does not try to manage the palette for you as generally that's something you will manage yourself across multiple images. It ought to give a meaningful error message though.
  View user's profile Send private message Visit poster's website
  • Joined: 05 Sep 2013
  • Posts: 2484
Reply with quote
Post Posted: Sun May 13, 2018 9:51 am
wasn't score.png already an indexed image? I wonder how I did convert that, then... :|

BTW thanks for the makefile, which would come handy if one changes just some sources and doesn't want to recompile everything - speaking about that unfortunately a single trivial change in a single asset will force everything to be recompiled.

Anyway, does the makefile compile assures you the correct link order of the modules? crt0 must be the first, then there should be all the objects that contains code (thus your game and the libraries used) and after that all the bank* objects in strict ascending order. Otherwise linking will produce a file that ihx2sms will turn into a 'broken' ROM file.
  View user's profile Send private message Visit poster's website
  • Joined: 08 May 2018
  • Posts: 3
Reply with quote
Post Posted: Sun May 13, 2018 6:49 pm
sverx wrote
a single trivial change in a single asset will force everything to be recompiled.


The make file addresses this in a couple different ways. First, there are different targets for the assets and the source files. Secondly, the assets recipe is set to be a .PHONY target. This means make doesn't try to associate running that recipe to any particular file so a change in the assets won't automatically be detected and compiled.

So running just
make
will execute the all: target which will first run assets2banks and then compile the rom. If no changes to assets have been made the asset generation step can be skipped by running
make <TARGETNAME>
where <TARGETNAME> is defined in the makefile as the TARGET variable, e.g;
make hello
That will build just the changed source files to make the rom and link in the already existing bank rels in that order.

But even if you ignore the targets and just run the default make it won't force a recompilation of anything since it is just linking in the already built bankN.rels that assets2banks has helpfully created.

You just may get tired of seeing assets rebuilt for no reason :)

sverx wrote
Anyway, does the makefile compile assures you the correct link order of the modules? crt0 must be the first, then there should be all the objects that contains code (thus your game and the libraries used) and after that all the bank* objects in strict ascending order. Otherwise linking will produce a file that ihx2sms will turn into a 'broken' ROM file.


With one exception I've addressed below: yes.
$(CC) $(LDFLAGS) -o build/$(TARGET).ihx $(OBJS) $(LIBS) banks/$(BANKOBJS)


This is the recipe for doing the link of the ihx. LDFLAGS includes "--no-std-crt0 $(DEVKITSMS_ROOT)/crt0/crt0_sms.rel" so that will be placed before anything else and then followed by built objects, static libraries, and lastly the bankN.rels.

The BANKOBJs variable is relying on the filesystem for sort order which is working fine for me since I am not up to over 9 banks yet ;) This is not ideal. While I try to figure out how to do a crossplatform numerical sort (make only provides a lexicographic sort which is not very useful for this case) this order can be manually specified by setting BANKOBJ ourselves. Below is a slightly updated makefile that shows this:

## Path Configuration - Modify for your environment ##
SDCC_ROOT=C:/SDCC
DEVKITSMS_ROOT=C:/SDCC/devkitSMS
IHX2SMS = $(SDCC_ROOT)/bin/ihx2sms
ASSETS2BANKS = $(SDCC_ROOT)/bin/assets2banks

# Change to build/ for *nix systems
BUILD = build\\

# Change to banks/ for *nix systems
BANKS = banks\\

## Name of your remove program. If you're on *nix you most likely want `rm' here. ##
REMOVE = del

## Name of move command
MOVE = MOVE /Y

## Program configuration. Target name, libs to link, include directories. ##
TARGET=hello

LIBS = SMSlib.lib
INCLUDES = -Iinclude

CFLAGS  = -c -mz80
LDFLAGS = -mz80 --data-loc 0xC000 -Wl-b_BANK2=0x8000 --no-std-crt0 $(DEVKITSMS_ROOT)/crt0/crt0_sms.rel

## Stop editing here ##

CC = $(SDCC_ROOT)/bin/sdcc

.SUFFIXES: .rel
.PHONY: assets

SRCS = $(notdir $(wildcard src/*.c))
OBJS = $(SRCS:%.c=$(BUILD)%.rel)
BANKOBJS = banks/bank2.rel

all: assets $(TARGET)

$(TARGET): $(OBJS)
   $(CC) $(LDFLAGS) -o build/$(TARGET).ihx $(OBJS) $(LIBS) $(BANKOBJS)
   $(IHX2SMS) $(BUILD)$(TARGET).ihx $(TARGET).sms

$(BUILD)%.rel: src/%.c
      $(CC) $(CFLAGS) $(INCLUDES) $< -o $(BUILD)

assets:
   $(ASSETS2BANKS) assets --compile
   $(MOVE) *.h ./include
   $(MOVE) *.rel ./banks

clean:
   $(REMOVE) $(TARGET).sms \
      $(BUILD)*.ihx $(BUILD)*.lk $(BUILD)*.map $(BUILD)*.noi \
      $(BUILD)*.asm $(BUILD)*.lst $(BUILD)*.rel $(BUILD)*.sym \
      $(BANKS)*.rel
  View user's profile Send private message
  • Site Admin
  • Joined: 19 Oct 1999
  • Posts: 12866
  • Location: London
Reply with quote
Post Posted: Sun May 13, 2018 9:51 pm
Using padded bank numbers would make them sort lexicographically, and hex would get you the maximum range in two characters.
  View user's profile Send private message Visit poster's website
  • Joined: 08 May 2018
  • Posts: 3
Reply with quote
Post Posted: Sun May 13, 2018 11:03 pm
Maxim wrote
Using padded bank numbers would make them sort lexicographically, and hex would get you the maximum range in two characters.


Yes but I'm not sure if that is configurable using assets2banks which is generating the filenames.

I am, of course, new to this so there are many things that are still murky to me.
  View user's profile Send private message
  • Joined: 05 Sep 2013
  • Posts: 2484
Reply with quote
Post Posted: Mon May 14, 2018 8:12 am
orphean wrote
Maxim wrote
Using padded bank numbers would make them sort lexicographically, and hex would get you the maximum range in two characters.


Yes but I'm not sure if that is configurable using assets2banks which is generating the filenames.


if there's request for that, I might add a command line switch - it doesn't seem too complex after all ;)
  View user's profile Send private message Visit poster's website
  • Joined: 12 Oct 2015
  • Posts: 89
  • Location: Ireland
Reply with quote
Post Posted: Tue May 15, 2018 8:08 am
Last edited by SteveProXNA on Sat Aug 04, 2018 10:05 am; edited 1 time in total
Hi all - I also blogged about experiences how to setup the devkitSMS and some programming samples:

http://steveproxna.blogspot.com/2017/09/devkitsms-programming-setup.html
http://steveproxna.blogspot.com/2017/11/devkitsms-programming-sample.html
http://steveproxna.blogspot.com/2018/03/devkitsms-programming-sample-ii.html
  View user's profile Send private message Visit poster's website
  • Joined: 03 Aug 2018
  • Posts: 2
Reply with quote
Post Posted: Fri Aug 03, 2018 8:24 pm
Hello sverx,

Is it possible to load a map with a size 128*24 for a scrolling game ?
  View user's profile Send private message
  • Site Admin
  • Joined: 19 Oct 1999
  • Posts: 12866
  • Location: London
Reply with quote
Post Posted: Fri Aug 03, 2018 8:54 pm
The video memory only holds 32x28, you would need to use http://www.smspower.org/forums/16800-GeneralScrollLibraryGSLib or some custom code to deal with it.
  View user's profile Send private message Visit poster's website
  • Joined: 03 Aug 2018
  • Posts: 2
Reply with quote
Post Posted: Sat Aug 04, 2018 12:11 am
oh thks a lot Maxim , just what i want :D
  View user's profile Send private message
  • Joined: 11 Apr 2019
  • Posts: 1
  • Location: Juiz de Fora/MG-BRASIL
Reply with quote
Post Posted: Tue Aug 13, 2019 1:02 am
I can not make it work at all .. do not make any mistake, but it is all black screen.

Build assets.c and assets.h from assets folder
*** sverx's folder2c converter ***
Info: conversion completed. File "assets.c" defines 1068 total bytes.
Build Main
Linking
*** sverx's ihx2sms converter ***
Info: 2939 bytes used/32768 total [8.97%] - size of output ROM is 32 KB
Info: SEGA header found, checksum updated
  View user's profile Send private message Visit poster's website
  • Joined: 05 Sep 2013
  • Posts: 2484
Reply with quote
Post Posted: Wed Aug 14, 2019 4:24 pm
if you've got the SMS file and it's not working you can attach it here and I'll check what's wrong
  View user's profile Send private message Visit poster's website
Reply to topic Goto page Previous  1, 2



Back to the top of this page

Back to SMS Power!