nedoPC.org

Community of electronics hobbyists established in 2002

...
Atom Feed | View unanswered posts | View active topics It is currently 20 Jun 2018 01:37



Reply to topic  [ 263 posts ]  Go to page Previous  1 ... 13, 14, 15, 16, 17, 18  Next
Отладочный модуль на К1801ВМ1 
Author Message
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
Shaos wrote:
а тут PEEK и POKE двухбайтовые или однобайтовые? процык вроде как 16-битный (и шина данных тоже)...
И ведь они оказались честные олдскульные однобайтные PEEK и POKE! :o
Что особенно впечатляет по нечетным адресам! 8)

Оказалось, что никакие они не честные, и не олдскульные... :-?
И это может очень здорово ввести в заблуждение, если точно не знаешь, как работают тут PEEK и POKE! :osad:
Но я, как русский человек, сначала наступил на грабли, а уж потом посмотрел в инструкцию по программированию БК-0010! :lol:
Quote:
3.7.1. Оператор РОКЕ

Оператор РОКЕ А,В записывает числовое значение В в память машины по
адресу А. Если значение адреса нечетное, то оно уменьшается на 1.

3.7.3. Функция РЕЕК

Результат функции РЕЕК(А) - целое число, хранящееся по адресу А.
Анекдот не только в том, что целое, но целое со знаком!

То есть, чтобы загнать в два байта памяти 0FFH, 0FFH нельзя написать:
РОКЕ ADDR,65535 - тут вылетит "Ошибка 6" (не знаю, наверно переполнение)
а надо написать:
РОКЕ ADDR,-1

И нарвался я на эти фокусы, начав делать привязку BK.EXE к клавиатуре пульта.

BK.EXE проецирует клавиши дополнительной клавиатуры на слово порта 177714о вот
по такому принципу:
//--------------------------------------------------------------------
//--- клавиши джойстика ---
//---
//--- <Home> <UP_ARR> <PG_UP>
//--- <L_ARR> <R_ARR>
//--- <END> <PG_DN>

 Драйвер джойстика BK.EXE
Code:
    WORD joystick = m_pChip->GetWordIndirect (0177714);

    switch (nChar)
    {
      case VK_HOME:    // 0x24
        joystick |= 1; // Button 1
        break;
      case VK_END:     // 0x23
        joystick |= 2; // Button 2
        break;
      case VK_PRIOR:   // 0x21
        joystick |= 4; // Button 3
        break;
      case VK_NEXT:    // 0x22
        joystick |= 8; // Button 4
        break;
      case VK_RIGHT:    // 0x27
        joystick |= 16; // Joystick right
        break;
      case VK_LEFT:      // 0x25
        joystick |= 512; // Joystick left
        break;
      case VK_CLEAR:    // 0x0C
        joystick |= 32; // Joystick down
        break;
      case VK_UP:         // 0x26
        joystick |= 1024; // Joystick up
        break;
      default:
        return FALSE;
    }
    m_pChip->SetWordIndirect (0177714, joystick);
    return TRUE;
  }

    WORD joystick = m_pChip->GetWordIndirect (0177714);

    switch (nChar)
    {
      case VK_HOME:     // 0x24
        joystick &= ~1; // Button 1 = FFFE = 1111111111111110
        break;
      case VK_END:      // 0x23
        joystick &= ~2; // Button 2 = FFFD = 1111111111111101
        break;
      case VK_PRIOR:    // 0x21
        joystick &= ~4; // Button 3 = FFFB = 1111111111111011
        break;
      case VK_NEXT:     // 0x22
        joystick &= ~8; // Button 4 = FFF7 = 1111111111110111
        break;
      case VK_RIGHT:     // 0x27
        joystick &= ~16; // J_right = FFEF = 1111111111101111
        break;
      case VK_LEFT:       // 0x25
        joystick &= ~512; // J_left = FDFF = 1111110111111111
        break;
      case VK_CLEAR:     // 0x0C
        joystick &= ~32; // J_down  = FFDF =  1111111111011111
        break;
      case VK_UP:          // 0x26
        joystick &= ~1024; // J_up  = FBFF =  1111101111111111
        break;
      default:
        return FALSE;
    }
    m_pChip->SetWordIndirect (0177714, joystick);
    return TRUE;
  }

