BEFLIX is an embedded domain-specific language for generating computer animated films. BEFLIX was created by Ken Knowlton in 1963 for the IBM 7090 mainframe computer with a Stromberg-Carlson SC2040 microfilm recorder for output. Ken Knowlton created BEFLIX while working at Bell Laboratories and used it to make a number of artistic, educational and engineering films.
2. BEFLIX First Publication
"A Computer Technique for
Producing Animated Movies",
Kenneth C. Knowlton
AFIPS Conference Proceedings 25
(Spring Joint Computer Conference 1964)
3. Hardware Environment
IBM 7090 computer
Card keypunch
Card reader
Line printer
Magnetic tape drive
Disc drive
Stromberg-Carlson 4020 microfilm recorder
4. IBM 7090 Computer
IBM's first transistor based mainframe
First install November, 1959
Typical cost $2.9 million in 1960
Evolution of IBM 709 vacuum tube
mainframe
Created for scientific/engineering markets
NASA: Mercury, Gemini and Apollo
JPL: Space Flight Operations Facility
American Airlines: SABRE
5. IBM 7090 Computer
3 index registers
227 instructions
single-precision floating-point (36-bits)
36-bit words
32,768 words of core memory
2.18 µs memory cycle time
4.36 µs floating-point add time
4.36-30.53 µs floating-point multiply time
10. Stromberg-Carlson 4020
Microfilm Recorder
Magtape drive for input
Charactron tube for creating image
16mm or 35mm film camera
Character beam can be defocused
Draw grayscale pixels as character blobs
12. Language
BEFLIX is an Embedded DSL
Embedded
○ Embedded in another language
○ Hosted in FORTRAN II environment
○ Uses FAP (FORTRAN II Assembly Program) macro
language constructs
Domain-Specific Language
○ Represent concepts from the problem domain
directly
13. Programming Model
Memory organized into surfaces
Coarse resolution: 126x92
Fine resolution: 252x184
3 bits/pixel
12 pixels/word
Enough memory to hold 2 fine resolution frames
15. Coarse Surface Designators
Coarse resolution alternatives:
WW
126x92
XX
126x92
YY
126x92
ZZ
126x92
PP
252x92
OO
378x92
FF
504x92
PP or WW, XX
OO or WW, XX, YY
FF or WW, XX, YY, ZZ
16. Coarse Surface Designators
Coarse resolution alternatives:
WW
126x92
XX
126x92
YY
126x92
ZZ
126x92
TT or YY, ZZ
SS or XX, YY, ZZ
EE or WW, XX, YY, ZZ
EE or AA
TT
126x184
SS
126x276
EE
126x368
17. Scanners
Scanners are named A...Z
Scanners live on a surface
Scanners have:
A coordinate within the surface
A value read from the surface
Manipulate a surface by conditionally
performing operations on a scanner or
between two scanners
18. Low Level Operations
Place a scanner at a location on a surface
PLACE sc, surf, x, y
Conditionally perform some operations and
jump
IFxxx (c1)...(cN)T(o1)...(oM)label
Evaluate each condition c1...cN
Combine them according to logical predicate xxx
If true, perform operations o1...oM
Optionally jump to label
19. Low Level Operation Example
IFANY (B,R,10)(B,A,C)(A,E,7)T(A,T,B)(A,U,2)(A,W,3)LOC5
If any of the following are true:
scanner B is Right of x=10
scanner B is Above scanner C
scanner A is sitting on a number Equal to 7
Then the following operations are performed:
scanner A moves To the same surface and pixel as scanner B
scanner A moves Up 2 pixels
scanner A Writes the number 3 to its pixel
Then control jumps to the label LOC5 in the program.
20. Scanner Conditions
Conditions are of the form (scnr,rel,quant)
scnr name of the scanner to be tested
rel relation between scanner and quant
quant can be a number or another scanner
21. Scanner Comparison
Relations
Compare scanner position to a value
Compare positions of two scanners
Compare scanner pixel to a value
Compare pixel between scanners
22. Scanner Move Operations
Move to absolute X or Y coordinate
Move relative along X or Y axis
Move to surface and position of other
scanner
Move to X or Y coordinate of another
scanner without changing surfaces
Move one square based other scanner's
pixel
Scanners wrap around surface boundaries
in a helix
23. Scanner Pixel Operations
Write pixel from value or other scanner's
pixel
Write complement of other scanner's pixel
Exchange pixels between two scanners
+, -, *, / between two scanners (modulo 8)
bitwise OR and AND between two scanners
24. Static and Dynamic Operations
Static operations happen immediately
Dynamic operations occur over multiple
frames
25. High Level Operations
Output control and temporary storage of
pictures
Drawing primitives (line, arc, polyline, text)
BitBlt like operations on rectangular areas
Dynamic operations on rectangular areas
Macros using low-level operations
26. Output Operations
CAMERA n
FRAMES n
FILTER n
TABLE n,c0,...,c7
AIM sc
SAMPLE n
LINES n
FILM
NOFILM
UNTIL n,label
RESET n
COARSE
FINE
STORE surf,where
RETREV surf,where
27. Drawing Primitives
LINE sc1,sc2,mode,ns,width,speed
ARC sc1,ctr,d,mode,ns,w,speed,t1,w1,t2,q2
TRACE lb1,len,sc,orient,mode,ns,width,speed
TYPE lb2,sc,size,hspace,vspace,mode,ns
lb1 OCT n,(curve to be drawn by TRACE)
lb2 BCI n,(text to be drawn by TYPE)
30. The Master Film
The SC2040 produces a master film
Duplicate frames are output only once
A repeat count is written above the frame
Repeated frames are duplicated by optical
printing when the film is developed
31. Workflow
1. Develop program in BEFLIX
2. Preview output samples on printout
3. Run program to create magtape
4. Load magtape into microfilm recorder
5. Produce master film
6. Optical print/expand to create work print
32. Stan VanDerBeek
Artist Stan VanDerBeek collaborated with Ken Knowlton on a
series of films:
Poem Field No. 1 (1965)
Poem Field No. 2 (1966)
Poem Field No. 3 (1967)
Poem Field No. 4 (no date)
Poem Field No. 5 (1967)
Poem Field No. 6 (no date)
Poem Field No. 7 (1971)
Poem Field No. 8 (no date)
Collido-Oscope (1966) (VanDerBeek, Knowlton and
Bosche)
Man and His World, 1967 (Shown at Expo '67)
34. Looking Back at BEFLIX
BEFLIX is considered an "esoteric"
programming language
Its unique syntax depends on the macro
facilities of FAP
Later FORTRAN IV version resembled more
traditional subroutine library
First(?) language for procedural animation
35. Museum Exhibit Futures?
7090 simulation with BEFLIX
implementation
No known source to BEFLIX exists?
7090 simulation is boring
7090 real experience was physical
VR exhibit?
BEFLIX IDE
Open source IDE to explore BEFLIX programs
Evolve BEFLIX to a GPU oriented language
Produce procedural moves in real-time