|You don't have any items in your cart|
|Subtotal (ex. VAT)|
So if you followed my last emulator series, you'll know that I built up a lot of caches of shapes (characters and sprites) on demand, and then drew them when required. This works great for old consoles, and computers with character map screens, because on the whole, games tend not to change character set images very often, just the actual character map screen, which referenced these images. Because these kinds of machines have pretty good hardware support, they don't have to resort to shifting bitmaps around, there are much easier ways of doing things.
So in this, the last part of my Commodore 64 Emulator series, I want to talk about some of the optimisations I did to help speed things up. But before getting into this, why do we need to speed things up? Wasn't it all running at 100fps+ anyway? Does it matter if your already over 60fps, as this is the refresh of the monitor? Well, yes and no.... No once you're over 60fps, its not that going to show any real difference. And yes... it does matter, because when things "hicup" the more spare capacity you have, the easier it is to absorb the hicup.
So in this chapter, I thought I'd tackle the tricky subject of SID chip emulation, both how I generate the sounds, and how I get them to play back in GameMaker. Before getting into any of the nitty gritty, let's have a quick look at the SID chip itself. Back in the day, it was the sound chip, the sound it generated was unparalleled in computers, and the musicians that created music on them - Gods among developers, superstars in their day. So what can this masterpiece of engineering do?
So, now that we have C64 sprites being rendered, how about characters? Well like sprites they are made from blocks of memory on even boundaries, all be it a lot smaller. So we can do the same trick with invalidating and caching on demand 8x8 surfaces. So how many 8x8s can a C64 hold? Well...8,192. That's a fair old step up from the 1024 that Sprites used. So can we fit 8,192 characters on a surface? well, as it turns out they fit nicely on 1024x512 surface, which isn't too large at all these days.
In this part, I'm going to start looking at sprites, and see if there's anything I can do in order to display "something" so I can better see games running. The simplest thing to do, is to just display a blob, but before we do that let's look at sprites in general.
In this part, I'm going to start discussing how I handled the screen at the start of this process, and the reasons behind these choices. I said in the first part that you could simply read the C64's screen memory and print it, so what did I mean by this?
In this part I want to talk first about the CPU bug I had, and how I fixed it, then I want to discuss the C64's memory mapping system, and how I deal with rapid paging on a per instruction basis.
So my next post was going to be about tracking down my CPU bug and how the memory mapping was going to work, but then I suddenly realised I needed to do another first, on how I actually emulate the CPU - a bit more detailed at any rate. So I've moved all the others out by a week, and thrown this one in first....
So I started this very much in the "can you even do this" spirit, and have been surprised how much I've been able to do with it. Sure, it does require YYC (GameMaker: Studio Compiler), but as YYC is now available to everyone, then I no longer see that as a dependency, but just another tool in the GameMaker box. There are several complications in even trying this, but the CPU emulation is "just" a program so should work easily enough, while rendering emulated memory is a tough nut to crack - but we'll come to that in a later part. The reason for writing these posts, is that I've come up with some interesting tricks to over come some GameMaker limitations - as well as good tricks to just help speed up your code (much as you would in any language). So I thought it would be a good idea to share them.
In the final tech blog of our Windows 8 series, and our final tech blog of the year for that matter, we'll be covering the App Bar which you can use the to display commands to users “on demand” and it will show commands relevant to the user's context, usually the current page, or the current selection. What this means for your game is that it gives you a convenient place where you can add buttons to do things like restart the level, quit the game or save the current state.
Last weeks tech blog was the first in a series of blogs covering the Windows 8 target platform. We discussed the use of Live Tiles to improve user engagement, as well as the use of badges to display game information. This week we are going to continue with Windows 8 and discuss the different ways that you can use Charms from the Windows 8 UI within your projects.
In this weeks tutorial we are going to start an exploration of some of the unique Windows 8 features that are avaialble to you when developing games. The Windows 8 platform isn't as popular as some of the other GameMaker targets, and much of that is related to the fact that Microsoft require you to use some of it's features, like Live Tiles and Charms, but we hope to show in this tutorial (and the ones to follow) that integrating Windows 8 functinality in your games is easy and will enrich the player's experience.
This week saw the release of the major 1.4 update to GameMaker: Studio. This update adds a great number of new features, and although everything is fully listed in the Release Notes, these do not quite give the full picture and may appear ambiguous to some. So, in this article, we are going to give you an overview of what's new and what's been changed, and link to some of the previous tech blogs that we've done covering these features in more details.
With the addition of console support, as well as the release of the new GameMaker: Player, it's more important than ever to have gamepad support in your projects. To many users, this can seem a complicated process, but hopefully in this tech-blog we can show how simple it can really be and you'll be able to integrate gamepad support in your games in no time!