1 Ostatnio edytowany przez laoo/ng (2021-02-09 09:32:04)

Hej. Mój pierwszy wątek w tym dziale :)
Może trochę dziwne pytanie, ale wiecie, wychodzę z atari 8-bit, a tam takimi rzeczami ludzie się martwię ;)
Interesuje mnie kwestia jak to jest z pamięcią w STE. Zakładając że ma się 4 MB na pokładzie, to na ile z tego można liczyć, że będzie dostępne dla dema, żeby nie ukisić systemu (a w szczególności, żeby sterownik dysku działał)?
Zaglądając do Sysinfo widzę u mnie (a także w Hatari), że membottom jest poniżej $20000, a memtop opiera się o pamięć ekranu.
Czy można zakładać, że w konfiguracji w której ktoś chce uruchomić demo membottom nie przekroczy $20000? a dokładniej, że mój program nie załaduje się powyżej tego adresu)? A jak to jest z memtop? Czy coś tam może być załadowanego przez system, czy zawsze jest tam wolne do phystop? Czy poprawnym jest założenie, że wszystko pomiędzy może być bezpiecznie dostępne dla dema?

Oczywiście rozumiem systemowe mechanizmy zarządania pamięcią, wołanie mshrink() itp. Pytanie tyczy się tylko tego ile system jest w stanie mi dać.

2

Nigdy tego nie wiesz. Wystarczy, że ktoś zainstaluje NVDI z dużym cachem na fonty wektorowe i pół mega zniknie. Najlepszym rozwiązaniem jest Mshrink() zaraz po odpaleniu programu i potem Malloc tego co potrzebujesz, ewentualnie error jeśli Malloc() zawiódł.

What can be asserted without proof can be dismissed without proof.

3 Ostatnio edytowany przez mkm (2021-02-09 11:04:42)

Ja się raz rozbiłem o rozmiar cache w konfiguracji HDDrivera. U mnie i większości osób działało (Polygon Discount) a u paru z inna konfiguracja juz nie (oczywiście zwis bo nie zrobilem error handlingu hehe). Co prawda to było na F030 i wiedziałem, że jestem na styk, ale wniosek jaki mam to jednak zostawić trochę zapasu (ile to niestety nie wiem) i zrobić dobry error handling jak pisze Sqward.

Maciek
--------
Atari 65XE + Ultimate 1MB + Stereo + SIO2SD | Atari 520STE + 4MB + UltraSatan | Atari Falcon 030 + CT60e + 14MB ST + 256MB TT + 68882  + CF + Netusbee | Amiga 500 + 1MB + Gotek | Amiga 600 + 2MB Chip + 8MB Fast + CF

4

Oczywiście zawsze znajdzie się jakaś maszyna z takimi sterownikami, które zajmą absurdalnie dużo pamięci. Bardziej interesujący jest przypadek rozsądnej konfiguracji jakie ludzie mają na biurkach i oglądają na nich dema. Nie twierdzę, że chcę wymagać na maksa, tylko właśnie się zastanawiam jaki wyznaczyć sobie górny limit, bo gdy demo będzie już napisane i okaże się, że jednak przesadziłem, to już będzie trochę późno. Jak 4MB to 64*64kB to nie wiem czy 60*64kB jest jeszcze rozsądnie osiągalne, czy bliżej 56*64kB albo jeszcze mniej.

5 Ostatnio edytowany przez Cyprian (2021-02-09 13:58:18)

@laoo/ng Czy demo będzie korzystać z systemu operacyjnego (np.doładowywać dane z dysku)? Jeśli nie, to cała pamięć jest Twoja.
Jeśli jednak tak, to zaznacz w pliku tekstowym że demo wymaga np. 3,7MB. Użytkownik będzie mógł dostosować swoje środowisko do wymagań  dezaktywując NVDI, zmniejszając ilość cache HDDrivera, wyłączając akcesoria itp.

Swoją drogą, na dużym Atari, często używane są programy do zarządzania profilami (typu XBoot) uruchamiania komputera, np pod Demo, pod aplikacje itp.

Lynx I / Mega ST 1 / 7800 / Portfolio / Lynx II / Jaguar / TT030 / Mega STe / 800 XL / 1040 STe / Falcon030 / 65 XE / 520 STm / SM124 / SC1435
DDD HDD / AT Speed C16 / TF536 / SDrive / PAK68/3 / Lynx Multi Card / LDW Super 2000 / XCA12 / SkunkBoard / CosmosEx / SatanDisk / UltraSatan / USB Floppy Drive Emulator / Eiffel / SIO2PC / Crazy Dots / PAM Net
http://260ste.atari.org

6 Ostatnio edytowany przez mkm (2021-02-09 13:55:52)

Nie znam dokladnej wartosci. Jedyne co mi przychodzi to empiryczny test. Zrób sobie bianarki testowe które maja kilka wariantów wielkości rezerwowanego bloku bss. Albo jedna ktora ma test w pętli z mallociem i zobacz kiedy zwroci Ci bład. Test przeprowadziłbym na rh majac clean boot, ale ladujac sam driver hdd (ktory?), bo tak zakladam dema sa puszczane na parties. Mówisz o STE wiec można by dyskutować czy TOS 1.6 i 2.06 zachowa się dokładnie tak samo - nie wiem. Aha, wez tez pod wzglad ze sam player muzyki moze tez wewnatrz zrobic Ci malloc (np ztcp gdy masz muzyke ym z perkusja na dma sound o ile nic nie mieszam). PS podpytaj tez ludzi na #atariscne na ircnet - dobre zrodlo wiedzy o 16&32bit

EDIT: pomysł Cypriana z podaniem info o pamięci w pliku NFO jest także spoko imho

Maciek
--------
Atari 65XE + Ultimate 1MB + Stereo + SIO2SD | Atari 520STE + 4MB + UltraSatan | Atari Falcon 030 + CT60e + 14MB ST + 256MB TT + 68882  + CF + Netusbee | Amiga 500 + 1MB + Gotek | Amiga 600 + 2MB Chip + 8MB Fast + CF

7 Ostatnio edytowany przez laoo/ng (2021-02-09 14:10:25)

Demo będzie doładowywane z dysku, bo muzyka będzie strumieniem (więc odpada problem alloców playera muzyczki). Ja mam dość czyste atari STE (TOS 2.06) z 4MB RAMu na którym mam tylko sterownik Putnika do Ultra Satana. Nic poza tym. Nie byłem po prostu pewny, czy ta konfiguracja nie jest zbyt syntetyczna i czy ludzie nie mają załadowanych więcej rzeczy, bo jestem zupełnie zielony w kwestii "co się miewa" w STkach, a nie chciałem zgrzytów jeśli okaże się, że uruchomi się tylko u mnie.
W każdym razie skoro padła tu liczba 3.7 MB, to póki co uznam to za górny limit, jaki można wymagać i słuszna informacja, żeby jasno zdefiniować w opisie ile się wymaga i ludzie będą mogli się do tego dostosować (w granicach rozsądku). Dzięki!

8

A te 3.7 to Cyprian podałeś jako faktyczną estymatę czy tylko przykład? ;)

Maciek
--------
Atari 65XE + Ultimate 1MB + Stereo + SIO2SD | Atari 520STE + 4MB + UltraSatan | Atari Falcon 030 + CT60e + 14MB ST + 256MB TT + 68882  + CF + Netusbee | Amiga 500 + 1MB + Gotek | Amiga 600 + 2MB Chip + 8MB Fast + CF

9

Ja myślę, że przykład, ale mnie zadowala i będę podpierał się autorytetem tego wytrawnego STkowca ;)

10

Jest to bezpieczna wielkość z mojej głowy.
Z tego co pamiętam to u mnie HDDriver z pamięcią cache zajmował około 64kB. TOS zajmuje również nie więcej niż kilkadziesiąt KB. Dodałem 200kB na jakieś akcesoria i wyszło mi 3.7MB

Lynx I / Mega ST 1 / 7800 / Portfolio / Lynx II / Jaguar / TT030 / Mega STe / 800 XL / 1040 STe / Falcon030 / 65 XE / 520 STm / SM124 / SC1435
DDD HDD / AT Speed C16 / TF536 / SDrive / PAK68/3 / Lynx Multi Card / LDW Super 2000 / XCA12 / SkunkBoard / CosmosEx / SatanDisk / UltraSatan / USB Floppy Drive Emulator / Eiffel / SIO2PC / Crazy Dots / PAM Net
http://260ste.atari.org

11 Ostatnio edytowany przez Kroll (2021-02-09 19:33:02)

Jesli ktos uzywa HDDrivera tak jak ja mam TOS 2.06 (na razie tylko) i uruchamiam z wicisnietym CTRL to mi pokazuje dokladnie , 3952546, jesli uruchomie Hddrivera z w cisnietym jeszcze klawiszem ESC (hddriver zajmuje mimilna pamieć) to TOS pokazuje 3959146.

Uzywam US jako hdd.

Falcon CT63, CTPCI + Radeon 9250, napęd MO Fujitsu 230 MB oraz naped Syquest 230 MB, Nagrywarka Yamaha CDRW 2100, Napęd DVD-ROM, Netusbee, Skaner EPSON GT8000/Falcon 030, Ram 14 MB, karta CF 16 GB/Hades 060, CD-ROM, Nagrywarka Yamaha CDR, karta sieciowa, napęd Syquest 44 MB/Atari TT 030; 10 MB ST-Ramu, 64 MB TT-Ramu, Zewnętrzny naped CD-ROM, napęd MO Fujitsu 230 MB, karta graficzna MEGA Vision 300 Netusbee/Atari Jaguar + Skunkboard, Atari 65 XE + SIDE

Najwięcej możesz wycisnąć robiąc trackdemo, wtedy teoretycznie możesz mieć prawie całą pamięć -pierwszy kilobajt i -TOS. Jeżeli demo ma być odpalane z TOSa, to zrób jak sugerował Sqward - na starcie Mshrink (bo TOS normalnie przydziela procesowi całą dostępną pamięć) i potem Malloc. Innym rozwiązaniem jest użycie sekcji BSS, wówczas gdy wolnej pamięci będzie za mało TOS da o tym komunikat. Generalnie wydaje mi się że spokojnie można liczyć na 3.5MB i naprawdę ciężko mi sobie wyobrazić (na ten moment ;)) demo które potrzebowałoby więcej.  To co wskazał Kroll to też nie jest ostateczna wartość bo Hddrivera można różnie skonfigurować, i wówczas będzie różnie.

A jak bardzo potrzebujesz dużo pamięci, możesz wykorzystać TTram, ale ilość STków które go mają można policzyć prawdopodobnie na palcach jednej ręki. Ja mam, więc mi nie przeszkadza :P

Atari: FireBee, (Falcon030 CT60e SuperVidel SvEthlana CTPCI), TT, (520ST Pak030 Frak PuPla Panther), (520ST 4MB ST RAM 8MB TT RAM CosmosEx SC1435), (1040STFM UltraSatan SM124), (1040STE 4MB ST RAM 8MB TT RAM CosmosEx NetUSBee SM144 SC1224), 260ST, 520 ST+, (MEGA ST SM125), (65XE Rapidus U1MB VBXE SIDE2 SIO2PC), (Jaguar SkunkBoard), Lynx II, 2x Portfolio

13

@Kroll - Dzięki, widzę, że można wycisnąć naprawdę dużo, więc jest sporo marginesu.
@Adam - Planujemy demo plikowe doczytujące się z HD na STE i nie mam pojęcia co wyjdzie z kompatybilności z większymi Atarkami, więc na pewno ograniczę się do standardowej pamięci ST.
Nie rozumiem jeszcze do końca zależności mshrink i malloc. Planuję zrobić proces, który będzie zajmował malutko (mało code, data i bss), który rozejrzy się po zmiennych systemowych sprawdzając ile jest pamięci i wtedy zrobi mshrink na tyle pamięci ile mu potrzeba. Nie wyczytałem w docach, żeby mshrinkiem dało się tylko zmniejszać pamięć a nie powiększać, dlatego nie zakładałem, że będę wołał malloc (mam negatywne odczucia  co do runtime'owego zarządzania pamięci).

14

Co prawda moje doświadczenie w ST jest małe, ale ja to robię tak, że definiuję odpowiednio dużą sekcję BSS i niech TOS się martwi (choć chyba nic mojego póki co nie wymaga więcej jak 520 :) ).

15

No jest wiele opcji. Rozwiązanie z odpowiednią sekcją BSS chyba jest najprostsze, bo TOS sam wyświetli odpowiedni komunikat jak pamięci będzie za mało. Wyobrażam sobie, że takie bardziej zaawansowane scenariusze pewnie mają znaczenie przy większych Atarkach, które mają multitasking, ale w przypadku zwykłego ST ze zwykłym TOSem i tak wychodzi na jedno.
Doczytałem jeszcze teraz dokumentację i rzeczywiście przeczytałem, że TOS przydziela zawsze wszystko, a mshrink (alternatywna nazwa setblock) rezerwuje konkretny obszar, więc nie ma tam mowy o zwiększaniu pamięci bo i tak na starcie ma się maksa.

16

laoo/ng napisał/a:

Doczytałem jeszcze teraz dokumentację i rzeczywiście przeczytałem, że TOS przydziela zawsze wszystko, a mshrink (alternatywna nazwa setblock) rezerwuje konkretny obszar, więc nie ma tam mowy o zwiększaniu pamięci bo i tak na starcie ma się maksa.

Mshrink zmniejsza wielkość przydzielonego bloku
Malloc/Mxalloc rezwerwują obszar pamięci

Lynx I / Mega ST 1 / 7800 / Portfolio / Lynx II / Jaguar / TT030 / Mega STe / 800 XL / 1040 STe / Falcon030 / 65 XE / 520 STm / SM124 / SC1435
DDD HDD / AT Speed C16 / TF536 / SDrive / PAK68/3 / Lynx Multi Card / LDW Super 2000 / XCA12 / SkunkBoard / CosmosEx / SatanDisk / UltraSatan / USB Floppy Drive Emulator / Eiffel / SIO2PC / Crazy Dots / PAM Net
http://260ste.atari.org

17

Używanie sekcji BSS jest o tyle niebezpieczne, że nie możesz być pewny czy program jest załadowany do ST czy TT ramu. Dlatego lepiej jest mimo wszystko zrobić Mxalloc. Zależy od pedantyczności programisty :)

What can be asserted without proof can be dismissed without proof.

18

Drugi rozdział Atari Compendium opisuje format pliku GEMDOSowego. Pod offsetem 0x16 jest pole PRGFLAGS, które ma bity określające do jakiej pamięci ma być załadowany proces.
@sqward wg tego opisu jeżeli ustawi się te pole na 0 to program nie zostanie załadowany do TT ramu. Źle to rozumiem, czy to nie są dobre informacje?

19

Dobrze zrozumiałeś, ale user może to zmienić. Polecam ustawienie bitu FASTLOAD jeśli nie chcesz, żeby TOS czyścił całą pamięć dostępną po załadowaniu programu (tej której się pozbywasz robiąć Mshrink).

What can be asserted without proof can be dismissed without proof.

20 Ostatnio edytowany przez laoo/ng (2021-02-10 11:48:01)

Tak. FASTLOAD brzmi fajnie.
W sumie... teraz zaświtała mi w głowie idea, że tylko bufory na pamięć ekranu, DMA sampli i dysku oraz cokolwiek dotykam blitterem muszą być w ST ramie, a cała reszta mogłaby być też i w TT ramie. Nie wiem tylko, czy to jest warte zachodu w porównaniu do wymagania, aby po prostu było wolne dla dema (max) 3.7 MB ST ramu, skoro liczbę STków z TT ramem można liczyć wg Adama na palcach jednej ręki, a nie zakładam, żeby demo odpalało się poprawnie na TT albo Falconie.

