Register a SA Forums Account here!
JOINING THE SA FORUMS WILL REMOVE THIS BIG AD, THE ANNOYING UNDERLINED ADS, AND STUPID INTERSTITIAL ADS!!!

You can: log in, read the tech support FAQ, or request your lost password. This dumb message (and those ads) will appear on every screen until you register! Get rid of this crap by registering your own SA Forums Account and joining roughly 150,000 Goons, for the one-time price of $9.95! We charge money because it costs us money per month for bills, and since we don't believe in showing ads to our users, we try to make the money back through forum registrations.
 
  • Locked thread
Mastigophoran
Oct 1, 2016

Not exactly immortal...
but close enough
Hello Octojam fans and Chip-8 aficionados. Or similar, anyway...

It is my great pleasure to present to you a new feature for this year's Octojam. As you may have read in the What's New This Year section, last year compatible classic Chip8 games were shown running on real 1970s hardware, thanks to Doug Crawford, a retrocomputing hobbyist who happens to own a COSMAC VIP and is also a good sport! This year, we have taken a giant leap into the future to expand our hardware support...

The year is 1991. The graphing calculator has emerged as the platform for idle minds to express themselves. People still use newsgroups to exchange ideas and information. The HP-48 calculator has made itself known as one of the popular devices of the era. Yadda yadda yadda. Superchip:



This year, InternetJanitor and I have conspired to obtain an HP-48. You may remember years past that there was some conversation about superchip - we didn't really know much about how it performed on hardware, how fast it might be able to run, how it really worked. This year, all that has changed. Several months ago I obtained a lovely example of an HP-48S - the first (and cheapest & slowest) HP-48 calculator created, in about 1991. Around this same time, Andreas Gustafsson created a Chip8 interpreter for the calculator (called Chip-48) - this was a standard Chip-8 interpreter. Subsequently Erik Bryntse expanded this program and created Super-Chip, initially released as version 1.0 and later a version 1.1. The spec that you and everyone else are familiar with is that for 1.1, which added the scrolling operations as well as speeding things up quite a lot.

Since then we've discovered quite a lot that we didn't know about superchip. I've tried to document everything I've learnt about it over on github here. This year, I'll be supporting the jam by running any superchip compatible games on my HP-48, and so it's important to work out what compatibility really means. Kinda as a hobby, I have been working on modifying the superchip 1.1 binary for the calculator to create a version with far fewer quirks, so that more programs can be run on it (especially those from previous Octojams) - I've called this version Superchip C.

At current, I have the following available to me: Chip-48 (c48), Superchip 1.0 (sc10), Superchip 1.1 (schip) and Superchip C (schpc), and they display the following quirks.

For most intents and purposes, Chip-48 and Superchip 1.0 behave identically, excepting that sc10 has all superchip instructions except for the scrolling operations. Please pay attention to bolded sections.
  • <<= and >>= modify vx in place and ignore vy.
  • load and store operations increase I by number of registers - 1.
  • clip sprites at screen edges instead of wrapping.
  • 4 high bits of target address determines the offset register of jump0 instead of v0.
  • 16x16 sprites work in hires mode only.
  • Roms can only be 3583 bytes maximum (1 byte remaining).
  • No hex characters in large font
  • The buzzer actually does make a noise that I will have to hear with my ears.

Superchip 1.1 expresses the following quirks:
  • <<= and >>= modify vx in place and ignore vy.
  • load and store operations leave i unchanged.
  • clip sprites at screen edges instead of wrapping.
  • 4 high bits of target address determines the offset register of jump0 instead of v0.
  • 16x16 sprites work in hires mode only.
  • Roms can only be 3583 bytes maximum (1 byte remaining).
  • No hex characters in large font
  • Sprite collisions will store number of rows that collide in vF. Test vF <> 0 instead of vF == 1.
  • Sprite rows that run off the screen downwards vertically will also be added into vF, even if sprite row is empty.
  • The buzzer actually does make a noise that I will have to hear with my ears.

Superchip C (currently) expresses the following quirks:
  • clip sprites at screen edges instead of wrapping.
  • 16x16 sprites work in hires mode only.
  • No hex characters in large font
  • The buzzer actually does make a noise that I will have to hear with my ears.

If you make a game using superchip or below instructions this Octojam, I should be able to show it running on the HP-48. You'll get bonus points from me if you opt to support either of the original Superchip 1.1 or 1.0 binaries from 1991 - you'll need to enable the relevant quirk modes in Octo, or if you have enough space in your rom, we can work out how to make it compatible. You'll get even more bonus points if you manage to make a game that works with the more unusual quirks, perhaps even try to make use of them. You'll get even MORE bonus points if you manage to find something else that is broken in Superchip that I so far have not! I hang out on the #sagamedev IRC and am on the sagamedev Slack server as Chromatophore, if you want to double check compatibility at any point during the jam or just get more information about what I've been up to. There is a lot of information on my github about the individual quirks and how they were discovered, and how I worked out how to fix them for Superchip C, but I'm more than happy to talk about them and anything else I've discovered if anyone wants to know about them. I'll be posting more here about my setup and what I've learnt, more than likely.

I talked a little about not knowing how fast schip is earlier, but didn't expound on it. Thanks to taqueso's earlier posts and creativity, we actually have a benchmarking tool for Chip8. I took this and slightly modified it to work on the HP-48. There is a possibility I have upset it's calculations somehow, so I'm going to run the original version with Superchip C later, but as of right now, ballpark speed figures for superchip are 0.8kOps in lores mode, and 1.3kOps in hires mode. This is the rough equivalent of 14 cycles/frame and 20 cycles/frame respectively. However, on real hardware, graphical operations are the slowest operations you can perform (this applies to the VIP too), and CMark77 is entirely graphical - it would be a little helpful if we had a more computationally oriented benchmark to compare with as well, as most likely the calculator is running faster than the figures above: for example, my superchip game from last year, Octopeg, is quite playable and feels like it's running at around 30 cycles/frame. There is also another version of this calculator, the HP-48G/HP-48GX and HP-48G+ - these calculators have a CPU that is twice as fast as the 48S, but are not contemporary with when Superchip was written - they're only about 2-3 years newer though so it isn't unreasonable. We're currently not sure how much faster superchip would actually run on those devices. Hopefully this information is helpful to you when designing your games.

Adbot
ADBOT LOVES YOU

Mastigophoran
Oct 1, 2016

Not exactly immortal...
but close enough
Well done everyone who managed to get their submission together, especially in the small hours of last night! There's some really great looking games this year! Here's a quick inventory based on a rough examination of the submissions:

1970s era (COSMAC):
Chipquarium - aquarium simulator
Ghost Escape - Army alignment simulator, great story.
Fuse - Keep the fuse burning by adding more (Apparently a pipe dream clone)
8ce 8ttorney - Phoenix Wright style game, has a 2nd and 3rd disk
Shooth3rd - Shot targeting puzzle game. Creator also apparently has access to a COSMAC VIP.
MasterMind - "A solid implementation of mastermind"
Monty Hall - a cute demonstration of the Monty Hall Problem.
(outside system spec:)
Planet of the 8s - side scroller where you dodge 8s. Has a high cycle speed but might be ok.
Hedgehog the Drug Dog - drug sniffing pattern matching game. Has a high cycle speed but might be ok.
Snake - an unfinished snake game, has a really high cycle speed.

1990s era (SUPERCHIP):
Black Rainbow - classy SCHIP roguelike.
Sens8tion - an SCHIP gun kata game.
(outside system spec:)
Knight - Chivalry simulator.
Binding of COSMAC: Octoberth - An Isaac clone

