Mp3 player

Do you have a question? Post it now! No Registration Necessary

#/▄▄▄▄▄/# · ···─═╗ Привет _All_ ! Пишет тебе *Vadim* !
_*▀▀▀▀▀*_        ╚═══════════════─────────────────····· · · ·

Копаясь в хламе на своём винчестере, обнаружил программу, позволяющую
проигрывать mp3-файлы на слабых машинах путём подключения декодера vs1001k к
lpt-порту (на mp3projects.narod.ru, вроде взял её).
Hа схеме линии ACK,d0,d1,d2,strobe,busy,d3,d4,d5 порта lpt через инвертор
К555ЛH3 подключены соответственно к выводам
so,si,sclk,xCS,xRESET,dreq,sdata,dclk и bsync чипа vs1001k.

В конце привожу саму программу. Я её в деле не проверял, но уже видно, что вряд
ли онанормально работает с чипом.
Во первых - пишет подряд, не выжидая некоторое время
Во вторых - пишет всё подряд из mp3-файла, с первого до последнего символа.

После изучения исхдного кода программы всё равно остаётся вопрос, как работать
с данным чипом.

Итак, как доработать её для работоспособности ? Какие будут комментарии по её
алгоритму ?



/*─═>/* Здесь начинается mp3_rel.cpp /*<═─/*
#include <stdio.h>
#include <conio.h>
#include <dos.h>
#include <math.h>
#include <bios.h>

void SCIWrite(int address, int data)
{
int adr[8], dat[16];
char dport;
for(int j=7; j>=0; j--)
 {
 adr[j]=1&address;
 address>>=1;
 }

for(j15%; j>=0; j--)
 {
 dat[j]=1&data;
 data>>=1;
 }
dport=inp(0x378)&248;
outp(0x378, dport+0+2+1);

for(j=0; j<6; j++)
 {
 outp(0x378, dport+4+2+1);
 outp(0x378, dport+4+0+1);
 }
// '1'
outp(0x378, dport+4+2+0);
outp(0x378, dport+4+0+0);
outp(0x378, dport+4+2+1);
// '0'
outp(0x378, dport+4+0+1);

//Передаем адрес
for(j=0; j<8; j++)
 {
 outp(0x378, dport+4+2+1-adr[j]);
 outp(0x378, dport+4+0+1-adr[j]);
 }

//Передаем данные
for(j=0; j<16; j++)
 {
 outp(0x378, dport+4+2+1-dat[j]);
 outp(0x378, dport+4+0+1-dat[j]);
 }

outp(0x378, dport+4+2+1);
outp(0x378, dport+0+2+1);
}

int SCIRead(int address)
{
int adr[8];
int dat=0;
char dport;
for(int j=7; j>=0; j--)
 {
 adr[j]=1&address;
 address>>=1;
 }
dport=inp(0x378)&248;

//Hачинаем передачу
outp(0x378, dport+0+2+1); //уст. xCS -1, SCK -0, SI -1

// Посылаем команду ЗАПИСЬ (00000011) 0x03
// 6 нулей
for(j=0; j<6; j++)
 {
 outp(0x378, dport+4+2+1);
 outp(0x378, dport+4+0+1);
 }
//две '1'
for(j=0; j<2; j++)
 {
 outp(0x378, dport+4+2+0);
 outp(0x378, dport+4+0+0);
 }

//Передаем адрес
for(j=0; j<8; j++)
 {
 outp(0x378, dport+4+2+1-adr[j]);
 outp(0x378, dport+4+0+1-adr[j]);
 }
outp(0x378, dport+4+2+1);
//Принимаем данные
for(j=0; j<16; j++)
 {
 outp(0x378, dport+4+0+1);
 dat+=(1-((inp(0x379)&64)>>6))*pow(2, 15-j);
 outp(0x378, dport+4+2+1);
 }
outp(0x378, dport+4+2+1);
outp(0x378, dport+0+2+1);
return(dat);
}

void SDIWrite(int data)
{
int dat[8];
char dport;

for(int j=7; j>=0; j--)
 {
 dat[j]=1&data;
 data>>=1;
 }

dport=0;
//Hачинаем передачу

//Передаем данные bit6 - bit0
for(j=0; j<8; j++)
 {
 outp(0x378, dport+32*0+16*1+8-8*dat[j]);
 outp(0x378, dport+32*0+16*0+8-8*dat[j]);
 }
//Передаем данные bit7
outp(0x378, dport+32*1+16*1+8-8*dat[7]);
outp(0x378, dport+32*1+16*0+8-8*dat[7]);
}

void xReset(void)
{
int d=inp(0x37a);
outp(0x37a, d&254);
outp(0x37a, 1+(d&254));
delay(1);
}

int DREQ(void)
{
return (1-((inp(0x379)&128)>>7));
}

main()
{
FILE *fp;
int f=0, g=0, w=0, key=0, vol=0;
char ch;
clrscr();

/*
//Sine Test
SDIWrite(0x00);

SDIWrite(0x53);
SDIWrite(0xef);
SDIWrite(0x6e);
SDIWrite(62);
SDIWrite(0);
SDIWrite(0);
SDIWrite(0);
SDIWrite(0);
delay(3000);
SDIWrite(0x45);
SDIWrite(0x78);
SDIWrite(0x69);
SDIWrite(0x74);
SDIWrite(0);
SDIWrite(0);
SDIWrite(0);
SDIWrite(0);
//return(0);
/*

/*
//Test SCI (Full volume / powersave)
for(i=0; i<5; i++)
 {
 ChipSel(1);
 SCIWriteByte(0x02);
 SCIWriteByte(0x0b);
 SCIWriteByte(0x00);
 SCIWriteByte(0x00);
 ChipSel(0);
 delay(500);
 ChipSel(1);
 SCIWriteByte(0x02);
 SCIWriteByte(0x0b);
 SCIWriteByte(0xff);
 SCIWriteByte(0xff);
 ChipSel(0);
 }
*/

/*
//Memory Test
SDIWrite(0x00);
SDIWrite(0x4d);
SDIWrite(0xea);
SDIWrite(0x6d);
SDIWrite(0x54);
SDIWrite(0);
SDIWrite(0);
SDIWrite(0);
SDIWrite(0);
delay(500);
if (SCIRead(0x08)=12%7)
 printf("\nТест памяти пройден\n");
else
 printf("\nОшибка теста памяти, ошибка %x", SCIRead(0x08));

*/

if ((fp=fopen("01.mp3", "rb")) == NULL)
 {
 printf("Hе могу открыть файл.");
 return 1;
 }
xReset();
delay(100);
SCIWrite(0x00, 0x0004); //SoftReset
delay(100);
SCIWrite(0x03, 0x8000+(14318180/2000));  //Clock freq + doubler

SDIWrite(0);
SDIWrite(0);

while(!feof(fp)&&key!=0x01)
{
if(DREQ()==0)
 {
 SDIWrite(getc(fp));
 }
else
 {
 asm in al, 0x60;
 key=_AL;
 if(key==0x19)
  {
  SCIWrite(0, 1);
  gotoxy(15,15);
  printf("bass/treble enhancer enabled  ");
  }
 if(key==0x18)
  {
  SCIWrite(0, 0);
  gotoxy(15,15);
  printf("bass/treble enhancer disabled  ");
  }
 if(key==0x17&&vol>0)
  {
  vol--;
  SCIWrite(11, vol*256+vol);
  gotoxy(5,15);
  printf("VOL: %u  ", 255-vol);
  }
 if(key==0x16&&vol<255)
  {
  vol++;
  SCIWrite(11, vol*256+vol);
  gotoxy(5,15);
  printf("VOL: %u  ", 255-vol);
  }
 g=SCIRead(4);
 delay(6);
 if(f!=g)
  {
  f=g;
  gotoxy(10,10);
  printf("%d   ", f);
  w=SCIRead(5);
  delay(5);
  printf("%X   ", (w&7680)>>9);
  }
 }
}
fclose(fp);
return 0;
}
/*─═>/* А здесь, видимо, не начинается mp3_rel.cpp /*<═─/*

               · ···─═╗ Hу я вроде все сказал... Bye _*All*_ !
                      ╚═══════════════─────────────────····· · · ·
... Людям свойственно приписывать другим качества, присущие им самим.

Site Timeline