text:
Đọc bản pdf tại đây (click)
Bạn đã bao giờ chơi một game hack với những yếu tố hoàn toàn mới hay một bản dịch Việt ngữ? Bạn thắc mắc vì sao người ta có thể làm cho nhân vật Mario bay được, trong khi mặc định trong game bình thường là chạy bộ? Câu trả lời là Assembly, hay gọi tắt là Asm. Bài viết này cung cấp cho bạn đọc những kiến thức cơ bản nhất về Asm, thông qua game Fire Emblem 4 Seisen no Keifu trên máy Super Nintendō làm ví dụ. Bài viết cố gắng cô đọng, tóm tắt những kiến thức cần thiết nhất để người (đủ kiên nhẫn) đọc có thể làm theo và tự phát triển nền tảng cho riêng mình.
Hiện nay trên Net có rất nhiều tài liệu về Asm 65816 dành cho hệ máy SFC (SNES) bằng tiếng Nhật, tiếng Anh, tiếng Tây, tiếng Bồ.... nhưng chưa có một tài liệu nào bằng tiếng Việt. Có thể xem đây là tài liệu tiếng Việt đầu tiên về lãnh vực này. Nếu muốn tìm hiểu sâu hơn để hack/dịch game Snes thì có thể tham khảo thêm tài liệu trong các ngôn ngữ kể trên.
I. Cần chuẩn bị
Để theo được bài viết này, bạn cần chuẩn bị một số thứ tối thiểu như sau:
1. Kiến thức về hệ nhị phân (Binary, Bin) và hệ thập lục (Hexadecimal, Hex), kiến thức về bit và byte. Không nhắc lại ở đây vì những bài viết về hai hệ số này đã tràn ngập Google rồi, tôi không tốn thời gian gõ lại làm gì.
2. Lòng đam mê với game SNES. Cái này thì ai trả qua tuổi thơ với SNES thì mặc định là có (:V).
3. Một chút thời gian rãnh. Không nhiều lắm, nhưng đủ để đọc hết bài viết này và làm theo. Có thể chia thành nhiều kỳ, số kỳ không hạn chế, tùy vào độ rãnh háng của bạn.
4. Giả lập kiêm Debugger để chạy game SNES. Trên Net có kha khá, nhưng khuyên dùng Snes9X. Tải về tại đây (click vào).
5. Bản Mộc Đế 4 (Fire Emblem 4 Seisen no Keifu). Dùng được cho bản gốc tiếng Nhật và bản dịch tiếng Việt của Asm65816. Ở đây dùng bản tiếng Việt. Tải về tại đây (click vào)
6. Trình Hex Editor. Có vô vàn, nhưng tôi hay dùng Stirling vì sự tiện dụng của nó. Tải bản tiếng Việt của Stirling tại đây (click vào).
7. Lunar Address, tiện ích chuyển đổi giữa địa chỉ PC và địa chỉ SNES. Tải về tại đây (click vào).
8. Cuối cùng, à chưa phải cuối cùng. Một chút kiên nhẫn. Không cần nhiều lắm, chỉ cần đủ để đọc lại bài này từ đầu chí cuối sau khi đọc hết mà vẫn không hiểu gì.
9. Đây mới là cuối cùng. Cần một bộ óc bình thường như cân đường hộp sữa. Không cần cái đầu quá nhanh như Corei7 hay Qualcom 820, nhưng nếu nhanh được như vậy thì càng tốt. Chỉ cần làm được 5 phép tính cộng trừ nhân chia số có 2 chữ số trong thời gian 1 phút là đủ tiêu chuẩn.
II. Khái quát về Asm 65816
Asm là từ viết tắt của Assembly, tiếng Việt dịch là "hợp ngữ", gọi nôm na là ngôn ngữ máy. Asm là ngôn ngữ bậc thấp mà máy tính (các loại máy nói chung, không nói riêng về "máy vi tính") sử dụng và hiểu được. Nó khá đơn giản, chỉ gồm 2 con số là "0" và "1". Chả còn gì đơn giản hơn. Máy tính vốn dĩ tối dạ và ngu đần, không có trí tuệ. Nó không hiểu được tiếng người, nó không phân biệt được trai gái, không biết đâu là rượu đâu là nước,... Nói tóm lại, ngoài "0" và "1" ra thì nó chả biết gì nữa hết. Điểm cộng duy nhất của máy tính là mặc dù ngu đần nhưng lại tuy u ám không có trí tuệ nhưng lại nhanh trí.
OK? Trí tuệ và nhanh trí là hai khái niệm hoàn toàn khác nhau. Máy tính có thể đếm, cộng trừ nhân chia hàng triệu con số trong nháy mắt, nhanh hơn bất kỳ một con người nhanh trí nào. Nhưng vì không thông minh nên nó cứ ngồi đợi con người ra lệnh, giao việc cho làm. Nếu máy tính mà thông minh thì chắc giờ này tôi đang làm việc nhà cho nó rồi, đâu rãnh mà ngồi đây viết linh ta cho các bạn đọc linh tinh.
Quay trở lại vấn đề, máy tính rất đơn giản. Còn con người thì đẳng cấp hơn nhiều, và cũng phức tạp hơn nhiều. Thế giới của máy tính chỉ có "0" và "1" thì thế giới con người còn có gái gú, rượu chè, hút sách, lừa lọc, giết hại nhau,..... Khi đã quen thuộc với những cái siêu phức tạp như vậy thì dường như chúng ta gặp rất nhiều khó khăn trong việc giao tiếp với thứ đơn giản như cái máy tính.
Cũng giống như hệ thống ngôn ngữ của người lớn thì phức tạp, có thể phát âm rất nhiều âm tiết tinh vi. Trong khi cổ họng của trẻ sơ sinh chỉ có vài từ "ă", "ú" và "â". Vì vậy mà đại đa số người lớn chúng ta không hiểu bọn con nít mới đẻ chúng nói gì, mà phải cần qua người phiên dịch là mẹ chúng. Bà mẹ này vừa hiểu được chúng, vừa hiểu được chúng ta nên trở thành cây cầu nối trong giao tiếp giữa hai bên. Ngôn ngữ Assembly, hay ASM cũng vậy. Nó vừa để con người có thể hiểu được, vừa để máy tính hiểu được.
Ngôn ngữ mà ngày xưa các cụ dùng để giao việc cho máy SNES có tên mã là 65816, 65C816. Gọi túm lại là Asm 65816. Đây là hệ máy 16 bit, vì có Register có độ rộng 16 bit. Nếu muốn hack/dịch game SNES thì kiểu gì cũng phải biết qua ngôn ngữ này. Những khái niệm cơ bản nhất về nó sẽ lần lượt xuất hiện trong bài này.
Điều đầu tiên cần phải biết là CPU 65816 thực hiện tuần tự các mệnh lệnh mà người ta viết sẵn theo thứ tự từ trên xuống, từ trước đến sau.
{Lệnh 1}
{Lệnh 2}
{Lệnh 3}
....
{Lệnh n}
Nó sẽ thực hiện lần lượt đúng như thứ tự trên, rất đơn giản đúng không?
Đầu tiên, mở FE4 bằng Stirling, ta sẽ thấy vô vàn con số ở hệ thập lục.
Những con số này chính các dòng lệnh để CPU thực thi. Mỗi một số thập lục ứng với một mệnh lệnh, và chúng đều có ý nghĩa riêng. CPU của máy 65816 (Snes) có tới 256 lệnh. Một số lệnh chủ yếu sẽ được giới thiệu bên dưới đây.
III. Khái niệm cơ bản
Dưới đây là những khái niệm cơ bản nhất mà bạn cần phải biết khi bước chân vào thế giới 65816.
1. Endian
Endian là thuật ngữ chỉ trật tự sắp xếp byte trong bộ nhớ của máy tính. Có 2 kiểu phổ biến là Big endian và Little endian. Đối với kiểu Big endian thì dữ liệu được xếp theo trật tự thuận, chẳng hạn một chuỗi gồm 4 byte 03 6A 7F 45 thì sẽ được xếp là 03 6A 7F 45. Còn đối với kiểu Little endian thì trật tự này được xếp ngược là 45 7F 6A 03. Các hệ máy console cũ như NES, SNES, PlayStation, Megadrive... thì sử dụng kiểu Little endian, còn các hệ console đời mới như PlayStation 3, Xbox 360... đều sử dụng kiểu Big endian. Xác định kiểu endian là một khâu quan trọng trong việc hack dữ liệu.
2. Register
Có thể nói, linh hồn của một phần cứng chính là các Register. Chữ "Regist" mang nghĩa "duy trì". Register là thứ duy trì một cái gì đó. Trong ngôn ngữ Asm thì Register duy trì các giá trị, cụ thể là các biến số.
Phần cứng 65816 có nhiều Register, trong số đó hay gặp là: A (Accumulator), X và Y (Index Register), DB (Data bank) và P (Status Register, hay còn gọi là Flag). Ngoài ra còn có PC (Program Counter) Register giữ địa chỉ của lệnh hiện tại, D (Direc page) Register, S (Stack) Register. Trong số này thì chỉ có A, X, Y là có thể chuyển đổi giữa 2 chế độ: 8 bit và 16 bit để giữ byte bằng cách set và reset các bit trong P Register. P là Register 8 bit, theo thứ tự là:
n: Negative
v: Overflow
m: Memory/Accumulator Select
x: Index Register select
d: Decimal
i: Interrupt
z: Zero
c: Carry
Từng bit khi được set (trạng thái "1") hay reset (trạng thái "0") thì sẽ cho tác dụng khác nhau. Chẳng hạn, nếu bit thứ 5 của P Flag được set (1) thì A Register là 8 bit, còn nếu là reset (0) thì A có chứa được giá trị 16 bit. Tương tự, X và Y Register chứa được giá trị 8 hay 16 bit phụ thuộc vào trạng thái của bit thứ 4 của P Flag.
3. Addressing mode
Trong ngôn ngữ Asm, có nhiều cách để chỉ định địa chỉ, và tất cả những cách này đều được gọi chung là Addressing mode. Chẳng hạn, lệnh LDA #$20 có ý nghĩa khác với LDA $20.
Lệnh đầu tiên là tải giá trị $20 (thập lục) vào A Register, còn lệnh sau tải giá trị (biến số) tại địa chỉ $20 vào A Register.
a. Immediate: kiểu định địa chỉ này được xác định với một giá trị cụ thể. Chẳng hạn
LDA #$FF ;tải giá trị $FF vào A
SEP #$30 ;đưa giá trị $30 vào P Flag
b. Direct: địa chỉ đích được hình thành bằng cách thêm một địa chỉ 8 bit vào Direct page Register (D). Chẳng hạn:
LDA $20 tải giá trị (biến số) tại địa chỉ $20
Nếu D = $1000 thì CPU sẽ đọc một byte (nếu A 8 bit) từ địa chỉ $1020.
c. Absolute: địa chỉ đích được hình thành bằng cách thêm một địa chỉ 16 bit vào DBR. Chẳng hạn:
DBR: $80
LDA $901C
Thì CPU sẽ tải một byte từ địa chỉ $88: 901C vào Accumulator (A).
d. Absolute Long: địa chỉ đích chính là địa chỉ được thể hiện trong lệnh.
LDA $808000 ; tải một byte từ địa chỉ $80:8000 vào A
LDA $FF9090 ; tải một byte từ địa chỉ $FF:9090 vào A
d. Accumulator: địa chỉ đích chính là A Register.
INC ; tăng giá trị của A lên 1
e. Direct Indirect Indexed: đây chính là nơi các Index Register (X và Y) vào cuộc. CPU sẽ tải 2 byte (16 bit) từ địa chỉ Direct page để tạo thành một địa chỉ nền kết hợp với DBR. Cuối cùng, giá trị của Y được thêm vào địa chỉ nền kia để tạo thành một địa chỉ 2 byte.
DBR: $80, D: $0020, Y: 0001
Memory dump (các giá trị trong bộ nhớ lúc này):
0030: 30 40 23 22 F4 22 23 1C
0038: 23 2D DD F4 FF FF FF FF
LDA ($10), Y
Sẽ cho địa chỉ sau:
Đầu tiên ta có $10 + giá trị tại D ($0020) là: $10 + $0020 = $0030
Nhìn vào bộ nhớ (Memory), lúc này ta thấy giá trị tại $30 và $31 là 30 và 40.
Do vậy địa chỉ sẽ là: $3040, nhưng vì SNES sử dụng kiểu Little endian nên địa chỉ đúng sẽ là $4030.
Kết hợp với DBR để có địa chỉ nền: $80:4030
Cuối cùng, tính thêm giá trị của Y vào: $80:4030 + $0001 = $80:4031
Như vậy, dòng lệnh trên
LDA ($10), Y
sẽ tải một byte từ địa chỉ $80:4031 vào trong A. Thường thì kiểu định địa chỉ này được dùng trong vòng lặp, khi Y được gia tăng mỗi lần để lấy một loạt dữ liệu trong Memory. Chẳng hạn
DBR: $80, D: $0020, Y: 0001
Memory dump:
0030: 30 40 23 22 F4 22 23 1C
0038: 23 2D DD F4 FF FF FF FF
LDA ($15), Y
INY
Địa chỉ DP = $0020 + $15 = $ 0035
Địa chỉ nền = DBR:<2 data-blogger-escaped-a="" data-blogger-escaped-byte="" data-blogger-escaped-ch="" data-blogger-escaped-t=""> = $80:2322
Địa chỉ đích = Địa chỉ nền + Y = $80:2323
INY: gia tăng giá trị của Y lên 1
Như vậy, 2 dòng lệnh trên sẽ liên tục tải các giá trị tại $80:2322, $80:2323, $80:2324,... vào A.
Thường thì giá trị tại D Register là 0, cho nên việc tính toán cũng đơn giản hơn.
f. Direct Indirect Indexed Long: kiểu xác định địa chỉ này về cơ bản thì giống kiểu e. Chỉ khác nhau ở chỗ nó sử dụng 3 byte tại địa chỉ DP thay vì 2 byte và không kết hợp với DBR. Ví dụ:
DBR: $80, D: $0020, Y: 0001
Memory dump:
0030: 30 40 23 22 F4 22 23 1C
0038: 23 2D DD F4 FF FF FF FF
LDA [$10], Y
Địa chỉ DP = $0020 + $10 = $0030
Địa chỉ nền = $23:4030.
Địa chỉ đích = địa chỉ nền + Y = $23:4030 + $0001 = $23:4031
g. Direct Indexed Indirect: sau khi tính địa chỉ Direct page, cộng với giá trị tại X. Sau đó lấy 2 byte tại địa chỉ này, kết hợp với DBR để tạo thành địa chỉ đích.
DBR: $80 D: $0020 X: $0004
Memory dump:
0020: FF 00 FF 09 33 33 09 88
0028: 08 76 66 36 D7 23 99 00
LDA ($02, X)
Địa chỉ DP = $02 + D = $0022
Sau đó kết hợp với X
Địa chỉ DP + X = $0026
2 bytes tại $0026 là (09 và 88), đảo ngược (Little endian) thành $8809, cuối cùng kết hợp với DBR:
DBR:$8809 = $80:8809
CPU sẽ tải giá trị tại địa chỉ $80:8809 vào A.
h. Direct Indexed với X: trong kiểu định địa chỉ này thì địa chỉ DP được cộng với giá trị tại X để tạo thành địa chỉ đích. Địa chỉ đích luôn nằm ở bank 0.
D: $0020 X: $0004
LDA $30, x
Địa chỉ DP = $30 + $0020 = $0050
Địa chỉ đích = địa chỉ DP + X = $00:0054
i. Direct Indexed với Y: giống kiểu h. nhưng khác nhau ở chỗ địa chỉ DP cộng với giá trị tại Y để hình thành địa chỉ đích.
j. Absolute Indexed với X: giá trị 2 byte được cộng với X rồi kết hợp với DBR để hình thành địa chỉ đích.
DBR: $80 X: $0001
LDA $8000, X
Địa chỉ đích = DBR:($8000 + X) = $80:8001
LDA $6988, X
Địa chỉ đích = DBR:($6988 + X) = $80:6989
k. Absolute Indexed với Y: giống kiểu j. nhưng thay vì cộng với X thì ở đây cộng với Y.
l. Absolute Long Indexed với X: địa chỉ đích được hình thành bằng cách cộng giá trị tại X với địa chỉ 3 byte.
X: $0001
LDA $808000, X ; tải một byte tại $80:8001 vào A
LDA $589112, X ; tải một byte tại $58:9113 vào A
m. Absolute Long Indexed với Y: giống kiểu l. nhưng thay vì cộng với X thì ở đây cộng với Y.
n. Program Counter Relative: kiểu định địa chỉ này chỉ được dùng trong các lệnh phân nhánh. Giá trị 8 bit được thêm vào PC (Progtam Counter) để tạo thành địa chỉ đích mà lệnh thực thi nhảy đến. Giá trị 8 bit này có phạm vi từ -128 cho đến 127.
BRA $8005 ; phân nhánh sang địa chỉ $8005 trong phạm vi (-128 tới 127)
o. Program Counter Relative Long: giống kiểu n. nhưng phạm vi trong khoảng (0 tới 65535). Chỉ có lệnh BRL và PER dùng kiểu này.
p. Absolute Indirect: địa chỉ đích được hình thành từ 2 byte.
Memory dump:
0000: 90 77 78 00 43 00 00 00
0008: 33 45 12 33 11 11 FF FF
JMP ($0008)
CPU sẽ lấy 2 byte tại $0008 là (33, 32), rồi nhảy sang địa chỉ $4533.
q. Absolute Indexed Indirect: giá trị 2 byte được cộng với X, sau đó 2 byte tại địa chỉ này được dùng để tạo nên địa chỉ đích.
X: 0001
Memory dump:
0000: 90 77 78 00 43 00 00 00
0008: 33 45 12 33 11 11 FF FF
JMP ($0008, X)
Ta có $0008 + X = $0009
Lấy 2 byte từ $0009 = 45 12
$1245 là địa chỉ mới.
r. Direct Indirect: 2 byte tại địa chỉ Direct Page được dùng để tạo thành địa chỉ 16 bit. Sau đó kết hợp với DBR để tạo thành địa chỉ đích 24 bit.
D: 0000 DBR: $80
Memory Dump:
0040: 50 00 80 00 22 23 33 44
0050: 60 21 21 21 22 55 55 66
LDA ($40)
Địa chỉ DP = $40 + D = $40
Địa chỉ 16 bit tại $40 = $0050
Địa chỉ đích = DBR:$0050 = $80:0050
s. Direct Indirect Long: 3 byte tại địa chỉ Direct page được dùng để tạo thành địa chỉ đích.
D: 0000 DBR: $80
Memory Dump:
0040: 50 00 80 00 22 23 33 44
0050: 60 21 21 21 22 55 55 66
LDA [$40]
Địa chỉ DP = $40 + D = $40
Địa chỉ đích = $80:0050
4. Memory mapping và địa chỉ RAM/ROM
Trong phần trước, ta đã gặp từ "bank".
Trong địa chỉ XX:YYZZ thì phần XX chính là bank.
ROM của SNES được tải trong phạm vi từ 00:0000 cho tới FF:FFFF.
Vị trí của ROM trong bộ nhớ khác nhau tùy thuộc vào chủng loại ROM (LoROM và HiROM).
Tham khảo thêm bài viết này (click vào).để biết thêm chi tiết.
Nếu không biết ROM đối tượng thuộc loại gì thì có thể dùng Lunar Address, chọn Auto-Detect Type rồi chọn đường dẫn đến ROM để biết. FE4 là HiROM.
Phần trong khoanh đỏ là để phần mềm xác định giúp ta loại ROM, phần trong khoanh vàng cho biết ROM có $200 header hay không. Phần trong khoanh màu lam là địa chỉ khi xem bằng Hex editor, còn trong khoanh màu lục là địa chỉ tương ứng trong Memory của máy SNES.
Như trong hình thì địa chỉ $223AC khi mở bằng Hex editor thì trong bộ nhớ của SNES, địa chỉ đó là $C2:21AC ($21AC ở bank C2).
5. Giải thích về Debugger Snes9X
Các phiên bản cũ của Debugger này không hỗ trợ ROM có header. Khi chạy cần phải cắt bỏ header đi. Tuy nhiên các bản sau này vẫn chạy được ROM có header.
Khi bắt đầu nạp game thì sẽ xuất hiện cửa sổ Debug Console với các chức năng như sau:
Next Op Hiển thị mệnh lệnh tiếp theo được thi hành
Step Into Thi hành 1 lệnh tiếp theo. Khi có Sub routine thì sẽ nhảy đến Sub routine đó.
Step Over Thi hành 1 lệnh tiếp theo. Khi có Sub routine thì sẽ thi hành liên tục đến khi kết thúc Sub routine đó
Step Out Thi hành mệnh lệnh tiếp theo cho tới khi kết thúc Sub routine hiện tại
Skip Bỏ qua 1 lệnh tiếp theo
Clear Text Xóa hết dữ liệu log hiển thị trên cửa sổ Debug Console
Disassemble Dis-assemble (phân tích ngược) từ địa chỉ bắt đầu/kết thúc đã chỉ định
Run Chạy game cho đến khi gặp phải Break point
Reset ROM Có gì khó hiểu?
Frame Adv Thi hành số frame chỉ định (*1)
Vector Info Hiển thị Vector của CPU và APU (bộ xử lý âm thanh)
Sprite Status Hiển thị thông tin liên quan đến sprite mà EMU đang hiển thị
APU State APU
Sample Addr Hiển thị địa chỉ mẫu mà APU đang duy trì
Show Hex Gọi Hex Editor. Từ đây có thể xem được ROM, RAM, VRAM, ARAM và SRAM
Dump RAM Trích xuất RAM bắt đầu từ địa chỉ chỉ định, với số byte chỉ định
Dump Palette Hiển thị palette
What’s Used Hiển thị chức năng hiển thị mà ROM hiện đang sử dụng(VRAM, BG,..)
What’s Missing
Trace From Chỉ định địa chỉ bắt đầu ghi log
Reset Debug Xóa thông tin debug
BreakPoints Chỉ định Break point
Exec Break (dừng) ngay trước khi thực hiện mệnh lệnh ở địa chỉ được chỉ định
Read Break (dừng) ngay trước khi đọc từ địa chỉ được chỉ định
Write Break (dừng) ngay trước khi ghi vào địa chỉ được chỉ định
Logging Chọn xuất log: CPU, APU, SA1 hay Sound DSP
Special Tracing Chọn xuất log: DMA, HDMA, VRAM, DSP-1 hay Unknown Register
CPU Trace Options Tùy chọn khi xuất log
Trace Once Không xuất log đối với lệnh đã thực hiện một lần rồi
Split Tách file log
Tabbed Output Xuất với phân khu tab
Misc Options Tùy chọn khác
Tilde FF Chọn cho phép Turbo mode với phím "~" hay không
Alt Menu Behavior Không hiển thị thanh Menu của Emu
Auto Usage Map Usage Tự động xuất Map
Usage Maps Usage là một dạng log ghi lại các địa chỉ đã đọc và địa chỉ đã thi hành lệnh
Open Usage Khỏi giải thích
Merge Usage Khỏi giải thích
Save Usage Khỏi giải thích
Gen Offsets Xuất log Usage dưới dạng txt
Hex Editor Gọi Memory Editor. Cần cẩn thị vì đôi khi cuộn xuống địa chỉ bên dưới dễ bị đơ.
Viewing:
ROM: nếu là LoROM thì hiển thị phạm vi từ 80:8000~BF:FFFF, nếu là HiROM thì hiển thị từ C0:0000~FF:FFFF
RAM: thể hiện phạm vi của RAM từ 7E:0000~7F:FFFF
VRAM: thể hiện phạm vi của Video RAM từ 0000~FFFF
ARAM: thể hiện phạm vi của Audio RAM từ 0000~FFFF
Freeze: giữ cố định, không cho cập nhật các giá trị (biến số) trong phạm vi RAM đã chọn.
Save ROM: ghi lại mọi thay đổi sau khi chỉnh sửa vào ROM.
Open TBL : mở file table với định dạng .tbl. Tuy nhiên chỉ hỗ trợ kiểu encoding ascii chứ chưa hỗ trợ tiếng Nhật hay Unicode.
(*1): giả lập Snes9X có tốc độ khung 60 fps (1 frame là 0.016 giây), nhưng Debuger chỉ có tốc độ 30 fps.
IV. Phần thực chiến
1. Tìm cheat code
Hẳn là phần nhiều những người chơi game Snes đều đã một vài lần sử dụng cheat code. Bằng cách nhập một đoạn code vào SNES, người chơi có được những khả năng phi thường như bất tử, bắn không bao giờ hết đạn, chạy nhanh gấp 3 bình thường,...
Cũng có nhiều người căm ghét việc dùng cheat code. Tuy nhiên, để hiểu được cặn kẽ việc hack game thì cần phải hiểu rõ về cheat code. Hai yếu tố này có quan hệ mật thiết với nhau, như giải thích dưới đây.
Dữ liệu game luôn có 2 kiểu: kiểu cố định và kiểu biến động. Kiểu cố định là dữ liệu luôn không đổi, nằm trong ROM và kiểu biến động chính là biến số được lưu và cập nhật thường xuyên trong RAM. Đối với FE4, các dữ liệu như binh chủng, chỉ số ban đầu của nhân vật là kiểu cố định. Tuy nhiên, trong quá trình chơi thì nhân vật sẽ Level up, các chỉ số như HP, sức mạnh, phòng vệ được tăng dần. Đây chính là biến số.
Tất cả các game SNES đều lưu biến số trong RAM từ địa chỉ 7E:0000~7F:FFFF.
Chính vì vậy, ta hay thấy cheat code của game SNES đều có dạng 7EXXYYZZ hoặc 7FXXYYZZ, trong đó 7EXXYY là địa chỉ của biến số, còn ZZ là giá trị của biến.
Chẳng hạn, nhân vật có chỉ số STR là 15 ($0F). Địa chỉ quản lý chỉ số này nằm ở $7E1A00. Tại địa chỉ này, biến số sẽ là 0F. Bằng cách nhập code $7E1A001A thì máy Snes/giả lập Snes sẽ luôn giữ cho biến số tại $7E1A00 có giá trị $1A, tức nhân vật luôn có chỉ số STR là 26.
Như vậy hẳn bạn đã rõ nguyên lý của cheat code.
Làm cách nào để tìm được cheat code cho một game cụ thể? Có rất nhiều trang mạng đăng tải cheat code này. Hoặc bạn cũng có thể tự tìm bằng chính giả lập Snes9X. Càng biết nhiều cheat code tức là bạn càng nắm được nhiều địa chỉ biến số của game. Càng hiểu rõ các địa chỉ này thì việc hack game càng suông sẻ.
Bây giờ thử dùng Snes9X để tìm địa chỉ quản lý chỉ số kinh nghiệm (EXP) của nhân vật Siguld.
Chơi từ đầu, ta thấy Siguld có chỉ số EXP là 0, Level 5, chỉ số STR là 5, MGC là 0, SK là 11,...
Từ cửa sổ Snes9X, chọn Cheat --> Search for New cheats
Tích vào ô =(Equal to), ô Entered Value và gõ "0" (chỉ số EXP hiện tại) vào khung Enter a Value (nhập một giá trị) bên dưới rồi Search. Chương trình tìm được rất nhiều địa chỉ có giá trị "0" tại thời điểm hiện tại, trong số đó có địa chỉ quản lý EXP.
Chọn đánh một tên địch ở gần nhất.
Sau khi đánh chết địch, Siguld nhận được 22 EXP.
Lúc này lại chọn Cheat --> Search for New cheats để vào cửa sổ lúc nãy.
Gõ "22" (giá trị EXP hiện tại, sau khi hạ tên địch) vào ô Entered Value, click vào Search và sẽ được một số ít kết quả hơn lúc nãy. Kết quả lúc này là một loạt địa chỉ có biến số "0" lúc trước, nay đã trở thành "22".
Tiếp tục hạ một tên địch khác. Lúc này Siguld được 44 EXP. Làm tương tự bước tìm kiếm bên trên với giá trị "44" và được kết quả tại $7E2D4D.
Kết quả lần này chỉ có 1 địa chỉ duy nhất. Đây là địa chỉ chứa giá trị từ 0 --> 22 --> 44. Để kiểm chứng, có thể nhập địa chỉ này vào cửa sổ Cheat --> Game Genie, Pro-Action Replay Codes --> Cheat Entry and Editor. Nếu nhập 7E2D4D05 vào ô "Enter Cheat Code" và chỉ số EXP của Siguld luôn là 05, bất chấp sau khi hạ lính địch thì đích thị $7E2D4D chính là địa chỉ quản lý EXP.
Bằng cách dò tìm tương tự, ta có các địa chỉ quản lý các chỉ số khác của nhân vật này như sau.
Max HP: 7E2D40
STR: 7E2D41
MGC: 7E2D42
SK: 7E2D43
SPD: 7E2D44
DEFEND: 7E2D45
MGC DEFEND: 7E2D46
LUCK: 7E2D47
LEVEL: 7E2D49
EXP: 7E2D4D
Có thể tham khảo thêm các địa chỉ khác tại trang này (click vào)
2. Hack với kiến thức ASM
Như vậy ta đã tìm được cheat code cho các chỉ số của nhân vật. Tuy nhiên, việc sử dụng cheat code có hạn chế là chỉ sử dụng được một giá trị tại một thời điểm, và ngoài việc giữ cố định giá trị thì nó không còn tác dụng gì khác. Nếu muốn sau khi đánh địch, Siguld nhận được XX EXP, hoặc sau khi đánh địch, không tăng EXP mà lại Level up hoặc tăng các chỉ số khác thì cheat code không làm được. Lúc này cần đến kiến thức ASM để giải quyết.
Reset game, chơi lại từ đầu và tích vào ô Logging, bỏ tích ô Trace Once khi bắt đầu đánh địch.
Khi đánh địch xong, bỏ tích ở ô Logging và Debuger sẽ ghi lại log (lịch sử các câu lệnh đã thực thi) vào thư mục Logs. Mở file log bằng Text editor, tìm kiếm "7E:2D4D" (địa chỉ quản lý EXP mà ta đã biết từ trước) trong file log, sẽ tìm thấy kết quả
$84/AA48 BD 09 00 LDA $0009,x[$7E:2D49] A:2D40 X:2D40 Y:4EB5 P:envmxdizc
$84/AA4B 29 FF 00 AND #$00FF A:0205 X:2D40 Y:4EB5 P:envmxdizc
$84/AA4E C9 1E 00 CMP #$001E A:0005 X:2D40 Y:4EB5 P:envmxdizc
$84/AA51 B0 5A BCS $5A [$AAAD] A:0005 X:2D40 Y:4EB5 P:eNvmxdizc
$84/AA53 E2 20 SEP #$20 A:0005 X:2D40 Y:4EB5 P:eNvmxdizc
$84/AA55 BD 0D 00 LDA $000D,x[$7E:2D4D] A:0005 X:2D40 Y:4EB5 P:eNvMxdizc
$84/AA58 18 CLC A:0000 X:2D40 Y:4EB5 P:envMxdiZc
$84/AA59 6F 74 05 00 ADC $000574[$00:0574] A:0000 X:2D40 Y:4EB5 P:envMxdiZc
$84/AA5D C9 64 CMP #$64 A:0016 X:2D40 Y:4EB5 P:envMxdizc
$84/AA5F B0 0D BCS $0D [$AA6E] A:0016 X:2D40 Y:4EB5 P:eNvMxdizc
$84/AA61 9D 0D 00 STA $000D,x[$7E:2D4D] A:0016 X:2D40 Y:4EB5 P:eNvMxdizc
$84/AA64 C2 20 REP #$20 A:0016 X:2D40 Y:4EB5 P:eNvMxdizc
$84/AA66 A9 00 00 LDA #$0000 A:0016 X:2D40 Y:4EB5 P:eNvmxdizc
$84/AA69 FA PLX A:0000 X:2D40 Y:4EB5 P:envmxdiZc
$84/AA6A 28 PLP A:0000 X:4EB5 Y:4EB5 P:envmxdizc
$84/AA6B AB PLB A:0000 X:4EB5 Y:4EB5 P:envmxdizc
$84/AA6C 18 CLC A:0000 X:4EB5 Y:4EB5 P:envmxdizc
$84/AA6D 6B RTL A:0000 X:4EB5 Y:4EB5 P:envmxdizc
Dòng đầu tiên
$84/AA48 BD 09 00 LDA $0009,x[$7E:2D49]
cho thấy tại địa chỉ $84:AA48 có câu lệnh LDA $0009, X
Dạng số thập lục của dòng lệnh này là BD 09 00.
Lúc này giá trị tại X đang là 2D40, nên câu lệnh kia có ý nghĩa là tải một byte từ địa chỉ $7E:2D49 vào Accumulator (A). $7E:2D49 chính là địa chỉ quản lý Level của Siguld. Khi bật chức năng Show Hex, chọn xem RAM ở địa chỉ $7E:2D49 thì ta thấy giá trị tại đây là 05, ứng với mức Level của Siguld là 5.
Những dòng tiếp theo
$84/AA4B 29 FF 00 AND #$00FF
Dòng này cho biết giá trị (Level của Siguld) đã tải vào A sẽ được AND với giá trị $FF. AND là một phép tính logic theo bit. Có thể tham khảo thêm các trang mạng để biết chi tiết.
$84/AA4E C9 1E 00 CMP #$001E
Tại địa chỉ $84:AA4E, so sánh kết quả giá trị Level của Siguld sau khi AND với 30 ($1E).
$84/AA51 B0 5A BCS $5A [$AAAD]
Tại địa chỉ $84:AA51 cho biết, nếu kết quả của so sánh trên = 30 thì rẻ nhánh sang địa chỉ $84:AAAD. Nếu nhìn vào nội dung ở địa chỉ $84:AAAD thì ta biết đây là nơi thực hiện lệnh phụ, xử lý để Level của nhân vật không được tăng thêm.
$84/AA53 E2 20 SEP #$20
Set bit 5 của P Flag thành 1, biến sức chứa của A Register thành 8 bit.
$84/AA55 BD 0D 00 LDA $000D,x[$7E:2D4D]
Tải một byte (8 bit) tại $7E:2D4D (địa chỉ quản lý EXP của Siguld) vào A.
$84/AA58 18 CLC
Xóa Carry Flag. Luôn thực hiện lệnh này trước lệnh ADC.
$84/AA59 6F 74 05 00 ADC $000574[$00:0574]
Thêm giá trị tại $000574 vào A. $00:0574 là địa chỉ quản lý biến số EXP mà nhân vật nhận được sau khi đánh địch. Số này sẽ biến động phụ thuộc vào quân địch mà bạn đánh. Trùm và lính địch Level càng cao thì số này càng lớn, tức EXP nhận được càng nhiều.
$84/AA5D C9 64 CMP #$64
So sánh kết quả trên với 100 ($64).
$84/AA5F B0 0D BCS $0D [$AA6E]
Nếu kết quả so sánh trên bằng 100 thì nhảy đến địa chỉ $84:AA6E.
$84/AA61 9D 0D 00 STA $000D,x[$7E:2D4D]
Ghi giá trị trong A vào địa chỉ $7E:2D4D. Đây là địa chỉ quản lý EXP của Siguld.
Như vậy, qua 4 dòng lệnh đầu tiên thì ta hiểu: nếu Level của Siguld = 30 thì nhân vật này sẽ không được tăng EXP sau khi đánh địch. Mức thiết lập Max Level của FE4 là 30. Và tuy hạ cùng một tên địch, nhưng nếu Level của nhân vật càng cao thì EXP nhận được càng thấp.
Nếu EXP của nhân vật = 100 thì sẽ Level up và reset lại EXP = 0.
Nếu muốn sau khi đánh, nhân vật luôn nhận được 13 EXP, bất kể ở Level nào thì chỉ cần sửa dòng
ADC $000574
thành
ADC #$0D là được.
Dùng Lunar Address, chuyển đổi $84:AA59 sang địa chỉ PC, ta được $04AC59. Dùng Stirling để biên tập 6F 74 05 00 tại $04AC59 thành 69 0D EA EA thì dù sau khi đánh địch, Siguld luôn nhận được 13 EXP.
69 chính là mã thập lục của lệnh ADC với hằng số. EA chính là mã thập lục (hex) của lệnh NOP (không làm gì cả). Vì giá trị cũ là 6F 74 05 00 chiếm 4 byte, trong khi giá trị mới chỉ có 2 byte (69 0D) nên 2 byte sau phải được vô hiệu hóa bằng lệnh "không làm gì cả".
Nếu muốn Siguld luôn Level up sau mỗi lần đánh thì thay ADC #$0D (69 0D) thành ADC #$64 (69 64) là được. Lúc này EXP của Siguld luôn ở mức 100 nên chỉ cần sau trận đánh là được Level up.
Nếu muốn sau trận đánh, chỉ số MHP của Siguld trở thành bằng đúng với số EXP nhận được thì chỉ cần thay
STA $000D,X[$7E:2D4D]
thành
STA $0001,X[$7E:2D40]
là được. Lúc này giá trị EXP nhận được sẽ không được ghi vào địa chỉ quản lý EXP nữa mà ghi vào địa chỉ quản lý MHP ($7E:2D40). Cụ thể, tại $04AC61 ($84:AA61), thay 9D 0D 00 thành 9D 00 00 là được.
Tương tự, ta có thể biến số EXP nhận được thành các chỉ số khác.
Trên đây chỉ là một vài ứng dụng nhỏ với kiến thức ASM. Với ASM, bạn có thể làm mọi điều trong game, những điều mà không một cheat code hay một chương trình nào khác có thể làm được. Bạn hoàn toàn có thể biến nó thành một game hoàn toàn khác với ASM. Bạn có thể khiến số lần sử dụng của vũ khí tăng lên sau mỗi lần đánh, thay vì giảm xuống, hay HP tăng lên khi bị trúng đòn. Những điều phi lý/phi phàm/phi thường này chỉ có thể thực hiện khi đã nắm rõ ASM, cho nên việc chuyển ngôn ngữ của game sang một thứ tiếng nào đó chỉ là chuyện nhỏ khi bạn đã thấu rõ ngôn ngữ lập trình này.
Bài viết của Asm65816 © 2016
Đăng tại http://gokuraku-shujo.blogspot.com/p/game.html
Đăng tại http://gokuraku-shujo.blogspot.com/p/game.html
Chào Ad! Bấy lâu nay mình cũng thử cheat mấy game NES ,chẳng hạn như game contra 1,ReplyDelete
Mã cheat 30 mạng từ tay bấm 4 nút xưa : At the Title Screen press Up, Up, Down, Down, Left, Right, Left, Right, B, A, Start.
link
https://www.gamefaqs.com/nes/563399-contra/cheats
Còn chơi trên PC bằng giả lập Nestopia khi vào game thì chọn options>cheats>add>trong thẻ Raw dưới dòng address ,gõ mã code : 0032 ( không không ba hai ) ,ở dòng value : có thể gõ từ 4 đến 99 là cheat mạng.VD: chọn 30 đi cho tương ứng với tay bấm bốn nút trên.
Còn khi ta vào web : http://gamehacking.org/
thì mã lại khác nữa.
Mình muốn hỏi add có mối liên hệ nào từ những mã hack trên không ? ( cùng hack về mạng 1 trò chơi nhưng mã hack khác nhau ) Nếu có thể hack quay 1 clip ngắn có thiết minh để mình học với.Ý của mình là các mã đó thực ra là 1 nếu chuyển đổi hệ đếm HEX ,DEC ...?

markdown:
Đọc bản pdf tại đây (
[click](http://www.mediafire.com/view/c36cl38qqeu79cx/%5BTutorial%5DHack_FE4.pdf))
Bạn đã bao giờ chơi một game hack với những yếu tố hoàn toàn mới hay một bản dịch Việt ngữ? Bạn thắc mắc vì sao người ta có thể làm cho nhân vật Mario bay được, trong khi mặc định trong game bình thường là chạy bộ? Câu trả lời là Assembly, hay gọi tắt là Asm. Bài viết này cung cấp cho bạn đọc những kiến thức cơ bản nhất về Asm, thông qua game Fire Emblem 4 Seisen no Keifu trên máy Super Nintendō làm ví dụ. Bài viết cố gắng cô đọng, tóm tắt những kiến thức cần thiết nhất để người (đủ kiên nhẫn) đọc có thể làm theo và tự phát triển nền tảng cho riêng mình.
Hiện nay trên Net có rất nhiều tài liệu về Asm 65816 dành cho hệ máy SFC (SNES) bằng tiếng Nhật, tiếng Anh, tiếng Tây, tiếng Bồ.... nhưng chưa có một tài liệu nào bằng tiếng Việt. Có thể xem đây là tài liệu tiếng Việt đầu tiên về lãnh vực này. Nếu muốn tìm hiểu sâu hơn để hack/dịch game Snes thì có thể tham khảo thêm tài liệu trong các ngôn ngữ kể trên.
**I. Cần chuẩn bị**
Để theo được bài viết này, bạn cần chuẩn bị một số thứ tối thiểu như sau:
1. Kiến thức về hệ nhị phân (Binary, Bin) và hệ thập lục (Hexadecimal, Hex), kiến thức về bit và byte. Không nhắc lại ở đây vì những bài viết về hai hệ số này đã tràn ngập Google rồi, tôi không tốn thời gian gõ lại làm gì.
2. Lòng đam mê với game SNES. Cái này thì ai trả qua tuổi thơ với SNES thì mặc định là có (:V).
3. Một chút thời gian rãnh. Không nhiều lắm, nhưng đủ để đọc hết bài viết này và làm theo. Có thể chia thành nhiều kỳ, số kỳ không hạn chế, tùy vào độ rãnh háng của bạn.
4. Giả lập kiêm Debugger để chạy game SNES. Trên Net có kha khá, nhưng khuyên dùng Snes9X.
**Tải về tại đây**( [click vào](https://vozforums.com/redirect/index.php?link=http%3A%2F%2Fgeigercount.net%2Fcrypt%2Fgsd%2Fsnes9x1.51.ep10r2.7z)).
5. Bản Mộc Đế 4 (
**Fire Emblem 4 Seisen no Keifu**). Dùng được cho bản gốc tiếng Nhật và bản dịch tiếng Việt của Asm65816. Ở đây dùng bản tiếng Việt. **Tải về tại đây**( [click vào](https://vozforums.com/redirect/index.php?link=https%3A%2F%2Fdocs.google.com%2Fuc%3Fauthuser%3D0%26id%3D0BzTRAGYOl4abbmcyNnR2dExhNVk%26export%3Ddownload))
6. Trình Hex Editor. Có vô vàn, nhưng tôi hay dùng Stirling vì sự tiện dụng của nó.
**Tải bản tiếng Việt của Stirling tại đây**( [click vào](https://vozforums.com/redirect/index.php?link=https%3A%2F%2Fdocs.google.com%2Fuc%3Fauthuser%3D0%26id%3D0BzTRAGYOl4abSE05WTNqY29LLXM%26export%3Ddownload)).
7. Lunar Address, tiện ích chuyển đổi giữa địa chỉ PC và địa chỉ SNES.
**Tải về tại đây**( [click vào](https://vozforums.com/redirect/index.php?link=http%3A%2F%2Ffusoya.eludevisibility.org%2Fla%2Fdownload%2Fla104.zip)).
8. Cuối cùng, à chưa phải cuối cùng. Một chút kiên nhẫn. Không cần nhiều lắm, chỉ cần đủ để đọc lại bài này từ đầu chí cuối sau khi đọc hết mà vẫn không hiểu gì.
9. Đây mới là cuối cùng. Cần một bộ óc bình thường như cân đường hộp sữa. Không cần cái đầu quá nhanh như Corei7 hay Qualcom 820, nhưng nếu nhanh được như vậy thì càng tốt. Chỉ cần làm được 5 phép tính cộng trừ nhân chia số có 2 chữ số trong thời gian 1 phút là đủ tiêu chuẩn.
**II. Khái quát về Asm 65816**
Asm là từ viết tắt của Assembly, tiếng Việt dịch là "hợp ngữ", gọi nôm na là ngôn ngữ máy. Asm là ngôn ngữ bậc thấp mà máy tính (các loại máy nói chung, không nói riêng về "máy vi tính") sử dụng và hiểu được. Nó khá đơn giản, chỉ gồm 2 con số là "0" và "1". Chả còn gì đơn giản hơn. Máy tính vốn dĩ tối dạ và ngu đần, không có trí tuệ. Nó không hiểu được tiếng người, nó không phân biệt được trai gái, không biết đâu là rượu đâu là nước,... Nói tóm lại, ngoài "0" và "1" ra thì nó chả biết gì nữa hết. Điểm cộng duy nhất của máy tính là mặc dù ngu đần nhưng lại tuy u ám không có trí tuệ nhưng lại nhanh trí.
OK? Trí tuệ và nhanh trí là hai khái niệm hoàn toàn khác nhau. Máy tính có thể đếm, cộng trừ nhân chia hàng triệu con số trong nháy mắt, nhanh hơn bất kỳ một con người nhanh trí nào. Nhưng vì không thông minh nên nó cứ ngồi đợi con người ra lệnh, giao việc cho làm. Nếu máy tính mà thông minh thì chắc giờ này tôi đang làm việc nhà cho nó rồi, đâu rãnh mà ngồi đây viết linh ta cho các bạn đọc linh tinh.
Quay trở lại vấn đề, máy tính rất đơn giản. Còn con người thì đẳng cấp hơn nhiều, và cũng phức tạp hơn nhiều. Thế giới của máy tính chỉ có "0" và "1" thì thế giới con người còn có gái gú, rượu chè, hút sách, lừa lọc, giết hại nhau,..... Khi đã quen thuộc với những cái siêu phức tạp như vậy thì dường như chúng ta gặp rất nhiều khó khăn trong việc giao tiếp với thứ đơn giản như cái máy tính.
Cũng giống như hệ thống ngôn ngữ của người lớn thì phức tạp, có thể phát âm rất nhiều âm tiết tinh vi. Trong khi cổ họng của trẻ sơ sinh chỉ có vài từ "ă", "ú" và "â". Vì vậy mà đại đa số người lớn chúng ta không hiểu bọn con nít mới đẻ chúng nói gì, mà phải cần qua người phiên dịch là mẹ chúng. Bà mẹ này vừa hiểu được chúng, vừa hiểu được chúng ta nên trở thành cây cầu nối trong giao tiếp giữa hai bên. Ngôn ngữ Assembly, hay ASM cũng vậy. Nó vừa để con người có thể hiểu được, vừa để máy tính hiểu được.
Ngôn ngữ mà ngày xưa các cụ dùng để giao việc cho máy SNES có tên mã là 65816, 65C816. Gọi túm lại là Asm 65816. Đây là hệ máy 16 bit, vì có Register có độ rộng 16 bit. Nếu muốn hack/dịch game SNES thì kiểu gì cũng phải biết qua ngôn ngữ này. Những khái niệm cơ bản nhất về nó sẽ lần lượt xuất hiện trong bài này.
Điều đầu tiên cần phải biết là CPU 65816 thực hiện tuần tự các mệnh lệnh mà người ta viết sẵn theo thứ tự từ trên xuống, từ trước đến sau.
{Lệnh 1}
{Lệnh 2}
{Lệnh 3}
....
{Lệnh n}
Nó sẽ thực hiện lần lượt đúng như thứ tự trên, rất đơn giản đúng không?
Đầu tiên, mở FE4 bằng Stirling, ta sẽ thấy vô vàn con số ở hệ thập lục.
Những con số này chính các dòng lệnh để CPU thực thi. Mỗi một số thập lục ứng với một mệnh lệnh, và chúng đều có ý nghĩa riêng. CPU của máy 65816 (Snes) có tới 256 lệnh. Một số lệnh chủ yếu sẽ được giới thiệu bên dưới đây.
**III. Khái niệm cơ bản**
Dưới đây là những khái niệm cơ bản nhất mà bạn cần phải biết khi bước chân vào thế giới 65816.
**1. Endian**
Endian là thuật ngữ chỉ trật tự sắp xếp byte trong bộ nhớ của máy tính. Có 2 kiểu phổ biến là
**Big endian**và **Little endian**. Đối với kiểu Big endian thì dữ liệu được xếp theo trật tự thuận, chẳng hạn một chuỗi gồm 4 byte 03 6A 7F 45 thì sẽ được xếp là 03 6A 7F 45. Còn đối với kiểu Little endian thì trật tự này được xếp ngược là 45 7F 6A 03. Các hệ máy console cũ như NES, SNES, PlayStation, Megadrive... thì sử dụng kiểu Little endian, còn các hệ console đời mới như PlayStation 3, Xbox 360... đều sử dụng kiểu Big endian. Xác định kiểu endian là một khâu quan trọng trong việc hack dữ liệu. **2. Register**
Có thể nói, linh hồn của một phần cứng chính là các Register. Chữ "Regist" mang nghĩa "duy trì". Register là thứ duy trì một cái gì đó. Trong ngôn ngữ Asm thì Register duy trì các giá trị, cụ thể là các biến số.
Phần cứng 65816 có nhiều Register, trong số đó hay gặp là: A (Accumulator), X và Y (Index Register), DB (Data bank) và P (Status Register, hay còn gọi là Flag). Ngoài ra còn có PC (Program Counter) Register giữ địa chỉ của lệnh hiện tại, D (Direc page) Register, S (Stack) Register. Trong số này thì chỉ có A, X, Y là có thể chuyển đổi giữa 2 chế độ: 8 bit và 16 bit để giữ byte bằng cách set và reset các bit trong P Register. P là Register 8 bit, theo thứ tự là:
n: Negative
v: Overflow
m: Memory/Accumulator Select
x: Index Register select
d: Decimal
i: Interrupt
z: Zero
c: Carry
Từng bit khi được set (trạng thái "1") hay reset (trạng thái "0") thì sẽ cho tác dụng khác nhau. Chẳng hạn, nếu bit thứ 5 của P Flag được set (1) thì A Register là 8 bit, còn nếu là reset (0) thì A có chứa được giá trị 16 bit. Tương tự, X và Y Register chứa được giá trị 8 hay 16 bit phụ thuộc vào trạng thái của bit thứ 4 của P Flag.
**3. Addressing mode**
Trong ngôn ngữ Asm, có nhiều cách để chỉ định địa chỉ, và tất cả những cách này đều được gọi chung là Addressing mode. Chẳng hạn, lệnh LDA #$20 có ý nghĩa khác với LDA $20.
Lệnh đầu tiên là tải giá trị $20 (thập lục) vào A Register, còn lệnh sau tải giá trị (biến số) tại địa chỉ $20 vào A Register.
**a. Immediate**: kiểu định địa chỉ này được xác định với một giá trị cụ thể. Chẳng hạn
LDA #$FF ;tải giá trị $FF vào A
SEP #$30 ;đưa giá trị $30 vào P Flag
**b. Direct**: địa chỉ đích được hình thành bằng cách thêm một địa chỉ 8 bit vào Direct page Register (D). Chẳng hạn:
LDA $20 tải giá trị (biến số) tại địa chỉ $20
Nếu D = $1000 thì CPU sẽ đọc một byte (nếu A 8 bit) từ địa chỉ $1020.
**c. Absolute**: địa chỉ đích được hình thành bằng cách thêm một địa chỉ 16 bit vào DBR. Chẳng hạn:
DBR: $80
LDA $901C
Thì CPU sẽ tải một byte từ địa chỉ $88: 901C vào Accumulator (A).
**d. Absolute Long**: địa chỉ đích chính là địa chỉ được thể hiện trong lệnh.
LDA $808000 ; tải một byte từ địa chỉ $80:8000 vào A
LDA $FF9090 ; tải một byte từ địa chỉ $FF:9090 vào A
**d. Accumulator**: địa chỉ đích chính là A Register.
INC ; tăng giá trị của A lên 1
**e. Direct Indirect Indexed**: đây chính là nơi các Index Register (X và Y) vào cuộc. CPU sẽ tải 2 byte (16 bit) từ địa chỉ Direct page để tạo thành một địa chỉ nền kết hợp với DBR. Cuối cùng, giá trị của Y được thêm vào địa chỉ nền kia để tạo thành một địa chỉ 2 byte.
DBR: $80, D: $0020, Y: 0001
Memory dump (các giá trị trong bộ nhớ lúc này):
0030: 30 40 23 22 F4 22 23 1C
0038: 23 2D DD F4 FF FF FF FF
LDA ($10), Y
Sẽ cho địa chỉ sau:
Đầu tiên ta có $10 + giá trị tại D ($0020) là: $10 + $0020 = $0030
Nhìn vào bộ nhớ (Memory), lúc này ta thấy giá trị tại $30 và $31 là 30 và 40.
Do vậy địa chỉ sẽ là: $3040, nhưng vì SNES sử dụng kiểu Little endian nên địa chỉ đúng sẽ là $4030.
Kết hợp với DBR để có địa chỉ nền: $80:4030
Cuối cùng, tính thêm giá trị của Y vào: $80:4030 + $0001 = $80:4031
Như vậy, dòng lệnh trên
LDA ($10), Y
sẽ tải một byte từ địa chỉ $80:4031 vào trong A. Thường thì kiểu định địa chỉ này được dùng trong vòng lặp, khi Y được gia tăng mỗi lần để lấy một loạt dữ liệu trong Memory. Chẳng hạn
DBR: $80, D: $0020, Y: 0001
Memory dump:
0030: 30 40 23 22 F4 22 23 1C
0038: 23 2D DD F4 FF FF FF FF
LDA ($15), Y
INY
Địa chỉ DP = $0020 + $15 = $ 0035
Địa chỉ nền = DBR:<2 data-blogger-escaped-a="" data-blogger-escaped-byte="" data-blogger-escaped-ch="" data-blogger-escaped-t=""> = $80:2322
Địa chỉ đích = Địa chỉ nền + Y = $80:2323
INY: gia tăng giá trị của Y lên 1
Như vậy, 2 dòng lệnh trên sẽ liên tục tải các giá trị tại $80:2322, $80:2323, $80:2324,... vào A.
Thường thì giá trị tại D Register là 0, cho nên việc tính toán cũng đơn giản hơn.
**f. Direct Indirect Indexed Long**: kiểu xác định địa chỉ này về cơ bản thì giống kiểu e. Chỉ khác nhau ở chỗ nó sử dụng 3 byte tại địa chỉ DP thay vì 2 byte và không kết hợp với DBR. Ví dụ:
DBR: $80, D: $0020, Y: 0001
Memory dump:
0030: 30 40 23 22 F4 22 23 1C
0038: 23 2D DD F4 FF FF FF FF
LDA [$10], Y
Địa chỉ DP = $0020 + $10 = $0030
Địa chỉ nền = $23:4030.
Địa chỉ đích = địa chỉ nền + Y = $23:4030 + $0001 = $23:4031
**g. Direct Indexed Indirect**: sau khi tính địa chỉ Direct page, cộng với giá trị tại X. Sau đó lấy 2 byte tại địa chỉ này, kết hợp với DBR để tạo thành địa chỉ đích.
DBR: $80 D: $0020 X: $0004
Memory dump:
0020: FF 00 FF 09 33 33 09 88
0028: 08 76 66 36 D7 23 99 00
LDA ($02, X)
Địa chỉ DP = $02 + D = $0022
Sau đó kết hợp với X
Địa chỉ DP + X = $0026
2 bytes tại $0026 là (09 và 88), đảo ngược (Little endian) thành $8809, cuối cùng kết hợp với DBR:
DBR:$8809 = $80:8809
CPU sẽ tải giá trị tại địa chỉ $80:8809 vào A.
**h. Direct Indexed với X**: trong kiểu định địa chỉ này thì địa chỉ DP được cộng với giá trị tại X để tạo thành địa chỉ đích. Địa chỉ đích luôn nằm ở bank 0.
D: $0020 X: $0004
LDA $30, x
Địa chỉ DP = $30 + $0020 = $0050
Địa chỉ đích = địa chỉ DP + X = $00:0054
**i. Direct Indexed với Y**: giống kiểu h. nhưng khác nhau ở chỗ địa chỉ DP cộng với giá trị tại Y để hình thành địa chỉ đích. **j. Absolute Indexed với X**: giá trị 2 byte được cộng với X rồi kết hợp với DBR để hình thành địa chỉ đích.
DBR: $80 X: $0001
LDA $8000, X
Địa chỉ đích = DBR:($8000 + X) = $80:8001
LDA $6988, X
Địa chỉ đích = DBR:($6988 + X) = $80:6989
**k. Absolute Indexed với Y**: giống kiểu j. nhưng thay vì cộng với X thì ở đây cộng với Y. **l. Absolute Long Indexed với X**: địa chỉ đích được hình thành bằng cách cộng giá trị tại X với địa chỉ 3 byte.
X: $0001
LDA $808000, X ; tải một byte tại $80:8001 vào A
LDA $589112, X ; tải một byte tại $58:9113 vào A
**m. Absolute Long Indexed với Y**: giống kiểu l. nhưng thay vì cộng với X thì ở đây cộng với Y. **n. Program Counter Relative**: kiểu định địa chỉ này chỉ được dùng trong các lệnh phân nhánh. Giá trị 8 bit được thêm vào PC (Progtam Counter) để tạo thành địa chỉ đích mà lệnh thực thi nhảy đến. Giá trị 8 bit này có phạm vi từ -128 cho đến 127.
BRA $8005 ; phân nhánh sang địa chỉ $8005 trong phạm vi (-128 tới 127)
**o. Program Counter Relative Long**: giống kiểu n. nhưng phạm vi trong khoảng (0 tới 65535). Chỉ có lệnh BRL và PER dùng kiểu này. **p. Absolute Indirect**: địa chỉ đích được hình thành từ 2 byte.
Memory dump:
0000: 90 77 78 00 43 00 00 00
0008: 33 45 12 33 11 11 FF FF
JMP ($0008)
CPU sẽ lấy 2 byte tại $0008 là (33, 32), rồi nhảy sang địa chỉ $4533.
**q. Absolute Indexed Indirect**: giá trị 2 byte được cộng với X, sau đó 2 byte tại địa chỉ này được dùng để tạo nên địa chỉ đích.
X: 0001
Memory dump:
0000: 90 77 78 00 43 00 00 00
0008: 33 45 12 33 11 11 FF FF
JMP ($0008, X)
Ta có $0008 + X = $0009
Lấy 2 byte từ $0009 = 45 12
$1245 là địa chỉ mới.
**r. Direct Indirect**: 2 byte tại địa chỉ Direct Page được dùng để tạo thành địa chỉ 16 bit. Sau đó kết hợp với DBR để tạo thành địa chỉ đích 24 bit.
D: 0000 DBR: $80
Memory Dump:
0040: 50 00 80 00 22 23 33 44
0050: 60 21 21 21 22 55 55 66
LDA ($40)
Địa chỉ DP = $40 + D = $40
Địa chỉ 16 bit tại $40 = $0050
Địa chỉ đích = DBR:$0050 = $80:0050
**s. Direct Indirect Long**: 3 byte tại địa chỉ Direct page được dùng để tạo thành địa chỉ đích.
D: 0000 DBR: $80
Memory Dump:
0040: 50 00 80 00 22 23 33 44
0050: 60 21 21 21 22 55 55 66
LDA [$40]
Địa chỉ DP = $40 + D = $40
Địa chỉ đích = $80:0050
**4. Memory mapping và địa chỉ RAM/ROM**
Trong phần trước, ta đã gặp từ "bank".
Trong địa chỉ XX:YYZZ thì phần XX chính là bank.
ROM của SNES được tải trong phạm vi từ 00:0000 cho tới FF:FFFF.
Vị trí của ROM trong bộ nhớ khác nhau tùy thuộc vào chủng loại ROM (LoROM và HiROM).
Tham khảo thêm bài viết này (
[click vào](https://vozforums.com/redirect/index.php?link=http%3A%2F%2Fwiki.superfamicom.org%2Fsnes%2Fshow%2FMemory%2BMapping)).để biết thêm chi tiết.
Nếu không biết ROM đối tượng thuộc loại gì thì có thể dùng Lunar Address, chọn Auto-Detect Type rồi chọn đường dẫn đến ROM để biết. FE4 là HiROM.
Phần trong khoanh đỏ là để phần mềm xác định giúp ta loại ROM, phần trong khoanh vàng cho biết ROM có $200 header hay không. Phần trong khoanh màu lam là địa chỉ khi xem bằng Hex editor, còn trong khoanh màu lục là địa chỉ tương ứng trong Memory của máy SNES.
Như trong hình thì địa chỉ $223AC khi mở bằng Hex editor thì trong bộ nhớ của SNES, địa chỉ đó là $C2:21AC ($21AC ở bank C2).
**5. Giải thích về Debugger Snes9X**
Các phiên bản cũ của Debugger này không hỗ trợ ROM có header. Khi chạy cần phải cắt bỏ header đi. Tuy nhiên các bản sau này vẫn chạy được ROM có header.
Khi bắt đầu nạp game thì sẽ xuất hiện cửa sổ Debug Console với các chức năng như sau:
**Next Op**Hiển thị mệnh lệnh tiếp theo được thi hành **Step Into**Thi hành 1 lệnh tiếp theo. Khi có Sub routine thì sẽ nhảy đến Sub routine đó. **Step Over**Thi hành 1 lệnh tiếp theo. Khi có Sub routine thì sẽ thi hành liên tục đến khi kết thúc Sub routine đó **Step Out**Thi hành mệnh lệnh tiếp theo cho tới khi kết thúc Sub routine hiện tại **Skip**Bỏ qua 1 lệnh tiếp theo **Clear Text**Xóa hết dữ liệu log hiển thị trên cửa sổ Debug Console **Disassemble**Dis-assemble (phân tích ngược) từ địa chỉ bắt đầu/kết thúc đã chỉ định **Run**Chạy game cho đến khi gặp phải Break point **Reset ROM**Có gì khó hiểu? **Frame Adv**Thi hành số frame chỉ định (*1) **Vector Info**Hiển thị Vector của CPU và APU (bộ xử lý âm thanh) **Sprite Status**Hiển thị thông tin liên quan đến sprite mà EMU đang hiển thị **APU State APU** **Sample Addr**Hiển thị địa chỉ mẫu mà APU đang duy trì **Show Hex**Gọi Hex Editor. Từ đây có thể xem được ROM, RAM, VRAM, ARAM và SRAM **Dump RAM**Trích xuất RAM bắt đầu từ địa chỉ chỉ định, với số byte chỉ định **Dump Palette**Hiển thị palette **What’s Used**Hiển thị chức năng hiển thị mà ROM hiện đang sử dụng(VRAM, BG,..) **What’s Missing** **Trace From**Chỉ định địa chỉ bắt đầu ghi log **Reset Debug**Xóa thông tin debug **BreakPoints**Chỉ định Break point **Exec**Break (dừng) ngay trước khi thực hiện mệnh lệnh ở địa chỉ được chỉ định **Read**Break (dừng) ngay trước khi đọc từ địa chỉ được chỉ định **Write**Break (dừng) ngay trước khi ghi vào địa chỉ được chỉ định **Logging**Chọn xuất log: CPU, APU, SA1 hay Sound DSP **Special Tracing**Chọn xuất log: DMA, HDMA, VRAM, DSP-1 hay Unknown Register **CPU Trace Options**Tùy chọn khi xuất log **Trace Once**Không xuất log đối với lệnh đã thực hiện một lần rồi **Split**Tách file log **Tabbed Output**Xuất với phân khu tab **Misc Options**Tùy chọn khác **Tilde FF**Chọn cho phép Turbo mode với phím "~" hay không **Alt Menu Behavior**Không hiển thị thanh Menu của Emu **Auto Usage Map Usage**Tự động xuất Map **Usage Maps**Usage là một dạng log ghi lại các địa chỉ đã đọc và địa chỉ đã thi hành lệnh **Open Usage**Khỏi giải thích **Merge Usage**Khỏi giải thích **Save Usage**Khỏi giải thích **Gen Offsets**Xuất log Usage dưới dạng txt **Hex Editor**Gọi Memory Editor. Cần cẩn thị vì đôi khi cuộn xuống địa chỉ bên dưới dễ bị đơ. **Viewing**:
ROM: nếu là LoROM thì hiển thị phạm vi từ 80:8000~BF:FFFF, nếu là HiROM thì hiển thị từ C0:0000~FF:FFFF
RAM: thể hiện phạm vi của RAM từ 7E:0000~7F:FFFF
VRAM: thể hiện phạm vi của Video RAM từ 0000~FFFF
ARAM: thể hiện phạm vi của Audio RAM từ 0000~FFFF
Freeze: giữ cố định, không cho cập nhật các giá trị (biến số) trong phạm vi RAM đã chọn.
Save ROM: ghi lại mọi thay đổi sau khi chỉnh sửa vào ROM.
Open TBL : mở file table với định dạng .tbl. Tuy nhiên chỉ hỗ trợ kiểu encoding ascii chứ chưa hỗ trợ tiếng Nhật hay Unicode.
(*1): giả lập Snes9X có tốc độ khung 60 fps (1 frame là 0.016 giây), nhưng Debuger chỉ có tốc độ 30 fps.
**IV. Phần thực chiến** **1. Tìm cheat code**
Hẳn là phần nhiều những người chơi game Snes đều đã một vài lần sử dụng cheat code. Bằng cách nhập một đoạn code vào SNES, người chơi có được những khả năng phi thường như bất tử, bắn không bao giờ hết đạn, chạy nhanh gấp 3 bình thường,...
Cũng có nhiều người căm ghét việc dùng cheat code. Tuy nhiên, để hiểu được cặn kẽ việc hack game thì cần phải hiểu rõ về cheat code. Hai yếu tố này có quan hệ mật thiết với nhau, như giải thích dưới đây.
Dữ liệu game luôn có 2 kiểu: kiểu cố định và kiểu biến động. Kiểu cố định là dữ liệu luôn không đổi, nằm trong ROM và kiểu biến động chính là biến số được lưu và cập nhật thường xuyên trong RAM. Đối với FE4, các dữ liệu như binh chủng, chỉ số ban đầu của nhân vật là kiểu cố định. Tuy nhiên, trong quá trình chơi thì nhân vật sẽ Level up, các chỉ số như HP, sức mạnh, phòng vệ được tăng dần. Đây chính là biến số.
Tất cả các game SNES đều lưu biến số trong RAM từ địa chỉ 7E:0000~7F:FFFF.
Chính vì vậy, ta hay thấy cheat code của game SNES đều có dạng 7EXXYYZZ hoặc 7FXXYYZZ, trong đó 7EXXYY là địa chỉ của biến số, còn ZZ là giá trị của biến.
Chẳng hạn, nhân vật có chỉ số STR là 15 ($0F). Địa chỉ quản lý chỉ số này nằm ở $7E1A00. Tại địa chỉ này, biến số sẽ là 0F. Bằng cách nhập code $7E1A001A thì máy Snes/giả lập Snes sẽ luôn giữ cho biến số tại $7E1A00 có giá trị $1A, tức nhân vật luôn có chỉ số STR là 26.
Như vậy hẳn bạn đã rõ nguyên lý của cheat code.
Làm cách nào để tìm được cheat code cho một game cụ thể? Có rất nhiều trang mạng đăng tải cheat code này. Hoặc bạn cũng có thể tự tìm bằng chính giả lập Snes9X. Càng biết nhiều cheat code tức là bạn càng nắm được nhiều địa chỉ biến số của game. Càng hiểu rõ các địa chỉ này thì việc hack game càng suông sẻ.
Bây giờ thử dùng Snes9X để tìm địa chỉ quản lý chỉ số kinh nghiệm (EXP) của nhân vật Siguld.
Chơi từ đầu, ta thấy Siguld có chỉ số EXP là 0, Level 5, chỉ số STR là 5, MGC là 0, SK là 11,...
Từ cửa sổ Snes9X, chọn Cheat --> Search for New cheats
Tích vào ô =(Equal to), ô Entered Value và gõ "0" (chỉ số EXP hiện tại) vào khung Enter a Value (nhập một giá trị) bên dưới rồi Search. Chương trình tìm được rất nhiều địa chỉ có giá trị "0" tại thời điểm hiện tại, trong số đó có địa chỉ quản lý EXP.
Chọn đánh một tên địch ở gần nhất.
Sau khi đánh chết địch, Siguld nhận được 22 EXP.
Lúc này lại chọn Cheat --> Search for New cheats để vào cửa sổ lúc nãy.
Gõ "22" (giá trị EXP hiện tại, sau khi hạ tên địch) vào ô Entered Value, click vào Search và sẽ được một số ít kết quả hơn lúc nãy. Kết quả lúc này là một loạt địa chỉ có biến số "0" lúc trước, nay đã trở thành "22".
Tiếp tục hạ một tên địch khác. Lúc này Siguld được 44 EXP. Làm tương tự bước tìm kiếm bên trên với giá trị "44" và được kết quả tại $7E2D4D.
Kết quả lần này chỉ có 1 địa chỉ duy nhất. Đây là địa chỉ chứa giá trị từ 0 --> 22 --> 44. Để kiểm chứng, có thể nhập địa chỉ này vào cửa sổ Cheat --> Game Genie, Pro-Action Replay Codes --> Cheat Entry and Editor. Nếu nhập 7E2D4D05 vào ô "Enter Cheat Code" và chỉ số EXP của Siguld luôn là 05, bất chấp sau khi hạ lính địch thì đích thị $7E2D4D chính là địa chỉ quản lý EXP.
Bằng cách dò tìm tương tự, ta có các địa chỉ quản lý các chỉ số khác của nhân vật này như sau.
Max HP: 7E2D40
STR: 7E2D41
MGC: 7E2D42
SK: 7E2D43
SPD: 7E2D44
DEFEND: 7E2D45
MGC DEFEND: 7E2D46
LUCK: 7E2D47
LEVEL: 7E2D49
EXP: 7E2D4D
Có thể tham khảo thêm các địa chỉ khác tại trang này (
[click vào](https://vozforums.com/redirect/index.php?link=http%3A%2F%2Fwww.gamefaqs.com%2Fsnes%2F564404-fire-emblem-seisen-no-keifu%2Ffaqs%2F14784)) **2. Hack với kiến thức ASM**
Như vậy ta đã tìm được cheat code cho các chỉ số của nhân vật. Tuy nhiên, việc sử dụng cheat code có hạn chế là chỉ sử dụng được một giá trị tại một thời điểm, và ngoài việc giữ cố định giá trị thì nó không còn tác dụng gì khác. Nếu muốn sau khi đánh địch, Siguld nhận được XX EXP, hoặc sau khi đánh địch, không tăng EXP mà lại Level up hoặc tăng các chỉ số khác thì cheat code không làm được. Lúc này cần đến kiến thức ASM để giải quyết.
Reset game, chơi lại từ đầu và tích vào ô Logging, bỏ tích ô Trace Once khi bắt đầu đánh địch.
Khi đánh địch xong, bỏ tích ở ô Logging và Debuger sẽ ghi lại log (lịch sử các câu lệnh đã thực thi) vào thư mục Logs. Mở file log bằng Text editor, tìm kiếm "7E:2D4D" (địa chỉ quản lý EXP mà ta đã biết từ trước) trong file log, sẽ tìm thấy kết quả
$84/AA48 BD 09 00 LDA $0009,x[$7E:2D49] A:2D40 X:2D40 Y:4EB5 P:envmxdizc
$84/AA4B 29 FF 00 AND #$00FF A:0205 X:2D40 Y:4EB5 P:envmxdizc
$84/AA4E C9 1E 00 CMP #$001E A:0005 X:2D40 Y:4EB5 P:envmxdizc
$84/AA51 B0 5A BCS $5A [$AAAD] A:0005 X:2D40 Y:4EB5 P:eNvmxdizc
$84/AA53 E2 20 SEP #$20 A:0005 X:2D40 Y:4EB5 P:eNvmxdizc
$84/AA55 BD 0D 00 LDA $000D,x[$7E:2D4D] A:0005 X:2D40 Y:4EB5 P:eNvMxdizc
$84/AA58 18 CLC A:0000 X:2D40 Y:4EB5 P:envMxdiZc
$84/AA59 6F 74 05 00 ADC $000574[$00:0574] A:0000 X:2D40 Y:4EB5 P:envMxdiZc
$84/AA5D C9 64 CMP #$64 A:0016 X:2D40 Y:4EB5 P:envMxdizc
$84/AA5F B0 0D BCS $0D [$AA6E] A:0016 X:2D40 Y:4EB5 P:eNvMxdizc
$84/AA61 9D 0D 00 STA $000D,x[$7E:2D4D] A:0016 X:2D40 Y:4EB5 P:eNvMxdizc
$84/AA64 C2 20 REP #$20 A:0016 X:2D40 Y:4EB5 P:eNvMxdizc
$84/AA66 A9 00 00 LDA #$0000 A:0016 X:2D40 Y:4EB5 P:eNvmxdizc
$84/AA69 FA PLX A:0000 X:2D40 Y:4EB5 P:envmxdiZc
$84/AA6A 28 PLP A:0000 X:4EB5 Y:4EB5 P:envmxdizc
$84/AA6B AB PLB A:0000 X:4EB5 Y:4EB5 P:envmxdizc
$84/AA6C 18 CLC A:0000 X:4EB5 Y:4EB5 P:envmxdizc
$84/AA6D 6B RTL A:0000 X:4EB5 Y:4EB5 P:envmxdizc
Dòng đầu tiên
$84/AA48 BD 09 00 LDA $0009,x[$7E:2D49]
cho thấy tại địa chỉ $84:AA48 có câu lệnh LDA $0009, X
Dạng số thập lục của dòng lệnh này là BD 09 00.
Lúc này giá trị tại X đang là 2D40, nên câu lệnh kia có ý nghĩa là tải một byte từ địa chỉ $7E:2D49 vào Accumulator (A). $7E:2D49 chính là địa chỉ quản lý Level của Siguld. Khi bật chức năng Show Hex, chọn xem RAM ở địa chỉ $7E:2D49 thì ta thấy giá trị tại đây là 05, ứng với mức Level của Siguld là 5.
Những dòng tiếp theo
$84/AA4B 29 FF 00 AND #$00FF
Dòng này cho biết giá trị (Level của Siguld) đã tải vào A sẽ được AND với giá trị $FF. AND là một phép tính logic theo bit. Có thể tham khảo thêm các trang mạng để biết chi tiết.
$84/AA4E C9 1E 00 CMP #$001E
Tại địa chỉ $84:AA4E, so sánh kết quả giá trị Level của Siguld sau khi AND với 30 ($1E).
$84/AA51 B0 5A BCS $5A [$AAAD]
Tại địa chỉ $84:AA51 cho biết, nếu kết quả của so sánh trên = 30 thì rẻ nhánh sang địa chỉ $84:AAAD. Nếu nhìn vào nội dung ở địa chỉ $84:AAAD thì ta biết đây là nơi thực hiện lệnh phụ, xử lý để Level của nhân vật không được tăng thêm.
$84/AA53 E2 20 SEP #$20
Set bit 5 của P Flag thành 1, biến sức chứa của A Register thành 8 bit.
$84/AA55 BD 0D 00 LDA $000D,x[$7E:2D4D]
Tải một byte (8 bit) tại $7E:2D4D (địa chỉ quản lý EXP của Siguld) vào A.
$84/AA58 18 CLC
Xóa Carry Flag. Luôn thực hiện lệnh này trước lệnh ADC.
$84/AA59 6F 74 05 00 ADC $000574[$00:0574]
Thêm giá trị tại $000574 vào A. $00:0574 là địa chỉ quản lý biến số EXP mà nhân vật nhận được sau khi đánh địch. Số này sẽ biến động phụ thuộc vào quân địch mà bạn đánh. Trùm và lính địch Level càng cao thì số này càng lớn, tức EXP nhận được càng nhiều.
$84/AA5D C9 64 CMP #$64
So sánh kết quả trên với 100 ($64).
$84/AA5F B0 0D BCS $0D [$AA6E]
Nếu kết quả so sánh trên bằng 100 thì nhảy đến địa chỉ $84:AA6E.
$84/AA61 9D 0D 00 STA $000D,x[$7E:2D4D]
Ghi giá trị trong A vào địa chỉ $7E:2D4D. Đây là địa chỉ quản lý EXP của Siguld.
Như vậy, qua 4 dòng lệnh đầu tiên thì ta hiểu: nếu Level của Siguld = 30 thì nhân vật này sẽ không được tăng EXP sau khi đánh địch. Mức thiết lập Max Level của FE4 là 30. Và tuy hạ cùng một tên địch, nhưng nếu Level của nhân vật càng cao thì EXP nhận được càng thấp.
Nếu EXP của nhân vật = 100 thì sẽ Level up và reset lại EXP = 0.
Nếu muốn sau khi đánh, nhân vật luôn nhận được 13 EXP, bất kể ở Level nào thì chỉ cần sửa dòng
ADC $000574
thành
ADC #$0D là được.
Dùng Lunar Address, chuyển đổi $84:AA59 sang địa chỉ PC, ta được $04AC59. Dùng Stirling để biên tập 6F 74 05 00 tại $04AC59 thành 69 0D EA EA thì dù sau khi đánh địch, Siguld luôn nhận được 13 EXP.
69 chính là mã thập lục của lệnh ADC với hằng số. EA chính là mã thập lục (hex) của lệnh NOP (không làm gì cả). Vì giá trị cũ là 6F 74 05 00 chiếm 4 byte, trong khi giá trị mới chỉ có 2 byte (69 0D) nên 2 byte sau phải được vô hiệu hóa bằng lệnh "không làm gì cả".
Nếu muốn Siguld luôn Level up sau mỗi lần đánh thì thay ADC #$0D (69 0D) thành ADC #$64 (69 64) là được. Lúc này EXP của Siguld luôn ở mức 100 nên chỉ cần sau trận đánh là được Level up.
Nếu muốn sau trận đánh, chỉ số MHP của Siguld trở thành bằng đúng với số EXP nhận được thì chỉ cần thay
STA $000D,X[$7E:2D4D]
thành
STA $0001,X[$7E:2D40]
là được. Lúc này giá trị EXP nhận được sẽ không được ghi vào địa chỉ quản lý EXP nữa mà ghi vào địa chỉ quản lý MHP ($7E:2D40). Cụ thể, tại $04AC61 ($84:AA61), thay 9D 0D 00 thành 9D 00 00 là được.
Tương tự, ta có thể biến số EXP nhận được thành các chỉ số khác.
Trên đây chỉ là một vài ứng dụng nhỏ với kiến thức ASM. Với ASM, bạn có thể làm mọi điều trong game, những điều mà không một cheat code hay một chương trình nào khác có thể làm được. Bạn hoàn toàn có thể biến nó thành một game hoàn toàn khác với ASM. Bạn có thể khiến số lần sử dụng của vũ khí tăng lên sau mỗi lần đánh, thay vì giảm xuống, hay HP tăng lên khi bị trúng đòn. Những điều phi lý/phi phàm/phi thường này chỉ có thể thực hiện khi đã nắm rõ ASM, cho nên việc chuyển ngôn ngữ của game sang một thứ tiếng nào đó chỉ là chuyện nhỏ khi bạn đã thấu rõ ngôn ngữ lập trình này.
Bài viết của Asm65816 © 2016
Đăng tại
Đăng tại
Chào Ad! Bấy lâu nay mình cũng thử cheat mấy game NES ,chẳng hạn như game contra 1,ReplyDelete
Mã cheat 30 mạng từ tay bấm 4 nút xưa : At the Title Screen press Up, Up, Down, Down, Left, Right, Left, Right, B, A, Start.
link
https://www.gamefaqs.com/nes/563399-contra/cheats
Còn chơi trên PC bằng giả lập Nestopia khi vào game thì chọn options>cheats>add>trong thẻ Raw dưới dòng address ,gõ mã code : 0032 ( không không ba hai ) ,ở dòng value : có thể gõ từ 4 đến 99 là cheat mạng.VD: chọn 30 đi cho tương ứng với tay bấm bốn nút trên.
Còn khi ta vào web : http://gamehacking.org/
thì mã lại khác nữa.
Mình muốn hỏi add có mối liên hệ nào từ những mã hack trên không ? ( cùng hack về mạng 1 trò chơi nhưng mã hack khác nhau ) Nếu có thể hack quay 1 clip ngắn có thiết minh để mình học với.Ý của mình là các mã đó thực ra là 1 nếu chuyển đổi hệ đếm HEX ,DEC ...?

Server: GSE

Cache-Control: private, max-age=0

X-XSS-Protection: 1; mode=block


text:
Danh mục
0944.500.100
Trang chủ
Gửi tin nhắn
0
Giỏ hàng
0944.500.100
Xem Bản Đồ
Scroll top
Hotline:
0944.500.100
Giỏ hàng
0
sản phẩm
Đăng nhập
Tài khoản & Đơn hàng
Đăng nhập
Đăng nhập
Quên mật khẩu?
Đăng ký
Danh mục sản phẩm
Xả hàng giá sốc
SALE
Dàn Karaoke
Amply karaoke
Loa Karaoke
Đầu Karaoke
Cục đẩy
Android TV Box
TV Box Ram 1GB
TV Box Ram 2GB
TV Box Ram 3GB
VNPT
Himedia
Kiwibox
Vinabox
Enybox
Eweat
Vibox
beelink
Egreat
Zidoo
Zappiti
Dune HD
Đầu Phát HD
Himedia
Egreat
Zidoo
Zappiti
Dune HD
Loa Bluetooth
JBL
PHỤ KIỆN
Enybox
Vibox
CAMERA IP
TIN TỨC
Kho ứng dụng
Hướng dẫn kỹ thuật
Trang chủ
»
Kho ứng dụng
/
Ứng dụng mạng xã hội
Ứng dụng mạng xã hội
(Tìm thấy
4
ứng dụng)
viber
zalo
Facebook
google
Kho ứng dụng
Ứng dụng xem TV
Ứng dụng xem phim
Ứng dụng Karaoke
Ứng dụng mạng xã hội
Chương trình xem bóng đá
Chia sẻ màn hình điện thoại
chương trình chạy video
Danh mục sản phẩm
Xả hàng giá sốc
SALE
Dàn Karaoke
Amply karaoke
Loa Karaoke
Đầu Karaoke
Cục đẩy
Android TV Box
TV Box Ram 1GB
TV Box Ram 2GB
TV Box Ram 3GB
VNPT
Himedia
Kiwibox
Vinabox
Enybox
Eweat
Vibox
beelink
Egreat
Zidoo
Zappiti
Dune HD
Đầu Phát HD
Himedia
Egreat
Zidoo
Zappiti
Dune HD
Loa Bluetooth
JBL
PHỤ KIỆN
Enybox
Vibox
CAMERA IP
TIN TỨC
Kho ứng dụng
Hướng dẫn kỹ thuật
100% sản phẩm
chính hãng - giá tốt
Đổi trả hàng
Trong vòng 7 ngày
Giao hàng miễn phí
trong vòng 24 giờ
Thanh toán
nhanh chóng & an toàn
THÔNG TIN CHUNG
Giới thiệu về Techbox.vn
Điều khoản & điều kiện mua bán
Chính sách bảo mật
Cẩm nang mua sắm
Hỏi đáp
Quy chế sàn giao dịch
HỖ TRỢ KHÁCH HÀNG
Giao hàng & Nhận hàng
Cách thức thanh toán
Hướng dẫn đặt hàng
Chính sách đổi trả hàng
Bảo hành
CHĂM SÓC KHÁCH HÀNG
Hotline: 0944.500.100 (Mr. Nguyễn Bính)
Góp ý: 0945 112 654 ( Ms Linh)
Đăng ký nhận tin
Kết nối với chúng tôi:

WARC-Type: response

Content-Type: application/http; msgtype=response

WARC-Identified-Payload-Type: text/html

Cache-Control: private

Content-Type: text/html; charset=utf-8

X-Powered-By-Plesk: PleskWin

Connection: close


text:
Các tỉnh mở thưởng hôm nay
XSMN » XSCT » XSCT 28-3-2018 - Xổ số Cần Thơ thứ 4
Kết quả xổ số Cần Thơ sớm nhất: XS CT gửi 6022 (1000đ)
Xổ số miền bắc
Xổ số điện toán
Xổ số miền nam
- Xổ số Bạc Liêu
- Xổ số Bến Tre
- Xổ số Vũng Tàu
- Xổ số Cà Mau
- Xổ số Đồng Tháp
- Xổ số Cần Thơ
- Xổ số Đồng Nai
- Xổ số Sóc Trăng
- Xổ số An Giang
- Xổ số Bình Thuận
- Xổ số Tây Ninh
- Xổ số Bình Dương
- Xổ số Trà Vinh
- Xổ số Vĩnh Long
- Xổ số Bình Phước
- Xổ số Hậu Giang
- Xổ số Long An
- Xổ số Đà Lạt
- Xổ số Kiên Giang
- Xổ số Tiền Giang
- Xổ số TP Hồ Chí Minh
Tin mới nhất
- Tp Hồ Chí Minh: Tai nạn liên tiếp, 1 người chết thảm, 2 người nguy kịch
- Xe điên gây tai nạn liên hoàn, 2 nữ sinh tử vong thương tâm
- Xe máy va chạm với xe đầu kéo, 2 vợ chồng chết thương tâm
- Va chạm xe chở lợn, 2 vợ chồng trên xe tải đông lạnh bị thương nặng
- Xe bán tải tông dải phân cách trong đêm, 5 người thương vong
Thống kê kết quả xổ số
Liên hết hay
-
Nạp tiền điện thoại online nhanh chóng, đơn giản, tiện lợi và được chiết khấu 5-7% mệnh giá thẻ

markdown:
**Các tỉnh mở thưởng hôm nay**
|
|[Đắc Lắc](/mien-trung/xsdlk-ket-qua-xo-so-dac-lac-p25.html) [Miền Bắc](/xsmb-sxmb-xstd-xshn-kqxsmb-ket-qua-xo-so-mien-bac.html) [Vũng Tàu](/mien-nam/xsvt-ket-qua-xo-so-vung-tau-p22.html) [Quảng Nam](/mien-trung/xsqnm-ket-qua-xo-so-quang-nam-p34.html) [Điện toán](/ket-qua-xo-so-dien-toan.html) [Bạc Liêu](/mien-nam/xsbl-ket-qua-xo-so-bac-lieu-p3.html) [Max 4D](/kqxs-max4d-ket-qua-xo-so-dien-toan-tu-chon-so-max-4d-vietlott-ngay-hom-nay.html) [Power 6/55](/kqxs-power-6-55-ket-qua-xo-so-power-6-55-vietlott-ngay-hom-nay.html)
##
[XSMN](/xsmn-sxmn-kqxsmn-ket-qua-xo-so-mien-nam.html) » [XSCT](/mien-nam/xsct-ket-qua-xo-so-can-tho-p9.html) » [XSCT 28-3-2018](https://xoso.me/mien-nam/xsct-28-3-2018-ket-qua-xo-so-can-tho-ngay-28-3-2018-p9.html) - Xổ số Cần Thơ thứ 4
|Giải tám|37
|Giải bảy|747
|Giải sáu||
|2772 |
|8771 2104
|Giải năm|7013
|Giải bốn||
|18275 |
|93991 |
|57365 88099
|
|02076 |
|92613 68492
|Giải ba||
|56048 60372
|Giải nhì|82647
|Giải nhất|86378
|Đặc biệt|044670
Kết quả
**xổ số Cần Thơ** sớm nhất: **XS CT** gửi **6022 (1000đ)**
|Đầu||Đuôi|
0 |4|
1 |3,3|
2
3 |7|
4 |7,7,8|
5
6 |5|
7 |0,1,2,2,5,6,8|
8
9 |1,2,9|
|Đầu||Đuôi|
|7|0
|7,9|1
|7,7,9|2
|1,1|3
|0|4
|6,7|5
|7|6
|3,4,4|7
|4,7|8
|9|9
[Xổ số miền bắc](/xsmb-sxmb-xstd-xshn-kqxsmb-ket-qua-xo-so-mien-bac.html)
[Xổ số điện toán](/ket-qua-xo-so-dien-toan.html)
[Xổ số miền nam](/xsmn-sxmn-kqxsmn-ket-qua-xo-so-mien-nam.html)
-
[Xổ số Bạc Liêu](/mien-nam/xsbl-ket-qua-xo-so-bac-lieu-p3.html)
-
[Xổ số Bến Tre](/mien-nam/xsbt-ket-qua-xo-so-ben-tre-p4.html)
-
[Xổ số Vũng Tàu](/mien-nam/xsvt-ket-qua-xo-so-vung-tau-p22.html)
-
[Xổ số Cà Mau](/mien-nam/xscm-ket-qua-xo-so-ca-mau-p8.html)
-
[Xổ số Đồng Tháp](/mien-nam/xsdt-ket-qua-xo-so-dong-thap-p12.html)
-
[Xổ số Cần Thơ](/mien-nam/xsct-ket-qua-xo-so-can-tho-p9.html)
-
[Xổ số Đồng Nai](/mien-nam/xsdn-ket-qua-xo-so-dong-nai-p11.html)
-
[Xổ số Sóc Trăng](/mien-nam/xsst-ket-qua-xo-so-soc-trang-p17.html)
-
[Xổ số An Giang](/mien-nam/xsag-ket-qua-xo-so-an-giang-p2.html)
-
[Xổ số Bình Thuận](/mien-nam/xsbth-ket-qua-xo-so-binh-thuan-p7.html)
-
[Xổ số Tây Ninh](/mien-nam/xstn-ket-qua-xo-so-tay-ninh-p18.html)
-
[Xổ số Bình Dương](/mien-nam/xsbd-ket-qua-xo-so-binh-duong-p5.html)
-
[Xổ số Trà Vinh](/mien-nam/xstv-ket-qua-xo-so-tra-vinh-p20.html)
-
[Xổ số Vĩnh Long](/mien-nam/xsvl-ket-qua-xo-so-vinh-long-p21.html)
-
[Xổ số Bình Phước](/mien-nam/xsbp-ket-qua-xo-so-binh-phuoc-p6.html)
-
[Xổ số Hậu Giang](/mien-nam/xshg-ket-qua-xo-so-hau-giang-p13.html)
-
[Xổ số Long An](/mien-nam/xsla-ket-qua-xo-so-long-an-p16.html)
-
[Xổ số Đà Lạt](/mien-nam/xsdl-ket-qua-xo-so-da-lat-p10.html)
-
[Xổ số Kiên Giang](/mien-nam/xskg-ket-qua-xo-so-kien-giang-p15.html)
-
[Xổ số Tiền Giang](/mien-nam/xstg-ket-qua-xo-so-tien-giang-p19.html)
-
[Xổ số TP Hồ Chí Minh](/mien-nam/xshcm-ket-qua-xo-so-thanh-pho-ho-chi-minh-p14.html)
**Tin mới nhất** [Tp Hồ Chí Minh: Tai nạn liên tiếp, 1 người chết thảm, 2 người nguy kịch](https://xoso.me/tin-tuc/tp-ho-chi-minh-tai-nan-lien-tiep-1-nguoi-chet-tham-2-nguoi-nguy-kich-n6918.html) [Xe điên gây tai nạn liên hoàn, 2 nữ sinh tử vong thương tâm](https://xoso.me/tin-tuc/xe-dien-gay-tai-nan-lien-hoan-2-nu-sinh-tu-vong-thuong-tam-n6917.html) [Xe máy va chạm với xe đầu kéo, 2 vợ chồng chết thương tâm](https://xoso.me/tin-tuc/xe-may-va-cham-voi-xe-dau-keo-2-vo-chong-chet-thuong-tam-n6916.html) [Va chạm xe chở lợn, 2 vợ chồng trên xe tải đông lạnh bị thương nặng](https://xoso.me/tin-tuc/va-cham-xe-cho-lon-2-vo-chong-tren-xe-tai-dong-lanh-bi-thuong-nang-n6915.html) [Xe bán tải tông dải phân cách trong đêm, 5 người thương vong](https://xoso.me/tin-tuc/xe-ban-tai-tong-dai-phan-cach-trong-dem-5-nguoi-thuong-vong-n6914.html)
## Thống kê kết quả xổ số
**Liên hết hay**
-
Nạp tiền điện thoại online nhanh chóng, đơn giản, tiện lợi và được chiết khấu 5-7% mệnh giá thẻ

Server: nginx

Vary: Accept-Encoding

Content-Type: text/html; charset=UTF-8


text:
(Biển Đảo) - Báo Bưu điện Hoa Nam buổi sáng (SCMP) ngày 1.7 đặt câu hỏi khi bị Mỹ hủy lời mời tham gia cuộc tập trận Vành đai Thái Bình Dương (RIMPAC 2018), thì liệu Trung Quốc có “quậy sóng” Biển Đông?
Tờ báo Hồng Kông nêu hai quần đảo giàu tài nguyên Trường Sa, Hoàng Sa thuộc chủ quyền Việt Nam trên Biển Đông vẫn là điểm nóng chính, trong việc Trung Quốc ngang ngược tuyên bố chủ quyền hầu như toàn bộ Biển Đông, bất chấp Bắc Kinh cách vùng biển này hàng ngàn cây số.
Lãnh đạo Trung Quốc tuyên bố không để mất một tấc đất của tổ tiên
Tuần qua, khi tiếp Bộ trưởng Quốc phòng Mỹ James Mattis ở Bắc Kinh, Chủ tịch Tập Cận Bình tuyên bố Trung Quốc yêu chuộng hòa bình nhưng không chấp nhận “nhường một tấc đất nào của tổ tiên truyền đời cho con cháu”.
Vẫn theo SCMP, sau chuyến thăm của ông Mattis, Trung Quốc dù “vẫn bám chặt vào súng” về chuyện tranh chấp chủ quyền, đã hoàn toàn không đề cập đến việc không được mời dự RIMPAC trong những bài báo mang giọng điệu tích cực, đề cao vấn đề hai lực lượng quân sự Trung – Mỹ sẵn sàng duy trì đối thoại cởi mở chân thành, cùng sự chín chắn trong quan hệ quân sự hai bên “vốn cần thiết cho quan hệ song phương và để kiểm soát các nguy cơ”.
RIMPAC 2018 có chủ đề “Khả năng, thích ứng, đối tác”, diễn ra từ ngày 27.6 đến 2.8, tức kéo dài 5 tuần ở vùng biển quanh quần đảo Hawaii và phía nam bang California của Mỹ. Đây là cuộc tập trận hải quân quốc tế lớn nhất thế giới, do Mỹ dẫn đầu và tổ chức hai năm/lần.
Năm nay RIMPAC có hơn 47 tàu nổi và 5 tàu ngầm, hơn 200 máy bay cùng 25.000 binh lính của 26 quốc gia cùng tập luyện tuần tra.
Nhưng hải quân Quân đội giải phóng nhân dân Trung Quốc (PLAN) không được mời đến. Đây là một cách phản ứng của Mỹ, trước việc Trung Quốc xây dựng và quân sự hóa các đảo nhân tạo trên các quần đảo Trường Sa, Hoàng Sa thuộc chủ quyền Việt Nam trên Biển Đông.
Quyết định hủy lời mời Trung Quốc dự RIMPAC 2018 của Mỹ được mô tả là “phản ứng ban đầu”, có nghĩa Mỹ sẽ còn những phản ứng khác, nếu Trung Quốc không thay đổi thái độ.
Mỹ phản đối việc Bắc Kinh xây sân bay, dàn hệ thống radar và cơ sở hải quân ở vùng biển chiến lược này gây đe dọa cho quyền tự do đi lại của tàu thuyền quốc tế.
Vài tháng gần đây, Trung Quốc đã tăng cường hiện diện quân sự trên Biển Đông. Không quân Quân đội giải phóng nhân dân Trung Quốc (PLAAF) hồi giữa tháng 5 đã tổ chức một sư đoàn máy bay ném bom hạng nặng có thể mang đầu đạn hạt nhân H-6K tập cất – hạ cánh trên đảo Phú Lâm (thuộc quần đảo Hoàng Sa của Việt Nam nhưng bị Trung Quốc chiếm đóng phi pháp).
Bộ Quốc phòng Trung Quốc tuyên bố vụ diễn tập cất – hạ cánh chỉ là một phần cuộc tập trận giả lập tấn công các mục tiêu trên biển, “nhằm chuẩn bị chiến đấu vì biển Nam Hải”, cách Trung Quốc gọi Biển Đông.
Trung Quốc cũng dàn tên lửa hành trình chống hạm YJ-12B và tên lửa đất đối không HQ-9B trên quần đảo Trường Sa, tăng khả năng đánh chặn tàu chiến và máy bay Mỹ nếu cần thiết. Các loại vũ khí này cũng nhằm cảnh cáo các nước khác đòi chủ quyền Biển Đông.
Trong 5 năm qua, Trung Quốc cũng đã xây các đảo nhân tạo trái phép trên Biển Đông, gây ra tranh chấp với nhiều quốc gia và phớt lờ các luật quốc tế và phán quyết hồi tháng 7.2016 – của Tòa án trọng tài thường trực The Hague-vốn tuyên Trung Quốc không hề có “chủ quyền lịch sử” trên Biển Đông, đồng thời bác “bản đồ đường lưỡi bò 9 đoạn” mà Trung Quốc tự vẽ.
Để thách thức việc quân sự hóa và tuyên bố chủ quyền quá vô lý của Bắc Kinh, từ năm 2015, hải quân Mỹ đã nhiều lần đưa tàu chiến, máy bay đến Biển Đông, mở các cuộc tuần tra thực hiện quyền tự do hàng hải (FONOP) nhằm khẳng định quan điểm của Mỹ rằng Biển Đông thuộc hải phận quốc tế.
Theo chính quyền Mỹ, tuần tra FONOP nhằm bảo vệ quyền hoạt động ở không – hải phận quốc tế của Mỹ và của các nước khác, và không cho phép bất kỳ nước nào bành trướng bờ cõi trái phép hoặc tuyên bố đòi chủ quyền trái phép.
Trong trường hợp này, việc đưa tàu chiến áp sát các đảo nhân tạo mà Trung Quốc xây trái phép là để khẳng định Mỹ không công nhận tuyên bố “đường lưỡi bò 9 đoạn” của Trung Quốc.
Nguy cơ quân binh quá khích muốn tự tay giải quyết vấn đề
Các nhà quan sát nói tình hình có thể nghiêm trọng hơn, khi Anh – Pháp chuẩn bị cùng Mỹ thực hiện tuần tra FONOP ở Biển Đông. Theo SCMP, chuyện căng thăng giữa Mỹ – Trung không khiến các nhà quan sát lão làng về tranh chấp Biển Đông bị bất ngờ. Nhưng họ cảnh giác với quan điểm cứng rắn của cả hai bên.
Nhà nghiên cứu hải quân Collin Koh ở Trường nghiên cứu quốc tế S. Rajaratnam (ở Singapore) nói: “Liên quan vấn đề Biển Đông, sự bất đồng giữa Mỹ – Trung đã ngày càng rộng. Cách duy nhất để hai thế lực có thể thực hiện là tránh đẩy sự căng thẳng vượt quá tầm kiểm soát một cuộc phô trương sức mạnh quân sự”.
Ông Koh cùng các nhà quan sát phương Tây nhận định, rằng việc Mỹ hủy mời Trung Quốc tham gia RIMPAC có thể buộc Bắc Kinh phải suy nghĩ lại về vị thế của Trung Quốc trên Biển Đông.
Nhưng ông Koh cũng cảm thấy bất an, vì sự tăng cường hoạt động quân sự ở vùng biển tranh chấp này: “Tôi không muốn nghĩ tới cảnh sử dụng võ lực ngoài ý muốn, từ những tính toán sai về chiến thuật hoặc cấp độ hoạt động của các chỉ huy địa phương, hoặc đơn giản từ hành vi quá khích của những người lính muốn tự ý giải quyết các vấn đề”.
Nhà nghiên cứu Greg Poling, nói hành động của Mỹ có thể có ích cho việc “đẩy lùi hành vi xấu”, nhưng cũng cảnh báo “nó sẽ là một hành động suông nếu tiếp sau đó không có một chiến lược thật sự”.
(Theo Soha News)

markdown:
(
[Biển Đảo](/cat/bien-dao)) - **Báo Bưu điện Hoa Nam buổi sáng (SCMP) ngày 1.7 đặt câu hỏi khi bị Mỹ hủy lời mời tham gia cuộc tập trận Vành đai Thái Bình Dương (RIMPAC 2018), thì liệu Trung Quốc có “quậy sóng” Biển Đông?** ![Trung Quốc sẽ ‘quậy sóng’ Biển Đông vì bị loại khỏi cuộc tập trận RIMPAC? Trung Quốc sẽ ‘quậy sóng’ Biển Đông vì bị loại khỏi cuộc tập trận RIMPAC?](http://static9.nguyentandung.biz/files/2018/07/photo1530494694928-153049469493039244012-01.jpg)
Trung Quốc sẽ ‘quậy sóng’ Biển Đông vì bị loại khỏi cuộc tập trận RIMPAC?
Tờ báo Hồng Kông nêu hai quần đảo giàu tài nguyên Trường Sa, Hoàng Sa thuộc chủ quyền Việt Nam trên Biển Đông vẫn là điểm nóng chính, trong việc Trung Quốc ngang ngược tuyên bố chủ quyền hầu như toàn bộ Biển Đông, bất chấp Bắc Kinh cách vùng biển này hàng ngàn cây số.
**Lãnh đạo Trung Quốc tuyên bố không để mất một tấc đất của tổ tiên**
Tuần qua, khi tiếp Bộ trưởng Quốc phòng Mỹ James Mattis ở Bắc Kinh, Chủ tịch Tập Cận Bình tuyên bố Trung Quốc yêu chuộng hòa bình nhưng không chấp nhận “nhường một tấc đất nào của tổ tiên truyền đời cho con cháu”.
Vẫn theo SCMP, sau chuyến thăm của ông Mattis, Trung Quốc dù “vẫn bám chặt vào súng” về chuyện tranh chấp chủ quyền, đã hoàn toàn không đề cập đến việc không được mời dự RIMPAC trong những bài báo mang giọng điệu tích cực, đề cao vấn đề hai lực lượng quân sự Trung – Mỹ sẵn sàng duy trì đối thoại cởi mở chân thành, cùng sự chín chắn trong quan hệ quân sự hai bên “vốn cần thiết cho quan hệ song phương và để kiểm soát các nguy cơ”.
RIMPAC 2018 có chủ đề “Khả năng, thích ứng, đối tác”, diễn ra từ ngày 27.6 đến 2.8, tức kéo dài 5 tuần ở vùng biển quanh quần đảo Hawaii và phía nam bang California của Mỹ. Đây là cuộc tập trận hải quân quốc tế lớn nhất thế giới, do Mỹ dẫn đầu và tổ chức hai năm/lần.
Năm nay RIMPAC có hơn 47 tàu nổi và 5 tàu ngầm, hơn 200 máy bay cùng 25.000 binh lính của 26 quốc gia cùng tập luyện tuần tra.
Nhưng hải quân Quân đội giải phóng nhân dân Trung Quốc (PLAN) không được mời đến. Đây là một cách phản ứng của Mỹ, trước việc Trung Quốc xây dựng và quân sự hóa các đảo nhân tạo trên các quần đảo Trường Sa, Hoàng Sa thuộc chủ quyền Việt Nam trên Biển Đông.
Quyết định hủy lời mời Trung Quốc dự RIMPAC 2018 của Mỹ được mô tả là “phản ứng ban đầu”, có nghĩa Mỹ sẽ còn những phản ứng khác, nếu Trung Quốc không thay đổi thái độ.
Mỹ phản đối việc Bắc Kinh xây sân bay, dàn hệ thống radar và cơ sở hải quân ở vùng biển chiến lược này gây đe dọa cho quyền tự do đi lại của tàu thuyền quốc tế.
Vài tháng gần đây, Trung Quốc đã tăng cường hiện diện quân sự trên Biển Đông. Không quân Quân đội giải phóng nhân dân Trung Quốc (PLAAF) hồi giữa tháng 5 đã tổ chức một sư đoàn máy bay ném bom hạng nặng có thể mang đầu đạn hạt nhân H-6K tập cất – hạ cánh trên đảo Phú Lâm (thuộc quần đảo Hoàng Sa của Việt Nam nhưng bị Trung Quốc chiếm đóng phi pháp).
Bộ Quốc phòng Trung Quốc tuyên bố vụ diễn tập cất – hạ cánh chỉ là một phần cuộc tập trận giả lập tấn công các mục tiêu trên biển, “nhằm chuẩn bị chiến đấu vì biển Nam Hải”, cách Trung Quốc gọi Biển Đông.
Trung Quốc cũng dàn tên lửa hành trình chống hạm YJ-12B và tên lửa đất đối không HQ-9B trên quần đảo Trường Sa, tăng khả năng đánh chặn tàu chiến và máy bay Mỹ nếu cần thiết. Các loại vũ khí này cũng nhằm cảnh cáo các nước khác đòi chủ quyền Biển Đông.
Trong 5 năm qua, Trung Quốc cũng đã xây các đảo nhân tạo trái phép trên Biển Đông, gây ra tranh chấp với nhiều quốc gia và phớt lờ các luật quốc tế và phán quyết hồi tháng 7.2016 – của Tòa án trọng tài thường trực The Hague-vốn tuyên Trung Quốc không hề có “chủ quyền lịch sử” trên Biển Đông, đồng thời bác “bản đồ đường lưỡi bò 9 đoạn” mà Trung Quốc tự vẽ.
Để thách thức việc quân sự hóa và tuyên bố chủ quyền quá vô lý của Bắc Kinh, từ năm 2015, hải quân Mỹ đã nhiều lần đưa tàu chiến, máy bay đến Biển Đông, mở các cuộc tuần tra thực hiện quyền tự do hàng hải (FONOP) nhằm khẳng định quan điểm của Mỹ rằng Biển Đông thuộc hải phận quốc tế.
Theo chính quyền Mỹ, tuần tra FONOP nhằm bảo vệ quyền hoạt động ở không – hải phận quốc tế của Mỹ và của các nước khác, và không cho phép bất kỳ nước nào bành trướng bờ cõi trái phép hoặc tuyên bố đòi chủ quyền trái phép.
Trong trường hợp này, việc đưa tàu chiến áp sát các đảo nhân tạo mà Trung Quốc xây trái phép là để khẳng định Mỹ không công nhận tuyên bố “đường lưỡi bò 9 đoạn” của Trung Quốc.
**Nguy cơ quân binh quá khích muốn tự tay giải quyết vấn đề**
Các nhà quan sát nói tình hình có thể nghiêm trọng hơn, khi Anh – Pháp chuẩn bị cùng Mỹ thực hiện tuần tra FONOP ở Biển Đông. Theo SCMP, chuyện căng thăng giữa Mỹ – Trung không khiến các nhà quan sát lão làng về tranh chấp Biển Đông bị bất ngờ. Nhưng họ cảnh giác với quan điểm cứng rắn của cả hai bên.
Nhà nghiên cứu hải quân Collin Koh ở Trường nghiên cứu quốc tế S. Rajaratnam (ở Singapore) nói: “Liên quan vấn đề Biển Đông, sự bất đồng giữa Mỹ – Trung đã ngày càng rộng. Cách duy nhất để hai thế lực có thể thực hiện là tránh đẩy sự căng thẳng vượt quá tầm kiểm soát một cuộc phô trương sức mạnh quân sự”.
Ông Koh cùng các nhà quan sát phương Tây nhận định, rằng việc Mỹ hủy mời Trung Quốc tham gia RIMPAC có thể buộc Bắc Kinh phải suy nghĩ lại về vị thế của Trung Quốc trên Biển Đông.
Nhưng ông Koh cũng cảm thấy bất an, vì sự tăng cường hoạt động quân sự ở vùng biển tranh chấp này: “Tôi không muốn nghĩ tới cảnh sử dụng võ lực ngoài ý muốn, từ những tính toán sai về chiến thuật hoặc cấp độ hoạt động của các chỉ huy địa phương, hoặc đơn giản từ hành vi quá khích của những người lính muốn tự ý giải quyết các vấn đề”.
Nhà nghiên cứu Greg Poling, nói hành động của Mỹ có thể có ích cho việc “đẩy lùi hành vi xấu”, nhưng cũng cảnh báo “nó sẽ là một hành động suông nếu tiếp sau đó không có một chiến lược thật sự”.
(Theo Soha News)
[banbientap@nguyentandung.org](mailto:banbientap@nguyentandung.org?subject=Bài viết: Trung Quốc sẽ ‘quậy sóng’ Biển Đông vì bị loại khỏi cuộc tập trận RIMPAC?)

Set-Cookie: desktop=true


text:
MU Giang Hồ | TEST: 14/12 - OPEN: 16/12
HƯỚNG DẪN ÉP QUẠ TINH - DARK RAVEN
Tạo Quạ Tinh
- Nói chuyện với Nhà huấn luyện thú ở Lorencia (122,110).
- Chọn chức năng "Tái tạo linh hồn".
- Nguyên liệu:
- + 1 Linh hồn quạ tinh (có thể rơi ra từ quái vật có cấp độ 96 trở lên)
- + 1 Ngọc Sáng Tạo
- + 2 Ngọc Tâm Linh
- + 2 Ngọc Ước Nguyện
- + 1 Ngọc Hỗn Nguyên
- Tỉ lệ thành công: 60%.
- Nếu thành công sẽ nhận được Quạ Tinh.
- Nếu thất bại, tất cả nguyên liệu sẽ bị mất.
Phục hồi máu Quạ Tinh
- Nói chuyện với Nhà huấn luyện thú ở Lorencia (122,110).
- Chọn chức năng "Phục hồi mạng sống".
- Chọn loại thú muốn hồi máu.
Các bản tin mới cập nhật khác khác:

markdown:
## MU Giang Hồ | TEST: 14/12 - OPEN: 16/12
#### HƯỚNG DẪN ÉP QUẠ TINH - DARK RAVEN
## Tạo Quạ Tinh
- Nói chuyện với
**Nhà huấn luyện thú** ở **Lorencia (122,110)**.
- Chọn chức năng
**"Tái tạo linh hồn"**.
**- Nguyên liệu:**
- + 1 Linh hồn quạ tinh (có thể rơi ra từ quái vật có cấp độ 96 trở lên)
- + 1 Ngọc Sáng Tạo
- + 2 Ngọc Tâm Linh
- + 2 Ngọc Ước Nguyện
- + 1 Ngọc Hỗn Nguyên
-
**Tỉ lệ thành công:** 60%.
-
**Nếu thành công** sẽ nhận được Quạ Tinh.
-
**Nếu thất bại**, tất cả nguyên liệu sẽ bị mất.
## Phục hồi máu Quạ Tinh
- Nói chuyện với
**Nhà huấn luyện thú** ở **Lorencia (122,110)**.
- Chọn chức năng
**"Phục hồi mạng sống"**.
- Chọn loại thú muốn hồi máu.
**Các bản tin mới cập nhật khác khác:**
|
|
|
01-05-2016
|
|
|![]()
|
|
|
01-05-2016
|
|
|![]()
|
|
|
01-05-2016
|
|
|![]()
|
|
|
01-05-2016
|
|
|![]()
|
|
|
01-05-2016
|
|
|![]()
|
|
|
01-05-2016
|
|
|![]()
|
|
|
01-05-2016
|
|
|![]()
|
|
|
01-05-2016
|
|
|![]()
|
|
|
01-05-2016
|
|
|![]()
|
|
|
01-05-2016
|
|
|![]()
|
|
|
01-05-2016
|
|
|![]()
|
|
|
01-05-2016
|
|
|![]()
|
|
|
01-05-2016
|
|
|![]()
|
|
|
01-05-2016
|
|
|![]()
|
|
|
01-05-2016
|
|
|![]()
|
|
|
01-05-2016
|
|
|![]()
|
|
|
01-05-2016
|
|
|![]()
|
|
|
01-05-2016
|
|
|![]()
|
|
|
01-05-2016
|
|
|![]()
|
|
|
01-05-2016
|
|
|![]()

WARC-Identified-Payload-Type: application/xhtml+xml

Cache-Control: private,No-Store

Pragma: no-cache

Content-Type: text/html


text:
-
Diễn đàn rao chung đã hoạt động hơn 7 năm, cùng với anh em chiến đấu một thời gian khá dài. Với mong muốn hỗ trợ dịch vụ đăng tin chất lượng và hiệu quả hơn. Kể từ ngày 25/10/2017 Chúng tôi sẽ bắt đầu tính phí để hỗ trợ duy trì website hàng năm. Phí được tính như sau: 1 accout :250k/ năm. Lợi ích khi trả phí ( được tạo 10 tài khoản user trên 10 site khác nhau trên hệ thống raochung.com.vn và 1 bài được chèn 3 link). Có thể nói chất lượng hệ thống site rao chung rất tốt, khi các anh em chạy bài cần hỗ trợ gì liên hệ chúng tôi support 24/24. Hotline: 0977.800.810 Danh sách siteDismiss Notice
- Hoạt động cuối:
- 18 Tháng mười 2017
- Tham gia ngày:
- 25 Tháng bảy 2017
- Bài viết:
- 13
- Đã được thích:
- 0
- Điểm thành tích:
- 1
- Giới tính:
- Nam
- Sinh nhật:
- 6 Tháng một 1988 (Age: 30)
Chia sẻ trang này
fsgzfhdgh654
New Member, Nam, 30
- fsgzfhdgh654 được nhìn thấy lần cuối:
- 18 Tháng mười 2017
-
- Đang tải...
- Đang tải...
-
Giới thiệu
- Giới tính:
- Nam
- Sinh nhật:
- 6 Tháng một 1988 (Age: 30)
Tương tác

markdown:
[và](http://www.thietbiphongtap.com.vn/thong-tin-can-biet/dao-tao-huan-luyen-vien-904.html) **khóa đào tạo huấn luyện viên thể hình** **phòng tập gym quận 3**
-
Diễn đàn rao chung đã hoạt động hơn 7 năm, cùng với anh em chiến đấu một thời gian khá dài. Với mong muốn hỗ trợ dịch vụ đăng tin chất lượng và hiệu quả hơn. Kể từ ngày 25/10/2017 Chúng tôi sẽ bắt đầu tính phí để hỗ trợ duy trì website hàng năm. Phí được tính như sau: 1 accout :250k/ năm. Lợi ích khi trả phí ( được tạo 10 tài khoản user trên 10 site khác nhau trên hệ thống raochung.com.vn và 1 bài được chèn 3 link). Có thể nói chất lượng hệ thống site rao chung rất tốt, khi các anh em chạy bài cần hỗ trợ gì liên hệ chúng tôi support 24/24. Hotline: 0977.800.810
[Danh sách site](https://raochung.com.vn/threads/danh-sach-cac-site-rao-vat-chat-luong-2017.89897/) [Dismiss Notice](account/dismiss-notice?notice_id=1) ![ fsgzfhdgh654](http://diendantayninh.com/styles/default/xenforo/avatars/avatar_male_l.png)
- Hoạt động cuối:
- 18 Tháng mười 2017
- Tham gia ngày:
- 25 Tháng bảy 2017
- Bài viết:
- 13
- Đã được thích:
- 0
- Điểm thành tích:
[1](members/fsgzfhdgh654.733/trophies)
- Giới tính:
- Nam
- Sinh nhật:
- 6 Tháng một 1988 (Age: 30)
### Chia sẻ trang này
# fsgzfhdgh654
New Member, Nam, 30
- fsgzfhdgh654 được nhìn thấy lần cuối:
- 18 Tháng mười 2017
-
- Đang tải...
- Đang tải...
-
### Giới thiệu
- Giới tính:
- Nam
- Sinh nhật:
- 6 Tháng một 1988 (Age: 30)
### Tương tác

X-Frame-Options: SAMEORIGIN

Vary: Accept-Encoding,User-Agent


text:
Trang chủ
Sơ đồ trang web
[Chưa có tiêu đề]
>
[Chưa có tiêu đề]
>
[Chưa có tiêu đề]
>
Hoạt động gần đây của trang web
01:05, 29 thg 6, 2017
son dinh đã chỉnh sửa
Trang chủ
01:01, 29 thg 6, 2017
son dinh đã đính kèm
Tivi-Plasma-Samsung-PA51H4500AK.jpg
vào
Trang chủ
01:01, 29 thg 6, 2017
son dinh đã đính kèm
tivi-plasma-1.jpg
vào
Trang chủ
01:01, 29 thg 6, 2017
son dinh đã đính kèm
tivi-lg-43lh570t-550x340.jpg
vào
Trang chủ
01:01, 29 thg 6, 2017
son dinh đã đính kèm
sua-tivi-lcd(1).jpg
vào
Trang chủ
01:00, 29 thg 6, 2017
son dinh đã đính kèm
l56.png
vào
Trang chủ
01:00, 29 thg 6, 2017
son dinh đã đính kèm
cac-san-pham-tivi-lg-ra-mat-nam-2016-1.jpg
vào
Trang chủ
20:52, 27 thg 6, 2017
son dinh đã đính kèm
Untitled.png
vào
Trang chủ
20:39, 27 thg 6, 2017
son dinh đã chỉnh sửa
Trang chủ
20:37, 27 thg 6, 2017
son dinh đã chỉnh sửa
Trang chủ
20:28, 27 thg 6, 2017
son dinh đã cập nhật
sua-tivi-tai-nha.jpg
20:27, 27 thg 6, 2017
son dinh đã chỉnh sửa
Trang chủ
20:26, 27 thg 6, 2017
son dinh đã chỉnh sửa
Trang chủ
20:08, 27 thg 6, 2017
son dinh đã đính kèm
tivi-bi-mat-nguon-nguyen-nhan-va-cach-khac-phuc-4.jpg
vào
Trang chủ
20:08, 27 thg 6, 2017
son dinh đã đính kèm
sua-tivi-trung-van.jpg
vào
Trang chủ
20:08, 27 thg 6, 2017
son dinh đã đính kèm
Sua-ti-vi-tai-nha.jpg
vào
Trang chủ
20:08, 27 thg 6, 2017
son dinh đã đính kèm
sua-tivi-tai-nha.jpg
vào
Trang chủ
20:08, 27 thg 6, 2017
son dinh đã đính kèm
sua-tivi-o-hai-phong.jpg
vào
Trang chủ
20:07, 27 thg 6, 2017
son dinh đã đính kèm
sua-tivi-lcd.jpg
vào
Trang chủ
20:07, 27 thg 6, 2017
son dinh đã đính kèm
sua-chua-tivi-tai-nha3.jpg
vào
Trang chủ
20:07, 27 thg 6, 2017
son dinh đã đính kèm
nhan-sua-chua-tivi-cac-loai.jpg
vào
Trang chủ
20:07, 27 thg 6, 2017
son dinh đã đính kèm
led-tv12.jpg
vào
Trang chủ
20:07, 27 thg 6, 2017
son dinh đã đính kèm
images.jpg
vào
Trang chủ
20:07, 27 thg 6, 2017
son dinh đã đính kèm
2015-09-04-09-48-15sua-tivi-tai-nha-ha-noi-uy-tin.jpg
vào
Trang chủ
20:07, 27 thg 6, 2017
son dinh đã đính kèm
2015-09-03-09-27-57sua-tivi-tai-nha-ha-noi.jpg
vào
Trang chủ
cũ hơn
|
mới hơn
Sign in
|
Recent Site Activity
|
Report Abuse
|
Powered By
Google Sites

markdown:
[[Chưa có tiêu đề]](/site/trungtamsuachuativitunggiang/system) > [[Chưa có tiêu đề]](/site/trungtamsuachuativitunggiang/system/app) > [[Chưa có tiêu đề]](/site/trungtamsuachuativitunggiang/system/app/pages) >
### Hoạt động gần đây của trang web
|
|
01:01, 29 thg 6, 2017
|
son dinh đã đính kèm
|
01:01, 29 thg 6, 2017
|
son dinh đã đính kèm
|
01:01, 29 thg 6, 2017
|
son dinh đã đính kèm
|
01:01, 29 thg 6, 2017
|
son dinh đã đính kèm
|
01:00, 29 thg 6, 2017
|
son dinh đã đính kèm
|
01:00, 29 thg 6, 2017
|
son dinh đã đính kèm
|
20:52, 27 thg 6, 2017
|
son dinh đã đính kèm
|
20:39, 27 thg 6, 2017
|
son dinh đã chỉnh sửa
|
20:37, 27 thg 6, 2017
|
son dinh đã chỉnh sửa
|
20:28, 27 thg 6, 2017
|
son dinh đã cập nhật
|
20:27, 27 thg 6, 2017
|
son dinh đã chỉnh sửa
|
20:26, 27 thg 6, 2017
|
son dinh đã chỉnh sửa
|
20:08, 27 thg 6, 2017
|
son dinh đã đính kèm
|
20:08, 27 thg 6, 2017
|
son dinh đã đính kèm
|
20:08, 27 thg 6, 2017
|
son dinh đã đính kèm
|
20:08, 27 thg 6, 2017
|
son dinh đã đính kèm
|
20:08, 27 thg 6, 2017
|
son dinh đã đính kèm
|
20:07, 27 thg 6, 2017
|
son dinh đã đính kèm
|
20:07, 27 thg 6, 2017
|
son dinh đã đính kèm
|
20:07, 27 thg 6, 2017
|
son dinh đã đính kèm
|
20:07, 27 thg 6, 2017
|
son dinh đã đính kèm
|
20:07, 27 thg 6, 2017
|
son dinh đã đính kèm
|
20:07, 27 thg 6, 2017
|
son dinh đã đính kèm
|
20:07, 27 thg 6, 2017
|
son dinh đã đính kèm
|

X-Content-Type-Options: nosniff

X-Frame-Options: DENY

Cache-Control: private, max-age=5


text:
Nấm lim xanh rừng là gì, mọc ở đâu và có công dụng và tác dụng thế nào?
Nấm lim xanh rừng là gì? Công dụng của nấm thế nào mà trở thành "dược phẩm" quý được sử dụng từ xưa đến nay. Tham khảo bài viết sau để có thông tin hữu ích. Thông tin cơ bản về ... Xem tiếp

markdown:
###
[Nấm lim xanh rừng là gì, mọc ở đâu và có công dụng và tác dụng thế nào?](https://www.namlimxanh.com/nam-lim-xanh-la-gi.html)
[](https://www.namlimxanh.com/nam-lim-xanh-la-gi.html)
![ Nấm lim xanh rừng là gì, mọc ở đâu và có công dụng và tác dụng thế nào?](https://www.namlimxanh.com/wp-content/uploads/bfi_thumb/duoc-chat-trong-nam-lim-xanh-dieu-tri-ung-thu-njf8yj9rbp5fpjz9l6ssysr3z78y6ljy2p7s64j4y4.jpg)
Nấm lim xanh rừng là gì? Công dụng của nấm thế nào mà trở thành "dược phẩm" quý được sử dụng từ xưa đến nay. Tham khảo bài viết sau để có thông tin hữu ích.
Thông tin cơ bản về ...
[Xem tiếp](https://www.namlimxanh.com/nam-lim-xanh-la-gi.html)


text:
Thuychung'sBlog
Trang
My Home
Notes
Guestbook
Photo
Thứ Ba, 7 tháng 4, 2015
Mục kỉnh cho người mù ngoại ngữ : D
Ông bác sĩ ngoay ngoáy kê cho mụ cái đơn mua kính lão.Số một.Mụ nguýt trộm ổng .Gớm ,trước năn nỉ gãy lưỡi xin mua kính mắt thuỷ tinh không hà,mà lão ấy khó dễ .Giờ thì mụ cũng được ra dáng người có học rồi.Khoái! Đeo kính vô ,mụ vỡ oà niềm thất vọng thấy dung nhan của chồng.Hừm,gã ấy nhàu nhĩ vậy tư bao giờ? Ối chết ,mụ thêm điều cần ghi nhớ,rằng,chớ có dại đeo kính nghía chính mình.Chắc ngất ! :-) Rồi... Đạp tay lên trán,mụ xổ vào kệ tủ ,lôi cả đống sách ... Oẳn tù tì ,quẳng cái bịch vô thùng rác.Chồng con giương mắt ếch.Mụ thì thào. Bí mật nhá! Là vừa nẫy đeo mục kỉnh ,em ( mẹ) thấy ... Thấy đám chữ bỗng to tướng,rõ nét kinh hoàng .Như là chúng ... Nhảy len đập thẳng vào mặt ấy vậy. Bỗng nhiên gẫm ra hoc lam gi mat công.Thể nào rồi người ta cũng chế được ra loại mục kỉnh cho người ... Mù ngoại ngữ cũng thông tỏ mọi điều. Mụ đắc chí cười lớn. Ờ,rồi sẽ phải có loại kỉnh ấy.Chắc luôn! Hai bố con ... Mặt trắng bệch hãi hùng. Mụ ... Lắc đầu rất không hài lòng. Gì mà không thể ? Thế cha phai tau ngam da co tu thoi ... Thuyen truong Ne Mo roi sao? Roi nha ong E Di Son ben nước Mỹ từng ... Bỏ ánh sắng mặt trời vào cái bóng thuỷ tinh,từng... Cất được cả tiếng nói vào cái hộp nhựa đó thôi??? Còn ngồi chồm hổm đó a? Hai bố con mau tính đăng kí bản quyền ý tưởng nhớn nầy giùm má cái đi! Hừm ! Mục kỉnh cho người mù ngoại ngữ.Tại sao không??? :-))
Được đăng bởi
Lem Lém
vào lúc
07:51
Gửi email bài đăng này
BlogThis!
Chia sẻ lên Twitter
Chia sẻ lên Facebook
Chia sẻ lên Pinterest
Không có nhận xét nào:
Đăng nhận xét
Bài đăng Mới hơn
Bài đăng Cũ hơn
Trang chủ
Đăng ký:
Đăng Nhận xét (Atom)
Không có nhận xét nào:
Đăng nhận xét

markdown:
Thuychung'sBlog
Trang
My Home
Notes
Guestbook
Photo
Thứ Ba, 7 tháng 4, 2015
Mục kỉnh cho người mù ngoại ngữ : D
Ông bác sĩ ngoay ngoáy kê cho mụ cái đơn mua kính lão.Số một.Mụ nguýt trộm ổng .Gớm ,trước năn nỉ gãy lưỡi xin mua kính mắt thuỷ tinh không hà,mà lão ấy khó dễ .Giờ thì mụ cũng được ra dáng người có học rồi.Khoái! Đeo kính vô ,mụ vỡ oà niềm thất vọng thấy dung nhan của chồng.Hừm,gã ấy nhàu nhĩ vậy tư bao giờ? Ối chết ,mụ thêm điều cần ghi nhớ,rằng,chớ có dại đeo kính nghía chính mình.Chắc ngất ! :-) Rồi... Đạp tay lên trán,mụ xổ vào kệ tủ ,lôi cả đống sách ... Oẳn tù tì ,quẳng cái bịch vô thùng rác.Chồng con giương mắt ếch.Mụ thì thào. Bí mật nhá! Là vừa nẫy đeo mục kỉnh ,em ( mẹ) thấy ... Thấy đám chữ bỗng to tướng,rõ nét kinh hoàng .Như là chúng ... Nhảy len đập thẳng vào mặt ấy vậy. Bỗng nhiên gẫm ra hoc lam gi mat công.Thể nào rồi người ta cũng chế được ra loại mục kỉnh cho người ... Mù ngoại ngữ cũng thông tỏ mọi điều. Mụ đắc chí cười lớn. Ờ,rồi sẽ phải có loại kỉnh ấy.Chắc luôn! Hai bố con ... Mặt trắng bệch hãi hùng. Mụ ... Lắc đầu rất không hài lòng. Gì mà không thể ? Thế cha phai tau ngam da co tu thoi ... Thuyen truong Ne Mo roi sao? Roi nha ong E Di Son ben nước Mỹ từng ... Bỏ ánh sắng mặt trời vào cái bóng thuỷ tinh,từng... Cất được cả tiếng nói vào cái hộp nhựa đó thôi??? Còn ngồi chồm hổm đó a? Hai bố con mau tính đăng kí bản quyền ý tưởng nhớn nầy giùm má cái đi! Hừm ! Mục kỉnh cho người mù ngoại ngữ.Tại sao không??? :-))
Được đăng bởi
Lem Lém
vào lúc
07:51
Gửi email bài đăng này
BlogThis!
Chia sẻ lên Twitter
Chia sẻ lên Facebook
Chia sẻ lên Pinterest
Không có nhận xét nào:
Đăng nhận xét
Bài đăng Mới hơn
Bài đăng Cũ hơn
Trang chủ
Đăng ký:
Đăng Nhận xét (Atom)
## Không có nhận xét nào:
## Đăng nhận xét


text:
Là kiểu búa mới, có hiệu quả nghiền cao, đây là một trong những loại búa được sử dụng thường xuyên nhất. Búa phá đá JSB - 45D là sản phẩm lý tưởng cho việc đập đá ở những công trình xây dựng.
Búa phá đá JSB - 45D của chúng tôi có đặc điểm nổi bật như: kết câu đơn giản, dễ vận hành, dễ bảo quản sữa chữa, tiết kiệm được nhân công, nhiên liệu... đem đến sự thuận lợi và hiệu quả cao trong công việc đập đá.
Dưới đây là thông số kỹ thuật của búa phá đá JSB - 45D, quý khách có thể tham khảo :
Xem thêm : búa đập đá thủy lực
Email: cuong@hunghaicuong.vn
CÔNG TY TNHH HÙNG HẢI CƯỜNG
Địa chỉ: 399/1A QL1K - Khu phố Tân An - Phường Tân Đông Hiệp - Thị xã Dĩ An- Tỉnh Bình Dương
Điện thoại : 0650. 3771.868 – Fax: 0650. 3771.879 - Hotline: 0918.200.435
MST: 3700854115 - STK: 67010000162348 – Ngân hàng BIDV Đồng Nai
Email: cuong@hunghaicuong.vn - Website: http://hunghaicuong.vn
Design by firerox.org
bua dap da thuy luc | Bua rung thuy luc | Bua rung | búa đập đá | Bua pha da

Server: LiteSpeed

Accept-Ranges: bytes


text:
Mình đã lấy lại tuổi trẻ nhờ căng da mặt bằng chỉ vàng
Lúc ấy mới có 40 tuổi mà ai nhìn vào mình cũng bảo như gái già 50, những vết chân chim trên khuôn mặt, vết nhăn xuất hiện do những suy nghĩ lo toan cuộc sống. Và thế là mình quyết tâm thay đổi bởi những lời chê vô ý đó. Được sự giới thiệu của các chị trong cơ quan, mình tìm hiểu và lựa chọn căng da mặt không cần phẫu thuật bằng chỉ vàng. Ban đầu nghe tên mình vô cùng sợ sệt, mình sợ kim đâm, mình rất sợ đau nhưng mọi nỗi sợ hãi của mình không bằng mình sợ già.
Lúc chọn thẫm mỹ viện và bước vào đó, mình cảm thấy e ngại vì chị chủ ở đó 45 tuổi mà nhìn như 30, quả thật rất đẹp. Được sự tư vấn nhiệt tình cũng như giải thích các phương pháp căng da mặt không cần phẫu thuật mình lựa chọn ngay căng da bằng chỉ vàng. Sở dĩ mình lựa chọn phương pháp này không phải vì lời tư vấn mà vì theo danh sách và thống kê cho thấy rất nhiều người chọn dịch vụ này cho nên mình cũng khá an tâm với quyết định đó.
Và việc tiến hành trị liệu của mình bắt đầu và kết thúc trong vòng 10 tháng, trải qua 3 lần tiến hành trị liệu thì giờ đây quả thật nhìn mình như trẻ hơn 10 tuổi vậy. Có thể nói đây chính là sự lựa chọn mà mình chưa bao giờ cảm thấy hối hận khi bỏ số tiền khá lớn cho công cuộc thay đổi và làm đẹp này.
Bây giờ đi đâu nếu ai hỏi thì mình đều giới thiệu và chia sẽ kinh nghiệm căng da mặt không cần phẫu thuật mà mình đã trải qua và đưa ra những lời khuyên chân thành.
Có 3 người theo mình sử dụng căng da mặt bằng chỉ vàng và rất thành công nên mình cảm thấy rất vui. Mong rằng với những lời chia sẽ đó thì mình giúp bạn có quyết định riêng của bản thân trong việc lấy lại tuổi trẻ cho khuôn mặt.
Bài viết liên quan
- 5 ưu điểm của đèn Exit Paragon 2 mặt (09/07)
- Máy rang cafe có làm thay đổi kích thước hạt cà phê sau khi rang (06/07)
- Đèn sạc khẩn cấp A - 830 Kentom (04/07)
- Đèn khẩn cấp PEMS3RC Paragon có giá bao nhiêu? (02/07)
- Đèn khẩn cấp PEMB21SW Paragon (26/06)
- Tuổi thọ một chiếc máy rang cà phê là bao lâu? (18/06)
- Cách để chọn được cơ sở gia công cơ khí quận 12 tốt nhất (17/06)
- Chất lượng hạt cà phê sau khi sử dụng máy rang cà phê (12/06)
- Những lý do tuyệt đối không nên thiết kế website bán hàng (03/06)
- Website và lợi ích của thiết kế website (03/06)

markdown:
## Mình đã lấy lại tuổi trẻ nhờ căng da mặt bằng chỉ vàng
Lúc ấy mới có 40 tuổi mà ai nhìn vào mình cũng bảo như gái già 50, những vết chân chim trên khuôn mặt, vết nhăn xuất hiện do những suy nghĩ lo toan cuộc sống. Và thế là mình quyết tâm thay đổi bởi những lời chê vô ý đó. Được sự giới thiệu của các chị trong cơ quan, mình tìm hiểu và lựa chọn
[căng da mặt không cần phẫu thuật](http://galaxyspa.vn/cang-da-mat-khong-phau-thuat-26.html) bằng chỉ vàng. Ban đầu nghe tên mình vô cùng sợ sệt, mình sợ kim đâm, mình rất sợ đau nhưng mọi nỗi sợ hãi của mình không bằng mình sợ già.
Lúc chọn thẫm mỹ viện và bước vào đó, mình cảm thấy e ngại vì chị chủ ở đó 45 tuổi mà nhìn như 30, quả thật rất đẹp. Được sự tư vấn nhiệt tình cũng như giải thích các phương pháp căng da mặt không cần phẫu thuật mình lựa chọn ngay căng da bằng chỉ vàng. Sở dĩ mình lựa chọn phương pháp này không phải vì lời tư vấn mà vì theo danh sách và thống kê cho thấy rất nhiều người chọn dịch vụ này cho nên mình cũng khá an tâm với quyết định đó.
Và việc tiến hành trị liệu của mình bắt đầu và kết thúc trong vòng 10 tháng, trải qua 3 lần tiến hành trị liệu thì giờ đây quả thật nhìn mình như trẻ hơn 10 tuổi vậy. Có thể nói đây chính là sự lựa chọn mà mình chưa bao giờ cảm thấy hối hận khi bỏ số tiền khá lớn cho công cuộc thay đổi và làm đẹp này.
Bây giờ đi đâu nếu ai hỏi thì mình đều giới thiệu và chia sẽ kinh nghiệm căng da mặt không cần phẫu thuật mà mình đã trải qua và đưa ra những lời khuyên chân thành.
Có 3 người theo mình sử dụng căng da mặt bằng chỉ vàng và rất thành công nên mình cảm thấy rất vui. Mong rằng với những lời chia sẽ đó thì mình giúp bạn có quyết định riêng của bản thân trong việc lấy lại tuổi trẻ cho khuôn mặt.
### Bài viết liên quan
[5 ưu điểm của đèn Exit Paragon 2 mặt](http://hatientravel.net/5-uu-diem-cua-den-exit-paragon-2-mat-14-1357.html)(09/07) [Máy rang cafe có làm thay đổi kích thước hạt cà phê sau khi rang](http://hatientravel.net/may-rang-cafe-co-lam-thay-doi-kich-thuoc-hat-ca-phe-sau-khi-rang-14-1356.html)(06/07) [Đèn sạc khẩn cấp A - 830 Kentom](http://hatientravel.net/den-sac-khan-cap-a830-kentom-14-1355.html)(04/07) [Đèn khẩn cấp PEMS3RC Paragon có giá bao nhiêu?](http://hatientravel.net/den-khan-cap-pems3rc-paragon-co-gia-bao-nhieu-14-1354.html)(02/07) [Đèn khẩn cấp PEMB21SW Paragon](http://hatientravel.net/den-khan-cap-pemb21sw-paragon-14-1353.html)(26/06) [Tuổi thọ một chiếc máy rang cà phê là bao lâu?](http://hatientravel.net/tuoi-tho-mot-chiec-may-rang-ca-phe-la-bao-lau-14-1352.html)(18/06) [Cách để chọn được cơ sở gia công cơ khí quận 12 tốt nhất](http://hatientravel.net/cach-de-chon-duoc-co-so-gia-cong-co-khi-quan-12-tot-nhat-14-1351.html)(17/06) [Chất lượng hạt cà phê sau khi sử dụng máy rang cà phê](http://hatientravel.net/chat-luong-hat-ca-phe-sau-khi-su-dung-may-rang-ca-phe-14-1350.html)(12/06) [Những lý do tuyệt đối không nên thiết kế website bán hàng](http://hatientravel.net/nhung-ly-do-tuyet-doi-khong-nen-thiet-ke-website-ban-hang-14-1348.html)(03/06) [Website và lợi ích của thiết kế website](http://hatientravel.net/website-va-loi-ich-cua-thiet-ke-website-14-1347.html)(03/06)

Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0