====== Interrupt Scheduler ====== The Interrupt Scheduler handles systems dependent upon timing, i.e., counters, timers, music, and interrupts. ===== Interrupt Scheduler Routines ===== ^ Name ^ Description ^ | [[interrupt scheduler#actint|ACTINT]] | Activate automatic interrupt service (timers, music, blackout) | | [[interrupt scheduler#bmusic|BMUSIC]] | Begin playing music | | [[interrupt scheduler#ctimer|CTIMER]] | Call custom timer | | [[interrupt scheduler#deccts|DECCTS]] | Decrement counters/timers under mask (used by ACTINT and DECCTS) | | [[interrupt scheduler#emusic|EMUSIC]] | Stop music | | [[interrupt scheduler#stimer|STIMER]] | Track and decrement game timers | ===== Interrupt Scheduler Routine Descriptions ===== ==== ACTINT ==== ACTIVE INTERRUPTS | Calling Sequence: | SYSTEM ACTINT or SYSSUK ACTINT| | Arguments: | None | | Description: | ACTINT provides automatic [[hardware:interrupts|interrupt]] service and runs the seconds timer, the game timer, the music processor, and blackout timers, plus CT0–CT3. Functions as 60th of a second timers. | Once ACTINT is called, it sets: * Z80 Interrupt mode 2 (IM 2) * INLIN = C8H = 200 (i.e., line 100) * I register and Interrupt Feedback (INFBK) * Enable interrupts (EI) ACTINT also calls TIMEX and TIMEY which decrement counters/timers. Appears to call TIMEZ rather than TIMEX? CTIMER calls TIMEX. ==== CTIMER ==== CUSTOM TIMER | Calling Sequence: | CALL CTIMER| | Input: | HL = address of custom time base\\ B = value to load into time base 1 to 0 transition\\ C = counter mask as in [[interrupt scheduler#deccts|DECCTS]] | | Description: | Calls TIMEX, which decrements a time base in RAM (HL). If HL != 0, then a return is executed, otherwise, HL is loaded with B and [[interrupt scheduler#deccts|DECCTS]] is called.\\ \\ Registers HL, DE, BC, and AF are undefined upon exit. | ==== BMUSIC ==== BEGIN PLAYING MUSIC | Calling Sequence: | SYSTEM BMUSIC or SYSSUK BMUSIC DW (music stack) DB (voices byte) DW (score)| | Arguments: | A = voices to start with\\ HL = music program counter (score)\\ IX = music stack pointer | | Description: | Quiets any previous music, then interprets specified "score." | ==== DECCTS ==== DECREMENT COUNTERS/TIMERS | Calling Sequence: | SYSTEM DECCTS or SYSSUK DECCTS DB (mask)| | Arguments: | C = mask for which counters to decrement | | Outputs: | [[human interface#sentry|SENTRY]] will notify the program | | Description: | Decrements counter if they are non-zero. If any counters go from 1 to 0, [[human interface#sentry|SENTRY]] is notified. | ==== EMUSIC ==== STOP MUSIC | Calling Sequence: | SYSTEM EMUSIC or SYSSUK EMUSIC| | Arguments: | None | | Description: | Outputs 0 to volume ports and halt music processor. | ==== STIMER ==== DECREMENT TIMERS | Calling Sequence: | PUSH AF PUSH BC PUSH DE PUSH HL CALL STIMER POP HL POP DE POP BC POP AF| | Input: | None | | Description: | STIMER keeps track of game time. If it hits 0, then bit 7 (GSBEND, i.e., game end) in the game status byte (GAMSTB) is set. | | Notes: | Uses AF, BC, DE, and HL.\\ \\ Sets bit 7 of KEYSEX (KEYS-EX tracking byte) to 1 on every second. \\ \\ Calls music processor on note (duration) expiration. |