| Начален сайт Сандъците  | "Библиотека Сандъците" | МОЖЕ ДА ПОДКРЕПИТЕ ФОРУМА С ДАРЕНИЕ >ТУК<

Автор Тема: Периферна платка от нулата  (Прочетена 1233 пъти)

0 Потреб. и 1 Гост преглежда(т) тази тема.

Неактивен 80colcard

  • Насочен електрон
  • **
  • Публикации: 77
Периферна платка от нулата
« -: 10 Декември, 2023, 16:33:01 »
Здравейте,

преди 2-3 месеца реших да експериментирам с интерфейсване през слотовете на Правеца 8. Бая документация и дейташийтове и форуми изчетох, за това кое как работи. Няма да скрия, че проследих някои от пътечките на esp32 картата на @CTV особено за /DEVSEL и R/W, защото там малко бях блокирал :)

И така, имам елементарно четене на шината за данни, като Ардуино Нано подава постоянно прост брояч през HCT574, който се буферира през LS245, a адреса на "картата" го избирам през LS138 декодер. Ардуино се захранва директно от слота. Сложих и няколко леда на буфера, но по някаква причина не се променят. Ръчно като сменям например RW линията и платката не е закачена за слота, ледовете се сменят според брояча. На линиите RW и /DEVSEL трябваше да им сложа pullup и pulldown резистори, за да работят нормално, когато са свързани за за слота.

Супер много научих от този експеримент, което е най-важното. Следващата стъпка, да закача примерно някакъв сензор за ардуиното и да му чета стойността от правеца.

Youtube линк: https://youtube.com/shorts/OlBUuFaqVTw?si=oul0a-Qw0FIlr7er



Неактивен 80colcard

  • Насочен електрон
  • **
  • Публикации: 77
Re: Периферна платка от нулата
« Отговор #1 -: 01 Март, 2024, 20:32:19 »
Предполагам много от хората тук са и във фесйбук групите, но понеже форумът е отворен към интернет, публикувам информацията и тук да не разчитаме само на Зук да пази знанието  :D

И така, 3 месеца по-късно успях да направя платката  :drinks: В прикаченото видео се вижда закачен RTC модул ds3231, който подава час:минути:секунди към шината за данни на Правеца. Може да се закачат и други i2c сензори, стига да може изходните данни да се събират в 3 байта :) Информацията може да се чете от $C0D0,$C0D1,$C0D2, когато платката е в слот 5, съответно и от други слотове ако сме сменят и адресите.

Смятам да опиша дизайна в гитхъб репо и ще го пусна тук.

ПС: адресите в маската  на гърба на картата са объркани, при друга версия ще ги оправя.

https://youtu.be/aQYrdA4iBXo

175965-0175967-1

Неактивен hris

  • Насочен електрон
  • **
  • Публикации: 86
  • Населено място: Варна
Re: Периферна платка от нулата
« Отговор #2 -: 01 Март, 2024, 21:43:55 »
Здравейте Милен, поздравления за успешната платка, може ли по-подробно да обясните съхраните схемата и други решения които сте правили докато сте разработили платката. Освен любопитство да видя вашата схема и защо така сте избрали да я направите имам и няколко въпроси. Например защо не ползвате програмируем периферен/интерфейсен адаптер 6821P (СМ602P) или интел 8255 (КР580ВВ55), вместо 4-те TTL чипа на вашата платка. Има и други въпроси но ще си задържа питанията за после за след като обясните подробно и в детайли схемата и принципа и на действие и най-важното като инж.Конструктор/разработчик, защо така сте решили/избрали конкретните решения. Като се има в предвид че Ардуиното е на 3,3 волта, а Правец 8х-а е на 5 волта.
« Последна редакция: 01 Март, 2024, 21:51:01 от hris »

Неактивен 80colcard

  • Насочен електрон
  • **
  • Публикации: 77
Re: Периферна платка от нулата
« Отговор #3 -: 02 Март, 2024, 10:03:00 »
За съжаление не съм инженер/констуктор, а електрониката ми е просто хоби  :)

Схемата ползва LS138 за дешифриране на адресите и три броя отместващи регистри HCT595 за данните. Последното съм избрал, защото е серийни към паралелни данни и така се ползват по-малко пинове от Ардуиното. Така в тях мога да избутам наведнъж 24 бита, който да ползвам на три части при нужда чрез EN пина на всеки регистър.

Иначе Ардуино Нано, което ползвам е 5 волта, може би се бъркате с Ардуино Мини, което е 3 волта.

Горните неща съм избрал, просто защото са ми познати и ги има налични и евтини. Остава предизвикателството да измисля и направя обратната връзка Правец->Ардуино, но като за първи опит мисля, че беше успех.

Неактивен imagination

  • Квантов електрон
  • ***
  • Публикации: 132
  • Населено място: Варна
Re: Периферна платка от нулата
« Отговор #4 -: 03 Март, 2024, 13:39:10 »
Здравей,
Поздравления за прокта. Погледни тази нижка
https://vintageapple.org/apple_ii/pdf/Hardware_Interfacing_With_The_Apple_II_Plus_1983.pdf
преди години бях правил варианта с CM602 (6820) - експеримент 6. Но освен мигане на светлодиоди друго не постигнах. Така де не ми дойдоха други идеи.

Поздрави.

Неактивен CVT

  • Адронен колайдер
  • *****
  • Публикации: 1354
  • Населено място: София
Re: Периферна платка от нулата
« Отговор #5 -: 03 Март, 2024, 14:15:29 »
Според мен използването на чипове които все още се произвеждат е огромен плюс, тъй като могат да се поръчат от сигурни доставчици, вместо да се разчита на трудни-за-намиране NOS или е-скрап.

Неактивен 80colcard

  • Насочен електрон
  • **
  • Публикации: 77
Re: Периферна платка от нулата
« Отговор #6 -: 04 Март, 2024, 21:55:21 »
CVT е прав. С компоненти, които се произвеждат в момента е доста по-лесно и евтино. Книжката я гледах (както и още няколко по същата тема от този период), но там наистина дават за пример стари компоненти.

От няколко дни насам се заиграх с един EEPROM (atmel at29c010a ), който е сравнително нов (datasheet-a е от 2002г) по стандартните на тези 40-годишни машини. В алиекспрес го има за по 1-2лв. Мисля да се пробвам да сложа някакъв мой "ром" на периферна платка, като експериментирам да се зарежда някаква елементарна асемблер програмка от него, например печат на екрана на текст. Ардуино е доста по-лесно да се програмира и интерфейсва, но ако ми трябва нещо наистина елементарно като функционалност, този еепром вероятно е по-подходящ.

Също така, това е подходящ начин да се запозная с асемблер (ca65) и soft switches на Правец 8/Apple II.  Ben Eater има няколко видеа в youtube, в които представя подробни стъпки как да си направиш РОМ за 6502 и как да направиш memory map-а с ca65 асемблер. При него става дума за ром, който буутва, но от това, което аз си представям, би следвало ако сложа моята програма с инструкциите в началото на ЕЕПРОМ-а и стартирам началния адрес от Монитор, спрямо слота, в който е еепрома, би следвало да тръгне. Още не съм пробвал, но теоретично, от това което съм изчел до момента, би следвало да стане.

Неактивен CVT

  • Адронен колайдер
  • *****
  • Публикации: 1354
  • Населено място: София
Re: Периферна платка от нулата
« Отговор #7 -: 05 Март, 2024, 10:56:16 »
Ако възнамеряваш да учиш 6502 асемблер ти препоръчвам VS Code + това разширение: цък!

То ти позволява да пейстнеш кода директно в едитора на Merlin-8 v2.58 през AppleWin чрез <Shift><Insert> и да го асемблираш. Има много видеа в Тубата от които можеш да научиш Асемблер "от дивана", но след като добиеш известна представа, едно от най-важните е това:



Неактивен 80colcard

  • Насочен електрон
  • **
  • Публикации: 77
Re: Периферна платка от нулата
« Отговор #8 -: 06 Март, 2024, 08:40:45 »
Мерси за напътствията. Аз като цяло си направих пайплайн за билдването. Понеже съм на MacOS съм направил следното:

Имам инсталиран cc65/ca65, като за първия имам makefile, за асемблера имам следният шел скрипт:

cl65 -t apple2 -C apple2-asm.cfg hello.s -o hello.apple --start-addr 8192

java -jar $ACX create -d hello.po --format ../apple2/template.dsk --prodos --size=140kb
java -jar $AC -p hello.po hello bin < hello.apple
osascript run-emulator.applescript

cl65 е асемблер и линкер в едно, който приема конфигурационен файл с memory map-a
$AC и $ACX (в случая bash променливи към пътя на две от подпрограмите, 'ac' и съответно 'acx') са част от https://applecommander.github.io - софтуер за манипулиране на Продос и дос.3.3 имиджи.
Първата команда създава минимален Prodos имидж, а втората вкарва компилирания асемберски файл като bin файл с имиджа

Последнияд ред e applescript, който подава компилирания имидж към емулатора Virtual][ (който е специално за MacOS), избира кой ром да буутне (appleII+/appleIIe и т.н.) и след пускането му подава "brun hello", което пуска изпълнимия компилиран файл. Така че, горе долу е същото, което ти каза, но за MacOS :)

Ето го и applescript-а, ако има някой в същата ситуация като мен. Това облекчава билд цикъла значително, особено ако пуснеш емулатора на максимална скорост и не го чакаш на 1Mhz  :D

tell application "Virtual ]["
activate
close every machine saving no
make new AppleIIe
set theDisk to disk folder & "hello.po"
tell front machine
set monochrome screen to true
set speed to maximum
insert theDisk into device "S6D1"
type line "BRUN HELLO"
end tell
end tell

Ca65  е малко по-странен асемблер от другите, но има много макроси, които улесняват някои неща. За съжаление няма много примери, въпреки че документацията е солидна. Има обаче доста код в гитхъб по разни проекти, писани на него и може да се добие престава как се случват нещата.
« Последна редакция: 06 Март, 2024, 08:47:23 от 80colcard »

Неактивен 80colcard

  • Насочен електрон
  • **
  • Публикации: 77
Re: Периферна платка от нулата
« Отговор #9 -: 08 Март, 2024, 17:52:00 »
Успях да запиша малка ca65 асемблер програмка на ЕЕПРОМ. Мапнах я на адресите на слот 5 (ot $C500-$C5FF) и с прототипната с платка и доста проводници успях да я пусна на Правеца. Големият зор беше да направя memory map-a, но накрая схванах логиката и тръгна.


Ето го и кода на програмката. Отместването на символите не съм го уцелил нещо, май трябва да сменя alternative charset-а.

.setcpu "6502"
;;.include "apple2.inc" ;; include apple2 address definitions just in case


home:= $FC58 ;;   clear screen
exit:= $E003 ;;   exit program (don't pass control to prodos)
cout:= $FDED ;;   print char routine
crout:=$FD8E ;;   pass CR to cout routine
col80:= $C300 ;;  enter 80 col mode
exitDos:= $3d0 ;; exit program pass control to ProDOS

;; define string constat so we can use it in ca65 internal functions
.define str "Hello from Assembly Lang!"

;;; string as hi-bit ASCII, offset from flashing charset
.macro ASC text
  .repeat .strlen(text), I
    .byte .strat(text, I) | $80
   .endrep
.endmacro

;; clear screen, enter 80 col mode
JSR home
JSR col80

;;set string size counter to 0
LDX #$00

;; print string loop
loop:
       TYA
       LDA msg,X
       JSR cout
       INX
       CPX lstr
       BNE loop
       JSR crout

;; exit to ProDOS
JSR exitDos

;; calc string size
lstr:  .byte .strlen(str)

;; offset to normal charset
msg: ASC str



176179-0176181-1

 

ПОЛЕЗНИ ВРЪЗКИ

Начален сайт "САНДЪЦИТЕ" Библиотека "Сандъците"
ОТГОВОРНОСТИ: Всички мнения във ФОРУМА са лични мнения на техните автори и не отразяват официалното становище на собствениците му.
   Copyright: Освен ако не е посочено друго, съдържанието на този сайт е лицензирано под:
  Creative Commons Attribution License.
  Текстът на договора за ползване на български
Copyright © 2011 - Сандъците - сайт и форум за стара електроника - За контакти  

Партньори:  | Форум за конспирации, уфология и мистика | Кактус БГ |