1

Czy ktos z Was bawil sie w wywolywanie Basica lub TurboBasica z poziomu kodu maszynowego ?

Czy możliwe jest umieszczenie programu w Basicu (TurboBasicu) w postaci ztokenizowanej czy innej,
w konkretnym miejscu pamieci i uruchomienie interpretera Basica (TurboBasica) z ROM-u
czy tez RAM-u (po uprzednim podaniu mu adresu programu), a potem powrot do programu który
wywołał interpreter ?

W jakich obszarach pamieci nalezaloby umieszczac programu w Basicu (TurboBasicu),
($2000-$9FFF) ?

Czy interpreter Basica (TurboBasica) modyfikuje obszar w ktorym znajduje sie
ztokenizowany program, czy używa tylko strony zerowej ?

*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

2

Obszar pamięci, w który znajduje się program w BASIC-u jest wg. mej wiedzy intensywnie modyfikowany, bo program w BASIC-u razem z tablicami zmiennych, stosem bieżącym itd. ma strukturę stosu i interpreter dynamicznie sobie z tą strukturą poczyna, nawet przepisując pewne jej części to w górę to w dół.

Uruchomienie stokenizowanego programu w BASIC-u jest od biedy możliwe - umie to chyba np. DOS 2.5 o ile pamiętam - ale powrót do miejsca wywołania raczej nie bardzo. W każdym razie nie przez RTS, bo interpreter raz że działa w pętli, a dwa że dość chętnie robi LDX #$FF / TXS.

Ale może by się dało ustawiając DOSVEC odpowiednio i dbając o to, żeby na końcu programu była komenda "DOS".

KMK
? HEX$(6670358)

3

aha, to jednak daruje sobie Basic :)

*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

4

o. raz TeBe powiedział coś mądrego ;)

: 404. Stopka not found

5

Ale może by się dało ustawiając DOSVEC odpowiednio i dbając o to, żeby na końcu programu była komenda "DOS".

To w zupełności wystarczy, by wrócić z programu w Basicu czy Turbo Basicu.

Z tego co padałeś wynika, że da się uruchomić program, tylk onie ma gwarancji, że Basic takim miąchaniem go gdzieś nie nadpisze. Z drugiej strony programy w Basicu ładowane są w najniższych lokacjach pamięci, ale nie sztywno określonych. Wniosek stąd, że program w Basicu może być umiezczony w dowolnym miejscu pamięci. W razie kłopotów wywali Error 2 (brak pamięci). Przynajmniej tak powinien się zachować teoretycznie.

[ Dodano: 04.01.2005 02:14:09 ]
A tak się ma +1 do statsów na AA i Mistrza offtopicu. :mrgreen:

Zawsze mam rację, tylko nikt mnie nie słucha.

6

Program może być umieszczony dowolnie, on nawet zawiera wartości wektorów BASIC-a, jakie trzeba ustawić na stronie zerowej (w konwencji "wartość wektora minus MEMLO"). Na koniec obszaru zajmowanego przez program w BASIC-u musi też wskazywać wektor APPMHI ($0e/f bodajże). Co do miąchania, wiadomo że DIM A$(16384) zajmie 16k pamięci, a CLR tę pamięć zwolni, więc trzeba się liczyć przynajmniej z takim zapotrzebowaniem, ale najbezpieczniej byłoby zostawić wolne miejsce od APPMHI do MEMTOP-u ...

TeBe a po co ci to w ogóle?

KMK
? HEX$(6670358)

7

Czy możliwe jest umieszczenie programu w Basicu (TurboBasicu) w postaci ztokenizowanej czy innej,
w konkretnym miejscu pamieci i uruchomienie interpretera Basica?

Na stronie 6. opracowania z cyklu "Mapa Pamieci Atari XLXE", "Procedury Interpretera Basica" - znajduje sie szczegolowy opis rozmieszczenia w pamieci RAM danych programu w basicu.

Program w jezyku Basic jest zapisywany poczawsy od (...) MEMLO.

Struktura programu Basica:
bufor tokenizacji (256 bajtow)
tablica nazw zmiennych
tablica wartosci zmiennych
tablica instrukcji (wlasciwy program w postaci stokenizowanej)
tablica zmiennych indeksowych
stos biezacy

Wszystkie wymienione wyzej bloki programu sa ruchome, a ich aktualne adresy znajduja sie w rejestrach RAM na stronie zerowej.

Fragment z opisu intrukcji SAVE (str.171)

Procedura SAVE (...) realizuje zapisanie programu w dwoch etapach. W pierwszym etapie zapisywane sa wzgledne wartosci wektorow stosowanych przez interpreter (LOMEM... STARP). (...) Czyni to program calkowicie relokowalnym i pozwala na zainstalowanie przed odczytem programu DOS-u lub dodatkowych procedur pomocniczych w jezyku maszynowym (tzw. akcesoriow).
W drugim etapie zapisywana jest cala tresc programu wraz ze zmiennymi (tablica nazw zmiennych, tablica wartosci zmiennych i tablica instrukcji).

$80 - LOMEM - wektor bufora wejsciowego tokenizacji
$82 - VNTP - wektor poczatku tablicy nazw zmiennych
$84 - VNTD - wektor konca tablicy nazw zmiennych
$86 - VVTP - wektor poczatku tablicy wartosci zmiennych
$88 - STMTAB - wektor poczatku tablicy instrukcji
$8A - STMCUR - wektor aktualnie wykonywanego wiersza
$8C - STARP - wektor tablicy zmiennych tablicowanych
$8E - RUNSTK - wektor stosu biezacego Basica
$90 - BMEMHI - koniec obszaru pamieci zajetego przez Basic

8

Wszystkie wymienione wyzej bloki programu sa ruchome, a ich aktualne adresy znajduja sie w rejestrach RAM na stronie zerowej.

No właśnie, egzaktli.

KMK
? HEX$(6670358)

9

o. raz TeBe powiedział coś mądrego

:mrgreen:

FAQ: Cegła waży kilogram i pół cegły. Ile ważą dwie cegły ? :D

JIL 4EVER!