nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 28 Mar 2024 15:56



Reply to topic  [ 119 posts ]  Go to page Previous  1, 2, 3, 4, 5, 6, 7, 8  Next
Sprinter Video System (SVS) 
Author Message
Maniac

Joined: 05 Oct 2009 19:44
Posts: 223
Location: 212.164.105.5
Reply with quote
Post 
Александр, извиняюсь за назойливость, как ваши поиски? реально что-то найти?


03 Apr 2012 21:58
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Post 
Sayman wrote:
Александр, извиняюсь за назойливость, как ваши поиски? реально что-то найти?


Сбросил всё что нашёл

P.S. Благодаря Sayman-у мы как никогда близко подошли к реально безглючному запуску SVS на реальном спринтере :roll:

_________________
:dj: https://mastodon.social/@Shaos


13 Apr 2012 18:19
Profile WWW
Maniac

Joined: 05 Oct 2009 19:44
Posts: 223
Location: 212.164.105.5
Reply with quote
Post 
Как ты и просил, перебераюсь снова сюда, в форум. вобщем про процедуру svs_vcopym1. я уже пробовал такую конструкцию кажется. но не помню. проверить теперь смогу только в понедельник, т.к. реал на работе лежит (там больше времени на него, чем дома).
в целом, во всех процедурах я сделал небольшие изменения, которые не влияют на глюки, но заметно могут снизить расходы по работе с акселем. т.е. включили аксель -> режим задания размера блока -> режим копирования/заполнения -> бросили данные -> выключили аксель. после каждой операци выключяать и снова включать аксель не требуется. один раз мы его включили и далее можно просто менять его режим работы. процедуру svs_pal1 оптимизхировал, выкинув лишние ex de,hl. была мысль прикрутить сюда тоже аксель, чтобы палитру кидать, но накладно получается переставлять регистры de hl.
вобщем сейчас пока выходные, было бы неплохо получить документацию на формат, чтобы в понедельник на реале сравнить. тем более все файлы, исходники, ролики на работе тоже. так что....


13 Apr 2012 19:27
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Post 
да, наверное не в svs_vcopym1 дело - она копирует вертикальную линию целиком и это как я понял работает, а не работает svs_copy, которая предполагает, что акселератор при работе с видеопамятью должен отслеживать положение Y (порт 89h), а реальный акселератор похоже нифига не отслеживает, считая что всегда копируем от Y=0 (либо просто тупо не меняет его при записи столбца в видеопамять)

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

P.P.S. смотрю сырцы от Мака - вроде как и копирование в видеопамять тоже следит за Y...

_________________
:dj: https://mastodon.social/@Shaos


13 Apr 2012 20:43
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Post 
Обещанное описание формата:

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)


P.S. Во время отладки в ноябре 2003 я ввёл ещё одну команду:
#E7 Y0 Y1 - установить текущую координату Y=Y0+Y1*256
Сейчас в конвертере оно не используется, так что скорее всего надо выкинуть и из плеера (после этого все координаты станут относительными)

_________________
:dj: https://mastodon.social/@Shaos


Last edited by Shaos on 14 Apr 2012 11:28, edited 13 times in total.



13 Apr 2012 22:55
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Post 
Закончил описание формата по сишному исходнику - если откопаю старые тетрадки, то внесу коррективы в описание тех команд, которые обозначены как "пока не используется"...

_________________
:dj: https://mastodon.social/@Shaos


14 Apr 2012 07:32
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Post 
Shaos wrote:
Закончил описание формата по сишному исходнику - если откопаю старые тетрадки, то внесу коррективы в описание тех команд, которые обозначены как "пока не используется"...


Tетрадки откопал - ничего нового не нашёл, разве что теперь знаю, что формат SVS был выдуман 1 и 2 мая 2003 года...

_________________
:dj: https://mastodon.social/@Shaos


14 Apr 2012 11:10
Profile WWW
Novelist

Joined: 10 Feb 2011 07:04
Posts: 35
Location: 92.112.8.125
Reply with quote
Post 
Sayman wrote:
после каждой операци выключяать и снова включать аксель не требуется. один раз мы его включили и далее можно просто менять его режим работы.

Не стал бы я так категорично утверждать сие. лучше выключить, чем постоянно следить в каком режиме нынче аксель, а то команды типа LD A,(HL);XOR (HL),LD (DE),A и пр. подобные, часто встречающиеся в программах могут засрать буфер акселя так, что потом не отловишь откуда глюки ростут.


15 Apr 2012 01:44
Profile
Maniac

Joined: 05 Oct 2009 19:44
Posts: 223
Location: 212.164.105.5
Reply with quote
Post 
А я не говорил о том, чтобы акселя включить и пускай пашет. если операция предполагает заполнение и следом какие то копирования, зачем постоянно дёргать его? включил, и потом посто меняеш режимы работы. таким образом сокращаются накладные расходы типа тактов на передёргивания и байты памяти. и в данном случае его буферы легко высвобождаются после выключения. сделал дела, выключил. никаких проблем.


15 Apr 2012 07:33
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Post 
Sayman wrote:
А я не говорил о том, чтобы акселя включить и пускай пашет. если операция предполагает заполнение и следом какие то копирования, зачем постоянно дёргать его? включил, и потом посто меняеш режимы работы. таким образом сокращаются накладные расходы типа тактов на передёргивания и байты памяти. и в данном случае его буферы легко высвобождаются после выключения. сделал дела, выключил. никаких проблем.


Я припоминаю, что у меня это когда-то не прошло - с тех пор и стал заворачивать каждую команду. Однако это было до BIOS3, так что может чего поправили либо я чего-то не так тестировал...

_________________
:dj: https://mastodon.social/@Shaos


15 Apr 2012 09:39
Profile WWW
Novelist

Joined: 10 Feb 2011 07:04
Posts: 35
Location: 92.112.8.125
Reply with quote
Post 
Sayman wrote:
если операция предполагает заполнение и следом какие то копирования, зачем постоянно дёргать его? включил, и потом посто меняеш режимы работы.

Если ты точно знаешь, что будет последующая команда SVS на копирование - то ладно, но если тебе для начала надо будет считать эту команду SVS оператором процессора типа LD A,(HL) (а тут не суть важно что именно HL, насколько я понимаю любая команда чтения из памяти сработает как команда акселератору - считать в буфер), то тут надо быть осторожным. Как ты думаешь, для чего перед включением акселя запрещаются прерывания???


15 Apr 2012 12:06
Profile
Maniac

Joined: 05 Oct 2009 19:44
Posts: 223
Location: 212.164.105.5
Reply with quote
Post 
вобщем набросал тесты, простейшие, никаких спрайтов и мегагенераторов. везде используется один и тот же буфер с данными. вобщем и целом 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
Profile
Novelist

Joined: 10 Feb 2011 07:04
Posts: 35
Location: 92.112.8.125
Reply with quote
Post 
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-а нужную прогу - палитра инитится уже по иному.


16 Apr 2012 07:34
Profile
Novelist

Joined: 10 Feb 2011 07:04
Posts: 35
Location: 92.112.8.125
Reply with quote
Post 
Собственно видео с "дискетки":
Image
Хм. есть различия как с оригиналом, так и со спринтом. надо еще искать косяки


16 Apr 2012 10:00
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Post 
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


а какой из них берёт последовательность байтов и рисует как вертикаль?

_________________
:dj: https://mastodon.social/@Shaos


16 Apr 2012 18:20
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 119 posts ]  Go to page Previous  1, 2, 3, 4, 5, 6, 7, 8  Next

Who is online

Users browsing this forum: No registered users and 6 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

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.