|
nedoPC.orgElectronics hobbyists community established in 2002 |
|
Author |
Message |
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Что-то я не пойму одну вещь в поведении стека микропроцессора 6502...
Я так полагал, что поскольку регистр указателя стека S - 8-битный и указывает в 1 страницу,
то он уменьшается, скажем, от значения $FF до значения $00, если мы заносим в стек значения.
Если при значении указателя стека S = $00 мы занесем в стек еще 1 байт, то указатель стека S
примет значение $FF.
То есть стек на увеличение или уменьшение работает как-бы " по кругу", как в PIC-ах...
Но уже в который раз попадаются мне рассуждения про "overflow" и "underflow", типа:
Нет, я, конечно, понимаю, что при выходе за верхнюю или нижнюю границу стека, мы "запорем" частично его содержимое.
Но сам процессор-то 6502, как не остановится при этом, так и никак аппаратно не среагирует на эти "overflow" и "underflow".
Так в чем же смысл этих рассуждений про "overflow" и "underflow", или я что-то не так понимаю?
Меня смутила реализация push и pop в JS-эмуляторе 6502:
Они останавливают эмуляцию в ситуациях " overflow" и " underflow".
_________________ iLavr
|
13 Dec 2014 11:54 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Странно как-то... этот 6502 такой древний и "разжеванный" процессор, а подробностей
про " stack overflow" и " underflow" особо-то и не найти...
Но мне думается, принцип работы стека 6502 я всё же понимаю правильно, исходя хотя бы
из следующих ссылок:
Исправил код:
_________________ iLavr
|
14 Dec 2014 00:25 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22826 Location: Silicon Valley
|
Возмжно опять дело в различиях оригинального 6502 и "исправленного" 65C02...
|
14 Dec 2014 10:39 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Ты хочешь сказать, что "оригинальный 6502" прекращает свою работу по "stack overflow" и "underflow" ?
У него, конечно, много странностей у этого 6502, но - не поверю...
_________________ iLavr
|
14 Dec 2014 12:13 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22826 Location: Silicon Valley
|
не - наоборот - оригинальный беспроблем заворачивал стек, а 65C02 на эту тему "пофикшен"...
P.S. это только моя гипотеза, если что...
P.P.S. поизучал вопрос - в списке отличий 6502 и 65C02 про отличия в поведении стека ничего не указано, более того, пишут что в раннем софте для всяких апплов и т д регистр S вообще не инициализирвался никогда и проц его тоже не инициализирует - т.е. он имеет при старте случайное значение - в этом случае логичное поведение это просто крутить кольцо стека при пушах-попах т.к. переход через границу технически ничего не меняет - просто больше 256 байт нельзя затолкать не потерев самое старое...
|
14 Dec 2014 13:09 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Чисто аппаратно, естественно, ничего не меняет... а чисто программно - я почитал - это довольно
зловещий трюк иногда.
Но меня это здесь, естественно, чисто аппаратно интересовало - из-за кода выше...
Это я, кстати, вот этот код правлю: http://www.6502asm.com/
ошибок там имеется, ну и я кое-какие свои приблуды добавил.
_________________ iLavr
Last edited by Lavr on 24 Dec 2014 09:16, edited 1 time in total.
|
14 Dec 2014 17:04 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Я не так чтобы давно занимаюсь как 6502, так и его ассемблером,
но тут один код ввел меня в смущение:
Что означает звездочка ' * ' ?
Что означают "стрелки" ' < ' , ' > ' ?
Мне такие обозначения не встречались ранее ни разу...
Возможно, это какая-то локальная нотация?
Код взят отюда: adventure.asm
_________________ iLavr
|
16 Dec 2014 13:00 |
|
|
Mixa64
Doomed
Joined: 25 Aug 2009 07:02 Posts: 463 Location: Москва
|
*= на ORG похоже, < и > похожи на взятие младшего и старшего байтов 16-бит слова.
|
16 Dec 2014 13:54 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
А не многовато ORG-ов?
У меня такое предположение, что *= похоже на $ в обычном ассемблере -
"этот адрес" ( $+1 и т.д.).
У 6502 $ в ассемблере задействован под hex.
Но я нигде ничего не смог нагуглить про *=, <, > ...
_________________ iLavr
|
16 Dec 2014 15:03 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
По тексту *= обрабатывается вот так:
А вот это, видимо, реально так:
_________________ iLavr
|
16 Dec 2014 15:33 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
| | | | Lavr wrote: Я не так чтобы давно занимаюсь как 6502, так и его ассемблером, Что означает звездочка ' *= ' ? Что означают "стрелки" ' < ' , ' > ' ? Мне такие обозначения не встречались ранее ни разу... | | | | |
Оказывается, это псевдооператоры Assembler - C64.
http://tnd64.unikat.sk/assemble_it4.html
_________________ iLavr
|
20 Dec 2014 18:45 |
|
|
Mixa64
Doomed
Joined: 25 Aug 2009 07:02 Posts: 463 Location: Москва
|
Ну так *= аналог ORG и есть. Это как если бы в асме 8080 написать $=1234 вместо ORG 1234, но асм 8080 так не поймет.
|
23 Dec 2014 03:42 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Это смотря еще какой асм 8080, а то может так случиться, что он множество псевдооператоров
ORG и не поймёт вовсе.
По крайней мере "Микрон", который здесь на форуме мне насоветовали в качестве 'стандарта',
несколько ORG не поймёт однозначно.
Я что-то одного не пойму пока в этом Assembler - C64 - что у них является эквивалентом ' EQU'.
Если для 8080 я могу написать:
То как это сделать в Assembler - C64 - пока не представляю и не попалось нигде... На страницах о C64 ' EQU' в его ассемблере изображают вот так:
Но здесь это не срабатывает...
_________________ iLavr
|
23 Dec 2014 10:23 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Джентльмены!!! У кого старшие свежие версии Proteus ISIS? Похоже, что в них появилась модель 65С02 ! По меньшей мере схему я увидел вот здесь: Problem with glue logic/memory decoding on a 6502 project... Memory decoding on a 6502 project schematics
_________________ iLavr
|
07 May 2016 05:06 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Я сегодня много всякой всячины по 6502 понаходил, поскольку проводил поиск по вопросу довольно наивному: " отечественное УГО микропроцессора 6502". Ведь был же у нас хотя бы клон 4.К602ВМ1 ( https://ru.wikipedia.org/wiki/4К602ВМ1), значит и отечественное УГО должно быть! Я, конечно, и сам нарисовать могу, но хотелось посмотреть хотя бы на один реальный образец... И как-то я не сразу пришел к мысли, что копать надо в схемотехнике компьютера "Агат" - там-то уж наверняка отечественное УГО микропроцессора 6502 или его клона должно быть! http://agatcomp.ru/Reading/ns/sysboard-elect-0-l.djvuВот так на схемах компьютера "Агат" выглядит клон 6502 - CM630P... А вот так и сам CM630P выглядит.
_________________ iLavr
|
07 May 2016 06:15 |
|
|
Who is online |
Users browsing this forum: No registered users and 1 guest |
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot post attachments in this forum
|
|