ZX Spectrum 42 символа в строке

Старый спектрумистский форум

Moderator: Shaos

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

Re: ZX Spectrum 42 символа в строке

Post by Lavr »

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

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

Image

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

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

Вижу - ты этому рад... :ebiggrin: Коньячку чтоль лишку выпил, что в децтво впадаешь? :roll:
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Shaos
Admin
Posts: 24011
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: ZX Spectrum 42 символа в строке

Post by Shaos »

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

Re: ZX Spectrum 42 символа в строке

Post by Lavr »

Shaos wrote:Дык там в картинке экран не спектрумовский - там сильно больше 256 пикселов..

Мне со старта топика было понятно, что с размерами бяда, а ты только допёр? :roll:
Shaos wrote:иди обратно в школу учись считать на палочках :no:
Как ты штоль? :mrgreen: Да мне без надобности... :ebiggrin:

Image

Я небольшие числа ещё в садике делить и умножать умел в уме... :lol:
iLavr
User avatar
Shaos
Admin
Posts: 24011
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: ZX Spectrum 42 символа в строке

Post by Shaos »

Ну если ты уже понял, что подсунул неподготовленному читателю левую картинку вместо обещанных 42 символов в строке, то что мешает поменять её на правильную 24x42.gif?
24x42.gif
Религия агрессивной непогрешимости не иначе? :lol:
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: ZX Spectrum 42 символа в строке

Post by Lavr »

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


P.S. Но у меня конструктивное предложение есть: у тебя и Спринтер существует и эмуляторы ZX Spectrum всякие...
Выведи на эмуле текст с драйвером 42 символа в строке, чтобы геометрия была точно от ZX Spectrum -
твой скриншот и положим, как проверенный пример. Заодно и драйвер покажешь...
А на словах ты меня ни в чем не убедил.
:-?
iLavr
User avatar
Shaos
Admin
Posts: 24011
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: ZX Spectrum 42 символа в строке

Post by Shaos »

Ok, замётано - какой текст выводить будем? ;)

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

P.S. Я как раз планировал прикрутить разные выводилки для текста в свою операционку ShaOS :roll:
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: ZX Spectrum 42 символа в строке

Post by Lavr »

Shaos wrote:Ok, замётано - какой текст выводить будем? ;)
Желательно с кириллицей - на твоё усмотрение, если нет.
iLavr
User avatar
Shaos
Admin
Posts: 24011
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: ZX Spectrum 42 символа в строке

Post by Shaos »

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-й класс в этом году заканчивает):
___В начале июля, в чрезвычайно жаркое время, под вечер, один молодой человек вышел из своей каморки, которую нанимал от жильцов в С-м переулке, на улицу и медленно, как бы в нерешимости, отправился к К-ну мосту.
___Он благополучно избегнул встречи с своею хозяйкой на лестнице. Каморка его приходилась под самою кровлей высокого пятиэтажного дома и походила более на шкаф, чем на квартиру. Квартирная же хозяйка его, у которой он нанимал эту каморку с обедом и прислугой, помещалась одною лестницей ниже, в отдельной квартире, и каждый раз, при выходе на улицу, ему непременно надо было проходить мимо хозяйкиной кухни, почти всегда настежь отворенной на лестницу. И каждый раз молодой человек, проходя мимо, чувствовал какое-то болезненное и трусливое ощущение, которого стыдился и от которого морщился. Он был должен кругом хозяйке и боялся с нею встретиться.
___Не то чтоб он был так труслив и забит, совсем даже напротив; но с некоторого времени он был в раздражительном и напряженном состоянии, похожем на ипохондрию. Он до того углубился в себя и уединился от всех, что боялся даже всякой встречи, не только встречи с хозяйкой. Он был задавлен бедностью; но даже стесненное положение перестало в последнее время тяготить его. Насущными делами своими он совсем перестал и не хотел заниматься. Никакой хозяйки, в сущности, он не боялся, что бы та ни замышляла против него. Но останавливаться на лестнице, слушать всякий вздор про всю эту обыденную дребедень, до которой ему нет никакого дела, все эти приставания о платеже, угрозы, жалобы, и при этом самому изворачиваться, извиняться, лгать, - нет уж, лучше проскользнуть как-нибудь кошкой по лестнице и улизнуть, чтобы никто не видал.
https://ilibrary.ru/text/69/p.1/index.html
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: ZX Spectrum 42 символа в строке

Post by Lavr »

Ну сделай как умеешь, ты же знаешь, что я далёк от Спектрумов...


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


Image
iLavr
User avatar
Shaos
Admin
Posts: 24011
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: ZX Spectrum 42 символа в строке

Post by Shaos »

Короче попробую набросать алгоритм из головы (никуда не подглядывая)

Для начала представим как такие символы шириной в 6 пикселов располагаются в байтах:

Code: Select all

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

	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-спектрума):
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24011
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: ZX Spectrum 42 символа в строке

Post by Shaos »

Вот 32 символа в строке без переносов выведено на смеси асма и робби (nedoPC SDK):
FONTS_32.png
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: ZX Spectrum 42 символа в строке

Post by Lavr »

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

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

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

Это чтобы не изобретать лишних велосипедов и не наступать на чужие грабли.
iLavr
User avatar
Shaos
Admin
Posts: 24011
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: ZX Spectrum 42 символа в строке

Post by Shaos »

Ты думаешь Alone Coder (автор первого примера вывода букв 6x8 в списке) будучи школьником в 90х программировал лучше меня теперешнего? Ну может быть :roll:

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

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

Re: ZX Spectrum 42 символа в строке

Post by Lavr »

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

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

Я хочу попробовать применить этот режим в мой уже довольно старый проект.
Там как раз растр 256х192! А то при 32 символах в строке его и доделывать нет желания... :-?
iLavr
User avatar
Shaos
Admin
Posts: 24011
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: ZX Spectrum 42 символа в строке

Post by Shaos »

Поcмотрим - я думаю мой вариант с 4 заранее сдвинутыми версиями шрифта и перетасовкой полосок будет самый быстрый, но сначала надо попробовать "в лоб"...

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

Вот мои 42 символа в строке для ZX - пока сделал не сильно оптимально, но зато даже перенос строки есть :)
FONTS_42.png
Основная проблема, что при выводе сдвинутого символа надо оставлять то что было в байте слева от него, ну и кроме того символ может залезать на соседний байт

Ассемблерный исходник под спойлером:

 FONTS_Z80.asm

Code: Select all

	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 - в этом случае куски старых символов стоящих справа тоже надо будет учитывать...
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net