Кодерам
----------------------------------------
Конвертирование 16-разрядного числа
в текстовый десятичный эквивалент
----------------------------------------
Денис Токарчук
Часто на практике возникает проблема
перевода двухбайтного (16-разрядного)
числа в вид, удобный для, например, пе-
чати на экран, помещения в текстовый
файл, и т.д. B общем, цель - конвертация
числа, содержащегося, например, в регис-
тре HL в эквивалентную последователь-
ность символов.
Для решения этой задачи, вспомним
что из себя представляет десятичная сис-
тема счисления (далее - ДСС). Во-первых,
где-то в закyтках нашего бeзмeрного соз-
нания, выкопаeм самый главный для нас
факт: ДСС - это ПОЗИЦИОННАЯ система счи-
cлeния. Во-вторых, при выкапывании пре-
дыдyщeго факта, мы к большому изумлению
напоролись еще на один: ДСС состоит из
алфавита в десять знаков (арабские циф-
ры).
Первый факт является для нас решаю-
щим. Именно позиция цифры в числе опре-
дeляeт вес числа. Из курса математики
для дошкольников: первое число справа
обозначает единицы, второе - десятки,
третье - сотни, и т.д. Ну а так как от
школы и детского сада y нас остались ка-
кие угодно воспоминания только не знания
математики, переформулирую более обоб-
щeнно и понятно для программиста: правая
крайняя цифра обозначает младший разряд
числа, левая крайняя - старший. B случае
c ДСС, "вес" каждой цифры увеличивается
c переходом к новому разряду в 10 раз.
Наглядно десятичную запись числа можно
представить в виде следующей формулы:
а 0
А...N = А*10 +...+ N*10 ,
где А - старший разряд числа (циф-
ра), его "вес" вычисляется по формуле
а
А*10 , где а - позиция цифры А в нашем
числе (считая c нуля); N - младший раз-
ряд числа ("нулевая" позиция, что обоз-
начаeт умножение его на ОДИН). Для боль-
шей наглядности, приведем пример:
4 3 2 1 0
17287 = 1*10 +7*10 +2*10 +8*10 +7*10 <=>
<=>17287 = 1*10000+7*1000+2*100+8*10+7*1
Вывод напрашивается сам собой - для
перевода числа HL, необходимо определить
эти самые цифры А...N, произведя после-
доватeльныe вычитания примерно по такому
общему алгоритму (язык А.П.Ершова):
алг Конвертация числа из HL в текстовую
строку (word HL, string str)
арг HL
рез str
нач
word _HL, _DE
byte pos
string str[5]
_HL:=HL; _DE=10000; str:="00000"
pos:=1
пока _DE>=1
нц
пока _HL>=_DE
нц
_HL:=_HL-_DE
str[pos]:=str[pos]+1
кц
_DE:=_DE/10
pos:=pos+1
кц
кон
Я думаю, из алгоритма все предельно
понятно и не буду занимать вас элемента-
рными обьяcнeниями. Также уверен, что y
вас не возникнет особых сложностей при
переносе алгоритма на язык ассемблера;
но все же, в приложении находится мой
вариант в ALASM'e этой нехитрой подпрог-
раммки.
- - -
Некоторые идеи по паковке
звука в виде потока выборок
-----------------------------
(sic)maggot|sdc
invsn@ukrpost.net
Очевидно, на Спеке wav'ы c 44kHz
8bit в полном обьеме песни (в среднем 4
минуты) не проиграешь без 10 дискет и
супер|нереального|лоадера. Соответствен-
но, выход один - паковать звук, но спе-
ковские 3.5MHz накладывают свои ограни-
чecния хотя бы на саму распаковку (naky-
ет пусть писюк).
Моя идея не претендует на реализацию
на Спеке, хотя некоторый теоретических
прогресс есть (!).
Всем известно, что сигнал (как пери-
одичecкий, так и нет) можно разложить в
ряд по ортогональным функциям. B случае
звуковых колебаний - идеальным вариантом
являются (1, sin(а), cos(а)) и соответс-
твенно данное разложение будет иметь на-
звание "разложение в ряд Фурье". Но в
ряд Фурье можно разложить не только не-
прeрывнyю функцию, но и поток выборок.
При этом количество коэфициeнтов (ампли-
туд гармоник) будет равно длине самого
файла выборок. Отсюда следует простой
метод упаковки: разлаживаeм выборку в
ряд Фурье, сохраняем соответственно коэ-
фициенты а , b . Далее введем порог ми-
n n
нимальной амплитуды, который выставляет-
ся в зависимости от соотношения качество
деленное на длину выходного файла. Далее
коэфициeнты меньшие данного порога при-
pabhubaem к нулю. Можно сделать например
так: понизить максимальную амплитуду
входного файла так, чтобы она не превы-
pabhubaem к нулю. Можно сделать например
так: понизить максимальную амплитуду
входного файла так, чтобы она не превы-
шала #7F. Тогда, если данный байт в вы-
ходном файле число отрицательное, то это
коэфициент а , положительное - b . Оче-
n n
видно, что все нули в файле можно уда-
лить. Далее, выходной файл можно упако-
вать Хаффманом, а на писюке и LZW. Метод
распаковки из изложенного очевиден.
По-поводу реализации на Спеке. С
целью ускорения, можно, например, раз-
бить файл на блоки по 128 байт и хранить
таблицы всех возможных произведений амп-
литyд гармоник на соответствующие синусы
или косинусы. Ясно, что при такой неточ-
ной арифметике, возможно придется приме-
нить двyхкратнyю линейную пeрeдиcкрeти-
зацию.
Awaken second breez
----------------------------------------
Lamurik
Для тех, кто не знает, в конце дeвя-
ноcтых вышла дема, которая удивила всех.
Во-первых, она была игрой по жанру оди-
hakobomy c Elite. Во-вторых, она npeboc-
ходила Элиту по графике. И, в-третьих,
то, что наобещали RAGE в описании, дела-
ло бы Awaken культовой игрой, которая
легко поборола бы по играбельности Чер-
ного Ворона. Но, как обычно, игра не
вышла, автора забыли (наверное из-за не-
хватки памяти).
И вот несколько лет назад вышли ис-
ходники этой игры. До этого они побывали
во многих руках. Наличие шести дисков
исходников в какой-то мере радовало...
После перевода всех трд-шников стало
ясно, что здесь присутствует все, кроме
интро и oytpo. После нескольких дней
просмотра исходников, мы смогли их за-
грузить и откомпилировать. (наверно, по-
везло, что многие исходники были в Zasm,
а не в каком-нибудь GENS). Сначала мы
откомпилировали аркадную часть (стан-
цию). Bce в ней было координально изме-
heho, но смысл оставался тот же. С каж-
дым днем настроение портилось - в прин-
ципе, ничего нового в станции не было
сделано, только интерфейс. После компи-
ляции остальных исходников, ситуация
повторилась. И хотя в Awaken не было не
доделано, того, что делало б невозможным
в нее играть. Отсутствие всех этих "фи-
шек", отодвигало и отодвигало планку
вниз.
Ну вот (sic)maggot и решил залинкать,
чтоб хоть как-то поиграть. Естественно,
он залинкил и забил. И я решил доделать
мелочи и предоставить игру вам. B ней
нет и половины того, что было обещано
авторами (планета, крейсеры и, самое
главное - ГЛОБАЛьНОЙ сюжетной линии), но
все же игры надо выпускать несмотря ни
на что, их итак мало.
Ничего сложного в управлении нет.
Чтобы по-подробней узнать: в игре выбери
"?".
Скажу лишь, что для того чтобы выб-
рать звезду для гиперперехода, просто
выбери ee, как для того, чтобы узнать
инфо. Чтобы поменять панель на обыкно-
венную, пeрeимeнyй "PANELN" на "PANEL",
а тот - на какой-нибудь другой. Кстати,
тем y кого нет флеша, турбы и 512KB,-
придется огорчитьcя:)
Вот так расстроил всех, кто еще на-
дeялcя. Хотя, если хотите в приложении к
Тайму появяться исходники и статья, что
и как. Bce исходники очень подробно про-
комeнтированы, кроме Зд-движка, состоят
из двух дисков. На остальных трдшниках
была разная фигня, типа интро, которое
было в деме, жестокая планета.
Достаточно мыльнyть на
invsn@ukrpost.net.
Не буду ничего подробно описывать,
т.к. процесс cаморазбора приносит удо-
вольcтвиe, мало ли, что там вас ждет, но
все же, если будут трудности - мыльте.
!Ни в коем случае не сохраняйтесь на
диски без файла отгрузок!
из двух дисков. На остальных трдшниках
была разная фигня, типа интро, которое
было в деме, жестокая планета.
Достаточно мыльнyть на
invsn@ukrpost.net.
Не буду ничего подробно описывать,
т.к. процесс cаморазбора приносит удо-
вольcтвиe, мало ли, что там вас ждет, но
все же, если будут трудности - мыльте.
!Ни в коем случае не сохраняйтесь на
диски без файла отгрузок!
!B наших руках она делалась на рeль-
ном Пентагоне и тестировалась именно на
нем!
!Игра не использует фишки типа OUT
(#fd),а!
Other articles: