nedoPC.org

Community for electronics hobbyists, established in 2002
Last visit was: 20 Sep 2024 18:29
It is currently 20 Sep 2024 18:29



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

Joined: 05 Oct 2009 19:44
Posts: 223
Location: 212.164.105.5
кадры полные или пожатые? чем/как пожатые?
хотя под 128й экран же... надо пожать под спринтера и посмотреть чё будет...


09 Aug 2016 02:16
Maniac

Joined: 22 Jun 2005 04:35
Posts: 260
Location: МО Россия
Никак не сжатые.
Я подумал что быстрее inir уже ничего не придумаешь.
Да и при сжатии недетерминированность по тактам получается, а мне надо каждые n-тактов в ковокс байт кидать.


09 Aug 2016 03:50 ICQ
Maniac

Joined: 05 Oct 2009 19:44
Posts: 223
Location: 212.164.105.5
дай на исходники поглазеть?! врятли они будут к спринтеру применимы, ну так, может что найду там интересного...


09 Aug 2016 08:20
Maniac

Joined: 22 Jun 2005 04:35
Posts: 260
Location: МО Россия
исходники ближе к ночи(мск), щас нету под рукой.
Не уверен насчёт ихней читабельности, комментариев там нет, да и подгонка тактов для ковокса не добавляет информативности.
Для спринтера определённо не подойдёт ввиду архитектурный отличий:
хардваре-мультиколор
сд-карточка
менеджер памяти


Last edited by DimkaM on 09 Aug 2016 09:43, edited 1 time in total.



09 Aug 2016 09:41 ICQ
Maniac

Joined: 05 Oct 2009 19:44
Posts: 223
Location: 212.164.105.5
а под какую платформу оно писано? эво, 128й, тс?


09 Aug 2016 09:43
Maniac

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


09 Aug 2016 09:45 ICQ
Maniac

Joined: 22 Jun 2005 04:35
Posts: 260
Location: МО Россия
полный комплект в личке, ибо варез
 "main.c"
Code:
#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:
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



09 Aug 2016 12:55 ICQ
Maniac

Joined: 05 Oct 2009 19:44
Posts: 223
Location: 212.164.105.5
это ты ещё и FatFS гоняешь? С этой штукой можно даже не рассчитывать не то, что 20фпс для спринтера, даже 12.5 вряд ли выжать получиться. Only pure asm! Only pure hardcore!!!


09 Aug 2016 20:39
Maniac

Joined: 22 Jun 2005 04:35
Posts: 260
Location: МО Россия
Фатфс только для поиска файла и заполнения таблицы кластеров.
В все остальное чистый асм, только хардкор


09 Aug 2016 21:21 ICQ
Maniac

Joined: 05 Oct 2009 19:44
Posts: 223
Location: 212.164.105.5
касательно звука - у Спринтера ковокс может работать в двух режимах.
1. Как обычный ковокс (аля пятногоновский, может быть даже как стерео, не проверял).
2. с небольшим fifo и прерываниями. fifo имеет размер 128 - 256 байт (или 256 - 512, подзабыл что-то), в зависимости от формата проигрывания. Прерывания "бластер" выдаёт по мере опустошения fifo. Когда приходит прерывание, нужно закинуть ещё порцию данных в этот буфер (например, через аксель).
у тебя есть какие-нить мысли, как это можно использовать?


09 Aug 2016 23:29
Maniac

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

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

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

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

Чтение с носителя кстати тоже можно немного оптимизировать. У меня сейчас не учитываются подряд идущие кластеры, т.е. каждый кластер дается команда стоп-чтению и команда мультисекторного чтения.


10 Aug 2016 00:32 ICQ
Maniac

Joined: 05 Oct 2009 19:44
Posts: 223
Location: 212.164.105.5
буфер прям в памяти лежит (виртуально). заполнять его можно акселем путём включения нужной страницы. более того, даже данные могут лежать в той же странице, но доступ к буферу только через аксель. читаем 256 байт с озу и переносим акселем в тот же адрес, потом + 256 байт к адресу "источника". при включённой странице нужной эта операция заполняет этот fifo. сам fifo кольцевой.
частоту можно задать - от 8кгц до 48кгц (на самом деле до 96 или более, не помню). режим моно или стерео, 8 или 16 бит.


10 Aug 2016 01:22
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23298
Location: Silicon Valley
Оказывается 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.

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


18 Dec 2020 03:35 WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23298
Location: Silicon Valley
А мой вариант плеера (который на первой страничке этого топика) после проигрывания длинного мультика вводит графическую подсистему Спринтера в разноцветные наркотические сны :lol:

Attachment:
SVS-glitch.jpg


Как видно на Спринтере даже можно замусоривать разными цветами зону бордюра :oops:


You do not have the required permissions to view the files attached to this post.

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


18 Dec 2020 21:05 WWW
 [ 119 posts ]  Go to page Previous  1 ... 4, 5, 6, 7, 8

Who is online

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

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