Extending soundcard

1,204 views

Published on

Extending sound card

Published in: Education
  • Be the first to comment

  • Be the first to like this

Extending soundcard

  1. 1. Extending the soundcard for use with generic DC sensors Demonstrated by revisiting a vintage ISA design Smilen Dimitrov Aalborg University Copenhagen Lautrupvang 15 DK-2750 Ballerup, Denmark sd@imi.aau.dkABSTRACT ers as part of surround sound home entertainment systems.The sound card anno 2009, is an ubiquitous part of almost Specialized soundcards with multiple inputs and outputs,any personal computing system; what was once considered and full duplex (playback while recording) capabilities, havea high-end, CD-quality audio fidelity, is today found in most found use in music recording in professional and home stu-common sound cards. The increased presence of multichan- dios. Soundcards interface as add-ins to PCs through severalnel devices, along with the high-resolution sampling regime, busses, serial (USB, FireWire) or parallel (ISA, PCI) in na-makes the sound card desirable as a generic interface for ture; although they are increasingly found integrated in PCacquisition of analog signals in prototyping of sensor-based motherboards.music interfaces. However, due to the need for coupling ca- A slightly different type of devices become increasinglypacitors at a sound card’s inputs and outputs, the use as a popular with the academic and DIY community as A/Dgeneric signal interface of a sound card is limited to signals interfaces for utilization of sensor signals. Programmable,not carrying information in a DC component. Through a re- micro-controller based devices such as the open-source Ar-visit of a card design for the now defunct ISA bus, this paper duino [1], that offer both A/D conversion and PC connec-proposes use of analog gates for bypassing the DC filtering tivity (through, for instance, USB), provide a relatively easyinput sections, controllable from software - thereby allowing way to interface with a variety of off-the-shelf sensors, fromfor arbitrary choice by the user, if a soundcard input channel popular software development environments such as PD,is to be used as an generic analog-to-digital sensor interface. Max/MSP, or Processing. However, these devices are alsoIssues regarding use of obsolete technology and educational more limited in regard to sampling quality: for instance, theaspects are discussed as well. Arduino offers 6 multiplexed channels of 10 bit resolution, and the maximum serial transfer speed via USB is limited to 115200 bps - which results with a theoretical best-caseKeywords upper limit of 1800 Hz sampling rate for all channels (givenSoundcard, Sensors, ISA, DC a 64 bit frame is used to transfer analog data of six channels @ 10 bits).1. INTRODUCTION Because of these limitations, a lot of prototypers and de- signers opt for a sound-card as a sensor A/D interface in- The ”humble” beginnings of the soundcard1 as a dedi- stead. This also relieves the designer of worrying aboutcated part of a PC system intended to produce audible specifics of serial communication, and up-sampling the sig-sound, could be seen in the use of a timer circuit Intel nals so they match the audio domain processing rate, when8253, to generate pulses in the audible frequency range and sensor signals are to be applied to sound in software. How-drive a speaker, thereby producing audible sound [20]. Since ever, since a typical soundcard filters out frequencies outsidethen, the PC soundcard has become a multichannel A/D of the audible 20Hz - 20KHz range, both on the input andinterfacing device, able to work at CD quality (16 bit / 44 the output, its use is limited with those sensing devices thatKHz) rates and above. Devices offering more than two out- produce output in this range. A soundcard has been in useput channels are commonly used to drive multiple speak- by Leroy et al for capturing optical pickups [12], or as phys-1 ical computing interface in context of artwork production Ignoring earlier occurrences, such as the SID sound chipon a Commodore 64 (whose sound was provided as part of [10]; but its use can go beyond musical applications - sucha TV output signal) and similar as chemical analysis [15] or medicine [17]. The DC filtering problem is most apparent with sensors that encode some useful information in the DC level (such as a force-sensitive voltage divider, which would provide pres- sure as a DC level, or an accelerometer, which would showPermission to make digital or hard copies of all or part of this work forpersonal or classroom use is granted without fee provided that copies are the influence of gravity as change of DC level). A commonnot made or distributed for profit or commercial advantage and that copies way to circumvent this limitation is to use the DC signal tobear this notice and the full citation on the first page. To copy otherwise, to modulate a sinusoidal carrier in the audio range (using AMrepublish, to post on servers or to redistribute to lists, requires prior specific more often than FM), capture the modulated signal using apermission and/or a fee. soundcard, and then demodulate in software [8]. In case ofCopyright 2009 Copyright remains with the author(s).
  2. 2. resistive voltage dividers, they can be driven directly by anAC signal (conveniently, a sound-card can generate a sinu-soidal signal for the purpose), in which case the output willconform to the soundcard input limitations. Arguably, therewould be some loss of information when using this method -especially if the modulating signal has a spectrum extendingabove half the the carrier frequency; also, software resources Figure 2: Capture of a battery being connected (atare spent in demodulating a high-speed audio signal, in ad- 1.5s) and disconnected (at 4.5s) to a sound card mi-dition to applying the demodulated signal as a control signal crophone input in Audacity software.in the application. On the other hand, direct modifications to commercialsound cards - intended to bypass input sections and allow connected, and a negative one when it is disconnected. Thissampling of DC signals - have also been proposed [14]. In paper proposes that obtaining DC signals could be achievedsimilar fashion, this paper proposes that by using software- by implementing a voltage controlled switch, ultimately con-controlled analog gates, filtering sections at soundcard in- trolled by software, that bypasses the entire input filter sec-puts can be bypassed - thereby allowing for user-configurable tion, as shown on Fig. 3:possibility of designating chosen inputs as ”sensor” inputs.This relatively simple architectural change, would allow for Controlboth high-fidelity acquisition of DC signals, as well as reuseof common software tools made to interface with sound-cards. To test this assumption, a vintage ISA (Industry SStandard Architecture) design has been implemented, alongwith a corresponding C program - discussed further on inthis paper. Input C ADC R Filter2. PROBLEM OUTLINE A simplified input channel section of a sound card is shown Soundcardin Fig. 1: Figure 3: Simplified diagram of a sound-card input channel, with a controllable switch bypassing the Input input filter. C ADC R Filter A theoretical ideal switch would manifest resistances of either 0 or infinity Ohms, depending on the control signal - and could thus ideally decouple the input filter section. A Soundcard real switch will of course have finite maximum and mini- mum values for the resistance, and therefore some filtering of the input signal will still be present from the input filterFigure 1: Simplified diagram of a sound-card input section. In addition, one should be careful, as not all digi-channel. tally controlled switches can be used for the purpose - many digital switches will also function as comparators (i.e. will In Fig.1, a basic CR high-pass filter schematic is taken aim to reconstruct a digital signal); since in this case, ana-to represent a simplification of input filters usually found in log signal is being switched, analog a.k.a. bilateral switchessoundcards, in order to emphasize the filtering of DC sig- (gates) will be appropriate for the purpose.nals. To illustrate this influence, a simple experiment canbe performed: a stereo mini TRS connector can be plugged 3. TESTING PLATFORMin a microphone2 (or line-in) input of a soundcard, and theground and a channel wire can be used to connect to a 1.5V In order to test the assumption given in the problem out-battery. If we try to capture the resulting input data us- line, a hardware platform needs to be chosen, that behavesing audio recording software (such as Audacity), we would essentially like a sound-card - but also allows for demonstra-obtain a capture like the one shown on Fig. 2 tion of activating added analog gates via software. Primarily Instead of obtaining a constant (DC) level in the time pe- because reverse-engineering an off-the-shelf soundcard de-riod between approx 1.3s and 4.5s on Fig. 2, what is shown vice to behave as imagined would have been problematic,is a typical signature of a high-pass filter in the time do- but also due to potential educational benefits - a DIY im-main - a positive spike at the moment when the battery is plementation of a soundcard design was sought instead. Although the Internet does offer some information and2 Note that most recent PC microphone inputs are designed tutorials on building basic extension cards for a PC - inter-to interface with electret microphones, which means that one faced through either USB, ISA or PCI buses - it is difficultof the channels of a stereo jack is in fact used to supply 5V to to find an available design, which is specifically intendedthe electret mic; so the input is effectively mono - althoughsome sound cards can sense the device being plugged in, to represent a sound card (or even a high-speed A/D con-and switch from electret regime to stereo. Here a built-in verter). The only one found appropriate for the purpose, ismicrophone input of an Asus EEE PC900 netbook was used. the design for a ISA extension card by Joe D. Reeder [18]
  3. 3. - a now abandoned product, that was intended for learn- ing voltages on the 20 address pins of the ISA bus, usuallying the essentials of software-controlled hardware. Since the marked as A0-A193 . The PC notifies devices when they canschematic and the basic software code, related to this card, act on the given address, by lowering its Address Enable lineare still available on the website associated with this prod- (usually marked AEN4 ). Using an address decoder circuit onuct (www.learn-c.com), it was this design that was taken as the card, the card can produce a single digital trigger, when-a starting point for development. ever voltages corresponding to its own address are present The schematic for this “Learn-C” ISA card was reim- on the bus (not all 20 address pins are necessary for this,plemented as a double-sided PCB, with an added CD4066 though). So, whenever the card’s address is present on theCMOS quad bilateral switch. Since the ISA bus is now ob- address line, and the AEN signal is taken low, the card is tosolete and cannot be found in modern PC systems, an older respond by checking whether the PC wants to read or writePC based on an Elitegroup ECS P6VAP-A+ (or P6VAP-AP) - and act accordingly; in all other cases, the card must ap-motherboard was acquired. This motherboard from 2000 pear electrically as a high-impedance circuit to the ISA busfeatures a single ISA slot, however the age of this PC as a circuitry. The PC notifies that it wants to read by takingwhole caused some specific problems, which forced an in- ISA’s Input/Output Read pin (marked IOR5 ) low; intent toquiry into alternatives for the booting process for the ma- write is provided by taking ISA’s Input/Output Write pinchine. Code in C language from [18] was used to implement (marked IOW 6 ) low. Typically, if a digital line is activatedtest software, and Agilent 54621a oscilloscope was used to by taking it to a low electric level, it is known as “activecapture signals on board - using the open-source agiload low”.package for transferring oscilloscope traces to a PC as raw These signals (A0-A9, AEN, IOR and IOW) are in factdata. The experiment finally consisted of using a vintage “the minimum set of signals that must be used in an inter-Wavetek model 145 signal generator to produce an approx. face design[13]”. Exchange of data between the PC and the440 Hz sinusoid voltage with a DC offset level, and captur- device occurs through the 8 data pins of the bus, D0-D77 .ing this voltage with the “Learn-C” card and test software Besides an address decoder, a minimal ISA interface cardon disk. As the test software allowed for user-controlled would also need a data transceiver circuit, for electrical de-activation of the bilateral switches, these were alternately coupling of circuits on board from the ISA bus - as well asturned on and off during capture - and the captured signal target digital devices, such as A/D or D/A converters, thatwas observed in the open-source Audacity software. the PC ultimately communicates with through the bus [23].3.1 ISA bus principles 3.2 ISA hardware implementation Let us reiterate some basic principles of the ISA bus inter- The original schematics for the “Learn-C” ISA card foundfacing, before proceeding with the implementation details. in [18] was rebuilt using open-source KiCad software (Fig. 4);In essence, we can distinguish between serial and parallel the same software was also used to produce the PCB layout.hardware interfacing modes; RS-232 being an example ofconceptually simple serial protocol, and IEEE 1284/Cen-tronics of a parallel one. A serial protocol transmits one bitat a time, and electrically needs at least three wires: onefor transmission, one for reception and ground. A parallelprotocol will use individual wires to represent a single bit -and can hence carry more than one bit at a time, but needsas many wires as there are bits in the word, plus a groundwire. In some dialects of C, interfacing with either type ofprotocol could have been achieved with commands like voidoutportb(unsigned short port, unsigned char data). When outportb executes, the address given by port willeventually activate the corresponding interface circuitry, andthe value data will be “written to the port”. Roughly Figure 4: KiCad schematic of the ISA card; em-speaking - in case of serial, this would mean alternating the phasized dashed lines indicate connections of bipolarvoltage between low and high levels (say -12V and 12V) on switch (In electronic PDF version, zoom in for more detail).the transmit wire, with a rate specified by the serial trans-fer speed, such that a BCD binary representation of data The design on Fig. 4 relies only on the ISA bus poweris reproduced; in case of parallel, this could mean that each supply pins 1, 3, 5, 7, 9, 10, 29, 31 (GND, +5V, -5V, -12V,of the wires of the parallel bus is set to a low or high volt- +12V, GND, VCC, GND) as well as ISA pins 2, 13, 14, 20,age (say 0V and 5V), corresponding to which bit in the BCD 33-40, 42, 53-62 (RESET, IOW, IOR, OSC, D0-D7, AEN,representation of data a given wire represents. A command A9-A0). The pin RESET goes high during power-on, and islike unsigned char inportb(unsigned short _port) could used for device initialization, whereas OSC is the ISA systembe used to “read from a port” into a variable instead. oscillator, typically at 14.318 MHz. ISA address pins A0-A2 The ISA bus (like the current PCI) is a parallel peripheral are first buffered using a 74LS244 (3-state octal buffer/-bus. It has occurred as either PC/XT-bus, an 8-bit bus imple- 3mented physically as 62 pin port; or PC/AT-bus, a 16 bit bus, pins 62-43, or 31-12 on the bottom side 4physically containing a PC/XT slot’s 62 pins and additional pin 42, or 11 on bottom side 536 pins (total of 98 pins). The operation principles can be pin 14 - on top side 6discussed only using the PC/XT slot. The PC will address pin 13 - on top side 7different devices on the ISA bus, by setting up correspond- pins 40-33, or 9-2 on the bottom side
  4. 4. line driver) circuit, and then used for selecting a particularchannel from the ADC from software. Address decoding ofA3-A5 is performed using 74LS138 (3-to-8 line decoder/-multiplexer), and used to select among the different deviceson the card (the DACs or ADC, for instance). Addressdecoding of A6-A9 is performed using 74LS688 (8-bit mag-nitude comparator), comparing these pin voltages to a stateset by a DIP switch - which allows for manual setting of thecard address using the DIP switch. Additionally, 74LS245 (3-state octal bus transceiver) takes Figure 5: Left: image of the wired card; right: cardcare about buffering D0-D7 for use by the ADC or DACs, in ISA slot of motherboard of test PC.depending on whether the PC is not in a read operation, byproviding the correct impedance for each direction (towardsor from the PC); a 74LS393 (dual 4-bit binary counter) di- in a project like this - and initially, it wasn’t. The PC usedvides the OSC system oscillator signal frequency, providing for testing, apart from the P6VAP-AP motherboard, offered1/16th of the frequency (about 894 KHz) as a clock signal a Pentium III 750 MHz processor, a broken floppy drive, afor the ADC. Most of the logic circuits are from the 7400 se- working IDE hard-disk, a working but slow CD-ROM, and aries, working with TTL signal levels (0 and 5V). Besides working network card. The hard disk contained Windows XPthe two DAC0832 (8-bit µP compatible, double-buffered operating system, which was initially used for developmentD/A converters) and ADC0809 (8-Bit µP compatible A/D - since the original source code in [18] is meant to run underconverter with 8-channel multiplexer) ICs, a 8255 (general MS-DOS.purpose Programmable Peripheral Interface (PPI)) is also Unfortunately, in the middle of the project, the hard-diskpresent - and used in this test setup as a simple digital out- became unusable, apart from the very first sectors - and atput switch, which eventually activates the CD4066 analog the same time, it was impossible to obtain a replacementgate. Finally, an input, “mic” analog preamplifier/filter is quickly. This turned the test PC into a, essentially, disk-present for the input signal; as well as output amplifiers/fil- less machine, which cannot reliably boot a full desktop op-ters for the DAC outputs. erating system in the standard manner (from a local hard As shown on Fig. 4, most of the original design of the drive). Therefore, several alternative booting procedures“Learn-C” ISA card has been reproduced, although with were looked into. The final setup is shown on Fig. 6:some differences. For instance, a socket for the CD4066switch was added, and not all wired connections were im-plemented on the PCB (for instance, headers were left un-connected, as well as most of the I/O port pins of the 8255PPI). On the other hand, both DAC0832 digital-to-analogconverters were implemented8 . To avoid problems with over-etching thin tracks, the lay-out was deliberately taken to feature thicker tracks - this,however, made it very difficult to implement the entire de-sign as a double-layer PCB. Hence in some instances (like thedigital input pins of the DACs), holes were left on the board,intended to be connected with parallel wire. The board wasthus easy to etch, but somewhat difficult to solder - as plentyof wire had to be soldered by hand. In addition, IC sockets Figure 6: Boot setup between the diskless test PCwere used, to avoid possible problems with soldering ICs di- (hosting the ISA card), and a tftp server PC. Therectly; however, since IC sockets to not expose enough pin test PC starts the boot from CD, and then proceedsmetal for double layer soldering, pins were obtained from to boot an OS image from the server PC.additional IC sockets9 , and added as an extension to theused socket pins. This solved the double layer IC soldering The easiest, and increasingly popular, alternative wouldissue, however it also further complicated the geometry and be to attempt a boot into MS-DOS (which would still allowaccess to the card. The implementation of the card is shown for running of the card’s test programs) from a USB thumbon Fig. 5. drive. This would allow for testing of the card software com- The PCB layout had unfortunately some errors as well piled elsewhere, in spite of the test PC lacking the possibility(like missing tracks), which additionally complicated the im- to compile programs. Unfortunately - unlike most modernplementation phase. However, once found, these errors were desktop PCs - the P6VAP-AP does not natively (from BIOS)relatively easy to correct on the board itself (due to the de- support booting from a USB device10 .liberate design with larger tracks, which allowed for direct So, since the initial sectors of the hard-disk were still inuser intervention). order, Mandriva 2008 was installed on this hard-drive from a live CD, in spite of getting a corrupt installation as a re-3.3 Host PC and booting process sult - simply to get the GRUB boot-loader software installed. The PC booting process would normally not be an issue The GRUB could then chainload (further boot into) the PLoP8 [28] boot manager software, which can detect bootable USB although only a single one is actually used.9 10 only open-frame, round-pin type sockets can be used for not even with the latest BIOS update for this motherboard,this purpose released in 2003.
  5. 5. drives on older machines, even if their BIOS cannot - and and then compile the executables on the server machine,further chainload (boot) from them. This unfortunately copy them to the share, and execute new versions on thedoes not work with all USB flash drives - PLoP couldn’t boot test machine - without the need for a reboot.from a TakeMS 4 GB USB memory key, while it could boot Some issues around the network boot were: the need tofrom a generic brand 128 MB memory stick. However, even have both test PC and server connected to the same net-a working USB thumb drive doesn’t seem to last long - af- work switch; the need for the tftpd server to assign IP ad-ter a series of copying operations, the 128 MB stick stopped dresses in the same range as the IP address the server PCbeing bootable from PLoP on the older test PC (although it itself obtains from a master DHCP server; and the need forremained directly bootable from newer PCs), and it had to folder sharing under password-less accounts under Win XPbe reformatted. (since the net command on the BFD disk image does not sup- The boot managers can usually be sensitive to CHS (cylin- port Windows XP account password authentication). Theders/heads/sectors) disk geometry entered as part of the network boot method could be, in principle, used to serveformatting process - even though no such organization ex- any bootable image, not just an MS-DOS one; for instanceists on a physical level in a flash drive. Using Gparted to the open-source FreeDOS might be an alternative - unfortu-format a drive as FAT32 with ”cylinder rounding” is one nately it lacks a free equivalent of the net command, andof the safer methods; however, it is difficult to get such a hence cannot establish network connectivity on its own. An-USB thumb drive directly bootable as a MS-DOS drive after- other alternative is to use a Linux bootable network disk.wards11 . Here a different approach was used instead: QEMU, For the Linux operating system, initially the nanoboxan open-source processor emulator, was used to virtually linux [25] network boot disk was tried out. Using the de-boot from an MS-DOS floppy image, and to virtually mount fault floppy disk image of nanobox can be easily served withthe USB thumb drive as a hard drive of the virtual machine. a tftpd server - however, it lacks the smbmount command,This can be achieved with the following command in a Linux which is closest in functionality to DOS’s net use. ThereOS: are resources available on the web page for producing a ver- sudo qemu -L / usr / local / share / qemu / - fda / sion with smbmount - however, that still does not make this path / to / WIN98SEC . IMG - usb - hda / dev / OS suitable for test of the card. Linux systems are based sdc - boot a on different supporting libraries; whereas typical Linux sys- tems are built on glibc (GNU C library), nanobox is builtThen the entire USB thumb drive can be formatted and on a small embedded C library known as uClibc. Thismade bootable from within MS-DOS - and this seems to en- means that the software source code must be recompiledsure both successful booting into MS-DOS from managers for the corresponding C library of the OS (or supply thesuch as PLoP, and usage of the entire free disk space of the missing objects, risking compatibility problems). As it canthumb drive12 . In the end, this method proves tedious too, be difficult to set up the, needed for compilation, uClibcespecially for development - since MS-DOS typically doesn’t build toolchain on a nanobox system with only a remoteoffer network connectivity, the only way to transfer exe- drive mounted via smbmount - an easier solution was foundcutable files to the test machine requires that the thumb in using a Damn Small Linux (DSL) [4] distribution. Thisdrive is removed (and therefore the test machine rebooted) distribution (based on KNOPPIX Linux distribution), whileeach time a new file is to be tested. offering a GUI, is only 50 MB in size, which makes it suit- Finally, the booting method settled on a network boot, able for a network boot (since the entire operating systemalso known as Preboot Execution Environment (PXE), as image is generally loaded in RAM in such cases); addition-most convenient. The test PC’s network adapter is 3COM ally, there are Internet resources specifying the booting of3C905-TX, which features an empty slot for an add-on KNOPPIX based systems using tftpd server; and finally, al-boot ROM. If it had a PXE boot ROM, the test PC could though small, Damn Small Linux is extensible with prebuilthave booted over the network without any need for addi- packages, including the GNU C compiler gcc and debuggertional software, since the P6VAP-AP supports network boot gdb - and these can also be used from a local network loca-directly from BIOS - but only if the network adapter sup- tion. Thus, it becomes relatively easy to compile the cardports it too. Therefore, the test PC was set to boot from software, and run it under a DSL distribution.CD-ROM, and a rewritable CD was “burned” with the open- The most typical problem with these Linux OS’s on a disk-source gPXE [6] network bootloader image. Of course, net- less machine, is accessing Windows network shares. Typi-work booting demands a server as well - a Windows XP ma- cally, the smbmount command can be used with the followingchine was used to host the open source tftpd32 [22] server, syntax:which in turn was used to serve an image of an MS-DOS net-work disk (built using the Build Floppy Disk BFD [26] soft- mount -t smbfs // mypc / myshare / local / mountware). Once the test PC is booted in a networked MS-DOS / direnvironment, it is relatively easy to mount a remote Win-dows share on the server through the net command: where mypc is the computer name under Windows of the re- mote PC. However, using this name is not always successful net use X : mypc myshare (especially if the domain information is not set in the Linux11 In such a case, Grub4DOS can be installed as a boot-manager PC); in most cases, using the IP address of the PC instead, on the flash drive, which has the capability to boot a MS-DOS helps. In DSL Linux, installing its samba package will also floppy disk image (stored on the flash drive) directly to mem- provide a graphical LinNeighborhood program which allows ory.12 in this case around 120 MB - other methods for achieving for automatic discovery of PCs and shares on the local net- the same can “force” the USB flash drive to behave like a work; however, the exact user-name, password and domain diskette, along with only 1.44 MB as entire capacity of the as the current Windows logged-in user are needed in order disk to access a share on a Windows PC.
  6. 6. 3.4 Software considerations taken in the software, and additionally, the As mentioned previously, the source code for the “Learn- DACs do not depend on a clock signal - we can expect thatC” ISA card given in [18] is C code, originally intended the test PC will simply try to write the ramp values, asto run under MS-DOS (as part of this project, portions of soon as it can, to the ISA card DACs; without previousthat code were ported to Linux as well). The “Learn-C” experience, one could speculate that this could result evenexample programs can also run in the command prompt with a hypersonic wave being generated by the DACs. Toshell of Windows XP - however, they cannot be directly confirm this, the output analog signal was captured with ancompiled with modern Windows C compilers. The reason oscilloscope (shown on Fig. 7).for this is that the code relies on C commands like inportband outportb (or inp and outp), which represent direct I/Oport access13 ; however direct I/O port access is disabled forWindows architectures newer than NT [19]. Nonetheless, older compilers can be employed in order tocompile the test programs for the ISA card - so they run evenunder Windows XP. Currently, Borland’s historical compil-ers Turbo C v2.01 and Turbo C++ v1.02 are provided at nocost - both of them can be installed under DOS or Windows,and can compile the ISA card test programs. However, thereis another option as well - the open-source DJGPP compiler[5]; although there are some subtleties in switching from aBorland to a DJGPP compiler, the process is almost straight-forward. Figure 7: Agilent oscilloscope screen capture of the The first piece of test software run, was the C code ex- output DAC signal, after amplification (obtained us-ample from [18] (experiment 8 ) which controls a DAC, and ing agiload software).outputs a triangular wave analog sound. The core of thecode is relatively simple: The DAC output signal on Fig. 7 is well in the audi- disable () ; ble range (which can be shown by connecting a speaker to while (! kbhit () ) the output, and hearing the output). The agiload soft- { ware can also obtain a scope capture, like on Fig. 7, as a for ( x =0; x <256; x ++) { outp ( da1 , x ) ; } list of 2000 floating point voltage values; this list can be for ( x =254; x >0; x - -) { outp ( da1 , x ) ; } __asm__ (" sti ") ; // required by DJGPP used to obtain more precise locations of local minima, and } thus more precise period. Using this method, we arrive at enable () ; a period of approximately T=876.5 µs (or f=1140 Hz DAC frequency), which means that the time between consecutive Listing 1: DAC code outp(da1,x) commands in listing 1 (which involves check of for loop condition, increase of counter x value, and the ac- In essence, as long as no keyboard presses are detected, tual outp command) is about 1.7 µs. Since the same tempo-the code will loop two for loops, that generate a ramp of all ral granularity occurs for test programs under both MS-DOS8-bit values - from 0 to 255 and then back - and write those and Linux environments, and is somewhat similar regardlessvalues to a DAC. Here is one difference that can be seen of interrupt disabling - it is likely that this limit is imposedbetween DJGPP and Borland compilers: DJGPP for some rea- by a more fundamental problem (such as incompatibilityson cannot detect a keyboard press, if the kbhit command between bus requests timing, and relaxation time of the theis encapsulated between enable and disable commands - DAC chip or similar device - similar to the 8530 latencyunless the assembler command __asm__("sti") is added at problem described in [9, pg. 809]).the end of the loop [7]. Also, whereas Borland compilerswill produce executables some 15 KB in size, the DJGPP com-piler generates 117 KB executables for the same source code. 4. TESTING PROCEDUREFinally, “raw” executable from DJGPP will complain about The testing procedure consisted of two distinct steps. The“cannot open swap file c:cwsdpmi.swp”, although the first was to use a known signal to determine the samplingsoftware will run - the way to work around this is to use rate of the ADC; and to check whether this rate is cor-the exe2coff, cwsdstub and cwsparam programs from the rect (by auditorily comparing a capture from the ISA card’sDJGPP distribution, to explicitly set the swap file used by the ADC to the known signal). The second step (the actualexecutable to none. experiment) consisted of sampling and capturing a known, It is interesting to observe the frequency of the eventually DC-lifted, sinusoidal signal; turning the analog switch onproduced analog signal - since there are no explicit timing and off during capture; and looking for presence of a DC level recording when the switch was active in observations13 These C commands are in fact interface for the assem- of captured data.bler commands IN and OUT, which otherwise represent corecommands in the Programmed Input/Output (PIO) trans- 4.1 Determining the ISA card sampling ratefer mode [23]. Since PIO (as opposed to Direct Memory As the DAC sampling rate discussion hints, determiningAccess (DMA)) involves the processor in every transaction ofdata between the PC and the peripheral devices on the bus, the ADC sampling rate will also involve some work. Ait suffers from performance issues, which is why it is being known reference signal - a 440 Hz sinusoid - was generatedphased out where fast devices are involved [27]. using Audacity with the maximum amplitude, and repro-
  7. 7. duced using a sound-card headphone output; this signal wasapplied directly to the ADC’s first input (pin 26). Sincethe headphone output spans from -1.65 to 1.65 Vpp, andADC0809 operates ratiometrically against a voltage referenceset to 5V - obviously only the positive semi-period of the si-nusoid will be captured. This distortion, however, would notaffect the fundamental frequency seriously – which meansthat the captured signal’s pitch should remain audibly close Figure 8: Oscilloscope screen captures of EOC (top)to the pitch of the original sinusoid. vs IOW (bottom). Left: 100 µs of non-periodic be- The starting point was again code from [18] (experiment havior; right: 1 ms of periodic behaviour.9 ). Auditory comparison requires that the test softwareis able to record captures on disk, which is done relativelyeasy by adding the fputc C command to write the 8-bit mands (such as printf or fputc) from the ADC reading loopdata (obtained from the ADC) to disk - as soon as it is code, IOW started firing and EOC stabilized its frequency -available. However, initial captures for several seconds of which is shown on Fig. 8 right. The execution of C com-capture time were only few thousand bytes in size - which mands thus visibly influences the sampling rate of the ADCmeant something was wrong with the ADC sampling rate. process. Eventually, it turns out that this can be resolved by Let’s briefly review the principle of work of the ADC: we introducing a short delay between the outport and the firstalready mentioned that the ADC chip is addressed through inport command in the reading loop, as shown in listing 2:10 bits of the ISA address line: A9-A6 determine the card, unsigned base; unsigned adcport; base = adcport =A5-A3 determine the ADC chip (through the 74LS138 de- 0x200; //1000000000coder) and A2-A0 determine the input channel on the chip if ((fp = fopen(FILENAME,"w+b")) != NULL) {to read from; the base address is this case was 0x200 while(!kbhit())(1000000000). If the PC does a write (outport) on this ad- { outp(adcport, 0); // start channel 0 conversion , bydress, IOW line is activated. In that case, pins of 74LS02 are writing whatever value to address adcportset to: 74LS02/p1=”1” and 74LS02/p4=”0”. 74LS02/p1 iz = del; while (iz > 0) iz--; // fake delay , ’ del ’being high enables lines START (ADC0809/p6) and ALE (ad- incrementsdress latch enable, ADC0809/p22), to notify the ADC to while(!(inp(adcport+0x18) & 0x80)); // wait for EOCprocess analog input channel based on the brought A2-A0 ready : 0 x18 = 000011000, 0 x80 = 010000000lines. 74LS02/p4 being low disables line OE (out enable, x = inp(adcport); // read ADC value into variable x fputc((char)x,fp); // since value is 8− bit anyways ,ADC0809/p9). Thus, analog-to-digital conversion in the just cast to char and save to diskchip starts during a write operation, but the chip’s digital }output pins are not yet enabled at that moment. If the PC }does a read (inport) on this address, IOR line is activated.In that case, pins of 74LS02 are set to: 74LS02/p1=”0” and Listing 2: ADC reading loop code74LS02/p4=”1”. 74LS02/p1 being low deactivates START Additional code made it possible to interactively changeline (however this does not stop an already started ADC the value of the del variable, and thus the duration of theprocess) and ALE; and 74LS02/p4 being high enables line delay. It was discovered that for values of del greater thanOE, which makes ADC0809 output the last finished sam- 8102, the EOC signal settles its period as on Fig. 8 right - andpled result. Once started, the ADC works in sync with the furthermore, in this case, commands like printf or fputcOSC/16 (about 894 KHz) clock signal, finishing with the EOC didn’t seem to affect the EOC period as seriously. This need(END OF CONVERSION) signal. Upon EOC, we should for a delay occurs for test programs running both underhave the digital sample value ready, laid out on BD0-BD7 Windows and Linux environments (and it’s likely it is re-pins of ADC0809. lated to timing inconsistencies between the bus and the card So, from the PC side, we always have to do an outport hardware). Using the data captures of oscilloscope traces,to start the ADC process, then wait for the EOC signal, and the period of the EOC signal while capturing to disk was de-then an inport to obtain the digitized value. Waiting for termined to be around 78.583 µs, which gives around 12725the EOC signal is implemented by reading from the base Hz sampling frequency. As listing 2 indicates, the recordedaddress plus 0x18 (0000011000), which sets address lines file is simply a stream of 8-bit characters. This file can beA3-A4 to ”11” and thus makes the decoder select the line imported in Audacity as raw data, and the sampling fre-EOC/SWITCH SELECT (74LS138/p12) instead of line quency is set upon import; the resulting waveforms can beADC SELECT (74LS138/p15). This eventually causes the seen on Figure 9.74LS244 to map the EOC signal to BD7, which is then routed The multi-track capabilities of Audacity also allow theto the D7 data pin of the ISA bus through the 74LS245 original 440 Hz source signal, and the ADC captured sig-transceiver. So, from software, we would simply wait - un- nal from the ISA card, to be played simultaneously in spitetil the value, read from base address + 0x18, gets its 8th of differing sampling rates; their respective pitches can bebit set to 1 (which is easily done by bit-masking with 0x80 heard as audibly close. It was difficult to determine by hear-(010000000)). Hence, a more precise way to obtain the sam- ing whether the obtained 12.725 KHz sampling rate trulypling rate, would be through determining the period of the produces a pitch closest to the original source signal, asEOC signal. However, initial observations of the EOC signal Audacity doesn’t offer a way to modify the sampling rate ofshowed problems, shown on Fig. 8 left. an audio file interactively while the sound is playing. Figure 8 (left) shows that EOC is not periodic; addition-ally, IOW never fires. However, by removing extraneous com-
  8. 8. targetpin = 0x80; if ((fp = fopen(FILENAME,"w+b")) != NULL) { while( (ch == ’p’) ) { if (kbhit()) { ch = getch(); //windows only , conio . h if (ch == ’p’) { outval = !outval; // toggle value ov = targetpin * outval; // shiftFigure 9: Display of captured ADC signal imported printf("outval is now %d (0x%X=%d).n", outval, ov, ov);in Audacity, interpreted as signed (top) or unsigned outp(ppi_porta, ov); // write value to PPI(bottom) 8-bit data. The portion on the right shows }a temporally zoomed slice. } outp(adcport, 0); // start channel 0 conversion ... // [ snip rest of code ] ...4.2 Test of analog switch functionality } // end while , reading loop As mentioned previously, a CD4066 was used to imple- Listing 3: Toggling PPI pin 37 via press of key ’p’ment an analog switch, which bypasses the input preamp/-filter section of the ISA card. This chip offers four analog Listing 3 allows that a press on key ‘p’ toggles the out-switches - only a single one was used, defined by pins 1 and put voltage of 8255/p37 between 0 and 5V, which in turn2 and switch connectors, and pin 13 as voltage control. Us- turns toggles the analog switch on or off via CD4066/p13.ing a pocket digital multimeter, the resistance of the channel Otherwise, the switch terminal CD4066/p2 is connected to(between pins 1 and 2) was measured. With the PC powered ADC0809/p26; and CD4066/p1 is connected to input ofoff, 25.6 KΩ were measured; however, with the PC powered the mic preamplifier (input pin of capacitor C1 on Fig. 4).and the program running, this resistance was measured at 0 Thus, using the analog switch, the entire input preamplifierΩ for closed switch, and greater than 2 MΩ for open switch; can be bypassed by a key press - while the software recordswhich is a good sign that the device will behave close to an the ADC samples to a disk file. Then, if a signal with a DCideal switch when in use. Of course, there is the question of level is present on the preamplifier input, the toggling of thehow to target the voltage control pin of the bilateral switch switch should be visible on a recorded capture.(CD4066/p13). The 8255 PPI on the ISA card was usedfor the purpose, as it offers three ports (A, B and C) of 8 5. RESULTSpins each, which can be configured to act as either digital The procedure described in section 4.2 was used to captureinputs, or digital outputs; it additionally has an 8-pin data a DC offset sinusoidal signal. This signal was generated by aport, through which all the communication with the chip is vintage Wavetek model 145 signal generator, which doesn’tperformed. Just a single output pin is needed from a single provide for fine-tuning control of the AC amplitude and theport, configured as output, in order to control the analog DC offset separately. Eventually, a signal spanning betweenswitch; pin 7 of port A (8255/p37) was chosen for the pur- 0.5V and 1.66V, set at approximately 450 Hz, was used aspose, and was connected to CD4066/p13. The 8255 offers the input signal for ADC capture. The signal arriving at thethree different modes of configuration of the three ports; input pin ADC0809/p26, without and with the influencehere any mode that configures port A as output will do, of the switch, is shown on Fig. 10.and the function set up ppi from [18] was used to quicklyconfigure the ports. The ISA bus address lines A0, A1 are eventually routedto the two address pins of 8255 (p8 and p9), which are usedto choose which internal 8255 register is targeted throughthe data pins. The control register is accessed when A0=1,A1=1 (or, the base address of the 8255 + 3 appears on theISA bus), and can be used to configure the PPI; the port Aregister is accessed when A0=0, A1=0 (or, the base address Figure 10: Oscilloscope screen captures of the in-of the 8255 appears on the ISA bus), and can be used to put signal brought to ADC0809 IN0 (left) withoutread from port A - or turn individual pins on and off if the influence of analog switch; (right) while analogconfigured as output. Eventually, this was coded within the switch turned onADC reading loop, so as to allow 8255/p37 to be turnedhigh or low at the press of the button. The key elements It should be noted that the input section of the ISA card,of the code, integrated with code on listing 2, are shown on features a small voltage divider, formed by VR1 and R3 (Fig. 4),listing 3: used to offset an input signal (and thereby avoid clipping// make port A an output and port B an input − of signal with no zero offset). This voltage offset was set Aout CUin Bin CLin = 0 x1C0 to zero by tuning the VR1 potentiometer, in order to em-set_up_ppi(0x1C0); ulate accurately the DC filtering behavior of input section// 0 x200 = 1 000 000 000 of soundcards. Additionally, the amplification factor of theunsigned base; unsigned adcport; base = adcport = preamplifier section is fixed, and set by the ratio of resistors 0x200;// 1 000 000 000 + 0 000 100 000; A0=0, A1=0 R2 (4.7 MΩ) and R1 (3.9 KΩ) - which results with some 1200unsigned ppi_porta = base + 0x20; times amplification. Such an amplification will clip the DC-int ch = ’p’; int outval = 0; int ov = 0; int offset input signal rather quickly, hence a 3.9 KΩ resistor
  9. 9. was soldered in parallel with R2, in order to bring the am- needed) for strictly positive voltages when using an activeplification close to 1 - and keep the amplitudes of the input switch.in both test cases equal. As per Fig. 10, that didn’t turn This project started by looking for a hardware platform,out to be a total success, yet it is close: the filtered signal that behaves essentially like a sound-card. Arguably, thehas an amplitude of 1.14 Vpp, whereas the switched signal ISA platform used here cannot be even considered a soundshows 1 Vpp. card, until it can be used by typical audio software (like This input signal was captured using the procedure given players or editors) from the application level in an operatingin section 4.2, as the analog switch was turned on and off system. Although the ISA card could be extended to playduring capture using keyboard key presses. The data cap- back audio (encoded for the measured DAC frequency) - attured by the ISA card can be verified through an import in the state presented here, it behaves more like a generic signalAudacity, depicted in Fig. 11. generator and sampler, than a modern soundcard. Finding a modern open hardware platform, that allows for the type of research as in this project, is still problematic; although FPGA based designs, such as the ones described in [11], are very promising as a base for miltichannel, high-speed, hybrid audio/sensor interfaces. Whereas it is utopistic to expect that this paper could significantly influence industry in such a manner, that simi- lar modifications become a standard for future sound-cards - it certainly aims to inspire designers working in the elec- tronic music instrument field, to focus at the intricacies of digital interfacing with analog signals; and to consider us- ing older, historic designs for appropriate purposes - whileFigure 11: Top: Six second capture of an input being aware of potential obstacles. Mostly, one has to dealsignal with DC, with the switch activated in mid- with hardware availability, although software can be an is-capture; Bottom: temporal zoom at moments of ac- sue as well. However, in the case of ISA, the paper showstivating (left) and deactivating (right) the switch. that currently there is still a palette of tools that can tar- get such machines and corresponding functionality, many of As it is obvious from Fig. 11, activating the switch allows them free and open-source; yet, one has to be prepared forthe DC level of the signal to be captured by the card’s ADC; a time investment for straightening out potential glitches.and the waveforms obtained in Audacity remain relatively Although the “Learn-C” ISA design was sufficient to illus-faithful to the original input signal shown in Fig. 10. trate potential use of analog gates, it is pointless to attempt to turn it into a full sound-card, primarily since the ISA bus6. DISCUSSION is in itself obsolete. However, it may be interesting to look at the practical obstacles to it. The biggest problem with This paper indicates that analog switches bypassing the this design, and possibly with any design based on PIO modeinput preamplifier section of sound-card inputs, would be a control of an ISA sound-card, is the difficulty in obtainingrelatively simple change to perform on existing sound-card consistent and predictable timing. Neither the ADC input,designs, thereby expanding their purpose to high speed A/D nor the DAC output design outlined here haven’t taken ainterfaces for generic sensors. Similar change could be im- particular timing goal into account; in both cases the sam-plemented for output sections, thereby allowing sound-cards pling rate had to be determined after the device was builtto be used as generic signal generators. The DC blocking ca- and used. As an experiment, during development an at-pacitors are present in a sound-card, of course, for a purpose tempt was made to develop a PD object under Windows XP,- primarily to protect speakers from constant DC biasing, that would eventually be able to transfer digital audio dataand thereby prolong their lifetime [24]. The design change streams played within PD to be passed and reproduced onproposed here, would ideally leave that regime unchanged the ISA card. PD objects are based on a so-called “perform”for audio purposes - and simply introduce a different one, function, which gets called by the OS repeatedly; the gran-more suitable for sensor data acquisition, when the user re- ularity of this perform function calls is about 1 ms. Whenquires it. a perform function is triggered, it has access to input and Unfortunately, the card’s implementation is of rather low output sound buffers, which contain a number of samples,quality, which results with a noisy input and output - obvi- corresponding to about a millisecond of audio. Hence, all aous even from the oscilloscope traces provided in this paper. perform function would do, is simply write these values toTherefore it is difficult to make any claims beyond a simple the DAC of the ISA card as soon as possible; the DAC woulddemonstration of the concept - such as frequency character- also reproduce them as soon as possible, and then hold theistic of the preamplifier sections with a switch for both on last value for about a millisecond, until the perform func-and off states, or distortion introduced by the switch. How- tion gets called again. Thus, this particular ISA card designever, the paper also shows that once a platform is available, simply cannot be driven by a standard PD object, in such ait is relatively easy to suggest modifications that would be way that audio is reproduced at the DAC output; becauseworkable in practice - and that even vintage designs can be of the slow, millisecond, call rate of the perform function -used for the purpose. Still, many factors would still need to and the need to access the hardware directly via in and outbe considered, before a final conclusion is made regarding commands during its execution 14 .implementation in modern sound-cards: for instance, howto preserve the bipolar voltage sampling capabilities when 14in audio mode, while adjusting to the ADC input range (if This would be quite possible, if the ISA card had compo-
  10. 10. In fact, Windows, apart from prohibiting PIO access via 8. REFERENCESinport and outport commands15 , also has millisecond gran- [1] Arduino. Arduino homepage, http://www.arduino.cc/.ularity built into the operating system [21]. Essentially, World Wide Web electronic publication.standard Microsoft C and C++ programs cannot be guar- [2] D. Beal, I. Ripoll, P. Pisa, L. Abeni, P. Gai, andanteed timed access beyond a millisecond granularity, unless A. Lanusse. Linux As a Real-Time Operating System.the Windows Driver Development Kit16 is used [3], which re- Metrowerks Corporation–A Motorola Company,quires a Microsoft paid subscription. Although Linux “is not OCERA, 2003. World Wide Web electronica real-time system, it has some features, already included in publication,the mainstream source code or distributed as patch files, de- http://www.freescale.com/files/soft dev tools/doc/-signed to provide real-time to Linux” [2]; and since it allows white paper/CWLNXRTOSWP.pdf.for free development of device drivers, it could be seen as [3] M. Cherepov, M. Hirst, C. Jones, and M. Zimmerman.a viable alternative for work with designs, such as the one Hard Real-Time with Ardence RTX on Microsoftdiscussed in this paper. Windows XP and Windows XP Embedded. Technical Arguably, the ISA design used as a test platform here, report, Ardence, Tech. Rep. Also atdoesn’t even come close to issues in contemporary sound- http://msdn.microsoft.com/en-card production. However, it is an excellent educational us/library/ms838340(WinEmbedded.5).aspx,tool to introduce general issues related to design of sound- 2002.cards and corresponding software. Namely, it is often diffi-cult for beginner engineers to come to a practical example, [4] damnsmalllinux.org. DSL information - What is DSL?which is both relatively simple to understand as introduc- (Damn Small Linux). World Wide Web electronictory material (and thus easy to relate to theory) - and can publication, http://damnsmalllinux.org/, Lastbe practically implement to serve a purpose, already known Accessed: 12 April, 2009. DSL (Damn Small Linux)from a user perspective. So in spite of the obsolescence of homepage.ISA, this design can still be useful educationally - consider [5] D. Delorie. DJGPP - Homepage. World Wide Webthat 8255, used as a central component of the now obsolete electronic publication,parallel PC port, in modern times finds implementation as http://www.delorie.com/djgpp/, Last Accessed: 12part of VLSI circuits; similarly address decoders and similar April, 2009.logic circuits are likely to be found as components in FPGA [6] etherboot.org. start - Etherboot/gPXE Wiki. Worlddesign. One positive point of using discrete components in Wide Web electronic publication,the card implementation, is the possibility to measure their http://etherboot.org/wiki/index.php, Last Accessed:signals individually with an oscilloscope and thus observe 12 April, 2009.the interdependence of different signals on the physical, elec- [7] groups.google.com. Problem with tight kbhit() loop -tric level - something that becomes arguably difficult, if the comp.os.msdos.djgpp. World Wide Web electroniccomponents are part of a single VLSI chip. publication, http://groups.google.com/group/comp.os.msdos.- djgpp/browse thread/thread/18aa27bae2b98485/-7. CONCLUSION cecf3d9dfed4ee28, Last Accessed: 12 April, 2009. In conclusion, the project managed to demonstrate the forum post.possibility to use analog switches, for software controlled by- [8] M. H. Puts, J. Pokorny, J. Quinlan, and L. Glennie.pass of input filters of a sound-card device; thereby, in princi- Audiophile hardware in vision science; the soundcardple, allowing it to interface with generic sensors that produce as a digital to analog converter. Journal ofDC-offset voltages. However, claims cannot be made on the Neuroscience Methods, 142(1):77–81, 2005.feasibility of implementing such a change in an existing com- [9] P. Horowitz and W. Hill. Microprocessor Supportmercial sound-card design. The project also illustrated the Chips. In The Art of Electronics. Cambridgespecific problems encountered with usage of a card design for University Press, 1989.the now obsolete ISA bus; while demonstrating how it can [10] K. Jo. Audio Interface as a Device for Physicalbe used to emulate modern hardware (at least to a degree, Computing. Proceedings of Audio Mostly 2008 - asufficient to expose the problem at hand). Additionally, the Conference on Interaction with Sound, pages 123–127,simplified analysis of particular issues, aims to serve as an 2008. Also ateducational introductory example for designers starting with http://www.jojporg.dreamhosters.com/public dav/-digital hardware design; in line with this aspect, the source paper/audiomostly08-audiointerface-jo.pdf.files for schematics and code, as well as the full list of on- [11] S. Kartadinata. The Gluion advantages of anline references (too numerous to include here) relevant to FPGA-based sensor interface. In Proceedings of thethe topic discussed in this paper, is provided on the project 2006 conference on New interfaces for musicalwebpage [16]. expression, pages 93–96. IRCAM-Centre Pompidou nents that would allow the card to receive data from the PC Paris, France, France, 2006. quickly, store this data in memory, and eventually control its [12] N. Leroy, E. Fl´ty, and F. Bevilacqua. Reflective e reproduction on the DAC chip; however, such a data trans- optical pickup for violin. In Proceedings of the 2006 fer implies use of a direct memory access (DMA) method, an alternative to the PIO method. conference on New interfaces for musical expression,15 Although, historic compilers and DJGPP still support them, pages 204–207. IRCAM-Centre Pompidou Paris, and a workaround is possible using a commercial library France, France, 2006. NTPort [29]. [13] F. Looft. Isa bus - a brief description and io device16 (WDK, earlier known as DDK) design. World Wide Web electronic publication,
  11. 11. http://web.archive.org/web/20070222231336/- Last Accessed: 12 April, 2009. http://ece.wpi.edu/∼wrm/Courses/EE3803/Labs/isa/, [27] www.pcguide.com. Programmed I/O (PIO) Modes. Last Accessed: 12 March, 2009. Last Modified: World Wide Web electronic publication, 03/23/1997 01:43:54. http://www.pcguide.com/ref/hdd/if/ide/modesPIO-[14] S. Molloy. How to Modify a PC Sound Card to Allow c.html, Last Accessed: 12 April, D.C. Voltage Measurements. World Wide Web 2009. electronic publication, [28] www.plop.at. PLoP - Home. World Wide Web http://web.archive.org/web/20080108175023/- electronic publication, http://www.plop.at/, Last http://www.mandanet.net/adc/adc.shtml, Last Accessed: 12 April, 2009. Accessed: 7 April, 2009. [29] www.zealsoftstudio.com. NTPort Library - Inport,[15] D. Nacapricha, N. Amornthammarong, Outport, Inp, Outp functions, direct I/O ports access. K. Sereenonchai, P. Anujarawat, and P. Wilairat. Low World Wide Web electronic publication, cost telemetry with PC sound card for chemical http://www.zealsoftstudio.com/ntport/, Last analysis applications. Talanta, 71(2):605–609, 2007. Accessed: 12 April, 2009.[16] name(s) omitted for submission. Extending isa soundcard webpage. World Wide Web electronic publication, http://link.omitted.for.submission, Last Accessed: 20 March, 2009. Last Modified: 03/20/2009 08:27:02.[17] K. Reddy, J. Bai, B. George, N. Mohan, and V. Kumar. Virtual Instrument for the Measurement of Haemo-dynamic Parameters Using Photoplethysmograph. Proc 23rd Int ConfIEEE, IMTC-2006, pages 1167–1171, 2006.[18] J. D. Reeder. Tutorial - controlling the real world with computers. World Wide Web electronic publication, http://learn-c.com/, Last Accessed: 12 March, 2009. Last Modified: 03/21/2005 22:53:00.[19] D. Roberts. Dr. Dobb’s - Direct Port I/O and Windows NT. World Wide Web electronic publication, http://www.ddj.com/184409876?pgno=3, Last Accessed: 12 April, 2009.[20] T. Savell. 23.3 Digital Audio Processors for Personal Computer Systems. Linear Algebra and Ordinary Differential Equations, 1993.[21] technet.microsoft.com. Inside Windows NT High Resolution Timers. World Wide Web electronic publication, http://technet.microsoft.com/en- us/sysinternals/bb897569.aspx, Last Accessed: 12 April, 2009.[22] tftpd32.jounin.net. TFTPD32 : an opensource TFTP server/service for windows : TFTP server. World Wide Web electronic publication, http://tftpd32.jounin.net/, Last Accessed: 12 April, 2009.[23] B. Trumbic. How to make your own at card. World Wide Web electronic publication, http://web.archive.org/web/20011008162116/- http://www.fesb.hr/∼btrumbic/atcardTR12.htm, Last Accessed: 12 March, 2009. Last Modified: 02/23/1998 13:29:28.[24] www.maxim ic.com. APPLICATION NOTE 3979 - Overview of DirectDrive R Technology. World Wide Web electronic publication, http://www.maxim- ic.com/appnotes.cfm/an pk/3979/, Last Accessed: 12 April, 2009.[25] www.neonbox.org. nanobox linux. World Wide Web electronic publication, http://www.neonbox.org/nanobox/index.html, Last Accessed: 12 April, 2009. home page.[26] www.nu2.nu. BFD - Build Floppy Disk. World Wide Web electronic publication, http://www.nu2.nu/bfd/,

×