레이블이 x86인 게시물을 표시합니다. 모든 게시물 표시
레이블이 x86인 게시물을 표시합니다. 모든 게시물 표시

2018년 5월 25일 금요일

바이오스(rom-bios)

- 프로그래밍의 시작 : 바이오스의 마지막 명령어 다음 부터. 

BIOS (Basic Input Output System)
BIOS란 말 그대로 기본적인 입출력을 담당하는 것이며 하드웨어와 소프트웨어 중간자역활을 하는 펌웨어로서 맨 처음 컴퓨터를 켜면 컴퓨터의 기본적인 정보수집과 입출력을 담당하는 프로그램으로 메인보드의 핵심이 되는 부분이다.
즉 OS에서 입출력장치나 주변장치를 구동하기위한 루틴(컴퓨터에서 원하는 작업을 시킬수있도록 올바른 순서로 배열된 1쌍의 명령계열) 들의 집합체로서 OS가장 하위에 위치하며 보통 ROM안에 들어있기 때문에 ROM-BIOS라고도 불린다.
그러니까 쉽게 말해서 바이오스는 프로그램이라고 할 수 있다. 메인보드의 다른 부분은 모두 기계 덩어리이지만 바이오스만은 ROM(RAM과 마찬가지로 주기억장치로서 비휘발성 메모리 데이터를 저장할 수 있다.)이라는 저장장치에 프로그래밍 되어있는 프로그램이라 할 수 있겠다.
그럼 이 바이오스는 무슨 일을 하는지 알아보자.
이 바이오스는 크게 3가지 일을 한다. 맨 처음 POST과정을 수행한다.
POST(Power On Self Test)
사용자가 전원 스위치를 누르면 BIOS는 작성/조정된 소프트웨어에 의하여 스스로 시스템을 booting(기동) 시키는데 이것을 POSTing(Power On Self Testing, 포스팅)이라고 한다.
이 POST과정이란 컴퓨터가 켜지면 컴퓨터에 연결돼있는 장치들이 정상적으로 동작할 수 있는지 여부를 검사하기 시작한다. 이 과정을 POST 과정이라 하며 유저들이 노트북이나 PC를 처음 켜면 검은 바탕에 흰 글씨로 메모리체크도 하고 하드는 어떤 하드가 달렸는지 CD롬은 어떤 것을 쓰는지, 키보드는 정상적으로 동작하는지 등의 메시지가 뜰 것이다. 이과정이 POST과정으로 바이오스의 기능 중 하나이다.
보통 얼마만큼의 메모리가 있는지, 하드디스크나 시디롬의 동작 상태는 어떠한지, 키보드는 연결되어 있는지 타이머는 동작을 하고 있는지, 인터럽트가 제대로 처리 될 수 있는 상태인지 등등 이런 기본적인 부분을 점검한다.
POSTing은 다음과 같은 순서로 진행된다.
전원 공급을 시작하면 전압이 안정된 수준에 도달할 때까지 기다려 부품이 전력 상태 불안정으로 공장이 나지 않도록 보호한다. 전원 장치로부터 Power Good Signal(전력 상태 양호) 을 받으면 프로세서가 우선적으로 System BIOS가 저장된 ROM의 boot 프로그램을 찾아 부팅하도록 지시한다.
BIOS는 posting 과정을 프로그램대로 실행한다.
만약 posting 과정에서 문제가 발생하면 동작 중단하고 'beep code'(BIOS가 발견한 시스템 스피커를 통하여 소리로 사용자에게 알리는 모르스 부호 형태의 신호음)을 낸다.
BIOS는 그래픽카드를 찾아서 그래픽 BIOS를 동작시키면 그래픽 BIOS는 그래픽카드를 초기화하고 모 터 화면에 그래픽카드 정보(종류, 버전 등)를 알린다. 화면이 부팅 이후 사용자가 가장 먼저 눈으로 확인할 수 있는 시스템 BIOS의 진행 과정이다. BIOS는 그래픽 BIOS ROM 외에도 IDE 하드디스크의 BIOS를 비롯한 다른 장치들의 ROM을 찾아서 동작(초기화) 시키게 된다.
BIOS는 메모리 검사를 포함하여 키보드, 디스크 컨트롤러, drive 등 몇 가지의 검사를 추가로 시행하여 문제가 발견되면 모니터를 통하여 에러 메시지를 띄운다. BIOS는 사용자가 수동으로 설정한 장치들과 BIOS가 검사한 여러 종류의 자동 설정 장치들을 시스템 목록으로 작성하여 화면에 상세하게 나타낸다.
미리 설정한 boot 우선순위에 따라서 OS가 있는 플로피 디스크나 하드디스크의 master boot record(실린더 0, 헤드 0, 섹터1)을 검사한다. 디스크에서 boot sector를 발견하면 OS가 boot 과정을 시작하게 만들고 BIOS는 posting을 마친다.
첫째, boot drive에 OS가 없으면 다음 순위의 boot drive에서 OS를 찾는다.
둘째, boot drive를 포함하여 다른 driver에도 OS가 없으면 BIOS가 화면에 "No boot device available" 또는 "NO ROM BASIC-SYSTEM HALTED" 라는 메시지를 보낸다.
그리고 BIOS의 두 번째 기능으로서 시스템 초기화를 들 수 있다.
POST과정이 끝나면 시스템을 사용할 수 있도록 메인보드에 장착된 각 칩셋과 연결되어있는 여러 주변장치들에 대하여 각각 초기화를 시작한다. 이때 초기화과정에서는 어떤 주변장치가 연결되었는 확인한다.
초기화의 과정의 일환으로 ROM바이오스 내부에 들어있는 핸들러를 읽어들이게 되고, 인터럽트 백터테이블을 구성한다. 또한 현재시스템에 장착돼있는 장비들의 상태를 알아내어 메모리 하위번지에 확장바이오스를 설치한다.
너무설명이 어려운거 같은데 시스템초기화의 가장 중요한 부분은 바이오스에서 어떤 주변 장치가 연결돼있는지 확인 한다는 것이다 주변장치란 사운드(카드)칩셋이나 비디오(카드)칩셋이나 렌(카드)칩셋 등등이 있다.
이렇게 시스템초기화의 과정까지 아무런 문제가 발생되지 않았다면 바이오스는 디스크부팅을 준비하며 이 작업을 위해 부팅할 부트스트랩로더를 읽어들인다. 이과정이 바이오스의 3번째 역할인 디스크부트이다.
부트스트랩로더란 시스템부팅에 필요한 아주 작은 프로그램으로 이것을 읽는데 성공하면 디스크가 부팅이된다. 말 그대로 윈도우가 부팅 되는 것이다.
디스크부팅과 더불어 디스크에 설치된 운영체제가 컴퓨터의 메모리에 올라오며 운영체제는 시스템을 점검 후 일련의 초기화과정을 수행하고 사용자의 명령을 기다린다. 이때가 바로 윈도우 부팅 후 바탕화면이 떠 있는 상태이다. 자 이렇게 해서 노트북이나 PC를 켬과 동시에 윈도우 부팅까지 이르는 전반적인 과정에서 기본적인 입, 출력 및 여러 가지 과정을 BIOS가 처리 하고 있다.
이것으로 바이오스의 기능은 끝일까?
아니다. 이제부터가 바이오스는 엄청나게 중요한 일들을 처리한다.
일단 바탕화면이 뜨고 난 후 여러 사용자들은 인터넷에 들어가던지, 게임을 하던지 무엇을 하던 컴퓨터를 활용한다.
컴퓨터를 사용하면서 우리는 항상 입출력을 하게 된다.
마우스를 이용해 아이콘을 클릭한다던지 키보드를 이용하여 글자를 두들긴다든지 하는 가장 기본적인 입출력을 통하여 우리는 바이오스의 기능들을 계속적으로 불러 들인다.
바이오스에서는 가장기본적인 입출력을 담당 한다고 언급했다.
키보드를 통한 데이터 입출력, 비디오카드를 통한 데이터 입출력(모니터로 화면이 보이게 하는 부분), 프린터 출력, 직렬통신을 이용한 데이터 입출력, 디스크를 제어하는 기능 등 이모든 일들은 항상 바이오스의 기능을 우리가 불러내는 일들이다. 이것을 바로 바이오스콜이라고 부른다.
만약 문서작성을 한다면 글을 쓰고 있는 시점에도 바이오스의 기능을 계속적으로 불러들이는 바이오스콜을 하고 있는 것 이며 화면으로 작성된 글을 읽는 것 조차 바이오스콜을 통하여 이루어지는 것 이다.
이렇게 바이오스는 OS(소프트웨어)와 하드웨어 중간에 위치하여 바이오스콜을 통하여 기본적인 입출력을 담당하고 있다.
이제 딱딱한 이야기들 보다 좀 더 가슴에 와 닫는 것들을 알아보자.
우선 바이오스프로그램을 만드는 회사는 크게 3군데가 있다.
아미 바이오스, 어워드 바이오스, 피닉스바이오스라는 것이다.
이것은 바이오스 이름이 아니라 제조회사를 나타내는 것이다.
어떤 사용자가 아미나 어워드 같은 것들을 다운받을 수 있는 곳을 알려달라고 한 글을 본 적이 있는데 그건 말이 안되는 것이다.
말했듯 회사이름이고, 바이오스는 프로그램(예전에는 어셈블리어로 많이 만들었지만 요즘은 C언어로도 만들고 있다.)이기 때문에 메인보드에 메인칩과 각종 칩들과 호환이 되도록 프로그램 되어 있다.
그래서 PC면 메인보드 모델넘버나 노트북이면 노트북모델을 알고 그에 따른 정확한 바이오스를 사용해야만 컴퓨터가 제대로 동작한다.
만약 바이오스가 맛이 가버리면 컴퓨터는 전원만 들어오고 전혀 동작을 하지 않는다. 아주 미세하게 맛이 간 경우에는 윈도우 부팅되기 전까지 무슨 문제가 나타나더라도 나타나게 된다.
BIOS업데이트를 많이 받고는 하는데 고급 사용자 같은 경우는 롬라이트기를 이용하여 아예 롬을 빼내서 바이오스내용을 다시 프로그래밍 할 수 있지만 일반 사용자의 경우에는 노트북이나 PC를 이용하여 업데이트를 해야 한다. 그럴 경우 대부분의 익숙치 않은 사용자들은 바이오스 업데이트 도중 실패하셔서 노트북을 사용하시지 못하는 경우를 엄청 많이보았다. 아니 애초에 시도조차 하지 않는 경우도 더욱 많다.
바이오스 업데이트를 권장하는 경우는 고용량하드디스크로 업그레이드 할때 CMOS 셋업에서 하드디스크 용량이 잡히지 않을 경우 등을 제외하고는 BIOS업데이트를 아예 하지 않는것도 현명한방법 같다.
BIOS업데이트를 하고나면 속도가 빨라진다든지 왠지 느낌이 좋다고 그러시는 사람은 좀 답답할 뿐이다. BIOS가 나가버리면 위에서 언급했다시피 최악의 상황까지 이르기 때문이다.
참, 그리고 CMOS 셋업과 BIOS 와 ROM을 동일시 생각는 사람들이 있을 것이다.
3가지 모두 다른 것들이다.
차이점을 설명해 보면 BIOS에 대해서는 더 이상의 설명이 필요하지 않을 것이다.
CMOS셋업이란 바이오스 프로그램 기능 중 일부를 사용하는 사람이 직접 제어를 할 수 있도록 만들어놓은 셋업프로그램이다.
CMOS셋업을 통하여~기본적인 PC의 셋팅을 할 수 있는 것이다.
하드디스크 용량 결정이라든지, 노트북의 경우 화면을 CRT로 나오게 할 것인지, LCD로 나오게 할 것인지, 오버클럭을 할 것인지, 패스워드를 설정 할 것인지 등 많은 내용들을 셋업 할 수 있는 것이다.
그리고 ROM이란 것은 위에서도 언급 했듯이 메모리의 일종으로서 비휘발성 메모리를 저장하는 장치이다. ROM안에 BIOS가 프로그램 되어 있는 것이다. 이정도면 3가지의 차이를 충분히 이해 할 수 있을 것이다. 그리고 중요한 한 가지. 패스워드 내용이라든지 CMOS 셋업을 통하여 저장된 컴퓨터의 셋팅 내용 등등, 이러한 시정수값 내용들이 롬바이오스 안에 저장돼있다고 생각하는 사람도 있는데 그것은 잘못된 생각이다. 이러한 일련의 시정수 값들은 RTC라고 불리우는 현제 사우스브릿지 역활을 하는 칩셋에 저장이 되어있다.

바이오스의 아주 기본적인 역할

바이오스
번째 부팅순서로 연결된 외부저장장치의 첫 512byte를 메모리의 물리주소 "0x0000 7C00"에 위치시킨다.

때 0~511 로 주소 지정된다고 한다면,
510번째 byte = "0x55"
511번째 byte = "0xAA"
의 값이 일치하는지 체크한다.

리고 "jmp 0x0000:0x7C00" 명령을 마지막으로 부트로더(MBR)로 제어를 넘긴다.

이외에도 바이오스는 당연히 여러가지 역할을 한다.



(최근에 산 lenovo의 S405모델의 경우 MBR의 첫번째 명령어가 xor XXX,XXX 여야 MBR로 인식을 하더라.)

우분투 12.10 desktop i386 version 설치시디 MBR disnasm 결과

00000000  33ED              xor bp,bp
00000002  90                nop
00000003  90                nop
00000004  90                nop
00000005  90                nop
00000006  90                nop
00000007  90                nop
00000008  90                nop
00000009  90                nop
0000000A  90                nop
0000000B  90                nop
0000000C  90                nop
0000000D  90                nop
0000000E  90                nop
0000000F  90                nop
00000010  90                nop
00000011  90                nop
00000012  90                nop
00000013  90                nop
00000014  90                nop
00000015  90                nop
00000016  90                nop
00000017  90                nop
00000018  90                nop
00000019  90                nop
0000001A  90                nop
0000001B  90                nop
0000001C  90                nop
0000001D  90                nop
0000001E  90                nop
0000001F  90                nop
00000020  33ED              xor bp,bp
00000022  FA                cli
00000023  8ED5              mov ss,bp
00000025  BC007C            mov sp,0x7c00
00000028  FB                sti
00000029  FC                cld
0000002A  6631DB            xor ebx,ebx
0000002D  6631C9            xor ecx,ecx
00000030  6653              push ebx
00000032  6651              push ecx
00000034  06                push es
00000035  57                push di
00000036  8EDD              mov ds,bp
00000038  8EC5              mov es,bp
0000003A  52                push dx
0000003B  BE007C            mov si,0x7c00
0000003E  BF0006            mov di,0x600
00000041  B90001            mov cx,0x100
00000044  F3A5              rep movsw
00000046  EA4B060000        jmp word 0x0:0x64b
0000004B  52                push dx
0000004C  B441              mov ah,0x41
0000004E  BBAA55            mov bx,0x55aa
00000051  31C9              xor cx,cx
00000053  30F6              xor dh,dh
00000055  F9                stc
00000056  CD13              int 0x13
00000058  7216              jc 0x70
0000005A  81FB55AA          cmp bx,0xaa55
0000005E  7510              jnz 0x70
00000060  83E101            and cx,byte +0x1
00000063  740B              jz 0x70
00000065  66C706F106B442EB  mov dword [0x6f1],0x15eb42b4
         -15
0000006E  EB00              jmp short 0x70
00000070  5A                pop dx
00000071  51                push cx
00000072  B408              mov ah,0x8
00000074  CD13              int 0x13
00000076  83E13F            and cx,byte +0x3f
00000079  5B                pop bx
0000007A  51                push cx
0000007B  0FB6C6            movzx ax,dh
0000007E  40                inc ax
0000007F  50                push ax
00000080  F7E1              mul cx
00000082  53                push bx
00000083  52                push dx
00000084  50                push ax
00000085  BB007C            mov bx,0x7c00
00000088  B90400            mov cx,0x4
0000008B  66A1B007          mov eax,[0x7b0]
0000008F  E84400            call word 0xd6
00000092  0F828000          jc word 0x116
00000096  6640              inc eax
00000098  80C702            add bh,0x2
0000009B  E2F2              loop 0x8f
0000009D  66813E407CFBC078  cmp dword [0x7c40],0x7078c0fb
         -70
000000A6  7509              jnz 0xb1
000000A8  FA                cli
000000A9  BCEC7B            mov sp,0x7bec
000000AC  EA447C0000        jmp word 0x0:0x7c44
000000B1  E88300            call word 0x137
000000B4  69736F6C69        imul si,[bp+di+0x6f],word 0x696c
000000B9  6E                outsb
000000BA  7578              jnz 0x134
000000BC  2E62696E          bound bp,[cs:bx+di+0x6e]
000000C0  206D69            and [di+0x69],ch
000000C3  7373              jnc 0x138
000000C5  696E67206F        imul bp,[bp+0x67],word 0x6f20
000000CA  7220              jc 0xec
000000CC  636F72            arpl [bx+0x72],bp
000000CF  7275              jc 0x146
000000D1  7074              jo 0x147
000000D3  2E0D0A66          cs or ax,0x660a
000000D7  60                pushaw
000000D8  6631D2            xor edx,edx
000000DB  660306F87B        add eax,[0x7bf8]
000000E0  661316FC7B        adc edx,[0x7bfc]
000000E5  6652              push edx
000000E7  6650              push eax
000000E9  06                push es
000000EA  53                push bx
000000EB  6A01              push byte +0x1
000000ED  6A10              push byte +0x10
000000EF  89E6              mov si,sp
000000F1  66F736E87B        div dword [0x7be8]
000000F6  C0E406            shl ah,byte 0x6
000000F9  88E1              mov cl,ah
000000FB  88C5              mov ch,al
000000FD  92                xchg ax,dx
000000FE  F636EE7B          div byte [0x7bee]
00000102  88C6              mov dh,al
00000104  08E1              or cl,ah
00000106  41                inc cx
00000107  B80102            mov ax,0x201
0000010A  8A16F27B          mov dl,[0x7bf2]
0000010E  CD13              int 0x13
00000110  8D6410            lea sp,[si+0x10]
00000113  6661              popad
00000115  C3                ret
00000116  E81E00            call word 0x137
00000119  4F                dec di
0000011A  7065              jo 0x181
0000011C  7261              jc 0x17f
0000011E  7469              jz 0x189
00000120  6E                outsb
00000121  67207379          and [ebx+0x79],dh
00000125  7374              jnc 0x19b
00000127  656D              gs insw
00000129  206C6F            and [si+0x6f],ch
0000012C  61                popaw
0000012D  64206572          and [fs:di+0x72],ah
00000131  726F              jc 0x1a2
00000133  722E              jc 0x163
00000135  0D0A5E            or ax,0x5e0a
00000138  AC                lodsb
00000139  B40E              mov ah,0xe
0000013B  8A3E6204          mov bh,[0x462]
0000013F  B307              mov bl,0x7
00000141  CD10              int 0x10
00000143  3C0A              cmp al,0xa
00000145  75F1              jnz 0x138
00000147  CD18              int 0x18
00000149  F4                hlt
0000014A  EBFD              jmp short 0x149
0000014C  0000              add [bx+si],al
0000014E  0000              add [bx+si],al
00000150  0000              add [bx+si],al
00000152  0000              add [bx+si],al
00000154  0000              add [bx+si],al
00000156  0000              add [bx+si],al
00000158  0000              add [bx+si],al
0000015A  0000              add [bx+si],al
0000015C  0000              add [bx+si],al
0000015E  0000              add [bx+si],al
00000160  0000              add [bx+si],al
00000162  0000              add [bx+si],al
00000164  0000              add [bx+si],al
00000166  0000              add [bx+si],al
00000168  0000              add [bx+si],al
0000016A  0000              add [bx+si],al
0000016C  0000              add [bx+si],al
0000016E  0000              add [bx+si],al
00000170  0000              add [bx+si],al
00000172  0000              add [bx+si],al
00000174  0000              add [bx+si],al
00000176  0000              add [bx+si],al
00000178  0000              add [bx+si],al
0000017A  0000              add [bx+si],al
0000017C  0000              add [bx+si],al
0000017E  0000              add [bx+si],al
00000180  0000              add [bx+si],al
00000182  0000              add [bx+si],al
00000184  0000              add [bx+si],al
00000186  0000              add [bx+si],al
00000188  0000              add [bx+si],al
0000018A  0000              add [bx+si],al
0000018C  0000              add [bx+si],al
0000018E  0000              add [bx+si],al
00000190  0000              add [bx+si],al
00000192  0000              add [bx+si],al
00000194  0000              add [bx+si],al
00000196  0000              add [bx+si],al
00000198  0000              add [bx+si],al
0000019A  0000              add [bx+si],al
0000019C  0000              add [bx+si],al
0000019E  0000              add [bx+si],al
000001A0  0000              add [bx+si],al
000001A2  0000              add [bx+si],al
000001A4  0000              add [bx+si],al
000001A6  0000              add [bx+si],al
000001A8  0000              add [bx+si],al
000001AA  0000              add [bx+si],al
000001AC  0000              add [bx+si],al
000001AE  0000              add [bx+si],al
000001B0  685F17            push word 0x175f
000001B3  0000              add [bx+si],al
000001B5  0000              add [bx+si],al
000001B7  0072A2            add [bp+si-0x5e],dh
000001BA  5F                pop di
000001BB  47                inc di
000001BC  0000              add [bx+si],al
000001BE  800201            add byte [bp+si],0x1
000001C1  0017              add [bx],dl
000001C3  1298F140          adc bl,[bx+si+0x40f1]
000001C7  0000              add [bx+si],al
000001C9  0018              add [bx+si],bl
000001CB  8A17              mov dl,[bx]
000001CD  0000              add [bx+si],al
000001CF  0000              add [bx+si],al
000001D1  0000              add [bx+si],al
000001D3  0000              add [bx+si],al
000001D5  0000              add [bx+si],al
000001D7  0000              add [bx+si],al
000001D9  0000              add [bx+si],al
000001DB  0000              add [bx+si],al
000001DD  0000              add [bx+si],al
000001DF  0000              add [bx+si],al
000001E1  0000              add [bx+si],al
000001E3  0000              add [bx+si],al
000001E5  0000              add [bx+si],al
000001E7  0000              add [bx+si],al
000001E9  0000              add [bx+si],al
000001EB  0000              add [bx+si],al
000001ED  0000              add [bx+si],al
000001EF  0000              add [bx+si],al
000001F1  0000              add [bx+si],al
000001F3  0000              add [bx+si],al
000001F5  0000              add [bx+si],al
000001F7  0000              add [bx+si],al
000001F9  0000              add [bx+si],al
000001FB  0000              add [bx+si],al
000001FD  0055AA            add [di-0x56],dl

sda first block example

00000000  EB63              jmp short 0x65
00000002  90                nop
00000003  D0BC007C          sar byte [si+0x7c00],1
00000007  FB                sti
00000008  50                push ax
00000009  07                pop es
0000000A  50                push ax
0000000B  1F                pop ds
0000000C  FC                cld
0000000D  BE1B7C            mov si,0x7c1b
00000010  BF1B06            mov di,0x61b
00000013  50                push ax
00000014  57                push di
00000015  B9E501            mov cx,0x1e5
00000018  F3A4              rep movsb
0000001A  CB                retf
0000001B  BDBE07            mov bp,0x7be
0000001E  B104              mov cl,0x4
00000020  386E00            cmp [bp+0x0],ch
00000023  7C09              jl 0x2e
00000025  7513              jnz 0x3a
00000027  83C510            add bp,byte +0x10
0000002A  E2F4              loop 0x20
0000002C  CD18              int 0x18
0000002E  8BF5              mov si,bp
00000030  83C610            add si,byte +0x10
00000033  49                dec cx
00000034  7419              jz 0x4f
00000036  382C              cmp [si],ch
00000038  74F6              jz 0x30
0000003A  A0B507            mov al,[0x7b5]
0000003D  B407              mov ah,0x7
0000003F  8BF0              mov si,ax
00000041  AC                lodsb
00000042  3C00              cmp al,0x0
00000044  74FC              jz 0x42
00000046  BB0700            mov bx,0x7
00000049  B40E              mov ah,0xe
0000004B  CD10              int 0x10
0000004D  EBF2              jmp short 0x41
0000004F  884E10            mov [bp+0x10],cl
00000052  E84600            call word 0x9b
00000055  732A              jnc 0x81
00000057  FE4610            inc byte [bp+0x10]
0000005A  00800100          add [bx+si+0x1],al
0000005E  0000              add [bx+si],al
00000060  0000              add [bx+si],al
00000062  0000              add [bx+si],al
00000064  FF                db 0xff
00000065  FA                cli
00000066  90                nop
00000067  90                nop
00000068  F6C280            test dl,0x80
0000006B  7405              jz 0x72
0000006D  F6C270            test dl,0x70
00000070  7402              jz 0x74
00000072  B280              mov dl,0x80
00000074  EA797C0000        jmp word 0x0:0x7c79
00000079  31C0              xor ax,ax
0000007B  8ED8              mov ds,ax
0000007D  8ED0              mov ss,ax
0000007F  BC0020            mov sp,0x2000
00000082  FB                sti
00000083  A0647C            mov al,[0x7c64]
00000086  3CFF              cmp al,0xff
00000088  7402              jz 0x8c
0000008A  88C2              mov dl,al
0000008C  52                push dx
0000008D  BB1704            mov bx,0x417
00000090  802703            and byte [bx],0x3
00000093  7406              jz 0x9b
00000095  BE887D            mov si,0x7d88
00000098  E81701            call word 0x1b2
0000009B  BE057C            mov si,0x7c05
0000009E  B441              mov ah,0x41
000000A0  BBAA55            mov bx,0x55aa
000000A3  CD13              int 0x13
000000A5  5A                pop dx
000000A6  52                push dx
000000A7  723D              jc 0xe6
000000A9  81FB55AA          cmp bx,0xaa55
000000AD  7537              jnz 0xe6
000000AF  83E101            and cx,byte +0x1
000000B2  7432              jz 0xe6
000000B4  31C0              xor ax,ax
000000B6  894404            mov [si+0x4],ax
000000B9  40                inc ax
000000BA  8844FF            mov [si-0x1],al
000000BD  894402            mov [si+0x2],ax
000000C0  C7041000          mov word [si],0x10
000000C4  668B1E5C7C        mov ebx,[0x7c5c]
000000C9  66895C08          mov [si+0x8],ebx
000000CD  668B1E607C        mov ebx,[0x7c60]
000000D2  66895C0C          mov [si+0xc],ebx
000000D6  C744060070        mov word [si+0x6],0x7000
000000DB  B442              mov ah,0x42
000000DD  CD13              int 0x13
000000DF  7205              jc 0xe6
000000E1  BB0070            mov bx,0x7000
000000E4  EB76              jmp short 0x15c
000000E6  B408              mov ah,0x8
000000E8  CD13              int 0x13
000000EA  730D              jnc 0xf9
000000EC  F6C280            test dl,0x80
000000EF  0F84D000          jz word 0x1c3
000000F3  BE937D            mov si,0x7d93
000000F6  E98200            jmp word 0x17b
000000F9  660FB6C6          movzx eax,dh
000000FD  8864FF            mov [si-0x1],ah
00000100  40                inc ax
00000101  66894404          mov [si+0x4],eax
00000105  0FB6D1            movzx dx,cl
00000108  C1E202            shl dx,byte 0x2
0000010B  88E8              mov al,ch
0000010D  88F4              mov ah,dh
0000010F  40                inc ax
00000110  894408            mov [si+0x8],ax
00000113  0FB6C2            movzx ax,dl
00000116  C0E802            shr al,byte 0x2
00000119  668904            mov [si],eax
0000011C  66A1607C          mov eax,[0x7c60]
00000120  6609C0            or eax,eax
00000123  754E              jnz 0x173
00000125  66A15C7C          mov eax,[0x7c5c]
00000129  6631D2            xor edx,edx
0000012C  66F734            div dword [si]
0000012F  88D1              mov cl,dl
00000131  31D2              xor dx,dx
00000133  66F77404          div dword [si+0x4]
00000137  3B4408            cmp ax,[si+0x8]
0000013A  7D37              jnl 0x173
0000013C  FEC1              inc cl
0000013E  88C5              mov ch,al
00000140  30C0              xor al,al
00000142  C1E802            shr ax,byte 0x2
00000145  08C1              or cl,al
00000147  88D0              mov al,dl
00000149  5A                pop dx
0000014A  88C6              mov dh,al
0000014C  BB0070            mov bx,0x7000
0000014F  8EC3              mov es,bx
00000151  31DB              xor bx,bx
00000153  B80102            mov ax,0x201
00000156  CD13              int 0x13
00000158  721E              jc 0x178
0000015A  8CC3              mov bx,es
0000015C  60                pushaw
0000015D  1E                push ds
0000015E  B90001            mov cx,0x100
00000161  8EDB              mov ds,bx
00000163  31F6              xor si,si
00000165  BF0080            mov di,0x8000
00000168  8EC6              mov es,si
0000016A  FC                cld
0000016B  F3A5              rep movsw
0000016D  1F                pop ds
0000016E  61                popaw
0000016F  FF265A7C          jmp word [0x7c5a]
00000173  BE8E7D            mov si,0x7d8e
00000176  EB03              jmp short 0x17b
00000178  BE9D7D            mov si,0x7d9d
0000017B  E83400            call word 0x1b2
0000017E  BEA27D            mov si,0x7da2
00000181  E82E00            call word 0x1b2
00000184  CD18              int 0x18
00000186  EBFE              jmp short 0x186
00000188  47                inc di
00000189  52                push dx
0000018A  55                push bp
0000018B  42                inc dx
0000018C  2000              and [bx+si],al
0000018E  47                inc di
0000018F  656F              gs outsw
00000191  6D                insw
00000192  004861            add [bx+si+0x61],cl
00000195  7264              jc 0x1fb
00000197  204469            and [si+0x69],al
0000019A  736B              jnc 0x207
0000019C  005265            add [bp+si+0x65],dl
0000019F  61                popaw
000001A0  640020            add [fs:bx+si],ah
000001A3  45                inc bp
000001A4  7272              jc 0x218
000001A6  6F                outsw
000001A7  720D              jc 0x1b6
000001A9  0A00              or al,[bx+si]
000001AB  BB0100            mov bx,0x1
000001AE  B40E              mov ah,0xe
000001B0  CD10              int 0x10
000001B2  AC                lodsb
000001B3  3C00              cmp al,0x0
000001B5  75F4              jnz 0x1ab
000001B7  C3                ret
000001B8  AC                lodsb
000001B9  41                inc cx
000001BA  83B7000080        xor word [bx+0x0],byte -0x80
000001BF  0101              add [bx+di],ax
000001C1  0007              add [bx],al
000001C3  FE                db 0xfe
000001C4  FF                db 0xff
000001C5  FF                db 0xff
000001C6  3F                aas
000001C7  0000              add [bx+si],al
000001C9  008DF234          add [di+0x34f2],cl
000001CD  0C00              or al,0x0
000001CF  FE                db 0xfe
000001D0  FF                db 0xff
000001D1  FF05              inc word [di]
000001D3  FE                db 0xfe
000001D4  FF                db 0xff
000001D5  FF                db 0xff
000001D6  FE                db 0xfe
000001D7  F734              div word [si]
000001D9  0C02              or al,0x2
000001DB  60                pushaw
000001DC  032E0000          add bp,[0x0]
000001E0  0000              add [bx+si],al
000001E2  0000              add [bx+si],al
000001E4  0000              add [bx+si],al
000001E6  0000              add [bx+si],al
000001E8  0000              add [bx+si],al
000001EA  0000              add [bx+si],al
000001EC  0000              add [bx+si],al
000001EE  0000              add [bx+si],al
000001F0  0000              add [bx+si],al
000001F2  0000              add [bx+si],al
000001F4  0000              add [bx+si],al
000001F6  0000              add [bx+si],al
000001F8  0000              add [bx+si],al
000001FA  0000              add [bx+si],al
000001FC  0000              add [bx+si],al
000001FE  55                push bp
000001FF  AA                stosb