User Tag List

Страница 3 из 4 ПерваяПервая 1234 ПоследняяПоследняя
Показано с 21 по 30 из 31

Тема: вывод в порт

  1. #21

    Регистрация
    15.07.2009
    Адрес
    Череповец
    Сообщений
    1,803
    Спасибо Благодарностей отдано 
    178
    Спасибо Благодарностей получено 
    65
    Поблагодарили
    50 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    API, не API...
    Было сказано, что на тот момент в офиц. документации Beta Disk оно не было его описано. Эти "тайные знания" были в нашей литературе описаны, а уж как до них докопались не знаю.

    - - - Добавлено - - -

    вот тут как раз обсуждали: https://zx-pk.ru/threads/23641-3d2f-ili-3d30/page1.html
    ZX-Evo Rev. C4 (Double-config) / VDAC2 / NeoGS / ZX-Multisound / NemoIDE / ZiFi
    Scorpion ZS 256 Turbo+ (Light) / GMX / ZXM-GS / TSFM / SMUC / ZXKM / Gotek

    Этот пользователь поблагодарил Gutten за это полезное сообщение:

    Barmaley_m(18.08.2024)

  2. #22

    Регистрация
    30.01.2006
    Сообщений
    1,921
    Спасибо Благодарностей отдано 
    73
    Спасибо Благодарностей получено 
    119
    Поблагодарили
    80 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от SfS Посмотреть сообщение
    Ок. Я не против. Пускай "защита". Но тогда сделайте вы НОРМАЛЬНОЕ API (в данном случае из нескольких команд) для доступа к произвольному порту из ПО пользователя.

    Там же надо то релизовать всего то IN A,(C); ret и OUT (C),A; ret. Всё.
    так есть такой api, заносишь адрес нужной инструкции IN или OUT в стек и делаешь jp в трдос окно, оттуда делается ret на инструкцию и обратно.
    Там только с одним портом небольшая свистопляска требовалась, помоему системным #FF.
    ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
    ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet

  3. #23

    Регистрация
    19.01.2005
    Адрес
    Наро-фоминск
    Сообщений
    2,012
    Спасибо Благодарностей отдано 
    511
    Спасибо Благодарностей получено 
    207
    Поблагодарили
    126 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от goodboy Посмотреть сообщение
    вспомнилось интро



    тут через out (#FC),a

    одновременно переключается страница/экран/цвет бордюра
    А что за интро ?
    Haiku OS - духовный последователь AmigaOS! Welcome на борт MK4 с зоопарком операционных систем, в наш космо-десант, Special Forces, в крайний отсек корабля, уходящего в гиперпрыжок, на поиски Раккслы и эры Встретившихся рук, в Час Быка, Звездное Наследие за нами!!!
    https://t.me/haiku_ru

  4. #24

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,394
    Спасибо Благодарностей отдано 
    1,702
    Спасибо Благодарностей получено 
    2,219
    Поблагодарили
    873 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от ^m00h^ Посмотреть сообщение
    А что за интро ?
    Navy Seals от RST/Prestige

    Этот пользователь поблагодарил Titus за это полезное сообщение:

    ^m00h^(18.08.2024)

  5. #25

    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    1,089
    Спасибо Благодарностей отдано 
    281
    Спасибо Благодарностей получено 
    70
    Поблагодарили
    49 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ZXMAK Посмотреть сообщение
    так есть такой api, заносишь адрес нужной инструкции IN или OUT в стек и делаешь jp в трдос окно, оттуда делается ret на инструкцию и обратно.
    К сожалению, нет. Не было такого API. Где-то в коде TR-DOS был фрагмент OUT(C),A: RET. С его помощью решался вопрос записи в порты. Но для чтения портов свистопляска требовалась практически со всеми, а особенно - IN #1F. Считать #1F, да без побочных эффектов - это было тайное искусство. Исторически разные люди решали эту задачу по-разному, с большим или меньшим успехом.

    Вот моя карта точек входа в TR-DOS V5.03 из дискового драйвера (radisk), которую я взял из публикации "Low-level disk driver" в каком-то из журналов, то ли ZX-Ревю, то ли ZX-Format, то ли уже не помню:

    Код:
    OUT_C_A:
    	PUSH	HL
    	LD	HL,2A53H
    	EX	(SP),HL
    	JP	3D30H
    
    DMA_RD:	PUSH	HL
    	LD	HL,3FD5H
    	EX	(SP),HL
    	JP	3D30H
    
    DMA_WR:	PUSH	HL
    	LD	HL,3FBAH
    	EX	(SP),HL
    	JP	3D30H
    
    WT_IRQ:	PUSH	HL
    	LD	HL,3FE5H
    	EX	(SP),HL
    	JP	3D30H
    
    IRZ:	LD	HL,3F33H
    	PUSH	HL
    	JP	3D30H
    
    IN_1F:	PUSH	HL
    	PUSH	BC
    	PUSH	DE
    	XOR	A
    	LD	C,3FH
    	CALL	OUT_C_A
    	LD	A,0AH
    	LD	C,05FH
    	CALL	OUT_C_A
    	LD	D,01H
    	CALL	IRZ
    	CALL	GET_POS
    	LD	C,3FH
    	CALL	OUT_C_A
    	LD	A,B
    	POP	DE
    	POP	BC
    	POP	HL
    	RET
    И, для сравнения, их же реализация в случае "открытого" доступа к портам контроллера:
    Код:
    OUT_C_A:
    	OUT	(C),A
    	RET
    
    DMA_RD:	LD	B,4
    DRD1:	IN	A,(0FFH)
    	AND	0C0H
    	JR	NZ,DRD2
    	INC	DE
    	LD	A,E
    	OR	D
    	JR	NZ,DRD1
    	DJNZ	DRD1
    	RET
    
    DMA_WR:	LD	B,4
    DWR1:	IN	A,(0FFH)
    	AND	0C0H
    	JR	NZ,DWR2
    	INC	DE
    	LD	A,E
    	OR	D
    	JR	NZ,DWR1
    	DJNZ	DWR1
    	RET
    
    WT_IRQ:	IN	A,(0FFH)
    	AND	0C0H
    	JP	Z,WT_IRQ
    	RET	M
    DRD2:	INI
    	JP	WT_IRQ
    
    DWR3:	IN	A,(0FFH)
    	AND	0C0H
    	JP	Z,DWR3
    	RET	M
    DWR2:	OUTI
    	JP	DWR3
    
    IN_1F:	IN	A,(1FH)
    	RET
    Что еще важно: подпрограммы DMA_RD и DMA_WR (прием и передача данных чтения и записи сектора) должны были вызываться именно те, что были в TR-DOS. Попытка реализовать тот же функционал на других функциях доступа к портам терпела неудачу: не хватало скорости процессора.

    Вот весь мой драйвер дисководаradisk.zip.

  6. #26

    Регистрация
    27.01.2005
    Сообщений
    924
    Спасибо Благодарностей отдано 
    28
    Спасибо Благодарностей получено 
    193
    Поблагодарили
    154 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ZXMAK Посмотреть сообщение
    так есть такой api, заносишь адрес нужной инструкции IN или OUT в стек и делаешь jp в трдос окно, оттуда делается ret на инструкцию и обратно.
    Там только с одним портом небольшая свистопляска требовалась, помоему системным #FF.
    Это не API, это костылеобход...

  7. #27

    Регистрация
    30.01.2006
    Сообщений
    1,921
    Спасибо Благодарностей отдано 
    73
    Спасибо Благодарностей получено 
    119
    Поблагодарили
    80 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Barmaley_m Посмотреть сообщение
    К сожалению, нет. Не было такого API. Где-то в коде TR-DOS был фрагмент OUT(C),A: RET. С его помощью решался вопрос записи в порты. Но для чтения портов свистопляска требовалась практически со всеми, а особенно - IN #1F.
    да, это я уже подзабыл.
    вообще странно что никто не сделал какой-то стандартный образ trdos c in a,(c):ret и out (c),a:ret, можно было сделать такой образ стандартом и использовать везде.
    ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
    ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet

  8. #28

    Регистрация
    26.09.2009
    Адрес
    г. Красноярск
    Сообщений
    3,198
    Спасибо Благодарностей отдано 
    40
    Спасибо Благодарностей получено 
    128
    Поблагодарили
    103 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    ZXMAK, любое изменение данных ПЗУ - потенциальный "затык" с тем ПО, которое использует фиксированные "точки входа", либо конкретные значения из него.
    Когда есть, но не знаешь где - это все равно, что нету.

  9. #29

    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    1,089
    Спасибо Благодарностей отдано 
    281
    Спасибо Благодарностей получено 
    70
    Поблагодарили
    49 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ZXMAK Посмотреть сообщение
    вообще странно что никто не сделал какой-то стандартный образ trdos c in a,(c):ret и out (c),a:ret, можно было сделать такой образ стандартом и использовать везде.
    Такие образы TR-DOS появились, причем почти сразу. Уже в хакерской версии TR-DOS 5.04T (от Алексея Скоробогатова, кажется) были такие точки входа.

    Но для софта это не означало, что можно пользоваться такими точками. Всегда был шанс, что у пользователя стоит фирменная TR-DOS v5.03 или даже v5.01. И что тогда? Тогда софт должен был или использовать универсальные точки входа, работающие на всех версиях; или детектировать версию и использовать подходящие для нее точки входа. Это лишь усложняло программу, без какой-либо практической пользы.

    Поэтому сделать "стандартный образ" возможности на самом деле не было.

    Что любопытно: TR-DOS v5.01 на практике почти нигде не встречалась. Точки входа в нее существенно отличались от v5.03. Большинство программистов не рассчитывало свой софт на работу с ней. Были такие, кто пытался детектировать версию TR-DOS (Николай Родионов в своей DCU, например) и в случае неудачи предлагал пользователю выбрать базовую версию (5.01 или 5.03). Был еще подход к детектированию базовой версии по ослабленным признакам - проверялись именно адреса точек входа. Так делал ASC в своем ASC Sound Master. Тот Спектрум, на котором работал ASC, имел именно TR-DOS v5.01. Наверное, 5.01 была у тех, кто среди первых подключал контроллер дисковода к Спектруму. Было это до начала массового распространения контроллеров в СНГ.

  10. #30

    Регистрация
    30.01.2006
    Сообщений
    1,921
    Спасибо Благодарностей отдано 
    73
    Спасибо Благодарностей получено 
    119
    Поблагодарили
    80 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от null_device Посмотреть сообщение
    любое изменение данных ПЗУ - потенциальный "затык" с тем ПО, которое использует фиксированные "точки входа", либо конкретные значения из него.
    насколько помню, в ходу были много разных версий. Наиболее популярная была 5.04T, также часто встречалась 5.03. Но даже с одинаковой версией были разные модификации. Стандартные процедуры были у всех одинаковые. На некоторых версиях действительно были проблемы с загрузкой некоторого софта, если правильно помню - проблемы были с официальной 5.03. Но такого софта было немного.

    Цитата Сообщение от Barmaley_m Посмотреть сообщение
    Был еще подход к детектированию базовой версии по ослабленным признакам - проверялись именно адреса точек входа.
    да, я помню это. Детектирование версии использовалось во многих загрузчиках использующих прямое обращение к вг93... Помню даже вырезал понравившийся код инициализации процедур из какой-то демки и использовал его, даже не задумываясь на каких версиях он работает, на каких нет.
    Последний раз редактировалось ZXMAK; 23.08.2024 в 20:15.
    ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
    ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet

Страница 3 из 4 ПерваяПервая 1234 ПоследняяПоследняя

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

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

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

Похожие темы

  1. Ответов: 9
    Последнее: 15.06.2020, 02:02
  2. вывод символа 4*8
    от Dexus в разделе Программирование
    Ответов: 15
    Последнее: 14.04.2011, 14:14
  3. Вывод на HD мониторы
    от jimled в разделе Изображение
    Ответов: 1
    Последнее: 28.01.2008, 15:09
  4. Вывод в порт на С в MicroBlaze
    от black_ninja в разделе Разный софт
    Ответов: 2
    Последнее: 25.01.2008, 09:38
  5. Вывод изображения
    от Shnurkov в разделе Изображение
    Ответов: 5
    Последнее: 10.02.2007, 15:07

Ваши права

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