Страница 1 из 2

Re: Обновления

СообщениеДобавлено: 19 окт 2009, 17:13
invaisor
Заметил странное поведение кнопок и страниц памяти: в каждой странице мы можем анализировать состояние не более ОДНОЙ КНОПКИ.
При чем та, которая в коде анализируется последней, будет работать.
К примеру:
Страница 0
IMUX2(BTN_UP_STATUS,NETLIST_SELECT,0,1)

Страница 1
IMUX2(BTN_DOWN_STATUS,NETLIST_SELECT,1,2)
IMUX2(BTN_UP_STATUS,NETLIST_SELECT,1,3)

На кнопку DOWN реакции не будет вообще, хотя компилятор не ругается и все это перемалывает.

Если же на 0 странице написать
IMUX2(BTN_UP_STATUS,NETLIST_SELECT,0,1)

IMUX2(BTN_DOWN_STATUS,NETLIST_SELECT,1,3)

То мы сразу же перейдем на страницу 1, как будто мы нажали на кнопку UP.

Причем независимо от того, что мы анализируем BTN_UP или BTN_UP_STATUS.

ПС В руководстве NL1Sim_manual.pdf почему-то указано, что светодиодов 10 :?

Re: Обновления

СообщениеДобавлено: 19 окт 2009, 23:53
Рустам
invaisor писал(а):Заметил странное поведение кнопок и страниц памяти: в каждой странице мы можем анализировать состояние не более ОДНОЙ КНОПКИ.

Можно анализировать все кнопки, но результат будет один. Тот, что вы запишете в NETLIST_SELECT последним.

invaisor писал(а):К примеру:
Страница 0
IMUX2(BTN_UP_STATUS,NETLIST_SELECT,0,1)

Вы нажимаете кнопку UP, ее статус становится активным и виртуальная машина переключается в состояние №1.

invaisor писал(а):Страница 1
IMUX2(BTN_DOWN_STATUS,NETLIST_SELECT,1,2)
IMUX2(BTN_UP_STATUS,NETLIST_SELECT,1,3)

Виртуальная машина гораздо быстрее человека. Поэтому когда она оказалась в состоянии №1, вы кнопку UP еще держали нажатой. Поэтому первый мультиплексор запишет в NETLIST_SELECT значение 1, а второй - 3. Внутри нетлиста вы можете менять значение NETLIST_SELECT сколько угодно раз. Нетлист посередине не прерывается. Важно, какое значение будет в ячейке NETLIST_SELECT по окончанию выполнения нетлиста.

invaisor писал(а):На кнопку DOWN реакции не будет вообще, хотя компилятор не ругается и все это перемалывает.

На кнопку DOWN реакция есть, но она "затирается" реакцией на кнопку UP.

invaisor писал(а):Если же на 0 странице написать
IMUX2(BTN_UP_STATUS,NETLIST_SELECT,0,1)

IMUX2(BTN_DOWN_STATUS,NETLIST_SELECT,1,3)

То мы сразу же перейдем на страницу 1, как будто мы нажали на кнопку UP.

Нет, не потому. Если ни одна из кнопок не нажата, то первый мультиплексор запишет в NETLIST_SELECT значение 0, а второй запишет 1. В результате мы перейдем в нетлист №1.

invaisor писал(а):ПС В руководстве NL1Sim_manual.pdf почему-то указано, что светодиодов 10 :?

Шутка.

Re: Вопросы по ВМ NL1

СообщениеДобавлено: 20 окт 2009, 00:34
A.Sukhoy
:shock: Как все запутано

З.Ы. Что-то мне подсказывает, что понять плюсы таких машин мы сможем только выполнив задание.

Re: Обновления

СообщениеДобавлено: 20 окт 2009, 00:42
invaisor
С первым вопросом понятно, спасибо :smile:

Рустам писал(а):
invaisor писал(а):Если же на 0 странице написать
IMUX2(BTN_UP_STATUS,NETLIST_SELECT,0,1)

IMUX2(BTN_DOWN_STATUS,NETLIST_SELECT,1,3)

То мы сразу же перейдем на страницу 1, как будто мы нажали на кнопку UP.

Нет, не потому. Если ни одна из кнопок не нажата, то первый мультиплексор запишет в NETLIST_SELECT значение 0, а второй запишет 1. В результате мы перейдем в нетлист №1.


Да тут немного некорректный вариант. Вот если так:
Страница 0
IMUX2(BTN_UP,NETLIST_SELECT,0,1)
IMUX2(BTN_DOWN,NETLIST_SELECT,0,2)

То работает только кнопка DOWN на UP нет реакции.

ПС Также хотелось бы увидеть операции поразрядного И и ИЛИ, а то без них тяжко. Особенно тем кто со светодиодами, т.к. и сдвигов нет.

Re: Обновления

СообщениеДобавлено: 20 окт 2009, 00:45
A.Sukhoy
invaisor писал(а):Да тут немного некорректный вариант. Вот если так:
Страница 0
IMUX2(BTN_UP,NETLIST_SELECT,0,1)
IMUX2(BTN_DOWN,NETLIST_SELECT,0,2)

То работает только кнопка DOWN на UP нет реакции.


Ну так само собой, последний мультиплексор все потрёт. Запишет либо 0, либо 2 в NETLIST_SELECT, в зависимости от BTN_DOWN

Re: Обновления

СообщениеДобавлено: 20 окт 2009, 00:46
invaisor
SHR писал(а):Ну так само собой, последний мультиплексор все потрёт. Запишет либо 0, либо 2 в NETLIST_SELECT, в зависимости от BTN_DOWN

Да, точно! Под вечер перестаю соображать :smile:

Re: Вопросы по ВМ NL1

СообщениеДобавлено: 20 окт 2009, 00:57
A.Sukhoy
Надо действовать через tmp регистры их челых 14 штук.

Re: Вопросы по ВМ NL1

СообщениеДобавлено: 20 окт 2009, 01:02
invaisor
SHR писал(а):Надо действовать через tmp регистры их челых 14 штук.

Нет их 10 с адресами от 0x00 до 0x09.
При попытке использовать адрес 0x0A или больше - он выводиться на ЖКИ крупными буквами
(к примеру 00.0A) и ничего не работает.

Re: Вопросы по ВМ NL1

СообщениеДобавлено: 20 окт 2009, 01:07
A.Sukhoy
Ну может у нас и 10, я просто в других исходниках смотрю.

Re: Обновления

СообщениеДобавлено: 20 окт 2009, 01:52
Рустам
invaisor писал(а):ПС Также хотелось бы увидеть операции поразрядного И и ИЛИ, а то без них тяжко. Особенно тем кто со светодиодами, т.к. и сдвигов нет.

Думаете это поможет? Вопрос в том, есть ли другой способ...

invaisor писал(а):При попытке использовать адрес 0x0A или больше - он выводиться на ЖКИ крупными буквами
(к примеру 00.0A) и ничего не работает.

Быстро же вы добрались. Это HALT машины :D Надпись на экране означает, что была попытка обращения в несуществующую память. Она была предпринята в нетлисте №0, а адрес ячейки памяти - 0x0A. Такой ячейки действительно нет. Если это была операция чтения, то надпись будет "000A", а если операция записи - "00.0A".

Re: Обновления

СообщениеДобавлено: 20 окт 2009, 09:40
invaisor
Рустам писал(а):
invaisor писал(а):ПС Также хотелось бы увидеть операции поразрядного И и ИЛИ, а то без них тяжко. Особенно тем кто со светодиодами, т.к. и сдвигов нет.

Думаете это поможет? Вопрос в том, есть ли другой способ...

Другой способ есть, но он очень громоздкий :(

Re: Обновления

СообщениеДобавлено: 20 окт 2009, 10:16
Рустам
invaisor писал(а):Другой способ есть, но он очень громоздкий :(

С одной стороны, задача не особо сложная. Пусть способ громоздкий, но он ведь реализуем? С другой стороны, явно существуют операции И, ИЛИ логические и битовые. Сейчас в ВМ логические операции. Если их заменить на битовые, то логических мы лишимся.

Re: Обновления

СообщениеДобавлено: 20 окт 2009, 22:39
Интегральный вычислитель
Рустам писал(а):
invaisor писал(а):Другой способ есть, но он очень громоздкий :(

С одной стороны, задача не особо сложная. Пусть способ громоздкий, но он ведь реализуем? С другой стороны, явно существуют операции И, ИЛИ логические и битовые. Сейчас в ВМ логические операции. Если их заменить на битовые, то логических мы лишимся.

Предлагаю убрать GT и LT и заменить их побитовое ИЛИ и циклический сдвиг

Re: Обновления

СообщениеДобавлено: 20 окт 2009, 23:26
Рустам
Интегральный вычислитель писал(а):Предлагаю убрать GT и LT и заменить их побитовое ИЛИ и циклический сдвиг

"Мне не нравится этот корабль, мне не нравятся эти матросы. Мне вообще ничего не нравится!" (С) Остров сокровищ

А может решить задачу имеющимися средствами? В Таймере я змейку не реализовывал, но мне сейчас хватило 5 минут, чтобы придумать способ реализации змейки. 8-)

Re: Обновления

СообщениеДобавлено: 21 окт 2009, 07:07
Интегральный вычислитель
Рустам писал(а):А может решить задачу имеющимися средствами? В Таймере я змейку не реализовывал, но мне сейчас хватило 5 минут, чтобы придумать способ реализации змейки. 8-)

Мне тоже 5 минут хватило, только вот решение получается некрасивым с точки зрения эстетики и поэтики стиля.

Re: Обновления

СообщениеДобавлено: 21 окт 2009, 08:43
Рустам
Интегральный вычислитель писал(а):Мне тоже 5 минут хватило, только вот решение получается некрасивым с точки зрения эстетики и поэтики стиля.

NL1 и красота - вещи несовместимые. Забей. :D

Re: Вопросы по ВМ NL1

СообщениеДобавлено: 28 окт 2009, 05:03
A.Sukhoy
Несколько вопросов-утверждений или то, что я не нашел в мануале по причине четырех утра: :smile:
  • Нет листы пропускать нельзя, т.е. они должны идти по порядку, а не 0,1,2,10, например;
  • TIMER_SEC ограничен 60 секундами
.
И вопрос по заданию (вариант 9).
После того, как таймер отсчитает положенное время, устройство должно включиться автоматически, или я должен еще раз подтвердить включение кнопкой SET.

Re: Вопросы по ВМ NL1

СообщениеДобавлено: 28 окт 2009, 08:50
Рустам
SHR писал(а):Нет листы пропускать нельзя, т.е. они должны идти по порядку, а не 0,1,2,10, например;

Да, нетлисты идут без пропусков. Порядок их указания в командной строке задает этот порядок: 0-ой, 1-ый, 2-ой и т.д. Программно переходить между нетлистами можно как угодно.

SHR писал(а):TIMER_SEC ограничен 60 секундами

Хорошая шутка. На самом деле ограничение 65 секунд. Это потому что внутри таймер все равно миллисекундный и хранится в 16-битной переменной. NL1 16-битная виртуальная машина.

SHR писал(а):После того, как таймер отсчитает положенное время, устройство должно включиться автоматически, или я должен еще раз подтвердить включение кнопкой SET.

Автоматически.

Re: Вопросы по ВМ NL1

СообщениеДобавлено: 28 окт 2009, 14:43
A.Sukhoy
Хорошая шутка. На самом деле ограничение 65 секунд.

Эх....немного не попал, последнее значение после проверки которого я решил, что ограничение 60 секунд было 66. :smile:

Re: Вопросы по ВМ NL1

СообщениеДобавлено: 28 окт 2009, 17:21
Рустам
SHR писал(а):Эх....немного не попал, последнее значение после проверки которого я решил, что ограничение 60 секунд было 66. :smile:

Не знал, что в 16-битное число можно записать значение 66000.