2018.8.12
前へ
次へ
ホームページトップへ戻る


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  
1009      
100C SCRL  
100F CLR 画面クリア
1012      
1015 ADISP Aレジスタの値(ASCIIコード)を画面に表示する
1018 DEDP (DE)の値(ASCII)から後ろの文字列を(DE)=0Dかまたは(DE)=Aになるまで画面に表示する A、DE
101B CRLF 改行する
101E DPKIN  
1021 PRTR  
1024 SPJMP (DE)→A、A=20ならDE=DE+1、A≠20まで繰り返し A、DE
1027 HDCMP HD−DEを計算、結果によってC、Z、Sフラグが変化する。HLは変化しない 、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桁の空白を表示する
103C INKEY  
103F ASHX1 ASCII→HEX1桁変換。Aの値が30−39、41−46のとき00−09、0A−0Fを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桁で表示する
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  
1057 BRSP  
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かをチェック
106F HLNG2 −HL→HL、Bのビット7を反転する A、B、HL
1072 LSRC1 BASIC行サーチ  
1075 LSRC2 BASIC行サーチ  
1078 LSRC0 BASIC行サーチ  
107B CRLF 改行する
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  
108D CLRNT  
1090 BRSP2  
1093 LSC0 BASIC行サーチ  
1096 LSC1 BASIC行サーチ  
1099 LSC2 BASIC行サーチ  
109C VDPS BASIC変数名表示  
109F CMDP BASICコマンド名表示  
10A2 LDSP2 BASIC1行表示(行番号より後ろ)  
10A5 PRT0 82C55に接続したセントロニクスプリンタにAの値(ASCII)を1字印刷
10A8 ERRDP ERR:に続いてAの値が10進数2桁で表示される A、C、HL、DE
10AB ADSPS Aレジスタの値(ASCIIコード)を画面に表示する
10AE SIN ND80Zモニタのシリアル入力ルーチンをCALLする

表中BASIC行、BASIC命令などに関係するサブルーチンはBASICの編集、実行に使用されるサブルーチンなので汎用としては使えません。
私自身の備忘録も兼ねているため表中に記載しましたが、特殊目的のため詳細については省略しています。

KL5C80A12マイコンボードの製作[第32回]
2018.8.12upload

前へ
次へ
ホームページトップへ戻る