РОБЕРТА (тема закрыта)
Moderator: Shaos
-
- Admin
- Posts: 24008
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
РОБЕРТА (тема закрыта)
Из следующих топиков:
viewtopic.php?t=7791
viewtopic.php?t=8286
вытекает данная тема.
Цели создания системы ROBERTA:
1) получение текстовой оболочки со встроенным интерпретатором для nedoPC SDK
2) запуск сети распределенных вычислений на основе виртуальных "роботов"
3) возрождение проектов Virtburg и Robot Warfare 1
Новый вариант расшифровки термина ROBERTA: Real Object Basic Environment Reflecting Ttransactional Architecture (основная среда настоящих объектов отражающая транзакционную архитектуру).
viewtopic.php?t=7791
viewtopic.php?t=8286
вытекает данная тема.
Цели создания системы ROBERTA:
1) получение текстовой оболочки со встроенным интерпретатором для nedoPC SDK
2) запуск сети распределенных вычислений на основе виртуальных "роботов"
3) возрождение проектов Virtburg и Robot Warfare 1
Новый вариант расшифровки термина ROBERTA: Real Object Basic Environment Reflecting Ttransactional Architecture (основная среда настоящих объектов отражающая транзакционную архитектуру).
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Admin
- Posts: 24008
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Описание байткода RW0 (ROBERTA):
Code: Select all
bytecode.txt - Roberta bytecode description (18 Dec 2005)
It is subset of RW0-bytecode (http://rwar.net)
Compatible with RW1C v2.1.4 and newer (http://rwar.net)
Copyright (c) 1998-2005, Alexander A. Shabarshin
<><><><><><><><><><><><><><><><><><><><><><><><><
File header:
------------
#0000 - Identifier of Roberta code (=2)
#0001 - Sum of bytes from 0005 to end
#0002 /
#0003 - Offset to entry point (START) in bytes
#0004 /
#0005 - Length of the program name
#0006 - Zero-terminated string of program name
#???? - Length of data in words (2 bytes)
#???? - Length of code in bytes (2 bytes)
Numbers and variables:
----------------------
B - byte (1 byte)
W - word (2 bytes - low byte + high byte)
M - variable or constant (3-5 bytes):
0x00 W - signed short integer (-32K..+32K)
0x01 W - variable in W cell (array[constant] is compiled to it too)
0x02 W1 W2 - array element (W1-begin of array, W2-variables with offset)
Registers are variables (0x01 0x?? 0xFF) with the addresses:
0xFF00 - X // register for relative X value
0xFF01 - Y // register for relative Y value
0xFF02 - D // register for distance value
0xFF03 - N // register for object value
0xFF04 - K // register for additional value
0xFF05 - R // register for random value
0xFF06 - T // register for timer value
0xFF07 - E // register for our energy value
0xFF08 - M // register for our missiles number
0xFF09 - I // register for order number of robot
0xFF0A - A // A-register for read/write
0xFF0B - B // B-register for read/write
0xFF0C - C // C-register for read/write
0xFF0D - P // register for command pointer
0xFF0E - L // register for last result
0xFF0F - S // register for stack length
0xFF1E - H // register for high word of last result
Bytecode:
---------
0x01 W1 W2 // DEF arr[len] (W1-offset to array start, W2-length)
0x02 W1 W2 W3 ... // DEF arr[len]={list} (W1/W2-see above, W3-length of list)
0x20 M1 M2 // M1=M2 - initialize variable M1 by value M2
0x33 // RET - return from subprogram
0x37 ... 0 // SAY "string and &variables "
0x40 B ... // var=expr (B bytes) - long expression (see below)
0x41 M1 M2 // IFY var1 var2 - jump to address var2 if var1!=0
0x42 M1 M2 // IFN var1 var2 - jump to address var2 if var1==0
0x43 M // GOTO var - jump to address var
0x44 M // CALL var - call subprogram in address var
0x61 M1 M2 // SEND var1 var2 - send code var1 to robot var2
0x62 M // RECV avar - receive code and save it to [avar]
0x63 // POP - take one value from stack and put it to L
0x70 M1 M2 // COPYP avar1 avar2 - copy packet [avar2] to [avar1]
0x71 M1 M2 // SENDP avar var - send packet [avar] to robot var
0x72 M // RECVP avar - receive packet and save it to [avar]
0x73 // PUSH - put value of L to stack
0x7F M // COMMAND var - high-level command (see commands.txt)
0xFF // END - end of program (should be last code)
Expressions
-----------
uses var,label,(,),+,-,*,/,%,&,|,^,~,!,&&,||,=,==,>,<,>=,<=,!=,<<,>>,?:
0x80 // && A,B -> A&&B
0x81 // || A,B -> A||B
0x90 // == A,B -> A==B
0x91 // != A,B -> A!=B
0x92 // > A,B -> A>B
0x93 // < A,B -> A<B
0x94 // >= A,B -> A>=B
0x95 // <= A,B -> A<=B
0xA0 // + A,B -> A+B
0xA1 // - A,B -> A-B
0xB0 // * A,B -> A*B
0xB1 // / A,B -> A/B
0xB2 // % A,B -> A%B
0xC0 // & A,B -> A&B
0xC1 // | A,B -> A|B
0xC2 // ^ A,B -> A^B
0xD0 // >> A,B -> A>>B
0xD1 // << A,B -> A<<B
0xE0 // - A -> -A (negative)
0xE1 // ~ A -> ~A (bit inverse)
0xE2 // ! A -> !A (logic NOT)
0xF0 // ?: A,B,C -> A?B:C
0xF1 // DUP A -> A,A
0xF2 // ROL A,B -> B,A
0xF3 // LOAD A -> mem[A]
0xF4 // SAVE A,B -> . (mem[A]=B)
0xF5 W // PUSH W . -> W
0xF6 // [] A,B -> A[B]
Debug info
----------
Debug info is added after program bytecode using option -d in RW1C.
After code compiler writes zero-terminated word "DEBUG" and list
of source files in form zero-terminated names. Two zero bytes
identify end of the list.
Then we have list of variables:
? bytes - NAME,0
2 bytes - size of variable in words
2 bytes - index of variable
Then we have a number of 5-bytes structures:
1 byte - index of source file
2 bytes - number of line in the source file
2 bytes - address in code
End of structures is FF byte.
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Admin
- Posts: 24008
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Язык программирования RW1 предназначен для работы со следующими платформами:
RW1P0 - бои роботов (Robot Warfare 1);
RW1P1 - язык и среда программирования (ROBERTA);
RW1P2 - компилятор для микрокомпьютеров (NedoPC SDK);
RW1P3 - язык программирования событий в 3D-среде (Virtburg);
Дополнительные команды для расширенных RW1-платформ:
PIXEL:
RW1P0 - пока игнорируется, но может быть использовано для изменения картинки робота
RW1P1 - игнорируется
RW1P2 - установить графическую точку текущим цветом на экран (а может и в текущий тайл)
RW1P3 - установить графическую точку текущим цветом в текущую текстуру
FILL:
RW1P0 - пока игнорируется, но может быть использовано для изменения картинки робота
RW1P1 - игнорируется
RW1P2 - пока игнорируется, но может быть использовано для заливки экрана (а может и текущего тайла)
RW1P3 - заполнить прямоугольник от ранее установленной точки текущим цветом в текущую текстуру
TEXT:
RW1P0 - игнорируется
RW1P1 - игнорируется
RW1P2 - передаётся в генерируемый ассемблерный код без изменений
RW1P3 - написать текст текущим цветом на текущей текстуре
PLANE:
RW1P0 - игнорируется
RW1P1 - игнорируется
RW1P2 - пока игнорируется, но может быть использовано для выбора текущего тайла для редактирования
RW1P3 - выбрать текстуру для редактирования (назначить текущей)
COLOR:
RW1P0 - пока игнорируется, но может быть использовано для выбора текущего цвета для рисования на роботе
RW1P1 - пока игнорируется, но может быть использовано для установки цвета выводимого текста
RW1P2 - устанавливает текущий цвет для рисования
RW1P3 - устанавливает текущий цвет для рисования
SELECT:
RW1P0 - игнорируется
RW1P1 - пока игнорируется, но может быть использовано для перемещения курсора
RW1P2 - выбирает клетку для дальнейшей установки туда тайла
RW1P3 - выбирает клетку поля для дальнейшей работы с ней
SET:
RW1P0 - игнорируется
RW1P1 - игнорируется
RW1P2 - устанавливает тайл в ранее выбранную клетку экрана (второй аргумент игноируется)
RW1P3 - устанавливает текстуру в ранее выбранную клетку поля с указанием стороны (второй аргумент)
RW1P0 - бои роботов (Robot Warfare 1);
RW1P1 - язык и среда программирования (ROBERTA);
RW1P2 - компилятор для микрокомпьютеров (NedoPC SDK);
RW1P3 - язык программирования событий в 3D-среде (Virtburg);
Дополнительные команды для расширенных RW1-платформ:
Code: Select all
0x64 M1 M2 // PIXEL var_x var_y
0x65 M1 M2 // FILL var_w var_h
0x66 ... // TEXT "string"
0x67 M // PLANE var_p
0x68 M1 // COLOR var_color
0x69 M1 M2 // SELECT var_col var_row
0x6A M1 M2 // SET var_tile var_optional
RW1P0 - пока игнорируется, но может быть использовано для изменения картинки робота
RW1P1 - игнорируется
RW1P2 - установить графическую точку текущим цветом на экран (а может и в текущий тайл)
RW1P3 - установить графическую точку текущим цветом в текущую текстуру
FILL:
RW1P0 - пока игнорируется, но может быть использовано для изменения картинки робота
RW1P1 - игнорируется
RW1P2 - пока игнорируется, но может быть использовано для заливки экрана (а может и текущего тайла)
RW1P3 - заполнить прямоугольник от ранее установленной точки текущим цветом в текущую текстуру
TEXT:
RW1P0 - игнорируется
RW1P1 - игнорируется
RW1P2 - передаётся в генерируемый ассемблерный код без изменений
RW1P3 - написать текст текущим цветом на текущей текстуре
PLANE:
RW1P0 - игнорируется
RW1P1 - игнорируется
RW1P2 - пока игнорируется, но может быть использовано для выбора текущего тайла для редактирования
RW1P3 - выбрать текстуру для редактирования (назначить текущей)
COLOR:
RW1P0 - пока игнорируется, но может быть использовано для выбора текущего цвета для рисования на роботе
RW1P1 - пока игнорируется, но может быть использовано для установки цвета выводимого текста
RW1P2 - устанавливает текущий цвет для рисования
RW1P3 - устанавливает текущий цвет для рисования
SELECT:
RW1P0 - игнорируется
RW1P1 - пока игнорируется, но может быть использовано для перемещения курсора
RW1P2 - выбирает клетку для дальнейшей установки туда тайла
RW1P3 - выбирает клетку поля для дальнейшей работы с ней
SET:
RW1P0 - игнорируется
RW1P1 - игнорируется
RW1P2 - устанавливает тайл в ранее выбранную клетку экрана (второй аргумент игноируется)
RW1P3 - устанавливает текстуру в ранее выбранную клетку поля с указанием стороны (второй аргумент)
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Admin
- Posts: 24008
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
В классическом варианте RW1P0 есть ещё команды
которые не имеют абсолютно никакого смысла для всех остальных платформ
P.S. Также есть набор устаревших команд, которые я приводить уже не буду, т.к. они даже компилятором давно не поддерживаются...
Code: Select all
0x34 // STEP
0x35 // LEFT
0x36 // RIGHT
0x3A M // ACT var (FRONT=0,RIGHT=1,BACK=2,LEFT=3)
0x3B // SPY
0x3C M // RADAR var
P.S. Также есть набор устаревших команд, которые я приводить уже не буду, т.к. они даже компилятором давно не поддерживаются...
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Supreme God
- Posts: 16680
- Joined: 21 Oct 2009 08:08
- Location: Россия
Гыыыыы... а я знаю другую Роберту...
это жена Кена Вильямса из Сьерры.
Ну оооооочень! скажу я, неглупая дама!!!


Ну оооооочень! скажу я, неглупая дама!!!

iLavr
-
- Admin
- Posts: 24008
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
На самом деле я пытался их заюзать в одной из реализаций - STEP,LEFT,RIGHT могут перемещать курсор. RADAR также можно заюзать - для поиска символов на экране например.Shaos wrote:В классическом варианте RW1P0 есть ещё командыкоторые не имеют абсолютно никакого смысла для всех остальных платформCode: Select all
0x34 // STEP 0x35 // LEFT 0x36 // RIGHT 0x3A M // ACT var (FRONT=0,RIGHT=1,BACK=2,LEFT=3) 0x3B // SPY 0x3C M // RADAR var
P.S. Также есть набор устаревших команд, которые я приводить уже не буду, т.к. они даже компилятором давно не поддерживаются...
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Admin
- Posts: 24008
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Вспоминая идеи скриптовго движка RW1P4 для микроконтроллеров, который я в том числе желал использовать для управления настоящими физическими роботами, можно предложить использовать команды STEP, LEFT, RIGHT,ACT (и даже RADAR и SPY) по прямому назначению. Но эти команды "медленные" и не хотелось бы впустую простаивать процессором пока будем ждать полного поворота на 90 градусов или шага робота - возможно включить режим параллельного исполнения, когда "физическая" команда (скажем LEFT) мгновенно возвращает управление, а момент когда команда завершит своё исполнение можно будет узнать путём чтения некоего регистра либо путём ожидания некоего евента от системы - также можно допустить засылку на исполнение пачки команд - например LEFT;LEFT запускает поворот робота на 180 градусов, но возвращает управление мгновенно...Shaos wrote:На самом деле я пытался их заюзать в одной из реализаций - STEP,LEFT,RIGHT могут перемещать курсор. RADAR также можно заюзать - для поиска символов на экране например.Shaos wrote:В классическом варианте RW1P0 есть ещё командыкоторые не имеют абсолютно никакого смысла для всех остальных платформCode: Select all
0x34 // STEP 0x35 // LEFT 0x36 // RIGHT 0x3A M // ACT var (FRONT=0,RIGHT=1,BACK=2,LEFT=3) 0x3B // SPY 0x3C M // RADAR var
P.S. Также есть набор устаревших команд, которые я приводить уже не буду, т.к. они даже компилятором давно не поддерживаются...
P.S. Эти "физические" команды заполняют несколько регистров результатами своей работы, соответственно если следом за командой идёт чтение из такого регистра, то выполнение скрипта надо остановить, пока команда не закончит своё исполнение и регистр не поменяет своего значения на правильное.
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Admin
- Posts: 24008
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: ROBERTA
Вобщем наверное так по именам будет:Shaos wrote:Из следующих топиков:
viewtopic.php?t=7791
viewtopic.php?t=8286
вытекает данная тема.
Цели создания системы ROBERTA:
1) получение текстовой оболочки со встроенным интерпретатором для NedoPC SDK
2) запуск сети распределенных вычислений на основе виртуальных "роботов"
3) возрождение проектов Virtburg и Robot Warfare 1
Новый вариант расшифровки термина ROBERTA: Real Object Basic Environment Reflecting Ttransactional Architecture (основная среда настоящих объектов отражающая транзакционную архитектуру).
ROBERTA - язык (вместо RW1) и интерпретатор будут называться так;
ROBERTO - кодогенератор в код целевой платформы (вместо RW0COMP);
ROBERTINO - плата и среда разработки для её программирования ( по типу ардуино ; )
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Admin
- Posts: 24008
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: ROBERTA
ААААА - недобрые люди зарегистрировали торговую марку "Open Roberta", которая покрывает кучу всего, включая опен-сорцных роботов!Shaos wrote:Вобщем наверное так по именам будет:Shaos wrote:Из следующих топиков:
viewtopic.php?t=7791
viewtopic.php?t=8286
вытекает данная тема.
Цели создания системы ROBERTA:
1) получение текстовой оболочки со встроенным интерпретатором для NedoPC SDK
2) запуск сети распределенных вычислений на основе виртуальных "роботов"
3) возрождение проектов Virtburg и Robot Warfare 1
Новый вариант расшифровки термина ROBERTA: Real Object Basic Environment Reflecting Ttransactional Architecture (основная среда настоящих объектов отражающая транзакционную архитектуру).
ROBERTA - язык (вместо RW1) и интерпретатор будут называться так;
ROBERTO - кодогенератор в код целевой платформы (вместо RW0COMP);
ROBERTINO - плата и среда разработки для её программирования ( по типу ардуино ; )

https://www.open-roberta.org/
Я про это всё узнал вот из этой статьи

http://hackaday.com/2016/05/11/open-robots-with-open-roberta/
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Supreme God
- Posts: 16680
- Joined: 21 Oct 2009 08:08
- Location: Россия
Re: ROBERTA
Ну срочно застолби тогда ROBERTO или ROBERTINO, раз уж ( по типу ардуино ; )...Shaos wrote:ААААА - недобрые люди зарегистрировали торговую марку "Open Roberta", которая покрывает кучу всего, включая опен-сорцных роботов!![]()
iLavr
-
- Admin
- Posts: 24008
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: ROBERTA
Да не - я пожалуй тогда совсем отменю это направлениеLavr wrote:Ну срочно застолби тогда ROBERTO или ROBERTINO, раз уж ( по типу ардуино ; )...Shaos wrote:ААААА - недобрые люди зарегистрировали торговую марку "Open Roberta", которая покрывает кучу всего, включая опен-сорцных роботов!![]()

Язык как и раньше будет называться RW1...
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Supreme God
- Posts: 16680
- Joined: 21 Oct 2009 08:08
- Location: Россия
Re: ROBERTA
Честно говоря, ROBERTINO звучало красиво.. Типа:"Как вы яхту назовете, так она и..."
ROBERTINO Ролэтти
А RW1 - это типа как R2-D2 и C-3PO...
ROBERTINO Ролэтти

А RW1 - это типа как R2-D2 и C-3PO...

iLavr
-
- Admin
- Posts: 24008
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: ROBERTA
Ну ок - тогда оставляем ROBERTINO как слово для обозначения платы и среды разработки? 
ROBRTA вместе с ROBERTO идут лесом, а RW1 можно переименовать скажем в Robby (хотя кто-то может сказать, что это подражание Ruby ; )
С другой стороны RW1 является основным языком в nedoPC SDK - поэтому его можно переименовать скажем в nedoC и начать потихоньку навешивать на него C-фичи

ROBRTA вместе с ROBERTO идут лесом, а RW1 можно переименовать скажем в Robby (хотя кто-то может сказать, что это подражание Ruby ; )
С другой стороны RW1 является основным языком в nedoPC SDK - поэтому его можно переименовать скажем в nedoC и начать потихоньку навешивать на него C-фичи

Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Admin
- Posts: 24008
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: ROBERTA
От этой темы отпочковано 2 новые темы:
- про расширение языка viewtopic.php?f=46&t=11565
- про реализацию в браузере viewtopic.php?f=46&t=11562
А текущая тема закрывается, т.к. слово ROBERTA применительно к роботам я использовать не могу...
- про расширение языка viewtopic.php?f=46&t=11565
- про реализацию в браузере viewtopic.php?f=46&t=11562
А текущая тема закрывается, т.к. слово ROBERTA применительно к роботам я использовать не могу...
Я тут за главного - если что шлите мыло на me собака shaos точка net