nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 19 Apr 2024 16:14



Reply to topic  [ 180 posts ]  Go to page Previous  1 ... 8, 9, 10, 11, 12
Радио-86РК на SRAM 32K 
Author Message
Senior
User avatar

Joined: 11 Jun 2012 07:30
Posts: 128
Reply with quote
Вроде бы проблема в коде монитора NoICE. Как выше пишет автор, NoICE использует инструкцию RST 1 (код CF) в качестве breakpoint. RST 1 эквивалентен CALL 0008 (сохраняет PC в стеке, затем пишет 0008 в PC). Подпрограмма по адресу 0008 копируется в ОЗУ из ПЗУ при запуске монитора NoICE:
Code:
;  RST 1
        PUSH    PSW
        MVI     A,2             ;state = 2 (interrupt 8)
        JMP     INT_ENTRY
        NOP
        NOP
и далее (после перехода на INT_ENTRY)
Code:
        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 располагается ПЗУ (в этом случае все должно работать правильно).


16 Dec 2022 07:57
Profile WWW
Maniac

Joined: 21 Jan 2003 04:08
Posts: 224
Reply with quote
Только сейчас добрался проверить.
Да, похоже, что автор действительно забыл изменить значение, указанное для примера в копируемых DUMMY_INTS.
Заменил 2 на 1, перекомпилировал - на первый взгляд работает нормально :)

У меня не самая свежая версия NoICE 9.4, но в присланном мониторе для 8080 из 9.8 в этом плане то же самое.

_________________
Эмулятор Emu80


16 Dec 2022 22:58
Profile ICQ WWW
Senior
User avatar

Joined: 11 Jun 2012 07:30
Posts: 128
Reply with quote
Он не забыл - он не ожидал, что по адресу 0000 будет ОЗУ, а его монитор будет в другом месте. Он решал проблему, которая в РК86 отсутствует, но не предусмотрел организацию памяти, примененную в РК86:
Quote:
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:
    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:
Quote:
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:
        PUSH    PSW
        MVI     A,1                     ;state = 1 (breakpoint)
        JMP     INT_ENTRY
Когда я модифицировал его монитор (ровно четыре года назад), я в этом всем не разобрался. Хорошо, что разобрались сейчас. Как обещал, я соберу монитор NoICE из последнего варианта Mon8080 (NoICE 9.8 ) и моего кода для FT245RL и выложу чуть позже.


17 Dec 2022 05:55
Profile WWW
Senior
User avatar

Joined: 11 Jun 2012 07:30
Posts: 128
Reply with quote
Исправил, обновленный вариант выложил в этой теме (в моем посте от 16 декабря 2018 года), а также на radio86rk.pbworks.com.


Last edited by alexcp on 10 Jan 2023 10:49, edited 2 times in total.



09 Jan 2023 09:50
Profile WWW
Fanat

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

осциллографом пролазил...все сигналы вроде на месте....в общем прошу направления куда копать.


Attachments:
1234.jpg
1234.jpg [ 160.29 KiB | Viewed 4261 times ]
02 Feb 2023 05:59
Profile
Senior
User avatar

Joined: 11 Jun 2012 07:30
Posts: 128
Reply with quote
otrazhenie wrote:
Ввожу G, экран моргает и вываливается в начальное состояние

С самим РК все в порядке, проблема в загружаемой программе. Попробуйте загрузить что-нибудь другое.


02 Feb 2023 06:37
Profile WWW
Devil

Joined: 26 May 2003 06:57
Posts: 859
Reply with quote
Учтите также, что чаще всего G соответствует G0000, а программа может загружаться по другому адресу.

_________________
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/


02 Feb 2023 06:57
Profile WWW
Fanat

Joined: 23 Feb 2021 23:45
Posts: 64
Location: Россия Климовск
Reply with quote
alexcp wrote:
otrazhenie wrote:
Ввожу G, экран моргает и вываливается в начальное состояние

С самим РК все в порядке, проблема в загружаемой программе. Попробуйте загрузить что-нибудь другое.

нууу.....это первое что я сделал. И не на одном файле. Результат всегда один. Поэтому и прошу тут помощи.


02 Feb 2023 21:17
Profile
Senior
User avatar

Joined: 11 Jun 2012 07:30
Posts: 128
Reply with quote
otrazhenie wrote:
после набора директивы I и загрузки программы с mp3 плеера выходит стрелка с ожиданием директивы

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

После окончания ввода с ленты Монитор должен выдать на экран три числа - начальный и конечный адреса загрузки и контрольную сумму. Если контрольная сумма не совпадает с той, что записана на ленте, то выдается четвертое число (контрольная сумма с ленты) и вопросительный знак. Наблюдаете ли Вы что-то подобное?


02 Feb 2023 21:59
Profile WWW
Fanat

Joined: 23 Feb 2021 23:45
Posts: 64
Location: Россия Климовск
Reply with quote
alexcp wrote:
otrazhenie wrote:
после набора директивы I и загрузки программы с mp3 плеера выходит стрелка с ожиданием директивы

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

После окончания ввода с ленты Монитор должен выдать на экран три числа - начальный и конечный адреса загрузки и контрольную сумму. Если контрольная сумма не совпадает с той, что записана на ленте, то выдается четвертое число (контрольная сумма с ленты) и вопросительный знак. Наблюдаете ли Вы что-то подобное?

разобрался! был мал уровень сигнала с проигрывателя


02 Feb 2023 22:42
Profile
Junior

Joined: 21 Mar 2017 16:39
Posts: 6
Reply with quote
alexcp wrote:
я собрал прототип нового варианта Радио 86РК/SRAM. Размер платы 127x76мм, четыре слоя

повторю тут мой вопрос...
Хотелось бы спросить КАК и ЧЕМ Вы растрассировали плату такой плотности - я тоже хочу свою сделать именно как Вы - все DIP40 плотно друг к другу. Но я хочу всю мелкую логику заменить на CPLD - так же разместить ее с обратной стороны - или в 144 или 128 выводов корпус задействовать CPLD.
Я понимаю что можно вручную в Altuim-e но на это уйдет огромный кусок времени - каким автотрассировщиком Вам удалось добиться такой плотности и как Вы расставляли в начале корпуса(чем при этом руководствовались)?


26 Nov 2023 19:01
Profile
Senior
User avatar

Joined: 11 Jun 2012 07:30
Posts: 128
Reply with quote
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, который такие файлы создает). Не самый лучший, медленный и не особенно удобный, но полезный. Выкладывать не буду, а то набегут защитники авторских прав, но если кому надо, могу поделиться.


08 Jan 2024 04:46
Profile WWW
Junior

Joined: 21 Mar 2017 16:39
Posts: 6
Reply with quote
Спасибо за ответ! Я делал очень плотный монтаж раньше но корпуса всегда были на расстоянии и было поле для маневра ручной разводки шин и одиночных сигналов. А вот когда все корпуса плотно друг к другу - такое видел только в древних платах и вот у Вас увидел. Захотелось повторить чисто ради интереса и красоты)) Никакого практического значения такая плотность не имеет в моем случае - только эстетика.
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 языке - на хабре недавно был цикл статей


14 Jan 2024 16:14
Profile
Senior
User avatar

Joined: 17 Jun 2014 04:29
Posts: 128
Location: 93.80.157.217
Reply with quote
alexcp wrote:
Код есть, CPLD есть, прошить нечем - мой ChipProg вроде должен уметь, но ругается на перегрузку по току.


ты в каком городе? есть Xeltek 3000U -- могу прошить.
и где ты берешь ATF2500? я тоже хочу

_________________
https://radio-86rk.ru
кто я такой, чтобы спорить с самим собой


27 Jan 2024 05:35
Profile WWW
Senior
User avatar

Joined: 11 Jun 2012 07:30
Posts: 128
Reply with quote
ATF2500C пока еще производится и много где продается, например в Microchip Direct, Arrow, Newark.

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


27 Jan 2024 07:09
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 180 posts ]  Go to page Previous  1 ... 8, 9, 10, 11, 12

Who is online

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