Skip to content

Commit ab949a5

Browse files
committed
Update msxtape.py
1 parent d08638d commit ab949a5

File tree

1 file changed

+19
-20
lines changed

1 file changed

+19
-20
lines changed

src/msxtape.py

Lines changed: 19 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -182,25 +182,26 @@ def is_cas_header(lst, idx):
182182
BASIC = 0xd3
183183
ASCII = 0xea
184184
BINARY = 0xd0
185-
BLOCK_LEN = 10
185+
BLOCK_HEADER_LEN = 10
186186
while idx < len(cas_data):
187187
# 10 byte block header
188-
if reps(cas_data, idx, BLOCK_LEN) < BLOCK_LEN:
188+
if reps(cas_data, idx, BLOCK_HEADER_LEN) < BLOCK_HEADER_LEN:
189189
s = 'Unexpected block header:'
190-
for i in range(min(BLOCK_LEN, len(cas_data) - idx)):
190+
for i in range(min(BLOCK_HEADER_LEN, len(cas_data) - idx)):
191191
s = s + ' ' + hex(cas_data[idx + i])
192-
s = s + ' at ' + hex(idx)
192+
s = s + ' at ' + hex(idx) + ' (' + str(idx) + ')'
193193
print(s)
194194
return
195195
block_type = cas_data[idx]
196-
idx = idx + BLOCK_LEN
196+
idx = idx + BLOCK_HEADER_LEN
197197
# 6 bytes file name
198198
FNAME_LEN = 6
199199
block_fname = ''
200200
for i in range(FNAME_LEN):
201201
block_fname = block_fname + chr(cas_data[idx + i])
202202
idx = idx + FNAME_LEN
203203
block_data = []
204+
start_address = end_address = run_address = -1
204205
if block_type == BASIC:
205206
BASIC_END_TOK = 7
206207
BASIC_END_LEN = 7
@@ -231,34 +232,28 @@ def is_cas_header(lst, idx):
231232
print("block", cas_name, "doesn't have a valid CAS header")
232233
return
233234
idx = idx + len(CAS_HEADER)
234-
begin_address = cas_data[idx] + cas_data[idx + 1] * 256
235-
print('begin_address =', hex(begin_address))
235+
start_address = cas_data[idx] + cas_data[idx + 1] * 256
236236
end_address = cas_data[idx + 2] + cas_data[idx + 3] * 256
237-
print('end_address =', hex(end_address))
238237
run_address = cas_data[idx + 4] + cas_data[idx + 5] * 256
239-
print('run_address =', hex(run_address))
240-
code_len = end_address - begin_address
241-
print('code_len =', code_len)
238+
code_len = end_address - start_address + 1
242239
idx = idx + 6
243240
if idx + code_len > len(cas_data):
244241
print('unexpected end in binary block data')
245242
return
246-
247-
i = 0
248-
while idx + i < len(cas_data):
249-
block_data.append(cas_data[idx + i])
250-
i = i + 1
251-
if i == code_len:
243+
while idx < len(cas_data):
244+
if is_cas_header(cas_data, idx):
252245
break
253-
idx = idx + i
246+
block_data.append(cas_data[idx])
247+
idx = idx + 1
254248
else:
255249
return
256250
# custom block?
257251
#block_data.append(cas_data[idx])
258252
# idx = idx + 1
259253

260-
self.blocks.append([block_type, block_fname, block_data])
254+
self.blocks.append([block_type, block_fname, block_data, start_address, end_address, run_address])
261255
s = ''
256+
262257
if block_type == BASIC:
263258
s = 'basic '
264259
elif block_type == ASCII:
@@ -271,7 +266,11 @@ def is_cas_header(lst, idx):
271266
s = s + block_fname
272267
s = s + ' ' + str(len(block_data))
273268
print(s)
274-
269+
if block_type == BINARY:
270+
print('code_len ', code_len)
271+
print('start_address', hex(start_address))
272+
print('end_address ', hex(end_address))
273+
print('run_address ', hex(run_address))
275274

276275

277276
def main():

0 commit comments

Comments
 (0)