home *** CD-ROM | disk | FTP | other *** search
/ Set of Apple II Hard Drive Images / hard.hdv / HARD / FORTH / ALTSEQ.WRD < prev    next >
Encoding:
Text File  |  1991-03-14  |  1.8 KB  |  82 lines  |  [04] ASCII Text (0x0000)

  1. ( ALTERNATIVE SEQUENCER )
  2.  
  3. MASC DEFINITIONS
  4.  
  5. ( NOTE - SENDNOTES AND KLR ALREADY HAVE ML CODE LOADED )
  6. ( THESE WORDS COME AFTER SENDNOTES AND KLR )
  7.  
  8. HEX
  9.  
  10.  
  11. ( SPEED MODIFIES FIRST LDA# INSTRUCTION IN SENDNOTES )
  12. : SPEED ( BYTE -- )
  13.    ' SENDNOTES 1+ [COMPILE] LITERAL C!
  14. ;
  15.  
  16.  
  17. ( MIDICHNL MODIFIES THE SECOND LDA# INSTRUCTION IN SENDNOTES )
  18. : MIDICHNL ( CHNL # 0-15 -- )
  19.    0F AND 90 + 
  20.    ' SENDNOTES 5 + [COMPILE] LITERAL C!
  21. ;
  22.  
  23.  
  24. 19 CONSTANT SNADRS  ( ADDRESS PICKED UP BY SENDNOTES )
  25. 1B CONSTANT SNSPEED ( SENDNOTES STORES PLAYBACK SPEED IN HERE )
  26.  
  27.  
  28. ( SEQUENCE STORES 0 AS THE INITIAL LENGTH AND PFA ADRS FOR END-SEQ)
  29. ( WHEN WORD IS EXECUTED, RETURNS STARTING ADDRESS AND LENGTH )
  30.  
  31. VARIABLE SEQPFA
  32.  
  33. : SEQUENCE  ( -- ) ( -- STARTADRS, LENGTH )
  34.    CREATE INIT 40 VOL QN   HERE SEQPFA ! 0 , DOES>    
  35.    DUP 2+ SWAP @  
  36. ;
  37.  
  38. : PLAYADRS ( ADRS -- )
  39.    SNADRS !
  40.    SENDNOTES KLR
  41.    SNSPEED C@ ' SENDNOTES 1+ [COMPILE] LITERAL C! 
  42.    ( GETS FINAL SPEED AND MODIFIES FIRST LDA# INSTRUCTION IN SENDNOTES )
  43. ;
  44.  
  45.  
  46. : PLAYIMM ( <MIDI WORD> -- ) 
  47.    FIND DUP IF EXECUTE DROP PLAYADRS ELSE DROP THEN 
  48. ;
  49.  
  50. : PLAYCOMP ( <MIDI WORD> -- )
  51.    FIND DUP IF EXECUTE DROP [COMPILE] LITERAL COMPILE PLAYADRS ELSE DROP THEN
  52. ;
  53.  
  54. : PLAY
  55.    STATE @ 0= IF PLAYIMM ELSE PLAYCOMP THEN
  56. ; IMMEDIATE
  57.  
  58. : END-SEQ
  59.    ( CALCULATE LENGTH OF SEQUENCE & STORE IT )
  60.    HERE SEQPFA @ - 2 - SEQPFA @ !
  61.    ( STORE TERMINATOR BYTES FOR PLAYBACK PROGRAM )
  62.    0 , FFFF , 
  63. ;
  64.  
  65. ( EXECUTE PASTE BY TYPING PASTE <SEQUENCE NAME> )
  66. ( DO NOT USE IN COLON DEFINITIONS! )
  67.  
  68. : PASTE ( <WORD> -- )
  69.    FIND DUP IF EXECUTE HERE SWAP DUP ALLOT CMOVE ELSE DROP THEN
  70. ;
  71.  
  72. DEC
  73.  
  74. \ EXAMPLE OF PASTING: 
  75. \ PART1, PART2, PART3 ALREADY DEFINED 
  76. \                     
  77. \ SEQUENCE SONG       
  78. \   PASTE PART1        
  79. \   PASTE PART2        
  80. \   PASTE PART3       
  81. \ END-SEQ             
  82.