NewsProductsSprinterSupportDownloadSprinter ForumAbout usLinksSite map Russian site

Russian
   >> Программирование для компьютера Sprinter
Thread views: 128 View all threadsNext thread*Threaded Mode

Pages in this thread: 1 | 2 | (show all)
cr0acker
(journeyman)
2002/08/28 18:48
Манаджмент памяти Reply to this post

Хе,хе опять двадцать пять!
В конфигурации спринтер
по #0000..#3FFF, при работе ДСС находится сама ДСС с её Резетами, тет чтоб использывать когда сюда подставленна страница пользователся резеты не доступны!.
Теперь адресса #4000..#7FFF,#8000..#BFFF,#C000..#FFFF, когда ДСС передаёт управление эти прогораммам, какие банки там нахадятся по умолчанию? Теперь память можно челкать по портам #7FFD,1FFD или нет? И если да, то как типа in #&7FFD,(номер страницы)ю Также хотеловсь бы увидет пример по использывани фции 38х Setwin!
Заранне спасибо
Тасм 4.12 рулз! Аласм маст дай!



Denis ParinovVIP
(Sprinter Team)
2002/08/28 22:11
Re: Манаджмент памяти new [re: cr0acker]Reply to this post

> В конфигурации спринтер
> по #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
Re: Манаджмент памяти new [re: Denis Parinov]Reply to this post

Во! Пасибо большое? А еслищёлкать портами то есть возможномть что программа будет совместима с будущей версией ПЗУ/АЛТЕРЫ/ДСС/ПЛАТЫ?
Толбео вот пока одно не понял:)
>Так при размере меньше 16К будет выделена одна >страница, при размере больше 16К - две, и т.д. В окна с
>"неиспользуемым" адресном пространством будет >подключатся специальная страница #FF.
Какие физические номера этих страниц к приме 1,2,3,,,256!



cr0acker
(journeyman)
2002/08/29 07:56
Re: Манаджмент памяти new [re: cr0acker]Reply to this post

Денис а такой вариант выделения памяти будет работать?
START
ORG #4000
NOP
ORG #8000
NOP
ORG #C000
nop
Дальше нужный орг и прога!



Denis ParinovVIP
(Sprinter Team)
2002/08/31 00:43
Re: Манаджмент памяти new [re: cr0acker]Reply to this post

> Во! Пасибо большое? А еслищёлкать портами то есть возможномть что программа будет совместима с будущей версией ПЗУ/АЛТЕРЫ/ДСС/ПЛАТЫ?

Да, в любом случае будет возможность запуска программ в той конфигурации для которой она была написана. Что-то вроде режима совместимости. Но если для программы не критично работа напрямую через порты, лучше пользоваться SETWIN как более универсальный.

>> Так при размере меньше 16К будет выделена одна >страница, при размере больше 16К - две, и т.д. В окна с "неиспользуемым" адресном пространством будет >подключатся специальная страница #FF.

> Какие физические номера этих страниц к приме 1,2,3,,,256!

Это можно узнать через функцию BIOS, эти номера будут разными в зависимости от того сколько памяти было выделено другим приложениям.





Denis ParinovVIP
(Sprinter Team)
2002/08/31 00:50
Re: Манаджмент памяти new [re: cr0acker]Reply to this post

> Денис а такой вариант выделения памяти будет работать?
> START
> ORG #4000
> NOP
> ORG #8000
> NOP
> ORG #C000
> nop
> Дальше нужный орг и прога!

Да, если конечно будет записан код от #4000 до конца программы, а не от последнего ORG, как это делают некоторые ассемблеры.
Еще одно замечание, для DSS1.xx exe-файлы могут начинаться с #4100, но после запуска можно использовать память с #4000.






cr0acker
(enthusiast)
2003/07/19 22:34
Непонятки. new [re: Denis Parinov]Reply to this post

В документации по спринтеру, есть такая фраза:
#82 - PAGE0 - страница ОЗУ, подключаемая вместо ПЗУ через порт #1FFD.
Что-бы это значило?
ld a, номер_подключаемой_страницы
out (#82),a
ld a, _что?_
out (#1ffd),a



cr0acker
(enthusiast)
2003/07/19 22:36
Re: Непонятки. new [re: cr0acker]Reply to this post

Теперь вопрос номер два.
Если таким способом из режима ТЫР-ДОса загрусить другую прошивку Тыр-доса, будет ли сохраняться функциональность васика48/128?



Denis ParinovVIP
(Sprinter Team)
2003/07/20 00:39
Re: Непонятки. new [re: cr0acker]Reply to this post


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 ParinovVIP
(Sprinter Team)
2003/07/20 00:42
Re: Непонятки. new [re: cr0acker]Reply to this post

> Теперь вопрос номер два.
> Если таким способом из режима ТЫР-ДОса загрусить другую прошивку Тыр-доса, будет ли сохраняться функциональность васика48/128?

Можно указать соответствующий файл в конфигурации spectrum.exe, тогда все будет работать. Таким образом можно поменять любую прошивку ПЗУ.




cr0acker
(enthusiast)
2003/07/20 11:31
Re: Непонятки. new [re: Denis Parinov]Reply to this post

т.е. из режима спектрума прошивку менять низя?




Pages in this thread: 1 | 2 | (show all)
View all threadsNext thread*Threaded Mode
Jump to