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 x  
1009      
100C SCRL x  
100F CLR 画面クリア AL
1012      
1015 ADISP ALレジスタの値(ASCIIコード)を画面に表示する AL
1018 DEDP (DI)の値(ASCII)から後ろの文字列を(DI)=0Dかまたは(DI)=ALになるまで画面に表示する AX、DI
101B CRLF 改行する AL
101E DPKIN x  
1021 PRTR x  
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桁の空白を表示する AL
103C INKEY x  
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 x  
1057 BRSP x  
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 x  
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 x  
108D CLRNT x  
1090 BRSP2 x  
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

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