Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

965 lines
25 KiB

CODE SEGMENT
ASSUME CS:CODE,DS:CODE
ORG 100h
INCLUDE EQU.INC
Start:
jmp PrgStart
eom = 0
LogoPos = 0600h
CodePos = LogoPos+421h
MemPos = LogoPos+521h
FilePos = LogoPos+621h
PrinterPos = LogoPos+721h
HekeyPos = LogoPos+821h
HjkeyPos = LogoPos+921h
KbdPos = LogoPos+0a21h
HelpPos = LogoPos+0C10h
MenuData STRUC
mFlag db ?
mCurPos dw ?
mFlagAddr dw ?
mKbdSrv dw ?
mMaxItem db ?
mCurItem db ?
mHelpMsg dw ?
mMenuMsg dw ?
MenuData ENDS
; mFlag
ByteDisp = 00000010b
StringDisp = 00000100b
;------------------------
LogoMsg label byte
db ' ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿',cr,lf
db ' ³ HanGeul BIOS setup program Version 6.12 ³',cr,lf
db ' ³ (C)Copyright Qnix computer Co., Ltd. 1992 ³',cr,lf
db ' ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´',cr,lf
db ' ³ CODE/SPEC. ³ ³',cr,lf
db ' ³ FONT MEMORY ³ ³',cr,lf
db ' ³ FONT FILENAME ³ ³',cr,lf
db ' ³ PRINTER TYPE ³ ³',cr,lf
db ' ³ HAN/ENG KEY ³ ³',cr,lf
db ' ³ HANJA KEY ³ ³',cr,lf
db ' ³ KBD TYPE ³ ³',cr,lf
db ' ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´',cr,lf
db ' ³ ³',cr,lf
db ' ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ'
LogoLng = $-LogoMsg
MenuSelHelp db 'USAGE : cursor, enter, ESC ',eom
StringSelHelp label byte
CodeSelHelp db 'USAGE : up, down, BS, enter, ESC',eom
CodeSelHelpLng = $-CodeSelHelp-1
SaveMsg db ' Save and exit (N/y) ',eom
DefaultMsg db 'default',eom
DefaultMsgLng = $-DefaultMsg-1
FileCreatErrMsg db cr,lf,'File creation error !',7,cr,lf,'$'
;------------------------
GrpCnvtTbl db 'Ú',''
db '¿',''
db 'À',''
db 'Ù',''
db 'Ã',''
db '´',''
db 'Â',''
db 'Á',''
db '³',''
db 'Ä',''
GrpCnvtTblLng = ($-GrpCnvtTbl)/2
;------------------------
MenuSelect label byte
db 48h,1 ; up
db 50h,2 ; down
db 4bh,3 ; left
db 4dh,4 ; right
db 1ch,5 ; enter
db 01h,6 ; ESC
dw -1
MakeCode label byte
db 48h,1 ; up
db 50h,2 ; down
db 4bh,8 ; left
db 4dh,9 ; right
db 1ch,5 ; enter
db 01h,6 ; ESC
dw -1
MakeString label byte
db 48h,1 ; up
db 50h,2 ; down
db 1ch,5 ; enter
db 01h,6 ; ESC
db 0eh,7 ; BS
dw -1
;------------------------
MainTbl label word
dw offset Sub1Tbl
dw offset Sub2Tbl
dw offset Sub3Tbl
dw offset Sub4Tbl
dw offset Sub5Tbl
dw offset Sub6Tbl
dw offset Sub7Tbl
MainTblLng = ($-MainTbl)/2
Sub1Tbl label byte
db 0
dw CodePos
dw offset Sub1DataTbl
dw offset KbdMenu
db Sub1DataTblLng
CurCode db 1
dw offset MenuSelHelp
dw offset Sub1Msg1
dw offset Sub1Msg2
dw offset Sub1Msg3
dw offset Sub1Msg4
Sub1Msg1 db 'English ',eom
Sub1Msg2 db 'KS C 5842 - 1991',eom
Sub1Msg3 db 'Chohab ',eom
Sub1Msg4 db 'Wansung 7 bit ',eom
Sub1DataTbl label byte
db 0
db WSung or HangeulMode
db Chab or HangeulMode
db WSung7 or HangeulMode
Sub1DataTblLng = $-Sub1DataTbl
Sub2Tbl label byte
db 0
dw MemPos
dw offset Sub2DataTbl
dw offset KbdMenu
db Sub2DataTblLng
CurMem db 0
dw offset MenuSelHelp
dw offset Sub2Msg1
dw offset Sub2Msg2
dw offset Sub2Msg3
dw offset Sub2Msg4
dw offset Sub2Msg5
Sub2Msg1 db 'Automatic',eom
Sub2Msg2 db 'HIMEM ',eom
Sub2Msg3 db 'EMS ',eom
Sub2Msg4 db 'Extended ',eom
Sub2Msg5 db 'Real ',eom
Sub2DataTbl label byte
db 0
db HiMem
db EmsMem
db ExtMem
db RealMem
Sub2DataTblLng = $-Sub2DataTbl
Sub3Tbl label byte
db StringDisp
dw FilePos
dw offset FontFileName
dw offset KbdString
db 1
db 0
dw offset StringSelHelp
Sub4Tbl label byte
db 0
dw PrinterPos
dw offset Sub4DataTbl
dw offset KbdMenu
db Sub4DataTblLng
CurPrinter db 1
dw offset MenuSelHelp
dw offset Sub4Msg1
dw offset Sub4Msg2
dw offset Sub4Msg3
dw offset Sub4Msg4
dw offset Sub4Msg5
dw offset Sub4Msg6
Sub4Msg1 db 'none select ',eom
Sub4Msg2 db 'KS ',eom
Sub4Msg3 db 'QLBP ',eom
Sub4Msg4 db 'KSSM ',eom
Sub4Msg5 db 'KSSM(Chohab)',eom
Sub4Msg6 db 'TG(Chohab) ',eom
Sub4DataTbl label byte
db NoPrt
db KsPrt
db wLbp
db wKmPrt
db cKmPrt
db TgPrt
Sub4DataTblLng = $-Sub4DataTbl
Sub5Tbl label byte
db ByteDisp
dw HekeyPos
dw offset HeKey
dw offset KbdCode
db 1
db 0
dw offset MenuSelHelp
Sub6Tbl label byte
db ByteDisp
dw HjkeyPos
dw offset HjKey
dw offset KbdCode
db 1
db 0
dw offset MenuSelHelp
Sub7Tbl label byte
db 0
dw KbdPos
dw offset Sub7DataTbl
dw offset KbdMenu
db Sub7DataTblLng
CurKbd db 0
dw offset MenuSelHelp
dw offset Sub7Msg1
dw offset Sub7Msg2
Sub7Msg1 db 'Default',eom
Sub7Msg2 db '101 KBD',eom
Sub7DataTbl label byte
db 0
db SetKbd101
Sub7DataTblLng = $-Sub7DataTbl
;------------------------
MenuPos dw 0 ; main table index
CharCnt dw 0 ; char counter
CurPos dw FilePos
OrgMode db 0
NorAttr db 0
SelAttr db 0
BakAttr db 0
FileName db 'C:\HECON.CFG',eom
Handle dw 0
;------------------------
ConfigData label byte
CfgFilename db 'HECON.CFG' ; 9 byte
CodeStat db HangeulMode
FontFileName db 'FONT.SYS'
db 24 dup(0) ; drive/path/filename
MemStat db 0 ; real/EMS/ext./HIMEM
HeKey db 0
HjKey db 0
PrinterStat db 0
KbdType db 0
db 3 dup(0) ; reserved
;------------------------
PrgStart:
call Modeset
call SetAttribute
call DisplayLogo
call OpenFile
call DisplayAll
mov ah,1
xor bh,bh
mov cx,220dh
int 10h
call Action
call RestoreScreen
Exit:
mov ah,4ch
int 21h
;------------------------------------------------------------------------
Modeset:
mov ah,0fh
int 10h
mov [OrgMode],al
int 11h
test al,30h
mov ax,7
jpe @f
mov al,3
@@:
int 10h
mov ah,1
mov cx,2000h
int 10h
ret
;------------------------
SetAttribute:
int 11h
mov [NorAttr],70h
mov [SelAttr],7
mov [BakAttr],70h
cmp al,30h
jpe @f
mov [NorAttr],70h
mov [SelAttr],7
mov [BakAttr],70h
@@:
ret
;------------------------
DisplayLogo:
mov ax,920h
xor bh,bh
mov bl,[BakAttr]
mov cx,80*25
int 10h
push es
mov ax,0fd00h
int 10h
mov si,bx
mov si,es:[si+16]
mov ah,byte ptr es:[si+7+4+1]
pop es
cmp al,0fdh
jnz DisplayLogoDo ; jump if english environment
test ah,00000001b
jz DisplayLogoDo ; jump if english mode
mov di,offset LogoMsg
mov cx,LogoLng
@@:
mov al,[di]
call ChgTblGrp
mov [di],al
inc di
loop @b
DisplayLogoDo:
mov bp,offset LogoMsg
mov dx,LogoPos
mov cx,LogoLng
mov bl,[NorAttr]
xor bh,bh
mov ax,1300h
int 10h
ret
ChgTblGrp:
push cx
mov bl,al
mov si,offset GrpCnvtTbl
mov cx,GrpCnvtTblLng
@@:
lodsw
cmp al,bl
jz @f
loop @b
mov ah,bl
@@:
mov al,ah
pop cx
ret
;------------------------
OpenFile:
mov ah,19h
int 21h
cmp al,2
jbe @f
mov al,2
@@:
add al,'A'
mov si,offset Filename
mov [si],al ; set drive latter
mov dx,offset FileName
mov ax,3d02h
int 21h
jc GetConfigFileCreat
mov [Handle],ax
mov dx,offset ConfigData
mov ah,3fh
mov bx,[Handle]
mov cx,50
int 21h
jnc GetConfigFileRead
GetConfigFileCreat:
mov dx,offset FileName
mov ah,3ch
mov cx,2 ; hidden file
int 21h
mov [Handle],ax
jnc @f
mov ah,9
mov dx,offset FileCreatErrMsg
int 21h
@@:
ret
GetConfigFileRead:
mov si,offset CfgFilename
mov di,offset FileName
add di,3
mov cx,9
rep cmpsb
jnz GetConfigFileCreat
;
mov ah,[CodeStat]
and ah,not ChabLoad
mov si,offset Sub1DataTbl
mov bx,si
mov cx,Sub1DataTblLng
@@:
lodsb
cmp al,ah
jz @f
loop @b
@@:
sub si,bx
mov bx,si
dec bx
mov [CurCode],bl
;
mov ah,[MemStat]
mov si,offset Sub2DataTbl
mov bx,si
mov cx,Sub2DataTblLng
@@:
lodsb
cmp al,ah
jz @f
loop @b
@@:
sub si,bx
mov bx,si
dec bx
mov [CurMem],bl
;
mov ah,[PrinterStat]
mov si,offset Sub4DataTbl
mov bx,si
mov cx,Sub4DataTblLng
@@:
lodsb
cmp al,ah
jz @f
loop @b
@@:
sub si,bx
mov bx,si
dec bx
mov [CurPrinter],bl
;
mov ah,[KbdType]
mov si,offset Sub7DataTbl
mov bx,si
mov cx,Sub7DataTblLng
@@:
lodsb
cmp al,ah
jz @f
loop @b
@@:
sub si,bx
mov bx,si
dec bx
mov [CurKbd],bl
ret
;------------------------
DisplayAll:
mov cx,MainTblLng
@@:
push cx
mov bl,[NorAttr]
call DispMenu
inc [MenuPos]
pop cx
loop @b
mov [MenuPos],0
mov bl,[SelAttr]
call DispMenu
call DispHelp
ret
;------------------------------------------------------------------------
Action:
xor ah,ah
int 16h
mov bx,[MenuPos]
shl bx,1
mov bx,[bx+MainTbl]
call [bx+mKbdSrv]
jnc @f
mov ax,0e07h
int 10h
jmp short Action
@@:
mov cl,ah
xor ch,ch
shl cx,1
mov si,cx
call [si].ActionTbl
jnc Action
ret
ActionTbl label word
dw offset EditString ; 0
dw offset MenuUp ; 1
dw offset MenuDown ; 2
dw offset MenuPost ; 3
dw offset MenuNext ; 4
dw offset CheckSave ; 5
dw offset Escape ; 6
dw offset EditBs ; 7
dw offset CodeDec ; 8
dw offset CodeInc ; 9
;------------------------
EditString:
cmp [CharCnt],StringLng
jae EditStringErr
mov si,[MenuPos]
shl si,1
mov si,[si+MainTbl]
mov di,[si].mFlagAddr
cmp [CharCnt],0
jnz @f
push ax
push di
mov dx,[si].mCurPos
mov [CurPos],dx
mov di,offset FontFileName
mov cx,StringLng
xor al,al
rep stosb
pop di
pop ax
@@:
add di,[CharCnt]
mov [di],al
inc [CharCnt]
mov bl,[SelAttr]
call DispMenu
inc [CurPos]
mov dx,[CurPos]
mov ah,2
xor bh,bh
int 10h
clc
ret
EditStringErr:
call Beep
clc
ret
;------------------------
MenuUp:
mov [CharCnt],0
mov [CurPos],FilePos
mov bl,[NorAttr]
call DispMenu
dec [MenuPos]
cmp [MenuPos],-1
jnz @f
mov [MenuPos],MainTblLng-1
@@:
call DispHelp
mov bl,[SelAttr]
call DispMenu
call CursorControl
clc
ret
;------------------------
MenuDown:
mov [CharCnt],0
mov [CurPos],FilePos
mov bl,[NorAttr]
call DispMenu
inc [MenuPos]
cmp [MenuPos],MainTblLng
jb @f
mov [MenuPos],0
@@:
call DispHelp
mov bl,[SelAttr]
call DispMenu
call CursorControl
clc
ret
;------------------------
MenuPost:
mov si,[MenuPos]
shl si,1
mov si,[si+MainTbl]
mov al,[si].mMaxItem
dec [si].mCurItem
cmp [si].mCurItem,-1
jnz @f
dec al
mov [si].mCurItem,al
@@:
mov bl,[SelAttr]
call DispMenu
clc
ret
;------------------------
MenuNext:
mov si,[MenuPos]
shl si,1
mov si,[si+MainTbl]
mov al,[si].mMaxItem
inc [si].mCurItem
cmp [si].mCurItem,al
jb @f
mov [si].mCurItem,0
@@:
mov bl,[SelAttr]
call DispMenu
clc
ret
;------------------------
CheckSave:
xor bh,bh
mov ah,3
int 10h
and ch,not 20h
mov ah,1
int 10h
mov dx,HelpPos
mov bl,[NorAttr]
xor bh,bh
mov ah,2
int 10h
mov cx,CodeSelHelpLng
mov ah,9
mov al,' '
int 10h
mov si,offset SaveMsg
mov bl,[SelAttr]
call DispString
xor ah,ah
int 16h
or al,20h
cmp al,'y'
jnz CheckSaveEnd
mov bl,[CurCode]
xor bh,bh
mov al,[bx+Sub1DataTbl]
mov [CodeStat],al
mov bl,[CurMem]
xor bh,bh
mov al,[bx+Sub2DataTbl]
mov [MemStat],al
mov bl,[CurKbd]
xor bh,bh
mov al,[bx+Sub7DataTbl]
mov [KbdType],al
mov bl,[CurPrinter]
xor bh,bh
mov al,[bx+Sub4DataTbl]
mov [PrinterStat],al
cmp [PrinterStat],NoPrt
jz @f
or [CodeStat],ChabLoad
@@:
test [CodeStat],Chab or WSung7
jz @f
or [CodeStat],ChabLoad
@@:
test [CodeStat],ChabLoad
jnz @f
and [CodeStat],not (Chab or WSung7)
mov [PrinterStat],NoPrt
@@:
xor cx,cx
xor dx,dx
mov bx,[Handle]
mov ax,4200h
int 21h
mov dx,offset ConfigData
mov ah,40h
mov cx,50
int 21h
mov ah,3eh
int 21h
stc
ret
CheckSaveEnd:
call DispHelp
call CursorControl
mov bl,[SelAttr]
call DispMenu
clc
ret
;------------------------
Escape:
stc
ret
;------------------------
EditBs:
cmp [CharCnt],0
jz EditBsErr
dec [CharCnt]
mov si,[MenuPos]
shl si,1
mov si,[si+MainTbl]
mov di,[si].mFlagAddr
add di,[CharCnt]
mov byte ptr [di],0
mov bl,[SelAttr]
call DispMenu
dec [CurPos]
mov dx,[CurPos]
mov ah,2
xor bh,bh
int 10h
clc
ret
EditBsErr:
call Beep
clc
ret
;------------------------
CodeDec:
mov si,[MenuPos]
shl si,1
mov si,[si+MainTbl]
mov dx,[si].mCurPos
mov si,[si].mFlagAddr
mov bl,[SelAttr]
dec byte ptr [si]
jz CodeDefMsg
CodeHexMsg:
mov bl,[NorAttr]
xor bh,bh
mov ah,2
int 10h
mov cx,DefaultMsgLng
mov ah,9
mov al,' '
int 10h
mov bl,[SelAttr]
call DispMenu
ret
;------------------------
CodeInc:
mov si,[MenuPos]
shl si,1
mov si,[si+MainTbl]
mov dx,[si].mCurPos
mov si,[si].mFlagAddr
mov bl,[SelAttr]
inc byte ptr [si]
jnz CodeHexMsg
CodeDefMsg:
mov bl,[SelAttr]
mov si,offset DefaultMsg
call DispString
ret
;------------------------------------------------------------------------
DispMenu:
mov si,[MenuPos]
shl si,1
mov si,[si+MainTbl]
mov dx,[si].mCurPos
mov al,[si].mFlag
and ax,00000110b
mov di,ax
call [di].DispMenuTbl
ret
DispMenuTbl label word
dw offset DispMenuStringMsg
dw offset DispByteMsg
dw offset DispStringMsg
dw offset DispStringMsg
DispMenuStringMsg:
mov al,[si].mCurItem
xor ah,ah
shl ax,1
add si,ax
mov si,[si].mMenuMsg
call DispString
ret
DispByteMsg:
mov si,[si].mFlagAddr
mov al,[si]
or al,al
jnz @f
mov si,offset DefaultMsg
push bx
mov bl,[NorAttr]
xor bh,bh
mov ah,2
int 10h
mov cx,DefaultMsgLng
mov ah,9
mov al,' '
int 10h
pop bx
call DispString
ret
@@:
mov ah,al
and ax,0f00fh
shr ah,1
shr ah,1
shr ah,1
shr ah,1
add ax,'00'
cmp al,'9'
jbe @f
add al,7
@@:
cmp ah,'9'
jbe @f
add ah,7
@@:
push ax
mov al,ah
mov cx,1
xor bh,bh
mov ah,2
int 10h
mov ah,9
int 10h
inc dl
mov ah,2
int 10h
pop ax
mov ah,9
int 10h
ret
DispStringMsg:
xor bh,bh
mov ah,2
int 10h
mov cx,StringLng
mov ah,9
mov al,' '
int 10h
mov si,[si].mFlagAddr
call DispString
mov ax,920h
int 10h ; clear han 1st flag
mov dx,[CurPos]
xor bh,bh
mov ah,2
int 10h
ret
;------------------------
DispHelp:
mov si,[MenuPos]
shl si,1
mov si,[si+MainTbl]
mov si,[si].mHelpMsg
mov bl,[NorAttr]
mov dx,HelpPos
call DispString
ret
;------------------------
RestoreScreen:
mov al,[OrgMode]
xor ah,ah
int 10h
ret
;------------------------
KbdMenu:
mov si,offset MenuSelect
call ParsingKey
ret
;------------------------
KbdCode:
mov si,offset MakeCode
call ParsingKey
ret
;------------------------
KbdString:
mov bh,al
mov si,offset MakeString
call ParsingKey
jnc @f
mov al,bh
xor ah,ah ; CLC
@@:
ret
;------------------------
ParsingKey:
mov bl,ah
@@:
lodsw
cmp ax,-1
jz @f
cmp al,bl
jnz @b
ret
@@:
stc
ret
;------------------------
Beep:
mov ax,0e07h
int 10h
ret
;------------------------
CursorControl:
push dx
xor bh,bh
mov ah,3
int 10h
or ch,20h
cmp [MenuPos],3-1
jnz @f
and ch,not 20h
mov si,[MenuPos]
shl si,1
mov si,[si+MainTbl]
mov dx,[si].mCurPos
mov [CurPos],dx
@@:
mov ah,1
int 10h
pop dx
ret
;------------------------
DispString:
mov cx,1
xor bh,bh
@@:
mov ah,2
int 10h
lodsb
cmp al,eom
jz @f
mov ah,9
int 10h
inc dl
jmp short @b
@@:
ret
CODE ENDS
END Start