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

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






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

     X = A + (B + C) * D

   ・各ユニットの計算結果を次のユニットに渡し、終了パルスを送ります。(ケーブル配線)
   ・上図の単純な計算でなく、ループ・条件分岐が入ると更に複雑になります。 → マスタプログラマ(Master Programmer)

   ※計算を順にする(直列)のは、分かりやすいですが、
    アキュームレータの計算と、乗算器・除算/開平器では処理速度が違うので並列処理をおこない全体の処理時間を短くし、
    更に時間差を考慮し調整する必要があるので、大変厄介なプログラミング。




プログラム作成に於いて 配線図 (Setup Table) が必要なので、未記入の用紙を作成しました。



数値データ: デジットラインを介しをユニット間に転送されます。
制御信号 : 数値をユニット間で入力・出力する指示をします。






ENIAC技術マニュアル Adele K. Goldstine          左の女性: ベティ・ホルバートン




SETUP DIAGRAM SYMBOLS FOR ACCUMULATOR









■アキュームレータの操作概要



■分岐(IF文) 

4.5.3 Magnitude Discrimination Programs (大きさ区分で判定)  




Dummy Program:(ダミー・プログラム)による分岐

大きさ比較で
符号表示M(−)には9つの数字パルスが送信され、符号表示P(+)には送信されない。
これを利用し、数字パルスをプログラミングパルスに変換するためのSpecialAdaptor(特殊アダプタ)を利用する


  ※複雑な処理は、マスタープログラマーを使用。





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






●ENIACの操作コマンド



●ENIACのユニット



●記法 (抜粋)

i  開始ユニット 


p  マスタープログラマ 


a1〜a20  アキュームレータ 


c 定数送信器


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


  






●Adele K. 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 を駆動して、プロセス全体を再度開始します。






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





【  開始ユニットの設定  】





PX-9-302 開始ユニットのパネル









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

・ステッパー(Steppers)は、Cチャンネル
・ディケイドカウンター(Decade Counters)に、 繰り返し回数 999をセット(ステージ 1)
・ステージ 2 で、ディケイドカウンターを1にセット
・ステージ 2で、ステッパーCをクリア





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




PX-8-303 Master Programmer 






ステッパー(Steppers)は、10個 (A,B,C,D.E.F.G.H,J,K)   各ステッパーは、1〜6のステージ切替可

 Master Programmer  PANEL 1    Master Programmer  PANEL 2


   



1di 〜 20di   Decade direct input terminals

Adi 〜 Kdi DI Stepper direct input terminals 指定したステージ番号へ直接ジャンプさせる
Ai 〜 Ki SI Stepper pulse input terminals 各ステージの処理を実行するためのトリガー入力
Acdi 〜 Kcdi CI Stepper clear direct input terminals マスタープログラマーのステッパーを、強制的にステージ1にする
A1o 〜 A6o; ... K1o 〜 K6o   Stepper program pulse output terminals  








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










 






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

















【 定数送信器の設定

・ 定数 1をセット
 






定数送信器は、パンチカードから読み込んだ数値と、手動スィッチで設定した4個の数値を保持できる。

数値の名称は、A 〜 H(8個)とJ ・ K(2個)の10個で
  A〜H: IBMパンチカードリーダーから読み込まれた数値
  J ・ K: 手動スィッチで設定

また、2組毎に送信可能。 AB, CD, EF, GH & JK







ポータブル関数テーブル

・行数は、000〜099の100行と -2,-1, 100,101行で 合計104行
・データの格納は、12桁の数値x1列 と 6桁の数値x2列のいずれかに設定可
















■シュミレーション結果




各セクタの表示は、  [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)
乗算は、九九表を使い積を10位桁と1位桁に分け、10位(LHPP)と1位(RHPP)の部分積を集計して積を計算します。

被乗数:3の九九表の部分

※サイクリングユニットの 1P, 2P, 2'P, 4Pで、乗数の1〜9を生成することができます。
※10Pのみ位相が違い、deline lineにより5μsずらす設計。



被乗数3の 積を求め、Left Hand Partial Product(10の位) と Rigth Hand Partial Product(1の位)の値から、
サイクリングユニットの 1P, 2P, 2'P, 4Pで数値が生成できるようにします。



上図の被乗数3の積の表から、
 ・マトリックス回路で、パルスが通過できないよう抵抗で抑制します。
 ・また数値の生成不要なパルスは省きます。





●Arthur W. Burksの乗算器の構造図 → https://archive.computerhistory.org/resources/text/Knuth_Don_X4100/PDF_index/k-8-pdf/k-8-r5367-1-ENIAC-circuits.pdf



     Drawing  PX-6-54  →  https://www.cs.drexel.edu/~bls96/eniac/drawings/px-6-54.pdf


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


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




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


乗算器のセットップ図の一部 (アデル・ゴールドスタイン技術マニュアル)






【 multtest2.e 】  42 x 347



















ENIAC 第2世代プログラミング
1948年にファンクションテーブルを、プログラムの命令コードを保存する場所として流用し、現代的なプログラミングができるようになりました。
(物理的な配線ケーブルによるプログラミングからの脱却)

51命令: 小型ユニットの10段ステッパーとマスタープログラマの10個の6段ステッパーを組み合わせる。 
60命令: コンバータを追加し、命令を拡張
91〜94命令: 60命令の拡張版



→ https://ftp.arl.army.mil/~mike/comphist/48eniac-coding/index.html
  Section I ENIACの概要
  Section II デジタルパルスからプログラミングパルスへの変換
  Section III 60codeの詳細な説明
  Section IV 命令の概要
  Section V 推奨されるテストプログラム
  Section VI 典型的な問題のフロー図
  Section VII 操作ボックスのコーディング
  Section VIII 改良型ENIAC



ポータブル関数テーブルに命令コードを2桁づつロータリーSWをセットする。
命令コード(数字2桁)の10位→α、1位→β




その後、新たに追加されたユニット(パネル)
@レジスタ
 ・遅延線メモリ
Aコンバータ
 ・コードからプログラムへの変換
 ・プログラム処理の自動化
 




Description and use of the ENIAC Converter Code
 → https://eniacinaction.com/docs/DescriptionandUse1949.pdf

データの流れ




1951年版 命令一覧


   A.V.  Absolute value
   A.T.  Add time (200 μ sec)
   C.T.  Conditional transfer  条件付き転送命令
   D.S.  Drop sign
   FTN  Function table numeric
   L  Listen 塁算器αは、塁算器15から数を受け取るために聞く。
   M  Minus
   NaD  Next a digits
   P  Plus
   Pr  Print (IBM Card)
   Rd  Read (IBM Card)
   S.C.  Selective clear
   SL  Shift left (followed by a digit to represent no. of places)
   SR  Shift right (followed by a digit to represent no. of places)
   T  Talk  塁算器αは話す。 (塁算器15に加算)


プログラム例   21 70 05 92 02




PX-1-302-2  ENIAC レイアウト (アバディーン)     ENIAC Floor Layout (Aberdeen)








 https://www.crimson-systems.com