достаточно давно существует вообще альтернативная прошивка OpenSEbasic
https://www.worldofspectrum.org/info...cgi?id=0027510
вариант для использования в коммерческих/аппаратных клонах.
совместимость довольно высокая + новые команды/улучшения
достаточно давно существует вообще альтернативная прошивка OpenSEbasic
https://www.worldofspectrum.org/info...cgi?id=0027510
вариант для использования в коммерческих/аппаратных клонах.
совместимость довольно высокая + новые команды/улучшения
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
ПЗУ в железе вообще трогаться не будет. У Профи ПЗУ отключаемое (это требование CP/M), на его место встаёт страница 0. Так что можно просто грузить нужный код. Из ограничений, CP/M использует для своих целей адреса 0-255, тут нужно не сложно химичить.
Хочу сделать эмуляцию режима 48кб (в перспективе 128кб), а не просто работы в бейсике. Что бы можно было грузить (и не только) программы напрямую из CP/M. Для чего реализуем основной код "эмулятора" в одном из верхнем сегментах памяти, а в ПЗУ нужно буквально несколько байт которые включат нужную страницу и совершат переход на подпрограмму. Благодаря наводке NEO SPECTRUMAN "безопасные" места вроде найдены. Остальное дело техники. Правда геммора ещё будет много в других местах. Сейчас ломаю голову как реорганизовать использование памяти внутри самой CP/M, так что бы весь код системы и драйвера вынести выше 7 страницы. Задача так же весьма не тривиальная, так как весь код писался так что бы мог работать на 128кб и подобный перенос не планировался, а страница 5 вообще имеет особое значение.
А кстати. Такой вопрос к профессионалам, который давно интересует. Почему нижеследующая программа в адресе 30000 и 40000 звучит по разному? В 30000 как из бочки, а в 40000 звучит как в ПЗУ по первым четырёхзначным адресам? Ошибка отсчёта T-State или что-то совсем специфическое?
Так будет на всех версиях Spectaculator и последних версиях EmuZWin. На ранней версии эмулятора звук во всех областях одинаковый.
Скрытый текст
ORG XXXXX
LD HL, 1642 ; Длина звука
LD DE, 261 ; Тональность
beeper: DI
LD A, L
SRL L
SRL L
CPL
AND 3
LD C, A
LD B, 0
LD IX, BEIX3
ADD IX, BC
LD A, (23624) ; Цвет рамки во время звучания
AND 56
RRCA
RRCA
RRCA
OR 8
BEIX3: NOP
BEIX2: NOP
BEIX1: NOP
BEIX0: INC B
INC C
BEHLLP: DEC C
JR NZ, BEHLLP
LD C, 63
DEC B
JP NZ, BEHLLP
XOR 16 ; Цвет чередующейся полоски (16...24)
OUT (254), A
LD B, H
LD C, A
BIT 4, A
JR NZ, BEAGAIN
LD A, D
OR E
JR Z, BEEND
LD A, C
LD C, L
DEC DE
JP (IX)
BEAGAIN:LD C, L
INC C
JP (IX)
BEEND: EI
RET
[свернуть]
48-й режим, я только в нём работаю.
Я даже опыты с обнулением ПЗУ делал и рассчитывал время прохождения кругов по пустой памяти в режиме 3,5 и 7 МГц. И мне кажется, что опыт с музыкой, лишь часть той самой проблемы. Но выходит, она у многих эмуляторов в режиме 48K. Еще бы на десятке эмуляторов проверить этот глюк и на реальном. Подозреваю, что проблемы, скорее всего, в самих .exe файлах эмуляторов. А это только с помощью отладчика, типа OllyDbg ковырять.
Поэтому и спрашиваю, может кто сталкивался.
Я уже писал и размышлял на эту тему. Привожу картинку отдельно.
Вот эта картинка, если скачать будет лучше видно:
![]()
https://worldofspectrum.org/faq/refe...htm#Contention
вам почитать для понимания, не самое простое описание но вроде все описано подробно.
Yuri80(13.09.2025)
Если дело в медленной памяти (а по описанию это наверняка оно и есть), то в эмуляторах нет проблемы, проблема в спектруме. Эмуляторы лишь его точно эмулируют. В 48к модели нижние 16к оперативы лежат в отдельных микросхемах, доступ к которым имеет не только проц, но и видеоконтроллер. И у видеоконтроллера приоритет, поэтому на время, в которое он читает очередные байты экрана, проц в эту нижнюю память не имеет доступа. И получается, что такты тикают, а программа не исполняется.
Yuri80(13.09.2025)
Огромное спасибо за наводку на статью и разъяснения! Почитал и скачал документацию с вышеуказанного сайта. Еще одной тайной стало меньше. Никогда бы не подумал, что внутренние процессы так хорошо влияют, и это поддаётся вычислению.
В моих опытах, при пустой памяти первая задержка начинается на шаге 21057, где команда 0 даёт 9 тактов, а следующие по 8. вместо 4-х.
Тема раскрыта.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)