6502 Dendy-Computer

MOS Technology / Commodore / Apple II / NES etc.

Moderator: Lavr

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

Re: 6502 Dendy-Computer

Post by Lavr »

Konstantin18 wrote:разъемы Read и Write для чего используются ? Это что ввод-вывод с магнитофона ???
Да, это ввод-вывод с магнитофона. Вот ссылочка ранее была:
viewtopic.php?f=104&t=10219#p138032

И даже схема на отечественных элементах в топиках была:
NES_4x.jpg
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: 6502 Dendy-Computer

Post by Lavr »

Lavr wrote:И я вот подумал, чтобы не морочить себе голову всякими преобразователями интерфейсов на начальном
этапе, эту клавиатуру можно просто сделать из любой старенькой клавиатуры IBM-PC...
Но вдруг неожиданно меня шальная мысль посетила:"А не сделать ли клавиатуру для Dendy-Computer-а
из вот этой игрушки? :roll: Зря что ли я на неё деньги тратил?
"

Image

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

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

Чтобы было понятнее разбираться с кодом, отрисовал я схему FC_Keyboard целиком:
FC Family Basic Keyb.gif
И очень полезно посматривать при разборе кода на схему NES, чтобы было видно, как порты её работают:

 NES схема электрическая принципиальная
NES_8bit_full.gif

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

 Код обслуживания клавиатуры

Code: Select all

;-------код по версии 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.
Чтобы не заморачивать себе постоянно голову переводом, я сделал себе компактный дайджест на русском:
Family BASIC Keyboard.zip
В итоге мнение у меня сложилось следующее: аппаратная часть Family BASIC Keyboard не сильно упрощает
программно-аппаратный опрос клавиатуры.

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

Сейчас намерен я с реализацией интерфейса RS-232 в NES разобраться. Возможно, имеет смысл
через него прицепить и стандартную клавиатуру и ввод/вывод программ...
You do not have the required permissions to view the files attached to this post.
iLavr
Konstantin18
Maniac
Posts: 325
Joined: 15 Jan 2019 15:48
Location: Украина, Луганская обл.

Re: 6502 Dendy-Computer

Post by Konstantin18 »

Lavr wrote: посмотрел я на свои Дендики - а у меня, похоже, и нет этого широкого коннектора под Family BASIC Keyboard... :-?
По вашей ссылке можно увидеть плату весьма похожую на эту:
1.jpg
которая собрана на микросхеме UM6551, у вас на какой-то из плат она тоже есть.

Вот срисованная схема такой платы:

 схема такой платы на микросхеме UM6551
dendy_noac_6561_full.gif

Один из разъемов джойстиков, а именно JOYB содержит все необходимые сигналы.
Также их можно увидеть прямо на ногах 6551.
You do not have the required permissions to view the files attached to this post.
Last edited by Konstantin18 on 06 Feb 2021 12:15, edited 6 times in total.
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: 6502 Dendy-Computer

Post by Lavr »

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
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: 6502 Dendy-Computer

Post by Lavr »

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

Я так предварительно представлял себе следующий вариант, если карта памяти NES вот такая:
NES_main-MEM.png
То если есть идея использовать 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 надо
бы сделать частично аппаратный. По крайней мере - регистр сдвига.

В общем, кому интересно, здесь перевод этой многословной болтовни:
NES to RS-232.zip
И я прихватил немного материала по ссылкам:
http://forums.nesdev.com/viewtopic.php?f=9&t=6720
http://forums.nesdev.com/viewtopic.php? ... 0&start=15
http://forums.nesdev.com/viewtopic.php? ... 0&start=30
Но переводить я это уже не стал - там обсуждали скорости софтового RS-232...
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: 6502 Dendy-Computer

Post by Lavr »

Lavr wrote:Мне не довелось поиграть в Деньди и в силу возраста и в силу того,
что я считал приставку довольно глупой поделкой рядом с тем же Спектрумом,
по той причине, что Спек - хоть и убогий но компьютер...
Но когда Деньди притворяется компьютером - это даже очень прикольно! :roll:
Что-то меня проплющило попрограммировать на Васике... :wink:
fb2.gif
тем более, что, оказывается, не один я такой... народ вон даже видео учебные выкладывает! :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
You do not have the required permissions to view the files attached to this post.
iLavr
Fishbone
Junior
Posts: 2
Joined: 03 Jul 2021 03:48

Re: 6502 Dendy-Computer

Post by Fishbone »

Подскажите как ром Keyboard Transformer открыть эмулятором?
Написал на реале игрушку, хочу сохранить как nes файл, но family basic не 3 не 2.1 не запускают игру, а ром Keyboard Transformer не открывается, на мапер жалуется(((
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: 6502 Dendy-Computer

Post by Lavr »

Fishbone wrote:Подскажите как ром Keyboard Transformer открыть эмулятором?
Смотря каким эмулятором - их очень много этих эмуляторов!
Я пользуюсь FCE-Ultra и FCEUX-2.1.5, с точки зрения интерфейса - это одно и то же.
Там ром Keyboard Transformer открывается из меню.
Но если у вас более новый эмулятор - может не открыться. Тут кто-то писал, что формат
изменили, но я этого не проверял.
iLavr
Fishbone
Junior
Posts: 2
Joined: 03 Jul 2021 03:48

Re: 6502 Dendy-Computer

Post by Fishbone »

Lavr wrote: Я пользуюсь FCE-Ultra и FCEUX-2.1.5, с точки зрения интерфейса - это одно и то же.
Там ром Keyboard Transformer открывается из меню.
Благодарю за ответ.
Этими не открылся, скачал fceux-2-2-3, на нем запустился. Но он не поддерживает Tape recorder.
Nestopia поддерживает, но почему-то не запускает Keyboard Transformer
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: 6502 Dendy-Computer

Post by Lavr »

Lavr wrote:Если я правильно понял, то некто решил написать для NES программу-Монитор.
A machine language monitor for NES: https://github.com/freem/nesmon
В общем я давно уже решил не ждать пока этот некий "некто" напишет, наконец, для NES программу-Монитор...
Тщательно всё обдумав, чего я лично от такой программы хочу, я пришел к выводу, что меня устроит небольшая
программка, занимающая не более 2048 байт, т.е. 1 ПЗУ типа РФ5, у которой есть минимальный функционал,
и возможность загрузки программ через внешний интерфейс.

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

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

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

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

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

Знакогенератор я специально расточил под кодовую таблицу Windows-1251, чтобы в дальнейшем никакими кодировками
не заморачиваться.
monitor.PNG
Графика расположена пока произвольным образом, как было удобно рисовать. Возможно, она и не вся нужна, но что-то
для создания простеньких игр я оставил...

Отличия NES-Woz_Monitor от оригинала:

Code: Select all

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 на русском языке есть у нас здесь: 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:
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: 6502 Dendy-Computer

Post by Lavr »

Lavr wrote:Будем работать дальше... 8)
Причесал я программу, подправил все неточности (явных ошибок не нашел), выкинул все вспомогательные
отладочные подпрограммы, но в заданный объём 0F800H...0FFFFH всё же не уместился... :-?
monitor.nes.zip
Хотя в объёме 0F000H...0FFFFH остаётся примерно 1.7 КБайт свободного места...

И самый большую часть программы занимает всё же драйвер Family BASIC Keyboard. :(
У него одни таблицы только...

Code: Select all

;;--------- Таблица заглавные 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-Денди.
Аппаратная поддержка позволит упростить и программную часть. Подумаю над этим железом...
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: 6502 Dendy-Computer

Post by Lavr »

Lavr wrote: любую из современных клавиатур, что XT, что PS/2 NES в принципе может прочитать и вовсе
без аппаратных примочек.
Была (и до сих пор есть, ибо проверил) вот такая страница на просторах Интернета:
PC Keyboard FAQ V1.00

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

 код взаимодействия 6502 с клавиатурой PS/2

Code: Select all

;   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
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: 6502 Dendy-Computer

Post by Lavr »

Lavr wrote:Оргвывод такой, что следует всё же в картридже оставить 9-разрядный сдвиговый регистр.
Это облегчит реализацию протоколов типа RS-232 и SPI, а также позволит не занимать порты
джойстиков NES-Денди.
Сдвиговый регистр пришлось поставить даже 10-разрядный, :wink: и вот что в итоге получилось:
6502_ShiftR.PNG
Это 2 штуки К155ИР1, обрамлённые D-триггерами К155ТМ2, реализуют аппаратно протокол 8-N-1,
программно остаётся лишь отслеживать интервалы времени и сдвигать этот длинный регистр.

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

Ниже - как это всё работает в схеме с моделью 6502 и с Монитором Woz-a подпиленным совсем
чутка для работы с Shift-регистром вместо UART.
6502_Shift.PNG
А далее - архив с проектом, и внутри Вордовский файл - как всё это работает...
SPI_6502L3.zip
Написал для себя, поскольку я в отпуске, проектом занимался эпизодически, и всякий раз забывал
всякие нюансы работы этой схемы на мелкой логике... :neutral:

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

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

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

Это вполне реализуемо, как я сам недавно с некоторым удивлением узнал, и это очень упрощает
аппаратную часть в Дендике, хотя она всё равно не слишком простая получилась.
Вот только это потребует написания собственной специальной программы-загрузчика.
Просто терминальной программой обойтись не получится... :-?
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: 6502 Dendy-Computer

Post by Lavr »

Lavr wrote:Ну и последнее, что у меня не вызывает восторг, ...
Не вызывает восторг и вот ещё какой факт: блоки питания приставок Dendy довольно нЕмощные.
Насколько я знаю, для старых моделей приставки ток БП был порядка 0.5 А, сейчас же, когда и
микропроцессор и картриджи - капельки на платах, блок питания и вовсе 300 мА ограничен...

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

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

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

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

В общем, неспортивно тут, что сама Ардуина по мощности и возможностям превосходит, пожалуй,
Dendy но можно ведь смотреть на неё, как на очень популярную схемную деталь... :wink:
Собственно, для этого ведь придумали микроконтроллеры! :ebiggrin:
iLavr
axechita
Junior
Posts: 7
Joined: 14 Aug 2022 10:20

Re: 6502 Dendy-Computer

Post by axechita »

На Хабре была опубликована статья (перевод) в которой рассказывалось о "BBGDOS — аналог MS-DOS для NES"
https://habr.com/ru/post/680196/
отрывок из статьи
"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