ZX81の回想禄

PR

×

プロフィール

ZX81

ZX81

カレンダー

コメント新着

コメントに書き込みはありません。

キーワードサーチ

▼キーワード検索

2025.10.29
XML
​​​
ZX81はVideo Frame Counterを監視する事で、V-SYNC同期が可能となります。

前回掲載したDisplayリフレッシュレートを使用します。
ZX81のDisplayリフレッシュレートについて | ZX81の回想禄 - 楽天ブログ

以下、プログラムです。
ファイル名「clock.c」で保存してください。

#include <input.h>
#include <stdio.h>
#define FRAMES 0x4034
int oldFrames;
// 60Hz:0x00, 40Hz:0x40 を返す
int getDisplayRefreshRate()
{
#asm
    ld a,0xfe
    in a,(0xfe)
    and a,0x40
    ld  h,0
    ld  l,a
    ret
#endasm
}
// 指令フレーム数分のV-Sync待ち
void vsyncWait(int waitFrameNum)
{
    int nowFrames;
    while (1)
{
        nowFrames = (int)(*((unsigned char *)FRAMES));
        if (oldFrames == -1)
        {
            oldFrames = nowFrames;
        }
        if (nowFrames > oldFrames)
        {
            oldFrames += 0x100;
        }
        if (oldFrames - nowFrames >= waitFrameNum)
        {
            oldFrames -= waitFrameNum;
            break;
        }
    }
}
int main()
{
int framePerSec;
    int min, sec;
    min = 0;
    sec = 0;
    oldFrames = -1;
    framePerSec = (getDisplayRefreshRate() == 0) ? 60 : 50;
    printf("display refresh rate: %d\n", framePerSec);
    while (in_KeyPressed(0x01bf) == 0)    // press enter to exit
    {
        zx_setcursorpos(1, 0);
        printf("time=%02d:%02d\n", min, sec);
        sec++;
        if (sec >= 60)
        {
            sec = 0;
            min++;
        }
        vsyncWait(framePerSec);
    }
}
ーーーーーーーーーーーーーーーーーーーーーーーーーー

なお、z88dkが必要となるので、以前の記事を参考にしてください。
z88dkセットアップ | ZX81の回想禄 - 楽天ブログ

コマンドプロンプトで下記を実行し、a.Pファイルを​読み込んでください。
 zcc +zx81 -create-app clock.c

以下、実行結果です。


この時間ぐらいから、少しずつ50Hzの方が早くなるのがわかります。










お気に入りの記事を「いいね!」で応援しよう

最終更新日  2025.10.29 18:08:21
コメントを書く
[ZX81C言語でのプログラム開発] カテゴリの最新記事


【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! -- / --
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x
X

© Rakuten Group, Inc.
X
Design a Mobile Website
スマートフォン版を閲覧 | PC版を閲覧
Share by: