Великий долгострой nedoSprinter

Компьютер "Спринтер" http://sprinter.nedopc.org

Moderator: Shaos

User avatar
Shaos
Admin
Posts: 24097
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Вот так будут выглядеть в 640x350 старые программы, использующие экран в 256 строк:

Image

Image

Image

Image

Image

Image

Image

Image

Image

Image

Кстати в новых графических режимах пользователь всё также сможет подключать видеопамять в своё окно построчно, записывая номер строки в порт #89. Чтобы записывать номера строк от 256 до 399, придётся задействовать второй порт - например #8A (записывая туда 0, юзер получит строку 256, 1 - 257 и т.д.). Да - эти порты будут работать только на запись...

P.S. Могу по-быстрому подкрутить свой эмулятор Спринтера так, чтобы он эмулил новые графические режимы, если кому-то уже интересно потыкаться :roll:

P.P.S. Все вышевывешенные картинки получены в моём эмуляторе, не использующем ни стандартный спринтеровский BIOS, ни стандартную спринтеровскую ось DSS - все поддержанные точки входа написаны на сях, т.е. перенести их на новое железо - не проблема...
Last edited by Shaos on 19 May 2013 19:06, edited 2 times in total.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24097
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Shaos wrote:Задействовать дополнительне разряды адреса от Z180 (A17,A18,A19) скорее всего не получится, т.к. бортовой MMU делит доступную память на 3 части, причём первая часть - это всегда начало памяти, а последняя - это всегда конец, т.е. перемещаться по большой памяти может только среднее окно, а нам надо 4 независимых области по 16K...

P.S. Хотя эти биты адреса можно для DMA пересылок использовать - ведь ему весь мегабайт физически доступен будет и скорость у него приличная - один байт за 6 системных клоков (частота кварца делённая пополам).
Откопал, что в Спринтере скорость работы акселератора оценивалась так:
Time of the Acelerator work = number of bytes / 7000000
т.е. 7 миллионов байт в секунду. А у нас будет один байт за 6 системных клоков, которые с нашим кварцем 25.175 МГц составляют 12587500 периодов в секунду - делим на 6 и получаем 2 Мбайта в секунду - по идее не сильно меньше... :roll:
Last edited by Shaos on 22 May 2013 18:05, edited 1 time in total.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24097
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Shaos wrote:
Shaos wrote:Открыл опрос вначале этого топика:

viewtopic.php?t=8869
Как-то вяло голосуем - добавил ещё 2 варианта ответа - про то что ничего не получится и классический "мне пофиг" :roll:

P.S. Zpring пока побеждает - я сам к этому названию склоняюсь, т.к. придумал его применительно к Спринтеру ещё 8 лет назад, правда речь там шла только про эмулятор...
Вперёд вырывается название "А мне пофиг" :lol:
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Black_Cat
Doomed
Posts: 485
Joined: 23 Nov 2007 15:53
Location: Saint Petersburg, Russia

Post by Black_Cat »

Назови: "IMak Z180". Названия в опросе - полная лажа.
"Очень трудно найти чёрную кошку в тёмной комнате... особенно, если её там нет.", "Forever!". :wink:
zx.clan.su - Soviet Union ZX Spectrum Community - форум посвящённый развитию Спека.
User avatar
Black_Cat
Doomed
Posts: 485
Joined: 23 Nov 2007 15:53
Location: Saint Petersburg, Russia

Post by Black_Cat »

Shaos wrote:Задействовать дополнительне разряды адреса от Z180 (A17,A18,A19) скорее всего не получится, т.к. бортовой MMU делит доступную память на 3 части, причём первая часть - это всегда начало памяти, а последняя - это всегда конец, т.е. перемещаться по большой памяти может только среднее окно, а нам надо 4 независимых области по 16K...
Shaos, получается MMU с идеологией CP/M.. Напрашивается сама используемая OS..
"Очень трудно найти чёрную кошку в тёмной комнате... особенно, если её там нет.", "Forever!". :wink:
zx.clan.su - Soviet Union ZX Spectrum Community - форум посвящённый развитию Спека.
User avatar
Black_Cat
Doomed
Posts: 485
Joined: 23 Nov 2007 15:53
Location: Saint Petersburg, Russia

Post by Black_Cat »

Shaos wrote:А для Z180 33MHz можно попробовать 36MHz (800x600@56) - вдруг заведётся...
А куда он денется, если у Zilog'a по статистике полуторный запас по частоте.
"Очень трудно найти чёрную кошку в тёмной комнате... особенно, если её там нет.", "Forever!". :wink:
zx.clan.su - Soviet Union ZX Spectrum Community - форум посвящённый развитию Спека.
User avatar
Shaos
Admin
Posts: 24097
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Black_Cat wrote:Назови: "IMak Z180". Названия в опросе - полная лажа.
Годный пункт опроса - добавляю

