도스 준장
Commodore DOS개발자 | 코모도어 인터내셔널 |
---|---|
최신 릴리즈 | 10.0 |
다음에서 사용 가능 | 영어 |
플랫폼 | MOS 6502 패밀리 |
면허증 | 소유의 |
CBM DOS라고도 알려진 Commodore DOS는 Commodore의 8비트 컴퓨터와 함께 사용되는 디스크 운영 체제다.디스크에서 컴퓨터의 자체 RAM으로 로드되어 그곳에서 실행되는 대부분의 다른 DOS와는 달리, CBM DOS는 드라이브 내부에서 실행된다. DOS는 드라이브 내부의 ROM 칩에 상주하며, 하나 이상의 전용 MOS 6502 제품군 CPU에 의해 실행된다.따라서 Commodore 8비트 컴퓨터와 그 디스크 드라이브 사이의 데이터 전송은 일반적인 디스크/호스트 전송보다 로컬 영역 네트워크 연결과 더 유사하다.
CBM DOS 버전
다음 목록은 버전 번호와 관련 디스크 드라이브를 제시하며, DOS가 존재하는 것으로 알려져 있다. 다음 목록은 버전 번호와 관련 디스크 드라이브를 제공한다.달리 명시되지 않는 한 드라이브는 5인치 형식이다."lp" 코드는 "저프로파일" 드라이브를 지정한다.모델 번호가 15개로 시작하는 드라이브는 Commodore의 고유한 직렬 IEEE-488 버스(IEC 버스) 직렬(TAK/LISE) 프로토콜을 통해 연결되며, 다른 모든 드라이브는 병렬 IEEE-488을 사용한다.
- 1.0 – 2040 및 3040 플로피 드라이브에 있음
- 2.0 – 4040 및 3040 플로피 드라이브에 있음
- 2.5 – 8050 플로피 드라이브에 있음
- 2.6 – SX-64, 1551, 2031(+"lp") 및 4031 플로피 드라이브를 포함하여 1540, 1541년에 확인됨
- 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으로 확인되었다.따라서 버전 번호만으로는 두 버전을 구분할 수 없다.
기술 개요
1541 디렉토리 및 파일 형식
1541 Commodore 플로피 디스크는 플랫 네임스페이스(하위 디렉터리가 없음)에 최대 144개의 파일을 저장할 수 있으며, 디렉토리는 허브에서 35 트랙 단면 디스크의 가장자리까지 중간 지점에 위치한 예약된 트랙 18에 저장된다.파일 이름은 최대 16바이트 길이일 수 있고 이론적으로 독특하다. 디렉터리 구조에서 직접 액세스 방법을 사용하여 파일 이름을 다른 파일 이름으로 바꿀 수 있다. 이러한 파일 액세스는 어렵거나 불가능할 수 있다.동일한 이름의 파일은 대개 파일을 알리거나 시각적으로 관리하는 것 외에는 아무런 목적도 제공하지 않는다.예를 들어 Final Cartridge III가 사용한 일반적인 트릭 중 하나는 이름이 붙은 파일을 추가하는 것이었습니다."----------------"
활자의DEL<
디렉토리에 파일을 다시 정렬하여 그룹을 형성할 수 있다.많은 게임 개발자, 와레즈 그룹 멤버, 그리고 데모센 해커들은 더 영리한 사용자 지정 디렉토리 항목들을 사용하기도 했다.
파일 이름에는 이동된 공백 문자가 포함될 수 있음($A0
() 및 디렉토리 목록을 BASIC에서 보고 있는 경우, 파일 이름의 일부가$A0
문자는 따옴표로 파일 이름의 첫 번째 부분과 분리되어 BASIC이 전체 파일 이름의 일부로 간주하지 않는 것으로 나타날 것이다.이 기능을 SAVE와 같은 디렉터리 항목"PROGRAM.mw-parser-output .keyboard-key{국경:1px 고체 # aaa, border-radius:0.2em, box-shadow:0.1em 0.1em 0.2em rgba(0,0,0,0.1), background-color:#f9f9f9, background-image:linear-gradient(bottom,에#eee,#f9f9f9,#eee), 색:을 만드는 데 사용될 수 있다.#000, 패딩:0.1em 0.3em, font-family:상속을 하다;font-size:0.85em}⇧ Shift–space Commodore–DUDE"예를 들어 다음 디렉터리 목록에로 출연할 것이다 ,8,1,,, 32"PROGRAM",8,1 PRG.[1]사용자가 줄의 처음으로 커서를 움직일 때, 단어뿐.LOAD
BASIC은 그것을 파일 크기로 해석하고 , 를 누른다.LOAD "PROGRAM",8,1 ...
, 프로그램을 메모리에 로드하도록 한다.컴퓨터가 LOAD 후 명령을 무시하기 때문에 콜론 또는 보조 주소 이후의 모든 것은 실행되지 않는다.[2]또는 사용자가 다음을 누를 수 있다.RUN/STOPLOAD
그리고RUN
그 프로그램은 자동으로 실행된다.[3]
파일 이름에 포함된 null 바이트는 BASIC에 의해 로드된 후 목록을 중단한다.세 개의 null 바이트가 있으면 BASIC을 통해 나열하기 어렵다.많은 기계 언어 프로그래머들은 베이직 프로그래머들이 그들의 코드에 접근하고 그것을 조작하는 것을 더 어렵게 만들기 위해 null 바이트를 실험할 것이다.
BASIC에서 디렉토리는 실행 불가능한 사이비 베이직 프로그램으로 액세스할 수 있다.LOAD "$0",8
(또는)LOAD "$1",8
듀얼 드라이브의 경우)에 이어LIST
첫 번째 라인은 0 또는 1의 라인 번호(드라이브 번호를 나타냄)로, 디스크의 이름과 ID, 그리고 그것이 만들어진 DOS 버전에 대한 속기 코드(코드는 호환되지 않는 디스크 포맷을 사용하는 경우에만 달라진다: "2A"는 대부분의 5.25인치 DOS 버전에 의해 사용되며, "3D"는 1581에 의해 사용된다.이후 행은 파일 크기(디스크 블록에서)를 유사 "라인 번호"로 하고 따옴표에는 파일 이름과 3자 유형 코드가 뒤따른다.마지막 줄에는 디스크에서 할당되지 않은 블록 수(사이비 "라인 번호"로 표시됨)가 표시되고 그 뒤에 "BLOCK FREE"라는 문구가 표시된다.
코모도어 64번지에서, 진입한다.LOAD "$",8,1
디렉토리를 BASIC RAM에 로드하는 대신 화면에 가비지가 가득 차게 된다.드라이브가 디렉토리에 0401달러(1025달러)의 부하 주소를 할당하기 때문인데, 이는 Commodore PET의 BASIC 시작에 해당하지만, C64의 기본 화면 메모리(화면 첫 줄의 두 번째 문자부터 시작)에 해당한다.
다음을 사용하여 디렉터리 보기LOAD "$",8
명령은 메모리의 BASIC 프로그램을 덮어쓴다.DOS Wedge와 Epyx Fast Load, Action Replay, The Final Cartridge III와 같은 다양한 타사 카트리지 및 익스텐더로 현재의 BASIC 프로그램을 파괴하지 않고 화면 메모리에 디렉토리를 로드하는 특수 명령을 사용하여 디스크 디렉토리를 볼 수 있다.Commodore BASIC의 일부 버전에는 다음이 포함된다.DIRECTORY
또는CATALOG
동일한 기능을 수행하는 명령.
지원되는 파일 유형은 다음과 같다.
SEQ
- 순차 파일은 처음부터 끝까지 선형적으로 읽을 수 있는 데이터 파일이다.
SEQ
파일은 일반적으로 워드프로세서나 다른 편집기에 의해 만들어진 문서나 텍스트 파일을 저장하는 데 사용된다.순차 파일은 전문적인 내부 구조가 없다는 점에서 리눅스나 유닉스에서는 플랫 파일과 유사하다.에 대한 아날로그가 없기 때문에 순차적 파일에서 임의의 위치에 배치할 수 없다.lseek
UNIX 유사 운영 체제에 있는 커널 호출. PRG
PRG
파일에는 일반적으로 실행 가능한 프로그램 코드가 포함되어 있지만 데이터 파일에도 사용할 수 있다.의 처음 2바이트는PRG
kernal "load file" 루틴에 의해 읽혀지고 로드 주소를 결정하는 데 사용된다(작은 엔디안 형식으로 저장됨).REL
- 상대적 파일은 순차적 파일 형식의 변형이며, 기록 지향적 접근을 허용하기 위해 사이드 벡터라고 하는 인덱싱 메커니즘이 존재한다.기록의 크기는 최대 254바이트가 될 수 있으며, 파일 일부에 대한 진정한 무작위 액세스가 허용되면서 1개의 기본 기수로 처리된다.
USR
- 사용자 지정 파일은 순차적 파일의 내부 구조와 동일하다.Commodore의 이 파일 형식에 대한 원래 목적은 DOS 개발의 촉진이었는데, 파일 내용이 드라이브의 마이크로프로세서에 의해 실행을 위한 드라이브 버퍼로 복사될 수 있었기 때문이다.이 파일 형식을 사용한 프로그램은 거의 없었다.비표준 저수준 디스크 구조를 사용하는 일부 애플리케이션은 USR 포맷으로 데이터를 저장하는데, 이는 사용자에게 일종의 "날 내버려 둬, 복사하거나 삭제하지 마" 표시로 간주되었다.가장 눈에 띄는 것은 GEOS의 "VLIR" 파일이
USR
파일들 DEL
- 순차 파일과 유사한 구조로 내부적으로 사용된 문서화되지 않은 파일 형식.이 파일 형식은 디스크 디렉토리를 직접 조작하여 생성해야 한다.
별표의 존재 여부(*
디렉토리 목록의 파일 형식 앞에 추가(예:*SEQ
)는 쓰기 후 파일이 제대로 닫히지 않았음을 나타낸다.드라이브가 쓰기 위해 열린 파일을 닫도록 명령되면 관련 버퍼가 디스크로 플러시되고 BAM(블록 가용성 맵)이 업데이트되어 사용된 블록을 정확하게 반영한다.프로그램이 충돌하거나 다른 문제(예: 파일이 열려 있는 동안 디스크를 제거하는 사용자)로 인해 "독" 또는 "스플랫" 파일이라고도 하는 "orphan 파일"이 발생하는 경우, 버퍼는 플러시되지 않고 BAM은 디스크 사용량을 정확하게 반영하지 못하여 디스크가 손상될 위험에 처하게 된다.독성 파일은 일반적으로 액세스할 수 없지만("수정" 모드에서 열 수 있음) DOS 사용 시도scratch
파일을 삭제하라는 명령은 교차 링크와 같은 파일 시스템 손상을 야기할 수 있다.이러한 파일 중 하나를 제거하는 유일한 실용적인 방법은 파일을 "수정" 모드로 열거나(수정) 디스크를 확인하는 것이다(DOS 참조).validate
아래 명령), BAM을 재구성하고 디렉터리에서 독성 파일 참조를 제거하는 후자악명 높은 대체 저장 버그는 스플래트 파일을 만드는 결과를 가져올 수 있다.
*DEL
삭제된 파일의 온 디스크 디렉토리 항목에 특수 유형.이러한 파일은 정상적인 디렉토리 목록에 표시되지 않으며, 데이터 블록과 디렉토리 항목은 이후에 만들어진 파일에 의해 재사용될 것이다.일부 유틸리티 프로그램은 데이터 블록과 디렉토리 항목이 아직 다른 파일에 의해 덮어쓰여지지 않은 경우 이러한 파일의 "삭제되지 않음"을 허용한다. DEL files
일반적으로 배너 또는 주석 섹션을 디렉토리 목록에 삽입하는 데 사용된다.
파일 형식:<
그들을 쫓는다(예를 들면,PRG<
)는 "수집"이며 삭제할 수 없다. 단, 읽기를 위해 열 수 있다.이 상태를 명시적으로 설정하거나 해제할 수 있는 Commodore DOS 명령은 없지만, 많은 타사 유틸리티가 이 작업을 수행할 수 있도록 작성되었다.이러한 유틸리티는 일반적으로 직접 액세스 명령을 사용하여 디렉토리를 읽고, 원시 데이터에 필요한 수정을 수행한 다음, 변경 사항을 디스크에 다시 기록한다.
파일 액세스
파일 액세스는 주로 호스트 컴퓨터의 문제다.컴퓨터의 커널 ROM은 파일에 액세스하는 데 필요한 원시 루틴을 포함하고, BASIC ROM은 BASIC 구문을 이용한 파일 접근을 위한 보다 높은 수준의 추상화를 포함하고 있다.DOS 자체에 관련된 구성 요소는 파일 이름 구문 분석과 보조 주소 입니다.이 절에서는 완전성을 위해 필요한 기본 명령의 개요를 제공한다.
Commodore 디스크 장치에 파일을 여는 것은 다른 환경에서 파일을 여는 절차와 모호하게 유사한 많은 매개변수의 처리를 수반한다.DOS는 실제로 드라이브의 컨트롤러에서 실행되므로, 파일 열기 시퀀스는 명확한 해석을 보장할 수 있도록 드라이브에 충분한 정보를 전달해야 한다.순차 파일에 쓰는 BASIC의 일반적인 문장은 다음과 같다.
OPEN 3,8,4,"0:ADDRESSBOOK,S,W"
다음 매개 변수:OPEN
동사는 다음과 같다.
- 3
- 파일 번호인 이 매개변수는 컴퓨터의 운영체제 내에서 열린 파일을 논리적으로 식별하며 UNIX와 같은 운영체제에서 파일 설명자와 유사하다.드라이브로 전송되지 않으므로 드라이브 자체의 운영 체제에서 알 수 없거나 사용하지 않는다.파일 번호는 1부터 254까지 포함되며, 프로그래머가 할당하며, 두 개 이상의 파일이 동시에 열리는 경우 고유해야 한다.파일이 열리면 모든 프로그램 입력 및 출력 절차에서 파일 번호를 사용하십시오.어셈블리 언어 프로그램에서 이 값은 흔히 LA(논리적 주소)라고 하는데, 이는 파일 번호가 저장된 메모리 위치를 가리키는 니모닉에서 유래한 약어다.파일 번호가 127보다 크면 각 캐리지가 반환된 후 시스템이 추가 라인 피드를 작성하게 된다(예: 문서 간격을 두 번 유지하는 데 유용).
- 8
- 장치 번호인 이 매개변수는 컴퓨터에 부착된 특정 주변 장치를 식별한다.장치 0 ~ 3은 각각 키보드, 테이프 카세트, RS-232 인터페이스 및 비디오 디스플레이를 다루며, 이 모두는 커널 ROM에 의해 직접 제어된다.프린터나 디스크 드라이브와 같이 주변 버스에 부착된 장치 번호 4 이상 주소 장치.디스크 드라이브의 경우 장치 번호는 장치 내의 드라이브 메커니즘이 아니라 장치의 컨트롤러를 가리킨다.관례에 따라 시스템의 첫 번째 디스크 드라이브 유닛은 장치 번호 8, 두 번째 드라이브, 존재하는 경우 최대 15개(디스크 드라이브 8개가 연결된 경우)까지 있다.장치 번호 체계는 Commodore PET/CBM 모델과 함께 사용된 IEEE-488(또는 범용 인터페이스 GPIB) 버스에서 파생되었다.조립 언어 프로그램에서 이 값은 흔히 FA 또는 PA(물리적 주소)라고 부르는데, 다시 기기 번호가 저장되는 메모리 위치의 니모닉에서 유래한다.
- 4
- 이 매개변수, 즉 2차 주소의 범위는 0부터 15까지의 범위일 수 있으며, 기기의 제어기와 함께 설정된 특정 통신 채널을 가리키며, 주변 버스에서 "말하기" 또는 "듣기" 명령을 받을 때 장치로 전달된다.파일 번호와 마찬가지로 보조 주소는 프로그래머에 의해 결정되며 해당 장치에 대해 고유해야 한다.0부터 14까지의 범위는 장치로 데이터를 전달하기 위해 사용되는 반면, "명령 채널"이라고 하는 15는 장치가 그러한 작동을 지원할 수 있는 경우 장치의 컨트롤러에 명령을 실행하는 데 사용된다(예: 디스크 파일 이름 변경).디스크 드라이브에서, 2차 주소 0부터 14까지가 컨트롤러 내의 버퍼에 매핑되므로, 특정 디스크의 특정 파일과의 통신을 설정한다. 위에서 언급한 바와 같이, 드라이브에서 파일 번호를 모르기 때문에, 2차 주소만 사용하여 sa에 열려 있는 여러 파일 간의 차이를 만들 수 있다.내 시간이야반면에, 호스트 운영 체제는 보조 주소에 대해 무관심하다. 이는 파일에 대한 모든 액세스에서 드라이브로 전송되지만, 호스트에 의해 달리 사용되지 않는다.어셈블리 언어 프로그램에서 이 값은 흔히 SA(보조 어드레스)라고 한다.
- 명령 문자열
- 그
"0:ADDRESSBOOK,S,W"
매개변수는 공식적으로 Commodore 문서에서 명령 문자열로 언급되며 접근 중인 장치의 제어기에 의해 해석된다.디스크 드라이브 유닛의 경우, 형식 명령 문자열 구조는 드라이브 메커니즘 번호 ()로 구성된다.0:
, 장치 번호와 혼동하지 않도록), 파일 이름().ADDRESSBOOK
)), 파일 형식(S
, 이 예에서 순차적) 및 액세스 모드(Access mode)W
, 이 예에서 쓰기 위해 열림).실제로 이러한 매개변수 중 일부는 생략될 수 있다.파일을 읽기 위해 열어야 할 경우에는 최소한 파일 이름만 필요하다.
- 드라이브 번호는 디스크 장치의 컨트롤러에 부착된 드라이브 메커니즘을 식별하며 다중 메커니즘(예: 1980년대 ST-412/ST-506 하드 드라이브와 함께 작동하도록 개발된 OMTI SASI 컨트롤러)을 제어할 수 있는 SCSI 컨트롤러의 논리 장치 번호와 유사하다.플로피 디스크 단위에서 첫 번째 메커니즘은 드라이브 0:이고 두 번째 메커니즘은 1:이다.단일 드라이브 플로피 유닛과 통신할 때 드라이브 번호를 생략하는 것은 상당히 일반적인 관례로, 이러한 유닛에서는 0:가 기본이지만, 숫자를 생략하면 DOS에서 몇 개의 모호한 버그를 유발할 수 있으므로 권장되는 관행은 아니다(대장만 0:에 해당하며 이러한 버그를 피하기에 충분함).이 협약의 예외는 중위와 함께 있다. 드라이브 번호가 "논리적 장치"(단일 물리적 드라이브에서 생성된 가상 드라이브)를 가리키는 Kernal 하드 디스크 하위 시스템에서는 열려는 파일이 논리 장치 0(듀얼 플로피 장치의 드라이브 메커니즘 0과 동일)이 아닌 경우 4: 또는 10:와 같은 구문을 만들었다.
파일을 로드 및 저장할 수도 있음LOAD
그리고SAVE
명령어예를 들어 파일 이름 지정자는 여기서도 사용할 수 있다.SAVE "FILE",8
기본 프로그램을 에 저장PRG
(프로그램) 파일 및SAVE "0:FILE,SEQ,WRITE",8,1
BASIC 프로그램을 순차 파일에 저장한다.보조 주소가 지정되지 않았거나 0으로 지정된 경우(예:LOAD "FILE",8
() 파일은 BASIC 메모리 영역(C64에서는 기본적으로 $0801로 시작됨)에서 저장/로드된다.보조 주소가 0이 아닌 값으로 지정된 경우(예:LOAD "FILE",8,1
(), 프로그램은 파일 자체에서 지정한 주소(파일의 처음 2바이트인 PRG 헤더)에서 시작하여 로드된다. 이 형식의 명령은 기계 코드 프로그램을 로드할 때 더 흔하다.
이 기계는 설치된 메모리 확장에 따라 여러 위치에서 BASIC RAM을 시작할 수 있기 때문에 VIC-20에 부하 재배치가 처음 도입되었다.오래된 PET 시리즈는 이전하는 것을 지원하지 않았다.LOAD "FILE",8
그리고LOAD "FILE",8,1
파일이 저장된 메모리 영역과 동일한 메모리 영역에 로드되는 것과 동일한 효과가 있을 것이다.로드 재배치는 호스트에서 발생하며, 장치 내부에서만 사용되는 보조 주소에 대해 위에서 언급된 사항의 예외임.PET는 파일을 재배치할 수 없으므로, 이후 커모도어 기계에 쓰여진 BASIC 프로그램은 헤더 바이트를 변경하기 위해 섹터 편집기를 사용하여 수정되어야 한다.또한 PET의 내장 기계 언어 모니터를 사용해 로딩 후 BASIC 프로그램의 링크 주소를 변경할 수도 있다.
명령어LOAD "*",8,1
파일 지정 메모리 위치에서 시작하여 디스크에 첫 번째 프로그램을 로드한다.예를 들어, 이것은 플랫폼에서 가장 인기 있는 부하 명령 중 하나이며, 상용 소프트웨어의 대부분을 시작하는 방법이다.주목할 점은 와일드카드 확장이 이전에 해당 디스크의 다른 파일을 액세스하지 않은 경우에만 첫 번째 카탈로그 이름을 선택한다는 사실이다. 마지막으로 사용한 파일의 이름은 메모리에 보관되며, 이후로는LOAD "*",8,1
명령은 첫 번째 파일이 아닌 파일을 로드할 것이다.(하지만,LOAD "0:*",8,1
또는LOAD ":*",8,1
항상 디스크에 첫 번째 파일을 로드한다.)
2-드라이브 장치의 디스크 디렉토리는 다음과 같이 액세스된다.LOAD "$0", 8
그리고LOAD "$1", 8
."0:$"
그리고"1:$"
디렉토리에 액세스하지 않고 한 드라이브 또는 다른 드라이브의 실제 파일에 액세스하십시오."$"
부분 디렉터리는 콜론과 템플릿을 추가하여 로드할 수 있다. 예를 들어,LOAD "$0:K*=P",8
이름이 K로 시작하고 PRG 유형인 파일만 표시하는 부분 디렉터리를 로드한다. 이러한 모든 부분 디렉터리에는 초기 디스크 이름 줄과 최종 "BLOCK FREE" 줄이 여전히 포함되어 있다.
대체 저장 버그
Commodore DOS는 또한 "Save-with-Replace" 명령을 제공하는데, 이 명령으로 파일을 먼저 저장할 필요 없이 기존 파일 위에 저장할 수 있다.SCRATCH
기존 파일이 일은 미리 준비해서 한 것이다.@
다음 기간 동안 파일 이름을 나타내는 기호OPEN
또는SAVE
작업 - 예를 들어,SAVE "@MY PROGRAM",8
. 4040 드라이브를 시작으로 몇 년 동안, 사령부의 실행에서 버그에 대한 소문이 퍼졌다.처음에 이것은 일부 논평가들에 의해 거부되었다.그 벌레의 존재를 증명하기 위해 상이 제공되었다.[4]1985년 초까지 Compute! 잡지는 독자들에게 명령어 사용을 피하라고 충고했다.[5]그 해 다양한 저자들이 독립적으로 Save-with-Replace 버그가 진짜라는 것을 증명하고 그것을 촉발할 수 있는 방법을 포함한 기사를[4][6][7][8] 게재했다.
영향을 받은 장치에는 싱글 드라이브 1541과 듀얼 드라이브 4040이 포함되었다. 8050과 8250은 이 문제를 나타내지 않았다.[4]일부 의견제출자들은 항상 명시적으로 다음을 명시함으로써 버그를 피할 수 있다고 제안하였다.0:
드라이브 번호를 저장할 때 드라이브 번호가 없는 디스크 작업은 버그로 연결하기에 충분하다는 것이 나중에 확인되었지만,[6][9] 드라이브 번호를 저장하지 않은 디스크 작업은 버그를 발생시키기에 충분했다.이 버그는 영향을 받은 DOS 구현이 8050과 같은 이전 Commodore PET 듀얼 드라이브에 포함된 DOS의 변형 버전이라는 사실에서 비롯되었다.이것이 "팬텀 드라이브"를 만들었다.1:
"일부 조건에서 불필요한 버퍼를 할당하게 되는 단일 드라이브 시스템.Save-with-Replace 명령은 5개의 드라이브 버퍼를 모두 사용했고, "팬텀" 버퍼를 할당하는 방법이 사양을 충족하지 못했기 때문에, 이것은 어떤 조건에서 스크램블 데이터를 디스크에 쓰는 결과를 낳았다.
1986년 9월, 필립 A.슬레이메이커는 버그의 원인을 매우 상세히 설명하고 1541개의 드라이브 ROM에 패치를 제공하는 기사를[10] 발표하였다; EPROM 버너를 가진 독자들은 드라이브로 교환될 수 있는 패치가 있는 ROM을 직접 생산할 수 있었다.코모도르는 슬레이메이커의 연구 결과를 알게 되었고, 원래의 1541년 ROM에 대해 공식적인 업데이트를 발표하지는 않았지만, 1571년 ROM의 개정 5에서 버그를 수정했고, 1541-c와 1541-II 드라이브에도 ROM에서 버그를 수정했다.Commodore는 지원하지 않지만 1541-II 펌웨어(그러나 1541-c의 펌웨어는 아님)를 EPROM을 사용하여 원본 1541 드라이브에서도 사용할 수 있다고 알려져 있으며, 이 펌웨어는 해당 드라이브의 버그도 해결할 수 있다.
명령 채널
앞서 언급했듯이, Commodore DOS 자체는 파일에 액세스하는 데 사용되는 구문을 사용하여 "명령 채널"을 통해 액세스된다.DOS에 명령을 내리고 명령에 응답하여 생성된 상태 및 오류 메시지를 검색하는 것은 예를 들어 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
에러가 언급되는 것.오류가 없으면 등가물이 4개 변수에 반환된다.참고:INPUT#
실행 모드 전용 동사.또한 많은 디스크 명령을 발행하는 프로그램에서는 프로그램을 시작할 때 장치의 명령 채널에 파일을 열고 프로그램이 끝날 때까지 파일을 닫지 않는 것이 관례다.
Commodore BASIC 버전 4.0 이상에서는 다음과 같은 유사 변수를 제공한다.DS$
위의 코드 대신 드라이브 상태를 검색하는 데 사용될 수 있다.이 예약된 변수는 BASIC의 이전 버전에서는 사용할 수 없으므로 명령 채널은 위에서 설명한 대로 수동으로 읽어야 한다.전원을 켜거나 재설정하면 즉시 DOS 개정판이 반환된다는 점에 유의하십시오.예를 들어, 1541이 반환된다. 오류 코드 73은 모든 드라이브 모델에 공통적이며 드라이브가 전원 켜짐 상태로 재설정되었는지 여부를 확인하는 데 사용될 수 있다.
DOS 명령어
명령 | 설명 | BASIC 1.x 및 2.x 구현 | DOS 웨지 구현 | BASIC 3.0 이상 구현 |
---|---|---|---|---|
새로 만들기 | 디스크를 포맷하여 사용할 수 있도록 준비하고 디스크에 포함된 데이터를 삭제하십시오.2자 식별자 매개 변수를 생략하면 이미 포맷된 디스크의 모든 파일이 빠르게 삭제된다. | OPEN 15,8,15,"N0:disk name,identifier":CLOSE 15 | @N0:disk name,identifier | HEADER "disk name",identifier |
스크래치 | 디스크에서 파일(또는 여러 파일, 와일드 카드 일치 사용) 삭제 | OPEN 15,8,15,"S0:file name":CLOSE 15 | @S0:file name | SCRATCH "file name" |
이름 바꾸기 | 디스크의 파일 이름을 변경하십시오.새 이름이 먼저라는 점에 유의하십시오(BASIC 3.0+ 코드 제외). | OPEN 15,8,15,"R0:new name=old name":CLOSE 15 | @R0:new name=old name | RENAME "old name" TO "new name" |
초기화 | 드라이브를 재설정하고 내장 메모리에 있는 디스크 BAM을 읽으십시오.디스크가 동일한 ID를 가진 다른 디스크로 교환되는 경우를 제외하고, 드라이브가 대개 단독으로 이 작업을 수행하므로 거의 필요하지 않음 | OPEN 15,8,15,"I0:":CLOSE 15 | @I0: | DCLEAR (기본 7.0+만 해당) |
입증하다 | BAM을 디스크 디렉토리와 조정하고, 사용된 모든 블록을 할당하고, 파일에서 사용되지 않는 모든 블록을 해제하고, 디렉터리에서 닫히지 않은 모든 파일을 삭제하십시오.Microsoft 운영 체제의 CHKDSK/ScanDisk 툴과 비교 가능. | OPEN 15,8,15,"V0:":CLOSE 15 | @V0: | COLLECT |
복사하다 | 동일한 디스크의 파일(또는 동일한 두 개의 드라이브 장치에 있는 다른 디스크)을 다른 파일 이름으로 복제하십시오.새 이름이 먼저라는 점에 유의하십시오(BASIC 3.0+ 코드 제외).2-드라이브 장치 없이 다른 디스크에 복제하려면 유틸리티 프로그램을 사용해야 한다. | OPEN 15,8,15,"C0:new name=0:existing name":CLOSE 15 | @C0:new name=0:existing name | COPY"existing name"TO"new name" |
복제하다 | 전체 디스크를 복제하십시오.두 개의 드라이브 유닛에서만 사용할 수 있으며, 그렇지 않으면 유틸리티 프로그램을 대신 사용해야 한다.대상(!) 드라이브 번호가 먼저 오고, 그 다음에 원본 드라이브 번호가 온다(BASIC 3.0+ 코드 제외). | OPEN 15,8,15,"D1=0":CLOSE 15 | @D1=0 | BACKUP D0 TO D1 |
RELative type 파일(RELative type file)에서도 검색 명령어가 있다.RECORD#
)), 여러 블록 레벨 직접 액세스 명령(BLOCK-READ
,BLOCK-WRITE
,BUFFER-POINTER
)), 블록 관리 (BLOCK-ALLOCATE
,BLOCK-FREE
)), 드라이브 메모리 조작 및 드라이브 프로세서의 프로그램 코드 실행(MEMORY-WRITE
,MEMORY-READ
,MEMORY-EXECUTE
,BLOCK-EXECUTE
) 및 사용자 정의 기능(USER
그리고&
명령).이론적으로 사용자 정의가 가능한 기능 중 일부는 1.0 이후 DOS 버전에서 새로운 기능에 액세스하도록 수정되었다.
참조
- ^ Sturdivant, Jerry A. (February–March 1985). "Quick Load". Commodore Power/Play. Vol. 4, no. 1. p. 54. Retrieved 2018-10-07.
- ^ Brannon, Charles (December 1983). "Horizons: 64". COMPUTE!'s Gazette. No. 6. p. 178. Retrieved 2018-10-07.
- ^ Grace, Paul (1986). "A bizarre dude". RUN Special Issue 1987. Peterborough, New Hampshire: CW Communications/Peterborough, Inc. Retrieved 2018-10-07.
- ^ a b c Whittern, Charles H. (July 1985). "SAVE with Replace Exposed!!". The Transactor. 6 (1): 20.
- ^ "The Great Commodore Save/Replace Debate". Compute!. February 1985. p. 10. Retrieved 6 October 2013.
- ^ a b Slaymaker, P. A. (October 1985). "Save With Replace: Debugged At Last / Part 1". Compute!. p. 79. Retrieved 16 October 2013.
- ^ Slaymaker, P. A. (November 1985). "Save-With-Replace: Debugged At Last / Part 2". Compute!. p. 111. Retrieved 30 October 2013.
- ^ 편집자들."세이브@: 게리 뉴필드의 '오래된 벌레에 관한 이론'"정보 № 1985년 12월 9일/1986년 1월
- ^ 필립 A의 이메일 발췌. 슬레이메이커는 그룹에도 보관되어 있다.구글
- ^ 필립 A.슬레이메이커."SAVE@ 및 기타 1541 버그 제거"Transactor Vol. 7 № O2, 1986년 9월 페이지 33–35.
- 메모들
- 임머스, 리처드; 뉴펠드, 제럴드 G. (1984)도스 군단 내부. 1541 디스크 운영 체제에 대한 전체 가이드.DATAMOST, Inc. & Reston 출판사, Inc. (Prentice-Hall)ISBN 0-8359-3091-2.
- 엥글리쉬, 로타르, 스츠제파노프스키, 노르베르트(1984)1541 디스크 드라이브의 해부학.Grand Rapids, MI: Abacus Software(원래 1983년 독일판, Düseldorf: Data Becker GmbH에서 번역).ISBN 0-916439-01-1.
- (핀란드어로) 룬달, 레이조(1986년). 1541-레비야세마.아머소프트.ISBN 951-35-3206-2