IBM 베이직

[섬네일|150px|[IBM PC 메인보드에 있는 5개의 8KB ROM DIP 칩과 빈 8KB ROM 확장 소켓. 4개의 칩은 카세트 베이직을 담고 있으며, 1개는 바이오스를 담고 있다.]]
**IBM 퍼스널 컴퓨터 베이직**은 일반적으로 **IBM 베이직**(IBM BASIC)으로 축약되며, IBM이 1981년 IBM 퍼스널 컴퓨터 모델 5150 (IBM PC)과 함께 처음 출시한 프로그래밍 언어이다. IBM은 마이크로소프트로부터 라이선스를 받아 PC와 PCjr용 마이크로소프트 베이직 인터프리터의 네 가지 버전을 출시했다. 이들은 카세트 베이직, 디스크 베이직, 어드밴스드 베이직 (BASICA), 그리고 카트리지 베이직으로 알려져 있다. 디스크 베이직과 어드밴스드 베이직 버전은 IBM PC DOS 4까지 IBM PC DOS에 포함되었다. ANSI 표준 베이직의 기능 외에도, IBM 버전은 IBM PC 제품군의 그래픽 및 사운드 하드웨어 지원을 제공했다. 전체 화면 편집기로 소스 코드를 입력할 수 있었고, 기본적인 프로그램 디버그를 위한 제한된 기능이 제공되었다. IBM은 또한 1982년 PC DOS 1.10 출시와 동시에 PC용 마이크로소프트 베이직 컴파일러 버전도 출시했다.

## 배경
IBM은 이미 자사 메인프레임용 베이직 버전을 가지고 있었음에도 불구하고 IBM 퍼스널 컴퓨터용 마이크로소프트 베이직을 라이선스했다. 돈 에스트리지는 "마이크로소프트 베이직은 전 세계적으로 수십만 명의 사용자를 보유하고 있었습니다. 어떻게 그에 대해 논쟁할 수 있겠습니까?"라고 말했다.

## IBM 카세트 베이직

IBM 카세트 베이직은 오리지널 IBM PC의 8KB 바이오스 ROM과는 별개로 32 킬로바이트 (KB)의 ROM으로 제공되었으며, 실행에 운영체제가 필요하지 않았다. 카세트 베이직은 플로피 디스크 드라이브가 설치되어 있지 않거나 부팅 코드가 전원 켤 때 부팅 가능한 플로피 디스크를 찾지 못할 경우 바이오스를 통해 INT 18h로 호출되는 기본 사용자 인터페이스를 제공했다. 카세트 베이직이라는 이름은 프로그램을 저장하고 데이터를 저장하는 데 플로피 디스크 대신 카세트 테이프를 사용했기 때문에 붙여졌다. 카세트 베이직은 오리지널 PC와 XT의 ROM과 PS/2 라인의 초기 모델에 내장되었다. 이는 IBM 카세트 테이프 인터페이스로만 프로그램을 로드하고 저장하는 것을 지원하는데, 이는 오리지널 모델 5150 이후의 모델에서는 사용할 수 없다. 5150의 보급형 버전은 16KB의 RAM만으로도 카세트 베이직을 실행하기에 충분했다. 그러나 카세트 베이직은 거의 사용되지 않았는데, 디스크 드라이브 없이 판매되는 PC가 거의 없었고, 대부분은 PC DOS와 디스크 베이직을 실행하기에 충분한 RAM을 갖추고 판매되었으며, 많은 PC는 어드밴스드 베이직도 실행할 수 있었다. 카세트 베이직에는 세 가지 버전이 있다: C1.00 (16-64K 메인보드를 가진 초기 IBM PC에서 발견됨), C1.10 (모든 후기 IBM PC, XT, AT 및 PS/2에서 발견됨), 그리고 C1.20 (PCjr에서 발견됨).

## IBM 디스크 베이직

IBM 디스크 베이직 (BASIC.COM)은 오리지널 IBM PC DOS에 포함되었다. 32KB 카세트 베이직 ROM을 사용했기 때문에, BASIC.COM은 콤팩 포터블과 같이 호환성이 높은 PC 클론에서도 실행되지 않았다. 디스크 베이직이라는 이름은 프로그램을 저장하고 데이터를 저장하는 데 카세트 테이프뿐만 아니라 플로피 디스크도 사용했기 때문에 붙여졌다. 디스크 기반 코드는 ROM에 상주하는 코드의 오류를 수정하고 플로피 디스크 및 직렬 포트 지원을 추가했다.

