nedoPC.org

Community of electronics hobbyists established in 2002

...
Atom Feed | View unanswered posts | View active topics It is currently 23 Oct 2017 11:16



Reply to topic  [ 98 posts ]  Go to page Previous  1 ... 3, 4, 5, 6, 7
ВГ75 
Author Message
Doomed

Joined: 10 Mar 2012 19:21
Posts: 474
Location: РФ
Reply with quote
Есть те, кому сие интересно и нужно - Ваши старания вполне полезны - даже не сомневайтесь. !

Будем весьма рады узреть и код и даже изходник ( ну то есть дизассемблер у нас почти у всех есть - вся ценность в комментариях .. :rotate: )


12 Mar 2015 05:01
Profile
Banned
User avatar

Joined: 04 Jan 2013 13:09
Posts: 398
Location: 95.24.178.158
Reply with quote
Paguo-86PK wrote:
Я понимаю, что опубликованная "классика" лучше новодела. Но, раз уж на то пошло, я уже написал код, потратив неделю....

А я не давал никаких оценок типа "лучше"... "хуже"... я просто помню, что игрался в эти "окна" на "Микроше",
но при 32К памяти признал тогда эту идею несколько расточительной.
Поэтому меня и удивила несколько фраза:"до дампа речи не дошло".
А тут неожиданно и статья с кодом попались.

Так что я всего лишь сообщил и Вам, и всем, кто читает форум, что код там был и привел ссылки.

А если Вы выложите исходники, то, думаю, это будет интересно, поскольку сейчас всяк может поэкспериментировать
на эмуляторах и прочувствовать откуда есть пошла библиотека CodeVision... 8)


12 Mar 2015 09:35
Profile
Novelist
User avatar

Joined: 12 Apr 2011 23:43
Posts: 46
Location: Tashkent
Reply with quote
Stan wrote:
Paguo-86PK wrote:
Я понимаю, что опубликованная "классика" лучше новодела. Но, раз уж на то пошло, я уже написал код, потратив неделю....

А я не давал никаких оценок типа "лучше"... "хуже"... я просто помню, что игрался в эти "окна" на "Микроше",
но при 32К памяти признал тогда эту идею несколько расточительной.
Поэтому меня и удивила несколько фраза:"до дампа речи не дошло".
А тут неожиданно и статья с кодом попались.

Так что я всего лишь сообщил и Вам, и всем, кто читает форум, что код там был и привел ссылки.

А если Вы выложите исходники, то, думаю, это будет интересно, поскольку сейчас всяк может поэкспериментировать
на эмуляторах и прочувствовать откуда есть пошла библиотека CodeVision... 8)

Я вспомнил эту статью. Во-первых, с моими 16кб это реализовывать тогда было достаточно нереально. Тем более, вызывать из Бейсика.
Во-вторых, лень было в уме транслировать с ассемблера в машинный код - ассемблер "Микрон" тоже память занимал же.

petrenko wrote:
Есть те, кому сие интересно и нужно - Ваши старания вполне полезны - даже не сомневайтесь. !

Будем весьма рады узреть и код и даже изходник ( ну то есть дизассемблер у нас почти у всех есть - вся ценность в комментариях .. :rotate: )


Тестирую здесь, но встроенный ассемблер заменил. Т.е. исходный текст на инструкциях x86-синтаксиса, а выходной код - i8080. Поэтому, здесь он будет бесполезен (я думаю) и исходник выложить не могу.
В этом же ассемблере пропатчил "Монитор" (эмулятор это позволяет). Выбросил директивы U и X. Так как вместо "X"-кода у меня патч экрана (обработчик табуляции, звонка и Esc-команд: Открытие окна и смещение окна) в зоне 0xFF52..0xFFDC.

