あれこれと忙しくて、この鄙のブログも一年以上更新していない。それにも関わらず毎日コンスタントに一定数のアクセスがあるのが不思議だ。という訳で、久々の更新。
過日、二十年以上も前に購入したDos/Vマシンに久しぶりに電源を投入してみたところ、BIOSのバックアップバッテリーが消耗していてマニュアルで設定しなくてはならなかったが、それでも健気にIBM DOS/V 6.0が起動した。486 33MBの「太古」のマシンだ。HDDの容量はたったの200MB、メモリ8MBという現在では冗談としか思えないスペックである。
こんなマシンを動体保存している理由は、CAM-PCをISAバスに挿入しているからだ。これまた年代物の拡張カードだが、久しぶりに動かしてみると、これはこれで往時を懐かしむよすがになるのである。
このカードを販売していたAutomatrix社のプロモーション用デモがHDD上に残っていたので、キャプチャをしてみることにした。
同社のロゴをCAM-PC上のプログラムを用いて動画で再生するという当時としてはなかなか凝った代物だ。現在のように、PC上でムービーを再生するなどということは、一般的ではなかったので、こうした方法を採用せざるを得なかったのだろうが、今見ると素朴な味わいがある。
純粋なセルオートマトンではないので、以下に示すソースはやや込み入っている。その分、キャプチャをするには苦労させられた。
\ AUTOMATRIX.EXP Automatrix demo 15Jun89rct
This experiment shows the use of table buffers and colormap
files and serves as an example of how to assemble sequences of
CAM programs (tables) for a simple animation.
The following PATTERN files are used:
AUTOMA2.PAT AUTMSK.PAT CELLBOX.PAT CELLMASK.PAT
CELLUL1.PAT IMATRIX2.PAT ITALIC.MSK
The following TABLE files are used:
CONDEN.TAB CP2PLN1.TAB GROWBND.TAB GROWBOX.TAB
HOLDSNOW.TAB ITALIC.TAB RUNDIFF.TAB XFER.TAB
The following MAP file is used:
AUTOMTRX.MAP
\ AUTOMATRIX DEMO (read screen 0) 15Jun89cam
NEW-EXPERIMENT HEX
: MYTAB>BUF ( segment -- ) 0 0 10 TDAT>BUF ;
: MYBUF>TAB ( segment -- ) 0 0 10 BUF>TDAT ;
OPEN-TABLE RUNDIFF.TAB FILE>TAB
1000 SEGMENT RUN-DIFF-TAB
RUN-DIFF-TAB MYTAB>BUF
OPEN-TABLE HOLDSNOW.TAB FILE>TAB
1000 SEGMENT HOLDSNOW-TAB
HOLDSNOW-TAB MYTAB>BUF
1 EQU ARROW 0 EQU TPHASE
: NEXT-PHASE TPHASE ARROW + 4 MOD IS TPHASE
TPHASE { 0 0 1 1 } IS <PHASE>
TPHASE { 0 3 0 3 } IS <ORG-HV> ;
: 4CYCLE STEP NEXT-PHASE ;
: Init 1 IS ARROW 0 IS TPHASE 0 IS <PHASE> 0 IS <ORG-HV> ;
MAKE-CYCLE 4CYCLE
Init
: SHIFT9 ( delta hold.mask -- )
BEGIN-SERVICE-STEPS
SEND-SHIFTS 0 DO 9 SHIFT LOOP
END-SERVICE-STEPS ;
: ALT-CYC EVEN-GRID STEP ODD-GRID STEP ;
OPEN-TABLE XFER.TAB FILE>TAB
1000 SEGMENT XFER-TAB
XFER-TAB MYTAB>BUF
OPEN-TABLE CONDEN.TAB FILE>TAB
1000 SEGMENT CONDEN-TAB
CONDEN-TAB MYTAB>BUF
OPEN-TABLE GROWBOX.TAB FILE>TAB
1000 SEGMENT GROWBOX-TAB
GROWBOX-TAB MYTAB>BUF
OPEN-TABLE CP2PLN1.TAB FILE>TAB
1000 SEGMENT CP2PLN1-TAB
CP2PLN1-TAB MYTAB>BUF
OPEN-TABLE GROWBND.TAB FILE>TAB
1000 SEGMENT GROWBND-TAB
GROWBND-TAB MYTAB>BUF
OPEN-TABLE ITALIC.TAB FILE>TAB
1000 SEGMENT ITALIC-TAB
ITALIC-TAB MYTAB>BUF
: MYPL>PB ( plane segment )
0 0 0 100 20 1 PDAT>BUF ;
: MYPB>PL ( plane segment )
SWAP 2^N SWAP
0 0 0 100 20 1 BUF>PDAT ;
: FIRSTCMAP
ALPHA >INTEN ALPHA' >RED
BETA >GREEN 0 >BLUE ;
OPEN-MAP AUTOMTRX.MAP FILE>MAP MAP>BUF
MAKE-CMAP FIRSTCMAP
2000 SEGMENT ITALIC
OPEN-PATTERN ITALIC.MSK 3 FILE>PL 3 ITALIC MYPL>PB
2000 SEGMENT CELLBOX-SEG
OPEN-PATTERN CELLBOX.PAT 0 FILE>PL 0 CELLBOX-SEG MYPL>PB
2000 SEGMENT IMATRIX-SEG
OPEN-PATTERN IMATRIX2.PAT 0 FILE>PL 0 IMATRIX-SEG MYPL>PB \ MATR
OPEN-PATTERN CELLMSK.PAT 0 FILE>PL 0 PL>PB \ MASK
OPEN-PATTERN AUTMSK.PAT 3 FILE>PL 3 PL>PB \ AUTOMATA mask
OPEN-PATTERN AUTOMA2.PAT 2 FILE>PL \ AUTOMATA text
OPEN-PATTERN CELLUL1.PAT 0 FILE>PL \ CELLULAR text
: RUNIT
38 E SHIFT9 \ translate PLN0 diagonal
38 38 E SHIFTS \ translate PLN0 right & down
0 -28 8 SHIFTS \ translate ALL but PLN3 left
1 CELLBOX-SEG MYPB>PL \ make box appear around CELLULAR
10 TICKS \ wait a moment
N/MARG-PH &/CENTERS
RUN-DIFF-TAB MYBUF>TAB
20 0 DO NEXT-STEP 2 IDLES LOOP \ scramble CELLULAR
0 AND>PL \ clear scrambled mess
0 IMATRIX-SEG MYPB>PL \ load scrambled MATRIX
10 0 DO NEXT-STEP 2 IDLES LOOP \ restore MATRIX
9 0 DO NEXT-STEP 3 IDLES LOOP \ restore MATRIX
4 0 DO NEXT-STEP 6 IDLES LOOP \ restore MATRIX
10 TICKS \ wait a moment
1 PL>PB 1 XOR>PL \ remove box
CAM-A N/MARG-HV &/CENTERS
CAM-B N/MARG-HV &/CENTERS
HOLDSNOW-TAB MYBUF>TAB
MAKE-CYCLE ALT-CYC
9 0 DO 0 -1 4 SHIFTS NEXT-STEP NEXT-STEP NEXT-STEP NEXT-STEP
NEXT-STEP LOOP \ trans. left ALL but PLN1
1B 0 DO 0 -1 E SHIFTS NEXT-STEP NEXT-STEP NEXT-STEP NEXT-STEP
NEXT-STEP LOOP \ trans. left ONLY PLN0
CAM-AB N/MARG-HV &/CENTERS
XFER-TAB MYBUF>TAB \ transfer AUTOMAT to PLN0
STEP
10 TICKS \ delay
CAM-B N/MOORE
CONDEN-TAB MYBUF>TAB
3 0 DO NEXT-STEP 4 TICKS LOOP \ slowly condense pile
0 CB 87 2 B!CELL \ delete extra bit
-4B -46 B SHIFTS \ translate PLN2 left & up
GROWBOX-TAB MYBUF>TAB
5 TICKS STEP 5 TICKS STEP \ slowly grow the seed to a box
5 TICKS STEP 5 TICKS
2 2 2 0 PERMUTE \ copy data to planes
CAM-AB N/MARG &/CENTERS
CP2PLN1-TAB MYBUF>TAB
MAKE-CMAP IRGB-MAP \ multi-color display of logo growth
0 8 B SHIFTS \ upper right red box
0 -8 7 SHIFTS \ lower left white box
STEP \ copy data
8 0 B SHIFTS \ lower right red box
-8 0 7 SHIFTS \ upper left white box
STEP \ copy data
0 -8 B SHIFTS \ lower left red box
0 8 7 SHIFTS \ upper right white box
STEP \ copy data
-8 0 B SHIFTS \ center box
8 0 7 SHIFTS \ center box
STEP \ copy data
MAKE-CMAP FIRSTCMAP \ restore previous color map
3 ITALIC MYPB>PL \ remove small box & insert mask
3 PL>PB \ copy mask to buffer
2 PL>PB 2 XOR>PL \ remove small box
3 2 0 1 PERMUTE \ exchange planes 0 and 1
CAM-A N/MOORE &/CENTERS
GROWBND-TAB MYBUF>TAB
STEP \ draw lines around graphic
CAM-AB N/VONN &/CENTERS
ITALIC-TAB MYBUF>TAB
STEP 3 XOR>PL \ italicize name & remove mask
0 18 0 SHIFTS \ center logo
BUF>MAP \ correct colors
; ALIAS G
CR .( Type ALT-G to start )
Powered by
コメントする