맨위로가기

코모도어 도스

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

코모도어 도스(CBM DOS)는 코모도어 컴퓨터에서 사용된 디스크 운영 체제이다. 7가지 버전이 존재하며, 모델 번호가 15로 시작하는 드라이브는 시리얼 IEEE-488 버스를 사용하고, 다른 드라이브는 병렬 IEEE-488을 사용한다. 1541 드라이브에 사용된 버전 2.6이 가장 널리 알려져 있다. 코모도어 도스는 파일 접근, 파일 유형, DOS 명령어 등을 제공하며, "save-with-replace" 버그와 같은 기술적 특징을 가지고 있다.

더 읽어볼만한 페이지

  • 코모도어 64 소프트웨어 - Contiki
    Contiki는 메모리, 전력, 처리 능력 등이 제한된 하드웨어에서 실행되도록 설계된 오픈 소스 운영 체제이며, 다양한 임베디드 시스템을 지원하고 uIP, uIPv6, Rime 스택 등의 네트워킹 메커니즘과 ContikiMAC, Cooja를 제공한다.
  • 디스크 운영체제 - MS-DOS
    MS-DOS는 마이크로소프트가 개발한 개인용 컴퓨터용 디스크 운영 체제로, IBM PC의 표준 운영 체제로 널리 사용되었으며, 단일 작업 환경과 명령줄 인터페이스를 특징으로 한다.
  • 디스크 운영체제 - CP/M
    CP/M은 게리 킬달이 개발한 8비트 마이크로컴퓨터용 운영체제로, 플로피 디스크 기반의 다양한 하드웨어 플랫폼에서 작동하며, 뛰어난 이식성과 방대한 소프트웨어 라이브러리를 바탕으로 1980년대 초반 널리 사용되었으나, MS-DOS의 부상으로 시장 점유율을 잃었지만 MS-DOS와 초기 윈도우 운영체제에 영향을 미쳤다.
코모도어 도스 - [IT 관련 정보]에 관한 문서
기본 정보
1541으로 포맷된 디스크의 디렉터리를 나열한 모습
1541로 포맷된 디스크의 디렉터리를 나열한 모습
개발사코모도어 인터내셔널
프로그래밍 언어영어
지원 플랫폼MOS 6502 계열
라이선스사유
최신 버전10.0

2. CBM DOS 버전

코모도어 도스에는 최소 7개의 버전이 존재한다. 모델 번호가 15로 시작하는 드라이브는 코모도어 고유의 시리얼 IEEE-488 버스 (IEC 버스) 시리얼 (TALK/LISTEN) 프로토콜을 통해 연결되며, 다른 모든 드라이브는 병렬 IEEE-488을 사용한다.


  • 1.0 – 2040, 3040 플로피 드라이브
  • 2.0 – 4040, 3040 플로피 드라이브
  • 2.5 – 8050 플로피 드라이브
  • 2.6 – 1540, 1541 (SX-64, 1551, 2031 (+"lp"), 4031 플로피 드라이브 포함)
  • 2.7 – 8050, 8250 (+"lp"), SFD-1001 플로피 드라이브
  • 3.0 – 1570, 외장형 1571, 8280 플로피 드라이브 (8280: 8인치), 9060, 9090 하드 드라이브
  • 3.1 – C128DCR 컴퓨터 내장형 1571 드라이브
  • 10.0 – 1581 (3½인치) 플로피 드라이브


버전 2.6은 C64 시스템의 일부인 1541에 사용되었기 때문에 가장 널리 알려진 DOS 버전이다.

참고: 상대 파일 버그를 수정한 1571의 수정된 펌웨어는 V3.0으로 ''또한'' 식별되었다. 따라서 버전 번호만으로는 두 버전을 구별할 수 없다.

2. 1. 주요 버전

코모도어 도스에는 최소 7개의 버전이 존재한다. 모델 번호가 15로 시작하는 드라이브는 코모도어 고유의 시리얼 IEEE-488 버스 (IEC 버스) 시리얼 (TALK/LISTEN) 프로토콜을 통해 연결되며, 다른 모든 드라이브는 병렬 IEEE-488을 사용한다.

  • 1.0 – 2040, 3040 플로피 드라이브
  • 2.0 – 4040, 3040 플로피 드라이브
  • 2.5 – 8050 플로피 드라이브
  • 2.6 – 1540, 1541 (SX-64, 1551, 2031 (+"lp"), 4031 플로피 드라이브 포함)
  • 2.7 – 8050, 8250 (+"lp"), SFD-1001 플로피 드라이브
  • 3.0 – 1570, 외장형 1571, 8280 플로피 드라이브 (8280: 8인치), 9060, 9090 하드 드라이브
  • 3.1 – C128DCR 컴퓨터 내장형 1571 드라이브
  • 10.0 – 1581 (3½인치) 플로피 드라이브


버전 2.6은 C64 시스템의 일부인 1541에 사용되었기 때문에 가장 널리 알려진 DOS 버전이다.

참고: 상대 파일 버그를 수정한 1571의 수정된 펌웨어는 V3.0으로 ''또한'' 식별되었다. 따라서 버전 번호만으로는 두 버전을 구별할 수 없다.

2. 2. 한국과 CBM DOS 2.6

3. 기술 개요

3. 1. 1541 디렉터리 및 파일 유형

1541 디스크는 트랙 18에 디렉터리를 저장하며, 파일 이름은 최대 16 바이트 길이이다.

1541 디스크 파일 유형
유형설명
SEQ순차적 파일. 워드 프로세서 등으로 만든 문서나 텍스트 파일 저장에 주로 사용. Linux나 UNIX의 플랫 파일과 유사하며, 내부 구조가 없음.
PRG프로그램 파일. 실행 코드나 데이터 파일을 포함. 처음 두 바이트는 커널 "load file" 루틴에서 로드 주소를 결정 (리틀 엔디안).
REL상대 파일. 순차 파일 형식의 변형. 레코드 지향 접근을 위한 인덱싱 메커니즘(사이드 섹터) 존재. 최대 254바이트 크기의 레코드를 가지며, 1부터 시작하는 번호로 임의 접근 가능.
USR사용자 지정 파일. 순차 파일과 동일 구조. DOS 개발 용이 목적. GEOS의 "VLIR" 파일은 `USR`로 표시됨.
DEL순차 파일과 유사. 문서화되지 않은 내부 사용 파일 형식. 디스크 디렉터리 직접 조작으로 생성.



파일 형식 앞에 `*` (예: `*SEQ`)가 붙으면, 쓰기 후 제대로 닫히지 않은 "고아 파일"(poison 또는 splat 파일)을 의미한다. 블록 가용성 맵(BAM)이 정확하지 않아 디스크 손상 위험 존재. DOS `scratch` 명령으로 삭제 시 파일 시스템 손상(교차 연결 등) 가능성 존재. "수정" 모드로 열거나 디스크 검증(DOS `validate` 명령)으로 제거 가능. save-with-replace 버그로 생성될 수 있다.

`*DEL`은 삭제된 파일의 디렉터리 항목. 일반 목록에 표시되지 않으며, 데이터 블록 및 디렉터리 항목은 재사용됨. 삭제 취소 가능(덮어쓰기 전). 배너, 주석 삽입에 사용.

파일 형식 뒤 `<` (예: `PRG<`)는 "잠김" 파일. 삭제 불가, 읽기 가능. 설정/해제 Commodore DOS 명령은 없지만, 타사 유틸리티로 가능.

3. 1. 1. 지원 파일 유형

다음의 파일 유형이 지원된다.

  • '''SEQ''' : 순차적 파일이다. 시작부터 끝까지 선형으로 읽을 수 있는 데이터 파일이다. 워드 프로세서 또는 기타 편집기로 만든 문서 또는 텍스트 파일을 저장하는 데 일반적으로 사용된다. 순차적 파일은 Linux 또는 UNIX의 플랫 파일과 유사하며, 특수화된 내부 구조가 없다. UNIX와 유사한 운영 체제에서 발견되는 `lseek` 커널 호출과 유사한 것이 없으므로 순차적 파일의 임의 위치로 위치를 지정할 수 없다.[1]
  • '''PRG''' : 프로그램 파일이다. 일반적으로 실행 가능한 프로그램 코드를 포함하지만 데이터 파일에도 사용할 수 있다. `PRG`의 처음 두 바이트는 kernal "load file" 루틴에서 읽어 로드 주소를 결정하는 데 사용된다(작은 엔디안 형식으로 저장됨).[1]
  • '''REL''' : 상대 파일이다. 순차 파일 형식의 변형으로, 레코드 지향 액세스를 허용하기 위해 사이드 섹터라고 하는 인덱싱 메커니즘이 존재한다. 레코드는 최대 254바이트 크기일 수 있으며 1부터 시작하는 기수 번호로 주소가 지정되어 파일의 모든 부분에 대한 진정한 임의 액세스를 허용한다.[1]
  • '''USR''' : 사용자 지정 파일이다. 순차 파일과 동일한 내부 구조를 갖는다. 이 파일 형식에 대한 Commodore의 원래 목적은 드라이브의 마이크로프로세서에 의해 실행될 수 있도록 파일 내용을 드라이브 버퍼에 복사할 수 있으므로 DOS 개발을 용이하게 하는 것이었다. 이 파일 형식을 사용한 프로그램은 거의 없었다. 비표준 하위 수준 디스크 구조를 사용하는 일부 응용 프로그램은 USR 형식으로 데이터를 저장하며, 이는 사용자에 대한 일종의 "나를 내버려 두고, 복사하거나 삭제하지 마십시오"라는 표시로 간주되었다. 특히 GEOS의 "VLIR" 파일은 `USR` 파일로 표시된다.[1]
  • '''DEL''' : 순차 파일과 구조가 유사하며 문서화되지 않은 내부적으로 사용되는 파일 형식이다. 이 파일 형식의 생성은 디스크 디렉터리를 직접 조작하여 수행해야 한다.[1]


디렉터리 목록에 파일 형식 앞에 별표(`*`)가 붙은 경우(예: `*SEQ`) 파일이 쓰기 후 제대로 닫히지 않았음을 나타낸다. 드라이브가 쓰기를 위해 열린 파일을 닫으라는 명령을 받으면 관련 버퍼가 디스크로 플러시되고 블록 가용성 맵 (BAM)이 사용된 블록을 정확하게 반영하도록 업데이트된다. 프로그램 충돌 또는 기타 문제(예: 파일이 열려 있는 동안 사용자가 디스크를 제거하는 경우)로 인해 "고아 파일"이 발생하면( "poison" 또는 "splat" 파일이라고도 함) 데이터 버퍼가 플러시되지 않고 BAM이 디스크 사용량을 정확하게 반영하지 않아 디스크가 손상될 위험이 있다. poison 파일은 일반적으로 액세스할 수 없으며(하지만 "수정" 모드로 열 수 있음) DOS `scratch` 명령을 사용하여 파일을 삭제하려고 하면 파일 시스템 손상(예: 교차 연결)이 발생할 수 있다. 이러한 파일 중 하나를 제거하는 실용적인 유일한 방법은 "수정" 모드로 파일을 열고(수정)하거나 디스크를 검증하는 것이다(아래 DOS `validate` 명령 참조). 후자는 BAM을 다시 빌드하고 디렉터리에서 poison 파일 참조를 제거한다. 악명 높은 save-with-replace 버그로 인해 splat 파일이 생성될 수 있다.[1]

`*DEL`은 삭제된 파일의 온 디스크 디렉터리 항목에 기록되는 특수 유형이다. 이러한 파일은 일반 디렉터리 목록에 표시되지 않으며 해당 데이터 블록 및 디렉터리 항목은 이후에 생성되는 파일에서 재사용된다. 일부 유틸리티 프로그램은 해당 데이터 블록과 디렉터리 항목이 다른 파일로 아직 덮어쓰여지지 않은 경우 이러한 파일의 "삭제 취소"를 허용한다. `DEL files`는 일반적으로 배너 또는 주석 섹션을 디렉터리 목록에 삽입하는 데 사용된다.[1]

파일 형식 뒤에 `<`가 있는 경우(예: `PRG<`) "잠겨" 있으며 삭제할 수 없다. 하지만 읽을 수 있도록 열 수 있다. 이 상태를 명시적으로 설정하거나 지울 수 있는 Commodore DOS 명령은 없지만 이를 수행할 수 있도록 많은 타사 유틸리티가 작성되었다. 이러한 유틸리티는 일반적으로 직접 액세스 명령을 사용하여 디렉터리를 읽고, 원시 데이터에 필요한 수정을 수행한 다음 변경 사항을 디스크에 다시 쓴다.[1]

3. 1. 2. 특수 파일 표시

파일 이름 앞에 `*`가 붙은 파일은 제대로 닫히지 않은 파일("splat" 파일)을 나타낸다. 파일 이름 뒤에 `<`가 붙은 파일은 잠겨 있는 파일을 나타낸다.

3. 2. 파일 접근

파일 접근은 기본적으로 호스트 컴퓨터의 문제이다. 컴퓨터의 커널 ROM에는 파일 접근에 필요한 기본적인 루틴이 포함되어 있으며, BASIC ROM에는 BASIC 구문을 사용하여 파일 접근을 위한 더 높은 수준의 추상화가 포함되어 있다. DOS 자체와 관련된 구성 요소는 파일 이름 구문 분석과 보조 주소이다.

  • `OPEN` : 파일을 연다. 파일 번호, 장치 번호, 보조 주소, 명령 문자열 등의 매개변수가 필요하다.
  • * `OPEN 3,8,4,"0:ADDRESSBOOK,S,W"`
  • ** 3 : 파일 번호는 컴퓨터 운영 체제 내에서 열린 파일을 논리적으로 식별하며, UNIX 유사 운영 체제의 파일 디스크립터와 유사하다. 1에서 254까지의 범위를 가지며 프로그래머가 할당한다. 둘 이상의 파일이 동시에 열려 있는 경우 고유해야 한다. 어셈블리 언어 프로그램에서 LA(논리 주소)로 참조되기도 한다. 파일 번호가 127보다 크면 시스템은 각 캐리지 리턴 뒤에 추가 줄 바꿈을 쓴다.
  • ** 8 : 장치 번호는 컴퓨터에 연결된 특정 주변 장치를 식별한다. 장치 0~3은 각각 키보드, 테이프 카세트, RS-232 인터페이스 및 비디오 디스플레이를 주소 지정하며, 이들은 커널 ROM에서 직접 제어한다. 장치 번호 4 이상은 프린터 또는 디스크 드라이브와 같이 주변 버스에 연결된 장치를 주소 지정한다. 디스크 드라이브의 경우 장치 번호는 장치 내의 드라이브 메커니즘이 아닌 장치의 컨트롤러를 참조한다. 일반적으로 시스템의 첫 번째 디스크 드라이브 장치는 장치 번호 8을 가지고, 두 번째 드라이브가 있는 경우 9, 최대 15개까지 사용한다. 어셈블리 언어 프로그램에서 FA 또는 PA(물리적 주소)로 참조되기도 한다.
  • ** 4 : 보조 주소는 0에서 15까지의 범위를 가지며, 장치의 컨트롤러와 설정된 특정 통신 채널을 참조하고 주변 버스에서 "말하기" 또는 "듣기" 명령을 받을 때 장치로 전달된다. 파일 번호와 마찬가지로 보조 주소는 프로그래머가 결정하며 해당 장치에 대해 고유해야 한다. 0에서 14까지의 범위는 장치에서 데이터를 주고받는 데 사용되는 반면, 15는 "명령 채널"이라고 하며, 장치가 해당 작업을 지원할 수 있는 경우 장치의 컨트롤러에 명령을 발행하는 데 사용된다(예: 디스크 파일 이름 바꾸기). 어셈블리 언어 프로그램에서 SA(보조 주소)로 참조되기도 한다.
  • ** `"0:ADDRESSBOOK,S,W"` : 코모도어 설명서에서 공식적으로 ''명령 문자열''이라고 하며, 액세스하려는 장치의 컨트롤러에서 해석한다. 디스크 드라이브 장치의 경우 공식 명령 문자열 구조는 드라이브 메커니즘 번호(0:, 장치 번호와 혼동하지 말 것), 파일 이름(ADDRESSBOOK), 파일 유형(S, 이 예에서 순차적) 및 액세스 모드(W, 이 예에서 쓰기용으로 열림)로 구성된다.
  • `SAVE` : 파일을 저장한다.
  • * `SAVE "FILE",8` : BASIC 프로그램을 `PRG`(프로그램) 파일로 저장한다.
  • * `SAVE "0:FILE,SEQ,WRITE",8,1` : BASIC 프로그램을 순차 파일로 저장한다.
  • * "@" 기호를 사용하여 기존 파일을 덮어쓸 수 있다. (save-with-replace 버그 주의)
  • `LOAD` : 파일을 불러온다.
  • * `LOAD "FILE",8` : 보조 주소를 지정하지 않거나 0으로 지정한 경우, 파일은 BASIC 메모리 영역에서 저장/로드된다(C64의 경우 기본적으로 $0801에서 시작).
  • * `LOAD "FILE",8,1` : 보조 주소를 0이 아닌 값으로 지정하면, 프로그램은 파일 자체에서 지정한 주소(PRG 헤더, 즉 파일의 처음 두 바이트)에서 시작하여 로드된다. 머신 코드 프로그램을 로드할 때 더 일반적이다.
  • * `LOAD "*",8,1` : 디스크의 첫 번째 프로그램을 파일 지정 메모리 위치에서 로드한다.
  • * `LOAD "$0", 8` 및 `LOAD "$1", 8` : 두 드라이브 장치의 디렉토리를 불러온다.
  • * `LOAD "$0:K*P",8` : 이름이 문자 K로 시작하고 유형이 PRG인 파일만 표시하는 부분 디렉토리를 로드한다.


코모도어 도스는 기존 파일을 먼저 `SCRATCH`할 필요 없이 기존 파일을 덮어쓰도록 하는 "덮어쓰기 저장" 명령을 제공한다. 이는 `OPEN` 또는 `SAVE` 작업 중에 파일 이름 앞에 `@` 기호를 붙여서 수행했다. 예를 들어 `SAVE "@MY PROGRAM",8`과 같은 방식이다. 수년 동안, 4040 드라이브를 시작으로 이 명령의 구현에 버그가 있다는 소문이 퍼졌다. 처음에는 일부 논평가들이 이를 부인했다. 이 버그의 존재를 증명하는 사람에게는 상금이 걸리기도 했다.[4] 1985년 초, ''컴퓨트!'' 잡지는 독자들에게 이 명령을 사용하지 말라고 조언했다.[4] 그 해에 여러 저자들이 독립적으로 이 덮어쓰기 저장 버그가 실제로 존재하며, 이를 유발하는 방법을 포함하는 기사를 발표했다.[5][6][7][8]

영향을 받는 장치에는 단일 드라이브 1541과 듀얼 드라이브 4040이 포함되었고, 8050과 8250은 이 문제를 보이지 않았다.[4] 일부 논평가들은 저장 시 항상 `0:` 드라이브 번호를 명시적으로 지정하면 이 버그를 피할 수 있다고 제안했지만,[9] 나중에 드라이브 번호 없이 수행되는 모든 디스크 작업이 버그를 유발하기에 충분하다는 것이 밝혀졌다.[9] 이 버그는 영향을 받는 DOS 구현이 8050과 같은 초기 코모도어 PET 듀얼 드라이브에 포함된 DOS의 수정된 버전이라는 사실에서 비롯되었다. 이는 단일 드라이브 시스템에서 "유령 드라이브 `1:`"을 생성하여, 특정 조건에서 불필요한 버퍼를 할당하는 결과를 낳았다. 덮어쓰기 저장 명령은 5개의 모든 드라이브 버퍼를 사용하고, "유령" 버퍼가 할당되는 방식이 사양을 충족하지 못했기 때문에, 디스크에 엉망이 된 데이터가 기록될 수 있었다.

1986년 9월, 필립 A. 슬레이메이커는 이 버그의 원인을 자세히 설명하고 1541 드라이브 ROM에 대한 패치를 제공하는 기사를 발표했다.[10] EPROM 버너가 있는 독자는 자체 패치된 ROM을 제작하여 드라이브에 교체할 수 있었다. 코모도어는 슬레이메이커의 연구 결과를 인지했으며, 원래 1541의 ROM에 대한 공식적인 업데이트를 발표하지는 않았지만, 1571 ROM의 개정 5, 그리고 1541-C 및 1541-II 드라이브의 ROM에서 이 버그를 수정했다. 코모도어의 지원은 없지만, 1541-II 펌웨어(1541-C의 펌웨어는 제외)는 EPROM을 사용하여 원래 1541 드라이브에서도 사용할 수 있으며, 이를 통해 해당 드라이브의 버그도 수정할 수 있다는 사실이 알려져 있다.

3. 2. 1. BASIC 명령

파일 접근은 기본적으로 호스트 컴퓨터의 문제이다. 컴퓨터의 커널 ROM에는 파일 접근에 필요한 기본적인 루틴이 포함되어 있으며, BASIC ROM에는 BASIC 구문을 사용하여 파일 접근을 위한 더 높은 수준의 추상화가 포함되어 있다. DOS 자체와 관련된 구성 요소는 파일 이름 구문 분석과 보조 주소이다.

  • `OPEN` : 파일을 연다. 파일 번호, 장치 번호, 보조 주소, 명령 문자열 등의 매개변수가 필요하다.
  • * `OPEN 3,8,4,"0:ADDRESSBOOK,S,W"`
  • ** 3 : 파일 번호는 컴퓨터 운영 체제 내에서 열린 파일을 논리적으로 식별하며, UNIX 유사 운영 체제의 파일 디스크립터와 유사하다. 1에서 254까지의 범위를 가지며 프로그래머가 할당한다. 둘 이상의 파일이 동시에 열려 있는 경우 고유해야 한다. 어셈블리 언어 프로그램에서 LA(논리 주소)로 참조되기도 한다. 파일 번호가 127보다 크면 시스템은 각 캐리지 리턴 뒤에 추가 줄 바꿈을 쓴다.
  • ** 8 : 장치 번호는 컴퓨터에 연결된 특정 주변 장치를 식별한다. 장치 0~3은 각각 키보드, 테이프 카세트, RS-232 인터페이스 및 비디오 디스플레이를 주소 지정하며, 이들은 커널 ROM에서 직접 제어한다. 장치 번호 4 이상은 프린터 또는 디스크 드라이브와 같이 주변 버스에 연결된 장치를 주소 지정한다. 디스크 드라이브의 경우 장치 번호는 장치 내의 드라이브 메커니즘이 아닌 장치의 컨트롤러를 참조한다. 일반적으로 시스템의 첫 번째 디스크 드라이브 장치는 장치 번호 8을 가지고, 두 번째 드라이브가 있는 경우 9, 최대 15개까지 사용한다. 어셈블리 언어 프로그램에서 FA 또는 PA(물리적 주소)로 참조되기도 한다.
  • ** 4 : 보조 주소는 0에서 15까지의 범위를 가지며, 장치의 컨트롤러와 설정된 특정 통신 채널을 참조하고 주변 버스에서 "말하기" 또는 "듣기" 명령을 받을 때 장치로 전달된다. 파일 번호와 마찬가지로 보조 주소는 프로그래머가 결정하며 해당 장치에 대해 고유해야 한다. 0에서 14까지의 범위는 장치에서 데이터를 주고받는 데 사용되는 반면, 15는 "명령 채널"이라고 하며, 장치가 해당 작업을 지원할 수 있는 경우 장치의 컨트롤러에 명령을 발행하는 데 사용된다(예: 디스크 파일 이름 바꾸기). 어셈블리 언어 프로그램에서 SA(보조 주소)로 참조되기도 한다.
  • ** `"0:ADDRESSBOOK,S,W"` : 코모도어 설명서에서 공식적으로 ''명령 문자열''이라고 하며, 액세스하려는 장치의 컨트롤러에서 해석한다. 디스크 드라이브 장치의 경우 공식 명령 문자열 구조는 드라이브 메커니즘 번호(0:, 장치 번호와 혼동하지 말 것), 파일 이름(ADDRESSBOOK), 파일 유형(S, 이 예에서 순차적) 및 액세스 모드(W, 이 예에서 쓰기용으로 열림)로 구성된다.
  • `SAVE` : 파일을 저장한다.
  • * `SAVE "FILE",8` : BASIC 프로그램을 `PRG`(프로그램) 파일로 저장한다.
  • * `SAVE "0:FILE,SEQ,WRITE",8,1` : BASIC 프로그램을 순차 파일로 저장한다.
  • * "@" 기호를 사용하여 기존 파일을 덮어쓸 수 있다. (save-with-replace 버그 주의)
  • `LOAD` : 파일을 불러온다.
  • * `LOAD "FILE",8` : 보조 주소를 지정하지 않거나 0으로 지정한 경우, 파일은 BASIC 메모리 영역에서 저장/로드된다(C64의 경우 기본적으로 $0801에서 시작).
  • * `LOAD "FILE",8,1` : 보조 주소를 0이 아닌 값으로 지정하면, 프로그램은 파일 자체에서 지정한 주소(PRG 헤더, 즉 파일의 처음 두 바이트)에서 시작하여 로드된다. 머신 코드 프로그램을 로드할 때 더 일반적이다.
  • * `LOAD "*",8,1` : 디스크의 첫 번째 프로그램을 파일 지정 메모리 위치에서 로드한다.
  • * `LOAD "$0", 8` 및 `LOAD "$1", 8` : 두 드라이브 장치의 디렉토리를 불러온다.
  • * `LOAD "$0:K*P",8` : 이름이 문자 K로 시작하고 유형이 PRG인 파일만 표시하는 부분 디렉토리를 로드한다.

3. 2. 2. Save-with-replace 버그

코모도어 도스는 기존 파일을 먼저 `SCRATCH`할 필요 없이 기존 파일을 덮어쓰도록 하는 "덮어쓰기 저장" 명령을 제공한다. 이는 `OPEN` 또는 `SAVE` 작업 중에 파일 이름 앞에 `@` 기호를 붙여서 수행했다. 예를 들어 `SAVE "@MY PROGRAM",8`과 같은 방식이다. 수년 동안, 4040 드라이브를 시작으로 이 명령의 구현에 버그가 있다는 소문이 퍼졌다. 처음에는 일부 논평가들이 이를 부인했다. 이 버그의 존재를 증명하는 사람에게는 상금이 걸리기도 했다.[4] 1985년 초, ''컴퓨트!'' 잡지는 독자들에게 이 명령을 사용하지 말라고 조언했다.[4] 그 해에 여러 저자들이 독립적으로 이 덮어쓰기 저장 버그가 실제로 존재하며, 이를 유발하는 방법을 포함하는 기사를 발표했다.[5][6][7][8]

영향을 받는 장치에는 단일 드라이브 1541과 듀얼 드라이브 4040이 포함되었고, 8050과 8250은 이 문제를 보이지 않았다.[4] 일부 논평가들은 저장 시 항상 `0:` 드라이브 번호를 명시적으로 지정하면 이 버그를 피할 수 있다고 제안했지만,[9] 나중에 드라이브 번호 없이 수행되는 모든 디스크 작업이 버그를 유발하기에 충분하다는 것이 밝혀졌다.[9] 이 버그는 영향을 받는 DOS 구현이 8050과 같은 초기 코모도어 PET 듀얼 드라이브에 포함된 DOS의 수정된 버전이라는 사실에서 비롯되었다. 이는 단일 드라이브 시스템에서 "유령 드라이브 `1:`"을 생성하여, 특정 조건에서 불필요한 버퍼를 할당하는 결과를 낳았다. 덮어쓰기 저장 명령은 5개의 모든 드라이브 버퍼를 사용하고, "유령" 버퍼가 할당되는 방식이 사양을 충족하지 못했기 때문에, 디스크에 엉망이 된 데이터가 기록될 수 있었다.

1986년 9월, 필립 A. 슬레이메이커는 이 버그의 원인을 자세히 설명하고 1541 드라이브 ROM에 대한 패치를 제공하는 기사를 발표했다.[10] EPROM 버너가 있는 독자는 자체 패치된 ROM을 제작하여 드라이브에 교체할 수 있었다. 코모도어는 슬레이메이커의 연구 결과를 인지했으며, 원래 1541의 ROM에 대한 공식적인 업데이트를 발표하지는 않았지만, 1571 ROM의 개정 5, 그리고 1541-C 및 1541-II 드라이브의 ROM에서 이 버그를 수정했다. 코모도어의 지원은 없지만, 1541-II 펌웨어(1541-C의 펌웨어는 제외)는 EPROM을 사용하여 원래 1541 드라이브에서도 사용할 수 있으며, 이를 통해 해당 드라이브의 버그도 수정할 수 있다는 사실이 알려져 있다.

4. 도스 명령어

코모도어 도스는 "명령 채널"(보조 주소 15)을 통해 접근할 수 있다. 명령 채널을 통해 도스에 명령을 내리고, 상태 및 오류 메시지를 검색하는 것은 장치에 파일을 여는 것으로 수행된다.

예시:

`OPEN 1,8,15`

장치 상태 검색 및 표시:

`OPEN 1,8,15:INPUT#1,E,E$,T,S:PRINT E,E$,T,S:CLOSE 1`

위 예에서 `E`는 오류 번호(오류가 없으면 0), `E$`는 오류에 대한 간결한 설명, `T`는 오류가 발생한 디스크 트랙, `S`는 오류가 참조하는 트랙 `T`의 섹터를 나타낸다. 오류가 없으면 `00,OK,00,00`과 같은 값이 반환된다. 코모도어 베이직 4.0 이상에서는 `DS$`라는 의사 변수를 사용하여 드라이브 상태를 검색할 수 있다. 전원 켜기 또는 재설정 직후에는 도스 버전이 반환된다. (예: 1541은 `73,CBM DOS V2.6 1541,00,00` 반환).

==== 주요 명령어 ====

코모도어 도스(Commodore DOS)의 주요 명령어는 다음과 같다.

명령어설명BASIC 1.x 및 2.x 구현체DOS Wedge 구현체BASIC 3.0+ 구현체
New디스크를 포맷하고 데이터를 삭제한다. 이미 포맷된 디스크의 모든 파일을 빠르게 삭제할 때도 사용된다.OPEN 15,8,15,"N0:disk name,identifier":CLOSE 15@N0:disk name,identifierHEADER "disk name",identifier
Scratch파일을 삭제한다. 와일드카드를 사용하여 여러 파일을 삭제할 수 있다.OPEN 15,8,15,"S0:file name":CLOSE 15@S0:file nameSCRATCH "file name"
Rename파일 이름을 변경한다.OPEN 15,8,15,"R0:new name=old name":CLOSE 15@R0:new name=old nameRENAME "old name" TO "new name"
Initialize드라이브를 초기화하고 BAM을 읽는다.OPEN 15,8,15,"I0:":CLOSE 15@I0:DCLEAR (BASIC 7.0+ only)
ValidateBAM을 디렉토리와 일치시키고 파일 할당을 정리한다. 마이크로소프트 운영 체제의 CHKDSK/스캔디스크와 유사하다.OPEN 15,8,15,"V0:":CLOSE 15@V0:COLLECT
Copy동일 디스크 내에서 파일을 복제한다.OPEN 15,8,15,"C0:new name=0:existing name":CLOSE 15@C0:new name=0:existing nameCOPY"existing name"TO"new name"
Duplicate2 드라이브 장치에서 전체 디스크를 복제한다.OPEN 15,8,15,"D1=0":CLOSE 15@D1=0BACKUP D0 TO D1



==== 기타 명령어 ====

코모도어 도스는 RELative 유형 파일 검색을 위한 `RECORD#` 명령어, 여러 블록 수준 직접 액세스 명령( `BLOCK-READ`, `BLOCK-WRITE`, `BUFFER-POINTER` ), 블록 관리( `BLOCK-ALLOCATE`, `BLOCK-FREE` ), 드라이브 메모리 조작 및 드라이브 프로세서에서 프로그램 코드 실행( `MEMORY-WRITE`, `MEMORY-READ`, `MEMORY-EXECUTE`, `BLOCK-EXECUTE` ) 및 사용자 정의 함수( `USER` 및 `&` 명령)를 제공한다. 이론적으로 사용자 정의 가능한 기능 중 일부는 1.0 이후의 DOS 버전에서 새로운 기능에 액세스하도록 재지정되었다.

4. 1. 주요 명령어

코모도어 도스(Commodore DOS)의 주요 명령어는 다음과 같다.

