Robin Abbott has given his consent for the following reply to my request for futher information on the ETI BASIC microcontroller to be sent here, so here it is... Nick, Thanks for your letter. I am anxious to distance my latest project from the Stamp as I think it makes the Stamp look a bit sick (Modest as ever !). Although, that said, I think at the same processor speed the Stamp may be faster. It is a BASIC interpreter, it runs 15/16 bit arithmetic, and allows variables which can be in arrays of up to 16 elements, and can be any size from 1 to 8 bits (and 16 bits) and which are packed in memory to save space. Variables can be stored in RAM, or EEPROM (EEPROM variables will hold their values through power down, and can be in arrays of up to 1024 elements). Constants, and constant strings, and arrays of strings are supported to allow messages to be generated.. The language offers a block structure and supports FOR/NEXT/STEP, WHILE/WEND, IF/THEN/GOTO and multi level subroutines and functions. On the larger devices functions will allow parameters to be supplied, and may have local variables. Finally the newer devices support interrupt routines in BASIC, which I have been using for timer applications. For the '64 version I am seriously considering introducing an interrupt driven serial port which would allow serial comms whilst the program is running. Currently I have versions for the '84, '71 and am developing for the '57 and '64 - the latter two will obviously be a superset of the '84 version, and will allow a much larger variable space. . The BASIC module is much bigger than the Stamp, (7x4cm for 18 pin devices), the PCB will be given away free on the front cover of the issue of ETI which hits the streets at the beginning of September. As standard it includes an EEPROM, cheap & cheerful RS232 serial interface with 9 pin D connector, and 5V power supply together with the peripheral interface (PORT B, RTCC etc.). However although the module is large I hope that anyone using the project seriously would embed the PIC and EEPROM within the application rather than using the module. The EEPROM used is a 2K or 8K device, and typically will offer about 300 or 1200 lines of BASIC depending on the code, some lines code up to one byte, some are as many as 15 bytes. The PIC can run at any speed from 4MHz to 20MHz. The total cost of the hardware is about L1 + L3 for the EEPROM + the PIC. The development system runs under Windows, it offers multi-file editing in a project environment, debugging (although only elementary at the moment), error tracking etc, and downloads/verifiies/runs code on the module. Library routines can be built up and added to projects as required. The module can be set to autoboot and run a program on power up. The development system will be given away on the front cover of the issue of ETI which goes out at the beginning of October. If you think there is sufficient interest I could check with ETI and if it is OK with them, I'll e-mail you the development system, help files, and documentation and perhaps you could upload them to PICLIST. At present I think it is mainly bug free (but I thought that about the PIC programmer Windows Software until people started using it !). As for costs, I will be programming PIC's at a standard rate of L15/PIC for all versions, code protected (well I've got to make some recovery for the development !). The source code (and hex code) for the PIC will NOT be available. This will be the only cost in the project - I will be making the development software generally available after ETI publication - probably thru the Microchip bulletin board. I hope in the medium term to sell BASIC modules in kit and pre-built form through the various electronics mags. I also welcome early comments on enhancements for the project, although the '84 and '71 versions have about 5 words of program store free (!), I have all the room in the world in the '57 and '64 devices - and as for the '74..... Anyway my link up with ETI may prevent release of too much early information, but if there is sufficient interest I'll see what can be uploaded before publication. For information I attach a list of keywords for the '84 version. Thanks for your interest, Robin ================================================================================ = ======== List of keywords - some of these are commands, and some are functions which may be used in expressions: Keyword Summary of meaning ======= ================== ; Introduces a comment A[4],B[8],C[8] etc. Arrays of single bit varibles representing port bits A0,A1,A2,A3,B0-B7,C0-C7 etc. Single bit variables representing port bits ADDPORTA,ADDPORTB etc. Address of ports ALIAS name=variable Defines substitute names for variables. ASC(string$) Return ASCII code of first character of string BCHGIF Constant - Port B upper change flag for interrupts CLOCKOUT(PORT,MASK) Produce a high going clock pulse on a port pin CONST Define a constant DEBUG() Update the debugging window on the host PC DEFSERIN Default serial input port definition DEFSEROUT Default serial output port definition DIM var[array].size.[E/L] Define variables and arrays EI(mask) Enable interrupts ELSE Used with IF END Used to end functions and subroutines ENDIF Used with IF FALSE Constant, equal to 0 FOR var=start TO end [STEP value] Loop function FUNC name() Used at start of a function GOTO label Transfers program to a label IF expression THEN Conditional program control IF/THEN/ELSE/ENDIF Conditional program control (block method) INCLUDE Include another source file INTCON Interrupt control register INTIF Constant - Interrupt (B0) flag for interrupts MID$(string$) Shorten a string MONITOR() Return to monitor control from the PC NEXT Used with FOR (note no variable is supplied) OK() Debugging only (advanced) OPTIONS(value) Set the PIC options register PEEK(address) Return contents of PIC memory address POKE(address,value) Set the contents of PIC memory PORT Array of 8 bit variables representing ports on the PIC PORTA,PORTB etc. Variables representing ports on the PIC REM Remark statement RETURN value Returns a value from a function RTCC Real time clock register SERIN(port,wait) Read a byte using serial protocol SEROUT(value,port) Write byte to port using serial protocol SEROUTSTRING(string,port) Write a string to a port using serial protocol STEP Used with FOR SUB name() Introduces a subroutine TIMERIF Constant - Timer flag for interrupts TRISA(value),TRISB(value), etc. Define output pins on port TRUE Constant, set to 1 TYPEFUNC name() Defines a function TYPESUB name() Defines a subroutine WEND Used with WHILE WHILE expression Loop control Operators : ======== An operator is used in an expression to perform some action on one or two numbers or strings. The operators are presented here in order of priority. For instance Multiply has a higher priority than Add, and therefore the expressions: 3*4+7 7+3*4 both have the same result : 19. The available operators are shown here in groups, each group has an identical priority for evaluation: ( Bracket operations ) NOT logical not - if the number is zero then return 1, otherwise return 0. - Negate a number ~ Bitwise invert * Multiply two numbers / Divide two numbers % Return the modulus when one number is divided by another + Add two numbers - Subtract two numbers & Bitwise AND | Bitwise OR ^ Bitwise XOR AND logical and OR logical or = compare two numbers, return TRUE if equal >= compare two numbers, return TRUE if first is >=the second. <= compare two numbers, return TRUE if first is <=the second. > compare two numbers, return TRUE if first is >the second. < compare two numbers, return TRUE if first is compare two numbers, return TRUE if first is not equal to the second. != compare two numbers, return TRUE if first is not equal to the second. ================== RFC 822 Headers ==================