Memoirs by Primož Jakopin

On microcomputers and on INES

January 2022


          Back in 1984, in an article entitled What Primož Jakopin is doing (in Slovenian) I already described this topic briefly to Jože Vilfan, the editor of BIT home computer magazine. It was published in the second issue of BIT, on pages 26 and 27. This short story was initiated by Sergej Hvala, while he was writing a book about the early period of video games around the world and in Slovenia: Early birds: From the Birth of Video Games to the End of Their Childhood (Prva bitnost: od rojstva videoiger do konca njihovega otroštva).


About the Sinclair ZX Spectrum and similar home computers

          Until the microcomputer revolution in the early 1980s, computers were accessible only to a small number of computer professionals. I encountered computers for the first time (without seeing an actual machine, however) during the study of technical mathematics at the University of Ljubljana. The undergraduate course, I don't remember the exact name, it was probably Programming, was taught in the third year. At that time, there were only two majors in mathematics (Faculty of Natural Sciences and Technology), pedagogical (for mathematics teachers in secondary schools, about four students per year) and technical mathematics (about seven students). The lessons were theoretical, but to complete the course every student had to submit a program, which solved a minor mathematical problem, in the FORTRAN programming language, written on paper. The course did not have much weight, a more knowledgeable colleague, student of the second year at the time, Izidor Hafner, helped all of us. He wrote the program and we all (successfully) submitted it as our own. In the fourth year things got more serious, we had to test the program we wrote on the IBM 1130 computer in the Computing Center of the Institute of Mathematics, Physics and Mechanics (RC IMFM). The program had to be written on special form with, I would guess, 20 lines of 80 characters with marked positions (rakes), printed in green. Each row represented an 80 column hard paper card that had to be punched on a special machine, a card punch, and this set of cards (the program) would be later entered into the computer via a card reader. After a student wrote the program on abovementioned paper forms, the program would be typed from the form onto paper cards by two "punchers", ladies who worked in the Computing Center, and from there a packet of cards about a centimeter or two thick would continue its way to the computer for processing. The computer was in a special (air-conditioned) part of a large room, behind a glass wall that separated the user area from the space, which was operators and employees of the Computing Center only. Student set of cards, "jobs", were waiting in a box on the counter in front of the glass wall. When a sufficient number of these "jobs" was in the box, it happened several times a day, the operator took the lot, inserted the cards into the card reader, which transmitted the digitised contents to the computer. Computer processed them and printed the results, if there were any, with a line printer (it printed the entire line at once) on an endless wide paper ribbon with holes on the sides, either white, or such that one line (half a centimeter high) was white, followed by a green one. When I was in my fourth year, the process was significantly liberalized, the students were allowed to punch cards in the afternoon by themselves, and this speeded up the process by an order of magnitude - punching ladies had a lot more urgent work to do than punching of student programs. However, since no program was perfect in the first try, it had to be corrected at least a few times, some line in it, i.e. a paper card, replaced or added, the process was still very time-consuming. To get a simple program straight, let's say one that added the first hundred integers, you could easily spend several days. For anything more complicated, it took a week or more.
          I myself became interested in computer graphics, sort of, I was developing Idrija lace-like patterns from cyclometric functions, which I then printed using stars, dots and other symbols on continuous printing paper. Since I wouldn't get anywhere with the usual procedure for student job processing, I waited in the lobby of the computer room in the evening, after eight o'clock. In the evenings and during the night, until seven in the morning, researchers and PhD students, usually from the Jožef Stefan Institute, had the computer available, pre-booked for a few hours, and worked with it on their own. The researcher from the IJS usually had the computer reserved from eight in the evening until ten or eleven and when she got stuck on some programming problem, she needed 10-15 minutes to think about how to proceed and she waved to the student who was waiting in front of the window (me). For some precious minutes I had the machine all to myself. And I got as much done in those few evening hours as I could have normally done in a few weeks. For a tip, when I no longer knew where there would be something wrong in the program, I tested the patience of the professor of programming, Egon Zakrajšek, who was also the director of the Computing Center. When, in the spring of 1971, two of the employees of the Computer Center unexpectedly decided to leave their jobs because of the compulsory military service, two part-time jobs were available, four hours a day. The position was called "assistant programmer", starting monthly salary was 70,000 dinars, later 100,000 dinars (800 Euros in 2021's value). There were 20 applicants and prof. Zakrajšek chose two, the best student in the class (she had an average grade of 4.8 - out of 5) and me, because of those lace-related functions. On the first of my job, he told me to be careful what I was doing. If he would ever catch me with those laces, I would be fired.
          Later, with the installation of the CDC 6600 supercomputer of the Control Data Corporation (later CDC Cyber 72) in the Central Computing Center of Slovenia (RRC) on Jadranska cesta in Ljubljana (in the adjacent building of the IMFM) things have taken a big turn for the better. The RRC consortium consisted of about ten partners, including the University of Ljubljana, Jožef Stefan Institute, Statistical Office of Slovenia, Ljubljana Clinical Center and the Ljubljana Dairies. It could be accessed remotely, through a net of terminals and also through the reception desk on site, where one could submit cards for batch processing and also collect the printed results. There was a fast printer, which could handle several thousand pages of output. Customer jobs, submitted through terminals or through the on-site card reader were stored in the so-called input queue on the computer's disk, usually there were several hundred jobs in the queue. They had different priorities, depending also on how much of the supercomputer's processing time the partner, for example the Clinical Center, which had a little more than 3% share, had already used that particular day. If the partner already reached its quota, its jobs remained in the queue until the next day. After a job was processed, its results ended up in the output queue on disk, where they remained until being printed, either centrally or locally, on a terminal. There were around 15 terminals, later more, which consisted of a keyboard with a screen, a card reader and a line printer. Terminals had a disk drive, but its only task was keeping the terminal going. On the screen, the terminal operator could watch both queues of the supercomputer, send a transaction from the card reader to the input queue, or send the results from the output queue to the terminal printer. Many more people could access these terminals than could previously access a single computer. The RRC computer costed several million dollars (in 1971), and the terminals about 35,000. In 1972, the IMFM Computing Center was closed so that RRC would not have competition right across the street, employees were offered jobs at RRC, but nobody of us would take the offer. Scientific programming was much more attractive than business, commercial tasks. For some time after the supercomputer installation, both computing centers operated at the same time, and when we, the RC IMFM staff, were having a snack of sandwiches on two benches in front of the building of the Departments of Mathematics and Physics, people from RRC were passing by, across the parking lot between the two buildings, on their way to the cafeteria at the Jožef Stefan Institute, situated on the other, western side of the street. They all wore white coats, probably to look more "scientific". We were dressed as usual, there was no dress code. When our director, Egon Zakrajšek, saw the RRC people, he warned us loudly: "Watch out, guys, the butchers are coming" (butchers also wear white coats) and we laughed, the passers-by certainly did not. The work at RRC was mostly commercial, business programming, done in the COBOL language, where every program was a single giant sausage, while we worked for science and industry, in FORTRAN (later STRUCTRAN), suitable for structured programming where the main the program was short, and all the weight was put to a tree of subroutines and functions with which it was possible to break the task into more transparent, well manageable small parts.
          All of us from the RC IMFM found new jobs in the university faculties and in other partners of the RRC. Egon Zakrajšek, the brightest of the programmers I have met so far, in addition to working at the faculty (he was also the supervisor for my diploma thesis) was also employed at the RRC, he was in charge of the supercomputer's operating system. I got a position in the computing center of the Clinical Center as the programming team leader - to make it sound better, actually I was leading just myself. There was no RRC terminal, and a time consuming journey to the RRC site was required at least once daily - it took an hour on foot or with public transport, cars were not so common as they are nowadays. A few years later I got a job at the Institute for Biomedical Informatics at the Faculty of Medicine, and soon we got a terminal. I had access to it, of course, for as long as I wanted and when I chose to. But there was still no direct access to the computer. Later smaller terminals, with just a screen and a keyboard were introduced, from where it was also possible to access the central computer in a so-called interactive mode. One could access the computer directly, without waiting in a queue - of course in time-sharing mode, but the results were visible almost instantly and it was possible to perfect the program at least ten times faster. Batch processing through card jobs was no longer needed. However, interactive work on the computer in the RRC was only possible on Tuesday afternoons, on Saturdays and Sundays. Not to overload the computer with it.
          You can imagine how all of us who worked on computers back then wished we had a computer all to ourselves. It was a dream of all of us, a daydream. The first microcomputer I saw was a Commodore PET that Jure Špiler brought from London in the summer of 1978 - a keyboard with a built-in screen on top of it. He wrapped the whole lot in a tent and smuggled it across several country borders in the trunk of a car. Moon landing game was the machine's main attraction. At that time, we were both assistants at the Faculty of Medicine in Ljubljana, I for Computer Science, he for Biophysics. The first microcomputer I got my hands on was a Sinclair ZX 81, with 1 KB of memory, in the spring of 1982. The membrane keyboard was very poor, hard to type, the external memory was a tape recorder, the screen was an ordinary TV set. A friend from the National and University Library, Saša Albert, brought it to me for a few days to test it and tell him whether this computer, used primarily to play games, could be also used for something serious. As an example, I took a program for calculating the coordinates of the points of the polygon of a cave survey, from the data collected from two points on the cave floor, looking from point 1 to point 2, followed by points 2 and 3, 3 and 4 and so on to the end of the tunnel. Each leg had three values - distance, inclination and azimuth. The program, on paper, was a little more than one page long, about 30 lines. The machine had a BASIC interpreter, and I managed to type in the program up to line 25 where the machine ran out of memory. I returned the ZX 81 to Sašo and told him that the machine was promising, but that I would need 2 KB of memory to program something more useful. Yet I was very much impressed by this experience. In the summer of 1982, the successor to the ZX 81, the Sinclair ZX Spectrum, became available, in two versions, with 16 KB and 48 KB of memory. The demand for it was so great that the price for the 48 KB model was 175 British pounds in the UK, while the export price was 228 pounds (if I remember correctly) and the delivery time was several months. Of course, it could not be purchased in Yugoslavia, nor could it be imported, high technology should be kept out of reach for the masses. So that no private entrepreneur would compete with the state sector, or, who knows, just to stay on the safe side. My colleague Franci Ambrožič from the College of Physical Culture had connections in England, his father worked in diplomacy, and in December 1982 a 48 KB Spectrum found its way to him, certainly outside of official channels. He spent a few days getting acquainted with the machine, he also played with it, but then, just like was the case with Saša earlier in 1982, he lent it to me over the New Year holidays to see if something more serious could be done with it. Of course it was possible, in a short time I wrote my first text editor, BESS (Basic Editor for the Sinclair Spectrum), on it, in BASIC, because the machine didn't have such a utility. The ice was broken, in a few months I had my own machine, there was no way back to mainframe computers.


On the usefulness of the BASIC language on the Spectrum

          As far as I'm concerned, it was very good, if not simply great. It had a command that other microcomputers, especially its closest competitor, the Commodore 64, could not have, because they had a vastly inferior microprocessors. Spectrum had a linear memory. You typed CLEAR 32000 (on a 48 KB machine, memory from 0 to 16383 - the first 16 KB - was reserved for the operating system on both Spectrum versions) and the machine moved everything it needed to memory addresses from 16384 to 31999. All the memory bytes from 32000 to 65535 were for you, in one piece, you worked with with it however you pleased. On the Commodore, it was 2Kb here, 4Kb there, and somewhere else - it was like carrying a bucket of water back and forth with small vessels of various sizes. Better not to start at all.


About programming the Spectrum

          In the beginning, of course, I programmed in BASIC. The program was certainly very slow because it had a BASIC interpreter, each line of the program was translated into machine code before execution, executed and so on with the next line. BESS had a little more than 20 KB of free space in its memory, that is, for about ten book pages. There were 24 lines of 32 characters on the screen, which is standard on this computer if you work in text mode (in graphic mode there are 256 x 192 pixels). BESS had all the usual editing functions - writing of text, inserting and deleting letters and punctuation, of course also rows and blocks of rrows. It also had a text search function, where all the weakness of the interpreter's mode of operation came to light. Searching one page of text (2000 characters), took BESS a little over one minute. Searching through ten pages, ten minutes. One could almost search through text faster on foot, by reading it. It was immediately clear to me that the problem should be solved in a different way. An assembler, i.e. a converter from a program written with symbols into machine language, the program code of the Zilog Z80 microprocessor, did not yet exist, and the machine code had to be coded by hand. This is possible, but not recommended. In the computer magazine article from which I learned the Z 80 machine language there was an advice, literally: If you value your sanity, do not program in machine code, use an assembler. In two days, I wrote and perfected a machine code text search subroutine. It was just 50 bytes long, but it found something at the end of a 20 KB piece of text in about five hundredths of a second. Instead of ten minutes in BASIC. The successor of BESS editor (where 99% of code was in BASIC), the TESS (Text Editor for the Sinclair Spectrum, 24 lines by 64 characters on screen) which I completed in 1984 already had about a quarter of the code written in machine language. It was converted to machine code with an assembler, it became available in the meantime. In INES (INformation Editing System, 1985) only input and output commands and the main controller, all in all about one percent of the program, was written .
          All this was made possible by the architecture of the computer's microprocessor, Zilog's Z80. In comparison to the MOS 6500 family of microprocessors that powered the competition, the Commodore machines, with their woefully meager register set, composed of just one eight-bit main register (accumulator), two eight-bit index registers, a sixteen-bit stack pointer, a program counter, and an eight-bit status register, the Z80 was a true luxury. There were four 16-bit main registers that could also be used as 8 8-bit ones, two 16-bit index registers, a 16-bit stack pointer and program counter, an 8-bit status register, and two more 8-bit registers: an interrupt vector and a refresh counter.
          That the Z80 was not just for fun, but marked a turning point in microprocessor history, can already be felt from the cover of the most important manual on programming the machines with this microprocessor. It is Programming the Z80 by Rodnay Zacks. As if a lightning would struck the earth and split it open.


About the creation of the INES editor and its repercussions

          I already described the path to the creation of INES in the answer to the previous section, but unfortunately the release on foreign markets more or less failed. There was a considerable response in other republics of our former common homeland, Yugoslavia, especially in Croatia and Serbia. Many people have put the program to good use. The title of a very favorable article in the magazine Svet komputera (Computer world, Belgrade) was, a very sympathetic gesture, the same as the title of Rade Šerbedžija's poem: Ne daj se, Ines (Don't give up, Ines). In the western market, things were different. I myself wrote a manual about 40 pages long in English, which my mother Gitica and I also translated into German. Brother Jernej, who was working in Germany at the time, in an architect bureau, found a representative in Düsseldorf, the company UltraSoft. It was two guys who did some publicity, several articles appeared in newspapers, including English ones. The reviews were favorable, I remember a note from an English review that the manual is quite good, considering that it was written by two Germans (probably Jernej and I). It was well received by a German newspaper, where they wrote that it was quite moving to see an otherwise good and complete computer manual written in Altdeutsch (Old German). Mother attended high school in Bregenz by Lake Constance during the World War II (Germans expelled entire villages and towns from Slovenia to Germany) and her German was from that time. When UltraSoft started receiving orders, the two guys waited for an order from some wholesale chain, and threw letters from individual buyers into the trash. And that was it.
          INES's successor, STEVE, fared better.


This paper in Slovenian


Related post:


The page was written and set up by Primož Jakopin. For questions and comments, write to primoz jakopin guest arnes si (insert periods and afno in the appropriate places). This short story was created in Slovenian from the middle to the end of January 2022. English translation was made by the author in May 2023. Date of last modification: September 14, 2023.