정수 BASIC

Integer BAS
정수 BAS
개발자스티브 워즈니악
처음 등장한1976년, 46년(연방)[1]
플랫폼Apple I, Apple II
영향을 받다
HP 베이직
영향받은
애플소프트 BASIC

Integer BASIC은 Steve Wozniak이 Apple IApple II 컴퓨터를 위해 작성한 BASIC 인터프리터입니다.1976년 Apple I용 카세트로 제공되었으며 1977년 출시 이후 Apple II의 ROM에 포함되어 많은 초기 가정용 컴퓨터 소유자들이 사용한 [2]BASIC의 첫 번째 버전입니다.

숫자 데이터 유형은 정수뿐입니다. 부동 소수점 번호는 지원되지 않습니다.정수를 사용하면 당시의 대부분의 BASIC에서 볼 수 있는 32비트 또는 40비트 부동소수점 형식보다 훨씬 콤팩트한 16비트 형식으로 숫자를 저장할 수 있습니다. 때문에 빌게이츠는 벤치마크에서 마이크로소프트 베이직보다 더 뛰어난 성능을 보이자 불만을 토로했다.그러나, 이것은 또한 [a]범용 언어로서의 적용 가능성을 제한했다.

그 시대의 다른 BASIC과의 또 다른 차이점은 Integer BASIC이 문자열을 C 또는 Fortran 77의 시스템과 마찬가지로 문자 배열로 취급했다는 것입니다.스트링 함수가 아닌 어레이 슬라이싱을 사용하여 서브스트링에 액세스했습니다.이 스타일은 HP Time-Shared BASIC에서 도입되었으며, North Star BASIC이나 Atari BASIC과 같은 HP에서 패턴화된 다른 현대 BASIC에서도 찾아볼 수 있습니다.Microsoft BASIC을 포함DEC에서 파생된 BASIC에서 볼 수 있는 스타일과 대조됩니다.

이 언어는 처음에는 GAME BASIC이라는 이름으로 개발되었으며, 애플 I에 도입되었을 때 단순히 Apple BASIC이라고 불렸습니다.애플 II에 이식되어 부동소수점 지원을 포함한 마이크로소프트 베이직의 포트애플소프트 베이직과 함께 출하되면서 Integer BASIC이 되었다.Integer BASIC은 1979년 Apple II Plus를 시작으로 Applesoft BASIC을 위해 단계적으로 폐지되었다.

역사

고등학교 3학년 때 Steve Wozniak의 전자 교사는 반에서 가장 우수한 학생들이 지역 전자 회사에 배치하도록 주선했다.Wozniak은 실바니아로 보내져 IBM 1130으로 [4]FORTRAN에서 프로그래밍을 했습니다.같은 해, 제너럴 일렉트릭(General Electric)은, 당시 크게 홍보하고 있던 시분할 BASIC 서비스를 실행하는 메인프레임 중 하나에 접속되어 있는 단말기를 고등학교에 설치했습니다.3일간의 접근권이 주어진 후, 학생들은 왜 학교가 영구적으로 단말기를 받아야 하는지에 대한 편지를 쓰도록 요구받았으나, 그들의 노력은 [1]결국 성공하지 못했다.

몇 년 후 Wozniak은 Hewlett-Packard(HP)에서 칩 설계 시뮬레이션과 계산기 [1]논리 레이아웃을 실행하고 있었습니다.HP는 커스텀 타임셰어링 버전의 BASIC을 실행하는 HP 2000 시리즈 머신을 통해 미니 컴퓨터 시장에 크게 진출했습니다. 10만 달러면 BASIC [5]프로그램을 실행하는 16명에서 32명의 사용자를 지원할 수 있는 적당한 장비를 갖춘 기계를 만들 수 있다.비용은 높았지만, 메인프레임[b] 머신 비용의 일부였고, 헤비 유저에게는 시분할 [c]서비스보다 적었습니다.HP는 이를 따라 10,000달러(2021년에는 70,000달러 상당)의 데스크톱 크기의 머신인 HP 9830을 출시했으며, Wozniak도 [9]BASIC에 액세스할 수 있었습니다.

컴퓨터(인기)를 좋게 만드는 열쇠는 고급 언어를 포함하는 것이며, 베이직이어야 한다는 것을 깨달았습니다.

Steve Wozniak[1]

1975년 1월 Altair 8800이 발표되어 마이크로컴퓨터 혁명의 도화선이 되었습니다.3월에 워즈니악은 홈브루 컴퓨터 클럽의 첫 회의에 참석하여 자신의 컴퓨터 디자인을 구상하기 시작했습니다.Altair의 가장 중요한 소프트웨어 중 하나이자 가장 많이 불법 복제된 소프트웨어 중 하나는 최근형성된 마이크로소프트사의 [10]Altair BASIC이었다.Wozniak은 자신의 컴퓨터가 MOS Technology 6502 프로세서를 위한 최초의 BASIC을 가져야 한다고 결론지었다.이 언어에는 4kB RAM이 필요하기 때문에 [1]설계에 필요한 최소한의 메모리를 만들었습니다.

BASIC에 대한 Wozniak의 레퍼런스는 101 BASIC 컴퓨터 게임과 HP BASIC [1]매뉴얼이었다.HP의 BASIC이 101게임에서 사용되던 DEC BASIC의 종류와 크게 다르다는 것을 몰랐고, 이것은 Altair의 Microsoft BASIC의 기초이기도 하다.이러한 출처를 바탕으로 워즈니악은 언어의 구문도를 스케치하기 시작했다.이 설계에는 처음에는 부동소수점 지원이 포함되었지만, 6502에서 첫 번째 BASIC을 발표하여 "스타"가 되기를 바라면서, 그는 부동소수점을 포기하고 별도의 정수 수학 시스템을 작성하여 프로그래밍 시간을 [1]절약하기로 결정했습니다.

워즈니악은 나중에 그의 언어를 "주로 게임과 교육용으로 [11]의도된 것"이라고 묘사했다.개발 내내 "GAME BASIC"이라고 언급하며, Wozniak은 손으로 코드를 작성하고 어셈블러 코드 명령을 기계 코드와 동등한 으로 변환한 후 결과를 자신의 [12]컴퓨터에 업로드했습니다.컴퓨터 언어를 쓰는 방법에 대한 교육을 받지 않고 HP 계산기 경험을 활용하여 스택 머신을 구현하여 식을 해석했습니다.기본 루틴이 실행되면 모듈 방식으로 다른 명령어를 하나씩 작업했습니다.홈브루 클럽을 방문할 때마다 그는 지난달에 [1]추가된 몇 가지 기능을 시연했다.

내 인생에서 가장 만족스러운 날이었어...BASIC으로 Breakout [Homebrew]를 시연했습니다.하드웨어 아케이드 게임을 디자인한 후 BASIC에서 프로그래밍할 수 있다는 것이 세상을 바꿀 것이라는 것을 알았습니다.

Steve Wozniak[9]

Apple I 컴퓨터에 무료 또는 저렴한 소프트웨어를 제공하는 Apple I 컴퓨터용 광고입니다.

1976년 초 Apple I 컴퓨터 광고에서 Apple Inc.는 "우리의 철학은 기계에 소프트웨어를 무료로 또는 최소 [13]비용으로 제공하는 것"과 "네, Apple BASIC은 [14]무료입니다"라고 주장했습니다.이것은 사람들알테어 [15]베이직 버전을 베끼면서 그를 강탈하고 있다는 빌 게이츠의 악명 높은 애호가들에게 보내는 공개 편지 직후에 인쇄되었다.

Wozniak은 Atari에서 일했던 잡스가 [16]Breakout을 재설계하는 것을 도왔다.나중에 BASIC으로 게임을 쓸 수 있는지 알아보기로 했다.패들 컨트롤러를 읽기 위한 명령어를 추가했고, 일련의 빠른 편집으로 게임의 버전이 가동되었습니다.경기성을 높이기 위해 그는 공이 물건에 닿을 때 딸깍 소리를 내는 스피커를 추가했다.스티브 잡스에게 보여주면서 워즈니악은 소스코드를 바꾸는 것만으로 자신의 게임이 사용했던 색을 빠르게 바꿀 수 있다는 것을 보여주었다.워즈니악은 나중에 "소프트웨어가 하드웨어보다 훨씬 유연하다"는 것을 증명했고, 그와 잡스는 "[1]이제 하드웨어로 설계하지 않고도 누구나 아케이드 게임을 만들 수 있다"는 것을 깨달았다고 썼다.

워즈니악은 6502를 위한 부동소수점 도서관을 완성했고 Dobb'[17]s 1976년 8월호에 그것을 발표했다.이 라이브러리는 나중에 Apple [18]II용 ROM의 일부가 되었습니다.Wozniak은 부동소수점 코드를 Apple BASIC으로 백포팅하는 작업을 시작했지만 Disk II가 된 플로피 디스크 컨트롤러를 설계하는 작업에서 벗어나게 되었습니다.마이크 마크쿨라는 만약 디스크 시스템이 제시간에 준비된다면 회사가 라스베이거스에서 열리는 소비자 가전 전시회에 갈 것이라고 말했다. 그래서 워즈니악과 랜디 위긴튼은 1977년 [19]휴가 동안 쉬지 않고 그 작업을 했다.

BASIC에서 부동소수점 주제로 돌아왔을 때 잡스는 그것이 너무 오래 걸린다고 불평했다.Wozniak은 알지 못한 채 마이크로소프트와 라이선스를 마련해 최근에 완성된 6502 버전의 Altair 코드를 받았다.MS 코드를 검토하면서 Wozniak은 MS가 어셈블러로 작성되어 보다 쉽게 수정되는 동안 나중에 원래의 머신 코드를 손으로 패칭해야 했기 때문에 자신의 코드에 그래픽 지원을 추가하는 것이 자신의 BASIC을 추가하는 것보다 쉽다고 결정했습니다.애플의 베이직의 개발은 애플소프트 베이직이 된 에 유리하게 끝났다.워즈니악은 나중에 "나의 가장 큰 실망은 다음과 같은 끔찍한 현악기였다.LEFT$(VAR, 5)그리고.MID$(VAR2,5,3)내 거 말고.[19][d]

1977년 여름 Apple II가 출하되었을 때 Integer BASIC은 ROM으로 공급되었고 Applesoft BASIC은 카세트로 출하되었습니다.이것은 1979년 애플소프트[20]ROM에 투입되었을 때 애플II 플러스가 등장하면서 바뀌었다.

묘사

프로그램 편집

그 시대의 대부분의 BASIC 구현과 마찬가지로 Integer BASIC은 언어 인터프리터 및 라인 편집 환경 모두로서 기능했습니다.BASIC이 실행 중일 때> 명령 프롬프트가 표시되어 사용자가 [21][e]문을 입력할 수 있습니다.이후 가정용 컴퓨터 플랫폼과 달리 기본 환경은 Apple I을 시작할 때 기본 환경이 아니라 보통 모니터에서 시작됩니다.를 눌러 BASIC을 시작했습니다.Ctrl+BReturn[22] 를 누릅니다.

선두 번호와 함께 입력된 문장은 [23]"실행 지연"을 위해 프로그램 스토리지에 입력됩니다. 새 행으로 입력하거나 이전에 [24]같은 번호를 사용했을 수 있는 문장과 대체됩니다.행번호 없이 입력된 문은 명령어라고 불리며 [f]즉시 실행됩니다.행 번호의 범위는 0 ~32767 [25][g]이며, 행에는 최대 128 [27]문자를 사용할 수 있습니다.

