.TITLE TMS 9900 - CROSS-ASSEMBLER ; ; ********************************************* ; C R O S S - A S S E M B L E R FOR TMS 9900 ; ********************************************* ; ; CREATED ON 20-APR-79 ; .IDENT /MK 1.8/ ; 09-FEB-80 MEY ; ; EXAMPLES: ; ; MOV R1,R12 ; LI R4,8. ; LOAD WITH 8 (DECIMAL) ; MOV * R1 +,* R2 + ; THE 'SPACE' IS ABSOLUTLY NECCESSARY ; MOV @ LABEL,* R1 ; MOV @ LABEL R13,R3 ; INDEXED. NO () ; ; YOUR PROGRAM SHOULD START WITH: ; ; .MCALL .OP99 ; .OP99 ; ; ASSEMBLE WITH: ; ; MAC ....+OP99/LIB ; .MACRO .OP99 .DSABL REG .LIST MEB .MCALL .ADRM, ..AM1, .WORD$, .ASCIZ, ..ASCZ, .BYT .MCALL A,AB,ABS,AI,ANDI,B,BL,BLWP .MCALL C,CB,CI,CKOF,CKON,CLR,COC,CZC .MCALL DEC,DECT,DIV,IDLE,INC,INCT,INV .MCALL JEQ,JGT,JH,JHE,JL,JLE,JLT .MCALL JMP,JNC,JNE,JNO,JOC,JOP .MCALL LDCR,LI,LIMI,LREX,LWPI .MCALL MOV,MOVB,MPY,NEG,ORI,RSET,RTWP .MCALL S,SB,SBO,SBZ,SETO,SLA,SOC,SOCB .MCALL SRA,SRC,SRL,STCR,STST,STWP .MCALL SWPB,SZC,SZCB,TB,X,XOP,XOR .MCALL SPCAL,.WORDC,NOP R0 = 0. R1 = 1. R2 = 2. R3 = 3. R4 = 4. R5 = 5. R6 = 6. R7 = 7. R8 = 8. R9 = 9. R10 = 10. R11 = 11. R12 = 12. R13 = 13. R14 = 14. R15 = 15. ; WP1 = 1. ; WP2 = 2. ; WP3 = 3. ; WP4 = 4. ; WP5 = 5. ; WP6 = 6. ; WP7 = 7. ; WP8 = 8. ; ON = 0. ; OFF = 1. RNUL$ = . .ENDM .MACRO .ADRM FLAG,D,E,F,G,H,J .NLIST SRC .NLIST CND .NLIST MD SFLG$ = 0 DFLG$ = 0 ..AM1 FLAG,D,E,F,G CODE$ = CODE$+ACOD$ .IF Z FLAG-2 .IF Z DFLG$-1 SFLG$ = 2 DFLG$ = 0 SSYM$ = DSYM$ .ENDC .IF NZ AFLG$-1 .IF NZ AFLG$-2 ..AM1 1,G,H,J .IFF ..AM1 1,F,G,H .ENDC .IFF ..AM1 1,E,F,G .ENDC CODE$ = CODE$+ .ENDC .IF Z SFLG$+DFLG$ .WORD CODE$ .ENDC .IF Z SFLG$+DFLG$-1 .WORD CODE$,DSYM$ .ENDC .IF Z SFLG$+DFLG$-2 .WORD CODE$,SSYM$ .ENDC .IF Z SFLG$+DFLG$-3 .WORD CODE$,SSYM$,DSYM$ .ENDC .LIST SRC .LIST CND .LIST MD .ENDM .ADRM .MACRO ..AM1 FLAG,D,E,F,G .IF DIF ,<@> ; REGISTER,INDIRECT .IF DIF ,<*> ; REGISTER ACOD$ = D&17 AFLG$ = 1 .MEXIT .ENDC ; INDIRECT: .IF DIF ,<+> ACOD$ = 20+ AFLG$ = 2 .MEXIT .ENDC ; AUTO-INC: ACOD$ = 60+ AFLG$ = 3 .MEXIT .ENDC ; DIRECT,INDEXED: DFLG$ = 1 DSYM$ = E .IF Z FLAG-1 .IF NB ; INDEXED: ACOD$ = 40+ AFLG$ = 3 .MEXIT .ENDC ; DIRECT: ACOD$ = 40 AFLG$ = 2 .MEXIT .ENDC .IF DIF ,<@> .IF DIF ,<*> .IF NB ; INDEXED: ACOD$ = 40+ AFLG$ = 3 .MEXIT .ENDC .ENDC .ENDC ; DIRECT: ACOD$ = 40 AFLG$ = 2 .ENDM ..AM1 .MACRO .WORD$ V1,V2 .NLIST SRC .IF B .WORD V1 .IFF .WORD V1,V2 .ENDC .LIST SRC .ENDM ; .MACRO .ASCIZ A,B,C,D,E,F,G,H .NLIST SRC .NLIST CND .NLIST MD STFG$ = 1 BYTF$ = 1 .IIF NZ <<.-RNUL$>&1>,BYTF$=-BYTF$ ..ASCZ .BYT 0 .LIST SRC .LIST CND .LIST MD .ENDM .ASCIZ ; .MACRO ..ASCZ TXT .IRPC CHCT$, .IF NZ STFG$ .IF NB BRAC$ = ''CHCT$ STFG$ = 0 .ENDC .IFF .IF NZ <''CHCT$-BRAC$> . = .+BYTF$ .BYTE ''CHCT$ . = .-BYTF$ BYTF$ = -BYTF$ .IFF STFG$ = 1 .ENDC .ENDC .ENDM .ENDM ..ASCZ ; .MACRO .BYT A,B,C,D,E,F,G,H .NLIST SRC .NLIST CND .NLIST MD BYTF$ = 1 .IIF NZ <<.-RNUL$>&1>,BYTF$=-BYTF$ .IRP CHCT$, .IF NB . = .+BYTF$ .BYTE CHCT$ . = .-BYTF$ BYTF$ = -BYTF$ .ENDC .ENDM .LIST SRC .LIST CND .LIST MD .ENDM .BYT ; ; OPCODE FOR TMS 9900: ; .MACRO A D,E,F,G,H,J CODE$ = 120000 .ADRM 2,D,E,F,G,H,J .ENDM ; .MACRO AB D,E,F,G,H,J CODE$ = 130000 .ADRM 2,D,E,F,G,H,J .ENDM ; .MACRO ABS G,H,J CODE$ = 003500 .ADRM 1,G,H,J .ENDM ; .MACRO AI W,VAL .WORD$ 001040+W,VAL .ENDM ; .MACRO ANDI W,VAL .WORD$ 001100+W,VAL .ENDM ; .MACRO B G,H,J CODE$ = 002100 .ADRM 1,G,H,J .ENDM ; .MACRO BL G,H,J CODE$ = 003200 .ADRM 1,G,H,J .ENDM ; .MACRO BLWP G,H,J CODE$ = 002000 .ADRM 1,G,H,J .ENDM ; .MACRO C D,E,F,G,H,J CODE$ = 100000 .ADRM 2,D,E,F,G,H,J .ENDM ; .MACRO CB D,E,F,G,H,J CODE$ = 110000 .ADRM 2,D,E,F,G,H,J .ENDM ; .MACRO CI W,VAL .WORD$ 001200+W,VAL .ENDM ; .MACRO CKOF .WORD$ 001700 .ENDM ; .MACRO CKON .WORD$ 001640 .ENDM ; .MACRO CLR G,H,J CODE$ = 002300 .ADRM 1,G,H,J .ENDM ; .MACRO COC D,E,F,J CODE$ = 020000 .ADRM 2,D,E,F,J .ENDM ; .MACRO CZC D,E,F,J CODE$ = 022000 .ADRM 2,D,E,F,J .ENDM ; .MACRO DEC G,H,J CODE$ = 003000 .ADRM 1,G,H,J .ENDM ; .MACRO DECT G,H,J CODE$ = 003100 .ADRM 1,G,H,J .ENDM ; .MACRO DIV D,E,F,J CODE$ = 036000 .ADRM 2,D,E,F,J .ENDM ; .MACRO IDLE .WORD$ 001500 .ENDM ; .MACRO INC G,H,J CODE$ = 002600 .ADRM 1,G,H,J .ENDM ; .MACRO INCT G,H,J CODE$ = 002700 .ADRM 1,G,H,J .ENDM ; .MACRO INV G,H,J CODE$ = 002500 .ADRM 1,G,H,J .ENDM ; .MACRO JEQ VAL .WORD$ 011400+<</2>&377> .ENDM ; .MACRO JGT VAL .WORD$ 012400+<</2>&377> .ENDM ; .MACRO JH VAL .WORD$ 015400+<</2>&377> .ENDM ; .MACRO JHE VAL .WORD$ 012000+<</2>&377> .ENDM ; .MACRO JL VAL .WORD$ 015000+<</2>&377> .ENDM ; .MACRO JLE VAL .WORD$ 011000+<</2>&377> .ENDM ; .MACRO JLT VAL .WORD$ 010400+<</2>&377> .ENDM ; .MACRO JMP VAL .WORD$ 010000+<</2>&377> .ENDM ; .MACRO JNC VAL .WORD$ 013400+<</2>&377> .ENDM ; .MACRO JNE VAL .WORD$ 013000+<</2>&377> .ENDM ; .MACRO JNO VAL .WORD$ 014400+<</2>&377> .ENDM ; .MACRO JOC VAL .WORD$ 014000+<</2>&377> .ENDM ; .MACRO JOP VAL .WORD$ 016000+<</2>&377> .ENDM ; .MACRO LDCR G,H,J,VAL CODE$ = 030000 .ADRM 2,G,H,J,VAL .ENDM ; .MACRO LI W,VAL .WORD$ 001000+W,VAL .ENDM ; .MACRO LIMI VAL .WORD$ 001400,VAL .ENDM ; .MACRO LREX .WORD$ 001740 .ENDM ; .MACRO LWPI VAL .WORD$ 001340,VAL .ENDM ; .MACRO MOV D,E,F,G,H,J CODE$ = 140000 .ADRM 2,D,E,F,G,H,J .ENDM ; .MACRO MOVB D,E,F,G,H,J CODE$ = 150000 .ADRM 2,D,E,F,G,H,J .ENDM ; .MACRO MPY D,E,F,J CODE$ = 034000 .ADRM 2,D,E,F,J .ENDM ; .MACRO NEG G,H,J CODE$ = 002400 .ADRM 1,G,H,J .ENDM ; .MACRO ORI W,VAL .WORD$ 001140+W,VAL .ENDM ; .MACRO RSET .WORD$ 001540 .ENDM ; .MACRO RTWP .WORD$ 001600 .ENDM ; .MACRO S D,E,F,G,H,J CODE$ = 060000 .ADRM 2,D,E,F,G,H,J .ENDM ; .MACRO SB D,E,F,G,H,J CODE$ = 070000 .ADRM 2,D,E,F,G,H,J .ENDM ; .MACRO SBO VAL .WORD$ 016400+ .ENDM ; .MACRO SBZ VAL .WORD$ 017000+ .ENDM ; .MACRO SETO G,H,J CODE$ = 003400 .ADRM 1,G,H,J .ENDM ; .MACRO SLA W,VAL .WORD$ 005000++W .ENDM ; .MACRO SOC D,E,F,G,H,J CODE$ = 160000 .ADRM 2,D,E,F,G,H,J .ENDM ; .MACRO SOCB D,E,F,G,H,J CODE$ = 170000 .ADRM 2,D,E,F,G,H,J .ENDM ; .MACRO SRA W,VAL .WORD$ 004000++W .ENDM ; .MACRO SRC W,VAL .WORD$ 005400++W .ENDM ; .MACRO SRL W,VAL .WORD$ 004400++W .ENDM ; .MACRO STCR G,H,J,VAL CODE$ = 032000 .ADRM 2,G,H,J,VAL .ENDM ; .MACRO STST W .WORD$ 001300+W .ENDM ; .MACRO STWP W .WORD$ 001240+W .ENDM ; .MACRO SWPB G,H,J CODE$ = 003300 .ADRM 1,G,H,J .ENDM ; .MACRO SZC D,E,F,G,H,J CODE$ = 040000 .ADRM 2,D,E,F,G,H,J .ENDM ; .MACRO SZCB D,E,F,G,H,J CODE$ = 050000 .ADRM 2,D,E,F,G,H,J .ENDM ; .MACRO TB VAL .WORD$ 017400+ .ENDM ; .MACRO X G,H,J CODE$ = 002200 .ADRM 1,G,H,J .ENDM ; .MACRO XOP D,E,F,J CODE$ = 026000 .ADRM 2,D,E,F,J .ENDM ; .MACRO XOR D,E,F,J CODE$ = 024000 .ADRM 2,D,E,F,J .ENDM ; ; PSEUDO - INSTRUCTIONS: ; .MACRO SPCAL SP,G,H,J,VAL CODE$ = 026000 .ADRM 1,G,H,J .WORD$ SP*256.+VAL .ENDM ; .MACRO .WORDC ROW,COL,SW .WORD$ <+COL>!<& 000100> .ENDM ; .MACRO NOP .WORD$ 010000 .ENDM