코모도어 BASIC

Commodore BAS
코모도어 BAS
설계자마이크로소프트
개발자마이크로소프트
처음 등장한1977년; 45년 전 (연방)
플랫폼PET to C128

코모도어 베이직(PET BASIC 또는 CBM-BASIC이라고도 함)은 코모도어 인터내셔널의 8비트 가정용 컴퓨터 라인에 사용되는 베이직 프로그래밍 언어방언으로 1977년 PET에서 1985년 C128까지 확장되어 있습니다.

코어는 6502 Microsoft BASIC을 기반으로 하며 Applesoft BASIC과 같은 당대의 다른 6502 BASIC과 많은 특징을 공유하고 있습니다.코모도어는 1977년 잭 트래미엘이 빌 게이츠"나는 이미 결혼했고 영구 [1]라이선스에 25,000달러 이하를 지불하겠다"며 개당 3달러의 요금 제안을 거절한 후 "한 번 지불하고 로열티 없이" 마이크로소프트로부터 베이직 라이센스를 취득했다.

원래의 PET 버전은 거의 수정되지 않은 원래의 Microsoft 구현과 매우 유사했습니다.C64의 BASIC 2.0도 마찬가지로 C128(C64 모드) 및 기타 모델에서도 볼 수 있습니다.이후 PET는 BASIC 4.0을 탑재하여 원본과 유사하지만 플로피 디스크로 작업하기 위한 많은 명령어를 추가하였습니다.

BASIC 3.5는 C16 및 Plus/4에서 그래픽과 사운드 지원을 위한 여러 명령어가 추가된 최초의 버전입니다.BASIC 7.0은 Commodore 128에 포함되어 있으며 Plus/4의 BASIC 3.5의 구조화된 프로그래밍 명령과 기계의 새로운 기능을 활용하도록 특별히 설계된 키워드를 포함하고 있습니다.스프라이트 편집기와 기계어 모니터가 추가되었습니다.마지막 BASIC 10.0은 미공개 코모도어 65의 일부였다.

역사

Commodore는 플랫피 BASIC의 소스 코드를 가져와 다른 모든 8비트 가정용 컴퓨터용으로 내부적으로 개발했습니다.Commodore 128(V7.0 탑재)이 되어서야 Microsoft 저작권 공지가 표시되었습니다.그러나 마이크로소프트는 버전 2 또는 Commodore Basic으로 이스터 에그를 구축하여 그 진가를 증명하고 있습니다: (obscure) 명령어를 입력합니다.WAIT 6502, 1이 될 것이다Microsoft!화면에 표시됩니다.(이스터 에그는 해독이 잘 되어 있었습니다.통역기의 분해에는 메시지가 표시되지 않았습니다.)[2]

인기 있는 코모도어 64는 가정용 컴퓨터용이었기 때문에 버전 4.0을 탑재한 PET/CBM 시리즈 이후에 출시되었지만, PET/CBM 시리즈는 내장된 프로그래밍 언어가 더 많이 사용되는 것으로 추정되는 비즈니스 및 교육용 컴퓨터였습니다.이것에 의해, V2는 소형 ROM에 들어가 제조 코스트를 삭감할 수 있었습니다.

기술적 세부사항

프로그램 편집

코모도어 ROM 상주 BASIC 인터프리터KERNAL의 편리한 기능은 풀스크린 [3][4]에디터였습니다.Commodore 키보드에는 시프트 키를 누를 때 방향을 바꾸는 커서 키가 2개밖에 없지만 화면 편집기를 통해 사용자는 직접 명령을 입력하거나 화면 상의 어느 곳에서든 프로그램 줄을 입력 및 편집할 수 있습니다.행에 회선 번호가 부가되어 있는 경우는, 토큰화되어 프로그램 메모리에 보존됩니다.숫자로 시작하지 않은 행은 를 눌러서 실행되었습니다.RETURN 커서가 회선상에 있을 때마다 키를 누릅니다.이로 인해 프로그램엔트리 인터페이스의 대폭적인 업그레이드가 이루어졌습니다.이러한 업그레이드에서는, 그 당시 일반적인 가정용 컴퓨터의 BASIC은, 일반적으로 회선 에디터를 사용하고 있었습니다.이 BASIC은, 다른 PC에 의해서 기동됩니다.EDIT커서의 위치에서 행을 잘라낸 "copy cursor" 명령 또는 "copy cursor" 명령입니다.

또한 이름 있는 파일을 카세트를 포함한 모든 장치에 저장할 수 있는 기능이 있었습니다. 이 장치는 PET 시절 널리 사용되던 스토리지 장치이며 8비트 코모도어의 수명 내내 저렴한 대용량 스토리지로 사용되었습니다.대부분의 시스템은 디스켓의 파일 이름만 지원하므로 다른 장치에 여러 파일을 저장하는 것이 더 어려웠습니다.이러한 다른 시스템의 사용자는 파일 위치에 있는 레코더의 카운터 표시를 기록해야 했지만, 이는 부정확하고 오류가 발생하기 쉽습니다.PET(및 BASIC 2.0)를 사용하면 카세트의 파일을 이름으로 요청할 수 있습니다.디바이스는, 일치하지 않는 파일명을 무시하고, 데이터를 차례차례 읽어 파일명을 검색합니다.또한 파일 시스템은 파일에 로드 또는 저장할 수 있는 강력한 레코드 구조에 의해 지원되었습니다.코모도어 카세트 데이터는 다른 제조업체에서 사용하는 덜 비싼(그리고 덜 신뢰할 수 있는) 아날로그 방법이 아닌 디지털 방식으로 기록되었습니다.따라서 표준 테이프 레코더가 아닌 전문 데이터셋이 필요했습니다.표준 레코더를 사용할 수 있도록 아날로그-디지털 변환기를 사용하는 어댑터를 사용할 수 있었지만, 이 어댑터는 데이터셋보다 조금 저렴합니다.

LOAD 명령어는 옵션의 파라미터 1과 함께 사용할 수 있습니다. 파라미터는 파일의 처음 2바이트에 포함된 메모리주소로 프로그램을 로드합니다(이들 바이트는 폐기되어 메모리에 유지되지 않습니다).,1 파라미터를 사용하지 않을 경우, 프로그램은 BASIC 프로그램 영역의 시작 부분에 로드되며, 이 영역은 기계마다 크게 다릅니다.일부 Commodore BASIC 변종 제공BLOAD그리고.BSAVE지정된 메모리 위치에서 비트맵을 로드 또는 저장하여 Applesoft BASIC의 명령어와 동일하게 동작하는 명령어.

PET는 재배치 가능한 프로그램을 지원하지 않으며 LOAD 명령은 항상 프로그램 파일에 포함된 처음 2바이트로 로드됩니다.이로 인해 다른 Commodore 머신에 저장된 BASIC 프로그램을 로드하려고 하면 PET의 BASIC이 예상하는 것보다 높은 주소로 로드되고 프로그램을 적절한 위치로 "이동"하는 회피책이 있었기 때문에 문제가 발생했습니다.프로그램이 CBM-II 머신에 저장되어 있는 경우, PET에 로드하는 유일한 방법은 디스크 섹터 에디터로 처음 2바이트를 수정하는 것이었습니다.CBM-II 시리즈의 기본 프로그램 영역이 $0으로 되어 있기 때문에 PET는 제로 페이지에 로드되어 잠깁니다.

Commodore BASIC 키워드는 먼저 시프트되지 않은 키 프레스를 입력한 후 다음 문자의 시프트 키 프레스를 입력하여 생략할 수 있습니다.그러면 높은 비트가 설정되므로 인터프리터는 읽기를 중지하고 검색 테이블에 따라 문을 구문 분석합니다.즉, 하이비트가 설정된 곳까지의 스테이트먼트가 명령어 전체를 입력하는 대신 받아들여진 것입니다.단, 모든 BASIC 키워드는 싱글바이트 토큰으로 메모리에 저장되므로 최적화가 아닌 스테이트먼트 입력에 편리합니다.

기본 대문자만 설정된 문자 집합에서는 이동된 문자가 그래픽 기호로 표시됩니다(예: 명령어,GOTO, 생략할 수 있습니다.G{Shift-O}(와 비슷했다)GΓ화면상).대부분의 명령어는 두 글자 길이였지만 경우에 따라서는 더 길었습니다.이런 경우 애매모호함이 존재하기 때문에 다음과 같이 명령어의 이동되지 않은 문자가 더 많이 필요했습니다.GO{Shift-S}(GO♥필요한 경우)GOSUB일부 명령어는 다른 명령어와의 간결함 또는 모호함 때문에 생략형이 없습니다.예를 들어 명령어,INPUT그 철자가 다른 철자와 충돌했기 때문에 줄임말이 없었다INPUT#키워드 룩업테이블의 선두에 가까운 위치에 있는 키워드.많이 사용되는 것PRINT명령어에는 싱글이 있었다.?대부분의 Microsoft BASIC 방언에서 흔히 볼 수 있는 바로 가기입니다.명령어 생략은 Commodore BASIC에서만 가능합니다.

이 토큰화 방식에는 오류가 있어서, 1개의 토큰화 방식 중 하나가REM(코드에 코멘트를 추가하는 BASIC 스테이트먼트) 뒤에{Shift-L}프로그램 목록을 표시하려고 하면 BASIC 인터프리터가 목록을 즉시 중단하고?SYNTAX ERROR로 돌아가다READY.신속한.이 결함은 회피하기 쉽지만 작업을 보호하고 싶어하는 프로그래머에 의해 어느 정도 영향을 받았습니다.

키워드를 줄임말함으로써 하나의 프로그램 행에 더 많은 코드를 넣을 수 있었다(40컬럼 디스플레이에서는 C64 또는 PET, VIC-20의 22컬럼 디스플레이에서는 4개의 행을 차지할 수 있다).이를 통해 필요한 추가 프로그램 라인을 저장하기 위한 오버헤드를 약간 줄일 수 있었지만 그 이상은 아니었다.모든 BASIC 명령어는 토큰화되어 입력 방법에 관계없이 메모리에서 1바이트(또는 BASIC 7 또는 BASIC 10의 여러 명령의 경우 2바이트)를 차지합니다.그렇게 긴 줄은 편집하기가 귀찮았다.LIST명령어는 전체 명령 키워드를 표시하여 프로그램 메모리에 입력할 수 있는 2개 또는 4개의 화면 라인을 넘어 프로그램 행을 확장합니다.

성능

오리지널 Microsoft BASIC 인터프리터와 마찬가지로 Commodore BASIC은 네이티브 머신 코드보다 느립니다.테스트 결과에 따르면 16킬로바이트ROM에서 RAM으로 복사하는 데 걸리는 시간은 1초 미만입니다.[citation needed]BASIC에서는 1분 이상 걸립니다.인터프리터보다 더 빨리 실행하기 위해 프로그래머들은 실행 속도를 높이기 위해 다양한 기술을 사용하기 시작했다.하나는 변수 이름을 해석하는 것이 리터럴 숫자를 해석하는 것보다 빠르기 때문에 자주 사용되는 부동소수점 값을 리터럴 값이 아닌 변수에 저장하는 것입니다.부동 소수점은 모든 명령에서 기본 유형이기 때문에 정수 대신 부동 소수점 숫자를 인수로 사용하는 것이 더 빠릅니다.속도가 중요할 때, 일부 프로그래머들은 BASIC 프로그램의 섹션을 6502 또는 6510 어셈블리 언어로 변환하였습니다.이것은 BASIC 프로그램의 끝부분의 DATA 문장에서 메모리로 별도로 로드되고 BASIC에서 실행되었습니다.SYS명령어(직접 모드 또는 프로그램 자체)를 사용합니다.게임이나 사용자 입력을 기다리는 등 기계어의 실행 속도가 너무 빠를 경우 프로그래머는 선택한 메모리 위치(예:$C6[5] 64 의 경우, 또는$D0[6] (키보드 큐의 크기를 나타냄)의 경우 실행을 지연 또는 정지합니다.

Commodore BASIC의 고유한 기능은 제어 코드를 사용하여 화면 지우기 또는 프로그램 내 커서 위치 지정과 같은 작업을 수행하는 것입니다. 이러한 기능은 명령을 발행하여 호출할 수 있습니다.PRINT CHR$(X)여기서 X는 발행되는 제어 코드에 대응합니다(예:PRINT CHR$(147)이 컨트롤 코드 화면을 정리하는 것을)또는, 따라서 인용 문구를 기록한 데 이어⇧ Shift+CLR HOME집요한 질문에서 인용 표시 사이에 키를 눌러 베이직, 그것에 프로그램 실행에(직접 컨트롤 코드를 인쇄를 사용하여 작용되는 컨트롤 코드(이 경우는 반대 마음 속에)의 시각적 표시 표시하게 될 것이다. 적은 메모리는 전자d는 CHR$ 함수를 호출하는 것보다 빠르게 실행됩니다).이는 일반적으로 화면을 지우거나 커서를 이동하는 전용 명령어가 있는 BASIC의 다른 구현과 비교됩니다.

BASIC 3.5 이상에는 화면을 지우고 커서를 이동하기 위한 적절한 명령어가 있습니다.

Commodore BASIC의 프로그램 행에는 공백이 필요 없습니다(단, LIST 명령은 항상 행 번호와 문 사이에 공백이 표시됩니다).다음은 예를 제시하겠습니다.100 IFA=5THENPRINT"YES":GOTO160띄어쓰기를 하지 않고 프로그램을 쓰는 것이 일반적이었습니다.이 기능은 키워드 사이에 삽입된 공백이 토큰화기에 의해 삭제되지 않기 때문에 메모리를 절약하기 위해 추가되었습니다.스페이스가 있으면 여분의 공간이 생깁니다.0x20실행 중에 건너뛰는 토큰화된 프로그램의 바이트 수.행 번호와 프로그램문 사이의 공백은 토큰라이저에 의해 삭제됩니다.

대부분의 머신에서는 프로그램 행의 합계는 80자이지만, 40개의 컬럼텍스트가 있는 머신에서는 화면상의 다음 행으로 행이 반환됩니다.또, 22개의 컬럼 디스플레이가 있는 VIC-20에서는, 프로그램 행이 4개까지 점유할 수 있습니다.Commodore 128의 BASIC 7.0은 프로그램 행의 제한을 160자로 늘렸습니다(40열 행 4개 또는 80열 행 2개).다음과 같은 약어를 사용하여?대신PRINT, 한 줄에 더 많이 넣을 수 있습니다.사용자가 160자를 넘는 프로그램 행을 입력하면 BASIC 7.0이 오류를 표시합니다.이전 버전에서는 오류가 발생하지 않고 회선 길이를 초과하면 2줄 아래쪽에 READY 프롬프트가 표시됩니다.회선번호는 프로그램 행의 문자수로 카운트되기 때문에 5자리 회선번호는 1자리 숫자보다 4자 적게 허용됩니다.

Commodore BASIC 회선의 실행 순서는 회선 번호 부여에 의해 결정되지 않고 회선이 메모리에 [7]링크된 순서에 따릅니다.프로그램 행은 포인터(다음 프로그램 행의 시작 주소 포함), 행 번호 및 행의 토큰화된 코드를 사용하여 단일 링크 목록으로 메모리에 저장되었습니다.프로그램이 입력되는 동안 BASIC은 줄 번호와 포인터가 모두 오름차순이 되도록 메모리의 프로그램 줄을 계속 재정렬했습니다.단, 프로그램 입력 후 POKE 명령어를 사용하여 회선번호와 포인터를 수동으로 변경하면 순서가 어긋나거나 각 회선에 같은 회선번호를 부여할 수 있습니다.초기 BASIC이 상용화되었을 때, 이것은 프로그램의 일상적인 수정을 막기 위한 소프트웨어 보호 기술이었다.

회선 번호의 범위는 0 ~65520 이며, 회선 번호의 자리수에 관계없이 보존에 5 바이트가 소요됩니다.단, 숫자가 적을수록 실행 속도가 빨라집니다.여러 개의 문을 한 줄에 배치하면 메모리 사용량이 줄어들고 실행 속도가 빨라집니다.

GOTOGOSUB 문은 앞으로 점프할 경우 현재 줄에서 아래로 검색하여 줄 번호를 찾습니다. 뒤로 점프할 경우 프로그램 시작 부분으로 돌아가 검색을 시작합니다.이렇게 하면 큰 프로그램이 느려지므로 일반적으로 사용되는 서브루틴을 프로그램 시작 부근에 배치하는 것이 좋습니다.

변수 이름은 2자까지만 유효하므로 변수 이름은VARIABLE1,VARIABLE2,그리고.VA모두 같은 변수를 참조합니다.

Commodore BASIC은 비트 연산자 AND, ORXOR도 지원합니다.이 기능은 Microsoft 6502 BASIC 코드의 핵심이지만 Applesoft BASIC 등의 다른 구현에서는 생략되어 있습니다.

Commodore BASIC의 네이티브 번호 포맷은 상위 MS BASIC과 마찬가지로 부동 소수점입니다.대부분의 현대 BASIC 구현에서는 특성(비용)에 1바이트, 가수에 3바이트를 사용했습니다.3바이트의 변위수를 사용하는 부동소수점수의 정확도는 약 6.5자리 소수점이며 반올림 오차는 일반적입니다.6502의 Microsoft BASIC 구현에서는 40비트 부동소수점 산술이 사용되었습니다.이는 변수가 BASIC-80에서 볼 수 있는 32비트 부동소수점과는 달리 저장하는데 5바이트(4바이트 가수, 지수의 경우 1바이트)가 소요된다는 것을 의미합니다.

Microsoft BASIC의 8080/Z80 구현에서는 정수 변수와 배정도 변수를 지원했지만 6502 구현에서는 부동 소수점만 지원했습니다.

Commodore BASIC은 -32768 ~32767 범위의 부호 있는 정수 변수(%)를 지원하지만 실제로는 어레이 변수에만 사용되며 어레이 요소를 각각 2바이트로 제한함으로써 메모리를 절약하는 기능을 합니다(부동소수점 배열로 선언되면 2000개의 요소가 10,000바이트를 차지합니다).단, 정수 배열로 선언된 경우에는 4000개뿐입니다).변수를 정수로 지정하면 BASIC이 부동소수점으로 변환되어 프로그램 실행 속도가 느려지고 메모리가 낭비됩니다(이것은 정수 배열에도 적용되므로 사용 가능한 메모리를 초과하는 매우 큰 배열을 사용하지 않는 한 프로그래머는 사용하지 않도록 해야 합니다.부동 소수점으로 저장된 경우).또, 주소가 부호 있는 정수로 정의되어 있는 경우는, 32767을 넘는 POKE 또는 PEEK 메모리 위치는 사용할 수 없습니다.

숫자 0 대신에 마침표(.)를 사용할 수 있습니다.10 A=.대신10 A=0또는10 FOR A=. TO 100대신10 FOR A=0 to 100)의 경우는, 조금 고속으로 실행됩니다.

기계어 프로그램을 시작하기 위해 사용되는 SYS 문은 Commodore에 의해 추가되었으며 기계어 루틴을 호출하기 위한 USR 함수만을 특징으로 하는 원래의 Microsoft BASIC 코드에는 포함되지 않았습니다.CPU 레지스터는 자동으로 로딩됩니다.$30C-$30F(C64, 다른 머신에 따라 다름) -- 이것은 데이터를 기계어 루틴에 전달하거나 BASIC에서 커널 함수를 호출하는 수단으로 사용할 수 있습니다(예:POKE 780,147:SYS 65490화면을 클리어 합니다).

C128 이외의 Commodore 8비트 머신은 디스크소프트웨어를 자동적으로 기동할 수 없기 때문에, 통상은, 다음과 같은 BASIC 스터브를 짜넣는 것입니다.10 SYS 2048프로그램 실행을 시작합니다.사용자가 RUN 문을 입력할 필요가 없이 로드 후 소프트웨어를 자동으로 시작할 수 있습니다.이것은 BASIC의 "ready" 벡터를 후크하는 코드를 가지는 것으로 실현됩니다.$0302.

