126

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

W Kolony się nie zdobywa planet, ale zgaduję, że to jednak chodzi o to.
Przy okazji: http://kolony.net/ - kiedyś się zagrywałem :)

127

(158 odpowiedzi, napisanych Bałagan)

Dla wytrwałych, inny serial sci-fi, który na początku podobał mi się tak sobie, a na koniec ekstremalnie: Farscape :)

128

(158 odpowiedzi, napisanych Bałagan)

Mowa, Razor rzondzi, bardzo fajnie zrobione :)
Czy my trochę nie offtopikujemy? Ale ale, Kiero jest z nami, nikt nam nic nie zrobi :)

129

(158 odpowiedzi, napisanych Bałagan)

laoo/ng napisał/a:

Debestest, to był koniec pierwszego (best cliffhanger ever) i początek drugiego sezonu. Ok. To kto jeszcze jest fanem? Wpisujcie miasta ;)

No nie zgodzę się - zakończenie #3 jest de best - jak to wszystko jest zgrane z muzą, że na koniec leci 'all along the watchtower', i pokazana ziemia - bomba :)

130

(158 odpowiedzi, napisanych Bałagan)

W grę nie pogram, bo nie ma klienta na maca, ale film... mniam!
Ostatnie 10 minut 3go sezonu z 20 razy oglądałem - debestest :)
A za 2 mce leci 4ty, ponoć ostatni.
Kiero też jest fanem? :)

131

(50 odpowiedzi, napisanych Emulacja - 8bit)

Witamy na AtariArea :)

Dość dziwne, mi (pod MacOSX, nie Linux, ale zawsze coś podobnego) zarówno CapsLock jak i Shift działają poprawnie. Co do Shift+Ctrl, mam tak samo jak Ty.
Może jakiś Linuksowiec Ci pomoże.
Aha, i jeśli jeszcze tego nie zrobiłeś, zerknij do DOC/USAGE, tam są kombinacje klawiszy ogólne i dla SDL.

XXL poprosił, coby sprofilować na nowo.
Niestety, za każdym razem jak mam nowe źródła, muszę ręcznie wklepywać jakie obszary was interesują. TeBe, weź może aktualną wersję z http://eru.nutki.com/a8/game.asm (utils.asx tam też jest), i zaznaczajcie jakie obszary nas interesują przy pomocy declare_env, declare_env_full, end_env.
A tu mini zrzut z procedurką, o którą XXL prosił:

1a21 1a49     77331   0.71  E_1A76
0000 0044   2847004  26.18  PUTSHAPE
0000 ffff  10874168 100.00  GLOBAL

A mi najnowsza poprawka Magnusa jak najbardziej nie działa (bo na oko nie powinna)

a tu jeszcze sam profajl dla kilku sekund na planszy z dwoma jakby duszkami:

982a 9850     82750   1.06  NMI
2147 2188    109371   1.40  E_214D
be32 bef1    215908   2.76  SHFBMP4
bd97 be32    281793   3.60  SHFBMP3
1be0 1bf5    387360   4.95  E_1BFA
1bd1 1c2e    443274   5.67  BMPMIRROR
1b44 1bb7    494828   6.33  E_1B92
21b9 22c4    748493   9.57  E_21BF
1b2c 1b3a   1314534  16.80  E_1B7B
0000 0044   2264565  28.95  PUTSHAPE
1c80 2d90   2315946  29.61  CODE_E_1C86_E_2D96
1874 1c80   2570993  32.87  CODE_E_18C6_E_1C86
1607 1c80   2581040  33.00  CODE_E_1659_E_1C86
1607 2d90   4896986  62.60  CODE_E_1659_E_2D96
0000 ffff   7822384 100.00  GLOBAL

Zająłem się tylko i wyłącznie próbą sprofilowania tego.

http://eru.nutki.com/a8/prof
pograłem kilka sekund, i zrzuciłem profil gdzie idzie czas (w kolumnach: adres / numer instrukcji / ilość cykli). Warto to sobie posortować po drugiej lub trzeciej kolumnie, pomaga zidentyfikować "intensywne" obszary

http://eru.nutki.com/a8/game.asx
http://eru.nutki.com/a8/game.lst
http://eru.nutki.com/a8/game.lab
oryginalny game.asx rozszerzony o makra definiujące interesujące nas obszary - obszary brałem patrząc na prof

Wyniki (tylko obszary >1%, adres lo/hi, liczba cykli, udział procentowy, nazwa; obszary się nakładają, patrz lo/hi):

