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


16ビットマイコンボードの製作

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
いつか使ってみるつもりで入手してそのまま置いてあった16ビットCPUのことを思い出しました。
AMD社のAM188です。
その名の通り、CPUコアは80188互換の16ビットCPUです。
そのAM188を使った16ビットマイコンボードの製作記事です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[第83回]



●INT 22

前回はシステムサブルーチンをINT 22でコールするためにAHレジスタにセットする連番を表に付加しました。
今回はINT 22を使ったテストプログラムの紹介です。

2018/9/7  11:13  int22t1.LST
[00001]                     ;;; int 22 test
[00002]                     ;18/9/7
[00003]                         ORG=8000
[00004] 8000  B041              MOV AL,41
[00005] 8002  B11A              MOV CL,1A
[00006] 8004  B407              MOV AH,07
[00007] 8006  50            LOOP:PUSH AX
[00008] 8007  CD22              INT 22
[00009] 8009  58                POP AX
[00010] 800A  FEC0              INC AL
[00011] 800C  FEC9              DEC CL
[00012] 800E  75F6              JNZ LOOP <8006>
[00013] 8010  B409              MOV AH,09
[00014] 8012  CD22              INT 22
[00015] 8014  CB                RETF
[00016]                     ;
LOOP         =8006  

AH=07はADISPサブルーチンです。
ALレジスタにアスキー文字コードを入れてコールすると画面にその文字が表示されます。
AH=09はCRLFサブルーチンです。
このサブルーチンをコールすると改行が行なわれます。
プログラムの説明です。
ALレジスタに41(Aの文字コード)を入れ、CLレジスタに繰り返し回数1A(=26)を入れてスタートします。
ADISPサブルーチンはALレジスタを使用しますから、PUSH AX、POP AXでALの値を保存しています。
26回の繰り返しが終ったら、CRLFサブルーチンをコールしたあとシステムに戻ります(RETF)。

テストプログラムを実行しました。


このテストプログラムは[第79回]のラインアセンブラで作成したテストプログラムに似ています。
その時点ではまだINT 22の機能は組み込んでいませんでしたので、文字表示などのシステムサブルーチンを使うことができませんでした。
それで画面に表示する代わりにメモリに直接書き込むプログラムにしたのです。

●8086アセンブラを小文字も入力可能にしました

[第79回]のラインアセンブラの使用例を見ると、小文字で入力しています。
これはもとはZB3BASICのコマンド、命令の入力のための機能で、システム内部では大文字しか使わないのですが、ユーザーの便を考えて、小文字で入力したときはシステムがそれを大文字に変換して受け取るようにプログラムしてあります。
しかし8086アセンブラのソースプログラムは大文字で書くことになっています。

実は。
8086ラインアセンブラを使ったあとで、通常の8086アセンブラのために今回のソースプログラムを書こうとしたら、つい小文字で書いてしまいました。
それに気が付かないで8086アセンブラにかけたら全部エラーになってしまいました。
仕方がありませんから、もう一度最初から大文字で書き直したのが上でお見せしたプログラムリストです。

そういう経験をしてしまいますと、大文字しか受け付けないというのもちょっと不便かなあ、という気になってきます。
ということで、8086アセンブラで小文字も入力できるようにプログラムを直しました。

こちらは小文字で書いたソースプログラムです。

;;; int 22 test
;18/9/7
        org=8000
        mov al,61;a
        mov cl,1a
        mov ah,07;adisp
loop:push ax
        int 22
        pop ax
        inc al
        dec cl
        jnz loop
        mov ah,09;crlf
        int 22
        retf
;

今までの8086アセンブラなら全部エラーになってしまいます。
でも小文字も受け付けるようにプログラムを直しましたから、下のように8086アセンブラが小文字を大文字に変換したうえで、アセンブルしてくれるようになりました。

2018/9/7  15:8  int22t2.LST
[00001]                     ;;; int 22 test
[00002]                     ;18/9/7
[00003]                         ORG=8000
[00004] 8000  B061              MOV AL,61;a
[00005] 8002  B11A              MOV CL,1A
[00006] 8004  B407              MOV AH,07;adisp
[00007] 8006  50            LOOP:PUSH AX
[00008] 8007  CD22              INT 22
[00009] 8009  58                POP AX
[00010] 800A  FEC0              INC AL
[00011] 800C  FEC9              DEC CL
[00012] 800E  75F6              JNZ LOOP <8006>
[00013] 8010  B409              MOV AH,09;crlf
[00014] 8012  CD22              INT 22
[00015] 8014  CB                RETF
[00016]                     ;
LOOP         =8006  

;の後ろに記述されたコメントは大文字に変換せず、そのままスルーしています。
念のためにINT22T2.COMもロードして実行してみました。

ソースプログラムを小文字で書いたから小文字しか表示できない、なんてことはありません。
先に作ったINT22T1.COMでは大文字を表示しましたから、今回はソースプログラムを小文字で書いたので画面にも小文字で表示してみようという、シャレのようなものです。

16ビットマイコンボードの製作[第83回]
2018.9.9upload

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