Microsoft BASIC의 다른 대부분의 버전과 마찬가지로 어레이가 DIM 스테이트먼트로 선언되지 않은 경우 어레이 요소는 자동으로 10개의 요소로 설정됩니다(어레이 요소는 0부터 카운트되므로 실제로는 11개).대규모 어레이를 선언해야 합니다.그렇지 않으면 프로그램 실행 시 BASIC에 오류가 표시되며 CLR 문을 통해 모든 변수를 삭제하지 않으면 프로그램에서 어레이의 치수를 변경할 수 없습니다.숫자 배열은 생성 시 자동으로 0으로 채워집니다.대형 배열이 치수화되면 프로그램 실행이 잠시 지연될 수 있습니다.

문자열 변수는 변수 이름에 달러 기호를 붙여 나타냅니다.따라서 변수는AA$,AA,그리고.AA%각각이 구별되는 것으로 이해될 것입니다.배열 변수도 단순 변수와 구별되는 것으로 간주되므로 A와 A(1)는 동일한 변수를 참조하지 않습니다.문자열 배열의 크기는 배열에 저장되는 문자열의 수를 나타낼 뿐이며 각 요소의 크기가 아니라 동적으로 할당됩니다.Microsoft BASIC의 다른 구현과 달리 Commodore BASIC은 프로그램 시작 시 문자열 공간을 예약할 필요가 없습니다.

Apple II와 같은 다른 8비트 머신과는 달리 Commodore의 모든 머신에는 전원을 켤 때 0으로 초기화되고 PIA/VIA/TED/CIA 타이머를 틱할 때마다 갱신되는 내장 클럭이 있습니다.따라서 초당 60회입니다.BASIC에는 현재 시간을 포함하는 TI와 TI$의 두 시스템 변수가 할당됩니다.TI는 읽기 전용이므로 수정할 수 없습니다.수정하면 구문 오류 메시지가 나타납니다.TI$는 6개의 숫자 문자열을 사용하여 시간을 설정할 수 있습니다(6개의 숫자 이외의 문자열을 사용하면 오류가 발생합니다).인터럽트가 꺼질 때마다(일부 kernal 루틴에 의해 실행됨), IEC(또는 PET 상의 IEEE 포트)에 액세스하면 클럭 갱신이 몇 틱 늦어지기 때문에 클럭은 그다지 신뢰할 수 있는 타임 키핑 방법이 아닙니다.

Commodore BASIC의 RND 함수는 클럭을 사용하여 랜덤 번호를 생성할 수 있습니다.이러한 기능은, 다음과 같이 실현됩니다.RND(0)단, 0 ~255의 숫자만 반환되므로 상대적으로 사용이 제한됩니다.그 이외의 경우, RND는 Microsoft BASIC의 다른 구현과 동일하게 동작합니다.이는 메모리 위치에 전원을 켤 때 저장된 고정 5바이트 시드 값을 통해 의사 랜덤 시퀀스가 사용되기 때문입니다.$8B-$8F(장소는 다른 머신에 따라 다릅니다).0보다 큰 임의의 수의 RND는 RND 함수에 포함된 값과 시드 값에서 결합된 난수를 생성하며, RND 함수가 실행될 때마다 1씩 갱신된다.음수인 RND는 번호로 지정된 현재 시드 값 시퀀스의 한 포인트로 이동합니다.

RND 문에서는 진정한 난수를 생성할 수 없기 때문에 C64 및 C128에서는 난수에 대해 SID 칩의 백색 노이즈 채널을 사용하는 것이 더 일반적입니다.

BASIC 2.0은 문자열의 가비지 수집이 매우 느리기로 악명 높다.가비지 컬렉션은 FRE 함수가 실행될 때마다 자동으로 호출되며, 프로그램 진행 중에 다수의 문자열 변수와 배열이 조작되었을 경우 최악의 상황에서 이를 클리어하는 데 1시간 이상 걸릴 수 있습니다.또한 BASIC은 이 루틴을 수행하는 동안 RUN/STOP 키를 스캔하지 않으므로 가비지 수집을 중단할 수도 없습니다.BASIC 4.0은 백 포인터를 가진 개선된 가비지 컬렉션 시스템을 도입하였으며 이후 코모도어 베이직의 모든 구현체도 이를 갖추고 있습니다.

BASIC 2.0의 FRE 함수는 32768 이상의 서명된 번호를 처리할 수 없다는 또 다른 기술적 결함을 겪었습니다.따라서 함수가 C64(38k BASIC 메모리)에서 호출되면 음의 빈 BASIC 메모리가 표시됩니다(보고된 숫자에 65535를 추가하면 올바른 빈 메모리가 확보됩니다).PET 및 VIC-20은 BASIC에서 사용할 수 있는 총 메모리가 32k를 넘지 않았기 때문에 이 제한은 C64가 개발될 때까지 명확해지지 않았습니다.BASIC 3.5 및 7.0의 FRE 함수는 문제를 해결하였고, BASIC 7.0의 FRE 또한 두 가지 기능으로 "분할"되었습니다. 하나는 무료 BASIC 프로그램 텍스트 메모리를 표시하는 기능이고 다른 하나는 자유 가변 메모리를 표시하는 기능입니다.

대체 수단

Simons의 BASIC 부팅 화면

네이티브 BASIC 2.0의 기능이 상대적으로 제한적이었기 때문에 많은 BASIC 확장기능이 코모도어 64용으로 출시되었습니다.가장 인기 있는 확장 기능 중 하나는 코모도어 1541 테스트/데모 디스크에 포함된 DOS 웨지입니다.BASIC에 대한 이 1KB 확장에는 메모리 내의 프로그램을 파괴하지 않고 디스크 디렉토리를 읽을 수 있는 기능 등 디스크 관련 명령어가 다수 추가되었습니다.그 후, 그 기능은, 인기 있는 Epyx FastLoad 카트리지와 같은 다양한 서드 파티의 확장 기능에 통합되었습니다.기타 BASIC 확장 기능에서는 Simons의 BASIC과 같은 스프라이트, 사운드, 고해상도 그래픽을 쉽게 코드화할 수 있도록 키워드를 추가했습니다.

BASIC 2.0의 사운드나 그래픽 기능의 부족은 많은 사용자들에게 좌절감을 주었지만, 일부 비평가들은 이것이 사용자에게 기계어를 배우도록 강요했기 때문에 궁극적으로 유익하다고 주장했다.

C64에서의 BASIC 2.0의 제한으로 인해 BASIC에서 내장된 ROM 머신 언어를 사용하게 되었습니다.지정된 메모리 위치에 파일을 로드하려면 호출로 파일 이름, 드라이브 및 디바이스 번호를 읽습니다.SYS57812"filename",8위치는 X 레지스터와 Y 레지스터에 지정됩니다.[8]POKE780,0:POKE781,0:POKE782,192;[9] 로딩 루틴은 다음과 같이 호출됩니다.SYS65493를 클릭합니다.[10]

C64용 디스크 매거진인 Loadstar는 취미 프로그래머들을 위한 장소였으며, BASIC용 프로토 명령어 컬렉션을 공유했으며, BASIC과 통화했습니다.SYS address + offset명령어를 [citation needed]입력합니다.

현대 프로그래밍의 관점에서 보면, 이전 버전의 Commodore BASIC은 프로그래머에게 좋지 않은 프로그래밍 트랩을 많이 제공했습니다.이러한 문제의 대부분은 Microsoft BASIC에서 기인하고 있기 때문에, 거의 모든 가정용 컴퓨터 BASIC은 같은 결함에 [11]시달리고 있습니다.Microsoft BASIC 프로그램의 모든 행에 프로그래머에 의해 행 번호가 할당되었습니다.프로그램 편집 또는 디버깅 중에 행을 쉽게 삽입할 수 있도록 수치(5, 10 또는 100)를 늘리는 것이 일반적이지만 계획이 잘못되면 프로그램에 큰 섹션을 삽입할 경우 코드 전체를 재구성해야 하는 경우가 많습니다.일반적인 기술은 ON 상태에서 낮은 라인 번호로 프로그램을 시작하는 것입니다.GOSUB 점프테이블. 프로그램 본문은 1000, 2000 등의 지정 행 번호로 시작하는 섹션으로 구성되어 있습니다.큰 섹션을 추가해야 할 경우 사용 가능한 다음 줄자 번호를 할당하고 점프 테이블에 삽입하기만 하면 됩니다.

이후 Commodore 및 기타 플랫폼에서의 BASIC 버전에는 DELETE 및 RENUMBER 명령과 선택한 증분에 따라 자동으로 회선번호를 선택하여 삽입하는 AUTO 회선번호부여 명령어가 포함되어 있습니다.또한 모든 변수는 전역 변수로 취급됩니다.명확하게 정의된 루프는 생성하기 어려우며, 종종 프로그래머가 GOTO 명령에 의존하게 됩니다(이 문제는 나중에 DO, LOUP, WHILE, WIEL, EX추가하여 BASIC 3.5에서 수정되었습니다).IT명령)을 참조해 주세요.특정 작업을 수행하기 위해 플래그 변수를 생성해야 하는 경우가 많습니다.Commodore의 이전 BASIC에도 디버깅명령어가 없기 때문에 버그나 미사용 변수는 트랩하기 어렵습니다.만약... 그렇다면...Z80 Microsoft BASIC의 표준 부분인 ELSE 구조는 이전 버전의 Commodore BASIC에서 사용할 수 없었던 이후 BASIC 3.5에 추가되었습니다.

