Đầu tiên đọc bài này http://wiki.superfamicom.org/snes/show/Sprites và bài này http://wiki.superfamicom.org/snes/show/DMA+&+HDMA Tìm đoạn nào có thoại mà ta chủ động được, chẳng hạn như sau đoạn opening. Save state trước khi thoại bắt đầu. 1. Log CPU trước khi bắt đầu thoại 2. Bắt đầu thoại và bỏ log 3. Mở file log, tìm đoạn nào chưa $420B. Đây là register DMA dữ liệu vào Vram. 4. Có rất nhiều đoạn chứa $420B, tìm đoạn nào ghi #$04 vào $43x1. Tức cổng ghi DMA là $2104. Kết quả: 5. Tìm tới $43x2. Đây là nơi ghi địa chỉ nguồn của dữ liệu. Ở đây là 1CE0. 6. Tìm tới $43x4. Đây là nơi ghi bank của dữ liệu nguồn. Ở đây là 00. 7. Như vậy, oam table được chuyển vào Vram từ địa chỉ 00:1CE0, tức 7E:1CE0. Xem địa chỉ ram này sẽ thấy. Table này gồm 544 byte, tức bắt đầu ở 00:1CE0 và kết thúc ở 00:1EFF. 512 byte đầu, mỗi 4 byte là 1 sprite. Mã: Sprite Table 1 (4-bytes per sprite) Byte 1: xxxxxxxx x: X coordinate Byte 2: yyyyyyyy y: Y coordinate Byte 3: cccccccc c: Starting tile # Byte 4: vhoopppc v: vertical flip h: horizontal flip o: priority bits p: palette # 32 byte cuối cùng, mỗi sprite chỉ chiếm 2 bit trong 1 byte. Mã: Sprite Table 2 (2 bits per sprite) bits 0,2,4,6 - Enable or disable the X coordinate's 9th bit. bits 1,3,5,7 - Toggle Sprite size: 0 - small size 1 - large size
Bây giờ xem Oam table trong ram, ta thấy 4 byte đầu tiên (sprite đầu tiên): 40-87-A0-33. 40 là tọa độ trục hoành, 87 là tọa độ trục tung của sprite. Thử đặt cheat 7E1CE0 =00, ta sẽ thấy sprite đầu tiên bị Điều này cho thấy bảng chữ này là: 1 sprite gồm 2 chữ, tức sprite 16x16 pixel. Thử đặt cheat 7E1CE2=A4 Như vậy thì biết được A0= chữ cái đầu tiên trong table, A1= chữ thứ hai,... Như vậy, tùy vào vị trí được chuyển vào Vram của font mà cùng một giá trị A0, chữ có thể khác nhau.
Có lão nào làm hướng dẫn decode key phim chi tiết như lão trên thì đỡ quá Mình thấy cả chục key trên đây rồi mà ko biết làm cách nào để decode And at this point, i'm too afraid too ask