cr0acker (journeyman)
2002/08/28 18:48
|
Манаджмент памяти
|
| |
Хе,хе опять двадцать пять!
В конфигурации спринтер
по #0000..#3FFF, при работе ДСС находится сама ДСС с её Резетами, тет чтоб использывать когда сюда подставленна страница пользователся резеты не доступны!.
Теперь адресса #4000..#7FFF,#8000..#BFFF,#C000..#FFFF, когда ДСС передаёт управление эти прогораммам, какие банки там нахадятся по умолчанию? Теперь память можно челкать по портам #7FFD,1FFD или нет? И если да, то как типа in #&7FFD,(номер страницы)ю Также хотеловсь бы увидет пример по использывани фции 38х Setwin!
Заранне спасибо
Тасм 4.12 рулз! Аласм маст дай!
|
Denis Parinov (Sprinter Team)
2002/08/28 22:11
|
|
> В конфигурации спринтер
> по #0000..#3FFF, при работе ДСС находится сама ДСС с её Резетами, тет чтоб использывать когда сюда подставленна страница пользователся резеты не доступны!.
Это так в нижних 16K находится DSS / BIOS в остальных 48К приложение, но с определенными особенностями. Стек не должен быть выше #BFFF при вызове DSS и ниже #8000 при вызове некоторых функций BIOS. В следующих версиях DSS планируется снятие ряда ограничений на стек и расположения данных при вызове ее функций.
> Теперь адресса #4000..#7FFF,#8000..#BFFF,#C000..#FFFF, когда ДСС передаёт управление эти прогораммам, какие банки там нахадятся по умолчанию?
В зависимости от адреса загрузки и размера приложения DSS выделяет необходимое число страниц памяти. Так при размере меньше 16К будет выделена одна страница, при размере больше 16К - две, и т.д. В окна с "неиспользуемым" адресном пространством будет подключатся специальная страница #FF. Если приложению требуется памяти больше чем зарезервировано в exe-файле, оно должно выделить себе дополнительный блок памяти самостоятельно.
> Теперь память можно челкать по портам #7FFD,1FFD или нет? > И если да, то как типа in #&7FFD,(номер страницы)ю
Напрямую память можно счелкать через 4 порта памяти:
#82 - #0000-#3FFFF
#A2 - #4000-#7FFFF
#C2 - #8000-#BFFFF
#E2 - #C000-#FFFFF
Записывая физический номер страницы в порт. Список номеров физических страниц для выделенного блока памяти можно получить через BIOS.
> Также хотеловсь бы увидет пример по использывани фции 38х Setwin!
SETWIN работает с логичискими страницами.
38h (56) SETWIN (Подключение страницы памяти)
входные данные:
A - идентификатор блока памяти
B - номер страницы в блоке (0,1,2...)
H - биты 6 и 7 задают номер окна, в которое будет подключена страница
C - 38h
выходные данные:
A - номер страницы, если CF=0
A - код ошибки, если CF=1
Функция вычисляет физический номер страницы в блоке памяти и подключает её
в окно адресного пространства в зависимости от значения регистра HL. То есть,
если HL указывает на адрес в пределах от 04000h до 07FFFh, то страница
подключается в первое окно, от 08000h до 0BFFFh - второе окно, от 0C000h до
0FFFFh - третье.
На выходе в регистре A содержится физический номер страницы, которая
была подключена до выполнения функции.
Выделить блок памяти 32К и подключить его страницы в #8000 и #C000 окна:
;
LD C,#3D ;GETMEM
LD B,2 ;BLOCK 32K
RST #10 ;SYSTEM CALL
JR C,ERROR ;MEMORY ALLOCATION ERROR
LD (MEMHND),A ;SAVE MEMORY HANDLE
;
LD HL,#8000 ;FRAME ADDRESS
LD C,#38 ;SETMEM
LD B,0 ;FIRST MEMORY PAGE
LD A,(MEMHND) ;MEMORY HANDLE
RST #10 ;SYSTEM CALL
JR C,ERROR ;MEMORY ALLOCATION ERROR
;
LD HL,#C000 ;FRAME ADDRESS
LD C,#38 ;SETMEM
LD B,1 ;SECOND MEMORY PAGE
LD A,(MEMHND) ;MEMORY HANDLE
RST #10 ;SYSTEM CALL
JR C,ERROR ;MEMORY ALLOCATION ERROR
;
> Заранне спасибо
|
cr0acker (journeyman)
2002/08/29 06:22
|
|
Во! Пасибо большое? А еслищёлкать портами то есть возможномть что программа будет совместима с будущей версией ПЗУ/АЛТЕРЫ/ДСС/ПЛАТЫ?
Толбео вот пока одно не понял:)
>Так при размере меньше 16К будет выделена одна >страница, при размере больше 16К - две, и т.д. В окна с
>"неиспользуемым" адресном пространством будет >подключатся специальная страница #FF.
Какие физические номера этих страниц к приме 1,2,3,,,256!
|
cr0acker (journeyman)
2002/08/29 07:56
|
|
Денис а такой вариант выделения памяти будет работать?
START
ORG #4000
NOP
ORG #8000
NOP
ORG #C000
nop
Дальше нужный орг и прога!
|
Denis Parinov (Sprinter Team)
2002/08/31 00:43
|
|
> Во! Пасибо большое? А еслищёлкать портами то есть возможномть что программа будет совместима с будущей версией ПЗУ/АЛТЕРЫ/ДСС/ПЛАТЫ?
Да, в любом случае будет возможность запуска программ в той конфигурации для которой она была написана. Что-то вроде режима совместимости. Но если для программы не критично работа напрямую через порты, лучше пользоваться SETWIN как более универсальный.
>> Так при размере меньше 16К будет выделена одна >страница, при размере больше 16К - две, и т.д. В окна с "неиспользуемым" адресном пространством будет >подключатся специальная страница #FF.
> Какие физические номера этих страниц к приме 1,2,3,,,256!
Это можно узнать через функцию BIOS, эти номера будут разными в зависимости от того сколько памяти было выделено другим приложениям.
|
Denis Parinov (Sprinter Team)
2002/08/31 00:50
|
|
> Денис а такой вариант выделения памяти будет работать?
> START
> ORG #4000
> NOP
> ORG #8000
> NOP
> ORG #C000
> nop
> Дальше нужный орг и прога!
Да, если конечно будет записан код от #4000 до конца программы, а не от последнего ORG, как это делают некоторые ассемблеры.
Еще одно замечание, для DSS1.xx exe-файлы могут начинаться с #4100, но после запуска можно использовать память с #4000.
|
cr0acker (enthusiast)
2003/07/19 22:34
|
|
В документации по спринтеру, есть такая фраза:
#82 - PAGE0 - страница ОЗУ, подключаемая вместо ПЗУ через порт #1FFD.
Что-бы это значило?
ld a, номер_подключаемой_страницы
out (#82),a
ld a, _что?_
out (#1ffd),a
|
cr0acker (enthusiast)
2003/07/19 22:36
|
|
Теперь вопрос номер два.
Если таким способом из режима ТЫР-ДОса загрусить другую прошивку Тыр-доса, будет ли сохраняться функциональность васика48/128?
|
Denis Parinov (Sprinter Team)
2003/07/20 00:39
|
|
LD A,1 ;RAM #0000-#3FFF
LD BC,#1FFD
OUT (C),A
;
LD A,0 ;ROM #0000-#3FFF
LD BC,#1FFD
OUT (C),A
|
Denis Parinov (Sprinter Team)
2003/07/20 00:42
|
|
> Теперь вопрос номер два.
> Если таким способом из режима ТЫР-ДОса загрусить другую прошивку Тыр-доса, будет ли сохраняться функциональность васика48/128?
Можно указать соответствующий файл в конфигурации spectrum.exe, тогда все будет работать. Таким образом можно поменять любую прошивку ПЗУ.
|
|