https://www.crimson-systems.com YouTube
  
ENIAC シュミレーター  go・Tcl/Tk版のプログラム

ENIACシミュレーション( https://ieeexplore.ieee.org/document/8326772 ) のサンプルプログラムの紹介です。


ENIACのプログラミングは、計算(数式)をENIACで処理できるように分解しなければなりません。
さらに処理の手順・組合わせを考えます。(データフロー・マシン)
これらは、相当に経験を積まないと出来ないと思います。



プログラム作成に於いてセットアップ図が必要なので、未記入の用紙を作成しました。








●GitHub → programs 内に小さなプログラムがあります。   sq.e、sq2.e、sq3.e の順に試しました。






●ENIACの操作コマンド



●ENIACのユニット



●記法(一部)

  








●Adele Goldstine の技術マニュアルにある、ENIACの基本操作より、べき乗表を計算するプログラムのサンプル




上記を利用し、1 〜 1000 迄の2乗の表を作成するには、

 n  : ACC6 = 0
 n^2: ACC7 = 0

 for n < 999
   ACC6 + ACC7 → ACC7    2*n +1
   ACC6 + ACC7 → ACC7
   ACC7 + 1   → ACC7
   ACC6 + 1   → ACC6    次のn







●ENIACのプラグボードの接続・スイッチの設定



●プログラムの制御フロー

@プログラムライン1-1の開始ユニット出力信号は、アキュムレータ6と7のプログラム5と、定数送信器のプログラム26を起動します。
 この結果、2つのアキュムレータのそれぞれに1が加算されます。




Aプログラム 5 が完了すると、アキュムレータ 6 はプログラム ライン 1-2 に接続された 5o ラインに制御パルスを送信し、
 マスター プログラマのステッパー C の入力に送られます。




Bステッパー C のカウントが 999 を超えていない場合、
 マスター プログラマはプログラム ライン 1-3 に接続された C1o ラインに制御パルスを送信します。




Cプログラムライン1-3の信号は、両方のアキュムレータのプログラム6をトリガーします。
 このプログラムは、アキュムレータ6にデータを2回送信させ、アキュムレータ7にデータを2回受信させ、現在の値に加算します。
 つまり、アキュムレータ6の値が2倍になった値がアキュムレータ7に加算されることになります。




Dこの加算が完了すると、アキュムレータ 7 は 6o 端子に制御パルスを送信し、
 プログラム ライン 1-1 を駆動して、プロセス全体を再度開始します。






●プログラム ( 操作コマンド )






【  開始ユニットの設定  】





開始ユニットのパネル









【  マスタープログラマの設定 






端末とスィッチ ( Master Programmer  PANEL 1 )


 Master Programmer  PANEL 1    Master Programmer  PANEL 2



20di 〜 11di   Decade direct input terminals
   

Adi 〜 Kdi Stepper direct input terminals
Ai 〜 Ki Stepper pulse input terminals
Acdi 〜 Kcdi Stepper clear direct input terminals
A1o 〜 A6o; ... K1o 〜 K6o Stepper program pulse output terminals








【 アキュームレータ 6 設定 










 






【 アキュームレータ 7の設定

















【 定数送信器の設定

 













■シュミレーション結果




各セクタの表示は、  [S1 View] 〜 [S5 View] のボタンをクリック




Secter 2の ACC6 & ACC7


ACC6: n=1000    ACC7: n^2=1000000


動画






stepを0〜2の範囲でテストしました。



step=0


step=1


step=2








※同様なプログラムを修正したもの



計算結果 ACC19 & ACC20











●Cube3.e  nの2乗、3乗






プリンター








●アダプター(Adapters) のテスト
@ デジット・アダプター(Digit Adapters):
 10桁の数値信号(デジット・パルス)の順序を入れ替えたり、特定の桁だけを抽出したりする

Aプログラム・アダプター(Program Adapters)
複数のユニットを並行して動かしたり、特定の条件で計算の順序を変えたりする際の論理ゲート的な役割を、物理的なプラグの差し込みによって実現。


【 testpd.e】


・定数送信器に、 1234567890 をセット
・ACC1に定数器から 1234567890を取り込む
・ACC1の内容をアダプターで5桁上下交換
・アダプターの上下 交換結果をACC2に送る
 








●高速乗算器(High-Speed Multiplier)
 九九表を使い、上位桁と下位桁の部分積を集計加算

@被乗数をACC11、乗数をACC12へ
A乗算器は 10の位をACC13、1の位をACC14 or ACC15へ
B各々の部分積(LHPPとRHPP)を求める
C部分積は、シフター(桁処理)をおこない、L側・右側を加算する
D左側と右側の合計が乗算積(20桁)


  10の位: LHPP(Left Hand Partial roduct)     1の位: RHPP(Right Hand Partial roduct)




例) 3 x 6 = 18 ・・・ 計算結果 1(Left Hand Partial roduct) と 8(Right Hand Partial roduct)の信号が生成される
                 LとRの部分積を累計して結果のACCへ 







テストにおいてアキュームレータが分かりやすいように、セクション1〜5の画像 (e1900s1.ppm〜e1900s5.ppm)を加工しました。

e1900s1.ppm
 

e1900s2.ppm
 

e1900s3.ppm








ENIACシュミレータの設定表記法 (抜粋 ) → https://github.com/blstuart/eniac-simulator  ※DOCフォルダー内の ref.tex

■ 開始ユニット [ i. ]


■ マスタープログラマ [ p. ]


■ アキュームレータ [ a1〜a20 ]


■ 定数送信器 [ c. ]


■ プリンター [ pr. ]    8つのアキュムレータ1、2、15、16、17、18、19、20は、プリンター(IBMのカードパンチ)に接続されている。







ENIAC 操作マニュアル → http://www.bitsavers.org/pdf/univOfPennsylvania/eniac/ENIAC_Operating_Manual_Jun46.pdf

 




ENIAC レイアウト (ムーア・スクール)










 https://www.crimson-systems.com