nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 26 Apr 2024 04:17



Reply to topic  [ 204 posts ]  Go to page Previous  1 ... 8, 9, 10, 11, 12, 13, 14  Next
Paguo-86PK - XXI BEK 
Author Message
Maniac
User avatar

Joined: 12 Apr 2011 20:43
Posts: 267
Location: Tashkent
Reply with quote
barsik wrote:
Если уж речь в этой теме пошла о полезных доработках ПЗУ РК86, то стОит упомянуть о двух недоработках драйвера клавиатуры.

Драйвер в ПЗУ РК надо чуть изменить, чтобы вводился так называемый "код подчёркивания" (5F), который стандартным драйвером не вводится, но код в ПЗУ знакогенератора есть.
Тaк как код ПРОБЕЛА после всех операций получается 5F и его нужно искусственно приводить к 20, в своём драйвере (пробном, выше) я сделал так, что при нажатии «СС/SHIFT» это преобразованием не происходит и ПРОБЕЛ выдаётся кодом ПОДЧЁРКИВАНИЯ…

В том же КР-03 с МС-7007 функциональных клавиш - пять. И мне было странно видеть в оригинальной клавиатуре четыре функциональные клавиши и дырку, тогда как в ПЗУ их - пять… :surprised:

Все эти дни я возился со своими алгоритмами под вещественную арифметику.
Запарился вдоль и поперёк одним только делением на константу 10 для печати числа и три дня на её отладку убил, так как было концептуальное недопонимание сути.
Только что я победил явные баги и теперь печать дампа F800…FFFF по «G0» практически не просаживает производительность на первый взгляд.
Как уже понятно, я не подглядывал в готовые исходники и шёл своим путём проб и ошибок.
Код вырос до 1 Кб! Но там много мусора и промежуточного кода…

Если в z80 имеется теневая группа регистров, то в i8080 для реализации печати 24-битного числа пришлось здорово попотеть! :esurprised:
Сейчас числа печатаются по битам мантиссы в B:H:L и в C указывается экспонента. Но пока всё не очень проработано и экспонента верно отображается только от 0 до 24, так как я не совсем ещё въехал в тему и не понимаю, как печатать остальные комбинации…
Code:
_C _B_H_L NUMBER
00 FFFFFF +0.9999999
18 FFFFFF +16777215.0
19 FFFFFF ??????? <- здесь следует углубляться в тему
Тот же Бейсик РК использует лишь 16 бит мантиссы… :o

 Умножалка на 10
Code:
;;;;;;;;;;;;;;;;;;;;;;;;;
; A:B:H:L = B:H:L * 10  ;
;;;;;;;;;;;;;;;;;;;;;;;;;
MUL10:  LD      E,B     ;  5
        LD      D,000H  ;  7
        PUSH    HL      ; 11
        PUSH    DE      ; 11
        LD      A,B     ;  5
        EX      DE,HL   ;  4
        ADD     HL,HL   ; 11
        EX      DE,HL   ;  4
        ADD     HL,HL   ; 11
        ADC     A,A     ;  4
        LD      E,A     ;  5
        EX      DE,HL   ;  4
        ADD     HL,HL   ; 11
        EX      DE,HL   ;  4
        ADD     HL,HL   ; 11
        ADC     A,A     ;  4
        LD      E,A     ;  5
        POP     BC      ; 10
        EX      DE,HL   ;  4
        ADD     HL,BC   ; 11
        POP     BC      ; 10
        EX      DE,HL   ;  4
        ADD     HL,BC   ; 11
        ADC     A,A     ;  5
        EX      DE,HL   ;  4
        ADD     HL,HL   ; 11
        EX      DE,HL   ;  4
        ADD     HL,HL   ; 11
        ADC     A,A     ;  4
        LD      B,A     ;  5
        LD      A,D     ;  5
        RET             ; 10    - 226

 Делилка на 10
Code:
;;;;;;;;;;;;;;;;;;;;;;;;;
; A:B:H:L = B:H:L / 10  ;
;;;;;;;;;;;;;;;;;;;;;;;;;
DIV10:  LD      E,014H  ;  7
        LD      A,B     ;  5
        OR      A       ;  4
        JP      NZ,DIV10B;10
        LD      E,00CH  ;  7
        OR      H       ;  4
        JP      NZ,DIV10A;10
        LD      E,004H  ;  7
        LD      B,L     ;  5
        LD      L,H     ;  5
        JP      DIV10B  ; 10
DIV10A: LD      B,H     ;  5
        LD      H,L     ;  5
        LD      L,000H  ;  7
DIV10B: PUSH    BC      ; 11
        PUSH    HL      ; 11
        LD      HL,00000H;10
        LD      D,H     ;  5
        LD      C,H     ;  5
        EX      (SP),HL ; 18    - 86/124/134
DIV10C: EX      (SP),HL ; 18
        ADD     HL,HL   ; 11
        INC     L       ;  5
        EX      (SP),HL ; 18
        LD      A,C     ;  5
        ADC     A,A     ;  4
        LD      C,A     ;  5
        LD      A,B     ;  5
        SUB     0A0H    ;  7
        LD      B,A     ;  5
        LD      A,D     ;  5
        SBC     A,000H  ;  7
        LD      D,A     ;  5
        JP      NC,DIV10D;10
        LD      A,B     ;  5
        ADD     A,0A0H  ;  7
        LD      B,A     ;  5
        LD      A,D     ;  5
        ADC     A,000H  ;  7
        LD      D,A     ;  5
        EX      (SP),HL ; 18
        DEC     L       ;  5
        EX      (SP),HL ; 18    - 110/185
DIV10D: DEC     E       ;  5
        JP      M,DIV10E; 10
        ADD     HL,HL   ; 11
        LD      A,B     ;  5
        ADC     A,A     ;  4
        LD      B,A     ;  5
        LD      A,D     ;  5
        ADC     A,A     ;  4
        AND     001H    ;  7
        LD      D,A     ;  5
        JP      DIV10C  ; 10    - 15/71
DIV10E: LD      A,B     ;  5
        RRCA            ;  4
        RRCA            ;  4
        RRCA            ;  4
        RRCA            ;  4
        LD      B,C     ;  5
        POP     HL      ; 10
        POP     DE      ; 10
        DEC     E       ;  5
        RET             ; 10    - 61 = 561..5315


Attachments:
File comment: Печать дампа недовещественных
PrintReal.zip [814 Bytes]
Downloaded 220 times


Last edited by Paguo-86PK on 04 Mar 2020 05:46, edited 1 time in total.

03 Mar 2020 15:05
Profile WWW
Maniac

Joined: 05 Nov 2008 19:47
Posts: 287
Location: 81.28.208.238
Reply with quote
Вот эта штука должна помочь отцу русской демократии...
http://scicenter.online/kniga-mikroelektronika/programmyi-dlya-mikroprotsessorov-sprav.html


03 Mar 2020 18:24
Profile
Doomed
User avatar

Joined: 19 Feb 2017 03:46
Posts: 583
Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь
Reply with quote
Post 
Paguo-86PK wrote:
сделал, что... при нажатии «СС/SHIFT»... ПРОБЕЛ выдаётся кодом ПОДЧЁРКИВАНИЯ
В версии М3 ОРИОНА для Z80 символ подчёркивания выдаётся по сочетанию <УС>+<пробел>.
Paguo-86PK wrote:
возился со своими алгоритмами под вещественную арифметику... Тот же Бейсик РК использует лишь 16 бит мантиссы
В РК-мониторе не нужны числа с плавающей запятой. Или арифметические подпрограммы для РК-бейсика Вы сразу же включаете в свой ROM-BIOS ? Т.е начали сразу писать и новый РК-бейсик с развитой арифметикой (т.к целочисленная арифметика с числами до +/-32767 почему-то не устраивает)?

В бейсике не нужна очень уж точная арифметика с точностью в 38 десятичных знаков. Очень может быть, что Билл Гейтс ввёл арифметику с плавающей запятой в исходно целочисленный бейсик для Альтаир-8800 как рекламный трюк (якобы с этим бейсиком вы сможете считать свои деньги с нужной точностью). Если это и было надо, то только считать налоги и банковские проценты. Для игр столь точные расчёты не нужны.

В Apple-II тоже вначале был целочисленный бейсик и его всем хватало (подтверждением тому является много игр для Apple-II на целочисленном бейсике). А затем пришёл Билл Гейтс и втюхал им свой бейсик с числами с плавающей запятой, чтобы каждый пользователь Apple-II смог расчитать траекторию как ему умотать с этой планеты. И что, это хоть на грамм улучшило качество игр на бейсике?

Бейсик-интерпретатор и без того предельно тормозной. Зачем тормозить его расчётами с плавающей запятой, что уместны только на супер компьютерах? И синусы для неграфической машины также не нужны. А если бы синусы в графической машине для рисования кругов и были бы нужны, то считать их выгоднее таблично. На РК86 траекторию полёта на Луну Вы будете считать месяц. Компьютеры 50-тых годов с быстродействием 50 тысяч операций в секунду (зато с в несколько раз большей разрядностью) считали это несколько дней.

Когда я делал свой TINY бейсик мне показался мал диапазон двухбайтовых целых чисел и я не напрягаясь просто расширил диапазон чисел до 3 байтов. Этого достаточно для игр и даже для небольших бытовых расчётов (если бейсиком считать деньги, то столько денег, что диапазона 24-х двоичных разрядов не хватит, ни у кого из владельцев РК86 нет). А уж если вдруг неожиданно понадобится рассчитать траекторию полёта на Луну или на Марс, то сейчас можно воспользоваться бейсиком на IBM PC (а если программу расчёта написанную на бейсике скомпилировать с помощью QUICK-бейсика или POWER-бейсика, то время расчёта сократится в 5 раз).
aav8 wrote:
Вот эта штука должна помочь...
Понятно теперь откуда взялся имеющий хождение среди пользователей ОРИОНА (и даже продаваемый частными МП торгующими программами для бытовых ЭВМ) набор подпрограмм для арифметики на процессоре КР580 (что во вложении). Кто-то не поленился набрать эти подпрограммы из этой книги.


Attachments:
ARIFM.rar [34.25 KiB]
Downloaded 240 times
03 Mar 2020 23:54
Profile
Maniac
User avatar

Joined: 12 Apr 2011 20:43
Posts: 267
Location: Tashkent
Reply with quote
barsik wrote:
В РК-мониторе не нужны числа с плавающей запятой.

Вoт сижу и думаю, не переписать ли CONOUT снова с нуля?
Левый-верхний угол задаётся ячейками 7610:7611 и в коде при перемещении влево/вверх нужно считывать ячейки и сравнивать с D:E. Потому-что координаты - абсолютные. А если их сделать относительными, то в любом окне верхний левый угол будет 0,0. Но это нарушит работу F81E-подпрограммы, в которой нужно будет прирастить ячейки 7610:7611 и увеличить её на 7 байтов. А значит - подыскивать другое место размещения…
Но, в таком случае, в самой CONOUT код сократится до «DEC E+RET P» и курсор ВГ75 придётся опять же - приращивать…
barsik wrote:
Или арифметические подпрограммы для РК-бейсика Вы сразу же включаете в свой ROM-BIOS ?

Просто проверяю производительность выводом дампов.
Что интересно «DF800,FFFF» травит дамп 13 секунд, а мой код с 24-битными и запятой - 14 секунд…
Каким образом разница может составлять около 1 секунды‽
(2048 байтов против 512 недовещественных.)
barsik wrote:
Т.е начали сразу писать и новый РК-бейсик с развитой арифметикой (т.к целочисленная арифметика с числами до +/-32767 почему-то не устраивает)?

Когда Вы сказали, что в ассемблере под метку уходит 8 байтов, 6 из которых - символы имени, я понял, что это - не экономично.
Ведь 6×8 = 48 бит - 6 символов по 8 бит, а если перевернуть их как 8×6, получим уже 8 символов метки по 6 бит. То есть, произвести компрессию…
В Бейсике переменная может обозначаться всего двумя символами - 16 бит. Но если кодировать имена символами по 5 бит, получим уже три символа - по схеме 5+6+5. То есть первая и третья могут быть только буквой, а вторая - и цифрой тоже (1…26 - буквы, 27…63 - числа от 0…36). Имя переменной уже до четырёх символов может иметь. Или схему изменить на 5+5+6 - с числом в конце…
А так как оттачивать алгоритмы распаковки/упаковки имён лучше на чём-то дельном, то я решил вещественные числа хранить так.
То есть, 4 байта на имя переменной и 4 байта на вещество. А ошибочные комбинации мантиссы принимать за опцию (строка, массив строк, массив чисел и т.п…).
aav8 wrote:
Вот эта штука должна помочь отцу русской демократии...
Спасибо!
Пока чисто на энтузиазме пытаюсь работать. Интересно прощупать границы своей компетентности… :lol:
barsik wrote:
И синусы для неграфической машины также не нужны.

Когда-то я тоже думал, что синус-косинус есть только в IBM-PC. Но статья в журнале РАДИО открыла мне глаза.
В своё время я над учительницей по математике гордо издевался расчётами синусов на Бейсике РК. :oops: Сама она знала Фортран и не одобряла применения столь мощной (против калькуляторов) техники для решения школьных задач! :mrgreen:
barsik wrote:
А если бы синусы в графической машине для рисования кругов и были бы нужны, то считать их выгоднее таблично.

Вот когда(если) до этого удастся дойти, проверю себя.
barsik wrote:
На РК86 траекторию полёта на Луну Вы будете считать месяц. Компьютеры 50-тых годов с быстродействием 50 тысяч операций в секунду (зато с в несколько раз большей разрядностью) считали это несколько дней.

На одном сайте, где мне пытались помочь с моим «x80», задались вопросом, зачем мне столь мощный восьмибитник?
Я ответил в стиле «Джентльменов удачи» с «ограблением посольства»: Своё государство объявлять буду в ООН и мне нужно соорудить ПВО с собственным машинным кодом, чтобы взломать не могли пару дней… :lol:

Вообще-то, Товарищи, Вы все тут забыли про это: Почему при мыслях модернизации сразу все думают про графику или звук?
Вместе с теми же ВИ53/ВН59 лучше подключить и i8231/i8232 с К512ВИ1.

В тот же IBM-PC этот математический сопроцессор моментально стал стандартом и вклинился в систему команд.
Хотя, знающие люди в курсе, что восемь ESCAPE-кодов в x86 имеются не только для FPU¹, а для любого сопроцессора².
 ЦИТАТА ССЫЛКИ¹
ESC (Escape) The ESC instruction is used as a prefix to the coprocessor instructions. The 8086 processor put the source operand on the data bus but no operation further takes place. The coprocessor continuously examined the data bus content and it is activated by ESC instruction and it reads two operands and thereafter starts execution. The detailed operation is illustrated in the chapter on Coprocessors.

 ЦИТАТА ССЫЛКИ²
58. Instruction Descriptions 58 8086 Microprocessor ESC – Escape This instruction is used to pass instructions to a co-processor, such as the 8087 math processor which shares the address and data bus with 8086. Instructions for the co-processor are represented by a 6-bit code embedded in the escape instruction. As the 8086 fetches instruction bytes, the co-processor also catches these bytes from the data bus and puts them in its queue.


Но промышленность ради рынка начала встраивать именно FPU как единственный сопроцессор и всю концепцию масштабируемости системы команд периферийниками убила!
Хотя, вместе с инструкциями математики могли бы сейчас иметь инструкции графики и звука. А так как Операционка может эмулировать всё, то и звук бы выводился ни через DirectSound, а с помощью перехвата и эмуляции Escape-команд звукового сопроцессора. Которого для x86 никогда не было и уже не будет! :cry:


Last edited by Paguo-86PK on 05 Mar 2020 08:29, edited 4 times in total.



05 Mar 2020 03:53
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Paguo-86PK wrote:
Вместе с теми же ВИ53/ВН59 лучше подключить и i8231/i8232 ...

Мысль хорошая, хотя несколько запоздалая во времени... :-?
Отечественных аналогов этих сопроцессоров, насколько я знаю, не выпускали, но я с
интересом набрал в поисковике "i8231 купить" - результат можете посмотреть сами... :wink:

_________________
iLavr


05 Mar 2020 04:57
Profile
Doomed
User avatar

Joined: 19 Feb 2017 03:46
Posts: 583
Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь
Reply with quote
Post 
Paguo-86PK wrote:
48 бит - 6 символов по 8 бит, а если перевернуть их как 8×6, получим уже 8 символов метки по 6 бит. То есть, произвести компрессию…
Для тормозных 8-ми разрядок эта идея компрессии меток может пригодиться, хотя из-за низкой скорости CPU эта идея вероятно снизит скорость трансляции. Для высоко разрядных скоростных ЭВМ проблема экономии ОЗУ путём ограничения длины меток (так же, как и проблема скорости прогона) вообще не актуальна, т.к там ОЗУ как грязи и потому десяток лишних килобайтов под таблицу меток не приведут к появлению обидного сообщения "OUT OF MEMORY".
Paguo-86PK wrote:
Вoт сижу и думаю, не переписать ли CONOUT снова с нуля?
Всем программистам возможностей CONOUT по выводу символов хватало (это если не считать отсутствия инверсии, псевдографики и КОИ-8). А не хватало программного проигрывания трёхголосной мелодии (управляемой, например, искейп-командой выкинутой на CONOUT, по типу как в ИРИШЕ, что позволяет вывод музыки из ЯВУ).

Это не так уж и сложно написать. Можно с выводом на один общий бит, а проще на три отдельных бита (т.е с аппаратным сложением). На три отдельных бита - проще и громкость намного выше. Т.к когда вывод на один общий разряд порта, приходится выдавать короткие иголки, а при трёх выходных портах - меандры. РК86 тоже может многоголосие, его музыкальная система давала специфическое (т.е слегка хриплое) многоголосие по одному биту и его MUSIC BOX также играл в несколько голосов.
Paguo-86PK wrote:
Почему при мыслях модернизации сразу все думают про графику или звук?
Потому что арифметика с точностью в 100 знаков никому не нужна, а нужна красота - красивая картинка и красивая музыка. Интегралы на РК86 никто считать никогда не планировал и не будет. Быстрая арифметика нужна для графического компьютера, чтобы выводить 3D-графику, а применительно к РК86 даже говорить о потребностях в хорошей арифметике неуместно.

Из всех задач обычных компьютеров, которые с минимальным успехом может решить РК86 - это редактирование текста (для этого ему нужна ОС работающая на массовый привод плюс 3-4 фонта коммутируемые атрибутами). РК86 с небольшими доработками (дисковод, 64К, фонты 8*10, турбо) мог бы стать почти офисным компьютером, аналогом Роботрона-1715 и на нём мог бы даже работать Super Text. Как радиолюбительский компьютер РК годится для управления настольной железной дорогой, мультиметром на 572ПА2, тестером TTL-микросхем, приёма радиолюбительского телетайпа или медленного телевидения и т.п. любительских задач.

На всё остальное РК86 вообще не пригоден. Это именно радиолюбительский компьютер, которому пришлось исполнять роль бытового игрового компьютера. С чем он успешно не справился. И даже хуже - он спровоцировал промышленность на выпуск РК-подобных.


Last edited by barsik on 05 Mar 2020 06:52, edited 1 time in total.



05 Mar 2020 06:33
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post Re:
barsik wrote:
... арифметика с точностью в 100 знаков никому не нужна, ...

Ну это неправда. Мне как раз очень была нужна не только точная но и быстрая арифметика.
Но чего не было - того не было... :cry: Кстати, в некоторых отечественных справочных
источниках сопроцессор для 580ВМ80 упоминается, как если он был, но его не было.
И сопроцессор действительно весьма ускоряет программу с расчетами, хотя убедиться
в этом мне довелось только на 286-й машине...

_________________
iLavr


05 Mar 2020 06:52
Profile
Maniac
User avatar

Joined: 12 Apr 2011 20:43
Posts: 267
Location: Tashkent
Reply with quote
Нарочнo подсчитал количество тактов, затрачиваемых COUT.
Получается, примерно:
  • Нормальный вывод очередного символа в строку - 615 тактов
  • Вывод символа с переводом на следующую строку - от 688 до 4213 тактов
  • Обыкновенный возврат курсора - от 604 до 4129 тактов
  • Вывод символа с прокруткой - от 77156 до 80681 такта
Тем самым, простой построчный вывод дампа с прокруткой затрачивает до 129881 такта :exclaim:
Тем самым, нельзя просто так проверять производительность печати вещественных чисел в режиме прокрутки экрана, так как она перекроет прожорливостью любые вычисления :oops:
А так, вывод 80 символов - 49200 такта + возврат каретки ≈ 53329 тактов на строку.
Вроде бы по мелочам, а печать одной строчки не так уж мало жрёт: При частоте 1,78 ≈ до 33 раз смещает строки.
То есть, штатное заполнение всего экрана без прокрутки - практически 1 секунда! :o
Унифицировал прокрутку, наконец-то: Теперь она работает и вверх, и вниз. Но на кадре 64×25 жрёт до 129429 тактов (против 76468 из подсчётов выше). И при частоте 1,78 ≈ лишь до 14 раз строки успевает сместить… :esurprised:
(За всё нужно платить!)
barsik wrote:
Т.е начали сразу писать и новый РК-бейсик с развитой арифметикой (т.к целочисленная арифметика с числами до +/-32767 почему-то не устраивает)?
Читaл заметки счастливчиков с ZX-Spectrum-128 про шаманство доступа ко всем 128 Кб.
И подумал сейчас, что тот же «POKE 65536,0» мог бы работать как «POKE 0,0», но уже в страницу #1.
Тем самым, если начну городить свой Бейсик, то «POKE/PEEK» будут записывать старшие 8 бит адреса в порт клавиатуры с расчётом, что A000…A7FF работает в страничном режиме…
Потому, ±32767 уже не хватит.
(В том же GW-Basic под XT костыль был - DEF SEG…)

Дa, пользовательская директива «J» здорово упрощает процесс сравнения результатов.
Сейчас сравнил данные из справочника с результатом своего алгоритма вывода числа: Где-то совпадает один-в-один. Где-то - ошибка из-за отсутствия округления…
А ещё и поддержку отрицательной экспоненты нужно вводить…

Но, сам факт, что ряд данных из книги отображает у меня верно - уже удивительно!
Выходит, мой алгоритм с потолка не такой уж кривой!
То есть, сама моя идея 6 бит экспоненты и 24 бит мантиссы - стандарт! :surprised:


Attachments:
File comment: Директива «J» на службе в отладке!
TheReals.jpeg
TheReals.jpeg [ 190.66 KiB | Viewed 6338 times ]
05 Mar 2020 08:27
Profile WWW
Doomed
User avatar

Joined: 19 Feb 2017 03:46
Posts: 583
Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь
Reply with quote
Paguo-86PK wrote:
тот же «POKE 65536,0» мог бы работать как «POKE 0,0», но уже в страницу #1.
Зачем такие сложности? В РК-бейсике есть возможность вызова подпрограмм (функцией USR, см.здесь), - потому достаточно ввести в ПЗУ F800 п/п-ммы F836 и F839 (аналогичные таким же подпрограммам ПЗУ ОРИОНА), позволяющие читать/писать байты в запасных банках памяти.

В традиционном бейсике ввести оператор "POKE 65536,0" вряд-ли получится, т.к операнд у оператора POKE должен быть целочисленным в интервале от -32768 до +32767. А если переделать оператор так, чтобы операнд стал числом с плавающей точкой, то это резко тормознёт. Не помню про РК-бейсик, но в профессиональных бейсиках можно вводить и HEX-числа с префиксом &H (а в некоторых самодельных бейсиках - для этих же целей используют в качестве префикса только &).

И при цельнобанковой коммутации Вы никак бейсиком загруженным в ОЗУ не залезете в другую банку, - это можно сделать только подпрограммой в ПЗУ (или расположенной в некоммутируемом участке ОЗУ). А вот, если добавлять в РК дополнительное ОЗУ не цельно-банково (применительно к РК это значит страницами по 32 кб), а более грамотно, т.е в 8-ми килобайтовом окне A000...BFFF, то ничто не помешает Вам включить в этом окне нужный кусок дополнительной памяти и пикапокить его из обычного бейсика.

А если надо лазить в доп.ОЗУ новым самодельным бейсиком, то можно придумать операторы XPOKE/XPEEK у которых будет дополнительный операнд - номер страницы доп.ОЗУ (в 8 кб), а адрес ячейки будет в интервале 0...8191. Кстати, считается, что сделать свой самодельный бейсик лучше, чем бейсик Билла Гейтса (от которого и происходят бейсики РК86), обойдётся разработчику слишком дорого по трудозатратам.
Paguo-86PK wrote:
Читaл заметки счастливчиков с ZX-Spectrum-128 про шаманство доступа ко всем 128 Кб
Там как раз доступ к доп.ОЗУ удобный и понятный, без всякого шаманства и, как видите, даже в Spectrum-128 доступ к доп.ОЗУ сделали в окне, т.к любому ясно, что это удобнее программисту.
Paguo-86PK wrote:
начну городить свой Бейсик
За написание и популяризацию бейсиков-интерпретаторов надо отрывать руки. Тем более, что Бейсиков и без того хватает, их достаточно сделали в 1975...1980, когда они имели хоть какой-то смысл. Бейсик запрещён к преподаванию в школах и ВУЗ-ах всех стран (и уже давно заменён Паскалем), т.к научно доказано, что Бейсик наносит непоправимый вред, разрушая формирования правильного программного мышления у людей. Было бы разумно даже ввести уголовное наказание за пропаганду бейсика.

Хотя у интерпретатора есть одно полезное свойство - он удобен в начала программирования новичком, т.к он по сути IDE. Если уж так хочется написать интерпретатор, то было бы интереснее, если бы Вы взялись вместо написания никому ненужного интерпретатора Бейсика за написание интерпретатора Паскаля (которые для PC уже делали).

Для РК речь конечно о урезанной версии Паскаля, что-то вроде Tiny Pascal (если не хватит 29 кб основного ОЗУ, то можно использовать и дополнительное в 1 мб прокачиваемое в окне A000...BFFF). Ясно, что интерпретатор это не конечный инструмент разработчика (окончательную версию надо компилировать). Главное то, что интерпретатор Паскаля полезен для облегчения вхождения в программирование для 8-ми разрядок на Паскале новичкам.

Кстати, первые версии Паскаля, популярные до конца 70-тых годов (в том числе и Паскаль для Apple-II, что немало способствовала успеху этого компьютера), - были как раз наполовину интерпретаторами. В отличие от бейсика они интерпретировали не сам исходник, а промежуточный P-код. Использование P-кода якобы давало независимость программ от платформы. Когда наконец выяснилось, что программы из под компиляторов транслирующих прямо в маш.код работают намного быстрее, а идея совместимости это вообще глупость (т.к железо у всех машин того времени было разное), то компиляторы транслирующие в промежуточный код для 8-ми разрядок быстро исчезли. И лишь когда в середине 90-тых годов компьютерное железо стало единым во всём мире (т.к PC-совместимое железо уничтожило все конкурирующие платформы) к идее p-кода вернулись и применили её в Python, JVA и VB.

Любители писали и даже сейчас пишут интерпретаторы Паскаля, но, к сожалению, лишь для PC (причём это даже не очень надо, т.к для PC есть компиляторы Паскаля с IDE, что в использовании ничем не отличаются от интерпретатора). Но никто не делает интерпретаторы Паскаля для компьютеров на КР580. А как раз для Паскаля под КР580 пока нет среды IDE потому такой интерпретатор Паскаля имеет смысл.

Уже многие понимают, что Паскаль это самый полезный сейчас инструмент для ретро программиста любителя. Давно пора прекратить мышиную возню с сильно трудозатратным ассемблером и начать использовать для программирования нормальные инструменты. За то же время, что некоторые люди непродуктивно растрачивают на программирование на ассемблере, на Паскале они могли бы написать для РК86 несколько уровней "DOOM"-а или закончить писать "Принца Персии".


06 Mar 2020 06:19
Profile
Doomed
User avatar

Joined: 19 Feb 2017 03:46
Posts: 583
Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь
Reply with quote
.
Автор темы продолжает разрабатывать вариант ПЗУ РК86 с поддержкой окон с рамками так и не решив двух главных проблем полностью мешающих этому. Т.е по-прежнему не решена проблема отсутствия нормальных рамок, которые необходимы для обрамления окон. Во-первых, символы для рисования рамок (даже если бы они были в фонте) выводятся на РК с вертикальными разрывами в 2 линии растра, т.е пунктирно. А во-вторых, - самих символов для рисования рамок в РК нет.

В отсутствии нужных символов вина лежит в первую очередь на авторах популярных эмуляторов. Получился замкнутый круг, - сейчас программисты для РК не могут писать программы с использованием второго (дополнительного) фонта. В котором могут быть символы для рисования рамок, КОИ-8 символы (и другие полезности), а авторы эмуляторов отказываются вводить эмуляцию программного (или хотя бы тумблером) включения дополнительного фонта, пока не появится куча программ это использующих.

Пока даже в реальном РК86 можно поиметь рамки только так, как это делали в старину авторы статей о дополнительных фонтах в журнале "Радио" в конце 80-тых годов, - путём установки большого тумблера переключающего адрес А10 на ПЗУ РФ2 знакогенератора. Т.о, хотя они могли бы без всяких затрат существенно увеличить возможности РК, атрибуты ВГ75 полностью и глупо впустую пропали. За 35 лет никто их так и не использовал (наличие пары цветных игр это исключение, да и то они из 2010-х годов).

Т.к оригинальная эркашная матричная псевдо графика РК автором темы не используется, то что мешает ему в файлах фонтов в эмуляторах заменить графику неиспользуемых символов с кодами 01...1F на символы для рисования рамок. Считая, что те кто захочет посмотреть в реале применит большой тумблер для включения такого фонта допрошитого в неиспользуемую половину ПЗУ знакогенератора. Тогда хотя-бы иллюстрации скриншотами с окнами в этой теме выглядели бы прилично.

Т.о хотя-бы проблему рамок на этапе разработки можно решить. Но гораздо хуже обстоит дело с вертикальными разрывами в окнах. Без апп.доработок это решается лишь установкой высоты знакомест в 8 линий вместо 10. Но увы, для системного ПЗУ такой вариант не подходит, т.к при этом увеличившийся с 30 до 38 строк размер экрана затирает рабочие ячейки подпрограмм ПЗУ F800 и, тогда, естественно, вообще всё перестаёт работать.

Частично эту проблему программно решил vinxru за счёт использования встроенных команд (стоп-ПДП и конец строки) и сокращения числа строк с 39 до 37 (увеличив этим частоту кадров). Кстати, метод vinxru нарушает совместимость для игр, - экранные позиции изменяются. Т.е записав символ в ячейку 77C2, на экране он не только не окажется в верхнем левом углу экрана, но главное, он не попадёт на начало другой строки. Это имеет следствием, что используя такой режим для системных программ и монитора, перед запуском старой игры надо включать оригинальный видео-режим 64*25. В то время как при обсуждаемом ниже режиме, игра на 25 строк видна и в режиме 28-ми строк (хотя и сдвинуто вниз по вертикали).

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

