Announcement

Collapse

Forum etiquette

Our mission ...

This forum is part of our mission to promote the preservation of vintage computers through education and outreach. (In real life we also run events and have a museum.) We encourage you to join us, participate, share your knowledge, and enjoy.

This forum has been around in this format for over 15 years. These rules and guidelines help us maintain a healthy and active community, and we moderate the forum to keep things on track. Please familiarize yourself with these rules and guidelines.


Remain civil and respectful

There are several hundred people who actively participate here. People come from all different backgrounds and will have different ways of seeing things. You will not agree with everything you read here. Back-and-forth discussions are fine but do not cross the line into rude or disrespectful behavior.

Conduct yourself as you would at any other place where people come together in person to discuss their hobby. If you wouldn't say something to somebody in person, then you probably should not be writing it here.

This should be obvious but, just in case: profanity, threats, slurs against any group (sexual, racial, gender, etc.) will not be tolerated.


Stay close to the original topic being discussed
  • If you are starting a new thread choose a reasonable sub-forum to start your thread. (If you choose incorrectly don't worry, we can fix that.)
  • If you are responding to a thread, stay on topic - the original poster was trying to achieve something. You can always start a new thread instead of potentially "hijacking" an existing thread.



Contribute something meaningful

To put things in engineering terms, we value a high signal to noise ratio. Coming here should not be a waste of time.
  • This is not a chat room. If you are taking less than 30 seconds to make a post then you are probably doing something wrong. A post should be on topic, clear, and contribute something meaningful to the discussion. If people read your posts and feel that their time as been wasted, they will stop reading your posts. Worse yet, they will stop visiting and we'll lose their experience and contributions.
  • Do not bump threads.
  • Do not "necro-post" unless you are following up to a specific person on a specific thread. And even then, that person may have moved on. Just start a new thread for your related topic.
  • Use the Private Message system for posts that are targeted at a specific person.


"PM Sent!" messages (or, how to use the Private Message system)

This forum has a private message feature that we want people to use for messages that are not of general interest to other members.

In short, if you are going to reply to a thread and that reply is targeted to a specific individual and not of interest to anybody else (either now or in the future) then send a private message instead.

Here are some obvious examples of when you should not reply to a thread and use the PM system instead:
  • "PM Sent!": Do not tell the rest of us that you sent a PM ... the forum software will tell the other person that they have a PM waiting.
  • "How much is shipping to ....": This is a very specific and directed question that is not of interest to anybody else.


Why do we have this policy? Sending a "PM Sent!" type message basically wastes everybody else's time by making them having to scroll past a post in a thread that looks to be updated, when the update is not meaningful. And the person you are sending the PM to will be notified by the forum software that they have a message waiting for them. Look up at the top near the right edge where it says 'Notifications' ... if you have a PM waiting, it will tell you there.

Copyright and other legal issues

We are here to discuss vintage computing, so discussing software, books, and other intellectual property that is on-topic is fine. We don't want people using these forums to discuss or enable copyright violations or other things that are against the law; whether you agree with the law or not is irrelevant. Do not use our resources for something that is legally or morally questionable.

Our discussions here generally fall under "fair use." Telling people how to pirate a software title is an example of something that is not allowable here.


Reporting problematic posts

If you see spam, a wildly off-topic post, or something abusive or illegal please report the thread by clicking on the "Report Post" icon. (It looks like an exclamation point in a triangle and it is available under every post.) This send a notification to all of the moderators, so somebody will see it and deal with it.

If you are unsure you may consider sending a private message to a moderator instead.


New user moderation

New users are directly moderated so that we can weed spammers out early. This means that for your first 10 posts you will have some delay before they are seen. We understand this can be disruptive to the flow of conversation and we try to keep up with our new user moderation duties to avoid undue inconvenience. Please do not make duplicate posts, extra posts to bump your post count, or ask the moderators to expedite this process; 10 moderated posts will go by quickly.

New users also have a smaller personal message inbox limit and are rate limited when sending PMs to other users.


Other suggestions
  • Use Google, books, or other definitive sources. There is a lot of information out there.
  • Don't make people guess at what you are trying to say; we are not mind readers. Be clear and concise.
  • Spelling and grammar are not rated, but they do make a post easier to read.
See more
See less

IBM Music feature card

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

    IBM Music feature card

    The IBM Music Feature Card (IMFC) is a Yamaha FB-01 MIDI synth module with a software interface on a full-length 8-bit ISA board. It sold for ~$600 USD in 1987, and were targeted as a MIDI interface for music professionals. Sierra eventually decided to support it, and the IMFC has since then been defined as a sound-card by the vast majority of people who have heard about it.
    Only certain games made by Sierra supports the IMFC, but quite a few of the example tunes are not optimized to really take full advantage of the card's abilities. Most tunes were originally composed for the Roland MT-32, and little effort has been made to port them to the IMFC.
    Many users find the IMFC/FB-01 to sound cheesy, problably due to the nature of FM synthesisis with sinewaves at medium/high frequencies. However; if an external reverb box is applied to the output signal, it heavily improves the listening experience. Due to the nature of FM synthesisis with sinewaves at low frequencies, the FB-01 is famous for it's bass sound. The FB-01 is also famous for it's ability to produce metallic sounds.
    Several cards can be placed within the same system for more voices, but an external mixer is then required to combine the sound outputs from all the cards.
    Software Interface

    The software interface consist of two unidirectional 9-bit databusses, misc status lines, and three programable timers combined into 2 Interrupt generators. All of those functions are controlled by regular I/O ports.
    Communication

    The two databusses are used to send and receive MIDI and control commands to/from the synth module. The MIDI commands controls the audio generated, while the control commands controls the operation mode of the synth module. The status lines are used for interrupt control. This includes the error line from the synth module, and various other lines used durning data transfer.
    Timers

    The timers are used to generate interrupts at a fixed interval. Two of the timers are combined into one generator, while the remaining timer is not combined with anything. Those timers work just the same way as the 8253 in the regular PC. The timing range for the generators are from 2uS to 2147418112.5uS (35.790301875 minutes) for the two combined timers, and from 4uS to 131070uS (0.13107 seconds) for the remaining generator.
    Synth module

    The synth module is a Yamaha FB-01 MIDI synthisizer. Like the core of the IBM [wiki]PGC[/wiki], it consist of a small dedicated computer runing a predefined program stored in a ROM chip. In this case it's driven by a 6MHz Z80 CPU with it's own ROM and RAM, connected to a parallel comunications center, a serial comunications center, and the Yamaha YM2164 (OPP) FM synth chip.
    Presets

    The synth module comes preset with 5 banks of voices. Each bank contains 48 individual voices, which makes a total of 240 preset voices. In addition, there are 2 banks of (a total of 96) custom programable voices. There are 4 preset MIDI configurations, and a total of 16 custom programble configurations. All custom voices/configurations are stored in RAM, thus ereased when power is turned off.
    Communication

    There are two comunication centers in the synth module. There is a parallel center for the two unidirectional 9-bit parallel databusses used by the software interface described above, and there is a serial comunications centre used to comunicate with external MIDI devices connected through the DIN breakout box. both comunication centers leads to a pair of FIFO buffers. In "thru" mode, the FIFOs are set to directly forward MIDI commands between the parallel and serial comunication centers, and in this mode no MIDI commands are interpreted by the synth module.
    The OPP FM synth chip

    The Yamaha YM2164 FM Operator Type-P (OPP) is an 8-channel synthesizer with 4 operators per channel. It's almost identical to the YM2151, but without the noise mode for op4 of channel 8. The OPP also has some enhancements over the YM2151, most notably 128 levels of stereo in comparasion to only 3. Every channel can be arranged in 8 differnt ways, and each operator is capable of producing a sinewave. The OPP got some other functions like a Low-Frequency-Osciolator (LFO) used to modulate either the pitch (vibrato) or amplitude (tremolo). The waveform of the LFO is changeable between 4 different waveforms (one of them being the only available noise generator), and it's frequency ranges from 0.009Hz to 59Hz. The chip also got other misc functions like envelope, detune, deharmonizing, timers, etc...
    Programming

    The software interface of the card is programmable. It's done by regular I/O, and each card has 16 I/O ports mapped into the I/O-map of the host system. The base address is determined by SW1 on the IMFC.
    SW1 settings:
    Card number SW1/1 SW1/2 Base address
    N/A* Off Off 2A00*
    N/A* On Off 2A10*
    1 Off On 2A20
    2 On On 2A30

    (* Theoretcally most logical option; no data is present in the manual about this)
    Registers

    The 16 I/O ports on the card is the only way the host computer can comunicate with the card, through 10 8-bit registers.
    I/O ports:
    Offset Register
    0 PIU0
    1 PIU1
    2 PIU2
    3 PCR
    4 CNTR0
    5 CNTR1
    6 CNTR2
    7 TCWR
    8 TCR
    9-B TCR mirror
    C TSR
    D-F TSR mirror
    Parallel Interface Unit (PIU)

    The function of this unit is roughly described above. On reads and writes, bit 8 is used to indicate if the data sent is MIDI/non-MIDI data (0) or a special Music-Card message (1). On writes, bit 7 is used to indicate if it's a status command (1) or data following a previous sent status command (0).
    PIU0 - Read only
    +-+-+-+-+-+-+-+-+
    |7|6|5|4|3|2|1|0|
    +-+-+-+-+-+-+-+-+
    ^ ^ ^ ^ ^ ^ ^ ^
    | | | | | | | |
    +-+-+-+-+-+-+-+-> Bit 0-7 of data sent from the synth module to the host computer
    Bit 7 of PIU2 should be read before reading from this register

    PIU1 - Write only
    +-+-+-+-+-+-+-+-+
    |7|6|5|4|3|2|1|0|
    +-+-+-+-+-+-+-+-+
    ^ ^ ^ ^ ^ ^ ^ ^
    | | | | | | | |
    +-+-+-+-+-+-+-+-> Bit 0-7 of data sent from the host computer to the synth module
    Bit 4 of TCR should be written before writing to this register

    PIU2 - Read only
    +-+-+-+-+-+-+-+-+
    |7|6|5|4|3|2|1|0|
    +-+-+-+-+-+-+-+-+
    ^ ^ ^ ^ ^
    | | | | |
    | | | | +-> Transmitter ready (TxRDY)
    | | | +
    -> TxRDY interrupt enabled status (WIE)
    | | +
    ---> Receiver ready (RxRDY)
    | +

    -> RxRDY interrupt enabled status (RIE)
    +


    ---> Bit 8 of data sent from the synth module to the host computer

    PCR - Write only
    +-+-+-+-+-+-+-+-+
    |7|6|5|4|3|2|1|0|
    +-+-+-+-+-+-+-+-+
    ^ ^ ^ ^ ^ ^ ^ ^
    | | | | | | | |
    v v v v v v v v
    0 0 0 0 0 1 0 0 -> Disable interrupt on TxRDY
    0 0 0 0 0 1 0 1 -> Enable interrupt on TxRDY
    0 0 0 0 1 0 0 0 -> Disable interrupt on RxRDY
    0 0 0 0 1 0 0 1 -> Enable interrupt on RxRDY
    1 0 1 1 1 1 0 0 -> Initialize PUI
    Programmable Interval Timer (PIT)

    The IMFC contains an Intel 8253-compatible general purpose timing device to generate interrupts at a fixed rate. Counter 0 is used as timer A, while counter 1 (sourced by counter 2) is used as timer B. Both counter 0 and 1 should be set to mode 2, while counter 2 should be set to mode 3. See the Intel 8253 datasheet for more details.
    CNTR0
    +-+-+-+-+-+-+-+-+
    |7|6|5|4|3|2|1|0|
    +-+-+-+-+-+-+-+-+
    ^ ^ ^ ^ ^ ^ ^ ^
    | | | | | | | |
    +-+-+-+-+-+-+-+-> Frequency divisor for counter 0 (source: 500KHz)

    CNTR1
    +-+-+-+-+-+-+-+-+
    |7|6|5|4|3|2|1|0|
    +-+-+-+-+-+-+-+-+
    ^ ^ ^ ^ ^ ^ ^ ^
    | | | | | | | |
    +-+-+-+-+-+-+-+-> Frequency divisor for counter 1 (source: timer 2 output)

    CNTR2
    +-+-+-+-+-+-+-+-+
    |7|6|5|4|3|2|1|0|
    +-+-+-+-+-+-+-+-+
    ^ ^ ^ ^ ^ ^ ^ ^
    | | | | | | | |
    +-+-+-+-+-+-+-+-> Frequency divisor for counter 2 (source: 2MHz)

    TCWR
    +-+-+-+-+-+-+-+-+
    |7|6|5|4|3|2|1|0|
    +-+-+-+-+-+-+-+-+
    ^ ^ ^ ^ ^ ^ ^ ^
    | | | | | | | |
    +-+-+-+-+-+-+-+-> Timer control (see Intel 8253 datasheet for details)
    Total control

    The total control registers are used to manage the interrupt flags of the software interface.
    TCR - Write only
    +-+-+-+-+-+-+-+-+
    |7|6|5|4|3|2|1|0|
    +-+-+-+-+-+-+-+-+
    ^ ^ ^ ^ ^ ^ ^
    | | | | | | |
    | | | | | | +-> Timer A Interrupt clear (/TAC, active low)
    | | | | | +---> Timer B Interrupt clear (/TBC, active low)
    | | | | +
    -> Timer A Interrupt enable (TAE)
    | | | +
    ---> Timer B Interrupt enable (TBE)
    | | +

    -> Bit 8 of data sent from the host computer to the synth module
    | +


    -> Global Interrupt enable (/TMSK)
    +


    ---> Enable IRQ output (IBE)

    TSR - Read only
    +-+-+-+-+-+-+-+-+
    |7|6|5|4|3|2|1|0|
    +-+-+-+-+-+-+-+-+
    ^ ^ ^
    | | |
    | | +-> Timer A Interrupt status (TAS)
    | +---> Timer B Interrupt status (TBS)
    +


    ---> Global Interrupt status (TCS)
    [wiki]Category:ISA cards[/wiki]
    The Vintage Computer and Gaming Marketplace
    The Vintage Computer

    #2
    Originally posted by Erik View Post
    The IBM Music Feature Card (IMFC) is a Yamaha FB-01 MIDI synth module..
    So are you quoting from an IBM tech ref? Or is it from a wiki?

    I think I recently came across a Music Feature tech ref, but since it is ISA, it is not my cuppa Joe.

    Somehow, $70 sticks in my head...

    Comment


      #3
      The tech ref has been dumped already: ftp://ftp.oldskool.org/pub/drivers/IBM/IMFC/
      Offering a bounty for:
      - A working Sanyo MBC-775 or Logabax 1600
      - Music Construction Set, IBM Music Feature edition (has red sticker on front stating IBM Music Feature)

      Comment


        #4
        The IBM Music Feature Card (IMFC) is a Yamaha FB-01 MIDI synth module with a software interface on a full-length 8-bit ISA board.
        The IBM Music Feature Card is *almost* a Yamaha FB-01 MIDI synth module.
        They both use the same basic hardware, but the firmware in the IMFC is slightly different, leading to some slight differences in the default configuration of instruments, and the IMFC also supports some SysEx commands that the FB-01 does not (however, these can be translated to FB-01 compatible ones).
        http://scalibq.wordpress.com/just-ke...o-programming/

        Comment


          #5
          I don't know if anyone had tested this already, but i finally got time and checked the undocumented I/O port selections.

          Turns out that SW1 when in OFF OFF positions actually decodes port 2A40h not 2A00h. So logically i tested the next ON OFF position and it is 2A50h.

          Sorry for the necro, but this is relevant information i think.

          I should add that this was tested on a old IBM MFC, the one with the EPROM instead of the new revision found with a mask ROM instead.

          Comment

          Working...
          X