JR-100:エミュレータv2にCPU速度設定機能を追加

長らく放置していたJR-100エミュレータver2に新機能を追加しました。CPU速度を設定する機能です。コメントでいただいていた機能をいつか実装しようと思いながらずっと手を着けられずにいましたがようやくできました。ついでにR6522の実装も強化しています(外見はよく分からないと思いますが)。 ダウンロードはこちらよりお願いします。 JR-100エミュレータ こんな設定画面です。ほぼ10倍速となる10MHzまで指定できます。 JR-100のBEEP音の周波数はクロック周波数に直結しているため、例えば実機でクロックを2倍に修正するとBEEP音の周波数も2倍になるはずですが、エミュレータではクロック … “JR-100:エミュレータv2にCPU速度設定機能を追加” の続きを読む

R6522:DDRBが入力モードでも矩形波出力がされる。

JR-100ではR6522のPB7に生成される矩形波をスピーカーに接続し、音声出力として用いています。このR6522のPB7に矩形波を出力するための条件として、データシートには以下の記載があります。 A precaution to take in the use of PB7 as the timer output concerns the Data Direction Register contents for PB7.  Both DDRB bit 7 and ACR bit 7 must be 1 for PB7 to function as the timer output.  If … “R6522:DDRBが入力モードでも矩形波出力がされる。” の続きを読む

6802アセンブラで逆アセンブラ形式の出力に対応

6802アセンブラで逆アセンブラ形式の出力に対応した。こんな感じで出力する。とりあえず相対分岐命令の時にラベル名を出すようにした。理想的にはアドレッシングモードがdirectとextendedのときもラベル名を出すべきな気もするけどまだできていない。まあいいか。だいぶ完成形に近づいてきた気がするな。

 

R6522のシフトレジスタの挙動が分からない

R6522のシフトレジスタの挙動をデータシートをもとに調べていますが、理解できないところが多い。 モード0: SRが無効になるモードなのに、CB1の立ち上がりエッジでCB2にシフトアウトするように読める。(“In this mode the microprocessor can write or read the SR and the SR will shift on each CB1 positive edge shifting in the value on CB2”) モード1: T2カウンタの下位バイト(Nとする)のタイムアウトごとにシフトするはずだが、添えられ … “R6522のシフトレジスタの挙動が分からない” の続きを読む

6802用アセンブラを作る(5) 一応完成

ひとまず仕様をfixさせ、ユーザーズガイドを作成しました。結局構文解析部分は命令毎に規則を書き下す方式にしました。状態遷移表の状態数は740状態、遷移数は3445個です。これくらいなら許容範囲かな? 規則部はこんな感じ。各命令に対応するシンボルから始まり、それぞれの命令で指定可能なアドレシングモードの規則を記述しています。文法違反の場合は、特別なエラー命令(ErrorInstruction)を生成し、パーサから抜けた後に命令リストをスキャンし、まとめてエラー表示する方式とします。

ちょっと悩んだのがアドレシングモードのうちDir … “6802用アセンブラを作る(5) 一応完成” の続きを読む

6802用アセンブラを作る(4) JR-100でのテスト

作成したアセンブラのプロトを使って、JR-100の実機試してみました。最終的な目的はJR-100に搭載されているVIA(6522)のテストのためなので、マシン語から直接VIAのレジスタを叩いてJR-100のスピーカーから音階を鳴らしてみました。JR-100への入力は同じく自作のFSKプレイヤーを使います。 プログラム JR-100ではVIAのPB7がスピーカーに接続されています。つまりVIAのタイマー1のフリーランモードでPB7に出力される方形波が音声として再生されるため、タイマー1の初期値を生成したい周波数に合わせて調整すればよいということです。タイマーが0になるごとにPB7出力が反転するの … “6802用アセンブラを作る(4) JR-100でのテスト” の続きを読む

6802用アセンブラを作る(3) プロトタイプ完成

構文解析部分で少し悩みましたが、ひとまずプロトタイプはできました。パーサーを自分で作るのとは異なり、ジェネレータを使うとエラー処理をうまく書くのが難しいです。いまのところ最低限の処理しか実装していません。またたまに例外を発生しますのでお気を付けを……。 2017/3/25追記 アセンブラの正式版の説明はこちらに移動しました。お手数をおかけします。 構文解析について 行の構文解析のところで二つの方式で悩みました。 方式1: 命令の正当性を構文規則で表現する こんな規則になります。

この方式だと構文エラーが自動的に判定できるので(当 … “6802用アセンブラを作る(3) プロトタイプ完成” の続きを読む

6802用アセンブラを作る(2) JFlexとCUPの導入

6802用アセンブラの構文解析部分を、将来の拡張性を見据えて、自前で作成するのではなく字句解析にJFlex、構文解析にCUPを使って作成することにしました。この記事ではそれぞれの導入と、それらを使った構文解析部分のプロトタイプを紹介します。 インストール 以下の環境にインストールするためのメモを記します。 Windows 10 Eclipse Version Mars.2 Release 4.5.2 JFlex ダウンロードページからtar.gzまたはzipファイルをダウンロードし、適当な場所に保存します。2017年2月26日現在、最新版は1.6.1。tar.gzもzipも内容は同じです。 以 … “6802用アセンブラを作る(2) JFlexとCUPの導入” の続きを読む

6802用アセンブラを作る(1) はじめに

VIA(6522)の動作をJR-100上で試すために、マシン語をハードコーディングする必要があります。中学生の頃は16進数のマシン語コードのまま平気でハードコーディングできましたが、この歳になるとさすがにつらい。 web上ではMS-DOS用のものなどが公開されていますが、JR-100エミュレータ用に作成したディスアセンブラがあるのでそのコードを流用して自作することにします。 アセンブリ言語の仕様書はこれを参考にします。 6800 Assembly Language Programming (外部リンク) これまでの記録 6802用アセンブラを作る(1) はじめに 6802用アセンブラを作る(2 … “6802用アセンブラを作る(1) はじめに” の続きを読む

JR-100のプログラムデータを再生するツール

JR-100: 全体

JR-100ではプログラムを音声データにより外部媒体(カセットテープ)に保存することが可能です。この音声データ(仕様)を再生するプログラムを作成しました。目的は、JR-100のVIAのエミュレーションを正しく行うために、VIAの仕様書を読むだけでは理解できない動作をJR-100実機を使って検証するためです。様々なパターンのマシン語プログラムを毎回打ち込んだりカセットからロードするのは時間がかかりすぎるので、PCから直接再生することにしました。 使い方 Java 1.7以降のJREがインストールされていることが前提です。 ファイルをダウンロードして適当なフォルダに格納してください。JR-100の … “JR-100のプログラムデータを再生するツール” の続きを読む