Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Вт мар 19, 2024 07:21

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 49 ]  На страницу Пред.  1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Сб май 26, 2007 23:57 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
Поскольку ВМ предназначена для экспериментов с надстроенной над нею системой (ОС), а не с самой ВМ, то логично пользоваться всеми удобствами.
В частности, нужно ли делать именно действительно 4-битный код (Админ уже делает, но так, на перспективу), или лучше пусть "код внутри ВМ" будет произвольным, а нас будет волновать только мнемоническое обозначение - факт-ски ассемблр


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вс май 27, 2007 00:47 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
вопрос писал(а):
а не с самой ВМ,


Совсем не факт. Эксперименты с самой ВМ играют немаловажную роль.
И главная задача эксперимента с ней - построение наиболее эффективной и простой ВМ. Именно поэтому 4 бита, а не 8 и не 13

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вс май 27, 2007 07:59 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
WingLion, а что насчёт упомянутого выше ассемблера? или делать биты вручную?

_________________
понимаю некоторую бестолковость некоторых вопросов


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вс май 27, 2007 15:28 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
ассемблер для ВМ надо еще делать. В принципе, можно сразу начинать, закодировав команды словами по-фортовски.
Вручную биты кодировать надо будет только поначалу, на почти голом месте.
Почти голом, а не совершенно голом, потому что SPF-то под рукой, на нем и делать целевой компилятор.

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн май 28, 2007 12:47 
Не в сети

Зарегистрирован: Сб май 06, 2006 12:01
Сообщения: 959
Откуда: Украина, Харьков
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
вопрос писал(а):
а нас будет волновать только мнемоническое обозначение - факт-ски ассемблр
Команды ColorForth-а/MachineForth-а это и есть ассемблер муровского Форт-процессора. :)
мы можем сделать также. :)
Я делал команды в нижнем регистре, чтоб не было конфликтов. ;)

_________________
With best wishes, in4.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн май 28, 2007 13:36 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
in4 писал(а):
вопрос писал(а):
а нас будет волновать только мнемоническое обозначение - факт-ски ассемблр
Команды ColorForth-а/MachineForth-а это и есть ассемблер муровского Форт-процессора. :)
Можено чуть подробнее, чтобы я понял, о чём это? Есть НАСТРАИВАЕМЫЙ ассемблер? В виде форта?
in4 писал(а):
мы можем сделать также. :)
Я делал команды в нижнем регистре, чтоб не было конфликтов. ;)

По-любому для сколь-нибудь серьёзного проекта следует оставить разницу регистров (не оба)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн май 28, 2007 14:50 
Не в сети

Зарегистрирован: Сб май 06, 2006 12:01
Сообщения: 959
Откуда: Украина, Харьков
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
вопрос писал(а):
Можено чуть подробнее, чтобы я понял, о чём это? Есть НАСТРАИВАЕМЫЙ ассемблер? В виде форта?

Не настраиваемый :( , но если переписывать весь набор примитивов, то можно и настроить. ;)
У меня уже есть набор слов Форта, которые добавляют на here-> коды команд процессора x86, реализующие примитивы, соответствующие этим словам. Ветвления тоже есть, идею реализации первоначально брал из Баранова.
Потом над этими примитивами надстроены многие исходники, которые я адаптировали из Баранова. Не хватает времени для настройки самокомпиляции (компиляции своих собственных исходников).

А этот самый набор примитивов Форта как раз и можно рассматривать как ассемблер процессора - аппаратного или ВМ. Нужно другое кодирование - перепиши некоторые или все примитивы. Будет генерироваться код для другого процессора. ;) Все слова, которые используют только эти примитивы, будут продолжать работать! :) == переносимость... ;)

Поскольку примитивов не так и много - делается быстро. Для ВМ.
У меня первый раз получилось долго из-за сложностей проверки - для каждого примитива делал код в Hiew, потом добавлял этот код в исходник на PERL (под DOS - SPF там не работал :( ), проверял в TD (Turbo Debugger)... Ошибка - вплоть до перезагрузки... :(
И это при том, что уже были коды для 32х разрядных примитивов... ;) Хотя, м., это и плохо - сначала я смотрел, что было, а потом придумывал аналог для 16-разрядных... ;)
Использование готового ассемблера может помочь, но код смотреть прийдется - хотя бы из-за оптимизации. :(
У моих исходников еще один недостаток - нестандартный Форт... :(
В принципе, можно и подогнать к стандарту, но мне имеющийся вариант как-то больше нравится... ;)
Еще я делал "ассемблер" - набор примитивов, которые просто печатали куски исходника на ассемблере. Потом я вставлял это в асм-программу... ;) Если добавить обрамление (начало и конец) - то можно получать и исходник в виде одного файла. Опять же для смены процессора надо просто изменить примитивы... ;)
Некоторые сложности могут быть с переходами, но это прийдется решать уже в Форте - как сформировать соответствующие метки и переходы на них... ;) Будешь делать - увидишь. Если что - спрашивай! :)

_________________
With best wishes, in4.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн май 28, 2007 15:23 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
Цитата:
Еще я делал "ассемблер" - набор примитивов, которые просто печатали куски исходника на ассемблере. Потом я вставлял это в асм-программу... Если добавить обрамление (начало и конец) - то можно получать и исходник в виде одного файла. Опять же для смены процессора надо просто изменить примитивы...
Угу, пресловутая гибкость Форта ... :<
Сколько же возможностей ... для той же ОС ... :oops:

Но отладка под ТD?

Насчёт "делания" ассемблерного текста (исходника) - так юниксовские компиляторы так построены, и никаких неудобств.

_________________
понимаю некоторую бестолковость некоторых вопросов


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн июн 11, 2007 11:10 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
А сколько нужно слов, чтобы поверх ВМ реализовать Форт? хотя бы порядок ... 20? 40? 512?

По ходу - в каком состоянии эта машина?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн июн 11, 2007 19:22 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
чтобы был нормальный Форт, хотя бы F83 - порядка 200 слов...

a состояние не изменилось...
/me другой работой занимается

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср июн 13, 2007 23:55 
Не в сети

Зарегистрирован: Сб май 06, 2006 12:01
Сообщения: 959
Откуда: Украина, Харьков
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
вопрос писал(а):
А сколько нужно слов, чтобы поверх ВМ реализовать Форт? хотя бы порядок ... 20? 40? 512?

Я вписался в менее 20 без учета примитивов. С ними - менее 40.
Имеется ввиду слова, которые нужны для раскрутки системы и которые можно переопределить позднее.
Остальные слова определяются с помощью этих и ранее определенных... ;)
По ходу дела определяются и слова для оптимизирующего компилятора в 16 битовый машинный код. В качестве образца для некоторых решений использовал ColorForth Мура... ;)

_________________
With best wishes, in4.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт июн 14, 2007 01:41 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
понятно, а если учесть, что поверх этого должна стать ОС - сколько тогда приблизительно? В 750 уложиться можно?

_________________
понимаю некоторую бестолковость некоторых вопросов


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт июн 14, 2007 02:11 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
in4 писал(а):
Я вписался в менее 20 без учета примитивов. С ними - менее 40.

Огласите список!


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт июн 14, 2007 02:46 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
mOleg писал(а):
in4 писал(а):
Я вписался в менее 20 без учета примитивов. С ними - менее 40.

Огласите список!
Да, междупрочим.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб июн 16, 2007 19:46 
Не в сети

Зарегистрирован: Сб май 06, 2006 12:01
Сообщения: 959
Откуда: Украина, Харьков
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
К сожалению, язык ColorLessColorForth.
В принципе, можно сделать аналог и для обычного Форта, но некоторые решения не так красивы. :(
Слова немедленного исполнения расположены в словаре macro
Словари переключаются интерпретаторами. Их два - интерпретации и компиляции.
Генерируется 16 разрядный код. Есть несколько некрасивых мест... :(

Это слова, используемые для компиляции компилятора
Код:
+w' fortho \
+w' fortho (
+w' fortho :
+w' fortho ]
+w' fortho ],
+w' fortho const  \ внешняя ссылка, потом восстановить!

\ +w' fortho h0  \ var , д. совпадать с системой :(
\ +w' fortho list  \ var , д. совпадать с системой :(
\ +w' fortho list1  \ var , д. совпадать с системой :(

\ +w' fortho >in  \ var , д. совпадать с системой :(
\ +w' fortho |source  \ var , д. совпадать с системой :(
\ +w' fortho /source  \ var , д. совпадать с системой :(

\ +w' fortho context1  \ var , д. совпадать с системой :(
\ +w' fortho current  \ var , д. совпадать с системой :(


+w' macroo \
+w' macroo (
+w' macroo :
+w' macroo ;
+w' macroo [
+w' macroo ',

\ для отладки
+w' macroo ."
\ /для отладки

\ явно выделяем нужные макросы
+w' macroo h0  \ var , д. совпадать с системой :(
+w' macroo list  \ var , д. совпадать с системой :(
+w' macroo list1  \ var , д. совпадать с системой :(
+w' macroo +!
+w' macroo @
+w' macroo c!
+w' macroo !
+w' macroo over
+w' macroo c@
+w' macroo dup
+w' macroo +
\ ^хватает для компиляции компилятора

\ h0 list list1 должны соответствовать интерпретаторам :(

  +w' macroo >in  \ var , д. совпадать с системой :(
  +w' macroo |source  \ var , д. совпадать с системой :(
  +w' macroo /source  \ var , д. совпадать с системой :(
+w' macroo context1  \ var , д. совпадать с системой :(
+w' macroo current  \ var , д. совпадать с системой :(


А это бОльшая часть компилятора... ;)
Код:
\ подготовка компилятора
\ 0CCFE const h0  \ надо, чтобы h0 соответствовало системе
\ 04800 h0 !


: !  ! ;  \ нужно для инициализации var0

: allot ( n -- )  \ выделить память в куче
   h0 +! ;

: here  h0 @ ;

: 1,  here  1 allot  c! ;  \ обобщать на cell нет смысла...
: 2,  here  2 allot  ! ;

: dup,  \ скомпилить dup
  748D 2, 0FE 1,  0489 2, ;

[
macro .curvocs  \ добавляем в новый macro

: if  74 2, here ;  \ jz je, продолжаем по T , <>0
: neg  D8F7 2, ;  \ neg ax
: -  ', neg  ', + ;
: swap  0487 2, ;
: test  C085 2, ;  \ test ax,ax

[ forth
: -  - ;
\ var var0  \ адрес в пуле переменных
\ растет вниз, переделать
\ : var  2
\ : vars \ ( n "name" -- )
\   var0 dup @  const  +! ;
\ : dvar  4 vars ;

[ \ это инициализация кучи и пула переменных
0CCFC const var0
var0  var0 !
: var 2
: vars ( n "name" -- )
   var0 @  swap -  dup var0 !  const ;
[ here const refconst  \ ссылка для восстановления
: dvar  4 vars ;



[ macro
: drop  here list ! AD 1, ;  \ lodsw

: then  \ без swap !!
\ пока без проверок правильной вложенности и дальности перехода
\   here over - $FF -
   0 list !  \ запретить оптимизацию до here
   here over - over 1 - c!  drop ;



\ ?dup компилит dup , если пред. команда не drop
: ?dup
   here 1 -  list @  - drop if dup, ; then  \ пред команда>1б
   list @  c@ 0AD - drop if dup, ; then  \ не drop
   1 neg allot ;

[
forth
\ ?lit проверяет $B8 у последней команды и засовывает ее
\   слово в стек, удаляет ее саму и, м.б., предыд. dup
\   и передвигает указатель последней команды
\   ZF если ничего не добавилось на стек
\   д.б. в forth
: ?lit
   list @  here 3 -  - drop  if 0 test drop ; then
      \ не 3 байта назад !!
   list @ c@  B8  - drop  if
      0 test drop ; then  \ было не B8, выход
   list @ 1 + @  3 neg allot  \ отмотали mov ax,x
   list1 @      @  748D  - drop  if ; then
   list1 @  2 + @  89FE  - drop  if ; then
   5 neg allot ;  \ отмотали dup

\ [ macron d@ dump .sar ]

[
forth .curvocs

s" теперь начинаем компилятор" type .sar
\ а теперь начинаем компилятор

macro
\ : swap  0487 2, ;
: nop  90 1, ;
: 0  ', ?dup C031 2, ;  \ или C033
\ : if  74 2, here ;  \ jz je, продолжаем по T , <>0
: -if  79 2, here ;
: nip  748D 2, 02 1, ;  \ переделать на 3, # lea si,[si+2]
: dup  748D 2, FE 1,  0489 2, ;
: over  ', ?dup  448B 2, 02 1, ;


: +  ?lit if 05 1, 2, ; then 0403 2,  ', nip  ;
: xor  0433
: binary  ?lit if swap 2 + 1, 2, ; then 2,  ', nip  ;
: and 0423  ', binary  ;
: or  040B  ', binary  ;
: a  ', ?dup  C38B 2, ;
: a! ?lit if BB 1, 2, ; then D88B 2, ', drop ;  \ mov bx,ax
: 2*  E0D1 2, ;
: @  ?lit if  ', ?dup  A1 1, 2, ; then 53 1, D88B 2, 078B 2, 5B 1, ;
    \ mov ax,[x] ;  push bp  mov bx,ax  mov ax,[bx]  pop bp
\ : @  ?lit if  ', ?dup  58B 2, ', a, ; then 85048B 3, 0 , ;  \ !!
   \ mov eax,[x] ;  mov    eax,[eax*4+0]
: !  ?lit if ?lit if 06C7 2, 2, 2, ; then
   A3 1, 2,  ', drop  ; then  \ mov [x],ax
   ', a!  0789 2,  ', drop ;  \ mov [bx],ax
\ : !  ?lit if ?lit if 5C7 2, swap  ', a,  , ; then
\   589 2,  ', a,  ', drop  ; then
\   ', a!  950489 3, 0 ,  ', drop ;
: push  50 1,  ', drop  ;
: pop  ', ?dup  58 1, ;
: over  ', ?dup  448B 2, 02 1, ;
: u+  4401 2, 02 1, ', drop ;
: inv  D0F7 2, ;  \ not ax
: align  here inv 3 and drop if  ', nop  ', align  ; then ;
: *  2CF7 2,  ', nip  ;
: */  C88B 2,  ', drop  2CF7 2,  F9F7 2,  ', nip  ;  \ новое!
: 2/  F8D1 2, ;
: /mod  ', swap  99 1,  3CF7 2,  1489 2, ;
: /  ', /mod  ', nip  ;
: mod  ', /mod  ', drop  ;
: +!  ?lit if ?lit if 0681 2, swap  2, 2, ; then
   0601 2,  2,  ', drop  ; then
   ', a!  0701 2,  ', drop  ;
: c@  ', a!  ', 0  078A 2, ;
: c!  ', a!  0788 2,  ', drop ;  \ mov [bx],al
: emit  C288 2,  02B4 2,  21CD 2,  ', drop ;
: key  ', ?dup  08B4 2,  21CD 2,  E430 2,  C084 2,  0675 2,
   08B4 2,  21CD 2,  01B4 2, ;
\ : neg  D8F7 2, ;  \ neg ax
: (fopen)  \ mode DS:buffer -- Handle/Error CF=Err
   D08B 2,  ', drop  3DB4 2, \ mov dx,ax ... mov ah,3D
   21CD 2, ;  \ int 21
: (fclose)  \  Handle -- Error CF=Err
   D88B 2,  \ mov bx,ax
   3EB4 2,  21CD 2, ;  \ mov ah,3D; int 21
: (fread)  \ c-addr u1 fileid -- u2/Err CF=Err
   D88B 2,  ', drop  \ mov bx,ax
   C88B 2,  ', drop  \ mov cx,ax
   D08B 2,  3FB4 2,  \  mov dx,ax; mov ah,3F
   21CD 2, ;  \ int 21
: ifc  73 2, here ;
: ifz  75 2, here ;  \ jnz jne, продолжаем по F , ==0
: (fwrite)  \ c-addr u1 fileid -- u2/Err CF=Err
   D88B 2,  ', drop  \ mov bx,ax
   C88B 2,  ', drop  \ mov cx,ax
   D08B 2,  40B4 2,  \  mov dx,ax; mov ah,40
   21CD 2, ;  \ int 21
: cold
   C48B 2,     \ mov ax,sp
   05 1, 2 2,  \ add ax,2
   0174 2,     \ jz $+1
   C3 1,       \ retn
   BC 1, F000 2,  BE 1, E000 2,  \ mov sp,x; mov si,x
   C033 2,  50 1,  \ xor ax,ax; push ax
   ;
\ : -  ', neg  ', + ;
: (fcreate)  \ mode DS:buffer -- Handle/Error CF=Err
   D08B 2,  ', drop  \ mov dx,ax
   C88B 2,  \ mov cx,ax
   3CB4 2,  \ mov ah,3C
   21CD 2, ;  \ int 21
: (fseek)  \ dir lo hi h -- lo hi CF=Err
   D88B 2,  ', drop  \ mov bx,ax
   C88B 2,  ', drop  \ mov cx,ax
   D08B 2,  ', drop  42B4 2, \ mov dx,ax ... mov ah,42
   21CD 2,  \ int 21
   ', dup  C28B 2, ;  \ mov ax,dx
\ : test  C085 2, ;  \ test ax,ax

: ifz  75 2, here ;  \ jnz jne, продолжаем по F , ==0

: c@+  ', ?dup C033 2, 078A 2, 43 1, ;
   \ xor ax,ax; mov al,[bx], inc bx

: c!+  0788 2, 43 1, ;  \ mov [bx],al; inc bx; без drop !!

: cr@+
   ', ?dup  C033 2, 5D 1, 468A 2, 0 1, 45 1, 55 1, ;
   \ xor ax,ax; pop bp; mov al,[bp+0]; inc bp; push bp;

: less  0439 2, 0278 2, ED33 2, ;
   \ cmp [si],ax; js+2; xor bp,bp

: um*
   89 1, C1 1, AD 1, F7 1, E1 1, 8D 1, 74 1, FE 1, 89 1, 04 1, 89 1, D0 1, ;

: um/mod
   89 1, C1 1, AD 1, 8B 1, 14 1, 87 1, C2 1, F7 1, F1 1, 89 1,
   14 1, ;
   \ UM/MOD  портит a(dx) c(cx)!!

[ forth
var (begin)

macro
: begin  here (begin) ! ;
: again  E9 1,  (begin) @ here -  2 - 2, ;
[ forth .curvocs ]

дальше пошла раскрутка Форт-системы...

В нем нет одной важной части - пока не может откомпилить себя... :(
Это можно решить настройками параметров - адресов областей словарей и кода.

Когда доделаю, покажу все целиком! :)

_________________
With best wishes, in4.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 49 ]  На страницу Пред.  1, 2, 3, 4  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB