2016년 6월 30일 목요일

[NES 개발번역] 프로그래밍 기초

프로그래밍 기초

연산코드와 연산자들

To be written.

레지스터

To be written.

스택

Main article: Stack

수학 연산

단일 연산

덧셈과 뺄셈

To be written.

비트 (2개의 인자) 곱셈과 나눗셈

A에 2를 곱하려면, ASL A 명령을 사용한다.
A에 2를 나누려면, LSR A 명령을 사용한다.
To be written.

복합 연산

임의의 숫자에 대한 곱셈

다음의 루틴은 부호없는 16-비트 숫자 2개를 곱하여, 부호없는 32-bit 값을 반환한다.
mulplr = $c0  ; ZP location = $c0
partial = mulplr+2 ; ZP location = $c2
mulcnd = partial+2 ; ZP location = $c4

_usmul:
  pha
  tya
  pha

_usmul_1:
  ldy #$10 ; Setup for 16-bit multiply
_usmul_2:
  lda mulplr ; Is low order bit set?
  lsr a
  bcc _usmul_4

  clc  ; Low order bit set -- add mulcnd to partial product
  lda partial
  adc mulcnd
  sta partial
  lda partial+1
  adc mulcnd+1
  sta partial+1
;
; Shift result into mulplr and get the next bit of the multiplier into the low order bit of mulplr.
;
_usmul_4:
  ror partial+1
  ror partial
  ror mulplr+1
  ror mulplr
  dey
  bne _usmul_2
  pla
  tay
  pla
  rts
위의 예제는 340*268 를 곱하는 동작 시 _usmul 루틴을 사용한 것이다:
  lda #<340 16-bit="" 340="" byte="" decimal="" lda="" low="" mulplr="" of="" sta="" value:="" value="">340 ; High byte of 16-bit decimal value 340 (value: $01) (makes $0154)
  sta mulplr+1
  lda #<268 16-bit="" 268="" byte="" decimal="" lda="" low="" mulcnd="" of="" sta="" value:="" value="">268 ; High byte of 16-bit decimal value 268 (value: $01) (makes $010C)
  sta mulcnd+1
  lda #0  ; Must be set to zero (0)!
  sta partial
  sta partial+1
  jsr _usmul ; Perform multiplication
;
; RESULTS
;    mulplr    = Low byte of lower word  (bits 0 through 7)
;    mulplr+1  = High byte of lower word (bits 8 through 15)
;    partial   = Low byte of upper word  (bits 16 through 23)
;    partial+1 = High byte of upper word (bits 24 through 31)
;

임의 숫자의 나눗셈

To be written.

부동 소숫점 숫자

To be written.

게임에서: 점수 기록

To be written.
만약 2진수로 점수를 기록한다면, 표시전에 10진수로 변경하는 과정을 거쳐야 한다.  16-비트 BCD 의 기사는 이것을 수행하는 서브루틴을 나열한다.

단순한 소리 만들기

To be written.

컨트롤러 입력

To be written.

Graphics (should be covered elsewhere!)

"Hello, world!" 프로그램

NES는 printf()(또는 스크립트 등의 echo 명령어) 같이 쉽게 수행 할 수 없기에, 코드를 시험해 볼 가장 쉬운 방법중 하나는 소리를 출력해 보는 것이다. 일부 줄은 다음과 같다...
reset:
  lda #$01 ; square 1
  sta $4015
  lda #$08 ; period low
  sta $4002
  lda #$02 ; period high
  sta $4003
  lda #$bf ; volume
  sta $4000
forever:
  jmp forever

2016년 6월 29일 수요일

[NES 개발번역] CC65 설치

CC65 설치 

어셈블러는 소스 코드의 언어를 기계어 코드로 조립하여 번역하는 프로그램이다. 보통 6502 CPU 용인 기계어 코드를 만드는데 사용되는 어셈블러는 CC65 패키지의 일부에서 배포되는 CA65이다. 이 지침에서는 설치 방법과 CA65를 윈도우즈 2000 이나 윈도우즈 XP에서 구동하는 방법을 알려준다.

윈도우즈 구성

윈도우즈는 윈도우즈 탐색기에서 파일 확장자를 숨겨서 보여준다. 이 형편없는 기능은 원래 윈도우즈 95를 파일 확장자를 사용하지 않는 Mac OS 7.5 처럼 보이게 하려고 만든 기능이다. 하지만 숨김 기능은 실수로 파일 확장자 명이 두 개가 되기 쉽게 만든다. 더 나쁜건, ILOVEYOU 웜 바이러스 같은 악질 소프트웨어가 두 개의 확장자를 갖고 있다는 것이다: 하나는 운영체제에서 실행가능한 파일을 가리키고 나머지 하나는 그 파일이 실행 할 수 없다(그래서 안전하다)라고 사용자에게 생각하게 만든다. 우리가 우선 할 것은 윈도우즈 탐색기에서 파일 확장자를 표시하기를 해주는 것이다 (역주: 이하 번역 안할란다.. 이 쉬운걸 굳이..):
  1. Open Control Panel. (This may be in Start > Control Panel or Start > Settings > Control Panel.)
  2. In Windows XP, if "Pick a category" shows up at top center of the window, click "Switch to Classic View".
  3. Open Folder Options and activate the View pane.
  4. In the scrolling list of Advanced Options, turn make sure that "Hide extensions for known file types" is not checked.
  5. Press OK to put the change into effect.

7-Zip 구성

Windows 2000 does not come with software to extract files from PKZIP archives. Windows XP comes with a bare-bones archiver called Compressed Folders that can only handle PKZIP archives (.zip), not rar or 7z or tar or gz or bz2 files. The 7-Zip package can extract files from all of them, as well as add files to PKZIP and 7-Zip archives.

CC65 내려받기

  1. Read the front page of CC65's web site.
  2. Scroll down to "Download". At the bottom of this section is a list of mirrors.
  3. Enter one of the mirrors, and download the cc65-win32-#####.zip and cc65-doc-#####.zip packages to your computer. (The ##### represents a version number, such as 2.11.0-1, which may change before you read this.) The cc65-win32 contains the CC65 package compiled for Windows, and cc65-doc contains the manual.
  4. Extract cc65-win32-#####.zip to a new folder.
  5. Open this folder and run the install.vbs file as an administrator to copy it to Program Files.
  6. Delete this folder.
Log out and log in to complete installation.

우분투(리눅스) 에서 CC65 빌드

Absolute easiest method:
Set up you repository there as it says on the homepage. Using software sources and import the gpg key. or add: deb http://debian.trikaliotis.net/ stable contrib to your software sources list.
Download: KeyFile add to authentication sources.
Then: sudo apt-get install cc65
Done.! Enjoy.
//------------------
Note: I'll add a link to the compile.txt in the docs at the cc65 site later. Note2: I must be really tired, I never even thought of just modifying the makefile. Note2: Ignore "Method 2". And I'll clean this up in the morning. Note3: If enough people want it and tell me so on the userpage, I'd be more than willing to upload a package somewhere.

Unzip the source, move that top-level folder somewhere; I just dragged it from the archive onto the Desktop. Open a terminal and get to your Desktop folder (or where ever you put it):
$ cd cc65-VERSION/make $ make -f make/gcc.mak
Now once that finishes, rename gcc.mak to makefile, then open it, and remove the text "make/" from line 37. If you don't want a particular executable installed (and also packaged), on line 134, remove the name of the program. If you're programming for the NES, chances are you don't need the C compiler, so you'd remove "cc65". Next, you'll need to rename the top-level make folder to the name of its parent folder, as checkinstall will otherwise use "make" as the name of the package. I did this by accident, and it took me a whole 15 minutes to force the reinstallation of the make utility and make sure the spurious/incorrectly named cc65 package was removed. After you remove the top-level make to the same as the parent, enter that newly renamed folder and run "sudo checkinstall". Give it a nice descriptive name, modify any other items you feel like, and hit enter. It should do its thing, install the program, and output a .deb package into the folder.
I did not use this method, so attempt it carefully. I used the below method which doesn't modify any files but it does copy the ENTIRE directory tree into itself, along with some more complex directory/file renaming.
METHOD 2
Replace VERSION with the rest of the folder name after "cc65-". It doesn't take long to make the entire suite of programs. After you've built it, you could probably install by just saying "make -f make/gcc.mak install", and perhaps you'll want to (I didn't try this). Others, such as myself, want to make sure it can be removed. For this, we use the checkinstall program. The problem is, the installation runs a script file with a hardcoded path from the main directory to place each executable. While you could play with the makefile, I had success with a somewhat more hackish solution:
Rename the make directory to the same thing as the top level cc65 directory. Then, enter the directory you just renamed and create a folder called make. Put a copy of install-sh into this new make folder. Now copy all the folders except the recently renamed one INTO the recently renamed one. Then, rename gcc.mak to makefile and run "sudo checkinstall" from the directory that has makefile in it (Desktop/cc65-2.10.1/cc65-2.10.1 for example).

[NES 개발번역] 기초 전에

원문 

http://wiki.nesdev.com/w/index.php/Before_the_basics 


기초 전에

배경지식

PC나 NES 같은 디지털 컴퓨터는  켜고 끌 수 있는 수백만개의 작은 스위치들로 채워져 있다.
어떤 스위치들은 짧게 정보를 저장한다; 이것들을 메모리라고 한다. 다른 스위치들은 다른 스위치들의 결과물에 기반한 것으로 연산을 한다; 이것들을 논리(logic)라고 한다. 각각의 스위치들은 켜거나 끔으로서, 참과 거짓 또는 1 또는 0의 숫자를 표현할 수 있다. 여러개가 묶인 스위치들은 더 큰 값을 표현 할 수 있다. 한개의 CPU는 메모리에서 기계어 코드를 읽어서 메모리 안의 다른 값들이나 입출력에 동작하기 위해 산술적이고 논리적 동작을 실행하기 위한 지침으로 처리한다. 몇몇 입출력은 사용자와의 상호작용과 연관이된다: 사용자는 컴퓨터에게 명령들을 내리고, 컴퓨터는 결과를 표시한다.
헷갈리겠지만, 지금이 컴퓨터 공학과 컴퓨터 과학에 대한 기본 개념과 친해질 기회이다. 이 기사는 영문 위키피디아에서 가져왔거, 다른 언어로 여러번 번역 되었다.

