A lightweight VM which allows for easy custom programs to be made on the device without having to worry about linking and PIC code and all of that. BSD licensed. See https://bitbucket.org/earlz/lightvm/ for the upstream general purpose repository

Dependents:   MbedConsole

Committer:
earlz
Date:
Fri Apr 12 04:12:59 2013 +0000
Revision:
0:dac6a7d43ed2
Initial import. Upstream changeset 29:8dd470477c0b / tip

Who changed what in which revision?

UserRevisionLine numberNew contents of line
earlz 0:dac6a7d43ed2 1 /**
earlz 0:dac6a7d43ed2 2 <Copyright Header>
earlz 0:dac6a7d43ed2 3 Copyright (c) 2013 Jordan "Earlz" Earls <http://Earlz.net>
earlz 0:dac6a7d43ed2 4 All rights reserved.
earlz 0:dac6a7d43ed2 5
earlz 0:dac6a7d43ed2 6 Redistribution and use in source and binary forms, with or without
earlz 0:dac6a7d43ed2 7 modification, are permitted provided that the following conditions
earlz 0:dac6a7d43ed2 8 are met:
earlz 0:dac6a7d43ed2 9
earlz 0:dac6a7d43ed2 10 1. Redistributions of source code must retain the above copyright
earlz 0:dac6a7d43ed2 11 notice, this list of conditions and the following disclaimer.
earlz 0:dac6a7d43ed2 12 2. Redistributions in binary form must reproduce the above copyright
earlz 0:dac6a7d43ed2 13 notice, this list of conditions and the following disclaimer in the
earlz 0:dac6a7d43ed2 14 documentation and/or other materials provided with the distribution.
earlz 0:dac6a7d43ed2 15 3. The name of the author may not be used to endorse or promote products
earlz 0:dac6a7d43ed2 16 derived from this software without specific prior written permission.
earlz 0:dac6a7d43ed2 17
earlz 0:dac6a7d43ed2 18 THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
earlz 0:dac6a7d43ed2 19 INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
earlz 0:dac6a7d43ed2 20 AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
earlz 0:dac6a7d43ed2 21 THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
earlz 0:dac6a7d43ed2 22 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
earlz 0:dac6a7d43ed2 23 PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
earlz 0:dac6a7d43ed2 24 OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
earlz 0:dac6a7d43ed2 25 WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
earlz 0:dac6a7d43ed2 26 OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
earlz 0:dac6a7d43ed2 27 ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
earlz 0:dac6a7d43ed2 28 </Copyright Header>
earlz 0:dac6a7d43ed2 29 **/
earlz 0:dac6a7d43ed2 30
earlz 0:dac6a7d43ed2 31 #include "lightvm.h"
earlz 0:dac6a7d43ed2 32
earlz 0:dac6a7d43ed2 33 void op16_single_arg(lightvm_state* s, uint16_t op, uint16_t* arg2)
earlz 0:dac6a7d43ed2 34 {
earlz 0:dac6a7d43ed2 35 unsigned int secondary=op & 0xF000 >> 12;
earlz 0:dac6a7d43ed2 36 switch(secondary)
earlz 0:dac6a7d43ed2 37 {
earlz 0:dac6a7d43ed2 38 case 0:
earlz 0:dac6a7d43ed2 39 //push
earlz 0:dac6a7d43ed2 40 lightvm_push(s, *arg2);
earlz 0:dac6a7d43ed2 41 break;
earlz 0:dac6a7d43ed2 42 case 1:
earlz 0:dac6a7d43ed2 43 //pop
earlz 0:dac6a7d43ed2 44 *arg2 = lightvm_pop(s);
earlz 0:dac6a7d43ed2 45 break;
earlz 0:dac6a7d43ed2 46 case 2:
earlz 0:dac6a7d43ed2 47 //not
earlz 0:dac6a7d43ed2 48 *arg2 = ~(*arg2);
earlz 0:dac6a7d43ed2 49 break;
earlz 0:dac6a7d43ed2 50 case 3:
earlz 0:dac6a7d43ed2 51 //unused
earlz 0:dac6a7d43ed2 52 case 4:
earlz 0:dac6a7d43ed2 53 //unused
earlz 0:dac6a7d43ed2 54 case 5:
earlz 0:dac6a7d43ed2 55 //unused
earlz 0:dac6a7d43ed2 56 case 6:
earlz 0:dac6a7d43ed2 57 //xcall?
earlz 0:dac6a7d43ed2 58 case 7:
earlz 0:dac6a7d43ed2 59 //and.eq
earlz 0:dac6a7d43ed2 60 *s->tr &= *s->cr == *arg2;
earlz 0:dac6a7d43ed2 61 break;
earlz 0:dac6a7d43ed2 62 case 8:
earlz 0:dac6a7d43ed2 63 //or.eq
earlz 0:dac6a7d43ed2 64 *s->tr |= *s->cr == *arg2;
earlz 0:dac6a7d43ed2 65 break;
earlz 0:dac6a7d43ed2 66 case 9:
earlz 0:dac6a7d43ed2 67 //and.neq
earlz 0:dac6a7d43ed2 68 *s->tr &= *s->cr != *arg2;
earlz 0:dac6a7d43ed2 69 break;
earlz 0:dac6a7d43ed2 70 case 10:
earlz 0:dac6a7d43ed2 71 //or.neq
earlz 0:dac6a7d43ed2 72 *s->tr |= *s->cr != *arg2;
earlz 0:dac6a7d43ed2 73 break;
earlz 0:dac6a7d43ed2 74 case 11:
earlz 0:dac6a7d43ed2 75 //set TR
earlz 0:dac6a7d43ed2 76 *s->tr = 1;
earlz 0:dac6a7d43ed2 77 break;
earlz 0:dac6a7d43ed2 78 case 12:
earlz 0:dac6a7d43ed2 79 //reset TR
earlz 0:dac6a7d43ed2 80 *s->tr = 0;
earlz 0:dac6a7d43ed2 81 break;
earlz 0:dac6a7d43ed2 82 case 13:
earlz 0:dac6a7d43ed2 83 //load CR
earlz 0:dac6a7d43ed2 84 *s->cr = *arg2;
earlz 0:dac6a7d43ed2 85 break;
earlz 0:dac6a7d43ed2 86 case 14:
earlz 0:dac6a7d43ed2 87 //8.bank PROBABLY NOT
earlz 0:dac6a7d43ed2 88 case 15:
earlz 0:dac6a7d43ed2 89 //unused
earlz 0:dac6a7d43ed2 90 default:
earlz 0:dac6a7d43ed2 91 return;
earlz 0:dac6a7d43ed2 92 }
earlz 0:dac6a7d43ed2 93 return;
earlz 0:dac6a7d43ed2 94 }
earlz 0:dac6a7d43ed2 95