
헬로 16! (1)

“dasm”은 어셈블러다. 작성한 파일을 기계어로 바꾸는 역할을 한다.
-f3은 경량화해서 순수 바이너리 파일만 만들어 달라는 플래그다.

어셈블이 실패했다.
“Mnemonic”(니모닉)을 모른다는데..?
clc, lda, adc ,sta 이런 “opcode”라고 부른 것들이 니모닉에 해당한다.
에러 메시지를 읽어보면 #$0A, #$06, $2200을 니모닉으로 해석하는데..?

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

들여쓰기 하고 다시 어셈블하면 또 모르는 니모닉이라고 나온다.
“dasm”은 6502 cpu 니모닉만 지원하는게 아니다.
- 여러 명령어 집합 구조(ISA)를 지원한다.
- ISA에 따라 니모닉도 달라진다.

.PROCESSOR 6502와 같이 .으로 시작하는 문을 지시문이라고 부른다
.PROCESSOR 6502는 6502 CPU에서 실행함을 어셈블러에게 지시하는 역할을 한다.
.ORP $8000 ROM에 업로드 했을 때 시작 주소가 0x8000임을 어셈블러에게 알려준다.
- 우리가 만든 컴퓨터에서 ROM은 0x8000 주소 부터 시작하니까
- CPU 주소 0x8000 이상일 경우 참고
- 900. DASM 지시문 참고
$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를 사용하니까
- 하드웨어 종속