Turbo BASIC XL Compiler

From Atariki

(Różnice między wersjami)
Jump to: navigation, search
Wersja z dnia 08:09, 15 wrz 2006
Sikor (Dyskusja | wkład)
(Rozpoczęto opis błędów kompilacji. Proszę o wpisywanie kolejnych, o ile są znane.)
← Previous diff
Aktualna wersja
KMK (Dyskusja | wkład)

Linia 4: Linia 4:
W ramach ciekawostki: kompilator Turbo BASIC-a XL został napisany w Turbo BASIC-u XL. W ramach ciekawostki: kompilator Turbo BASIC-a XL został napisany w Turbo BASIC-u XL.
-== Błędy kompilacji ==+== Problemy z kompilacją ==
-Poniżej znajduje się lista zauważonych błędów kompilacji i linkowania (niewłaściwe działanie programów skompilowanych, które bezbłędnie działają w czystym Turbo Basicu XL). Poniższa lista będzie stale rozszeżana, wraz z wzrastającą wiedzą na temat wykrytych błędów. W miarę możliwości będą też podawane alternatywne wyjścia z sytuacji, gdy istnieje konieczność kompilacji programu.+Poniżej znajduje się lista zauważonych problemów związanych z niewłaściwym działaniem skompilowanych programów, spowodowanych błędami kompilatora, linkera i/lub (najczęściej) bibliotek. Poniższa lista będzie stale rozszerzana, wraz z wzrastającą wiedzą na temat wykrytych błędów. W miarę możliwości będą też podawane alternatywne wyjścia z sytuacji, gdy istnieje konieczność kompilacji programu.
* Błąd obsługi tablic liczbowych (zarówno jedno, jak i dwuwymiarowych), powodujący po kompilacji ich niewłaściwe działanie. * Błąd obsługi tablic liczbowych (zarówno jedno, jak i dwuwymiarowych), powodujący po kompilacji ich niewłaściwe działanie.
::'''Alternatywna metoda''': gdy stosujemy liczby z zakresu 0-255, możemy stosować tablice tekstowe. Odpowiednik dwuwymiarowych tablic liczbowych można uzyskać przez rzutowanie z założonym krokiem. Rozwiązanie to zaproponował [[Fox]]. ::'''Alternatywna metoda''': gdy stosujemy liczby z zakresu 0-255, możemy stosować tablice tekstowe. Odpowiednik dwuwymiarowych tablic liczbowych można uzyskać przez rzutowanie z założonym krokiem. Rozwiązanie to zaproponował [[Fox]].
- +* Funkcja USR() niewłaściwie przekazuje wynik z procedury użytkownika.
 +::'''Rozwiązanie''': zamiast zapisywać wynik w słowie $D4/$D5 i pobierać go bezpośrednio z funkcji, wykorzystujemy dowolne nieużywane miejsce pamięci i funkcje PEEK() lub DPEEK().
 +* Zbyt rozbudowane wyrażenia opisujące indeks tablic liczbowych powodują błąd nr 9.
 +::'''Rozwiązanie''': przeliczamy wyrażenie wcześniej i zapisujemy wynik w zmiennej pomocniczej, którą następnie indeksujemy tablicę.
 +* Źle działa lub nie działa wcale pusta instrukcja SOUND
 +::'''Rozwiązanie''': należy wyciszyć każdy kanał oddzielnie
{{stub}} {{stub}}
[[Kategoria:Oprogramowanie Atari 8-bit]] [[Kategoria:Oprogramowanie Atari 8-bit]]
[[Kategoria:Języki programowania]] [[Kategoria:Języki programowania]]
 +[[Kategoria:BASIC]]

Aktualna wersja

Grafika:tbxlcompiler-1.png

Kompilator języka Turbo BASIC XL, czyli program tłumaczący kod programu napisanego w Turbo BASIC-u XL na kod maszynowy. Do prawidłowego działania skompilowanego programu wymagana jest obecność bibliotek Turbo BASIC-a (RUNTIME.EXE), można je dołączyć do programu przy pomocy linkera. Należy przy tym pamiętać, iż oryginalna wersja bibliotek zawiera drobne błędy (min. działanie instrukcji DEC), więc do prawidłowego działania programu rekomendowany jest RUNTIME2.EXE - z poprawkami autorstwa Jacka Żuka.

W ramach ciekawostki: kompilator Turbo BASIC-a XL został napisany w Turbo BASIC-u XL.

Problemy z kompilacją

Poniżej znajduje się lista zauważonych problemów związanych z niewłaściwym działaniem skompilowanych programów, spowodowanych błędami kompilatora, linkera i/lub (najczęściej) bibliotek. Poniższa lista będzie stale rozszerzana, wraz z wzrastającą wiedzą na temat wykrytych błędów. W miarę możliwości będą też podawane alternatywne wyjścia z sytuacji, gdy istnieje konieczność kompilacji programu.

  • Błąd obsługi tablic liczbowych (zarówno jedno, jak i dwuwymiarowych), powodujący po kompilacji ich niewłaściwe działanie.
Alternatywna metoda: gdy stosujemy liczby z zakresu 0-255, możemy stosować tablice tekstowe. Odpowiednik dwuwymiarowych tablic liczbowych można uzyskać przez rzutowanie z założonym krokiem. Rozwiązanie to zaproponował Fox.
  • Funkcja USR() niewłaściwie przekazuje wynik z procedury użytkownika.
Rozwiązanie: zamiast zapisywać wynik w słowie $D4/$D5 i pobierać go bezpośrednio z funkcji, wykorzystujemy dowolne nieużywane miejsce pamięci i funkcje PEEK() lub DPEEK().
  • Zbyt rozbudowane wyrażenia opisujące indeks tablic liczbowych powodują błąd nr 9.
Rozwiązanie: przeliczamy wyrażenie wcześniej i zapisujemy wynik w zmiennej pomocniczej, którą następnie indeksujemy tablicę.
  • Źle działa lub nie działa wcale pusta instrukcja SOUND
Rozwiązanie: należy wyciszyć każdy kanał oddzielnie

Ten artykuł to tylko zalążek. Możesz pomóc rozwojowi Atariki poprzez rozszerzenie go o więcej informacji.

Personal tools