初版 2026/02/07
改訂


random.c

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <msx/gfx.h>

#define JIFFY       0xfc9e;

void randomize()
{
    // 乱数シード初期化
    //
    // シード値はz88dkのスタートアップ時に設定されるが、常に一定値のため、
    // seed_rndの引数にJIFFY(0xfc9e)の値を与えて再設定する
    // ※seed_rndの引数は unsigned int型

    // JIFFYのアドレスを持つポインタ変数定義
    uint16_t *seed = (uint16_t *)JIFFY;
    // JIFFYの値で乱数を初期化
    seed_rnd(*seed);
}

uint8_t rnd(uint8_t value)
{
    return get_rnd() % value;
}

void main()
{
    uint8_t value;

    // 乱数初期化
    randomize();

    // 乱数生成・表示
    for (uint8_t i = 0; i < 5; i++) {
        value = rnd(10) + 1;
        printf("value : %u\n", value);
    }

    return;
}
  • msx/gfx.hをinclludeする。
  • seed_rndで乱数シード設定、get_rndで0~32767の乱数を取得。上記のコードは、0~10の値を取得する。


コンパイル

compile.sh

#!/bin/sh
zcc +msx -lmsxbios --list -subtype=msxdos $1.c -o $1.com


$ ./compile.sh ./random


実行結果

2026-02-07-z88dk-c-random_01.png

※MSXDOS.SYSとCOMMAND.COM、コンパイルして作成した.COMを配置したディレクトリをopenMSXでマウント、MSXDOSから実行