> Zob. post #104.
zob. jit ;-)
---
@laoo, co wiecej, mozna by bylo z kodu emulca usunac wszystko nie potrzebne do koncowej emulacji danego programu.
Nie jesteś zalogowany. Proszę się zalogować lub zarejestrować.
Command & Conquer na Atari ST Kultowy RTS Command & Conquer zmierza na Atari ST. Zobacz niesamowity port legendarnej strategii.
Altirra 4.50 test 13 Avery Lee udostępnił kolejną wersję testową najdoskonalszego emulatora Atari.
CT60 TOS 1.03e Po blisko 21 latach ukazała się oficjalna aktualizacja CT60 TOS do wersji 1.03e.
Gearlynx 1.2.14 Ukazała się kolejna odsłona zaawansowanego emulatora Gearlynx dla konsoli Atari Lynx.
Premiera magazynu Atari Legacy Już jutro startuje sprzedaż nowego magazynu drukowanego Atari Legacy, składanego na Atari Falconie.
atari.area forum » Posty przez xxl
> Zob. post #104.
zob. jit ;-)
---
@laoo, co wiecej, mozna by bylo z kodu emulca usunac wszystko nie potrzebne do koncowej emulacji danego programu.
> To zrób i pochwal się, ile ci to dało :-)
ok. :-)
podaj liczbe cykli wykoania takiego czegos:
ld a,b
or c
a ja pochweale sie ile by to zajelo :-)
> Wystarczy jeden.
masz ambicje zrobic emulator 100%? komus sie to udalo?
> Jak już bystro zauważył dely, ty nie mówisz o emulatorze
tak? to o czym?
@ laoo nie doczytalem Twojej wypowiedzi, teraz ja zrozumialem dopiero. masz racje. nie potrzeba by bylo dekompilacji robic.
> Ja nie zauważyłem, żeby na ogólnym tle kodu znajdującego się w ROM-ie Spectrum takie sekwencje występowały jakoś szczególnie często.
oj bardzo czesto i nie koniecznie zwiazane z rysowaniem na ekranie - chociaz w giercach to jest bardzo widoczne i sekwencje sa dluzsze, wracajac do romu trumny pierwszy lepszy wielokrotny przyklad
ld a,r
or r / and r
zerkam teraz na jakies procki z romu ... cale procedurki mozna by bylo zastapic niekiedy.
@laoo no wlasnie nie bardzo automat, a co gdy podmieniany wzor bedzie grafika albo jakimis innymi danymi? po to wlasnie trzeba by bylo robic reczna deasemblacje i tylko kod poddawac patchowaniu.
> Z tego, co mi wiadomo, żadne nie są wolne: "puste" miejsca w tabeli oznaczają rozkazy, które po dodaniu prefiksu działają tak samo, jak odpowiedniki bez prefiksu. Dokumentacja, którą czytałem sugeruje, że bywa to używane do utrudnienia analizy kodu (bo większość disasemblerów się na tym ponoć wykłada).
heh no nie przesadzaj, ile takich programow znajdziesz? 1%? watpie
a co do zajetosci pamieci - nie ma potrzeby implementowania WSZYSTKICH rozkazow, po dekompilacji i wydzieleniu kodu z80 sprawdzamy z czego mozna zrezygnowac a jak jestesmy hardcoreowcami to sprawdzamy na jakich bitach w rej statusu program nie kozysta i zalaczamy wersje rozkazow emulujacych bez ustawiania odpowiednich bitow :D to by bylo cos.
---
@ laoo nie doczytalem Twojej wypowiedzi, teraz ja zrozumialem dopiero. masz racje. nie potrzeba by bylo dekompilacji robic.
akurat ten przyklad jest nagminny, jak narazie w kazdym programie znalazlem taka/podobna konstrukcje:
daleko szukac... w romie spectrum tez tak jest ;-)
wynika to miedzy innymi ze specyficznej organizacji pamieci ekranu.
podczas emulacji z80 napotykam na rozkazy typu:
1.zaladuj jakis rejestr do akumulatora
2.wykonaj jakas operacje logiczna/arytmetyczna
3.zapisz wynik w poprzednim rejestrze
lub
1. petle z ldir (przesuwanie pamiec-pamiec)
itp...
podczas emulacji tracimy sporo czasu na interpretacje kazdego rozkazu osobno...
z80 ma prefixy, w tablicy rozkazow po prefixie jest duzo wolnego miejsca, mozna zrobic tak,
ze w kodzie (ingerencja w kod programu z80) gdy trafimy na taki kod jak z przykladu wsadzamy prefix i kod makro.
makro moze dzialac nawet szybciej niz zlepek rozkazow na z80, zwlaszcza przy podprogramach.
kolejna sprawa to jaka mozna miec motywacje podczas przenoszenia jakiejs gry z trumny na atari (poprzez emulacje)?
podpisac sie pod taka praca nie mozna, samej dlubaniny przy dekompilacji i wyszukiwaniu
podprogramow, ktore nie sa samomodyfikowane przez program cala masa...
jak znajdzie sie ktos, kto odwali czarna robote czyli deasembluje jakas gre, wydzieli z niej kod i dane to razem mozemy przeniesc taka gre na atari z predkoscia zblizona do oryginalu (jesli bedzie za wolno, wieksze czesci kodu z80 przepisze na 6502)
ordynarna emulacja jak pokazalem wczesniej jest za wolna do takich zabaw - ok 6% to zenada.
> 2.
jesli zdefiniujesz obraz tak, zeby linia nie miala 32 znaki tylko np 255 to skroll moze byc realizowany przez zapis 2 bajtow a nie przesuwaniu 32 bajtow...
> 3.
tak, to nie jest problem, powinienes najpierw poczytac jak atari tworzy obraz, nie bylo by tych pytan...
> Najbardziej chciałbym mieć możliwość wyświetlania znaków na jakimś wirtualnym ekranie, tak było w amigowym Amosie - można było rysować na ekranie logicznym/wirtualnym, a potem jedną instrukcją przekopiować to na właściwy ekran.
w amosie nie calkiem kopiowal ekran, raczej zmienial jego adres... na atari jest tak samo - blyskawicznie (poczytaj o technice page fliping - chyba w basicu miguta jest to opisane)
trzeba jeszcze zaplanowac zadanie (przerwanie vbi?) ktore bedzie co ramke przerzucac 32*24 (768) bajtow z pamieci atrybutow zx spectrum do pamieci vbxe :-)
emulec dziala:
program na zx tu: http://atari.pl/fmtest.sna
uruchomiony na zxemu (atari) tu: http://atari.pl/zx_emu.avi
szybkosc: niezadawalajaca (na moje oko sporo ponizej 10%)
widze to tak, ze jedyna droga do uruchomienia gier z trumny na atari (poprzez emulacje) to przepisanie czesci kodu (petli, podprogramow) na assa 6502, albo zainsalowanie 65816 ;-)
---
jak wylaczam przerwania to emulec idzie ok. 6% oryginalu (to powyzej bylo z wlaczonymi przerwanami)
najciezej zrobic ostatnie 10%
ale nikt nie powie "nie da sie" ;)
jestem pod wrazeniem.
na swoje usprawiedliwienie moge tylko powiedziec ze jeszcze nie doszedlem do rozkazu retn a to on byl kluczem... (w naglowku nie widzialem nigdzie wartosci dla pc) ;-)
--
stan na dzis


http://atari.pl/fmtest.sna - uruchamiac na zxspectrum; joystick kempston
-- kto mi pomoze rozszyfrowac naglowek (27 bajtow) pliku .sna albo inaczej jak/gdzie trumna zapisuje adres startu programu?
emulacja calej listy rozkazow jest ambitna... postaram sie wkrotce pokazac dzialajacy kod jakiegos programu (moze jakas ekstremalnie krotka gra albo cos) w kodzie z80 na atari, w emu beda tylko rozkazy, ktore beda uzywane w tym konkretnym programie, jesli ktos kuma generowanie obrazu na trumnie albo zx81 prosze o kontakt (jak wygladalaby dl dla antica?)
czuje ze to moze byc porazka jesli chodzi o szybkosc
-- organizacje obrazu juz mam. jak odczytac wcisniety klawisz gumiaka?
-- 3 slowa do ksiedza prowadzacego:
1. kempston to jakos niestandardowo podpiete urzadzenie? - moze byc mapowane z STICK0/STICK1 atari?
2. jak wyobrazacie sobie zrobienie mapy kolorow? 2 drogi, albo olac mape kolorow albo migajacy obraz na 1 planie mapa kolorow w trybie gtia na drugim bitplan w hiresie?
8080 ma mniej rejestrow, nie ma niektorych trybow adresowania, rej stanu jest krotszy, jakies myki sa z rozkazamio skokow wzglednych, lista rozkazow jest sporo krotsza od z80, emulacja 8080 musi byc szybsza od emulacji z80, poza tym caly czas mowicie o emulacji zx, ja o emulacji samego procesora. dopoki nie bedzie 65816 i vbxe nie ma co marzyc o zxsectrum
> 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
a tu skrin z emulacji:
pasek na srodku pokazuje jak dlugo wykonywala sie ta petla, dla zainteresowanych policze (ale to juz w domu) ile cykli pozarla emulacja
powinno dac sie to przyspieszyc, pisalem w pracy wiec....
rozkaz djnz robi skoki tylko w tyl (ale dodany jest skok na procke do przodu wiec to nie powinno wplywac na szybkosc emulacji tej konkretnej procedurki)
hmmm moze ktos poda szybki sposob obliczenia wartosci dla skokow wzglednych?
-- policzylem cykle mam nadzieje dobrze:
petla wykonana na z80 250 cykli
petla wykonana na emulowanym z80 - 1806 cykli 6502 (obejmuje dekodowanie rozkazu pustego i opuszczenie trybu emulacji)
jak sie maja cykle z80 na 3,5mhz do cykli 6502 przy 1,79?mhz ???
-- male poprawki i z 1806 zjechalem do 1716 cykli
-- cos kolo 14% ? innymi slowy, implementujac wszystkie rozkazy i myki z80 na 6502 pewnie emulacja zamknie sie przy wlaczonym ekranie w 10% szybkosci oryginalu - na 65816/14 po optymalizacji byc moze bedzie 70-80% oryginalu - mozliwe?
> Zaimplementuj, zdebuguj, pogadamy
...
> mnie nie interesuje przedstawienie wyników "każdemu", tylko mnie samemu.
...
no to pogadalismy. mimo wszystko ja postaram sie przedstawic wyniki szerszemu forum
e tam zmian, zaznaczasz na ekranie rozpoczecie emulacji oraz zakonczenie dzialania emulatora, pasek pokazuje jak szybko dziala emulec, nikt tu nie mowi pokaz program tylko poke skrinszota.
> 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,loopnie zmiesci sie w ramce, wytlumaczylem wczesniej dlaczego procka powinna zmiescic sie w ramce
jest tam taka masa rejestrow ze automodyfikacja raczej nie byla by potrzebna... chociaz...
sporo czasu zabiera aktualizacja pc z80 to o czym piszesz Pecus bylo by mysle o 1/4 szybsze od emulacji w locie...
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
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...
> Czemu? Znasz rozkaz, który po pobraniu opkodu nie wymaga zwiększenia PC?
po pobraniu nie, po wykonaniu owszem - chociazby JP - a to jest dla nas istotne wykonujemy rozkaz i oczekujemy aktualnych wartosci w rejestrach.
pc nie zawsze sie zwieksza o 1: rodzina ADC, SUB, OR, XOR, CP, INC, DEC, RLC, SRA, JP, CALL itd itd dwa razy robisz aktualizacje pc a wystarczy raz przy rozkazie (bo juz wiadomo co to bedzie) u Ciebie nie wiadomo dlatego 2 razy robisz to samo a cykle leca.
> Zaimplementuj, zdebuguj, pogadamy
przyjmuje wyzwanie. prosze o przykladowy w miare krotki kod z80 z iloscia cykli 6502 w jakim sie wykonal, moze byc lista niepowiazanych rozkazow tylko dla sprawdzenia... od podania przykladu prosze o tydzien czasu na napisanie emula (tydzien jak nie bedzie w przykladowym kodzie udziwnien). moze mi sie uda :-)
atari.area forum » Posty przez xxl
Wygenerowano w 0.245 sekund, wykonano 19 zapytań