126

(31 odpowiedzi, napisanych Sprzęt - 8bit)

Lepiej napisać to tak:

static const char * const msg[] = { ... };

I wtedy to jest zwykła tablica o stałym adresie (spoko, non-stop spotykam się z kodem napisanym tak, jak Ty napisałeś :).
Kluczowe jest, czy kompilator zrozumie, że "i" jest w zakresie 0..127 i wtedy:

; AX=i
    asl @
    tay
    lda msg,y
    ldx msg+1,y
    jsr pushax

Tu widać, że w przypadku 65816 nie ma to znaczenia.

127

(31 odpowiedzi, napisanych Sprzęt - 8bit)

seban napisał/a:

nie wiem jak jest dokładnie w CC65 (trzeba by podpytać np. Fox-a) ale wydaje mi się że stos jest emulowany (przynajmniej gdy wybierzemy "większy model pamięci/adresowania"). Niestety narzut kodu przy realizacji w tego w ten sposób jest dość spory i mam wrażenie że wydajność kodu generowanego przez kompilator drastycznie spada.

ABI cc65 stosuje do argumentów i zmiennych lokalnych stos programowy. Na stronie zerowej jest wskaźnik o identyfikatorze "sp". Stos sprzętowy jest używany tylko do adresów powrotu i na dane tymczasowe. Odczyt z wierzchołka stosu programowego wygląda tak:

    ldy #1
    lda (sp),y
    tax
    dey
    lda (sp),y

Na tej zasadzie mamy dostęp do wierzchnich 256 bajtów stosu.

seban napisał/a:

Wydaja mi się że w przypadku 65xx i C problemem stają się również operacje które wymagają użycia dużej ilości
wskaźników, przykładowo:

ctx->iocb.len = 256;

Tu widzę tylko jeden wskaźnik: ctx. Zagnieżdżone struktury mają offsety będące stałymi czasu kompilacji.

; AX=ctx
    sta ptr
    stx ptr+1
    ldy #offsetof(ctx_iocb.len)
    lda #<256
    sta (ptr),y
    iny
    lda #>256
    sta (ptr),y
perinoid napisał/a:

@Fox: Możesz wyspecyfikować, o co ci chodzi? Czego według ciebie nie zrobiłem lub co zrobiłem a nie powinienem? I przede wszystkim, czemu powinienem byl tak zrobić (lub nie)? Konkrety proszę. Przyglądałem się fragmentom, np. jak robiona jest pętla dla tablicy dłuższej niż jedną strona albo jak jest robione memcpy. Ale całego kodu nie przeglądałem bo nie było to dla mnie interesujące.

Twierdzę, że wydajność kodu zależy od tego, czy ISA jest dostosowana do semantyki języka programowania.
Twierdzisz, że "można spokojnie napisać kompilator", "Bez żadnego problemu", "zadanie dla studenta 3-go roku informatyki", ale nawet nie zajrzałeś do wyników cc65, nie wspominając o jego algorytmach optymalizacji.
Jeśli nie było to dla Ciebie interesujące, to skąd tak śmiałe tezy?

128

(31 odpowiedzi, napisanych Sprzęt - 8bit)

perinoid napisał/a:

Myślisz zbyt "szablonowo" - język wejściowy to jedno, kod generowany to drugie. Można spokojnie napisać kompilator
(...)
nie przyglądałem się temu jak wygląda wygenerowany kod maszynowy.

Ciekawe podejście do problemu.

129

(31 odpowiedzi, napisanych Sprzęt - 8bit)

Dzięki za odpowiedzi! Autor posta chyba popłynął. W komentarzu ktoś mu wytknął, że nie wszystkie myszki działają z pasywną przejściówką.

Hmmm, nie szukają w tym WDC inżyniera kompilatora? ;)

Z C na 6502 są dwa podstawowe problemy:

  • większość kodu operuje na intach, które są co najmniej 16-bitowe

  • mocno używany jest stos, a 6502 oferuje tylko dostęp do elementu na wierzchu i ma mały stos

65816 rozwiązuje oba te problemy. Nie widziałem kodu wygenerowanego dla 65816, ale mogę się założyć, że jest znacznie bardziej wydajny, niż dla 6502.

130

(31 odpowiedzi, napisanych Sprzęt - 8bit)

Adam Klobukowski napisał/a:

Nie widzę żadnego odniesienia do 6502. To na pewno ten link co trzeba?

Pod zdjęciem adaptera: "It has a full-fledged computer inside it, usually a simple embedded processor with a 6502 core".

131

(31 odpowiedzi, napisanych Sprzęt - 8bit)

https://www.quora.com/Does-a-USB-to-PS- ... -protocols

Ciekawe, naprawdę stosuje się rdzenie 6502 w takich zastosowaniach?

132

(12 odpowiedzi, napisanych Fabryka - 8bit)

Szpulowiec w kuchni Pina rok temu brzmiał świetnie. A VBXE robi wszystko to, co XEP i wiele więcej.

133

(2 odpowiedzi, napisanych Software, Gry - 8bit)

Nie znałem tego programu, a Control+H pokazuje imponującą listę operacji! Dodałem obsługę do RECOIL.

134

(21 odpowiedzi, napisanych Software, Gry - 8bit)

"Jump! (1986)(Happy-Computer)(DE)[a].xex" ? Wygląda jak dekompresja Koala.

135

(139 odpowiedzi, napisanych Programowanie - 8 bit)

xxl napisał/a:

dobrze... dekompresor ZX0 strumienia z pliku: https://xxl.atari.pl/zx0-decompressor/

A wiesz, że dekompresor ZX0 na 6502 już był? Jest link na https://github.com/einar-saukas/ZX0

Szybkie mnożenie w Shrinklerze:
http://www.atari.org.pl/forum/misc.php?action=pun_attachment&amp;item=7538&amp;download=0

Dekompresja obrazka trwa teraz 5,6 sekundy zamiast 9,5 sekundy.

Koszty:

  • dodatkowe 1,5 KB na tablice kwadratów

  • kod dłuższy o około 150 bajtów - co nie jest złym wynikiem, bo wciąż jest krótszy od inflate

  • dodatkowe 8 bajtów na stronie zerowej

136

(4 odpowiedzi, napisanych Programowanie - 8 bit)

W Numenie większość efektów była odpalana z VBLK, włącznie z tymi, które zajmowały kilka ramek. Dekompresja kolejnych części oraz buforowanie muzyki odbywały się w "wątku głównym".

137

(4 odpowiedzi, napisanych Programowanie - 8 bit)

VBLK nie, bo "X nie jest stałe". DLI by się nadało.

Inne podejście to jeśli procka jest jednorodna, wstawić do niej jakiś licznik, żeby sama umiała się przerwać.

138

(139 odpowiedzi, napisanych Programowanie - 8 bit)

Dzięki!

ZX0 widocznie ma podobne założenia, jak FlashPack - liczy się nie tyle stopień kompresji, co szybka dekompresja krótką procedurą. Całkiem sprytnie zaprojektowany!

139

(139 odpowiedzi, napisanych Programowanie - 8 bit)

xxl napisał/a:

jeśli ktoś potrafi to wydajniej spakować np. ustawienia deflatera to proszę podać parametry

zopfli --deflate --i4000: 1598 bajtów

Edit:
Dopisałem info o --i do instrukcji inflate. Pewnie nie byłem jedyną osobą, która nie wiedziała o tej opcji.

mono napisał/a:

Zrobiłem jeszcze

exomizer raw -E -o riverraid.exo riverraid.rom

i jest 6256.

Na czym polega różnica?

Przydałby się jakiś wzorcowy dla Atari 8-bit zestaw danych do kompresji, żeby porównywać kompresory:

  • riverraid.rom jest spoko, przydałby się jeszcze jakiś wiekszy nieskompresowany program

  • grafika (conan.gfx jest git)

  • plik tekstowy (gpl-3.0.txt?)

  • cmc, mpt lub rmt bez nazw instrumentów

