見出し画像

X68000 もうC言語で良いよね

 オールマシン語プログラムは魅力的です。8ビット時代からパソコンに触れていた人ならきっと分かってくれるはず。
 でも、16ビット機の時代になるとマシン自体が高性能化して高機能化してどんどん複雑になっていく中、ガッツリ取り組むプロならそれでもマシン語に取り組む必要はあるのでしょうが、サンデープログラマにとってオールマシン語はかなり敷居が高いはなしですね。当時、Z80からMC68000へ移行してきたガチ勢でさえ断念した人も多かったのではないでしょうか?
 PC98でも、X68でもこの辺りからパソコンはプログラムをしてなんぼの時代からソフトウェアプレーヤーとしての意味合いが強くなったのだと思います。街のパソコン教室もかつてBASICを教えていた所も特定のソフトの使い方を教えるところが増えていったような気がします。「一太郎」や少しあとでは「EXCEL」などです。そりゃ、そうですよ。僕たちがどんなに頑張ってもエクセルのような高機能なソフトウェアなんて作れないですしね。

 でも、「僕たちがやりたいのはそんなことじゃないパソコンを操りたいんだ。」そんな風に当時思っていた人たちが楽しんでいただけたら良いなと思います。再びX68000に興味を抱いた方、タイムスリップして遊びましょう。あれもこれもと手を広げすぎると結局わからないで終わってしまうので、マシン語はしばらくお預けです。無料で手に入るXCでしばらく頑張りましょう。マニュアルもあるでよ。(昭和産のじぃでないと分からない)

#include <iocslib.h>
#include <stdio.h>

/* X68000の16ビットカラーコード定義 */
#define COLOR_BLACK  0x0000
#define COLOR_WHITE  0xffff
#define COLOR_BLUE   0x003f

int main(void) {
    int old_mode;
    struct FILLPTR pad;
    int i;   /* loop */
    /* 現在の画面モードを保存 */
    old_mode = CRTMOD(-1);

    for(i=0;i<17;i++)
    {
        /* 画面初期化 */
        CRTMOD(i);
        G_CLR_ON();
        WINDOW(0, 0, 256, 255);

        /* カラーパレット登録 */
        GPALET(0, COLOR_BLACK);
        GPALET(1, COLOR_WHITE);
        GPALET(2, COLOR_BLUE);

        /* 四角表示(仮) */
        pad.x1 = 50;
        pad.y1 = 50;
        pad.x2 = 70;
        pad.y2 = 70;
        pad.color = 1;
        FILL(&pad);
        
        printf("%d\n",i);
        B_KEYINP();    /* 入力待ち */
    }
    CRTMOD(old_mode);
    return 0;
}

画面に画面モード番号と21ドットの四角を表示するテスト用プログラムです。
今回、初めて出てきた関数など

G_CLR_ON
WINDOW
B_KEYINP
GPALET


FILL
struct	FILLPTR	{
	WORD	x1;
	WORD	y1;
	WORD	x2;
	WORD	y2;
	UWORD	color;
};

FILLで使用するFILLPTR構造体は、上記のようにiocs.hに定義されています。構造体が何かって?「一緒に使う変数をまとめたもの」みたいにとりあえず考えておいてください。

今回は、画面モードによる変化を知りたかったので、ループを使ってモードを変えています。また、今のモードを知るためにprintf関数を使ったので#include <stdio.h>によって標準入出力に必要なヘッダーを指定しています。

気付いたこと

途中のモードでは、パレットの指定色が違ってしまっています。不明です。
最終的にどのモードを使うかは作りながら決めていきます。

2026.7.5

いいなと思ったら応援しよう!