everything compiles nicely. Next will be linker scripts.
This commit is contained in:
442
BaS_GNU/sources/ii_or.h
Normal file
442
BaS_GNU/sources/ii_or.h
Normal file
@@ -0,0 +1,442 @@
|
|||||||
|
//--------------------------------------------------------------------
|
||||||
|
// or
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
/*****************************************************************************************/
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
// byt
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
// or.b #im,dx
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
orbir_macro:.macro
|
||||||
|
#ifdef halten_or
|
||||||
|
halt
|
||||||
|
#endif
|
||||||
|
move.w (a0)+,d0
|
||||||
|
extb.l d0
|
||||||
|
mvs.b \2,d1
|
||||||
|
or.l d0,d1
|
||||||
|
set_cc0
|
||||||
|
move.b d1,\2
|
||||||
|
ii_end
|
||||||
|
.endm;
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
// // or ea,dx
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
ordd:.macro
|
||||||
|
#ifdef halten_or
|
||||||
|
halt
|
||||||
|
#endif
|
||||||
|
mvs.\3 \1,d0
|
||||||
|
mvs.\3 \2,d1
|
||||||
|
or.l d0,d1
|
||||||
|
set_cc0
|
||||||
|
move.\3 d1,\2
|
||||||
|
ii_end
|
||||||
|
.endm;
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
// // or ea(l)->dy(w),dx z.B. f<>r USP
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
orddd:.macro
|
||||||
|
#ifdef halten_or
|
||||||
|
halt
|
||||||
|
#endif
|
||||||
|
move.l \1,a1
|
||||||
|
mvs.\3 a1,d0
|
||||||
|
mvs.\3 \2,d1
|
||||||
|
or.l d0,d1
|
||||||
|
set_cc0
|
||||||
|
move.\3 d1,\2
|
||||||
|
ii_end
|
||||||
|
.endm;
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
// // or (ea)->dy,dx
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
ordda:.macro
|
||||||
|
#ifdef halten_or
|
||||||
|
halt
|
||||||
|
#endif
|
||||||
|
move.l \1,a1
|
||||||
|
mvs.\3 (a1),d0
|
||||||
|
mvs.\3 \2,d1
|
||||||
|
or.l d0,d1
|
||||||
|
set_cc0
|
||||||
|
move.\3 d1,\2
|
||||||
|
ii_end
|
||||||
|
.endm;
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
// // or ea->ay,(ay)+,dx
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
orddai:.macro
|
||||||
|
#ifdef halten_or
|
||||||
|
halt
|
||||||
|
#endif
|
||||||
|
move.l \1,a1
|
||||||
|
mvs.\3 (a1)+,d0
|
||||||
|
move.l a1,\1
|
||||||
|
mvs.\3 \2,d1
|
||||||
|
or.l d0,d1
|
||||||
|
set_cc0
|
||||||
|
move.\3 d1,\2
|
||||||
|
ii_end
|
||||||
|
.endm;
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
// // or ea->ay,-(ay),dx
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
orddad:.macro
|
||||||
|
#ifdef halten_or
|
||||||
|
halt
|
||||||
|
#endif
|
||||||
|
move.l \1,a1
|
||||||
|
mvs.\3 -(a1),d0
|
||||||
|
move.l a1,\1
|
||||||
|
mvs.\3 \2,d1
|
||||||
|
or.l d0,d1
|
||||||
|
set_cc0
|
||||||
|
move.\3 d1,\2
|
||||||
|
ii_end
|
||||||
|
.endm;
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
// // or d16(ay),dx
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
ord16ad:.macro
|
||||||
|
#ifdef halten_or
|
||||||
|
halt
|
||||||
|
#endif
|
||||||
|
move.l \1,a1
|
||||||
|
mvs.w (a0)+,d0
|
||||||
|
add.l d0,a1
|
||||||
|
mvs.\3 (a1),d0
|
||||||
|
mvs.\3 \2,d1
|
||||||
|
or.l d0,d1
|
||||||
|
set_cc0
|
||||||
|
move.\3 d1,\2
|
||||||
|
ii_end
|
||||||
|
.endm;
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
// // or d8(ay,dy),dx
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
ord8ad:.macro
|
||||||
|
#ifdef halten_or
|
||||||
|
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
|
||||||
|
or.l d0,d1
|
||||||
|
set_cc0
|
||||||
|
move.\3 d1,\2
|
||||||
|
ii_end
|
||||||
|
.endm;
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
// // or xxx.w,dx
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
orxwd:.macro
|
||||||
|
#ifdef halten_or
|
||||||
|
halt
|
||||||
|
#endif
|
||||||
|
move.w (a0)+,a1
|
||||||
|
mvs.\3 (a1),d0
|
||||||
|
mvs.\3 \2,d1
|
||||||
|
or.l d0,d1
|
||||||
|
set_cc0
|
||||||
|
move.\3 d1,\2
|
||||||
|
ii_end
|
||||||
|
.endm;
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
// // or xxx.l,dx
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
orxld:.macro
|
||||||
|
#ifdef halten_or
|
||||||
|
halt
|
||||||
|
#endif
|
||||||
|
move.l (a0)+,a1
|
||||||
|
mvs.\3 (a1),d0
|
||||||
|
mvs.\3 \2,d1
|
||||||
|
or.l d0,d1
|
||||||
|
set_cc0
|
||||||
|
move.\3 d1,\2
|
||||||
|
ii_end
|
||||||
|
.endm;
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
// // or d16(pc),dx
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
ord16pcd:.macro
|
||||||
|
halt
|
||||||
|
move.l a0,a1
|
||||||
|
mvs.w (a0)+,d0
|
||||||
|
add.l d0,a1
|
||||||
|
mvs.\3 (a1),d0
|
||||||
|
mvs.\3 \2,d1
|
||||||
|
or.l d0,d1
|
||||||
|
set_cc0
|
||||||
|
move.\3 d1,\2
|
||||||
|
ii_end
|
||||||
|
.endm;
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
// // or d8(pc,dy),dx
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
ord8pcd:.macro
|
||||||
|
#ifdef halten_or
|
||||||
|
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
|
||||||
|
or.l d0,d1
|
||||||
|
set_cc0
|
||||||
|
move.\3 d1,\2
|
||||||
|
ii_end
|
||||||
|
.endm;
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
// or dy,ea
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
// // or (ea)->dy,dx
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
oreda:.macro
|
||||||
|
#ifdef halten_or
|
||||||
|
halt
|
||||||
|
#endif
|
||||||
|
mvs.\3 \1,d0
|
||||||
|
move.l \2,a1
|
||||||
|
mvs.\3 (a1),d1
|
||||||
|
or.l d0,d1
|
||||||
|
set_cc0
|
||||||
|
move.\3 d1,(a1)
|
||||||
|
ii_end
|
||||||
|
.endm;
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
// // or dx,ea->ay,(ay)+
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
oredai:.macro
|
||||||
|
#ifdef halten_or
|
||||||
|
halt
|
||||||
|
#endif
|
||||||
|
mvs.\3 \1,d0
|
||||||
|
move.l \2,a1
|
||||||
|
mvs.\3 (a1),d1
|
||||||
|
or.l d0,d1
|
||||||
|
set_cc0
|
||||||
|
move.\3 d1,(a1)+
|
||||||
|
move.l a1,\2
|
||||||
|
ii_end
|
||||||
|
.endm;
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
// // or dx,ea->ay,(ay)+
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
oredaid:.macro
|
||||||
|
#ifdef halten_or
|
||||||
|
halt
|
||||||
|
#endif
|
||||||
|
mvs.\3 \1,d0
|
||||||
|
mvs.\3 \2,d1
|
||||||
|
or.l d0,d1
|
||||||
|
set_cc0
|
||||||
|
move.\3 d1,\2+
|
||||||
|
ii_end
|
||||||
|
.endm;
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
// // or dx,ea->ay,-(ay)
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
oredad:.macro
|
||||||
|
#ifdef halten_or
|
||||||
|
halt
|
||||||
|
#endif
|
||||||
|
mvs.\3 \1,d0
|
||||||
|
move.l \2,a1
|
||||||
|
mvs.\3 -(a1),d1
|
||||||
|
move.l a1,\2
|
||||||
|
or.l d0,d1
|
||||||
|
set_cc0
|
||||||
|
move.\3 d1,(a1)
|
||||||
|
ii_end
|
||||||
|
.endm;
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
// // or dx,ea->ay,-(ay)
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
oredadd:.macro
|
||||||
|
#ifdef halten_or
|
||||||
|
halt
|
||||||
|
#endif
|
||||||
|
mvs.\3 \1,d0
|
||||||
|
mvs.\3 -\2,d1
|
||||||
|
or.l d0,d1
|
||||||
|
set_cc0
|
||||||
|
move.\3 d1,\2
|
||||||
|
ii_end
|
||||||
|
.endm;
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
// // or dx,d16(ay)
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
ore16ad:.macro
|
||||||
|
#ifdef halten_or
|
||||||
|
halt
|
||||||
|
#endif
|
||||||
|
mvs.\3 \1,d0
|
||||||
|
move.l \2,a1
|
||||||
|
mvs.w (a0)+,d1
|
||||||
|
add.l d1,a1
|
||||||
|
mvs.\3 (a1),d1
|
||||||
|
or.l d0,d1
|
||||||
|
set_cc0
|
||||||
|
move.\3 d1,(a1)
|
||||||
|
ii_end
|
||||||
|
.endm;
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
// // or.w dx,d8(ay,dy)
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
ore8ad:.macro
|
||||||
|
#ifdef halten_or
|
||||||
|
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
|
||||||
|
or.l d0,d1
|
||||||
|
set_cc0
|
||||||
|
move.\3 d1,(a1)
|
||||||
|
ii_end
|
||||||
|
.endm;
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
// // or dx,xxx.w
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
orxwe:.macro
|
||||||
|
#ifdef halten_or
|
||||||
|
halt
|
||||||
|
#endif
|
||||||
|
mvs.\3 \1,d0
|
||||||
|
move.w (a0)+,a1
|
||||||
|
mvs.\3 (a1),d1
|
||||||
|
or.l d0,d1
|
||||||
|
set_cc0
|
||||||
|
move.\3 d1,(a1)
|
||||||
|
ii_end
|
||||||
|
.endm;
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
// // or dx,xxx.l
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
orxle:.macro
|
||||||
|
#ifdef halten_or
|
||||||
|
halt
|
||||||
|
#endif
|
||||||
|
mvs.\3 \1,d0
|
||||||
|
move.l (a0)+,a1
|
||||||
|
mvs.\3 (a1),d1
|
||||||
|
or.l d0,d1
|
||||||
|
set_cc0
|
||||||
|
move.\3 d1,(a1)
|
||||||
|
ii_end
|
||||||
|
.endm;
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
// // ora.w ea,ax
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
oraw:.macro
|
||||||
|
jmp ii_error
|
||||||
|
.endm;
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
// or.w ea,usp
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
orawa7:.macro
|
||||||
|
jmp ii_error
|
||||||
|
.endm;
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
// // ora.w usp?,ax
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
orawu:.macro
|
||||||
|
jmp ii_error
|
||||||
|
.endm;
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
// // ora.w usp?,usp
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
orawua7:.macro
|
||||||
|
orawu \1,\2
|
||||||
|
.endm;
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
// // ora.w d16(ay),ax
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
orawd16a:.macro
|
||||||
|
jmp ii_error
|
||||||
|
.endm;
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
// // ora.w d8(ay,dy),ax
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
orawd8a:.macro
|
||||||
|
jmp ii_error
|
||||||
|
.endm;
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
// // ora.w xxx.w,ax
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
orawxwax:.macro
|
||||||
|
jmp ii_error
|
||||||
|
.endm;
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
// // ora.w xxx.l,ax
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
orawxlax:.macro
|
||||||
|
jmp ii_error
|
||||||
|
.endm;
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
// // ora.w d16(pc),ax
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
orawd16pcax:.macro
|
||||||
|
jmp ii_error
|
||||||
|
.endm;
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
// // ora.w d8(pc,dy),ax
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
orawd8pcax:.macro
|
||||||
|
jmp ii_error
|
||||||
|
.endm;
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
// // ora.w #im,ax
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
orawim:.macro
|
||||||
|
jmp ii_error
|
||||||
|
.endm;
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
// // ora.l d8(ay,dy),ax
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
orald8a:.macro
|
||||||
|
jmp ii_error
|
||||||
|
.endm;
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
// // ora.l d8(pc,dy),ax
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
orald8pcax:.macro
|
||||||
|
jmp ii_error
|
||||||
|
.endm;
|
||||||
|
//*****************************************************************************************
|
||||||
|
// spezial addx subx etc.
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
// // addx dy,dx
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
ordx:.macro
|
||||||
|
jmp ii_error
|
||||||
|
.endm;
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
// // addx -(ay),-(ax)
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
ordax:.macro
|
||||||
|
jmp ii_error
|
||||||
|
.endm;
|
||||||
|
//--------------------------------------------------------------------
|
||||||
74
BaS_GNU/sources/ii_pea.h
Normal file
74
BaS_GNU/sources/ii_pea.h
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
//--------------------------------------------------------------------
|
||||||
|
// pea
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
.text
|
||||||
|
ii_pea_lset:.macro
|
||||||
|
ii_lset_opeag 48,7
|
||||||
|
ii_lset 0x487b
|
||||||
|
.endm
|
||||||
|
//---------------------------------------------------------------------------------------------
|
||||||
|
ii_pea_func:.macro
|
||||||
|
ii_0x4870:
|
||||||
|
#ifdef halten_pea
|
||||||
|
halt
|
||||||
|
#endif
|
||||||
|
move.l a0_off(a7),a1
|
||||||
|
pea_macro
|
||||||
|
ii_0x4871:
|
||||||
|
#ifdef halten_pea
|
||||||
|
halt
|
||||||
|
#endif
|
||||||
|
move.l a1_off(a7),a1
|
||||||
|
pea_macro
|
||||||
|
ii_0x4872:
|
||||||
|
#ifdef halten_pea
|
||||||
|
halt
|
||||||
|
#endif
|
||||||
|
move.l a2,a1
|
||||||
|
pea_macro
|
||||||
|
ii_0x4873:
|
||||||
|
#ifdef halten_pea
|
||||||
|
halt
|
||||||
|
#endif
|
||||||
|
move.l a3,a1
|
||||||
|
pea_macro
|
||||||
|
ii_0x4874:
|
||||||
|
#ifdef halten_pea
|
||||||
|
halt
|
||||||
|
#endif
|
||||||
|
move.l a4,a1
|
||||||
|
pea_macro
|
||||||
|
ii_0x4875:
|
||||||
|
#ifdef halten_pea
|
||||||
|
halt
|
||||||
|
#endif
|
||||||
|
move.l a5,a1
|
||||||
|
pea_macro
|
||||||
|
ii_0x4876:
|
||||||
|
#ifdef halten_pea
|
||||||
|
halt
|
||||||
|
#endif
|
||||||
|
move.l a6,a1
|
||||||
|
pea_macro
|
||||||
|
ii_0x4877:
|
||||||
|
#ifdef halten_pea
|
||||||
|
halt
|
||||||
|
#endif
|
||||||
|
move.l usp,a1
|
||||||
|
pea_macro
|
||||||
|
ii_0x487b:
|
||||||
|
#ifdef halten_pea
|
||||||
|
halt
|
||||||
|
#endif
|
||||||
|
move.l a0,a1
|
||||||
|
pea_macro
|
||||||
|
.endm
|
||||||
|
//---------------------------------------------------------------------------------------------
|
||||||
|
pea_macro:.macro
|
||||||
|
jsr ewf
|
||||||
|
move.l (a1),d0
|
||||||
|
move.l usp,a1
|
||||||
|
move.l d0,-(a1)
|
||||||
|
move.l a1,usp
|
||||||
|
ii_end
|
||||||
|
.endm
|
||||||
247
BaS_GNU/sources/ii_shd.h
Normal file
247
BaS_GNU/sources/ii_shd.h
Normal file
@@ -0,0 +1,247 @@
|
|||||||
|
/*****************************************************************************************/
|
||||||
|
// opertionen
|
||||||
|
/*****************************************************************************************/
|
||||||
|
ii_lset_shd:.macro
|
||||||
|
ii_lset_shdx e0 //r d0
|
||||||
|
ii_lset_shdx e2 //r d1
|
||||||
|
ii_lset_shdx e4 //r d2
|
||||||
|
ii_lset_shdx e6 //r d3
|
||||||
|
ii_lset_shdx e8 //r d4
|
||||||
|
ii_lset_shdx ea //r d5
|
||||||
|
ii_lset_shdx ec //r d6
|
||||||
|
ii_lset_shdx ee //r d7
|
||||||
|
|
||||||
|
ii_lset_shdx e1 //l d0
|
||||||
|
ii_lset_shdx e3 //l d1
|
||||||
|
ii_lset_shdx e4 //l d2
|
||||||
|
ii_lset_shdx e5 //l d3
|
||||||
|
ii_lset_shdx e9 //l d4
|
||||||
|
ii_lset_shdx eb //l d5
|
||||||
|
ii_lset_shdx ed //l d6
|
||||||
|
ii_lset_shdx ef //l d7
|
||||||
|
.endm
|
||||||
|
|
||||||
|
ii_lset_shdx:.macro
|
||||||
|
//byt
|
||||||
|
ii_lset_opea \1,0 // as,ls #im,dx
|
||||||
|
ii_lset_opea \1,1 // rox,ro #im,dx
|
||||||
|
ii_lset_opea \1,2 // as,ls dy,dx
|
||||||
|
ii_lset_opea \1,3 // rox,ro dy,dx
|
||||||
|
//word
|
||||||
|
ii_lset_opea \1,4 // as,ls #im,dx
|
||||||
|
ii_lset_opea \1,5 // rox,ro #im,dx
|
||||||
|
ii_lset_opea \1,6 // as,ls dy,dx
|
||||||
|
ii_lset_opea \1,7 // rox,ro dy,dx
|
||||||
|
//long
|
||||||
|
// ii_lset_opea \1,8 // as,ls #im,dx -> vorhanden
|
||||||
|
ii_lset_opea \1,9 // rox,ro #im,dx
|
||||||
|
// ii_lset_opea \1,a // as,ls dy,dx -> vorhanden
|
||||||
|
ii_lset_opea \1,b // rox,ro dy,dx
|
||||||
|
.endm
|
||||||
|
/******************************************************/
|
||||||
|
ii_shd:.macro // 1=code 2=operation 3 = normal, direct oder immediat
|
||||||
|
// byt
|
||||||
|
opdx \1,\2,b,0,\3 // dx
|
||||||
|
// word
|
||||||
|
opdx \1,\2,w,4,\3 // dx
|
||||||
|
// long
|
||||||
|
opdx \1,\2,l,8,\3 // dx
|
||||||
|
.endm
|
||||||
|
/******************************************************/
|
||||||
|
// byt word long routinen
|
||||||
|
/******************************************************/
|
||||||
|
sh_asr: .macro // asr -> 1=operation 2 = dx 3 = dy/im 4 = size b/w
|
||||||
|
mvs.\4 \2,d1
|
||||||
|
sh_shal \1,\2,\3,\4
|
||||||
|
.endm
|
||||||
|
|
||||||
|
sh_lsr: .macro // asl -> 1=operation 2 = dx 3 = dy/im 4 = size b/w
|
||||||
|
mvz.\4 \2,d1
|
||||||
|
sh_shal \1,\2,\3,\4
|
||||||
|
.endm
|
||||||
|
|
||||||
|
sh_shal:.macro
|
||||||
|
move.w \3,d0
|
||||||
|
\1.l d0,d1
|
||||||
|
set_cc0
|
||||||
|
move.\4 d1,\2
|
||||||
|
.endm
|
||||||
|
|
||||||
|
sh_all: .macro // asl/lsl -> 1=operation 2 = dx 3 = dy/im 4 = size b/w
|
||||||
|
mvz.\4 \2,d1
|
||||||
|
.ifc \4,b
|
||||||
|
byterev.l d1
|
||||||
|
.else
|
||||||
|
swap.w d1
|
||||||
|
.endif
|
||||||
|
sh_asr \1,\2,\3,\4
|
||||||
|
.endm
|
||||||
|
|
||||||
|
sh_ror: .macro // ror -> 1=operation 2 = dx 3 = dy/im 4 = size b/w/l
|
||||||
|
move.\4 \2,d1 /
|
||||||
|
move.w \3,d0
|
||||||
|
.ifc \4,b
|
||||||
|
lsl.l #8,d1
|
||||||
|
move.b \2,d1
|
||||||
|
and.l #0x7,d0
|
||||||
|
lsr.l d0,d1
|
||||||
|
.else
|
||||||
|
.ifc \4,w
|
||||||
|
swap.w d1
|
||||||
|
move.w \2,d1
|
||||||
|
and.l #0xf,d0
|
||||||
|
lsr.l d0,d1
|
||||||
|
.else
|
||||||
|
and.l #0x1f,d0
|
||||||
|
lsr.l d0,d1
|
||||||
|
move.l d1,a1
|
||||||
|
move.l \2,d1
|
||||||
|
sub.l #32,d0
|
||||||
|
neg.l d0
|
||||||
|
lsl.l d0,d1
|
||||||
|
add.l a1,d1
|
||||||
|
.endif
|
||||||
|
.endif
|
||||||
|
move.\4 d1,\2
|
||||||
|
move.w ccr,d0
|
||||||
|
and.l #1,d1 // ist auch carry bit
|
||||||
|
or.l d1,d0
|
||||||
|
move.b d0,ccr_off(a7)
|
||||||
|
.endm
|
||||||
|
|
||||||
|
sh_rol: .macro // rol -> 1=operation 2 = dx 3 = dy/im 4 = size b/w/l
|
||||||
|
move.\4 \2,d1
|
||||||
|
move.w \3,d0
|
||||||
|
.ifc \4,b
|
||||||
|
lsl.l #8,d1
|
||||||
|
move.b \2,d1
|
||||||
|
and.l #0x7,d0
|
||||||
|
lsl.l d0,d1
|
||||||
|
lsr.l #8,d1
|
||||||
|
moveq #7,d0
|
||||||
|
.else
|
||||||
|
.ifc \4,w
|
||||||
|
swap.w d1
|
||||||
|
move.w \2,d1
|
||||||
|
and.l #0xf,d0
|
||||||
|
lsr.l d0,d1
|
||||||
|
swap.w d1
|
||||||
|
moveq #15,d0
|
||||||
|
.else
|
||||||
|
and.l #0x1f,d0
|
||||||
|
lsl.l d0,d1
|
||||||
|
move.l d1,a1
|
||||||
|
move.l \2,d1
|
||||||
|
sub.l #32,d0
|
||||||
|
neg.l d0
|
||||||
|
lsr.l d0,d1
|
||||||
|
add.l a1,d1
|
||||||
|
moveq #31,d0
|
||||||
|
.endif
|
||||||
|
.endif
|
||||||
|
move.\4 d1,\2
|
||||||
|
lsr.l d0,d1 // carry bit schieben
|
||||||
|
move.w ccr,d0
|
||||||
|
and.l #1,d1
|
||||||
|
or.l d1,d0
|
||||||
|
move.b d0,ccr_off(a7)
|
||||||
|
.endm
|
||||||
|
|
||||||
|
sh_roxr: .macro // roxr -> 1=operation 2 = dx 3 = dy/im 4 = size b/w/l
|
||||||
|
clr.l d0
|
||||||
|
addx.l d0,d0
|
||||||
|
ifc \4,b
|
||||||
|
mvz.b \2,d1
|
||||||
|
lsl.l #1,d1
|
||||||
|
add.l d0,d1
|
||||||
|
lsl.l #8,d1
|
||||||
|
move.b \2,d1
|
||||||
|
move.w \3,d0
|
||||||
|
and.l #0x7,d0
|
||||||
|
lsr.l d0,d1
|
||||||
|
set_cc0
|
||||||
|
else
|
||||||
|
.ifc \4,w
|
||||||
|
mvz.b \2,d1
|
||||||
|
lsl.l #1,d1
|
||||||
|
add.l d0,d1
|
||||||
|
lsl.l #8,d1
|
||||||
|
lsl.l #8,d1
|
||||||
|
move.w \2,d1
|
||||||
|
move.w \3,d0
|
||||||
|
and.l #0xf,d0
|
||||||
|
lsr.l d0,d1
|
||||||
|
set_cc0
|
||||||
|
.else
|
||||||
|
bitrev.l d0
|
||||||
|
move.l \2,d1
|
||||||
|
lsr.l #1,d1
|
||||||
|
add.l d0,d1
|
||||||
|
move.w \3,d0
|
||||||
|
subq.l #1,d0
|
||||||
|
and.l #0x1f,d0
|
||||||
|
lsr.l d0,d1
|
||||||
|
move.l d1,a1
|
||||||
|
set_cc1
|
||||||
|
move.l \2,d1
|
||||||
|
sub.l #32,d0
|
||||||
|
neg.l d0
|
||||||
|
lsl.l d0,d1
|
||||||
|
add.l a1,d1
|
||||||
|
.endif
|
||||||
|
.endif
|
||||||
|
move.\4 d1,\2
|
||||||
|
.endm
|
||||||
|
|
||||||
|
sh_roxl: .macro // roxl -> 1=operation 2 = dx 3 = dy/im 4 = size b/w/l
|
||||||
|
clr.l d0
|
||||||
|
addx.l d0,d0
|
||||||
|
ifc \4,b
|
||||||
|
mvz.b \2,d1
|
||||||
|
lsl.l #1,d1
|
||||||
|
add.l d0,d1
|
||||||
|
lsl.l #8,d1
|
||||||
|
move.b \2,d1
|
||||||
|
lsl.l #8,d1
|
||||||
|
lsl.l #7,d1
|
||||||
|
move.w \3,d0
|
||||||
|
and.l #0x7,d0
|
||||||
|
lsl.l d0,d1
|
||||||
|
set_cc0
|
||||||
|
byterev.l d1
|
||||||
|
else
|
||||||
|
.ifc \4,w
|
||||||
|
mvz.b \2,d1
|
||||||
|
lsl.l #1,d1
|
||||||
|
add.l d0,d1
|
||||||
|
lsl.l #8,d1
|
||||||
|
lsl.l #7,d1
|
||||||
|
mvz.w \2,d0
|
||||||
|
lsr.l #1,d0
|
||||||
|
add.l d0,d1
|
||||||
|
move.w \3,d0
|
||||||
|
and.l #0xf,d0
|
||||||
|
lsl.l d0,d1
|
||||||
|
set_cc0
|
||||||
|
swap.w d1
|
||||||
|
.else
|
||||||
|
move.l \2,d1
|
||||||
|
lsl.l #1,d1
|
||||||
|
add.l d0,d1
|
||||||
|
move.w \3,d0
|
||||||
|
subq.l #1,d0
|
||||||
|
and.l #0x1f,d0
|
||||||
|
lsl.l d0,d1
|
||||||
|
move.l d1,a1
|
||||||
|
set_cc1
|
||||||
|
move.l \2,d1
|
||||||
|
sub.l #32,d0
|
||||||
|
neg.l d0
|
||||||
|
lsr.l d0,d1
|
||||||
|
add.l a1,d1
|
||||||
|
.endif
|
||||||
|
.endif
|
||||||
|
move.\4 d1,\2
|
||||||
|
.endm
|
||||||
|
|
||||||
|
|
||||||
687
BaS_GNU/sources/ii_shift.h
Normal file
687
BaS_GNU/sources/ii_shift.h
Normal file
@@ -0,0 +1,687 @@
|
|||||||
|
/*****************************************************************************************/
|
||||||
|
// opertionen
|
||||||
|
/*****************************************************************************************/
|
||||||
|
ii_shift_lset:.macro
|
||||||
|
/******************************************************/
|
||||||
|
// byt
|
||||||
|
/******************************************************/
|
||||||
|
// asx.b #,dx
|
||||||
|
ii_lset_dx \1,00 // 0x1.22 -> z.B. 1=d2=4 ->0xd07c -> 0xde7c
|
||||||
|
ii_lset_dx \1,01
|
||||||
|
ii_lset_dx \1,02
|
||||||
|
ii_lset_dx \1,03
|
||||||
|
ii_lset_dx \1,04
|
||||||
|
ii_lset_dx \1,05
|
||||||
|
ii_lset_dx \1,06
|
||||||
|
ii_lset_dx \1,07
|
||||||
|
// lsx.b #,dx
|
||||||
|
ii_lset_dxu \1,08
|
||||||
|
ii_lset_dxu \1,09
|
||||||
|
ii_lset_dxu \1,0a
|
||||||
|
ii_lset_dxu \1,0b
|
||||||
|
ii_lset_dxu \1,0c
|
||||||
|
ii_lset_dxu \1,0d
|
||||||
|
ii_lset_dxu \1,0e
|
||||||
|
ii_lset_dxu \1,0f
|
||||||
|
// roxx.b #,dx
|
||||||
|
ii_lset_dx \1,10
|
||||||
|
ii_lset_dx \1,11
|
||||||
|
ii_lset_dx \1,12
|
||||||
|
ii_lset_dx \1,13
|
||||||
|
ii_lset_dx \1,14
|
||||||
|
ii_lset_dx \1,15
|
||||||
|
ii_lset_dx \1,16
|
||||||
|
ii_lset_dx \1,17
|
||||||
|
// rox.b #,dx
|
||||||
|
ii_lset_dx \1,18
|
||||||
|
ii_lset_dx \1,19
|
||||||
|
ii_lset_dx \1,1a
|
||||||
|
ii_lset_dx \1,1b
|
||||||
|
ii_lset_dx \1,1c
|
||||||
|
ii_lset_dx \1,1d
|
||||||
|
ii_lset_dx \1,1e
|
||||||
|
ii_lset_dx \1,1f
|
||||||
|
// asx.b dy,dx
|
||||||
|
ii_lset_dx \1,20
|
||||||
|
ii_lset_dx \1,21
|
||||||
|
ii_lset_dx \1,22
|
||||||
|
ii_lset_dx \1,23
|
||||||
|
ii_lset_dx \1,24
|
||||||
|
ii_lset_dx \1,25
|
||||||
|
ii_lset_dx \1,26
|
||||||
|
ii_lset_dx \1,27
|
||||||
|
// lsx.b dy,dx
|
||||||
|
ii_lset_dx \1,28
|
||||||
|
ii_lset_dx \1,29
|
||||||
|
ii_lset_dx \1,2a
|
||||||
|
ii_lset_dx \1,2b
|
||||||
|
ii_lset_dx \1,2c
|
||||||
|
ii_lset_dx \1,2d
|
||||||
|
ii_lset_dx \1,2e
|
||||||
|
ii_lset_dx \1,2f
|
||||||
|
// roxx.dy,dx
|
||||||
|
ii_lset_dx \1,30
|
||||||
|
ii_lset_dx \1,31
|
||||||
|
ii_lset_dx \1,32
|
||||||
|
ii_lset_dx \1,33
|
||||||
|
ii_lset_dx \1,34
|
||||||
|
ii_lset_dx \1,35
|
||||||
|
ii_lset_dx \1,36
|
||||||
|
ii_lset_dx \1,37
|
||||||
|
// rox.b dy,dx
|
||||||
|
ii_lset_dx \1,38
|
||||||
|
ii_lset_dx \1,39
|
||||||
|
ii_lset_dx \1,3a
|
||||||
|
ii_lset_dx \1,3b
|
||||||
|
ii_lset_dx \1,3c
|
||||||
|
ii_lset_dx \1,3d
|
||||||
|
ii_lset_dx \1,3e
|
||||||
|
ii_lset_dx \1,3f
|
||||||
|
/******************************************************/
|
||||||
|
// word
|
||||||
|
/******************************************************/
|
||||||
|
// asx.w #x,dx
|
||||||
|
ii_lset_dx \1,40 // 0x1.22 -> z.B. 1=d2=4 ->0xd07c -> 0xde7c
|
||||||
|
ii_lset_dx \1,41
|
||||||
|
ii_lset_dx \1,42
|
||||||
|
ii_lset_dx \1,43
|
||||||
|
ii_lset_dx \1,44
|
||||||
|
ii_lset_dx \1,45
|
||||||
|
ii_lset_dx \1,46
|
||||||
|
ii_lset_dx \1,47
|
||||||
|
// lsx.w #,dx
|
||||||
|
ii_lset_dx \1,48
|
||||||
|
ii_lset_dx \1,49
|
||||||
|
ii_lset_dx \1,4a
|
||||||
|
ii_lset_dx \1,4b
|
||||||
|
ii_lset_dx \1,4c
|
||||||
|
ii_lset_dx \1,4d
|
||||||
|
ii_lset_dx \1,4e
|
||||||
|
ii_lset_dx \1,4f
|
||||||
|
// roxx.w #,dx
|
||||||
|
ii_lset_dx \1,50
|
||||||
|
ii_lset_dx \1,51
|
||||||
|
ii_lset_dx \1,52
|
||||||
|
ii_lset_dx \1,53
|
||||||
|
ii_lset_dx \1,54
|
||||||
|
ii_lset_dx \1,55
|
||||||
|
ii_lset_dx \1,56
|
||||||
|
ii_lset_dx \1,57
|
||||||
|
// rox.w #xdx
|
||||||
|
ii_lset_dx \1,58
|
||||||
|
ii_lset_dx \1,59
|
||||||
|
ii_lset_dx \1,5a
|
||||||
|
ii_lset_dx \1,5b
|
||||||
|
ii_lset_dx \1,5c
|
||||||
|
ii_lset_dx \1,5d
|
||||||
|
ii_lset_dx \1,5e
|
||||||
|
ii_lset_dx \1,5f
|
||||||
|
// asx.w dy,dx
|
||||||
|
ii_lset_dx \1,60
|
||||||
|
ii_lset_dx \1,61
|
||||||
|
ii_lset_dx \1,62
|
||||||
|
ii_lset_dx \1,63
|
||||||
|
ii_lset_dx \1,64
|
||||||
|
ii_lset_dx \1,65
|
||||||
|
ii_lset_dx \1,66
|
||||||
|
ii_lset_dx \1,67
|
||||||
|
// lsx.w dy,dx
|
||||||
|
ii_lset_dx \1,68
|
||||||
|
ii_lset_dx \1,69
|
||||||
|
ii_lset_dx \1,6a
|
||||||
|
ii_lset_dx \1,6b
|
||||||
|
ii_lset_dx \1,6c
|
||||||
|
ii_lset_dx \1,6d
|
||||||
|
ii_lset_dx \1,6e
|
||||||
|
ii_lset_dx \1,6f
|
||||||
|
// roxx.w dy,dx
|
||||||
|
ii_lset_dx \1,70
|
||||||
|
ii_lset_dx \1,71
|
||||||
|
ii_lset_dx \1,72
|
||||||
|
ii_lset_dx \1,73
|
||||||
|
ii_lset_dx \1,74
|
||||||
|
ii_lset_dx \1,75
|
||||||
|
ii_lset_dx \1,76
|
||||||
|
ii_lset_dx \1,77
|
||||||
|
// rox.w dy,dx
|
||||||
|
ii_lset_dx \1,78
|
||||||
|
ii_lset_dx \1,79
|
||||||
|
ii_lset_dx \1,7a
|
||||||
|
ii_lset_dx \1,7b
|
||||||
|
ii_lset_dx \1,7c
|
||||||
|
ii_lset_dx \1,7d
|
||||||
|
ii_lset_dx \1,7e
|
||||||
|
ii_lset_dx \1,7f
|
||||||
|
/******************************************************/
|
||||||
|
// long
|
||||||
|
/******************************************************/
|
||||||
|
// roxx.l #,dx
|
||||||
|
ii_lset_dx \1,90
|
||||||
|
ii_lset_dx \1,91
|
||||||
|
ii_lset_dx \1,92
|
||||||
|
ii_lset_dx \1,93
|
||||||
|
ii_lset_dx \1,94
|
||||||
|
ii_lset_dx \1,95
|
||||||
|
ii_lset_dx \1,96
|
||||||
|
ii_lset_dx \1,97
|
||||||
|
// rox.l #xdx
|
||||||
|
ii_lset_dx \1,98
|
||||||
|
ii_lset_dx \1,99
|
||||||
|
ii_lset_dx \1,9a
|
||||||
|
ii_lset_dx \1,9b
|
||||||
|
ii_lset_dx \1,9c
|
||||||
|
ii_lset_dx \1,9d
|
||||||
|
ii_lset_dx \1,9e
|
||||||
|
ii_lset_dx \1,9f
|
||||||
|
// roxx.l dy,dx
|
||||||
|
ii_lset_dx \1,b0
|
||||||
|
ii_lset_dx \1,b1
|
||||||
|
ii_lset_dx \1,b2
|
||||||
|
ii_lset_dx \1,b3
|
||||||
|
ii_lset_dx \1,b4
|
||||||
|
ii_lset_dx \1,b5
|
||||||
|
ii_lset_dx \1,b6
|
||||||
|
ii_lset_dx \1,b7
|
||||||
|
// rox.l dy,dx
|
||||||
|
ii_lset_dx \1,b8
|
||||||
|
ii_lset_dx \1,b9
|
||||||
|
ii_lset_dx \1,ba
|
||||||
|
ii_lset_dx \1,bb
|
||||||
|
ii_lset_dx \1,bc
|
||||||
|
ii_lset_dx \1,bd
|
||||||
|
ii_lset_dx \1,be
|
||||||
|
ii_lset_dx \1,bf
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
// asr.w ea
|
||||||
|
ii_lset_opea \10,d // (ax), (ax)+
|
||||||
|
ii_lset_opea \10,e // -(ax),d16(ax)
|
||||||
|
ii_lset_opeag \10,f // d8(ax,dy)
|
||||||
|
lea table+0x\10\2f8*4,a0
|
||||||
|
move.l #ii_0x\10f8,(a0)+ // xxx.w
|
||||||
|
move.l #ii_0x\10f9,(a0)+ // xxx.l
|
||||||
|
// asl.w ea
|
||||||
|
ii_lset_opea \11,d // (ax), (ax)+
|
||||||
|
ii_lset_opea \11,e // -(ax),d16(ax)
|
||||||
|
ii_lset_opeag \11,f // d8(ax,dy)
|
||||||
|
lea table+0x\11\2f8*4,a0
|
||||||
|
move.l #ii_0x\11f8,(a0)+ // xxx.w
|
||||||
|
move.l #ii_0x\11f9,(a0)+ // xxx.l
|
||||||
|
// lsr.w ea
|
||||||
|
ii_lset_opea \12,d // (ax), (ax)+
|
||||||
|
ii_lset_opea \12,e // -(ax),d16(ax)
|
||||||
|
ii_lset_opeag \12,f // d8(ax,dy)
|
||||||
|
lea table+0x\12\2f8*4,a0
|
||||||
|
move.l #ii_0x\12f8,(a0)+ // xxx.w
|
||||||
|
move.l #ii_0x\12f9,(a0)+ // xxx.l
|
||||||
|
// lsr.w ea
|
||||||
|
ii_lset_opea \13,d // (ax), (ax)+
|
||||||
|
ii_lset_opea \13,e // -(ax),d16(ax)
|
||||||
|
ii_lset_opeag \13,f // d8(ax,dy)
|
||||||
|
lea table+0x\13\2f8*4,a0
|
||||||
|
move.l #ii_0x\13f8,(a0)+ // xxx.w
|
||||||
|
move.l #ii_0x\13f9,(a0)+ // xxx.l
|
||||||
|
// roxr.w ea
|
||||||
|
ii_lset_opea \14,d // (ax), (ax)+
|
||||||
|
ii_lset_opea \14,e // -(ax),d16(ax)
|
||||||
|
ii_lset_opeag \14,f // d8(ax,dy)
|
||||||
|
lea table+0x\14\2f8*4,a0
|
||||||
|
move.l #ii_0x\14f8,(a0)+ // xxx.w
|
||||||
|
move.l #ii_0x\14f9,(a0)+ // xxx.l
|
||||||
|
// roxl.w ea
|
||||||
|
ii_lset_opea \15,e // (ax), (ax)+
|
||||||
|
ii_lset_opea \15,e // -(ax),d16(ax)
|
||||||
|
ii_lset_opeag \15,f // d8(ax,dy)
|
||||||
|
lea table+0x\15\2f8*4,a0
|
||||||
|
move.l #ii_0x\15f8,(a0)+ // xxx.w
|
||||||
|
move.l #ii_0x\15f9,(a0)+ // xxx.l
|
||||||
|
// ror.w ea
|
||||||
|
ii_lset_opea \16,d // (ax), (ax)+
|
||||||
|
ii_lset_opea \16,e // -(ax),d16(ax)
|
||||||
|
ii_lset_opeag \16,f // d8(ax,dy)
|
||||||
|
lea table+0x\16\2f8*4,a0
|
||||||
|
move.l #ii_0x\16f8,(a0)+ // xxx.w
|
||||||
|
move.l #ii_0x\16f9,(a0)+ // xxx.l
|
||||||
|
// rol.w ea
|
||||||
|
ii_lset_opea \17,d // (ax), (ax)+
|
||||||
|
ii_lset_opea \17,e // -(ax),d16(ax)
|
||||||
|
ii_lset_opeag \17,f // d8(ax,dy)
|
||||||
|
lea table+0x\17\2f8*4,a0
|
||||||
|
move.l #ii_0x\17f8,(a0)+ // xxx.w
|
||||||
|
move.l #ii_0x\17f9,(a0)+ // xxx.l
|
||||||
|
// ende
|
||||||
|
.endm;
|
||||||
|
/******************************************************/
|
||||||
|
ii_shift_op:.macro // 1=code
|
||||||
|
//byt-------------------------------
|
||||||
|
//asx.b #x,dx
|
||||||
|
ii_shift_op2agb 0,as,a
|
||||||
|
//lsx.b #x,dx
|
||||||
|
ii_shift_op2aub 0,ls,a
|
||||||
|
//roxx.b #x,dx
|
||||||
|
ii_shift_op2agb 1,rox,a
|
||||||
|
//rox.b #x,dx
|
||||||
|
ii_shift_op2aub 1,ro,a
|
||||||
|
//asx.b dy,dx
|
||||||
|
ii_shift_op2agb 2,as,b
|
||||||
|
//lsx.b dy,dx
|
||||||
|
ii_shift_op2aub 2,ls,b
|
||||||
|
//roxx.b dy,dx
|
||||||
|
ii_shift_op2agb 3,rox,b
|
||||||
|
//rox.b dy,dx
|
||||||
|
ii_shift_op2aub 3,ro,b
|
||||||
|
// word ---------------------------------------
|
||||||
|
//asx.w #x,dx
|
||||||
|
ii_shift_op2agw 4,as,a
|
||||||
|
//lsx.w #x,dx
|
||||||
|
ii_shift_op2auw 4,ls,a
|
||||||
|
//roxx.w #x,dx
|
||||||
|
ii_shift_op2agw 5,rox,a
|
||||||
|
//rox.w #x,dx
|
||||||
|
ii_shift_op2auw 5,ro,a
|
||||||
|
//asx.w dy,dx
|
||||||
|
ii_shift_op2agw 6,as,b
|
||||||
|
//lsx.w dy,dx
|
||||||
|
ii_shift_op2auw 6,ls,b
|
||||||
|
//roxx.w dy,dx
|
||||||
|
ii_shift_op2agw 7,rox,b
|
||||||
|
//rox.w dy,dx
|
||||||
|
ii_shift_op2auw 7,ro,b
|
||||||
|
// long ---------------------------------------
|
||||||
|
//roxx.l #x,dx
|
||||||
|
ii_shift_op2agw 9,rox,a
|
||||||
|
//rox.l #x,dx
|
||||||
|
ii_shift_op2auw 9,ro,a
|
||||||
|
//roxx.l dy,dx
|
||||||
|
ii_shift_op2agw b,rox,b
|
||||||
|
//rox.l dy,dx
|
||||||
|
ii_shift_op2auw b,ro,b
|
||||||
|
// ea ---------------------------------------
|
||||||
|
//asr.w #1,ea
|
||||||
|
ii_shift_op2ea 0,asr
|
||||||
|
//asl.w #1,ea
|
||||||
|
ii_shift_op2ea 1,asl
|
||||||
|
//lsr.w #1,ea
|
||||||
|
ii_shift_op2ea 2,lsr,
|
||||||
|
//lsl.w #1,ea
|
||||||
|
ii_shift_op2ea 3,lsl
|
||||||
|
//roxr.w #1,ea
|
||||||
|
ii_shift_op2ea 4,roxr
|
||||||
|
//roxl.w #1,ea
|
||||||
|
ii_shift_op2ea 5,roxl
|
||||||
|
//ror.w #1,ea
|
||||||
|
ii_shift_op2ea 6,ror
|
||||||
|
//rol.w #1,ea
|
||||||
|
ii_shift_op2ea 7,rol
|
||||||
|
.endm
|
||||||
|
//byt ============================================
|
||||||
|
ii_shift_op2agb:.macro //byt: 1=code 2=operation 3=quick(a) oder register(b)
|
||||||
|
ii_shift_op1\3b \1,0,\2,d0_off+3(a7)
|
||||||
|
ii_shift_op1\3b \1,1,\2,d1_off+3(a7)
|
||||||
|
ii_shift_op1\3b \1,2,\2,d2
|
||||||
|
ii_shift_op1\3b \1,3,\2,d3
|
||||||
|
ii_shift_op1\3b \1,4,\2,d4
|
||||||
|
ii_shift_op1\3b \1,5,\2,d5
|
||||||
|
ii_shift_op1\3b \1,6,\2,d6
|
||||||
|
ii_shift_op1\3b \1,7,\2,d7
|
||||||
|
.endm
|
||||||
|
|
||||||
|
ii_shift_op2aub:.macro //byt: 1=code 2=operation
|
||||||
|
ii_shift_op1\3b \1,8,\2,d0_off+3(a7)
|
||||||
|
ii_shift_op1\3b \1,9,\2,d1_off+3(a7)
|
||||||
|
ii_shift_op1\3b \1,a,\2,d2
|
||||||
|
ii_shift_op1\3b \1,b,\2,d3
|
||||||
|
ii_shift_op1\3b \1,c,\2,d4
|
||||||
|
ii_shift_op1\3b \1,d,\2,d5
|
||||||
|
ii_shift_op1\3b \1,e,\2,d6
|
||||||
|
ii_shift_op1\3b \1,f,\2,d7
|
||||||
|
.endm
|
||||||
|
|
||||||
|
ii_shift_op1ab:.macro // z.B. asr.w. #x,dx 1=code 3.ziffer 2=code 4.ziffer 3=shift art 4=dx
|
||||||
|
ii_shift_op0 0\1\2,b,\3r,#8,\4
|
||||||
|
ii_shift_op0 2\1\2,b,\3r,#1,\4
|
||||||
|
ii_shift_op0 4\1\2,b,\3r,#2,\4
|
||||||
|
ii_shift_op0 6\1\2,b,\3r,#3,\4
|
||||||
|
ii_shift_op0 8\1\2,b,\3r,#4,\4
|
||||||
|
ii_shift_op0 a\1\2,b,\3r,#5,\4
|
||||||
|
ii_shift_op0 c\1\2,b,\3r,#6,\4
|
||||||
|
ii_shift_op0 e\1\2,b,\3r,#7,\4
|
||||||
|
ii_shift_op0 1\1\2,b,\3l,#8,\4
|
||||||
|
ii_shift_op0 3\1\2,b,\3l,#1,\4
|
||||||
|
ii_shift_op0 5\1\2,b,\3l,#2,\4
|
||||||
|
ii_shift_op0 7\1\2,b,\3l,#3,\4
|
||||||
|
ii_shift_op0 9\1\2,b,\3l,#4,\4
|
||||||
|
ii_shift_op0 b\1\2,b,\3l,#5,\4
|
||||||
|
ii_shift_op0 d\1\2,b,\3l,#6,\4
|
||||||
|
ii_shift_op0 f\1\2,b,\3l,#7,\4
|
||||||
|
.endm
|
||||||
|
|
||||||
|
ii_shift_op1bb:.macro // z.B. asr.w. #x,dx 1=code 3.ziffer 2=code 4.ziffer 3=shift art 4=dx
|
||||||
|
ii_shift_op0b 0\1\2,b,\3r,d0_off(a7),\4
|
||||||
|
ii_shift_op0b 2\1\2,b,\3r,d1_off(a7),\4
|
||||||
|
ii_shift_op0 4\1\2,b,\3r,d2,\4
|
||||||
|
ii_shift_op0 6\1\2,b,\3r,d3,\4
|
||||||
|
ii_shift_op0 8\1\2,b,\3r,d4,\4
|
||||||
|
ii_shift_op0 a\1\2,b,\3r,d5,\4
|
||||||
|
ii_shift_op0 c\1\2,b,\3r,d6,\4
|
||||||
|
ii_shift_op0 e\1\2,b,\3r,d7,\4
|
||||||
|
ii_shift_op0b 1\1\2,b,\3l,d0_off(a7),\4
|
||||||
|
ii_shift_op0b 3\1\2,b,\3l,d1_off(a7),\4
|
||||||
|
ii_shift_op0 5\1\2,b,\3l,d2,\4
|
||||||
|
ii_shift_op0 7\1\2,b,\3l,d3,\4
|
||||||
|
ii_shift_op0 9\1\2,b,\3l,d4,\4
|
||||||
|
ii_shift_op0 b\1\2,b,\3l,d5,\4
|
||||||
|
ii_shift_op0 d\1\2,b,\3l,d6,\4
|
||||||
|
ii_shift_op0 f\1\2,b,\3l,d7,\4
|
||||||
|
.endm
|
||||||
|
// word ---------------------------------------
|
||||||
|
ii_shift_op2agw:.macro //byt: 1=code 2=operation 3=quick(a) oder register(b)
|
||||||
|
ii_shift_op1\3w \1,0,\2,d0_off+2(a7)
|
||||||
|
ii_shift_op1\3w \1,1,\2,d1_off+2(a7)
|
||||||
|
ii_shift_op1\3w \1,2,\2,d2
|
||||||
|
ii_shift_op1\3w \1,3,\2,d3
|
||||||
|
ii_shift_op1\3w \1,4,\2,d4
|
||||||
|
ii_shift_op1\3w \1,5,\2,d5
|
||||||
|
ii_shift_op1\3w \1,6,\2,d6
|
||||||
|
ii_shift_op1\3w \1,7,\2,d7
|
||||||
|
.endm
|
||||||
|
|
||||||
|
ii_shift_op2auw:.macro //byt: 1=code 2=operation
|
||||||
|
ii_shift_op1\3w \1,8,\2,d0_off+2(a7)
|
||||||
|
ii_shift_op1\3w \1,9,\2,d1_off+2(a7)
|
||||||
|
ii_shift_op1\3w \1,a,\2,d2
|
||||||
|
ii_shift_op1\3w \1,b,\2,d3
|
||||||
|
ii_shift_op1\3w \1,c,\2,d4
|
||||||
|
ii_shift_op1\3w \1,d,\2,d5
|
||||||
|
ii_shift_op1\3w \1,e,\2,d6
|
||||||
|
ii_shift_op1\3w \1,f,\2,d7
|
||||||
|
.endm
|
||||||
|
|
||||||
|
ii_shift_op1aw:.macro // z.B. asr.w. #x,dx 1=code 3.ziffer 2=code 4.ziffer 3=shift art 4=dx
|
||||||
|
ii_shift_op0 0\1\2,w,\3r,#8,\4
|
||||||
|
ii_shift_op0 2\1\2,w,\3r,#1,\4
|
||||||
|
ii_shift_op0 4\1\2,w,\3r,#2,\4
|
||||||
|
ii_shift_op0 6\1\2,w,\3r,#3,\4
|
||||||
|
ii_shift_op0 8\1\2,w,\3r,#4,\4
|
||||||
|
ii_shift_op0 a\1\2,w,\3r,#5,\4
|
||||||
|
ii_shift_op0 c\1\2,w,\3r,#6,\4
|
||||||
|
ii_shift_op0 e\1\2,w,\3r,#7,\4
|
||||||
|
ii_shift_op0 1\1\2,w,\3l,#8,\4
|
||||||
|
ii_shift_op0 3\1\2,w,\3l,#1,\4
|
||||||
|
ii_shift_op0 5\1\2,w,\3l,#2,\4
|
||||||
|
ii_shift_op0 7\1\2,w,\3l,#3,\4
|
||||||
|
ii_shift_op0 9\1\2,w,\3l,#4,\4
|
||||||
|
ii_shift_op0 b\1\2,w,\3l,#5,\4
|
||||||
|
ii_shift_op0 d\1\2,w,\3l,#6,\4
|
||||||
|
ii_shift_op0 f\1\2,w,\3l,#7,\4
|
||||||
|
.endm
|
||||||
|
|
||||||
|
ii_shift_op1bw:.macro // z.B. asr.w. #x,dx 1=code 3.ziffer 2=code 4.ziffer 3=shift art 4=dx
|
||||||
|
ii_shift_op0b 0\1\2,w,\3r,d0_off(a7),\4
|
||||||
|
ii_shift_op0b 2\1\2,w,\3r,d1_off(a7),\4
|
||||||
|
ii_shift_op0 4\1\2,w,\3r,d2,\4
|
||||||
|
ii_shift_op0 6\1\2,w,\3r,d3,\4
|
||||||
|
ii_shift_op0 8\1\2,w,\3r,d4,\4
|
||||||
|
ii_shift_op0 a\1\2,w,\3r,d5,\4
|
||||||
|
ii_shift_op0 c\1\2,w,\3r,d6,\4
|
||||||
|
ii_shift_op0 e\1\2,w,\3r,d7,\4
|
||||||
|
ii_shift_op0b 1\1\2,w,\3l,d0_off(a7),\4
|
||||||
|
ii_shift_op0b 3\1\2,w,\3l,d1_off(a7),\4
|
||||||
|
ii_shift_op0 5\1\2,w,\3l,d2,\4
|
||||||
|
ii_shift_op0 7\1\2,w,\3l,d3,\4
|
||||||
|
ii_shift_op0 9\1\2,w,\3l,d4,\4
|
||||||
|
ii_shift_op0 b\1\2,w,\3l,d5,\4
|
||||||
|
ii_shift_op0 d\1\2,w,\3l,d6,\4
|
||||||
|
ii_shift_op0 f\1\2,w,\3l,d7,\4
|
||||||
|
.endm
|
||||||
|
// long ---------------------------------------
|
||||||
|
ii_shift_op2agl:.macro //byt: 1=code 2=operation 3=quick(a) oder register(b)
|
||||||
|
ii_shift_op1\3l \1,0,\2,d0_off(a7)
|
||||||
|
ii_shift_op1\3l \1,1,\2,d1_off(a7)
|
||||||
|
ii_shift_op1\3l \1,2,\2,d2
|
||||||
|
ii_shift_op1\3l \1,3,\2,d3
|
||||||
|
ii_shift_op1\3l \1,4,\2,d4
|
||||||
|
ii_shift_op1\3l \1,5,\2,d5
|
||||||
|
ii_shift_op1\3l \1,6,\2,d6
|
||||||
|
ii_shift_op1\3l \1,7,\2,d7
|
||||||
|
.endm
|
||||||
|
|
||||||
|
ii_shift_op2aul:.macro //byt: 1=code 2=operation
|
||||||
|
ii_shift_op1\3l \1,8,\2,d0_off(a7)
|
||||||
|
ii_shift_op1\3l \1,9,\2,d1_off(a7)
|
||||||
|
ii_shift_op1\3l \1,a,\2,d2
|
||||||
|
ii_shift_op1\3l \1,b,\2,d3
|
||||||
|
ii_shift_op1\3l \1,c,\2,d4
|
||||||
|
ii_shift_op1\3l \1,d,\2,d5
|
||||||
|
ii_shift_op1\3l \1,e,\2,d6
|
||||||
|
ii_shift_op1\3l \1,f,\2,d7
|
||||||
|
.endm
|
||||||
|
|
||||||
|
ii_shift_op1al:.macro // z.B. asr.w. #x,dx 1=code 3.ziffer 2=code 4.ziffer 3=shift art 4=dx
|
||||||
|
ii_shift_op0 0\1\2,l,\3r,#8,\4
|
||||||
|
ii_shift_op0 2\1\2,l,\3r,#1,\4
|
||||||
|
ii_shift_op0 4\1\2,l,\3r,#2,\4
|
||||||
|
ii_shift_op0 6\1\2,l,\3r,#3,\4
|
||||||
|
ii_shift_op0 8\1\2,l,\3r,#4,\4
|
||||||
|
ii_shift_op0 a\1\2,l,\3r,#5,\4
|
||||||
|
ii_shift_op0 c\1\2,l,\3r,#6,\4
|
||||||
|
ii_shift_op0 e\1\2,l,\3r,#7,\4
|
||||||
|
ii_shift_op0 1\1\2,l,\3l,#8,\4
|
||||||
|
ii_shift_op0 3\1\2,l,\3l,#1,\4
|
||||||
|
ii_shift_op0 5\1\2,l,\3l,#2,\4
|
||||||
|
ii_shift_op0 7\1\2,l,\3l,#3,\4
|
||||||
|
ii_shift_op0 9\1\2,l,\3l,#4,\4
|
||||||
|
ii_shift_op0 b\1\2,l,\3l,#5,\4
|
||||||
|
ii_shift_op0 d\1\2,l,\3l,#6,\4
|
||||||
|
ii_shift_op0 f\1\2,l,\3l,#7,\4
|
||||||
|
.endm
|
||||||
|
|
||||||
|
ii_shift_op1bl:.macro // z.B. asr.w. #x,dx 1=code 3.ziffer 2=code 4.ziffer 3=shift art 4=dx
|
||||||
|
ii_shift_op0b 0\1\2,l,\3r,d0_off(a7),\4
|
||||||
|
ii_shift_op0b 2\1\2,l,\3r,d1_off(a7),\4
|
||||||
|
ii_shift_op0 4\1\2,l,\3r,d2,\4
|
||||||
|
ii_shift_op0 6\1\2,l,\3r,d3,\4
|
||||||
|
ii_shift_op0 8\1\2,l,\3r,d4,\4
|
||||||
|
ii_shift_op0 a\1\2,l,\3r,d5,\4
|
||||||
|
ii_shift_op0 c\1\2,l,\3r,d6,\4
|
||||||
|
ii_shift_op0 e\1\2,l,\3r,d7,\4
|
||||||
|
ii_shift_op0b 1\1\2,l,\3l,d0_off(a7),\4
|
||||||
|
ii_shift_op0b 3\1\2,l,\3l,d1_off(a7),\4
|
||||||
|
ii_shift_op0 5\1\2,l,\3l,d2,\4
|
||||||
|
ii_shift_op0 7\1\2,l,\3l,d3,\4
|
||||||
|
ii_shift_op0 9\1\2,l,\3l,d4,\4
|
||||||
|
ii_shift_op0 b\1\2,l,\3l,d5,\4
|
||||||
|
ii_shift_op0 d\1\2,l,\3l,d6,\4
|
||||||
|
ii_shift_op0 f\1\2,l,\3l,d7,\4
|
||||||
|
.endm
|
||||||
|
// .word ea ============================================
|
||||||
|
ii_shift_op2ea:.macro //1=code 2.ziffer 2=shiftart
|
||||||
|
// (a0) bis (a7) ----------------------------
|
||||||
|
ii_0xe\1d0:
|
||||||
|
move.l a0_off(a7),a1
|
||||||
|
ii_shift_typ w,\2,#1,(a1),(a1).
|
||||||
|
ii_0xe\1d1:
|
||||||
|
move.l a1_off(a7),a1
|
||||||
|
ii_shift_typ w,\2,#1,(a1),(a1).
|
||||||
|
ii_0xe\1d2:
|
||||||
|
ii_shift_typ w,\2,#1,(a2),(a2).
|
||||||
|
ii_0xe\1d3:
|
||||||
|
ii_shift_typ w,\2,#1,(a3),(a3).
|
||||||
|
ii_0xe\1d4:
|
||||||
|
ii_shift_typ w,\2,#1,(a4),(a4).
|
||||||
|
ii_0xe\1d5:
|
||||||
|
ii_shift_typ w,\2,#1,(a5),(a5).
|
||||||
|
ii_0xe\1d6:
|
||||||
|
ii_shift_typ w,\2,#1,(a6),(a6).
|
||||||
|
ii_0xe\1d7:
|
||||||
|
move.l usp,a1
|
||||||
|
ii_shift_typ w,\2,#1,(a1),(a1).
|
||||||
|
// (a0)+ bis (a7)+ -----------------------------
|
||||||
|
ii_0xe\1d8:
|
||||||
|
move.l a0_off(a7),a1
|
||||||
|
addq.l #2,a0_off(a7)
|
||||||
|
ii_shift_typ w,\2,#1,(a1),(a1).
|
||||||
|
ii_0xe\1d9:
|
||||||
|
move.l a1_off(a7),a1
|
||||||
|
addq.l #2,a0_off(a7)
|
||||||
|
ii_shift_typ w,\2,#1,(a1),(a1).
|
||||||
|
ii_0xe\1da:
|
||||||
|
ii_shift_typ w,\2,#1,(a2),(a2)+.
|
||||||
|
ii_0xe\1db:
|
||||||
|
ii_shift_typ w,\2,#1,(a3),(a3)+
|
||||||
|
ii_0xe\1dc:
|
||||||
|
ii_shift_typ w,\2,#1,(a4),(a4)+
|
||||||
|
ii_0xe\1dd:
|
||||||
|
ii_shift_typ w,\2,#1,(a5),(a5)+
|
||||||
|
ii_0xe\1de:
|
||||||
|
ii_shift_typ w,\2,#1,(a6),(a6)+
|
||||||
|
ii_0xe\1df:
|
||||||
|
move.l usp,a1
|
||||||
|
addq.l #2,a1
|
||||||
|
move.l a1,usp
|
||||||
|
subq.l #2,a1
|
||||||
|
ii_shift_typ w,\2,#1,(a1),(a1).
|
||||||
|
// -(a0) bis -(a7) -----------------------------
|
||||||
|
ii_0xe\1e0:
|
||||||
|
move.l a0_off(a7),a1
|
||||||
|
subq.l #2,a1
|
||||||
|
move.l a1,a0_off(a7)
|
||||||
|
ii_shift_typ w,\2,#1,(a1),(a1).
|
||||||
|
ii_0xe\1e1:
|
||||||
|
move.l a1_off(a7),a1
|
||||||
|
subq.l #2,a1
|
||||||
|
move.l a1,a1_off(a7)
|
||||||
|
ii_shift_typ w,\2,#1,(a1),(a1).
|
||||||
|
ii_0xe\1e2:
|
||||||
|
ii_shift_typ w,\2,#1,-(a2),(a2).
|
||||||
|
ii_0xe\1e3:
|
||||||
|
ii_shift_typ w,\2,#1,-(a3),(a3)
|
||||||
|
ii_0xe\1e4:
|
||||||
|
ii_shift_typ w,\2,#1,-(a4),(a4)
|
||||||
|
ii_0xe\1e5:
|
||||||
|
ii_shift_typ w,\2,#1,-(a5),(a5)
|
||||||
|
ii_0xe\1e6:
|
||||||
|
ii_shift_typ w,\2,#1,-(a6),(a6)
|
||||||
|
ii_0xe\1e7:
|
||||||
|
move.l usp,a1
|
||||||
|
subq.l #2,a1
|
||||||
|
move.l a1,usp
|
||||||
|
ii_shift_typ w,\2,#1,(a1),(a1).
|
||||||
|
// d16(a0) bis d16(a7) -----------------------------
|
||||||
|
ii_0xe\1e8:
|
||||||
|
move.w (a0)+,a1
|
||||||
|
add.l a0_off(a7),a1
|
||||||
|
ii_shift_typ w,\2,#1,(a1),(a1).
|
||||||
|
ii_0xe\1e9:
|
||||||
|
move.w (a0)+,a1
|
||||||
|
add.l a1_off(a7),a1
|
||||||
|
ii_shift_typ w,\2,#1,(a1),(a1).
|
||||||
|
ii_0xe\1ea:
|
||||||
|
move.w (a0)+,a1
|
||||||
|
add.l a2,a1
|
||||||
|
ii_shift_typ w,\2,#1,(a1),(a1).
|
||||||
|
ii_0xe\1eb:
|
||||||
|
move.w (a0)+,a1
|
||||||
|
add.l a3,a1
|
||||||
|
ii_shift_typ w,\2,#1,(a1),(a1)
|
||||||
|
ii_0xe\1ec:
|
||||||
|
move.w (a0)+,a1
|
||||||
|
add.l a4,a1
|
||||||
|
ii_shift_typ w,\2,#1,(a1),(a1)
|
||||||
|
ii_0xe\1ed:
|
||||||
|
move.w (a0)+,a1
|
||||||
|
add.l a5,a1
|
||||||
|
ii_shift_typ w,\2,#1,(a1),(a1)
|
||||||
|
ii_0xe\1ee:
|
||||||
|
move.w (a0)+,a1
|
||||||
|
add.l a6,a1
|
||||||
|
ii_shift_typ w,\2,#1,(a1),(a1)
|
||||||
|
ii_0xe\1ef:
|
||||||
|
mvs.w (a0)+,d0
|
||||||
|
move.l usp,a1
|
||||||
|
add.l d0,a1
|
||||||
|
ii_shift_typ w,\2,#1,(a1),(a1).
|
||||||
|
// d8(a0,dy) bis d8(a7,dy) -----------------------------
|
||||||
|
ii_0xe\1f0:
|
||||||
|
move.l a0_off(a0),a1
|
||||||
|
jsr ewf
|
||||||
|
ii_shift_typ w,\2,#1,(a1),(a1).
|
||||||
|
ii_0xe\1f1:
|
||||||
|
move.l a1_off(a0),a1
|
||||||
|
jsr ewf
|
||||||
|
ii_shift_typ w,\2,#1,(a1),(a1).
|
||||||
|
ii_0xe\1f2:
|
||||||
|
move.l a2,a1
|
||||||
|
jsr ewf
|
||||||
|
ii_shift_typ w,\2,#1,(a1),(a1).
|
||||||
|
ii_0xe\1f3:
|
||||||
|
move.l a3,a1
|
||||||
|
jsr ewf
|
||||||
|
ii_shift_typ w,\2,#1,(a1),(a1).
|
||||||
|
ii_0xe\1f4:
|
||||||
|
move.l a4,a1
|
||||||
|
jsr ewf
|
||||||
|
ii_shift_typ w,\2,#1,(a1),(a1).
|
||||||
|
ii_0xe\1f5:
|
||||||
|
move.l a5,a1
|
||||||
|
jsr ewf
|
||||||
|
ii_shift_typ w,\2,#1,(a1),(a1).
|
||||||
|
ii_0xe\1f6:
|
||||||
|
move.l a6,a1
|
||||||
|
jsr ewf
|
||||||
|
ii_shift_typ w,\2,#1,(a1),(a1).
|
||||||
|
ii_0xe\1f7:
|
||||||
|
move.l usp,a1
|
||||||
|
jsr ewf
|
||||||
|
ii_shift_typ w,\2,#1,(a1),(a1).
|
||||||
|
// xxx.w xxx.l
|
||||||
|
ii_0xe\1f8:
|
||||||
|
move.w (a0)+,a1
|
||||||
|
ii_shift_typ w,\2,#1,(a1),(a1).
|
||||||
|
ii_0xe\1f9:
|
||||||
|
move.l (a0)+,a1
|
||||||
|
ii_shift_typ w,\2,#1,(a1),(a1).
|
||||||
|
.endm
|
||||||
|
//============================================================================
|
||||||
|
//subroutine
|
||||||
|
//------------------------------
|
||||||
|
ii_shift_op0:.macro // shift: 1=code 2=size 3=shift art 4=shift wert 5=ea
|
||||||
|
ii_0xe\1:
|
||||||
|
ii_shift_typ \2,\3,\4,\5,\5
|
||||||
|
.endm
|
||||||
|
|
||||||
|
ii_shift_op0b:.macro // shift wert nach d0 holen: 1=code 2=size 3=shift art 4=shift wert 5=ea
|
||||||
|
ii_0xe\1:
|
||||||
|
move.l \4,d0
|
||||||
|
ii_shift_typ \2,\3,d0,\5,\5
|
||||||
|
.endm
|
||||||
|
|
||||||
|
ii_shift_typ:.macro //1=size 2=shift art 3=shift wert 4=source 5=dest
|
||||||
|
#ifdef halten
|
||||||
|
halt
|
||||||
|
#endif
|
||||||
|
.ifc asr,\2
|
||||||
|
mvs.\1 \4,d1
|
||||||
|
.else
|
||||||
|
mvz.\1 \4,d1
|
||||||
|
.endif
|
||||||
|
.ifc roxr,\2
|
||||||
|
nop
|
||||||
|
.else
|
||||||
|
.ifc roxl,\2
|
||||||
|
nop
|
||||||
|
.else
|
||||||
|
.ifc ror,\2
|
||||||
|
nop
|
||||||
|
.else
|
||||||
|
.ifc rol,\2
|
||||||
|
nop
|
||||||
|
.else
|
||||||
|
\2.l \3,d1
|
||||||
|
.endif
|
||||||
|
.endif
|
||||||
|
.endif
|
||||||
|
.endif
|
||||||
|
set_cc0
|
||||||
|
move.\1 d1,\5
|
||||||
|
ii_end
|
||||||
|
.endm
|
||||||
584
BaS_GNU/sources/ii_sub.h
Normal file
584
BaS_GNU/sources/ii_sub.h
Normal file
@@ -0,0 +1,584 @@
|
|||||||
|
//--------------------------------------------------------------------
|
||||||
|
// 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<72>ck
|
||||||
|
mvs.w \1,d0
|
||||||
|
suba.l d0,\2
|
||||||
|
move.l d0_off(a7),d0
|
||||||
|
lea ii_ss(a7),a7 // stack erh<72>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<72>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<72>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;
|
||||||
|
//--------------------------------------------------------------------
|
||||||
328
BaS_GNU/sources/illegal_instruction.S
Normal file
328
BaS_GNU/sources/illegal_instruction.S
Normal file
@@ -0,0 +1,328 @@
|
|||||||
|
.global _illegal_instruction
|
||||||
|
.global _illegal_table_make
|
||||||
|
|
||||||
|
#include "startcf.h"
|
||||||
|
#include "ii_macro.h"
|
||||||
|
#include "ii_func.h"
|
||||||
|
#include "ii_op.h"
|
||||||
|
#include "ii_opc.h"
|
||||||
|
#include "ii_add.h"
|
||||||
|
#include "ii_sub.h"
|
||||||
|
#include "ii_or.h"
|
||||||
|
#include "ii_and.h"
|
||||||
|
#include "ii_dbcc.h"
|
||||||
|
#include "ii_shd.h"
|
||||||
|
#include "ii_movem.h"
|
||||||
|
#include "ii_lea.h"
|
||||||
|
#include "ii_shift.h"
|
||||||
|
#include "ii_exg.h"
|
||||||
|
#include "ii_movep.h"
|
||||||
|
#include "ii_ewf.h"
|
||||||
|
#include "ii_move.h"
|
||||||
|
|
||||||
|
.extern _ii_shift_vec
|
||||||
|
.extern ewf
|
||||||
|
|
||||||
|
/*******************************************************/
|
||||||
|
.text
|
||||||
|
ii_error:
|
||||||
|
nop
|
||||||
|
halt
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
|
||||||
|
_illegal_instruction:
|
||||||
|
#ifdef ii_on
|
||||||
|
move.w #0x2700,sr
|
||||||
|
lea -ii_ss(a7),a7
|
||||||
|
movem.l d0/d1/a0/a1,(a7)
|
||||||
|
move.l pc_off(a7),a0 // pc
|
||||||
|
mvz.w (a0)+,d0 // code
|
||||||
|
lea table,a1
|
||||||
|
move.l 0(a1,d0*4),a1
|
||||||
|
jmp (a1)
|
||||||
|
/*************************************************************************************************/
|
||||||
|
#endif
|
||||||
|
_illegal_table_make:
|
||||||
|
#ifdef ii_on
|
||||||
|
lea table,a0
|
||||||
|
moveq #0,d0
|
||||||
|
_itm_loop:
|
||||||
|
move.l #ii_error,(a0)+
|
||||||
|
addq.l #1,d0
|
||||||
|
cmp.l #0xF000,d0
|
||||||
|
bne _itm_loop
|
||||||
|
//-------------------------------------------------------------------------
|
||||||
|
ii_ewf_lset // diverse fehlende adressierungn
|
||||||
|
//-------------------------------------------------------------------------
|
||||||
|
// 0x0000
|
||||||
|
// ori
|
||||||
|
ii_lset_op 00
|
||||||
|
// andi
|
||||||
|
ii_lset_op 02
|
||||||
|
// subi
|
||||||
|
ii_lset_op 04
|
||||||
|
// addi
|
||||||
|
ii_lset_op 06
|
||||||
|
// eori
|
||||||
|
ii_lset_op 0a
|
||||||
|
// cmpi
|
||||||
|
ii_lset_op 0c
|
||||||
|
// movep
|
||||||
|
ii_movep_lset
|
||||||
|
//-------------------------------------------------------------------------
|
||||||
|
// 0x1000 move.b
|
||||||
|
// 0x2000 move.l
|
||||||
|
// 0x3000 move.w
|
||||||
|
ii_move_lset
|
||||||
|
//-------------------------------------------------------------------------
|
||||||
|
// 0x4000
|
||||||
|
//-------------------------------------------------------------------------
|
||||||
|
// negx
|
||||||
|
ii_lset_op 40
|
||||||
|
// neg
|
||||||
|
ii_lset_op 44
|
||||||
|
// not
|
||||||
|
ii_lset_op 46
|
||||||
|
//---------------------------------------------------------------------------------------------
|
||||||
|
// lea d8(ax,dy.w),az; d8(pc,dy.w),az
|
||||||
|
//-------------------------------------------------------------------
|
||||||
|
ii_lea_lset
|
||||||
|
//-------------------------------------------------------------------
|
||||||
|
// movem
|
||||||
|
//-------------------------------------------------------------------
|
||||||
|
ii_movem_lset
|
||||||
|
//-------------------------------------------------------------------------
|
||||||
|
// 0x5000
|
||||||
|
//-------------------------------------------------------------------------
|
||||||
|
// addq, subq
|
||||||
|
ii_lset_op 50
|
||||||
|
ii_lset_op 51
|
||||||
|
ii_lset_op 52
|
||||||
|
ii_lset_op 53
|
||||||
|
ii_lset_op 54
|
||||||
|
ii_lset_op 55
|
||||||
|
ii_lset_op 56
|
||||||
|
ii_lset_op 57
|
||||||
|
ii_lset_op 58
|
||||||
|
ii_lset_op 59
|
||||||
|
ii_lset_op 5a
|
||||||
|
ii_lset_op 5b
|
||||||
|
ii_lset_op 5c
|
||||||
|
ii_lset_op 5d
|
||||||
|
ii_lset_op 5e
|
||||||
|
ii_lset_op 5f
|
||||||
|
// dbcc
|
||||||
|
ii_lset_dbcc
|
||||||
|
// scc
|
||||||
|
ii_lset_opc 50
|
||||||
|
ii_lset_opc 51
|
||||||
|
ii_lset_opc 52
|
||||||
|
ii_lset_opc 53
|
||||||
|
ii_lset_opc 54
|
||||||
|
ii_lset_opc 55
|
||||||
|
ii_lset_opc 56
|
||||||
|
ii_lset_opc 57
|
||||||
|
ii_lset_opc 58
|
||||||
|
ii_lset_opc 59
|
||||||
|
ii_lset_opc 5a
|
||||||
|
ii_lset_opc 5b
|
||||||
|
ii_lset_opc 5c
|
||||||
|
ii_lset_opc 5d
|
||||||
|
ii_lset_opc 5e
|
||||||
|
ii_lset_opc 5f
|
||||||
|
//-------------------------------------------------------------------------
|
||||||
|
// 0x8000 or
|
||||||
|
//-------------------------------------------------------------------------
|
||||||
|
ii_lset_func 8
|
||||||
|
//-------------------------------------------------------------------------
|
||||||
|
// 0x9000 sub
|
||||||
|
//-------------------------------------------------------------------------
|
||||||
|
ii_lset_func 9
|
||||||
|
//-------------------------------------------------------------------------
|
||||||
|
// 0xb000
|
||||||
|
//-------------------------------------------------------------------------
|
||||||
|
// eor
|
||||||
|
ii_lset_op b1
|
||||||
|
ii_lset_op b3
|
||||||
|
ii_lset_op b5
|
||||||
|
ii_lset_op b7
|
||||||
|
ii_lset_op b9
|
||||||
|
ii_lset_op bb
|
||||||
|
ii_lset_op bd
|
||||||
|
ii_lset_op bf
|
||||||
|
//-------------------------------------------------------------------------
|
||||||
|
// 0xc000
|
||||||
|
//-------------------------------------------------------------------------
|
||||||
|
// and
|
||||||
|
ii_lset_func c
|
||||||
|
// exg
|
||||||
|
ii_exg_lset
|
||||||
|
//-------------------------------------------------------------------------
|
||||||
|
// 0xd000 add
|
||||||
|
//-------------------------------------------------------------------------
|
||||||
|
ii_lset_func d
|
||||||
|
//-------------------------------------------------------------------------
|
||||||
|
// 0xe000
|
||||||
|
//-------------------------------------------------------------------------
|
||||||
|
// shift register
|
||||||
|
ii_shift_lset e
|
||||||
|
//-------------------------------------------------
|
||||||
|
// differenz zwischen orginal und gemoved korrigieren
|
||||||
|
lea ii_error(pc),a1
|
||||||
|
move.l a1,d1
|
||||||
|
sub.l #ii_error,d1
|
||||||
|
lea table,a0
|
||||||
|
moveq #0,d0
|
||||||
|
_itkorr_loop:
|
||||||
|
add.l d1,(a0)+
|
||||||
|
addq.l #1,d0
|
||||||
|
cmp.l #0xF000,d0
|
||||||
|
bne _itkorr_loop
|
||||||
|
#endif
|
||||||
|
rts
|
||||||
|
#ifdef ii_on
|
||||||
|
//***********************************************************************************/
|
||||||
|
//-------------------------------------------------------------------------
|
||||||
|
ii_ewf_func // diverse fehlende adressierungn
|
||||||
|
//-------------------------------------------------------------------------
|
||||||
|
//---------------------------------------------------------------------------------------------
|
||||||
|
// 0x0000
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
// ori 00
|
||||||
|
ii_op 00,or.l,i
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
// andi 02
|
||||||
|
ii_op 02,and.l,i
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
// subi 04
|
||||||
|
ii_op 04,and.l,i
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
// addi 06
|
||||||
|
ii_op 06,add.l,i
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
// eori 0a
|
||||||
|
ii_op 0a,eor.l,i
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
// cmpi 0c
|
||||||
|
ii_op 0c,cmp.l,i
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
// movep
|
||||||
|
ii_movep_func
|
||||||
|
///---------------------------------------------------------------------------------------------
|
||||||
|
// 0x1000 move.b
|
||||||
|
// 0x2000 move.l
|
||||||
|
// 0x3000 move.w
|
||||||
|
ii_move_op
|
||||||
|
//---------------------------------------------------------------------------------------------
|
||||||
|
// 0x4000
|
||||||
|
//---------------------------------------------------------------------------------------------
|
||||||
|
// neg 0x40..
|
||||||
|
ii_op 40,negx.l,n
|
||||||
|
//---------------------------------------------------------------------------------------------
|
||||||
|
// neg 0x44..
|
||||||
|
ii_op 44,neg.l,n
|
||||||
|
//---------------------------------------------------------------------------------------------
|
||||||
|
// not 0x46..
|
||||||
|
ii_op 46,not.l,n
|
||||||
|
//---------------------------------------------------------------------------------------------
|
||||||
|
// lea d8(ax,dy.w),az; d8(pc,dy.w),az
|
||||||
|
//-------------------------------------------------------------------
|
||||||
|
ii_lea_func
|
||||||
|
//-------------------------------------------------------------------
|
||||||
|
// movem
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
ii_movem_func
|
||||||
|
//---------------------------------------------------------------------------------------------
|
||||||
|
// 0x5000
|
||||||
|
//---------------------------------------------------------------------------------------------
|
||||||
|
//dbcc
|
||||||
|
ii_dbcc_func
|
||||||
|
// addq 0x5...
|
||||||
|
ii_op 50,addq.l #8,q
|
||||||
|
ii_op 52,addq.l #1,q
|
||||||
|
ii_op 54,addq.l #2,q
|
||||||
|
ii_op 56,addq.l #3,q
|
||||||
|
ii_op 58,addq.l #4,q
|
||||||
|
ii_op 5a,addq.l #5,q
|
||||||
|
ii_op 5c,addq.l #6,q
|
||||||
|
ii_op 5e,addq.l #7,q
|
||||||
|
//---------------------------------------------------------------------------------------------
|
||||||
|
// subq 0x5...
|
||||||
|
ii_op 51,subq.l #8,q
|
||||||
|
ii_op 53,subq.l #1,q
|
||||||
|
ii_op 55,subq.l #2,q
|
||||||
|
ii_op 57,subq.l #3,q
|
||||||
|
ii_op 59,subq.l #4,q
|
||||||
|
ii_op 5b,subq.l #5,q
|
||||||
|
ii_op 5d,subq.l #6,q
|
||||||
|
ii_op 5f,subq.l #7,q
|
||||||
|
//---------------------------------------------------------------------------------------------
|
||||||
|
// 0x5... scc
|
||||||
|
ii_opc 50,st,c
|
||||||
|
ii_opc 51,sf,c
|
||||||
|
ii_opc 52,shi,c
|
||||||
|
ii_opc 53,sls,c
|
||||||
|
ii_opc 54,scc,c
|
||||||
|
ii_opc 55,scs,c
|
||||||
|
ii_opc 56,sne,c
|
||||||
|
ii_opc 57,seq,c
|
||||||
|
ii_opc 58,svc,c
|
||||||
|
ii_opc 59,svs,c
|
||||||
|
ii_opc 5a,spl,c
|
||||||
|
ii_opc 5b,smi,c
|
||||||
|
ii_opc 5c,sge,c
|
||||||
|
ii_opc 5d,slt,c
|
||||||
|
ii_opc 5e,sgt,c
|
||||||
|
ii_opc 5f,sle,c
|
||||||
|
//---------------------------------------------------------------------------------------------
|
||||||
|
// 0x6000
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
//---------------------------------------------------------------------------------------------
|
||||||
|
// 0x7000
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
//---------------------------------------------------------------------------------------------
|
||||||
|
// 0x8000
|
||||||
|
//---------------------------------------------------------------------------------------------
|
||||||
|
// or
|
||||||
|
ii_func 8,or
|
||||||
|
//---------------------------------------------------------------------------------------------
|
||||||
|
// 0x9000
|
||||||
|
//---------------------------------------------------------------------------------------------
|
||||||
|
// sub
|
||||||
|
ii_func 9,sub
|
||||||
|
//---------------------------------------------------------------------------------------------
|
||||||
|
// 0xa000
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
//---------------------------------------------------------------------------------------------
|
||||||
|
// 0xb000
|
||||||
|
//---------------------------------------------------------------------------------------------
|
||||||
|
// eor
|
||||||
|
ii_op b1,eor.l d0,q
|
||||||
|
ii_op b3,eor.l d1,q
|
||||||
|
ii_op b5,eor.l d2,q
|
||||||
|
ii_op b7,eor.l d3,q
|
||||||
|
ii_op b9,eor.l d4,q
|
||||||
|
ii_op bb,eor.l d5,q
|
||||||
|
ii_op bd,eor.l d6,q
|
||||||
|
ii_op bf,eor.l d7,q
|
||||||
|
//---------------------------------------------------------------------------------------------
|
||||||
|
// 0xc000
|
||||||
|
//---------------------------------------------------------------------------------------------
|
||||||
|
// and
|
||||||
|
ii_func c,and
|
||||||
|
// exg
|
||||||
|
ii_exg_func
|
||||||
|
//---------------------------------------------------------------------------------------------
|
||||||
|
// 0xd000
|
||||||
|
//---------------------------------------------------------------------------------------------
|
||||||
|
// add
|
||||||
|
ii_func d,add
|
||||||
|
//---------------------------------------------------------------------------------------------
|
||||||
|
// 0xe000 shift
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
ii_shift_op
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
// 0xf000
|
||||||
|
//--------------------------------------------------------------------
|
||||||
|
#endif
|
||||||
Reference in New Issue
Block a user