585 lines
13 KiB
C
585 lines
13 KiB
C
//--------------------------------------------------------------------
|
|
// sub
|
|
//--------------------------------------------------------------------
|
|
/*****************************************************************************************/
|
|
//--------------------------------------------------------------------
|
|
// byt
|
|
//--------------------------------------------------------------------
|
|
//--------------------------------------------------------------------
|
|
// sub.b #im,dx
|
|
//--------------------------------------------------------------------
|
|
subbir_macro:.macro
|
|
#ifdef halten_sub
|
|
halt
|
|
#endif
|
|
move.w (a0)+,d0
|
|
extb.l d0
|
|
mvs.b \2,d1
|
|
sub.l d0,d1
|
|
set_cc0
|
|
move.b d1,\2
|
|
ii_end
|
|
.endm;
|
|
//--------------------------------------------------------------------
|
|
// // sub ea,dx
|
|
//--------------------------------------------------------------------
|
|
subdd:.macro
|
|
#ifdef halten_sub
|
|
halt
|
|
#endif
|
|
mvs.\3 \1,d0
|
|
mvs.\3 \2,d1
|
|
sub.l d0,d1
|
|
set_cc0
|
|
move.\3 d1,\2
|
|
ii_end
|
|
.endm;
|
|
//--------------------------------------------------------------------
|
|
// // sub ea(l)->dy(w),dx z.B. für USP
|
|
//--------------------------------------------------------------------
|
|
subddd:.macro
|
|
#ifdef halten_sub
|
|
halt
|
|
#endif
|
|
move.l \1,a1
|
|
mvs.\3 a1,d0
|
|
mvs.\3 \2,d1
|
|
sub.l d0,d1
|
|
set_cc0
|
|
move.\3 d1,\2
|
|
ii_end
|
|
.endm;
|
|
//--------------------------------------------------------------------
|
|
// // sub (ea)->dy,dx
|
|
//--------------------------------------------------------------------
|
|
subdda:.macro
|
|
#ifdef halten_sub
|
|
halt
|
|
#endif
|
|
move.l \1,a1
|
|
mvs.\3 (a1),d0
|
|
mvs.\3 \2,d1
|
|
sub.l d0,d1
|
|
set_cc0
|
|
move.\3 d1,\2
|
|
ii_end
|
|
.endm;
|
|
//--------------------------------------------------------------------
|
|
// // sub ea->ay,(ay)+,dx
|
|
//--------------------------------------------------------------------
|
|
subddai:.macro
|
|
#ifdef halten_sub
|
|
halt
|
|
#endif
|
|
move.l \1,a1
|
|
mvs.\3 (a1)+,d0
|
|
move.l a1,\1
|
|
mvs.\3 \2,d1
|
|
sub.l d0,d1
|
|
set_cc0
|
|
move.\3 d1,\2
|
|
ii_end
|
|
.endm;
|
|
//--------------------------------------------------------------------
|
|
// // sub ea->ay,-(ay),dx
|
|
//--------------------------------------------------------------------
|
|
subddad:.macro
|
|
#ifdef halten_sub
|
|
halt
|
|
#endif
|
|
move.l \1,a1
|
|
mvs.\3 -(a1),d0
|
|
move.l a1,\1
|
|
mvs.\3 \2,d1
|
|
sub.l d0,d1
|
|
set_cc0
|
|
move.\3 d1,\2
|
|
ii_end
|
|
.endm;
|
|
//--------------------------------------------------------------------
|
|
// // sub d16(ay),dx
|
|
//--------------------------------------------------------------------
|
|
subd16ad:.macro
|
|
#ifdef halten_sub
|
|
halt
|
|
#endif
|
|
move.l \1,a1
|
|
mvs.w (a0)+,d0
|
|
add.l d0,a1
|
|
mvs.\3 (a1),d0
|
|
mvs.\3 \2,d1
|
|
sub.l d0,d1
|
|
set_cc0
|
|
move.\3 d1,\2
|
|
ii_end
|
|
.endm;
|
|
//--------------------------------------------------------------------
|
|
// // sub d8(ay,dy),dx
|
|
//--------------------------------------------------------------------
|
|
subd8ad:.macro
|
|
#ifdef halten_sub
|
|
halt
|
|
#endif
|
|
move.l \1,a1
|
|
jsr ewf
|
|
.ifc \3,l
|
|
move.l (a1),d0
|
|
move.l \2,d1
|
|
.else
|
|
mvs.\3 (a1),d0
|
|
mvs.\3 \2,d1
|
|
.endif
|
|
sub.l d0,d1
|
|
set_cc0
|
|
move.\3 d1,\2
|
|
ii_end
|
|
.endm;
|
|
//--------------------------------------------------------------------
|
|
// // sub xxx.w,dx
|
|
//--------------------------------------------------------------------
|
|
subxwd:.macro
|
|
#ifdef halten_sub
|
|
halt
|
|
#endif
|
|
move.w (a0)+,a1
|
|
mvs.\3 (a1),d0
|
|
mvs.\3 \2,d1
|
|
sub.l d0,d1
|
|
set_cc0
|
|
move.\3 d1,\2
|
|
ii_end
|
|
.endm;
|
|
//--------------------------------------------------------------------
|
|
// // sub xxx.l,dx
|
|
//--------------------------------------------------------------------
|
|
subxld:.macro
|
|
#ifdef halten_sub
|
|
halt
|
|
#endif
|
|
move.l (a0)+,a1
|
|
mvs.\3 (a1),d0
|
|
mvs.\3 \2,d1
|
|
sub.l d0,d1
|
|
set_cc0
|
|
move.\3 d1,\2
|
|
ii_end
|
|
.endm;
|
|
//--------------------------------------------------------------------
|
|
// // sub d16(pc),dx
|
|
//--------------------------------------------------------------------
|
|
subd16pcd:.macro
|
|
#ifdef halten_sub
|
|
halt
|
|
#endif
|
|
move.l a0,a1
|
|
mvs.w (a0)+,d0
|
|
add.l d0,a1
|
|
mvs.\3 (a1),d0
|
|
mvs.\3 \2,d1
|
|
sub.l d0,d1
|
|
set_cc0
|
|
move.\3 d1,\2
|
|
ii_end
|
|
.endm;
|
|
//--------------------------------------------------------------------
|
|
// // sub d8(pc,dy),dx
|
|
//--------------------------------------------------------------------
|
|
subd8pcd:.macro
|
|
#ifdef halten_sub
|
|
halt
|
|
#endif
|
|
move.l a0,a1
|
|
jsr ewf
|
|
.ifc \3,l
|
|
move.l (a1),d0
|
|
move.l \2,d1
|
|
.else
|
|
mvs.\3 (a1),d0
|
|
mvs.\3 \2,d1
|
|
.endif
|
|
sub.l d0,d1
|
|
set_cc0
|
|
move.\3 d1,\2
|
|
ii_end
|
|
.endm;
|
|
//--------------------------------------------------------------------
|
|
// sub dy,ea
|
|
//--------------------------------------------------------------------
|
|
//--------------------------------------------------------------------
|
|
// // sub (ea)->dy,dx
|
|
//--------------------------------------------------------------------
|
|
subeda:.macro
|
|
#ifdef halten_sub
|
|
halt
|
|
#endif
|
|
mvs.\3 \1,d0
|
|
move.l \2,a1
|
|
mvs.\3 (a1),d1
|
|
sub.l d0,d1
|
|
set_cc0
|
|
move.\3 d1,(a1)
|
|
ii_end
|
|
.endm;
|
|
//--------------------------------------------------------------------
|
|
// // sub dx,ea->ay,(ay)+
|
|
//--------------------------------------------------------------------
|
|
subedai:.macro
|
|
#ifdef halten_sub
|
|
halt
|
|
#endif
|
|
mvs.\3 \1,d0
|
|
move.l \2,a1
|
|
mvs.\3 (a1),d1
|
|
sub.l d0,d1
|
|
set_cc0
|
|
move.\3 d1,(a1)+
|
|
move.l a1,\2
|
|
ii_end
|
|
.endm;
|
|
//--------------------------------------------------------------------
|
|
// // sub dx,ea->ay,(ay)+
|
|
//--------------------------------------------------------------------
|
|
subedaid:.macro
|
|
#ifdef halten_sub
|
|
halt
|
|
#endif
|
|
mvs.\3 \1,d0
|
|
mvs.\3 \2,d1
|
|
sub.l d0,d1
|
|
set_cc0
|
|
move.\3 d1,\2+
|
|
ii_end
|
|
.endm;
|
|
//--------------------------------------------------------------------
|
|
// // sub dx,ea->ay,-(ay)
|
|
//--------------------------------------------------------------------
|
|
subedad:.macro
|
|
#ifdef halten_sub
|
|
halt
|
|
#endif
|
|
mvs.\3 \1,d0
|
|
move.l \2,a1
|
|
mvs.\3 -(a1),d1
|
|
move.l a1,\2
|
|
sub.l d0,d1
|
|
set_cc0
|
|
move.\3 d1,(a1)
|
|
ii_end
|
|
.endm;
|
|
//--------------------------------------------------------------------
|
|
// // sub dx,ea->ay,-(ay)
|
|
//--------------------------------------------------------------------
|
|
subedadd:.macro
|
|
#ifdef halten_sub
|
|
halt
|
|
#endif
|
|
mvs.\3 \1,d0
|
|
mvs.\3 -\2,d1
|
|
sub.l d0,d1
|
|
set_cc0
|
|
move.\3 d1,\2
|
|
ii_end
|
|
.endm;
|
|
//--------------------------------------------------------------------
|
|
// // sub dx,d16(ay)
|
|
//--------------------------------------------------------------------
|
|
sube16ad:.macro
|
|
#ifdef halten_sub
|
|
halt
|
|
#endif
|
|
mvs.\3 \1,d0
|
|
move.l \2,a1
|
|
mvs.w (a0)+,d1
|
|
add.l d1,a1
|
|
mvs.\3 (a1),d1
|
|
sub.l d0,d1
|
|
set_cc0
|
|
move.\3 d1,(a1)
|
|
ii_end
|
|
.endm;
|
|
//--------------------------------------------------------------------
|
|
// // sub dx,d8(ay,dy)
|
|
//--------------------------------------------------------------------
|
|
sube8ad:.macro
|
|
#ifdef halten_sub
|
|
halt
|
|
#endif
|
|
move.l \2,a1
|
|
jsr ewf
|
|
.ifc \3,l
|
|
move.l (a1),d1
|
|
move.l \1,d0
|
|
.else
|
|
mvs.\3 (a1),d1
|
|
mvs.\3 \1,d0
|
|
.endif
|
|
sub.l d0,d1
|
|
set_cc0
|
|
move.\3 d1,(a1)
|
|
ii_end
|
|
.endm;
|
|
//--------------------------------------------------------------------
|
|
// // sub dx,xxx.w
|
|
//--------------------------------------------------------------------
|
|
subxwe:.macro
|
|
#ifdef halten_sub
|
|
halt
|
|
#endif
|
|
mvs.\3 \1,d0
|
|
move.w (a0)+,a1
|
|
mvs.\3 (a1),d1
|
|
sub.l d0,d1
|
|
set_cc0
|
|
move.\3 d1,(a1)
|
|
ii_end
|
|
.endm;
|
|
//--------------------------------------------------------------------
|
|
// // sub dx,xxx.l
|
|
//--------------------------------------------------------------------
|
|
subxle:.macro
|
|
#ifdef halten_sub
|
|
halt
|
|
#endif
|
|
mvs.\3 \1,d0
|
|
move.l (a0)+,a1
|
|
mvs.\3 (a1),d1
|
|
sub.l d0,d1
|
|
set_cc0
|
|
move.\3 d1,(a1)
|
|
ii_end
|
|
.endm;
|
|
/******************************************************/
|
|
// adress register
|
|
/******************************************************/
|
|
//--------------------------------------------------------------------
|
|
// // suba.w ea,ax
|
|
//--------------------------------------------------------------------
|
|
subaw:.macro
|
|
#ifdef halten_sub
|
|
halt
|
|
#endif
|
|
move.l a0,pc_off(a7) // pc auf next
|
|
movem.l (a7),d0/d1/a0/a1 // register zurpück
|
|
mvs.w \1,d0
|
|
suba.l d0,\2
|
|
move.l d0_off(a7),d0
|
|
lea ii_ss(a7),a7 // stack erhöhen
|
|
rte
|
|
.endm;
|
|
//--------------------------------------------------------------------
|
|
// sub.w ea,usp
|
|
//--------------------------------------------------------------------
|
|
subawa7:.macro
|
|
#ifdef halten_sub
|
|
halt
|
|
#endif
|
|
mvs.w \1,d0
|
|
move.l usp,a1
|
|
sub.l d0,a1
|
|
move.l a1,usp
|
|
ii_end
|
|
.endm;
|
|
//--------------------------------------------------------------------
|
|
// // suba.w usp?,ax
|
|
//--------------------------------------------------------------------
|
|
subawu:.macro
|
|
#ifdef halten_sub
|
|
halt
|
|
#endif
|
|
move.l a0,pc_off(a7) // pc auf next
|
|
movem.l (a7),d0/d1/a0/a1 // register zurpück
|
|
move.l a7,_a7_save
|
|
move.l usp,a7
|
|
move.l \1,d0
|
|
suba.l d0,\2
|
|
move.l a7,usp
|
|
move.l _a7_save,a7
|
|
move.l d0_off(a7),d0
|
|
lea ii_ss(a7),a7 // stack erhöhen
|
|
rte
|
|
.endm;
|
|
//--------------------------------------------------------------------
|
|
// // suba.w usp?,usp
|
|
//--------------------------------------------------------------------
|
|
subawua7:.macro
|
|
subawu \1,\2
|
|
.endm;
|
|
//--------------------------------------------------------------------
|
|
// // suba.w d16(ay),ax
|
|
//--------------------------------------------------------------------
|
|
subawd16a:.macro
|
|
#ifdef halten_sub
|
|
halt
|
|
#endif
|
|
move.l \1,a1
|
|
mvs.w (a0)+,d0
|
|
adda.l d0,a1
|
|
mvs.w (a1),d0
|
|
move.l \2,a1
|
|
sub.l d0,a1
|
|
move.l a1,\2
|
|
ii_end
|
|
.endm;
|
|
//--------------------------------------------------------------------
|
|
// // suba.w d8(ay,dy),ax
|
|
//--------------------------------------------------------------------
|
|
subawd8a:.macro
|
|
#ifdef halten_sub
|
|
halt
|
|
#endif
|
|
move.l \1,a1
|
|
jsr ewf
|
|
mvs.w (a1),d0
|
|
move.l \2,a1
|
|
sub.l d0,a1
|
|
move.l a1,\2
|
|
ii_end
|
|
.endm;
|
|
//--------------------------------------------------------------------
|
|
// // suba.w xxx.w,ax
|
|
//--------------------------------------------------------------------
|
|
subawxwax:.macro
|
|
#ifdef halten_sub
|
|
halt
|
|
#endif
|
|
move.w (a0)+,a1
|
|
mvs.w (a1),d0
|
|
move.l \2,a1
|
|
suba.l d0,a1
|
|
move.l a1,\2
|
|
ii_end
|
|
.endm;
|
|
//--------------------------------------------------------------------
|
|
// // suba.w xxx.l,ax
|
|
//--------------------------------------------------------------------
|
|
subawxlax:.macro
|
|
#ifdef halten_sub
|
|
halt
|
|
#endif
|
|
move.l (a0)+,a1
|
|
mvs.w (a1),d0
|
|
move.l \2,a1
|
|
suba.l d0,a1
|
|
move.l a1,\2
|
|
ii_end
|
|
.endm;
|
|
//--------------------------------------------------------------------
|
|
// // suba.w d16(pc),ax
|
|
//--------------------------------------------------------------------
|
|
subawd16pcax:.macro
|
|
#ifdef halten_sub
|
|
halt
|
|
#endif
|
|
move.w (a0)+,a1
|
|
adda.l a0,a1
|
|
mvs.w (a1),d0
|
|
move.l \2,a1
|
|
suba.l d0,a1
|
|
move.l a1,\2
|
|
ii_end
|
|
.endm;
|
|
//--------------------------------------------------------------------
|
|
// // suba.w d8(pc,dy),ax
|
|
//--------------------------------------------------------------------
|
|
subawd8pcax:.macro
|
|
#ifdef halten_sub
|
|
halt
|
|
#endif
|
|
move.l a0,a1
|
|
jsr ewf
|
|
mvs.w (a1),d0
|
|
move.l \2,a1
|
|
sub.l d0,a1
|
|
move.l a1,\2
|
|
ii_end
|
|
.endm;
|
|
//--------------------------------------------------------------------
|
|
// // suba.w #im,ax
|
|
//--------------------------------------------------------------------
|
|
subawim:.macro
|
|
#ifdef halten_sub
|
|
halt
|
|
#endif
|
|
mvs.w \1,d0
|
|
move.l \2,a1
|
|
sub.l d0,a1
|
|
move.l a1,\2
|
|
ii_end
|
|
.endm;
|
|
//--------------------------------------------------------------------
|
|
// // suba.l d8(ay,dy),ax
|
|
//--------------------------------------------------------------------
|
|
subald8a:.macro
|
|
#ifdef halten_sub
|
|
halt
|
|
#endif
|
|
move.l \1,a1
|
|
jsr ewf
|
|
move.l (a1),d0
|
|
move.l \2,a1
|
|
sub.l d0,a1
|
|
move.l a1,\2
|
|
ii_end
|
|
.endm;
|
|
//--------------------------------------------------------------------
|
|
// // suba.l d8(pc,dy),ax
|
|
//--------------------------------------------------------------------
|
|
subakd8pcax:.macro
|
|
#ifdef halten_sub
|
|
halt
|
|
#endif
|
|
move.l a0,a1
|
|
jsr ewf
|
|
move.l (a1),d0
|
|
move.l \2,a1
|
|
sub.l d0,a1
|
|
move.l a1,\2
|
|
ii_end
|
|
.endm;
|
|
//*****************************************************************************************
|
|
// subx
|
|
//*****************************************************************************************
|
|
//--------------------------------------------------------------------
|
|
// // subx dy,dx
|
|
//--------------------------------------------------------------------
|
|
subdx:.macro
|
|
#ifdef halten_sub
|
|
halt
|
|
#endif
|
|
move.b sr_off+1(a7),d0 //ccr holen
|
|
move d0,ccr //setzen
|
|
mvs.\3 \2,d0
|
|
mvs.\3 \1,d1
|
|
subx.l d0,d1
|
|
set_cc0
|
|
move.\3 d1,\1
|
|
ii_end
|
|
.endm;
|
|
//--------------------------------------------------------------------
|
|
// // subx -(ay),-(ax)
|
|
//--------------------------------------------------------------------
|
|
subdax:.macro
|
|
#ifdef halten_sub
|
|
halt
|
|
#endif
|
|
move.b sr_off+1(a7),d0 //ccr holen
|
|
move d0,ccr //setzen
|
|
move.l \1,a1
|
|
.ifc \3,l
|
|
move.l -(a1),d0
|
|
.else
|
|
mvs.\3 -(a1),d0
|
|
.endif
|
|
move.l \2,a1
|
|
.ifc \3,l
|
|
move.l -(a1),d0
|
|
.else
|
|
mvs.\3 -(a1),d1
|
|
.endif
|
|
subx.l d0,d1
|
|
set_cc0
|
|
move.\3 d1,(a1)
|
|
ii_end
|
|
.endm;
|
|
//--------------------------------------------------------------------
|