1

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

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 Ostatnio edytowany przez Pecus (2005-07-18 18:17:03)

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.

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

4

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

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

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

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

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 Ostatnio edytowany przez xxl (2005-07-24 11:05:13)

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.

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