added a new macro progmem!() at the inside you can add new progmem data.
This commit is contained in:
parent
d9cb232cef
commit
28cbec07f8
8 changed files with 427 additions and 337 deletions
|
@ -9,60 +9,111 @@ use arduboy_rust::arduboy_tone_pitch::*;
|
||||||
use arduboy_rust::prelude::*;
|
use arduboy_rust::prelude::*;
|
||||||
|
|
||||||
// Progmem data
|
// Progmem data
|
||||||
#[link_section = ".progmem.data"]
|
progmem!(
|
||||||
static lol1: [u8; 19] = *b"I'm a PROGMEM Text\0";
|
static lol1: [u8; _] = *b"I'm a PROGMEM Text\0";
|
||||||
#[link_section = ".progmem.data"]
|
static player_sprite1: [u8; _] = [
|
||||||
static player_sprite1: [u8; 34] = [
|
16, 16, 0xfe, 0x01, 0x3d, 0x25, 0x25, 0x3d, 0x01, 0x01, 0xc1, 0x01, 0x3d, 0x25, 0x25, 0x3d,
|
||||||
16, 16, 0xfe, 0x01, 0x3d, 0x25, 0x25, 0x3d, 0x01, 0x01, 0xc1, 0x01, 0x3d, 0x25, 0x25, 0x3d,
|
0x01, 0xfe, 0x7f, 0x80, 0x9c, 0xbc, 0xb0, 0xb0, 0xb2, 0xb2, 0xb3, 0xb0, 0xb0, 0xb0, 0xbc,
|
||||||
0x01, 0xfe, 0x7f, 0x80, 0x9c, 0xbc, 0xb0, 0xb0, 0xb2, 0xb2, 0xb3, 0xb0, 0xb0, 0xb0, 0xbc, 0x9c,
|
0x9c, 0x80, 0x7f,
|
||||||
0x80, 0x7f,
|
];
|
||||||
];
|
static tones: [u16; _] = [
|
||||||
#[link_section = ".progmem.data"]
|
NOTE_E4,
|
||||||
static tones: [u16; 43] = [
|
400,
|
||||||
NOTE_E4,
|
NOTE_D4,
|
||||||
400,
|
200,
|
||||||
NOTE_D4,
|
NOTE_C4,
|
||||||
200,
|
400,
|
||||||
NOTE_C4,
|
NOTE_REST,
|
||||||
400,
|
200,
|
||||||
NOTE_REST,
|
NOTE_D4,
|
||||||
200,
|
200,
|
||||||
NOTE_D4,
|
NOTE_C4,
|
||||||
200,
|
300,
|
||||||
NOTE_C4,
|
NOTE_REST,
|
||||||
300,
|
100,
|
||||||
NOTE_REST,
|
NOTE_C4,
|
||||||
100,
|
300,
|
||||||
NOTE_C4,
|
NOTE_REST,
|
||||||
300,
|
100,
|
||||||
NOTE_REST,
|
NOTE_E4,
|
||||||
100,
|
300,
|
||||||
NOTE_E4,
|
NOTE_REST,
|
||||||
300,
|
100,
|
||||||
NOTE_REST,
|
NOTE_G4,
|
||||||
100,
|
300,
|
||||||
NOTE_G4,
|
NOTE_REST,
|
||||||
300,
|
100,
|
||||||
NOTE_REST,
|
NOTE_F4,
|
||||||
100,
|
300,
|
||||||
NOTE_F4,
|
NOTE_REST,
|
||||||
300,
|
100,
|
||||||
NOTE_REST,
|
NOTE_A4,
|
||||||
100,
|
300,
|
||||||
NOTE_A4,
|
NOTE_REST,
|
||||||
300,
|
100,
|
||||||
NOTE_REST,
|
NOTE_D5H,
|
||||||
100,
|
200,
|
||||||
NOTE_D5H,
|
NOTE_REST,
|
||||||
200,
|
200,
|
||||||
NOTE_REST,
|
NOTE_D5H,
|
||||||
200,
|
200,
|
||||||
NOTE_D5H,
|
NOTE_REST,
|
||||||
200,
|
1500,
|
||||||
NOTE_REST,
|
TONES_REPEAT,
|
||||||
1500,
|
];
|
||||||
TONES_REPEAT,
|
);
|
||||||
];
|
//#[link_section = ".progmem.data"]
|
||||||
|
//static player_sprite1: [u8; 34] = [
|
||||||
|
// 16, 16, 0xfe, 0x01, 0x3d, 0x25, 0x25, 0x3d, 0x01, 0x01, 0xc1, 0x01, 0x3d, 0x25, 0x25, 0x3d,
|
||||||
|
// 0x01, 0xfe, 0x7f, 0x80, 0x9c, 0xbc, 0xb0, 0xb0, 0xb2, 0xb2, 0xb3, 0xb0, 0xb0, 0xb0, 0xbc, 0x9c,
|
||||||
|
// 0x80, 0x7f,
|
||||||
|
//];
|
||||||
|
// #[link_section = ".progmem.data"]
|
||||||
|
// static tones: [u16; 43] = [
|
||||||
|
// NOTE_E4,
|
||||||
|
// 400,
|
||||||
|
// NOTE_D4,
|
||||||
|
// 200,
|
||||||
|
// NOTE_C4,
|
||||||
|
// 400,
|
||||||
|
// NOTE_REST,
|
||||||
|
// 200,
|
||||||
|
// NOTE_D4,
|
||||||
|
// 200,
|
||||||
|
// NOTE_C4,
|
||||||
|
// 300,
|
||||||
|
// NOTE_REST,
|
||||||
|
// 100,
|
||||||
|
// NOTE_C4,
|
||||||
|
// 300,
|
||||||
|
// NOTE_REST,
|
||||||
|
// 100,
|
||||||
|
// NOTE_E4,
|
||||||
|
// 300,
|
||||||
|
// NOTE_REST,
|
||||||
|
// 100,
|
||||||
|
// NOTE_G4,
|
||||||
|
// 300,
|
||||||
|
// NOTE_REST,
|
||||||
|
// 100,
|
||||||
|
// NOTE_F4,
|
||||||
|
// 300,
|
||||||
|
// NOTE_REST,
|
||||||
|
// 100,
|
||||||
|
// NOTE_A4,
|
||||||
|
// 300,
|
||||||
|
// NOTE_REST,
|
||||||
|
// 100,
|
||||||
|
// NOTE_D5H,
|
||||||
|
// 200,
|
||||||
|
// NOTE_REST,
|
||||||
|
// 200,
|
||||||
|
// NOTE_D5H,
|
||||||
|
// 200,
|
||||||
|
// NOTE_REST,
|
||||||
|
// 1500,
|
||||||
|
// TONES_REPEAT,
|
||||||
|
// ];
|
||||||
|
|
||||||
// dynamic ram variables
|
// dynamic ram variables
|
||||||
static mut playerx: c_int = 5;
|
static mut playerx: c_int = 5;
|
||||||
|
|
|
@ -6,259 +6,261 @@ use arduboy_rust::arduboy_tone_pitch::*;
|
||||||
#[allow(unused_imports)]
|
#[allow(unused_imports)]
|
||||||
use arduboy_rust::prelude::*;
|
use arduboy_rust::prelude::*;
|
||||||
|
|
||||||
#[link_section = ".progmem.data"]
|
progmem!(
|
||||||
static allNotes: [u16; 241] = [
|
static allNotes: [u16; _] = [
|
||||||
NOTE_C0H,
|
NOTE_C0H,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_CS0,
|
NOTE_CS0,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_D0,
|
NOTE_D0,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_DS0,
|
NOTE_DS0,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_E0,
|
NOTE_E0,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_F0,
|
NOTE_F0,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_FS0,
|
NOTE_FS0,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_G0,
|
NOTE_G0,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_GS0,
|
NOTE_GS0,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_A0,
|
NOTE_A0,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_AS0,
|
NOTE_AS0,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_B0,
|
NOTE_B0,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_C1H,
|
NOTE_C1H,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_CS1,
|
NOTE_CS1,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_D1,
|
NOTE_D1,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_DS1,
|
NOTE_DS1,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_E1,
|
NOTE_E1,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_F1,
|
NOTE_F1,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_FS1,
|
NOTE_FS1,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_G1,
|
NOTE_G1,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_GS1,
|
NOTE_GS1,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_A1,
|
NOTE_A1,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_AS1,
|
NOTE_AS1,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_B1,
|
NOTE_B1,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_C2H,
|
NOTE_C2H,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_CS2,
|
NOTE_CS2,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_D2,
|
NOTE_D2,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_DS2,
|
NOTE_DS2,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_E2,
|
NOTE_E2,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_F2,
|
NOTE_F2,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_FS2,
|
NOTE_FS2,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_G2,
|
NOTE_G2,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_GS2,
|
NOTE_GS2,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_A2,
|
NOTE_A2,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_AS2,
|
NOTE_AS2,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_B2,
|
NOTE_B2,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_C3H,
|
NOTE_C3H,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_CS3,
|
NOTE_CS3,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_D3,
|
NOTE_D3,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_DS3,
|
NOTE_DS3,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_E3,
|
NOTE_E3,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_F3,
|
NOTE_F3,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_FS3,
|
NOTE_FS3,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_G3,
|
NOTE_G3,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_GS3,
|
NOTE_GS3,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_A3,
|
NOTE_A3,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_AS3,
|
NOTE_AS3,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_B3,
|
NOTE_B3,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_C4H,
|
NOTE_C4H,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_CS4,
|
NOTE_CS4,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_D4,
|
NOTE_D4,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_DS4,
|
NOTE_DS4,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_E4,
|
NOTE_E4,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_F4,
|
NOTE_F4,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_FS4,
|
NOTE_FS4,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_G4,
|
NOTE_G4,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_GS4,
|
NOTE_GS4,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_A4,
|
NOTE_A4,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_AS4,
|
NOTE_AS4,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_B4,
|
NOTE_B4,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_C5H,
|
NOTE_C5H,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_CS5,
|
NOTE_CS5,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_D5,
|
NOTE_D5,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_DS5,
|
NOTE_DS5,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_E5,
|
NOTE_E5,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_F5,
|
NOTE_F5,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_FS5,
|
NOTE_FS5,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_G5,
|
NOTE_G5,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_GS5,
|
NOTE_GS5,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_A5,
|
NOTE_A5,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_AS5,
|
NOTE_AS5,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_B5,
|
NOTE_B5,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_C6H,
|
NOTE_C6H,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_CS6,
|
NOTE_CS6,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_D6,
|
NOTE_D6,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_DS6,
|
NOTE_DS6,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_E6,
|
NOTE_E6,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_F6,
|
NOTE_F6,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_FS6,
|
NOTE_FS6,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_G6,
|
NOTE_G6,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_GS6,
|
NOTE_GS6,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_A6,
|
NOTE_A6,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_AS6,
|
NOTE_AS6,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_B6,
|
NOTE_B6,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_C7H,
|
NOTE_C7H,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_CS7,
|
NOTE_CS7,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_D7,
|
NOTE_D7,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_DS7,
|
NOTE_DS7,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_E7,
|
NOTE_E7,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_F7,
|
NOTE_F7,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_FS7,
|
NOTE_FS7,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_G7,
|
NOTE_G7,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_GS7,
|
NOTE_GS7,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_A7,
|
NOTE_A7,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_AS7,
|
NOTE_AS7,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_B7,
|
NOTE_B7,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_C8H,
|
NOTE_C8H,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_CS8,
|
NOTE_CS8,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_D8,
|
NOTE_D8,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_DS8,
|
NOTE_DS8,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_E8,
|
NOTE_E8,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_F8,
|
NOTE_F8,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_FS8,
|
NOTE_FS8,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_G8,
|
NOTE_G8,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_GS8,
|
NOTE_GS8,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_A8,
|
NOTE_A8,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_AS8,
|
NOTE_AS8,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_B8,
|
NOTE_B8,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_C9H,
|
NOTE_C9H,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_CS9,
|
NOTE_CS9,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_D9,
|
NOTE_D9,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_DS9,
|
NOTE_DS9,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_E9,
|
NOTE_E9,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_F9,
|
NOTE_F9,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_FS9,
|
NOTE_FS9,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_G9,
|
NOTE_G9,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_GS9,
|
NOTE_GS9,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_A9,
|
NOTE_A9,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_AS9,
|
NOTE_AS9,
|
||||||
NDUR,
|
NDUR,
|
||||||
NOTE_B9,
|
NOTE_B9,
|
||||||
NDUR,
|
NDUR,
|
||||||
TONES_REPEAT,
|
TONES_REPEAT,
|
||||||
];
|
];
|
||||||
#[link_section = ".progmem.data"]
|
|
||||||
static sound1: [u16; 73] = [
|
static sound1: [u16; _] = [
|
||||||
NOTE_C1, 500, NOTE_C1H, 500, NOTE_G1, 500, NOTE_G1H, 500, NOTE_C2, 500, NOTE_C2H, 500, NOTE_G2,
|
NOTE_C1, 500, NOTE_C1H, 500, NOTE_G1, 500, NOTE_G1H, 500, NOTE_C2, 500, NOTE_C2H, 500,
|
||||||
500, NOTE_G2H, 500, NOTE_C3, 500, NOTE_C3H, 500, NOTE_G3, 500, NOTE_G3H, 500, NOTE_C4, 500,
|
NOTE_G2, 500, NOTE_G2H, 500, NOTE_C3, 500, NOTE_C3H, 500, NOTE_G3, 500, NOTE_G3H, 500,
|
||||||
NOTE_C4H, 500, NOTE_G4, 500, NOTE_G4H, 500, NOTE_C5, 500, NOTE_C5H, 500, NOTE_G5, 500,
|
NOTE_C4, 500, NOTE_C4H, 500, NOTE_G4, 500, NOTE_G4H, 500, NOTE_C5, 500, NOTE_C5H, 500,
|
||||||
NOTE_G5H, 500, NOTE_C6, 500, NOTE_C6H, 500, NOTE_G6, 500, NOTE_G6H, 500, NOTE_C7, 500,
|
NOTE_G5, 500, NOTE_G5H, 500, NOTE_C6, 500, NOTE_C6H, 500, NOTE_G6, 500, NOTE_G6H, 500,
|
||||||
NOTE_C7H, 500, NOTE_G7, 500, NOTE_G7H, 500, NOTE_C8, 500, NOTE_C8H, 500, NOTE_G8, 500,
|
NOTE_C7, 500, NOTE_C7H, 500, NOTE_G7, 500, NOTE_G7H, 500, NOTE_C8, 500, NOTE_C8H, 500,
|
||||||
NOTE_G8H, 500, NOTE_C9, 500, NOTE_C9H, 500, NOTE_G9, 500, NOTE_G9H, 500, TONES_END,
|
NOTE_G8, 500, NOTE_G8H, 500, NOTE_C9, 500, NOTE_C9H, 500, NOTE_G9, 500, NOTE_G9H, 500,
|
||||||
];
|
TONES_END,
|
||||||
|
];
|
||||||
|
);
|
||||||
|
|
||||||
static mut circle_pos: i16 = 7;
|
static mut circle_pos: i16 = 7;
|
||||||
const BUTTON_DELAY: u32 = 200;
|
const BUTTON_DELAY: u32 = 200;
|
||||||
|
|
|
@ -1,14 +1,5 @@
|
||||||
//pub use crate::library::arduboy_tone_pitch::*;
|
//pub use crate::library::arduboy_tone_pitch::*;
|
||||||
use core::ffi::{c_uchar, c_uint, c_ulong};
|
use core::ffi::{c_uchar, c_uint, c_ulong};
|
||||||
///Create a `const` raw pointer to a sprite as u16, without creating an intermediate reference.
|
|
||||||
#[macro_export]
|
|
||||||
macro_rules! get_tones_addr {
|
|
||||||
( $s:expr ) => {
|
|
||||||
addr_of!($s) as *const u16
|
|
||||||
};
|
|
||||||
}
|
|
||||||
#[allow(unused_imports)]
|
|
||||||
pub(super) use get_tones_addr;
|
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#[link_name = "sound_tone"]
|
#[link_name = "sound_tone"]
|
||||||
|
|
|
@ -4,4 +4,5 @@ pub mod arduboy_tone_pitch;
|
||||||
pub mod arduino;
|
pub mod arduino;
|
||||||
pub mod c;
|
pub mod c;
|
||||||
pub mod eeprom;
|
pub mod eeprom;
|
||||||
|
pub mod progmem;
|
||||||
pub mod sprites;
|
pub mod sprites;
|
||||||
|
|
65
arduboy-rust/src/library/progmem.rs
Normal file
65
arduboy-rust/src/library/progmem.rs
Normal file
|
@ -0,0 +1,65 @@
|
||||||
|
#![allow(unused_imports)]
|
||||||
|
/// Create a space for Progrem variable
|
||||||
|
/// ## Example
|
||||||
|
/// ```
|
||||||
|
/// //for text
|
||||||
|
/// progmem!(
|
||||||
|
/// static text: [u8; _] = *b"I'm a PROGMEM Text\0";
|
||||||
|
/// );
|
||||||
|
/// //for tone sequence
|
||||||
|
/// progmem!(
|
||||||
|
/// static tone: [u16; 43] = [
|
||||||
|
/// NOTE_E4, 400, NOTE_D4, 200, NOTE_C4, 400, NOTE_D4, 200, NOTE_C4, 300, NOTE_REST,
|
||||||
|
/// ];
|
||||||
|
/// );
|
||||||
|
/// //for for bitmap
|
||||||
|
/// progmem!(
|
||||||
|
/// static image: [u8; _] = [8, 8, 0x81, 0x00, 0x12, 0x40, 0x04, 0x11, 0x00, 0x04];
|
||||||
|
/// );
|
||||||
|
/// ```
|
||||||
|
#[macro_export]
|
||||||
|
macro_rules! progmem {
|
||||||
|
(
|
||||||
|
$( #[$attr:meta] )*
|
||||||
|
$v:vis $id:ident $name:ident: [$ty:ty; _] = $value:expr;
|
||||||
|
$($rest:tt)*
|
||||||
|
) => {
|
||||||
|
$( #[$attr] )*
|
||||||
|
#[link_section = ".progmem.data"]
|
||||||
|
$v $id $name: [$ty; $value.len()] = $value;
|
||||||
|
$crate::progmem!{
|
||||||
|
$($rest)*
|
||||||
|
}
|
||||||
|
};
|
||||||
|
() => ()
|
||||||
|
}
|
||||||
|
|
||||||
|
pub(super) use progmem;
|
||||||
|
///Create a `const` raw pointer to a sprite as u8, without creating an intermediate reference.
|
||||||
|
#[macro_export]
|
||||||
|
macro_rules! get_sprite_addr {
|
||||||
|
( $s:expr ) => {
|
||||||
|
addr_of!($s) as *const u8
|
||||||
|
};
|
||||||
|
}
|
||||||
|
pub(super) use get_sprite_addr;
|
||||||
|
|
||||||
|
///Create a `const` raw pointer to a sprite as u16, without creating an intermediate reference.
|
||||||
|
#[macro_export]
|
||||||
|
macro_rules! get_tones_addr {
|
||||||
|
( $s:expr ) => {
|
||||||
|
addr_of!($s) as *const u16
|
||||||
|
};
|
||||||
|
}
|
||||||
|
pub(super) use get_tones_addr;
|
||||||
|
|
||||||
|
///Create a `const` raw pointer to a \[u8;_] that saves text, without creating an intermediate reference.
|
||||||
|
#[macro_export]
|
||||||
|
macro_rules! get_string_addr {
|
||||||
|
( $s:expr ) => {
|
||||||
|
Pstring {
|
||||||
|
pointer: addr_of!($s) as *const i8,
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
pub(super) use get_string_addr;
|
|
@ -1,14 +1,5 @@
|
||||||
//!This is the module to interact in a save way with the Sprites C++ library.
|
//!This is the module to interact in a save way with the Sprites C++ library.
|
||||||
use core::ffi::{c_int, c_uchar};
|
use core::ffi::{c_int, c_uchar};
|
||||||
///Create a `const` raw pointer to a sprite as u8, without creating an intermediate reference.
|
|
||||||
#[macro_export]
|
|
||||||
macro_rules! get_sprite_addr {
|
|
||||||
( $s:expr ) => {
|
|
||||||
addr_of!($s) as *const u8
|
|
||||||
};
|
|
||||||
}
|
|
||||||
#[allow(unused_imports)]
|
|
||||||
pub(super) use get_sprite_addr;
|
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#[link_name = "arduino_draw_override"]
|
#[link_name = "arduino_draw_override"]
|
||||||
|
|
|
@ -19,7 +19,7 @@ pub use crate::library::c::*;
|
||||||
pub use crate::library::eeprom::EEPROM;
|
pub use crate::library::eeprom::EEPROM;
|
||||||
pub use crate::library::sprites;
|
pub use crate::library::sprites;
|
||||||
pub use crate::print::*;
|
pub use crate::print::*;
|
||||||
pub use crate::{get_sprite_addr, get_string_addr, get_tones_addr};
|
pub use crate::{get_sprite_addr, get_string_addr, get_tones_addr, progmem};
|
||||||
use core::cmp;
|
use core::cmp;
|
||||||
|
|
||||||
pub fn constrain<T: Ord>(x: T, a: T, b: T) -> T {
|
pub fn constrain<T: Ord>(x: T, a: T, b: T) -> T {
|
||||||
|
|
|
@ -1,16 +1,5 @@
|
||||||
use crate::prelude::Pstring;
|
use crate::prelude::Pstring;
|
||||||
use core::ffi::c_int;
|
use core::ffi::c_int;
|
||||||
///Create a `const` raw pointer to a \[u8;_] that saves text, without creating an intermediate reference.
|
|
||||||
#[macro_export]
|
|
||||||
macro_rules! get_string_addr {
|
|
||||||
( $s:expr ) => {
|
|
||||||
Pstring {
|
|
||||||
pointer: addr_of!($s) as *const i8,
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
#[allow(unused_imports)]
|
|
||||||
pub(super) use get_string_addr;
|
|
||||||
|
|
||||||
#[derive(Debug, Copy, Clone, Hash, Eq, PartialEq, Ord, PartialOrd)]
|
#[derive(Debug, Copy, Clone, Hash, Eq, PartialEq, Ord, PartialOrd)]
|
||||||
pub enum Base {
|
pub enum Base {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue