1981年11月4日水曜日

[言語] PC-6001でBASIC





[言語] PC-6001でBASIC
特設:PC-6001 Development
このサイトで扱っている PC-6001 の開発についてです。
資料も環境も乏しいため容易ではありませんが、高度なことをしなければ1から始めてもそれなりの事は出来ます。
久々に弄りたいけど、資料集めにオークションにまで手を出すほどでは無いという方も結構居ると思います。
経験や記憶に頼る場合もありますが、持っているものは活用しつつ、試行錯誤で理解を深めていく昔ながらの方法で開発を進めましょう。
■ 開発環境
いきなりアセンブラの話になりますが、BASIC の知識も必須です。
最初に立ち上がるのが BASIC なので当然といえば当然ですが。
Windows 上での開発とエミュレータでの実証という環境が一番手軽だと思いますので、以下そのように進めます。
1)アセンブラを用意する
アセンブラは「AS」を使います。
http://john.ccac.rwth-aachen.de:8000/as/index.html
ここの Win32 Binaries からダウンロードします。
AS は、多機能なマクロアセンブラです。
ソースの書式は一般的なもので、ZASM(Vector) などのソースも最小限の手直しで使えました。
ただし、多機能でターゲット CPU も多い分マニュアルも巨大で、機能を把握するまでが大変です。
サンプル解説も少ないので、筆者も書式が合っているのか未だ自信がありません。
とりあえず、EQU や ORG などの擬似命令のいくつかを覚えておけば間に合うだろうと思います。
2)プログラム書く or ソースを用意する
このサイトのソースリストであれば、上に掲載したスクリーンショットと同様に各圧縮ファイルを展開します。
アセンブラ本体は bin フォルダに配置されているので、パスを通しておくと良いでしょう。
AS のデフォルトの拡張子は .ASM ですが、ここでは .Z80 とします。中身はテキストファイルなので、
メモ帳やテキストエディタでコードを書いていきます。
Z80 非公開命令も使えますが、コンパイル時にオプション -CPU Z80UNDOC と指定しなければなりません。
使えるレジスタは「IXH,IXL,ILY,IYL」でなく「IXU,IXL,IYU,IYL」となることにも注意します。
数値の書式は「0abcdH」などのほか、指定によって「$abcd」や「0xabcd」なども使えるようです。
ラベル以外の命令や ORG などの擬似命令は行頭に置くとエラーになるようです。
BASIC のプログラムを書く場合でも、Windows 上でエディタを使って書いてエミュレータで読める形式に
変換するツールがあります。詳しくはこちら→iP6 homepage。
3)コンパイル
このサイトのソースに入っている zoom.bat 等バッチファイルには、コンパイルの一連の作業を記述してあります。
ダブルクリック一発で(エラーが出なければ)バイナリファイルが出来上がります。
自力でコンパイルする場合は、ZASM のヘルプを良く読むか、各.bat ファイルを参考にしてみてください。
エミュレータで読み込む場合は PC6001VW であれば、モニターモード(ALT+F6キーを押す)から setbin コマンド
または bat コマンドで仮想マシン内のメモリに直接バイナリファイルを読み込めます。
このモニターモードからは、BASIC の cload 命令で読み込めるテープイメージ形式(.P6) に変換することも出来るので大変便利です。
ただし、BASIC+マシン語といった構成になると若干面倒かもしれません。
テープイメージをバイナリエディタで開き、切り貼りをする作業が必要になります。
実機でやるよりは全然楽な作業ですが。
■ 資 料
ネット上に技術的な資料はほとんどありません。
筆者が手元に持っている実物の資料といえば、新星出版社というところから出ていた
「PC-6001/6001mkII わかるマシン語入門」
という本1冊だけで、これにしてもI/Oの詳細やメモリーマップなどについては載っていません。
今現在でも手に入る資料としては 2005年に ASCIIから出た
「みんながコレで燃えた!PC-8001・PC-6001」
という本があります。これは普通に書店で入手できました。
内容については割愛するとして、資料としてみた場合、付録の CD-ROM 中に(本文中にも抜粋されていますが)昔の
月刊アスキー LOAD TEST
という記事の PDF が含まれており、若干見にくいですがメモリーマップや BASIC 命令表などが掲載されています。
直接関係はありませんが、ビデオチップの MC6847 はデータシートが PDF で入手できます。
これは検索すればあちこちで見つかるはずです。
大半はチップの概要ですが、スクリーンモードに関する資料が数点見られます。
Z80 命令表などは基本中の基本ですが、見やすいものが欲しいです。
命令数が多いのとクロック計算が面倒なので。
・というわけで作ってみた命令表
・HOME OF THE Z80 CPU
Z80 の情報多数。全て英語です。
・B型同盟  PC-6601 BASIC リファレンスを公開されています。

特設:PC-6001 Development
http://www.geocities.jp/submarine600/html/p6/pc60.html





















フラグの意味
フラグの意味
Sサインフラグ。演算結果の最上位ビットのコピー。
Zゼロフラグ。演算結果が 0 なら 1。
Y演算結果の bit5 のコピー。
Hハーフキャリーフラグ。bit 3 から bit 4 への桁上がり(桁借り)のとき 1 になる。
X演算結果の bit3 のコピー。
P/Vパリティフラグまたはオーバーフローフラグまたは IFF2 の状態(兼用)。

セットされたビット数が偶数のとき 1。奇数のとき 0。

演算結果が +127 ~ -128 の範囲を超えたとき 1。範囲内に収まるときは 0。

特別な命令で IFF2 の状態がコピーされる。
Nサブトラクトフラグ。演算が加算系の時 0、減算系のとき 1。
Cキャリーフラグ。演算で桁溢れ・桁借りが生じたとき 1。






フラグの意味
bit76543210
FLAG S Z Y H X P N C

▼ 記号の意味
-変化なし
0リセット
1セット
*結果によって変わる
?不定
P1=偶数パリティ,0=奇数パリティ
V1=オーバーフローあり,0=オーバーフローなし
IFF割り込み状態


































































































































































































▼ 8ビット・ロード命令
ニモニック オペレーション 備考 ステート バイト フラグ
S Z H P/V N C
LD r,r' r<
- 4 1 - - - - - -
LD r,n r<
7 2
LD r,(HL) r (HL) 7 1
LD r,(IX+d)
LD r,(IY+d)
r<<(IX+d) r<<(IY+d) -128≦d≦127 19 3
LD (HL),r (HL)<
- 7 1
LD (IX+d),r
LD (IY+d),r
(IX+d)<
-128≦d≦127 19 3
LD (HL),n (HL)<
- 10 2
LD (IX+d),n
LD (IY+d),n
(IX+d)<
-128≦d≦127 19 4
LD A,(BC)
LD A,(DE)
A<<(BC) A<<(DE) - 7 1
LD A,(nn) A<<(nn) 13 3
LD (BC),A
LD (DE),A
(BC)<
7 1
LD (nn),A (nn)<
13 3
LD A,I A<
9 2 * * 0 IFF2 0 -
LD A,R A<
9 2 * * 0 IFF2 0 -
LD I,A I<
9 2 - - - - - -
LD R,A R<
9 2
LD xr,n xr<
未定義命令
xr=IXH,IYH,IXL,IYL
11 3 - - - - - -
LD xr,r xrr 未定義命令
xr=IXH,IYH,IXL,IYL
r=A,B,C,D,E
8 2 - - - - - -
LD r,xr r<
未定義命令
r=A,B,C,D,E
xr=IXH,IYH,IXL,IYL
8 2 - - - - - -
LD IXH,xr
LD IXL,xr
IXH<
未定義命令
xr=IXH,IXL
8 2 - - - - - -
LD IYH,xr
LD IYL,xr
IYH<
未定義命令
xr=IYH,IYL
8 2 - - - - - -








PC6001本体NG+拡張ユニット+フロッピードライブ 

ヤフオク
https://page.auctions.yahoo.co.jp/jp/auction/s775958912









0 件のコメント:

コメントを投稿