13

I'd like to try to create software (and maybe simple games) for the MSX standard.

I know I have two ways to do so, either I use MSX Basic or Z80 assembly. I think that Z80 assembly is more powerful than MSX Basic.

I already have experience with programming but I never did on old systems like the MSX.

I'd like to know if anyone has good ressources/tutorials/guides on how to develop programs for the MSX strandard.

I'd also like to know if there are any ways to develop such programs on a modern day system (maybe via emulator). I'm currently running Linux Mint, is there any kind of "IDE" that would allow me to do so?

9

Here are some useful resources for MSX development (disclaimer: all created by me)

  • MSX2 Technical Handbook: A must to learn how the internals of MSX computers work, and also a reference of MSX BIOS and MSX BASIC commands. Originally published by ASCII Corporation in paper, I converted it to text files back in the 90s and then to a GitHub repository in 2019).

  • If you want to develop using C, a very good tool is SDCC. If you want to give it a try, take a look at the libraries I have developed.

  • If you prefer assembly, take a look at Sjasm, a very nice assembler. Originally developed by Sjoerd Mastijn and distributed as a ZIP file, I published it as a Git repository and added compatibility with the MSX assembler Compass.

  • My MSX software repository can be useful if you like to learn by reading others' source code.

But enough of me! Other fine resources by other amazing MSX users are:

(Side note: if you need to learn (or refresh) Z80, did you know that Programming the Z80 by Rodnay Zaks is available online?)

As for the IDE, I just use Visual Studio (since I use it for work anyway) as a simple text editor and build by running SDCC or Sjasm from the command line. Other people use different tools, adapting them to their needs; here is for example an article on how to use Eclipse to develop for SDCC. But I don't know of any IDE specifically built for MSX (or any other retro platform) development.

  • Nice! What do you use to create the MSX binary file header, please? It's the only part of my answer that relies on the rather large z88dk package, and it's a trivial task – scruss Dec 6 '16 at 0:03
  • 1
    The header for BLOADable files? I just put this at the beginning of the file: db 0FEh - dw startAddress - dw endAddress - dw runAddress – Konamiman Dec 6 '16 at 8:12
5

I've found that the MSX Assembly Page has some great resources. I think their Z80 instruction set overview page and code samples are just what you're looking for.

The noob guide on MSX.org may also help you.

(I realize that this is pretty much a link-only answer. If I can, I will try to elaborate on this answer and provide additional resources.)

  • Thank you for the links, I've just installed openmsx and a few compilers to try to set up a working devlopment environment. I currently have a problem where none of my Z80 assembly compilers seem to want to compile a simple "Hello world" I found to test them. I tried asmsx, pasmo and z80asm (all of them on Linux). Is there any sample MSX Z80 assembly code I could try to compile to test those compilers? I need to have a stable environment before I go deeper in learning assembly. – Informancien Dec 4 '16 at 2:33
  • What Hello World example are you using? This one? – JAL Dec 4 '16 at 4:12
  • I tried this one, and the three compilers failed (asmsx, z80asm and pasmo). – Informancien Dec 4 '16 at 10:32
4

Here's a small Hello, World! in Z80 Assembly, built entirely through cross-assembly and emulation:

    ;; hello-msx.asm - hello world for msx - scruss
    org 40000
CHPUT:  equ $00A2

    ld hl, msg
    call puts
    ret

puts:               ; print 0-terminated string in HL
    ld a,(hl)
    or a
    ret z
    call CHPUT      ; displays one character in A
    inc hl
    jr puts

msg:    defm "Hello, world!",13,10,0

Compile it to a simple binary image with z80asm:

z80asm -o hello-msx.bin hello-msx.asm

Convert this to an MSX binary with header using z88dk's appmake command:

appmake +msx -b hello-msx.bin -o hellomsx.msx

This MSX binary can be copied to a disk image. MSX disks were 720 KB DSDD FAT images, so there are lots of ways of making these. I used MSX Disk Image, mainly because remembering all the right commands for dd, mkfs and mount are too much for me to remember.

With openmsx and suitable ROMs, you can run it from disk:

openmsx -machine msx2 -diska msx1.dsk

openmsx showing output

Notes:

  1. z80asm is supposed to include some MSX-specific library files. As I only used one BIOS call, including them was a bit much.

  2. z88dk also has an assembler called z80asm, and it's not compatible with the one I used. z88dk has some MSX specific options: MSX hints & tools — though if you're using a packaged Linux distribution, it may not support all of the newer options.

  3. Although shown running on an MSX2, this code is MSX 1 compatible. I only used MSX2 as it has obvious disk suport, and my version of z88dk didn't seem to support audio for making cassette images.

  4. z88dk can also develop from a Small C dialect, creating MSX binaries directly: zcc +msx -create-app -o hello-c hello.c

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.