Имею в виду сокращение высоты знакоместа с 10 до 9. Тогда в экран влезут, в смысле станут видимыми 28 строк. На самом деле даже 29 строк. Но нам хватит 28 строк (т.к под 29 видимых строк может не хватить места в доступном ОЗУ 7633...7FFF). Но 29 видимых строк точно можно иметь, если часть вертикального бордюра формировать аппаратно (см.ниже) удлинением КСИ до 2-х (или даже 3-х) периодов вывода текстовых строк. Что нарушает нормы на регенерацию ОЗУ, но может сработать.

Уточняю терминологию для тех, кто не очень в курсе: строчный период - это 64 мкс - период вывода линии растра, а период вывода текстовой строки - это 10*64 мкс, т.к в строке 10 (или 9 или 8 ) линий.

 
.
Даже на кинескопных телевизорах 29*9= 261 линии растра вполне видны (хотя возможно придётся отцентровать растр подстройкой). Все современные плоские телевизоры отображают 275 линий (а некоторые и более 280). Кстати, интересно, что если просто тупо увеличить кварц на ~10% (и, если синхронизация сорвётся, то соответственно подстроив частоты кадров и строк), то растр на экране сжимается по обоим осям и можно на кинескопном телевизоре увидеть больше линий, чем со стандартным сигналом.
.

Итак, у нас есть под экран ОЗУ 7633...7FFF. Буфер команд монитора и стек монитора, естественно, нет причин размещать выше 7600, на чём для нужд экрана освобождается 156 ячеек. Что удивительно удачно совпало, т.к две строки РК как раз занимают 78*2= 156 ячеек. Т.о даже не меняя строковый шаг в этом ОЗУ умещается 32 строки. А изменив строковый шаг с 78 на 76, - влезает ровно 33 строки.

Сохранив строчный период в стандартные 64 мкс, строковый шаг легко изменить, если программно задать время гашения по строкам (в РК это формирует ССИ) не в 6 знакомест, а в 8 знакомест. Если от этого синхронизация страдает, то число байтов на одну строку придётся выигрывать за счёт гашения по кадрам, увеличив КСИ до 2-х строк, что в свою очередь может сгубить регенерацию.

В принципе, можно наплевать на точное соблюдение строчного периода и задать шаг по строкам 76 (вместо 78) не выравнивая строчный период соответственным (на 2) увеличением длительности гашения по строкам. Тогда частота строк будет не 15.625 КГЦ, а выше на 1.5 процента. Наверное телевизоры имеют достаточную для этого полосу синхронизации.

33 строки это сумма числа видимых строк и числа строк затрачиваемых на программный вертикальный бордюр. В режиме с высотой знакомест в 10 линий на программный бордюр тратится 5 строк (три сверху и две снизу). Соотвественно при высоте знакоместа в 9 линий тратя те же 5 строк на вертикальный бордюр и уменьшив строковый шаг с 78 на 76, мы имеем видимыми 33-5= 29 строк. Или не меняя строковый шаг, - имеем 32-5= 28 видимых строк. 28 строк дают 28*9= 252 видимых линии растра, что прекрасно отображал даже древний советский телевизор.

Чтобы при высоте знакоместа в 9 линий соблюсти ТВ-стандарт, период кадра должен длиться время за которое выводятся 312 линий растра. Т.о полное число строк д.быть 312:9= ~34. ВГ75 в схеме РК добавляет ещё одну строку на обратный ход луча, что в схеме РК формирует КСИ. Таким образом при 33 строках в ОЗУ и одной строке на обр.ход по кадрам как раз и получаются требуемые 34 строки.

Если же место в ОЗУ под 33 строки не удастся получить, т.е не удастся сократить строчный шаг до 76 и придётся применять стандартные строки длиной по 78 байтов, отчего их в ОЗУ уместится всего 32, то всего будет полные 32+1= 33 строки, а не требуемые 34, отчего частота кадров повысится. Возникает вопрос, не нарушит ли это синхронизацию?

Как раз опыты с РК-режимами в 50 отображаемых строк (когда частота кадров задирается аж до 61 ГЦ) чётко показали, что современные телевизоры нормально синхронизируются при повышенной частоте кадров превышающей стандартные 50 ГЦ. Если телевизор держит 61 ГЦ, то в обсуждаемом режиме (т.е при 33-х строках высотой в 9 линий) синхронизация по кадрам точно не сорвётся. Тогда кадровый период: 33*9*64= 19 МСЕК, что соответствует частоте кадров 52.6 ГЦ. Это современный телевизор "переварит".

Но возможно можно, не потеряв регенерацию, увеличить КСИ до 2-х строк и получить 33+2= 35 полных строк и 29 видимых строк (при общем числе строк в 35 частота кадров понизится до 48 ГЦ). А главное, при КСИ в две текстовые строки даже всего при 32-х строках хранимых в ОЗУ в сумме получаются нужные 34 строки и, т.о для выигрыша в ОЗУ места для ещё одной строки, уже не требуется сокращать строчный шаг до 76.

Те опыты, что автор этой темы как раз сейчас проводит на форуме ZX-PK.ru и добился, что на РК есть видимая картинка при увеличении числа строк отданных на эркашный КСИ, - дают надежду. В режиме 25-ти видимых строк на КСИ выделяется одна строка, причём и её даже много, т.к тогда КСИ длится 64*10= 640 мкс, что в разы больше ТВ-стандарта на длительность КСИ.

При задании числа текстовых строк на гашение по кадрам в две (или даже в три), длительность КСИ ещё более возрастёт, а растр сдвинется по вертикали нарушив центровку. Чтобы этого не происходило надо КСИ аппаратно укоротить до требований стандарта на длительность КСИ. Что одновременно отцентрует новый растр с бОльшим числом видимых строк.

Т.о при двух (или даже 3-х строках) отдаваемых на кадровое гашение остаётся решить проблему как сократить длительность КСИ, которая при отведении на обр.ход луча по кадрам вместо одной строки двух (или даже трёх) увеличится до 2*9= 18 (или даже 3*9= 27) длительностей строчного периода, т.е до 64*18= 1152 мкс (или 64*27= 1728 мкс), хотя в базовом режиме при одной строке отдаваемой на КСИ его длительность - лишь 640 мкс.

Как хорошо известно всем изучавшим в ПТУ теорию линейных цепей, для сокращения длины импульса достаточно применить CR цепочку с диодом. Естественно, подобрав постоянную времени цепочки так, чтобы из переднего фронта сигнала формировался короткий импульс точно соответствующий стандарту телевидения на длину КСИ (не помню сейчас точно, но это чуть более 100 мкс). Диод срезает просечку при заднем фронте долгого КСИ.

А более красиво приведение КСИ к стандарту можно сделать имея одну дополнительную и не очень дорогую микросхему 155ТМ2 (это кстати, как недавно выяснилось, и без того надо делать для некоторых плоских телевизоров).

Это лишь теоретические рассуждения, без проверки в реале. Но они основаны на реальных цифрах и возможностях ВГ75 и обычно подобные расчёты оправдываются. Потому у меня нет сомнений, что можно поиметь для системного режима монитора экран, по крайней мере, в 28 строк, с нормальной синхронизацией и полным сохранением рабочих ячеек ПЗУ и, соответственно, сохранением работоспособности стандартных подпрограмм РК86 и совместимости с системным ПО.

Единственным возможным препятствием ранее считалось, что отведение двух и тем более трёх строк под КСИ погубит регенерацию ОЗУ, отчего аппаратно совместимый режим в 28 строк с полным сохранением ТВ-норм реализУем только на статике или при замене 565РУ3 на 565РУ7 (а без этого вызовет заметное отклонение от ТВ стандарта, ухудшение синхронизации или по строкам или по кадрам, - как показано выше, места для одной строки в ОЗУ не хватает и выиграть его можно только изменив ССИ или КСИ). У РУ7 вдвое больший максимально допустимый период регенерации в 4 мс. А SIMM-30 пойдут ещё лучше, - у них макс.период регенерации аж 8 мс.

Потому в ходе опытов с настройкой режимов ВГ75, которые автор темы сейчас проводит на ZX-PK.ru, хотелось бы выяснить нарушается ли регенерация при 2-х...4-х строках отводимых на КСИ. И нарушается ли синхронизация, если увеличить число знакомест отдаваемых на ССИ с 6 до 8 при сокращении строчного шага с 78 до 76, а также и при стандартном базовом ССИ в 6 знакомест, но при шаге в 76 байтов. Увы, сам я сейчас это не могу сделать, т.к программы для РК86 я прогоняю на скоростном ОРИОНЕ с программным эмулятором (а те, что не идут или им не хватает скорости - с визуализатором).

А при статическом ОЗУ можно получить совместимый режим даже со строками высотой в 8 линий с рамками без разрывов

В этом случае также нужна доработка по укорочению КСИ. При этом 33 строки хранятся в ОЗУ, из них 30 видимых, 3 строки из ОЗУ под нижний бордюр и 4 строки не требующих ОЗУ задаются на гашение по кадрам, - из них по переднему фронту этого сигнала гашения аппаратно (с помощью 155ТМ2 или CR-цепочкой) формируется правильный по длительности КСИ, а за оставшиеся 3...3.5 длительностей вывода строки (8 линий строки выводятся за 8*64 мкс) формируется верхний бордюр. Полное число строк 33+4= 37. Частота кадров при полных 37 строках получается 52.8 ГЦ, что современный телевизор переварит.

Увы, за 4 строки гашения отображения данные в динамическом ОЗУ точно сдохнут, т.е такой режим только для статики и совсем непригоден для основной массы пользователей, которые используют оригинальные платы, а не новодельные варианты плат РК на статике.


16 Mar 2020 05:49
Profile
Maniac
User avatar

Joined: 12 Apr 2011 20:43
Posts: 267
Location: Tashkent
Reply with quote
barsik wrote:
Зачем такие сложности? В РК-бейсике есть возможность вызова подпрограмм (функцией USR, см.здесь), - потому достаточно ввести в ПЗУ F800 п/п-ммы F836 и F839 (аналогичные таким же подпрограммам ПЗУ ОРИОНА), позволяющие читать/писать байты в запасных банках памяти.
Этoт «USR» не даёт возможности передавать параметры непосредственно в регистрах, что требует ПОКить уйму непонятного кода.
barsik wrote:
В традиционном бейсике ввести оператор "POKE 65536,0" вряд-ли получится, т.к операнд у оператора POKE должен быть целочисленным в интервале от -32768 до +32767. А если переделать оператор так, чтобы операнд стал числом с плавающей точкой, то это резко тормознёт.
По-моему, там должны иметься механизмы проверки типа аргумента (иначе, как бы PRINT/INPUT работали бы?). Хотя, лет 25 тому назад в «Бейсик-Микрон» я как-то вносил изменения в оператор «LINE» с выводом текста, вместо графики (для игры «Поле Чудес»), но не помню где и как…
Помню лишь восторг, когда синусом/косинусом удалось через LINE вывести строки текста под разными углами, а не гадким и противным черепашьим циклом в листинге…
Тем самым, для «межбанковских транзакций» POKE/PEEK могли бы жрать «пин-код» банковской ячейки вещественным числом. И просадки по скорости будут оправданы, и штатная скорость сохранится при стандартном обращении к памяти.
barsik wrote:
И при цельнобанковой коммутации Вы никак бейсиком загруженным в ОЗУ не залезете в другую банку, - это можно сделать только подпрограммой в ПЗУ (или расположенной в некоммутируемом участке ОЗУ).
Для этого можно использовать:
  • Любой из остальных каналов ПДП
  • Префикс «ld a,a»
  • HLT - она где-нибудь используется в РК? В ZX она ждёт конца кадра
  • Особую зону, где однобайтовые операции могут читать/писать данные других банков (например, ячейки 7800…7FFF), но нормальный код там никогда не отрабатывается (в самом начале темы я писал: При «CALL 08000H» отваливается D20; От «CALL 0A000H» отваливается D14; От «CALL 0C000H» отваливается ВГ75)¹
Quote:
¹Повторю/проясню:
  • При классической дешифрации работает теневой банк в 64 Кб на запись. То есть, запись в ячейку 8000 пишет байт и в ППА клавиатуры, и в теневой банк
  • Пишем «8004 C9» (код RET) и сразу выполняем «CALL 08004H». Так как процессор обратился к ППА с активным сигналом цикла M1, схема отключает ППА от этого региона памяти (8004…9FFF) и подключает тот теневой банк в 64 Кб. А так как мы предусмотрительно записали «RET» туда, управление аккуратно вернётся к нам, но добавит 8 Кб ОЗУ по 8004…9FFF
  • Таким же образом ремаппим D14 и ВГ75, получая ОЗУ по A004…BFFF, C002…DFFF
  • Получаем 56 Кб ОЗУ, но порты D14, D20 и ВГ75 уже занимают не 8 Кб, а свои законные 4 байта
  • То есть, по «D8000,80FF» выйдет не 256 ячеек ППА клавиатуры, а 4 ячейки ППА и 252 ячейки ОЗУ. ППА доступен только по 8000…8003
Думаю, мою идею Вы уже поняли: Дополнительная память будет +24 Кб, но ячейки 8000…8003, A000…A003, C000…C001 будут заняты чем надо. Это РК-совместимый режим +24…
А вот если проделать трюки «CALL 8000», «CALL A000», «CALL C000» - включается РК-несовместимый режим +32 Кб. То есть все 64 Кб ОЗУ, а ячейки FF00…FFFF при M1 через CALL переключает ОЗУ на верхние 64 Кб.
То есть, ОЗУ - 128 Кб. В верхние 64 Кб записываем БСВВ, а нижние - пользователю. Под БСВВ ППА/ПДП/ВГ75 на местах (10 ячеек), а в нижних - только 64 Кб ОЗУ. Никаких ППА…

(Вы просто проигнорировали мой эскиз в начале темы… А в нём - свои плюшки!)

barsik wrote:
А вот, если добавлять в РК дополнительное ОЗУ не цельно-банково (применительно к РК это значит страницами по 32 кб), а более грамотно, т.е в 8-ми килобайтовом окне A000...BFFF, то ничто не помешает Вам включить в этом окне нужный кусок дополнительной памяти и пикапокить его из обычного бейсика.
Я за вариант в 64 Кб и тема тем и начиналась…
barsik wrote:
А если надо лазить в доп.ОЗУ новым самодельным бейсиком, то можно придумать операторы XPOKE/XPEEK у которых будет дополнительный операнд - номер страницы доп.ОЗУ (в 8 кб), а адрес ячейки будет в интервале 0...8191.
Что потребует введения новых токенов, которые будут использоваться крайне редко!
Уж лучше тогда к PEEK/POKE добавить дополнительные опциональные аргументы…
barsik wrote:
Бейсик запрещён к преподаванию в школах и ВУЗ-ах всех стран (и уже давно заменён Паскалем), т.к научно доказано, что Бейсик наносит непоправимый вред, разрушая формирования правильного программного мышления у людей…
Хотя у интерпретатора есть одно полезное свойство - он удобен в начала программирования новичком, т.к он по сути IDE.
Бейсик нужен тем, кто уже освоил Паскаль и Си, чтобы на незнакомой архитектуре быстренько хоть что-то сделать (например, тут или тут).
Сам я, после «MS Visual Basic» годами переходил на «Visual C» и Win-API, с осознанием, что VB изуродовал всё понимание Windows в принципе!
barsik wrote:
Если уж так хочется написать интерпретатор…
Мне бы МОНИТОР свой закончить! :mrgreen:
Застрял на подпрограммах клавиатуры и магнитофона.
Хотелось бы ввести поддержку разных раскладок. Подгружаемых…
Застрял концептуально, так как с ПДП не разобрался (выше писал: нужно совмещать отключение ПДП в подпрограммах магнитофона и восстанавливать в опросе клавиатуры и ещё унифицировать саму подпрограмму F82D).
Есть идея использовать регистры неиспользуемых каналов ПДП как служебные рабочие ячейки Монитора для хранения данных (начало экрана, формат экрана, раскладка клавиатуры и т.п…) без запуска самих циклов ПДП. Но ПДП для чтения никак не доступен без доработки схемы РК.

Сейчас доработал Монитор так, чтобы холодный старт происходил прямо в директиве отладки с сохранением всех регистров (навеяло отсюда)…
Тем самым, это ещё один весомый аргумент от меня в пользу того, что встроенные отладочные средства в Мониторе нужны!
Все директивы восстановил - «L»/«M»/«D» ссылаются на один и тот же код. Это устраняет путаницу и необходимость к дополнительному пояснению. Пользователь ими научится пользоваться стандартной документацией РК.
Директива «X» без аргументов работает как та же самая. А с аргументами - прыгает на адрес 7650.
Директива «U» и все остальные - выбрасывает в E000 и эмулятор переходит в DOS…
Очистка экрана заносит код F3 в адрес 7FF3 - навеяло отсюда, как Вы уже заметили.
Однако, в моём «оконном варианте» это сделать было крайне сложно и пришлось тупо вызывать код директивы «F76D0,7FF3,00» из недр COUT. Тем самым, экран гарантировано должен теперь стоять на месте.
barsik wrote:
Уже многие понимают, что Паскаль это самый полезный сейчас инструмент для ретро программиста любителя…
Для Больших ЭВМ (что на столах/в карманах каждого) Паскаль (Дельфи) - зло несусветное!
Для микро-ЭВМ же Паскаль - необходим, как никогда. Это я только недавно стал понимать!
barsik wrote:
Автор темы продолжает разрабатывать вариант ПЗУ РК86 с поддержкой окон с рамками так и не решив двух главных проблем полностью мешающих этому. Т.е по-прежнему не решена проблема отсутствия нормальных рамок, которые необходимы для обрамления окон.
Это вопрос эстетики и пиксель-арта, на что, в частности, в игровой индустрии выделяется штат художников. :mrgreen:
Я никаким боком не художник.
Хотя, давно нарисовал ПЗУ знакогенератора, где коды 08/0A/0C/0D/18/19/1A/1F и реализуют псевдографику в три бита: Вместо блоков 2×2 блок 3×1. И в режиме 78×64 можно рисовать 234×64.
barsik wrote:
Во-первых, символы для рисования рамок (даже если бы они были в фонте) выводятся на РК с вертикальными разрывами в 2 линии растра, т.е пунктирно. А во-вторых, - самих символов для рисования рамок в РК нет.
Для меня главное - код. А для рамок коды 1B/1C вполне годятся, если устранить разрывы строк…
Но ВГ75 сама имеет резерв кодов C0…EF под некие рамки и схемы с логикой/ПЗУ под это дело, кажется Вы, выкладывали где-то…
barsik wrote:
В отсутствии нужных символов вина лежит в первую очередь на авторах популярных эмуляторов.
Согласен. Нету механизмов более тонкой и глубокой настройки:
  • Переназначения каналов ПДП
  • Периферии на D14
  • Симуляции краха динамического ОЗУ
barsik wrote:
Пока даже в реальном РК86 можно поиметь рамки только так, как это делали в старину авторы статей о дополнительных фонтах в журнале "Радио" в конце 80-тых годов, - путём установки большого тумблера переключающего адрес А10 на ПЗУ РФ2 знакогенератора.
Была скандальная статья в журнале РАДИО с ПДУ телевизора на ниточках.
Тумблер - для умельцев с поверхностными знаниями теории программирования. Для гуру - атрибуты ВГ75 с режимом «непрозрачных атрибутов» вполне годится: И ПДП-цикл не сорвётся, и пробел на месте атрибута умело использовать можно…
barsik wrote:
Тогда хотя-бы иллюстрации скриншотами с окнами в этой теме выглядели бы прилично.
Я курсы маркетолога не посещал! :lol:
Я занят кодом, а не сверкающими фантиками… :roll:
barsik wrote:
Т.о хотя-бы проблему рамок на этапе разработки можно решить. Но гораздо хуже обстоит дело с вертикальными разрывами в окнах.
… … …
Частично эту проблему программно решил vinxru за счёт использования встроенных команд (стоп-ПДП и конец строки) и сокращения числа строк с 39 до 37 (увеличив этим частоту кадров). Кстати, метод vinxru нарушает совместимость для игр, - экранные позиции изменяются.
Куча подводных камней и нерешённых проблем.
Поэтому сейчас я это не рассматриваю…
barsik wrote:
Те опыты, что автор этой темы как раз сейчас проводит на форуме ZX-PK.ru и добился
Проводил не я… И ничего не добились… :roll:
barsik wrote:
Единственным возможным препятствием ранее считалось, что отведение двух и тем более трёх строк под КСИ погубит регенерацию ОЗУ…
Для этого и годится мой осмеянный «ПСИХ» и его предшественник - «Psi-Detector», без которого не было бы ПСИХа как такового… :idea:
barsik wrote:
Потому в ходе опытов с настройкой режимов ВГ75, которые автор темы сейчас проводит на ZX-PK.ru…
Проводил вслепую и чужими руками…
barsik wrote:
хотелось бы выяснить нарушается ли регенерация при 2-х...4-х строках отводимых на КСИ. И нарушается ли синхронизация, если увеличить число знакомест отдаваемых на ССИ с 6 до 8 при сокращении строчного шага с 78 до 76, а также и при стандартном базовом ССИ в 6 знакомест, но при шаге в 76 байтов.
Самому интересно.
Потому нужна версия уже с предустановленными пресетами по «Ф1»…«Ф5», чтобы не парить пользователя.
А на это требуется стимул. А так как в той теме всё затихло, то и доработку утилиты я заморозил.
(Руки не доходят до своего КР-03, так как мало его достать из шкафа. Нужно переходники ещё спаять для загрузки файлов, к карте захвата видео и БП подготовить!)
barsik wrote:
Увы, за 4 строки гашения отображения данные в динамическом ОЗУ точно сдохнут, т.е такой режим только для статики и совсем непригоден для основной массы пользователей, которые используют оригинальные платы, а не новодельные варианты плат РК на статике.
Вот видите!
Любопытство всё же заставляет смотреть в сторону классического РК, так как регенерация ОЗУ - процесс ближе всего к физическому. А управляемым он может быть только в РК! :lol:

Есть предложение: Подготовьте мне разные настройки ВГ75/ВТ57 под мою утилиту и под экран в нижней половине (чтобы не затирать рабочие ячейки Монитора) - 3000…3FFF…
Экран залью шашечками…
(Настройки - вариантов 4, включая критические для осыпания регенерации ОЗУ.)
Я их вобью в код и попрошу проверить…
(Ниже - Adjust75 с предустановками по Ф1…Ф5 и скрытый тест по «Tab» (глючит местами, экран дрожит и не пойму почему…)
Самому лень сейчас математикой заниматься (по-моему, на ногах переболел Коронычем ещё в январе…Image)

P.S.: Прикрепил очередной вариант Монитора с мелкими доработками.
(F3 по 7FF3, холодный старт в «X-зоне», пользовательская директива через «X<аргумент1>…<аргумент4>» (работает после подгрузки «Dir_Jay»), алиасы «D»/«L»/«M»…)
(«Adjust75» потребовал концентрации и свои Монитор/Калькуляцию я сбился делать…)


Attachments:
File comment: Настройка ВГ75 V1.02
Adjust75.zip [1.14 KiB]
Downloaded 232 times
File comment: Промежуточная версия Монитора
MediumVersion.zip [2.02 KiB]
Downloaded 240 times


Last edited by Paguo-86PK on 19 Mar 2020 05:22, edited 1 time in total.

17 Mar 2020 23:50
Profile WWW
Doomed
User avatar

Joined: 19 Feb 2017 03:46
Posts: 583
Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь
Reply with quote
Post 
Paguo-86PK wrote:
по-моему, на ногах переболел Коронычем ещё в январе…
Это вряд-ли. В январе эта зараза ещё не вышла за пределы Уханя. Это был грипп или простуда. Если бы это было не так, Вы бы заметили, что люди из вашего окружения вдруг начали попадать в больницу и даже умирать.
Paguo-86PK wrote:
«USR» не даёт возможности передавать параметры непосредственно в регистрах, что требует ПОК-ить уйму непонятного кода.
Чего тут непонятного? Если надо передавать данное в ассемблерную подпрограмму, то с помощью POKE кладём данное в ячейку из которой ассемблерная процедура его возъмёт. А возврат одного данного из ассемблерной подпрограммы USR поддерживает, т.к это функция. И почему уйма? Сколько передаваемых параметров, столько и POKE. А если поднимается вопрос скорости, то даже упоминать бейсик неуместно. В Паскале, Си и PL/M при вызове внешних процедур/функций параметры передаются в оговоренных для данного компилятора регистрах и стеке.

В бейсике-интерпретаторе другая проблема, - как разместить ассемблерный код в ОЗУ. Это делают с помощью операторов DATA, READ и программной перегрузки кода под вершину ОЗУ или в какую-либо длинную строчную переменную. После чего подпрограмма в маш.кодах вызывается оператором USR. Делая свой бейсик несложно ввести оператор CODE, который похож на DATA, только числа задаются в HEX-виде (отпадает префикс &H) и оператор CODE сам загружает код из бейсиковой строки на текущий адрес размещения, исходно заданный ранее оператором ORG.
Paguo-86PK wrote:
порты... занимают не 8 Кб, а свои законные 4 байта
После этого команды IN/OUT перестанут попадать в порты. Кстати, ПДП занимает не 4, а 9 адресов. Если открывать ОЗУ в дырках портов, то чтобы не переделывать РК-программы, на порты надо оставлять по целому килобайту. А ОЗУ дырками неудобно. Если надо большой сплошной кусок доп.ОЗУ, то лучше всего выкинуть запасной ППА и отдать под доп.ОЗУ участок 8400...BFFF размером в 15 кб.
Paguo-86PK wrote:
Дополнительная память будет +24 Кб, но ячейки 8000…8003, A000…A003, C000…C001 будут заняты чем надо. Это РК-совместимый режим +24…
Это же аппаратно намного сложнее и неудобнее в использовании, чем просто ввести вторую страницу с ОЗУ в адресах 0...EFFF. Порты остаются в 0-вой странице и не мешают.
Paguo-86PK wrote:
А вот если проделать трюки «CALL 8000», «CALL A000», «CALL C000» - включается РК-несовместимый режим +32 Кб. То есть все 64 Кб ОЗУ, а ячейки FF00…FFFF при M1 через CALL переключает ОЗУ на верхние 64 Кб. То есть, ОЗУ - 128 Кб. В верхние 64 Кб записываем БСВВ, а нижние - пользователю. Под БСВВ ППА/ПДП/ВГ75 на местах (10 ячеек), а в нижних - только 64 Кб ОЗУ. Никаких ППА…
Это маниловщина, к тому же ненужное усложнение архитектуры.
Paguo-86PK wrote:
Вы просто проигнорировали мой эскиз в начале темы… Я за вариант в 64 Кб
А зачем сейчас хоть кому-то из пользователей РК86 нужны 64 кб? Никто из фанатов РК не одобрил идею сделать новодел РК с бОльшим ОЗУ? И Вы не объяснили для каких целей Вам в РК86 необходимо иметь 64 кб.

Разве есть или вскоре ожидается поступление множества программ с объёмом более, чем 29 кб ? Большое сплошное ОЗУ было надо до середины 90-тых годов, когда программы писались на самих 8-ми разрядках. Т.к тогда, чем больше в бездисководной ЭВМ ОЗУ, тем бОльший исходник можно в него загрузить и странслировать (хотя это не закон, а является отражением несовершенства имеющегося тогда инструментария). ОЗУ размером под 60 кб позволяло использовать CP/M, где имелись нужные инструменты для программиста, а также давало DOS в качестве средства хранения файлов.

А сейчас Вам наличие 128 кб ОЗУ что даст? Тем более такой изощрённой архитектурой. Пока даже на неэффективных ЯВУ для РК ещё не странслировали ни одной программы объём кода которой при трансляциии неожиданно превысил бы 29 кб. И совершенно непоследовательно отвергать простейшие и всем доступные доработки и тут же предлагать делать сложные и громоздкие.

Доп.ОЗУ (или доп.ПЗУ), если и нужно, то лишь, во-первых, чтобы поиметь хоть какую-то DOS (чтобы появилась файловая система для удобного доступа к файлам). А во-вторых, доп.ОЗУ нужно, если планируется начать штамповать качественные РК-игры на каком-нибудь ЯВУ, т.к компиляторы ЯВУ дают в несколько раз менее плотный код, чем ассемблер.

Например, текстов редактор без блоков написанный на ассемблере с размером в 2 кб (т.е уровня Микрон-1) переписанный на Си или Паскаль занимает уже 8 кб. РК-нортон с минимальными окнами в 8 кб, написанный на ассемблере, переписанный на ЯВУ разбухнет до 29 кб (что вообще не оставляет места ни под буфер копирования, ни под буфер сохранения окон). А например, CP/M нортон MIVFI для ОРИОНА имеет размер в 17 кб. Если его переписать на ЯВУ, то он займёт 64 кб.

Паскаль позволяет грузить оверлеи, как в окно A000...BFFF, так и в основное ОЗУ 0...7FFF с автоматическим переключением банок. Так, что, дополнив РК (в любом виде) дополнительным странично-коммутируемым ОЗУ, полностью снимается ограничение на объём кода. И тогда ничто (кроме отсутствия графики) не помешает написать на ЯВУ (естественно, с фрагментами ассемблера, там где важна скорость) большое количество игр с высоким игровым аспектом.
Paguo-86PK wrote:
Застрял на подпрограммах клавиатуры и магнитофона. Хотелось бы ввести поддержку разных раскладок. Подгружаемых…
Застряли Вы потому, что пытаетесь программируя в машинных кодах (что уместно в XIX веке, но явное безумие в XXI веке), уместить что-то в те же 2 кб ПЗУ. Хотя никто не мешает припаяв пару проводков и заменив 24-х ногую панельку на 28-ми ногую (или впаять рядом в имеющиеся отверстия) и установив в неё микросхему 2764, поиметь ПЗУ размером в 8 кб.

Тогда можно запрограммировать драйвер клавиатуры программируя, как теперь принято, в стиле "Quick and Dirty" абсолютно не заморачиваясь экономией байтов (за счёт такого размещения символов в матрице, что укорачивает драйвер). Не имея ограничений на объём кода, таблицу кодов клавиш можно при инициализации копировать из ПЗУ в ОЗУ, что и позволяет программно менять "раскладку клавиш".

А что касается подпрограмм для магнитофона, - зачем их вообще трогать? Они работают нормально (хотя и непонятно зачем перепрограммируют ВГ75 после ввода/вывода каждого байта). Или Вы улучшаете их, чтобы экран не гас при работе с МГ-лентой? Если это так уж надо, то Вам достаточно просто перейти на Специалист, там экран вообще никогда не гаснет.
Paguo-86PK wrote:
это ещё один весомый аргумент от меня в пользу того, что встроенные отладочные средства в Мониторе нужны!
Отладочные средства в ROM-BIOS означают просто трату впустую ~100 байтов. Приличный отладчик занимает объём ~10 кб. И отладчик д.быть привязан к среде, т.е к DOS. Потому отладчики включают в состав DOS, а не делают частью ROM-BIOS.
Paguo-86PK wrote:
Для микро-ЭВМ Паскаль - необходим, как никогда.
Это самая здравая мысль во всей этой теме, во всём разделе этого форума, во всех других разделах этого форума, где речь о программировании 8-ми разрядок и во всех остальных форумах, где речь о том же.
Paguo-86PK wrote:
Это я только недавно стал понимать!
Ну так и забудьте как о кошмарном сне о программировании в машинных кодах КР580 и займитесь Паскалем МТ+. А, если с помощью платки-переходника замените КР580 на Z80, то и Турбо-Паскалем, который хоть и менее серъёзный инструмент, но зато позволяет писать программы быстрее (я в 90-тые годы написал на TP текстов редактор с блоками менее, чем за три дня).

К тому же Паскаль МТ+ (в отличие от Турбо-Паскаля) ничуть не отменяет ассемблер, - он позволяет иметь модули не только на ассемблере, но и на других ЯВУ. А мелкие процедуры на ассемблере удобно встраиваются прямо в код Паскаля используя INLINE вставки (хотя для этого используется менее удобная мнемоника КР580).

На ЯВУ можно делать сложную часть алгоритма, а скоростную часть выполнять на ассемблере. В РК-играх (за небольшим исключением, типа шахмат, что написаны на PL/I) обычно объём собственно кода не превышает 5-6 кб (остальное уровни). Потому большинство РК-игр можно переписать на ЯВУ и они уместятся в имеющиеся 29 кб.
Paguo-86PK wrote:
давно нарисовал ПЗУ знакогенератора, где коды 08/0A/0C/0D/18/19/1A/1F и реализуют псевдографику в три бита: Вместо блоков 2×2 блок 3×1. И в режиме 78×64 можно рисовать 234×64.
Всем известно, что РК отображает 64*25, 64*30 или 64*51 знакомест. Без аппаратных переделок, формат экрана 78*64 никак не увидеть ни на одном телевизоре или мониторе. И если эмулятор это отображает, то это плохой эмулятор, не соответствующий реалу. Если матрица знакоместа 3х1, то экранный формат в пикселях - 192*25. А если включить режим изобретённый vinxru с 51-й видимой строкой, то будет формат 192*51.

Зачем реализовывать матрицу пикселей, - просто применяйте символы для рамок толщиной в одну точку. И непонятно, чем для псевдографики и рамок лучше матрица знакоместа 3х1? Ведь тогда, хотя вертикальные линии рамок будут толщиной в 2 точки, горизонтальные линии будут толщиной аж в 8 линий, т.е рамки станут ещё более противными.
Paguo-86PK wrote:
ВГ75 сама имеет резерв кодов C0…EF под некие рамки
Получить рамки допрошив второй фонт в имеющееся полупустое ПЗУ, - это реально. Делать апп.доработки, тем более ради того, что достигается без хлопот и корёжения платы РК - никто не будет. Это ни в одном из клонов РК не использовали, т.к тогда курсор должен быть реализован программно, а он уже во всех РК-программах аппаратный.
Paguo-86PK wrote:
Я занят кодом, а не сверкающими фантиками…
Зачем нужен код для поддержки окон без решения проблемы нормального дизайна окон? Когда Вы видите красоту, у Вас резко возрастает энтузиазм, а когда Вы видите уродство, то наоборот.
Paguo-86PK wrote:
(навеяло отсюда)…
Эта ссылка работает не для всех.
Paguo-86PK wrote:
Есть предложение: Подготовьте мне разные настройки ВГ75/ВТ57 под мою утилиту и под экран в нижней половине (чтобы не затирать рабочие ячейки Монитора)
Я сейчас пытаюсь изучить/вспомнить/освоить Паскаль (ассемблер стараюсь забыть) и мне не хочется заниматься ассемблером, хотя изменить ПЗУ под режим 27/28 строк - просто. Кроме смены параметров установки режима, требуется изменение адреса начала экрана при HOME и адресов и размеров экрана в п/п-ме ролика. Было бы полезно, если бы крутые эмуляторы чётко привязанные к реальным времянкам выдавали индикацию какая текущая частота кадров и строк.

Проще всего попробовать режим в 27 строк задав полные 32+1 строки (с частотой кадров ~53 ГЦ) и экраном на 36D0H-78*2, т.к при этом начала строк остаются там же и вывод символов будет корректно работать без изменений кода драйвера вывода символов. Здесь длина КСИ не меняется, а в коде меняется только два параметра в подпрограмме задающей режим ВГ75. Попробуйте сначала с экраном на 36D0H-78*2 (тогда, естественно вывод символов п/п-ми F809, F818 не сработает), а затем попробуйте задать адрес экрана 76D0H-78*2 и сделайте вывод текста на экран обычными подпрограммами ПЗУ.

 
Code:
S.HHHHHHH -  0.1001101  77+1 знакомест в ряду
VV.RRRRRR -  00.011101  29+1 строк в экране
UUUU.LLLL -  1001.1001  9+1 линия подчерк, 9+1 линий в знакоместе
MFCC.ZZZZ -  1.0.01.0011 без смещ, мигающ.лин, атриб.пробелом, гашение 8 зн.мест

S - через_рядность картинки
H - символов в ряду (минус 1)
V - гашение по вертикали
R - число рядов знакомест (минус 1)
U - номер линии подчёркивания (0 первая линия)
L - высота знакоместа в линиях
M - метод счёта линий в знакоместе
F - прозрачность атрибутов
С - метод отображения курсора
Z - гашение по горизонтали

; -------------------------------------------------------

MODE    EQU     1       ; если =0, то 64*25, иначе 64*28

if  MODE  eq 0

    SA    EQU   76D0H
               
    PARM1 EQU   4DH     ; 0.1001101  77 (77+1 знакомест)
               
    PARM2 EQU   1DH     ; 00.011101  29 (29+1 строк)
               
    PARM3 EQU   99H     ; 1001.1001  9 9 (9+1 линия подчерк)
                        ; (9+1 линий в знакоместе)
               
    PARM4 EQU   93H     ; 1.0.01.0011 без смещ.
                        ; курсор - мигающая линия подчеркивания
                        ; атрибуты отображать пробелом
                        ; ZZZZ= 3. Т.е 3*2+2= 8 тактов сдвига -
                        ; длина обратного хода луча в строке
  else
   
    SA    EQU   36D0H-78*2
               
    PARM1 EQU   4DH     ; 0.1001101  77 (77+1 знакомест)
               
    PARM2 EQU   1FH     ; 00.011111  31 (31+1 строк)
               
    PARM3 EQU   88H     ; 1000.1000  8 8 (8+1 линия подчерк)
                        ; (8+1 линий в знакоместе)
               
    PARM4 EQU   93H     ; 1.0.01.0011 без смещ.
                        ; курсор - мигающая линия подчеркивания
                        ; атрибуты отображать пробелом
                        ; ZZZZ= 3. Т.е 3*2+2= 8 тактов сдвига -
                        ; длина обратного хода луча в строке
endif

VG_75   EQU     0C000H
VT_57   EQU     0E000H

PUSK_VG:
        LD      HL,VG_75+1
        LD      (HL),0          ; reset commando
        DEC     HL              ; адрес VG_75
        LD      (HL),PARM1
        LD      (HL),PARM2
        LD      (HL),PARM3
        LD      (HL),PARM4
        INC     HL              ; адрес VG_75+1
        LD      (HL),27H        ; Start display commando

        LD      A,(HL)          ; read status (зачем-то это надо)
AFAE1:  LD      A,(HL)          ; read status
        AND     20H             ; mask 'Interrupt request flag'
        JP      Z,AFAE1         ; ждем конца строки

        LD      HL,VT_57+8
        LD      (HL),80H
        LD      L,4             ; VT_57+04
        LD      (HL),low SA     ; 0D0H
        LD      (HL),high SA    ; 076H
        INC     L               ; адрес VT_57+5
        LD      (HL),23H        ; число байтов
        LD      (HL),49H        ; режим
        LD      L,8             ; VT_57+8
        LD      (HL),0A4H
        RET
.

- - - Добавлено - - -

Вдруг вспомнил... Есть одна программа от Микроши, что использует режим с высотой знакомест в 9 линий. Но она не поможет в данной задаче, т.к хотя там число строк хранимых в ОЗУ 33, но строчный шаг - 78 (а не 76), а как уже сказано выше, 33 строки длиной в 78 байтов не умещаются в стандартной экранной области 7633...7FFF. Для интереса попробуйте такой режим, ниже его процедура инициализации. Обратите внимание, что в ВТ57 тут записываются другие байты (не знаю почему и что это меняет, - в программировании ВТ57 никогда не пытался разбираться, т.к там всё очень сложно).

 
Code:
PUSKVG: LD      HL,0C001H       ; Вход: BC= адрес экранного буфера
        LD      (HL),0
        DEC     HL

        LD      (HL),4DH        ; 0.1001101  77 (77+1 знакомест)

        LD      (HL),21H        ; 00.100001 = 33 (34 строки +1 на обр.ход)

        LD      (HL),68H        ; 0110.1000  6 8 (6+1 линия подчеркивания)
                                ; (8+1 линий в знакоместе)

        LD      (HL),0B3H       ; 1.0.11.0011 без смещ.
                                ; курсор - мигающая линия подчеркивания
                                ; атрибуты отображать пробелом
                                ; ZZZZ= 3. Т.е 3*2+2= 8 тактов сдвига -
                                ; длина обратного хода луча в строке
        INC     HL
        LD      (HL),27H
                       
        LD      HL,0C001H       ; программируем ВТ57

        LD      A,(HL)
WAITD5: LD      A,(HL)          ; сначала ждём готовность ВГ75
        AND     00100000B
        JP      Z,WAITD5

        LD      HL,0E008H
        LD      (HL),80H
        LD      L,4             ; HL= E004
        LD      (HL),C          ; адрес экрана
        LD      (HL),B
        INC     L               ; HL= E005
        LD      (HL),5BH
        LD      (HL),4AH
        LD      L,8             ; HL= E008
        LD      (HL),0A4H
       
        RET
.

Да, кстати. У Вас не вышло заставить для РК86 успешно работать конвертор CGA --> VGA потому, что Вы исходили из неверных идей. Число строк (точнее линий) в кадре не играет роли. Тем более, что никогда 312 строк не присутствуют в сигнале. В видео сигнале ОРИОНА, Специалиста и клонов ZX-Spectrum есть в наличии только 192...260 строк снабжённых ССИ. А далее идёт пауза, уровень чёрного, гашение по кадрам, в середине которого выдаётся КСИ. А в сигнале от РК86 строчные синхроимпульсы ССИ идут и во время гашения по кадрам. Возможно это сбивает конвертор. Ещё конвертор возможно сбивает слишком длинный КСИ и он формирует из одного слишком длинного КСИ на выходе несколько стандартных КСИ.

Вообще телевизор и монитор определяя формат сигнала могут опираться только на период следования ССИ и КСИ и их параметры. Колебания периодов следования ССИ и КСИ в диапазоне +/- 10% не играют роли (лишь центровка растра слегка сбивается). Роль играют длительности КСИ и ССИ и их полярности. По ним телевизор и монитор и определяет формат сигнала.


18 Mar 2020 14:41
Profile
Fanat

Joined: 10 Sep 2009 04:27
Posts: 82
Location: 41.213.126.12
Reply with quote
Post Re:
На всё остальное РК86 вообще не пригоден. Это именно радиолюбительский компьютер, которому пришлось исполнять роль бытового игрового компьютера. С чем он успешно не справился. И даже хуже - он спровоцировал промышленность на выпуск РК-подобных.

инетерстно почему не разместили cp/m в ПЗУ и не сделали эмулятор диска на магнитофоне


19 Mar 2020 20:49
Profile
Doomed
User avatar

Joined: 19 Feb 2017 03:46
Posts: 583
Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь
Reply with quote
Post 
sergey2b wrote:
интересно почему не разместили CP/M в ПЗУ и не сделали эмулятор диска на магнитофоне
Т.к меня за "оффтоп и слишком много букаф" уже забанили на одном форуме, чтобы не злить топикстартера отвечу здесь.


Last edited by barsik on 20 Mar 2020 08:10, edited 1 time in total.



20 Mar 2020 07:33
Profile
Maniac
User avatar

Joined: 12 Apr 2011 20:43
Posts: 267
Location: Tashkent
Reply with quote
barsik wrote:
Чего тут непонятного?
Этo непонятно не мне, а пользователю Бейсика…
sergey2b wrote:
В бейсике-интерпретаторе другая проблема, - как разместить ассемблерный код в ОЗУ.
Выше я экспериментировал с Motorola-синтаксисом 6502.
Думаю, чем «POKE X,&46», запись «BM» будет намного прозрачнее.
Можно даже унифицировать саму функцию USR:
Code:
DEF FNU(X,Y)=USR("HX LY +S"):REM LD H,X; LD L,Y; ADD HL,SP
PRINT FNU(0,0)

barsik wrote:
После этого команды IN/OUT перестанут попадать в порты. Кстати, ПДП занимает не 4, а 9 адресов.
Вот потому и концептуально я застрял и ушёл в эмулятор бинарить Монитор!
barsik wrote:
Это же аппаратно намного сложнее и неудобнее в использовании
Если ИД7 подключить не напрямую к шине адреса, а к выходу РТ-ки, прошитой соответствующим образом (как сделано во многих Микро-ЭВМ побольше - Ириша, Поиск и т.д.), то этого будет более, чем достаточно!
Меня изумляет факт, что в МРБ публиковали «Музыкальные Шкатулки» на РЕ3 для сборки и прошивки пионерами, а в Компьютере уж слишком упростили архитектуру, сэкономив на РТ в качестве дешифратора! :o
(Даже та же 155РЕ3 имеет вход на 5 бит, а это - A15-A11, что уже квантует шаг дешифрации до 2 Кб, вместо 8 Кб!)
Что и искушает меня, практически пустяковыми доработками, добиться большего…
541РТ1 - 256×4. Для входа ИД4 - идеально подходит. И шаг блоков - по 256 байтов…
barsik wrote:
А зачем сейчас хоть кому-то из пользователей РК86 нужны 64 кб?
Вы выше писали про замкнутый круг разработчиков эмуляторов без фишек и отсутствия программ под эти фишки…
Кажется, это - из той же оперы!
barsik wrote:
Застряли Вы потому, что пытаетесь программируя в машинных кодах (что уместно в XIX веке, но явное безумие в XXI веке), уместить что-то в те же 2 кб ПЗУ.
Зачем писать драйвер клавиатуры на Си‽
А застрял я из-за расчётов тактов… Да и после опытов с ВГ75/ПДП на zx-pk.ru стал подумывать не гасить экран, а ввести счётчик, так как ПДП-цикл из 32 байтов раз в кадр, думаю, магнитофонная операция переживёт…
И это будет ВТОРОЙ АРГУМЕНТ в рекламацию моего Монитора. :lol:
barsik wrote:
А мелкие процедуры на ассемблере удобно встраиваются прямо в код Паскаля используя INLINE вставки (хотя для этого используется менее удобная мнемоника КР580).
На которой у меня и написан весь мой код!
barsik wrote:
Без аппаратных переделок, формат экрана 78*64 никак не увидеть ни на одном телевизоре или мониторе. И если эмулятор это отображает, то это плохой эмулятор, не соответствующий реалу.
Как-то пытался писать эмуляцию ВГ75 с плавающими строками, чтобы, как в моём бытовом телевизоре, синхронизация сбивалась и сворачивалась.
Но писал inline MS-VC «asm{…}» и сильно запутался (x86-регистров не хватило), забросил…
На JavaScript в HTML5 попробовать можно, но очень лень…
Теорию телевизионных стандартов знаю плохо с балансом чёрного, белого и т.д…
А так, можно кидать картинку из ВГ75-эмуляции не на экран сразу, а в буфер целых чисел, который затем разбирать как надо…
(Были же т.н. дешёвые софт-модемы, которые программно заменяли реальный модем. Телевизионный сигнал - тоже можно программно разбирать и без карты захвата. А если вместо захвата - тупо буфер ВГ75, то в разы проще! Но… Лень… Данных мало…
Вообще, я любил разъём с RGBV из ZX-Spectrum выдёргивать и втыкать в магнитофон, чтобы на аудио кассету попытаться записать кадры местного канала. Получалось, но только экраны с титрами…
Это хоть кривой и тупой опыт, но - опыт! Я и на Windows через звуковую карту выход телевизора писал и программно пытался превратить хоть в какой-нибудь кадр. Но 15 лет наз памяти мало было и 1 секунда много диска съедала WAV-файлом…)
Пусть хоть 1 кадр в минуту рисовать придётся, но уже будет явно видно, что произошло бы в реале аппаратно!
barsik wrote:
Получить рамки допрошив второй фонт в имеющееся полупустое ПЗУ, - это реально.
Я об этом тоже думал: Все атрибуты, включая реверс и подчёркивание, подать на ПЗУ знакогенератора. А прошивку синтезировать как-нибудь так, чтобы всё было.
Да и другой канал ПДП задействовать для подгрузки знакогенератора на КСИ, чтобы программно не париться… :no:
barsik wrote:
Когда Вы видите красоту, у Вас резко возрастает энтузиазм, а когда Вы видите уродство, то наоборот.
Наверно, как раз из-за отсутствия чувства красоты я и сижу в машинном коду под чудной архитектурой РК!
(Так как архитектура PC вообще скандально кривая! Чего стоит один только код «00» x86 под операцией «ADD»: При сбитом указателе, процессор в пустом нулевом пространстве будет до одури складывать, из-за чего MS ввели в Windows целые мегабайты запрещённой области. Будь «00» = «HLT», исключение случилось бы сразу! :evil:
Просто i8080 - менее кривой и в нём меньше ошибок. Свой «x80» я подправил и «00» - это «HLT»…)
barsik wrote:
В видео сигнале ОРИОНА, Специалиста и клонов ZX-Spectrum есть в наличии только 192...260 строк снабжённых ССИ. А далее идёт пауза, уровень чёрного, гашение по кадрам, в середине которого выдаётся КСИ. А в сигнале от РК86 строчные синхроимпульсы ССИ идут и во время гашения по кадрам. Возможно это сбивает конвертор.
Напротив! Если качество принимаемого сигнала низкое и один канал накладывается на другой (в случае с кабельным ТВ 90-х на шесть каналов из 12 у ПТК, где каналы 3-5-9-11 - государственные, а 1-4-6-8-10 - кабельное), то вполне можно было изучить структуру кадра.
И та самая ЛП5 у РК - правильно смешивает сигналы…
barsik wrote:
… чтобы не злить топикстартера отвечу здесь.
Нe уж то я так сурово представляюсь‽ :o

Чтобы достичь идеальной синхронизации, следует добиться частоты 15625.
Для этого необходимо в строке обеспечить 512 графических точек.
Так, 78×6=468, остаётся 44. Однако, 44 на 6 не делится, но делится на 2. То есть, «ZZZZ» нужно настроить на 22 символа:
Code:
SHHHHHHH VVRRRRRR UUUULLLL MFCCZZZZ
01001101 00011101 10011001 10011010
   
8,000,000 / 15,625 = 512 - (468=78*6) = 44
А частоту ВГ75 - утроить (в период HRTC):
Attachment:
File comment: По HRTC тактирование ВГ75 ускоряется втрое
VG75_15625.jpeg
VG75_15625.jpeg [ 81.41 KiB | Viewed 5983 times ]

(Можно и на период VRTC менять частоту раз в 6, чтобы высоту знакоместа сократить…)

P.S.: Возможно, в схеме неточность: ИЕ4 - мой самый нелюбимый счётчик, так как тяжело с ним разобраться и трёхфазную схему разок лепил на нём…
Но, суть, надеюсь, я донёс… :roll:
(Да и максимальную частоту i8275 следует учесть…)


20 Mar 2020 08:06
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 204 posts ]  Go to page Previous  1 ... 8, 9, 10, 11, 12, 13, 14  Next

Who is online

Users browsing this forum: Hammer, vital72 and 35 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.