Sprinter Video System (SVS)

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

Moderator: Shaos

Sayman
Maniac
Posts: 223
Joined: 05 Oct 2009 19:44
Location: 212.164.105.5

Post by Sayman »

Александр, извиняюсь за назойливость, как ваши поиски? реально что-то найти?
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Sayman wrote:Александр, извиняюсь за назойливость, как ваши поиски? реально что-то найти?
Сбросил всё что нашёл

P.S. Благодаря Sayman-у мы как никогда близко подошли к реально безглючному запуску SVS на реальном спринтере :roll:
Я тут за главного - если что шлите мыло на me собака shaos точка net
Sayman
Maniac
Posts: 223
Joined: 05 Oct 2009 19:44
Location: 212.164.105.5

Post by Sayman »

Как ты и просил, перебераюсь снова сюда, в форум. вобщем про процедуру svs_vcopym1. я уже пробовал такую конструкцию кажется. но не помню. проверить теперь смогу только в понедельник, т.к. реал на работе лежит (там больше времени на него, чем дома).
в целом, во всех процедурах я сделал небольшие изменения, которые не влияют на глюки, но заметно могут снизить расходы по работе с акселем. т.е. включили аксель -> режим задания размера блока -> режим копирования/заполнения -> бросили данные -> выключили аксель. после каждой операци выключяать и снова включать аксель не требуется. один раз мы его включили и далее можно просто менять его режим работы. процедуру svs_pal1 оптимизхировал, выкинув лишние ex de,hl. была мысль прикрутить сюда тоже аксель, чтобы палитру кидать, но накладно получается переставлять регистры de hl.
вобщем сейчас пока выходные, было бы неплохо получить документацию на формат, чтобы в понедельник на реале сравнить. тем более все файлы, исходники, ролики на работе тоже. так что....
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

да, наверное не в svs_vcopym1 дело - она копирует вертикальную линию целиком и это как я понял работает, а не работает svs_copy, которая предполагает, что акселератор при работе с видеопамятью должен отслеживать положение Y (порт 89h), а реальный акселератор похоже нифига не отслеживает, считая что всегда копируем от Y=0 (либо просто тупо не меняет его при записи столбца в видеопамять)

P.S. хотя ты говоришь, что заливки работают, а это значит что как минимум они отслеживают таки Y

P.P.S. смотрю сырцы от Мака - вроде как и копирование в видеопамять тоже следит за Y...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Обещанное описание формата:

Code: Select all

