정수 베이직
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
정수 베이직은 스티브 워즈니악이 애플 컴퓨터를 위해 개발한 베이직 언어의 한 종류이다. 1970년대 후반, 애플 II가 출시되기 전, 워즈니악은 16비트 정수 계산에 초점을 맞춰 부동 소수점 연산 기능을 제외한 정수 베이직을 개발했다. 이 언어는 HP 베이직을 기반으로 하며, 16비트 정수, 문자열 처리, 그래픽 및 사운드 기능을 제공했다. 이후 애플 II 플러스에 마이크로소프트의 애플소프트 베이직이 탑재되면서 정수 베이직은 사라졌다. 정수 베이직은 토큰화된 소스 코드와 정수 연산을 사용해 실행 속도가 빨랐으며, 여러 벤치마크에서 애플소프트 베이직보다 뛰어난 성능을 보였다.
더 읽어볼만한 페이지
- 베이직 인터프리터 - 비주얼 베이직
비주얼 베이직은 1991년 마이크로소프트에서 출시된 GUI 기반 응용 프로그램 개발에 강점을 가진 프로그래밍 언어이며, 윈도우용 응용 프로그램 및 데이터베이스 조작 프로그램 개발에 주로 사용되었고, 2005년 표준 지원이 중단되었다. - 베이직 인터프리터 - 큐베이직
큐베이직은 GW-BASIC을 대체하기 위해 개발된 퀵베이직 컴파일러 기반의 인터프리터로, MS-DOS, 윈도우, IBM PC DOS 등에서 사용되었으며, 4개의 예제 프로그램과 이스터 에그를 제공한다. - 베이직 프로그래밍 언어 계열 - VB스크립트
VB스크립트는 마이크로소프트에서 개발한 스크립트 언어로, 인터넷 익스플로러의 클라이언트 스크립트 언어 및 액티브 서버 페이지의 표준 언어로 사용되었으나, 윈도우 클라이언트 지원 중단 발표로 향후 윈도우 릴리스에서 제거될 예정이다. - 베이직 프로그래밍 언어 계열 - 비주얼 베이직
비주얼 베이직은 1991년 마이크로소프트에서 출시된 GUI 기반 응용 프로그램 개발에 강점을 가진 프로그래밍 언어이며, 윈도우용 응용 프로그램 및 데이터베이스 조작 프로그램 개발에 주로 사용되었고, 2005년 표준 지원이 중단되었다. - 어셈블리어 소프트웨어 - 터보 파스칼
필립 칸이 개발하고 안데르스 헤일스베르그가 기반을 다진 터보 파스칼은 저렴한 가격, 빠른 컴파일, 사용하기 쉬운 IDE를 특징으로 1980년대 PC 프로그래밍에 혁신을 가져왔으며, 여러 기능 추가를 거쳐 델파이 등장 후 레거시 기술이 되었고 일부 버전은 프리웨어로 배포된다. - 어셈블리어 소프트웨어 - MS-DOS
MS-DOS는 마이크로소프트가 개발한 개인용 컴퓨터용 디스크 운영 체제로, IBM PC의 표준 운영 체제로 널리 사용되었으며, 단일 작업 환경과 명령줄 인터페이스를 특징으로 한다.
| 정수 베이직 - [IT 관련 정보]에 관한 문서 | |
|---|---|
| 기본 정보 | |
| 개발자 | 스티브 워즈니악 |
| 출시일 | 1976년 |
| 플랫폼 | 애플 I, 애플 II |
| 영향을 받은 언어 | HP BASIC |
| 영향을 준 언어 | Applesoft BASIC |
| 추가 정보 | |
2. 역사
스티브 워즈니악은 1960년대 후반에 캘리포니아의 고등학교에서 시분할 컴퓨터 터미널에서 베이직 언어를 처음 사용하였고, 1970년대에는 홈브루 컴퓨터 클럽(Homebrew Computer Club)의 회원으로 《101 베이직 컴퓨터 게임》을 읽고, 자신이 설계하는 컴퓨터에서는 휴렛팩커드사에서 자신이 작업하고 있는 논리 시뮬레이션 뿐만 아니라, 이 책에 나오는 게임도 모두 작동되도록 하겠다고 결심하였다.[36] 워즈니악은 빌 게이츠가 인텔 8080용으로 알테어 베이직을 작성한 것을 알고, 애플 컴퓨터에 사용되는 MOS 테크놀로지 6502 CPU를 위한 최초의 베이직 프로그램을 작성하기로 작정하였다.[36] 그는 자신이 근무하는 HP사의 HP-베이직이 《101 베이직 컴퓨터 게임》에서 사용된 DEC 베이직이나 알테어 베이직과는 그 구문이 상이하다는 점을 알지 못한 채, HP-베이직의 매뉴얼을 구해서 베이직 명령어의 일람표를 만들고 인터프리터를 어셈블리어(정확히 말하면 16진수 코드)로 종이에 써서 만들었다.[37] 지금도 그가 쓴 노트가 남아 있다. 주요 시뮬레이션이나 게임에 정수가 쓰이고 개발 기간을 단축하기 위하여 부동소수점 연산에 관련된 루틴은 제외하고 16비트 정수 계산에 관련된 루틴만 구현하여 '''정수 베이직'''이 되었다.
그후 애플 II 플러스에 마이크로소프트사에 의하여 개발된 부동소수점 연산이 가능한 애플소프트 베이직이 탑재되면서 정수 베이직은 삭제되었다.
2. 1. 초기 개발 배경
스티브 워즈니악은 1960년대 후반 캘리포니아의 고등학교에서 시분할 컴퓨터 터미널을 통해 베이직 언어를 처음 접했다.[36] 1970년대에는 홈브루 컴퓨터 클럽 회원으로서 《101 베이직 컴퓨터 게임》을 읽고, 자신이 설계하는 컴퓨터에서 휴렛팩커드사의 논리 시뮬레이션뿐만 아니라 이 책에 나오는 게임도 모두 작동되도록 결심했다.[36]빌 게이츠가 인텔 8080용 알테어 베이직을 작성한 것을 알고, 워즈니악은 애플 컴퓨터에 사용되는 MOS 테크놀로지 6502 CPU를 위한 최초의 베이직 프로그램 개발을 시작했다.[36] 그는 HP-베이직 매뉴얼을 구해 베이직 명령어 목록을 만들고, 인터프리터를 어셈블리어(16진수 코드)로 종이에 직접 작성했다.[36][37]
당시 워즈니악은 HP-베이직이 《101 베이직 컴퓨터 게임》에서 사용된 DEC 베이직이나 알테어 베이직과 구문이 다르다는 점을 알지 못했다.[36] 주요 시뮬레이션이나 게임에 정수가 사용되고 개발 기간 단축을 위해 부동소수점 연산 루틴은 제외하고 16비트 정수 계산 루틴만 구현하여 '정수 베이직'이 되었다.
이후 애플 II 플러스에는 마이크로소프트가 개발한 부동소수점 연산이 가능한 애플소프트 베이직이 탑재되면서 정수 베이직은 삭제되었다.
2. 2. 홈브루 컴퓨터 클럽과 알테어 BASIC
스티브 워즈니악은 1960년대 후반에 캘리포니아의 고등학교에서 시분할 컴퓨터 터미널에서 베이직 언어를 처음 사용하였다.[36] 1970년대에는 홈브루 컴퓨터 클럽(Homebrew Computer Club)의 회원으로 《101 베이직 컴퓨터 게임》을 읽고, 자신이 설계하는 컴퓨터에서 휴렛팩커드사의 논리 시뮬레이션뿐만 아니라 이 책에 나오는 게임도 모두 작동되도록 하겠다고 결심하였다. 워즈니악은 빌 게이츠가 인텔 8080용으로 알테어 베이직을 작성한 것을 알고, 애플 컴퓨터에 사용되는 MOS 테크놀로지 6502 CPU를 위한 최초의 베이직 프로그램을 작성하기로 작정하였다.[36] 그는 HP사의 HP-베이직의 매뉴얼을 구해서 베이직 명령어 일람표를 만들고 인터프리터를 어셈블리어(16진수 코드)로 종이에 써서 만들었다.[37]주요 시뮬레이션이나 게임에 정수가 쓰이고 개발 기간을 단축하기 위하여 부동소수점 연산 루틴은 제외하고 16비트 정수 계산 루틴만 구현하여 '''정수 베이직'''이 되었다. 그가 쓴 노트가 지금도 남아있다.[37]
이후 애플 II 플러스에 마이크로소프트사에 의해 개발된 부동소수점 연산이 가능한 애플소프트 베이직이 탑재되면서 정수 베이직은 삭제되었다.
2. 3. 정수 베이직 개발 과정
스티브 워즈니악은 1960년대 후반 캘리포니아의 고등학교에서 시분할 컴퓨터 터미널에서 베이직 언어를 처음 사용하였고, 1970년대에는 홈브루 컴퓨터 클럽(Homebrew Computer Club)의 회원으로서 《101 베이직 컴퓨터 게임》을 읽었다.[36] 그는 자신이 설계하는 컴퓨터에서 휴렛팩커드사의 논리 시뮬레이션뿐만 아니라 이 책에 나오는 게임도 모두 작동되도록 하겠다고 결심하였다. 워즈니악은 빌 게이츠가 인텔 8080용으로 알테어 베이직을 작성한 것을 알고, 애플 컴퓨터에 사용되는 MOS 테크놀로지 6502 CPU를 위한 최초의 베이직 프로그램을 작성하기로 하였다.[36]그는 자신이 근무하는 HP사의 HP-베이직이 《101 베이직 컴퓨터 게임》에서 사용된 DEC 베이직이나 알테어 베이직과는 그 구문이 상이하다는 점을 알지 못한 채, HP-베이직의 매뉴얼을 구해 베이직 명령어 일람표를 만들고 인터프리터를 어셈블리어(정확히 말하면 16진수 코드)로 종이에 써서 만들었다.[37] 지금도 그가 쓴 노트가 남아 있다. 주요 시뮬레이션이나 게임에 정수가 쓰이고 개발 기간을 단축하기 위하여 부동소수점 연산 루틴은 제외하고 16비트 정수 계산 루틴만 구현하여 '''정수 베이직'''이 되었다.
이후 애플 II 플러스에 마이크로소프트사에 의하여 개발된 부동소수점 연산이 가능한 애플소프트 베이직이 탑재되면서 정수 베이직은 삭제되었다.
2. 4. 애플 I 및 브레이크아웃
스티브 워즈니악은 1960년대 후반 캘리포니아의 고등학교에서 시분할 컴퓨터 터미널을 통해 베이직 언어를 처음 접했다.[36] 1970년대에는 홈브루 컴퓨터 클럽 회원으로서 《101 베이직 컴퓨터 게임》을 읽고, 자신이 설계하는 컴퓨터에서 휴렛 팩커드의 논리 시뮬레이션뿐만 아니라 책에 나오는 게임도 모두 작동되도록 하겠다고 결심했다.[36]워즈니악은 빌 게이츠가 인텔 8080용 알테어 베이직을 작성한 것을 알고, 애플 컴퓨터에 사용되는 MOS 테크놀로지 6502 CPU를 위한 베이직 프로그램을 직접 작성하기로 했다.[36] 그는 HP-베이직 매뉴얼을 구해 베이직 명령어 목록을 만들고, 인터프리터를 어셈블리어(16진수 코드)로 종이에 써서 만들었다.[37] 당시 작성한 노트가 현재까지 남아있다. 주요 시뮬레이션이나 게임에 정수가 사용되고 개발 기간 단축을 위해 부동소수점 연산 루틴은 제외하고 16비트 정수 계산 루틴만 구현하여 '''정수 베이직'''이 되었다.
이후 애플 II 플러스에는 마이크로소프트가 개발한 부동소수점 연산이 가능한 애플소프트 베이직이 탑재되면서 정수 베이직은 삭제되었다.
2. 5. 애플 II와 애플소프트 베이직
스티브 워즈니악은 1960년대 후반 캘리포니아의 고등학교에서 시분할 컴퓨터 터미널을 통해 베이직 언어를 처음 접했다.[36] 1970년대에는 홈브루 컴퓨터 클럽 회원으로서 《101 베이직 컴퓨터 게임》을 읽고, 자신이 설계하는 컴퓨터에서 휴렛 팩커드의 논리 시뮬레이션뿐만 아니라 이 책의 게임들도 모두 작동되도록 하겠다는 목표를 세웠다. 워즈니악은 빌 게이츠가 인텔 8080용 알테어 베이직을 작성한 것을 알고, 애플 컴퓨터에 사용되는 MOS 테크놀로지 6502 CPU를 위한 최초의 베이직 프로그램 개발을 결심했다.[36] 그는 HP사의 HP-베이직 매뉴얼을 참고하여 베이직 명령어 목록을 만들고, 인터프리터를 어셈블리어(16진수 코드)로 직접 작성했다.[37]워즈니악은 개발 기간 단축을 위해 부동소수점 연산 루틴을 제외하고 16비트 정수 계산 루틴만 구현하여 '정수 베이직'을 만들었다.
이후 애플 II 플러스에는 마이크로소프트가 개발한 부동소수점 연산이 가능한 애플소프트 베이직이 탑재되면서 정수 베이직은 삭제되었다.
3. 특징
3. 1. 프로그램 편집
대부분의 당시 BASIC 구현과 마찬가지로, Integer BASIC은 언어 인터프리터이자 라인 편집 환경 역할을 했다. BASIC이 실행 중일 때, 사용자가 명령문을 입력할 수 있는 명령 프롬프트가 표시되었다. 이후의 홈 컴퓨터 플랫폼과는 달리, 애플 II가 시작될 때 BASIC이 기본 환경은 아니었으며, 일반적으로 모니터에서 시작되었다. BASIC은 을 눌러 시작했다.선행 숫자가 있는 명령문은 "지연 실행"을 위해 프로그램 저장소에 입력되며, 새로운 줄로 입력되거나 이전에 동일한 번호가 있었을 수 있는 모든 줄을 대체한다. 라인 번호 없이 입력된 명령문은 명령어으로 참조되었으며, 즉시 실행되었다. 라인 번호는 0에서 32767까지 가능하며, 라인은 최대 128자까지 포함할 수 있었다.
Integer BASIC에는 `AUTO` 명령도 포함되어 있어서, `AUTO 100`과 같이 주어진 시작 번호로 라인 번호를 자동으로 입력하고, 새 줄마다 마지막 번호에 10을 더했다. `AUTO 300,5`는 300번 라인부터 5씩 증가하며 번호를 매겼다; 300, 305 등. 자동 번호 매기기는 `MAN`을 입력하여 해제했다.
편집기의 한 가지 흥미로운 기능은 화면의 한 부분을 "창"으로 지정하여 실시간 업데이트를 할 수 있다는 것이다. 이것은 일반적으로 전체 화면이었지만, 메모리 위치 32에서 35까지 값을 `POKE`함으로써 더 작은 영역으로 제한할 수 있었다. 이 기능을 사용하여 화면의 나머지 부분은 그래픽 모드로 유지하면서 편집 가능한 텍스트 영역을 만들 수 있었다.
3. 2. 디버깅
대부분의 베이직과 마찬가지로, 프로그램은 `RUN` 명령어로 시작되었으며, `RUN 300`과 같이 특정 라인 번호를 지정할 수도 있었다. 실행은 를 사용하여 언제든지 중단할 수 있었고, `CON`tinue 명령어로 다시 시작할 수 있었다. 이는 일반적인 `CONT` 명령어와는 달랐다.단계별 실행을 위해서는 `TRACE` 명령어를 명령 프롬프트에서 사용하거나 프로그램 내부에 배치할 수 있었다. 이 기능을 켜면 프로그램이 방문한 각 라인의 라인 번호가 출력되었다. 이 기능은 `NOTRACE`로 다시 끌 수 있었다.
`DSP` ("display"의 약자) 명령은 프로그램에서 이 명령어를 만나면, 그 시점부터 변수 값에 대한 모든 ''변경'' 사항이 표시되도록 했다. 예를 들어, `DSP X`는 X의 값이 변경될 때마다 변경이 발생한 라인 번호와 함께 X의 값을 표시했다. TRACE와 마찬가지로 DSP는 `NODSP`로 꺼졌다.
3. 3. 변수 이름
정수 베이직은 변수 이름 길이에 제한을 두지 않아, `SUM`, `GAMEPOINTS`, `PLAYER2` 와 같이 의미를 명확하게 표현하는 변수 이름을 사용할 수 있었다. 이는 변수 이름을 최대 두 글자(단일 문자 또는 문자 뒤 숫자)로 제한했던 다트머스 베이직이나, 문자 뒤에 선택적으로 문자나 숫자를 허용했지만 이후 문자는 무시했던 MS-BASIC과는 다른 특징이다. 다만, 변수 이름에 예약어를 포함할 수 없다는 단점이 있었다. 예를 들어 `THISCOLOR` 와 `COLORFUL` 은 `COLOR` 라는 시스템 명령어를 포함하고 있어 유효하지 않은 변수 이름이었다. 또한 줄의 길이가 128자로 제한되었기 때문에, 변수 이름 역시 이 길이를 초과할 수 없었다.3. 4. 수학
정수 베이직은 16비트 정수를 기반으로 하는 수학 패키지를 사용한다. 숫자는 내부적으로 리틀 엔디안 (6502와 마찬가지)으로 저장되며, -32767과 32767 사이의 모든 계산을 허용한다. 형식은 -32768 값도 저장할 수 있지만, BASIC은 해당 숫자를 표시할 수 없었다. 범위를 벗어난 값을 생성하는 계산은 오류를 발생시켰다.지원되는 중위 연산자에는 덧셈(+), 뺄셈(-), 곱셈(*), 나눗셈(/), MOD(나머지) 및 지수(^)가 있다. 이진 연산자에는 AND, OR, NOT이 포함되었다. 비교 연산자로는 =, >, <, >=, <=, <> 및 <>와 동일한 HP에서 영감을 받은 #이 있다.
사용 가능한 메모리에 의해서만 크기가 제한되는 단일 차원 배열만 허용되었다. 지원되는 수학 함수는 ABS (절댓값), SGN (부호), RND (난수)가 있다. 다른 베이직 언어들과 달리, Integer BASIC에서 RND 함수는 매개변수를 사용했다. 예를 들어 RND(6)은 0에서 5까지의 정수를 반환했다.
3. 5. 문자열
정수 베이직의 문자열 처리는 HP 베이직(HP BASIC) 시스템을 기반으로 했다. 이 시스템은 문자열 변수를 사용하기 전에 `DIM`을 사용하여 문자 배열로 취급해야 했다. 이는 C[14] 또는 포트란 77[15]의 모델과 유사하며, 문자열이 내재된 가변 길이 유형인 MS 스타일 베이직과는 대조적이다.[16] MS 파생 베이직이 ''사실상'' 표준이 되기 전에는 이러한 스타일이 드물지 않았다. 노스 스타 베이직[17]과 아타리 베이직[18]도 이와 동일한 개념을 사용했으며 다른 언어들도 마찬가지였다.정수 베이직의 문자열은 사용된 문자 수에 관계없이 최대 255자까지 고정된 양의 메모리를 사용했다. 이는 MS 베이직에서 악명 높게 느렸던 가비지 컬렉션의 필요성을 피할 수 있는 장점이 있었지만, 선언된 길이보다 짧은 문자열은 낭비된다는 의미였다.
부분 문자열 접근은 배열 슬라이싱 구문을 통해 제공되었다. 예를 들어, `PRINT A$(0,5)`는 `A$`의 처음 6자, 즉 0에서 5까지의 문자를 출력했다. 연결은 동일한 시스템을 사용하여 제공되었으며, `A$(5)="ABC"`는 위치 5부터 시작하는 모든 문자를 문자열 "ABC"로 대체했다. 이는 부분 문자열에 접근하기 위해 `MID$`와 같은 문자열 함수를 사용하고 연결을 위해 `+`를 사용하는 DEC/MS 스타일의 문자열 처리와 대조된다.[20]
문자열 함수에서 제공되는 많은 기능이 대신 배열 슬라이싱으로 제공되었기 때문에 문자열 함수의 선택이 줄었다. `LEN`은 문자열의 길이를 반환했고 `ASC`는 문자열의 첫 글자에 대한 ASCII 숫자 코드를 반환했다. 주어진 숫자 코드를 가진 ASCII 문자를 반환하는 `CHR$`와 동등한 기능은 없었다.
3. 6. 그래픽 및 사운드
초기에 출시되었을 때, 애플 기기용 유일한 게임 컨트롤러는 단일 커넥터에 두 개의 컨트롤러가 있는 패들 컨트롤러였다. 컨트롤러의 위치는 `PDL` 함수를 사용하여 읽을 수 있었으며, 0 또는 1과 같은 컨트롤러 번호를 전달하여 `A=PDL(0):PRINT A`처럼 0에서 255 사이의 값을 반환했다.애플 기기에는 전용 사운드 하드웨어가 포함되어 있지 않았으며, 단순한 "비퍼"만 있었다. 사운드 생성은 스피커의 메모리 맵 위치인 -16336을 `PEEK`하여 수행되었다. 해당 값을 반복적으로 PEEKing 하면 소리가 생성되었으며, 설명서에서는 `S=PEEK(-16336)-PEEK(-16336)-PEEK(-16336)-PEEK(-16336)-PEEK(-16336)`과 같은 수학적 표현식을 사용하여 소리를 내도록 제안했다.
그래픽 지원은 더 자세했다. 그래픽 모드는 `GR` 문으로 켜고 `TEXT`로 껐다. 그리기는 모드 방식이었으며 일반적으로 의사 변수를 설정하여 색상을 변경하는 명령을 내리는 것으로 시작되었다. `COLOR=12`는 그리기 색상을 12, 연한 녹색으로 설정한다. 그런 다음 `PLOT 10,10`을 사용하여 해당 색상의 단일 점을 생성하거나, 행 20에 화면을 가로지르는 수평선을 그리는 `HLIN 0,39 AT 20` 또는 열 7에 짧은 수직선을 그리는 `VLIN 5,15 AT 7`을 사용할 수 있었다. `A=SCRN X,Y`는 X,Y 위치의 화면 색상을 반환했다.
3. 7. 입출력
정수 베이직은 사용자 지정 입출력 명령어가 없었고, `DATA` 문과 관련된 `READ`도 없었다. 프로그램을 통해 데이터를 입력하고 출력하기 위해, 입출력 기능은 `PR#x`와 `IN#x`를 사용하여 선택된 카드 슬롯으로 리디렉션되었는데, 이는 각각 지정된 번호의 슬롯으로 출력을 보내거나 입력을 받았다. 그 후, 기존의 `PRINT` 명령을 사용하여 카드로 데이터를 전송하고, `INPUT`을 사용하여 카드에서 데이터를 읽을 수 있었다.3. 8. 예약어
애플 BASIC은 다음과 같은 명령어를 가지고 있었다.- `AUTO val1, val2`: 자동 줄 번호 생성 (val1부터 val2 간격으로).
- `CLR [CLEAR]`: 모든 변수, 배열, 문자열을 지우고 메모리를 초기화한다.
- `DEL val1, val2`: 프로그램의 val1부터 val2까지의 줄을 삭제한다.
- `LIST val1, val2`: 프로그램의 val1부터 val2까지의 줄을 화면에 표시한다.
- `RUN val1`: val1 줄부터 프로그램을 실행한다.
- `SCR [SCRATCH / NEW]`: 현재 프로그램을 메모리에서 지운다.
- `HIMEM = expr`: 프로그램이 사용할 수 있는 최고 메모리 주소를 설정한다.
- `LOMEM = expr`: 프로그램이 사용할 수 있는 최저 메모리 주소를 설정한다.
- `(LET) var = expr`: 변수 var에 expr 값을 할당한다. (LET은 생략 가능)
- `INPUT (prompt,) var1, var2 ...`: 사용자로부터 값을 입력받아 변수 var1, var2 등에 저장한다. prompt는 선택 사항.
- `PRINT item(s)`: 항목(item)들을 화면에 출력한다.
- `TAB expr`: expr 값만큼 커서를 이동한다.
- `FOR var = expr1 TO expr2 STEP expr3`: expr1부터 expr2까지 expr3씩 증가/감소하며 반복문을 실행한다.
- `NEXT var`: FOR 반복문의 다음 단계로 이동한다.
- `IF expr THEN statement`: expr이 참이면 statement를 실행한다.
- `IF expr THEN line number`: expr이 참이면 지정된 줄 번호(line number)로 이동한다.
- `GOTO expr`: expr 값에 해당하는 줄 번호로 이동한다.
- `GOSUB expr`: expr 값에 해당하는 줄 번호로 이동하여 서브루틴을 실행한다.
- `RETURN`: 서브루틴에서 호출된 곳으로 돌아간다.
- `DIM var1(expr1), var2(expr2) ...`: 배열 var1, var2 등을 선언하고 크기를 지정한다.
- `REM text`: 주석문 (text).
- `END`: 프로그램 실행을 종료한다.
- `POKE expr1, expr2`: 메모리 주소 expr1에 expr2 값을 저장한다.
- `CALL expr`: expr 값에 해당하는 메모리 주소의 기계어 코드를 호출한다.
- 함수: `ABS()`, `SGN()`, `PEEK()`, `RND()`, `LEN()`
Integer BASIC은 다음을 추가했다.
- `COLOR = expr`: 화면 색상을 설정한다.
- `CON [CONTINUE]`: 정지된 프로그램을 계속 실행한다.
- `DSP`: 지정된 변수의 값을 화면에 표시한다.
- `GR`: 저해상도 그래픽 모드로 전환한다.
- `HLIN expr1, expr2 AT expr3`: expr3 행에 expr1부터 expr2까지 수평선을 그린다.
- `MAN`: 수동 입력 모드로 전환한다.
- `NEW [SCR을 대체]`: 현재 프로그램을 메모리에서 지운다. (SCR 대체)
- `NOTRACE`: TRACE 모드를 해제한다.
- `PLOT expr1, expr2`: expr1, expr2 좌표에 점을 찍는다.
- `POP`: 스택에서 값을 제거한다.
- `TEXT`: 텍스트 모드로 전환한다.
- `TRACE`: 프로그램 실행 과정을 추적하는 TRACE 모드를 설정한다.
- `VLIN expr1, expr2 AT expr3`: expr3 열에 expr1부터 expr2까지 수직선을 그린다.
- 함수: `ASC()`, `PDL()`, `SCRN(X,Y)`
4. 구현
정수 베이직은 사용자가 입력한 줄을 버퍼에서 읽어들여 일련의 토큰을 출력하는 파서를 통해 실행했다. 이 과정에서 간단한 구문 오류가 감지되어 나열되었다. 구문 분석에 성공하면 줄 번호(있는 경우)는 ASCII 10진수 형식에서 16비트 정수로 변환되고 모든 키워드는 7비트 정수 토큰으로 변환되었다.
일부 키워드는 여러 개의 토큰으로 표현되었다. 예를 들어, 마이크로소프트 베이직이 PRINT 키워드에 대해 하나의 토큰을 가졌던 반면, 정수 베이직은 키워드 뒤에 인수가 없는 경우, 산술식이 오는 경우, 문자열 리터럴이 오는 경우의 세 개의 토큰을 가졌다.[26]
숫자 리터럴(예: 500)은 16비트(2바이트) 이진 표현으로 변환되었으며(예: 16진법), 이 값 앞에 와 사이의 단일 바이트가 삽입되었다. 문자열 리터럴(예: "HELLO WORLD")은 각 문자의 상위 비트를 설정하여 저장되었다(예: 는 로 저장). 변수 이름도 같은 방식으로 변환되었으며, 문자는 상위 비트를 켜도록 변환되고 이름의 모든 숫자는 해당 에서 로 표현되었다(예: 변수 는 로 토큰화).
줄 번호 없이 줄이 입력되면 코드는 버퍼에서 직접 실행되었다. 줄 번호가 있는 경우 버퍼에서 프로그램 저장 영역으로 복사되었다.
런타임 인터프리터는 실행을 위해 두 개의 스택을 사용했다. 하나는 문 키워드용, 다른 하나는 매개변수 평가용이다. 각 문은 두 개의 우선 순위를 부여받았다. 하나는 연산자 우선순위를 제공하는 일련의 수학적 연산과 같이 여러 단계의 연산에서 나타나야 하는 위치를 나타내고, 다른 하나는 괄호 공식의 내부 값을 계산하는 경우와 같이 평가가 언제 이루어져야 하는지 제안했다. 변수가 발견되면 해당 이름이 구문 분석된 다음 변수 저장 영역에서 조회되었다. 찾을 수 없으면 목록의 끝에 추가되었다. 새로 생성되었을 수 있는 변수의 저장 주소가 평가 스택에 배치되었다.
4. 1. 파서 및 토큰화
4. 2. 런타임 인터프리터 및 스택
5. ROM Details
5. 1. SWEET16
어셈블러 언어인 SWEET16은 간단한 16비트 가상 머신 내에서 실행되는 바이트코드를 기반으로 한다.[27] 메모리는 간접 16비트 포인터를 통해 주소를 지정하고 16비트 수학 함수를 계산할 수 있도록 하여, 기반이 되는 여러 명령으로 이루어진 8비트 6502 코드로 변환할 필요가 없도록 사용되었다.[27] 전체 가상 머신은 단 300바이트로 작성되었다.[27] 코드는 서브루틴 호출을 실행하여 SWEET16을 호출할 수 있으며, 16비트 연산이 완료되면 일반 6502 코드로 돌아갈 수 있다.[27]SWEET16은 핵심 BASIC 코드에서는 사용되지 않았지만, 나중에 여러 유틸리티를 구현하는 데 사용되었다.[27]
5. 2. 부동 소수점
정수 베이직에는 자체적인 수학 루틴이 포함되어 있었지만, 애플 II ROM에는 $F425-$F4FB와 $F63D-$F65D 사이의 ROM 메모리에 위치한 완벽한 부동 소수점 라이브러리도 포함되어 있었다.[28] 소스 코드는 애플 II 매뉴얼에 포함되어 있었다.[28] 부동 소수점 계산이 필요한 정수 베이직 프로그램은 CALL을 통해 이러한 루틴을 사용할 수 있었다.[28]6. 성능
정수 베이직은 원래의 소스 코드를 더 많이 토큰화했기 때문에, 추가적인 런타임 구문 분석이 필요한 버전보다 실행 속도가 빨랐다. 예를 들어, 정수 베이직은 `100 GOTO 200` 라인을 즉시 읽고 실행할 수 있는 토큰으로 완전히 변환하는 반면, MS 베이직에서는 줄 번호와 GOTO만 토큰화되고 "200"은 원래의 ASCII 형식으로 남아 있어서 해당 라인이 실행될 때마다 16비트 정수로 다시 구문 분석해야 했다.[30]
정수 연산만을 사용하는 것은 속도 면에서 또 다른 주요 이점을 제공한다. 이는 16비트 형식의 크기가 작아 메모리 접근 횟수가 적을 뿐만 아니라 계산 후 부동 소수점 소수점을 이동할 필요가 없기 때문이다. 당시 많은 컴퓨터 벤치마크가 작았고 부동 소수점이 필요하지 않은 간단한 수학 연산을 수행했기 때문에, 정수 베이직은 다른 대부분의 베이직을 능가했다.[31]
Rugg/Feldman 벤치마크에서, 정수 베이직은 동일한 머신에서 애플소프트 베이직보다 두 배 이상 빨랐다.[32] 바이트 체(Byte Sieve)에서는 정수 베이직이 166초, 애플소프트는 200초가 걸렸다.[33]
다음 테스트 시리즈는 원래 Rugg/Feldman 기사에서 가져온 것으로,[32][31] 동일한 플랫폼에서 MS 파생 베이직에 대한 정수 베이직의 성능을 보여준다.
| 시스템 | CPU | 베이직 | 테스트 1 | 테스트 2 | 테스트 3 | 테스트 4 | 테스트 5 | 테스트 6 | 테스트 7 |
|---|---|---|---|---|---|---|---|---|---|
| 애플 II | 6502 @ 1 MHz | 정수 베이직 | 1.3 | 3.1 | 7.2 | 7.2 | 8.8 | 18.5 | 28.0 |
| 애플 II | 6502 @ 1 MHz | 애플소프트 베이직 | 1.3 | 8.5 | 16.0 | 17.8 | 19.1 | 28.6 | 44.8 |
각 테스트의 내용은 다음과 같다.
- 테스트 1: 1000까지 for/next 루프.
- 테스트 2: 1000과 비교하는 루프.
- 테스트 3: 동일한 변수로 곱셈, 나눗셈, 덧셈, 뺄셈을 추가한 테스트 2와 동일.
- 테스트 4: 상수로 곱셈, 나눗셈, 덧셈, 뺄셈을 추가한 테스트 3과 동일.
- 테스트 5: 서브루틴 호출을 추가한 테스트 4와 동일.
- 테스트 6: 내부 루프를 추가한 테스트 5와 동일.
- 테스트 7: 테이블 채우기를 추가한 테스트 6과 동일.
7. 샘플 코드
다음은 애플 II용 정수 베이직 1977년 버전으로 작성된 브레이크아웃 게임의 버전으로, 애플 II 미니 매뉴얼(Apple II Mini Manual)에 수록되어 있다.[35] 이 프로그램은 몇 가지 알려진 버그가 있다.[35]
이 프로그램은 디스플레이를 `TEXT`로 설정한 다음 `CALL -936`을 사용하여 화면을 지우는 것으로 시작한다. 20~27행과 100행 및 200행의 관련 서브루틴은 워즈니악(Wozniak)이 잡스(Jobs)에게 시연했던 색상 선택 코드이다. 30행은 `POKE 32,20`을 사용하여 텍스트 창을 설정한 다음 일련의 `COLOR` 및 `VLIN` 문을 사용하여 텍스트 창에 플레이 필드와 점수 표시를 그린다. 전체 메인 루프는 40행에서 90행까지 관련 서브루틴과 함께 실행된다. 프로그램 끝 부분 근처의 또 다른 많은 코드는 최종 점수를 인쇄하는 것과 관련이 있다. 기타 주목할 만한 사항으로는 20행의 `#` (같지 않음) 비교, 65행의 `PEEK` 문자열을 사용하여 높은 음조의 소리를 생성하는 것과 70행의 루프를 사용하여 더 낮은 음조의 소리를 생성하는 것, 단일 디스플레이에 그래픽과 텍스트를 혼합한 것 등이 있다.
8. 각주
참조
[1]
간행물
BASIC timing comparisons… revised and updated
https://archive.org/[...]
1977-10
[2]
인터뷰
Oral History of Allen Baum
2016-07-18
[3]
간행물
Passing the 10-year mark
http://hpmemoryproje[...]
Hewlett Packard
1976-10
[4]
웹사이트
The (mostly) cool history of the IBM mainframe
https://www.arnnet.c[...]
[5]
서적
A History of Online Information Services, 1963–1976
https://books.google[...]
MIT Press
2003-08
[6]
간행물
Back to BASIC
https://books.google[...]
1981-04-27
[7]
서적
Understanding Online Piracy
https://books.google[...]
ABC-CLIO
2009
[8]
웹사이트
The Apple 1 Project
http://apple1.chez.c[...]
[9]
웹사이트
Apple I Computer Ad
http://www.gadgetspa[...]
2009-11-30
[10]
학술
Across the Editor's Desk
http://startup.nmnat[...]
MITS
1975-09
[11]
웹사이트
Classic Gaming: A Complete History of Breakout
http://classicgaming[...]
GameSpy
2010-04-19
[12]
간행물
Floating Point Routines for the 6502
https://archive.org/[...]
1976-08
[13]
서적
Apple II Reference Manual
Apple Computer
1978-01
[14]
웹사이트
Strings
https://www.learn-c.[...]
[15]
웹사이트
Characters & Strings in Fortran
http://math.hawaii.e[...]
[16]
서적
C64 Programmer's Manual
https://www.masswerk[...]
Commodore
[17]
서적
North Star BASIC version 6
http://itelsoft.com.[...]
North Star Corporation
2020-03-03
[18]
서적
The ATARI BASIC Reference Manual
http://www.strotmann[...]
Atari Inc
2020-04-14
[19]
웹사이트
Create your own Version of Microsoft BASIC
https://www.pagetabl[...]
[20]
서적
altair 8080 basic manual
http://chiclassiccom[...]
MITS
1977-04
[21]
서적
Atari BASIC Reference Manual
http://www.atarimani[...]
Atari
1983
[22]
서적
North Star BASIC version 6
http://itelsoft.com.[...]
North Star Corporation
2020-03-03
[23]
웹사이트
PRELIMINARY APPLE BASIC USERS MANUAL
https://archive.org/[...]
1976-10
[24]
웹사이트
APPLE II BASIC PROGRAMMING MANUAL
https://archive.org/[...]
[25]
웹사이트
APPLE II REFERENCE MANUAL
http://www.classiccm[...]
[26]
웹사이트
Apple II Integer Basic Disassembly
https://www.callappl[...]
2020-09-14
[27]
서적
Apple Programmers Aid
http://www.classiccm[...]
Apple
1978
[28]
서적
Apple II Reference Manual
http://www.classiccm[...]
1978-01
[29]
간행물
Build Your Own BASIC
https://archive.org/[...]
1976
[30]
웹사이트
Altair BASIC 3.2 (4K) - Annotated Disassembly
http://www.rjh.org.u[...]
[31]
간행물
BASIC timing comparisons… revised and updated
https://archive.org/[...]
1977-10
[32]
간행물
BASIC Timing Comparisons… information for speed freaks
https://archive.org/[...]
1977-06
[33]
간행물
A High-Level Language Benchmark
https://archive.org/[...]
1981-09
[34]
간행물
Benchmark Comparison Test
https://archive.org/[...]
1983-11
[35]
웹사이트
Breakout, Annotated
https://github.com/c[...]
2021-08-16
[36]
웹인용
How Steve Wozniak Wrote BASIC for the Original Apple From Scratch
https://gizmodo.com/[...]
Gizmodo
2014-05-01
[37]
웹인용
History part 3: The Apple II
http://apple2history[...]
2001-12-12
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com