home *** CD-ROM | disk | FTP | other *** search
- 'RUCKMIDI.BI 31-Jan-93 BETA 0.51 ------------------
- 'BETA NOT FOR PUBLIC RELEASE
- 'Do not distribute this release
- 'Do not create programs for distribution with this release
-
- DECLARE FUNCTION RUCKMIDI% (SEG packinfo AS ANY)
-
- CONST SysInfoMidi = 0, InitMidi = 1, ExitMidi = 2, AtExitMidi = 3
- CONST LoadMidi = 4, PlayMidi = 5
- CONST EndMidi = 8, PauseMidi = 9
- CONST DeallocMidi = 10, FastFwdMidi = 11, OutMsgMidi = 12
-
- CONST SetAllMidi = 20, SetVolumeMidi = 21, SetToneMidi = 22
- CONST SetPatchMidi = 23, SetChMaskMidi = 24
-
- CONST SetAllFMSBP = 30
-
- TYPE DeallocMidiPackTYPE 'DMP
- Func AS INTEGER
- stat AS INTEGER
- HandSeg AS INTEGER 'RUCKUS allocates DOS segment (para)
- TypeFlag AS INTEGER '0=DOS para (must=0)
- END TYPE '8
-
- TYPE FastFwdMidiPackTYPE 'FFMP
- Func AS INTEGER
- stat AS INTEGER
- TickCount AS LONG 'tick count to fast forward to
- end type '8
-
- TYPE GetMidiDataPackTYPE 'GDP
- Func AS INTEGER
- stat AS INTEGER
- BytePos AS LONG 'current byte relative base ptr (27)
- END TYPE '8
-
- TYPE mInitMidiPackTYPE 'MIMP (can't use IMP with BASIC)
- Func AS INTEGER
- stat AS INTEGER
- DeviceID AS INTEGER '0=AdLib melodic, 1=AdLib percussive
- IOport AS INTEGER
- PercCh AS INTEGER
- ChMask AS INTEGER
- Flags AS INTEGER '(see source)
- InfoPtrOff AS INTEGER 'ret:far ptr to Midi info
- InfoPtrSeg AS INTEGER
- MidiExitPtrOff AS INTEGER 'ret:far ptr to Midi's ExitXB routine
- MidiExitPtrSeg AS INTEGER
- END TYPE '22
-
- TYPE LoadMidiPackTYPE 'LMP
- Func AS INTEGER
- stat AS INTEGER
- FilenamePtrOff AS INTEGER 'far ptr to filenameZ to load
- FilenamePtrSeg AS INTEGER
- StartPos AS LONG 'offset into file to start load at
- LoadSize AS LONG 'number of bytes to load (or 0 for autosize)
- LoadPtrOff AS INTEGER 'ret:DOS seg:offset (offset always 0)
- LoadPtrSeg AS INTEGER
- END TYPE '20
-
- TYPE OutMsgMidiPackTYPE 'OMMP
- Func AS INTEGER
- stat AS INTEGER
- Mstatus AS INTEGER 'status byte (8n, 9n...)
- Mdata AS INTEGER 'data
- END TYPE '8
-
- TYPE PlaybackMidiPackTYPE 'PMBP
- Func AS INTEGER
- stat AS INTEGER
- Mode AS INTEGER 'playback mode (0=interrupt FG,1=BG)
- LoadPtrOff AS INTEGER 'seg:off to start of data to play
- LoadPtrSeg AS INTEGER
- END TYPE '10
-
- TYPE PauseMidiPackTYPE 'PMP
- Func AS INTEGER
- stat AS INTEGER
- Pause AS INTEGER '0=unpause else pause
- END TYPE '6
-
- TYPE SetFMProPackTYPE 'SFMPP (FM mixer control for SB PRO-compatibles)
- Func AS INTEGER
- stat AS INTEGER
- IOport AS INTEGER 'base I/O port (&H220, &H240)
- MasterVol AS INTEGER '0F0F (low=right ch, high=left,-1 no change)
- Steer AS INTEGER '0=none,1=left,2=right,3=mute,-1 no change)
- FMVol AS INTEGER '0F0F (low=right,high=left,cannot skip)
- END TYPE '12
-
- TYPE SetMidiPackTYPE 'SMP
- Func AS INTEGER
- stat AS INTEGER
- Channel AS INTEGER 'channel to set (bit mask of channels 0-15)
- Volume AS INTEGER 'volume adjust
- Tone AS INTEGER 'tone adjust
- ChMask AS INTEGER 'if bit=0 then that channel is ignored
- PatchMapID AS INTEGER 'patch map ID
- PatchMapPtrOff AS INTEGER 'far ptr to alternate patch map or
- PatchMapPtrSeg AS INTEGER 'address of patch map ID selected
- END TYPE '18
-
- TYPE SysInfoMidiPackTYPE 'SIMP
- Func AS INTEGER 'this (or any) TYPE will be expanded as needed
- stat AS INTEGER 'to accomodate additional MIDI devices
- Device0 AS INTEGER '=1 AdLib melodic mode available
- D0port AS INTEGER '388h
- D0mask AS INTEGER '
- Device1 AS INTEGER '=1 AdLib percussive mode available
- D1port AS INTEGER '388h
- D1mask AS INTEGER
- END TYPE '16
-
- TYPE XitMidiPackTYPE 'XMP
- Func AS INTEGER
- stat AS INTEGER
- END TYPE '4
-
- 'mid@deviceID dw 0 ;0 ;0=AdLib melodic, 1=AdLib percussive...
- 'mid@flags dw 0 ;2 ;bit0=1 use background processing
- ' ;bit1=1 disable program change event
- ' ;bit2-7 reserved (low byte used to send
- ' ;while high byte used to return info)
- ' ;bit8-13 reserved
- ' ;bit14=1 then CTMF file playing
- ' ;bit15=1 then AdLib ROL-convert
- 'mid@percChannel dw 0 ;4 ;<> 0 percussion channel mapped
- 'mid@end dw 0 ;6 ;=1 end of MIDI (not playing)
- ' ;BPTR used for possible mid@pauseMIDI merge
- 'mid@memDOS dw 0 ;8 ;DOS RAM available
- '
- ' ;following data should be zeroed before each load
- '
- 'mid@memUsed dw 0 ;10 ;K used by last load
- '
- ' ;following data should be zeroed before each initial play
- ' ;from typeMIDI to chNotes
- '
- 'typeMIDI dw 0 ;12 ;MIDI type (0 or 1)
- 'noTracks dw 0 ;14 ;number of tracks
- 'ticksQnote dw 0 ;16 ;ticks/quarter-note
- '
- 'uSecsQnote dd 0 ;18 ;micro-secs/quarter-note
- 'tickCount dd 0 ;22 ;current tick count
- '
- 'musicPtr dd 0 ;26 ;seg:off->current MIDI data byte
- 'currTrk dw 0 ;30 ;current MIDI track
- 'timeSig DB 0,0,0,0 ;32 ;nm,dn,MIDI clocks/beat,32nd notes/beat
- 'chPrograms DB 16 DUP (0) ;36 ;channel programs
- 'chVolumes DB 16 DUP (0) ;52 ;channel volume level (0-127)
- 'chNotes DB 16 DUP (0) ;68 ;channel note values (0-127)
- '
- 'PlayClearSize = $-typeMIDI
- ' ;do not clear following
- 'chRelVolumes dw 16 DUP (0) ;84 ;-128 to +127 range (0=no change)
- 'chRelNotes dw 16 DUP (0) ;116 ;-128 to +127 range (0=no change)
- ' ;148 total
- 'MidiInfoSize = $-mid@deviceID
- '
- 'EVEN ;local info
- 'mid@ChMask dw 0
- 'mid@init dw 0 ;=1 then initialized
- 'FastFwdTo dd 0 ;fast forward to this tick count
- 'FastFwdOn DB 0 ;fast forward on flag (0=off)
- 'mid@pause DB 0 ;=1 then MIDI play is paused
- 'enterMIDI DB 0 ;=1 then MIDI event called externally
- '
- 'EVEN ;following needs to be clear before each play
- 'trkStats DB 64 DUP (0) ;current tracks' status
- 'trkPtrs dw 64 DUP (0) ;current offsets to MIDI tracks
- 'absTimes dd 64 DUP (0) ;current absolute time of MIDI tracks
- '
- 'PlayClearSize2 = $-trkStats
- '
- 'mid@CTMFInsPtr dw 0 ;instruments ptr relative music data segment
- 'mid@CTMFInsCnt dw 0 ;number of patches in file
- '
- 'END RUCKMidi.BI -----------------------
-