This is 07_ProgDSP.rtf in view mode; [Download] [Up]
paperh22175 margl-907 margr0 margt0 margb0 {fonttblf0fswiss Helvetica;f1froman Times;f2fmodern Courier;f3ftech Symbol;f4froman Palantino;}fi0 ri0 ql sb0 f1 fs24 Release 2.0 Copyright f3 'e3f1 1991 by NeXT Computer, Inc. All Rights Reserved. pard s13 li2116 fi0 ri1007 ql tx2620 tx3124 tx3628 f1 fs28 fs16 fs28 fs16 fs28 fs16 fs28 fs16 fs28 pard s6 li2116 fi0 ri1007 ql fs56 Chapter 7 s18 Programming the DSP fs16 fs56 pard s13 li2116 fi0 ri1007 ql tx2620 tx3124 tx3628 fs28 fs16 fs28 This chapter explains how to access the DSP from software on a NeXT computer. A brief review of the hardware is presented, followed by a description of ways to access the DSP. Familiarity with the DSP56001, especially the host interface port, is assumed. fs16 fs28 fs16 fs28 DSP details, including the D-15 connector pinouts, DSP memory map, and DSP instruction summary, can be found in i Referencei0 . fs16 fs28 pard s22 li100 fi0 ri1007 ql b fs36 fs16 fs36 DSP Hardware fs16 fs36 pard s13 li2116 fi0 ri1007 ql tx2620 tx3124 tx3628 b0 fs28 fs16 fs28 The hardware associated with the DSP includes: fs16 fs28 pard s12 li2620 fi-503 ri1007 ql tx2620 tx3124 tx3628 tx4132 'b7 The Motorola DSP56001 clocked at 25 MHz 'b7 8K 24-bit words of zero-wait-state RAM, private to the DSP 'b7 Memory-mapped and DMA access (5 megabytes/sec) to the DSP host interface 'b7 A D-15 connector that provides access to the DSP SSI and SCI serial ports pard s22 li100 fi0 ri1007 ql b fs36 fs16 fs36 Booting the DSP fs16 fs36 pard s13 li2116 fi0 ri1007 ql tx2620 tx3124 tx3628 b0 fs28 fs16 fs28 The DSP is in the reset state while not in use by some task. When first accessed, it exits the reset state awaiting a bootstrap program. You can write a DSP program to be fed to the DSP during the bootstrap sequence. This and the following sections describe how to create, load, and communicate with your own DSP bootstrap program. fs16 fs28 fs16 fs28 The DSP bootstrap program must be a single contiguous program segment starting at location p:0 in on-chip program memory, and it must not exceed 512 words in length (the size of on-chip program RAM). Below is an example DSP bootstrap program: fs16 fs28 pard s7 li2620 fi0 ri1007 ql f2 fs24 ; boot56k.asm - Example DSP bootstrap program that goes into an fi0 ; infinite loop as it reads HRX, right-shifts one place, and fi0 ; writes HTX fi0 fi0 org p:0 fi0 reset jmp >rcv_buz fi0 fi0 dup $40-2 ; output must be a contiguous segment fi0 nop fi0 endm fi0 fi0 org p:$40 ; typical starting address fi0 fi0 rcv_buz jclr #0,x:$FFE9,rcv_buz ; wait for data from host fi0 move x:$FFEB,A1 fi0 fi0 LSR A ; right-shift one place fi0 fi0 xmt_buz jclr #1,x:$FFE9,xmt_buz ; send shifted word to host fi0 move A1,x:$FFEB fi0 fi0 jmp rcv_buz fi0 fi0 end $40 s23 li1108 fi0 f1 b fs36 fs16 fs36 DSP Assembly fs16 fs36 pard s13 li2116 fi0 ri1007 ql tx2620 tx3124 tx3628 b0 fs28 fs16 fs28 To assemble this file (named b boot56k.asmb0 ) and create the object file b boot56k.lodb0 , type fs16 fs28 pard s7 li2620 fi0 ri1007 ql f2 fs24 asm56000 -b -a -l -os,so boot56k pard s13 li2116 fi0 ri1007 ql tx2620 tx3124 tx3628 f1 fs28 fs16 fs28 in a Terminal window. b asm56000b0 is the Motorola DSP assembler program. The command-line arguments used in the example are: fs16 fs28 pard s0 li2620 fi-503 ri1007 ql tx2620 tx3124 tx3628 tx4132 fs16 fs28 'b7 b -bb0 option tells the program to create an object file. fs16 fs28 fs16 fs28 'b7 b -ab0 indicates that the object file should be absolute, or nonrelocatable. Absolute files are indicated by the extension 'aa.lod'ba. If b -a b0 is omitted, a relocatable file (extension 'aa.lnk'ba) is created. You can convert a 'aa.lnk'ba file to a 'aa.lod'ba file by using the DSP linker program, b lnk56000b0 . fs16 fs28 fs16 fs28 'b7 b -lb0 produces a listing file (extension 'aa.lst'ba). The file contains a script of the operations performed by the assembler and is useful while debugging. fs16 fs28 fs16 fs28 'b7 b -os,so b0 causes the assembler to put symbol information in the object file. This information is used by Bug56f3 'd4f1 , the DSP symbolic debugger. Bug56 can be found in the directory b /NextDeveloper/Appsb0 . fs16 fs28 pard s23 li1108 fi0 ri1007 ql b fs36 fs16 fs36 DSP Tools Documentation fs16 fs36 pard s13 li2116 fi0 ri1007 ql tx2620 tx3124 tx3628 b0 fs28 fs16 fs28 There are three UNIX manual pages documenting the DSP assemblerb asm56000b0 , linkerb lnk56000b0 , and librarianb lib56000b0 . Complete documentation of these tools is also provided in the directory b /NextLibrary/Documentation/Motorolab0 . The Bug56b b0 application has an extensive help facility (available in the main menu), and is documented in the directory b /NextLibrary/Documentation/Arielb0 . fs16 fs28 pard s23 li1108 fi0 ri1007 ql b fs36 fs16 fs36 Binary DSP Object File Format fs16 fs36 pard s13 li2116 fi0 ri1007 ql tx2620 tx3124 tx3628 b0 fs28 fs16 fs28 The 'aa.lod'ba object file written by the assembler is in a machine-independent ASCII format. NeXT supports a more efficient binary 'aa.dsp'ba format. A 'aa.lod'ba file can be converted to a 'aa.dsp'ba file using the program b dspimgb0 . For example, fs16 fs28 pard s7 li2620 fi0 ri1007 ql f2 fs24 dspimg boot56k.lod boot56k.dsp pard s13 li2116 fi0 ri1007 ql tx2620 tx3124 tx3628 f1 fs28 fs16 fs28 converts b boot56k.lodb0 to 'aa.dsp'ba format. As a convenience, the extension of the input file name defaults to 'aa.lod,'ba and the output file name, when omitted, is derived from the input file name, so this example can also appear as fs16 fs28 pard s7 li2620 fi0 ri1007 ql f2 fs24 dspimg boot56k s23 li1108 fi1512 fi0 f1 b fs36 fs16 fs36 Loading the DSP Bootstrap Program fs16 fs36 pard s13 li2116 fi0 ri1007 ql tx2620 tx3124 tx3628 b0 fs28 fs16 fs28 After you'27ve prepared the bootstrap program b boot56k.lodb0 or b boot56k.dspb0 , you can load it into the DSP from a C program by calling the b DSPBootFile()b0 function. As shown in the following example, the function takes the name of the bootstrap program file as its single argument. fs16 fs28 pard s7 li2620 fi0 ri1007 ql f2 fs24 /* fi0 * test_boot56k.c - read and load boot56k.dsp (bootstrap file) fi0 * To compile and link: fi0 * cc test_boot56k.c -ldsp_s -lsys_s fi0 */ fi0 #include <dsp/dsp.h> /* needed by programs that use the DSP */ fi0 main() fi0 { fi0 DSPBootFile("boot56k.dsp"); /* "boot56k.lod" works, too */ fi0 /* Communicate with DSP program here */ fi0 } pard s13 li2116 fi0 ri1007 ql tx2620 tx3124 tx3628 f1 fs28 fs16 fs28 After the call to b DSPBootFile()b0 , the DSP remains open and can be accessed via the Mach driver or by simple host interface programming, as discussed in the next section. fs16 fs28 pard s22 li100 fi0 ri1007 ql b fs36 fs16 fs36 Software Access to the DSP fs16 fs36 pard s13 li2116 fi0 ri1007 ql tx2620 tx3124 tx3628 b0 fs28 fs16 fs28 There are two basic ways to access the DSP: fs16 fs28 pard s12 li2620 fi-503 ri1007 ql tx2620 tx3124 tx3628 tx4132 'b7 Reading and writing the host interface registers 'b7 Sending and receiving Mach messages to and from the sound/DSP driver pard s13 li2116 fi0 ri1007 ql tx2620 tx3124 tx3628 fs16 fs28 These access modes are described below. fs16 fs28 pard s23 li1108 fi0 ri1007 ql b fs36 fs16 fs36 Host Interface Access fs16 fs36 pard s13 li2116 fi0 ri1007 ql tx2620 tx3124 tx3628 b0 fs28 fs16 fs28 Reading and writing the eight bytes of the DSP host interface is the simplest and most general way to access the DSP. In this access mode, you have complete control over the DSP software. There are no programming conventions to obey and no reserved DSP resources. The disadvantages are that you must write your own DSP communication services, and the DSP can'27t interrupt the host processor. Lack of interrupt capability implies lack of direct memory access (DMA) transfer between the DSP and host memory. The Mach driver interface must be used to field DSP device interrupts. fs16 fs28 pard s24 li2116 fi0 ri1007 ql b fs28 fs16 fs28 Host Interface Programming Example fs16 fs28 pard s13 li2116 fi0 ri1007 ql tx2620 tx3124 tx3628 b0 fs28 fs16 fs28 The following example illustrates communication with the example bootstrap program b boot56k.asmb0 given above. fs16 fs28 pard s7 li2620 fi0 ri1007 ql f2 fs24 /* To compile and link: cc test_getput.c -ldsp_s -lsys_s */ fi0 #include <dsp/dsp.h> fi0 main() { fi0 int tval,reply; fi0 fi0 DSPBootFile("boot56k"); fi0 fi0 DSPSetHF0(); /* Set HF0 */ fi0 DSPSetHF1(); /* Set HF1 */ fi0 DSPReadICR(&reply); /* 8 bits, right-justified */ fi0 printf("\n\ticr = 0x%X\n",reply); fi0 DSPReadISR(&reply); /* 8 bits, right-justified */ fi0 printf("\tisr = 0x%X\n",reply); fi0 tval = 0xBBCCDD; /* test value */ fi0 DSPWriteTX(tval); /* 24 bits, right-justified in 32 */ fi0 /* Wait for the data to become ready (RXDF on). */ fi0 while (!DSPDataIsAvailable()); fi0 while (DSPDataIsAvailable()) { fi0 DSPReadRX(&reply); /* 24 bits, right-justified */ fi0 printf("\trx = 0x%X\n",reply); } fi0 fi0 if (reply != tval>>1) fi0 printf("ERROR: rx should be = 0x%X\n",tval>>1); fi0 DSPClose(); fi0 } pard s13 li2116 fi0 ri1007 ql tx2620 tx3124 tx3628 f1 fs28 fs16 fs28 The output of this program should be fs16 fs28 pard s7 li2620 fi0 ri1007 ql f2 fs24 icr = 0x18 fi0 isr = 0x6 fi0 rx = 0x5DE66E s11 li2116 fi0 f1 fs28 fs16 fs28 b Note: b0 Since IVR isn'27t used in the DSP host interface, there are no functions for reading and writing that register. fs16 fs28 pard s13 li2116 fi0 ri1007 ql tx2620 tx3124 tx3628 fs16 fs28 For convenience (and efficiency), whole arrays can be written to the transmit registers using fs16 fs28 fs16 fs28 b DSPWriteTXArray(b0 i intArrayi0 , i numberOfIntsb i0 ) fs16 fs28 b0 fs16 fs28 and read from the receive registers of the DSP using fs16 fs28 fs16 fs28 b DSPReadRXArray(b0 i intArrayi0 ,i numberOfIntsb i0 ) fs16 fs28 b0 fs16 fs28 Each word of the transfer is conditioned on TXDE for b DSPWriteTXArray()b0 and on RXDF for b DSPReadRXArray()b0 . fs16 fs28 pard s24 li2116 fi0 ri1007 ql b fs28 fs16 fs28 DSP Error Handling fs16 fs28 pard s13 li2116 fi0 ri1007 ql tx2620 tx3124 tx3628 b0 fs28 fs16 fs28 Most of the DSP system functions (prefix 'aaDSP'ba) return an integer error code, where 0 indicates success and nonzero indicates failure. These functions also write a string describing the error to the file name passed as the single argument to b DSPEnableErrorFile()b0 . fs16 fs28 pard s24 li2116 fi0 ri1007 ql b fs28 fs16 fs28 Restrictions on Host Interface Programming fs16 fs28 pard s13 li2116 fi0 ri1007 ql tx2620 tx3124 tx3628 b0 fs28 fs16 fs28 Certain restrictions apply to the operation of the write/read primitives (which are implemented using the Mach driver): fs16 fs28 pard s0 li2620 fi-503 ri1007 ql tx2620 tx3124 tx3628 tx4132 fs16 fs28 'b7 To write the ICR, you use the functions b DSPSetHF1()b0 ,b DSPSetHF0()b0 ,b DSPClearHF1()b0 , and b DSPClearHF0()b0 . fs16 fs28 fs16 fs28 'b7 To write the CVR, you pass a host command identifier (an integer) to the b DSPHostCommand() b0 function. The host commands are described in the i Motorola DSP56001 User'27s Manuali0 . fs16 fs28 pard s13 li2116 fi0 ri1007 ql tx2620 tx3124 tx3628 fs16 fs28 These restrictions are necessary because the DSP driver uses TREQ and HREQ for its own purposes. In particular, HREQ causes an interrupt that causes the driver to read all available words from the DSP into a kernel buffer. A call to b DSPGetRX()b0 actually fetches words from this buffer rather than from the DSP directly. fs16 fs28 pard s24 li2116 fi0 ri1007 ql b fs28 fs16 fs28 Host Interface Access Functions fs16 fs28 pard s13 li2116 fi0 ri1007 ql tx2620 tx3124 tx3628 b0 fs28 fs16 fs28 Functionsb b0 that support simple host interface programming, such as b DSPReadRX()b0 , are currently documented in the procedure prototypes defined in the following header files in the directory b /usr/include/dspb0 : fs16 fs28 pard s0 li2620 fi-503 ri1007 ql tx2620 tx3124 tx3628 tx4132 fs16 fs28 'b7 b dsp.h b0 is ab b0 master header file that pulls in all function prototypes for the DSP library (b libdsp_s.ab0 ). fs16 fs28 fs16 fs28 'b7 b DSPError.h b0 contains prototypes for the DSP error handling functions. fs16 fs28 fs16 fs28 'b7 b DSPConversion.hb0 prototypes the functions that convert data between type DSPFix24 and b intb0 , b floatb0 , and b doubleb0 . fs16 fs28 fs16 fs28 'b7 b DSPObject.h b0 prototypes the low-level DSP interface functions. fs16 fs28 pard s13 li2116 fi0 ri1007 ql tx2620 tx3124 tx3628 fs16 fs28 b DSPObject.hb0 contains many functions that are useful only in conjunction with the array processing or Music Kit monitors. The following sections list the functions that are useful regardless of the DSP monitor that you use. fs16 fs28 pard s25 li2116 fi0 ri1007 ql b i fs16 fs28 Orienting the Host fs16 fs28 pard s0 li2620 fi-503 ri1007 ql tx2620 tx3124 tx3628 tx4132 b0 i0 fs16 fs28 'b7 b DSPGetDSPCount()b0 returns the number of DSPs in your cube. fs16 fs28 fs16 fs28 'b7 b DSPSetCurrentDSP(b0 int i indexb i0 )b0 and b DSPGetCurrentDSP()b0 set and return, respectively, the zero-based index of the DSP upon which subsequent DSP functions will act. fs16 fs28 fs16 fs28 'b7 b DSPSetMessagePriority(b0 int i priorityb i0 ) b0 andb DSPGetMessagePriority() b0 set and return, respectively, the priority of messages sent to the current DSP. There are three priorities, represented as the constants DSP_MSG_HIGH, DSP_MSG_MED, and DSP_MSG_LOW. fs16 fs28 fs16 fs28 'b7 b DSPSetOpenPriority(b0 int i priorityb i0 )b0 and b DSPGetOpenPriority()b0 set and return, respectively, the priority with which a subsequent call to b DSPOpenNoBoot() b0 opens the DSP. There are two priorities: 0 is low and 1 is high. With high priority, a process can gain access to the DSP even if it has already been opened by another process. This is used mostly by the DSP debugger. The original process should be frozen while the new process steps in and looks around. fs16 fs28 fs16 fs28 'b7 b DSPEnableHostMsg() b0 andb DSPDisableHostMsg() b0 enable and disable, respectively, DSP host message protocol. b DSPHostMsgIsEnabled()b0 returns the current state of the protocol. With this protocol, DSP error messages are sent on the DSP error port. Otherwise, all messages arrive on the DSP message port. fs16 fs28 pard s25 li2116 fi0 ri1007 ql b i fs16 fs28 Opening and Closing the DSP fs16 fs28 pard s0 li2620 fi-503 ri1007 ql tx2620 tx3124 tx3628 tx4132 b0 i0 fs16 fs28 'b7 b DSPInit()b0 opens the DSP and loads a minimal, generic DSP boot program. This is the function that'27s most commonly called to open the DSP. fs16 fs28 fs16 fs28 'b7 b DSPOpenNoBoot() b0 opens the DSP without loading a boot program. fs16 fs28 fs16 fs28 'b7 b DSPOpenNoBootHighPriority() b0 performs a high-priorityb b0 open without loading a boot program. This is normally used only by the DSP debugger. fs16 fs28 fs16 fs28 'b7 b DSPReset()b0 resets the DSP (which must already be open). A reset DSP is awaiting a bootstrap program. fs16 fs28 fs16 fs28 'b7 b DSPBootFile(b0 char *i filenameb i0 ) b0 opens (if necessary) andb b0 boots the DSP from the given program file. fs16 fs28 fs16 fs28 'b7 b DSPBoot(b0 DSPLoadSpec *i systemb i0 ) b0 opens (if necessary) and boots the DSP from the given program. DSPLoadSpec is defined in b /usr/lib/include/dsp_structs.hb0 . fs16 fs28 fs16 fs28 'b7 b DSPClose() b0 andb DSPRawClose()b0 close the DSP; the Raw close doesn'27t clean up the device. fs16 fs28 fs16 fs28 'b7 b DSPCloseSaveState() b0 and b DSPRawCloseSaveState() b0 are like the previous functions, but the state of the open modes are retained and used in a subsequent reopening of the DSP. fs16 fs28 pard s25 li2116 fi0 ri1007 ql b i fs16 fs28 DSP Ownership Information fs16 fs28 pard s0 li2620 fi-503 ri1007 ql tx2620 tx3124 tx3628 tx4132 b0 i0 fs16 fs28 'b7 b DSPIsOpen() b0 returns nonzero if the DSP is open. fs16 fs28 fs16 fs28 'b7 b DSPGetOwnerString() b0 returns a pointer to a string that contains information about the process that currently owns the DSP. It'27s in a form exemplified by the following: fs16 fs28 pard s10 li3124 fi0 ri1007 ql f2 fs24 DSP opened in PID 351 by me on Sun Jun 18 17:50:46 1989 pard s0 li2620 fi-503 ri1007 ql tx2620 tx3124 tx3628 tx4132 f1 fs28 fs16 fs28 'b7 b DSPOpenWhoFile() b0 registers the current owner of the DSP in the DSP log file. This is called implicitly by the functions that open the DSPb . fs16 fs28 b0 fs16 fs28 'b7 b DSPCloseWhoFile() b0 deletes the DSP log file. This is called implicitly by the functions that close the DSP. fs16 fs28 pard s25 li2116 fi0 ri1007 ql b i fs16 fs28 Reading and Writing DSP/Host Interface Flags fs16 fs28 pard s0 li2620 fi-503 ri1007 ql tx2620 tx3124 tx3628 tx4132 b0 i0 fs16 fs28 'b7 b DSPSetHF0()b0 ,b DSPClearHF0()b0 , andb DSPGetHF0() b0 set, clear, and return the state of HF0 (host flag 0), respectively. fs16 fs28 pard s13 li2116 fi0 ri1007 ql tx2620 tx3124 tx3628 fs16 fs28 An analogous set of functions is provided for HF1, and a b DSPGet...b0 functionb b0 (only) is provided for HF2 and HF3. fs16 fs28 pard s25 li2116 fi0 ri1007 ql b i fs16 fs28 Reading and Writing Interface Registers fs16 fs28 pard s0 li2620 fi-503 ri1007 ql tx2620 tx3124 tx3628 tx4132 b0 i0 fs16 fs28 'b7 b DSPReadICR(b0 intb *b0 i registerValuePtrb i0 )b0 reads the DSP Interrupt Control Register into the integer pointed to by the argumenti i0 (8 bits, right-justified). fs16 fs28 fs16 fs28 'b7 b DSPGetICR()b0 returns the ICR register. fs16 fs28 pard s13 li2116 fi0 ri1007 ql tx2620 tx3124 tx3628 fs16 fs28 An analogous set of functions is provided for the Command Vector Register (CVR), and the Interrupt Status Register (ISR). fs16 fs28 pard s25 li2116 fi0 ri1007 ql b i fs16 fs28 Reading and Writing Commands and Data fs16 fs28 pard s0 li2620 fi-503 ri1007 ql tx2620 tx3124 tx3628 tx4132 b0 i0 fs16 fs28 'b7 b DSPHostCommand(b0 int i cmdb i0 )b0 issues the given host command. fs16 fs28 fs16 fs28 'b7 b DSPWriteTX(b0 DSPFix24 i wordb i0 ) b0 writes the low-order 24 bits of i word i0 into the DSP Transmit Byte registers. fs16 fs28 fs16 fs28 'b7 b DSPWriteTXArray(b0 DSPFix24 *i dataPtri0 , int i nb i0 ) b0 writes i n i0 words from i dataPtr i0 into the DSP Transmit Byte registers. fs16 fs28 pard s0 li2620 fi-503 ri1007 ql tx2620 tx3124 tx3628 tx4132 fs16 fs28 'b7 b DSPWriteTXArrayB(b0 DSPFix24 *i dataPtri0 , int i nb i0 ) b0 writes the data backwards. fs16 fs28 pard s0 li2620 fi-503 ri1007 ql tx2620 tx3124 tx3628 tx4132 fs16 fs28 'b7 b DSPReadRX(b0 DSPFix24 *i wordPtrb i0 )b0 reads the next word from the DSP Receive Byte registers into the 24-bit word (right-justified) pointed to by the argument. The function waits for the time limit returned by b DSPDefaultTimeLimit()b0 to expire before giving up (and returning an error code). fs16 fs28 fs16 fs28 'b7 b DSPReadRXArray(b0 DSPFix24 *i dataPtri0 , int i nb i0 )b0 reads the next i n i0 words from the RX registers into i dataPtr. fs16 fs28 i0 fs16 fs28 'b7 b DSPGetRX() b0 returns the RX register. fs16 fs28 pard s25 li2116 fi0 ri1007 ql b i fs16 fs28 Synchronization fs16 fs28 pard s0 li2620 fi-503 ri1007 ql tx2620 tx3124 tx3628 tx4132 b0 i0 fs16 fs28 'b7 b DSPAwaitHC(b0 int i msTimeLimitb i0 ) b0 waits for the HC bit to clear. This happens when the next instruction to be executed on the DSP is the first word of the Host Command interrupt vector. i msTimeLimiti0 is the maximum wait time; 0 means wait forever. fs16 fs28 fs16 fs28 'b7 b DSPAwaitTRDY(b0 int i msTimeLimitb i0 )b0 waits for the TRDY bit to be set. fs16 fs28 fs16 fs28 'b7 b DSPAwaitData(b0 int i msTimeLimitb i0 ) b0 waits for the DSP to send data to the host. fs16 fs28 fs16 fs28 'b7 b DSPDataIsAvailable() b0 returns nonzero if data from the DSP is available. fs16 fs28 pard s25 li2116 fi0 ri1007 ql b i fs16 fs28 Ports fs16 fs28 pard s13 li2116 fi0 ri1007 ql tx2620 tx3124 tx3628 b0 i0 fs16 fs28 The following functions return a b port_tb0 value; the b port_tb0 data type is defined in b /usr/include/sys/message.hb0 . The DSP must be open before you call any of these functions. fs16 fs28 pard s0 li2620 fi-503 ri1007 ql tx2620 tx3124 tx3628 tx4132 fs16 fs28 'b7 b DSPGetOwnerPort() b0 returns the port that conveys DSP and sound-out ownershipb . fs16 fs28 b0 fs16 fs28 'b7 b DSPGetHostMessagePort()b0 returns the port that'27s used to send host messages to the DSP. fs16 fs28 fs16 fs28 'b7 b DSPGetDSPMessagePort() b0 returns the port that'27s used to receive DSP messages sent from the DSP to the host. fs16 fs28 fs16 fs28 'b7 b DSPGetErrorPort() b0 returns the port that receives error messages from the DSP. fs16 fs28 pard s25 li2116 fi0 ri1007 ql b i fs16 fs28 The Simulator fs16 fs28 pard s13 li2116 fi0 ri1007 ql tx2620 tx3124 tx3628 b0 i0 fs16 fs28 The Motorola DSP56001 simulator, b sim56000b0 , isn'27t provided by NeXT; it can be obtained directly from Motorola. fs16 fs28 pard s0 li2620 fi-503 ri1007 ql tx2620 tx3124 tx3628 tx4132 fs16 fs28 'b7 b DSPIsSimulated() b0 returns nonzero if the DSP is being simulated. fs16 fs28 fs16 fs28 'b7 b DSPIsSimulatedOnly() b0 returns nonzero if the DSP simulator output is open while the DSP is closed. fs16 fs28 fs16 fs28 'b7 b DSPOpenSimulatorFile(b0 charb b0 *i filenameb i0 ) b0 opens i filenamei0 for simulator output. fs16 fs28 fs16 fs28 'b7 b DSPCloseSimulatorFile() b0 closes the simulator output file. fs16 fs28 fs16 fs28 'b7 b DSPStartSimulatorFP(b0 FILE *i filePtrb i0 ) b0 starts the simulator, with output i filePtri0 . fs16 fs28 fs16 fs28 'b7 b DSPGetSimulatorFP() b0 returns a pointer to the simulator output file. fs16 fs28 fs16 fs28 'b7 b DSPStopSimulator() b0 stops the simulator. fs16 fs28 pard s13 li2116 fi0 ri1007 ql tx2620 tx3124 tx3628 fs16 fs28 fs16 fs28 fs16 fs28 fs16 fs28 }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.