NES 소개

닌텐도 엔터테인먼트 시스템은 다음의 구성요소들을 갖고 있다:
  • Ricoh사 2A03 CPU IC
    • MOS 테크놀러지 6502 8-비트 마이크로프로세서 에 기반한 CPU
    • 게임 컨트롤러를 위한 직렬 입력
    • 오디오 출력은 4개의 톤 생성기와 델타 조정 재생 장치 포함
  • CPU는 2 킬로바이트의 RAM을 사용
  • 2C02 PPU (picture processing unit 화상 처리 장치)
    • 타일에 기반한 배경 이미지
    • 64 개의 스프라이트 (개별로 움직이는 객체)
    • 53개 중 25개의 색상
    • 256x240 픽셀 프로그레시브 화상 생성기
    • NTSC 색상 인코더
  • PPU는 2 킬로바이트의 RAM을 사용
카트리지들은 다음의 구성요소들을 갖고 있다:
  • CPU는 16 킬로바이트 또는 그 이상의 PRG ROM이 사용함
  • PPU(어떤 경우엔 CPU)는 8 킬로바이트 또는 그 이상의 CHR ROM 또는 CHR RAM을 사용함
  • (부가적으로) ROM을 위한 뱅크 교환 하드웨어
  • (부가적으로) 인터럽트 생성을 위한 논리(Logic)

External links

[NES 개발번역] NES 프로그래밍 안내

언젠간 NES 게임 만들어 보겠다는 다짐으로 번역 시작..


원문 : 



프로그래밍 안내
이 프로그래밍 안내는 NES reference guide 를 보충하는 내용이다. 특정 주제에 대한 더 심도있는 문서나, 만나게되는 대부분의 문제에 대한 안내, 개발 단계에서 사용할 수 있는 개발 도구들의 목록 등을 찾을 수 있다. NES 개발을 처음 한다면, "Getting started" 항목을 먼저 둘러봐야 할 것이다.

Getting started

General reference

Tutorials

Libraries and samples

Reverse engineered techniques

Useful reference materials

Books

  • Cady, Fredrick M. (1997). Microcontrollers and Microcomputers: Principles of Software and Hardware Engineering. New York: Oxford University Press. ISBN 0-19-511008-0.
  • Eyes, David; Lichty, Ron (1986). Programming the 65816 including the 6502, 65C02, and 65802. New York: Brady Books/Prentice Hall Press (Simon & Schuster, Inc). ISBN 0-89303-789-3.
  • Fernandez, Judi N. (1983). 6502 Assembly Language Programming (Self-teaching Guides). John Wiley & Sons Inc. ISBN 978-0471861201.
  • Leventhal, Lance A. (1986). 6502 Assembly Language Programming 2nd Edition. Osborne/McGraw-Hill. ISBN 0-07-881216-X.
  • Zaks, Rodnay (1983). Programming the 6502 (Fourth Edition). Sybex, Inc. ISBN 0-89588-135-7.
  • Zaks, Rodnay (1982). Advanced 6502 Programming. Sybex, Inc. ISBN 0-89588-089-X.
  • Zaks, Rodnay (1980). Programming the 6502 (Third Edition). Sybex, Inc. ISBN 0-89588-046-6.

Online

  • Programming the 65816 (including the 6502, 65C02, and 65802) by Western Design Center
    1. Programmingthe65816_ProgManual.pdf — 54MBytes, created 2015/03/27.
      • This is a full scan of the original Eyes/Lichty book using full images for each page, with the added bonus of OCR being applied so that text is searchable and copy-paste-able. Accurate/reliable given the nature of the scan. A backup copy, if the 65xx.com site is down, is availablevia Koitsu.
    2. Programmanual.pdf (a.k.a. WDC65C816_Program_Manual.pdf) — 1.7MBytes, created 2007/04/16.
      • This is a "pure text" version of the Eyes/Lichty book, however it is rife with very dangerous typos (wrong opcodes, etc.) in many areas, and contains a large number of formatting/layout mistakes not present in the original book. Bill Mensch (6502/65C02/65816 architect/designer)confirmed these mistakes, stating WDC is in the process of fixing them. If at all possible, use the newer PDF mentioned above.
      • It is suspected that WDC has pulled this PDF entirely from their website, instead advocating purchasing a "redone" version of the Lichty/Eyes book via Amazon. Kindle and paperback versions are available, but I (Koitsu) have not reviewed it.

Links

BE Band (비밴드) - 2024년 03월 02일 잠실새내 락앤롤욱스 공연

나의 10~20대를 보낸 잠실에서의 공연.. 오랜만에 가보니.. 여기가.. 마눌님과 자주 가던 영화관이었는데... 여긴 뭐가 있었는데... 란 추억도 떠올리며 기분좋게 감.​ 공연장은 좀 협소한 편이었고, 인천의 쥐똥나무 보다는 약간 크고... 인천 ...