Integer BASIC은 또한AUTO다음과 같이 지정된 시작 번호의 행 번호를 자동으로 입력하기 위한 명령어AUTO 100새로운 행마다 마지막 숫자에 10을 추가합니다. AUTO 300,5300행부터 5개씩 번호를 매기기 시작합니다.300, 305 등입니다.자동 번호 부여는 다음을 입력하여 해제되었습니다.MAN를 클릭합니다.[28]

에디터의 흥미로운 특징 중 하나는 화면의 한 부분을 라이브 업데이트가 이루어지는 "창"으로 설정할 수 있다는 것입니다.이것은 보통 전체 화면이었지만, 다음의 조작에 의해 작은 면적으로 제한될 수 있습니다.POKE메모리 위치 32~[29]35에 값을 입력합니다.이 기능을 사용하여 화면의 나머지 부분이 그래픽 [30]모드일 때 편집 가능한 텍스트 영역을 만들 수 있습니다.

디버깅

대부분의 BASIC과 마찬가지로 프로그램은RUN명령어는 일반적으로 다음과 같은 특정 회선 번호로 지정할 수 있습니다.RUN 300. + C[32]를 사용하여 언제든지 실행을 중지한 후 를 사용하여 다시 시작할 수 있습니다.[31]CON보다 전형적인 것과 반대로 티누에CONT를 클릭합니다.[33]

스텝 바이 스텝의 실행에서는,TRACE명령 프롬프트에서 명령을 사용하거나 프로그램 자체에 배치할 수 있습니다.이 기능을 켜면 프로그램이 방문한 각 회선의 회선 번호가 인쇄됩니다.기능을 다시 끌 수 있습니다.NOTRACE를 클릭합니다.[34]

다소 특이한 특징은DSP("display"의 경우) 명령어.프로그램에서 발견되면 변수 값의 변경 사항이 그 시점부터 표시됩니다.예를 들어.DSP X는 변경이 발생할 때마다 X의 값과 변경이 발생한 [35]회선 번호를 표시합니다.TRACE의 경우와 마찬가지로 DSP는 다음과 같이 꺼졌습니다.NODSP를 클릭합니다.[26]

변수 이름

Dartmouth BASIC 및 HP-BASIC이 변수 이름을 최대 두 글자(단일 문자 또는 문자 뒤에 한 자리 숫자)로 제한하고 MS-BASIC이 문자 뒤에 옵션 문자 또는 숫자(후속 문자 무시)를 허용하는 경우 Integer BASIC은 모든 길이 변수 이름(예: SUM, GAMINTEPOINTS, PLAYPTER2)을 지원하는 것은 이례적이었다.유일한 경고는 변수 이름에 예약된 단어를 포함할 수 없다는 것입니다.예를 들어, THISCOLOR 및 COLUFLE은 키워드가 포함되어 있기 때문에 유효하지 않은 변수 이름입니다.COLOR, system 명령어.[36]또한 행은 128자로 제한되므로 변수 이름은 이 [27]길이를 초과할 수 없습니다.

수학

Integer BASIC은 이름에서 알 수 있듯이 산술 패키지의 기준으로 정수를 사용합니다.이것들은 내부에 16비트 번호의 리틀 엔디안(6502와 동일)으로 저장되었습니다.이것에 의해, -32767 ~32767 의 계산의 최대치가 허가됩니다.형식은 -32768 의 값을 격납할 수도 있습니다만, BASIC 에서는 그 수치를 표시할 수 없었습니다.이 범위를 벗어난 값을 산출한 계산 결과>32767 ERR를 클릭합니다.[37]

Infix 연산자 포함+(표준),-(서브젝트),*(곱셈),/(나눗셈), MOD(남은 수) 및 지수.^성격.이진 연산자 포함AND,OR그리고.NOT. 바이너리 비교에는 표준적인 비교 세트가 포함되어 있습니다.=,>,<,>=,<=,<>HP에서 영감을 얻은#(<<[38] 고객명 >>에 상당)

사용 가능한 [39]메모리에 의해서만 크기가 제한되고, 단일 차원 배열만 허용되었습니다.수학적 함수는 희박했다.ABS(절대값),SGN(부호) 및RND([40]번호)가 지원되었습니다.MS에서 파생된 버전과는 대조적으로 파라미터는 무시되고RND는 항상 값 0을 반환했습니다.<1, Integer BASIC이 파라미터를 사용했습니다.RND(6)0 ~ 5 [41]의 정수를 반환했습니다.

줄들

Integer BASIC의 문자열 처리는 HP BASIC의 시스템을 기반으로 했습니다.이것은 문자열 변수를 문자 배열로 처리하며, 이 배열은 다음과 같이 처리해야 합니다.DIM사용 전 에드를 참조하십시오.이는 C 또는 Fortran [43]77의 모델[42] 유사합니다.이는 문자열이 고유 가변 길이 [44]유형인 MS와 유사한 BASIC과는 대조적입니다.MS에서 파생된 BASIC이 사실상의 표준이 되기 전에는 이러한 스타일이 드물지 않았습니다. North Star[45] BASIC과 Atari[46] BASIC은 다른 제품과 마찬가지로 동일한 컨셉을 사용했습니다.

Integer Basic 문자열은 사용된 문자 수에 관계없이 최대 [47]255자까지 일정한 양의 메모리를 사용했습니다.이를[h] 통해 MS BASIC에서는 매우 느리기로 악명높은 히프가비지 수집이 필요없지만 선언된 길이보다 짧은 문자열이 낭비되는 것을 의미하는 이점이 있었습니다.

서브스트링 액세스는 어레이 슬라이싱 구문을 통해 제공되었습니다.예를 들어.PRINT A$(0,5)A$의 첫 번째 6글자(0~5글자)[49][49][i]를 출력합니다.연결은 동일한 시스템을 사용하여 제공되었습니다.A$(5)="ABC"위치 5에서 시작하는 문자를 문자열 "ABC"[50]로 바꿉니다.이는 다음과 같은 문자열 함수를 사용하는 DEC/MS 스타일의 문자열 처리와 대조됩니다.MID$서브스트링에 접속하여+연결용입니다.[51][j]

문자열 함수에 의해 제공되는 많은 기능들이 배열 슬라이싱에 의해 대신 제공되었기 때문에 문자열 함수의 선택을 줄였다. LEN문자열의[47] 길이를 반환하고ASC문자열의 [52]첫 번째 문자의 ASCII 숫자 코드를 반환했습니다.그것은 에 상당하는 것이 결여되어 있었다.CHR$지정된 숫자 [53]코드와 함께 ASCII 문자를 반환했습니다.

그래픽스 및 사운드

처음 출시되었을 때 애플의 유일한 게임 컨트롤러는 패들 컨트롤러였고, 패들 컨트롤러는 하나의 커넥터에 두 개의 컨트롤러가 있었다.컨트롤러의 위치는 다음 명령을 사용하여PDL함수, 컨트롤러 번호(0 또는 1)로 전달, 예를 들어A=PDL(0):PRINT A0 ~ [54][k]255 사이의 값을 반환합니다.

애플 기계에는 전용 사운드 하드웨어가 없고 단순한 "삐"만 포함되어 있었다.소리를 내는 것은 다음과 같이 이루어졌다.PEEK스피커의 메모리 부족 위치 -42036을 [l]입력한다.이 값을 반복해서 PEEK하면 톤이 생성되고 매뉴얼에서는 이를 위해 수학식을 사용할 것을 제안했습니다.S=PEEK(-16336)-PEEK(-16336)-PEEK(-16336)-PEEK(-16336)-PEEK(-16336)를 클릭합니다.[56]

그래픽스 지원이 더 상세했습니다.그래픽스 모드가 켜져 있을 때GR와의 언외의 대화TEXT도면은 모달로 보통 색상을 변경하는 명령어를 발행함으로써 시작되며 의사변수를 설정함으로써 실행된다.[57]COLOR=12그림 색상은 12, 연두색으로 설정합니다.그럼 누구는 할 수 있다PLOT 10,10그 색깔의 [58]반점 하나를 만들어내려면 HLIN 0,39 AT 20화면에 걸쳐 있는 20행의 수평선을 그립니다.VLIN 5,15 AT 7열 7 아래로 [59]더 짧은 수직선을 그립니다. A=SCRN X,Y화면 색상을 [52][m]X,Y로 반환했습니다.

입력/출력

Integer BASIC에는 커스텀 입출력 명령어가 없고,DATA스테이트먼트 및 관련 정보READ프로그램에 데이터를 송수신하기 위해 입력/출력 기능을 선택한 카드슬롯으로 리다이렉트했습니다.PR#x그리고.IN#x출력 또는 입력(각각)을 번호부 슬롯으로 리다이렉트 합니다.이때부터 기존 방식을 사용하여 카드로 데이터를 전송할 수 있습니다.PRINT명령어 및 명령어 읽기INPUT를 클릭합니다.[52]

기타 주의사항

Integer BASIC에는 a가 포함되어 있습니다.TAB0 ~ 39 의 특정 열에 커서를 배치하는 기능.대부분의 BASIC에서 볼 수 있는 버전과는 달리 괄호 안에 값이 있는 함수가 아니라 다음 번호를 가진 명령어라는 점에서 다릅니다.커서를 10열로 이동하려면 다음 명령을 사용합니다.TAB 10Integer[60] BASIC에서는 이것이 MS에서는PRINT TAB(10). 또한,VTAB명령어는 다음과 같이 동작합니다.TAB수평이 아닌 수직 공간을 추가했습니다.설명할 수 없는 이유로, 이 경우 좌표는 0에서 [61]23이 아니라 1에서 24까지였다.

Integer BASIC에는 a가 포함되어 있습니다.POP명령어를 사용하여 [52]루프를 종료합니다.이로 인해 FOR 스택에서 최상위 항목이 삭제되었습니다.Atari BASIC도 같은 [62]명령어를 지원하지만 North Star BASIC은EXIT를 클릭합니다.[63]

Integer BASIC ROM에는 어셈블리 언어 프로그램을 만들고 디버깅하기 위한 기계 코드 모니터, "mini-assemblyler" 및 디스어셈블러도 포함되어 있습니다.워즈니악은 애플 II의 첫 번째 프로그램으로 모니터를 손으로 조립한 후 Integer [64][65][2]BASIC을 작성하기 위해 사용했다.

예약어

Apple BASIC

Apple BASIC에는 다음과 같은 [66]명령어가 있습니다.

AUTO 밸브 1, 밸브2 CLR [분명한]  밸브 1, 밸브2 목록. 밸브 1, 밸브2 달려. 밸브 1 스크래치 [긁다 / 신규] 하드 = expr 로멤버 = expr (허락하다) 변화하다 = expr 입력 (신속한,) 변수 1, 변수 2 ... 인쇄하다 아이템(s)  expr 위해서 변화하다 = expr1 로. expr2 걸음 expr3 다음 분. 변화하다 한다면 expr 그리고나서 진술 한다면 expr 그리고나서  번호 에 가다 expr GOSUB expr 돌아가다 DIM 변수 1(expr1), 변수 2(expr2) ... REM 텍스트 끝. 쿡쿡 찌르다 expr1, expr2 불러 expr 기능: ABS(), SGN(), 훔쳐보다(), RND(), () 

정수 BASIC

Integer BASIC은 [67][68]다음을 추가했습니다.

색. = expr 결점 [계속하다.] DSP GR HLIN expr1, expr2 AT expr3 남자 신규 [치환하다 스크래치] 레이스 없음 줄거리. expr1, expr2  본문 추적하다 비디오 expr1, expr2 AT expr3 기능: ASC(), PDL(), 스크래치(X,Y) 

실행

