Kalkulator programowalny Texas Instruments Voyage 200

Programowalne kalkulatory Texas Instruments posiadają wiele cech zbliżających je do palmtopów. Duże wyświetlacze (Voyage 200 posiada ekran LCD o rozdzielczości 128×240 pikseli), ponad sto kilobajtów pamięci RAM (zależnie od modelu), nawet 2,7MB pamięci ROM (w technologii Flash). I rzecz najważniejsza – procesor… Motorola 68000 (12MHz) wspierana przez GCC. Niemniej ważną cechą tych urządzeń jest możliwość wymiany danych z komputerami poprzez różnego rodzaju kable. Kalkulatory TI 89, TI 92(+) oraz Voyage 200 są obsługiwane przez oprogramowanie komunikacyjne TiLP. Dzięki specjalnej łacie na GCC i binutils możemy kompilować programy dla nich przy użyciu gcc. Starsze modele (82, 83(+), 85, 86) nie są zbudowane w oparciu o procesor Motoroli lecz o wiele prostszy procesor Zilog Z80 i nie będą przedmiotem tego artykułu (mimo że oprogramowanie komunikacyjne może z nimi – w ograniczonym zakresie – współpracować).

Kable, czyli od przybytku głowa… boli

Możliwości podłączenia kalkulatora do komputera jest kilka. Możemy użyć portu szeregowego, równoległego lub USB. Texas Instruments sprzedaje 3 rodzaje kabli: BlackLink, GrayLink i SilverLink. Kabel również można wykonać samodzielnie (w wersji na port szeregowy jak i równoległy) lub użyć kabla AVRlink lub PIClink. Każdy rodzaj kabla wymaga oddzielnego modułu jądra. Kabel USB SilverLink jest najbardziej popularny rozwiązaniem. Zastosowanie USB pozwala podłączyć kilka urządzeń do jednego komputera oraz wykrywanie podłączenia/odłączenia kabla przez podsystem hotplug i automatyczne ładowanie niezbędnego sterownika – modułu tiglusb. Pytanie który kabel wybrać? Gdy komputer posiada porty USB użycie kabla USB jest najlepszym rozwiązaniem, jeśli nie wybór uzależniony jest od posiadanych wolnych portów szeregowych i równoległych. Ja opisze instalację kabla USB SilverLink.

Instalacja sterownika

Na początek należało by sprawdzić czy w naszym systemie jest obecny odpowiedni moduł kernela. W przypadku kabla USB będzie to plik tiglusb.o. Jądro generyczne z dystrybucji Slackware posiada sterownik ten skompilowany jako moduł. W innych dystrybucjach powinno być podobnie. Jeśli przy okazji konfigurowania jądra wyłączyliśmy ten sterownik będziemy musieli ponownie skompilować kernel i włączyć (w przypadku kernela 2.4) w menu USB support w sekcji USB Miscellaneous drivers sterownik o nazwie Texas Instruments Graph Link USB (aka SilverLink) cable support. Jeśli używamy kernela 2.6 sterownik ten odnajdziemy w Device Drivers następnie USB support. Teraz sprawdźmy działanie sterownika. Podłączmy kabel do komputera. Jeśli korzystamy z mechanizmu hotplug sterownik zostanie załadowany automatycznie. Jeśli nie załadujmy go sami wydając (z konta administratora) polecenie modporbe tiglusb. Sprawdźmy czy sterownik został załadowany prawidłowo. Oto fragment komunikatów otrzymanych po wydaniu komendy dmesg:

hub.c: new USB device 00:11.3-1, assigned address 4
usb.c: USB device 4 (vend/prod 0x451/0xe001) is not claimed by any active driver.
usb.c: registered new driver tiglusb
tiglusb.c: firmware revision 1.03
tiglusb.c: TI-GRAPH LINK USB (aka SilverLink) driver, version 1.06

Aby programy mogły ze sterownika w jądrze korzystać musimy utworzyć odpowiedni wpis w katalogu /dev. Uruchommy (z roota) mknod /dev/tiglusb0 c 115 16 a następnie ustawmy prawa dostępu do urządzenia chmod 666 /dev/tiglusb0 (oczywiście możemy ustawić inne w zależności od potrzeb). Innym sposobem użycia kabla USB jest skorzystanie z biblioteki libusb zamiast sterownika jądra. Kolejny krok to instalacja oprogramowania komunikacyjnego.

Instalacja oprogramowania komunikacyjnego

TiLP (Ti Linking Program) jest programem komunikacyjnym dla wszystkich typów kalkulatorów Texas Instruments. Korzysta on z 3 bibliotek: libticables (biblioteka obsługi różnych rodzajów kabli, dzięki niej TiLP używa tego samego interfejsu niezależnie od rodzaju połączenia z kalkulatorem, jeśli nie chcemy używać sterownika w kernelu biblioteka do kompilacji i poprawnego działania wymagana jest obecności libusb w wersji 0.1.5 lub wyższej), libtifiles (obsługa funkcji wspomagających operacje na niestandardowych formatach plików używanych przez Texas Instruments) oraz libticalcs (biblioteka zawiera procedury obsługi różnych modeli kalkulatorów, korzysta z obu poprzednich, należy ją instalować jako ostatnią).

Biblioteki znajdują się na cd-romie dołączonym do bieżącego numeru. Można je również pobrać ze strony projektu TiLP (link na końcu artykułu). Instalacja bibliotek jest łatwa gdyż wykorzystują one mechanizm autoconf/automake. Rozpoczynamy od instalacji biblioteki libticables. W tym celu rozpakowujemy archiwum libticables-3.7.6.tar.gz (tar zxf libticables-3.7.6.tar.gz) i przechodzimy do nowo powstałego katalogu (cd libticables-3.7.6). Teraz konfigurujemy źródła poleceniem ./configure. Następnie budujemy bibliotekę poleceniem make. Gdy kompilacja zakończy się instalujemy gotową bibliotekę pisząc make install (koniecznie jako administrator). Pozostałe dwie biblioteki instalujemy analogicznie. Gdy wszystkie biblioteki zostaną zainstalowane możemy przystąpić do instalacji TiLPa. Po rozpakowaniu źródeł (tar zxf tilp-6.67-beta3.tar.gz) należy je skonfigurować. Jeśli jesteśmy jedynym użytkownikiem komputera warto włączyć opcje pozwalającą poruszać się po całym systemie plików (./configure –enable-exit-homedir). Ze względów bezpieczeństwa domyślnie użytkownik nie może korzystając z TiLPa wychodzić poza swój katalog domowy. Włączenie tej opcji pozwala np. przenieść bezpośrednio do kalkulatora pliki znajdujące się na cd-romie zamontowanym w /mnt/cdrom, bez konieczności ich uprzedniego kopiowania do katalogu domowego.

TiLP is a Linking Program

Nadszedł czas by uruchomić TiLPa. Wpiszmy w xterminalu tilp. Naszym oczom powinno ukazać się okno podobne do tego:




TiLP


