KL5C80A12マイコンボードの製作
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
KL5C80A12はZ80互換の高速高性能8ビットマイクロコントローラです。
残念なことに数年前に生産中止になってしまいました。
しかし当社ではKL5C80A12を使った組込みマイコンボードはまだ健在です。
そのKL5C80A12を使ったND80Z3.5上位互換マイコンボードの製作記事です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第32回]
●ZB3BASICシステムサブルーチン
ずっと以前から整理したいと思っていたZB3BASICのシステムサブルーチンです。
アドレス1000から始まるメモリ領域にはZB3BASICでコールしている基本的なサブルーチンがまとめてあります。
BIOSのようなものです。
その機能はサブルーチン名から大体は想像がつくこともあって、今まで長い間整理することなく来てしまいました。
しかし今回ZB3BASICをもとにして8086版BASICを作成することになり、8086用のシステムサブルーチンについてその機能とともに使用レジスタを確認して記録しておくべき、と考えたためまずはもととなるZ80用のZB3BASICのシステムサブルーチンを整理して下の表を作成しました。
システムサブルーチンのエントリアドレスはアドレス1000を先頭に3バイトのJP命令になっているため、各サブルーチンが3バイト毎に並んでいます。
表中記載のないものや、機能の欄にx印のついているものは、ずっと以前にZB3BASICのもとになったBASICシステムでは機能していたものの、現在は機能していないサブルーチンです。
ZB3BASICはもともとはND80ZV、ND80Z3.5のために作成したBASICですから、本来はND80Z3.5のページに記載すべきですが、ちょうど今はKL5C80A12版ND80KL/86マイコンボードのシステムを製作中ですので、そしてKL5C80A12版ND80KL/86マイコンボードにも初期設定部分以外はND80Z3.5に実装のシステムROMとほぼ同じBASICROMが付属する予定ですので、当連載記事にてまとめることにしました。
なおND8080用のN8ZB3BASICのシステムサブルーチンも下の表と同じです。
アドレス | サブルーチン名(ニーモニック) | 機能 | 使用レジスタ |
1000 | ROMST | ZB3BASICにエントリする。全ての設定が初期化される | |
1003 | |||
1006 | SCEDT | x | |
1009 | |||
100C | SCRL | x | |
100F | CLR | 画面クリア | A |
1012 | |||
1015 | ADISP | Aレジスタの値(ASCIIコード)を画面に表示する | A |
1018 | DEDP | (DE)の値(ASCII)から後ろの文字列を(DE)=0Dかまたは(DE)=Aになるまで画面に表示する | A、DE |
101B | CRLF | 改行する | A |
101E | DPKIN | x | |
1021 | PRTR | x | |
1024 | SPJMP | (DE)→A、A=20ならDE=DE+1、A≠20まで繰り返し | A、DE |
1027 | HDCMP | HD−DEを計算、結果によってC、Z、Sフラグが変化する。HLは変化しない | A、HL、DE |
102A | HOWDP | HOW?表示後システムに戻る | |
102D | SRYDP | SORRY表示後システムに戻る | |
1030 | WHTDP | WHAT?表示後システムに戻る | |
1033 | REENT | システムに戻る | |
1036 | DECIN | (DE)の値から後ろの数値(ASCII、30〜39)を非数値になるまで読んで2進数に変換してHLにいれる | A、BC、HL、DE |
1039 | SPCDP | 1桁の空白を表示する | A |
103C | INKEY | x | |
103F | ASHX1 | ASCII→HEX1桁変換。Aの値が30−39、41−46のとき00−09、0A−0FをAに入れる | A |
1042 | ASHX2 | ASCII→HEX2桁変換。HLの値(ASCII2桁)をHEXに変換、Aに入れる | A、HL |
1045 | ASHX4 | ASCII→HEX4桁変換。(DE)〜(DE+3)の値(ASCII4桁)をHEXに変換、HLに入れる。実行後DE=DE+4になる | A、BC、HL、DE |
1048 | HXDP1 | Aの値(下位4ビット)を16進数1桁で表示する | A |
104B | HXDP2 | Hの値を16進数2桁で表示する | A、H |
104E | HXDP4 | HLの値を16進数4桁で表示する | A、HL |
1051 | ADRD | (DE)〜(DE+8)の値”aaaa,bbbb”(aaaa、bbbbはASCII表現の16進数)を読み、HL=aaaa、DE=bbbbにする。実行後BC=DE+9になる。 | A、BC、HL、DE |
1054 | BREAK | x | |
1057 | BRSP | x | |
105A | LDISP | BASIC1行表示 | |
105D | DECDP | HLの値を符号付10進数で表示する | A、BC、HL、DE |
1060 | HLNEG | HLが負数のとき−HL→HL、Bのビット7を反転する | A、B、HL |
1063 | DIV | HL/DE→BC。計算後DEは変化しないがHLは変化する | A、BC、HL、DE |
1066 | BITDP | Aの値をビット表示する | A、BC |
1069 | LDSP1 | BASIC1行表示 | |
106C | ATMKCK | (DE)が40(@)か20かをチェック | A |
106F | HLNG2 | −HL→HL、Bのビット7を反転する | A、B、HL |
1072 | LSRC1 | BASIC行サーチ | |
1075 | LSRC2 | BASIC行サーチ | |
1078 | LSRC0 | BASIC行サーチ | |
107B | CRLF | 改行する | A |
107E | ASH22 | ASCII→HEX2桁変換。(DE)〜(DE+1)の値(ASCII2桁)をHEXに変換、Lに入れる。実行後DE=DE+2になる | A、BC、HL、DE |
1081 | MOVE | (BC)〜(HL)の値を(DE)〜にCOPYする | A、BC、HL、DE |
1084 | ADRD3 | (DE)〜(DE+13)の値”aaaa,bbbb,cccc”(aaaa、bbbb、ccccはASCII表現の16進数)を読み、BC=aaaa、HL=bbbb、DE=ccccにする。 | A、BC、HL、DE |
1087 | DINS | (DE)の値から後ろの数値(ASCII、30〜39)を非数値になるまで読んで2進数に変換してHLにいれる。オーバフローしたときはH=FFになる | A、BC、HL、DE |
108A | BRKCK | x | |
108D | CLRNT | x | |
1090 | BRSP2 | x | |
1093 | LSC0 | BASIC行サーチ | |
1096 | LSC1 | BASIC行サーチ | |
1099 | LSC2 | BASIC行サーチ | |
109C | VDPS | BASIC変数名表示 | |
109F | CMDP | BASICコマンド名表示 | |
10A2 | LDSP2 | BASIC1行表示(行番号より後ろ) | |
10A5 | PRT0 | 82C55に接続したセントロニクスプリンタにAの値(ASCII)を1字印刷 | A |
10A8 | ERRDP | ERR:に続いてAの値が10進数2桁で表示される | A、C、HL、DE |
10AB | ADSPS | Aレジスタの値(ASCIIコード)を画面に表示する | A |
10AE | SIN | ND80Zモニタのシリアル入力ルーチンをCALLする | A |
表中BASIC行、BASIC命令などに関係するサブルーチンはBASICの編集、実行に使用されるサブルーチンなので汎用としては使えません。
私自身の備忘録も兼ねているため表中に記載しましたが、特殊目的のため詳細については省略しています。
KL5C80A12マイコンボードの製作[第32回]
2018.8.12upload
前へ
次へ
ホームページトップへ戻る