[RW1] Улучшения в новой версии компилятора ROBBYC

Форум для игроков в войны роботов (RW1, RW2D, RW3D) http://rwar.net

Moderator: Shaos

User avatar
Shaos
Admin
Posts: 25244
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

[RW1] Улучшения в новой версии компилятора ROBBYC

Post by Shaos »

Появится регистр H, означающий старшие 16 бит результата L (может оказаться полезным например при умножении).

Также появится возможность использовать функции - они будут преобразовываться в вызов подпрограмм препроцессором. Например:

res=2+fun1(2,3)/fun2(4)

преобразуется препроцессором в

A=2;B=3;CALL fun1;_1=L
A=4;CALL fun2;_2=L
res=2+_1/_2
Last edited by Shaos on 11 Sep 2012 23:32, edited 1 time in total.
User avatar
Shaos
Admin
Posts: 25244
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Готовится новая версия 2.2.0 компилятора RW1C. Уже реализовано:
- поддержка нового регистра H;
- возможность вызова процедур без аргументов (раньше для препроцессора обязательно надо было писать хотя бы один параметр-заглушку);
- вывод ошибки дублирования метки в случае если метка с повторным именем определена после ее использования (этот случай рассматривался в v1.x, но был упущен в v2.0 и v2.1).

Осталось реализовать функции (как указано выше) и можно выпускать новую версию ;)

P.S. Добавлено в ноябре 2005: Реализация функций подождет - а все остальное плюс еще несколько фиксов войдут в ближайшую версию компилятора под номером 2.1.3
User avatar
Shaos
Admin
Posts: 25244
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

RW1C v2.1.3

Post by Shaos »

1 декабря 2005 года

shaos.ru/pub/rw1c.zip (133K)

RW1C v2.1.3 (29 Nov 2005)
- поддержка нового регистра H (адрес 0xFF1E) обозначающего старшее слово результата
- исправлена ошибка дублирования метки
- возможность вызова процедур без аргументов не используя CALL
- максимальная длина строки программы теперь 1024 символа
- исправление падения программы при индексировании массива несуществующей переменной
- теперь определение макросов допускается только до метки START или снаружи функций
- исключено удаление пробелов из описания макроса
- разделение исходника на несколько файлов
- подправлен текст лицензионного соглашения к исходным текстам

Файлы которые можно скачать отдельно:
shaos.ru/pub/rw1c_dos.zip (26K)
shaos.ru/pub/rw1c_linux.zip (27K)
shaos.ru/pub/rw1c_src.zip (26K)

Способы сборки компилятора на разных платформах и разными компиляторами:

Code: Select all

*LINUX*

 - GCC v3.3.4:
 
   gcc -O2 rw1c.c rw1_prep.c rw1_expr.c my_text.c my_hex.c -o rw1c

*WIN-XP*

 - Cygwin GCC v2.95.2-6:
 
   gcc -O2 rw1c.c rw1_prep.c rw1_expr.c my_text.c my_hex.c -o rw1c.exe

 - Visual C++ Toolkit 2003 v13.10.3077:

   cl rw1c.c rw1_prep.c rw1_expr.c my_text.c my_hex.c

 - Borland C++ v5.5.1:

   RW1C_BCC.BAT:
   SET BCC=C:\BORLANDC
   SET PATH=%BCC%\BIN;%PATH%
   BCC32 -K -I%BCC%\INCLUDE -L%BCC%\LIB rw1c.c rw1_prep.c rw1_expr.c my_text.c my_hex.c

*DOS*

 - Pacific C v7.51:

   C:\PACIFIC\BIN\PACC -Bl rw1c.c rw1_prep.c rw1_expr.c my_text.c my_hex.c

 - Watcom C/C++ v10.0:

   RW1C_WAT.BAT:
   SET WATCOM=C:\WATCOM
   SET PATH=%WATCOM%\BIN;%WATCOM%\BINB
   SET INCLUDE=%WATCOM%\H
   WCL386 -k32768 rw1c.c rw1_prep.c rw1_expr.c my_text.c my_hex.c
   
 - Borland C++ v3.1:

   RW1C_BOR.BAT:
   SET BC=C:\BC
   SET PATH=%BC%\BIN;%PATH%
   BCC -I%BC%\INCLUDE -L%BC%\LIB -K -ml rw1c.c rw1_prep.c rw1_expr.c my_text.c my_hex.c

 - Turbo C v2.01:

   RW1C_TUR.BAT:
   SET TC=C:\TC
   UNIX2DOS my_hex.c
   UNIX2DOS my_hex.h
   UNIX2DOS my_text.c
   UNIX2DOS my_text.h
   UNIX2DOS rw1.h
   UNIX2DOS rw1_expr.c
   UNIX2DOS rw1_expr.h
   UNIX2DOS rw1_prep.c
   UNIX2DOS rw1_prep.h
   UNIX2DOS rw1c.c
   SET PATH=%TC%;%PATH%
   TCC -I%TC%\INCLUDE -L%TC%\LIB -K -ml rw1c.c rw1_prep.c rw1_expr.c my_text.c my_hex.c 
User avatar
Shaos
Admin
Posts: 25244
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

RW1C v2.1.6

Post by Shaos »

22 апреля 2007 года

Зарелизил новую версию компилятора - как часть проекта NedoPC SDK на SourceForge.

Качать тут: http://sourceforge.net/project/showfiles.php?group_id=181535

Вот история изменений:

Code: Select all

RW1C HISTORY IN RUSSIAN (KOI8R)
===============================

v2.1.6 (21 апреля 2007)
 - исправлена запись отладочной информации (опция -d)

v2.1.5 (26 декабря 2006)
 - первый релиз под лицензией GPL
 - изменение логики проверки на переменные

v2.1.4 (19 декабря 2005)
 - добавлены новые команды PUSH и CLEAR
 - скорректирована логика парсинга переменных в командах (RECVP array)
 - исключена возможность использования CONTINUE и BREAK вне циклов

v2.1.3 (29 ноября 2005)
 - поддержка нового регистра H (адрес 0xFF1E) обозначающего старшее слово результата
 - исправлена ошибка дублирования метки
 - возможность вызова процедур без аргументов не используя CALL
 - максимальная длина строки программы теперь 1024 символа
 - исправление падения программы при индексировании массива несуществующей переменной
 - теперь определение макросов допускается только до метки START или снаружи функций
 - исключено удаление пробелов из описания макроса
 - разделение исходника на несколько файлов
 - подправлен текст лицензионного соглашения к исходным текстам
 
v2.1.2 (04 апреля 2003)
 - дополнительный поиск включаемых файлов в подкаталоге исполняемого файла
 - избавление от предупреждений при компиляции

v2.1.1 (30 сентября 2002)
 - обработка RETURN expression
 - автоматический перенос { и } на новые строки
 - адаптация исходников к Borland-C++ 5.5

v2.1.0 (18 сентября 2002)
 - опциональное сохранение в байткоде отладочной информации
 - публикация исходного кода программы в интернете

v2.0.12 (15 мая 2002)
 - реализация указателей через регистры A,B,C

v2.0.11 (29 января 2002)
 - исправление нескольких мелких багов

v2.0.10 (22 января 2002)
 - разрешение записи вида for(;;)
 - компиляция строк в массивы

v2.0.9 (21 января 2002)
 - разрешение команды NOP
 - запрет перевода в верхний регистр в символах вида 'c'
 - исправлена ошибка вложенных if

v2.0.8 (15 января 2002)
 - исправлено повторение меток в LST файле
 - адаптация исходников к Pacific C v7.51

v2.0.7 (05 августа 2001)
 - эксперименты с компиляцией под Palm
 - добавлена проверки парности фигурных скобок
 - теперь в SAY допускается писать имена переменных маленькими буквами

v2.0.6 (10 мая 2001)
 - добвлена возможность вызова подпрограмм с аргументами
 - исправлена ошибка обработки шестнадцатиричных чисел

v2.0.5 (04 мая 2001)
 - поддержка стандартного С и адаптация для Linux

v2.0.4 (18 апреля 2001)
 - исправлена ошибка с компиляцией if(N==@t_robot)
 - теперь LST файл создается даже в случае ошибки препроцессора

v2.0.3 (13 апреля 2001)
 - код поправлен для использования совместно с RW1 Editor

v2.0.2 (12 апреля 2001)
 - ужесточены правила проверки аргументов aVar
 - изменены определения COPYP aVar и SENDP aVar
 - теперь допускается инициализировать массивы метками

v2.0.1 (10 апреля 2001)
 - исправлена ошибка короткого определения SET Var
 - добавлено короткое определение SEND Var и SENDP Var
 - исправлена ошибка сохранения вместо имени робота его пути

v2.0.0 (02 ноября 2000)
 - первая версия переписанного с нуля компилятора RW1 
Примеры компиляции исходников под разные платформы разными компиляторами:

Code: Select all

How to build RW1C using different compilers for different platforms
===================================================================
 
For LINUX you can use "make" command (compilation by gcc).

For others (all sources should be put to current directory):

*WINDOWS*

 - Cygwin GCC v2.95.2-6:
 
   gcc -O2 rw1c.c rw1_prep.c rw1_expr.c my_text.c my_hex.c -o rw1c.exe

 - Visual C++ Toolkit 2003:

   cl rw1c.c rw1_prep.c rw1_expr.c my_text.c my_hex.c

 - Borland C++ v5.5.1:

   Create RW1C_BCC.BAT (change paths if needed):
   SET BCC=C:\BORLANDC
   SET PATH=%BCC%\BIN;%PATH%
   BCC32 -K -I%BCC%\INCLUDE -L%BCC%\LIB rw1c.c rw1_prep.c rw1_expr.c my_text.c my_hex.c

*DOS32*

 - OpenWatcom C/C++ v1.6:

   Create RW1C_OWC.BAT (change paths if needed):
   SET WATCOM=C:\OWATCOM
   SET PATH=%WATCOM%\BINW
   SET INCLUDE=%WATCOM%\H
   WCC386 /onatx /oh /ei /3 /fp3 rw1c.c
   WCC386 /onatx /oh /ei /3 /fp3 rw1_prep.c
   WCC386 /onatx /oh /ei /3 /fp3 rw1_expr.c
   WCC386 /onatx /oh /ei /3 /fp3 my_text.c
   WCC386 /onatx /oh /ei /3 /fp3 my_hex.c
   WLINK system pmodew option stack=32k file rw1c,rw1_prep,rw1_expr,my_text,my_hex name rw1c
   
 - Watcom C/C++ v10.6:

   Create RW1C_WCC.BAT (change paths if needed):
   SET WATCOM=C:\WATCOM
   SET PATH=%WATCOM%\BIN;%WATCOM%\BINB
   SET INCLUDE=%WATCOM%\H
   WCL386 -k32768 rw1c.c rw1_prep.c rw1_expr.c my_text.c my_hex.c

*DOS16*

 - Pacific C v7.51:

   C:\PACIFIC\PACC -Bl rw1c.c rw1_prep.c rw1_expr.c my_text.c my_hex.c
   
 - Turbo C v2.01:

   Create RW1C_TC2.BAT (change paths if needed):
   SET TC=C:\TC
   UNIX2DOS my_hex.c
   UNIX2DOS my_hex.h
   UNIX2DOS my_text.c
   UNIX2DOS my_text.h
   UNIX2DOS rw1.h
   UNIX2DOS rw1_expr.c
   UNIX2DOS rw1_expr.h
   UNIX2DOS rw1_prep.c
   UNIX2DOS rw1_prep.h
   UNIX2DOS rw1c.c
   SET PATH=%TC%;%PATH%
   TCC -I%TC%\INCLUDE -L%TC%\LIB -K -ml rw1c.c rw1_prep.c rw1_expr.c my_text.c my_hex.c

 - Borland C++ v3.1:

   Create RW1C_BC3.BAT (change paths if needed):
   SET BC=C:\BC
   SET PATH=%BC%\BIN;%PATH%
   BCC -I%BC%\INCLUDE -L%BC%\LIB -K -ml rw1c.c rw1_prep.c rw1_expr.c my_text.c my_hex.c
8 мая 2007 года

На днях добавил сборку компилятора под MacOS X (PowerPC)
User avatar
Shaos
Admin
Posts: 25244
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: [RW1] Улучшения в новой версии компилятора ROBBYC

Post by Shaos »

Текущей версией роботовского компилятора ROBBYC является v2.3.4 от 22 января 2025 года:

Code: Select all

ROBBYC HISTORY
==============

v2.3.4 (22 Jan 2025)
 - checking existance of .R-file (now file extension may have suffix)
 - added new option -n (disabe includes)

v2.3.3 (30 Jul 2024)
 - fixed wrong PUSH argument on 16-bit systems

v2.3.2 (17 Jul 2024)
 - put RET at the end of main() instead of NOP

v2.3.1 (08 Jul 2024)
 - optional listing file has .RLS file extension now
 - fixed path logic when executed from different directory

v2.3.0 (20 May 2018)
 - RW1C renamed to ROBBYC (Robby Compiler)
 - source files are having .R file extension now
 - relicensed under GPL v3 as part of nedoPC SDK

v2.2.0 (18 Dec 2012)
 - added new commands ASM and GET
 - characters in listing not only for SAY and TEST, but also for TEXT and ASM
 - removed GOTO START at the end of main() and NOP used instead
 - support for new register U (address 0xFF16) for high word of time
 - added new option -r to generate web robots (.rjs)
 - added TRUE and FALSE to the list of predefined constants
 - command PRINT is back
Исходники под GPLv3 доступны в репе nedoPC SDK на гитлабе:

https://gitlab.com/nedopc/sdk/-/tree/master/robbyc?ref_type=heads