Posted: February 18, 2021
I decided to take a break from my current projects and write a game for the Intellivision (a console made by Mattel in 1979).. in Java. This is a simple Breakout clone that compiles Java .class files with Java Grinder and assembles with naken_asm.
The game can be played with any Intellivision emulator including jzIntv and Mame. I haven't yet tried to put it on a ROM to play on a real system since I don't have a real system and I'm not sure how to deal with the 10 bit memory system.
The game can be downloaded here:
Feel free to spread it around including adding it to Intellivision retro systems.
Related Projects @mikekohn.net
Here's a video of the game in action. YouTbue: https://youtu.be/XkbsycXoFlU
A few years ago I was tipped that the CP1610 CPU in the Intellivision system is very strange. After looking into the instruction set it seemed pretty easy to add to naken_asm so I threw it in really quick. A couple weeks ago I finally added tests for it and then decided to test it out by support in Java Grinder. Released in 1979, it's not the oldest system supported, Joe Davisson added Atari 2600 support with pretty cool game a few years ago, but it's probably the second oldest system.
The Intellivision ROM code uses 10 bit memory, which for data makes certain things quite awkward. Three bits are always wasting when storing text in ROM and even 16 bit integers require two 10 bit addresses. Scratchpad RAM in the Intellivision is 8 bit while "system RAM" is full 16 bit. There are 16 "general purpose" registers that aren't quite general purpose. The r7 register is the program counter, r6 is stack, r4 and r5 auto increment if used for indirect addressing, and sometimes r0 can't be used for indirect addressing. Good stuff. An SDBD instruciton can be used to deal with 8 or 10 bit memory to load 16 bit registers. Oh yeah, there's also no "OR" instruction.
Java Grinder uses the 16 bit system RAM as the Java stack and stack for storing things before function calls. The r3 register is used to point at local variables in 8 bit scratchpad RAM. The "int" size is also treated as 16 bit. I pretty much added enough support in Java Grinder to make this game, but certainly it can be expanded.
The system has 8 sprites which I didn't add support for in Java Grinder. There is support for 3 voices of sound and using the hardcoded graphics cards from the GROM memory. There's also a GRAM memory area which is a little awkward since I believe it can only be accessed during the VBLANK period. There is no support for that memory.
The source code to the game is available in the Java Grinder repository on GitHub: Breakout.java
I ended up using jzIntv to develop the game. It quite impressive with a pretty nice debugger. Made building up Java Grinder a lot easier than some of the other systems.
Copyright 1997-2021 - Michael Kohn