Articles » How To » Mengubah Versi DOS
Mengubah Versi DOS
Posted on 2000-04-15 00:00:00 - #Hits : 303

General Information
Publisher: Mikrodata Magazine
Published: Vol I Seri 14 - January 1999

Bagi kita yang masih berkutat pada sistem operasi MS DOS/ PC DOS pasti pernah menjumpai pesan kesalahan "Incorrect DOS version.", penulispun juga pernah mengalaminya.

Pesan kesalahan tersebut timbul apabila kita menjalankan file DOS yang berbeda versi dari versi DOS yang ada (yang digunakan untuk booting). Memang susah juga apabila kita menemui pesan kesalahan tersebut, walaupun sekarang telah banyak utility-utility yang dapat menggantikan file - file utility yang telah disediakan oleh DOS. Namun untuk hal - hal tertentu, utility dari DOS sulit untuk digantikan, sebagai contoh adalah MEM.EXE, MEMMAKER.EXE, FDISK.EXE, COMMAND.COM, dll.

Perlu untuk diketahui, bahwa file - file bawaan dari DOS selalu mengecek versi dari DOS yang sedang aktif ketika file tersebut dijalankan dan kemudian membandingkannya dengan suatu nilai yang ada, yaitu versi DOS dari file tersebut. Apabila tidak sama maka akan ditampilkan pesan kesalahan "Incorrect DOS version."

Lalu bagaimana kita mensiasati agar file DOS yang kita jalankan tidak tergantung pada versi DOS yang sedang berlaku? Caranya adalah dengan meng-intercept interrupt 21h fungsi 30h yaitu fungsi untuk mendapatkan versi DOS.


Dimana inputnya adalah:
  • AH = 30h
  • Int 21h
Dan sebagai output utamanya adalah:
  • AH = angka minor dari versi DOS, yaitu angka di belakang titik
  • AL = angka mayor dari versi DOS, yaitu angka di depan titik.

Untuk memanipulasi versi DOS, kita tinggal meng-intercept interrupt 21h fungsi 30h dan kemudian memberikan harga versi DOS pada register AX. Misalnya kita ingin versi DOS yang aktif adalah versi 6.20 maka kita tinggal memberikan harga AX dengan 1406h (14=20d dan 06=06d). Cobalah cek dengan perintah internal dari DOS yaitu VER, maka versi DOS yang aktif adalah versi 6.20. Cukup mudah bukan?

Penulis telah membuat sebuah program sederhana yang dapat memanipulasi versi DOS yang sedang aktif. Program yang penulis buat ini bersifat residen sehingga Anda dapat mengubah versi DOS sesuka hati dan sesering mungkin.

Setelah diinstal di memori, untuk mengubah versi DOS tinggal menekan tombol: CTRL+SHIFT+<option>
Dimana <option> adalah:

  • Tombol plus (+) pada keypad, yaitu untuk menaikkan versi DOS
  • Tombol minus (-) pada keypad, yaitu untuk menurunkan versi DOS
  • Tombol Del / Delete, yaitu untuk kembali pada versi DOS semula (asli)

Versi DOS yang disediakan adalah 1.00, 2.00, 3.00, 3.10, 3.30, 4.00, 5.00, 6.00, 6.20, dan 6.22. Anda bisa saja menambah atau mengurangi versi DOS yang telah penulis sediakan.

Penulis menyadari bahwa program ini masih jauh dari sempurna, untuk itu bila ada di antara para pembaca yang ingin meningkatkan kemampuannya, penulis sangat berterima kasih. Wassalam.

Listing Program :
; SetDVer v1.23a (the best version) - Utility to change DOS version ; Written by Bayu Prasetio - Jun 1998 ; Thanks to Alpha in Jeys 354 Computer ; Serial number : PROJ/1/B/04/06/1998 ; (C) Dark Logic - 1998 Code Segment Assume CS:Code, DS:Code, ES:Code, SS:Code Org 100h Listing : Jmp Begin OldInt9h_Off dw ? ; Original int 9h address OldInt9h_Seg dw ? OldInt21h_Off dw ? ; Original int 21h address OldInt21h_Seg dw ? NewInt9h : push ax push ds mov ax,40h mov ds,ax mov al,byte ptr ds:[17h] ; Get code in keyboard flags pop ds and al,7 ; CTRL and SHIFT toggle on cmp al,5 je CheckPlusMin cmp al,6 je CheckPlusMin Exit9h : pop ax jmp dword ptr cs:OldInt9h_Off ; Jump to origin int 9h address CheckPlusMin : in al,60h ; Get code with keyboard port cmp al,4eh ; Plus (keypad) key je PlusKey cmp al,4ah ; Minus (keypad) key je Minuskey cmp al,53h ; Delete key jne Exit9h Normal : mov cs:VerPos,10 ; Restore DOS version jmp short Exit9h Minuskey: cmp cs:VerPos,0 ; Compare DOS version with bottom ja MinusIt ; bound address jmp short Exit9h PlusKey : cmp cs:VerPos,9 ; Compare DOS version with top jb PlusIt ; bound address jmp short Exit9h MinusIt :Dec cs:VerPos ; Decrement DOS version jmp short Exit9h PlusIt :Inc cs:VerPos ; Increment DOS version jmp short Exit9h NewInt21h : ; Now, we're intercepting int 21h cmp ah,30h ; Function 30h jnz Exit21h pushf push bx mov bh,0 mov bl,cs:VerPos ; Manipulate the DOS version shl bl,1 mov ax,cs:DOSVer+bx ; Give the DOS version output pop bx popf Iret Exit21h : jmp dword ptr cs:OldInt21h_Off VerPos db 8 ; Actual DOS version address DOSVer dw 0001h,0002h,0003h,0A03h ; Data of DOS version that can be dw 1E03h,0004h,0005h,0006h ; accessed and manipulated dw 1406h,1606h OriginVer dw ? ; Original DOS version EndOfResident: Copyright db 'þ SetDVer v1.23a - A TSR utility to change the DOS version.',13,10 db 'þ Written by Bayu Prasetio - May 1998.',13,10 db 'þ Copyright (C) Dark Logic - 1998. All rights reserved.' db 13,10,13,10,'$' Already db 'SetDVer is already installed in memory.',7,13,10,13,10,'$' Install db 'To change DOS version, just press CTRL+SHIFT+&lt;option&gt;',13,10 db 'The option : ',13,10 db '--&gt; Plus Key (+) at keypad to increase DOS version.',13,10 db '--&gt; Minus Key (-) at keypad to decrease DOS version.',13,10 db '--&gt; Delete Key (Del) to restore DOS version.',13,10 db 13,10 db 'DOS version allowed :',13,10 db 'þ 1.00 þ 2.00 þ 3.00 þ 3.10',13,10 db 'þ 3.30 þ 4.00 þ 5.00 þ 6.00',13,10 db 'þ 6.20 þ 6.22',13,10 db 'Good luck, and have a nice day !!!!',13,10,13,10,'$' Begin : lea dx,Copyright ; Show copyright mov ah,9 int 21h mov ax,35F1h ; Check for existing this utility int 21h ; in memory cmp bx,0DCABh jne GoInstall lea dx,Already ; Program is installed in memory mov ah,9 int 21h lea dx,Install int 21h mov ah,4ch int 21h ; Exit to DOS GoInstall : mov ah,30h int 21h mov OriginVer,ax ; Save original DOS version mov ax,3509h ; Get and save int 9h address int 21h mov OldInt9h_Off,bx mov OldInt9h_Seg,es mov ax,2509h ; Set new int 9h address lea dx,NewInt9h int 21h mov ax,3521h ; Get and save int 21h address int 21h mov OldInt21h_Off,bx mov OldInt21h_Seg,es mov ax,2521h ; Set new int 21h address lea dx,NewInt21h int 21h mov ax,25F1h ; Set new int f1h address mov dx,0DCABh int 21h lea dx,Install mov ah,9 int 21h lea dx,EndOfResident mov cl,4 shr dx,cl inc dx mov ax,3100h int 21h ; Make resident Code ends end Listing ;------------- Now, the listing ends here. Compile, link and run soon --------
back
top
Best viewed with XHTML1 and CSS2 compliant browser @ 1024x768x32 Misc. Info
Copyright © 2003 - 2005, Bayu Prasetio.