Chiptable Registers
Overview
To reduce the number of address lines required, Chiptable makes use of a
register bank. The first address ($00) selects the bank which changes
the function of the remaining 7 addresses.
| Adr | Name |
|---|---|
| $00 | Register Bank Select |
| $01 | Ext 1 |
| $02 | Ext 2 |
| $03 | Ext 3 |
| $04 | Ext 4 |
| $05 | Ext 5 |
| $06 | Ext 6 |
| $07 | Ext 7 |
Banks
- $00 = Control
- $01 = Samples
- $02 = Envelopes
- $03 = LFOs
- $04 = Mod Matrix
Control
These are the main control registers, where the assumed bulk of the interactions will be. The channel sets the channel for the remaining registers.
For instance, setting the channel to $01 and then writing a frame value would update the frame only for channel 01. Note that some of the registers in the other banks also use the currently set channel number for modifying values.
Reg File: $00
| Adr | Name | Encoding |
|---|---|---|
| $00-01 | Channel Select | Cyclic Mode: 7-6, Note On/Off/Rel (5-4), Channel: 2-0 |
| $00-02 | Patch | 7-0 |
| $00-03 | Frame Position | 7-0 |
| $00-04 | Note | Note: 7-0 |
| $00-05 | Semitone | Semitone: 7-0 |
| $00-06 | Vol | 7-0 |
| $00-07 | Glide | Rate: 7-0 |
Cyclic Modes:
- $0 = LSDJ-like frames (32 bytes/frame), cycle on
- $1 = Free frame window, cycle on
- $2 = Jumbo frame, cycle on
- $3 = Jumbo frame, cycle off
Samples
This allows writing and updated patches and the samples for each patch. Each patch contains 256 bytes worth of sample data broken up into 8 frames.
It has an auto-stride such that reading or writing to/from the sample register will increment the sample position. Once at the end, it will wrap to the beginning.
To load a full patch (either of 8 frames or off a full 256 byte sample), set the sample position to zero, and then simply write 256 bytes to the sample register.
Reg File: $01
| Adr | Name |
|---|---|
| $01-01 | Patch Number |
| $01-01 | Sample Position |
| $01-02 | Sample |
Envelopes
Reg File: $02
| Adr | Name |
|---|---|
| $02-01 | Env Number |
| $02-04 | Attack |
| $02-05 | Decay |
| $02-06 | Sustain |
| $02-07 | Release |
LFOs
The current proposal for LFOs is separate and applicable across different channel functions. Depending on how much processing power and timers are available depends on how many LFOs there can be.
Reg File: $03
| Adr | Name | Encoding |
|---|---|---|
| $03-01 | LFO Number | |
| $03-02 | LFO Type | |
| $03-03 | Cross-Mod Channel | |
| $03-04 | Frame Select / Position |
LFO Types
- 0 = Sine
- 1 = Tri
- 2 = Saw
- 3 = Square
- 4 = Random
- 5 = Cross-Mod, Aligned Frame
- 6 = Cross-Mod, Free Frame
Mod Matrix
Apply the set Env and LFO numbers ($02-01), ($03-01) to modulation targets for the set channel ($00-01).
Writing a 1 to any of the LFO|Env to Vol|Pitch bits will enable the configured LFO or ENV for that channel for the given purpose.
Reg File: $04
| Adr | Name | Encoding |
|---|---|---|
| $04-01 | Destination | LFO to Pitch (7), LFO to Volume (6), Env to Pitch (5), Env to Volume (4) |
| $04-02 | LFO Depth | Depth (6:0) |
| $04-03 | Env Speed | |
| $04-04 | Env Depth |