아타리 BASIC

Atari BAS
아타리 BAS
AtariBasicExample.png
실행할 수 있는 프로그램
가족기본의
설계자폴 러프턴
캐슬린 오브라이언
개발자셰퍼드슨 마이크로시스템즈
처음 등장한1979년; 43년 전 (1979년)
안정된 릴리스
리비전 C / 1983; 39년 전 (1983년)
플랫폼Atari 8비트 패밀리
면허증.상업의 독점 소프트웨어
영향을 받다
데이터 일반 비즈니스 베이직[1]
영향받은
베이직 XL, 베이직 XE, 터보 베이직 XL

Atari BASIC은 6502 기반 가정용 컴퓨터의 Atari 8비트 패밀리와 함께 제공된 BASIC 프로그래밍 언어의 통역사입니다.가정용 컴퓨터 시대의 American BASIC과 달리 Atari BASIC은 Microsoft BASIC의 파생형이 아니며 큰 차이가 있습니다.예를 들어 Atari 고유의 기능에 대한 키워드가 포함되어 있으며 문자열 배열은 지원되지 않습니다.

이 언어는 처음에는 8KBROM 카트리지로 배포되었습니다.600XL 및 800XL부터는 BASIC이 시스템에 내장되어 있습니다만,OPTION기동중.키보드가 연결되어 있지 않은 경우 XEGS는 BASIC을 비활성화합니다.

Atari 8비트 컴퓨터는 동시대 대부분의 컴퓨터보다 고속으로 동작하고 있지만, 몇 가지 기술적인 결정으로 Atari BASIC은 성능 벤치마크에서 최하위에 근접했습니다.원저자는 BASIC XL 및 BASIC XE에서 이러한 문제의 대부분을 해결했습니다.Turbo-Basic XL과 같은 다수의 서드파티 인터프리터 및 컴파일러도 등장했습니다.

Atari BASIC의 완전한 주석 첨부 소스 코드와 설계 사양은 [2]1983년에 The Atari BASIC 소스 북으로 출판되었습니다.

역사

Atari 8비트 패밀리가 되는 머신은 원래 Atari VCS를 대체하기 위한 2세대 비디오 게임 콘솔로 개발되었습니다.아타리의 새 사장 레이 카사르는 가정용 컴퓨터를 만드는 으로 [3]애플 컴퓨터에 도전하기로 결정했다.

이것은 가정용 컴퓨터의 표준인 BASIC 프로그래밍 언어를 포함하기 위해 설계가 필요하다는 것을 의미했다.1978년 초, Atari는 소스 코드를 MOS 6502 버전의 Microsoft [4]BASIC에 라이선스했습니다.컴파일 시 약 7800바이트의 32비트 부동소수점 형식을 사용하는 버전과 9kB에 [5]가까운 확장 40비트 형식을 사용하는 버전 두 가지가 있습니다.

32비트 버전도 8kB 크기의 ROM 카트리지 포맷에 거의 들어가지 않습니다.Atari는 또한 애플이 애플소프트 베이직에서 했던 것과 마찬가지로 컴퓨터의 하드웨어 기능을 지원하기 위해 언어를 확장해야 한다고 느꼈다.이로 인해 Atari 버전의 크기는 약 11kB로 증가하였고, Apple II+의 AppleSoft BASIC은 10,[a]240바이트였다.6개월 후 코드는 8kB의 [4]ROM에 거의 맞도록 깎였지만 Atari는 1979년 1월 CES(Consumer Electronics Show)의 최종 기한을 앞두고 있었습니다.CES는 머신을 시연합니다.그들은 BASIC 버전을 [4]쇼에 맞춰 준비하기 위해 도움을 요청하기로 결정했다.

셰퍼드슨 마이크로시스템즈

8,000 Atari BASIC 카트리지

1978년 9월,[4] Shepardson Microsystems는 BASIC을 완성하는 입찰에 성공했습니다.당시 그들은 Z80 기반Cromemco S-100 버스 [6][7]기계를 위한 Cromemco 16K Structured BASIC을 마무리하고 있었습니다.개발자인 Kathleen O'Brien과 Paul Laughton은 시분할 [1]시스템에서의 Data General과의 경험을 바탕으로 정수만의 구현인 Data General Business Basic을 BASIC에 도입했습니다.

Cromemco BASIC은 Zilog Z80 프로세서의 16개 레지스터를 모두 사용하여 가능한 14자리 이진 코드 십진수(BCD) 형식을 사용한 확장 부동 소수점 구현을 포함했습니다.편집 시 모든 데이터를 내부 형식으로 변환하기 때문에 "1"과 같은 작은 상수는 상당한 양의 메모리를 소모하며, 이는 숫자의 배열을 저장할 때 특히 문제가 될 수 있습니다.이 문제를 해결하기 위해 이 언어에서는 6자리 BCD 형식도 지원했습니다.또한 회선 번호나 유사한 시스템 [8]값 등의 내부 값을 저장하기 위한 별도의 16비트 정수 형식도 포함되어 있습니다.

예를 들어, 6502의 가장 작은 BASIC에서도 일반적으로 약 10k를 사용하지만 [b]KERNAL로부터의 지원에 의존한 반면 Applesoft BASIC에서는 10780바이트를 사용했습니다.[c]8k ROM에 장착한다는 목표를 달성하기 위해 새로운 BASIC은 카트리지의 언어 자체와 시스템의 10k [11]ROM에 2k를 사용하는 별도의 FP 라이브러리의 두 부분으로 구성됩니다.2k 이내로 맞추기 위해 부동소수점 시스템은 6자리 형식만 지원했습니다.

아타리는 제안을 받아들여 1978년 10월에 사양이 확정되었을 때, 러프톤과 오브라이언은 새로운 [4]언어에 대한 작업을 시작했다.계약서에는 1979년 4월 6일 또는 그 이전에 납품일이 명시되어 있으며 파일 매니저 시스템(이후 DOS 1.0으로 [11]알려짐)도 포함되어 있습니다.아타리의 계획은 마이크로소프트 베이직의 초기 8K 버전을 1979년 CES에 가져간 후 생산을 위해 아타리 베이직으로 전환하는 것이었다.계약서의 보너스 조항 덕분에 개발이 빠르게 진행되었고, 초기 버전은 10월에 납품되었습니다.Atari는 마이크로소프트가 [12]아닌 8K 카트리지 버전을 CES에 가져갔다.Atari Microsoft BASIC은 이후 별도 [13]제품으로 출시되었습니다.

릴리스

Shepardson이 CES 데모를 위해 Atari에게 준 버전은 최종 버전이 아닙니다.데모를 배포한 후 몇 주 후 최종 배포까지 Shepardson은 [12]코드의 몇 가지 버그를 수정했습니다.Shepardson 모르게, 아타리 이미 제조에는 CES버전을 보냈다.[14]

이 버전은 나중에 리비전 A로 알려졌습니다.메모리를 카피하는 서브루틴내의 주요한 버그가 포함되어 있습니다.정확히 256바이트의 코드 행을 삭제하면, 행업이 발생합니다.이것은 코드 또는 명령어의 다음 행이 입력될 때까지 트리거되지 않았기 때문에 "2 행 행 행업"이라고도 합니다.를 눌러서는 수정할 수 없습니다.Reset 키를 [15]누릅니다.

리비전 B는 리비전A의 모든 주요 오류를 수정하려고 1983년에 600XL 및 800XL 모델에서 내장 ROM으로 출시되었습니다.메모리 카피 버그를 수정하는 동안, 프로그래머는 행 삽입 부분에서 같은 패턴의 코드를 발견하고, 같은 수정을 적용했습니다.이것에 의해, 원래의 버그가 이 코드에 도입되었습니다.새로운 행을 삽입하는 것은 오래된 행을 삭제하는 것보다 훨씬 일반적이기 때문에 변경으로 [15]크래시 횟수가 대폭 증가했습니다.리비전 B에는 프로그램마다 16바이트를 추가하는 버그도 포함되어 있습니다.SAVEd 및LOAD ed를 사용하면 작은 [16][17]프로그램이라도 머신의 메모리가 부족하게 됩니다.Atari의 맵핑은 이것을 「대단한 버그」[17]라고 표현하고, 리비전 B의 소유자에게 「장난하지 말고, 카트리지로 입수 가능한 새로운 ROM」을 Atari로부터 입수해 주세요.이 매뉴얼에서는 카트리지가 없는 사람들을 [18]위해 리비전 B를 리비전 C에 패치하기 위한 입력 프로그램을 제공하고 있습니다.

리비전 C는 리비전 [17]B의 메모리 누수를 배제합니다.800XL의 최신 버전과 XEGS를 포함한 모든 XE 모델에 내장되어 있습니다.리비전 C는 [17]카트리지로도 사용할 수 있었습니다.

버전을 확인하려면 다음을 입력하여 판별할 수 있습니다.PRINT PEEK(43234)READY 프롬프트에 표시됩니다.그 결과는162리비전 A의 경우96리비전 B의 경우234를 참조해 주세요.[19]

묘사

프로그램 편집

구문 오류는 행 입력 후 즉시 보고됩니다.

대부분의 가정용 컴퓨터 BASIC과 마찬가지로 Atari BASIC도 라인 에디터 주위에 고정되어 있습니다.프로그램 행은 최대 3개의 실제 화면 행(최대 40자, 총 120자)을 사용할 수 있습니다.현재 화면 라인이 어느 BASIC 프로그램 라인에 속하는지 편집기가 자동으로 추적하여 커서를 자유롭게 이동할 수 있습니다.예를 들어 커서가 현재 행 30에 배치되어 있고 사용자가 행 20에 커서 업을 사용하고 있는 경우, 그 시점으로부터의 편집은 행 20에서 실행됩니다.

Atari BASIC의 에디터는 MS에서 파생된 버전에서는 볼 수 없었던 많은 오류를 발견합니다.에러가 발견되면, 에디터는 에러 근처의 텍스트를 반전 비디오로 강조 표시해, 행을 다시 표시합니다.오류는 [20]설명서에 인쇄된 설명과 함께 숫자 코드로 표시됩니다.라인 에디터의 동작방식으로 인해 사용자는 오류를 즉시 수정할 수 있습니다.위의 예에서는 (와 함께)PRUNT), 커서를 위쪽으로 이동하면 오류를 수정할 수 있습니다.U를 입력하고(에디터에는 덮어쓰기 모드만 있습니다), 을 누릅니다.

선두 번호(0 ~ 32767)[21]로 입력된 행이 현재 프로그램에 삽입되거나 기존 행이 대체됩니다.행 번호가 없는 경우 인터프리터는 번호 -1(8000)을 할당하고16 명령어는 즉시 "즉시 모드"로 실행됩니다.RUN명령어는 저장된 프로그램을 가장 작은 줄 번호부터 실행합니다.Atari BASIC을 사용하면 모든 명령을 두 모드에서 모두 실행할 수 있습니다.예를들면,LIST프로그램 내에서 사용할 수 있지만 많은 인터프리터에서는 즉시 모드에서만 사용할 수 있습니다.

입력 시 Palo Alto Tiny BASIC에서 설정한 패턴을 사용하여 키워드를 생략할 수 있으며, 단어 내 임의의 지점에 마침표를 입력할 수 있습니다.그렇게L.로 확장됩니다.LIST그대로LI.. 글자 수만큼만 입력하면 약어가 고유하기 때문에PLOT필요.PL.왜냐하면 P라는 한 글자가 유일하지 않기 때문입니다.줄임말을 전개하기 위해 토큰라이저는 예약된 단어 목록을 검색하여 제공된 부분과 일치하는 첫 번째 단어를 찾습니다.보다 일반적으로 사용되는 명령어는 예약된 단어 목록에서 먼저 발생합니다.REM처음에 (라고 입력할 수 있습니다).). 프로그램이 나중에 실행되면LISTed는 항상 다음 세 가지 예외를 제외하고 전체 단어를 작성합니다.PRINT동의어가 있습니다.?;GOTO동의어가 있습니다.GO TO; 및LET에는 빈 문자열이라는 동의어가 있습니다(따라서).10 LET A = 10그리고.10 A = 10같은 의미입니다).이들은 개별 토큰이므로 프로그램 목록에 그대로 남아 있습니다.MS BASIC도 허용?의 줄임말로서PRINT그러나 이것은 같은 토큰을 사용했기 때문에 다시 확장되었습니다.PRINT언제LISTed, 동의어가 아닌 약자로 취급합니다.

토큰라이저

