2017-09-06 43 views
7

Trong khi thực hiện một vòng lặp trong các chương trình lắp ráp 8086 của tôi, có một ngưỡng nhấn phím bàn phím trong đó nếu bạn nhấn một phím quá nhiều lần, loa PC sẽ bắt đầu kêu bíp. Đó là đáng ghét, và nó làm chậm chương trình của tôi để thu thập thông tin từ khi CPU phải nhảy ra khỏi chương trình của tôi và dành nửa giây lái xe loa.Làm thế nào để bạn vô hiệu hóa ngắt tiếng bíp loa PC xảy ra trong khi lặp?

Tôi thậm chí không biết vấn đề này tồn tại cho đến khi tôi bắt đầu thử nghiệm các chương trình của mình trên phần cứng thực tế cách đây vài tháng. Vấn đề này không phải là một vấn đề trong DosBox, hoặc ngay cả trong Dos 6.22 cài đặt bên trong DosBox. Vì vậy, nó phải là một số phần cứng cấp thấp gián đoạn được xây dựng vào BIOS PC, tôi không biết quá nhiều về công cụ này.

Nó xảy ra trên máy 286 của tôi và máy tính xách tay Pentium mmx của tôi bất kể hệ điều hành.

Thậm chí nếu nó chỉ là một vòng lặp chết, và tôi không phải là thậm chí bỏ phiếu cho đầu vào bàn phím, tiếng bíp vẫn xảy ra nếu tôi nhấn quá nhiều phím

Tôi đã thử gói chỉ nhập mã của tôi bên trong cli & sti để hy vọng mặt nạ đầu vào bàn phím của tôi từ hệ thống, nhưng điều đó không thực sự làm việc. Tôi thu thập một scancode chỉ ở một điểm duy nhất trong chương trình của tôi, do đó, phần còn lại của thời gian, ngắt được kích hoạt. Vì vậy, tiếng bíp vẫn có thể xảy ra phần lớn thời gian.

Phải có một số đăng ký phần cứng mà tôi có thể vô hiệu hóa hoặc một cái gì đó. Tôi lấy một cái nhìn tốt đẹp thông qua danh sách cổng của Boch (http://bochs.sourceforge.net/techspec/PORTS.LST) tìm kiếm một cái gì đó như thế, nhưng không thấy bất cứ điều gì.

Có lẽ tôi chỉ có thể tắt ngắt? Tôi tưởng tượng rằng rất nhiều lập trình viên lắp ráp phải đã gặp vấn đề này, nhưng Google thực sự không giúp tôi chút nào ở đây.

+0

Có thể có một cài đặt trong BIOS của bạn để tắt âm thanh. –

+0

Không, không có. Chỉ cần được rõ ràng, tôi không nói về âm thanh tiếng bíp báo chí nhỏ mà bạn có thể kích hoạt trong một số BIOS như một loại nhấp chuột giả mạo. Đây là cái gì đó chỉ xảy ra ở giữa các chương trình. Về cơ bản, máy tính đang cố gắng cảnh báo tôi bằng cách hét vào mặt tôi, "HEY YOU'RE STUCK IN A LOOP! BẠN CÓ BIẾT R THNG?" Nó chỉ là một cảnh báo không mong muốn không hữu ích trong trường hợp của tôi. –

+7

BIOS đang kêu bíp để cảnh báo bạn về thực tế là [bộ đệm gõ bàn phím] (https://support.microsoft.com/en-us/help/43993/how-to-flush-the-keyboard-typeahead-buffer) đã đầy. Rõ ràng chương trình của bạn không xóa bộ đệm. Vui lòng chia sẻ một số mã để chúng tôi có thể biết bạn đang sử dụng phương pháp nào để đọc đầu vào bàn phím. –

Trả lời

9

BIOS đang kêu bíp để cảnh báo bạn về thực tế là bộ đệm bàn phím typeahead đã đầy. Trong DOS, điều này thường xảy ra với các chương trình (vĩnh viễn hoặc tạm thời) không đọc đầu vào bàn phím.

Trong trường hợp của bạn, bạn đang đọc đầu vào bàn phím nhưng không theo cách phù hợp. Bạn đang đọc trực tiếp từ phần cứng (cổng I/O 60h), nhưng dường như bạn không bắt gặp ngắt bàn phím (INT 09h). Điều này có nghĩa là trong nền, BIOS cũng đang xử lý đầu vào bàn phím. Điều này có hai tác dụng phụ khó chịu.

  • Bộ đệm gõ bàn phím BIOS được tô đầy. Điều này không chỉ làm cho máy phát ra tiếng bíp, các tổ hợp phím không được xử lý cũng chồng chất lên như rác chờ đợi để tràn ra khi chương trình của bạn thoát ra và rơi trở lại dấu nhắc lệnh.
  • Bạn có thể bỏ lỡ các lần nhấn phím vì BIOS đánh bại bạn.

Về cơ bản, có ba cách để giải quyết vấn đề này.

  1. Sử dụng cuộc gọi BIOS hoặc cuộc gọi DOS để đọc đầu vào bàn phím.
  2. Tạo một trình xử lý ngắt bàn phím thích hợp, nơi bạn sử dụng các cổng 60h, 61h và 20h để tìm các sự kiện bàn phím ('make' và 'break').
  3. (Không chắc chắn về điều này nữa :) Trực tiếp kéo tổ hợp phím từ bộ đệm typeahead bàn phím BIOS.

Tùy chọn đầu tiên được khuyến khích. Tùy chọn thứ hai được ưu tiên nếu ứng dụng của bạn phải có khả năng phát hiện nhiều khóa được giữ cùng một lúc (thường là trò chơi điện tử).Đây không phải là một nhiệm vụ tầm thường, do đó bạn sẽ cần một số trợ giúp ở đó.

Các vấn đề liên quan