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

댓글 없음:

댓글 쓰기

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

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