MBASIC

**MBASIC**은 CP/M 운영 체제를 위한 베이직의 '''M'''icrosoft '''BASIC''' 구현이다. MBASIC은 마이크로소프트 최초의 제품 중 하나인 오리지널 알테어 베이직 인터프리터의 후손이다. MBASIC은 오스본 1 컴퓨터에 번들로 제공된 두 가지 버전의 베이직 중 하나였다. "MBASIC"이라는 이름은 BASIC 인터프리터의 디스크 파일 이름인 MBASIC.COM에서 유래했다. MBASIC은 이전 8비트 인터프리터 제품군인 마이크로소프트 베이직처럼 디지털 이큅먼트 코퍼레이션 PDP-10의 BASIC-PLUS에 크게 영향을 받았다.

## 환경
섬네일|당시 일반적인 단색 모니터에 표시된 Z80 CP/M 시스템에서 실행되는 MBasic 5.21
MBASIC 버전 5는 최소 28&nbsp;KB의 랜덤 액세스 메모리(RAM)와 하나 이상의 디스켓 드라이브가 있는 CP/M 시스템을 필요로 했다.

가정용 컴퓨터 제조업체가 컴퓨터의 특정 하드웨어 기능을 사용하도록 사용자 정의한 Microsoft BASIC-80 버전과 달리, MBASIC은 모든 입출력을 위해 CP/M 운영 체제 호출에만 의존했다. CP/M 콘솔(화면 및 키보드), 라인 프린터, 디스크 장치만 사용 가능했다.

사용자 정의되지 않은 형태의 MBASIC은 그래픽, 색상, 조이스틱, 마우스, 직렬 통신, 네트워킹, 사운드, 심지어 실시간 시계 기능도 없었다. MBASIC은 호스트 CP/M 운영 체제의 기능을 완전히 지원하지 않았다. 예를 들어, 디스켓에 파일을 구성하는 CP/M의 사용자 영역을 지원하지 않았다. CP/M 시스템은 일반적으로 단일 사용자 및 독립형이었으므로 파일 또는 레코드 잠금 기능이나 어떤 형태의 다중작업도 제공되지 않았다. 이러한 제한에도 불구하고 MBASIC은 당시 강력하고 유용한 BASIC 구현으로 여겨졌다.

## 기능

### 언어 시스템
MBASIC은 인터프리터이다. 프로그램 소스 텍스트는 토큰화된 형태로 메모리에 저장되었는데, BASIC 키워드는 1바이트 토큰으로 대체되어 메모리 공간을 절약하고 실행 속도를 높였다. 줄 번호로 시작하는 모든 줄은 프로그램 텍스트로 저장되었고, 줄 번호가 없는 BASIC 문은 즉시 명령으로 실행되었다. 프로그램은 편집을 위해 화면에 나열하거나, 압축된 이진 형식 또는 일반 ASCII 텍스트로 디스크에 저장할 수 있었다. 모든 소스 줄은 숫자로 식별되었으며, 이는 GOTO 또는 GOSUB 전송의 대상으로 사용될 수 있었다. 줄 편집 명령만 제공되었다. 프로그램을 일반 텍스트로 저장하고 전체 기능 편집기로 편집하는 것이 종종 유용했다.

프로그램 텍스트, 변수, 디스크 버퍼 및 CP/M 운영 체제 자체는 모두 8080 프로세서의 64킬로바이트 주소 공간을 공유해야 했다. 일반적으로 MBASIC을 처음 시작할 때, 64킬로바이트 RAM이 장착된 기계에서도 프로그램 및 데이터에 사용할 수 있는 메모리는 32kB 미만이었다. ` REM ` 키워드 또는 아포스트로피로 시작하는 주석 줄은 프로그램 텍스트에 포함될 수 있었지만 귀중한 메모리 공간을 차지하여 BASIC 사용자들이 코드를 완전히 문서화하는 것을 막았다. 더 크고 복잡한 프로그램을 실행할 수 있도록, 나중에 출시된 MBASIC 버전은 프로그램 제어 하에 프로그램 텍스트의 일부를 읽고 실행할 수 있는 함수(<code> CHAIN </code> 및 ` MERGE ` 문)를 지원했다. "셸" 명령 실행에 대한 지원은 제공되지 않았지만, 이 기능은 의지가 있는 프로그래머에 의해 복제될 수 있었다.

MBASIC의 특별한 장점은 구문 및 런타임 오류에 대해 제공되는 전체 텍스트 오류 메시지였다. MBASIC은 실행되는 줄 번호를 표시하는 "추적" 기능도 있었다. 이 기능은 일반 프로그램 출력과 동일한 화면 공간을 차지했지만, 무한 루프와 같은 조건을 감지하는 데 유용했다.

### 파일 및 입출력
데이터는 순차 파일(각 줄 끝에 캐리지 리턴/LF의 CP/M 규칙으로 구분) 또는 고정 레코드 길이의 랜덤 액세스 파일로 디스크에 읽고 저장할 수 있었으며, 충분히 의지가 있는 프로그래머가 있다면 데이터베이스 유형의 레코드 조작을 수행하는 데 사용할 수 있었다. 부동 소수점 숫자에 대한 마이크로소프트 이진 형식은 구현에 고유한 것이었으므로, 데이터는 ASCII 텍스트 표현을 사용하거나 이진 형식을 변환하기 위한 광범위한 프로그래밍을 통해서만 다른 프로그램과 교환될 수 있었다.

### 변수 및 자료형
MBASIC은 다음 자료형을 지원했다:
* 길이 0에서 255자까지의 문자열 형태의 8비트 문자 데이터;
* 16비트 정수;
* 32비트 부동 소수점(단정밀도), 6자리 십진수와 2자리 지수에 해당;
* 64비트 부동 소수점(배정밀도), 16자리 십진수와 2자리 지수에 해당.

문자열 연산자에는 부분 문자열 선택, 연결, 할당 및 동등성 테스트가 포함되었다.

최대 7차원의 위 유형 배열이 허용되었지만, 배열에 작동하는 함수나 연산자는 없었다. 예를 들어, 배열 할당이 없었다. 당시 다른 BASIC 구현과 달리 MBASIC은 행렬 연산, 복소수 또는 재무 계산을 위한 십진수 (BCD) 자료형을 지원하지 않았다. 일반적인 CP/M 시스템에는 부동소수점 장치가 없었기 때문에 모든 부동 소수점 연산은 소프트웨어로 수행되었다. 내장 수학 함수(사인, 코사인, 접선, 자연로그, 지수, 제곱근)는 단정밀도 결과만 제공했다. 유사난수 생성기가 제공되었는데, 이는 게임 및 일부 시뮬레이션에 유용한 숫자 시퀀스를 얻기 위해 사용자가 시드 번호를 입력해야 했다. MBASIC은 할당문에 ` LET ` 키워드를 허용했지만 필수는 아니었다.

마이크로컴퓨터의 초기 BASIC 버전은 한두 문자로 된 변수 이름 때문에 복잡한 프로그램에서 변수의 의미를 기억하기 어렵다는 악명이 있었다. MBASIC 버전 5는 최대 40자 길이의 식별자를 허용하여 프로그래머가 변수에 읽기 쉬운 이름을 부여할 수 있도록 했다.

### 프로그램 흐름 제어
MBASIC의 프로그램 흐름 제어는 ` IF...THEN...ELSE... ` 조건부 테스트, ` WHILE...WEND ` 루프, ` GOTO ` 및 ` GOSUB ` 명령어로 제어되었다. ` CASE ` 문은 없었지만 ` ON...GOTO... `(계산된 GOTO)는 다중 분기를 제공했다. 서브루틴은 매개변수가 없었고 모든 변수는 전역이었다. MBASIC은 프로그래머에게 구조적 프로그래밍을 의무화하지 않았고 스파게티 코드를 작성하기 쉬웠다.

## PEEK, POKE 및 사용자 함수
1970년대 후반과 1980년대 초반의 다른 8비트 컴퓨터와 마찬가지로, PEEK과 POKE 함수는 메모리를 직접 읽고 쓰는 데 사용되었다. 이러한 시스템은 일반적으로 메모리 보호 기능이 없었기 때문에 프로그래머가 운영 체제의 일부 또는 다른 방법으로는 사용할 수 없는 기능에 접근할 수 있었다. 또한 사용자 프로그램이 시스템을 중단시키는 기회도 제공되었는데, 이는 보통 실수로 발생했다. 예를 들어, CP/M 프로그래머는 ` POKE ` 함수를 사용하여 시스템 바이오스가 지원하는 경우 BASIC이 콘솔 장치를 직렬 포트로 전환할 수 있도록 할 수 있었다. 실시간 시계가 있는 기계의 경우, 일련의 `PEEK` 명령어를 사용하여 시간에 접근할 수 있었을 것이다.

더 복잡한 작업을 위해 MBASIC은 BASIC 프로그램에서 호출할 수 있는 사용자 정의 함수를 허용했다. 이러한 함수는 일반적으로 예약된 메모리 영역에 배치되거나, 일련의 기계어 코드(OP 코드)로 문자열 상수에 POKE되었다. MBASIC은 또한 8080 하드웨어 입출력 포트에 직접 읽고 쓰는 하드웨어 `INP` 및 `OUT` 명령어도 제공했다. 이는 시스템 하드웨어가 허용하는 경우 BASIC 프로그램에서 주변 장치를 제어하는 데 사용될 수 있었다.

