; ; File: MIDI.a ; ; Contains: xxx put contents here xxx ; ; Written by: xxx put writers here xxx ; ; Copyright: © 1991 by Apple Computer, Inc., all rights reserved. ; ; This file is used in these builds: ROM System ; ; Change History (most recent first): ; ; <7> 11/21/91 MH Move IMPORT directive out of the SndDispVersion macro ; <6> 11/11/91 MH Remove _MMGetClientIcon. This macro doesn't work because the ; selector nGetClientIcon is not defined. It looks like an ; inadvertant leftover from earlier days. The correct name for the ; macro is _MIDIGetClientIcon, which is already defined later in ; the file, with the selector midiGetClientIcon. ; <5> 6/14/91 JL Checked in official MPW 3.2Ä version. Removed declaration of ; _SoundDispatch as an opword and the conditional. ; <4> 1/30/91 gbm sab, #38: Change the Ôalready including this fileÕ variable to ; all uppercase (for security reasons) ; ; To Do: ; ; 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 ;; IMPORT SndDispVersion MACRO &label _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 _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