140

(139 odpowiedzi, napisanych Programowanie - 8 bit)

WTF? Ci amstradowcy to piszą doktoraty z cruncherów?

141

(139 odpowiedzi, napisanych Programowanie - 8 bit)

Może kogoś zainteresuje mój warsztat. Mam teraz monitor 4K i świetny edytor, ale przy bardziej zaawansowanych optymalizacjach kartka jest niezastąpiona.

http://www.atari.org.pl/forum/misc.php?action=pun_attachment&amp;item=7491&amp;download=0

tebe napisał/a:

moglibyście rozważyć wersję dla 65816 ?

To ma sens, bo kod jest mocno 16-bitowy i nawet kulawe przełączanie się między trybami 8/16 bitów nie powinno boleć. Plus MVN się przyda. Ale dopał nie będzie taki, jak przy szybkim mnożeniu na 6502.

xxl napisał/a:

dziwna sprawa... dlaczego PC kompresory nie daja rady jakiemus kranczerowi z Amigi?

Dobre pytanie.
Na PC zwykle kompresuje się tylko bardzo duże zbiory i przykłada wielką wagę do wydajności dekompresji, a mniejszą do stopnia kompresji. Shrinkler wykonuje jedno mnożenie i kilka operacji warunkowych na każdy bit skompresowanego strumienia. Nawet na wypasionym pececie dekompresja tak skompresowanych gigabajtów trochę potrwa i nie ma jak jej zrównoleglić. Na Amidze i Atari każdy poczeka te kilka sekund na rozkompresowanie pojedynczych kilobajtów. Na pececie przydałaby się akceleracja sprzętowa. Być może dałyby radę akceleratory AI, które są świetne w mnożeniach.

142

(139 odpowiedzi, napisanych Programowanie - 8 bit)

Następne 19 bajtów. :)

143

(11 odpowiedzi, napisanych Programowanie - 8 bit)

Syzygy 7 - "Obsługa podkatalogów".

144

(4 odpowiedzi, napisanych Emulacja - 8bit)

Super, dzięki!

pomyśl proszę aby dodać do rapo, ew. na stronie z RECOIL jakiś plik z przykładowymi plikami (będzie łatwiej testować osobom które nie mają takiej kolekcji plików różnorakich na dysku).

Jest od zawsze examples.zip i aktualizowany na bieżąco. :) Przy czym są to po prostu moje pliki testowe, więc są interesujące ze względów technicznych, a nie estetycznych. Nie badałem licencji każdego pliku, natomiast odfiltrowałem NSFW.

145

(4 odpowiedzi, napisanych Emulacja - 8bit)

Jeśli tak, proszę o próbę zainstalowania RECOIL i sprawdzenia, czy RECOILWin się uruchamia. Jeśli wyskoczy komunikat błędu, poproszę zrzut ekranu. Dzięki!

146

(11 odpowiedzi, napisanych Sprzęt - 8bit)

Nie ten dział .;)

147

(139 odpowiedzi, napisanych Programowanie - 8 bit)

Dlaczego masz inne wyniki od moich? Skąd wziąłeś Shrinklera i Deflater? Ja skompilowałem Shrinklera z GitHuba, a zopfli z MSYS2.

148

(139 odpowiedzi, napisanych Programowanie - 8 bit)

xxl napisał/a:

roznego rodzaju dane, binarki, grafike, tekst, muzyke... wszystko pakuje !!! znacznie !!! lepiej od kokurencji.

gpl-3.0.txt: 35149
lzfse: 12545
zopfli --deflate: 11410
Shrinkler -d -p -9: 11584

149

(893 odpowiedzi, napisanych Scena - 8bit)

Tebe mądrze pisze we wszystkich trzech powyższych postach. Gdzie tu się klika lajki?

150

(139 odpowiedzi, napisanych Programowanie - 8 bit)

Czytając o PS5 dowiedziałem się jeszcze o czymś o nazwie Kraken: https://www.neogaf.com/threads/kraken-v ... 5.1570901/