MACRO-80 3.4 01-Dec-80 PAGE 1 ; TRACE ROUTINE FOR C/80. TO USE, RENAME THIS FILE (8/11/83) ; TO SY0:CPROF.ASM, AND COMPILE AND ASSEMBLE THE C ; PROGRAM WITH THE -P COMPILER OPTION. ; FOR MACRO-80 COMPATIBILITY, ASSEMBLE AND LINK THIS. 0000' E1 CALL:: POP H ;GET CALLING ADDRESS 0001' 23 INX H ;COMPUTE REAL RETURN ADDRESS 0002' 23 INX H 0003' 23 INX H 0004' 23 INX H 0005' E5 PUSH H ;AND REPLACE IT 0006' C5 PUSH B 0007' D5 PUSH D 0008' 2B DCX H 0009' 2B DCX H 000A' 2B DCX H 000B' 56 MOV D,M ;GET ROUTINE CALLED 000C' 2B DCX H 000D' 5E MOV E,M 000E' D5 PUSH D ;SAVE CALLED ROUTINE. 000F' EB XCHG ;CHECK FOR 6 BLANK BYTES 0010' 06 06 MVI B,6 0012' AF XRA A 0013' 2B CALL6: DCX H ;(IF NOT, IT IS A 0014' BE CMP M ;SYSTEM RTN WITH NO 0015' C2 0041' JNZ CALL7 ;NAME.) 0018' 05 DCR B 0019' C2 0013' JNZ CALL6 001C' 2B CALL1: DCX H ;BACK UP OVER NAME. 001D' BE CMP M 001E' CA 0025' JZ CALL2 0021' 04 INR B 0022' C3 001C' JMP CALL1 0025' 23 CALL2: INX H 0026' 78 MOV A,B 0027' B7 ORA A 0028' CA 0041' JZ CALL7 002B' FE 08 CPI 8 002D' D2 0041' JNC CALL7 0030' E5 PUSH H ;SAVE NAME ADDR 0031' 21 0045' LXI H,CALL3 0034' CD 0064' CALL CALL.O ;OUTPUT 'CALLING' 0037' E1 POP H 0038' CD 0064' CALL CALL.O 003B' 21 004E' LXI H,CALL4 003E' CD 0064' CALL CALL.O 0041' E1 CALL7: POP H ;RESTORE CALLED ROUTINE ADDRESS 0042' D1 POP D ;RESTORE BC & DE PAIRS 0043' C1 POP B 0044' E9 PCHL ;GO TO CALLED ROUTINE 0045' 43 61 6C 6C CALL3: DB 'Calling ',0 0049' 69 6E 67 20 004D' 00 004E' 0A 00 CALL4: DB 12Q,0 0050' 20 72 65 74 CALL5: DB ' returns BCDE,HL = ',0 0054' 75 72 6E 73 MACRO-80 3.4 01-Dec-80 PAGE 1-1 0058' 20 42 43 44 005C' 45 2C 48 4C 0060' 20 3D 20 00 0064' 7E CALL.O: MOV A,M ;OUTPUT BYTES 0065' B7 ORA A ;UNTIL 0066' C8 RZ ;A ZERO BYTE 0067' 5F MOV E,A 0068' 16 00 MVI D,0 006A' E5 PUSH H 006B' D5 PUSH D 006C' CD 0000* CALL putchar## 006F' D1 POP D 0070' E1 POP H 0071' 23 INX H 0072' C3 0064' JMP CALL.O 0075' E3 RET:: XTHL ;SAVE RETURN VALUE 0076' D5 PUSH D ;SAVE FLOATING REG IF USED (DE FIRST) 0077' C5 PUSH B 0078' 5E MOV E,M ;GET ADDRESS OF 0079' 23 INX H ;ROUTINE RETURNING. 007A' 56 MOV D,M 007B' 21 FFFA LXI H,-6 ;GET NAME 007E' 19 DAD D 007F' AF XRA A ;BACK OVER NAME 0080' 2B RET1: DCX H 0081' BE CMP M 0082' C2 0080' JNZ RET1 0085' 23 INX H 0086' CD 0064' CALL CALL.O ;OUTPUT IT 0089' 21 0050' LXI H,CALL5 008C' CD 0064' CALL CALL.O 008F' E1 POP H ;OUTPUT BC 0090' E5 PUSH H 0091' CD 00B6' CALL O.HEX 0094' C1 POP B ;OUTPUT DE 0095' E1 POP H 0096' E5 PUSH H 0097' C5 PUSH B 0098' CD 00B6' CALL O.HEX 009B' 21 002C LXI H,2CH ;OUTPUT SEPARATOR 009E' E5 PUSH H 009F' CD 0000* CALL putchar 00A2' E1 POP H 00A3' C1 POP B 00A4' D1 POP D 00A5' E1 POP H ;OUTPUT HL 00A6' E5 PUSH H 00A7' D5 PUSH D 00A8' C5 PUSH B 00A9' CD 00B6' CALL O.HEX 00AC' 21 004E' LXI H,CALL4 00AF' CD 0064' CALL CALL.O 00B2' C1 POP B 00B3' D1 POP D 00B4' E1 POP H ;RESTORE VALUE MACRO-80 3.4 01-Dec-80 PAGE 1-2 00B5' C9 RET ;REALLY RETURN 00B6' 06 04 O.HEX: MVI B,4 ;OUTPUT 4 HEX DIGITS FROM HL 00B8' 7C O.H1: MOV A,H ;OUTPUT FROM HIGH NYBBLE OF HL 00B9' 1F RAR 00BA' 1F RAR 00BB' 1F RAR 00BC' 1F RAR 00BD' E6 0F ANI 17Q ;CONVERT TO HEX 00BF' C6 90 ADI 220Q 00C1' 27 DAA 00C2' CE 40 ACI 100Q 00C4' 27 DAA 00C5' 4F MOV C,A 00C6' E5 PUSH H 00C7' C5 PUSH B 00C8' CD 0000* CALL putchar ;OUTPUT IT 00CB' C1 POP B 00CC' E1 POP H 00CD' 29 DAD H ;SHIFT HL LEFT 4 00CE' 29 DAD H 00CF' 29 DAD H 00D0' 29 DAD H 00D1' 05 DCR B 00D2' C2 00B8' JNZ O.H1 00D5' C9 RET MACRO-80 3.4 01-Dec-80 PAGE S Macros: Symbols: CALL 0000I' CALL.O 0064' CALL1 001C' CALL2 0025' CALL3 0045' CALL4 004E' CALL5 0050' CALL6 0013' CALL7 0041' O.H1 00B8' O.HEX 00B6' PUTCHA 00C9* RET 0075I' RET1 0080' No Fatal error(s)  DAD H 0