予てより取り組んできたSBC6809エミュの関係ファイルを 書庫にして公開 する。 とは言え、未だ 完全な完成には程遠いので恥ずかしい限りではある。 書庫サイズは390キロバイト弱になる、以下の文書は その中に収めた 但し書きの写しになる。 ---------------------------------------------------------- EXBASICから USING命令を削除した軽量版 タイマ割り込みを利用した簡易時計機能付き BASIC9.asm BASIC9.hex BASIC9.lst BASIC9.mot BASIC9.sym DBDC 12 BAWMST NOP hotstart : $DBDC ExBASIC 気になる部分のバグ修正したのみ。ほぼ原版 BasROM.asm BasROM.hex BasROM.lst BasROM.mot BasROM.sym DBCB 12 BAWMST NOP ;NOP REQ-D FOR WARM START hotstart : $DBCB HD6309チェッカ 現時点での このエミュレータでは無意味 CHK309.asm CHK309.lst CHK309.sym EXBASICソース構造参考.txt GAME09.asm GAME09.hex GAME09.lst GAME09インタプリタ COLD :$9000 HOT :$9003 これにはリセットベクタ情報は含まていないので、ロード後の初期起動時もVsetでベクタ設定が必要。 BASIC,GAME09 共通で ロード後 一度コールドスタートさせて CTRL+Dで CCPに戻り loadでソースをロード vsetで ホットスタートアドレスを設定、GOでインタプリタに戻り プログラムの確認、実行という手順です。 コンパイル済みのGAMEバイナリは 共通で$2000が実行アドレスです。 マンデルブロ集合 アスキアート表示デモ ascart.bas...
GAME-CCのやらかしバグについて まず、問題のファイルは ランタイムパッケージに相当する 「gamecc.asm」の中の W82 RMB 6+1 ; DIVIDE BINDEC/WORK ; FCB 0 この箇所、これ gamecc.asmの終わりの方の、ほとんどRMBの並んでる中、ただ1バイト分 0をメモリに書き込んでる。 そこだけピンポイントで0格納するようにHEXファイルが生成されれば無駄もないんだが、 アセンブラの種類によっては前後のRMBブロックもゼロフィルして無駄に大きなHEXファイルになる。 W82は6バイト確保だったのを7バイト確保にしてFCBを消したんだが、一見これでも 動作はする。 メモリというものが、電源入れた直後に全てゼロになる前提なら。今回のエミュはそうはいかない。 メモリの確保イコールゼロで初期化まではやっていない。実機でもSRAMにしろDRAMにしろ電源投入直後は電気的には不確定なのが通常で ROMから起動したモニタがメモリをゼロフィルしてメモリの正常動作を確認するのが一般的な初期動作になる。 これまでにテストで使ったlinux上のエミュはメモリのゼロフィルが当たり前だったのが災いした形になる。 この6バイトは、数値の左詰め表示のための結果格納バッファで符号のための1バイト、1から32767までの5桁を入れる5バイトの合計6バイトになる。 そして、GAMEの内部処理では文字列は0終端の集合として扱って表示しているので、数値文字列の終わりのための0を入れる7バイト目が必要になる。 これを端折ったため、maze.hexのオブジェクトのエスケープシーケンスでカーソル位置指定する計算式で 結果が正しく出されずに謎文字列の羅列が爆発するバグにエミュレータ作成初期に悩まされた。 BYNDECルーチンのリターン直前に W82+7の位置に0を書き込むコードを挿入して回避するように修正。 エミ...