Форум за любителите на Стара електроника
Персонални компютри, игрови приставки и друга стара електроника за забавление => Ремонт, схеми, документация, литература => Темата е започната от: 80colcard в 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 (https://youtube.com/shorts/OlBUuFaqVTw?si=oul0a-Qw0FIlr7er)
-
Предполагам много от хората тук са и във фесйбук групите, но понеже форумът е отворен към интернет, публикувам информацията и тук да не разчитаме само на Зук да пази знанието :D
И така, 3 месеца по-късно успях да направя платката :drinks: В прикаченото видео се вижда закачен RTC модул ds3231, който подава час:минути:секунди към шината за данни на Правеца. Може да се закачат и други i2c сензори, стига да може изходните данни да се събират в 3 байта :) Информацията може да се чете от $C0D0,$C0D1,$C0D2, когато платката е в слот 5, съответно и от други слотове ако сме сменят и адресите.
Смятам да опиша дизайна в гитхъб репо и ще го пусна тук.
ПС: адресите в маската на гърба на картата са объркани, при друга версия ще ги оправя.
https://youtu.be/aQYrdA4iBXo (https://youtu.be/aQYrdA4iBXo)
[attach=1][attach=2]
-
Здравейте Милен, поздравления за успешната платка, може ли по-подробно да обясните съхраните схемата и други решения които сте правили докато сте разработили платката. Освен любопитство да видя вашата схема и защо така сте избрали да я направите имам и няколко въпроси. Например защо не ползвате програмируем периферен/интерфейсен адаптер 6821P (СМ602P) или интел 8255 (КР580ВВ55), вместо 4-те TTL чипа на вашата платка. Има и други въпроси но ще си задържа питанията за после за след като обясните подробно и в детайли схемата и принципа и на действие и най-важното като инж.Конструктор/разработчик, защо така сте решили/избрали конкретните решения. Като се има в предвид че Ардуиното е на 3,3 волта, а Правец 8х-а е на 5 волта.
-
За съжаление не съм инженер/констуктор, а електрониката ми е просто хоби :)
Схемата ползва LS138 за дешифриране на адресите и три броя отместващи регистри HCT595 за данните. Последното съм избрал, защото е серийни към паралелни данни и така се ползват по-малко пинове от Ардуиното. Така в тях мога да избутам наведнъж 24 бита, който да ползвам на три части при нужда чрез EN пина на всеки регистър.
Иначе Ардуино Нано, което ползвам е 5 волта, може би се бъркате с Ардуино Мини, което е 3 волта.
Горните неща съм избрал, просто защото са ми познати и ги има налични и евтини. Остава предизвикателството да измисля и направя обратната връзка Правец->Ардуино, но като за първи опит мисля, че беше успех.
-
Здравей,
Поздравления за прокта. Погледни тази нижка
https://vintageapple.org/apple_ii/pdf/Hardware_Interfacing_With_The_Apple_II_Plus_1983.pdf
преди години бях правил варианта с CM602 (6820) - експеримент 6. Но освен мигане на светлодиоди друго не постигнах. Така де не ми дойдоха други идеи.
Поздрави.
-
Според мен използването на чипове които все още се произвеждат е огромен плюс, тъй като могат да се поръчат от сигурни доставчици, вместо да се разчита на трудни-за-намиране NOS или е-скрап.
-
CVT е прав. С компоненти, които се произвеждат в момента е доста по-лесно и евтино. Книжката я гледах (както и още няколко по същата тема от този период), но там наистина дават за пример стари компоненти.
От няколко дни насам се заиграх с един EEPROM (atmel at29c010a ), който е сравнително нов (datasheet-a е от 2002г) по стандартните на тези 40-годишни машини. В алиекспрес го има за по 1-2лв. Мисля да се пробвам да сложа някакъв мой "ром" на периферна платка, като експериментирам да се зарежда някаква елементарна асемблер програмка от него, например печат на екрана на текст. Ардуино е доста по-лесно да се програмира и интерфейсва, но ако ми трябва нещо наистина елементарно като функционалност, този еепром вероятно е по-подходящ.
Също така, това е подходящ начин да се запозная с асемблер (ca65) и soft switches на Правец 8/Apple II. Ben Eater има няколко видеа в youtube, в които представя подробни стъпки как да си направиш РОМ за 6502 и как да направиш memory map-а с ca65 асемблер. При него става дума за ром, който буутва, но от това, което аз си представям, би следвало ако сложа моята програма с инструкциите в началото на ЕЕПРОМ-а и стартирам началния адрес от Монитор, спрямо слота, в който е еепрома, би следвало да тръгне. Още не съм пробвал, но теоретично, от това което съм изчел до момента, би следвало да стане.
-
Ако възнамеряваш да учиш 6502 асемблер ти препоръчвам VS Code + това разширение: цък! (https://marketplace.visualstudio.com/items?itemName=dfgordon.vscode-language-merlin6502)
То ти позволява да пейстнеш кода директно в едитора на Merlin-8 v2.58 през AppleWin чрез <Shift><Insert> и да го асемблираш. Има много видеа в Тубата от които можеш да научиш Асемблер "от дивана", но след като добиеш известна представа, едно от най-важните е това:
-
Мерси за напътствията. Аз като цяло си направих пайплайн за билдването. Понеже съм на 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 (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 е малко по-странен асемблер от другите, но има много макроси, които улесняват някои неща. За съжаление няма много примери, въпреки че документацията е солидна. Има обаче доста код в гитхъб по разни проекти, писани на него и може да се добие престава как се случват нещата.
-
Успях да запиша малка 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
[attach=1][attach=2]