home *** CD-ROM | disk | FTP | other *** search
- ;**************************************************
- ;* *
- ;* ALS8CPM.ASM *
- ;* *
- ;* PROGRAM FOR CONVERTING PROCESSOR TECHNOLOGY *
- ;* ALS-8/SPKG-1 ASSEMBLER FILES TO CP/M FORMAT *
- ;* *
- ;* (C) COPYRIGHT 1980 *
- ;* ED ELIZONDO 6 CYPRESS CT EAST WINDSOR NJ 08520 *
- ;* A L L R I G H T S R E S E R V E D *
- ;* *
- ;* THIS PROGRAM MAY BE USED FREELY BY COMPUTER *
- ;* HOBBYISTS FOR NON-COMMERCIAL APPLICATIONS. *
- ;* IT MAY NOT BE USED FOR COMMERCIAL APPLICATIONS *
- ;* OR SOLD WITHOUT WRITTEN PERMISSION OF THE *
- ;* AUTHOR. *
- ;* *
- ;* REV 1.6 31 JAN 1980 *
- ;* *
- ;**************************************************
- ;
- ; NOTE: This program processes assembly language files
- ; prepared for the Processor Technology ALS-8 or Software
- ; Package No 1 assemblers to a format compatible with
- ; the CP/M ASM assembler. It requires the presence of
- ; CUTER/SOLOS or some other means of loading the ALS-8
- ; source file onto memory so that it can be saved by CP/M.
- ; It does not require the presence of anything other than
- ; CP/M during the remaining operations.
- ;
- ; The translation process operates in accordance with
- ; the following algorithms:
- ; Each line is converted independently. The line byte count
- ; and line number fields are deleted from the source lines
- ; and each line is terminated with a CR/LF sequence.
- ; A semicolon is placed ahead of all comment lines (for
- ; compatibility with MAC) and ahead of all comment fields.
- ; Leading spaces are deleted from comment fields only.
- ; Comment lines and the remainder of comment fields are
- ; passed unchanged, except for deletion of any exclamation
- ; marks.
- ; Periods used as dummy operands for formatting purposes
- ; are removed, as well as any leading spaces appearing in
- ; instructiona and operand fields. Operands enclosed in
- ; single quotes are passed unchanged.
- ; ASC pseudo-operators are changed to DB and the corresponding
- ; delimiters changed to single quotes.
- ; The '>' pseudo-operator is converted to an 'AND 0FFH' post
- ; operator and the '<' is similarly converted to a 'SHR 8'.
- ; Instruction, operand and comment fields are tabbed
- ; and colons are added to labels to "pretty" the output.
- ; The program utilizes slightly modified versions of the
- ; CP/M User's Group LIOS.ASM disk I/O routines (CPMUG 1.19)
- ;
- ; TO USE: 1) load your ALS-8 format program into RAM at 100H
- ; (If using SOLOS/CUTER, note the first two digits
- ; of program size returned by the load message.
- ; Convert to decimal and add 1 to obtain the
- ; number nn required in step 3).
- ; 2) boot up CP/M
- ; 3) type SAVE nn NAME1.EXT (where nn is number of
- ; pages of program size in decimal)
- ; 4) run the conversion program by typing:
- ; ALS8CPM NAME1.EXT NAME2.ASM
- ; where NAME2.ASM is the desired name of the CP/M
- ; compatible output file (note spaces between
- ; the above name fields)
- ; 5) edit the resulting ASM file to add the appropriate
- ; ORG statement.
- ; 6) assemble to locate any residual unique errors.
- ;
- ;*************************************************************
- ;
- ; BDOS ADDRESSES:
- ;
- BDOS: EQU 0005 ;BDOS ENTRY POINT
- SOURCE: EQU 5CH ;SOURCE FILE FCB
- TBUF: EQU 0080H ;TRANSFER BUFFER
- ;
- ; BDOS FUNCTION CODES:
- ;
- PRINT: EQU 9
- OPEN: EQU 15
- CLOSE: EQU 16
- MAKE: EQU 22
- READ: EQU 20
- WRITE: EQU 21
- DELETE: EQU 19
- ;
- ; ASCII CODES:
- ;
- SPACE: EQU 20H
- QUOTE: EQU 27H
- TAB: EQU 09H
- CR: EQU 0DH
- LF: EQU 0AH
- ;
- ;***************************
- ;* MAIN PROGRAM *
- ;***************************
- ;
- ORG 100H
- ;
- LXI H,0 ;GET OLD STACK POINTER
- DAD SP
- SHLD OLDSTK ;SAVE IT FOR EXIT
- LXI SP,NEWSTK ;SET UP NEW STACK
- ;
- LXI D,MSSG0 ;SAY HELLO
- CALL MESSAGE
- ;
- CALL GETNAMES ;GET FILE NAMES FROM COMMAND LINE
- CALL OPENFILES ;OPEN FILES FOR ACCESS
- LXI D,MSSG8 ;WE'RE DOING FINE
- CALL MESSAGE
- ;
- CALL PROCESS ;PROCESS LINE BY LINE
- CALL WEOF ;FILL LAST INCOMPLETE PAGE
- ;
- ABEND: CALL CLOSEFILE ;CLOSE FILES
- LXI D,MSSG9 ;WE'RE FINISHED
- CALL MESSAGE
- ;
- FIN: LHLD OLDSTK ;RESTORE OLD STACK POINTER
- SPHL
- RET ;RETURN TO CP/M
- ;
- ;
- ;****************************************
- ; G E T N A M E S *
- ; SUBROUTINE TO CHECK & GET FILE NAMES *
- ;****************************************
- ;
- GETNAMES:
- LDA SOURCE+1 ;FIRST CHAR OF SOURCE NAME
- CPI SPACE ;EMPTY?
- JZ ERROR6 ;YES, ERROR
- LDA SOURCE+17 ;FIRST CHAR OF DEST NAME
- CPI SPACE ;EMPTY?
- JZ ERROR7 ;YES, ERROR
-
- ; MOVE DEST FCB TO SAFE PLACE
- LXI D,SOURCE+16 ;START OF TEMP DEST FCB
- LXI H,DEST ;WORKING DEST FCB
- MVI B,16 ;NUMBER OF FCB CHARACTERS
- CALL MOVE ;MOVE NAME
- ;
- ; INITIALIZE FCB'S
- XRA A ;GET A 0
- STA SOURCE+32 ;ZERO SOURCE NR FIELD
- STA DEST+32 ;ZERO DEST NR FIELD
- RET
- ;
- ;****************************************
- ; O P E N F I L E S *
- ; SUBROUTINE TO OPEN FILES FOR ACCESS *
- ;****************************************
- ;
- OPENFILES:
- MVI C,OPEN ;GET OPEN FUNCTION
- LXI D,SOURCE
- CALL BDOS ;OPEN SOURCE FILE
- CPI 0FFH ;OPEN ERROR?
- JZ ERROR1 ;YES, ABORT
- ;
- MVI C,DELETE ;DELETE FUNCTION
- LXI D,DEST
- CALL BDOS ;DELETE EXISTING DEST FILE
- MVI C,MAKE ;MAKE FUNCTION
- LXI D,DEST
- CALL BDOS ;CREATE NEW DEST FILE
- CPI 0FFH ;MAKE ERROR?
- JZ ERROR3 ;YES, ABORT
- MVI C,OPEN ;OPEN FUNCTION
- LXI D,DEST
- CALL BDOS ;OPEN DEST FILE
- RET
- ;
- ;***********************************
- ; P R O C E S S *
- ; ROUTINE TO PROCESS EACH LINE *
- ;***********************************
-
- PROCESS:
- XRA A ;CLEAR STRING FLAG
- STA FLAG
- CALL GETBYT ;GET LINE CHAR COUNT
- CPI 1 ;END OF FILE?
- JZ EOFMARK ;YES, PROCESS IT
- DCR A ;UPDATE CHAR LINE COUNT
- STA EOLCNT ;SAVE IT
-
- MVI B,5 ;FIELD COUNT
- LNUM: PUSH B ;MOVE PAST LINE NUMBER FIELD
- CALL GETBYT ;READ A BYTE
- POP B
- CALL COUNT ;DECREMENT LINE COUNT
- JZ PREMEND ;PREMATURE END OF LINE
- DCR B ;DECREMENT FIELD COUNT
- JNZ LNUM ;UNTIL DONE
- ;
- LABEL: CALL GETBYT ;PROCESS LABEL FIELD
- CPI '*' ;COMMENT LINE?
- JZ COMLINE ;YES, PROCESS IT
- CPI SPACE ;MISSING LABEL?
- JZ INSTR ;THEN PROCESS INST
- LABEL1: CALL OUTBYT ;OUTPUT LABEL CHAR
- CALL COUNT ;DECREMENT LINE COUNT
- JZ EOLINE ;IF END OF LINE
- CALL GETBYT ;GET NEXT BYTE
- CPI SPACE ;END OF ALS-8 LABEL?
- JZ LABEL2 ;YES, EXIT LOOP
- CPI ':' ;END OF INTEL LABEL?
- JNZ LABEL1 ;NO, KEEP GOING
- LABEL2: MVI A,':' ;YES, OUTPUT A COLON
- CALL OUTBYT ;AND DROP THRU
-
- INSTR: MVI A,TAB ;PROCESS INSTR FIELD
- CALL OUTBYT ;TAB TO NEXT COLUMN
- CALL DELSP ;DELETE LEADING SPACES
- JC EOLINE ;IF END OF LINE
-
- ; CHECK FOR ASC PSEUDO-OP
- CPI 'A' ;POSSIBLE ASC PSEUDO OP?
- JNZ INSTR2 ;NO WAY
- CALL COUNT ;DECREMENT LINE COUNT
- JZ EOLINE ;IF END OF LINE
- CALL GETBYT ;GET NEXT BYTE
- CPI 'S' ;ASC PSEUDO OP?
- JNZ RECOV2 ;NO, RECOVER LAST TWO BYTES
- CALL COUNT ;DECREMENT LINE COUNT
- JZ EOLINE ;IF END OF LINE
- CALL GETBYT ;GET NEXT BYTE
- CPI 'C' ;ASC PSEUDO OP?
- JNZ RECOV3 ;NO, RECOVER LAST 3 BYTES
- ;
- ; CONVERT ASC PSEUDO OP TO DB
- LXI D,DBOP ;OUTPUT A 'DB'
- CALL PUTSTRING
- MVI A,TAB ;END OF INSTR FIELD
- CALL OUTBYT ;TAB TO NEXT COLUMN
- ;
- ; HANDLE ASC OPERAND AND CONVERT DELIMITERS
- CALL DELSP ;DELETE EXTRA SPACES
- JC EOLINE ;IF END OF LINE
- STA DELIM ;SAVE THE ASC DELIMITER
- MVI A,QUOTE ;GET CPM DELIMITER
- ASC2: CALL OUTBYT ;OUTPUT IT
- CALL COUNT ;DECREMENT LINE COUNT
- JZ EOLINE ;IF END OF LINE
- LDA DELIM ;GET DELIMITER
- MOV B,A ;INTO B
- PUSH B ;SAVE B
- CALL GETBYT ;GET NEXT BYTE
- POP B ;RESTORE B
- CMP B ;DELIMITER?
- JNZ ASC2 ;NO, KEEP GOING
- MVI A,QUOTE ;YES, GET CPM DELIMITER
- CALL OUTBYT ;OUTPUT IT
- JMP COMMENT ;REMAINDER MUST BE COMMENT
- ;
- ; RECOVER LAST TWO BYTES (NOT ASC PSEUDO OP)
- RECOV2: STA TEMP2 ;SAVE LAST BYTE
- MVI A,'A' ;FIRST BYTE WAS AN 'A'
- CALL OUTBYT ;OUTPUT IT
- LDA TEMP2 ;GET LAST BYTE
- JMP INSTR2 ;CONTINUE NORMALLY
- ;
- ; RECOVER LAST 3 BYTES (NOT ASC PSEUDO OP)
- RECOV3: STA TEMP2 ;SAVE LAST BYTE
- LXI D,ASOP ;WE KNOW LAST 2 BYTES WERE 'AS'
- CALL PUTSTRING ;SO OUTPUT THEM
- LDA TEMP2 ;GET LAST BYTE
- ;
- ; HANDLE REMAINDER OF INSTRUCTION FIELD
- INSTR2: CALL PASS ;OUTPUT REST OF FIELD
- JC EOLINE ;IF END OF LINE
- ;
- OPERAND:
- MVI A,TAB ;PROCESS OPERAND FIELD
- CALL OUTBYT ;TAB TO NEXT COLUMN
- CALL DELSP ;DELETE LEADING SPACES
- JC EOLINE ;IF END OF LINE
- ;
- ; CHECK FOR '<' SPECIAL OPERATOR
- OPER1: CPI '<' ;LEFT BYTE MASK?
- JNZ OPER3 ;NO WAY
- CALL COUNT ;DECREMENT END OF LINE COUNT
- JZ EOLINE ;IF END OF LINE
- CALL GETBYT ;GET NEXT BYTE
- CALL PASS ;OUTPUT REST OF FIELD
- JC EOLINE ;IF PREMATURE END OF LINE
- LXI D,LBYTE ;OUTPUT A SHIFT RIGHT EXPR
- CALL PUTSTRING
- JMP COMMENT ;REMAINDER MUST BE COMMENT
- ;
- ; CHECK FOR '>' SPECIAL OPERATOR
- OPER2: CPI '>' ;RIGHT BYTE MASK?
- JNZ OPER3 ;NO WAY
- CALL COUNT ;DECREMENT LINE COUNT
- JZ EOLINE ;IF END OF LINE
- CALL GETBYT ;GET NEXT BYTE
- CALL PASS ;OUTPUT REST OF FIELD
- JC EOLINE ;IF END OF LINE
- LXI D,RBYTE ;THEN A MASK RIGHT EXP
- CALL PUTSTRING
- JMP COMMENT ;REMAINDER MUST BE COMMENT
-
- ; HANDLE REMAINDER OF OPERAND
- OPER3: CPI QUOTE ;IS IT A QUOTE?
- CZ TOGGLE ;YES, TOGGLE STRING FLAG
- CPI '.' ;IS IT A PERIOD?
- JZ STRING ;YES, CHECK IF PART OF STRING
- CPI SPACE ;IS IT A SPACE?
- JNZ OPER4 ;NO, PROCESS IT
- STRING: STA TEMP ;SAVE BYTE
- LDA FLAG ;IS CHAR WITHIN STRING?
- ORA A
- JZ COMMENT ;NO, END OF OPERAND FIELD
- LDA TEMP ;YES, GET BACK BYTE
- OPER4: CALL OUTBYT ;OUTPUT BYTE
- CALL COUNT ;DECREMENT LINE COUNT
- JZ EOLINE ;IF END OF LINE
- CALL GETBYT ;GET NEXT BYTE
- JMP OPER3 ;KEEP GOING
- ;
- ;
- COMLINE: ;PROCESS COMMENT LINE
- MVI A,';' ;GET A SEMICOLON
- JMP CLOOP ;OUTPUT IT & REST OF LINE
- COMMENT: ;PROCESS COMMENT FIELD
- MVI A,TAB
- CALL OUTBYT ;TAB TO NEXT COLUMN
- MVI A,';' ;GET A SEMICOLON
- CALL OUTBYT ;OUTPUT IT
- CALL DELSP ;DELETE LEADING SPACES
- JC EOLINE ;IF END OF LINE
- CPI '!' ;EXCLAMATION MARK?
- JZ CLOOP2 ;YES, DELETE IT
- CLOOP: CALL OUTBYT ;NO, OUTPUT IT
- CLOOP2: CALL COUNT ;DECREMENT LINE COUNT
- JZ EOLINE ;IF END OF LINE
- CALL GETBYT ;GET NEXT BYTE
- CPI '!' ;EXCLAMATION MARK?
- JZ CLOOP2 ;YES, DELETE IT
- JMP CLOOP ;KEEP GOING
-
- PREMEND: ;PREMATURE END OF LINE
- MVI A,CR ;OUTPUT A CARRIAGE RET
- CALL OUTBYT
- EOLINE: MVI A,LF ;NORMAL END OF LINE
- CALL OUTBYT ;OUTPUT A LINE FEED
- JMP PROCESS ;PROCESS NEXT LINE
- ;
- EOFMARK:
- MVI A,'Z'-40H ;GET A CPM EOF MARK
- CALL OUTBYT ;OUTPUT IT
- RET ;EXIT PROCESS
- ;
- ;
- TOGGLE: PUSH PSW ;FLAG SET IF STRING IN QUOTES
- LDA FLAG ;TOGGLE FLAG
- CMA
- STA FLAG ;THAT'S ALL
- POP PSW
- RET
- ;
- ; DELETE EXTRA SPACES
- DELSP: CALL COUNT ;DECREMENT LINE COUNT
- JZ DELSP2 ;IF PREMATURE END OF LINE
- CALL GETBYT ;GET NEXT BYTE
- CPI SPACE ;SPACE?
- JZ DELSP ;YES, DELETE IT
- ORA A ;RESET CARRY FLAG
- RET ;RETURN WITH BYTE
- DELSP2: STC ;SET CARRY FLAG FOR EOL
- RET ;RETURN WITH FLAG SET
- ;
- ; OUTPUT BYTES UNTIL END OF FIELD
- PASS: CALL OUTBYT ;OUTPUT BYTE
- CALL COUNT ;DECREMENT LINE COUNT
- JZ PASS2 ;IF PREMATURE END OF LINE
- CALL GETBYT ;GET NEXT BYTE
- CPI SPACE ;END OF FIELD?
- JNZ PASS ;NO, KEEP GOING
- ORA A ;RESET CARRY FLAG
- RET ;RETURN WITH SPACE
- PASS2: STC ;SET CARRY FLAG FOR EOL
- RET ;RETURN WITH FLAG SET
- ;
- COUNT: LDA EOLCNT ;DECREMENT END OF LINE COUNT
- DCR A
- STA EOLCNT ;THAT'S ALL
- RET
- ;
- ;*************************************
- ; P U T S T R I N G *
- ; ROUTINE TO OUTPUT A STRING TO DISC *
- ;*************************************
- ;
- PUTSTRING:
- LDAX D ;GET A BYTE
- CPI '$' ;TERMINATOR?
- RZ ;YES, RETURN
- PUSH D ;SAVE D&E
- CALL OUTBYT ;NO, OUTPUT BYTE
- POP D ;RESTORE D&E
- INX D ;BUMP POINTER
- JMP PUTSTRING ;KEEP GOING
- ;
- ;********************
- ; CANNED STRINGS: *
- ;********************
- ;
- ASOP: DB 'AS$' ;STRING TO RECOVER AS STRING
- DBOP: DB 'DB$' ;STRING TO REPLACE ASC OP
- RBYTE: DB ' AND 0FFH$' ;STRING TO REPLACE ">" OP
- LBYTE: DB ' SHR 8$' ;STRING TO REPLACE "<" OP
-
-
- ;*********************************
- ; O U T B Y T *
- ; ROUTINE TO OUTPUT A BYTE *
- ; *
- ; INPUT: A=BYTE *
- ;*********************************
-
- OUTBYT: STA TEMP ;SAVE BYTE
- OUT1: LXI H,OBUF+128
- XCHG ;BUFFER END ADDR IN DE
- LHLD OUTPT ;CURRENT ADDR IN HL
- CALL CPHL ;TEST FOR END OF BUFFER
- JZ OUT2 ;YES, WRITE
- LDA TEMP
- MOV M,A ;STORE DATA BYTE IN BUFFER
- INX H ;BUMP BUFFER POINTER
- SHLD OUTPT ;SAVE BUFFER POINTER
- ORA A
- RET ;EXIT
- OUT2: LXI D,OBUF ;POINT TO OUTPUT BUFFER
- LXI H,TBUF ;TEMP BUFFER
- MVI B,128
- CALL MOVE ;COPY BUFFERS
- MVI C,WRITE ;WRITE FUNCTION
- LXI D,DEST ;OUTPUT FCB
- CALL BDOS ;ISSUE WRITE
- CPI 0FFH
- JZ ERROR3
- CPI 2
- JZ ERROR4
- CPI 1
- JZ ERROR5
- LXI H,OBUF ;RESET POINTER
- SHLD OUTPT
- JMP OUT1 ;CONTINUE
-
- ;*********************************
- ; G E T B Y T *
- ; ROUTINE TO READ A BYTE *
- ; *
- ; OUTPUT: A=BYTE *
- ;*********************************
-
- GETBYT: LXI H,IBUF+128
- XCHG ;BUFFER END ADDR. IN DE
- LHLD INPTR ;CURRENT POINTER IN HL
- CALL CPHL ;TEST FOR END OF BUFFER
- JZ GETB2 ;YES, READ
- GETB1: MOV A,M ;GET BYTE
- INX H ;BUMP POINTER
- SHLD INPTR ;SAVE POINTER
- ORA A ;RESET CARRY
- RET
- GETB2: MVI C,READ ;READ FUNCTION
- LXI D,SOURCE ;FCB ADDRESS
- CALL BDOS ;ISSUE READ
- CPI 0 ;ERROR?
- JNZ ERROR2 ;YES
- LXI D,TBUF ;POINT TO TEMP BUFFER
- LXI H,IBUF ;INPUT BUFFER
- MVI B,128
- CALL MOVE ;COPY BUFFER
- LXI H,IBUF ;RESET BUFFER POINTER
- SHLD INPTR
- JMP GETB1 ;CONTINUE
-
- ;***********************************
- ; M O V E *
- ; ROUTINE TO MOVE BLOCKS OF DATA *
- ;***********************************
- MOVE: LDAX D ;GET BYTE
- MOV M,A ;STORE BYTE
- INX H
- INX D ;BUMP POINTERS
- DCR B ;DECREMENT COUNT
- JNZ MOVE ;LOOP
- RET
-
- ;*********************************
- ; C P H L *
- ; ROUTINE TO COMPARE HL VS DE *
- ;*********************************
-
- CPHL: MOV A,H
- CMP D
- RNZ
- MOV A,L
- CMP E
- RET
-
- ;**********************************
- ; W E O F *
- ; ROUTINE TO FILL UP LAST RECORD *
- ; WITH CP/M EOF MARKS *
- ;**********************************
-
- WEOF: LXI H,OBUF+128 ;END OF BUFFER
- XCHG
- LHLD OUTPT ;WHERE WE ARE
- CALL CPHL ;SAME?
- JZ OUTBYT ;YES, WRITE LAST RECORD
- MVI A,'Z'-40H ;NO, GET A CPM EOF MARK
- CALL OUTBYT ;OUTPUT IT TO BUFFER
- JMP WEOF ;KEEP GOING
- ;
- ;********************************
- ; C L O S E F I L E *
- ; SUBROUTINE TO CLOSE FILES *
- ;********************************
- ;
- CLOSEFILE:
- MVI C,CLOSE ;CLOSE FUNCTION
- LXI D,DEST
- CALL BDOS ;CLOSE DESTINATION FILE
- MVI C,CLOSE ;CLOSE FUNCTION
- LXI D,SOURCE
- CALL BDOS ;CLOSE SOURCE FILE
- RET
- ;
-
- ;
- ;*****************************
- ; ERROR HANDLERS *
- ;*****************************
- ;
- ERROR1: LXI D,MSSG1
- JMP ERRMSG
- ERROR2: LXI D,MSSG2
- JMP ABORT
- ERROR3: LXI D,MSSG3
- JMP ERRMSG
- ERROR4: LXI D,MSSG4
- JMP ABORT
- ERROR5: LXI D,MSSG5
- JMP ABORT
- ERROR6: LXI D,MSSG6
- JMP ERRMSG
- ERROR7: LXI D,MSSG7
- ERRMSG: CALL MESSAGE
- JMP FIN ;RETURN TO CPM
- ABORT: CALL MESSAGE
- JMP ABEND ;CLOSE FILES & RETURN TO CPM
- ;
- ;*********************************
- ; M E S S A G E *
- ; SUBROUTINE TO OUTPUT MESSAGE *
- ;*********************************
- ;
- MESSAGE:
- MVI C,PRINT ;PRINT FUNCTION
- CALL BDOS
- RET
- ;
- ;***************************
- ; MESSAGES: *
- ;***************************
- ;
- MSSG0 DB 'ALS-8 to CP/M File Converter - ver 1.6',CR,LF
- DB 'by Ed Elizondo',CR,LF,'$'
- MSSG1 DB 'Source file not on disk',CR,LF,'$'
- MSSG2 DB 'Read past end of file',CR,LF,'$'
- MSSG3 DB 'Directory full',CR,LF,'$'
- MSSG4 DB 'Disk full',CR,LF,'$'
- MSSG5 DB 'Error in extending file',CR,LF,'$'
- MSSG6 DB 'No source file indicated',CR,LF,'$'
- MSSG7 DB 'No destination file indicated',CR,LF,'$'
- MSSG8 DB 'Converting file',CR,LF,'$'
- MSSG9 DB 'Done',CR,LF,'$'
-
- ;*************************
- ; DATA BUFFERS: *
- ;*************************
- ;
- TEMP: DS 1 ;TEMPORARY SAVE BYTE
- TEMP2: DS 1 ;ANOTHER ONE
- DELIM DS 1 ;ASC DELIMITER SAVE BYTE
- FLAG: DB 0 ;SWITCH FOR QUOTED STRINGS
- EOLCNT: DB 0 ;END OF LINE COUNT
- DEST: DS 33 ;DEST FILE FCB
- ;
- OUTPT: DW OBUF ;OUTPUT POINTER
- INPTR: DW IBUF+128 ;INPUT POINTER
- IBUF: DS 128 ;INPUT BUFFER
- OBUF: DS 128 ;OUTPUT BUFFER
- ;
- OLDSTK: DS 2 ;OLD STACK POINTER
- DS 40H ;STACK AREA
- NEWSTK: EQU $
- ;
-
- END
-