301

(89 odpowiedzi, napisanych Programowanie - 8 bit)

aaaa.... no tak. chytre :D

Chytre, ale:
- błędne - C MUSI być wyczyszczony przed następnym ADC, a tu tego nie gwarantujesz
- niepotrzebne kombinowanie - zamiast BIT możesz wstawić tam BCC *+4 i masz 3 cykle zamiast 4
:)

Ale 1 cykl rzeczywiście się zaoszczędzi:

    
        lda (zch),y
        adc (zdh),y

        bpl skok
        ldy #$ff
        bmi skok2
skok    ldy #0
skok2   clc

ial     adc tal,x

bpl!,ldy,clc - 7
bpl,ldy,bmi!,clc - 9
czyli 106..119 :)

Przy okazji odniosę się do komentarza Foxa o marnych 20 cyklach - zupełnie się nie zgadzam. Ogólna procedurka mnożenia ma szerokie zastosowanie (np. Numen), więc każde przyspieszenie, nawet o 1 cykl, się przydaje.

302

(89 odpowiedzi, napisanych Programowanie - 8 bit)

Nie czaje tego - po co ldy #$ff skoro zaraz potem robisz ldy #0? Sprawdziles, ze to naprawde dziala? :)

303

(89 odpowiedzi, napisanych Programowanie - 8 bit)

Oj, coś źle wczoraj w nocy policzyłem cykle, w aktualnej wersji wychodzi mi minimum 107, maksimum 119... no ale i tak sporo lepiej niż poprzednio...

no... teraz 105..117 :)

103..117 :)

No udało mi się zrobić 102..118, ale nie wiem, chyba lepiej mieć bardziej stabilną wersję, więc uaktualniłem http://www.mimuw.edu.pl/~eru/math.asm, jest tam wersja 103..117

304

(89 odpowiedzi, napisanych Programowanie - 8 bit)

Tak mnie trafiło - może dobrze by było takie kawałki kodu gdzieś umieszczać?
Atariki jest jedną z opcji... Albo zrobić projekt powiedzmy 'biblioteki programistyczne na atari' na sourceforge i używać CVSa...
Co sądzicie?

305

(89 odpowiedzi, napisanych Programowanie - 8 bit)

A mi sie właśnie podoba nastawienie Sc0rpi0. Nie wiem ile wie o programowaniu, ale widać, że się stara. A początki są zawsze trudne. Więc, jellonek, nie krzycz na chłopaka :)

Aha, mała zmiana kodu. Tak jak pisałem, jeśli Bhi mamy od razu zeorowane, nie trzeba tak strasznie miąchać z cmp #0 itp.
Więc wystarczy na początku zrobić

    lda :3
    eor #$80
    sta zerHlp

i potem

    ldy zerHlp ; Bhi ^ $80

Zajmuje 4 cykle więcej niż normalne lda, eor, tay, ale oszczędzamy 6 cykli (tak jak wyżej), więc jesteśmy do przodu.

306

(89 odpowiedzi, napisanych Programowanie - 8 bit)

Foxiu, skarbie, dowodzenie poprawności zostawię tobie, w tej dziedzinie ty jesteś specjalistą :)
A co do stalych, to po prostu kod stary pr0be też używał stałych, ale nic nie stoi na przeszkodzie użyć zmiennych...
Ale doceniam dowcip :)
Powiedziałbyś lepiej, jak lepiej to napisać, bo mi się to dalej nie podoba :(

307

(89 odpowiedzi, napisanych Programowanie - 8 bit)

I tam, tak mi jechać po ambicji...
Ale wracajac do tematu.
Robimy takie cos:

A*B = 256*FA[Bhi+A] + 256*FB[Bhi-A] + FC[Blo+A] + FD[Blo-A]

FA/FB/FC/FD to rozne tablice podobne do f(x).
Teges polega ofkorz na tym, ze FB i FD traktujemy jako dodatnie.
Wtedy kod wyglada tak:

    lda #:1 ; A-lo - signed
    eor #$80
    sta zal
    sta zah
    sta zcl
    sta zch
    eor #$ff
    sta zbl
    sta zbh
    sta zdl
    sta zdh
    
    ldy #:2 ; B-lo - unsigned
    clc
    lda (zcl),y
    adc (zdl),y
    sta :4
    lda (zch),y
    adc (zdh),y
    tax
    ; now X is a signed hi byte of A*Blo

    lda #:3        ; B-hi - signed
    eor #$80
    tay
    txa
    ldx #0        ; we want X to start with 0 for positive and -1 for negative
    cmp #0        ; this is ugly, perhaps can be done nicer, e.g. by bpl in the 2nd line
    bpl *+3
    dex            ; lo byte negative
    clc
    adc (zal),y
    bcc *+4
    inx
    clc
    adc (zbl),y
    sta :4+1
    txa
    adc (zah),y
    clc
    adc (zbh),y
    sta :4+2

Dokladny kod, z tablicami opartymi o tablice pr0be (nie chcialo mi sie liczyc od nowa), jest tutaj: http://www.mimuw.edu.pl/~eru/math.asm

Da sie to jeszcze na pewno przyspieszyc, na przyklad wywalajac cmp #0, bo wartosc jest negatywna jesli nasze A bylo negatywne, wiec mozna zrobic 2 wersje (dla A negatywnego i pozytywnego) i w drugiej linicje zrobic bpl/bmi.

Inna sprawa, to nie jestem pewien, czy to na 100% dziala dla wszystkich przypadkow. Testowalem dla A/B z roznymi znakami i na oko dzialalo, ale milo by bylo jakby ktos to sprawdzil.

No i mysle, ze moze da sie ladniej rozwiazac problem liczenia res+1, bo odwalam tam rozne magie... Te zabawy z X bardzo mi sie nie podobaja. No ale czas spac...

Przy tej metodzie z kwadratami, inicjacja strony zerowej zajmuje ~30 cykli, odwolania do 8 komorek na stronie zerowej to 40+ cykli, wiec minimum 70 cykli na sam dostep do tablicy...

Anyway, kod ma ~110 cykli :)

Szybki update - jesli zalozymy ze Bhi mozemy czytac od razu zeorowane, to kawalek kodu przed tax wyglada tak:

        ...
        lda (zch),y
        ldx #0
        adc (zdh),y
    ; now A is a signed hi byte of A*Blo
        bpl *+3
        dex

        ldy #:3^$80 ; B-hi - signed
        clc
        adc (zal),y
        ...

I chyba jestesmy <100 cykli :D

308

(27 odpowiedzi, napisanych Bałagan)

Fajnie masz, ale Maksymilian ma jeszcze fajniej - do końca życia, będzie słyszał, że zrobił rodzicom dowcip i się urodzilł w prima aprilis :D
Gratulacje!

309

(89 odpowiedzi, napisanych Programowanie - 8 bit)

Właśnie gadałem z Foxem, wyszło nam, że da się toto zrobić w 88-96 cykli, przy użyciu 4K tablic.
Niestety, musieliśmy użyć pewnej technologii, której się nauczyliśmy w Microsofcie, i chyba bez zgody Billa albo Steve'a nie możemy tego opublikować...

prima aprilis! :P

310

(89 odpowiedzi, napisanych Programowanie - 8 bit)

Nie offtopikować!
I nie dyskutować z wujkiem eru :) Jak wujek eru mówi, że wolne, to wolne - przecież tam jest pętla co się wykonuje 16 razy! Na jakim procku byś nie robił, to jest po prostu wolny (czytaj głupi) algorytm.
pr0be, sorki, nie spojrzałem jeszcze w kod, ale cierpię na chroniczny brak czasu :(
Ale ogólnie fajnie, że taki topic się pojawił - wspólnymi siłami wyciśniemy z tego kodu co się da :)
A potem koniecznie do Atariki.

311

(89 odpowiedzi, napisanych Programowanie - 8 bit)

Pierwszy link ofkorz uzywa podobnej metody do mnozenia 8x8, tez z tablicami x*x/4, to stary pomysl.\
Drugi link to 'mnozenie glupie', STRASZNIE wolne.
Ale jak zoptymalizowac 16x8 to jeszcze nie widzialem. W Numenie jest bodajze 16x16, ale nie zoptymalizowane.

312

(89 odpowiedzi, napisanych Programowanie - 8 bit)

Niestety, Swiety, zmiana z zerowej na absolutny nie przyspieszy, bo co prawda lda $8000,y jest 1 cykl szybsze (4 vs 5) to sta tu1 jest 1 cykl wolniejsze (4 vs 3).
Pr0be, jakbys mial przyklad z tablicami (wiem wiem, Fox kiedys to gdzies opublikowal), podeslij no na priva albo wystaw na www i zapodaj sznurek.
Swiety, gratz za $100 posta :)

313

(89 odpowiedzi, napisanych Programowanie - 8 bit)

Nie do konca lapie jak to dziala, musialbym sobie rozpisac te tablice, ale szybkie sugestie to:
- stworzyc 2 wersje, jedna dla dodatnich, druga dla ujemnych, zeby sprawdzac znak a tylko raz
- Twoja metoda odwracania znaku liczby (lda liczba, eor #$ff, (clc ,) adc #(0/1), sta liczba) da sie zastapic szybsza: lda #0, (sec ,) sbc liczba, sta liczba. Oszczedzasz 3*2=6 cykli.
Ale to malutkie wszystko, tak z marszu nic wiecej nie widze.
Przy okazji - zakladam, ze a jest za kazdym razem inne ofkorz?
Aha, i ten wzorek nad kodem cos nie tego :D

Aha, jeszcze jedno... moze da sie oszczedzic i uzyc tych samych komorek do mnozenia hi i lo bajtu B, gdybys normalizowal A i B zeby byly dodatnie oba, sprawdzil znak (A XOR Bhi) i mial 2 wersje w zaleznosci od tego znaku (produkujaca dodatni lub ujemny wynik). Moze by cos pomoglo, nie wiem, ide spac :P

314

(170 odpowiedzi, napisanych Bałagan)

na nowym imacu można odpalić windowsa... jesteś chopie nie na bieżąco :)
a Core Duo rzeczywiście jest całkiem niezłe...

315

(157 odpowiedzi, napisanych Fabryka - 8bit)

Czyli inna mutacja tetrisa...
Jeszcze Stack-Up był fajny na atarkę podobny, ale to rzeczywiście wygląda ciut inaczej.
Powodzenia :)

316

(55 odpowiedzi, napisanych Zloty)

hehe, ja o 16 juz bylem w domq, ale spac nie ide jeszcze, bo nie chce sie znowu rozregulowac...

317

(5 odpowiedzi, napisanych Scena - 8bit)

Dopiero zobaczyłem - bardzo fajne, szkoda, że takie krótkie :)
Zmiany w designie widać, synchro z muzą jest ładne.
Bumpowany sześcianik wygląda super jak się zmruży oczy :)
Brawo!

ps. aha, tylko wiesz, linia horyzontu w ostatniej scenie znikła :P Ofkorz :P

318

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

Jeżeli nie przeczytałeś jeszcze, przeczytaj FAQ, link jest na stronie.
Jeśli przeczytałeś FAQ i coś nie działa, opisz gdzie konkretnie masz problemy.
Aha, i wcale (wcale!) nie jesteśmy zatwardziali :P

319

(55 odpowiedzi, napisanych Zloty)

Było fajnie, red moon rzondzi, produkcje były gites, rispekt dla wszystkich autorów ze specjalnych wskazaniem Pr0be (!) i Mikeya (!), no i brawa dla organizatorów, że party się odbyło.
Do następnego!

320

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

Kapelusz to miał Panama Joe z Preliminary Monty i Montezuma's Revenge :)

321

(17 odpowiedzi, napisanych Zloty)

nie, ale jakby ktos jechal z Bratyslawy w piatek wieczorem, to ja chetnie :)

322

(13 odpowiedzi, napisanych Fabryka - 8bit)

Taki OS jak napisal Solo jest indeed fajny, w Numenie byla taka miniaturka tego.
Ale do pisania malutkich rzeczy wystarczy po prostu edytor z dobrymi makrami do zewnętrznej kompilacji i odpalania, da się to zrobić spokojnie w większości znanych mi edytorków. Do tego syntax highlighting do atarowego asma i jedziemy :)
A programistów owszem jest sporo, ale tak jak napisał Kaz, w większości nie mają za bardzo czasu, przytłoczeni inną działalnością.
A co do zrobienia listy, to w Atariki jest sporo ludzi, ale nie pogrupowanych w kategorie...

323

(9 odpowiedzi, napisanych Programowanie - 8 bit)

Nie jestem pewien, czy dobrze zrozumialem, ale chodzi Ci o cos takiego:

A: 010203
E: 456789
B: ABCDEF
-> 4B6D8F ?

Jesli tak, proponowalbym kod w stylu:

ldx A
lda E
and tab1,x
sta zer
lda B
and tab2,x
ora zer

gdzie tab1 i tab2 maja maski odpowiednie (sa swoimi przeciwienstwami ofkorz).
Generacja tab1 i tab2:

ldy #0
_l tya
 and #$f0
 beq *+4
 lda #$f0
 sta hlp
 tya
 and #$0f
 beq *+4
 lda #$0f
 ora hlp
 sta tab2,y
 eor #$ff
 sta tab1,y
 iny
 bne _l

To tak na oko, z glowy, powinno dzialac

324

(45 odpowiedzi, napisanych Programowanie - 8 bit)

To zalezy mocno od danych, jezeli masz powtarzajace sie mocno znaki (pisales o 70% dla najczesciej wystepujacego), to skompresowane RLE (bo to wlasciwie robisz) bedzie niezle. Ale chyba jednak mozna duzo lepiej. Zalozmy, ze masz 4 znaki: A-70%, B-15%, C-10%, D-6%. Popatrz, ze statystycznie szanse, ze sekwencja 2 znakow to jest BB 0.15 jest 0.025, dla pozostalych jeszcze nizej. A i tak kompresujesz ten znak dodajac 6 bitow licznika. Tracisz. Jezeli masz naprawde 1 znak dominujacy tak mocno jak A, sproboj zrobic RLE tylko dla takiego znaku, i moze nawet z licznikiem nie 6-bitowym a 2- lub 4- bitowym. Na oko 2 moze byc dobre - szanse, ze sekwencja 5 znakow jest AAAAA to ca. 0.17 a ze 16 to juz 0.003. Innymi slowy, sekwencje AABAACAAADBA spakowalbys tak (kazdy znak to 2 bity): A2BA2CA3DBA1. Ofkorz zamiast cyferek 1-2-3 uzywasz 0-1-2 w prawdziwych danych.
W ta strone bym radzil kombinowac.
Oczywiscie, pojawia sie pytanie, czy kompresujesz na tyle duzo danych, zeby komplikowac depacker :D
Aha, no i ofkorz Huffman tez moze tu byc ciekawy...

325

(30 odpowiedzi, napisanych Sprawy atari.area)

Jestem za!
Mamy za mało na AArea biurokracji!
Musimy dostosowywać się do trendów panujących w naszym pięknym kraju!
I jeszcze proponuję komisję 12 osób zaufania publicznego decydujących o szerokości strony głównej AArea w zakresie od 500 do 800 pixeli! Co wtorek!
...
porąbało Was :D