nedoPC.org

Community of electronics hobbyists established in 2002

...
Atom Feed | View unanswered posts | View active topics It is currently 23 Aug 2017 08:01



Reply to topic  [ 117 posts ]  Go to page Previous  1 ... 4, 5, 6, 7, 8
Sprinter Video System (SVS) 
Author Message
Senior

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


09 Aug 2016 05:16
Profile
Senior

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


09 Aug 2016 06:50
Profile ICQ
Senior

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


09 Aug 2016 11:20
Profile
Senior

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


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



09 Aug 2016 12:41
Profile ICQ
Senior

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


09 Aug 2016 12:43
Profile
Senior

Joined: 22 Jun 2005 07:35
Posts: 181
Location: МО Россия
Reply with quote
эво


09 Aug 2016 12:45
Profile ICQ
Senior

Joined: 22 Jun 2005 07:35
Posts: 181
Location: МО Россия
Reply with quote
полный комплект в личке, ибо варез
 "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 15:55
Profile ICQ
Senior

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


09 Aug 2016 23:39
Profile
Senior

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


10 Aug 2016 00:21
Profile ICQ
Senior

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


10 Aug 2016 02:29
Profile
Senior

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

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

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

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

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


10 Aug 2016 03:32
Profile ICQ
Senior

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


10 Aug 2016 04:22
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 117 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

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