Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Чт апр 18, 2024 23:33

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
 Заголовок сообщения: теневые регистры
СообщениеДобавлено: Чт янв 04, 2007 00:26 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
Код:

\ 26-03-2005  работа с теневыми регистрами
\ 29-03-2005  теперь содержимое регистра обновляется не командой OUT,
\             вместо этого выполняется слово указанное при создании тени.
\             Этот трюк позволяет использовать, например многомерную
\             адресацию или работу с памятью.
\ 02-01-2007  теперь адаптирован для SPF4

0 CELL -- off_action
  CELL -- off_value
  CELL -- off_base
CONSTANT shadow_rec

\ создать теневой регистр для порта base инициировав значением n
: Shadow ( Vect n Base --> )
         CREATE HERE shadow_rec ALLOT
          TUCK off_base !
          TUCK off_value !
               off_action !
         DOES> ;

\ структура shadow хранит: [содержимое][адрес][вектор]
: pms ( addr --> n Port Vect )
      DUP  off_value @
      OVER off_base @
      ROT  off_action @ ;   

\ сохранить содержимое теневого регистра в реальный регистр
: Update ( addr --> ) pms EXECUTE ;

\ установить указанные биты в теневом регистре
: SetH ( mask addr --> ) off_value TUCK @ OR SWAP ! ;
   
\ сбросить указанные в маске биты в теневом регистре
: ResH ( mask addr --> ) off_value SWAP INVERT OVER @ AND SWAP ! ;

\ инвертировать указанные биты теневого регистра
: FlipH ( mask addr --> ) off_value TUCK @ XOR SWAP ! ;

\ основные операции с регистрами - меняется содержимое теневого и реального
\ регистров
: SET   ( mask addr --> ) TUCK SetH  Update ;
: RES   ( mask addr --> ) TUCK ResH  Update ;
: FLIP  ( mask addr --> ) TUCK FlipH Update ;

\EOF - тестировани и описание -------------------------------------------------

\ При работе с реальным железом иногда возникает ситуация, что есть регистр,
\ доступный только на запись, но его содержимое необходимо, причем достаточно
\ часто знать и использовать.

\ пример использования:

: ~content CR ." в регистр " . ."  записано: " . ;

HEX

   ' ~content FFFF 345678 Shadow test

    test Update
    FF0000 test SET     .(  должно быть FFFFFF )
    00AA00 test RES     .(  должно быть FF55FF )
    FEDCBA test FLIP    .(   должно быть  18945 )       
CR

\ Таким образом для указанного регистра В/В создается теневой регистр,
\ в котором можно изменять только отдельные биты или группы бит, не
\ затрагивая остальные.
\ Данный подход можно использовать не только при работе с регистрами 8)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ 1 сообщение ] 

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


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

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


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

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