Bài 8: Zero page

[​IMG]


Ta có thể truy cập vào RAM bằng cách đặt tên như biến số trong ngôn ngữ C, hay có thể định dạng ROM. Trong những trường hợp như vậy, ta dùng .db để mô tả định số như ví dụ dưới đây.

.BANK 0
.ORG $0000 ; bắt đầu từ $0000
label1: .db 0 ; xem địa chỉ $0000 của RAM như label1, không thể mang giá trị ban đầu
byte1: .db 0 ; xem địa chỉ $0001 của RAM như byte 1, không thể mang giá trị ban đầu

.ORG $8000
Start: ; từ đây trở đi là ROM chương trình, viết giá trị ban đầu và bản thân chương trình

label1Init: .db 10 ; đặt giá trị ban đầu của label1 vào ROM chương trình
byte1Init: .db 20 ; đặt giá trị ban đầu của byte1 vào ROM chương trình

Việc định dạng ROM cũng giống như việc định dạng table ngắt .dw (2 byte, word) trong Bank 1 ở bài 3. Ta không thể định dạng dải địa chỉ từ $0000 đến $07FF trong RAM bằng cách viết giá trị vào đó mà phải tải/chứa từ ROM. Và ta cũng không thể chứa giá trị và cập nhật chúng trong ROM.

Nếu như chỉ định label thì có thể định dạng như bên dưới đây

LDA label1 ; load giá trị của label1 vào A
LDX label1 ; load giá trị của label1 vào X
LDY label1 ; load giá trị của label1 vào Y
LDA byte1 ; load giá trị của byte1 vào A

Ta cũng có thể cập nhật giá trị vào RAM, tức có thể sử dụng giống như biến số trong các ngôn ngữ khác Assembly.

STA label1 ; chứa giá trị của A vào label1 ($0000)
STX label1 ; chứa giá trị của X vào label1 ($0000)
STY label1 ; chứa giá trị của Y vào label1 ($0000)
STX byte1 ; chứa giá trị của X vào byte1 ($0001)

Zero page

Từ trước nay ta đã biết, các phép toán đều tiến hành qua các Register. Nhưng 6502 còn có thể diễn toán trực tiếp trong RAM. Ví dụ dưới đây cho thấy có thể tăng, giảm giá trị trong RAM mà không nhất nhất phải thông qua Register.

INC label1 ; tăng giá trị của label1 lên 1
DEC label ; giảm giá trị của label1 xuống 1

Và dải địa chỉ từ $0000 tới $00FF được gọi là Zero page. Ta có thể chỉ định 1 byte truy cập vào phần RAM này như dưới đây.

LDA <$00 ; load giá trị của $0000 vào A
INC <$00 ; tăng giá trị của $0000 lên 1

Ký hiệu < cho biết đây là Zero page, không cần phải viết đủ $0000.
Nhưng nhưng thế này thì khó hiểu hơn label lúc nãy, và có thể viết giống như label.

label1 = $00 ; định nghĩa tên địa chỉ Zero page
LDA <label1 ; load giá trị của $0000 vào A
INC <label1 ; tăng giá trị của $0000 lên 1

Dải địa chỉ từ $0100 đến $01FF là khu vực Stack có thể sử dụng được, nhưng không đề cập đến ở đây.

0 bình luận :

Post a Comment

 
Top