[Tutorial]Encode và decode: căn bản ~ nâng cao

Thảo luận trong 'Thư giãn' bắt đầu bởi asm65816, 28/9/16.

  1. asm65816

    asm65816 Mega Man

    Tham gia ngày:
    23/5/09
    Bài viết:
    3,320
    Nơi ở:
    El Sallia
    Đầ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.

    [​IMG]

    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ả:

    [​IMG]

    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
     
    BadPlayBoy thích bài này.
  2. asm65816

    asm65816 Mega Man

    Tham gia ngày:
    23/5/09
    Bài viết:
    3,320
    Nơi ở:
    El Sallia
    Bây giờ xem Oam table trong ram, ta thấy

    [​IMG]

    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ị

    [​IMG]

    Đ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
    [​IMG]

    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.
     
  3. Vi_doi_la_the

    Vi_doi_la_the Donkey Kong Lão Làng GVN

    Tham gia ngày:
    22/11/06
    Bài viết:
    446
    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 :8cool_cry::8cool_cry:
     
  4. Bruce Wayne.

    Bruce Wayne. Mega Man

    Tham gia ngày:
    8/12/15
    Bài viết:
    3,248
    http://www.unit-conversion.info/texttools/hexadecimal/
     
  5. asm65816

    asm65816 Mega Man

    Tham gia ngày:
    23/5/09
    Bài viết:
    3,320
    Nơi ở:
    El Sallia
    Lâu lâu lại thấy mấy con nai ngơ ngác hỏi: "decode thế nào?"
    Lẽ ra mod nên stick cái thớt này lên :)>-
     

Chia sẻ trang này