WEBVTT

00:00.000 --> 00:14.480
Welcome, my talk will be about a very old computer that was designed and operated in

00:14.480 --> 00:24.080
Belgium, so prepared to forget a lot of things you know about CPUs and the way you

00:24.080 --> 00:32.640
could, and actually well, maybe a word about where I'm from, so I'm from the

00:32.640 --> 00:39.600
IP computer museum, small museum located the transfer for Brussels, so you still have time

00:39.600 --> 00:45.600
of some more days in Brussels, on the next time you come, don't hesitate to come in

00:45.600 --> 00:50.960
digitized, and of course we have a lot of usual mission as a museum, like preserving

00:50.960 --> 01:02.000
artifact exhibition, and we sure so we, for this talk, where we devoted so I thought to study

01:02.000 --> 01:09.520
this machine, the machine that does not exist anymore, so we had to look back into existing

01:09.520 --> 01:17.600
documents, and we tried to understand how it worked really, what were the dynamics of the programs.

01:17.680 --> 01:28.320
So as I said, we will go back in time, so we are now in 2025, being the fifth generation

01:28.320 --> 01:33.440
of computing, I don't know, but we have for food generation, so first, first thing, forget about

01:33.440 --> 01:40.560
the microprocessor, back to the third generation, also forget about the integrated circuit,

01:41.440 --> 01:46.800
back to the second generation, forget about the transistor, we are back to vacuum tubes,

01:47.760 --> 01:51.760
magnetic drums, delay lines and tip and punch cards.

01:55.200 --> 02:02.640
Okay, well, a previous talk, there was some joke about the definition of a computer,

02:02.640 --> 02:11.280
I can go further in that, well, in the 50s, what were computers? Well, if you did not specify,

02:11.360 --> 02:20.400
it was device could be a human, a human computing, taburs, computing, trajectory for rockets, for

02:20.400 --> 02:27.680
examples, you can see a few there from the Nakya, which was before the NASA, you see by the way

02:27.680 --> 02:38.240
that those human computers were a bit different than us, yeah, just a joke because I look at the

02:38.320 --> 02:46.000
audience and the women and still not very well represented, so maybe to add to the curve for

02:46.000 --> 02:53.040
presenters, I hope next year there will be a woman also presenting it at my place and that we are trying

02:53.040 --> 03:02.560
to make more balancing in gender also here in computing, but it's the case for the human here,

03:02.640 --> 03:07.920
the top and are so far you see the operator also, so it's not really the operator, there were also

03:07.920 --> 03:17.440
the guards were also programmers for the in-ac, okay, so I close this, so yeah, so beside the

03:17.440 --> 03:24.960
human yourself, the electronic mechanical calculators and computers and also are really computers,

03:25.040 --> 03:32.160
wired or stored programs, that in fact the real, when the definition of computer

03:33.280 --> 03:39.600
and that will form the first generation of computer, the first one really was the attack with

03:40.320 --> 03:47.680
a stock computer, the enac here, actually, was at two, two payout, the first one was really wired and then

03:47.760 --> 03:55.120
the new man came and proposed the architecture and it was he designed and the second version was really

03:55.120 --> 04:04.640
also a sort of computer, while the arvart market, you see the arvart architecture to be used

04:04.640 --> 04:14.160
a little in my talk, it's another way to organize the computation, so my talk is about a mathematical

04:14.160 --> 04:21.920
machine, so what do I mean by that is just about the purpose of the computing, so the purpose

04:21.920 --> 04:28.640
of the machine is just to perform scientific and technical computation rather than business

04:28.640 --> 04:33.840
processing, what does it mean, it means that you have, you must be able to solve an

04:33.840 --> 04:40.080
numerical problems efficiently and in fact, it means that you need some kind of high precision arithmetic,

04:40.480 --> 04:46.640
could be fixed or floating point, we'll see in our case for the Belgian mathematical machine,

04:46.640 --> 04:53.920
it will be floating point, for other machines, there was also a fixed point, also you will

04:53.920 --> 05:01.680
have to be able to compute a specific function, like trigonometric function, exponential,

05:01.840 --> 05:06.560
the garym-6 like that, we'll see how we will do that and of course, as usual, you need control

05:06.560 --> 05:17.680
flow to control the flow of instruction, a bit of the context, so twice we are post-war

05:17.680 --> 05:23.600
two and in that job of course, we are interested in developing expertise in

05:24.240 --> 05:35.120
electronic computing to avoid depending on the device, like no further AI, and so we want to

05:35.120 --> 05:42.880
to apply that for mathematics physics and other engineering domains, and the approach they can

05:42.880 --> 05:49.120
was to thank people in the US, so they looked at the machine that were being built, they were also

05:49.200 --> 05:56.880
involved in building some machines, especially the Mark III, and of course, the Mark was designed

05:56.880 --> 06:05.280
by Orte Eiken, and also made connection with that guy, and you can see there the

06:05.280 --> 06:11.280
result, of course, to convince or funding authority that it's a good idea to invest in that,

06:12.080 --> 06:19.040
and of course, it was also consultant after to helping in the building, it's called ICCFNRS

06:19.040 --> 06:31.360
ICCFNRS, the funding organization budget that gave them money, okay, so when shortly we had

06:31.360 --> 06:44.080
for, for period, for about the ID and putting the project in, in production, and then

06:44.080 --> 06:52.080
really from 52 to 55 designing the machine for the first version, then it was inaugurated,

06:52.080 --> 06:58.640
there was the king and some fact that, and they decided to be for to put it in production

06:58.640 --> 07:06.720
to in ICCFNRS, so for two years, in 1955, there was an extension to build the capacity of the

07:06.720 --> 07:12.800
machine, and then from, he lived from a 57 to 62 for those five years, twice, okay, rate it.

07:15.280 --> 07:22.320
So what does it look like? You see, a very big machine, about 70,

07:22.320 --> 07:30.160
meternal, for the version, and 30m for the second machine, so the double the capacity,

07:30.240 --> 07:38.320
for the hardware, we had from 3,000, then 5,000 out of the cube cube, so it means gates,

07:38.320 --> 07:44.240
so the equivalent of transistors, so if you remember the intel of 4,000, 4, it's about

07:44.960 --> 07:53.440
2,000, 60 and rate transistors, so you have an ID, we have 3 kind of memory, very fast memory,

07:53.520 --> 08:01.360
so fast memory is based on delay lines, so information is kept by propagating in that kind of

08:01.360 --> 08:10.000
line, it is implemented using a gas tube, you can see that there, so this is as the capacity of

08:10.960 --> 08:17.680
18, the cement digits, so it could be called a register, but at that time, it didn't call that

08:17.680 --> 08:24.960
register yet, then we have the fast memory, fast memory, what is it? It's just a drum, you have

08:24.960 --> 08:36.560
actually two drums, fast means 7mg, so you see what, what fast is it, you could draw it on the

08:36.560 --> 08:43.840
on the diagram, if the more slow to see if you are in line, so two drums, one for the data,

08:43.840 --> 08:48.720
one for the program, so it's here that we have the other style because it's really separated,

08:48.720 --> 08:58.480
the data from the program, one drum at 100 tracks, 20 sector, stirring, of course,

08:58.480 --> 09:04.720
the same content as the register, so 18 digits, so decimal digits, we will see what is in,

09:04.720 --> 09:10.400
so it's about 20 kilobytes and then third, the sort of level of memory, a slow memory is just

09:10.480 --> 09:16.480
tapes, or tape was, it's neat tape, so it was a loop, you can see the loop here actually,

09:16.480 --> 09:22.720
so the tape was just going there and back and forth, so they just had to pass the end with the

09:22.720 --> 09:34.000
beginning, conception about 25 kilobytes, so it's about at that time the consumption of a smaller

09:34.000 --> 09:43.040
street in the town, so it was very odd there to install some cooling otherwise it started to

09:43.040 --> 09:50.400
also to have a problem with the dilatation and six-sided, okay logical architecture, so this is a

09:50.400 --> 09:57.440
real picture, well just translated, so it's very high level, you see well you of course,

09:57.600 --> 10:04.560
central control here, you have apart the drum with the program where you read the instruction

10:04.560 --> 10:11.760
and then based on the instruction you will go into the other drum to take the data to write back

10:11.760 --> 10:20.640
and forth the data and you can also use, well I call it arithmetic and logic unit but it's

10:20.640 --> 10:25.920
was not the name, the name was in French group, calculators, calculating group, so it was really

10:25.920 --> 10:33.680
the hardware that was able to perform computation and what could do, actually it could just

10:34.320 --> 10:47.760
do this kind of operation, A times B plus C and also with the carry, the carry, yeah,

10:48.640 --> 10:54.560
so you see there is something missing for arithmetic but don't we what is missing,

10:57.200 --> 11:01.680
now we have minus is done using nine components, it's a good point,

11:03.040 --> 11:08.560
divide yes, there is no divide, okay, so we will see or we do divide later,

11:09.360 --> 11:23.600
okay for the data instruction, so I told you 18 digits, so at the very low level there was

11:23.600 --> 11:31.920
still of course in kind of binary code it in decimal but it was not the user way, you can see

11:32.000 --> 11:39.120
the encoding there, it's called B canary encoding, so it's well because zero is zero, one is one

11:39.120 --> 11:48.960
but two or so two but then three becomes five four becomes eight, so it's a different encoding,

11:48.960 --> 11:56.400
the ID is also used for the machine hypothesis that you use less power because you use less one

11:56.720 --> 12:03.600
and also you don't you try to have to have a one not too close together because

12:03.600 --> 12:11.760
good interfere I guess, so it's really the low level encoding, so I had some friends who

12:11.760 --> 12:18.640
uncovered and they got that of course in my emulator but of course it does not help a lot,

12:19.200 --> 12:25.760
you don't have any kind of code the error detection or correction, it's just more

12:25.760 --> 12:32.160
playable to use that kind of coding and number representation, well for this talk I will just

12:32.160 --> 12:40.160
focus on the floating point, you could also encourage fixed point and double precision if you

12:40.160 --> 12:48.400
went but the presentation was like this you have a sign then the manufacturer is 15 number

12:49.760 --> 12:57.040
supposed after the decimal point so it's zero dot then the manufacturer and then the

12:57.040 --> 13:01.440
exponent you have a sign and you have two numbers so it means that you can go from

13:01.840 --> 13:16.160
minus 10 to the 99 999 but actually 12 out of a flow they limited to 49 49

13:20.400 --> 13:27.120
okay and the other way the other representation or also you could store a pair of

13:27.120 --> 13:39.760
instruction in that 18 bytes or two two block of 9 number us five for the type of the instruction

13:39.760 --> 13:47.680
and four for the for another right visually in that race could also represent a small number and of

13:47.680 --> 13:57.520
course it means that if you have two uh two instruction in one one block only uh when the

13:57.520 --> 14:04.160
address it will be addressable only uh well both instruction will only have one address so we can

14:04.160 --> 14:13.840
not jump on the second one you just have kind of a pair anignment okay a register well

14:14.400 --> 14:24.720
uh what's fun the documentation they use Greek letters for the for all different registers so it

14:24.720 --> 14:33.600
means two things first really it was mathematician that we're using that and second the the the the

14:33.600 --> 14:40.080
code was written on paper because you cannot type uh wheat lettering to a computer so it means

14:40.160 --> 14:46.720
that all the design was done on paper and then manually compiled of course in my work I wrote a

14:46.720 --> 14:53.120
compiler the compiler so I use other uh characters so I use uh ASCII characters like the value for

14:53.120 --> 15:00.720
omega i a for alpha b for beta so basically you have an accumulator not called an accumulator

15:00.800 --> 15:09.600
it's the ID it's called omega uh that's what's the entry and uh or two of the calculating group

15:09.600 --> 15:15.680
you have two internal register called E and F uh also with fast access time so it's really the

15:15.680 --> 15:22.640
core of the system you have also in this register that are can interfere with the addressing

15:22.640 --> 15:28.800
and that are useful for of course uh say bars matrix and things like that and of course in

15:28.800 --> 15:34.880
other register you have the signed register for the conditional jumps and of course something that

15:34.880 --> 15:39.520
is looks like a program counter actually it points to the to the next infection

15:42.000 --> 15:48.000
then switch on actually I told you already about the tracks the sector the sector are number five by five

15:48.000 --> 15:54.800
so not all the address are valid so and you see the program counter to the points to the next

15:54.800 --> 16:03.840
address so it means that address is fine okay I will go very fast on the on the

16:03.840 --> 16:13.360
the infection set it's not too difficult to to understand you find your way when when you know

16:13.360 --> 16:22.880
some assembly uh you you have of course for the arithmetic operation you can take source

16:22.960 --> 16:30.640
from other register like the E and F register you can also an immediate uh value means that

16:31.760 --> 16:38.240
the value that is specified here so this is the type of the instruction and the value that is here

16:38.240 --> 16:44.720
usually is an address between that case is used really as a as a value that is of course only

16:44.800 --> 16:54.000
part of the of the manufacturer is the fourth the fourth first digit of the manufacturer so this could

16:54.000 --> 17:04.000
mean 0.9 actually if we use it as immediate value and from memory of course the most used

17:04.000 --> 17:11.600
way to to load the tab it because then you can of load a full floating point and about the

17:11.680 --> 17:19.360
operation of course you see plus minus plus minus you have another kind of multiplication

17:19.360 --> 17:25.440
internal you're using in internal data so and you can also have it in normalize or not normalize

17:25.440 --> 17:32.960
well let me that you you align the result again to avoid the zero after the digital point

17:33.920 --> 17:41.840
accumulator you can of course white back in in the memory so this is writing back in memory

17:42.240 --> 17:49.280
the two variants one will reset the accumulator and the other will keep the information that

17:49.280 --> 17:56.640
accumulator you have the same for the E and F so you can write in E writing F or put the information

17:56.640 --> 18:05.440
in the in the sign back and and the program and also all those stuff like alarms

18:06.320 --> 18:14.800
we'll see why why we can have alarms I saw yeah what is very interesting is that the encoding you

18:14.800 --> 18:24.240
have two two way to represent zero minus zero plus zero so it's used actually for for me some comparison

18:24.320 --> 18:31.440
if you want to have a greater or equal or greater you have to change the order so it means that

18:31.440 --> 18:39.680
minus a plus b is not the same as plus b minus a so yeah it's a bit of time so you have to do

18:39.680 --> 18:44.320
not the pattern and when you read the code also you have to recognize those pattern and there

18:44.320 --> 18:53.680
are some some exceptions so I leave it to you but does not work for for a lesser or equal b b if

18:53.680 --> 19:01.680
b is zero there are some problems okay another subtlety is that we have a specific class of

19:01.760 --> 19:14.560
operation that will actually alter the instruction that will come after so actually you have to read

19:14.560 --> 19:20.160
the two instruction together to understand what is going on and typically it's operation that will

19:20.160 --> 19:27.600
extract the mantis are find the sign change the exponent and things like that and it will affect

19:27.600 --> 19:33.760
the operation the the information that comes in the accumulator by in the next instruction

19:34.640 --> 19:41.360
we'll see on the example so about the way it works you say I told you well the code it on paper

19:41.360 --> 19:50.320
like this so they write this to the doc what this many code with with the week later here and then

19:50.320 --> 19:56.400
they translate it not quite totally in machine code it's almost machine code actually

19:57.600 --> 20:02.880
you have to address here you have some some part of the instruction here maybe if it's a common part

20:02.880 --> 20:09.680
and some other part there and using that you have most of the information you have only information

20:09.680 --> 20:15.440
actually to to compile it you could compile it with an utility or do it by hand of course I have

20:15.440 --> 20:22.240
done it in my my code and of course when you have that you simply meant that you don't have

20:22.880 --> 20:29.600
all you need to to build a real application for example to compute ballistics you need all the

20:32.000 --> 20:38.720
primitives like trigonometry exponentials and of course the division

20:40.400 --> 20:47.200
so they have a set of minimal set of instruction you have function you can see them there and based on

20:47.200 --> 20:57.600
that you can compute all the rest very quick look at a code so this this is part of the

20:59.760 --> 21:06.800
the library that is in the run so this this code is about the inversion so it's it's a

21:06.800 --> 21:15.200
dump of the of the memory so it's you see it's not not so not so long so if I decode it here you

21:15.200 --> 21:26.320
you see the the instruction that is assembled in block the first part is just about you

21:27.280 --> 21:34.960
information we will store the information in some some address here this address actually it's

21:34.960 --> 21:42.000
the number we want to to invert actually for fourth one yeah for the division we multiply by the

21:42.000 --> 21:48.880
inverse so the purpose is to compute the inverse and the number we want to invert we store it in

21:48.880 --> 21:59.360
memory because we use it at the end again we see why and then we have one big block here that

21:59.360 --> 22:07.440
is actually just computing a first raw estimate of the inverse and then we have iteration five

22:08.000 --> 22:15.040
five iteration that looked really similar just just a number that change usually if you use Newton

22:16.000 --> 22:25.280
the formula here that one with a equals to two and then at the end here you are guaranteed to have

22:25.280 --> 22:34.880
the arms that's not very reliable so it could it could be a problem so what do they do here you see

22:35.440 --> 22:43.600
you have air information that you have stored previously and you multiply you have the result

22:43.600 --> 22:51.280
here the still in the in the in memory so you have the inverse here in the accumulator you

22:51.280 --> 22:59.920
multiply by the number the original number so you compute x by what on x and you should be one so this

22:59.920 --> 23:06.480
constant is one okay so I close and if it's not one what you do what do you do when what you try

23:06.480 --> 23:11.360
again so you have three trials so you have the constant three here actually here and you have

23:11.360 --> 23:17.840
actually a big loop this is a big loop you see if there is a problem if the check does not work

23:17.840 --> 23:22.400
you try again three times if it does not work after three times then you have you raise an alarm

23:22.400 --> 23:27.920
and then the human will come and we check where there is a problem in the in the machine okay

23:28.720 --> 23:36.640
so sorry my time is up so this is the demo so you can see the convergence from one one one

23:36.640 --> 23:46.400
court you have at the end you have you have here zero dot 25 and that's it thank you

23:48.240 --> 23:51.760
thanks mister

