KrNews
#06
15 ноября 1998 |
|
AUTOCONF - AUTOCONFIG расширеной памяти нужен всем.
┌──────────────────────────────────────┐ │AutoConfig нужен всем!│ └──────────────────────────────────────┘ (C) 1998 Viper/Techno Laboratory Вы наверное уже заметили AutoConfig, когда загружали газету ;-) AutoConfig - это небольшая подпрограмма, определяющая какие страницы памяти у данного компьютера быстрые, а какие медленные и распределяющая страницы в связи с результатами тестирования. Предположим, Ваша программа использует N страниц 128-ой памяти. Список страниц организован в таблицу: DEFB 16,17,19,20,0 где 0 - маркер конца таблицы. Некоторые страницы требуют повышенного быстродействия, т. е. надо чтобы они были быстрыми. Как этого достичь? Нижеприведенная программа протестирует все страницы из таблицы и выстроит их по приоритету: в начале таблицы окажутся быстрые страницы, далее медленные. В вашей программе в таком случае будет спользоваться логическая адресация страниц - страницы будут иметь не физические (16, 17, 19...), а логические номера (0, 1, 2, 3, 4...). Понятно, что у первых логических страниц будет скорость выше, чем у последних. Следовательно, первые логические страницы (0, 1) необходимо использовать для времякритичных задач, таких как: 1) скроллинг 2) большое количество вычислений 3) проигрывание музыки 4) анимация Список можно продолжать до бесконечности. Необходимо отметить, что тест будет правильно работать и при включенном TURBO режиме. Q: Для чего это нужно? A: Эта программа необходима для того, чтобы Ваши программы работали нормально на большинстве используемых компьютеров, а не только на Вашем!!! Иначе большое разнообразие Spectrum-совместимых машин, методов расширения до 128кб приведет к тому что Ваша программа будет сбрасываться или работать со сбоями - пользоваться такой программой на некоторых (многих) компьютерах будет невозможно! Например, вот результаты некоторых исследований: с помощью данной программы: Pentagon (rulez!): Page: 0 - fast Page: 1 - fast Page: 3 - fast Page: 4 - fast Page: 6 - fast Page: 7 - fast Profi: Page: 0 - fast Page: 1 - fast Page: 3 - fast Page: 4 - fast Page: 6 - fast Page: 7 - fast Краснодар: Page: 0 - fast Page: 1 - fast Page: 3 - fast Page: 4 - slow Page: 6 - slow Page: 7 - slow Импульс: Page: 0 - fast Page: 1 - slow Page: 3 - slow Page: 4 - fast Page: 6 - fast Page: 7 - slow Из западных источников: 48kb firm: fast memory: #8000-#ffff 128kb firm: Page: 0 - fast Page: 1 - slow Page: 3 - slow Page: 4 - fast Page: 6 - fast Page: 7 - slow Spectrum +2,+3 Page: 0 - fast Page: 1 - fast Page: 3 - fast Page: 4 - slow Page: 6 - slow Page: 7 - slow Нетрудно заметить, что 0-ая страница является быстрой на любых компьютерах. Очевидно, что многие программы, прекрасно зарекомендовавшие себя у одних пользователей, отказывались работать или работали неправильно у других. Примеры широко известны: ProTracker 2. 1, Черный Ворон, UFO 1-2, MicroEditor.. ProTracker 3.31 работает на "Краснодарах", но ловит глюки на "Импульсе" ... Также следует отметить, что для достижения максимальной совместимости с различными моделями необходимо, чтобы при использовании второго режима прерываний подпрограмма их обслуживания находилась в быстрой памяти. Присутствие 257-байтной таблицы также необходимо. Для Timex'а необходимо установить все регистры музыкального сопроцессора на 0. Q: Как использовать результаты теста? A: Очень просто. Допустим, Вам нужна 0- ая логическая страница, где у Вас расположен скроллинг. Простейший способ: ... LD HL,PAGS;адрес таблицы страниц LD A,(HL) CALL K128 ... Где K128 - подпрограмма переключения страниц. В общем-же случае можно использовать индексную пару (IX,IY): ... LD IX,PAGS LD A,(IX+N) CALL K128 ... Где N - номер логической страницы. Вам необходимо расположить загружаемые логические страницы на диске в определенном порядке, а затем действовать как указано выше. Кстати, если Вам нужно чтобы одна из страниц не участвовала в сортировке по приоритетам скорости, то это также легко сделать (указывая SIZE меньше на 1, чем общее число страниц, причем эта страница должна быть последней в таблице). WARNING!!! Если данный тест на каком-либо компьютере работал неправильно, просьба сообщить об этом на адрес редакции. Надеюсь, что данная статья поможет Вам создать ВЫСОКОКЛАССНЫЕ ПРОГРАММЫ, работающие на ВСЕХ компьютерах. А вообще программа гораздо меньше всего написанного выше ;). Хочу выразить благодарность VTS'у, который и подал идею данного теста. ; AutoConfig 1.0 ; (C) 1998 Viper/Techno Laboratory ST EQU #10;СМЕЩЕНИЕ ДЛЯ ТАБЛИЦЫ ;СКОРОСТИ ОТНОСИТЕЛЬНО ;ТАБЛИЦЫ СТРАНИЦ SIZE EQU 3 ;ЧИСЛО СТРАНИЦ ПОДВЕР- ;ГАЮЩИХСЯ СОРТИРОВКЕ ПО СКОРОСТИ ORG #8000 ENT LD IX,PAGS LOI LD A,(IX) OR A JR Z,ENY CALL MET LD A,D OR A JR Z,SLOW SUB A COP LD (IX+ST),A INC IX JR LOI SLOW LD A,1 JR COP ENY CALL SORT RET MET DI CALL K128 LD HL,#C000 LD A,#C1 LD B,L INN LD (HL),A INC L DJNZ INN INC H LD (HL),A DEC A LD I,A LD HL,INT LD A,195;JP LD (#C1C1),A LD (#C1C2),HL IM 2 LD DE,0 EI HALT LD HL,I2 LD (#C1C2),HL M0 INC DE;243*255=>slow=61965 LD B,16 M1 DJNZ M1 LD A,R INC HL JR M0 I2 DI POP HL LD A,#3F LD I,A IM 1 INT EI RET K128 PUSH BC LD BC,#7FFD OUT (C),A POP BC RET SORT LD B,SIZE-1 L0 LD C,SIZE-1 LD IX,PAGS+ST L1 LD A,(IX) LD D,(IX+1) CP D JR C,N1 JR Z,N1 LD (IX),D LD (IX+1),A LD A,(IX+ST) LD D,(IX+ST+1) LD (IX+ST+1),A LD (IX+ST),D N1 INC IX DEC C JR NZ,L1 DJNZ L0 RET PAGS DEFB 17,19,23,16 DEFB 0
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября