KL5C80A12マイコンボードの製作
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
KL5C80A12はZ80互換の高速高性能8ビットマイクロコントローラです。
残念なことに数年前に生産中止になってしまいました。
しかし当社ではKL5C80A12を使った組込みマイコンボードはまだ健在です。
そのKL5C80A12を使ったND80Z3.5上位互換マイコンボードの製作記事です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第44回]
●KL5C80A12版のデバッグが完了しました
また何日間か間が空いてしまいました。
この間はKL5C80A12版のソフトウェアの最終的なデバッグ作業を行なっていました。
とにかく早くお納めしなければという思いもあって、デバッグもつい適当なところで済ましてしまったところもありました。
今回は手落ちのないようにじっくりとテストを行ないました。
その結果いくつかバグがみつかりました。
まずはZBK−V3BASIC版(ROMは27C512のNDKROM)について。
ROMには大きなバグはありませんでした。
Windows側のZBKN.exeのほうにはこのままパスするわけにはいかないバグがいくつかみつかりました。
そのバグを修正して最新版のZBKN.exeを作成しましたので、本日ご購入いただいた皆様にメール添付でお送りしました。
NDKROMのほうはなんとかプログラムで対応できる程度のバグですので、以下の説明にしたがってプログラムでの対応をお願いします。
[ZBK−V3BASIC(NDKROM)の既知の問題]
1)INT()関数(整数化関数)で、()の中の数値が負のときにエラーが発生します。
DEBUG TOOL FOR KL5C8012
(C)Copyright CHUNICHIDENKO 2018 ZBKN2S
ZBK接続ポートをサーチ中です...
<1>[41][42][43][44][45] ZBKボードとの接続に成功しました
)z
*** nd80z3 basic ****
>h.
TEXT 4004-408F
ヘンスウ DFFB-DFFF
>/load bstest35.txt
10 A=123.45
20 B=-123.45
30 PRINT FIX(A),FIX(B),INT(A),INT(B)
>r.
123 -123 123
ERR:22
30 PRINT FIX(A),FIX(B),INT(A),INT(B)
>
|
この問題はROMプログラムの修正が必要ですが、次期バージョンでの修正を考えていますので、とりあえずは次のようにプログラムでの対策をお願いします。
10 A=123.45
20 B=-123.45
30 PRINT FIX(A),FIX(B),INT(A)
40 'if B<0 int(B)
50 IF B>=0 GOTO 80
60 C=FIX(B)
70 IF C>B C=C-1
80 PRINT C
>r.
123 -123 123
-124
|
先にINT()に置く変数の値の正負を調べ、負の場合にはFIX()を実行します。
FIX()もINTと同じ整数化関数ですが、負数の場合にFIX()は単純に小数点以下を切り捨てて整数化するのに対し、INT()はもとの値を超えない最大の整数を返します。
行番号70ではそのための補正を行なっています。
2)DATA文の負の整数値をREAD文で整数型変数に読み込むとエラーが発生します。
>/load bstest47.txt
10 DATA -5,6,0, -123.45,123.45,0,-123.456789#,123.455789#,0
20 READ A%:PRINT A%,SGN(A%)
30 READ A%:PRINT A%,SGN(A%)
40 READ A%:PRINT A%,SGN(A%)
50 READ A:PRINT A,SGN(A)
60 READ A:PRINT A,SGN(A)
70 READ A:PRINT A,SGN(A)
80 READ A#:PRINT A#,SGN(A#)
90 READ A#:PRINT A#,SGN(A#)
100 READ A#:PRINT A#,SGN(A#)
>r.
ERR:29
20 READ A%:PRINT A%,SGN(A%)
>
|
これも1)と同じROMプログラムのバグによるものです。
この問題についても、とりあえずは次のようにプログラムでの対策をお願いします。
10 DATA -5,6,0, -123.45,123.45,0,-123.456789#,123.455789#,0
20 READ A$
25 A%=VAL(A$):PRINT A%,SGN(A%)
30 READ A%:PRINT A%,SGN(A%)
40 READ A%:PRINT A%,SGN(A%)
50 READ A:PRINT A,SGN(A)
60 READ A:PRINT A,SGN(A)
70 READ A:PRINT A,SGN(A)
80 READ A#:PRINT A#,SGN(A#)
90 READ A#:PRINT A#,SGN(A#)
100 READ A#:PRINT A#,SGN(A#)
>r.
-5 -1
6 1
0 0
-123.45 -1
123.45 1
0 0
-123.456789 -1
123.455789 1
123.4557800292969 1
>
|
この問題の回避策としては、READ文で整数変数に直接読み込まず、一旦文字型として文字型変数に読み込んで、そのあとでVAL()関数で文字型から数値型に変換して整数型変数に読み込むようにします。
上のプログラムの20行、25行のところです。
3)>が表示されてコマンド入力待ちのときに[Ctrl][B]を入力すると、それ以前にキー入力した文字列(コマンド)が再度実行されます。
これはバグというほどのものではありませんが、プログラムの実行を[Ctrl][B]で中止したあと、長く[Ctrl][B]を押し続けていると再び先に入力したRUNコマンドが実行されてしまうので注意してください。
4)ZBKシステムプログラム操作説明書 p.20 7章 メモリマップ の説明が正しくありません。
システムプログラムを変更したため、電源ON直後にZコマンド入力後のメモリマップになります。
ただしZコマンドを入力するまではR1のエリア(アドレス2000〜3FFF)にはROMの06000〜07FFFが割り当てられています。(01)=0C。
USB接続後の)表示の状態のときに、0000〜03FFのみをROMとし、0400〜FFFFをRAMにするには、
)O 04,00
)O 05,F0
を続けて実行します。

KL5C80A12マイコンボードの製作[第44回]
2018.10.6upload
前へ
次へ
ホームページトップへ戻る