Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Пн дек 10, 2018 04:02

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 512 ]  На страницу Пред.  1 ... 6, 7, 8, 9, 10, 11, 12 ... 35  След.
Автор Сообщение
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Вт июл 18, 2017 20:11 
Не в сети

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 676
Благодарил (а): 0 раз.
Поблагодарили: 6 раз.
Это уже, батенька, софизм

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


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

Зарегистрирован: Пт янв 06, 2017 14:57
Сообщения: 344
Благодарил (а): 15 раз.
Поблагодарили: 1 раз.
У меня так:
Код:
;; R> ( R: x --> S: x ; R: )
AWORD FROM_R,"R>",0
rpop ax
push ax
AEND

;; 2>R ( S: Dx --> S: ; R: Dx )
AWORD _2TO_R,"2>R",0
pop ax,bx
xchg sp,bp ;swapx (ну, у меня макрос такой...)
push bx,ax
xchg sp,bp ;swapx
AEND


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

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2120
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 40 раз.
Victor__v писал(а):
Это уже, батенька, софизм

Ваше мнение мне стало известно.
На самом деле так на форте можно написать
даже другой форт(правда будет проще, если сначала на форте написать все-таки ассемблер ).

_________________
С уважением, chess


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

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 676
Благодарил (а): 0 раз.
Поблагодарили: 6 раз.
Цитата:
На самом деле так на форте можно написать
даже другой форт(правда будет проще, если сначала на форте написать все-таки ассемблер


Как-то между ассемблером и записью в кодах нет особой разницы.
Разве что в вашем примере надо ещё порядок следования байтов знать.

Краткий справочник:
Софизм - выражение содержащие противоречие или хитрая уловка.
Как пример, я вегетарианец, но ем колбасу потому что колбаса это не мясо.
Это реальный случай из жизни.

Так и тут.
Лучше реализовать на ассемблере.
Как не на ассемблере?
А очень просто в кодах :D
В чём концептуальная разница между ассемблером и кодами?
Её нет.

Кстати, как вариант.
Можно генерировать низкие исходники прямо в кодах.
Что-то такое есть в СПФ у ~day

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


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

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2120
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 40 раз.
Victor__v писал(а):
Как-то между ассемблером и записью в кодах нет особой разницы.
Разве что в вашем примере надо ещё порядок следования байтов знать.

Разница конечно есть, в ассемблере например, не надо вычислять адресные смещения для команд переходов,
абсолютные адреса можно заменять именами и т.д. и т.п.
А порядок байтов определений в машкодах можно и не отслеживать, а выписывать байты в том порядке, в каком
они стоят в инструкциях процессора:

Код:
: -ret;    [COMPILE] [ SMUDGE ; IMMEDIATE
: code     : HEX POSTPONE [   ; IMMEDIATE
: endcode  DECIMAL DEPTH 0 2DUP 2>R ?DO I ROLL LOOP 2R> ?DO C, LOOP ] POSTPONE -ret;  ;

code  >r
5B          \  pop     ebx
50          \  push    eax
8B 45 00    \  mov     eax , 0 [ebp]
8D 6D 04    \  lea     ebp , 4 [ebp]
FF E3       \  jmp     ebx
endcode

_________________
С уважением, chess


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

Зарегистрирован: Чт янв 07, 2016 19:14
Сообщения: 676
Благодарил (а): 0 раз.
Поблагодарили: 6 раз.
Интересный код но логичней всё ж разбивать опкод на составные части
Понятней же будет.
А то вспомни через несколько лет, что число 0х23232323А0 это опкод, только читать его нужно справо-налево

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


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

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2120
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 40 раз.
Victor__v писал(а):
Интересный код но логичней всё ж разбивать опкод на составные части
Понятней же будет.

Смотрим в книгу, видим фигу.
Я для кого определение >R выше приводил, там как раз опкод разбит на составные части.
Можно брать коды инструкций прямо из справочника.
Код:
code  >r
5B          \  pop     ebx
50          \  push    eax
8B 45 00    \  mov     eax , 0 [ebp]
8D 6D 04    \  lea     ebp , 4 [ebp]
FF E3       \  jmp     ebx
endcode

_________________
С уважением, chess


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

Зарегистрирован: Пт янв 06, 2017 14:57
Сообщения: 344
Благодарил (а): 15 раз.
Поблагодарили: 1 раз.
Нашёл http://flop-os.fdd5-25.net/
Может когда напишу нормальный Форт, то расширю его до DOS(наверное даже до большего чем DOS)... Мечты пока однако.
Сегодны EXPECT cделал.
Код:
: EXPECT ( buf maxsize --> asc size )
0 ( size==0 )
BEGIN ( buf maxsize size )
  KEY
  DUP 1C0D = \ код клавиши ENTER
   IF \ Если ENTER ( buf maxsize size scancode )
    DROP ( buf maxsize size )
    NIP ( buf size )
    SWAP ( size buf )
    OVER ( size buf size )
    - ( size buf-size{начало буфера} )
    SWAP ( asc size )
    RDROP
    EXIT
   THEN
  DUP 0E08 =
   IF \ BACKSPACE?
    DROP DUP ( buf maxsize size size )
     ?EXIT
    1- ( buf maxsize size-1 )
    ROT 1- ( maxsize size-1 buf-1 )
    MROT ( buf-1 maxsize size-1 )
    ( Допустим вот экран:
    ********
    *     C*
    *_     *
    ********
     ^ если курсор здесь, то
    ********
    *     _* переместить на строку ранее
    *      * и стареть символ C
    ******** )
    GETXY DROP DUP
    IF 8 BL 8 EMIT EMIT EMIT DROP EXIT THEN
    ( на ассемблере у меня немного по другому...)
    ?DUP ?EXIT
( проверка ********
           *_     *
           *      *
           ******** )
    1- 0 ( y-1 0 )
    GOTOXY BL EMITС
    EXIT
   THEN
  ( buf maxsize size keycode )
  -ROT ( buf keycode maxsize size )
  2DUP = ( buf keycode maxsize size flag{maxsize==size} )
  NOT ?EXIT
  1+ ( buf keycode maxsize size+1 )
  2>R ( S: buf keycode R: {{RETaddr BEGINaddr}} maxsize size )
  DUP EMIT ( S: buf keycode R: maxsize size )
  OVER ( S: buf keycode buf R: maxsize size )
  C! ( S: buf R: maxsize size byte[buf]==keycode )
  1+ 2R> ( S: buf maxsize size )
AGAIN


;; EMITC ( c --> )
;; Вывести символ c на экран не изменяя позиции курсора.
AWORD EMITC,"EMITС",0
pop ax
mov ah,0xA
clrf bh
mov cx,1
int 0x10
AEND
Код:
;; GETXY ( --> y x )
;; Получить координаты курсора на экране
AWORD GETXY,"GETXY",0
mov ah,3
clrf bh ; VP=0
int 0x10
mov bl,dh
clrf dh
push bx,dx 
AEND

;; GOTOXY ( y x --> )
;; Установить позицию курсора на экране
AWORD GOTOXY,"GOTOXY",0
mov ah,2
pop dx,bx
mov dh,bl
clrf bh ; VP=0
int 0x10
AEND

А как это лучше назвать:Ладно, пусть будет не KNIT, а JOIN.

;; JOIN ( b a --> ba )
;; Соеденить 2 слова в одно(?). Преобразование обратное SPLIT
;; Неопределённая ситуация: одно из значений больше размера байта.
FWORD JOIN,"JOIN",0
dw SWAP,LIT,8,_SHL,_OR
FEND

Просто у меня есть
;; SPLIT ( word:: hl --> h l )
;; Разделить слово на старший и младший байт
AWORD SPLIT,"SPLIT",0
pop ax
clr bx
mov bl,ah
push bx
mov bl,al
push bx
AEND


Последний раз редактировалось _KROL Пт июл 21, 2017 13:04, всего редактировалось 1 раз.

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

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 521
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 22 раз.
chess писал(а):
Разница конечно есть, в ассемблере например, не надо вычислять адресные смещения для команд переходов,
абсолютные адреса можно заменять именами и т.д. и т.п.
Вроде говорилось не просто про разницу, а про концептуальную разницу. Ее-то и нет. Ассемблер - это просто другая форма записи кода, а вот ЯВУ - форма записи алгоритма, а не кода.
_KROL писал(а):
Код:
    RDROP \ Убираем адрес начала цикла и...
У тебя что, при исполнении BEGIN AGAIN адрес начала цикла на стеке возвратов ?


Последний раз редактировалось Ethereal Пт июл 21, 2017 13:12, всего редактировалось 3 раз(а).

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

Зарегистрирован: Пт янв 06, 2017 14:57
Сообщения: 344
Благодарил (а): 15 раз.
Поблагодарили: 1 раз.
В общем-то так. Только где-то в DO-LOOP ещё ошибка...

Цитата:
RDROP \ Убираем адрес начала цикла и...

Хотел другу обьяснить, забыл тут этот коммент убрать )


Вложения:
Комментарий к файлу: Циклы
LOOPS.ZIP [916 байт]
Скачиваний: 50
Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Пт июл 21, 2017 13:19 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 521
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 22 раз.
Вот это место не понятно.
Цитата:
Код:
    GETXY DROP DUP
    IF 8 BL 8 EMIT EMIT EMIT DROP EXIT THEN
    ( на ассемблере у меня немного по другому...)
    ?DUP ?EXIT
По идее ты должен проверить X (столбец). Если X не ноль, то вывести "забой пробел забой". А если ноль, то либо проигнорировать нажатие, либо поднять курсор на строку вверх, если она не ноль. А ты тут проверяешь Y (строку).
_KROL писал(а):
В общем-то так. Только где-то в DO-LOOP ещё ошибка...
Когда ты крутишь цикл DO LOOP при исполнении (LOOP) ты должен прыгать сразу после (DO) на первое слово тела цикла. А ты прыгаешь прямо на (DO).


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

Зарегистрирован: Пт янв 06, 2017 14:57
Сообщения: 344
Благодарил (а): 15 раз.
Поблагодарили: 1 раз.
Спасибо, я действительно ошибься.
Правильно так:
Код:
GETXY \ DROP DUP <- Этого не надо!
    IF 8 BL 8 EMIT EMIT EMIT DROP EXIT THEN
    ( на ассемблере у меня немного по другому...)
    ?DUP ?EXIT
( проверка ********
           *_     *
           *      *
           ******** )
    1- 0 ( y-1 0 )
    GOTOXY BL EMITС
    EXIT


Цитата:
Когда ты крутишь цикл DO LOOP при исполнении (LOOP) ты должен прыгать сразу после (DO) на первое слово тела цикла. А ты прыгаешь прямо на (DO).

Так и была такая идея... Упс! Это только для BEGIN-? возможно подходить. СПАСИБО :)


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

Зарегистрирован: Пт янв 06, 2017 14:57
Сообщения: 344
Благодарил (а): 15 раз.
Поблагодарили: 1 раз.
Тут
Код:
( проверка ********
           *_     *
           *      *
           ******** )
    1- 0 ( y-1 0 ) <---
    GOTOXY
тоже ошибка!
Правильно так:
Код:
1- 4F ( y-1 79 ) <---
    GOTOXY

В общем, готовый вариант такой(на ассемблере, работает):
Код:
;; EXPECT ( buf maxsize --> asc size )
;; Считать строку с клавиатуры.
;; Для выхода из цикла ввода используйте [ENTER].
FWORD EXPECT,"EXPECT",0
dw ZERO ; ( buf maxsize size )
dw BEGIN
dw KEY
dw _DUP,LIT,0x1C0D,_EQ,?BRANCH,@f ; ENTER
  dw DROP,NIP,SWAP,OVER,_SUB,SWAP,RDROP,EXIT
@@:
dw _DUP,LIT,0x0E08,_EQ,?BRANCH,@f ; BACKSPACE
  dw DROP,_DUP,?AGAIN
  dw _DEC,ROT,_DEC,MROT
  dw GETXY,?BRANCH,.zero
   type 8," ",8
dw DROP,AGAIN
.zero:
dw ?DUP,?AGAIN
dw _DEC,LIT,79,GOTOXY,_BL,EMITC
dw AGAIN
@@: ; ( buf maxsize size keycode )
  dw MROT,_2DUP,_EQ,_NOT,?AGAIN
dw _INC,_2TO_R,_DUP,EMIT
dw OVER,C!,_INC,_2FROM_R
dw AGAIN

Если заметили, добавил ?AGAIN. Интересно то, что при maxsize=0 он будет ожидать, считай, только ENTER, что удобнее всяких readln; в Pascal.

P.s. Что-то тихо на форуме.


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6452
Благодарил (а): 14 раз.
Поблагодарили: 101 раз.
_KROL писал(а):
P.s. Что-то тихо на форуме.

Могу предложить начать писать Форт с ШК на Си или Паскале. Тишина пропадет. :)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Чт июл 27, 2017 13:45 
_KROL писал(а):
Что-то тихо на форуме.
Я тут как-то выложил готовое ядро с набором универсального доступа к Win32 API, и то, никто особо не отреагировал...
С одной стороны "еще один FORTH" без соответствующей ниши никому не интересен. С другой - искать ошибки в чужих практически недокументированных исходниках - работка еще та. Тем более, пытаться понять оригинальные реализации давно затертых до дыр вещей. (Кстати, от этих же пороков страдают и все эти социалки - хабры и гитхабы, быстро превратившиеся в жуткую свалку, где невозможно найти ничего путного).


Вернуться к началу
  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 512 ]  На страницу Пред.  1 ... 6, 7, 8, 9, 10, 11, 12 ... 35  След.

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


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

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


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

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