26 Ostatnio edytowany przez Sikor (2007-01-31 07:34:09)

Robi się ciekawie. może coś z tego jednak wyniknie. Abstrahując od poważnych rozmów technicznych, skoro Draco stwierdził, że w ZX jest tylko jeden rejestr sprzętowy, a w Atari Antic tylko spowalnia emulację, należy się zastanowić nad:
a) czy ten rejestr nie może być wykonywany przez inny układ niż Antic w Atari;
b) czy da się wykonać emulację z wyłączonym Anticiem i czy to przyspieszy sprawę
c) czy części obliczeń nie można przerzucic na Antic - wszak jest procesorem samym w sobie.
To tylko takie sobie dywiagacje. I jeszcze pamietajcie o emulacji kempstona ;)

Sikor umarł...

27

Jest takie małe pytanie: "Co emulować?". Goły ZX Spectrum + kempston? Tyle, że do oglądania aktualnych demek to bez sensu. Scena ZXowa trzyma się w Rosji, a Ruscy mają przede wszystkim Pentagony (128kb) i niektórzy Scorpiony. Wszystko z TR-DOSem.

28

Ale panowie rozumieją, że dotychczasowy "emulator" chodzi z prędkością ok. 4,5% ZX Spectrum, więc np. jeśli w spektrusiu po włączeniu zasilania napis "(c) 1982 Sinclair Research Ltd." się pojawia po 3 sekundach[1], to tu przyjdzie nań poczekać ponad minutę? Więc o jakich demkach tu mowa?

Sikor:

a) ten rejestr nie jest "wykonywany" przez Antica

b) emulację z wyłączonym Antikiem się da zrobić, zysk jest ok. 30% (czyli nie 4,5%, tylko 6,4%), ale nie ma obrazu - a myślę, że slideshow z wyłączoną wizją traci nieco na atrakcyjności.

c) Antic jest procesorem, ale wizyjnym - zasadniczo jest już na niego przerzucone to, co przerzucić było można (czyli tworzenie obrazu i dbanie o to, żeby nie migało mimo przełączania banków pamięci)



[1] nie wiem, ile to trwa, strzelam.

KMK
? HEX$(6670358)

29

romu zxspectrum sciagal nie bede ale pociagne jakies tutoriale assa z80 i zadzialam na tych przykladach.

przydala by sie statystyka ktore rozkazy i jak czesto wystepuja w programach...

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

30

drac030 napisał/a:

Ale panowie rozumieją, że dotychczasowy "emulator" chodzi z prędkością ok. 4,5% ZX Spectrum, więc np. jeśli w spektrusiu po włączeniu zasilania napis "(c) 1982 Sinclair Research Ltd." się pojawia po 3 sekundach[1], to tu przyjdzie nań poczekać ponad minutę? Więc o jakich demkach tu mowa?

4,5% w tej fazie nie jest wcale takim złym wynikiem. Jak po optymalizacji uda sie zrobic około 30% to nawet będzie mozna coś z tym zrobić... ;)

drac030 napisał/a:

c) Antic jest procesorem, ale wizyjnym - zasadniczo jest już na niego przerzucone to, co przerzucić było można (czyli tworzenie obrazu i dbanie o to, żeby nie migało mimo przełączania banków pamięci)

O.K.

A inne pytanie natury technicznej: jaky Z80 podłączyc przez port Cartridge-a i wtedy emulować tylko ROM maszynki opartej na Z80, jaki wynik - teoretycznie - moznaby uzyskac dla emulacji ZX-Spectrum (w podstawowej wersji 48K). Wtedy - wczytując hipotetyczne romy z poziomu Atari - mielibyśmy dostęp do programów na kompy oparte o Z80.
Inna sprawa - dołączenie emulacji odczytów obrazów programów (czyli na przykład *.tap z ZX-Spectrum)?

Sikor umarł...

31

Sikor: zamierzasz wydać emulator Spectrum? ;)
(na cartridge-u, oczywiście) ;)

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

32

b) czy da się wykonać emulację z wyłączonym Anticiem i czy to przyspieszy sprawę

A skąd wtedy będziesz wiedział, że emulator działa? Taki emulator ja mogę napisać, nawet Amigi - działa wyłącznie z wyłączonym Antic :)

c) czy części obliczeń nie można przerzucic na Antic - wszak jest procesorem samym w sobie.

CIIW ale lista rozkazów Antica zawiera tylko rozkazy tworzenia linii oraz skoki, jak na tym liczyć?

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.

