TITLE Instruction set program SUBTTL /This goes in .HEX file/ THIS EQU 1=1 THAT EQU 0=1 MACLIB TORTUR ;READ IN SYMBOL AND MACRO DEFS FROM TORTUR.LIB ORG 100H ;TELL MAC80 TO PLACE CODE AT 100 HEX ; OPT HEX ;HEX OUTPUT (THE DEFAULT) ; EXPRESSION OPERANDS ARE THE SAME AS DR MAC: ; OP ALTERNATE ; * ; / ; MOD \ ; SHL _ ; SHR ; NOT # ; + ; - ; EQ = ; LT < ; LE <= ; GT > ; GE >= ; NE <> ; AND & ; OR ! ; XOR ; HIGH ; LOW LO ; START: ACI 1 ;ALL THE INSTRUCTIONS IN ALPHABETICAL ORDER ADC C ADD B LONG$SYMBOL: ;IMBEDDED $ IS NOT SIGNIFICANT ADI 123 ANA M ANI 0110$1001B CALL MACROS CC START+1 ;EXAMPLES OF ADDRESS CALCULATIONS CM START-10H CMA CMC CMP B CNC START/2 CNZ (START*3)/3 CP (START/3)*3 CPI (20 AND 0FH) + '0' CPE START MOD 10 CPO START AND 0FFH CZ LOW START DAA DAD H DB "Hello ","There",(RIM),(ADD C),(MOV A,M) DCR C DCX H DI DS (STAT*10)-1 DW 1,2,3,(RET),$+1 DZ "Hello There " EI HLT IN STAT INR A INX H JC -START JM START AND 0FF00H JMP HIGH START ;SAME AS (START AND 0FF00H)/100H JNC NOT START JNZ #START ;MEANS "NOT START" SEE DODATA ROUTINE JP LONG$SYMBOL JPE START JPO START-STAT JZ START!77Q LDA START OR 3FH LDAX B LHLD $-LONG$SYMBOL ;$ MEANS 'PC OF THIS INSTRUCTION' NOT THIS BYTE LXI H,"ab" MOV A,M MVI B,(START-$-1) AND 0FFH NOP ORA B ORI LOW (START-$-1) ;SAME AS "AND 0FFH" OUT 5 PCHL POP B PRINTX This is the instruction set test PUSH H RAL RAR RC RET RIM RLC RM RNC RNZ RP RPE RPO RRC RST 5 RZ SBB D SBI "A" SHLD START SHR 2 SIM SPHL STA START SHL 3 STAX D STC SUB L SUI '"' ;QUOTES CAN BE ' OR " (AND IS REMEMBERED) XCHG XRA C XRI 4 XTHL PAGE ;FORCE PAGE BREAK ;SPECIAL CASE OF $ IN EQU DOES MEAN 'THIS BYTE' HERE EQU $ ;WILL ALSO ACCEPT . IFE THIS ;IF ELSE ENDIF TESTS DB 1 ELSE DB 2 ENDIF IF HERE GE 10 ;'IF' IS THE SAME AS 'IFN' DB 3 IF HERE = 5 ;NESTED IFS DB 4 ELSE DB 5 ENDIF ELSE DB 6 IF HERE < 10 DB 7 ELSE DB 8 ENDIF ENDIF PAGE 30 ;SET NEW PAGE SIZE MACROS: MAC1 MAC2 FOO,START MAC3 ,<"ANGLE BRACKETS DELIMIT ANYTHING"> MAC3 HLT,100 OPT SMAC ;SUPPRESS MACRO EXPANSION MAC1 OPT LMAC ;LIST MACRO EXPANSION MAC1 TABLE MACRO ;CLASSIC TABLE GENERATION MACRO X ABC X AAA X JKL X C90 ENDM X MACRO ARG DB "ARG" ENDM VALUES: TABLE X MACRO ARG DW ADR'ARG ENDM ADDRES: TABLE X MACRO ARG ;BE LAZY & MAKE ADDRESSES ALSO ADR'ARG: JMP START ENDM TABLE X EQU 3 COUNT X ;INVOKE COUNT X TIMES TYPEOUT MACRO MESSAGE ;DEFINE A TYPEOUT MACRO LOCAL PAST ;;WITH A LOCAL SYMBOL JMP PAST ;SKIP OVER THE GENERATED SUBROUTINE STRING$OUT: MVI C,9 ;PRINT A STRING CALL 5 RET PAST: TYPEOUT MACRO MESS1 ;NOW REDEFINE TYPEOUT LOCAL MADDR,SKIP ;DEFINE LOCAL SYMBOLS JMP SKIP ;;TO SKIP OVER THE LITERAL GENERATED MADDR: DB "MESS1'$" ;;GENERATE A DB [USE ONLY DOUBLE QUOTES IN MACROS!] SKIP: LXI D,MADDR ;;AND CALL THE MSGOUT ROUTINE CALL STRING$OUT ENDM ;END OF THE RE-DEFINITION OF TYPEOUT TYPEOUT MESSAGE ;USE THE REDEFINED TYPEOUT TO DO THE MESSAGE ENDM ;INVOKE TYPEOUT THE FIRST TIME TYPEOUT HELLO ;INVOKE TYPEOUT THE SECOND TIME TYPEOUT THERE ;INVOKE TYPEOUT THE THIRD TIME TYPEOUT END START ;START ADDRESS OPTIONAL