헬로 16! (1)

“dasm”은 어셈블러다. 작성한 파일을 기계어로 바꾸는 역할을 한다.

-f3은 경량화해서 순수 바이너리 파일만 만들어 달라는 플래그다.

어셈블이 실패했다.

“Mnemonic”(니모닉)을 모른다는데..?

clc, lda, adc ,sta 이런 “opcode”라고 부른 것들이 니모닉에 해당한다.

에러 메시지를 읽어보면 #$0A, #$06, $2200을 니모닉으로 해석하는데..?

알고보니 “dasm”의 문법에서 “Mnemonic”은 한 번 들여쓰기 해야한다.

들여쓰기 하고 다시 어셈블하면 또 모르는 니모닉이라고 나온다.

“dasm”은 6502 cpu 니모닉만 지원하는게 아니다.

.PROCESSOR 6502와 같이 .으로 시작하는 문을 지시문이라고 부른다

.PROCESSOR 6502는 6502 CPU에서 실행함을 어셈블러에게 지시하는 역할을 한다.

.ORP $8000 ROM에 업로드 했을 때 시작 주소가 0x8000임을 어셈블러에게 알려준다.

$nnn hex

  • 8000앞의 $는 hex를 나타낸다.

보충설명은 다음과 같다.

. PROCESSOR 6502
. ORG $8000        ; origin을 $8000으로 설정
 
clc               ; ← 이 명령어가 $8000에 생성됨
lda #$0A          ; ← $8001에 생성 (clc는 1바이트)
adc #$06          ; ← $8003에 생성 (lda #$0A는 2바이트)
sta $2200         ; ← $8005에 생성 (adc #$06는 2바이트)

어셈블 성공했다.

hex editor로 열어서 확인하면 내용이 동일하다.

Offset은 “파일 시작 오프셋”이다.

  • 0부터 시작한다.
  • 파일 기준이니까

ROM과 연결 시 0x8000부터 Flash 해야 한다. 이것은 우리의 책임

어떤 어샘블러로 어샘블하던 결과는 기계어로 동일하게 나와야한다.

  • 왜냐하면 우리는 6502에 해당하는 ISA를 사용하니까
  • 하드웨어 종속