.TITLE CA85 - 8500 CROSSASSEMBLER ; ; CREATED ON 25-MAY-81 ; .IDENT /MK 1.2/ ; 25-MAY-81 MEY/SMO ; ; SOURCE FOR MACRO LIBRARY OP85 ; ;+ ; THIS MACRO LIBRARY CONTAINES ALL 8085 INSTRUCTIONS AS ; MACROS. THE LIBRARY MUST BE ASSEMBLED WITH THE 8085 ; SOURCE PROGRAM: ; ; MACRO ....+OP85/LIB ; ; THE SOURCE PROGRAM FIRST MUST CALL THE MACRO .OP85 TO ; DECLARE THE 8085 INSTRUCTION SET. ; ; ; .MACRO .OP85 .DSABL REG .LIST MEB ...B = 0 ...C = 1 ...D = 2 ...E = 3 ...H = 4 ...L = 5 ...M = 6 ...A = 7 ...SP = 6 ...PSW = 6 .MCALL .BYTE$, .WORD$, .BWRD$ .MCALL .CL1, .CL2 .MCALL MOV,XCHG,XTHL,SPHL,LDA,LDAX,LHLD,POP,IN,LXI .MCALL STA,STAX,SHLD,PUSH,OUT,MVI .MCALL INR,DCR,INX,DCX,ADD,ADC,DAD,SUB,SBB .MCALL ADI,ACI,SUI,SBI,DAA .MCALL CMA,ANA,ANI,ORA,ORI,XRA,XRI,CMP,CPI .MCALL RLC,RRC,RAL,RAR,CMC,STC .MCALL PCHL,JMP,JC,JNC,JZ,JNZ,JM,JP,JPE,JPO .MCALL CALL,CC,CNC,CZ,CNZ,CM,CP,CPE,CPO,RST .MCALL RET,RC,RNC,RZ,RNZ,RM,RP,RPE,RPO .MCALL EI,DI,HLT,NOP,RIM,SIM .ENDM .OP85 .MACRO .CL1 CODE,ARG1,ARG2,VAL .NLIST SRC .NLIST CND .NLIST MD CODE$ = CODE .IF NB .IF DF ...'ARG1 CODE$ = CODE$!<...'ARG1*8.> .IFF .ERROR ILLEGAL ARGUMENT 'ARG1 .ENDC .ENDC .IF NB .IF DF ...'ARG2 CODE$ = CODE$!<...'ARG2> .IFF .ERROR ILLEGAL ARGUMENT 'ARG2 .ENDC .ENDC .IF B .BYTE CODE$ .IFF .BYTE CODE$,VAL&377 .ENDC .LIST MD .LIST CND .LIST SRC .ENDM .CL1 ; ; .MACRO .CL2 CODE,ARG,VAL .NLIST SRC .NLIST CND .NLIST MD .IF DF ...'ARG .IF B .BYTE CODE!<<...'ARG*8.>&^B00110000> .IFF .BYTE CODE!<<...'ARG*8.>&^B00110000>,VAL&377,VAL/256. .ENDC .IFF .ERROR ILLEGAL ARGUMENT 'ARG .ENDC .LIST SRC .LIST CND .LIST MD .ENDM .CL2 ; ; .MACRO .BYTE$ V1,V2 .NLIST SRC .IF B .BYTE V1&377 .IFF .BYTE V1&377,V2&377 .ENDC .LIST SRC .ENDM .BYTE$ ; ; .MACRO .WORD$ VAL .NLIST SRC .BYTE VAL&377,VAL/256. .LIST SRC .ENDM .WORD$ ; ; .MACRO .BWRD$ BVAL,WVAL .NLIST SRC .IF B .BYTE BVAL&377 .IFF .BYTE BVAL&377,WVAL&377,WVAL/256. .ENDC .LIST SRC .ENDM .BWRD$ ; ; TRANSFER INSTRUCTIONS ; .MACRO MOV R1,R2 .IF IDN , .IF IDN , .ERROR .ENDC .ENDC .CL1 <^B01000000>,, .ENDM ; .MACRO XCHG .BYTE$ <^B11101011> .ENDM ; .MACRO XTHL .BYTE$ <^B11100011> .ENDM ; .MACRO SPHL .BYTE$ <^B11111001> .ENDM ; .MACRO LDA ADR .BWRD$ <^B00111010>, .ENDM ; .MACRO LDAX RR .IF IDN , .CL2 <^B00001010>, .MEXIT .ENDC .IF IDN , .CL2 <^B00001010>, .MEXIT .ENDC .ERROR .ENDM ; .MACRO LHLD ADR .BWRD$ <^B00101010>, .ENDM ; .MACRO POP RR .IF IDN , .ERROR .MEXIT .ENDC .CL2 <^B11000001>, .ENDM ; .MACRO IN NR .BYTE$ <^B11011011>, .ENDM ; .MACRO LXI RR,ADR .CL2 <^B00000001>,, .ENDM ; .MACRO STA ADR .BWRD$ <^B00110010>, .ENDM ; .MACRO STAX RR .IF IDN , .CL2 <^B00000010>, .MEXIT .ENDC .IF IDN , .CL2 <^B00000010>, .MEXIT .ENDC .ERROR .ENDM ; .MACRO SHLD ADR .BWRD$ <^B00100010>, .ENDM ; .MACRO PUSH RR .IF IDN , .ERROR .MEXIT .ENDC .CL2 <^B11000101>, .ENDM ; .MACRO OUT NR .BYTE$ <^B11010011>, .ENDM ; .MACRO MVI R1,K .CL1 <^B00000110>,,, .ENDM ; ;ARITHMETISCHE OPERATIONEN ; .MACRO INR R1 .CL1 <^B00000100>, .ENDM ; .MACRO DCR R1 .CL1 <^B00000101>, .ENDM ; .MACRO INX RR .CL2 <^B00000011>, .ENDM ; .MACRO DCX RR .CL2 <^B00001011>, .ENDM ; .MACRO ADD R1 .CL1 <^B10000000>,, .ENDM ; .MACRO ADC R1 .CL1 <^B10001000>,, .ENDM ; .MACRO DAD RR .CL2 <^B00001001>, .ENDM ; .MACRO SUB R1 .CL1 <^B10010000>,, .ENDM ; .MACRO SBB R1 .CL1 <^B10011000>,, .ENDM ; .MACRO ADI K .BYTE$ <^B11000110>, .ENDM ; .MACRO ACI K .BYTE$ <^B11001110>, .ENDM ; .MACRO SUI K .BYTE$ <^B11010110>, .ENDM ; .MACRO SBI K .BYTE$ <^B11011110>, .ENDM ; .MACRO DAA .BYTE$ <^B00100111> .ENDM ; ;LOGISCHE OPERATIONEN ; .MACRO CMA .BYTE$ <^B00101111> .ENDM ; .MACRO ANA R1 .CL1 <^B10100000>,, .ENDM ; .MACRO ANI K .BYTE$ <^B11100110>, .ENDM ; .MACRO ORA R1 .CL1 <^B10110000>,, .ENDM ; .MACRO ORI K .BYTE$ <^B11110110>, .ENDM ; .MACRO XRA R1 .CL1 <^B10101000>,, .ENDM ; .MACRO XRI K .BYTE$ <^B11101110>, .ENDM ; .MACRO CMP R1 .CL1 <^B10111000>,, .ENDM ; .MACRO CPI K .BYTE$ <^B11111110>, .ENDM ; ;REGISTERANWEISUNGEN ; .MACRO RLC .BYTE$ <^B00000111> .ENDM ; .MACRO RRC .BYTE$ <^B00001111> .ENDM ; .MACRO RAL .BYTE$ <^B00010111> .ENDM ; .MACRO RAR .BYTE$ <^B00011111> .ENDM ; .MACRO CMC .BYTE$ <^B00111111> .ENDM ; .MACRO STC .BYTE$ <^B00110111> .ENDM ; ;SPRUNGBEFEHLE ; .MACRO PCHL .BYTE$ <^B11101001> .ENDM ; .MACRO JMP ADR .BWRD$ <^B11000011>, .ENDM ; .MACRO JC ADR .BWRD$ <^B11011010>, .ENDM ; .MACRO JNC ADR .BWRD$ <^B11010010>, .ENDM ; .MACRO JZ ADR .BWRD$ <^B11001010>, .ENDM ; .MACRO JNZ ADR .BWRD$ <^B11000010>, .ENDM ; .MACRO JM ADR .BWRD$ <^B11111010>, .ENDM ; .MACRO JP ADR .BWRD$ <^B11110010>, .ENDM ; .MACRO JPE ADR .BWRD$ <^B11101010>, .ENDM ; .MACRO JPO ADR .BWRD$ <^B11100010>, .ENDM ; ;UNTERPROGRAMMBEHANDLUNG ; .MACRO CALL ADR .BWRD$ <^B11001101>, .ENDM ; .MACRO CC ADR .BWRD$ <^B11011100>, .ENDM ; .MACRO CNC ADR .BWRD$ <^B11010100>, .ENDM ; .MACRO CZ ADR .BWRD$ <^B11001100>, .ENDM ; .MACRO CNZ ADR .BWRD$ <^B11000100>, .ENDM ; .MACRO CM ADR .BWRD$ <^B11111100>, .ENDM ; .MACRO CP ADR .BWRD$ <^B11110100>, .ENDM ; .MACRO CPE ADR .BWRD$ <^B11101100>, .ENDM ; .MACRO CPO ADR .BWRD$ <^B11100100>, .ENDM ; .MACRO RST K .CL1 <^B11000111>, .ENDM ; .MACRO RET .BYTE$ <^B11001001> .ENDM ; .MACRO RC .BYTE$ <^B11011000> .ENDM ; .MACRO RNC .BYTE$ <^B11010000> .ENDM ; .MACRO RZ .BYTE$ <^B11001000> .ENDM ; .MACRO RNZ .BYTE <^B11000000> .ENDM ; .MACRO RM .BYTE$ <^B11111000> .ENDM ; .MACRO RP .BYTE$ <^B11110000> .ENDM ; .MACRO RPE .BYTE$ <^B11101000> .ENDM ; .MACRO RPO .BYTE$ <^B11100000> .ENDM ; ;PROGRAMMUNTERBRECHUNG ; .MACRO EI .BYTE$ <^B11111011> .ENDM ; .MACRO DI .BYTE$ <^B11110011> .ENDM ; ;SONSTIGE BEFEHLE ; .MACRO HLT .BYTE$ <^B01110110> .ENDM ; .MACRO NOP .BYTE$ <^B00000000> .ENDM ; ;NUR FUER 8085 ; .MACRO RIM .BYTE$ <^B00100000> .ENDM ; .MACRO SIM .BYTE$ <^B00110000> .ENDM ; ;END OF INSTRUCTION SET ;