====== 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. |