mb808
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
mb808 [2006/09/05 19:38] – moogah | mb808 [2011/09/13 12:34] (current) – Removed Spam gslug | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ====== Summary ====== | ||
+ | |||
+ | This page is to describe the operation of the MB808 Sequencer application. | ||
+ | |||
+ | Forum Thread: http:// | ||
+ | |||
+ | 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. | ||
+ | |||
+ | ==== Features ==== | ||
+ | This is a list of planned features. | ||
+ | * Standard 16 step editing format. | ||
+ | * 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. | ||
+ | * 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. | ||
+ | * 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. | ||
+ | |||
+ | ==== Description of the interface ==== | ||
+ | |||
+ | There are 36 elements to the MB808 interface. | ||
+ | * 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. | ||
+ | |||
+ | ==== 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. | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |Pattern Play| | ||
+ | |GP# | ||
+ | |Default|Bank 1|Bank 2|Bank 3|Bank 4|Bank 5|Bank 6|Bank 7|Bank 8|Pattern 1|Pattern 2|Pattern 3|Pattern 4|Pattern 5|Pattern 6|Pattern 7|Pattern 8| | ||
+ | |F2|Forward|Backward|Ping Pong|Random|BPM / 1|BPM / 2|BPM / 4|BPM / 8|BPM / 16|BPM / 32|BPM / 64||| | ||
+ | |||
+ | |Pattern Edit| | ||
+ | |GP# | ||
+ | |Default|Step 1|Step 2|Step 3|Step 4|Step 5|Step 6|Step 7|Step 8|Step 9|Step 10|Step 11|Step 12|Step 13|Step 14|Step 15|Step 16| | ||
+ | |F1|BD|SD|LT/ | ||
+ | |F2|Forward|Backward|Ping Pong|Random|BPM / 1|BPM / 2|BPM / 4|BPM / 8|BPM / 16|BPM / 32|BPM / 64| | ||
+ | |||
+ | |Song Play| | ||
+ | |GP# | ||
+ | |Default|Song 1|Song 2|Song 3|Song 4|Song 5|Song 6|Song 7|Song 8|Song 9|Song 10|Song 11|Song 12|Song 13|Song 14|Song 15|Song 16| | ||
+ | |F1|Position 1|Position 2|Position 3|Position 4|Position 5|Position 6|Position 7|Position 8|Position 9|Position 10|Position 11|Position 12|Position 13|Position 14|Position 15|Position 16| | ||
+ | |||
+ | |Song Edit| | ||
+ | |GP# | ||
+ | |Default|Bank 1|Bank 2|Bank 3|Bank 4|Bank 5|Bank 6|Bank 7|Bank 8|Pattern 1|Pattern 2|Pattern 3|Pattern 4|Pattern 5|Pattern 6|Pattern 7|Pattern 8| | ||
+ | |F1|Position 1|Position 2|Position 3|Position 4|Position 5|Position 6|Position 7|Position 8|Position 9|Position 10|Position 11|Position 12|Position 13|Position 14|Position 15|Position 16| | ||
+ | |F2|Part 1|Part 2|Part 3|Part 4|Part 5|Part 6|Part 7|Part 8| | ||
+ | |||
+ | |Mute Play| | ||
+ | |GP# | ||
+ | |Default|BD|SD|LT/ | ||
+ | |F1|Group 1|Group 2|Group 3|Group 4|Group 5|Group 6|Group 7|Group 8|Group 9|Group 10|Group 11|Group 12|Group 13|Group 14|Group 15|Group 16| | ||
+ | |||
+ | |||
+ | |Global Functions| | ||
+ | |GP# | ||
+ | |F3|Bank 1|Bank 2|Bank 3|Bank 4|Bank 5|Bank 6|Bank 7|Bank 8|Pattern 1|Pattern 2|Pattern 3|Pattern 4|Pattern 5|Pattern 6|Pattern 7|Pattern 8| | ||
+ | |F4|Next bar|Next quart.|Next 8th|Next 16th||Clear Patt|Clear Track|Copy Track|Copy Patt |Paste|Save|MIDI |SysEx| | ||
+ | |||
+ | |Button|Loop|Fwd|Rwd|Stop |Play|Tap|Ins. Select|Datawheel| | ||
+ | |Pattern Play|Set loop points|Next MetaBank|Prev MetaBank|Stop |Play|Tap|Ins. Select| | ||
+ | |Pattern Edit|Set loop points|Next Bar|Prev Bar|Stop |Play|Audition|Ins Select|Meter| | ||
+ | |Song Play|latch loop|Next Pos.|Prev Pos|Stop |Play|Tap|Ins. Select| | ||
+ | |Song Edit|Jump point|Next MetaBank|Prev MetaBank|Stop |Play|Tap|Ins. 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, | ||
+ | |||
+ | 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. | ||
+ | * 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: " | ||
+ | '' | ||
+ | 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 " | ||
+ | * 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. | ||
+ | * 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. | ||
+ | Spend some time reading that file until you get a grasp of it's premise. | ||
+ | * 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. | ||
+ | * 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]. | ||
+ | |||
+ | '' | ||
+ | ;; 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 | ||
+ | ;; | ||
+ | ;; --------------------------------------------------------------------------'' | ||