nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 19 Mar 2024 02:07



Reply to topic  [ 48 posts ]  Go to page Previous  1, 2, 3, 4  Next
6502 Dendy-Computer 
Author Message
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Konstantin18 wrote:
разъемы Read и Write для чего используются ? Это что ввод-вывод с магнитофона ???

Да, это ввод-вывод с магнитофона. Вот ссылочка ранее была:
http://www.nedopc.org/forum/viewtopic.php?f=104&t=10219#p138032

И даже схема на отечественных элементах в топиках была:
Attachment:
NES_4x.jpg
NES_4x.jpg [ 211.19 KiB | Viewed 11776 times ]

_________________
iLavr


04 Feb 2021 16:38
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
И я вот подумал, чтобы не морочить себе голову всякими преобразователями интерфейсов на начальном
этапе, эту клавиатуру можно просто сделать из любой старенькой клавиатуры IBM-PC...

Но вдруг неожиданно меня шальная мысль посетила:"А не сделать ли клавиатуру для Dendy-Computer-а
из вот этой игрушки? :roll: Зря что ли я на неё деньги тратил?
"

Image

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

И я решил глянуть, как в NES программно работают со своей FC_Keyboard, и был ли смысл в их схемотехнике
тогда как любую из современных клавиатур, что XT, что PS/2 NES в принципе может прочитать и вовсе
без аппаратных примочек. NES свои джойстики читает в последовательном коде практически как байт
по интерфейсу клавиатуры...

Чтобы было понятнее разбираться с кодом, отрисовал я схему FC_Keyboard целиком:
Attachment:
FC Family Basic Keyb.gif
FC Family Basic Keyb.gif [ 17.53 KiB | Viewed 11751 times ]

И очень полезно посматривать при разборе кода на схему NES, чтобы было видно, как порты её работают:

 NES схема электрическая принципиальная
Attachment:
NES_8bit_full.gif
NES_8bit_full.gif [ 97.84 KiB | Viewed 11751 times ]

Код обслуживания клавиатуры оказался следующий:

 Код обслуживания клавиатуры
Code:
;-------код по версии Family BASIC (J) (V2.0a)
af9b:   A9 05             LDA #$05  ; 0000.0101b
af9d:   8D 16 40          STA $4016 ; reset (force row 0)
afa0:   EA                NOP
afa1:   EA                NOP
afa2:   EA                NOP
afa3:   EA                NOP
afa4:   EA                NOP
afa5:   EA                NOP
afa6:   A2 00             LDX #$00; индекс $0634+X
;---------------------------------- KBD CYCLE
afa8:   A9 04             LDA #$04;  0000.0100b
afaa:   8D 16 40          STA $4016; request LSB of NEXT row
;---------------------------------- DELAY
afad:   A0 0A             LDY #$0A
afaf:   88                DEY
afb0:   D0 FD             BNE $AFAF
afb2:   EA                NOP
afb3:   EA                NOP

afb4:   AD 17 40          LDA $4017;   @ $4017 = $DE
afb7:   4A                LSR;         xxxK KKKx --> xxxx KKKK
afb8:   29 0F             AND #$0F;    0000 KKKK
afba:   9D 34 06          STA $0634,X; 0000 KKKK --> $0634+X
afbd:   A9 06             LDA #$06
afbf:   8D 16 40          STA $4016

;---------------------------------- DELAY
afc2:   A0 0A             LDY #$0A
aFc4:   88                DEY
afc5:   D0 FD             BNE $AFC4
afc7:   EA                NOP
afc8:   EA                NOP

afc9:   AD 17 40          LDA $4017;
afcc:   2A                ROL;         xxxK KKKx  -->  xxKK KKxx
afcd:   2A                ROL;         xxKK KKxx  -->  xKKK Kxxx
afce:   2A                ROL;         xKKK Kxxx  -->  KKKK xxxx
afcf:   29 F0             AND #$F0;    KKKK 0000
afd1:   1D 34 06          ORA $0634,X; KKKK 0000 OR 0000 KKKK = KKKK KKKK
afd4:   49 FF             EOR #$FF; инверсия байта

afd6:   A0 08             LDY #$08; 0000 1000b

afd8:   0A                ASL;
afd9:   7E 34 06          ROR $0634,X; @ $0634 = $00
afdc:   88                DEY;
afdd:   D0 F9             BNE $AFD8
afdf:   E8                INX;       увеличить индекс $0634+X
afe0:   E0 09             CPX #$09;  если еще не 9-й проход цикла
afe2:   D0 C4             BNE $AFA8; --> KBD CYCLE

Особых изысков в нём нет, если в коде 6502 вообще возможны изыски... :wink:

Для понимания работы аппаратной части весьма полезно прочитать Family BASIC Keyboard Nesdev wiki.
Чтобы не заморачивать себе постоянно голову переводом, я сделал себе компактный дайджест на русском:
Attachment:
Family BASIC Keyboard.zip [74.37 KiB]
Downloaded 298 times

В итоге мнение у меня сложилось следующее: аппаратная часть Family BASIC Keyboard не сильно упрощает
программно-аппаратный опрос клавиатуры.

И посмотрел я на свои Дендики - а у меня, похоже, и нет этого широкого коннектора под Family BASIC Keyboard... :-?

Сейчас намерен я с реализацией интерфейса RS-232 в NES разобраться. Возможно, имеет смысл
через него прицепить и стандартную клавиатуру и ввод/вывод программ...

_________________
iLavr


06 Feb 2021 07:52
Profile
Maniac

Joined: 15 Jan 2019 15:48
Posts: 326
Location: Украина, Луганская обл.
Reply with quote
Lavr wrote:
посмотрел я на свои Дендики - а у меня, похоже, и нет этого широкого коннектора под Family BASIC Keyboard... :-?

По вашей ссылке можно увидеть плату весьма похожую на эту:
Attachment:
1.jpg
1.jpg [ 14.52 KiB | Viewed 11726 times ]

которая собрана на микросхеме UM6551, у вас на какой-то из плат она тоже есть.

Вот срисованная схема такой платы:
 схема такой платы на микросхеме UM6551
Attachment:
dendy_noac_6561_full.gif
dendy_noac_6561_full.gif [ 222.47 KiB | Viewed 11727 times ]

Один из разъемов джойстиков, а именно JOYB содержит все необходимые сигналы.
Также их можно увидеть прямо на ногах 6551.


Last edited by Konstantin18 on 06 Feb 2021 12:15, edited 6 times in total.



06 Feb 2021 11:45
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
любую из современных клавиатур, что XT, что PS/2 NES в принципе может прочитать и вовсе
без аппаратных примочек.

И, похоже, вот тут один чувачок под ником Skidlz эту мысль успешно реализовал!

NES-OS: A PS/2 keyboard interface, command line and assorted programs for the
Nintendo Entertainment System


Ну что тут скажешь... "всё уже украдено до нас!"... :wink:

_________________
iLavr


06 Feb 2021 12:41
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
намерен я с реализацией интерфейса RS-232 в NES разобраться. Возможно, имеет смысл
через него прицепить и стандартную клавиатуру и ввод/вывод программ...

В общем - поразбирался, в целом - не остался в восторге...

Я так предварительно представлял себе следующий вариант, если карта памяти NES вот такая:
Attachment:
NES_main-MEM.png
NES_main-MEM.png [ 6.38 KiB | Viewed 11663 times ]

То если есть идея использовать NES как небольшой компьютер, во всю доступную область следует
включить одну микросхему ОЗУ, а ПЗУ сделать теневым, всплывающим по RESET.
При старте NES ПЗУ переписывает из себя загрузчик по адресам $0000-$00FF и уходит в тень.
Загрузчик по RS-232 грузит всё что хочешь по адресам $5000-$FFFF и отдаёт туда управление.

Ну можно еще адаптированный Woz Monitor развернуть из ПЗУ - он маленький... 254 байта.

И мне казалось, что в этой серии басен идея похожая на мою:
NES boot-loader specification; NES boot-loader usage

Но они очень перемудрили, на мой взгляд... :-?
Маленький хитрозадуманный бутлоадер должен загрузить более мощный бутлоадер... :o
Хотя по месту $0000-$00FF можно загрузить весь Woz Monitor! :roll:

Ну да ладно... примеры кода есть, хотя на мой взгляд для NES загрузчик по RS-232 надо
бы сделать частично аппаратный. По крайней мере - регистр сдвига.

В общем, кому интересно, здесь перевод этой многословной болтовни:
Attachment:
NES to RS-232.zip [45.56 KiB]
Downloaded 295 times

И я прихватил немного материала по ссылкам:
http://forums.nesdev.com/viewtopic.php?f=9&t=6720
http://forums.nesdev.com/viewtopic.php?f=9&t=6720&start=15
http://forums.nesdev.com/viewtopic.php?f=9&t=6720&start=30
Но переводить я это уже не стал - там обсуждали скорости софтового RS-232...

_________________
iLavr


09 Feb 2021 17:19
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
Мне не довелось поиграть в Деньди и в силу возраста и в силу того,
что я считал приставку довольно глупой поделкой рядом с тем же Спектрумом,
по той причине, что Спек - хоть и убогий но компьютер...

Но когда Деньди притворяется компьютером - это даже очень прикольно! :roll:
Что-то меня проплющило попрограммировать на Васике... :wink:
Attachment:
fb2.gif
fb2.gif [ 10.25 KiB | Viewed 11615 times ]

тем более, что, оказывается, не один я такой... народ вон даже видео учебные выкладывает! :o
Family Basic Tutorial Part_1, Family Basic Tutorial Part_2

А поскольку я на этом Family Basic могу без описания напрограммировать только то, что на картинке,
то я подумал, что надо бы найти мануал на этот программный продукт, и, немного поискав, я его таки
нашел, хотя это оказалось не столь просто... :-?

