Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #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[]="PineApple.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){
- RST8_GET_PATH(muzik);
- 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;
- if((err=f_chdir(&muzik[2]))!=0) goto fferr;
- else puts("OK");
- clsize=ffs.csize;
- printf("Find video \"%s\" on sd-card current 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;
- }
- MODULE videopluer
- PUBLIC videopluer,sectorsaver,readsector,muzik
- EXTERN sss,clsize
- COVOX MACRO
- exx
- outi
- exx
- ENDM
- MACINIR MACRO LINIR
- COVOX
- ld b,LINIR
- inir
- ENDM
- INIR74 MACRO
- MACINIR 25
- MACINIR 25
- MACINIR 24
- 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
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement