if ((address & GAYLEMASK) == CLOCKBASE) {
if ((address & CLOCKMASK) >= 0x8000) {
if (cdtv_mode) {
+ //printf("[CDTV] BYTE write to SRAM @%.8X (%.8X): %.2X\n", (address & CLOCKMASK) - 0x8000, address, value);
cdtv_sram[(address & CLOCKMASK) - 0x8000] = value;
}
return;
}
+ //printf("Byte write to RTC.\n");
put_rtc_byte(address, value, rtc_type);
return;
}
if ((address & GAYLEMASK) == CLOCKBASE) {
if ((address & CLOCKMASK) >= 0x8000) {
if (cdtv_mode) {
+ //printf("[CDTV] WORD write to SRAM @%.8X (%.8X): %.4X\n", (address & CLOCKMASK) - 0x8000, address, htobe16(value));
((short *) ((size_t)(cdtv_sram + (address & CLOCKMASK) - 0x8000)))[0] = htobe16(value);
}
return;
}
- printf("Word write to RTC.\n");
- put_rtc_byte(address, (value & 0xFF), rtc_type);
- put_rtc_byte(address + 1, (value >> 8), rtc_type);
+ //printf("Word write to RTC.\n");
+ put_rtc_byte(address + 1, (value & 0xFF), rtc_type);
+ put_rtc_byte(address, (value >> 8), rtc_type);
return;
}
if ((address & GAYLEMASK) == CLOCKBASE) {
if ((address & CLOCKMASK) >= 0x8000) {
if (cdtv_mode) {
+ //printf("[CDTV] LONGWORD write to SRAM @%.8X (%.8X): %.8X\n", (address & CLOCKMASK) - 0x8000, address, htobe32(value));
((int *) (size_t)(cdtv_sram + (address & CLOCKMASK) - 0x8000))[0] = htobe32(value);
}
return;
}
- printf("Longword write to RTC.\n");
- put_rtc_byte(address, (value & 0xFF), rtc_type);
- put_rtc_byte(address + 1, ((value & 0x0000FF00) >> 8), rtc_type);
- put_rtc_byte(address + 2, ((value & 0x00FF0000) >> 16), rtc_type);
- put_rtc_byte(address + 3, (value >> 24), rtc_type);
+ //printf("Longword write to RTC.\n");
+ put_rtc_byte(address + 3, (value & 0xFF), rtc_type);
+ put_rtc_byte(address + 2, ((value & 0x0000FF00) >> 8), rtc_type);
+ put_rtc_byte(address + 1, ((value & 0x00FF0000) >> 16), rtc_type);
+ put_rtc_byte(address, (value >> 24), rtc_type);
return;
}
if ((address & GAYLEMASK) == CLOCKBASE) {
if ((address & CLOCKMASK) >= 0x8000) {
if (cdtv_mode) {
+ //printf("[CDTV] BYTE read from SRAM @%.8X (%.8X): %.2X\n", (address & CLOCKMASK) - 0x8000, address, cdtv_sram[(address & CLOCKMASK) - 0x8000]);
return cdtv_sram[(address & CLOCKMASK) - 0x8000];
}
return 0;
}
+ //printf("Byte read from RTC.\n");
return get_rtc_byte(address, rtc_type);
}
if ((address & GAYLEMASK) == CLOCKBASE) {
if ((address & CLOCKMASK) >= 0x8000) {
if (cdtv_mode) {
-
+ //printf("[CDTV] WORD read from SRAM @%.8X (%.8X): %.4X\n", (address & CLOCKMASK) - 0x8000, address, be16toh( (( unsigned short *) (size_t)(cdtv_sram + (address & CLOCKMASK) - 0x8000))[0]));
return be16toh( (( unsigned short *) (size_t)(cdtv_sram + (address & CLOCKMASK) - 0x8000))[0]);
}
return 0;
}
+ //printf("Word read from RTC.\n");
return ((get_rtc_byte(address, rtc_type) << 8) | (get_rtc_byte(address + 1, rtc_type)));
}
if ((address & GAYLEMASK) == CLOCKBASE) {
if ((address & CLOCKMASK) >= 0x8000) {
if (cdtv_mode) {
- return be32toh( (( unsigned short *) (size_t)(cdtv_sram + (address & CLOCKMASK) - 0x8000))[0]);
+ //printf("[CDTV] LONGWORD read from SRAM @%.8X (%.8X): %.8X\n", (address & CLOCKMASK) - 0x8000, address, be32toh( (( unsigned short *) (size_t)(cdtv_sram + (address & CLOCKMASK) - 0x8000))[0]));
+ return be32toh( (( unsigned int *) (size_t)(cdtv_sram + (address & CLOCKMASK) - 0x8000))[0]);
}
return 0;
}
+ //printf("Longword read from RTC.\n");
return ((get_rtc_byte(address, rtc_type) << 24) | (get_rtc_byte(address + 1, rtc_type) << 16) | (get_rtc_byte(address + 2, rtc_type) << 8) | (get_rtc_byte(address + 3, rtc_type)));
}
unsigned char ricoh_memory[0x0F];
unsigned char ricoh_alarm[0x0F];
-void put_rtc_byte(uint32_t address_, uint8_t value, uint8_t rtc_type) {
+void put_rtc_byte(uint32_t address_, uint8_t value_, uint8_t rtc_type) {
uint32_t address = address_ & 0x3F;
+ uint8_t value = (value_ & 0x0F);
+
address >>= 2;
+
+ //printf("Wrote byte %.2X.\n", address);
+
if (rtc_type == RTC_TYPE_MSM) {
switch(address) {
case 0x0D:
uint8_t get_rtc_byte(uint32_t address_, uint8_t rtc_type) {
uint32_t address = address_ & 0x3F;
+
+ if ((address & 3) == 2 || (address & 3) == 0) {
+ //printf("Garbage byte read.\n");
+ return 0;
+ }
+
address >>= 2;
time_t t;
time(&t);
}
}
+ //printf("Read byte %.2X.\n", address);
+
switch (address) {
case 0x00: // Seconds low?
return rtc_time->tm_sec % 10;