;MACRO LIBRARY FOR MESSAGE TYPEOUT ; REBOOT EQU 0000H ;WARM START ENTRY POINT TPA EQU 0100H ;TRANSIENT PROGRAM AREA BDOS EQU 0005H ;SYSTEM ENTRY POINT PMSG EQU 2 ;WRITE CONSOLE CHAR FUNCTION CR EQU 0DH LF EQU 0AH ; ; MACRO DEFINITIONS ; CHROUT MACRO ;WRITE A CONSOLE CHAR FROM REGISTER 'A' MVI C,PMSG ;;TYPE FUNCTION CALL BDOS ;;ENTER THE BDOS TO WRITE THE CHAR ENDMAC;;CHROUT ; TYPEOUT MACRO %MESSAGE ;TYPE THE LITERAL MESSAGE AT THE CONSOLE JMPR .PASTSUB ;;JUMP PAST SUBROUTINE INITIALLY ;;THIS SUBROUTINE IS USED TO PRINT IN LINE MESSAGE STARTING AT HL PRINT: XTHL ;; HL POINTS TO CHAR MOV E,M ;;NEXT CHAR TO E MOV A,E ;;TO ACCUM TO TEST FOR 00 INX H XTHL PUSH PSW ;;SAVE CHARACTER ANI 7FH CHROUT POP PSW ;RETURN CHARACTER ORA A ;;=00? RZ JMPR PRINT ;;CONTINUE .PASTSUB: ; ;; REDEFINE THE TYPEOUT MACRO AFTER THE FIRST INVOCATION TYPEOUT MACRO %%MESSAGE CALL PRINT ;;CALL THE PREVIOUSLY DEFINED SUBROUTINE ;; INCLUDE THE LITERAL MESSAGE AT THIS POINT DB 'FROM THE CONSOLE: ' DB %%MESSAGE,CR,LF,0 ;; ARRIVE HERE TO CONTINUE THE MAINLINE CODE ENDMAC TYPEOUT %MESSAGE ENDMAC ; ENTCCP MACRO SSIZE ;ENTER PROGRAM FROM CCP, RESERVE 2*SSIZE STACK LOCS SSPD $ENTSP ;; ENTRY SP LSPD $STACK ;;SET TO LOCAL STACK JMPR .START IF SSIZE ;;SIZE <> 0 DS 2*SSIZE ELSE ;;SIZE = 0 DS 32 ;;DEFAULT 16 LEVEL STACK ENDIF $STACK: ;;LOW END OF STACK $ENTSP: DS 2 ;;ENTRY SP .START ENDMAC;;ENTCCP ; RETCCP MACRO ;RETURN TO CONSOLE PROCESSOR LSPD $ENTSP ;;RELOAD CCP STACK RET ;BACK TO THE CCP ENDMAC ; ABORT MACRO ;ABORT THE PROGRAM JMP REBOOT ENDMAC ; ; END OF MACRO LIBRARY