nedoPC.org

Community of electronics hobbyists established in 2002

...
Atom Feed | View unanswered posts | View active topics It is currently 20 Jan 2020 22:58



Reply to topic  [ 56 posts ]  Go to page Previous  1, 2, 3, 4
РК-ДОС 
Author Message
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 18218
Location: Colorado
Reply with quote
jcuken wrote:
Контроллер клонирован:
http://sensi.org/~tnt23/rk86/

Image

Исходники в формате KiCad выложены на git: https://github.com/timtashpulatov/rk86kngmd

и что, работает?...

_________________
:eugeek: https://twitter.com/Shaos1973


22 Aug 2017 21:43
Profile WWW
Junior

Joined: 04 Jul 2017 13:45
Posts: 2
Reply with quote
Работает, аж шуба заворачивается.


Attachments:
replica_assembled.jpg
replica_assembled.jpg [ 244.99 KiB | Viewed 1309 times ]
22 Aug 2017 22:33
Profile
Fanat
User avatar

Joined: 11 Jun 2012 08:30
Posts: 71
Reply with quote
Неожиданно, Ilya Kozlov (afaik не участник форума) собрал мой вариант контроллера образца конца 2012 года и смог его запустить на РК86/SRAM:
Quote:
Добрый день, всё-таки получилось запустить Ваш контроллер FDC для платы Rk-86 SRAM 32k, подтянул резистором 1КОм сигнал Ready на плате контроллера, так что подтверждаю работоспособность Вашей версии контроллера, но без подбора дисковода всё-таки не обошлось, гарантирована работоспособность на дисководах марки Samsung SFD-321B/LE(b) ревизий T3, T4, T5, так же, возможно в каждом случае, необходимо регулировать головку дисковода.

Он же собрал описанный выше клон контроллера НГМД для "Микроши":
Quote:
Так же лично познакомился с Тимуром (ака tnt23), это тот человек, который клонировал FDC для Микроши, и взяв у него платку, тоже спаял себе этот контроллер, все тоже работает на тех же дисководах и софт нормально читается и копируется.

Респект!


Attachments:
image-14-08-19-11-29-2.jpeg
image-14-08-19-11-29-2.jpeg [ 162.08 KiB | Viewed 609 times ]
image-14-08-19-11-29-1.jpeg
image-14-08-19-11-29-1.jpeg [ 123.86 KiB | Viewed 609 times ]
image-14-08-19-11-29.jpeg
image-14-08-19-11-29.jpeg [ 534.6 KiB | Viewed 609 times ]


Last edited by alexcp on 15 Aug 2019 18:20, edited 1 time in total.

14 Aug 2019 11:01
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 18218
Location: Colorado
Reply with quote
Круто :rotate:

_________________
:eugeek: https://twitter.com/Shaos1973


14 Aug 2019 18:47
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
...статья Бориса Фролкина "Как подсчитать контрольную сумму" ("Радиолюбитель ", N 7/93), ошибочка была, и вроде как её потом нашли: Радиолюбитель 11/1994, c.15 - "Возвращаясь к напечатанному".

Приспичило мне сегодня "контрольную сумму" посчитать... и вроде идею этого метода я помню,
но и помню, что где-то там был косяк, ставший стандартом. Пришлось искать Бориса Фролкина... :wink:
Но чтобы в другой раз не искать, пусть будет здесь... 8)

 Как подсчитать контрольную сумму
Attachment:
RL_7_1993_c10.jpg
RL_7_1993_c10.jpg [ 1.5 MiB | Viewed 290 times ]

Attachment:
RL_7_1993_c11.jpg
RL_7_1993_c11.jpg [ 1.71 MiB | Viewed 290 times ]

Attachment:
RL_11_1994_c15.jpg
RL_11_1994_c15.jpg [ 1.31 MiB | Viewed 290 times ]


Журналы "Радиолюбитель", если вдруг надо, можно невозбранно брать здесь:
Белорусский журнал «Радиолюбитель»

P.S. И когда я это всё прочитал, выяснилось, что "контрольную сумму" посчитать мне надо для "Микроши",
а она считается несколько иначе...
:-?

_________________
iLavr


14 Dec 2019 12:12
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
В общем, ковырял я, ковырял Интернет на повод адреса подпрограммы, где вычисляется КС у "Микроши"...
А нашел в своём собственном бумажном руководстве по "Микроше" там ручкой было мной приписано:
0FBAAH - подсчет контрольной суммы [HL]-[DE] (портит [HL]), выход - [BC]

Ну и я быстренько код подсчета контрольной суммы для "Микроши" раскопал: :wink:
Code:
LFBAA:
        LXI     B,0000H
LFBAD:
        MOV     A,M
        XRA     C
        MOV     C,A
        CALL    LFA1D
        MOV     A,M
        XRA     B
        MOV     B,A
        CALL    LFA1D
        JMP     LFBAD
LFA1D:
        CALL    LFA17
        JZ      LF9AA
        LDA     760BH
        CPI     03H
        JZ      LF9AA
        INX     H
        RET
LFA17:
        MOV     A,H
        CMP     D
        RNZ
        MOV     A,L
        CMP     E
        RET
LF9AA:
        INX     SP
        INX     SP
        RET

Я не знаю и не стал смотреть, что за ячейка памяти 760BH, но код 03H в ней подпрограмму прерывает.

_________________
iLavr


14 Dec 2019 13:38
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Не то, чтобы мне на старости лет захотелось посчитать контрольные суммы... :lol:
Просто я пытаюсь программировать на Best_C под "Микрошей", "Специалистом" и "Партнером"
на эмуляторе Виктора Пыхонина. И есть необходимость корректно "подсовывать" ему файлы. 8)

В общем, чтобы больше не возвращаться к этой теме, - КОНТРОЛЬНАЯ СУММА - алгоритм по-русски:
Lavr wrote:
У "Радио РК-86", "Специалиста", "Партнера", "Ориона" в регистре C складываются все байты подряд. В регистре B складываются все эти же байты КРОМЕ ПОСЛЕДНЕГО :exclaim: с учетом флага переноса при сложении в регистре C.

Только в "Специалисте" Начало Программы, Конец Программы и Контрольная Сумма записываются как "Младший Байт - Старший Байт", во всех остальных - как " Старший Байт - Младший Байт".
У "Партнера" перед Контрольной Суммой идут байты: 00H, 0E6H.

У "Микроши" через XOR в регистре C складываются все ПЕРВЫЕ БАЙТЫ. В регистре B складываются через XOR все ВТОРЫЕ БАЙТЫ. (Специально не пишу чётные–нечетные, т.к. индексация в файле может быть как от "0, так и от "1".)

Ну я себе по-быстрому набросал две консольные утилиты, которые считают эти Контрольные Суммы:
Attachment:
CH_SUMM.zip [70.81 KiB]
Downloaded 17 times

Проверял только на вариантах Best_C, но вроде всё правильно...

_________________
iLavr


15 Dec 2019 07:35
Profile
Fanat
User avatar

Joined: 11 Jun 2012 08:30
Posts: 71
Reply with quote
Для коллекции: я когда-то писал программу для эмуляции загрузки программ в РК с магнитофона на Маке (на самом деле, на любой платформе. где есть компилятор С и библиотека PortAudio). Там контрольная сумма считалась так:
Code:
long checksum(unsigned char* buffer, long size)
{
    long loByte = 0;
    long hiByte = 0;
    long i = 0;

    for (;;) {
        loByte += *buffer;
        if (++i >= size) {
            return (loByte & 0xFF) + (hiByte << 8);
        }
        hiByte += *buffer;
        hiByte += ((loByte >> 8) & 1);
        loByte &= 0xFF; hiByte &= 0xFF;
        buffer++;
    }
}

В Мониторе РК это сделано так:
Code:
ROM_MON:FB16 checksum_block:                         ; CODE XREF: ROM_MON:F82A↑j
ROM_MON:FB16                                         ; sub_F8EE+1AF↑p ...
ROM_MON:FB16                 lxi     b, 0
ROM_MON:FB19
ROM_MON:FB19 loc_FB19:                               ; CODE XREF: checksum_block+14↓j
ROM_MON:FB19                 mov     a, m
ROM_MON:FB1A                 add     c
ROM_MON:FB1B                 mov     c, a
ROM_MON:FB1C                 push    psw
ROM_MON:FB1D                 call    cmp16           ; compares DE to HL; returns Z flag; destroys A
ROM_MON:FB20                 jz      loc_F99F
ROM_MON:FB23                 pop     psw
ROM_MON:FB24                 mov     a, b
ROM_MON:FB25                 adc     m
ROM_MON:FB26                 mov     b, a
ROM_MON:FB27                 call    sub_F999
ROM_MON:FB2A                 jmp     loc_FB19
ROM_MON:FB2A ; End of function checksum_block
[...]
ROM_MON:F999 sub_F999:                               ; CODE XREF: memset+1↓p
ROM_MON:F999                                         ; sub_F8EE+114↓p ...
ROM_MON:F999                 call    cmp16           ; compares DE to HL; returns Z flag; destroys A
ROM_MON:F99C                 jnz     loc_F9A2
ROM_MON:F99F
ROM_MON:F99F loc_F99F:                               ; CODE XREF: checksum_block+A↓j
ROM_MON:F99F                 inx     sp
ROM_MON:F9A0                 inx     sp
ROM_MON:F9A1                 ret
ROM_MON:F9A2 ; ---------------------------------------------------------------------------
ROM_MON:F9A2
ROM_MON:F9A2 loc_F9A2:                               ; CODE XREF: sub_F999+3↑j
ROM_MON:F9A2                 inx     h
ROM_MON:F9A3                 ret
[...]
ROM_MON:F990 cmp16:                                  ; CODE XREF: sub_F999↓p
ROM_MON:F990                                         ; sub_F8EE:loc_FA3F↓p ...
ROM_MON:F990                 mov     a, h
ROM_MON:F991                 cmp     d
ROM_MON:F992                 rnz
ROM_MON:F993                 mov     a, l
ROM_MON:F994                 cmp     e
ROM_MON:F995                 ret
ROM_MON:F995 ; End of function cmp16


15 Dec 2019 08:46
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
alexcp wrote:
...на любой платформе. где есть компилятор С и библиотека PortAudio). Там контрольная сумма считалась так:...

Я подумал, что если алгоритм понятен по-русски, всяк его сможет воплотить на том, на чем сам пишет.

Я лично на Quick Basic написал, потому как у меня там шаблон готовый для утилит преобразования файлов. :lol:
Я только заголовок и основной цикл меняю в каждом конкретном случае... :wink:

А на С и под РК-86 ещё Виктор Пыхонин давненько исходник выкладывал из emu80:

Code:
uint16_t cs = 0;                                       
for (uint16_t i = 0; i < fileSize - 1; i++) {         
    cs += buf[i];                                     
    cs += (buf[i] << 8);                               
}                                                     
cs = (cs & 0xff00) | ((cs + buf[fileSize - 1]) & 0xff);

_________________
iLavr


15 Dec 2019 09:29
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Lavr wrote:
...статья Бориса Фролкина "Как подсчитать контрольную сумму" ("Радиолюбитель ", N 7/93), ошибочка была, и вроде как её потом нашли: Радиолюбитель 11/1994, c.15 - "Возвращаясь к напечатанному".

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

Ну не люблю я читать с картинок! :lol:

_________________
iLavr


17 Dec 2019 15:22
Profile
Doomed
User avatar

Joined: 19 Feb 2017 04:46
Posts: 415
Location: С-Петербург
Reply with quote
.
Посты про контрольную сумму здесь не по теме. К тому же в RK-DOS контрольная сумма секторов считается другим, хотя и подобным алгоритмом (отличие во втором байте КС). Прошу админа перенести шесть предыдущих постов о изысканиях на тему КС в Микроше в тему "Разное для Микроши" или ещё куда-нибудь. И если уж речь о подпрограмме подсчёта стандартной КС (п/п F82A), то оптимальнее всех других она сделана в ПЗУ ОРИОНА:

Code:
CHSUM:  LD      BC,0
CHSLOO: LD      A,C
        ADD     A,(HL)
        LD      C,A
        PUSH    AF
        CALL    CMPDH
        JP      Z,POPAF
        POP     AF
        LD      A,B
        ADC     A,(HL)
        LD      B,A
        INC     HL
        JP      CHSLOO

POPAF:  POP     AF
        RET

Пару лет назад я выкладывал несколько улучшенных версий RK-DOS, но сейчас тот сайт протух. Изменять RK-DOS требуется по многим причинам. Во-первых, популярные в 1992 году дисководы 5.25"-DD имеющие выходной сигнал READY на 34-той ламели врубного разъёма, сейчас стали недоступными. В моду вошли дисководы на 3.5", в которых сигнал READY был только на ранних вариантах этих дисководов. Дешёвые массовые флопы 3.5" не имеют не только сигнала READY, но в них нет даже конфигуратора с перемычками для выбора номера привода (т.е для выбора включать дисковод в ОС как A: или как B:) и задавать это приходится позиционно, перекрученным шлейфом.

Оригинал RK-DOS нуждается для работы в наличии сигнала READY, иначе происходит запись на диск при ещё не раскрученном до номинальной скорости шпинделе и дискета портится. Выход из этой ситуациия я придумал в 1993, когда поимел флоповод TEAC-55FR 5.25"-HD, в котором тоже не было сигнала READY.

Я использовал аппаратное решение - два последовательно включённых КМОП-вентиля с RC цепочкой между, образующие собой узел задержки сигнала на 0.75 секунды. На вход первого вентиля подаётся сигнал полученный объединением на диодах выборки DS0 и DS1. В итоге READY формируется спустя 0.75 секунды после вызова подпрограммы PUSK RK-DOS. Такая "химия" работала. Современные пользователи RK-DOS почему-то до этого не додумались и надрываются в безуспешных поисках антикварных дисководов 3.5" с сигналом READY.

Впоследствии я чуть изменил RK-DOS, введя программное формирование сигнала READY из сигнала INDEX. По линии INDEX выдаётся один импульс за оборот в момент прохождения индексной дырки над оптроном. Т.к в современном флоповоде колесо разгоняется до номинальной скорости всего за пару оборотов, то достаточно обнаружить прохождение нескольких импульсов INDEX и можно считать, что READY получен.

Кроме того менять код оригинала RK-DOS надо потому, что на процессоре Z80 оригинал RK-DOS вообще не работает (т.к в Z80 команды IN/OUT работают иначе). Также очень неудобно, что команда DIR выдаёт список файлов в одну колонку, что из-за ролика экрана не позволяет обзор списка файлов. Есть ещё два неудобства - в именах файлов допустимы только цифры и буквы (спец.сиволы недопустимы). Кстати, оригинальное ПЗУ F800 в РК86 не умеет вводить символ "подчёркивание", это делает только доработанное ПЗУ. А также неприятно, что RK-DOS разделителем в командах всегда требует "запятую", а пробел недопустим, что неудобно для людей.

Два года назад я странслировал универсальную для обоих процессоров версию 2.96. Эта версия получена оптимизацией RK-DOS по объёму кода. За счёт чего исключены команды IN/OUT, но команды Z80 не используются. Благодаря чему получилась универсальная версия RK-DOS пригодная, как для процессора КР580, так и для Z80, но по прежнему нуждающаяся в сигнале READY.

Но т.к версия работающая на НГМД без READY была только для Z80, а он у большинства пользователей РК86 отсутствует, то вчера я ещё немного уплющил код и мне удалось отчистив код от команд IN/OUT, впихнуть в 4 кб версию RK-DOS работающую с дисководом без READY и, таким образом получить версию пригодную как для КР580 так и для Z80. Версия RK-DOS с командами IN/OUT использующая INDEX уже имелась ранее, её удалось сделать сразу, ещё пару лет назад, но вот от команд IN/OUT ранее избавиться не удавалось.

Очистка от команд IN/OUT увеличивает объём кода и в кодах КР580 никак не влезала в 4 кб. Недавно делая CP/M для РК86 я обнаружил, что сдуру использовал п/п-му READY из RK-DOS 1994 года. Оказывается впоследствии, используя п/п-ммы RK-DOS для CP/M, я немного оптимизировал эту п/п-мму. Подпрограмма READY там стала на 15 байтов короче.

Использование этой п/п-ммы из CP/M ОРИОНА решило наконец проблему нехватки объёма ПЗУ. Стало не хватать лишь десятка байтов, которые приложив дополнительные усилия удалось выиграть. В итоге удалось избавить версию 2.97 от мерзких команд IN/OUT и получилась наконец желаемая версия и без READY и без команд IN/OUT, т.е универсальная, пригодная для всех дисководов и всех процессоров.

Эти версии решают проблему с подбором дисководов для РК86 и Микроши. Итак на сегодня есть следующие версии RK-DOS:

Версия 2.95. READY надо, КР580. Требует дисковод с сигналом READY, на Z80 не работает. DIR в одну колонку.

Версия 2.96. READY надо, Z80 / КР580. Требует дисковод с сигналом READY, но работает и на Z80.

Версия 2.97. Без READY, КР580. Не требует наличия сигнала READY. Только КР580 (есть IN/OUT).

Версия 2.98. Без READY. Z80. Работает только при Z80, имеет свободное место для доработок.

Версия 2.99. Без READY, Z80 / КР580. Не требует дисковод с сигналом READY и не требует КР580.

Вот здесь все исходники и коды этих версий RK-DOS (чтобы получить код надо запустить командный файл или можно коды взять в эмуляторе по ссылке ниже).

Версии RK-DOS (кроме 2.99) разрешают в именах файлов запрещённые в оригинале символы (апостроф, доллар, тире, равно) и вывод каталога делается в три колонки. В качестве ПЗУ в РК удобно ПЗУ, код которого выложен здесь. Оригинал ПЗУ РК не работает с Z80, а это ПЗУ универсальное, т.е работает с Z80 и КР580 (и имеет ещё 153 свободных ячейки ПЗУ для расширений).

Вот здесь можно скачать версию эмулятора с эмуляцией РК-КНГМД, работающую с обоими процессорами, где можно посмотреть и проверить RKDOS, а для удобства в ПЗУ F800, кроме директив <K> и <H> там добавлена команда <B> (без параметров), что делает запуск RK-DOS. Директива <G> - правильная, передаёт запускаемой программе два параметра и позволяет возврат в монитор по RET.

Пользование простое, распаковываете, запускаете файл Emu80.exe, затем нажимаете <B> и <ВК>. Затем можно ввести команду DIR или запустить седовский нортон SE.COM. Чтобы при смене платформы не надо было удалять файл emu80.run, откомментируйте одну из строк в конце файла emu80.conf. Чтобы заменить файл RK-DOS надо заменить строку с именем файла (это сразу в начале конфига).

Позднее я выложу версию RK-DOS на 6 кб (ПЗУ 8 кб с E000, а РК-КНГМД перенесён с F000 на 8800), которая не нуждается в некоторых часто используемых SYS-файлах и поддерживает эл.диск (32К...512К, размер ЭД определяется автоматически) из дополнительного ОЗУ включенного странично в окне A000...BFFF.

Я занялся РК-КНГМД для РК86 не ради РК86, который меня мало интересует, а лишь потому, что надо отладить CP/M-подпрограммы для РК-КНГМД. Для РК86 вообще и в том числе под RK-DOS я не намеревался что-либо писать, хотя возможно что-то перетранслирую из имеющихся исходников.

Однако у меня есть исходники нортона на Z80 для RK-DOS, но не для РК86, а для ОРИОНА. Адаптация его для РК86 в 15 раз проще, чем написание с нуля. Надо только убрать Z80-команды LD (nnnn),RR JR DJNZ и SBC (а другие Z80-команды я не использую) и переделать вывод на экран ОРИОНА на вывод на экран РК86. Для меня лично этот нортон интересен лишь для RK-DOS Специалиста, потому вскоре я собираюсь адаптировать этот нортон для него (для Специалиста это проще, чем для РК86, т.к у ОРИОНА и Специалиста одинаковый экран).

Если будут заинтересованные в RK-DOS-нортоне на РК86 лучшем, чем SE.COM Е.Седова, то я могу этот нортон переделать для базового РК86.

 
.
Вот с такой простой процедурой эмуляции READY у меня почти 25 лет с РК-КНГМД работали в CP/M дисководы без READY. Для эмуляции READY из сигнала INDEX не обязательно мерить период 200 МСЕК между двумя импульсами (что на РК проблематично, т.к он плохо работает в реальном времени). Современные флопы разгоняются уже за 2-3 оборота, потому достаточно просто отследить приход 2-3 импульсов и можно считать, что шпиндель вышел на номинальную скорость в 300 об/мин. Я использовал дисковод 5.25"-HD и ждал 6 оборотов. Для дисковода 3.5" достаточно ждать всего 2-3 оборота.

В эмуляторе EMU80 READY выдаётся быстро, потому кажется, что версия RK-DOS с контролем READY реагирует быстрее. А на реале задержка одинакова. Флаг PSKFLG взводится по первому вызову п/п PUSK (сбрасывается он в RK-DOS п/п-ммой OSTANOV). П/п PUSK вызывается при чтении/записи каждого сектора, но благодаря флагу PSKFLG контроль раскрутки колеса делается только первый раз при невращающемся колесе.

Code:
CHK_OB  EQU     4               ; число оборотов колеса до выдачи READY

READY:  LD      HL,PSKFLG       ; READY нет - проверяем INDEX
        LD      A,(HL)
        LD      (HL),255

        INC     A
        RET     Z

        LD      B,CHK_OB
IDXLOO: CALL    OBOROT
        RET     NZ
        DEC     B
        JP      NZ,IDXLOO
        RET

OBOROT:
;       LD      H,0FFH          ; ЖДЕМ INDX 1
        LD      D,H
INDX1:  LD      A,(PORT+1)
        AND     IDXMSK
        JP      NZ,INDX2
        DEC     HL
        LD      A,H
        OR      L
        JP      NZ,INDX1
        INC     A
        RET

INDX2:  ; LD      D,0FFH        ; ЖДЕМ INDX 0
INDX3:  LD      A,(PORT+1)
        AND     IDXMSK
        RET     Z
        DEC     DE
        LD      A,D
        OR      E
        JP      NZ,INDX3
        INC     A
        RET


PS. Если у кого-то родится идея как ещё можно ужать код в 580-тых версиях хотя бы на один байт, пожалуйста сообщите.


15 Jan 2020 15:18
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 56 posts ]  Go to page Previous  1, 2, 3, 4

Who is online

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