Функция Beep (из модуля Windows) меня не устраивает, так как останавливает приложение. Запускать в отдельном потоке неохота, по-моему, это будет совсем сложно.
Я нашёл пример на асме, работающий с портами. Но это под виндой запрещено.
Я решил попробовать писать в порты не на асме, нашёл какую-то функцию WRITE_PORT_UCHAR из библиотеки hal.dll. Как ей пользоваться, я так и не понял, потому что, если её подключить (я пока хз, с какой сигнатурой), то приложение при старте (ровно при старте, то есть даже до попытки выполнить хоть что-то) выдаёт C0000005 (в модуле Windows это типа ошибка STATUS_ACCESS_VIOLATION).
Короче, я тут тему создавал, только я её найти не могу. И там меня уговорили на миди. Мне пока интереснее сделать динамиком, да и кому-то ещё вопрос может пригодиться.