I was quite surprised to read in a forum group about some gent who seemed utterly confused as to how to configure his Commodore 64 and Retro Replay network device. He did list a number of other devices and asked for help with them all! They were mostly network-related issues.
I tried to offer assistance but as he said, he only spoke a limited amount of English, so the conversations via email tended to be confusing, to say the least. I went through how to configure his setup and apply the same principles to all his hardware and networking devices. He wanted to know why it just didn’t work like his IBM compatible PC did, then started to demand I go through a step by step process on how to check everything, just so he could just follow what I had written.
Now not knowing his setup I had to make some generalisations and best guesses. I did this and went through (as best as I could) a step by step process with Contiki first, from how to download it, then put the file on an SD card to run the software. After all this effort he reposted the same problems on the forum group again! It was as if he really wanted someone to go to his house and just set it all up for him while he sat back and drank tea and watched TV – he had no inkling to be motivated. I even recommended some beginner's books about networking and he refused to even look at them. I suggested if he learnt the basics he could actually answer all his questions himself. He didn’t want to do that, and wanted to know why there were no guides on the Internet to set up the equipment. The emails seemed to turn nasty and I had to assign him to the spam list, (he was also banned from the forum group. And the moral of the story, is …..
Well, you need to help yourself as much as cry for help from others. Most people are happy to help, but you do have to put at least “SOME” effort in yourself.
Now with all that negativity in my astral plane, I phoned a friend and explained about “this guy's” problem. My friend said he never had Contiki working with Retro replay and RR NET! So I went round and set this up for him – although he was more interested to learn, and I watched him set up warp copy and copy files. Result! At least something went in; I was wondering if information wasn’t actually needed then to configure the software, and my friend said he had a friend with the same problem, although my friend helped his friend set up, much to my relief!
So after that lengthy intro we have a “how to setup Contiki and Retro Replay with RR net” to browse the Internet. Of course, with this knowledge you should be able to apply the information to other networking setups and software on your machines. It also could apply to other Commodore and hardware – not just the Commodore 64, so it’s a worth read. It does go to show that things one person finds easy can seem overwhelming to others!
A catch-up on the CBM prg Studio and how the program is building up into a must-have programming environment for Commodore 8-bit machines. We also have the Contiki configuration and setup guide for those with less hair to pull out than myself. We have a Q and A session with the designers of the ARMIGA project, (you may remember this was reported as a news item in Commodore Free) another Games that shouldn’t have been (I really need an award or logo properly designed for this). Even more VIC releases and I am still maintaining that 2014 is the year of the VIC.
I have also been told that one user is trying to set up a VIC-only release company , releasing VIC titles on tape, disk, or other format. This is definitely needed for the VIC users. Lots of VIC titles tend to be left or ignored and the ones this year and towards the end of 2013 have just been amazing. Oh, and before I close I should just like to say thanks to Richard for yet another cover tape. Just when we thought it was all over...
Nigel (editor Commodore Free)
Mobile (ye like in your dreams)
Tape loader by Daniel Kahlin
“Good heavens. I thought Issue 80's E-Tape was going to be the last E-Tape for Commodore Free”. Suddenly things start to hit me, on my 1541Ultimate 2 there is actually plenty of stuff to put on to future cover tapes. So the life of the cover tape will be living a bit longer. I am hoping this is also good news for you all.
Secondly I have had to rush with this issue's cover tape again, due to problems with time. Once again all programs have been mastered with the R-Loader system.
So then what is in store for you in this issue's E-Cover tape? Well, yet again it is devoted to mainly SEUCK games. We have two of the remaining SEUCK compo 2014 entries for you to enjoy. Also unearthed is Cycotics by Carl Mason and an exclusive look at the first level with a playable preview of 3000 Kung Fu Maniacs. And basically that's all.
So what are you waiting for? Press SHIFT+RUN/STOP, press PLAY on tape and let those flashing borders roll.
(C) 2014 Gibranx
Travel back in time to 1941. The Second World War is still in operation. A series of bombardment attacks have taken place on your home island. Fortunately during that time you and your family were safe inside the air raid shelter. The enemy planes missed your hangar, so you decided, “That's it.... I'm going to get you!” You and a friend exit the air raid shelter and set off in your planes to stop the enemy forces.
As part of the Allied forces, you must thwart the enemy forces of the dictator and destroy the biggest threat of this war. A giant machine. To be able to complete this mission, you must fly through the skies, shooting, ducking and diving. Avoid the enemies, and shoot them down long or short range. If you destroy the mean machine, you'll find out what really caused the destruction of your island.
(C) 2014 SeaSoft
In the year 3000 a new planet was discovered. It was very similar to our planet Earth, and so it was called "Earth II". Within 100 years, the richest part of the population of the Earth emigrated to Earth II. The poor were still living on an already wasted planet but, just when they were losing their hope in the future, some young brilliant scientists started searching for a way to clear the water and the air, to improve the agriculture and to get new sources of energy. They finally succeeded, and brought the planet to a new life. In the meantime, the people who colonised "Earth 2" were almost starving: just as their food supplies were almost over, they found themselves unable to work and to produce food on their own. At that point, they decided to go back to their old planet. Soon they discovered that a hostile alien race was planning to destroy the population of both Earth and Earth-II!
You've been enlisted to control the most technologically advanced space-fighter, the only effective weapon in the hands of the Earth-II inhabitants. You must fight against the aliens in three different stages.
At the end of the third stage you must fight against the enemies' ultimate weapon; if you destroy it you can fly back to your beloved Home Planet.
This game is for 1 or 2 players.
(C) 1996 by Carl Mason
|Game design||Carl Mason|
It is a tough life cycling from work, especially when there is so much traffic on the roads and annoying cyclists blocking your way. Only one thing for it. Get the stereo on, play some garage, techno and bassline. It's time for PROFESSIONAL CHAV SIMULATOR … Er, no. It's Carl Mason's SEUCK classic called Cycotics. It is a stylish vertical scrolling SEUCK game that has some pretty nice graphics.
You and a friend can control a cyclist in either joystick port. The idea of the game is to simply cycle through the streets, and race all the way to the finish causing as much havoc as you like in order to score bonus points. The trouble is that there is a lot of traffic in the way. Also you cannot cycle over buildings. There are other cyclists and people who get in your way. You can knock them off their bikes for bonus points, but don't crash into them otherwise your bike will get trashed. You will have a limited amount of attempts to get through to the finishing point. Can you or a friend make it, or will both cyclists decide to give up? Good luck!
(C) 2014 Psytronik Software
|Game design||Alf Yngve|
|Add. Programming||Richard Bayliss|
To end this issue's short E-Tape comes an exclusive playable of 3000 Kung Fu Maniacs. This is a preview of the very first level, in which you play the Master of Awesome. He is given a letter from the Master of Exposition. The Master of Exposition puts the Master of Awesome on a quest to deliver a letter to the Ninja Master. Unfortunately for poor old you the streets are not safe. They are crammed full of evil ninjas. Those guys just don't give up. Using a joystick in Port 2 you must Guide the Master of Awesome through the streets, defeating the evil ninjas. Watch out as those Ninjas are really powerful. Bare fists and kicks cannot be enough at times.
Thankfully, there is help at hand. A scroll will appear on screen. If you pick the scroll up, you will gain a power up. However, it won't be everlasting because if you get hit by a Ninja. A life will be lost – and so will your power up. The power ups are as follows:
After you reach the end of the playable demo, it will loop again. However here's what is in store for the full game:
The full game will be available sometime in the summer / autumn of 2014 as part of the Kung Fu Maniacs trilogy. On disk, tape or digital download from http://www.psytronik.net.
This issue was yet again dedicated to SEUCK games. This was done in a major rush, due to time. However, it is time to look forward to what will be on July's E-Tape.
The tape shall be going back to normal. There is already a new exclusive SEUCK game in the works, which sadly hasn't made it to this issue in time. So it'll be on the next tape. There will also be a mixture of PD games and utilities.
Do you have anything you would like to submit on to the next cover tape? If you do, then please email it to firstname.lastname@example.org or Commodore free, we will be grateful for your support.
See you next month.
Lovablechevy has created the HandyPNP. The Handy Plug "n" Play is a system which features a 3.5" screen with controls, batteries, and a universal connector. You plug in a cartridge that contains a complete game system. The system supports the C64 DTV and other game systems.
Ray Carlsen now offers three versions of the Computer Saver. There is the $25 Computer Saver module that a user can install in their own computer, there is the $35 Computer Saver cable (without LED indicators) version, and there is the $50 original, case-mounted Computer Saver (with LED indicators). To read more about Computer Saver and to see pictures, go to:
Fresno Commodore User Group
Carsten Jensen has written an article on how to replace the power switch in a Commodore 1084 or 1081 monitor. With a few minor adjustments, he successfully repaired the monitor with a replacement switch.
Love it or hate it – the BASIC programming language is going to stay around for some time to come. It’s now celebrating its 50th anniversary (according the register article)
If you want to read more, then head over to
David Horrocks has release another update to the HOXS c64 emulator. The emulator tries to mimic the Real Commodore 64 as closely as possible.
Seanser has released BMP2MC a bitmap-to-C64 multicolor converter (5 colours). The program runs in Windows.
Relaunch64 is an IDE (text-editor) for C64 assembler-coding on Windows, Linux and Mac OS X. Relaunch64 has a clean and intuitive user interface, yet it offers many features that make coding faster and easier.
Relaunch64 is a program (text-editor) for C64-asm-coding.
Response of Darklite has released his fourth pure SID album.
All music made for the old-school 8-bit computers: Commodore 64
Immediate download of 8-track album in the high-quality format of your choice (MP3, FLAC, and more). Paid supporters also get unlimited mobile access using the free Bandcamp listening app.
The television show shows Commodore 64 games being played. They were recorded with a live chat, so you can see the creator chatting with tweeters and the comments being made. He emailed me the links to put in Commodore Free, so enjoy!
Another release for the SEUCK coding competition 2014, this one has 3 stages to complete
At the end of the third stage you must fight against the enemy's ultimate weapon; if you destroy it you can fly back to your beloved Home Planet.
Game corner is a disk based magazine about new games and cracking games. The games featured are 2048, Arcade Football, Blob, Bomb Ace, Bouncing Ball, Castle Boy, CC65 Chess, Chickhack, Color Flood, Combination Deluxe, Cosmos, Crazy Dog Racing, and many more. The magazine is released by Laxity.
World War 2 is in operation. A series of bombardment attacks have taken place on your home island. Fortunately the enemy planes ran out of bombs and missed your hangar. You and/or a friend are a fearless pilot of an English World War 2 fighter plane. As part of the Allied forces, you must thwart the enemy forces of the evil dictator. To be able to complete your mission – and maybe get a reward for it – you must take a long flight to another city, in a cover-up attempt to put a stop to this war once and for all. Your battle will take place in air, across land and sea. Joystick port 2 controls a plane which can only shoot upwards, whereas joystick port 1 can shoot directional fire. Good luck pilots.
After the defeat in Transylvania of Mozgorioth (the evil vampire in Vampire Hunter), Astaroth, brother of the beaten monster, is in New York. In an attempt to get his revenge on Adam for killing his brother, he wants to kill all population using an ancient poison in the city sewage system. Playing as Adam, you must destroy all the evil forces in New York, and kill Astaroth, who will be waiting for you in the theatre. You are the fearless Vampire Hunter.
Act-Otl has released a version of 2048 for the Commodore 64.
In the game you have to move blocks with numbers written on them around the screen. When you connect two blocks (with the same numbers) together the blocks are merged. The goal of the game is to achieve the number 2048.
You can now find 6058 games on this web page. New games added recently: Air Rescue (Ahoy), Alien Armada, Arena (Ahoy), Bellringer III, Bloodwheels, Codename Desert Storm, Conrad Dash, Cosmic Ark, Deep Star, Der Fall Sydney, Devil Ronin, Dodos Deep Doo-Doo, Flin Flon, Gigamaze, Grayhawk 2013, Guardian (Ahoy), Harrier Strike, Helsing’s Hunt, Humphrey, Hunt for Bubber’s Bathtub, Invert, Island of Secrets, and The Sydney Affair.
Mini-Mag is a German diskette magazine. In issue 07: Editorial, Forum, Interview: The Ryk, Hannover Classic Computer, Doreco#38, Block 'n' Bubble, Turbo Chameleon 64, PETSCII Editor 3 and a puzzle.
Re-Alienator is a new game for the C64 by Yngve created with Sideways Scrolling SEUCK. The music in the game was created by Aldo Chiummo.
The military base has been infested with hungry, slimy, green aliens. A time bomb has been set to destroy all alien life forms, but you must escape the site before the bomb detonates.
The website says this version was created with the Commodore 64 Pinball Construction Set. The gravity/physics seems a bit suspect, but it’s a playable version. Use a joystick in port 2 to play.
Just imagine if you could have instant access to a cartridge case for your Vic cartridge circuit. Well, now you can (hurray). Thanks to the wonders of 3D printing, you can just print out your own on demand. Joy and world peace will now be available at the click of a button
Csabo has released another game for the Plus 4 called Floodit
It’s a popular colour-elimination game, and like 2048, this variation is based on a Flash adaptation of the same name available from here http://floodit.appspot.com/ The object is to fill a multi-coloured screen of blocks starting from the top-left corner, reducing the coloured blocks to just a single colour by pressing corresponding colour keys 1 to 8 (depending on the difficulty level). You only have so many moves to achieve a 100% mark with 16 levels. You also accumulate points on each level with extra bonus points for 100% completion of any given level, which adds towards the total score. There is also a random practice mode which will give you a random layout to hone your skills on.
Csabo has released a new game for the Commodore Plus/4.
You have to move blocks with numbers written on them around the screen. When you connect together two blocks with the same numbers the blocks are merged. The goal of the game is to achieve the number 2048. The game is 16 Kbytes and compatible with both PAL and NTSC.
The commodore16.com site style has been revamped. The original web page was created over 10 years ago by Chris. The newly-designed website now looks much more like a Commodore C16 screen with custom 8-bit fonts.
Association WArMUp is proud to offer you the Chrysalis 3.5.1 for MorphOS 3.5.1.
This pack allows you to quickly obtain a complete pre-configured environment. This pack is not official; it must be installed just after a clean installation of MorphOS 3.5.1 (registered or not).
The ISO image is freely downloadable from the following link:
NetSurf is a small, fast web browser for AmigaOS 4 (and other operating systems). NetSurf 3.1 contains many improvements over the previous release. Highlights include much faster CSS selection performance, faster start up time, a new look and feel to the tree views (hotlist/bookmarks, global history and cookie manager), improved options handling, undo/redo support in text areas, and general improvement of forms. Also included are many other additions, optimisations and bug fixes. We recommend that all users upgrade.
Not really a shock to anyone who follows pop art or the Amiga, you will remember Debbie Harry and Andy Warhol were both present at the Amiga Launch. The Register carries a story about the finding of some of Andy’s art on floppy disk. You can read more by clicking the link.
new intuition.library now working
intuition.library v40.86 beta 4 (106 428 bytes)
BOH is a unique retro-flavoured puzzle-riddled dungeon you move around searching for the Evil Masters, who throw countless enemies at you and you must then face them in the final battle, various power-ups are scattered around.
"Marco Gregorio's Adventures to Unusual Places" has been released.
The game has 5 levels, 3 of them are location levels and 2 are walking levels.
The music is from Sound Terrific MOD compilation
The game has been tested on A1200 68030 50MHz clock on Marco icon.
You can download the game from here
News from The Register
Antique Code Show Xenon marked the beginning of a distinguished career for The Bitmap Brothers, legendary developers from the Commodore Amiga and Atari ST era. Overhead, vertically scrolling shooters were doing great trade in arcades across the land, and with its exposure on Saturday morning kids’ show Get Fresh (you don’t remember Gaz Top and Gilbert the alien?), Xenon was always going to do well.
Read more via the link below.
Buried in the midst of these (well it's item 4, but…) is the Famous OctaMED tracker. Some readers may be surprised that hit singles were crafted from the software!
The website says
Anyone who dabbled with music on the Commodore Amiga will likely still have a fondness for trackers......
Read more here
The Codetappers website has an interview with Galahad. In 1990 System 3 developed the game Putty Squad but the game was never released for the Amiga. Then, in 2013, System 3 announced the game would be released for modern consoles. Galahad contacted System 3 to offer his help and to make an Amiga version. You can now read how the Amiga version of Putty Squad was created.
Pierluigi Ceruttis (Fynsya) has developed an Amiga 3000 case for the Raspberry Pi. Made from strong impact-resistant ABS plastic and fits both model A and model B PI boards exactly, you can order one online
Ray Carlsen, Commodore repair technician, is building a small number of universal C64/128/VIC-20CR/Plus4 power supplies. Here are the details for the RC p.s.:
For more details and photos, go to
Check/money order preferred in USA. PayPal accepted for overseas orders.
Contact Ray at rcarlsen(at)tds.net
Quality. Durability. Ruggedness. Craftsmanship. These words all describe the Ray Carlsen universal power supply for the C64/128/VIC-20CR/Plus4. Though I've been testing prototype #2 for a few months, it has never let me down.
When I received it in the mail a few months ago, I was immediately impressed by its construction. It had a metal, vented case with striking black and white paint. It used a thick insulation over its heavy gauge output cable. It sat on 4 sturdy rubber feet. Inside, there was plenty of air space for the components - a new, modern 5VDC unit putting out 5 amps, a new, modern 9VAC unit putting out 1 amp, and the Ray Carlsen Computer Saver which cuts out the 5V line should it go over 5.40 volts. Everything was neatly, firmly screwed down to the metal case. There was no messy mass of wires, just an orderly placement of the wires. On the outside of the case was one LED which showed the power supply had power.
The power supply had the looks, but did it deliver the goods? A big YES! I've had it running for hours, and it barely emitted any heat through the vents on the case. In fact, the Commodore computer to which it was attached felt much warmer. Whether on a VIC-20CR or a C64 or a flat C128, it never failed. It endured the SuperCPU, a notoriously power-hungry device. Thus, it should easily cope with the 1541 Ultimate cartridge and even good, old Super Snapshot - both which need a little more oomph in the power department. Screen interference on the CRT monitor? None!
Ray hand-built it, testing and tweaking it until it met his critical standards. He showed me some oscilloscope screenshots of 5V it outputs -- just clean power. He also showed me the oscilloscope screenshots of a new power supply from a different company -- spikes all over the place... no clean power at all. In fact, that company's p.s. had such bad regulation that it varied from 4.9V to 5.3V.
Now the production model of the Ray Carlsen power supply has been released. Each power supply is hand-built and tested by him. The production model uses a slightly bigger, metal, vented case than the prototype, because his supplier had the other one on back order. The production model has an improved internal Computer Saver.
Reluctantly, I will return prototype #2 to Ray when I see him in the summer. However, I will then get the production model! I'm thinking about getting one for the C64/VIC-20CR and one for the flat C128. Then I'll be set for life. :)
I was quite surprised that a user on a recent mailing group has great confusion in setting up Contiki with his home network. I emailed the user and tried to help, although he seemed rather more inclined for me to go to his house and just set it up for him to work. It was as though he had bought the equipment but had little understanding of what it could do or even basic network knowledge to setup the device. He also said he didn’t want to learn, just have the device setup so he could “surf the web” with Contiki.
Although I sent countless instructions, even down to the point of “click this enter this”, “type this” – I am still not sure he understood or cared – all he wanted was someone to set the thing up for him.
I wondered how many other people are struggling. Hence the article, as an email to a couple of my friends reviled they had given up too, deeming the whole process too complex. So let’s see if we can shed some background knowledge about networking and how to set up Contiki.
So, a little history about Retro replay and the Retro replay network card (RRNET) Retro Replay, which was basically designed as a clone of a well known freezer cartridge. You press a button and get a menu on-screen, you can freeze the memory and then save it to disk or tape. The device had some header pins and this is where the RR net card fits onto. This means now your C64 has a network card and can plug into your router. It’s not wireless! It plugs in with a network cable.
Now assuming you have a pc connected to the internet you can start a “dos box”
On XP click start then run and then type cmd and press enter
Windows 7 is similar click the windows globe and in the box type cmd then press enter
Windows 8 from the tile menu start typing cmd then click the box for command prompt
In this box type ipconfig /all
This will show
Your IP address, router address, and network mask, amongst other items, should look like this:
Connection-specific DNS Suffix. : LAN Description . . . . . . . . . . . : Broadcom NetXtreme 57xx Gigabit Controller Physical Address. . . . . . . . . : 3C-A9-F4-69-13-8C DHCP Enabled. . . . . . . . . . . : Yes Autoconfiguration Enabled . . . . : Yes Link-local IPv6 Address . . . . . : fe80::f116:ad89:dd58:c415%12(Preferred) IPv4 Address. . . . . . . . . . . : 192.168.1.134(Preferred) Subnet Mask . . . . . . . . . . . : 255.255.255.0 Lease Obtained. . . . . . . . . . : 21 May 2014 07:58:59 Lease Expires . . . . . . . . . . : 22 May 2014 12:13:15 Default Gateway . . . . . . . . . : 192.168.1.254 DHCP Server . . . . . . . . . . . : 192.168.1.254 DHCPv6 IAID . . . . . . . . . . . : 305965556 DHCPv6 Client DUID. . . . . . . . : 00-01-00-01-19-F7-F4-01-F0-1F-AF-49-0D-CB DNS Servers . . . . . . . . . . . : 192.168.1.254 NetBIOS over Tcpip. . . . . . . . : Enabled
I am on windows 7 other versions may show less options but the options we “need” will be the same.
We can see the physical address; this is what the hardware manufacturer sets for our card, and it's unique to the card; you can ignore this. We see that the address was DHCP ENABLED – that is our IP address handed to us from the router. This would normally be the default. Again, each device on your home network need a unique IP address, shown here as an IP4 address. For our work, we can ignore anything that says IPV6
The network mask shows what network the clients are on. For us it’s just important to note the number and ensure we enter the same one!
The default gateway is how we would access the Internet (our gateway out). In our case this is also the router. The only other setting we need is the DNS server address. Contiki will only take one address, but that’s OK.
So from our Ipconfig listing we can start to fill in the Contiki setup. Print out this list or make a note of the following items :
You will need these to configure Contiki.
We now need to download Contiki operating system.
There are multiple versions as the software was upgraded and evolved over time, so I will look at two versions, and how to set these up with your system. This disk image is quite old, but I prefer this, as it still looks like an operating system. Grab it here http://csdb.dk/release/?id=14635
The direct link is here http://csdb.dk/getinternalfile.php/43087/Contiki-c64-1.2-devel1.d64.zip
Its Contiki, Version 1.2 Dev1
Download the file. Now you need to transfer the disk image to a real disk, so use your favourite method to do this, then run the program with
After a second or two the screen will load
I am only interested in the web browser, but once this is working the rest of the applications should be self explanatory.
So we need to:
A menu appears. Use the cursor keys to scroll down and from the list select Configuration.
The Config Editor will then load
We aren’t bothered about the top 2 options but we need to ensure Contiki loads the correct Network driver for our system, for the RR net you need to type
Under the option Net Driver
Now we start to enter our network settings usually I would use
For our Commodore, in Contiki, and any network (remember each device must have a unique number assigned to it) this makes the assumption there are less than 64 devices currently connected on your network. I think this is a fairly safe assumption for a home network.
For the netmask we would enter
Just as our ipconfig listing told us, the gateway or router address is
In our case the DNS server is our router
Now we are done, so we can save and close!
This version also has an easy configuration tool, and just like your PC can set up all this information for you with just a click, it’s called DHCP or Dynamic Host Configuration Protocol
To run it you would press F1 on the main menu then select Run program and type
But you still need to configure the network card to use the right driver first! Otherwise the DHCP tool will fail!
You can now start the browser with f1 to display the menu.
Select run program and type
The other thing to note is that there are other drivers on the disk for other network cards, so for things like THE Final Ethernet, you would load it in the config program with tfe.drv. Listing the disk directory will show what DRV or drivers there are – if you are using something else.
This is Contiki V2.5.
Download the program from here
Now this is simplicity itself
Using the information we gained from IPCONFIG command we can fill out the information on the website...
Or whatever your IPCONFIG command showed as your network settings!
Select C64 from the list make sure you select the correct Network card for your needs and complete image of disk 1
This configures the disk with our network settings and then downloads the disk!
However, you will see that a listing of the disk only shows a very small number of programs compared to the other version of Contiki OS.
You can run the DHCP.PRG to let this configure the network settings from your router (should you need to) if nothing is working.
Now all that’s left is to copy this to a real disk and load and run
Then run it
Also lets you download a second disk with the breadbox twitter client on it, but you have already gone through the basics so you should be able to use this without a problem. I do not tweet so I can't demo this for you.
I hope this has helped some of the Commodore Free readers who have been stuck with configuring Contiki.
Good grief! This seem to be a regular section in Commodore Free: new games released for the VIC! Anyway, I am sure it will make some of the readers happy! I have put the games all under one section but they all receive a review, so this month we have 3 new games. Someone said to me that this year is the year of the Commodore VIC, because of the quality (and not to mention) the quantity of the releases. I can’t argue with that. I would also say that 2014 is the year of the VIC. We start with a superb title called Bertie the Ball.
|Name||Bertie The Ball|
|Requirements||16k VIC-20 + Joystick|
|Tested||VICE 2.4 and real VIC (PAL)|
Description: an action-adventure / platformer for 16k VIC-20 computer. It's a tribute for the great C64 game called "Cauldron II: The Pumpkin Strikes Back"
What makes this game really stand out is the animation and gravity/physics on Bertie the Ball himself. When you watch the game on YouTube it doesn’t sink in that this is on a VIC. Some people have commented that the graphics look like a Spectrum game – I can say the game looks classy (that’s for sure). Loading the game up on a real machine is what’s needed, and to me the game looks like a C64 game release. It’s another game (where) if you hid the machine and said it was a Commodore 64 release, not many people would realise it was running on a VIC. The VIC pumps out a very weird tune, it’s more like a random collection of notes although, to be fair, it does fit the game rather well, and is actually well implemented. I can’t see many people dancing to this, though!
The game has as its main screen the ball (Bertie himself) bouncing up and down, with the music playing and the words, “Collect magic items and find the exit, and beware of monsters and sharp items.”
It’s a frustratingly easy game. Guide Bertie around collecting items, which sounds like it should be a “walk in the park”, but you need to come to grips with the control method and how the timed bounces work. It's all been implemented very well and the frustration is soon forgotten as you grasp the joystick for the famous “one more go.” I must have said that hundreds of times while playing the game. Once you leave the title screen the music stops and you are treated with in-game spot effects – Bertie “boings” as he bounces, and other items crash and “boing” as you run into them, or vice versa.
I’m not so sure it looks like a Spectrum game, as some people suggest, but it somehow reminds me of the BBC micro (but in a good way – I was a big fan of the BBC, especially from Elite and Frak). From the screen shot you would think the game was very simple; however, you need to see the game playing to experience the quality of this release.
A cute game that will frustrate and have your friends grasping the joystick from your hands to “show you how it’s done” – a lovely addition to anyone’s VIC collection, and proving once more, this really is the year of the VIC (I think we need a better slogan for that)!
|Description||A clone of iOS Threes for VIC|
The author has these comments:
You can shift the playfield left/right/up/down. If numbers collide they combine. If they are:
a) a 1 and a 2 giving a 3, or
b) two identical numbers (3 and above) resulting in the sum of them, e.g. 3 and 3 giving 6, 24 and 24 giving 48 etc.
Each move a new number will be shifted in.
While It may not be the “milestone” release you are expecting, Threes is one of those games that will have you pulling out your hair. This version is written in Commodore BASIC, but is (unbelievably) fast, and has all the features of the Apple IOS version (except upgrades, in-app purchases, and oh, swiping the screen with your finger. Now that would have been clever, hmmmm... a lightpen version). Anyway, it seems that almost all of the VIC’s memory was used up with the game's creation, so let’s see how it fairs up.
Not having any Apple products and no desire to own any, I came to the game (maybe) at a disadvantage, as I had never seen or played the game before, so the first thing was to find out how to actually play the game! This took some Googling as the VIC version doesn’t have any instructions and the discussion includes only a brief outline of the game play. Let’s see if I can help – or make you more confused than ever.
This is a “numbers” puzzle game. The game starts with a playfield of 4 x 4 tiled grid, and random numbers of differing values are inserted (they seem to be from nothing to 3). You can move the board, or in the VIC’s case, shuffle the numbers using the cursor keys (so up moves them all down and down up, etc.).
So the basic formula seem to be something like this:
1 + 2 = 3
n + n = 2*n, for n > 2
Numbers not matching this formula will not be moved, so I expect it’s just about as “clear as mud” to most people.
Remember, you could be moving more than one row or column at a time, and depending on the direction you move, this could also move other rows or columns (so moving up will shift all rows down).
After each move, the game will place a new tile in an empty space left behind by the action. For example, if you swipe right, the new tile will be placed in the first column of one of the rows that moves to the right. An indicator at the top of the screen tells you the next tile that will be placed on the board.
The game ends when you have no more moves or merges to make.
The game can be very addictive or just frustrating, and from the description you will know if this is a game for you. For example if you can sit for hours trying to master a Rubik’s Cube then this should be the game for you, but if after 10 minutes of “cube twiddling” you became frustrated, then you need to stop reading as this game definitely isn’t for you.
It would seem (to me) that trying to keep “free space or cells” seems a good playing tip and the bottom right will show the next number (when one can be placed). If the board is filled up you will need to create multiple merges to free up cells – if you’re not merging, then you are filling the boards space up!
While it may not look and sound that classy, if you like this sort of game it will keep you well entertained. It’s well programmed, although in BASIC, and could really do with a coat of magic to guzz it up a little – but it’s playable!
|Name||Get the Cat|
|Author||Peter van der Woude|
|Requirements||Unexpanded VIC-20 (joystick required)|
|Description||A simple game: Step on the bricks to save your cat.|
Reported in a news item last issue was the release of a Peter van der Woude game called ”Get the Cat.” Created for the Unexpanded VIC-20 (joystick required), the game's description says “It’s a simple game: step on the bricks to save your cat.”
You can download the file here: https://drive.google.com/file/d/0Bz1hF7VZSV-UdGx1dk1maXI4cmc/edit?usp=sharing
While this game may not be that original, it adds a new twist to the formula by making you “get the cat.” The game is written in Commodore BASIC but the speed doesn’t seem to relate to this fact. It’s very responsive – you use the joystick to move left or right and the fire button to place a block under your character (assuming you have blocks left to place). You can only step up one block, but can fall from any height. More blocks fall from the sky (seemingly) at random, but the thread says that every fifth block will fall over your head, and every 5th level you gain an extra life.
The object of the game is to drop or move your man so he can get to the cat and save him. The cat is in the lower left of the screen sitting on a tree or small plant.
As the levels move on, so does the height of the plant the cat sits on (if that’s what cats do on plants), so the first level one block is enough to get the can. The next level you need to step up 2 blocks etc. and so on.
A decent game reminding me of those type-in listings you used to get in magazines, and although you typed everything as printed they never worked. I presume they added errors so you bought the issue next month for the amendments and corrections from the last issue.
It’s been quite some time since Commodore Free interviewed Arthur Jordison about his c64PrgGen application, and during that time development of the application has moved on by some leaps and bounds. Commodore Free thought it was time we caught up with Arthur to find out what developments have been implemented in the application and what others are planned.
Q. Hi, Arthur Jordison. Thank you for agreeing to the catch-up. First, for the new readers – can you explain C64PrgGen and what it can do for our readers?
AJ. Well, first let me clarify things by saying that "C64PrgGen" has become "CBM prg Studio" now, but more on that later. Basically it's an application that allows you to type in (or load from a text file) a BASIC or machine code program into a windows environment and then generate a .prg file which you can use in an emulator or with real hardware. It also lets you create and edit sprites, characters, and screen layouts, and then create the DATA statements you need for your programs.
The application also has an extensive 6510/65816 debugger, and comes with most of the sample programs taken from the Commodore user guide and programmer`s reference manuals. There are also some simple formatting tools built into the application, such as program renumbering and keyword auto completion. If you're more interested in how other people's programs work, it's possible to import and disassemble programs and also import character and sprite graphics.
Q. Is this just a Commodore 64 tool or could all 8-bit Commodore users benefit from your work?
AJ. In addition to the C64 you can use CBM prg Studio to generate code for the VIC20, C128, C16, and Plus/4 and PET (BASIC 2 and 4).
Q. How much feedback have you had with previous versions of the application?
AJ. I get a lot of feedback (not always positive!) after a new version release and then it tends to tail off to a few emails a week, usually from the same people. I like it this way as I can focus on getting things fixed or create new tools for them. I tend to get more feedback from Europeans (Germans, Dutch, and Swedes mostly) but most of the downloads are from America.
Q. We looked at C64PrgGen quite some time ago in Commodore Free, way back, in fact, to 2008, issue 23 (http://www.commodorefree.com/magazine/vol2/issue23.htm). As you are continually developing the product, can you outline some of the milestones the program has now gone through?
AJ. I can't believe it was so long ago! The biggest change (in functional terms) moving from C64prgGen to CBM prg Studio (apart from the name) was the addition of new machines to develop programs for. Before the release of CBM prg Studio there was C64PrgGen and also VIC20PrgGen. As you can guess, they were 99% the same – the only difference was the lack of the sprite editor and SID tools in VIC20PrgGen. Fixing bugs meant fixing them in both versions (which was crazy), and also at the time I was thinking about creating a version for the PET machines, which would have meant three programs to support. Eventually I merged the C64 and VIC20 prg Gens into one and of course the application name had to change to reflect that. The two biggest additions are the screen designer and more recently the 6510/65816 debugger.
Q. Were these all suggested by users – or have you had some additions left out because of time restraints etc.?
AJ. The bulk of the new features added over the years have come as suggestions from users. The developers in the Commodore community know their machines far better than I do and so the requests are usually something like "wouldn't it be good if there was a tool to..." and then I take it from there. The major new feature in the current version (support for the 65816) literally came out of the blue in an email from Bert Novilla back in October, 2013. One feature that's still missing is the ability to listen to the sounds that you create with the SID tool. One of these days I'll get it done!
Q. Of course with so many tweaks and amendments, and such a well created package, I have to ask, will the product ever be finished and development stop?
AJ. No, I doubt it will ever be finished as there's always bugs to fix. As for new features, CBM prg Studio goes through phases when I think there can't be any major new features left, and then suddenly I'm working on something new. Again, I have the users to thank for that. As for stopping, that will happen when I no longer enjoy writing code and as I do that for a living – hopefully it won't be for a long time yet!
Q. It would seem that c64prgGen has really been taken up with the Commodore community. I know, for example, “Alien Bash 2" was written using CBM prg Studio by Tomi Malinen (http://www.flimsoft.co.uk/), and also HELSINGS HUNT-A STAB IN THE DARK A game made for the mini Ludum Dare #45 by Goerp in 2013, and a few demos. Now I know you are aware of this, and a few readers have also asked for updates on your project and even tutorials. How does that make you feel?
AJ. A big part of the incentive to keep developing CBM prg Studio is from the feedback I get and from seeing it being used to create actual software, rather than "hello world" demos (not that there's anything wrong with that!). Also, because I'm interested in the project myself, it doesn't take much feedback either. If I get an email containing something like, "I came across your application and got back into programming after 20 years..." then I'm happy. I get more of a thrill when I see users recommending CBM prg Studio to other users (or supporting it) without any input from me. Some users have even gone to the effort of making YouTube videos! The feedback works both ways though. I try very hard to get a bug fix or a new feature coded up quickly so the user can try it and I think the quick turn-around is appreciated.
Q. The original project was just to dabble with VB. Could you ever have imagined the project would have turned into what it is now?
AJ. Not at all! I started writing C64PrgGen back in 2007 and it was released in 2008. I certainly didn't think I would still be working on it 6 years later – or that it would be as popular as it is.
Q. Finally, what is the feature you are most proud of, and do you have any final comments you would like to add?
AJ. That's a tough one! It was probably the first release of CBM prg Studio (after the name change), because it was the biggest technical challenge in terms of adding the new machines, and making it look and work more like Microsoft's Visual Studio. I'm also very pleased with the debugger – there's around 12,000 lines of code in that baby!
Q. Just to close, do you have any further comments you would like to say to the readers of Commodore Free?
AJ. Well, I'd like to thank the Commodore Community. A project of this size couldn't exist without the support I get from them. I'd also like to thank Commodore Free for this opportunity to update its readers. I still get the odd email from C64PrgGen users asking if there's a new version out soon!
Wouldn't it be great to be able to use all those aging Amiga disks again? Maybe the original Amiga is a bit big and the video quality isn’t so good...
... A smaller version, with modern connections would be awesome. So the project is to take modern technology make it work with good old floppies
Q. Hi, can you introduce yourself to our readers and a little information about your background?
We are two engineers (Igor Modino and Luis Guirado) with a crazy idea and project we wanted to develop. We are from Spain and we live in the Canary Islands.
Q. I suppose for the readers that don’t realize you will need to explain the projects name "ARMIGA".
We are trying to bring back the Amiga 500 in the shape of a plug and play device which is a mix between the retro world and newer technologies we have nowadays. It is aimed at retro gamers and people who want to recall the feelings of the old games.
Q. So who came up with the project and what was the original concept?
The idea for this project came to us over two years ago. After many years of working in technology for the government project, we decided to brainstorm to find some interesting and viable project to be able to spend some of our time, and expand our personal and professional horizons. Like almost all good projects, the idea matured in different bars, always accompanied by good beer and the appropriate cover ;) However, the original concept was to re-implement the Amiga 500.
Q. There have been other "similar" projects. So, how does the ARMIGA differ from say "the minimig"?
Anyone who has used emulators realized that the experience is far from the original machine: you have to manage configurations, ROMs, images ... and worse, in most cases, you cannot use the original media (disks, cartridges ...).
As far as we know however, there is no system that does what Armiga does. Of course we have PC emulators and FPGA systems too. And yes, there is the Minimi. However, we are talking about a radically different target audience. In this case, they are enthusiastic. Anyway, they presented the same problems as before, the devices do not have a disk controller. There’s the Kryoflux for reading disks…, but there’s no system that works as a whole and is truly plug and play.
Q. Can we be clear on what this is, as most readers will think this is just another "emulator" can you explain how the project recreates the Amiga?
What we are proposing is a total abstraction technically. With the Armiga you just turn on, you enter the disc and you play. The system is already configured and even includes a licensed version of Kickstart 1.3, so that it is truly "plug & play".
People have been criticizing our project. They say it’s just a Raspberry Pi with an emulator. We want to make it clear that what we are offering is not the specs, but an experience; the chance to play your disks back with the best AV quality, using modern gear and in a form factor that looks nice beside your living room TV. The Tech specs came after this, and not the other way around ;)
Having said that, it took us some time to design our custom FDD controller. We finally decided to go for a powerful 32-bit controller on top of our fully custom algorithm, both for reading the disk and for transferring the digital image, which is currently done at 1Mbps.
We used the Pi for the first prototype. We decided to develop the first prototype with this board because of its broad availability, great community and documentation.
On top of the Pi we ran a custom UAE version, more precisely, based on UAE4All (the original, not the versions for Android, for example, which all vary in quality). As you may well know, there’s no ARM version of UAE that runs smoothly, so it was quite a mission to do it right. Processor specific and VideoCore optimizations were key for the performance; however, we kept investigating alternatives and found some nice pieces of hardware around.
Right now, our second prototype uses a DualCore Cortex-A7 1Ghz. CPU, with a Mali MP2, DualCore GPU, with OpenGL ES 2.0 support, which the Pi lacked, and also has 1GB of RAM. In a nutshell, just the CPU raw power in this new system is 4x what we got in the Pi… and we are not even talking about OpenGL.
This second prototype has allowed us to bring Symetric Multiprocessing (SMP) into UAE, sandboxing the emulation side from the rendering side. Right now we have to limit the frame rate; otherwise (unleashed mode, as we call it ;D) it climbs to more than 200fps, making games unplayable. We are talking here about HD 720p rendering, with upscaling and filters applied.
The sound side is also “pumped up” and the output is 16bit 44.1 KHz, in stereo format.
There’s nothing much to say about the system, but that is has 2 USB 2.0 ports, microSD slot, HDMI output, Ethernet connection and 4GB of internal NAND memory.
Q. So you supply a licensed version of Kickstart. Who holds the rights to this?
We only offer the license for Kickstart 1.3. Amiga Forever is the owner of the rights.
Sadly The ROMs are property of their respective owners and we won’t include them with the Armiga package.
Q. The project started as a crowd funded idea, although the money needed to achieve the projects goal is quite high. How close were you to achieving funds target $140,000?
Yes, the Crowd funded project ended and we didn’t reach our goal, but we have launched a BETA PROGRAM focused on users who bought the Armiga Beta Edition and want to be one of the very firsts to have a fully functional Armiga.
Q. So you do have a physical working prototype yet?
Yes. We have built two working prototypes which were showed at RetroMadrid:
Q. Although the goal is a working Amiga 500, will other Amiga machines (such as the 1200) be emulated?
We are focused on A500 at the moment. A1200 support is a bit trickier because the AGA support is much more demanding than OCS/ECS and really the market for this support was quite narrow. Anyway, AGA support was one of our objectives at Indiegogo and still something we have in mind.
Q. I presume you have researched the need for such a project. When you approached people and explained the project, what was their initial reaction?
When we approached people the reaction was “surprise” mainly. The crowd funding campaign has been our market testing. We needed some way to evaluate the interest of the project.
Q. You mentioned the device runs Linux or specifically Android. Can you "boot” to this and use the Android OS to play games and email, etc.?
The system has a microSD slot and 4GB of internal NAND memory. This is what allows us to do the DualBoot. In our second prototype, this internal NAND is where Android 4.2.2 sits.
Q. On the finished version, what will be the process to load games, and can the Armiga run productivity titles and Workbench itself?
There are two ways: Choosing a ROM from our menu or dumping a floppy and then choosing the created ROM. Armiga can run productivity titles and Workbench itself, but it is designed to be used with games.
Q. Will versions of Workbench be included with the project, and can any external Commodore hardware be used with the project?
No version of Workbench will be included, nor will there be support for Commodore hardware.
Q. Will there be some software to allow the user to create disk images of their favourite games with the package?
We have developed a custom controller which allows making images of games through a menu shortcut.
Q. So you can actually load Amiga floppy disks? I presume that copy protected disk won’t work though so you would need games with this feature removed.
As you may know, ADF is the de-facto standard when it comes to Amiga emulation and so it’s our main supported format. However, ADF is just raw bitstream, with no time (and hence, density) information and so we (and no one else that uses ADF) can read variable density tracks out of it.
There are several formats out there that circumvent this problem by basically oversampling the disk, but there’s no standard for that. We have our own custom format that is not oversampling-based and, thus, is much more compact.
We are still working on a single format for all the disks (unprotected, flaky bits protected, and variable density protected) and the mechanism to automatically detect them – that’s one of our goals.
Q. The case design looks brilliant: "Floppy disk." I presume it was easy to come up with this as an idea for a case, as it seems very logical. It looks like a peripheral for something like the Amiga 2000, 3000 or 4000 range of computers.
It’s really hard to quantify the time and effort involved in each of the Armiga aspects. However, from the very beginning we had three main design objectives: make it stylish, make it modern, and make it resemble the original Amiga.
We tried different patterns, orientations, sizes. etc. It was a constantly evolving process as we were also designing the circuits and both had to fit together like a glove.
From the very first hand sketches, we moved to the CAD systems, polished it there, and then did many 3D-printing tests – until everything was just perfect. It’s quite amazing how every piece of the hardware fits so well in the design.
Q. Will the ARMIGA come as just a board option – or will you have to buy as a completed project with the case?
As we are planning the next steps, we are considering some alternatives. First of all is the BETA PROGRAM. We have cream and black as choices for the case colour.
Q. Maybe one of the readers is looking at this and thinking, “I could help." Are you still open to offers of help, and if so, what would you most like help with – and how would our readers contact you?
Anyone interested in our project can write us to email@example.com and keep up to date on developments here www.armigaproject.com
Q. With the crowd finding ended https://www.indiegogo.com/projects/armiga-project – what are your plans now?
Yes, sadly, this project has failed. Anyway, we want to go on with the project and we are looking for people who want to buy our beta program.
Q. Can you give our readers an idea on the project's retail price?
No retail price for the moment – sorry. We need to get private funding to start production.
Q. Thanks for taking the time to talk to Commodore Free. Finally, is there a question you haven’t been asked, or a comment you would like to leave the readers with?
All I would like to say is, we have had two main collaborators: Keith Monahan, for the FDD controller and Chui for UAE.
Chui..., he’s just terrific. He really knows every nut and bolt of UAE and the Amiga “dirty tricks” and that helped us especially in the first steps. We’ve been very lucky he was interested in the project and jumped in from the first time we talked.
You just have to take a look at his emulators page (http://chui.dcemu.co.uk/) to get an idea of how good his work is. It’s not in his page, but he’s also one of the fathers of FAME M68K core and MegaDrive emulator GENS. Now he’s working in PierSolarHD.
It’s also very easy to work with him, and he always finds time to help. In addition, he’s been the key for us being at RetroMadrid2014, where we first publicly showed the Armiga.
Airwolf was an American television series which ran from 1984 until 1987. The program centres on a high-tech military helicopter, with a code named Airwolf, The helicopter and its crew undertake various missions, many involving espionage, with a Cold War theme
|Programmer||Neil A. Bate|
What can I say about this game? I was just so excited when I purchased it especially after watching the TV show for so long. My excitement soon left me mainly because The Commodore 64 version is just so bad, it’s just another cash in with no idea of where to take the game! The sprites are just too big, and this makes the whole game totally unplayable, add in that the game is insanely difficult anyway, the whole thing looks nice but then the game starts, the main screen and music are fine. Of course later remixes of the theme tune produced some amazing sonically accurate renditions of the tune, but the music was fine for the time, (try holding some keys down on the main screen it makes the music play S...l...o...w...l...y...) the sound effects, were, well just that, sound effects in the game!
The game sees you flying the hi-tech Airwolf helicopter. In the C64 version you fly from right to left in a scrolling game; you can go back, and of course the screen will scroll with you, You must fire at traps to open walls or remove items from the screen that are firing at you. While the idea lacked imagination the games playability was completely broken. Even with cheat modes enabled the game was impossible to play. The almost barren screen seems to remove all realism from the game (true, we have some columns and bits of rock but just a black background).
Rather sadly the plus 4 version doesn’t seem to improve things, its scrolling the opposite way for some reason the graphics are smaller and totally different, it’s another game where pixel perfect flight is required, but to be honest the gameplay isn’t there on either version. The plus 4 version also lacks the music from the C64 version and seems juddery and more like a type in listing.
Hey wait! You say wasn’t there an Airwolf 2?
Well, not content with squeezing money out of poor punters, Elite decided they could do it again, and eeked just a little more return on the name with Airwolf 2, this time they decided to go no frills; and just chuck out a shoot-em-up. And like its predecessor Airwolf 2 is best left forgotten
All we can do is wish it was never released, Hide the cassette in a drawer, Draw a line in reality and move on quite quickly.
Hello again! Who wants to hear more about the Stack? We managed a good start last time out, yet barely scratched the surface. Today we're going to continue our discussion, but this time we will approach it from the perspective of a real-world problem and its solution. Larger programs generally keep their functions and data somewhat (to very) organized, much more so than smaller programs. The “largers” must organize in order to prevent chaos. As fellow programmers, you all know how hard it is to find your way out of a large program's source code once you're lost. It can be much worse if the large program needs better organization. In larger programs, if re-organization is needed, often one of the first tasks is the gathering of all the functions that drive the program, and organizing them into some compact, coherent block of memory, making sure each function has been altered to use data common with the other functions, and linked together – as much as is practicable. In simpler words – the code goes in one place, data in another place, and everyone shares. This re-organization is an early stage in the life cycle of the Function Library.
We're going to begin assembling a Function Library, along with a stack-based function-calling engine tailored to the Library. It's an “out there” type of project for sure, yet many of us have wished for one at one time or another in order to make things easier. I won't kid here, either – this turned out to be much harder to explain than I ever thought it would. Much harder. So please accept my apology now for later – when you're looking for a way out. Even though we won't get this all finished today, we will get a good start on it. We'll start today by laying out the memory usage and perceived future needs (the ability to add more functions).
We are going to tackle this using both 6502 and 65816 assembly language, and we will see how to manage the parts of a modern Stack from two distinct vantage points – 6502 and 65816. We use the term “modern” in the sense that good examples of 6502 stack use are practically non-existent, and if available, are certainly not published in a very conspicuous place. Most books have done a horrible job of explaining what the 6502 Stack is and what it does. Yeah, I read the books, too! Invariably you're left with a very poor understanding of whatitis, whatever thatsit.
Truthfully, it wasn't until I learned x86 assembly, which meant understanding how two different stack systems worked, that it finally all started to sink in and make some sense. I then began to wonder why we (the 65x Community) weren't doing some of the really cool things with our stack that x86 programmers were doing with theirs.
Traditionally, the 65x Stack had been used for an extremely limited list of circumstances, and rightly or not, many programmers “got by” knowing very little about how this highly efficient piece of hardware works. As I was pondering this – the “why not us too?” question – it soon became obvious: It was just an information gap – and that's all. The information never made from There to Here.
Today our project has it all! – an elegant function-calling mechanism with parameter passing, return values, and local variables, or “locals.” Best of all, we're going to use symbolic labels to make the concepts easier to understand and integrate into your own applications. As good assembly language programmers, we should always be thinking in terms of symbolic labels anyway. So, Note to hard-coders: Today we will be using Labels and Comments freely. Better strap yourselves in.
We want to write a function library and need a good way to access the functions within. Our solution should be something simple to operate (at the user's end) and easily extendable (on our end). We can assume that, prior to a JSR/JSL to a single address (C64 = $02A7, SCPU = $020000), the Caller pushed input parameters onto the Stack (in reverse order), loaded the count (# of parameters) just pushed into .A, and loaded .X/.Y with a Function ID#.
At first glance the procedure to access a function seems fairly involved. However, if no parameters are required, the process boils down to simply loading A, X, and Y, and JSRing. Very little involvement, actually. Parameter passing is the elegance we talked about earlier. But more powerful functions often require more parameters. Our springboard will make parameter usage convenient for the function.
We don't know yet what each function will do – we need a standard way to interact with the function once it is put in place. Our springboard must pass parameters, return results to the Caller, and process errors. We also must ensure safe return to the Caller's environment. Springboard is just fancy-talk describing a mechanism to safely transport the Caller from its home environment, interact within the Function environment, then travel safely back to the Caller's original environment.
Our springboard must act as a liason between the caller and function, so it needs to be easy to operate and powerful, yet fast. The way we approach the job depends heavily on which processor we are writing for – 6502 or 65816.
Stack: Parameters are pushed onto the Stack by the Caller, usually in reverse order, along with any other necessary information, before jumping to the springboard address. We would like for our springboard to handle the entire affair, including cleaning up properly afterward.
Inline: Parameters are placed in the code stream following the call to the springboard address. The function parses the in-line params and the springboard handles fixing the Return Address (on the Stack) before the program resumes execution. Fast, good when memory is tight because of low memory overhead, but it mixes code and data, which can be a problem for ROM or segmented memory.
Direct Page: An agreed-upon set of shared Zero/Direct Page addresses. Information is transferred using these locations. Overall the fastest method, it generally (but doesn't have to) relies on the presence of a rather large contiguous area of memory, a luxury which is not always available in 6502. Passing parameters in 16-bit mode is easy because Direct Page is relocatable.
Register: The easiest (and most limiting) method for passing function parameters. It's just A/X/Y and SR flags, such as Carry, for BOOL data. With this method the function has to deal with parameters immediately because they are (of course) being held in volatile processor registers.
The Stack is just memory used for very specific purposes. When the computer first starts up the Stack Pointer will read as set to $FF (or $01FF for 65816). This is a pointer to the next stack address which will be “pushed” to. When dealing with the Stack we can calculate locations using relative addressing, or as offsets from a known location. The known location is always the address SP points to (which means the known location can and does change as data is added or removed from the Stack). It is this fact which causes so much confusion.
Let's push three “fake” parameters to “dummy” and see what it does to stack alignment, assuming we began at $01FF.
|8-Bit 6502||16-Bit 65816|
|PARAM1 = $0101||PARAM1 = 1|
|PARAM2 = $0102||PARAM2 = 3|
|PARAM3 = $0103||PARAM3 = 5|
|$01FF||$FF||PARAM 3||PARAM3,X or $0103,x|
|$01FE||$FE||PARAM 2||PARAM2,X or $0102,x|
|$01FD||$FD||PARAM 1||PARAM1,X or $0101,x|
|$01FC||$FC||NEW SP = $FC||$0100,X|
|$01FF||$01FF||PARAM 3 HI||6,S (PARAM3+1)|
|$01FE||$01FE||PARAM 3 LO||5,S (PARAM3,S)|
|$01FD||$01FD||PARAM 2 HI||4,S (PARAM2+1)|
|$01FC||$01FC||PARAM 2 LO||3,S (PARAM2,S)|
|$01FB||$01FB||PARAM 1 HI||2,S (PARAM1+1)|
|$01FA||$01FA||PARAM 1 LO||1,S (PARAM1,S)|
|$01F9||$01F9||NEW SP = $01F9||0,S ($01F9)|
In both cases, 6502 and 65816, we were able to turn a stack offset into a label, which means addressing data on the stack can be made easy to understand.
We give labels to the three parameters, but the assignments given to the labels are absolute addresses which can be combined with indexed, X (X = TSX) to address the location directly.
The instruction LDA PARAM2,X or LDA $0102,X will get the value for PARAM 2 from the Stack, offset from SP = 2.
We give labels to the three parameters, but the assignments given to the labels are offsets from SP.
The instruction LDA PARAM2,S or LDA 3,S will get the value for PARAM 2 from the Stack, offset from SP = 3.
Our reference point is always the value of the Stack Pointer, so we must be careful when making any more changes (such as local variables) to the Stack Layout. For example, adding 32 bytes of local variable storage will add a new offset to our labels, called “LV”.
|8-Bit 6502||16-Bit 65816|
|PARAM1 = $0101||PARAM1 = 1|
|PARAM2 = $0102||PARAM2 = 3|
|PARAM3 = $0103||PARAM3 = 5|
|LV = 32 ;corresponds to 32 bytes local storage||LV = 32 ;corresponds to 32 bytes local storage|
|LOCAL00 = 1|
|$01FF||$FF||PARAM 3||PARAM3+LV,X or $0103+LV,x|
|$01FE||$FE||PARAM 2||PARAM2+LV,X or $0102+LV,x|
|$01FD||$FD||PARAM 1||PARAM1+LV,X or $0101+LV,x|
|$01DD - $01FC||32 BYTES LOCAL STORAGE||LOCAL31,X or $0120,x
LOCAL00 or $0101,X
|$01DC||$DC||NEW SP = $DC||$0100,X|
|$01FF||$01FF||PARAM 3 HI||6+LV,S (PARAM3+LV+1,S)|
|$01FE||$01FE||PARAM 3 LO||5+LV,S (PARAM3+LV,S)|
|$01FD||$01FD||PARAM 2 HI||4+LV,S (PARAM2+LV+1,S)|
|$01FC||$01FC||PARAM 2 LO||3+LV,S (PARAM2+LV,S)|
|$01FB||$01FB||PARAM 1 HI||2+LV,S (PARAM1+LV+1,S)|
|$01FA||$01FA||PARAM 1 LO||1+LV,S (PARAM1+LV,S)|
|$01DA - $01F9||32 BYTES LOCAL STORAGE||LOCAL00+31,S / 32,S
LOCAL00,S / 1,S
|$01D9||$01D9||NEW SP = $01D9||0,S ($01D9)|
As can be seen from the tables, regardless of processor, adding local variables only changes the offset from SP. So when a 32-byte local variable chunk is placed on the Stack, it is a simple matter to add +32 to the offset value when addressing any of the older data you see in the charts. You, the programmer, must pay attention to which level, or “frame” you are addressing at all times.
Let's have a first look at our Function Address Table (8/16-bit):
|Entry #||Offset||Entry ID|
|$0000/Special Entry||$0000||# of Table entries|
|$0001||$0004||Entry 1 ID#|
|$0006||Entry 1 Address offset|
|$0002||$0008||Entry 2 ID#|
|$000A||Entry 2 Address offset|
|$0003||$000C||Entry 3 ID#|
|$000E||Entry 3 Address offset|
We'll set up some data for the table.
* = $C000 ; LOCATOR CODE GOES HERE FAT =* .word 4 ;# of entries (+1) in table .word 0 ;unused ENTRY1 =* .word $1000 ;ID# for first function .word Func1 ;offset to Function 1 Code ENTRY1 =* .word $1234 ;ID# for second function .word Func2 ;offset to Function 2 Code ENTRY1 =* .word $1500 ;ID# for third function .word Func3 ;offset to Function 3 Code ;------------------------------------------------- Func1 =* ;Func1 code goes here rts Func2 =* ;Func2 code goes here rts Func3 =* ;Func3 code goes here rts
First, please accept my apology if today's article seemed long-winded or convoluted. As I wrote this, it became apparent that our subject matter is worthy of many words, split into chapters. How does one fix that on the spot?
Today introduced the springboard, a section of code used for calling functions located in tables. We showed the impact of pushing function parameters (and later – local variables) on the Stack, and how to address stack variables – regardless of where they are. The primary difference in memory between 8-bit and 16-bit is that 16-bit variables need twice as much space. So, by adding 32 bytes of local storage we only gained 16 16-bit variables, as each variable is two bytes in size.
We also started to flesh out our memory needs. The Function Address Table follows right after Locator in memory, so everything is
Unfortunately, subject Stack is a biggie. This article ended up too long, so let's just pick this up later? Next time we can... build a function library and fill it with exactly one function – a tester named “dummy.” Mr. tester will have a recurring role as our guinea pig while we develop smart things. We will construct a basic parameter-passing system which will execute functions such as “dummy.” “dummy” is the perfect vehicle for us to see how “local” stack variables work, and what a Prologue or Epilogue is. We'll probably talk a little about other ways all this could be accomplished.
Next time we will add more to our project. Today was mostly justsetting things up. We will initialize and make use of our local variables, and we will show how to destroy the local variables when we're done with them. The springboard will have some important code added to it, and everything will hopefully become clearer next time out with Part Three of this primer about the Stack. Good stuff, I promise. So, until our next meeting, take 'er easy, and I'll see you next time right here... at the corner where Art meets Science.
Today's Tip is an easy one. I would like for you to check out what a guy named Shaun Bebbington writes. He can be found at --> http://yearofcodes.tumblr.com or on Facebook --> https://www.facebook.com/retrocomputermart.
Please send errors, omissions, or suggestions to firstname.lastname@example.org or on Lemon64, username satpro, or at www.melon64.com, username satpro.