RCA DTA800 Digital to Analog TV Converter Box - Page 15 - AVS Forum
Forum Jump: 
Reply
 
Thread Tools
post #421 of 426 Old 10-02-2014, 10:07 AM
Member
 
jvvh5897's Avatar
 
Join Date: Oct 2011
Posts: 30
Mentioned: 0 Post(s)
Tagged: 0 Thread(s)
Quoted: 2 Post(s)
Liked: 12
Quote:
Originally Posted by satpro View Post
Does anyone know what this is output screen is for? It is from a hidden feature on the dta800b I just started testing. I can see chs, snr, pids but I don't know what the rest is for yet. you can get there by pressing channel down and power simultaneously on the front panel, you will have to unplug to reboot afterwards or wait 10-15 minutes to auto reboot,
I will post a complete review and pictures of this model soon. already not to impressed with the tuner sensitivity or video quality of the rca being worse than the funia tb100 series.
The above uses hard coded channel list. In the early dta800b code there are three channels in the list--one is KTLA the others are just a jumble of letters in the name. In the newer B1 code there are more in the ch list with 0x24 bytes per channel--KTLA is still in there but with a diff freq/ch Others on the list:
T H E T U B
c h -5 9 - 1
c h - 5 9 - 2
c h - 5 9 - 3
T B T - D T
R F 3 8 - 1

Since these end up in RAM, you should be able to create a little code to overwrite them with channels in your area.
jvvh5897 is offline  
Sponsored Links
Advertisement
 
post #422 of 426 Old 10-03-2014, 12:26 PM
Member
 
jvvh5897's Avatar
 
Join Date: Oct 2011
Posts: 30
Mentioned: 0 Post(s)
Tagged: 0 Thread(s)
Quoted: 2 Post(s)
Liked: 12
Hum, if you have box's serial port hooked up to PC then you can enter the factory screen from any channel and see the details of the channel on that screen (option 21 get you to the screen and once in if you hit 8 you get the channel details). You can see the channel's PIDs, the channel number and real frequency, the signal to noise ratio (seems to be in dB--a reading of about 65 on the signal meter gives 27 reading SNR, 43 gives 22 or so). Rest of the info is about how full the FIFO buffers are--audio tends to be about 3k in a 64K buffer, video reaches close to a megabyte at times in the buffer.

If you bother to change the factory channel list you can use the serial port to control the channel you have on, but the list seems to only have space for 7 channels--so maybe good for a FAV list. Or use the code to figure out how to get more control.
jvvh5897 is offline  
post #423 of 426 Old 10-04-2014, 11:32 AM
Member
 
jvvh5897's Avatar
 
Join Date: Oct 2011
Posts: 30
Mentioned: 0 Post(s)
Tagged: 0 Thread(s)
Quoted: 2 Post(s)
Liked: 12
It seems you can even do a primitive form of serial control of the box via the serial port. You hold down the front buttons as though getting into the factory screen, but do it after you plug in the box not before. The box then starts up normally, but on the serial port it stops before giving you the console menu, and at that point you can type in numbers from 1 to 9 and they will go into the info OSD as though you pressed the keys on the remote. You can't specify sub-channel in most cases, but you can get to the first channel (ie you can get 8-1 easy by just typing 8, but cant get to 8-2 this way).
The code is just writing the number you send to a single register 0xb0102034, so you can write a little code and test other key than the numbers that the above allows. I've found the ch up and down keys sent this way tend to keep cycling through the channels rather than move up or down a single ch. You can also get to the mute and volume up and down settings this way, but the volume up and down also keep going to one extreme or the other--still you can see that they do try to work and you do have that control in the code.
jvvh5897 is offline  
post #424 of 426 Old 10-13-2014, 09:34 AM
Member
 
jvvh5897's Avatar
 
Join Date: Oct 2011
Posts: 30
Mentioned: 0 Post(s)
Tagged: 0 Thread(s)
Quoted: 2 Post(s)
Liked: 12
I've found another factory screen, or maybe it is supposed to be the first page of factory screen. It has a label--"Debug". You see the GMT offset, daylight setting mode, UTC. There is the virtual ch #, SNR and sig % reading. There might be EIT and Ratings info from stream as well, but that part might be defeated. I get to the Debug screen and factory screen by overwriting the struct for thesig meter with the 0x2c byte struct for those screens as I want to see them. You get the video and sound for the channel you have the box set for behind either of these screens.
jvvh5897 is offline  
post #425 of 426 Old 10-16-2014, 09:28 AM
Member
 
