(*
 * This Module helps writing inline code for 68000 & 68010 Microprocessors.
 *
 * ATTENTION: Certain commands are only available on a MC68010.
 *            Please consult the "M68000 Programmer's Reference Manual".
 *)
 
(*$M- no implementation Module *)
DEFINITION MODULE Assembler;

CONST

(* Register *)

 d0=0; d1=1; d2=2; d3=3; d4=4; d5=5; d6=6; d7=7;
 a0=0; a1=1; a2=2; a3=3; a4=4; a5=5; a6=6; a7=7;

(* Bits in Condition Code Register *)
 
 nbit=8; zbit=4; vbit=2; cbit=1;

(* Addressing Modes *)

 ddir=00B; (* Dn *)
 adir=10B; (* An *)
 aidr=20B; (* (An) *)
 ainc=30B; (* (An)+ *)
 adec=40B; (* -(An) *)
 aoff=50B; (* d16(An) *)
 aidx=60B; (* d8(An,Rx) *)
 absW=70B; (* abs.W *)
 absL=71B; (* abs.L *)
 prel=72B; (* d16(PC) *)
 imm =74B; (* #n *)

(* Shift values *)

 ls0=1; ls1=2; ls2=4; ls3=8;  ls4=10H; ls5=20H;  ls6=40H; ls7=80H; 
 ls8=100H; ls9=200H;  ls10=400H; ls11=800H;
 ls12=1000H; ls13=2000H; ls14=4000H; ls15=8000H;

(* MC68000 instruction mnemonics. *)

 abcdB=140400B; abcdmB=140410B;
 addB=150000B; addW=150100B; addL=150200B;
 addmB=150400B; addmW=150500B; addmL=150600B;
 addaW=150300B; addaL=150700B;
 addiB=003000B; addiW=003100B; addiL=003200B;
 addqB=050000B; addqW=050100B; addqL=050200B;
 addxB=150400B; addxW=150500B; addxL=150600B;
 addxmB=150410B; addxmW=150510B; addxmL=150610B;
 andB=140000B; andW=140100B; andL=140200B;
 andmB=140400B; andmW=140500B; andmL=140600B;
 andiB=001000B; andiW=001100B; andiL=001200B;
 andiCCR=001074B; andiSR=001174B;
 aslB=160440B; aslW=160540B; aslL=160640B;
 asliB=160400B; asliW=160500B; asliL=160600B;
 aslmW=160700B;
 asrB=160040B; asrW=160140B; asrL=160240B;
 asriB=160000B; asriW=160100B; asriL=160200B;
 asrmW=160300B;
 bcc=062000B; bcs=062400B; beq=063400B; bge=066000B; bgt=067000B;
 bhi=061000B; ble=067400B; bls=061400B; blt=066400B; bmi=065400B;
 bne=063000B; bpl=065000B; bvc=064000B; bvs=064400B;
 bchg=000500B; bchgi=004100B;
 bclr=000600B; bclri=004200B;
(* bkpt=044110B; *)
 bra=060000B;
 bset=000700B; bseti=004300B;
 bsr=060400B;
 btst=000400B; btsti=004000B;
 chkW=040600B;
 clrB=041000B; clrW=041100B; clrL=041200B;
 cmpB=130000B; cmpW=130100B; cmpL=130200B;
 cmpaW=130300B; cmpaL=130700B;
 cmpiB=006000B; cmpiW=006100B; cmpiL=006200B;
 cmpmB=130410B; cmpmW=130510B; cmpmL=130610B;
 dbcc=052310B; dbcs=052710B; dbeq=053710B; dbf=050710B; dbge=056310B;
 dbgt=057310B; dbhi=051310B; dble=057710B; dbls=051710B; dblt=056710B;
 dbmi=055710B; dbne=053310B; dbpl=055310B; dbt=050310B; dbvc=054310B;
 dbvs=054710B;
 dbra=050710B;
 divsW=100700B;
 divuW=100300B;
 eorB=130400B; eorW=130500B; eorL=130600B;
 eoriB=005000B; eoriW=005100B; eoriL=005200B;
 eoriCCR=005074B; eoriSR=005174B;
 exgAA=140510B; exgDA=140610B; exgDD=140500B;
 extW=044200B; extL=044300B;
 illegal=045374B;
 jmp=047300B;
 jsr=047200B;
 lea=040700B;
 linkW=047120B;
 lslB=160450B; lslW=160550B; lslL=160650B;
 lsliB=160410B; lsliW=160510B; lsliL=160610B;
 lslmW=161700B;
 lsrB=160050B; lsrW=160150B; lsrL=160250B;
 lsriB=160010B; lsriW=160110B; lsriL=160210B;
 lsrmW=161300B;
 moveB=010000B; moveW=030000B; moveL=020000B;
 moveCCRfr=041300B; moveCCRto=042300B;
 moveSRfr=040300B; moveSRto=043300B;
 moveUSPfr=047150B; moveUSPto=047140B;
 moveaW=030100B; moveaL=020100B;
 movecLfr=047172B; movecLto=047173B;
 movemW=046200B; movemL=046300B;
 movemmW=044200B; movemmL=044300B;
 movepW=000410B; movepL=000510B;
 movepmW=000610B; movepmL=000710B;
 moveqL=070000B;
 movesB=007000B; movesW=007100B; movesL=007200B;
 mulsW=140700B;
 muluW=140300B;
 nbcdB=044000B;
 negB=042000B; negW=042100B; negL=042200B;
 negxB=040000B; negxW=040100B; negxL=040200B;
 nop=047161B;
 notB=043000B; notW=043100B; notL=043200B;
 orB=100000B; orW=100100B; orL=100200B;
 ormB=100400B; ormW=100500B; ormL=100600B;
 oriB=000000B; oriW=000100B; oriL=000200B;
 oriCCR=000074B;
 oriSR=000174B;
 pea=044100B;
 reset=047160B;
 rolB=160470B; rolW=160570B; rolL=160670B;
 roliB=160430B; roliW=160530B; roliL=160630B;
 rolmW=163700B;
 rorB=160070B; rorW=160170B; rorL=160270B;
 roriB=160030B; roriW=160130B; roriL=160230B;
 rormW=163300B;
 roxlB=160460B; roxlW=160560B; roxlL=160660B;
 roxliB=160420B; roxliW=160520B; roxliL=160620B;
 roxlmW=162700B;
 roxrB=160060B; roxrW=160160B; roxrL=160260B;
 roxriB=160020B; roxriW=160120B; roxriL=160220B;
 roxrmW=162300B;
 rtd=047164B; rte=047163B; rtr=047167B; rts=047165B;
 sbcdB=100400B;
 sbcdmB=100410B;
 scc=052300B; scs=052700B; seq=053700B; sf=050700B; sge=056300B;
 sgt=057300B; shi=051300B; sle=057700B; sls=051700B; slt=056700B;
 smi=055700B; sne=053300B; spl=055300B; st=050300B; svc=054300B;
 svs=054700B;
 stop=047162B;
 subB=110000B; subW=110100B; subL=110200B;
 submB=110400B; submW=110500B; submL=110600B;
 subaW=110300B; subaL=110700B;
 subiB=002000B; subiW=002100B; subiL=002200B;
 subqB=050400B; subqW=050500B; subqL=050600B;
 subxB=110400B; subxW=110500B; subxL=110600B;
 subxmB=110410B; subxmW=110510B; subxmL=110610B;
 swapW=044100B;
 tasB=045300B;
 trap=047100B; trapv=047166B;
 tstB=045000B; tstW=045100B; tstL=045200B;
 unlk=047130B;
 
END Assembler.
