home *** CD-ROM | disk | FTP | other *** search
/ Set of Apple II Hard Drive Images / hard.hdv / HARD / FORTH / CLOCK.ASS < prev    next >
Encoding:
Text File  |  1993-12-23  |  3.4 KB  |  165 lines  |  [04] ASCII Text (0x0000)

  1. \ INTERRUPT ROUTINES
  2. \
  3. \ DEALLOCINT
  4. \ ALLOCINT
  5. \ DEACTIVATE
  6. \ ACTIVATE
  7. \ CLOCKINT
  8. \
  9. \ TEMPO
  10. \ MIDISLOT
  11. \ TIMECTR
  12. \ BPM
  13.  
  14. HEX
  15.  
  16. 2 OBJECT DEALLOCINT
  17. \ 1 = 01 (# PARMS FOR DEALLOC)
  18. \ 2 = INT #
  19. OBJ-CODE
  20.          1 # LDA,            \ SETUP # PARMS
  21.          1 PARM STA,
  22.          BF00 JSR,
  23.          41 C,
  24.          1 PARM ,
  25.          CS IF,              \ IF ERROR
  26.              FDDA JSR,       \ PRINT RTN CODE
  27.              BRK,
  28.          THEN,
  29. OBJ-END
  30.  
  31.  
  32. 4 OBJECT ALLOCINT
  33. \
  34. \ FROM FORTH:
  35. \    ADRS-OF-INT-HANDLER ALLOC
  36. \
  37. \ CONTAINS PARM LISTS FOR ALLOC & DEALLOC
  38. \ 1 = 02 (# PARMS FOR ALLOC)
  39. \ 2 = INT #
  40. \ 3,4 = ADRS OF INT HANDLER (INPUT)
  41. \
  42. \ FORTH INTERFACE:
  43. BOT LDA,           \ PICK UP ADDRESS
  44. 3 PARM STA,        \ INTO INT HANDLER ADRS
  45. BOT 1+ LDA,
  46. 4 PARM STA,
  47. INX, INX,          \ REMOVE PARM FROM STACK
  48.  
  49. OBJ-CODE
  50.  
  51.          2 # LDA,            \ SETUP #PARMS 
  52.          1 PARM STA,
  53.          BF00 JSR,           \ MLI
  54.          40 C,               \ ALLOC INT
  55.          1 PARM ,            \ PARM ADRS
  56.          CS IF,              \ IF ERROR
  57.              FDDA JSR,       \ PRINT RTN CODE
  58.              BRK,
  59.          THEN,
  60.          2 PARM LDA,         \ SAVE INT #
  61.          2 'PARM DEALLOCINT STA,   \ FOR DEALLOC
  62. OBJ-END
  63.  
  64. VARIABLE MIDISLOT   2    MIDISLOT !
  65. VARIABLE MICROSEC   2048 MICROSEC !
  66.  
  67. MIDISLOT @ 10 * C080 + CONSTANT SLOTADRS
  68.  
  69. \ ===================================
  70. 0 OBJECT ACTIVATE     
  71. \ ===================================
  72. OBJ-CODE
  73.  
  74.      1 #           LDA,      \ STOP CLOCK 
  75.      SLOTADRS      STA,
  76.                    SEI,
  77.          BF # LDA,           \ MAKE SURE PRODOS 
  78.          3FF STA,            \ INTERRUPT VECTOR
  79.          EB # LDA,           \ IS INTACT.
  80.          3FE STA,
  81.      43 #          LDA,
  82.      SLOTADRS 1+   STA,
  83.      4 #           LDA,      \ REGISTER FOR TIMER H
  84.      SLOTADRS      STA,
  85.      MICROSEC 1+      LDA,
  86.      SLOTADRS 4 +  STA,
  87.      5 #           LDA,      \ REGISTER FOR TIMER L
  88.      SLOTADRS      STA,
  89.      MICROSEC      LDA,
  90.      SLOTADRS 5 +  STA,
  91.      1 #           LDA,      \ WRITE CTRL REG 2
  92.      SLOTADRS      STA,
  93.      C3 #          LDA,      \ CONTINUOUS, IRQ, TIMER OUTPUT
  94.      SLOTADRS      STA,
  95.                    CLI,
  96.      0 #           LDA,
  97.      SLOTADRS      STA,      \ ACTIVATE INTERRUPT
  98. OBJ-END
  99.  
  100.   
  101. 0 OBJECT DEACTIVATE
  102. OBJ-CODE
  103.                    SEI,
  104.      1 #           LDA,
  105.      SLOTADRS      STA,
  106.      13 #          LDA,           \ DISABLE INTERRUPTS
  107.      SLOTADRS 8 +  STA,
  108.      11 #          LDA,
  109.      SLOTADRS 8 +  STA,
  110.                    CLI,
  111. OBJ-END
  112.  
  113.  
  114. VARIABLE TIMECTR
  115.  
  116. \ INTERRUPT HANDLER FOR CLOCK
  117. \ ===========================
  118. 3 OBJECT CLOCKINT
  119. \ ===========================
  120.      \ 3 PARMS FOR JMP VECTOR
  121.      NEXT          JMP,      \ NO FORTH INTERFACE
  122.  
  123. OBJ-CODE
  124.                    CLD,
  125.      SLOTADRS 1+   LDA,      \ IS IT OURS?
  126.      0< NOT IF,
  127.                    SEC,      \ NO- GET OUT
  128.                    RTS,
  129.      ELSE,
  130.  
  131.        1 #         LDA,    \ STOP CLOCK
  132.        SLOTADRS    STA,
  133.  
  134.        TIMECTR       INC,      \ ADD 1
  135.        0=          IF,
  136.          TIMECTR 1+  INC,
  137.        THEN,
  138. \
  139. \ REMOVED DOWNCTR LOGIC
  140.      THEN,
  141.      0 #      LDA,
  142.      SLOTADRS STA,    \ REACTIVATE CLOCK
  143.      CLC,          \ CLAIM INT
  144.      RTS,
  145.     
  146. OBJ-END
  147.  
  148. DEC
  149.  
  150. \ ALLOCATE CLOCK INTERRUPT
  151.  
  152. : INITCLOCK
  153.     [ ' CLOCKINT 22 + ] LITERAL ALLOCINT
  154. ;
  155.  
  156. VARIABLE BEAT        240 BEAT  !
  157. VARIABLE TEMPO       128 TEMPO !
  158.  
  159. : BPM ( #BEATS-PER-MIN )
  160.     TEMPO !
  161.     1024 
  162.     1024 60 BEAT @ */       \ EX: 1024 * 60/240 = 256
  163.     TEMPO @ */ MICROSEC !   
  164. ;
  165.