Deep Blue C

From Atariki

(Różnice między wersjami)
Jump to: navigation, search
Wersja z dnia 11:32, 30 gru 2008
Danos (Dyskusja | wkład)

← Previous diff
Aktualna wersja
Danos (Dyskusja | wkład)
(Wersje rozwojowe)
Linia 1: Linia 1:
== Ograniczenia == == Ograniczenia ==
-Jeden z nielicznych kompilatorów języka C na [[Atari 8-bit|małe Atari]]. Jego składnia jest zbliżona do standardu ANSI C, z istotnymi ograniczeniami. Niedostępne są:+Jeden z nielicznych kompilatorów języka C na [[Atari 8-bit|małe Atari]]. Twórcą kompilatora jest John H. Palevich. Składnia dopuszczalna przez Deep Blue C zbliżona jest do standardu ANSI C, z istotnymi ograniczeniami. Niedostępne są:
* struktury * struktury
Linia 45: Linia 45:
== Biblioteka funkcji matematycznych == == Biblioteka funkcji matematycznych ==
-Standardowy język C określa typ podstawowy ''float'' oraz zestaw funkcji dla obliczeń numerycznych. Próbą przybliżenia możliwości DBC do standardu jest biblioteka MathLib autorstwa Franka Parisa. Zawiera ona się w dwóch plikach:+Standardowy język C określa typ podstawowy ''float'' oraz zestaw funkcji dla obliczeń numerycznych. Próbą przybliżenia możliwości DBC do standardu jest biblioteka Mathlib autorstwa Franka Parisa. Zawiera ona się w dwóch plikach:
* MATHLIB.C - biblioteka funkcji podstawowych na liczbach zmiennoprzecinkowych, wykorzystująca [[Pakiet_matematyczny|pakiet matematyczny]] w ROM Atari * MATHLIB.C - biblioteka funkcji podstawowych na liczbach zmiennoprzecinkowych, wykorzystująca [[Pakiet_matematyczny|pakiet matematyczny]] w ROM Atari
* TRIG.C - biblioteka funkcji trygonometrycznych * TRIG.C - biblioteka funkcji trygonometrycznych
== Szybkość działania == == Szybkość działania ==
-Kompilator DBC nie tworzy kodu maszynowego dla procesora 6502. Wynikiem jego działania jest kod pośredni (C-code), który jest następnie wykonywany przez interpretator kodu pośredniego [http://www.atariarchives.org/APX/showinfo.php?cat=20166]. Jest to głównym powodem niewielkiej szybkości działania kodu wykonywalnego tworzonego za pomocą DBC.+Kompilator DBC nie tworzy kodu maszynowego dla procesora 6502. Wynikiem jego działania jest kod pośredni (C-code), który jest następnie wykonywany przez interpretator kodu pośredniego [http://www.atariarchives.org/APX/showinfo.php?cat=20166]. Według [http://www.faqs.org/faqs/atari-8-bit/faq/ Atari 8-bit Faq] Deep Blue C kompiluje do kodu Intel 8080, który jest następnie wykonywany przez maszynę wirtualną/interpretator procesora 8080. Jest to technika znana ze współczesnej platformy JAVA i jest też głównym powodem niewielkiej szybkości działania kodu wykonywalnego tworzonego za pomocą DBC.
 + 
 +== Przykładowy program ==
 +Zamieszczony poniżej program ma za zadanie uprzejmie przywitać się ze światem.
 + 
 + main()
 + $(
 + printf("Hello World!");
 + $)
 + 
 +Charakterystyczny jest brak dyrektywy preprocesora "#include". W DBC zastosowano odmienne podejście do kwestii linkowania z biblioteką - rozwiązywaniem nazw funkcji zajmuje się linker.
 +Powyższy kod źródłowy należy przetworzyć kompilatorem CC.COM w wersję C-code. Dla uzyskania wersji wykonywalnej konieczne jest jeszcze połączenie/zlinkowanie C-code z bibliotekami i maszyną wirtualną DBC. Służy do tego linker LINK.COM, któremu przekazujemy do przetworzenia następujący plik o nazwie HELLO.LNK:
 + 
 + HELLO
 + AIO
 + PRINTF
 + DBC.OBJ
 +
 +Wynikiem jest plik binarny HELLO.COM gotowy do uruchomienia pod DOS-em (sprawdzone dla DOS 2.5 i MyDOS 4.53).
 + 
 +== Wersje rozwojowe ==
 +Środowisko DBC doczekało się kolejnych wersji, z których każda zapewnia większą funkcjonalność stosunku do poprzedniej. Są to:
 +* [[ACE C]] - podobne ograniczenia jak w DBC oraz korzystanie z kodu pośredniego dla interpretatora "C-code". Niektóre biblioteki zostały zakodowane ponownie przy użyciu języka assemblera. Ciekawym dodatkiem jest kompilator optymalizujący FAST.COM, który według autora ma zwiększać szybkość działania programu wynikowego o 20-30%.
 +* [[CC8]] - W porównaniu do DBC i ACE C jest to środowisko znacznie rozbudowane. Dostępne są m.in. typy zmiennoprzecinkowe, tablice wielowymiarowe, struktury, unie i typy wyliczeniowe. Rozszerzono zbiór poleceń preprocesora. Funkcje mogą zwracać już inne typy poza standardowym "int", tj. również "char" i "pointer". Dostępna jest biblioteka rozszerzająca CC 8 o obsługę dynamicznego zarządzania pamięcią - [[ALMLIB]], autorstwa Marka Millera.
== Dostępność == == Dostępność ==
Linia 60: Linia 83:
* [[Języki Atari XL/XE cz. 2|W. Zientara, "Języki programowania Atari cz.2", SOETO, Warszawa, 1989]] * [[Języki Atari XL/XE cz. 2|W. Zientara, "Języki programowania Atari cz.2", SOETO, Warszawa, 1989]]
* [http://www.atariarchives.org/APX/showinfo.php?cat=20231 Mathlib for Deep Blue C - AtariArchives.org] * [http://www.atariarchives.org/APX/showinfo.php?cat=20231 Mathlib for Deep Blue C - AtariArchives.org]
 +* [http://www.faqs.org/faqs/atari-8-bit/faq/ Atari 8-bit Faq]
[[Kategoria:Oprogramowanie Atari 8-bit]] [[Kategoria:Oprogramowanie Atari 8-bit]]
[[Kategoria:Języki programowania]] [[Kategoria:Języki programowania]]

Aktualna wersja

Spis treści

Ograniczenia

Jeden z nielicznych kompilatorów języka C na małe Atari. Twórcą kompilatora jest John H. Palevich. Składnia dopuszczalna przez Deep Blue C zbliżona jest do standardu ANSI C, z istotnymi ograniczeniami. Niedostępne są:

  • struktury
  • unie
  • tablice wielowymiarowe
  • liczby zmiennoprzecinkowe
  • funkcje zwracające wartości typu innego niż int
  • operator sizeof
  • rzutowanie typów

Inne niestandardowe właściwości Deep Blue C:

  • Ostatni człon (case lub default) klauzuli switch musi być zakończony jedną z instrukcji: break, continue lub return.
  • Typ char jest zawsze bez znaku.
  • Łańcuchy znakowe nie mogą być dzielone.
  • Długość linii kodu źródłowego nie może przekraczać 79 znaków.
  • Funkcja nie może mieć więcej niż 126 argumentów.
  • Niedostępne są nawiasy klamrowe { i }, w zamian należy użyć sekwencji $( i $).

Możliwości

Środowisko Deep Blue C (DBC) zapewnia dostęp do następujących konstrukcji programowych [1]:

  • Typy podstawowe: char, int, typ wskaźnikowy (pointer)
  • Tablice jednowymiarowe
  • Operatory jednoargumentowe: + - * & ++ -- ! $- (tylda)
  • Operatory dwuargumentowe: + - * / % | ^ & == != < <= >= << >> <op>= && || ?: ,
  • Słowa kluczowe: if, else, while, break, continue, return, for, do, switch, case, default
  • Dyrektywy kompilatora: #define, #include
  • Linker (konsolidator) z funkcją relokowania
  • Stałe: szesnastkowe, ósemkowe, \ (backslash)

Biblioteka standardowa

Prawdziwie mocną stroną DBC są dołączone do środowiska biblioteki programistyczne. Zapewniają one niemal ten sam zestaw funkcji jak w Atari BASIC, oprócz zmiennych typu rzeczywistego. Poniżej przedstawiono podstawowe biblioteki dostępne podczas tworzenia programu [2]:

  • AIO - biblioteka podstawowych funkcji wejścia/wyjścia. Praktycznie wymagana w każdym tworzonym programie
  • DBC - biblioteka uruchomieniowa
  • GRAPHICS - biblioteka graficzna. Tryby tekstowe i graficzne Atari oraz funkcje graficzne wzorowane na Atari Basic
  • PMG - biblioteka grafiki grafiki Gracz-Pocisk (Player Missile Graphics)
  • PRINTF - biblioteka obsługi konsoli

Użyteczny jest kod źródłowy ww. bibliotek znajdujący się razem z innymi plikami DBC.

Biblioteka funkcji matematycznych

Standardowy język C określa typ podstawowy float oraz zestaw funkcji dla obliczeń numerycznych. Próbą przybliżenia możliwości DBC do standardu jest biblioteka Mathlib autorstwa Franka Parisa. Zawiera ona się w dwóch plikach:

  • MATHLIB.C - biblioteka funkcji podstawowych na liczbach zmiennoprzecinkowych, wykorzystująca pakiet matematyczny w ROM Atari
  • TRIG.C - biblioteka funkcji trygonometrycznych

Szybkość działania

Kompilator DBC nie tworzy kodu maszynowego dla procesora 6502. Wynikiem jego działania jest kod pośredni (C-code), który jest następnie wykonywany przez interpretator kodu pośredniego [3]. Według Atari 8-bit Faq Deep Blue C kompiluje do kodu Intel 8080, który jest następnie wykonywany przez maszynę wirtualną/interpretator procesora 8080. Jest to technika znana ze współczesnej platformy JAVA i jest też głównym powodem niewielkiej szybkości działania kodu wykonywalnego tworzonego za pomocą DBC.

Przykładowy program

Zamieszczony poniżej program ma za zadanie uprzejmie przywitać się ze światem.

 main()
 $(
   printf("Hello World!");
 $)

Charakterystyczny jest brak dyrektywy preprocesora "#include". W DBC zastosowano odmienne podejście do kwestii linkowania z biblioteką - rozwiązywaniem nazw funkcji zajmuje się linker. Powyższy kod źródłowy należy przetworzyć kompilatorem CC.COM w wersję C-code. Dla uzyskania wersji wykonywalnej konieczne jest jeszcze połączenie/zlinkowanie C-code z bibliotekami i maszyną wirtualną DBC. Służy do tego linker LINK.COM, któremu przekazujemy do przetworzenia następujący plik o nazwie HELLO.LNK:

 HELLO
 AIO
 PRINTF
 DBC.OBJ

Wynikiem jest plik binarny HELLO.COM gotowy do uruchomienia pod DOS-em (sprawdzone dla DOS 2.5 i MyDOS 4.53).

Wersje rozwojowe

Środowisko DBC doczekało się kolejnych wersji, z których każda zapewnia większą funkcjonalność stosunku do poprzedniej. Są to:

  • ACE C - podobne ograniczenia jak w DBC oraz korzystanie z kodu pośredniego dla interpretatora "C-code". Niektóre biblioteki zostały zakodowane ponownie przy użyciu języka assemblera. Ciekawym dodatkiem jest kompilator optymalizujący FAST.COM, który według autora ma zwiększać szybkość działania programu wynikowego o 20-30%.
  • CC8 - W porównaniu do DBC i ACE C jest to środowisko znacznie rozbudowane. Dostępne są m.in. typy zmiennoprzecinkowe, tablice wielowymiarowe, struktury, unie i typy wyliczeniowe. Rozszerzono zbiór poleceń preprocesora. Funkcje mogą zwracać już inne typy poza standardowym "int", tj. również "char" i "pointer". Dostępna jest biblioteka rozszerzająca CC 8 o obsługę dynamicznego zarządzania pamięcią - ALMLIB, autorstwa Marka Millera.

Dostępność

Podstawowy pakiet DBC jest do pobrania na stronie Atari Archives. Nie jest określony jawnie status tego pakietu, ale sądząc po sposobie działania ludzi z Atari Archives powinien mieć status publiczny. Na powyższej stronie udostępniono również kod źródłowy całego środowiska programistycznego. Pakiet funkcji matematycznych Mathlib jest niedostępny publicznie, powodem jest brak kontaktu z autorem tej biblioteki, Frankiem Parisem [4].

Materiały źródłowe

Personal tools