я об этом в ГФ24 кричу на каждом углу.
vinxru, если будет савсем скучно то уменя есть несколько идей 8-ми битного компа.
Хотя зачем, если есть Орион?
Вид для печати
Как это у тебя такие цифры получаются? 15625*546=8531250
Вряд ли в цепи сброса счётчиков участвовали конденсаторы. На мой взгляд, они влияли лишь на формирование видео-сигнала.
---------- Post added at 18:00 ---------- Previous post was at 17:58 ----------
А то - то так посчитает, то эдак. :)
Как только адрес становится равен 0B5h, на выходе ПЗУ появляется сигнал сброса. Как только один из 3-х счетчиков обнулится, адрес изменится и сброс пропадет.
То есть, длительность импульса сброса получается насколько короткой, то на неё не успевают отреагировать все микросхемы.
При этом, выход 3-его бита одного счетчика является таковым входом другого. Когда мы сбрасываем D24, это приводит к увеличению счетчика D25. И соответственно срывается работа всего видеоадаптера.
И т.д. Я час запускал эту схему в эмуляторе, пока она начала нормально адреса считать.
А еще, на выходе ПЗУ будут присутствовать переходные процессы. То есть, между чтением адресов FFh и 100h, на выходе может быть всё что угодно. Поэтому без конденсатора никак.
Схема называется - найдите 3 ошибки.
http://s019.radikal.ru/i627/1204/dd/d2cbdbf837bat.jpg
Когда нибудь соберу в таком виде. А пока пошел заставлять клавиатуру на ATMega8 работать.
http://s019.radikal.ru/i641/1204/98/98064abd5a5f.jpg
просто в данном случае ПЗУ знакогенератора может висеть неотключаемо/безбуферно на ШД.
это приятно ибо упрощает ;)
но в синхронных схемах такой вариант не сработает :(
Я тут понял, что ширина символа больше 6 писелей. Сброс приторможен конденсатором С5 220 пф. Это может быть и целый пиксель и половина.
Совсем забыл про схему запуска, которая подключает ПЗУ в адреса 0 при перезагрузке. В оригинальной документации эта часть схемы сильно покоцана, но скорее всего она выглядит так:
http://s019.radikal.ru/i632/1204/c4/c78a1ae9a246.png
Я же в упрощенной схеме не стал ставить этот триггер. Я реализовал этот триггер прямо на ПЗУ дешифратора адресов. Я замкнул выход данных и вход адреса этой ПЗУ, создав положительную обратную связь. По сигналу сброс включается первая карта памяти, где по адресу 0 находится ПЗУ, а при чтении адресов >=8000h включается вторая раскладка.
На плате процессора должно находится всего 1 Кб ОЗУ. Но раз уж я воткнул на плату микросхему 62256 (можно и 62128, 6264, 6232, 6216), то соответственным образом можно прошить дешифратор адресов. Тогда в компьютере будет 29 Кб нижней оперативной памяти и 1 Кб верхней памяти для монитора.
0000h-73FFh ОЗУ Пользователя 29 Кб
7400h-77FFh Не используется
7800h-7FFFh ОЗУ Пользователя 2 Кб
8000h-E7FFh Не используется
E800h-EFFFh Видео ОЗУ
F000h-F3FFh Не используется (в теории окно слот-системы)
F400h-F7FFh ОЗУ Монитора
F800h-FFFFh ПЗУ Монитор
---------- Post added at 19:06 ---------- Previous post was at 18:55 ----------
Я переживал по поводу отсутствия схем дополнительный модулей компьютера. Но читая документацию, я понял, что ничего интересного и уникального там не было. И более того, у самих авторов не было этих модулей. У них был модуль на 16 Кб ОЗУ и таймером ВИ53.
И без программ они будут не нужны.
В общем должны быть еще модули:
1) Модуль ОЗУ.
64 Кб ОЗУ в адресном пространстве процессора. Уже появляется главная идея Ориона, о том что не всё ОЗУ можно использовать. Еще 64 Кб ОЗУ + 32 Кб ПЗУ через порты ввода-вывода. До страничной адресации еще не додумались.
64 микросхемы 565РУ3
2) Модуль квазидиска.
Идентичен прошлому. Используется та же печатная плата, но только теперь вся память через порты. Еще 64 микросхемы 565РУ3
3) Модуль интерфейса.
КР580ВИ53 + КР580ВВ51 + КР580ВВ55 2 шт.
4) Отладочный модуль.
Упрощенный отладочный модуль Микро-80.
vinxru, так завелась машинка?
http://s019.radikal.ru/i633/1204/21/91939ad11cf8.png
РК-шные программы грузит, только не запускает, так как точки входа в ПЗУ сильно отличаются.
---------- Post added at 00:08 ---------- Previous post was at 00:02 ----------
Загрузка РК-шных программ
<CTRL+S><Enter>
R<Enter>
---------- Post added at 00:11 ---------- Previous post was at 00:08 ----------
А Бейсик от Микро-80 запустился. Хотя небольшие глюки с очисткой экрана есть.
---------- Post added at 00:16 ---------- Previous post was at 00:11 ----------
У ЮТ-88 появилась эскейп-последовательность устанавливающая положение курсора. У Мирко-80 её еще нет. И у этого компьютера её тоже нет.
---------- Post added at 00:54 ---------- Previous post was at 00:16 ----------
С Микро-80 по точкам входа в ПЗУ этот компьютер совместим только частично. У Кристалла-2 только эти точки входа:
JMP MON ;Переход на Монитор
JMP CI ;Подпрограмма ввода с консоли
JMP MI ;Подпрограмма ввода с магнитофона
JMP CO ;Подпрограмма вывода на консоль символа
JMP MO ;Подпрограмма вывода на магнитофон
JMP CO ;Подпрограмма вывода на консоль СИМВОЛА
JMP STS ;Подпрограмма проверки состояния ввода с консоли
JMP OHX ;Подпрограмма вывода на консоль 16 значения
JMP CON ;Подпрограмма вывода на консоль сообщения
А у Микро-80 еще есть:
JMP SCO ;Подпрограмма опроса кода нажатой клавиши
JMP CRS ;Подпрограмма запроса положения курсора на экране
JMP ADR ;Подпрограмма запроса байта с экрана
JMP BMI ;Подпрограмма ввода блока с магнитофона
JMP BMO ;Подпрограмма вывода блока на магнитофон
JMP CBL ;Подпрограмма подсчета контроьной суммы
JMP PSK ;Подпрограмма запуска отображения
JMP MSI ;Подпрограмма получения адреса ОЗУ
JMP WSI ;Подпрограмма записи адреса ОЗУ
Записал в Викию.
http://zx-pk.ru/wiki/%D0%9F%D0%9A_%D...%D0%BB%D0%BB_2
Конфигурация для эмулятора b2m.
Плюс там прошивка ПЗУ. Позавчера ручками ввел из документации. Прошивка знакогенератора. Раскладка клавиатуры.
При включении компьютер выводит текст:
КРИСТАЛЛ-С
*SVP-1987*
что ставит под сомнение его правильное название.
vinxru, буду в Бресте - подниму орионовский диск, там есть текстовики про кристалл (именно текстовики).
Подчеркивание и так есть в знакогенераторе. Если бы у них был здравый смысл, они бы не добавляли второе подчеркивание. Но я сомневаюсь в наличии здравого смысла :)
---------- Post added at 19:01 ---------- Previous post was at 18:59 ----------
Там случайно светодиодов на ВВ55-ой нет. РУС/ЛАТ например?
Господа, я так не совсем понял как организована выборка видео ОЗУ, всмысле адреса выбранного/выводимого байта, можно этот кусок схемы нарисовать как-то по понятней?
1) Если процессор обращается по адресу E800h - EFFFh, то на выходе дешифратора D38.10 появляется 0
2) Этот ноль идет на мультиплекторы D12-D14, которые подключают шину адреса видео ОЗУ к процессору D17-D20
3) Этот же ноль включает буферы D15-D16, которые подключают шину данных к процессору.
4) Что бы видеоадаптер в это время не выводил на экран мусор с шины, блокируется ПЗУ знакогенератора.
---------- Post added at 19:30 ---------- Previous post was at 19:28 ----------
A) Если процессор не обращается по адресу E800h - EFFFh, то на выходе дешифратора D38.10 висит 1
B) Мультиплексоры D12-D14 подключают шину адреса видео ОЗУ к счетчикам D25-D29
C) Буферы D15-D16 выключены.
Счетчики крутятся и видеоадаптер выдает на выход последовательно всю видеопамять.
Купил новый картридж и плата получилась. Буду этот картридж использовать только для ЛУТа.
http://i070.radikal.ru/1204/4d/b5c4afe1fc57.jpg
круто :v2_thumb:
---------- Post added at 23:29 ---------- Previous post was at 23:19 ----------
vinxru, с видиком мне все понятно, я бы что-то придумал с кварцем вместо ГФ24 чтоб поставить 64К памяти статики и загнать ее в синхрон с процом.
Я думал про два варианта
1) Взять за основу схему Специалиста и прицепить к ней знакогенератор. Это просто, но получится текстовый режим 48x32 при размере знакоместа 8x8. Надо будет поднять тактовую частоту процессора на 33% и подправить схему сбора счетчиков, что бы получить режим 64x32 при размере знакоместа 8x8. В компьютере Кристалл-2 сброс счетчиков и формирование синхроимпульсов прошито в ПЗУ, эту же идею можно перенести сюда, что бы не париться.
2) Сделать частоту процессора равной частоте символов 1,5 Мгц. Можно ГФ24 не выкидывать. А сигналы процессора RW и RD обрезать до полтакта (RD&CLOCK, WR&CLOCK). Тогда процессор будет обращаться к памяти по положительному перепаду тактового импульса, а видеоадаптер по отрицательному.
Но я этим заниматься не буду. Это уже будет совсем другой компьютер.
Может стоит закинуть в ПЗУ компьютера поддержку esc-последовательности устаналивающую положение курсора. Иначе на этом компьютере не будет работать почти ничего.
если место есть то стоит.
сорцы мониторов есть?
чем пользуемся? а то ни как себе нормальный комплект асма-дизасма не подберу.
нормальный дизасм есть только один
и зовется он IDA Pro ;)
остальное все поделки жалкие :(
8085/z80 он понимает
с сегментами/структурми/енумами ...
ага IDA Pro
Доработал прошивку, добавил обработку esc-последовательности перемещающую курсор. Теперь Тетрис от ЮТ-88 (и ряд других программ) запускается.
Я разобрался с системными переменными. Там оказалось 6 байт неиспользуемого пространства. А мне как раз был нужен один байт для обработки esc-последовательностей. (Да и несколько переменных можно было использовать без последствий в собственных целях.)
Патч вотКод:org 0F7C0h
defCursorAddr: ds 2 ; Адрес курсора по умолчанию
loadErrorPtr: ds 2 ; Указатель на loadError. Запускается в случае ошибки загрузки программы с магнитофона.
vinxru_nocursor:ds 1 ; ПАТЧ. Отключение отбражения курсора, если FF
vinxru_escFlag: ds 1 ; ПАТЧ. Обработка esc-последовательности устаналивающей положение курсора
tapeFormat: ds 1 ; Формат записи на магнитофон: 0-собственный, FF-РК86 (Изменяется директивой УС+S)
unknown_3: ds 1 ; Инициализируется значением 3 и не используется
forCmdO: ds 1 ; Длина имени введенная в директиве O (используется только директивой O)
charAtCursor: ds 1 ; Символ находящийся под курсором
cursorAddr: ds 2 ; Адрес курсора в видеопамяти
outputTapeDely: ds 1 ; Скорость записи на магнитофон
inputTapeDelay: ds 1 ; Скорость загрузки с магнитофона
forInputTape: ds 1 ; Используется только функцией загрузки с магнитофона. Содержит 0 или FF
cmdLineLastChr: ds 2 ; Функция inputString заносит сюда адрес последнего символа в строке
lastJmp: ds 2 ; Используется только директивой J. Она заносит сюда первый аргумент, если агрумент не указан, то использует это значение.
ds 4 ; НЕ ИСПОЛЬЗУЕТСЯ
forDirL: ds 2 ; Используется только директивой L. Она заносит сюда первый аргумент, если агрумент не указан, то использует это значение.
cmd_param3: ds 2 ; 1 параметр (Заполняется фунукуией parseParams и директивой I)
cmd_param2: ds 2 ; 2 параметр
cmd_param1: ds 2 ; 3 параметр
cmdLine: ds 32 ; Командная строка 32 байта.
И целиком исходники, компилятор, скомпилированная прошивка во вложении.Код:vinxru_esc: ; Переход в зависимости от ESC
ld a, (vinxru_escFlag)
dec a
ld a, c
jp m, esc_step0
jp z, esc_step1
jp po, esc_step2
esc_step3: ; Шаг 3
sbc a, 20h
ld e, a
xor a
ld d, a
add hl, de
; Выход
esc_ret0: xor a
jp esc_ret4
;----------------------------------------------------------------------------
esc_step0: ; Шаг 0
cp 1Bh
jp nz, esc_none
ld a, 1
jp esc_ret4
;----------------------------------------------------------------------------
esc_none: cp 1Fh ; удаленный оригинальный код
jp z, clearScreen ; удаленный оригинальный код
jp putChar_er ; переход на оригинальный код
;----------------------------------------------------------------------------
esc_step1: ; Шаг 1
cp 59h ; 'Y'
jp nz, esc_ret0
ld a, 2
jp esc_ret4
;----------------------------------------------------------------------------
esc_step2: ; Шаг 2
and 1Fh
ld l, a ; h-будет обрезано ниже
add hl, hl
add hl, hl
add hl, hl
add hl, hl
add hl, hl
add hl, hl
ld a, 4
; ---------------------------------------------------------------------------
esc_ret4: ld (vinxru_escFlag), a
; На всякий случай. Если изменить положение курсора в
; середине esc-последовательности, то будет баг.
ld a, h
and 07h
or (VIDEO_MEM>>8)&~7
ld h, a
; ***
jp saveCursorAddr
Надо бы еще добавить все стандартные точки входа РК86. Все необходимые функции в прошивке присутствуют, только нет точек входа.
И еще сделать отключение курсора, а то он в играх закрывает изображение.
2 ИСПРАВЛЕНИЕ ОШИБКИ
Еще одна ошибка, из за которой визуально-некорректно работает удаление в консоли. Вместо перемещения курсора влево (код 8), в консоль выводилась псевдографика (код 3)
ROM:F919 ld a, 3
заменил на
ROM:F919 ld a, 8
3 ДОРАБОТКА ДЛЯ СОВМЕСТИМОСТИ С ПРОГРАММАМИ РК86
Директива X отключает и включает отображение курсора. (Например, игра Бармен со включенным курсором не запустится вообще).
---------- Post added at 15:22 ---------- Previous post was at 15:05 ----------
http://s019.radikal.ru/i628/1204/12/b3911583f1e5.png
Бармен запустился :) Вот этой последовательностью команд:
УС+T <- Включает режим записи на магнитофон РК-86
УС+R <- Включает режим очистки экрана РК-86
X <- Отключает курсор
R <- Загружает с автоопределением скорости.
Выложил прошивку.
4 Функция вывода символа (F809) портит регистр A. Например, из за этого не работал Пекмен.
5 Расширил точки входа. Функция инициализации перенесена в конец ПЗУ (на её месте теперь точки входа). Изменена одна команда в стандартной функции сканирования клавиатуры для того, что бы сделать сканирование без ожидания (F81B).
Функция загрузки с магнитофона (F824) возвращает расчетный CRC, а не считанный с ленты. Вообще поведение функций загрузки (F824) и сохранения (F827) будeт сильно отличаться от РК86.
Остальные точки входа работают стандартно.
6 Теперь компьютер пищит при выводе в консоль символа с кодом 7. Место в прошивке кончилось, поэтому пришлось пожертвовать функцией F824 загрузка программы с магнитофона. Её никто все равно не использует.
7 При очистке экрана курсор теперь устанавливается в верхний левый угол.
Прошивку выложил.
Игр на ней работает уже много. CHESS2.RKR, CIRCUS.RKR, KALAH.RKR, KRESTNO.RKR, RENDZU.RKR, REVERSI2.RKR, RIKOSHET.RKR, SP_GAMES.RKR, TETRIS1.RKR, TETRIS4.RKR... дальше пока не смотрел.
Основная проблема - это высота экрана в 32 символа. Многие игры очищают экран 25-ю переводами строк и верхние 5 строк при этом не очищаются.
---------- Post added at 00:57 ---------- Previous post was at 00:36 ----------
И да. Клавиши ЗБ (аналог Backspace) у этого компьютера нет. Вместо ЗБ там стоит клавиша подчеркивания. А функцию удаления выполняет стрелка влево, она возвращает код 8.
И для сравнения, эта клавиша _ реагирует на шифт и контрол. А клавиши управления курсором, ввод, пробел не реагируют.
Спаял плату. Не хватает только ерунды (двух разъемов, нескольких конденсаторов, резисторов, диодов, переменника и КТ315).
http://s019.radikal.ru/i636/1205/8a/211edbb04497.jpg
Разъемы:
1) 2 контакта - Сброс
2) 2 контакта - Выход звука
3) 2 контакта - Выход видео
4) 34 контакта - Клавиатура + магнитофон + неиспользуемые 4 бита порта ВВ55 под расширение
5) 40 контактов - Системная шина
6) 4 контакта - Питание
Воткнул кварц на 16 Мгц (пиксель клок 8 Мгц), получившийся видеосигнал распознался монитором. Точно измерить частоту строк не могу, так как в синхросигнале почему то находится символ-клок. Из за этого и полосы на мониторе. Возможно коротыш.
http://s019.radikal.ru/i636/1205/68/89800cbb455e.jpg
Причем, сначала полосы были черные на белом фоне. А потом стали белые на черном фоне.
3 забытых соединения в схеме. 15 оборванных дорожек. 1 ошибка в ПЗУ.
Никогда в жизни больше не буду делать такие тонкие дорожки и двухстороннюю подпайку деталей - это гемороище. Лучше на две платы раскину компьютер.
Судя по тому, что к D4 подключена логическая единица, ширина символа 7 пикселей.
http://s019.radikal.ru/i607/1205/f5/1af555a2f0d0.png
Так как сдвиг регистра происходит с фиксированной частотой 8 Мгц. Он не может быстрее сдвигаться никак. Первый такт на выходе лог. единица, второй такт из ПЗУ и т.д. Следовательно, что бы увидеть символ целиком, должно быть 7 тактов на символ.
Но счетчик считает только до 6. На схеме не использован вывод счетчика D2, что бы организовать сравнение с семью. И вообще, элементов не хватает.
Или подбирать конденсатор с точностью до пикофарада, что бы организовать деление на 7 (что крайне извращенно), либо в схеме ошибка.
по "оригинальной схеме" вообще не сильно понятно откуда берутся сигналы 8,9,10 :(