Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
interrupt_scheduler [2016/05/23 01:03] ex_writer [Interrupt Scheduler Routines] |
— (current) | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Interrupt Scheduler ====== | ||
- | |||
- | The Interrupt Scheduler handles system timers and counters. | ||
- | |||
- | ===== Interrupt Scheduler Routines ===== | ||
- | |||
- | ^ Name ^ Description ^ | ||
- | | [[interrupt scheduler#actint|ACTINT]] | Activate automatic interrupt service (timers, music, blackout) | | ||
- | | [[interrupt scheduler#ctimer|CTIMER]] | Call custom timer | | ||
- | | [[interrupt scheduler#deccts|DECCTS]] | Decrement counters/timers under mask (used by ACTINT and DECCTS) | | ||
- | | [[interrupt scheduler#stimer|STIMER]] | Track and decrement game timers | | ||
- | ===== Interrupt Scheduler Routine Descriptions ===== | ||
- | |||
- | ==== ACTINT ==== | ||
- | |||
- | ACTIVE INTERRUPTS | ||
- | |||
- | | Calling Sequence: | <code z80>SYSTEM ACTINT</code> or <code z80>SYSSUK ACTINT</code>| | ||
- | | Arguments: | None | | ||
- | | Outputs: | None | | ||
- | | Function: | Sets IM=2, INLIN=200, sets I register + INFBK\\ Calls TIMEX and TIMEY\\ Enables interrupts | | ||
- | | Description: | Once ACTINT is called, it provides interrupt service completely automatically. It runs the seconds timer, the game timer, the music processor, and blackout timers, plus CT0, CT1, CT2, CT3. Timers function every 1/60th of a second. | | ||
- | |||
- | ==== CTIMER ==== | ||
- | |||
- | CUSTOM TIMER | ||
- | |||
- | | Calling Sequence: | <code z80>CALL CTIMER</code>| | ||
- | | 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]] | | ||
- | | Notes: | None | | ||
- | | Description: | HL is loaded and decremented. 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. | | ||
- | | Restrictions: | None | | ||
- | ==== DECCTS ==== | ||
- | |||
- | DECREMENT COUNTERS/TIMERS | ||
- | |||
- | | Calling Sequence: | <code z80>SYSTEM DECCTS</code> or <code z80>SYSSUK DECCTS | ||
- | DB (mask)</code>| | ||
- | | Arguments: | C = mask for which counters to decrement | | ||
- | | Outputs: | Sentry will notify the program | | ||
- | | Description: | Decrements counter if they are non-zero. If any counters go from 1 to 0, sentry is notified. | | ||
- | ==== STIMER ==== | ||
- | |||
- | DECREMENT TIMERS | ||
- | |||
- | | Calling Sequence: | <code z80>PUSH AF | ||
- | PUSH BC | ||
- | PUSH DE | ||
- | PUSH HL | ||
- | CALL STIMER | ||
- | POP HL | ||
- | POP DE | ||
- | POP BC | ||
- | POP AF</code>| | ||
- | | Input: | None | | ||
- | | Description: | STIMER keeps track of game time. If it hits 0, then GSBEND bit in the game status byte is set. | | ||
- | | Uses: | AF, BC, DE, HL | | ||
- | | Calls: | Music processor on note (duration) expiration | | ||
- | | Note: | Sets bit 7 of KEYSEX to 1 on every second | | ||