Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp
00001 #include "mbed.h" 00002 #include "stm32746g_discovery_lcd.h" 00003 //#include "stm32746g_discovery_ts.h" 00004 #include "GigatronCPU.h" 00005 #include "I2CConfig.h" 00006 #include "WiiClassicControllerReader.h" 00007 00008 00009 Serial serial(USBTX, USBRX); 00010 00011 #define BUTTON_A 0x80 00012 #define BUTTON_B 0x40 00013 #define BUTTON_SELECT 0x20 00014 #define BUTTON_START 0x10 00015 #define BUTTON_UP 0x08 00016 #define BUTTON_DOWN 0x04 00017 #define BUTTON_LEFT 0x02 00018 #define BUTTON_RIGHT 0x01 00019 00020 #define HZ 6250000 00021 00022 GigatronCPU * cpu; 00023 CPUStates cpuState; 00024 VGA vga; 00025 bool vSync = false; 00026 uint32_t cycles = 0; 00027 bool justStarted = true; 00028 int ledStatus = 0; 00029 00030 extern const uint8_t rom_map[]; 00031 00032 /* 00033 void ReadAndReport(WiiClassicControllerReader* const ctrlr, const char* const portname) 00034 { 00035 int bufSize = 0; 00036 char* bufPtr = NULL; 00037 bool debug = true; 00038 00039 ctrlr->RequestRead(); 00040 serial.printf("%s: ", portname); 00041 00042 if (debug) 00043 { 00044 bufSize = ctrlr->getBufferSize(); 00045 bufPtr = ctrlr->getReadBuf(); 00046 if (bufPtr != NULL) 00047 { 00048 for (int i = 0; i < bufSize; i++) 00049 { 00050 serial.printf("%x ", bufPtr[i]); 00051 } 00052 serial.printf("\r\n"); 00053 } 00054 } 00055 serial.printf("\r\nA\tB\tX\tY\tZL\tZR\tDU\tDD\tDL\tDR\tH\r\n"); 00056 serial.printf("%d\t", ctrlr->getButtonA()); 00057 serial.printf("%d\t", ctrlr->getButtonB()); 00058 serial.printf("%d\t", ctrlr->getButtonX()); 00059 serial.printf("%d\t", ctrlr->getButtonY()); 00060 serial.printf("%d\t", ctrlr->getButtonZL()); 00061 serial.printf("%d\t", ctrlr->getButtonZR()); 00062 serial.printf("%d\t", ctrlr->getButtonDU()); 00063 serial.printf("%d\t", ctrlr->getButtonDD()); 00064 serial.printf("%d\t", ctrlr->getButtonDL()); 00065 serial.printf("%d\t", ctrlr->getButtonDR()); 00066 serial.printf("%d\t", ctrlr->getButtonHOME()); 00067 serial.printf("\r\nSEL\tSTART\tLT\tLC\tRT\tRC\tLX\tLY\tRX\tRY\r\n"); 00068 serial.printf("%d\t", ctrlr->getButtonSELECT()); 00069 serial.printf("%d\t", ctrlr->getButtonSTART()); 00070 serial.printf("%d\t", ctrlr->getButtonLT()); 00071 serial.printf("%d\t", ctrlr->getButtonLC()); 00072 serial.printf("%d\t", ctrlr->getButtonRT()); 00073 serial.printf("%d\t", ctrlr->getButtonRC()); 00074 serial.printf("%d\t", ctrlr->getLJoyX()); 00075 serial.printf("%d\t", ctrlr->getLJoyY()); 00076 serial.printf("%d\t", ctrlr->getRJoyX()); 00077 serial.printf("%d\t", ctrlr->getRJoyY()); 00078 serial.printf("\r\n\n\n"); 00079 } 00080 */ 00081 00082 int main() 00083 { 00084 WiiClassicControllerReader ctrlrA(I2CPort_A::SDA, I2CPort_A::SCL); 00085 //I2C test(PB_9, PB_8); 00086 00087 /* 00088 while (true) 00089 { 00090 ReadAndReport(&ctrlrA, "PORT A"); 00091 wait(1); 00092 }*/ 00093 00094 00095 ctrlrA.RequestRead(); 00096 BSP_LCD_Init(); 00097 BSP_LCD_LayerDefaultInit(LTDC_ACTIVE_LAYER, LCD_FB_START_ADDRESS); 00098 //BSP_LCD_LayerRgb565Init(1, 0xC0100000); //0xC007F800 - End of Page 1 00099 BSP_LCD_SelectLayer(LTDC_ACTIVE_LAYER); 00100 //BSP_LCD_SelectLayer(1); 00101 00102 BSP_LCD_SetFont(&Font12); 00103 BSP_LCD_SetBackColor(LCD_COLOR_BLUE); 00104 BSP_LCD_SetTextColor(LCD_COLOR_WHITE); 00105 00106 BSP_LCD_Clear(LCD_COLOR_BLACK); 00107 00108 cpu = new GigatronCPU(); 00109 cpuState.Current = new CPUState; 00110 cpuState.New = new CPUState; 00111 00112 cpu->SetCPURom((uint8_t *) &rom_map); 00113 00114 while(1) { 00115 cpuState = cpu->CpuCycle(cpuState); 00116 cycles++; 00117 00118 vga.ClockCycle(cpuState.New->OUT); 00119 00120 00121 if ((cycles % ((HZ / 100) + 100)) == 0 && !justStarted) 00122 { 00123 int buttons = 0x00; 00124 00125 ctrlrA.ControllerReadCmd(); 00126 //ctrlrA.RequestRead(); 00127 ctrlrA.ControllerDecode(); 00128 00129 if (ctrlrA.getButtonA() == 0) 00130 { 00131 buttons |= BUTTON_A; 00132 //serial.printf("A "); 00133 } 00134 00135 if (ctrlrA.getButtonB() == 0) 00136 { 00137 buttons |= BUTTON_B; 00138 //serial.printf("B "); 00139 } 00140 00141 if (ctrlrA.getButtonDD() == 0) 00142 { 00143 buttons |= BUTTON_DOWN; 00144 //serial.printf("D "); 00145 } 00146 00147 if (ctrlrA.getButtonDU() == 0) 00148 { 00149 buttons |= BUTTON_UP; 00150 //serial.printf("U "); 00151 } 00152 00153 if (ctrlrA.getButtonDL() == 0) 00154 { 00155 buttons |= BUTTON_LEFT; 00156 //serial.printf("U "); 00157 } 00158 00159 if (ctrlrA.getButtonDR() == 0) 00160 { 00161 buttons |= BUTTON_RIGHT; 00162 //serial.printf("U "); 00163 } 00164 00165 if (ctrlrA.getButtonSTART() == 0) 00166 { 00167 buttons |= BUTTON_START; 00168 //serial.printf("U "); 00169 } 00170 00171 if (ctrlrA.getButtonSELECT() == 0) 00172 { 00173 buttons |= BUTTON_SELECT; 00174 //serial.printf("U "); 00175 } 00176 00177 // Active Low 00178 cpuState.New->IN = buttons ^ 0xFF; 00179 } 00180 else if ((cycles % (HZ / 100)) == 0) 00181 { 00182 ctrlrA.ControllerWriteCmd(); 00183 } 00184 /* 00185 else if ((cycles % (HZ / 100)) == 0) 00186 { 00187 if (serial.readable() == 1) 00188 { 00189 char c = serial.getc(); 00190 00191 serial.printf("%c", c); 00192 00193 switch(c) 00194 { 00195 case 13: 00196 c = 10; 00197 break; 00198 } 00199 00200 cpuState.New->IN = c; 00201 } 00202 } 00203 */ 00204 00205 justStarted = false; 00206 } 00207 }
Generated on Tue Jul 12 2022 12:29:05 by
1.7.2