;BASIC ; ; ************************* ; * * ; * Tape-Input/Output * ; * * ; ************************* ; ; ; KASSETTENFORMAT ANALOG ZU ROBOTRON ; KOMPLETTE SCHWINGUNGEN !!! ; ; ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; ; Einbauen wie CAOS 2.5 [?[ ; ORG EOP2 ; ; Zeitkonstanten f}r Schreiben: ; ZKKAT EQU 94 ;Trennzeichen ZKKA0 EQU 23 ; "0" ZKKA1 EQU 47 ; "1" ; ; Init vor I/O ; INIT DI IN A,(P1AD) OR 40H OUT (P1AD),A EI LD HL,(WEND) LD (RWEND),HL CALL NNOM LD (NOMC),HL LD (IX+5),IOPUF%100H LD (IX+6),IOPUF/100H CALL APAGE JR TON9 ;event. CTC-Stop ; CSRLX LD (IX+2),0FEH CALL SRLX ; ; 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 BIT 3,(IX+1) JR Z,TON10 IN A,P1BD ;Init nach Ton- SET 7,A ;ausgabe OUT P1BD ;Blink on TON10 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 CALL INIT LD (IX+2),0;Block 1 LD BC,1000H;langer Vorton ;_______________________________________ ; SRLX JP POUT ; SRLX1 INC (IX+2) ;erh|hen Block DI LD A,87H OUT CTC1 ;INIT CTC LD A,ZKKA1 ;Vorton 1 OUT CTC1 EI PUSH DE LD D,A LD E,A KARA1 CALL AUS ;Vorton ausgeben CPI JP PE,KARA1 ; CALL AUST ;Trennzeichen LD A,(IX+2) CALL KAUBT ;Blocknr. ausg. LD L,(IX+5) LD H,(IX+6);Blockanfang 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 CALL DYNST ;Endimpuls POP DE LD A,3 OUT CTC1 ;CTC-Stop RET ; ; 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 164 IKEGN EQU 94 IKEG1 EQU 188 ; ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; ;P R O G R A M M Z U M E I N L E S E N ; ISRLI CALL INIT ; SRLIN JP PIN ; SRLIN1 LD A,83H OUT (P1AC),A;Int Freig. PIO PUSH HL PUSH DE MA1 LD B,22 MA2 CALL LSTOP ;Lesen einer ;Vollschwingung JR C,MA1 ;kein Einsbit ? CP IKEG1 ;Einsbit ? JR C,MA1 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 CALL IBYTE ;Lesen 128 Da- 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 C ; Vgl. Pr}fsumme ADD 0FFH ;Pr}fsumme false ;=> CY=1 LED POP DE ;Register holen POP HL LD A,3 ;PIO-Stop-INT OUT P1AC 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 CPL AND 1EH LD C,A IN A,P1BD AND 0E0H OR C INC A LD C,A ;Lautst{rke 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 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 A S I C * ; * * ; ************************* ; ; ; Konstanten : ; BASIC EQU 0C000H REBASIC EQU 0C002H IO EQU 0C800H ;[?[ ERW1 EQU 0C800H ;[?[ ERW2 EQU 0C800H ;[?[ ERW3 EQU 0C800H ;[?[ TOTAB1 EQU 0C121H TOTAB2 EQU 0E571H ; ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; ; Routinen zum Aufruf von BASIC/REBASIC ; BASIC-ROM wird eingeschaltet, IRM ; ausgeschaltet. Es wird die BASIC- ; Tastatur eingeschaltet. ; DEFW HEAD DEFM 'BASIC' DEFB 1 CALL SETFT LD DE,BASIC JR SWON ; DEFW HEAD DEFM 'REBASIC' DEFB 1 REBSC CALL SETFT LD DE,REBASIC ; SWON LD HL,KBDB LD BC,0FB80H SWT PUSH DE LD (INTAB),HL IN A,P1AD AND B OR C OUT P1AD RET ; ; Verlassen von BASIC ; BYE LD SP,(SYSP) LD DE,PARSE LD HL,BLINK LD BC,7F02H LD (KENNG),HL JR SWT ; ; Belegen der Funktionstasten f1 und f2 ; SETFT LD HL,FTASTE+1 LD BC,9CH-2 CPIR JP PO,FTB CPIR FTB LD DE,FTASTE+3;FT1+2 suchen LD C,9CH-4 LDIR LD L,9CH-3 LD C,9CH-3 LDDR ;verschieben LD M,A INC HL LD M,0F1H INC HL LD M,A INC HL LD M,0F2H ;belegen INC HL LD M,A LD HL,REBSC LD (WARM),HL LD HL,'KF' LD (KENNG),HL RET ; ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; ; ; ************************* ; * * ; * B O A R D * ; * * ; ************************* ; ; ;*********** Tastatur ********** ; KBDB CALL BLINK CP 0F1H JR Z,FT1 CP 0F2H RET NZ ; FT2 CALL BLINK ;f2-Routine SUB 30H LD B,A LD A,(CRSR+1) SUB B JR C,FT2 LD D,A LD A,(CRSR) LD E,A CALL VADR LD DE,IOPUF LD BC,7FH LDIR EX DE,HL JR FT5 ; LRC SUB 0F2H-1CH RET ; FT1 CALL BLINK ;f1-Routine CP 0F1H JR Z,FT1 JR NC,LRC CP ' ' RET C ;Steuerzeichen ? ; PUSH AF LD HL,BTAB LD D,0 LD E,A ADD HL,DE ;Tabellenwert LD A,M ;berechnet LD DE,TOTAB1 CP 55H JR C,FTX SUB 55H LD DE,TOTAB2 FTX INC A ;DE=TOTAB LD B,A FT3 LD A,(DE) INC DE AND A JP P,FT3 DJNZ FT3 ;Token gefunden RES 7,A LD HL,IOPUF FT4 LD M,A INC HL LD A,(DE) INC DE AND A,A ;}bertragen JP P,FT4 LD M,' ' ;" " INC HL POP AF CP 60H JR C,FT5 ;wenn Fkt.-> "(" LD M,'(' INC HL FT5 LD M,0 LD L,IOPUF LD (FCONT),HL SET 6,(IX+8) JP KBDB ; ;********* Tastaturbelegung ***** ; BTAB DEFB 222-80H ;SPC DEFB 142-80H ;! DEFB 144-80H ;" DEFB 236-80H ;# DEFB 213-80H ;$ DEFB 155-80H ;% DEFB 147-80H ;& DEFB 154-80H ;' DEFB 165-80H ;( DEFB 168-80H ;) DEFB 157-80H ;* DEFB 208-80H ;+ DEFB 150-80H ;, DEFB 218-80H ;- DEFB 161-80H ;. DEFB 158-80H ;/ DEFB 243-80H ;0 DEFB 242-80H ;1 DEFB 228-80H ;2 DEFB 229-80H ;3 DEFB 226-80H ;4 DEFB 223-80H ;5 DEFB 224-80H ;6 DEFB 145-80H ;7 DEFB 177-80H ;8 DEFB 178-80H ;9 DEFB 219-80H ;: DEFB 143-80H ;; DEFB 238-80H ;< DEFB 134-80H ;= DEFB 239-80H ;> DEFB 230-80H ;? DEFB 234-80H ;@ DEFB 151-80H ;A DEFB 220-80H ;B DEFB 153-80H ;C DEFB 131-80H ;D DEFB 211-80H ;E DEFB 129-80H ;F DEFB 136-80H ;G DEFB 140-80H ;H DEFB 132-80H ;I DEFB 212-80H ;J DEFB 235-80H ;K DEFB 160-80H ;L DEFB 138-80H ;M DEFB 130-80H ;N DEFB 233-80H ;O DEFB 149-80H ;P DEFB 139-80H ;Q DEFB 141-80H ;R DEFB 171-80H ;S DEFB 169-80H ;T DEFB 217-80H ;U DEFB 232-80H ;V DEFB 221-80H ;W DEFB 162-80H ;X DEFB 163-80H ;Y DEFB 240-80H ;Z DEFB 209-80H ;[ DEFB 210-80H ;\ DEFB 170-80H ;] DEFB 227-80H ;^ DEFB 152-80H ;_ DEFB 180-80H ;` DEFB 184-80H ;a DEFB 203-80H ;b DEFB 204-80H ;c DEFB 198-80H ;d DEFB 192-80H ;e DEFB 186-80H ;f DEFB 196-80H ;g DEFB 216-80H ;h DEFB 183-80H ;i DEFB 214-80H ;j DEFB 200-80H ;k DEFB 205-80H ;l DEFB 207-80H ;m DEFB 170-80H ;n DEFB 193-80H ;o DEFB 197-80H ;p DEFB 189-80H ;q DEFB 206-80H ;r DEFB 194-80H ;s DEFB 195-80H ;t DEFB 185-80H ;u DEFB 202-80H ;v DEFB 182-80H ;w DEFB 201-80H ;x DEFB 215-80H ;y DEFB 190-80H ;z DEFB 180-80H ;{ DEFB 180-80H ;| DEFB 180-80H ;} DEFB 180-80H ;~ DEFB 180-80H ; ; ; (C) F.Klemm '87 Jena ; ver{ndert f}r KC-85/4 ; im Februar 1988 ;_______________________________________ ; ;*Turbo-Scroll ??? ;*Zeiger f}r Belegung definieren ??? ;xDruckertreiber ??? ; JUMP n -> Autojump bei RESET ;xInsertmodus/Editor ;*BASIC Restart setzen ;*BEEP bei BASIC mit WAIT ;*CLOAD ohne Name alles lesen ;*PSET au~erhalb kein ERROR ; kein Autorepeat bei nichtleerem Puffer ;*65 Farben bei PSET/LINE/CIRCLE ; Switch n,x genauso wie M}hlhausen ; LOAD/SAVE Zeiger einbauen wie 2.5 ; INLOOP/Prologauswertung ; Turbotape ; INS/DEL anders ; ;* interessiert nur BASIC ;x seperat ;_______________________________________ ; ; P O R T B E L E G U N G : ; ; Portbeleg.: \ Port 1:(IX+1),MPT1 ; \ ;80 Module \ 0 Bildanzeige ;81 \ 1 Zugr. Farb/Pixel ;82 \ 2 Zugr. Bild1/2 ;83 \ 3 Farbe/HD-Color ;84 Port1 \ 4 System-LED ;85 \ 5 CAOS-ROM C000 ;86 Port2 \ 6 RAF 0 ;87 \ 7 RAF 1 ;88 PIOAD \ ;89 PIOBD \ Port 2:(IX+4),MPT2 ;8A PIOAC \ ;8B PIOBC \ 0 RAF 2 ;8C CTC0 \ 1 RAF 3 ;8D CTC1 \ 2 / ;8E CTC2 \ 3 / ;8F CTC3 \ 4 / ; \ 5 ROF 0 ;_______________\ 6 ROF 1 ; \ 7 / ; \ ; PIO B : \ PIO A : ; \ ; 0 tr}ck/blink \ 0 CAOS-ROM E000 ; 1 \ \ 1 RAM 0 ; 2 \ Laut- \ 2 IRM ; 3 \ st{rke \ 3 WER 0 ; 4 \ \ 4 RAM 4 ; 5 RAM 8 \ 5 WER 4 ; 6 WER 8 \ 6 Motor ; 7 / \ 7 ROM-Floppy/BASIC ;_______________\_______________________ ; ; SWITCH 0 RAM 0 0,1,3 ; 1 IRM ; 2 ROM ; 3 RAM-Disk ; 4 RAM 4 0,1,3 ;_______________________________________ ; ; ESCapefolgen ; ; 0...9 Windowumschaltung ; Pixeln des Steuerzeichens ; A Anzeige Bild 1 ; B Bild 2 ; C Normal ; D 4-Farben ; E Schreib Bild 1 ; F Bild 2 ; G Normal ; H 4-Farben ; I beides Bild 1 ; J Bild 2 ; K Normal ; L 4-Farben ; M Tastaturpuffer ein/aus ; N Auswertung ESC durch KBD ein/aus ; O Tastaturpuffer sichtbar ein/aus ; P Pixel schreiben ein/aus ; Q Farbe schreiben ein/aus ; R ; S Rollen Bildschirm r}ckw{rts ; T Aktuelle Zeile l|schen ; U Aktuelle Zeile einf}gen ; V V-Synchronisation ; W BS bis akt. Pos. l|schen ; X BS ab akt. Pos. l|schen ; Y ; Z ;_______________________________________ ; ; ; Auf 4k-EPROM: ; ------------- ; ESCape's Druckertreiber ; KEYLIST WINDOW ; KEY LOAD ; COLOR ; ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; ; ************************* ; * * ; * Auswertung von ESC- * ; * folgen * ; * * ; ************************* ; ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; ; Startadressen: ; AETAB DEFW DIP1 ;A DEFW DIP2 ;B DEFW DIPN ;C DEFW DIP4 ;D DEFW WRI1 ;E DEFW WRI2 ;F DEFW WRIN ;G DEFW WRI4 ;H DEFW BOTH1 ;I DEFW BOTH2 ;J DEFW BOTHN ;K DEFW BOTH4 ;L DEFW BUFFON ;M DEFW SETESC ;N DEFW KBDANZ ;O DEFW WRPIX ;P DEFW WRCOL ;Q DEFW RET ;R DEFW BACK ;S DEFW DELLN ;T DEFW INSLN ;U DEFW VSYNC ;V DEFW DELBEF ;W DEFW DELAFT ;X DEFW RET ;Y DEFW RET ;Z ; ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; VSYNC SET 1,(IX+8) PUSH AF DI LD A,0C7H OUT CTC2 LD A,1 OUT CTC2 EI POP AF VSYNC1 BIT 1,(IX+8) JR NZ,VSYNC1 KBDANZ RET ; BUFFON LD B,10H JR ESCMN ; SETESC LD B,4 ESCMN LD A,(IX+8) XOR B LD (IX+8),A RET ; WRPIX LD B,1 JR WRPC ; WRCOL LD B,2 WRPC LD HL,STBT LD A,M XOR B LD M,A RET ; DELBEF PUSH DE LD A,D AND A CALL NZ,ACLS3 POP DE PUSH DE LD A,E LD E,0 CALL VADR CALL NZ,AESC9 POP DE RET ; DELAFT PUSH DE LD A,(WINLG) SUB E CALL VADR CALL NZ,AESC9 POP DE PUSH DE INC D LD A,(WINLG+1) SUB D CALL NZ,ACLS3 POP DE RET ; INSLN LD A,(WINLG) LD C,A INC D LD A,D JP SCR9 ; DELLN PUSH DE LD HL,WINAN+1 LD A,M LD M,D PUSH AF LD L,WINLG+1 LD A,M PUSH AF SUB D LD M,A LD D,A CALL SCR POP AF LD (WINLG+1),A POP AF LD (WINAN+1),A POP DE RET ; ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; BOTH1 CALL WRI1 DIP1 LD B,0FEH DIPA AND A JR DISW ; BOTH2 CALL WRI2 DIP2 LD B,1 DIPO SCF DISW LD A,(MPT1) JR C,DIST AND B JR DINX DIST OR B DINX CALL VSYNC WRT OUT PORT1 LD (MPT1),A LD (IX+1),A RET ; BOTH4 CALL WRI4 DIP4 LD B,0F7H JR DIPA ; BOTHN CALL WRIN DIPN LD B,8 JR DIPO ; ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; WRI1 LD A,(MPT1) AND 0FBH JR WRT ; WRI2 LD A,(MPT1) OR 4 JR WRT ; WRIN LD BC,0 JR WRN4 ; WRI4 LD BC,2004H WRN4 LD HL,STBT LD A,M RES 5,A OR B LD M,A LD L,FARB LD A,M RES 2,A OR C LD M,A RET ; ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; ; r}ckw{rts Rollen des Fensters ; BACK LD A,(WINLG) ;Scroll-Routine LD C,A LD A,(WINLG+1) DEC A LD B,0 PUSH DE JR Z,ONBSC ;nur eine Zeile PUSH AF LD D,A LD E,B CALL VADR EX DE,HL BACK1 LD HL,-40 ADD HL,DE PUSH HL PUSH BC LDIR POP BC POP DE DEC A JR NZ,BACK1 ;VRAM gescrollt ; POP AF ADD A ADD A ADD A LD C,A LD E,B LD D,A DEC D CALL CADR EX DE,HL LD HL,8 ADD HL,DE EX DE,HL LD A,(STBT) RRCA PUSH AF CALL NC,BROLL POP AF RRCA JR C,ONBSC LD A,(MPT1) OR 2 OUT PORT1 CALL BROLL LD A,(MPT1) OUT PORT1 ONBSC LD D,0 ;erste Zeile CALL AESC ;l|schen POP DE RET ; ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; ; Rollen einer Bildebene r}ckw{rts ; BROLL LD A,(WINLG) BR1 PUSH HL PUSH DE PUSH BC BR2 LDD LDD LDD LDD LDD LDD LDD LDD JP PE,BR2 POP BC POP DE POP HL INC H INC D DEC A JR NZ,BR1 RET ; ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; .;Ende F-Teil ; 3uû