TTL でCPUを作成、16bitの手作りコンピューター TANACOM-1 誕生

new2009

2009年 クロス・アセンブラを作る



2009年大改修を終え、復活したTANACOM-1 に最初にやった事は、クロス・アセンブラを作る事でした。
私は、Windows上のC言語は苦手でしたので、ご存知の方も多少おられると思いますが、プログラム言語HSP( Hot Soup Processor )というものを使い、アセンブラを作りました。

テキストエディタで、TANACOM-1 のアセンブラ・ソースを書き、それをクロス・アセンブラに通し、マシン語に翻訳させます。

30年前に毎日パチパチ打ち込んでいたカセットテープ用IPL をアセンブルした画面は、


クロス・アセンブラ


そして、結果のリファレンスは、

        ;
        ; TANACOM-1 カセットIPLローダー 往年のローダー
        ;
           ORG 0x1b00
1B00 : 0000      L 0,0
1B01 : 1121      ST 0,cmtAD ;スタートアドレス格納
1B02 : 091E      L 1,cmtLONG ;大きさ-1格納
1B03 : 191F      ST 1,cmtNOW
1B04 : 9113 cmtL2 BAL cmtIN ;1波読み込む
1B05 : C104      BNP cmtL2 ;スタート1を待つ
        ;
1B06 : F7F1 cmtL4 CNT 16 ;1ワード読み込み
1B07 : 9113 cmtL3 BAL cmtIN ;1波読み込む
1B08 : 0922      L 1,ReadWD
1B09 : F609      SL R1.Carry
1B0A : 1922      ST 1,ReadWD
1B0B : 8907      B_cnt cmtL3 ;繰り返し
1B0C : 0122      L 0,ReadWD
1B0D : 091F      L 1,cmtNOW
1B0E : 1721      ST 0,Ix,Id,cmtAD ;データを格納
1B0F : 4801      S 1,1
1B10 : 191F      ST 1,cmtNOW
1B11 : B106      BNM cmtL4
1B12 : 80FF      B 0x0FF ;FORSEのスタートへジャンプ
1B13 :     :
1B13 :    cmtIN ; 1波読み込みサブルーチン
1B13 : 1920      ST 1,cmtRET ;戻りアドレスを保管
1B14 : 0000      L 0,0
1B15 : F60A cmtL5 SL R1.Sin ;Sinより取り込み
1B16 : 5801      N 1,1
1B17 : A115      BNZ cmtL5 ;0 -> 1を検出
1B18 : 2001 cmtL6 A 0,1 ;波形長をカウントアップ
1B19 : F60A      SL R1.Sin ;Sinより取り込み
1B1A : 5801      N 1,1
1B1B : D118      BZ cmtL6 ;1 -> 0を検出
1B1C : 7032      C 0,0x32 ;識位置と比較、結果はCarryに
1B1D : 8320      B Id,cmtRET ;リターン
        ;
1B1E : 06D0 cmtLONG  DW 0x06D0 ; FORSE1.8Kの大きさ-1
1B1F :    cmtNOW  DS 1
1B20 :    cmtRET  DS 1
1B21 :    cmtAD  DS 1
1B22 :    ReadWD  DS 1

と、なります。

30年前は、すべて、紙の上でやるハンド・アセンブルだったんですがねー。
FORSEなど2Kword( 4Kbyte )のアセンブルなんて、大変しんどくて、二度とやろうとは思いません。
でも当時は、8080、Z-80、6800、6502、最初はみんなハンド・アセンブルです。
マイコン雑誌には、アセンブル後のバイナリーがリストとして掲載されていましたので、皆さんその16進データを、定規を当て当て、手入力していました。

当時、本当はアセンブラも作りたかったのですが、2パス(リストを読み込んで訳し、その作業を2回繰り返して、全体の翻訳を完成させる)方式をやるためには、読み書きがやり安い外部記憶装置が必要でした。
TANACOM-1 には、外部記憶は、カセットテープしかなかったので、2パスの作業は困難でした(出来ないことは無いが現実的では無かった)。

ところが30年後、WindowsXP上で、クロス・アセンブルが出来るなんて、夢のようです。
クロス・アセンブラと同時に、

  • Windows上で、TANACOM-1 のRAMを読み書きするRAMモニタ( 9600ボーのシリアル通信 )
  • クロス逆アセンブラ

を作りました。
この逆アセンブラのお陰で、当時のマシン語をソースリストに戻せるようになり、それを編集して、再アセンブルが可能となります。

さらなる夢は、クロス C コンパイラですが、その前に、FORSE の完全ソース化とバージョンアップもやりたいところです。

まだ、やりたい事いっぱいです・・・!



powered by Quick Homepage Maker 5.3
based on PukiWiki 1.4.7 License is GPL. QHM

最新の更新 RSS  Valid XHTML 1.0 Transitional