1

Temat: wyswietlanie score

witam,

potrzebuje szybszego sposobu drukowania na ekran. damage liczony jest w bcd, wartosci w przedziale 0-999999.

lda damage
and #%1111
adc #16
sta ekran+1

lda damage
and #%11110000
lsr @
lsr @
lsr @
lsr @
adc #16
sta ekran

podzieli sie ktos jakas fajna procka?

http://atari.pl/hsc/ad.php?i=1.

2

Odp: wyswietlanie score

Trzymaj wartość damage w rozpakowanym kodzie BCD (jedna cyfra na bajt), zaoszczędzisz kila cykli kosztem pamięci (6 bajtów zamiast 3).

lda damage
ora #$10
sta ekran+1
lda damage+1
ora #$10
sta ekran

ora #$10 zastępuje adc #$10, co zwalina cię z troski o znacznik C i D. :) Ponieważ wynik trzymay jest w młodszej połówce bajtu, to starsza jest zawsze wyzerowana.

Mała uwaga:

Trzymając damage w formie zapropoowanej przez mnie musisz pilnować 4 starszych bitów przy zwiększaniu licznika, bo:

clc
sed
lda damage
adc #1
sta damage

dla damage = 9 da $10, czyli za dużo. Wszystko zależy co częściej robisz: zwiększasz liczik, czy go wyświetlasz.

Zawsze mam rację, tylko nikt mnie nie słucha.

3

Odp: wyswietlanie score

Szybkiego mowisz....

ldx damage
lda tablicagotowychnaekranadolnychcyferek,x
sta ekran+1
lda tablicagotowychnaekranagornychcyferek,x
sta ekran


:) - tyle ze tracisz 512b na tablice (sorry ... wystarczy oczywiscie 306b), ale mozesz miec tam gotowe kody ekranowe, no i przydadza sie nie tylko przy wyswietlaniu damage zapewne.

No i mozesz trzymac damage, tak jak trzymales i nie sprawdzac niczego specjalnie przy operacjach BCD.

P.-S.  Co to za pomysl, ze zalezy Ci na tych kilku cyklach co jeden VBL, chyba nie planujesz wyswietlania czesciej :)

SORRY! Na szybko zle policzylem wymagane dlugosci tablic! (wlasciwie to nic nie liczylem :) ) - czyli trzeba o 106b wiecej niz podalem na poczatku - teraz jest prawidlowo 153b na jedna tablice.

Ostatnio edytowany przez Pecus (2005-07-18 18:17:03)

Bla bla bla bla, bla bla bla. Bla bla bla - bla - bla. Blabla bleee.

4

Odp: wyswietlanie score

nie chce zmieniac organizacji bcd (sporo mam obliczen). drugi sposob mi sie podoba. licze na oko, nie mam teraz tabelek ale widze, ze oszczednosc bedzie ok. 10 cykli na 1 pare cyfr, bede mial 10 par to ok. 100 cykli na 1 wygaszanie oszczednosci kosztem 200bajtowej tablicy. nie jest zle. :-)

http://atari.pl/hsc/ad.php?i=1.

5

Odp: wyswietlanie score

Sprawdzaj, czy jest po co wyświetlać damage. Jeśli ten przez ramkę sie nie zmienił, to po kiego mazać go powtórnie?

Zawsze mam rację, tylko nikt mnie nie słucha.

6

Odp: wyswietlanie score

Po kiego grzyba sprawdzać? Najlepiej wpisywac, bezpośrenio po zmianie "damage". Wówczas moznaby nawet uniknąc LDX DAMAGE z Pecusiowego przykładu.

Pozostaje jeszcze ryzyko braku synchronizacji z Anticem, ale i je można ominąć.

7

Odp: wyswietlanie score

Lepiej sprawdzac, bo jesli pojedyncza wartosc zmieni sie w czasie jednaj ramki wiecej niz raz, to niepotrzebnie bedzie sie to wyswietlalo.
A jak sie nie chce sprawdzac (to w koncu takze czas, to lepiej zostawic tak jak jest i na VBLu to robic :)

Kerowniku! - znowu mam podwojny post, a tylko raz wysylalem!!

Bla bla bla bla, bla bla bla. Bla bla bla - bla - bla. Blabla bleee.

8

Odp: wyswietlanie score

Oprócz poprzednich propozycji masz parę opcji:
- wywal and #%11110000
- ofkorz zamiast adc wszedzie ora
- jak chcesz ciut oszczedzic pamieci, zamiast 512b mozesz uzyc tablicy 256b tylko dla starszego nibbla, bo na mlodszym wiele nie zyskujesz
- dla hardkorowej optymalizacji linię grafiki z wynikiem wstaw na stronę zerową, -1 cykl na każde sta (ale powiem szczerze, nigdy nie sprawdzałem czy ANTIC działa ze stroną zerową, ale w sumie czemu miałby nie?)

: 404. Stopka not found

9

Odp: wyswietlanie score

zdecydowalem sie na cos takiego:

lda damage
tax
and #%1111
ora #%10000
sta ekr+1
lda tab_licznik_hi,x
sta ekr

jak dla mnie rozsadny stosunek szybkosci do ilosci zajmowanego miejsca (1 tabela) zjechalem z 32 cykli do 22 (procedura pecusia 20 cykli) cala procedura drukowania z 290 cykli na wygaszanie skrocila sie do 198 cykli.

podziekowania:
lizard - za ora zamiast adc - wyeliminowanie clc na poczatku procedury drukowania licznikow
pecus - za pomysl z tablicami, dobre.
eru - za spostrzegawczosc - faktycznie and jest niepotrzebne w drukowaniu starszego nibbla

dzieki takiej pomocy jeszcze nie raz o nia poprosze :-)


----------- dopisane

definiujac charset odpowiednio mozemy wyeliminowac ora #%10000 co daje nam oszczednosc 2 cykli czyli procedura 20 cykli - tyle co pecusia i ciagle tylko jedna tabelka. czasowo: 9 (par) po 20 cykli = 180 cykli.

--- dopisane 2

mozna rowniez zamist lda tax wstawic niepublikowany lax dodatkowo 2 cykle (ewentualnie ldx, xaa zamiast lda, tax, and) . czyli 18 cykli na pare. 162 cykle podprogram.

Ostatnio edytowany przez xxl (2005-07-24 11:05:13)

http://atari.pl/hsc/ad.php?i=1.