Przez lata pracy nad archiwizacją kaset zapisanych w różnych systemach (standardowych oraz turbo), w moje ręce trafiło wiele nośników zapisanych w systemie Turbo 2000 i jego odmianach, takich jak:
- Turbo KSO 2000
- Turbo 2000F
- Turbo 2001
To repozytorium będzie stopniowo się rozrastać — w miarę odnajdywania i porządkowania skryptów oraz narzędzi, które tworzyłem na własne potrzeby podczas pracy z kasetami. Początkowo były to narzędzia pisane z myślą o prywatnym użytku, jednak uznałem, że skoro mogą się przydać także innym — warto się nimi podzielić.
Jednym z dostępnych narzędzi jest extract_t2k
– prosty skrypt w Pythonie umożliwiający konwersję pliku .hex
, zawierającego bloki typu PWMD (wygenerowanego np. przez a8cas-util), do postaci binarnej.
- Obsługuje dane zapisane w formacie Turbo 2000 / 2001 / 2000F / KSO.
- Odczytuje rekordy danych oraz blok nagłówkowy (nazwa).
- Tworzy binarny plik wynikowy, który może być używany bezpośrednio (np. ładowany przez emulator).
- Plik
.hex
musi zawierać poprawny zestaw rekordów danych, zgodnych z natywnym formatem systemu Turbo 2000. - Narzędzie nie sprawdza poprawności danych – zakłada, że dostarczony plik zawiera zgodne i poprawne rekordy.
Dokładny opis formatu Turbo 2000/KSO/2001 można znaleźć tutaj: Atariki: KSO Turbo 2000 – Format standardowy
python3 extract_t2k.py input_file.hex
Poniżej znajduje się przykładowy przebieg konwersji i sprawdzenia pliku z kasety Turbo 2000:
$ ./a8cas-util.pl conv -t turbo2000 hobby_tronic_90.wav hobby_tronic.hex
Starting ecasound... started.
SUMMARY: Data blocks: 28 (0 Errors).
86 HEX blocks stored in file hobby_tronic.hex.
$ ./extract_t2k.py hobby_tronic.hex
nazwa pliku T2K: "HOBBY TRO."
Przetwarzam blok nr 001 o długości 3072 bajtów.
Przetwarzam blok nr 002 o długości 3072 bajtów.
Przetwarzam blok nr 003 o długości 3072 bajtów.
Przetwarzam blok nr 004 o długości 3072 bajtów.
Przetwarzam blok nr 005 o długości 3072 bajtów.
Przetwarzam blok nr 006 o długości 3072 bajtów.
Przetwarzam blok nr 007 o długości 3072 bajtów.
Przetwarzam blok nr 008 o długości 3072 bajtów.
Przetwarzam blok nr 009 o długości 3072 bajtów.
Przetwarzam blok nr 010 o długości 3072 bajtów.
Przetwarzam blok nr 011 o długości 3072 bajtów.
Przetwarzam blok nr 012 o długości 3072 bajtów.
Przetwarzam blok nr 013 o długości 3072 bajtów.
Przetwarzam blok nr 014 o długości 3072 bajtów.
Przetwarzam blok nr 015 o długości 3072 bajtów.
Przetwarzam blok nr 016 o długości 3072 bajtów.
Przetwarzam blok nr 017 o długości 3072 bajtów.
Przetwarzam blok nr 018 o długości 3072 bajtów.
Przetwarzam blok nr 019 o długości 3072 bajtów.
Przetwarzam blok nr 020 o długości 3072 bajtów.
Przetwarzam blok nr 021 o długości 3072 bajtów.
Przetwarzam blok nr 022 o długości 3072 bajtów.
Przetwarzam blok nr 023 o długości 3072 bajtów.
Przetwarzam blok nr 024 o długości 3072 bajtów.
Przetwarzam blok nr 025 o długości 3072 bajtów.
Przetwarzam blok nr 026 o długości 3072 bajtów.
Przetwarzam blok nr 027 o długości 0268 bajtów.
Operacja zakończona, plik 'hobby_tronic.xex' o długości 80140 bajtów zapisano.
Po konwersji możemy podejrzeć strukturę wygenerowanego pliku za pomocą ulubionego narzędzia, w moim przypadku jest to chkxex który kiedyś napisałem jako pomoc przy analizowaniu plików z Turbo Copy 3/4. chkxex
jest częścią pakietu TCX Tools.
$ chkxex hobby_tronic.xex
Input file is hobby_tronic.xex and the file size is 80140 bytes.
Header is: $ffff
block 001: $014f-$0165 ($0017)
block 002: $02e2-$02e3 ($0002) ---> INIT $014f
Header is: $ffff
block 003: $0180-$0195 ($0016)
Header is: $ffff
block 004: $0480-$061d ($019e)
Header is: $ffff
block 005: $0165-$0179 ($0015)
block 006: $02e2-$02e3 ($0002) ---> INIT $0165
Header is: $ffff
block 007: $9a77-$bbff ($2189)
Header is: $ffff
block 008: $017e-$017f ($0002)
block 009: $02e2-$02e3 ($0002) ---> INIT $0480
Header is: $ffff
block 010: $9d59-$bbff ($1ea7)
Header is: $ffff
block 011: $017e-$017f ($0002)
block 012: $02e2-$02e3 ($0002) ---> INIT $0480
Header is: $ffff
block 013: $5ccc-$bbff ($5f34)
Header is: $ffff
block 014: $017e-$017f ($0002)
block 015: $02e2-$02e3 ($0002) ---> INIT $0480
Header is: $ffff
block 016: $8ea0-$bbff ($2d60)
Header is: $ffff
block 017: $017e-$017f ($0002)
block 018: $02e2-$02e3 ($0002) ---> INIT $0480
Header is: $ffff
block 019: $aada-$bbff ($1126)
Header is: $ffff
block 020: $017e-$017f ($0002)
block 021: $02e2-$02e3 ($0002) ---> INIT $0480
Header is: $ffff
block 022: $8d2b-$bbff ($2ed5)
Header is: $ffff
block 023: $017e-$017f ($0002)
block 024: $02e2-$02e3 ($0002) ---> INIT $0480
Header is: $ffff
block 025: $9243-$bbff ($29bd)
Header is: $ffff
block 026: $017e-$017f ($0002)
block 027: $02e0-$02e1 ($0002) ---> RUN $0480
File hobby_tronic.xex is OK!