mirror of
https://github.com/elliotnunn/BuildCubeE.git
synced 2024-09-28 11:54:37 +00:00
480 lines
11 KiB
Plaintext
480 lines
11 KiB
Plaintext
; Version: 3.02
|
|
; Created: Friday, October 20, 1989 at 9:31:29 PM
|
|
|
|
;;;
|
|
;;; MIDI.a
|
|
;;;
|
|
;;; This file contains the assembly-language interface for the MIDI Manager.
|
|
;;;
|
|
;;; Author: John Worthington, Don Marsh, Mark Lentczner
|
|
;;; Copyright © 1988, Apple Computer, Inc.
|
|
;;; All Rights Reserved
|
|
;;;
|
|
|
|
IF &TYPE('__IncludingMIDI__') = 'UNDEFINED' THEN
|
|
__IncludingMIDI__ SET 1
|
|
|
|
|
|
|
|
;;; _______________________________________________________________________________
|
|
;;;
|
|
;;; Constants:
|
|
;;;
|
|
|
|
midiToolNum EQU 4 ; tool number of MIDI Mgr for SndDispVersion call.
|
|
midiMaxNameLen EQU 31 ; maximum number of characters in port and client names
|
|
|
|
|
|
; Time formats
|
|
|
|
midiFormatMSec EQU 0 ; milliseconds
|
|
midiFormatBeats EQU 1 ; beats
|
|
midiFormat24fpsBit EQU 2 ; 24 frames/sec.
|
|
midiFormat25fpsBit EQU 3 ; 25 frames/sec.
|
|
midiFormat30fpsDBit EQU 4 ; 30 frames/sec. drop-frame
|
|
midiFormat30fpsBit EQU 5 ; 30 frames/sec.
|
|
midiFormat24fpsQF EQU 6 ; 24 frames/sec. longInt format
|
|
midiFormat25fpsQF EQU 7 ; 25 frames/sec. longInt format
|
|
midiFormat30fpsDQF EQU 8 ; 30 frames/sec. drop-frame longInt format
|
|
midiFormat30fpsQF EQU 9 ; 30 frames/sec. longInt format
|
|
midiInternalSync EQU 0 ; internally synced
|
|
midiExternalSync EQU 1 ; externally synced
|
|
|
|
|
|
; Port types
|
|
|
|
midiPortTypeTime EQU 0 ; time port
|
|
midiPortTypeInput EQU 1 ; input port
|
|
midiPortTypeOutput EQU 2 ; output port
|
|
midiPortTypeTimeInv EQU 3 ; invisible time port
|
|
|
|
|
|
; OffsetTimes
|
|
|
|
midiGetEverything EQU $7FFFFFFF ; get all packets, regardless of time stamps
|
|
midiGetNothing EQU $80000000 ; get no packets, regardless of time stamps
|
|
midiGetCurrent EQU $00000000 ; get current packets only
|
|
|
|
|
|
|
|
;;;
|
|
;;; MIDI data and messages are passed in MIDIPacket records (see below).
|
|
;;; The first byte of every MIDIPacket contains a set of flags
|
|
;;;
|
|
;;; bits 0-1 00 = new MIDIPacket, not continued
|
|
;;; 01 = begining of continued MIDIPacket
|
|
;;; 10 = end of continued MIDIPacket
|
|
;;; 11 = continuation
|
|
;;; bits 2-3 reserved
|
|
;;;
|
|
;;;bits 4-6 000 = MIDIPacket contains MIDI data
|
|
;;; 001 = MIDIPacket contains MIDI Manager message
|
|
;;;
|
|
;;; bit 7 0 = MIDIPacket has valid stamp
|
|
;;; 1 = stamp with current clock
|
|
;;;
|
|
|
|
midiContMask EQU $03
|
|
midiNoCont EQU $00
|
|
midiStartCont EQU $01
|
|
midiMidCont EQU $03
|
|
midiEndCont EQU $02
|
|
midiTypeMask EQU $70
|
|
midiMsgType EQU $00
|
|
midiMgrType EQU $10
|
|
midiTimeStampMask EQU $80
|
|
midiTimeStampCurrent EQU $80
|
|
midiTimeStampValid EQU $00
|
|
|
|
|
|
; MIDI Manager MIDIPacket command words (the first word in the data field
|
|
; for midiMgrType messages)
|
|
|
|
midiOverflowErr EQU $0001
|
|
midiSCCErr EQU $0002
|
|
midiPacketErr EQU $0003
|
|
midiMaxErr EQU $00FF ; all command words less than this value
|
|
; are error indicators
|
|
|
|
;;; _______________________________________________________________________________
|
|
;;;
|
|
;;; valid results to be returned from readHooks
|
|
;;;
|
|
|
|
midiKeepPacket EQU 0
|
|
midiMorePacket EQU 1
|
|
midiNoMorePacket EQU 2
|
|
|
|
|
|
;;; _______________________________________________________________________________
|
|
;;;
|
|
;;; Errors:
|
|
;;;
|
|
|
|
midiNoClientErr EQU -250 ; no client with that ID found
|
|
midiNoPortErr EQU -251 ; no port with that ID found
|
|
midiTooManyPortsErr EQU -252 ; too many ports already installed in the system
|
|
midiTooManyConsErr EQU -253 ; too many connections made
|
|
midiVConnectErr EQU -254 ; pending virtual connection created
|
|
midiVConnectMade EQU -255 ; pending virtual connection resolved
|
|
midiVConnectRmvd EQU -256 ; pending virtual connection removed
|
|
midiNoConErr EQU -257 ; no connection exists between specified ports
|
|
midiWriteErr EQU -258 ; MIDIWritePacket couldn't write to all connected ports
|
|
midiNameLenErr EQU -259 ; name supplied is longer than 31 characters
|
|
midiDupIDErr EQU -260 ; duplicate client ID
|
|
midiInvalidCmdErr EQU -261 ; command not supported for port type
|
|
|
|
|
|
;;; _______________________________________________________________________________
|
|
;;;
|
|
;;; Driver calls:
|
|
;;;
|
|
|
|
midiOpenDriver EQU 1
|
|
midiCloseDriver EQU 2
|
|
|
|
|
|
|
|
;;; ________________________________________________________________________________
|
|
;;;
|
|
;;; MIDI data and other messages are read and written in packets:
|
|
;;;
|
|
|
|
MIDIPacket RECORD 0
|
|
flags DS.B 1
|
|
len DS.B 1
|
|
tStamp DS.L 1
|
|
data EQU *
|
|
ENDR
|
|
|
|
|
|
;;; _______________________________________________________________________________
|
|
;;;
|
|
;;; port information
|
|
;;;
|
|
|
|
MIDIIDRec RECORD 0
|
|
clientID DS.L 1
|
|
portID DS.L 1
|
|
ENDR
|
|
|
|
MIDIPortParams RECORD 0
|
|
portID DS.L 1 ; ID of port, unique within client
|
|
portType DS.W 1 ; Type of port - input, output, time, etc.
|
|
timeBase DS.W 1 ; refnum of time base, 0 if none
|
|
offsetTime DS.L 1 ; offset for current time stamps
|
|
readHook DS.L 1 ; routine to call when input data is valid
|
|
refCon DS.L 1 ; refcon for port (for client use)
|
|
sync DS.W 1 ; internal, external,other
|
|
curTime DS.L 1 ; current local time for the port
|
|
format DS.W 1 ; time code format in use
|
|
name DS.B 256 ; name of the port. This is a real live string, not a ptr.
|
|
|
|
size EQU * ; size of port params
|
|
ENDR
|
|
|
|
MIDIPortInfo RECORD 0
|
|
portType DS.W 1 ; type of port
|
|
timeBase DS.L 2 ; MIDIIDRec for time base
|
|
numConnects DS.W 1 ; number of connections
|
|
cList EQU * ; ARRAY [1..numConnects] of MIDIIDRec
|
|
ENDR
|
|
|
|
|
|
;;; _______________________________________________________________________________
|
|
;;;
|
|
;;; Clocks:
|
|
;;;
|
|
|
|
MIDIClkInfo RECORD 0
|
|
sync DS.W 1 ; 0 = internal, 1 = external
|
|
curTime DS.L 1 ; current value of port's clock
|
|
format DS.W 1 ; time code format
|
|
size EQU * ; size of MIDIClkInfo
|
|
ENDR
|
|
|
|
|
|
;;; _______________________________________________________________________________
|
|
;;;
|
|
;;; Equates for function selectors
|
|
;;;
|
|
|
|
midiVersion EQU 0
|
|
midiSignIn EQU 4
|
|
midiSignOut EQU 8
|
|
midiGetClients EQU 12
|
|
midiGetClientName EQU 16
|
|
midiSetClientName EQU 20
|
|
midiGetPorts EQU 24
|
|
midiAddPort EQU 28
|
|
midiGetPortInfo EQU 32
|
|
midiConnectData EQU 36
|
|
midiUnConnectData EQU 40
|
|
midiConnectTime EQU 44
|
|
midiUnConnectTime EQU 48
|
|
midiFlush EQU 52
|
|
midiGetReadHook EQU 56
|
|
midiSetReadHook EQU 60
|
|
midiGetPortName EQU 64
|
|
midiSetPortName EQU 68
|
|
midiWakeUp EQU 72
|
|
midiRemovePort EQU 76
|
|
midiGetSync EQU 80
|
|
midiSetSync EQU 84
|
|
midiGetCurTime EQU 88
|
|
midiSetCurTime EQU 92
|
|
midiStartTime EQU 96
|
|
midiStopTime EQU 100
|
|
midiPoll EQU 104
|
|
midiWritePacket EQU 108
|
|
midiWorldChanged EQU 112
|
|
midiGetOffsetTime EQU 116
|
|
midiSetOffsetTime EQU 120
|
|
midiConvertTime EQU 124
|
|
midiGetRefCon EQU 128
|
|
midiSetRefCon EQU 132
|
|
midiGetClRefCon EQU 136
|
|
midiSetClRefCon EQU 140
|
|
midiGetTCFormat EQU 144
|
|
midiSetTCFormat EQU 148
|
|
midiSetRunRate EQU 152
|
|
midiGetClientIcon EQU 156
|
|
|
|
|
|
;;; ________________________________________________________________________________
|
|
;;;
|
|
;;; Call Macros for Assembly
|
|
;;;
|
|
|
|
;;
|
|
;; fake _SndDispVersion which calls glue to make sure that the sound
|
|
;; dispatcher has been installed
|
|
;;
|
|
MACRO
|
|
&label _SndDispVersion
|
|
IMPORT SndDispVersion
|
|
&label JSR SndDispVersion
|
|
; call the sound dispatcher glue in MIDIGlue.o
|
|
ENDM
|
|
|
|
|
|
MACRO
|
|
&label _CallMIDIMgr &selector
|
|
&label MOVE.L #(&selector<<16)+midiToolNum,D0
|
|
_SoundDispatch
|
|
ENDM
|
|
|
|
|
|
MACRO
|
|
&label _MIDISignIn
|
|
&label _CallMIDIMgr midiSignIn
|
|
MEND
|
|
|
|
MACRO
|
|
&label _MIDISignOut
|
|
&label _CallMIDIMgr midiSignOut
|
|
MEND
|
|
|
|
MACRO
|
|
&label _MIDIVersion
|
|
&label _CallMIDIMgr midiVersion
|
|
MEND
|
|
|
|
MACRO
|
|
&label _MIDIGetClients
|
|
&label _CallMIDIMgr midiGetClients
|
|
MEND
|
|
|
|
MACRO
|
|
&label _MIDIGetClientName
|
|
&label _CallMIDIMgr midiGetClientName
|
|
MEND
|
|
|
|
MACRO
|
|
&label _MIDISetClientName
|
|
&label _CallMIDIMgr midiSetClientName
|
|
MEND
|
|
|
|
MACRO
|
|
&label _MMGetClientIcon
|
|
&label _CallMIDIMgr nGetClientIcon
|
|
MEND
|
|
|
|
MACRO
|
|
&label _MIDIGetPorts
|
|
&label _CallMIDIMgr midiGetPorts
|
|
MEND
|
|
MACRO
|
|
&label _MIDIAddPort
|
|
&label _CallMIDIMgr midiAddPort
|
|
MEND
|
|
|
|
|
|
MACRO
|
|
&label _MIDIGetPortInfo
|
|
&label _CallMIDIMgr midiGetPortInfo
|
|
MEND
|
|
|
|
MACRO
|
|
&label _MIDIConnectData
|
|
&label _CallMIDIMgr midiConnectData
|
|
MEND
|
|
|
|
|
|
MACRO
|
|
&label _MIDIUnConnectData
|
|
&label _CallMIDIMgr midiUnConnectData
|
|
MEND
|
|
|
|
MACRO
|
|
&label _MIDIConnectTime
|
|
&label _CallMIDIMgr midiConnectTime
|
|
MEND
|
|
|
|
MACRO
|
|
&label _MIDIUnConnectTime
|
|
&label _CallMIDIMgr midiUnConnectTime
|
|
MEND
|
|
|
|
MACRO
|
|
&label _MIDIFlush
|
|
&label _CallMIDIMgr midiFlush
|
|
MEND
|
|
|
|
MACRO
|
|
&label _MIDIGetReadHook
|
|
&label _CallMIDIMgr midiGetReadHook
|
|
MEND
|
|
|
|
MACRO
|
|
&label _MIDISetReadHook
|
|
&label _CallMIDIMgr midiSetReadHook
|
|
MEND
|
|
|
|
MACRO
|
|
&label _MIDIGetPortName
|
|
&label _CallMIDIMgr midiGetPortName
|
|
MEND
|
|
|
|
MACRO
|
|
&label _MIDISetPortName
|
|
&label _CallMIDIMgr midiSetPortName
|
|
MEND
|
|
|
|
MACRO
|
|
&label _MIDIWakeUp
|
|
&label _CallMIDIMgr midiWakeUp
|
|
MEND
|
|
|
|
MACRO
|
|
&label _MIDIRemovePort
|
|
&label _CallMIDIMgr midiRemovePort
|
|
MEND
|
|
|
|
MACRO
|
|
&label _MIDIGetSync
|
|
&label _CallMIDIMgr midiGetSync
|
|
MEND
|
|
|
|
|
|
|
|
|
|
|
|
MACRO
|
|
&label _MIDISetSync
|
|
&label _CallMIDIMgr midiSetSync
|
|
MEND
|
|
|
|
MACRO
|
|
&label _MIDIGetCurTime
|
|
&label _CallMIDIMgr midiGetCurTime
|
|
MEND
|
|
|
|
MACRO
|
|
&label _MIDISetCurTime
|
|
&label _CallMIDIMgr midiSetCurTime
|
|
MEND
|
|
|
|
MACRO
|
|
&label _MIDIStartTime
|
|
&label _CallMIDIMgr midiStartTime
|
|
MEND
|
|
|
|
MACRO
|
|
&label _MIDIStopTime
|
|
&label _CallMIDIMgr midiStopTime
|
|
MEND
|
|
|
|
MACRO
|
|
&label _MIDIPoll
|
|
&label _CallMIDIMgr midiPoll
|
|
MEND
|
|
|
|
MACRO
|
|
&label _MIDIWritePacket
|
|
&label _CallMIDIMgr midiWritePacket
|
|
MEND
|
|
|
|
MACRO
|
|
&label _MIDIWorldChanged
|
|
&label _CallMIDIMgr midiWorldChanged
|
|
MEND
|
|
|
|
MACRO
|
|
&label _MIDIGetOffsetTime
|
|
&label _CallMIDIMgr midiGetOffsetTime
|
|
MEND
|
|
|
|
MACRO
|
|
&label _MIDISetOffsetTime
|
|
&label _CallMIDIMgr midiSetOffsetTime
|
|
MEND
|
|
|
|
MACRO
|
|
&label _MIDIConvertTime
|
|
&label _CallMIDIMgr midiConvertTime
|
|
MEND
|
|
|
|
MACRO
|
|
&label _MIDIGetRefCon
|
|
&label _CallMIDIMgr midiGetRefCon
|
|
MEND
|
|
|
|
MACRO
|
|
&label _MIDISetRefCon
|
|
&label _CallMIDIMgr midiSetRefCon
|
|
MEND
|
|
|
|
MACRO
|
|
&label _MIDIGetClRefCon
|
|
&label _CallMIDIMgr midiGetClRefCon
|
|
MEND
|
|
|
|
MACRO
|
|
&label _MIDISetClRefCon
|
|
&label _CallMIDIMgr midiSetClRefCon
|
|
MEND
|
|
|
|
MACRO
|
|
&label _MIDIGetTCFormat
|
|
&label _CallMIDIMgr midiGetTCFormat
|
|
MEND
|
|
|
|
MACRO
|
|
&label _MIDISetTCFormat
|
|
&label _CallMIDIMgr midiSetTCFormat
|
|
MEND
|
|
|
|
MACRO
|
|
&label _MIDISetRunRate
|
|
&label _CallMIDIMgr midiSetRunRate
|
|
MEND
|
|
|
|
MACRO
|
|
&label _MIDIGetClientIcon
|
|
&label _CallMIDIMgr midiGetClientIcon
|
|
MEND
|
|
|
|
|
|
|
|
ENDIF ; ...already included |