; ; ************************* ; * * ; * Tape-Input/Output * ; * * ; ************************* ; ; ; KASSETTENFORMAT ANALOG ZU ROBOTRON ; KOMPLETTE SCHWINGUNGEN !!! ; ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; ORG EOP2 ; ; Zeitkonstanten f}r Schreiben: ; ZKKAT EQU 93 ;Trennzeichen ZKKA0 EQU 23 ; "0" ZKKA1 EQU 47 ; "1" ; ; Init vor I/O ; INITI LD A,-1 LD (COUNT),A DI IN A,(P1AD) OR 40H AND 0DFH INIT OUT (P1AD),A EI LD HL,(WEND) LD (RWEND),HL CALL NNOM LD (NOMC),HL CALL INIT56 CALL APAGE JR TON9 ;event. CTC-Stop ; CSRLX LD (IX+2),0FEH CALL SRLXP ; ; Init nach I/O ; RINIT LD HL,(NOMC) LD (OUTAB),HL LD HL,(RWEND) LD (WEND),HL IN A,(P1AD) AND 9FH OUT (P1AD),A CALL CRLF TON9 IN A,P1BD ;Init nach Ton- SET 7,A ;ausgabe OUT P1BD ;Blink on RES 1,(IX+8) DI LD A,47H OUT CTC2 LD A,BLZK ;Blinkfrequenz OUT CTC2 EI LD A,3 OUT CTC0 OUT CTC1 RET ; ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; ;P R O G R A M M E Z U R A U S G A B E ; ISRLX DI IN A,(P1AD) OR 60H CALL INIT XOR A LD (IX+2),A;Block 1 LD (COUNT),A LD BC,1001H;langer Vorton ;_______________________________________ ; SRLXP INC (IX+2) PUSH DE LD L,(IX+5) LD H,(IX+6) CALL BLOUT LD A,3 OUT CTC1 POP DE RET ; SRLX DI LD A,87H OUT CTC1 ;INIT CTC LD A,ZKKA1 ;Vorton 1 OUT CTC1 EI LD D,A LD E,A KARA1 CALL AUS ;Vorton ausgeben DEC BC LD A,B OR C JR NZ,KARA1 ; CALL AUST ;Trennzeichen LD A,(IX+2) CALL KAUBT ;Blocknr. ausg. LD B,80H ;Counter+Pr}fsm. ; KARA2 LD A,M CALL KAUBT ;128 Datenbytes ;ausgeben LD A,C ADD M LD C,A ;Bilden Pr}fsum. INC HL DJNZ KARA2 ; CALL KAUBT ;Ausgabe Pr}fsum LD A,D JR DYNST ;Endimpuls ; ; Schreiben eines Bytes ; KAUBT PUSH BC ;A=Byte LD C,A LD B,8 KAUB1 RRC C LD E,ZKKA0 CALL NC,AUS ;CY=0 LD E,ZKKA1 CALL C ,AUS ;CY=1 DJNZ KAUB1 POP BC ; AUST LD E,ZKKAT ;Trennzeichen AUS CALL DYNST DYNST LD (IX),D ;Zeitkonst.->IX DY1 LD A,(IX) AND A JR NZ,DY1 ;Warten bis Zeit LD D,E ;konstante vom RET ;Interruptprogr. ;r}ckgesetzt ; ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; ; Zeitkonstanten f}r Lesen: ; IKEZK EQU 163 IKEGN EQU 93 IKEG1 EQU 186 ; ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; ;P R O G R A M M Z U M E I N L E S E N ; ISRLI CALL INITI ; SRLINP PUSH HL PUSH DE LD L,(IX+5) LD H,(IX+6) CALL BLIN ADD -1 LD A,3 OUT P1AC POP DE POP HL LED2 IN A,P1AD SET 5,A JR NC,LED1 RES 5,A LED1 OUT P1AD RET ; SRLIN LD A,83H OUT (P1AC),A;Int Freig. PIO MA1 LD B,22 MA2 CALL LSTOP ;Lesen einer ;Vollschwingung JR C,MA1 ;kein Einsbit ? CP IKEG1 ;Einsbit ? CALL LED2 ;LED ein ohne JR C,MA1 ;PIO-Stop DJNZ MA2 ;Z{hlen Einsbit MA5 LD B,2 MA3 XOR A LD C,A LD (IX),A CALL LS1 ;Lesen einer ;Halbschwingung CP IKEGN ;Nullbit ? JR NC,MA5 DJNZ MA3 ;Warten auf ein ;Komplettes Nullbit CALL IBYTE ;Lesen ein Byte JR C,LED ; Fehler LD (IX+2),A; Blocknr. LD BC,8000H; 128 Byte+Pr}fs LD L,(IX+5) LD H,(IX+6) MA4 PUSH BC ;Lesen 128 Da- CALL IBYTE POP BC ;tenbytes JR C,LED ; Fehler ? LD M,A ADD C LD C,A ;Pr}fsumme INC HL DJNZ MA4 CALL IBYTE ; -""- lesen JR C,LED ; Fehler ? SUB (IX+1) ; Vgl. Pr}fsumme RET ; LED SBC A RET ; ; Interruptroutine zum Schreiben ; IKACT PUSH AF LD A,87H OUT (CTC1),A LD A,(IX) ;Start CTC OUT (CTC1),A LD (IX),0 JR REI ;RETI ; ; Interruptroutine lesen ; IKEP PUSH AF ;PIO INT. IN A,(CTC2);CTC lesen in LD (IX),A ;-> IX LD A,7 OUT (CTC2),A;CTC Neustart LD A,IKEZK REI1 OUT (CTC2),A REI POP AF EIRETI EI RETI ; LSTOP LD (IX),0 LS0 LD A,(IX) OR A JR Z,LS0 ;Warten bis CTC- ;stand eingeles. LD C,A ; C=1.Halbschw. LD (IX),0 LS1 LD A,(IX) OR A JR Z,LS1 ; Warten auf 2. ; Halbschw. ADD C ; Summe bilden RET ; ; Eingabe eines Bytes ; IBYTE LD DE,800H IB1 CALL LSTOP ;Bit Eingabe JR C,IB2 ;Nullbit ? CP IKEG1 ; Einsbit RET C ;Trennzeichen IB2 CCF RR E ;einschieben DEC D JR NZ,IB1 CALL LSTOP LD A,E ;Byte in A RET ;_______________________________________ ; ; Interruptroutine f}r Tondauer ; TONLG PUSH AF CALL TON9 ;Blink CTC-Init JR REI ; ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; ; Tonausgabeprogramm ; HL: Tonh|he 1.Kanal ; DE: " 2. " ; BC: L{nge/Lautst{rke ; VR: AF,BC,DE,HL ; TON CALL ARGS TON0 BIT 1,(IX+8) JR NZ,TON0 TONB LD A,C XOR 1FH LD C,A SET 7,C LD A,B AND A JR Z,TON1 ;Dauerton RES 7,C SET 1,(IX+8);Tonl{nge aktiv LD A,0C7H OUT CTC2 LD A,B ;Tonl{nge setzen OUT CTC2 TON1 LD A,C ;Lautst{rke OUT P1BD ; LD C,CTC0 CALL TON2 ;1.Kanal INC C EX DE,HL ;2.Kanal ; TON2 LD A,L ;Kanal AND A OUTT2 EQU $+1 LD L,3 JR Z,TON4 ;off LD L,A LD A,7 BIT 0,H JR Z,TON3 ;VT 16 OR 20H ;VT 256 TON3 OUT (C),A ;Steuerwort TON4 OUT (C),L ;ZK RET ; ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; ; B Y T E - I N P U T / O U T P U T - ; R O U T I N E N ; MBOT PUSH HL PUSH BC PUSH AF LD HL,COUNT LD C,M LD B,0B7H LD (BC),A INC C LD M,C BIT 7,C JR Z,BT1 LD M,0 LD BC,144 CALL SRLXP CALL NNOM CALL PBLNR DEFB CUL,CUL DEFB 0 LD (OUTAB),HL BT1 POP AF POP BC POP HL RET ; MBIN PUSH BC LD A,(COUNT) BIT 7,A JR Z,BN1 PUSH HL CALL NNOM PUSH HL CALL RDBLK POP HL LD (OUTAB),HL POP HL JR C,BN2 XOR A ; BN1 LD B,0B7H LD C,A INC A LD (COUNT),A LD A,(BC) CP A BN2 POP BC ;CY=0,Z=1 RET ; ; ; Druckerumschaltroutine auf Hcopy ; HCPR LD A,(OUTAB+1);akt. Zeiger CP 0E3H ;CRT ??? JP NZ,NNOM LD HL,OUTT2;Umschalten JP NOM ; ; Zeitschleife 2 T=A*6.05 ms ; WAIT LD B,A XOR A WAIT1 CALL WAIT0 DJNZ WAIT1 RET ; ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; ; ************************* ; * * ; * Turbo-Tape * ; * * ; ************************* ; ZK1 EQU 24 ZK3 EQU 37 ZK2 EQU 60 ; DEFW 7F7FH DEFM 'turbo' DEFB 11H LD HL,INTS LD (CTCINT+2),HL LD HL,INTL LD (PIOINT),HL LD HL,TSRLIN LD (BLIN+1),HL LD HL,TSRLX LD (BLOUT+1),HL RET ; ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; INTS EX AF LD A,87H OUT CTC1 LD A,E OUT CTC1 LD E,-1 EX AF EI RETI ; ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; TSRLX DI LD A,87H OUT CTC1 LD A,ZK1-3 OUT CTC1 EI SR1 LD E,ZK1-3 SR2 BIT 7,E JR Z,SR2 DEC BC LD A,C OR B JR NZ,SR1 LD D,2 DEC A CALL BYS1 LD A,(IX+2) LD B,80H CALL BYTS SR3 LD A,M INC HL CALL BYTS XOR C LD C,A DJNZ SR3 LD D,9 DEFB 1 ;LD BC,nn ; BYTS LD D,8 BYS1 RRCA LD E,ZK1-3 JR NC,BYS2 LD E,ZK2-3 BYS2 BIT 7,E JR Z,BYS2 DEC D JR NZ,BYS1 RET ; ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; INTL EX AF IN A,CTC1 SUB -ZK3 RR E LD A,7 OUT CTC1 XOR A OUT CTC1 DEC D EX AF EI RETI ; ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; BYTR BIT 7,D JR Z,BYTR LD A,E LD D,7 RET ; TSRLIN LD A,83H OUT P1AC LD BC,8000H LD E,-1 SRL1 LD A,E CP 0C0H JR NZ,SRL1 LD D,7 CALL BYTR LD (IX+2),A SRL2 CALL BYTR LD M,A INC HL XOR C LD C,A DJNZ SRL2 CALL BYTR SUB C RET DEFB -1,-1,-1,-1,-1,-1,-1 ; ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; .;Ende E-Teil  Zû