De ce jocurile vechi rulează prea rapid pe computerele moderne?
Dacă ați încercat vreodată să obțineți un joc de computer de epocă, susținut de un sistem modern, probabil că ați fost șocat de cum rapid jocul a fugit. De ce jocurile vechi nu mai au control asupra hardware-ului modern??
Astăzi mai devreme ne-am arătat cum să rulați programe mai vechi pe computerele moderne; Sesiunea de întrebări și răspunsuri de astăzi este un compliment frumos care se încadrează în motivul pentru care unele programe vechi (în mod special jocuri) nu par să funcționeze corect atunci când încercați să le executați pe hardware modern.
Sesiunea de întrebări și răspunsuri din ziua de astăzi vine de la amabilitatea SuperUser - o subdiviziune a Stack Exchange, o grupare bazată pe comunitate a site-urilor web Q & A.
Intrebarea
Cititorul de super-utilizatori TreyK dorește să știe de ce jocurile pe computer rulează rapid pe un nou hardware:
Am câteva programe vechi pe care le-am scos de pe computerul Windows de la începutul anilor 90 și am încercat să le execut pe un computer relativ modern. Destul de interesant, au alergat cu o viteză foarte rapidă - nu, nu cele 60 de cadre pe secundă de repede, ci mai degrabă tipul de "oh-my-god-the-character-is-walking-at-the-speed-of-sound" rapid. Aș apăsa o cheie de săgeată și sprite-ul personajului va zip pe ecran mult mai repede decât în mod obișnuit. Progresul în timp al jocului se întâmpla mult mai repede decât trebuia. Există chiar și programe făcute pentru a vă încetini procesorul, astfel încât aceste jocuri să poată fi jucate de fapt.
Am auzit că acest lucru este legat de joc în funcție de ciclurile procesorului sau ceva de genul acesta. Întrebările mele sunt:
- De ce jocurile mai vechi fac acest lucru și cum au scăpat cu el?
- Cum funcționează jocurile mai noi nu faceți acest lucru și executați independent de frecvența procesorului?
Deci, care este povestea? De ce exact spritele din jocurile vechi se aprind de pe ecran atât de repede încât jocul devine inutil?
Răspunsul
Contribuitorul SuperUser JourneymanGeek sparge:
Cred că au presupus că sistemul de ceas ar fi rulat la o anumită rată și legat în cronometrele lor interne la rata ceasului. Majoritatea acestor jocuri au rulat probabil pe DOS și au fost mod real (cu acces hardware complet și direct) și au presupus că rulați a IIRC Sistem de 4.77 MHz pentru PC-uri și orice procesor standard pe care modelul le-a rulat pentru alte sisteme, cum ar fi Amiga.
De asemenea, au făcut comenzi rapide inteligente pe baza acestor ipoteze, inclusiv salvarea unui mic număr de resurse prin faptul că nu a scris bucle interne de sincronizare în cadrul programului. De asemenea, au preluat puterea de procesor cât au putut - ceea ce a fost o idee decentă în zilele unor chips-uri lente, adesea pasive răcite!
Inițial, o modalitate de a obține o viteză diferită a procesorului a fost butonul bun Turbo vechi (care a încetinit sistemul dvs.). Aplicațiile moderne sunt în modul protejat, iar sistemul de operare tinde să gestioneze resursele - nu ar face-o permite o aplicație DOS (care rulează oricum în NTVDM pe un sistem pe 32 de biți) pentru a folosi tot procesorul în multe cazuri. Pe scurt, OS-urile au devenit mai inteligente, la fel ca API-urile.
Bazându-se puternic pe acest ghid pe PC-ul Oldskool, unde logica și memoria nu mi-au reușit - este o citire excelentă și, probabil, merge mai profund în "de ce".
Lucruri precum CPUkiller utilizează cât mai multe resurse posibil pentru a "încetini" sistemul, ceea ce este ineficient. Ar fi mai bine să utilizați DOSBox pentru a gestiona viteza ceasului pe care îl vede aplicația.
Dacă sunteți curios de modul în care codul real a fost implementat în jocurile de computer timpurii (și de ce se adaptează atât de prost la sistemele moderne, fără a fi împrăștiați într-un fel de program de emulare), sugerăm de asemenea să verificăm această defalcare proces în alt răspuns SuperUser.
Aveți ceva de adăugat la explicație? Sunați în comentariile. Doriți să citiți mai multe răspunsuri de la alți utilizatori de tehnologie Stack Exchange? Check out discuția completă aici.