Радио-86РК на SRAM 32K

Советский компьютер Радио-86РК (1986) и его клоны

Moderator: Shaos

User avatar
alexcp
Senior
Posts: 139
Joined: 11 Jun 2012 07:30

Re: Радио-86РК на SRAM 32K

Post by alexcp »

Вроде бы проблема в коде монитора NoICE. Как выше пишет автор, NoICE использует инструкцию RST 1 (код CF) в качестве breakpoint. RST 1 эквивалентен CALL 0008 (сохраняет PC в стеке, затем пишет 0008 в PC). Подпрограмма по адресу 0008 копируется в ОЗУ из ПЗУ при запуске монитора NoICE:

Code: Select all

;  RST 1
        PUSH    PSW
        MVI     A,2             ;state = 2 (interrupt 8)
        JMP     INT_ENTRY
        NOP
        NOP
и далее (после перехода на INT_ENTRY)

Code: Select all

        DCR     A
        JNZ     NOTBP           ;JIF NOT A BREAKPOINT
        DCX     H               ;BACK UP PC TO POINT AT BREAKPOINT
NOTBP:  JMP     ENTER_MON       ;HL POINTS AT BREAKPOINT OPCODE
То есть PC будет правильным, только если A=1, но в A записывается 2. Замена MVI A,2 на MVI A,1 (байт в ОЗУ по адресу 000A заменить с 02 на 01) решает проблему. Если автор подтвердит, что такая правка ничего не сломает, я скомпилирую монитор заново и выложу исходник и BIN ПЗУ здесь и на http://radio86rk.pbworks.com.

Забавно, что раньше никто - в том числе я сам - не заметил ошибки. Видимо, у всех по адресу 0000 располагается ПЗУ (в этом случае все должно работать правильно).
Pyk
Maniac
Posts: 252
Joined: 21 Jan 2003 04:08

Re: Радио-86РК на SRAM 32K

Post by Pyk »

Только сейчас добрался проверить.
Да, похоже, что автор действительно забыл изменить значение, указанное для примера в копируемых DUMMY_INTS.
Заменил 2 на 1, перекомпилировал - на первый взгляд работает нормально :)

У меня не самая свежая версия NoICE 9.4, но в присланном мониторе для 8080 из 9.8 в этом плане то же самое.
User avatar
alexcp
Senior
Posts: 139
Joined: 11 Jun 2012 07:30

Re: Радио-86РК на SRAM 32K

Post by alexcp »

Он не забыл - он не ожидал, что по адресу 0000 будет ОЗУ, а его монитор будет в другом месте. Он решал проблему, которая в РК86 отсутствует, но не предусмотрел организацию памяти, примененную в РК86:
The march of technology: back in the mid 1990s when NoICE was born, address 0 on an 8080, 8085, or Z80 was almost always EPROM, so that there was code to run at address 0 after reset. The NoICE monitor's assumption is that the monitor lives at 0:

Code: Select all

    ROM_START equ $0000          ;START OF MONITOR CODE
That lets "RST 0" start the monitor and "RST 1" be used for breakpoint.

But EPROM at 0 is a problem if your program uses interrupts, or uses the other RST instructions as on-byte calls, since the EPROM won't contain the code being debugged. The NoICE help at https://www.noicedebugger.com/help/work ... sicMonitor describes NoICE's solution/work-around:
Since the EPROM containing the monitor will generally reside in the portion of the processor address space where the interrupt vectors and/or interrupt handler entrypoints reside, most of the monitors re-direct the interrupts to an area of the download RAM. The location of this area is determined by equates within each monitor. There are two basic schemes:

"ROM at the bottom" processors such as the Z80 and 8051 begin execution at address zero after reset. Interrupts cause calls to reserved locations in low memory. In order for the NoICE monitor to take control after reset, it must reside in low memory. The monitor contains code to route interrupts other than reset through the lower portion of the download RAM, beginning at an address defined as USER_CODE in the monitor source. The layout of this region of USER_CODE is identical to the "real" reset and interrupt region. Thus, a user program may be debugged by locating or ORGing it to begin at USER_CODE, and may be burned into EPROM by locating or ORGing it at zero. Typically, only this single equate needs to be changed between debug and EPROM versions. Refer to the source file for your target monitor for the exact details of the routing process.
The code at DUMMY_INTS is a little obscure: when the monitor starts, it copies this code to USER_CODE (presumed to be RAM). If the code being debugged overwrites USER_CODE during loading, then the RSTs will jump to your code. But if the code being debugged DOESN'T overwrite USER_CODE, and an (unexpected) interrupt or RST occurs, the DUMMY_INT code will stop your program and return a unique numeric state for each RST. NoICE will show this as a string in the title bar as the reason that the target stopped. For 8080, this would be something like "RST 2" etc. For HC11 with build in I/O, it might be "Timer Capture 1"

This is actually much more useful on a processor like the 6809 or HC11, with interrupt vectors at the top of memory (assumed by NoICE to be in EPROM), where an uninitialized vector is more likely.

It sounds as if your hardware isn't putting the monitor at location 0, at least not after initial startup, and you are remapping your code RAM to 0. In that case, you just need to ensure that RST 1 (or whatever you use for breakpoint) gets to the code that does:

Code: Select all

        PUSH    PSW
        MVI     A,1                     ;state = 1 (breakpoint)
        JMP     INT_ENTRY
Когда я модифицировал его монитор (ровно четыре года назад), я в этом всем не разобрался. Хорошо, что разобрались сейчас. Как обещал, я соберу монитор NoICE из последнего варианта Mon8080 (NoICE 9.8 ) и моего кода для FT245RL и выложу чуть позже.
User avatar
alexcp
Senior
Posts: 139
Joined: 11 Jun 2012 07:30

Re: Радио-86РК на SRAM 32K

Post by alexcp »

Исправил, обновленный вариант выложил в этой теме (в моем посте от 16 декабря 2018 года), а также на radio86rk.pbworks.com.
Last edited by alexcp on 10 Jan 2023 10:49, edited 2 times in total.
otrazhenie
Fanat
Posts: 64
Joined: 23 Feb 2021 23:45
Location: Россия Климовск

Re: Радио-86РК на SRAM 32K

Post by otrazhenie »

Доброго дня.
Спрошу тут, т.к. у меня тоже РК86 на SRAM 32к, только проект другой. проект отсюда: https://github.com/skiselev/radio-86rk.
Все запускается, директивы работают, но программы не грузятся с ленты. до 13 выв ВВ55 сигнал доходит.
Немного напрягает отрицательная составляющая после компаратора...но не знаю критично ли это.
Так вот, после набора директивы I и загрузки программы с mp3 плеера выходит стрелка с ожиданием директивы....Ввожу G, экран моргает и вываливается в начальное состояние с веселой надписью РАДИО-86РК

осциллографом пролазил...все сигналы вроде на месте....в общем прошу направления куда копать.
You do not have the required permissions to view the files attached to this post.
User avatar
alexcp
Senior
Posts: 139
Joined: 11 Jun 2012 07:30

Re: Радио-86РК на SRAM 32K

Post by alexcp »

otrazhenie wrote:Ввожу G, экран моргает и вываливается в начальное состояние
С самим РК все в порядке, проблема в загружаемой программе. Попробуйте загрузить что-нибудь другое.
b2m
Devil
Posts: 905
Joined: 26 May 2003 06:57

Re: Радио-86РК на SRAM 32K

Post by b2m »

Учтите также, что чаще всего G соответствует G0000, а программа может загружаться по другому адресу.
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
otrazhenie
Fanat
Posts: 64
Joined: 23 Feb 2021 23:45
Location: Россия Климовск

Re: Радио-86РК на SRAM 32K

Post by otrazhenie »

alexcp wrote:
otrazhenie wrote:Ввожу G, экран моргает и вываливается в начальное состояние
С самим РК все в порядке, проблема в загружаемой программе. Попробуйте загрузить что-нибудь другое.
нууу.....это первое что я сделал. И не на одном файле. Результат всегда один. Поэтому и прошу тут помощи.
User avatar
alexcp
Senior
Posts: 139
Joined: 11 Jun 2012 07:30

Re: Радио-86РК на SRAM 32K

Post by alexcp »

otrazhenie wrote:после набора директивы I и загрузки программы с mp3 плеера выходит стрелка с ожиданием директивы
Если Монитор загрузил данные с ленты, и контрольная сумма совпала, то претензий к оборудованию быть не должно. Давайте разбираться.

После окончания ввода с ленты Монитор должен выдать на экран три числа - начальный и конечный адреса загрузки и контрольную сумму. Если контрольная сумма не совпадает с той, что записана на ленте, то выдается четвертое число (контрольная сумма с ленты) и вопросительный знак. Наблюдаете ли Вы что-то подобное?
otrazhenie
Fanat
Posts: 64
Joined: 23 Feb 2021 23:45
Location: Россия Климовск

Re: Радио-86РК на SRAM 32K

Post by otrazhenie »

alexcp wrote:
otrazhenie wrote:после набора директивы I и загрузки программы с mp3 плеера выходит стрелка с ожиданием директивы
Если Монитор загрузил данные с ленты, и контрольная сумма совпала, то претензий к оборудованию быть не должно. Давайте разбираться.

После окончания ввода с ленты Монитор должен выдать на экран три числа - начальный и конечный адреса загрузки и контрольную сумму. Если контрольная сумма не совпадает с той, что записана на ленте, то выдается четвертое число (контрольная сумма с ленты) и вопросительный знак. Наблюдаете ли Вы что-то подобное?
разобрался! был мал уровень сигнала с проигрывателя
backa
Junior
Posts: 9
Joined: 21 Mar 2017 16:39

Re: Шесть лет спустя

Post by backa »

alexcp wrote:я собрал прототип нового варианта Радио 86РК/SRAM. Размер платы 127x76мм, четыре слоя
повторю тут мой вопрос...
Хотелось бы спросить КАК и ЧЕМ Вы растрассировали плату такой плотности - я тоже хочу свою сделать именно как Вы - все DIP40 плотно друг к другу. Но я хочу всю мелкую логику заменить на CPLD - так же разместить ее с обратной стороны - или в 144 или 128 выводов корпус задействовать CPLD.
Я понимаю что можно вручную в Altuim-e но на это уйдет огромный кусок времени - каким автотрассировщиком Вам удалось добиться такой плотности и как Вы расставляли в начале корпуса(чем при этом руководствовались)?
User avatar
alexcp
Senior
Posts: 139
Joined: 11 Jun 2012 07:30

Re: Радио-86РК на SRAM 32K

Post by alexcp »

Eagle 7, автотрассировщик FreeRouting.net - на сегодняшний день больше недоступный, к сожалению - затем ручное допиливание. Корпуса расставлял на глаз, с учетом опыта разводки моих предыдущих плат РК86. Большинство корпусов там подключено к одним и тем же сигналам, так что взаимное расположение не особенно важно, важнее близость к соответствующим разъемам.

В варианте 2018 года (маленькая плата, где сверху ДИПы вплотную друг у другу, а снизу все остальное в SMT) заменил три широких ДИПа (155ИР13, 589ИР12 и ОЗУ) на эквиваленты в СОИК. Плата четырехслойная, в двух слоях не развелось. Зато в четырех слоях там все не так уж плохо, несмотря на компактность.

Идея спрятать мелкую логику в PALку мне в голову приходила, но от неё отказался ради повторяемости. PALки и 5-вольтовые CPLD быстро вымирают вместе с софтом для разработки и программаторами, а мелкая логика живет. К слову, примерно в то же время я написал на CUPL SPI интерфейс для 8080, который помещается в ATF2500. Код есть, CPLD есть, прошить нечем - мой ChipProg вроде должен уметь, но ругается на перегрузку по току.

Что касается автотрассировщика - автор его убрал из сети потому, что кто-то обвинил автора в нарушении чужих авторских прав и заимствовании чьего-то кода. Но я успел сохранить копию :twisted: Написано на Java, запускается из-под NetBeans, требует файл в формате DSN (для Eagle есть ULP, который такие файлы создает). Не самый лучший, медленный и не особенно удобный, но полезный. Выкладывать не буду, а то набегут защитники авторских прав, но если кому надо, могу поделиться.
backa
Junior
Posts: 9
Joined: 21 Mar 2017 16:39

Re: Радио-86РК на SRAM 32K

Post by backa »

Спасибо за ответ! Я делал очень плотный монтаж раньше но корпуса всегда были на расстоянии и было поле для маневра ручной разводки шин и одиночных сигналов. А вот когда все корпуса плотно друг к другу - такое видел только в древних платах и вот у Вас увидел. Захотелось повторить чисто ради интереса и красоты)) Никакого практического значения такая плотность не имеет в моем случае - только эстетика.
alexcp wrote: Идея спрятать мелкую логику в PALку мне в голову приходила, но от неё отказался ради повторяемости. PALки и 5-вольтовые CPLD быстро вымирают вместе с софтом для разработки и программаторами, а мелкая логика живет.
По большому счету все эти ретрокомпики делаюсь ради самого процесса "делания" а не для пользования))) И вряд-ли кто-то будет затевать их производство в количестве более 5 штук (минмимальный заказ плат у китайцев).
А поставить конфигурируемую CPLD 5-вольтовую (типпа XILINX XC95216 или ALTERA EPM7128S где стандартный JTAG - а уж его можно "шить" хоть ногодрыгом через LPT) - упрощает поле для будущих экспериментов с портами и цветами и др. ... Это все равно хобби и не более того. С вашей подачи подключил свой LCD 24 бита напрямую к RGB Spectrum-a.
alexcp wrote: Не самый лучший, медленный и не особенно удобный, но полезный
ну с такими "характеристиками" и Altium наверное посоревнуется )))
alexcp wrote: Выкладывать не буду, а то набегут защитники авторских прав, но если кому надо, могу поделиться
Верно - тут с этим строго. Из бесплатного KiCad вроде "что-то" может в этом плане но он расчитан на очень большого "любителя")))
Да и с помощью этого

 
web.archive.org

можно посмотреть но самого трассировщика там уже нет - его сам автор убрал до того как его сохранили в архив((( к сожалению
alexcp wrote: я написал на CUPL SPI интерфейс для 8080, который помещается в ATF2500
очень понравилась идея с подключением I2C "железного" контролера к PK86 - ну хоть что-то можно сделать полезное на BASIC в нем "для дома - для семьи" - датчики климатконтроля и др. с I2C шиной. Кстати I2C контролер вполне неплохо "реализуем" в железе на HDL языке - на хабре недавно был цикл статей


User avatar
vital72
Senior
Posts: 181
Joined: 17 Jun 2014 04:29
Location: 93.80.157.217

Re: Радио-86РК на SRAM 32K

Post by vital72 »

alexcp wrote:Код есть, CPLD есть, прошить нечем - мой ChipProg вроде должен уметь, но ругается на перегрузку по току.
ты в каком городе? есть Xeltek 3000U -- могу прошить.
и где ты берешь ATF2500? я тоже хочу
https://radio-86rk.ru
кто я такой, чтобы спорить с самим собой
User avatar
alexcp
Senior
Posts: 139
Joined: 11 Jun 2012 07:30

Re: Радио-86РК на SRAM 32K

Post by alexcp »

ATF2500C пока еще производится и много где продается, например в Microchip Direct, Arrow, Newark.

За предложение прошить спасибо, см. личку.