• avatar Vinnny
  • 2
Мощнейший репорт. Артём жги ещё!!!
  • avatar VBI
  • 3
спасибо огромное за отчёт.
прямо вот — окунулся
  • avatar Weiv
  • 0
Увеличив количество LD HL,NN:PUSH HL в цикле до 10, получим результаты 230/258. Для стека в быстрой памяти — 236/288.
  • avatar sq
  • 0
Естественно это не так, но я сказал то, что он хотел услышать)
Слушай, если ты не видишь разницы, это может означать одно из двух. Либо разницы и правда нет, либо она есть, но ты её не замечаешь. Мою точку зрения ты знаешь. Но это твой проект, твоя аудитория и твои решения. У меня совершенно нет ни желания, ни времени тебя в чём-то переубеждать. Я выложил набор некоторых фактов — ты волен ими распоряжаться по твоему собственному усмотрению.
  • avatar Weiv
  • 0
Результаты получены на 48к модели, на 128х они будут слегка другие, но тенденция та же.
  • avatar Weiv
  • 0
Нет, это не так. И это легко проверяется.
org #FFF4
	im 1
	ld sp,(svsp)
	ei 
	ret

	org #FFFF
	jr #FFF4
	
	org #7000 ; 28672
	ld (svsp),sp
	halt
        di 
	ld a,#3A
	ld i,a
	im 2
	ei
	ld bc,0

l1	ld sp,#7999

	ld hl,0
	push hl

	inc bc
	jr l1


	org #8000 ; 32768
	ld (svsp),sp
	halt
        di 
	ld a,#3A
	ld i,a
	im 2
	ei
	ld bc,0

l2	ld sp,#7999

        ld hl,0
	push hl

	inc bc
	jr l2
svsp    dw 0

