Showing posts with label Master System. Show all posts
Showing posts with label Master System. Show all posts

Wednesday, June 07, 2017

Some more news from 2016-2017

Another year has passed and here's my timely post. I bet some of you thought I would forget, right? ;)

Well, during the past months I've mostly been busy nurturing my SEGA Master System / Game Gear development kit and libraries, devkitSMS/SMSlib, and the time spent on that is bearing fruits. For example, the 2017 SMS Power! Coding Competition winning entry is a game developed by a fellow forum user eruiz00 using it - the game is called Astro Force, it's a vertical shoot-em-up, and it's a great game! It has many levels, lots of enemies, bosses, music and SFXs. The author is also distributing the game C source code, so if you feel inclined to see how he did it, you can see that for yourself.

Here are some screenshots, and the ROM (with the sources) can be downloaded from this page.

Astro Force - SEGA Master System homebrew game by eruiz00

The game is also using my SN76489 audio library, PSGlib, as does another great homebrew that won the second place in the very same aforementioned competition: a team of seriously talented guys (Psidum, Calindro, RushJet1 and Sim1) made a 25 fps FMV (full motion video) of the famous B&W video "Bad Apple" at full SMS resolution, 256x192 pixels. You can check out the video and audio at this YouTube recording. It's worth every second, it's just amazing what they achieved.

Besides the 8-bit world, there are some other news. The most important one for me is that we finally released Waimanu Grinding Blocks Adventure (for the Gameboy Advance) on a physical cartridge (!!!). This became possible thanks to our publisher, Piko Interactive. You can read all the details (and find out how to get a copy of it!) on Disjointed Studio's blog post. We're so excited and we can't wait to hold a copy of that in our hands!

Waimanu GBA boxes stacked up - picture by @thebitstation

Speaking about Disjointed Studio, we're finally approaching the beta phase of our new game Weka Invaders... well, unfortunately I can't tell yet how soon it will be released.

Finally, it's true I'm posting on this blog very infrequently. Nowadays I'm (slightly) more active on Twitter, so you can follow me @i_am_sverx for news between my blog posts.

See you!

Wednesday, June 08, 2016

Past Year's News

 well, what should I say? I didn't post anything in a while - so let's recap what has happened since May 2015, which is a whopping 13 months ago. Sit down and relax... well, I promise it won't take too long anyway.

First and foremost, last November we Disjointed Studio guys released our first SEGA Master System game. It's called Waimanu: Scary Monsters Saga (as our habit goes, the subtitle initials match with those of the console the game will be running on). You can download it here for free, and play it on your console using a flashcart/adapter such as the Master EverDrive, or on an emulator (MEKA and Emulicious are the ones I suggest).
Here are two screenshots for your viewing pleasure:

WaimanuSMS - title and menu screen

WaimanuSMS  - in game (area 1)

This is the first (and so far the only) game I've ever written completely in assembly... Zilog Z80 assembly specifically. I had fun doing it... well, sort of.

Following the release of WaimanuSMS, the well known British magazine Retro*GAMER featured an interview with yet another Homebrew Hero, as they dub it, and he was nobody else than... yours truly :-)
You can read my ramblings in the 151st issue, if you can still find it. And I have to admit I'd been waiting for this to happen for quite a long time... I had purposely taken the picture that appears in the article when I was in Portland, OR (known for its breweries too)... and that was in July 2013. Oh, well... I can't really complain.

All this apart, I also have spent much of my time during the last 13 months to enhance my SEGA Master System development kit and library, devkitSMS/SMSlib, which has recently reached what I would call a mature stage.
Speaking of this, another thing that made me very proud happened a while ago, at the end of October 2015: the homebrew rockstars known as The Mojon Twins released their first SEGA Master System game, and they made it using my devkit. The game is called Moggy Master and it's a simple 1-or-2-player game they did to test the kit and the library, according to their blog post. They hope to code and release more games for the SMS in the future, and I hope so too. Also, we worked together to create a library for the SEGA SG-1000, the Master System forerunner, and we called that SGlib. It's now a part of the devkit.

Finally, last March, during the SMSPower! 2016 Coding Competition, two more games based on my devkit and libraries were finally released along with two projects I've been working on myself. These games are haroldoop's DataStorm, a port of an Atari 2600 shoot 'em up called Turmoil, and Pedro76 and Nivarel's Master of the Labyrinth, a dungeon crawler. The first of my own projects is MARKanoIIId, an Arkanoid clone, which is still simply a hypnotic interactive demo and not yet a full game. It features two great tunes by Tomy, a Finnish musician and PSG essayer, and sleek graphics by Kagesan, a German homebrewer who also won this year's competition with his marvelous Bara Burū.

The other project is Disjointed Studio's new effort (and a very early beta back then), which goes under the working title of Weka Invaders. Waimanu is once again defending the Earth from the next wave of alien invasion, but this time he happens to be carrying a huge weapon on his shoulders. We're actively working on this project in these very days... unfortunately, I still can't reveal any planned release date.

Well, I think that's it. I should promise it won't take me another year for the next post but... well, you already know how lazy I am, right?

Wednesday, May 13, 2015

Putting some more fuel into SMS homebrew

Here I am again... well, almost another year has passed since my last words here. "Doesn't time fly when you're enjoying yourself?"[*]

I spent most of my time these last months writing code and building tools aimed to the homebrew on the SEGA Master System (SMS for short) and SEGA Game Gear.
Writing homebrew games/programs on SMS still means writing ASM code almost from scratch every time.
Yes, of course you can reuse some of the code you've already written, but still there isn't a big deal of shared ready-to-use code, snippets apart. Even if it features background music and sound effects support, the previously only existing audio library (the very good Mod2PSG2, which plays music written on the tracker with the same name) unfortunately never provided a way to export sound effects from its tracker, thus forcing developers to build their sound effects with hex editors.

So I wrote PSGlib, and the tools to convert VGM files into tunes and sound effects that the homebrewer wants to use in their program. VGM files can be produced by some well know trackers such as DefleMask and the very same Mod2PSG2 tracker too. After you convert and compress them into the PSG format, everything you have to do is just to start them (music and SFX) at the right time. Now the majority of SMS homebrew arising these days uses it, the complete list is here.

This happened mostly in 2014, still. And even if writing Z80 ASM code can be very entertaining (seriously!), I decided to try to build a development kit to write SMS homebrew in C.
Of course, first I needed a compiler. SDCC turned out to be the choice. It's a free open source optimizing C compiler that also targets the Zilog Z80 processor, among many others. So the core component I needed was already available.
Since the processor is only one of many components of the SMS, I needed to write code and tools to make it possible to use the SMS as the target, and to write a library on top of that development kit to enable programmers to use the underlying hardware straight from their C programs.

So last January devkitSMS (the kit) and SMSlib (the library) were born.
The library includes functions to handle the display hardware features, such as hardware scrolling for example, background and sprites, and supports software sprite clipping based on a user defined window. It has functions to handle colors and palettes, tiles and tilemaps, both normal keypad and Genesis/MegaDrive 3/6 buttons pad, the pause key and it also has ROM mappers support.
PSGlib then also incarnated as a additional C library, so that it also can be used with the devkit.

And that's pretty much it.

Sunday, August 31, 2014

One year with no (posted) news

Yes, I'm alive and kicking :)

Sorry I may have appeared MIA... I just had nothing interesting to post; it's been a year since I virtually don't have anything going on involving my lovely DS or the little GBA.

Anyway a few months ago I recovered my younger brother's SEGA Master System II and also his SEGA Game Gear, both of which were forgotten long ago... fortunately, they both are still almost perfectly working.
In case you've never heard of them, they're basically the same hardware, even if the latter is a portable system featuring a color LCD display, more colors and stereo audio. What we're talking about here are 3.5 MHz Zilog Z80 powered 8 bit systems, not exactly something you can compare to GBA 16.5 MHz and DS 66 MHz 32 bit ARM processors horsepower.

Still it's already proving to be very intriguing to write code for these consoles.

First, you have to deal with the processor. The Z80 is an 8 bit CPU, as I said, so actually it can handle only rather small numbers. It even has no instruction to perform multiplication, not to mention division. Shifting a register requires twice the time it takes to make an addition, and you can shift bits left or right by one position only. The fastest operations, such as the addition, require 4 clock cycles (here's the complete instruction set). Many basic operations are available on selected registers only.

The memory. The system features 8 KB of RAM, built into the console. However, the code runs from ROM: there is a chip inside each and every cartridge, so there are also no loading times. ROM size can be up to 1 MB, but everything bigger than 48 KB requires bank switching to access the upper part.

There's virtually no other option but to code in assembler. WLA DX is currently the assembler of choice.

Then there's the hardware responsible for the graphic, the Video Display Processor (VDP), which has very limited capability, again I mean compared to the DS/GBA. Basically here you've got a single background made up of a grid of 32x24 tiles, each with 16 colors either from the first or the second palette, which is the one that is also used by the sprites. The hardware also isn't capable of displaying more than 64 different colors, and I don't mean at the same moment. Finally, up to 64 16-colors sprites (each 8x8 or 8x16 pixels dimensions) are available, but only up to 8 will be drawn on the same scanline. Sprites unfortunately cannot be flipped neither horizontally nor vertically. The VDP still has the quite powerful feature of supporting hardware scrolling of the background in both X and Y directions.

The background tiles, the map, the sprites graphics and the Sprite Attribute Table (SAT) all share the same VRAM space, which is only 16 KB total. The most troublesome issue here is that you can write to VRAM in specific moments only (when video is disabled or during VBlank). If you write to VRAM at the wrong moment, your data will simply be discarded, so it's very easy to end up with corrupted graphics.

Finally, Japanese version of the SEGA Master System apart, the system generates music and sound effects from its PSG chip (the Texas Instruments SN76489 Programmable Sound Generator), which has 4 mono audio channels. Each of the first three channels can output a true square wave (50% duty cycle) of a given frequency, while the fourth channel can output noise only. Volume of each channel can be set to one of 16 attenuation levels on a logarithmic scale.

There are some ready-to-use tools and libraries to compose and replay modules using the PSG chip, but none of these libraries is currently supporting both music and sound effects. So I decided to try implementing a solution to be able to have sound effects over background music, even with the very limited number of available channels.

The result is PSGlib. It plays VGM tunes written for the SN76489 (the tunes need to be converted to a specific format), and it supports sound effects on the third square wave channel and/or on the noise channel, avoiding any collision with the music that would be probably trying to use the same channels. More details about the library may follow in a separate post, eventually.

And... that's pretty much everything so far.