reformatted assembler code

This commit is contained in:
Markus Fröschle
2014-05-11 14:08:27 +00:00
parent e38e4fc976
commit 0e50aa7371
3 changed files with 512 additions and 583 deletions

View File

@@ -67,4 +67,5 @@ end
tr tr
ib ib
add-symbol-file ../emutos/emutos2.img 0xe00000
load firebee/ram.elf load firebee/ram.elf

View File

@@ -126,8 +126,9 @@
// Atari register equates (provided by FPGA) // Atari register equates (provided by FPGA)
.equ vbasehi, 0xffff8201 .equ vbasehi, 0xffff8201
//mmu ---------------------------------------------------
/* Register read/write macros */ /* MMU register read/write macros */
#define MCF_MMU_MMUCR __MMUBAR #define MCF_MMU_MMUCR __MMUBAR
#define MCF_MMU_MMUOR __MMUBAR+0x04 #define MCF_MMU_MMUOR __MMUBAR+0x04
#define MCF_MMU_MMUSR __MMUBAR+0x08 #define MCF_MMU_MMUSR __MMUBAR+0x08
@@ -308,6 +309,8 @@ init_vec_loop:
move.l (sp)+,a2 // Restore registers move.l (sp)+,a2 // Restore registers
rts rts
/* /*
* exception vector routines * exception vector routines
*/ */
@@ -524,7 +527,7 @@ irq6_os: // call native OS irq6 handler
move.w #0x2600,sr // set interrupt mask move.w #0x2600,sr // set interrupt mask
rts rts
#ifdef _NOT_USED_ #ifdef _NOT_USED_ /* functionality moved to _irq6_interrupt_handler() (C) */
subq.l #8,a7 subq.l #8,a7
movem.l d0/a5,(a7) // save registers movem.l d0/a5,(a7) // save registers
@@ -585,46 +588,6 @@ irq6_sca_pn1c:
move.l d3,a1 move.l d3,a1
move.l #0x10000,d4 // one whole page (1 MB) move.l #0x10000,d4 // one whole page (1 MB)
#define _DO_CPU_COPY
#ifndef _DO_CPU_COPY
// experiment: do video page copy using Coldfire DMA
lea -15 * 4(sp),sp
movem.l d0-d1/a0-a1,(sp) // save gcc scratch registers
clr.l -(sp) // no special functions
move.l #MCD_SINGLE_DMA|MCD_TT_FLAGS_CW|MCD_TT_FLAGS_RL|MCD_TT_FLAGS_SP,-(sp)
mov3q #7,-(sp) // highest DMA priority
move.l #DMA_ALWAYS,-(sp) // do memory to memory DMA
move.l #1,-(sp) // copy 4 bytes at a time
move.l #0x100000,-(sp) // copy 1 Megabyte
move.l #4,-(sp) // destination increment
move.l a1,-(sp) // destination adress
move.l #4,-(sp) // source increment
move.l a0,-(sp) // source adress
move.l #1,-(sp) // channel 1
jsr _MCD_startDma
movem.l (sp),d0-d1/a0-a1 // restore gcc scratch registers
lea 15 * 4(sp),sp // adjust stack
wait_dma_finished:
clr.l -(sp)
jsr _MCD_dmaStatus
addq.l #4,sp
tst.l d0
cmp.l #6,d0
bne wait_dma_finished
#else
irq6_vcd0_loop:
move.l (a0)+,(a1)+ // page copy
move.l (a0)+,(a1)+
move.l (a0)+,(a1)+
move.l (a0)+,(a1)+
subq.l #1,d4
bne irq6_vcd0_loop
#endif /* _DO_CPU_COPY */
irq6_sca_pn: irq6_sca_pn:
add.l #0x00100000,d3 // next add.l #0x00100000,d3 // next
cmp.l #0x00d00000,d3 // ende? cmp.l #0x00d00000,d3 // ende?
@@ -744,6 +707,7 @@ acsi_dma_end:
rts rts
#endif /* _NOT_USED_ */ #endif /* _NOT_USED_ */
/* /*
* irq 7 = pseudo bus error * irq 7 = pseudo bus error
*/ */
@@ -800,7 +764,7 @@ handler_gpt0:
blt video_chg_end // yes, do nothing blt video_chg_end // yes, do nothing
cmp.w #0xd0,d0 // lower than 0xd00000? - normal Falcon video area, mapped cmp.w #0xd0,d0 // lower than 0xd00000? - normal Falcon video area, mapped
// to 60d00000 (FPGA video memory) // to 60d00000 (FPGA video memory)
blt sca_other // blt sca_other
lea MCF_SLT0_SCNT,a0 lea MCF_SLT0_SCNT,a0
move.l (a0),_video_sbt // save time move.l (a0),_video_sbt // save time
@@ -834,40 +798,6 @@ video_copy_data:
add.l #0x60000000,a1 add.l #0x60000000,a1
move.l #0x10000,d4 // whole page move.l #0x10000,d4 // whole page
#define _DO_CPU_COPY
#ifndef _DO_CPU_COPY
// experiment: do video page copy using Coldfire DMA
lea -4 * 4(sp),sp
movem.l d0-d1/a0-a1,(sp) // save gcc scratch registers
clr.l -(sp) // no special functions
move.l #MCD_SINGLE_DMA|MCD_TT_FLAGS_CW|MCD_TT_FLAGS_RL|MCD_TT_FLAGS_SP,-(sp)
mov3q #7,-(sp) // highest DMA priority
move.l #DMA_ALWAYS,-(sp) // do memory to memory DMA
move.l #1,-(sp) // copy 4 bytes at a time
move.l #0x100000,-(sp) // copy 1 Megabyte
move.l #4,-(sp) // destination increment
move.l a1,-(sp) // destination adress
move.l #4,-(sp) // source increment
move.l a0,-(sp) // source adress
move.l #1,-(sp) // channel 1
jsr _MCD_startDma
.wait_dma_finished:
clr.l -(sp)
jsr _MCD_dmaStatus
addq.l #4,sp
tst.l d0
cmp.l #6,d0
bne .wait_dma_finished
movem.l (sp),d0-d1/a0-a1 // restore gcc scratch registers
lea 4 * 4(sp),sp // adjust stack
#else
video_copy_data_loop: video_copy_data_loop:
move.l (a0)+,(a1)+ // copy video page contents to real screen move.l (a0)+,(a1)+ // copy video page contents to real screen
move.l (a0)+,(a1)+ move.l (a0)+,(a1)+
@@ -875,7 +805,6 @@ video_copy_data_loop:
move.l (a0)+,(a1)+ move.l (a0)+,(a1)+
subq.l #1,d4 subq.l #1,d4
bne video_copy_data_loop bne video_copy_data_loop
#endif
// eintrag suchen // eintrag suchen
move.l d0,MCF_MMU_MMUAR // adress move.l d0,MCF_MMU_MMUAR // adress
@@ -944,5 +873,3 @@ _lowlevel_isr_handler:
movem.l (sp),d0-d1/a0-a1 // restore registers movem.l (sp),d0-d1/a0-a1 // restore registers
unlk a6 // cleanup stack unlk a6 // cleanup stack
rte rte
// vim: set syntax=asm68k :

View File

@@ -335,13 +335,14 @@ void video_addr_timeout(void)
video_sbt = 0; video_sbt = 0;
} }
static uint32_t blinker = 0;
/* /*
* blink the Firebee's LED to show we are still alive * blink the Firebee's LED to show we are still alive
*/ */
void blink_led(void) void blink_led(void)
{ {
static uint16_t blinker = 0;
if ((blinker++ & 0x80) > 0) if ((blinker++ & 0x80) > 0)
{ {
MCF_GPIO_PODR_FEC1L |= (1 << 4); /* LED off */ MCF_GPIO_PODR_FEC1L |= (1 << 4); /* LED off */
@@ -380,7 +381,7 @@ bool irq6_interrupt_handler(uint32_t sf1, uint32_t sf2)
{ {
bool handled = false; bool handled = false;
MCF_EPORT_EPFR &= (1 << 6); /* clear int6 from edge port */ MCF_EPORT_EPFR |= (1 << 6); /* clear int6 from edge port */
if (video_sbt != 0 && (video_sbt - 0x70000000) > MCF_SLT0_SCNT) if (video_sbt != 0 && (video_sbt - 0x70000000) > MCF_SLT0_SCNT)
{ {