RetroChallengeRetry, 2020/04

Summary: Playing with an MSX computer

At the end of March 2020, during my periodic visit at a Hard Off store (a Japanese chain selling, among other things, used electronic stuff and video games), I stumbled upon an MSX computer built by Sony, the HB-10 Model. It was not tested, but its overall condition did was not too bad and the price seemed reasonable so I decided to buy it.

The Sony HB-10 I bought

The Sony HB-10 I bought



I do not know anything about MSX computers. I think those were very uncommon where I grew up in Canada. I suspect that those computers were mostly popular in Japan and Europe... In any case, I am curious and the Retro Challenge Retry is a perfect excuse to spend time learning how to use this Sony HB-10 as well as familiarise myself with the MSX ecosystem.

Once I'll have this MSX up and running (hopefully without too much complications) my first objective will be to play a game which was recently completed by a developer I follow on Twitter (@reidrac). This new MSX game really looks fun and is called Uchūsen Gamma. Here are a few screenshots:




Visual inspection

No missing keys, but does needs a good cleaning.. I'll take care of that later.



Traces of rust on the connectors, in particular the RF output (which I certainly won't use).



Otherwise, everything looks fine inside, only a bit of dust.




Powering it up!

I bought this computer without cables and without the power brick. The power brick was missing, and according to the store, this was actually the reason why this computer was sold as untested. So I was on my own.

The label under the computer indicates voltage requirements of 6V DC and 16 AC...


I did not have an appropriate power source on hand. So I began thinking: This computer most likely works at 5v internally... could I simply inject 5v DC? Why does this machine also requires 16v AC? Of what use is it?

To answer this question, I consulted a service manual I found on archive.org. It was not exactly the correct manual, I have the HB-10 (Japanese version) while the manual is for the HB-10P (Europe) and HB-10B (UK). But according to this page about the HB-10 series on the msg.org wiki, the main differences are only the keyboard layout and the AV output connector.

(https://archive.org/details/sonyhb10p10bsm/mode/2up)

From what I could see, the input power is used as such:

  • 6V DC: Sent to the 5V voltage regulator.
  • 16V AC: Used to make 12V and -12V DC using 7812 et 7912 voltage regulators.
    • 12V: Sent to the cassette connector and to the cartridge slots.
    • -12V: Sent to the cartridge slots.
I could not locate a place where the +12/-12 voltages were used internally. I think I will use the cassette port, but I will most likely connect it to my PC sound card. I do not think I'll use the 12v output from this port. As for cartridges, I don't own any yet. I suspect most game cartridges only use 5v though.

Power input circuit and regulators

Power input circuit and regulators



The conclusion: At least for now, I only need 5v since I will not be using the +12/-12 voltages, and the raw 6V input only goes to the 5v regulator. In the future I will do something cleaner, but for now, I simply soldered an USB cable directly to the regulator pins 2 and 3...

USB cable soldered to regulator

USB cable soldered to regulator



I connected the computer to a Sony PVM (same brand, most appropriate) and connected the USB cable... And this computer appears to work perfectly! Yay!



The keyboard works perfectly well too! For fun I wrote a quick Hello, World! program in BASIC.



I was lucky this time, no repairs were required! Yet, I am a bit disappointed, some motherboard debugging, CPU or memory replacement (soldered components) would have been fun too...

Next step: Play Uchūsen Gamma!



Uchūsen Gamma

Uchūsen Gamma is distributed as a ROM (cartridge) file and CAS (cassette) file. My plan was to load the game through the cassette port by connecting it to my PC sound card. But this requires an appropriate cable! Since I did not have the correct type of DIN connector, I did not build a cable. I just used two pieces of wire to make the connection. The correct parts are on their way...

Audio plug and wires

Audio plug and wires

Wires inserted in the DIN connector

Wires inserted in the DIN connector



To convert the .CAS file to sound, I used the MSX CAS Packager project to convert the .CAS to a .WAV file.



I loaded the file in VLC, typed load"cas:",r on the MSX and pressed PLAY in VLC. A few seconds later, the words "Found:ugamma" appeared on the screen. Very good sign!



But it was too early to celebrate. A few seconds later...



Oh no! I tought Uchūsen Gamma was a game for MSX systems with 16k of RAM... It turns out that I did not read correctly. The cassette version requires 64k... It makes sense, if the game code is not in ROM, it must be loaded somewhere right?

Ok, so my MSX computer only has 16k. In the HB-10 series, the model I have (the Japanese model) is the only one with only 16k. All other models have 64k. That's too bad... There is only one thing to do then: Adding more memory and trying again!


More memory

According to the MSX wiki page about the HB-10 series, the Japanese HB-10 computer has 16k of RAM in SLOT 0 and all other models have 64k in SLOT 3.

I will try two techniques to add memory to my HB-10:

  1. I will build a memory expansion cartridge. Simply installing it in one of the two cartridge slots will add 64k of RAM to the system.
  2. I will also attempt a motherboard modification to have 64k on-board.
All the components I need to try both techniques are ordered and should be here at the end of the month.

I have good hopes for the motherboard modification. At the moment, there are two TMS4416 (IC10 and IC11) RAM chips installed, but there are interesting markings on the PCB: 4416(N) and 4464(P). I think that N refers to NTSC and P to PAL. In the context of the HB-10, knowing that it was sold in Japan and Europe, NTSC = Japan and PAL = Europe. And Europe implies 64k of RAM! So the plan is simple: Replace the two TMS4416 chips by a pair of TMS4464 chips and perform whatever additional modifications are required. For instance, looking at the PCB, I can see other optional components identified by (N) and (P), for instance R61 and C43.



I do not have the service manual for the Japanese model, but I have the European version from archive.org. This memory circuit schematic will certainly be a big help to understand the required changes!





Cassette cable

The part I was waiting for to build a cassette cable, a 8-pin DIN connector, finally arrived!

The parts

The parts

Wiring...

Wiring...

Wiring...

Wiring...

Done!

Done!



Cable connected

Cable connected



Much cleaner than inserting small wires in the DIN connector as I had to do before. Also much more reliable!


BASIC 10-liners and KansasEncoder

While I'm still waiting for parts to extend my MSX memory, I tought it would be fun to try a few games from the annual Basic 10 liner contest!. While those are by definition relatively short and compact programs, I'm not typing them in. Instead, I load them through the cassette port!

To convert them to sound, I found a nice little tool which runs in a web browser: KansasEncoder for MSX. It's a simple matter of cut-and-pasting the program in the textarea and pressing play. After typing Load"cas:" on the MSX of course!

As an example, here is a fun little game from the 2019 contest (it won 8th place):
Ballistic Challenge!

First I copy ther code from GitHub...
Ballistic Challenge code on GitHub

Ballistic Challenge code on GitHub



I paste it in KansasEncoder...
The code in KansasEncoder

The code in KansasEncoder



I type load"cas:" on the MSS, press Play in KansasEncoder, and a few moments later...


Tada! It's running on my MSX computer!




Here is another game that isn't bad at all for 10 lines: SuperFish (This one won 4th place in 2019)

The game in KansasEncoder

The game in KansasEncoder

Running on my MSX!

Running on my MSX!




64KB Expansion cartridge

I finally received all the parts to build a 64kB memory expansion cartridge for my 16k MSX. I designed a small PCB using a 128KB SRAM chip. The reason why I used an oversized chip is that I wanted to use only new parts, and the choice of small SRAM chips is a bit limited in this age...


Schematic

Ok so, here is the schematic:



I tried to follow the MSX Hardware design guidelines I found on the MSX Wiki at https://www.msx.org/wiki/Hardware_Design where possible or applicable (as far as I could tell) to my situation. In particular, I made sure the SRAM chip I chose was TTL compatible and I routed all the cartridge pins to a header footprint to help with future experiments or modifications.


Printed circuit board

The PCB is sized to fit Konami style cartridge shells.

Bare PCB

Bare PCB

PCB assembled and installed

PCB assembled and installed



Need more RAM too?

Ready to use 64 kB RAM expansions are available from the raphnet-tech.com online store.



Test 1

My first test was to check how much free RAM BASIC reports at startup. Excellent, the free memory increased from 12431 to 28815 bytes!

Before...

Before...

Cartridge inserted...

Cartridge inserted...

After!

After!



Only 28815 bytes free when I just added 64kB of RAM? This is perfectly normal. The CPU can only access 64kB, and 32kB are used for the BIOS and BASIC ROM. BASIC uses a bit of the remaining 32768 bytes of RAM so in the end only 28815 bytes are free.

See also the MSX Wiki: I have 64kB of memory, but BASIC only reports 28xxx Bytes free



Test 2

Since BASIC only touches 32kB of memory, I then used a small tool designed to scan system slots and report what it finds: TINY SLOT CHECKER by Tiny-yarou. http://www.tiny-yarou.com/slotchecker.html

I downloaded it and the zip file contained many different versions of the tool, including a cassette version in .WAV format, exactly what I needed. So I could use the cassette cable I built and VLC to play the wave file.

Testing with Tiny Slot Checker

Testing with Tiny Slot Checker



Sure enough, Tiny Slot Checker found RAM in slot 1 (the left cartridge slot), as this is where I had inserted my memory cartridge. Slot 0 page 3 is the 16kb of RAM built into the machine, and this is where the tool is running from. Unfortunately the memory version of Tiny Slot Checker (unlike the cartridge version) cannot inspect page 3, whci explains the blanks...


Test 3

Ideally I would have liked to use something specifically designed to test memory, but I did not find one in cassette format... so there was only one thing left to do: Have another go at loading Uchūsen Gamma! Now that I have at least 64k of memory it should work!

And indeed, after a few moments, instead of an insufficient memory error message, a loading screen appeared! And a few minutes later, the game started!

Loading screen

Loading screen

Finally, the game runs!

Finally, the game runs!

At last!

At last!



I still hope to replace my cartridge by a built-in memory upgrade, where I will try replacing the two 4416 RAM chips by a pair of 4464 chips (plus other required modifications). Sounds like so much fun!

But meanwhile, I will play some games, and I think I will make a joystick adapter...




End of RC2020/04 and continuation

Ok, so I tried modifying my computer to permanently install 64k of RAM by replacing the two 4416 chips by a pair of 4464 and relocating several jumper wires and resistors, according to the (P) and (N) labels on the motherboard, but unfortunately I could not get it to work. And then the RetroChallenge ended.

But I have not stopped experimenting with my MSX system and will keep adding sections below.



64k (48k) Cartridge ROM PCB

Loading games through the cassette port can be time consuming. For instance, whenever I feel like playing Uchūsen Gamma, I must wait 5 long minutes to load the game! To solve this, I decided to build a simple cartridge PCB for accomodating a 64k EPROM. As for my memory expansion cartridge, the size of the PCB and the hole location is compatible with Konami style shells.

Component side

Component side

Solder side

Solder side



And here is the schematic:


As you can see, it is straightforward wiring using the SLTSL (Slot select) signal. The slot where the PCB is inserted is therefore fully occupied by the EPROM. Of course, it is likely that a maximum of 48k will ever be usable, since at least one 16k page of RAM will normally be required. (I have a few ideas for programming techniques where this limitation could be overcome, but I don't know if there is software that does this)

When programming a ROM file smaller than 48k, 16k for instance, the file must be programmed in page 1, i.e. from 4000 to 7FFF. EPROMs smaller than 64k can also be used, 32k for instance, but mirroring will occur (pages 0 and 2 will access the same data, and so will slots 1 and 3).

The table below shows how a rom file should be programmed depending on its size and the EPROM size:
16k ROM File 32k ROM File 48k ROM File 64k ROM File
32k EPROM 4000-7FFF File 0000-3FFF -> EPROM 4000-7FFF
File 4000-7FFF -> EPROM 0000-3FFF
- -
64k EPROM 4000-7FFF 4000-BFFF 0000-BFFF 0000-FFFF (not tested)
There could be exceptions. So far I have not done a lot of tests.

The case of programming a 32k ROM file in a 32k EPROM is a bit complicated. If the file contents is meant to be placed in pages 1 and 2, programming the ROM directly (from address 0000 to 7FFF) is not correct. The content meant for page 1 would appear in pages 0 and 2, and the content for page 2 in pages 1 and 3 - In other words, the pages would be in the wrong order! To solve this, one must either prepare the rom file by swapping the two 16k blocks, or program the EPROM in two steps, configuring the source file address and destination EPROM address to program at each step. This is what I did when I tested Cold Blood.

Here are the games/tools as well as the (E)EPROM flash chips I have used so far:
Game/tool File size Chip used Programming notes
Uchūsen Gamma 48k 64k OTP EPROM (Atmel AT27C512R) 0000-BFFF
Tiny slot checker 16k 32k EEPROM (Winbond W27E257) 4000-7FFF
Cold Blood 32k 32k EEPROM (Winbond W27E257) File 0000-3FFF -> EEPROM 4000-7FFF
File 4000-7FFF -> EEPROM 0000-3FFF
Cold Blood 32k 64k EPROM (TMS27C512) 4000-BFFF
Here are a few pictures showing example uses:
With AT27C512R EPROM

With AT27C512R EPROM

With a socket

With a socket

With an EEPROM in socket

With an EEPROM in socket



Need one?

This PCB is for sale at raphnet-tech.com.



Game controller

Playing games using the keyboard works fine, but I prefer using a gamepad or joystick. My MSX has two joystick ports on the right side. Those ports use the familiar 9-pin DE-9 style connectors, as seen on the Atari 2600, Commodore 64, Sega Master System, Megadrive, and many others.

I connected a Sega Master System controller to see what would happen, and it seemed to work perfectly at first. But I soon realized that something was wrong: Only one button was working!

A few moments later, I had 3 pinout tables in front of me and I was comparing how SMS, Megadrive and MSX controller ports are wired:

Pin #MSXSMSMegadrive
1Up Up Up
2Down Down Down
3Left Left 0 / Left
4Right Right 0 / Right
5+5v +5v
6Button 1 Button 1 Button A / Button B
7Button 2 SELECT
8Output (OUT) GND GND
9GND Button 2 Button C

So SMS controllers expect a GND on pin 8, but on MSX, pin 8 is a software-controllable output. By default, this output is set to a logic low level (more or less equivalent to GND), this is why my SMS controller partially worked. However, there is no way button 2 would work, being wired to pin 9, which happens to be GND on MSX.

So I built a simple adapter which connects GND and Button 2 to the right places, according to the table below:

SMSMSX Function
1 1 Up
2 2 Down
3 3 Left
4 Right
5 5* 5 volt power (used by Megadrive controllers)
6 6 Button 1
7 Not wired
8 9 GND
9 7 Button 2

I did consider wiring MSX pin 8 (OUT) to the SELECT input (pin 7) for Megadrive controllers. But the signal OUT being low by default, the left/right directions would not have worked, and the usable buttons would have been Start and A.

I could have used an inverter, as is done by the JoyMega project. Then some games and tools may have been able to use the additional buttons present on Megadrive controllers. But all I wanted was a controller with two working buttons and a good D-pad, so I went with this simple wiring-only adapter.

The adapter I built

The adapter I built

In use: SMS controller on a Sony HB-10 computer

In use: SMS controller on a Sony HB-10 computer




Looking for a ready-made adapter?

As I often do, I built several and they are for sale at raphnet-tech.com