С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
LW(02.06.2025)
у CMOS два варианта обращения к портам:
1) Когда активно ПЗУ TRDOS или SYS или сигнал SHADOW:
#DEF7 - регистр адреса RTC
#BEF7 - регистр записи/чтения данных RTC
2) Когда активен CMOSEN и НЕ активен SHADOW
#DFF7 - регистр адреса RTC
#BFF7 - регистр записи/чтения данных RTC
CMOSEN - это старший бит D7 порта #EFF7
SHADOW - это младший бит D0 порта #xxBF - включает shadow порты
Секунды хранятся в RTC по 0 адресу, т.е. судя по всему у вас не устанавливается адрес для RTC при чтении. Что как-бы намекает на то, что порты заблокированы.
Некоторые эмуляторы и упрощенные схемы могут читать/писать RTC по упрощенной схеме выборки портов, т.е. даже если доступ к порту заблокирован. На таком железе/эмуляторах часы могут затираться разными программами которые используют нестандартное обращение к портам.
Проверьте, что записываете правильный адрес в правильный и активный порт.
Т.к. вы используете адреса портов от второго варианта доступа, нужно убедиться, что SHADOW не активен и CMOSEN включен.
Как вариант, можно попробовать писать адрес сразу в два варианта порта, тогда на одном из вариантов сработает. Но для чтения из корректного порта нужно знать состояние SHADOW или как-то детектить, какой из вариантов портов активен. Можно писать адрес в два порта, а читать из BFF7, расчитывая что он всегда доступен для чтения, но не везде это будет работать.
Наиболее оптимальный вариант, как мне кажется для вашего кода - просто сбросить бит SHADOW.
Последний раз редактировалось ZXMAK; 04.06.2025 в 18:01.
ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet
ZX Turbo Assembler version 4.0F
В редакторе обнаружилась ошибка, она скорее неприятная, чем фатальная,
при вставка числа из калькулятора в строку, строка ломалась, часть строки могла
пропасть и .. чаша терпения переполнилась.
Немного изменил set_art, setup со стрелочным интерфейсом от арт-студии, так, как пример.
В архиве сам ZAsm v4.0F и исходные тексты оверлеев.
ZX Turbo Assembler v4.x64 RUS Предысторию этой версии я уже где то писал, а сейчас не так и важно. Это ZAsm с одним 4-х пиксельным шрифтом (64 символа в строке) и на русском языке. Версией пользуюсь уже недели .. три и в общем самому нравиться, хотя 4-х битный шрифт ... не любил я его ... Все оверлеи адаптировать не удалось, как оказалось это занимает много времени и гасит любой энтузиазм и пока я не потерял к этому интерес совсем, вот то что есть.
Ладно, на сегодняшний день адаптированы следующие оверлеи:
compile ovl - компилятор
diskmov ovl - уплотнение диска
setup ovl - настройка среды
screen ovl - операции с экраном
spack ovl - упаковка группы экранов
sunp ovl - распаковка группы экранов
service ovl - копирование/удаление файлов, рам-диск ...
replace ovl - мультизамена по нескольким файлам
edit ovl - операции с текстом
Все вроде бы работает, в полной мере протестировать это -
нет, этого не делал, чаше всего использовал diskmov что и
понятно. В остальном разовые запуски для проверки ... к чему это
все, возможны ошибки.
Рабочий диск "D", что бы это изменить нужно любым диск-доктором открыть файл "Z4_x64", найти последовательность DD и заменить на AA. Ooops!
Последний раз редактировалось Rubts0FF; 19.07.2025 в 14:43.
Это скорее мысли в слух, чем крик о помощи. Где то месяц просидел в ZAsm v4.x64 RU, потом вернулся в так сказать основную, сейчас это v4.0F, кстати пришлось привыкать, после русской версии, одна из причин, захотел кое что из русской версии перенести в основную, и это часы, закладки, подменю "Сегодня" в смысле "Today", хотел что то еще сделать, но кончилось место в максимальном размере файла для ZAsm и это #A000. Более того, уже сейчас перебор в 41 байт, это приводит к
порче 8-ми битного шрифта, несколько символов. По быстрому размер уменьшить не получилось. Сжатие - компрессия самого ZAsm-а - не вариант, так как распаковываться он будет в 48-ю память, да и загружаться, для сжатия туда же. Самый простой вариант - выкинуть подменю Today, перенести в Setup, но при старте хорошо когда сразу можно настроить дату и время, а не лазать по настройкам.
Еще вариант, он не новый, у меня уже были переборы, сейчас не помню что и как тогда боролся, как вариант был сжатия блока шрифтов, их 4-ре штуки, вариант сделать шрифты подгружаемыми как это было в более ранних версиях, мне не показался удачным, не то что бы я все время переключаю эти шрифты/драйвера, но когда вдруг это надо - все происходит быстро.
В испытании принимали участия LZASC точно не помню, что то там KSA, еще MS-PACK и File Compressor by Александр Труш. Кстати, не смотря на размер распаковщика, он больше чем у других (около 300 байт), сжатый файл у него оказался меньшего размера.
А в общем шрифты сжались где то на треть. Здесь другой вопрос - распаковщики, у меня нет места, откуда они привыкли работать, для этих операций. В идеале, нужно что бы он не сходя с места, в смысле с какого бы адреса его не запустили, он взял и распаковал .. в то место в которое мне надо и я как то должен ему это указать. Потому что даже упакованные шрифты, это не отдельно взятый файл, это кусок в памяти, из одного цельного файла - ZAsm. Мысль вообще шрифты выкинуть из тела ZAsm и потом их просто загружать отдельно, хоть по одному, хоть блоком .., мне удачной не показалась.
Сам процессом сжатия/компрессии я интересовался очень давно, книжку умную почитать давали, только до дела не дошло, потом книжку забрали и больше к этому не возвращался. А в моем случае поможет только вариант, взять один из упаковщиков дизассемблировать и пробовать использовать для своих целей. Не знаю только сколько это может занять времени.
Есть идеи или решения - давайте, сюда или в телегу.
А если попробовать жать ZX0? Распаковщик 68 байт, если его таскать по памяти, то внутри есть четыре call, которые придётся поправить.
Или ZX2 - жмёт хуже, но распаковщик 56 байт.
Попробовал пожать 150 стандартных 768 шрифтов из коллекции Damien - 112 килобайт превратилось в 67 (паковал каждый файл отдельно).
; -----------------------------------------------------------------------------
; ZX0 decoder by Einar Saukas & Urusergi
; "Standard" version (68 bytes only)
; -----------------------------------------------------------------------------
; Parameters:
; HL: source address (compressed data)
; DE: destination address (decompressing)
; -----------------------------------------------------------------------------
dzx0_standard:
ld bc, $ffff ; preserve default offset 1
push bc
inc bc
ld a, $80
dzx0s_literals:
call dzx0s_elias ; obtain length
ldir ; copy literals
add a, a ; copy from last offset or new offset?
jr c, dzx0s_new_offset
call dzx0s_elias ; obtain length
dzx0s_copy:
ex (sp), hl ; preserve source, restore offset
push hl ; preserve offset
add hl, de ; calculate destination - offset
ldir ; copy from offset
pop hl ; restore offset
ex (sp), hl ; preserve offset, restore source
add a, a ; copy from literals or new offset?
jr nc, dzx0s_literals
dzx0s_new_offset:
pop bc ; discard last offset
ld c, $fe ; prepare negative offset
call dzx0s_elias_loop ; obtain offset MSB
inc c
ret z ; check end marker
ld b, c
ld c, (hl) ; obtain offset LSB
inc hl
rr b ; last offset bit becomes first length bit
rr c
push bc ; preserve new offset
ld bc, 1 ; obtain length
call nc, dzx0s_elias_backtrack
inc bc
jr dzx0s_copy
dzx0s_elias:
inc c ; interlaced Elias gamma coding
dzx0s_elias_loop:
add a, a
jr nz, dzx0s_elias_skip
ld a, (hl) ; load another group of 8 bits
inc hl
rla
dzx0s_elias_skip:
ret c
dzx0s_elias_backtrack:
add a, a
rl c
rl b
jr dzx0s_elias_loop
; -----------------------------------------------------------------------------
Последний раз редактировалось Bedazzle; 27.07.2025 в 10:38.
Heavy on the disasm
Eric and the disasm
Mask 3: Venom strikes disasm
Bard's disasm
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)