.IIF NDF,.M68 .NLIST ;CROSS-ASSEMBLER NOT LISTED ;DURING CHECKOUT DEFINE .M68 TO ENABLE LISTING .IIF DF,.M68 .LIST SRC,SEQ,COM,MD,MC ; .TITLE M6809 CROSS-ASSEMBLER ; ; .IIF DF,.M68 .SBTTL CROSS-ASSEMBLER INTRODUCTION ; .ENABLE ABS ; ;************************************************************** ;* * ;* MACRO PACKAGE FOR THE MOTOROLA 6809 MICROPROCESSOR * ;* TO RUN UNDER MACRO 11. * ;* * ;* * ;* BY ALAN R. BALDWIN * ;* PHYSICS DEPARTMENT * ;* KENT STATE UNIVERSITY * ;* KENT, OHIO 44242 * ;* * ;* V01 - JUNE 1980 * ;* * ;************************************************************** ; ; ; SPECIAL NOTES ABOUT THE CROSS ASSEMBLER ; ; LABELS MUST TERMINATE WITH A COLON (:) ; COMMENTS START WITH A SEMI-COLON (;) ; IMMEDIATE MODE IS DENOTED BY A SEPERATE ARGUMENT - # ; DIRECT MODE IS DENOTED BY A SEPERATE ARGUMENT - * ; DEFFERRED MODE IS DENOTED BY A SEPERATE ARGUMENT - @ ; ; ;DEFINITION OF ASSEMBLER DIRECTIVES WITH DIFFERENCES ; END - USE .END END OF PROGRAM ; EQU - USE = EQUATE SYMBOL ; FCB FORM SINGLE-BYTE CONSTANT ; 10 ARGUMENTS ALLOWED ; FCC FORM CONSTANT CHARACTERS ; FDB FORM DOUBLE-BYTE CONSTANT ; 10 ARGUMENTS ALLOWED ; MON - NOT IMPLEMENTED RETURN TO MONITOR CONSOLE ; NAM - USE .SBTTL PROGRAM NAME ; OPT - NOT IMPLEMENTED OPTION ; ORG ORIGIN ; PAGE - USE .PAGE ADVANCE LISTING TO TOP OF PAGE ; RMB RESERVE MEMORY BYTES ; SPC - NOT IMPLEMENTED SPACE N LINES ; SETDP ADDRESS SETS ASSEMBLER DIRECT PAGE VARIABLE ; .IIF DF,.M68 .PAGE .IIF DF,.M68 .SBTTL 6809 PROCESSOR INFORMATION ; ;PROCESSOR CONDITION CODE REVIEW ; 0 - CARRY BIT (C) ; 1 - OVERFLOW BIT (V) ; 2 - ZERO BIT (Z) ; 3 - NEGATIVE BIT (N) ; 4 - INTERRUPT MASK BIT (I) ; 5 - HALF CARRY BIT (H) ; 6 - FAST INTERRUPT REQUEST MASK BIT (F) ; 7 - ENTIRE STATE ON STACK BIT (E) ; ; ; REGISTERS ; ; A - 8 BIT ACCUMULATOR A ; B - 8 BIT ACCUMULATOR B ; D - 16 BIT ACCUMULATOR D (A:B) ; CC - 8 BIT CONDITION CODE REGISTER CC ; DP - 8 BIT DIRECT PAGE REGISTER DP ; X - 16 BIT INDEX REGISTER X ; Y - 16 BIT INDEX REGISTER Y ; U - 16 BIT USER STACK POINTER U ; S - 16 BIT HARDWARE STACK POINTER S ; PC - 16 BIT PROGRAM COUNTER PC ; ; ADDRESSING MODES ; ; LABEL IS AN ASSEMBLER LABEL OR ; A NUMBER ; ; SYNC INHERENT ; CLRA ACCUMULATOR ; CLRA ACCUMULATOR ; TFR D,Y REGISTER ; LDA LABEL ABSOLUTE (EXTENDED) ; LDA *,LABEL DIRECT PAGE ; LDA @,LABEL ABSOLUTE INDIRECT (EXTENDED INDIRECT) ; LDA 5,X CONSTANT-OFFSET INDEXED ; LDA LABEL,PCR ASSEMBLER PC RELATIVE ; LDA @,5,X CONSTANT-OFFSET INDEXED INDIRECT ; LDA @,LABEL,PCR ASSEMBLER PC RELATIVE INDIRECT ; LDA A,X ACCUMULATOR INDEXED ; LDA @,A,X ACCUMULATOR INDEXED INDIRECT ; LDA X+ AUTO-INCREMENT (1) ; LDA X++ AUTO-INCREMENT (2) ; LDA @,X++ AUTO-INCREMENT (2) INDIRECT ; LDA -X AUTO-DECREMENT (1) ; LDA --X AUTO-DECREMENT (2) ; LDA @,--X AUTO-DECREMENT (2) INDIRECT ; BRA LABEL RELATIVE ; LBRA LABEL RELATIVE ; ; .IIF DF,.M68 .PAGE .IIF DF,.M68 .SBTTL REGISTER MACROS ; .MACRO XYUS J .IIF IDN ,X ...XYU=000 .IIF IDN ,Y ...XYU=040 .IIF IDN ,U ...XYU=100 .IIF IDN ,S ...XYU=140 .ENDM ; .MACRO ABDREG J .IIF IDN ,A ...ABD=006 .IIF IDN ,B ...ABD=005 .IIF IDN ,D ...ABD=013 .ENDM ; .MACRO AUTO1 J .IIF IDN ,X+ ...IX=000 .IIF IDN ,-X ...IX=002 .IIF IDN ,Y+ ...IX=040 .IIF IDN ,-Y ...IX=042 .IIF IDN ,U+ ...IX=100 .IIF IDN ,-U ...IX=102 .IIF IDN ,S+ ...IX=140 .IIF IDN ,-S ...IX=142 .ENDM ; .MACRO AUTO2 J .IIF IDN ,X++ ...IX=001 .IIF IDN ,--X ...IX=003 .IIF IDN ,Y++ ...IX=041 .IIF IDN ,--Y ...IX=043 .IIF IDN ,U++ ...IX=101 .IIF IDN ,--U ...IX=103 .IIF IDN ,S++ ...IX=141 .IIF IDN ,--S ...IX=143 .ENDM ; .IIF DF,.M68 .PAGE .IIF DF,.M68 .SBTTL MORE REGISTER MACROS ; .MACRO REGREG J ...REG=400 .IIF IDN ,D ...REG=0 .IIF IDN ,X ...REG=1 .IIF IDN ,Y ...REG=2 .IIF IDN ,U ...REG=3 .IIF IDN ,S ...REG=4 .IIF IDN ,PC ...REG=5 .IIF IDN ,A ...REG=10 .IIF IDN ,B ...REG=11 .IIF IDN ,CC ...REG=12 .IIF IDN ,DP ...REG=13 .ENDM ; .MACRO PREGS J ...P=400 .IIF IDN ,CC ...P=1 .IIF IDN ,A ...P=2 .IIF IDN ,B ...P=4 .IIF IDN ,DP ...P=10 .IIF IDN ,X ...P=20 .IIF IDN ,Y ...P=40 .IF EQ,...OPC&2 .IIF IDN ,U ...P=100 .ENDC .IF NE,...OPC&2 .IIF IDN ,S ...P=100 .ENDC .IIF IDN ,PC ...P=200 ...A=...A!...P .ENDM ; .IIF DF,.M68 .PAGE .IIF DF,.M68 .SBTTL OFFSET MACROS ; .MACRO OFSTRG J .IF EQ,J ;NO OFFSET ...OFF=4 .MEXIT .ENDC .IF GE,J-200 ;16 BIT OFFSET ...OFF=11 ...BTL=J&377 ...BTH=J&177400/400 .MEXIT .ENDC .IF LT,J+200 ;16 BIT OFFSET ...OFF=11 ...BTL=J&377 ...BTH=&377 .MEXIT .ENDC .IF GE,J-20 ;8 BIT OFFSET ...OFF=10 ...BTL=J&377 .MEXIT .ENDC .IF LT,J+20 ;8 BIT OFFSET ...OFF=10 ...BTL=J&377 .MEXIT .ENDC ...A=0 ;5 BIT OFFSET ...OFF=J&37 .ENDM ; .MACRO OFSTPC J .IF GE,J-200 ;16 BIT OFFSET ...PCR=1 ...BTL=&377 ...BTH=<&177400/400>&377 .MEXIT .ENDC .IF LT,J+200 ;16 BIT OFFSET ...PCR=1 ...BTL=&377 ...BTH=<&177400/400>&377 .MEXIT .ENDC ...PCR=0 ;8 BIT OFFSET ...BTL=J&377 .ENDM ; .IIF DF,.M68 .PAGE .IIF DF,.M68 .SBTTL DIRECT AND ACCIND MACROS ; .MACRO DIRECT J,K ;DIRECT MODE CHECK .IF IDN ,* ...BTL=&377 .IIF LT,K-...DP .ERROR ;NEGATIVE OFFSET .IIF GE,K-...DP-400 .ERROR ;OFFSET TOO LARGE .ENDC .ENDM ; .MACRO ACCIND J,K ...XYU=-1 XYUS K .IF GE,...XYU ...ABD=-1 ABDREG J .IF GE,...ABD ...IX=...XYU!...ABD!200 .MEXIT .ENDC ...A=-1 OFSTRG J ...IX=...XYU!...OFF .IIF LT,...A ...IX=...IX!200 .MEXIT .ENDC ...PCR=-1 .IF EQ,...PG .IIF IDN ,PC OFSTPC J-3 .IIF IDN ,PCR OFSTPC J-3-. .ENDC .IF NE,...PG .IIF IDN ,PC OFSTPC J-4 .IIF IDN ,PCR OFSTPC J-4-. .ENDC .IIF GE,...PCR ...IX=214!...PCR .ENDM ; .IIF DF,.M68 .PAGE .IIF DF,.M68 .SBTTL INDEX MACRO ; .MACRO INDEX J,K,L .IF B, ;R+,-R,R++,--R MODES ...IX=-1 AUTO1 J AUTO2 J .IF GE,...IX ...IX=...IX!200 .MEXIT .ENDC .ENDC .IF IDN ,@ ;DEFFERRED MODES ...IX=-1 ...A=-1 .IIF B, AUTO2 K ;@,(R++,--R) .IIF NB, ACCIND K,L ;@,(A/N),R .IF GE,...IX .IF GE,...A ;5 BIT MODE - DEFAULTS TO 8 BIT MODE ...IX=<...IX&140>!10 ...BTL=K&377 .ENDC ...IX=...IX!220 .MEXIT .ENDC ...IX=237 ;ELSE EXTENDED INDIRECT @,NAME ...BTL=K&377 ...BTH=K&177400/400 .MEXIT .ENDC ACCIND J,K ;(A/N),R MODES .ENDM ; .IIF DF,.M68 .PAGE .IIF DF,.M68 .SBTTL COMBINED ADDRESSING MACROS ; .MACRO DIE J,K,L ...BTL=-1 DIRECT J,K ;DIRECT MODE .IF GE,...BTL .IIF EQ,...PG .BYTE ...OPC!20,...BTL .IIF NE,...PG .BYTE ...PG,...OPC!20,...BTL .MEXIT .ENDC ...IX=-1 ...BTL=-1 ...BTH=-1 INDEX J,K,L ;INDEXED MODES .IF GE,...IX .IIF EQ,...PG .BYTE ...OPC!40,...IX .IIF NE,...PG .BYTE ...PG,...OPC!40,...IX .IF GE,...BTL .IIF GE,...BTH .BYTE ...BTH,...BTL .IIF LT,...BTH .BYTE ...BTL .ENDC .MEXIT .ENDC ;ELSE EXTENDED MODE .IF EQ,...PG .BYTE ...OPC!60,J&177400/400,J&377 .MEXIT .ENDC .BYTE ...PG,...OPC!60 .BYTE J&177400/400,J&377 .ENDM ; .MACRO IDIE J,K,L .IF IDN ,# ;IMMEDIATE .IF EQ,...SD ;SINGLE BYTE MODE .BYTE ...OPC,K .MEXIT .ENDC .IF NB, .IF EQ,...PG ;PAGE ZERO .BYTE ...OPC,K,L .MEXIT .ENDC ;ELSE OTHER PAGE .BYTE ...PG,...OPC .BYTE K,L .MEXIT .ENDC .IF EQ,...PG ;PAGE ZERO .BYTE ...OPC,K&177400/400,K&377 .MEXIT .ENDC ;ELSE OTHER PAGE .BYTE ...PG,...OPC .BYTE K&177400/400,K&377 .MEXIT .ENDC DIE J,K,L .ENDM ; .IIF DF,.M68 .PAGE .IIF DF,.M68 .SBTTL INHERENT INSTRUCTIONS ; .MACRO AINST H,I .MACRO H .NLIST SRC .BYTE I .LIST SRC .ENDM .ENDM ; ;MNEMONIC OPCODE ;OPERATION AINST NOP, 22 ;DO NOTHING AINST SYNC, 23 ;SYNC ON HARDWARE AINST DAA, 31 ;DECIMAL ADJUST AINST SEX, 35 ;SIGN EXTEND B THROUGH A AINST RTS, 71 ;RETURN FROM SUBROUTINE AINST ABX, 72 ;ADD 8 BIT UNSIGNED B REGISTER TO X AINST RTI, 73 ;RETURN FROM INTERRUPT AINST MUL, 75 ;MULTIPLY A*B AINST SWI, 77 ;SOFTARE INTERRUPT AINST SWI1, 77 ;SAME AS SWI AINST NEGA, 100 ;NEGATE A AINST NEGB, 120 ;NEGATE B AINST COMA, 103 ;COMPLEMENT A AINST COMB, 123 ;COMPLEMENT B AINST LSRA, 104 ;LOGICAL SHIFT RIGHT A AINST LSRB, 124 ;LOGICAL SHIFT RIGHT B AINST RORA, 106 ;ROTATE RIGHT A AINST RORB, 126 ;ROTATE RIGHT B AINST ASRA, 107 ;ARITHMETIC SHIFT RIGHT A AINST ASRB, 127 ;ARITHMETIC SHIFT RIGHT B AINST ASLA, 110 ;ARITHMETIC SHIFT LEFT A AINST ASLB, 130 ;ARITHMETIC SHIFT LEFT B AINST LSLA, 110 ;ASLA AINST LSLB, 130 ;ASLB AINST ROLA, 111 ;ROTATE LEFT A AINST ROLB, 131 ;ROTATE LEFT B AINST DECA, 112 ;DECREMENT A AINST DECB, 132 ;DECREMENT B AINST INCA, 114 ;INCREMENT A AINST INCB, 134 ;INCREMENT B AINST TSTA, 115 ;TEST A AINST TSTB, 135 ;TEST B AINST CLRA, 117 ;CLEAR A AINST CLRB, 137 ;CLEAR B ; .IIF DF,.M68 .PAGE .IIF DF,.M68 .SBTTL SWI2&3 AND CC INSTRUCTIONS ; .MACRO BINST H,I .MACRO H .NLIST SRC .BYTE I,77 .LIST SRC .ENDM .ENDM ; ;MNEMONIC PAGE ;OPERATION BINST SWI2, 20 ;SOFTWARE INTERRUPT BINST SWI3, 21 ;SOFTWARE INTERRUPT ; ; .MACRO CKRNL J,K .IF IDN ,# .BYTE ...OPC,K ;BAD CONSTANT .MEXIT .ENDC .ERROR ;BAD INSTRUCTION .ENDM ; .MACRO CINST H,I .MACRO H J,K .NLIST SRC ...OPC=I CKRNL J,K .LIST SRC .ENDM .ENDM ; ;MNEMONIC OPCODE ;OPERATION CINST CWAI, 74 ;CLEAR BITS IN CC AND WAIT FOR INTERRUPT CINST ORCC, 32 ;OR IMMEDIATE TO CC CINST ANDCC, 34 ;AND IMMEDIATE TO CC ; .IIF DF,.M68 .PAGE .IIF DF,.M68 .SBTTL SHORT BRANCH INSTRUCTIONS ; .MACRO DKRNL J ...A=J-2-. .IIF LT,...A+200 .ERROR ;BRANCH OUT OF RANGE .IIF GE,...A-200 .ERROR ;BRANCH OUT OF RANGE .BYTE ...OPC,...A .ENDM ; .MACRO DINST H,I .MACRO H J .NLIST SRC ...OPC=I DKRNL J .LIST SRC .ENDM .ENDM ; ;MNEMONIC OPCODE ;OPERATION DINST BRA, 40 ;BRANCH ALWAYS DINST BRN, 41 ;BRANCH NEVER DINST BHI, 42 ;BRANCH IF (C=0) AND (Z=0) DINST BLS, 43 ;BRANCH IF (C=1) OR (Z=1) DINST BHS, 44 ;BRANCH IF (C=0) DINST BLO, 45 ;BRANCH IF (C=1) DINST BCC, 44 ;BRANCH IF (C=0) DINST BCS, 45 ;BRANCH IF (C=1) DINST BNE, 46 ;BRANCH IF (Z=0) DINST BEQ, 47 ;BRANCH IF (Z=1) DINST BVC, 50 ;BRANCH IF (V=0) DINST BVS, 51 ;BRANCH IF (V=1) DINST BPL, 52 ;BRANCH IF (N=0) DINST BMI, 53 ;BRANCH IF (N=1) DINST BGE, 54 ;BRANCH IF (=0) DINST BLT, 55 ;BRANCH IF (=1) DINST BGT, 56 ;BRANCH IF (Z=0) AND (=0) DINST BLE, 57 ;BRANCH IF (Z=1) OR (=1) DINST BSR, 215 ;BRANCH TO SUBROUTINE ; ; .IIF DF,.M68 .PAGE .IIF DF,.M68 .SBTTL LONG BRANCH INSTRUCTIONS ; .MACRO EKRNL J ...A=J-4-. .BYTE 20,...OPC .BYTE ...A&177400/400,...A&377 .ENDM ; .MACRO EINST H,I .MACRO H J .NLIST SRC ...OPC=I EKRNL J .LIST SRC .ENDM .ENDM ; ;MNEMONIC OPCODE ;OPERATION EINST LBRN, 41 ;BRANCH NEVER EINST LBHI, 42 ;BRANCH IF (C=0) AND (Z=0) EINST LBLS, 43 ;BRANCH IF (C=1) OR (Z=1) EINST LBHS, 44 ;BRANCH IF (C=0) EINST LBLO, 45 ;BRANCH IF (C=1) EINST LBCC, 44 ;BRANCH IF (C=0) EINST LBCS, 45 ;BRANCH IF (C=1) EINST LBNE, 46 ;BRANCH IF (Z=0) EINST LBEQ, 47 ;BRANCH IF (Z=1) EINST LBVC, 50 ;BRANCH IF (V=0) EINST LBVS, 51 ;BRANCH IF (V=1) EINST LBPL, 52 ;BRANCH IF (N=0) EINST LBMI, 53 ;BRANCH IF (N=1) EINST LBGE, 54 ;BRANCH IF (=0) EINST LBLT, 55 ;BRANCH IF (=1) EINST LBGT, 56 ;BRANCH IF (Z=0) AND (=0) EINST LBLE, 57 ;BRANCH IF (Z=1) OR (=1) ; ; .MACRO FKRNL J ...A=J-3-. .BYTE ...OPC,...A&177400/400,...A&377 .ENDM ; .MACRO FINST H,I .MACRO H J .NLIST SRC ...OPC=I FKRNL J .LIST SRC .ENDM .ENDM ; ;MNEMONIC OPCODE ;OPERATION FINST LBRA, 26 ;BRANCH ALWAYS FINST LBSR, 27 ;BRANCH TO SUBROUTINE ; .IIF DF,.M68 .PAGE .IIF DF,.M68 .SBTTL REGISTER INSTRUCTIONS ; .MACRO GKRNL J,K REGREG J ...A=...REG REGREG K .BYTE ...OPC,...REG!<20*...A> .IIF NE,<...A&10>-<...REG&10> .ERROR ;8/16 BIT REGISTERS .ENDM ; .MACRO GINST H,I .MACRO H J,K .NLIST SRC ...OPC=I GKRNL J,K .LIST SRC .ENDM .ENDM ; ;MNEMONIC OPCODE ;OPERATION GINST EXG, 36 ;EXCHANGE REGISTERS GINST TFR, 37 ;TRANSFER REGISTER TO REGISTER ; .IIF DF,.M68 .PAGE .IIF DF,.M68 .SBTTL ACCX INSTRUCTIONS ; .MACRO IKRNL J,K,L ...BTL=-1 DIRECT J,K ;DIRECT MODE .IF GE,...BTL .BYTE ...OPC,...BTL .MEXIT .ENDC ...PG=0 ...IX=-1 ...BTL=-1 ...BTH=-1 INDEX J,K,L ;INDEX MODES .IF GE,...IX .BYTE ...OPC!140,...IX .IF GE,...BTL .IIF GE,...BTH .BYTE ...BTH,...BTL .IIF LT,...BTH .BYTE ...BTL .ENDC .MEXIT .ENDC ;ELSE EXTENDED MODE .BYTE ...OPC!160,J&177400/400,J&377 .ENDM ; .MACRO HKRNL J,K,L .IF B, ;A OR B MODE ...A=-1 .IIF IDN ,A ...A=0 .IIF IDN ,B ...A=20 .IF GE,...A .BYTE ...OPC!100!...A .MEXIT .ENDC .ENDC IKRNL J,K,L .ENDM ; .MACRO HINST H,I .MACRO H J,K,L .NLIST SRC ...OPC=I HKRNL J,K,L .LIST SRC .ENDM .ENDM ; ;MNEMONIC OPCODE ;OPERATION HINST NEG, 0 ;NEGATE DESTINATION HINST COM, 3 ;COMPLEMENT DESTINATION HINST LSR, 4 ;LOGICAL SHIFT RIGHT HINST ROR, 6 ;ROTATE RIGHT HINST ASR, 7 ;ARITHMETIC SHIFT RIGHT HINST ASL, 10 ;ARITHMETIC SHIFT LEFT HINST LSL, 10 ;SAME AS ASL HINST ROL, 11 ;ROTATE LEFT HINST DEC, 12 ;DECREMENT DESTINATION HINST INC, 14 ;INCREMENT DESTINATION HINST TST, 15 ;TEST FOR ZERO / NEGATIVE HINST CLR, 17 ;CLEAR DESTINATION ; .IIF DF,.M68 .PAGE .IIF DF,.M68 .SBTTL JUMP INSTRUCTION ; .MACRO JMP J,K,L .NLIST SRC ...OPC=16 IKRNL J,K,L .LIST SRC .ENDM ; ; .IIF DF,.M68 .PAGE .IIF DF,.M68 .SBTTL ACCUMULATOR/MEMORY INSTRUCTIONS ; .MACRO JINST H,I .MACRO H J,K,L .NLIST SRC ...OPC=I ...PG=0 ...SD=0 IDIE J,K,L .LIST SRC .ENDM .ENDM ; ;MNEMONIC OPCODE ;OPERATION JINST SUBA, 200 ;SUBTRACT FROM A JINST SUBB, 300 ;SUBTRACT FROM B JINST CMPA, 201 ;COMPARE TO A JINST CMPB, 301 ;COMPARE TO B JINST SBCA, 202 ;SUBTRACT WITH CARRY FROM A JINST SBCB, 302 ;SUBTRACT WITH CARRY FROM B JINST ANDA, 204 ;AND WITH A JINST ANDB, 304 ;AND WITH B JINST BITA, 205 ;BIT TEST WITH A JINST BITB, 305 ;BIT TEST WITH B JINST LDA, 206 ;LOAD A JINST LDB, 306 ;LOAD B JINST EORA, 210 ;EXCLUSIVE OR WITH A JINST EORB, 310 ;EXCLUSIVE OR WITH B JINST ADCA, 211 ;ADD WITH CARRY TO A JINST ADCB, 311 ;ADD WITH CARRY TO B JINST ORA, 212 ;OR WITH A JINST ORB, 312 ;OR WITH B JINST ADDA, 213 ;ADD TO A JINST ADDB, 313 ;ADD TO B ; .IIF DF,.M68 .PAGE .IIF DF,.M68 .SBTTL REGISTER LOAD/STORE INSTRUCTIONS ; .MACRO KINST H,I,J .MACRO H K,L,M .NLIST SRC ...OPC=J ...PG=I DIE K,L,M .LIST SRC .ENDM .ENDM ; ;MNEMONIC PAGE OPCODE ;OPERATION KINST STA, 0, 207 ;STORE A KINST STB, 0, 307 ;STORE B KINST STD, 0, 315 ;STORE D (A:B) KINST STX, 0, 217 ;STORE X KINST STY, 20, 217 ;STORE Y KINST STU, 0, 317 ;STORE U KINST STS, 20, 317 ;STORE S KINST JSR, 0, 215 ;JUMP TO SUBROUTINE ; .MACRO LINST H,I,J .MACRO H K,L,M .NLIST SRC ...OPC=J ...PG=I ...SD=1 IDIE K,L,M .LIST SRC .ENDM .ENDM ; ;MNEMONIC PAGE OPCODE ;OPERATION LINST SUBD, 0, 203 ;SUBTRACT FROM D (A:B) LINST CMPD, 20, 203 ;COMPARE TO D (A:B) LINST CMPU, 21, 203 ;COMPARE TO U LINST ADDD, 0, 303 ;ADD TO D (A:B) LINST CMPX, 0, 214 ;COMPARE TO X LINST CMPY, 20, 214 ;COMPARE TO Y LINST CMPS, 21, 214 ;COMPARE TO S LINST LDD, 0, 314 ;LOAD D (A:B) LINST LDX, 0, 216 ;LOAD X LINST LDY, 20, 216 ;LOAD Y LINST LDU, 0, 316 ;LOAD U LINST LDS, 20, 316 ;LOAD S ; .IIF DF,.M68 .PAGE .IIF DF,.M68 .SBTTL LOAD EFFECTIVE ADDRESS INSTRUCTIONS ; .MACRO MKRNL J,K,L ...PG=0 ...IX=-1 ...BTL=-1 ...BTH=-1 INDEX J,K,L .IF GE,...IX .BYTE ...OPC!40,...IX .IF GE,...BTL .IIF GE,...BTH .BYTE ...BTH,...BTL .IIF LT,...BTH .BYTE ...BTL .ENDC .MEXIT .ENDC .ERROR ;NOT AN INDEXED MODE ! .ENDM ; .MACRO MINST H,I .MACRO H J,K,L .NLIST SRC ...OPC=I MKRNL J,K,L .LIST SRC .ENDM .ENDM ; ;MNEMONIC OPCODE ;OPERATION MINST LEAX, 60 ;LOAD EF ADDRESS INTO X MINST LEAY, 61 ;LOAD EF ADDRESS INTO Y MINST LEAS, 62 ;LOAD EF ADDRESS INTO S MINST LEAU, 63 ;LOAD EF ADDRESS INTO U ; .IIF DF,.M68 .PAGE .IIF DF,.M68 .SBTTL PUSH AND PULL INSTRUCTIONS ; .MACRO NKRNL A,B,C,D,E,F,G,H ...A=0 .IIF NB, PREGS A .IIF NB, PREGS B .IIF NB, PREGS C .IIF NB, PREGS D .IIF NB, PREGS E .IIF NB, PREGS F .IIF NB, PREGS G .IIF NB, PREGS H .BYTE ...OPC,...A .ENDM ; .MACRO NINST H,I .MACRO H A,B,C,D,E,F,G,H .NLIST SRC ...OPC=I NKRNL A,B,C,D,E,F,G,H .LIST SRC .ENDM .ENDM ; ;MNEMONIC OPCODE ;OPERATION NINST PSHS, 64 ;PUSH ONTO HARDWARE STACK NINST PULS, 65 ;PULL FROM HARDWARE STACK NINST PSHU, 66 ;PUSH ONTO USER STACK NINST PULU, 67 ;PULL FROM USER STACK ; .IIF DF,.M68 .PAGE .IIF DF,.M68 .SBTTL 6809 IMPLEMENTATION OF MISSING 6800 INSTRUCTIONS .MACRO ABA PSHS B ADDA S+ .ENDM .MACRO CBA PSHS B CMPA S+ .ENDM .MACRO CLC ANDCC #,376 .ENDM .MACRO CLI ANDCC #,357 .ENDM .MACRO CLV ANDCC #,375 .ENDM .MACRO DES LEAS -1,S .ENDM .MACRO DEX LEAX -1,X .ENDM .MACRO INS LEAS 1,S .ENDM .MACRO INX LEAX 1,X .ENDM .MACRO PSHA PSHS A .ENDM .MACRO PSHB PSHS B .ENDM .MACRO PULA PULS A .ENDM .MACRO PULB PULS B .ENDM .MACRO SBA PSHS B SUBA S+ .ENDM .MACRO SEC ORCC #,1 .ENDM .MACRO SEI ORCC #,20 .ENDM .MACRO SEV ORCC #,2 .ENDM .MACRO TAB TFR A,B TSTA .ENDM .MACRO TAP TFR A,CC .ENDM .MACRO TBA TFR B,A TSTB .ENDM .MACRO TPA TFR CC,A .ENDM .MACRO TSX TFR S,X .ENDM .MACRO TXS TFR X,S .ENDM .MACRO WAI CWAI #,377 .ENDM JINST LDAA, 206 ;LOAD A JINST LDAB, 306 ;LOAD B JINST ORAA, 212 ;OR WITH A JINST ORAB, 312 ;OR WITH B KINST STAA, 0, 207 ;STORE A KINST STAB, 0, 307 ;STORE B .IIF DF,.M68 .PAGE .IIF DF,.M68 .SBTTL ASSEMBLER DIRECTIVES ; .MACRO SETDP I .NLIST SRC ...DP=177400&I .LIST SRC .ENDM ...DP=0 ;NORMAL DEFAULT .MACRO FCB A,B,C,D,E,F,G,H,I,J .NLIST SRC .IIF NB, .BYTE A .IIF NB, .BYTE B .IIF NB, .BYTE C .IIF NB, .BYTE D .IIF NB, .BYTE E .IIF NB, .BYTE F .IIF NB, .BYTE G .IIF NB, .BYTE H .IIF NB, .BYTE I .IIF NB, .BYTE J .LIST SRC .ENDM FCB ; .MACRO FCC H .NLIST SRC .ASCII /H/ .LIST SRC .ENDM FCC ; .MACRO FDB A,B,C,D,E,F,G,H,I,J .NLIST SRC .IIF NB, .BYTE A&177400/400,A&377 .IIF NB, .BYTE B&177400/400,B&377 .IIF NB, .BYTE C&177400/400,C&377 .IIF NB, .BYTE D&177400/400,D&377 .IIF NB, .BYTE E&177400/400,E&377 .IIF NB, .BYTE F&177400/400,F&377 .IIF NB, .BYTE G&177400/400,G&377 .IIF NB, .BYTE H&177400/400,H&377 .IIF NB, .BYTE I&177400/400,I&377 .IIF NB, .BYTE J&177400/400,J&377 .LIST SRC .ENDM FDB ; .MACRO ORG H .NLIST SRC .= .LIST SRC .ENDM ORG ; .MACRO RMB H .NLIST SRC .BLKB H .LIST SRC .ENDM RMB ; ; ; .NLIST TTM ;PRINTING MODE .LIST MD,MEB ;ENABLE PRINTING OF MACRO EXPANSIONS .LIST ;LIST PROGRAM PROPER .PAGE