User Tag List

Показано с 1 по 10 из 311

Тема: РАДИО-86РК на Z80

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #10

    Регистрация
    05.10.2016
    Адрес
    г. Санкт-Петербург
    Сообщений
    1,080
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    5
    Поблагодарили
    5 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Спасибо B2M. Отличный эмулятор. По предоставленной Вами информации удалось сделать в эмуляторе РК86 и два фонта и 256 кб ОЗУ, прокачиваемого в окне 8400...BFFF. Написал тест расширенного ОЗУ и это ОЗУ оказалось исправно. Интересно, какое это ОЗУ? Думаю, что это ОЗУ не из конвенциональной памяти (не ОЗУ XT, адресуемое до 640 кб), а ОЗУ защищённого режима, и поэтому можно без конца расширять это ОЗУ в эмуляторе РК86. Сейчас закончу писать и попробую сделать в эмуляторе РК86 512 кб, т.к чем больше ОЗУ, тем приятнее.

    Однако "ложку дёгтя" добавил тот факт, что фонт всего-лишь 6*8, в то время, как на моём реальном РК86 фонт 8*10 и я привык, что никаких двух линий растра разделяющих строки нет. Ну, я понимаю, что для близости с реальным базовым РК86 надо было ввести эти две линии растра между строками. Но фонт-то зачем уродовать? Зрение-то у всех своё. С эстетической точки зрения лучше было бы применить более красивый фонт 8*8. Кроме того, реальный фонт от реального РК86 не годится, т.к реальный фонт инверсный, а у Вас в эмуляторе фонт неинверсный. Поэтому подставить реальный фонт нельзя, что создаёт лишние неудобства пользователю и к тому-же, "разлучает с реальностью". Поэтому не смог сразу использовать свой фонт с инверсией и псевдографикой. Придётся его вручную переделывать из матрицы 8*10 в матрицу 6*8.

    Очень большое достижение, что Вы проэмулировали команды ВГ75. В своём эмуляторе, в своё время, я это делать не стал, т.к решил, что это слишком сложно. Однако, Вы не точно ВГ75 проэмулировали. Я использовал на РК86 монитор (ROM-BIOS), который отличался от базового двумя байтами в п/п-мме PUSK_VG, отчего курсор был не крошечной мигающей чёрточкой толщиной в 1 пиксель, а мигающим прямоугольником 6*8, что визуально намного приятнее. Если в моих исходниках поставить флаг ORIG=0, то будет такой курсор. Но на Вашем эмуляторе это не получается. Курсор получается не сплошной, а какой-то мусор.

    Ну вот, теперь можно с удобством сделать для РК86 RK-DOS с поддержкой эл.диска и реального дисковода. Эл.диск - привод 'A:', а дисковод - привод 'B:'. Если ОЗУ для эл.диска нет, то дисковод становится приводом 'A:', а эл.диска нет. Хотя может быть и есть, но очень-очень маленький, размером в 15 кб из ОЗУ в области 8400...BFFF. В реале даже небольшой эл.диск ценен, т.к существенно облегчает копирование файлов на дискетах.

    Однако, B2M не расслабляйтесь ещё. Ещё полно недоработок. Во-первых, в реальном РК86, то ОЗУ, что включается в окно 8400...BFFF при записи в порт управления F102 числа 0, это основное ОЗУ с адресов 400...3FFF. И соответственно, при числе 1 - будет отображён участок 4400...7FFF. А в эмуляторе отображается не основное ОЗУ, а какое-то другое ОЗУ, так, как будто мы для основного ОЗУ используем пол-банки РУ5-тых, а для верхнего ОЗУ имеем отдельную банку РУ7-мых. Реальный РК86 столько параллельных банок не потянет, т.к ОЗУ не имеет буферов, отчего возможна только одна банка динамических ОЗУ. Поэтому при числах 0 и 1 в окне 8400 отображается то же самое ОЗУ, что является в РК86 базовым ОЗУ 0...7FFF.

    Не подскажете, как совместить основное ОЗУ и ОЗУ оконного диспетчера?

    Кроме того, мне не удалось реализовать в архитектуре РК86 в эмуляторе цельно пол-банковую коммутацию ОЗУ. Это когда есть регистр F300 и занося в него порядковый номер пол-банки, во всём основном ОЗУ 0...7FFF включается ОЗУ нужной пол-банки. Это как в ОРИОНЕ, но коммутируется не 60К, а 32К и нет некоммутируемой области F000...F3FF (а зачем некоммутируемая область, если при нужде её легко про-имитировать, записав в обе пол-банки одинаковый код). Думаю, что для реализации такой полу-банковой архитектуры уже понадобится задействовать map[0,1,2,3...FF].

    Прилагаю тот конфиг, с которым мне удалось получить два фонта в знакогенераторе и дополнительные 256К ОЗУ (кроме основных 32К) прокачиваемые в окне 8400...BFFF (управление портом С ППА по адресу F100). Здесь тип CPU стоит Z80, поэтому используйте совместимый с Z80 монитор (ROM-BIOS) или измените тип процессора в конфиге и соответственно имя ПЗУ F800 с ZBIOS.ROM на BIOS.ROM. Здесь вместо странного фонта знакогенератора SYMGEN.BIN используется файл 2KFONT.DAT, но вы можете подставить свой фонт от реального РК86 (даже всего 1 кб размером). Если Ваш фонт РК - оригинал, т.е инвертированный, то Вы увидите всё в инверсии (причём синхронизация не сорвётся, как в реальном РК86). Не забудьте убедиться, что в секции 'cas' адреса входов в подпрограммы RDBYTE, WRBYTE и адрес возврата из них (@BAK) соответствуют Вашему ПЗУ F800, иначе при директивах I и O будет завис. Чтобы не заботиться об этих адресах используйте тот монитор, что выложен в моём предыдущем посте (транслировать с ключом B2M=0 (тогда адрес выхода из TAPE-подпрограмм как раз и будет FC9D вместо базовых FCA4). Обратите внимание на первую строчку CPUclock=. Если Вам не хватает скорости 1.77 МГЦ, то можно сделать себе и побольше. А если игра работает слишком быстро (что как раз обычно и имеет место), то ставьте клок поменьше.

    Скрытый текст


    main.CPUClock=1777777Hz
    main.Caption="Ðàäèî-86ÐÊ"

    CPU : Z80 {
    debug=cas
    mem=mm
    pc=F800
    port.maptomem=1
    }

    mem1 : Memory {
    size=8000
    }

    mem8400 : Memory {
    size=40000
    frame[0].size=3C00
    frame[0].page=D14.portC[0-3]
    }


    font : Memory {
    rom="Radio/2KFONT.DAT"
    frame[0].size=400
    frame[0].page=D14.portC[7]
    }

    bios : Memory {
    rom="Radio\ZBIOS.ROM"
    }

    memE000 : Memory {
    rom="Radio\IRISHA.ROM"
    }

    D14 : K580ww55 {
    }

    sys : K580ww55 {
    portA=kbd.~mask
    portB=kbd.~data
    portC[0]=cas.record
    portC[4]=cas.playback
    portC[5-7]=kbd.~data2
    }

    tim : K580wi53 {
    clock[0].rate=1/1
    clock[1].rate=1/1
    clock[2]=tim.out[1]
    ~gate[0]=tim.out[2]
    gate[1].value=1
    gate[2].value=1
    }

    crt : K580wg75 {
    dma=dma[2]
    font=font.frame[0]
    hilight=crt.ggh
    }

    dma : K580wt57 {
    mem=mem1
    }

    mm : MemMap {
    map[0][0000-7FFF]=mem1[0000]
    map[0][8000-83FF]=sys.data
    map[0][C000-DFFF]=crt.data
    map[0][E000-FFFF].wo=dma.data
    map[0][E000-EFFF].ro=memE000[0000]
    map[0][F100-F1FF]=D14.data
    map[0][F200-F2FF]=tim.data
    map[0][F800-FFFF].ro=bios[0000]
    map[0][8400-BFFF]=mem8400.frame[0]
    }

    kbd : Keyboard {
    layout="Radio\layout.kbd"
    }

    beep : beep {
    input=cpu.int
    input2=sys.portC[0]
    input[0]=tim.out[0]
    }

    cas : tape-recorder {
    biproc[FB98-FC9D]=rk
    boproc[FC46-FC9D]=rk
    }

    [свернуть]
    Последний раз редактировалось barsik; 15.01.2017 в 17:03.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Радио-86РК: Видеовыход
    от m.d. в разделе Радио-86РК
    Ответов: 13
    Последнее: 21.05.2015, 08:19
  2. Радио-86РК: По страницам журнала "Радио"
    от Viktor2312 в разделе Радио-86РК
    Ответов: 79
    Последнее: 13.02.2014, 08:34
  3. эмулятор радио-86рк
    от sergey2b в разделе Эмуляторы отечественных компьютеров
    Ответов: 4
    Последнее: 09.06.2011, 15:59
  4. Радио 86РК
    от Shnurkov в разделе Барахолка (архив)
    Ответов: 1
    Последнее: 02.01.2009, 12:52

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •