Сообщение от
barsik
Но не понял, что за цифры (якобы смещения где-то) 2000 и 2400.
Это смещения шрифтов в файле symgen.bin (я его взял из эмулятора Пыхонина). В этом файле несколько шрифтов, в том числе и для Партнёра и др. компьютеров.
Сообщение от
barsik
map[1][C400-FFFF]=mem8400.frame[1]
Эта строчка явно лишняя. Во-первых, карту памяти номер 1 (т.е. map[1]) ты явно не задумывал. Да и второй вариант доступа через окно тоже (mem8400.frame[1]). frame[1] имеет смысл, если нужно адресоваться к памяти через окно другого размера, или этих окон несколько, т.е. номер текущей страницы задаётся для каждого окна.
Сообщение от
barsik
Непонятна строка
frame[0].page=D14.portC[0]
Ну что тут непонятного: номер текущей страницы окна 0 будет равен значению бита 0 порта С устройства D14 (описанного в когфиге как ВВ55).
Сообщение от
barsik
Насчет 'frame[0]' - это вообще полный мрак
Внутри эмулятора это объект, который предоставляет доступ к памяти через окно. Таких объектов может быть несколько, поэтому есть индекс. У этого объекта есть размер окна size и номер текущей страницы page. А само имя frame[0] предоставляет интерфейс к памяти, т.е. содержимому памяти в окне. Такой объект есть только у устройства, описанного в конфиге как Memory.
Сообщение от
barsik
Но непонятно как быть если управляется не одним битом, а 4-мя битами
Тогда я бы написал frame[0].page=D14.portC[0-3]
Сообщение от
barsik
так и не разобрался пока как сделать в эмуляторе 2 фонта, переключаемых битом D7 доп.ППА
Рассмотрим, как задан фонт в Радио-86РК сейчас:
Код:
font : Memory {
rom="symgen.bin"
}
crt : K580wg75 {
dma=dma[2]
font=font[0C00]
hilight=crt.ggh
}
Здесь устройство crt это ВГ75, у него есть свойство font, которое связано с неким устройством font, при этом указано ещё и смещение 0C00. Устройство font описано как память (Memory), а свойством rom мы указываем, что это ПЗУ и содержимое нужно грузить из файла symgen.bin
Теперь мы хотим добавить свой переключаемый фонт. Допустим он будет в файле Radio/myfont.bin (пусть будет в подкаталоге Radio). Мы соеденим его через мультиплексор fntmap, и у нас есть ещё дополнительная ВВ55, которая в конфиге называется D14.
Код:
font : Memory {
rom="Radio/myfont.bin"
}
fntmap : MemMap {
map[0][000-3FF]=font[0000]
map[1][000-3FF]=font[0400]
page=D14.portC[7]
}
crt : K580wg75 {
dma=dma[2]
font=fntmap
hilight=crt.ggh
}
D14 : K580ww55 {
}
Свойство page у fntmap указывает, откуда брать номер текущей карты памяти. В каждой карте область 000-3FF связана со шрифтом с нужным смещением в файле. То есть, когда меняется значение бита 7 порта С микросхемы D14, то изменится и содержимое области памяти 000-3FF. А ВГ75 в данном случае именно из этой области и будет считывать данные шрифта.
Однако это устаревший способ. С момента появления объекта frame у Memory от мультиплексора MemMap можно отказаться:
Код:
font : Memory {
rom="Radio/myfont.bin"
frame[0].size=400
frame[0].page=D14.portC[7]
}
crt : K580wg75 {
dma=dma[2]
font=font.frame[0]
hilight=crt.ggh
}
D14 : K580ww55 {
}
Кстати, левая часть равенства, которое находится внутри секции (обозначенной фигурными скобками) всегда дополняется слева именем секции. То есть следующие две записи эквивалентны:
Код:
crt : K580wg75 {
font=font.frame[0]
}
Код:
crt : K580wg75 {
}
crt.font=font.frame[0]