Sync from Fredi's source tree 13/05/2017
This commit is contained in:
247
headers/ii_shd.h
Normal file
247
headers/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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user