Màn hình Amiga: Khái niệm đặc biệt làm nên huyền thoại máy tính thập niên 1980
Màn hình (screen) trên Amiga là một khái niệm độc đáo cho phép nhiều vùng hiển thị với độ phân giải và độ sâu màu khác nhau cùng tồn tại, kéo thả và chồng lớp trên một máy tính chỉ chạy 7 MHz. Bài viết giải thích cách phần cứng đồ họa OCS của Amiga vận hành và vì sao tính năng này vẫn khiến người hâm mộ say mê sau gần bốn thập kỷ.

Trong giới công nghệ, có một quy luật bất thành văn: hễ ở đâu nhắc đến Amiga, ở đó sẽ xuất hiện ít nhất một người hâm mộ Amiga nhảy vào giải thích khái niệm "screen" (màn hình). Họ sẽ nói rằng màn hình Amiga có thể có độ phân giải khác nhau, rằng người dùng có thể kéo thả chúng, và những người dùng Amiga khác sẽ gật gù đồng tình — trong khi phần còn lại của thế giới vẫn không hiểu có gì đặc biệt đến thế.
Bài viết này ra đời nhằm mục đích chuyển hóa những người dùng phổ thông thành tín đồ của màn hình Amiga. Để phục vụ mục đích thực tế, nội dung sẽ tập trung vào phần cứng đồ họa gốc của Amiga, gọi là OCS (Original ChipSet). Một số giới hạn phần cứng đã được gỡ bỏ trong các phiên bản nâng cấp ECS (Enhanced ChipSet) và AGA (Advanced Graphics Architecture), nhưng nguyên lý cơ bản và trải nghiệm người dùng vẫn giữ nguyên.
Màn hình Amiga thực chất là gì?
Trên Amiga, thuật ngữ "screen" xuất phát từ chính hệ điều hành, dùng để chỉ một loại vùng hiển thị cụ thể. Các lập trình viên game và demo ít quan tâm đến khái niệm này hơn — ví dụ, Amiga Hardware Reference Manual gọi vùng hiển thị là "playfield", còn lập trình viên demo có thể nói về "raster splits". Nhưng để đơn giản, chúng ta cứ gọi là screen.
Về cơ bản, màn hình trên Amiga là một vùng để vẽ đồ họa lên đó. Điểm khác biệt là màn hình Amiga có thể có độ phân giải và độ sâu màu khác nhau, và một chương trình có thể mở bất kỳ số lượng màn hình nào với các độ phân giải khác nhau.
Minh họa màn hình Amiga điển hình với Workbench và cửa sổ shell
Ngày nay, chúng ta hầu như chỉ dùng một vùng hiển thị cố định với một độ phân giải duy nhất — hệ quả của cách hệ điều hành hiện đại và màn hình phẳng vận hành. Nhưng thời hoàng kim của màn hình CRT, việc mở nhiều vùng hiển thị với độ phân giải khác nhau là chuyện bình thường. Một trình xem ảnh trên máy MS-DOS hỗ trợ VGA, chẳng hạn, có thể dùng chế độ text 16 màu 720x400 để duyệt file, rồi mở vùng hiển thị 256 màu 320x200 khi xem ảnh.
Những biến thiên về độ phân giải và độ sâu màu này tồn tại trên gần như mọi máy tính gia đình thời đó, vì phần cứng buộc phải đánh đổi để đạt tốc độ và mức tiêu thụ bộ nhớ hợp lý. Bộ nhớ khi ấy cực kỳ đắt đỏ, và Amiga với cấu hình chuẩn phải chia sẻ lượng RAM ít ỏi giữa CPU, phần cứng video và âm thanh — nhưng bù lại, máy trao cho lập trình viên quyền kiểm soát rất cao đối với độ phân giải và độ sâu màu.
Bitplane và bảng màu đánh chỉ số
Amiga thường dùng bảng màu đánh chỉ số (indexed palette): một số thanh ghi màu giới hạn cho mỗi màn hình chứa giá trị màu do người dùng định nghĩa. Các giá trị này được chọn từ không gian màu 12-bit (hoặc 24-bit trên AGA). Ví dụ, chỉ số màu 0 có thể đặt là $000 (đen) và chỉ số 1 là $F00 (đỏ).
Để thao tác giá trị màu của từng pixel, Amiga dùng đồ họa dạng phẳng (planar graphics), nghĩa là độ sâu màu của màn hình tăng lên bằng cách thêm các bitplane (viết tắt là bpl). Mỗi bitplane được lưu riêng trong bộ nhớ, và để thay đổi chỉ số màu của một pixel, phải lật một bit trong mỗi plane.
Minh họa cách các bitplane kết hợp để tạo chỉ số màu cho từng pixel
Như vậy, màn hình một bitplane cho hai chỉ số màu, hai bitplane cho bốn, và cứ tiếp tục như thế, tối đa năm bitplane với 32 màu trên phần cứng Amiga gốc (hoặc 8 bpl và 256 màu trên AGA).
Trên OCS và ECS, số bitplane tối đa mỗi màn hình phụ thuộc vào độ phân giải hiển thị, và chúng được thiết kế để hiển thị hợp lý trên TV hệ PAL hoặc NTSC. Amiga OCS có chế độ low-res và high-res:
- Trên PAL, low-res là 320x256 pixel (320x512 khi interlace) với tối đa 32 màu (5 bpl).
- High-res là 640x256 (640x512 khi interlace) với tối đa 16 màu (4 bpl).
Có thể tăng nhẹ các độ phân giải nền này bằng overscan, ở chế độ high-res có thể lên tới 724x283, nhưng không đảm bảo hiển thị đầy đủ trên mọi loại màn hình hay TV.
Ở chế độ low-res, bitplane thứ sáu có thể dùng cho HAM (Hold-And-Modify), cho phép sử dụng đồng thời toàn bộ 4096 màu của Amiga OCS (với một vài hạn chế), hoặc EHB (Extra Half-Brite) — nhân đôi bảng màu 32 màu thành 32 bản sao với độ sáng chỉ bằng một nửa.
Chỉnh sửa ảnh EHB trong Deluxe Paint với các cột màu half-brite
Vì sao planar graphics lại quan trọng?
Khác với hầu hết đối thủ cùng thời, Amiga có khả năng đa nhiệm thực sự (preemptive multitasking), và đồ họa dạng phẳng góp phần tiết kiệm tài nguyên rất hiệu quả. Một trình soạn thảo văn bản có thể chạy tốt trên màn hình 2 màu, tiết kiệm bộ nhớ để chạy song song một chương trình đồ họa trên màn hình 32 màu khác.
Cách lưu trữ này cũng tiết kiệm bộ nhớ vì chỉ cần đúng số bit cần thiết để lưu một pixel mà vẫn giữ địa chỉ bộ nhớ hợp lý, thay vì cấp phát một byte cho mỗi pixel và lãng phí các bit không dùng. Thêm vào đó, một màn hình có thể có kích thước và vị trí tùy ý — chẳng hạn hiển thị màn hình low-res 320x50 pixel ở đáy vùng hiển thị vật lý.
Amiga vốn được thiết kế như một cỗ máy chơi game, nên sở hữu rất nhiều tính năng phần cứng phục vụ đồ họa. Việc tái định vị màn hình diễn ra tức thì, và cuộn toàn bộ màn hình cực nhanh — đến mức hệ điều hành cho phép người dùng cấu hình một màn hình desktop lớn hơn vùng nhìn thấy và cuộn quanh nó bằng chuột.
Minh họa hai màn hình với độ phân giải và độ sâu màu khác nhau hiển thị đồng thời
Copper và phép thuật đổi màu theo từng dòng quét
Việc chuyển đổi độ phân giải và độ sâu màu nhanh đến vậy là nhờ copper — bộ đồng xử lý (co-processor) của Amiga. Copper hoạt động đồng bộ với phần cứng kết xuất video và cũng được dùng để thao tác giá trị màu và sprite phần cứng.
Một trong những hiệu ứng đặc trưng nhất là "copper gradients" hay "copper bars": giá trị màu của một thanh ghi màu được thay đổi mỗi dòng quét ngang, tạo ra các dải chuyển màu ấn tượng và nhiều màu trên màn hình hơn mức 32 chỉ số bảng màu cho phép.
Màn hình Workbench 4 màu với nền chuyển sắc tạo bằng copper
Kết hợp các màn hình có độ phân giải và độ sâu màu khác nhau mở ra vô số ứng dụng. Dù số màu tối đa mỗi màn hình là 32, nhưng 32 màu này có thể khác nhau trên từng màn hình. Nhờ vậy, một game có thể hiển thị đồng thời 64 màu trở lên bằng cách dùng 32 màu cho vùng chơi chính và 32 màu khác cho giao diện người dùng hoặc bảng trạng thái — rồi kết hợp thêm copper gradient để tăng số màu hơn nữa.
Kéo thả màn hình: tính năng gây tranh cãi
Vì độ phân giải hiển thị của máy tính gia đình và PC thời kỳ đầu rất thấp, hầu hết ứng dụng chạy toàn màn hình để hiển thị nhiều thông tin nhất có thể. Khi đa nhiệm trên Amiga, người dùng có thể chuyển nhanh giữa các màn hình bằng nút ở góc trên bên phải hoặc phím tắt toàn hệ thống.
Nhưng điểm khiến người hâm mộ Amiga say mê là khả năng kéo thả màn hình: nhấp chuột vào thanh tiêu đề và kéo xuống để lộ ra màn hình của chương trình khác đang chạy phía sau.
Cần thú nhận rằng, dù rất nhiều người hâm mộ Amiga ca ngợi tính năng này, mức độ hữu dụng thực tế của nó khá hạn chế, ít nhất là trong quy trình làm việc của người viết. Tuy nhiên, vào năm 1985, hiệu ứng này hẳn phải gây choáng váng, khi đa nhiệm và đồ họa màu hiếm khi xuất hiện cùng nhau ngoài các máy trạm Unix đắt đỏ.
Một gợi ý sử dụng: bạn có thể kéo nhẹ màn hình chương trình chat xuống để kiểm tra tiến độ tải file trên trình duyệt phía sau. Nhưng vì việc chuyển màn hình toàn phần trên Amiga diễn ra quá mượt mà, thao tác kéo thường có cảm giác khá cồng kềnh.
Để chứng minh tốc độ xử lý màn hình nhanh đến mức nào, tác giả đã quay một đoạn phim ngắn từ màn hình phẳng kết nối với Amiga 600 — một cỗ máy 7 MHz (tức 0,007 GHz) dựa trên phần cứng về cơ bản giống với chiếc Amiga 1000 nguyên bản năm 1985. Máy vừa phát nhạc, vừa chạy trình soạn thảo văn bản và chương trình đồ họa Deluxe Paint, đồng thời thực hiện chuyển đổi và kéo thả màn hình.
Dual playfields: trong suốt và chồng lớp
Amiga còn có khả năng gọi là dual playfields, cho phép hai màn hình chồng lên nhau, trong đó chỉ số màu 0 trên màn hình phía trước trở nên trong suốt và hiển thị nội dung của màn hình phía dưới. Các chỉ số màu khác giữ nguyên, và mọi thao tác thông thường như cuộn, vẽ đồ họa, đổi bảng màu vẫn có thể thực hiện độc lập trên từng màn hình.
Ví dụ trong một ảnh chụp màn hình kết hợp dual playfields với sprite: nền màu mận và các ngôi sao hồng được vẽ trên background playfield — một màn hình 4 màu. Các thanh màu xanh lá và tím là sprite, với mức ưu tiên vẽ được đặt để nằm giữa hai playfield. Mọi thứ còn lại được vẽ trên foreground playfield — một màn hình 8 màu. Phần cứng Amiga đảm bảo mỗi lớp đều có thể chuyển động mượt mà ngay cả trên cỗ máy 7 MHz.
Từ Amiga đến màn hình rộng hiện đại
Trên máy tính hiện đại, tác giả thường thích chạy các chương trình dưới dạng cửa sổ xếp lớp. Một phần vì màn hình ngày nay đủ rộng rãi, một phần vì nhiều chương trình hiện đại được thiết kế cho kiểu hành vi đó. Một số ứng dụng như Visual Studio Code vẫn thích chạy tối đa hóa toàn màn hình, và nhờ virtual desktop của trình quản lý cửa sổ, có thể chuyển sang vùng làm việc khác nhanh như trên Amiga.
Tuy nhiên, một số chương trình trông ngớ ngẩn khi tối đa hóa trên màn hình rộng độ phân giải cao. Đọc man page trong cửa sổ terminal 80 cột, hay dùng các trình quản lý file truyền thống ở tỷ lệ khung gần vuông như 5:4, vẫn cho cảm giác hợp lý hơn hẳn. Việc chạy nhiều ứng dụng dạng cửa sổ trên cùng một màn hình có ưu điểm là tất cả đều hiển thị cùng lúc, cho phép chuyển ngữ cảnh nhanh — nhưng nhược điểm là một số thao tác chuột chỉ thực sự hiệu quả với ứng dụng toàn màn hình.
Lấy Directory Opus làm ví dụ. Đây là một trong những trình quản lý file truyền thống tốt nhất, và khi chạy toàn màn hình trên Amiga, người dùng có thể làm những việc thú vị như đẩy con trỏ chuột sát mép màn hình rồi nhấp một lần để nhảy lên thư mục cha của thư mục đang hiển thị. Tính năng tương tự hoàn toàn có thể cài đặt trong môi trường hướng cửa sổ hơn, nhưng sẽ vô nghĩa: không có mép màn hình làm ranh giới cho con trỏ chuột, vùng nhấp mỏng manh ấy sẽ khó nhắm trúng đến phát bực.
Một thú vui đơn giản hơn nhưng khó tái hiện đúng trên màn hình rộng hiện đại là việc chỉnh sửa code — hoặc chạy gần như bất kỳ ứng dụng terminal nào — trong chế độ text toàn màn hình 80x24 ký tự. Có điều gì đó ở tỷ lệ ấy khiến người ta cảm thấy thật đúng.
Bài viết này mới chỉ chạm đến bề mặt của màn hình và phần cứng đồ họa Amiga. Đồ họa dạng phẳng cho phép vô số thủ thuật và hiệu ứng thú vị bằng cách chỉ thao tác một phần các bitplane tạo nên giá trị màu của pixel. Chưa kể phần cứng blitter của Amiga — cho phép sao chép bộ nhớ đồ họa cực nhanh với nhiều chế độ kết hợp hoặc che bitplane, vô cùng hữu ích cho các pha hành động arcade tốc độ cao.
Sprite cũng mới chỉ được nhắc sơ qua, chưa bàn đến cách chúng thêm màu cho màn hình ít bitplane hoặc được ghép kênh để tăng số màu cho sprite. Độc giả muốn tìm hiểu sâu hơn có thể tham khảo Codetapper's Amiga Site — nơi phân tích chi tiết khía cạnh lập trình đồ họa của game Amiga. Đặc biệt đáng đọc là bài về Shadow of the Beast, tựa game sử dụng phần cứng đồ họa Amiga cực kỳ sáng tạo, tạo nên hình ảnh choáng ngợp với nhiều lớp cuộn parallax mượt mà.
Tóm lại, màn hình Amiga sở hữu nhiều đặc tính thú vị, và phần mềm Amiga — kể cả hệ điều hành — khai thác chúng rất tốt. Nhờ vậy, cỗ máy có tài nguyên phần cứng hạn chế và độ phân giải hiển thị tương đối thấp vẫn đạt được quy trình đa nhiệm hiệu quả.
Và giờ, sau khi đã nhắc đến Amiga trên mạng, tác giả chỉ còn biết chờ đợi một người hâm mộ Amiga nào đó gửi mail giải thích màn hình Amiga tuyệt vời ra sao. Trong lúc chờ, xin chúc bạn bảo trọng và code vui vẻ!