jvvh5897's Avatar
 
Join Date: Oct 2011
Posts: 30
Mentioned: 0 Post(s)
Tagged: 0 Thread(s)
Quoted: 2 Post(s)
Liked: 12
Figured I would post a few of the projects I've tried since switching from hand coding machine code to compiling C with a gcc variant that works under windows and is optimized for MIPS. I still have to do some hand coding as I use the box's routines as much as possible. The size of most of the C routines are bigger than I think should go into the 80016000 space, so I do a 3 step process--load a routine that I hand coded to call the Xmodem load routine in the box's code, use that to load my code to free RAM at 80200000, and then load a routine that just calls to 80200000 to run the code.

I use dummy routines in the C code to call the box code, but compile the code with the longcall option active so that all I need to is moddify the jalr to call the machine code routines I really want--I bet it could be done better, but that is what I do. Since those machine code addresses are version specific, I'm not including the dummy routines.


Here is the routine I'm using to capture the SNR--it uses the timer ticks (200 per second), serial port read, serial port send, as well as the SNR read routine.

void main1(unsigned long StartAddr,int number)
{
unsigned char c;
unsigned int diff_time;
int i;
asm("lui $0,0x0\n\t");

*( unsigned long *)0x80001F04=0;
*( unsigned long *)0x80001F08=0x01030200;
*( unsigned long *)0x80001F0c=0x04;

//going to use 40k in 4k blocks to store SNR info with an index to where to write at the start
mems(0x80180000,0,0xa000);
for(i=0;i<10;i++){*( unsigned long *)(0x80180000+(i<<12))=4;}

for(;
{
*( unsigned long *)0x80001F00=*( unsigned long *)0x800047FC;
while((*( unsigned long *)0x800047FC - *( unsigned long *)0x80001F00)<200) {;}
far_call2(0x80004640,0x80001f10); //read SNR
//use a couple bytes to save the greatest and least SNR seen
*( unsigned char *)0x80001F20=*( unsigned char *)0x80001f18;
*( unsigned char *)0x80001F22=*( unsigned char *)0x80001f18;
while((*( unsigned long *)0x800047FC - *( unsigned long *)0x80001F00)<200*60)
{
c=far_call(0xb0400180,0); //read RX serial port
if (c==0x26) return;
if (((*( unsigned long *)0x800047FC)>>9)&1==1)
{far_call2(0x80004640,0x80001f10); //read SNR
if ((*( unsigned char *)0x80001F20) > (*( unsigned char *)0x80001f18)) *( unsigned char *)0x80001F20=*( unsigned char *)0x80001f18;
if ((*( unsigned char *)0x80001F22) < (*( unsigned char *)0x80001f18)) *( unsigned char *)0x80001F22=*( unsigned char *)0x80001f18;
}
}

i= *( unsigned char *)0x800873d8;
*( unsigned char *)(0x80180000+(i<<12) + *( unsigned long *)(0x80180000+(i<<12)))=*( unsigned char *)0x80001f20;
*( unsigned char *)(0x80180000+((i+5)<<12) + *( unsigned long *)(0x80180000+((i+5)<<12)))=*( unsigned char *)0x80001f22;




(*( unsigned long *)(0x80180000+(i<<12) ))++;
(*( unsigned long *)(0x80180000+((i+5)<<12) ))++;

s_port("ch %d : Lo %d, Hi %d\n",i,*( unsigned char *)0x80001f20,*( unsigned char *)0x80001f22); //use 80081088 string %x08x or 8008173e %d
//s_port("0x%x\n",*( unsigned char *)0x80001f22);
*( unsigned long *)0x80001F04=(*( unsigned long *)0x80001F04)+1;
if ((*( unsigned long *)0x80001F04)>4) {*( unsigned long *)0x80001F04 = 0;}
*( unsigned char *)0x800873d9=*( unsigned char *)(0x80001F08+(*( unsigned char *)0x80001F04)); //put value into the prev ch spot
*( unsigned long *)0xb0102034=0x38; //write prev command
}

}
jvvh5897 is offline  
post #426 of 426 Old 10-16-2014, 09:31 AM
Member
 
jvvh5897's Avatar
 
Join Date: Oct 2011
Posts: 30
Mentioned: 0 Post(s)
Tagged: 0 Thread(s)
Quoted: 2 Post(s)
Liked: 12
Here is one that loads registers in the audio part of the processor to make a sine wave play out.

unsigned long rawData[0x30] =
{
0x00000000, 0x00010B51, 0x0002120F, 0x00030FBC,
0x0003FFFF, 0x0004DEBE, 0x0005A827, 0x000658C9,
0x0006ED9E, 0x0007641A, 0x0007BA36, 0x0007EE7A,
0x0007FFFF, 0x0007EE7A, 0x0007BA36, 0x0007641A,
0x0006ED9E, 0x000658C9, 0x0005A827, 0x0004DEBE,
0x0003FFFF, 0x00030FBC, 0x0002120F, 0x00010B51,
0x00000000, 0xFFFEF4AF, 0xFFFDEDF1, 0xFFFCF044,
0xFFFC0001, 0xFFFB2142, 0xFFFA57D9, 0xFFF9A737,
0xFFF91262, 0xFFF89BE6, 0xFFF845CA, 0xFFF81186,
0xFFF80001, 0xFFF81186, 0xFFF845CA, 0xFFF89BE6,
0xFFF91262, 0xFFF9A737, 0xFFFA57D9, 0xFFFB2142,
0xFFFC0000, 0xFFFCF044, 0xFFFDEDF1, 0xFFFEF4AF
};
*/

unsigned long rawData[0x18] =
{

0x00000000, 0x0007BA36, 0x0003FFFF, 0xFFFA57D9,
0xFFF91262, 0x0002120F, 0x0007FFFF, 0x0002120F,
0xFFF91262, 0xFFFA57D9, 0x00040000, 0x0007BA36,
0x00000000, 0xFFF845CA, 0xFFFC0000, 0x0005A827,
0x0006ED9E, 0xFFFDEDF1, 0xFFF80001, 0xFFFDEDF1,
0x0006ED9E, 0x0005A827, 0xFFFC0001, 0xFFF845CA
} ;

//table with 0x18 elements gives high tone, 0x30 gives low tone
//seems to be amplitude data
//but 0x182fb0 gives low tone with 0x18 elements
//181770 gives muted sound

int main(void)
{
int i;

*(unsigned long *)0xb04820FC = 0x001820d0; //seems to be required for unmute
for(i=0;i<0x18;i++)
{
*(unsigned long *)(0xb0482100+ (i<<2))=rawData[i];
//printf("%x %08x\n",0xb0482100+ (i<<2),rawData[i]);
}


}

------------------------------------------------------------

and here is one that makes a "color bar" example of three wide bars across the screen--left to right: yellow, green and dark blue against a light grey border and black behind it full screen.

void rect1(unsigned int a0,int a1,int a2,int a3,int a4,int co);


int main(void)
{
rect1(0x800862cc,0x0,0x0,0x2d0,0x1e0,1);
rect1(0x800862cc,0x28,0x28,0x280,0x190,3);
rect1(0x800862cc,0x50,0x50,0xba,0x140,8);
rect1(0x800862cc,0x10a,0x50,0xba,0x140,0xc);
rect1(0x800862cc,0x1c5,0x50,0xba,0x140,0x4);
}

//a1 is left start, a2 top, a3 right, a4 bottom

void rect1(unsigned int a0,int a1,int a2,int a3,int a4,int co)
{
asm("li $2,0x9FC04570\n\t"
"jalr $2\n\t");

}

I included the dummy routine for rect.
jvvh5897 is offline  
Reply Coupon Eligible Converter Box (CECB)

User Tag List

Thread Tools
Show Printable Version Show Printable Version
Email this Page Email this Page


Forum Jump: 

Posting Rules  
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are Off
Pingbacks are Off
Refbacks are Off