User Tools

Site Tools


musiccode

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

musiccode [2025/01/28 00:15] – created gbbmusiccode [2025/01/28 00:17] (current) gbb
Line 1: Line 1:
 Make sure to set the magic value in vector table : Make sure to set the magic value in vector table :
  
 +<code>
 #include <stdint.h> #include <stdint.h>
  
Line 85: Line 85:
     // Reserved     // Reserved
     RESERVED, RESERVED     RESERVED, RESERVED
 +};
 +</code>
 +
 +Code for playing music
 +<code>
 +#include <stdint.h>
 +#include "loopy.h"
 +#include "tracksong2.h"
 +
 +volatile void (*BiosVsync)(void) = (void (*)(void))0x6A5A;
 +
 +uint16_t soundState[128];
 +
 +void **biosSoundState = (void **) 0x0900003C;
 +
 +void (*const BiosSoundDemo)(void) = (void (*)())0x6B86;
 +
 +void (*const BiosInitSoundTransmission)() = (void (*)())0x613C;
 +void (*const BiosSoundChannels)(int) = (void (*)(int))0x6AC0;
 +void (*const BiosSoundVolume)(int, int) = (void (*)(int, int))0x6B50;
 +void (*const BiosPlayBGM)(void*, int, int, void**) = (void (*)(void*, int, int, void**))0x61A0;
 +
 +const void *trackList[] = {
 +(const void*)_track_song2
 +};
 +
 +int main() 
 +{
 +*biosSoundState = &soundState[0];
 +
 +DMAOR = 0x0001;
 +IPRC = (IPRC & 0xFF0F) | 0x0080; // Enable Timer Interrupt
 +maskInterrupts(0);
 +
 +BiosSoundChannels(2);
 +BiosSoundVolume(0, 2);
 +BiosSoundVolume(1, 2);
 +BiosInitSoundTransmission();
 +BiosPlayBGM((void *)soundState, 0xFF, 0, (void **)trackList);
 +
 +VDP_BMn_SCROLLX[0] = 0xEA;
 +VDP_BMn_SCROLLX[0] = 0xAE;
 +
 +    while(1)
 +    {
 +        BiosVsync();
 +    }
 +    return 0;
 +}
 +</code>
 +
 +Example song 
 +<code>
 +#ifndef TRACK_SONG2_H
 +#define TRACK_SONG2_H
 +
 +#include <stdint.h>
 +
 +// Example boot logo track data (bytes given in hex)
 +const uint8_t _track_song2[] = {
 +    0x87, 0xA2,       // Timer rate 144 BPM
 +    0x08, 0xA0,       // Control value (ch2/3 high volume, ch4 mid volume)
 +
 +    0x00,             // Delay 0
 +    0x0F,             // MidiData 15 bytes
 +    0xC0, 0x60,       // ProgramChange Channel=1 Instrument=60h
 +    0x90, 0x38, 0x40, // NoteOn Channel=1 Note=38h Velocity=40h
 +    0xC1, 0x5C,       // ProgramChange Channel=2 Instrument=5Ch
 +    0x91, 0x38, 0x40, // NoteOn Channel=2 Note=38h Velocity=40h
 +    0xC3, 0x50,       // ProgramChange Channel=4 Instrument=50h
 +    0x93, 0x38, 0x40, // NoteOn Channel=4 Note=38h Velocity=40h
 +
 +    0x04,             // Delay 4
 +    0x03,             // MidiData 3 bytes
 +    0x90, 0x38, 0x00, // NoteOn Channel=1 Note=38h Velocity=OFF
 +
 +    0x07,             // Delay 7
 +    0x03,             // MidiData 3 bytes
 +    0x91, 0x38, 0x00, // NoteOn Channel=2 Note=38h Velocity=OFF
 +
 +    0x01,             // Delay 1
 +    0x06,             // MidiData 6 bytes
 +    0x90, 0x3C, 0x40, // NoteOn Channel=1 Note=3Ch Velocity=40h
 +    0x91, 0x3C, 0x40, // NoteOn Channel=2 Note=3Ch Velocity=40h
 +
 +    0x04,             // Delay 4
 +    0x03,             // MidiData 3 bytes
 +    0x90, 0x3C, 0x00, // NoteOn Channel=1 Note=3Ch Velocity=OFF
 +
 +    0x05,             // Delay 5
 +    0x03,             // MidiData 3 bytes
 +    0x91, 0x3C, 0x00, // NoteOn Channel=2 Note=3Ch Velocity=OFF
 +
 +    0x03,             // Delay 3
 +    0x06,             // MidiData 6 bytes
 +    0x90, 0x3F, 0x40, // NoteOn Channel=1 Note=3Fh Velocity=40h
 +    0x91, 0x3F, 0x40, // NoteOn Channel=2 Note=3Fh Velocity=40h
 +
 +    0x04,             // Delay 4
 +    0x03,             // MidiData 3 bytes
 +    0x90, 0x3F, 0x00, // NoteOn Channel=1 Note=3Fh Velocity=OFF
 +
 +    0x02,             // Delay 2
 +    0x03,             // MidiData 3 bytes
 +    0x91, 0x3F, 0x00, // NoteOn Channel=2 Note=3Fh Velocity=OFF
 +
 +    0x06,             // Delay 6
 +    0x06,             // MidiData 6 bytes
 +    0x90, 0x46, 0x40, // NoteOn Channel=1 Note=46h Velocity=40h
 +    0x91, 0x46, 0x40, // NoteOn Channel=2 Note=46h Velocity=40h
 +
 +    0x04,             // Delay 4
 +    0x03,             // MidiData 3 bytes
 +    0x90, 0x46, 0x00, // NoteOn Channel=1 Note=46h Velocity=OFF
 +
 +    0x04,             // Delay 4
 +    0x03,             // MidiData 3 bytes
 +    0x91, 0x46, 0x00, // NoteOn Channel=2 Note=46h Velocity=OFF
 +
 +    0x04,             // Delay 4
 +    0x0C,             // MidiData 12 bytes
 +    0x90, 0x4B, 0x40, // NoteOn Channel=1 Note=4Bh Velocity=40h
 +    0x91, 0x4B, 0x40, // NoteOn Channel=2 Note=4Bh Velocity=40h
 +    0x93, 0x38, 0x00, // NoteOn Channel=4 Note=38h Velocity=OFF
 +    0x93, 0x3A, 0x40, // NoteOn Channel=4 Note=3Ah Velocity=40h
 +
 +    0x04,             // Delay 4
 +    0x03,             // MidiData 3 bytes
 +    0x90, 0x4B, 0x00, // NoteOn Channel=1 Note=4Bh Velocity=OFF
 +
 +    0x04,             // Delay 4
 +    0x03,             // MidiData 3 bytes
 +    0x91, 0x4B, 0x00, // NoteOn Channel=2 Note=4Bh Velocity=OFF
 +
 +    0x05,             // Delay 5
 +    0x06,             // MidiData 6 bytes
 +    0x90, 0x4F, 0x40, // NoteOn Channel=1 Note=4Fh Velocity=40h
 +    0x91, 0x4F, 0x40, // NoteOn Channel=2 Note=4Fh Velocity=40h
 +
 +    0x04,             // Delay 4
 +    0x03,             // MidiData 3 bytes
 +    0x90, 0x4F, 0x00, // NoteOn Channel=1 Note=4Fh Velocity=OFF
 +
 +    0x04,             // Delay 4
 +    0x03,             // MidiData 3 bytes
 +    0x91, 0x4F, 0x00, // NoteOn Channel=2 Note=4Fh Velocity=OFF
 +
 +    0x8D,             // Delay 141
 +    0x03,             // MidiData 3 bytes
 +    0x93, 0x3A, 0x00, // NoteOn Channel=4 Note=3Ah Velocity=OFF
 +
 +    0x00,             // Delay 0
 +    0xFE, 0xFF, 0xFF  // TrackChange, Index=STOP
 }; };
  
 +#endif // TRACK_SONG2_H
 +</code>
musiccode.1738023328.txt.gz · Last modified: 2025/01/28 00:15 by gbb

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki