애플소프트 BASIC
Applesoft BAS원저작자 | 마크 맥도날드 리크 베일랜드 |
---|---|
초기 릴리즈 | 전 ( |
안정된 릴리스 | 애플소프트 II / 1978; 전 ( |
운영 체제 | 애플 II 시리즈 |
유형 | Microsoft BASIC |
애플소프트 베이직(Applesoft BASIC)은 Microsoft BASIC의 방언으로, 마크 맥도널드와 릭 웨일랜드가 애플 II 시리즈 컴퓨터와 함께 개발했습니다.Integer BASIC을 대체하고 원본 Apple II 모델 이후의 모든 Apple II 시리즈 컴퓨터에서 ROM의 BASIC입니다.FP BASIC(부동소수점으로부터)라고도 불리는데, 이는 이 명령어를 호출하기 위해 사용되는 Apple DOS 명령어 때문입니다.INT
정수 BASIC의 경우.
애플소프트 베이직은 마이크로소프트가 공급한 것으로 애플과 마이크로소프트의 이름에서 유래했다.랜디 위긴튼을 포함한 애플 직원들은 마이크로소프트의 통역사를 애플 II에 적응시키고 몇 가지 기능을 추가했다.애플소프트의 첫 번째 버전은 1977년 카세트 테이프로 출시되었으며 고해상도 그래픽에 대한 적절한 지원이 없었다.애플소프트II는 카세트와 디스크, 애플II 플러스 및 후속 모델의 ROM에서 사용할 수 있도록 1978년에 출시되었습니다.Apple II의 고해상도 그래픽 모드를 지원하는 구문의 차이점이 있는 이 후자 버전은 보통 "애플소프트"라는 용어와 동의어입니다.
애플소프트 베이직용 컴파일러 TASC(애플소프트 컴파일러)는 [1]1981년 마이크로소프트에 의해 출시되었습니다.
역사
Steve Wozniak이 Apple II를 위해 Integer BASIC을 썼을 때, 그는 주로 게임을 쓰는 [2]것에 관심이 있었기 때문에 부동 소수점 산술 지원을 구현하지 않았다.1976년에 마이크로소프트는 MOS 테크놀로지 6502를 위한 마이크로소프트 베이직(Microsoft BASIC)을 개발했지만, 그 당시에는 그것을 사용하는 프로덕션 컴퓨터가 없었다.애플이 6502 머신을 가지고 있다는 것을 알고 마이크로소프트는 베이직 라이선스에 관심이 있는지 물었지만 스티브 잡스는 애플이 이미 가지고 있다고 답했다.
애플 II는 1977년 4월 서해안 컴퓨터 박람회에서 일반에 공개되었고 6월에 판매되기 시작했다.컴퓨터에 대한 가장 일반적인 고객 불만 중 하나는 BASIC의 부동소수점 [3]연산 부족이었다.더 문제가 된 것은 경쟁사인 코모도어 PET PC에 처음부터 부동소수점 대응 베이직 인터프리터가 있었다는 점이다.Wozniak은 부동소수점 기능을 추가할 수 있을 정도로 Integer BASIC을 잘 이해하고 있는 유일한 사용자로서 Disk II 드라이브와 컨트롤러, 그리고 Apple DOS에 대해 분주하게 움직이고 있었기 때문에, Apple은 Microsoft에 눈을 돌렸습니다.
보도에 따르면 애플은 애플소프트 베이직의 8년 라이선스를 마이크로소프트로부터 31,000달러에 취득했으며, 1985년 애플 매킨토시 버전의 [4]베이직의 권리와 소스코드를 마이크로소프트에 부여하는 계약을 통해 갱신했다.Applesoft는 Integer BASIC과 하위 호환되도록 설계되었으며 마이크로소프트의 6502 BASIC 구현의 핵심을 사용합니다. 여기에는 키 입력을 감지하기 위한 GET 명령어를 사용하여 프로그램 줄에 공백이 필요하지 않습니다.Applesoft BASIC은 Integer BASIC보다 느리지만 오래된 BASIC에는 없는 많은 기능이 있습니다.
- 원자 문자열:문자열은 더 이상 문자 배열이 아닙니다(Integer BASIC 및 C). 대신 가비지 수집 개체(Scheme 및 Java)입니다.이를 통해 문자열 배열이 허용됩니다.
DIM A$(10)
는 0 ~ 10의 번호가 매겨진 11개의 문자열 변수 배열을 만듭니다. - 다차원 배열(숫자 또는 문자열)
- 8비트 지수 및 31비트 유의하고 개선된 연산 능력을 가진 단정도 부동소수점 변수(트리거메트릭 및 로그 함수 포함)
- 고해상도 그래픽스용 명령어
DATA
스테이트먼트, 사용READ
그리고.RESTORE
명령어, 수치 및 문자열 값을 수량으로 나타내기 위한CHR$
,STR$
,그리고.VAL
문자열과 숫자 유형 간에 변환하는 함수(두 언어 모두 다음 문자가 있음)ASC
기능)- 사용자 정의 함수: 단일 파라미터로 BASIC으로 작성된 간단한 한 줄 함수
- Error-Traping: BAS에서 작성된 서브루틴을 통해 BASIC 프로그램이 예기치 않은 오류를 처리할 수 있도록 합니다.IC
반대로 애플소프트에는MOD
(남은) Integer BASIC의 연산자.
애플이 Microsoft 6502 BASIC의 소스 목록을 받았기 때문에 BASIC을 애플 II에 적응시키는 것은 지루한 작업이었고, 이는 오류가 있는 것으로 판명되었고 Integer BASIC 명령어 추가가 필요했습니다.애플은 6502 어셈블러가 없었기 때문에 개발팀은 전화선을 통해 컴파일러 서비스를 제공하는 콜컴퓨터에 소스 코드를 전송해야 했다.이것은 매우 지루하고 느린 프로세스였습니다.Call Computer가 기기 고장으로 소스 코드를 잃은 후 프로그래머 중 한 명인 Cliff Huston은 자신의 IMSAI 8080 컴퓨터를 사용하여 BASIC [5]소스를 교차 조립했습니다.
특징들
애플소프트는 Integer BASIC에서 물려받은 기능만 빼면 코모도어 베이직 2.0과 유사하다.Applesoft의 비트 연산자 부족과 같은 몇 가지 사소한 차이가 있습니다.그렇지 않으면 하드웨어 의존 기능을 사용하지 않는 대부분의 BASIC 프로그램은 양쪽 BASIC에서 실행됩니다.
PR# 문은 출력을 확장 카드로 리다이렉트하고 IN#은 확장 카드로부터의 입력을 리다이렉트 합니다.카드의 슬롯 번호는, 스테이트먼트내의 PR 번호 또는 IN 번호 뒤에 지정됩니다.슬롯에 카드가 없으면 컴퓨터가 행업합니다.PR#0은 출력을 40컬럼 화면으로 되돌리고 IN#0은 키보드로 되돌립니다.
PR# 문을 사용하여 출력을 프린터로 리다이렉트 할 수 있습니다(예:10 PR#x:PRINT"Hello!"
x 는, 프린터 포토 카드가 격납되어 있는 슬롯 번호입니다.BASIC 프로그램 목록을 프린터로 전송하려면PR#x:LIST
.
PR#6을 사용하면 Applesoft가 디스크 드라이브를 부팅합니다(디스크 II 컨트롤러는 어느 슬롯에도 설치할 수 있지만 보통 슬롯 6에 있습니다).PR#3은 80컬럼 카드가 있는 경우 80컬럼 텍스트모드로 전환됩니다.
Commodore BASIC과 마찬가지로 숫자 변수는 40비트 부동소수로 저장됩니다.각 변수에는 5바이트의 메모리가 필요합니다.프로그래머는 변수를 정수로서 지정할 수 있습니다.이 경우 변수는 2바이트를 사용하며 -32768 ~32767의 범위로 제한됩니다.그러나 BASIC은 내부적으로 변수들을 부동소수로 변환합니다.단, 각 퍼센트 기호는 프로그램 코드의 추가 바이트를 차지합니다.따라서 실제로 이 기능은 다음 경우에만 유용합니다.대용량 어레이 변수의 메모리 사용량을 줄입니다.
RND 함수는 0에서1 사이의 의사난수 분수 값을 생성합니다.RND(0)
마지막으로 생성된 난수를 반환합니다.음수가 있는 RND는 사용된 특정 음수에 의해 결정되는 시퀀스의 한 포인트로 점프합니다.임의의 양의 값을 가진 RND는 주어진 실제 값에 의존하지 않고 시퀀스의 다음 숫자를 생성합니다.사용자 키 입력을 기다리는 동안 시스템이 지속적으로 값을 순환하는 위치 $4E 및 $4F는 PEEK를 통해 RND의 시드(부정시)로 사용할 수 있는 진정한 랜덤 값을 제공할 수 있습니다.예를 들어 키보드 입력 후x=rnd(-1*(peek(78)+256*(peek(79)))
는 4E달러와 4F달러의 값을 가진 RND를 시드합니다.
Microsoft BASIC의 다른 구현과 마찬가지로 Applesoft는 프로그램 행의 공간(문자열 및 주석 외)을 폐기합니다. LIST
는 가독성을 위해 코드를 표시할 때 공백을 추가합니다.LIST는 모든 토큰화된 키워드의 앞뒤에 공간을 추가하기 때문에 읽기 쉽도록2개의 공간을 연속해서 생성하는 경우가 많습니다.
기본 프롬프트:INPUT
물음표입니다. PRINT
는 숫자 앞에 선행 공간을 추가하지 않습니다.
콜레코는 아담 홈 컴퓨터의 SmartBAS가IC는 애플소프트와 [6]소스코드가 호환되었다.Microsoft는 Laser 128 [7]클론용으로 Applesoft와 호환되는 BASIC을 VTech에 라이선스했습니다.
제한 사항
애플소프트 베이직은 애플II의 몇몇 초기 모델을 통해 문자열 이외에는 프로그램에서 소문자 사용을 지원하지 않았다. PRINT
유효한 명령어입니다만,print
그리고.Print
구문 오류가 발생합니다.
Applesoft에는 다음과 같은 6502 이외의 Microsoft BASIC 인터프리터 대부분에 공통되는 명령어와 기능이 없습니다.
INSTR
(문자열 내의 서브스트링 검색)PRINT USING
(인쇄 출력의 형식 번호)INKEY$
(프로그램을 정지하지 않고 키 입력을 확인합니다.단, $C000 로케이션의 PEEK는 이 액션을 수행합니다.)LPRINT
(화면이 아닌 프린터에 출력)
Applesoft에는 카세트 테이프를 통해 프로그램을 저장하고 로드하는 것 외에 파일 또는 디스크를 처리하는 명령이 없습니다.단순히 DOS로 알려진 Apple II 디스크 운영 체제는 이러한 기능을 제공하기 위해 언어를 강화합니다.
변수 이름의 처음 두 글자만 유의합니다.예를 들어, "LOW"와 "LOSS"는 동일한 변수로 취급되며, "LOWS"에 값을 할당하려고 하면 "LOW"에 할당된 값이 덮어씁니다.프로그래머는 또한 애플소프트 명령어 또는 연산인 연속 문자를 피해야 한다.변수의 이름 "SCORE"는 다음을 포함하는 것으로 해석됩니다.OR
부울 연산자, 렌더링됨SC OR E
. "BACKGROUND"에는 다음이 포함됩니다.GR
명령어를 사용하여 저해상도 그래픽모드를 기동하면 구문 오류가 발생합니다.
사운드 및 그래픽스
사운드 지원은 다음 옵션뿐입니다.PRINT
ASCII 벨 문자를 사용하여 시스템 경보 비프음을 울리고PEEK
명령어를 사용하여 스피커를 클릭합니다.그 언어는 반복된 클릭으로 바리톤 소리 이상을 낼 만큼 빠르지 않다.그러나 프로그램은 몇 옥타브에 걸친 전자 음악 톤을 생성하기 위해 호출되는 기계 언어 루틴을 저장할 수 있습니다.
애플소프트는 저해상도(로어) 그래픽 디스플레이를 지원하며, 가로로 40색 픽셀, 세로 방향으로 최대 48색 픽셀을 16색, 세로 방향으로 280x192색 고해상도(로어) 모드로 표시할 수 있습니다.픽셀을 플롯하고 수평선과 수직선을 그리는 명령이 있습니다.고용을 통해 임의의 선을 그릴 수 있습니다.벡터 기반 형상 테이블을 사용하여 고해상도 그래픽 모드에서 객체를 그릴 수 있습니다.수평 및 수직 선으로 구성되며 전체 모양을 더 큰 크기로 스케일링하고 원하는 각도로 회전할 수 있습니다.텍스트와 그래픽을 혼재시키기 위한 조항은 그래픽 디스플레이 하단에 있는 애플의 텍스트 4줄을 제외하고 존재하지 않습니다.
Apple IIe 이후 128k의 메모리를 탑재한 머신에서 "더블 하이 해상도" 모드를 사용할 수 있게 되었습니다.이 모드는 원래 고용 모드의 해상도를 기본적으로 복제하지만 16가지 색상의 Lores 팔레트를 모두 포함합니다.Applesoft는 이 모드를 직접 지원하지 않습니다.마찬가지로 Apple IIGS 고유의 모드도 지원되지 않습니다.
내선번호
Applesoft BASIC은 앰퍼샌드(&) 명령과 USR() 함수의 두 가지 방법으로 확장할 수 있습니다.이것들은 메모리에 격납되어 있는 저레벨의 머신 언어 루틴을 호출하는 2개의 기능으로, 고속이 필요하거나 메모리내의 임의의 기능이나 데이터에 직접 액세스 할 필요가 있는 루틴에 편리합니다.USR() 함수는 1개의 숫자 인수를 사용하며 계산된 함수 값을 도출하여 반환하도록 프로그래밍할 수 있으며 숫자 식에 사용할 수 있습니다.「&」는, 주소가 사전 정의되어 있는 CALL 의 줄임말입니다.
버그
에러 트래핑에 의한 결함ONERR
에러 처리 루틴이 기동하지 않으면 시스템스택이 리셋되지 않는 것을 의미합니다.RESUME
크래시로 [8]이어질 수 있습니다.내장된 의사 난수 생성기 함수RND
는 처음 전원을 켤 때 제너레이터가 시드되는 방식으로 인해 예측 가능한 일련의 출력을 생성할 수 있습니다.이 동작은, Apple의 메뉴얼에 기재되어 있는 기능에 [9]반하는 것입니다.
성능
Wozniak은 원래 Integer BASIC을 "Game BASIC"이라고 불렀습니다(새 [2]컴퓨터에 브레이크아웃 클론을 구현할 수 있도록 작성했습니다).Applesoft BASIC에서는 거의 액션 게임을 작성하지 않았습니다.대부분은 모든 연산에서 부동 소수점 숫자를 사용하면 성능이 저하되기 때문입니다.
Applesoft BASIC 프로그램은 링크된 라인 목록으로 저장됩니다.GOTO
또는GOSUB
선형 시간이 걸립니다.일부 프로그램에서는 호출 시간을 단축하기 위해 상단에 서브루틴이 있습니다.
Integer BASIC과 달리 Applesoft는 행 입력 시 소스 코드의 리터럴 번호(100 등)를 바이너리로 변환하지 않습니다.회선이 실행될 때마다 ASCII 문자열이 변환됩니다.변수 조회가 이 변환보다 빠른 경우가 많기 때문에 루프가 입력되기 전에 루프 내부에서 사용되는 숫자 상수를 변수에 저장하는 것이 더 빠를 수 있습니다.
샘플코드
Applesoft BASIC의 Hello World는 다음과 같이 입력할 수 있습니다.
10본문:집입니다 20?'HELLO WORLD'
콜론으로 구분된 경우 동일한 코드 줄에 여러 명령을 포함할 수 있습니다.:
).?
「PRINT」의 단축키로서 Applesoft BASIC(및 Microsoft BASIC의 거의 모든 버전)로 사용할 수 있습니다.단, 입력된 프로그램의 「」를 「PRINT」와 같은 토큰으로 변환해, 「PRINT」로 표시되는 경우는 「PRINT」로 표시됩니다.위의 프로그램이 에 표시됩니다.LIST
명령어:
10 본문 : 집입니다 20 인쇄하다 'HELLO WORLD'
애플소프트 II BASIC은 1978년 중반에 처음 출시되었을 때 카세트 테이프에 들어왔고 애플 II의 기계어 모니터를 통해 메모리에 로드할 수 있었다.1979년 확장판 Apple II+가 원본 II를 대체했을 때, Applesoft는 ROM에 포함되어 부팅 가능한 플로피 디스크가 없으면 자동으로 전원이 켜집니다.반대로 Integer BASIC은 ROM에서 삭제되어 DOS 3.3 디스크의 실행 파일로 변환되었습니다.
초기 진화
1977년 11월 레퍼런스 매뉴얼에 기재된 바와 같이 RAM에 저장된 오리지널 애플소프트는 최신 애플소프트 II보다 인터프리터 코드가 작으며 이후 애플소프트 II에서 사용된 10KB가 아닌 8µKB의 [11]메모리를 사용합니다.따라서 최신 메인스트림버전용으로 개발된 명령어 기능은 다수 없습니다.
- 애플의 고해상도 그래픽스(총 9개)를 지원하는 모든 명령어
- ONERR로 오류 트래핑 중...GOTO 및 재개
- 머신루틴 약자 "&" 호출
- 화면 클리어 HOME(시스템 ROM 루틴 호출)
- 텍스트 출력 컨트롤 NORMAL, INVERse, FLASH 및 SPEED=
- print-space 함수 SPC()는 매뉴얼에서 예약된 단어에 나열되어 있지만 달리 문서화되어 있지 않습니다(TAB() print-function은 문서화되어 있습니다).
- 숫자 배열 카세트 테이프 저장소: STORE 및 RECAL
- 디바이스 응답: WAIT
또한 애플의 Integer BAS에 이미 존재했던 몇 가지 최신 버전도 있습니다.IC:
- 프로그램 라인 삭제: DEL
- 머신루틴 액세스: CALL
- 주변기기 액세스:IN# 및 PR# (단, 예약어 중 #이 없는 IN은 표시됨)
- 메모리 범위 제어: HIMEM: 및 LOMEM:
- 디버깅 실행 트래킹: TRACE 및 NOTRACE
- 화면 배치: HTAB 및 VTAB
- 서브루틴이 POP를 중단합니다.
- 아날로그 컨트롤러를 읽기 위한 PDL() 및 저해상도 그래픽스 화면을 읽기 위한 SCRN() 기능(모두 시스템 ROM 루틴에 액세스함)
또한 저해상도 그래픽 명령어는 Integer BASIC/Aplesoft II와 다른 이름을 가지고 있습니다.GR, COLOR=, PLOT, HLIN, VLIN은 각각 PLTG, PLTC, PLTP, PLTH, PLTV로 불릴 정도로 모든 명령어는 PLTx 형식입니다.텍스트 모드로 돌아가기 위한 명령어(다른 버전에서는 TEX로 알려져 있음)는 단순히 TEX이며, 프로그램 행의 마지막 문이어야 한다는 조건이 붙어 있습니다.
Applesoft BASIC 1.x는 최신 Applesoft II보다 Microsoft의 6502 BASIC 코드에 가까웠습니다.메모리 사이즈 프롬프트를 유지하고 Microsoft 저작권 알림을 표시했습니다.Integer BASIC과의 일관성을 유지하기 위해 Microsoft 코드의 "OK" 프롬프트는 ]문자로 대체되었습니다.또한 Applesoft 1.x는 lores 그래픽명령어와 교환하여 assignment 스테이트먼트에서 REM 스테이트먼트와 LET 키워드를 디세블로 하는 경우에도 로드 시 사용자에게 프롬프트를 표시합니다.
USR() 함수도 다르게 정의되어 부재 CALL 명령의 스탠드인으로 기능합니다.이 인수는 기계어 루틴에 수치를 전달하기 위한 것이 아니라 루틴 자체의 콜주소입니다.주소를 사전에 정의하는 「훅」은 없습니다.설명서의 몇 가지 예에서는 모두 이 기능을 사용하여 "시스템 모니터 ROM" 루틴에 액세스하거나 짧은 사용자 루틴을 사용하여 ROM 루틴을 조작합니다.함수 자체에 의해 반환되는 값을 계산하는 코드에 대한 언급은 없습니다. 함수는 항상 "dummy" 변수에 할당되어 있으며, 이 변수는 사용자 코드에 의해 값을 설정하기 위한 액션 없이 의미 없는 값을 반환받을 뿐입니다.값을 반환하는 액세스된 ROM 루틴(예에서는 PDL() 및 SCRN() 함수의 서비스를 제공하는 루틴)도 후속 문에서 별도로 PEK되는 위치에 사용자 루틴에 의해 값이 저장될 뿐입니다.
Integer BASIC 및 Applesoft II와 달리 부울 연산자 AND, OR 및 NOT는 16비트 정수 값에 대해 비트 연산을 수행합니다.이 범위를 벗어나는 값이 지정되면 오류가 발생합니다.
OUT 및 PLT(및 앞서 언급한 IN)라는 용어는 예약된 단어 목록에 표시되지만 설명서 어디에도 설명되어 있지 않습니다.
「 」를 참조해 주세요.
- ALF의 Formula Transfer Link, Applesoft BAS의 속도 향상IC
- 중국어 BASIC, Applesoft BAS의 중국어 현지화 버전IC
- Apple 및 Microsoft의 Apple III BASICs
레퍼런스
- ^ TASC (The AppleSoft Compiler) Manual. 1981.
- ^ a b Wozniak, Steve (May 1, 2014). "How Steve Wozniak Wrote BASIC for the Original Apple From Scratch". Gizmodo. Retrieved May 2, 2014.
- ^ McCracken, Harry (April 16, 2012). "Apple II Forever: a 35th-Anniversary Tribute to Apple's First Iconic Product". Time. ISSN 0040-781X. Retrieved June 21, 2019.
- ^ Herzfeld, Andy (February 12, 2014). "MacBasic – The Sad Story of MacBasic". Folklore.org.
- ^ "Chapter 16: Languages". History of the Apple II. Retrieved July 6, 2016.
- ^ Coleco Presents The Adam Computer System. May 3, 2016 [September 28, 1983]. Event occurs at 31:55. Archived from the original on November 22, 2021 – via YouTube.
Everybody who knows Applesoft BASIC will also know Adam SmartBASIC. All the same commands, all the same controls for this BASIC, this interpreter, are available. In fact, we're going to show you a program which uses Applesoft graphic commands ... executed through Adam. ... As far as we're concerned, when we're in BASIC, and we're not PEEKing or POKEing ... anything below the BASIC interpreter, we are source-code compatible.
- ^ Grevstad, Eric (December 1986). "Laser 128 / An Affordable Compatible". inCider. p. 58. Retrieved April 24, 2017.
- ^ Applesoft BASIC Programmer's Reference Manual (for IIe only). Apple Computer, Inc. 1982. p. 70.
- ^ Aldridge, James W. (July 1987). "Cautions regarding random number generation on the Apple II". Behavior Research Methods, Instruments, & Computers. 19 (4): 397–99. doi:10.3758/BF03202585.
- ^ 이 문서에는 GFDL로 라이선스가 부여된Everything2의 텍스트가 포함되어 있습니다.
- ^ Applesoft Extended Precision Floating Point Basic Language Reference Manual. Apple Computer, Inc. November 1977.