Z menu Setup wybieramy Communication. W oknie dialogowym wybieramy rodzaj używanego kabla i kalkulatora. Następnie zapisujemy konfigurację klikając File, Save config. Teraz klikamy Ready ? na pasku narzędzi. W pasku statusu powinniśmy zobaczyć napis Status: connected i w nawiasie model kalkulatora. Połączenie między kalkulatorem i komputerem funkcjonuje poprawnie. Jeśli zamiast oczekiwanego statusu na ekranie pojawi się okienko z informacja o błędzie przeczytajmy komunikat dokładnie. Najczęściej znajdziemy tam inforacje jak problem rozwiązać. Przyczyną problemu może być wyłączony lub nie podłączony kalkulator, nie załadowany sterownik, bądź zbyt restrykcyjne ustawienia dostępu do urządzenia w katalogu dev. Jeśli nie korzystamy z jakiś względów z devfs sprawdźmy czy odpowiedni wpis w katalogu dev istnieje. Dla kabla SilverLink będzie to /dev/tiusb0 (odpowiedni wpis utworzymy poleceniem mknod /dev/tiusb0 c 115 16, następnie nadajmy mu mniej restrykcyjne prawa dostępu chmod 0666 /dev/tiusb0). Jeśli posiadasz inny rodzaj kabla połączeniowego szczegółowe informacje na temat jego konfiguracji znajdziesz w dokumentacji sterownika, biblioteki libticables oraz programu TiLP). Jeśli wszystko działa kliknijmy Dirlist. Otrzymamy w lewej połowie okna listę wszystkich plików i aplikacji Flash w kalkulatorze. Pliki kopiujemy miedzy panelami przeciągając je i upuszczając w drugim panelu. Warto wspomnieć, że czasem transfer może się nie powieść mimo, iż kalkulator dysponuje odpowiednią ilości wolnej pamięci. Jest to związane z mechanizmem odśmiecania pamięci (garbage collection), który uruchamia się w nieznany autorom TiLPa sposób i powoduje że kalkulator przez dłuższą chwilę nie odbiera danych przez co TiLP przerywa transfer. Kolejna próba przesłania pliku kończy się najczęściej sukcesem. Problem ten nie występuje przy przesyłaniu plików z kalkulatora do komputera. Przyciski Backup i Restore służą do kopiowania całej zawartości pamięci kalkulatora i jej przywracania. W menu Misc mamy do dyspozycji jeszcze możliwość synchronizowania zegara kalkulatora z datą i czasem komputera. Możliwość wykonywania zrzutów ekranu kalkulatora (niestety zrzucanie ekranu działa tylko w oprogramowaniu kalkulatora, programy ASM, PPG i inne wyłączają AMSa i nie działają żadne operacje zdalne). Aktualizacja programu AMS dostępna z menu nie działa przy użyciu kabla SilverLink – tym razem sterownik w kernelu powoduje przerwanie transferu. Kopiowanie pamięci ROM przydatne jest gdy potrzebujemy ROM naszego kalkulatora np. do emulatora. Wybranie tej opcji powoduje przesłanie do naszego kalkulatora małego programu, który czyta pamięć bajt po bajcie i wysyła do komputera. Używanie tej opcji nie jest bezpiecznie – program kopiujący ROM często zawiesza kalkulator, co owocuje utratą danych. Przed użyciem tej opcji należy bezwzględnie wykonać kopię zapasową. Transfer ROMu nie powiedzie się jeśli zainstalowaliśmy w kalkulatorze program kbdfunc. Dlatego przed przystąpieniem do kopiowania ROMu należy odinstalować ten program. Innym sposobem jest modyfikacja biblioteki libticalcs. W pliku src/ti92.c i src/ti89.c należy odszukać i usunąć następującą linię TRY(ti92_send_key(KEY92P_RP)); odpowiedzialną za wpisywanie zamknięci nawiasu okrągłego. Kbdfunc zamyka automatycznie każdy otwarty nawias, przez co w lini komend pojawiają się dwa zamknięcia jednego otwartego nawiasu – AMS odczytuje to jako błąd składni.

TI + GCC = TiGCC

Programowalne kalkulatory Texas Instruments posiadają wbudowany interpreter TiBASICa. Odmiany języka BASIC przeznaczonej do wykonywania obliczeń i prostych programów. Jednak używanie TiBASICa powoduje kilka problemów. Po pierwsze BASIC jest interpretowany podczas wykonywania, co owocuje w niewielkiej prędkości działania programów w nim zapisanych. Po drugie TiBASIC ma niewielkie możliwości w porównaniu do programów napisanych w C (biblioteka C jest o wiele bogatsza). Niestety ze względu na małą ilość pamięci kalkulator nie jest w stanie sprostać wymaganiom stawianym przez kompilatory C. Rozwiązaniem jest pisanie i kompilowanie programów na innym sprzęcie a następnie kopiowanie już gotowych binariów za pomocą TiLPa do kalkulatora. Standartowo GCC potrafi generować kod binarny dla procesora Motorola 68000 jednak kalkulatory TI, a dokładniej ich AMS (system operacyjny) używają nieco innego formatu binariów. Dlatego samo GCC nie wystarczy, konieczna jest łata. Łata zmienia nieco sposób generowania plików binarnych przez GCC przez dodanie dodatkowych kroków do procesu kompilacji. Plik .c jest kompilowany do zbioru .s, poddawanego specjalnym zmianom m.in. związanym z korzystaniem z procedur zapisanych w pamięci ROM kalkulatora (zajmuje się tym patcher – szara eminencja TiGCC) Wynikowy plik .s jest assemblowany, po czym linkowany z bibliotekami. Następnie plik zlinkowany konwertowany jest z formatu COFF do formatu binariów kalkulatora (operację tą wykonuje linker).

Instalacja TiGCC

Mimo, że istnieje binarna dystrybucja kompilatora TiGCC my zbudujemy własny kompilator ze źródeł. Będą nam do tego potrzebne trzy pliki ze źródłami:

  • tigcc_src.tar.bz2 (łata na GCC, TiGCC Tools Suite),
  • gcc-3.3.1-20030623.tar.bz2 (GCC – GNU Compiler Collection),
  • gas-2.14.tar.bz2 (GNU binutils),

