TOOLS.ARC 830214:1552 -- Greg Louis >>> SYSEQU.MAC 820827:0928 >>> MATHEQU.MAC 820827:0928 >>> LINKEQU.MAC 820827:0928 >>> ACOMPR.MAC 820820:1707 >>> ADDA.MAC 820820:1709 >>> ADDAD.MAC 820820:1715 >>> ARGBUF.MAC 820820:1715 >>> BUFBLK.MAC 820820:1716 >>> CLOSE.MAC 820825:1543 >>> CONMSG.MAC 820825:1316 >>> CONPUT.MAC 820825:1655 >>> CRLF.MAC 820820:1716 >>> CRLFF.MAC 820820:1717 >>> CRLFMS.MAC 820820:1717 >>> CTODI.MAC 820830:1219 >>> CTOF.MAC 820820:1717 >>> CTOI.MAC 820820:1717 >>> DCMP.MAC 820820:1718 >>> DPL.MAC 820820:1718 >>> ERROR.MAC 820820:1718 >>> ESC.MAC 830214:1552 >>> EXIT.MAC 820820:1718 >>> FILL.MAC 820820:1718 >>> FILLBF.MAC 820820:1718 >>> FNB.MAC 820820:1718 >>> FNDBUF.MAC 820825:1521 >>> FTOC.MAC 820830:1542 >>> GETARG.MAC 820820:1719 >>> GETC.MAC 820820:1720 >>> GETCF.MAC 820820:1720 >>> GETLIN.MAC 820820:1720 >>> GETLNF.MAC 820902:1032 >>> GETWD.MAC 820820:1720 >>> HCTODI.MAC 820820:1723 >>> HCTOI.MAC 820820:1723 >>> HDCMP.MAC 820820:1723 >>> HLDDE.MAC 820820:1724 >>> HLMDE.MAC 820820:2333 >>> HLXDE.MAC 820820:2333 >>> INDEX.MAC 820821:0955 >>> INIT.MAC 820820:2333 >>> INPORT.MAC 820820:2333 >>> IPTBUF.MAC 820820:2335 >>> ISDIGD.MAC 820820:2335 >>> ISDIGH.MAC 820820:2335 >>> ITOC.MAC 820820:2335 >>> LENGTH.MAC 820927:1317 >>> LSTPUT.MAC 820825:1656 >>> MAKFCB.MAC 820823:1358 >>> MEMRY.MAC 820820:2336 >>> MOVEL.MAC 820820:2336 >>> MOVES.MAC 820820:2337 >>> MOVEU.MAC 820820:2345 >>> MPLD.MAC 820820:2346 >>> MPLS.MAC 820820:2347 >>> MPRD.MAC 820820:2352 >>> MPRS.MAC 820820:2354 >>> MPS0.MAC 820820:2354 >>> MPWAIT.MAC 820820:2354 >>> MTBUF.MAC 820820:2354 >>> NEGH.MAC 820820:2354 >>> OP32.MAC 820820:2354 >>> OPEN.MAC 820820:2355 >>> OUTPT.MAC 820820:2355 >>> PCSTR.MAC 820825:1740 >>> PCMSG.MAC 820825:1741 >>> PLMSG.MAC 820825:1742 >>> PLSTR.MAC 820825:1743 >>> PROMPT.MAC 820901:0957 >>> PUSHBF.MAC 820820:2355 >>> PUSHBK.MAC 820820:2356 >>> PUTC.MAC 820820:2356 >>> PUTCF.MAC 820820:2356 >>> PUTDCF.MAC 820825:1941 >>> PUTDEC.MAC 820825:1942 >>> PUTMSF.MAC 820825:1746 >>> PUTMSG.MAC 820825:1748 >>> PUTSTF.MAC 820825:1749 >>> PUTSTR.MAC 820825:1751 >>> RDCLK.MAC 820820:2356 >>> REMARK.MAC 820820:2356 >>> SELCMD.MAC 820820:2356 >>> SETBF.MAC 820820:2356 >>> SOUNDX.MAC 820820:2357 >>> SPXCH.MAC 820820:2357 >>> STDIO.MAC 820820:2357 >>> TABBER.MAC 820820:2357 >>> TABBRF.MAC 820820:2357 >>> TYPAHD.MAC 820901:1338 >>> UPCASE.MAC 820820:2357 ********************************************************* Insertion macro: 1QAI>>> IA9I.*13I-1LBCXIA@LV0UAS*-1MBGA@0LL Deletion macro: 1QAUASA0LKUSA0LTLEUS>>>0L#K Replacement macro: 1QAUASA0LKI*13IUSA0LTLEUS>>>0L#K I>>> IA9I.*13I-1LBCXIA@LV0UAS*-1MBGKA@0LL Extraction macro: 1QAUAS*USALTEUS>>>0L#XOA Printout macro: 1QAUAS*USALIL8;R7213ITEUS>>>0L12QTF#XTF#V0-1K ********************************************************* >>> SYSEQU.MAC 820827:0928 ; General system equates for assembler programs ; 820819:1335 ; .8080 ; CP/M calls BOOT EQU 0 ; warmboot vector BDOS EQU 5 ; system call point WBOOT EQU 0 ; system reset RDKBD EQU 1 ; console input PRTCHR EQU 2 ; console output LSTCHR EQU 5 ; list dev output DIRIO EQU 6 ; direct console i/o RDIOB EQU 7 ; read the iobyte SETIOB EQU 8 ; set the iobyte PRTSTR EQU 9 ; string console out RDSTR EQU 10 ; string console in RDCST EQU 11 ; read console status RDVERS EQU 12 ; get version number RSTDSK EQU 13 ; reset disk system SELDSK EQU 14 ; select disk OPENF EQU 15 ; open file CLOSEF EQU 16 ; close file FND1ST EQU 17 ; find first entry FNDNXT EQU 18 ; find next entry ERASEF EQU 19 ; delete file RDSEQ EQU 20 ; read file sequent. WRTSEQ EQU 21 ; write file sequent. MAKEF EQU 22 ; create file RENAME EQU 23 ; rename file RDDSK EQU 25 ; return current disk SETDMA EQU 26 ; set DMA addr SETFIL EQU 30 ; set file attributes USER EQU 32 ; get/set user code RDRND EQU 33 ; read random WRTRND EQU 34 ; write random RDSIZE EQU 35 ; compute file size SETRND EQU 36 ; set random record RSTDRV EQU 37 ; reset drive(s) WRTZER EQU 40 ; write random 0 fill ; ; ASCII character set and video control ; ENDSTR EQU 0 ; end-of-string BEL EQU 7 ; bell BKS EQU 8 ; backspace TAB EQU 9 ; tab-by-8 LF EQU 10 ; linefeed NEWLIN EQU LF VT EQU 11 ; vertical tab FF EQU 12 ; formfeed CR EQU 13 ; return CEOL EQU 14 ; clear-line CEOS EQU 15 ; clear-scr CAN EQU 24 ; cancel line EOF EQU 26 ; end-of-file ESCAPE EQU 27 BLANK EQU 32 ; space SQUOTE EQU 39 ; ' PLUS EQU 43 ; + MINUS EQU 45 ; - PERIOD EQU 46 ; . DEL EQU 127 ; other printing chars go in ''s ; ; System limitations ; MAXDRV EQU 4 ; Number of drives MAXLIN EQU 120 ; Biggest line allowed SECTRS EQU 8 ; Sectors to buffer per file ; ; Non-CP/M peripherals ; ; 8251 S0DAT EQU 0 ; 8251 data port S0CMD EQU 1 ; 8251 cmd/stat port S0BRG EQU 4 ; baud rate gen S0XRDY EQU 1 ; TxRDY S0RRDY EQU 2 ; RxRDY S08NOP EQU 4EH ; 8 bits, no parity S07EVN EQU 7AH ; 7 bits, even par ; ; SS1 SBAS EQU 50H ; SS1 BASE PORT ADDR IMAST0 EQU SBAS ; Interrupt master low IMAST1 EQU SBAS+1 ; Interrupt master hi ISLV0 EQU SBAS+2 ; Interrupt slave low ISLV1 EQU SBAS+3 ; Interrupt slave hi TIMER0 EQU SBAS+4 ; Timer/counter 0 TIMER1 EQU SBAS+5 TIMER2 EQU SBAS+6 TIMCTL EQU SBAS+7 ; Timer/counter ctrl MDATA EQU SBAS+8 ; Math chip data MCMDS EQU SBAS+9 ; Math command/status CSTAT EQU SBAS+10 ; Clock status CDATA EQU SBAS+11 ; Clock data UDATA EQU SBAS+12 ; UART data USTAT EQU SBAS+13 ; UART status UMODE EQU SBAS+14 ; UART mode UCMD EQU SBAS+15 ; UART command MCDLY EQU 4000H ; Math chip timeout ; ; Message macro MSG MACRO TEXT .XLIST IRP N, DB N ENDM DB ENDSTR .LIST ENDM >>> MATHEQU.MAC 820827:0928 ; Math-chip opcode equates and call structure ; 820818:1056 .8080 EXT MPWAIT,OP32 MC MACRO OPCODE .XLIST MVI A,OPCODE CALL MPWAIT .LIST ENDM ; HL op DE -> HL, Math-chip operations DMC MACRO OPCODE .XLIST MVI A,D&OPCODE CALL OP32 .LIST ENDM ; OPCODES: RESULTS (on stack A B C D) ACOS EQU 6 ; (ACOS A) U U U ASIN EQU 5 ; (ASIN A) U U U ATAN EQU 7 ; (ATAN A) B U U CHSF EQU 15H ; -A B C D COS EQU 3 ; (COS A) B U U EXP EQU 0AH ; (e^A) B U U FADD EQU 10H ; (A+B) C D U FDIV EQU 13H ; (B/A) C D U FLTD EQU 1CH ; A B C U FLTS EQU 1DH ; A B C U FMUL EQU 12H ; (A*B) C D U FSUB EQU 11H ; (B-A) C D U LOG EQU 8 ; (LOG A) B U U LN EQU 9 ; (LN A) B U U POPF EQU 18H ; B C D A PTOF EQU 17H ; A A B C PUPI EQU 1AH ; 3.14... A B C PWR EQU 0BH ; (B^A) C U U SIN EQU 2 ; (SIN A) B U U SQRT EQU 1 ; (SQRT A) B U U XCHF EQU 19H ; B A C D CHSD EQU 34H ; -A B C D DADD EQU 2CH ; (A+B) C D A DDIV EQU 2FH ; (B/A) C D U DMUL EQU 2EH ; (A*B) C D U DMUU EQU 36H ; (A*B) C D U (Up.32) DSUB EQU 2DH ; (B-A) C D A FIXD EQU 1EH ; A B C U POPD EQU 38H ; B C D A PTOD EQU 37H ; A A B C XCHD EQU 39H ; B A C D CHSS EQU 74H ; -AU AL BU BL CU CL DU DL FIXS EQU 1FH ; A BU BL CU CL U U U POPS EQU 78H ; AL BU BL CU CL DU DL AU PTOS EQU 77H ; AU AU AL BU BL CU CL DU SADD EQU 6CH ; (AU+AL) BU BL CU CL DU DL AU SDIV EQU 6FH ; (AL/AU) BU BL CU CL DU DL U SMUL EQU 6EH ; (AU*AL) BU BL CU CL DU DL U SMUU EQU 76H ; (AU*AL) etc as above - up.16 SSUB EQU 6DH ; (AL-AU) BU BL CU CL DU DL AU XCHS EQU 79H ; AL AU BU BL CU CL DU DL MNOP EQU 0 ; AU AL BU BL CU CL DU DL ; >>> LINKEQU.MAC 820827:0928 ; FILE: LINKEQU.MAC ; DATE: 820819:2255 ; FOR: Determining compilation of $MEMRY LYNX EQU 0FFFFH ; Lynx linker, use 108H >>> ACOMPR.MAC 820820:1707 ; FILE: ACOMPR.MAC ; DATE: 820819:2149 ; FOR: See comment .8080 ; Routine ACOMPR does lexical comparison ; between strings pointed to by HL & DE ; for length in register C, returning ; Z set if equal, C set if the DE string ; is less than the HL string, and both ; clear if the DE string is greater than ; the HL string. Register A is preserved. ACOMPR:: PUSH H PUSH D PUSH B MOV B,A COMPLP: LDAX D CMP M JNZ COMPEX INX H INX D DCR C JNZ COMPLP COMPEX: MOV A,B POP B POP D POP H RET END >>> ADDA.MAC 820820:1709 ; FILE: ADDA.MAC ; DATE: 820818:1310 ; FOR: A + HL -> HL TITLE ADDA - A + HL -> HL .8080 ADDA:: ADD L MOV L,A RNC INR H RET END >>> ADDAD.MAC 820820:1715 ; FILE: ADDAD.MAC ; DATE: 820818:1312 ; FOR: Add A to 32-bit number on 9511 stack TITLE ADDAD - Add A to 9511 D number .8080 .XLIST INCLUDE SYSEQU INCLUDE MATHEQU .LIST EXT MPLS,MPS0 ADDAD:: PUSH H MOV L,A MVI H,0 CALL MPLS CALL MPS0 POP H MC DADD RET END >>> ARGBUF.MAC 820820:1715 ; FILE: ARGBUF.MAC ; DATE: 820819:1532 ; FOR: Command-line buffer .8080 CSEG ARGBUF:: DS 100 NARGS:: DS 1 DB 0 END >>> BUFBLK.MAC 820820:1716 ; FILE: BUFBLK.MAC ; DATE: 820819:1211 ; FOR: Channel allocation and buffer defs. .8080 CSEG CHANLS:: REPT 16 DW 0 ENDM BUFBLS:: REPT 15 DW 0 ;; End of buffer DS 2 ;; Buffer pointer (-len to 0) DS 2 ;; Buffer size (-len) DS 2 ;; FCB address DB 0FFH ;; Buffer size in sectors DS 1 ;; Read-write flag (w=0ffh) ENDM END >>> CLOSE.MAC 820825:1543 ; FILE: CLOSE.MAC ; DATE: 820825:1538 ; FOR: Close file and free channel C TITLE CLOSE - close and free channel .8080 .XLIST INCLUDE SYSEQU .LIST EXT FNDBUF,NEGH,SETBF,MTBUF EXT ADDA,CHANLS,ERROR CLOSE:: PUSH H PUSH D PUSH B MOV A,C ANI 15 JZ CLOSED CALL FNDBUF STA RWFLG MOV A,H ORA L JZ CLOSED LDA RWFLG INR A JNZ RLEASE PUSH H INX H INX H ; Bufptr MOV E,M INX H ; +1 MOV D,M XCHG CALL NEGH ; Space left XCHG MOV A,E ORA A RAL MOV A,D RAL ; Sectors left INX H ; Buflen PUSH H ; Save for SETBF INX H INX H INX H INX H SUB M ; Sectors in buffer POP H ; Buflen CMA INR A ; Sectors to write JZ READY PUSH PSW CALL SETBF POP PSW MOV C,A CALL MTBUF READY: POP H PUSH H MVI A,6 CALL ADDA MOV E,M INX H MOV D,M ; FCB MVI C,CLOSEF CALL BDOS INR A ; 0 if failure to close JNZ RLEASE-1 CALL ERROR MSG <'CLOSE: Directory entry gone!'> POP H RLEASE: MVI M,0 INX H MVI M,0 POP B PUSH B MOV A,C ADD A LXI H,CHANLS CALL ADDA MVI M,0 INX H MVI M,0 CLOSED: POP B MOV A,C ORA A POP D POP H RET RWFLG: DS 1 END >>> CONMSG.MAC 820825:1316 ; FILE: CONMSG.MAC ; DATE: 820825:1312 ; FOR: Print string in with ENDSTR delim TITLE CONMSG - Put string on CON: .8080 .XLIST INCLUDE SYSEQU .LIST CONMSG:: PUSH D ; Save all but HL PUSH B ; ..which will point PUSH PSW ; ..past the ENDSTR CM0: MOV A,M ; ..on exit. INX H CPI ENDSTR JZ MSGEND PUSH H MOV E,A MVI C,PRTCHR CALL BDOS POP H JMP CM0 MSGEND: POP PSW POP B POP D RET END >>> CONPUT.MAC 820825:1655 ; FILE: CONPUT.MAC ; DATE: 820825:1646 ; FOR: Put single char on CON: via PUTCF .8080 TITLE CONPUT - Put char on CON: EXT PUTCF CONPUT:: PUSH B MVI C,0 CALL PUTCF POP B RET END >>> CRLF.MAC 820820:1716 ; FILE: CRLF.MAC ; DATE: 820820:1352 ; FOR: Write CRLF to std output TITLE CRLF - Write CRLF - std output .8080 EXT STDOUT,CRLFF CRLF:: PUSH B MOV B,A LDA STDOUT MOV C,A CALL CRLFF MOV A,B POP B RET END >>> CRLFF.MAC 820820:1717 ; FILE: CRLFF.MAC ; DATE: 820820:1505 ; FOR: Write CR then LF to channel C TITLE CRLFF - CRLF to channel C .8080 .XLIST INCLUDE SYSEQU .LIST EXT PUTCF CRLFF:: PUSH PSW MVI A,CR CALL PUTCF MVI A,LF CALL PUTCF POP PSW RET END >>> CRLFMS.MAC 820820:1717 ; FILE: CRLFMS.MAC ; DATE: 820818:1350 ; FOR: CRLF string .8080 .XLIST INCLUDE SYSEQU .LIST CSEG CRLFMS:: MSG END >>> CTODI.MAC 820830:1219 ; FILE: CTODI.MAC ; DATE: 820818:1213 ; MOD: 820820:1612 ; Complete externals ; FOR: Convert string at to 32bit in TITLE CTODI - Convert chars to 32bit .8080 .COMMENT " This routine returns a 32-bit integer in to and advances HL to point to the first non-digit character in the string, which serves as the terminator and is returned in A. " .XLIST INCLUDE SYSEQU INCLUDE MATHEQU .LIST EXT ADDA,NEGH,ISDIGD,FNB EXT MPLS,MPS0,MPRD,DPL CTODI:: PUSH B MOV B,H MOV C,L MVI A,0FFH STA DPL CALL FNB LXI H,0 CPI MINUS JNZ CT0 DCX H JMP CT1 CT0: CPI PLUS JNZ CT2 CT1: INX B LDAX B CT2: PUSH H CALL MPS0 CALL MPS0 CT3: CALL ISDIGD JC CT4 PUSH PSW LXI H,10 CALL MPLS CALL MPS0 MC DMUL POP PSW MOV L,A MVI H,0 CALL MPLS CALL MPS0 MC DADD LDA DPL ORA A JM CT3A INR A STA DPL CT3A: INX B LDAX B JMP CT3 CT4: CPI PERIOD JNZ CT5 LDA DPL ORA A JP CT5 INR A STA DPL JMP CT3A CT5: POP H MOV A,H ORA L JZ CT6 MC CHSD CT6: XCHG CALL MPRD XCHG MOV H,B MOV L,C LDA DPL ORA A JP CT7 INR A STA DPL CT7: MOV A,M POP B RET END >>> CTOF.MAC 820820:1717 ; FILE: CTOF.MAC ; DATE: 820818:1353 ; FOR: Convert string at to floating TITLE CTOF - Convert chars to float .8080 .COMMENT " This routine returns a floating point number on the 9511 stack and advances HL to point to the first non-digit character in the string, which serves as the terminator and is returned in A. " .XLIST INCLUDE SYSEQU INCLUDE MATHEQU .LIST EXT CTODI,CTOI,ERROR EXT MPLS,MPS0,MPLD,DPL CTOF:: PUSH D LXI D,MANTIS CALL CTODI ORI 20H ; force lower case CPI 'e' LDA DPL STA EXPOFF LXI D,0 JNZ NOEXP INX H CALL CTOI ; exponent in DE NOEXP: PUSH H LXI H,10 ; Base CALL MPLS MC FLTS LXI H,EXPOFF MOV A,E ; Subtract offset SUB M MOV E,A JNC $+4 DCR D XCHG CALL MPLS MC FLTS MC PWR ; Base^exponent ANI 1EH ; All 4 error flags JZ CTF0 ; If no errors CPI 8 ; Only over/under? JC CTF1 ; if over/under error CALL ERROR MSG <'CTOF: Exponent out of range'> CTF0: LXI H,MANTIS CALL MPLD MC FLTD ANI 2 JNZ CTF2 ; Overflow error MC FMUL ANI 6 JZ CTF3 CTF1: ANI 2 JNZ CTF2 ; Overflow error MC POPF ; Junk exp or result CALL MPS0 CALL MPS0 ; Load 0 JMP CTF3 CTF2: CALL ERROR MSG <'CTOF: Floating-point overflow'> CTF3: POP H POP D MOV A,M RET MANTIS: DS 4 EXPOFF: DS 1 END >>> CTOI.MAC 820820:1717 ; FILE: CTOI.MAC ; DATE: 820818:1137 ; MOD: 820820:1616 ; Complete externals ; FOR: Convert string at to 16bit in DE TITLE CTOI - Convert chars to 16bit .8080 .COMMENT " This routine returns a sixteen-bit integer in DE and advances HL to point to the first non-digit character in the string, which serves as the terminator and is returned in A. " .XLIST INCLUDE SYSEQU .LIST EXT ADDA,NEGH,ISDIGD,FNB CTOI:: PUSH B MOV B,H MOV C,L CALL FNB LXI H,0 CPI MINUS JNZ CT0 DCX H JMP CT1 CT0: CPI PLUS JNZ CT2 CT1: INX B LDAX B CT2: PUSH H LXI H,0 CT3: CALL ISDIGD JC CT4 MOV E,L MOV D,H DAD H DAD H DAD D DAD H CALL ADDA INX B LDAX B JMP CT3 CT4: POP D MOV A,D ORA E CNZ NEGH XCHG MOV H,B MOV L,C MOV A,M POP B RET END >>> DCMP.MAC 820820:1718 ; FILE: DCMP.MAC ; DATE: 820818:1449 ; FOR: Compare two 32-bit nos in memory TITLE DCMP - compare 32-bit integers .8080 .XLIST INCLUDE SYSEQU INCLUDE MATHEQU .LIST EXT MPLD DCMP:: CALL MPLD XCHG CALL MPLD XCHG MC DSUB RET END >>> DPL.MAC 820820:1718 ; FILE: DPL.MAC ; DATE: 820818:1248 ; FOR: Decimal-place counter .8080 CSEG DPL:: DS 1 END >>> ERROR.MAC 820820:1718 ; FILE: ERROR.MAC ; DATE: 820818:1347 ; MOD: 820820:1618 ; Read definition file ; FOR: Print inline string and quit TITLE ERROR - Complain and quit .8080 .XLIST INCLUDE SYSEQU .LIST EXT CONMSG,CRLFMS ERROR:: LXI H,CRLFMS CALL CONMSG POP H CALL CONMSG JMP BOOT END >>> ESC.MAC 820820:1718 ; FILE: ESC.MAC ; DATE: 830214:1553 ; FOR: Interpret @ escape char TITLE ESC - get char, interpret @ .8080 .XLIST INCLUDE SYSEQU .LIST EXT ISDIGD,HCTOI ESC:: LDA ESCSW CPI CR JNZ ESC0 XRA A STA ESCSW MVI A,LF RET ESC0: MOV A,M INX H CPI '@' RNZ MOV A,M CPI ENDSTR JNZ ESC00 MVI A,'@' RET ESC00: CPI 'n' JZ ESC02 ESC01: CPI 'N' JNZ ESC1 ESC02: MVI A,CR STA ESCSW INX H RET ESC1: PUSH H PUSH B LXI H,ESCTBL MVI C,ESCLEN ESC1