diff --git a/BaS_gcc/include/dma.h b/BaS_gcc/include/dma.h index abdd4d0..2f9f46e 100644 --- a/BaS_gcc/include/dma.h +++ b/BaS_gcc/include/dma.h @@ -10,7 +10,7 @@ #include -extern int spidma_init(void); +extern int dma_init(void); #endif /* _SPIDMA_H_ */ diff --git a/BaS_gcc/sources/BaS.c b/BaS_gcc/sources/BaS.c index ebfda4c..3b31ecf 100644 --- a/BaS_gcc/sources/BaS.c +++ b/BaS_gcc/sources/BaS.c @@ -153,6 +153,33 @@ void nvram_init(void) xprintf("finished\r\n"); } +#define KBD_ACIA_CONTROL ((uint8_t *) 0xfffffc00) +#define MIDI_ACIA_CONTROL ((uint8_t *) 0xfffffc04) +#define MFP_INTR_IN_SERVICE_A ((uint8_t *) 0xfffffa0f) +#define MFP_INTR_IN_SERVICE_B ((uint8_t *) 0xfffffa11) + +void acia_init() +{ + xprintf("init ACIA: "); + /* init ACIA */ + * KBD_ACIA_CONTROL = 3; /* master reset */ + NOP(); + + * MIDI_ACIA_CONTROL = 3; /* master reset */ + NOP(); + + * KBD_ACIA_CONTROL = 0x96; /* clock div = 64, 8N1, RTS low, TX int disable, RX int enable */ + NOP(); + + * MFP_INTR_IN_SERVICE_A = -1; + NOP(); + + * MFP_INTR_IN_SERVICE_B = -1; + NOP(); + + xprintf("finished\r\n"); +} + /* ACP interrupt controller */ #define FPGA_INTR_CONTRL (volatile uint32_t *) 0xf0010000 #define FPGA_INTR_ENABLE (volatile uint8_t *) 0xf0010004 @@ -266,7 +293,7 @@ void BaS(void) /* set Falcon bus control register */ /* sets bit 3 and 6. Both are undefined on an original Falcon? */ - * (volatile uint8_t *) 0xffff8007 = 0x48; /* FIXME: what's that ? */ + * (volatile uint8_t *) 0xffff8007 = 0x48; /* ST RAM */ @@ -281,24 +308,7 @@ void BaS(void) * (uint32_t *) 0x5a4 = 0x1d000000; * (uint32_t *) 0x5a8 = 0x1357bd13; /* ramvalid TOS system variable */ - xprintf("init ACIA: "); - /* init ACIA */ - * (uint8_t *) 0xfffffc00 = 3; - NOP(); - - * (uint8_t *) 0xfffffc04 = 3; - NOP(); - - * (uint8_t *) 0xfffffc00 = 0x96; - NOP(); - - * (uint8_t *) 0xfffffa0f = -1; - NOP(); - - * (uint8_t *) 0xfffffa11 = -1; - NOP(); - - xprintf("finished\r\n"); + acia_init(); /* Test for pseudo-supervisor mode: DIP switch #6 down */ if (DIP_SWITCH & (1 << 7)) { @@ -319,7 +329,7 @@ void BaS(void) xprintf("Call OS. BaS initialization finished...\r\n"); enable_coldfire_interrupts(); - spidma_init(); + dma_init(); ROM_HEADER* os_header = (ROM_HEADER*)TOS; os_header->initial_pc(); diff --git a/BaS_gcc/sources/dma.c b/BaS_gcc/sources/dma.c index d8722f7..9b0af68 100644 --- a/BaS_gcc/sources/dma.c +++ b/BaS_gcc/sources/dma.c @@ -16,6 +16,7 @@ extern char _SYS_SRAM[]; void *dma_memcpy(void *dst, void *src, size_t n) { int ret; + int speed; int32_t start = MCF_SLT_SCNT(0); int32_t end; @@ -65,7 +66,9 @@ void *dma_memcpy(void *dst, void *src, size_t n) end = MCF_SLT_SCNT(0); - xprintf("took %d ms (1 Mbyte)\r\n", (start - end) / 132 / 1000); + speed = n / (start - end) / 132 / 100; + xprintf("took %d ms (%d.%d Mbytes/second)\r\n", + (start - end) / 132 / 1000, speed / 10, speed % 10); #ifdef _NOT_USED_ __asm__ __volatile__("move.w sr,d0\n\t" "stop #0x270\n\t" @@ -75,10 +78,11 @@ void *dma_memcpy(void *dst, void *src, size_t n) return dst; } -int spidma_init(void) +int dma_init(void) { int res; + xprintf("MCD DMA API initialization: "); res = MCD_initDma((dmaRegs *) &MCF_DMA_TASKBAR, SYS_SRAM, MCD_RELOC_TASKS | MCD_COMM_PREFETCH_EN); if (res != MCD_OK) { @@ -88,7 +92,8 @@ int spidma_init(void) xprintf("DMA API initialized. Tasks are at %p\r\n", SYS_SRAM); // test - dma_memcpy((void *) 0x1e000000, (void *) 0xe0700000, 0x100000); + dma_memcpy((void *) 0x1e000000, (void *) 0xe0700000, 0x100000); /* copy one megabyte of flash to RAM */ + xprintf("DMA finished\r\n"); return 1; } diff --git a/BaS_gcc/sources/mmu.c b/BaS_gcc/sources/mmu.c deleted file mode 100644 index 35c3577..0000000 --- a/BaS_gcc/sources/mmu.c +++ /dev/null @@ -1,83 +0,0 @@ -/* - * mmu.c - * - * Created on: 01.08.2013 - * Author: froesm1 - */ - - -#include -#include "mmu.h" - -void mmu_init(void) -{ - uint32_t regval; - /* - * set ASID and shadow register - */ - __asm__ __volatile__("clr.l d0\n\t" - "movec d0,ASID\n\t" - "move.l d0,_rt_asid\n\t"); - /* - * set ACR0 and shadow register - */ - __asm__ __volatile__("move.l #0xc03fc040,d0\n\t" - "movec d0,ACR0\n\t" - "move.l d0,_rt_acr0\n\t"); - - /* - * set ACR1 and shadow register - */ - __asm__ __volatile__("move.l #0x601fc000, d0\n\t" - "movec d0,ACR1\n\t" - "move.l d0,_rt_acr1\n\t"); - - /* - * set ACR2 and shadow register - */ - __asm__ __volatile__("move.l #0xe007c400,d0\n\t" - "movec d0,ACR2\n\t" - "move.l d0,_rt_acr2\n\t"); - - /* - * set ACR3 and shadow register (currently unused) - */ - __asm__ __volatile__("clr.l d0\n\t" - "movec d0,ACR3\n\t" - "move.l d0,_rt_acr3\n\t"); - - /* - * set MMUBAR - */ - __asm__ __volatile__("movel. #__MMUBAR+1,d0\n\t" - "movec d0,MMUBAR\n\t" - "move.l d0,_rt_mmubar\n\t" - "nop\n\t"); - - MCF_MMU_MMUOR = MCF_MMU_MMUOR; /* clear all entries */ - - /* - * 0x00000000 locked - */ - MCF_MMU_MMUTR = 0x0L | STD_MMUTR; - MCF_MMU_MMUDR = 0x0L | COPYBACK_MMUDR | MCF_MMU_MMUDR_LK; - MCF_MMU_MMUOR = MMUORD_D; - MCF_MMU_MMUOR = MMUORD_I; - - /* - * 0x00d00000 locked ID=6 - * video RAM: read write execute normal write true - */ - MCF_MMU_MMUTR = 0x00d00000 | MCF_MMU_MMUTR_ID(SCA_PAGE_ID) | STD_MMUTR; - MCF_MMU_MMUDR = 0x60d00000 | WRITETHROUGH_MMUDR | MCF_MMU_MMUDR_LK; - MCF_MMU_MMUOR = MMUORD_D; - MCF_MMU_MMUOR = 0x00d00000 | STD_MMUTR; - - video_tlb = 0x2000; - video_sbt = 0; -} - - -__attribute__((interrupt)) void mmutr_miss(void) -{ -}