Sunday, 11 October 2026

VIC20 Bunny Blitz

As part of the testing of the current update to the Penultimate Cartridge, a lot of testing has been going on. This included a video from TFW8b where he went through 30 games in one hour using the built in "Rod's Random ROM Runner", which when enabled, will generate you a "random" game every time you press the reset button.

This was combined with an Arduino with a simple bit of code which automatically pressed the reset button every 2 minutes,

During that testing, RRRR carefully selected the game "Rabbit Blitz" by "C. Simun" for Rod to play.

Rod wasn't sure of the keys and managed to hit the RUN/STOP key, which because it was a BASIC program exited the game and left you at a READY prompt.

Because of the way the graphics had been done, none of those characters were readable, so it was all a bit of a fail.

Separately, during my testing, I had found that the game had a screen-shaking effect when you crashed, and that was leaving the screen set wrong for NTSC after the first crash.

Plan A

The simple plan, the one a sensible person would have chosen, would have been to take the BASIC program listing and make two changes.

The first would be to add in a POKE, such as:

POKE 788, 194

or

POKE 808, PEEK(808)+2

which would disable the RUN/STOP handler and stop that exiting to BASIC.

See the following posts for information on how those work:

The second would be to change the screen shake code.

The current version works by changing the value of vertical centering on the VIC chip rapidly between two values, and then resetting it to almost, but not quite, what the standard value should be.

The code in question was as follows:

Extracting out the relevant sections, 36865 is $9001, the address of the vertical centering register on the VIC chip.

POKE 36865,50

Sets this to 50, it then wait for a bit

POKE 36865,30

then sets it to 30.

Finally.

POKE 36865,40

Sets it to 40.

On a PAL VIC 20, for which this game was presumably written, the standard value is actually 38.

On an NTSC VIC20, the value is 25, and the grass is an interesting shade of green?

This means after the screen shake effect, the PAL screen is 2 lines lower, which you wouldn't normally notice.

However, the NTSC system is 15 lines out, so is pushed very low on the screen, still just about visible, but not ideal.

A simple fix would be rather than using

POKE 36865,40

to reset the value, instead it could either peek the value previously, store it and then restore it, or it could read the value from the KERNAL ROM, which is different for PAL and NTSC system, so would be correct. The value is at $EDE5, or 60901, so a fix would be

POKE 36865, PEEK(60901)

That that should be fairly straightforward.

But you know me.

Plan B

Rather than that, I decided to embark on an entirely different solution.

I would rewrite the game in 6502 assembler, fixing those issues in the process and tidying up a few other things as I go.

A combination of the arrogance of a long grey beard and also my intrigue at what the row of £ signs is about that appears briefly as the game starts.

And how exactly the game generates the city skyline using what appears to be an array of mostly inverse Q symbols?

It is 62 lines of BASIC, 1830 bytes. This should be a simple process to recreate that in assembler.

What Could Possibly Go Wrong?

Actually not that much.

I have the fall back of the simple BASIC fixes anyway, so I can just give up at any point and go with that. I could also just leave the game unmodified, as it has been since it was added to the cartridge 3 years ago and no one has noticed, or at least no one has complained about it.

No fake jeopardy here. I am not going to lose the shop if this doesn't work.

(actually, I am going to lose the shop if things don't pick up, but this short, self-indulgent dalliance into a little bit of notepad 6502 coding for a day or so is unlikely to affect that one way or the other)

As usual with these things, my tools of choice are a text editor and a command line compiler. In this case Visual Studio Code and ACME.

I started with a pretty much empty slate, the only given is the one line of BASIC code at the start, the line

6502 SYS4109

(the line number is irrelevant, but I always like to use 6502, because 6502)

I had some of my other assembler games open in another window for reference, so I could steal some of the system constants and any relevant code.

I also have a couple of web pages handy:

Which is a useful reference for the VIC20 memory map and things like the VIC and VIA registers and zero page addresses etc.

This is a handy reference for 6502 assembler as I occasionally need to check things like "does inc set the carry flag?" etc.

I followed the general structure of the code, at least initially. Once it was running, I shuffled things around where they felt most appropriate.

Save ££££££££s

The first thing I wanted to check was the spurious ££££££££ on the screen briefly at the top of the "PLEASE WAIT" title screen.

What was it waiting for anyway?

I did think it might be generating the skyline at this point, but that seems to happen on the fly when you complete a level and are presented with a new one.

Looking at the code, it was mainly lines 20 and 30.

20 fori=0to501:poke7186+i,peek(32768):next

Line 20 is odd. That takes most of the time, is responsible for the ££££££££ screen corruption and does not actually do anything useful.

If I load the game and delete line 20 before I run it, it still works fine, and starts much faster and without the £ signs.

30 fort=0to47:readd:poke7168+t,d:next

Line 30 is important. This reads some data statements in lines 40-90, and pokes 48 bytes of data into memory at 7168, note the "68", which is $1C00, a 512 byte area of code below the screen at $1E00.

Amongst other things, line 100 includes

POKE 36869,255

This sets the VIC addressing register 36869 ($9005) to 255, which sets the video to $1E00 (as it was), but the character data to $1C00 rather than the font ROM at $8000.

The code at line 30 defines six graphics used by the game, the parts of the building, the plane, the bomb. These are in positions 0-5.

The rest of the character set is the remaining 59 characters in $1C00-$1DFF, and then 64 characters from $1E00-$1FFF, which is the screen RAM, so those will be nonsense. Because of the way the VIC chips memory map wraps around, the last 128 characters are the first 128 characters in the font ROM.

On a standard VIC20, if I can run a bit of code to print out all 256 characters from the font ROM.

The first poke writes to screen RAM, the second sets the colour RAM to black so you can see it.

If I add that to the Rabbit Blitz program after the running the code with line 20 removed, I get the following. The horizontal lines come from the default initialisation values in the Vice editor. On a real machine, they would be random noise.

If I put line 20 back and run it again, I get stripes for the characters from 7-63.

Let's remind ourselves of line 20 (with some extra spaces added for clarity).

20 for i=0 to 501 : poke 7186+i, peek(32768) : next

This is setting 501 values from 7186 upwards (yes, that is 86, not 68 as before). This is easier to see in hex.

  • 7168 is $1C00, the start of character RAM here.
  • 7186 is $1C12, 18 bytes into the start of the character RAM.

18? I could understand if it was 48, that is the number of bytes used by the 6 custom characters, but 18 is two and a bit characters?

It also runs up to 7687 or $1E07, which is 8 bytes into the video RAM which starts at $1E00.

This explains the eight £ characters that appears at the top of the screen in the original game.

Why the £ sign? Well aside from the fact I do not know why the VIC20 has a £ character, on a dedicated key. The dollar is shift + 4, but the £ get's a key of it's very own. The PET didn't have £ at all. It has '\' at character $1C, the rest of the set is I think the same.

Not even the business keyboard PET had a £ sign, so why did the VIC20, a home computer for the US market get one?

Anyway, skipping over that, why the £ sign in this case?

Well, again it is back to line 20.

20 for i=0 to 501 : poke 7186+i, peek(32768) : next

For each of the 502 iterations of that loop, it reads the value at 32768 ($8000). Why?

Why not read it once at the start of the line?

Why even read it at all?

It is the first byte of the font ROM. It will never change, it is $1C on every VIC20. The top of the @ sign.

What is that even doing, it is just filling the character ROM with vertical stripes that are never referenced in the game?

I think it might have been originally something like this.

20 for i=0 to 511 : poke 7168+i, peek(32768+i) : next

This would read 512 bytes from the start of the font ROM at $8000 and copy them into the character RAM at $1E00.

You could then poke the new character data into certain characters and still retain the letters and numbers etc, if you need to write things to the screen.

For example, I have modified the code to do that copy, and to write the UDGs at positions 33 to 39, overwriting some punctuation.

There you see the UDGs are mixed in with the rest of the characters and you can type as normal.

I am not sure what happened with the game, was that the original plan and it didn't work for some reason? It just seems odd to leave that line in place when it is not doing anything useful, just adding a 10 second delay and writing eight £ signs to the top of the screen?

One possibility is to stop the program being listed? If you press RUN/STOP and type list, this is what you would get.

That is unless you type RUN and then press RUN/STOP on the title screen, or if you press RUN/STOP after your plane has crashed.

I could fix that by simply deleting line 20. But where is the fun in that?

Instead I recreated the whole game in assembler.

Where you are welcome to list the entirety of the code...

Tower Block Construction

One reason I decided to continue is that I was intrigued by the next set of lines. It seems to build up the screen using four strings which are mostly inverse Q characters?

Looking at the output of petcat, it shows those as {down} characters?

  120 a$(1)="{blk}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}e{left}{down}@{left}{down}@{left}{down}@{left}{down}@{left}{down}@{left}{down}@"
  125 a$(2)="{blk}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}e{left}{down}@{left}{down}@{left}{down}@{left}{down}@{left}{down}@{left}{down}@{left}{down}@{left}{down}@"
  130 a$(3)="{blk}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}e{left}{down}@{left}{down}@{left}{down}@{left}{down}@"
  135 a$(4)="{blk}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}e{left}{down}@{left}{down}@"

It is an interesting solution. It creates four strings at A$(1) to A$(4), then it generates a random number from 1-6 and prints that A$.

  200 fort=0to21
  210 print"{home}"tab(t);a$(int(rnd(1)*6)+1)
  220 nextt

Each one is preceded by {home} symbol and a tab(t).

It goes through 22 columns of the display. For each one, it goes back to the top left using {home} and then moves along to the top of the column (TAB is single characters here, not x4 or x8 as we might be used to).

It then prints the string which moves the print cursor down, down, down until it gets to where the building should be and then prints the building using E and @ for the UDGs at positions 0 and 5. After each printed character, it uses {left} and {down} to go to the next one.

The four strings are different height buildings, 6, 8, 4 and 2 blocks plus a roof each.

There is no A$(5) or A$(6), those are the gaps between buildings which I can now confirm will occur 1/3 of the time.

That is a very unusual way of doing that, I don't think I have seen that sort of thing before.

Scoring

On the original game, there were two numbers printed on the bottom of the screen.

It wasn't clear what these were. Maybe it was explained in the cassette inlay (if it was published) or magazine article (if it was a type-in), but I have found neither.

That might also have explained by the was called Rabbit Blitz. Where are the Rabbits? Was it released by Rabbit Software? Was it written by a Rabbit?

These are the result of another magic string of characters in line 1111.

1111 forh=1toz:nexth:print"{rvon}{blk}{home}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{rght}{rght}{rght}"tb,b

This again goes to the top left and cursors all the way down to the bottom row, cursors right twice and then prints the TB and B variables.

I think those are "Tower Blocks" and "Bombs". TB increments whenever you hit a building, and B increments when you drop a bomb.

When you hit 30, it stops. Story of my life.

You get 30 bombs and that's it. Then all you can do is sit back and wait for the inevitable conclusion.

Oooof.

When you clear everything, you get to the end, and start again.

The bomb count is refreshed, but the building count persists.

It is not displayed on the screen, but there is a third variable used here, SC, presumably "SCore".

This is incremented each time you clear the field and land successfully.

There is a page which is displayed when this hits 10.

(Not that I have ever got there without cheating)

Introducing Bunny Blitz

I have re-themed my rewrite as Bunny Blitz, to make it a bit more cuddly as Blitz might be slightly out of favour after certain world events 25 years ago. #TooSoon?

I have taken the general look and concept of the game, but rewritten it from scratch in assembler.

I added symbols next to the buildings and bombs counters and displayed the score which was previously missing.

The bombs count goes red when it hits 30 and runs out (which inevitably happens when you are have almost completed the level).

I added more information to the "you crashed" page.

As well as a bit more on the "bunny" theme. I didn't have enough space for the full description of "patented lemon-scented building-cleansing bombettes", but I think that works.

As before, the "you won" page uses the same style.

I also applied that to the title page, to act as a sort of introduction to the game.

There is no need for a "please wait" as it only takes a second to setup the character set, which it has in fact done before the screen is displayed as it uses those characters.

I went for the character layout I described previously, a copy of the first 64 characters with the UDGs replacing the punctuation so I could combine them with text.

It looks rather pretty without the UDGs.

Game Mechanics

The rest of the game is a reasonably standard New York Blitz type game, nothing much to report.

The only oddity I found is that if you press the ↑ key it pauses the game until you press another key.

I had a few more ideas of things I could change, but decided not to over-complicate things.

One thing that always gets me with Blitz type games is the plane seems to pause (or in this case disappears completely) whilst the bomb is descending.

There was also the limitation in some games where the plane continues, but you cannot launch another bomb until the previous one has landed.

I did consider writing it so the plane continues and you can launch multiple bombs, but I thought that would add too much complexity.

One thing to note is the original game moves the plane on randomly 0-2 squares when it reappears, I guess to stop you holding down space and flattening the lot.

I also thought about making the plane land faster once you have cleared all the buildings, but that also seemed too complicated. It would need to keep checking if they had all been cleared.

Random Numbers

On the subject of random numbers, that was an interesting challenge in assembler, a random number from 0-5 and a random number from 0-2.

I had code in TimeBomb which was based on a routine George Beckett had dug up (more on that in the article)

That generates a 16-bit random number, as two 8-bit values, but I only needed 0-5.

I did think about masking it using 0000 0110, but that would only give me four values, 0, 2, 4, 6.

In the end I wrote some code to shift the 8-bit number 5 times, and each time add the shifted out bit to a running total.

If the number was 42, that would be 0010 1010, so my total accumulated would be 3.

The range would go from xxx0 0000, which was 0, to xxx1 1111, which would give 5 (as the final three bits would not be shifted out or counted).

That seems to work and gives a reasonable spread of pseudo-random numbers from 0-5.

I drew the towers is a more normal fashion. Starting at a point where the tallest building would be and stepping down 0, 2, 4 or 6 steps based on the random value, then drawing the roof and then stories below until it hits the ground.

This shows each of the four building heights.

Landing

I put that version up on Discord and to the TFW8b team.

One suggestion I got from Andy Hewco was the faster landing after clearing the level that I had previously ruled out.

Looking about it again, I realised I had been overthinking it. I added a counter each time a building was built, and decremented it each time one was knocked down.

When it reached zero, I descend to ground level, then cut the sound and taxi the plane off the screen to the right.

That's About It

The final version is 1688 bytes, still slightly shorter than the 1830 bytes of the original, but there isn't much it in with all the extra text I added.

I think it plays better, there is a bit more info on the screen and the graphics are less flickery. And gone is the startup delay and ££££££££ over-spill and on NTSC there is no misalignment after the first crash (but nothing I can do about the grass colour).

I will be adding that to the Penultimate Cartridge release candidate, but for now I have put this up on GitHub, along with the commented source. All written by me, by hand. No sloppy AI coding, just some hopefully not-too-sloppy human coding.

If anyone wants to give it a go on a real unexpanded VIC20 or your emulator of choice, let me know how you get on and if you have any suggestions or feedback, or any other games you think could be similarly reworked.

Adverts

The VIC20 Penultimate Cartridge +3 DCR is available now from the Future Was 8 bit.


All Tynemouth products are still available, and I can ship worldwide.

Including the limited edition 10th anniversary recreation of the very first Penultimate Cartridge:


International shipping is a bit complicated at the moment, so if you want to order from outside the UK, please contact me using the contact link at the top of this page.

See here for more information:

Sorry to have to do this, and I know this is going to affect sales, but please understand it is the only option I have right now.


Patreon

If you enjoy posts like this, you can support me via Patreon, and get access to advance previews of blog posts, and exclusive posts.

You also get progress updates on new projects and other behind the scenes updates, as well as access to my Patreon only Discord server for even more regular updates, and to discuss your own projects.

Sunday, 4 October 2026

Penultimate Cartridge +3 DCR V7.70

A preview my wonderful Patreon supporters got back in July:

This week I have been mostly working on the Penultimate Cartridge.

Every year or so, we decide it is time to refresh the games list, this time we have a few new games to add, including the great Thrust-like but utterly unpronounceable Gravzronox from Misfit (which TFW8b refers to as "Gaviscon" as he has given up trying to pronounce it).

Also from Misfit, the upcoming game which is not called "Doctor Michael Portillo".

There are also hints that we might have something new from Hewco, and one or two from me, including the VIC20 version of Perilous Swamp, and something else I started ages ago that I must get around to finishing.

Edit: this was referring to my rewrite of TimeBomb in assembler.

Making Space

The problem is, the Penultimate Cartridge is full. We have two megabytes of EPROM space, providing about 300 titles at the moment (I haven't counted them in a while, but that works out an average of about 7K each, so it sounds about right).

Edit: the previous release has a total of 241 titles in the A-Z list, not including adventure games, board games, paddle games, utilities and programming tools, all of which are on separate menus.

It usually comes down to what games can be removed to make way for the new ones. Sometimes we find one that have managed to avoid being culled previously as they are still quite good, and ones that probably should go, but we have to keep because of historical significance etc.

For example, in the last release, we finally got rid of the "official" version of Q*Bert, because it really isn't very good.

No effort is made to deal with colour clash, simply adding a black square into the yellow diamonds when you hop onto them. It was also NTSC only with no adjustment for PAL systems.

We tried to keep that because it was Q*Bert.

In the end, we have Topper, which is a much better version.

Even Max is better.

Both better versions of Q*Bert than Q*Bert, so it went, and that was only an 8K ROM.

The same sort of rules apply, so we have been going through trying to find space for two 32K ROM games, a couple of 8K games and potentially more.

We almost got to the point of considering removing some of the less visible things.

Things like the text adventures and the paddle games are both on separate menus rather than the main list.

One target was Pinball Spectacular.

Not a bad pinball simulator, but it was two 16K ROMs, one for PAL and one for NTSC, which seemed to be very different internally, with not much direct commonality.

Other games where there were PAL and NTSC versions turned out to be a handful of bytes different, and I was able to store the NTSC version and patch those few bytes to create a PAL version from the menu program when it was launched.

So Pinball Spectacular in total was 32K. It that was to be removed, that would get us one of the new games, what about the rest?

An Idea

Then I had an idea.

I had previously been able to make some space by using a program called Exomiser to compress some of the programs, but it was only able to deal with PRG files from 8-24K, and we found that it didn't work on some of the programs we tried, and others were barely reduced in size, but where it did work, it worked well, some games went down to less than half their original size

I was looking through at some of the older cartridge images in there, ones from the 1980s, like Avenger and Donkey Kong etc.

Some of those looked to have space in them, or runs of $00 or $AA of $FF etc.

I wondered if I could use a simple compression algorithm like Run Length Encoding (RLE) to compress these files.

This is an old technique where you look runs of repeated characters, so a run of twenty $FF characters, could be replaced with a single $FF and a count of 20.

That works really well with data which is only long runs of the same character, large monochrome bitmaps for example.

The worst case is all the characters are different, so you get 1x $17, 1x $0F, 1x $12, 1x $0C, 1x $40 etc. Best case is they are all the same character, so you get 256x $42.

With a 256 byte data block, the best case is 2 bytes, a massive saving, but the worst case if 512 bytes, double the original size.

I tried this out and it was pretty awful, most of the data blocks were over 500 characters.

Even in the cases where it was sort of effective, it only barley did better than a straight copy.

A few cases were a bit shorter, but certainly no two-byte results.

Another Idea

Then I had another idea.

Why don't I process the 256 bytes blocks, and if the compressed length is >= 256 bytes, then I set that block as a straight block copy. If it is < 256 bytes then I store the RLE version.

On decompression, I will have a table of each block type, start address and destination.

It will either by a straight block copy or an RLE decompression.

I tried it.

It was rubbish.

All but two of the blocks were straight copies, and with the overhead of the block table, the file was larger than before.

A Third Idea

The third idea burned down, fell over, and then sank into the swamp.

The Forth Idea

But the forth idea, the forth idea worked.

It is a little convoluted, but basically I need to have an 8K block of ROM at address $A000 to run the game.

I can't Exomise that as it's not a PRG file and doesn't have the normal load addresses.

But, what if I create a program. A program which consists of a small copy routine, then an 8K block of data.

All* it will do when it runs, is copy the immediately following 8K block of code up to $A000 in RAM, then poke at the Penultimate cartridge to turn that 8K block read-only and reset the VIC. When the VIC resets, it sees a cartridge ROM signature in the right place at $A000 and runs the game.

(* not quite all)

I put that together as a test and ran it, and it decompressed to 50% of the original size.

I tried it, and it ran, took a second or so to decompress, you could see the tell-tale flashing A in the bottom right hand corner. I had arranged it so that it would not clear the screen, so the LOADING message still started there.

And then the game started as if it was running from a cartridge.

Great, it turns out there are quite a lot of cartridge games that this could be applied to.

I tried a few more games and most of them were going down to about half.

This time it was right, it would work, and no one would have to get nailed to anything.

A Bonus

There is a little bonus with this. 

I mentioned previously that I was patching some of the PAL/NTSC ROMs, well, now I have this little loader program running and copying the cartridge image into RAM.

That is an ideal place to put the patching code. I can do a simple test to read the VIC 20 ROM and check what version it is an then apply the patch if necessary, before making the RAM read-only. (RORAM?)

A quick refresher on the way the VIC20 deals with screen positioning:

It doesn't.

Well, rather it can, but it does not initialise anything when a cartridge is detected, so it is down to the game designer if they call the standard KERNAL routines and get the standard size screen, or if they do it themselves.

Glossing over lot of detail, the two relevant registers in the VIC chip, are $9000 and $9001. These contain a horizontal and vertical offset of the screen respectively. Basically, the width of the left border, and the height of the top border. How far the top left character in the text area of the screen will be from the top left corner of the actual screen.

On a normal VIC when it boots to the BASIC READY prompt, the values will be $0C and $26 for PAL.

And $05 and $19 for NTSC.

If you happen to put an NTSC KERNAL ROM into a PAL VIC, you would get the screen in the wrong place.

And vice versa.

There is a table of default values in both versions of the the KERAL ROM at $EDE4. And a routine at $E518 which will copy those into the VIC, setting up the normal screen.

Some games will call the routine to setup the VIC to the default values.

Others will read the table and use the values to determine if this is a PAL or NTSC system then apply their own values.

The reason many did not, or could not, use the default values, is the offsets change depending on how many rows and columns you have the screen set to.

The VIC is very configurable, so you see games going to all the extremes.

Some tall and thin, some short and wide.

Some max it out to get the most screen area, so much so they don't fit onto the smaller NTSC window.

Many just setup the VIC how they want and if you happen to be in the wrong region, it is going to be in the wrong position on the screen.

Some games, particularly NTSC cartridges, had the option to use arrow keys or sometimes the joystick (or in one case F5 and F7) to adjust the screen centering to suit your system.

All of this could have been avoided if they had a well documented and well publicised KERNAL function you could call that would setup the screen for a given row and column size and set the appropriate offsets for your region, either by calculation or lookup table.

Since I was looking at writing code to patch the games that already had PAL and NTSC versions, this was also an ideal place to patch games that did not have both PAL or NTSC versions.

There were many games, including things like Centipede, that did not have a PAL version, or any adjustment, so with a patch as part of the loader, I can bring many more games that were previously not available in the other region.

I could also pre-set the starting points for games that had the arrow key or joystick adjustments so they would start in an appropriate position for the current region.

User Experience

TFW8b was initially a little concerned that the decompression delay might affect the user experience, but with this change affecting more than half of the games I was looking it, it changes the user experience it was previously:

1) Select Game

2) Load Game

3) Adjust Screen

4) Play Game

It is now:

1) Select Game

2) Load Game

3) Game Decompresses and Patch if Necessary

4) Play Game

I think that is an acceptable swap. Ideally, the decompression step would be eliminated, but unless more storage magically appears, this seems the best option.

It also freed up an awful lot of space in the cartridge.

Enough for the two new 32K games, and about 8 more 32K games (or 32 more 8K games).

(N.B. we did find a number of nice recent games from one author that we wanted to add, but unfortunately we could not get in touch with them so they were removed from the cartridge at the last minute)

That should keep us going for this update and the next one or even two, before the Penultimate +4 eventually appears in a few years with some yet to be imagined vast storage data cube.

Update: Totaliser Results

The A-Z list does not include adventure games, board games, paddle games, utilities and programming tools, all of which are on separate menus.

The previous release has a total of 241 titles in the A-Z list. Removing NTSC-only, that is 224 on PAL systems, and without PAL-only, that is 190 on NTSC.

The updated release has a total of 245 titles in the A-Z list (243 on PAl systems, 215 on NTSC)

You can see TFW8b's new video showing the updated cartridge in action on the You Tubes (look out for the flashing letter A bottom right of the screen during loading).

Adverts

The VIC20 Penultimate Cartridge +3 DCR is available now from the Future Was 8 bit.


All Tynemouth products are still available, and I can ship worldwide.

Including the limited edition 10th anniversary recreation of the very first Penultimate Cartridge:


International shipping is a bit complicated at the moment, so if you want to order from outside the UK, please contact me using the contact link at the top of this page.

See here for more information:

Sorry to have to do this, and I know this is going to affect sales, but please understand it is the only option I have right now.


Patreon

If you enjoy posts like this, you can support me via Patreon, and get access to advance previews of blog posts, and exclusive posts.

You also get progress updates on new projects and other behind the scenes updates, as well as access to my Patreon only Discord server for even more regular updates, and to discuss your own projects.