.XLIST ; . . . . . ; ; SAVE MACRO SAVE SPECIFIED REGITERS. ; ; SAVE R1,R2,R3,R4 ; ; R1-R4 MAY BE BC,DE,HL OR AF SAVED ; IN ORDER SPECIFIED, IF REGS ARE OMITTED ; SAVE BC,DE AND HL. ; SAVE MACRO R1,R2,R3,R4 IFNB IRP R, IFB EXITM ENDIF PUSH R ENDM ELSE IRP REG, PUSH REG ENDM ENDIF ENDM ; ; . . . . . ; ; RESTORE MACRO RESTORE REGITERS ; (INVERSE OF SAVE) ; ; RESTORE R1,R2,R3,R4 ; ; R1-R4 MAY BE BC,DE,HL OR AF ; RESTORED IN ORDER SPECIFIED ; IF REGS OMITTED RESTORE HL,DE,BC. ; RESTORE MACRO R1,R2,R3,R4 IFNB IRP R, IFB EXITM ENDIF POP R ENDM ELSE IRP REG, POP REG ENDM ENDIF ENDM ; ; . . . . . . . ; ; PRINT MACRO PRINT A STRING ON CONSOLE ; ; PRINT (CERRIAGE RETURN,LINE FEED) ; PRINT 'LITERAL' ; PRINT <'LITERAL,CR,LF,'SECOND LITERAL'> ; PRINT ADDR,$ (ASCII OUTPUT UNTIL $) ; PRINT ADDR,L,'H' (HEX OUTPUT L CHARACTERS) ; PRINT ADDR,L,'A' (ASCII OUTPUT L CHARACTERS) ; ; LITERALS MUST BE IN SINGLE QUOTES 'LIT' ; IF LITERAL CONTAINS CONTROL CODES ENTIRE ; STRING MUST BE IN <> BRACKETS. ; ; MACRO ALSO ASSEMBLES: ; CR = CARRIAGE RETURN ; LF = LINE FEED ; BEL = BELL CODE ; ; MACRO ASSUMES ADDR ALREADY IN HL IF ARUMENT ; IS OMITTED. ; ; . . . . . . . PRINT MACRO ?STRING,LEN,TC LOCAL @OVER,@MESS,PLOOP,PASTCR,@CRLF CR DEFL 0DH LF DEFL 0AH BEL DEFL 07H IFB JR PASTCR @CRLF: DEFB CR DEFB LF DEFB '$' PASTCR: LD DE,@CRLF LD C,9 CALL 5 ELSE IFB JR @OVER @MESS: DEFB ?STRING DEFB '$' @OVER: LD DE,@MESS LD C,9 CALL 5 ELSE IFB IFNB LD DE,?STRING ENDIF LD C,9 CALL 5 ELSE IFNB LD HL,?STRING ENDIF LD C,LEN PLOOP: PUSH BC PUSH HL IF TC EQ 'H' LD A,(HL) ; GET A BYTE HEXOUT ; CONV. TO HEX&OUTP. ELSE LD E,(HL) LD C,2 CALL 5 ENDIF POP HL POP BC INC HL DEC C JR NZ,PLOOP ENDIF ENDIF ENDIF ENDM ; ; . . . . . . ; ; HEXOUT MACRO CONVERT BINARY NO ; AND OUTPUT TO CONSOLE. ; ; HEXOUT ADDR ; ; NUMBER ASSUMED IN A IF NO ARGUMENT. ; HEXOUT MACRO ADDR LOCAL OUTCHR,HEXEND JP HEXEND HEXPRN: SAVE AF RRCA RRCA RRCA RRCA CALL OUTCHR RESTORE AF OUTCHR: AND 0FH ;MASK 4 BITS ADD A,90H ; ADD OFFSET DAA ADC A,40H DAA LD E,A LD C,2 JP 5 HEXEND: HEXOUT MACRO ?ADDR IFNB LD A,(?ADDR) ENDIF CALL HEXPRN ENDM HEXOUT ADDR ENDM ; . . . . . ; ;HEXIN MACRO ; CONVERT A NUMBER IN MEMORY FROM ; HEX TO BINARY. ; IF NO ARGUMENT, MACRO ASSUMES ; ADDR OF STRING IN HL. ; ASNWER LEFT IN HL, WITH LEAST SIGN. ; 8BITS IN A. CARRY SET ON ERROR. ; CONVERSION STOPS IF A ZERO IS FOUND ; IN INPUT STRING. ; ; HEXIN [ADDR] ; HEXIN MACRO ADDR LOCAL IN1,IN2,OVERSUB JR OVERSUB @HEXIN: LD HL,0 ; ZERO NUMBER IN1: LD A,(DE) ; GET A CHAR OR A ; CHECK FOR END RET Z SUB '0' RET C ADD A,'0'-'G' RET C ADD A,6 JP P,IN2 ADD A,7 RET C IN2: ADD A,10 OR A LD C,A LD B,0 ADD HL,HL ADD HL,HL ADD HL,HL ADD HL,HL ; SHIFT LEFT 4 ADD HL,BC ; ADD IN NEW DIGIT INC DE ; INCR BUFFER POINTER JR IN1 ; OVERSUB: HEXIN MACRO ?ADDR IFNB LD DE,?ADDR ELSE EX DE,HL ENDIF CALL @HEXIN LD A,L ENDM HEXIN ADDR ENDM ; ; ; . . . . . . ; ; CHARIN MACRO CONSOLE INPUT ; TO A AND TO (ADDR) IF SPECIFIED. ; ; CHARIN [ADDR] ; CHARIN MACRO ADDR LD C,1 ;CONSOLE INPUT CALL 5 IFNB LD (ADDR),A ENDIF ENDM ; ; . . . . . ; ; CHAROUT MACRO CONSOLE OUTPUT ; FROM A OR (ADDR) IF SPECIFIED. ; ; CHAROUT [ADDR] ; CHAROUT MACRO ADDR IFNB LD A,(ADDR) ENDIF LD C,2 LD E,A CALL 5 ENDM ; ; . . . . . ; ; CHARSTAT MACRO, CHECK CONSOLE STATUS. ; ; RETURN TRUE (FF) IF CHAR READY ; FALSE (0) IF NOT. ; CHARSTAT MACRO LOCAL EXIT LD C,11 CALL 5 OR A JR Z,EXIT LD A,0FFH EXIT: ENDM ; ; . . . . . ; ; INPUT MACRO ; INPUT CHAR STRING FROM CONSOLE. ; ; INPUT ADDR,BUFLEN ; ; ADDR START OF TEXT BUFFER. ; BUFLEN LENGTH OF BUFFER (DEFAULT 127). ; INPUT MACRO ADDR,BUFLEN LD C,10 IFNB LD DE,ADDR ;SET BUFFER ADDRESS ENDIF IFNB LD (DE),A ELSE LD A,127 LD (DE),A ENDIF CALL 5 ENDM ; .LIST