Первые 16 байт файла - заголовок:
4 байта - сигнатура "SVS1"
2 байта - размер по горизонтали (сейчас всегда 320)
2 байта - размер по вертикали (сейчас всегда 256)
4 байта - nf=0 (непомню что такое)
1 байт - fps (частота кадров в секунду)
1 байт - attr=0 (пока атрибутов нет)
2 байта - freq=0 (частота звука - если нету звука, то 0)
Далее идёт поток байтов - команды с атрибутами и без (ниже N означает кол-во, причём при N=0 кол-во берётся равным 256):
#00 N С - вывод N одинаковых точек от текущего места вниз (цвет точек задаётся индексом C в палитре) с увеличением текущей координаты Y на N
#01 C - вывести одну точку цветом C (индекс в палитре) в текущее место и увеличить координату Y на единицу
#02 C - вывести две одинаковых точки с цветом C начиная с текущего места вниз с увеличением текущей координаты Y на 2
#03 C - вывести три одинаковых точки с цветом C начиная с текущего места вниз с увеличением текущей координаты Y на 3
#04 C - вывести четыре одинаковых точки с цветом C начиная с текущего места вниз с увеличением текущей координаты Y на 4
#05 C - вывести пять одинаковых точки с цветом C начиная с текущего места вниз с увеличением текущей координаты Y на 5
#06 C - вывести шесть одинаковых точек с цветом C начиная с текущего места вниз с увеличением текущей координаты Y на 6
#07 C - вывести семь одинаковых точек с цветом C начиная с текущего места вниз с увеличением текущей координаты Y на 7
#08 C - вывести восемь одинаковых точек с цветом C начиная с текущего места вниз с увеличением текущей координаты Y на 8
#09 C - вывести одинаковых девять точек с цветом C начиная с текущего места вниз с увеличением текущей координаты Y на 9
#0A C - вывести десять одинаковых точек с цветом C начиная с текущего места вниз с увеличением текущей координаты Y на 10
#0B C - вывести одинаковых одиннадцать точек с цветом C начиная с текущего места вниз с увеличением текущей координаты Y на 11
#0C C - вывести двендалцать одинаковых точек с цветом C начиная с текущего места вниз с увеличением текущей координаты Y на 12
#0D C - вывести тринадцать одинаковых точек с цветом C начиная с текущего места вниз с увеличением текущей координаты Y на 13
#0E C - вывести четырнадцать одинаковых точек с цветом C начиная с текущего места вниз с увеличением текущей координаты Y на 14
#0F C - вывести пятнадцать одинаковых точек с цветом C начиная с текущего места вниз с увеличением текущей координаты Y на 15
#10 N ... - вывод N точек от текущего места вниз (точки задаются индексами в палитре) с увеличением текущей координаты Y на N
#11 C1 - вывести одну точку цветом C1 (индекс в палитре) в текущее место и увеличить координату Y на единицу
#12 C1 C2 - вывести две точки начиная с текущего места вниз с увеличением текущей координаты Y на 2
#13 C1 C2 C3 - вывести три точки начиная с текущего места вниз с увеличением текущей координаты Y на 3
#14 C1 C2 C3 С4 - вывести четыре точки начиная с текущего места вниз с увеличением текущей координаты Y на 4
#15 C1 C2 C3 С4 С5 - вывести пять точки начиная с текущего места вниз с увеличением текущей координаты Y на 5
#16 C1 C2 C3 С4 С5 С6  - вывести шесть точек начиная с текущего места вниз с увеличением текущей координаты Y на 6
#17 C1 C2 C3 С4 С5 С6 С7 - вывести семь точек начиная с текущего места вниз с увеличением текущей координаты Y на 7
#18 C1 C2 C3 С4 С5 С6 С7 С8 - вывести восемь точек начиная с текущего места вниз с увеличением текущей координаты Y на 8
#19 C1 C2 C3 С4 С5 С6 С7 С8 С9 - вывести девять точек начиная с текущего места вниз с увеличением текущей координаты Y на 9
#1A C1 C2 C3 С4 С5 С6 С7 C8 C9 C10 - вывести десять точек начиная с текущего места вниз с увеличением текущей координаты Y на 10
#1B C1 C2 C3 С4 С5 С6 С7 C8 C9 C10 C11 - вывести одиннадцать точек начиная с текущего места вниз с увеличением текущей координаты Y на 11
#1C C1 C2 C3 С4 С5 С6 С7 C8 C9 C10 С11 С12 - вывести двендалцать точек начиная с текущего места вниз с увеличением текущей координаты Y на 12
#1D C1 C2 C3 С4 С5 С6 С7 C8 C9 C10 С11 С12 С13 - вывести тринадцать точек начиная с текущего места вниз с увеличением текущей координаты Y на 13
#1E C1 C2 C3 С4 С5 С6 С7 C8 C9 C10 С11 С12 С13 С14 - вывести четырнадцать точек начиная с текущего места вниз с увеличением текущей координаты Y на 14
#1F C1 C2 C3 С4 С5 С6 С7 C8 C9 C10 С11 С12 С13 С14 С15 - вывести пятнадцать точек начиная с текущего места вниз с увеличением текущей координаты Y на 15
#20 - пока не используется
#21 - копирование предыдущего столбца
#22...#2F - пока не используются, но в будущем можно задействовать как команды копирования других предыдущих столбцов
#30...#3F - пока не используется, но в будущем можно задействовать как команды копирования из столбцов справа (оставшихся от предыдущего кадра)
#40...#5F - пока не используется
#60 N - переместить текущую координату X вправо на N столбцов, сбросив при этом текущую координату Y (при этом в пропущенных столбцах будет "просвечивать" предыдущий кадр)
#61 - переместить текущую координату X вправо на 1 столбец, сбросив при этом текущую координату Y
#62 - переместить текущую координату X вправо на 2 столбцa, сбросив при этом текущую координату Y
#63 - переместить текущую координату X вправо на 3 столбца, сбросив при этом текущую координату Y
#64 - переместить текущую координату X вправо на 4 столбца, сбросив при этом текущую координату Y
#65 - переместить текущую координату X вправо на 5 столбцов, сбросив при этом текущую координату Y
#66 - переместить текущую координату X вправо на 6 столбцов, сбросив при этом текущую координату Y
#67 - переместить текущую координату X вправо на 7 столбцов, сбросив при этом текущую координату Y
#68 - переместить текущую координату X вправо на 8 столбцов, сбросив при этом текущую координату Y
#69 - переместить текущую координату X вправо на 9 столбцов, сбросив при этом текущую координату Y
#6A - переместить текущую координату X вправо на 10 столбцов, сбросив при этом текущую координату Y
#6B - переместить текущую координату X вправо на 11 столбцов, сбросив при этом текущую координату Y
#6C - переместить текущую координату X вправо на 12 столбцов, сбросив при этом текущую координату Y
#6D - переместить текущую координату X вправо на 13 столбцов, сбросив при этом текущую координату Y
#6E - переместить текущую координату X вправо на 14 столбцов, сбросив при этом текущую координату Y
#6F - переместить текущую координату X вправо на 15 столбцов, сбросив при этом текущую координату Y
#70 N - переместить текущую координату Y вниз на N пикселов, оставив неизменной текущую координату X (при этом в пропущенных пикселах будет "просвечивать" предыдущий кадр)
#71- переместить текущую координату Y вниз на 1 пиксел, оставив неизменной текущую координату X
#72- переместить текущую координату Y вниз на 2 пиксела, оставив неизменной текущую координату X
#73- переместить текущую координату Y вниз на 3 пиксела, оставив неизменной текущую координату X
#74- переместить текущую координату Y вниз на 4 пиксела, оставив неизменной текущую координату X
#75- переместить текущую координату Y вниз на 5 пикселов, оставив неизменной текущую координату X
#76- переместить текущую координату Y вниз на 6 пикселов, оставив неизменной текущую координату X
#77- переместить текущую координату Y вниз на 7 пикселов, оставив неизменной текущую координату X
#78- переместить текущую координату Y вниз на 8 пикселов, оставив неизменной текущую координату X
#79- переместить текущую координату Y вниз на 9 пикселов, оставив неизменной текущую координату X
#7A- переместить текущую координату Y вниз на 10 пикселов, оставив неизменной текущую координату X
#7B- переместить текущую координату Y вниз на 11 пикселов, оставив неизменной текущую координату X
#7C- переместить текущую координату Y вниз на 12 пикселов, оставив неизменной текущую координату X
#7D- переместить текущую координату Y вниз на 13 пикселов, оставив неизменной текущую координату X
#7E- переместить текущую координату Y вниз на 14 пикселов, оставив неизменной текущую координату X
#7F- переместить текущую координату Y вниз на 15 пикселов, оставив неизменной текущую координату X
#80 N C B1 G1 R1 B2 G2 R2 ... -  созранить палитру из N цветовых составляющих B/G/R, начиная с индекса C
#81 C B G R - сохранить один цвет в палитре
#82 C B1 G1 R1 B2 G2 R2 - сохранить 2 цвета в палитре, начиная с индекса C
#83 C B1 G1 R1 B2 G2 R2 B3 G3 R3 - сохранить 3 цвета в палитре, начиная с индекса C
#84 C B1 G1 R1 B2 G2 R2 B3 G3 R3 B4 G4 R4 - сохранить 4 цвета в палитре, начиная с индекса C
#85 C B1 G1 R1 B2 G2 R2 B3 G3 R3 B4 G4 R4 B5 G5 R5 - сохранить 5 цветов в палитре, начиная с индекса C
#86 C B1 G1 R1 B2 G2 R2 B3 G3 R3 B4 G4 R4 B5 G5 R5 B6 G6 R6 - сохранить 6 цветов в палитре, начиная с индекса C
#87 C B1 G1 R1 B2 G2 R2 B3 G3 R3 B4 G4 R4 B5 G5 R5 B6 G6 R6 B7 G7 R7 - сохранить 7 цветов в палитре, начиная с индекса C
#88 C B1 G1 R1 B2 G2 R2 B3 G3 R3 B4 G4 R4 B5 G5 R5 B6 G6 R6 B7 G7 R7 B8 G8 R8 - сохранить 8 цветов в палитре, начиная с индекса C
#89 C B1 G1 R1 B2 G2 R2 B3 G3 R3 B4 G4 R4 B5 G5 R5 B6 G6 R6 B7 G7 R7 B8 G8 R8 B9 G9 R9 - сохранить 9 цветов в палитре, начиная с индекса C
#8A C B1 G1 R1 B2 G2 R2 B3 G3 R3 B4 G4 R4 B5 G5 R5 B6 G6 R6 B7 G7 R7 B8 G8 R8 B9 G9 R9 B10 G10 R10 - сохранить 10 цветов в палитре, начиная с индекса C
#8B C B1 G1 R1 B2 G2 R2 B3 G3 R3 B4 G4 R4 B5 G5 R5 B6 G6 R6 B7 G7 R7 B8 G8 R8 B9 G9 R9 B10 G10 R10 B11 G11 R11 - сохранить 11 цветов в палитре, начиная с индекса C
#8C C B1 G1 R1 B2 G2 R2 B3 G3 R3 B4 G4 R4 B5 G5 R5 B6 G6 R6 B7 G7 R7 B8 G8 R8 B9 G9 R9 B10 G10 R10 B11 G11 R11 B12 G12 R12 - сохранить 12 цветов в палитре, начиная с индекса C
#8D C B1 G1 R1 B2 G2 R2 B3 G3 R3 B4 G4 R4 B5 G5 R5 B6 G6 R6 B7 G7 R7 B8 G8 R8 B9 G9 R9 B10 G10 R10 B11 G11 R11 B12 G12 R12 B13 G13 R13 - сохранить 13 цветов в палитре, начиная с индекса C
#8E C B1 G1 R1 B2 G2 R2 B3 G3 R3 B4 G4 R4 B5 G5 R5 B6 G6 R6 B7 G7 R7 B8 G8 R8 B9 G9 R9 B10 G10 R10 B11 G11 R11 B12 G12 R12 B13 G13 R13 B14 G14 R14 - сохранить 14 цветов в палитре, начиная с индекса C
#8F C B1 G1 R1 B2 G2 R2 B3 G3 R3 B4 G4 R4 B5 G5 R5 B6 G6 R6 B7 G7 R7 B8 G8 R8 B9 G9 R9 B10 G10 R10 B11 G11 R11 B12 G12 R12 B13 G13 R13 B14 G14 R14 B15 G15 R15 - сохранить 15 цветов в палитре, начиная с индекса C
#90...#ED - пока не используются
#EE - метка конца фильма (подразумевалась как команда зацикливания)
#F0 B0 B1 B2 - метка начала нового кадра с 3-байтным номером, сохранённым в little-endian (Fn=B0+B1*256+B2*65536), эта команда сбрасывает текущие координаты X и Y в начало (левый-верхний угол)
#F1...#FE - пока не используется
#FF - метка окончания данных в текущем сегменте (используется как команда на загрузку очередной порции данных в 16K)
P.S. Во время отладки в ноябре 2003 я ввёл ещё одну команду:
#E7 Y0 Y1 - установить текущую координату Y=Y0+Y1*256
Сейчас в конвертере оно не используется, так что скорее всего надо выкинуть и из плеера (после этого все координаты станут относительными)
Last edited by Shaos on 14 Apr 2012 11:28, edited 13 times in total.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Закончил описание формата по сишному исходнику - если откопаю старые тетрадки, то внесу коррективы в описание тех команд, которые обозначены как "пока не используется"...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Shaos wrote:Закончил описание формата по сишному исходнику - если откопаю старые тетрадки, то внесу коррективы в описание тех команд, которые обозначены как "пока не используется"...
Tетрадки откопал - ничего нового не нашёл, разве что теперь знаю, что формат SVS был выдуман 1 и 2 мая 2003 года...
Я тут за главного - если что шлите мыло на me собака shaos точка net
Hard
Novelist
Posts: 35
Joined: 10 Feb 2011 07:04
Location: 92.112.8.125

