Dlaczego stare gry działają zbyt szybko na nowoczesnych komputerach?
Jeśli kiedykolwiek próbowałeś stworzyć starą grę komputerową na nowoczesnym systemie, prawdopodobnie byłeś zszokowany tym, jak to zrobić szybki gra biegła. Dlaczego stare gry wymykają się spod kontroli na nowoczesnym sprzęcie?
Wcześniej dzisiaj pokazaliśmy, jak uruchomić starsze oprogramowanie na nowoczesnych komputerach; Dzisiejsza sesja pytań i odpowiedzi jest miłym komplementem, który wyjaśnia, dlaczego niektóre starsze oprogramowanie (w szczególności gry) nigdy nie działają poprawnie, gdy próbujesz uruchomić je na nowoczesnym sprzęcie.
Dzisiejsza sesja pytań i odpowiedzi przychodzi do nas dzięki uprzejmości SuperUser - poddziału Stack Exchange, opartego na społecznościach grupowania witryn z pytaniami i odpowiedziami.
Pytanie
Czytnik SuperUser TreyK chce wiedzieć, dlaczego stare gry komputerowe szalają szybko na nowym sprzęcie:
Mam kilka starych programów, które ściągnąłem z komputera Windows z lat 90-tych i próbowałem uruchomić je na względnie nowoczesnym komputerze. Co ciekawe, biegali z niesamowitą szybkością - nie, nie z szybkością 60 klatek na sekundę, raczej z oh-my-god-the-character-is-walking-at-the-speed-of-sound szybki. Naciskam klawisz strzałki, a sprite postaci będzie się przesuwać po ekranie znacznie szybciej niż normalnie. Postęp w grze następował znacznie szybciej niż powinien. Istnieją nawet programy, które spowalniają procesor, aby można było grać w te gry.
Słyszałem, że jest to związane z grą w zależności od cykli procesora lub czegoś podobnego. Moje pytania to:
- Dlaczego starsze gry to robią i jak sobie z tym radzą?
- Jak nowsze gry nie wykonaj to i uruchom niezależnie od częstotliwości procesora?
Więc jaka jest historia? Dlaczego właśnie sprite w starych grach płoną na ekranie tak szybko, że gra staje się nie do zagrania?
Odpowiedź
Pomocnik SuperUser JourneymanGeek go zrywa:
Sądzę, że założyli, że zegar systemowy działałby z określoną szybkością i wiązał ich wewnętrzne zegary z tą częstotliwością zegara. Większość z tych gier prawdopodobnie działała w systemie DOS i była w trybie rzeczywistym (z pełnym, bezpośrednim dostępem do sprzętu) i zakładała, że korzystasz z niego Iirc System 4,77 MHz na komputery osobiste i dowolny standardowy procesor, jaki ten model uruchomił dla innych systemów, takich jak Amiga.
Zrobili również sprytne skróty w oparciu o te założenia, w tym oszczędzając niewielką ilość zasobów, nie zapisując wewnętrznych pętli synchronizacji w programie. Wzięli również tyle mocy procesora ile mogli - co było przyzwoitym pomysłem w czasach powolnych, często biernie chłodzonych układów!
Początkowo jednym ze sposobów na obejście różnej szybkości procesora był stary, dobry przycisk Turbo (który spowolnił system). Nowoczesne aplikacje są w trybie chronionym, a system operacyjny zwykle zarządza zasobami - nie dopuszczać aplikacja DOS (która działa w NTVDM w systemie 32-bitowym), aby w wielu przypadkach zużywać cały procesor. W skrócie, systemy operacyjne stały się mądrzejsze, podobnie jak interfejsy API.
Opierając się mocno na tym przewodniku na Oldskool PC, w którym zawiodła mnie logika i pamięć - to świetna lektura i prawdopodobnie bardziej pogłębia to "dlaczego".
Rzeczy takie jak CPUkiller zużywają jak najwięcej zasobów, aby "spowolnić" system, co jest nieefektywne. Lepiej wykorzystaj DOSBox do zarządzania szybkością zegara, którą widzi twoja aplikacja.
Jeśli ciekawi Cię, w jaki sposób kod został zaimplementowany we wczesnych grach komputerowych (i dlaczego tak źle przystosowują się do nowoczesnych systemów, nie będąc piaskownicą w jakimś programie emulującym), zalecamy również sprawdzenie tego długiego, ale interesującego podziału przetwarzać w kolejnej odpowiedzi SuperUser.
Czy masz coś do dodania do wyjaśnienia? Dźwięk w komentarzach. Chcesz przeczytać więcej odpowiedzi od innych użytkowników Stack Exchange, którzy znają się na technologii? Sprawdź cały wątek dyskusji tutaj.