Integer BASIC은 사용자가 입력한 행을 버퍼에서 읽고 일련의 토큰을 출력하는 파서를 통해 실행했습니다.이 프로세스의 일부로서 단순한 구문 오류가 검출되어 리스트 되어 있습니다.해석에 성공하면 행번호(존재하는 경우)는 ASCII 10진수 형식에서16비트 정수로, 임의의 키워드는 7비트 정수 [64]토큰으로 변환됩니다.

일부 키워드는 여러 토큰으로 표시되었습니다.예를 들어 Microsoft BASIC이 키워드에 대해1개의 토큰을 가진 경우PRINT, Integer BASIC 에는 3개의 토큰이 있습니다.하나는 키워드 뒤에 인수가 없는 경우, 이제1개는 산술식이 있는 경우, 이제1개는 문자열 [69]리터럴이 이어지는 경우입니다.

값 500과 같은 숫자 리터럴은 16비트(2바이트) 바이너리 표현으로 변환되었습니다.이 경우, 01F416진수이것이 키워드가 아닌 값임을 나타내기 위해 2바이트 [n] $B0에서 $B9 사이의 단일 바이트가 삽입되었습니다.'HELLO WORLD'와 같은 문자열 리터럴은 대신 각 문자의 높은 비트를 설정함으로써 변환되어A$C1로 저장되었습니다.변수 이름은 동일한 방식으로 변환되어 문자는 하이비트가 켜지도록 변환되고 이름 내의 숫자는 대응하는 $B0 ~ $B9로 표시되므로 변수는 다음과 같이 변환됩니다.A5$[64]C1B5로 토큰화 됩니다.

회선을 회선번호 없이 입력하면 코드는 버퍼에서 직접 실행됩니다.회선번호가 있는 경우 버퍼에서 프로그램 [64]스토리지 영역으로 복사됩니다.

런타임 인터프리터는 2개의 스택을 실행에 사용했습니다.하나는 스테이트먼트키워드용이고 이제1개는 파라미터 평가용입니다.각 스테이트먼트에는 두 가지 우선순위가 주어졌습니다.하나는 연산 순서를 제공하기 위한 일련의 수학적 연산과 같이 다단계 연산에서 발생해야 할 위치를 기술하는 것과 다른 하나는 괄호 공식의 내부 값을 계산하는 것과 같이 평가가 언제 발생해야 하는지를 제안하는 것입니다.변수가 발견되면 변수 이름이 구문 분석된 다음 변수 저장 영역에서 검색되었습니다.찾을 수 없는 경우 목록 끝에 추가됩니다.변수 저장소의 주소(아마 새로 생성되었을 수도 있음)는 평가 [64]스택에 배치되었습니다.

ROM 상세

스위트 16

Integer BASIC 이외에도 Apple ROM에는 SWEET16이라고 하는 커스텀 어셈블러 언어가 포함되어 있습니다.SWEET16은 단순한 16비트 가상 머신 내에서 실행되는 바이트 코드를 기반으로 합니다.이 모델은 간접 16비트 포인터 및 16비트 연산 함수를 통해 메모리를 주소 지정할 수 있도록 사용되었으며 이를 기본 다중 명령 8비트 6502 코드로 변환할 필요가 없습니다.전체 가상 시스템이 300바이트로 작성되었습니다.코드는 서브루틴 콜을 발행하여SWEET16을 호출하고 16비트 조작이 [70]완료되면 일반 6502 코드로 돌아갑니다.

SWEET16은 코어 BASIC 코드에 의해 사용되지 않았지만, 나중에 여러 유틸리티를 구현하기 위해 사용되었습니다.이 중 주목할 만한 것은 프로그래머의 지원 #1 ROM에 포함된 회선 번호 재설정 루틴으로, 이후 Apple II 모델에 추가되어 이전 [71]예에서 사용자가 설치할 수 있게 되었습니다.

부동 소수점

Integer BASIC은 자체 연산 루틴을 포함하지만 Apple II ROM은 또한 ROM 메모리에 있는 완전한 부동소수점 라이브러리를 포함했습니다.$F425-$F4FB그리고.$F63D-$F65D소스코드는 Apple II 매뉴얼에 포함되어 있습니다.부동소수점 계산이 필요한 베이직 프로그램에서는CALL[72]루틴에 포함시킵니다.

성능

Integer BASIC은 더 많은 원본 소스 코드를 토큰으로 처리했기 때문에 런타임 파싱이 더 필요한 버전보다 실행 시간이 더 빨랐습니다.비교를 위해 Tiny BASIC은 회선 [73]번호만 토큰화했고 MS BASIC은 키워드만 토큰화했습니다.예를 들어, Integer BASIC은 회선을 변환합니다.100 GOTO 200MS BASIC에서는 회선번호와 GOTO만 토큰화되며 200은 원래 ASCII 형식으로 유지되며 회선이 [74]발견될 때마다 16비트 정수로 다시 해석해야 했습니다.

또한 정수 연산만으로 작업하면 속도가 크게 향상됩니다.이는 16비트 포맷이 작기 때문에 메모리액세스가 적고 계산 후 부동소수점 소수점을 이동할 필요가 없기 때문입니다.당시 컴퓨터 벤치마크의 대부분은 작고 부동 소수점이 필요 없는 간단한 계산을 수행하는 경우가 많았기 때문에 Integer BASIC은 다른 대부분의 BASIC을 [o]압도했습니다.

최초의 마이크로컴퓨터 벤치마크 중 하나인 Rug/Feldman 벤치마크에서 Integer BASIC은 같은 [76]머신에서 Applesoft BASIC보다 2배 이상 빨랐습니다.수학은 덜 중요했지만 어레이 액세스와 루프 성능이 우세했던 Byte Sheve에서 Integer BASIC은 166초, Applesoft는 [77]200초가 걸렸습니다.1983년에 처음 발행된 크리에이티브 컴퓨팅 벤치마크에는 나타나지 않았습니다.그때 Integer BASIC은 [78]디폴트로 제공되지 않게 되었습니다.

다음의 테스트 시리즈는, 원래의 Rug/Feldman의 [76][75]양쪽의 기사로부터 취득한 것으로, 같은 플랫폼상의 MS 유래의 BASIC에 대한 Integer의 퍼포먼스를 나타내고 있습니다.

시스템. CPU 기본의 테스트 1 테스트 2 테스트 3 테스트 4 테스트 5 테스트 6 테스트 7
애플 II 6502(1MHz시) 정수 BASIC 1.3 3.1 7.2 7.2 8.8 18.5 28.0
애플 II 6502(1MHz시) 애플소프트 BASIC 1.3 8.5 16.0 17.8 19.1 28.6 44.8

샘플코드

다음은 Apple II Mini [79]Manual에 나열된 1977년판 Integer BASIC for the Apple II에서 작성된 Breakout 버전입니다.[80]버전에는 다수의 알려진 버그가 있습니다.

프로그램은 디스플레이를 다음과 같이 설정하는 것으로 시작합니다.TEXT그리고 나서.CALL -936화면을 클리어합니다.회선 20~27 및 회선 100 및 200의 관련 서브루틴은 Wozniak이 Jobs에 대해 제시한 색상 선택 코드이다.30행은 다음 텍스트창을 설정합니다POKE 32,20[p] 그런 다음 일련의 데이터를 사용하여COLOR그리고.VLIN플레이필드와 스코어가 텍스트창에 표시됩니다.메인 루프 전체가 연관된 서브루틴을 사용하여 40 ~90 회선에서 실행됩니다.프로그램의 종료에 가까운 또 다른 대량의 코드는 최종 점수 인쇄와 관련되어 있습니다.기타 관심사항에는#(비음성) 라인 20의 비교, 스트링을 사용한 고음성 생성PEEK회선 70의 루프를 사용한 저음 톤에 비해 65의 회선에서는 s, 단일 [q]디스플레이에서는 그래픽과 텍스트가 혼재하고 있습니다.

5 본문: 불러 -936: VTAB 4:  10: 인쇄하다 "** 브레이크아웃 게임***": 인쇄하다 7 인쇄하다 "목적은 5개의 공으로 모든 벽돌을 파괴하는 것입니다.: 위해서 N=1 로. 7000: 다음 분. N 10 DIM A$(20),B$(20): GR: 인쇄하다: 입력 "안녕, 이름이 뭐니?",A$:A=1:B=13:C=9:D=6:E=15: 인쇄하다 "표준 색상",; A$; 20 입력 "? ",B$: 한다면 B$#'N' 그리고. B$#"아니요" 그리고나서 30: 위해서 I=0 로. 39: 색.=I/2*(I<>32): 비디오 0,39 AT I 25 다음 분. I: 쿡쿡 찌르다 34,20: 인쇄하다: 인쇄하다: 인쇄하다: 위해서 I=0 로. 15: VTAB 21+I 모드 2:  I+I+1: 인쇄하다 I;: 다음 분. I: 쿡쿡 찌르다 34,22: VTAB 24: 인쇄하다: 인쇄하다 "배경"; 27 GOSUB 100: A=E: 인쇄하다 "이븐 브릭";: GOSUB 100: B=E: 인쇄하다 "오드 벽돌";: GOSUB 100: C=E: 인쇄하다 "패드";: GOSUB 100: D=E : 인쇄하다 '볼';: GOSUB 100 30 POKE34,20:색.=A:위해서I=0로.39:VLIN0,39ATI:다음 분.I:위해서 I=20로.34걸음2: I+1:인쇄하다 I/2-9;:색.=B:비디오 0,39 AT I:색.=C:위해서 J=I 모드 4 로. 39 걸음4 35 비디오 J,J+1 AT I: 다음 분. J,I:  5: 인쇄하다 "점수 = 0": 인쇄하다: 인쇄하다: 쿡쿡 찌르다 34,21: S=0: P=S: L=S: X=19: Y=19: X=19 40 색.=A:줄거리.X,Y/3:X=19:Y=RND(120):V=-1:W=RND(5)-2:L=L+1:한다면L>5그리고나서140:6:인쇄하다"볼 넘버";L:인쇄하다:위해서I=1로.100:GOSUB200:다음 분.I:M=1:N=0 50 J=Y+W: 한다면 J>=0 그리고. J<>120 그리고나서 60: W=-W: J=Y: 위해서 I=1 로. 6: K=훔쳐보다(-16336): 다음 분. I 55 한다면 훔쳐보다(-16287>127 그리고나서 소프트웨어=1-소프트웨어 60 I=X+V: 한다면 I<>0 그리고나서 400: GOSUB 200: 색.=A: K=J/3: 한다면 I>39 그리고나서 70: 한다면 스크래치(I,K)=A 그리고나서 90: 한다면 I 그리고나서 120: N=N+1: V=(N>9)+1: W=(K-P)*2-5:M=1 65 Z = 훔쳐보다(-16336)-훔쳐보다(-16336)-훔쳐보다(-16336)-훔쳐보다(-16336)-훔쳐보다(-16336)-훔쳐보다(-16336)-훔쳐보다(-16336): 에 가다 90 70 위해서 I=1 로. 6: M=훔쳐보다(-16336): 다음 분. I: I=X: M=0 80 V=-V 90 줄거리. X,Y/3: 색.=E: 줄거리. I,K: X=I: Y=J: 에 가다 50 99 인쇄하다 "유효하지 않습니다. 다시 입력"; 100 입력 "컬러(0~15)",E: 한다면 E<>0 또는 E>15 그리고나서 99: 돌아가다 120 한다면 M 그리고나서 V=ABS(V): 비디오 K/2*2,K/2*2+1 AT I: S=S+I/2-9: VTAB 21:  13: 인쇄하다 S 123 Q = 훔쳐보다(-16336)-훔쳐보다(-16336)-훔쳐보다(-16336)-훔쳐보다(-16336)-훔쳐보다(-16336)-훔쳐보다(-16336)-훔쳐보다(-16336)-훔쳐보다(-16336)-훔쳐보다(-16336)-훔쳐보다(-16336) 124 한다면 S<>720 그리고나서 80 130 인쇄하다 "축하합니다, 당신이 이겼습니다.": 에 가다 150 140 인쇄하다 "고객님의 점수";S;「IS」;: 에 가다 141+S/100 141 인쇄하다 "끔찍해!": 에 가다 150 142 인쇄하다 "쥐": 에 가다 150 143 인쇄하다 "불쌍하다": 에 가다 150 144 인쇄하다 "공정": 에 가다 150 145 인쇄하다 "좋아요": 에 가다 150 146 인쇄하다 "아주 좋아요.": 에 가다 150 147 인쇄하다 "탁월하다": 에 가다 150 148 인쇄하다 "거의 완벽합니다." 150 인쇄하다 "같은 색";: 에 가다 20 200 한다면 소프트웨어 그리고나서 220: Q=(PDL(0)-5)/6: 한다면 Q<>0 그리고나서 Q=0 205 한다면 Q>=34 그리고나서 Q=34: 색.=D: 비디오 Q,Q+5 AT 0: 색.=A: 한다면 P>Q 그리고나서 210: 한다면 Q 그리고나서 비디오 0,Q-1 AT 0: P=Q: 돌아가다 210 한다면 P=Q 그리고나서 돌아가다: 한다면 Q#34 그리고나서 비디오 Q+6,39 AT 0: P=Q: 돌아가다 220 Q=(Y-5)/3+RND(3)*SGN(W)*(X<>10 그리고. V<>0): 한다면 Q<>0 그리고나서 Q=0: 에 가다 205 400 위해서 I=1 로. 80: Q=훔쳐보다(-16336): 다음 분. I: 에 가다 40 

메모들

  1. ^ 게이츠가 말했듯이, "더 강력한 베이직...부동 소수점 사용"입니다.[3]
  2. ^ IBM 370/155의 가격은 1970년에 2백만 달러(2021년에는 [6]1천4백만 달러 상당)를 넘었습니다.
  3. ^ Tymshare는 시스템 [7]접속에 대해 시간당 약 10달러(2021년 70달러 상당)의 요금을 부과했으며, 소규모 서비스는 약 [8]5달러에 구입할 수 있었다.
  4. ^ 문자열 처리는 "그 자신의 것"이 아니라 HP BASIC에서 사용하는 것과 동일한 시스템입니다.
  5. ^ 어떤 BASIC이 실행 중인지 명확히 하기 위해 애플소프트는]신속한.
  6. ^ MS가 '즉시 모드'라고 부르는 것.
  7. ^ 헬머스는 가장 낮은 줄의 번호가 [26]1이라고 말합니다.
  8. ^ 그리고 일부 [48]버전에서는 완전히 망가져 있습니다.
  9. ^ HP는 (및 ) 대신 (및 )도 허용했습니다.
  10. ^ 이것은 또한 Dartmouth BASIC을 사용한 것과 대조됩니다.CONVERT명령어를 사용하여 문자열을 ASCII 값의 배열로 변환합니다.이 값을 사용자가 조작하여 다시 문자열 형식으로 변환합니다.CONVERT.
  11. ^ 매뉴얼에서는 실제 값의 범위는 0 ~255 [54]미만이라고 명시하지 않습니다.
  12. ^ 음수는 부호 있는 형식으로 저장되는 정수의 부작용이기 때문에 32767을 초과하는 메모리 위치는 [55]BASIC에서 음의 값으로 표시됩니다.
  13. ^ SCRN의 홀수 구문에 주의해 주십시오.SCRN은 값을 반환하기 때문에 기술적으로 함수이지만 다음과 같은 함수와 같은 구문은 사용하지 않습니다.A=SCRN(X,Y).
  14. ^ 원래 값의 첫 번째 자리는 0 ~9 의 값을 선택하기 위해서 사용되었기 때문에 이 예에서는 500 의 첫 번째 자리에 대해 토큰은 $B5 가 됩니다.
  15. ^ 게이츠는 Integer BASIC을 [75]MS와 같은 "진짜" BASIC과 비교하는 것은 불공평하다고 말하며 이에 대해 불평했다.
  16. ^ 즉, 텍스트는 화면상의 24줄 중 20줄에서 시작되며, 4줄의 텍스트는 하단에 남습니다.
  17. ^ Apple II에서 일반적인 조작을 실행한 다양한 CALL, PEEK 및 POKE 목록은 Peeks, Pokes, Calls And Programming Notes, Charles Turley, 1996년 12월 15일을 참조하십시오.

레퍼런스

