목차
제0장 들어가기 = 29
각 장의 요약 = 32
제1장 하드웨어를 주무르기 위한 기초 = 37
1. 하드웨어의 기초 = 39
1.1 하드웨어를 주무르는 프로그래밍이란? = 39
1.2 PC의 구조 = 40
1.3 프로세서의 역할 = 41
1) 프로세서의 기본적인 기능= 41
2) 프로세서의 구성요소 = 42
3) 인터럽트 = 42
4) 프로세서와 외부와의 통신 = 43
5) 프로세서의 종류 = 43
8086/8088 = 44
80286 = 44
80386 = 44
80486 = 45
펜티엄(Pentium) = 46
P6 = 47
1.4 스택(Stack)이란? = 47
1.5 레지스터(Register)의 종류 및 원리 = 49
1) 범용 레지스터 = 49
2) 세그먼트(Segment) 레지스터 = 50
3) 플래그(Flag) 레지스터 = 52
1.6 포트(Port) = 53
1.7 인터럽트(Interrupt)에 대해 = 55
1) 인터럽트란? = 55
2) 인터럽트 번호 = 55
3) 인터럽트의 종류 = 56
4) 인터럽트의 작동 원리 = 56
5) 인터럽트 호출 = 58
6) 인터럽트의 채널 = 58
1.8 하드웨어에 접근하는 3가지 방법 = 60
1) ROM-BIOS 인터럽트 = 61
2) DOS 인터럽트 = 61
3) 하드웨어에 접근하는 방법의 선택 = 61
2. 하드웨어를 주무르는 C 함수 = 62
2.1 프로그램시 사용하는 레지스터의 종류 = 62
2.2 int86 함수 = 63
2.3 int86x 함수 = 65
2.4 outport, outportb 함수 = 67
2.5 peek, peekb 함수 = 69
2.6 FP_SEG, FP_OFF 매크로 = 71
2.7 MK_FP 매크로 = 73
2.8 enable, disable 함수 = 74
제2장 하드웨어 주무르기 = 75
1. ROM 버전 확인하기 = 77
2. 하드웨어 존재 유무 파악하기 = 81
3. DOS 버전을 확인하자 = 86
4. 비디오 어댑터 종류 판별하기 = 87
1) VGA,MCGA = 88
2) EGA = 88
3) CGA = 89
4) MDA, HGC = 89
5. 플로피 디스크 드라이브 정보 얻기 = 91
6. 하드 디스크 드라이브 정보 얻기 = 94
7. 키보드 종류에 대한 정보 얻기 = 97
8. 마우스를 분석하자 = 98
9. 메모리 정보 얻기 = 101
10. 익스팬디드 메모리(Expanded Memory)를 점검하자 = 103
익스팬디드 메모리 드라이버 확인 = 103
익스팬디드 메모리 드라이버의 버전 = 103
익스팬디드 메모리의 크기 = 104
11. 익스텐디드 메모리(Extended Memory)를 점검하자 = 106
12. 버스(ISA, PS/2, EISA) 방식 판별하기 = 108
13. CPU 종류 판별하기 = 110
1) 8086 = 110
2) 80286 = 110
3) 80386 = 111
14. 제2장에서 사용한 함수 정리 = 114
1) 인스톨 여부를 물어 보는 함수 = 114
2) 개수를 물어 보는 함수 = 114
3) 하드웨어의 종류를 물어 보는 함수 = 114
4) 하드웨어 정보를 물어 보는 함수 = 114
실습문제 = 115
제3장 키보드 주무르기 = 117
1. 들어가기 전에 = 119
1.1 키보드의 종류 = 120
1.2 키보드 입력에서 화면 출력까지 = 121
1) 키보드에서 키를 누름 = 121
2) 하드웨어 인터럽트 9H 발생 = 122
3) 스캔 코드의 해석 = 122
4) 키보드 버퍼에 저장 = 123
5) 키보드 버퍼에서 가져오기 = 123
2. 키보드를 주무르는 함수 만들기 = 130
2.1 키보드 버퍼 청소하기 = 130
2.2 키보드 버퍼에 키 코드가 있는지 확인하기 = 132
2.3 키보드 버퍼에 키 코드를 넣기 = 134
2.4 시프트키와 토글 키들의 상태를 체크하는 함수 = 136
2.5 토글키 On/Off 시키기 = 142
2.6 키보드로부터 스캔코드와 ASCII 코드 읽어내기 = 145
2.7 반복 입력 기능 제어하기 = 147
3. 각 컴파일러에서 제공하는 키보드 관련 함수들 = 149
3.1 kbhit 함수 = 149
3.2 getch, getche, getchar 함수 = 149
3.3 scanf 와 gets 함수 = 152
4. 키보드 테크닉 = 153
4.1 Ctrl-Break 처리하기 = 153
Ctrl-Break 인터럽트 핸들러의 수정 = 153
Ctrl-Break 플래그의 세팅 = 155
4.2 핫키 입력시 램 상주 프로그램 작동하기 = 159
램 상주 프로그램이 동작할 수 있는지 체크 = 159
램 상주 여부 체크 = 160
키 입력 체크 = 161
4.3 여러 개의 키를 동시에 받아들이는 방법 = 165
키보드 인터럽트 9H 재정의 = 165
키보드 포트를 사용한 입력 = 166
정리 = 166
4.4 입력된 코드 구별하기 = 168
4.5 암호 처리하기 = 170
5. 제3장에서 만든 함수 정리 = 171
1) 키보드 버퍼에 관한 함수 = 171
2) 토글키 상태에 관한 함수 = 171
3) 시프트키 상태에 관한 함수 = 171
4) 키 값을 읽는 함수 = 171
5) 키입력 속도에 관한 함수 = 171
6) Ctrl-Break 플래그에 관한 함수 = 171
실습문제 = 172
ROM-BIOS에서 제공하는 키보드 서비스 = 173
제4장 마우스 주무르기 = 175
1. 들어가기 전에 = 177
1.1 마우스란? = 177
1.2 마우스의 종류 = 178
1.3 마우스 디바이스 드라이버의 기능 = 179
2. 마우스를 주무르는 함수 만들기 = 181
2.1 마우스 설치 여부 알아내기 = 181
2.2 마우스 On/Off 시키기 = 184
2.3 마우스 위치와 상태 추적하기 = 186
2.4 마우스 작동 정보 알아내기 = 190
2.5 마우스 작동 범위 정하기 = 193
2.6 마우스를 화면에서 안보이게 = 195
2.7 마우스 감정 조절하기 = 196
2.8 마우스가 움직인 거리 구하기 = 198
2.9 마우스 커서의 모양 만들기(텍스트 모드에서) = 200
하드웨어 마우스 커서 = 200
소프트웨어 마우스 커서 = 201
2.10 마우스 커서의 모양 만들기(그래픽 모드에서) = 204
2.11 실행 중에도 마우스를 마음대로 = 210
2.12 마우스 확장 이벤트 핸들러 함수 = 212
3. 마우스 테크닉 = 214
3.1 마우스 이벤트 핸들러 함수를 사용한 프로그램 = 214
3.2 클릭, 더블 클릭, 드래그 구분하기 = 219
4. 제4장에서 사용한 함수 정리 = 225
1) 마우스 초기화에 관한 함수 = 225
2) 마우스를 나타나게 하는 함수 = 225
3) 마우스 위치와 버튼 상태에 관한 함수 = 225
4) 마우스 존재 영역에 관한 함수 = 225
5) 마우스 감도에 관한 함수 = 225
6) 마우스 커서 모양에 관한 함수 = 225
7) 마우스 이벤트 핸들러에 관한 함수 = 226
실습문제 = 226
제5장 텍스트 모드 프로그래밍 = 227
1. 들어가기 전에 = 229
1.1 모니터와 비디오 카드 사이의 관계 = 229
1.2 비디오 카드의 종류 = 230
1) MDA(Monochrome Display Adapter) = 230
2) CGA(Color Graphics Adapter) = 230
3) HGC(Herculus Graphics Card) = 231
4) EGA(Enhaced Graphics Adapter) = 231
5) VGA(Video Graphics Array) = 231
6) 슈퍼 VGA(Super VGA) = 231
1.3 비디오 모드에 관하여 = 232
텍스트 모드 = 232
그래픽 모드 = 232
1.4 비디오 메모리에 대하여 = 234
1.5 비디오 페이지의 원리 = 235
1.6 텍스트 모드의 원리 = 236
1) 비디오 메모리 =236
비디오 메모리를 직접 접근 = 236
비디오 메모리의 구조 = 237
비디오 메모리의 주소 계산 = 237
2) 속성 정보 = 238
2. 텍스트 모드 함수 만들기 = 241
2.1 비디오 모드 정보 알아내기 = 241
2.2 모니터상의 테두리색 만들기 = 243
2.3 커서 모양 만들기 = 244
2.4 커서 On/Off 시키기 = 247
2.5 비디오 페이지 바꾸기 = 248
2.6 비디오 메모리에 직접 출력하기 = 250
2.7 화면 상하로 스크롤하기 = 254
2.8 화면 좌우로 스크롤하기 = 257
2.9 수평선과 수직선 긋기 = 260
2.10 박스 그리기 = 262
2.11 한글/영문 모드 체크하기 = 265
2.12 한글/영문 모드 만들기 = 266
2.13 특정 글자의 한글/영문 여부 판별하기 = 268
3. 텍스트 모드 테크닉 = 271
3.1 비디오 해상도 조절하기 = 271
3.2 화면 좌우로 갈라지게 하기 = 273
3.3 윈도우 띄우기 = 277
4. 제5장에서 사용한 함수 정리 = 285
1) 비디오 모드와 페이지에 관한 함수 = 285
2) 모니터 테두리에 관한 함수 = 285
3) 커서에 관한 함수 = 285
4) 텍스트 출력에 관한 함수 = 285
5) 스크롤에 관한 함수 = 285
6) 선 그리는 함수 = 285
7) 한글에 관한 함수 = 286
실습문제 = 286
ROM-BIOS에서 제공하는 텍스트 모드 서비스들 = 287
제6장 그래픽 모드 프로그래밍 = 297
1. 허큘리스와 VGA 카드를 중심으로 = 299
1.1 허큘리스, VGA, 슈퍼 VGA = 299
1.2 그래픽 프로그램 만들기 = 300
2. 볼랜드 C++에서 제공하는 그래픽 함수들 = 301
2.1 그래픽 초기화 함수 = 302
2.2 그래픽 화면 조절 함수 = 308
2.3 칼라 조절 함수 = 313
2.4 그림 그리는 함수 = 317
1) 화면상의 위치에 관한 함수 = 317
2) 픽셀 함수 = 318
3) 선 함수 = 318
4) 다각형 함수 = 320
5) 원 함수 = 321
6) 채우기 함수 = 323
7) 이미지 함수 = 325
8) 텍스트 출력 함수 = 326
9) 그래픽 종횡비 함수 = 329
3. 허큘리스 카드를 건드리는 함수 = 339
3.1 허큘리스 카드의 구조 = 339
3.2 픽셀 찍기/픽셀 읽기 = 341
3.3 선 그리기 = 344
3.4 원 그리기 = 348
4. VGA 카드를 건드리는 함수 = 351
4.1 VGA 카드의 구조 = 351
1) VGA 카드의 메모리 구조 = 351
래취 레지스터 = 352
2) VGA 카드의 레지스터 = 352
시퀀서의 레지스터 = 353
그래픽 컨트롤러의 레지스터 = 354
3) 칼라 만들기 = 357
4) VGA의 읽기 모드와 쓰기 모드 = 358
읽기 모드0 = 358
읽기 모드1 = 358
쓰기 모드0 = 360
쓰기 모드1 = 361
쓰기 모드2 = 361
5) VGA의 비디오 메모리 주소의 계산 = 362
4.2 픽셀 찍기 = 362
1) 쓰기 모드0의 플레인 쓰기 방식 이용 = 363
2) 쓰기 모드0의 셋/리셋 방식 이용 = 366
3) 쓰기 모드2의 Packed Pixel 방식 이용 = 368
4.3 픽셀 일기 = 372
4.4 선 그리기 = 375
4.5 원 그리기 = 380
5. 그래픽 모드 테크닉 = 384
5.1 애니메이션 만들기 = 384
5.2 3차원 박스 만들기 = 388
6. 슈퍼 VGA 카드를 중심으로 = 391
6.1 슈퍼 VGA에 대하여 = 391
6.2 슈퍼 VGA에서 지원하는 모드와 메모리 = 392
6.3 슈퍼 VGA의 뱅크 = 393
7. 각종 슈퍼 VGA 카드의 제어 방법 = 394
7.1 Tseng ET3000/ET4000 = 395
1) Tseng ET3000/ET4000에 대하여 = 395
2) Tseng ET3000/T4000 카드를 식별하는 함수 = 396
3) Tseng ET3000/ET4000 카드의 뱅크를 선택하는 함수 = 399
4) Tseng ET3000/T4000 카드 256칼라에서 점찍는 함수 = 401
7.2 ATI VGA Wonder = 407
1) ATI VGA Wonder에 대하여 = 407
2) ATI VGA Wonder 카드를 식별하는 함수 = 408
3) ATI VGA Wonder 카드의 뱅크를 선택하는 함수 = 410
4) ATI VGA Wonder 카드 256 칼라에서 점찍는 함수 = 411
7.3 Trident TVGA = 415
1) Trident TVGA에 대하여 = 415
2) Trident TVGA 카드를 식별하는 함수 = 416
3) Trident TVGA 카드의 뱅크를 선택하는 함수 = 417
8. 제6장에서 사용한 함수 정리 = 418
1) 점찍는 함수 = 418
2) 선그리는 함수 = 419
3) 원그리는 함수 = 419
4) 3차원 박스를 그리는 함수 = 419
5) Tseng ET3000/ET4000을 위한 함수 = 419
6) ATI VGA Wonder를 위한 함수 = 419
7) Trident TVGA를 위한 함수 = 419
제7장 메모리 주무르기 = 421
1. 들어가기 전에 = 423
1.1 메모리 구조와 원리 = 423
1) 세그먼트 기법 = 423
2) 286의 메모리 = 424
3) 386과 486의 메모리 = 425
4) 메모리 구조 = 425
5) 상위 메모리와 하이 메모리 = 427
1.2 익스팬디드 메모리의 원리 = 428
1.3 익스팬디드 메모리의 원리 = 430
1.4 볼랜드 C++의 메모리 모델 = 431
1) Tiny 모델 = 432
2) Small 모델 = 433
3) Medium 모델 = 434
4) Compact 모델 = 435
5) Large 모델 = 436
6) Huge 모델 = 437
2. 익스펜디드 메모리를 주무르는 함수 만들기 = 438
2.1 페이지 프레임의 어드레스 알아내기 = 438
2.2 사용 가능한 페이지 수 구하기 = 440
2.3 페이지 할당하기 = 443
2.4 핸들 다루기 = 445
2.5 페이지 매핑하기 = 448
물리적 페이지와 논리적 페이지 = 448
인터럽트 호출 = 449
2.6 페이지 해제하기 = 451
3. 익스텐디드 메모리를 주무르는 함수 만들기 = 453
3.1 메모리 관리기(XMM)의 존재 확인하기 = 453
3.2 XMM 함수의 어드레스 알아내기 = 454
3.3 XMS의 버전 알아내기 = 455
3.4 현재 사용 가능한 메모리 조사하기 = 457
3.5 메모리 할당하기 = 459
3.6 할당된 메모리 해제하기 = 460
3.7 할당된 메모리 Lock 시키기 = 462
3.8 할당된 메모리 Unlock 시키기 = 463
3.9 할당된 메모리를 옮기기 = 464
4. 메모리 테크닉 = 469
4.1 익스팬디드 메모리를 이용한 프로그램 = 469
4.2 익스텐디드 메모리 이용한 프로그램 = 474
5. 제7장에서 사용한 함수 정리 = 479
1) 익스팬디드 메모리에 관한 함수 = 479
2) 익스텐디드 메모리에 관한 함수 = 479
실습문제 = 480
확장 메모리에서 사용할 수 있는 기능들 = 480
1. 익스팬디드 메모리(Expanded Memory) = 481
2. 익스텐디드 메모리(Extended Memory) = 494
제8장 디스크 드라이브 주무르기 = 499
1. 들어가기 전에 = 501
1.1 디스크의 물리적인 구조 = 501
1) 면(side) = 501
2) 트랙(track) = 501
3) 섹터(sector) = 502
1.2 DOS 에서의 본 디스크 구조 = 503
1) 부트 레코드 = 503
2) FAT(File Allocation Table) = 503
3) 루트 디렉토리 = 505
4) 데이터 영역 = 506
1.3 하드 디스크의 분할 = 506
1.4 디스크의 논리적 구조 = 507
2. 디스크를 주무르기 위한 함수 만들기 = 508
2.1 부팅 드라이브 알아내기 = 508
2.2 디폴트 드라이브 알아내고 설정하기 = 512
2.3 볼륨명 설정하기 = 512
DTA(데이터 전송 영역) = 512
FCB = 513
2.4 디스크에 남아 있는 용량 알아내기 = 518
2.5 시리얼 번호 알아내기 = 520
3. 디렉토리와 파일을 주무르는 함수 만들기 = 522
3.1 디렉토리 읽기 = 522
3.2 디렉토리 변경하기 = 524
3.3 시간과 날짜 설정하기 = 526
3.4 디렉토리 처리하는 함수 정리 = 529
3.5 파일 속성 설정하기 = 531
3.6 파일 복사하기 = 534
파일 읽기와 쓰기 함수-open, read, write, close = 537
3.7 파일 삭제하기 = 538
3.8 파일 이동하기 = 540
3.9 파일 비교하기 = 541
파일 읽기와 쓰기 함수-fopen, fgets, fclose = 544
3.10 파일 내용 보기 = 546
4. 디스크 드라이브 테크닉 = 551
4.1 부트 레코드 정보 알아내기 = 551
4.2 하드 디스크의 파티션 테이블 읽기 = 554
4.3 논리적 섹터 번호 구하기 = 559
4.4 디스크 포맷하기 = 561
DOS 포맷 = 561
Quick 포맷 = 562
5. 제8장에서 사용한 함수 정리 = 573
1) 부팅 디스크를 알아내는 함수 = 573
2) 디폴트 드라이브에 관한 함수 = 573
3) 디스크 볼륨에 관한 함수 = 573
4) 디스크 용량에 관한 함수 = 573
5) 디스크 시리얼 번호에 관한 함수 = 573
6) 파일 속성에 관한 함수 = 573
7) 파일 관리에 관한 함수 = 573
8) 디스크 포맷에 관한 함수 = 573
실습문제 = 574
디스크 관련 인터럽트 서비스 = 574
1. 디스크 관련 인터럽트 = 574
2. 디렉토리 관련 인터럽트 = 576
3. 파일 관련 인터럽트 = 578
제9장 타이머와 스피커 주무르기 = 587
1. 들어가기 전에 = 589
1.1 타이머(Timer)의 개념 = 589
1) 실시간 시계(Real-time Clock) = 589
2) 8253 타이머 칩 = 589
3) 타이머 인터럽트 = 590
4) 1일 시간 카운트 = 590
1.2 타이머 칩의 구성 = 591
1) 타이머 칩의 입출력 = 592
2) 타이머 칩의 구조 = 594
1.3 스피커의 원리 = 594
1) 8255 주변장치 인터페이스 = 594
2) 스피커에서 소리가 날 때까지 = 595
3) 스피커를 구동하는 프로그램의 알고리즘 = 596
2. 타이머와 스피커를 주무르는 함수 만들기 = 597
2.1 시간 알아내기 = 597
2.2 날짜 알아내기 = 599
2.3 클럭 카운트 알아내기 = 602
2.4 프로그램 실행을 잠시 중지시키기 = 604
2.5 스피커 On/Off 하기 = 605
2.6 주파수 조절하기 = 606
2.7 소리 만들기 = 607
3. 스피커 테크닉 = 610
3.1 다양한 음향 효과 만들기 = 610
1) 사이렌 소리 = 610
2) 레이저 소리 = 610
3) 잡음 소리 = 610
4) 클릭 소리 = 611
3.2 백그라운드 음향 만들기 = 614
3.3 피아노 건반 프로그램 = 617
4. 제9장에서 사용한 함수 정리 = 620
1) 시간에 관한 함수 = 620
2) 스피커에 관한 함수 = 620
제10장 사운드 카드 주무르기 = 621
1. 들어가기 전에 = 623
1.1. 사운드 카드의 탄생 = 623
1.2 소리의 3대 요소 = 624
1) 소리의 주파수⇒소리의 크기 = 624
2) 소리의 진폭⇒소리의 세기 = 625
3) 소리의 음색⇒소리의 구분 = 625
1.3 주파수 변조에 관하여 = 626
사운드 카드의 주파수 변조 = 626
엔벨롭 = 627
1.4 YM3812 칩에 접근하는 방법 = 628
1.5 FM3812 칩의 레지스터 = 629
2. 사운드 카드를 주무르는 함수 만들기 = 630
2.1 사운드 카드에 직접 접근하는 함수 = 630
1) FM3812의 레지스터에 값을 보내는 함수 = 630
2) 파형 선택을 허용하는 함수 = 631
3) FM3812의 타이머의 조절 = 632
4) FM3812 칩의 모드 설정 = 633
5) 음색을 결정하는 갖가지 변수를 설정하는 함수Ⅰ = 634
6) 음색을 결정하는 갖가지 변수 설정하는 함수Ⅱ = 635
7) 음색을 결정하는 갖가지 변수를 설정하는 함수Ⅲ = 636
8) 음색을 결정하는 갖가지 변수를 설정하는 함수Ⅳ = 637
9) 음향 효과의 깊이와 모드의 선택 = 638
10) 피드백과 알고리즘의 선택을 선택사는 함수 = 639
11) 파형 모양을 선택하는 함수 = 640
12) 실제 소리를 나오도록 만드는 함수 = 641
2.2 사운드 카드에 직접 접근하는 프로그램 = 642
1) 사운드 카드의 설치 여부 체크하기 = 642
2) 옥소리 카드의 설치 여부를 체크하는 프로그램 = 644
3) 피아노 건반 프로그램 = 646
3. 사운드 드라이버를 통해 사운드 카드 주무르기 = 656
3.1 사운드 드라이버를 사용하는 방법 = 656
3.2 사운드 드라이버가 제공하는 기능= 660
1) 드라이버의 초기화(함수0) = 660
2) 드라이버 인터럽트 해제(함수1) = 660
3) 연주 시작 시간 설정(함수2) = 661
4) 연주 상태 설정(함수3) = 661
5) 연주 상태 알아내기(함수4) = 662
6) 소리 끄기(함수5) = 662
7) 동작 모드 설정(함수6) = 663
8) 동작 모드 알아내기(함수7) = 663
9) 볼륨 설정(함수8) = 663
10) 템포 설정(함수9) = 664
11) 조옮김값 설정(함수10) = 664
12) 조옮김값 알아내기(함수11) = 665
13) 보이스 설정(함수12) = 665
14) 보이스 알아내기(함수13) = 666
15) 음표, 쉼표 입력(함수14) = 666
16) 음표 입력(함수15) = 667
17) 음색 설정(함수16) = 667
18) 음의 높이 설정(함수17) = 668
19) TPB 설정(함수18) = 668
20) 음표 연주 시작(함수19) = 669
21) 음표 연주 끝(함수 20) = 669
22) 직접 음색 설정(함수21) = 669
23) 음의 높이 변화 영역 설정(함수22) = 670
24) 파형 선택 여부 설정(함수23) = 670
4. ROL 파일을 연주하는 프로그램 = 671
4.1 뱅크 파일의 구조 = 671
1) 뱅크 파일의 전체적인 구조 = 671
2) 뱅크 파일 헤더의 구조 = 672
3) 악기 이름 데이터의 구조 = 673
4) 악기 음색 데이터의 구조 = 674
4.2 ROL 파일의 구조 = 675
1) ROL 파일의 전체적인 구조 = 675
(1) ROL 파일의 헤더와 전역 데이터 = 676
(2) 참조 데이터의 구조 = 677
(3) 템포 데이터의 구조 = 677
(4) 음악 데이터 = 678
음표(Note) 정보 = 678
악기(Timbre) 정보 = 679
(5) 볼륨(Volume) 정보 = 680
(6) 피치 정보 = 680
4.3 ROL 파일을 연주하는 프로그램 = 681
1) 사운드 드라이버 함수 호출의 일반화 = 681
2) ROL 파일을 연주하는 프로그램 = 684
6. 제10장에서 사용한 함수 정리 = 699
1) 사운드 카드에 직접 접근하는 함수 = 699
2) 사운드 드라이버를 통해 접근하는 함수 = 699
3) ROL 파일을 연주를 위한 함수 = 700
제11장 CD-ROM 주무르기 = 701
1. 들어가기 전에 = 703
1.1 CD-ROM의 중요성 = 703
1.2 CD-ROM의 역사 = 704
1.3 CD-ROM의 구조 = 705
액세스 타임(Access Time) = 705
데이터 전송 속도 = 706
2. CD-ROM 속으로 = 706
2.1 CD-ROM의 물리적인 포맷 = 706
2.2 CD-ROM의 논리적인 포맷 = 707
1) 볼륨과 볼륨 셋트 = 707
2) 논리적 섹터 = 708
3) 논리적 블록 = 708
4) 익스텐트 = 709
2.3 CD-ROM에서의 파일과 디렉토리 = 709
1) 파일과 디렉토리의 구조 = 709
2) 파일과 디렉토리의 날짜와 시간 = 710
3) 파일 플래그 = 711
4) 확장 속성 레코드 = 711
2.4 패스 테이블의 원리 = 712
2.5 볼륨의 구조 = 713
1) 시스템 영역 = 713
2) 데이터 영역 = 713
PVD(Primary Volume Descriptor) = 714
VDST(Volume Descriptor Set Terminator) = 716
3. MSCDEX에서 제공하는 기능 = 716
3.1 MSCDEX의 역할 = 716
3.2 MSCDEX에서 제공하는 기능 = 719
1) CD-ROM 드라이브 수 알아내기 = 719
2) CD-ROM 드라이버 정보 알아내기 = 721
3) Copyright 파일 이름 알아내기 = 723
4) Abstract 파일 이름 알아내기 = 725
5) Bibliographic 파일 이름 알아내기 = 727
6) 볼륨 디스크립터 읽기 = 729
7) CD-ROM 직접 읽기 = 733
8) CD-ROM 직접 쓰기 = 734
9) CD-ROM 드라이브 검사 = 736
10) MSCDEX 버전 알아내기 = 738
11) CD-ROM 드라이버 이름 알아내기 = 739
12) 볼륨 디스크립터의 선택 = 741
13) 디렉토리 엔트리 가져오기 = 742
14) 디바이스 드라이버의 기능 호출 = 745
4. CD-ROM 디바이스 드라이버에서 제공하는 기능 = 746
4.1 CD-ROM 디바이스 드라이버의 헤더 = 746
4.2 CD-ROM 드라이버 기능을 호출하는 방법 = 747
4.3 초기화 기능(INIT) = 751
4.4 직접 읽기 기능(IOCTL INPUT) = 751
1) 디바이스 헤더의 주소 알아내기(부함수0) = 752
2) 헤드의 위치 알아내기(부함수1) = 753
3) 에러 정보 알아내기(부함수3) = 754
4) 오디오 채널 정보 알아내기(부함수4) = 754
5) 드라이브 정보 알아내기(부함수5) = 755
6) 드라이브 상태 정보 알아내기(부함수6) = 756
7) 섹터 크기 알아내기(부함수7) = 757
8) 볼륨 크기 알아내기(부함수8) = 758
9) 디스크 교환 정보 알아내기(부함수9) = 759
10) 오디오 디스크 정보 알아내기(부함수10) = 760
11) 오디오 트랙 정보 알아내기(부함수11) = 760
12) 오디오 Q 채널 정보 알아내기(부함수12) = 761
13) 오디오 Sub 채널 정보 알아내기(부함수13) = 762
14) UPC 알아내기(부함수14) = 763
15) 오디오 상태 알아내기(부함수15) = 764
4.5 입력 버퍼 지우기(INPUT FLUSH) = 768
4.6 출력 버퍼 비우기(OUTPUT FLUSH) = 768
4.7 직접 쓰기 기능(IOCTL OUTPUT) = 769
1) 디스크 배출(부함수0) = 770
2) 드라이브 문을 열고 잠그기(부함수1) = 770
3) 드라이브 리셋(부함수2) = 771
4) 오디오 채널 조절(부함수3) = 772
5) 디바이스에 직접 쓰기(부함수4) = 773
6) 드라이브 문 닫기(부함수5) = 773
4.8 디바이스 열기(DEVICE OPEN) = 777
4.9 디바이스 닫기(DEVICE CLOSE) = 777
4.10 CD-ROM에서 섹터 읽기(READ LONG) = 778
4.11 CD-ROM에서 미리 섹터 읽기(READ LONG PREFETCH) = 779
4.12 섹터 검색(SEEK) = 780
4.13 오디오 연주(PLAY AUDIO) = 780
4.14 오디오 연주 중단(STOP AUDIO) = 781
4.15 오디오 연주 재개(RESUME AUDIO) = 782
4.16 CD-ROM 섹터에 쓰기(WRITE LONG) = 786
4.17 CD-ROM 섹터에 검사하면서 쓰기(WRITE LONG VERIFY) = 787
5. 제11장에서 사용한 함수 정리 = 788
1) MSCDEX에서 제공하는 기능으로 만든 함수 = 788
2) CD-ROM 디바이스 드라이버에서 제공하는 기능으로 만든 함수 = 788
실습문제 = 789
제12장 모뎀 주무르기 = 791
1. 들어가기 전에 = 793
1.1 모뎀에 대하여 = 793
1.2 직렬 포트 인터페이스 = 794
1) 직렬 인터페이스와 병렬 인터페이스 = 794
2) 직렬 인터페이스 규약-RS-232C = 794
보드율(Baud Rate) = 795
시작 비트와 정지 비트 = 795
패리티 비트 = 795
1.3 UART = 796
1) 전송 대기 레지스터(THR) = 797
2) 수신 버퍼 레지스터(RBR) = 798
3) 인터럽트 허용 레지스터(IER) = 798
4) 인터럽트 인식 레지스터(IIR) = 799
5) 라인 제어 레지스터(LCR) = 800
6) 모뎀 제어 레지스터(MCR) = 802
7) 라인 상태 레지스터(LSR) = 803
8) 모뎀 상태 레지스터(MSR) = 804
2. ROM-BIOS 인터럽트를 이용한 모뎀 제어 = 805
2.1 직렬 포트를 초기화하는 함수 = 805
2.2 직렬 포트에 한 문자 보내기 = 809
2.3 직렬 포트에서 한 문자 가져오기 = 810
2.4 직렬 포트 상태 읽기 = 811
2.5 간단한 통신 에뮬레이터 만들기 = 812
1) 모뎀 초기화시 주의할 점 = 812
2) 데이터 수신시 체크할 내용 = 813
3) 데이터 전송시 체크할 내용 = 813
4) ROM-BIOS로 통신 에뮬레이터를 만들었을 때의 문제점 = 814
3. 모뎀을 주무르기 위한 함수 만들기 = 817
3.1 모뎀 제어를 위해 필요한 지식 = 817
1) 하드웨어 인터럽트에 대해 = 817
2) 인터럽트 마스크 레지스터 = 819
3) 인터럽트 핸들러에 대하여 = 819
3.2 직렬 포트를 초기화하기 = 820
3.3 모뎀을 사용하기 위한 초기화 = 823
1) UART 레지스터 초기화 = 823
2) 새로운 인터럽트 핸들러로 바꾸기 = 824
3) 인터럽트 마스크 레지스터의 셋팅 = 824
3.4 모뎀을 원상태로 복구하기 = 827
3.5 모뎀과 데이터 주고받기 = 828
3.6 간단한 통신 에뮬레이터 만들기 = 830
4. 모뎀 명령어 정리 = 839
4.1 모뎀 명령어란 무엇인가? = 839
4.2 모뎀 명령어 = 840
1) AT?(명령 반복 수행) = 840
2) ATA(즉시 응답) = 840
3) ATBn(통신 규격 선택) = 840
4) AT&Cn(전송 캐리어(반송파) 제어) = 840
5) ATDn(전화 걸기) = 841
6) ATEn(에코 제어) = 841
7) ATFn(온라인 에코 제어) = 841
8) ATHn(전화 후크 제어) = 842
9) ATIn(모뎀 체크) = 842
10) ATKn(버퍼 제어) = 842
11) ATLn(스피커 볼륨 제어) = 843
12) ATMn(스피커 제어) = 843
13) ATOn(온라인 명령) = 843
14) ATQn(결과 코드 제어) = 844
15) ATSn〓x(레지스터에 데이터 저장) = 844
16) ATSn?(레지스터 값 읽기) = 844
17) ATTn(모뎀 검사) = 844
18) ATVn(결과 코드 형태 제어) = 845
19) ATXn(확장 결과 코드 선택) = 845
20) ATYn(긴 스페이스 신호 제어) = 846
21) ATZn(모뎀의 초기화) = 846
22) AT&F(공장 출하 상태로 복구) = 846
23) AT&V0(프로파일 보이기) = 846
5. 제12장에서 사용한 함수 정리 = 847
1) ROM-BIOS를 이용한 함수 = 847
2) 모뎀을 직접 제어하는 함수 = 847
제13장 프린터 주무르기 = 851
1. 들어가기 전에 = 851
1.1 프린터에 관하여 = 851
1.2 병렬 포트에 관하여 = 851
1) 데이터 출력 레지스터 = 852
2) 상태 레지스터 = 853
3) 제어 레지스터 = 853
1.3 제어 코드에 관하여 = 854
2. 앱슨 계열 프린터를 다루는 함수 만들기 = 855
2.1 초기화시키기 = 855
1) biosprint = 855
2) _bios_printer = 856
2.2 프린터 상태 조사하기 = 857
2.3 프린터에 문자 출력하기 = 860
2.4 프린터의 헤드 조절하기 = 862
2.5 프린터의 폰트 조절하기 = 866
3. 레이저젯 계열 프린터를 다루는 함수 만들기 = 872
3.1 PCL에 대해 = 872
3.2 레이저젯 계열 프린터를 여는 함수 = 873
3.3 프린터 초기화시키기 = 875
3.4 프린터의 페이지 제어하기 = 878
3.5 프린터의 폰트 제어하기 = 881
3.6 프린터에서 그래픽 처리하기 = 882
1) 내장 그래픽 = 883
2) 래스터 그래픽 = 887
4. 한 걸음 더 = 889
4.1 타자기 프로그램 만들기 = 889
4.2 텍스트 화면 하드 카피(Hard copy) = 893
4.3 그래픽 화면 하드 카피 = 899
5. 제13장에서 사용한 함수 정리 = 910
1) 엡슨 계열 프린터 초기화에 관한 함수 = 910
2) 엡슨 계열 프린터 상태에 관한 함수 = 910
3) 엡슨 계열 프린터 출력에 관한 함수 = 910
4) 엡슨 계열 프린터 헤드 조정에 관한 함수 = 910
5) 엡슨 계열 프린트되는 글자 속성에 관한 함수 = 910
6) 레이저젯을 제어하기 위한 함수 = 910
실습문제 = 911
제14장 실습문제 소스들 = 913
1. 제2장 실습문제 = 915
2. 제3장 실습문제 = 926
3. 제4장 실습문제 = 930
4. 제5장 실습문제 = 936
5. 제7장 실습문제 = 944
6. 제8장 실습문제 = 946
7. 제11장 실습문제 = 948
8. 제13장 실습문제 = 955