Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Пт мар 29, 2024 01:25

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 536 ]  На страницу Пред.  1 ... 17, 18, 19, 20, 21, 22, 23 ... 36  След.
Автор Сообщение
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Сб ноя 11, 2017 12:56 
Не в сети

Зарегистрирован: Пт янв 06, 2017 14:57
Сообщения: 365
Благодарил (а): 17 раз.
Поблагодарили: 1 раз.
Продолжаю издеваться над кодом)
Код:
;; CALLINT ( ... n --> DI SI ВР SP BX DX СХ АХ )
;; Загрузить специальный ряд регистров, вызвать прерывание n и возвратить
;;  полученый ряд регистров.
;           0  1  2  3  4  5  6  7
; 50+n push АХ СХ DX BX SP ВР SI DI
; 58+n pop  АХ СХ DX BX SP ВР SI DI
AWORD CALLINT,"CALLINT",0
xchg sp,bp
pop ax
mov [.n],al
mov [.rp],bp
@@:
pop cx
  jcxz @f
dec cl
and cl,7
  jz .movedax
add cl,0x58 ; pop reg
mov [.popcom],al
.popcom rb 1
  jmp @b
.movedax:
pop [.dax]
  jmp @b
@@:
db 0xB8 ; mov ax,
.dax rw 1
db 0xCD ; int
.n rb 1
pusha
db 0xBD ; mov bp,
.rp rw 1
xchg sp,bp
AEND

Теперь можно делать так:
1 CONSTANT regAX
2 CONSTANT regCX
...
0 123 regAX 234 regBX 20 CALLINT
Муторно, но более универсально (0 - конец ряда данных, записываемых в регистры).


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Сб ноя 11, 2017 13:10 
Не в сети

Зарегистрирован: Пт янв 06, 2017 14:57
Сообщения: 365
Благодарил (а): 17 раз.
Поблагодарили: 1 раз.
Да, плохой подход: после этого надо отсеивать лишние возвращаемые регитстры. Куча коду - мало толку.

Вывод: лучше Форт-Ассемблера ничего нет.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Сб ноя 11, 2017 13:20 
<Потерто по справедливому замечанию Victor__v>


Последний раз редактировалось gudleifr Сб янв 27, 2018 14:43, всего редактировалось 1 раз.

Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Вс ноя 12, 2017 22:05 
Не в сети

Зарегистрирован: Пт янв 06, 2017 14:57
Сообщения: 365
Благодарил (а): 17 раз.
Поблагодарили: 1 раз.
Решил наконец писать на SPF. Всё хорошо, но вдруг возникло исключение в данном коде (строка с применением :CODE ;CODE):
Код:
HEX
VOCABULARY K4tH ONLY FORTH ALSO K4tH DEFINITIONS
10000 CONSTANT Msz      CREATE M Msz ALLOT
100 VALUE THERE      0 VALUE TLAST      0 VALUE NLAST

: B,  M THERE + C! THERE 1+    TO THERE ;
: W,  M THERE + W! THERE 2+    TO THERE ;
: D,  M THERE +  ! THERE 2+ 2+ TO THERE ;

: NEXT,
AD B,   \ lodsw
C389 W, \ mov bx,ax
27FF W, \ jmp word[bx]
;

: NFA, PARSE-NAME DUP B, DUP ( addr sz sz )
THERE SWAP OVER + ( addr sz there there+sz )
TO THERE SWAP CMOVE
;

: LFA, TLAST @ W, ;

: :CODE THERE DUP TO NLAST
NFA, LFA, THERE 2+ W,
CREATE , DOES> @ W,
;

: ;CODE NEXT, NLAST TO TLAST ;

:CODE BRANCH 348B W, ;CODE \ mov si,[si]

\ : :: ... ;
\ : ;; ... ;

\ Сохранение образа системы

0 VALUE fhnd
: SAVE"
[CHAR] " WORD COUNT W/O CREATE-FILE DROP TO fhnd
M THERE 100 - fhnd WRITE-FILE DROP
fhnd CLOSE-FILE DROP
BYE
;

SAVE" K4tH.COM"
Подскажите пожалуйста в чём ошибка!


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Вс ноя 12, 2017 23:06 
Не в сети

Зарегистрирован: Пт янв 06, 2017 14:57
Сообщения: 365
Благодарил (а): 17 раз.
Поблагодарили: 1 раз.
Эх, проблема в слове NFA, в месте CMOVE
Исправляюсь...


Исправил:
Код:
: NFA, PARSE-NAME DUP B, DUP ( addr sz sz )
THERE + ( addr sz there+sz )
TO THERE M SWAP 3 .SN KEY DROP CMOVE
;
Всё равно не работает((


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Пн ноя 13, 2017 17:26 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1288
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
Пара моментов.
В СПФ есть чудесное слово +! \ zn addr
Переопредели THERE в VARIABLE . Возни будет меньше.
Во вторых, в СПФ есть слово S, - скомпилировать строку в кодофайл.
Определи подобное слово у себя для ЦК.
Тогда NFA,
будет выглядить так:
Цитата:
: NFA, PARSE-NAME >R
R@ B,
R@ S,
R> THERE +!
;

_________________
Цель: сделать 64-битную Нову под Винду


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Пн ноя 13, 2017 21:29 
Не в сети

Зарегистрирован: Пт янв 06, 2017 14:57
Сообщения: 365
Благодарил (а): 17 раз.
Поблагодарили: 1 раз.
Да, перед CMOVE я случайно вставил (это я нашёл для отладки):
Код:
3 .SN KEY DROP

Проблема в CMOVE, а не в THERE. Когда оно у меня исполняется, то вылетает исключение,
хотя M я нормально подставил (ведь оно возвращает адрес буфера?).
А как без CMOVE сделать S, ?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Пн ноя 13, 2017 21:38 
Не в сети

Зарегистрирован: Пт янв 06, 2017 14:57
Сообщения: 365
Благодарил (а): 17 раз.
Поблагодарили: 1 раз.
УРА! Ошибка тут:
Цитата:
: LFA, TLAST @ W, ;

Ну и SPF! Прямо как и Visual Studio указывет не на то, что надо)
Сегодня помню у кого-то не работала одна программа, визжалка выдавала куча ошибок, а в итоге оказалось, что нечаянно посреди исходников (между описания методов, вроде) торчало одно несчастное "g" :))

Victor__v писал(а):
Переопредели THERE в VARIABLE . Возни будет меньше.
Спасибо за совет! Я думаю и ошибок :)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Пн ноя 13, 2017 22:38 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1288
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
_KROL писал(а):
Да, перед CMOVE я случайно вставил (это я нашёл для отладки):
Код:
3 .SN KEY DROP

Проблема в CMOVE, а не в THERE. Когда оно у меня исполняется, то вылетает исключение,
хотя M я нормально подставил (ведь оно возвращает адрес буфера?).
А как без CMOVE сделать S, ?


Проблема не в CMOVE .
С переносом строк просто трудно работать.
Вот код. THERE тут уже VARIABLE
Код:
: S,
>R
M THERE @ + R@ CMOVE
R> THERE +!
;



_________________
Цель: сделать 64-битную Нову под Винду


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Пн ноя 13, 2017 22:45 
Не в сети

Зарегистрирован: Пт янв 06, 2017 14:57
Сообщения: 365
Благодарил (а): 17 раз.
Поблагодарили: 1 раз.
Ага, понятно. Но всё-равно код у меня ещё почему-то не компилирует значения, хоть и резервирует место. Позже выложу нормальную версию (может и не сегодня)...


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Пн ноя 13, 2017 22:48 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1288
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
Если я правильно понял, то :CODE создаёт в твоём массиве новое слово и берёт кол-во параметров со стека данных?
Но вот проблема.
У тебя будет ссылка на СПФ-кий CREATE-CODE (или что там?) и остаток кода после DOES> в СПФ!

Лучше заведи слово HEADER
Пусть оно скомпилирует все твои поля и флаги. А с телом ты асме справишься

_________________
Цель: сделать 64-битную Нову под Винду


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Пн ноя 13, 2017 23:03 
Не в сети

Зарегистрирован: Пт янв 06, 2017 14:57
Сообщения: 365
Благодарил (а): 17 раз.
Поблагодарили: 1 раз.
Нет, :CODE создаёт новое слово и в целевом (понятно для чего) и в обычном словаре, чтобы потом можно было делать так:
Код:
:CODE NOP ;CODE
:: abc \ как и :CODE, только для высокоуровневых слов
NOP \ компилирует NOP из целевого словаря
;;


Зачем одно HEADER? Слова то двух типов, соответственно CFA указывает на разное.
У меня не так то много полей.

P.s. Основываюсь на идеях из исходников Дмитрия Понятова(forth@km.ru), но пишу по своему.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Вт ноя 14, 2017 00:14 
<Потерто по справедливому замечанию Victor__v>


Последний раз редактировалось gudleifr Сб янв 27, 2018 14:43, всего редактировалось 1 раз.

Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Вт ноя 14, 2017 01:05 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 1288
Благодарил (а): 3 раз.
Поблагодарили: 18 раз.
_KROL писал(а):
Нет, :CODE создаёт новое слово и в целевом (понятно для чего) и в обычном словаре, чтобы потом можно было делать так:
Код:
:CODE NOP ;CODE
:: abc \ как и :CODE, только для высокоуровневых слов
NOP \ компилирует NOP из целевого словаря
;;


Зачем одно HEADER? Слова то двух типов, соответственно CFA указывает на разное.
У меня не так то много полей.

P.s. Основываюсь на идеях из исходников Дмитрия Понятова(forth@km.ru), но пишу по своему.


Эх, а я создавал интерпретатор входного потока при компиляции, который берёт из целевого словаря. Ест-но после всех необходимых низкоуровневых определений. А для некоторых случаев ( ['] [char] begin if и пр. ) создавал отдельный словарь и брал уже слова из него

_________________
Цель: сделать 64-битную Нову под Винду


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Вт ноя 14, 2017 18:12 
Не в сети

Зарегистрирован: Пт янв 06, 2017 14:57
Сообщения: 365
Благодарил (а): 17 раз.
Поблагодарили: 1 раз.
gudleifr писал(а):
_KROL писал(а):
Основываюсь на идеях из исходников Дмитрия Понятова
А зачем Вам еще и его ошибки, в дополнение к Вашим?
Forth может получится только если
1. Вы в совершенстве владеете языком машины, для которой его пишете
2. Есть задача, которую иначе не решить
Если, хотя бы, одно из условий не выполняется, получится, в лучшем случае, "эмулятор FORTH", который Вы просто положите на полку.

Ну надо же с чего то начинать учиться, ведь не так легко слёту программировать на Sp-Forth, не так ли? Тем более, что каждый Форт своеобразен.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 536 ]  На страницу Пред.  1 ... 17, 18, 19, 20, 21, 22, 23 ... 36  След.

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


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

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


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

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