Trong rất nhiều trường hợp, sự lựa chọn khá tùy tiện hoặc dựa trên "bất cứ nơi nào phù hợp nhất" khi ISAs phát triển theo thời gian. Tuy nhiên, MOS 6502 là một ví dụ tuyệt vời về một con chip trong đó thiết kế của ISA bị ảnh hưởng nặng nề bằng cách cố gắng nén càng nhiều càng tốt ra khỏi các bóng bán dẫn hạn chế.
Xem video này giải thích cách 6502 được thiết kế ngược , đặc biệt là từ 34:20 trở đi.
6502 là bộ vi xử lý 8 bit được giới thiệu vào năm 1975. Mặc dù nó có cổng ít hơn 60% so với Z80 nhưng nó nhanh gấp đôi và mặc dù nó bị hạn chế hơn (về mặt đăng ký, v.v.), nhưng nó đã bù lại bằng một bộ hướng dẫn thanh lịch.
Nó chỉ chứa 3510 bóng bán dẫn, được rút ra bằng tay , bởi một nhóm nhỏ người đang bò trên một số tấm nhựa lớn sau đó được thu nhỏ về mặt quang học, tạo thành các lớp khác nhau của 6502.
Như bạn có thể thấy bên dưới, 6502 chuyển opcode hướng dẫn và dữ liệu thời gian vào ROM giải mã, sau đó chuyển nó thành một thành phần "logic điều khiển ngẫu nhiên" có mục đích có thể ghi đè đầu ra của ROM trong một số tình huống phức tạp.
Vào lúc 37:00 trong video, bạn có thể thấy một bảng ROM giải mã cho biết những điều kiện đầu vào phải đáp ứng để có "1" cho đầu ra điều khiển nhất định. Bạn cũng có thể tìm thấy nó trên trang này .
Bạn có thể thấy rằng hầu hết những thứ trong bảng này đều có X ở các vị trí khác nhau. Hãy lấy ví dụ
011XXXXX 2 X RORRORA
Điều này có nghĩa là 3 bit đầu tiên của opcode phải là 011 và G phải là 2; không có gì khác Nếu vậy, đầu ra có tên RORRORA sẽ thành sự thật. Tất cả các mã ROR bắt đầu bằng 011; nhưng có những hướng dẫn khác cũng bắt đầu bằng 011. Chúng có thể cần được lọc ra bởi đơn vị "logic điều khiển ngẫu nhiên".
Vì vậy, về cơ bản, opcodes đã được chọn sao cho các hướng dẫn cần thực hiện tương tự như nhau có điểm chung trên mẫu bit của chúng. Bạn có thể thấy điều này bằng cách nhìn vào một bảng opcode ; tất cả các hướng dẫn OR bắt đầu bằng 000, tất cả các hướng dẫn Store bắt đầu bằng 010, tất cả các hướng dẫn sử dụng địa chỉ trang không đều có dạng xxxx01xx. Tất nhiên, một số hướng dẫn dường như không "phù hợp", vì mục đích không phải là định dạng opcode hoàn toàn thông thường mà là cung cấp một bộ hướng dẫn mạnh mẽ. Và đây là lý do tại sao "logic điều khiển ngẫu nhiên" là cần thiết.
Trang tôi đã đề cập ở trên nói rằng một số dòng đầu ra trong ROM xuất hiện hai lần, "Chúng tôi cho rằng điều này đã được thực hiện vì chúng không có cách định tuyến đầu ra của một số dòng mà chúng muốn, vì vậy chúng đặt cùng một dòng ở một dòng khác vị trí một lần nữa. " Tôi chỉ có thể tưởng tượng các kỹ sư vẽ tay từng cánh cổng một và đột nhiên nhận ra một lỗ hổng trong thiết kế và cố gắng đưa ra một cách để tránh bắt đầu lại toàn bộ quá trình.