INTRODUCTION "The Spectrum ROM Disassembly", by Dr Ian Logan & Dr Frank O'Hara, published by Melbourne House Publishers, 1983, is now out of print and unobtainable, as far as I know. To publish an index to it may therefore seem a little perverse. However, myindex is as much an index to the Spectrum ROM itself as to the Melbourne House publication: I have tried to compile it in a form that will be useful to Spectrum owners even if they haven'tgot a copy of the book. The vital ROM listing is reproduced as an Appendix to the index. The index couldn't possibly have been written without constant use of the work done by Logan & O'Hara; for example allthe labels used to refer to the ROM are taken straight from the "Disassembly". It contains many references to and comments on the "Disassembly"; see for example under "misprints". If you_do have a copy of the book these references will be useful, if you don't you may still find some of them enlightening. ----- The items indexed are of five kinds: 1. Labels. Under each label name, every call or jump to that label from any part of the ROM is listed, and where relevant a list of "Rems" indexes every mention of it in "ROM Disassembled". There is also a description of the operation of the subroutine labelled, or a cross-reference to the subroutine under which the action of that section is described. A label is counted as a_subroutine if it is CALLed from some point in the ROM - though other addresses can be CALLed from machine code, with suitable precautions, and in a few casesthese are suggested in the index. Subroutines are listed under their labels, not under the cross-head titles used in "Disassembly" as headers for each section of the listing. A label counts as an_exit routine if it includes or terminates with a RET. It is sometimes, but by no means always, safe to call these from machine code. 2. The cross-head titles used as headers in "Disassembly", unless they are very similar to the first label: generally theseare merely cross-referenced to the first label used in the listing, but in a few cases they are treated as "topics", see 4.below. 3. Every key code on the "old" Spectrum. Letter and digit key codes are indexed under "letter keys" and "digit keys"; including for example the special use of the E key in "E-format"numbers. The other uses eg of the "E" key with symbol shift etc will be found indexed under ">= key", "REM key", "TAN key", "ATNkey". "Commands, functions and operators" are indexed under the corresponding key, but there is an index entry with that title which gives a summary table. For all but the most straightforward key codes, an indication is given of how the code is implemented in ROM. 4. Topics, mostly terms mentioned in "Disassembly" which aren't self-explanatory and aren't normal terms of assembly language or machine code programming. There are a few additionaltopics: see for example "BASIC interpreter", "Chebyshev polynomials", "misprints", a full list of all the misprints encountered in "Disassembly", "mistakes in ROM", "one-byte binary arithmetic", "useful routines", a list of subroutines which machine code programmers may find useful. 5. In the case of system variables, the index shows every case in which a value is written to the variable, and, separately, every case in which its value is read by the ROM, aswell as each mention in the "Rems". For the five "flag" system variables FLAGS, FLAGS2, FLAGX, P FLAG and TV FLAG, this information is shown for each individual bit of the variable. Two general notes on the system variables may be inserted here: 5.1. All the flag svs except P FLAG contain unused bits: FLAGS bit 4 FLAGS2 bits 7, 6 and 5 FLAGX bits 4, 3 and 2 TV FLAG bits 7, 6, 2 and 1 These 11 spare flags can sometimes be used by machine code programmers. Beware! Some of them are used by the 128K Spectrum versions, and some may be pre-empted by hardware operating systems, eg FLAGS bit 4 is certainly used by the DISCiPLE disc operating system. 5.2. The listing in "Disassembly" contains many instructions relating to the system variables which appear at first sight to be impossible, eg in 1CBE CLASS 09: RES 6,(P FLAG). RES 6,(nnnn) isn't in Z80 assembly language. Reference to the machine code will show that such instructions are expressions for RES 6,(IY+87d) and similar: FLAGS is IY+1 TV FLAG is IY+2 FLAGS2 is IY+48d FLAGX is IY+55d P FLAG is IY+87d Machine code programmers can also make use of such IY instructions - so long as the value of IY itself, 5C3Ah/23610d, isn't disturbed. ----- The alphabetical order observed throughout is as follows: letters A-Z, ignoring spaces and the difference between upper and lower case except when two items are otherwise identical, when lower case comes first, and a space precedes both upper and lower case the numeral digits 0 to 9; even where A-F indicate hex digits, they precede the digit 0 other symbols in Spectrum character code order, except that"underline" and "up arrow" are listed under "U", and the "hatch"symbol code 23h/35d is called (hatch) - these symbols cannot be printed by this word processor! Numbers are suffixed h for hex, d for decimal, b for binary. They should be presumed to be hex if no indication is given, unless they are written in full, eg "sixteen" means 10h/ 16d. In many cases both hex and decimal forms are given, eg 10000h/65536d; or binary and hex forms are so given, eg 10001100b/8Ch. Throughout the index "the notes" means the notes or "Rems" attached to the listing in "Disassembly": "the index" means this index. ----- --------------------------------------------------------------