디스크 베이직은 버전 번호 앞에 문자 D가 붙는 것으로 식별할 수 있다. 디스크 지원과 카세트 베이직에는 없는 일부 기능을 추가하지만, BASICA의 확장된 사운드 또는 그래픽 기능은 포함하지 않는다. 디스크 베이직의 주요 목적은 48KB 메모리만 있는 IBM PC용 "경량" 버전으로, BASIC.COM은 사용자 코드에 약 23KB를 사용할 수 있었고, BASICA는 약 17KB만 사용할 수 있었다. 1986년까지 모든 신형 PC는 최소 256KB 메모리를 탑재했으며, DOS 3.00 이후 버전에서는 디스크 베이직이 배치 파일 호환성을 위해 BASICA.COM을 호출하는 작은 스텁으로 축소되었다. 이 모든 초과 RAM이 있더라도, 베이직은 사용자 프로그램에 대해 카세트 베이직, BASIC.COM, 또는 BASICA와 관계없이 약 61KB만 할당하고 관리했다.

## IBM 어드밴스드 베이직

IBM 어드밴스드 베이직 (BASICA.COM)은 오리지널 IBM PC DOS에도 포함되어 있었으며, 카세트 베이직의 ROM 상주 코드를 필요로 한다. 이 버전은 플로피 디스크 파일 액세스, 디스크에 프로그램 저장, PC 내장 스피커를 사용한 모노포닉 사운드, 픽셀을 설정하고 지우는 그래픽 기능, 선과 원을 그리는 유사 기능 및 색상 설정, 통신 및 조이스틱 누름에 대한 이벤트 처리와 같은 기능을 추가했다. BASICA는 ROM 베이직이 없기 때문에 비IBM 컴퓨터 (심지어 "100% 호환" 기계라고 불리는 것들)나 후기 IBM 모델에서는 실행되지 않는다.

BASICA 버전은 각 DOS 버전과 동일하며, v1.00부터 시작하여 v3.30으로 끝난다. BASICA의 초기 버전은 서브디렉토리를 지원하지 않으며, 일부 그래픽 명령은 약간 다르게 작동한다. 예를 들어, 화면 밖으로 벗어나는 선을 그리는 데 `LINE` 문이 사용되면, 베이직은 단순히 가장 가까운 인접 선과 교차시키지만, 베이직 2.x 이상에서는 선이 화면 밖으로 나가 교차하지 않는다. 베이직 1.x의 `PAINT` 명령은 지정된 좌표에서 채우기를 시작하여 위아래 방향으로 번갈아 가며 확장하는 반면, 베이직 2.x에서는 시작 좌표 아래의 모든 것을 채운 다음, 완료 후 그 위의 모든 것을 채운다. 베이직 1.x의 `PAINT` 명령은 또한 저장을 위해 시스템 스택을 사용하며 복잡한 영역을 채울 때 `OVERFLOW` 오류를 발생시킬 수 있다. 이를 해결하기 위해 `CLEAR` 문을 사용하여 베이직의 스택을 확장할 수 있다 (기본 크기는 128바이트). 베이직 2.x는 PAINTing 시 스택을 사용하지 않으므로 이 문제가 발생하지 않는다.

컴팩 베이직 1.13은 PC용 최초의 독립형 (카세트 베이직을 필요로 하지 않는) 베이직이었으며, IBM BASICA 1.00 및 1.10을 제외하고 FCB를 사용하고 교차 선이 있는 오리지널 LINE 문을 포함한 유일한 베이직 버전이었다 (컴팩 베이직 1.13의 `PAINT` 문은 모든 후기 BASICA/GW-BASIC 버전과 동일하게 작동한다: 새로운 채우기 알고리즘을 사용하며 스택을 사용하지 않는다).

초기 PC DOS 버전에는 PC의 기능을 시연하는 여러 샘플 베이직 프로그램이 포함되어 있었는데, DONKEY.BAS 게임도 그 중 하나였다.

마이크로소프트 GW-BASIC은 BASICA와 동일하며, 카세트 베이직 코드를 프로그램에 포함한다는 점을 제외하면, ROM에 카세트 베이직이 없는 비IBM 컴퓨터 및 후기 IBM 모델에서도 실행된다.

## IBM PCjr 카트리지 베이직
베이직 롬 카트리지 버전은 1984년에 출시된 IBM PCjr에서만 사용할 수 있었으며, 해당 기기에서 가능한 추가 그래픽 모드와 사운드 기능을 지원했다. 이는 어드밴스드 베이직의 상위 집합이다. 카트리지 베이직은 PCjr의 첫 128KB 메모리 내에서만 작동할 수 있었고 확장 RAM과는 작동하지 않았다. 즉, DEF SEG 함수를 사용하여 &H1FF0 이상의 메모리 세그먼트를 가리킬 수 없었다.

카트리지 베이직은 DOS 프롬프트에서 BASICA를 입력하여 활성화되었다. 반대로, IBM BASICA 버전 2.1 이상은 PCjr를 감지하면 실행을 거부했지만, 이 제한을 우회하도록 패치할 수 있었다.

## 작동
카세트 베이직은 부팅 가능한 디스크나 카트리지 없이 PC 또는 PCjr가 부팅될 때 로드되었다. 디스크 베이직과 어드밴스드 베이직은 DOS 명령어 프롬프트에서 해당 명령어 이름 (각각 BASIC 및 BASICA)을 입력할 때 로드되며 (카트리지 베이직을 활성화하는 PCjr 제외), 메모리 할당을 제어하는 일부 선택적 매개변수를 사용한다. 로드되면, 프로그램 버전 번호를 표시하는 시작 식별 메시지가 나타나고 전체 화면 텍스트 편집기가 시작된다 (오른쪽 이미지 참조). 기능 키에는 일반적인 명령이 할당되며 화면 하단에 표시된다. 프로그램을 로드하거나 저장하기 위해 명령어를 입력할 수 있으며, 직접 (즉시) 모드에서 표현식을 입력하고 실행할 수 있다. 입력 줄이 숫자로 시작하면, 언어 시스템은 다음 텍스트 줄을 프로그램 소스의 일부로 저장하여 프로그래머가 각 문 앞에 줄 번호를 사용하여 전체 프로그램을 한 줄씩 입력할 수 있도록 한다. 화면에 나열될 때, 줄은 줄 번호가 증가하는 순서로 표시된다. 커서 키를 사용하여 화면에 표시된 프로그램 소스 코드 줄로 커서를 이동하고 화면 텍스트를 덮어씀으로써 변경할 수 있다. 프로그램 소스는 토큰화된 형태로 내부에 저장되며, 이 형태에서는 예약어가 단일 바이트 토큰으로 대체되어 공간과 실행 시간을 절약한다. 프로그램은 압축된 토큰화된 형태로 저장하거나 선택적으로 DOS ASCII 텍스트 파일로 저장하여 다른 프로그램으로 보고 편집할 수 있다. 대부분의 다른 DOS 응용 프로그램과 마찬가지로, IBM 베이직은 텍스트 모드 프로그램이며 창, 아이콘, 마우스 지원 또는 잘라내기-붙여넣기 편집 기능이 없다.

## 유산
1983년에 출시된 GW-BASIC은 비IBM MS-DOS 컴퓨터와 함께 배포된 디스크 기반 마이크로소프트 제품으로, IBM 카세트 베이직이 없는 컴퓨터에서 BASICA의 모든 그래픽 모드와 기능을 지원한다.

현재는 단종된 MS-DOS 및 PC DOS 버전의 BASICA 후속작은 1991년에 출시된 QBasic이다. 이는 마이크로소프트 QuickBASIC 컴파일러의 간소화된 버전이다. QBasic은 인터프리터이며 소스 파일을 컴파일할 수 없는 반면, QuickBASIC은 프로그램을 .EXE 실행 파일 형식으로 컴파일하고 저장할 수 있다. QuickBASIC은 또한 일부 고급 언어 문과 함수 (주로 OS 인터페이스 및 저수준 기계어 프로그래밍과 관련됨)를 포함하고, 다중 모듈 프로그램을 지원하며, 고급 디버깅 기능을 포함하고 있는데, 이 모든 기능은 QBasic에는 없다.

## 각주

## 외부 링크
* BASIC 개발의 간략한 역사 www.phys.uu.nl/~bergmann/history.html (아카이브)
* PCE IBM PC 에뮬레이터—IBM 카세트 베이직 및 연결된 서드파티 카세트 드라이브가 있는 IBM 카세트 인터페이스를 에뮬레이트한다.
* POPBASIC 및 RUNBASIC IBM 카세트 베이직을 호출 및 복사한다.

분류:IBM 소프트웨어
분류:베이직 프로그래밍 언어 계열
분류:베이직 인터프리터
분류:마이크로소프트의 프로그래밍 언어
분류:X86 IBM 개인용 컴퓨터