|
今の所、作り上げたBASICの構造で、命令語処理を追加していますが・・、安定に動作しています。 ブログに記載するには 容量的に制限されますが、MZ-Main.cならば小さいので、投稿することにしました。 僕は、ラジオ少年に始まる根っからのハード系だけど、約30年前BASICインタプリタ製作を、安請け合いして 悩みながら、〇〇〇〇の助けを得て作ったので、システム理論など学問的な裏付けはないよなぁ〜。 今回、MZ80レプリカ製作の話があり、以前は、全アセンブラで書きましでしたが、当時を思い出しながら、 C言語で、MZイメージのBASICインタプリタを作ろうと 、チャレンジしています。(・・に 鞭 打って ) プロの方々から、見れば 下手なソフト?かも知れませんが・・。ご容赦ください。 あえて、投稿するのは、 若い技術者達が『 あんな オジンでもやっている・・、じゃ 僕も・・』と発奮してくれる事を 期待しての事です。 では、MZ-Main.cファイルを、簡単に、注釈すると・・。 今回 かなり コメントつきで〜す。 5行〜15行は、TI$用の割り込み。 H8特有のレジスタのビット操作は、一度読み出して、書き込まないと 誤動作します。 今は、19行〜21行を無効にして、TI$は、動作させていません・・割り込み禁止状態です。 18行のInitializeMemory()は、MemManage.cファイルの関数で、データエリアの初期化で、すべての区分を 初期化する。初期化エリアの状態は、各々13個の番地ポインタとセパレータ(0x0000)が、有るだけの状態。 24行は、エラー発生時のジャンプ先ラベルです。 ( 間違いを起こした時の、駆け込み寺か・・??) 26行のRestoreSystem()は、 Text、数値、ストリング・・の変数以外を 初期化し,再起動します。 28行〜40行の whileのループ内は、 エラーが起きない限り、システムが 外へ飛び出す事は有りません。 29行のGetTextLine()は、キーボードからの入力。 30行のTextPreprocess()は、テキストの初期の処理、行番号とテキスト文(ストリング)に分離します。 33行 行番号TextNumberが、0か判別( 0は 行番号が存在しない意味) 34行 StoreTextLine()は、、データエリアのLIST領域に格納、行番号のみの場合、テキスト行の抹消。 37行 ExecuteCommand()は、命令の即 実行。(今は、LIST、RUN、PRINT、LET)が 動作しています。 41行 エラー情報出力、エラー処理へJUMP (取り合えず、駆け込み寺へ・・??) (各処理関数は、ERR≠0を見つけたら、処理作業を中止し RETURNする構造に作ってある。) MZ-Main.cファイルは これだけです。Main関数は、組織で例えればピラミッドの頂点で指示系統のトップ、 会社で言えば 会社の社長かな・・。 有能なMain社長は、明快な判断、的確な処理命令を出します。 バカMain社長は、社長の仕事でも無いのに、ダラダラと細かい事をして、曖昧な処理命令をだし、混乱状態・・。 システムは組織論で・・、作業を最適化し、分類し、論理の流れ・・をしっかり考えて、構成すると 良いね。 システムは 分かり易く。 簡単明瞭・・、シンプル・イズ・ベストを 旨としよう。 < つづく > |

- >
- コンピュータとインターネット
- >
- コンピュータ
- >
- パソコン




このソースの限りであれば,ERR_Reset:...Goto ERR_Reset; をループに置き換えてもいいような.
2006/10/19(木) 午前 0:59 [ ectoyfan ]
そうですね。エラー状態をwhileのループで、包むのが正統かも、栗のシブ皮みたいに・・。 Cでは、ラベル、goto・・は、なじみ薄いよねぇ。特にgotoは、飛ばす先とのレベルが合わないと、スタックが積み上がる・・注意が必要な危険な命令(ハード的かな?)。 エラー駆け込み寺を明示する為に、エラーラベルへ飛ばす・・拘ったかな?
2006/10/19(木) 午前 8:38 [ nag*sa_*ei ]
> バカMain社長は、社長の仕事でも無いのに、ダラダラと細かい事をして、曖昧な処理命令をだし、混乱状態・・。▼いてててて、耳が痛い。^^;
2006/10/19(木) 午前 11:30 [ かの ]
> バカMain社長は、〜混乱状態・・。 爆笑! 知ったかぶって、出鱈目な指令を出して、現場を騒乱状態に落とす。 で、責任は現場に押し付ける。何処も一緒ですね…。
2006/10/20(金) 午後 6:06 [ krik ]