nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 28 Mar 2024 05:28



Reply to topic  [ 47 posts ]  Go to page Previous  1, 2, 3, 4  Next
ZX Spectrum 42 символа в строке 
Author Message
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Для бестолковых умные люди пишут статьи: Печать текста 64 символа в строке
Attachment:
64.PNG
64.PNG [ 16.57 KiB | Viewed 2743 times ]

Где черным русским по белому написано, что 64 символа в строке печатают шрифтом 4х8.
Это вычисляется элементарно: 256 / 64 = 4.

Если я насчитал в символе 5 пикселов без учёта пиксела-пробела:

Image

То это никак не может быть режим 64 символа в строке. Усекаешь, или не ясно?

А размытые картинки с непропорционально испорченной геометрией - рассматривай сам... :-?

Вижу - ты этому рад... :ebiggrin: Коньячку чтоль лишку выпил, что в децтво впадаешь? :roll:

_________________
iLavr


16 Jan 2023 03:03
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Дык там в картинке экран не спектрумовский - там сильно больше 256 пикселов - иди обратно в школу учись считать на палочках :no:

_________________
:dj: https://mastodon.social/@Shaos


16 Jan 2023 03:05
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Shaos wrote:
Дык там в картинке экран не спектрумовский - там сильно больше 256 пикселов..

Мне со старта топика было понятно, что с размерами бяда, а ты только допёр? :roll:

Shaos wrote:
иди обратно в школу учись считать на палочках :no:

Как ты штоль? :mrgreen: Да мне без надобности... :ebiggrin:

Image

Я небольшие числа ещё в садике делить и умножать умел в уме... :lol:

_________________
iLavr


16 Jan 2023 03:15
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Ну если ты уже понял, что подсунул неподготовленному читателю левую картинку вместо обещанных 42 символов в строке, то что мешает поменять её на правильную 24x42.gif?

Attachment:
24x42.gif
24x42.gif [ 124.81 KiB | Viewed 2734 times ]


Религия агрессивной непогрешимости не иначе? :lol:

_________________
:dj: https://mastodon.social/@Shaos


16 Jan 2023 03:18
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Shaos wrote:
Религия агрессивной непогрешимости не иначе? :lol:

У тебя штоль? :roll: Ну я уже месяцев 11 наблюдаю твою агрессивность, и что? :-?


P.S. Но у меня конструктивное предложение есть: у тебя и Спринтер существует и эмуляторы ZX Spectrum всякие...
Выведи на эмуле текст с драйвером 42 символа в строке, чтобы геометрия была точно от ZX Spectrum -
твой скриншот и положим, как проверенный пример. Заодно и драйвер покажешь...
А на словах ты меня ни в чем не убедил.
:-?

_________________
iLavr


17 Jan 2023 20:30
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Ok, замётано - какой текст выводить будем? ;)

Выведу его как 32 символа в строке, как 42 символа в строке ну и для сравнения как 64 символа в строке :)

P.S. Я как раз планировал прикрутить разные выводилки для текста в свою операционку ShaOS :roll:

_________________
:dj: https://mastodon.social/@Shaos


17 Jan 2023 21:33
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Shaos wrote:
Ok, замётано - какой текст выводить будем? ;)

Желательно с кириллицей - на твоё усмотрение, если нет.

_________________
iLavr


17 Jan 2023 21:41
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Lavr wrote:
Shaos wrote:
Ok, замётано - какой текст выводить будем? ;)

Желательно с кириллицей - на твоё усмотрение, если нет.
Тогда стандартный шрифт ZX отпадает - буду использовать шрифты "nedofont" 8x8 и "my_font" 5x7 (оба сделаны ещё в 2006 году).
А вот шрифт 4x8 (4x6?) надо будет составить из разных существующих (у меня есть подборка c ZX и БК) - можно даже отдельную тему этому посвятить :dj:
Shaos wrote:
4x8 шрифты для ZX-спектрума обеспечивающие 64 символа в строке (выпущено в 2011):

http://www.worldofspectrum.org/infoseekid.cgi?id=0027130

Для примера я думаю надо взять прозу с большими абзацами, чтобы текст заливал всю ширь, например начало романа "Преступление и наказание" Достоевского (старшей дочке как раз в школе его задали читать - она последний 12-й класс в этом году заканчивает):
Quote:
___В начале июля, в чрезвычайно жаркое время, под вечер, один молодой человек вышел из своей каморки, которую нанимал от жильцов в С-м переулке, на улицу и медленно, как бы в нерешимости, отправился к К-ну мосту.
___Он благополучно избегнул встречи с своею хозяйкой на лестнице. Каморка его приходилась под самою кровлей высокого пятиэтажного дома и походила более на шкаф, чем на квартиру. Квартирная же хозяйка его, у которой он нанимал эту каморку с обедом и прислугой, помещалась одною лестницей ниже, в отдельной квартире, и каждый раз, при выходе на улицу, ему непременно надо было проходить мимо хозяйкиной кухни, почти всегда настежь отворенной на лестницу. И каждый раз молодой человек, проходя мимо, чувствовал какое-то болезненное и трусливое ощущение, которого стыдился и от которого морщился. Он был должен кругом хозяйке и боялся с нею встретиться.
___Не то чтоб он был так труслив и забит, совсем даже напротив; но с некоторого времени он был в раздражительном и напряженном состоянии, похожем на ипохондрию. Он до того углубился в себя и уединился от всех, что боялся даже всякой встречи, не только встречи с хозяйкой. Он был задавлен бедностью; но даже стесненное положение перестало в последнее время тяготить его. Насущными делами своими он совсем перестал и не хотел заниматься. Никакой хозяйки, в сущности, он не боялся, что бы та ни замышляла против него. Но останавливаться на лестнице, слушать всякий вздор про всю эту обыденную дребедень, до которой ему нет никакого дела, все эти приставания о платеже, угрозы, жалобы, и при этом самому изворачиваться, извиняться, лгать, - нет уж, лучше проскользнуть как-нибудь кошкой по лестнице и улизнуть, чтобы никто не видал.
https://ilibrary.ru/text/69/p.1/index.html

_________________
:dj: https://mastodon.social/@Shaos


17 Jan 2023 22:42
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Ну сделай как умеешь, ты же знаешь, что я далёк от Спектрумов...


P.S. Кстати, то, вокруг чего мы копья ломаем, это всё-таки шрифт 5х7,
но только выведенный на экран через 2 пикселя, как мне кажется:


Image

_________________
iLavr


17 Jan 2023 23:21
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Короче попробую набросать алгоритм из головы (никуда не подглядывая)

Для начала представим как такие символы шириной в 6 пикселов располагаются в байтах:
Code:
|1111 1122|2222 3333|3344 4444|

Как можно видеть в 3 байтах сидят горизонтальные полоски из 4 символов - 2 из них целиком влезают в байт, а 2 делятся между двумя соседними байтами - эдакие 4 фазы. Если начинать печатать символы от левого края вплотную, то 42й символ закончится в середине последнего байта - соответственно, чтобы отцентровать эти 42 символа, надо начинать не от левого края, а отступив на 2 пиксела, т.е. первый (0й) символ будет в 4й фазе (прижатый к правому краю байта), а последний (41й) будет в 1й фазе (прижатый к левому краю байта). Сверху также можно отступить 1 полоску, правда последняя строка символов прижмётся при этом к нижнему краю экрана...

Для начала можно нарисовать алгоритм, который сдвигает символ при выводе каждый раз, и потом выдумать более оптимальный алгоритм, в котором имеется 4 копии всех букв алфавита уже заранее сдвинутых на нужное кол-во битов для ускоренного вывода...

P.S. Под спойлером можно найти ассемблерный инклудник с моим шрифтом 5x7 (6x8 если посчитать 1-пиксельную полоску справа и снизу) - 208 символов (с кодами от #20 до #EF в альтернативной досовской кодировке, но без последних 16 символов, т.е. без Ё и ё) занимают 208*7=1456 байт:
 font5x7
Code:
   DB #00,#00,#00,#00,#00,#00,#00
   DB #20,#20,#20,#20,#00,#20,#00
   DB #50,#50,#00,#00,#00,#00,#00
   DB #50,#F8,#50,#50,#F8,#50,#00
   DB #20,#F8,#A0,#F8,#28,#F8,#20
   DB #00,#C8,#D0,#20,#58,#98,#00
   DB #20,#50,#20,#58,#88,#78,#00
   DB #30,#10,#20,#00,#00,#00,#00
   DB #30,#60,#40,#40,#60,#30,#00
   DB #60,#30,#10,#10,#30,#60,#00
   DB #20,#A8,#70,#70,#A8,#20,#00
   DB #00,#20,#20,#F8,#20,#20,#00
   DB #00,#00,#00,#00,#30,#10,#20
   DB #00,#00,#00,#F8,#00,#00,#00
   DB #00,#00,#00,#00,#30,#30,#00
   DB #00,#08,#10,#20,#40,#80,#00
   DB #70,#88,#A8,#A8,#88,#70,#00
   DB #20,#60,#20,#20,#20,#70,#00
   DB #F8,#08,#08,#F8,#80,#F8,#00
   DB #F8,#08,#08,#30,#08,#F8,#00
   DB #88,#88,#88,#F8,#08,#08,#00
   DB #F8,#80,#80,#F8,#08,#F8,#00
   DB #F8,#80,#80,#F8,#88,#F8,#00
   DB #F8,#08,#08,#08,#08,#08,#00
   DB #F8,#88,#88,#F8,#88,#F8,#00
   DB #F8,#88,#88,#F8,#08,#F8,#00
   DB #00,#30,#30,#00,#30,#30,#00
   DB #00,#30,#30,#00,#30,#10,#20
   DB #00,#10,#20,#40,#20,#10,#00
   DB #00,#00,#70,#00,#70,#00,#00
   DB #00,#40,#20,#10,#20,#40,#00
   DB #70,#88,#10,#20,#00,#20,#00
   DB #78,#88,#B8,#B8,#80,#78,#00
   DB #78,#88,#88,#F8,#88,#88,#00
   DB #E0,#90,#90,#F8,#88,#F8,#00
   DB #F8,#88,#80,#80,#88,#F8,#00
   DB #E0,#90,#88,#88,#88,#F8,#00
   DB #F8,#88,#80,#E0,#88,#F8,#00
   DB #F8,#88,#80,#E0,#80,#80,#00
   DB #F8,#88,#80,#98,#88,#F8,#00
   DB #88,#88,#88,#F8,#88,#88,#00
   DB #70,#20,#20,#20,#20,#70,#00
   DB #38,#10,#10,#10,#90,#60,#00
   DB #88,#90,#A0,#F0,#88,#88,#00
   DB #80,#80,#80,#80,#88,#F8,#00
   DB #88,#D8,#A8,#88,#88,#88,#00
   DB #88,#C8,#A8,#98,#88,#88,#00
   DB #F8,#88,#88,#88,#88,#F8,#00
   DB #F8,#88,#88,#F8,#80,#80,#00
   DB #F8,#88,#88,#88,#90,#E8,#00
   DB #F8,#88,#88,#F8,#90,#88,#00
   DB #F8,#88,#80,#F8,#08,#F8,#00
   DB #F8,#20,#20,#20,#20,#20,#00
   DB #88,#88,#88,#88,#88,#70,#00
   DB #88,#88,#88,#88,#50,#20,#00
   DB #88,#88,#88,#A8,#A8,#50,#00
   DB #88,#50,#20,#50,#88,#88,#00
   DB #88,#88,#50,#20,#20,#20,#00
   DB #F8,#90,#20,#40,#88,#F8,#00
   DB #70,#40,#40,#40,#40,#70,#00
   DB #00,#80,#40,#20,#10,#08,#00
   DB #70,#10,#10,#10,#10,#70,#00
   DB #20,#50,#88,#00,#00,#00,#00
   DB #00,#00,#00,#00,#00,#00,#F8
   DB #10,#20,#30,#00,#00,#00,#00
   DB #00,#00,#78,#88,#98,#E8,#00
   DB #80,#80,#80,#F0,#88,#F8,#00
   DB #00,#00,#78,#88,#80,#78,#00
   DB #08,#08,#08,#78,#88,#F8,#00
   DB #00,#00,#70,#F8,#80,#70,#00
   DB #30,#20,#20,#70,#20,#20,#00
   DB #00,#00,#78,#88,#78,#08,#70
   DB #80,#80,#80,#F0,#88,#88,#00
   DB #20,#00,#20,#20,#20,#20,#00
   DB #10,#00,#10,#10,#10,#50,#20
   DB #80,#90,#A0,#F0,#88,#88,#00
   DB #60,#20,#20,#20,#20,#20,#00
   DB #00,#00,#F0,#A8,#A8,#A8,#00
   DB #00,#00,#F0,#88,#88,#88,#00
   DB #00,#00,#70,#88,#88,#70,#00
   DB #00,#00,#F0,#88,#F8,#80,#80
   DB #00,#00,#78,#88,#F8,#08,#08
   DB #00,#00,#28,#30,#20,#20,#00
   DB #00,#00,#70,#60,#18,#F8,#00
   DB #20,#70,#20,#20,#20,#30,#00
   DB #00,#00,#88,#88,#88,#78,#00
   DB #00,#00,#88,#88,#48,#30,#00
   DB #00,#00,#A8,#A8,#A8,#70,#00
   DB #00,#00,#50,#20,#50,#88,#00
   DB #00,#00,#88,#88,#78,#08,#70
   DB #00,#00,#F0,#20,#40,#F8,#00
   DB #30,#60,#40,#C0,#40,#60,#30
   DB #20,#20,#20,#00,#20,#20,#20
   DB #60,#30,#10,#18,#10,#30,#60
   DB #50,#A0,#00,#00,#00,#00,#00
   DB #00,#20,#50,#88,#88,#F8,#00
   DB #38,#48,#88,#F8,#88,#88,#00
   DB #F0,#80,#80,#F0,#88,#F8,#00
   DB #E0,#90,#90,#F0,#88,#F8,#00
   DB #F0,#90,#80,#80,#80,#80,#00
   DB #30,#50,#50,#50,#50,#F8,#88
   DB #F8,#88,#80,#E0,#88,#F8,#00
   DB #88,#A8,#A8,#70,#A8,#A8,#00
   DB #70,#88,#08,#30,#88,#70,#00
   DB #88,#88,#98,#A8,#C8,#88,#00
   DB #A8,#88,#98,#A8,#C8,#88,#00
   DB #88,#90,#A0,#E0,#90,#88,#00
   DB #38,#48,#48,#48,#48,#88,#00
   DB #88,#D8,#A8,#88,#88,#88,#00
   DB #88,#88,#88,#F8,#88,#88,#00
   DB #70,#88,#88,#88,#88,#70,#00
   DB #F8,#88,#88,#88,#88,#88,#00
   DB #F0,#88,#88,#F0,#80,#80,#00
   DB #70,#88,#80,#80,#88,#70,#00
   DB #F8,#A8,#20,#20,#20,#70,#00
   DB #88,#88,#88,#78,#08,#70,#00
   DB #70,#A8,#A8,#A8,#70,#20,#00
   DB #88,#50,#20,#50,#88,#88,#00
   DB #90,#90,#90,#90,#90,#F8,#08
   DB #88,#88,#88,#78,#08,#08,#00
   DB #88,#88,#A8,#A8,#A8,#F8,#00
   DB #88,#88,#A8,#A8,#A8,#F8,#08
   DB #C0,#40,#40,#78,#48,#78,#00
   DB #88,#88,#88,#E8,#A8,#E8,#00
   DB #40,#40,#40,#78,#48,#78,#00
   DB #70,#88,#08,#38,#88,#70,#00
   DB #90,#A8,#A8,#E8,#A8,#90,#00
   DB #78,#88,#88,#78,#28,#48,#00
   DB #00,#00,#78,#88,#98,#68,#00
   DB #78,#20,#10,#78,#88,#F8,#00
   DB #C0,#C0,#80,#F0,#88,#F8,#00
   DB #00,#00,#F0,#30,#C0,#F8,#00
   DB #00,#00,#78,#88,#78,#08,#70
   DB #00,#00,#70,#F8,#80,#70,#00
   DB #00,#00,#A8,#A8,#70,#A8,#00
   DB #00,#00,#78,#08,#30,#88,#70
   DB #00,#00,#88,#88,#98,#68,#00
   DB #10,#20,#88,#88,#98,#68,#00
   DB #00,#00,#90,#A0,#F0,#88,#00
   DB #00,#00,#38,#48,#48,#88,#00
   DB #00,#00,#58,#A8,#A8,#A8,#00
   DB #00,#00,#88,#88,#F8,#88,#00
   DB #00,#00,#70,#88,#88,#70,#00
   DB #00,#00,#B0,#C8,#88,#88,#00
   DB #A8,#00,#A8,#00,#A8,#00,#A8
   DB #A8,#50,#A8,#50,#A8,#50,#A8
   DB #50,#F8,#50,#F8,#50,#F8,#50
   DB #20,#20,#20,#20,#20,#20,#20
   DB #20,#20,#20,#E0,#20,#20,#20
   DB #20,#20,#E0,#20,#E0,#20,#20
   DB #50,#50,#50,#D0,#50,#50,#50
   DB #00,#00,#00,#F0,#50,#50,#50
   DB #00,#00,#E0,#20,#E0,#20,#20
   DB #50,#50,#D0,#10,#D0,#50,#50
   DB #50,#50,#50,#50,#50,#50,#50
   DB #00,#00,#F0,#10,#D0,#50,#50
   DB #50,#50,#D0,#10,#F0,#00,#00
   DB #50,#50,#50,#F0,#00,#00,#00
   DB #20,#20,#E0,#20,#E0,#00,#00
   DB #00,#00,#00,#E0,#20,#20,#20
   DB #20,#20,#20,#38,#00,#00,#00
   DB #20,#20,#20,#F8,#00,#00,#00
   DB #00,#00,#00,#F8,#20,#20,#20
   DB #20,#20,#20,#38,#20,#20,#20
   DB #00,#00,#00,#F8,#00,#00,#00
   DB #20,#20,#20,#F8,#20,#20,#20
   DB #20,#20,#38,#20,#38,#20,#20
   DB #50,#50,#50,#58,#50,#50,#50
   DB #50,#50,#58,#40,#78,#00,#00
   DB #00,#00,#78,#40,#58,#50,#50
   DB #50,#50,#D8,#00,#F8,#00,#00
   DB #00,#00,#F8,#00,#D8,#50,#50
   DB #50,#50,#58,#40,#58,#50,#50
   DB #00,#00,#F8,#00,#F8,#00,#00
   DB #50,#50,#D8,#00,#D8,#50,#50
   DB #20,#20,#F8,#00,#F8,#00,#00
   DB #50,#50,#50,#F8,#00,#00,#00
   DB #00,#00,#F8,#00,#F8,#20,#20
   DB #00,#00,#00,#F8,#50,#50,#50
   DB #50,#50,#50,#78,#00,#00,#00
   DB #20,#20,#38,#20,#38,#00,#00
   DB #00,#00,#38,#20,#38,#20,#20
   DB #00,#00,#00,#78,#50,#50,#50
   DB #50,#50,#50,#F8,#50,#50,#50
   DB #20,#20,#F8,#20,#F8,#20,#20
   DB #20,#20,#20,#E0,#00,#00,#00
   DB #00,#00,#00,#38,#20,#20,#20
   DB #D8,#D8,#D8,#00,#D8,#D8,#D8
   DB #00,#00,#00,#00,#D8,#D8,#D8
   DB #C0,#C0,#C0,#00,#C0,#C0,#C0
   DB #18,#18,#18,#00,#18,#18,#18
   DB #D8,#D8,#D8,#00,#00,#00,#00
   DB #00,#00,#F0,#88,#F8,#80,#80
   DB #00,#00,#70,#88,#80,#78,#00
   DB #00,#00,#F0,#A8,#A8,#A8,#00
   DB #00,#00,#88,#88,#78,#08,#70
   DB #00,#20,#70,#A8,#70,#20,#20
   DB #00,#00,#D8,#20,#20,#D8,#00
   DB #00,#00,#90,#90,#90,#78,#08
   DB #00,#00,#88,#88,#78,#08,#00
   DB #00,#00,#A8,#A8,#A8,#78,#00
   DB #00,#00,#A8,#A8,#A8,#78,#08
   DB #00,#00,#C0,#70,#48,#78,#00
   DB #00,#00,#88,#C8,#A8,#E8,#00
   DB #00,#00,#40,#70,#48,#78,#00
   DB #00,#00,#70,#38,#88,#70,#00
   DB #00,#00,#B0,#A8,#E8,#B8,#00
   DB #00,#00,#38,#48,#38,#48,#00


P.P.S. Для 8х8 (32 символа в строке) нашёл вот такой досовский шрифт (выведено через эмулятор ZX-спектрума):


Attachments:
FONTS_1.png
FONTS_1.png [ 7.33 KiB | Viewed 2546 times ]

_________________
:dj: https://mastodon.social/@Shaos
18 Jan 2023 20:54
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Вот 32 символа в строке без переносов выведено на смеси асма и робби (nedoPC SDK):

Attachment:
FONTS_32.png
FONTS_32.png [ 12.08 KiB | Viewed 2544 times ]


Attachments:
FONTS_32.zip [5.49 KiB]
Downloaded 69 times

_________________
:dj: https://mastodon.social/@Shaos
19 Jan 2023 01:02
Profile WWW
Supreme God
User avatar

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

А может, попробуешь всё же какой-либо из известных алгоритмов для начала? :roll:
http://zxdn.narod.ru/coding.htm

Всё же люди старались, оптимизировали... пишут, что их алгоритмы самые быстрые... :wink:

Я как-то привык, что любая НИОКР начинается с обзора существующих решений, и лишь потом
начинается отсебятинка, если эти решения - не ахти... :-?

Это чтобы не изобретать лишних велосипедов и не наступать на чужие грабли.

_________________
iLavr


19 Jan 2023 10:43
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Ты думаешь Alone Coder (автор первого примера вывода букв 6x8 в списке) будучи школьником в 90х программировал лучше меня теперешнего? Ну может быть :roll:

Я думал тебе картинка нужна неважно с какой скоростью выведенная :mrgreen:

Там в примерах кое-где так наворочено, что проще своё написать, чем разбираться с тем, как же это всё прикрутить в свою программу - потом могу сравнить по скорости...

_________________
:dj: https://mastodon.social/@Shaos


19 Jan 2023 20:49
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Shaos wrote:
Я думал тебе картинка нужна неважно с какой скоростью выведенная :mrgreen:

В общем-то желательно всё же быстро... потому что я не из праздного интереса этим занялся...
Я ZX Spectrum всегда не любил именно за 32 символа в строке - очень неудобно для любого текстового редактора... :-?

А вот 42 символа в строке мне представляется вполне разумным компромиссом - и буквы не такие узкие, как
в режиме 64 символа, но всё же и размер строки не совсем убогий...

Я хочу попробовать применить этот режим в мой уже довольно старый проект.
Там как раз растр 256х192! А то при 32 символах в строке его и доделывать нет желания... :-?

_________________
iLavr


19 Jan 2023 21:20
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Поcмотрим - я думаю мой вариант с 4 заранее сдвинутыми версиями шрифта и перетасовкой полосок будет самый быстрый, но сначала надо попробовать "в лоб"...

А твой старый проект ведь про программную генерацию видеосигнала на КР580ВМ80А? Ты там можешь ведь сам только 6 битов от каждого символа выталкивать, не?
Это в ZX-спектруме надо биты месить туда-сюда если символы шириной 6 т.к. видеопамять всегда по 8 бит выталкивается...

Вот мои 42 символа в строке для ZX - пока сделал не сильно оптимально, но зато даже перенос строки есть :)

Attachment:
FONTS_42.png
FONTS_42.png [ 11.34 KiB | Viewed 2334 times ]


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

Ассемблерный исходник под спойлером:
 FONTS_Z80.asm
Code:
   org #9000

my_font:
   jr   l1

state   db   1
   dw   dost
xx   db   255
yy   db   255
tmp   dw   0

l1:   ld   hl,dost
   ld   a,0
   ld   (xx),a
   ld   (yy),a
   ld   a,(state)
   cp   1
   jp   nz,l2
   call   print5x7
   ret
l2:   call   print3x7
   ret

;|1111 1122|2222 3333|3344 4444|

scrline db 4,1,2,4,1,2,4,1,2,4,1,2,4,1,2,4,1,2,4,1,2,4,1,2,4,1,2,4,1,2,4,1
   db 4,1,2,4,1,2,4,1,2,4,1,2,4,1,2,4,1,2,4,1,2,4,1,2,4,1,2,4,1,2,4,1
   db 4,1,2,4,1,2,4,1,2,4,1,2,4,1,2,4,1,2,4,1,2,4,1,2,4,1,2,4,1,2,4,1
   db 4,1,2,4,1,2,4,1,2,4,1,2,4,1,2,4,1,2,4,1,2,4,1,2,4,1,2,4,1,2,4,1
   db 4,1,2,4,1,2,4,1,2,4,1,2,4,1,2,4,1,2,4,1,2,4,1,2,4,1,2,4,1,2,4,1
   db 4,1,2,4,1,2,4,1,2,4,1,2,4,1,2,4,1,2,4,1,2,4,1,2,4,1,2,4,1,2,4,1
   db 4,1,2,4,1,2,4,1,2,4,1,2,4,1,2,4,1,2,4,1,2,4,1,2,4,1,2,4,1,2,4,1
   db 4,1,2,4,1,2,4,1,2,4,1,2,4,1,2,4,1,2,4,1,2,4,1,2,4,1,2,4,1,2,4,1

print5x7:
   ld   de,#5800
   ld   bc,768
l102:
   ld   a,#07
   ld   (de),a
   dec   bc
   inc   de
   ld   a,b
   or   c
   jr   nz,l102
l100:
   ld   a,(hl)
   cp   10
   jr   nz,l113
   ld   a,(xx)
   cp   32
   jr   nc,l114
   ld   a,32
   ld   (xx),a
   jp   l112
l114:   cp   64
   jr   nc,l115
   ld   a,64
   ld   (xx),a
   jp   l112
l115:   cp   96
   jr   nc,l116
   ld   a,96
   ld   (xx),a
   jp   l112
l116:   cp   128
   jr   nc,l117
   ld   a,128
   ld   (xx),a
   jp   l112
l117:   cp   160
   jr   nc,l118
   ld   a,160
   ld   (xx),a
   jp   l112
l118:   cp   192
   jr   nc,l119
   ld   a,192
   ld   (xx),a
   jp   l112
l119:   cp   224
   jr   nc,l120
   ld   a,224
   ld   (xx),a
   jp   l112
l120:   xor   a
   ld   (xx),a
   ld   a,(yy)
   add   8
   ld   (yy),a
   cp   24
   jp   nz,l112
   ret
l113:   sub   32
   jp   c,l112
   ld   d,0
   ld   e,a
   push   hl
   ld   hl,font5x7
   add   hl,de
   add   hl,de
   add   hl,de
   add   hl,de
   add   hl,de
   add   hl,de
   add   hl,de
   ex   de,hl
   ld   a,(xx)
   ld   c,a
   ld   b,0
   ld   hl,scrline
   add   hl,bc
   ld   a,(hl)
   cp   1
   jr   nz,l103
   ld   b,0
   jr   l106
l103:   cp   2
   jr   nz,l104
   ld   (hl),3
   ld   b,3
   dec   c
   jr   l106
l104:   cp   3
   jr   nz,l105
   ld   (hl),2
   ld   b,2
   jr   l106
l105:   ; a=4
   ld   b,1
l106:   ld   a,c
   inc   a
   jr   nz,l111
   ld   a,(yy)
   push   af
   add   8
   ld   (yy),a
   xor   a
   ld   (xx),a
   ld   l,#FF
   pop   af
   jr   l122
l111:   ld   (xx),a
   ld   l,a
   dec   l
   ld   a,(yy)
l122:   add   a,#40
   ld   h,a
   ld   c,7
l101:   ld   a,(de)
   push   bc
   inc   b
   djnz   l108
   ; no left pixels to keep
   jr   l107
l108:   rrca
   rrca
   djnz   l109
   ; keep 2 left pixels
   ld   b,a
   ld   a,(hl)
   and   #C0
   or   b
   jr   l107
l109:   rrca
   rrca
   djnz   l110
   ; keep 4 left pixels, print next 2 pixels
   push   af
   push   hl
   and   #C0
   inc   hl
   ld   (hl),a
   pop   hl
   pop   af
   and   #0F
   ld   b,a
   ld   a,(hl)
   and   #F0
   or   b
   jr   l107
l110:   rrca
   rrca
   ; keep 6 left pixels, print next 4 pixels
   push   af
   push   hl
   and   #F0
   inc   hl
   ld   (hl),a
   pop   hl
   pop   af
   and   #03
   ld   b,a
   ld   a,(hl)
   and   #FC
   or   b
l107:   pop   bc
   ld   (hl),a
   inc   de
   inc   h
   dec   c
   jr   nz,l101
   pop   hl

l112:   inc   hl
   ld   a,(yy)
   cp   24
   jp   nz,l100

   ret

font5x7:
   include my_font.inc

print3x7:

   ret

dost:
   incbin PRESINAK.TXT

   db   0



Тут текст печатается слева-направо сверху-вниз, поэтому учитывются лишь хвосты уже напечатанных символов, находящихся слева от печатаемого символа (и то не при каждой фазе) - в боевом же варианте скорее всегда надо делать универсальную процедуру печати символа в произвольном месте экрана, задавая координаты X=0...41 и Y=0...23 - в этом случае куски старых символов стоящих справа тоже надо будет учитывать...


Attachments:
FONTS_42.zip [5.36 KiB]
Downloaded 72 times

_________________
:dj: https://mastodon.social/@Shaos
23 Jan 2023 23:39
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 47 posts ]  Go to page Previous  1, 2, 3, 4  Next

Who is online

Users browsing this forum: No registered users and 8 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.