Важная информация

User Tag List

Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 15

Тема: Используем RST 0 в своих ПЗУ

  1. #1
    Banned
    Регистрация
    22.05.2011
    Адрес
    г. Дзержинск, Украина
    Сообщений
    6,841
    Спасибо Благодарностей отдано 
    483
    Спасибо Благодарностей получено 
    658
    Поблагодарили
    512 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    Cool Используем RST 0 в своих ПЗУ

    Долго хотелось использовать мне rst 0
    всегда было очевидно, что достаточно где то поставить один байт в памяти
    и проверять его кодом по $0000
    НО всегда останавливала вероятность ложного срабатывания которая таки существует...
    (а при прерывании программы ресетом еще и однозначно)
    что могло бы приводить иногда к невозможности включить машину с первого раза
    или сброса ее кнопкой ресета без выдергивания из розетки...


    ...но щас ВНЕЗАПНО вспомнил что при сбросе SP ОДНОЗНАЧНО $FFFF
    и вот по нему мы и можем определить что происходит ресет или rst 0

    а единственная вероятность ложного сброса только при
    jp $0000 когда sp = $FFFF
    и
    rst 0 когда sp = $0001 (что в общем то в здравом уме невозможно)


    вот мой вариант обработчика оптимизированного на скорость
    который ложно срабатывает при
    jp $0000 когда sp = $FFFF...$0003
    и при
    rst0 когда sp = $0001...$0005

    то есть ложное срабатывание возможно только при кривых руках

    Код:
    rst0
    			;sp - $FFFF
    	push af		;sp = $FFFD	;11
    	push hl		;sp = $FFFB	;11
    	
    	ld hl,$0005	; -$FFFB	;10
    	add hl,sp			;11
    	jr c,reset			;7
    
    rst0_code     
    
    
    	pop hl				;10
    	pop af				;10
    	
    	ret				;
    	
    					;70+10t
    					;49+10t без сохранения AF
    					;28+10t без сохранения HL
    просмотрел код залазит на rst 8
    так что по +10 к растактовке
    на дополнительные jp на add hl,sp

    в отличии от обычного rst
    такой вариант жрет соответственно
    на 70+10t больше
    на 49+10t больше без сохранения AF
    на 28+10t больше без сохранения AF, HL (что уже выглядит юзабельно)

    кто напишет ищо быстрее?
    Последний раз редактировалось NEO SPECTRUMAN; 20.12.2020 в 10:11.

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2
    Guru Аватар для Lethargeek
    Регистрация
    08.09.2005
    Адрес
    Воронеж
    Сообщений
    4,550
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    269
    Спасибо Благодарностей получено 
    223
    Поблагодарили
    177 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    а не проще i на ноль проверять?
    Прихожу без разрешения, сею смерть и разрушение...

  4. #3
    Guru
    Регистрация
    27.02.2005
    Адрес
    москва
    Сообщений
    13,773
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    143
    Спасибо Благодарностей получено 
    1,178
    Поблагодарили
    774 сообщений
    Mentioned
    18 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    вспомнил что BusySoft что-то химичил с reset`ом
    https://translate.google.ru/translat...search&pto=aue

  5. #4
    Guru Аватар для Denn
    Регистрация
    04.05.2006
    Адрес
    St.-Petersburg
    Сообщений
    2,220
    Спасибо Благодарностей отдано 
    475
    Спасибо Благодарностей получено 
    900
    Поблагодарили
    592 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    Arrow

    А вот это

    Код:
    rst0
    			;sp - $FFFF
    	push af		;sp = $FFFD	;11
    	push hl		;sp = $FFFB	;11
    разве корректно делать до того, как будет настроен указатель стэка?
    После сброса мы попортим ОЗУ на вершине(


    Полагаю, что в некоторых случаях

    Код:
    ld hl,$0005	; -$FFFB	;10
    можно заменить на

    Код:
    ld h,0	;   10  5
    Последний раз редактировалось Denn; 20.12.2020 в 11:25.
    Критиковать - значит объяснять автору, что он делает не так, как делал бы я, если бы умел

  6. #5
    Banned
    Регистрация
    22.05.2011
    Адрес
    г. Дзержинск, Украина
    Сообщений
    6,841
    Спасибо Благодарностей отдано 
    483
    Спасибо Благодарностей получено 
    658
    Поблагодарили
    512 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Denn Посмотреть сообщение
    разве корректно делать до того, как будет настроен указатель стэка?
    корректно
    по настроености стека мы и определяем ресет это или вызов процедуры через rst 0
    если стек не настроен
    мы ресетим и настраиваем




    Цитата Сообщение от Lethargeek Посмотреть сообщение
    а не проще i на ноль проверять?
    а кто сказал что при сбросе i = 0?

    Matt4 has done some excellent research on this. He found that AF and SP are always set to
    FFFFh after a reset, and all other registers are undefined (different depending on how long the
    CPU has been powered off, different for different Z80 chips). Of course the PC should be set to
    0 after a reset, and so should the IFF1 and IFF2 flags (otherwise strange things could happen).
    Also since the Z80 is 8080 compatible, interrupt mode is probably 0.
    гдето есть экспериментальное подтверждение?

    - - - Добавлено - - -

    Цитата Сообщение от goodboy Посмотреть сообщение
    вспомнил что BusySoft что-то химичил с reset`ом
    это халтура
    там надпись флешом котороая в момент прохождения по ней луча затирается атрибутами

    даже на времянках пентагона видно что это лажа

    с таким же успехом дето в наших софтварях
    во время нажатия сброса устанавливается экран с 5-й страницой вместо всегда отображаемой в софтвари 7-й
    и проявляется глубокий смысл на экране или порицание за произведенный сброс (ужо не помню что именно)
    Последний раз редактировалось NEO SPECTRUMAN; 20.12.2020 в 12:38.

  7. Этот пользователь поблагодарил NEO SPECTRUMAN за это полезное сообщение:

    Barmaley_m (20.12.2020)

  8. #6
    Guru Аватар для Denn
    Регистрация
    04.05.2006
    Адрес
    St.-Petersburg
    Сообщений
    2,220
    Спасибо Благодарностей отдано 
    475
    Спасибо Благодарностей получено 
    900
    Поблагодарили
    592 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от NEO SPECTRUMAN Посмотреть сообщение
    корректно
    по настроености стека мы и определяем ресет это или вызов процедуры через rst 0
    если стек не настроен
    мы ресетим и настраиваем
    В рамках проверки, в случае сброса, мы портим ОЗУ. Если содержимое ОЗУ до исполнения кода RESET'а не играет роли, то тогда без проблем.
    Критиковать - значит объяснять автору, что он делает не так, как делал бы я, если бы умел

  9. #7
    Banned
    Регистрация
    22.05.2011
    Адрес
    г. Дзержинск, Украина
    Сообщений
    6,841
    Спасибо Благодарностей отдано 
    483
    Спасибо Благодарностей получено 
    658
    Поблагодарили
    512 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Denn Посмотреть сообщение
    В рамках проверки, в случае сброса, мы портим ОЗУ. Если содержимое ОЗУ до исполнения кода RESET'а не играет роли, то тогда без проблем.
    прога цивилизовано ложит на стек

    если это включение
    то содержимое памяти нам безразлично

    если мы
    сами решили делать команду равносильную call 0
    то стеком вполне можно пользоваться

    если же нажали ресет чтоб сдампить память
    то портятсо только последние несколько байт в районе $FFFF
    но это наверно не тот случай...


    ну и если обработчик rst 0 принимает данные например в bc, de
    а возвращает в a, hl
    то вообще ничего не нужно пушить
    и ничего не портитсо

  10. #8
    Guru Аватар для Denn
    Регистрация
    04.05.2006
    Адрес
    St.-Petersburg
    Сообщений
    2,220
    Спасибо Благодарностей отдано 
    475
    Спасибо Благодарностей получено 
    900
    Поблагодарили
    592 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от NEO SPECTRUMAN Посмотреть сообщение
    если же нажали ресет чтоб сдампить память
    то портятсо только последние несколько байт в районе $FFFF
    Именно. В общем случае это некорректно.
    Критиковать - значит объяснять автору, что он делает не так, как делал бы я, если бы умел

  11. #9
    Banned
    Регистрация
    22.05.2011
    Адрес
    г. Дзержинск, Украина
    Сообщений
    6,841
    Спасибо Благодарностей отдано 
    483
    Спасибо Благодарностей получено 
    658
    Поблагодарили
    512 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    интересно в i8080 так же ресетитсо SP
    а то эта фича было бы полезна для zx8080

    - - - Добавлено - - -

    Цитата Сообщение от Denn Посмотреть сообщение
    Именно. В общем случае это некорректно.
    в общем случае КНОПКА РЕСЕТ
    сделана ВМЕСТО выдергивания из розетки и втыкания
    и ОБЫЧНО ресет очищает всю память НАХРЕН

    так что про порчу ресетом полтора байта перед полной очисткой всей памяти можно не заикатся
    так же как и nmi похерит все что извращенно юзает стек и это не его проблемы

    ну и не нравитсо не используйте оно в прошивках своих скорпионов

    - - - Добавлено - - -

    Цитата Сообщение от Denn Посмотреть сообщение
    разве корректно делать до того,
    флаги по другому не сохранить
    хотя нужны ли они? скорей всего они трижды не нужны

    но ld (nnnn),a и ld (nnnnn),hl намного более прожорливые чем push-ы
    и требуют где то дополнительную память
    то есть в случае ресета в любом случае что то похеретсо
    или память или F. HL
    Последний раз редактировалось NEO SPECTRUMAN; 20.12.2020 в 12:39.

  12. Этот пользователь поблагодарил NEO SPECTRUMAN за это полезное сообщение:

    Barmaley_m (20.12.2020)

  13. #10
    Guru Аватар для Lethargeek
    Регистрация
    08.09.2005
    Адрес
    Воронеж
    Сообщений
    4,550
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    269
    Спасибо Благодарностей получено 
    223
    Поблагодарили
    177 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от NEO SPECTRUMAN Посмотреть сообщение
    а кто сказал что при сбросе i = 0?
    даташит официальный зайлоговский (27/306):
    http://www.electroscheme.ru/datashee.../z80cpu_um.pdf
    но есть нюанс (c)
    http://www.primrosebank.net/computer...cial_reset.htm
    и еще на ту же тему
    https://baltazarstudios.com/zilog-z8...nted-behavior/
    https://worldofspectrum.org/forums/d...Comment_539714
    Прихожу без разрешения, сею смерть и разрушение...

  14. Эти 3 пользователя(ей) поблагодарили Lethargeek за это полезное сообщение:

    Barmaley_m (20.12.2020), NEO SPECTRUMAN (20.12.2020), Spectramine (20.12.2020)

Страница 1 из 2 12 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Описания RST #10 IS-DOS
    от SinglWolf в разделе Оси
    Ответов: 20
    Последнее: 11.03.2009, 10:20
  2. RST #10
    от CityAceE в разделе Программирование
    Ответов: 3
    Последнее: 29.01.2008, 17:04
  3. Вызов функций через RST
    от axor в разделе Программирование
    Ответов: 98
    Последнее: 19.01.2006, 16:01
  4. RST #66
    от spensor в разделе Программирование
    Ответов: 4
    Последнее: 04.03.2005, 13:44

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •