メインメニュー
PR
facebook
別フォーラムへ

今昔物語


投稿ツリー


前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 | 投稿日時 2015/5/15 15:37 | 最終変更
東 遥  スタッフ   投稿数: 3409
「1byteって何bit?」

当然8bitというのが現代社会人の常識ではあろう所では御座いますがその辺りを深く追求しています。

1バイトの都市伝説

ぉぉぉぉ。まぁ、6bit機があったというのは小耳に挟んだ事が御座いますし東芝のマイクロプロセッサなどでは12bit構成のも御座いましたし。というか、ここまでくると1byte=12bitというよりは1word=12bitという感じですね。

んで、周囲にもこの御仁の書いた「都市伝説」が御座いまして興味深いのですが、その中の「NOP命令と都市伝説」の説明が宜しいですね。んで、付け加えるならばi8080やi8085、Z-80ですともう一つ「応用」が御座います。それはプログラムをUV-EPROMに焼く時の御話。例えば本来のプログラムの所々、一定のルーチンなりプロシージャなりサブルーチンの後ろに0xFFを連続して幾つか置いておくのです。最低3byte、あるいは容量に余裕があればもっと置いても良い。んで、マシン語のプログラムのデバッグで、あるサブルーチンを置き換えようと思う時には、

 ・余裕があれば、そのサブルーチン部分を0x00で塗りつぶし、
  直後の0xFF領域に修正後のサブルーチンを書き込む
  →元々のサブルーチン部分は全てNOPになり全て読み飛ばして
   そのまま修正後のサブルーチンに突入する
 ・余裕がなければ、別の広い0xFF領域に修正後のサブルーチンを書き込んだうえで、
  そのサブルーチン部分を0x00で塗りつぶし、直後の3バイトの0xFF部分に、
  修正後のサブルーチンへのジャンプ命令を書き込む。
  →元々のサブルーチン部分は全てNOPになり全て読み飛ばして
   そのまま修正後のサブルーチンにジャンプする

はい、UV-EPROMでは紫外線を20分程当てて初期化すると内容が0xFFになり、データを書き込むというのは相応のビットを0にする、という事ですので、

 ・0xFF → データ(0xFFや0x00以外)
 ・データ(0xFFや0x00以外) → 0x00

という変更は紫外線消去をせずに行う事ができるのです。そうしますと、紫外線消去にかかる時間もかからず、それでフローティングゲートを更に痛める事もなくプログラムを変更できるというもので、時間節約とUV-EPROM代の節約になるものでは御座いました。涙ぐましいものでは御座いました。

....後で書いて送っておこう。

扨本題。この御仁は

 ・TTLを繋いでCPUを作って遊ぶ

という何とも高尚で憧れ深い事を為さっている!

8bit TTLコンピューターRETROF-8

このマシンでは円周率100桁の計算に成功しているそうです。

RETROF-16H 部品実装(1)

16bit機ではインベーダーをやりたいそうです。んで、その画面表示は、

謎の表示装置(第1回) ドラフト

こちらも手作りTTL製だそうで御座います。ぉぉ。

- - - -

i8080の一つまえの8bitマイコンであるi8008というのも試作時はTTLを組んでエミュレーションしたそうで御座いました。ていうかそもそものi8008というのはComputer Terminal Corporationという会社がDatapoint 2200というプログラミング端末(電卓ではなく端末)を開発する際に

 CTC「2200の前の機種(3300)はTTL組んで作ってたんだけどさ
   面倒くさいし詰め込みすぎて熱くなって暴走しちゃうんだわさ
   で、中核部分を1チップにしたいんだけど
   設計はこんな感じ、コードネームは1201、
   やってくれるかな?
 INTEL「いいともー」
 T.I.「了~」
 それから暫くして
 T.I.「1201できたよー」
 CTC「おう....むぅ、ぬぅ、これバグだらけ、駄目じゃん」
 T.T.「あー、それ以上は無理、おりるわ」
 CTC「むぅぅぅ。」
 また暫くして
 CTC「INTELの方もまだできないし、
    どーしよ、次もTTL構成にするかなぁ。」
 また暫くして
 INTEL「1201できたよー」
 CTC「おう....むぅ、ぬぅ、性能が目標に達してない
    不合格!」
 INTEL「そっかー、じゃ、金要らないけど、これ、
    自前で8008として売らせて貰うわ。」
 CTC「しゃーないなぁ。
    では、2200もTTLを組んで作るかね。」
 INTEL「という訳で4004に続いて8008を製品化できる。
    このまえ太平洋の向こうの別の会社が8008を使いたいと言ってる。
    ビジコンの成功を見て慌ててプログラマブルな電卓
    それにマイクロプロセッサを使う事を
    言いだしたんだが、ほんと2番手戦略好きだな奴ら。
    まぁ、それはそれとしてうちではD-RAMも
    売ってるけど、CPUも売りだしたら競合他社が
    D-RAM買ってくれなくなるかもなぁ、
    どーしよ。まぁ、売りだしてみるか。」

というのが8008の馴れ初め、じゃなくて誕生秘話であったという。ですから、そのプログラミングモデルとかAFレジスタ構成とか、Fレジスタの中のビットの並び方とか、そうゆうのは実はCTCの方で設計開発されたそのものなんだそうで御座います。そうだったのか。

まぁ、要するに相応それなりのマイクロプロセッサというのは最初はTTLを組んで作られていたというものだそうで、或いは漏れ聞くところではi8080というのが「TTLでテストボードを作った」最後のCPUだったとかいう話も御座いましていやはやもう。

さて、皆さんも作ってみませんか。  
投票数:0 平均点:0.00
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2015/5/20 17:49
東 遥  スタッフ   投稿数: 3409
とか何とか書いているうちに見つけてしまった orz

標準TTLだけ(!)でCPUをつくろう!
(組立てキットです!)


はい、i8080を作ろう、という御仁がおいででした!

キットはいいけど、もう、石が手に入らんかも。でも憧れる。

ホームページはこちら。いやはや、凄い御仁がおいででした。憧れる。
投票数:0 平均点:0.00
返信する
東 遥

なし Re: 今昔物語

msg# 1.1.1
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 | 投稿日時 2015/5/20 17:53
東 遥  スタッフ   投稿数: 3409
続報

キットの詳細

石も入っているそうです。これなら安心!
投票数:0 平均点:0.00
返信する
LuckyHill

なし Re: 今昔物語

msg# 1.1.1.1
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2015/5/20 21:58 | 最終変更
LuckyHill  一人前   投稿数: 1196
メモリはSRAMなんですね(256Kbit)。DRAMを使うとまた制御回路のハードルが高くなってしまうからでしょう。そもそも8080ではそんなに大容量もアクセスできないでしょうし。

#ボード工作は、芋粥をすすりながら・・・でしょうか(笑)
投票数:0 平均点:0.00
返信する
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2015/5/25 0:55
zima  常連   投稿数: 121
工作はからっきしで、中坊ん時に高一中二5球スーパーという真空管ラジオを実体配線図通りにハンダ付けしたつもりなのにSWを入れたら煙が出てしゅーりょー、とゆう切ない想い出しかありませんw

ハードはあきらめてコンピューターのソフトに転向、Z80 と 6809 はアセンブラを使いましたが忘却の彼方。うーん、これが老いるとゆうことかw

で、本題ではなく、NOP 命令の都市伝説、にピクッときたんですが、6809 には Branch Never とゆう相対分岐命令があって、決して分岐しない、とゆう。
分岐距離が±127番地のショート・ブランチと、±32767番地のロング・ブランチ、それぞれ機械語の命令サイズは2バイトと4バイト。
何もしない、つまり NOP なんですが、NOP を2個とか4個並べるより速く通過できる(相対分岐の距離を表すオペランドは読み込まれず、1命令で PCR が 2/4 番地進む)、というような解説をみかけます。

しかし、私の記憶では、命令の途中に飛び込む、とゆう使い方があったような。

LBRN(Long Branch Never) の機械語は 10 21 xx xx で、相対分岐の距離を表す xx xx 部分はスキップされます。
で、xx xx の部分に有効な命令を書いておいて、ここに飛び込んでくれば、この命令が実行される。

たとえば、
LABEL1: 10 21 aa bb
LABEL2: 10 21 cc dd
LABEL3: 10 21 ee ff
LABEL4: 10 21 gg hh
LABEL5: (ここからメイン処理)
みたいなルーチンがあって、

BR(Branch) LABEL2 +2

とゆう命令で LABEL2 番地の次の次に飛び込んで cc dd が実行されて、その先はスキップしてメイン処理へ進む。

いや、わざわざそんな書き方をせんでも、
LABEL1: aa bb
        BR LABEL5
LABEL2: cc dd
        BR LABEL5
LABEL3: ee ff
        BR LABEL5
LABEL4: gg hh
        BR LABEL5
LABEL5: (ここからメイン処理)
と書いたほうが素直で分かりやすいし、無駄にスキップしてゆく時間をなくせるし、最後の BR LABEL5 は消えるし、なんですが、でも、たしかに、LBRN の途中に飛び込む、とゆう書き方があったような。。。

LBRN の途中に飛び込む書き方を正当化する例を、どなたか、ご存じでしたら、教えてくださいませ。
# なんだかモヤモヤでごめんなさい(^_^;

P.S.
Z80(8080) の場合、HL レジスタを壊してよい、という前提で、以下のような書き方は確実にありました。
LD HL,xxxx (ニーモニックは Zilog 表記) の機械語は 21 xx xx で、この xx xx の部分に LDA 1, LDA 2 のような A レジスタに値(エラーコード等)を設定する命令を書いておく。
LABEL1: 21 aa bb
LABEL2: 21 cc dd
LABEL3: 21 ee ff
LABEL4: 21 gg hh
LABEL5: (ここからメイン処理)
そんで、

JP LABEL2 +1

とかで命令の途中の cc dd に飛び込んで LDA 2 が実行され、その先は LD HL,ffee とゆう感じで HL レジスタを壊しながら進む。
LABEL5 のメイン処理では A レジスタのエラー・コードに応じたメッセージを出力する、みたいな。
OKI BASIC のエラー処理ルーチンに、このような部分があったと記憶しています。
# BASIC で書かれた逆アセンブラで OKI BASIC の中を覗いていた青春ww

--
by なかぢー%鳩ヶ谷@埼玉
(末期高齢者ばちゅいちww)

投票数:0 平均点:0.00
返信する
東 遥

なし Re: 今昔物語

msg# 1.2.1
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2015/5/25 9:54
東 遥  スタッフ   投稿数: 3409
ぁぁ、昔はそうゆうトリッキーな書き方も御座いましたねと思い起こされるものでは御座います。6809も弄り倒したものですが私自身はそうゆう書き方はしませんでしたし思いつきもしませんでした。んー、あるとしたら、

●逆アセンブル防止

中身を解読するうえで逆アセンブラにかけて自動でソースコードを得るのを妨害する。そうゆう部分を手で切り分けてやらねばならないし手動で理解しなければならない。或いは途中にそうゆうパートがあるという事を逆アセンブラに教える手段というのがまずないので面倒くさくなってやーめたとなるのを期待する。

●コードサイズ縮小?

単一の命令コード3ないし4バイトの何処にジャンプしていくかでレジスタに入る値を変化させるとか。例えば

 CC 86 4F

という3バイトの最初に飛び込めば

 LDD $864F ; A=$86, B=$4F となる

2バイト目に飛び込めば

 LDA $4F ; A=$4F, Bは不変

3バイト目に飛び込めば

 CLRA ; A=$00, Bは不変

となるので、ジャンプして来る前に

 LDA $86

とか

 LDA $4F

とか

 LDA $00 ; 或いは CLRA

とかのコードを置く必要が無くなり、差し引き都合2ないし3バイトを減らせる。

他にも色々御座いましょうが。
投票数:0 平均点:0.00
返信する
zima

なし Re: 今昔物語

msg# 1.2.1.1
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2015/5/25 23:07
zima  常連   投稿数: 121
フォロー、ありがとうございます。

アンチ逆アセンブル、というのは思いつきませんでした。
エントリポイントの直前に BRN や LBRN を置けば、素朴な逆アセンブラを混乱させられそうです。ただ、正しく逆アセンブルできた部分に当該部分への分岐命令があると、おや、こんなところにエントリポイントが、と、賢い逆アセンブラは見抜いてしまうかも。

コードサイズ縮小は、メモリが猫の額だった時代は非常に重要な事でした。トリッキーで読みにくい書き方も、メモリ節約のためなら致し方なし、と。
LDD 命令の例は目からウロコでした。A レジスタの zero / non zero をエントリポイントによって制御できる。ソースのコメントで、しっかり説明しとかないと、後でわけわかめ(死語^^)になりそうですがw

うーん、LBRN はオペコードが2バイトなので、メモリ節約にはあんまし寄与しないですよねぇ。LBRN の途中に飛び込むことが有益な場合がある、というのは、私の思い込みだったかなー。そゆ思い込み、多いんです、アテクシw

お騒がせしちゃってスンマセンでした(^_^;

--
by なかぢー%鳩ヶ谷@埼玉
(末期高齢者ばちゅいちww)

投票数:0 平均点:0.00
返信する
東 遥

なし Re: 今昔物語

msg# 1.1.1.2
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2015/8/3 6:41 | 最終変更
東 遥  スタッフ   投稿数: 3409
とか何とか書いているうちにこんな凄まじいものが。

FullTr-11





ぉぉ。オールトランジスタ!

し、か、も、だ、

同じアーキテクチャをDTL回路としても組んでみた、ぁ、DTLって、Diode-Transister-Logic ね、んで、そのDiodeをだな、LEDにしたら果たしてどうなるかという!

スーパーLチカコンピュータ





ぃゃ、ここまで来るなら、ビット数が11だとか素数だとか世界初だとか、そうゆうのも含めてナイスだと存ずる次第。教育用にはうってつけですねぇ。

日本人も捨てたものではない。
投票数:0 平均点:0.00
返信する
東 遥

なし Re: 今昔物語

msg# 1.1.1.2.1
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2015/8/3 6:51
東 遥  スタッフ   投稿数: 3409
因みにこの御仁、件のTTLで8080とか、TTLでオリジナルCPUとか、そちらのお話も御存じで意識されているそうな。で、8080をTrで作るというプロジェクトについても鋭い要求を出されていたりするのですが(笑)

それはそれとして、ぉぉ、こんなのも作ってらした。

FullRelay-11





の、のろい(笑)。

コンピューター史上一時期あったリレー計算機というのもこんなだったのでしょうかね。

感慨深い。
投票数:0 平均点:0.00
返信する

このトピックに投稿する

題名
ゲスト名
投稿本文
  条件検索へ


ログイン

ユーザー名:


パスワード:





パスワード紛失  |新規登録
PR
twitter
Created by: twitter website widget