hotchpotch/wikipedia-multilingual-ir-pairs huggingface dataset:
우크라이나의 언어 정책 2016년 라디오 방송의 우크라이나어 할당량
2016년 6월, 우크라이나 라디오 방송국들이 매일 우크라이나어 노래를 할당량만큼 재생하도록 요구하는 새 법률이 제정되었다. 그때부터 라디오 방송국의 일일 재생 목록의 최소 4분의 1은 우크라이나어여야 했고, 12개월 후에는 30%, 그 다음 해에는 35%로 증가했다. 이 법은 또한 TV 및 라디오 방송국이 뉴스 및 분석과 같은 프로그램의 최소 60%가 우크라이나어이도록 보장하도록 요구했다. 이 법은 우크라이나 언어 및 문학의 국경일인 11월 9일에 발효되었다. 페트로 포로셴코 대통령은 사람들에게 소셜 미디어에서 좋아하는 우크라이나 노래를 공유하도록 요청하며 이 법을 환영했고, 친러시아 성향의 야권전선은 이 법을 비판하며 사람들이 무엇을 들을지, 어떤 언어로 들을지 스스로 결정할 권리가 있다고 말했다. 디 이코노미스트에 따르면, 우크라이나에서 러시아어의 위상을 낮추는 법의 통과는 "그 나라에서 전쟁을 촉발하는 데 도움이 되었을 수 있다. 블라디미르 푸틴은 이를 우크라이나 민족주의자들이 러시아 문화를 말살하려 한다는 증거로 사용했다."
우크라이나의 언어 정책 2016년 라디오 방송의 우크라이나어 할당량
2017년 5월, 최고 라다는 우크라이나에서 운영되는 모든 텔레비전 채널에 75%의 우크라이나어 할당량을 규정하는 유사한 법을 제정했다.
우크라이나의 언어 정책 2017년 교육법
우크라이나의 2017년 교육법은 5학년부터 국립학교에서 우크라이나어를 의무적인 학습 언어로 지정했다. 즉, 기본 중등 및 고등 교육 수준에서 다른 언어로 수업을 진행할 수 있지만 별도의 과목으로 허용했으며, 이는 2023년에 단계적으로 도입될 예정이었다. 유치원과 초등학교에서의 소수 언어 교육은 변경되지 않았지만, 중등 수준에서는 학생들이 모국어를 별도의 과목으로만 배울 수 있었다. 또한 5학년부터 두 개 이상의 과목을 EU 언어 중 하나로 가르칠 수 있게 되었는데, 여기에는 헝가리어, 폴란드어, 루마니아어와 같은 소수 언어는 포함되지만 벨라루스어, 이디시어, 러시아어는 포함되지 않는다.
우크라이나의 언어 정책 2017년 교육법
2017년 교육법은 헝가리, 루마니아, 러시아, 폴란드, 불가리아 및 기타 국가에서 거센 반발을 불러일으켰다. 루마니아 의회는 이 법을 비난하는 동의안을 통과시켰고, 우크라이나가 소수 민족의 언어 권리를 존중하지 않고는 EU 통합을 진행할 수 없을 것이라고 경고했다. 국가두마와 연방평의회 또한 우크라이나의 러시아어 사용 소수 민족의 언어 권리 침해를 개탄하는 결의안을 채택했다. 우크라이나-헝가리 관계는 우크라이나의 헝가리인 문제로 급격히 악화되었으며, 교육법은 민족주의적이고 불필요하게 도발적이라는 비난을 받았다. 페트로 포로셴코 우크라이나 대통령은 이 법을 옹호하며 "이 법은 모든 사람에게 동등한 기회를 보장한다... 모든 졸업생이 우크라이나에서 성공적인 경력을 위해 필수적인 강력한 언어 능력을 갖도록 보장한다"고 주장했다. 헝가리는 2017년부터 우크라이나 내 헝가리 소수 민족을 돕기 위해 우크라이나의 EU 및 NATO 통합 시도를 막고 있다.
우크라이나의 언어 정책 2017년 교육법
2017년 12월 7일, 유럽 민주주의 법률 위원회 (베니스 위원회)는 법에 대한 비판이 정당하다고 밝혔다. 이는 모든 우크라이나어 중등 교육으로의 전환이 소수 민족의 언어 권리를 침해할 수 있기 때문이었다. 또한 베니스 위원회에 따르면, 특정 과목을 EU의 공용어로 가르치도록 허용하는 것은 가장 널리 사용되는 비국가 언어인 러시아어 사용자를 차별할 수 있었다. 베니스 위원회는 우크라이나 정부에 법을 개정하기 위한 7가지 권고를 제시했다. 볼로디미르 젤렌스키 신임 우크라이나 대통령에 따르면, 2019년 현재 우크라이나는 이 7가지 권고 중 6가지를 이행했다.
2020년 1월, 이 법은 변경되어 "하나 이상의 과목"을 "두 개 이상의 언어 – 공식 국어, 영어, 다른 유럽 연합 공식 언어"로 가르치는 것을 합법화했다. 국가 지원을 받지 않는 모든 학교는 자체적으로 교육 언어를 자유롭게 선택할 수 있게 되었다.
2020년 법에 따르면, 교육 5학년까지는 소수 언어로 모든 수업을 완전히 가르칠 수 있으며, 우크라이나어 과목의 의무적인 교육은 없다. 5학년에는 수업의 20% 이상을 우크라이나어로 가르쳐야 한다. 그 후 매년 국어(우크라이나어) 교육량이 증가하여 9학년에는 40%에 도달해야 한다. 12학년이자 최종 학년에는 교육의 60% 이상을 우크라이나어로 가르쳐야 한다.
2017년 언어 교육법은 전면 시행을 위해 3년의 전환 기간을 명시했다. 2018년 2월, 이 기간은 2023년까지 연장되었다. 2023년 6월, 이 기간은 다시 2024년 9월까지 연장되었다.
우크라이나의 언어 정책 르비우주
2018년 9월, 르비우주 의회는 우크라이나 영토의 완전한 점령 중단까지 르비우주 전역에서 러시아어 문화 상품(영화, 서적, 노래 등)의 공공 사용을 금지했다. 인권 운동가들과 변호사들은 이 법이 모호하고 불법적이며 위헌이라고 불렀다. 르비우 지역 의회의 결정은 추후이우 인권 단체를 비롯한 여러 단체에 의해 행정 법원에서 성공적으로 이의가 제기되었다. 그러나 2019년 5월 14일, 행정 법원의 판결은 우크라이나 대법원의 상고 재판부에서 기술적인 이유로 취소되었다. 추후이우 인권 단체는 이 금지 조치에 대해 유럽인권법원에 소송을 제기할 것이라고 발표했다. 이 금지 조치는 2019년 1월 법원에 의해 뒤집혔다.
우크라이나의 언어 정책 2019년 국어로서 우크라이나어 기능 보호에 관한 법률
"국가 언어로서 우크라이나어 기능 보호에 관한 법률"은 일부 공공 기관의 업무, 선거 절차 및 정치 캠페인, 유치원, 학교 및 대학 교육, 과학, 문화 및 스포츠 활동, 서적 출판 및 유통, 인쇄 매체, 텔레비전 및 라디오 방송, 경제 및 사회 생활(상업 광고, 공공 행사), 병원 및 요양원, 그리고 우크라이나에 등록된 정당 및 기타 법인(예: 비정부 기구)의 활동에서 우크라이나어 사용을 의무화했다(전체 또는 특정 할당량 내). 크림 타타르어, 우크라이나 원주민의 다른 언어, 영어 및 기타 유럽 연합 공식 언어에 대해서는 일부 특별 면제가 제공되며, EU 공식 언어가 아닌 소수 언어인 러시아어, 벨라루스어 및 이디시어는 면제 대상에서 제외된다.
우크라이나의 언어 정책 2019년 국어로서 우크라이나어 기능 보호에 관한 법률
2018년 10월 4일, 최고 라다 (우크라이나 의회)는 새로운 언어법 (법안 번호 5670-d, "국가 언어로서 우크라이나어 기능 보호에 관한 법률")의 1차 독회에서 261명의 의원 다수로 통과시켰다. 그 후, 이 법안은 "약 4개월 동안 2차 독회를 위해 준비되었다. 이 기간 동안 최고 라다 문화 및 영성 위원회는 인민 대표들이 제안한 2,000개 이상의 문서를 수정했다. 특히, 이 문서에는 국가 언어 표준에 관한 국가 위원회 설립과 국가 언어 보호 위원직 도입이 제안되어 있다. 의원들은 2월 28일 2차 독회에서 문서를 검토하기 시작했다. 최고 라다는 3월 12일부터 15일까지 [2019년] 법안 수정안을 계속 검토했다." 유럽 평의회는 최고 라다에 선거 후 기간까지 법안 채택을 연기할 것을 요청했다.
우크라이나의 언어 정책 2019년 국어로서 우크라이나어 기능 보호에 관한 법률
2019년 4월 25일, 우크라이나 의회는 이 법을 채택했다. 필라레트 (데니센코) 총대주교와 빅토르 유셴코 전 대통령이 투표 당시 의회에 참석했다. 같은 날 친러시아 성향의 우크라이나 국회의원들은 이 법을 폐지하기 위한 두 가지 결의안 초안을 제출하여 최고 라다 의장 안드리 파루비의 서명을 막았다. "의회가 이 결의안을 지지하지 않으면, [국회의장] 안드리 파루비는 이 법에 서명하여 우크라이나 대통령에게 서명을 받기 위해 전달할 권리가 있다." 총 4건의 법률 폐지 항소가 제출되었으며, 의회는 2019년 5월 14일에 이에 대해 투표할 예정이었다. 파루비는 의회가 해당 항소들을 기각한 후 법률에 서명할 것이며, 우크라이나 대통령이 "지체 없이" 서명할 것이라고 선언했다.
당시 페트로 포로셴코 대통령은 우크라이나 의회의 법 채택을 "역사적인 결정"이라고 불렀고 의회로부터 법을 받는 즉시 서명할 것이라고 말했다. 포로셴코는 또한 이 법이 "안드리 파루비 없이는 승인되지 않았을 것"이라고 말했다.
우크라이나의 언어 정책 2019년 국어로서 우크라이나어 기능 보호에 관한 법률
의회 의장 파루비는 2019년 5월 14일, 법안 번호 5670-d를 취소하려는 4개의 법안이 의회에서 거부된 후 해당 법률에 서명했다. 파루비는 이 법이 "몇 시간 또는 며칠 안에 우크라이나 대통령의 서명을 받을 것"이라고 말했다. 2019년 5월 15일, 임기 마지막 주의 포로셴코 대통령이 이 법에 서명했다.
2019년 6월 21일, 우크라이나 헌법재판소는 우크라이나 의원 51명으로부터 이 법의 헌법 적합성 여부를 확인해 달라는 청원을 받았다. 2021년 7월 14일, 헌법재판소는 이 법이 합헌이라고 판결했다.
이 법은 언론, 교육, 비즈니스 분야에서 우크라이나어를 규제하여 아직도 많은 대중이 러시아어를 사용하는 국가에서 우크라이나어의 역할을 강화하는 것을 목표로 한다. 이 법은 사적인 의사소통 및 종교 의례 분야에는 적용되지 않는다.
우크라이나의 언어 정책 2019년 국어로서 우크라이나어 기능 보호에 관한 법률
이 법은 모든 시민이 우크라이나어에 능숙해야 하며, 우크라이나어 지식이 부족할 경우 "국가 공직"(국회의원, 공무원 등)에 접근하는 것을 막는다. 우크라이나어는 중앙 및 지방 당국의 실무 언어이다. 원칙적으로 모든 공공 기관은 우크라이나어로 작성된 문서와 신청서만 검토하며, 그들의 규정 및 개별 시행령은 우크라이나어로 작성된다.
이 법은 선거와 국민투표가 우크라이나어로 실시되어야 하며, "텔레비전, 라디오로 방송되거나, 옥외 광고 매체에 게시되거나, 전단지 및 신문 형태로 배포되거나, 인터넷에 게시되는" 모든 선거 운동 자료는 우크라이나어로 되어야 한다고 규정한다. 우크라이나에 등록된 정당 및 비정부 조직은 우크라이나어로 "설립 문서 및 결정"을 채택하고 공공 기관과의 거래에서 우크라이나어를 사용해야 한다.
우크라이나의 언어 정책 2019년 국어로서 우크라이나어 기능 보호에 관한 법률
소수 민족 구성원은 모국어로만 유치원 및 초등 교육을 받을 권리가 있다. 중등 교육의 경우, 그들은 모국어를 과목으로 공부할 권리가 있으며, 다른 하나 이상의 과목은 영어 또는 유럽 연합의 공식 언어 중 하나로 가르칠 수 있다. EU 공식 언어를 사용하지 않는 소수 민족 구성원(벨라루스인, 가가우즈인, 유대인, 러시아인)은 중등학교 수준에서 모국어를 과목으로만 공부할 수 있다.
우크라이나의 언어 정책 2019년 국어로서 우크라이나어 기능 보호에 관한 법률
과학 출판물 및 공개 과학 행사는 우크라이나어, 영어 또는 기타 EU 공식 언어로만 진행될 수 있으며, 모든 문화, 예술, 레크리에이션 및 엔터테인먼트 행사도 마찬가지이다. 다만, 예술적 이유나 소수 민족 언어 보호 목적을 위해 다른 언어를 사용하는 경우는 예외이다. 출판사는 서적의 최소 50%를 우크라이나어로 인쇄해야 하며, 서점은 최소 50%의 서적을 우크라이나어로 판매해야 한다. TV 및 영화 배급사는 콘텐츠의 90%가 우크라이나어임을 보장해야 한다. 우크라이나어가 아닌 다른 언어로 인쇄 매체를 발행하는 것은 우크라이나어 번역본이 동반되는 경우에만 허용되며, 번역본은 크기, 형식 및 내용이 동일해야 한다. 예외는 크림 타타르어 또는 다른 원주민 언어(예: 카라임 및 크림차크 소수 민족과 같이 관련 국가가 없는 소수 민족)로 발행된 매체와 영어 또는 기타 EU 공식 언어로 발행된 매체이다. 우크라이나에서 제작된 영화는 우크라이나어여야 하며, 외국 영화는 우크라이나 당국이 정한 특정 기준을 충족하지 않는 한 우크라이나어로 더빙되어야 한다.
광고, 방향 표지판, 안내판, 간판, 메시지, 설명 등 모든 공개 정보는 우크라이나어로 되어야 한다. 우크라이나어는 모든 공공 정부 기관이 조직하거나 전체 또는 부분적으로 자금을 지원하는 광범위한 의미의 "공공 행사"의 언어이다. 다른 언어도 사용될 수 있지만, 주최측은 "그러한 공공 행사의 참가자 중 적어도 한 명이 요청하는 경우" 우크라이나어로 동시 또는 순차 통역을 제공해야 한다.
우크라이나어 사용은 보건, 의료 및 의료 서비스 분야에서도 의무적이지만, 서비스 사용자의 요청에 따라 당사자가 수용할 수 있는 다른 언어로 서비스가 제공될 수 있다.
법률 위반의 결과로 행정상 금전적 제재가 부과된다.
EU 공용어인 소수 언어와 달리 러시아어, 벨라루스어 및 이디시어는 이 법의 목적을 위한 어떠한 면제도 부여받지 않는다.
2019년 4월 26일, 페테르 시야르토 헝가리 외무장관은 이 법이 "받아들일 수 없으며" "포로셴코의 반헝가리 정책의 일부"라고 말했다.
2019년 4월 30일, 유럽 연합 집행위원회는 이 법을 검토하고 평가할 것이라고 밝혔다. 2019년 5월 22일, 유럽 평의회 의회 감시위원회 위원장은 베니스 위원회에 이 법을 분석해 달라고 요청했다. 2019년 6월 1일, 인권최고대표사무소는 우크라이나에서 소수 언어 사용을 규제하는 특별 법률의 부재에 대해 우려를 표명하고, EU 공식 언어를 사용하는 소수 민족과 다른 소수 민족 간의 구분에 대해 비판했다.
2019년 12월, 베니스 위원회는 이 법의 여러 조항이 우크라이나어 홍보와 소수 민족의 언어 권리 보호 사이에 공정한 균형을 이루지 못했다고 밝혔다.
2019년 5월, 키이우 지방 행정 법원은 최고 라다 의장 안드리 파루비가 법률에 서명하고 공표하는 것을 금지해 달라는 NGO의 신청을 기각했다.
러시아는 유엔 안전 보장 이사회 의장에게 우크라이나 의회의 법 채택에 관한 회의를 소집해 달라고 요청했다.
2022년 1월, 휴먼 라이츠 워치는 소수 언어 보호에 대한 우려를 표명했다.
우크라이나의 언어 정책 2022년 러시아 서적 및 음악 제한
2022년 6월 19일, 우크라이나 의회는 러시아 서적 및 음악에 대한 엄격한 제한을 가하는 두 개의 법률을 통과시켰다. 한 법은 러시아 시민이 러시아 여권을 포기하고 우크라이나 시민권을 취득하지 않는 한 서적을 인쇄하는 것을 금지한다. 이 법은 또한 러시아, 벨라루스 및 점령된 우크라이나 영토에서 인쇄된 서적의 수입을 금지하며, 다른 국가에서 러시아 서적을 수입하기 위해서는 특별 허가가 필요하다. 다른 법은 미디어 및 대중교통에서 소비에트 시대 이후의 예술가들의 음악 재생을 금지하고, 텔레비전 및 라디오 방송에서 우크라이나어 음성 및 음악 콘텐츠의 할당량을 증가시킨다.
우크라이나의 언어 정책 2022년 러시아 서적 및 음악 제한
7월 7일, 볼로디미르 젤렌스키 대통령은 텔레비전과 라디오에서 러시아 음악의 공개 공연을 제한하는 법에 서명했고, 10월 7일, 이 법은 발효되었다. 이 법은 음악가가 러시아의 우크라이나 침공을 공개적으로 비난한 예술가들의 "화이트리스트"에 포함된 경우 소비에트 시대 이후 러시아 음악 재생을 허용한다. 우크라이나 보안국이 목록 포함 및 제외를 결정한다.
2023년 7월 13일, 키이우 시의회는 키이우 시내에서 "러시아어 문화 상품" 사용을 금지했다. 여기에는 서적, 음악, 영화 등 모든 러시아어 상품의 공개 공연이 포함된다.
우크라이나의 언어 정책 2023년 소수 민족 권리 변경
2022년 12월 8일, 우크라이나 의회는 소수 민족의 권리에 관한 일부 법률을 개정하는 법안을 통과시켰다. 이는 유럽 평의회의 전문가 평가를 반영하고 우크라이나의 유럽 연합 가입 협상 개시를 위한 유럽 연합 집행위원회의 기준 중 하나를 충족하기 위한 것이었다. 이러한 변경 사항은 사립 고등 교육 기관이 유럽 연합의 공식 언어인 경우 학습 언어를 자유롭게 선택할 수 있는 권리를 부여하는 동시에 해당 기관에서 공부하는 사람들이 국어인 우크라이나어를 별도의 학문 분야로 공부하도록 보장했다. 또한 해당 소수 민족의 언어가 유럽 연합의 공식 언어인 소수 민족에게는 국어와 함께 해당 소수 민족의 언어를 교육 과정에서 사용할 권리를 보장했으며, 2018년 9월 1일 이전에 해당 소수 민족의 언어로 일반 중등 교육을 시작한 학생들은 Law of Ukraine "On protecting the functioning of the Ukrainian language as the state language"가 2019년 7월 16일에 발효되기 전에 적용되었던 규칙에 따라 전체 중등 교육을 완료할 때까지 해당 교육을 계속 받을 권리를 보장했다.
우크라이나의 언어 정책 더 읽어보기
Azhniuk, Bohdan (2017). 《Ukrainian Language Legislation and the National Crisis》. 《Harvard Ukrainian Studies》 35 (Harvard Ukrainian Research Institute). 311–329쪽. ISSN 0363-5570. JSTOR 44983546. 2024년 7월 28일에 확인함.
Maksimovtsova, Ksenia (2019). 〈Chapter 3.1: The Characteristics of Language Policy in Ukraine after the USSR Disintegration〉. 《Language Conflicts in Contemporary Estonia, Latvia and Ukraine》. Soviet and Post-Soviet Politics and Society 205. 슈투트가르트: ibidem. 119–158쪽. ISBN 978-3-8382-1282-1.
우크라이나의 언어 정책 더 읽어보기
Reznik, Vladislava (2018). 〈독립 우크라이나의 언어 정책: 국가 및 언어적 권한 강화를 위한 투쟁〉.   Andrews, Ernest (편집). 《Language Planning in the Post-Communist Era: The Struggles for Language Control in the New Order in Eastern Europe, Eurasia and China》. 팔그레이브 맥밀란. 169–192쪽. ISBN 978-3-319-70925-3.
시린 폴로
시린 폴로는 일반적으로 페르시아 결혼식 쌀밥 또는 나팔절 쌀밥으로 알려져 있으며, 결혼식과 같은 특별한 행사를 기념하기 위해 흔히 제공되는 전통적인 페르시아 쌀 필라프이다. 이는 모라싸 폴로(직역: '보석밥')의 간소화된 버전이다.
전 세계의 페르시아 유대인 공동체에서는 종종 부림절, 유월절, 나팔절 및 유대교 대축일과 같은 명절과 관련이 있다. 라마단 기간에는 이프타르로 제공된다.
시린 폴로 개요
시린 폴로는 일반적으로 결혼식, 생일, 명절과 같은 축하 행사에서 제공된다. 이것은 페르시아식으로 찐 밥 위에 매자나무 열매, 살구, 대추와 같은 견과류와 말린 과일을 얹은 것이다.
시린 폴로 준비
시린 폴로는 일반적으로 페르시아식으로 쌀을 불리고 끓인 다음, 식용유, 사프란 또는 쿠르쿠마 롱가 및 기타 향신료와 양념을 섞은 후 물을 빼고 찐다. 때로는 바삭한 크러스트인 타흐딕을 넣어 준비하기도 한다. 요리된 후에는 서빙 접시에 타흐딕을 장식으로 얹어 꺼낸다. 그런 다음 살구, 매자나무 열매, 대추, 자두와 같은 말린 과일과 피스타치오, 아몬드, 호두 또는 개암과 같은 견과류, 때로는 오렌지 껍질을 위에 얹는다. 말린 과일과 견과류는 통째로 또는 다져서 사용할 수 있다.
시린 폴로 제공
시린 폴로는 종종 양념된 구운 닭고기와 함께 제공된다.
코모도어 베이직
코모도어 베이직(Commodore BASIC) 또는 PET 베이직(PET BASIC) 또는 CBM-베이직(CBM-BASIC)은 코모도어 인터내셔널의 8비트 가정용 컴퓨터 라인에서 사용된 베이직 프로그래밍 언어의 방언으로, PET (1977)부터 코모도어 128 (1985)까지 이어진다.
핵심은 6502 마이크로소프트 베이직을 기반으로 하며, 따라서 애플소프트 베이직과 같이 당시의 다른 6502 베이직과 많은 특징을 공유한다. 코모도어는 1977년 빌 게이츠의 단위당 $3의 수수료 제안을 잭 트라미엘이 "나는 이미 결혼했다"며 거절하고, 영구 라이선스에 대해 $25,000 이상을 지불하지 않겠다고 밝힌 후, "한 번 지불, 로열티 없음"을 기반으로 마이크로소프트로부터 베이직 라이선스를 얻었다.
원래 PET 버전은 거의 수정 없이 원래의 마이크로소프트 구현과 매우 유사했다. C64의 베이직 2.0도 유사했으며, C128 (C64 모드) 및 다른 모델에서도 볼 수 있었다. 이후 PET에서는 베이직 4.0이 탑재되었는데, 이는 원래 버전과 유사하지만 플로피 디스크 작업을 위한 여러 명령이 추가되었다.
코모도어 베이직
베이직 3.5는 C16 및 플러스/4에서 그래픽 및 사운드 지원을 위한 여러 명령을 추가하면서 처음으로 크게 달라졌다. 베이직 7.0은 코모도어 128에 포함되었으며, 플러스/4의 베이직 3.5에서 가져온 구조적 프로그래밍 명령과 기기의 새로운 기능을 활용하기 위해 특별히 설계된 키워드를 포함했다. 스프라이트 편집기와 기계어 모니터가 추가되었다. 마지막 버전인 베이직 10.0은 미출시된 코모도어 65의 일부였다.
코모도어 베이직 역사
코모도어는 일괄 요금 베이직의 소스 코드를 가져와서 모든 다른 8비트 가정용 컴퓨터를 위해 내부적으로 추가 개발했다. 코모도어 128 (V7.0 포함)에 이르러서야 마이크로소프트 저작권 고지사항이 표시되었다. 그러나 마이크로소프트는 버전 2 또는 "업그레이드" 코모도어 베이직에 그 출처를 증명하는 이스터 에그를 숨겨 놓았다. `WAIT 6502, 1` 명령을 입력하면 화면에 `Microsoft!`가 나타났다. (이스터 에그는 잘 난독화되어 있었으며, 메시지는 인터프리터의 어떤 역어셈블에서도 나타나지 않았다.)
인기 있는 코모도어 64는 버전 4.0이 탑재된 PET/CBM 시리즈보다 늦게 출시되었음에도 불구하고 ROM에 베이직 v2.0이 함께 제공되었다. 이는 64가 가정용 컴퓨터로 의도된 반면, PET/CBM 시리즈는 내장 프로그래밍 언어가 더 많이 사용될 것으로 예상되는 비즈니스 및 교육용으로 개발되었기 때문이었다. 이는 V2가 더 작은 ROM에 들어갈 수 있어 제조 비용을 절감했다.
코모도어 베이직 기술적 세부 사항
코모도어의 ROM 내장 베이직 인터프리터 및 KERNAL의 편리한 기능은 전체 화면 편집기였다. 코모도어 키보드는 시프트 키를 누르면 방향이 반전되는 두 개의 커서 키만 가지고 있었지만, 화면 편집기를 통해 사용자는 화면의 어느 곳에서나 직접 명령을 입력하거나 프로그램 라인을 입력하고 편집할 수 있었다. 라인 앞에 라인 번호가 붙어 있으면, 해당 라인은 토큰화되어 프로그램 메모리에 저장되었다. 번호로 시작하지 않는 라인은 커서가 라인 위에 있을 때 RETURN 키를 누르면 실행되었다. 이는 당시 일반적으로 별도의 `EDIT` 명령이나 커서 위치에서 라인을 자르는 "복사 커서"를 사용하는 라인 편집기를 사용하던 다른 일반 가정용 컴퓨터 베이직에 비해 프로그램 입력 인터페이스에서 상당한 개선을 의미했다.
코모도어 베이직 기술적 세부 사항
또한, 카세트를 포함한 모든 장치에 명명된 파일을 저장하는 기능도 있었다. 카세트는 PET 시절에 인기 있는 저장 장치였으며, 8비트 코모도어의 수명 기간 동안 저렴한 대용량 저장 장치로 계속 사용되었다. 대부분의 시스템은 디스켓에만 파일 이름을 지원하여 다른 장치에 여러 파일을 저장하기 더 어렵게 만들었다. 이러한 다른 시스템의 사용자는 파일 위치에서 레코더의 카운터 표시를 기록해야 했지만, 이는 부정확하고 오류가 발생하기 쉬웠다. PET (및 베이직 2.0)에서는 카세트에서 파일을 이름으로 요청할 수 있었다. 장치는 데이터를 순차적으로 읽으면서 일치하지 않는 파일 이름을 무시하고 파일 이름을 검색했다. 파일 시스템은 또한 파일로 로드하거나 저장할 수 있는 강력한 레코드 구조에 의해 지원되었다. 코모도어 카세트 데이터는 다른 제조업체에서 사용하는 저렴한 (그리고 신뢰할 수 없는) 아날로그 방식이 아닌 디지털 방식으로 기록되었다. 따라서 표준 테이프 레코더 대신 특수 데이터세트가 필요했다. 아날로그-디지털 변환회로를 사용하여 표준 레코더를 사용할 수 있게 해주는 어댑터도 있었지만, 이들은 데이터세트보다 가격이 약간 저렴할 뿐이었다.
코모도어 베이직 기술적 세부 사항
LOAD 명령은 선택적 매개변수 ,1과 함께 사용될 수 있으며, 이 경우 파일의 첫 두 바이트에 포함된 메모리 주소로 프로그램을 로드한다 (이 바이트는 버려지며 메모리에 유지되지 않는다). 만약 ,1 매개변수가 사용되지 않으면, 프로그램은 베이직 프로그램 영역의 시작 부분으로 로드되는데, 이는 기기마다 크게 다르다. 일부 코모도어 베이직 변형은 애플소프트 베이직의 해당 명령처럼 작동하여 지정된 메모리 위치에서 비트맵을 로드하거나 저장하는 BLOAD 및 BSAVE 명령을 제공했다.
코모도어 베이직 기술적 세부 사항
PET는 재배치 가능한 프로그램을 지원하지 않으며 LOAD 명령은 항상 프로그램 파일에 포함된 처음 두 바이트로 로드된다. 이는 다른 코모도어 기기에 저장된 베이직 프로그램을 로드할 때 문제가 발생했다. PET의 베이직이 프로그램을 예상하는 주소보다 더 높은 주소로 로드될 수 있었기 때문이며, 프로그램을 적절한 위치로 "이동"하는 해결책이 있었다. 만약 프로그램이 CBM-II 기기에 저장되었다면, PET에서 로드하는 유일한 방법은 디스크 섹터 편집기로 첫 두 바이트를 수정하는 것이었다. CBM-II 시리즈는 베이직 프로그램 영역이 $0에 있었고, 이는 PET가 제로 페이지로 로드하여 잠기는 결과를 초래할 수 있었기 때문이다.
코모도어 베이직 기술적 세부 사항
코모도어 베이직 키워드는 먼저 시프트되지 않은 키를 누른 다음 다음 글자의 시프트된 키를 눌러 약어로 입력할 수 있었다. 이렇게 하면 하이 비트가 설정되어, 인터프리터가 읽기를 멈추고 순람표에 따라 문장을 구문 분석하게 했다. 이는 하이 비트가 설정된 부분까지의 문장이 전체 명령을 입력하는 대신 대체로 허용되었음을 의미했다. 그러나 모든 베이직 키워드는 메모리에 단일 바이트 토큰으로 저장되었으므로, 이는 최적화라기보다는 문장 입력을 위한 편의 기능이었다.
코모도어 베이직 기술적 세부 사항
기본 대문자 전용 문자 세트에서, 시프트된 문자는 그래픽 기호로 나타났다. 예를 들어, `GOTO` 명령은 `G{Shift-O}` (화면에는 `GΓ`와 비슷하게 보임)로 약어화될 수 있었다. 대부분의 이러한 명령은 두 글자 길이었지만, 일부 경우에는 더 길었다. 이런 경우 모호성이 있었으므로, `GOSUB`을 위해서는 `GO{Shift-S}` (`GO♥`)와 같이 시프트되지 않은 글자가 더 필요했다. 일부 명령은 간결성이나 다른 명령과의 모호성 때문에 약어 형태가 없었다. 예를 들어, `INPUT` 명령은 별도의 `INPUT#` 키워드와 철자가 충돌하여 약어가 없었는데, `INPUT#` 키워드는 키워드 순람표의 시작 부분에 더 가까이 위치해 있었다. 많이 사용되는 `PRINT` 명령은 대부분의 마이크로소프트 베이직 방언에서 흔히 볼 수 있는 단일 `?` 단축키를 가지고 있었다. 시프트된 글자로 명령을 약어화하는 것은 코모도어 베이직에 고유한 기능이다.
코모도어 베이직 기술적 세부 사항
이 토큰화 방식에는 버그가 있었는데, `REM` (코드에 주석을 추가하는 베이직 명령) 뒤에 `SHIFT-L`을 포함하면, 프로그램 목록을 보려고 할 때 베이직 인터프리터가 즉시 목록을 중단하고 `?SYNTAX ERROR`를 표시하며 `READY.` 프롬프트로 돌아갔다. 이 버그는 프로그래머들이 자신의 작업을 보호하려는 목적으로 어느 정도 사용되었지만, 피하기는 상당히 쉬웠다.
키워드를 약어화함으로써 단일 프로그램 라인에 더 많은 코드를 담을 수 있었다 (40열 디스플레이에서는 두 화면 라인, 즉 C64 또는 PET, VIC-20의 22열 디스플레이에서는 네 라인을 차지할 수 있었다). 이는 그렇지 않으면 필요한 추가 프로그램 라인을 저장하는 오버헤드를 약간 절약할 수 있게 했지만, 그 이상은 아니었다. 모든 베이직 명령은 토큰화되어 입력 방식에 관계없이 메모리에서 1바이트 (베이직 7 또는 베이직 10의 여러 명령의 경우 2바이트)를 차지했다. 이러한 긴 라인은 편집하기에 불편했다. `LIST` 명령은 전체 명령 키워드를 표시하여, 프로그램 라인을 프로그램 메모리에 입력할 수 있는 2개 또는 4개 화면 라인 이상으로 확장했다.
코모도어 베이직 기술적 세부 사항
원래 마이크로소프트 베이직 인터프리터와 마찬가지로, 코모도어 베이직은 네이티브 기계어보다 느리다. 테스트 결과에 따르면 ROM에서 RAM으로 16 킬로바이트를 복사하는 데 기계어로는 1초 미만이 걸리는 반면, 베이직으로는 1분 이상이 걸린다. 인터프리터보다 빠르게 실행하기 위해 프로그래머들은 다양한 기술을 사용하여 실행 속도를 높이기 시작했다. 한 가지 방법은 자주 사용되는 부동 소수점 값을 리터럴 값으로 사용하는 대신 변수에 저장하는 것이었다. 이는 변수 이름을 해석하는 것이 리터럴 숫자를 해석하는 것보다 빠르기 때문이었다. 모든 명령의 기본 유형이 부동 소수점이기 때문에, 정수보다 부동 소수점 숫자를 인수로 사용하는 것이 더 빠르다. 속도가 중요할 때, 일부 프로그래머는 베이직 프로그램의 일부를 6502 또는 6510 어셈블리어로 변환하여 파일에서 별도로 로드하거나 베이직 프로그램 끝의 DATA 문에서 메모리에 POKE하여, 직접 모드에서 또는 프로그램 자체에서 SYS 명령을 사용하여 실행했다. 게임이나 사용자 입력을 기다리는 경우와 같이 기계어의 실행 속도가 너무 빠를 때는, 프로그래머들이 실행을 지연시키거나 중단하기 위해 선택된 메모리 위치(예: 64의 경우 $C6, 128의 경우 $D0로 키보드 큐 크기를 나타냄)를 읽어서 폴링할 수 있었다.
코모도어 베이직 기술적 세부 사항
코모도어 베이직의 독특한 특징은 화면 지우기나 프로그램 내에서 커서 위치 지정과 같은 작업을 수행하기 위해 제어 코드를 사용하는 것이다. 이들은 PRINT CHR$(X) 명령을 발행하여 호출할 수 있는데, 여기서 X는 발행할 제어 코드에 해당한다 (예를 들어, PRINT CHR$(147)은 화면을 지우는 제어 코드이다). 또는 따옴표 안에 해당 키를 눌러 호출할 수도 있는데, 따옴표 뒤에 ⇧ Shift+CLR HOME을 누르면 베이직이 제어 코드의 시각적 표현 (이 경우 뒤집힌 하트)을 표시하며, 이는 프로그램 실행 시 작동한다 (제어 코드를 직접 인쇄하는 것이 CHR$ 함수를 호출하는 것보다 메모리를 적게 사용하고 더 빠르게 실행된다). 이는 화면을 지우거나 커서를 이동하는 전용 명령이 있는 다른 베이직 구현과 비교된다.
베이직 3.5 이상은 화면을 지우고 커서를 이동하는 적절한 명령을 가지고 있다.
코모도어 베이직 기술적 세부 사항
코모도어 베이직의 프로그램 라인은 어디에도 공백이 필요하지 않지만 (그러나 LIST 명령은 항상 라인 번호와 문장 사이에 공백을 표시한다), 예를 들어 100 IFA=5THENPRINT"YES":GOTO160과 같이 공백 없이 프로그램을 작성하는 것이 일반적이었다. 이 기능은 토크나이저가 키워드 사이에 삽입된 어떤 공백도 제거하지 않으므로 메모리를 절약하기 위해 추가되었다. 공백의 존재는 토큰화된 프로그램에 추가적인 0x20 바이트를 발생시키며, 이는 실행 중에 단순히 건너뛴다. 라인 번호와 프로그램 문장 사이의 공백은 토크나이저에 의해 제거된다.
코모도어 베이직 기술적 세부 사항
프로그램 라인은 대부분의 기기에서 총 80자까지 가능하지만, 40열 텍스트를 사용하는 기기에서는 라인이 화면의 다음 줄로 넘어가고, 22열 디스플레이를 가진 VIC-20에서는 프로그램 라인이 최대 4줄까지 차지할 수 있었다. 코모도어 128의 베이직 7.0은 프로그램 라인 제한을 160자(40열 라인 4개 또는 80열 라인 2개)로 늘렸다. PRINT 대신 ?와 같은 약어를 사용하면 한 줄에 더 많은 내용을 담을 수 있다. 베이직 7.0은 사용자가 160자를 초과하는 프로그램 라인을 입력하면 ?STRING TOO LONG 오류를 표시한다. 이전 버전에서는 오류를 발생시키지 않고, 라인 길이가 초과되면 단순히 READY 프롬프트를 두 줄 아래에 표시한다. 라인 번호는 프로그램 라인의 문자 수에 포함되므로, 다섯 자리 라인 번호는 한 자리 번호보다 허용되는 문자가 네 개 적다.
코모도어 베이직 기술적 세부 사항
코모도어 베이직 라인의 실행 순서는 라인 번호에 의해 결정되지 않았다; 대신, 메모리에 라인이 연결된 순서를 따랐다. 프로그램 라인은 다음 프로그램 라인의 시작 주소를 포함하는 포인터, 라인 번호, 그리고 해당 라인의 토큰화된 코드와 함께 단일 연결 리스트로 메모리에 저장되었다. 프로그램이 입력되는 동안, 베이직은 라인 번호와 포인터가 모두 오름차순이 되도록 메모리에서 프로그램 라인을 지속적으로 재정렬했다. 그러나 프로그램이 입력된 후, POKE 명령으로 라인 번호와 포인터를 수동으로 변경하면 순서가 뒤섞인 실행이 가능하거나, 심지어 모든 라인에 동일한 라인 번호를 부여할 수도 있었다. 초창기에는 베이직이 상업적으로 사용될 때, 이는 프로그램의 우발적인 수정을 막기 위한 소프트웨어 보호 기술이었다.
라인 번호는 0에서 65520까지 가능하며, 몇 자리에 상관없이 저장하는 데 5바이트가 소요되지만, 자릿수가 적을수록 실행 속도는 빨라진다. 한 줄에 여러 문장을 넣으면 메모리 사용량이 줄어들고 실행 속도가 빨라진다.
코모도어 베이직 기술적 세부 사항
GOTO 및 GOSUB 문은 순방향 점프가 수행되는 경우 현재 라인에서 아래쪽으로 라인 번호를 검색하고, 역방향 점프의 경우 프로그램 시작으로 돌아가 검색을 시작한다. 이로 인해 큰 프로그램은 느려지므로, 자주 사용되는 서브루틴을 프로그램 시작 부분 가까이에 배치하는 것이 좋다.
변수 이름은 처음 2자만 유효하다. 따라서 변수 이름 VARIABLE1, VARIABLE2, VA는 모두 같은 변수를 지칭한다.
코모도어 베이직은 또한 (두 바이트, 부호 있는, 2의 보수) 비트 연산자 — NOT, AND, OR를 지원한다. 이 기능은 마이크로소프트 6502 베이직 코드의 핵심 부분이었지만, 애플소프트 베이직과 같은 다른 구현에서는 일반적으로 생략되었다.
코모도어 베이직 기술적 세부 사항
코모도어 베이직의 기본 숫자 형식은 부모인 MS 베이직과 마찬가지로 부동 소수점이었다. 대부분의 동시대 베이직 구현은 특성(지수)에 1바이트, 가수에 3바이트를 사용했다. 3바이트 가수를 사용하는 부동 소수점 숫자의 정밀도는 약 6.510진수에 불과하며, 반올림 오류가 흔히 발생한다. 마이크로소프트 베이직의 6502 구현은 40비트 부동 소수점 산술을 사용했는데, 이는 BASIC-80의 32비트 부동 소수점과 달리 변수가 5바이트(가수 4바이트, 지수 1바이트)를 저장했다는 의미이다.
8080/Z80 마이크로소프트 베이직 구현은 정수 및 배정밀도 변수를 지원했지만, 6502 구현은 부동 소수점만 지원했다.
코모도어 베이직 기술적 세부 사항
코모도어 베이직은 퍼센트 기호로 표시되는 −32768에서 32767 범위의 부호 있는 정수 변수를 지원하지만, 실제로는 배열 변수에만 사용되며 각 배열 요소를 2바이트로 제한하여 메모리를 절약하는 기능을 수행한다 (2000개 요소의 배열은 부동 소수점 배열로 선언하면 10,000바이트를 차지하지만, 정수 배열로 선언하면 4000바이트만 차지한다). 어떤 변수든 정수로 지정하면 베이직이 이를 다시 부동 소수점으로 변환하여 프로그램 실행 속도를 늦추고 각 퍼센트 기호가 추가로 1바이트를 저장하는 데 필요하므로 메모리를 낭비한다 (이는 정수 배열에도 적용되므로, 프로그래머는 매우 큰 배열이 부동 소수점으로 저장될 경우 사용 가능한 메모리를 초과하지 않는 한 사용을 피해야 한다). 또한, 주소가 부호 있는 정수로 정의된 경우 32767 이상의 메모리 위치를 POKE하거나 PEEK할 수 없다.
마침표(.)는 숫자 0 대신 사용될 수 있으며 (따라서 10 A=0 대신 10 A=. 또는 10 FOR A=0 to 100 대신 10 FOR A=. TO 100), 이는 약간 더 빠르게 실행된다.
코모도어 베이직 기술적 세부 사항
USR 함수만을 통해 기계어 루틴을 호출하는 원래 마이크로소프트 베이직 코드에는 없었던 기계어 프로그램을 시작하는 데 사용되는 SYS 문은 코모도어에 의해 추가되었다. 이 명령은 CPU의 레지스터를 자동으로 $30C-$30F (C64, 다른 기기에서는 다름)에 있는 값으로 로드한다. 이는 기계어 루틴에 데이터를 전달하거나 베이직에서 커널 함수를 호출하는 수단으로 사용될 수 있다 (예를 들어, POKE 780,147:SYS 65490는 화면을 지운다).
C128을 제외한 코모도어 8비트 기기는 디스크 소프트웨어를 자동으로 부팅할 수 없으므로, 프로그램 실행을 시작하기 위해 10 SYS 2048와 같은 베이직 스텁을 포함하는 것이 일반적인 기술이다. 로드 후 소프트웨어를 자동으로 시작하고 사용자가 RUN 문을 입력할 필요가 없도록 하는 것도 가능하다. 이는 $0302에서 베이직 "ready" 벡터를 후킹하는 코드를 가짐으로써 수행된다.
다른 대부분의 마이크로소프트 베이직 버전과 마찬가지로, 배열이 DIM 문으로 선언되지 않으면 자동으로 10개 요소(실제로는 배열 요소가 0부터 세므로 11개)로 설정된다. 더 큰 배열은 선언되어야 하며, 그렇지 않으면 프로그램 실행 시 베이직이 오류를 표시하며, 모든 변수가 CLR 문을 통해 지워지지 않는 한 프로그램 내에서 배열을 재정의할 수 없다. 숫자 배열은 생성될 때 자동으로 0으로 채워지며, 큰 배열이 정의되면 프로그램 실행에 일시적인 지연이 발생할 수 있다.
문자열 변수는 변수 이름에 달러 기호를 붙여 표현된다. 따라서 변수 AA$, AA, AA%는 각각 별개의 것으로 이해된다. 배열 변수도 단순 변수와 구별되며, 따라서 A와 A(1)는 같은 변수를 참조하지 않는다. 문자열 배열의 크기는 배열에 저장된 문자열의 개수를 의미할 뿐, 동적으로 할당되는 각 요소의 크기는 아니다. 일부 다른 마이크로소프트 베이직 구현과 달리, 코모도어 베이직은 프로그램 시작 시 문자열 공간을 예약할 필요가 없다.
애플 II와 같은 다른 8비트 기기와 달리, 코모도어 기기들은 모두 전원 켜는 시점에 0으로 초기화되고 PIA/VIA/TED/CIA 타이머의 각 틱마다 초당 60회 업데이트되는 내장 시계를 가지고 있다. 이는 베이직에서 TI와 TI$라는 두 개의 시스템 변수에 할당되며, 둘 다 현재 시간을 포함한다. TI는 읽기 전용이며 수정할 수 없다; 수정하려고 하면 구문 오류 메시지가 표시된다. TI$는 6자리 숫자 문자열을 통해 시간을 설정하는 데 사용될 수 있다 (6자리 숫자가 아닌 문자열을 사용하면 오류가 발생한다). 시계는 일부 커널 루틴에 의해 인터럽트가 꺼질 때마다 멈추고 IEC (또는 PET의 IEEE 포트) 포트에 접근하면 시계 업데이트가 몇 틱 느려지므로, 시간 기록에 매우 신뢰할 수 있는 방법은 아니다.
코모도어 베이직의 RND 함수는 시계를 사용하여 난수를 생성할 수 있다. 이는 RND(0)을 통해 이루어지지만, 0에서 255 사이의 숫자만 반환되므로 활용도가 상대적으로 제한적이다. 그 외에는 RND는 다른 마이크로소프트 베이직 구현과 동일하게 작동하는데, C64의 메모리 위치 $8B-$8F에 전원 켤 때 저장된 고정된 5바이트 시드 값을 통해 의사 난수 시퀀스를 사용한다 (위치는 다른 기기마다 다르다). 0보다 큰 어떤 숫자와 함께 RND를 사용하면 RND 함수에 포함된 값과 현재 시드 값을 합쳐서 난수를 생성하며, 시드 값은 RND 함수가 실행될 때마다 1씩 업데이트된다. 음수와 함께 RND를 사용하면 숫자로 지정된 현재 시드 값의 시퀀스 내 특정 지점으로 이동한다.
RND 문으로는 진정한 난수 생성이 불가능하므로, C64 및 C128에서는 SID 칩의 화이트 노이즈 채널을 난수 생성에 활용하는 것이 더 일반적이다.
베이직 2.0은 문자열의 매우 느린 가비지 컬렉션으로 악명이 높았다. 가비지 컬렉션은 FRE 함수가 실행될 때마다 자동으로 호출되며, 프로그램 실행 과정에서 많은 문자열 변수와 배열이 조작되었다면, 최악의 조건에서 이들을 정리하는 데 한 시간 이상이 걸릴 수 있다. 또한, 베이직은 이 루틴을 수행하는 동안 RUN/STOP 키를 스캔하지 않으므로 가비지 컬렉션을 중단하는 것도 불가능하다. 베이직 4.0은 백 포인터가 있는 개선된 가비지 컬렉션 시스템을 도입했으며, 이후의 모든 코모도어 베이직 구현도 이를 포함한다.
베이직 2.0의 FRE 함수는 32768을 초과하는 부호 있는 숫자를 처리할 수 없는 또 다른 기술적 결함을 겪었다. 따라서 C64(38k 베이직 메모리)에서 이 함수를 호출하면 음수 크기의 여유 베이직 메모리가 표시되었다 (보고된 숫자에 65535를 더하면 정확한 여유 메모리 양을 얻을 수 있다). PET와 VIC-20은 베이직에서 사용할 수 있는 총 메모리가 32k를 넘지 않았으므로, 이 제한은 C64가 개발될 때까지 명확히 드러나지 않았다. 베이직 3.5 및 7.0의 FRE 함수는 이 문제를 수정했으며, 베이직 7.0의 FRE는 또한 두 가지 기능으로 "분할"되었다. 하나는 여유 베이직 프로그램 텍스트 메모리를 표시하고, 다른 하나는 여유 변수 메모리를 표시했다.
코모도어 베이직 대안
코모도어 64는 기본 베이직 2.0의 기능이 상대적으로 제한적이었기 때문에 많은 베이직 확장팩이 출시되었다. 가장 인기 있는 확장팩 중 하나는 코모도어 1541 테스트/데모 디스크에 포함된 DOS 웨지였다. 이 1KB 확장팩은 메모리의 프로그램을 손상시키지 않고 디스크 디렉토리를 읽는 기능을 포함하여 여러 디스크 관련 명령을 추가했다. 그 기능은 이후 인기 있는 Epyx FastLoad 카트리지와 같은 다양한 서드파티 확장팩에 통합되었다. 다른 베이직 확장팩은 사이먼 베이직 (1983) 및 비전 베이직 (2022)과 같이 스프라이트, 사운드, 고해상도 그래픽을 더 쉽게 코딩할 수 있도록 추가 키워드를 추가했다.
베이직 2.0의 사운드 또는 그래픽 기능 부족이 많은 사용자에게는 실망스러웠지만, 일부 비평가는 궁극적으로 사용자에게 기계어를 배우도록 강요했기 때문에 유익했다고 주장했다.
코모도어 베이직 대안
C64의 베이직 2.0의 한계로 인해 베이직에서 내장 ROM 기계어를 사용하게 되었다. 지정된 메모리 위치에 파일을 로드하려면, 파일 이름, 드라이브, 장치 번호가 호출에 의해 읽혀진다: SYS57812"filename",8; 위치는 X 및 Y 레지스터에 지정된다: POKE780,0:POKE781,0:POKE782,192; 그리고 로드 루틴이 호출된다: SYS65493.
C64용 디스크 매거진인 로드스타는 취미 프로그래머들을 위한 장소였으며, 그들은 SYS address + offset 명령으로 호출되는 베이직용 프로토-명령어 모음을 공유했다.
코모도어 베이직 대안
현대 프로그래밍 관점에서, 코모도어 베이직의 초기 버전은 프로그래머에게 많은 나쁜 프로그래밍 함정을 제공했다. 이러한 문제의 대부분은 마이크로소프트 베이직에서 파생되었으므로, 당시의 거의 모든 가정용 컴퓨터 베이직이 유사한 결함을 겪었다. 마이크로소프트 베이직 프로그램의 모든 라인에는 프로그래머가 줄 번호를 할당했다. 프로그램 편집 또는 디버깅 중 라인을 쉽게 삽입할 수 있도록 숫자를 일정 값(5, 10 또는 100)으로 증분하는 것이 일반적인 관행이었지만, 잘못된 계획은 프로그램에 큰 섹션을 삽입할 때 전체 코드를 재구성해야 하는 경우가 많다는 것을 의미했다. 일반적인 기술은 낮은 줄 번호에서 ON...GOSUB 점프 테이블로 프로그램을 시작하고, 프로그램 본문은 1000, 2000 등과 같은 지정된 줄 번호로 시작하는 섹션으로 구성하는 것이었다. 큰 섹션을 추가해야 하는 경우, 다음 사용 가능한 주요 줄 번호를 할당하고 점프 테이블에 삽입할 수 있었다.
게다가 모든 변수는 전역 변수로 취급된다. FOR...NEXT 구문 이상의 명확하게 정의된 루프는 만들기가 어려워, 종종 프로그래머가 GOTO 명령에 의존하게 만들었다 (이는 나중에 베이직 3.5에서 DO, LOOP, WHILE, UNTIL 및 EXIT 명령이 추가되면서 수정되었다). 특정 작업을 수행하기 위해 플래그 변수를 생성해야 하는 경우가 많았다.
코모도어 및 기타 플랫폼의 후기 베이직 버전에는 DELETE 및 RENUMBER 명령과 선택된 증분에 따라 라인 번호를 자동으로 선택하고 삽입하는 AUTO 라인 번호 지정 명령이 포함되었다. 코모도어의 초기 베이직은 디버깅 명령도 부족하여 버그와 사용되지 않는 변수를 찾아내기 어려웠다. Z80 마이크로소프트 베이직의 표준 부분이었던 IF...THEN...ELSE 구조는 코모도어 베이직의 이전 버전에서는 사용할 수 없었다가 베이직 3.5에 추가되었다.
코모도어 베이직 사용자 인터페이스로서의 활용
다른 가정용 컴퓨터와 마찬가지로, 코모도어의 기기들은 베이직 인터프리터로 직접 부팅되었다. 베이직의 파일 및 프로그래밍 명령은 직접 모드로 입력하여 소프트웨어를 로드하고 실행할 수 있었다. RUN/STOP 키를 사용하여 프로그램 실행이 중단되면, 변수 값은 RAM에 보존되었고 디버깅을 위해 PRINT할 수 있었다. 128은 심지어 두 번째 64k 뱅크를 변수 저장 공간으로 할당하여, `NEW` 또는 `RUN` 명령이 발행될 때까지 값이 유지되도록 했다. 이는 코모도어 베이직에 포함된 고급 화면 편집기와 함께 프로그래밍 환경에 REPL과 유사한 느낌을 주었다. 프로그래머는 화면의 어느 위치에서든 프로그램 라인을 삽입하고 편집하며, 대화식으로 프로그램을 구축할 수 있었다. 이는 당시의 CP/M이나 MS-DOS와 같이 일반적으로 명령줄 인터페이스로 부팅되던 비즈니스 지향 운영 체제와 대조된다. 이러한 플랫폼에서 프로그래밍 언어가 필요한 경우, 별도로 로드해야 했다.
코모도어 베이직 사용자 인터페이스로서의 활용
코모도어 베이직의 일부 버전에는 디스크별 `DLOAD` 및 `DSAVE` 명령이 포함되어 있었지만, 코모도어 64에 내장된 버전에는 이러한 기능이 없었다. 이는 사용자가 표준 `LOAD` 명령에 디스크 드라이브의 장치 번호 (일반적으로 8 또는 9)를 지정해야 했으며, 그렇지 않으면 기본적으로 테이프로 설정되었다. 코모도어 64의 베이직 2.0에서 또 다른 누락은 메인 메모리를 지우지 않고 디스크 내용을 표시하는 `DIRECTORY` 명령이었다. 64에서는 디스크의 파일을 보는 것이 "프로그램"을 로드하는 방식으로 구현되었는데, 이 프로그램은 목록화될 때 디렉토리를 라인 번호로 파일의 블록 크기를 가진 의사 베이직 프로그램으로 표시했다. 이는 현재 로드된 프로그램을 덮어쓰는 효과를 가졌다. DOS 웨지와 같은 추가 기능은 디렉토리 목록을 화면 메모리에 직접 렌더링함으로써 이를 극복했다.
코모도어 베이직 버전 및 기능
CBM 베이직 버전 목록을 시간 순서대로 나열하며, 점진적으로 추가된 기능은 다음과 같다.
V4+: CBM-II 시리즈 (일명 B, P 범위)
메모리 관리: BANK
더 많은 디스크 작업: BLOAD, BSAVE,DCLEAR
서식 있는 인쇄: PRINT USING,PUDEF
오류 트래핑: DISPOSE
대체 분기: ELSE
동적 오류 처리: TRAP,RESUME,ERR$()
유연한 DATA 읽기: `RESTORE [line number]`
문자열 검색 함수: INSTR
V3.5: C16/116, 플러스/4
사운드 및 그래픽 명령
조이스틱 입력: JOY
십진법 ↔ 십육진법 변환: DEC(),HEX$()
구조화된 루핑: DO,LOOP,WHILE,UNTIL,EXIT
기능 키 할당: KEY (직접 모드도 가능)
프로그램 입력/편집: AUTO,DELETE,RENUMBER
디버그 (추적): TRON, TROFF
MLM 입력 명령: MONITOR
C(1)16, 플러스/4 이스터 에그 – SYS 52650 입력
코모도어 베이직 버전 및 기능
V7.0: C128
스프라이트 처리를 포함한 더 많은 사운드 및 그래픽 명령
내장 스프라이트 편집기: SPRDEF
IF THEN ELSE 구조를 위한 다중 문장 블록: BEGIN,BEND
패들, 라이트펜 입력: POT,PEN
배타적 OR 함수: XOR
변수 주소 가져오기: POINTER
텍스트 모드 창: WINDOW
제어된 시간 지연: SLEEP
메모리 관리: SWAP,FETCH,STASH,FRE(1)
128의 뱅크 전환을 사용하여 프로그램 코드를 변수와 별도로 저장했다. 프로그램이 GOTO 명령으로 시작되면 변수 값은 프로그램 실행 전반에 걸쳐 유지되었다.
더 많은 디스크 작업: BOOT,DVERIFY
CPU 속도 조절: FAST,SLOW (2 vs 1 MHz)
C64 모드 진입: GO64
미정의, 작동: RREG (SYS 이후 CPU 레지스터 읽기)
미구현 명령: OFF,QUIT
C128 이스터 에그 – SYS 32800,123,45,6 입력
V10 : 코모도어 65 (미출시 프로토타입)
그래픽/비디오 명령: PALETTE,GENLOCK
마우스 입력: MOUSE,RMOUSE
텍스트 파일 (SEQ) 유틸리티: TYPE
프로그램 편집: FIND,CHANGE
메모리 관리: DMA,FRE(2)
미구현 명령: PAINT,LOCATE,SCALE,WIDTH,SET,VIEWPORT,PASTE,CUT
카차마크
카차마크(마케도니아어·불가리아어·세르비아어: качамак) 또는 푸라(보스니아어·크로아티아어: pura)는 서아시아와 동남유럽 일부 지역에서 만들어지는 옥수수 포리지의 일종이다. 이름은 튀르키예어 kaçamak에서 유래되었으며, '도피'를 의미한다.