Do you have a question? Post it now! No Registration Necessary
- Vadim Tzirulnicov
September 19, 2003, 2:51 am

#/▄▄▄▄▄/# · ···─═╗ Привет _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*_ !
╚═══════════════─────────────────····· · · ·
... Людям свойственно приписывать другим качества, присущие им самим.
_*▀▀▀▀▀*_ ╚═══════════════─────────────────····· · · ·
Копаясь в хламе на своём винчестере, обнаружил программу, позволяющую
проигрывать 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
- » ОС под fujitsu
- — Next thread in » Microcontrollers (Russian)
-
- » Подскажите что за компилятор
- — Previous thread in » Microcontrollers (Russian)
-
- » По моему это гениально
- — Newest thread in » Microcontrollers (Russian)
-
- » (PDF) Atlas of Upper Gastrointestinal and Hepato Surgery 2nd Ed by CLAVIEN
- — The site's Newest Thread. Posted in » Electronics (Polish)
-
- » adaptateur flash photo ?
- — The site's Last Updated Thread. Posted in » Electronics (French)
-