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
前へ
次へ
ホームページトップへ戻る