* undoc.hca ; HardCore Assembler macros ; for assembling illegal (undocumented) 6502 commands ; written by Epi/Tristesse^O.S. * _preset ; resets index registers in ,0 modes _preset mac ift .?1&$0240=$0240 ldx #0 eli .?1&$0280=$0280 ldy #0 eif emc * _postdi ; increments or decrements index registers ; depending on addressing mode: ,y- ,y+ ,x- or ,x+ _postdi mac ift .?1&$0880=$0880 dey eli .?1&$0480=$0480 iny eli .?1&$0840=$0840 dex eli .?1&$0440=$0440 inx eif emc * _maing ; ASO, RLN, LSE, RRD, DCP, ISB _maing mac ert .0<2 .mode equ .?1&$61ff .upd equ .?1&$1000!=0 _preset .1 ift .mode=$4000 dta .2|$0f :.upd dta v(.!1) :!.upd dta a(.!1) eli .mode=$0000 dta .2|$07,.!1 eli .mode=$0040 dta .2|$17,.!1 eli .mode=$4040 dta .2|$1f :.upd dta v(.!1) :!.upd dta a(.!1) eli .mode&$2fff=$0080 dta .2|$1b :.upd dta v(.!1) :!.upd dta a(.!1) eli .mode=$0054 dta .2|$03,.!1 eli .mode=$0094 dta .2|$13,.!1 els ert 1 eif _postdi .1 emc * _immed ; ANC, ALR, ARR, ANE, ANX, SBX, SBB _immed mac ert .0<2 ert .?1!=$0001 dta .2,.!1 emc * _yindex ; LAS, SHS, SHX _yindex mac ert .0<2 ert .?1&$2fff!=$0080 dta .2,a(.!1) emc * ASO ; Arithmetic Shift left/Or with accumulator aso mac _maing .1 $00 emc * RLN ; Rotate Left/aNd with accumulator rln mac _maing .1 $20 emc * LSE ; Logical Shift right/Ex-or with accumulator lse mac _maing .1 $40 emc * RRD ; Rotate Right/aDd to accumulator rrd mac _maing .1 $60 emc * SAX ; Store Accumulator and X register sax mac ert .0<1 .mode equ .?1&$61ff .upd equ .?1&$1000!=0 _preset .1 ift .mode=$4000 dta $8f :.upd dta v(.!1) :!.upd dta a(.!1) eli .mode=$0000 dta $87,.!1 eli .mode=$0080 dta $97,.!1 eli .mode=$0054 dta $83,.!1 els ert 1 eif _postdi .1 emc * LAX ; Load Accumulator and X register lax mac ert .0<1 .mode equ .?1&$61ff .upd equ .?1&$1000!=0 _preset .1 ift .mode=$4000 dta $af :.upd dta v(.!1) :!.upd dta a(.!1) eli .mode=$0000 dta $a7,.!1 eli .mode=$0080 dta $b7,.!1 eli .mode=$4080 dta $bf :.upd dta v(.!1) :!.upd dta a(.!1) eli .mode=$0054 dta $a3,.!1 eli .mode=$0094 dta $b3,.!1 els ert 1 eif _postdi .1 emc * DCP ; Decrement/ComPare with accumulator dcp mac _maing .1 $c0 emc * ISB ; Increment/SuBtract from accumulator isb mac _maing .1 $e0 emc * ANC ; ANd with accumulator/copy Carry flag anc mac _immed .1 $0b emc * ALR ; And with accumulator/Logical shift Right alr mac _immed .1 $4b emc * ARR ; And with accumulator/Rotate Right arr mac _immed .1 $6b emc * ANE ; And accumulator with X register ane mac _immed .1 $8b emc * ANX ; ANd with accumulator/transfer to X register anx mac _immed .1 $ab emc * SBX ; and with accumulator/SuBtract from X register sbx mac _immed .1 $cb emc * LAS ; and with stack pointer/Load to Accumulator, x and Sp registers las mac _yindex .1 $bb emc * SHA ; Store incremented High byte and x and Accumulator sha mac ert .0<1 ift .?1&$2fff=$0080 dta $9f,a(.!1) eli .?1=$0094 dta $93,.!1 els ert 1 eif emc * SHS ; Store incremented High byte and x and accumulator, transfer to Stack pointer shs mac _yindex .1 $9b emc * SHX ; Store incremented High byte and X shx mac _yindex .1 $9e emc * SHY ; Store incremented High byte and Y shy mac ert .0<1 ert .?1&$2fff!=$0040 dta $9c,a(.!1) emc * SBB ; SuBtract with Borrow (same as sbc) sbb mac _immed .1 $eb emc * NPO ; No OPeration npo mac ert .0<1 .mode equ .?1&$61ff ift .mode=$0002 dta $1a eli .mode=$0001 dta $89,.!1 eli .mode=$0000 dta $04,.!1 eli .mode=$4000 dta $0c,a(.!1) eli .mode=$0040 dta $f4,.!1 eli .mode=$4040 dta $dc,a(.!1) els ert 1 eif _postdi .1 emc * CIM ; Crash IMmediate cim mac dta $02 emc