[__My 4tH__]

Страница 2 из 2 Предыдущий  1, 2

Перейти вниз

Re: [__My 4tH__]

Сообщение автор Gudleifr в Чт Авг 17, 2017 8:47 pm

_KROL пишет:Вы просто не внимательны. Кое-что я описал в DOCS\SOURCES.TXT. Да и вообще в DOCS я обычно сейчас и пишу всё!
А где написано, что надо читать именно DOCS\SOURCES.TXT? Для стороннего человека Ваш проект - это 260к кода, который может содержать ошибку в любом месте!

Но, вообще, если Вы хотите получить FORTH, то ошибку можно искать по его правилам. Рассматривайте весь код, который уже отладили как стенд, созданный для единственной цели - отладки того, что пока не идет. Смело добавляйте в свое "ядро" отладочные и диагностические механизмы, не скупитесь на обвес анализируемого фрагмента всякими тестерами и пробниками. Пусть FORTH покажет, на что способен.


avatar
Gudleifr
Admin

Сообщения : 725
Дата регистрации : 2017-03-29

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: [__My 4tH__]

Сообщение автор Gudleifr в Чт Авг 17, 2017 9:59 pm

: cls 0 18 DO 0 4F DO 14 B800 IJ 2* NOP C!L LOOP LOOP ;

Не понял: почему 18 и 4F вместо 19 и 80 ?
Почему 14 вместо 20 ?
Почему IJ определено по документации, как I*J+I ?
Если IJ , все-таки, означает J*Ilim+I , у Вас все равно неправильно - Ilim=4F (а множить надо на 50).
Впрочем, вложенные циклы у Вас, похоже, просто не работают...
avatar
Gudleifr
Admin

Сообщения : 725
Дата регистрации : 2017-03-29

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: [__My 4tH__]

Сообщение автор _KROL в Чт Авг 17, 2017 10:44 pm

Но, вообще, если Вы хотите получить FORTH, то ошибку можно искать по его правилам. Рассматривайте весь код, который уже отладили как стенд, созданный для единственной цели - отладки того, что пока не идет. Смело добавляйте в свое "ядро" отладочные и диагностические механизмы, не скупитесь на обвес анализируемого фрагмента всякими тестерами и пробниками. Пусть FORTH покажет, на что способен.
Ну, я использую NOP для отладки в TD Smile Хот я когда-то хотел на ассемблере написать отладчик для форта... Видимо момент настал!

Не понял: почему 18 и 4F вместо 19 и 80 ?
Это правильно, т.к. начинается всё с 0, а не с 1(т.е. (DECIMAL) 0..79,0..24)!
Почему 14 вместо 20 ?
Я сам не понял)
Почему IJ определено по документации, как I*J+I ?
Если IJ , все-таки, означает J*Ilim+I , у Вас все равно неправильно - Ilim=4F (а множить надо на 50).
Впрочем, вложенные циклы у Вас, похоже, просто не работают...
Не, циклы работают, а в этом моементе я даже в моём GABCCRT ошибься, спасибо!

_KROL

Сообщения : 91
Дата регистрации : 2017-07-28
Возраст : 18
Откуда : Беларусь

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: [__My 4tH__]

Сообщение автор Gudleifr в Чт Авг 17, 2017 11:10 pm

_KROL пишет:Ну, я использую NOP для отладки в TD
Не, этот счастливый этап для Вас прошел. Ваш FORTH уже умнее. Зачем его останавливать снаружи, если он сам умеет останавливаться в любом месте? И выдавать любые дампы? (Я сам, когда делал первый FOBOS слишком затянул debug-этап. Потом, задним числом понял, что сам FORTH позволил бы эту работу упростить).
_KROL пишет:Это правильно
Нет, неправильно. LOOP останавливает повтор, когда пересекается граница lim-1|lim. Т.е. "10 0 DO ... LOOP" пройдет 0..9.
_KROL пишет:Не, циклы работают
Не похоже. И Вы перепутали начальные и конечные границы.
avatar
Gudleifr
Admin

Сообщения : 725
Дата регистрации : 2017-03-29

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: [__My 4tH__]

Сообщение автор _KROL в Пт Авг 18, 2017 1:58 pm

ДА, багов у меня ещё достаточно! Вот в IF
Код:
FWORD _IF,"IF",IMM+CONLY
 dw COMPILE,?BRANCH,MARK_F,IMM+CONLY
FEND
зачем-то IMM+CONLY в конце нечаянно вставил...

_KROL

Сообщения : 91
Дата регистрации : 2017-07-28
Возраст : 18
Откуда : Беларусь

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: [__My 4tH__]

Сообщение автор _KROL в Сб Авг 19, 2017 10:03 am

[s]Пока так, но сам дамп пока глючит...[/s]Исправил, работает:
Код:
: CHAR ' DROP C@ ;
: ," [ CHAR " ] LITERAL WORD DUP HERE @ SWAP ALLOT SWAP CMOVE 0 C, ;
: ." COMPILE LIT'Z ," COMPILE TYPE ; IMMEDIATE
: NUMS 0 SWAP BEGIN BASE @ U/MOD NIP SWAP 1+ SWAP DUP UNTIL DROP ;
: UB. BASE @ SWAP HEX FF AND DUP NUMS 2 SWAP - IF [ CHAR 0 ] LITERAL EMIT THEN U. BASE ! ;
: UW. BASE @ SWAP HEX FFFF AND DUP NUMS 4 SWAP - DUP IF 0 DO [ CHAR 0 ] LITERAL EMIT LOOP ELSE DROP THEN U. BASE ! ;
: UD. SWAP UW. UW. ;
: UD:. SWAP UW. [ CHAR : ] LITERAL EMIT UW. ;
: SIGN 8000 AND ;
: FAR1+ 1+ DUP NOT IF SWAP 1000 + SWAP THEN ;
: FARU+ 0 DO FAR1+ LOOP ;
: 4DUP 2OVER 2OVER ;
: 2= SWAPL = -ROT = AND ;

: DUMP
 2DUP 100 FARU+ 2SWAP
 BEGIN
  CR 2DUP UD:. ."  - "
  2DUP
  10 0 DO 2DUP C@L UB. BL EMIT FAR1+ LOOP BL EMIT
  2DROP
  10 0 DO 2DUP C@L EMITC GETXY 1+ GOTOXY FAR1+ LOOP
  4DUP 2= NOT
 UNTIL
;

_KROL

Сообщения : 91
Дата регистрации : 2017-07-28
Возраст : 18
Откуда : Беларусь

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: [__My 4tH__]

Сообщение автор _KROL в Сб Авг 19, 2017 12:48 pm

Выкложил новый релиз на форум кота.
http://fforum.winglion.ru/viewtopic.php?f=2&t=3127&p=43898#p43898 (внизу)

_KROL

Сообщения : 91
Дата регистрации : 2017-07-28
Возраст : 18
Откуда : Беларусь

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: [__My 4tH__]

Сообщение автор _KROL в Вт Авг 29, 2017 12:45 pm

Я тут попытался про Форт написать:
http://forum.shelek.ru/index.php/topic,30865.msg303305/topicseen.html#new
Как ты думаешь, нормально получается? Однако чуть надо дополнить и...

_KROL

Сообщения : 91
Дата регистрации : 2017-07-28
Возраст : 18
Откуда : Беларусь

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: [__My 4tH__]

Сообщение автор Gudleifr в Вт Авг 29, 2017 1:12 pm

_KROL пишет:Как ты думаешь, нормально получается?
К сожалению, то, что Вы написали, не имеет к FORTH практически никакого отношения. Извините.

Кстати, ответ на вопрос "зачем сделаны два стека?" дал Дейкстра в своей работе 1962-го года: "ПОПЫТКА УНИФИКАЦИИ ПОНЯТИЙ, ОТНОСЯЩИХСЯ К ПОСЛЕДОВАТЕЛЬНОМУ ВЫПОЛНЕНИЮ ПРОГРАММЫ" - http://gudleifr.forum2x2.ru/t38-topic.
avatar
Gudleifr
Admin

Сообщения : 725
Дата регистрации : 2017-03-29

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: [__My 4tH__]

Сообщение автор _KROL в Вт Авг 29, 2017 4:35 pm

Тогда буду дальше читать и пытаться сделать документацию.

_KROL

Сообщения : 91
Дата регистрации : 2017-07-28
Возраст : 18
Откуда : Беларусь

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: [__My 4tH__]

Сообщение автор _KROL в Чт Авг 31, 2017 5:12 pm

Спасибо. Я даже не знал толком что им уже написать... Ну чтож, буду учиться ;)

_KROL

Сообщения : 91
Дата регистрации : 2017-07-28
Возраст : 18
Откуда : Беларусь

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: [__My 4tH__]

Сообщение автор _KROL в Сб Сен 09, 2017 11:50 am

Странно, но вот этот новый вариант Форта под PABC у меня неправильно работает:
Код:
// ABC4tH 090917 1 for PABC by _KROL
uses crt,containers;

type tcom=class
 name:string; t:integer;
 constructor create(s:string); begin name:=s; t:=0; end;
 procedure run; begin end;
end;

var turnoff:boolean;
com:objectarray;
data:intstack;
link:intstack;
str:stringstack;

type tscom=class(tcom)
 p:procedure;
 constructor create(s:string;pr:procedure);
  begin
  inherited create(s); t:=1;
  p:=pr;
  end;
 procedure run(lnk:integer);
  begin
  link.push(lnk);
  p;
  link.pop;
  end;
end;

type tucom=class(tcom)
 u:intarray;
 constructor create(s:string);
  begin
  inherited create(s); t:=2;
  u:=intarray.create;
  end;
 procedure run(lnk:integer);
 var i:integer;
  begin
  link.push(lnk);
  for i:=1 to u.size do
    tcom(com[i]).run;
  link.pop;
  end;
 destructor destroy;
  begin
  u.destroy;
  end;
end;

procedure scom(s:string;pr:procedure);
var t:tscom;
 begin
  t:=tscom.create(s,pr);
  com.add(t);
 end;
 

function _read:char;
var c:char;
 begin
  c:=readkey;
  if c=#0 then
  c:=readkey;
  if ord(c)>=32 then
  write(c);
  if c in [#10,#13] then writeln;
 // read(c);
  _read:=c;
 end;

// -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

procedure SYS;
 begin
  writeln('ABC4tH 24.08.17 v.1 (by _KROL)');
 end;

procedure BYE;
 begin
  turnoff:=true;
 end;

procedure CLS;
 begin
  clrscr;
 end;

procedure CR;
 begin
  writeln;
 end;
 
procedure TICK;
var s:string; i:integer;
 begin
  s:='';
  for i:=1 to 255 do
  begin
    s[i]:=_read;
    if (ord(s[i])<=32)or(i=255) then
    begin
      s[0]:=chr(i-1);
      str.push(s);
      data.push(i-1);
      exit;
    end;
  end;
 end;
 
procedure FIND;
var i:integer; s:String;
 begin
  s:=str.pop;
  data.pop;
  for i:=com.size downto 1 do
  if tcom(com[i]).name=s then
    begin
    data.push(i);
    data.push(-1);
    exit;
    end;
  data.push(0);
 end;
 
procedure EXECUTE;
var i:integer;
 begin
  i:=data.pop;
  if i<=com.size then
  case tcom(com[i]).t of
    0: tcom(com[i]).run;
    1: tscom(com[i]).run;
    2: tucom(com[i]).run;
  end;
 end;
// -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

procedure init;
 begin
  turnoff:=false;
  com:=objectarray.create;
  data:=intstack.create;
  link:=intstack.create;
  str:=stringstack.create;
  scom('SYS',SYS);
  scom('BYE',BYE);
  scom('CLS',CLS);
  scom('CR',CR);
  scom('''',TICK);
  scom('FIND',FIND);
  scom('EXECUTE',EXECUTE);
 end;
 
procedure run;
var s:string;
 begin
  repeat
  TICK;
  FIND;
  if data.pop<>0 then EXECUTE;
  until turnoff;
 end;

procedure done;
 begin
  com.destroy;
  data.destroy;
  link.destroy;
  str.destroy;
 end;

begin
 init;
 run;
 done;
end.
Запускает run не дочерних классов, а родительского, хотя вводя "SYS" переходит на "1: tscom(com[i]).run;"!
А идея была неплохая.


Последний раз редактировалось: _KROL (Сб Сен 09, 2017 12:11 pm), всего редактировалось 1 раз(а)

_KROL

Сообщения : 91
Дата регистрации : 2017-07-28
Возраст : 18
Откуда : Беларусь

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: [__My 4tH__]

Сообщение автор _KROL в Сб Сен 09, 2017 12:11 pm

Нет это я намудрил) Хотел сделать массив линков, как в настоящем шитом коде, а в дочерних классах процедура run была с одним аргументом, соответственно... Правильно так:
Код:
// ABC4tH 090917 1 for PABC by _KROL
uses crt,containers;

type tcom=class
 name:string; t:integer;
 constructor create(s:string); begin name:=s; t:=0; end;
 procedure run; begin end;
end;

var turnoff:boolean;
com:objectarray;
data:intstack;
link:intstack;
str:stringstack;

type tscom=class(tcom)
 p:procedure;
 constructor create(s:string;pr:procedure);
  begin
  inherited create(s); t:=1;
  p:=pr;
  end;
 procedure run;
  begin
//  link.push(lnk);
  p;
//  link.pop;
  end;
end;

type tucom=class(tcom)
 u:intarray;
 constructor create(s:string);
  begin
  inherited create(s); t:=2;
  u:=intarray.create;
  end;
 procedure run;
 var i:integer;
  begin
//  link.push(lnk);
  for i:=1 to u.size do
    tcom(com[i]).run;
//  link.pop;
  end;
 destructor destroy;
  begin
  u.destroy;
  end;
end;

procedure scom(s:string;pr:procedure);
var t:tscom;
 begin
  t:=tscom.create(s,pr);
  com.add(t);
 end;


function _read:char;
var c:char;
 begin
  c:=readkey;
  if c=#0 then
  c:=readkey;
  if ord(c)>=32 then
  write(c);
  if c in [#10,#13] then writeln;
 // read(c);
  _read:=c;
 end;

// -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

procedure SYS;
 begin
  writeln('ABC4tH 24.08.17 v.1 (by _KROL)');
 end;

procedure BYE;
 begin
  turnoff:=true;
 end;

procedure CLS;
 begin
  clrscr;
 end;

procedure CR;
 begin
  writeln;
 end;

procedure TICK;
var s:string; i:integer;
 begin
  s:='';
  for i:=1 to 255 do
  begin
    s[i]:=_read;
    if (ord(s[i])<=32)or(i=255) then
    begin
      s[0]:=chr(i-1);
      str.push(s);
      data.push(i-1);
      exit;
    end;
  end;
 end;

procedure FIND;
var i:integer; s:String;
 begin
  s:=str.pop;
  data.pop;
  for i:=com.size downto 1 do
  if tcom(com[i]).name=s then
    begin
    data.push(i);
    data.push(-1);
    exit;
    end;
  data.push(0);
 end;

procedure EXECUTE;
var i:integer;
 begin
  i:=data.pop;
  if i<=com.size then
  case tcom(com[i]).t of
    0: tcom(com[i]).run;
    1: tscom(com[i]).run;
    2: tucom(com[i]).run;
  end;
 end;
// -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

procedure init;
 begin
  turnoff:=false;
  com:=objectarray.create;
  data:=intstack.create;
  link:=intstack.create;
  str:=stringstack.create;
  scom('SYS',SYS);
  scom('BYE',BYE);
  scom('CLS',CLS);
  scom('CR',CR);
  scom('''',TICK);
  scom('FIND',FIND);
  scom('EXECUTE',EXECUTE);
 end;

procedure run;
var s:string;
 begin
  repeat
  TICK;
  FIND;
  if data.pop<>0 then EXECUTE;
  until turnoff;
 end;

procedure done;
 begin
  com.destroy;
  data.destroy;
  link.destroy;
  str.destroy;
 end;

begin
 init;
 run;
 done;
end.
Только тут TICK весьма странный... Буду думать))

_KROL

Сообщения : 91
Дата регистрации : 2017-07-28
Возраст : 18
Откуда : Беларусь

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: [__My 4tH__]

Сообщение автор Gudleifr в Вс Сен 10, 2017 10:32 am

Вам надо немного отойти от попыток "реализовать FORTH в целом". Попробуйте разбить FORTH на части и реализовывать их по отдельности, по возможности находя этим частям полезное применение в реальной жизни.
avatar
Gudleifr
Admin

Сообщения : 725
Дата регистрации : 2017-03-29

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: [__My 4tH__]

Сообщение автор _KROL в Вс Сен 10, 2017 7:13 pm

Так я так порой и делаю, просто надо же порою включать для проверки какие-то зачатки других частей.

_KROL

Сообщения : 91
Дата регистрации : 2017-07-28
Возраст : 18
Откуда : Беларусь

Посмотреть профиль

Вернуться к началу Перейти вниз

OLD4tH system v.0.026 DRAFT (10.12.17)

Сообщение автор _KROL в Пт Дек 01, 2017 8:51 pm

OLD4tH system v.0.026 DRAFT (10.12.17)

--- КРАТКОЕ ОПИСАНИЕ ---
Обычный Форт, но с откланениями от стандартов.

--- СОКРАЩЕНИЯ ---
ШК - Шитый Код

--- СОГЛАШЕНИЯ ---
0.Общее
* При использовании слова "стек" по умолчанию должен пониматься "стек данных".
Т.е. слово "данных" можно опускать. Если же слову "стек" в соответствующем
контексте даётся другое значение, то это должно быть оговорено заранее.
* Стек данных (аргументов и т.д.) имеет сокращение "S" и никак иначе.

1.Оформление исходного кода на ЦЯ
* Перед объявлением коментария-заголовка слов ставится ";;" (для ассемблера)
или "///" для C/C++, чтобы позже можно было выделять эти слова из исходного
кода для документации.

2.Оформление исходного кода на Форте
* Сокращения в стековой нотации:
S: - стек (данных)
R: - стек возвратов
M: - память
T: - шитый код (данные, следующие за вызовом этого слова)
V: - словарь
тип' - указатель на ячейку с типом (примеры: CHAR' WORD' CELL')
'слово - указатель или вектор слова

3.Другое
* Прямой ШК
* Под "устройством ввода/вывода" может пониматься как файл, так и отдельный
порт.

--- КАРТА ПАМЯТИ ---
...
SEG=?
OFS:
0x0000
...
0x000B0000 - 0x000B7777 - Monochrome Video Memory
0x000B8000 - 0x000BFFFF - Color Video Memory
...

--- РЕГИСТРЫ ---
SI - IA (Interpret Address - адрес интерпретации)
SP - RP (Return stack Pointer - стек возвратов)
BX - первый элемент стека
BP - SP (указатель на остальные элементы стека)

--- ЗНАЧЕНИЯ (ПЕРЕМЕННЫЕ И КОНСТАНТЫ) ---
FALSE=0
TRUE=-1
BL=" "
VER - версия системы
BASE - текущая система счисления
STATE - регистр состояния системы
HERE - указатель на вершину словаря
LAST - указатель на последнее слово словаря
LATEST - указатель на ячейку указывающую на последнее слово в словаре
CURRENT - словарь, куда заносятся слова
CONTEXT - указатель на первый элемент списка поиска слов
ORDER - список поиска словарей
PAD - временный буфер ввода
HLD - текущий символ в PAD
XHND - адрес кадра исключения (для CATCH THROW)

INPUT - идентификатор устройства ввода
OUTPUT - идентификатор устройства ввода
BUF - адрес начала входного буфера
$BUF - размер входного буфера
#BUF - количество считанных байтов
>IN - текущее смещение от начала входного буфера

--- СТРУКТУРЫ ---


--- ПОИСК СЛОВ ---
(CONTEXT) => ORDER(остальной список) => CURRENT => FORTH

--- ИСПОЛНЕНИЕ ---


--- ИНТЕРПРЕТАЦИЯ ---


--- ОПРЕДЕЛЕНИЕ НОВЫХ СЛОВ ---


--- ПРИМИТИВЫ ---


--- ОТЛИЧИЯ ОТ СТАНДАРТОВ ---
* Некторые названия слов изменены (XHND)
* Ввод/вывод стал только через буфера (исчез TIB), также изменены сами слова
(хочу C<< C>> W<< W>> D<< D>> ..., при этом, возможно добавлю в/в через порты)
* Сокращения в обазначениях
* Порядок поиска

P.s. Думаю над в/в.
P.p.s. Я не думаю, что надо всё всегда упращать до одного слова СИМВОЛ.

_KROL

Сообщения : 91
Дата регистрации : 2017-07-28
Возраст : 18
Откуда : Беларусь

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: [__My 4tH__]

Сообщение автор Gudleifr в Вс Дек 10, 2017 9:27 pm

Сразу прошу прощения за избыточное цитирование себя любимого...
Начну, правда, с Мура: ТЕМА #30, АБЗАЦ #228. Можно заметить, что Мур первым делом организует цикл, пусть даже и пустой. И это не просто "ФВМ", а полный цикл разработки FORTH-системы, все остальное делается уже внутри этого цикла, не выходя наружу (в ОС).
По мере узаконивания FORTH цикл стал более "цивилизованным": ТЕМА #12, АБЗАЦ #757. Но смысл остается прежним: фортер делает все внутри него, "не выходя наружу".
Именно этим я бы и посоветовал Вам заняться, а не вылизывать отдельные места, находясь снаружи. Между прочим, я и ввел когда-то эти этапы разработки - ТЕМА #30, АБЗАЦ #225 - именно для ускорения замыкания цикла (в условиях более современных IDE, чем были во времена Мура).
Замыкание цикла не только позволит насладится FORTH-программированием практически сразу, но и заставит Вас решить, наконец, повисшую в воздухе проблему - взаимоотношения FORTH и ОС, FORTH и инструментария его написания, FORTH и его рабочего окружения.
Можно заметить, что для своего первого FOBOS я быстро замкнул и второй цикл - ТЕМА #71, АБЗАЦ #768 - внутри самого FORTH (с редактированием СЛОВАРЕЙ/БЛОКОВ), и снаружи (путем правки его исходников).

А с СИМВОЛОМ все просто: либо Вы понимаете, какое место он занимает в Вашем цикле, где начинается и где... либо у Вас будет эрзац-FORTH, с которым Вы не сможете вдоволь поиграть ввиду непонимания...
avatar
Gudleifr
Admin

Сообщения : 725
Дата регистрации : 2017-03-29

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: [__My 4tH__]

Сообщение автор Gudleifr в Чт Фев 08, 2018 10:58 am

_KROL пишет:А может так и сделать? Тогда блочный диск (или файл) получается как pagefile, да и использовать его можно как канал между процессами.
А Вы делали это без FORTH? Или Вы думаете, что оно заработает только потому, что FORTH "уже почти работает"?
avatar
Gudleifr
Admin

Сообщения : 725
Дата регистрации : 2017-03-29

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: [__My 4tH__]

Сообщение автор Спонсируемый контент


Спонсируемый контент


Вернуться к началу Перейти вниз

Страница 2 из 2 Предыдущий  1, 2

Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения