User Tools

Site Tools


mb808

Summary

This page is to describe the operation of the MB808 Sequencer application. It is a work in progress, comments are welcome and usually appreciated :)

Forum Thread: http://www.midibox.org/forum/index.php?topic=7391.0

This document is split into 3 sections:

  • Application Summary
  • Operation Manual
  • Technical details

Application Summary

This application is not meant to be part of a modular system or even a standalone box, it's origins are a simple adaptation of the MBSEQ v2.4 application to mimic to functionality of the original 808's digital section. As such the primary task for this application is to provide 13 editable tracks to cover the 12 instruments + accent data and to create the proper pulse signals for the inputs of the instruments. However, MBSEQ v2.4 is a very deep application and it would be a shame to ignore many it's features so the secondary task is to create an interface using the available buttons and encoders that can access as many menu functions as possible, without making the whole thing obscure. Remember, this is a drummachine first, sequencer second :)

Features

This is a list of planned features. Certian to be changed over time.

  • Standard 16 step editing format. Accent on it's own “track”.
  • Variable pattern length from 1-32 steps
  • Pattern chains can be created in song mode
  • All track parameters available to the SEQ V2.4 application in drum mode will be available. The plan is to support all track parameters of SEQ v3
  • Edit mode can be toggled on and off in realtime
  • Song mode will be as robust as the interface allows
  • Support for LCD's will be kept in software
  • 8 banks with 8 patterns each
  • Each pattern will have A and B variations that can be switched between or morphed between with dedicated controlls
  • Save, Copy, Paste and Clear operations. One level of undo would be sweet.
  • Dedicated tempo encoder
  • Dedicated tap tempo button

Theory of operation

The MB808 application will essentially be unchanged from the SEQ v2.4 application and I hope to create an adaptation of the V3 which keeps all the best features for a drum sequencer. The changes that will be made reguard the interface, specifically the LCD screen and encoders will not be present by default, but will still be supported in software. At this time I also think it is best to use TK's drummode for the operation of the sequencer. Although this prevents each step from having it's own flam value, what we gain is much more than what we lose. Firstly using drum mode gives us 12 instrument tracks + accent all in one pattern as opposed to re-working the handling of the pattern sets to allow the use of 12 complete tracks, this keeps things compatible with the base application and hopefully with the upcoming SEQv3 application :) Using drum mode also allows us to use the morph feature, but in a way that mimics the original 808, where each pattern had A and B variations that could be chained together. Instead of accessing 16 banks of 8 patterns the interface and some of the functionality will be modified so that there are only 8 banks of 8 patterns, the remaining 8 banks will become the “B” variations for those patterns. This will take a bit of trickery in code to keep things compatible, so it may not be implemented in the first version. The GP buttons will retain their default function for each mode, but will gain additional functionality through the use of 4 extra menu shortcut buttons (F1-F4) which will allow the user to select a menu, set the cursor position and enter a value without needing a screen. Accessing the 4 additional menus is a matter of holding one of the menu keys down, at which point the 16 GP Led's will display information about the menu page and paramters represented. Once a parameter has been entered the menu can be automatically exited, or the application could simply wait until the menu key has been released. The Select and Exit buttons are still present on the layout, but at this time it is a bit unclear what their function will be. The metronome feature will not be so readily accessable and will instead be replaced by a dedicated button for tap tempo. A dedicated tempo encoder will also be included.

Description of the interface

There are 36 elements to the MB808 interface. They are:

  • 16 GP buttons
  • 4 Menu buttons (m1 - m4)
  • 4 Mode buttons (Song, Pattern, Mute, Edit)
  • 2 Variation buttons (A, B)
  • 5 Transport controls (Play, Stop, Fwd, Rwd, Loop)
  • 2 Control buttons (Select, Exit)
  • Instrument Encoder
  • Tempo encoder
  • Swing/Morph pot

Operation Manual

NOTE: this is still a hypothetical interface. The changes reguarding V3 are not represented here and this is really just to show how the F buttons can be used as menu buttons to reduce dependancy on an LCD screen.

Modes of operation

The MB808 application has 5 different modes that it can operate in, they are:

  • Song Play
  • Song Edit
  • Pattern Play
  • Pattern Edit
  • Mute

In each mode the 16 GP buttons have a different function and each mode has it's own set of menus accessed with the menu buttons. The operation of the 16 GP's for each mode and menu are described below

Pattern Play
GP#GP1GP2GP3GP4GP5GP6GP7GP8GP9GP10GP11GP12GP13GP14GP15GP16
DefaultBank 1Bank 2Bank 3Bank 4Bank 5Bank 6Bank 7Bank 8Pattern 1Pattern 2Pattern 3Pattern 4Pattern 5Pattern 6Pattern 7Pattern 8
F2ForwardBackwardPing PongRandomBPM / 1BPM / 2BPM / 4BPM / 8BPM / 16BPM / 32BPM / 64
Pattern Edit
GP#GP1GP2GP3GP4GP5GP6GP7GP8GP9GP10GP11GP12GP13GP14GP15GP16
DefaultStep 1Step 2Step 3Step 4Step 5Step 6Step 7Step 8Step 9Step 10Step 11Step 12Step 13Step 14Step 15Step 16
F1BDSDLT/LCMT/MCHT/HCCPMARS/CLCBCYOHCHControl 1Control 2Control 3Control 4
F2ForwardBackwardPing PongRandomBPM / 1BPM / 2BPM / 4BPM / 8BPM / 16BPM / 32BPM / 64
Song Play
GP#GP1GP2GP3GP4GP5GP6GP7GP8GP9GP10GP11GP12GP13GP14GP15GP16
DefaultSong 1Song 2Song 3Song 4Song 5Song 6Song 7Song 8Song 9Song 10Song 11Song 12Song 13Song 14Song 15Song 16
F1Position 1Position 2Position 3Position 4Position 5Position 6Position 7Position 8Position 9Position 10Position 11Position 12Position 13Position 14Position 15Position 16
Song Edit
GP#GP1GP2GP3GP4GP5GP6GP7GP8GP9GP10GP11GP12GP13GP14GP15GP16
DefaultBank 1Bank 2Bank 3Bank 4Bank 5Bank 6Bank 7Bank 8Pattern 1Pattern 2Pattern 3Pattern 4Pattern 5Pattern 6Pattern 7Pattern 8
F1Position 1Position 2Position 3Position 4Position 5Position 6Position 7Position 8Position 9Position 10Position 11Position 12Position 13Position 14Position 15Position 16
F2Part 1Part 2Part 3Part 4Part 5Part 6Part 7Part 8
Mute Play
GP#GP1GP2GP3GP4GP5GP6GP7GP8GP9GP10GP11GP12GP13GP14GP15GP16
DefaultBDSDLT/LCMT/MCHT/HCCPMARS/CLCBCYOHCHControl 1Control 2Control 3Control 4
F1Group 1Group 2Group 3Group 4Group 5Group 6Group 7Group 8Group 9Group 10Group 11Group 12Group 13Group 14Group 15Group 16
Global Functions
GP#GP1GP2GP3GP4GP5GP6GP7GP8GP9GP10GP11GP12GP13GP14GP15GP16
F3Bank 1Bank 2Bank 3Bank 4Bank 5Bank 6Bank 7Bank 8Pattern 1Pattern 2Pattern 3Pattern 4Pattern 5Pattern 6Pattern 7Pattern 8
F4Next barNext quart.Next 8thNext 16thClear PattClear TrackCopy TrackCopy Patt PasteSaveMIDI SysEx
ButtonLoopFwdRwdStop PlayTapIns. SelectDatawheel
Pattern PlaySet loop pointsNext MetaBankPrev MetaBankStop PlayTapIns. Select
Pattern EditSet loop pointsNext BarPrev BarStop PlayAuditionIns SelectMeter
Song Playlatch loopNext Pos.Prev PosStop PlayTapIns. Select
Song EditJump pointNext MetaBankPrev MetaBankStop PlayTapIns. Select

Technical Details

There are 3 main components to this modification:

  • The sequencer needs to output 1ms active high pulses to the gate inputs of the 12 instruments and a 1ms active low pulse to the common trig circuitry which creates the accent signal.
  • The interface needs to be modified so that the LCD and datawheel are not neccessary
  • Special functions need to be added to the application to steamline operation

Connecting with the analog circuits

The 808's instruments are all comprised of a combination of twin-t oscillators, a noise source and simple VCA's. Both the twin-t and the envelope take a breif pulse of varying amplitude to trigger and set the amplitude and each of the 808's instruments have a AND gate made up of 2 transistors to interface with the digital controller. These AND gates have inputs for 2 signals, called common trig and instrument data. Each instrument has it's own data line but there is only one common trig which is shared by all instruments. The common trig signal is active high for 1ms in synchronization with the master clock. Each instrument data signal is a 5v active high 1ms pulse which is only present when that instrument should be triggered. The AND gate insures that both signals are present before sounding an instrument. Creating the instrument data signal is easy using MB hardware, a DOUT pin does the job nicely. Altering the code to flash a DOUT pin on a note event is fairly simple as well. The common trig signal is a little more complicated. The accent data, which is a voltage between 5v and 15v is also represented in the common trig signal. As such it is the pulse present on the common trig input that triggers the instrument while the instrument data signal insures the instrument is only triggered at the right step. Luckily the accent signal only needs two states, on and off, where off is always 5v and on is a higher voltage determined by a potentiometer. Now, this could be be done with a logic switch like the 4016 or 4066, using a DOUT pin to toggle between connecting the common trig line to 5v or the wiper of the accent pot. However, looking over the schematics I've found an even simpler way that only needs a couple transistors. The concept is simple, we still use a pot connected as a voltage divider between the 5v and 15v rails to get our accent voltage but a simple transistor can be used to shunt the voltage of the wiper to the 5v rail when it is turned on. If we invert the common trig signal in code so that it is active low we only need the single transistor ;) It should be noted that the original schematic has 2 47uF capacitors as local resoviors for the common trig line. Testing on the beta unit showed that the current draw on the common trig line could sometimes be high enough that these caps are needed to keep the voltage from sagging.

Now, in the original, the common trig pulsed on every clock tick. This isn't neccessary, instead the common trig line will only be pulsed when a note on occurs.

Modifying the interface

In order to get the most out of the SEQ application without using a datawheel or an LCD and without risking becoming totally incompatible with future versions I decided it was best to use the 4 function buttons to create additional layers of menu shortcuts. In order to do this I need to modify the code in each of the “F” buttons handlers. These can be found starting on line 681 of seq_buttons.inc. First I cleared out the code that was in there. Now, the simplest way to do this is to set a bit representing when one of the menu buttons is pressed. Since I want them all to be momentary I can then simply clear the bit when the button is released. Code will be needed to be sure that only one bit is set at a time as it makes no sense to edit multiple menu's at once. Now, in order to turn these button presses into additional menu shortcuts the operation of the GP's need to be overloaded with 4 additional cases represented by the bits in the “current_menu” register. Since the operation of the GP buttons and the menus is not exactly straight forward care needs to be taken so that the normal operation of the SEQ application is not interrupted. SO, how, exactly do the GP menu shortcuts work?

  • Once a DIN event has been determined to have come from one of the two SR's assigned to be the GP buttons SEQ_GP_Button [21] is called.
  • In SEQ_GP_Button [21] the application can branch to 3 different places.
  • If Menu mode is active (the menu button is pressed) than the app branches to SEQ_GP_Mode4_Button [240]

This is done using one of TK's macros: “BIFSET” which checks if a specified bit in a specified register is set and then branches to a specified function if it is. The register is SEQ_MODE0, the bit for Menu mode is SEQ_MODE0_MENU. The line of code:

''BIFSET	SEQ_MODE0, SEQ_MODE0_MENU, BANKED, rgoto SEQ_GP_Mode4_Button''.  

The functionality we want to add is very similar to the Menu shortcut mode, but lets not jump there just yet, there is more to learn right here.

  • SEQ_GP_Button then checks to see if a “callback hook” has been installed. I am not 100% clear on the function of the callback hook, when and why it is installed, but if it is not installed the application will end up branching to either Step edit mode or song mode.
  • If the hook has been installed than the application branches to CS_MENU_ExecMenuGPCallbackHook [502]
  • Once the application has branched to this point it begins dealing with the minutia of navigating the menu and handling the LCD. Since there are many technical considerations to these processes which will not be immediatly obvious we are going to start with a higher level analysis of how the menus are mapped and how parameters are accessed, edited and stored. Once we understand that we can isolate the functions we are most interested in.
  • The menus are implemented through a table of function pointers that are retrived through an index which is determined by the context of the mode and GP button number. You can see the menu tables in cs_menu_tables.inc

Spend some time reading that file until you get a grasp of it's premise. Menus are created and navigated by indexing through a matrix of function pointers. Take note of some parameters from cs_menu.inc:

  • CS_MENU_CURSOR_POS
  • CS_MENU_POS
  • CS_MENU_NEW_POS
  • CS_MENU_ENTRIES
  • CS_STAT

Let's allow that to sink in for awhile.

  • Next we want to know how parameters are modified. From the operation of the SEQ we know that the navigation functions (Right, Left, Datawheel, Select, Exit) are used to select a parameter within a menu and then the Datawheel and Right/Left buttons can increment it's value. Browsing through cs_menu.inc we can find the following three functions which sum up these operations:
    • CS_MENU_Left [313]
    • CS_MENU_Right [320]
    • CS_MENU_Enc [328]
  • Each one of these functions places a value in WREG (CS_MENU_Enc already has the encoder direction in WREG) and then calls CS_MENU_AddMenuParameter [573]. From the comments:
''--------------------------------------------------------------------------
;;  This function adds WREG to CS_MENU_PARAMETER_[LH] and saturates
;;  if the max value has been reached
;;  IN: add value in WREG
;;  OUT: result in CS_MENU_PARAMETER_L
;;       branches to menu parameter hook and requests screen update
;; --------------------------------------------------------------------------''
mb808.txt · Last modified: 2011/09/13 12:34 by gslug