; ENPFANGSPROGRAMM ZUM 'SEND' UEBER V24 ; PROGRAMM RECEIVE ; BOOT EQU 0 FDOS EQU BOOT+5 FCB EQU BOOT+5CH BUFFER EQU BOOT+80H TPA EQU BOOT+100H ; CONOUT EQU 2 RDRIN EQU 3 PUNOUT EQU 4 PRNTSTR EQU 9 CLOSEF EQU 16 DELETEF EQU 19 WRTSEQ EQU 21 MAKEF EQU 22 ; ORG TPA ; STZEN STACK RECEIV: LD SP,STACK ;PRUEFEN DATEINAMEN LD HL,FCB+1 LD C,1 LD B,11 LD A,(HL) CP ' ' JR NZ,CONT1 DEC C JR CONT2 ; CONT1: LD A,(HL) CP '?' JR NZ,CONT3 DEC C JR CONT2 ; CONT3: INC HL DJNZ CONT1 CONT2: PUSH BC CALL GETCHR CP 'C' JP NZ,STOP ; ;LESEN DATEINAME VON RDR: POP BC PUSH BC LOAD: LD B,11 LD HL,FCB+1 LOOP1: CALL RECCHR DEC C JR Z,CONT4 LD (HL),A CONT4: INC C INC HL DJNZ LOOP1 ;AUSGABE DATEINAME AUF CON. LD HL,FCB+1 LD B,8 LOOP4: LD A,(HL) CP ' ' JR Z,NEXT2 CALL PRNTCHR NEXT2: INC HL DJNZ LOOP4 LD A,(HL) CP ' ' JR Z,NAMEEND LD A,'.' CALL PRNTCHR LD B,3 LOOP5: LD A,(HL) CP ' ' JR Z,NEXT3 CALL PRNTCHR NEXT3: INC HL DJNZ LOOP5 NAMEEND: LD A,' ' CALL PRNTCHR ; ;LOESCHEN UND NEUERSTELLEN EINER DATEI LD DE,FCB LD C,DELETEF CALL FDOS LD DE,FCB LD C,MAKEF CALL FDOS PUSH AF LD A,0 LD (FCB+32),A POP AF CP 255 JR NZ,NEXT CALL CRLF LD DE,DIRERR CALL LINEPRT JP BOOT DIRERR: DEFM 'INHALTSVERZEICHNIS IST VOLL!!$' ; ;LESEN UND ABSPEICHERN SAVE: LD HL,BUFFER LD B,128 LOOP2: CALL RECBYTE LD (HL),A INC HL DJNZ LOOP2 LD A,'*' CALL PRNTCHR LD C,WRTSEQ LD DE,FCB CALL FDOS CP 0 JR Z,NEXT LD C,DELETEF LD DE,FCB CALL FDOS LD DE,DISKERR CALL LINEPRT JP BOOT DISKERR: DEFM 'DISKETTE VOLL !!$' ; ; ANALYSE STEUERZEICHEN NEXT: CALL RECCHR ;NAECHSTEN BLOCK LESEN CP 'N' JR Z,SAVE PUSH AF LD C,CLOSEF ;DATEIENDE LD DE,FCB CALL FDOS CALL CRLF POP AF CP 'C' ;NAECHSTE DATEI KOMMT JR NZ,STOP POP BC PUSH BC DEC C JP NZ,LOAD ;AUTOMATISCHER LAUF ; ENDEBEHANDLUNG STOP: LD A,'E' CALL RETCHR LD DE,ENDE CALL LINEPRT JP BOOT ENDE: DEFM 'ENDE DER UEBERTRAGUNG$' ; ;UP PRNTCHR ;ZEICHEN AUS A -> CON: PRNTCHR: PUSH AF PUSH BC PUSH DE PUSH HL LD C,CONOUT LD E,A CALL SDD POPS: POP HL POP DE POP BC POP AF RET ; UP CRLF ; GIBT NEWLINE -> CON: CRLF: LD A,0DH CALL PRNTCHR LD A,0AH JR PRNTCHR ;UP LINEPRT ; GIBT TEXTZEILE AUF CON: LINEPRT: LD C,PRNTSTR CALL FDOS JR CRLF ; UP RECCHR ; LIEST ZEICHEN VON RDR: ; UND SENDET AUF PUN: ZURUECK RECCHR: LD A,(CHAR) CALL RETCHR JR GETCHR ; UP GETCHR ;LIEST ZEICHEN VON RDR: UND LEGT ES IN (CHR) AB GETCHR: PUSH AF PUSH BC PUSH DE PUSH HL LD C,RDRIN CALL SDE AND 7FH LD (CHAR),A JR POPS ; UP RETCHR ; SENTET ZEICHEN -> PUN: RETCHR: PUSH AF PUSH BC PUSH DE PUSH HL LD C,PUNOUT CALL SDD JR POPS ; CHAR: DEFB 0 ;UP RECBYTE ; ERHAELT BYTE ALS BUCHSTABEN AUF PUN:/RDR: RECBYTE: PUSH BC CALL RECHALF RLCA RLCA RLCA RLCA LD B,A CALL RECHALF ADD A,B POP BC RET ; RECHALF: CALL RECCHR SUB 'A' AND 0FH RET ; Koppelroutine fuer mres-CP/M mit KC 85/3 ; Eintragung als UP2 und UR2 mit STAT oder direkt ueber PIP ;LADEN AB 100H NACH INITIALISIERUNG ERFOLGT UMLADEN TREIB EQU 0EB8CH SIOD EQU 8 ;KANAL 1 SIOC EQU 0AH CTC EQU 0CH ; INIT: LD A,1 LD BC,80H OUT (C),A ;INIT MODUL LD HL,INTAB LD B,2 LD C,CTC OTIR LD B,INTE-INTS LD C,SIOC OTIR LD HL,SDD LD (0E761H),HL LD HL,SDE LD (0E3F7H),HL RET ; INTAB: DEFB 47H ;CTC-ZAEHLER DEFB 40H ;ZEITKONST.1200 INTS: DEFB 18H ;RESET DEFB 4 ;WR4 DEFB 44H DEFB 3 ;WR3 DEFB 0E1H DEFB 5 ;WR5 DEFB 6AH INTE EQU $ ; SDD: IN A,(SIOC) BIT 2,A JR Z,SDD LD A,C CP 60H JR NZ,OM1 LD A,1BH OM1: OUT (SIOD),A XOR A RET ; Eingabe SDE: IN A,(SIOC) BIT 0,A JR NZ,SD7 LD A,5 ;WR5 OUT (SIOC),A LD A,0EAH ;SENDERFREIGABE OUT (SIOC),A JR SDE ;WARTESCHLEIFE ; SD7: LD A,5 ;WR5 OUT (SIOC),A LD A,6AH ;SPERREN SENDER OUT (SIOC),A IN A,(SIOC);DATENEINGABE RET ; DEFS 100H STACK EQU $ END RECEIV