Хитрожопый код сам себя затирает. Где он должен располагаться?
Вот это работает правильно:Только что заметил, что при отладке экран перестал перерисовываться...Код:di ld sp,0x4002 ld hl,0x01ff push hl jr $
Хитрожопый код сам себя затирает. Где он должен располагаться?
Вот это работает правильно:Только что заметил, что при отладке экран перестал перерисовываться...Код:di ld sp,0x4002 ld hl,0x01ff push hl jr $
Последний раз редактировалось SAM style; 18.02.2014 в 13:01.
Все любят гипножабу
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Код расположен в ROM, именно поэтому такой возврат чудесный из процедур делается. Конкретно - пишу тест памяти под свои скромные нужды на реале.
Грабля вылезает даже если не входить в отладчик.
Вот бинарник на котором грабля лизэ. testrom.zip
Считал, считал, вроде не выходит у меня что это я обсчитался...
Последний раз редактировалось ram_scan; 19.02.2014 в 05:22.
адрес 0x123 (проверка заполнения):
Код:pop iy ld sp,ix ; sp = ix = 0x4000 push hl ; попытка push в ПЗУ (3FFF/FE) ни к чему не приводит pop ix ; = 0 (содержимое ПЗУ в 3FFE/FF) pop de ; содержимое 4000/01 sbc hl,de ; hl = 0, тут всё правильно push ix ; запись 0 в 4000/01 - вот тут ячейки и портятся pop hl jr nz,0x13a ; NZ от чего? sbc hl,de не влияет на флаг Z ...
Все любят гипножабу
Я плохо что-либо понял из вашего поста =(
Во первых sbc hl,de влияет на флаг Z. Как и на остальные флаги, о чем написано в даташите на процессор, а именно флаги S,Z,H,P/V, N,C. Как любая арифметическая команда.
Во вторых я не понял попытались ли вы воспроизвести багу с тем кодом (ROM для 48к), который я приаттачил в сообщении ? И скриншот которого я приаттачил чуть раньше ?
Опять-же, значение будучи пушнуто в стек когда SP==4002 в память попадает. Оно потом оттуда прекрасно читается, и его видно в отладчике. Оно каким-то образом не попадает в дисплейную память эмулятора и потом не рендерится при выводе изображения.
Да, это я что-то поторопился.
При проверке (кусок кода выше) HL, как я понял, должно сохраняться в IX? НО при первом прохождении это происходит, когда SP=0x4000, т.е push hl происходит в ПЗУ и не сохраняется. После pop ix в ix уже не значение HL, а то, что было в последних 2 байтах ПЗУ (т.е 0). Поэтому после восстановления (push ix / pop hl) в hl возвращается не предыдущее значение, а 0. Поэтому вторая итерация уже приводит к ошибке. При этом push ix происходит, когда sp=0x4002, и это затирает первые 2 байта экрана, что прекрасно видно.Во вторых я не понял попытались ли вы воспроизвести багу с тем кодом (ROM для 48к), который я приаттачил в сообщении ? И скриншот которого я приаттачил чуть раньше ?
Опять-же, значение будучи пушнуто в стек когда SP==4002 в память попадает. Оно потом оттуда прекрасно читается, и его видно в отладчике. Оно каким-то образом не попадает в дисплейную память эмулятора и потом не рендерится при выводе изображения.
PS: а занесенных до этого байт не видно, потому как они не успевают перерисоваться лучом. Экран не мнгновенно обновляется.
Последний раз редактировалось SAM style; 19.02.2014 в 13:50.
Все любят гипножабу
Вы экспериментируете на каком-то другом коде, во всяком случае я его в лицо не узнаю.
Понимаете в чем дело, у меня в коде память трется без привязки к лучу (потому-что нельзя гарантировать что INT исправен), поэтому я бы в любом случае рано или поздно то что творится в адресе #4000 увидел на экране, даже если оно в каком-то фрейме в отрисовку не попало. Но косяк с первыми двумя байтами стабильный, достаточно подключить ROM вместо 48 бейсика и ресетнуться. Первые два байта стабильно пустые. При этом в памяти они хранятся, они просто не отрисовываются.
Я не исключаю даже ошибки в своем коде, но я ее блин не вижу, все должно работать правильно. Сделайте одолжение, посмотрите свежим взглядом.
Просто проверьте пожалуйста у себя как этот ROM работает, с глюком или без. Я бы на реале проверил, но у меня запаса чистых микросхем нет, а стерка пока с китая не доехала.
Последний раз редактировалось ram_scan; 19.02.2014 в 16:40.
Вот это тот самый код? Отлично. #0117 - это заполнение памяти 4000..FFFF пушами HL. #0123 - проверка этого заполнения. Перед проверкой есть LD IX,#4000. В самой программе проверки - LD SP,IX:PUSH HL:POP IX:POP DE, а потом PUSH IX:POP HL.
После заполнения на #4000 лежит то, что туда положено, но пока луч не дойдёт до этого места, оно не будет нарисовано. Только пока луч не дошёл, PUSH IX при первом прохождении проверки портит эти байты из-за ошибки в коде. Луч доходит до начала экрана и рисует уже испорченные байты.
Я уже не знаю, как это человеческим языком рассказать...
Все любят гипножабу
М... обновить Xpeccy? В последней сборке такого не наблюдается, только чуть-чуть съезжает там, где нет музыки (pica.sna на картинке слева).
Такой сильный сдвиг, как в сообщении выше, наводит на мысль, что там INT поставлен не в начало строки.
zebest, хватит удалять свои посты!
Последний раз редактировалось SAM style; 06.03.2014 в 01:40.
Все любят гипножабу
Давно я его не собирал... Хотя, кроме мелких изменений там всё по-старому - сейчас нет времени плотно заниматься проектом. Вот последняя под Windows:
[ win32 ]
Все любят гипножабу
Кстати, я тут некоторое время тому как плакался за то что кутешный срез у меня под опенсусе флэшем мыргает дико и клавиатурой тупит, и вообще с временными задержками пичальбеда.
Таки реально пичальбеда. Хоть включай в эмуляторе турбу хоть нет.
Пишу по памяти, но по воспоминаниям куте в консолю гнусно матерится, что не то делай не то слип можно запускать нынче только из какого-то там специального треда. Вобщем слезно жалится что задержку сделать оно не умеет потому-как не оттудова откудова оно ждет его задерживают.
Эту тему просматривают: 3 (пользователей: 0 , гостей: 3)