![](http://www.nedopc.org/nedopc/image/nedobanner3.gif) |
nedoPC.orgElectronics hobbyists community established in 2002 |
![](http://www.nedopc.org/nedopc/image/nedobanner4.gif) |
Sprinter Video System (SVS)
Author |
Message |
Sayman
Maniac
Joined: 05 Oct 2009 19:44 Posts: 223 Location: 212.164.105.5
|
Александр, извиняюсь за назойливость, как ваши поиски? реально что-то найти?
|
03 Apr 2012 21:58 |
|
![](./styles/getaway/theme/images/spacer.gif) |
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22619 Location: Silicon Valley
|
Сбросил всё что нашёл
P.S. Благодаря Sayman-у мы как никогда близко подошли к реально безглючному запуску SVS на реальном спринтере ![:roll:](./images/smilies/icon_rolleyes.gif)
|
13 Apr 2012 18:19 |
|
![](./styles/getaway/theme/images/spacer.gif) |
Sayman
Maniac
Joined: 05 Oct 2009 19:44 Posts: 223 Location: 212.164.105.5
|
![Reply with quote Reply with quote](./styles/getaway/imageset/en/icon_post_quote.gif)
Как ты и просил, перебераюсь снова сюда, в форум. вобщем про процедуру svs_vcopym1. я уже пробовал такую конструкцию кажется. но не помню. проверить теперь смогу только в понедельник, т.к. реал на работе лежит (там больше времени на него, чем дома).
в целом, во всех процедурах я сделал небольшие изменения, которые не влияют на глюки, но заметно могут снизить расходы по работе с акселем. т.е. включили аксель -> режим задания размера блока -> режим копирования/заполнения -> бросили данные -> выключили аксель. после каждой операци выключяать и снова включать аксель не требуется. один раз мы его включили и далее можно просто менять его режим работы. процедуру svs_pal1 оптимизхировал, выкинув лишние ex de,hl. была мысль прикрутить сюда тоже аксель, чтобы палитру кидать, но накладно получается переставлять регистры de hl.
вобщем сейчас пока выходные, было бы неплохо получить документацию на формат, чтобы в понедельник на реале сравнить. тем более все файлы, исходники, ролики на работе тоже. так что....
|
13 Apr 2012 19:27 |
|
![](./styles/getaway/theme/images/spacer.gif) |
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22619 Location: Silicon Valley
|
да, наверное не в svs_vcopym1 дело - она копирует вертикальную линию целиком и это как я понял работает, а не работает svs_copy, которая предполагает, что акселератор при работе с видеопамятью должен отслеживать положение Y (порт 89h), а реальный акселератор похоже нифига не отслеживает, считая что всегда копируем от Y=0 (либо просто тупо не меняет его при записи столбца в видеопамять)
P.S. хотя ты говоришь, что заливки работают, а это значит что как минимум они отслеживают таки Y
P.P.S. смотрю сырцы от Мака - вроде как и копирование в видеопамять тоже следит за Y...
|
13 Apr 2012 20:43 |
|
![](./styles/getaway/theme/images/spacer.gif) |
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22619 Location: Silicon Valley
|
![Reply with quote Reply with quote](./styles/getaway/imageset/en/icon_post_quote.gif)
Обещанное описание формата: ![](images/spacer.gif) | ![](images/spacer.gif) | ![](images/spacer.gif) | ![](images/spacer.gif) | Code: Первые 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)
| ![](images/spacer.gif) | ![](images/spacer.gif) | ![](images/spacer.gif) | ![](images/spacer.gif) |
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.
|
13 Apr 2012 22:55 |
|
![](./styles/getaway/theme/images/spacer.gif) |
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22619 Location: Silicon Valley
|
Закончил описание формата по сишному исходнику - если откопаю старые тетрадки, то внесу коррективы в описание тех команд, которые обозначены как "пока не используется"...
|
14 Apr 2012 07:32 |
|
![](./styles/getaway/theme/images/spacer.gif) |
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22619 Location: Silicon Valley
|
Tетрадки откопал - ничего нового не нашёл, разве что теперь знаю, что формат SVS был выдуман 1 и 2 мая 2003 года...
|
14 Apr 2012 11:10 |
|
![](./styles/getaway/theme/images/spacer.gif) |
Hard
Novelist
Joined: 10 Feb 2011 07:04 Posts: 35 Location: 92.112.8.125
|
Не стал бы я так категорично утверждать сие. лучше выключить, чем постоянно следить в каком режиме нынче аксель, а то команды типа LD A,(HL);XOR (HL),LD (DE),A и пр. подобные, часто встречающиеся в программах могут засрать буфер акселя так, что потом не отловишь откуда глюки ростут.
|
15 Apr 2012 01:44 |
|
![](./styles/getaway/theme/images/spacer.gif) |
Sayman
Maniac
Joined: 05 Oct 2009 19:44 Posts: 223 Location: 212.164.105.5
|
А я не говорил о том, чтобы акселя включить и пускай пашет. если операция предполагает заполнение и следом какие то копирования, зачем постоянно дёргать его? включил, и потом посто меняеш режимы работы. таким образом сокращаются накладные расходы типа тактов на передёргивания и байты памяти. и в данном случае его буферы легко высвобождаются после выключения. сделал дела, выключил. никаких проблем.
|
15 Apr 2012 07:33 |
|
![](./styles/getaway/theme/images/spacer.gif) |
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22619 Location: Silicon Valley
|
Я припоминаю, что у меня это когда-то не прошло - с тех пор и стал заворачивать каждую команду. Однако это было до BIOS3, так что может чего поправили либо я чего-то не так тестировал...
|
15 Apr 2012 09:39 |
|
![](./styles/getaway/theme/images/spacer.gif) |
Hard
Novelist
Joined: 10 Feb 2011 07:04 Posts: 35 Location: 92.112.8.125
|
Если ты точно знаешь, что будет последующая команда SVS на копирование - то ладно, но если тебе для начала надо будет считать эту команду SVS оператором процессора типа LD A,(HL) (а тут не суть важно что именно HL, насколько я понимаю любая команда чтения из памяти сработает как команда акселератору - считать в буфер), то тут надо быть осторожным. Как ты думаешь, для чего перед включением акселя запрещаются прерывания???
|
15 Apr 2012 12:06 |
|
![](./styles/getaway/theme/images/spacer.gif) |
Sayman
Maniac
Joined: 05 Oct 2009 19:44 Posts: 223 Location: 212.164.105.5
|
вобщем набросал тесты, простейшие, никаких спрайтов и мегагенераторов. везде используется один и тот же буфер с данными. вобщем и целом 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
|
16 Apr 2012 02:20 |
|
![](./styles/getaway/theme/images/spacer.gif) |
Hard
Novelist
Joined: 10 Feb 2011 07:04 Posts: 35 Location: 92.112.8.125
|
![Reply with quote Reply with quote](./styles/getaway/imageset/en/icon_post_quote.gif)
![](images/spacer.gif) | ![](images/spacer.gif) | ![](images/spacer.gif) | ![](images/spacer.gif) | 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 | ![](images/spacer.gif) | ![](images/spacer.gif) | ![](images/spacer.gif) | ![](images/spacer.gif) |
Неправильно работает только ldll и ldllaa, но второй скорее из-за неправильной работы ldll. Спасибо - посмотрю. Еще бы инициализировать палитру перед тестом, бо действительно, все зависит от того, как была инициализирована палитра до этого, в спринте я запускаю FN-ом (больше как бы нечем), он по своему инитит ее, на своем эмуле я не могу запустить из FN-а нужную прогу - палитра инитится уже по иному.
|
16 Apr 2012 07:34 |
|
![](./styles/getaway/theme/images/spacer.gif) |
Hard
Novelist
Joined: 10 Feb 2011 07:04 Posts: 35 Location: 92.112.8.125
|
Собственно видео с "дискетки":
Хм. есть различия как с оригиналом, так и со спринтом. надо еще искать косяки
|
16 Apr 2012 10:00 |
|
![](./styles/getaway/theme/images/spacer.gif) |
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22619 Location: Silicon Valley
|
![](images/spacer.gif) | ![](images/spacer.gif) | ![](images/spacer.gif) | ![](images/spacer.gif) | 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 | ![](images/spacer.gif) | ![](images/spacer.gif) | ![](images/spacer.gif) | ![](images/spacer.gif) |
а какой из них берёт последовательность байтов и рисует как вертикаль?
|
16 Apr 2012 18:20 |
|
|
Who is online |
Users browsing this forum: No registered users and 18 guests |
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot post attachments in this forum
|
|