Forth http://fforum.winglion.ru/ |
|
Моя система(_KROL) http://fforum.winglion.ru/viewtopic.php?f=2&t=3127 |
Страница 20 из 36 |
Автор: | _KROL [ Сб ноя 11, 2017 12:56 ] |
Заголовок сообщения: | Re: Моя система(_KROL) |
Продолжаю издеваться над кодом) Код: ;; 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 - конец ряда данных, записываемых в регистры). |
Автор: | _KROL [ Сб ноя 11, 2017 13:10 ] |
Заголовок сообщения: | Re: Моя система(_KROL) |
Да, плохой подход: после этого надо отсеивать лишние возвращаемые регитстры. Куча коду - мало толку. Вывод: лучше Форт-Ассемблера ничего нет. |
Автор: | gudleifr [ Сб ноя 11, 2017 13:20 ] |
Заголовок сообщения: | Re: Моя система(_KROL) |
<Потерто по справедливому замечанию Victor__v> |
Автор: | _KROL [ Вс ноя 12, 2017 22:05 ] |
Заголовок сообщения: | Re: Моя система(_KROL) |
Решил наконец писать на 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" |
Автор: | _KROL [ Вс ноя 12, 2017 23:06 ] |
Заголовок сообщения: | Re: Моя система(_KROL) |
Эх, проблема в слове 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 ; |
Автор: | Victor__v [ Пн ноя 13, 2017 17:26 ] |
Заголовок сообщения: | Re: Моя система(_KROL) |
Пара моментов. В СПФ есть чудесное слово +! \ zn addr Переопредели THERE в VARIABLE . Возни будет меньше. Во вторых, в СПФ есть слово S, - скомпилировать строку в кодофайл. Определи подобное слово у себя для ЦК. Тогда NFA, будет выглядить так: Цитата: : NFA, PARSE-NAME >R
R@ B, R@ S, R> THERE +! ; |
Автор: | _KROL [ Пн ноя 13, 2017 21:29 ] |
Заголовок сообщения: | Re: Моя система(_KROL) |
Да, перед CMOVE я случайно вставил (это я нашёл для отладки): Код: 3 .SN KEY DROP Проблема в CMOVE, а не в THERE. Когда оно у меня исполняется, то вылетает исключение, хотя M я нормально подставил (ведь оно возвращает адрес буфера?). А как без CMOVE сделать S, ? |
Автор: | _KROL [ Пн ноя 13, 2017 21:38 ] |
Заголовок сообщения: | Re: Моя система(_KROL) |
УРА! Ошибка тут: Цитата: : LFA, TLAST @ W, ; Ну и SPF! Прямо как и Visual Studio указывет не на то, что надо) Сегодня помню у кого-то не работала одна программа, визжалка выдавала куча ошибок, а в итоге оказалось, что нечаянно посреди исходников (между описания методов, вроде) торчало одно несчастное "g" Victor__v писал(а): Переопредели THERE в VARIABLE . Возни будет меньше. Спасибо за совет! Я думаю и ошибок
|
Автор: | Victor__v [ Пн ноя 13, 2017 22:38 ] |
Заголовок сообщения: | Re: Моя система(_KROL) |
_KROL писал(а): Да, перед CMOVE я случайно вставил (это я нашёл для отладки): Код: 3 .SN KEY DROP Проблема в CMOVE, а не в THERE. Когда оно у меня исполняется, то вылетает исключение, хотя M я нормально подставил (ведь оно возвращает адрес буфера?). А как без CMOVE сделать S, ? Проблема не в CMOVE . С переносом строк просто трудно работать. Вот код. THERE тут уже VARIABLE Код: : S,
>R M THERE @ + R@ CMOVE R> THERE +! ; |
Автор: | _KROL [ Пн ноя 13, 2017 22:45 ] |
Заголовок сообщения: | Re: Моя система(_KROL) |
Ага, понятно. Но всё-равно код у меня ещё почему-то не компилирует значения, хоть и резервирует место. Позже выложу нормальную версию (может и не сегодня)... |
Автор: | Victor__v [ Пн ноя 13, 2017 22:48 ] |
Заголовок сообщения: | Re: Моя система(_KROL) |
Если я правильно понял, то :CODE создаёт в твоём массиве новое слово и берёт кол-во параметров со стека данных? Но вот проблема. У тебя будет ссылка на СПФ-кий CREATE-CODE (или что там?) и остаток кода после DOES> в СПФ! Лучше заведи слово HEADER Пусть оно скомпилирует все твои поля и флаги. А с телом ты асме справишься |
Автор: | _KROL [ Пн ноя 13, 2017 23:03 ] |
Заголовок сообщения: | Re: Моя система(_KROL) |
Нет, :CODE создаёт новое слово и в целевом (понятно для чего) и в обычном словаре, чтобы потом можно было делать так: Код: :CODE NOP ;CODE :: abc \ как и :CODE, только для высокоуровневых слов NOP \ компилирует NOP из целевого словаря ;; У меня не так то много полей. P.s. Основываюсь на идеях из исходников Дмитрия Понятова(forth@km.ru), но пишу по своему. |
Автор: | gudleifr [ Вт ноя 14, 2017 00:14 ] |
Заголовок сообщения: | Re: Моя система(_KROL) |
<Потерто по справедливому замечанию Victor__v> |
Автор: | Victor__v [ Вт ноя 14, 2017 01:05 ] |
Заголовок сообщения: | Re: Моя система(_KROL) |
_KROL писал(а): Нет, :CODE создаёт новое слово и в целевом (понятно для чего) и в обычном словаре, чтобы потом можно было делать так: Код: :CODE NOP ;CODE :: abc \ как и :CODE, только для высокоуровневых слов NOP \ компилирует NOP из целевого словаря ;; У меня не так то много полей. P.s. Основываюсь на идеях из исходников Дмитрия Понятова(forth@km.ru), но пишу по своему. Эх, а я создавал интерпретатор входного потока при компиляции, который берёт из целевого словаря. Ест-но после всех необходимых низкоуровневых определений. А для некоторых случаев ( ['] [char] begin if и пр. ) создавал отдельный словарь и брал уже слова из него |
Автор: | _KROL [ Вт ноя 14, 2017 18:12 ] |
Заголовок сообщения: | Re: Моя система(_KROL) |
gudleifr писал(а): _KROL писал(а): Основываюсь на идеях из исходников Дмитрия Понятова А зачем Вам еще и его ошибки, в дополнение к Вашим?Forth может получится только если 1. Вы в совершенстве владеете языком машины, для которой его пишете 2. Есть задача, которую иначе не решить Если, хотя бы, одно из условий не выполняется, получится, в лучшем случае, "эмулятор FORTH", который Вы просто положите на полку. Ну надо же с чего то начинать учиться, ведь не так легко слёту программировать на Sp-Forth, не так ли? Тем более, что каждый Форт своеобразен. |
Страница 20 из 36 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |