176 Ostatnio edytowany przez drac030 (2007-02-22 09:02:29)

xxl napisał/a:

(ale pewnie zle, za 3 tygodnie moze sie pokapuje)

To poczekamy :)

moj heroiczy jak to nazwales opor przed odpaleniem basica oznacza tyle co nie zakladalem i nie przewidywalem wpgole odpalania zx basica na 6502 tylko odpalenie niektorych gierek ewentualnie demek z zx. co innego na 65816

No, ja rozumiem, że nie przewidywałeś, ale skoro już masz działający emulator (który "zrobiłeś w dwa tygodnie"), i ten emulator jest kompatybilny z prawdziwym Z80, to nie widzę, co cię może powstrzymywać.

KMK
? HEX$(6670358)

177

o co ci chodzi draco? kompleksy masz jakies czy co? wyobraz sobie firme, ktora zaprojektowala autko, ktore w zalozeniach ma byc wystawiane na wyscigi, i za cholere nim nie wyjedziesz nawet droge bo mozesz miec klopoty z rejestracja np ;-) jest wystawa, podchodzi draco i mowi, eeee a da sie tym orac w polu? i tak jest w tym przypadku, emulec ma byc szybki ale nie odpali wszystkiego, co wiecej kto wie, moze nawet niewiele co odpali :D ale jak juz odpali to... widziales zreszta. pokaz mi na innej 8bit platoformie emulacje innego kompa z taka predkoscia? no chyba widzialem emula z81 na zx i byl szybszy.

narzekasz i narzekasz

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

178

No ale po co bijesz pianę zią :)

Nam (w każdym razie mi) chodzi o to, że Ty akurat nie piszesz emulatora, tylko jakiś... hmmm... adapter odpalający wybrane tytuły.

Czy możecie wyjaśnić, Stirlitz, dlaczego wasz służbowy adres stirlitz@rsha.gov.de ma aliasa justas@gru.su?
Nie czytam PM. Proszę używać e-mail.

179

xxl napisał/a:

narzekasz i narzekasz

Chciałeś, żebym zaproponował inną metodę pomiaru. Do tego właśnie dążę - odpal BASIC. On, żeby wykonać byle co, musi przemielić sporo różnego kodu, a im więcej różnorodnych rozkazów jest używane w teście, i im dłużej on trwa, tym wynik jest bardziej wiarygodny.

Natomiast jeśli na twoim emulcu nie chodzi ZX BASIC (najpopularniejszy program na Spectrum), to zupełnie nie rozumiem, jak możesz to nazywać "emulatorem ZX Spectrum" albo w ogóle "emulatorem kompa" (na którym nie chodzi firmware od tego kompa, niezłe), który w dodatku "napisałeś w dwa tygodnie" - w najlepszym razie jest to emulator kawałka Z80, na którym chodzi jedno interko (mające, oidp, 512 bajtów).

KMK
? HEX$(6670358)

180

mame tez jest adapterem? moze odpalic tylko wybrane tytuly ;-)

interko jest katergorii 512 ale rozwala tablice itp. do 32kb pamieci od adresu $4000 do $bfff

draco, spokojnie, jak boli cie ze jakis cienias w 2 tygodnie napisal emulca to chce cie uspokoic,
to ty bedziesz tym pierwszyj jedynym ktory jako world first uruchomi program z zx spectrum na atari.

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

181

xxl napisał/a:

draco, spokojnie, jak boli cie ze jakis cienias

Mnie tam niewiele rzeczy boli, niektóre jednak dziwią. Zwłaszcza puste deklaracje.

KMK
? HEX$(6670358)

182

ok. masz racje to byla pusta deklaracja. nie bedziesz pierwszy

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

183

Aj, jaj, aleś mi powiedział, uch (a BASIC ci nadal nie działa).

KMK
? HEX$(6670358)

184

ziew. jak groch o sciane. nie oftopikuj. popatrz na tyt. watku :-)

a to interko ci dziala? - i to mowie bez zlosliwosci, moglbys pokazac?

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

185

Nie mogę, bo nie zrobiłem jeszcze ładowania programów.

KMK
? HEX$(6670358)

186

mame tez jest adapterem? moze odpalic tylko wybrane tytuly ;-)

Sprawdź rozwinięcie akronimu MAME.

Podpowiem, że rozwija się do Multiple Arcade Machine Emulator. Nie jest adapterem ponieważ emuluje wiele maszyn, każdą z nich w sposób doskonały lub bliski temu.

Czy możecie wyjaśnić, Stirlitz, dlaczego wasz służbowy adres stirlitz@rsha.gov.de ma aliasa justas@gru.su?
Nie czytam PM. Proszę używać e-mail.

187

Proszę o niekłócenie się i robienie swojego. Ja będę zadowolony z 2 opcji do wybor zamiast z jednej - przypuszczam, że będą się uzupełniać, a nie tylko wykluczać ;)

Sikor umarł...

188

XXL: 10% mocy to znaczy zegar Z80 ustawiony na 350 kHz, czy 10 razy wolniejsze przetwarzanie? Bo to jest istotna różnica.

Odpalałem te interko na Spectaculatorze (eh... szkoda, że atarka nie ma takiego wypasionego emula) i tam jest opcja zmiany zegara z80 i na 7 MHz chodzi dwa razy szybciej, a na 14,25,50 i 100 chodzi tak samo. A więc "interko musi zabierać między jedną a dwie ramki i się z nią synchronizować" pomyślałem. Nie jestem biegłby w sprawach spectruma, ale po zabawie z debuggerem i kilku obliczeniach (jak kogoś interesuje mogę przytoczyć) odkryłem, że ramka (1/50 sekundy - czy to poprawne założenie?) przy 3,5 MHz ma 69888 cykli (tak mi ten emulator napisał), a narysowanie klatki przez interko zajmuje 76332 cykle, a resztę czasu spędza na instrukcji HALT (to obliczyłem). Interko nie wyrabia się w ramce i zajmuje dwie, a więc wyświetla 25 klatek na sekundę. Twój 10% emulator wyświetla 2,5 klatki na sekundę, ergo w ciągu sekundy przetwarza 2,5 * 76332 = 190830 cykli. Reasumując, przy założeniu, że nie tracisz czasu 6502 na kopiowanie ekranu (obszar ANTICa fizycznie pokrywa się z obszarem emulowanego z80) i emulujesz pełną parą (nie obsługujesz instrukcji HALT czekając na VBL :p), emulujesz z80 z prędkością 191 kHz, czyli 5,4%. Jeśli gdzieś popełniłem błąd proszę o info...

189 Ostatnio edytowany przez xxl (2007-02-22 13:28:19)

zrobilem tak, wprowadzilem zmiany, ktore Probe zauwazyl, zmienilem dzialanie rozkazu HALT (teraz czeka na koniec ramki) - jak zauwazyl laoo, obejota wrzucielm tu:

http://atari.pl/circle.obx

zegar z80 ustawiony na 3.5mhz/10

w tym konkretnym przypadku widze ze emulec idzie 10% nie mowie ze w kazdym przypadku tak bedzie, np. gdy zrobilo by sie petle, ktora zawiera akurat paskudne w emulacji dla 6502 rozkazy z80 to wygladalo by to bardzo kiepsko, jednak w tym przypadku nie wydaje mi sie zeby bylo bardzo zle.

--
chociaz moim zdaniem halt powinien dzialac jak nop, i tak ataryna jest wolniejsza wiec synchronizowanie sie do wyswietlania jest nadgorliwoscia w tym przypadku. w nastepnych testach wydaje mi sie ze powinienem to zmienic.

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

190

Synchronizowanie się na atari nie ma sensu. Trzeba emulować ile wlezie. W tym konkretnych przypadku z punktu widzenia z80 przerwanie następuje 10 razy częściej niż na spectrum. Musiałbyś zatem HALTem czekać do co-dziesiątej ramki co jest bez sensu.

A mam pytanie. Dla "obliczeń statystycznych" znalazłem / uruchomiłem emulator z80 napisany w c#. Udało mi się udpalić na nim Basica (tak jak u KMK pojawił mi się napis), ale chcę poodpalać coś jeszcze. Jak ładujesz tego circle2.sna? Gdzie skaczesz? Bo według opisu tego formatu, który znalazłem na sieci pod offsetem 23 jest SP, który powinien wskazywać na PC. Ale w pamięci pod adresem SP nic nie ma :/

191 Ostatnio edytowany przez xxl (2007-02-22 14:46:54)

tez tak mysle, halt bedzie dzialal jak nop.

pc ustaw na $62bd.

--- pomyslalem ze trzeba to dodac:
nie patrz na pamiec po zaladowaniu bo emulce juz zdejmuja ze stosu wartosc pc (obejrzyj jak wyglada stos - to ta wartosc powyzej), najlepiej pobrac z pliku sp obliczyc sobie ofset (startujesz od $4000 + naglowek) i pobrac pc. no albo recznie zerknac na ten nieszczesny stos. po zaladowaniu korygujesz sp i jazda.


----
> tam jest opcja zmiany zegara z80 i na 7 MHz chodzi dwa razy szybciej, a na 14,25,50 i 100 chodzi tak samo.

ja mam emuzwin i jak puszcze na 150%,200%....800% to za kazdym razem widac wyrazna zmiane szybkosci dzialania. sprawdzalem czy nie mam gdzies w prefsach ignorowanie halta ale nie zauwazylem ... ?

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

192

Bo widocznie to nie tylko zmienia szybkość zegara Z80, ale relatywnie przyspiesza cały system.

Hitler, Stalin, totalniak, SSman, NKWDzista, kaczor dyktator, za długo byłem w ChRL, wypowiadam się afektywnie.

193 Ostatnio edytowany przez laoo/ng (2007-02-22 17:06:51)

Tak. To dwie różne rzeczy. Relatywna prędkość całego systemu i prędkość zegara procesora.
Ściągnij triala i pobaw się opcjami.

194

laoo/ng napisał/a:

Twój 10% emulator wyświetla 2,5 klatki na sekundę

Sporo zależy od tego, z jaką częstotliwością występują przerwania zegarowe na emulowanym na Atari Z80. W spektrusiu jest to 50 Hz - ja się szczerze mówiąc nie odważyłem jeszcze mu tyle zadać, mój emulator chodzi standardowo z przerwaniem 25 Hz (aczkolwiek, stack overflow się zrobić nie powinien, rozkaz EI mam zrobiony z tym samym hintem, co na Z80; acz może się oczywiście zatkać). Mogę to regulować z poziomu wbudowanego monitorka, różnica między ustawieniem 25 Hz a 2,5 Hz jest jakieś 20% w ogólnej wydajności.

KMK
? HEX$(6670358)

195

Ściągnij triala i pobaw się opcjami.

Hm myślę, że Spectaculator przyklęka przed EmuZWin :P

Czy możecie wyjaśnić, Stirlitz, dlaczego wasz służbowy adres stirlitz@rsha.gov.de ma aliasa justas@gru.su?
Nie czytam PM. Proszę używać e-mail.

196

dely napisał/a:

Hm myślę, że Spectaculator przyklęka przed EmuZWin :P

W EmuZWin niestety prędkość emulacji, jaką można w nim ustawić, zmienia także częstotliwość przerwań, a o tym była mowa. W Spectaculatorze można osobno ustawić oba parametry (jak dam większy zegar, to w ramce mam więcej cykli).

Co nie zmienia faktu, że inne parametry ma bardzo dobre, jak super debugger, zintegrowany asembler i że jest darmowy ;)

197

rozkaz z80 LDIR dziala mniej wiecej tak:

sprawdza czy BC (16 bitowy licznik  B-starszy bajt,  L-mlodszy) jest rowny zero, jesli tak to PC zwieksza o dwa (rozkaz 2bajtowy) i koniec, jesli nie to przesyla jeden bajt z adresu wskazywanego przez HL (H starszy, L mlodszy) do komorki wskazanej przez rejestr DE, zwieksza HL i DE o jeden, zmniejsza BC o jeden, PC zmniejsza o dwa i koniec. w tym miejscu BC = 0. jeden przebieg petli LDIR to 21 cykli, 16 jesli BC=0.

pomyslalem ze mozna pominac ta cala zabawe z kazdorazowym ustawieniem pc, tak zeby emulator musial wielokrotnie dekodowac ten rozkaz i wyszlo mi cos takiego:

