電子趣味の部屋

電子系のガジェットやアプリ開発等の趣味の話題を書いてます

MSXで遊ぶ!MegaFlashROM SCC + SD

以前も一度書いた内容ですが、RAMありバージョンに買い替えたので、構成を修正して再掲載します。

MegaFlashROM SCC+ SD 1slot + 512K RAMを買ってみました。

販売ショップ:MSX Cartridge Shop
購入したのはSD1Slotの追加RAM無しバージョンです。

ものすごく便利だと思ったのは、RAMが128KB以上あるとファイルメンテナンスツールのMultiMenteが起動し、ROMやDSKイメージファイルを選択するだけで自動的にフラッシュにROMイメージを書き込んだり、DSKイメージを仮想ディスクに設定したりできます。
128KB以下の機種ではDOSコマンドライン上でコマンドを使って使用します。

FS-A1STとHB-F1XVでは電源投入時の起動では追加RAMが認識されず、リセットすると認識されました。

はじめ戸惑うポイントの操作メモを書いておきます。

ROMイメージ

一度FlashにROMイメージを書き込むと毎回Flashの内容が起動されるので、元に戻すときはFlashを削除する

手順

カーソルキー (↑)を押しながら起動
リカバリーモードの画面になるので、F1キーで"F1 : Erase MegaFlashROM"を選択するとFlashが削除される

DSKイメージ

一度仮想ディスクに設定すると毎回仮想ディスクの内容が起動されるので、元に戻すときは仮想ディスクの設定ファイルを削除する

手順

0を押しながら起動
フロッピーディスクエミュレーションを無効にしてNEXTORが起動されるので、NEXT_DSK.DATファイルを削除する

ディスクイメージ変更

ディスクイメージファイルの拡張⼦に.FDx (x=1~9)を使⽤ると、複数の仮想ディスクを設定でき、ディスクアクセス時に数字キーを押すことにより切り替えができる。
切り替えのタイミングはディスクアクセスが始まる瞬間なので、"ディスク2をセットしてリターンキーを押してください"のようなシチュエーションの場合は、2を押しながらエンターを押す。


MSXパーフェクトカタログ (G-MOOK)

MSXパーフェクトカタログ (G-MOOK)

  • 発売日: 2020/05/28
  • メディア: ムック

GBDK(ゲームボーイの開発環境)メモ - キー入力

久しぶりの開発メモです。
ゲームボーイの開発環境のGBDKについて、キー入力のメモです。

開発環境について

過去のエントリーを参照してください
blog-e.uosoft.net

取得方法

キー入力はGBDKのファンクションの joypad() で取得できます。
gb.h をインクルードしてください。

joypad() のキーは8ビットの値で、押されているキーのビットが1で返されます。
ビットのマスクは gb/gb.h (includeフォルダ直下のgb.hを読めばこちらのファイルも読まれる)で定義してあります。
joypad()で取得した値と取得したいキーのマスク値をANDして、0でなければ押されている状態となります。

UINT8 key;
key = joypad();
if (key & J_A) {
    // Aボタンが押されている場合
} else {
    // Aボタンが押されていない場合
}

各ボタンのマスク値

定義 マスク(16進数) マスク(2進数)
J_START 0x80 10000000
J_SELECT 0x40 01000000
J_B 0x20 00100000
J_A 0x10 00010000
J_DOWN 0x08 00001000
J_UP 0x04 00000100
J_LEFT 0x02 00000010
J_RIGHT 0x01 00000001

サンプルソース

押されているキーを表示します。

#include <stdio.h>
#include <gb.h>