Należy też sprawdzić czy na dysku mamy około 130MB wolnego miejsca. Jeśli tak, możemy przystąpić do rozpakowywania źródeł. Najpierw należy stworzyć katalog (w moim przypadku będzie to /tmp/TiGCC) i rozpakować w nim tigcc_src.tar.bz2 (tar jxf tigcc_src.tar.bz2). Następny krok to stworzenie katalogu download, do którego rozpakowujemy pliki gcc-3.3.1-20030623.tar.bz2 i gas-2.14.tar.bz2. Teraz tworzymy dowiązania symboliczne do katalogów w których znajdują się rozpakowane gcc i binutils. W naszym przypadku w katalogu download wpisujemy ln -s binutils-2.14 binutils.ti oraz ln -s gcc-3.3.1-20030623 gcc.ti. Teraz należy zdecydować się na sposób instalacji. Możemy zainstalować TiGCC dla wszystkich użytkowników (np. w /usr/local/tigcc) lub tylko dla siebie (np. w $HOME/tigcc). Pierwszy sposób będzie wymagał praw roota. Ja zdecydowałem się na instalacje w /usr/local/tigcc. Teraz należy zdefiniować zmienną środowiskową $TIGCC. Wystarczy wpisać export TIGCC=/usr/local/tigcc do .bash_profile lub jeśli wszyscy użytkownicy mają używać TiGCC do /etc/profile. Ta zmienna środowiskowa jest niezbędna zarówno do kompilacji i instalacji TiGCC jak i do późniejszego używania kompilatora. Jeśli ktoś używa csh/tcsh lub shella korn musi zmodyfikować odpowiednie pliki. Najtrudniejsza część kompilacji już za nami teraz pozostaje wpisać export CFLAGS=’-Os -s’, aby ustawić flagi kompilacji i uruchomić skrypt o znaczącej nazwie Install_All z katalogu scripts (cd scripts; ./Install_All) Kompilacja może zająć od kilku(nastu) minut do około godziny w zależności od sprzętu (głównie ilości pamięci RAM i szybkości procesora).

Helo World!

Zanim spróbujemy coś skompilować sprawdźmy czy TiGCC działa. Wpiszmy tigcc –version kompilator powinien wypisać informacje o wersji. Jeśli zamiast tego pojawił się komunikat o braku takiego polecenia, lub inny komunikat o błędzie prawdopodobnie zmienna środowiskowa TIGCC nie jest poprawnie ustawiona. A oto najbardziej znany program jaki kiedykolwiek został napisany, tym razem w wersji na kalkulator:

/* jeśli zainstalowaliśmy na kalkulatorze kernel
zatroszczy się on o odtworzenie ekranu gdy będziemy
opuszczali _main() */

//#define USE_KERNEL

/* w przeciwnym wypadku dołączmy niezbędne funkcje
do naszego programu, jeśli tego nie uczynimy po
zakończeniu programu pozostawimy ekran w nieładzie */

#define SAVE_SCREEN

/* program będzie mniejszy */
#define NO_EXIT_SUPPORT

/* teraz zdecydujmy dla jakich kalkulatorów chcemy
wygenerować kod, możemy wybrać jeden lub więcej */

//#define USE_TI89
//#define USE_TI92PLUS
#define USE_V200

/* dołączmy wszystkie nagłówki TiGCC lib */
#include <tigcclib.h>

/* zwróć uwagę, że funkcja wejściowa programu nazywa się
_main, niczego nie zwraca i niczego nie przyjmuje! */

void
_main(void)
{
    clrscr(); /* czyścimy ekran */
    printf("Hello world!");
    ngetchx(); /* czekamy na naciśnięcie klawisza */
}

Kompilacja sprowadza się do wydania jednego polecenia tigcc hello.c. Aby przetestować kompilator i zobaczyć z jakich kroków składa się kompilacja proponuje za pierwszym razem uruchomić kompilator z opcja -v.

Po skopiowaniu pliku wynikowego (w moim przypadku hello.v2z) do kalkulatora program będzie znajdował się w katalogu main pod nazwą hello. Uruchamiamy go wchodząc do katalogu main i wpisując polecenie hello().




Uszkodzona pamięć ekranu
Pamięć ekranu odtworzona poprawnie


Na zrzutach ekranu powyżej widać jak ważne jest odtworzenie stanu pamięci ekranu podczas opuszczania programu. Zniszczonych fragmentów pamięci często nie można odtworzyć aż do resetu (np. pasek na samym dole ekranu tuż nad linią statusu) gdyż są one bardzo rzadko przerysowywane. Dobrym pomysłem jest zainstalowanie kernela. Zajmie się on zapisaniem pamięci ekranu przed przekazaniem kontroli do zewnętrznego programu i odtworzy jej stan po jego zakończeniu. Przeniesienie tej funkcji z programu do kernela zmniejszy również objętość samego programu. Kernel również najczęściej udostępnia wiele przydatnych funkcji bibliotecznych.

Pobieranie argumentów i zwracanie wartości

Ci, którzy uważnie przeczytali listing Hello World zauważyli, że funkcja brak w nim funkcji main() zamiast niej jest funkcja o nazwie _main(). Funkcja ta nie przyjmuje i nie zwraca niczego (void). Zastosowanie programu, do którego nie możemy przekazać żadnych argumentów wywołania i który nie może zwracać kodu powrotu było by jednak mocno ograniczone. Dlatego opracowano pewne mechanizmy pozwalające pokonać to ograniczenie narzucone przez TI. Wsparcie dla pobierania i zwracania argumentów pojawiło się w AMSie 1.01, jednak o wiele wygodniejsze jest korzystanie z AMSa 2.02 (jeśli nasz kalkulator posiada wersję wcześniejszą konieczne jest uaktualnienie). Do obsługi argumentów wywołania stosujemy następujące funkcje: InitArgPtr() – inicjuje wskaźnik do pamięci przechowywującej argumenty ArgCount() – zwraca ilośc argumentów GetArgType() – zwraca typ argumentu GetIntArg() – zwraca wartość liczbowa argumentu GetStrnArg() – zwraca argument jako łańcuch znakowy

Typy argumentów to m.in.: POSINT_TAG (liczba dodatnia), NEGINT_TAG (liczba ujemna), FLOAT_TAG (ułamek), STR_TAG (napis), END_TAG (oznacza koniec listy argumentów). Argumenty przekazywane do programu układane są na stosie, dlatego niebezpieczne może okazać się zdjęcie zbyt małej lub zbyt dużej liczby argumentów. Warto wspomnieć, że wywołanie program(1,-2,”Ala”,kot) przekaże do programu kolejno liczbę dodatnią 1 (POSINT_TAG), liczbę ujemną -2 (NEGINT_TAG), napis Ala (STR_TAG) oraz zawartość zmiennej kot (!). Jeśli zmienna kot istnieje będzie przekazana w odpowiedni sposób (jako liczba, tekst, itd.).

/* wybieramy typ kalkulatora */
//#define USE_TI89
//#define USE_TI92PLUS
#define USE_V200

/* korzystamy z rozszerzeń wprowadzonych przez AMS 2.02 */
#define MIN_AMS 202

/* będziemy zwracać wartość */
#define RETURN_VALUE

#include <tigcclib.h>

void
_main(void)
{
    ESI argptr; /* wskaźnik do argumentów */
    int argtype; /* typ argumentu */
    long int numl = 0; /* pomocnicze zmienne do przechowywania... */
    float numf; /* ...argumentów typu long int i float */

    /* wypisujemy ilość argumentów */
    printf_xy(0, 30, "Argumentow: %d", ArgCount());
    ngetchx(); /* czekamy na wciśnięcie klawisza */

    InitArgPtr(argptr); /* inicjujemy wskaźnik */

    while ((argtype = GetArgType(argptr)) != END_TAG) {
        /* tym razem nie czyścimy całego ekranu,
        lecz niezbędny fragment */

        DrawStr(0, 30, " ", A_REPLACE);
        /* w zależności od typu argumentu wypisujemy
        go na ekranie w różny sposób */

        if (argtype == STR_TAG)
            DrawStr(0, 30, GetStrnArg(argptr), A_REPLACE);
        else if (argtype == POSINT_TAG || argtype == NEGINT_TAG)
        {
            numl = GetIntArg(argptr);
            if (argtype == NEGINT_TAG)
                numl = -numl;
            printf_xy(0, 30, "%ld", numl);
        } else if (argtype == FLOAT_TAG) {
            numf = GetFloatArg(argptr);
            printf_xy(0, 30, "%f", numf);
        } else {
            DrawStr(0, 30, "Nieznany typ argumentu!",
                A_REPLACE);
            ngetchx();
            break;
        }
        /* po wypisaniu każdego argumentu
        czekamy na naciśnięcie klawisza */

        ngetchx();
        }
    push_longint(numl); /* zwracamy wartość */
}

Zwracanie wartości jest o wiele prostsze. Wywołujemy funkcje push_<zwracany typ>. Przykład z programu to funkcja zwracająca long int – push_longint(), inne funkcje to push_Float(), push_ANSI_string(), push_expression(), itd. Pełna lista funkcji push_ znajduje się w pliku include/c/estack.h w katalogu, w którym zainstalowano TiGCC.

C i tryb graficzny

W pierwszym programie zastosowałem najprostszą metodę odtwarzania pamięci programu przez dołączenie do programu odpowiednich procedur (#define SAVE_SCREEN). Inną równie prostą metodą jest użycie kernela (#define USE_KERNEL), który wykona za nas czarną robotę. Do uruchomienia aplikacji korzystającej z kernela niezbędne jest zainstalowanie odpowiedniego programu rezydentnego (np. PreOS, DoorsOs, UniOs). Programy korzystające z mechanizmów udostępnianych przez kernel są mniejsze (nie zawierają np. procedur zapisywania i odtwarzania ekranu). O Wyczyszczenie ekranu zadbała funkcja clrscr(). Drugi program czyścił tylko fragment ekranu po którym pisał (DrawStr(0, 30, ”<spacje>”, A_REPLACE)). Jeśli nie było w tym miejscu napisu problemu nie ma, jednak gdy napiszemy na istniejącym już napisie jedynie wygląda to nie najlepiej – obszar między menu i linią wprowadzania danych jest przerysowywany gdy dodawana jest kolejna pozycja historii poleceń.




Pisanie po czystym ekranie
Pisanie po ekranie zawierającym napis


Jeszcze inną metodą jest zapisanie i odtworzenie stanu wyświetlacza LCD poprzez skopiowanie pamięci ekranu w inne miejsce i późniejsze jej przekopiowanie z powrotem. Realizujemy to funkcjami LCD_save() i LCD_restore(). Czyszczenie ekranu możemy wykonać przy użyciu dwóch wywołań memset() – jednego dla jaśniejszej i drugiego dla ciemniejszej składowej pixela. Ta technika zostanie użyta w trzecim programie. Prezentuje on kilka prostych sposobów rysowania (pojedynczych pixeli i lini).

TiGCC vs. TiBasic

Kalkulatory TI, mimo ich graficznych możliwości najczęściej używamy do wykonywania skomplikowanych obliczeń. Chciałbym pokazać przewagę wydajności funkcji napisanej w C (nad napisaną w Basicu) obliczającą wartość wielomianu Herite`a. Obliczenia te możemy przeprowadzić rekurencyjnie lub iteracyjnie. Ze względu na ograniczoną ilość pamięci i niewielką moc obliczeniową tych urządzeń wybrałem iteracyjny algorytm korzystający tylko z trzech zmiennych (nie wymagający użycia tablic). Wyniki tego testu wykazują największą zaletę języka C – świetnie nadaje się do hackowania. Optymalizacja GCC w połączeniu z świetnie poznanym przez programistów procesorem dała programowi w C dużą przewagę. Program w C w ciągu 30 sekund wykonał obliczenia 60000 razy gdy program w Basicu zdążył przeprowadzić te same obliczenia… niespełna 130 razy! Ten wynik powinien przekonać do używania języka C wszystkich tych, którzy pisanie programów pod Linuksem i kompilowanie ich kross-kompilatorem uważają za zbyt niewygodne.




Wielomian Herite`a


Podsumowanie

Możliwości kompilatora TiGCC już są spore, a projekt dynamicznie się rozwija. Biblioteka standartowa i TiGCC Tools Suite w każdej kolejnej wersji wyposażane są w nowe możliwości. Warto więc śledzić dalszy rozwój tego ciekawego narzędzia. Czytelnikowi proponuje zapoznać się z przykładowymi programami wchodzącymi w skład kompilatora. Można je znaleźć w katalogu $TIGCC/examples. Ciekawą lekturą mogą być także kody źródłowe programów publikowanych na zasadach licencji GNU GPL. Zachęcam do eksperymentów!

Pliki

Kod źródłowy przykładowych programów językach C i TiBasic oraz schematy blokowe algorytmów.

Przydatne adresy

15 thoughts on “Kalkulator programowalny Texas Instruments Voyage 200”

  1. Dzień dobry,
    mam pytania dotyczące kalkulatora TI Voyage 200, a właściwie jego współpracy z programem DERIVE zainstalowanym na komputerze. Chodzi mi oto, czy program napisany w Voyage, np. obraz fraktalu może zostać wykonany przez DERIVE? być może w jakimś innym programie? nie mogę sobie z tym poradzić. Z góry dziękuję za odpowiedź, MB

  2. @Marzena Bryksa: Niestety nie mam Derive’a. Nie sądzę aby Derive posiadał interpreter TiBasica (więc przenosić programów raczej się nie da), natomiast każdą funkcję typu f(x)=… można zapisać i przesłać do komputera. Po skopiowaniu jej do Derive powinna się ją dać narysować. Fraktali nie rysowałem. TiLP potrafi robić zrzuty ekranu, co być może umożliwi przeniesienie do komputera obrazu fraktala.

  3. Posiadam kalkulator TI-89 Titanium, czy może się on komunikować z TILP’em za pomocą kabla który jest z nim dostarczony w standarcie czyli zwykły usb – miniusb?

  4. Witam! mam troszkę inne pytanie odnośnie voyage 200 – nie wiem czy wybrać ten kalkulator czy może lepiej casio classpad 330? I jeszcze jedno – nigdzie nie mogę znaleść polskiego language pack’a dla voyage 200 (jeśli się na niego zdecyduję), ale oglądając screeny pochodzące z Pańskiego kalkulatora chciałbym się zapytać czy to Pańska modyfikacja os’a czy jednak można gdzieś znaleść spolszczenie

  5. Dla mnie Classpad jest raczej odpowiednikiem Ti-80. Ti-92 i V200 są o klasę wyżej, głównie ze względu na legendarny procesor Motoroli i klawiaturę QWERTY.

    Co do oprogramowania i polonizacji. Pliki z pakietami językowymi są dostępne do pobrania po zarejestrowaniu się na stronie producenta. Można tam też znaleźć dodatkowe oprogramowanie i aktualizacje systemu operacyjnego.

  6. Witam. Mam kalkulator TI-83 Plus. Widziałem kiedyś, że człowiek miał w komputerze program imitujący działanie GDC o interfejsie takim jak wygląd kalkulatora i o identycznych funkcjach pod aktywnymi klawiszami na ekranie. Czy taki program jest dostępny, gdzie i za ile?

  7. Jaki mógłby mi Pan polecić kalkulator programowalny firmy Texas. Kilkanaście lat temu miałem tej firmy i b. mi pasował. Głównie chodzi mi o obliczenia inżynierskie (geodezja). Fajnie by było gdybym mógł kupić z polską instrukcją obsługi. Pozdrawiam Leszek Wiatr

  8. Mam TI 92. Jest rewelacyjny. Niestety nie miałam tyle pieniędzy żeby sobie kupić wymarzony voyage 200, ale TI 92 też jest świetny. I od razu koledzy w pracy zaczęli mnie szanować :P Jeżeli ktoś się zastanawia między Casio 330, a TI to tak jakby się ktoś zastanawiał między Ferrari, a Mercedesem. Oczywiście Mercedes(Casio) jest dobrym samochodem i dobrze jeździ, ale to jednak nie Ferrari – TI.

    1. Niektóre programy instalują się wyłącznie w pamięci Flash ROM (pliki z rozszerzeniem *.9xk). Pozostałe programy (np. *.9xy) można przenieść do pamięci ROM wykonując na nich operację archiwizacji. Programy z komputera do kalkulatora można przesłać za pomocą dołączonego programu TI lub TiLP-a.

  9. Ile kosztuje programowalny kalkulator z możliwością podłączenia do komputera. Miałem kiedyś kalkulator programowalny CASIO lecz on nie miał możliwości podłączenia do komputera. Z chęcią zakupiłbym kalkulator programowalny z możliwością podłaczenia do komputera. Decyzję podejmę po uzyskaniu informacji na temat ceny oferowanego przez Państwo produktu.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.