801

(108 odpowiedzi, napisanych Programowanie - 8 bit)

Kodu nie puściłem, bo żeby w ogóle uruchomić FAILa pod Visual C++ musiałem go istotnie zmodyfikować - visual nie lubi dużych tablic na stosie (co imho nie jest dobrą praktyką), używanie dynamiczniej pamięci rozwiązałoby problem. W rezultacie po moich zmianach wyszedł kod nie nadający się do publikacji. Problem zresztą nie istnieje, bo plugina i tak pewnie nikt nie używa i nie miałem motywacji zrobienia tego ładniej  ;)

Problemy wydajnościowe w .NET mam przez pochopne decyzje projektowe - liczniki POKEYa emuluję zbyt dosłownie. Nie jest to coś, czego nie da się zoptymalizować, więc nie twierdzę, że nie da się zrobić szybkiego emulatora atari w .NET.

802

(108 odpowiedzi, napisanych Programowanie - 8 bit)

No to właśnie mam zaczętego w SilverLight (stopień zaawansowania jest taki, że uruchamia się na nim SELF TEST), tylko że jest strasznie wolny i wymaga przeprojektowania kilku rzeczy, bo byłem zbyt optymistyczny co do jego wydajności ;)

803

(108 odpowiedzi, napisanych Programowanie - 8 bit)

Straciłem zapał i zrobiłem sobie przerwę (oczywiście żeby wrócić z nowymi siłami ;) ). Zresztą Altirra jest za dobra, żeby robić inne emulatory. W kwestii VBXE też (dlatego nie bedę już rozwijał patcha Atari++). Jak coś będę kontynuował, to emulator w Silverlight, żeby mieć emulację w przeglądarce. Już coś nawet mi działa, mam tylko problemy z wydajnością (.NET).

804

(108 odpowiedzi, napisanych Programowanie - 8 bit)

No i tak to już jest. Napisałem VBXE. Zaimplementowałem interlace Rybagsa. I paczkę ściągnęło przez pół roku tylko 30 osób...

805

(219 odpowiedzi, napisanych Zloty)

A ja daleko, ale brzmi interesująco. Może przekonam połowicę na zlot pod pozorem zwiedzania Krakowa ;)

806

(49 odpowiedzi, napisanych Programowanie - 8 bit)

Ja niczego o takim dogadaniu nie wiem. Pasiu raczej nie ma czasu, bo nawet trudno się z nim skontaktować i pewnie ochota na inwestowanie w to energii też mu odeszła. Miast czekać proponuję szukać innego rozwiązania.

807

(49 odpowiedzi, napisanych Programowanie - 8 bit)

Dałem mu Amigę 1200 za to ;)

808

(49 odpowiedzi, napisanych Programowanie - 8 bit)

tebe napisał/a:

czyli kluczem do sprawy Warp7 jest Laoo, bo dokumentacja jest tylko do Warp4

A ja nie wiem  jakiego WARPa mam. Chyba formalnie WARP4 "ustawiony" na 7 MHz (ze zworką na 14). Kiedyś chodził na 4 MHz (stąd nazwa) ale Pasiu mi coś podrasował i teraz chodzi na 7/14 MHz.

809

(49 odpowiedzi, napisanych Programowanie - 8 bit)

Mam wersję WARP7 stabilnie działającą na 7 MHz (na 14 MHz uruchomić się da, ale np kod w wysokiej pamięci już nie pójdzie). Mogę komuś dać do reverse-engineeringu jakby ów ktoś był zainteresowany.

Wg mnie w stronę 65c816 z liniową pamięcią trzeba pójść. Najlepiej z możliwością wyboru, w którym banku ma być pamięć atari do odczytu i do zapisu osobno (domyślnie $00/$00). Ale ja tam się nie znam...

810

(3 odpowiedzi, napisanych Programowanie - 8 bit)

W atari odmierzać dokładny czas jest bardzo trudno, bo cykle procesora są bezustannie wywłaszczane przez pokaźną liczbę przeszkadzajek, więc liczenie cykli daje różne rezultaty w różnych warunkach. Proponowałbym dwa rozwiązania:
1) rejestr VCOUNT, który w systemie PAL co ramkę (1/50s) liczy od 0 do 155.
2) przerwania POKEYa. Jeśli się nie mylę, to jak to ma być opóźnienie, to nawet nie trzeba używać przerwań: można je wyłączyć przez SEI i pollować rejestr IRQST czekając na skasowanie bitu odpowiadającego danemu przerwaniu.

