애플소프트 베이직
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
애플소프트 베이직은 애플 II 컴퓨터용으로 개발된 부동 소수점 BASIC 인터프리터이다. 1977년 마이크로소프트로부터 라이선스를 받아 스티브 워즈니악이 개발한 정수 BASIC의 단점을 보완하기 위해 도입되었다. Applesoft는 문자열, 다차원 배열, 부동 소수점 연산, 고해상도 그래픽, 사용자 정의 함수 등 다양한 기능을 제공했지만, 정수 BASIC의 MOD 연산자는 지원하지 않았다. Applesoft BASIC은 앰퍼샌드 명령과 USR() 함수를 통해 확장 가능하며, 게임 개발에도 사용되었지만, 성능상의 제약으로 인해 널리 사용되지는 않았다.
더 읽어볼만한 페이지
- 베이직 인터프리터 - 비주얼 베이직
비주얼 베이직은 1991년 마이크로소프트에서 출시된 GUI 기반 응용 프로그램 개발에 강점을 가진 프로그래밍 언어이며, 윈도우용 응용 프로그램 및 데이터베이스 조작 프로그램 개발에 주로 사용되었고, 2005년 표준 지원이 중단되었다. - 베이직 인터프리터 - 큐베이직
큐베이직은 GW-BASIC을 대체하기 위해 개발된 퀵베이직 컴파일러 기반의 인터프리터로, MS-DOS, 윈도우, IBM PC DOS 등에서 사용되었으며, 4개의 예제 프로그램과 이스터 에그를 제공한다. - 마이크로소프트 베이직 - 비주얼 베이직
비주얼 베이직은 1991년 마이크로소프트에서 출시된 GUI 기반 응용 프로그램 개발에 강점을 가진 프로그래밍 언어이며, 윈도우용 응용 프로그램 및 데이터베이스 조작 프로그램 개발에 주로 사용되었고, 2005년 표준 지원이 중단되었다. - 마이크로소프트 베이직 - 알테어 베이직
알테어 베이직은 빌 게이츠와 폴 앨런이 알테어 8800 컴퓨터를 위해 개발한 BASIC 인터프리터로, 마이크로소프트의 초기 성공에 기여하고 소프트웨어 저작권 논쟁을 촉발했으며 MS-DOS로 전환될 때까지 핵심 사업으로 남았다. - 마이크로소프트의 프로그래밍 언어 - 파워셸
파워셸은 마이크로소프트에서 개발한 작업 자동화 솔루션으로, 명령줄 셸과 스크립트 언어의 기능을 결합하여 윈도우 시스템 관리를 위해 설계되었으며, .NET 프레임워크 기반의 객체 지향적 특징을 갖고 다양한 플랫폼에서 자동화 스크립트 작성 및 실행, 시스템 구성 관리 등에 활용된다. - 마이크로소프트의 프로그래밍 언어 - VB스크립트
VB스크립트는 마이크로소프트에서 개발한 스크립트 언어로, 인터넷 익스플로러의 클라이언트 스크립트 언어 및 액티브 서버 페이지의 표준 언어로 사용되었으나, 윈도우 클라이언트 지원 중단 발표로 향후 윈도우 릴리스에서 제거될 예정이다.
애플소프트 베이직 - [IT 관련 정보]에 관한 문서 | |
---|---|
기본 정보 | |
종류 | 마이크로소프트 베이직 방언 |
개발자 | 마크 맥도날드 |
발표일 | 1977년 |
지원 중단 | 미지원 |
최신 버전 | 애플소프트 II |
최신 버전 발표일 | 1978년 |
운영 체제 | 애플 II |
플랫폼 | 해당 없음 |
언어 | 해당 없음 |
장르 | 마이크로소프트 베이직 |
2. 역사와 기능
스티브 워즈니악이 애플 II용 정수 BASIC을 작성했을 때, 그는 주로 게임 제작에 관심이 있었고 정수만으로도 충분했기 때문에 부동 소수점 산술 지원을 구현하지 않았다.[2] 1976년 마이크로소프트는 MOS Technology 6502용 마이크로소프트 BASIC을 개발했지만, 당시에는 이를 사용하는 컴퓨터가 없었다. 애플이 6502 칩을 사용한 컴퓨터를 가지고 있다는 것을 알게 된 마이크로소프트는 BASIC 라이선스에 대해 문의했지만, 스티브 잡스는 이미 정수 BASIC이 있다고 답했다.
애플 II는 1977년 4월 웨스트 코스트 컴퓨터 페어에서 공개되었고, 6월에 판매가 시작되었다. 이 컴퓨터의 가장 큰 고객 불만 중 하나는 BASIC에 부동 소수점 기능이 없다는 것이었다.[3] 경쟁사 코모도어 PET는 처음부터 부동 소수점 기능을 갖춘 BASIC 인터프리터를 가지고 있었기 때문에 더욱 문제가 되었다. 워즈니악은 디스크 II 드라이브와 컨트롤러, Apple DOS 개발로 바빴기 때문에 애플은 마이크로소프트에 의존해야 했다.
애플은 마이크로소프트로부터 Applesoft BASIC에 대해 31,000달러에 8년 라이선스를 획득했으며, 1985년에는 마이크로소프트에게 애플의 매킨토시 버전 BASIC에 대한 권리와 소스 코드를 제공하는 방식으로 갱신했다.[4] Applesoft는 정수 BASIC과의 하위 호환성을 위해 설계되었으며, 키 입력을 감지하는 GET 명령어와 프로그램 줄에 공백이 필요하지 않은 마이크로소프트 6502 BASIC 구현의 핵심을 사용한다. Applesoft BASIC은 정수 BASIC보다 느리지만, 이전 BASIC에 없는 많은 기능을 가지고 있다.
- 원자 문자열: 문자열은 더 이상 문자 배열이 아니며(C에서처럼), 대신 가비지 수집 객체이다(Scheme 및 Java에서처럼). 이것은 문자열 배열을 허용한다. 0–10번까지 번호가 매겨진 ''11개''의 문자열 변수 배열을 생성한다.
- 다차원 배열 (숫자 또는 문자열)
- 8비트 지수와 31비트 가수, 삼각 함수 및 로그 함수를 포함한 향상된 수학 기능을 갖춘 단정밀도 부동 소수점 변수
- 고해상도 그래픽을 위한 명령
- 수치 및 문자열 값을 대량으로 나타내기 위한 `DATA` 문과 `READ` 및 `RESTORE` 명령
- 문자열과 숫자 유형 간의 변환을 위한 `CHR$`, `STR$` 및 `VAL` 함수 (두 언어 모두 `ASC` 함수를 가지고 있었다)
- 사용자 정의 함수: BASIC으로 작성된 간단한 한 줄 함수, 단일 매개변수 포함
- 오류 트래핑: BASIC 프로그램이 BASIC으로 작성된 서브루틴을 통해 예기치 않은 오류를 처리할 수 있도록 허용
반대로 Applesoft는 정수 BASIC의 `MOD`(나머지) 연산자가 없다.
Apple II용 BASIC을 적응시키는 것은 지루한 작업이었는데, 애플은 버그가 있는 마이크로소프트 6502 BASIC의 소스 목록을 받았고, 정수 BASIC 명령을 추가해야 했다. 애플은 6502 어셈블러를 가지고 있지 않았기 때문에 개발팀은 컴파일러 서비스를 제공하는 회사인 Call Computer로 전화선을 통해 소스 코드를 전송해야 했다. 이는 매우 지루하고 느린 과정이었고, Call Computer가 장비 오작동으로 소스 코드를 분실한 후, 프로그래머 중 한 명인 클리프 휴스턴은 자신의 IMSAI 8080 컴퓨터를 사용하여 BASIC 소스 코드를 크로스 어셈블했다.[5]
1977년 11월 레퍼런스 매뉴얼에 문서화된 대로 RAM에 저장된 오리지널 애플소프트는 8.5KB의 메모리를 차지하여, 이후 애플소프트 II보다 인터프리터 코드가 더 작았다.[8] 이후 애플소프트 II에서 사용된 10KB 대신에 말이다. 결과적으로, 이후의 주류 버전에서 개발된 여러 명령 기능을 갖추고 있지 않다.
- 애플의 "고해상도" 그래픽을 지원하는 모든 명령 (총 9개)
- ONERR...GOTO 및 RESUME을 사용한 오류 트래핑
- 기계 루틴 단축 호출 "&"
- 화면 지우기 HOME (시스템 ROM 루틴 호출)
- 텍스트 출력 제어 NORMAL, INVERSE, FLASH 및 SPEED=
- 인쇄 공간 기능 SPC()는 매뉴얼에 예약어로 나열되어 있지만, 다른 곳에서는 문서화되어 있지 않다 (TAB() 인쇄 기능은 문서화되어 있음)
- 수치 배열의 카세트 테이프 저장: STORE 및 RECALL
- 장치 응답: WAIT
또한 애플의 Integer BASIC에 이미 존재했던 이후 버전에서 갖게 될 몇 가지 기능도 누락되었다.
- 프로그램 라인 삭제: DEL
- 기계 루틴 액세스: CALL
- 주변 장치 액세스: IN# 및 PR# (단, "#" 없는 IN은 예약어에 나열됨)
- 메모리 범위 제어: HIMEM: 및 LOMEM:
- 디버깅을 위한 실행 추적: TRACE 및 NOTRACE
- 화면 위치 지정: HTAB 및 VTAB
- 서브루틴 중단 POP
- 아날로그 컨트롤러를 읽는 함수 PDL(), 저해상도 그래픽 화면을 읽는 SCRN() (두 함수 모두 시스템 ROM 루틴에 액세스)
또한, 저해상도 그래픽 명령의 이름은 Integer BASIC/Applesoft II와 다르다. 모든 명령 이름은 PLTx 형태이며, GR, COLOR=, PLOT, HLIN 및 VLIN은 각각 PLTG, PLTC, PLTP, PLTH 및 PLTV라고 불린다. 다른 버전에서 TEXT로 알려진 텍스트 모드로 돌아가는 명령은 단순히 TEX이며, 프로그램 라인의 마지막 문장이 되어야 한다는 단서가 있다.
Applesoft BASIC 1.x는 이후의 Applesoft II보다 Microsoft의 오리지널 6502 BASIC 코드에 더 가깝다. 메모리 크기? 프롬프트를 유지하고 Microsoft 저작권 고지를 표시했다. Integer BASIC과의 일관성을 유지하기 위해 Microsoft 코드의 "Ok" 프롬프트는 ] 문자로 대체되었다. Applesoft 1.x는 또한 로레스 그래픽 명령을 위해 REM 문과 LET 키워드를 할당 문에서 비활성화할지 여부를 로딩 시 사용자에게 묻는 메시지를 표시했다.
USR() 함수도 다르게 정의되어, CALL 명령이 없는 대신 사용된다. 인수는 기계어 루틴에 수치 값을 전달하는 것이 아니라, 대신 루틴 자체의 호출 주소이다. 주소를 미리 정의하는 "후크"는 없다. 매뉴얼의 여러 예제는 이 함수를 "시스템 모니터 ROM" 루틴 또는 ROM 루틴을 조작하기 위한 짧은 사용자 루틴에 액세스하는 데만 사용한다. 함수 자체에서 반환되는 값을 계산하는 코드에 대한 언급은 없다. 이 함수는 항상 "더미" 변수에 할당되는 것으로 표시되며, 사용자 코드로 값을 설정하는 작업이 없으면 의미 없는 값을 다시 받는다. 값을 반환하는 액세스된 ROM 루틴 (예제에서 PDL() 및 SCRN() 함수의 서비스를 제공하는 루틴)조차 단순히 사용자가 루틴으로 값을 저장하며, 이후 문에서 별도로 PEEK된다.
Integer BASIC 및 Applesoft II와 달리, 부울 연산자 AND, OR 및 NOT은 16비트 정수 값에 대한 비트 연산을 수행한다. 해당 범위를 벗어난 값이 제공되면 오류가 발생한다.
OUT 및 PLT (및 위에 언급된 IN) 용어는 예약어 목록에 나타나지만 매뉴얼 어디에도 설명되어 있지 않다.
3. 기능
마이크로소프트가 알테어 베이직으로 성공한 이후, 애플은 48KB 램의 애플 II 컴퓨터에 탑재할 새로운 베이직을 찾고 있었다. 애플은 10KB 어셈블리어로 작성된 베이직을 "애플소프트"라는 이름으로 계약했다. 어셈블리어 코드를 공유했기 때문에 코모도어 베이직과 같은 다른 6502 기반 컴퓨터의 베이직 구현과 매우 흡사했다. 행 번호가 있었고 각 행은 공백 기호가 필요하지 않았으며 반복문은 매우 느렸다. 그럼에도 애플소프트 베이직은 이전의 열악한 정수 베이직보다 더 많은 기능을 제공하였다.[4]
애플소프트 베이직은 다음과 같은 기능을 제공했다.
- 원자적인 문자열: 문자열은 이제 C에서처럼 문자형의 배열이 아니라, 자바나 스킴과 같이 메모리 수거 객체를 사용했다. 이는 문자열 배열의 사용을 가능하게 했다. `DIM A$(10)`은 문자열 배열의 10개짜리 동적 배열 자료 구조, 즉 벡터가 되었다.
- 다차원 배열
- 8비트 지수와 31비트 유효수를 가지는 단정밀도 부동소수점 변수. 삼각법 사용이 가능했다.
- 고해상도 영상
- 수치형과 문자열의 변환을 위해 `CHR$`, `ASC`, `STR$`, `VAL` 함수 제공.
- `LET` 문이 부차적으로 가능했다.
- 사용자 지정 함수: `DEF FN`문을 이용하고, 파라메터는 한 개만 제공.
- `PEEK`와 `POKE`문을 이용해서 메모리 직접 제어 가능.
- 명령어는 대문자만 사용이 가능하며 (문자열에는 소문자도 사용 가능), 행 번호를 다시 정렬해주는 `RENUM` 기능은 없다.
그러나 몇 가지 이유로 애플소프트 베이직으로 만들어진 액션 게임은 거의 없었다.
- 당시에는 제한된 메모리와 CPU 클록을 조심스럽게 사용하던 시대였기 때문에, 게임같은 속도에 민감한 프로그램을 실시간 인터프리터로 작성하는 것을 비효율적인 일로 여겼다.
- 애플소프트 베이직은 산술 연산을 위해 정수 대신 실수를 사용하였다. 이것이 프로그램 수행에 불필요한 오버헤드의 원인이 되어, 전체 프로그램의 효율을 떨어뜨렸다. 모든 정수형 수치는 산술 연산을 위해 실수형으로 변환되었고 계산 후에 정수형 수치로 변환되었다. 마이크로소프트는 이를 결코 최적화하지 않았다.
- 비트맵 대신에 모양 구성표(Shape Table영어)만 제공되었다. 영상 하단에 4줄의 텍스트가 붙는 "하드웨어 분할 화면" 이외에 텍스트와 그래픽을 동시에 출력할 방법이 없었다. 128KB의 메모리를 가졌던 애플 IIe와 애플 IIc의 베이직 인터프리터도 여분의 메모리나 배정밀도 그래픽을 지원하지 않았고 애플2GS의 16 색상도 지원하지 않았다. (비글 브로스는 이 문제의 해결을 위해 기계어 코드를 제공했다.)
- 프로그램의 각 행은 연결 리스트에 저장되어서 Goto의 계산에 O(n) (선형) 시간이 걸렸다.
- 음향에 관한 기능을 제공하지 않았다.
- 소스 비공개 운동이 일어났다. 소프트웨어 개발사들은 인터프리터 소스보다 컴파일된 바이너리를 수정하기 어렵다는 것을 인지했다.
Applesoft는 Apple II의 저해상도 및 고해상도 모드에서 그리기를 지원했다. 저해상도에서는 픽셀을 플롯하고 가로 및 세로 선을 그리는 명령이 있었다. 고해상도는 임의의 선과 크기 조정 및 회전된 객체를 그리기 위한 벡터 기반 도형 테이블을 허용했다. 텍스트와 그래픽을 혼합하는 유일한 방법은 그래픽 디스플레이 하단의 4줄의 텍스트였다.
Apple IIe부터 128k 메모리를 가진 기기에서 "더블 고해상도" 모드를 사용할 수 있게 되었다. 이 모드는 본질적으로 원래 고해상도 모드의 해상도를 복제하지만 저해상도 팔레트의 16가지 색상을 모두 포함한다. Applesoft는 이 모드를 직접 지원하지 않았다. Apple IIGS 전용 모드도 마찬가지로 지원되지 않았다.
1977년 11월 레퍼런스 매뉴얼에 문서화된 대로 RAM에 저장된 오리지널 애플소프트는 8.5KB의 메모리를 차지하여, 이후 애플소프트 II보다 인터프리터 코드가 더 작았다.[8] 결과적으로, 이후의 주류 버전에서 개발된 여러 명령 기능을 갖추고 있지 않았다.
- 애플의 "고해상도" 그래픽을 지원하는 모든 명령 (총 9개)
- `ONERR...GOTO` 및 `RESUME`을 사용한 오류 트래핑
- 기계 루틴 단축 호출 `&`
- 화면 지우기 `HOME` (시스템 ROM 루틴 호출)
- 텍스트 출력 제어 `NORMAL`, `INVERSE`, `FLASH` 및 `SPEED=`
- 인쇄 공간 기능 `SPC()`는 매뉴얼에 예약어로 나열되어 있지만, 다른 곳에서는 문서화되어 있지 않음 (`TAB()` 인쇄 기능은 문서화되어 있음)
- 수치 배열의 카세트 테이프 저장: `STORE` 및 `RECALL`
- 장치 응답: `WAIT`
또한 애플의 Integer BASIC에 이미 존재했던 이후 버전에서 갖게 될 몇 가지 기능도 누락되었다.
- 프로그램 라인 삭제: `DEL`
- 기계 루틴 액세스: `CALL`
- 주변 장치 액세스: `IN#` 및 `PR#` (단, `#` 없는 `IN`은 예약어에 나열됨)
- 메모리 범위 제어: `HIMEM:` 및 `LOMEM:`
- 디버깅을 위한 실행 추적: `TRACE` 및 `NOTRACE`
- 화면 위치 지정: `HTAB` 및 `VTAB`
- 서브루틴 중단 `POP`
- 아날로그 컨트롤러를 읽는 함수 `PDL()`, 저해상도 그래픽 화면을 읽는 `SCRN()` (두 함수 모두 시스템 ROM 루틴에 액세스)
또한, 저해상도 그래픽 명령의 이름은 Integer BASIC/Applesoft II와 달랐다. 모든 명령 이름은 `PLTx` 형태이며, `GR`, `COLOR=`, `PLOT`, `HLIN` 및 `VLIN`은 각각 `PLTG`, `PLTC`, `PLTP`, `PLTH` 및 `PLTV`라고 불렸다. 다른 버전에서 `TEXT`로 알려진 텍스트 모드로 돌아가는 명령은 단순히 `TEX`이며, 프로그램 라인의 마지막 문장이 되어야 한다는 단서가 있다.
`USR()` 함수도 다르게 정의되어, `CALL` 명령이 없는 대신 사용되었다. 인수는 기계어 루틴에 수치 값을 전달하는 것이 아니라, 대신 루틴 자체의 호출 주소였다. 주소를 미리 정의하는 "후크"는 없었다. 매뉴얼의 여러 예제는 이 함수를 "시스템 모니터 ROM" 루틴 또는 ROM 루틴을 조작하기 위한 짧은 사용자 루틴에 액세스하는 데만 사용했다. 함수 자체에서 반환되는 값을 계산하는 코드에 대한 언급은 없었다. 이 함수는 항상 "더미" 변수에 할당되는 것으로 표시되며, 사용자 코드로 값을 설정하는 작업이 없으면 의미 없는 값을 다시 받았다. 값을 반환하는 액세스된 ROM 루틴 (예제에서 `PDL()` 및 `SCRN()` 함수의 서비스를 제공하는 루틴)조차 단순히 사용자가 루틴으로 값을 저장하며, 이후 문에서 별도로 `PEEK`되었다.
Integer BASIC 및 Applesoft II와 달리, 부울 연산자 `AND`, `OR` 및 `NOT`은 16비트 정수 값에 대한 비트 연산을 수행했다. 해당 범위를 벗어난 값이 제공되면 오류가 발생했다.
4. 한계
마이크로소프트가 알테어 베이직으로 성공한 후, 애플은 48KB 램의 애플 II 컴퓨터에 탑재할 새로운 베이직을 찾고 있었다. 애플은 10KB 어셈블리어 베이직을 "애플소프트"라는 이름으로 계약했다. 어셈블리어 코드를 공유했기 때문에 코모도어 베이직과 같은 다른 6502 기반 컴퓨터의 베이직 구현과 매우 흡사했다. 행 번호가 있었고 각 행은 공백 기호가 필요하지 않았으며 반복문은 매우 느렸다. 그럼에도 애플소프트 베이직은 이전의 열악한 정수 베이직보다 더 많은 기능을 제공했다.
그러나 몇 가지 이유로 애플소프트 베이직으로 만들어진 액션 게임은 거의 없었다.
- 당시에는 제한된 메모리와 CPU 클록을 조심스럽게 사용하던 시대였기 때문에, 게임같이 속도에 민감한 프로그램을 실시간 인터프리터로 작성하는 것을 비효율적인 일로 여겼다.
- 애플소프트 베이직은 산술 연산을 위해 정수 대신 실수를 사용하였다. 이것이 프로그램 수행에 불필요한 오버헤드의 원인이 되어, 전체 프로그램의 효율을 떨어뜨렸다. 모든 정수형 수치는 산술 연산을 위해 실수형으로 변환되었고 계산 후에 정수형 수치로 변환되었다. 마이크로소프트는 이를 결코 최적화하지 않았다.
- 비트맵 대신에 모양 구성표(Shape Table영어)만 제공되었다. 영상 하단에 4줄의 텍스트가 붙는 "하드웨어 분할 화면" 이외에 텍스트와 그래픽을 동시에 출력할 방법이 없었다. 128KB의 메모리를 가졌던 애플 IIe와 애플 IIc의 베이직 인터프리터도 여분의 메모리나 배정밀도 그래픽을 지원하지 않았고 애플 II GS의 16 색상도 지원하지 않았다. (비글 브로스는 이 문제의 해결을 위해 기계어 코드를 제공했다.)
- 프로그램의 각 행은 연결 리스트에 저장되어서 Goto의 계산에 O(n) (선형) 시간이 걸렸다.
- 음향에 관한 기능을 제공하지 않았다.
- 소스 비공개 운동이 일어났다. 소프트웨어 개발사들은 인터프리터 소스보다 컴파일된 바이너리를 수정하기 어렵다는 것을 인지했다.
애플소프트는 정수 베이직에서 상속된 기능을 제외하면 코모도어의 베이직 2.0과 유사하다. 애플소프트에 비트 연산자가 없다는 몇 가지 사소한 차이점이 있지만, 하드웨어 종속적인 기능을 사용하지 않는 대부분의 베이직 프로그램은 두 베이직에서 모두 실행된다.
코모도어 베이직과 마찬가지로, 숫자 변수는 40비트 부동 소수점으로 저장되며, 각 변수는 5바이트의 메모리가 필요하다. 프로그래머는 변수 뒤에 퍼센트 기호를 붙여 정수로 지정할 수 있으며, 이 경우 2바이트를 사용하고 -32768에서 32767 사이의 범위로 제한되지만, 베이직은 계산을 수행할 때 내부적으로 부동 소수점으로 다시 변환하며, 각 퍼센트 기호는 추가적인 프로그램 코드 바이트를 차지하므로, 실제로 이 기능은 대형 배열 변수의 메모리 사용량을 줄이는 데에만 유용하며, 성능 이점은 없다.
다른 마이크로소프트 베이직 구현과 마찬가지로, 애플소프트는 프로그램 라인에서 문자열과 주석 외부의 공백을 삭제한다. `LIST`는 가독성을 위해 코드를 표시할 때 공백을 추가한다. `LIST`는 토큰화된 모든 키워드 앞뒤에 공백을 추가하기 때문에 가독성을 위해 하나만 있으면 되는 곳에 두 개의 공백이 연이어 생성되는 경우가 많다.
애플 II의 여러 초기 모델에서 애플소프트 베이직은 문자열을 제외하고 프로그램에서 소문자 사용을 지원하지 않았다. `PRINT`는 유효한 명령이지만, `print`와 `Print`는 구문 오류를 발생시킨다.
애플소프트는 6502가 아닌 대부분의 마이크로소프트 베이직 인터프리터에서 흔히 사용되는 다음과 같은 여러 명령과 기능을 갖추고 있지 않다.
- `INSTR` (문자열 내에서 부분 문자열 검색)
- `PRINT USING` (출력 형식 지정)
- `INKEY$` (프로그램을 중단하지 않고 키 누름 확인, 위치 $C000에 대한 PEEK를 통해 이 작업을 수행할 수 있음)
- `LPRINT` (화면 대신 프린터로 출력)
애플소프트는 카세트 테이프를 통해 프로그램을 저장하고 로드하는 것 외에는 파일 또는 디스크 처리를 위한 명령이 없다. 단순히 DOS라고 알려진 애플 II 디스크 운영 체제는 이러한 기능을 제공하기 위해 언어를 보완한다.
변수 이름의 처음 두 글자만 유효하다. 예를 들어, "LOW"와 "LOSS"는 동일한 변수로 처리되며, "LOSS"에 값을 할당하려고 하면 "LOW"에 할당된 모든 값이 덮어쓰여진다. 프로그래머는 또한 애플소프트 명령 또는 연산인 연속된 문자를 피해야 한다. 변수 이름 "SCORE"는 `OR` 부울 연산자를 포함하는 것으로 해석되어 `SC OR E`로 표시된다. "BACKGROUND"는 저해상도 그래픽 모드를 호출하는 명령인 `GR`을 포함하고, 구문 오류를 발생시킨다.
5. 게임 개발
애플소프트 베이직은 게임 개발에 몇 가지 제약이 있었다. 액션 게임 개발에는 적합하지 않았는데, 제한된 메모리와 CPU 성능, 실수 연산 사용, 그래픽 및 사운드 기능 부족 등이 그 이유였다. 이러한 기술적 한계로 인해 개발자들은 애플소프트 베이직 대신 어셈블리어와 같은 다른 프로그래밍 언어를 선택하기도 했다.
5. 1. 주요 게임
애플소프트 베이직으로 만들어진 액션 게임은 거의 없었다. 그 이유는 다음과 같다.- 당시 CPU 클록과 메모리가 제한되어, 실시간 인터프리터로 게임같이 속도에 민감한 프로그램을 작성하는 것은 비효율적이었다.
- 애플소프트 베이직은 정수 대신 실수를 사용해 산술 연산을 하였고, 이는 프로그램 수행에 불필요한 오버헤드를 발생시켜 효율을 떨어뜨렸다. 모든 정수형 수치는 산술 연산을 위해 실수형으로 변환된 후 다시 정수형으로 변환되었다. 마이크로소프트는 이를 최적화하지 않았다.
- 비트맵 대신 모양 구성표Shape Table영어만 제공되었다. 영상 하단에 4줄의 텍스트가 붙는 "하드웨어 분할 화면" 외에는 텍스트와 그래픽을 동시에 출력할 방법이 없었다. 애플 IIe와 애플 IIc의 베이직 인터프리터는 128KB 메모리에서 추가 메모리나 배정밀도 그래픽을 지원하지 않았고, 애플 II GS의 16 색상도 지원하지 않았다. (비글 브로스는 이 문제 해결을 위해 기계어 코드를 제공했다.)
- 프로그램의 각 행은 연결 리스트에 저장되어 Goto 계산에 O(n) (선형) 시간이 걸렸다.
- 음향 기능을 제공하지 않았다.
- 소스 비공개 운동이 일어났다. 소프트웨어 개발사들은 인터프리터 소스보다 컴파일된 바이너리를 수정하기 어렵다는 것을 알았다.
다음은 애플소프트 베이직으로 작성된 주요 게임이다.
6. 확장
스티브 워즈니악이 애플 II용 정수 BASIC을 작성했을 때, 그는 주로 게임 제작에 관심이 있었고 정수만으로도 충분했기 때문에 부동 소수점 연산 지원을 구현하지 않았다.[2] 1976년 마이크로소프트는 6502용 마이크로소프트 베이직을 개발했지만, 당시에는 이를 사용하는 컴퓨터가 없었다. 애플이 6502 칩을 사용한 컴퓨터를 만들고 있다는 것을 알게 된 마이크로소프트는 애플에 BASIC 라이선스에 관심이 있는지 물었지만, 스티브 잡스는 이미 가지고 있다고 답했다.
애플 II는 1977년 4월 웨스트 코스트 컴퓨터 페어에서 공개되었고, 6월에 판매가 시작되었다. 이 컴퓨터의 가장 큰 문제점 중 하나는 BASIC에 부동 소수점 기능이 없다는 것이었다.[3] 경쟁사 코모도어 PET는 처음부터 부동 소수점 기능을 갖춘 BASIC 인터프리터를 가지고 있었기에 문제는 더 컸다. 부동 소수점 기능을 추가할 수 있는 유일한 사람이었던 워즈니악은 디스크 II 드라이브와 컨트롤러, Apple DOS 개발로 바빴기 때문에 애플은 마이크로소프트에 의존해야 했다.
애플은 마이크로소프트로부터 Applesoft BASIC에 대해 31000USD에 8년 라이선스를 획득했으며, 1985년에는 마이크로소프트에게 애플의 매킨토시 버전 BASIC에 대한 권리와 소스 코드를 제공하는 방식으로 갱신했다고 한다.[4] Applesoft는 정수 BASIC과의 호환성을 위해 설계되었으며, 키 입력을 감지하기 위해 GET 명령을 사용하고 프로그램 줄에 공백이 필요하지 않은 마이크로소프트의 6502 BASIC 구현의 핵심을 사용한다. Applesoft BASIC은 정수 BASIC보다 느리지만, 이전 BASIC에 없는 많은 기능을 가지고 있다.
- 원자 문자열: 문자열은 이제 C에서처럼 문자 배열이 아니며, 대신 Scheme 및 Java에서처럼 가비지 수집 객체이다. 이것은 문자열 배열을 허용한다. `DIM A$(10)`는 0–10번까지 번호가 매겨진 ''11개''의 문자열 변수 배열을 생성한다.
- 다차원 배열: 숫자 또는 문자열을 저장할 수 있는 다차원 배열을 지원한다.
- 부동 소수점 변수: 8비트 지수와 31비트 가수, 삼각 함수 및 로그 함수를 포함한 향상된 수학 기능을 갖춘 단정밀도 부동 소수점 변수를 지원한다.
- 고해상도 그래픽: 고해상도 그래픽을 위한 명령어를 제공한다.
- 데이터 처리: 수치 및 문자열 값을 대량으로 나타내기 위한 `DATA` 문과 `READ` 및 `RESTORE` 명령어를 제공한다.
- 형 변환: 문자열과 숫자 유형 간의 변환을 위한 `CHR$`, `STR$` 및 `VAL` 함수를 제공한다. (두 언어 모두 `ASC` 함수를 가지고 있었다)
- 사용자 정의 함수: BASIC으로 작성된 간단한 한 줄 함수를 지원하며, 단일 매개변수를 포함한다.
- 오류 트래핑: BASIC 프로그램이 BASIC으로 작성된 서브루틴을 통해 예기치 않은 오류를 처리할 수 있도록 허용한다.
반대로 Applesoft는 정수 BASIC의 `MOD`(나머지) 연산자가 없다.
Apple II용 BASIC을 적용하는 것은 어려운 작업이었다. 애플은 버그가 있는 마이크로소프트 6502 BASIC의 소스 목록을 받았고, 정수 BASIC 명령을 추가해야 했다. 애플은 6502 어셈블러가 없었기 때문에 개발팀은 컴파일러 서비스를 제공하는 회사인 Call Computer로 전화선을 통해 소스 코드를 전송해야 했다. 이것은 매우 지루하고 느린 과정이었고, Call Computer가 장비 오작동으로 소스 코드를 분실한 후, 프로그래머 중 한 명인 클리프 휴스턴은 자신의 IMSAI 8080 컴퓨터를 사용하여 BASIC 소스 코드를 크로스 어셈블했다.[5]
애플소프트는 정수 베이직에서 상속된 기능을 제외하면 코모도어의 베이직 2.0과 유사하다. 애플소프트에 비트 연산자가 없다는 몇 가지 사소한 차이점이 있지만, 하드웨어 종속적인 기능을 사용하지 않는 대부분의 베이직 프로그램은 두 베이직에서 모두 실행된다.
`PR#` 문은 출력을 확장 카드(확장 슬롯)로 리디렉션하고, `IN#`는 입력을 확장 카드에서 리디렉션한다. 카드의 슬롯 번호는 문 내에서 `PR#` 또는 `IN#` 다음에 지정된다. 슬롯에 카드가 없으면 컴퓨터가 잠긴다. `PR#0`는 출력을 40 열 화면으로 복원하고, `IN#0`는 키보드로 복원한다.
`PR#` 문은 출력을 프린터로 리디렉션하는 데 사용할 수 있다(예: `10 PR#x:PRINT"Hello!"` 여기서 x는 프린터 포트 카드가 있는 슬롯 번호). 베이직 프로그램 목록을 프린터로 보내려면 사용자가 `PR#x:LIST`를 입력한다.
디스크 드라이브가 있는 슬롯(보통 슬롯 6)에서 `PR#`을 사용하면 애플소프트가 디스크 드라이브를 부팅한다. 80열 카드가 있는 슬롯(보통 슬롯 3)에서 `PR#`을 사용하면 80열 텍스트 모드로 전환된다.
코모도어 베이직과 마찬가지로, 숫자 변수는 40비트 부동 소수점으로 저장되며, 각 변수는 5바이트의 메모리가 필요하다. 프로그래머는 변수 뒤에 퍼센트 기호를 붙여 정수로 지정할 수 있으며, 이 경우 2바이트를 사용하고 -32768에서 32767 사이의 범위로 제한되지만, 베이직은 계산을 수행할 때 내부적으로 부동 소수점으로 다시 변환하며, 각 퍼센트 기호는 추가적인 프로그램 코드 바이트를 차지하므로, 실제로 이 기능은 대형 배열 변수의 메모리 사용량을 줄이는 데에만 유용하며, 성능 이점은 없다.
`RND` 함수는 0과 1 사이의 의사 난수 소수를 생성한다. `RND(0)`은 가장 최근에 생성된 난수를 반환한다. 음수를 사용하는 `RND`는 사용된 특정 음수에 의해 결정된 시퀀스의 지점으로 이동한다. 양수 값을 사용하는 RND는 주어진 실제 값에 의존하지 않고 시퀀스의 다음 숫자를 생성한다.
다른 마이크로소프트 베이직 구현과 마찬가지로, 애플소프트는 프로그램 라인에서 문자열과 주석 외부의 공백을 삭제한다. `LIST`는 가독성을 위해 코드를 표시할 때 공백을 추가한다. `LIST`는 토큰화된 모든 키워드 앞뒤에 공백을 추가하기 때문에 가독성을 위해 하나만 있으면 되는 곳에 두 개의 공백이 연이어 생성되는 경우가 많다.
`INPUT`의 기본 프롬프트는 물음표이다. `PRINT`는 숫자 앞에 선행 공백을 추가하지 않는다.
애플소프트 베이직은 앰퍼샌드(`&`) 명령어와 `USR()` 함수를 통해 확장할 수 있다. 이 기능들은 메모리에 저장된 기계어 루틴을 호출하여, 빠르거나 메모리의 특정 함수나 데이터에 직접 접근해야 하는 루틴에 유용하다. `USR()` 함수는 하나의 인수를 받으며, 수치 표현식에 사용될 계산된 함수 값을 도출하고 반환하도록 프로그래밍할 수 있다. `&`는 미리 정의된 주소를 가진 `CALL`의 약자이다. 애플소프트 ROM의 루틴을 호출함으로써, 앰퍼샌드 루틴은 앰퍼샌드 다음에 오는 값을 구문 분석할 수 있다. 앰퍼샌드 루틴을 사용하여 애플소프트를 확장하는 여러 타사 상용 패키지가 출시되었다.
1977년 11월 레퍼런스 매뉴얼에 문서화된 대로 RAM에 저장된 오리지널 애플소프트는 8.5KB의 메모리를 차지하여, 이후 애플소프트 II보다 인터프리터 코드가 더 작았다.[8] 이후 애플소프트 II에서는 10KB를 사용했다. 결과적으로, 이후의 주류 버전에서 개발된 여러 명령 기능이 없다.
- 애플의 "고해상도" 그래픽을 지원하는 모든 명령 (총 9개)
- `ONERR...GOTO` 및 `RESUME`을 사용한 오류 트래핑
- 기계 루틴 단축 호출 "&"
- 화면 지우기 `HOME` (시스템 ROM 루틴 호출)
- 텍스트 출력 제어 `NORMAL`, `INVERSE`, `FLASH` 및 `SPEED=`
- 인쇄 공간 기능 `SPC()`는 매뉴얼에 예약어로 나열되어 있지만, 다른 곳에서는 문서화되어 있지 않다 ( `TAB()` 인쇄 기능은 문서화되어 있음)
- 수치 배열의 카세트 테이프 저장: `STORE` 및 `RECALL`
- 장치 응답: `WAIT`
또한 애플의 Integer BASIC에 이미 존재했던 이후 버전에서 갖게 될 몇 가지 기능도 누락되었다.
- 프로그램 라인 삭제: `DEL`
- 기계 루틴 액세스: `CALL`
- 주변 장치 액세스: `IN#` 및 `PR#` (단, "#" 없는 `IN`은 예약어에 나열됨)
- 메모리 범위 제어: `HIMEM:` 및 `LOMEM:`
- 디버깅을 위한 실행 추적: `TRACE` 및 `NOTRACE`
- 화면 위치 지정: `HTAB` 및 `VTAB`
- 서브루틴 중단 `POP`
- 아날로그 컨트롤러를 읽는 함수 `PDL()`, 저해상도 그래픽 화면을 읽는 `SCRN()` (두 함수 모두 시스템 ROM 루틴에 액세스)
또한, 저해상도 그래픽 명령의 이름은 Integer BASIC/Applesoft II와 다르다. 모든 명령 이름은 `PLTx` 형태이며, `GR`, `COLOR=`, `PLOT`, `HLIN` 및 `VLIN`은 각각 `PLTG`, `PLTC`, `PLTP`, `PLTH` 및 `PLTV`라고 불린다. 다른 버전에서 `TEXT`로 알려진 텍스트 모드로 돌아가는 명령은 단순히 `TEX`이며, 프로그램 라인의 마지막 문장이 되어야 한다는 단서가 있다.
Applesoft BASIC 1.x는 이후의 Applesoft II보다 Microsoft의 오리지널 6502 BASIC 코드에 더 가깝다. 메모리 크기? 프롬프트를 유지하고 Microsoft 저작권 고지를 표시했다. Integer BASIC과의 일관성을 유지하기 위해 Microsoft 코드의 "Ok" 프롬프트는 `]` 문자로 대체되었다. Applesoft 1.x는 또한 로레스 그래픽 명령을 위해 `REM` 문과 `LET` 키워드를 할당 문에서 비활성화할지 여부를 로딩 시 사용자에게 묻는 메시지를 표시했다.
`USR()` 함수도 다르게 정의되어, `CALL` 명령이 없는 대신 사용된다. 인수는 기계어 루틴에 수치 값을 전달하는 것이 아니라, 대신 루틴 자체의 호출 주소이다. 주소를 미리 정의하는 "후크"는 없다. 매뉴얼의 여러 예제는 이 함수를 "시스템 모니터 ROM" 루틴 또는 ROM 루틴을 조작하기 위한 짧은 사용자 루틴에 액세스하는 데만 사용한다. 함수 자체에서 반환되는 값을 계산하는 코드에 대한 언급은 없다. 이 함수는 항상 "더미" 변수에 할당되는 것으로 표시되며, 사용자 코드로 값을 설정하는 작업이 없으면 의미 없는 값을 다시 받는다. 값을 반환하는 액세스된 ROM 루틴 (예제에서 `PDL()` 및 `SCRN()` 함수의 서비스를 제공하는 루틴)조차 단순히 사용자가 루틴으로 값을 저장하며, 이후 문에서 별도로 `PEEK`된다.
Integer BASIC 및 Applesoft II와 달리, 부울 연산자 `AND`, `OR` 및 `NOT`은 16비트 정수 값에 대한 비트 연산을 수행한다. 해당 범위를 벗어난 값이 제공되면 오류가 발생한다.
`OUT` 및 `PLT` (및 위에 언급된 `IN`) 용어는 예약어 목록에 나타나지만 매뉴얼 어디에도 설명되어 있지 않다.
7. 버그
스티브 워즈니악이 애플 II용 정수 BASIC을 작성할 당시, 그는 주로 게임 제작에 중점을 두었고 정수 연산만으로 충분했기에 부동 소수점 산술 기능은 구현하지 않았다.[2] 이로 인해 애플 II가 출시된 후, BASIC에 부동 소수점 기능이 없다는 점이 사용자들의 주요 불만 사항 중 하나였다.[3]
Applesoft BASIC 개발 과정에서, 애플은 버그가 있는 마이크로소프트 6502 BASIC의 소스 코드를 받았고, 6502 어셈블러가 없었기 때문에 Call Computer라는 회사를 통해 소스 코드를 전송하여 컴파일해야 했다. 이 과정은 매우 느리고 지루했으며, Call Computer의 장비 문제로 소스 코드가 손실되기도 했다. 결국 프로그래머 중 한 명인 클리프 휴스턴이 자신의 IMSAI 8080 컴퓨터를 사용하여 BASIC 소스 코드를 크로스 어셈블했다.[5]
Applesoft BASIC에는 다음과 같은 버그들이 존재했다.
8. 성능
애플은 48KB 램의 애플 II 컴퓨터에 맞는 새로운 베이직을 찾고 있었고, 알테어 베이직으로 성공한 마이크로소프트를 선택했다. 애플은 10KB 어셈블리어 베이직을 "애플소프트"라는 이름으로 계약했다.[4] 어셈블리어 코드를 공유했기 때문에 코모도어 베이직과 같은 다른 6502 기반 컴퓨터의 베이직 구현과 매우 흡사했다. 행 번호가 있었고 각 행은 공백 기호가 필요하지 않았으며 반복문은 매우 느렸다. 그럼에도 애플소프트 베이직은 이전의 열악한 정수 베이직보다 더 많은 기능을 제공했다.[5]
하지만, 다음과 같은 몇 가지 이유로 애플소프트 베이직으로 만들어진 액션 게임은 거의 없었다.
- 당시에는 제한된 메모리와 CPU 클록을 조심스럽게 사용하던 시대였기 때문에, 게임같이 속도에 민감한 프로그램을 실시간 인터프리터로 작성하는 것은 비효율적인 일로 여겨졌다.
- 애플소프트 베이직은 산술 연산을 위해 정수 대신 실수를 사용했다. 이는 프로그램 수행에 불필요한 오버헤드의 원인이 되어, 전체 프로그램의 효율을 떨어뜨렸다. 모든 정수형 수치는 산술 연산을 위해 실수형으로 변환되었고 계산 후에는 정수형 수치로 다시 변환되었다. 마이크로소프트는 이를 최적화하지 않았다.
- 비트맵 대신 모양 구성표(Shape Table영어)만 제공되었다. 영상 하단에 4줄의 텍스트가 붙는 "하드웨어 분할 화면" 외에는 텍스트와 그래픽을 동시에 출력할 방법이 없었다. 128KB의 메모리를 가졌던 애플 IIe와 애플 IIc의 베이직 인터프리터도 여분의 메모리나 배정밀도 그래픽을 지원하지 않았고, 애플 II GS의 16색상도 지원하지 않았다. (비글 브로스는 이 문제의 해결을 위해 기계어 코드를 제공했다.)
- 프로그램의 각 행은 연결 리스트에 저장되어서 Goto 계산에 O(n) (선형) 시간이 걸렸다.
- 음향 관련 기능을 제공하지 않았다.
- 소스 비공개 운동이 일어났다. 소프트웨어 개발사들은 인터프리터 소스보다 컴파일된 바이너리를 수정하기 어렵다는 것을 인지했다.
스티브 워즈니악이 애플 II용 정수 BASIC을 작성했을 때, 그는 주로 게임 제작에 관심이 있었고, 정수만으로도 충분했기 때문에 부동 소수점 산술 지원을 구현하지 않았다.[2]
Applesoft BASIC 프로그램은 라인의 연결 리스트로 저장된다. `GOTO` 또는 `GOSUB`는 선형 시간이 걸린다. 일부 프로그램은 서브루틴 호출 시간을 줄이기 위해 맨 위에 서브루틴을 배치하기도 한다.
Integer BASIC과 달리, Applesoft는 라인이 입력될 때 소스 코드의 문자 숫자(100과 같은)를 이진수로 변환하지 않는다. 대신, 라인이 실행될 때마다 ASCII 문자열이 변환된다. 변수 조회가 이러한 변환보다 빠른 경우가 많기 때문에, 루프 내에서 사용되는 숫자 상수를 루프가 시작되기 전에 변수에 저장하는 것이 더 빠를 수 있다.
워즈니악은 원래 자신의 Integer BASIC을 "게임 BASIC"이라고 불렀는데, 이는 그가 새로운 컴퓨터에서 ''Breakout'' 클론을 구현하기 위해 작성했기 때문이다.[2] 대부분의 액션 게임이 Applesoft BASIC으로 작성되지 않은 주된 이유는 모든 수학 연산에 부동 소수점 숫자를 사용하면 성능이 저하되기 때문이다.
9. 샘플 코드
애플소프트 베이직의 Hello World는 다음과 같다.
```
10 PRINT "HELLO, WORLD"
```
애플소프트 베이직만의 형태를 살려서 프로그램을 짜면 다음과 같다.[13]
```
10 TEXT:HOME
20 ?"HELLO WORLD"
```
애플소프트 베이직에서 Hello, World! 프로그램은 다음과 같이 입력할 수 있다.
```
10 TEXT:HOME
20 ?"HELLO WORLD"
```
콜론(`:`)으로 구분하면 여러 명령어를 같은 코드 줄에 포함시킬 수 있다. `?`는 애플소프트 베이직(및 거의 모든 버전의 마이크로소프트 베이직)에서 "PRINT"의 단축키로 사용될 수 있지만, 단어를 모두 쓰는 것이 허용될 뿐만 아니라 표준이다. 애플소프트는 입력된 프로그램에서 "?"를 "PRINT"와 동일한 토큰으로 변환한다(따라서 "?"를 사용해도 실제로 메모리가 절약되지 않음). 따라서 프로그램이 나열될 때 둘 다 "PRINT"로 표시된다. 위의 프로그램은 `LIST` 명령어로 다음과 같이 표시된다.
```
10 TEXT : HOME
20 PRINT "HELLO WORLD"
10. 관련 베이직
마이크로소프트는 알테어 베이직으로 성공을 거두었고, 애플은 48KB 램의 애플 2 컴퓨터에 탑재할 새로운 베이직을 찾고 있었다. 이에 애플은 마이크로소프트와 계약하여 10KB 어셈블리어 베이직을 "애플소프트"라는 이름으로 도입했다. 이 베이직은 어셈블리어 코드를 공유하여 코모도어 베이직 등 다른 6502 기반 컴퓨터의 베이직 구현과 매우 유사했다. 애플소프트 베이직은 행 번호를 사용했고 각 행에 공백 기호는 필요하지 않았으며, 반복문 처리 속도는 느렸지만 이전의 정수 베이직보다 다양한 기능을 제공했다.
애플은 마이크로소프트로부터 애플소프트 베이직에 대한 8년 라이선스를 31,000달러에 일시불로 획득했다. 1985년에는 마이크로소프트에게 애플의 매킨토시 버전 베이직에 대한 권리와 소스 코드를 제공하는 조건으로 라이선스를 갱신했다.[4] 콜레코는 자사의 아담 홈 컴퓨터에 탑재된 SmartBASIC이 애플소프트와 소스 코드 호환성을 가진다고 주장했다.[9]
마이크로소프트는 VTech에 애플소프트와 호환되는 베이직을 레이저 128 (애플 II 호환 기종)에 사용할 수 있도록 라이선스를 제공했다.[10]
애플소프트 베이직의 주요 기능은 다음과 같다.
- 원자적 문자열: 문자열은 더 이상 문자 배열이 아니라 자바나 스킴처럼 메모리 수거 객체로 처리되었다. 이로 인해 문자열 배열 사용이 가능해졌다. 예를 들어, `DIM A$(10)`은 10개 요소(0-10번)를 가진 문자열 동적 배열 (벡터)을 생성했다.
- 다차원 배열: 숫자 및 문자열을 위한 다차원 배열을 지원했다.
- 단정밀도 부동소수점 변수: 8비트 지수와 31비트 유효 숫자를 가진 단정밀도 부동소수점 변수를 지원하고, 삼각 함수 사용이 가능했다.
- 고해상도 그래픽: 고해상도 그래픽을 지원했다.
- 자료형 변환 함수: 숫자와 문자열 간 변환을 위한 `CHR$`, `ASC`, `STR$`, `VAL` 함수를 제공했다.
- LET 문 (선택 사항): `LET` 문은 선택적으로 사용할 수 있었다.
- 사용자 정의 함수: `DEF FN` 문을 사용하여 단일 매개변수를 갖는 사용자 정의 함수를 지원했다.
- 메모리 직접 제어: `PEEK`와 `POKE` 문을 통해 메모리를 직접 제어할 수 있었다.
- 기타: 명령어는 대문자로만 입력 가능했지만, 문자열 내에서는 소문자도 사용할 수 있었다. 행 번호 재정렬 기능(RENUM)은 제공되지 않았다.
참조
[1]
서적
TASC (The AppleSoft Compiler) User's Manual
https://archive.org/[...]
Microsoft Consumer Products
[2]
웹사이트
How Steve Wozniak Wrote BASIC for the Original Apple From Scratch
https://gizmodo.com/[...]
2014-05-01
[3]
간행물
Apple II Forever: a 35th-Anniversary Tribute to Apple's First Iconic Product
https://techland.tim[...]
2012-04-16
[4]
웹사이트
MacBasic – The Sad Story of MacBasic
http://www.folklore.[...]
2014-02-12
[5]
서적
History of the Apple II
2010-07
[6]
서적
Applesoft BASIC Programmer's Reference Manual (for IIe only)
https://archive.org/[...]
Apple Computer, Inc.
[7]
학술지
Cautions regarding random number generation on the Apple II
1987-07
[8]
서적
Applesoft Extended Precision Floating Point Basic Language Reference Manual
https://archive.org/[...]
Apple Computer, Inc.
1977-11
[9]
AV media
Coleco Presents The Adam Computer System
https://www.youtube.[...]
2016-05-03
[10]
뉴스
Laser 128 / An Affordable Compatible
https://archive.org/[...]
1986-12
[11]
웹인용
보관된 사본
http://www.griddles.[...]
2007-11-11
[12]
웹인용
보관된 사본
http://www.angusm.de[...]
2007-11-11
[13]
문서
이 소스는 [http://everything2.com/?node=Applesoft+BASIC Everything2]의 것으로 [[GFDL 라이선스]]이다.
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com