Собственно довольно простая затея, и места много, чтобы вмешаться с клавиатурой Монитора.

Я написал небольшую тестовую программу типа:
Code:
30 ADDR = &HFFCC
40 L = PEEK ADDR
50 H = PEEK ADDR+1
60 PRINT HEX$(H);
70 PRINT ".";
80 PRINT HEX$(L);
80 PRINT ";"

И ожидал я увидеть: Hh.Lh;

А когда начал нажимать кнопки <Home> <END> <L_ARR> <UP_ARR> <R_ARR> <PG_UP> <PG_DN>,
то увидел, что до точки и после точки выводится одно и то же число! :o

Так что PEEK и POKE в БК-0010 работают с целым двухбайтовым числом со знаком,
а вот со значением адреса несколько мухлюют... :wink:

_________________
iLavr


21 Jan 2018 12:21
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
интересная идея пришла мне в голову - не рисовать всё это, а просто печатать
на форме 7-сегментным...

В самом черновом предварительном варианте выглядит это вот так:
Attachment:
digidisp3.gif
digidisp3.gif [ 3.05 KiB | Viewed 624 times ]

Я дешифровал 7-сегментный код в символы, и сейчас оно выводит позицию и символ в позиции.
Бегущую строку я пока не сформировал. Надо пристреляться к размеру шрифта.
На рисунке выводится шрифтом с размером (кеглем?) 48.
Следующий размер будет 60. Наверное - слишком крупный...

Соотношение размеров примерно вот такое:
Attachment:
fontLED.gif
fontLED.gif [ 12.57 KiB | Viewed 624 times ]


P.S. Вот так размер шрифта 60 выглядит...
Attachment:
digidisp4.gif
digidisp4.gif [ 3.34 KiB | Viewed 621 times ]
С трудом представляю, как Венда вычисляет свои метрики... 8)

_________________
iLavr


22 Jan 2018 10:49
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Сделал прикидку, как будет выглядеть дисплей протяженностью в 13 знакомест в случае
размеров символов в 48 и 60:
48:
Attachment:
digidisp5.gif
digidisp5.gif [ 2.86 KiB | Viewed 617 times ]

60:
Attachment:
digidisp6.gif
digidisp6.gif [ 3.39 KiB | Viewed 617 times ]

На мой взгляд, 60 вроде более симпатичный...
Оба они уже изначального размера окна в 400 точек по горизонтали.

_________________
iLavr


22 Jan 2018 13:23
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
Бегущую строку я пока не сформировал.

Сделал развертку по позициям индикатора, и оно заработало! :o
Причем вроде как правильно и весьма осмысленно! :kruto:
Attachment:
digidisp8.gif
digidisp8.gif [ 3.82 KiB | Viewed 603 times ]

Стартует всегда, как и написано в статье, с "0" в крайнем разряде.
Дальше, как я понимаю, Монитор читает порт 177714о, в который сам же и записал только что
код и знакоместо индикатора, и воспринимает это как нажатие кнопок клавиатуры.
Поскольку там не 0, Монитор начинает эти команды выполнять.
Attachment:
digidisp9.gif
digidisp9.gif [ 3.92 KiB | Viewed 603 times ]

Выполняет всё время одну и ту же последовательность действий и возвращается к исходному
состоянию - "0" в крайнем разряде.

Ну по крайней мере, теперь есть уверенность в некоторой работоспособности программы Монитор.
Всё же мы с Виталием вычитали дамп весьма тщательно!

Подумаю, что можно сделать с имитацией клавиатуры для Монитора...

_________________
iLavr


22 Jan 2018 23:11
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 16599
Location: Colorado
Reply with quote
а чего полумрачная восьмёрка стирается, когда что-то таки в знакоместо пишется?
надо бы и восьмёрку оставить, и яркое число поверх отсветить, а то как-то нелогично :)

_________________
:eugeek: https://twitter.com/Shaos1973


22 Jan 2018 23:16
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Shaos wrote:
надо бы и восьмёрку оставить, и яркое число поверх отсветить, а то как-то нелогично :)

Так не получится - это шрифт, а не графика. Мог бы и сам догадаться. :-?

_________________
iLavr


22 Jan 2018 23:21
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 16599
Location: Colorado
Reply with quote
Lavr wrote:
Shaos wrote:
надо бы и восьмёрку оставить, и яркое число поверх отсветить, а то как-то нелогично :)

Так не получится - это шрифт, а не графика. Мог бы и сам догадаться. :-?

А кто мешает одним и тем же шрифтом писать дважды в одно и тоже место разными цветами (и буквами)?

_________________
:eugeek: https://twitter.com/Shaos1973


22 Jan 2018 23:27
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Shaos wrote:
А кто мешает одним и тем же шрифтом писать дважды в одно и тоже место разными цветами (и буквами)?

Почитай WinAPI и узнаешь, кто мешает... :lol:

_________________
iLavr


22 Jan 2018 23:30
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 16599
Location: Colorado
Reply with quote
Lavr wrote:
Shaos wrote:
А кто мешает одним и тем же шрифтом писать дважды в одно и тоже место разными цветами (и буквами)?

Почитай WinAPI и узнаешь, кто мешает... :lol:

Да вроде писал - тени всяки делал и т.д.
Хотя может это было в DirectDraw...

_________________
:eugeek: https://twitter.com/Shaos1973


23 Jan 2018 00:51
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Shaos wrote:
может это было в DirectDraw...

Ну а это чистое WinAPI, функция:
BOOL TextOut( HDC hdc, // дескриптор DC int nXStart,
// x-координата начальной позиции int nYStart, // y-координата начальной позиции
LPCTSTR lpString, // строка символов int cbString // число символов );

Я не вижу у нее ни прозрачности, ни альфа-канала. Строка выводится с RGB цветом фона и символа.

Ну и был такой старец - Уильям Оккам - он советовал не умножать сущностей без нужды.
Нам что надо - шашечки или ехать? Мне лично - ехать... а кому нужны шашечки - я потом
исходники выложу - пусть дорисует... :wink:

_________________
iLavr


23 Jan 2018 01:40
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 16599
Location: Colorado
Reply with quote
Ну можно в фоновый битмап напечатать текст, а потом уже этот битмап как картинку с прозрачностью копировать в окно поверх ранее напечатанного...

_________________
:eugeek: https://twitter.com/Shaos1973


23 Jan 2018 23:50
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Shaos wrote:
Ну можно в фоновый битмап напечатать текст...

Вот спасибо-то! :wink: Очень... очень хорошая идея... разве что неновая... :mrgreen:
Lavr wrote:
...а то очень лениво ... затевать все эти графические контексты... битблиты и т.п.

Не буду я себе жизнь усложнять... щаз доделаю клавиатуру и пора с этим инструментом заняться
изучением 1801ВМ1,2. В этом была цель, но отвлекло меня создание инструмента. :lol:

_________________
iLavr


24 Jan 2018 00:37
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Джентльмены, кому хорошо видно что это за микросхема?
Attachment:
K561xxX.gif
K561xxX.gif [ 6.45 KiB | Viewed 557 times ]

А то я с 561 серией практически не работал, не узнаЮ её.
И перебор в Гугле серии 561 не помогает... :osad:

Судя по всему, у нее 16-выводный корпус, 6 каналов и 2 входа разрешения.
Может кто-либо чисто навскидку её узнаёт?

_________________
iLavr


24 Jan 2018 01:42
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 16599
Location: Colorado
Reply with quote
561ЛН1 вестимо :roll:


_________________
:eugeek: https://twitter.com/Shaos1973


24 Jan 2018 01:59
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Shaos wrote:
561ЛН1 вестимо :roll:

Спасибо! А я её как-то мимо ушей пропустил... гуглю "К561 6-входовый буферный элемент"... :-?

_________________
iLavr


Last edited by Lavr on 24 Jan 2018 02:13, edited 2 times in total.



24 Jan 2018 02:05
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 263 posts ]  Go to page Previous  1 ... 13, 14, 15, 16, 17, 18  Next

Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.