void main()
{    
    UINT8 key;

    while(1) {
        key = joypad();
        
        if (key & J_START) {
            gotoxy(1, 1);
            printf("START\n");
        } else {
            gotoxy(1, 1);
            printf("      \n");
        }
        
        if (key & J_SELECT) {
            gotoxy(1, 2);
            printf("SELECT\n");
        } else {
            gotoxy(1, 2);
            printf("      \n");
        }
        
        if (key & J_B) {
            gotoxy(1, 3);
            printf("B\n");
        } else {
            gotoxy(1, 3);
            printf("      \n");
        }
        
        if (key & J_A) {
            gotoxy(1, 4);
            printf("A\n");
        } else {
            gotoxy(1, 4);
            printf("      \n");
        }
        
        if (key & J_DOWN) {
            gotoxy(1, 5);
            printf("DOWN\n");
        } else {
            gotoxy(1, 5);
            printf("      \n");
        }
        
        if (key & J_UP) {
            gotoxy(1, 6);
            printf("UP\n");
        } else {
            gotoxy(1, 6);
            printf("      \n");
        }
        
        if (key & J_LEFT) {
            gotoxy(1, 7);
            printf("LEFT\n");
        } else {
            gotoxy(1, 7);
            printf("      \n");
        }
        
        if (key & J_RIGHT) {
            gotoxy(1, 8);
            printf("RIGHT\n");
        } else {
            gotoxy(1, 8);
            printf("      \n");
        }
        
    }
}

ゲームボーイパーフェクトカタログ (G-MOOK)

ゲームボーイパーフェクトカタログ (G-MOOK)

  • 発売日: 2018/10/29
  • メディア: ムック
ゲームボーイコンプリートガイド

ゲームボーイコンプリートガイド

  • 発売日: 2019/08/01
  • メディア: Kindle版

結局買ってよかった Surface Go 2

サブ機に約10万円を掛けるのはどうかなと思いましたが、Surface Go 2 (Pentium Gold, SSD128GB)を買いました。

実家や旅行に行くときや、気軽にプログラミングやSteamの軽いゲームやProject Eggで遊びたいと思い、2年ほど前にASUS TransBook T101HA-G128を中古で買ったのですが、1年ほどで電源がつかなくなってしまいました。Project Eggのゲームでフルスクリーンにするとうまく表示できずdgVoodoo2等を使用したりと不満点はありましたが、AtomのXシリーズは以前のAtomと違い結構使い物になってたので、結構お気に入りでした。
その後も小型の物が欲しいと思い8.9インチのASUS TransBook T90CHI-3775を買いました。小さいながらも普通の日本語キーボードで大きさも手頃なので満足していましたが、本体とキーボードを別々に充電するのが煩わしく、Xシリーズ以前のAtomでメモリも2GBでは速度的にも満足できませんでした。
次にGPD Pocket2にしましたが、キーボードに慣れず、せめて日本語キーボードがあった方が良いと思い、OneMix3 S+に変えました。こちらは変則キーボードながらも半角/全角キーがあり、タブも上の方ではなくてAの横にあり一見使いやすそうでしたが、そうでもありませんでした。また光学式のポインタがあるのですが、ちょっと触っただけでもクリックとして反応してしまうので、こちらも不満でした。レスポンスは悪くなく、マウスの左右ボタンもあるのでクリック動作をOFFできれば便利そうですが、WindowsにもドライバにもBIOSにも設定はありませんでした。
こんな感じで1年間の間に色々使っていたのですが、全て中古で買った時と売った時の値段はあまり変わらない(中には高いのもあり)のでそんなにマイナスにはなっていません。

結局は前から気になっていたSurface Go 2を買ってしまいました。性能の割には価格が高いと感じなかなか手が出せなかったのですが、結果として目的に合った条件をすべてクリアして満足できるものでした。

また中古で探そうと思ってたのですが、ヨドバシカメラに実物を見に行ったら欲しくなりその場で買ってしまいました。

選択したモデルは、CPUがIntel Pentium Gold 4425Y、メモリ8GB、SSD128GBの物です。もちろんタイプカバーも一緒に購入しました。
core m3の物と迷ったのですが、冷静に考えるとサブ機にさらに2万円を追加するのは無駄だと思い、CPUはAtomのXシリーズ以上であれば結構使えることが分かっていたので、それより良いIntel Pentium Gold 4425Yは十分な範囲でした。またeMMCではなくSSDなので、実際の使い勝手は予想以上に快適です。3D性能も意外と良く、Skyrim(古い方)の低設定であれば普通に遊べるほどです。Steamにあるグラフィックをあまり売りにしていないインディーズ系のゲームは普通に遊べるものが多くありました。
Project Eggや古めのゲームでもフルスクリーンで正常に遊べます。

今は10インチ以下は変則キーボードの物ばかりで、10インチのノートで探してもAtomやCeleronばかりなので、希望するサイズではほぼ唯一の候補でした。

決してメインでは満足できる性能ではありませんが、10インチ以下のサブ機を探す場合は非常にお勧めできる逸品だと思います。

TINY ARCADE 色々買ってしまいました。

発売してた時から気になりスペースインベーダーだけ買ったTINY ARCADEですが、久しぶりにチェックしたら結構安くなってたので、色々買ってしまいました。

f:id:uosoft:20200929154806j:plain

現在持っているのは、スペースインベーダーパックマンディグダグフロッガーギャラクシアンギャラガです。

正直操作はし辛く文字も潰れているので、本気で遊ぶものではないですね。アクセサリーです。

適当に配置すると、昔の駄菓子屋に合ったゲームコーナーを思い出しました。

f:id:uosoft:20200929154859j:plain

遊びにくいとわかっていても、この形の筐体を知っている世代には持っているだけで満足できるものだと思います、

今でもできるMSXの開発メモ 2020年版

前回のゲームボーイの開発環境に続き、MSXの開発環境も2020年の最新情報で書き直します。

ふとMSXで自作ゲームを作りたいと思い、開発環境を整えて作ってみました。

BASICではつまらない、だからと言って実機でアセンブラやC言語を書くのはつらいと思い、色々なC言語のクロス開発環境を色々試してみた結果、z88dkにしました。他の環境はそれぞれ独特の癖があったりしましたが、z88dkはANSI Cに準拠した形で書いていけば一番素直に動く印象でした。

どこかで2次元配列は使えないようなことを書いてあるサイトを見ましたが、現在のバージョンでは問題無く使えます。プログラム中で4次元配列まで使いましたが、特に問題はありませんでした。

z88dk

 ダウンロードサイト

http://nightly.z88dk.org/

こちらから最新版をダウンロードしました。

2020年の現在でも更新を続けています。
どこかで2次元配列は使えないようなことを書いてあるサイトを見ましたが、現在のバージョンでは問題無く使えます。プログラム中で4次元配列まで使いましたが、特に問題はありませんでした。

環境変数PATHへz88dkのルートフォルダ以下のbinフォルダを追加してください

環境変数ZCCCFGへz88dkのルートフォルダ以下のLib\Configフォルダを追加してください

コンパイルはbinフォルダ中にあるzccコマンドでできます。

zccコマンドのパラメータ-subtype=msxdosでmsx-dos実行用comファイルで出力され、-subtype=romでROMイメージのromファイルが出力されます。

他の環境変数まで書き換えるのが嫌なので、以下のようなバッチファイルを作り、コンパイルを実行してました。

MSX-DOS実行用comファイル作成
(ソースファイル名:test.c, 出力ファイル名 test.com)
set PATH=<z88dkのルートフォルダ>\bin
set ZCCCFG=<z88dkのルートフォルダ>\Lib\Config
zcc +msx -lm -subtype=msxdos test.c -o test.com
ROMイメージ用romファイル作成
(ソースファイル名:test.c, 出力ファイル名 test.rom)
set PATH=<z88dkのルートフォルダ>\bin
set ZCCCFG=<z88dkのルートフォルダ>\Lib\Config
zcc +msx -lm -create-app -subtype=rom test.c -o test.rom

パラメータの細かい意味は調べてませんが、以上のような組み合わせでコンパイルできました。

実際にゲームを作ってみました

 TI-Nspire でパズルゲームでもグラフ電卓用に作ったパズルゲームをMSX用に作ってみました。

このパズルゲームは自分のチュートリアルの意味で新しい環境で開発する際の題材にしているので、実はGB版があったりと様々な環境で作ってます。

f:id:uosoft:20180818235648j:plain f:id:uosoft:20180818235702j:plain

