[#1] Reasemblacja i ponowna asemblacja biblioteki nonvolatile.library
Witam.
Próbuję wykonać drobną modyfikację biblioteki nonvolatile.library
Wykonuje reasemblację za pomocą programu ira ,
a później ponowną asemblację programem vasmm68k_mot , ale nawet jak nic nie zmienię, to plik wynikowy jest odrobinę inny i program do budowania kickstartu pokazuje mi błąd.
Czy któryś z szanownych forumowiczów ma z tym tematem doświadczenie i może mi pomóc ?
Zmiany, jakie chcę wykonać w bibliotece nonvolatile, to tylko wartość, o jaką ma zwiększać licznik, podczas sprawdzania wielkości pamięci, tak, żeby można było zastosować pamięć o 2x większej pojemności.
Pozdrawiam,
Maciek

Ostatnia aktualizacja: 09.06.2024 12:55:08 przez fuseoppl
[#2] Re: Reasemblacja i ponowna asemblacja biblioteki

@fuseoppl, post #1

Zdizassembluj pod IRA, sprawdź na którym bajcie jest ten licznik i zmodyfikuj wartość bezpośrednio w źródłowym hexie.
1
[#3] Re: Reasemblacja i ponowna asemblacja biblioteki

@bfgmatik, post #2

no właśnie niewiele z tego rozumiem, jestem elektronikiem, a nie programistą i mam z tym spory problem.
powiedzmy, że chciałbym zmienić 3e8 w dwóch liniach:
Linia 693: MOVE.W #$03e8,D1 ;0738: 323c03e8
Linia 958: MOVE.L #$000003e8,(A2) ;0acc: 24bc000003e8

w hexie znajduję taką wartość pod adresem 75A i AF0
[#4] Re: Reasemblacja i ponowna asemblacja biblioteki

@fuseoppl, post #1

Najpierw postaraj sie odtworzyc taki sam plik jak plik zrodlowy.
Vasm ma taka glupia opcje tworzenia 16 bitowych relokacji, zamiast standardowych 32 bitowych.
Jest to ustawione jako default w tym asemblerze.
Wiec sprobuj zmienic asembler, albo sprobuj dodac ta opcje 32 bitowa.
To chyba jakos kick13 sie nazywa, czy jakos tak.
To jest jedna z najglupszych opcji w tym ogolnie dosc dobrym asemblerze.

Druga mozliwosc to edycja pliku hex, ale wtedy masz mniejsza kontrole.
[#5] Re: Reasemblacja i ponowna asemblacja biblioteki

@fuseoppl, post #3

Uzyj FileMastera 2.2 i opcji FileEdit.
[#6] Re: Reasemblacja i ponowna asemblacja biblioteki

@Don_Adan, post #4

pewnie chodzi o: -kick1hunks
ale próbowałem tego i nic to nie daje.
Problem po asemblacji jest z nagłówkiem, hunk jest:
03E7
zamiast standardowego:
03F3

nagłówek po asemblacji wygląda tak:
00 00 03 E7 00 00 00 05 6E 6F 6E 76 6F 6C 61 74 69 6C 65 5F 6F 72 67 2E 61 73 6D 00 00 00 03 E8 00 00 00 01 53 5F 30 00 00 00 03 E9

a oryginał jest taki:
00 00 03 F3 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 06 90 00 00 03 E9

prawdopodobnie robię błąd przy reasemblacji za pomocą ira , gdzieś czytałem ( https://eab.abime.net/showthread.php?t=101408 ), że trzeba w pliku config, który powstaje po reasemblacji dopisać linie:
BASEREG
BASEADR
z właściwymi adresami, które trzeba ręcznie znaleźć w pliku wynikowym .asm, ale to był przykład dla pliku wykonywalnego, a nie dla biblioteki i nie mogę się w tym połapać i nie mogę nigdzie znaleźć przykładu dla biblioteki
[#7] Re: Reasemblacja i ponowna asemblacja biblioteki

@fuseoppl, post #3

Powinieneś znaleźć ciąg hex: 323c03e8 i w tym ciągu podmieniasz wartość 03e8 na inna liczbę 16-bitowa z zakresu 0x0000 do 0xffff. Kalkulator Windows (przynajmniej w win7) doskonale konwertuje dziesiętne na hexy i odwrotnie.
[#8] Re: Reasemblacja i ponowna asemblacja biblioteki

@bfgmatik, post #7

Spróbuję, dzięki za radę
[#9] Re: Reasemblacja i ponowna asemblacja biblioteki

@fuseoppl, post #8

Jeszcze jak użyjesz w IRA odpowiedniego przełącznika z linii poleceń to w z deasemblowanym pliku będzie ci pokazywał adres w pamięci dla każdej linii kodu. Dzięki temu łatwiej znaleźć gdzie co jest w pliku źródłowym.

BTW: 0x03e8 to oczywiście dziesiętnie 1000, wcześniej nie mogłem przeliczyć bo pisałem posta z placu zabaw ;)
[#10] Re: Reasemblacja i ponowna asemblacja biblioteki

@fuseoppl, post #6

Mi to wyglada jakbys jeszcze jakiegos linkera musial uzyc po asemblacji.
Ale ja takich dziwactw nie uzywalem.
Najprosciej jest uzyc innego asemblera, typu Asmone czy DevPac jesli wolisz z CLI.
[#11] Re: Reasemblacja i ponowna asemblacja biblioteki

@bfgmatik, post #7

Wygląda na to, że pierwszy mały krok wykonałem, aktualnie zmieniłem tylko adres, od którego zaczynają się zapisy w pamięci NV, ponieważ CD32 standardowo zapisuje od adresu 0x18, wszystko do tego adresu to prosty nagłówek na początku zajmujący 4 bajty i wybrany język konsoli pod adresem 0x08, a do adresu 0x18 nic nie ma, możliwe, że pozostawiono miejsce na jakieś ustawienia w przyszłości, która jak wiadomo, niestety nie nastąpiła :(.
Tak czy inaczej, po odpowiednich zmianach w bibliotece nonvolatile, CD32 testowana jeszcze pod WinUAE, (muszę wgrać nowy kickstart do pamięci flash, żeby przetestować na prawdziwej Amidze) zapisuje od adresu 0x0E. Wciąż CD32 zapisuje tylko 100 jednostek, żeby zapisywała więcej, trzeba zmienić licznik, ale nie jestem jeszcze pewien, gdzie dokładnie mam to zrobić.
Dziękuję wszystkim za rady, szkoda, że tylko ja jestem taki szalony, żeby brać się za tą bibliotekę, ale może kiedyś ktoś jeszcze zainteresuje się tym tematem :D
[#12] Re: Reasemblacja i ponowna asemblacja biblioteki

@fuseoppl, post #6

Użyj -Fvobj.


edit: jak mnie pamięć nie myli.

Ostatnia aktualizacja: 07.06.2024 21:21:24 przez asman
[#13] Re: Reasemblacja i ponowna asemblacja biblioteki

@asman, post #12

niestety to nie pomogło, ale może coś źle robię.

Na szczęście do prostych zmian wystarczy edycja hexa, a @bfgmatik podpowiedział mi czego szukać w hexie i to na początek wystarczy.
Oczywiście do poważniejszych zmian trzeba by pracować na zreasemblowanym pliku, ale może ktoś się kiedyś dołączy i zrobi tutorial, jak to zrobić.
[#14] Re: Reasemblacja i ponowna asemblacja biblioteki

@fuseoppl, post #13

Czekaj, przykwasiłem to robi właśnie obiekt, żeby potem użyć linkera.
Ja nie używałem tego linkera bez biblioteki startowej więc nie wiem czy zadziała:

vlink -nostdlib -bamigahunk -Bstatic -Cvbcc -s -x file.o -o outfile

gdzie file.o to ten zasemblowany plik. Ewentualnie użyj Barfly pod Ami (ale tu też trzeba trochę wiedzy) albo tych narzędzi co Don powiedział. Najłatwiej będzie z AsmOne.


Edit: jest jeszcze opcja -Fbin ale ona robi binarny output jak dobrze pamiętam.

Ostatnia aktualizacja: 07.06.2024 21:46:15 przez asman
[#15] Re: Reasemblacja i ponowna asemblacja biblioteki

@bfgmatik, post #9

Najbardziej mi pogła rada: "Powinieneś znaleźć ciąg hex: 323c03e8"
na końcu linii w pliku .asm są faktycznie ciągi, które muszę szukać w hexie, nie oglądając się na adresy hexa.
Ten 1000 decymalnie, to zakładam, że 1000 bajtów, pierwsze 24 bajty (cała pamięć to oczywiście 1kB, czyli 1024 bajty) to nagłówek z ustawieniami, ale muszę to jeszcze przemyśleć, póki co zmiana adresu, od którego mają zaczynać się zapisy gier zadziałała :)
[#16] Re: Reasemblacja i ponowna asemblacja biblioteki

@asman, post #14

dzięki, za podpowiedź, spróbuję, chociaż myślałem, że linker służy do łączenia kilku obiektów, ale w temacie programowania na Amidze jestem jak "dziecko we mgle" :D
[#17] Re: Reasemblacja i ponowna asemblacja biblioteki

@fuseoppl, post #15

Jak dodasz do ira przełącznik -A to powinieneś mieć na końcu linii też adres z pliku źródłowego, lepsze i pewniejsze niż wyszukiwanie ciągu bo podobnych ciągów może być wiele.

A jak chcesz się bawić bardziej dokładnie to ściągnij sobie dokumentację assemblera od Motoroli i jedziesz linia po linii. Na początku idzie wolno ale potem nabiera się wprawy, zaczynają się pojawiać przed oczami takie cyferki jak w Matrixie lecące z góry na dół i po chwili rozumiesz kod maszynowy . No może nie aż tak, ale w bólach zaczyna się kumać o co chodzi w kolejnych blokach kodu :).
[#18] Re: Reasemblacja i ponowna asemblacja biblioteki

@bfgmatik, post #17

spróbuję :)
szkoda, że w przypadku tej biblioteki, praktycznie nikt nie jest tym zainteresowany, ale ja to traktuję jako hobby, a CD32 chcę zostawić jako zwykłą konsolę, bez rozbudowy o dysk (można wtedy ustawić ścieżkę zapisu na dysku). Nie chcę z tej konsoli robić A1200, bo wtedy kupiłbym właśnie tę Amigę, a z drugiej strony miejsca na zapisy stanu gry, jest skandalicznie mało, te gry, które mnie interesują zajmują praktycznie całą pojemność EEPROMU. Pewnym rozwiązaniem jest to, co już zrobiłem, czyli przełącznik pamięci, zainstalowałem pięć sztuk, więc mam 5x 1kB, a jako ciekawostkę napiszę, że współczesne typowe pamięci EEPROM, niezależnie czy będzie to pamięć Atmela, czy ST i to dokładne odpowiedniki tej starej pamięci Atmela z CD32, nie działają prawidło z tą konsolą ze względu na błąd w bibliotece nonvolatile, pewnie można by też to poprawić, ale to tak na marginesie :)
[#19] Re: Reasemblacja i ponowna asemblacja biblioteki

@fuseoppl, post #16

Dla mnie linkowanie to jest jakis anachronizm.
Jakles 40 lat temu, gdy komputery mialy bardzo malo pamieci to mialo to sens bo nie dalo sie skompilowac/zasemblowac wiekszego projektu na raz.
Ale teraz to dla mnie jest bez sensu przy projektach Amigowych.
Pewnie jakas moda z Unixa.
No chyba, ze o czyms nie wiem.
Jedyny teoretyczny przypadek to taki, ze nie ma sie dostepu do zrodel, a tylko pilk w formie obj jest ogolnie dostepny.
No chyba, ze tak jest szybciej, w co watpie, choc teoretycznie to jest mozliwe.
[#20] Re: Reasemblacja i ponowna asemblacja biblioteki

@fuseoppl, post #18

Wiem, CD32 fajna rzecz, też mam :D. Udało mi się kiedyś kupić tanio i miałem etap zajawki na ten sprzęt, chwilowo leży w garażu bo wróciłem do A500 :).

No niestety ilość pamięci do zapisu w CD32 to jest ogromna wada. Przez to gry powychodziły z jakimiś protezami w postaci kodów do poszczególnych etapów gry, itp. W UFO nawet nie można nadawać nazw bazom i pewnie jest jakieś uproszczenie zapisu bo nie wiem jak oni zmieścili w tej pamięci stan wszystkich baz z inwentarzem.

Poza tym Cannon Fodder wywalił mi save'y z Syndicate'a i się wkurzyłem :). Cannon Fodder używa całej przestrzeni 1KB z tego co pamiętam.

Nie wiem czy osiągniesz sukces edytując samą bibliotekę. Można by zastosować też rozwiązanie sprzętowe czyli malutki AVR sterujący liniami adresowymi A0-A2 tej pamięci i pozwalający w ten sposób przełączać 8 różnych scalaków dając 8 banków po 1kb. Musiałbyś wyprowadzić tylko przycisk zmiany banku. Zmiana i numer banku mogłaby być sygnalizowana małym buzzerem.
[#21] Re: Reasemblacja i ponowna asemblacja biblioteki

@bfgmatik, post #20

Cannon Fodder używa chyba tylko 57 jednostek, ale coś musieli pochrzanić i faktycznie nawet jak jest pierwszy zapisany i później zapiszesz stan z innej gry, który się zmieści, to przy ponownym zapisie CF, tamten drugi zostanie skasowany. Generalnie biblioteka nonvolatile ma sporo błędów, a nowsze wersje, które się trochę później pojawiły mają wyciętą obsługę EEPROMU i zapisują tylko do plików na dysku lub dyskietce.
Najprostszym rozwiązaniem to co już zrobiłem, czyli zwykły mechaniczny przełącznik pamięci, które są na tyle tanie, że spokojnie można zainstalować 5 sztuk i nie ma też problemu, że CF skasuje inne zapisy, bo będzie miał własną kość
[#22] Re: Reasemblacja i ponowna asemblacja biblioteki

@bfgmatik, post #20

a tak wygląda przełącznik pamięci (jest to chyba najprostsze rozwiązanie)
[#23] Re: Reasemblacja i ponowna asemblacja biblioteki

@fuseoppl, post #22

Fajne fajne i do tego bez zbędnej dodatkowej elektroniki :) muszę pomyśleć o czymś podobnym.
[#24] Re: Reasemblacja i ponowna asemblacja biblioteki

@bfgmatik, post #23

tylko albo zastosujesz pamięci dokładnie takie jak są w CD32, produkowane w latach 90'tych, albo trzeba poprawić bibliotekę, ponieważ ze względu na pewien błąd i dziwne poza standardowe zachowanie tych starych pamięci, one działają, a współcześnie produkowane mają problemy. Część gier potrafi zapisać, a część np. Cannon Fodder juz nie, Subwar 2050 zapisuje tylko ustawienia, ale już pilotów nie jest w stanie zapisać. Można jeszcze obejść w jeden sposób ten problem, ale jak się zdecydujesz coś takiego robić, to napisz do mnie, podam Ci, co będzie potrzebne, generalnie koszt części to "groszowa" sprawa, najdrożej wyszły mnie dwie płytki drukowane uniwersalne, bo każda kosztowała chyba około 20 zł.
[#25] Re: Reasemblacja i ponowna asemblacja biblioteki

@fuseoppl, post #24

Przepis na instalację dodatkowych pamięci NV na zapisy gier:

przełącznik Hampolt PF4 (10 pozycyjny, ale najlepiej zainstalować tylko 5 sztuk pamięci)
blokady lewa i prawa (maskownice): PF4-A, PF4-B

można znaleźć ten przełącznik pod kodem:
przełącznik: Z49/DEC
blokady (maskownice): PF44E10

płytka drukowana (2 szt.): Roth Elektronik RE899

Złącze do wlutowania na płytę główną CD32: Amphenol 20021221-00008C4LF
Złącze do wlutowania na płytkę RE899: Amphenol 20021321-00008C4LF

podstawka precyzyjna (przydatna do połączenia płytek i w celach diagnostycznych): dowolna DIP8 np. CONNFLY DS1001-01-08BT1NSF6S

Rezystory (5 sztuk) 10 kOhm jak najmniejszych rozmiarów np. Ø1,6x3,6mm

Przewód wstążkowy (wystarczy 6 żył), raster 0,635mm, drut
Ponieważ może być ciężko kupić taki przewód na metry, to można użyć starej taśmy ATA 80-żyłowej (o wiele lepsza do lutowania w naszym projekcie będzie od taśmy 40-żyłowej, która ma grubsze żyły z linki)

Płytki łączymy ze sobą padami pod SO08 na zewnątrz, wkładamy podstawkę DIP8 i zalutowujemy tak, żeby połączyć elektrycznie dwie płytki drukowane.
Przylutowujemy złącze Amphenol 20021321-00008C4LF na jedną ze stron RE899,, a na drugą stronę przylutowujemy 5 szt. układów EEPROM, układając jeden na drugim.

Nóżki układów, które będą podłączane pod przełącznik, podpinamy do zasilania opornikami 10kOhm.
Wspólne wyprowadzenie przełącznika (C) podłączamy jedną z żył do płytki RE899, w miejsce nóżki, które będą podłączone do przełącznika.

Pozostaje ustalić, którą z nóżek układów podłączymy do programatora i tu mamy kilka rozwiązań:

#1. można zastosować oryginalne pamięci ATMELA E3 AT24C08N E 10SC25 (pełne oznaczenie z obudowy układu) i nóźkę #3 (A2) podłączyć pod przełącznik.

#2. można zastosować współcześnie produkowaną pamięć, która będzie działała z CD32, ja znalazłem tylko jedną, bardzo konkretną, chwilowo, nie podaję co to za pamięć,
ponieważ bardzo zależy mi na tym, żeby zainteresowane osoby włączyły się w rozwiązanie trzecie i może wspólnymi siłami poprawimy nieszczęsną bibliotekę nonvolatile.
W przypadku takiej pamięci będziemy musieli podłączyć pod przełącznik inną nóżkę, ale o tym później.

#3. można zastosować dowolną pamięć EEPROM i2c, współcześnie produkowaną, pod warunkiem poprawienia błędu w bibliotece nonvolatile

Nie ukrywam, że rozwiązanie #3 najbardziej mnie interesuje, niestety zmieniając tylko hexa, prawdopodobnie nie poprawimy kompatybilności ze współcześnie produkowanymi pamięciami EEPROM.
Aktualnie w żaden sposób nie mogę doprowadzić do sytuacji, w której zreasembluję bibliotekę i po ponownej asemblacji, będzie ona działać (na początek bez zmian w kodzie), a od tego trzeba zacząć.

Pozdrawiam i gorąco zachęcam do współpracy nad nonvolatile.library.

PS. później dołączę jeszcze zdjęcia jak to wygląda w moim wykonaniu
[#26] Re: Reasemblacja i ponowna asemblacja biblioteki

@fuseoppl, post #25

A to z OS 3.2 nie jest nowa wersja nonvolatile.library?

A co do bledow, to tak na czuja:

Linia 693: MOVE.W #$03e8,D1 ;0738: 323c03e8
Linia 958: MOVE.L #$000003e8,(A2) ;0acc: 24bc000003e8

Pierwsza komenda, wyglada podejrzanie w stosunku do drugiej.
Raczej powinno byc move.l a nie move.w.
Choc to trzeba widziec wiecej kodu w okolo, zeby stwierdzic czy to jest blad, czy po prostu 2 bajtowa optymalizacja kodu.
[#27] Re: Reasemblacja i ponowna asemblacja biblioteki

@fuseoppl, post #25

1) jaką maksymalną można mieć tą pamięć? np 64kb??

2)
https://eab.abime.net/showpost.php?p=1054424&postcount=25

Nonvolatile.library is defaut programmed to search for other drives to save to before it considers NVRAM in the CD32.

So long as nonvolatile.library finds the 'nonvolatile' redirect file in prefs/env-archive/sys, then it will first try to load/save via there.

So even on CD32, if you plug in a floppy drive with a formatted disk which is correctly setup, nonvolatile.library will always load/save there in preference over the CD32's NVRAM.

It appears some designed nonvolatile.library with some foresight thinking the NVRAM size was a bit of a joke.


https://eab.abime.net/showthread.php?t=80540&page=2


oraz to:
https://github.com/gareth-smyth/nvman


Ostatnia aktualizacja: 09.06.2024 14:12:41 przez Cezarykl
[#28] Re: Reasemblacja i ponowna asemblacja biblioteki

@Cezarykl, post #27

1. teoretycznie 262 kB, ale ze względu na to ile gry na CD32 zajmują zapisami, wystarczy spokojnie pamięć 10kB do normalnego grania

2. tak, wiem, ale musisz rozbudować CD32 o stację dyskietek lub hdd, ja chcę zostawić CD32 jako konsolę, tylko trochę usprawnić, zwłaszcza, że moje ulubione gry zapisują sporą część pamięci NV, więc jak gram w UFO, to juz nie mogę w Liberation, a nie chcę rozbudowywać CD32, bo w takiej sytuacji kupiłbym A1200. Kupiłem CD32, ponieważ miałem ja w 1993 roku i tak jakoś zakochałem się w tym ułomnym sprzęcie :D

3. w tym wątku w zasadzie dyskusja była na temat przełączania pamięci i możliwości zapisu na rozbudowanej CD32, nikt niestety nie podjął tematu modyfikacji biblioteki

Pozdrawiam,
Maciek
[#29] Re: Reasemblacja i ponowna asemblacja biblioteki

@fuseoppl, post #28

1) jak już robić upgrade to min 64kb lub na max ile się da :)

2) to może pomóc
https://github.com/gareth-smyth/nvman
[#30] Re: Reasemblacja i ponowna asemblacja biblioteki

@Don_Adan, post #26

wszystkie wersje biblioteki po wersji: 40.31, czyli np. 40.35 i 40.36 mają wyciętą obsługę pamięci EEPROM.
Nie wiem, co dokładnie jest w OS3.2, pisałem kilka razy do deweloperów, żeby się dowiedzieć, co to znaczy, że ta wersja na CD32 jest eksperymentalna i co dokładnie jest zmienione, co może nie działać, ale nie mają czasu i mnie ignorują, a chętnie kupiłbym 3.2, kosztuje naprawdę niewiele, więc cena to nie problem. Wątpię też, żeby było coś w tej bibliotece zmieniane.

Co do błędu to polega on na czymś inny, chętnie tu napiszę więcej, tylko potrzebuje przepis na reasemblację i ponowną asemblację biblioteki, później będę już "grzebał" w niej sam, chyba że ktoś się dołączy i chętnie też napiszę, co można zmienić i co wiem, chociaż póki co wiem niewiele :D.
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