Deep Blue C
From Atariki
| Wersja z dnia 11:12, 30 gru 2008 Danos (Dyskusja | wkład) (Dodanie wiadomości o bibliotekach matematycznych) ← 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 18: | Linia 18: | ||
| * Długość linii kodu źródłowego nie może przekraczać 79 znaków. | * 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. | * 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 == | == Możliwości == | ||
| - | Środowisko Deep Blue C (DBC) zapewnia dostęp do następujących konstrukcji programowych [1]: | + | Środowisko Deep Blue C (DBC) zapewnia dostęp do następujących konstrukcji programowych [http://www.atariarchives.org/APX/showinfo.php?cat=20166]: | 
| * Typy podstawowe: ''char'', ''int'', typ wskaźnikowy (''pointer'') | * Typy podstawowe: ''char'', ''int'', typ wskaźnikowy (''pointer'') | ||
| * Tablice jednowymiarowe | * Tablice jednowymiarowe | ||
| Linia 33: | Linia 34: | ||
| == Biblioteka standardowa == | == 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 [1]: | + | 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 [http://www.atariarchives.org/APX/showinfo.php?cat=20166]: | 
| * AIO - biblioteka podstawowych funkcji wejścia/wyjścia. Praktycznie wymagana w każdym tworzonym programie | * AIO - biblioteka podstawowych funkcji wejścia/wyjścia. Praktycznie wymagana w każdym tworzonym programie | ||
| * DBC - biblioteka uruchomieniowa | * DBC - biblioteka uruchomieniowa | ||
| Linia 44: | 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 [2]: | + | 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 [1]. 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ść == | ||
| Podstawowy pakiet DBC jest do pobrania na stronie [http://www.atariarchives.org 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. | Podstawowy pakiet DBC jest do pobrania na stronie [http://www.atariarchives.org 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 [3]. | + | Pakiet funkcji matematycznych Mathlib jest niedostępny publicznie, powodem jest brak kontaktu z autorem tej biblioteki, Frankiem Parisem [http://www.atariarchives.org/APX/showinfo.php?cat=20231]. | 
| - | == Materiały źródłowe: == | + | == Materiały źródłowe == | 
| * [http://www.atariarchives.org/APX/showinfo.php?cat=20166 Deep Blue C - AtariArchives.org] | * [http://www.atariarchives.org/APX/showinfo.php?cat=20166 Deep Blue C - AtariArchives.org] | ||
| - | * 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].