811

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

Kurde. Nie wiedziałem że XEP80 ma taki superowy czip w środku

812

(100 odpowiedzi, napisanych Bałagan)

epi napisał/a:

[...]Ja zdziwiłem się, że trzeba kombinować, żeby pokazać Quick Launch.[...]

A w win7 jest w ogóle Quick Launch? Przypinanie programów do paska zadań doskonale go zastępuje i jest nawet lepsze. Trochę może irytować, że ikony odpalonych programów nie różnią się właściwie od nieodpalonych, ale na szczęście w opcjach można łatwo przełączyć, żeby uruchomiona aplikacja wyglądała jak na starszych windowsach (żeby poza ikoną miała też nazwę itd). Po zmniejszeniu ikon pasek zadań wygląda praktycznie identycznie jak dawniej, tylko pokazywanie pulpitu jest koło zegarka :)

813

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

Cosi: nie bluźnij ;)

814

(23 odpowiedzi, napisanych Bałagan)

Takiemu to się powodzi ;)

815

(100 odpowiedzi, napisanych Bałagan)

krzyc: A dlaczego nie możesz wgrać wersji 64bit?

816

(100 odpowiedzi, napisanych Bałagan)

Ja sobie kupie jak się pojawi, bo mi się podoba. Teraz siedzę na RC i nie miałem żadnych problemów. Wg mnie 7 ma najbardziej dopracowany UI (dopinanie aplikacji do paska zadań zamiast quicklauncha jest miodzio) i nawet zostawiłem sobie te szkło i aero (tylko odchudzone o wszystkie rozmywania i przenikania, żeby reakcja systemu była percepcyjnie szybsza), bo wszystko fajnie współgra. A trzeba pamiętać, że jako stary oldschoolowiec we wcześniejszych systemach tępiłem wszelkie wodotryski i miałem ustawiony klasyczny wygląd z win2k (vistę też dało się tak skonfigurować).

Oczywiście jak ktoś z góry ma nastawienie "M$ SUXX" to i siódemka go nie przekona

817

(12 odpowiedzi, napisanych Programowanie - 8 bit)

Cholernie pomysłowe. Bardzo podoba mi się sposób wizualizacji pamięci. Takie coś można dodać do istniejącego emulatora.

818

(50 odpowiedzi, napisanych Bałagan)

Candle napisał/a:

a wtedy strona zerowa bedzie naprawde szybka...
nie filozuj

No to niech oryginalna "powolna" pamięć atari nie będzie na stałe w banku zerowym, tylko niech będzie dowolnie przełączana w dowolny bank przykrywając szybki bank jaki tam był (lub niech wypełnia pustą przestrzeń jeśli byłaby wmapowana w nieużywany obszar). Po przełączeniu jej wyżej mamy szybki bank zerowy, a wciąż mamy dostęp do pamięci atari tylko w innym miejscu. Jeszcze jakby można było tak zrobić osobno dla odczytu i dla zapisu to byłoby super (scenariusz: ustawiamy pamięć atari w banku zerowym dla zapisu i gdzieś wyżej dla odczytu. W rezultacie czytając z banku zerowego czytamy z pamięci szybkiej, a zapisując zapisujemy wolno do atari. Takim trikiem można w błyskawicznym tępie przepisać blok z pamięci szybkiej do atari).

819

(18 odpowiedzi, napisanych Programowanie - 8 bit)

Tak jeszcze teraz do mnie dotarło, że można zaoszczędzić pamięć łącząc tablice t1 i t3 :)

820

(18 odpowiedzi, napisanych Programowanie - 8 bit)

Chodziło mi o rozpisanie wejścia _enter tak, aby nie robić tego jsr:

_enter
    ldx _d
    lda t3-$e0,x
    sta _d
    cmp t4-$e0,x
    bcc _d1
    rts

_enter2
    ldx _d
    lda t1-$e0,x
    sta _d
    cmp t2-$e0,x
    bcc _d1
    rts

_d1 lda #$20
    adc _e
    sta _e
    bcs _d2
    lda _d
    adc #-$08
    sta _d
_d2 rts
;
t1      dta $e2,$e3,$e4,$e5,$e6,$e7,$e8,$e9,$ea,$eb,$ec,$ed,$ee,$ef
        dta $f0,$f1,$f2,$f3,$f4,$f5,$f6,$f7,$f8,$f9,$fa,$fb,$fc
t2      dta $e2,$e3,$e4,$e5,$e6,$e7,$FF,$FF,$ea,$eb,$ec,$ed,$ee,$ef
        dta $FF,$FF,$f2,$f3,$f4,$f5,$f6,$f7,$FF,$FF,$fa,$fb,$fc

t3      dta $e4,$e5,$e6,$e7,$e8,$e9,$ea,$eb,$ec,$ed,$ee,$ef,$f0,$f1
        dta $f2,$f3,$f4,$f5,$f6,$f7,$f8,$f9,$fa,$fb,$fc,$fd,$fe
t4      dta $e4,$e5,$e6,$e7,$FF,$FF,$FF,$FF,$ec,$ed,$ee,$ef,$FF,$FF
        dta $FF,$FF,$f4,$f5,$f6,$f7,$FF,$FF,$FF,$FF,$fc,$fd,$fe

821

(18 odpowiedzi, napisanych Programowanie - 8 bit)

xxl napisał/a:

zastosowalem (w tablicy powinny byc $ff zamiast $00)
pomysl jest dobry ale nie wiem, nie widac poprawy :/

A zaimplementowałeś wersję optymalizującą start od _enter (skompresowanie 4 przebiegów)? Jak nie pomogło, to może wąskie gardło jest gdzieś indziej? Sprawdzałeś pod profilerem?

822

(18 odpowiedzi, napisanych Programowanie - 8 bit)

Jeżeli masz 512 bajtów miejsca na tablice (lub mniej jeżeli |Dom(_d)| < 256) to można trochę potablicować. Jeżeli nigdzie się nie walnąłem, to można tak:

_enter jsr _enter2
_enter2              
              
    ldx _d
    lda t1,x
    sta _d
    cmp t2,x
    bcc _d1
    rts
_d1 lda #$20
    adc _e
    sta _e
    bcs _d2
    lda _d
    adc #-$08
    sta _d
_d2 rts
    
; x:      0,1,2,3,4,5,6,7, 8, 9,10,11,12,13,14,15,16,17,18,19,20    
t1  .byte 2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22
t2  .byte 2,3,4,5,6,7,0,0,10,11,12,13,14,15, 0, 0,18,19,20,21,22

Idea jest taka, że wspomniana procedura jest wołana 2 lub 4 razy, można więc zamknąć dwa wywołania w jednym. t1[x] == x + 2. Na każde dwa pierwotne wywołania _e jest modyfikowane maksymalnie raz i to wtedy, gdy _d & 7 == (6 lub 7). Do tej decyzji służy tablica t2, która dodatkowo determinuje wartość flagi C: t2[x] < t1[x] gdy _d & 7 == (6 lub 7), t2[x] >= t1[x] wpp. Drugi trick, (który jest niezależny) pomaga zaoszczędzić 7/32 cyklu: jest większe prawdopodobieństwo, że _e się nie przepełni, niż to, że się przepełni, więc bardziej prawdopodobna ścieżka powinna być krótsza, czyli skok powinien być wykonywany gdy się przepełni.

EDIT:

Jeżeli _enter jest wołane często, a masz dodatkowe 512 bajtów, to można spreparować tablice dla wywołania podwójnego (poczwórnego dla oryginalnego algorytmu). t1'[x] == x + 4; t2'[x] < t1'[x] gdy _d & 7 in {4,5,6,7}; t2'[x] >= t1'[x] wpp.

823

(18 odpowiedzi, napisanych Programowanie - 8 bit)

Wzorzec zmienności _d jest taki dziwny, że nie rozumiem co ten algorytm ma właściwie robić. Jakiś szerszy kontekst by się przydał. Może wtedy  znalazłaby się nawet jakaś bardziej globalna optymalizacja.

824

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

offtopic: Miałem ją na kasecie. Zarąbista! Szkoda, że nie ma działającej file'ówki.

825

(108 odpowiedzi, napisanych Programowanie - 8 bit)

Seems to be working on emu :)