[#241] Re: Dewelopment gry Sołtys

@mailman, post #239

Mozliwe, ze mailman ma racje.
$02 to bylby znacznik poczatku nazwy katalogu a $FF lub $FF05 znacznik konca nazwy katalogu.

Edycja, ale to sprawdz to, bo ja za dobrze nie widze. Mozesz inne katalogi porobic.

Ostatnia aktualizacja: 12.01.2025 12:55:32 przez Don_Adan
[#242] Re: Dewelopment gry Sołtys

@Don_Adan, post #240

Każde archiwum ze spakowanym jednym katalogiem ale o innej nazwie tak?

Zrobiłem każde archiwum z plikiem TXT w katalogu głównym i dodatkowo w podkatalogu kolejno raz nazwanym DAT, w drugim archiwum jako DATA i w trzecim archiwum DATA1.

katalog DAT:

katalog DATA:

katalog DATA1:


Ostatnia aktualizacja: 12.01.2025 13:10:05 przez tukinem
[#243] Re: Dewelopment gry Sołtys

@tukinem, post #242

Ok, teraz widze. To jest znacznik. Nie ma jako takiej podanej dlugosci nazwy katalogu.
02 poczatek
ff koniec
czyli kopiujesz nazwe katalogu az natrafisz na -1 (ff).
[#244] Re: Dewelopment gry Sołtys

@Don_Adan, post #243

02 może też oznaczać rozmiar - 2 bajty.

Spróbujcie spakować ten sam plik bez katalogu i z katalogiem o jednoliterowej nazwie. Sądzę, że długość tego drugiego archiwum powiększy się o 4 bajty (2 bajty rozmiaru + jednoliterowa nazwa + znacznik końca).
[#245] Re: Dewelopment gry Sołtys

@mailman, post #244

Sam sprawdziłem - powiększyło się o 2 bajty, a dwuliterowego katalogu - 3 bajty.


Ostatnia aktualizacja: 12.01.2025 13:45:39 przez mailman
[#246] Re: Dewelopment gry Sołtys

@mailman, post #245

Szczerze to już się pogubiłem w tym wszystkim. Narobię tylko dziadostwa a potem będą narzekania że komuś instalator nie trybi... nie mam jakoś cierpliwości i nie potrafię tego rozszyfrować.
[#247] Re: Dewelopment gry Sołtys

@mailman, post #245

Już powoli zaczynam rozumieć jak to działa. Sporo zbędnych danych mogę omijać tutaj (checksum header i time/date).

Porównuję sobie z linkami do struktury LHA, które przesłał DonAdan i już powoli to zaczynam rozumieć. Ty też masz rację co do bajtu File Atribute. $00 to plik w katalogu głównym, a $02 to plik w podkatalogu.

Faktycznie nazwa podkatalogu zawsze jest pomiędzy $02 a $ff.

Muszę na spokojnie do tego przysiąść bez pośpiechu. Nie mam tyle talentu co inni więc na spokojnie jeszcze raz muszę zacząć z tym.

Sołtys akurat nie ma tego problemu, ale może się też kiedyś zdarzyć, że plik będzie w podkatalogu, który sam będzie podkatalogiem, np /DAT/LEVEL1 i wtedy znowu odczyt może się zmienić. Ciekawe jak takie zjawisko LHA traktuje.
[#248] Re: Dewelopment gry Sołtys

@tukinem, post #246

; A0 at even address
  tst.b  (A0)
  beq.b  quit
  cmp.l  #"-lh0",2(A0)
  bne.b  quit
  moveq  #0,D7
  move.b (A0),D7
  lea    2(A0,D7.W),A3  ; pointer to file data, if no subdirectory
  move.b 7(A0),D1
  ror.l  #8, D1 ;obrot w prawo o 8 bitow, czyli o bajt
  move.b 8(A0),D1
  ror.l  #8, D1 ;obrot w prawo o 8 bitow, czyli o bajt
  move.b 9(A0),D1
  ror.l  #8, D1 ;obrot w prawo o 8 bitow, czyli o bajt
  move.b 10(A0),D1
  ror.l  #8, D1 ; skip size

  move.b 11(A0),D0
  ror.l  #8, D0 ;obrot w prawo o 8 bitow, czyli o bajt
  move.b 12(A0),D0
  ror.l  #8, D0 ;obrot w prawo o 8 bitow, czyli o bajt
  move.b 13(A0),D0
  ror.l  #8, D0 ;obrot w prawo o 8 bitow, czyli o bajt
  move.b 14(A0),D0
  ror.l  #8, D0 ; file size
  move.b 21(A0),D7 ; length of file name
  lea    22(A0),A2  ;  pointer to file name
  sub.l  D0,D1
  beq.b  CopyName
  add.l  A3,D1
  cmp.b  #2,(A3)+
  bne.b  quit
 CopyPath
  move.b (A3)+,(A1)+
  cmp.b  #-1,(A3)
  bne.b CopyPath
  move.b #"/",(A1)+   ; insert slash
  move.l D1,A3
CopyName
  move.b (A2)+,(A1)+
  subq.b #1,D7
  bne.b  CopyName

quit
  rts
[#249] Re: Dewelopment gry Sołtys

@Don_Adan, post #248

Jak nie zrobilem bledu, co malo prawdopodobne.
Bo z glowy wszystko pisalem.
To cos takiego moze zadzialac.

Jak masz jakies pytania to dawaj. Poki pamietam o co mi chodzilo.

Ostatnia aktualizacja: 12.01.2025 20:22:37 przez Don_Adan
[#250] Re: Dewelopment gry Sołtys

@Don_Adan, post #249

Dzięki za pomoc, ale to nie przejdzie:
lea    2(A0,D7.W),A3  ; pointer to file data, if no subdirectory

BB tego nie ogarnie. Muszę sam to rozkminić z poziomu basica i kolejno sobie odczytywać dane. Jeśli będę mieć jakieś pytania to będę pytać. Póki co narazie wszystko wiem.
[#251] Re: Dewelopment gry Sołtys

@tukinem, post #250

Dlaczego ma nie przejsc?
albo zamien to na hex, typu dc.l $xxxxxxxx albo zasembluj i wstawke binarna daj.
albo zamien na
;
 move.l A0,A3 
 addq.l #2,D7
 add.l D7,A3

Zreszta jak podasz jakie rejestry moge uzywac, i pod jakim adresem jest plik lha oraz sciezka do pliku to moge przerobic.
np. na wejsciu
A0 - pointer do pliku lha
A1 - pointer gdzie ma byc dopisana sciezka z nazwa pliku
a na wyjsciu
A0 -pointer do danych do zapisu
D0- rozmiar danych do zapisu
[#252] Re: Dewelopment gry Sołtys

@Don_Adan, post #251

Po pierwsze ja tak mam że muszę sam do tego dojść choćbym miał koło wynaleźć od nowa.

Po drugie: 2(A0,D7.W),A3 tego nie odczyta, bo tu w nawiasie masz dwa rejestry naraz z czego jeden dodatkowo z rozszerzeniem worda.

Po trzecie Blitz nie pozwala w kodzie na dostęp do SP i PC z tego co zauważyłem. Może się mylę, ale lepiej nie grzebać tam z poziomu BB.

Daj mi to na spokojnie rozszyfrować, bo już wiem prawie wszystko co i jak.
[#253] Re: Dewelopment gry Sołtys

@tukinem, post #252

To powodzenia, mam nadzieje, ze wszystko dobrze wyliczylem, jesli chodzi o pozycje jakie dane sa gdzie.
Bo przy liczeniu offsetow na screenkach moglem sie pomylic.
Zawsze sobie FileMastera uzywalem, i mi pokazywal wskazany offset w pliku.


Edycja, A jakbys takze mial plik pod nieparzystym adresem, to ten cmp.l zamien na 4x cmp.b.

Ostatnia aktualizacja: 12.01.2025 21:56:47 przez Don_Adan
[#254] Re: Dewelopment gry Sołtys

@Don_Adan, post #253

No udało mi się.

Plik LHA z podkatalogiem DAT prawidłowo rozłożył na pliki. Plik TXT został zapisany zarówno do podkatalogu DAT, którego ręcznie musiałem utworzyć, jak i kolejny plik został zapisany do głównego katalogu. Mogę teraz się zabrać za archiwum z Sołtysem.

Prawidłowo wypisuje nazwy plików wraz z podkatalogami. Tzn pierwszy podkatalog DAT wypisuje cały ze wszystkimi plikami. Następnie w kolejności jest plik game w katalogu głównym i po nim się już gubi. Widocznie po pliku bez podkatalogu może być przeskok o inny offset do następnego unpacked size.



Tylko że ten plik ma 12 MB. To nie tak miało być... Tu potrzebne będzie zwykłe LhA do wypakowania, bo mój program wczytuje cały plik do pamięci więc to rozwiązanie i tak odpada.

Ostatnia aktualizacja: 12.01.2025 22:46:07 przez tukinem
[#255] Re: Dewelopment gry Sołtys

@tukinem, post #254

Ale po co caly plik wczytywac?
To BB2 nie potrafi wczytac czesci pliku? Tylko caly?
Allokujesz np 600KB i podajesz spod ktorego offsetu ma byc wczytane 600 KB, a potem albo pojedynczo je zapisujesz, albo wszystkie z bufora.
No chyba, ze ktos Ci napisze doczytywanie.
Pewnie w ASM to bedzie gora 1KB, a w C 4-5 KB.
[#256] Re: Dewelopment gry Sołtys

@Don_Adan, post #255

Potrafi, ale zawsze od początku. Tzn wczytuję poprzez BLoad name$,memory.l,size.l. Ile chcę to wczytam, ale od środka nie mogę.

Nie ma sensu się męczyć. Oto LHA wypakował pięknie na 1 MB fast ram:
[#257] Re: Dewelopment gry Sołtys

@tukinem, post #256

Jak nie mozesz? Przeciez BB2 obsluguje banki, a takie archiwum lha to jest to samo.
Podajesz start offset dla pliku. Dla zwyklego wczytania to jest 0, ale moze miec dowolna dodatnia wartosc.
[#258] Re: Dewelopment gry Sołtys

@Don_Adan, post #257

BLoad wczytuje plik zawsze od początku. Jedynie 3 parametr służy do wczytywania długości pliku. Nie mogę wczytać pliku od środka. Podałem Ci składnię funkcji:
BLoad filename$ , memory.l , size.l
size to opcjonalny parametr, w któym mogę wczytać tyle bajtów z pliku ile potrzebuję, ale zawsze od początku pliku. Pierwsze przykładowe 600kB pliku wczytam, ale później nie doczytam w to miejsce kolejnych 600 kB. Pozostaje użycie funkcji systemowych do odczytu. Tak mógłbym to zrobić.

Ostatnia aktualizacja: 13.01.2025 00:39:54 przez tukinem
[#259] Re: Dewelopment gry Sołtys

@tukinem, post #258

To uzyj innego loadu.
Jak wczytujesz np. 5 plik z banku?
Caly bank do pamieci?

Edycja, Nawet AMOS to potrafi.
Zobacz sobie gry World Software.
Duze banki z plikami sa.

Ostatnia aktualizacja: 13.01.2025 00:49:19 przez Don_Adan
[#260] Re: Dewelopment gry Sołtys

@Don_Adan, post #259

5 plik z banku? Nie rozumiem zupełnie. Tutaj mamy jeden 12 MB-owy plik. Czy Amos potrafi wczytać np jego środkowe 512 kB? Blitz Basic nie potrafi z tego co wiem.

Duży bank mogę stworzyć, ale instalator nie może mieć większych wymagań od samej gry, a gra wymaga 1 MB fast RAM, więc nie mogę zaalokować 12 MB pamięci żeby wczytać cały plik. Dlatego prościej będzie użyć LHA.
[#261] Re: Dewelopment gry Sołtys

@tukinem, post #260

Da sie czytac dane spod offsetu, musisz po prostu zaczac uzywac tego.
Dziwilbym sie bardzo, gdyby czegos takiego nie bylo w BB2.

FileSeek File#,Position
FileSeek allows you to move to a particular point in the specified file. The first
piece of data in a file is at position 0, the second at position 1 and so on.
Position must not be set to a value greater than the length of the file.
Used in conjunction with OpenFile and Lof, FileSeek may be used to ’append’
to a file.
[#262] Re: Dewelopment gry Sołtys

@Don_Adan, post #261

Możliwe. Nie używałem nigdy FileSeek. Za dużo zachodu z tym. I tak wiem, że wstawienie LHA będzie szybsze, prostsze i niewiele więcej zajmie miejsca, a przynajmniej będzie bezpieczniejsze niż moje wypociny w Blitz Basic. Przyjrzę się tej funkcji ale mnie się zdaje że i tak OpenFile zaalokuje cały rozmiar pliku w pamięci i go wczyta do bufora, za to FileSeek z tego bufora będzie odczytywać dane.
[#263] Re: Dewelopment gry Sołtys

@Don_Adan, post #261

no przyznam, że to ciekawe bo samo OpenFile dla pliku Sołtysa, który zajmuje obecnie 11MB zjada jedynie 11 kB fast RAM:


Faktycznie.. ot cała struktura dla FILE:


Ostatnia aktualizacja: 13.01.2025 09:13:52 przez tukinem
[#264] Re: Dewelopment gry Sołtys

@tukinem, post #263

Moim zdaniem samo OpenFile tylko otwiera dostęp do pliku, a nie czyta go i ładuje do RAM.
[#265] Re: Dewelopment gry Sołtys

@mailman, post #264

Właśnie to zauważyłem.

Ta funkcja tworzy zmienną w strukturze .file, którą wstawiłem i stąd wychodzi te 10 kB. Tam są wypisane kolejne dane, co tworzy, a uzbiera się 10 kB bo widzę że listy nawet są tworzone.

Aby to działało musiałbym wiedzieć jaki offset zrobić po odczycie pliku, który ma lądować w katalogu głównym i jak częściowo przerzucać dane funkcją FileSeek. To naprawdę nie ma już sensu bo plik exe to nie będzie wtedy już 10 kB a jakieś 50 jak nadłubię kodu do tego, a różnica pomiędzy archiwizerem LHA jest niewielka.

Poza tym wypakowanie archiwizerem daje 100% gwarancji że nikomu nic się nie wysypie przy procesie instalacji, a ja przez ten czas mogę się skupić na tworzeniu wersji demo plus inne projekty mam w trakcie realizacji.
[#266] Re: Dewelopment gry Sołtys

@Don_Adan, post #200

No chyba, ze Krashan napisze o ile sie nudzi.
O nie, nie. Zanim napiszę to Wam się jeszcze 5 razy koncepcja zmieni...
[#267] Re: Dewelopment gry Sołtys

@tukinem, post #265

;  A0 - pointer to current file in buffer
;  D7  - size of available buffer
Repeat
  tst.b  (A0)
  beq.b  quit
  cmp.b  #"-",2(A0)
  bne.b  quit
  cmp.b  #"l",3(A0)
  bne.b  quit
  cmp.b  #"h",4(A0)
  bne.b  quit
  cmp.b  #"0",5(A0)
  bne.b  quit

  moveq  #2,D2
  add.b  (A0),D2
  move.l A0,A2
  add.l  D2,A2  ; pointer to file data, if no subdirectory
  move.b 7(A0),D1
  ror.l  #8, D1 ;obrot w prawo o 8 bitow, czyli o bajt
  move.b 8(A0),D1
  ror.l  #8, D1 ;obrot w prawo o 8 bitow, czyli o bajt
  move.b 9(A0),D1
  ror.l  #8, D1 ;obrot w prawo o 8 bitow, czyli o bajt
  move.b 10(A0),D1
  ror.l  #8, D1 ; skip size
  add.l D1,D2
  sub.l D2,D7
  bpl.b  InBuffy
  
  jsr ReloadBuffer       ;  read next part of file from new file offset to A0 and set new D7
  bra.b Repeat
InBuffy
  move.b 11(A0),D0
  ror.l  #8, D0 ;obrot w prawo o 8 bitow, czyli o bajt
  move.b 12(A0),D0
  ror.l  #8, D0 ;obrot w prawo o 8 bitow, czyli o bajt
  move.b 13(A0),D0
  ror.l  #8, D0 ;obrot w prawo o 8 bitow, czyli o bajt
  move.b 14(A0),D0
  ror.l  #8, D0 ; file size
  move.b 21(A0),D2 ; length of file name
  lea    22(A0),A0  ;  pointer to file name
  sub.l  D0,D1
  beq.b  CopyName
  add.l  A2,D1
  cmp.b  #2,(A2)+
  bne.b  quit
 CopyPath
  move.b (A2)+,(A1)+
  cmp.b  #-1,(A2)
  bne.b CopyPath
  move.b #"/",(A1)+   ; insert slash
  move.l D1,A2
CopyName
  move.b (A0)+,(A1)+
  subq.b #1,D2
  bne.b  CopyName

quit
  rts



Ostatnia aktualizacja: 13.01.2025 14:00:39 przez Don_Adan
[#268] Re: Dewelopment gry Sołtys

@Krashan, post #266

Ale to moze sie przydac tez Tobie.
Bo wedlug mnie w C to by mialo max 5 kilo.
w ASM max 1 kilo.
Ale mi sie nigdy nie chce pisac interfejsu.
Zawsze sie pod czyjs interfejs podczepiam typu xfd czy EP.
Albo jakis bardzo prymitywny robie, typu z RAMu do RAMu.


Ostatnia aktualizacja: 13.01.2025 13:56:54 przez Don_Adan
[#269] Re: Dewelopment gry Sołtys

@Don_Adan, post #267

Póki co problem jest tego typu, że po pliku, który nie ma podkatalogu jest inny przeskok offsetu. Nie bardzo wiem jak to sprawdzić. Musiałbym otworzyć w filemasterze ten wielki plik i liczyć bajty. Tylko że exe tam ma rozmiar 600kB.

Prędzej napiszę własny splitter i joiner tak byłiby prościej.

Bardziej mnie zastanawia jak później w skrypcie installera użyć xfddecrunch, lha x itp.
[#270] Re: Dewelopment gry Sołtys

@tukinem, post #269

Masz duzo pamieci, do testow wczytaj cale archiwum i rozpakuj.
Jesli masz problem z tym plikiem 600 KB.
To sprawdz gdzie sie zatrzymuje, jest troche inna obsluga pliku bez podkatalogu. po prostu moze o czyms zapomniales.
Po za tym powinienes sprawdzic czy to co jest rozpakowane to jest to co powinno byc czy tez jest jakies przesuniecie.
Najlepiej CRC plikow lub CMP obu plikow.
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