@@ -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
277276def main ():
0 commit comments