nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 28 Mar 2024 11:56



Reply to topic  [ 6 posts ] 
6502 & Microchess 
Author Message
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Неисповедимыми путями интернетными наткнулся я на страничку Microchess for the Kim-1

Эти микрошахматы я выкладывал здесь: http://www.nedopc.org/forum/viewtopic.php?f=104&t=18934
в качестве игрушки для модели Apple I в в Proteus.
На текстовом терминале игра в Microchess выглядит примерно вот так:
Attachment:
minichess.gif
minichess.gif [ 5.67 KiB | Viewed 18389 times ]
И где-то здесь в ветке Apple 1js я давал ссылку на видео...
Image

На сайте интересно рассказана история создания Microchess в 1976 году под платформу Kim-1.
Приведены исходные коды Microchess для разных, в том числе и современных, платформ.

Выложены интересные иллюстрации:
Attachment:
KimM.jpg
KimM.jpg [ 25.74 KiB | Viewed 18389 times ]


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

А вот что на этой странице, посвященной Microchess, мне понравилось гораздо больше, так это
программный эмулятор Kim-1 от Charle Bond:
Attachment:
kim1em.gif
kim1em.gif [ 81.33 KiB | Viewed 18389 times ]
Soft6502 Simulator

На нём можно запустить эти самые Microchess, а можно и другие программы.
Есть весьма приятный ассемблер, с выбором команды мышью.
Эмулируются два порта: на ввод и на вывод, управление на ввод - кликом мыши.

В общем, Soft6502 Simulator мне пришелся по душе больше микрошахмат, хотя информация по
Microchess, безусловно, также интересна... :wink:

_________________
iLavr


29 Aug 2018 10:40
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
По пути пришлось порешать еще одну проблему, связанную, как ни странно с симуляцией Arduino в
САПР Proteus и... с шахматами! :lol:

Как порешать все проблемы с Arduino IDE в том числе и под Windows 98 я подробно написал
вот здесь: http://www.nedopc.org/forum/viewtopic.php?f=104&t=18964#p147005

Но выяснилось, что в версии САПР Proteus 6.7 Pro под Windows 98 эти самые ходовые AVR
для Arduino - ATMega168, ATMega328 - не поддерживаются. :osad:
Они поддержаны в версии САПР Proteus 7.7 Pro библиотекой AVR2.DLL, но Proteus 7.7 Pro
не работает под Windows 98... :-?

В версии САПР Proteus 6.7 Pro под Windows 98 есть модели ATMega8, ATMega16, ATMega32,
ATMega128 и их библиотека - AVR.DLL.
Перенос же одной AVR2.DLL под Proteus 6.7 Pro вызывает его крах...

Ну что ж... делают ведь платы Arduino и на ATMega8, ATMega16, ATMega32, хотя они и считаются
неофициальными версиями, но народ порешал эту проблему для Arduino IDE!

Информации на этот счет в Интернете много, но наиболее компактно она изложена здесь:
Адаптация Atmega32 под Arduino .
В двух словах - следует скачать файл avr-netino-19Jan2012.zip и распаковать его в папку hardware
пакета Arduino IDE. После чего можно выбрать компляцию под ATMega16, ATMega32.

Есть только еще одно неприятное НО для версии САПР Proteus 6.7 Pro: я неоднократно наблюдал глючок
при моделировании проектов на моделях ATMega16, ATMega32: не работают корректно на вывод
биты порта С - PC6, PC7 (они же TOSC1, TOSC2 для часового кварца асинхронного таймера).
Я долгое время думал, что я фьюзы неверно выставляю, но обзор показал, что в версии САПР Proteus 6.7 - 6.9
этот глюк наблюдается у многих, и скорее всего это глюк в библиотеке AVR.DLL. :-?

Я сделал проверочный проект на ассемблере AVR, который позволяет проверить все 4 порта ATMega16, ATMega32:
Attachment:
ATMegaError.gif
ATMegaError.gif [ 11.74 KiB | Viewed 18232 times ]

По выводам порта пробегает "бегущий" огонек (понятно, что под каждый порт asm-исходник надо подправить
и перекомпилировать
).

В Proteus 7.7 Pro все порты работали идентично и без глюков, в версии же Proteus 6.7 Pro глюк наблюдался,
как на модели ATMega16, так и на ATMega32... :osad:

Я немного изменил тест и проверил биты порта С - PC6, PC7 (они же TOSC1, TOSC2) на ввод.
На ввод они нормально работают с внешними подтягивающими резисторами, но не подключают внутренние.
Attachment:
Atmega32_Er.zip [24.37 KiB]
Downloaded 431 times

Значит модели ATMega16 и ATMega32 в Proteus 6.7 - 6.9 можно использовать в Arduino
только с указанными ограничениями...

Возникает вопрос - а причем здесь шахматы? :roll:

Дело в том, что я решил своим тестом проверить и ATMega128, а в Proteus 6.7 Pro лишь один проект
на ATMega128 (она же ATMega 103) - это шахматы: AVRCHESS.DSN :wink:
Attachment:
TChess.gif
TChess.gif [ 31.45 KiB | Viewed 18232 times ]
Ну и решил я перед тестом партейку в шахматы с ATMega 103 сыграть... :mrgreen:

Получил массу удовольствия! :o ATMega 103 играет в шахматы также "хорошо" как и "Специалист"
в своё время... :wink: Я даже вторую партейку сгонял! Чего и вам советую... 8)

А вот проверять ATMega128 тестом я не стал - микроконтроллер с шиной данных и с шиной адреса
скорее всего не в парадигме плат Arduino...

_________________
iLavr


07 Sep 2018 11:19
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
...модели ATMega16 и ATMega32 в Proteus 6.7 - 6.9 можно использовать в Arduino
только с указанными ограничениями...
Ну раз это можно - то я это и попробовал сделать... 8)

Сразу скажу, какова была цель этой затеи: чтобы под Proteus 6.7 - 6.9 (а у меня очень хороший Proteus 6.7 Pro )
и под Windows 98 была возможность работать с проектами Arduino.

И, скажем так, что хоть и не с пол-пинка, но и без особых заморочек у меня это получилось! :D
Attachment:
ArdATMega32.gif
ArdATMega32.gif [ 112.22 KiB | Viewed 18162 times ]

Поскольку в Arduino IDE я установил поддержку avr-netino-19Jan2012.zip, то и соглашения о выводах
надо придержаться для этого варианта AVR_NET_IO.
Схема есть в архиве проекта, который я далее выложу.
Скажу честно - в этом вопросе я просадился вначале - скачал более "красочную" схему распиновки. :mrgreen:
И удивлялся потом - почему сигналы не на тех выводах? :o
Неофициальная версия Arduino ATMega32 существует в сети не в единственном варианте! :exclaim:

Теперь - схема электрическая принципиальная KIM-UNO на ATMega32:

 KIM-UNO (ATMega32) shematics
Attachment:
Duino5.gif
Duino5.gif [ 28.79 KiB | Viewed 18162 times ]

Я не стал рисовать красивой Ардуины, а оставил УГО ATMega32 как есть - на мой взгляд оно
и так слишком толстое на рабочем листе. :-?
А если нарисовать плату Ардуины, это бесполезно займет слишком много рабочего места на листе.
А чтобы не путать обозначения выводов самой ATMega32 с выводами Arduino ATMega32 AVR_NET_IO,
я сделал удобную шпаргалочку, которую выложу тоже здесь.

Далее - архив проекта KIM-UNO на ATMega32 под Proteus 6.7 - 6.9 :
Attachment:
ArdATMega32.zip [125.3 KiB]
Downloaded 442 times

В архиве - схема платы AVR_NET_IO, исходники исправленные для KIM-UNO, и собственно, сам
проект KIM-UNO на ATMega32 с прошивкой KIMUNO5.HEX.

Очень приятной неожиданностью оказалось то, что большинство проектов для Arduino не используют
выводы TOSC1, TOSC2, которые "глюкавы".
Я в проекте удачно обошелся без них, но на ввод их использовать можно, как я показал ранее.

Ну и надо сказать о неприятной неожиданности, хотя я её и ожидал, но не в таком размере... :-?

