PDA

Просмотр полной версии : Как пользоваться памятью 128 к ?



женя999
18.08.2009, 16:30
Прошло уже много времени с моего знакомства с компьютером zx spectrum. Писал много всяких программок на бейсике,но до сих пор не знаю и не понимаю как устроена память у spectruma 128 к.

Первый мой компьютер был 48 кб там я хранил информацию в памяти ну например с 30000 (poke) по 65000 (прибл.) 16384-это экран.
Потом я купил pentagon 128 и думал что память будет продолжатся дальше,после 65ххх т.е можно было написать 10 poke 75000,255, Но потом понял что такое невозможно.Там вроде переключение происходит.
Объясните мне подробно как на самом деле?

я помню мучался но так и не понял .
А ещё в эмуляторах есть 256 кб и выше это как? тоже как и 128 ?

Дмитрий
18.08.2009, 16:53
128я память организована страничным образом.
начиная с адреса #c000 (49152) длинною #4000 (16384) находится область, в которую можно включить другую страницу. Этим заведует порт #7ffd, он стандартен для всех 128к машин. какие биты за что отвечают по памяти сказать не могу - скачай какой-нить мануал к фирменной машинке (Кай, Скорпион, ...) там есть пояснения по строению памяти и порядок работы с нею.

Andrnow
18.08.2009, 17:04
Ща расскажу)



Кратко об устройстве SINCLAIR 128

Компьютер SINCLAIR 128 имеет озу объемом 128 К, которое разделено на
8 банков памяти по 16 килобайт и которые условно нумеруются от 0 до 7.
В системе имеется регистр конфигурации, который доступен програмистоу
и имеет адрес 7FFDH. С помощью записи в этот регистр мы можем менять
конфигурацию системы т.е. переключать ПЗУ, банки ОЗУ и т.д.. Регистр
конфигурации имеет 6 разрядов. Первые три ( с 0-го по 2-й ) разряда
определяют один из восьми банков банков, подлюченный в последний сек-
тор адресного пространства процессора. 3-й определяет один из 2-х
банков, который будет подлючен в первый сектор адресного пространства
и отображен на экран: 0 - подключен 5-й банк, 1 - подключен 7-й банк.
4-й разряд определяет ПЗУ: 0 - подключена прошивка BASIC 128, 1 -
BASIC 48. 5-й разряд заведует блокировкой записи в регистр конфигура-
ции: 0 - запись разрешена, 1 - запись блокированна. Это необходимо
для работы в режиме SINCLAIR 48.

АДРЕС Z-80 СЕКТОР ПЗУ 32К
---------------¬ --------------¬
0000-3FFF ¦ 16K ¦ ___¦0 в разряде 4--+BASIC 128 16K¦
¦ 0-й сектор ¦ ¦1 в разряде 4--+BASIC 48 16K¦
+--------------+ L--------------
4000-7FFF ¦ 16K ¦ ___ ОЗУ 128К
¦ 1-й сектор ¦ ¦1 в разряде 3--+7-й БАНК 16К ¦
+--------------+ ¦ ¦6-й БАНК 16К ¦
8000-BFFF ¦ 16К ¦ ¦0 в разряде 3--+5-й БАНК 16К ¦
¦ 2-й сектор ¦ ¦4-й БАНК 16К ¦
+--------------+ ¦3-й БАНК 16К ¦
C000-FFFF ¦ 16К ¦--------------------¦2-й БАНК 16К ¦
¦ 3-й сектор ¦ любой из ¦1-й БАНК 16К ¦
L--------------- 8-ми ¦0-й БАНК 16К ¦
БАНКОВ ОЗУ L--------------
000 в разрядах 2 - 0 - 0-й БАНК
001 ------------------ 1-й БАНК
...............................
111 ------------------ 7-й БАНК

DINAMIX
19.08.2009, 10:26
А как (на примере) переключать страницы?

psb
19.08.2009, 12:53
В первый сектор ничего не включается. он всегда на своем месте. и он равнозначен банку 5. т.е. если мы включем банк 5 и запишем в #c000 число, то реально оно будет доступно и по #4000. т.е. это одна и та же страница. но вот банк 7 со вторым экраном с областью #4000..#7fff никак не пересекаются.


А как (на примере) переключать страницы?

ld bc,#7ffd ; порт
ld a,1 ; 1й банк
or #10 ; пзу 48к
out (c),a ; переключить!

после этого в диапазоне #c000..#ffff будет выбранный банк.

если это юзать из бейсика, то надо зайти сначала в бейсик 128, выполнить там usr 0, сброситься в 48й бейсик, сделать clear XXX (где XXX<49152), и затем уже можно переключать страницы с помощью out 32765,Y+16 (где Y=номеру банка).

попробуйте сделать out 32765,5+16 и потом что-нить менять в адресах #c000..#daff.

или out 32765,7+16, потом загрузить картинку по адресу 49152, потом выполнить out 32765,7+16+8.

AER
22.11.2009, 16:23
я использовал перфикс - ! к командам SAVE, LOAD и сохранял и выводил блоки памяти. Даже писал несколько бейсик программ, которые вызывали друг друга. !SAVE "aaa" - вроде так пишется. (бейсик 128)

Ewgeny7
24.11.2009, 21:31
!SAVE "aaa" - вроде так пишется
Немножко наоборот - SAVE! "aaa" и LOAD! "aaa".
Но все равно прикольно, я не знал о такой фишке в бейсике-128.

Hacker VBI
16.02.2014, 22:43
подниму тему
а как из 128 бейсика клацать страницами, кто помнит?
интересует применительно к бейсик-лоадеру
по ходу бейсик блокирует переключение

Gutten
16.02.2014, 23:00
вначале POKE 23388,Y, потом OUT 32765,Y

goodboy
16.02.2014, 23:13
если прога рассчитана только на 128ой бейсик то out можно и не делать,
там на прерываниях в буфере принтера висит программка которая сама переключает страницы.
но как показала практика есть компы где нет 128ой прошивки, а порт присутствует.
ещё в 128ом бейсике можно повесить вызов своей подпрограммы на IM1, тогда не нужна таблица для IM2

Hacker VBI
16.02.2014, 23:16
Gutten, спасибо, уже всё чётко)
goodboy, в #5b00 лежат страничные 128е дела, они и мешали, переключая в 16ю.

блин, всё забыл))

goodboy
16.02.2014, 23:17
goodboy, в #5b00 лежат страничные 128е дела, они и мешали, переключая в 16ю.
можно отключить проверку текущей страницы сбросив бит в переменной res 4,(iy+1)