Skip to content

Commit

Permalink
Add support to tap2sna.py for tail pulses in PZX DATA blocks
Browse files Browse the repository at this point in the history
  • Loading branch information
skoolkid committed Jun 22, 2024
1 parent 74672dc commit b6d074b
Show file tree
Hide file tree
Showing 4 changed files with 30 additions and 19 deletions.
8 changes: 8 additions & 0 deletions skoolkit/loadtracer.py
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,14 @@ def get_edges(blocks, first_edge, polarity, analyse=False):
indexes.append((len(edges) - 1, len(edges) - 1))
data_blocks.append(())

# Tail pulse
if timings.tail:
if analyse:
ear = (len(edges) - 1) % 2
print(f'{tstates:>10} {ear:>3} Tail pulse ({timings.tail} T-states)')
tstates += timings.tail
edges.append(tstates)

# Pause
if i + 1 < len(blocks) and timings.pause:
if analyse:
Expand Down
5 changes: 3 additions & 2 deletions skoolkit/tape.py
Original file line number Diff line number Diff line change
Expand Up @@ -238,7 +238,7 @@ def __init__(self, number, tape_data, timings=None, block_id=None, name=None, in
self.block_data = block_data

class TapeBlockTimings:
def __init__(self, pilot_len=0, pilot=0, sync=(), zero=0, one=0, pause=0, used_bits=8, pulses=(), data=False, error=None):
def __init__(self, pilot_len=0, pilot=0, sync=(), zero=0, one=0, pause=0, used_bits=8, pulses=(), data=False, tail=0, error=None):
self.pilot_len = pilot_len
self.pilot = pilot
self.sync = sync
Expand All @@ -248,6 +248,7 @@ def __init__(self, pilot_len=0, pilot=0, sync=(), zero=0, one=0, pause=0, used_b
self.used_bits = used_bits
self.pulses = pulses
self.data = data
self.tail = tail
self.error = error

def _get_tape_block_timings(first_byte, pause=3500000):
Expand Down Expand Up @@ -354,7 +355,7 @@ def _get_pzx_block(data, i, block_num, prev_rom_pilot):
'1-bit pulse sequence: {} (T-states)'.format(', '.join(str(p) for p in s1)),
f'Tail pulse: {tail} T-states'
))
timings = TapeBlockTimings(zero=s0[0], one=s1[0], used_bits=used_bits)
timings = TapeBlockTimings(zero=s0[0], one=s1[0], used_bits=used_bits, tail=tail)
elif block_id == 'PAUS':
name = 'Pause'
duration = get_dword(data, i + 8)
Expand Down
2 changes: 1 addition & 1 deletion tests/slow_test_sim_load.py
Original file line number Diff line number Diff line change
Expand Up @@ -275,7 +275,7 @@ def test_turbo_loader_pzx(self):
pzx.add_puls(1)
pzx.add_data(create_data_block(code))
pzx.add_puls(1)
pzx.add_data(create_data_block(code2), (600, 600), (1200, 1200))
pzx.add_data(create_data_block(code2), (600, 600), (1200, 1200), tail=0)
pzxfile = self.write_bin_file(pzx.data, suffix='.pzx')

exp_data = (
Expand Down
34 changes: 18 additions & 16 deletions tests/test_tap2sna.py
Original file line number Diff line number Diff line change
Expand Up @@ -629,9 +629,9 @@ def test_option_tape_analysis_with_pzx_file(self):
pzx.add_data((6, 7, 8, 9, 10))
pzx.add_paus()
pzx.add_puls(pulse_counts=((5000, 2168), (1, 430), (1, 870)))
pzx.add_data((11, 12, 13, 14, 15), (570, 570), (1050, 1050), used_bits=5)
pzx.add_data((11, 12, 13, 14, 15), (570, 570), (1050, 1050), tail=0, used_bits=5)
pzx.add_puls(pulse_counts=((2000, 1234), (2, 500), (1, 1000)))
pzx.add_data((16, 17, 18), (570, 600), (1050, 1100))
pzx.add_data((16, 17, 18), (570, 600), (1050, 1100), tail=0)
pzxfile = self.write_bin_file(pzx.data, suffix='.pzx')
output, error = self.run_tap2sna(f'--tape-analysis {pzxfile}', catch_exit=0)
self.assertEqual(error, '')
Expand All @@ -641,20 +641,22 @@ def test_option_tape_analysis_with_pzx_file(self):
17480584 1 Pulse (667 T-states)
17481251 0 Pulse (735 T-states)
17481986 1 Data (5 bytes; 855/1710 T-states)
17562356 1 Pause (3500000 T-states)
21062356 1 Tone (3223 x 2168 T-states)
28049820 0 Pulse (667 T-states)
28050487 1 Pulse (735 T-states)
28051222 0 Data (5 bytes; 855/1710 T-states)
28136722 0 Pause (3500000 T-states)
31636722 0 Tone (5000 x 2168 T-states)
42476722 0 Pulse (430 T-states)
42477152 1 Pulse (870 T-states)
42478022 0 Data (4 bytes + 5 bits; 570/1050 T-states)
42531722 0 Tone (2000 x 1234 T-states)
44999722 0 Tone (2 x 500 T-states)
45000722 0 Pulse (1000 T-states)
45001722 1 Data (3 bytes; 570/1050 T-states)
17562356 1 Tail pulse (945 T-states)
17563301 0 Pause (3500000 T-states)
21063301 0 Tone (3223 x 2168 T-states)
28050765 1 Pulse (667 T-states)
28051432 0 Pulse (735 T-states)
28052167 1 Data (5 bytes; 855/1710 T-states)
28137667 1 Tail pulse (945 T-states)
28138612 0 Pause (3500000 T-states)
31638612 0 Tone (5000 x 2168 T-states)
42478612 0 Pulse (430 T-states)
42479042 1 Pulse (870 T-states)
42479912 0 Data (4 bytes + 5 bits; 570/1050 T-states)
42533612 0 Tone (2000 x 1234 T-states)
45001612 0 Tone (2 x 500 T-states)
45002612 0 Pulse (1000 T-states)
45003612 1 Data (3 bytes; 570/1050 T-states)
"""
self.assertEqual(dedent(exp_output).lstrip(), output)

Expand Down

0 comments on commit b6d074b

Please sign in to comment.