После ассемблирования PRINT USR 28672 выдает 1114(значение в BC на выходе), а PRINT USR 32768 выдает 1341. Если поставить стек в быструю память (например, #9999), PRINT USR 28672 выдает 1132, а PRINT USR 32768 выдает 1402.
  • avatar sq
  • 0
Да, это так, ты прав. Подтверждаем; теперь навсегда забудь об этом, смирись, и ебашь, как в последний раз, невзирая на место в памяти и в итоговой таблице результатов конкурса «OTEC INTRO COMPO»!
Я беру смелость констатировать, что обсуждаемый код на горизонте целого фрейма ОДИНАКОВО медленно работает (по сравнению с Пентагоном), будь он размещен ниже #8000 или выше #8000. Я вижу это визуально и через контроль PC после IM2 на эмуляторах. Я хотел бы подтверждения этому тезису, чтобы навсегда забыть, смириться «и ебашить как в последний раз» не взирая на место в памяти где лежит мой код.
  • avatar sq
  • 1
То, что код выполняется весь фрейм — это понятно. Но он в любом случае выполняется последовательно, вместе с лучом. Следовательно, он может замедляться в зависимости от того, где в данный момент времени (во время выполнения кода) находится луч.

То есть, смотри. Произошёл троллинг HALT, твой код начал выполняться, луч в верхнем бордюре. Тут не играет роли, в медленной памяти или в быстрой находится твой код.
В общем, долго ли коротко ли, LD HL PUSH побежал-побежал, и пока всё ровно.

Затем луч пробежал верхний бордюр и добежал до верхней части экрана. Вот тут, если твой код в медленной памяти, то он может незначительно замедляться. А может и нет. Возможно, это вообще не стоит того, чтобы ты сейчас запаривался этим.

Я понимаю, что профессор написал статью привычным для себя, но несколько сложным для абсолютно неподготовленного читателя, языком, и что не всегда бывают силы и время всё это читать и переваривать, для этого, в общем-то, и существуют комментарии и мы. Но я предлагаю тебе сейчас не мудрить, а просто кодить, как кодится. А там дальше разберёшься походу, ну и мы поможем, если что.
подкалываешь деда… стек в медленной памяти (читай в экране), код LD HL PUSH тоже в медленной памяти, код выполняется весь фрейм, я торможу больше в этой ситуации чем если бы этот код был в быстрой памяти?
  • avatar sq
  • 0
Кстати, после #7999 идёт #799A. Если ты хотел поставить стек перед #8000, то должно быть sp,#7FFF.
«Дорогие мои старики» sq introspec я все понял про немедленный бордер и другие детали.
Мой код исполняется ВСЕГДА, весь фрейм. Я всегда и бескомпромиссно делаю LD HL,NNNN PUSH HL при SP,#7999
Я пробовал делать это размещая код выше #8000 и ниже #8000, а так же и там и там одновременно. Я вижу что код тормозит по сравнению с Пентагоном, но я не вижу разницы в торможении в зависимости от места нахождения кода (выше или ниже #8000). Все ли я правильно понял про торможение? Если да, я смело размещаю свой код НИЖЕ #8000 так как ничего выиграть в таком сценарии не могу.
  • avatar sq
  • 0
Переформулирую этот вопрос специально для Макса, чтобы ему было понятнее:

ГДЕ в этот момент находится луч, во время исполнения твоего кода? В какой области бордюра?
Смотри. Важно не только ГДЕ в памяти. Но ещё и КОГДА в кадре. Я в своём примере поставил HALT не случайно, а для того, чтобы код исполнился на верхнем бордере. КОГДА исполняется твой код?
Да это код вида ld sp,58000: DUP 100: ld hl,…: push hl: EDUP

Да я вижу, что он выполняется медленнее в целом на slow mem машине, но я не вижу разницы во времени его выполнении будь он #8000 или c #6000. Если этой разницы действительно нет, я просто смирюсь с этим. Если же из куска #8000 этот код при такой структуре и таком параметре SP должен быть чуть быстрее — это меняет мои планы.
Ответ на первый вопрос в третьем абзаце снизу. Ответ на второй как бы содержится в самом статье: задержки зависят от того, где в кадре исполняется код. Подробнее — ну вот оно, сверху, всё написано. Где в кадре выполняется твой код? Если ты сделал что-то типа halt: DUP 100: ld hl,…: push hl: EDUP — неудивительно, что такой код будет работать без задержек даже в медленной памяти. Скажи мне где исполняется твой код, и мне после этого даже объяснять тебе ничего не придётся.

Третий вопрос: то, что тебе хочется, делает ZXSpin. Он не самый точный эмулятор, но я так понимаю, ты ещё не на той стадии, где тебе понадобится 100% точность.
Дух старой школы вижу в этом репорте я…
Профессор! Специально реплаю на ваш реплай с целью добиться внимания.

Первый пункт — нигде в статье капсом или болдом не написано какая именно память медленная. Понятно, что ниже #8000 медленная, а выше быстрая (+нюансы 128К), но это явно нигде в первых строках не написано.

Второй пункт. Я оперирую сейчас 48K моделью и после прочитанного понял, что пытаясь класть что-либо стеком на экран я точно буду тормозить всегда. Далее я опасался того, что если я буду класть стеком на экран и сам код будет ниже #8000 я буду ЕЩЕ БОЛЕЕ тормозить. Однако, практические эксперименты этого не подтверждают — код LD HL,NNNN PUSH HL тормозит (да тормозит) совершенно одинаково будь он в #8000 или в #7000. Этот момент я верно уловил в практическом эксперименте?

Третий пункт. Нет ли у вас на примете эмуляторов, способных включать и выключать (желательно в реальном времени) эффект торможения? Speculator и SpecEMU способны работать в конфигурации с медленной памятью (и именно на их примере я увидел наглядно торможение), но не способны «на ходу» включать и выключать ее.
  • avatar sq
  • 1
Сделай этот пример, как человек, прошедший через весь ад настройки, и собравший все документированные и недокументированные баги. И твой пример мы поместим туда! Что может быть более показательным и мотивирующим к разработке, чем код Отца?

Я серьёзно!