home *** CD-ROM | disk | FTP | other *** search
Text File | 1993-12-23 | 3.4 KB | 165 lines | [04] ASCII Text (0x0000) |
- \ INTERRUPT ROUTINES
- \
- \ DEALLOCINT
- \ ALLOCINT
- \ DEACTIVATE
- \ ACTIVATE
- \ CLOCKINT
- \
- \ TEMPO
- \ MIDISLOT
- \ TIMECTR
- \ BPM
-
- HEX
-
- 2 OBJECT DEALLOCINT
- \ 1 = 01 (# PARMS FOR DEALLOC)
- \ 2 = INT #
- OBJ-CODE
- 1 # LDA, \ SETUP # PARMS
- 1 PARM STA,
- BF00 JSR,
- 41 C,
- 1 PARM ,
- CS IF, \ IF ERROR
- FDDA JSR, \ PRINT RTN CODE
- BRK,
- THEN,
- OBJ-END
-
-
- 4 OBJECT ALLOCINT
- \
- \ FROM FORTH:
- \ ADRS-OF-INT-HANDLER ALLOC
- \
- \ CONTAINS PARM LISTS FOR ALLOC & DEALLOC
- \ 1 = 02 (# PARMS FOR ALLOC)
- \ 2 = INT #
- \ 3,4 = ADRS OF INT HANDLER (INPUT)
- \
- \ FORTH INTERFACE:
- BOT LDA, \ PICK UP ADDRESS
- 3 PARM STA, \ INTO INT HANDLER ADRS
- BOT 1+ LDA,
- 4 PARM STA,
- INX, INX, \ REMOVE PARM FROM STACK
-
- OBJ-CODE
-
- 2 # LDA, \ SETUP #PARMS
- 1 PARM STA,
- BF00 JSR, \ MLI
- 40 C, \ ALLOC INT
- 1 PARM , \ PARM ADRS
- CS IF, \ IF ERROR
- FDDA JSR, \ PRINT RTN CODE
- BRK,
- THEN,
- 2 PARM LDA, \ SAVE INT #
- 2 'PARM DEALLOCINT STA, \ FOR DEALLOC
- OBJ-END
-
- VARIABLE MIDISLOT 2 MIDISLOT !
- VARIABLE MICROSEC 2048 MICROSEC !
-
- MIDISLOT @ 10 * C080 + CONSTANT SLOTADRS
-
- \ ===================================
- 0 OBJECT ACTIVATE
- \ ===================================
- OBJ-CODE
-
- 1 # LDA, \ STOP CLOCK
- SLOTADRS STA,
- SEI,
- BF # LDA, \ MAKE SURE PRODOS
- 3FF STA, \ INTERRUPT VECTOR
- EB # LDA, \ IS INTACT.
- 3FE STA,
- 43 # LDA,
- SLOTADRS 1+ STA,
- 4 # LDA, \ REGISTER FOR TIMER H
- SLOTADRS STA,
- MICROSEC 1+ LDA,
- SLOTADRS 4 + STA,
- 5 # LDA, \ REGISTER FOR TIMER L
- SLOTADRS STA,
- MICROSEC LDA,
- SLOTADRS 5 + STA,
- 1 # LDA, \ WRITE CTRL REG 2
- SLOTADRS STA,
- C3 # LDA, \ CONTINUOUS, IRQ, TIMER OUTPUT
- SLOTADRS STA,
- CLI,
- 0 # LDA,
- SLOTADRS STA, \ ACTIVATE INTERRUPT
- OBJ-END
-
-
- 0 OBJECT DEACTIVATE
- OBJ-CODE
- SEI,
- 1 # LDA,
- SLOTADRS STA,
- 13 # LDA, \ DISABLE INTERRUPTS
- SLOTADRS 8 + STA,
- 11 # LDA,
- SLOTADRS 8 + STA,
- CLI,
- OBJ-END
-
-
- VARIABLE TIMECTR
-
- \ INTERRUPT HANDLER FOR CLOCK
- \ ===========================
- 3 OBJECT CLOCKINT
- \ ===========================
- \ 3 PARMS FOR JMP VECTOR
- NEXT JMP, \ NO FORTH INTERFACE
-
- OBJ-CODE
- CLD,
- SLOTADRS 1+ LDA, \ IS IT OURS?
- 0< NOT IF,
- SEC, \ NO- GET OUT
- RTS,
- ELSE,
-
- 1 # LDA, \ STOP CLOCK
- SLOTADRS STA,
-
- TIMECTR INC, \ ADD 1
- 0= IF,
- TIMECTR 1+ INC,
- THEN,
- \
- \ REMOVED DOWNCTR LOGIC
- THEN,
- 0 # LDA,
- SLOTADRS STA, \ REACTIVATE CLOCK
- CLC, \ CLAIM INT
- RTS,
-
- OBJ-END
-
- DEC
-
- \ ALLOCATE CLOCK INTERRUPT
-
- : INITCLOCK
- [ ' CLOCKINT 22 + ] LITERAL ALLOCINT
- ;
-
- VARIABLE BEAT 240 BEAT !
- VARIABLE TEMPO 128 TEMPO !
-
- : BPM ( #BEATS-PER-MIN )
- TEMPO !
- 1024
- 1024 60 BEAT @ */ \ EX: 1024 * 60/240 = 256
- TEMPO @ */ MICROSEC !
- ;
-