Skip to content

Commit

Permalink
LED test is confirmed
Browse files Browse the repository at this point in the history
  • Loading branch information
kishima committed Sep 2, 2018
1 parent 657e74d commit 88cffd8
Show file tree
Hide file tree
Showing 9 changed files with 91 additions and 74 deletions.
1 change: 1 addition & 0 deletions src/avr_access.cpp
Expand Up @@ -128,6 +128,7 @@ mrb_func_t find_c_funcs(mrb_proc* proc){

mrb_proc *find_static_procs(mrb_sym class_sym_id, mrb_sym sym_id){
short addr=0;
//cprintf(" class %d %d\n",class_sym_id,sym_id);
switch(class_sym_id){
case MRBC_SSYM_Object:
addr = (short)find_func_no_by_sym_id( mmruby_code_proc_table_Object , sym_id);
Expand Down
6 changes: 5 additions & 1 deletion src/class.cpp
Expand Up @@ -7,6 +7,7 @@
#include "alloc.h"
#include "c_object.h"
#include "c_string.h"
#include "c_fixnum.h"
#include "ext.h"
#include "global.h"
#include "symbol.h"
Expand Down Expand Up @@ -62,15 +63,17 @@ mrb_class *find_class_by_object(mrb_object *obj)
mrb_proc *find_method(mrb_value recv, mrb_sym sym_id)
{
mrb_class *cls = find_class_by_object(&recv);
//cprintf("cls=%p\n",cls);

while( cls != 0 ) {
//For basic class
//search static procs from FROM.
mrb_proc* proc = find_static_procs(cls->sym_id,sym_id);
if(0!=proc) return proc;

//dynaic procs
proc = cls->procs;
while( proc != 0 ) {
//cprintf(" ? %d %d\n",proc->sym_id,sym_id);
if( proc->sym_id == sym_id ) {
return proc;
}
Expand Down Expand Up @@ -125,6 +128,7 @@ void mrbc_init_class(void)
{
mrbc_init_class_object();
mrbc_init_class_string();
mrbc_init_class_fixnum();
mrbc_init_class_arduino();

//TODO
Expand Down
125 changes: 66 additions & 59 deletions src/code.h
@@ -1,33 +1,32 @@
/* Irep table */
const unsigned char mmruby_code_irep_000[] PROGMEM= {
0x00,0x1D,0x14,0x07,0x01,0x80,0x00,0x06,0x02,0x00,0x00,0x3D,0x01,0x80,0x00,0xA0,
0x00,0x1C,0x0B,0x09,0x01,0x80,0x00,0x06,0x02,0x00,0x00,0x3D,0x01,0x80,0x00,0xA0,
0x00,0xC0,0x06,0x03,0x01,0x80,0x00,0x91,0x02,0x00,0x40,0x01,0x02,0x80,0x01,0x84,
0x01,0x80,0x81,0x20,0x01,0x3F,0xFF,0x83,0x00,0x40,0x07,0x97,0x01,0x80,0x80,0x01,
0x01,0x81,0x00,0x20,0x01,0x00,0xC0,0x01,0x01,0x80,0x00,0x06,0x02,0x00,0x00,0xBD,
0x02,0x80,0x80,0x01,0x02,0x01,0x40,0x3E,0x01,0x80,0x00,0xA0,0x01,0x80,0x00,0x91,
0x02,0x00,0x40,0x01,0x02,0x80,0x80,0x01,0x01,0x81,0x41,0x20,0x01,0x80,0x00,0x91,
0x02,0x40,0xF9,0x83,0x01,0x81,0x80,0xA0,0x01,0x80,0x00,0x07,0x01,0xBF,0xF7,0x98,
0x01,0x80,0x00,0x05,0x00,0x00,0x00,0x4A,0x00,0x00,0x08,0x4C,0x45,0x44,0x20,0x54,
0x65,0x73,0x74,0x00,0x00,0x03,0x73,0x74,0x3D,0x00,0x00,0x00,0x15,0x0C,0x16,0x17,
0x18,0x19,0x1A,
0x01,0x80,0x81,0x20,0x01,0x00,0x02,0x04,0x00,0x40,0x07,0x17,0x01,0x80,0x80,0x01,
0x02,0x00,0x02,0x04,0x01,0x81,0x40,0xB2,0x01,0xC0,0x01,0x19,0x01,0x00,0x03,0x04,
0x00,0x40,0x00,0x97,0x01,0x00,0x02,0x04,0x01,0x80,0x00,0x91,0x02,0x00,0x40,0x01,
0x02,0x80,0x80,0x01,0x01,0x81,0xC1,0x20,0x01,0x80,0x00,0x91,0x02,0x40,0xF9,0x83,
0x01,0x82,0x00,0xA0,0x01,0x80,0x00,0x07,0x01,0xBF,0xF8,0x18,0x01,0x80,0x00,0x05,
0x00,0x00,0x00,0x4A,0x00,0x00,0x08,0x4C,0x45,0x44,0x20,0x54,0x65,0x73,0x74,0x15,
0x0C,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,
};
const unsigned char* const mmruby_code_irep_table[] PROGMEM = {
mmruby_code_irep_000,
};

/* Proc table */
const unsigned char mmruby_code_proc_table_size PROGMEM = 29;
const unsigned char mmruby_code_proc_table_size PROGMEM = 30;


const uint8_t mmruby_code_proc_table_Object[] PROGMEM = {
21,1,
24,2,
27,3,
28,4,
29,5,
30,6,
31,7,
32,8,
29,2,
30,3,
31,4,
32,5,
33,6,
34,7,
35,8,
0
};

Expand All @@ -53,27 +52,27 @@ const uint8_t mmruby_code_proc_table_Array[] PROGMEM = {

const uint8_t mmruby_code_proc_table_Fixnum[] PROGMEM = {
16,9,
33,10,
34,11,
35,12,
36,13,
37,14,
38,15,
39,16,
36,10,
37,11,
38,12,
39,13,
40,14,
41,15,
42,16,
15,17,
20,18,
40,19,
41,20,
42,21,
43,22,
29,23,
43,19,
44,20,
45,21,
46,22,
32,23,
0
};

const uint8_t mmruby_code_proc_table_String[] PROGMEM = {
13,24,
14,25,
44,26,
47,26,
0
};

Expand All @@ -86,9 +85,10 @@ const uint8_t mmruby_code_proc_table_Range[] PROGMEM = {
};

const uint8_t mmruby_code_proc_table_Arduino[] PROGMEM = {
22,27,
25,28,
45,29,
28,27,
22,28,
27,29,
48,30,
0
};

Expand Down Expand Up @@ -121,17 +121,18 @@ inline mrb_func_t find_c_funcs_by_no(short no){
case 24: func = c_string_add; break;
case 25: func = c_string_eql; break;
case 26: func = c_string_size; break;
case 27: func = class_arduino_pin_mode; break;
case 28: func = class_arduino_digital_write; break;
case 29: func = class_arduino_digital_read; break;
case 27: func = class_arduino_delay; break;
case 28: func = class_arduino_pin_mode; break;
case 29: func = class_arduino_digital_write; break;
case 30: func = class_arduino_digital_read; break;
default: break;
}
return func;
}


/* Symbol table */
const unsigned char mmruby_code_symbol_table_size PROGMEM = 46;
const unsigned char mmruby_code_symbol_table_size PROGMEM = 49;
const char mmruby_code_symbol_ref00[] PROGMEM ="";
const char mmruby_code_symbol_ref01[] PROGMEM ="Object";
const char mmruby_code_symbol_ref02[] PROGMEM ="String";
Expand All @@ -156,28 +157,31 @@ const char mmruby_code_symbol_ref14[] PROGMEM =">>";
const char mmruby_code_symbol_ref15[] PROGMEM ="puts";
const char mmruby_code_symbol_ref16[] PROGMEM ="pin_mode";
const char mmruby_code_symbol_ref17[] PROGMEM ="OUTPUT";
const char mmruby_code_symbol_ref18[] PROGMEM ="!";
const char mmruby_code_symbol_ref19[] PROGMEM ="digital_write";
const char mmruby_code_symbol_ref1a[] PROGMEM ="delay";
const char mmruby_code_symbol_ref1b[] PROGMEM ="!=";
const char mmruby_code_symbol_ref1c[] PROGMEM ="<=>";
const char mmruby_code_symbol_ref1d[] PROGMEM ="to_s";
const char mmruby_code_symbol_ref1e[] PROGMEM ="class";
const char mmruby_code_symbol_ref1f[] PROGMEM ="attr_reader";
const char mmruby_code_symbol_ref20[] PROGMEM ="attr_accessor";
const char mmruby_code_symbol_ref21[] PROGMEM ="-@";
const char mmruby_code_symbol_ref22[] PROGMEM ="**";
const char mmruby_code_symbol_ref23[] PROGMEM ="%";
const char mmruby_code_symbol_ref24[] PROGMEM ="&";
const char mmruby_code_symbol_ref25[] PROGMEM ="|";
const char mmruby_code_symbol_ref26[] PROGMEM ="^";
const char mmruby_code_symbol_ref27[] PROGMEM ="~";
const char mmruby_code_symbol_ref28[] PROGMEM ="abs";
const char mmruby_code_symbol_ref29[] PROGMEM ="times";
const char mmruby_code_symbol_ref2a[] PROGMEM ="chr";
const char mmruby_code_symbol_ref2b[] PROGMEM ="to_i";
const char mmruby_code_symbol_ref2c[] PROGMEM ="size";
const char mmruby_code_symbol_ref2d[] PROGMEM ="digital_read";
const char mmruby_code_symbol_ref18[] PROGMEM ="LOW";
const char mmruby_code_symbol_ref19[] PROGMEM ="==";
const char mmruby_code_symbol_ref1a[] PROGMEM ="HIGH";
const char mmruby_code_symbol_ref1b[] PROGMEM ="digital_write";
const char mmruby_code_symbol_ref1c[] PROGMEM ="delay";
const char mmruby_code_symbol_ref1d[] PROGMEM ="!";
const char mmruby_code_symbol_ref1e[] PROGMEM ="!=";
const char mmruby_code_symbol_ref1f[] PROGMEM ="<=>";
const char mmruby_code_symbol_ref20[] PROGMEM ="to_s";
const char mmruby_code_symbol_ref21[] PROGMEM ="class";
const char mmruby_code_symbol_ref22[] PROGMEM ="attr_reader";
const char mmruby_code_symbol_ref23[] PROGMEM ="attr_accessor";
const char mmruby_code_symbol_ref24[] PROGMEM ="-@";
const char mmruby_code_symbol_ref25[] PROGMEM ="**";
const char mmruby_code_symbol_ref26[] PROGMEM ="%";
const char mmruby_code_symbol_ref27[] PROGMEM ="&";
const char mmruby_code_symbol_ref28[] PROGMEM ="|";
const char mmruby_code_symbol_ref29[] PROGMEM ="^";
const char mmruby_code_symbol_ref2a[] PROGMEM ="~";
const char mmruby_code_symbol_ref2b[] PROGMEM ="abs";
const char mmruby_code_symbol_ref2c[] PROGMEM ="times";
const char mmruby_code_symbol_ref2d[] PROGMEM ="chr";
const char mmruby_code_symbol_ref2e[] PROGMEM ="to_i";
const char mmruby_code_symbol_ref2f[] PROGMEM ="size";
const char mmruby_code_symbol_ref30[] PROGMEM ="digital_read";

const char* const mmruby_code_symbol_table[] PROGMEM = {
mmruby_code_symbol_ref00,
Expand Down Expand Up @@ -226,6 +230,9 @@ const char* const mmruby_code_symbol_table[] PROGMEM = {
mmruby_code_symbol_ref2b,
mmruby_code_symbol_ref2c,
mmruby_code_symbol_ref2d,
mmruby_code_symbol_ref2e,
mmruby_code_symbol_ref2f,
mmruby_code_symbol_ref30,
};

/* Symbol IDs */
Expand Down
11 changes: 4 additions & 7 deletions src/ext_arduino.cpp
Expand Up @@ -16,8 +16,9 @@

mrb_class *mrbc_class_arduino;

static void class_arduino_delay(mrb_mvm *vm, mrb_value *v, int argc )
{
void class_arduino_delay(mrb_mvm *vm, mrb_value *v, int argc )
{
DEBUG_FPRINTLN(">delay");
int d=GET_INT_ARG(1);
delay(d);
SET_TRUE_RETURN();
Expand Down Expand Up @@ -49,16 +50,13 @@ static uint8_t sym_to_siglevel(mrb_sym sym_in){

void class_arduino_pin_mode(mrb_mvm *vm, mrb_value *v, int argc )
{
DEBUG_FPRINT("PIN MODE");
int pin = 0;
if(GET_TT_ARG(1) == MRB_TT_FIXNUM){
pin = GET_INT_ARG(1);
}else{
SET_FALSE_RETURN();
return;
}
DEBUG_FPRINT("pin=");
DEBUG_PRINTLN(pin);

mrb_sym sym_in = 0;
if(GET_TT_ARG(2) == MRB_TT_SYMBOL){
Expand All @@ -70,8 +68,6 @@ void class_arduino_pin_mode(mrb_mvm *vm, mrb_value *v, int argc )
return;
}
uint8_t mode = sym_to_pinmode( sym_in );
DEBUG_FPRINT("mode=");
DEBUG_PRINTLN(mode);

pinMode(pin,mode);
SET_TRUE_RETURN();
Expand All @@ -96,6 +92,7 @@ void class_arduino_digital_write(mrb_mvm *vm, mrb_value *v, int argc )
return;
}
uint8_t sig = sym_to_siglevel( sym_in );
//cprintf("dwrite %d %d\n",pin,sig);

digitalWrite(pin,sig);
SET_TRUE_RETURN();
Expand Down
1 change: 1 addition & 0 deletions src/ext_arduino.h
Expand Up @@ -4,6 +4,7 @@
void mrbc_init_class_arduino();

//C functions for static proc table
void class_arduino_delay(mrb_mvm *vm, mrb_value *v, int argc );
void class_arduino_pin_mode(mrb_mvm *vm, mrb_value *v, int argc );
void class_arduino_digital_write(mrb_mvm *vm, mrb_value *v, int argc );
void class_arduino_digital_read(mrb_mvm *vm, mrb_value *v, int argc );
Expand Down
10 changes: 6 additions & 4 deletions src/vm.cpp
Expand Up @@ -79,7 +79,7 @@ void mrbc_pop_callinfo(mrb_mvm *vm)
//--------------------------------
// OPCODE
//--------------------------------
#define SHOW_OPCODE
//#define SHOW_OPCODE
#ifdef SHOW_OPCODE
inline void show_register(mrb_value v){
switch(v.tt){
Expand Down Expand Up @@ -453,7 +453,7 @@ inline static int op_send( mrb_mvm *vm, uint32_t code, mrb_value *regs )
break;
}

DEBUG_FPRINTLN("find medhod");delay(500);
//DEBUG_FPRINTLN("find medhod");delay(500);
mrb_sym sym_id = get_irep_symbol_id(vm->pc_irep,rb);
mrb_proc *m = find_method(recv, sym_id);

Expand All @@ -464,7 +464,7 @@ inline static int op_send( mrb_mvm *vm, uint32_t code, mrb_value *regs )

if(IS_PGM(m)){
mrb_func_t func = find_c_funcs(m);
cprintf("pgm %d %p\n",m,func);delay(500);
//cprintf("pgm %d %p\n",m,func);delay(500);
func(vm, regs + ra, rc);
int release_reg = ra+rc+1;
while( release_reg <= bidx ) {
Expand Down Expand Up @@ -1047,7 +1047,9 @@ void run_vm(void){
cprintf("UNKNOWN >> %02X\n",opcode);
break;
}
hal_delay(1000);
#ifdef SHOW_OPCODE
hal_delay(500);
#endif
} while( !vm->flag_preemption );
DEBUG_FPRINT("<VM END>\n");

Expand Down
Binary file modified tool/led.mrb
Binary file not shown.
10 changes: 7 additions & 3 deletions tool/led.rb
@@ -1,10 +1,14 @@
puts "LED Test"
pin = 13
Arduino.pin_mode(pin,:OUTPUT)
st = 0
st = :LOW
while(true) do
st = !st
puts "st=#{st}"
if(st==:LOW)
st=:HIGH
else
st=:LOW
end
#puts "st=#{st}"
Arduino.digital_write(pin,st)
Arduino.delay(500)
end
Expand Down
1 change: 1 addition & 0 deletions tool/static_procs.h
Expand Up @@ -41,6 +41,7 @@ static const char* const static_procs[] = {
"String","+","c_string_add",
"String","===","c_string_eql",
"String","size","c_string_size",
"Arduino","delay","class_arduino_delay",
"Arduino","pin_mode","class_arduino_pin_mode",
"Arduino","digital_write","class_arduino_digital_write",
"Arduino","digital_read","class_arduino_digital_read",
Expand Down

0 comments on commit 88cffd8

Please sign in to comment.