Автор |
Сообщение |
|
|
Заголовок сообщения: |
Re: ef \ esoteric forth \ |
|
|
KPG писал(а): Прикольно. Похоже на esoteric forth, но там не подпрограммный шитый код, а прямой.
[quote="KPG"]Не помню, был ли приведён в местном топике. [url=https://github.com/nineties/planckforth]PlanckForth: Bootstrapping an Interpreter from Handwritten 1KB Binary[/url][/quote] Прикольно. Похоже на esoteric forth, но там не подпрограммный шитый код, а прямой.
|
|
|
|
Добавлено: Пт май 05, 2023 13:24 |
|
|
|
|
|
Заголовок сообщения: |
Re: ef \ esoteric forth \ |
|
|
Вроде было уже, название знакомое
Вроде было уже, название знакомое :)
|
|
|
|
Добавлено: Ср май 03, 2023 21:21 |
|
|
|
|
|
Заголовок сообщения: |
Re: ef \ esoteric forth \ |
|
|
Не помню, был ли приведён в местном топике. PlanckForth: Bootstrapping an Interpreter from Handwritten 1KB BinaryКод: Builtin Words code name stack effect semantics Q quit ( n -- ) Exit the process C cell ( -- n ) The size of Cells h &here ( -- a-addr ) The address of 'here' cell l &latest ( -- a-addr ) The address of 'latest' cell k key ( -- c ) Read character t type ( c -- ) Print character j jump ( -- ) Unconditional branch J 0jump ( n -- ) Jump if a == 0 f find ( c -- xt ) Get execution token of c x execute ( xt -- ... ) Run the execution token @ fetch ( a-addr -- w ) Load value from addr ! store ( w a-addr -- ) Store value to addr ? cfetch ( c-addr -- c ) Load byte from addr with sign extension $ cstore ( c c-addr -- ) Store byte to addr d dfetch ( -- a-addr ) Get data stack pointer D dstore ( a-addr -- ) Set data stack pointer r rfetch ( -- a-addr ) Get return stack pointer R rstore ( a-addr -- ) Set return stack pointer i docol ( -- a-addr ) Get the code pointer of interpreter e exit ( -- ) Exit current function L lit ( -- n ) Load immediate S litstring ( -- c-addr ) Load string literal + add ( a b -- c ) c = (a + b) - sub ( a b -- c ) c = (a - b) * mul ( a b -- c ) c = (a * b) / divmod ( a b -- c d ) c = (a mod b), d = (a / b) & and ( a b -- c ) c = (a & b) | or ( a b -- c ) c = (a | b) ^ xor ( a b -- c ) c = (a ^ b) < less ( a b -- c ) c = (a < b) u uless ( a b -- c ) c = (a unsigned< b) = equal ( a b -- c ) c = (a == b) ( shl ( a b -- c ) c = a << b (logical) ) shr ( a b -- c ) c = a >> b (logical) % sar ( a b -- c ) c = a >> b (arithmetic) v argv ( -- a-addr u ) argv and argc V version ( -- c-addr ) Runtime infomation string Код: $ ./planck kHtketkltkltkotk tkWtkotkrtkltkdtk!tk:k0-tk0k0-Q
After bootstrapping by bootstrap.fs, it looks like this.
$ ./planck < bootstrap.fs ." Hello World!" cr
P.S. Ссылка всретилась на Forth: The programming language that writes itself: The Web Page Charles H. Moore and the pursuit of simplicity
Не помню, был ли приведён в местном топике. [url=https://github.com/nineties/planckforth]PlanckForth: Bootstrapping an Interpreter from Handwritten 1KB Binary[/url]
[code]Builtin Words code name stack effect semantics Q quit ( n -- ) Exit the process C cell ( -- n ) The size of Cells h &here ( -- a-addr ) The address of 'here' cell l &latest ( -- a-addr ) The address of 'latest' cell k key ( -- c ) Read character t type ( c -- ) Print character j jump ( -- ) Unconditional branch J 0jump ( n -- ) Jump if a == 0 f find ( c -- xt ) Get execution token of c x execute ( xt -- ... ) Run the execution token @ fetch ( a-addr -- w ) Load value from addr ! store ( w a-addr -- ) Store value to addr ? cfetch ( c-addr -- c ) Load byte from addr with sign extension $ cstore ( c c-addr -- ) Store byte to addr d dfetch ( -- a-addr ) Get data stack pointer D dstore ( a-addr -- ) Set data stack pointer r rfetch ( -- a-addr ) Get return stack pointer R rstore ( a-addr -- ) Set return stack pointer i docol ( -- a-addr ) Get the code pointer of interpreter e exit ( -- ) Exit current function L lit ( -- n ) Load immediate S litstring ( -- c-addr ) Load string literal + add ( a b -- c ) c = (a + b) - sub ( a b -- c ) c = (a - b) * mul ( a b -- c ) c = (a * b) / divmod ( a b -- c d ) c = (a mod b), d = (a / b) & and ( a b -- c ) c = (a & b) | or ( a b -- c ) c = (a | b) ^ xor ( a b -- c ) c = (a ^ b) < less ( a b -- c ) c = (a < b) u uless ( a b -- c ) c = (a unsigned< b) = equal ( a b -- c ) c = (a == b) ( shl ( a b -- c ) c = a << b (logical) ) shr ( a b -- c ) c = a >> b (logical) % sar ( a b -- c ) c = a >> b (arithmetic) v argv ( -- a-addr u ) argv and argc V version ( -- c-addr ) Runtime infomation string[/code]
[code]$ ./planck kHtketkltkltkotk tkWtkotkrtkltkdtk!tk:k0-tk0k0-Q
After bootstrapping by bootstrap.fs, it looks like this.
$ ./planck < bootstrap.fs ." Hello World!" cr [/code]
P.S. Ссылка всретилась на [url=https://ratfactor.com/forth/the_programming_language_that_writes_itself.html]Forth: The programming language that writes itself: The Web Page Charles H. Moore and the pursuit of simplicity[/url]
|
|
|
|
Добавлено: Ср май 03, 2023 15:32 |
|
|
|
|
|
Заголовок сообщения: |
Re: ef \ esoteric forth \ |
|
|
Почти ровестник Форту. MOUSE - Computer Programming Language P.S. Ветвления и циклы тоже с использованием скобочных символов. Была и издана книга по нему: MOUSE: A Language for Microcomputers, Petrocelli Books, 1983 Проект варианта Mouse языка Mouse 2002
Почти ровестник Форту. [url=http://mouse.davidgsimpson.com/index.html]MOUSE - Computer Programming Language[/url]
P.S. Ветвления и циклы тоже с использованием скобочных символов. :) Была и издана книга по нему: MOUSE: A Language for Microcomputers, Petrocelli Books, 1983
Проект варианта Mouse языка [url=https://github.com/catb0t/mouse2002]Mouse 2002[/url]
|
|
|
|
Добавлено: Сб дек 03, 2022 22:14 |
|
|
|
|
|
Заголовок сообщения: |
Re: ef \ esoteric forth \ |
|
|
Самая свежая под DOS, в скомпилированном виде аж 982 байта http://totalvacuum.ru/EF/ef.zipПравда хостинг брыкается в последнее время. Доступ к сайту не всегда есть, надо снова хостинг менять.
Самая свежая под DOS, в скомпилированном виде аж 982 байта :) [url]http://totalvacuum.ru/EF/ef.zip[/url]
Правда хостинг брыкается в последнее время. Доступ к сайту не всегда есть, надо снова хостинг менять.
|
|
|
|
Добавлено: Ср ноя 23, 2022 19:49 |
|
|
|
|
|
Заголовок сообщения: |
Re: ef \ esoteric forth \ |
|
|
tsdima, мерси, буду тренироваться Бился несколько раз головой об стену в попытке поставить fasm, хотя в прошлой инкарнации моей ubuntu поставилось без проблем. Потом сообразил, что fasm прекрасен тем, что там всё в одном файле, поэтому его можно тупо подложить в папку с проектом. Перекомпилировал и перезалил http://totalvacuum.ru/EF/efl32.zipВ ubuntu пересобирается так: Код: ./efl efl.ef>efl.asm ./fasm efl.asm
А тестовый helloworld так: Код: ./efl hello.ef>hello.asm ./fasm hello.asm
356 байта для helloworld, конечно, жирно, но что поделать
[b]tsdima[/b], мерси, буду тренироваться :)
Бился несколько раз головой об стену в попытке поставить fasm, хотя в прошлой инкарнации моей ubuntu поставилось без проблем. Потом сообразил, что fasm прекрасен тем, что там всё в одном файле, поэтому его можно тупо подложить в папку с проектом. Перекомпилировал и перезалил [url]http://totalvacuum.ru/EF/efl32.zip[/url] В ubuntu пересобирается так:[code]./efl efl.ef>efl.asm ./fasm efl.asm [/code]А тестовый helloworld так:[code]./efl hello.ef>hello.asm ./fasm hello.asm [/code]356 байта для helloworld, конечно, жирно, но что поделать :D
|
|
|
|
Добавлено: Ср сен 28, 2022 16:07 |
|
|
|
|
|
Заголовок сообщения: |
Re: ef \ esoteric forth \ |
|
|
Total Vacuum писал(а): Если честно, с fasm под linux ранее не приходилось иметь дел. Сильно ли отличается от виндовой версии? Вообще не отличается.
[quote="Total Vacuum"]Если честно, с fasm под linux ранее не приходилось иметь дел. Сильно ли отличается от виндовой версии?[/quote] Вообще не отличается.
|
|
|
|
Добавлено: Ср сен 28, 2022 12:23 |
|
|
|
|
|
Заголовок сообщения: |
Re: ef \ esoteric forth \ |
|
|
32-битный ef под linux http://totalvacuum.ru/EF/efl32.zipСначала скросскомпилировал при помощи 32-битной версии под dos, результат компиляции весит аж 1645 байт. Потом запустил скомпилированный файл в ubuntu, скормив ему исходник ef, и получил в точности тот же самый выхлоп на asm. Осталось проверить, как будет воспринимать fasm под ubuntu полученный asm. Подозреваю, что проблем быть не должно, но fasm пока не ставил. Если честно, с fasm под linux ранее не приходилось иметь дел. Сильно ли отличается от виндовой версии?
32-битный ef под linux [url]http://totalvacuum.ru/EF/efl32.zip[/url] Сначала скросскомпилировал :) при помощи 32-битной версии под dos, результат компиляции весит аж 1645 байт. Потом запустил скомпилированный файл в ubuntu, скормив ему исходник ef, и получил в точности тот же самый выхлоп на asm. Осталось проверить, как будет воспринимать fasm под ubuntu полученный asm. Подозреваю, что проблем быть не должно, но fasm пока не ставил. Если честно, с fasm под linux ранее не приходилось иметь дел. Сильно ли отличается от виндовой версии?
|
|
|
|
Добавлено: Вт сен 27, 2022 20:05 |
|
|
|
|
|
Заголовок сообщения: |
Re: ef \ esoteric forth \ |
|
|
Мой сайт временно протух из-за хостинга-русофоба... Найду какой-нибудь другой хостинг и буду переползать, ссылки пока не работают. Приму в дар "без регистрации и sms" бесплатный хостинг с php, mysql, ftp и желательно без рекламы Вдруг кто-нибудь знает такой хостинг Хостинг-провайдер в феврале отрубил доступ в личный кабинет для жителей России (хорошо, что я предусмотрел запасную дверцу для загрузки файлов). Теперь и сам сайт вырубили. upd. поменял хостинг, буду потихоньку ссылки восстанавливать...
Мой сайт временно протух из-за хостинга-русофоба... :) Найду какой-нибудь другой хостинг и буду переползать, ссылки пока не работают. Приму в дар "без регистрации и sms" бесплатный хостинг с php, mysql, ftp и желательно без рекламы :) Вдруг кто-нибудь знает такой хостинг :) Хостинг-провайдер в феврале отрубил доступ в личный кабинет для жителей России (хорошо, что я предусмотрел запасную дверцу для загрузки файлов). Теперь и сам сайт вырубили. :dmad; upd. поменял хостинг, буду потихоньку ссылки восстанавливать...
|
|
|
|
Добавлено: Ср сен 14, 2022 12:10 |
|
|
|
|
|
Заголовок сообщения: |
Re: ef \ esoteric forth \ |
|
|
В проекте NanoForth для AVR Форт слова ограничены 3-мя символами. nanoFORTH WhatP.S. В примитивах команд FVM нет слов беззнакового сравнения U> U< , которые, возможно имело бы смысл добавить и возможно имеет смысл в системе команд сделать 3-ёх бит поле условия для перехода, для размещения в команде перехода слов сравнения и тогда добавить команду c безусловным переходом.
В проекте [url=https://github.com/chochain/nanoFORTH]NanoForth[/url] для AVR Форт слова ограничены 3-мя символами. :)
[url=https://chochain.github.io/nanoFORTH/html/page3.html]nanoFORTH What[/url]
P.S. В примитивах команд FVM нет слов беззнакового сравнения U> U< , которые, возможно имело бы смысл добавить и возможно имеет смысл в системе команд сделать 3-ёх бит поле условия для перехода, для размещения в команде перехода слов сравнения и тогда добавить команду c безусловным переходом.
[img]https://chochain.github.io/nanoFORTH/html/nanoforth_wrd_list.png[/img]
|
|
|
|
Добавлено: Ср сен 14, 2022 03:05 |
|
|
|
|
|
Заголовок сообщения: |
Re: ef \ esoteric forth \ |
|
|
Там отдельно регистры для вершины стека. Для них можно выполнить обмен за один такт. Это не программирование, где нужна временная переменная. В синхронной схеме операции a <= b и b <= a могут выполняться параллельно.
Там отдельно регистры для вершины стека. Для них можно выполнить обмен за один такт. Это не программирование, где нужна временная переменная. В синхронной схеме операции a <= b и b <= a могут выполняться параллельно.
|
|
|
|
Добавлено: Вт сен 13, 2022 00:29 |
|
|
|
|
|
Заголовок сообщения: |
Re: ef \ esoteric forth \ |
|
|
Total Vacuum писал(а): Смотрю на b16 и туплю, не могу понять, как они swap делают. over >r nip >r или можно как-то короче? После выходных мозги совсем атрофировались. Не короче, но может и так? Код: >r >a r> a P.S. По картинке архитектуры b16 в презентации по её схеме проще понять как привязана система команд к стекам CPU.
[quote="Total Vacuum"]Смотрю на b16 и туплю, не могу понять, как они swap делают. over >r nip >r или можно как-то короче? После выходных мозги совсем атрофировались. :)[/quote] Не короче, но может и так? [code] >r >a r> a [/code]
P.S. По картинке архитектуры b16 в презентации по её схеме проще понять как привязана система команд к стекам CPU.
|
|
|
|
Добавлено: Пн сен 12, 2022 18:34 |
|
|
|
|
|
Заголовок сообщения: |
Re: ef \ esoteric forth \ |
|
|
Смотрю на b16 и туплю, не могу понять, как они swap делают. over >r nip r> или можно как-то короче? После выходных мозги совсем атрофировались.
Смотрю на b16 и туплю, не могу понять, как они swap делают. over >r nip r> или можно как-то короче? После выходных мозги совсем атрофировались. :)
|
|
|
|
Добавлено: Пн сен 12, 2022 16:15 |
|
|
|
|
|
Заголовок сообщения: |
Re: ef \ esoteric forth \ |
|
|
KPG писал(а): Кстати, а как в рамках обсуждаемого топика смотрится и система команд B16 CPU? Из общих соображений - как может смотреться процессор 20-летней давности? Это надо, чтобы: 1. За 20 лет не было никаких значимых изменений в архитектуре ПЛИС и вообще микроэлектронике. 2. За 20 лет так и не удалось разобраться, что там напроектировали Просвещенные Европы. А уж тем более сделать лучше. Система команд странная. С микроархитектурой связана слабо. Масса условных переходов, которых в Форте нет. Вообще код написан "как написал бы программист". Цитата: 4.4 Further Possible Optimizations It would be possible to overlap memory accesses and operations on the stack, since there are separate pointer registers. Вот тут до человека начало отдаленно доходить, что он рисует схему, а не пишет программу. Проектирование в стиле аппаратных транзакций - отдельное искусство. Но это надо, к примеру, мою выложенную презентацию посмотреть. Это далеко не объяснение тонкостей искусства, а просто очерчивание круга задач. KPG писал(а): Имеет ли смысл, в особенности вводить регистр А - верхушки стека возвратов (по примеру именования TOS для стека данных) и дополнять систему команд процессора для оперирования с ним. Ответ основывается на простом показателе - насколько интенсивно используется стек возвратов? Если процент команд (и соответствующее ускорение) больше, чем снижение характеристик (частота, размер), можно вводить. Если нет - нет. Если примерно одинаково - не вводим по принципу бритвы Оккама (потому что лень + верификация + риск от пропущенных сценариев верификации).
[quote="KPG"]Кстати, а как в рамках обсуждаемого топика смотрится и система команд B16 CPU?[/quote] Из общих соображений - как может смотреться процессор 20-летней давности? Это надо, чтобы: 1. За 20 лет не было никаких значимых изменений в архитектуре ПЛИС и вообще микроэлектронике. 2. За 20 лет так и не удалось разобраться, что там напроектировали Просвещенные Европы. А уж тем более сделать лучше.
Система команд странная. С микроархитектурой связана слабо. Масса условных переходов, которых в Форте нет. Вообще код написан "как написал бы программист".
[quote]4.4 Further Possible Optimizations It would be possible to overlap memory accesses and operations on the stack, since there are separate pointer registers.[/quote] Вот тут до человека начало отдаленно доходить, что он рисует схему, а не пишет программу. Проектирование в стиле аппаратных транзакций - отдельное искусство. Но это надо, к примеру, мою выложенную презентацию посмотреть. Это далеко не объяснение тонкостей искусства, а просто очерчивание круга задач.
[quote="KPG"]Имеет ли смысл, в особенности вводить регистр А - верхушки стека возвратов (по примеру именования TOS для стека данных) и дополнять систему команд процессора для оперирования с ним.[/quote] Ответ основывается на простом показателе - насколько интенсивно используется стек возвратов? Если процент команд (и соответствующее ускорение) больше, чем снижение характеристик (частота, размер), можно вводить. Если нет - нет. Если примерно одинаково - не вводим по принципу бритвы Оккама (потому что лень + верификация + риск от пропущенных сценариев верификации).
|
|
|
|
Добавлено: Вс сен 11, 2022 20:24 |
|
|
|
|
|
Заголовок сообщения: |
Re: ef \ esoteric forth \ |
|
|
Кстати, а как в рамках обсуждаемого топика смотрится и система команд B16 CPU? B16 ProcessorИмеет ли смысл, в особенности вводить регистр А - верхушки стека возвратов (по примеру именования TOS для стека данных) и дополнять систему команд процессора для оперирования с ним. P.S MicroCore в некотором смысле другая реализация идеи Форт процессоров.
Кстати, а как в рамках обсуждаемого топика смотрится и система команд B16 CPU? [url=http://bernd-paysan.de/b16.html]B16 Processor[/url] Имеет ли смысл, в особенности вводить регистр А - верхушки стека возвратов (по примеру именования TOS для стека данных) и дополнять систему команд процессора для оперирования с ним.
P.S [url=https://github.com/microCore-VHDL/microCore]MicroCore[/url] в некотором смысле другая реализация идеи Форт процессоров. [img]https://user-images.githubusercontent.com/77505995/105734708-36113400-5f33-11eb-819f-f72972bb19c1.jpg[/img]
|
|
|
|
Добавлено: Пт сен 09, 2022 18:45 |
|
|
|
|