Hopefully, this is a *pretty* comprehensive list: - String handling - No `FAST` and `SLOW` - `UNPLOT`/`PLOT OVER` - Additional (faster) method for storing integers - Maths - Multi-statement lines - Scrolling - ASCII - Text display: `INVERSE`, `BRIGHT`, `FLASH` - String input: `LINE` - Pixel graphics: `LINE`, `CIRCLE` and `DRAW`, `POINT`. Also `PLOT` - Colour: `BORDER`, `PAPER`, `INK`, `ATTR` - Sound: `BEEP` - Typographical - Files and channels - Fixed video RAM - Input/Output: `IN`, `OUT` - `SCREEN$` - Binary: `BIN` - Tape files: `VERIFY` and `MERGE` This list omits the enhancements when plugging in *Interface 1*. Looking at each in a little more detail... #### String handling ZX80 offered no string manipulation, whereas the ZX81 introduced `n TO m` - to simplify (and reduce memory). The Spectrum continued the use of `TO`, *possibly* with no further enhancements to the ZX81 functionality (I can't remember). #### No `FAST` and `SLOW` The ZX81 had `FAST` and `SLOW` keywords, for the two modes of operation. The Spectrum did away with these modes, and hence the keywords. #### `UNPLOT`/`PLOT OVER` The ZX81 has a third command the Spectrum doesn't have: `UNPLOT`. On the Spectrum, the same effect can be achieved by using `PLOT OVER` with the same x- and y-coordinates. #### Additional (faster) method for storing integers The ZX80 stored all numbers as floating point. The ZX81 added an "integer only" storage method, for numbers between -65535 to 65535, that was faster. It is unclear whether the Spectrum also had the integer storage method. #### Maths > Vickers further improved the math pacakge ... for the Spectrum, over the ZX81. How is was improved is unclear. #### Multi-statement lines The ZX81 only allowed one statement per line number. The Spectrum allowed multi-statement lines #### Scrolling The ZX81 doesn't scroll the screen automatically like the Spectrum does, you have to use a specific command, `SCROLL`. #### ASCII The ZX81 only has a limited character set with only upper case using non-ASCII values, whereas the Spectrum supports ASCII and lower case characters. #### Text display: `INVERSE`, `BRIGHT`, `FLASH` The Spectrum allowed effects to be added to text characters. The ZX80/ZX81 did not. #### String input: `LINE` The Spectrum offered an string input that suppressed the double quotes being printed: ```none 10 INPUT LINE A$ ``` #### Pixel graphics: `LINE`, `CIRCLE` and `DRAW`, `POINT`. Also `PLOT` The Spectrum gains all the pixel-manipulation commands: `LINE`, `CIRCLE` and `DRAW`. `PLOT` now means a single pixel, whereas, IIRC, on the ZX81 a "pixel" was in fact a 4x4 pixel block . `POINT` returns 1 if the pixel at (x,y) is ink colour. 0 if it is paper colour. Error B unless 0<=x<=255 and 0<=y<= 175. #### Colour: `BORDER`, `PAPER`, `INK`, `ATTR` For colour manipulation the Spectrum gains the `INK` and `PAPER` commands, and `BORDER`. `ATTR` would give the display attributes of a character location on screen, #### Sound: `BEEP` The ZX80 and ZX81 had no sound capability (unless some funky screen blanking code was used to create a buzz in order to approximate a noise but this was a side-effect, not a *feature*). The command `BEEP` provided sound on the Spectrum (plus `PLAY` on the 128k). #### Typographical There are minor typographical changes (ZX81 -> Spectrum): - `GOTO` -> `GO TO` - `GOSUB` -> `GO SUB` - `RAND` -> `RANDOMIZE` ([the ZX80 used `RANDOMISE`][1]) - `CONT` -> `CONTINUE` - etc. #### Files and channels - The Spectrum offers more with files, and introduces streams: `MERGE`, `VERIFY`, `SCREEN$`, and `OPEN`/`CLOSE` `#`. Additionally, for the Spectrum: > because the hardware design was incomplete, [Vickers] created a hardware abstraction layer of channels and streams. This functionality was later "fleshed out" with the use of *Interface 1* (not covered here). #### Fixed video RAM The unexpanded base model of the ZX81 used an "elastic" (and rather annoying) memory map, starting at `D_FILE`, that expanded (and contracted?) as the screen was filled (or emptied) (IIRC, this was due to ZX81 having to accommodate for the very limited 1 kB RAM available). It also moved around as the BASIC program residing beneath it grew or shrank. [![Partial ZX81 memory map, showing the display map][2]][2] However, if a 16 kB RAM pack was used and detected, then the video memory *may have* automatically maxed out its size. It is better explained on page chapter 27 of the ZX81 BASIC manual: > When the total amount of memory (according to the system variable `RAMTOP`) is less than 3 1/4 K, then a clear screen - as set up at the start or by `CLS` - consists of just twenty five `NEWLINE`s. When the memory is bigger than a clear screen is padded out with 24*32 spaces & on the whole it stays at its full size; `SCROLL`, however, & certain conditions where the lower part of the screen expands to more than two lines, can upset this by introducing short lines at the bottom. The Spectrum had a fixed memory map for the RAM, split into two sections: - 6144 bytes worth of bitmap data, starting at memory address &4000 - 768 byte colour attribute data, immediately after the bitmap data at address &5800 #### Input/Output: `IN`, `OUT` I am not sure what these two commands did. According to [Appendix C of the Spectrum manual][3]: > `IN` - The result of inputting at processor level from port x (0<=x<=FFFFh) (loads the bc register pair with x and does the assembly language instruction in a(c)) #### `SCREEN$` > The character that appears, either normally or inverted, on the television at line x, column y. Gives the empty string, if the character is not recognised. Error B unless 0<=x<=23 and 0<=y<=31. Also used, in conjunction with the `LOAD` and `SAVE` commands, to save and load a bitmap of the screen. #### Binary: `BIN` > An alternative notation for numbers: `BIN` followed by a sequence of 0s and 1s is the number with such a representation in binary #### Tape files: `VERIFY` and `MERGE` `VERIFY` and `MERGE` was introduced with the Spectrum, for enhanced tape based file storage, allowing you to verify a saved file, and to merge a saved file. ---- #### References - [zx spectrum and zx81 BASIC differences?][4] - [Reusing code, reverse engineering and collaboration][5] - [Screen Memory Layout][6] - [Peeking into the ZX81s Screen Maze][7] - [Appendix C of the Spectrum manual][3] [1]: https://retrocomputing.stackexchange.com/q/26117/202 [2]: https://i.sstatic.net/WW1QD.png "Partial ZX81 memory map, showing the display map" [3]: https://worldofspectrum.org/ZXBasicManual/zxmanappc.html [4]: https://www.reddit.com/r/zxspectrum/comments/o2poeo/zx_spectrum_and_zx81_basic_differences/ [5]: https://andrewowen.net/blog/reusing-code-reverse-engineering-and-collaboration/ [6]: http://www.breakintoprogram.co.uk/hardware/computers/zx-spectrum/screen-memory-layout [7]: https://www.zx81keyboardadventure.com/2017/03/peeking-into-zx81s-screen-maze.html