По поводу IMak - есть несколько причин так не называться...
Black_Cat wrote:
Shaos wrote:А для Z180 33MHz можно попробовать 36MHz (800x600@56) - вдруг заведётся...
А куда он денется, если у Zilog'a по статистике полуторный запас по частоте.
Не знал - запомню...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Black_Cat
Doomed
Posts: 485
Joined: 23 Nov 2007 15:53
Location: Saint Petersburg, Russia

Post by Black_Cat »

Shaos wrote:По поводу IMak - есть несколько причин так не называться...
Нам есть дело до ихних I и ихних Mak'ов?
"Очень трудно найти чёрную кошку в тёмной комнате... особенно, если её там нет.", "Forever!". :wink:
zx.clan.su - Soviet Union ZX Spectrum Community - форум посвящённый развитию Спека.
User avatar
Shaos
Admin
Posts: 24097
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Black_Cat wrote:
Shaos wrote:По поводу IMak - есть несколько причин так не называться...
Нам есть дело до ихних I и ихних Mak'ов?
В том числе...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24097
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Shaos wrote:
Shaos wrote:Потом есть мысль таки разделить видеопамять на 4 микросхемы по 32K, которые будут использоваться не только как хранилище пикселов, но и палитры - т.е. когда работаем с одной микросхемой, три другие выступают в роли кодировщика цвета по палитре - я прикинул, всё влазит! Но т.к. память только 70 нс, то придётся некое подобие конвейера делать - пока один пиксел декодится в RGB, следующий пиксел в тоже самое время будет считываться из видеопамяти...
Короче идея такая - каждый блок 16K в конце содержит пустое место равное 16384-320*50 = 384 байта, в которое отлично влезут 256 байт палитры для одной из цветовых составляющих (R,G или B). В каждой микросхеме 32K будут 2 таких блока - по адресу 011 1111 xxxx xxxx и по адресу 111 1111 xxxx xxxx. Соответственно пишем в них:

- первая микросхема: Red (для второй) и Red (для третьей и четвёртой);
- вторая микросхема: Red (для первой) и Green (для третьей и четвёртой);
- третья микросхема: Green (для первой и второй) и Blue (для четвёртой);
- четвёртая микросхема: Blue (для первой и второй) и Blue (для третьей).

Когда на экран выводится содержимое первой или второй микросхемы, то мы обращаемся к первым 256 байтам палитры трёх остальных микросхем (011 1111 xxxx xxxx), а когда с третьей и четвёртой, то ко вторым 256 байтам палитры (111 1111 xxxx xxxx). Кроме того есть интересная возможность для хакеров и демомейкеров положить разные таблички в одноимённые области (например может быть три разных блока R и три разных B, а также два разных блока G). Как минимум можно иметь 2 разные палитры для верхней половины экрана и для нижней половины экрана. Четверти экрана в половинках также могут друг от друга отличаться, но не полностью, а частично - например первая и вторая четвертинки могут иметь разные составляющие R, а третья и четвёртая - разные составляющие B - т.е. общее количество различных цветов в пределах экрана будет уже не 256, а 1024 :o (правда вторые 512 будут отличаться от первых только в одной цветовой составляющей, что тоже не мало).

P.S. Вышеописанные половины и четвертины имеют отношение к режиму 640x400, в случае же режима 640x350 половинки четвертинок (восьмушки?) могут свободно переставляться в пределах экранных 7 зон, таская за собой палитры из своих половинок :roll:
Спринтер на самом деле имеет 2 страницы видеопамяти, которые имеют свои палитры и могут переключаться в видимой части экрана, а программа, чтобы писать во вторую страницу, должна в подключаемой строке копировать пикселы по смещению 320 вместо смещения 0. Однако этим свойством пользуется только пара программ, причём я в эмуляторе реализовал это простым копированием на экран даже когда программа пишет в теневую страницу - работает нормально разве что вместо мгновенного переключения видна заливка.

В нашем же случае вторая страница добавляется только для режима 320x200 и находится она не сбоку, а снизу - и у этих двух страниц таки тоже разные палитры. :roll:

P.S. Ещё из отличий - наш 16-цветный режим будет иметь фиксированную EGA-палитру (скоростёнки не хватит ещё и на 640 точек в строку палитру натягивать).
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24097
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Black_Cat wrote:
Shaos wrote:Задействовать дополнительне разряды адреса от Z180 (A17,A18,A19) скорее всего не получится, т.к. бортовой MMU делит доступную память на 3 части, причём первая часть - это всегда начало памяти, а последняя - это всегда конец, т.е. перемещаться по большой памяти может только среднее окно, а нам надо 4 независимых области по 16K...
Shaos, получается MMU с идеологией CP/M.. Напрашивается сама используемая OS..
Кстати наверное таки надо заюзать бортовой MMU - хотя бы для первой версии.
А порты переключения окон, как и предполагал в 2010, сделать через прерывания - DMA будет копировать в статически подцепленную область (это достаточно быстро).
Единственное перемещаемое окно буду юзать только для работы с видеопамятью или часто необходимыми данными...

P.S. Текстовые режимы тоже пусть будут эмулируемыми - для первой версии потянет :roll:

P.P.S. Позже может и ZX-режим прикручу - где нибудь сбоку :dj:
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Black_Cat
Doomed
Posts: 485
Joined: 23 Nov 2007 15:53
Location: Saint Petersburg, Russia

Post by Black_Cat »

Ты всё перекраиваешь, а как быть с софтом, вроде даж там ось была, как она с твоими переделками будет работать?
"Очень трудно найти чёрную кошку в тёмной комнате... особенно, если её там нет.", "Forever!". :wink:
zx.clan.su - Soviet Union ZX Spectrum Community - форум посвящённый развитию Спека.
User avatar
Shaos
Admin
Posts: 24097
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Black_Cat wrote:Ты всё перекраиваешь, а как быть с софтом, вроде даж там ось была, как она с твоими переделками будет работать?
Никак - ось будет моя, совместимая по наиболее популярным точкам входа (которые в моём эмуле эмулятся) - 100% совместимость для работы родного BIOS и DSS ненужна - главное заставить работать те десять программ, что запускаются в эмуле ну и плюс мои наработки сохранить и передать в будущее :)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24097
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Shaos wrote:
Black_Cat wrote:
Shaos wrote:Задействовать дополнительне разряды адреса от Z180 (A17,A18,A19) скорее всего не получится, т.к. бортовой MMU делит доступную память на 3 части, причём первая часть - это всегда начало памяти, а последняя - это всегда конец, т.е. перемещаться по большой памяти может только среднее окно, а нам надо 4 независимых области по 16K...
Shaos, получается MMU с идеологией CP/M.. Напрашивается сама используемая OS..
Кстати наверное таки надо заюзать бортовой MMU - хотя бы для первой версии.
А порты переключения окон, как и предполагал в 2010, сделать через прерывания - DMA будет копировать в статически подцепленную область (это достаточно быстро).
Единственное перемещаемое окно буду юзать только для работы с видеопамятью или часто необходимыми данными...
Настоящими портами будут только порты вида #AAxx, которые будут выделяться динамически "интеллектуальным" платам, а все остальные порты будут одним физическим портом, при чтении или записи в который будет вызывать прерывание NMI (такое же как и при использовании команд акселератора) - обработчик прерывания будет определять что произошло, акселератор ли это или в порт обращаются (обработчик по адресу из стека может почитать какая команда была в момент прерывания), брать значение и что-то делать - так можно эмулировать переключение страниц памяти как в Спринтере (4 порта) или как в 128/Пентагоне/Скорпионе, да даже и порт #FE можно так поддержать - главно всё программно. :)

P.S. У Z180 есть фича TRAP-прерываний в случае вызова неизвестной команды процессора - так можно поддержать "недокументированные" команды Z80, если они тут непосредственно не поддерживаются (я не уверен) - т.е. сэмулировать их программно...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Black_Cat
Doomed
Posts: 485
Joined: 23 Nov 2007 15:53
Location: Saint Petersburg, Russia

Post by Black_Cat »

Shaos wrote:
Black_Cat wrote:Ты всё перекраиваешь, а как быть с софтом, вроде даж там ось была, как она с твоими переделками будет работать?
Никак - ось будет моя, совместимая по наиболее популярным точкам входа (которые в моём эмуле эмулятся) - 100% совместимость для работы родного BIOS и DSS ненужна - главное заставить работать те десять программ, что запускаются в эмуле ну и плюс мои наработки сохранить и передать в будущее :)
10 программ это всё, что есть для Спринтера? А где про ось почитать, как она привязывается к железу?
"Очень трудно найти чёрную кошку в тёмной комнате... особенно, если её там нет.", "Forever!". :wink:
zx.clan.su - Soviet Union ZX Spectrum Community - форум посвящённый развитию Спека.