사용자 인터페이스로 사용

다른 가정용 컴퓨터와 마찬가지로 코모도어의 컴퓨터도 BASIC 인터프리터로 직접 부팅되었습니다.BASIC의 파일 및 프로그래밍 명령을 직접 모드로 입력하여 소프트웨어를 로드하고 실행할 수 있습니다.RUN/STOP 키를 사용하여 프로그램 실행을 중지하면 변수 값은 RAM에 저장되며 디버깅을 위해 인쇄될 수 있습니다.128은 두 번째 64k 뱅크를 가변 스토리지 전용으로 사용했기 때문에 그 가치를NEW또는RUN명령어가 발행되었습니다.이 기능은 Commodore BASIC에 포함된 고급 화면 편집기와 함께 프로그래밍 환경에 레플리케이션과 같은 느낌을 주었습니다.프로그래머는 어느 화면에서도 프로그램 행을 삽입 및 편집할 수 있어 인터랙티브하게 프로그램을 [12]빌드할 수 있습니다.이는 일반적으로 명령줄 인터페이스로 부팅되는 CP/M이나 MS-DOS와 같은 당시의 비즈니스 지향 운영 체제와는 대조적입니다.이러한 플랫폼에 프로그래밍 언어가 필요한 경우 별도로 로드해야 했습니다.

Commodore BASIC의 일부 버전에는 디스크 고유의 기능이 포함되어 있습니다.DLOAD그리고.DSAVE명령어, Commodore 64에 내장된 버전에는 이러한 명령어가 없기 때문에 사용자가 표준으로 디스크 드라이브의 장치 번호(일반적으로 8 또는 9)를 지정해야 합니다.LOAD명령어. 그렇지 않으면 테이프로 기본 설정됩니다.Commodore 64s BASIC 2.0에서 또 다른 누락은DIRECTORY기본 메모리를 지우지 않고 디스크의 내용을 표시하는 명령어.64 에서는, 디스크상의 파일 표시는 「프로그램」의 로드로서 실장되고 있습니다.이 프로그램에는, 리스트가 표시되고 파일의 블록 사이즈가 행 번호로서 표시됩니다.이로 인해 현재 로드된 프로그램을 덮어쓰는 효과가 있었습니다.DOS Wedge와 같은 애드온은 디렉토리 목록을 화면 메모리에 직접 렌더링함으로써 이를 극복했습니다.

버전 및 기능

CBM BASIC 버전을 시간순으로 나열하고 기능을 순차적으로 추가합니다.

릴리즈된 버전

  • V1.0: 치클렛 키보드 및 내장 데이터셋 탑재 PET 2001 (오리지널 PET)
    • 어레이는 256개의 요소로 제한되어 있습니다.
    • PEEK 명령어는 $C000 이상의 BASIC ROM 로케이션에서 명시적으로 비활성화되어 있습니다.
  • V2.0 (초회 출시): 풀 트래블 키보드 및 업그레이드 ROM 탑재 PET 2001
    • IEEE-488 지원 추가
    • 가비지[13] 수집을 개선하다
    • 어레이 버그를 수정하다
    • 부활절 달걀 – 입력WAIT6502,[number] 디스플레이MICROSOFT!임의의 횟수
  • V4.0: PET/CBM 4000/8000 시리즈(및 최신 버전의 PET 2001)
    • 디스크 조작:DLOAD,DSAVE,COPY,SCRATCH,등 (총 15개)
    • 디스크 오류 채널 변수:DS,DS$
    • 대폭 개선된 쓰레기 수거 성능[13]
  • V2.0 (두 번째 릴리즈, 4.0 이후): VIC-20, C64
  • V2.2 C64GS(1990)
  • V4+ : CBM-II 시리즈(일명 B, P 범위)
    • 메모리 관리:BANK
    • 많은 디스크 작업:BLOAD, BSAVE,DCLEAR
    • 포맷된 인쇄:PRINT USING,PUDEF
    • 오류 트래핑:DISPOSE
    • 대체 분기:ELSE
    • 동적 오류 처리:TRAP,RESUME,ERR$()
    • 유연한DATA읽기:RESTORE [수고]
    • 문자열 검색 기능:INSTR
  • V3.5: C16/116, Plus/4
    • 사운드 및 그래픽스 명령어
    • 조이스틱 입력:JOY
    • 10진수16진수 변환:DEC(),HEX$()
    • 구조화 루프:DO,LOOP,WHILE,UNTIL,EXIT
    • 기능 키 할당:KEY(다이렉트 모드도)
    • 프로그램 입력/삭제:AUTO,DELETE,RENUMBER
    • 디버깅(디버깅): TRON, TROFF
    • MLM entry 명령어:MONITOR
    • C(1)16, 플러스/4 부활절 달걀 – 입력 SYS 52650
  • V7.0: C128
    • 더 많은 사운드 및 그래픽 명령(스프라이트 처리 포함)
    • 기본 제공 스프라이트 편집기:SPRDEF
    • 다중 스테이트먼트블록IF THEN ELSE구조:BEGIN,BEND
    • 패들, 라이트펜 입력:POT,PEN
    • 배타적 또는 기능:XOR
    • 변수 주소 가져오기:POINTER
    • 텍스트 모드 창:WINDOW
    • 제어된 시간 지연:SLEEP
    • 메모리 관리:SWAP,FETCH,STASH,FRE(1)
    • 128의 뱅크 스위칭을 사용하여 변수와 별도로 프로그램 코드를 저장합니다.프로그램이 GOTO 명령으로 시작된 경우 변수 값은 프로그램 실행 전반에 걸쳐 유지됩니다.
    • 많은 디스크 작업:BOOT,DVERIFY
    • CPU 속도 조정:FAST,SLOW(2 MHz 대 1 MHz)
    • C64 모드로 들어갑니다.GO64
    • 문서화되지 않은 작업:RREG(CPU 레지스터를 읽은 후SYS)
    • 구현되지 않은 명령어:OFF,QUIT
    • C128 부활절 달걀 – 입력 SYS 32800,123,45,6

미공개 버전

  • V3.6 : Commodore LCD (미공개 시제품).V7.0과 거의 동일하지만 다음과 같은 [14]차이가 있습니다.
    • VOLUME대신VOL
    • EXIT대신QUIT
    • FAST,SLOW명령어가 없습니다.
    • 추가 명령:POPUPS
  • V10 : Commodore 65 (시제품 미공개)
    • 그래픽스/비디오 명령어:PALETTE,GENLOCK
    • 마우스 입력:MOUSE,RMOUSE
    • 텍스트 파일(SEQ) 유틸리티:TYPE
    • 프로그램 편집:FIND,CHANGE
    • 메모리 관리:DMA,FRE(2)
    • 구현되지 않은 명령어:PAINT,LOCATE,SCALE,WIDTH,SET,VIEWPORT,PASTE,CUT

주요 확장 패키지

레퍼런스

  1. ^ 2007년 12월 10일 컴퓨터 역사 박물관에서 열린 Commodore 64 25주년 기념식에서 Jack Tramiel에 의해 발표됨[1] 2008-12-11년 Wayback Machine [2] 2017-10-03년 Wayback Machine [3]에 아카이브됨
  2. ^ "Bill Gates' Personal Easter Eggs in 8 Bit BASIC - pagetable.com". www.pagetable.com. Retrieved 8 August 2018.
  3. ^ "Keyboarding and the Screen Editor". July 1985.
  4. ^ "Byte July 1983" (PDF).
  5. ^ Leemon, Sheldon (1987). Mapping the Commodore 64 & 64C. COMPUTE! Publications. p. 37. ISBN 9780874550825. Retrieved 2018-03-25.
  6. ^ Cowper, Ottis R. (1986). Mapping the Commodore 128. COMPUTE! Publications. p. 66. ISBN 9780874550603.
  7. ^ "Mapping the Commodore 64".
  8. ^ Leemon, Sheldon (1987). Mapping the Commodore 64 & 64C. COMPUTE! Publications. p. 209. ISBN 9780874550825. Retrieved 2018-03-25.
  9. ^ Leemon, Sheldon (1987). Mapping the Commodore 64 & 64C. COMPUTE! Publications. p. 71. ISBN 9780874550825. Retrieved 2018-03-25.
  10. ^ Leemon, Sheldon (1987). Mapping the Commodore 64 & 64C. COMPUTE! Publications. p. 231. ISBN 9780874550825. Retrieved 2018-03-25.
  11. ^ "Atari BASIC and PET Microsoft BASIC. A BASIC Comparison".
  12. ^ Scrimshaw, N. B. (11 November 2013). An Introduction to the Commodore 64: Adventures in Programming. ISBN 9781489967879.
  13. ^ a b http://www.zimmers.net/anonftp/pub/cbm/firmware/README.txt[베어 URL 플레인텍스트 파일]
  14. ^ "Mike Naberezny – Commodore LCD Firmware". mikenaberezny.com. Retrieved 8 August 2018.

원천

베이직 2.0
  • 앵그리하우젠 외(1983)코모도어 64의 해부학(전체 참조는 C64 기사 참조).
베이직 3.5
  • 제라드, 피터, 버진, 케빈(1985년).완전한 COMDORE 16 ROM 분해.제럴드 덕워스ISBN 0-7156-2004-5.
베이직 7.0
  • 자비스, 데니스, 스프링거, 짐 D.(1987년).베이직 7.0 내부 기능그랜드 래피즈, 미시간: 주바쿠스 소프트웨어, Inc.ISBN 0-916439-71-2.
베이직 10.0