33

Sikor napisał/a:

4,5% w tej fazie nie jest wcale takim złym wynikiem.

Hmm, "w tej fazie"? A co ty wiesz o fazie, w jakiej się to znajduje :)

Jak po optymalizacji uda sie zrobic około 30% to nawet będzie mozna coś z tym zrobić... ;)

30%? Raczysz żartować. Od początku mówię, że tą techniką się daleko nie zajdzie, a jak z testów wypadnie takie solidne 5% to będzie dobrze.

A inne pytanie natury technicznej: jaky Z80 podłączyc przez port Cartridge-a i wtedy emulować tylko ROM maszynki opartej na Z80, jaki wynik - teoretycznie - moznaby uzyskac dla emulacji ZX-Spectrum (w podstawowej wersji 48K).

Nie bardzo sobie mogę wyobrazić, jak taki układ miałby działać.

Wtedy - wczytując hipotetyczne romy z poziomu Atari - mielibyśmy dostęp do programów na kompy oparte o Z80.

Tylko że one nie tylko ROM-ami się różnią, ale też istotnie konstrukcją - no i są bardziej skomplikowane od spektrusia. Sens ma natomiast danie możliwości załadowania dowolnego programu pod adres $0000 (czyli tam, skąd Z80 startuje) i uruchomienia go, tudzież pracy krokowej, podglądu rejestrów, pamięci itp. I to już mam zrobione :)

Inna sprawa - dołączenie emulacji odczytów obrazów programów (czyli na przykład *.tap z ZX-Spectrum)?

Do tego na razie mi daleko.

KMK
? HEX$(6670358)

34 Ostatnio edytowany przez jellonek (2007-01-31 11:40:10)

Sikor napisał/a:

jaky Z80 podłączyc przez port Cartridge-a i wtedy emulować tylko ROM maszynki opartej na Z80, jaki wynik

jesli podlaczysz Z80 + nieco ramu + jakies miedzymordzie, coby dobierac sie do tego ramu i udawac konsole - to wlasciwie bedziesz mial modul obslugi CP/M (cos w stylu karty do 1090).
co prawda daje ci to dostep do softu z CP/M ale jakos nie uklada mi sie ten pomysl...

btw. do emulacji ZXa by to niewiele wnioslo - bo nie tyka to ni kapke obslugi grafiki...

