Схема памяти 80Kb

+-----------------------------------+
|           80K RAM LAYOUT          |
+-------+-------------------+-------+
| ADDR  | INFO              | SIZE  |
+-------+-------------------+-------+
| 00000 | SCREEN            | 16320 | 240x136 = 32640 4bit pixels
| 03FC0 | PALETTE           | 48    | 16 x 24bit RGB color values
V 03FF0 | PALETTE MAP       | 8     | 16 x 4bit color indexes
R 03FF8 | BORDER COLOR      | 1     | 4bit color value
A 03FF9 | SCREEN OFFSET     | 2     | horz/vert screen offset [-127...+127]
M 03FFB | GAMEPAD MASK      | 1     | 
| 03FFC | GAMEPAD STATE     | 2     | x 2 gamepads, 1bit for UP DOWN LEFT RIGHT A B X Y
| 03FFE | ...               | 2     |
+-------+-------------------+-------+
| 04000 | SPRITES           | 16384 | 256 8x8 4bit sprites
| 06000 | TILES             | 16384 | 256 8x8 4bit bg tiles
| 08000 | MAP               | 32640 | 240x136 map cells
| 0FF80 | PERSISTENT MEMORY | 28    |
| 0FF9C | SOUND REGISTERS   | 72    | ...
| 0FFE4 | WAVEFORMS         | 256   | 16 waveforms, each 32 x 4bit values
| 100E4 | SFX               | 4224  | ...
| 11164 | MUSIC PATTERNS    | 11520 | ...
| 13E64 | MUSIC TRACKS      | 408   | ...
| 13FFC | MUSIC POS         | 4     | ...
| 14000 | ...               | 0     |
+-------+-------------------+-------+


+-----------------------+
|    SOUND REGISTER     |
+-----------+-----------+
| frequency | 12bit     | x 4 channels = 72 bytes
| volume    | 4bit      |
| waveform  | 32 x 4bit |
+-----------+-----------+


+--------------------------+
|           SFX            |
+--------------------------+
|                          |
| +----------+------+      |
| | volume   | 4bit |      |
| | wave     | 4bit | x 30 |
| | arpeggio | 4bit |      |
| | pitch    | 4bit |      |
| +----------+------+      |
|                          |
| +----------+------+      |
| | octave   | 3bit |      | x 64 = 4224 bytes
| | pitch16x | 1bit |      |
| | speed    | 3bit |      |
| | reverse  | 1bit |      |
| | note     | 4bit |      |
| | temp     | 4bit |      |
| +----------+------+      |
|                          |
| +--------------+         |
| |     LOOP     |         |
| +-------+------+ x 4     |
| | start | 4bit |         |
| | size  | 4bit |         |
| +-------+------+         |
|                          |
+--------------------------+


+------------------------+
|      MUSIC PATTERN     |
+------------------------+
|                        |
| +---------------+      |
| |  PATTERN ROW  |      |
| +--------+------+      |
| | note   | 4bit |      |
| | volume | 4bit |      |
| | param  | 4bit | x 64 | x 60 = 11520 bytes
| | effect | 3bit |      |
| | sfx    | 6bit |      |
| | octave | 3bit |      |
| +--------+------+      |
|                        |
+------------------------+


+----------------------------+
|        MUSIC TRACK         |
+----------------------------+
|                            |
| +------------+------+      |
| | pattern #0 | 6bit |      |
| | pattern #1 | 6bit | x 16 |
| | pattern #2 | 6bit |      |
| | pattern #3 | 6bit |      |
| +------------+------+      | x 8 = 408 bytes
|                            |
| +-------+------+           |
| | tempo | 8bit |           |
| | rows  | 8bit |           |
| | speed | 8bit |           |
| +-------+------+           |
|                            |
+----------------------------+

+-----------------+
|     MUSIC POS   |
+-------+---------+
| track | 8bit    |
| frame | 8bit    |
| row   | 8bit    |
+-------+---------+
|                 | = 4 bytes
| +-------------+ |
| |    FLAGS    | |
| +------+------+ |
| | loop | 1bit | |
| | ...  | 7bit | |
| +------+------+ |
|                 |
+-----------------+

empty waveform generates noise by default
you can update Sound Registers every tick (60 times per second)

to read frequency and volume use the following code:
...
value = peek(0xFF9C+18*channel+1)<<8|peek(0xFF9C+18*channel)
frequency = (value&0x0fff)
volume = (value&0xf000)>>12
...

results matching ""

    No results matching ""