Просмотр полной версии : 16K RAM (НЕ 48!)
Helloween
26.08.2010, 16:59
Подскажите таблицу детального распределения памяти при наличии всего 16К ОЗУ. Интересуют системные переменные, отвечающие за начало различных областей памяти.
При наличии всего 16 к память располагается с #4000 до #7fff (16384 - 32767)
ибо - экран
При наличии всего 16 к память располагается с #4000 до #7fff (16384 - 32767)
ибо - экран
24*32*(8+1) = 768 * 9 = 6912 = 0x1B00
Так что экран [0x4000 - 0x5AFF]
24*32*(8+1) = 768 * 9 = 6912 = 0x1B00
Так что экран [0x4000 - 0x5AFF]
и?
человек спросил где располагается память при ее количестве 16к
Экран на спеке имеет фиксированное расположение с 4000 до 5aff
т.е 16 к должны как-то касаться экрана
так?
значит страница начинается c #4000 и тянется до #7fff
так?
т.е spectrum 16k не имеет памяти выше #8000
так?
при чем здесь размер экрана?
значит страница начинается c #4000 и тянется до #7fff
так?
т.е spectrum 16k не имеет памяти выше #8000
так?
при чем здесь размер экрана?
Всё верно. Спектрум с 16К имеет 16384 ячеек ОЗУ начиная с адреса 16384 (4000H) до 7FFFH. Остальное всё как у Спектрум-48. Просто на 48-м, ОЗУ продолжается далее с 8000H до FFFFh. Я уже писал где-то, купил на ебейе 48-й. Но у него во втором поле памяти битая(ые) микросхема. И он превратился в Спектрум-16:(
Helloween
27.08.2010, 14:14
Всё верно. Спектрум с 16К имеет 16384 ячеек ОЗУ начиная с адреса 16384 (4000H) до 7FFFH. Остальное всё как у Спектрум-48.
Это точно?
Меня интересуют начало и конец областей бейсик-программы, переменных, стека калькулятора и пр. Но только для 16К. Для 48 мне известно.
Helloween
31.08.2010, 16:36
Посмотрите на стр 71 книги ZX Spectrum & TR-DOS для пользователей и программистов. Распределение памяти аналогичное, с учетом того что переменные p_rampt (23732/33), udg (23675), ramtop (23730/31) и остальные с ними связанные указывают на другие адреса. Как будто выполнен оператор CLEAR 31999.
А можно подробнее?
Меня интересуют конкретные адреса ВСЕХ областей. В том числе стеки, бейсик-область, переменные и прочее.
Helloween
31.08.2010, 18:55
По поводу памяти конкретное распределение памяти, это как?
Меня интересует содержимое системных переменных в версии 16К. Ну и соответственно адреса областей, которые получаются в зависимости от этих переменных. А в книге даны адреса для 48К.
Helloween
01.09.2010, 10:47
А что содержат системные переменные изначально?
В книге этого нет. Распределение памяти я знаю, а вот по каким конкретно адресам...
null_device
01.09.2010, 13:04
Конкретно вся разница (существенная) сводится к следующему:
переменная\адрес - 16к - 48к
err_sp\23613 - 32516 - 65364
udg\23675 - 32600 - 65368
ramtop\23730 - 32599 - 65367
p_ramt\23732 - 32767 - 65535
Helloween
01.09.2010, 14:48
Спасибо, то что нужно.
Осталось выяснить, на какие адреса ссылаются переменные:
CHANS
PROG
VARS
WORKSP
STKBOT
STKEND
null_device
01.09.2010, 22:55
При сбросе эти переменные одинаковые (в 16К и 48К). К конкретной программе надо выяснять значения отдельно..
Helloween
02.09.2010, 06:07
А можно узнать содержимое этих переменных? А то реальный Спектрум я увижу не ранее, чем через неделю. А в литературе как назло нет.
null_device
02.09.2010, 06:17
А чем плох, допустим, spectaculator? Загрузите в него свою программу и сравнивайте значение нужных вам переменных, со значениями после сброса (до загрузки)!?
----
Короче, кинул архив с дампами памяти после ресета для 16 и 48 килобайт в виде файлов для эмулятора, на диске (trd) и ленте (tap) - изучайте!
Helloween
02.09.2010, 11:31
У меня почему-то в лучшем случае рестарт после загрузки.
Начальный адрес 23552?
null_device
02.09.2010, 14:02
Данные файлы содержат участок памяти с переменными ZX ОС. Если грузить их по их настояшему местоположению (23552), то комп зависнет, или сбросится. Попробуйте набрать такую мини программу:
1 clear 29999
2 load "16k" code 30000
3 load "48k" code 40000
4 input i
5 print i;"_";peek (3e4+(i-23552));"_";peek(4e4+(i-23552))
6 print
7 print i+1;"_";peek (3e4+(i-23551));"_";peek(4e4+(i-23551))
8 print
9 print peek (3e4+(i-23552))+256*peek((3e4+(i-23551));"_";peek(4e4+(i-23552))+256*peek((4e4+(i-23551)
10 goto 4
вводя числа в интервале 23552-23733 будут выводиться: номер смежных ячейки, значения для 16К и 48К модели, а ниже значения для двухбайтовых переменных.
При сбросе ОС ищет последнюю рабочую ячейку (появляются и исчезают красные полосы на экране при тестировании ячеек памяти) и запоминает ее в p_ramt.
Затем нужные ей области памяти, которые она привыкла располагать в конце ОЗУ, она и отсчитывает от этой переменной. Они уже перечислены выше null_device:
err_sp - стек при ошибке,
еще тут где-то есть стек GO SUB, но спец. переменной начала у него нет(?), во всяком случае он заканчивается как раз по адресу RAMTOP,
собственно ramtop, задаваемый командой CLEAR - последняя ячейка ДЛЯ ОС,
udg символы пользовательской графики, которые после сброса ОС располагает за RAMTOP.
Вот все эти переменные и будут после сброса отличаться для 16к и 48к моделей.
А значения других переменных, ну, и этих тоже, так или иначе можно выписать, хотя не знаю, зачем, они на разных моделях действительно разные, ОС может найти устройства типа Microdrive или Interface II и вдруг взять поднять все адреса для BASIC-программы, переменных и т.п. выше... TR-DOS ПЗУ тоже так делает, поэтому их полезно помнить для своей привычной рабочей модели, а закладываться на них на будущее - из-за этого куча релизов не универсальны в работе, там загрузятся, а тут нет.
---------- Post added at 20:07 ---------- Previous post was at 19:48 ----------
Вот базовый список областей и соотв. ОС-переменных для 16к и 48к, за которыми надо следить:
Hex Dec Назначение 2B переменная Hex Dec
4000 16384 экран ---
5B00 23296 буфер печати(уст.) ---
5C00 23552 ОС-переменные ---
5CB6 23734 зона динамической памяти
5CB6 5CB6 карты микродрайвов(если они есть) ---
--- --- инормационные каналы CHANS 5C4F 23631
--- --- Бейсик-программа PROG 5C53 23635
--- --- Бейсик-переменные VARS 5C4B 23627
--- --- редактируемая строка ELINE 5C59 23641
--- --- временная рабочая область WORKS 5C61 23649
--- --- стек вычислителя STKBOT 5C63 23651
--- --- "куча", резерв ОС STKEND 5C65 23653
--- --- стек а вот нет переменной, начинается от адреса регистра SP Z80
--- --- Бейсик-стек (GO SUB -стек) ERR_SP+2 5C3D 23613
--- --- конец памяти ОС RAMTOP 5CB2 23730
--- --- конец памяти PRAMT 5CB4 23732
Powered by vBulletin® Version 4.2.5 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot