|
Nugget
Bare-metal libraries and examples for the original PlayStation
|
#include "common/hardware/hwregs.h"#include "common/hardware/irq.h"#include "common/hardware/sio.h"#include "common/syscalls/syscalls.h"#include "exotic/cester.h"
Macros | |
| #define | PCSX_TESTS 0 |
| #define | CESTER_NO_SIGNAL |
| #define | CESTER_NO_TIME |
| #define | EXIT_SUCCESS 0 |
| #define | EXIT_FAILURE 1 |
| #define | FRAME 140 |
Functions | |
| CESTER_BODY (static int s_interruptsWereEnabled;static int s_tap;#define FRAME static uint8_t s_reply;static uint8_t s_ack;static void settle(int n) { for(;n > 0;n--) __asm__ volatile("");} static uint8_t transceive(uint8_t out, uint8_t *ack) { int i;uint8_t in;SIOS[0].ctrl|=SIO_CTRL_ERRRES;IREG=~IRQ_CONTROLLER;SIOS[0].fifo=out;while(!(SIOS[0].stat &SIO_STAT_RXRDY)) __asm__ volatile("");in=SIOS[0].fifo;*ack=0;for(i=0;i< 4000;i++) { if(IREG &IRQ_CONTROLLER) { *ack=1;break;} } return in;} static void readSector0(uint8_t addr) { int i;SIOS[0].ctrl=SIO_CTRL_DTR;SIOS[0].baudRate=0x88;SIOS[0].mode=0xd;while(SIOS[0].stat &SIO_STAT_RXRDY)(void) SIOS[0].fifo;SIOS[0].ctrl|=SIO_CTRL_TXEN|SIO_CTRL_ACKIRQEN;settle(100);for(i=0;i< FRAME;i++) { s_reply[i]=transceive(i==0 ? addr :i==1 ? 0x52 :0x00, &s_ack[i]);if(!s_ack[i]) break;} for(i++;i< FRAME;i++) s_reply[i]=s_ack[i]=0;SIOS[0].ctrl=0;settle(100);ramsyscall_printf("%02x 52 sector 0:", addr);for(i=0;i< 12;i++) ramsyscall_printf(" %02x%s", s_reply[i], s_ack[i] ? "" :"!");ramsyscall_printf(" .. %02x %02x%s\n", s_reply[138], s_reply[139], s_ack[138] ? "" :"!");} static int checkFrame(void) { uint8_t sum=0;int i;if(s_reply[1] !=0x08||s_reply[2] !=0x5a||s_reply[3] !=0x5d) return 1;if(s_reply[6] !=0x5c||s_reply[7] !=0x5d||s_reply[8] !=0x00||s_reply[9] !=0x00) return 2;if(s_reply[10] !='M'||s_reply[11] !='C'||s_reply[137] !=0x0e) return 3;for(i=8;i< 138;i++) sum ^=s_reply[i];if(s_reply[138] !=sum) return 4;if(s_reply[139] !=0x47) return 5;for(i=0;i< 139;i++) { if(!s_ack[i]) return 6;} return 0;}[FRAME][FRAME]) | |
| cester_assert_uint_eq (s_ack[0], 0) | |
| CESTER_TEST (tapcardSlotCEmpty, CESTER_TEST(tapcard_tests, readSector0(0x83);cester_assert_uint_eq(s_reply[0], 0xff);cester_assert_uint_eq(s_ack[0], 0);) | |
Variables | |
| else | |
| #define CESTER_NO_SIGNAL |
| #define CESTER_NO_TIME |
| #define EXIT_FAILURE 1 |
| #define EXIT_SUCCESS 0 |
| #define FRAME 140 |
| #define PCSX_TESTS 0 |
| cester_assert_uint_eq | ( | s_ack | [0], |
| 0 | |||
| ) |
| CESTER_BODY | ( | static int s_interruptsWereEnabled;static int s_tap;#define FRAME static uint8_t s_reply;static uint8_t s_ack;static void settle(int n) { for(;n > 0;n--) __asm__ volatile("");} static uint8_t transceive(uint8_t out, uint8_t *ack) { int i;uint8_t in;SIOS[0].ctrl|=SIO_CTRL_ERRRES;IREG=~IRQ_CONTROLLER;SIOS[0].fifo=out;while(!(SIOS[0].stat &SIO_STAT_RXRDY)) __asm__ volatile("");in=SIOS[0].fifo; *ack=0;for(i=0;i< 4000;i++) { if(IREG &IRQ_CONTROLLER) { *ack=1;break;} } return in;} static void readSector0(uint8_t addr) { int i;SIOS[0].ctrl=SIO_CTRL_DTR;SIOS[0].baudRate=0x88;SIOS[0].mode=0xd;while(SIOS[0].stat &SIO_STAT_RXRDY)(void) SIOS[0].fifo;SIOS[0].ctrl|=SIO_CTRL_TXEN|SIO_CTRL_ACKIRQEN;settle(100);for(i=0;i< FRAME;i++) { s_reply[i]=transceive(i==0 ? addr :i==1 ? 0x52 :0x00, &s_ack[i]);if(!s_ack[i]) break;} for(i++;i< FRAME;i++) s_reply[i]=s_ack[i]=0;SIOS[0].ctrl=0;settle(100);ramsyscall_printf("%02x 52 sector 0:", addr);for(i=0;i< 12;i++) ramsyscall_printf(" %02x%s", s_reply[i], s_ack[i] ? "" :"!");ramsyscall_printf(" .. %02x %02x%s\n", s_reply[138], s_reply[139], s_ack[138] ? "" :"!");} static int checkFrame(void) { uint8_t sum=0;int i;if(s_reply[1] !=0x08||s_reply[2] !=0x5a||s_reply[3] !=0x5d) return 1;if(s_reply[6] !=0x5c||s_reply[7] !=0x5d||s_reply[8] !=0x00||s_reply[9] !=0x00) return 2;if(s_reply[10] !='M'||s_reply[11] !='C'||s_reply[137] !=0x0e) return 3;for(i=8;i< 138;i++) sum ^=s_reply[i];if(s_reply[138] !=sum) return 4;if(s_reply[139] !=0x47) return 5;for(i=0;i< 139;i++) { if(!s_ack[i]) return 6;} return 0;} | [FRAME][FRAME] | ) |
| CESTER_TEST | ( | tapcardSlotCEmpty | , |
| CESTER_TEST( | tapcard_tests, | ||
| readSector0(0x83);cester_assert_uint_eq(s_reply[0], 0xff);cester_assert_uint_eq(s_ack[0], 0); | |||
| ) |
| else |