home *** CD-ROM | disk | FTP | other *** search
- ;************************************************************
- ; ENTER.ASM
- ;
- ;
- ; A PROGRAM TO STORE TEXT IN A FILE.
- ; ENTER ONE AND A HALF LINES OF TEXT,
- ; TERMINATED BY A CR, PER RECORD.
- ; TO EXIT, TYPE TWO RETURNS.
- ;
- ; THIS FILE IS BASED HEAVILY ON A
- ; PROGRAM TAKEN FROM THE SOLE OF CP/M
- ; BY DAVID BROWN, STUDIO CITY, CA
- ;
- ; TERMINAL SPECIFIC STUFF FOR FREEDOM 50
- ;
- ;
- ;
- ;
- ;
- 000F = OPENF EQU 0FH ;OPEN FILE
- 0016 = MAKEF EQU 16H ;READ STRING
- 000A = READS EQU 0AH ;WRITE SEQUENTIAL RECORD
- 0015 = WRITER EQU 15H ;WRITES SEQUENTIAL RECORD
- 0014 = READR EQU 14H ;READ SEQUENTIAL RECORD
- 0009 = PRINTS EQU 9H ;PRINT STRING
- 0010 = CLOSEF EQU 10H ;CLOSE FILE
- 0002 = CONOUT EQU 2H ;CONSOLE OUT
- 0005 = BDOS EQU 5H ;OPERATING SYSTEM ENTRY
- 005C = FCB EQU 5CH ;FILE CONTROL BLOCK
- 0080 = DMA EQU 80H ;DMA BUFFER
- 00FF = DEL EQU 0FFH ;DELETE CHARACTER
- 000A = LF EQU 0AH ;LINEFEED
- 000D = CR EQU 0DH ;CARRIAGE RETURN
- ;
- ;
- 0100 ORG 100H
- ;
- ;TRY TO OPEN FILE (NAME MUST ALREADY BE IN FCB)
- 0100 0E0F MVI C,OPENF ;OPEN FILE
- 0102 115C00 LXI D,FCB
- 0105 CD0500 CALL BDOS
- 0108 3C INR A ;IF A WAS FF, NOW IT'S 0
- 0109 C25D01 JNZ ALEX ; NOT 0, SO FILE EXISTS
- ;
- ;FILE DOES NOT ALREADY EXIST, SO WE'LL CREATE IT
- 010C 0E16 MVI C,MAKEF
- 010E 115C00 LXI D,FCB
- 0111 CD0500 CALL BDOS
- ;
- ;FILL THE DMA BUFFER WITH DELETE MARKS
- 0114 218000 NEWRC LXI H,DMA ;PUT DMA ADDRESS IN HL
- 0117 0680 MVI B,128D ;PUT COUNT IN B
- 0119 36FF LOOP MVI M,DEL ;STORE DELETE IN MEMORY
- ;
- ;
- 011B 23 INX H ;INCREMENT HL POINTER
- 011C 05 DCR B ;DECREMENT COUNT
- 011D C21901 JNZ LOOP
- ;
- ;PRINT A LINEFEED
- 0120 0E02 MVI C,CONOUT
- 0122 1E0A MVI E,LF
- 0124 CD0500 CALL BDOS
- ;
- ;READ CHARACTERS INTO BUFFER FROM KEYBOARD
- 0127 3E80 MVI A,128D ;SET COUNT TO 128 CHARACTERS
- 0129 327E00 STA DMA-2 ; (STRING BUFFER STARTS 2
- 012C 0E0A MVI C,READS ; BYTES BEFORE DMA
- 012E 117E00 LXI D,DMA-2 ; BUFFER, TO LEAVE ROOM FOR
- 0131 CD0500 CALL BDOS ; MAX-COUNT AND COUNT)
- ;
- ;FIND OUT IF BUFFER IS EMPTY-IF SO, EXIT
- 0134 3A7F00 LDA DMA-1 ;GET NUMBER OF CHAR INPUT
- 0137 B7 ORA A ;IS IT 0?
- 0138 CA5201 JZ FINITO ; YES
-
- ;
- ;INSERT CR AND LF IN BUFFER FOLLOWING TEXT
- 013B 5F MOV E,A ;CHARACTER COUNT IN DE
- 013C 1600 MVI D,0 ;
- 013E 218000 LXI H,DMA ;DMA ADDRESS IN HL
- 0141 19 DAD D ;ADD COUNT TO ADDR, PUT IN HL
- 0142 360D MVI M,CR ;STORE CARRIAGE RETURN
- 0144 23 INX H ;INCREMENT POINTER
- 0145 360A MVI M,LF ;STORE LINEFEED
-
- ;
- ;WRITE RECORD TO DISK
- 0147 0E15 MVI C,WRITER ;WRITE IT
- 0149 115C00 LXI D,FCB
- 014C CD0500 CALL BDOS
- 014F C37401 JMP NECCH ;GO TO NECCH; CLEAR SCRN AND SIGNON W/BANNER*
- ;
- ;CLOSE FILEL BEFORE EXITING
- 0152 0E10 FINITO MVI C,CLOSEF
- 0154 115C00 LXI D,FCB
- 0157 CD0500 CALL BDOS
- 015A C38701 JMP CLEARIT ;GOTO CLEAR SCREEN BEFORE RET
- ;
- ;FILE ALREADY EXITS, SO READ TILL EOF
- ;
- ;
- 015D 0E09 ALEX MVI C,PRINTS ;PRINT MESSAGE
- 015F 119001 LXI D,ALMESS
- 0162 CD0500 CALL BDOS
- 0165 0E14 READ2 MVI C,READR ;READ RECORD
- 0167 115C00 LXI D,FCB
- 016A CD0500 CALL BDOS
- 016D B7 ORA A ;END-O-FILE (A NOT 0) ?
- 016E CA6501 JZ READ2 ;NO, SO READ NEXT RECORD
- 0171 C31401 JMP NEWRC ;YES, SO WRITE THE BASTARD!
- ;
- ;
- ;NECCH
- 0174 0E10 NECCH MVI C,CLOSEF
- 0176 115C00 LXI D,FCB
- 0179 CD0500 CALL BDOS
- 017C 0E09 MVI C,PRINTS ; PRINTS MESSAGE
- 017E 119001 LXI D,ALMESS
- 0181 CD0500 CALL BDOS
- 0184 C36501 JMP READ2
-
- ;
- ;CLEARIT
- 0187 0E09 CLEARIT MVI C,PRINTS ;PRINTS MESSAGE
- 0189 115604 LXI D,CLEARSN
- 018C CD0500 CALL BDOS
- 018F C9 RET ;DROP BACK TO CPM
-
- ;
- ;
- 0190 1B2A ALMESS DB 27,42 ;BLOW AWAY SCREEN
- 0192 1B77 DB 27,119 ; SET UP FOR SETTING INTENSITY PER CHAR
- 0194 1B5D38 DB 27,93,56 ;ROW 1, COL 25 -- TO CENTER, I HOPE
- 0197 1B4734 DB 27,71,52 ; SET INTENSITY TO FULL BLAST
- 019A 4620722065 DB 'F r e e B a s e II'
- 01AE 1B4730 DB 27,71,48 ; SHUT OFF INTENSITY
- 01B1 0D0A DB CR,LF
- 01B3 0D0A DB CR,LF
- 01B5 1B5D38 DB 27,93,56 ;SAME AS ABOVE -- TO CENTER
- 01B8 2044415441 DB ' DATA ENTRY PROGRAM'
- 01CB 0D0A0D0A DB CR,LF,CR,LF
- 01CF 0D0A DB CR,LF
- 01D1 1B5D38 DB 27,93,56 ;ROW 1, COL 25, TOO
- 01D4 0D0A DB CR,LF
- 01D6 5479706520 DB 'Type whatever you like, in any order you wish -- '
- 0207 757020746F DB 'up to a line '
- 0214 0D0A616E64 DB CR,LF,'and a half -- or 127 characters.'
- 0236 0D0A DB CR,LF
- 0238 0D0A DB CR,LF
- 023A 0D0A DB CR,LF
- 023C 1B5B29 DB 27,91,41 ; 8TH LINE, COL 1
- 023F 1B71 DB 27,113
- 0241 7C5F5F5F5F DB '|__________________________________________________________'
- 027C 5F5F5F5F5F DB '_____________________'
- 0291 0D0A DB CR,LF
- 0293 2D2D2D2D2D DB '--------------------------------------------->|'
- 02C2 0D0A DB CR,LF
- 02C4 1B72 DB 27,114
- 02C6 07 DB 7
- 02C7 2020202020 DB ' End 2nd line Here ^'
- 02F6 0D0A DB CR,LF
- 02F8 0D0A DB CR,LF
- 02FA 2020202020 DB ' ============================================='
- 0335 0D0A0D0A DB CR,LF,CR,LF
- 0339 2020202020 DB ' Press {RETURN} After Record is Entered'
- 0371 0D0A DB CR,LF
- 0373 2020202020 DB ' Press {Return) Twice to Exit'
- 03A6 0D0A0D0A DB CR,LF,CR,LF
- 03AA 2020202020 DB ' To Search for Information, Enter: '
- 03E0 0D0A DB CR,LF
- 03E2 2020202020 DB ' A>SEARCH [D:] File.Type'
- 0413 0D0A DB CR,LF
- 0415 2020202020 DB ' ============================================='
- 0450 1B5B27 DB 27,91,39 ;RETURN TO SCENE OF CRIME...
- 0453 0D0A24 DB CR,LF,'$'
- ;
- 0456 1B2A24 CLEARSN DB 27,42,'$'
- ;
- 0459 END