982a 9850    513250   1.06  NMI
2147 2188   1633402   3.39  E_214D
1be0 1bf5   1674630   3.47  E_1BFA
1b44 1bb7   1725336   3.58  E_1B92
1bd1 1c2e   2052481   4.25  BMPMIRROR
bd97 be32   2497068   5.18  SHFBMP3
21b9 22c4   5178095  10.73  E_21BF
1b2c 1b3a   9763442  20.24  E_1B7B
0000 0044  12227423  25.35  PUTSHAPE
1874 1c80  15759503  32.67  CODE_E_18C6_E_1C86
1607 1c80  15864855  32.89  CODE_E_1659_E_1C86
1c80 2d90  16314202  33.82  CODE_E_1C86_E_2D96
1607 2d90  32179057  66.71  CODE_E_1659_E_2D96
0000 ffff  48238851 100.00  GLOBAL

Szybka analiza:
- pushape warto optymalizować dalej

- e_1b7b zajmuje dużo bardzo. Kod wygląda tak:

E_1B7B    mva    (E_0049),y    E_0400,x
    mva    (E_004B),y    E_0500,x
    iny
    inx
    bne E_1B7B

może warto zamienić to na

E_1B7B    mva    adres1,x    E_0400,x
    mva    adres2,x    E_0500,x
    inx
    bne E_1B7B

poprzez na sztywno ustawienie adres1 i adres2

- cześć cykli idzie nie wiadomo gdzie jeszcze (zwłaszcza te z obszaru e_1c86_e_2d96 - tam  mamy zidentifikowane ~15% z ~34%), wymaga więcej profilowania, ale to jest trudne jak kod jest tak strasznie nieczytelny :)

- ogólnie, nie widać, żeby dało się przyspieszyć całość znacząco modyfikując jeden kawałek kodu :(

Spoko spoko, zabrałem się do zabawy, może niedługo będę miał jakieś newsy

Albo inaczej - TeBe, podeślij mi źródełka, a ja je prędko sprofiluję :)

Ha, pewnie używasz Windows, to tam Ci nie pomogę - może ktoś nakierować TeBe jak to zrobić???

Eee tam, drobne poprawki, zwłaszcza w monitorze, który jest w dużej mierze jednak niezależny, można by robić.

Ale, wróćmy do tematu: TeBe, próbowałeś moich sugestii? Pomogło to coś? Zasadniczo, dopóki nie sprofilujecie kodu, ciężko powiedzieć co warto optymalizować...

Wygląda dość ciekawie, ale bez sensu IMO robić nowy produkt - dlaczego nie rozbudujesz atari800?
Poza tym, zdaje się mieć inny cel niż moje rozszerzenie - ja chcę po prostu zliczać cykle, a Ty chyba tego nie robisz...
A taki przykład sesji jak podałeś, atari800 mniej więcej oferuje...

odchodzimy coraz bardziej od tematu - o GIT tu nie dyskutujemy, jak ktoś będzie chciał postawić repozytorium dla projektów a8, niech założy nowy wątek

co do profilowania - to się mieści w temacie. Bober, napisz coś więcej :)

http://git.or.cz/ :)

Aha, i zakładam, że to działa dużo wolniej jak ROR się wykonuje 5,6,7 razy... to czemu nie zrobić symetrycznej wersji z ROL dla tych przesunięć? :)

I ostatnia kwestia - dlaczego nie wrzucić takich źródełek na sourceforge? moglibyśmy wspólnie testować, ulepszać, itp

Co do łatki, to 0xF widział, fakt, a jak ktoś chce, niech wrzuci do atari800 - ja jestem bardzo za :)

Co do przyspieszenia KL, ten kawałek mi się nie podoba bardzo:

    ldy E_0050        ; przesunięcie pixli bitmapy kształtu i bitmapy maski

E_1BD8    ldx E_004D        ; liczba powtórzeń pętli w zmiennej E_0050
    clc
E_1BDB    ror E_0400,x    ; kształt
    inx
    bne E_1BDB

    ldx E_004D
    sec
E_1BE4    ror E_0500,x    ; maska
    inx
    bne E_1BE4
    dey
    bne E_1BD8

Wewnętrzna pętla aż się prosi w rozwinięcie w coś takiego (zależy jaka jest maksymalna wysokość, ja zakładam tutaj 256, więc RORuję całe E_0400).

rors_0400
  ror E_0400+$00
  ror E_0400+$01
  ...
  ror E_0400+$FF
  rts

I to samo dla E_0500.
Potem robimy tablicę adresów wywołań:

calls_0400_lo 
:256 dta <[rors_0400+#*3]
calls_0400_hi 
:256 dta >[rors_0400+#*3]

I na koniec zmieniamy kod a'la:

    ldx E_004D        ; liczba powtórzeń pętli w zmiennej E_0050
    mva calls_0400_lo,x jsr_0400+1
    mva calls_0400_hi,x jsr_0400+2
    mva calls_0500_lo,x jsr_0500+1
    mva calls_0500_hi,x jsr_0500+2

    ldy E_0050        ; przesunięcie pixli bitmapy kształtu i bitmapy maski
E_1BD8    clc
jsr_0400 jsr E_0400
    sec
jsr_0500 jsr E_0500
    dey
    bne E_1BD8

to tak na szybko, może to ma sens

145

(8 odpowiedzi, napisanych Bałagan)

3D jak 3D, fizyki nie zrobi się wystarczająco szybko...

Nie mam czasu spojrzeć na to i pomyśleć, ale na szybko to pha/pla nie używamy nigdy w życiu jak chcemy mieć coś szybkiego

Ogólnie, warto zainwestować w narzędzia do profilowania kodu. Do prac nad Yoompem miałem następującą kombinację:

1. Makra w MADSie do zaznaczania, że obszar nas interesuje, w stylu:

declare_env .MACRO
ENV_BEG_:1  equ :2
ENV_END_:1  equ :3
    .ENDM

Jak się np wpisze na koniec funkcji A takie coś:

 declare_env A A *

to w pliku .LAB dostaniemy odpowienie labelki

2. Modyfikację atari800, żeby można było zliczać gdzie ile czasu CPU spędza. Ten diff pokazuje przykład: http://eru.nutki.com/a8/a8.diff . Po odpaleniu emulgatora w monitorze wpisujemy 'APR', potem wracamy do programu, i po pewnym czasie wpisujemy 'APW plik', który będzie zawierał dokładne informacje.

3. Łączymy rzeczy z punktów 1 i 2, np tym skrypcikiem: http://eru.nutki.com/a8/prof.pl. Przykład dla yoompa (jakiś stary, może teraz prof.pl generuje coś ciut innego, i przesortowany ' | sort -k 3'):

ENGINE               4661 4841   109196   2.93   334018   2.36
MUSIC.PLAY           7073 73f6   167847   4.50   532707   3.77
MUSIC                7013 772e   167982   4.51   533217   3.77
BALL.STUPID_MUL      5645 5668   173944   4.66   565552   4.00
WAIT_VBL             4b63 4b70   195294   5.24   586406   4.15
PM.SHOW_BALL         4db7 4e8a   208028   5.58   736220   5.21
BALL                 5526 57e6   255167   6.84   830515   5.87
PM                   4d4d 5526   266192   7.14   939532   6.65
TEXTURES             4c6d 4d20   467670  12.54  1411132   9.98
BLITTER_CODE         0400 35ff  2233812  59.91  9400560  66.49

kolumny oznaczają: labelkę, początek/koniec, ilość rozkazów i procent całości, ilość cykli i procent całości.

Jakbyśmy usiedli, to może na bazie tego zrobilibyśmy coś pożytecznego dla wszystkich? Mi to strasznie pomaga optymalizować rzeczy.

147

(26 odpowiedzi, napisanych Scena - 8bit)

A może coś jest - jest taka moda na portowanie w dziedzinie gier, to może czas na demka? ;)

148

(26 odpowiedzi, napisanych Scena - 8bit)

Pewnie by się dało sportować DD na atarkę, ale nie wiem po co :)
Nie wyglądałaby jakoś lepiej niż na C64 prawdopodobnie - już wolałbym jakby ktoś sportował fr-08 albo jeszcze lepiej fr-25 ;)

149

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

Co do obszaru $0000..$2000 - to jedna rzecz wykorzystywać to, a inna rzecz ładować dane w ten obszar.
Co do ładowania bezpośrednio tam, jestem mocno przeciwny, bo rzeczywiście ludzie używają różnych DOSów itp.
Jak ktoś chce ten obszar wykorzystać, można go użyć np na generowane dane, albo spakować program tak, żeby ładował się od $2000+ i rozpakowywał gdziekolwiek. Taki Exomizer pozwala z tego co pamiętam rozpakowywać od $0200 w górę... Inne packery pewnie też...

150

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

Pecus napisał/a:

To drugie to nie jest gra na cartridge!!!

Czemu nie? Odpala się z karta, to jest to gra na cartridge :)