인용문

  1. ^ a b c d e f g h i 워즈니악 2014.
  2. ^ a b Weyhrich 2001.
  3. ^ Rugg, Tom; Feldman, Phil (October 1977). "BASIC timing comparisons… revised and updated". Kilobaud. pp. 20–25.
  4. ^ Baum, Allan (18 July 2016). "Oral History of Allen Baum" (Interview). Interviewed by David Brock. p. 12.
  5. ^ "Passing the 10-year mark". MEASURE Magazine. Hewlett Packard. October 1976.
  6. ^ Cooney, Michael. "The (mostly) cool history of the IBM mainframe". ARN.
  7. ^ Bourne, Charles; Hahn, Trudi Bellardo (August 2003). A History of Online Information Services, 1963–1976. p. 387. ISBN 9780262261753.
  8. ^ Barry, Tim (27 April 1981). "Back to BASIC". InfoWorld. p. 7.
  9. ^ a b Williams & Moore 1984,
  10. ^ Fisk, Nathan (2009). Understanding Online Piracy. ABC-CLIO. p. 14. ISBN 9780313354748.
  11. ^ 워즈니악 1977년
  12. ^ Weyhrich 2001, 최초의 Apple II와 함께 출하된 [Integer] BASIC은 조립되지 않았습니다.손으로 쓴 사본이 하나 있었는데 모두 손으로 쓰고, 모두 손으로 조립해서..
  13. ^ "The Apple 1 Project".
  14. ^ "Apple I Computer Ad". 30 November 2009.
  15. ^ Bunnell, David (September 1975). "Across the Editor's Desk". Computer Notes. Albuquerque NM.: MITS. 1 (4): 2. Archived from the original on March 23, 2012.
  16. ^ "Classic Gaming: A Complete History of Breakout". GameSpy. Archived from the original on July 8, 2012. Retrieved April 19, 2010.
  17. ^ Raskin, Roy; Wozniak, Steven (August 1976). "Floating Point Routines for the 6502". Dr. Dobb's. pp. 17–19.
  18. ^ Apple II Reference Manual. Apple Computer. January 1978. pp. 94–95.
  19. ^ a b 워즈니악 2018.
  20. ^ 헤르츠펠트 1985년
  21. ^ 라스킨 1978, 페이지 11
  22. ^ 래스킨 1978, 페이지 12페이지 12
  23. ^ 라스킨 1978, 페이지 46
  24. ^ Raskin 1978, 페이지 49-55
  25. ^ 라스킨 1978, 페이지 48
  26. ^ a b 조타수 1978, 페이지 24
  27. ^ a b 라스킨 1978 페이지 118
  28. ^ 라스킨 1978, 페이지 65-67
  29. ^ 라스킨 1978, 페이지 124
  30. ^ Wozniak 1977, "이 혼합 모드는 화면 하단에 40x40 컬러 그래픽 그리드 및 스크롤 텍스트 4줄을 제공합니다."
  31. ^ 라스킨 1978, 페이지 100
  32. ^ 라스킨 1978, 페이지 15
  33. ^ 라스킨 1978, 페이지 52
  34. ^ 라스킨 1978, 페이지 107
  35. ^ 라스킨 1978, 페이지 100, 101
  36. ^ 라스킨 1978, 페이지 38
  37. ^ 라스킨 1978, 페이지 27
  38. ^ 라스킨 1978, 페이지 61
  39. ^ Raskin 1978, 94
  40. ^ 라스킨 1978, 페이지 40,120
  41. ^ 라스킨 1978, 페이지 40
  42. ^ "Strings". learn-c.org.
  43. ^ Brooks, Steve. "Characters & Strings in Fortran" (PDF). University of Hawaii.
  44. ^ "Integer, Floating Point and String Variables". C64 Programmer's Manual. Commodore.
  45. ^ North Star BASIC version 6 (PDF). North Star Corporation. 1977. Archived from the original (PDF) on 2020-03-05. Retrieved 2020-03-03.
  46. ^ The ATARI BASIC Reference Manual. Atari Inc. 1980.
  47. ^ a b 라스킨 1978, 페이지 89
  48. ^ "Create your own Version of Microsoft BASIC".
  49. ^ a b 라스킨 1978, 페이지 88
  50. ^ 라스킨 1978, 페이지 92
  51. ^ altair 8080 basic manual (PDF). MITS. April 1977. p. 30.
  52. ^ a b c d 라스킨 1978, 페이지 120
  53. ^ 미니 1977, 17페이지
  54. ^ a b 라스킨 1978, 페이지 36
  55. ^ 미니 1977, 18페이지
  56. ^ 라스킨 1978 페이지 84
  57. ^ 라스킨 1978, 페이지 31
  58. ^ 래스킨 1978, 페이지 32
  59. ^ 라스킨 1978, 페이지 33
  60. ^ 라스킨 1978, 페이지 73
  61. ^ 라스킨 1978, 페이지 74
  62. ^ Atari BASIC Reference Manual (PDF). Atari. 1983. p. 25.
  63. ^ North Star BASIC version 6 (PDF). North Star Corporation. 1977. p. 8. Archived from the original (PDF) on 2020-03-05. Retrieved 2020-03-03.
  64. ^ a b c d e 워즈니악 1977, 페이지 42
  65. ^ 조타수 1978, 페이지 18
  66. ^ "PRELIMINARY APPLE BASIC USERS MANUAL". October 1976.
  67. ^ "APPLE II BASIC PROGRAMMING MANUAL". 1978.
  68. ^ "APPLE II REFERENCE MANUAL" (PDF).
  69. ^ Paul R. Santa-Maria. "Apple II Integer Basic Disassembly" (PDF). Retrieved 2020-09-14.[영구 데드링크]
  70. ^ 워즈니악 1977, 페이지 43
  71. ^ Apple Programmers Aid (PDF). Apple. 1978.
  72. ^ Apple II Reference Manual (PDF). January 1978. pp. 94–95.
  73. ^ Allison, Dennis (1976). "Build Your Own BASIC". Dr. Dobb's Journal. Vol. 1, no. 1. p. 11.
  74. ^ Hardiman, Roger. "Altair BASIC 3.2 (4K) - Annotated Disassembly". p. 1.11. Archived from the original on 5 November 2001.
  75. ^ a b Rugg, Tom; Feldman, Phil (October 1977). "BASIC timing comparisons… revised and updated". Kilobaud. pp. 20–25.
  76. ^ a b Rugg, Tom; Feldman, Phil (June 1977). "BASIC Timing Comparisons… information for speed freaks". Kilobaud. pp. 66–70.
  77. ^ Gilbreath, Jim (September 1981). "A High-Level Language Benchmark". Byte. p. 192.
  78. ^ Ahl, David (November 1983). "Benchmark Comparison Test". Creative Computing. p. 260.
  79. ^ 미니 1977, 페이지 65-67
  80. ^ "Breakout, Annotated". GitHub. 16 August 2021.

참고 문헌

외부 링크