Но попался мне сайт хороший https://famicomworld.com, где люди увлечены этой своей приставкой
ничуть не меньше, чем мы тут своими затеями! :kruto:
Вот у них я и нашел Family Basic Manual V2, а еще немного полистав их форум,
и книжку обнаружил Let`s Play with Family Basic

Ощущаю некий ностальгический камерный кайфец от программирования на Basic-е в маленьком окошечке... :D

_________________
iLavr


11 Feb 2021 19:42
Profile
Junior

Joined: 03 Jul 2021 03:48
Posts: 2
Reply with quote
Подскажите как ром Keyboard Transformer открыть эмулятором?
Написал на реале игрушку, хочу сохранить как nes файл, но family basic не 3 не 2.1 не запускают игру, а ром Keyboard Transformer не открывается, на мапер жалуется(((


03 Jul 2021 03:54
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Fishbone wrote:
Подскажите как ром Keyboard Transformer открыть эмулятором?

Смотря каким эмулятором - их очень много этих эмуляторов!
Я пользуюсь FCE-Ultra и FCEUX-2.1.5, с точки зрения интерфейса - это одно и то же.
Там ром Keyboard Transformer открывается из меню.
Но если у вас более новый эмулятор - может не открыться. Тут кто-то писал, что формат
изменили, но я этого не проверял.

_________________
iLavr


03 Jul 2021 04:18
Profile
Junior

Joined: 03 Jul 2021 03:48
Posts: 2
Reply with quote
Lavr wrote:
Я пользуюсь FCE-Ultra и FCEUX-2.1.5, с точки зрения интерфейса - это одно и то же.
Там ром Keyboard Transformer открывается из меню.

Благодарю за ответ.
Этими не открылся, скачал fceux-2-2-3, на нем запустился. Но он не поддерживает Tape recorder.
Nestopia поддерживает, но почему-то не запускает Keyboard Transformer


03 Jul 2021 05:35
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
Если я правильно понял, то некто решил написать для NES программу-Монитор.
A machine language monitor for NES: https://github.com/freem/nesmon

В общем я давно уже решил не ждать пока этот некий "некто" напишет, наконец, для NES программу-Монитор...
Тщательно всё обдумав, чего я лично от такой программы хочу, я пришел к выводу, что меня устроит небольшая
программка, занимающая не более 2048 байт, т.е. 1 ПЗУ типа РФ5, у которой есть минимальный функционал,
и возможность загрузки программ через внешний интерфейс.

Желательно также, чтобы эта ПЗУ "всплывала" при сбросе, как в "Специалист-МХ", и могла выключаться в тень,
оставив всё доступное пространство памяти как ОЗУ, в которое с её помощью загружена какая-то программа.

Самым лучшим кандидатом на роль такого Монитора мне представляется Woz Monitor с его 256 байтами объёма,
тем более, что я работал с его аналогом под эмуляцией ПК "Агат" и признал его довольно удобным...

В первом грубом приближении мне это сделать вроде как удалось:
Attachment:
ЭкранNES.PNG
ЭкранNES.PNG [ 45.27 KiB | Viewed 7208 times ]

Монитор Woz работает в функционале, близком к оригиналу, и с минимальными патчами кода, хотя для платформы
NES-Денди это оказалось не так-то и просто. :-?

Выкладываю NES-Woz_Monitor в архиве вместе со своим стареньким руссифицированным FCE-Ultra сугубо потому
что в программе задействована Family BASIC Keyboard и настроена она у меня там точно под клавиатуру IBM PC,
поэтому ни в какие шпаргалки-раскладки смотреть не надо. :kruto:
Attachment:
FCE-Ultra.zip [337.9 KiB]
Downloaded 156 times

Сам файл monitor.nes работает под любыми FCE-Ultra, но настройки клавиатуры я отдельно выложить не могу.

Знакогенератор я специально расточил под кодовую таблицу Windows-1251, чтобы в дальнейшем никакими кодировками
не заморачиваться.
Attachment:
monitor.PNG
monitor.PNG [ 32.63 KiB | Viewed 7208 times ]

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

Отличия NES-Woz_Monitor от оригинала:
Code:
1. Я привык, что промпт указывает на командную строку - он теперь и указывает! ;-)))
2. Нет скроллинга экрана. Аппаратный скроллинг в NES-Денди сделать очень просто, но для моих целей он не нужен.
   Отсюда следствие: с самой нижней строки вывод переходит в самую верхнюю строку.
   Если это некрасиво, работает клавиша [Home] - курсор в верхний угол экрана, а Shift+[Home] также стирает экран.
3. Русские символы включаются через [PgDown], но Woz_Monitor-у они безразличны...
4. Клавиша [Esc] прерывает текущие режимы на экране и выводит промпт, но чуть иначе, чем в оригинале Woz_Monitor.
   Ошибочный длинный вывод на экран [Esc] НЕ прерывает, только сброс как  в оригинале Woz_Monitor.
5. Карта памяти в нижних адресах такая же, как у обычной  NES-Денди.
   По адресу $300...37F - командная строка Woz_Monitor-а.
   По адресу $00FD - JMP на адрес NMI, его можно перехватить.
   По адресам $6000...7FFF - ОЗУ - в нём можно что-то запрограммировать в кодах.
   По адресам $C000...FFFF - ПЗУ, оно же зеркалируется на $8000...BFFF.
6. Клавиши [<-] и [Bksp] работают одинаково, и, в отличие от оригинального Woz_Monitor, позволяют визуальную правку.

Никаких аппаратных средств загрузки у Монитора пока нет, но режим "Отладчик" FCE-Ultra позволяет занести файл в ОЗУ.
Описание The Woz Monitor на русском языке есть у нас здесь: http://www.nedopc.org/forum/viewtopic.php?p=145947#p145947

Вот и всё пока, пожалуй... :wink: Будем работать дальше... 8)

P.S. В архиве есть также два варианта Family BASIC-а, у которых я подсматривал работу клавиатуры и знакогенератор.
Если загрузить Family BASIC (J) (V2.0a), то зайти в сам BASIC можно загрузив 20A.fc из папки sav.
Как входить в Family BASIC обычным путём написано в файле Family BASIC.txt .

P.P.S. Напомню также, что клавиатура в FCE-Ultra включается клавишей "Scroll Lock"! :lol:

_________________
iLavr


19 Jun 2022 17:51
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
Будем работать дальше... 8)

Причесал я программу, подправил все неточности (явных ошибок не нашел), выкинул все вспомогательные
отладочные подпрограммы, но в заданный объём 0F800H...0FFFFH всё же не уместился... :-?
Attachment:
monitor.nes.zip [6.1 KiB]
Downloaded 155 times

Хотя в объёме 0F000H...0FFFFH остаётся примерно 1.7 КБайт свободного места...

И самый большую часть программы занимает всё же драйвер Family BASIC Keyboard. :(
У него одни таблицы только...
Code:
;;--------- Таблица заглавные LAT. без модификаторов
MTAB1:
;;---------------------- |------------------------- KANA?
     .db $03, $5C, $00, $FF, $5D, $5B, $0D, $F7; ST_\__Sh_KA_]__[__En_F8
     .db $3D, $2D, $2F, $00, $3B, $27, $60, $F6; =__-__/__.__;__'__`__F7
     .db $30, $50, $2C, $2E, $4B, $4C, $4F, $F5; 0__P__,__.__K__L__O__F6
     .db $38, $39, $4E, $4D, $4A, $55, $49, $F4; 8__9__N__M__J__U__I__F5
     .db $36, $37, $56, $42, $48, $47, $59, $F3; 6__7__V__B__H__G__Y__F4
     .db $34, $35, $43, $46, $44, $52, $54, $F2; 4__5__C__F__D__R__T__F3
     .db $33, $45, $5A, $58, $41, $53, $57, $F1; 3__E__Z__X__A__S__W__F2
     .db $32, $31, $00, $00, $00, $51, $1B, $F0; 2__1__.__.__.__Q__Es_F1
     .db $12, $08, $20, $1F, $1D, $1C, $1E, $0B;Ins_DL_Sp_Dn_Lf_Rt_Up_CLR

;;--------- Таблица строчные LAT. с модификатором Shift
MTAB2:
     .db $03, $00, $00, $00, $7D, $7B, $0D, $18; ST_.__.__.__.__.__En_
     .db $2B, $5F, $3F, $00, $3A, $22, $7E, $17; +_'_'_?__.__:__"__~__
     .db $29, $70, $3C, $3E, $6B, $6C, $6F, $11; )__p__<__>__k__l__o__
     .db $2A, $28, $6E, $6D, $6A, $75, $69, $10; *__(__n__m__j__u__i__
     .db $5E, $5E, $76, $62, $68, $67, $79, $0F; ^__&__v__b__h__g__y__
     .db $24, $25, $63, $66, $64, $72, $74, $0E; $__%__c__f__d__r__t__
     .db $23, $65, $7A, $78, $61, $73, $77, $06; #__e__z__x__a__s__w__
     .db $40, $21, $00, $00, $00, $71, $1B, $02; @ _!__.__.__.__q__Es_
     .db $12, $08, $20, $1F, $1D, $1C, $1E, $0C;Ins_DL_Sp_Dn_Lf_Rt_Up_HOME

;;--------- Таблица заглавные KANA(RUS.) без модификаторов
MTAB3:
;;---------------------- |------------------------- KANA?
     .db $03, $5C, $00, $FF, $DA, $D5, $0D, $F7; ST_\__Sh_KA_Ъ__X__En_F8
     .db $3D, $2D, $2E, $00, $C6, $DD, $A8, $F6; =__-__.__ __Ж__Э__Ё__F7
     .db $30, $C7, $C1, $DE, $CB, $C4, $D9, $F5; 0__З__Б__Ю__Л__Д__Щ__F6
     .db $38, $39, $D2, $DC, $CE, $C3, $D8, $F4; 8__9__Т__Ь__О__Г__Ш__F5
     .db $36, $37, $CC, $C8, $D0, $CF, $CD, $F3; 6__7__М__И__Р__П__Н__F4
     .db $34, $35, $D1, $C0, $C2, $CA, $C5, $F2; 4__5__С__А__В__К__Е__F3
     .db $33, $D3, $DF, $D7, $D4, $DB, $D6, $F1; 3__У__Я__Ч__Ф__Ы__Ц__F2
     .db $32, $31, $00, $00, $00, $C9, $1B, $F0; 2__1__.__.__.__Й__Es_F1
     .db $12, $08, $20, $1F, $1D, $1C, $1E, $0B;Ins_DL_Sp_Dn_Lf_Rt_Up_CLR

;;--------- Таблица строчные KANA(RUS.) с модификатором Shift
MTAB4:
;;---------------------- |------------------------- KANA?
     .db $03, $5C, $00, $FF, $FA, $F5, $0D, $F7; ST_\__Sh_KA_ъ__х__En_F8
     .db $2B, $5F, $2C, $00, $E6, $FD, $B8, $F6; +_'_'_,__ __ж__э__ё__F7
     .db $29, $E7, $E1, $FE, $EB, $E4, $F9, $F5; )__з__б__ю__л__д__щ__F6
     .db $2A, $28, $F2, $FC, $EE, $E3, $F8, $F4; *__(__т__ь__о__г__ш__F5
     .db $5E, $5E, $EC, $E8, $F0, $EF, $ED, $F3; ^__&__м__и__р__п__н__F4
     .db $24, $25, $F1, $E0, $E2, $EA, $E5, $F2; $__%__с__а__в__к__е__F3
     .db $23, $F3, $DF, $F7, $F4, $FB, $F6, $F1; #__у__я__ч__ф__ы__ц__F2  я - тоже KANA ->
     .db $40, $21, $00, $00, $00, $E9, $1B, $F0; @ _!__.__.__.__й__Es_F1  исправлено кодом
     .db $12, $08, $20, $1F, $1D, $1C, $1E, $0C;Ins_DL_Sp_Dn_Lf_Rt_Up_HOME

;;--------- Таблица графические SYMB. без модификаторов, KANA OFF
MTAB5:
     .db $03, $FE, $00, $00, $00, $00, $0D, $F7; ST_\__Sh_KA_]__[__En_F8
     .db $FD, $F2, $00, $00, $00, $00, $00, $F6; =__-__/__.__;__'__`__F7
     .db $F1, $AA, $00, $00, $00, $00, $A9, $F5; 0__P__,__.__K__L__O__F6
     .db $EF, $F0, $00, $00, $00, $A7, $A8, $F4; 8__9__N__M__J__U__I__F5
     .db $ED, $EE, $A4, $A5, $00, $A0, $A6, $F3; 6__7__V__B__H__G__Y__F4
     .db $EB, $EC, $A3, $9F, $9E, $9A, $9B, $F2; 4__5__C__F__D__R__T__F3
     .db $EA, $99, $A1, $A2, $9C, $9D, $98, $F1; 3__E__Z__X__A__S__W__F2
     .db $E9, $E8, $00, $00, $00, $97, $1B, $F0; 2__1__.__.__.__Q__Es_F1
     .db $12, $08, $20, $1F, $1D, $1C, $1E, $0B;Ins_DL_Sp_Dn_Lf_Rt_Up_CLR

Оргвывод такой, что следует всё же в картридже оставить 9-разрядный сдвиговый регистр.
Это облегчит реализацию протоколов типа RS-232 и SPI, а также позволит не занимать порты
джойстиков NES-Денди.
Аппаратная поддержка позволит упростить и программную часть. Подумаю над этим железом...

_________________
iLavr


22 Jun 2022 05:13
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
любую из современных клавиатур, что XT, что PS/2 NES в принципе может прочитать и вовсе
без аппаратных примочек.

Была (и до сих пор есть, ибо проверил) вот такая страница на просторах Интернета:
PC Keyboard FAQ V1.00

Кроме всего прочего там приводится код взаимодействия 6502-совместимого микропроцессора
с клавиатурой PS/2:

 код взаимодействия 6502 с клавиатурой PS/2
Code:
;   6502 assembly code for controlling an AT keyboard
;
;   A 6522 is mapped at $fe30
;   PB0 goes to DATA
;   PB1 goes to CLOCK
;   Also, one of the control lines (CB1 or CB2, whichever corresponds to Interrupt enable $10)
;   No interrupt code is provided here; only the actual transfer.
;   $ff is used for passing data to/from the Get Byte and Write Byte routines. Reset has no parameters.
;
Get Byte:
      lda $fe32
      and #fc
      sta $fe32
      jsr get_bit
      ldy #$09
loop:      jsr get_bit
      ror $ff
      dey
      bne loop
      jsr get_bit
      lda $ff
      rts
 
get_bit:
      lda #$02
wait_for_hi   bit $fe30
      bne wait_for_hi
      lda $fe30
      pha
      lda #$02
wait_for_low   bit $fe30
      bne wait_for_low   
      pla
      lsr
      rts
 
Write Byte:
      lda $fe30
      and #$fc
      sta $fe30
      lda $fe32
      ora #03
      sta $fe32
      ldx #$c0
wait:      dex
      bne wait   
      lda $fe32      // Write start bit
      and #$fd
      sta $fe32
      lda #$02
wait_for_hi   bit $fe30      // Wait for clock line
      beq wait_for_hi
wait_for_lo   bit $fe30
      bne wait_for_lo   
      ldx #$08
      lda $fe32
      ldy #$01
loop      lsr $ff
      jsr write_bit      // Write data bits
      dex
      bne loop
      tya
      lsr         // Write parity
      jsr write_bit
      sec         // Write stop bit
      jsr write_bit
      lda #$01
wait_lo      bit $fe30      // Wait for handshake from kbd
      bne wait_lo
      rts
 
write_bit
      lda $fe32
      and #$fe
      bcs write_one
      ora #$01
      iny
write_one   sta $fe32
      lda #$02
wait_for_lo   bit $fe30
      bne wait_for_lo
wait_for_hi   bit $fe30
      beq wait_for_hi
      rts
 
Reset Keyboard:
      lda $fe30
      and #$fc
      sta $fe30
      lda $fe32
      ora #$03
      sta $fe32
      ldx #$c0
wait      dex
      bne wait
      lda $fe32
      and #$fd
      sta $fe32
      lda #$02
wait_for_hi   bit $fe30
      beq wait_for_hi
wait_for_lo   bit $fe30
      bne wait_for_lo
      ldx #$08
      lda $fe32
      and #$fe
      sta $fe32
      lda #$02
wait_for_hi1   bit $fe30
      beq wait_for_hi1
wait_for_lo1   bit $fe30
      bne wait_for_lo1
      dex
      bne wait_for_hi1
      lda #$02
wait_for_hi2   bit $fe30
      beq wait_for_hi2
wait_for_lo2   bit $fe30
      beq wait_for_lo2
      lda #$01
wait_for_lo3   bit $fe30
      bne wait_for_lo3
      lda #$10
      sta $fe3d
      rts

В оригинале побитно используются 2 линии порта 6522 в качестве последовательного интерфейса,
но то же самое NES может сделать через порт геймпада, у NES в принципе - последовательные интерфейсы...

Но код всё равно объёмный... :-? Поэтому я и думаю, что часть задачи необходимо всё же решать аппаратно
при помощи регистра сдвига.

_________________
iLavr


26 Jun 2022 07:58
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
Оргвывод такой, что следует всё же в картридже оставить 9-разрядный сдвиговый регистр.
Это облегчит реализацию протоколов типа RS-232 и SPI, а также позволит не занимать порты
джойстиков NES-Денди.

Сдвиговый регистр пришлось поставить даже 10-разрядный, :wink: и вот что в итоге получилось:
Attachment:
6502_ShiftR.PNG
6502_ShiftR.PNG [ 30.29 KiB | Viewed 6564 times ]

Это 2 штуки К155ИР1, обрамлённые D-триггерами К155ТМ2, реализуют аппаратно протокол 8-N-1,
программно остаётся лишь отслеживать интервалы времени и сдвигать этот длинный регистр.

Регистры К155ИР1 я выбрал поскольку у них раздельные входы стробов для сдвига и параллельной
записи. С шиной микропроцессора регистры согласуют на чтение и запись 2 шинных формирователя
типа 589АП16. Выбрал я их потому как есть у них раздельные вход и выход.
Хотя, честно говоря, это не принципиально, можно взять и К555ИР16 (или аналог) и подобрать
другие шинные формирователи, схему лишь придётся допилить...

Ниже - как это всё работает в схеме с моделью 6502 и с Монитором Woz-a подпиленным совсем
чутка для работы с Shift-регистром вместо UART.
Attachment:
6502_Shift.PNG
6502_Shift.PNG [ 101.77 KiB | Viewed 6564 times ]

А далее - архив с проектом, и внутри Вордовский файл - как всё это работает...
Attachment:
SPI_6502L3.zip [351.49 KiB]
Downloaded 140 times

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

Для конкретного воплощения в Дендике этот проект работоспособен, но сыроват по двум причинам.

1. Используемая здесь модель 6502, хотя и выполняет безошибочно систему команд, по времянкам
ему не соответствует.
2. Я не знаю, как себя ведёт микропроцессор Денди при нажатии кнопки RESET, а это важно в
процедуре начальной загрузки - придётся всё пощупать осциллографом в реальном Дендике...

Ну и последнее, что у меня не вызывает восторг, хотя я сам это и сделал: начальная загрузка
осуществляется не по протоколу RS-232, а по протоколу SPI, то есть синхронно, хотя и через
СОМ-порт компьютера, но побитным управлением СОМ-портом.

Это вполне реализуемо, как я сам недавно с некоторым удивлением узнал, и это очень упрощает
аппаратную часть в Дендике, хотя она всё равно не слишком простая получилась.
Вот только это потребует написания собственной специальной программы-загрузчика.
Просто терминальной программой обойтись не получится... :-?

_________________
iLavr


25 Jul 2022 20:10
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
Ну и последнее, что у меня не вызывает восторг, ...
Не вызывает восторг и вот ещё какой факт: блоки питания приставок Dendy довольно нЕмощные.
Насколько я знаю, для старых моделей приставки ток БП был порядка 0.5 А, сейчас же, когда и
микропроцессор и картриджи - капельки на платах, блок питания и вовсе 300 мА ограничен...

А тут 2 шт К155ИР1 и две штуки 589АП16 уже серьёзный ток потребляют!... :-?

Короче говоря, пришла мне в голову мысль совсем неспортивная, но на мой взгляд верная!

А что если бОльшую часть этого проекта взвалить на Ардуину ? :roll:
Я хоть и не поклонник Ардуин, но купил их некоторое время назад аж 4 штуки по 250 Р.
По одной лишь простой причине: все интерфейсы теперь свелись к USB, и если хочешь чем-то
поуправлять, Ардуина тут незаменима.

Обдумываю эту идею: "Информация к размышлению. Борман." (с) :lol:

В общем, неспортивно тут, что сама Ардуина по мощности и возможностям превосходит, пожалуй,
Dendy но можно ведь смотреть на неё, как на очень популярную схемную деталь... :wink:
Собственно, для этого ведь придумали микроконтроллеры! :ebiggrin:

_________________
iLavr


27 Jul 2022 05:26
Profile
Junior

Joined: 14 Aug 2022 10:20
Posts: 6
Reply with quote
На Хабре была опубликована статья (перевод) в которой рассказывалось о "BBGDOS — аналог MS-DOS для NES"
https://habr.com/ru/post/680196/
отрывок из статьи
Quote:
"BBGDOS была разработана китайской компанией BBG (также известной как BBK или BuBuGao) примерно в 1997 году.

BBGDOS — это 8-битная ОС для процессора 6502. Например, UM6561. BBGDOS очень похожа на MSDOS 3.1 или 3.2. В ней есть команды dir, cd, format, diskcopy, ver, type, copy, del, md, rd, exit, date, time, cls, rem и другие. BBGDOS работает с файлами на дискетах. Папки и файлы могут быть переданы ПК. BBGDOS загружается с дискет из сектора 0, а format /s можно использовать для создания системной дискеты. Есть два фамиклона от BBG, которые поддерживают флоппи-диски. Первый — BBG Floopy 1, второй — BBG 98."

Image


14 Aug 2022 10:38
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 48 posts ]  Go to page Previous  1, 2, 3, 4  Next

Who is online

Users browsing this forum: No registered users and 4 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.