nabbla (nabbla1) wrote,
nabbla
nabbla1

Categories:

QuatCore: чего-то мы перемудрили с print

Или недомудрили, не понял пока. Но что-то не то!

Вот мы решили не заморачиваться с упаковыванием по 2 символов в каждом слове, поэтому в каждом слове данных выходит 1 свободный байт. А потом какого-то рожна решили, что каждая строка должна оканчиваться ЕЩЁ ОДНИМ СЛОВОМ, конкретно -32768. Тут уж "или крест сними..." - мы либо утрамбовываемся как следует, но тогда сопровождать каждый символ флагом "это последний символ" - жуткое расточительство. А если мы этого не делаем - то у нас для этих флагов места - ну просто завались!

А то как начал в "бортовую программу" закладывать все строки - и свободное пространство в 256 словах как-то резко начало заканчиваться :) Хоть на последнем символе поэкономим!


В общем, вместо такого объявления строки:
DistStr	dw	'Д','а','л','ь','н','о','с','т','ь',':',' ',-32768


предлагается такое:
DistStr	dw	'Д','а','л','ь','н','о','с','т','ь',':',f' '


где f' ' - это "цельный" символ, тоже объявленный в Win1251.inc:

	f' '		EQU	0x8020

так сказать "финальный пробел", final frontier однако.

А чтобы такую строку выводить, надо подправить процедуру print:

	;X указывает на начало строки текста
	;последний символ обозначается как отрицательное число (старший бит слова - единичка)
	;меняет значение регистра Acc
	print proc
				[SP++]	i
				i		0
		@@start:	UART0		[X+i]
				Acc		[X+i]
				i++		0
				SUB		0
				JGE		@@start
				i		[--SP]
				JMP		[--SP]
	print endp


Длина процедуры не изменилась - хоть здесь нет хитрого трюка с ABS, но зато нет лишних переходов туда-сюда.

Разве что таким способом не получится отобразить пустую строку - один символ он всё равно отправит! Но мы и не собираемся отображать пустые строки - зачем нам это!
Tags: ПЛИС, программки, работа, странные девайсы
Subscribe

  • Нахождение двух самых отдалённых точек

    Пока компьютер долго и упорно мучал симуляцию, я пытался написать на ассемблере алгоритм захвата на ближней дистанции. А сейчас на этом коде можно…

  • Слишком общительный счётчик

    Вчера я чуть поторопился отсинтезировать проект,параметры не поменял: RomWidth = 8 вместо 7, RamWidth = 9 вместо 8, и ещё EnableByteAccess=1, чтобы…

  • Балансируем конвейер QuatCore

    В пятницу у нас всё замечательно сработало на симуляции, первые 16 миллисекунд полёт нормальный. А вот прошить весь проект на ПЛИС и попробовать "в…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 1 comment