_ed_b0          equ *      ; LDIR

                ldx z80_c
                beq _ed_b02
                
_ed_b05         ldy #0
_ed_b03         lda (z80_hl),y
                sta (z80_de),y
                iny
                dex
                bne _ed_b03

                stx z80_c
                sty temp_z
                bne _ed_b01
                dec temp_z
                
_ed_b01         clc
                lda z80_l
                adc temp_z
                sta z80_l
                lda z80_h
                adc #0
                sta z80_h
                
                clc
                lda z80_e
                adc temp_z
                sta z80_e
                lda z80_d
                adc #0
                sta z80_d

_ed_b02         lda z80_b
                beq _ed_b04    ; koniec
                dec z80_b
                jmp _ed_b05    ; kopiuj

_ed_b04         equ *

zdaje sobie sprawe ze kod moze byc bledny i/lub wolny, gdyby tak ktos rzucil okiem i moze pomogl zoptymalizowac

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

198

                clc
                lda z80_e
                adc temp_z
                sta z80_e
                lda z80_d
                adc #0
                sta z80_d

skoro TEMP_Z jest 1-bajtowe to możesz zapisać tak:

                clc
                lda z80_e
                adc temp_z
                sta z80_e
                scc
                inc z80_d
*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

199 Ostatnio edytowany przez pr0be (2007-02-25 15:02:40)

temp_z jest zupelnie nie potrzebne... mozna to przez caly czas trzymac w rejestrze Y dzieki czemu zaoszczedzimy mase cykli (8 w bestcase i 5 w worstcase)... druga sprawa to jak juz wspomnial w poprzednim poscie TeBe to zamiana "lda adc sta" na "bcc inc" z uwzglednieniem tego ,ze gdy nastapi bcc flaga C jest skasowana, wiedz nie trzeba juz robic CLC przed ADC

_ed_b0        equ *      ; LDIR

        ldx z80_c
        beq _ed_b02
                
_ed_b05        ldy #0
_ed_b03        lda (z80_hl),y
        sta (z80_de),y
        iny
        dex
        bne _ed_b03

        stx z80_c
        bne *+3
        dey

        clc
        tya
        adc z80_l
        sta z80_l
        bcc _ed_b01
        inc z80_h
        clc

_ed_b01        tya
        adc z80_e
        sta z80_e
        bcc *+4
        inc z80_d

_ed_b02        lda z80_b
        beq _ed_b04    ; koniec
        dec z80_b
        jmp _ed_b05    ; kopiuj

_ed_b04        equ *

PS:
nie kumam jednej rzeczy:

            dex
            bne _ed_b03
LABEL1
            stx z80_c
            sty temp_z
            bne _ed_b01
            dec temp_z

nie ma tu przypadkiem blendu logicznego?
wedlug mnie "dec temp_z" bedzie wykonywany ZAWSZE poniewaz kod od LABEL1 bedzie wykonywany po opusczeniu petli "_ed_b03" a ta petla zostanie opusczona gdy flaga Z=1 wiedz "BNE _ed_b01" nie zostanie wykonane nigdy (rozkazy stx/sty nie wplywaja na flage Z!)

200 Ostatnio edytowany przez xxl (2007-02-25 18:37:59)

macie racje, mysle ze jeszcze zerowanie rej C z80 mozna wylaczyc poza petle, zerowanie znacznika C 6502 tez mozna pominac - prezy wejsciu i wyjsciu z kazdej procedury rozkazu z80 dbamy o to zeby rej y i c 6502 byly wyzerowane.

drugie podejscie:

_ed_b0        equ *      ; LDIR

        ldx z80_c
        beq _ed_b02
                
_ed_b05 ldy #0
_ed_b03 lda (z80_hl),y
        sta (z80_de),y
        iny
        dex
        bne _ed_b03

        tya        
        adc z80_l
        sta z80_l
        bcc _ed_b01
        inc z80_h
        clc

_ed_b01 tya
        adc z80_e
        sta z80_e
        bcc _ed_b02
        inc z80_d
        clc

_ed_b02 lda z80_b
        beq _ed_b04    ; koniec
        dec z80_b
        dex
        jmp _ed_b05    ; kopiuj

_ed_b04 ldy #0
        sty z80_c

moze teraz?

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