2,751

(22 odpowiedzi, napisanych Bałagan)

słuszna numeracja
Atari 666XL i Atari 666ST

2,752

(22 odpowiedzi, napisanych Bałagan)

ta jest :)

2,753

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

800XL i 1029 - zestaw marzeń :)

2,754

(22 odpowiedzi, napisanych Bałagan)

były tam głównie 800XL i 1050. potem na jakiś czas pojawiły się dwa Amstrady 464 i 646. a coś koło 90' 286
Chodziłem tam na kurs Atari Basic. Pamiętam że było tam dwóch magików piszących w assemblerze, dzięki jednemu z nich sam zacząłem "kodować".
Do tej pory mam oryginalną dyskietkę QuickAssemblera.

2,755

(22 odpowiedzi, napisanych Bałagan)

w tym samym klubie, parę lat wcześniej zaczęła się moja przygoda z Atari
https://www.youtube.com/watch?v=NaVs3Iurfq8

2,756

(9 odpowiedzi, napisanych Programowanie - 16/32bit)

EOR to XOR?
"source XOR destination" zabiera trzy cykle szyny (odczyt źródła, odczyt celu, zapis celu) - 12 cykli procesora

2,757

(9 odpowiedzi, napisanych Programowanie - 16/32bit)

Tomasz Wachowiak napisał/a:

Jeśli chodzi o wstawianie instrukcji w czasie działania blittera, to chyba zadziała to tylko w przypadku trybu BLIT, czyli trybu dzielonego

Działa w każdym wariancie - BLIT i HOG. Kwestia jest tylko w tym, by wystartować BLiTTERa instrukcją typu "Class 0", np BSET, ASL, ADD itp: http://pasti.fxatari.com/68kdocs/68kPrefetch.html
A tutaj mój mały przykład:
http://www.atari-forum.com/viewtopic.php?p=96197#p96197

Tomasz Wachowiak napisał/a:

No ciekawe, jak wypadłby blitter w 4 planowym fillerze, ale zaczynam odnosić wrażenie, że mógłby być wolniejszy od motorli (jak sobie spojrzycie na 4 bitplanowego fillera z kilku tematów wstecz, to do wypełniania używam tam movemów i przy długich liniach robię bodajże 64 piksele na jednym movie - to może być już dla blittera za dużo).

myślę że warto by to sprawdzić w praktyce. Z tego co widzę w w przypadku wariantu CPU i MOVEMów dla każdej linii dokonujesz jeszcze fline_m i lline_m które są dość kosztowne.

2,758

(0 odpowiedzi, napisanych Bałagan)

http://kotaku.com/atari-engineer-steve- … 1687628442

2,759

(9 odpowiedzi, napisanych Programowanie - 16/32bit)

mkm napisał/a:

Mógłbyś teoretycznie zrobić wersje mieszaną wywołującą kod cpu lub blitter'a w zależności od długości linii. Oczywiście taki warunek to dodatkowy koszt

Wachu zrobił już detekcję w kodzie, są to procedury "line0_XXX" :)  Wystarczy dla odpowiednio długich podmienić kod z CPU na BLiTTERa.

Myślę że dla cztero-bitplanowego fillera proporcje mogą ulec zmianie.
Jest jeszcze jedna niewykorzystana tutaj zaleta BLiTTERa. W czasie blittingu, CPU może wykonać jedną "długą" instrukcję, np rotacje, mnożenie/dzielenie itp. Z tego co widzę w kodzie, na każdy trójkąt przypadają trzy DIVSy. Być może dało by się je sprytnie przesunąć pod blitting.

2,760

(22 odpowiedzi, napisanych Programowanie - 16/32bit)

Tomasz Wachowiak napisał/a:

P.S. Piękny kod swoją drogą, wszystko z minimalną ilością cykli. :)

a dzięki :)

Bober napisał/a:

Ostatnio odbył się kompot z produkcjami na 1bitplan (na ST). Może będzie kolejny. Wtedy z 1bitplanowym fillerem będziecie do przodu :).

ten filler można zastosować również do wielu bitplanów

2,761

(110 odpowiedzi, napisanych Software, Gry - 16/32bit)

jury napisał/a:

Jest tylko uwaga, jak dobrze pamiętam, nie jesteś fanem grania w małych okienkach, a to jest rozdzielczość 160x80, czyli przy najmniejszej rozdzielczości Falcona to jest okienko wielkości 1/4 ekranu. Więc DML zastosował tu chwyt marketingowy ;)

to patrz (i słuchaj) teraz https://www.youtube.com/watch?v=hDXSMgW-r5M
:)

2,762

(22 odpowiedzi, napisanych Programowanie - 16/32bit)

i jeszcze coś mi wpadło do głowy. Czy faktycznie poniższa instrukcja jest potrzebna?

   move.w    d5,d3  ;4

"addq.w    #1,d3  ;4" robisz w obrębie Word a nie Long

2,763

(22 odpowiedzi, napisanych Programowanie - 16/32bit)

w międzyczasie wyedytowałem posta:
przemyślałem to jeszcze raz,  w wariancie xCount = 1 może być problem z zastosowaniem EndMask

2,764

(22 odpowiedzi, napisanych Programowanie - 16/32bit)

no tak, ale możesz dać albo:

  xCount = 40 / yCount = 1

albo:

  xCount = 1 / yCount = 40

z tego co pamiętam efekt jest ten sam operacja dokonywana jest na tych samych 40stu słowach.
Oczywiście w zależności od wariantu trzeba odpowiednio ustawić Destination X/Y increment.

---edycja---

przemyślałem to jeszcze raz,  w wariancie xCount = 1 może być problem z zastosowaniem EndMask

2,765

(22 odpowiedzi, napisanych Programowanie - 16/32bit)

faktycznie masz rację z yCount. 
Ale możesz zamienić xCount z yCount (czyli również Destination X increment oraz Destination y increment) dzięki temu xCount będzie tylko raz inicjowany a yCount przed każdym blitem.
Takie rozwiązanie zastosowałem w mojej procedurze dla sprajtów:

;BLiTTER Init
    move.l    #$00020002,(A0)+        ; source X increment / source Y increment
    move.l    A2,(A0)+            ; source address
    move.l    #-1,(A0)+            ; mask 1 /2
    move.w    #-1,(A0)+            ; mask 3
    move.l    #$00080080,(A0)+        ; destination X increment / destination Y increment
    lea        2(A0),A4            ; remember source destination
    move.l    A3,(A0)+            ; destination address
    move.w    #$0005,(A0)+        ; count X surface
    movea.l    A0,A1                ; remember count Y surface
    move.w    D0,(A0)+            ; count Y surface
    move.w    #$0204,(A0)+        ; HOP / LOP
    move.w    D4,(A0)                ; BUSY / HOG / SMUDGE / LINE NUMBER // FXSR / NFSR / SKEW


; Copy MaskSprite to Screen
    move.b    D2,(A0)                ; start blitter

    REPT    3
        lea        2(A3),A3
        move.w    A3,(A4)            ; destination address
        move.w    D0,(A1)            ; count Y surface
        move.b    D2,(A0)            ; start blitter
    ENDR

;
;BLITTER RE-INIT Sprite to Screen
    lea        $FFFF8A3C.w,A0
    move.l    A5,A3
    move.w    #$0207,$FFFF8A3A.w        ; HOP / LOP

; Copy Sprite to Screen
    move.w    A3,(A4)                ; destination address
    move.w    D0,(A1)                ; count Y surface
    move.b    D2,(A0)                ; start blitter

    REPT    3
        lea        2(A3),A3
        move.w    A3,(A4)            ; destination address
        move.w    D0,(A1)            ; count Y surface
        move.b    D2,(A0)            ; start blitter
    ENDR

2,766

(22 odpowiedzi, napisanych Programowanie - 16/32bit)

z tego co widzę to masz parę rejestrów adresowych wolnych.
tak więc, tutaj mógłbyś przypisać każdej masce osobny An i zejść z 24 do 16 cykli:

                    move.w    d0,endmsk1(a6)        ;first line mask
                    move.w    d1,endmsk3(a6)        ;last line mask

tutaj również dedykowany An, dodatkowo nie ma potrzeby zmiany yCount, więc zamiast Longa możesz zapisać Word:

                    move.l    d3,xCount(a6)        ;xcount = d3, ycount = 1 at once

czyli zamiast 16 mamy 8 cykli

tu również dedykowany An:

                    move.b    #$a0,lineNum(a6); HOG   16

zamiast 16 mamy 12 cykle


Czyli z 82 cykli inicjalizacji mógłbyś zejść do 62.

2,767

(57 odpowiedzi, napisanych Scena - 16/32bit)

dyskietki od nastu lat leżą gdzieś na strychu. muszę odszukać pudło, potem przeczesać każdą dyskietkę. robota na cały weekend...

2,768

(51 odpowiedzi, napisanych Scena - 16/32bit)

Tomasz Wachowiak napisał/a:

Może gouraud pod mono? Chyba jeszcze nikt tego nie zrobił? :P Kiedyś napisałem sobie na PieCa całkiem fajną procedurę do ditheringu. Można by ją przenieść na mono STeka. :)

w Mono? Brzmi ciekawie.
Ditherowany gouraud widziałem tylko w ST-LOW w demie: http://www.pouet.net/prod.php?which=19628 i w grze Interphase: https://www.youtube.com/watch?v=DtUfQEp … lpage#t=16

To pierwsze zrobił Martin Griffiths, źródła są dostępne w sieci. Jakby co to je mam.

2,769

(3 odpowiedzi, napisanych Programowanie - 16/32bit)

tak, tak na szybko pod emu. Wieczorem będę miał więcej czasu i sprawdzę na realnym sprzęcie.
Co do blittera to słuszny kierunek.

---edycja---

działa.
ok, wiem gdzie leżał problem, popierdzielił mi się pecetowy "caps lock" z STkowym "ctrl", są one w tym samym miejscu klawiatury...

2,770

(12 odpowiedzi, napisanych Scena - 16/32bit)

cacy zestaw

2,771

(0 odpowiedzi, napisanych Programowanie - 16/32bit)

Jest to jeden  z dwóch najpopularniejszych BASICów na ST.
Omikron generuje szybszy kod i mniejsze binarki niż GFA
http://www.jchr.be/atari/omikron.html

2,772

(3 odpowiedzi, napisanych Programowanie - 16/32bit)

tak na szybko, to mi nie działa:

cmp.b    #$1d,$fffffc02.w

jak zamienię to na klawisz "1" to działa ok:

cmp.b    #$02,$fffffc02.w

poza tym niezły kod, właśnie w go wgryzam

2,773

(51 odpowiedzi, napisanych Scena - 16/32bit)

świetnie

2,774

(51 odpowiedzi, napisanych Scena - 16/32bit)

Tomasz Wachowiak napisał/a:

Z tego co widzę, to mam jeden diament, prawdopodobnie NAJSZYBSZĄ procedurę obrotów w 3D. Po wstępnych przeliczeniach procedura NIE WYMAGA żadnych mnożeń i dzieleń - pełny obrót punktu w trzech wymiarach + perspektywa na motoroli 68000 zamyka się w około 350 cyklach zegara...

no niezły wynik, normalnie tylko jedno dzielenie zajęło by ze 150 cykli

2,775

(51 odpowiedzi, napisanych Scena - 16/32bit)

Cześć Tomek, fajne demo zrobiliście:
http://demonstracja.krap.pl/dema/polski … somnia.htm
http://www.pouet.net/prod.php?which=31427
tutaj jest więcej Waszych produkcji
http://demozoo.org/groups/2207/

Masz może jeszcze kody źródłowe?

Co do koderów, to tutaj na AA paru znajdziesz, np MKM czy Sqward.  Osobiście również assemblerem 68k nie gardzę, z tym że jestem raczej typem dziesięciowierszowca.