ZXNet эхоконференция «code.zx»


тема: Полезные наработки



от: Алексей Валерьевич Акатов
кому: All
дата: 09 May 2006
Hello, All Предлагаю в этой теме публиковать интересные решения касательно Spectrum. Я тоже по мере появления свободного времени буду выкладывать свои старые (т.к. новых нет и не может быть) интересные наработки. Воспроизведение магнитофонной записи через бипер Спектрума: ┌─- code ─── DI IN A, (254) RRA RRA OUT (254), A JR $ - 8 └── code ─── Откомпилированное: ┌─- code ─── 243 219, 254 31 31 211, 254 24, 248 └── code ─── Идея: берем бит состояния магнитофона и посылаем его на бипер. В свое время я делал специальные загрузчики к своим программам, которые выполняли подобный код в течении нескольких секунд, а сразу после загрузчика на ленте проговаривалось название программы. Получалось, что после загрузки очень маленького загрузчика Спектрум говорил (!) название программы с достаточно высоким качеством звука. Еще этот метод позволяет защитить программу от копирование с помощью спец софта (copy и т.п.), т.к. если за загрузчиком вместо речи сразу будет следовать следующий блок, то он окажется пропущенным (из-за паузы в несколько секунд).

от: Алексей Валерьевич Акатов
кому: All
дата: 09 May 2006
Hello, Arigato Hебольшой драйвер Sinclair-джойстиков Полезным он окажется при программировании на Бейсике. В отличии от Kempston джойстика, который можно опросить через порт 31 (если память не изменяет) прямо Бейсик-командой, с Sinclair джойстиком дела обстоят хуже. Облегчит эту задачу преведенный драйвер. Используется формат 1,2,3,4,5 для Sinclair II и 6,7,8,9,0 для Sinclair I. Код самого драйвера (адрес 65129): ┌─- code ─── ORG FE69h PUSH AF PUSH BC LD B, 00011111b LD A, 239 IN A, (254) AND B XOR B LD (23670), A LD A, 247 IN A,(254) AND B XOR B LD (23671), A POP BC POP AF JP 56 └── code ─── Откомпилированный вариант (для упрощения непосредственного ввода): ┌─- code ─── 245 197 6, 31 62, 239 219, 254 160 168 50, 118, 92 62, 247 219, 254 160 128 50, 119, 92 193 241 195, 56, 0 └── code ─── Для активации работы драйвера используем такую подпрограмму: ┌─- code ─── PUSH AF DI LD A, 9 LD I, A IM2 EI POP AF RET └── code ─── Откомпилированная: 254, 243, 62, 9, 237, 71, 237, 94, 251, 241, 201 Для остановки работы драйвера исполняем следующую процедуру: ┌─- code ─── DI IM1 EI RET └── code ─── Откомпилированная: 243, 237, 86, 251, 201 В результате состояние джойстика Sinclair I будет записываться в системную переменную SEED (адрес: 23670), а Sinclair II в SEED+1 (23671). О состоянии джойстика говорят отдельные биты: стрельбы - D0, вверх - D1, вниз - D2, вправо - D3, влево - D4. Если бит установлен - клавиша нажата, если сброшен - не нажата. Т.к. системная переменная SEED используется генератором случайных чисел, то может оказаться необходимым изменить адрес записи состояний джойстиков (если это нарушит нормальную генерацию псевдослучайных чисел).

от: Wladimir Bulchukey
кому: All
дата: 09 May 2006
Hello, Arigato Ari> Идея: берем бит состояния магнитофона и посылаем его на бипер. В свое Ari> время я делал специальные загрузчики к своим программам, которые Ari> выполняли подобный код в течении нескольких секунд, а сразу после Ari> загрузчика на ленте проговаривалось название программы. Получалось, Ari> что после загрузки очень маленького загрузчика Спектрум говорил (!) Ari> название программы с достаточно высоким качеством звука. Еще этот Ari> метод позволяет защитить программу от копирование с помощью спец Ari> софта (copy и т.п.), т.к. если за загрузчиком вместо речи сразу будет Ari> следовать следующий блок, то он окажется пропущенным (из-за паузы в Ari> несколько секунд). Вопрос: при обычной загрузке программы на исполнение её загрузчик как-то пытается распознать речевой фрагмент или просто делает паузу на несколько секунд?

от: Алексей Валерьевич Акатов
кому: All
дата: 09 May 2006
Hello, Wlodek Wlo> Вопрос: при обычной загрузке программы на исполнение её загрузчик Wlo> как-то пытается распознать речевой фрагмент или просто делает паузу Wlo> на несколько секунд? В приведенном мною примере зацикливание бесконечное, т.е. через бипер будет играть все, что поступает с магнитафона. Для загрузчика надо сделать не бесконечный цикл, а подобрать такое количество итераций, что бы успеть проговорить запись речи. P.S. Распозновать ни кто ничего не пытается (это не подсилу Speccy), просто то, что есть на ленте, то и воспроизводится...

