eb_handlediag movem.l d2/d3/a2/a4-a6,-(sp) lea (-14,sp),sp moveq #0,d0 move.w (cd_Rom+er_InitDiagVec,a3),d0 beq.w .exit lea (a2,d0.l),a0 move.l a0,d3 move.b (a0),d0 move.b d0,d1 and.b #$30,d0 cmp.b #$10,d0 bne.b .exit move.l ($0024,a6),a5 ;a5 = sysbase exg a5,a6 ;a5 = expansionbase, a6 = sysbase move.l sp,a1 moveq #14,d0 and.w #$00C0,d1 beq.b .nibble cmp.w #$0040,d1 beq.b .byte cmp.w #$0080,d1 bne.b .exit lea (.wordcopy,pc),a4 bra.b .docopy .byte lea (.bytecopy,pc),a4 bra.b .docopy .nibble lea (.nibblecopy,pc),a4 .docopy jsr (a4) tst.w (6,sp) beq.b .exit moveq #0,d0 move.w (2,sp),d0 moveq #MEMF_ANY,d1 move.l a6,-(sp) move.l ($0024,a6),a6 ;BUG: a6 = sysbase already, jsr (_LVOAllocMem,a6) ; resulting a6 is bogus! move.l (sp)+,a6 tst.l d0 beq.b .exit move.l d0,d2 move.l d0,a1 move.l d3,a0 move.l (2,sp),d0 jsr (a4) move.l a2,a0 move.l d2,a2 moveq #0,d0 move.w (4,a2),d0 jsr (a2,d0.w) tst.l d0 bne.b .exit move.l a2,a1 moveq #0,d0 move.w (2,sp),d0 jsr (_LVOFreeMem,a6) .exit lea (14,sp),sp movem.l (sp)+,d2/d3/a2/a4-a6 rts .wordcopy jsr (_LVOCopyMem,a6) rts .byte move.b (a0)+,(a1)+ addq.l #1,a0 .bytecopy dbra d0,.byte .nibblecopy move.w d2,-(sp) move.w #0,d2 moveq #0,d1 bra.b .intoloop .nibbleloop move.b (a0),d2 and.b #$F0,d2 move.b (2,a0),d1 lsr.w #4,d1 or.b d2,d1 move.b d1,(a1)+ addq.l #4,a0 .intoloop dbra d0,.nibbleloop move.w (sp)+,d2 rts