; ;PROGRAMM ZUR FILE-UEBERTRAGUNG UEBER V24-KANAL ; PROGRAMM SEND 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 OPENF EQU 15 SEARCHF EQU 17 SEARCHN EQU 18 READSEQ EQU 20 ; ORG TPA ; ;SETZEN DES PRIVAT STACK SEND: LD SP,STACK CALL INIT ;RETTEN DEFAULT-FCB LD HL,FCB LD DE,FCB1 LD BC,33 LDIR ; ;SUCHEN DER ERSTEN DATEI LD DE,FCB LD C,SEARCHF JP SEARCH ; ;UEBERTRAGEN EINER DATEI LOAD: LD C,OPENF ;OEFFNEN DER DATEI LD DE,FCB CALL FDOS LD A,0 ;RUECKSETZEN RECORD#0 LD (FCB+32),A LD A,'C' CALL SENDCHR LD B,11 ;UEBERTRAGUNG DATEINAME LD HL,FCB+1 LOOP6: LD A,(HL) CALL SENDCHR INC H DJNZ LOOP6 LOOP7: LD C,READSEQ ;UEBERTRAGUNG DATEI LD DE,FCB CALL FDOS CP 0 JR NZ,EOF LD A,'N' CALL SENDCHR LD HL,BUFFER ;UEBERTRAGUNG EINES BLOCKES LD B,128 LOOP8: LD A,(HL) CALL SNDBYTE INC HL DJNZ LOOP8 LD A,'*' ;MELDUNG FUER GESENDETEN BLOCK CALL PRNTCHR JR LOOP7 ; EOF: CALL CRLF ; ;SUCHEN DER NAECHSTEN DATEI LD HL,FCB1 LD DE,FCB LD BC,33 LDIR LD DE,FCB ;SUCHEN NAECHSTE DATEI LD C,SEARCHN SEARCH: CALL FDOS CP 255 JR Z,LAST RLCA RLCA RLCA RLCA RLCA LD HL,BUFFER+1 LD E,A LD D,0 ADD HL,DE LD DE,FCB+1 LD BC,32 LDIR ;AUSGABE DATEINAME AUF CONSOLE 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 JP LOAD ; ;ENDEBEHANDLUNG LAST: LD A,'E' ;PUN: ENDE UEBERTRAGUNG CALL SENDCHR LD DE,ENDE CALL LINEPRT JP BOOT ENDE: DEFM 'ENDE DER UEBERTRAGUNG$' ; UP PRNTCHR ;GIBT ZEICHEN IN A AUF CON: AUS PRNTCHR: PUSH AF PUSH BC PUSH DE PUSH HL CALL SDD RETURN1: POP HL POP DE POP BC POP AF RET ; ;UP CRLF CRLF: LD A,0DH CALL PRNTCHR LD A,0AH JR PRNTCHR ; ;UP LINEPRNT ;GIBT EINE ZEILE AUF CONSOLE AUS LINEPRT: LD C,PRNTSTR CALL FDOS JR CRLF ; UP SENDCHR ; GIBT EIN ZEICHEN AUF PUN: AUS UND ERWARTET UND PRUEFT ; DIE ANTWORT AUF RDR: SENDCHR: PUSH AF PUSH BC PUSH DE PUSH HL LD E,A PUSH DE CALL SDD LD C,RDRIN CALL SDE AND 7FH POP DE CP E JR Z,RETURN1 LD DE,TRNSERR CALL CRLF CALL LINEPRT JP BOOT ;FEHLERABBRUCH TRNSERR: DEFM 'UEBERTRAGUNGSFEHLER -> ABBRUCH !$' ;UP SNDBYTE ; SENDET EIN BYTE ALS BUCHSTABEN VERSCHLUESSELT SNDBYTE: PUSH AF RRCA RRCA RRCA RRCA CALL SNDHALF POP AF SNDHALF: AND 0FH ADD A,'A' JR SENDCHR ; ; 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 ; FCB1: DEFS 33 ; DEFS 100H STACK EQU $ END SEND