|
nedoPC.orgCommunity for electronics hobbyists, established in 2002 |
|
Last visit was: 20 Sep 2024 18:29
|
It is currently 20 Sep 2024 18:29
|
Sprinter Video System (SVS)
Author |
Message |
Sayman
Maniac
Joined: 05 Oct 2009 19:44 Posts: 223 Location: 212.164.105.5
|
кадры полные или пожатые? чем/как пожатые? хотя под 128й экран же... надо пожать под спринтера и посмотреть чё будет...
|
09 Aug 2016 02:16 |
|
|
DimkaM
Maniac
Joined: 22 Jun 2005 04:35 Posts: 260 Location: МО Россия
|
Никак не сжатые. Я подумал что быстрее inir уже ничего не придумаешь. Да и при сжатии недетерминированность по тактам получается, а мне надо каждые n-тактов в ковокс байт кидать.
|
09 Aug 2016 03:50 |
|
|
Sayman
Maniac
Joined: 05 Oct 2009 19:44 Posts: 223 Location: 212.164.105.5
|
дай на исходники поглазеть?! врятли они будут к спринтеру применимы, ну так, может что найду там интересного...
|
09 Aug 2016 08:20 |
|
|
DimkaM
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 |
|
|
Sayman
Maniac
Joined: 05 Oct 2009 19:44 Posts: 223 Location: 212.164.105.5
|
а под какую платформу оно писано? эво, 128й, тс?
|
09 Aug 2016 09:43 |
|
|
DimkaM
Maniac
Joined: 22 Jun 2005 04:35 Posts: 260 Location: МО Россия
|
эво
|
09 Aug 2016 09:45 |
|
|
DimkaM
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 |
|
|
Sayman
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 |
|
|
DimkaM
Maniac
Joined: 22 Jun 2005 04:35 Posts: 260 Location: МО Россия
|
Фатфс только для поиска файла и заполнения таблицы кластеров. В все остальное чистый асм, только хардкор
|
09 Aug 2016 21:21 |
|
|
Sayman
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 |
|
|
DimkaM
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 |
|
|
Sayman
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 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 23298 Location: Silicon Valley
|
Оказывается Sayman исправил мой SVS_VIEW.EXE под Спринтер и все эти годы молчал Бинарник только что прислал (приаттачено), а исходники говорит посеял Щас буду смотреть, что там исправлено P.S. Хотя не так чтобы совсем молчал - вот сообщение с предыдущей страницы топика от 9 августа 2016 года: P.P.S. Есть ещё искажения - буду экспериментировать дальше...
You do not have the required permissions to view the files attached to this post.
|
18 Dec 2020 03:35 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 23298 Location: Silicon Valley
|
А мой вариант плеера (который на первой страничке этого топика) после проигрывания длинного мультика вводит графическую подсистему Спринтера в разноцветные наркотические сны Как видно на Спринтере даже можно замусоривать разными цветами зону бордюра
You do not have the required permissions to view the files attached to this post.
|
18 Dec 2020 21:05 |
|
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
|
|