사용자가 편집 중에 누르면 현재 라인이 580 [21]~5FF의16 메모리의 BASIC 입력 라인 버퍼에 복사됩니다.Atari BASIC의 토큰라이저는 텍스트를 스캔하여 각 키워드를 단일 바이트 토큰으로 변환합니다(예:PRINT16 각 숫자가 [22]6바이트 부동소수점 값까지, 각 변수 이름이 테이블로 변환되는 등 행이 해석하기 쉬운 형식으로 완전히 변환될 때까지 계속됩니다.결과는 80, [21]81에16 저장된 LOMEM 포인터에 의해 지시되는 최소 빈 메모리의 첫 256바이트에 위치한 출력 버퍼에 저장됩니다.그런 다음 토큰라이저의 출력이 재배치됩니다.프로그램은 해석 [d]트리로 저장됩니다.

Shepardson은 이 완전한 토큰화 개념을 "사전 컴파일 인터프리터"[23]라고 불렀습니다.결과적으로 토큰화된 코드를 사용하면 런타임 중에 구문 분석이 제거되므로 실행 속도가 빨라집니다.0이나 1과 같은 작은 상수는 각각 6바이트로 원본 텍스트보다 길다는 단점이 있습니다.

일련의 포인터(주소)는 다양한 데이터를 나타냅니다.변수명은 가변명 테이블(VNTP-82,8316)에 격납되어 그 값은 가변값 테이블(VVTP-86,87을16 가리킴)에 격납됩니다.이 방법으로 변수 이름을 간접함으로써 변수에 대한 참조는 적절한 테이블 내의 엔트리를 처리하는 데 1바이트만 필요합니다.문자열 변수에는 실행 시 스택(RUNSTK – 8E, 8F16)이 루프문의 회선번호를 저장하기 위해 사용하는 것과 마찬가지로 자체 영역(STARP – 8C, 8D로16 지정)이 있습니다.FOR...NEXT및 서브루틴(GOSUB...RETURN마지막으로 BASIC 메모리 사용량의 종료는 MEMTOP – 90, 9116) 포인터에 저장되어 있는 주소로 나타납니다.

수학 함수

Atari BASIC에는 사인, 코사인 및 아크 탄젠트의 세 가지 삼각 함수가 포함되어 있습니다. DEG그리고.RAD이러한 함수에 라디안 또는 도를 사용할지 여부를 설정합니다. 기본값은 라디안입니다.반올림, 로그, 제곱근 등 8개의 추가 함수가 있습니다.랜덤 함수RND는 0 ~ 1 의 수치를 생성합니다.파라미터는 사용되지 않습니다.

문자열 처리

Atari BASIC은 Hewlett-Packard [24]BASIC의 문자열 처리 시스템을 복사했습니다.여기서 기본 데이터형은 단일 문자이고 문자열은 문자 배열입니다.내부적으로 문자열은 문자열의 첫 번째 문자에 대한 포인터와 그 길이로 나타납니다.문자열을 초기화하려면 문자열을 최대 길이로 DIMension해야 합니다.예를 들어 다음과 같습니다.

10 DIM A$(20) 20 인쇄하다 "메시지 입력: "; 30 입력 A$ 40 인쇄하다 A$ 

이 프로그램에서는 20글자의 문자열이 예약되어 있으며 문자열 길이를 초과하는 모든 문자는 잘립니다.문자열의 최대 길이는 32,768자입니다.문자열 배열은 지원되지 않습니다.

배열 인덱싱 기능 또는 슬라이싱을 사용하여 문자열에 액세스합니다. A$(1,10)의 첫 번째 10글자의 문자열을 반환합니다.A$. 배열은 1 색인으로 되어 있기 때문에 길이 10의 문자열은 1로 시작하여 10으로 끝납니다.슬라이싱 기능은 단순히 할당된 기존 메모리 내에서 시작점과 끝점에 대한 포인터를 설정합니다.

배열은 초기화되지 않으므로 할당 시 메모리에 있던 모든 데이터가 숫자 배열 또는 문자열에 포함됩니다.다음 트릭은 빠른 문자열 초기화를 가능하게 하며 불필요한 가비지를 메모리의 큰 영역을 클리어하는 데도 유용합니다.숫자 배열은 FOR...로만 지울 수 있습니다.다음 루프:

10 REM X 1000자로 A$ 초기화 20 DIM A$(1000) 30 A$='X':A$(1000)=A$:A$(2)=A$ 

문자열 연결은 다음 예시와 같이 작동합니다.대상 문자열은 결합된 문자열을 저장할 수 있을 정도로 커야 합니다. 그렇지 않으면 다음과 같은 오류가 발생합니다.

10 DIM A$(12),B$(6) 20 A$="안녕하세요":B$="저기!" 30 A$((A$)+1)=B$ 40 인쇄하다 A$ 

DATA 문의 값은 쉼표로 구분되며 입력되지 않습니다.따라서 DATA 문의 문자열은 일반적으로 따옴표로 둘러싸여 있지 않습니다.따라서 데이터 항목에 쉼표를 포함할 수는 없지만 이중 따옴표를 포함할 수 있습니다.DATA 문의 숫자 값은 문자열로 읽히거나 읽을 변수의 유형에 따라 숫자로 읽힙니다.READ 문은 배열 변수와 함께 사용할 수 없습니다.

입력/출력

Atari OS에는 CIO(Central Input/Output)라고 하는 주변기기 입출력(I/O)용 서브시스템이 포함되어 있습니다.대부분의 프로그램은 공통 인터페이스를 준수하기 때문에 사용할 수 있는 장치와 독립적으로 쓸 수 있습니다. 당시에는 가정용 컴퓨터에서는 드물었습니다.Atari OS를 사용하는 Atari BASIC 및 기타 프로그램에서 자동으로 사용할 수 있는 새로운 장치 드라이버를 쉽게 작성할 수 있으며 기존 드라이버를 새로운 드라이버로 대체하거나 증강할 수 있습니다.대체품E: 예를 들어 ROM의 것을 대체하여 80컬럼 디스플레이를 제공하거나 회선이 반환될 때마다 체크섬을 생성(타입 입력 프로그램 목록 확인에 사용)할 수 있습니다.

Atari BASIC은 OPEN #, CLOSE #, PRINT #, INPUT #, GET #, PUT #, NOTE #, POINT # 및 XIO # 예약 단어를 사용하여 CIO 액세스를 지원합니다.OS에는 간단한 그래픽 그리기 기능을 위한 루틴이 있지만, 모든 것을 특정 BASIC 키워드로 사용할 수 있는 것은 아닙니다. 그리기에 대한 PLOT DRAWTO는 지원되지만 원시 선형 기하학적 모양에 대한 영역 채우기를 제공하는 명령은 지원되지 않습니다.채우기 기능은 일반적인 CIO 진입점을 통해 사용할 수 있습니다. 이 진입점은 BASIC 명령 XIO를 사용하여 호출됩니다.

BASIC OPEN #은 I/O 액세스를 위한 장치를 준비합니다.

10 REM BAS에서 읽을 수 있도록 채널 1의 카세트 장치를 엽니다.IC 20 열다. #1,4,0,"C:MYPROG.DAT" 

여기서 OPEN #은 "채널 1이 비어 있는지 확인"을 의미합니다. C: 드라이버를 호출하여 장치를 준비합니다(이것에 의해 카세트 테이프 스풀은 장력으로 설정되고 카세트 테이프 플레이어는 "일시 정지"된 상태로 헤드가 전진합니다).4는 "읽기"를 의미합니다(기타 코드는 8이고 12 = 8 + 4는 "읽고 쓰기"입니다).세 번째 숫자는 보조 정보로, 필요하지 않을 경우 0으로 설정됩니다.C:MYPROG.DAT는 디바이스의 이름 및 파일 이름입니다.카세트 드라이버에서는 파일명이 무시됩니다.물리 디바이스에는 번호(주로 디스크, 프린터 및 시리얼 디바이스)가 포함되어 있기 때문에, 「P1:」은 플로터, 「P2:」는 데이지 휠 프린터, 또는 「D1:」는 1개의 디스크 드라이브, 「D2:」등입니다.존재하지 않는 경우는 1로 간주됩니다.

LPRINT 문에서는, 프린터에 문자열을 송신합니다.

A 는, 키보드 드라이버에 의해서 보관 유지되고 있는 메모리 위치를 PEEK 에 의해서 읽히거나, 파일로서 여는 것으로 읽힙니다(예를 들면,OPEN 1,4,0,"K:":GET #1,A$). 후자는 키 입력을 기다립니다.

BASIC에서 입력하면 Atari DOS 명령어메뉴로 넘어갑니다.현재 디스크에서 메모리 스왑 파일 기능이 활성화되지 않은 경우 저장되지 않은 프로그램은 손실됩니다.BASIC 내에서 디스크디렉토리를 표시하는 명령어는 없습니다.이 명령어는 DOS를 종료하여 표시해야 합니다.

그래픽스 및 사운드

Atari BASIC은 사운드(SOUND 문을 통해), 그래픽(GRAPHICS, SETCOLOR, COLOR, PLOWTO), 컨트롤러(STIC, STRIG, PADLE, PTRIG)[25]를 지원합니다.SOUND 문은 음량, 피치 및 왜곡에 대한 파라미터를 사용하여 하드웨어의 4개의 사각파 채널 중 하나를 설정합니다.

고음 해상도, 하이패스 필터, 디지털 사운드 및 파형, 플레이어/미사일 그래픽(스프라이트), 재정의된 문자 세트, 스크롤 및 커스텀 그래픽 모드와 같은 하드웨어의 고급 기능은 BASIC에서 지원되지 않습니다.이러한 기능에는 기계어 루틴 또는 PEEK/POKE 문장이 필요합니다.하드웨어에서 지원되는 17개의 기본 문자/그래픽 모드 중 일부는 OS ROM이 지원하지 않기 때문에 Atari 400/800의 BASIC에서 간단히 액세스할 수 없습니다.여기에는 멀티컬러 문자 모드(ANTIC 모드 4 및 5), 내림차순 문자 모드(ANTIC 모드 3) 및 최고 해상도의 2 및4 색 모드(ANTIC 모드 C 및 E, 160 x 192 픽셀)가 포함됩니다.액세스하려면 PEEK/POKE 또는 기계어를 사용하여 수동으로 안티C 레지스터 및 디스플레이 목록을 설정하는 방법밖에 없습니다.XL/XE의 OS ROM 에서는,[26] 올바르게 동작하려면 , RAM 에 정의되고 있는 문자 세트가 필요한 ACTIUS 모드 3 을 제외하고, 이러한 모드가 서포트되고 있습니다.

BASIC의 비트맵 모드는 일반적으로 화면 하단의 마지막 4 행을 차지하는 텍스트 창이 설정되어 사용자가 프롬프트를 표시하고 프로그램에 데이터를 입력할 수 있습니다.GRAPHICS 문에서 호출되는 모드 번호에 16을 추가하면 화면 전체가 비트맵 모드(예: GRAPHICS 8+16)가 됩니다.전체 화면의 비트맵 모드가 호출되면 Atari BASIC은 프로그램 실행이 종료될 때 정상적으로 텍스트 모드로 전환되므로 사용자가 블라인드 명령을 입력하거나 컴퓨터를 리셋하여 화면을 이스케이프할 필요가 있습니다.

비트맵 좌표는 0 ~ 최대 행/열에서 1을 뺀 범위이므로 Mode 6(160x192)에서는 픽셀의 최대 좌표가 159 및 191이 될 수 있습니다.Atari BASIC이 모드에 대해 허용된 좌표를 초과하여 플롯을 시도하면 런타임 오류가 발생합니다.

고도의 기술

회선 라벨

Atari BASIC은 숫자 변수와 식을 사용하여 회선 번호를 제공할 수 있습니다.GOTO그리고.GOSUB명령어를 지정합니다.예를 들어, 화면을 지우는 서브루틴은 다음과 같이 쓸 수 있습니다.GOSUB CLEARSCREEN보다 알기 쉬운 것은,GOSUB 10000.

메모리 조작 방법으로서의 문자열

문자열의 기본 주소는 변수 테이블에 저장됩니다.문자열 주소는 RAM의 임의 영역을 가리키도록 리디렉션할 수 있습니다.이것에 의해, 신속한 메모리 전환 루틴이 가능하게 되어, BASIC 로부터 화면이나 플레이어/미사일 그래픽에 사용되는 메모리에 서브스트링 할당을 적용할 수 있습니다.아타리 베이직에서 직접 플레이어/미사일 이미지를 빠르게 수직 이동시킬 때 특히 유용합니다.

DATA/RESTORE를 통한 랜덤 액세스

숫자 변수 및 식을 다음 매개 변수로 사용할 수 있습니다.RESTORE스테이트먼트, 허가DATA다음과 같은 코드를 통해 임의로 액세스되는 문장RESTORE ROOMBASE+ROOMNUMBER:READ DESCRIPTION$, TREASURE$, EXITS이것은, 스태틱 문자열 어레이의 에뮬레이션에도 사용할 수 있습니다.RESTORE STRBASE+INDEX:READ A$:PRINT A$.

TRAP 에 의한 에러 처리

TRAP오류 발생 시 문이 행 번호로 이동하므로 수동 오류 체크가 필요하지 않습니다.예를 들어, 화면에 그래픽을 그릴 때 선이 현재 그래픽 모드의 화면 경계를 초과하는지 확인할 필요가 없습니다.이 에러 상태는 트랩 할 수 있습니다.또, 필요에 따라서 에러를 처리할 수도 있습니다.

포함한다

ENTER명령어는 사용자가 입력한 것처럼 디바이스에서 소스 코드를 읽어 현재 프로그램에 병합합니다.이를 통해 프로그램을 섹션별로 저장할 수 있습니다.LIST를 사용하여 읽습니다.ENTER기존 코드를 Marge 또는 치환합니다.겹치지 않는 행 번호 블록을 사용함으로써 프로그래머는 서브루틴 라이브러리를 구축하고 필요에 따라 새로운 프로그램으로 통합할 수 있습니다.

자체 수정 코드

EOF에 도달할 때까지 화면에서 입력을 반복적으로 읽도록 편집기를 설정할 수 있습니다.이를 통해 프로그램은 새로운 프로그램 코드를 작성한 후CONT새 코드의 시작 부분에 화면 커서를 배치하고 화면에 문구를 표시합니다.STOP실행 중인 프로그램을 통해 새 코드가 읽혀지고 실행이 계속됩니다.CONT진술.

임베디드 기계어

Atari BASIC은 문자열 또는 에 저장된 머신 코드 서브루틴을 호출할 수 있습니다.POKE에드를 기억하다주소 153610(600)에서16 시작하는 256 바이트 영역이 이 목적으로 많이 사용됩니다.

머신 코드는 에서 호출됩니다.USR기능.첫 번째 파라미터는 서브루틴의 주소이며 다음 값은 파라미터입니다.코드가 다음 문자열에 저장되어 있는 경우ROUTINE$두 가지 매개 변수를 사용하여 호출할 수 있습니다.ANSWER=USR(ADR(ROUTINE$),VAR1,VAR2).

파라미터는 에서 지정된 순서대로 16비트 정수로 하드웨어 스택에 푸시됩니다.USR낮은 바이트, 높은 바이트 순서로 호출합니다.인수 수를 나타내는 마지막 바이트가 푸시됩니다.기계어 코드가 이러한 값을 제거한 후RTS설명.16비트 값은 주소 21210, 21310(D416, D516)에 배치함으로써 BASIC으로 되돌릴 수 있다.

성능

이론적으로 Atari BASIC은 MS 패턴에 근거해 현재의 BASIC보다 빠르게 동작해야 합니다.소스 코드를 입력할 때 소스 코드가 완전히 토큰화되므로 토큰화 및 해석 절차 전체가 이미 완료되어 있습니다.복잡한 수학적 연산도 실행할 준비가 되어 있으며 수치 상수는 이미 내부 40비트 형식으로 변환되어 있으며 변수 값은 검색할 [e]필요 없이 주소로 검색됩니다.이러한 이론적 이점에도 불구하고, 실제로 Atari BASIC은 대부분의 다른 가정용 컴퓨터 BASIC보다 속도가 느립니다.[27]

Byte 매거진의 Sieve of Eratostenes와 David H가 작성한 Creative Computing 벤치마크 테스트의 두 가지 널리 사용되는 벤치마크입니다. 아타리는 성능 면에서 거의 최하위권이었고, CPU는 동일하지만 동작 속도는 어느 쪽이든 약 2배였지만, 현대의 Apple II나 Commodore [28]PET보다 훨씬 느렸습니다.Sinclair ZX81과 같은 비교적 느린 기계와 심지어 프로그램 가능한 [29]계산기에도 뒤처져 있었다.

그 언어의 저속의 대부분은 세 가지 [27]문제에서 비롯된다.

첫 번째는 부동 소수점 연산 루틴이 제대로 최적화되지 않았다는 것입니다.Ahl 벤치마크에서는 단일 지수 연산이 기계의 저조한 [27]표시의 대부분을 차지했습니다.부동소수점과 16비트 정수 사이의 변환도 특히 느립니다.내부적으로 이러한 정수는 다른 몇 가지 작업과 함께 행 번호 및 배열 인덱싱에 사용되지만 토큰화된 프로그램 내의 숫자는 BCD([30]Binary-Coded Decimal) 형식으로 저장됩니다.의 회선 번호 등, 어느쪽인가를 발견했을 경우.GOTO 100BCD 값은 최대 3500마이크로초까지 걸리는 [31]정수로 변환됩니다.

또 다른 문제는 Atari BASIC의 브랜치 구현 방식입니다.에서 브랜치를 실행하려면GOTO또는GOSUB인터프리터는 프로그램 전체를 검색하여 일치하는 행 [32]번호를 찾습니다.반면 MS에서 파생된 BASIC의 최신 버전은 지점 타깃의 회선 번호가 클 경우 현재 회선에서 앞으로 검색되므로 지점 성능이 평균 2배 향상됩니다.

관련성이 있고 더 심각한 문제는 다음과 같은 구현입니다.FOR...NEXT루프가 있는 경우FOR문이 실행되고 Atari BASIC이 회선번호를 기록합니다.그때마다NEXT도달하면 마지막과 [27]같은 위치에 있어도 프로그램에서 해당 행을 검색합니다.다른 모든 BASIC은 대신 의 메모리 위치를 기록합니다.FOR검색하지 않아도 바로 돌아갈 수 있습니다.

이러한 저조한 실적의 이유는 주요 저자인 빌 윌킨슨의 말을 인용하면 가장 잘 드러납니다. 1982년에 그는 다음과 같이 말했습니다.

개인적으로는 BASIC 등의 통역 언어가 빠를 필요가 있다고 확신한 적이 없습니다.작성자...아타리 베이직은 지금까지 만들어진 언어 중 가장 느리다고 주장해 왔습니다.나의 첫 번째 충동은 "누가 신경써?"[33]라고 말하는 것이었다.

이러한 철학은 게임을 만드는 데 필요한 성능을 갖도록 특별히 설계된 오리지널 Apple I용 스티브 워즈니악Apple BASIC과 대조될 수 있습니다.

하드웨어 아케이드 게임을 디자인한 후 BASIC에서 프로그래밍할 수 있다는 것이 세상을 [34]바꿀 것이라는 것을 알았습니다.

이러한 문제의 일부 또는 전부를 해결한 플랫폼에는 몇 가지 서드파티제의 BASIC이 등장했습니다.여기에는 Wilkinson의 BASIC XL이 포함되어 있어 바이트 벤치마크 시간이 194초에서 58초로 [27]3배 이상 단축되었습니다.Ahl 벤치마크에서 Atari BASIC은 405초, Turbo-BASIC XL은 정확히 동일한 코드가 41.6초 소요되어 크기가 대폭 [35]향상되었습니다.

Microsoft BAS와의 차이점IC

  • 구문이 체크되고 행 엔트리에서 오류가 즉시 강조 표시됩니다.
  • 변수 이름은 임의 길이일 수 있으며 모든 문자가 유의합니다.
  • 다음 키워드는 Atari BAS에 없습니다.IC:INKEY$,CLS,DEF FN,SPC,TAB,ELSE.
  • 모든 어레이는 사용하기 전에 치수를 지정해야 합니다.Microsoft BASIC은 디멘션을 사용하지 않는 경우 어레이를 디폴트로 10개의 요소로 설정합니다.
  • 문자열 변수는 문자 배열로 처리되며 사용하기 전에 치수를 지정해야 합니다.MS BASIC은 히프에 문자열을 저장하며 가비지 수집을 위해 일시 정지할 수 있습니다.
  • 기능LEFT$,MID$,그리고.RIGHT$문자열 인덱싱으로 대체됩니다.
  • 문자열 연결을 위한 연산자가 없습니다.
  • 문자열 배열은 없습니다.
  • 정수 변수는 지원되지 않습니다.
  • 비트 연산자는 없습니다.
  • INPUT는 프롬프트를 허용하지 않습니다.
  • PRINT라고 줄여서 말할 수 있다?Atari BASIC은 이를 토큰화하지 않습니다.PRINT물음표로 남습니다.
  • 대상GOTO그리고.GOSUB변수 또는 식일 수 있습니다.
  • RESTORE숫자 상수, 변수 또는 식을 매개 변수로 사용할 수 있으며, 이로 인해 다음이 발생할 수 있습니다.READ지정된 행 번호에서 시작하다
  • FOR..NEXTAtari BASIC의 loops는 에 의해 참조되는 변수 이름을 가져야 합니다.NEXTMicrosoft BASIC에서는 필요 없는 스테이트먼트를 사용할 수 있습니다.
  • 변수 여러 개를 사용할 수 없습니다.NEXTMicrosoft BASIC에 있는 그대로의 스테이트먼트(예:NEXT X,Y).
  • LIST는 마이너스 기호 대신 콤마를 사용하여 범위를 구분합니다.

키워드

「 」를 참조해 주세요.

메모들

  1. ^ Apple Soft BASIC은 메모리 위치 $D000에서 $F7FF까지 총 10240 바이트를 점유했습니다.
  2. ^ Commodore BASIC은 메모리의 두 가지 주요 영역인 $A000~$B를 사용했습니다.FFF 및 $E000~$E4D2.[9]
  3. ^ 애플소프트는 F7달러~D000달러 수준이었다.FF([10]FP 라이브러리 포함)
  4. ^ 해석 트리는 테이블 세트로 구현되지만, 이는 실제로 구현 세부 사항입니다.
  5. ^ 이것이 MS-BASIC이 변수 이름에 유효한 문자가2개밖에 없는 이유입니다.검색 시간을 단축하기 위해 MS-BASIC은 이름에 ASCII가 2바이트밖에 없는 목록에 저장됩니다.

레퍼런스

인용문

  1. ^ a b Lorenzo, Mark (2017). Endless Loop: The History of the BASIC Programming Language. Philadelphia: SE Books. p. 106. ISBN 978-1974-27707-0.
  2. ^ 윌킨슨, 오브라이언 & 러프턴 1983.
  3. ^ 2004년 12월
  4. ^ a b c d e 윌킨슨 1982 페이지 9
  5. ^ Steil, Michael (20 October 2008). "Create your own Version of Microsoft BASIC for 6502". Some Assembly Required.
  6. ^ 윌킨슨 1982, 페이지 iv-v
  7. ^ 크롬코 1978년
  8. ^ 크롬코 1978, 페이지 2, 3
  9. ^ "Memory Map".
  10. ^ "Memory Map – Apple II with Applesoft BASIC Loaded".
  11. ^ a b 윌킨슨 1982년, 대
  12. ^ a b 윌킨슨 1982, 페이지 10
  13. ^ Cherry, Charles (June 1987). "BASIC Bonanza". Antic.
  14. ^ 윌킨슨 1982 페이지 6
  15. ^ a b "Atari BASIC Bugs". Compute!. July 1986. p. 10.
  16. ^ a b Radcliff, Matthew (September 1995). "Revision C Converter". Antic.
  17. ^ a b c d 채드윅 1985, 230페이지
  18. ^ 채드윅 1985, 250~251페이지.
  19. ^ Hardy, Bob (February 1993). "Keycode Getter". Atari Classics. p. 18.
  20. ^ 매뉴얼 1980, 부록 B.
  21. ^ a b c 크로포드 1982, 10.3페이지
  22. ^ 크로포드 1982, 10.6페이지
  23. ^ 윌킨슨, 오브라이언 & 러프턴 1983, 5페이지
  24. ^ HP 2000/Access BASIC Reference Manual (PDF). Hewlett Packard. May 1976. pp. e.
  25. ^ 매뉴얼 1980, 페이지 54
  26. ^ "ATR: chpt.15: Display Lists".
  27. ^ a b c d e 윌킨슨 1985, 페이지 139
  28. ^ Ahl, David (November 1983). "Benchmark comparison test". Creative Computing. pp. 259–260.
  29. ^ Ahl, David (January 1984). "Creative Computing Benchmark". Creative Computing. p. 12.
  30. ^ 윌킨슨, 오브라이언 & 러프턴 1983, 17페이지
  31. ^ 크로포드 1982 페이지 8.45
  32. ^ Winner, Lane (1982). "De Re Atari, Chapter 10: Atari BASIC". Atari, Inc.
  33. ^ Wilkinson, Bill (September 1982). "Insight: Atari". Compute!. p. 116.
  34. ^ Williams, Gregg; Moore, Rob (December 1984). "The Apple Story / Part 1: Early History". Byte. p. A71.
  35. ^ "Ahl's Benchmark?". 28 November 2007.

참고 문헌

외부 링크