[SDK] Древняя тема про nedoPC SDK (август 2004)

Публичный форум для http://www.nedopc.org/nedopc

Moderator: Shaos

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

Re: nedoPC SDK

Post by Shaos »

Shaos wrote:
Shaos wrote:
Shaos wrote:соберу туда всё что актуально с SourceForge, а также из незарелизенного RW1P2/SprinterSDK...
Нашёл способ импортировать исходники из CVS (SourceForge) в GitHub со ВСЕЙ историей изменений! :mrgreen:

Кроме того накидал все версии RW1P2 - теперь можно отследить как оно менялось со временем...
Блин, не успел перенести репозиторий, как гитхаб решил мелкомягким продаться :(

http://www.businessinsider.com/microsoft-github-acquisition-could-be-announced-monday-2018-6
Свершилось:

https://blog.github.com/2018-06-04-github-microsoft/

и свободолюбивый народ повалил дружными косяками с гитхаба на гитлаб...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: nedoPC SDK

Post by Shaos »

GitLab рапортует массовый наплыв - его даже можно отслеживать вживую :o

https://monitor.gitlab.net/dashboard/db/github-importer?orgId=1
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: nedoPC SDK

Post by Shaos »

создал себе аккаунт на гитлабе:

https://gitlab.com/shaos

а также завёл группу "Balanced Ternary Group" :)

https://gitlab.com/ternary

P.S. группу nedoPC projects тоже завёл ;)

https://gitlab.com/nedopc
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: nedoPC SDK

Post by Lavr »

Зашел - чисто из спортивного интересу...

Гитхаб всегда мне говорил, что "Опера 9.64" - устаревший браузер и ничего практически не показывал... :-?

ГитЛаб мою "Оперу 9.64" никак не ругал, но показал всё вот так:
GitLab.gif
Видимо, это не совсем всё же правильно... но терпимо. :wink:

Гитхаб мне и скачивать ничего не давал... надо будет проверить, как с этим у ГитЛаб-а... :D
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: nedoPC SDK

Post by Shaos »

Lavr wrote:Гитхаб мне и скачивать ничего не давал... надо будет проверить, как с этим у ГитЛаб-а... :D
Ок - перенесу для теста некоторые репозитории и дам знать - попробуешь ;)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: nedoPC SDK

Post by Shaos »

Shaos wrote:создал себе аккаунт на гитлабе:

https://gitlab.com/shaos

а также завёл группу "Balanced Ternary Group" :)

https://gitlab.com/ternary

P.S. группу nedoPC projects тоже завёл ;)

https://gitlab.com/nedopc
Перенёс все репы и кое-что даже разложил по группам ;)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: nedoPC SDK

Post by Lavr »

Shaos wrote:
Lavr wrote:Гитхаб мне и скачивать ничего не давал... надо будет проверить, как с этим у ГитЛаб-а... :D
Ок - перенесу для теста некоторые репозитории и дам знать - попробуешь ;)
Скачалось! :roll:
Для примера ткнул первое попавшееся: Kostyantyn Matlayev / Flights · GitLab
И скачал архив! :kruto:

Я вообще не знаю, зачем Гитхаб так выкаблучивался - ну не было там особого функционала,
который не могла бы осилить "Опера"... :-?
iLavr
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: nedoPC SDK

Post by Shaos »

Всё - мой гитхаб пуст :mrgreen:
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: nedoPC SDK

Post by Shaos »

Shaos wrote:GitLab рапортует массовый наплыв - его даже можно отслеживать вживую :o

https://monitor.gitlab.net/dashboard/db/github-importer?orgId=1
Массовый наплыв закончился, но ежедневные небольшие всплески ещё продолжаются...
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: nedoPC SDK

Post by Shaos »

Всё - сегодня микрософт официально купил гитхаб, заплатив 7.5 миллиардов долларов:

https://techcrunch.com/2018/10/26/microsoft-closes-its-7-5b-purchase-of-code-sharing-platform-github/
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: nedoPC SDK

Post by Shaos »

Shaos wrote:Вот пример с циклами:

Code: Select all

ROBOT "Test"
AUTHOR "Shaos"
+INC/ROBBY
+MYSPR

main()
{
 for(A=0;A<20;A++)
 {
   for(B=0;B<10;B++)
   {
      select A B
      set @MYSPR
   }
 }
}
и вот во что они превращаются после препроцессора:

Code: Select all

ROBOT "Test"
AUTHOR "Shaos"
START:
A=0;_l1: (A<20);IFN L _l2
B=0;_l3: (B<10);IFN L _l4
SELECT A B
SET 8192
B=B+1;GOTO _l3;_l4:
A=A+1;GOTO _l1;_l2:
NOP
__END: END
после компиляции в байткод:

Code: Select all

// Generated by ROBBYC version 2.3.0
// Alexander "Shaos" Shabarshin <me@shaos.net>

>>>>(1) ROBOT "Test"
>>>>(2) AUTHOR "Shaos"
>>>>(3) +INC/ROBBY
>>>>(4) +MYSPR
>>>>(5) 

// HEADER OF THE ROBOT

// Robot 'Test'
// 0 variables
// 108 bytes of code
// 0 bytes of image

02 9A 30 1F 00 04 54 65 73 74 00 00 00 6C 00 FF |..0...Test...l..
FF FF 00 00 00 00 00 53 68 61 6F 73 00 00 00    |.......Shaos...

// CODE OF THE ROBOT

>>>>(6) main()
TEST.R(6) START:
0000 20 
0001 01 
0002 0A 
0003 FF 
0004 00 
0005 00 
0006 00 

>>>>(7) {
>>>>(8)  for(A=0;A<20;A++)
TEST.R(8) A=0;_l1: (A<20);IFN L _l2
0007 40 
0008 0C 
0009 F5 REG L
000A 0E 
000B FF 
000C F5 REG A
000D 0A 
000E FF 
000F F3 LOAD
0010 F5 PUSH 20
0011 14 
0012 00 
0013 93 <
0014 F4 SAVE
0015 42 
0016 01 
0017 0E 
0018 FF 
0019 00 
001A 6A 
001B 00 

>>>>(9)  {
>>>>(10)    for(B=0;B<10;B++)
TEST.R(10) B=0;_l3: (B<10);IFN L _l4
001C 20 
001D 01 
001E 0B 
001F FF 
0020 00 
0021 00 
0022 00 
0023 40 
0024 0C 
0025 F5 
0026 0E 
0027 FF 
0028 F5 
0029 0B 
002A FF 
002B F3 
002C F5 
002D 0A 
002E 00 
002F 93 
0030 F4 
0031 42 
0032 01 
0033 0E 
0034 FF 
0035 00 
0036 58 
0037 00 

>>>>(11)    {
>>>>(12)       select A B
TEST.R(12) SELECT A B
0038 69 
0039 01 
003A 0A 
003B FF 
003C 01 
003D 0B 
003E FF 

>>>>(13)       set @MYSPR
TEST.R(13) SET 8192
003F 6A 
0040 00 
0041 00 
0042 20 
0043 00 
0044 00 
0045 00 

>>>>(14)    }
TEST.R(14) B=B+1;GOTO _l3;_l4:
0046 40 
0047 0C 
0048 F5 REG B
0049 0B 
004A FF 
004B F5 REG B
004C 0B 
004D FF 
004E F3 LOAD
004F F5 PUSH 1
0050 01 
0051 00 
0052 A0 +
0053 F4 SAVE
0054 43 
0055 00 
0056 23 
0057 00 

>>>>(15)  }
TEST.R(15) A=A+1;GOTO _l1;_l2:
0058 40 
0059 0C 
005A F5 REG A
005B 0A 
005C FF 
005D F5 REG A
005E 0A 
005F FF 
0060 F3 LOAD
0061 F5 PUSH 1
0062 01 
0063 00 
0064 A0 +
0065 F4 SAVE
0066 43 
0067 00 
0068 07 
0069 00 

>>>>(16) }
TEST.R(16) NOP
006A 00 
TEST.R(0) __END: END
006B FF  
и после кросс-копиляции в код 8080:
...
путём добавления более оптимального кода для A=0, B=0, C=0, A<N, A=A+1 и т.д. в __RULES можно сделать более опитимальное представление этого кода для 8080 (и соответственно более быстрое)...
Вот чего действительно недостаёт в nedoPC SDK так это компиляции Robby-программы в исходник на сях, который можно было бы затем скомпилировать под целевую платформу (текстовый дос или текстовый (ncurses) линух (а может даже графический дос и графический линух?)) - это сильно бы упростило отладку и соответственно разработку нового робби-кода (хотя не - графическим пусть будет интерпретатор байт-кода, а компилятор^2 пусть будет только текстовым)...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: nedoPC SDK

Post by Shaos »

Кстати оказалось, что в линухе текст можно раскрашивать и переставлять по экрану без ncurses :mrgreen:

https://wiki.bash-hackers.org/scripting/terminalcodes

Нвдо чтоли свой conio.h накидать для линуха, чтобы один и тот же исходник собирался и в досе, и в линухе :kruto:

Code: Select all

    clrscr <<<
    cprintf ???
    delline
    getch <<<
    getche <<<
    gotoxy <<<
    kbhit <<<
    wherex ???
    wherey ???
    textcolor <<<
    textbackground <<<
clrscr, gotoxy, getch[e] уже есть вот тут: https://github.com/pushkar147/conio4gcc
плюс раскрашивание (textcolor и textbackground) сделать как описано по ссылке выше - ескейп-последовательностями
и по сути всё (разве что если надо спецкнопки обрабатывать - типа функциональных, стрелок и т.д. то проверка по getch в программе будет другая в случае линуха)
P.S. kbhit можно взять отсюда: https://cboard.cprogramming.com/c-programming/63166-kbhit-linux.html
P.P.S. cprintf можно свой накатать (в досе надо cprintf юзать, чтобы раскрашивало), в котором подсчитывать текущую позицию курсора - вот и wherex с wherey покроются!
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re:

Post by Shaos »

Shaos wrote:
Shaos wrote:Вопрос возник - нужно добавить в RW1P2 файловые операции. Я за эти годы несколько подходов окучил - пока ни один не понравился (каналы, спец-команды, ассемблерные вставки). Вобщем думается сделать на нижнем уровне передачу файлов блоками по 256 байт (как на CP/M-80), а на строки или на байты уже будет делить библиотека, написанная на RW1.
Weberta-интерпретатор байткода RW0 (который теперь входит в состав Rgrid.js) имеет следующую реализацию файловых операций:
Shaos wrote:Файлы читаются так - получателю -4 (@filesystem) посылается пакет с именем файла (одна буква на ячейку), далее ждём евента от @filesystem - в нём будет размер прочитанного файла, далее обращаемся (через указатели A/B/C) в отрицательную область памяти переменных (ячейки с адресами от -32K до -1) за телом файла.

Аналогичным образом можно сделать запись - добавив к имени файла какой-то суффикс, например !, что будет обозначать запись из отрицательной области памяти переменных в файл с указанным именем (длину записи можно указать следом за !)...
P.S. На самом деле ячейки с адресами от -32768 до -257 (т.е. 32512 слов или 65024 байта) потому что -256 и выше идут коды "регистров"
Переосмысливая идеи 2014 года можно предложить следующее
Пакет с именем файла - это массив слов, в первом слове которого указано количество следующих далее букв и сейчас поддерживается только чтение (например в Circuits.CC):
"filename" - прочитать текст из файла с именем filename, разместив его начиная с адреса #8000 по одной букве на слово, причём количество скопированных букв приходит в ответе от @filesystem
По аналогии добавляем:
"filename!" - записать буфер в файл с именем filename, причём пишем только младшие байты и останавливаемся, когда встретили ноль
"filename%" - прочитать двоичный файл, упаковав байты по 2 в слово (от системы придет прочитанный размер в байтах)
"filename%hhh" - записать двоичный файл с байтовым размером hhh (шестнадцатиричное число) пользуясь словами из буфера (если размер нечётный, то из последнего слова возьмется только младший байт)
"filename+" - дополнить текстовый файл строкой из буфера (буква на слово, писать до нуля) - хотя может быть проще say перенаправить в файл...
Работу с произвольным адресом пока можно отложить на будущее, но уже можно считать, что там в систему будут передаваться не строки, а структуры - с адресом, длиной, смещением внутри файла и т.д.

P.S. Скелет программы (вырезка из TERNARO.R):

Code: Select all

robot "Test"
author "Shaos"
+INC/ROBBY
main()
{
 def tmp[17] = "START" // тут хранится пакет - в ячейке 0 будет 5, что есть длина слова, и далее 5 ячеек с буквами
 sendp tmp[0] @filesystem // хотим файл с именем START
 while(TRUE) // вечный цикл в котором мы будем обрабатывать приходящие сообщения
 {
   code = 0
   recv code // принять сообщение и записать его в переменную code
   if(N==0) continue // буфер принятых сообщений пуст
   if(N==@mouse) // это сообщение от мыши
   {
     ...
   }
   if(N==@filesystem) // это сообщение от файловой системы, сообщающее, что файл записан в буфер (в регистре K будет размер)
   {
      A = @filebuffer // начинаем читать с адреса #8000
      while(A[0]) // пока не встретили ноль (либо любой другой маркер окончания полезной информации - этот символ должен быть в файле)
      {
           // что-то делаем с очередной буквой A[0]
           A = A + 1 // сдвигаем указатель на 1
      }
   }
 }
}
P.P.S. На самом деле просто имя файла это чтение текстового файла где через запятую идут целые числа со знаком (обычно 16-битные т.е. signed short) и именно эти значения записываются в память при чтении из файла - одно значение на ячейку. Соответственно чтобы читать произвольный текстовый файл надо вводить спец.символ - например $ т.е. запросив чтение из файла filename$ мы читаем его как текстовый по одной букве на ячейку (по идее так можно и UTF8 читать, разворачивая его в полноценный 16-битный Unicode)...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: nedoPC SDK

Post by Shaos »

Shaos wrote:путём добавления более оптимального кода для A=0, B=0, C=0, A<N, A=A+1 и т.д. в __RULES можно сделать более опитимальное представление этого кода для 8080 (и соответственно более быстрое
также можно пойти ещё дальше и специально для z80 сделать робби-регистры A,B и C представляемыми индексными регистрами IX, IY и скажем HL'

P.S. в случае z80 можно вообще убрать из памяти секцию регистров, распределив все доступные в RW1P2 регистры Robby либо по теневым регистрам процессора, либо сделав их полностью процедурными:

Code: Select all

_base   equ     %base
_regs   equ     %regs
_reg_x  equ     %reg_x --> B'
_reg_y  equ     %reg_y --> C'
;reg_d
_reg_n  equ     %reg_n --> DE' (?)
;reg_k
_reg_r  equ     %reg_r --> procedure (16-bit RANDOM)
_reg_t  equ     %reg_t --> procedure (0.1sec COUNTER)
;reg_e
;reg_m
;reg_i
_reg_a  equ     %reg_a --> IX
_reg_b  equ     %reg_b --> IY
_reg_c  equ     %reg_c --> HL'
;reg_p
_reg_l  equ     %reg_l --> HL (?)
;reg_s
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: nedoPC SDK

Post by Shaos »

Shaos wrote:Кстати оказалось, что в линухе текст можно раскрашивать и переставлять по экрану без ncurses :mrgreen:

https://wiki.bash-hackers.org/scripting/terminalcodes

Нвдо чтоли свой conio.h накидать для линуха, чтобы один и тот же исходник собирался и в досе, и в линухе :kruto:

Code: Select all

    clrscr <<<
    cprintf ???
    delline
    getch <<<
    getche <<<
    gotoxy <<<
    kbhit <<<
    wherex ???
    wherey ???
    textcolor <<<
    textbackground <<<
clrscr, gotoxy, getch[e] уже есть вот тут: https://github.com/pushkar147/conio4gcc
плюс раскрашивание (textcolor и textbackground) сделать как описано по ссылке выше - ескейп-последовательностями
и по сути всё (разве что если надо спецкнопки обрабатывать - типа функциональных, стрелок и т.д. то проверка по getch в программе будет другая в случае линуха)
P.S. kbhit можно взять отсюда: https://cboard.cprogramming.com/c-programming/63166-kbhit-linux.html
P.P.S. cprintf можно свой накатать (в досе надо cprintf юзать, чтобы раскрашивало), в котором подсчитывать текущую позицию курсора - вот и wherex с wherey покроются!
Вот так в линуксе можно раскрашивать текст в терминале:

Code: Select all

#define BLACK   "\x1B[30m"
#define RED     "\x1B[31m"
#define GREEN   "\x1B[32m"
#define BROWN   "\x1B[33m"
#define BLUE    "\x1B[34m"
#define MAGENTA "\x1B[35m"
#define CYAN    "\x1B[36m"
#define WHITE   "\x1B[37m"

#define _BLACK   "\x1B[40m"
#define _RED     "\x1B[41m"
#define _GREEN   "\x1B[42m"
#define _BROWN   "\x1B[43m"
#define _BLUE    "\x1B[44m"
#define _MAGENTA "\x1B[45m"
#define _CYAN    "\x1B[46m"
#define _WHITE   "\x1B[47m"

#define RESET   "\x1B[0m"
#define BRIGHT  "\x1B[1m"
#define INVERSE "\x1B[7m"

int main() {

  printf(RED "red\n"     RESET);
  printf(GREEN "green\n"   RESET);
  printf(BROWN "brown\n"  RESET);
  printf(BLUE "blue\n"    RESET);
  printf(MAGENTA "magenta\n" RESET);
  printf(CYAN "cyan\n"    RESET);
  printf(WHITE "white\n"   RESET);

  printf(_BLUE BLACK "black"     RESET "\n");
  printf(_BLUE RED "red"     RESET "\n");
  printf(BRIGHT _BLUE RED "red"     RESET "\n");
  printf(_BLUE GREEN "green"   RESET "\n");
  printf(BRIGHT _BLUE BROWN "yellow"  RESET "\n");
  printf(BRIGHT _BLUE BLUE "blue"    RESET "\n");
  printf(_BLUE MAGENTA "magenta" RESET "\n");
  printf(_BLUE CYAN "cyan"    RESET "\n");
  printf(_BLUE WHITE "white"   RESET "\n");
  printf(BRIGHT _BLUE WHITE "white"   RESET "\n");
  printf(INVERSE BRIGHT _BLUE WHITE "i.white"   RESET "\n");
}
Результат вышеприведённой программы вот:
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net