LoginSignup
1
0

More than 1 year has passed since last update.

Z80のモニタープログラム

Last updated at Posted at 2020-07-04

当初はFlashにflashromで何度も焼いて試そうと思ったのですが、PLCCパッケージは接触が悪いのか結構な頻度でエラーになるので、モニタープログラムを使うことにしました。

LCDを試してタイミングの調整がトライ&エラーになるので、何回も焼いて試すのは現実的ではないと思いました。

私のボードはZ80 4MHzでROM(Flash) 32K,RAM 32Kで8251,8255を実装して割り込み未使用と同じようなターゲットを利用したオープンソースのモニタープログラムを探してみました。

日本語や英語で検索して、それほどたくさんはありませんでしたが、全体的に昔のような7セグを使ったものよりシリアルのものの方が多いようです。

海外だとシリアルに8250系を使ってるケースもあります。また複雑に作り込んであるものはちょっと遠慮しました。

いろいろ検索してみたところトルコのM.PEKERさんが作られたEfexMonというプログラムが見つかり、圧縮ファイルの中にアセンブラのコードがありました。ソースコードはGPLではなく、商用での利用は許可が必要と書かれています。

ターゲットのボードはIOのアドレスやボーレートがちょっと違っていますが、ほとんど同じ構成です。

M.PEKERさんの回路の8251のボーレートは19200です。CPUクロックの4MHzから74LS163を使って307.2KHz(x16)に近いクロックを作っているようです。私の回路は30年前に手にいれたエプソンの8640CNを使い9600にしてあります。正確にCPUのクロックから分周する方法は、半端な数字のクロックが必要で分周の回路も必要になるので、面倒なので8640CNを使うことにしたような気がします。

EfexMonはアセンブラや逆アセンブラが入っていて8Kとモニタープログラムにしては大きいですが、ROM領域は32Kあるので問題ありません。

8251のアドレスだけ変えてzmacでアセンブルしてzoutディレクトリにできるcimファイルをflashromで焼いて試してみました。

FTDIのモジュールのTx,Rx,GNDを8251のRx,Tx,GNDに接続して、シリアル通信プログラムを起動して電源を入れたところ動きました。

EfexMon By M.PEKER v1.0b
Press H for help

Ready.

C:\>
A-Assembler
D-Disassembler
L-Load
S-Save
E-Edit
W-Warmst
M-Move
X-Hexdump
G-Go
F-Fill
U-Routines

loaded adress:$8000

C:\>

C:\>G-$8000

コマンドは大文字のみで、コマンド実行からプロンプトに戻るのは[ESC]になります。

Lコマンドを実行して、 Macなどでasm8080やzmacでアセンブルして作成したIntel HEX(hex)ファイルをコピペしてGすれば実行できます。Macの場合pbcopyコマンドでhexファイルをクリップボードにコピーできます。

cuを使っている場合は"~ + cat filename"でできます。

screenコマンドで接続しているのであれば、hexファイルを/tmp/screen-exchangeにコピーしておいて"^a <"でペーストバッファに読み込んで、"^a ]"でペーストして読み込ませることができます。

jermの場合は"~ > filename"でできます。

EfexMonはhexのチェックサムを確認していないようです。

RAMは以下のようなマップになるようです。

RAM START: 8000H
RAM END : FFFFH

STACK: F800H

SYSTEM VARIABLES:
F900H-F910H
FF00H-FFFFH

割り込みを使いたい場合はINTADRS(INT:0F908H,NMI:090AH)にハンドラのアドレスをセットすると良いようです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0