Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Пн сен 23, 2019 11:30

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 46 ]  На страницу Пред.  1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения: Re: ef \ esoteric forth \
СообщениеДобавлено: Вт авг 06, 2019 14:17 
Не в сети
Аватара пользователя

Зарегистрирован: Ср июл 03, 2019 11:10
Сообщения: 83
Откуда: Москва
Благодарил (а): 15 раз.
Поблагодарили: 0 раз.
f02732 писал(а):
Это чем-то зашифровано?

Нет, это я выбросил комментарии, пробелы и переводы строки. :D


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: ef \ esoteric forth \
СообщениеДобавлено: Вт авг 06, 2019 18:00 
Не в сети
Аватара пользователя

Зарегистрирован: Ср июл 03, 2019 11:10
Сообщения: 83
Откуда: Москва
Благодарил (а): 15 раз.
Поблагодарили: 0 раз.
Ядро:

Код:
\ file: c \

`
.model tiny
.8086
.code
.startup
cld
mov bx,0FC00h

jmp main

@5F: ; _
mov ax,[bx]

@pop:
lea bx,[bx+2]
ret

@23: ; #
dec bx
dec bx
mov [bx],ax
ret

@24: ; $
xchg ax,[bx]
ret

@3F: ; ?
shl ax,1
xchg di,ax
mov ax,[bx+di]
ret

@2D: ; -
neg ax

@2B: ; +
add ax,[bx]
db 3Dh

@2A: ; *
imul word ptr [bx]
db 3Dh

@26: ; &
and ax,[bx]
db 3Dh

@5E: ; ^
xor ax,[bx]
db 3Dh

@7C: ; |
or ax,[bx]
jmp short @pop

@3D: ; =
xor ax,[bx]
sub ax,1
sbb ax,ax
jmp short @pop

@3C: ; <
xchg ax,[bx]

@3E: ; >
sub ax,[bx]
mov cl,15
sar ax,cl
jmp short @pop

@21: ; !
xchg di,ax
mov ax,[bx]
mov [di],ax
jmp short @2drop

@40: ; @
xchg di,ax
mov ax,[di]
ret

@2E: ; .
xchg di,ax
mov ax,[bx]
mov [di],al

@2drop:
call @5F;_
call @5F;_
ret

@2C: ; ,
xchg di,ax
xor ax,ax
mov al,byte ptr [di]
ret

main:
`


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: ef \ esoteric forth \
СообщениеДобавлено: Вт авг 06, 2019 18:02 
Не в сети
Аватара пользователя

Зарегистрирован: Ср июл 03, 2019 11:10
Сообщения: 83
Откуда: Москва
Благодарил (а): 15 раз.
Поблагодарили: 0 раз.
Чтение файла:

Код:
\ file: f \

: x \ fclose \ `
   push bx
   xchg bx,ax
   mov ah,3Eh
   int 21h
   pop bx
   `
   _
;

: o \ fopen \ `
   xchg dx,ax
   mov ah,3Dh
   xor cx,cx
   int 21h
   `
;

: g \ fgetc \ `
   push bx
   xchg bx,ax
   mov ax,3F00h
   mov cx,1
   push ax
   mov dx,sp
   int 21h
   pop ax
   xor ah,ah
   pop bx
   `
;


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: ef \ esoteric forth \
СообщениеДобавлено: Вт авг 06, 2019 18:03 
Не в сети
Аватара пользователя

Зарегистрирован: Ср июл 03, 2019 11:10
Сообщения: 83
Откуда: Москва
Благодарил (а): 15 раз.
Поблагодарили: 0 раз.
Вывод:

Код:
\ file: o \

: c \ putc \ \ c --- \ `
   mov dl,al
   mov ah,2
   int 21h
   `
   _
;

: b \ hex (byte) \ \ c --- \
   # `
   shr ax,4
   `
   \ 15 \ 9 6 + & # 9 > { '7' ~ '0' } + c
   \ 15 \ 9 6 + & # 9 > { '7' ~ '0' } + c
;

: h \ hex \ \ n --- \
   # `
   shr ax,8
   `
   b
   b
;

: s \ puts \ \ a --- \ # , ( # , c 1 + # , ) _ ;


Последний раз редактировалось Total Vacuum Вт авг 06, 2019 18:04, всего редактировалось 1 раз.

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: ef \ esoteric forth \
СообщениеДобавлено: Вт авг 06, 2019 18:04 
Не в сети
Аватара пользователя

Зарегистрирован: Ср июл 03, 2019 11:10
Сообщения: 83
Откуда: Москва
Благодарил (а): 15 раз.
Поблагодарили: 0 раз.
... и сам транслятор:

Код:
\ file: efx86.ef \

% c \ core \
% o \ out  \
% f \ file \

\ a     push address (label) \
\ b % o hex (byte) \
\ c % o putc \
\ d     pass \
\ e     enlarge token string \
\ f [ ] file \
\ g % f fgetc \
\ h % o hex \
\ i [ ] label index \
\ j     jmp \
\ k     case \
\ l [ ] token length \
\ m     newline \
\ n     next token \
\ o % f fopen \
\ p [ ] return stack pointer \
\ q [ ] quick search table \
\ r [ ] return stack \
\ s % o puts \
\ t [ ] token \
\ u     unstack address \
\ v     verify \
\ w     write code \
\ x % f fclose \
\ y     yet another char \
\ z     jz \

: y \ yet another char \ f @ g # q . ;
: e \ enlarge token string \ l # @ q , 1 ? t + . 1 + $ ! ;

: n \ next token \
   0 # l !
   t (
      t ( y # '!' < & )
      q , '\' = # ( y '\' - )
   )
   e
   t , # # #
   ''' = # { y e _ } $ '"' = | $ '`' = | ( # y e - ) _
   l @ t + .
;

: a \ push address (label) \ i @ p @ 2 * r + ! i # @ 1 + $ ! p # @ 1 + $ ! ;
: u \ unstack label \ p # # @ 1 - $ ! @ 2 * r + @ ;

: m \ newline \ 5 # + c ;

: k \ case \ 1 ? , = ;
: j \ jmp \ "jmp l" s ;
: v \ verify \ 'l' c i @ h ':' c a "cmp ax,0" s m ;
: z \ jz \
   "jne t" s i @ h m
   j i @ h m
   't' c i @ h ':' c
   a
;

: w \ write code \
   # ''' k $ , # ':' < $ '/' > & | {
      #
      "#" w
      "mov ax,0" s
      ''' k { 1 + , ~ , '0' - } h
      'h' c m
   ~ '"' k {
      #
      "#" w
      "lea ax,$+5" s m
      j i @ h m
      "db " s s ",0" s m
      'l' c i @ h ':' c
      i # @ 1 + $ !
   ~ '`' k {
      1 +
      # , '`' - (
         # , c 1 +
      # , '`' - )
   ~ '{' k {
      v u _
      "_" w
      z
   ~ '~' k {
      j i @ h m
      'l' c u h ':' c
      a
   ~ '}' k {
      u 'l' c h ':' c
   ~ '(' k {
      v
      "_" w
      z
   ~ ')' k {
      u j u h m
      'l' c h ':' c
   ~ '[' k {
      v
      z
      "dec ax" s m
   ~ ']' k {
      u j u h m
      'l' c h ':' c
      "_" w
   ~
      "call @" s # , b m
   } } } } } } } } } }
   _
;

: d \ pass \
   f @ $ o f ! \ open \
   n t , (
      ':' t , = {
         n
         j t , # # b m
         '@' c b ':' c
         0 q t , + .
         n t , ';' - ( t w n t , ';' - )
         "ret" s m
         'l' c b ':' c
      ~ '%' t , = {
         n t d
      ~
         t w
      } }
   n t , )
   f @ x f ! \ close \
;

'{' # [ # q + 1 $ . ]
0 p !
'@' # + # # , # { 1 + } + 0 $ . 2 + \ argv \ d
"ret" s m
'a' - [ # q + 'a' + , { '@' c # 'a' + # b ':' c "#" w "lea ax,d+0" s 'A' - ' ' # * * h 'h' c m "ret" s m } ]
"d dw 29696 dup(?)" s m
"end" s


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: ef \ esoteric forth \
СообщениеДобавлено: Вт авг 06, 2019 18:08 
Не в сети
Аватара пользователя

Зарегистрирован: Ср июл 03, 2019 11:10
Сообщения: 83
Откуда: Москва
Благодарил (а): 15 раз.
Поблагодарили: 0 раз.
Лежит тут: http://totalvacuum.ru/EF/00000000.zip

ax top of stack
bx data stack pointer

Компилировать так:
Код:
efx86.com efx86.ef>efx86.asm
tasm.exe /m9 efx86.asm
tlink.exe /t /x efx86.obj


Будет работать в XP/7(32bit)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: ef \ esoteric forth \
СообщениеДобавлено: Вт авг 06, 2019 19:26 
Не в сети

Зарегистрирован: Пн июл 01, 2019 14:01
Сообщения: 46
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Код:
lea ax,$+5
jmp l0008
db " Hello, world!",0
l0008:call @73
ret
@7A:call @23
lea ax,d+0E400h
ret
@79:call @23
lea ax,d+0E000h
ret
@77:call @23
lea ax,d+0D800h
ret
@76:call @23
lea ax,d+0D400h
ret
@75:call @23
lea ax,d+0D000h
ret
@74:call @23
lea ax,d+0CC00h
ret
@72:call @23
lea ax,d+0C400h
ret
@71:call @23
lea ax,d+0C000h
ret
@70:call @23
lea ax,d+0BC00h
ret
@6E:call @23
lea ax,d+0B400h
ret
@6D:call @23
lea ax,d+0B000h
ret
@6C:call @23
lea ax,d+0AC00h
ret
@6B:call @23
lea ax,d+0A800h
ret
@6A:call @23
lea ax,d+0A400h
ret
@69:call @23
lea ax,d+0A000h
ret
@66:call @23
lea ax,d+09400h
ret
@65:call @23
lea ax,d+09000h
ret
@64:call @23
lea ax,d+08C00h
ret
@61:call @23
lea ax,d+08000h
ret
d dw 29696 dup(?)
end
О, щи... у эзотерического форта даже выхлоп эзотерический...

Зачем это?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: ef \ esoteric forth \
СообщениеДобавлено: Вт авг 06, 2019 21:19 
Не в сети
Аватара пользователя

Зарегистрирован: Ср июл 03, 2019 11:10
Сообщения: 83
Откуда: Москва
Благодарил (а): 15 раз.
Поблагодарили: 0 раз.
f02732 писал(а):
О, щи... у эзотерического форта даже выхлоп эзотерический...

Зачем это?


Замысел был такой:
Есть 26 пользовательских слов a-z. Те слова, которые пользователь не переопределил через : ... ;, считаются массивами размера 1K. Соответственно, выхлоп (код после db "hello world") - это реализация неиспользованных пользователем слов, помещает в стек адрес первого элемента массива. Можно было бы придумать явный способ объявления массивов/переменных, но лень :)

Можно, конечно, помечать те переменные, которые использованы хотя бы раз, а в конце выводить только их, но это усложняет транслятор. На данном этапе на первом месте стоит простота транслятора, размер и уж тем более красота выходного файла пока волнует меньше всего. Но если придумается какой-то лаконичный способ исключения неиспользованных слов, то обязательно сделаю. :)

Любые идеи/пожелания приветствуются :D


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: ef \ esoteric forth \
СообщениеДобавлено: Ср авг 07, 2019 09:38 
Не в сети

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 1107
Благодарил (а): 3 раз.
Поблагодарили: 41 раз.
Total Vacuum писал(а):
Друзья, а какая реализация Форт, на ваш взгляд, является самой:

0) удивительной/необычной/нестандартной/красивой;
1) правильной, т.е. образцом для подражания;
2) неправильной/страшной/уродливой;

А, какие проекты Форт уже были просмотрены?

P.S. Например в языке ForthLogic (Форт для ПЛК) определённым образом включены таймерные переменные для распараллеливания задач.
На базе ассемблерного Reva Forth сделан CoSy, но поизучать "руки" как то не дошли. :)

Ни один антивирус с virustital не нашёл в esoteric forth вируса, наверное сигнатуры известных вирусов "намного" больше данного размера файла. :)
На Reva в разных вариациях ругаются отчасти (из оригинального места и из CoSy по разному)



За это сообщение автора KPG поблагодарил: Total Vacuum
Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: ef \ esoteric forth \
СообщениеДобавлено: Ср авг 07, 2019 18:13 
Не в сети
Аватара пользователя

Зарегистрирован: Ср июл 03, 2019 11:10
Сообщения: 83
Откуда: Москва
Благодарил (а): 15 раз.
Поблагодарили: 0 раз.
KPG писал(а):
P.S. Например в языке ForthLogic (Форт для ПЛК) определённым образом включены таймерные переменные для распараллеливания задач.
На базе ассемблерного Reva Forth сделан CoSy, но поизучать "руки" как то не дошли. :)

Спасибо, присмотрюсь к этим вещам повнимательнее. :)

KPG писал(а):
Ни один антивирус с virustital не нашёл в esoteric forth вируса, наверное сигнатуры известных вирусов "намного" больше данного размера файла. :)

Он все еще слишком громоздок, т.к. многие вещи из-за нехватки пользовательских слов делались по методу copy/paste :) Можно было бы использовать заглавные буквы A-Z и даже (скажу по секрету) русские, но это "не в духе esoteric forth" :))

Немного сплющил, числа 0-9 убрал в ядро, обработчики слов : и % include перенес в compile, ну и кое-что по мелочи :) Вместо 2.5K компилируется в 2.2K. Лежит тут: http://totalvacuum.ru/EF/00000001.zip


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: ef \ esoteric forth \
СообщениеДобавлено: Ср авг 07, 2019 18:47 
Не в сети

Зарегистрирован: Пн янв 07, 2013 22:40
Сообщения: 1107
Благодарил (а): 3 раз.
Поблагодарили: 41 раз.
Total Vacuum писал(а):
Он все еще слишком громоздок, т.к. многие вещи из-за нехватки пользовательских слов делались по методу copy/paste :) Можно было бы использовать заглавные буквы A-Z и даже (скажу по секрету) русские, но это "не в духе esoteric forth" :))

Для чего тогда возможно использовать 8-й свободный бит команды? (immediate?)

P.S. И, если % устанавливает контекст (core, file, ...) то это может служить изменением контекста пользовательских букв (что то близкое к включению контекста поиска в другом словарике букв).


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: ef \ esoteric forth \
СообщениеДобавлено: Ср авг 07, 2019 19:23 
Не в сети
Аватара пользователя

Зарегистрирован: Ср июл 03, 2019 11:10
Сообщения: 83
Откуда: Москва
Благодарил (а): 15 раз.
Поблагодарили: 0 раз.
KPG писал(а):
Для чего тогда возможно использовать 8-й свободный бит команды? (immediate?)

Возможно. С другой стороны, пока не очень хочется лезть в старшую половину ASCII-таблицы, т.к. могут быть проблемы с кодировками.

KPG писал(а):
P.S. И, если % устанавливает контекст (core, file, ...) то это может служить изменением контекста пользовательских букв (что то близкое к включению контекста поиска в другом словарике букв).

Интересная мысль, надо обмозговать. У меня были такие мысли по поводу контекста: разрешить вложенные объявления слов. Пример:
Код:
: x \ контекст x \
   ...
   : m ... ; \ с этого момента m означает max \
   ...
   m \ можно использовать max внутри x \
   ...
;
...
: y \ контекст y \
   ...
   : m ... ; \ с этого момента m означает min \
   ...
   m \ можно использовать min внутри y \
   ...
;
...
m \ переменная/массив m (по-умолчанию), в max или min превратится только после вызова x или y \
...
x m \ переключение на x и вызов max \
...
y m \ переключение на y и вызов min \


Сейчас, кстати, можно пользоваться вложенными объявлениями слов, но объявление в нескольких местах подпрограммы с одним и тем же именем приведет к ошибке во время компиляции. Тут нужно реализовывать режим интерпретации (через простой call m такие вещи не сделать), по команде : в словаре будет обновляться адрес обработчика для следующего за двоеточием слова.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: ef \ esoteric forth \
СообщениеДобавлено: Ср авг 07, 2019 22:08 
Не в сети
Аватара пользователя

Зарегистрирован: Ср июл 03, 2019 11:10
Сообщения: 83
Откуда: Москва
Благодарил (а): 15 раз.
Поблагодарили: 0 раз.
Еще более безумная идея родилась...

Пишем
Код:
: u : a : r : t \ UART \
   ... \ общие действия для всех слов из этого блока, помещаем в стек UART Base Address \
   : c : r ... ; ; \ UART Control Register, добавляем смещение к UART Base Address \
   : s : r ... ; ; \ UART Status Register \
   ...
; ; ; ;
...
uartcr ! \ настраиваем UART \
...
uartsr @ \ читаем статус UART \

или
Код:
: m \ слова m... \
   : a : x ... ; ; \ max \
   : i : n ... ; ; \ min \
;
...
2 3 max \ 2 3 -- 3 \
1 2 min \ 1 2 -- 1 \
...

Осталось придумать механизм "сброса" контекста, если слово найдено или поиск пошел куда-то не туда. Будет работать жутко медленно, но для богатых периферией микроконтроллеров без таких трюков не обойтись... :)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: ef \ esoteric forth \
СообщениеДобавлено: Вт авг 13, 2019 17:51 
Не в сети
Аватара пользователя

Зарегистрирован: Ср июл 03, 2019 11:10
Сообщения: 83
Откуда: Москва
Благодарил (а): 15 раз.
Поблагодарили: 0 раз.
Код:
%c%s:k1?,=;:yf@g#q.;:ul#@q,1?t+.1+$!;:n0#l!1(1(y#'!'<&)q,'\'=#(y
'\'-))ut,###'''=#{yu_}$'"'=|$'`'=|(#yu-)_l@t+!;:m5#+c;:w'l'ch':'
c;:ai#@$#@1+$!;:d"#"e;:r"_"e;:vi@w"cmp ax,0"sma;:j"jmp l"shm;:z
"jne tl"si@##hmj't'cwa;:e':'k{_nt,##j'@'cb':'c0qt,+.nt,';'-(tent
,';'-)"ret"smw~'%'k{_ntp~'''k{d"mov ax,0"s1+,b'h'cm~'"'k{d
"lea ax,$+5"smi@j"db "ss",0"smaw~'`'k{#l@+1-0$.1+s~'{'k{_v_rz~
'~'k{_i@jwa~'}'k{_w~'('k{_vrz~')'k{_$jw~'['k{_vz"dec ax"sm~']'k{
_$jwr~"call @"s,bm}}}}}}}}}}}};:pf@$of!nt,(tent,)f@xf!;'{'#[#q+1
$.]'@'#+1+##1-,+0$.1+p'`'-[#q+'a'+,{'@'c#'a'+#b':'cd"lea ax,d+0"
s'A'-' '#**h'h'cm"ret"sm}]"d:end"s


:D Еще немного сплющил, исполняемый файл весит 1.9К. Ссылка: http://www.totalvacuum.ru/EF/00000002.zip


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: ef \ esoteric forth \
СообщениеДобавлено: Ср авг 21, 2019 17:03 
Не в сети
Аватара пользователя

Зарегистрирован: Ср июл 03, 2019 11:10
Сообщения: 83
Откуда: Москва
Благодарил (а): 15 раз.
Поблагодарили: 0 раз.
Код:
%c%s:k1?,=;:yf@g#q.;:ul#@q,1?t+.1+$!;:n0#l!1(1(y#'!'<&)q,'\'=#(y
'\'-))ut,###'''=#{yu_}$'"'=|$'`'=|(#yu-)_l@t+!t,;:m5#+c;:w'l'ch
':'c;:ai#@$#@1+$!;:d"#"e;:v_i@wa"\"e;:r"ret"sm;:j"jmp l"shm;:z
"je l"si@hma;:e':'k{_0n###j'@'cwn';'-(ten';'-)rwq+.~'%'k{_n_tp~
'''k{d"mov ax,0"s1+,b'h'cm~'"'k{d"lea ax,$+5"smi@j"db "ss",0"sma
w~'`'k{#l@+1-0$.1+s~'{'k{v_z~'~'k{_i@jwa~'}'k{_w~'('k{vz~')'k{_$
jw~'['k{_i@wa" "ez~']'k{_$jw"_"e~"call @l"s,hm}}}}}}}}}}}};:pf@$
of!n(ten)f@xf!;'|'#[#q+#.]'@'#+1+##1-,+0$.1+p'a'-[#'a'+#q+,{#'@'
cw"0"e"mov ah,0"s'A'-4*b'h'cmr~_}]"end"s


Еще упростил транслятор, укоротил прыжковую часть. Теперь весит меньше 1.7K. Не идеал, но уже близко :) Еще немного и можно будет код по SMS слать :))

P.S. Хм. А ведь это мысль. Обновление прошивки по SMS... :)


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

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


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

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


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

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