forum speccy.pl
ZX Spectrum => PROGRAMOWANIE => Wątek zaczęty przez: pgru w 2018.04.27, 19:01:27
-
Czytałem http://speccy.pl/articles.php?article_id=49 (http://speccy.pl/articles.php?article_id=49)
Ale niestety mam problem z napisaniem programu ładującego. W przypadku Elwro pliki z dyskietki ładuje się używając:
load *"plik"
Gdzie plik to PLIK.PRG, czyli program ładujący w Basicu. Przeglądałem także istniejące przeniesione na obrazy dyskietek Elwro gry i programy w Basicu i tam(w programie PLIK.PRG) jest zazwyczaj fragment linijki ładującej w rodzaju
load *"plik"
, gdzie plik to na dyskietce PLIK.COD. Jak rozumiem to plik binarny identyczny z tym który generuje z88dk z rozszerzeniem .bin?
Niestety mój program ładujący po załadowaniu daje tylko biały ekran:
10 CLEAR VAL "32767": LOAD *"a"CODE : RANDOMIZE USR VAL "32768"
Mimo, że zmieniłem nazwę a.bin na a.COD
dla taśmy wygenerowany przez z88dk i działający wygląda tak:
10 CLEAR VAL "32767": LOAD ""CODE : RANDOMIZE USR VAL "32768"
-
Jesli plik nazywa sie a.cod to powinno byc chyba
LOAD*"a.cod" CODE
Tak by bylo w fdd3000
A Juniora nie znam.
-
Niestety zwraca, że błędna nazwa pliku jeśli użyje z rozszerzeniem .COD . Bez niego jest biały ekran...
-
@pgru A spróbuj dać
LOAD *"a"CODE 32768
Może w generowanym nagłówku brakuje ci adresu. A może plik bin w ogóle nie ma nagłówka, którego oczekuje system i który znajduje się w pliku COD? Spróbuj zapisać jakieś dane na dyskietce ze znanymi parametrami. Np.
SAVE *"test" CODE 32768,16384
To powinno ci zrzucić 16384 bajtów - jeśli plik COD z dyskietki przetransferujesz do peceta i będzie dłuższy to będzie znaczyło, że prawdopodobnie na początku jest jakiś nagłówek z informacją o adresie początkowym itp. bloku. Jeśli tak, to trzeba zajrzeć jak wygląda i na początek kodu dokleić te brakujące bajty.
-
Racja - plik TEST.COD zajmuje chyba więcej. Zapisany bez napisania programu. Pod Linuxem zajmuje 16512 bajtów. Natomiast na obrazie dyskietki od Elwro 18432. Szybkie podejrzenie w edytorze MC pokazuje, że w pliku są same 0 poza pierwszymi 17 hexami . Jest to konkretnie: 03 54 45 53 54 20 20 20 00 40 00 80 00 80. Po 03 jest to odpowiednik nazwy TEST + kilka spacji.
W ten sam sposób zapisaniu pliku o nazwie TES czyli TES.COD daje ten sam rezultat tylko nie ma 54, a w to miejsce jest 20 czyli spacja, a nazwa jest TES.
-
Dodałem ten nagłówek z TESE jako nazwą. Niestety nadal biały ekran, chociaż ładuje plik i wypisuje napis Bajty:teseb (zmieniony nagłówek).
Program startowy o nazwie teseb.prg :
10 CLEAR VAL "32767": LOAD *"tese" CODE 32768: RANDOMIZE USR VAL "32768"
-
Po obcięciu nagłówka do 03, nazwy TESE i kilku spacji zatrzymuje się na Bajty:tese.
Po zmianie programu ładującego i przedłużeniu startu (randomize USR) o nagłówek:
10 CLEAR VAL "32767": LOAD *"a"CODE : RANDOMIZE USR 32780
jest błąd - "O(lub 0) Zły strumień"
-
Chyba udało się poprawnie przenieść program - załączam obraz dyskietki i opis:
Uruchamianie
na dyskietce załadować program teseb (load czyli klawisz j potem * , "teseb")
potem run
program można zobaczyć poprzez naciśnięcie klawisza k przed run (czyli list)
ładuje TESE.COD
TESE.COD jest to plik binarny dla Elwro na dyskietkę powstały z połączenia
pod Linuxem w terminalu:
cat anagl.bin agl.bin > TESE.COD
agl.bin to program binarny wyciągnięty z obrazu taśmy ZX-Blockeditor
anagl.bin to nagłówek binarny wyciągnięty z obrazu taśmy ZX-Blockeditor (ten krótszy przed blokiem z programem a.bin)
TESE.COD został zmodyfikowany w edytorze hexów mc pod Linuxa.
Zamieniono w nim hexy z nagłówka(anagl.bin) na następujące:
03 54 45 53 45 20 20 20 20 20 20 16 4A 00 00 00
80
-------------
Prawdopodobne znaczenie wartości poszczególnych bajtów programu
03 - to oznaczenie programu
54 45 53 45 20 20 20 20 20 20 - to nazwa pliku .COD (TESE), ze spacjami na końcu
16 4A - gdzie prawdopodobnie 4A to bardziej znaczacy czyli wynik w hexach przetworzony na dziesiętny i mnożony razy 255 + 16 w hexach przetworzone na dziesiętny i dodane - długość zasadniczego programu.
00 00 - początek programu do uruchomienia w pliku binarnym
00 80 - klasyczna wartość dla Elwro, prawdopodobnie początek lub koniec położenia w RAM.
-
Hmmm.
https://faqwiki.zxnet.co.uk/wiki/Spectrum_tape_interface#Data_block