Сейчас пишу код 16-битного деления. Вроде бы делит и выводит на экран десятичное число. Использует стек для таблицы.
Делилка входит в библиотеку Esc-кодов: Выводит десятичное значение позиции курсора и остатка памяти в буфере текущего окна.
Вот дизассемблер:
 "Делитель DX на BX. выход: DX - частное, CX - остаток"
Code:
0140: E5     .   PUSH  BX
0141: 010000 ... MOV   CX, 0000
0144: C5     .   PUSH  CX
0145: 7D     }   MOV   AL, BL
0146: 2F     /   NOT   AL
0147: 4F     O   MOV   CL, AL
0148: 7C     |   MOV   AL, BH
0149: 2F     /   NOT   AL
014A: 47     G   MOV   CH, AL
014B: 03     .   INC   CX
014C: 29     )   ADD   BX, BX
014D: D24401 .D. JNC   0144
0150: C5     .   PUSH  CX
0151: EB     .   XCHG  BX, DX
0152: 010000 ... MOV   CX, 0000
0155: D1     .   POP   DX
0156: 7B     {   MOV   AL, DL
0157: B2     .   OR    AL, DH
0158: CA6C01 .l. JZ    016C
015B: E5     .   PUSH  BX
015C: 19     .   ADD   BX, DX
015D: D26201 .b. JNC   0162
0160: D1     .   POP   DX
0161: E5     .   PUSH  BX
0162: E1     .   POP   BX
0163: 79     y   MOV   AL, CL
0164: 8F     .   ADC   AL, AL
0165: 4F     O   MOV   CL, AL
0166: 78     x   MOV   AL, CH
0167: 8F     .   ADC   AL, AL
0168: 47     G   MOV   CH, AL
0169: D25501 .U. JNC   0155
016C: E5     .   PUSH  BX
016D: C5     .   PUSH  CX
016E: D1     .   POP   DX
016F: C1     .   POP   CX
0170: E1     .   POP   BX
0171: C9     .   RET

Вообще-то, я думал, будь у меня под рукой программатор, прошил бы ПЗУ и проверил бы на реальном "РК".
Родственники удивляются, почему я часами торчу в дампах. И никогда не играю. Вернее поиграл в SimCity месяц и две недели в Angry Birds (это за последние 12 лет!). И снова провалился в дамп.
А ведь очень увлекательно отвоёвывать каждый байт! Я с гигантским трудом уложил свой код в зону FCBA..FE00! Написал за сутки, а вот утрамбовываю до сих пор!
Потому и вылез он в те FF52..0xFFDC.
Причём, старт Монитора происходит там же: Экран не очищается, а маскируется (0x7F), прописываются рабочие точки входа и т.д.
В общем, Монитор несколько изменён уже и на старте. Ничего не поделаешь...


12 Mar 2015 16:13
Profile WWW
Banned
User avatar

Joined: 04 Jan 2013 13:09
Posts: 398
Location: 95.24.178.158
Reply with quote
Paguo-86PK wrote:
Родственники удивляются, почему я часами торчу в дампах. И никогда не играю. Вернее поиграл в SimCity месяц и две недели в Angry Birds (это за последние 12 лет!). И снова провалился в дамп....

А программирование и уж тем более на ассемблере - само по себе увлекательнейшая и азартная игра. :kruto:
И самое приятное, что это не бесполезно потерянное время!


12 Mar 2015 19:32
Profile
Novelist
User avatar

Joined: 12 Apr 2011 23:43
Posts: 46
Location: Tashkent
Reply with quote
Stan wrote:
А программирование и уж тем более на ассемблере - само по себе увлекательнейшая и азартная игра. :kruto:
И самое приятное, что это не бесполезно потерянное время!
©СНЛ wrote:
Программирование, как процесс упорядочивания хаотической информации, разрушает карму
Очень приятно, когда код получается компактным и стабильным, как монолит.
Однако, есть и неприятные вещи...
Во-первых, в оригинале, экранные переменные располагаются по векторам:
7600 - WORD: Cursor Address
7602 - WORD: Cursor Position
7603 - BYTE: Esc+Y Sequency
Итого, 5 байт. У меня же, как минимум, 12:
-0x1 BYTE[]: Буфер Escape-стека (как минимум, 5 байтов).
+0x0 BYTE: Режим приёма потока.
+0x1 BYTE: Байт выравнивания. Временные данные.
+0x2 BYTE: Байт кода очищения скроллинга экрана.
+0x3 BYTE: Байт индекса кодовой страницы.
+0x4 WORD: Cursor Position - Позиция X,Y курсора относительно окна. Начиная с 0,0.
+0x6 WORD: Viewport Size - Ограничение окна по ширине и высоте.
+0x8 WORD: Viewport Offset - Позиция X,Y окна относительно всего экрана.
+0xA WORD: Viewport Buffer - Адрес буфера экрана.

Тем самым, слишком много переменных. Пришлось уменьшить буфер ввода и посадить их по вектору 0x7644.

Вот выкладываю (64кб) памяти.
Attachment:
File comment: Радио-Окна 2015
8080dump.zip [7.65 KiB]
Downloaded 48 times

Вставить в ассемблер эмулятора, закачать в память, нажать кнопку сброса, набрать <G>...

Интерфейс:
Три окна. У основного - линейка. Причём, нумерация строк также указывает на индекс параметров в Esc-стеке, которые выводятся столбиком в самом начале экрана.
Во втором и третьем окнах - графические линии. Назатием Забоя можно очищать буфер окна или изменять параметры. В частности, координаты вывода линий...
Управление:
Табуляция в режиме РУС/лат работает за табуляцию в окне. В режиме рус/ЛАТ - переключает окна.
Двойное нажатие Home прокручивает весь стек окон.

Так как онлайн эмулятор поддерживает вывод строчных символов с кодами >128, в Окнах можно переключаться через Esc<128>P или Esc<0>P. Он же определяет, каким символом будет зачищаться окно по 1F.
Указав Esc<Код>C, скроллинг будет заполнять последнюю строку этим кодом.
Причём, этот же код будет служить старшим байтом для вывода десятичного числа.
Так, Esc<n>D выводит n десятичных цифр. Выводимое число должно указываться в байте временных данных и кода скроллинга экрана.
Доступ к этим ячейкам достигается через Esc<Src>;<Dst>M. Где Dst/Src - приёмник/источник. Все числа вводятся относительно байта режима приёма потока. Так:
Esc<4>;<1>M копирует координату X-курсора во Временный байт.
Esc<9>;<255>M копирует координату Y позиции окна в -1 байт - буфер Escape-стека.

Тем самым, можно немного оперировать многими параметрами.
Так и выводится строка статуса внизу окна с позицией курсора и остатком места в текущем окне.
Как можно заметить, всё несколько тормозит. Какрас из-за избытков Esc-кодов.
Если отключить вывод отладочной информации, скорость возрастёт.

Если нажать кнопку Сброса эмулятора, экран очистится не весь. И все директивы монитора будут выводится какбы внутри окна. Там можно посмотреть на "полную скорость", без всяких перехватчиков и фокусов. Загрузить и прогнать игры - Цирк и Вулкан не тормозят.

Собственно, ассемблер (вместо встроенного в онлайн-эмулятор) с несколькими листингами и сам мой код Монитора и Окон.
Attachment:
File comment: x80-assembler
i8080asm.zip [39.79 KiB]
Downloaded 49 times


P.S.: Кстати, доработал код:
1. Множитель на 78 можно подменить своим (перспектива смены режимов ВГ75);
2. Тональность звонка (07) можно изменять и Esc+Y - передаётся в Escape-обработчик;
3. Можно указать количество удаляемых из печати символов (аналог Mid$(n) Бейсика) до 240 (тем самым, ограничив Esc-стек до 12). Можно использовать для пропуска незначащих десятичных цифр.
Таким образом, подменив множитель на свой, можно направить поток печатуемых в любое место в памяти.


13 Mar 2015 15:45
Profile WWW
Writer

Joined: 19 May 2014 06:47
Posts: 18
Location: Челябинск
Reply with quote
Post Re:
Shaos wrote:
HardWareMan wrote:
Наверное потому, что это конец ОЗУ в 16КБ (базовый вариант же).


Конец минус пять байт?...


8


15 Apr 2015 07:05
Profile
Novelist
User avatar

Joined: 12 Apr 2011 23:43
Posts: 46
Location: Tashkent
Reply with quote
Досадно, но из меня программист какой-то поршивый получается, если вдуматься, что 20 лет ушло на осознание одной фишки...

Оказалось, что если в ПЗУ МОНИТОРа последние 16 байтов заполнить кодом FF, посадить на 0038h соответствующую функцию, то в Бейсиках функцией usr(-1)..usr(-16) можно вызывать всех популярных API МОНИТОРа (F803..F821). Например:
Code:
0038 E1       POP  H
0039 7D       MOV  A,L
003A E6 0F    ANI  0Fh
003C 6F       MOV  L,A
003D 87       ADD  A
003E 85       ADD  L
003F 6F       MOV  L,A
0040 26 F8    MOV  H,0F8h
0041 E9       PCHL

или
Code:
0038 E1       POP  H
0039 7D       MOV  A,L
003A 87       ADD  A
003B 85       ADD  L
003C 2F       CMA
003D 3C       INR  A
003E 26 F8    MOV  H,0F8h
0040 6F       MOV  L,A
0041 E9       PCHL


14 May 2015 16:30
Profile WWW
Novelist
User avatar

Joined: 12 Apr 2011 23:43
Posts: 46
Location: Tashkent
Reply with quote
Кстaти…
Существовали ли игры, использующие "сбойный" скроллинг ВТ57/ВГ75 как полезную фишку?
В своё время я даже пытался как-то скроллить экран таким образом, дожидаясь статуса конца кадра.
И "презентацию" делал с двумя мерцающими кадрами: ВГ75 настроен так же на 78x30, тогда как ВТ57 - на 78x60. Получилось нечто типа полутонов. Прорисовал свою эмблему в основном кадре, а во второй - её частично копировал, чтобы был эффект "блеска"…

P.S.: Вот реальной машины под рукой нет (в шкафу она с дохлым БП), а новые идеи и вопросы - мучают…
 "Мои мысли - мои скакуны…"
По-идее, если расширить "зону ПДП" до 7FFFh и "лишние" эти 12 байтов забить спецкодами, то можно добиться скроллинга как влево, так и вправо (записывая в экран от 12 до 24 спецкодов).
Другая проблема будет в том, чтобы написать код под такую фишку. Типа стрелялки. Любопытный код был бы, прорисовывающий только столбцы.
Под "осциллограмму" тоже бы сгодился такой скроллинг…
Можно ещё ПДП настроить на выдачу 59/89 строк, вместо 60/90. Получим получим медленный вертикальный скролл каждый второй или третий кадр. Естественной, при соответствующей технике программирования.


P.P.S.: Кстати, знатоки схемотехники…
Не будет ли "очень плохо", если вывод 8 D3 подтянуть к выводу 16 D2, при этом выводы 15 и 21 от D2 подтянуть к выводам 11 и 12 внешнего 155ТМ2, вывод 9 которого через 680Ω подать на базу VT2?


Attachments:
File comment: Нетрадиционное использование ПДП в схеме РАДИО-86РК
i8257vs8275.jpg
i8257vs8275.jpg [ 99.35 KiB | Viewed 448 times ]
07 Apr 2017 23:20
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 98 posts ]  Go to page Previous  1 ... 3, 4, 5, 6, 7

Who is online

Users browsing this forum: No registered users and 2 guests


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.