프로그래밍 기초
Contents
[hide]연산코드와 연산자들
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) ; 268>340>
임의 숫자의 나눗셈
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
댓글 없음:
댓글 쓰기