Last issue I mentioned a reprint of an article by Nazir Pashtoon on Spectrum/TS2068 ROM addresses. Well, permission to reproduce them came too late to include in the last issue, so with thanks to SYNTAX’s Kurt Olsen here is not only the ROM addresses but corrections to it!
All corrections are on page 5:
LABEL SPECT 2068 LABEL 1. MASK_INT 0038 0038 2. CLEAR_SP 1097 0BFD DEL_K 3. MAIN_4 1303 0E8D LED4
Thanks to the sharp eyes of these gentlemen the above corrections have been noted.
1. Kurt Olsen, SYNTAX
2. Jack Dohany, Jack’s Fairware
3. Wes Brzozowski, SINCUS
-Jack’s correction was copyrighted, but he has put it in to the public domain. Some unidentified soul wrote on my copy “SAVE and LOAD Routines in Spectrum- 04C2 to 0991. To Nazir Pashtoon who has done so much for the TS community, THANK YOU! The following article and tables are reprinted by permission, Copyright SYNTAX ZX80, Inc. 1984.”
To convert SPECTRUM software to the 2068, you need the location and function of ROM routines in each. You can buy the annotated ROM disassembly from Melbourne House or Zebra Systems. Timex sells the 2068 technical manual. Our cross-index links the two ROMs.
This atlas lists routines in order of their hex address in the SPECTRUM ROM and provides the hex address for the corresponding 2068 routine. Labels and names for the SPECTRUM routines come from The Complete Spectrum ROM Disassembly by Ian Logan and Frank O’Hara. All labels and names for 2068 functions come from Corcoran and Branigin’s Timex 2068 Technical Manual.
To disassemble the TS2068 Home ROM and 8K Extension ROM (EXROM), you will need a program like HOT Z (Reviewed in SYNTAX May 84). HOT Z has a large names file which you can load along with the program to provide subroutine names and some labels for the disassembly. HOT Z self-starts in disassembly mode, to display the Home ROM from 0000h.
In order to disassemble or use EXROM routines, you must enable the bank-switching logic, perform the desired task, then de-activate the EXROM. The 8K EXROM overlays the first 8K chunk of the 16K Home ROM.
To illustrate, the following code copies EXROM to RAM at 8000h, from which you can disassemble or display it.
DI : LD BC,2000
LD A,01 : LDIR
OUT (F4),A : XOR A
IN A,(FF) : OUT (FF),A
SET 7,A : OUT (F4),A
OUT (FF),A : EI
LD HL,0000 : RET
LD DE,8000 :
Headscan (SYNTAX Sep.84) MC is an example of EXROM use. If you want to change the header storage location in RAM, change LD IX,FA3C to , say, LD IX,8000.
Finally, a note concerning the cassette routines of the 2068. All are located in the EXROM, but use subroutines and RST’s in the Home ROM. When a call to the Home ROM or RST occurs, bank switching must take place. This adds code to the SPECTRUM documented by Logan.
Corresponding to every CALL or RST in SPECTRUM cassette routines, you find, in the TS2068 EXROM, a 23-byte code segment which starts with PUSH IX and ends with POP IX. This code preserves and sets up registers and calls the service routine at 0F99h in the EXROM. The service routine transfers the calls to the bank switching code in 2068 RAM, which in turn completes the call to the Home ROM.
SPECTRUM TS 2068
LABEL, ROM ROM LABEL,
NAME Addr Addr NAME
START 0000 0000 PLUCIN
ERROR-1 0008 0008
PRINT-A-1 0010 0010 WRCH
GET-CHAR 0018 0018
NEXT-CHAR 0020 0020
FP-CALC 0028 0028
BC-SPACES 0030 0030
* MASK-INT 0038 0030
004F 004F PHLAF
ERROR-2 0053 0053
ERROR-3 0055 0055 LE3
RESET 0066 0066
NO-RESET 0070 0070
CH-ADD+1 0074 0074 NEXTCH
TEMP-PTR1 0077 0077 NC-HL
TEMP-PTR2 0078 0078 TC-HL
SKIP-OVER 007D 007D
TOKENS 0095 0098 TOKENS
KEYTBL 0227 0245
KEY-SCAN 028E 02B0 K-SCAN
KEYBOARD 02BF 02E1 UPD-K
K-REPEAT 0310 0336
K-TEST 031E 035C K-BASE
K-DECODE 0333 0371 CHCODE
BEEPER 03B5 03F3 PARP
BEEP 03F8 0436 BEEP
PRINT-OUT 09F4 0500 SEND-TV
PO-BACK-1 0A23 053A P-LFT
PO-RIGHT 0A3D 0554 P-RT
PO-ENTER 0A4F 0566 P-NL
PO-COMMA 0A5F 0576
PO-QUEST 0A69 0580
PO-TV-2 0A6D 0584
0A9B 05B2 SET-AT
PO-ABLE 0AD9 05F0
PO-STORE 0ADC 05F3 STTVCU
PO-FETCH 0B03 061A LDTVCU
PO-ANY 0B24 063B
PO-ALL 0B7F 06B4
PO-ATTR 0BDB 0710 ATTBYT
PO-MSG 0C0A 073F PUTMES
PO-SAVE 0C3B 0776 PR-TV2
PO-SEARCH 0C41 077C
PO-SCR 0C55 0790 TVFUL?
REPORT-5 0C86 07C1 ERR5
TEMPS 0D4D 0888 R-ATTS
CLS 0D6B 08A6 K-CLS
CLS-LOWER 0D6E 08A9 CLLHS
CL-ALL 0DAF 08EA CLS
CL-SET 0DD9 0914 SET-CUR
CL-SC-ALL 0DFE 0939 SCRL
CL-LINE 0E44 097F CLS-B
CL-ATR 0E88 09C3
CL-ADDR 0E9B 09D6
COPY 0EAC 0A02 K-DUMP
COPY-BUFF 0ECD 0A23 DUMPPR
CLEAR-PRB 0EDF 0A35 CLPR
COPY-LINE [illegible][illegible][illegible]
EDITOR 0F2C 0A82 EDIT-K
ADD-CHAR 0F81 0AE7 INSA
ED-EDIT 0FA9 0B12
ED-DOWN 0FF3 0B59
ED-LEFT 1007 0B6B
[illegible] [illegible][illegible]
ED-DELETE 1015 0B7B DELSYM
ED-ENTER 1024 0B8A
ED-EDGE 1031 0B97
ED-UP 1059 0BBF
ED-SYMBOL 1076 0BDC
ED-ERROR 107F 0BE9
* CLEAR-SP 1097 0BFE DEL-K
KEY-INPUT 10A8 0C0E IN-K
ED-COPY 111D 0C83 ECHO
REMOVE-FP 11A7 0D0D DESLUG
NEW 11B7 0D1D K-NEW
START/NEW 11CB 0D31 INIT
RAM-SET 1219 0D7F NEW
MAIN-EXEC 12A2 0E28
MAIN-1 12A9 0E2F LED18
* MAIN-4 1303 0ED8 LED4
REPORT-MSG 1391 0F65
MAIN-ADD 155D 1158
CH-INFO 15AF 11AA CHINIT
INIT-STR 15C6 11C1 SMINIT
WAIT-KEY 15D4 11CF RDCH
INPUT-AD 15E6 11E1 INCH
OUT-CODE 15EF 11EA PUTDIC
PRINT-A-2 15F2 11ED SENDCH
CHAN-OPEN 1601 1230 SELECT
REPORT-O 160E 123D ERRO
CHAN-FLAG 1615 1248 SEL-HL
CHAN-K 1634 129A
CHAN-s 1642 12A8
CHAN-P 164D 12B3
ONE-SPACE 1652 12B8 INS1
MAKE-ROOM 1655 12BB INSERT
POINTERS 1664 12CA REMCSZ
LINE-ZERO 168F 131E
LINE-NO 1695 1324 GET-LN
RESERVE 169E 132D LCU2
SET-MIN 16B0 133F CLEL
SET-WORK 16BF 134E X-CALC
REC-EDIT 16D4 1363 X-T-HL
SET-STK 16C5 1354 RESET
SPECTRUM TS 2068
LABEL, ROM ROM LABEL,
NAME Addr Addr NAME
INDEXER 16DC 136B SEARCH
1374 SRCHSC
CLOSE 16E5 139F CLOSE
16EB 13A8 RSTSTR
CLOSE-2 1701 13BE CLCHAN
OPEN 1736 142A OPEN
OPEN-1 1756 145E
OPEN-2 175D 1465 OPCHAN
CAT-ETC. 1793 25C8 CAT
AUTO-LIST 1795 14E1 LIST
LLIST 17F5 1541 K-LLST
LIST 17F9 1545 K-LIST
1[illegible]60 15A[illegible] LPO
OUT-LINE 1855 15A1 PUI-SR?
OUT-LINE2 187D 15C9 PUT
NUMBER 18B6 1602
OUT-FLASH 18C1 160D FLASHA
OUT-CURS 18E1 162D PR-CUR
LN-FETCH 190F 165B NEXT-L
LN-STORE 191C 1668 DE-HL
OUT-SP2 1925 1671
LINE-ADDR 196E 16D6 FIND-L
CP-LINES 1980 16E8 CP-BC
1988 16F0 SUBLIN
EACH-STMT 198B 16F3 SUBLN1
NEXT-ONE 19B8 1720 RECLEN
DIFFER 19DD 1745
RECLAIM-1 19E5 174D DEL-DE
RECLAIM-2 19E8 1750 DELREC
E-LINE-NO 19BF 1768 LINENO
OUT-NUM-1 1A1B 1788 PUT-BC
OUT-NUM-2 1A28 1795 PU-LN
OUT-NUM-3 1A30 179D
LINE-SCAN 1B17 1A27 SYNTAX
STMT-LOOP 1B28 1A44 LS4
SEPARATOR 1B6F 1AB2
STMT-RET 1B76 1AB9
LINE-RUN 1B8A 1AD8 EXCUTE
LINE-NEW 1AEC 1B9E
REM 1BB2 1B00
LINE-END 1BB3 1B09
LINE-USE 1BBF 1B15
NEXT-LINE 1BD1 1B27
STMT-RET 1B76 1AB9 ENDSTT
CHECK-END 1Bee 1B44 END?
STMT-NEXT 1BF4 1B4A ENDTEM
CLASS-01 1C1F 1B82 TEM1
REPORT-2 1C2E 1B91 ERR2
VAL-FET-2 1C59 1BBC LT22
NEXT-2-NUM 1C79 1BDC DYADIC
CLASS-06 1C82 1BE5 TEM6
REPORT-C 1C8A 1BED SYNERR
CLASS-0A 1C8C 1BEF TEM10
PERMS 1C96 1BF9
FETCH-NUM 1CDE 1C49 OPTNO
USE-ZERO 1CE6 1C51 STK-0
STOP 1CEE 1C59 STOP
IF 1CF0 1C5B
FOR 1D03 1C78 FOR
LOOK-PROG 1D86 1D28 SKIP
NEXT 1DAB 1D55 NEXT
READ 1DEC 1D96 READ
DATA 1E27 1E82 DATA
RESTORE 1E42 1E9D
RANDOMIZE 1E4F 1ED4 RAND
REST-RUN 1E45 1ECA RESTBC
CONTINUE 1E5F 1EE4 CONT
GO TO 1E67 1EF1 JUMP
OUT 1E7A 1F04
POKE 1E80 1F0A
TWO-PARAM 1E85 1F0F
FIND-INT1 1E94 1F1E FIX-U1
FIND-INT2 1E99 1F23 FIX-U
REPORT-B 1E9F 1F29 ERRB
RUN 1EA1 1F2E
CLEAR 1EAC 1F36 CLEAR
CLEAR-RUN 1EAF 1F39 CLR-BC
GOSUB 1EED 1F99 GO-SUB
TEST-ROOM 1F05 1FBB CHK-SZ
REPORT-4 1F15 1FCF ERR4
RETURN 1F23 1FD4 RETURN
PAUSE 1F3A 1FEF PAUSE
BREAK-KEY 1F54 2009 BREAK
DEF FN 1F60 201D DEF
**** **** 2128 SOUND
UNSTACK-Z 1FC3 214F
LPRINT 1FC9 2155 K-LPR
PRINT 1FCD 2159 K-PRN
PRINT-2 1FDF 217E P-SEQ
PRINT-CR 1FF5 2194
PRINT-ITEM1 1FFC 219B
PR-STRING 203C 21DB
PR-END-Z 2045 21E4
PR-ST-END 2048 21E7 TERM?
PR-POS-1 204E 21ED
STR-ALTER 2070 220F STRITO
INPUT 2089 222B INPUT
IN-ITEM-1 20C1 226B I-SEQ
SPECTRUM TS 2068
LABEL, ROM ROM LABEL,
NAME Addr Addr NAME
IN-ASSIGN 2189 2363
REPORT-H 21D4 237E ERRH
IN-CHAN-K 21D6 2380 NOTKB?
CO-TEMP-1 21E1 238B
CO-TEMP-2 21E2 238C GR-COL
CO-TEMP-4 21FC 23A6 COLITM
CO-TEMP-7 2234 23DE COLOUR
CO-CHANGE 226C 2416
CO-TEMP-C 2273 241D HIFLSH
BORDER 2294 243E BORDER
**** **** 24D2 NEWDEV
**** **** 25B9 PASSEM
PIXEL-ADD 22AA 2603 SCRMBL
POINT 22CB 2624 F-PNT
PLOT 22DC 2635 PLOT
PLOT-SUB 22E5 263E PLOTBC
STK-TO-BC 2307 2660 GETXY
STK-TO-A 2314 266D
CIRCLE 2320 2679 CIRCLE
DRAW 2382 26DB DRAW
CD-PRMS1 247D 27D6
DRAW-LINE 24B7 2810 DRAW-L
SCANNING 24FB 2854 EXPRN
SYNTAX-Z 2530 2889 INTPT?
S-ATTR-s 2580 28D7 F-ATTR
S-U-PLUS 25AF 296D
S-LETTER 26C9 2A87
S-FN-SBRN 27BD 2B7B
S-SCREEN$-S 2535 288E F-SCRN
S-RND 25F8 29B6 RND
S-PI 2627 29E5 F-PI
S-INKEY$ 2634 29F2 F-INKEY
FN-SKPOVER 28AB 2C69 NXT-HL
LOOK-VARS 28B2 2C70 FIND-N
STK-F-ARG 2951 2D0F
STK-VAR 2996 2D54 GET-EL
SLICING 2A52 2E10 SLICER
STK-ST-0 2AB1 2E6F
STK-STO-1 2AB2 2E70 PSHSTR
STK-STORE 2AB6 2E74 PAEDCB
INT-EXP-1 2ACC 2E8A
DE,(DE+1) 2AEE 2EAC
GET-HL*DE 2AF4 2EB2
LET 2AFF 2EBD LET
L-ENTER 2BA6 2F64
L-ADD-$ 2BAF 2F6D
L-STRING 2BC6 2F84
L-FIRST 2BEA 2FA8
STK-FETCH 2BF1 2FAF POPSTR
DIM 2C02 2FC0 DIM
ALPHANUM 2C88 3046 ALNUM?
ALPHA 2C8D 304B ALPHA?
DEC-TO-FP 2C9B 3059 STKSUM
NUMERIC 2D1B 30D9 DIGIT?
STK-DIGIT 2D22 30E0
STACK-A 2D28 30E6 STK-A
STACK-BC 2D2B 30E9 STK-BC
INT-TO-FP 2D3B 30F9 ININT
E-TO-FP 2D4F 3100
INT-FETCH 2D7F 313D LDDE
P-INT-STO 2D8C 314A STDE-U
INT-STORE 2D8E 314C STDE-S
FP-TO-BC 2DA2 3160 FP2BC
LOG(2↑A) 2DC1 317F
FP-TO-A 2DD5 3193 FP2A
PRINT-FP 2DE3 31A1 OUTPUT
CA=10*A+C 2F8B 334A
PREP-ADD 2F9B 335A
FETCH-TWO 2FBA 3379 SUMSLD
SHIFT-FP 2Fdd 339C SHIFT
ADD-BACK 3004 33C3
SUBTRACT 300F 33CE SUB
addition 3014 33D3 ADD
HL=HL*DE 30A9 3468 MULT
PREP-M/D 30C0 347F
multiply 30CA 3489
REPORT-6 31AD 356C ERR6
division 31AF 356E DIVIDE
truncate 3214 35D3 TRUNC
RE-ST-TWO 3293 3052
multiply 30CA 3489 TIMES
RE-STACK 3297 3656 FLOAT
FP calculator start:
32C5 3684
CALCULATE 335B 371A CTRO
fp-calc-2 33A2 3761
TEST-5-SP 33a9 3768 ROOM?
STACK-NUM 33B4 3773 STK-M
MOVE-FP 33C0 377F RAMNO
STK-DATA 33C6 3785
SKIP-CONS 33F7 37B6
LOC-MEM 3406 37C5 ARRAY
get-mem-0 340F 37CF
stk-zero 341B 37DA
st-mem-0 342D 37EC
EXCHANGE 343C 37FB
series-06 346A 3829
NEGATE 346E 382D NEGATE
sgn 3492 3851
in 34A5 3864
SPECTRUM TS 2068 LABEL, ROM ROM LABEL, NAME Addr Addr NAME peek 34AC 386B usr-no 34B3 3872 usr-$ 34BC 38D7 TEST-ZERO 34E9 3904 TESTO GREATER-0 34F9 3914 NOT 3501 391C less-0 3506 3921 FP-0/1 350B 3926 STBOOL or 351B 3936 no-&-no 3524 393F str-&-no 352D 3948 no-l-eql 353B 3956 strs-add 359C 39B7 STK-PNTRS 35BF 39DD chr$ 35C9 39E4 val-&-val$ 35DE 39F9 str$ 361F 3A3A read-in 3645 3A60 code 3669 3A84 len 3674 3A8F dec-jr-nz 367A 3A95 JUMP 3686 3AA1 jump-true 368F 3AAA end-calc 369B 3AB6 n-mod-m 36A0 3ABB INTDIV **** **** 3AC5 LDMES int 36AF 3ACA INT EXP 36C4 3ADF EXP ln 3713 3B2E get-argt 3783 3B9E ANGLE cos 37AA 3BC5 COS sin 37B5 3BD0 SIN tan 37DA 3BF5 TAN atn 37E2 3BFD ATN asn 3833 3C4E ASN acs 3843 3C5E ACS sqr 384A 3C65 ROOT to-power 3851 3C6C TO-THE **** **** 3C89 SEPRMT (note:SEPRMT are tape msgs.) 'spare' 386E 3CDC 'EMPTY' charctr-set 3D00 3D00 CH-SET
The Spectrum does not support the following routines:
**** **** 17B5 AROS **** **** 17CF GETAL **** **** 17EA AR-LN **** **** 17FF AR-NXT **** **** 18C6 AAROS
TIMEX EXROM
SPECTRUM TS 2068 LABEL, ROM ROM LABEL, NAME Addr Addr NAME SA-BYTES 04C2 0068 W-TAPE SA-LEADER 04D8 007E SA-LOOP 04FE 00A4 SA-BIT-2 0511 00B7 SA-8-BITS 0525 00CB SA/LD-RET 053F 00E5 W-BORD REPORT-D 0552 00F8 LD-BYTES 0556 00FC R-TAPE LD-BREAK 056B 0111 LD-LEADER 0580 0126 LD-SYNC 058F 0135 LD-8-BITS 05CA 0170 LD-EDGE-2 05E3 0189 RD-BIT LD-EDGE-1 05E7 018D RD-EDGE LD-SAMPLE 05ED 0193 SAVE-ETC 0605 01AB SLVM REPORT-F 0642 0228 SA-NAME 064B 0231 SA-DATA 0652 0238 SA-V-OLD 0672 029A SA-V-NEW 0685 02A9 SA-SCR$ 06A0 02F2 SA-CODE 06C3 032E SA-LINE 0716 0447 SA-ALL 075A 04C9 LD-LOOK-H 0767 04D6 LD-NAME 07A6 053D VR-CONTROL 07CB 058F VERIFY LD-BLOCK 0802 05C6 LD-CONTROL 0808 05CC LOAD LD-DATA 082E 0606 LD-PROG 0873 0673 ME-CONTROL 08B6 06E5 MERGE ME-OLD-VP 08F9 0752 ME-ENTER 092C 0799 ME-ENT-1 093E 07CF ME-ENT-3 0958 0825 SA-CONTROL 0970 0851 SAVE SA-1-SEC 0991 089A
The balance of EXROM contains the Function Dispatcher , Bank Switching Code , and various other routines , which does not have counterparts in the Spectrum. A total of approximately 2K Bytes of EXROM is unused.
* see correction notes at beginning of article
Printing problems made parts of the Spectrum – TS 2068 very difficult to read, hopefully you will be able to use the table with this reprint:
page 4:
Spectrum TS2068 Spectrum TS2068
LABEL ROM ROM LABEL LABEL ROM ROM LABEL
Name addr addr Name Name addr addr Name
PRINT-A-1 0010 0010 WRCH COPY-BUFF 0ECD 0A23 K-DUMP
CLEAR-PRB 0EDF 0A35 CLPR
COPY-LINE 0EF4 0A4A PRSCAN
ED-RIGHT 100C 0B73
THE MAJORITY OF THE PAGES SEEMED TO HAVE THE ABOVE PRINT PROBLEMS, IF YOU HAVE A PROBLEM WRITE ME, AND I’LL SEND YOU THE LINES YOU CANNOT READ.