The UNIX Guru`s view of Sex:
unzip; strip; touch; finger; mount; fsck; more; yes; umount; sleep

35

jell: ale nie o obsługę grafiki tu chodzi, bo - jak napisał draco -= to akurat jest do zrobienia.

Sikor umarł...

36

jellonek: nie lubisz Turbo Pascala 3.0? ;)

Sikor: trochę mylisz pojęcia. Emulator software'owy może korzystać z właściwości Antica dla ulżenia sobie w ciężkiej, niewdzięcznej i nikomu niepotrzebnej robocie ;) bo pamięć emulowanego Z80 to ta sama pamięć, do której ma tez dostęp Antic.

W przypadku doczepiania rzeczywistego Z80 z zewnątrz rzecz ma się zgoła inaczej - taki procesor musi mieć swoją pamięć (oddzielną od tej, która jest w Atari), a do zewnętrznej pamięci dostępu nie ma z kolei Antic. Więc porażka. Odwrotnie - żeby Antic korzystał z pamięci Atari, a Z80 miał do niej dostęp z zewnątrz - to już prędzej, ale i tak nie obyłoby się bez makowego cuda służącego do translacji adresów w tę i we wtę, i to, oczywiście, w locie.

KMK
? HEX$(6670358)

37

Sikor napisał/a:

4,5% w tej fazie nie jest wcale takim złym wynikiem. Jak po optymalizacji uda sie zrobic około 30% to nawet będzie mozna coś z tym zrobić... ;)

30% to tylko z dopałką Pasia 14MHz

najszybszy to pewnie będzie translator na PC, który przetworzy kod ZX-a na kod 6502, typu parametry w rejestrach AXY, JSR obsługa rozkazu ZX-a (jeśli wystarczą 3 rejestry 8bit na parametry), czyli sprowadzałoby się to do napisania biblioteki obsługi poszczególnych rozkazów ZX-a dla 6502 (65816) no i takowego translatora

*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

38

Jeszcze szybszy będzie taki, który wykona je na PC. :)

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

39

Tym samym JIT został w tym wątku wymyślony po raz drugi (pierwszy raz przez mikera wczoraj). Kto następny? :P

KMK
? HEX$(6670358)

40

Ja mam taki pomysł, żeby najpierw przekompilować, a potem wykonywać.

Żartowałem.

http://www.5oft.pl/

41 Ostatnio edytowany przez xxl (2007-02-01 08:54:43)

tu lezy program testowy, ktory bede chcial uruchomic na atari:

http://atari.pl/z80test.sna
programik mozna uruchomic pod dowolnym emulatorem spektrumny.
rysuje migajacy roznokolorowy pasek w pamieci atrybutow

    ld a, 0xc8
    ld b, 0x07
    ld hl, 0x5800
lo:ld (hl), a
    inc hl
    add a, 0x08
    djnz lo
     
swoja droga w assie z80 pisze sie prawie jak w basicu ;-) faktycznie podnad 500 rozkazow
jesli ktos wie jak wydobyc pisk (beep) z gumiaka i jak obslugiwac klawisze to zapraszam na priv moze sie cos na gumowca napisze ;-)

wracajac do emulatora z80 na 6502 (nie trumny na atari), mam pewne przemyslenia jak przyspieszyc emulacje:
- brak ochrony pamieci (dlaczego emulator ma dbac o to zeby nie dac sie wyrabac zle napisanemu programowi w z80?) - to odnosnie blokowania zapisu do rom
- umiejscowienie pamieci emulowanego proca w liniowym ramie (65816 sie klania)
- napotkanie rozkazu nieobslugiwanego powoduje opuszczenie emulatora

jeszcze nie wiem jak zaemulowac rejestr stanu z80...

na dniach program

---
@draco030, jesli mozesz uruchom ten programik moze w taki sposob:

    lda #50
q  cmp vcount
    bne q

    sta wsync
    sta colpf2

    jmp emulator

po skonczeniu dzialania petli z80

    lda colpf2s
    sta colpf2

i tu skok do poczatku czyli zerowania z80 i znowu petla

pozwoli to 'zobaczyc' jak toto szybko dziala. i pokaz skrinszota :-)

pozdrawiam

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

42 Ostatnio edytowany przez Pecus (2007-02-01 08:32:40)

Wlasnie kiedys (i teraz tez) zastanawialismy sie mocno z Pirxem jak to zrobic.
Wymyslilismy zebranie jak najwiekszej biblioteki typowych konstrukcji programistycznych z Z80 (petle, porownania z wykonaniem akcji, itp...) , potem trzeba automatycznie przeanalizowac kod i zastapic odpowiednie konstrukcje ich odpowiednikami w 6502, tam gdzie nie da sie nic dopasowac - tlumaczymy pojedyncze rozkazy, ale staramy sie raczej nawet dwu, trzy-rozkazowe zlepki przetlumaczyc w calosci. Do tego DL dla antica jak w spectrum i troche rekodziela zapewne i moznaby przerabiac gry - i w zasadzie tylko o to chodzi.
W sumie najwazniejsze w takiej analizie jest rozpoznanie i oddzielenie danych od programu.

P.-S. Emulacja ZX81 bylaby mozliwa, bo to straaaasznie powolny komputerek, cale wyswietlanie obrazu robi tam procesor (prawie jak w Atari 2600 :) , ale jeszcze wolniej).

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

43

sporo czasu zabiera aktualizacja pc z80 to o czym piszesz Pecus bylo by mysle o 1/4 szybsze od emulacji w locie...

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

44 Ostatnio edytowany przez Pecus (2007-02-01 08:49:47)

Pamietaj ze w tym o czym pisze, nie ma aktualizacji PC w Z80, operujemy przeliczonymi juz adresami na Atari (dlatego jest to powtorna kompilacja), nie wspomne juz o braku petli interpretujacej kod Z80, bo tego kodu tam nie bedzie, pozostac maja tylko dane, na ktorych operowal bedzie natywnie 6502. Stawiam ze byloby to kilka (a przy duzej bibliotece procedur i dobrej optymalizacji kilkanascie) razy szybsze od emulacji.

Niestety w takim wypadku odpadaja wszelkie tablice skokow, czy tez samomodyfikujacy sie kod.
Z tablicami mozna sobie poradzic interpretujac rozgazy skoku wzglednego jako skok do wielkiej tablicy umieszczonej w calych 64kb pamieci dodatkowej, w ktorej zapisane beda adresy w ktorych znajduja sie przetlumaczone juz na 6502 procedury (tworzona w czasie kompilacji). Drugie rozwiazanie to ostrzeganie swiadomego uzytkownika takiego kompilatora i zmuszenie go do analizy kodu w tym miejscu i recznego przygotowania nowej tablicy skokow (oczywiscie wyliczenie adresow pozostaje w gestii kompilatora.
W sumie jest to wykonalne, ale przy kazdym przerabianym programie bedzie wymagalo niemalych interwencji czlowieka, ktory musi znac i Z80 i 6502. Tyle ze efekt moze byc fajny :)

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

45

Tylko że w ten sposób można emulować praktycznie tylko ROM, bo nie wierzę, że na z80 nikt nie używał automodyfikacji...

46

jest tam taka masa rejestrow ze automodyfikacja raczej nie byla by potrzebna... chociaz...

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

47 Ostatnio edytowany przez Pecus (2007-02-01 08:52:39)

W normalnie wydawanych grach, samomodyfikacja sie praktycznie nie przytrafia. Programisci w wiekszosci stosowali gotowe biblioteki procedur (co ulatwi tylko napisanie takiego tlumacza), lub pisali w jezykach troszke wyzszego niz kod maszynowy poziomu :). Brak samomodyfikacj znacznie ulatwia pisanie programow i ich pozniejsze poprawianie - a nie mowimy tu o demach (to znaczy ja nie mowie ;) , mi chodzi o klasyczne gry w stylu Knight Lore.

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

48 Ostatnio edytowany przez drac030 (2007-02-01 10:04:42)

xxl napisał/a:

mam pewne przemyslenia jak przyspieszyc emulacje:
- brak ochrony pamieci (dlaczego emulator ma dbac o to zeby nie dac sie wyrabac zle napisanemu programowi w z80?) - to odnosnie blokowania zapisu do rom

Sprawdzenie tego w zasadzie nic nie kosztuje, to groszowa oszczędność.

- umiejscowienie pamieci emulowanego proca w liniowym ramie (65816 sie klania)

No, wiadomo, że na 65816, przy liniowym RAM-ie i z wykorzystaniem nowych trybów adresowania, to jest zupenie inna bajka: np. dekodowanie rozkazu się na dzień dobry robi 4 cykle szybsze.

- napotkanie rozkazu nieobslugiwanego powoduje opuszczenie emulatora

To faktycznie musi bardzo przyspieszać emulację :)

jeszcze nie wiem jak zaemulowac rejestr stanu z80...

A to jeszcze wiele przed tobą :)

@draco030, jesli mozesz uruchom ten programik moze w taki sposob

Teoretycznie mogę, ale musiałbym za dużo przerabiać. Mogę ci podać wynik w ramkach VBL, ale do tego przydałoby się, żeby pętla wykonywała się większą liczbę razy (np. kilkadziesiąt tysięcy razy) dla lepszej dokładności.

Nie bardzo rozumiem, po co ładujesz 7 do rejestru B.

Ja - jak wiesz zresztą - testuję na czymś takim (przytaczam z pamięci):

    ld HL,$ffff
    ld A,$3f
loop:
    ld (HL),$00
    dec HL
    cp H
    jr NZ,loop

Ta pętla wykonuje się 49152 razy zerując pamięć od $FFFF do $4000. Atarynce wykonanie tego zabiera 496 ramek. Rozkazy ustawiają wszystkie oficjalne flagi Z80, nieoficjalnych przeważnie nie.

KMK
? HEX$(6670358)

49

> Teoretycznie mogę, ale musiałbym za dużo przerabiać. Mogę ci podać wynik w ramkach VBL, ale do tego przydałoby się, żeby pętla wykonywała się większą liczbę razy (np. kilkadziesiąt tysięcy razy) dla lepszej dokładności.

sadze ze widoczny efekt bedzie juz przy tak malej petli ktora zmiesci sie w 1 ramce i kazdy bedzie mogl zobaczyc na wlasne oczy ile to trwa.

> Nie bardzo rozumiem, po co ładujesz 7 do rejestru B.

czlowiek cale zycie sie uczy (licznik petli)... moze czas na assa z80?


    ld HL,$ffff
    ld A,$3f
loop:
    ld (HL),$00
    dec HL
    cp H
    jr NZ,loop

nie zmiesci sie w ramce, wytlumaczylem wczesniej dlaczego procka powinna zmiescic sie w ramce

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

50

Ja używałem automodyfikacji zaliczając w technikum ćwiczenia z Z80 na pracowni! :)

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