I'm not really a fan of benchmarks. I find them too restrictive in the way they only measure what they measure. That is, they only could give you an estimate of something (that they measure), not an evaluation of what the machine can do in general. It doesn't indicate the possibilities, they only convey a test of something. Mostly is has been for speed .. of that something.1
Today when almost all interests on 'retro computers' are in the spotlight of how and if they are able to play (graphical) games, and in this area the ABC802 can not compete, benchmarks shows other aspects. Regrettably, the presence of anti-historical perspectives undermines significant milestones in computer advancements and skews factual information, potentially transforming them into narratives that lack historical validity.
Besides that reality distortion of today, benchmarks can be fun to look at. The following are benchmarks that have been done through the early years of personal computing, when programming in BASIC was the primary choice. It was the time when the BASIC came in ROMs, and basically was the computer software/operating system. But also there are some new retro community contributions of benchmarks, which are fun, also.
The ABC802, which is the focus here, was a follow-up to the ancestor ABC80. It was almost the same computer, but, among other things, had an improved BASIC, the BASIC II. The BASIC II was used in the similar machines ABC800 and ABC806, but also there was a version made for PC-DOS/MS-DOS, intended for easier transitioning to the future PC-line of computers. Or was it suppose to conquer?
Well, even if the first IBM PC was launched with a Microsoft BASIC in ROM, the ABC802 also marked the end of an era started with SOL-20, Apple II, Commodore PET, TRS-80, and the like. The instant BASIC at startup had passed its prime time. This was true for the business market where ABC802 belonged, when you either made your own program or bought from it on the market from small developers, small firms. That was about to change. On the other hand there was a compleatly different home computer domain in which BASIC in ROM right at this time rised and thrived, where it stayed for some time longer and much stronger, almost into the next decade. Hand in hand with the rise and fall of BASIC in ROM was the cassette tape recoder/player used as data/program storage. If you think about it .. not that surprising. The diskette, and eventually the hard drive, changed the personal computer to using a disc operating system (yeah, DOS) as a focus point, instead. This is far from declaring the language as dead. No, it still thrives even today and may develop futher. Who knows. However, the large base it once supported is no longer there.
But as can be witnessed below, BASIC II in ABC802 was quite fast for its time. Often very near (below or above) the highly prasied BBC BASIC of the BBC Micro. It also had the possible choice between different number types in trade-off between speed and precision. Thus making it versatile in many applications.
Some relevant specs, ABC802 was introduced in Feb. 1983:
- Z80 3 Mhz
- 24k ROM BASIC II (made by DIAB AB)
- 32k RAM (+ additional 32k RAM-disc, or combined let you have 64k CP/M)
The following programs have all been tested on an original machine, Luxor ABC802.
Some different samples in BASIC II for ABC802 to show how it can work.
- SNAKE1.BAS - more or less regular BASIC of the time, selecting and jumping by using
GOSUB
ochGOTO
. First attempt of making separate routines. Sample of 'spagetti code'. - SNAKE2.BAS - an attempt of using
DEF FN
to replace some previous jumping. All essential variables are globals, thus no real gain of the structure were performed. - SNAKE3.BAS - some more shakeing at the code strucure, but parameters to functions
FN
only allows for single values when called (from variables) to be passed, thus limiting the usefulness as procedures or functions as we know them from (contemporary) other languages such as C or Pascal. Even though this may count as 'structured BASIC' the language still has too weak constructs, or in itself is not sufficient.
Representation of numbers2
Integer, Float, Double, ASCII .. Something noticeable about the built-in number types in BASIC II is that there is a clear trade-off between precision and speed, which is probably one of the best reasons for the different types offered.
But there was also care taken for the number of bytes each and every number took. Memory was scarce, and number of bytes had serious significance.
The value of an integer is stored in 2 bytes in two's complement form. With two bytes, a binary number can be written in the number range 0 to 65535. In two's complement form, the number range becomes -32768 to +32767. The two's complement form uses the most significant bit (bit 15) to indicate whether the number is negative or positive. If the number is negative, the bit is 1, else 0.
In the symbol table, a simple integer variable takes up 6 bytes.
A floating point number has the form:
- +/- Mantissa * 10 ** Exponent
In the computer, a simple floating point number is stored in 4 bytes as SINGLE and 8 as DOUBLE. Unlike ABC80, which used BCD arithmetic, ABC802 uses binary arithmetic. Thus, the computer sees a floating point number as:
- byte 1 The exponent
- byte 2-4/8 The mantissa
Calculation of the correct exponent value from exponent changes is done with:
- Exponent value = Exponent bytes - 128
Byte 2 differs from the others in the mantissa in that the most significant bit indicates whether the mantissa is negative or not. Is the bit set to one the mantissa is negative, otherwise positive. To save space, the highest bit is not stored in the mantissa since it is always "one" due to normalization (that bit is used in instead of showing the sign of the mantissa as above). One exception to this is when the floating point is zero (O), which is indicated in that the exponent byte is zero.
In the symbol table, a floating point number occupies 8 bytes as SINGLE and 12 bytes as DOUBLE.
With BASIC II, some new features was added to the ASCII arithmetic:
- The number of digits was increased to 125.
- Exponent was allowed in input data.
Method TA: Simple timing with approx. seconds that "wraps around" (modulus):
10 POKE 65524%,0%,0%
...
1000 PRINT "Time: ”;PEEK(65524%)+(PEEK(65525%)/100)
Method TB: Timing for programs that takes a longer time, with result in seconds:
10 T1$=RIGHT$(TIME$,12)
...
1000 T2$=RIGHT$(TIME$,12)
1010 T=(VAL(LEFT$(T2$,2))-VAL(LEFT$(T1$,2)))*3600+VAL(RIGHT$(T2$,7))-VAL(RIGHT$(T1$,7))
1020 PRINT "Time: ";T+(VAL(MID$(T2$,4,2))-VAL(MID$(T1$,4,2)))*60;
Kilobaud 1977, Personal Computer World 1978, Mikrodatorn 1982, Hobbydata 19843
One of the earliest comprehensive benchmarks for primarily home computing (but also occationally larger machines) came in 1977 with Rugg-Feldman samples in 1977 Kilobaud magazine. Later Personal Computer World added a benchmark in 1978, below 'B8.BAS'.
- B1.BAS Kilobaud, 1977
- B2.BAS "-
- B3.BAS "-
- B4.BAS "-
- B5.BAS "-
- B6.BAS "-
- B7.BAS "-
- B8.BAS PCW Feb. 1978
The samples built most on each other progressively towards more advanced. They are intended to reflect floating point results. Later two Swedish magazines extended the list with other computers, unsurprisingly most from the ABC-line. Below I've added lacking results from ABC802.
Creative Computing 1983-4 Ahl's Simple Benchmark4
- AHLS.BAS This is the only benchmark among the selected ones here, that also gives a hint about accuracy in number crunching, beside 'quality' of random numbers.
- AHLS1.BAS Another version of the same benchmark.
- AHLS2.BAS Version adopted to ABC802.
- AHLS3.BAS Version adopted to ABC802. But using SINGLE.
- AHLS4.BAS Version adopted to ABC802. But using DOUBLE.
Randomness: "The measure of randomness should also be as close to zero as possible. Anything under 10 is quite good. Values between 10 and 20 are acceptable.", p.260. So ABC802 should be acceptable concerning the randomness overall.
Accuracy: "The measure of accuracy should be as close to zero as possible. [...] A value of 0.001 is about the norm. Anything larger than that (0.18, for example) is poor, while smaller values (0.00000021, for example) is very good.", p.260. ABC802 should therefore judged to be more than very good when using DOUBLE. When using SINGLE .. But with no mods, it is worse off than poor.
Interface Age 1980 Prime Numbers5
At page 131 the author writes: 'Use any tricks you know to speed up the program execution (multiple statement lines, integer variables, etc.), but don't "improve" on the basic algorithm itself.'
- INTER.BAS Original.
- INTER1.BAS SINGLE.
- INTER2.BAS DOUBLE.
BYTE 1981 Erathostenes Sieve6
- SIEVE.BAS In contrast to the other benchmarks, this intend to compare different programming languages, and their outcome in speed. Here it is of course a sample in BASIC.
- SIEVE10.BAS From Byte Jan. 1983. Now updated with 10 iterations in BASIC. When testing in the table below, I deleted the line "105 PRINT PRIME" (not even commented).
- PRIMES.BAS No mods.
- PRIMES1.BAS Adopted to % integers.
FizzBuzz7
Perhaps a bit odd to introduce FizzBuzz as a benchmark. But why not? It is easy to change and adopt to different flavours of BASIC.
- FIZZBUZZ.BAS Original program.
- FIZZBUZ1.BAS Introduce % everywhere.
Noel8
Scruss9
I have kept to the original program as close as possible. The only thing that was changed was the timing, as necessary. However, the restriction to a syntactical alignment is troublesome as no one, even then in the 80's, would make a program without adopting internal speedups in available BASIC, such as using integer where possible instead of the always slower floating point. At least if it was known to the programmer.
- SCRUSS.BAS Original program. Can not be used as is.
- SCRUSS2.BAS Changed for timing in ABC802.
I do agree with not using any special POKE
e.g. turning off interrupts, using machine code
or any assembly routines. It's not BASIC. It doesn't measure the BASIC.
Mandelbrot Set10
A traditional benchmark for programming languages have been the Mandelbrot set. Especially when colours are present, it shows speed in zooming and the spread of colours in the palette.
- MANDEL1.BAS Plotted with
TX POINT
. Adopted from ZX81 sample. - MANDEL2.BAS Printed with characters. This seems to have been written for an emulator (e.g. some oddities in represented chars).11
- MANDEL3.BAS Printed with characters, and somewhat optimized slightly better than the above.
Summary benchmark results12
The precision of seconds given in fractions may or may not be the true or actual case, as the timing in many cases was (and still are) not that precise. Therefore most numbers are given as by the two methods above TA and TB, unless they are from computers tested a long time ago and already published as in fractions. I have not tested the latter again.
Program | Mods | Seconds TA | Seconds TB |
---|---|---|---|
B1.BASa | none | ~0.81 | 1 |
B2.BASb | none | ~1.76 | 2 |
B3.BASc | none | ~5.91 | 6 |
B4.BASd | none | ~5.93 | 6 |
B5.BASe | none | ~6.4 | 7 |
B6.BASf | none | ~11.71 | 11 |
B7.BASg | none | ~19.84 | 20 |
B8.BASh | none | ~29.26 | 29 |
AHLS2.BASi | none | ~23.81 | 24 |
AHLS3.BASj | % SINGLE | ~22.62 | 22 |
AHLS4.BASk | % DOUBLE | ~37.49 | 38 |
INTER1.BAS | SINGLE | - | 338 |
INTER2.BAS | DOUBLE | - | 707 |
SIEVE.BAS | INTEGER | ~24 | 24 |
SIEVE10.BAS | INTEGER | - | 613 |
PRIMES.BAS | none | ~32.91 | 33 |
PRIMES1.BAS | % | ~17 | 17 |
FIZZBUZZ.BAS | none | ~2.47 | 3 |
FIZZBUZ1.BAS | % | ~1.91 | 2 |
NOEL.BASl | none | ~18.89 | 19 |
NOEL1.BASm | % | ~8.01 | 8 |
NOEL2.BAS | SINGLE | ~18.89 | 19 |
NOEL3.BAS | DOUBLE | ~25.21 | 26 |
SCRUSS2.BASn | none | - | 246 |
MANDEL1.BAS | % some | - | 3317 |
MANDEL2.BASo | none | - | 93 |
MANDEL3.BAS | % some | - | 88 |
Notes
a BBC Micro: 1.0
b BBC Micro: 3.1
c BBC Micro: 8.2
d BBC Micro: 8.7
e BBC Micro: 9.1
f BBC Micro: 13.9
g BBC Micro: 21.4
h BBC Micro: 5.1
i IBM PC: 24 sec., acc. 0.1159668, rnd. 6.3 ABC802 TB: acc. 0.247559, rnd. 10.7994.
j ABC802 TB: Using SINGLE but the rest of program with no change: ..
k ABC802 TB: Using DOUBLE but the rest of program with no change: acc. 0.0000000000602824457018869, rnd. 10.79915231955238.
l Same result as BBC Micro.
m BBC Micro: 9.
n In this case a higher number the better. Cf. BBC BASIC at 202, Commodore 64 BASIC at 100. ABC802 BASIC II TB at 246.
oNearest compeditor: BBC Master (mode 7) 111.95, BBC Master (mode 6) 112.04, BBC Micro B (mode 7) 144.96.13
Nokia had taken control of the struggling ABC computer line, but in 1986 eventually discontinued it due to poor sales and limited market reach the year before. The abrupt decline came as a surprise to many, considering the strong brand presence of ABC computers. Nokia attempted to leverage the brand by introducing entirely different products, hoping to capitalize on its reputation in the market. The entry of the IBM PC in Sweden led to intense competition, with Nokia and Ericsson attempting their own variations. However, full compatibility with the IBM PC emerged later as the only viable option. IBM PC hardware became synonymous with personal computing, leading to a decline in loyalty towards domestically produced computers. Benchmarks played a distinct role in evaluating performance relative to cost, and the emergence of PC clones from Asia contributed to lower prices in the market. As the hardware was essentially the same, you could only compete with performance versus cost.
Microsoft played a crucial role in the computer industry by offering comprehensive BASIC support for a wide range of computer hardware. They extended their influence by adapting and widely adopting their BASIC programming language. In the early stages, Microsoft employed cross-compilation techniques to create BASIC interpreters for different architectures. As time progressed, they further developed and introduced enhanced versions such as Visual BASIC. This abstraction or strategic approach contributed to Microsoft's growth and influence in the industry.
The computer industry was faced with a critical decision: whether to compete within the established IBM PC/Microsoft DOS track or to explore the development of their own UNIX-based systems. Some companies, such as Diab AB and Microsoft with their offerings D-NIX and Xenix respectively, ventured into UNIX despite Microsoft's partial commitment to the former track. However, as hardware technology advanced and prices dropped, the market underwent a significant transformation. The importance of resource sharing, which was a key advantage of UNIX systems, diminished during this time. Consequently, the industry's focus shifted away from UNIX-based systems and towards alternative options, with MS/PC-DOS (Microsoft/IBM PC Disk Operating System) emerging as a prominent choice.
But Apple demonstrated an alternative path by focusing on hardware-software integration and user-friendly design. Their success extended beyond business to education, music, and art. Other companies with computers like Atari ST and Commodore Amiga targeted similar markets, but Apple stood out with programs like spreadsheets and desktop publishing, revealing the potential for a broader market. The initial adoption and market penetration of the Macintosh were slower than expected, but over time, Apple's unique approach and product offerings gained traction.
Had the Swedish computer industry taken a different path, such as adopting Apple's approach and capitalizing on the strong hardware-software integration observed in ABC computers, it could have paved the way for the emergence of alternative computer systems. Rather than companies competing against each other, as was the case in the declining ABC market, they could have potentially cooperated, similar to the collaborative spirit that brought the ABC80 to fruition. Indeed, the 'MSX' platform in Japan faced difficulties in expanding beyond the domestic market and gaining widespread international adoption, despite having the support of Microsoft. The challenges encountered by the MSX platform highlight the uncertainties and complexities of the computer industry. Therefore, in retrospect or at the time, it was challenging to make any guarantees about the future prospects of the MSX platform or any other similar ventures in the industry. The ever-changing market dynamics, competition, and various other factors made it difficult to predict the outcome with any certainty.
In 1985, prior to the release of Windows 1.0, I personally endeavored to persuade a small company specializing in ABC computer add-ons. Unfortunately, my attempts were unsuccessful. To demonstrate the potential of a windowed interface on a screen, I developed a lightweight demo utilizing a markup language. The demo operated in a manner reminiscent of a printer, but instead displayed content on the screen. My inspiration stemmed from both Lisa/Macintosh computers but also Lisp Machines, which featured mouse-driven interfaces and windows. Although I had only seen pictures of the latter, I was aware of their presence at the university where I was studying.
The potential for the Swedish computer industry had greatly diminished, resulting in the discontinuation of the ABC802 and the cessation of any further advancements. Despite the impressive speed of BASIC II, there were no viable prospects for future development, and the endeavour in this respect had reached a dead end.
- Andersson, Anders (red.), ABC om BASIC, (1979) 2. uppl., Didact, Linköping, 1980.
- Bit för bit med ABC 800, Luxor datorer, Motala, 1984.
- Isaksson, Anders & Kärrsgård, Örjan, Avancerad programmering på ABC80, Studentlitt., Lund, 1980.
- Lundgren, Jan & Thornell, Sören, BASIC II boken, 1. uppl., Emmdata, Umeå, 1982.
- Lundgren, Jan & Thornell, Sören, BASIC II boken för ABC 802, 1. uppl., Emmdata, Umeå, 1983.
- Markesjö, Gunnar, Mikrodatorns ABC: elektroniken i ett mikrodatorsystem, 1. uppl., Esselte studium, Stockholm, 1978 URL.
- Sjöström, Roland, Positionering under strategisk osäkerhet Vol. 1 En studie av positionering i en ny bransch, Unitr., Linköping, 1996.
- Sjöström, Roland, Positionering under strategisk osäkerhet Vol. 2 Luxor datorer och persondatorbranschen, Unitr., Linköping, 1996.
Footnotes
-
For a comprehensive layout of benchmarks present and historical, see e.g. http://www.roylongbottom.org.uk/classic.htm ↩
-
More or less a translation from Bit för bit med ABC 800, Luxor datorer, Motala, 1984, pp.44-6 ↩
-
David H. Ahl, "Benchmark Comparison Test", Creative Computing, Nov. 1983. pp. 259–260, David H. Ahl, "Creative Computing Benchmark", Creative Computing 1984. p.6. https://en.wikipedia.org/wiki/Creative_Computing_Benchmark ↩
-
Interface Age, 1980, pp.130-1 ↩
-
https://scruss.com/blog/2020/12/17/bench64-a-new-basic-benchmark-index-for-8-bit-computers/, https://github.com/scruss/bench64 ↩
-
http://forum.6502.org/viewtopic.php?p=87398, and https://gitlab.com/retroabandon/bascode/-/blob/master/abc800/mandel-abc800.bas?ref_type=heads. ↩
-
These numbers should be representative of the other in the serie ABC800 and ABC806, as they are basically the same computer in these regards. In certain versions they can do better graphics, though. ↩