`PEEK` 및 `POKE`, 그리고 기계어 사용자 함수를 사용하는 모든 MBASIC 프로그램은 수정 없이는 다른 기계 간에 이식할 수 없었다.

## MBASIC의 후속작
마이크로소프트의 CP/M용 BASIC-80 외에도 MBASIC의 변형이 ISIS-II 운영 체제에서도 사용 가능했다.

MSX 베이직 또한 MBASIC의 잘 알려진 후속작으로, MSX 기계에 특화된 여러 확장 기능을 제공했다.

CP/M MBASIC의 모든 기능은 IBM PC 디스크 기반의 BASICA 또는 GW 베이직에서 사용할 수 있었으며, 이는 CP/M 시스템에서 PC 호환 시스템으로 프로그램 마이그레이션을 가능하게 했다. 키워드를 나타내는 토큰은 달랐기 때문에 CP/M 프로그램은 ASCII 소스 형식으로 저장해야 했다. 일반적으로 CP/M 버전에 들어 있던 화면 형식 이스케이프 시퀀스는 PC 버전 BASIC에 있는 커서 위치 지정 명령으로 대체되었으며, 그 외에는 거의 다시 작성할 필요가 없었다.

## BASCOM
마이크로소프트는 MBASIC과 유사한 소스 언어를 사용하는 CP/M BASIC 컴파일러(**BASCOM**으로 알려짐)를 판매했다. MBASIC에서 디버깅된 프로그램은 BASCOM으로 컴파일할 수 있었다. 프로그램 텍스트가 더 이상 메모리에 없고 컴파일러의 런타임 요소가 인터프리터보다 작았기 때문에 사용자 데이터에 더 많은 메모리를 사용할 수 있었다. 실제 프로그램 실행 속도는 약 3배 증가했다.

개발자들은 BASCOM을 인기 있지만 느리고 서투른 CBASIC의 대안으로 환영했다. CBASIC과 달리 BASCOM은 MBASIC 소스 코드를 위한 전처리기가 필요 없었으므로 대화식으로 디버깅할 수 있었다. 1980년 12월 제리 푸르넬은 CBASIC에 비해 우수한 편집-컴파일-실행-디버그 루프를 승인하고 바이너리가 훨씬 빠르게 실행된다고 말하면서도, 마이크로소프트가 각 바이너리 복사본에 대해 9%의 로열티와 하드웨어-소프트웨어 조합에 대해 40달러를 요구하는 것을 비난했다. 회사는 또한 개발자의 재무 기록을 감사할 권리를 유보했다. 소프트웨어 저작자의 일반적인 로열티 비율이 10-25%였기 때문에, 인포월드는 1980년에 BASCOM의 추가 9% 로열티 비율이 "소프트웨어 개발을 완전히 비수익적으로 만들 수 있다"고 말하며 "마이크로소프트는 (CBASIC의 결함에 대한) 기술적 해결책은 가지고 있지만 경제적 해결책은 없다"고 결론지었다.

## MBASIC의 중요성
MBASIC은 8비트 CP/M 컴퓨터 시대에 중요한 도구였다. 숙련된 사용자는 MBASIC으로 루틴을 작성하여 현대 시스템에서는 강력한 애플리케이션 프로그램 명령이나 스크립팅 언어로 수행될 작업을 자동화할 수 있었다. 유용한 MBASIC 프로그램의 교환은 컴퓨터 사용자 그룹의 일반적인 기능이었다. 잡지 기사에서 긴 BASIC 목록을 입력하는 것은 새로운 CP/M 시스템에 소프트웨어를 "부트스트래핑"하는 한 가지 방법이었다. 적어도 하나의 고급 언어 컴파일러가 MBASIC으로 작성되었으며, 몇 줄에서 수천 줄의 코드에 이르는 많은 작은 게임과 유틸리티 프로그램이 작성되었다.

## 기타 용도
MBASIC은 또한 Basic Micro, Inc.에서 개발한 마이크로칩 테크놀로지 PIC 마이크로컨트롤러 제품군용 상용 베이직 컴파일러의 이름이기도 하며, CP/M 인터프리터와는 관련이 없다.

## 각주

* Thom Hogan and Mike Iannamico, Osborne 1 User's Reference Guide,(1982) Osborne Computer Corporation
* David A. Lien, The BASIC Handbook, 2nd Edition Encyclopedia of the BASIC Computer Language",(1981), Compusoft Publishing
* BASIC 80 Reference Manual, Microsoft Corporation, no date

분류:베이직 프로그래밍 언어 계열
분류:CP/M 소프트웨어
분류:마이크로소프트의 프로그래밍 언어