PDA

Просмотр полной версии : Порты памяти - Scorpion и др.



ASMAN
14.03.2005, 23:29
ЛЮДИ!!! У кого есть побитная раскладка портов памяти Scropion, KAY и др. Мне для игры срочно нужно! Желательно раскладка выше 128к! :)
Иначе будет работать торлько на Пнтагонах... :(

Вот я например знаю, что у Пентагона:
Порт - 7FFD: биты
0-2 - ОЗУ 0-7 страницу (версия 128кб)
3 - режим видеостраницы (0/1 экран)
4 - бит 128/48 RAM Basic
5 - режим совместимости с обычным Спекки 48кб (в версии 1мб - переключение верхних 512кб)
6,7 - неиспользуются (в версии Пент256,512 - определяют по 8 страниц высшей памяти)
А как быть с 4мб ? Это мне нужно для БУДУЩЕГО АССЕМЛЕРА который я уже подумываю делать параллельно с ДЮНОЙ! То STORM уже приелся! Ничего толком не сделаешь.. а другие не удобные и в некоторых даже еще хуже!

Vitamin
14.03.2005, 23:53
раскладку портов побитово не помню. кидаю драйвера памяти из VS. думаю, разберешься



FSTPAGE
XOR A

PAGE PUSH BC ;переключатель страниц
PAGES EQU $+1
CP 6
JP NC,ERRORT
LD (CURPAG),A
CP 2
JR C,PP1
CP 4
JR C,PP2
INC A
PP2 INC A
PP1
IFN ?HIMEMDRV+1
JP PENT128
ENDIF

PENT128 AND 7
OR 16
OUTR LD BC,32765
OUT (C),A
ERRORT_ POP BC
RET

IFN ?HIMEMDRV+1
SETDRIVER
;HL-ADRESS A-MAX PAGES
LD (PP1+1),HL
LD (PAGES),A
RET


PENT512 LD C,A
AND 24
RLA
RLA
RLA
LD B,A
LD A,C
AND 7
OR B
JR PENT128+2 ;13

SCORP256
LD (S1+1),A
AND 8
S3 RLA
LD BC,#1FFD
S2 OUT (C),A
S1 LD A,0
AND 7
OR 16
LD B,#7F
JR OUTR+3 ;21

PROFI
LD (S1+1),A
AND 56
RRCA
RRCA
RRCA
LD BC,#DFFD
JR S2 ;12

ATM LD (S1+1),A
AND 24
RRCA
RRCA
RRCA
LD BC,#FDFD
JR S2

SCORP1024
LD (S1+1),A
LD C,A
AND 8
LD B,A
LD A,C
AND 16+32
RLA
OR B
JR S3
ENDIF

Spectre
15.03.2005, 00:04
Вот описание всех получивших распространение стандартов:

----------------------------
----- Стандарты памяти -----
----------------------------

Для переключения памяти в Scorpion, KAY, Profi и ATM1 используется 2
порта - это #7ffd (0, 1 и 2-ой биты) + биты дополнительного порта.

Для Pentagon и ATM2 используется один порт (только #7ffd).

--------- Pentagon ---------

256K - используется 6-ой бит #7FFD
512K - используются 6 и 7 биты #7FFD
1024K - используются 5, 6 и 7 биты #7FFD
4096K - используются 5, 6, 7 биты #7FFD + 0,1 биты #AFF7

Примечание насчет последних двух: 5-ый бит в оригинальном спектруме
служит для отключения порта #7FFD, посему есть вероятность оказаться в
48-ом режиме.

------------ Scorpion/KAY ------------

256К - используется 4-ый бит #1FFD (Scorpion и KAY)
512K - не бывает
1024K Scorpion - используются 4, 6 и 7-ой биты #1FFD
1024K KAY - используются 4 и 6 биты #1FFD + 6-ой бит #7FFD

----- Profi -----

256К-1024К - используются 0, 1 и 2 биты #DFFD

Примечание: На Profi физически присутствует 4 линейки памяти (значения
0,1 2,3 4,5 и 6,7 в порту #DFFD). Линейки могут быть запаяны как РУ5
(64Кб), так и РУ7 (256Кб). Если памяти 1Мб, то все просто - стоит 4
линейки по 256Кб. Но большое количество Profi имеет 256К, 512К, 768К и
576К(!) памяти. Например, в Profi 576K используется 0,1,2,3 банки и четверть
7-ой банки памяти.

----- ATM-1 -----

256К - не бывает
512K - используются 0 и 1 биты #FDFD
1024К - используются 0, 1 и 2-ой биты #FDFD

Насчет 1024K: на оригинальном ATM-1 всегда было только 512Кб. 2-ой бит
порта #FDFD использовался при подключении ПЗУ объемом не 64Кб (27512)
как обычно, а 128Кб (271000). Он выбирал дополнительные 4 странички.
Но этот наворот практически никогда и нигде не использовался, даже в
ATM-2 (хотя сейчас разрабатывается новое ПЗУ на все 128Кб для ATM-2,
но не для ATM-1). Так что этот бит практически являлся неиспользуемым,
что и позволило народным умельцам его задействовать. То есть стандарт
неофициальный.

----- ATM-2 -----

256К и 512К - может и были, но я никогда не слышал
1024K: есть 2 способа адресации страниц: с использованием #7ffd+#fff7 и
только через #fff7. В #fff7 биты записываются инвертированные!
Раскладка битов порта #FFF7 такая:
0-5 - номер страницы (0-63).
6 - определяет, что это за страница: 0 - ROM, 1 - RAM
7 - Определяет сочетание #FFF7 и #7FFD. А именно: 0 - определяет
страницы только порт #FFF7, а 1 - инвертированные D0-D2 порта #FFF7
заменяются на неинвертированные D0-D2 из порта #7FFD. Биты старше них
продолжают браться из порта #FFF7.

Сам порт #FFF7 доступен только из TR-DOS ПЗУ. Биты в него записываются
инвертированные! Пример работы:

LD BC,#FFF7
LD A,n
CPL
CALL OUTC
...

OUTC LD HL,#2A53 ;здесь OUT (C),A:RET
PUSH HL
JP #3D2F

ASMAN
15.03.2005, 20:01
Вот описание всех получивших распространение стандартов:

----------------------------
----- Стандарты памяти -----
----------------------------

Для переключения памяти в Scorpion, KAY, Profi и ATM1 используется 2
порта - это #7ffd (0, 1 и 2-ой биты) + биты дополнительного порта.

Для Pentagon и ATM2 используется один порт (только #7ffd).

--------- Pentagon ---------

256K - используется 6-ой бит #7FFD
512K - используются 6 и 7 биты #7FFD
1024K - используются 5, 6 и 7 биты #7FFD
4096K - используются 5, 6, 7 биты #7FFD + 0,1 биты #AFF7

Примечание насчет последних двух: 5-ый бит в оригинальном спектруме
служит для отключения порта #7FFD, посему есть вероятность оказаться в
48-ом режиме.

------------ Scorpion/KAY ------------

256К - используется 4-ый бит #1FFD (Scorpion и KAY)
512K - не бывает
1024K Scorpion - используются 4, 6 и 7-ой биты #1FFD
1024K KAY - используются 4 и 6 биты #1FFD + 6-ой бит #7FFD

----- Profi -----

256К-1024К - используются 0, 1 и 2 биты #DFFD

Примечание: На Profi физически присутствует 4 линейки памяти (значения
0,1 2,3 4,5 и 6,7 в порту #DFFD). Линейки могут быть запаяны как РУ5
(64Кб), так и РУ7 (256Кб). Если памяти 1Мб, то все просто - стоит 4
линейки по 256Кб. Но большое количество Profi имеет 256К, 512К, 768К и
576К(!) памяти. Например, в Profi 576K используется 0,1,2,3 банки и четверть
7-ой банки памяти.

----- ATM-1 -----

256К - не бывает
512K - используются 0 и 1 биты #FDFD
1024К - используются 0, 1 и 2-ой биты #FDFD

Насчет 1024K: на оригинальном ATM-1 всегда было только 512Кб. 2-ой бит
порта #FDFD использовался при подключении ПЗУ объемом не 64Кб (27512)
как обычно, а 128Кб (271000). Он выбирал дополнительные 4 странички.
Но этот наворот практически никогда и нигде не использовался, даже в
ATM-2 (хотя сейчас разрабатывается новое ПЗУ на все 128Кб для ATM-2,
но не для ATM-1). Так что этот бит практически являлся неиспользуемым,
что и позволило народным умельцам его задействовать. То есть стандарт
неофициальный.

----- ATM-2 -----

256К и 512К - может и были, но я никогда не слышал
1024K: есть 2 способа адресации страниц: с использованием #7ffd+#fff7 и
только через #fff7. В #fff7 биты записываются инвертированные!
Раскладка битов порта #FFF7 такая:
0-5 - номер страницы (0-63).
6 - определяет, что это за страница: 0 - ROM, 1 - RAM
7 - Определяет сочетание #FFF7 и #7FFD. А именно: 0 - определяет
страницы только порт #FFF7, а 1 - инвертированные D0-D2 порта #FFF7
заменяются на неинвертированные D0-D2 из порта #7FFD. Биты старше них
продолжают браться из порта #FFF7.

Сам порт #FFF7 доступен только из TR-DOS ПЗУ. Биты в него записываются
инвертированные! Пример работы:

LD BC,#FFF7
LD A,n
CPL
CALL OUTC
...

OUTC LD HL,#2A53 ;здесь OUT (C),A:RET
PUSH HL
JP #3D2F



Спасибо Spectre!!! С меня бутилька! :eek:

GriV
17.03.2005, 09:05
на себя компилятор (АСьМ то есть) должен брать, уж давно пора универсальный memBANKchanger внедрять во все асмы...

lvd
17.03.2005, 09:28
на себя компилятор (АСьМ то есть) должен брать, уж давно пора универсальный memBANKchanger внедрять во все асмы...
Угу, и главное, ООП не забыть бы внедрить...

ASMAN
17.03.2005, 23:41
Угу, и главное, ООП не забыть бы внедрить...
Что такое ООП ? :confused:

lvd
17.03.2005, 23:47
Что такое ООП ? :confused:

Это типа шутка юмора была. В соседнем треде тоже до ООП в альасме договорились =)

ООП - объектно-ориентированное программирование.

Looker
18.03.2005, 00:30
ООП на асме вполне реально внедрить. Может не в полном объеме, но все-таки. А реально потому, что это совершенно не скажется на скорости работы, а преимуществ куча...Кто шарит в ООП, меня поймет...

ASMAN
18.03.2005, 21:59
ООП на асме вполне реально внедрить. Может не в полном объеме, но все-таки. А реально потому, что это совершенно не скажется на скорости работы, а преимуществ куча...Кто шарит в ООП, меня поймет...
Я шарю, и я тебя понимаю, но об этом можно более подробно поговить в разделе "DEB - ассемблер нового поколения" в котором я постараюсь это сделать, не сразу, но будет, ввиде макросов наврное, если нет других идей... ответ пишите в разделе "DEB - ..." :cool:

elf/2
19.03.2005, 01:34
Я шарю, и я тебя понимаю, но об этом можно более подробно поговить в разделе "DEB - ассемблер нового поколения" в котором я постараюсь это сделать, не сразу, но будет, ввиде макросов наврное, если нет других идей... ответ пишите в разделе "DEB - ..." :cool:
Ребята, вы меня пугаете... я тоже ООП на картинках видел, так что "мы рассмотрели ваше коммерческое предложение и приняли решение купить пару килограммов этой травы" :)

я просто мечтаю в целях расширения сознания увидеть пару примеров инкапсуляции, наследования и полиморфизма с использованием макросов на ассемблере z80... все равно в какой теме, здесь или в "DEB - ..." :)


ps: надеюсь я никого не обидел, просто я ни в одном из двух предыдущих сообщений ни одного смайлика не увидел

axor
23.03.2005, 20:01
Вот описание всех получивших распространение стандартов:

В дополнение к 4Мб Пентагону.

...Теперь при сбросе бита 2 порта #EFF7 в нуль память выше 128
будет открываться и 48я защелка - блокироваться. А при установке
его в единицу будет закрыт доступ к памяти выше 128К и 48я за-
щелкой можно будет пользоваться...

Взято из "Схема подключения 4Mb 30pin SIMM к компьютерам типа "Пентагон" (C) AXLR'98, (R) CompoWellcome'00

axor
23.03.2005, 20:06
А вообще для уменьшения длины драйвера памяти лучше писать не универсальный драйвер, который строит таблицу страниц, а драйвер для конкретного клона. Такой драйвер будет занимать байт 30 (а то и меньше). Т.е., например, как это делается в Аласме.

ASMAN
23.03.2005, 22:10
А вообще для уменьшения длины драйвера памяти лучше писать не универсальный драйвер, который строит таблицу страниц, а драйвер для конкретного клона. Такой драйвер будет занимать байт 30 (а то и меньше). Т.е., например, как это делается в Аласме.
ТАкой будет в DEB!

Spectre
24.03.2005, 10:30
А вообще для уменьшения длины драйвера памяти лучше писать не универсальный драйвер, который строит таблицу страниц, а драйвер для конкретного клона. Такой драйвер будет занимать байт 30 (а то и меньше). Т.е., например, как это делается в Аласме.

Это да. Но если тебе нужна в программе поддержка сразу всех стандартов, то такие минидрайверы будут достаточно много места занимать. Например ассемблеру это подходит (пример Alasm), а коммандеру уже нет.

Spectre
24.03.2005, 10:31
В дополнение к 4Мб Пентагону.

...Теперь при сбросе бита 2 порта #EFF7 в нуль память выше 128
будет открываться и 48я защелка - блокироваться. А при установке
его в единицу будет закрыт доступ к памяти выше 128К и 48я за-
щелкой можно будет пользоваться...

Взято из "Схема подключения 4Mb 30pin SIMM к компьютерам типа "Пентагон" (C) AXLR'98, (R) CompoWellcome'00

А нельзя ли это описание сюда запостить? А то я поддержку сабжа делал исходя из драйвера PENT4M в Аласме. :)

Максагор
02.04.2005, 04:16
Для Pentagon и ATM2 используется один порт (только #7ffd).


Для ATM-2+ это утверждение в корне неверное.
Для переключения памяти используются порты #7FFD и #xFF7. Причем возможен вариант полного переключения памяти без исользования #7FFD вообще (последний блокируется, точнее блокируются биты 0-2, остальное работает).

Память ATM2+:

out #xFF7 - тот самый диспетчер памяти. Здесь можно в любую четверть памяти вставить любую страницу ОЗУ или ПЗУ (теоретически 1Мб ОЗУ и 1Мб ПЗУ). Порт спрятан вместе с портами ВГ93! Способ обратиться к нему аналогичный.

D0-D7 - все значения инверсны! Например выбор страницы 5(%101) выглядит
как %010...
D0-D5 - выбор одной из 64х страниц ОЗУ или ПЗУ(1024Кб). Если выбирается ПЗУ, то все незадействованные биты (так как его размер обычно меньше 512-1024Кб) устанавливаются в 0 для совместимости с микросхемами ПЗУ разной емкости!
D6 - =1 - выбор ОЗУ, =0 - выбор ПЗУ
D7=1 включение мультиплексора для коммутации выбора страниц памяти с #7FFD
При выводе страниц в #C000-#FFFF -вместо D0-D2 - используются D0-D2 c #7FFD, при выводе в #0000-#3FFF - этим битом разрешается автоматическое включение ПЗУ TR-DOS при переходе на адреса #3Dxx иначе останется та страница, которая там стоит на данный момент.

A14-A15 - выбор четверти адресного пространства, где надо изменять страницы(то есть где будут действовать все установленные или сброшенные биты Dn и An рассмотренные у этого порта выше)

A14 A15
--------
0 0 - #0000-#3FFF (порт #3FF7)
1 0 - #4000-#7FFF (порт #7FF7)
0 1 - #8000-#BFFF (порт #BFF7)
1 1 - #C000-#FFFF (порт #FFF7)

Особо надо сказать в этой ситуации про сигнал ROM2 (D4) с порта #7FFD - он позволяет диспетчеру памяти ОТДЕЛЬНО программировать четверти адресного пространства: то есть создать не одну, а две карты памяти, запрограммированные каждая по-своему. Для режима Спектрум-128, например, это программирование подобрано так как обычно - каждая из карт идентична за исключением нулевой четверти, где при ROM2=1 - ПЗУ с BASIC-48, а при ROM-2=0 - при ПЗУ с BASIC-128.
Так можно: к примеру организовать доступ к портам TR-DOS из программы в ОЗУ, подключенного к нулевой четверти, только ОЗУ помещать там лучше при ROM2=0(так как только при ROM2=1 возможен необходимый нам стандартный доступ к ПЗУ TR-DOS.

Особенностью ATM-turbo 2(+) можно считать такой момент - ПЗУ TR-DOS при входе на адреса #3Dxx активизируется только если сигнал ROM2=1 и по адресу #0000 находится именно ПЗУ, а не какая-либо из страниц ОЗУ. Это означает, что если вы включите вместо ПЗУ-48 ОЗУ, а затем запретите расширенные порты, то программным путем снова включить их (например для возвращения ПЗУ на место) будет невозможно, так как для этого надо будет "прыгать" в TR-DOS, что невозможно.

axor
03.04.2005, 23:49
А нельзя ли это описание сюда запостить? А то я поддержку сабжа делал исходя из драйвера PENT4M в Аласме. :)

Ловите. Правда там именно по программированию очень мало сказано.

axor
03.04.2005, 23:56
А нельзя ли здесь опубликовать кусок кода тестирующий кол-во памяти у компа?

Максагор
04.04.2005, 01:36
А нельзя ли здесь опубликовать кусок кода тестирующий кол-во памяти у компа?

Это кому вопрос?

Spectre
04.04.2005, 14:53
А нельзя ли здесь опубликовать кусок кода тестирующий кол-во памяти у компа?

Я так понимаю тебе нужно 4Мб потестить? ;) Вот выдрал из QC4.00 драйвер памяти (он не поддерживает 48К, есть ограничение памяти 2Мб). Запусти у себя MD7, тебе на экране должно написать: порт памяти (#7FFD), количество памяти в Кб (2048), количество памяти в секторах. А потом список доступных страниц. Если к каким-то страницам доступа нет, их в списке не будет.

axor
04.04.2005, 21:55
Я так понимаю тебе нужно 4Мб потестить? ;) Вот выдрал из QC4.00 драйвер памяти (он не поддерживает 48К, есть ограничение памяти 2Мб). Запусти у себя MD7, тебе на экране должно написать: порт памяти (#7FFD), количество памяти в Кб (2048), количество памяти в секторах. А потом список доступных страниц. Если к каким-то страницам доступа нет, их в списке не будет.

Благодарю.
А исходничек можно?:)

Spectre
05.04.2005, 11:08
Благодарю.
А исходничек можно?:)

Можно. Пиши на мыло. А у тебя есть уверенность что разберешься в нем? ;)

GriV
03.01.2006, 20:44
как хорошо что есть такие данные!

А всё-таки, хочется универсального драйвера одним файлом, с пояснениями по моделям и портам внутри исходняка - один фиг оно при компиляции слетит, а так хоть наглядно будет.

В качестве достаточно хорошего и понятного (алгоритм простой и хорошо струрирован) примера привожу выдержку из RC - вот почти такое же хоца получить, или линк если мона.

Spectre
09.01.2006, 12:29
Так это ж время требует. А спрос на драйвер памяти не такой большой чтобы подробное описание писать (раз в год можно и мылом отписаться).

GriV
11.01.2006, 12:45
драйвер памяти - чтобы в том числе поддерживались компы с 4мб памяти (и более?). Напишите в личку отвечу адресом мыла - куда слать.

GriV
19.01.2006, 16:06
2Максагор> вышли плиз сабж постом выше?

GriV
18.06.2008, 12:20
Тема примерла слегка. Оживлю её.
Вот переписал унивесральный манагер.
Достоинство - поддерживает почти всё (размером до 1 мегабайта, больше мне не надо), работает почти очень быстро (около 220 тактов).
Быстрее только вообще убирать его и напрямую в программе ставить все эти проверки и прочее.
Старался подлить там камментаф, чтобы понятно было что и как.