furnace/doc/7-systems/pcspkr.md
Electric Keet 81ab2acb2c Lots of little cleanup.
Trying for more consistency and clarity, especially for quick reference.
2023-06-25 00:05:30 -07:00

1.7 KiB
Raw Blame History

PC Speaker

40 years of one square beep and still going! Single channel, no volume control...

real output

so far this is the only chip in Furnace which has a real hardware output option. to enable it, select file > configure chip... > PC Speaker > Use system beeper.

be noted that this will only work on Linux as Windows does not provide any user-space APIs to address the PC speaker directly!

you may configure the output method by going in Settings > Emulation > PC Speaker strategy:

  • evdev SND_TONE: uses input events to control the beeper.
    • requires write permission to /dev/input/by-path/platform-pcspkr-event-spkr.
    • is not 100% frequency-accurate as SND_TONE demands frequencies, but Furnace uses raw timer periods...
  • KIOCSOUND on /dev/tty1: sends the KIOCSOUND ioctl to control the beeper.
    • may require running Furnace as root.
  • /dev/port: writes to /dev/port to control the beeper.
    • requires read/write permission to /dev/port.
  • KIOCSOUND on standard output: sends the KIOCSOUND ioctl to control the beeper.
    • requires running Furnace on a TTY.
  • outb(): uses the low-level kernel port API to control the beeper.
    • requires running Furnace as root, or granting it CAP_SYS_RAWIO to the Furnace executable: sudo setcap cap_sys_rawio=ep ./furnace.

real hardware output only works on BIOS/UEFI (non-Mac) x86-based machines! attempting to do this under any other device will not work, or may even brick the device (if using /dev/port or outb())! oh, and of course you also need the beeper to be present in your machine. some laptops connect the beeper output to the built-in speakers (or the audio output jack), and some other don't do this at all.

effects

ha! effects...