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

User Tag List

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

Тема: LPRINT USR

  1. #1
    Veteran Аватар для JeRrS
    Регистрация
    02.02.2005
    Адрес
    г. Екатеринбург
    Сообщений
    1,301
    Спасибо Благодарностей отдано 
    58
    Спасибо Благодарностей получено 
    106
    Поблагодарили
    74 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию LPRINT USR

    0
    Последний раз редактировалось JeRrS; 06.01.2013 в 18:35.
    Группа в ВК, посвященная кассетным версиям игр для спектрума
    В коллекции:GRM-128 (YM+TR-DOS), Кворум 128+, Дельта 128, Эксперт-006, Рифей-01, Квант V3.а, Квант (Didaktik), Спектр БК-001, Sintez-M (Intercompex), Компаньон-2 (V2.2)

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

  3. #2
    Guru Аватар для null_device
    Регистрация
    26.09.2009
    Адрес
    г. Красноярск
    Сообщений
    3,095
    Спасибо Благодарностей отдано 
    21
    Спасибо Благодарностей получено 
    83
    Поблагодарили
    67 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    В каком режиме пробовали запускатьпрограмму? Насколько я знаю, команда LPRINT выводит данные через третий поток (аналогично PRINT #3). Однако, некоторые интерфейсы перехватывают это обращение (например LPRINT III) и обрабатывет его по-своему. Из-за чего, некоторые "фичи" для 48 спектрума с его ZX PRINTER'ом ведут к разного рода "глюкам". Также, вероятно, акутальна "занятость" буфера принтера в 128К модели.
    Когда есть, но не знаешь где - это все равно, что нету.

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

    По умолчанию

    Решил я очень-когда-то эту задачу, действительно, путём подмены точки входа в процедуру печати и перенаправлением на фиктивный драйвер принтера. Так что идею вы поняли правильно.

  5. #4
    Veteran Аватар для Destr
    Регистрация
    26.03.2008
    Адрес
    Питкяранта
    Сообщений
    1,802
    Спасибо Благодарностей отдано 
    249
    Спасибо Благодарностей получено 
    113
    Поблагодарили
    87 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Такие вещи (типа LPRINT) работают не всегда.
    Точнее не на всех тачках.
    Зависит от типа контроллера принтера (если он вообще есть).
    Была фича при помощи LPRINT выводить буквы двойной высоты, но если на Composite48 всё работало на ура, то на Скорпе - наглухо зависало. На Пентагоне писало ошибку.
    В общем это надо глубоко ковырять как работает команда и смотреть где её клинит (а клинит, повторю, в зависимости от железа)

  6. #5
    Guru Аватар для null_device
    Регистрация
    26.09.2009
    Адрес
    г. Красноярск
    Сообщений
    3,095
    Спасибо Благодарностей отдано 
    21
    Спасибо Благодарностей получено 
    83
    Поблагодарили
    67 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Для начала, функция USR nn - выполнение машинно-кодовой процедуры с адреса nn, по выходе из которой результатом будет являться состояние регистровой пары BC. Т.о. связка операторов LPRINT USR nn, должна приводить к выполнению кодовой последовательности (вероятнее всего перенастраивающей стандартный режим работы с принтером), а значение регистров BC использоваться при выполнении перехода на модифицированную процедуру обслуживания принтера.

    Цитата Сообщение от Destr Посмотреть сообщение
    Была фича при помощи LPRINT выводить буквы двойной высоты
    Также работала на Делта С 48. Там использовалась сист. переменная для печати на принтере и оператор LPRINT, точнее LPRINT TAB n. Буквы получались высотой на одну из третей экрана.
    Последний раз редактировалось null_device; 31.10.2010 в 19:11.
    Когда есть, но не знаешь где - это все равно, что нету.

  7. #6
    Guru
    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    13,555
    Спасибо Благодарностей отдано 
    1,219
    Спасибо Благодарностей получено 
    1,754
    Поблагодарили
    683 сообщений
    Mentioned
    67 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от null_device Посмотреть сообщение
    Также работала на Делта С 48. Там использовалась сист. переменная для печати на принтере и оператор LPRINT, точнее LPRINT TAB n. Буквы получались высотой на одну из третей экрана.
    У меня была дельта-с, чего-то не помню такого.
    Зато помню, что переключение с русского на латинский шрифт было, кажется, по close и open

  8. #7
    Banned
    Регистрация
    25.01.2005
    Адрес
    Miass, Chelyabinsk region
    Сообщений
    4,094
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    сист. переменная - адрес буфера принтера. если ее поставить на экран, 256 байт заполнятся графич. видом печатаемой строки. после этого оно захочет напечататься на принтере, и если сигнал "бизи" не активен, оно благополучно скипается и прога шуршит дальше. а вот если бизи установлен - был зависон...

  9. #8
    Veteran
    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    1,055
    Спасибо Благодарностей отдано 
    219
    Спасибо Благодарностей получено 
    47
    Поблагодарили
    31 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    А что если заменить LPRINT USR nnn на RANDOMIZE USR nnn или LET l=USR nnn?

    Даю 1 против 10 что команда LPRINT используется в данном случае просто для того, чтобы "поглотить" результат функции USR, но основной эффект от USR как правило заключается не в результате (целом числе из диапазона 0-65535), а в процессе (который зависит от машинной программы, находящейся по адресу nnnn).

    Но если требуется лишь "поглотить" результат USR, то с тем же успехом для этих целей вместо LPRINT могут использоваться команды RANDOMIZE, RESTORE, LET и так далее - любые команды, воспринимающие целые числа в качестве аргумента и не приводящие к побочным эффектам. Наиболее безопасно использовать LET чтобы поместить результат в какую-нибудь ненужную переменную, потому что побочные эффекты все-таки есть как от RANDOMIZE, так и от RESTORE, и они иногда неприемлемы. Например, в одной из моих программ не работала генерация случайных чисел из-за того, что я в ней использовал RANDOMIZE USR.

  10. #9
    Guru Аватар для null_device
    Регистрация
    26.09.2009
    Адрес
    г. Красноярск
    Сообщений
    3,095
    Спасибо Благодарностей отдано 
    21
    Спасибо Благодарностей получено 
    83
    Поблагодарили
    67 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Врятли, скомпилированная программа сначала делает rst 20h, потом несколько callов, операции с регистрами после вышеописанное повторяется еще несколько раз.
    При вызове любым другим оператором фукции USR, один фиг выдает nonsens in basic..
    Когда есть, но не знаешь где - это все равно, что нету.

  11. #10
    R.I.P. Аватар для VNN_KCS
    Регистрация
    11.10.2007
    Адрес
    Донецкая обл. г.Енакиево
    Сообщений
    2,316
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Wlodek Посмотреть сообщение
    Решил я очень-когда-то эту задачу, действительно, путём подмены точки входа в процедуру печати и перенаправлением на фиктивный драйвер принтера. Так что идею вы поняли правильно.
    Я конечно извиняюсь. А простейшую прогу печати нельзя сделать? Даже с буквами двойной, и более высотой? Зачем LPRINT? Тем паче, что не на всех клонах работает.

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

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

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

Похожие темы

  1. Измененная прошивка Lprint III
    от KALDYH в разделе Память
    Ответов: 6
    Последнее: 28.12.2013, 11:38
  2. Теневик по схеме из Lprint #13
    от valeron в разделе Несортированное железо
    Ответов: 2
    Последнее: 09.04.2008, 00:12

Ваши права

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