Просмотр полной версии : Порты памяти - Scorpion и др.
ЛЮДИ!!! У кого есть побитная раскладка портов памяти 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 уже приелся! Ничего толком не сделаешь.. а другие не удобные и в некоторых даже еще хуже!
раскладку портов побитово не помню. кидаю драйвера памяти из 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
Вот описание всех получивших распространение стандартов:
----------------------------
----- Стандарты памяти -----
----------------------------
Для переключения памяти в 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
Вот описание всех получивших распространение стандартов:
----------------------------
----- Стандарты памяти -----
----------------------------
Для переключения памяти в 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:
на себя компилятор (АСьМ то есть) должен брать, уж давно пора универсальный memBANKchanger внедрять во все асмы...
на себя компилятор (АСьМ то есть) должен брать, уж давно пора универсальный memBANKchanger внедрять во все асмы...
Угу, и главное, ООП не забыть бы внедрить...
Угу, и главное, ООП не забыть бы внедрить...
Что такое ООП ? :confused:
Что такое ООП ? :confused:
Это типа шутка юмора была. В соседнем треде тоже до ООП в альасме договорились =)
ООП - объектно-ориентированное программирование.
ООП на асме вполне реально внедрить. Может не в полном объеме, но все-таки. А реально потому, что это совершенно не скажется на скорости работы, а преимуществ куча...Кто шарит в ООП, меня поймет...
ООП на асме вполне реально внедрить. Может не в полном объеме, но все-таки. А реально потому, что это совершенно не скажется на скорости работы, а преимуществ куча...Кто шарит в ООП, меня поймет...
Я шарю, и я тебя понимаю, но об этом можно более подробно поговить в разделе "DEB - ассемблер нового поколения" в котором я постараюсь это сделать, не сразу, но будет, ввиде макросов наврное, если нет других идей... ответ пишите в разделе "DEB - ..." :cool:
Я шарю, и я тебя понимаю, но об этом можно более подробно поговить в разделе "DEB - ассемблер нового поколения" в котором я постараюсь это сделать, не сразу, но будет, ввиде макросов наврное, если нет других идей... ответ пишите в разделе "DEB - ..." :cool:
Ребята, вы меня пугаете... я тоже ООП на картинках видел, так что "мы рассмотрели ваше коммерческое предложение и приняли решение купить пару килограммов этой травы" :)
я просто мечтаю в целях расширения сознания увидеть пару примеров инкапсуляции, наследования и полиморфизма с использованием макросов на ассемблере z80... все равно в какой теме, здесь или в "DEB - ..." :)
ps: надеюсь я никого не обидел, просто я ни в одном из двух предыдущих сообщений ни одного смайлика не увидел
Вот описание всех получивших распространение стандартов:
В дополнение к 4Мб Пентагону.
...Теперь при сбросе бита 2 порта #EFF7 в нуль память выше 128
будет открываться и 48я защелка - блокироваться. А при установке
его в единицу будет закрыт доступ к памяти выше 128К и 48я за-
щелкой можно будет пользоваться...
Взято из "Схема подключения 4Mb 30pin SIMM к компьютерам типа "Пентагон" (C) AXLR'98, (R) CompoWellcome'00
А вообще для уменьшения длины драйвера памяти лучше писать не универсальный драйвер, который строит таблицу страниц, а драйвер для конкретного клона. Такой драйвер будет занимать байт 30 (а то и меньше). Т.е., например, как это делается в Аласме.
А вообще для уменьшения длины драйвера памяти лучше писать не универсальный драйвер, который строит таблицу страниц, а драйвер для конкретного клона. Такой драйвер будет занимать байт 30 (а то и меньше). Т.е., например, как это делается в Аласме.
ТАкой будет в DEB!
А вообще для уменьшения длины драйвера памяти лучше писать не универсальный драйвер, который строит таблицу страниц, а драйвер для конкретного клона. Такой драйвер будет занимать байт 30 (а то и меньше). Т.е., например, как это делается в Аласме.
Это да. Но если тебе нужна в программе поддержка сразу всех стандартов, то такие минидрайверы будут достаточно много места занимать. Например ассемблеру это подходит (пример Alasm), а коммандеру уже нет.
В дополнение к 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, что невозможно.
А нельзя ли это описание сюда запостить? А то я поддержку сабжа делал исходя из драйвера PENT4M в Аласме. :)
Ловите. Правда там именно по программированию очень мало сказано.
А нельзя ли здесь опубликовать кусок кода тестирующий кол-во памяти у компа?
Максагор
04.04.2005, 01:36
А нельзя ли здесь опубликовать кусок кода тестирующий кол-во памяти у компа?
Это кому вопрос?
А нельзя ли здесь опубликовать кусок кода тестирующий кол-во памяти у компа?
Я так понимаю тебе нужно 4Мб потестить? ;) Вот выдрал из QC4.00 драйвер памяти (он не поддерживает 48К, есть ограничение памяти 2Мб). Запусти у себя MD7, тебе на экране должно написать: порт памяти (#7FFD), количество памяти в Кб (2048), количество памяти в секторах. А потом список доступных страниц. Если к каким-то страницам доступа нет, их в списке не будет.
Я так понимаю тебе нужно 4Мб потестить? ;) Вот выдрал из QC4.00 драйвер памяти (он не поддерживает 48К, есть ограничение памяти 2Мб). Запусти у себя MD7, тебе на экране должно написать: порт памяти (#7FFD), количество памяти в Кб (2048), количество памяти в секторах. А потом список доступных страниц. Если к каким-то страницам доступа нет, их в списке не будет.
Благодарю.
А исходничек можно?:)
Благодарю.
А исходничек можно?:)
Можно. Пиши на мыло. А у тебя есть уверенность что разберешься в нем? ;)
как хорошо что есть такие данные!
А всё-таки, хочется универсального драйвера одним файлом, с пояснениями по моделям и портам внутри исходняка - один фиг оно при компиляции слетит, а так хоть наглядно будет.
В качестве достаточно хорошего и понятного (алгоритм простой и хорошо струрирован) примера привожу выдержку из RC - вот почти такое же хоца получить, или линк если мона.
Так это ж время требует. А спрос на драйвер памяти не такой большой чтобы подробное описание писать (раз в год можно и мылом отписаться).
драйвер памяти - чтобы в том числе поддерживались компы с 4мб памяти (и более?). Напишите в личку отвечу адресом мыла - куда слать.
2Максагор> вышли плиз сабж постом выше?
Тема примерла слегка. Оживлю её.
Вот переписал унивесральный манагер.
Достоинство - поддерживает почти всё (размером до 1 мегабайта, больше мне не надо), работает почти очень быстро (около 220 тактов).
Быстрее только вообще убирать его и напрямую в программе ставить все эти проверки и прочее.
Старался подлить там камментаф, чтобы понятно было что и как.
Powered by vBulletin® Version 4.2.5 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot