kategoria: Blitz
[#1] Problem z zapisem plików na FDD w BlitzBasicu 2.1
Kończę finalną wersję swojej gry Master of Minefields z GameJamu24. Mam problem jednak z zapisem stanu gry do pliku na dysk (zarówno na WinUAE, jak i na prawdziwej Amidzej). Z zapisem na HDD i RAM nie ma problemu, ale gdy próbuje zapisać grę gdy startuję z dyskietki to zwiecha:

if OpenFile(0,"mom.save")=True
WriteMem 0,&save_mem_block,79
CloseFile 0
end if

Podobnie w przypadku próby zapisu do wskazanej ścieżki na DF0 (próbowałem już różnie kombinacje ścieżki z "/" i "\"):

if OpenFile(0,"DF0:mom.save")=True
WriteMem 0,&save_mem_block,79
CloseFile 0
end if

Prośba o pomoc, co mi może umykać....

Ostatnia aktualizacja: 12.03.2025 20:43:14 przez Reborn
[#2] Re: Problem z zapisem plików na FDD w BlitzBasicu 2.1

@Reborn, post #1

Zamiast DF0 wpisz nazwę dyskietki.
[#3] Re: Problem z zapisem plików na FDD w BlitzBasicu 2.1

@Reborn, post #1

Napiszę tak na szybko. Użyj bez OpenFile po prostu w trybie QAMIGA:
BSave "mom.save" , &save_mem_block , 79

Rozumiem, że 79 to ilość bajtów do zapisu?

Ostatnia aktualizacja: 12.03.2025 21:22:49 przez tukinem
[#4] Re: Problem z zapisem plików na FDD w BlitzBasicu 2.1

@tukinem, post #3

@tukinem

Dzięki! Spróbuję.

@Norber,

Również, dzięki! Tylko z nazwą dyskietki może to ograniczyć działanie, jak np. ktoś mieni nazwę dyskietki lub co planowałem - możliwość zapisu do jakiejkolwiek dyskietki, gdy grę uruchomi się z HDD lub CD.
[#5] Re: Problem z zapisem plików na FDD w BlitzBasicu 2.1

@Reborn, post #4

A jak ktoś nie ma DF0:. ?
Nazwa dyskietki jest lepsza, bo można ASSIGN przypisać do dowolnego katalogu , urzadzenia
[#6] Re: Problem z zapisem plików na FDD w BlitzBasicu 2.1

@Norbert, post #5

Dlatego podałem komendę z użyciem ścieżki pośredniej a nie bezpośredniej, bo zapisujemy plik do katalogu głównego, w którym się znajdujemy.
[#7] Re: Problem z zapisem plików na FDD w BlitzBasicu 2.1

@Reborn, post #1

WriteMem 0,&save_mem_block,79

Dziwny zapis, czym jest save_mem_block?
Jeśli zmienną z adresem to czemu &? Podwójny ptr?
Jeśli etykietą to powinno być z ?.
1
[#8] Re: Problem z zapisem plików na FDD w BlitzBasicu 2.1

@Norbert, post #5

A jak ktoś nie ma DF0:. ?
Nazwa dyskietki jest lepsza, bo można ASSIGN przypisać do dowolnego katalogu , urzadzenia

W 101% popieram. Program używający "DF0:" powinien automatycznie wpadać na czarną listę i nie przechodzić certyfikacji AmigaOS.
Przez takie "kwiatki" później użytkownik dwóch czy trzech stacji dysków nie mogą włożyć wszystkich dyskietek do osobnych stacji i używać całości, tylko muszą żonglować dyskietkami w pierwszej stacji, a pozostałe stacje stoją bezużyteczne. No i przede wszystkim (jak napisał Norbert) nie można sobie wrzucić plików gry gdzie się chce - HDD, RAM czy cokolwiek innego (AmigaOS pod tym względem jest bardzo elastyczny).

Amigowcy nigdy nie potrzebowali instalatorów na HDD, wystarczy żeby twórcy nie odwoływali się do DF0 tylko nazwy dyskietki. Wtedy każdy program (NDOSowych cudaków nie traktuję jak produkcji dla AmigaOS) będzie działał z HDD. To jest takie proste i skuteczne...

Ostatnia aktualizacja: 13.03.2025 12:49:27 przez MDW
1
[#9] Re: Problem z zapisem plików na FDD w BlitzBasicu 2.1

@tukinem, post #6

A PROGDIR: nie możesz zastosować. ?
Plik nagra się w miejsce w którego zostanie uruchomiona gra .
2
[#10] Re: Problem z zapisem plików na FDD w BlitzBasicu 2.1

@Norbert, post #9

Nie potrzeba wpisywać PROGDIR:

Tłumaczę, że to basic i uruchamiając program jesteśmy w katalogu, w którym znajduje się plik wykonywalny. Nie ma różnicy czy jesteśmy w DFx:, czy w RAM: bo to jest katalog bieżący.

Mógłbym zapisać nawet jako "DAT/plik.save" i wtedy zapisze do podkatalogu DAT dany plik. Tu tylko kwestia taka, że ten podkatalog już musi być utworzony.

@Cholok: To nazwa zmiennej. Skoro uruchamiany bez bootowania działa, tzn. że mem_save_block to po prostu zmienna. Znak "&" to wskaźnik zmiennej. Czyli przykładowo zmienna a=2, ale &a to już adres pamięci, pod którym jest ta zmienna. Wtedy możemy ją zmienić na różne sposoby:
a = 5

Poke &a,5


Ostatnia aktualizacja: 13.03.2025 13:37:03 przez tukinem
1
[#11] Re: Problem z zapisem plików na FDD w BlitzBasicu 2.1

@tukinem, post #10

Ja to wiem i dlatego nie widzę powodu takiego użycia. Skoro podaję adres zmiennej jako początek zapisu to zostanie zapisane jej zawartość oraz kilkadziesiąt bajtów poza zmienną. Ewidentny błąd albo ja czegoś nie wiem.
Jeśli np. a=34567, czyli ustalony adres to powinno być:
WriteMem 0,a,79

a nie
WriteMem 0,&a,79
1
[#12] Re: Problem z zapisem plików na FDD w BlitzBasicu 2.1

@cholok, post #11

Myślałem, że to tylko nazwa zmiennej i dlatego autor wpisał &save_mem_block.

Racja przecież to zapis 79 bajtów nie myślę heh. Czyli bez znaku & powinno być

Ostatnia aktualizacja: 14.03.2025 00:42:46 przez tukinem
1
[#13] Re: Problem z zapisem plików na FDD w BlitzBasicu 2.1

@tukinem, post #12

Dzięki wszystkim za pomoc i rady!! Gdzieś na sieci znalazłem gotowy kod z wykorzystaniem WriteMem i właśnie referencją, a że mi zadziałało bez problemów przy zapisanie na HDD i RAM to założyłem, że jest poprawnie. Teraz jak sprawdzam manual do BlitzBasica to widzę:

WriteMem file#,address,length

Czyli, jak dla mnie bardziej z "&", ale o dziwo... działa z i bez "&"

W każdym razie namierzyłem błąd... zakomentowałem QAmiga... i powrót do Blizt. głową w mur I tutaj, przynajmniej dla mnie kolejne zdziwienie bo mi bez problemów zapisywał na HDD i RAM... będąć w trybie Blitz , dopiero zwiechy były jak startowałem z dyskietki i była próba zapisu stany.

Co do zapisie na "DF0" wiem, że to nieeleganckie i tak się nie powinno, ale to taki wytrych, który przewidziałem pod kątem wersji na stockową CDTV (w wesji OCS/ECS), jak ktoś będzie chciał zapisywać sobie stany. Ew, jak ktoś ma podobne ograniczenia, że nigdzie indziej nie zapisze. Wszystkie pozostałe ścieżki do plików są względne i domyślnie zapis jest do pliku w katalogu gry, a dodatkowo opcje do zmiany do RAMu, NVRAMu dla CD32 i właśnie DF0. Jak uda mi się w BlitzBasicu wykorzystać bookmark.library to dla CDTV i A570 będzie zapis w dedykowanej przestrzeni pod zapisy gier (podtrzymany bateryjnie SRAM CDTV, karty 1401/5, EEROM na A570).
[#14] Re: Problem z zapisem plików na FDD w BlitzBasicu 2.1

@Reborn, post #13

Czyli, jak dla mnie bardziej z "&", ale o dziwo... działa z i bez "&"

Zadziałać zadziała, tylko co zapisało?

Ostatnia aktualizacja: 15.03.2025 22:08:59 przez cholok
[#15] Re: Problem z zapisem plików na FDD w BlitzBasicu 2.1

@Reborn, post #13

Ważne, że problem rozwiązany, bo idzie się pomylić.

W trybie BLITZ nie zapiszesz niczego bo systemowa obsługa dysku i dyskietek jest wyłączona. Chyba że zrobisz skok do innej części kodu, która jest w trybie QAMIGA/AMIGA i wtedy zachowa się kolejność, ale to właśnie może powodować buble. Trzeba pilnować zmian tych trybów, a szczególnie to się mści gdy piszesz pod kickstart 1.3/1.2. Taki przykład:

BLITZ

MAINLOOP:
While...
If Rawstatus($21)
   Gosub ZAPISZ
EndIf
Wend

QAMIGA

ZAPISZ:
BSave plik$ , *dane , saveSize
Return


Po skoku do zapisu pliku dalej jesteś w trybie BLITZ, bo po drodzie nie napotkałeś zmiany na QAMIGA, natomiast przy kompilacji nie wywali błędu bo komenda zapisująca BSave znajduje się w QAMiGA jadąc od góry kodu. Zmiana trybu powinna być w obrębie podprogramu ZAPISZ, przed Return powinien być powrót do trybu BLITZ.

Ostatnia aktualizacja: 15.03.2025 23:54:56 przez tukinem
[#16] Re: Problem z zapisem plików na FDD w BlitzBasicu 2.1

@tukinem, post #15

Dzięki! Tak właśnie finalnie zrobiłem, że w ramach SubRoutine zapisu, wchodzę w QAmiga i przed wyjście wchodzę z powrotem w Blitz. Wcześniej też to miałem i zakomentowałem, a zmyliło mnie, że zapis na HDD działał.

Wygląda mi na, że przynajmniej przez WriteMem pod kickstartem 3.1 można zapisać na HDD i RAM bez wyjścia z Blitz. Nie, żeby w tego korzystać ale taka ciekawostka.

@cholok

Potwierdzam, że poprawnie odczytuje mi dane, które zapiszę WriteMem niezależnie czy z "&" i bez... jak dla mnie kolejna ciekawostka, jak ciekawy jest kompilator BB2.1
[#17] Re: Problem z zapisem plików na FDD w BlitzBasicu 2.1

@Reborn, post #16

Aż sobie sprawdziłem na szybko:
a=AllocMem(10,0)
If a
  Poke$ a,"abcdefghij"
  NPrint a
  NPrint &a
  NPrint Peeks$(a,1)
  If OpenFile(0,"dh0:xyz")=True
    WriteMem 0,a,10
    CloseFile 0
  EndIf
EndIf

No jest różnica, ale rób sobie jak chcesz.
Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem