atarionline.pl Łaczenie dwóch plików xex - Forum Atarum

Jeśli chcesz wziąć udział w dyskusjach na forum - zaloguj się. Jeżeli nie masz loginu - poproś o członkostwo.

  • :
  • :

Vanilla 1.1.4 jest produktem Lussumo. Więcej informacji: Dokumentacja, Forum.

    • 1: CommentAuthorMatthewNS
    • CommentTime21 Jun 2024 zmieniony
     
    Zrobiłem sobie intro w ASCII (jest taki programik na A8 Larry's Title maker") i chciałbym go "dołączyć" do innego wykonywalnego xex (w tym przypadku FRED) tak, żeby wczytywał mi się przez samą grą. Czy da się to jakoś zrobić z poziomu Atari ewentualnie PC (chociaż wolałbym z poiomu Atari bo mam Mac-a i muszę podbierać PC synowi, jeżeli coś chodzi pod Win).
    • 2: CommentAuthormarok
    • CommentTime21 Jun 2024
     
    "tak, żeby wczytywał mi się (z intro) przed samą grą"

    to powinno być łatwe zadanie

    xex z intro trzeba by delikatnie zmodyfikować (podmienić nagłówek na nieco inny) i dokleić (append) fizycznie jako drugi xex z grą

    nagłówek bloku danych (wartości w hex) do podmiany to E002E102 na E202E302 (z "RUN" na "INIT") w pliku intra

    ten powinien się znajdować (tj. wartości do podmiany) pod adresem końcowym-5 (to ostatnie 6 wartości z czego pierwsze 4 modyfikowane pliku intra)

    wybór programu do edycji zawartości pliku jest szeroki
    (do łączenia plików może trochę mniejszy)

    chyba nawet z poziomu dos'a (nie każdego) da się to od a do z zrobić
    • 3: CommentAuthorVidol
    • CommentTime22 Jun 2024
     
    Polecam Super packer ma duże możliwości łączenia plików, przy okazji poszczególne bloki można spakować. ->link<-
    • 4: CommentAuthorMatthewNS
    • CommentTime22 Jun 2024
     
    Super Packer działa :) dzięki Panowie.
    A czy ktoś z Was by mi powiedział jak po intro zatrzymać ładowanie następnej części (czyli w tym przypadku gry) do czasu naciśnięcia jakiegokolwiek klawisza?
    • 5: CommentAuthorVidol
    • CommentTime22 Jun 2024 zmieniony
     
    w intrze musisz czekać na wciśniecie klawisza i dopiero je zakończyć.

    key lda #$ff
    sta $02fc

    l2 cmp $02fc
    beq l2
    rts
    • 6: CommentAuthorMatthewNS
    • CommentTime22 Jun 2024
     
    @Vidol dziękuje ale potrzebowałbym trochę więcej pomocy. Nie mam aż takich umięjetności. Powiesz jakiego softu użyć żeby to zrobić?
    • 7: CommentAuthormarok
    • CommentTime22 Jun 2024
     
    Mogło się zdadzyć, że łaczenie plików nie wymagało podmiany danych w intrze. ;)

    Super Packer to ze słyszenia wiem, legendarny program, gdybym tylko go kiedyś używał (mierny ze mnie praktyk) na pewno też bym o nim pamiętał wspomnieć.

    Rozumiem jednak że mamy do czynienia z gotowym plikiem intra i nie możemy wygenerować sobie dodatkowego kodu do nowej wersji 'z asemblacji', jak z przykładu Vidola.

    Więc to co jest zapisane jako 'źródło' (do asemblacji w asm 6502) tego dodatkowego kodu możemy ewentualnie scalić z intrem poprzez dopisanie ekwiwalentnych "hexów" (to właśnie robi asemblacja).

    Potrzebujemy wiedzieć dokładnie co i gdzie dopisać, oraz czy dysponujemy możliwościami edycji pliku.

    Możesz swobodnie edytować i wyszukiwać zadany ciąg danych w pliku? (czy masz takie wypróbowane narzędzie w swojej dyspozycji)
    • 8: CommentAuthorMatthewNS
    • CommentTime22 Jun 2024 zmieniony
     
    Nie mam źródłowego pliku. Intro w ASCII zrobiłem w programiku na Atari - Larry's Title Maker. Ten program od razu zapisuje projekt w pliku wykonywalnym.

    Mógłbym próbować edytować ten plik pod Omnivore, ale chyba to ponad moje siły :)

    Zrobiłem sobie też intro w Basicu (@mono mi pomógł) i dzięki programowi Fandala - BAS2COM otrzymuję plik wykonywalny. W moim intrze napisanym w BASIC-u mam w kodzie linie która zatrzymuje mi wykonywanie programu.

    Połączyłem moje intro z Basica z Fredem przez Super Packer. I tu @marok musiałem zmienić RUN na INIT.

    Scalony plik się odpala. Najpierw wchodzi intro ale po naciśnięciu klawisza nie zaczyna wczytywać Freda ale wychodzi do Basica - napis READY i koniec.

    Moj kawałek kodu w BASIC na końcu:

    10 DIM L$(120):OPEN #1,4,0,"K:":TRAP 30
    20 ? CHR$(125);:FOR I=1 TO 23:READ L$:? L$:NEXT I:GET #1,K:GOTO 20
    30 END
    101 DATA
    102 DATA ------------------------------------
    103 DATA TEST. 1234567
    104 DATA ------------------------------------
    105 DATA
    .
    .
    121 DATA ------------------------------------
    122 DATA
    123 DATA PRESS ANY BUTTON TO CONTINUE .......


    W przypadku intra stworzonego w Larry's Title Maker - Super Packer scala oba pliki - najpierw dodaje FRED poźniej INTRO (tu nie muszę zmieniać RUN na INIT) i scalony plik najpierw ładuje INTRO a póżniej zaraz FREDA.... No właśnie dosłownie ZARAZ. Za szybko... dlatego potrzebuję to zatrzymanie INTRA i uruchomienie dalszego ładowania po naciśnięciu klawisza
    • 9: CommentAuthormarok
    • CommentTime22 Jun 2024
     
    "scalony plik najpierw ładuje INTRO a póżniej zaraz FREDA.... No właśnie dosłownie ZARAZ. Za szybko... dlatego potrzebuję to zatrzymanie INTRA i uruchomienie dalszego ładowania po naciśnięciu klawisza"

    czyli chodzi o wstrzymanie ładowania

    to jak najbardziej słuszny postulat

    w takim jednak przypadku nie jestem niestety pewien jak to powinno być zrobione (może ktoś podpowie?), choć zakładam że rozwiązanie musi być najzwyczajniej proste


    zapewne można spróbować zrobić to także z poziomu tego programu w basic - wtedy rozwiązaniem jest modyfikacja linii 30 (ale tak może się zwyczajniej nie dać, o czym rozpisuję się niżej)


    problemem wtedy staje się jeszcze konieczność odłączenia banku pamięci ROM basica (to w tej zmienionej linii 30), bo pamięć tego obszaru adresowego w grze FRED jest na pewno wykorzystywana (do zapisu - to "RAM pod ROM'em") - żadna duża gra nie pozostawia tego obszaru niezagospodarowanego

    tylko że jak się odłączy basic, to jak ma się wykonać ew. reszta kodu z linii 30? - to chyba niewykonalne

    może to znaczyć, że doczytanie samej gry raczej musiałoby się odbyć z poziomu basica (w tej linii 30 i ew. kolejnych), ale chyba gra wczytuje się od razu pod adres obszaru ROM - więc i takie rozwiązanie wówczas odpada

    w takim wypadku (a można to łatwo sprawdzić z pliku gry) nie ma już możliwości (chyba) rozwiązania tego z poziomu programu w basicu
    • 10: CommentAuthorMatthewNS
    • CommentTime22 Jun 2024
     
    A takie pytanie: zamiast łączenia dwóch xex czy nie dałoby się to rozwiązać przez BAT? np START.BAT zawierający LOAD: D1:INTRO.XEX QUIT, LOAD D1:GRA.XEX. Nie wiem jak się pisze komendy w plikach BAT pod ATARI.
    • 11: CommentAuthorVidol
    • CommentTime22 Jun 2024
     
    MatthewNS możesz zapodać zrzut z okna SP i jaka to jest wersja Freda?
    Podejrzewam, że problem może być z kolejnością bloków w pliku wynikowym. Powinno być tak:
    blok INTRO
    INIT
    blok/i FRED
    RUN
    • 12: CommentAuthorMatthewNS
    • CommentTime23 Jun 2024 zmieniony
     
    Vidol, dałem radę tak jak napisałeś:

    blok INTRO
    INIT
    blok/i FRED
    RUN

    W załączeniu zrzut z SP i wersja FRED. RUN potraktowany żółtym markerem został zmieniony z INIT... i działa ale......: ja bym wolał ZATRZYMAĆ intro i po nacisnięciu klawisza kontynuować wczytywanie. Czy to się da zrobić przy pomocy SP.
    • 13: CommentAuthorVidol
    • CommentTime23 Jun 2024 zmieniony
     
    tak na szybko, ale powinno działać. Usuń ini $4966 i wklej w to miejsce wait.xex.
    • 14: CommentAuthorMatthewNS
    • CommentTime23 Jun 2024
     
    No i o to mi chodziło. Wszystko działa. Dzięki wielkie Vidol :)