Some comments...
move.l dosbase,a0
move.l -30(a0),oldcop ;I think it was -30
That's wrong. DOSBase - 30 is ptr to jump to _LVOOpen routine, not old copper list. You only find JMP (abs).l instruction there on 2.x+ or 'moveq #x,d0 + bra.w' with 1.x.
This means the code is unable to restore system copper list at exit.
loadsys:
move olddma,$dff096
You need to disable all DMA before restoring:
loadsys:
move.w #$7fff,$dff096
move.w olddma,$dff096
Also, the code lacks disabling of interrupts (INTENA(R)) before peeking & poking DMACON(R).
In fact, you probably want to take a look at proper minimal startup code
hwstartup.asm.