;;;;;
;;;;; 186 and NEC instructions for ASM86
;;;;;
;;;
;;; 186 instruction set
;;;
CodeMacro pusha
db 60h
EndM
CodeMacro popa
db 61h
EndM
CodeMacro bound reg:Rw,mem:Mw
segfix mem
db 62h
modrm reg,mem
EndM
CodeMacro push imm:Dw
db 68h
dw imm
EndM
CodeMacro imul dst:Rw,src:Ew,mpy:Dw
segfix src
db 69h
modrm dst,src
dw mpy
EndM
CodeMacro push imm:Dsb
db 6ah
db imm
EndM
CodeMacro imul dst:Rw,src:Ew,mpy:Dsb
segfix src
db 6bh
modrm dst,src
db mpy
EndM
CodeMacro insb
db 6ch
EndM
CodeMacro insw
db 6dh
EndM
CodeMacro outsb
db 6eh
EndM
CodeMacro outsw
db 6fh
EndM
CodeMacro outs port:Rw(DX),src:Eb
segfix src
db 6eh
EndM
CodeMacro outs port:Rw(DX),src:Ew
segfix src
db 6fh
EndM
CodeMacro rol dst:Eb,cnt:Db
segfix dst
db 0c0h
modrm 0,dst
db cnt
EndM
CodeMacro ror dst:Eb,cnt:Db
segfix dst
db 0c0h
modrm 1,dst
db cnt
EndM
CodeMacro rcl dst:Eb,cnt:Db
segfix dst
db 0c0h
modrm 2,dst
db cnt
EndM
CodeMacro rcr dst:Eb,cnt:Db
segfix dst
db 0c0h
modrm 3,dst
db cnt
EndM
CodeMacro shl186 dst:Eb,cnt:Db
segfix dst
db 0c0h
modrm 4,dst
db cnt
EndM
CodeMacro shr186 dst:Eb,cnt:Db
segfix dst
db 0c0h
modrm 5,dst
db cnt
EndM
CodeMacro sar dst:Eb,cnt:Db
segfix dst
db 0c0h
modrm 7,dst
db cnt
EndM
CodeMacro rol dst:Ew,cnt:Db
segfix dst
db 0c1h
modrm 0,dst
db cnt
EndM
CodeMacro ror dst:Ew,cnt:Db
segfix dst
db 0c1h
modrm 1,dst
db cnt
EndM
CodeMacro rcl dst:Ew,cnt:Db
segfix dst
db 0c1h
modrm 2,dst
db cnt
EndM
CodeMacro rcr dst:Ew,cnt:Db
segfix dst
db 0c1h
modrm 3,dst
db cnt
EndM
CodeMacro shl186 dst:Ew,cnt:Db
segfix dst
db 0c1h
modrm 4,dst
db cnt
EndM
CodeMacro shr186 dst:Ew,cnt:Db
segfix dst
db 0c1h
modrm 5,dst
db cnt
EndM
CodeMacro sar dst:Ew,cnt:Db
segfix dst
db 0c1h
modrm 7,dst
db cnt
EndM
CodeMacro enter siz:D,lev:Db
db 0c8h
dw siz
db lev
EndM
CodeMacro leave
db 0c9h
EndM
;;; Workaround:
;;; Code macro names of "SHL" and "SHR" conflict with operators
;;; This problem does not occur with equates to already defined macro
;shl equ shl186
;shr equ shr186
;;;
;;; NEC Vxx instruction set
;;;
CodeMacro test1 dst:Eb,bit:Rb(CL)
segfix dst
db 0fh
db 10h
modrm 0,dst
EndM
CodeMacro test1 dst:Ew,bit:Rb(CL)
segfix dst
db 0fh
db 11h
modrm 0,dst
EndM
CodeMacro test1 dst:Eb,bit:Db(0,7)
segfix dst
db 0fh
db 18h
modrm 0,dst
db bit
EndM
CodeMacro test1 dst:Ew,bit:Db(0,15)
segfix dst
db 0fh
db 19h
modrm 0,dst
db bit
EndM
CodeMacro clr1 dst:Eb,bit:Rb(CL)
segfix dst
db 0fh
db 12h
modrm 0,dst
EndM
CodeMacro clr1 dst:Ew,bit:Rb(CL)
segfix dst
db 0fh
db 13h
modrm 0,dst
EndM
CodeMacro clr1 dst:Eb,bit:Db(0,7)
segfix dst
db 0fh
db 1ah
modrm 0,dst
db bit
EndM
CodeMacro clr1 dst:Ew,bit:Db(0,15)
segfix dst
db 0fh
db 1bh
modrm 0,dst
db bit
EndM
CodeMacro set1 dst:Eb,bit:Rb(CL)
segfix dst
db 0fh
db 14h
modrm 0,dst
EndM
CodeMacro set1 dst:Ew,bit:Rb(CL)
segfix dst
db 0fh
db 15h
modrm 0,dst
EndM
CodeMacro set1 dst:Eb,bit:Db(0,7)
segfix dst
db 0fh
db 1ch
modrm 0,dst
db bit
EndM
CodeMacro set1 dst:Ew,bit:Db(0,15)
segfix dst
db 0fh
db 1dh
modrm 0,dst
db bit
EndM
CodeMacro not1 dst:Eb,bit:Rb(CL)
segfix dst
db 0fh
db 16h
modrm 0,dst
EndM
CodeMacro not1 dst:Ew,bit:Rb(CL)
segfix dst
db 0fh
db 17h
modrm 0,dst
EndM
CodeMacro not1 dst:Eb,bit:Db(0,7)
segfix dst
db 0fh
db 1eh
modrm 0,dst
db bit
EndM
CodeMacro not1 dst:Ew,bit:Db(0,15)
segfix dst
db 0fh
db 1fh
modrm 0,dst
db bit
EndM
CodeMacro add4s
db 0fh
db 20h
EndM
CodeMacro add4s dst:Eb,src:Eb
nosegfix es,dst
segfix src
db 0fh
db 20h
EndM
CodeMacro sub4s
db 0fh
db 22h
EndM
CodeMacro sub4s dst:Eb,src:Eb
nosegfix es,dst
segfix src
db 0fh
db 22h
EndM
CodeMacro cmp4s
db 0fh
db 26h
EndM
CodeMacro cmp4s dst:Eb,src:Eb
nosegfix es,dst
segfix src
db 0fh
db 26h
EndM
CodeMacro rol4 dst:Eb
segfix dst
db 0fh
db 28h
modrm 0,dst
EndM
CodeMacro ror4 dst:Eb
segfix dst
db 0fh
db 2ah
modrm 0,dst
EndM
CodeMacro ins dst:Rb,src:Rb
db 0fh
db 31h
modrm src,dst
EndM
CodeMacro ins dst:Rb,src:Db(0,15)
db 0fh
db 39h
modrm 0,dst
db src
EndM
CodeMacro ext dst:Rb,src:Rb
db 0fh
db 33h
modrm src,dst
EndM
CodeMacro ext dst:Rb,src:Db(0,15)
db 0fh
db 3bh
modrm 0,dst
db src
EndM
CodeMacro brkem vec:Db
db 0fh
db 0ffh
db vec
EndM
CodeMacro repnc
db 64h
EndM
CodeMacro repc
db 65h
EndM
;;; only in 8080 emulation mode:
CodeMacro calln vec:Db
db 0edh
db 0edh
db vec
EndM
CodeMacro retem
db 0edh
db 0fdh
EndM