Post by Hard »

Sayman wrote:после каждой операци выключяать и снова включать аксель не требуется. один раз мы его включили и далее можно просто менять его режим работы.
Не стал бы я так категорично утверждать сие. лучше выключить, чем постоянно следить в каком режиме нынче аксель, а то команды типа LD A,(HL);XOR (HL),LD (DE),A и пр. подобные, часто встречающиеся в программах могут засрать буфер акселя так, что потом не отловишь откуда глюки ростут.
Sayman
Maniac
Posts: 223
Joined: 05 Oct 2009 19:44
Location: 212.164.105.5

Post by Sayman »

А я не говорил о том, чтобы акселя включить и пускай пашет. если операция предполагает заполнение и следом какие то копирования, зачем постоянно дёргать его? включил, и потом посто меняеш режимы работы. таким образом сокращаются накладные расходы типа тактов на передёргивания и байты памяти. и в данном случае его буферы легко высвобождаются после выключения. сделал дела, выключил. никаких проблем.
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Sayman wrote:А я не говорил о том, чтобы акселя включить и пускай пашет. если операция предполагает заполнение и следом какие то копирования, зачем постоянно дёргать его? включил, и потом посто меняеш режимы работы. таким образом сокращаются накладные расходы типа тактов на передёргивания и байты памяти. и в данном случае его буферы легко высвобождаются после выключения. сделал дела, выключил. никаких проблем.
Я припоминаю, что у меня это когда-то не прошло - с тех пор и стал заворачивать каждую команду. Однако это было до BIOS3, так что может чего поправили либо я чего-то не так тестировал...
Я тут за главного - если что шлите мыло на me собака shaos точка net
Hard
Novelist
Posts: 35
Joined: 10 Feb 2011 07:04
Location: 92.112.8.125

Post by Hard »

Sayman wrote:если операция предполагает заполнение и следом какие то копирования, зачем постоянно дёргать его? включил, и потом посто меняеш режимы работы.
Если ты точно знаешь, что будет последующая команда SVS на копирование - то ладно, но если тебе для начала надо будет считать эту команду SVS оператором процессора типа LD A,(HL) (а тут не суть важно что именно HL, насколько я понимаю любая команда чтения из памяти сработает как команда акселератору - считать в буфер), то тут надо быть осторожным. Как ты думаешь, для чего перед включением акселя запрещаются прерывания???
Sayman
Maniac
Posts: 223
Joined: 05 Oct 2009 19:44
Location: 212.164.105.5

Post by Sayman »

вобщем набросал тесты, простейшие, никаких спрайтов и мегагенераторов. везде используется один и тот же буфер с данными. вобщем и целом 6 тестов для проверки следующих режимов:
ld a,a
ld c,c
ld l,l
ld e,e
ld l,l ... ld a,a
ld a,a ... ld a,a
всё отрабатывает на реале и эмуляторе одинакого. на реале нужно задавать палитру, иначе фарш...я предварительно после включения компа, делаю просмотр любой бмп картинки. далее до момента выключения та палитра активна (или до момента её смены).

в аттаче архивчик с бинарами и исходниками. файл ldccerr содержит косяк. там нет отключения прерываний и ещё пара моментов..однако работает...сделал спецально для проверки...
исходники в формате m80 (masm).
ногами не пенать!

