_================================== # TOBOS-DYD # # PAKIET ZAWIERAJĄCY KOMPILATOR # #________ TOBOS FP V2.0 _________# -- INSTRUKCJA SKRÓCONA ------------------------------------- 1.Załadować pakiet TOBOS-DYD 2.Załadować własny program w Basicu 3.Kompilacja : RANDOMIZE USR 53100 4.Uruchomienie : RANDOMIZE USR (RAMTOP+1) (standardowo 40000) Dostępne są polecenia narzędziowe : AUTO, DELETE, RENUMBER, FILL, PRINT CSIZE. W obszarze UDG zdefiniowane są polskie litery dostępne w trybie GRAPHICS : A B C D E F G H K L M N O P R S T U ą Ą ć Ć ę Ę ź Ź Ł ł Ń ń ó Ó Ś ś ż Ż ____________________________________________________________ __ INFORMACJE OGÓLNE _______________________________________ TOBOS FP kompiluje prawie wszystkie instrukcje Basica, operuje własnymi procedurami arytmetycznymi co znacznie przyspiesza wykonywanie programów. Kompilatora można używać na etapie uruchamiania i testowa- nia programów, co znacznie przyspiesza proces tworzenia programu. Udoskonalenia w stosunku do poprzednich wersji ----------- 1.Akceptuje LOAD/SAVE/VERIFY z opcją CODE i SCREEN$ Istnieje możliwość wczytywania i nagrywania tablic. 2.Nowa biblioteka arytmetyczna, zoptymalizowany dostęp do tablic numerycznych. 3.Możliwość wejścia do programu bez niszczenia zmiennych (ciepły start), oraz w pewnych wypadkach możliwość konty- nuacji przerwanego programu. 4.CIRCLE wykonuje się cztery razy szybciej. ____________________________________________________________ __ INSTRUKCJA OBSŁUGI ______________________________________ 1.Wczytywanie i uruchomienie ------------------------------- Po wczytaniu pakietu kompilator zajmuje obszar od 50740 do 65535, w obszar UDG zostają wczytane polskie znaki, RAMTOP jest obniżony do 39999. W procesie kompilacji (USR 53100) kod wynikowy jest umieszczany od adresu RAMTOP+1 w górę. O ile kompilacja przejdzie bezbłędnie (nie pojawi się komunikat o błędzie) kompilator wypisuje adres startowy ADR oraz długość kodu wynikowego DLUG, a u dołu pojawi się komunikat 0 OK, a,b (a,b - nr.ostatnio kompilowanej linii i instr.) Skompilowany program uruchamiamy RANDOMIZE USR ADR, lub nagrywamy na taśmę SAVE "nazwa"CODE ADR,DLUG 2.Ograniczenia i udoskonalenia kompilatora ----------------- Kompilator nie akceptuje instrukcji: a)związanych z obsługą microdrive i dysku ( OPEN#,CLOSE#, MOVE,ERASE,FORMAT); b)LOAD/SAVE/VERIFY z opcją różną od CODE (wczytywanie i nagrywanie tablic jest realizowane inaczej niż normalnie); c)CONTINUE (kontynuacja jest realizowana inaczej); d)CLEAR nn (CLEAR ze zmianą RAMTOP, CLEAR bez parametru jest akceptowany) Udoskonalono realizację funkcji definiowalnych np.: 10 DEF FN a(x,y)=x+y 20 PRINT FN a(FN a(2,3),FN a(4,5)) podaje poprawną wartość 14 (Spectrum Basic podaje 13). Wszystkie pozostałe instrukcje są prawidłowo realizowane przez kompilator z uwzględnieniem wszystkich możliwych formatów. Kompilator zapisuje liczby w czterobajtowym formacie zmiennopozycyjnym, stąd wszystkie wyniki liczbowe są druko- wane z dokładnością 7 cyfr. 3.Błędy kompilacji ----------------------------------------- Podawany jest nr. linii i instr. w której błąd wystąpił - NONSENSE IN BASIC - została użyta niedozwolona instrukcja - OUT OF MEMORY - w czasie tworzenia kodu wynikowego zabra- kło miejsca w pamięci. W pkt. 6 i 7 podano co wtedy robić. - VARIABLE NOT FOUND - w programie brak jest deklaracji danej zmiennej (czyli instrukcji DIM dla tablic, lub instru- kcji FOR, LET, INPUT, READ dla zmiennych prostych) - RAMTOP NO GOOD - rzadko występuje na etapie kompilacji. - POZOSTAŁE BŁEDY - mają ten sam sens jak normalnie. 4.Błędy w czasie wykonywania programu ---------------------- Podawany jest nr. linii i instr. w której błąd wystąpił - RAMTOP NO GOOD - należy zwiększyć RAMTOP instrukcją CLEAR nn. Przykładowo, jeśli RAMTOP miał wartość 34099, to należy wykonać CLEAR 34199 (z reguły dodanie 100 bajtów umożliwia dalszą bezbłędną pracę). - VARIABLE NOT FOUND - dana zmienna nie jest zadeklarowana. Nie dotyczy to zmiennych prostych numerycznych, których wartości są inicjowane na zero. - POZOSTAŁE BŁĘDY - pokrywają się z interpreterem. 5.BREAK, CONTINUE, GO TO 0 --------------------------------- Program można przerwać w dowolnym momencie. O ile program został przerwany podczs LOAD/SAVE/VERIFY to RANDOMIZE USR 52575 spowoduje kontynuację wykonywania programu, w innych przypa- dkach program może działać nieprawidłowo. Można kontynuować działanie programu który zatrzymał się na instrukcji STOP. Zawsze można zastosować ciepły start tzn. uruchomić program od pierwszej instrukcji bez niszczenia zmiennych RANDOMIZE USR 52585 (odpowiada to instrukcji GO TO 0) UWAGA: NIE MOŻE TO BYĆ PIERWSZE URUCHOMIENIE PROGRAMU! Jeżeli w skompilowanym programie znajdzie się instrukcja GO TO 10000 to nastąpi powrót do programu nadrzędnego (z którego skompilowany program został wywołany). Można wielokrotnie wywoływać skompilowany program z progra- mu nadrzędnego przez USR 52585, a w programie nadrzędnym umieścić te operacje, których nie można wykonać w skompilo- wanym programie (np. współpracę z dyskami, microdrive, itp.) 6.OUT OF MEMORY -------------------------------------------- Komunikat ten może pojawić się podczas: - ładowania programu z taśmy - kompilacji - wykonywania skompilowanego programu (najczęściej przy próbie wykonania instrukcji DIM) W takich przypadkach należy stwierdzić co jest przyczyną błędu i jak najlepiej go uniknąć. ---Najprostszą metodą jest przesunięcie RAMTOPu (CLEAR nn) w górę lub w dół w zależności od tego w którym obszarze następuje przepełnienie. ---Można skorzystać z opcji powodującej tworzenie krótszego kodu podczs kompilacji. Wykonując POKE 53252,0 uzyskujemy tzw. kompilację bez numerów linii.Kod wynikowy jest krótszy o ok.15 % i wykonuje się nieco szybciej, ale ewentualne komunikaty o błędach nie dają poprawnych numerów linii. Kompilację z numerami przywraca się przez POKE 53252,55 ---Można również skorzystać z programów skracających kod źródłowy (np. MASTER TOOLKIT, SUPERCODE, COMPACT) ---Jeśli OUT OF MEMORY wystąpi w wykonującym się programie, to można przesunąć skompilowany program w inne miejsce, gdyż tworzony przez kompilator kod wynikowy jest przesuwalny W pewnych wypadkach jednak (instrukcje INPUT, VAL, VAL$ i innych) może się zdarzyć koniecznosć przesunięcia programu w górę. Częściej jednak musimy przesuwać program w dół dając w ten sposób więcej miejsca podczas wykonywania instrukcji DIM, czasem LET, VAL i innych. W szczgólności można nagrać kod wynikowy na taśmę, usunąć program w Basicu za pomocą NEW, wykonać CLEAR 24099 a następnie za pomocą LOAD""CODE 24100 wczytać kod od adresu uprzednio nagrany kod wynikowy. Program uruchamiamy za pomocą RANDOMIZE USR 24100. Taki zabieg daje dodatkowe 15 KB pamięci dla programów, które wykorzystują duże tablice, lub długie łańcuchy. 7.Duże programy -------------------------------------------- Standardowo podczs kompilacji nie jest niszczony program żródłowy. Jednakże, jeżeli mamy do czynienia z programem zajmującym więcej niż 12 KB, to jest mało prawdopodobne, aby kod wynikowy zmieścił się w wolnej pamięci. Programy długie, nawet do 25 KB, można kompilować wykorzystując opcję niszczenia programu żródłowego podczas kompilacji (kod wynikowy jest ładowany na miejsce kompilowa- nego programu żródłowego) oraz częściowo wykorzystuje pamięć ekranu w pierwszej fazie kompilacji. Opcję uruchamiamy wykonując : POKE 53240,0 a wyłączmy przez : POKE 53240,55 Wartość RAMTOPu nie ma tu znaczenia o ile program żródło- wy mieści się w pamięci, i RAMTOP jest mniejszy od 50739, gdyż kompilator sam ustala optymalne położenie RAMTOPu po uruchomieniu kompilacji. Po zakończeniu kompilacji RAMTOP jest ustawiany instrukcją CLEAR 24099, a kod wynikowy zajmujący pamięć od adresu 24100 uruchamiamy pisząc RANDOMIZE USR 24100. Wskazane jest równoczesne użycie opcji kompilacji bez numerów linii (patrz pkt 6). 8.Uwagi ---------------------------------------------------- a)Skompilowany program można wywołać z dowolnego innego programu. b)Istnieje możliwość ustalenia adresu, od którego będzie tworzony kod wynikowy w przypadku kompilacji bez niszczenia programu. Do tego celu służą komórki 58112 i 58113. Jeżeli obie zawierają 0, to kod wynikowy jest tworzony od RAMTOP+1. W pozostałych wypadkach ich zawartość będzie traktowana jako adres początku tworzonego kodu wynikowego tzn. ADRES=PEEK 58112+256*PEEK 58113. Ważne jest, aby adres ten był większy od RAMTOPu i nie przekraczał adresu 50740. Obszar od RAMTOPu do tego adresu można wykorzystać do celów specjalnych np. do przechowywa- nia danych lub programów w kodzie maszynowym. c)można dopisać do programu 1 IF 1/888.5 THEN RANDOMIZE USR 53100: RANDOMIZE USR ADR: STOP 2 ...(tekst programu) wówczas instrukcja RUN od razu wywołuje kompilcję i przechodzi do wykonywania skompilowanego programu. d)Skompilowany program korzysta z procedur zawartych w obszarze kompilatora. Dlatego, w trakcie wykonywania skompilawanego programu, całość kompilatora musi znajdować się w pamięci komputera. e)Komórki 55631 i 55632 zawierają informację o adresie, od którego jest tworzony kod wynikowy przy kompilacji ze zniszczeniem programu żródłowego (patrz pkt 7), czyli standardowo PEEK 55631+256*PEEK 55632=24100 9.Nagrywanie i wczytywanie tablic -------------------------- Komórka o adresie 52502 służy do przechowywania jednolite- rowej nazwy tablicy, na której chcemy dokonać operacji. Komórka o adresie 52503 przechowywany jest typ tablicy: 132 - tablica numer. 130 - tablica łańcuchowa Dwa programy w kodzie maszynowym zwracają parametry tablicy: USR 52504 - adres początkowy tablicy USR 52525 - długość tablicy Przykładowo jeżeli chcemy przechować tablicę tablicę numery- czną o nazwie a, to wykonujemy: 10 POKE 52502,CODE "a" 20 POKE 52503,132 30 SAVE "nazwa" CODE USR 52504, USR 52525 Podobne operacje należy wykonać przy wczytywaniu i weryfika- cji tablic. UWAGA:Przy wczytywaniu tablicy w pamięci musi być zadeklaro- wana dokładnie taka sama tablica jak wczytywana (typ, liczba wymiarów, poszczególne wymiary). Położenie tablicy w pamięci może się zmieniać, dlatego przy wczytywaniu tablicy wskazane jest podanie jawnie obydwu parametrów tablicy tzn. LOAD ""CODE USR 52504,USR 52525 a nie tylko LOAD ""CODE. Istnieje również możliwość wczytywania i nagrywania tablic z wykorzystaniem pamięci dyskowej. W tym celu należy przerwać wykonywanie skompilowanego programu (patrz pkt 5), a następnie wykonać operację na tablicy z poziomu Basica np. 10 POKE 52502,CODE "a" 20 POKE 52503,132 30 SAVE *"nazwa" CODE USR 52504, USR 52525 UWAGA:Ważne jest, aby przerwać wykonywanie programu w taki sposób, by móc następnie kontynuować wykonanie przerwanego programu (patrz pkt 5). ____________________________________________________________ ___ POLECENIA NARZĘDZIOWE I INNE ___________________________ Polecenia narzędziowe są aktywne po wczytaniu pakietu, tak długo, dopóki nie zostanie wykonana instrukcja NEW. W takim wypadku możemy ponownie uaktywnić te polecenia za pomocą RANDOMIZE USR 50740. 1.Polecenie STEP a,b (Auto) powoduje automatyczną numerację linii przy edycji wyłączenie przez skasowanie linii będącej w edycji. 2.Polecenie LINE a,b (Renumber) przenumerowanie całego programu. Etykiety instrukcji GO TO, GO SUB, RESTORE, RUN, LIST, LLIST są również odpowiednio zmieniane, o ile etykietą jest pojedyńcza liczba (nie wyrażenie arytmetyczne). Pisząc : LINE 100,10 (LINE początek,krok) uzyskamy przenumerowanie programu tak, że pierwsza linią będzie linia o numerze 100 a odstęp pomiędzy dwoma kolejnymi liniami będzie wynosił 10. 3.Polecenie NOT a,b (Delete) kasowanie linii programu od a do b. Obszar zmiennych nie jest kasowany. UWAGA:Wszystkie polecenia wymagają podania 2 parametrów. A.ZAMALOWYWANIE FIGUR ZAMKNIĘTYCH Algorytm jest wzorowany na programie ZAMALUJ (Roland Wacławek Komputer 1/86). W celu zamalowania figury podajemy najpierw współrzędne punktu startowego: 10 POKE 23728,(współrzędna x) 20 POEK 23729,(współrzędna y) 30 RANDOMIZE USR 51847 (wypełnianie plamą) 51850 (wypełnianie siatką) 51856 (usuwanie obszaru) B.DUŻE NAPISY Algorytm jest wzorowany na programie z kasety HORIZONS. W celu wydrukowania napisu ze zmiennej d$ należy: 9800 LET A=23306: POKE A,X: POKE A+1,Y: POKE A+2,XS POKE A+3,YS: POKE A+4,W: LET A=A+4: FOR I=1 TO LEN D$ : POKE A+I,CODE D$(I): NEXT I: POKE A+I,255: RANDOMIZ E USR 51972 X,Y - współrzędne pixelowe pierwszego znaku XS,YS - x-owy i y-owy rozmiar znaków W - odstęp między znakami (najepiej w=8) ____________________________________________________________ ___ WAŻNE ADRESY W PAKIECIE TOBOS-DYD ______________________ 50740 - pocz., uaktywnianie poleceń narzędziowych 51847 - wypełnianie plamą 51850 - wypełnianie siatką 51856 - usuwanie obszru 51972 - drukowanie dużych napisów 52502 - nazwa tablicy 52503 - typ tablicy (132 - numeryczna, 130 - łańcuchowa) 52504 - prpcedura podająca adres początkowy tablicy 52525 - procedura podająca długość tablicy w bajtach 52575 - CONTINUE 52585 - GO TO 0 (ciepły start) 53100 - Uruchomienie kompilacji 53240 - 0-niszczenie programu żródł, 55-bez niszczenia 53252 - 0-bez numerów linii 55-z numerami linii 55631/55632 - adres kodu wyn. przy niszczeniu programu 58112/58113 - adres kodu wyn. bez niszczenia programu