명령어설명BASIC 1.x 및 2.x 구현체DOS Wedge 구현체BASIC 3.0+ 구현체
New디스크를 포맷하고 데이터를 삭제한다. 이미 포맷된 디스크의 모든 파일을 빠르게 삭제할 때도 사용된다.OPEN 15,8,15,"N0:disk name,identifier":CLOSE 15@N0:disk name,identifierHEADER "disk name",identifier
Scratch파일을 삭제한다. 와일드카드를 사용하여 여러 파일을 삭제할 수 있다.OPEN 15,8,15,"S0:file name":CLOSE 15@S0:file nameSCRATCH "file name"
Rename파일 이름을 변경한다.OPEN 15,8,15,"R0:new name=old name":CLOSE 15@R0:new name=old nameRENAME "old name" TO "new name"
Initialize드라이브를 초기화하고 BAM을 읽는다.OPEN 15,8,15,"I0:":CLOSE 15@I0:DCLEAR (BASIC 7.0+ only)
ValidateBAM을 디렉토리와 일치시키고 파일 할당을 정리한다. 마이크로소프트 운영 체제의 CHKDSK/스캔디스크와 유사하다.OPEN 15,8,15,"V0:":CLOSE 15@V0:COLLECT
Copy동일 디스크 내에서 파일을 복제한다.OPEN 15,8,15,"C0:new name=0:existing name":CLOSE 15@C0:new name=0:existing nameCOPY"existing name"TO"new name"
Duplicate2 드라이브 장치에서 전체 디스크를 복제한다.OPEN 15,8,15,"D1=0":CLOSE 15@D1=0BACKUP D0 TO D1



이 외에도 REL 파일 검색, 블록 수준 직접 액세스, 블록 관리, 드라이브 메모리 조작, 드라이브 프로세서에서 프로그램 코드 실행, 사용자 정의 함수 관련 명령어가 있다.

4. 2. 기타 명령어

코모도어 도스는 RELative 유형 파일 검색을 위한 `RECORD#` 명령어, 여러 블록 수준 직접 액세스 명령( `BLOCK-READ`, `BLOCK-WRITE`, `BUFFER-POINTER` ), 블록 관리( `BLOCK-ALLOCATE`, `BLOCK-FREE` ), 드라이브 메모리 조작 및 드라이브 프로세서에서 프로그램 코드 실행( `MEMORY-WRITE`, `MEMORY-READ`, `MEMORY-EXECUTE`, `BLOCK-EXECUTE` ) 및 사용자 정의 함수( `USER` 및 `&` 명령)를 제공한다. 이론적으로 사용자 정의 가능한 기능 중 일부는 1.0 이후의 DOS 버전에서 새로운 기능에 액세스하도록 재지정되었다.

명령어설명DOS 웨지(DOS Wedge) 구현
New디스크를 포맷하여 사용 준비를 하고, 포함된 모든 데이터를 삭제한다. 두 글자 식별자 매개변수를 생략하면 이미 포맷된 디스크의 모든 파일을 빠르게 삭제한다.@N0:디스크 이름,식별자
Scratch디스크에서 파일을 삭제한다(또는 와일드 카드 일치를 사용하여 여러 파일을 삭제).@S0:파일 이름
Rename디스크에서 파일 이름을 변경한다.@R0:새 이름=이전 이름
Initialize드라이브를 재설정하고 디스크의 블록 할당 맵(BAM)을 내부 메모리로 읽어들인다. 디스크가 동일한 ID를 가진 다른 디스크로 교체되는 경우를 제외하고 드라이브가 일반적으로 자체적으로 수행하므로 거의 필요하지 않다.@I0:
ValidateBAM을 디스크 디렉토리와 일치시키고, 사용된 모든 블록을 할당하고, 파일에서 사용되지 않는 모든 블록을 해제하며, 닫히지 않은 모든 파일을 디렉토리에서 삭제한다. CHKDSK(CHKDSK)/마이크로소프트 스캔디스크(ScanDisk)와 유사한 도구이다.@V0:
Copy동일한 디스크(또는 동일한 2 드라이브 장치의 다른 디스크)에서 다른 파일 이름으로 파일을 복제한다. 2 드라이브 장치 없이 다른 디스크로 복제하려면 유틸리티 프로그램을 사용해야 한다.@C0:새 이름=0:기존 이름
Duplicate전체 디스크를 복제한다. 2 드라이브 장치에서만 사용할 수 있으며, 그렇지 않으면 유틸리티 프로그램을 대신 사용해야 한다.@D1=0


5. 한국 컴퓨터 역사와 코모도어

참조

[1] 간행물 Quick Load https://archive.org/[...] 1985-02
[2] 간행물 Horizons: 64 https://archive.org/[...] 1983-12
[3] 간행물 A bizarre dude https://archive.org/[...] CW Communications/Peterborough, Inc. 1986
[4] 뉴스 The Great Commodore Save/Replace Debate http://www.atarimaga[...] 1985-02
[5] 논문 SAVE with Replace Exposed!! https://archive.org/[...] 1985-07
[6] 뉴스 Save With Replace: Debugged At Last / Part 1 https://archive.org/[...] 1985-10
[7] 뉴스 Save-With-Replace: Debugged At Last / Part 2 https://archive.org/[...] 1985-11
[8] 간행물 Save@: Gerry Neufield's Theory on an Old Bug Editors 1985-12
[9] 이메일 Excerpt of e-mail from Philip A. Slaymaker https://groups.googl[...]
[10] 논문 Eliminating SAVE@ and Other 1541 Bugs 1986-09



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com