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


KL5C80A12マイコンボードの製作

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
KL5C80A12はZ80互換の高速高性能8ビットマイクロコントローラです。
残念なことに数年前に生産中止になってしまいました。
しかし当社ではKL5C80A12を使った組込みマイコンボードはまだ健在です。
そのKL5C80A12を使ったND80Z3.5上位互換マイコンボードの製作記事です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[第46回]



●ZBKN.exeの再送付

ZBKN.exeの最新版を作成して今までにご購入いただいた皆様にメール添付でお送りしたのですが([第44回]参照)、その後にお客様からご指摘をいただいて、再度ZBKN.exeを修正いたしました。
再修正版は本日メール添付で皆様にお送りしました。
今回の修正はZBK−V3BASICでINKEY$の不具合に対処するためのものです。

INKEY$はキーボードから入力された文字を受けてリターンしますが、本来の機能ではキー入力がないときにはスペース(コード20H)を入れてリターンします。
そこに不具合があってキー入力がないときには入力されるまで待っていてリターンしてきません。
INPUT$(1)と同じ動作になっています。
これはZBKN.exeとZBKROMの両方のバグですが、ROMについては次期バージョンアップで対応することにして、今回はZBKN.exeのみ修正しました。
INKEY$の代用としては、マシン語のサブルーチンを使用していただくようお願いいたします。
以下にサンプルプログラムと実行例を示します。
下はマシン語サブルーチンです。

2018/10/10  21:19  inkysb.txt
END=401E
              ;;;zbkn inkey$ sub
              ;18/10/10
                ORG $4004
                AP=$F440
                APH=$F441
                AOUT=$10AB
                AIN=$180C
              ;
4004 210000     LD HL,$0000
4007 2240F4     LD (AP),HL
400A 3E07       LD A,07
400C CDAB10     CALL AOUT
400F CD0C18     CALL AIN
4012 DA1940     JP C,BREAK
4015 3240F4     LD (AP),A
4018 C9         RET
4019 3E80     BREAK:LD A,80
401B 3241F4     LD (APH),A
401E C9         RET
              ;
                AIN          =180C  AOUT         =10AB  AP           =F440  
APH          =F441  BREAK        =4019  

キーボードから入力された文字(のコード)が変数A%に格納されてリターンします。
[Ctrl][B]を入力すると、A%に負数を入れてリターンします。

下はBASICのメインプログラム例です。

    10 'inkey$
    20 USR($4004)
    30 IF A%=0 PRINT "-";:GOTO 20
    40 IF A%<0 PRINT "break!":STOP 
    50 IF A%<$20 PRINT "[";HEX$(A%,2);"]";:GOTO 20
    60 PRINT CHR$(A%);:GOTO 20

マシン語サブルーチンは4004から作成(またはロード)します。
BASICのメインプログラムはそれよりも後ろに作成するかロードします。
BASICのメインプログラムを新規に作成する場合には、たとえば
NEW,4100
を実行したあとBASICメインプログラムを作成します。
作成済みのBASICメインプログラムをロードするときは、たとえば
/LOAD INKYMN.TXT,4100
のようにロードアドレスを指定してロードします。
こうすることで4004〜のマシン語サブルーチンが壊されないで残ります。

実行結果です。

キーボードからa、b、cを入力したあと[Enter]キーを入力しました。
そのあとで[A]を入力するつもりで[Sift][A]と入力したつもりが{Ctrl][A]を入力してしまったようです。
おそらくそのために[01]が表示されています。
最後に[Ctrl][B]を入力しました。
ZBK−V3BASICのINKEY$は本来はASCII文字の入力しかできません。
入力がないときにはスペースを返します。
上で使ったマシン語サブルーチンではASCII文字以外のキーコードも受け取ります。
受け取った文字は変数A%に格納してリターンします。
[Ctrl][B]を入力すると、A%に負数を入れてリターンします。
本来のINKEY$よりも拡張した使い方ができます。

今回の不具合をご指摘いただいた大分県のH様、ご指摘有難うございました。
ご協力に感謝申し上げます。
今後ともご支援ご鞭撻をお願いいたします。

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

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