Below one of the two setups we made to control our TV. The kind of TV which was big, ungly and without remote.
This version used 3 strings. One for moving a little wooden piece to the left, one for moving to the right and one for pressing a bunch of nails agains a touch/capacitive button. (We only used channel 1 till 4 i believe)
The other version used a string per channel. A piece of metal, with at the end of it a little alumium-foil ball
I think i started programming in assembly on PC around 1992. I learned a lot from my friend Edk. Who was a assembly wizard just like Sepp. Reverse engineering routines, writing emulators etc.
We made several demo’s like the one below. It must have been around 1994.
Just after this one, we started a demo which could run from a 5.25″ boot disk. No dos operating system. When starting your pc, booting from a floppy you would get a starfield, with some text (from a bootsector) ,after that it would load the next sectors, wich contained the rest of the demo. Due to directly programming soundcard and graphics card, this was hard to pull off on different kinds of hardware.
Demo gfx
Example of assembly code for a effect.
NAME plasma
.model small
.386
.data
colshades db +001h, 001h,+001h
db -001h,-001h,-000h
db +000h,-000h,-001h
db -000h,-000h,+000h
rgb_cols db 256*3 dup (?)
cosptr dw 0
sinptr dw 30
.code
demo proc near
show proc near
xor di,di
mov bp,200
show1:
mov cx,320
mov si,0
mov dx,0
show0:
; push ds
; mov ax,7000h
; mov ds,ax
; lodsb
; pop ds
call getsincos
add cosptr,1
stosb
loop show0
; add dx,1
add sinptr,1
dec bp
jnz show1
ret
show endp
effect proc near
; add cosptr,1
; add sinptr,0
ret
effect endp
getsincos proc near
push di
push ds
mov si,cosptr
mov di,sinptr
mov ax,7000h
mov ds,ax
lodsb ;get cos value
cmp si,320 ;einde costab?
jb cosok
xor si,si
lodsb
cosok:
mov ah,al
xchg si,di
lodsb ;get cos value
cmp si,320 ;einde costab?
jb sinok
xor si,si
lodsb
sinok:
xchg si,di
pop ds
mov cosptr,si
mov sinptr,di
mov dx,0
mov dl,al
add dl,ah
adc dh,0
shr dx,1
mov al,dl
; xor al,ah
; add al,ah
pop di
ret
getsincos endp
setcols proc near
push es
push ds
pop es
mov di,offset rgb_cols
mov si,offset colshades
mov dl,0 ;start with black
mov bh,0
mov bl,0
mov bp,4
set_rgball:
mov cx,64-1
set_rgb:
mov al,dl
stosb
mov al,bh
stosb
mov al,bl
stosb
mov al,[si]
add dl,al
mov al,[si+1]
add bh,al
mov al,[si+2]
add bl,al
loop set_rgb
add si,3
dec bp
jnz set_rgball
pop es
ret
setcols endp
setrgb proc near
mov dx,3c8h
xor al,al ;start with colour 00h
out dx,al
inc dx
mov si,offset rgb_cols
mov cx,256*3
rep outsb ;set 256 RGB values
ret
setrgb endp
wvtr proc near
mov dx,3dah
wtv:
in al,dx
test al,8
jz wtv
ret
wvtr endp
start:
cld
mov ax,@data
mov ds,ax
mov ax,0a000h
mov es,ax
mov ax,13h
int 10h ;screen 320x200 256 colours
call setcols
call setrgb
call show
mov al,11111101b
out 21h,al ;disable int
mloop:
call wvtr
; call show
call effect
mov ah,1
int 16h
jz mloop
xor ah,ah
int 16h
exit:
xor al,al
out 21h,al ;enable int
mov ax,3
int 10h ;screen 80x25 text
mov ax,4c00h
int 21h ;back to DOS
demo endp
end start
Around 1993 i bought Myst, a adventure game. It was really a masterpiece, a interactive rendered world with great moodsetting music scores.
When looking at documentaries like these: https://www.youtube.com/watch?v=EWX5B6cD4_4 It almost didn’t happen, i was oblivious to this fact ..
Many hours i spent playing this game, sometimes together with Erik.
I loved the puzzles and the rendered transitional movies.
After the first i bought all follow-ups.
I spend hours playing them, first with Erik and later with Monique and Coline taking turns at the controls. Solving the mysteries together was a lot of fun.
1993 – Myst
1997 – Riven
2001 – Myst III: Exile
2003 – URU: Ages Beyond Myst
2004 – Myst IV: Revelation
2005 – Myst V: End of Ages
There is also a parody version called Pyst
After that i found realmyst a remake of the first with better graphics. We played Uru: Ages beyond myst or Uru Live after that. This one had free movement i recall.
I wanted to create a point and click/walk around version myself. My first idea was taking pictures in my fathers car driving from Holten to Laren where Martin lived. Taking pictures (with a analog camera) on the way. Scanning those analog pictures and making a point and click thingy was something i only realized many years later.
I made a website with pictures of the house. People could click and move though my house. I made the path which was obvious in advance, when people clicked a new area or object, they got a popup where you could request the path or object information.
(i found the source code – now i have to make a webserver with a really old php version to get screenshots)
I never came around it to render environments myself .. see my post about rendering.
Somewhere in 1992 i got hold of a Oscilloscope, probably borrowed from someone. I don’t know what happend to it. I got the idea to generate drawings on the scope, because it had two inputs with you could switch to x and y inputs.
Example oscilloscope
My friend Sepp got into it also, we both wrote some software to do funky stuff with this. I found some software today (20220516), and having bought a old skool scope 2 years ago …
So i found source machine code, no executables. Now i needed to get a assembler running again.
Sidenote: I recently fixed a Amiga 500 and got a disk switch installed on the even cia.
Disk df0 df1 switch print at the center of the image
Booting some old seka disks and starting MasterSeka again in a looong time.
ESC - open editor
r (read file)
v (directory)
a + enter + enter (no options assemble)
g (go running the program)
FIrst part of machine code .. at the bottom part are arrays of coordinates to draw things
Some programs on the disk: (some are made by Sepp, who is a far better coder than i am)
Funny triangles
Lissajous figures
Moving square
House
House with door
Draw with mouse
Lissajous figures are simple sine and cosine functions to get:
So how does this work, well a amiga has stereo outputs. These are controlled by two DAC outputs on the 8364 (Paula) chip. (DAC – Digital Analog Convertor) ( Paula has 4 DMA controlled DACs !! )
Looking at the schematics of the audio part, we see a lot going on concering audio filters. The tests i’ve done today (2022) are on a amiga with unmodified audio filters. (Low on my prio list) So frequencies are not direct what you get directly converted from digital values. Besides that, syncronisation between left and right channel, even using DMA can be an issue. (DMA – Direct Memory Access, this means that it can be controlled without using the CPU)
Running the house draw code:
A little house
Note: Due to different hardware not a good working example .. yet
More examples .. hard to capture a still image
I tried a few years after we did this, to modify a generic monitor to display things using two inputs, not using scanlines. But to no avail. Only flipping the screen and colors using relais (more on this later)
Bonus part: Above did remind me of a Vectrex, a game console which utilises same display technic. So no raster lines and pixels, but line drawing by controlling the beam.
Two games on a borrowed Vectrex – You can see the continuous line – faint to see, even harder IRLMovie from 2017 .. Vectrex was made in 1982-1983
I got a free mainframe, when i was about 17. It was a huge Pdp-11/34 which a had to get from Enschede to Holten using a trailer.
PDP-11/34
It was a 19inch rack (loads of metal)
2x 8inch floppy drives
2x 20MB harddisk drives (with cardridge) each 34KG!
multiple (3?) Decwriter III printers
loads of VT100 terminals
2.5 meter of manuals
cables
disks (8 inch) and harddisk cartridges
I converted the power to a generic 230V connector. When booting the machine all the lights in the house dimmed.
I didn’t know anything about mainframes, but i got things working. Sometimes i would play with it, but after a while it didn’t run anymore.
I’ve kept some of the parts of the machine. Terminals we used for a long time to connect to a linux server. ( The VT100 where later switched for more modern Wyse terminals )
One of the two drives (34kg) (not my picture)
Some parts i’ve kept
20MB cartriges for above driveMagentic core memory!16K x 12
VT100 serial terminal (gave this one to a colleage) Postit says: Could you install Windows on this for me??
Wyse 50 TerminalStallion Card to connect 8 terminals
Serial printer
Last Decwriter i’ve got, also gone now.
These printer we used for generic printing, and just for fun. They made a lot of noise, and even they are serial printers they are fast!
So i resourced ms-dos into assembly and printed that, that was a sh*tload of paper. We even made a racing game. (Can’t find the source, but i’ve recreated a lookalike in linux-bash)
Object of the game was to keep your car O character on the road. The printer printed the lines, and you could use the keyboard to move your car, which also got printed.
Below the build-in-5-minutes bash lookalike. ( z left, x straight and c right) Original had more intricate road, and probably the road was drawn using two lines, to speedup printing (Decwriter III could print at 180 characters per second bidirectional!)
Looked more like this i think
#!/bin/bash
i=0
j=0
car=8
while true ; do
no=$(awk "BEGIN{print sin($i*atan2(0,-1)/180)*40+40}" | cut -f1 -d.)
way=$(awk "BEGIN{print sin($j*atan2(0,-1)/180)*10+13}" | cut -f1 -d.)
#echo $way
if [ $car -lt 0 ] ; then echo "boom" ; exit ; fi
if [ $car -gt $way ] ; then echo "boom" ; exit ; fi
carr=$car
rest=$((140-$no-$way))
i=$(($i + 1))
j=$(($j + 5))
while [ $no -gt 0 ] ; do
echo -n " "
no=$(($no - 1))
done
echo -n "#"
while [ $way -gt 0 ] ; do
echo -n " "
if [ $carr -eq 0 ] ; then
echo -n "O"
fi
way=$(($way - 1))
carr=$(($carr - 1))
done
echo -n "#"
while [ $rest -gt 0 ] ; do
echo -n " "
rest=$(($rest - 1))
done
echo ""
read -r -t 0.1 -n 1 -s key
if [ "$key" == "z" ] ; then
car=$((car - 1 ))
fi
if [ "$key" == "x" ] ; then
car=$((car - 1 ))
fi
if [ "$key" == "c" ] ; then
car=$((car + 1 ))
fi
done
Funny story about learning machinelanguage at school.
It was around 1989, and was attending a class Microcomputer Programming in Machine Language.
We where given a problem we had to solve using 8085 machine code. The machine we had to program this on was a Intel SDK-85, much like below example.
Intel SDK-85
Note it only had a hex keyboard and 7segmented display. You had to punch in the machinecode into memory slots yourself.
Problem we where given was something like searching for certain data in memory.
Normal procedure was :
Draw a flow of instructions (Flowchart)
Write the machine languages codes
Convert those assembly statements into Opcodes the machine could understand
Punch in those numbers, run and verify
Most of us knew a lot of opcodes by heart, but some knew all opcodes. And how many bytes where needed. besides that we had to remember jump and return addresses.
So our teacher presented the problem, when he stopped talking, my friend Martin and I when up to our machines … punching buttons.
” Guys .. you can’t expect it to work without writing the program down first!
A few minutes later .. we pressed enter .. and it worked.
A program like above looked like: 01 2E 2B 21 00 00 79 BE C2 1F C0 CD 19 C0 CA 1E C0 78 BE C2 06 C0 C3 25 C0 2C C2 1E C0 24 C9 CD 19 C0 C3 06 C0 C9
Cut into opcodes:
01 2E 2B 21 00 00 79 BE C2 1F C0 CD 19 C0 CA 1E C0 78 BE C2 06 C0 C3 25 C0 2C C2 1E C0 24 C9 CD 19 C0 C3 06 C0 C9
Some opcodes used 1 byte, others 2 or 3. C2 1F C0 – means Jump to address C01F when not zero C9 – means return, go back to a previous CALL statement
Example of machine language which is translated into above
While attending the LTS (lower vocational technical school), i could often be found in the computer lab. I was the only student who had his own key. We had a classroom with 16 computers, 2 drives at the master station and a printer. Everything was connected using Econet. (These where the first networked computers i’ve worked with) https://en.wikipedia.org/wiki/Econet
So every moment we didn’t have a class, i was there. Even when i had to do final exams, i was late entering, and sometimes one of the first leaving.
Today (2022) i ran an emulator on my machine and typed in one of my old programs found in a notebook. (The real system above pictured, i have to repair) By the way, this is one of the computers from school, even with its original wooden monitor stand. The school contacted me (a few years after leaving this school) if i wanted to buy one of the machines.