http://www.nedopc.org/nedopc/upload/SaymanTests.zip
Hard
Novelist
Posts: 35
Joined: 10 Feb 2011 07:04
Location: 92.112.8.125

Post by Hard »

Sayman wrote:вобщем набросал тесты, простейшие, никаких спрайтов и мегагенераторов. везде используется один и тот же буфер с данными. вобщем и целом 6 тестов для проверки следующих режимов:
ld a,a
ld c,c
ld l,l
ld e,e
ld l,l ... ld a,a
ld a,a ... ld a,a
всё отрабатывает на реале и эмуляторе одинакого. на реале нужно задавать палитру, иначе фарш...я предварительно после включения компа, делаю просмотр любой бмп картинки. далее до момента выключения та палитра активна (или до момента её смены).

в аттаче архивчик с бинарами и исходниками. файл ldccerr содержит косяк. там нет отключения прерываний и ещё пара моментов..однако работает...сделал спецально для проверки...
исходники в формате m80 (masm).
ногами не пенать!

http://www.nedopc.org/nedopc/upload/SaymanTests.zip
Неправильно работает только ldll и ldllaa, но второй скорее из-за неправильной работы ldll. Спасибо - посмотрю. Еще бы инициализировать палитру перед тестом, бо действительно, все зависит от того, как была инициализирована палитра до этого, в спринте я запускаю FN-ом (больше как бы нечем), он по своему инитит ее, на своем эмуле я не могу запустить из FN-а нужную прогу - палитра инитится уже по иному.
Hard
Novelist
Posts: 35
Joined: 10 Feb 2011 07:04
Location: 92.112.8.125

Post by Hard »

Собственно видео с "дискетки":
Image
Хм. есть различия как с оригиналом, так и со спринтом. надо еще искать косяки
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Sayman wrote:вобщем набросал тесты, простейшие, никаких спрайтов и мегагенераторов. везде используется один и тот же буфер с данными. вобщем и целом 6 тестов для проверки следующих режимов:
ld a,a
ld c,c
ld l,l
ld e,e
ld l,l ... ld a,a
ld a,a ... ld a,a
всё отрабатывает на реале и эмуляторе одинакого. на реале нужно задавать палитру, иначе фарш...я предварительно после включения компа, делаю просмотр любой бмп картинки. далее до момента выключения та палитра активна (или до момента её смены).

в аттаче архивчик с бинарами и исходниками. файл ldccerr содержит косяк. там нет отключения прерываний и ещё пара моментов..однако работает...сделал спецально для проверки...
исходники в формате m80 (masm).
ногами не пенать!

http://www.nedopc.org/nedopc/upload/SaymanTests.zip
а какой из них берёт последовательность байтов и рисует как вертикаль?
Я тут за главного - если что шлите мыло на me собака shaos точка net