Отладочный модуль на К1801ВМ1

Digital Equipment Corporation PDP-8 & PDP-11 (а также совместимые с последним советские ЭВМ на 1801ВМ1/2/3)

Moderator: Shaos

User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Отладочный модуль на К1801ВМ1

Post by Lavr »

Lavr wrote:
Shaos wrote:а тут PEEK и POKE двухбайтовые или однобайтовые? процык вроде как 16-битный (и шина данных тоже)...
И ведь они оказались честные олдскульные однобайтные PEEK и POKE! :o
Что особенно впечатляет по нечетным адресам! 8)
Оказалось, что никакие они не честные, и не олдскульные... :-?
И это может очень здорово ввести в заблуждение, если точно не знаешь, как работают тут PEEK и POKE! :osad:
Но я, как русский человек, сначала наступил на грабли, а уж потом посмотрел в инструкцию по программированию БК-0010! :lol:
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: Select all

    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: Select all

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
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Отладочный модуль на К1801ВМ1

Post by Lavr »

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

Соотношение размеров примерно вот такое:
fontLED.gif
P.S. Вот так размер шрифта 60 выглядит...
digidisp4.gif
С трудом представляю, как Венда вычисляет свои метрики... 8)
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Отладочный модуль на К1801ВМ1

Post by Lavr »

Сделал прикидку, как будет выглядеть дисплей протяженностью в 13 знакомест в случае
размеров символов в 48 и 60:
48:
digidisp5.gif
60:
digidisp6.gif
На мой взгляд, 60 вроде более симпатичный...
Оба они уже изначального размера окна в 400 точек по горизонтали.
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Отладочный модуль на К1801ВМ1

Post by Lavr »

Lavr wrote:Бегущую строку я пока не сформировал.
Сделал развертку по позициям индикатора, и оно заработало! :o
Причем вроде как правильно и весьма осмысленно! :kruto:
digidisp8.gif
Стартует всегда, как и написано в статье, с "0" в крайнем разряде.
Дальше, как я понимаю, Монитор читает порт 177714о, в который сам же и записал только что
код и знакоместо индикатора, и воспринимает это как нажатие кнопок клавиатуры.
Поскольку там не 0, Монитор начинает эти команды выполнять.
digidisp9.gif
Выполняет всё время одну и ту же последовательность действий и возвращается к исходному
состоянию - "0" в крайнем разряде.

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

Подумаю, что можно сделать с имитацией клавиатуры для Монитора...
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Shaos
Admin
Posts: 24011
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Отладочный модуль на К1801ВМ1

Post by Shaos »

а чего полумрачная восьмёрка стирается, когда что-то таки в знакоместо пишется?
надо бы и восьмёрку оставить, и яркое число поверх отсветить, а то как-то нелогично :)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Отладочный модуль на К1801ВМ1

Post by Lavr »

Shaos wrote:надо бы и восьмёрку оставить, и яркое число поверх отсветить, а то как-то нелогично :)
Так не получится - это шрифт, а не графика. Мог бы и сам догадаться. :-?
iLavr
User avatar
Shaos
Admin
Posts: 24011
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Отладочный модуль на К1801ВМ1

Post by Shaos »

Lavr wrote:
Shaos wrote:надо бы и восьмёрку оставить, и яркое число поверх отсветить, а то как-то нелогично :)
Так не получится - это шрифт, а не графика. Мог бы и сам догадаться. :-?
А кто мешает одним и тем же шрифтом писать дважды в одно и тоже место разными цветами (и буквами)?
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Отладочный модуль на К1801ВМ1

Post by Lavr »

Shaos wrote:А кто мешает одним и тем же шрифтом писать дважды в одно и тоже место разными цветами (и буквами)?
Почитай WinAPI и узнаешь, кто мешает... :lol:
iLavr
User avatar
Shaos
Admin
Posts: 24011
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Отладочный модуль на К1801ВМ1

Post by Shaos »

Lavr wrote:
Shaos wrote:А кто мешает одним и тем же шрифтом писать дважды в одно и тоже место разными цветами (и буквами)?
Почитай WinAPI и узнаешь, кто мешает... :lol:
Да вроде писал - тени всяки делал и т.д.
Хотя может это было в DirectDraw...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Отладочный модуль на К1801ВМ1

Post by Lavr »

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

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

Ну и был такой старец - Уильям Оккам - он советовал не умножать сущностей без нужды.
Нам что надо - шашечки или ехать? Мне лично - ехать... а кому нужны шашечки - я потом
исходники выложу - пусть дорисует... :wink:
iLavr
User avatar
Shaos
Admin
Posts: 24011
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Отладочный модуль на К1801ВМ1

Post by Shaos »

Ну можно в фоновый битмап напечатать текст, а потом уже этот битмап как картинку с прозрачностью копировать в окно поверх ранее напечатанного...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Отладочный модуль на К1801ВМ1

Post by Lavr »

Shaos wrote:Ну можно в фоновый битмап напечатать текст...
Вот спасибо-то! :wink: Очень... очень хорошая идея... разве что неновая... :mrgreen:
Lavr wrote:...а то очень лениво ... затевать все эти графические контексты... битблиты и т.п.
Не буду я себе жизнь усложнять... щаз доделаю клавиатуру и пора с этим инструментом заняться
изучением 1801ВМ1,2. В этом была цель, но отвлекло меня создание инструмента. :lol:
iLavr
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Отладочный модуль на К1801ВМ1

Post by Lavr »

Джентльмены, кому хорошо видно что это за микросхема?
K561xxX.gif
А то я с 561 серией практически не работал, не узнаЮ её.
И перебор в Гугле серии 561 не помогает... :osad:

Судя по всему, у нее 16-выводный корпус, 6 каналов и 2 входа разрешения.
Может кто-либо чисто навскидку её узнаёт?
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Shaos
Admin
Posts: 24011
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Отладочный модуль на К1801ВМ1

Post by Shaos »

561ЛН1 вестимо :roll:

Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Отладочный модуль на К1801ВМ1

Post by Lavr »

Shaos wrote:561ЛН1 вестимо :roll:
Спасибо! А я её как-то мимо ушей пропустил... гуглю "К561 6-входовый буферный элемент"... :-?
Last edited by Lavr on 24 Jan 2018 01:13, edited 2 times in total.
iLavr