MACRO-80 3.44 09-Dec-81 PAGE 1 ENTRY BEG ; 0000' 16 05 BEG: MVI D,5 ;STOP ON ^E 0002' AF XRA A 0003' 21 0124' LXI H,FILFCB 0006' 06 21 MVI B,33 0008' 77 CLOP: MOV M,A 0009' 23 INX H 000A' 05 DCR B 000B' C2 0008' JNZ CLOP 000E' 31 01D0' LXI SP,STACK 0011' 2A 0001 LHLD 1 0014' 11 0009 LXI D,9 0017' 19 DAD D 0018' 22 01A6' SHLD OUTCHR 001B' 22 00A7' SHLD MOD1+1 ;STUFF ADDR INTO CALL ;INITIALIZE MITS I/O BOARD ON PORTS 22,23 001E' 3E 03 MVI A,3 0020' D3 12 OUT 22Q 0022' 3E 15 MVI A,25Q 0024' D3 12 OUT 22Q 0026' 16 05 MVI D,5 0028' CD 00DE' CALL TRMLOP ;BE A TERMINAL 002B' 21 011B' LXI H,FILMSG ;'FILE: ' 002E' CD 0145' CALL TXTPRT ;PRINT MESSAGE 0031' 21 0124' LXI H,FILFCB 0034' 36 01 MVI M,1 ;USE CURRENT DRIVE 0036' 23 INX H 0037' 06 0B MVI B,11 0039' 3E 20 MVI A," " 003B' 77 CLRLOP: MOV M,A 003C' 23 INX H 003D' 05 DCR B ;CLEAR TO SPACES 003E' C2 003B' JNZ CLRLOP 0041' 21 0125' LXI H,FILFCB+1 0044' 06 0B MVI B,11 0046' CD 0195' GETNML: CALL TTYIN 0049' FE 0D CPI 15Q 004B' CA 005F' JZ NAMDON 004E' FE 2E CPI "." ;EXTENSION? 0050' C2 0059' JNZ GETNM1 ;NO 0053' 21 012D' LXI H,FILFCB+1+8 ;POINT TO EXTENSION 0056' C3 0046' JMP GETNML ;GET NEXT CHAR 0059' 77 GETNM1: MOV M,A 005A' 23 INX H 005B' 05 DCR B 005C' C2 0046' JNZ GETNML 005F' 0E 13 NAMDON: MVI C,23Q 0061' 11 0124' LXI D,FILFCB 0064' CD 0005 CALL 5 0067' 0E 16 MVI C,26Q 0069' 11 0124' LXI D,FILFCB 006C' CD 0005 CALL 5 006F' 0E 0F MVI C,17Q 0071' 11 0124' LXI D,FILFCB 0074' CD 0005 CALL 5 ;OPEN FILE MACRO-80 3.44 09-Dec-81 PAGE 1-1 0077' 3C INR A ;ERROR? 0078' CA 0000 JZ 0 ;ABORT 007B' 16 0D MVI D,15Q ;STOP ON 007D' CD 00DE' CALL TRMLOP ;SEND COMMAND 0080' 21 01D0' LXI H,BOTBUF ;BOTTOM OF BUFFER 0083' DB 12 WLOOP: IN 22Q 0085' E6 01 ANI 1 0087' CA 0083' JZ WLOOP 008A' DB 13 IN 23Q 008C' 01 0081 SCHK: LXI B,129 ;SETUP 008F' DB 12 XFRLOP: IN 22Q 0091' E6 01 ANI 1 ;CHAR READY? 0093' C2 00A0' JNZ GOTCHR ;YES, GET IT 0096' DB 00 IN 0 0098' E6 01 ANI 1 ;CHAR FROM CONSOLE? 009A' CA 014F' JZ ENDXFR ;YES, DONE 009D' C3 008F' JMP XFRLOP 00A0' DB 13 GOTCHR: IN 23Q 00A2' 77 MOV M,A ; PUSH PSW 00A3' E5 PUSH H 00A4' C5 PUSH B ;SAVE BC ; LXI B,RETADR ; PUSH B ; ANI 177Q 00A5' 4F MOV C,A ; LHLD OUTCHR ; PCHL 00A6' CD 008F' MOD1: CALL XFRLOP 00A9' C1 RETADR: POP B 00AA' E1 POP H ; POP PSW 00AB' A8 XRA B 00AC' 47 MOV B,A ;UPDATE 00AD' 23 INX H 00AE' 0D DCR C ;TIME FOR CHECKSUM 00AF' C2 008F' JNZ XFRLOP ;LATER ADD CHECK FOR FULL 00B2' 2B DCX H 00B3' 78 MOV A,B 00B4' B7 ORA A 00B5' CC 0152' CZ DMPBUF 00B8' 3E 41 MVI A,101Q 00BA' CA 00D6' JZ SCHR 00BD' 01 1388 LXI B,5000 ;WAIT LOOP 00C0' E3 WAIT: XTHL ;USE LONGEST INSTRUCTION 00C1' E3 XTHL 00C2' E3 XTHL 00C3' E3 XTHL 00C4' E3 XTHL 00C5' E3 XTHL 00C6' 0B DCX B 00C7' 78 MOV A,B 00C8' B1 ORA C 00C9' C2 00C0' JNZ WAIT 00CC' 3E 03 MVI A,3 ;RE - INITIALIZE I/O PORT 00CE' D3 12 OUT 22Q MACRO-80 3.44 09-Dec-81 PAGE 1-2 00D0' 3E 15 MVI A,25Q 00D2' D3 12 OUT 22Q 00D4' 3E 42 MVI A,102O ;NACK 00D6' D3 13 SCHR: OUT 23Q 00D8' 21 01D0' LXI H,BOTBUF 00DB' C3 008C' JMP SCHK ;TERMINAL LOOP 00DE' DB 00 TRMLOP: IN 0 00E0' E6 01 ANI 1 00E2' C2 00F4' JNZ TRMLP1 ;NOT READY 00E5' DB 12 IN 22Q ;-10 STATUS 00E7' E6 02 ANI 2 ;SEND CHAR NOW? 00E9' CA 00F4' JZ TRMLP1 ;NO, WAIT UNTIL READY 00EC' DB 01 IN 1 00EE' E6 7F ANI 177Q 00F0' D3 13 OUT 23Q ;SEND TO -10 00F2' BA CMP D ;TERMIN CHAR? 00F3' C8 RZ ;YES, RETURN 00F4' DB 12 TRMLP1: IN 22Q 00F6' E6 01 ANI 1 ;-10 HAVE CHAR? 00F8' CA 00DE' JZ TRMLOP ;NO, WAIT 00FB' DB 00 FOO: IN 0 00FD' E6 80 ANI 80H 00FF' C2 00FB' JNZ FOO 0102' DB 13 IN 23Q 0104' E6 7F ANI 177Q 0106' 21 00DE' LXI H,TRMLOP 0109' E5 PUSH H 010A' FE 01 CPI 1 010C' C8 RZ 010D' FE 11 CPI 11H 010F' C8 RZ 0110' FE 12 CPI 12H 0112' C8 RZ 0113' FE 1A CPI 1AH 0115' C8 RZ 0116' 2A 01A6' LHLD OUTCHR 0119' 4F MOV C,A 011A' E9 PCHL ; ; 011B' 0D FILMSG: DB 15Q 011C' 0A DB 12Q 011D' 46 49 4C 45 DB "FILE: " 0121' 3A 20 0123' 00 DB 0 ; 0124' FILFCB: DS 33 ; 0145' 7E TXTPRT: MOV A,M 0146' B7 ORA A 0147' C8 RZ 0148' CD 0170' CALL TTYOUT 014B' 23 INX H 014C' C3 0145' JMP TXTPRT ; MACRO-80 3.44 09-Dec-81 PAGE 1-3 014F' C3 0165' ENDXFR: JMP DMPDON 0152' F5 DMPBUF: PUSH PSW 0153' 11 01D0' LXI D,BOTBUF 0156' 0E 1A MVI C,32Q 0158' CD 0005 CALL 5 015B' 11 0124' LXI D,FILFCB 015E' 0E 15 MVI C,25Q 0160' CD 0005 CALL 5 0163' F1 POP PSW 0164' C9 RET ; 0165' 11 0124' DMPDON: LXI D,FILFCB 0168' 0E 10 MVI C,20Q 016A' CD 0005 CALL 5 ;CLOSE FILE 016D' C3 0000 JMP 0 ;BACK TO CP/M 0170' E5 TTYOUT: PUSH H 0171' D5 PUSH D 0172' C5 PUSH B 0173' F5 PUSH PSW 0174' E6 7F ANI 7FH ;GET RID OF HIGH BIT 0176' FE 01 CPI 1 0178' CA 0190' JZ TTOUT1 ;DON'T SCREW UP TEI SCREEN 017B' FE 11 CPI 11H 017D' CA 0190' JZ TTOUT1 0180' FE 12 CPI 12H 0182' CA 0190' JZ TTOUT1 0185' FE 1A CPI 1AH 0187' CA 0190' JZ TTOUT1 018A' 0E 02 MVI C,2 018C' 5F MOV E,A 018D' CD 0005 CALL 5 0190' F1 TTOUT1: POP PSW 0191' C1 POP B 0192' D1 POP D 0193' E1 POP H 0194' C9 RET ; 0195' C5 TTYIN: PUSH B 0196' D5 PUSH D 0197' E5 PUSH H 0198' 0E 01 MVI C,1 019A' CD 0005 CALL 5 019D' E1 POP H 019E' D1 POP D 019F' C1 POP B 01A0' FE 03 CPI 3 01A2' CA 0000 JZ 0 01A5' C9 RET ; 01A6' OUTCHR: DS 2 01A8' DS 40 01D0' BOTBUF: DS 1 01D0' STACK EQU BOTBUF END BEG MACRO-80 3.44 09-Dec-81 PAGE S Macros: Symbols: 0000I' BEG 01D0' BOTBUF 0008' CLOP 003B' CLRLOP 0152' DMPBUF 0165' DMPDON 014F' ENDXFR 0124' FILFCB 011B' FILMSG 00FB' FOO 0059' GETNM1 0046' GETNML 00A0' GOTCHR 00A6' MOD1 005F' NAMDON 01A6' OUTCHR 00A9' RETADR 008C' SCHK 00D6' SCHR 01D0' STACK 00DE' TRMLOP 00F4' TRMLP1 0190' TTOUT1 0195' TTYIN 0170' TTYOUT 0145' TXTPRT 00C0' WAIT 0083' WLOOP 008F' XFRLOP No Fatal error(s)  011B' FIL