Game Faster V1.0 是一款經典的 DOS 時期遊戲加速小工具。原理極其簡單:攔截鍵盤中斷(INT 09h),偵測 Ctrl+F9 熱鍵,直接重新設定 8253/8254 可程式化定時器(Timer 0)的計數值,提高系統時鐘中斷頻率,讓依賴 BIOS 計時或延遲迴圈的舊遊戲「跑得更快」。程式同樣採用 TSR(記憶體常駐)架構,未實作解除安裝功能。
IBM PC/AT 相容機使用 Intel 8253/8254 晶片的 Counter 0 產生系統時鐘中斷(INT 08h),預設頻率約 18.2 Hz(計數值 0xFFFF = 65535)。許多早期 DOS 遊戲使用 BIOS 計時器(INT 1Ah 功能 00h)或簡單的延遲迴圈來控制遊戲速度。若縮短 Timer 0 的計數值,INT 08h 觸發頻率上升,BIOS 計時器遞增加快,依賴它的遊戲邏輯自然加速。
my proc near
mov al,36h ; 控制字:Counter 0, Mode 3 (Square Wave), Binary, LSB/MSB
out 43h,al ; 寫入控制埠 43h
mov al,0
out 40h,al ; 計數值低位元組 = 0
mov al,10h
out 40h,al ; 計數值高位元組 = 10h (整體計數值 = 0x1000 = 4096)
ret
my endp
計數值從 65535 降為 4096,理論頻率提升約 16 倍。實際效果視遊戲計時方式而定,但對許多 8086/286 時代遊戲極為明顯。
程式結構與前文的 Mixer Volume Ctrler 高度相似,差異僅在熱鍵(F9 掃描碼 67h)與應用邏輯(my 程序)。以下為完整原始碼:
code segment
assume cs:code,ds:code
org 100h
begin:jmp init
zd db 'FAST V1.0 ZDsoft 1995',0dh,0ah,'$'
mes db 'Press CTRL-F9 to fast!',0dh,0ah,'$'
mes1 db 'Already Install!$'
int9 dd ?
mark db 'zd'
new_int proc far
sti
push ax
push es
xor ax,ax
mov es,ax
in al,60h
test al,80h
jnz exit1
test byte ptr es:[0417h],100b
jz exit1
cmp al,67
jz ok
jmp exit1
ok:
push ax
push bx
push cx
push dx
push bp
push di
push si
push ds
push cs
pop ds
in al,61h
push ax
or al,80h
out 61h,al
pop ax
out 61h,al
mov al,20h
out 20h,al
call my
pop ds
pop si
pop di
pop bp
pop dx
pop cx
pop bx
pop ax
exit1:
pop es
pop ax
jmp cs:int9
new_int endp
my proc near
mov al,36h
out 43h,al
mov al,0
out 40h,al
mov al,10h
out 40h,al
ret
my endp
init :
cli
push cs
pop ds
mov dx,offset zd
mov ah,9
int 21h
mov ax,3509h
int 21h
cmp word ptr es:[bx-2],'dz'
jnz install
mov dx,offset mes1
mov ah,9
int 21h
mov ah,4ch
int 21h
install:
mov di,offset int9
mov [di],bx
mov [di+2],es
push cs
pop ds
mov dx,offset new_int
mov ax,2509h
int 21h
sti
mov dx,offset mes
mov ah,9
int 21h
mov dx,offset init
int 27h
code ends
end begin
in al,61h / or al,80h / out 61h,al / out 61h,al 用於清除鍵盤控制器狀態,確保後續按鍵正常接收。mov al,20h / out 20h,al 通知 8259A PIC 中斷處理完畢,否則系統會掛起。cmp word ptr es:[bx-2],'dz' 檢查原 INT 09h 處理程序前兩字節是否為 'zd'(倒序儲存),防止重複安裝。INT 27h 以 DX = offset init 為常駐大小邊界,保留程式碼與資料區。在 386/486 時代,CPU 速度遠超遊戲設計預期,許多遊戲無內建幀率限制,導致畫面飛快無法遊玩。此類「加速器」實為「減速器」的反面操作——透過提高系統時鐘頻率,反而讓依賴固定延遲迴圈的遊戲變得可玩。現代對應技術包括:DOSBox 的 cycles 設定、CPU 降頻工具、遊戲專用幀率限制器(RivaTuner Statistics Server 等)。
clock、time 指令、網路協定逾時、磁碟 BIOS 延遲等皆會異常。