20XX era (XO CHIP):
OctoCrawl - a roguelike game with a massive amount of code and content. Really looking forward to a Post Mortem on this one.
Kesha Was Biird - Holy poo poo, we have a sequel to Kesha Was Bird - a Little Awful Jam game from earlier this year. (These guys obfuscate their roms so no source code to review here)
Skyward - a gorgeous and comfortable to play vertical platformer.
jub8 - A terrifying rhythm game, with additional links/disks for additional songs.
(OctoRoads - a game that missed the deadline but was shared on IRC.)

Hopefully this list is helpful in some way, Superchip wasn't a popular target this year, I think I'm going to be going through the Octo back catalogue and show some of the previous years' games.

Mastigophoran
Oct 1, 2016

Not exactly immortal...
but close enough


Greetings fellow Octonauts!

With Octojam 4 just around the corner, I feel now is a good time to post this as I'll be on holiday! After last year's implausibly successful SuperChip ShowCase, the HP48 calculator will be returning to run your SCHIP and computationally demanding CHIP8 games on real hardware.

This year, our range of calculators has expanded from 1 to 2, now including the mighty HP48-GX, which packs twice the CPU power of the HP48-S calculator we used last year. This increase in power is held back a little by sharing the same RAM frequency, but still translates to around a 50% boost in speed in the SCHIP interpreter on the G series calculators, the details of which can be found here, however the crux of it is as follows:

As you may know, unlike in Octo, on both the COSMAC VIP and the HP48 SCHIP platforms, some instructions just take longer than others. The worst offender that you're likely to be doing a lot of in a main loop is the sprite command. The more weighted towards or away from graphics your game is, the slower or faster you can expect it to run. Here is an advisory as to the speeds you might want to set Octo on to get an idea of how things will run on the GX calculator (You may need to provide a custom GIST)
  • 64x32 lores, graphics benchmark speed: 17 Cycles/Frame
  • 128x64 hires, graphics benchmark speed: 33 Cycles/Frame
  • ALU operations benchmark speed: 50 Cycles/Frame
Note that lores graphics ops tank performance big time. A fairly computationally intensive game with simple but hires graphics will run at the higher speeds. My Octojam 2 game, Octopeg, is an example of a game that actually runs very well on the calculators - it depends on performing quite a lot of mathematics to move a single 2x2 block around a hires screen. This year's banner is an example of one that does not fair very well at all, due to operating in lores, and aiming to redraw several large sprites every frame.

As before, I have all the period interpreters that will run programs as per the relevant quirks modes Octo has (and other issues) as well as SCHPC, which more closely mirros the COSMAC, and thus Octo's quirkless behavior which should be able to run anything if the quirks are getting you down. If you have any questions and hope to make a game that will run on hardware, I'm on the SA GameDev Discord and IRC, and am always happy to answer questions or offer any help, about SCHIP or anything CHIP8 related really. I've made quite a lot of notes on the oddities of SCHIP, and compiled them here and the full list of key notes can be found in my post from last year here, the most germane of which are reproduced (and augmented) here:

Superchip 1.1 expresses the following quirks:
  • <<= and >>= modify vx in place and ignore vy.
  • load and store operations leave i unchanged.
  • clip sprites at screen edges instead of wrapping.
  • 4 high bits of target address determines the offset register of jump0 instead of v0. For example, supplying address 0x420 will use the value of V4 instead of V0.
  • 16x16 sprites work in hires mode only. 0 height sprites will draw 8x16 sprites in lores mode.
  • Roms can only be 3583 bytes maximum (1 byte remaining).
  • No hex characters in large font
  • Sprite collisions will store number of rows that collide in vF. Test vF <> 0 instead of vF == 1.
  • Sprite rows that run off the screen downwards vertically will also be added into vF, even if sprite row is empty.
  • The buzzer actually does make a noise that I will have to hear with my ears. I can turn it off though.
  • Memory space is not initialised 0 unless specified as such in your ROM. Low memory (0 to 0x1FF) will be hex characters and then noise.
  • Scrolling left/right in lores mode will move effectively 2 px, instead of 4px. Vertical scrolling also divided by 2, half pixels should be avoided!

  • Locked thread