system573_tool/system573_lib/ksys573_nvram.c

357 lines
6.3 KiB
C

#include "ksys573_nvram.h"
#include <psx.h>
unsigned char nvram_read_byte(unsigned int address)
{
unsigned char temp[1];
temp[0]=0x00;
if(address<=NVRAM_MAX){
memcpy(temp,NVRAM+(address*2),1);
}
return temp[0];
}
void nvram_write_byte(unsigned int address,unsigned char data)
{
unsigned char temp[1];
temp[0]=data;
if(address<=NVRAM_MAX){
memcpy(NVRAM+(address*2),temp,1);
}
}
int nvram_read(unsigned char *buf,int offset,int length)
{
int i=0;
int index=0;
if(offset+length<=NVRAM_MAX){
for(i=0;i<length;i++){
memcpy(buf+i,(NVRAM+(offset*2))+index,1);
index=index+2;
}
return 0;
}else{
return 1;
}
}
int nvram_write(unsigned char *buf,int offset,int length)
{
int i=0;
int index=0;
if(offset+length<=NVRAM_MAX){
for(i=0;i<length;i++){
memcpy((NVRAM+(offset*2))+index,buf+i,1);
index=index+2;
}
return 0;
}else{
return 1;
}
}
int nvram_regs_read(unsigned char* buf)
{
int i=0;
int index=0;
int offset = 0x1FF8;
char* nvram_raw;
//nvram_read_bit_is_on();
for(i=0;i<8;i++){
memcpy(buf+i,(NVRAM+(offset*2))+index,1);
index=index+2;
}
//nvram_read_bit_is_off();
return 0;
}
int nvram_regs_write(unsigned char* buf)
{
int i=0;
int index=0;
int offset = 0x1FF8;
unsigned char temp;
temp = buf[6]&0x1F;
buf[6]=temp;
temp=buf[4]&0x77;
buf[4]=temp;
temp=buf[3]&0x3f;
buf[3]=temp;
temp=buf[2]&0x7f;
buf[2]=temp;
nvram_write_bit_is_on();
for(i=0;i<8;i++){
memcpy((NVRAM+(offset*2))+index,buf+i,1);
index=index+2;
}
nvram_write_bit_is_off();
return 0;
}
int nvram_set_year(unsigned char ch){
unsigned char* buf;
buf=(unsigned char*)malloc(8);
nvram_regs_read(buf);
buf[7]=ch;
nvram_regs_write(buf);
free(buf);
return 0;
}
int nvram_get_year(){
unsigned char* buf;
buf=(unsigned char*)malloc(8);
nvram_regs_read(buf);
int ret= buf[7];
free(buf);
return ret;
}
int nvram_set_month(unsigned char ch){
unsigned char* buf;
buf=(unsigned char*)malloc(8);
nvram_regs_read(buf);
buf[6]=ch;
nvram_regs_write(buf);
free(buf);
return 0;
}
int nvram_get_month(){
unsigned char* buf;
buf=(unsigned char*)malloc(8);
nvram_regs_read(buf);
int ret= buf[6];
free(buf);
return ret;
}
int nvram_set_date(unsigned char ch){
unsigned char* buf;
buf=(unsigned char*)malloc(8);
unsigned char tmp;
tmp=buf[5]&0xC0;
buf[5]=tmp|ch;
free(buf);
return 0;
}
int nvram_get_date(){
unsigned char* buf;
buf=(unsigned char*)malloc(8);
nvram_regs_read(buf);
int ret= buf[5]&0x3f;
free(buf);
return ret;
}
int nvram_get_battery_is_row(){
unsigned char* buf;
buf=(unsigned char*)malloc(8);
nvram_regs_read(buf);
int ret=buf[5]&0x40;
free(buf);
return ret;
}
int nvram_set_use_battery_check(unsigned char ch){
unsigned char* buf;
buf=(unsigned char*)malloc(8);
nvram_regs_read(buf);
unsigned char tmp;
tmp=buf[5]&0x7F;
buf[5]=tmp|ch;
nvram_regs_write(buf);
free(buf);
return 0;
}
int nvram_get_use_battery_check(){
unsigned char* buf;
buf=(unsigned char*)malloc(8);
nvram_regs_read(buf);
int ret=buf[5]&0x80;
free(buf);
return ret;
}
int nvram_set_day_of_the_week(unsigned char ch){
unsigned char* buf;
buf=(unsigned char*)malloc(8);
nvram_regs_read(buf);
unsigned char tmp;
tmp=buf[4]&0xF8;
buf[4]=tmp|ch;
nvram_regs_write(buf);
free(buf);
return 0;
}
int nvram_get_day_of_the_week(){
unsigned char* buf;
buf=(unsigned char*)malloc(8);
nvram_regs_read(buf);
int ret=buf[4]&0x07;
free(buf);
return ret;
}
int nvram_set_hour(unsigned char ch){
unsigned char* buf;
buf=(unsigned char*)malloc(8);
nvram_regs_read(buf);
buf[3]=ch;
nvram_regs_write(buf);
free(buf);
return 0;
}
int nvram_get_hour(){
unsigned char* buf;
buf=(unsigned char*)malloc(8);
nvram_regs_read(buf);
int ret=buf[3];
free(buf);
return ret;
}
int nvram_set_minites(unsigned char ch){
unsigned char* buf;
buf=(unsigned char*)malloc(8);
nvram_regs_read(buf);
buf[2]=ch;
nvram_regs_write(buf);
free(buf);
return 0;
}
int nvram_get_minites(){
unsigned char* buf;
buf=(unsigned char*)malloc(8);
nvram_regs_read(buf);
int ret=buf[2];
free(buf);
return ret;
}
int nvram_set_seconds(unsigned char ch){
unsigned char* buf;
buf=(unsigned char*)malloc(8);
nvram_regs_read(buf);
unsigned char tmp;
tmp=buf[1]&0x80;
buf[1]=tmp|ch;
nvram_regs_write(buf);
free(buf);
return 0;
}
int nvram_get_seconds(){
unsigned char* buf;
buf=(unsigned char*)malloc(8);
nvram_regs_read(buf);
int ret=buf[1]&0x7f;
free(buf);
return ret;
}
int nvram_set_stop_bit(unsigned char ch){
unsigned char* buf;
buf=(unsigned char*)malloc(8);
nvram_regs_read(buf);
unsigned char tmp;
tmp=buf[1]&0x7f;
buf[1]=tmp|ch;
nvram_regs_write(buf);
free(buf);
return 0;
}
int nvram_get_stop_bit(){
unsigned char* buf;
buf=(unsigned char*)malloc(8);
nvram_regs_read(buf);
int ret=buf[1]&0x80;
free(buf);
return ret;
}
int nvram_read_bit_is_on()
{
int offset = 0x1FF8;
unsigned char buf[1];
unsigned char temp;
memcpy(buf,(NVRAM+(offset*2)),1);
temp=buf[0]&0xBF;
buf[0]=temp|0x40;
memcpy(NVRAM+(offset*2),0x40,1);
return 0;
}
int nvram_read_bit_is_off()
{
int offset = 0x1FF8;
unsigned char buf[1];
unsigned char temp;
memcpy(buf,(NVRAM+(offset*2)),1);
temp=buf[0]&0xBF;
buf[0]=temp|0x00;
memcpy(NVRAM+(offset*2),0x40,1);
return 0;
}
int nvram_write_bit_is_on()
{
int offset = 0x1FF8;
unsigned char buf[1];
unsigned char temp;
memcpy(buf,(NVRAM+(offset*2)),1);
temp=buf[0]&0x7f;
buf[0]=temp|0x80;
memcpy(NVRAM+(offset*2),0x40,1);
return 0;
}
int nvram_write_bit_is_off()
{
int offset = 0x1FF8;
unsigned char buf[1];
unsigned char temp;
memcpy(buf,(NVRAM+(offset*2)),1);
temp=buf[0]&0x7f;
buf[0]=temp|0x00;
memcpy(NVRAM+(offset*2),0x40,1);
return 0;
}
char* get_day_of_the_week_char(){
switch(nvram_get_day_of_the_week())
{
case 1:
return "Sun.";
break;
case 2:
return "Mon.";
break;
case 3:
return "Tue.";
break;
case 4:
return "Wed.";
break;
case 5:
return "Thu.";
break;
case 6:
return "Fri.";
break;
case 7:
return "Sat.";
break;
default:
return "NULL";
break;
}
}
char* get_day_of_the_week_from_int(int in){
switch(in)
{
case 1:
return "Sun.";
break;
case 2:
return "Mon.";
break;
case 3:
return "Tue.";
break;
case 4:
return "Wed.";
break;
case 5:
return "Thu.";
break;
case 6:
return "Fri";
break;
case 7:
return "Sat.";
break;
default:
return "NULL";
break;
}
}