starting lisp core
This commit is contained in:
parent
25c76c67ce
commit
21ac50c94a
|
@ -0,0 +1,39 @@
|
|||
#pragma once
|
||||
#include <cstdint>
|
||||
|
||||
#define SYMBOL_TABLE_SIZE 2048
|
||||
|
||||
typedef char * symbol_t;
|
||||
|
||||
#define TYPE_SYMBOL 1
|
||||
#define TYPE_NUMBER 2
|
||||
#define TYPE_STRING 3
|
||||
#define TYPE_FLOAT 4
|
||||
#define TYPE_LIST 5
|
||||
|
||||
|
||||
#define symbolp(x) (x->type == TYPE_SYMBOL)
|
||||
#define numberp(x) (x->type == TYPE_NUMBER)
|
||||
#define stringp(x) (x->type == TYPE_STRING)
|
||||
#define floatp(x) (x->type == TYPE_FLOAT)
|
||||
#define listp(x) (x->type == TYPE_LIST)
|
||||
|
||||
|
||||
typedef struct cell {
|
||||
uint8_t type;
|
||||
union {
|
||||
struct {
|
||||
cell *head;
|
||||
cell *tail;
|
||||
};
|
||||
struct {
|
||||
union {
|
||||
symbol_t sym;
|
||||
int num;
|
||||
char *str;
|
||||
float fnum;
|
||||
};
|
||||
};
|
||||
};
|
||||
} cell_t;
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
#pragma once
|
||||
#include <cstddef>
|
||||
|
||||
// memory.h contains the memory management code for the system.
|
||||
// right now, it uses the stdlib malloc/free directly.
|
||||
//
|
||||
// TODO(kyle): switch to arena memory.
|
||||
|
||||
void *sys_malloc(size_t);
|
||||
void sys_free(void *);
|
|
@ -0,0 +1,8 @@
|
|||
#pragma once
|
||||
|
||||
namespace neopxl {
|
||||
|
||||
void start();
|
||||
bool blink(bool);
|
||||
|
||||
} // namespace neopxl
|
|
@ -0,0 +1,5 @@
|
|||
#include "lisp.h"
|
||||
|
||||
|
||||
static char SymbolTable[SYMBOL_TABLE_SIZE];
|
||||
|
|
@ -1,9 +1,9 @@
|
|||
#include <Adafruit_NeoPixel.h>
|
||||
#include <Adafruit_GFX.h>
|
||||
#include <Adafruit_ILI9341.h>
|
||||
#include <Fonts/FreeSans12pt7b.h>
|
||||
|
||||
#include "colors.h"
|
||||
#include "neopixel.h"
|
||||
|
||||
#define TFT_CS 9
|
||||
#define TFT_DC 10
|
||||
|
@ -12,20 +12,13 @@
|
|||
|
||||
Adafruit_ILI9341 tft(TFT_CS, TFT_DC);
|
||||
|
||||
Adafruit_NeoPixel pixels(1, 11, NEO_GRB + NEO_KHZ800);
|
||||
auto cOff = pixels.Color(0, 0, 0);
|
||||
auto cGreen = pixels.Color(0, 255, 0);
|
||||
auto cRed = pixels.Color(255, 0, 0);
|
||||
auto cBlue = pixels.Color(0, 0, 255);
|
||||
|
||||
|
||||
void
|
||||
setup()
|
||||
{
|
||||
Serial.begin(115200);
|
||||
pixels.begin();
|
||||
pixels.clear();
|
||||
pixels.show();
|
||||
|
||||
neopxl::start();
|
||||
|
||||
tft.begin();
|
||||
tft.setRotation(1);
|
||||
|
@ -42,52 +35,11 @@ setup()
|
|||
}
|
||||
|
||||
|
||||
bool
|
||||
blink(bool on)
|
||||
{
|
||||
if (on) {
|
||||
for (int i = 10; i < 255; i++) {
|
||||
auto c = pixels.Color(0, (uint8_t)i, 0);
|
||||
pixels.setPixelColor(0, c);
|
||||
pixels.show();
|
||||
delay(4);
|
||||
}
|
||||
on = false;
|
||||
} else {
|
||||
for (int i = 255; i > 9; i--) {
|
||||
auto c = pixels.Color(0, (uint8_t)i, 0);
|
||||
pixels.setPixelColor(0, c);
|
||||
pixels.show();
|
||||
delay(4);
|
||||
}
|
||||
on = true;
|
||||
}
|
||||
|
||||
return on;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
pixelOn(uint32_t c)
|
||||
{
|
||||
pixels.setPixelColor(0, c);
|
||||
pixels.show();
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
pixelOff()
|
||||
{
|
||||
pixels.setPixelColor(0, cOff);
|
||||
pixels.show();
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
loop()
|
||||
{
|
||||
static bool on = false;
|
||||
|
||||
on = blink(on);
|
||||
on = neopxl::blink(on);
|
||||
delayMicroseconds(100);
|
||||
}
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
#include "memory.h"
|
||||
#include <cstddef>
|
||||
#include <cstdlib>
|
||||
|
||||
void *
|
||||
sys_malloc(size_t size)
|
||||
{
|
||||
return std::malloc(size);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
sys_free(void *ptr)
|
||||
{
|
||||
return std::free(ptr);
|
||||
}
|
||||
|
|
@ -0,0 +1,64 @@
|
|||
#include "neopixel.h"
|
||||
#include <Adafruit_NeoPixel.h>
|
||||
|
||||
namespace neopxl {
|
||||
Adafruit_NeoPixel pixels(1, 11, NEO_GRB + NEO_KHZ800);
|
||||
|
||||
auto cOff = pixels.Color(0, 0, 0);
|
||||
auto cGreen = pixels.Color(0, 255, 0);
|
||||
auto cRed = pixels.Color(255, 0, 0);
|
||||
auto cBlue = pixels.Color(0, 0, 255);
|
||||
|
||||
|
||||
static void
|
||||
pixelOn(uint32_t c)
|
||||
{
|
||||
pixels.setPixelColor(0, c);
|
||||
pixels.show();
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
pixelOff()
|
||||
{
|
||||
pixels.setPixelColor(0, cOff);
|
||||
pixels.show();
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
start()
|
||||
{
|
||||
pixels.begin();
|
||||
pixels.clear();
|
||||
pixels.show();
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
blink(bool on)
|
||||
{
|
||||
if (on) {
|
||||
for (int i = 10; i < 255; i++) {
|
||||
auto c = pixels.Color(0, (uint8_t)i, 0);
|
||||
pixels.setPixelColor(0, c);
|
||||
pixels.show();
|
||||
delay(4);
|
||||
}
|
||||
on = false;
|
||||
} else {
|
||||
for (int i = 255; i > 9; i--) {
|
||||
auto c = pixels.Color(0, (uint8_t)i, 0);
|
||||
pixels.setPixelColor(0, c);
|
||||
pixels.show();
|
||||
delay(4);
|
||||
}
|
||||
on = true;
|
||||
}
|
||||
|
||||
return on;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}; // namespace neopxl
|
Loading…
Reference in New Issue