Page Byte Address Length Description
0 0 0000 4
ROM reset
0 4 0004 6
Data block at 0004
0 10 000A 8
prepare to execute page_found
0 18 0012 13
clear inhibit_display and set exit_pointer to pointer02
0 31 001F 25
Data block at 001F
0 56 0038 10
IM 1 interrupt service routine
0 66 0042 36
Data block at 0042
0 102 0066 3
NMI vector
0 105 0069 529
NMI service routine
2 122 027A 6
Data block at 027A
2 128 0280 11
Hamming 8/4 decode the byte at address in HL and return it in B
2 139 028B 7
reads a byte from the decoder's SRAM but doesn't retain it. This sets an internal 4 bit counter to bits 6-9 of the read address
2 146 0292 11
get the magazine number from the Magazine Row Address Group
2 157 029D 26
get the packet address from the Magazine Row Address Group
2 183 02B7 19
copy packet to row 29 of page receive buffer
2 202 02CA 94
initialization routine
3 40 0328 274
initialize BASIC system variables in a similar way to the BASIC ROM 'NEW' routine and initialize own variables in printer buffer.
4 58 043A 3
jump to NMI service routine. (Copied to NMI_JUMP)
4 61 043D 20
initialise pointers for 48k systems
4 81 0451 28
pointer table (for 48k)
4 109 046D 20
initialise pointers for 16k systems
4 129 0481 28
pointer table (for 16k)
4 157 049D 21
BASIC channel information initialization data
4 178 04B2 14
BASIC stream addresses initialization data
4 192 04C0 383
Main menu page data (with teletext control codes)
6 63 063F 1
Unused
6 64 0640 102
display the main menu and wait for enter key to be pressed
6 166 06A6 149
print character to screen
7 59 073B 17
print 4 pixel rows of character bitmap over 8 pixel rows of screen (double height)
7 76 074C 26
write 4 pixel rows of double height character data over 8 pixel rows at column that is a multiple of 4
7 102 0766 26
write 4 pixel rows of double height character data over 8 pixel rows at column that is 1 greater than a multiple of 4
7 128 0780 26
write 4 pixel rows of double height character data over 8 pixel rows at column that is 2 greater than a multiple of 4
7 154 079A 26
write 4 pixel rows of double height character data over 8 pixel rows at column that is 3 greater than a multiple of 4
7 180 07B4 17
print 8 pixel rows of font data (a normal height character)
7 197 07C5 14
write character data at column that is a multiple of 4
7 211 07D3 31
write character data at column that is 1 greater than a multiple of 4
7 242 07F2 29
write character data at column that is 2 greater than a multiple of 4
8 15 080F 12
write character data at column that is 3 greater than a multiple of 4
8 27 081B 50
calculate the address in screen RAM of the second byte of character row in A
8 77 084D 99
set screen attributes corresponding to screen address in character screen address variable to value in temp_attr
8 176 08B0 20
clear screen
8 196 08C4 27
clear page display buffer to spaces
8 223 08DF 24
clear all rows except header in page receive buffer
8 247 08F7 161
decode row
9 152 0998 18
alphanumeric colour control code
9 170 09AA 12
handle normal size control code
9 182 09B6 19
handle double height control code
9 201 09C9 34
handle a mosaics colour code
9 235 09EB 16
handle conceal code
9 251 09FB 7
handle contiguous mosaics cotrol code
10 2 0A02 21
handle separated mosaics cotrol code
10 23 0A17 11
clear paper colour bits of temp_attr
10 34 0A22 21
copy ink colour bits of temp_attr to paper colour bits
10 55 0A37 21
handle hold mosaics code
10 76 0A4C 6
handle release mosacis code
10 82 0A52 102
display character
10 184 0AB8 28
translate an alphanumeric colour code to spectrum attribute colour
10 212 0AD4 8
colour translation table
10 220 0ADC 30
set character_pointer to start of current row in page display buffer
10 250 0AFA 76
wait for page_ready_flag to decode rows, and check for key presses
11 70 0B46 26
decode 24 rows
11 96 0B60 768
alphanumeric character set font data
14 96 0E60 105
initialize font data for contiguous and separated mosaic character sets
14 201 0EC9 52
generate font data for contiguous mosaic with the character code in B at the address in HL
14 253 0EFD 9
Copy blast through alphanumerics font data
15 6 0F06 11
copy 32 contiguous mosaic characters from address in HL to address in DE, separating the columns
15 17 0F11 7
write bitmap in D to three rows of font data
15 24 0F18 7
set right half of mosaic bits
15 31 0F1F 21
get keypress
15 52 0F34 70
scan the keyboard
15 122 0F7A 40
keyboard look up table
15 162 0FA2 16
detect if any key is pressed
15 178 0FB2 73
handle a keypress while in teletext mode
15 251 0FFB 14
toggle bright flag
16 9 1009 43
this is the relocatable exit to BASIC routine which is copied to RAM so that it can be run with the ROM paged out. 7 bytes of the following routine are also copied.
16 52 1034 4
break out of printer loop gracefully
16 56 1038 100
printer routine for Sinclair ZX Printer or Alphacom 32
16 156 109C 79
get valid page number and display digits in row 0
16 235 10EB 5
get valid page number then clear the page buffer
16 240 10F0 101
get valid page subcode then clear the page buffer
17 85 1155 14
wait for a keypress in the range 0-9
17 99 1163 97
channel selection and tuning display
17 196 11C4 4
page hold indicator string
17 200 11C8 88
pressed H to hold page
18 32 1220 11
toggle reveal
18 43 122B 24
copy row data to header row
18 67 1243 20
display header row
18 87 1257 32
copy received page data into page display buffer
18 119 1277 28
copy page number display to buffer01 and clear header row to spaces
18 147 1293 19
copy buffer01 into page number display
18 166 12A6 11
pagename string which gets copied to RAM_pagename_string
18 177 12B1 225
this is the relocatable save page routine which is copied to RAM so that it can be run with the ROM paged out. The following 69 bytes are also copied
19 146 1392 2
Unused
19 148 1394 32
BASIC save instruction string (tokens shown in square brackets)
19 180 13B4 205
create 256 byte look up table of Hamming 8/4 decoded bytes
20 129 1481 33
read the four data bits from hamming coded byte into address in HL
20 162 14A2 8
values to XOR with byte to correct hamming errors
20 170 14AA 4
write $FF
20 174 14AE 13
correct a single bit error at bit position in C
20 187 14BB 26
relocatable "warm start" from BASIC routine
20 213 14D5 27
clear page header to spaces
20 240 14F0 34
copy string in HL to page header
21 18 1512 10
pause for 3 seconds
21 28 151C 22
wait for a keypress in the range 0-9 or A-F
21 50 1532 6
all telesoftware blocks downloaded
21 56 1538 74
determine what to do with telesoftware download based on the footer
21 130 1582 32
setup VARS, and E-LINE and prepare to execute STOP
21 162 15A2 43
setup VARS, E-LINE, and OLDPPC, and prepare to execute CONTINUE
21 205 15CD 28
setup VARS and E-LINE
21 233 15E9 14
relocate and execute jump to machine code routine
21 247 15F7 8
relocatable page out ROM and execute machine code routine
21 255 15FF 1
Unused
22 0 1600 25
prepare to execute STOP with no variables
22 25 1619 10
load next four low nibbles into address in HL
22 35 1623 15
relocate and execute initialize BASIC routine
22 50 1632 160
relocatable initialize BASIC routine. This routine is copied into the printer buffer to run so that this ROM can be paged out.
22 210 16D2 1
Data block at 16D2
22 211 16D3 54
Data block at 16D3
23 9 1709 1
Unused
23 10 170A 51
Routine at 170A
23 61 173D 19
Routine at 173D
23 80 1750 6
Routine at 1750
23 86 1756 14
Routine at 1756
23 100 1764 29
Routine at 1764
23 129 1781 2
Unused
23 131 1783 21
Routine at 1783
23 152 1798 23
Routine at 1798
23 175 17AF 11
Routine at 17AF
23 186 17BA 5
Routine at 17BA
23 191 17BF 6
Routine at 17BF
23 197 17C5 149
telesoftware messages
24 90 185A 147
telesoftware page checksum
24 237 18ED 75
download data from page into memory specified in nibbles at row 23, column 8
25 56 1938 28
see if there are undownloaded blocks remaining
25 84 1954 18
read low nibble of four bytes from address in DE to word at address in HL
25 102 1966 23
copy up to 16 bytes from address in DE to row 0 in page display buffer
25 125 197D 15
Routine at 197D
25 140 198C 48
Routine at 198C
25 188 19BC 55
Routine at 19BC
25 243 19F3 56
Routine at 19F3
26 43 1A2B 51
Routine at 1A2B
26 94 1A5E 48
Routine at 1A5E
26 142 1A8E 15
Data block at 1A8E
26 157 1A9D 30
Routine at 1A9D
26 187 1ABB 6
Routine at 1ABB
26 193 1AC1 55
Routine at 1AC1
26 248 1AF8 41
Routine at 1AF8
27 33 1B21 25
convert hex digit in A to integer in B or $FF if invalid
27 58 1B3A 5
Routine at 1B3A
27 63 1B3F 14
Routine at 1B3F
27 77 1B4D 49
Routine at 1B4D
27 126 1B7E 6
Routine at 1B7E
27 132 1B84 6
Routine at 1B84
27 138 1B8A 51
wait up to 2 minutes for page to load (or enter key pressed)
27 189 1BBD 27
clear 16 characters of header to spaces
27 216 1BD8 57
start telesoftware
28 17 1C11 8
Data block at 1C11
28 25 1C19 6
Routine at 1C19
28 31 1C1F 3
Routine at 1C1F
28 34 1C22 100
telesoftware main loop
28 134 1C86 21
Routine at 1C86
28 155 1C9B 122
telesoftware downloader messages
29 21 1D15 81
check row 23 of page for telesoftware footer
29 102 1D66 55
reposition the page receive buffer at $4840 and the page display buffer at $5000 (within screen RAM)
29 157 1D9D 14
flash border to colour in A for 300ms
29 171 1DAB 7
Data block at 1DAB
29 178 1DB2 5
Routine at 1DB2
29 183 1DB7 5
Routine at 1DB7
29 188 1DBC 5
Routine at 1DBC
29 193 1DC1 3
Routine at 1DC1
29 196 1DC4 87
Routine at 1DC4
30 27 1E1B 28
Routine at 1E1B
30 55 1E37 8
Routine at 1E37
30 63 1E3F 3
Routine at 1E3F
30 66 1E42 49
Routine at 1E42
30 115 1E73 166
telesoftware error messages
31 25 1F19 6
Routine at 1F19
31 31 1F1F 9
Routine at 1F1F
31 40 1F28 24
Routine at 1F28
31 64 1F40 16
Routine at 1F40
31 80 1F50 23
display telesoftware error message and jump into page decode loop
31 103 1F67 24
Routine at 1F67
31 127 1F7F 14
Routine at 1F7F
31 141 1F8D 11
get a hex keypress
31 152 1F98 79
input page number for telesoftware page search
31 231 1FE7 7
Data block at 1FE7
31 238 1FEE 18
ROM authors
91 0 5B00 1
colour attributes to write to screen memory
91 1 5B01 2
address to jump to after running relocated save_routine
91 3 5B03 2
screen address of character
91 7 5B07 1
flag01
91 8 5B08 1
separated_mosaics_flag
91 9 5B09 1
double_height_flag
91 10 5B0A 1
row_has_double_flag
91 11 5B0B 1
column_offset
91 12 5B0C 1
character_code
91 13 5B0D 2
address of character in page display buffer
91 15 5B0F 1
hold_mosaic_character
91 16 5B10 1
ignore next row flag
91 17 5B11 1
row_number
91 18 5B12 1
hold_mosaics_flag
91 19 5B13 1
disable decoding of teletext packets
91 20 5B14 1
search for packets containing page rows
91 21 5B15 2
pointer to packet data in decoder RAM
91 23 5B17 1
magazine number to search for (0-7)
91 24 5B18 1
second digit of page number to search for (0-F)
91 25 5B19 1
third digit of page number to search for (0-F)
91 26 5B1A 1
control register variable
91 27 5B1B 1
variable containing the bright bit attribute
91 28 5B1C 2
current_attr_address
91 30 5B1E 1
page_ready_flag
91 31 5B1F 1
the state of separated_mosaics_flag at last mosaic character with bit 5 set
91 32 5B20 1
conceal_flag
91 33 5B21 1
reveal_flag
91 34 5B22 8
System variable at 5B22
91 42 5B2A 1
parity check used by init_hamming_table
91 43 5B2B 1
parity check used by init_hamming_table
91 44 5B2C 1
parity check used by init_hamming_table
91 45 5B2D 1
parity check used by init_hamming_table
91 46 5B2E 1
used by init_hamming_table
91 47 5B2F 11
System variable at 5B2F
91 58 5B3A 1
inhibit_display
91 59 5B3B 1
System variable at 5B3B
91 60 5B3C 1
System variable at 5B3C
91 61 5B3D 2
System variable at 5B3D
91 63 5B3F 11
copy of pagename_string
91 80 5B50 3
jump through RAM to allow NMI routine to be altered
91 83 5B53 1
variable containing colour attributes
91 85 5B55 1
System variable at 5B55
91 86 5B56 1
subcode search flag
91 87 5B57 1
fourth digit of page subcode
91 88 5B58 1
third digit of page subcode
91 89 5B59 1
second digit of page subcode
91 90 5B5A 1
first digit of page subcode
91 97 5B61 2
address to be read at the end of NMI_ISR to set the line counter in gate array
91 99 5B63 2
System variable at 5B63
91 101 5B65 2
System variable at 5B65
91 103 5B67 2
System variable at 5B67
91 105 5B69 2
System variable at 5B69
91 107 5B6B 2
System variable at 5B6B
91 109 5B6D 2
pointer to page display buffer
91 111 5B6F 2
pointer to page receive buffer
91 113 5B71 2
pointer to contiguous mosaics font data
91 115 5B73 2
pointer to 256 byte look up table for Hamming 8/4 decoding
91 117 5B75 2
pointer to font data for blast through alphanumerics in contiguous mosaics character set
91 119 5B77 2
pointer to font data for blast through alphanumerics in separated mosaics character set
91 121 5B79 2
pointer to warm start routine in RAM
91 123 5B7B 2
pointer to exit to BASIC routine in RAM
91 125 5B7D 2
pointer to copy of save_routine in main RAM
91 127 5B7F 2
System variable at 5B7F
91 129 5B81 2
System variable at 5B81
91 131 5B83 1
System variable at 5B83
91 133 5B85 1
System variable at 5B85
91 135 5B87 1
System variable at 5B87
91 137 5B89 24
columns 12-35 of first telesoftware block received
91 165 5BA5 2
length of BASIC program
91 167 5BA7 2
length of basic variables (including terminator)
91 169 5BA9 2
length of immediate BASIC command (including newline and terminator)
91 171 5BAB 2
program line or execution address
91 185 5BB9 1
System variable at 5BB9
91 186 5BBA 1
System variable at 5BBA
91 189 5BBD 2
System variable at 5BBD
91 191 5BBF 2
System variable at 5BBF
91 203 5BCB 1
System variable at 5BCB
91 204 5BCC 3
jump to warm-start routine
91 212 5BD4 1
System variable at 5BD4
91 213 5BD5 2
pointer to telesoftware routine
91 215 5BD7 2
pointer to printer routine
91 238 5BEE 2
Data block at 5BEE
91 240 5BF0 2
Data block at 5BF0
91 242 5BF2 11
temporary stack space
91 253 5BFD 2
System variable at 5BFD