ZX Spectrum > PROGRAMOWANIE

LOADER "ukryty" BAS pytanie jak edytować? :-)

<< < (2/3) > >>

Thompson:
Linia BASICa z "wszczepionym" asemblerem nie jest bezpośrednio edytowalna. Zwykle robi się ją tak:

--- Kod: ---10 REM xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
--- Koniec kodu ---
i tyle 'x' ile potrzeba by zmieścić kod maszynowy loadera, czy tego co tam ktoś sobie zamierzył. Sam kod przepisuje się (albo basikiem, albo asemblerem) do pamięci bezpośrednio po słowie kluczowym REM w miejsce iksów, bazując na znajomości mapy pamięci Spectrum, w szczególności gdzie zaczyna się w pamięci program w BASICu i ile miejsca potrzeba  na numer linii i słowo kluczowe REM. Stąd biorą się potem "krzaczki" przy wyświetlaniu takiego kodu z BASICu.
Z kolei co robi kod schowany po REMie, to już zależy od fantazji twórców. Może to być fajny efekt, może być loader. Na pewno to nie jest jakiś skomplikowany programik, bo Spectrum ma ograniczenie na długość linii kodu w BASICu, więc za wiele nie da się tu zmieścić (choć można się pobawić w kod asemblera rozłożony na kilka linii kodu w BASICu, co czasami się zdarzało).

michalh:
Dzięki za wyjaśnienie, przymierzę się do Asemblera również  :)

matofesi:

--- Cytat: Thompson w 2023.10.11, 23:38:35 ---Na pewno to nie jest jakiś skomplikowany programik, bo Spectrum ma ograniczenie na długość linii kodu w BASICu, więc za wiele nie da się tu zmieścić

--- Koniec cytatu ---

A możesz to rozwinąć? Skąd niby to ograniczenie? Poza - oczywiście - niemożnością wpisania z ręki linii dłuższej niż jeden (niecały) ekran?

Pomijam oczywiście sensowność umieszczania w taki sposób większego kodu - musi być relokowalny i ma jeszcze trochę innych ograniczeń, ale skąd ograniczenie długości?

ZorrO:
Na CPC też sie podobne cuda robi, w dowolnej linii po apostrofie który działa jak REM, za pomocą POKE wstawia sie kod zero co sprawi że reszta linii z kaszanką nie będzie wyświetlona przy listowaniu. Widziałem też program z kodem w ostatniej linii. Jej numer zmieniono na 0 przez co nawet nr linii nie jest listowany, i choć edytor nie pozwala na tworzenie dłuższej linii Basica niż 255, to w pamięci jej długość jest zapisywana dwoma bajtami więc POKE może ją dowolnie wydłużyć, potem zapisać na dysku a dopiero edytorem dyskowym zmienić jej nr na 0, bo jeśli będzie taki przed komendą SAVE to tej linii z kodem nie zapisze. No i biada jeśli zmienisz długość którejkolwiek wcześniejszej linii to nawet jeśli kod jest relokowalny to początek kodu sie przesunie i wszystkie adresy w nim też. Więc takie rzeczy robi sie raczej w skończonym programie.

steev:

--- Cytat: matofesi w 2023.10.12, 08:51:32 ---
--- Cytat: Thompson w 2023.10.11, 23:38:35 ---Na pewno to nie jest jakiś skomplikowany programik, bo Spectrum ma ograniczenie na długość linii kodu w BASICu, więc za wiele nie da się tu zmieścić

--- Koniec cytatu ---

A możesz to rozwinąć? Skąd niby to ograniczenie? Poza - oczywiście - niemożnością wpisania z ręki linii dłuższej niż jeden (niecały) ekran?

Pomijam oczywiście sensowność umieszczania w taki sposób większego kodu - musi być relokowalny i ma jeszcze trochę innych ograniczeń, ale skąd ograniczenie długości?

--- Koniec cytatu ---

BASIC lines
Each BASIC line is stored as:

* 2 byte line number (in big-endian format)
* 2 byte length of text including NEWLINE (in little endian format, length "excludes" the line number and length, i.e. to skip between lines you add "length of text" +4 bytes.
* text (BASIC tokens)
* NEWLINE (0x76 on ZX80/81, 0x0D on Spectrum)
Czyli linia programu nie może przekroczyć, hmmm, 65531 bajtów? ;)
Natomiast nie wiem czy nie ma jakichś ograniczeń w samym interpreterze...

Nawigacja

[0] Indeks wiadomości

[#] Następna strona

[*] Poprzednia strona

Idź do wersji pełnej