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

Re: Sprinter Video System (SVS)

Post by Sayman »

кадры полные или пожатые? чем/как пожатые?
хотя под 128й экран же... надо пожать под спринтера и посмотреть чё будет...
DimkaM
Maniac
Posts: 261
Joined: 22 Jun 2005 04:35
Location: МО Россия

Re: Sprinter Video System (SVS)

Post by DimkaM »

Никак не сжатые.
Я подумал что быстрее inir уже ничего не придумаешь.
Да и при сжатии недетерминированность по тактам получается, а мне надо каждые n-тактов в ковокс байт кидать.
Sayman
Maniac
Posts: 223
Joined: 05 Oct 2009 19:44
Location: 212.164.105.5

Re: Sprinter Video System (SVS)

Post by Sayman »

дай на исходники поглазеть?! врятли они будут к спринтеру применимы, ну так, может что найду там интересного...
DimkaM
Maniac
Posts: 261
Joined: 22 Jun 2005 04:35
Location: МО Россия

Re: Sprinter Video System (SVS)

Post by DimkaM »

исходники ближе к ночи(мск), щас нету под рукой.
Не уверен насчёт ихней читабельности, комментариев там нет, да и подгонка тактов для ковокса не добавляет информативности.
Для спринтера определённо не подойдёт ввиду архитектурный отличий:
хардваре-мультиколор
сд-карточка
менеджер памяти
Last edited by DimkaM on 09 Aug 2016 09:43, edited 1 time in total.
Sayman
Maniac
Posts: 223
Joined: 05 Oct 2009 19:44
Location: 212.164.105.5

Re: Sprinter Video System (SVS)

Post by Sayman »

а под какую платформу оно писано? эво, 128й, тс?
DimkaM
Maniac
Posts: 261
Joined: 22 Jun 2005 04:35
Location: МО Россия

Re: Sprinter Video System (SVS)

Post by DimkaM »

эво
DimkaM
Maniac
Posts: 261
Joined: 22 Jun 2005 04:35
Location: МО Россия

Re: Sprinter Video System (SVS)

Post by DimkaM »

полный комплект в личке, ибо варез

 main.c

Code: Select all

#include <stdio.h>
#include "../mylib/mylib.h"
#include <intrz80.h>
#include "ff.h"
#include "diskio.h"
#include "string.h"

ERRORSTRINGS
FATFS ffs;
FIL file;
unsigned int len=0;
unsigned char err;
const unsigned char videvo[]="Video/OctoberFest.bin";
extern unsigned char muzik[1024];


interrupt[0] void myint(void){
}
DWORD clust2sect (	/* !=0: Sector number, 0: Failed - invalid cluster# */
	FATFS* fs,		/* File system object */
	DWORD clst		/* Cluster# to be converted */
);
DWORD get_fat (	/* 0xFFFFFFFF:Disk error, 1:Internal error, 2..0x0FFFFFFF:Cluster status */
	FATFS* fs,	/* File system object */
	DWORD clst	/* FAT item index (cluster#) to get the value */
);
char shript[2048];
void mcu_init(void){
	load_I_register(0xbf);
	interrupt_mode_2();
	memcpy(shript,mylib_font8x8,2048);
	mylib_font8x8=shript;
	scr_init(0x78);
	*(unsigned char*)0x6000=0x78;
	memcpy((void*)0x6001,(void*)0x6000,6143);
	output(0xeff7,0x20);
	output8(0xbf,1);
	output(0xfff7,0x7f);
	output(0xff77,3);
	//output8(0xbf,1);
	output(0x3ff7,0);
	enable_interrupt();
}
unsigned long int *sss;
unsigned long int cl=0;
unsigned char clsize;
extern unsigned char sdmulsec;
extern void sectorsaver(unsigned long int s);
extern void videopluer(void);
void load_videvo_secs(void){
	unsigned char p = 64;
	unsigned long int ss;
	sss=(void*)(0x4000);
	cl=file.sclust;
	while(1){
		ss=clust2sect(&ffs,cl);
		if(sss>=(void*)0x4000){
			sss=sss-0x1000;
			output(0x37f7,p);
			p++;
		}
		sectorsaver((sdmulsec)?(ss):(ss*512));
		switch (ffs.fs_type) {		
		case FS_FAT16 :
			if(cl>=0x0000FFF8)goto endloop;
			break;
		case FS_FAT32 :
			if(cl>=0x0FFFFFF8)goto endloop;
			break;
		};
		cl=get_fat(&ffs,cl);
	}
endloop:
	if(sss>=(void*)0x4000){
		sss=sss-0x1000;
		output(0x37f7,p);
		p++;
	}
	*sss=0;
	return;
}
C_task void main(void){
	unsigned char p = 64;
	
	mcu_init();
	puts("VidevoPluer v2.14.45e");
	puts("Full screen 25fps video");
	puts("Covox 12500Hz 8bit 1ch audio");
	
	printf("\nSD card init ...");
	if((err=f_mount(&ffs,"0:",1))!=0) goto fferr;
	else puts("OK");
	clsize=ffs.csize;
	
	printf("Find video \"%s\" on sd-card root directory ...", videvo);
	if((err=f_open (&file, videvo, FA_READ))!=0) goto fferr;
	else puts("OK\nAnalising...");
	load_videvo_secs();
	output8(0xfe,0);
	videopluer();
	puts("         CINEMA KONEC          ");
	while(1);
	
fferr:
	if(err!=0){
		printf("error %s \n",fserr[err]);
		}
	else{
		puts("Video OK!");
	}
	return;
}

 asm

Code: Select all

MODULE videopluer  
  PUBLIC videopluer,sectorsaver,readsector
  EXTERN sss,clsize
COVOX MACRO  
	exx
	outi
	exx
	ENDM
	
	
MAC_IN MACRO I 
	COVOX
	ld b,c
	nop
	REPT I
	ini
	ENDR
	ENDM
	
	RSEG CODE
sectorsaver:
	ld hl,(sss)
	ld (hl),b
	inc hl
	ld (hl),c
	inc hl
	ld (hl),d
	inc hl
	ld (hl),e
	inc hl
	ld (sss),hl
	ret     
	
P_DATA    EQU 0x0057    ;порт данных
P_CONF    EQU 0x8057    ;порт конфигурации
CMD_12    EQU 0x4C    ;STOP_TRANSMISSION
CMD_17    EQU 0x51    ;READ_SINGLE_BLOCK
CMD_18    EQU 0x52    ;READ_MULTIPLE_BLOCK
CMD_24    EQU 0x58    ;WRITE_BLOCK
CMD_25    EQU 0x59    ;WRITE_MULTIPLE_BLOCK
CMD_55    EQU 0x77    ;APP_CMD
CMD_58    EQU 0x7A    ;READ_OCR
CMD_59    EQU 0x7B    ;CRC_ON_OFF
ACMD_41   EQU 0x69   ;SD_SEND_OP_COND
quitnah:
	pop af
	ret
readsector:
    ld bc,P_DATA+0x7f00
	ex af,af
	dec a
	jr nz,multiread
	ld a,(clsize)
	COVOX
	ex af,af
    LD A,CMD_12  
    OUT (C),A
    XOR A
    OUT (C),A
    OUT (C),A
    OUT (C),A
    OUT (C),A
    DEC A
    OUT (C),A    ;пишем пустой CRC7 и стоповый бит
stopcmdloop:
	in a,(c)
	inc a
	jr nz,stopcmdloop
firstread:
	ex de,hl
	ld a,h
	cp 0x40
	jr nz,noincpaga
	ld h,0
	inc ixl
noincpaga:	
	ld a,ixl
	ld bc,0x37f7
	out (c),a
	push hl
	ld a,(hl)
	inc hl
	or (hl)
	inc hl
	or (hl)
	inc hl
	or (hl)
	pop hl
	jr z,quitnah
    ld bc,P_DATA+0x7f00
    LD A,CMD_18    
    OUT (C),A   
    outi    ;пишем номер сектора от старшего
    outi
	outi
    outi    ;до младшего байта
    LD A,0xFF
    OUT (C),A    ;пишем пустой CRC7 и стоповый бит
	ex de,hl
	
	ld b,0x0d
stopnull2:
	djnz stopnull2
	ex af,af
multiread
	ex af,af
cmdwaitloop:
	COVOX
	ld b,0x0d
	ld b,0x0d
	nop
	nop
cmdnulloop:
	in a,(c)	
	cp 0xfe		
	jr z,cmdendloop		
	djnz cmdnulloop
	jr cmdwaitloop
cmdendloop:
	in a,(0xfe)
	in a,(0xfe)
	djnz cmdendloop
	ld a,16
in_loop:
	MAC_IN 32
	dec a
	jr nz,in_loop
	in a,(c)
	COVOX
	in a,(c)
	ld b,0x23
cmdnulloop2:
	djnz cmdnulloop2
	ret
	
videopluer:	
	ld hl,muzik
	ld de,muzik+1
	ld bc,511
	ld (hl),0x80
	ldir
	ei
	halt
	di
	ld hl,sndloop
	ld (0xbfff),hl
	ld hl,0x0000
	ld bc,P_CONF ;включаем карту
    LD A,1
    OUT (c),A
	ld a,1
	ex af,af
	ld ixl,64
	ld de,0x00
	exx
	ld bc,0x00fb
	jr iymusik
sndloop:
	pop af
iymusik:
	ld hl,muzik+0x0000
	exx
	ld a,(iymusik+2)
	xor 2
	ld (iymusik+2),a
hlmusik:
	ld hl,muzik+0x0200
	ld a,(hlmusik+2)
	xor 2
	ld (hlmusik+2),a
	ld bc,0x7ffd
vpaga:
	ld a,0x18
	out (c),a
	xor 0x08
	ld (vpaga+1),a
	ld bc,0x77f7
vpaga1:
	ld a,0xfa
	out (c),a
	xor 0x02
	ld (vpaga1+1),a
	call readsector
	ld hl,0x4000
scrloop:
	call readsector
	ld a,0x58
	xor h
	or l
	jp nz,scrloop
	
	ld hl,0x6000
scr2loop:
	call readsector
	ld a,0x78
	xor h
	or l
	jp nz,scr2loop
	
	exx
	ei
	ld b,21
nulloop2:
	djnz nulloop2
	outi
	
mainnull:	
	ld b,0x28
	nop
	nop
nulloop3:
	djnz nulloop3
	outi
	jr mainnull
	
	RSEG	ALIGN8
muzik:
	DEFS	1024

END


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

Re: Sprinter Video System (SVS)

Post by Sayman »

это ты ещё и FatFS гоняешь? С этой штукой можно даже не рассчитывать не то, что 20фпс для спринтера, даже 12.5 вряд ли выжать получиться. Only pure asm! Only pure hardcore!!!
DimkaM
Maniac
Posts: 261
Joined: 22 Jun 2005 04:35
Location: МО Россия

Re: Sprinter Video System (SVS)

Post by DimkaM »

Фатфс только для поиска файла и заполнения таблицы кластеров.
В все остальное чистый асм, только хардкор
Sayman
Maniac
Posts: 223
Joined: 05 Oct 2009 19:44
Location: 212.164.105.5

Re: Sprinter Video System (SVS)

Post by Sayman »

касательно звука - у Спринтера ковокс может работать в двух режимах.
1. Как обычный ковокс (аля пятногоновский, может быть даже как стерео, не проверял).
2. с небольшим fifo и прерываниями. fifo имеет размер 128 - 256 байт (или 256 - 512, подзабыл что-то), в зависимости от формата проигрывания. Прерывания "бластер" выдаёт по мере опустошения fifo. Когда приходит прерывание, нужно закинуть ещё порцию данных в этот буфер (например, через аксель).
у тебя есть какие-нить мысли, как это можно использовать?
DimkaM
Maniac
Posts: 261
Joined: 22 Jun 2005 04:35
Location: МО Россия

Re: Sprinter Video System (SVS)

Post by DimkaM »

Прикольно, теоретически это намного упрощает вывод в ковокс.
Сейчас у меня закольцованный буфер на 1к для ковокса
RSEG ALIGN8
muzik:
DEFS 1024
его хватает на два кадра. Данные в него подгружаются каждый кадр по 512байт(для следующего кадра). Потом каждые 280тактов(7мгц з80) exx:oti:exx

В твоем случае гемор с тактами не нужен. Преравания от ковокса возможно понадобятся.
Не знаю как устроен буфер у спринтеровского ковокса, в памяти где или через порт заполнять. Но в любом случае это упрощает. Особенно если он аля кольцевой буфер.
В принципе и стерео можно, даты конечно в два раза больше получится.
И не знаю с какой частотой спринтер в ковокс кидает из буфера, относительно нее надо будет уже вав делать.

И соответственно с аппаратным буфером ненадо заморачиватся с подгонкой тактов, это не будет мешать распаковывать видео.

Сейчас у меня прокачивается порядка 13кб 25фпс при 7мгц з80. Плюс есть какоето количество лишнего кода для пляски с ковоксом.
Соответственно если спринтер хотябы в 2-2.5 раза пошустрее прокачает, то возможно получится 256ц с приемлемым фпс прогнать.

Чтение с носителя кстати тоже можно немного оптимизировать. У меня сейчас не учитываются подряд идущие кластеры, т.е. каждый кластер дается команда стоп-чтению и команда мультисекторного чтения.
Sayman
Maniac
Posts: 223
Joined: 05 Oct 2009 19:44
Location: 212.164.105.5

Re: Sprinter Video System (SVS)

Post by Sayman »

буфер прям в памяти лежит (виртуально). заполнять его можно акселем путём включения нужной страницы. более того, даже данные могут лежать в той же странице, но доступ к буферу только через аксель. читаем 256 байт с озу и переносим акселем в тот же адрес, потом + 256 байт к адресу "источника". при включённой странице нужной эта операция заполняет этот fifo. сам fifo кольцевой.
частоту можно задать - от 8кгц до 48кгц (на самом деле до 96 или более, не помню). режим моно или стерео, 8 или 16 бит.
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Sprinter Video System (SVS)

Post by Shaos »

Оказывается Sayman исправил мой SVS_VIEW.EXE под Спринтер и все эти годы молчал :lol:

Бинарник только что прислал (приаттачено), а исходники говорит посеял ;)

Щас буду смотреть, что там исправлено :rotate:

P.S. Хотя не так чтобы совсем молчал - вот сообщение с предыдущей страницы топика от 9 августа 2016 года:
Sayman wrote:Чёрт меня дёрнул залезть сегодня в архивы и пошариться там. Запустил ещё раз и увидел старые артефакты при проигрывании роликов. СРазу вспомнил эту тему как и то, что в те года так и не нашли причину. А причина до безобразия проста, если прочитать авторскую доку на Спринтера. Там сказано, что при работе с окном в диапазоне адресов 0x4000 - 0x7fff, порт 0x89 (port_y) должен быть указан на координату 0xc0 (192). Что я и вправил в исходнике в месте, где обработка события 0xFF (догрузка фрейма). И о ЧУДО - артефакты исчезли)))) До кучи кинул свап между 0м и 1м экраном, чтобы избавиться от дёргания картинки. Но тормозит видео ещё сильнее, чем flc.
P.P.S. Есть ещё искажения - буду экспериментировать дальше...
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Sprinter Video System (SVS)

Post by Shaos »

А мой вариант плеера (который на первой страничке этого топика) после проигрывания длинного мультика вводит графическую подсистему Спринтера в разноцветные наркотические сны :lol:
SVS-glitch.jpg
Как видно на Спринтере даже можно замусоривать разными цветами зону бордюра :oops:
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net