Files
AdvOpsys/notes/work-summary-2026-04-15-v2.md
2026-04-15 23:04:33 +00:00

1.5 KiB

Assignment 5

#Overview

This assignment implements a simple music player using the PC speaker (PCSPK) and the Programmable Interval Timer (PIT).
Songs are played by generating frequencies and controlling timing between notes.


#HowItWorks

#PCSpeaker

The PC speaker is controlled through port 0x61:

  • Bits 0 and 1 enable/disable sound output

#PIT

The PIT is used for:

#SoundGeneration

  • Channel 2 generates square wave audio
  • Frequency is set using:

divisor = PIT_BASE_FREQ / frequency

#Timing

  • Channel 0 runs at ~1000 Hz
  • A tick counter is incremented via interrupts
  • SleepInterrupt() is used for accurate note timing

#Implementation

#Playback

Each note contains:

  • Frequency (Hz)
  • Duration (ms)

Playback works by:

  1. Setting frequency with PlaySound()
  2. Waiting using SleepInterrupt()
  3. Stopping sound with StopSound()

Rests are handled using R = 0.


#Challenges

#Timing

Busy-wait delays caused incorrect timing.
This was solved by using interrupt-based sleeping.

#QEMU

QEMU has limited PC speaker support:

  • Fast note changes sound unclear
  • Songs degrade at high speed

#Adjustments

To improve playback clarity:

duration = original_duration * 2

This slows down the songs and makes notes more distinguishable.


#Conclusion

The system successfully:

  • Generates sound using the PC speaker
  • Uses PIT for timing and frequency control
  • Plays songs with multiple notes

Limitations in QEMU affect sound quality, but the implementation itself works as i