Всё это реально работает под Windows 98 в Proteus 6.7 Pro , но ОЧЕНЬ МЕДЛЕННО на проце PII 366 MHz. :osad:
Когда я писал тесты на ассемблере, я ожидал большей скорости - всё шустро крутилось, но Arduino IDE
формирует очень громоздкий код. :esad:
Для оценки - 1 знакоместо индикатора выводится секунд 30...40, так что скриншот я делал на другом ноуте,
где Intel Atom 1.8 GGz.

Тем не менее, работоспособная модель Arduino на ATMega32 под Windows 98 в Proteus 6.7 Pro теперь есть.

_________________
iLavr


09 Sep 2018 15:24
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
А чтобы не путать обозначения выводов самой ATMega32 с выводами Arduino ATMega32 AVR_NET_IO,
я сделал удобную шпаргалочку, которую выложу тоже здесь.

Attachment:
Atmega16_32_Arduino_Pinout.gif
Atmega16_32_Arduino_Pinout.gif [ 8.89 KiB | Viewed 18162 times ]
Это - шпаргалочка, а ниже - сама схема Arduino Atmega32_AVR_NET_IO:
Attachment:
Atmega16_32_AVR_NET_IO.gif
Atmega16_32_AVR_NET_IO.gif [ 45.12 KiB | Viewed 18162 times ]
А то - вдруг я где-либо ошибся? :wink:

_________________
iLavr


09 Sep 2018 15:32
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
Всё это реально работает под Windows 98 в Proteus 6.7 Pro , но ОЧЕНЬ МЕДЛЕННО на проце PII 366 MHz. :osad:
Когда я писал тесты на ассемблере, я ожидал большей скорости - всё шустро крутилось, но Arduino IDE
формирует очень громоздкий код. :esad:

Просто заинтриговало меня, что же является причиной таких невероятных "тормозов"? :o
Делал я и весьма большие, многостраничные проекты под Proteus 6.7 Pro , но все они работали
с весьма приемлемой скоростью, а не так чтобы за время вывода 6 символов можно было покурить сигарету...

Проделал я в этой связи серию тестов последовательно на ATMega8, ATMega16 и ATMega32 с целью выяснить,
что же является основным тормозом при их эмуляции в проекте KIM-UNO.
Все модели ATMega8, ATMega16 и ATMega32 обслуживаются одной библиотекой - AVR.DLL.
Тесты включали в себя работу с портами (ввод/вывод), ввод/вывод через UART, и эти же операции через
механизм прерываний.
Attachment:
Atmega_INT_UART.zip [66.99 KiB]
Downloaded 433 times

Выянилось, что жестокие тормоза возникают при чтении байта через UART по прерыванию.
После первого же прерывания начинают тормозить все операции, которые до этого выполнялись
весьма шустро.
Чтобы не было непоняток с отсылкой к "толстому коду" Arduino IDE, все тесты были написаны на
ассембере, а один тест на С я взял из сети, он скомпилирован также не в Arduino IDE.

Ну как-то изменить поведение INT_UART, не трогая внутренностей AVR.DLL практически невозможно,
не имея её исходного кода.
И я призадумался, каким "костыликом" можно бы всё это обойти... И такой "костылик" нашелся! :lol:
Attachment:
INT_UART.gif
INT_UART.gif [ 21.55 KiB | Viewed 18117 times ]

Если вход UART RX соединить со входом прерывания INT0, при этом прерывание чтения байта
через UART не разрешать, а прерывание INT0 настроить "по спаду", то в подпрограмме обслуживания
INT0 можно прочитать буффер UART обычным образом, проверив бит RXC.
Всё работает очень шустро и практически не тормозит... но выводит из использования вход INT0,
что может быть критично в ряде случаев...

_________________
iLavr


11 Sep 2018 13:25
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
emax wrote:
...все-таки портировал этот знаменитый алгоритм на С. Работает в BCC, еще запустил на AVR gcc. Решает ход много быстрее чем в эмуляторе KIMUNO
Attachment:
microchess3.zip [6.74 KiB]
Downloaded 143 times
emax wrote:
Есть желание потестить?
Есть желание посмотреть исходник на С, вы же им похвастались? :roll:

_________________
iLavr


21 Aug 2022 05:20
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 6 posts ] 

Who is online

Users browsing this forum: No registered users and 5 guests


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

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.