Важная информация

User Tag List

Показано с 1 по 9 из 9

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

  1. #1
    Member Аватар для Arigato
    Регистрация
    05.05.2006
    Адрес
    Ростов-на-Дону
    Сообщений
    112
    Благодарностей: 57
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Полезные наработки

    Предлагаю в этой теме публиковать интересные решения касательно Spectrum. Я тоже по мере появления свободного времени буду выкладывать свои старые (т.к. новых нет и не может быть) интересные наработки.

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

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2
    Member Аватар для Arigato
    Регистрация
    05.05.2006
    Адрес
    Ростов-на-Дону
    Сообщений
    112
    Благодарностей: 57
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Небольшой драйвер Sinclair-джойстиков
    Полезным он окажется при программировании на Бейсике. В отличии от Kempston джойстика, который можно опросить через порт 31 (если память не изменяет) прямо Бейсик-командой, с Sinclair джойстиком дела обстоят хуже. Облегчит эту задачу преведенный драйвер. Используется формат 1,2,3,4,5 для Sinclair II и 6,7,8,9,0 для Sinclair I.
    Код самого драйвера (адрес 65129):
    Код:
    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
    Откомпилированный вариант (для упрощения непосредственного ввода):
    Код:
    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
    Для активации работы драйвера используем такую подпрограмму:
    Код:
    PUSH AF
    DI
    LD A, 9
    LD I, A
    IM2
    EI
    POP AF
    RET
    Откомпилированная: 254, 243, 62, 9, 237, 71, 237, 94, 251, 241, 201
    Для остановки работы драйвера исполняем следующую процедуру:
    Код:
    DI
    IM1
    EI
    RET
    Откомпилированная: 243, 237, 86, 251, 201
    В результате состояние джойстика Sinclair I будет записываться в системную переменную SEED (адрес: 23670), а Sinclair II в SEED+1 (23671). О состоянии джойстика говорят отдельные биты: стрельбы - D0, вверх - D1, вниз - D2, вправо - D3, влево - D4. Если бит установлен - клавиша нажата, если сброшен - не нажата. Т.к. системная переменная SEED используется генератором случайных чисел, то может оказаться необходимым изменить адрес записи состояний джойстиков (если это нарушит нормальную генерацию псевдослучайных чисел).

  4. #3
    Guru
    Регистрация
    15.01.2005
    Адрес
    USSR
    Сообщений
    2,038
    Благодарностей: 331
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

  5. #4
    Member Аватар для Arigato
    Регистрация
    05.05.2006
    Адрес
    Ростов-на-Дону
    Сообщений
    112
    Благодарностей: 57
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Wlodek
    Вопрос: при обычной загрузке программы на исполнение её загрузчик как-то пытается распознать речевой фрагмент или просто делает паузу на несколько секунд?
    В приведенном мною примере зацикливание бесконечное, т.е. через бипер будет играть все, что поступает с магнитафона. Для загрузчика надо сделать не бесконечный цикл, а подобрать такое количество итераций, что бы успеть проговорить запись речи.
    P.S. Распозновать ни кто ничего не пытается (это не подсилу Speccy), просто то, что есть на ленте, то и воспроизводится...

  6. #5
    Master
    Регистрация
    04.03.2005
    Адрес
    Ukraine, Kiev
    Сообщений
    792
    Благодарностей: 295
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Talking

    А у меня то же есть весёлая процедурка, интересно кто-нибудь узнает что это за звук, который она выдаст ?
    Код:
                  LD HL,0
    M1            LD A,L
                  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
    И ещё вот эта:

    Код:
                  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
    Последний раз редактировалось Robus; 12.05.2006 в 19:34.
    AAA

  7. #6
    Veteran Аватар для TomCaT
    Регистрация
    25.06.2005
    Адрес
    Одесса
    Сообщений
    1,683
    Благодарностей: 219
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Arigato
    Получалось, что после загрузки очень маленького загрузчика Спектрум говорил (!) название программы с достаточно высоким качеством звука. Еще этот метод позволяет защитить программу от копирование с помощью спец софта (copy и т.п.), т.к. если за загрузчиком вместо речи сразу будет следовать следующий блок, то он окажется пропущенным (из-за паузы в несколько секунд).
    То-то я думал, зачем дискованый "Armageddon Man" что-то говорит... красиво, конечно, но это -- бывшая tape-защита... яясно
    Помни. Только на компьютере можно семь раз Cut, а один - Format. В реале все иначе. (c)
    Власть людей сильнее, чем люди у власти.
    Чем меньше мы смотрим на мир, тем больше задумываемся о нем. (c)

    Скрытый текст

    Can you help Robin in his quest for the silver arrow? (c) Odin "Robin of the Wood"
    Мы все немного режем по дереву, а потом собираем корабли в бутылках.
    Is it the same old story you are going to tell me
    or is it the old story telling me and you we are the same?
    http://www.sky.od.ua/~ptsk
    [свернуть]


  8. #7
    Member Аватар для Arigato
    Регистрация
    05.05.2006
    Адрес
    Ростов-на-Дону
    Сообщений
    112
    Благодарностей: 57
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Robus
    А у меня то же есть весёлая процедурка, интересно кто-нибудь узнает что это за звук, который она выдаст ?
    Если не трудно, приведи откомпилированный вариант в десятичной системе, что бы с помощью POKE ввести. Просто ради такой маленькой проги даже ассемблер запускать не хочется, а переводить вручную лень...

  9. #8
    Master
    Регистрация
    04.03.2005
    Адрес
    Ukraine, Kiev
    Сообщений
    792
    Благодарностей: 295
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Talking

    Цитата Сообщение от Arigato
    Если не трудно, приведи откомпилированный вариант в десятичной системе, что бы с помощью POKE ввести. Просто ради такой маленькой проги даже ассемблер запускать не хочется, а переводить вручную лень...
    Ну зачем же поками, сделаем прямо загрузчик, в моём асме это всего 3 минуты. =)
    Вложения Вложения
    AAA

  10. #9
    Veteran Аватар для GriV
    Регистрация
    18.02.2005
    Адрес
    Набережные Челны
    Сообщений
    1,574
    Благодарностей: 104
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Arigato
    Воспроизведение магнитофонной записи через бипер Спектрума:
    Код:
    DI
    IN A, (254)
    RRA
    RRA
    OUT (254), A
    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 была первая часть, а вторая часть пока неопубликована.
    Биты рулят лучше байтов, байты рулят шустрее!
    View, Звук, Цвет

  11. Этот пользователь поблагодарил GriV за это полезное сообщение:
    Arigato (20.11.2011)

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Полезные ссылки
    от GriV в разделе Форум
    Ответов: 6
    Последнее: 22.10.2011, 10:09

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •