Эмуляторы и аналоги 6502

MOS Technology / Commodore / Apple II / NES etc.

Moderator: Lavr

User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Интересно - у количества ячеек таблицы есть принципиальное ограничение?
А то больно мне понравился принцип - плюхнул байт цвета по адресу, и он -
цветная точка на экране.

Расточительно несколько, но зато просто при программировании...

Я вот думаю - не расширить ли экранчик в формат 4х3 ? 8)
Но тогда и клеток в таблице поприбавится!!! :lol:

Один раз мне такую же вещь, правда, уже приходилось видеть...
Одни оригиналы строили фракталы Мадельброта в таблице Exel, также,
используя ячейки как пиксели, и программируя на встроенном VB... :lol:
Но у Exel-я есть ограничение на максимальное число ячеек...
iLavr
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Ну в circuits.cc используется таблица 100x75 ячеек - думаю можно и больше, но будет тормозить ;)

Для нормальной растровой графики лучше юзать Canvas, правда оно только в новых браузерах поддерживается (и не поддерживается в IE)...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Shaos wrote:Для нормальной растровой графики лучше юзать Canvas, правда оно только в новых браузерах поддерживается...
Canvas у меня странно работает... :( то есть, в одном проходе на нём отлично все его
функции работают.
Но вот когда начинается динамическая перерисовка Canvas-а он впадает в ступор и
может перерисовать что-то, если его закрыть другим окном и снова открыть...
Глюк какой-то... пока не разобрался в чем дело...
iLavr
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: 6502 emulator in JavaScript

Post by Shaos »

Lavr wrote:6502 compatible assembler and emulator in JavaScript

6502 - с компилятором ASM и эмулятором на JavaScript.
6502asm.com is an online 6502 compiler and emulator written entirely in JavaScript. The 6502 CPU was fitted into several 8-bit computers and gaming consoles in the 1980's, such as the Apple ][, Nintendo NES and many more. If you have ever coded assembly on the C64 (which featured a 6510 CPU), then this should be a walk in the park for you. I also firmly believe that this can be an excellent platform for learning assembly code.
Забавно! Весьма забавно! И работает! :o

Image


И Шаос у нас JavaScript-ом увлёкся... :wink:
а дебиане теперь есть скринсейвер, написанный с этого эмулятора (он просто по кругу гоняет все приложения, написанные под него) - теперь только он у меня и крутится :)

P.S. почитал внимательно описание на www.6502asm.com и подумал - а почему бы не построить железяку на 6502 по этой спецификации? софта уже есть под него :roll:
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: 6502 emulator in JavaScript

Post by Lavr »

