|
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
Другие статьи номера:
Похожие статьи:
В этот день... 19 ноября