forum speccy.pl

ZX Spectrum => PROGRAMOWANIE => Wątek zaczęty przez: pgru w 2018.04.27, 19:01:27

Tytuł: Z taśmy na dyskietkę?
Wiadomość wysłana 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"

Tytuł: Odp: Z taśmy na dyskietkę?
Wiadomość wysłana przez: tdu w 2018.04.27, 23:09:56
Jesli plik nazywa sie a.cod to powinno byc chyba
LOAD*"a.cod" CODE
Tak by bylo w fdd3000

A Juniora nie znam.
Tytuł: Odp: Z taśmy na dyskietkę?
Wiadomość wysłana przez: pgru w 2018.04.28, 09:15:51
Niestety zwraca, że błędna nazwa pliku jeśli użyje z rozszerzeniem .COD . Bez niego jest biały ekran...
Tytuł: Odp: Z taśmy na dyskietkę?
Wiadomość wysłana przez: matofesi w 2018.04.28, 22:08:54
@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.
Tytuł: Odp: Z taśmy na dyskietkę?
Wiadomość wysłana przez: pgru w 2018.05.06, 16:20:15
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.
Tytuł: Odp: Z taśmy na dyskietkę?
Wiadomość wysłana przez: pgru w 2018.05.06, 17:12:36
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"
Tytuł: Odp: Z taśmy na dyskietkę?
Wiadomość wysłana przez: pgru w 2018.05.06, 17:37:40
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ń"
Tytuł: Odp: Z taśmy na dyskietkę?
Wiadomość wysłana przez: pgru w 2018.05.06, 21:31:54
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.
Tytuł: Odp: Z taśmy na dyskietkę?
Wiadomość wysłana przez: steev w 2018.05.06, 22:40:59
Hmmm.
https://faqwiki.zxnet.co.uk/wiki/Spectrum_tape_interface#Data_block