Żebyście tylko nie rozumieli mnie źle. Nie planuję potworka zjadającego cały RAM. Pytałem się tylko o limity, których nie można przekroczyć, bo będę pisał narzędzia, które mi tą pamięcią będą automatycznie zarządzały i chcę je jakoś nastroić kiedy mają wywalać błąd.
W każdym razie wielkie dzięki, bo dużo się z tego wątku dowiedziałem.

21

Zawsze się znajdzie ktoś komu się nie podoba, że demo nie działa na 1MB :)

What can be asserted without proof can be dismissed without proof.

22 Ostatnio edytowany przez saulot (2021-04-22 12:53:08)

Z ustawianiem flag ttram/altram w binarce i tworzeniem sobie bufora ramki w BSSie może być problem na sprzętach z alt/tt ramem, bo bufor ramki skończy w ten sposób w fastramie (,ale to dosyć ekstremalny przypadek, który już przerabiałem). Więc bss/data sobie można używać, ale bufor ramki lepiej sobie zaalokować dynamicznie/jawnie z st ramu z odpowiednim alignmentem. Idealnie by było na początku programu zalokować sobie 1 ciągły bufor MShrink() + Malloc/MxAlloc(w zależności od os'a) i tym jakoś zarządzać sobie według uznania. Jak nie ma wymaganego minimum to zamykasz program. Co do funkcji Malloc/Mxalloc() są ok, jak się ich dużo nie używa. No i warto rozważyć, żeby demo działo na nowszych sprzętach, ale potrzebna jest większa ilość kodu do setupowania/wykrywania ficzerów sprzętu itp. Nie jestem pewien, ale debugery moga sobie przechowywać jakieś rzeczy w górnych obszarach pamięci, chyba że piszesz bezbłędnie i wszystko działa od 1 strzała i ich nie potrzebujesz ;), więc pewnie trzeba zostawić jakiś margines.
W moich STe mam dostępne 4mb+8mb, w mega STe 4mb+6Mb (przestrzeń adresowa jest zajęta przez vme). Istnieje też możliwość ładowania os'a do fast ramu.

=========================================
[www] https://nokturnal.pl
[ 16/32 bit Atari development wiki] https://bus-error.nokturnal.pl

23

saulot napisał/a:

No i warto rozważyć, żeby demo działo na nowszych sprzętach

Jakbym pisał użytek, to jasne, ale dopóki ktoś mnie nie uświadomi, że się mylę, to dla mnie demo na STe wymaga STe, a nie nowszego sprzętu. TT i Falcon na 100% odpada, muszę jeszcze poczytać czym się różni Mega STe.

saulot napisał/a:

W moich STe mam dostępne 4mb+8mb, w mega STe 4mb+6Mb (przestrzeń adresowa jest zajęta przez vme). Istnieje też możliwość ładowania os'a do fast ramu.

Mam zatem rozumieć, że jeżeli w ciemno będę używał adresów od punktu załadowania programu aż do $3fffff, to taki kod rozwali Ci coś w systemie i już będzie wymagany reboot?

24 Ostatnio edytowany przez Cyprian (2021-04-22 14:52:53)

laoo/ng napisał/a:

Jakbym pisał użytek, to jasne, ale dopóki ktoś mnie nie uświadomi, że się mylę, to dla mnie demo na STe wymaga STe, a nie nowszego sprzętu. TT i Falcon na 100% odpada, muszę jeszcze poczytać czym się różni Mega STe.

Jest parę różnic, z tych istotnych dla dema to:
- dodatkowe 4 cykle (dla procesora 8Mhz) BLiTTERa na każdy przebieg blittingu;
- pamięć cache;
- oraz 16MHz;
- TOS 2.0x.
Domyślnie system startuje z 8MHz noCache, ale warto się upewnić czy nie zostało to włączone w międzyczasie.
Cache jest typu write-through, czyli każdy zapis ląduje od razu w RAM. Ponoć użycie BLiTTERa czyści pamięć cache ale tego nie sprawdziłem.
W TOS 2.0x inaczej niż w 1.x obsługiwany jest dysk -dodatkowo wykorzystano Timer-C. Więc jak zmienisz coś w obsłudze MFP, to nie odczytasz danych.

laoo/ng napisał/a:

Mam zatem rozumieć, że jeżeli w ciemno będę używał adresów od punktu załadowania programu aż do $3fffff, to taki kod rozwali Ci coś w systemie i już będzie wymagany reboot?

domyślnie system przydziela całą dostępną pamięć aplikacji: od miejsca startu aż do memtop:

laoo/ng napisał/a:

$000436|long |End of TPA (user memory)                             |_memtop

Może być tak że na górze pamięci coś siedzi, na przykład bufor "_FRB".

Lynx I / Mega ST 1 / 7800 / Portfolio / Lynx II / Jaguar / TT030 / Mega STe / 800 XL / 1040 STe / Falcon030 / 65 XE / 520 STm / SM124 / SC1435
DDD HDD / AT Speed C16 / TF536 / SDrive / PAK68/3 / Lynx Multi Card / LDW Super 2000 / XCA12 / SkunkBoard / CosmosEx / SatanDisk / UltraSatan / USB Floppy Drive Emulator / Eiffel / SIO2PC / Crazy Dots / PAM Net
http://260ste.atari.org

25

Mega ste ma cache i szyne 8/16mhz, w trybie kompatybilności ze zwykłym ste trzeba to wyłączyć.
Falcon ma tryb kompatybilności z STe(, więc jest de facto kompatybilny wstecz z STe, ma blitter), trochę więcej ustawień niż Mega STe, ale podobnie ustawiasz szyne na 8mhz i wyłączasz cache. Są tylko drobne różnice w działaniu blittera pomiędzy tymi maszynami (jest cały faq temu poświęcony). No, chyba że chcesz korzystać z dopalonego procka/cache'a. Są flaszki z różnymi prockami 030>, trzeba to wykryć i coś z tym faktem zrobić. Tutaj jest fajny artykuł: http://leonard.oxg.free.fr/articles/mul … atari.html, widzałem gdzieś jeszcze inny, w jakimś magu Atari, ale nie mogę go teraz znaleść.
Generalnie jak sobie piszesz po przestrzeni adresowej wg mapy to istnieje możliwość, że coś nadpiszesz jakiemuś drugiemu programowi, mapa się trochę zmieni jak wejdzie inny niż Twój system operacyjny (np tos 2.06 zajmuje więcej pamięci niż 1.62). Kiedyś przy maszynach z 0,5mb była zarządzana pamięć (w sensie mam tutaj przestrzeń adresową za systemem i robię sobie co chcę), ale później były problemy typu system operacyjny się zmienił (weszły nowsze wersje), ktoś załadował sobie do pamięci jakieś programy rezydentne/toole, weszły dodatkowe zakresy rejestrów i to co było ok, przestało działać. Dlatego piraci zaczeli wypuszczać poprawki gier. Np. fixy grupy dbug spatchowane wykrywają sprzęt na starcie i dają możliwość włączenia/wyłączenia cache'a, 8/16mhz jak jest możliwość plus kilka innych(np ładowanie danych do ramdysku).Nie musisz tego robić, wystarczy tylko "zresetowanie" do podstawowego modelu(8mhz/brak cache). No i ludzie różnie sobie odpalają dema, mają różne wersje tosu, jak program się odpala z dyskietki to użytkownik sobie zrobi reset, z twardego dysku to fajnie żeby program wracał po ludzku do desktopu, nie skaszanionym ekranem i nie wariującym zegarem systemowym (trzeba odkręcić haki, które się zrobiło przed startem dema).

=========================================
[www] https://nokturnal.pl
[ 16/32 bit Atari development wiki] https://bus-error.nokturnal.pl