# Sửa đồng hồ hệ thống không tương tích: Cách làm thủ công (dành riêng cho X99 và X299)
# Kiểm tra xem bạn có cần SSDT-RTC0-RANGE hay không
Để bắt đầu, hãy mở tệp DSDT mà bạn có được từ bước Trích lục bản sao DSDT và đã được biên dịch ngược bằng MaciASL (nếu bạn sử dụng macOS) hoặc bất kỳ trình soạn thảo văn bản nào nếu bạn đang có Windows hoặc Linux (VSCode có cái phần mở rộng hỗ trợ ACPI (opens new window) khá là xịn đó).
Bây giờ hãy tìm kiếm từ khóa PNP0B00 và quan sát mục _CRS (Current Resource Settings - Thiết lập tài nguyên hiện tại) bên trong đó:

Từ ví dụ trên, chúng ta thấy mình có 2 dải (banks) bộ nhớ RTC:
- Dải 1 (Bank 1): Bắt đầu tại 0x70 với độ dài (length) là 0x2.
- Dải 2 (Bank 2): Bắt đầu tại 0x74 với độ dài (length) là 0x4.
Vấn đề nằm ở chỗ: Nhà sản xuất thiết bị gốc (OEM) đã "quên béng" việc ánh xạ (map) các phân đoạn 0x72 và 0x73. Chính vì sự thiếu sót này mà macOS có thể bị treo (halt) ngay khi đang khởi động (lỗi này xuất hiện rất rõ rệt trên Big Sur)
Cuối cùng, bạn kiểm tra xem nó có phương thức _STA (Status - Trạng thái) hay không. Chúng ta sẽ cần xài thông tin này ngay sau đây.
# Tìm đường dẫn ACPI
Việc tìm đường dẫn ACPI thực ra khá dễ dàng. Đầu tiên, hãy mở tệp DSDT mà bạn có được từ bước Trích lục bản sao DSDT và đã được biên dịch ngược bằng MaciASL (nếu bạn sử dụng macOS) hoặc bất kỳ trình soạn thảo văn bản nào nếu bạn đang có Windows hoặc Linux (VSCode có cái phần mở rộng hỗ trợ ACPI (opens new window) khá là xịn đó).
Để bắt đầu, bạn cần tìm kiếm những thông tin sau:
- Tìm tên của RTC:
- Tìm kiếm từ khóa
PNP0B00
- Tìm kiếm từ khóa
- Tìm đường dẫn LowPinCount:
- Tìm kiếm từ khóa
Name (_ADR, 0x001F0000)
- Tìm kiếm từ khóa
- Tìm đường dẫn PCI:
- Tìm kiếm từ khóa
PNP0A08(Nếu xuất hiện nhiều kết quả, bạn chọn kết quả đầu tiên)
- Tìm kiếm từ khóa
Bạn sẽ thấy thông tin hiện ra tương tự như sau:
| Đường dẫn RTC | Đường dẫn LPC | Đường dẫn PCI |
|---|---|---|
![]() | ![]() | ![]() |
Dựa vào hình trên, chúng ta có thể xác định máy mình có RTC, LPC0 và PCI0. Giờ thì sang bước tiếp theo thôi!
# Chỉnh sửa tệp SSDT mẫu
Giờ khi đã có đường dẫn ACPI, hãy tải tệp SSDT tương ứng về và bắt đầu mổ xẻ:
Theo mặc định, tệp này sử dụng đường dẫn là PC00.LPC0.RTC. Bạn cần đổi tên nó cho khớp với máy mình. Nếu máy bạn cùng đường dẫn với tệp mẫu thì bạn có thể biên dịch rồi.
Theo ví dụ ở trên, chúng ta sẽ đổi nó thành PCI0.LPC0.RTC:
Trước khi sửa:
External (_SB_.PC00.LPC0, DeviceObj) <- Đổi tên chỗ này
External (_SB_.PC00.LPC0.RTC_, DeviceObj) <- Đổi tên chỗ này
Scope (_SB.PC00.LPC0) <- Đổi tên chỗ này

Sau khi thay đổi theo đường dẫn ví dụ mà chúng ta tìm được, tệp SSDT của bạn sẽ trông như thế này:
Sau khi sửa:
External (_SB_.PCI0.LPC0, DeviceObj) <- Sau khi đổi tên
Scope (_SB.PCI0.LPC0.RTC) <- Sau khi đổi tên
Scope (_SB.PCI0.LPC0) <- Sau khi đổi tên
/* <- Bạn xóa dấu niêm phong ngay đây nếu thiết bị RTC của bạn không có hàm _STA
Scope (RTC)
{
Method (_STA, 0, NotSerialized) // _STA: Status
{
If (_OSI ("Darwin")) // _STA: Status (Trạng thái)
{
Return (Zero)
}
Else
{
Return (0x0F)
}
}
}
*/ <- Bạn xóa dấu niêm phong ngay đây nếu thiết bị RTC của bạn không có hàm _STA

# Biên dịch SSDT
Sau khi chỉnh sửa xong mã nguồn, bạn đã sẵn sàng để biên dịch SSDT!
# Gần về tới đích rồi
Khi bạn đã tạo xong SSDT của mình, bạn có thể chuyển sang trang tiếp theo để tạo nốt mấy cái SSDT còn lại hoặc truy cập vào đây nếu bạn đã hoàn tất công việc:


