******************************************************************************* * RUN500 Macro. Written by Readysoft. * Copyright 1993. All rights reserved. 1993.03.10.-1993.09.12. * v1.0. ******************************************************************************* ******************************************************************************* * RUN Label ******************************************************************************* RUN MACRO ;------------------------------------------------------------------------------ ; Go NoOp ;------------------------------------------------------------------------------ run.Go movem.l d0-a6,-(a7) move.w $dff002,run.DMACON or.w #$8000,run.DMACON move.w $dff01c,run.INTENA or.w #$8000,run.INTENA move.l 4,a6 jsr -132(a6) Forbid jsr -120(a6) Disable bsr run.SaveChip tst.l d0 beq.s .NoMem move.w #$7fff,$dff096 move.w #$7fff,$dff09a movem.l (a7)+,d0-a6 jsr \1 movem.l d0-a6,-(a7) move.w #$7fff,$dff096 move.w #$7fff,$dff09a bsr run.LoadChip .NoMem move.l 4,a6 jsr -126(a6) Enable jsr -138(a6) Permit move.l (a6),a0 move.l (a0),a0 move.l 38(a0),$dff080 restore CopperList move.w run.DMACON,$dff096 move.w run.INTENA,$dff09a movem.l (a7)+,d0-a6 rts ;------------------------------------------------------------------------------ ; SaveChip NoOp --> Error ;------------------------------------------------------------------------------ run.SaveChip movem.l d1/a0-a1/a6,-(a7) move.l 4,a6 ExecBase move.l 322(a6),a0 MemList .Header move.w 14(a0),d0 Attr btst #1,d0 ChipMem ? bne.s .Found move.l (a0),a0 Succ MemHeader bra.s .Header .Found move.l 16(a0),a0 FirstChunk .Chunk move.l (a0),d0 NextChunk exists ? beq.s .NoMore move.l d0,a0 bra.s .Chunk .NoMore addq.l #8,a0 Highest used memory move.l a0,d0 bytesize move.l d0,run.ByteSize moveq #4,d1 requirements FastMem jsr -198(a6) AllocMem tst.l d0 beq.s .Error move.l d0,run.MemoryBlock lea 0,a0 move.l d0,a1 move.l run.ByteSize,d0 .Save cmp.l a0,d0 store ChipMem beq.s .Exit move.l (a0)+,(a1)+ bra.s .Save .Exit movem.l (a7)+,d1/a0-a1/a6 rts .Error moveq #0,d0 bra.s .Exit ;------------------------------------------------------------------------------ ; LoadChip NoOp ;------------------------------------------------------------------------------ run.LoadChip movem.l d0/a0-a1/a6,-(a7) lea 0,a0 move.l run.MemoryBlock,a1 move.l run.ByteSize,d0 .Load cmp.l a0,d0 restore ChipMem beq.s .Loaded move.l (a1)+,(a0)+ bra.s .Load .Loaded move.l 4,a6 move.l run.ByteSize,d0 move.l run.MemoryBlock,a1 jsr -210(a6) FreeMem movem.l (a7)+,d0/a0-a1/a6 rts ******************************************************************************* * Data Area ******************************************************************************* run.ByteSize DC.L 0 run.MemoryBlock DC.L 0 run.DMACON DC.W 0 run.INTENA DC.W 0 ENDM