If-Koubou

Dlaczego stare gry działają zbyt szybko na nowoczesnych komputerach?

Dlaczego stare gry działają zbyt szybko na nowoczesnych komputerach? (Jak)

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, społecznościowego forum 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ś w tym stylu. Moje pytania to:

  • Dlaczego starsze gry to robią i jak sobie z tym radzą?
  • Jak nowsze grynie zrobić to i uruchomić niezależnie od częstotliwości procesora?

Więc jaka jest historia? Dlaczego akurat sprite w starych grach są tak szybkie, ż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 niegoIirc System 4,77 MHz dla komputerów PC i dowolny standardowy procesor, jaki ten model uruchomił dla innych systemów, takich jak Amiga.

Zrobili także 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 wewnątrz programu. Wzięli także tyle mocy procesora ile mogli - co było przyzwoitym pomysłem w czasach powolnych, często biernie chłodzonych chipó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 ma tendencję do zarządzania zasobami - nie byłybydopuszczać 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ęć - jest to świetna lektura i prawdopodobnie bardziej wnika w "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 zastanawiasz się, 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 programie do emulacji), sugerujemy również przeanalizowanie 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.