16Aug

Varför går gamla spel för långt på moderna datorer?

Om du någonsin har försökt att få ett vintage datorspel igång på ett modernt system, har du nog varit chockad över hur snabbt spelet sprang. Varför går gamla spel ute av kontroll på modern hårdvara?

Tidigare idag visade vi dig hur man kör gammal programvara på moderna datorer;dagens frågor och svar är ett bra komplement som gräver till att vissa äldre program( specifikt spel) aldrig verkar fungera rätt när du försöker köra dem på modern maskinvara.

Dagens fråga &Svarssession kommer till oss med tillstånd av SuperUser-en indelning av Stack Exchange, en community-driven gruppering av Q & A-webbplatser.

Frågan

SuperUser-läsare TreyK vill veta varför gamla datorspel körs galen snabbt på ny hårdvara:

Jag har några gamla program som jag drog av en tidig 90-årig Windows-dator och försökte köra dem på en relativt modern dator. Intressant nog, de sprang i en blixtsnabb snabb hastighet - nej, inte de 60 bilderna per sekund snabbare, snarare den oh-my-god-the-character-är-walking-at-the-speed-of-sound slagssnabb. Jag skulle trycka på en piltangent och karaktärens sprite skulle zip över skärmen mycket snabbare än normalt. Tidsprogression i spelet hölls mycket snabbare än det borde. Det finns även program som görs för att sakta ner din CPU så att dessa spel kan spelas.

Jag har hört att detta är relaterat till spelet beroende på CPU-cykler, eller något liknande. Mina frågor är:

  • Varför gör äldre spel det här, och hur kom de undan med det?
  • Hur gör nya spel , inte , detta och körs oberoende av CPU-frekvensen?

Så vad är historien? Varför exakt sprites sprites i gamla spel över skärmen så fort blir spelet ospelbart?

Svaret

SuperUser-bidragare JourneymanGeek bryter ner det:

Jag tror att de antog att systemklockan skulle köras till en viss takt och bundet in sina interna timers till den klockfrekvensen. De flesta av dessa spel sprang troligtvis på DOS och var riktigt läge( med fullständig direkt hårdvaruåtkomst) och antagde att du körde ett iirc 4,77 MHz-system för datorer och vilken standardprocessor som modellen körde för andra system som Amiga.

De tog också snabba genvägar utifrån dessa antaganden, inklusive att spara en liten bit av resurser genom att inte skriva interna timing loopar inuti programmet. De tog också upp så mycket processorkraft som de kunde - vilket var en anständig idé i dagarna med långsamma, ofta passivt kylda marker!

Ursprungligen var ett sätt att komma runt annorlunda processorhastighet den bra gamla Turbo-knappen( som saktade ner ditt system).Moderna applikationer är skyddade och OS brukar hantera resurser - de skulle inte tillåta en DOS-applikation( som körs i NTVDM på ett 32-bitars system ändå) för att använda hela processorn i många fall. Kort sagt, OS har blivit smartare, liksom API.

Tungt baserad av den här guiden på Oldskool PC där logik och minne misslyckades - det är en bra läsning och går nog mer djupt in i "varför".

Stuff som CPUkiller använder upp så många resurser som möjligt för att "sakta" ner ditt system, vilket är ineffektivt. Du kan bättre använda DOSBox för att hantera klockhastigheten som din ansökan ser.

Om du är nyfiken på hur den faktiska koden implementerades i tidiga datorspel( och varför de anpassar sig så dåligt till moderna system utan att vara sandboxed i någon form av emuleringsprogram), skulle vi också föreslå att kolla in denna långa men intressanta uppdelningav processen i ett annat SuperUser-svar.

Har något att lägga till förklaringen? Ljud av i kommentarerna. Vill du läsa mer svar från andra tech-savvy Stack Exchange-användare? Kolla in hela diskussionsgängan här.