.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 M6800 CROSS-ASSEMBLER ; .IIF DF,.M68 .SBTTL CROSS-ASSEMBLER INTRODUCTION ; .ENABLE ABS ; ;************************************************************** ;* * ;* MACRO PACKAGE FOR THE MOTOROLA 6800 MICROPROCESSOR * ;* TO RUN UNDER MACRO 11. * ;* * ;* 6800, 6802, AND 6808 PROCESSORS SUPPORTED * ;* * ;* * ;* BY ALAN R. BALDWIN * ;* PHYSICS DEPARTMENT * ;* KENT STATE UNIVERSITY * ;* KENT, OHIO 44242 * ;* * ;* V03 - OCTOBER 1980 * ;* * ;************************************************************** ; ; ;THE FOLLOWING DIFFERENCES EXIST BETWEEN THIS CROSS-ASSEMBLER ;AND MOTOROLA'S M6800 ASSEMBLER ; LABELS MUST TERMINATE WITH A : ; COMMENTS START WITH A ; ; IMMEDIATE 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 ; NO MORE THAN 10 ARGUMENTS ; FCC FORM CONSTANT CHARACTERS ; FDB FORM DOUBLE-BYTE CONSTANT ; NO MORE THAN 10 ARGUMENTS ; 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 ; ; ;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 - ALWAYS 1 ; 7 - ALWAYS 1 ; .IIF DF,.M68 .PAGE .IIF DF,.M68 .SBTTL SINGLE BYTE 'INHERENT' INSTRUCTIONS ; .MACRO AINST H,I .MACRO H .NLIST SRC .BYTE I .LIST SRC .ENDM .ENDM AINST ; ; ;MNEMONIC OPCODE ;OPERATION AINST NOP, 1 ;DO NOTHING AINST TAP, 6 ;A TO CC'S AINST TPA, 7 ;CC'S TO A AINST INX, 10 ;INCREMENT INDEX REGISTER AINST DEX, 11 ;DECREMENT INDEX REGISTER AINST CLV, 12 ;CLEAR V BIT AINST SEV, 13 ;SET C BIT AINST CLC, 14 ;CLEAR C BIT AINST SEC, 15 ;SET C BIT AINST CLI, 16 ;CLEAR I BIT AINST SEI, 17 ;SET I BIT AINST SBA, 20 ;ACCA=ACCA-ACCB AINST CBA, 21 ;COMPARE ACCA & ACCB AINST TAB, 26 ;ACCB=ACCA AINST TBA, 27 ;ACCA=ACCB AINST DAA, 31 ;DECIMAL ADJUST AINST ABA, 33 ;ACCA=ACCA+ACCB AINST TSX, 60 ;X=SP+1 AINST INS, 61 ;SP=SP+1 AINST PULA, 62 ;PULL A FROM STACK AINST PULB, 63 ;PULL B FROM STACK AINST DES, 64 ;SP=SP-1 AINST TXS, 65 ;SP=X-1 AINST PSHA, 66 ;PUSH A ONTO STACK AINST PSHB, 67 ;PUSH B ONTO STACK AINST RTS, 71 ;RETURN FROM SUBROUTINE AINST RTI, 73 ;RETURN FROM INTERRUPT AINST WAI, 76 ;WAIT FOR INTERRUPT AINST SWI, 77 ;SOFTWARE INTERRUPT AINST NEGA, 100 ;NEGATE A AINST COMA, 103 ;COMPLEMENT A AINST LSRA, 104 ;LOGICAL SHIFT RIGHT A AINST RORA, 106 ;ROTATE RIGHT A AINST ASRA, 107 ;ARITHMETIC SHIFT RIGHT A AINST ASLA, 110 ;ARITHMETIC SHIFT LEFT A AINST ROLA, 111 ;ROTATE LEFT A AINST DECA, 112 ;DECREMENT A AINST INCA, 114 ;INCREMENT A AINST TSTA, 115 ;TEST A AINST CLRA, 117 ;CLEAR A AINST NEGB, 120 ;NEGATE B AINST COMB, 123 ;COMPLEMENT B AINST LSRB, 124 ;LOGICAL SHIFT RIGHT B AINST RORB, 126 ;ROTATE RIGHT B AINST ASRB, 127 ;ARITHMETIC SHIFT RIGHT B AINST ASLB, 130 ;ARITHMETIC SHIFT LEFT B AINST ROLB, 131 ;ROTATE LEFT B AINST DECB, 132 ;DECREMENT B AINST INCB, 134 ;INCREMENT B AINST TSTB, 135 ;TEST B AINST CLRB, 137 ;CLEAR B ; .IIF DF,.M68 .PAGE .IIF DF,.M68 .SBTTL PUSH AND PULL OPCODES ; .MACRO PKRNL I,J .IIF IDN ,A ...A=0 ;PSH/PUL A .IIF IDN ,B ...A=1 ;PSH/PUL B .BYTE I+...A ;INVALID ARGUMENT .ENDM ; .MACRO PINST H,I .MACRO H J .NLIST SRC PKRNL I,J .LIST SRC .ENDM .ENDM PINST ; ;MNEMONIC OPCODE ;OPERATION PINST PUL, 62 ;PUL BYTE FROM STACK S=S+1 PINST PSH, 66 ;PUSH BYTE ONTO STACK S=S-1 ; .IIF DF,.M68 .PAGE .IIF DF,.M68 .SBTTL RELATIVE BRANCH INSTRUCTIONS ; .MACRO BKRNL I,J ...A=J-.-2 .IIF LT,...A+200 .ERROR ;BRANCH OUT OF RANGE .IIF GE,...A-200 .ERROR ;BRANCH OUT OF RANGE .BYTE I,...A .ENDM ; .MACRO BINST H,I .MACRO H J .NLIST SRC BKRNL I,J .LIST SRC .ENDM .ENDM BINST ; ; ;MNEMONIC OPCODE ;OPFERATION BINST BRA, 40 ;BRANCH ALWAYS BINST BHI, 42 ;BRANCH IF (C=0) AND (Z=0) BINST BLS, 43 ;BRANCH IF (C=1) OR (Z=1) BINST BCC, 44 ;BRANCH IF (C=0) BINST BCS, 45 ;BRANCH IF (C=1) BINST BNE, 46 ;BRANCH IF (Z=0) BINST BEQ, 47 ;BRANCH IF (Z=1) BINST BVC, 50 ;BRANCH IF (V=0) BINST BVS, 51 ;BRANCH IF (V=1) BINST BPL, 52 ;BRANCH IF (N=0) BINST BMI, 53 ;BRANCH IF (N=1) BINST BGE, 54 ;BRANCH IF (=0) BINST BLT, 55 ;BRANCH IF (=1) BINST BGT, 56 ;BRANCH IF (Z=0) AND (=0) BINST BLE, 57 ;BRANCH IF (Z=1) OR (=1) BINST BSR, 215 ;BRANCH TO SUBROUTINE ; ; .IIF DF,.M68 .PAGE .IIF DF,.M68 .SBTTL INSTRUCTIONS HAVING ONLY ACCX,INDEXED,AND EXTENDED MODES ; ; .MACRO CKRNL I,J,K .IF NB, ;TWO ARGUMENTS - THEN INDEXED .IIF DIF ,X .ERROR ;INDEX BAD .IIF LT,J .ERROR ;NEGATIVE OFFSET .BYTE I+40,J ;OFFSET OUT OF RANGE .MEXIT .ENDC .IF NB, ;ONE ARGUMENT - A, B, OR EXTENDED MODE ...A=60 .IIF IDN ,A ,...A=0 ;ACCA MODE .IIF IDN ,B ,...A=20 ;ACCB MODE .IIF NE,...A-60 .BYTE I+...A .IIF EQ,...A-60 .BYTE I+...A,J&177400/400,J&377 .MEXIT .ENDC .ERROR ;BAD INSTRUCTION .ENDM ; .MACRO CINST H,I .MACRO H J,K .NLIST SRC CKRNL I,J,K .LIST SRC .ENDM .ENDM CINST ; ; ;MNEMONIC OPCODE ;OPERATION ; CINST NEG, 100 ;NEGATE CINST COM, 103 ;COMPLEMENT CINST LSR, 104 ;LOGICAL SHIFT RIGHT CINST ROR, 106 ;ROTATE RIGHT CINST ASR, 107 ;ARITHMETIC SHIFT RIGHT CINST ASL, 110 ;ARITHMETIC SHIFT LEFT CINST ROL, 111 ;ROTATE LEFT CINST DEC, 112 ;DECREMENT CINST INC, 114 ;INCREMENT CINST TST, 115 ;TEST CINST CLR, 117 ;CLEAR ; ; ; .IIF DF,.M68 .PAGE .IIF DF,.M68 .SBTTL JUMP AND JSR INSTRUCTIONS ; .MACRO DKRNL I,J,K .IF NB, ;TWO ARGUMENTS - INDEXED MODE .IIF DIF ,X .ERROR ;BAD INDEX .IIF LT,J .ERROR ;NEGATIVE OFFSET .BYTE I+40,J ;OFFSET TOO LARGE .MEXIT .ENDC .IF NB, ;ONE ARGUMENT - EXTENDED MODE .BYTE I+60,J&177400/400,J&377 .MEXIT .ENDC .ERROR ;BAD INSTRUCTION .ENDM ; .MACRO DINST H,I .MACRO H J,K .NLIST SRC DKRNL I,J,K .LIST SRC .ENDM .ENDM DINST ; ; ;MNEMONIC OPCODE ;OPERATION DINST JMP, 116 ;JUMP DINST JSR, 215 ;JUMP TO SUBROUTINE ; ; .IIF DF,.M68 .PAGE .IIF DF,.M68 .SBTTL ALL ACCX INSTRUCTIONS ; .MACRO EKRNL I,J,K,L ...A=-1 .IIF IDN ,A ,...A=0 ;ACCA MODE .IIF IDN ,B ,...A=100 ;ACCB MODE .IF GE,...A ;ACCX MODES .IF NB, ;THREE ARGS - IMMEDIATE/INDEXED .IF IDN ,# ;CHECK IMMEDIATE .IIF EQ -207 ,.ERROR ;STA # .BYTE I+...A,L .MEXIT .ENDC .IF IDN ,X ;CHECK INDEXED .IIF LT,K .ERROR ;NEGATIVE OFFSET .BYTE I+...A+40,K ;OFFSET TOO LARGE .MEXIT .ENDC .ERROR ;BAD INSTRUCTION .MEXIT .ENDC .IF NB, ;TWO ARGS - DIRECT/EXTENDED .IIF EQ,K&177400 .BYTE I+...A+20,K .IIF NE,K&177400 .BYTE I+...A+60,K&177400/400,K&377 .MEXIT .ENDC .ENDC .ERROR ;BAD INSTRUCTION .ENDM ; .MACRO EINST H,I .MACRO H J,K,L .NLIST SRC EKRNL I,J,K,L .LIST SRC .ENDM .ENDM EINST ; ; ;MNEMONIC OPCODE ;OPERATION EINST SUB, 200 ;SUBTRACT EINST CMP, 201 ;COMPARE EINST SBC, 202 ;SUBTRACT WITH CARRY EINST AND, 204 ;LOGICAL AND EINST BIT, 205 ;BIT TEST EINST LDA, 206 ;LOAD ACCUMULATOR EINST STA, 207 ;STORE ACCUMULATOR EINST EOR, 210 ;EXCLUSIVE OR EINST ADC, 211 ;ADD WITH CARRY EINST ORA, 212 ;LOGICAL OR EINST ADD, 213 ;ADD ; ; .IIF DF,.M68 .PAGE .IIF DF,.M68 .SBTTL ALL SHORT FORM ACCX INSTRUCTIONS ; .MACRO SKRNL I,J,K .IF NB, ;TWO ARGS - IMMEDIATE/INDEXED .IF IDN ,# ;CHECK IMMEDIATE .IIF EQ -207 ,.ERROR ;STAA # .IIF EQ -307 ,.ERROR ;STAB # .BYTE I,K .MEXIT .ENDC .IF IDN ,X ;CHECK INDEXED .IIF LT,J .ERROR ;NEGATIVE OFFSET .BYTE I+40,J ;OFFSET TOO LARGE .MEXIT .ENDC .ERROR ;BAD INSTRUCTION .MEXIT .ENDC .IF NB, ;ONE ARG - DIRECT/EXTENDED .IIF EQ,J&177400 .BYTE I+20,J .IIF NE,J&177400 .BYTE I+60,J&177400/400,J&377 .MEXIT .ENDC .ERROR ;BAD INSTRUCTION .ENDM ; .MACRO SINST H,I .MACRO H J,K .NLIST SRC SKRNL I,J,K .LIST SRC .ENDM .ENDM SINST ; ; ;MNEMONIC OPCODE ;OPERATION ; SINST SUBA, 200 ;SUBTRACT SINST SUBB, 300 SINST CMPA, 201 ;COMPARE SINST CPMB, 301 SINST SBCA, 202 ;SUBTRACT WITH CARRY SINST SBCB, 302 SINST ANDA, 204 ;LOGICAL AND SINST ANDB, 304 SINST BITA, 205 ;BIT TEST SINST BITB, 305 SINST LDAA, 206 ;LOAD ACCUMULATOR SINST LDAB, 306 SINST STAA, 207 ;STORE ACCUMULATOR SINST STAB, 307 SINST EORA, 210 ;EXCLUSIVE OR SINST EORB, 310 SINST ADCA, 211 ;ADD WITH CARRY SINST ADCB, 311 SINST ORAA, 212 ;LOGICAL OR SINST ORAB, 312 SINST ADDA, 213 ;ADD SINST ADDB, 313 ; ; .IIF DF,.M68 .PAGE .IIF DF,.M68 .SBTTL STACK AND INDEX REGISTER INSTRUCTIONS ; .MACRO FKRNL I,J,K,L .IF B, ;ONE ARG - DIRECT/EXTENDED MODE .IF NB, .IIF NE,J&177400 .BYTE I+60,J&177400/400,J&377 .IIF EQ,J&177400 .BYTE I+20,J .MEXIT .ENDC .ERROR ;BAD INSTRUCTION .MEXIT .ENDC .IF IDN ,# ;IMMEDIATE MODE .IIF EQ -217 ,.ERROR ;STS # .IIF EQ -317 ,.ERROR ;STX # .IIF NB, .BYTE I,K,L .IIF B, .BYTE I,K&177400/400,K&377 .MEXIT .ENDC .IF B, .IF NB, .IF IDN ,X ;INDEXED .IIF LT,J .ERROR ;NEGATIVE OFFSET .BYTE I+40,J .MEXIT .ENDC .ENDC .ENDC .ERROR ;BAD INSTRUCTION .ENDM ; .MACRO FINST H,I .MACRO H J,K,L .NLIST SRC FKRNL I,J,K,L .LIST SRC .ENDM .ENDM FINST ; ; ;MNEMONIC OPCODE ;OPERATION ; FINST CPX, 214 ;COMPARE TO INDEX FINST LDS, 216 ;LOAD STACK REGISTER FINST LDX, 316 ;LOAD INDEX REGISTER FINST STS, 217 ;STORE STACK REGISTER FINST STX, 317 ;STORE INDEX REGISTER ; ; ; .IIF DF,.M68 .PAGE .IIF DF,.M68 .SBTTL ASSEMBLER DIRECTIVES ; .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