Вс фев 06, 2022 12:11:20
Вс фев 06, 2022 12:57:07
Вс фев 06, 2022 13:00:31
Вт фев 22, 2022 01:12:50
var chars = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
0xCC, 0xCC, 0xCC, 0xFC, 0xCC, 0xCC, 0xCC, 0x00, // H
0x00, 0x00, 0x78, 0xCC, 0xFC, 0xC0, 0x78, 0x00, // e
0x70, 0x30, 0x30, 0x30, 0x30, 0x30, 0x78, 0x00, // l
0x00, 0x00, 0x3C, 0x66, 0x66, 0x66, 0x3C, 0x00, // o
0xC6, 0xC6, 0xC6, 0xD6, 0xFE, 0xEE, 0xC6, 0x00, // W
0x00, 0x00, 0xD8, 0x6C, 0x6C, 0x60, 0xF0, 0x00, // r
0x1C, 0x0C, 0x0C, 0x7C, 0xCC, 0xCC, 0x76, 0x00}; // d
var helloWorld = { 1, 2, 3, 3, 4, 0, 5, 4, 6, 3, 7, 0 };
var curChar = 0;
var shift = 0;
while(1)
{
var offset = peek(helloWorld, curChar) * 8;
var offset2 = peek(helloWorld, (curChar + 1) % 12) * 8;
for(var y = 0; y < 8; y++)
{
var line = (peek(chars, y + offset) << 8) | peek(chars, y + offset2);
line <<= shift;
for(var x = 0; x < 8; x++)
{
var color = 128;
if(line & 0x8000) color = 0;
paint(y * 8 + x, color);
line <<= 1;
}
}
if(++shift > 7)
{
shift = 0;
if(++curChar > 11) curChar = 0;
}
wait(80);
}
var arr = { 27, 28, 36, 35, 34, 26, 18, 19, 20, 21, 29, 37, 45, 44,
43, 42, 41, 33, 25, 17, 9, 10, 11, 12, 13, 14, 22, 30, 38, 46,
54, 53, 52, 51, 50, 49, 48, 40, 32, 24, 16, 8, 0, 1, 2, 3, 4,
5, 6, 7, 15, 23, 31, 39, 47, 55, 63, 62, 61, 60, 59, 58, 57, 56 };
var offset = 0;
while(1)
{
for(var i = 0; i < 64; i++)
{
var h = (i * 4 + offset) & 0xFF;
paint(peek(arr, i), h);
}
wait(1);
offset++;
}
Вт фев 22, 2022 12:30:28
Вт фев 22, 2022 14:21:28
ARV писал(а):а так же хотелось бы разобраться об аппаратной платформе, способной такое воспроизвести - я подозреваю, что это не atmega328 будет...
var arr = { 10, 20, 30, 40, 50 };
paint(2, (5 + 7 * 24 / 6) & 0x3F);
paintMap(arr);
0000 E2000A pushk 11
0003 63 popv 3
0004 22 pushk5 2
0005 E020 pushk 33
0007 87 call paint
0008 43 pushv 3
0009 86 call paintMap
000A 16 ret
000B 05
000C 00
000D 0A
000E 14
000F 1E
0010 28
0011 32
bool process()
{
auto opcode = get();
switch (opcode >> 5)
{
case 0:
{
int tv = pop();
switch (opcode & 0x1F)
{
case 0x00: top() += tv; break; // Add
case 0x01: top() -= tv; break; // Sub
case 0x02: top() *= tv; break; // Mul
case 0x03: top() /= tv; break; // Div
case 0x04: top() %= tv; break; // Mod
case 0x05: push(-tv); break; // Neg
case 0x06: push(~tv); break; // Com
case 0x07: push(!tv); break; // Not
case 0x08: top() &= tv; break; // And
case 0x09: top() |= tv; break; // Or
case 0x0A: top() ^= tv; break; // Xor
case 0x0B: top() = bool(top()) & bool(tv); break; // LogAnd
case 0x0C: top() = bool(top()) | bool(tv); break; // LogOr
case 0x0D: top() >>= tv; break; // Ror
case 0x0E: top() <<= tv; break; // Rol
case 0x0F: top() = (top() == tv); break; // EQ
case 0x10: top() = (top() != tv); break; // NE
case 0x11: top() = (top() < tv); break; // LS
case 0x12: top() = (top() > tv); break; // GT
case 0x13: top() = (top() <= tv); break; // LE
case 0x14: top() = (top() >= tv); break; // GE
case 0x15: break; // Pop
case 0x16: return true; // Ret
}
break;
}
case 1: push(opcode & 0x1F); break; // Pushk5
case 2: push(vars_[opcode & 0x1F]); break; // Pushv
case 3: vars_[opcode & 0x1F] = pop(); break; // Popv
case 4: // Call
{
switch (opcode & 0x1F)
{
case 0: rtt.println(pop()); break; // void print(val)
case 1: peek(); break; // int peek(arrOffset, index)
case 2: clear(); break; // void clear(color)
case 3: wait(); break; // void wait(ms)
case 4: push(rnd()); break; // int rnd(max)
case 5: reverse(); break; // void reverse()
case 6: paintMap(); break; // void paintMap(arr)
case 7: paint(); break; // void paintMap(ledNum, color)
case 8: return true; // void exit()
.......
}
break;
}
case 5: // Jmp
{
int addr = ((opcode & 0x1F) << 8) | get();
curCode_ = (uint8_t*)Code + addr;
break;
}
case 6: // Jne
{
int addr = ((opcode & 0x1F) << 8) | get();
if (!pop()) curCode_ = (uint8_t*)Code + addr;
break;
}
case 7:
auto op = (opcode >> 3) & 3;
if (op == 0) // Pushk
{
bool sign = opcode & 1;
int nn = (opcode >> 1) & 3;
int val = get();
while (nn--)
{
val = (val << 8) | get();
}
val++;
if (sign) val = -val;
push(val);
}
else if (op == 1) // Addi
{
top() += (opcode & 7) + 1;
}
else // Subi
{
top() -= (opcode & 7) + 1;
}
}
return false;
}
uint8_t get() { return *curCode_++; }
int& top() const { return *curStack_; }
void push(int value) { *(++curStack_) = value; }
int pop() { return *curStack_--; }
Вт фев 22, 2022 14:42:18
лучше один раз увидеть... есть какое-то видео, анимация или что-то подобное? как-то меня "квадратная спираль с бегущим огнем" не очень в голове вырисовывается...Reflector писал(а):Если взять такую полоску, разбить ее на 64 сегмента, свернуть в квадратную спираль и скролить, то получится именно то, что делает этот скрипт.
конечно, разве кто спорит? всю работу сделать на компьютере, а для МК по сути дать готовую "прошивку" думаешь, я не мог бы сделать подобное? мне было интересно сделать это на МК без компа. поначалу я хотел версию бейсика сделать, но потом передумал и сделал свой "ассемблер"Reflector писал(а):И мне кажется работать будет быстрее чем с твоими текстовыми скриптами
Вт фев 22, 2022 15:28:55
ARV писал(а):конечно, разве кто спорит? всю работу сделать на компьютере, а для МК по сути дать готовую "прошивку" думаешь, я не мог бы сделать подобное? мне было интересно сделать это на МК без компа. поначалу я хотел версию бейсика сделать, но потом передумал и сделал свой "ассемблер"
Вт фев 22, 2022 15:37:03
т.е. эта спираль реализована на матрице из светодиодов? и по ней бежит радуга - верно понял?Reflector писал(а):Вот квадратная спираль
да не было вопроса... я сразу сказал, что будет быстрее гораздо. я не сразу вспомнил, что у тебя подход "компилируемого" в байт-код скрипта. собственно, тут многое зависит от интерпретатора байт-кода, но наверняка он будет быстрее символьного интерпретатора...Reflector писал(а):Вопрос то был касательно того сможет ли mega328 такое воспроизвести и она сможет потратив меньше времени
а чего там сложного? подмножество бейсика для светоэффектов было бы не многим сложнее имеющегося интерпретатора "ассемблера" просто меньше полезной памяти осталось бы, только и всего.Reflector писал(а):если хотя бы интерпретатор бейсика писался так просто
Вт фев 22, 2022 16:21:28
ARV писал(а):а чего там сложного? подмножество бейсика для светоэффектов было бы не многим сложнее имеющегося интерпретатора "ассемблера" просто меньше полезной памяти осталось бы, только и всего.
x = 10 * foo(rnd(y - 5) / 2, 8) + 1;
Вт фев 22, 2022 18:01:17
так я тоже говорил, что лучше один раз увидеть... неужели телефон кнопочный без камеры?Reflector писал(а):же говорил
не, не допустим, в "ассемблере" таких выражений не может быть а вот в бейсике - да, могут. и единственная проблема - не найти ошибку, а сообщить о ней... при отсутствии-то дисплея... это - да, проблема в подходеReflector писал(а):Допустим интерпретатор "ассемблера" встречает подобное выражение
кэп, вы ли это?!Reflector писал(а):Компилируются скрипты, кстати, за несколько тысячных секунды
Вс мар 13, 2022 13:13:52
Вс мар 13, 2022 14:27:05
да, это типа "дежурный" эффектuniko писал(а):При включении без SD флеш загорается красным медленно переходит в желтый-зеленый-голубой-синий-сиреневый - получается плейер норм работает?
понятия не имею, что у вас а проблема. файл в студию. вы СКРИПТ записываете или ПРОЕКТ? записывать надо СКРИПТ с расширением sc, а не проект.uniko писал(а):И еще как вытащить-записать скрипт с DSM, всю помощь перечитал не получаетсяи все,
с расширением .sc записывает, а внутри одни каракули.
Вс мар 13, 2022 16:02:43
Вс мар 13, 2022 18:57:43
uniko писал(а):всю помощь перечитал
а как же вот это в справке?uniko писал(а):световую анимацию для пробы сделал, как проект его сохранил, дальше не понял как это перевести в скрипт
Вс мар 13, 2022 21:52:22
Вс мар 13, 2022 23:23:19
Пн мар 14, 2022 13:53:42
Пн мар 14, 2022 15:04:07
Пт мар 25, 2022 10:10:05