от: Robus
кому: All
дата: 10 May 2006
Hello, Arigato А у меня то же есть весёлая процедурка, интересно кто-нибудь узнает что это за звук, который она выдаст ? ┌─- CODE ─── LD HL,0 LD A,L M1 RRCA RRCA AND 15 LD E,A LD D,0 PUSH HL LD L,(HL) CALL 949 POP HL DEC L JR NZ,M1 RET └── CODE ─── И ещё вот эта: ┌─- CODE ─── LD HL,0 LD DE,1 M1 PUSH HL LD L,(HL) PUSH DE CALL 949 POP DE POP HL DEC L JR NZ,M1 RET └── CODE ───

от: TomCaT
кому: All
дата: 10 May 2006
Hello, Arigato Ari> Получалось, что после загрузки очень маленького загрузчика Спектрум Ari> говорил (!) название программы с достаточно высоким качеством звука. Ari> Еще этот метод позволяет защитить программу от копирование с помощью Ari> спец софта (copy и т.п.), т.к. если за загрузчиком вместо речи сразу Ari> будет следовать следующий блок, то он окажется пропущенным (из-за Ari> паузы в несколько секунд). То-то я думал, зачем дискованый "Armageddon Man" что-то говорит... красиво, конечно, но это -- бывшая tape-защита... яясно :)

от: Алексей Валерьевич Акатов
кому: All
дата: 10 May 2006
Hello, Robus Rob> А у меня то же есть весёлая процедурка, интересно кто-нибудь узнает Rob> что это за звук, который она выдаст ? Если не трудно, приведи откомпилированный вариант в десятичной системе, что бы с помощью POKE ввести. Просто ради такой маленькой проги даже ассемблер запускать не хочется, а переводить вручную лень...

от: Robus
кому: All
дата: 11 May 2006
Hello, Arigato Ari> Если не трудно, приведи откомпилированный вариант в десятичной Ari> системе, что бы с помощью POKE ввести. Просто ради такой маленькой Ari> проги даже ассемблер запускать не хочется, а переводить вручную Ari> лень... Hу зачем же поками, сделаем прямо загрузчик, в моём асме это всего 3 минуты. =) Файл: Less-003.zip http://zx.pk.ru/attachment.php?attachmentid=3186

от: Valery Grigoriev
кому: All
дата: 14 May 2006
Hello, Arigato Ari> Воспроизведение магнитофонной записи через бипер Спектрума: Ari> Код: Ari> DI Ari> IN A, (254) Ari> RRA Ari> RRA Ari> OUT (254), A Ari> JR $ - 8 А я быстрее, причём намного быстрее 1) Вариант без всяких изворотов - это твой 2) вариант с изворотами - в D заполняем #40, после чего если добавить после in a,(254) add a,d то во флаге переноса будет значение нужного бита (кто не верит пусть проверит) Тогда DI IN A, (254) ADD A,D OUT (254), A JR $ - 7 3) И это не предел Переход всегда осуществляется по одному и тому же адресу... а значит можно его запрограммировать и ускориться Даже если просто вголую заменить JR на JP то уже каждый цикл будет на 2 такта быстрее (10 тактов для JP и 12 тактов для JR) DI LD HL,METKA METKA:IN A, (254) ADD A,D OUT (254), A JP (HL) 4) И это не предел, можно ещё уменьшить затраты (как?). Просто! Развернём DI LD HL,METKA METKA:IN A, (254) ADD A,D OUT (254), A IN A, (254) ADD A,D OUT (254), A IN A, (254) ADD A,D OUT (254), A JP (HL) В этом случае накладные расходы связанные с переходом JP (HL) будут минимальные, и быстрее проигрывать состояние УХА ничего не будет (по крайней мере напрямую). А вот если работать через память (вначале оцифровывать а затем проигрывать)там можно уж совсем быстро (за 21 такт), но это уже будет совсем некороткая процедурка (((-; А если просто (заранее оцифрованный звук) выводить там и до 12 тактов можно дорасти (((-; Если заинтересовались читайте мою статью, в 3-Bit была первая часть, а вторая часть пока неопубликована.




Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Что нового - О новинках в Минске. Пароли к игре The Last Courier.
Ferrum! - Контроллер Kempston-mouse.
Наставления - Когда берешь чужую грудь, Не забывай ее вернуть...
BBS NEWS - Графика работы станций.
Мозаика - Спектрум в Internet.

В этот день...   8 мая