Автор |
Сообщение |
|
|
Заголовок сообщения: |
Re: Некоторые вопросы устройства системы(_KROL) |
|
|
_KROL писал(а): AWORD FNEXT,"FNEXT" cld lodsw jmp ax _KROL писал(а): Т.е. правильно: FNEXT: cld lodsw jmp [ax] Нет здесь никакого правильно. Первый вариант - прямой шитый код (шитый код хранит значения адресов куда прыгать для исполнения). Второй вариант - косвенный шитый код (шитый код хранит значения адресов где лежат адреса куда прыгать для исполнения). Первый вариант быстрее. Второй - классичнее. Собственно понятие PFA органическим образом подходит только ко второму варианту. При косвенном шитом коде PFA - адрес где начинается шитый код определения этого слова, если оно создавалось через двоеточие или адрес точки входа нативного кода слова, если оно определено в кодах. А поле CFA для определений в нативном коде указывает на и содержит значение PFA. При прямом шитом коде понятие PFA как-то сохраняет смысл для слов, определенных через двоеточие, но теряет смысл для слов в нативном коде. Ибо точка входа в код определения - это сразу адрес CFA.
[quote="_KROL"]AWORD FNEXT,"FNEXT" cld lodsw jmp ax[/quote] [quote="_KROL"]Т.е. правильно: FNEXT: cld lodsw jmp [ax][/quote]Нет здесь никакого правильно. Первый вариант - прямой шитый код (шитый код хранит значения адресов куда прыгать для исполнения). Второй вариант - косвенный шитый код (шитый код хранит значения адресов где лежат адреса куда прыгать для исполнения).
Первый вариант быстрее. Второй - классичнее. Собственно понятие PFA органическим образом подходит только ко второму варианту. При косвенном шитом коде PFA - адрес где начинается шитый код определения этого слова, если оно создавалось через двоеточие или адрес точки входа нативного кода слова, если оно определено в кодах. А поле CFA для определений в нативном коде указывает на и содержит значение PFA. При прямом шитом коде понятие PFA как-то сохраняет смысл для слов, определенных через двоеточие, но теряет смысл для слов в нативном коде. Ибо точка входа в код определения - это сразу адрес CFA.
|
|
|
|
Добавлено: Ср июн 07, 2017 09:23 |
|
|
|
|
|
Заголовок сообщения: |
Re: Некоторые вопросы устройства системы(_KROL) |
|
|
_KROL писал(а): Но обьясните такую вещь: как могут добавляться слова допустим в FORTH, если перед ним MYVOC? Или может я чего-нибудь не понимаю??
Когда ты создаешь некий новый словарь резервируется ячейка, которая будет хранить адрес самого последнего слова в этом словаре. Она создается при исполнении VOCABULARY. И у каждого словаря такая ячейка есть. И у словаря FORTH тоже от рождения есть. Поэтому добавление слова к словарю FORTH (переменная CURRENT при этом указывает на упомянутую выше ячейку для словаря FORTH, из нее ты адрес этой ячейки и берешь), после того как был создан словарь MYVOC делается так. Пусть последнее слово в словаре FORTH имеет имя BLI. А ты создаешь слово BLA. Так вот выбираешь из ячейки для адреса последнего слова в словаре FORTH адрес BLI и вставляешь в заголовок BLA. Чтобы BLA по цепочке указывала на BLI. А потом адрес слова BLA записываешь в ячейку для хранения последнего слова словаря FORTH. Все. _KROL писал(а): P.s. Была мысль о доп. поле в словах, но это же занимает и больше места!
Так это поле итак есть. Оно называется LFA. И больше ничего не надо.
[quote="_KROL"]Но обьясните такую вещь: как могут добавляться слова допустим в FORTH, если перед ним MYVOC? Или может я чего-нибудь не понимаю?? [/quote]Когда ты создаешь некий новый словарь резервируется ячейка, которая будет хранить адрес самого последнего слова в этом словаре. Она создается при исполнении VOCABULARY. И у каждого словаря такая ячейка есть. И у словаря FORTH тоже от рождения есть.
Поэтому добавление слова к словарю FORTH (переменная CURRENT при этом указывает на упомянутую выше ячейку для словаря FORTH, из нее ты адрес этой ячейки и берешь), после того как был создан словарь MYVOC делается так. Пусть последнее слово в словаре FORTH имеет имя BLI. А ты создаешь слово BLA. Так вот выбираешь из ячейки для адреса последнего слова в словаре FORTH адрес BLI и вставляешь в заголовок BLA. Чтобы BLA по цепочке указывала на BLI. А потом адрес слова BLA записываешь в ячейку для хранения последнего слова словаря FORTH. Все.[quote="_KROL"]P.s. Была мысль о доп. поле в словах, но это же занимает и больше места! [/quote]Так это поле итак есть. Оно называется LFA. И больше ничего не надо.
|
|
|
|
Добавлено: Ср июн 07, 2017 08:42 |
|
|
|
|
|
Заголовок сообщения: |
Re: Некоторые вопросы устройства системы(_KROL) |
|
|
_KROL писал(а): М... У Баранова есть VOC-LINK, что нету в F83(я всё-таки лучше буду придерживаться этого стандарта ;])
(я просто хочу написать для начала чисто классическую систему) VOC-LINK это внутренняя кухня организации словарей. Она отдана на усмотрение создателя Форт-системы и в стандартах не фиксируется никак. И вообще тебе этот VOC-LINK понадобится только для того, чтобы написать слово FORGET (ну или MARKER). А пользователю твоей Форт-системы и вовсе не понадобится. Поэтому я и говорю "внутренняя кухня".
[quote="_KROL"]М... У Баранова есть VOC-LINK, что нету в F83(я всё-таки лучше буду придерживаться этого стандарта ;])
(я просто хочу написать для начала чисто классическую систему)[/quote] VOC-LINK это внутренняя кухня организации словарей. Она отдана на усмотрение создателя Форт-системы и в стандартах не фиксируется никак. И вообще тебе этот VOC-LINK понадобится только для того, чтобы написать слово FORGET (ну или MARKER). А пользователю твоей Форт-системы и вовсе не понадобится. Поэтому я и говорю "внутренняя кухня".
|
|
|
|
Добавлено: Ср июн 07, 2017 08:29 |
|
|
|
|
|
Заголовок сообщения: |
Re: Некоторые вопросы устройства системы(_KROL) |
|
|
(!) Hishnik, я только что заметил, что в теме "Навешивание обработчиков на компиляцию"(by Victor__v) я могу добавлять вложения(всё разрешено), а в своих (двух) темах не могу! С чем это связано? ... Уточняю, при создании темы на некоторых(не всех) форумах мне также не разрешается добавлять файлы... Перехожу на новый форум - Programming.
[b](!)[/b] Hishnik, я только что заметил, что в теме "Навешивание обработчиков на компиляцию"(by Victor__v) я могу добавлять вложения(всё разрешено), а в своих (двух) темах не могу! С чем это связано? ... Уточняю, при создании темы на некоторых(не всех) форумах мне также не разрешается добавлять файлы... Перехожу на новый форум - Programming.
|
|
|
|
Добавлено: Сб май 13, 2017 13:04 |
|
|
|
|
|
Заголовок сообщения: |
Re: Некоторые вопросы устройства системы(_KROL) |
|
|
Ага, была мысль сделать как в Turbo Pascal поддержку несколько файлов...
Ага, была мысль сделать как в Turbo Pascal поддержку несколько файлов...
|
|
|
|
Добавлено: Сб май 13, 2017 12:55 |
|
|
|
|
|
Заголовок сообщения: |
Re: Некоторые вопросы устройства системы(_KROL) |
|
|
Да уж, ДОС это сила. Зато api нет, а вместо них прерывания Цитата: Сейчас думаю над словами для работы с файлами Это для трансляции текстов имеется ввиду?
Да уж, ДОС это сила. Зато api нет, а вместо них прерывания
[quote]Сейчас думаю над словами для работы с файлами[/quote] Это для трансляции текстов имеется ввиду?
|
|
|
|
Добавлено: Пт май 12, 2017 23:54 |
|
|
|
|
|
Заголовок сообщения: |
Re: Некоторые вопросы устройства системы(_KROL) |
|
|
Дорогие коллеги, пожалуйста всё-же проясните один вопрос на счёт словарей F83! Я понял что: 1. CONTEXT - указатель на последний словарь, с которого идёт поиск Т.е.
...(слова системы) FORTH ...(пользовательские слова) MYVOC(польз. словарь)
Так как словари связаны тоже списком, то поиск идёт тоже последовательно. (и нет никакого стека, как в F94)
2. CURRENT - текущий словарь. В него вроде должны добавляться слова... Но обьясните такую вещь: как могут добавляться слова допустим в FORTH, если перед ним MYVOC? Или может я чего-нибудь не понимаю??
P.s. Была мысль о доп. поле в словах, но это же занимает и больше места! P.p.s. MOleg про словари F94 хорошо написал. Спасибо ему!
Дорогие коллеги, пожалуйста всё-же проясните один вопрос на счёт словарей F83! Я понял что: 1. CONTEXT - указатель на последний словарь, с которого идёт поиск Т.е.
...(слова системы) FORTH ...(пользовательские слова) MYVOC(польз. словарь)
Так как словари связаны тоже списком, то поиск идёт тоже последовательно. (и нет никакого стека, как в F94)
2. CURRENT - текущий словарь. В него вроде должны добавляться слова... Но обьясните такую вещь: как могут добавляться слова допустим в FORTH, если перед ним MYVOC? Или может я чего-нибудь не понимаю??
P.s. Была мысль о доп. поле в словах, но это же занимает и больше места! P.p.s. MOleg про словари F94 хорошо написал. Спасибо ему!
|
|
|
|
Добавлено: Пт май 12, 2017 23:09 |
|
|
|
|
|
Заголовок сообщения: |
Re: Некоторые вопросы устройства системы(_KROL) |
|
|
Точно! А то я забыл как-то...
Точно! А то я забыл как-то...
|
|
|
|
Добавлено: Пт апр 28, 2017 18:41 |
|
|
|
|
|
Заголовок сообщения: |
Re: Некоторые вопросы устройства системы(_KROL) |
|
|
_KROL писал(а): Почитал, теперь думаю: чем отличется слова BLOCK и LOAD? BLOCK - просто загрузка в память (например, для редактирования), LOAD - загрузка и исполнение.
[quote="_KROL"]Почитал, теперь думаю: чем отличется слова BLOCK и LOAD?[/quote]BLOCK - просто загрузка в память (например, для редактирования), LOAD - загрузка и исполнение.
|
|
|
|
Добавлено: Пт апр 28, 2017 18:33 |
|
|
|
|
|
Заголовок сообщения: |
Re: Некоторые вопросы устройства системы(_KROL) |
|
|
Почитал, теперь думаю: чем отличется слова BLOCK и LOAD? Код: Есть область памяти для буферов(в "верхней" части сегмента, до стека). [BCBT] (table) BUFFERS: [BUF0] (64x16) [BUF1] ...
Buffer Control Block(BCB) [size=16] { hnd rw 1 ofs rw 1 fname rb 12 ; ********.*** (without 0) }
? CONSTANT MAXBUF ? CONSTANT BCBT ? CONSTANT BUFFERS ? CONSTANT BCBSIZE ? CONSTANT BUFSIZE VARIABLE CURBUF
: BCB BCBSIZE * BCBT + ; ( n -- BCBn ) : BUFFER BUFSIZE * BUFFERS + ; ( n -- BUFn ) : BUFFNAME BCB 2+ 2+ 2+ ; ( n -- filename(ptr of strz) )
: LOAD ( n -- BUFn: data; BCBn.ofs=n ) ; : BLOCK ( n -- BUFn: data; BCBn.ofs=n ) LOAD ; : UPDATE .... ; : LIST CURBUF BUFFER 10 LITERAL DO DUP 40 LITERAL TYPE CR LOOP DROP ; : SAVE-BUFFERS .... ; : EMPTY-BUFFERS .... ; : FLUSH SAVE-BUFFERS EMPTY-BUFFERS ;
...Сожалею что WINGLION умер. Я с его (SPRINTER)PC-FORTHа начинал понимать "внутринности". Возможно без него и не было б моей упрощённой архитектуры...
Почитал, теперь думаю: чем отличется слова BLOCK и LOAD? [code] Есть область памяти для буферов(в "верхней" части сегмента, до стека). [BCBT] (table) BUFFERS: [BUF0] (64x16) [BUF1] ...
Buffer Control Block(BCB) [size=16] { hnd rw 1 ofs rw 1 fname rb 12 ; ********.*** (without 0) }
? CONSTANT MAXBUF ? CONSTANT BCBT ? CONSTANT BUFFERS ? CONSTANT BCBSIZE ? CONSTANT BUFSIZE VARIABLE CURBUF
: BCB BCBSIZE * BCBT + ; ( n -- BCBn ) : BUFFER BUFSIZE * BUFFERS + ; ( n -- BUFn ) : BUFFNAME BCB 2+ 2+ 2+ ; ( n -- filename(ptr of strz) )
: LOAD ( n -- BUFn: data; BCBn.ofs=n ) ; : BLOCK ( n -- BUFn: data; BCBn.ofs=n ) LOAD ; : UPDATE .... ; : LIST CURBUF BUFFER 10 LITERAL DO DUP 40 LITERAL TYPE CR LOOP DROP ; : SAVE-BUFFERS .... ; : EMPTY-BUFFERS .... ; : FLUSH SAVE-BUFFERS EMPTY-BUFFERS ; [/code]
...Сожалею что WINGLION умер. Я с его (SPRINTER)PC-FORTHа начинал понимать "внутринности". Возможно без него и не было б моей упрощённой архитектуры...
|
|
|
|
Добавлено: Пт апр 28, 2017 18:18 |
|
|
|
|
|
Заголовок сообщения: |
Re: Некоторые вопросы устройства системы(_KROL) |
|
|
Сейчас думаю над словами для работы с файлами. Пока у меня такие мысли: Код: Есть область памяти для буферов(в "верхней" части сегмента, до стека). [BCBT] (table) BUFFERS: [BUF0] [BUF1] ...
Buffer Control Block(BCB) [size=20] { status rw 1 hnd rw 1 ofs rw 1 fname rb 13 ; ********.***0 rb 1 }
? CONSTANT MAXBUF ? CONSTANT BCBT ? CONSTANT BUFFERS ? CONSTANT BCBSIZE ? CONSTANT BUFSIZE
: BCB BCBSIZE * BCBT + ; ( n -- BCBn ) : BUF BUFSIZE * BUFFERS + ; ( n -- BUFn ) : BUFFNAME BCB 2+ 2+ 2+ ; ( n -- filename(ptr of strz) ) ( продолжение далее )
Сейчас думаю над словами для работы с файлами. Пока у меня такие мысли:
[code] Есть область памяти для буферов(в "верхней" части сегмента, до стека). [BCBT] (table) BUFFERS: [BUF0] [BUF1] ...
Buffer Control Block(BCB) [size=20] { status rw 1 hnd rw 1 ofs rw 1 fname rb 13 ; ********.***0 rb 1 }
? CONSTANT MAXBUF ? CONSTANT BCBT ? CONSTANT BUFFERS ? CONSTANT BCBSIZE ? CONSTANT BUFSIZE
: BCB BCBSIZE * BCBT + ; ( n -- BCBn ) : BUF BUFSIZE * BUFFERS + ; ( n -- BUFn ) : BUFFNAME BCB 2+ 2+ 2+ ; ( n -- filename(ptr of strz) )[/code]
( продолжение далее )
|
|
|
|
Добавлено: Ср апр 26, 2017 23:26 |
|
|
|
|
|
Заголовок сообщения: |
Re: Некоторые вопросы устройства системы(_KROL) |
|
|
Ты частично оказался прав. Новые исправления В самом начале(4TH.ASM): Код: org 0x100 ; Start mov sp,[S0_v] ; Это mov si,start jmp FNEXT В слове QUIT уберите ",S0,SP!" В слове INTERPRET(_PRIME.INC): Код: .notword: dw DDUP ; Это dw ?NUMBER dw ?BRANCH,!!WORD+3 dw NIP,NIP ; Это dw BRANCH,@b В ?DIGIT (DIGITS.INC) Код: .cont2: .cont1: dw _DUP,BASE,GREQ dw ?BRANCH,@f dw ZERO,_AND ; Это dw BRANCH,.cont Вроде всё... Спасибо.
Ты частично оказался прав. Новые исправления
В самом начале(4TH.ASM): [code]org 0x100 ; Start mov sp,[S0_v] ; Это mov si,start jmp FNEXT[/code] В слове QUIT уберите ",S0,SP!"
В слове INTERPRET(_PRIME.INC): [code].notword: dw DDUP ; Это dw ?NUMBER dw ?BRANCH,!!WORD+3 dw NIP,NIP ; Это dw BRANCH,@b[/code] В ?DIGIT (DIGITS.INC) [code] .cont2: .cont1: dw _DUP,BASE,GREQ dw ?BRANCH,@f dw ZERO,_AND ; Это dw BRANCH,.cont[/code] Вроде всё... Спасибо.
|
|
|
|
Добавлено: Вт апр 25, 2017 11:03 |
|
|
|
|
|
Заголовок сообщения: |
Re: Некоторые вопросы устройства системы(_KROL) |
|
|
не WORDS а именно words ( этого слова нет как раз ) если ввести какую-нибудь абракадабру результат тот же. Проблема с перехватом исключений, наверно.
не WORDS а именно words ( этого слова нет как раз ) если ввести какую-нибудь абракадабру результат тот же. Проблема с перехватом исключений, наверно.
|
|
|
|
Добавлено: Вт апр 25, 2017 09:23 |
|
|
|
|
|
Заголовок сообщения: |
Ошибка в системе |
|
|
...Я был занят... Спасибо! Сделайте начало INTERPRET таким: Код: FWORD INTERPRET,"INTERPRET" @@: dw _SZ dw ?BRANCH,.nointerp dw _BL,WORD_,_DUP,?BRANCH,.nointerp dw FIND_ dw ?BRANCH, .notword dw _DUP,I@_ADD,_2INC,SWAP На счёт WORDS я не очень-то понял... Привожу скрин(у меня XP): OK WORDS C" CHAR CR FCLOSE FWRITE FREAD FOPEN FCREATE ". WORDS MCA>LFA LFA>MCA NFA >MCA NFA>LFA <> = >= <= > < ABS D% D/ % / WORD $WORD QUIT INTERPRET ?NUMBER ?DIG IT . U. #SIGN #> #S # <# HOLD PAD ALPHA UNTIL AGAIN BEGIN $UNTIL $AGAIN $BEGIN L OOP DO $LOOP $DO THEN ELSE -IF IF <RESOLVE <MARK >RESOLVE >MARK FIND $FIND LITER AL CCOMPILE COMPILE LIT'Z LIT' LIT , C, ALLOT !!WORD !!FENCE LASTERR! SOURCE-ID! SOURCE! HLD! >MAXSZ! >SZ! >IN! LAST! HERE! BASE! ] [ LASTERR SOURCE-ID SOURCE H LD SPAN >MAXSZ >SZ >IN LAST HERE BASE STATE FENCE TIBSZ TIB RZ SZ R0 S0 BS BL 1 0 TRUE FALSE VER IMMEDIATE VARIABLE CONSTANT DOES> (DOES>) ; :: : CREATE ?EXIT E XIT EXECUTE ?BRANCH BRANCH BLANK ERASE FILL CMOVE> CMOVE 1-! 2+! 1+! 2+C! 1+C! @ + I@+ C@+ 2! ! C! 2@ @ C@ SWAPL ROT ROT OVER 2SWAP SWAP DDUP DUP DNIP NIP ROLL P ICK 3>R 3R> >R R> RDROP 2DROP DROP R@ S@ RP! RP@ DP! SP@ TYPE EMIT EXPECT KEY? K EY WITHIN NEG NOT 0<> 0= 0> 0< AND XOR OR >< >> << U/% D/% /% 4* 2* * - + 4- 4+ 2- 2+ 1- 1+ BYE NOOP FRET FNEXT FCALL NOP OK
...Я был занят... Спасибо! Сделайте начало INTERPRET таким: [code]FWORD INTERPRET,"INTERPRET" @@: dw _SZ dw ?BRANCH,.nointerp dw _BL,WORD_,_DUP,?BRANCH,.nointerp dw FIND_ dw ?BRANCH, .notword dw _DUP,I@_ADD,_2INC,SWAP[/code] На счёт WORDS я не очень-то понял... Привожу скрин(у меня XP):
OK WORDS C" CHAR CR FCLOSE FWRITE FREAD FOPEN FCREATE ". [color=#0000FF][b]WORDS[/b][/color] MCA>LFA LFA>MCA NFA >MCA NFA>LFA <> = >= <= > < ABS D% D/ % / WORD $WORD QUIT INTERPRET ?NUMBER ?DIG IT . U. #SIGN #> #S # <# HOLD PAD ALPHA UNTIL AGAIN BEGIN $UNTIL $AGAIN $BEGIN L OOP DO $LOOP $DO THEN ELSE -IF IF <RESOLVE <MARK >RESOLVE >MARK FIND $FIND LITER AL CCOMPILE COMPILE LIT'Z LIT' LIT , C, ALLOT !!WORD !!FENCE LASTERR! SOURCE-ID! SOURCE! HLD! >MAXSZ! >SZ! >IN! LAST! HERE! BASE! ] [ LASTERR SOURCE-ID SOURCE H LD SPAN >MAXSZ >SZ >IN LAST HERE BASE STATE FENCE TIBSZ TIB RZ SZ R0 S0 BS BL 1 0 TRUE FALSE VER IMMEDIATE VARIABLE CONSTANT DOES> (DOES>) ; :: : CREATE ?EXIT E XIT EXECUTE ?BRANCH BRANCH BLANK ERASE FILL CMOVE> CMOVE 1-! 2+! 1+! 2+C! 1+C! @ + I@+ C@+ 2! ! C! 2@ @ C@ SWAPL ROT ROT OVER 2SWAP SWAP DDUP DUP DNIP NIP ROLL P ICK 3>R 3R> >R R> RDROP 2DROP DROP R@ S@ RP! RP@ DP! SP@ TYPE EMIT EXPECT KEY? K EY WITHIN NEG NOT 0<> 0= 0> 0< AND XOR OR >< >> << U/% D/% /% 4* 2* * - + 4- 4+ 2- 2+ 1- 1+ BYE NOOP FRET FNEXT FCALL NOP OK
|
|
|
|
Добавлено: Вс апр 23, 2017 22:37 |
|
|
|
|
|
Заголовок сообщения: |
Re: Некоторые вопросы устройства системы(_KROL) |
|
|
А, понял это винда ругается. слова-то нет.
А, понял это винда ругается. слова-то нет.
|
|
|
|
Добавлено: Вс апр 23, 2017 17:37 |
|
|
|
|