-/*
- int fd;
- ide0 = ide_allocate("cf");
- fd = open("hd0.img", O_RDWR);
- if (fd == -1){
- printf("HDD Image hd0.image failed open\n");
- }else{
- ide_attach(ide0, 0, fd);
- ide_reset_begin(ide0);
- printf("HDD Image hd0.image attached\n");
- }
-*/
- signal(SIGINT, sigint_handler);
- setup_io();
-
- //Enable 200MHz CLK output on GPIO4, adjust divider and pll source depending on pi model
- printf("Enable GPCLK0 on GPIO4\n");
-
- *(gpclk+ (CLK_GP0_CTL/4)) = CLK_PASSWD | (1 << 5);
- usleep(10);
- while ( (*(gpclk+(CLK_GP0_CTL/4))) & (1 << 7));
- usleep(100);
- *(gpclk+(CLK_GP0_DIV/4)) = CLK_PASSWD | (6 << 12); //divider , 6=200MHz on pi3
- usleep(10);
- *(gpclk+(CLK_GP0_CTL/4)) = CLK_PASSWD | 5 | (1 << 4); //pll? 6=plld, 5=pllc
- usleep(10);
- while (((*(gpclk+(CLK_GP0_CTL/4))) & (1 << 7))== 0);
- usleep(100);
-
- SET_GPIO_ALT(4,0); //gpclk0
-
- //set SA to output
- INP_GPIO(2);
- OUT_GPIO(2);
- INP_GPIO(3);
- OUT_GPIO(3);
- INP_GPIO(5);
- OUT_GPIO(5);
-
- //set gpio0 (aux0) and gpio1 (aux1) to input
- INP_GPIO(0);
- INP_GPIO(1);
-
- // Set GPIO pins 6,7 and 8-23 to output
- for (g=6; g<=23; g++)
- {
- INP_GPIO(g);
- OUT_GPIO(g);
- }
- printf ("Precalculate GPIO8-23 aus Output\n");
- gpfsel0_o =*(gpio); //store gpio ddr
- printf ("gpfsel0: %#x\n", gpfsel0_o);
- gpfsel1_o =*(gpio+1); //store gpio ddr
- printf ("gpfsel1: %#x\n", gpfsel1_o);
- gpfsel2_o =*(gpio+2); //store gpio ddr
- printf ("gpfsel2: %#x\n", gpfsel2_o);
-
- // Set GPIO pins 8-23 to input
- for (g=8; g<=23; g++)
- {
- INP_GPIO(g);
- }
- printf ("Precalculate GPIO8-23 as Input\n");
- gpfsel0 =*(gpio); //store gpio ddr
- printf ("gpfsel0: %#x\n", gpfsel0);
- gpfsel1 =*(gpio+1); //store gpio ddr
- printf ("gpfsel1: %#x\n", gpfsel1);
- gpfsel2 =*(gpio+2); //store gpio ddr
- printf ("gpfsel2: %#x\n", gpfsel2);
-
- GPIO_CLR = 1<<2;
- GPIO_CLR = 1<<3;
- GPIO_SET = 1<<5;
-
- GPIO_SET = 1<<6;
- GPIO_SET = 1<<7;
-
- //reset cpld statemachine first
-
- write_reg(0x01);
- usleep(100);
- usleep(1500);
- write_reg(0x00);
- usleep(100);
-
- maprom = 0;
- FILE * fp;
- fp = fopen("kick.rom", "rb");
- if (!fp)
- {
- printf("kick.rom cannot be opened\n");
- } else {
- printf("kick.rom found, using that instead of motherboard rom\n");
- while (1)
- {
- unsigned int reads = fread(&g_kick, sizeof(g_kick), 1, fp);
- if (reads == 0){
- printf("failed loading kick.rom\n");
- }else{
- printf("loaded kick.rom\n");
- maprom = 1;
- }
- break;
- }
- }
-
- ovl=1;
- m68k_write_memory_8(0xbfe201,0x0001); //AMIGA OVL
- m68k_write_memory_8(0xbfe001,0x0001); //AMIGA OVL high (ROM@0x0)
-
-
- usleep(1500);
-
- m68k_init();
- m68k_set_cpu_type(M68K_CPU_TYPE_68EC030);
- m68k_pulse_reset();
- srdata2_old = read_reg();
- printf("STATUS: %d\n", srdata2_old);
- toggle = 0;
-
-/*
- pthread_t id;
- int err;
-
- //err = pthread_create(&id, NULL, &iplThread, NULL);
- if (err != 0)
- printf("\ncan't create IPL thread :[%s]", strerror(err));
- else
- printf("\n IPL Thread created successfully\n");
-*/
- m68k_pulse_reset();
- while(42) {
-
- m68k_execute(150);
- //usleep(1);
-
- //printf("IRQ:0x%06x\n",CheckIrq());
-/*
- if (CheckIrq() == 1)
- m68k_set_irq(2);
- else
- m68k_set_irq(0);
-*/
-
- if (GET_GPIO(1) == 0 || CheckIrq() == 1){
- srdata = read_reg();
- // if (CheckIrq() == 1) srdata |= (1 << 14);
- if (srdata != srdata2_old){
- srdata2 = ((srdata >> 13)&0xff);
- //printf("STATUS: %d\n", srdata2);
- srdata2_old = srdata;
- m68k_set_irq(srdata2);
- toggle = 1;
- }
- } else {
-
- if (toggle != 0){
- srdata = read_reg();
- srdata2 = ((srdata >> 13)&0xff);
- srdata2_old = srdata;
- m68k_set_irq(srdata2);
- //printf("STATUS: 0\n");
- toggle = 0;
- }
- }
-
- }
-
- return 0;
-}