Super 80 – Emulator

Back in about 2006, a Super 80 emulator was added to MESS.

Until now (March 2017), I’ve never used MESS. So I have a small learning curve in front of me.

It appears that in 2015, MESS and MAME were merged. The current version of MAME is 0.195 and the 64-bit Windows version can be downloaded from here -> https://github.com/mamedev/mame/releases/download/mame0195/mame0195b_64bit.exe.

It seems that since MESS and MAME have merged, the MESS website (www.mess.org) no longer has anything to do with MESS.

I have also found this webpage which has some information about the computers that are emulated in MESS -> http://www.emulator-zone.com/doc.php/misc/mess.html.

At the bottom of that webpage there is a link to the 64-bit Windows version 0.161 of MESS. This is the version of MESS that I am currently experimenting with.

I found the following page with information about the Super 80 Emulator -> http://www.progettoemma.net/mess/system.php?machine=super80. Note there are about 5 emulators. This link is for the Monitor V1.2 version.

When I run MESS from the command line (using the command “mess64 super 80”), I get the following output at the console:

C:\Users\Malcolm\Downloads\mess0161>mess64 super80
super80.u26 NOT FOUND (tried in super80 super80)
super80.u33 NOT FOUND (tried in super80 super80)
super80.u42 NOT FOUND (tried in super80 super80)
super80.u27 NOT FOUND (tried in super80 super80)
FATALERROR: Required files are missing, the system cannot be run.

C:\Users\Malcolm\Downloads\mess0161>

The above output is helpful – it tells us which ROM files the emulator is looking for. They need to be in a ZIP file called “super80.zip”, in the “roms” subdirectory. Three of these ROMs are 2532 EPROMs (U26, U33 & U42). U27 is the 2513 Character Generator ROM.

The ROMs are available from the Planetemu website. Search for “Super-80” on this page -> http://www.planetemu.net/roms/mame-roms?page=S.

Once I copied the ZIP file across, I was able to run the Super 80 emulator.

The current source-code file for the emulator is here -> https://github.com/mamedev/mame/blob/master/src/mame/drivers/super80.cpp.

CASSOUT notes

L1 and L2 BIN files seem to load OK into “super80m”, but not into “super80”. I suspect this is because either of ROM differences (ie the memory load address for BASIC programs in the two ROM variants is probably different – and perhaps the format in which BASIC programs is tokenised is also different).

So I started to look at what was happening in MESS 0.161 using the -debug option.

If I start “super80” (Monitor V1.2 and Basic V1.2B), set a breakpoint at C215 (CASSOUT), RUN, and enter BASIC with the command GD000, I get the following:

With no program in memory, and with BASIC running (at the asterisk prompt), I see the following in low memory:

04C0  00 00 C0 53 53 53 53 53 53 53 00 00 00 00 00 00  ...sssssss......
04D0  00 00 08 02 06 00 00 00 00 00 48 00 00 00 00 00  ..........H.....
04E0  00 00 12 05 13 05 00 01 70 04 14 05 00 00 FE BA  ........p.......
04F0  3E 46 20 2A 00 08 01 00 00 00 00 00 00 00 FE B9  >F *............
0500  00 00 00 00 00 00 00 70 04 FE BB 00 00 00 00 00  .......p........
0510  00 C9 FF FF 00 00 00 00 00 00 00 00 00 00 00 00  ................
0520  [All zeroes]

Still with no program in memory, if I execute the SAVE command, I see the following: PC=C215, HL=04D2, DE=0044, IX=BDFF, SP=BBF8. In low memory, I see the following:

04C0  00 00 C0 53 53 53 53 53 53 53 00 00 00 00 00 00  ...sssssss......
04D0  00 00 08 02 06 00 00 2D 04 00 48 00 00 00 00 00  .......-..H.....
04E0  00 00 12 05 13 05 00 01 70 04 14 05 00 00 FE BA  ........p.......
04F0  3E 46 20 2A 00 08 01 00 00 00 00 00 00 00 FE B9  >F *............
0500  00 00 00 00 00 00 00 70 04 FE BB 00 00 00 00 00  .......p........
0510  00 C9 FF FF 00 00 00 00 00 00 00 00 00 00 00 00  ................
0520  [All zeroes]

Note that only two bytes in the 04D0 line changed.

If I do a “Hard Reset”, enter BASIC, and type the line 10 PRINT “HELLO” (and don’t execute the SAVE command), I see the following:

04C0  00 00 C0 42 42 42 42 42 42 42 00 00 00 00 00 00  ...BBBBBBB......
04D0  00 00 08 02 06 2A 04 39 04 0B 48 00 00 00 00 00  .....*.9..H.....
04E0  00 00 12 05 21 05 00 01 70 04 22 05 00 00 FE BA  ....!...p.".....
04F0  3E 46 20 2A 00 08 01 00 00 00 00 00 00 00 FE B9  >F *............
0500  00 00 00 00 00 00 00 70 04 FE BB 00 00 00 00 00  .......p........
0510  00 C9 00 0A 0C 20 83 20 22 48 45 4C 4C 4F 22 0D  ..... . "HELLO".
0520  FF FF [Then all zeroes]

if I now execute the SAVE command, I see the following: PC=C215, HL=04D2, DE=0052, IX=BDFF, SP=BBF8. In low memory, I see the following:

04C0  00 00 C0 42 42 42 42 42 42 42 00 00 00 00 00 00  ...BBBBBBB......
04D0  00 00 08 02 06 2A 04 2D 04 0B 48 00 00 00 00 00  .....*.-..H.....
04E0  00 00 12 05 21 05 00 01 70 04 22 05 00 00 FE BA  ....!...p.".....
04F0  3E 46 20 2A 00 08 01 00 00 00 00 00 00 00 FE B9  >F *............
0500  00 00 00 00 00 00 00 70 04 FE BB 00 00 00 00 00  .......p........
0510  00 C9 00 0A 0C 20 83 20 22 48 45 4C 4C 4F 22 0D  ..... . "HELLO".
0520  FF FF [Then all zeroes]

Note the only change that occurred was that byte 04D7 changed from 39 to 2D.

If I now run the “super80m” emulator with the -debug option, I get the following sign-on message:

Super-80 8R0
>

And when I start BASIC with GD000:

SUPERSOFT BASIC V3.8
Created on 1-9-1987
READY
*

Low memory looks similar at this point (to what the “super80” emulator has, but there are some differences.

Looking at the start of the “super80m” ROM at C016 (the jump table entry for CASSOUT), we can see that the new vector is C1E5. When the same 1-line program is entered, and a breakpoint is set at that address, we get the following register values: PC=C1E5, HL=04D2, DE=004F, IX=04FB, SP=BD8A. Clearly register usage for IX and SP is very different. Note that 3 less bytes were saved (compared to when using the “super80” emulator).

BIN Image results

012L1.BIN (Horse Racing): Loads and runs OK under super80m.
028L1.BIN (Dungeon Dilemna): Gives a SN error in line 1200 when run
404R2J.BIN (Invaders): Works, but too fast. There are multiple vrsions for other CG’s