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


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

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

[第71回]



●8086版BASICシステムサブルーチン

昨日はZ80用ZB3BASICのシステムサブルーチンをUPしました。
今回はその8086版です。

アドレス1000から始まるメモリ領域にはZB3BASICでコールしている基本的なサブルーチンがまとめてあります。
8086版BASICは現在も作成作業中ですが、もともとZB3BASICをもとにして8086版BASICを作成してきましたので、8086用のシステムサブルーチンもアドレス、機能についてはZ80用ZB3BASICと同じです。
システムサブルーチンのエントリアドレスはアドレス1000を先頭に3バイトのJMP命令になっているため、各サブルーチンが3バイト毎に並んでいます。
そこのところもZ80用と変わりません。
表中記載のないものや、機能の欄にx印のついているものは、ずっと以前にZB3BASICのもとになったBASICシステムでは機能していたものの、現在は機能していないサブルーチンです。
そのところもZ80用と同じです。
ただプログラムそのものは、もちろん8086の命令で全部書き換えてありますから、機能は同じでも使用レジスタはZ80用とは全く異なります。

アドレス サブルーチン名(ニーモニック) 機能 使用レジスタ
1000 ROMST 8086版BASICにエントリする。全ての設定が初期化される  
1003      
1006 SCEDT  
1009      
100C SCRL  
100F CLR 画面クリア AL
1012      
1015 ADISP ALレジスタの値(ASCIIコード)を画面に表示する AL
1018 DEDP (DI)の値(ASCII)から後ろの文字列を(DI)=0Dかまたは(DI)=ALになるまで画面に表示する AX、DI
101B CRLF 改行する AL
101E DPKIN  
1021 PRTR  
1024 SPJMP (DI)→AL、AL=20ならDI=DI+1、AL≠20まで繰り返し AL、DI
1027 HDCMP SI−DIを計算、結果によってC、Z、Sフラグが変化する。SIは変化しない SI、DI
102A HOWDP HOW?表示後システムに戻る  
102D SRYDP SORRY表示後システムに戻る  
1030 WHTDP WHAT?表示後システムに戻る  
1033 REENT システムに戻る  
1036 DECIN (DI)の値から後ろの数値(ASCII、30〜39)を非数値になるまで読んで2進数に変換してSIにいれる AL、BH、DX、SI、DI
1039 SPCDP 1桁の空白を表示する
103C INKEY  
103F ASHX1 ASCII→HEX1桁変換。ALの値が30−39、41−46のとき00−09、0A−0FをALに入れる AL
1042 ASHX2 ASCII→HEX2桁変換。DXの値(ASCII2桁)をHEXに変換、DHに入れる AL、DX
1045 ASHX4 ASCII→HEX4桁変換。(DI)〜(DI+3)の値(ASCII4桁)をHEXに変換、DXに入れる。実行後DI=DI+4になる AL、BH、DX、DI
1048 HXDP1 ALの値(下位4ビット)を16進数1桁で表示する AL
104B HXDP2 DHの値を16進数2桁で表示する AL、DH
104E HXDP4 DXの値を16進数4桁で表示する AL、DX
1051 ADRD (DI)〜(DI+8)の値”aaaa,bbbb”(aaaa、bbbbはASCII表現の16進数)を読み、BX=aaaa、DX=bbbbにする。実行後DI=DI+9になる。 AL、BX、DX、DI
1054 BREAK  
1057 BRSP  
105A LDISP BASIC1行表示  
105D DECDP SIの値を符号付10進数で表示する AL、BX、DX、SI
1060 HLNEG SIが負数のとき−SI→SI、BHのビット7を反転する BH、SI
1063 DIV SI/DI→BX 余りはSIに。計算後DIは変化しない AX、BX、DX、SI、DI
1066 BITDP ALの値をビット表示する AL、BX
1069 LDSP1 BASIC1行表示  
106C ATMKCK  
106F HLNG2 −SI→SI、BHのビット7を反転する BH、SI
1072 LSRC1 BASIC行サーチ  
1075 LSRC2 BASIC行サーチ  
1078 LSRC0 BASIC行サーチ  
107B CRLF 改行する AL
107E ASH22 ASCII→HEX2桁変換。(DI)〜(DI+1)の値(ASCII2桁)をHEXに変換、AL、DLに入れる。実行後DI=DI+2になる AL、DI、DX
1081 MOVE (BX)〜(SI)の値を(DI)〜にCOPYする BX、CX、SI、DI
1084 ADRD3 (DI)〜(DI+13)の値”aaaa,bbbb,cccc”(aaaa、bbbb、ccccはASCII表現の16進数)を読み、BX=aaaa、SI=bbbb、DI=ccccにする。 AL、BX、DX、SI、DI
1087 DINS (DI)の値から後ろの数値(ASCII、30〜39)を非数値になるまで読んで2進数に変換してDXにいれる。オーバフローしたときはDH=FFになる AL、BX、DX、DI
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字印刷 AL
10A8 ERRDP ERR:に続いてAの値が10進数2桁で表示される AX、BX、DX、SI、DI
10AB ADSPS Aレジスタの値(ASCIIコード)を画面に表示する  
10AE SIN ND80Zモニタのシリアル入力ルーチンをCALLする AL


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

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

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