Слушай, если ты не видишь разницы, это может означать одно из двух. Либо разницы и правда нет, либо она есть, но ты её не замечаешь. Мою точку зрения ты знаешь. Но это твой проект, твоя аудитория и твои решения. У меня совершенно нет ни желания, ни времени тебя в чём-то переубеждать. Я выложил набор некоторых фактов — ты волен ими распоряжаться по твоему собственному усмотрению.
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.
Да, это так, ты прав. Подтверждаем; теперь навсегда забудь об этом, смирись, и ебашь, как в последний раз, невзирая на место в памяти и в итоговой таблице результатов конкурса «OTEC INTRO COMPO»!
Я беру смелость констатировать, что обсуждаемый код на горизонте целого фрейма ОДИНАКОВО медленно работает (по сравнению с Пентагоном), будь он размещен ниже #8000 или выше #8000. Я вижу это визуально и через контроль PC после IM2 на эмуляторах. Я хотел бы подтверждения этому тезису, чтобы навсегда забыть, смириться «и ебашить как в последний раз» не взирая на место в памяти где лежит мой код.
То, что код выполняется весь фрейм — это понятно. Но он в любом случае выполняется последовательно, вместе с лучом. Следовательно, он может замедляться в зависимости от того, где в данный момент времени (во время выполнения кода) находится луч.
То есть, смотри. Произошёл троллинг HALT, твой код начал выполняться, луч в верхнем бордюре. Тут не играет роли, в медленной памяти или в быстрой находится твой код.
В общем, долго ли коротко ли, LD HL PUSH побежал-побежал, и пока всё ровно.
Затем луч пробежал верхний бордюр и добежал до верхней части экрана. Вот тут, если твой код в медленной памяти, то он может незначительно замедляться. А может и нет. Возможно, это вообще не стоит того, чтобы ты сейчас запаривался этим.
Я понимаю, что профессор написал статью привычным для себя, но несколько сложным для абсолютно неподготовленного читателя, языком, и что не всегда бывают силы и время всё это читать и переваривать, для этого, в общем-то, и существуют комментарии и мы. Но я предлагаю тебе сейчас не мудрить, а просто кодить, как кодится. А там дальше разберёшься походу, ну и мы поможем, если что.
подкалываешь деда… стек в медленной памяти (читай в экране), код LD HL PUSH тоже в медленной памяти, код выполняется весь фрейм, я торможу больше в этой ситуации чем если бы этот код был в быстрой памяти?
«Дорогие мои старики» sqintrospec я все понял про немедленный бордер и другие детали.
Мой код исполняется ВСЕГДА, весь фрейм. Я всегда и бескомпромиссно делаю LD HL,NNNN PUSH HL при SP,#7999
Я пробовал делать это размещая код выше #8000 и ниже #8000, а так же и там и там одновременно. Я вижу что код тормозит по сравнению с Пентагоном, но я не вижу разницы в торможении в зависимости от места нахождения кода (выше или ниже #8000). Все ли я правильно понял про торможение? Если да, я смело размещаю свой код НИЖЕ #8000 так как ничего выиграть в таком сценарии не могу.
Смотри. Важно не только ГДЕ в памяти. Но ещё и КОГДА в кадре. Я в своём примере поставил 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 способны работать в конфигурации с медленной памятью (и именно на их примере я увидел наглядно торможение), но не способны «на ходу» включать и выключать ее.
Сделай этот пример, как человек, прошедший через весь ад настройки, и собравший все документированные и недокументированные баги. И твой пример мы поместим туда! Что может быть более показательным и мотивирующим к разработке, чем код Отца?
прямо вот — окунулся
После ассемблирования PRINT USR 28672 выдает 1114(значение в BC на выходе), а PRINT USR 32768 выдает 1341. Если поставить стек в быструю память (например, #9999), PRINT USR 28672 выдает 1132, а PRINT USR 32768 выдает 1402.
То есть, смотри. Произошёл
троллингHALT, твой код начал выполняться, луч в верхнем бордюре. Тут не играет роли, в медленной памяти или в быстрой находится твой код.В общем, долго ли коротко ли, LD HL PUSH побежал-побежал, и пока всё ровно.
Затем луч пробежал верхний бордюр и добежал до верхней части экрана. Вот тут, если твой код в медленной памяти, то он может незначительно замедляться. А может и нет. Возможно, это вообще не стоит того, чтобы ты сейчас запаривался этим.
Я понимаю, что профессор написал статью привычным для себя, но несколько сложным для абсолютно неподготовленного читателя, языком, и что не всегда бывают силы и время всё это читать и переваривать, для этого, в общем-то, и существуют комментарии и мы. Но я предлагаю тебе сейчас не мудрить, а просто кодить, как кодится. А там дальше разберёшься походу, ну и мы поможем, если что.
Мой код исполняется ВСЕГДА, весь фрейм. Я всегда и бескомпромиссно делаю LD HL,NNNN PUSH HL при SP,#7999
Я пробовал делать это размещая код выше #8000 и ниже #8000, а так же и там и там одновременно. Я вижу что код тормозит по сравнению с Пентагоном, но я не вижу разницы в торможении в зависимости от места нахождения кода (выше или ниже #8000). Все ли я правильно понял про торможение? Если да, я смело размещаю свой код НИЖЕ #8000 так как ничего выиграть в таком сценарии не могу.
ГДЕ в этот момент находится луч, во время исполнения твоего кода? В какой области бордюра?
Да я вижу, что он выполняется медленнее в целом на slow mem машине, но я не вижу разницы во времени его выполнении будь он #8000 или c #6000. Если этой разницы действительно нет, я просто смирюсь с этим. Если же из куска #8000 этот код при такой структуре и таком параметре SP должен быть чуть быстрее — это меняет мои планы.
Третий вопрос: то, что тебе хочется, делает ZXSpin. Он не самый точный эмулятор, но я так понимаю, ты ещё не на той стадии, где тебе понадобится 100% точность.
Первый пункт — нигде в статье капсом или болдом не написано какая именно память медленная. Понятно, что ниже #8000 медленная, а выше быстрая (+нюансы 128К), но это явно нигде в первых строках не написано.
Второй пункт. Я оперирую сейчас 48K моделью и после прочитанного понял, что пытаясь класть что-либо стеком на экран я точно буду тормозить всегда. Далее я опасался того, что если я буду класть стеком на экран и сам код будет ниже #8000 я буду ЕЩЕ БОЛЕЕ тормозить. Однако, практические эксперименты этого не подтверждают — код LD HL,NNNN PUSH HL тормозит (да тормозит) совершенно одинаково будь он в #8000 или в #7000. Этот момент я верно уловил в практическом эксперименте?
Третий пункт. Нет ли у вас на примете эмуляторов, способных включать и выключать (желательно в реальном времени) эффект торможения? Speculator и SpecEMU способны работать в конфигурации с медленной памятью (и именно на их примере я увидел наглядно торможение), но не способны «на ходу» включать и выключать ее.
Я серьёзно!