경고 : 최신판이 아닙니다. 이 문서의 오래된 판을 편집하고 있습니다. 이것을 저장하면, 이 판 이후로 바뀐 모든 편집이 사라집니다. 로그인하고 있지 않습니다. 편집하면 당신의 IP 주소가 공개적으로 기록됩니다. 계정을 만들고 로그인하면 편집 시 사용자 이름만 보이며, 위키 이용에 여러 가지 편의가 주어집니다.스팸 방지 검사입니다. 이것을 입력하지 마세요!이 문서에서는 C64 소프트웨어를 작성하는 방법에 대해서 알아보자. 이 문서를 끝까지 읽는 것만으로 당신도 C64 프로그래머! ==들어가기에 앞서== ===프로그래밍 언어=== C64는 두 가지 프로그래밍 언어를 지원한다. *기본 제공하는 [[BASIC]] **일단 배우기 쉽다. **특별히 보조 프로그램을 사용하지 않아도 C64에서 곧장 코딩이 가능. **프로그램 처리 속도는 아주 느리다. **메모리에 직접 접근할 일이 있을때 불편하다. *어셈블리어 **진입장벽이 높다. **메모리 맵, 인터럽트 등 고급 지식이 필요하다. **보조 프로그램을 사용하지 않으면 난이도가 비약적으로 상승. **메모리를 주물주물하고, 그래픽 칩, 인터럽트, 뭐든지 마음대로 접근할 수 있다. **속도가 BASIC보다 훨씬 빠르다. 서로 장단점이 있지만, 큰 프로그램을 작성하려면 결국은 어셈블리어를 사용하게 될 것이다. 컴퓨터 구조상 메모리에 직접 접근할 일이 무수히 발생하기 때문이다. 하지만 우리는 처음 시작하는 입장이니, BASIC부터 해 보도록 하자. ===에뮬레이터=== 혹시라도 C64 본체를 가지고 있는 {{ㅊ|부러운}} 사람에게는 미안하지만, 우리는 에뮬레이터를 가지고 코딩을 하기로 하자. 유명한 에뮬레이터로는 [http://www.ccs64.com/ CCS64], [http://vice-emu.sourceforge.net/ VICE], [http://www.c64forever.com/ C64 Forever] 등이 있는데, 여기서는 VICE를 사용하기로 하자. 홈페이지에서 다운로드 받을 수 있고, 포터블 버전이다. 32비트와 64비트 모두 지원한다. ==BASIC 프로그래밍== ===준비=== 다운로드한 에뮬레이터를 실행해 보자. x64.exe라는 파일이다. 아마 창이 하나 뜨면서, 아래 사진과 같은 보라색 화면이 나타날 것이다. [[파일:c64_ready.png]] 달랑 커서 하나만 깜빡이고 있지만, 이것이 c64의 메인 화면이고 앞으로 계속해서 보게 될 것이다. ====키보드==== C64는 특수문자를 많이 사용했는데, 이 녀석들은 키보드에 따로 배정되어 있거나 특수한 조합으로 입력할 수 있었다. 지금 우리가 쓰는 키보드에는 당연히 그런 키가 없기 때문에 에뮬레이터에서 키보드 위치에 맞게 적당히 넣어 두었다. 그런데 우리는 그 위치를 모르니 일일이 눌러 가면서 외워야만 한다! 이것은 정말 끔찍한 일이므로 이곳에 '널리 쓰이는' 키보드 맵을 실어 둔다. VICE와는 다를 수 있지만 자주 쓰는 키들은 동일하다. 만약 특수한 입력법이 필요한 경우에는 따로 적도록 하겠다. return 옆의 등호(=)는, 백슬래시(\)키에 배정되어 있다. [[파일:C64-keyboard-layout.png]] ===기본적인 것들=== ====[[Hello, World]]==== 늘 그렇듯, 맨 처음엔 Hello, World를 출력해보자. READY가 표시된 상태에서 다음을 입력하고 엔터를 누른다. <source lang="text"> PRINT"HELLO,WORLD!" </source> 그러면 HELLO,WORLD!가 출력된 후 READY가 다시 표시될 것이다. 잘 됐다면, 축하한다, 첫 C64 프로그램 작성에 성공했다! 비록 한 줄짜리 짧은 코드이지만 여기서도 여러 것들을 배울 수 있다. 먼저, 공백 문자를 전혀 쓰지 않았다는 데에 주목해 보자. 전부 띄어쓰기 없이 붙어 있다. 공백을 넣어도 제대로 작동되는 코드들도 있지만, 바로 에러를 뱉어내는 코드도 있다. 그러니 안 쓰는 쪽으로 통일하는 편이 낫다. 다른 이유로는 메모리 문제가 있다. 아무리 64KB의 메모리가 있더라도 우리가 직접 쓸 수 있는 메모리는 한정되어 있다. 그런데 우리가 적은 코드는 전부 메모리에 저장된다. 지금은 단 한 줄 짜리 코드였지만, 당신이 정말로 작정하고 프로그램을 짠다면 몇십 줄은 고사하고 몇백 줄을 짜게 될 것이다. 만약 그 코드가 메모리에 담기에는 너무 크다면... 앞쪽에 쓴 코드부터 지워지게 된다. 그렇다, 기껏 적은 프로그램이 없어져 버리는 것이다! 때문에 최대한 메모리 사용을 줄이려는 경향이 생겼고, 공백 문자는 1순위로 지워지는 신세가 됐다. 다음으로, READY에 대해 생각해 보자. 컴퓨터를 처음 켜면 READY가 표시되고, 명령을 다 실행해도 READY가 표시된다. 이 READY는 컴퓨터가 명령을 받을 준비가 되었다는 뜻이다. 이 말은, 당장 실행중인 프로그램이 없다는 말이다. 실행중인 프로그램이 없다면, 내가 방금 만든 한 줄짜리 프로그램은 어디로 가 버린 것일까? 영영 없어져 버린 것일까? ====줄 번호==== 안타깝게도, 방금 만든 'Hello, World!'는 사라져 버렸다. 그렇다, 영영 없어져 버렸다. 메모리에도 남아 있지 않고, 단지 화면 위에 남은 글자가 그런 프로그램이 실행된 적은 있었다고 알려 주고 있을 뿐이다. 왜 이런 일이 일어났을까? 바로 줄번호를 생략했기 때문이다. BASIC에서는 모든 코드 앞에 줄 번호를 붙인다. 이 줄 번호는 매 줄마다 붙는 꼬리표같은 것이다. 내 마음대로 설정해 줄 수 있는데, 1~63999까지 가능하다. 이 번호를 붙이지 않으면 여러 줄을 작성할 수조차 없다. 자, 이제 일회용으로 끝나지 않는 코드를 적어 보자. <source lang="text"> 10 PRINT"HELLO,WORLD!" RUN </source> 10번 라인을 적고 엔터를 치면, 명령이 실행되지 않고 커서가 아래로 넘어가는 것을 볼 수 있다. 다음 라인을 적을 수 있는 상태가 되는 것이다. 그리고 RUN을 적고 엔터를 치면 메모리에 올라간 모든 코드를 1번 라인부터 실행한다. 빈 라인은 모두 무시하기 때문에 번호는 맘대로 매기면 된다. 10부터 시작하든, 아니면 [[42]]나 [[키사라기 치하야|72]]부터 시작하든, 코드는 멀쩡히 실행된다. 실행이 끝나고 READY가 표시되면, 우리는 몇 번이고 상관 없이 RUN을 사용해서 프로그램을 또 실행할 수 있다. 메모리에 프로그램이 남아 있기 때문이다. 그러면 메모리에 프로그램이 남아 있다는 걸 어떻게 확인할 수 있을까? READY가 표시된 상태에서 LIST를 적고 엔터를 쳐 보자. 조금 전에 우리가 작성한 코드를, 줄 번호를 포함해서 보여줄 것이다. ====코드 수정하기==== 이번엔 "HELLO,WORLD!"를 다른 글자로 바꿔보자. 예를 들면, "LIBRE WIKI"로 바꿔 보도록 하자. 그런데, 우리가 조금 전에 작성한 코드를 어떻게 수정할 수 있을까? 그 코드는 메모리 속에 들어 있는데 말이다. 우리는 메모리 주소도 모르고, 단지 그 코드의 줄 번호만 LIST 명령어로 볼 수 있다. 그렇다면 줄 번호만 가지고 코드를 수정할 수 있어야 하지 않을까? 그렇다, 우리는 줄 번호만 알면 수정할 수 있다. 이미 작성된 줄 번호를 다시 적기 시작하면, 이전 내용은 사라지고 새 내용이 쓰인다. 아래 내용을 적고 실행해 보자. <source lang="text"> 10 PRINT"LIBRE WIKI" RUN </source> HELLO,WORLD는 없어지고 LIBRE WIKI가 표시되는 것을 볼 수 있다. LIST로 코드를 봐도 HELLO, WORLD는 없다. 같은 줄 번호라서 덮어쓰기 된 것이다. 만약 같은 줄 번호를 적고 내용은 아무것도 적지 않으면, 빈 줄이 되고 실행할 때 없는 줄 취급된다. 그러면 새 프로그램을 적기 위해서 코드를 전부 지우려면 모든 줄 번호를 일일이 빈 줄로 만들어야 한다는 말인가? 그건 너무 가혹하다. 그래서 간단히 메모리의 프로그램을 지울 수 있는 명령어가 존재한다. NEW를 적고 엔터를 쳐 보자. RUN을 해도, LIST를 해도 아무것도 안 나온다는 것을 알 수 있다. 메모리의 프로그램이 지워진 것이다. 요약: 리브레 위키에서의 모든 기여는 크리에이티브 커먼즈 저작자표시-동일조건변경허락 3.0 라이선스로 배포됩니다(자세한 내용에 대해서는 리브레 위키:저작권 문서를 읽어주세요). 만약 여기에 동의하지 않는다면 문서를 저장하지 말아 주세요. 글이 직접 작성되었거나 호환되는 라이선스인지 확인해주세요. 리그베다 위키, 나무위키, 오리위키, 구스위키, 디시위키 및 CCL 미적용 사이트 등에서 글을 가져오실 때는 본인이 문서의 유일한 기여자여야 하고, 만약 본인이 문서의 유일한 기여자라는 증거가 없다면 그 문서는 불시에 삭제될 수 있습니다. 취소 편집 도움말 (새 창에서 열림) | () [] [[]] {{}} {{{}}} · <!-- --> · [[분류:]] · [[파일:]] · [[미디어:]] · #넘겨주기 [[]] · {{ㅊ|}} · <onlyinclude></onlyinclude> · <includeonly></includeonly> · <noinclude></noinclude> · <br /> · <ref></ref> · {{각주}} · {|class="wikitable" · |- · rowspan=""| · colspan=""| · |} {{lang|}} · {{llang||}} · {{인용문|}} · {{인용문2|}} · {{유튜브|}} · {{다음팟|}} · {{니코|}} · {{토막글}} {{삭제|}} · {{특정판삭제|}}(이유를 적지 않을 경우 기각될 가능성이 높습니다. 반드시 이유를 적어주세요.) {{#expr:}} · {{#if:}} · {{#ifeq:}} · {{#iferror:}} · {{#ifexist:}} · {{#switch:}} · {{#time:}} · {{#timel:}} · {{#titleparts:}} __NOTOC__ · __FORCETOC__ · __TOC__ · {{PAGENAME}} · {{SITENAME}} · {{localurl:}} · {{fullurl:}} · {{ns:}} –(대시) ‘’(작은따옴표) “”(큰따옴표) ·(가운뎃점) …(말줄임표) ‽(물음느낌표) 〈〉(홑화살괄호) 《》(겹화살괄호) ± − × ÷ ≈ ≠ ∓ ≤ ≥ ∞ ¬ ¹ ² ³ ⁿ ¼ ½ ¾ § € £ ₩ ¥ ¢ † ‡ • ← → ↔ ‰ °C µ(마이크로) Å °(도) ′(분) ″(초) Α α Β β Γ γ Δ δ Ε ε Ζ ζ Η η Θ θ Ι ι Κ κ Λ λ Μ μ(뮤) Ν ν Ξ ξ Ο ο Π π Ρ ρ Σ σ ς Τ τ Υ υ Φ φ Χ χ Ψ ψ Ω ω · Ά ά Έ έ Ή ή Ί ί Ό ό Ύ ύ Ώ ώ · Ϊ ϊ Ϋ ϋ · ΐ ΰ Æ æ Đ(D with stroke) đ Ð(eth) ð ı Ł ł Ø ø Œ œ ß Þ þ · Á á Ć ć É é Í í Ĺ ĺ Ḿ ḿ Ń ń Ó ó Ŕ ŕ Ś ś Ú ú Ý ý Ź ź · À à È è Ì ì Ǹ ǹ Ò ò Ù ù · İ Ż ż ·  â Ĉ ĉ Ê ê Ĝ ĝ Ĥ ĥ Î î Ĵ ĵ Ô ô Ŝ ŝ Û û · Ä ä Ë ë Ï ï Ö ö Ü ü Ÿ ÿ · ǘ ǜ ǚ ǖ · caron/háček: Ǎ ǎ Č č Ď ď Ě ě Ǐ ǐ Ľ ľ Ň ň Ǒ ǒ Ř ř Š š Ť ť Ǔ ǔ Ž ž · breve: Ă ă Ğ ğ Ŏ ŏ Ŭ ŭ · Ā ā Ē ē Ī ī Ō ō Ū ū · à ã Ñ ñ Õ õ · Å å Ů ů · Ą ą Ę ę · Ç ç Ş ş Ţ ţ · Ő ő Ű ű · Ș ș Ț ț 이 문서에서 사용한 틀: 틀:ㅊ (원본 보기) (준보호됨)틀:취소선 (원본 보기) (준보호됨)틀:키 (원본 보기) (준보호됨)