せっかくなので、フロッピー版とROM版を作りました。

フロッピー版はMSX-DOSのディスクへnu.comを入れて、autoexec.batで自動実行するようにしました。

ROM版はMSXで遊ぶ! Mega Flash ROMで作り方を紹介したフラッシュROMを停止スイッチ無しで作ってそこに入れました。

OPFで出力されたROMファイルを書き込むことができます。

f:id:uosoft:20180818235904j:plain

無事に出力されたROMファイルを書き込むことができました。

ラベルまで作るといい感じになります。

f:id:uosoft:20180820001330j:plain

 

COMファイルはともかく、ROMファイルで出力されたものも結構素直に動作しました。

パラメータを変えるだけでROMファイルまで簡単に出力できるのは他の環境では中々ないので、z88dkはお勧めできます。

 

MSXパーフェクトカタログ (G-MOOK)

 

今でもできるゲームボーイの開発メモ 2020年版

以前ゲームボーイの開発環境を書いたのですが、現在リンク切れや便利なツールを見つけたので、2020年版として新たに書き直します。

ダウンロード

GBDK (Gameboy Developers Kit)

開発で使うSDK(Windows環境)。C言語です。
GBDKバージョン2.1.5ダウンロードページ

GBTD (Gameboy Tile Designer)

ゲーム上で動くアイコンを作成するためのツール
ダウンロードページ

GBMB (Gameboy Map Builder)

マップを作成するためのツール
ダウンロードページ

Pic2Tiles

ビットマップ(bmp)形式のファイルからGBDKで扱えるタイルデータ(unsigned charの配列)のソースを生成するツール
ダウンロードページ

GBエミュレータ

このリンクのサイト等から探してください
BGBなんて良いかもしれません。2020年でもバージョンアップされています。

実機で動かすために

海外通販等で探せば空FLASHカートリッジに書き込むものもありますが、出力したROMファイルをSDカードに入れて実行できるEverDrive GBを使用すると手軽にできます。

環境構築

  1. GBDKを解凍すると"SDK"ファルダがあるので、これをCドライブの直下に置く
  2. DOSプロンプトを開く
  3. カレントディレクトリを"C:\SDK\gbz80-gb\2-1-5\lib"へ変更する
    • c:
    • cd \SDK\gbz80-gb\2-1-5\lib
  4. "make.bat"を実行する
    • make.batを実行する
  5. 環境変数の設定(しなくても良いが、してると便利)
    • システム環境変数のPathへ";C:\SDK\gbz80-gb\2-1-5\bin"を追加する
    • GBTDとGBMBとPic2Tilesは単体のツールなので、解凍し適当なフォルダに置く

試しに実行してみる

サンプルソース

簡単ですが、このソースを"test.c"と名前をつけて保存します。

#include<stdio.h>

void main()
{
    printf("GAME BOY TEST");
}

コンパイルし、ROMファイルを生成します

lcc -o test.gb test.c

エミュレータで動かしてみる

生成された test.gb をエミュレータで実行します

無事に表示されました。

実機で動かしてみる

EverDrive GBを使用して初代ゲームボーイで動かしてみました。画面表示に違和感があるのは、バックライト液晶に改造してあるからです。この事もそのうち書きたいと思います。

iPhoneでもAndroidでも言えますが、実機で動くと楽しくなります。

ブログ名を変更します

ちょうどiOS SDK (当時はiPhone SDK)が公開されたころに、自分のメモ用にiOSの開発ネタを書いたのが始まりの当ブログですが、仕事や生活の変化でなかなか個人で開発することが少なくなり、すっかり趣味のページになってしまいました。
ブログの名前も色々変えてきたのですが、本日よりシンプルに「電子趣味の部屋」に変更します。

また個人で借りてるサーバ上にサブブログ「電子趣味の部屋 別館」を開設しました。
はてなの仕様上扱えないJavaScriptを使った記事や色々と実験的な事や、本家では扱いたくないグレーな話題等はサブブログで公開していくつもりです。

今後とも本家、サブページ共々よろしくお願いします。