Shaos wrote:почитал внимательно описание на www.6502asm.com и подумал - а почему бы не построить железяку
на 6502 по этой спецификации? софта уже есть под него :roll:
Ну я примерно этим сейчас и занимаюсь...
Но по твоей ссылке в начале этого топика доставка 6502 в Россию стОит дороже самогО 6502... :(

Потому пришлось связаться с Дендиками, в которых сейчас преимущественно интегрированный
чип-капелька или корпусной аналог 6561.
Он не даёт возможности свободно разбить карту памяти по своему усмотрению.

Так что я решил отталкиваться от конфигурации памяти картриджа Keyboard Transformer by
A.Golomedov and I.Nesterov
- это, как мне кажется, наиболее приемлемая конфигурация, с
учетом особенностей крупного разбиения памяти в приставке.

Всё это не так уж и увлекательно, нежели делать железяку с нуля, но надо же что-то сделать
из купленных дендиков. :-?
iLavr
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: 6502-TTL Proteus

Post by Lavr »

Lavr wrote:Я приводил ранее ссылку на ТТЛ-вариант 6502: TTL6502.
Ruud wrote:A projekt to build your own 6502 using only common available TTL-IC's.
Прочитал я историю создания и описание этого проекта более внимательно: TTL6502: Вuild Your own 6502

Нет, это всё же не ТТЛ-вариант 6502, это скорее уж EEPROM-вариант 6502 :(
Всё что можно было этот Ruud позашивал в ПЗУ, и никакой тебе схемотехники 6502. :-?
iLavr
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Никогда я не увлекался игрой "Жизнь"(Life), считая её забавной бестолковицей...
Но поскольку под руками эмулятор с открытым кодом, который я немного допиливаю
под свои цели, решил я разок посмотреть, как будет протекать "жизнь на поляне" в
32х32 клетки, раз уж Life на ассемблере тут имеется...

И запустил я эмуляцию "Жизни" в отдельном окне надолго, а вот это её результат:

Image

Все белые фигуры статичны и не изменяются. Отрезок, помеченный голубым цветом, ложится
горизонтально относительно своего центра, и встает вертикально в следующем цикле.
Такая вот "Жизнь" в браузерном эмуляторе 6502. 8)
iLavr
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

TTL-6502-TEST

Post by Lavr »

Lavr wrote:Это я, кстати, вот этот код правлю: http://www.6502asm.com/
ошибок там имеется...
Ну и поскольку ошибки и невооруженным глазом видны были, я решил проверить это поделие
каким-либо не самым сложным тестом для оригинального 6502 CPU.
Если начать искать, то только вот здесь: http://www.6502.org/tools/emu/ тестов предлагают
довольно много...
Весь вопрос упирался в то, что у меня нет подобающих компиляторов, да и средство вывода не
поддерживается никакими стандартными программными ресурсами.
То есть, как выводить сообщения об ошибках - меня просто в ступпор вводило. :o

Но, повезло - нашел я неплохой тест, как мне кажется, TTL6502TST.rar , который ни в каких
средствах вывода не нуждается! :kruto:

Выбрал я его, потому как в пакете был асм-исходник, бинарник, и даже HEX-файл, ну и запихал
я его в исследуемый объект весьма своеобразно: скомпилировав в нем HEX-dump, сформированный
через Win-HEX:

Code: Select all

;  TTL6502.TEST
    *= $0600
    jmp START
    *= $e000
START:
DCB $EA,$4C,$EC,$FF,$EA,$38,$B0,$FE,$EA,$4C,$6E,$F5,$EA,$18,$A9,$00
DCB $60,$EA,$A9,$01,$85,$03,$A2,$FF,$9A,$A9,$FF,$48,$28,$90,$FE,$D0
DCB $FE,$50,$FE,$10,$FE,$30,$03,$4C,$27,$E0,$F0,$03,$4C,$2C,$E0,$70
DCB $03,$4C,$31,$E0,$B0,$03,$4C,$36,$E0,$A9,$02,$85,$03,$A9,$00,$48
...
DCB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
DCB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$4C,$12,$E0,$EA
DCB $38,$B0,$FE,$EA,$EA,$A9,$FF,$48,$28,$40,$F4,$FF,$00,$E0,$F4,$FF
Заодно и поинтересовался на http://forum.6502.org/ - как они это делают, оказалось, что так же,
только, похоже, что скриптом через регулярные выражения они делают HEX-dump...

Ну а теперь - самое интересное, как же работает тест, который ничего не выводит - оказалось,
что очень логично!
После исполнения каждого примера он либо движется к следующему тесту, либо зависает в
бесконечном цикле по условию с флагом.
Примерно так:

Code: Select all

$00EB19                 ;  SEC          ; $30 - $50 = $20, returns C = 0, returns V = 0
$00EB19                 ;  LDA #$30
$00EB19                 ;  SBC #$50
$00EB19     A9 74                       lda     #$74
$00EB1B     85 03                       sta     Test
$00EB1D     A9 50                       lda     #$50
$00EB1F     85 10                       sta     TmpZP0
$00EB21     8D 00 10                    sta     TmpAB0
$00EB24     38                          sec
$00EB25     A9 30                       lda     #$30
$00EB27     E9 50                       sbc     #$50
$00EB29                 L271
$00EB29     B0 FE                       bcs     L271            ; error, ->
$00EB2B                 L272
$00EB2B     70 FE                       bvs     L272            ; error, ->
$00EB2D                 L273
$00EB2D     F0 FE                       beq     L273            ; error, ->
$00EB2F                 L274
$00EB2F     10 FE                       bpl     L274            ; error, ->
$00EB31     C9 E0                       cmp     #$E0
$00EB33                 L275
$00EB33     D0 FE                       bne     L275            ; error, ->
То есть, если это происходит под отладчиком, то видно, что перестал меняться адрес.
По листингу - смотришь, на каком тесте зависли, и что не так.

А на реальной железке - тоже следует индицировать адрес хотя бы светодиодами,
и по адресу - искать ошибку по листингу.

Я раньше с тестами ЦПУ в принципе не сталкивался, поэтому пришлось почитать исходник...
Ну оооочень логично строится тест! Почему он мне так и понравился... :wink:

И, кстати, Easy 6502 этот тест четко проходит. А моё поделие 6502 assembler - ... теперь
уже тоже проходит! :D
iLavr
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Ну вот эмулятор 6502, наконец, заработал практически верно...
Код прошел серьёзный тест Functional Test for the NMOS 6502

Image

Надо будет переписать HELP-файл, поскольку добавил множество привычных фич в отладке:
редактирование памяти, брейкпоинт, автоматическое исполнение код до брейкпоинта и разные
другие удобные мелочи...

Ну и некоторые шероховатости, думаю, есть ещё...


PS. Написал новый HELP-файл на английском и на русском. Всё подправил, всё вроде работает...
А тут и праздники кончились...
iLavr
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re:

Post by Lavr »

Shaos wrote:
Lavr wrote:Интересно - у количества ячеек таблицы есть принципиальное ограничение?
Ну в circuits.cc используется таблица 100x75 ячеек - думаю можно и больше, но будет тормозить ;)
Что-то меня этот неразрешенный вопрос посетил снова... и к моему удивлению и удовольствию,
такие же любознательные люди, как я, нашлись!

Каково максимальное количество строк таблицы, которое может отобразить браузер?
st_st wrote:Opera держит 100.000, попробовал в IE8, всё повисло, пришлось жать Reset.

Code: Select all

<%for (var i=0; i<100000; i++) Response.Write(i+"<br>");%>
500.000 - Chrome повис, Opera 9 загрузила все, но при прокрутке сильно тормозит.
На 500.000 И FF 3.6 и Safari 5 дошли до 100.000 и застряли, далее очень медленно рывками по 20.000 прибавляют, короче недождался.
Opera 9.64, мильён пройден. При прокрутке сильно тормозит.
iLavr
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: 6502

Post by Shaos »

Вот тут люди утверждают, что построили транзисторную реплику 6502 :o

http://www.evilmadscientist.com/2016/6502/
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: 6502

Post by Lavr »

Shaos wrote:Вот тут люди утверждают, что построили транзисторную реплику 6502 :o
Не удивлюсь. Его уже многократно делали на мелкой логике, и в онлайн его эмулировали, так что
до транзисторов оставался один шаг...

То, что такие выдающиеся люди, как Чак Педл и Тед Хофф запихивали в маааленький кристалл,
всех вдруг расперло повторить на больших транзисторах! :o

Необьяснимый вираж истории... 8)
iLavr
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Эмуляторы и аналоги 6502

Post by Lavr »

Аналоги 6502 на ТТЛ также обсуждаются здесь: 6502 from 74HC logic .

Хотя часть упомянутых в этом топике ссылок там повторяется.
iLavr
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: 6502-TTL Proteus

Post by Lavr »

Lavr wrote:Нашел у себя Proteus-модель TTL-аналога 6502 - 6502.rar.
Там, собственно, сам 6502 и вроде как простые интерфейсные схемы УВВ с выводом
информации на LCD-дисплей.
Работает ли оно реально как 6502 - точно сказать не могу...
Я тут поковырялся в разных проектах, где 6502 эмулируют на дискретной логике,
и вывод оказался довольно интересный: практически во всех проектах авторы
делают не 6502, а некий весьма похожий процессор, который выполняет в той или
иной мере систему команд 6502, но, как честно пишут сами авторы, их конструкции
скорее всего не смогут заменить реальный 6502, если повыводно соединить их
с панелькой реального процессора.

И дело тут, как мне представляется, в таймингах оригинального 6502.
Не секрет уже, что его оригинальная тактовая последовательность Ф0, Ф1, Ф2 формируется
на задержках элементов: http://wiki.breaknes.com/6502:clock
А это довольно неприятно эмулировать, поскольку нет привязки к опорному сигналу.
В модели 580ВМ80, которую здесь на форуме разработали, задержки не учитываются
совсем, но модель нормально работает, т.к. всё привязано к тактовым импульсам.

В FPGA-версиях 6502 с корректными таймингами их формируют из высокой частоты
тактирования самой FPGA, а для тактирования "FPGA-6502" используют отдельный
генератор.

Так что большинство авторов проектов 6502 из "мусора серии 74хх" лукаво не
мудрствуют, а придерживаются известных блок-схем этого микропроцессора (которые
все есть и
в этой ветке на нашем форуме), после чего применяют "длинное" ПЗУ
микрокоманд, чтобы заставить все регистры и вентили согласованно работать.

В такой ситуации для моделирования в Proteus интересен проект с меньшим числом
элементов, чтобы всё это приемлемо шевелилось, так что я остановился в итоге
на том, о котором ранее упоминал в этой ветке.

Я пытался ранее перенести его через SEC-файлы, но хоршего результата это не
принесло, так что я решил собрать проект заново по его принципиальным схемам.

И оно - заработало! :kruto: Хотя я и потратил всё воскресенье... :-?
Кто хочет поиграться с 6502 на 74-й серии - вот проект:
6502_74.zip
Я повыкидывал всё лишнее, что не сказывается на работоспособности, поскольку
автор рисовал схемы под разводку платы, но в 2007-м году ему это, видимо,
надоело - наигрался он в макропроцесоры... 8)

Здесь все схемы по которым я этот проект собирал:
6502_74_GIF.rar
Автор придерживался карты памяти Commodore64, на котором игрался в детстве.
Поэтому у него там эмулируются и некоторые УВВ Commodore64, насколько это
позволяет Proteus.
По словам автора у него на всём этом хламье запускается ВАСИК Commodore64,
не могу сказать - патченный или нет. Я лишь посмотрел в сети карту памяти
этого реликта, чтобы понять дешифрацию ПЗУ, ОЗУ и УВВ.

При старте проекта он выводит текстовое сообщение о тесте памяти, при этом
на бОльший ЖК выводится какая-то информация...
После этого программа зацикливается и на алфавитном дисплее пишет:"Первая
строка
" и "Вторая строка" в этих самых строках.
6502_74.gif
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Эмуляторы и аналоги 6502

Post by Lavr »

Два LCD-дисплея, один из которых графический, довольно-таки подтормаживают симуляцию,
тем более, что мне не интересен Commodore64, сэмулировать который стремился автор...

Но без графического LCD-дисплея симуляция зависает - программа явно ожидает готовности
LCD... Ну я подумал... и для ускорения её бессовестно обманул... :wink:
6502_74_1.gif
You do not have the required permissions to view the files attached to this post.
iLavr