Nie mam doświadczeń w programowaniu w Pascal, poza podstawową wiedzą zdobytą na początku lat 90tych.
W tym celu próbowałem użyć darmowego kompilatora Free Pascal IDE, jednak zatrzymał się na niezrozumiałej dla niego instrukcji asm , która ma na celu zamianę bajtów hi - lo rejestru.
function IntelWord(Wrd:word):word;
asm
xchg al,ah
end;
Teraz zaczęło się pod górkę. Cały program służy do “rozebrania” pliku muzycznego na .ini zawierajacy nagłówek i .bin z danymi.
Kompiler wyrzuca 11 błędów dotyczących edytowanego pliku. Czy on jest mu potrzebny do samego procesu kompilacji? Ten plik znajduje się w roboczym folderze.
Czyli jak dobrze rozumiem, posiadasz wersję programu skompilowaną kompilatorem Borlanda i tam wyjątek nie występuje? Jaką wersją Free Pascala rekompilujesz program? Próbowałeś debugować?
Oryginalny program został napisany w 2001 i jego źródła są wolne do udostępniania. Kompilator jest z 2012. Nie wiem w czym był kompilowany i czy plik .exe powstał dokładnie na bazie tej wersji.
W każdym razie AYSplittr zrekompilowany chodzi bezbłędnie, a AYMaker nie. Spróbuję przetworzyć w nich kilkanaście plików, aby mniej więcej dojść do tego, w jakich okolicznościach wyjątek występuje.
Mam w planie rozwinięcie formatu, który oryginalnie został napisany dla Motorola 68k, stąd byte order jest pod niego. W tej formie został też przeniesiony na PC. Tak musi zostać, aby pliki chodziły na starszych, nierozwijanych już odtwarzaczach.
Żeby było ciekawiej, dane w plikach .bin są dla procesora Z80, czyli bliższego x86.
Update formatu ma dotyczyć wykorzystania nieużywanych obecnie bajtów do innych celów zachowując wsteczną kompatybilność.
W kilku miejscach w programie może wystąpić przekroczenie zakresu wartości, gdyż funkcja IntelWord zwraca wartość typu Word która jest przypisawana do zmiennych typu SmallInt. Użyj dyrektywy {$R-} albo popraw typy.