;DATUM: 25.09.1989 Pischel .Z80 TITLE CAOS 4.3 FUER KC85/4 ; ;*************************************************************** ; ; ***** *** ***** ***** ** ***** ; ** ** * * ** ** ** ** ** ** ** ; ** ** ** ** ** ** ** ** ; ** ** ** ** ** ***** ** ** ; ** ** ** ** ** ** ** ** ** ; ** ******* ** ** ** ** *********** ** ; ** ** ** ** ** ** ** ** ** ** ** ; ***** ** ** ***** ***** ** ** ******* ; ;*************************************************************** ; ;--------------------------------------------------------------- ; D E F I N I T I O N S ;--------------------------------------------------------------- ; ;ASCII's for Controls ; CLR EQU 1 ESC EQU 2 BRK EQU 3 BEEP EQU 7 CUL EQU 8 CUR EQU 9 CUD EQU 0AH CUU EQU 0BH CLS EQU 0CH CR EQU 0DH HCOPY EQU 0FH HOME EQU 10H PAGE EQU 11H SCROLL EQU 12H STOP EQU 13H KBEEP EQU 14H SHLK EQU 16H CEOLN EQU 18H CCR EQU 19H INS EQU 1AH LEVEL3 EQU 1BH NL EQU 1EH DEL EQU 1FH ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;IRM-Adressen ; V24DT EQU 0A801H ;Anfangsadresse fuer ;Initialisierungstab.V24 IOPUF EQU 0B700H ;Kassettenpuffer MPUF EQU 0B800H ;Modulsteuerwortspeicher FTASTE EQU 0B900H ;Funktionstastenspeicher MWIND EQU 0BA00H-100 ;Fenstervektorspeicher RTAB EQU 0BA00H ; VRADR0 EQU 0B200H ;VIDEO-RAM-ANFANGSADRESSE BILD 0 VRADR1 EQU 0AD00H ; - " - BILD 1 ESCTABL EQU 11 ;Anzahl ESC-Funktionen ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;Workspace-RAM ; STACK EQU 1C4H RAM EQU 1E2H PIOINT EQU 1E4H CTCINT EQU 1E8H ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;I/O-Address ; P1AD EQU 88H P1BD EQU 89H P1AC EQU 8AH P1BC EQU 8BH CTC0 EQU 8CH CTC1 EQU 8DH CTC2 EQU 8EH CTC3 EQU 8FH S1AD EQU 08H S1AC EQU 0AH CTC4 EQU 0CH D08A EQU 84H ;Merkzelle ist (IX+1) D09A EQU 86H ;Merkzelle ist (IX+4) CTCV EQU 0CH ;CTC V24 SIOV EQU 8 ;SIO V24 ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;IRM-Work-RAM ; ARGC EQU 0B780H ARGN EQU ARGC+ 1 ARG1 EQU ARGC+ 2 ARG2 EQU ARGC+ 4 ARG3 EQU ARGC+ 6 ARG4 EQU ARGC+ 8 ARG5 EQU ARGC+10 ARG6 EQU ARGC+12 ; NUMNX EQU 0B796H NUMYX EQU 0B797H HCADR EQU 0B799H ;Hardcopy-Adresse WINNR EQU 0B79BH ;aktuelle Fensternummer WINAN EQU 0B79CH ;Fensteranfang WINLG EQU 0B79EH ;Fenstergroesze CRSR EQU 0B7A0H ;aktuelle Cursorposition STBT EQU 0B7A2H ;Steuerbyte ;Bit 0=1 --> Pixel nicht mitschreiben ; 1=1 --> Farbe " " ; 2=1 --> schreiben invers ; 3=1 --> Steuercode nicht ausfuehren ; 4=1 --> 3. Tastaturebene geoeffnet ; COLOR EQU 0B7A3H WEND EQU 0B7A4H CCTL EQU 0B7A6H SYSP EQU 0B7AEH STAB EQU 0B7B0H CTAB EQU 0B7B2H NCAOS EQU 0B7B4H OUTAB EQU 0B7B9H INTAB EQU 0B7BBH UOUT1 EQU 0B7BDH UIN1 EQU 0B7C0H UOUT2 EQU 0B7C3H UIN2 EQU 0B7C6H IOERR1 EQU 0B7C9H VRAM EQU 0B7CBH NOMC EQU 0B7CDH RWEND EQU 0B7CFH FCONT EQU 0B7D1H HOR EQU 0B7D3H VERT EQU 0B7D5H FARB EQU 0B7D6H MIXIT EQU 0B7D7H TONL EQU 0B7D8H PUFAD EQU 0B7DAH BYTCT EQU 0B7DCH L3TAB EQU 0B7DDH L3SIZ EQU 0B7DFH COUNT EQU 0B7E0H ;Zeiteinheit bis zum 1. Repeat HCPZ EQU 0B7E1H ;Steuerbyte (Druckerinitialisierung) ; Bit0 1=Bitmode ; Bit1 0=USEROUT1 ; 1=USEROUT2 ; Bit2 0=Kanal1 ; 1=Kanal2 ; Bit4-7 Druckertyp INTV1 EQU 0B7E2H ;Anfangsadresse Initialisierungstab.(Drucker) INTV1L EQU INTV1+2 ;Laenge " INTV2 EQU INTV1L+1 ;Anf.adr. " (Duplex) INTV2L EQU INTV2+2 ;Laenge " HCPZ2 EQU 0B7E8H ;Steuerbyte (Duplexinitialisierung) ; Bit1 0=USERIN/OUT1 ; 1=USERIN/OUT2 ; Bit2 0=Kanal1 ; 1=Kanal2 ; MKENN EQU 0EEH ;V24-MODUL-KENNBYTE BLZK EQU 12 HEAD EQU 07F7FH ;Prolog ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ; I X - Z E L L E N ; ; IX+00: Zeitkonstante fuer Kassettenein- und ausgabe ; IX+01: Merkzelle fuer Ausgabeport 84H ; IX+02: gelesene Blocknummer ; IX+03: Sollblocknummer ; IX+04: Merkzelle fuer Ausgabeport 86H ; IX+05: Ein- Ausgabepufferadresse (low) ; IX+06: Ein- Ausgabepufferadresse (high) ; IX+07: Kennbyte fuer LOAD/VERIFY ; BIT 0: =1 ->LOAD =0 ->VERIFY ; BIT 1: =1 kein Selbststart bei LOAD/in BASIC ; Kennung f. 1. Block ; BIT 2-4 : Anzahl Argumente (bei SAVE)/ARGN>3 (Startoffset) ; BIT 5-7 : CLOAD/CSAVE (u.a. Fehlerkennung) ; IX+08: Kennbyte Tastatur ; BIT 0: gueltiges Wort (ASCII) in IX+13 ; BIT 1: ein Ton laeuft ; BIT 2: n.b. ; BIT 3: n.b. ; BIT 4: n.b. ; BIT 5: Tastaturbeep ; BIT 6: Code kommt von F-Taste ; BIT 7: Shiftlock ; IX+09: Prologbyte ; IX+10: Autorepeatzaehler (Tastatur) ; IX+11: Merkzelle fuer Akku (bei BWS on/off mit ; Stackverlagerung) ; IX+12: Wortregister ->Aufnahme gelesene Bits ; (Tastatur) ; IX+13: ASCII-Code ; IX+14: Tastaturcodetabelle low ; IX+15: Tastaturcodetabelle high ; ;*************************************************************** ;*************************************************************** ; T E I L C ;*************************************************************** ;*************************************************************** ; .PHASE 0C000H ; ;*************************************************************** ;Modulcheck ; MODCH: PUSH DE LD L,8 MOK1: PUSH HL LD A,1 ;ANZAHL ARGUMENTE CALL MODUL LD A,H ;STRUKTURBYTE INC A ;STRUKTURBYTE=FFH?JA-->MOD0 JR Z,MOK0 LD A,L ;Anzeige Schacht-Nr. CALL AHSP LD A,H ;Anzeige Typ CALL AHSP ;Hex-Ausgabe Reg. A + SPACE LD A,D ;Anzeige Steuerwort CALL AHEX CALL CRLF MOK0: POP HL LD A,L ADD A,4 ;Schacht+4 LD L,A JR NC,MOK1 CALL CRLF POP DE RET ; ;*************************************************************** ; Systemcheck ; SYSCH: PUSH DE CALL PRS DEFM 'CAOS' DEFB 0 LD A,45H CALL CRT IN A,(P1AD) RRCA ;Bit 0 ins CY JR C,SY1 CALL OFF JR SY12 SY1: CALL ON SY12: CALL PRS ;ROM F 0-3 ON/OFF DEFM 'ROMC ' DEFB 0 LD A,(IX+4) SRL A SRL A SRL A SRL A SRL A CPL AND 33H CALL CRT IN A,(P1AD) LD E,A RLCA JR C,SY13 CALL OFF JR SY4 SY13: CALL ON SY4: CALL RAMA ;RAM0 ON/OFF LD A,30H CALL CRT BIT 1,E ;Bit 1 ins CY JR NZ,SY5 CALL OFF JR SY6 SY5: CALL ON SY6: CALL RAMA ;RAM4 ON/OFF LD A,34H CALL CRT BIT 0,(IX+4) JR NZ,SY7 CALL OFF JR SY8 SY7: CALL ON SY8: CALL RAMA ;RAM F 0-F ON/OFF CALL PRS DEFM '8 ' DEFB 0 LD A,(IX+1) SRL A SRL A SRL A SRL A ADD A,2EH CALL CRT IN A,(P1BD) BIT 5,A JR NZ,SY9 CALL OFF JR SY10 SY9: CALL ON SY10: LD A,(IX+1) ;BILD 0/1 LD E,A CALL PRS DEFM 'BILD ' DEFB 0 BIT 2,E LD A,30H JR Z,SY11 INC A SY11: CALL CRT CALL CRLF POP DE RET ; RAMA: CALL PRS DEFM 'RAM' DEFB 0 RET ON: CALL PRS DEFM ' ON' DEFW 0A0DH DEFB 0 RET OFF: CALL PRS DEFM ' OFF' DEFW 0A0DH DEFB 0 RET ; ;*************************************************************** ; KEYLIST ; KEYLIST: LD HL,FTASTE LD BC,0CF0H;C=Name,B=Count. KEYL1: INC C LD A,C CALL AHPS DEFM ' :' ;Name DEFB 0 CALL PKEY1 ;Taste CALL CRLF ;Zeile DJNZ KEYL1 RET ; ;*************************************************************** ;Wurzelberechnung ; WURZ: XOR A LD A,-1 LD E,A LD D,A SQRL: INC A INC DE INC DE SBC HL,DE JP P,SQRL RET ;*************************************************************** ; Multiplikation ; MULT: LD B,0 ;! UP41 8Bit Multiplikation LD E,9 MUZ: LD A,D RRA DEC E RET Z LD D,A LD A,B JR NC,MU2 ADD A,C MU2: RRA LD B,A JR MUZ ; ;*************************************************************** ;Window eintragen ; WINDSC: PUSH AF CP 10 ;nur 10 Fenster moeglich JR NC,WINER LD A,D AND A ;Zeilenanzahl=0 -> ERROR JR Z,WINER ADD A,H ;Anzahl+Anfang>256 -> ERROR JR C,WINER CP 21H ;Anzahl+Anfang>32 -> ERROR JR NC,WINER LD A,E AND A ;Spaltenanzahl=0 -> ERROR JR Z,WINER ADD A,L ;Anzahl+Anfang>256 -> ERROR JR C,WINER CP 29H ;Anzahl+Anfang>40 -> ERROR JR NC,WINER POP AF PUSH DE PUSH HL CALL WINS ;retten POP HL POP DE LD (WINAN),HL LD (WINLG),DE LD (CRSR),BC LD (WINNR),A AND A ;C=0 RET WINER: POP AF SCF RET ;*************************************************************** ; COLOR einstellen ; PE: L=Vordergrund ; E=Hintergrund ; (ARGN) < 2 --> nur Vordergrund ; COL0: LD A,1FH AND L RLA RLA RLA LD L,A LD A,(ARGN) CP 2 ;Hintergrund ? LD A,E JR NC,COL1 LD A,(COLOR) COL1: AND 7 OR L LD (COLOR),A RET ; ;*************************************************************** ;LINE ; LX0: LD HL,(ARG2) LD DE,(ARG4) EXX LD HL,(ARG1) LD DE,(ARG3) ;Argumente geholt LX1: XOR A SBC HL,DE JR NC,LX2 ;(xa-xe)>=0 ? ADD HL,DE ;xe OK. EX DE,HL ;Anfang und Ende vertauschen EXX EX DE,HL EXX JR LX1 ; LX2: EXX PUSH DE ;ya in den Stack LX3: SBC HL,DE JR NC,LX4 ;(ye-ya)>=0 ? ADD HL,DE EX DE,HL ;ye, ya vertauschen OR 1 ;Bit0 von A=1 JR LX3 ; LX4: PUSH HL ;dy in den Stack EXX POP BC ;dy aus dem Stack PUSH HL SBC HL,BC ;dx-dy POP HL PUSH BC JR NC,LX5 EX (SP),HL OR 2 ;Bit1 von A=0 ;=> flache Linie LX5: PUSH HL ;HL = gro~es d LD B,H LD C,L EXX POP BC POP DE LD H,B LD L,C SRL H RR L EXX POP HL EX DE,HL LOP1: CALL POINT EXX AND A SBC HL,DE JR NC,LX6 ADD HL,BC LX6: EXX BIT 1,A JR NZ,LX7 INC HL JR NC,LEND AND A LX7: BIT 0,A INC DE JR Z,LX8 DEC DE DEC DE LX8: JR NC,LEND INC HL LEND: EX AF,AF' LD A,B OR C RET Z DEC BC EX AF,AF' JR LOP1 ; ;Punktruecksetzprogramm ; PURES0: PUSH HL PUSH DE PUSH BC ; PUNKT: LD HL,(HOR) LD A,L AND 7 SRL H RR L SRL H RR L SRL H RR L ADD A,LOW(PTAB) LD C,A LD B,HIGH(PTAB) LD A,(VERT) CPL LD H,A LD A,(BC) CALL PADR JR C,PUS1 LD B,A LD C,M CPL AND C LD M,A ;Pixel r}ckges. LD A,(IX+1) LD E,A XOR 2 DI OUT (D08A),A ;Farbe ein LD D,M ;Farbe geholt LD A,E OUT (D08A),A ;Farbe aus EI LD A,B AND C ;Z=1 Punkt war ges. LD A,D ;Farbe PUS1: POP BC POP DE POP HL RET ; ;Unterprogramm f}r MODIFY/DISPLAY ;Ausdrucken einer Zeile ; ;HL= Anfang ;C= L{nge ;VR= AF,B,HL ;HL= Ende ; DLINE: CALL HLHX ;Adr. PUSH HL LD B,C DL1: CALL LDAM ;HEX-Dump INC HL CALL AHSP DJNZ DL1 POP HL LD B,C LD A,CUR CALL ROUT DL2: CALL LDAM ;ASCII's INC HL CALL PCTRL DJNZ DL2 RET ; ;*************************************************************** ;Display ;HL= Anfang ;E= Zeilen (bei ARGN>1), sonst 1 ;C= Bytes/Zeile(-""->2), sonst 8 ; DISPL0: CP 3 JR NC,DIS1 LD C,8 CP 2 JR NC,DIS1 LD E,4 DIS1: PUSH DE DIS2: CALL DLINE CALL CRLF CALL BRKT JR C,DIS3 DEC E JR NZ,DIS2 CALL ICHR DIS3: POP DE CP BRK RET Z CP STOP JR NZ,DIS1 JR MOD1 ; ;*************************************************************** ;Modify Kommando ; MOD00: LD C,1 ;1 Zeichen/Zeile MOD1: CALL DLINE ;Anzeige Adr., ;Bytes, ASCII's LD A,5 LD (CRSR),A;Crsr auf Anf. CALL INLN ;Zeileneingabe PUSH HL CALL NUM ;Erfassen der LD A,M ;Speicheradr. POP HL JR C,MODR ;Fehler ? AND A ;Adr.erfa~t ? JR Z,MOD1 LD HL,(NUMYX);Adr. lesen ; ;Erfassen der Eingaben ; MOD2: PUSH HL CALL NUM LD A,M AND A INC HL LD A,M POP HL JR Z,MOD4 ;Zahl erfa~t ? ; ;Eingabe in den Speicher ; MOD3: CALL LDMA INC HL MOD4: LD A,(DE) ;IF "." return CP '.' RET Z ;IF "," Erfassen eines ASCII-Zeichens CP ',' JR NZ,MOD5 INC DE LD A,(DE) ;Erh|hen Zei- INC DE ;lenposition JR MOD3 ;IF ":" Adresse um 1 erniedrigen MOD5: CP ':' JR NZ,MOD6 DEC HL JR MOD1 ;IF "/" neue Adresse erfolgt MOD6: CP '/' JR NZ,MOD7 INC DE CALL NUM JR C,MODR LD HL,(NUMYX) JR MOD1 ;IF "'" String bis 00h oder ' lesen MOD7: CP 27H JR NZ,MOD9 INC DE MOD8: LD A,(DE) INC DE AND A JR Z,MOD1 CP 27H JR Z,MOD4 LD M,A INC HL JR MOD8 ; MOD9: AND A JR Z,MOD1 CP ' ' JR Z,MOD2 MODR: CALL ERRM JR MOD1 ; ;*************************************************************** ; V24-TREIBER ;*************************************************************** ;V24 Druckerinitialisierung ; V24: LD HL,ARGN LD A,(HL) CP 3 JR NC,V24S LD B,8 ;fuer (ARGN)<3 CALL HADR JR C,ERROR1 LD HL,HCOP LD (HCADR),HL LD DE,SDD LD HL,HCPZ BIT 1,M JR NZ,V241 LD (UOUT1+1),DE JR V242 V241: LD (UOUT2+1),DE V242: JP INZ V24S: INC HL ;ARG1,LOW LD B,(HL) ;STECKPLATZ CALL HADR JR C,ERROR1 ;CHANAL? INC HL INC HL ;ARG1,LOW LD A,(HL) ;KANAL 0 ODER 1 DEC A JR NZ,CHA1 LD A,(HCPZ) RES 2,A LD (HCPZ),A JR CHA2 CHA1: DEC A JR NZ,ERROR1 LD A,(HCPZ) SET 2,A LD (HCPZ),A ;EINTRAGEN IN USER CHANAL CHA2: INC HL INC HL ;ARG3,LOW LD DE,SDD LD A,(HL) ;USEROUT 2 OR 3 DEC A DEC A ; 0 OR 1 JR NZ,CH2 ;EINTRAGEN IN USER 2 LD (UOUT1+1),DE LD DE,HCPZ LD A,(DE) RES 1,A LD (DE),A JR PROT1 ERROR1: JR ERROR CH2: DEC A JR NZ,ERROR1 LD (UOUT2+1),DE LD DE,HCPZ LD A,(DE) SET 1,A LD (DE),A ;TEST OB PROTOKOLL ERWUENSCHT PROT1: LD A,(ARGN) CP 4 ;PARAMETER VORHAN INC HL INC HL ;ARG4 LOW JR C,INZ LD A,(HL) ;PROT 0 1 2 AND A JR Z,DTYP ;=0 DEC A JR Z,PROT2 ;=1 ASCII DEC A JR NZ,ERROR ;=2? LD A,(HCPZ) SET 0,A ;Bitmode ein JR PROT21 ;IN HARDCOPY EINTRAGEN PROT2: LD A,(HCPZ) RES 0,A ;Bitmode aus PROT21: LD (HCPZ),A LD DE,HCOP LD (HCADR),DE DTYP: LD A,(ARGN) CP 5 JR NZ,INZ INC HL INC HL LD A,M SLA A SLA A SLA A SLA A LD C,A LD A,(HCPZ) AND 0FH OR C LD (HCPZ),A INZ: CALL CHANAL ;Initialisierung CTC u. SIO V24 LD A,CTCV PUSH BC ADD A,C LD B,2 ;COUNTER LD C,A ;ADRESSE CTC-KAN LD HL,(INTV1) DI OTIR ;INIT SIO POP BC LD A,(INTV1L) DEC A DEC A LD B,A LD A,0AH ;ADR. SIO ADD A,C LD C,A OTIR EI RET ;ZEICHENAUSGABE INITIALISIERT ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ERROR: JP ERRM ; ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;Test auf Modul+Einschalten ; HADR: LD D,60 ;max. 60 Schaechte testen LD C,80H HADR1: IN A,(C) CP MKENN JR Z,HADR0 INC B INC B INC B INC B DEC D JR NZ,HADR1 SCF RET ;MODUL EIN HADR0: PUSH HL LD L,B ;STECKPLATZ LD A,2 LD D,01H CALL MODUL POP HL RET ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;PROTOKOLLFUNKTION UEBER SHIFT CLEAR ; HCOP0: PUSH HL PUSH DE LD A,(HCPZ) BIT 0,A JP NZ,BIMODE LD HL,(OUTAB) XOR A OR (HL) JR NZ,HACO1 LD DE,PROT DEC A DEC A JR Z,HCOP1 LD HL,OUTT1+3 JR HACO2 HCOP1: LD HL,OUTT1+2 JR KAN KUSER1: LD (UOUT1+1),DE LD HL,OUTT1+2 JR AUSG HACO1: DEC A LD DE,SDD LD HL,OUTT1 DEC A JR Z,KAN HACO2: LD (UOUT2+1),DE JR AUSG KAN: LD (UOUT1+1),DE AUSG: LD (OUTAB),HL POP DE POP HL RET ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;INTAB1: DEFB 7FH ;RESET DEFB 1BH DEFB 5BH DEFB 31H DEFB 31H DEFB 61H ;HORPOS REL VOR ;INTAB2: DEFB 1BH DEFB 5BH DEFB 30H DEFB 31H DEFB 65H ;VERTPOS REL VOR DEFB 1BH DEFB 5BH DEFB 37H DEFB 38H DEFB 71H ;HORPOS REL RUECK ;INTAB4: DEFB 1BH DEFB 4BH DEFB 40H DEFB 02H ;BIMO INIT ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;HARDCOPY-Routinen fuer K6311/12/13/14/04 ; BIMODE: PUSH BC PUSH AF LD A,(HCPZ) BIT 7,A JR Z,BIM0 ;->Matrixdrucker LD HL,(VRAM) LD B,32 ;Zeilen BIM4: LD C,40 ;Spalten BIM3: LD A,M INC HL AND A JR NZ,BIM1 LD A,20H BIM1: CP 20H JR NC,BIM2 LD A,20H BIM2: CALL SDD DEC C JR NZ,BIM3 LD A,0DH CALL SD8 LD A,0AH CALL SD8 DJNZ BIM4 BIM5: POP AF JP REGPOP ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - BIM0: AND 0F0H JR Z,BI6313 ;K6313/K6327 CP 10H JR Z,BI6314 ;K6314/K6328 CP 20H JP Z,BI6311 ;K6311 CP 30H JP Z,BI6312 ;K6312 CP 50H JP Z,BI6304 ;K6304 JR BIM5 ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;K6313 BI6313: LD H,0 BIM6: PUSH HL LD HL,BITAB1 ;INIT LD B,10 CALL INBIM POP HL CALL BIM7 JR NC,BIM6 BIM16: LD A,0DH CALL SD1 LD A,0AH CALL SD1 JP BIM5 ; BIM7: LD L,0 BIM9: LD BC,8 PUSH HL LD DE,IOPUF CALL PADR LDIR LD C,8 BIM10: LD B,8 LD HL,IOPUF BIM8: RL M RLA INC HL DJNZ BIM8 CALL SD1 DEC C JR NZ,BIM10 POP HL INC L LD A,40 CP L JR NZ,BIM9 LD A,H ADD A,8 LD H,A RET ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;K6314 BI6314: LD H,0 BIM11: PUSH HL LD HL,BITAB2 ;INIT LD B,10 CALL INBIM POP HL LD L,0 BIM14: LD B,4 PUSH HL LD DE,IOPUF CALL PADR BIM12: LD A,M LD (DE),A INC DE LD (DE),A INC DE INC L DJNZ BIM12 LD C,8 BIM15: LD B,8 LD HL,IOPUF BIM13: RL M RLA INC HL DJNZ BIM13 CALL SD1 CALL SD1 DEC C JR NZ,BIM15 POP HL INC L LD A,40 CP L JR NZ,BIM14 LD A,H ADD A,4 LD H,A JR NC,BIM11 JR BIM16 ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;K6311 BIM17: PUSH HL PUSH BC CALL PADR LD B,0 LDIR POP BC POP HL RET ; BIM18: PUSH HL PUSH BC LD L,80H ;MASKE BIM19: LD B,0 LD DE,IOPUF BIM20: LD A,(DE) AND L JR Z,BIM21 SCF BIM21: RL B INC DE LD A,6 CP E JR NZ,BIM20 AND A RL B LD A,B CALL SD1 RRC L BIT 7,L JR Z,BIM19 POP BC POP HL RET ; BI6311: LD HL,BITAB3 LD B,14 CALL INBIM LD B,42 ;ZEILEN ZU 6 PUNK LD HL,0 BIM22: LD DE,IOPUF LD C,6 CALL BIM17 CALL BIM18 INC L LD A,28H ;ZEILENENDE CP L JR NZ,BIM22 LD A,6 ADD A,H LD H,A LD L,0 ;ZEILENANFANG PUSH HL PUSH BC LD HL,BITAB3 LD B,14 CALL INBIM POP BC POP HL DEC B JR NZ,BIM22 ;LETZTE ZEILE? ;LETZTE ZEILE BIM23: LD DE,IOPUF LD C,4 CALL BIM17 XOR A LD (DE),A INC DE LD (DE),A CALL BIM18 INC L LD A,28H CP L JR NZ,BIM23 JP BIM16 ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;K6312 BIM25: PUSH HL LD DE,IOPUF CALL PADR BIM24: LD A,(HL) LD (DE),A INC DE LD (DE),A INC DE INC L DEC C JR NZ,BIM24 POP HL RET ; BIM26: PUSH HL PUSH BC LD L,80H ;MASKE BIM29: LD B,0 LD DE,IOPUF BIM28: LD A,(DE) AND L JR Z,BIM27 SCF BIM27: RL B INC DE LD A,6 CP E JR NZ,BIM28 LD A,B RLA RLA CALL SD1 CALL SD1 RRC L BIT 7,L JR Z,BIM29 POP BC POP HL RET ; BI6312: LD HL,BITAB4 LD B,14 CALL INBIM LD B,85 ;ZEILEN ZU 6 PUNK LD HL,0 BIM30: LD C,3 CALL BIM25 CALL BIM26 INC L LD A,28H ;ZEILENENDE CP L JR NZ,BIM30 INC H INC H INC H LD L,0 ;ZEILENANFANG PUSH HL PUSH BC LD HL,BITAB4 LD B,14 CALL INBIM POP BC POP HL DJNZ BIM30 ;LETZTE ZEILE? ;LETZTE ZEILE BIM31: LD C,1 CALL BIM25 XOR A LD (DE),A INC DE LD (DE),A CALL BIM26 INC L LD A,28H CP L JR NZ,BIM31 JP BIM16 ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;K6304 BI6304: LD H,0 BIM32: PUSH HL LD HL,BITAB5 ;INIT LD B,9 CALL INBIM POP HL CALL BIM7 JR NC,BIM32 JP BIM16 ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - INBIM: LD A,(HL) ;ZEIGER TABELLE INC HL CALL SD1 DJNZ INBIM RET ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - BITAB1: DEFB 0DH ;CR DEFB 09H ;TABULATOR DEFB 1BH DEFM 'J' ;ZEILENVORSCHUB DEFB 24 ;18/216" DEFB 1BH DEFB 2AH ;BITMODE DEFB 5 ;PLOTTERGRAFIK DEFB 40H ;320 PUNKTE DEFB 01H ;BIMO INIT BITAB2: DEFB 0DH ;CR DEFB 09H ;TABULATOR DEFB 1BH DEFM 'J' ;ZEILENVORSCHUB DEFB 24 ;18/216" DEFB 1BH DEFB 2AH ;BITMODE DEFB 5 ;PLOTTERGRAFIK DEFB 80H ;640 PUNKTE DEFB 02H ;BIMO INIT BITAB3: DEFB 1BH DEFB 5BH DEFB 30H DEFB 31H DEFB 65H ;VERTPOS REL VOR DEFB 1BH DEFB 5BH DEFB 31H DEFB 32H DEFB 60H ;HORPOS ABSOLUT DEFB 1BH DEFB 4BH DEFB 40H DEFB 01H ;BIMO INIT BITAB4: DEFB 1BH DEFB 5BH DEFB 30H DEFB 31H DEFB 65H ;VERTPOS REL VOR DEFB 1BH DEFB 5BH DEFB 31H DEFB 32H DEFB 60H ;HORPOS ABSOLUT DEFB 1BH DEFB 4BH DEFB 80H DEFB 02H ;BIMO INIT BITAB5: DEFB 0DH ;CR DEFB 09H DEFB 1BH DEFM 'J' ;ZEILENVORSCHUB DEFB 18H DEFB 1BH DEFM 'K' ;BITMODE DEFB 40H ;BIMO INIT DEFB 1 ;320 PUNKTE ; ;*************************************************************** ;Initialisierungsroutine V24Duplex ; VDUP: LD A,(ARGN) CP 3 JR C,VDU0 LD HL,ARG1 LD B,M CALL HADR ;V24-MODUL EIN JP C,ERRM INC HL INC HL LD A,(HCPZ2) BIT 0,M RES 2,A JR NZ,VDU1 SET 2,A VDU1: LD B,A INC HL INC HL LD A,M SUB 2 RES 1,B JR Z,VDU2 SET 1,B VDU2: LD A,B LD (HCPZ2),A JR VDU3 ; VDU0: CALL HADR JP C,ERRM VDU3: LD DE,SDDUP LD BC,SEDUP LD A,(HCPZ2) BIT 1,A ;USER 2 oder 3? JR NZ,VDU4 LD (UOUT1+1),DE LD (UIN1+1),BC JR INZ1 VDU4: LD (UOUT2+1),DE LD (UIN2+1),BC ; INZ1: CALL CHANAL2 ;Initialisierung Duplex LD A,CTCV PUSH BC ADD A,C LD B,2 ;COUNTER LD C,A ;ADRESSE CTC-KAN LD HL,(INTV2) DI OTIR ;INIT SIO POP BC LD A,(INTV2L) DEC A DEC A LD B,A LD A,0AH ;ADR. SIO ADD A,C LD C,A ST71: OTIR EI RET ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;INITIALISIERUNG INTER.GESTEUERTE DUPLEXROUT. ST70: LD HL,SDDUP LD (UOUT2+1),HL LD C,CTCV+1 LD HL,V24TAB3 LD B,2 DI OTIR LD B,11 LD C,SIOV+3 JR ST71 ;*************************************************************** ;V24-Initialisierungstabellen umkopieren und ;evtl. M003 zuschalten ;M003 vorhanden --> (0A800H)=1 ; UMLAD: LD HL,V24TAB1 ;Druckertreiber LD DE,V24DT ;Anfangsadr. im RAM LD BC,V24TAB3-V24TAB1 LDIR LD B,8 CALL HADR RET C LD A,1 LD (V24DT-1),A RET ; V24TAB1: DEFB 47H DEFB 5BH DEFB 4 DEFB 4 DEFB 3 DEFB 20H DEFB 5 DEFB 6AH V24TAB2: DEFB 47H ;BETRIEBSART CTC DEFB 2EH ;ZEITKONST.CTC DEFB 18H DEFB 4 ;WR4 DEFB 44H DEFB 3 ;WR4 DEFB 0E1H DEFB 5 ;WR5 DEFB 6AH ;8 BIT V24TAB3: DEFB 47H ;BETRIEBSART CTC DEFB 2EH ;ZEITKONST. CTC DEFB 18H ;KANAL-RESET DEFB 2 ;WR2 DEFB 0E2H ;INT.-VEKTOR DEFB 14H ;WR4/RESET-INT. DEFB 44H ;TEILER 16 DEFB 3 ;WR3 DEFB 0E1H ;8 BIT DEFB 5 ;WR5 DEFB 0EAH ;DTR ON/SENDERFREIGABE DEFB 11H ;WR1 DEFB 18H ;INT BEI JEDEM ZEICHEN V24TABE EQU $ ; ;*************************************************************** ;Erfassen von maximal 10 Argumenten ; RLIN0: LD BC,ARGN XOR A LD (BC),A RL2: CALL NUM RET C LD A,M OR A RET Z INC HL INC BC LD A,M LD (BC),A ;EINTRAGEN INC HL INC BC LD A,M LD (BC),A LD L,LOW(ARGN) INC M LD A,M ADD A,255-10 JR NC,RL2 RET ; ;*************************************************************** ; UP38 Byteweise Ausgabe auf Kassette ; MBOT0: LD E,D LD D,A PUSH DE PUSH BC BIT 3,E ;INIT? JR Z,KINUT ;NON INIT ; OUTPUT INIT SET 1,(IX+7) ;OUT 1. BLOCK LD A,0D5H ;CSAVE- ODER LIST-DATEI ? CP M PUSH DE LD DE,0A0H ;VORTONLAENGE CSAVE JR NZ,KUTO LD DE,0500H ;LANGER VORTON (LIST#) KUTO: LD (TONL),DE LD DE,IOPUF LD BC,0BH ;TYP+NAME=11BYTE LDIR EX DE,HL POP DE LD M,D LD A,80H-0CH ;LAENGE PUFFER OHNE NAME,TYP EE: CALL LDPUB EE1: POP BC POP DE RES 3,E RET ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - KINUT: LD HL,(PUFAD) LD M,D BIT 6,E ;ENDE ? JR NZ,ENDE LD A,(BYTCT) DEC A JR NZ,EE ;PUFFER VOLL ? ; A=0 BIT 1,(IX+7) ;INIT ? JR NZ,INITO CALL NORMO ;NORMAL OUTPUT CALL AA1 ;BYTCT UND PUFAD NEU LADEN JR EE1 ; INITO: RES 1,(IX+7) CALL ISRLX CALL KENN CALL AA1 EE4: JR EE1 ENDE: BIT 1,(IX+7) ;OUT INIT BLOCK AND CLOSE ? JR Z,END CALL ISRLX JR EDD END: CALL NORMO ; EDD: LD BC,(TONL) CALL CSRLX ; EE2: PUSH DE CALL CSRLI RES 5,(IX+7) POP DE JR EE4 ; ;*************************************************************** ;UP37 Byteweise Eing. v. Kassette ; MBIN0: LD E,D LD D,A PUSH DE PUSH BC BIT 6,E ;ENDE ? JR NZ,EE2 BIT 3,E ;INIT BIT(UEBERNAHME 1.BYTE) JR Z,FOBLO FIRBL: LD A,01H ;1. BLOCK LD (IX+3),A PUSH HL CALL ISRLI FIRB0: POP HL JP C,IBLNE LD A,(IX+2) CP 01H ;GELESENE BLOCKNUMMER JP NZ,IBLNE RES 7,(IX+7) INC (IX+3) LD DE,IOPUF NVERG: LD B,0BH ;TYP NAME LD A,(DE) CP 0D5H JR NZ,NV2 SET 5,(IX+7) NV2: ADD A,29H JR NC,PRNAM LD A,(DE) SUB 04H LD (DE),A INC DE LD (DE),A INC DE LD (DE),A LD (DTFLG),A SET 6,(IX+7) LD DE,IOPUF PRNAM: LD A,(DE) ;PRINT TYP NAME CALL CRT CP M JR Z,RIGHT ; RIGHT NAME SET 7,(IX+7) ;NVERGL. FALSCH RIGHT: INC HL INC DE DJNZ PRNAM CALL CRLF BIT 7,(IX+7) JP NZ,BRK2 ;RICHTIGER NAME>>LADE PUFFERADRESSE UND BYTEUEBERGABE EX DE,HL ;PUFFERADRESSE NACH HL LD A,80H-0BH FOBYT: LD D,M CALL LDPUB LD A,D POP BC POP DE RES 3,E RET ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - FOBLO: LD HL,(PUFAD) LD A,(BYTCT) DEC A JR NZ,FOBYT NEXTB: CALL SRLIN JR C,FDT2 CALL AA1 LD A,0FFH CP (IX+2) JR Z,FDAT LD A,(IX+3) CP (IX+2) JR Z,FDAT ; BLNR FALSCH LD A,'*' CALL CRT CALL PBLNR DEFB 19H DEFB 0 NEX1: CALL BRK1 JR NEXTB ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - FDAT: INC (IX+3) DEC A BIT 5,(IX+7) JR NZ,FDT3 CALL PBLNR DEFM '>' DEFB 19H DEFB 0 FDT3: CALL AA1 LD HL,(PUFAD) JR FOBYT FDT2: CALL PRS DEFW 0909H DEFW 0909H DEFM '?' DEFB 0 CALL PBLNR DEFW 0A0DH DEFB 0 JR NEX1 ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - IBLNE: CALL PRS ;FALSCHE BLNR 1. BLOCK DEFM '*' DEFB 8 DEFB 0 CALL BRK1 CALL SRLIN PUSH HL JP FIRB0 ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NORMO: LD BC,(TONL) CALL SRLX KENN: CALL PBLNR DEFM '>' DEFB 19H DEFB 0 BRK1: CALL BRKT RET NC JP BRK2 ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AA1: LD A,80H LD HL,IOPUF JR LDPU1 LDPUB: INC HL LDPU1: LD (PUFAD),HL LD (BYTCT),A RET ; WILLI0 ? ; ;*************************************************************** ;*************************************************************** ; ; T E I L E ; ;*************************************************************** ;*************************************************************** ; DEFS 0E000H-$ ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - JP ST3 ;WARMSTART JP ERW1 ;BASIC-Erweiterung 1 JP ERW2 ; " 2 JP ERW3 ; " 3 DEFW TOTAB ;Tokentabelle BASIC-Erweiterung IOCO: JP IO ;Sprung in die BASIC-Schnittstelle ; ;*************************************************************** ; ; EINSPRUNG INS BASIC/REBASIC ; ; DEFW HEAD DEFM 'BASIC' DEFB 0 CALL BASEIN JP BASIC ; DEFW HEAD DEFM 'REBASIC' DEFB 0 CALL BASEIN JP REBASIC ; BASEIN: IN A,(P1AD) OR 80H ;BIT 7 setzen (ROCB) OUT (P1AD),A RET ; ;*************************************************************** ; ; AUSGABE VON ASCII- UND STEUERZEICHEN AUF DEN BILDSCHIRM ; ;*************************************************************** ; ;Bestimmen der Cursorpos. ; CUADR: LD DE,(CRSR) ; ;*************************************************************** ;Bestimmen der Pixel- und Coloradr. ;aus der rel. Cursorpos. ;PE: DE= rel. Cursor ;PA: HL= Pixel/Color ; CY= au~erhalb ;VR: F,HL ; CADR: LD HL,(WINAN) ADD HL,DE NADR: SLA H SLA H SLA H ; ;*************************************************************** ; Bestimmen der Pixel- und Coloradressen ; aus Zeile und Spalte ; PE: H= Zeile ; L= Spalte ; VR: F,HL ; PADR: PUSH AF ;CAOS-UP 34H LD A,L ;Cursorspalte LD L,H ;Pixelzeile CP 40 ;>40 SPALTEN? JR NC,PADR3 OR 80H ;8000H + 100H*Spalte LD H,A ;Highteil Adresse POP AF AND A ;CY=0 RET ; PADR3: POP AF SCF RET ; ;*************************************************************** ;Pr}fen ob Cursor im Window ;PE: DE= rel. Cursor ;PA: CY= au~erhalb ;VR: AF ; TCIF: LD A,(WINLG) ;CAOS-UP 33H DEC A SUB E RET C LD A,(WINLG+1) DEC A SUB D RET ; ;*************************************************************** ;Bestimmen der Video-RAM Adr. ;PE: DE= rel. Cursor ;PA: HL= Video-RAM Adr. ; CY= au~erhalb ;VR: F,HL ; VADR: PUSH AF ;CAOS-UP 32H CALL TCIF JR C,PADR3 LD A,(WINAN) ADD A,E PUSH DE LD E,A LD A,(WINAN+1) ADD A,D ADD A,A ADD A,A ADD A,A LD L,A LD H,0 LD D,H ADD HL,HL ADD HL,HL ADD HL,DE LD DE,(VRAM) LD E,A ADD HL,DE POP DE POP AF AND A RET ; ;*************************************************************** ;Vorder- und Hintergrundfarbe ;vertauschen ;PE: A= alte Farbe ;PA: A= neue Farbe ;VR: A,C ; COMPL: PUSH AF AND 0C0H LD C,A POP AF PUSH AF AND 7 RLCA RLCA RLCA OR C LD C,A POP AF RRCA RRCA RRCA AND 7 OR C RET ; ;*************************************************************** ; Ausdrucken eines Zeichens auf der rel. Cursor- ; position DE /ohne Steuerzeichen ; PE: A=ASCII ; DE=Cursorposition (rel.) ; VR: / ; DISP: PUSH HL PUSH DE PUSH BC PUSH AF LD HL,(WINAN) ADD HL,DE EX DE,HL ; LD HL,CCTL ADD A,A JR NC,DISP2 LD L,LOW(CCTL+4) DISP2: SUB 40H JR C,DISP3 CP 80H JR C,DISP4 DISP3: ADD A,40H INC L INC L DISP4: LD C,M INC L LD B,M ADD A,A LD L,A LD H,0 ADD HL,HL ADD HL,BC ;Anfang Zeichen ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ; Berechnung Pixeladr. LD A,E CP 40 ;>40 Spalten? JR NC,DISPE OR 80H LD B,D LD D,A LD A,B ADD A,A ADD A,A ADD A,A LD E,A ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ; Pixelausgabe LD A,(STBT) BIT 2,A ;invers JR Z,DISP6 ;nein! LD C,A ;Steuerbyte merken! LD B,8 PUSH DE DISP7: LD A,M CPL LD (DE),A ;Farbe invers INC HL INC DE DJNZ DISP7 LD A,C RRCA JR DISP8 DISP6: RRCA JR C,DISP5 PUSH DE ;Farbadresse merken LDI ;Pixel ausgeben LDI LDI LDI LDI LDI LDI LDI DISP8: POP DE ;Farbadresse zur}ckholen ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ; Farbausgabe DISP5: RRCA JR C,DISPE LD A,(IX+1) ; LD H,A XOR 2 ;Bit 1 setzen DI OUT (D08A),A ;I/O Kanaladresse 84H ; ; LD A,(COLOR) ; LD (DE),A ; INC DE ; LD (DE),A ; INC DE ; LD (DE),A ; INC DE ; LD (DE),A ; INC DE ; LD (DE),A ; INC DE ; LD (DE),A ; INC DE ; LD (DE),A ; INC DE ; LD (DE),A ; ld hl,color ldi ldi ldi ldi ldi ldi ldi ldi LD A,(ix+1) OUT (D08A),A EI ; DISPE: POP AF POP BC POP DE POP HL RET ; ;*************************************************************** ; Rollen einer Bildebene ; LROLL: PUSH HL PUSH DE PUSH BC PUSH AF EX AF,AF' PUSH AF LD A,C EX AF,AF' LD A,(WINLG) LR1: PUSH HL PUSH DE LR2: LDI LDI LDI LDI LDI LDI LDI LDI JP PE,LR2 POP DE POP HL INC H INC D EX AF,AF' LD C,A EX AF,AF' DEC A JR NZ,LR1 EX AF,AF' POP AF EX AF,AF' JR DISPE ; ;*************************************************************** ;Ausdrucken eines Zeichen auf dem ;CRT mit Cursorsteuerung ;PE: A= ASCII ;PA: DE= neuer Cursor ;VR: AF,BC,DE,HL ; CRT1: LD DE,(CRSR) LD HL,STBT BIT 4,M JR Z,EB12 ;Spr., wenn Ebene 3 nicht geschalt. ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - EB13: RES 4,M CP 30H ; Behandlg. Ziffern 0-9 RET C CP 3AH JR NC,GRL ;Spr. b. Vorlieg.v. >Grossbuchst. SUB 30H JR REC GRL: CP 41H RET C RES 5,A ;Umwanlg. Klein- ->Grossbuchst. CP 5BH RET NC SUB 37H ; Behanlg. Grossbuchst.n ; ;Test: UP-Nr.>d. eingetr. UPs REC: LD HL,L3SIZ CP M RET NC ; ADD A,A LD HL,(L3TAB) JR RECH ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - EB12: CP ' ' JR NC,PZEI BIT 3,M JR NZ,PZEI ADD A,A LD HL,(CTAB) ;Anfang Tabelle RECH: LD C,A ;Startadr. LD B,0 ADD HL,BC LD A,M INC HL LD H,M LD L,A CHL: JP (HL) ; ESCC0: LD A,E AND 0F8H ADD A,8 LD E,A JR ACUR+1 ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - PZEI: CALL VADR RET C PZEI1: LD M,A CALL DISP ACUR: INC E ;Cursor right LD A,(WINLG) DEC A CP E RET NC ACR: LD E,0 ;Cursor CR ACUD: INC D ;Cursor down LD A,(WINLG+1) CP D RET NZ LD HL,(WEND) JP (HL) ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AHCOPY: LD HL,(HCADR) ;Hardcopy JP (HL) ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ACUL: LD A,E ;Cursor left AND A JR Z,CU1 DEC E RET CU1: LD A,D AND A RET Z DEC D ACEOLN: LD A,(WINLG) ;Cursor eoln DEC A LD E,A RET ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ACUU: LD A,D ;Cursor down AND A RET Z DEC D RET ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - APAGE: LD HL,AHOME ;Page einsch. PA1: LD (WEND),HL RET ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ASCROLL: LD HL,SCR ;Scroll einsch. JR PA1 ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ACLR: CALL ACUL ;Clear ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ADEL: PUSH DE CALL VADR ;Delete LD A,M AND A JR Z,DEL3 PUSH HL DEL4: PUSH DE INC E CALL VADR JR NC,DEL1 LD E,0 INC D CALL VADR JR C,DEL2 DEL1: LD A,M AND A JR Z,DEL2 LD B,D LD C,E POP DE EX (SP),HL LD M,A CALL DISP LD D,B LD E,C JR DEL4 DEL2: POP DE POP HL LD M,0 LD A,' ' CALL DISP DEL3: POP DE RET ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AINS: PUSH DE ;Insert LD A,' ' CALL VADR INS3: LD B,M LD M,A CALL DISP LD A,B AND A JR Z,INS1 INC E CALL VADR JR NC,INS3 LD E,0 INC D CALL VADR JR NC,INS3 INS1: POP DE RET ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ACLS: LD A,(WINLG+1) ;Cls LD D,0 CLS1: PUSH AF CALL AESC POP AF INC D DEC A JR NZ,CLS1 ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AHOME: LD D,0 ;Home,Pagemodus ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ACCR: LD E,0 ;CCR RET ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ; eine Zeile loeschen ; CLLN: LD B,C ;Spalten CLLN1: LD D,L LD M,A INC L LD M,A INC L LD M,A INC L LD M,A INC L LD M,A INC L LD M,A INC L LD M,A INC L LD M,A LD L,D INC H ;naechste Spalte DJNZ CLLN1 RET ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ; Scroll-Routine ; SCR: LD A,(WINLG) LD C,A LD B,0 LD A,(WINLG+1) DEC A JR Z,ONESC ;nur eine Zeile PUSH DE PUSH AF LD DE,0 CALL VADR EX DE,HL SCR1: LD HL,40 ADD HL,DE PUSH HL PUSH BC LDIR POP BC POP DE DEC A JR NZ,SCR1 ;VRAM gescrollt POP AF ADD A,A ADD A,A ADD A,A LD C,A LD DE,0 LD B,D CALL CADR EX DE,HL LD L,8 ADD HL,DE LD A,(STBT) RRA RRA JR C,SCR2 PUSH AF CALL FARBEA ;Farbe ein CALL LROLL CALL FARBEA ;Farbe aus POP AF SCR2: RLA CALL NC,LROLL POP DE ONESC: DEC D ; AESC: LD E,0 ;1. Spalte CALL VADR RET C LD A,(WINLG) LD B,A LD C,A XOR A ESC1: LD M,A ;VRAM INC HL DJNZ ESC1 ;Video-RAM geloescht CALL CADR RET C PUSH DE LD A,(STBT) RRCA LD E,A JR C,ESC2 XOR A PUSH HL CALL CLLN POP HL ESC2: RRC E JR C,ESC3 CALL FARBEA ;Farbe ein LD A,(COLOR) CALL CLLN CALL FARBEA ;Farbe aus ESC3: POP DE RET ; FARBEA: LD A,(IX+1) ;Farbebene ein/aus XOR 2 DI LD (IX+1),A OUT (D08A),A EI RET ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ABEEP: LD BC,0A0FH ;langer Beeps LD HL,30H ;fuer ERROR PUSH DE LD E,H CALL TONB LD A,30 CALL WAIT ;Warteschleife LD A,3 OUT (CTC0),A LD A,16 ;fuer mehrere BEEPS hintereinander POP DE JP WAIT ;Warteschleife ; ABEEP1: LD HL,30H ;Tastaturclick /BC=307H PUSH DE LD E,H CALL TONB POP DE RET ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ESCC8: LD HL,COLOR LD A,M CALL COMPL LDHLA: LD M,A ;CAOS-UP 28H RET ; LDAHL: LD A,M ;CAOS-UP 29H RET ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AKBEEP: LD A,(IX+8) XOR 20H LD (IX+8),A RET: RET ; LVL3: LD HL,STBT SET 4,M RET ; ;*************************************************************** ;CRT-Routine ;PE: A= ASCII ;VR= / ; CRT: PUSH HL ;CAOS-UP 00H PUSH DE PUSH BC PUSH AF CALL CRT1 LD (CRSR),DE POP AF POP BC POP DE POP HL RET ; ;*************************************************************** ;Keyboard-Interrupt-Routine ;Zeitkonstanten: ; TCTZK EQU 143 TGE0 EQU 101 TGE1 EQU 66 FEHLER EQU 120 ; ;*************************************************************** ; ;Z E I T I N T E R R U P T ; ;Taste losgelassen ; ITAKT: EI ;CTC - Interrupt PUSH AF LD A,23H OUT (CTC3),A LD (IX+13),0 JR ITEND ; ;*************************************************************** ; ;T A S T A T U R I N T E R R U P T ; ;Taste gedr}ckt ; ITAST: PUSH AF ;PIO-Interrupt IN A,(CTC3) ;CTC-Stand abfragen PUSH AF LD A,0A7H OUT (CTC3),A ;CTC bei naechstem Wort neu starten LD A,TCTZK OUT (CTC3),A ;CTC neu starten POP AF EI ; OR A ;neue Bet{tigung? (Zeitinterrupt ausgeloest) JR Z,ITEND ; CP 20D JR C,ITEND ; CP FEHLER ;>=78H ? ja-->Fehler erkannt JR NC,ITEND CP TGE0 JR NC,ITA ;>=65H ? ja-->Null erkannt ADD A,-TGE1 JR C ,ITA ;>42H? ja-->Eins erkannt, ;sonst Wortabstand erkannt ;Taste fertig, d.h. 7 bit sind uebernommen LD A,(IX+12) ;Wortregister RRA ;Ermittlung der Stelle in der Tastaturcodetabelle XOR 1 CP 61D ;IBRK JR Z,IBRK PUSH HL PUSH DE LD L,(IX+14) LD H,(IX+15) LD D,0 LD E,A ADD HL,DE ; LD A,M ;A = Tastencode (ASCII) POP DE POP HL BIT 7,(IX+8) ;Shiftlock ? ja-->IT2 JR NZ,IT2 CP 40H ;nur ASCII's von 40H bis 80H dauerumgeschaltet JR C,IT2 CP 80H JR NC,IT2 XOR 20H ;klein in grosz oder grosz in klein IT2: CP (IX+13) ;Vergleich mit letztem eingegebenen Zeichen JR NZ,IT11 ;gleich? nein-->IT11 PUSH AF LD A,(COUNT) CP (IX+10) ;Zeit bis zum 1. Repeat JR C,IT3 ;Autorepeat on POP AF INC (IX+10) JR ITEND ;Taste okey ; ITA: RR (IX+12) ;Bit einschieben ITEND: IN A,(P1BD) OUT (P1BD),A POP AF RETI IBRK: CALL EIRETI JP ST3 ; IT3: POP AF JR IT12 ; IT11: LD (IX+10),0 ;Autorepeatzaehler neu starten CP SHLK JR Z,IT20 ; IT12: LD (IX+13),A ;ASCII-Code SET 0,(IX+8) JR ITEND ; IT20: LD A,(IX+8) ;bei Autorepeat Bit7 (rueck)setzen (Shiftlock) XOR 80H LD (IX+8),A LD A,SHLK JR IT12 ; ;*************************************************************** ; ;Keyboard-Routine ohne Quittung der Taste ;PA: A= Code ; CY= gedr}ckt ;VR: AF ; KBDS: OR A ;CY=0/ CAOS-UP 0CH BIT 0,(IX+8) ;liegt gueltiges Wort an?nein -->RET RET Z LD A,(IX+13) ;A=ASCII SCF RET ; ;Keyboard-Routine mit Quittung der Taste ;PA: A= Code ; CY= gedr}ckt ;VR: AF ; KBD: CALL KBDS ;CAOS-UP 0EH RET NC RES 0,(IX+8) ;Quittung der Taste RET ; ;*************************************************************** ; Test, ob BRK-Taste gedrueckt ;PA: Z= 1 wenn gedr. ; BRKT: CALL KBDS ;ohne Tastenqu./ CAOS-UP 2AH RET NC CP BRK SCF RET Z AND A RET ; ;*************************************************************** ;Schalten von Modulen bzw. interner Speicher ; ;PE: ARGN=1: Lesen Modulschacht ; ARGN=2: Ausgabe des Steuerworts ; DEFW HEAD DEFM 'SWITCH' DEFB 1 LD D,E CALL MODUL LD A,L ;Anzeige Schacht CALL AHSP LD A,H ; "" Typ CALL AHSP LD A,D ; "" Steuerw. AHCR: CALL AHEX JP CRLF ; ;*************************************************************** ;Modul schalten ;PE: L= Schacht ; D= Steuerwort ; A= read/write ;PA: H= Type ; L= Schacht ; D= Steuerwort ; MODUL: LD H,0B8H ;CAOS-UP 26H LD C,80H LD B,L CP 2 JR NC,MODUL1 LD D,M ;Lesen LD E,D ;Umladen MODUL0: IN H,(C) RET ; MODUL1: LD M,D LD A,L CP 5 JR C,MODUL3 OUT (C),D ;echtes Modul JR MODUL0 ; MODUL10: AND 0F5H ;RAM 0 BIT 0,D JR Z,MODUL8 SET 1,A BIT 1,D JR Z,MODUL8 SET 3,A JR MODUL8 ; MODUL3: CP 4 ;RAM 4 Segment JR C,MODUL5 LD A,(IX+4) AND 0FCH BIT 0,D JR Z,MODUL2 SET 0,A BIT 1,D JR Z,MODUL2 SET 1,A MODUL2: LD (IX+4),A OUT (D09A),A JR MODEND ; MODUL5: CP 3 ;RAM-FLOPPY JR C,MODUL7 IN A,(P1BD) AND 9FH BIT 0,D JR Z,MODUL6 SET 5,A BIT 1,D JR Z,MODUL6 SET 6,A MODUL6: OUT (P1BD),A LD A,(IX+1) OR 10H BIT 2,D JR NZ,MODUL11 XOR 10H MODUL11: OUT (D08A),A LD (IX+1),A JR MODEND ; MODUL7: CP 2 ;ROM-FLOPPY JR C,MODUL9 IN A,(P1AD) BIT 0,D RES 7,A JR Z,MODUL8 SET 7,A MODUL8: OUT (P1AD),A MODEND: LD H,0FFH RET ; MODUL9: CP 1 ;IRM IN A,(P1AD) JP C,MODUL10 BIT 0,D RES 2,A JR Z,MODUL8 SET 2,A JR MODUL8 ; ;*************************************************************** ; ;Jump in ein Modul auf Adresse 0F012h ;mit Abschaltung des internen Systems ; DEFW HEAD DEFM 'JUMP' DEFB 1 LD A,L JUMP: LD B,A ;A=Schacht/ CAOS-UP 27H LD C,80H IN A,(C) INC A ;Test, ob Modul ;vorhanden JP Z,ERRM LD A,0FFH ;auf C LD H,0B8H LD L,B LD M,A DI OUT (C),A IN A,(P1AD) AND 7EH ;Abschalten des ;internen ROM JP NCAOS ;Sprung }ber IRM ; ;*************************************************************** ; ; K A S S E T T E N E I N / A U S G A B E ; ;*************************************************************** ; ;Zeitkonstanten f}r Schreiben: ; ZKKAT EQU 93 ;Trennzeichen ZKKA0 EQU 23 ; "0" ZKKA1 EQU 47 ; "1" ; ;*************************************************************** ; Initialisierung vor I/O ; INITI: DI IN A,(P1AD) OR 40H ;Motorschaltspannung ein AND 0DFH ;LED off INIT: OUT (P1AD),A EI LD HL,(WEND) ;PAGE oder SCROLL merken LD (RWEND),HL CALL NNOM LD (NOMC),HL CALL APAGE ; CTCSTOP: LD A,3 ;CTC-Stop OUT (CTC0),A OUT (CTC1),A RES 1,(IX+8) ;Ton aus JR TON9 ; CSRLX: LD (IX+2),0FEH ;CAOS-UP 09H CALL SRLX ; ;*************************************************************** ; Initialisierung nach I/O ; RINIT: LD HL,(NOMC) LD (OUTAB),HL LD HL,(RWEND) LD (WEND),HL ;Puffer loeschen LD HL,IOPUF+80H XOR A RINIT1: DEC L LD M,A JR NZ,RINIT1 ; IN A,(P1AD) AND 09FH ;Motorspannung und LED aus OUT (P1AD),A CALL CRLF RES 0,(IX+8) TON9: BIT 3,(IX+1) JR Z,TON10 IN A,(P1BD) ;Init nach Ton- SET 7,A ;ausgabe OUT (P1BD),A ;Blink on TON10: BIT 1,(IX+8) JR NZ,TON10 LD A,47H OUT (CTC2),A LD A,BLZK ;Blinkfrequenz OUT (CTC2),A RET ; ;*************************************************************** ; ;P R O G R A M M E Z U R A U S G A B E ; ISRLX: DI ;CAOS-UP 08H IN A,(P1AD) OR 60H ;Motorspannung und LED ein CALL INIT LD (IX+2),0;Block 1 LD BC,1000H;langer Vorton ; ; SRLX: INC (IX+2) ;erh|hen Block/ CAOS-UP 01H DI LD A,87H OUT (CTC1),A ;INIT CTC LD A,ZKKA1 ;Vorton 1 OUT (CTC1),A EI 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 A,M LD C,A ;Bilden Pr}fsum. INC HL DJNZ KARA2 ; CALL KAUBT ;Ausgabe Pr}fsum LD A,D CALL DYNST ;Endimpuls LD E,L LD D,H LD A,3 OUT (CTC1),A ;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 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 ;CAOS-UP 0AH ; SRLIN: LD A,83H ;CAOS-UP 05H OUT (P1AC),A ;Int Freig. PIO (Kassette) PUSH HL PUSH DE MA1: LD B,22 LD (IX+13),0 MA2: CALL LSTOP ;Lesen einer ;Vollschwingung JR C,MA1 ;kein Einsbit ? CP IKEG1 ;Einsbit ? CALL LED2 ;LED on/off 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 B,80H ; 128 Byte LD L,(IX+5) LD H,(IX+6) MA4: CALL IBYTE ;Lesen 128 Da- ;tenbytes JR C,LED ; Fehler ? LD M,A LD A,(IX+13) ADD A,M LD (IX+13),A; Pr}fsumme INC HL DJNZ MA4 CALL IBYTE ; -""- lesen JR C,LED ; Fehler ? SUB (IX+13) ; Vgl. Pr}fsumme ADD A,0FFH ;Pr}fsumme false ;=> CY=1 LED: POP DE ;Register holen POP HL DI LD A,3 ;PIO-Stop-INT (Kassette) OUT (P1AC),A EI LED2: IN A,(P1AD) SET 5,A JR NC,LED1 RES 5,A LED1: OUT (P1AD),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: IN A,(P1AD) OUT (P1AD),A LD A,(IX) OR A JR Z,LS0 ;Warten bis CTC- ;stand eingeles. LD C,A ; C=1.Halbschw. LD (IX),0 LS1: IN A,(P1AD) OUT (P1AD),A LD A,(IX) OR A JR Z,LS1 ; Warten auf 2. ; Halbschw. ADD A,C ; Summe bilden RET ; ;*************************************************************** ;Eingabe eines Bytes ; IBYTE: LD DE,800H IB1: CALL LSTOP ;Bit Eijgabe JR C,IB2 ;Nullbit ? CP IKEG1 ; Einsbit RET C ;Trennzeichen IB2: CCF RR E ;einschieban DEC D JR NZ,IB1 CALL LSTOP LD A,E ;Byte in A RET ; ;*************************************************************** ;*************************************************************** ; B A S I C - E R W E I T E R U N G E N ;*************************************************************** ;*************************************************************** ;ADRESSEN UND DATEN AUS BASIC KERN /frueher. RE-TEIL ; BASIC EQU 0C00DH REBASIC EQU 0C08CH LDTOK EQU 0D0H SGTOK EQU 0B6H GBTOK EQU 08CH RTTOK EQU 08BH ELTOK EQU 0D4H TNTOK EQU 0A9H GTTOK EQU 088H DISTA EQU 354H PSBEG EQU 35FH ANF EQU 34EH NANF EQU 352H SVARP EQU 3D7H ENDEW EQU 350H STRDA EQU 3C0H PRFLG EQU 3FDH COLRE EQU 37EH RNDV EQU 31DH ININD EQU 309H IOCHL EQU 307H INTPR EQU 3EAH SNL14 EQU 0CDE1H SNL16 EQU 0CDF3H ARGV1 EQU 0D421H ARGV2 EQU 0D424H SLEN3 EQU 0D1A9H SNER1 EQU 0C348H FCER EQU 0C967H CPREG EQU 0C689H CPCOM EQU 0C8D6H DCHEX EQU 0C986H DCHE1 EQU 0C987H ZPOIT EQU 0C4BBH ZPOI1 EQU 0C4BEH TMEM1 EQU 0C327H LIN6 EQU 0C450H LIN10 EQU 0C48AH LIN11 EQU 0C493H LIN13 EQU 0C442H LIN15 EQU 0C44DH SGN1 EQU 0D6AEH NUMKO EQU 0D834H TCHAR EQU 0C8BDH TCHA1 EQU 0C8BEH SNALY EQU 0CD3AH SNAL6 EQU 0CD36H LEN1 EQU 0D330H CPRGT EQU 0C8DBH POS1 EQU 0D0C0H CPSTX EQU 0C8CCH SADB1 EQU 0D17EH STADB EQU 0D17BH STROP EQU 0D1E1H STRV1 EQU 0D2F2H STRS3 EQU 0D302H ERROO EQU 0C356H CSTS EQU 0DDF3H CI EQU 0DDE4H CO EQU 0DDD5H EPRV4 EQU 0C96CH EPRV3 EQU 0C96FH INP1 EQU 0D3E9H PRT2 EQU 0CB03H OTCHL EQU 0DE25H TESTC EQU 0DDC8H CASS1 EQU 0DCB2H INCHL EQU 0DE5FH ZFSTR EQU 0C8B7H ;ADRESSEN UND DATEN AUS CAOS RCOLO EQU 0B7A3H WIN9 EQU 0BA00H-10 VERTB EQU 0E00EH ; ; ERWEITERUNG 1 ;*************************************************************** ;* E: :TOKEN-LDTOK ;* : AUF TOKEN ;* A: <>: STARTADRESSE ROUTINE ;* : AUF TOKEN ;*************************************************************** ; ERW1: LD A,B SUB RETOK-LDTOK JR C,ERR1 CP CRTOK-RETOK+1 JR NC,ERR1 RLCA LD C,A LD B,0 EX DE,HL LD HL,ADRT1 JP ZFSTR ; ; ERWEITERUNG 2 ;*************************************************************** ;* E: AUF SIGNIF. ZEICHEN NACH PRTOK ;* WENN PRTFLG<>0 , DANN JP SNER ;* A: AUF ZEILENENDE ;*************************************************************** ERW2: LD A,M CP INTOK ;ZULAESSIG? RET C CP COTOK+1 ;PRINT-ERWEITERUNGEN ;VON PRINTINK BIS PRINT COLOR RET NC ; KEINS FUER PRINT ;-------------------------------------------------------------- CP ATTOK JP Z,AT ;START PRINTAT ;-------------------------------------------------------------- ;* * * * * * * * * * * * * * * * * * * * * * * * LD A,(PRFLG) ;DOPPAHPES AUFTRETEN ABBHOCKEN AND A JR NZ,ERR1 INC A LD (PRFLG),A ;--------------------------------------------------------------- ERW21: PUSH HL LD HL,RCOLO CALL VSAM POP HL LD (COLRE),A ;FARBE RETTEN ;-- -- -- -- -- -- -- -- -- -- -- -- LD A,M CP INTOK JR Z,INPRT CP COTOK JP Z,PRTCL ;PRINT COLOR ;-- -- -- -- -- -- -- -- -- -- -- -- CALL TCHAR CALL PAPER PAP1: LD A,M CP ';' ;PAPER n ; JR Z,CLRG1 JR ERR1 PRTCL: CALL TCHAR CALL COLORP JR PAP1 ERR1: JP SNER1 ;- - - - - - - - - - - - - - - - - - - - - - - INPRT: CALL TCHAR CALL INK LD A,M CP ';' JR Z,CLRG1 ;INKn CALL CPSTX DEFM ',' CP PPTOK JR NZ,ERR1 CALL TCHAR ;INK n,PAPER n; CALL PAPER CALL CPSTX DEFM ';' ;================================================== CLREG: CALL PRT2 ;PRINT2 LD A,(COLRE) PUSH HL LD HL,RCOLO CALL VSMA POP HL ;--------------------------------------------------- POP BC RET AT3: PUSH BC JR ERW21 ;--------------------------------------------------------------- CLRG1: CALL TCHAR JR CLREG ;**************************************************** ; ERWEITERUNG 3 ;*************************************************************** ;* VERTEILER ZU ZUSAETZLICHEN STANDARTFUNKTIONEN ;* E: AUF SIGN. ZEICHEN NACH TOKEN ;* =<> (TOKEN-SGTOK)*2 ;* A: AUF SIGN. ZEICHEN NACH TOKEN ;************************************************************** ERW3: LD A,C ;ZULAESSIG? CP VETOK+VETOK-SGTOK-SGTOK JP Z,VPEEK CP PTTOK+PTTOK-SGTOK-SGTOK JP Z,PTEST CP CITOK+CITOK-SGTOK-SGTOK JP Z,CSRLN CP VGTOK-SGTOK+VGTOK-SGTOK JP Z,VGET SUB IKTOK-SGTOK+IKTOK-SGTOK JR C,ERR1 CP ISTOK-IKTOK+ISTOK-IKTOK+1 JR NC,ERR1 ;NEIN ;--$----------------------------------------------------------- EX DE,HL LD BC,ADRT2 POP HL LD L,A ADD HL,BC LD C,M INC HL LD H,M LD L,C PUSH HL EX DE,HL RET ;ABSPRUNG ZUR ROUTINE STRIG: CALL CPSTX ;'('? DEFM '(' CALL ARGV1 ;PARAMETER 1 PUSH AF ;WERT RETTEN CALL CPCOM ;KOMMA? CALL SNALY ;PARAMETER 2 (STRING) CALL CPRGT ;')'? POP AF PUSH HL ;ZEILENZEIGER PUSH AF CALL LEN1 ;LAENGE UND ADRESSE PARAM.2 INC HL ;IN A UND HL INC HL LD E,(HL) INC HL LD D,(HL) POP BC ;PARAM.1 (WIEDERHOLFAKTOR) PUSH BC PUSH AF PUSH DE LD C,A ;LAENGE NEUER STRING BERECHNEN XOR A CP C JR Z,STR1 CP B JR Z,STR1 LD A,C DEC B JR Z,STR1 STR2: ADD A,C JR C,STRER DJNZ STR2 STR1: LD B,A ;LAENGE IN A UND BC LD C,0 PUSH BC CALL STROP ;PLATZ IN STRINGPOOL RESERVIEREN ;ADR.NEUER STRING IN DE POP BC ;LAENGE NEUER STRING IN BC POP BC ;ADR.ALTER STRING HOLEN PUSH BC CALL SADB1 ;EINTRAGEN IN STRDAT. POP HL EX (SP),HL ;ALTE LAENGE IN H LD A,H POP HL EX (SP),HL LD L,A INC H STR4: DEC H ;STRING EINTRAGEN PUSH HL PUSH BC JR Z,STR3 CALL STRV1 POP BC POP HL JR STR4 STR3: POP BC POP HL POP DE ;FERTIG ABSCHLUSS CALL STRS3 JP SLEN3 STRER: LD E,28 JP ERROO RENUM: PUSH HL LD HL,10 LD (DISTA),HL LD HL,(PSBEG) PUSH AF PUSH HL INC HL INC HL LD A,(HL) INC HL LD H,(HL) LD L,A LD (ANF),HL ;ANF=ERSTE ZEILE LD (NANF),HL ;NANF=ANF LD DE,(SVARP) ;DE=PROGR.ENDE DEC DE DEC DE RNUM1: POP HL ;HL=ZEILENADR. PUSH HL ;IN STACK LD A,(HL) INC HL LD H,(HL) LD L,A ;HL=NAECHSTE ZADR. CALL CPREG EX (SP),HL ;HL=ZEILENADR. ;STACK=NAECHSTE JR NZ,RNUM1 POP DE INC HL INC HL LD A,(HL) INC HL LD H,(HL) LD L,A LD (ENDEW),HL ;END=LETZTE ZEILE LD B,4 ;MAX 4 PARAMETER POP AF LD HL,ANF EX (SP),HL RNUM2: JR Z,RNUM5 ;KEIN PARAM.MEHR CALL DCHEX ;WERT IN DE PUSH AF LD A,D OR E RNUM3: JP Z,FCER ;PARAM.=0 POP AF EX (SP),HL LD (HL),E INC HL LD (HL),D INC HL ;PARAM.EINGETR. JR Z,RNUM5 ;KEIN PARAM.MEHR PUSH AF DEC B JR Z,RNUM4 ;ALLE PARAM. POP AF EX (SP),HL CALL CPCOM ;TEST AUF "," JR RNUM2 RNUM4: POP AF JP NZ,SNER ;KEIN ZEILENENDE RNUM5: LD HL,(ENDEW) LD DE,(ANF) CALL CPREG ;END-ANF? RNU5A: JP C,FCER LD HL,(PSBEG) RNUM6: CALL ZPOI1 ;SUCHE ADR*RON ANF. JR C,RNUM7 ;ZEILE GEFUNDEN JR Z,RNUM3 ;PROGR.ENDE JR RNUM6 RNUM7: POP HL PUSH BC ;ADR.VON ANF. LD DE,(ENDEW) ;END IN DE LD HL,0 LD (ENDEW),HL ;ZEILENZAELER RNUM8: LD H,B LD L,C LD C,(HL) INC HL LD B,(HL) LD A,B OR C JR Z,RNUM3 ;PROGR.ENDE INC HL LD A,(HL) INC HL LD H,(HL) LD L,A CALL CPREG LD HL,(ENDEW) INC HL LD (ENDEW),HL JR NZ,RNUM8 INC HL INC HL ADD HL,HL INC HL ;TABL=2*ZEILEN-ANZAHL+5 LD DE,(SVARP) ;PROGR.ENDE ADD HL,DE JR C,RNU5A ;TAB.ZU LANG CALL TMEM1 LD (SVARP),HL ;NEUES PROGR.ENDE XOR A DEC HL LD (HL),A DEC HL LD (HL),A DEC DE DEC DE EX DE,HL LD (HL),E INC HL LD (HL),D INC HL DEC A LD (HL),A ;TAB.HAT ZEILENNUMMER 65535 INC HL LD (HL),A INC HL EX DE,HL ;DE=TABANF.ADR LD HL,(NANF) ;HL=NANF LD (ANF),HL ;NEUE ZEILENNR. RNUM9: POP HL LD C,(HL) INC HL LD B,(HL) INC HL PUSH BC LD BC,ANF LD A,(HL) LD (DE),A LD A,(BC) LD (HL),A INC HL INC DE INC BC LD A,(HL) LD (DE),A LD A,(BC) LD (HL),A ;NEUE ZEILENNR.IN PROGRAMM ;ALTE ZEILENNR.IN TAB. INC DE LD HL,(ANF) LD BC,(DISTA) ADD HL,BC LD (ANF),HL ;NEUE ZEILENNR. LD HL,(ENDEW) DEC HL LD A,H OR L LD (ENDEW),HL JR NZ,RNUM9 LD (DE),A POP HL LD HL,(PSBEG) PUSH HL RNU10: POP HL LD C,(HL) INC HL LD B,M INC HL PUSH BC LD A,(HL) INC HL AND (HL) INC A JR Z,RNU13 RNU11: INC HL RNU12: LD A,(HL) OR A JR Z,RNU10 CP GTTOK JR Z,RNU24 CP GBTOK JR Z,RNU24 CP RTTOK JR Z,RNU1A CP ELTOK JR Z,RNU1A CP TNTOK JR NZ,RNU11 RNU1A: CALL DCHE1 LD A,E OR D call nz, RNU14 ;VERGLEICH MIT TABELLE call nz, RNU18 ;ZAHL AENDERN JR RNU12 RNU13: DEC HL LD (SVARP),HL DEC HL LD (HL),A DEC HL LD (HL),A POP HL POP HL JP LIN10 RNU24: CALL DCHE1 LD A,E OR D JR Z,RNU12 CALL RNU14 CALL NZ,RNU18 LD A,(HL) CP ',' JR NZ,RNU12 ;ANWEISUNGSENDE JR RNU24 RNU14: PUSH HL PUSH DE LD DE,65535 CALL ZPOIT ;TAB SUCHEN POP DE ;DE=ALTE JR* INC BC INC BC INC BC INC BC LD H,B LD L,C ;HL=TAB.ZEIGER LD BC,(NANF) ;BC=NEUE NR. RNU15: LD A,(HL) INC HL PUSH HL OR (HL) JR Z,RNU17 ;TAB.ENDE LD A,(HL) DEC HL LD L,(HL) LD H,A CALL CPREG JR Z,RNU16 ;ZAHL GEFUNDEN LD HL,(DISTA) ADD HL,BC LD B,H LD C,L POP HL INC HL JR RNU15 RNU16: LD A,0FFH OR A RNU17: POP HL POP HL RET RNU18: PUSH BC ;NEUE NR. EX DE,HL LD HL,(SVARP) SBC HL,DE PUSH HL ;PROGR.LAENGE RNU19: POP BC LD H,D LD L,E DEC DE LD A,(DE) CP ',' JR Z,RNU20 ;VORHER.ZAHL CP 03AH JR NC,RNU20 ;ZAHL STREICHEN PUSH BC PUSH DE LDIR POP DE JR RNU19 RNU20: EX DE,HL POP DE PUSH HL PUSH BC XOR A LD B,98H CALL SGN1 CALL NUMKO POP BC POP DE RNU21: INC HL INC DE RNU22: LD A,(HL) OR A JR Z,RNU23 PUSH BC PUSH HL EX DE,HL ADD HL,BC LD D,H LD E,L DEC HL LDDR POP HL LDI POP BC JR RNU22 RNU23: PUSH DE LD DE,(PSBEG) CALL LIN11 RNU26: INC HL LD A,(HL) INC HL OR (HL) JR NZ,RNU26 EX DE,HL LD (HL),E INC HL LD (HL),D INC DE INC DE LD (SVARP),DE POP HL LD D,H LD E,L RNU25: LD A,(HL) OR A INC HL JR NZ,RNU25 POP BC EX (SP),HL PUSH BC EX DE,HL RET ;******************************************** DELET: RET Z CALL DCHEX JP Z,LIN13 CALL CPCOM PUSH DE CALL DCHEX POP HL RET NZ EX DE,HL PUSH HL CALL ZPOIT JP NC,LIN15 POP DE PUSH AF PUSH BC CALL ZPOI1 JP NC,LIN15 POP BC JP LIN6 ;************************************************************** PAUSE: CALL TCHA1 ;PARAM.VORH. JR NZ,PAUS0 ;PARAMETER VORH. PAUS1: CALL KBDS ;OHNE PARAMETER JR NC,PAUS1 CP 03H ;BREAK? RET Z CP 0AH ;CURSOR DOWN JR NZ,PAUS1 JP CI ;TASTATUREINGABE PAUS0: CALL ARGV1 ;1.PARAMETER LD C,A PAUS3: LD A,16 LD E,14H CALL SCVSP ;SYSTEMSCHNITTSTELLE PUSH BC CALL KBDS ;STATUSABFRAGE POP BC JR NC,PAUS2 CP 03H ;BREAK? RET Z CP 0AH ;CURSOR DOWN JR NZ,PAUS2 JP CI ;TASTATURABFRAGE PAUS2: DEC C JR NZ,PAUS3 RET ;************************************************************ BEEPP: LD B,1 ; CALL TCHA1 ;PARAMETER VORH.? JR Z,BEE1 CALL ARGV1 ;PARAMETER ERF. LD B,A BEE1: LD A,7 LD E,0 BEE2: CALL SCVSP ;SYSTEMSCHNITTSTELLE DJNZ BEE1 RET WINDO: CALL TCHA1 ;PARAMETER VORHANDEN JR Z,WIND2 ;KEIN PARAMETER PUSH HL CALL ARGV1 ;1.PARAMETER EX (SP),HL LD HL,WIN9 CALL VSMA ;M IN A LADEN INC HL EX (SP),HL CALL CPCOM ;?KOMMA CALL ARGV1 ;2.PARAMETER EX (SP),HL CALL VSMA INC HL EX (SP),HL CALL CPCOM ;?KOMMA CALL ARGV1 ;3.PARAMETER EX (SP),HL CALL VSMA EX (SP),HL CALL CPCOM ;?KOMMA CALL ARGV1 ;4.PARAMETER EX (SP),HL LD D,A CALL BWSON ;BWS ANSCHALTEN CP 40 JR NC,ER5 LD A,(WIN9+2) LD E,A CP 40 ;ANZ.SPALTEN>40? JR NC,ER5 LD A,D SUB E JR C,ER5 INC A LD (WINLG),A LD A,E LD (WINAN),A LD A,(WIN9+1) CP 32 ;ANZAHL ZEILEN>32? JR NC,ER5 LD D,A LD A,(WIN9) CP 32 JR NC,ER5 LD E,A LD A,D SUB E JR C,ER5 INC A LD (WINLG+1),A LD A,E LD (WINAN+1),A JR WIND3 WIND2: PUSH HL ;STANDARDFENSTER CALL BWSON LD HL,100H LD (WINAN),HL LD HL,1E28H LD (WINLG),HL WIND3: LD HL,0 ;CURSOR LOESCHEN LD (CRSR),HL CALL BWSOF ;BWS ABSCHALTEN POP HL RET ER5: CALL BWSOF JR SNER ;************************************************************** BLOAD: PUSH HL LD HL,ARGN XOR A CALL VSMA ; POP HL LD E,10H JP SCVSP ;SYSTEMSCHNITTSTELLE ;*************************************************************** VPEEK: CALL SNL14 ;PARAMETER ERF. EX (SP),HL LD DE,SNL16 PUSH DE CALL EPRV3 ;PARAMETER RF. PUSH HL LD HL,8000H ADD HL,DE JR C,VP1 LD A,0BFH CP H VP1: JR C,SNER ;FEHLERROUTINE CALL VSAM POP HL JP INP1 ;*************************************************************** SNER: JP SNER1 ;FEHLERROUTINE KERN VPOKE: CALL EPRV4 ;PARAMETER ERF. PUSH DE CALL CPCOM ;KOMMA? CALL ARGV1 ;PARAMETER ERF. EX (SP),HL LD DE,8000H ADD HL,DE JR C,VP1 LD D,A LD A,0BFH CP H JR C,VP1 LD A,D CALL VSMA POP HL RET ;******************************** BORD: CALL ARGV1 ;PARAMETER ERF. RRCA RRCA RRCA AND 60H LD C,A LD B,9FH JP TON6 ;******************************************************** AT: LD A,(PRFLG) BIT 1,A SET 1,A ;PRINTFLAG SETZEN LD (PRFLG),A JR NZ,SNER ;FEHLER PUSH DE PUSH HL CALL BWSON LD HL,WINAN LD (WIN9),HL LD DE,WIN9-10 LD BC,6 LDIR LD HL,0 LD (WINAN),HL LD HL,2028H LD (WINLG),HL ;STANDARDFENSTER EINSTELLEN CALL BWSOF POP HL CALL LOKA1 ;CURSOR POSITIONIEREN CALL CPRGT ;'('? CALL CPSTX DEFM ';' LD A,M CP INTOK JR C,AT1 CP COTOK+1 JR NC,AT1 CALL AT3 AT2: PUSH HL CALL BWSON LD HL,WIN9-10 LD DE,WINAN ;FENSTER EINST. LD BC,6 LDIR CALL BWSOF POP HL POP DE POP BC RET AT1: CALL PRT2 ;BILDSCHIRMAUSGABE JR AT2 ;************************************************************ SNER2: JP SNER1 ;FEHLERROUTINE INK: CALL ARGV1 ;PARAMETER ERF. CP 32 JR NC,SNER2 ;PARAM.<32? SLA A SLA A SLA A LD D,A PUSH HL LD HL,RCOLO ;FARBBYTE LADEN CALL VSAM POP HL AND 07H JR PIP1 PAPER: CALL ARGV1 ;PARAMETER ERF. CP 8 JR NC,SNER2 ;PARAM.<8 ? LD D,A PUSH HL LD HL,RCOLO ;FARBBYTE LADEN CALL VSAM POP HL AND 0F8H PIP1: OR D PUSH HL LD HL,RCOLO CALL VSMA POP HL PIP2: RET COLORP: CALL TCHA1 ;PARAMETER VORH. ? JR Z,SNER2 CALL INK CALL TCHA1 ;1.PARAMETER RET Z CALL CPCOM ;KOMMA ? JR PAPER RET ;************************************************************ LOKA1: CALL TCHAR ;PARAMETER VORH. CALL CPSTX DEFM '(' LOKAT: CALL ARGV1 ;1.PARAMETER LD D,A PUSH HL LD HL,WINLG+1 CALL VSAM POP HL DEC A CP D JR C,SNER2 CALL CPCOM ;KOMMA ? PUSH DE CALL ARGV1 ;2.PARAMETER POP DE LD C,A PUSH HL LD HL,WINLG CALL VSAM POP HL DEC A CP C JR C,SNER2 LD A,C PUSH HL LD HL,CRSR ;CURSOR POSITIONIEREN CALL VSMA LD A,D INC HL LOK1: CALL VSMA POP HL RET ;************************************************************* INKEY: PUSH HL ;ZEILENZEIGER RETTEJ CALL KBDS ;AINGABE? JR NC,INKE1 LD A,1 CALL STADB ;VARIABLE BELEGEN CALL CI INKE3: LD HL,(STRDA+2) ;WERT EINTRAGEN LD (HL),A INKE2: JP SLEN3 INKE1: XOR A CALL STADB ;STRING MIT LAENGE 0 JR INKE2 ;================***********************====================== SOUND: CALL ARGV1 ;1.PARAMETER PUSH HL LD HL,ARG1 ;HL-->VRAM LD B,4 SND2: CALL VSMA INC HL EX (SP),HL ;HL-->ZEILE DEC B JR Z,SND1 PUSH BC CALL CPCOM ;KOMMA ? CALL ARGV1 ;2.PARAMETER POP BC EX (SP),HL ;HL-->VRAM JR SND2 SND1: CALL TCHA1 ;HL-->ZEILE JR Z,SND3 CALL CPCOM ;KOMMA ? CALL ARGV1 ;3.PARAMETER EX (SP),HL ;HL-->VRAM CALL VSMA INC HL EX (SP),HL ;HL-->ZEILE CALL TCHA1 ;PARAM.VORH. JR Z,SND3 CALL CPCOM ;KOMMA ? CALL ARGV1 ;4.PARAMETER EX (SP),HL ;HL-->VRAM CALL VSMA EX (SP),HL ;HL-->ZEILE SND3: LD E,35H ;ZTON POP BC JP SCVSP ;************************************************************* PSET: LD B,1 PSET1: PUSH BC CALL EPRV4 ;1.PARAMETER PUSH HL LD A,E LD HL,HOR CALL VSMA LD A,D INC HL CALL VSMA EX (SP),HL CALL CPCOM ;KOMMA ?? CALL ARGV1 ;2.PARAMETER EX (SP),HL INC HL CALL VSMA POP HL CALL PFARB ;FARBBYTE LADEN PS1: LD E,30H POP BC DEC B JR Z,PS2 DEC E PS2: CALL SCVSP JP C,SNER RET PRES: LD B,0 JR PSET1 ; PFARB: CALL TCHA1 ;PARAM.VORH. RET Z CALL CPCOM ;KOMMA ? CALL ARGV1 ;PARAM.ERF. PUSH HL LD HL,HOR+3 RLA RLA RLA JP LOK1 ; INSTR: CALL SNAL6 ;PARAMETER1 CALL CPCOM PUSH HL CALL LEN1 ;STRING LAENGE JR Z,INST LD B,A INC HL INC HL LD E,(HL) INC HL LD D,(HL) POP HL PUSH DE PUSH BC CALL SNALY ;PARAMETER 2 CALL CPRGT POP BC POP DE PUSH HL PUSH DE PUSH BC CALL LEN1 JR Z,INST INC HL INC HL LD C,(HL) INC HL LD H,(HL) LD L,C POP BC LD C,A POP DE PUSH HL INST1: PUSH BC PUSH DE LD A,(DE) INST2: CP (HL) JR Z,INST3 INC HL DEC C JR NZ,INST2 INST4: XOR A POP HL POP HL POP HL INST5: LD DE,SNL16 PUSH DE JP POS1 INST: JP FCER ;FC ERROR INST3: INC HL PUSH HL DEC HL INST6: INC HL DEC C JR Z,INST7 INC DE DEC B JR Z,INST8 LD A,(DE) CP (HL) JR Z,INST6 POP HL POP DE POP BC DEC C JR INST1 INST7: INC DE DEC B POP HL JR NZ,INST4 JR INST9 INST8: POP HL INST9: POP DE POP DE POP DE AND A SBC HL,DE LD A,L JR INST5 ;************************************************************** VSMA: LD E,28H JR VS1 VSAM: LD E,29H JR VS1 ;************************************************ KEYA: CALL ARGV1 ;PARAM.ERF. AND A JR Z,SNER4 CP 13 ;PARAM.<13 ? JR NC,SNER4 LD E,39H VS1: JP SCVSP ;***************************************** KEYLI1: LD E,3AH JR VS1 ;***************************************** SWIT: CALL ARGV1 ;PARAMETER ERF. PUSH AF CALL CPCOM ;KOMMA CALL ARGV1 ;2.PARAMETER LD D,A POP AF PUSH HL LD L,A LD A,2 LD E,26H CALL SCVSP POP HL RET ;******************************************** PTEST: CALL SNL14 ;1.PARAM. EX (SP),HL LD DE,SNL16 PUSH DE CALL EPRV3 ;2.PARAMETER PUSH HL LD A,E LD HL,HOR CALL VSMA LD A,D INC HL CALL VSMA LD E,2FH CALL SCVSP LD B,0 JR Z,PT1 INC HL INC HL CALL VSMA LD E,30H CALL SCVSP LD B,1 PT1: LD A,B POP HL JP INP1 SNER4: JP SNER1 ;****************************************** CLOSE: LD C,0 LD A,M CP 'I' JR Z,CL11 INC C CP 'O' JR NZ,SNER4 CL11: PUSH BC INC HL LD A,M CP '#' SNER5: JR NZ,SNER4 INC HL CALL ARGV1 AND 3 POP BC RET Z PUSH HL RLA ADD A,C PUSH AF DEC A LD B,0 SCF CL3: RL B DEC A JR NZ,CL3 LD HL,IOCHL LD A,M XOR B LD M,A POP AF POP HL SET 6,A PUSH DE LD E,A LD D,3 CALL VERTB POP DE RET ;***************************************** RAND: LD A,R LD (RNDV),A RET ;***************************************** ; OPEN: LD A,M INC HL CP 'I' JR Z,IOPEN CP 'O' SNAR6: JR NZ,SNER5 OOPEN: CALL OTCHL CALL TESTC OPEN1: RET Z LD A,0D5H CALL CASS1 LD HL,INTPR XOR A CALL CO POP HL RET IOPEN: CALL INCHL LD A,(ININD) AND 3 RET Z LD A,0D5H CALL CASS1 LD HL,INTPR CALL CI POP HL RET ;************************************** LINE1: LD BC,43EH JR GRAPH CIRCL1: LD BC,33FH GRAPH: PUSH BC CALL EPRV4 POP BC PUSH BC PUSH HL LD HL,ARG1 GRA1: LD A,E CALL VSMA INC HL LD A,D CALL VSMA INC HL DEC B JR Z,GRA2 EX (SP),HL PUSH BC CALL CPCOM CALL EPRV4 POP BC EX (SP),HL JR GRA1 GRA2: POP HL CALL PFARB POP DE JP SCVSP ;************************************* CSRLN: CALL SNL14 EX (SP),HL LD DE,SNL16 PUSH DE CALL ARGV2 PUSH HL AND A LD A,0 JR NZ,CSRL12 LD HL,WINAN+1 CALL VSAM CSRL12: LD B,A LD HL,CRSR+1 CALL VSAM ADD A,B POP HL JP INP1 ;*************************************** VGET: EX (SP),HL LD A,1 CALL STADB CALL BWSON LD DE,(CRSR) CALL VADR LD A,M CALL BWSOF JP INKE3 ; ;*************************************************************** ;ESC-Funktionstabelle ; ESCTAB: DEFW ESCC0 ;Tabulatorsprung ESC'0' DEFW ESCC1 ;Bild 0 anzeigen + schreiben ESC'1' DEFW ESCC2 ;Bild 1 anzeigen + schreiben ESC'2' DEFW ESCC3 ;BILD 0 anzeigen ESC'3' DEFW ESCC4 ;Bild 1 anzeigen ESC'4' DEFW ESCC5 ;Modulanzeige ESC'5' DEFW ESCC6 ;Systemanzeige ESC'6' DEFW ESCC7 ;Cursor komplementieren ESC'7' DEFW ESCC8 ;Farbe invertieren ESC'8' DEFW ESCC9 ;Farbebene ein/aus ESC'9' DEFW ESCCA ;hohe Farbaufloesung ein/aus ESC'A' ; WILLI: ? ; DEFS 0EDFFH-$ ;--------------------------------------------------------------- ;Kennbyte Betriebssystemversions-Nr. DEFB 43H ;--------------------------------------------------------------- ; ;-ZEICHENBILDTABELLE 1 ;CODE 40-5FH - GROSSBUCHSTABEN ; 21-3FH - SONDERZEICHEN/ZIFFERN ; frueher. GB-Teil .XLIST ;*************************************************************** CAPITAL: DEFB 000H ;SPACE DEFB 000H DEFB 000H DEFB 000H DEFB 000H DEFB 000H DEFB 000H DEFB 000H ; DEFB 030H ;! DEFB 030H DEFB 030H DEFB 030H DEFB 030H DEFB 000H DEFB 030H DEFB 000H ; DEFB 077H ;" DEFB 033H DEFB 066H DEFB 000H DEFB 000H DEFB 000H DEFB 000H DEFB 000H ; DEFB 036H ;# DEFB 036H DEFB 0FEH DEFB 06CH DEFB 0FEH DEFB 0D8H DEFB 0D8H DEFB 000H ; DEFB 018H ;$ DEFB 03EH DEFB 06CH DEFB 03EH DEFB 01BH DEFB 01BH DEFB 07EH DEFB 018H ; DEFB 000H ;% DEFB 0C6H DEFB 0CCH DEFB 018H DEFB 030H DEFB 066H DEFB 0C6H DEFB 000H ; DEFB 038H ;& DEFB 06CH DEFB 038H DEFB 076H DEFB 0DCH DEFB 0CCH DEFB 076H DEFB 000H ; DEFB 01CH ;' DEFB 00CH DEFB 018H DEFB 000H DEFB 000H DEFB 000H DEFB 000H DEFB 000H ; DEFB 018H ;( DEFB 030H DEFB 060H DEFB 060H DEFB 060H DEFB 030H DEFB 018H DEFB 000H ; DEFB 060H ;) DEFB 030H DEFB 018H DEFB 018H DEFB 018H DEFB 030H DEFB 060H DEFB 000H ; DEFB 000H ;* DEFB 066H DEFB 03CH DEFB 0FFH DEFB 03CH DEFB 066H DEFB 000H DEFB 000H ; DEFB 000H ;+ DEFB 030H DEFB 030H DEFB 0FCH DEFB 030H DEFB 030H DEFB 000H DEFB 000H ; DEFB 000H ;, DEFB 000H DEFB 000H DEFB 000H DEFB 000H DEFB 01CH DEFB 00CH DEFB 018H ; DEFB 000H ;- DEFB 000H DEFB 000H DEFB 0FEH DEFB 000H DEFB 000H DEFB 000H DEFB 000H ; DEFB 000H ;. DEFB 000H DEFB 000H DEFB 000H DEFB 000H DEFB 030H DEFB 030H DEFB 000H ; DEFB 006H ;/ DEFB 00CH DEFB 018H DEFB 030H DEFB 060H DEFB 0C0H DEFB 080H DEFB 000H ; DEFB 07CH ;0 DEFB 0C6H DEFB 0CEH DEFB 0DEH DEFB 0F6H DEFB 0E6H DEFB 07CH DEFB 000H ; DEFB 030H ;1 DEFB 070H DEFB 030H DEFB 030H DEFB 030H DEFB 030H DEFB 0FCH DEFB 000H ; DEFB 078H ;2 DEFB 0CCH DEFB 00CH DEFB 038H DEFB 060H DEFB 0CCH DEFB 0FCH DEFB 000H ; DEFB 0FCH ;3 DEFB 018H DEFB 030H DEFB 078H DEFB 00CH DEFB 0CCH DEFB 078H DEFB 000H ; DEFB 01CH ;4 DEFB 03CH DEFB 06CH DEFB 0CCH DEFB 0FEH DEFB 00CH DEFB 01EH DEFB 000H ; DEFB 0FCH ;5 DEFB 0C0H DEFB 0F8H DEFB 00CH DEFB 00CH DEFB 0CCH DEFB 078H DEFB 000H ; DEFB 038H ;6 DEFB 060H DEFB 0C0H DEFB 0F8H DEFB 0CCH DEFB 0CCH DEFB 078H DEFB 000H ; DEFB 0FCH ;7 DEFB 0CCH DEFB 00CH DEFB 018H DEFB 030H DEFB 030H DEFB 030H DEFB 000H ; DEFB 078H ;8 DEFB 0CCH DEFB 0CCH DEFB 078H DEFB 0CCH DEFB 0CCH DEFB 078H DEFB 000H ; DEFB 078H ;9 DEFB 0CCH DEFB 0CCH DEFB 07CH DEFB 00CH DEFB 018H DEFB 070H DEFB 000H ; DEFB 000H ;: DEFB 000H DEFB 030H DEFB 030H DEFB 000H DEFB 030H DEFB 030H DEFB 000H ; DEFB 000H ;; DEFB 000H DEFB 030H DEFB 030H DEFB 000H DEFB 030H DEFB 030H DEFB 060H ; DEFB 018H ;< DEFB 030H DEFB 060H DEFB 0C0H DEFB 060H DEFB 030H DEFB 018H DEFB 000H ; DEFB 000H ;= DEFB 000H DEFB 0FCH DEFB 000H DEFB 0FCH DEFB 000H DEFB 000H DEFB 000H ; DEFB 060H ;> DEFB 030H DEFB 018H DEFB 00CH DEFB 018H DEFB 030H DEFB 060H DEFB 000H ; DEFB 078H ;? DEFB 0CCH DEFB 00CH DEFB 018H DEFB 030H DEFB 000H DEFB 030H DEFB 000H ; DEFB 07CH ;@ DEFB 0C6H DEFB 0DEH DEFB 0DEH DEFB 0DEH DEFB 0C0H DEFB 078H DEFB 000H ; DEFB 030H ;A DEFB 078H DEFB 0CCH DEFB 0CCH DEFB 0FCH DEFB 0CCH DEFB 0CCH DEFB 000H ; DEFB 0FCH ;B DEFB 066H DEFB 066H DEFB 07CH DEFB 066H DEFB 066H DEFB 0FCH DEFB 000H ; DEFB 03CH ;C DEFB 066H DEFB 0C0H DEFB 0C0H DEFB 0C0H DEFB 066H DEFB 03CH DEFB 000H ; DEFB 0F8H ;D DEFB 06CH DEFB 066H DEFB 066H DEFB 066H DEFB 06CH DEFB 0F8H DEFB 000H ; DEFB 0FEH ;E DEFB 062H DEFB 068H DEFB 078H DEFB 068H DEFB 062H DEFB 0FEH DEFB 000H ; DEFB 0FEH ;F DEFB 062H DEFB 068H DEFB 078H DEFB 068H DEFB 060H DEFB 0F0H DEFB 000H ; DEFB 03CH ;G DEFB 066H DEFB 0C0H DEFB 0C0H DEFB 0CEH DEFB 066H DEFB 03CH DEFB 000H ; DEFB 0CCH ;H DEFB 0CCH DEFB 0CCH DEFB 0FCH DEFB 0CCH DEFB 0CCH DEFB 0CCH DEFB 000H ; DEFB 078H ;I DEFB 030H DEFB 030H DEFB 030H DEFB 030H DEFB 030H DEFB 078H DEFB 000H ; DEFB 01EH ;J DEFB 00CH DEFB 00CH DEFB 00CH DEFB 0CCH DEFB 0CCH DEFB 078H DEFB 000H ; DEFB 0E6H ;K DEFB 066H DEFB 06CH DEFB 070H DEFB 06CH DEFB 066H DEFB 0E6H DEFB 000H ; DEFB 0F0H ;L DEFB 060H DEFB 060H DEFB 060H DEFB 062H DEFB 066H DEFB 0FEH DEFB 000H ; DEFB 0C6H ;M DEFB 0EEH DEFB 0FEH DEFB 0D6H DEFB 0C6H DEFB 0C6H DEFB 0C6H DEFB 000H ; DEFB 0C6H ;N DEFB 0E6H DEFB 0F6H DEFB 0DEH DEFB 0CEH DEFB 0C6H DEFB 0C6H DEFB 000H ; DEFB 038H ;O DEFB 06CH DEFB 0C6H DEFB 0C6H DEFB 0C6H DEFB 06CH DEFB 038H DEFB 000H ; DEFB 0FCH ;P DEFB 066H DEFB 066H DEFB 07CH DEFB 060H DEFB 060H DEFB 0F0H DEFB 000H ; DEFB 078H ;Q DEFB 0CCH DEFB 0CCH DEFB 0CCH DEFB 0DCH DEFB 078H DEFB 01CH DEFB 000H ; DEFB 0FCH ;R DEFB 066H DEFB 066H DEFB 07CH DEFB 06CH DEFB 066H DEFB 0E6H DEFB 000H ; DEFB 07CH ;S DEFB 0C6H DEFB 0F0H DEFB 03CH DEFB 00EH DEFB 0C6H DEFB 07CH DEFB 000H ; DEFB 0FCH ;T DEFB 0B4H DEFB 030H DEFB 030H DEFB 030H DEFB 030H DEFB 078H DEFB 000H ; DEFB 0CCH ;U DEFB 0CCH DEFB 0CCH DEFB 0CCH DEFB 0CCH DEFB 0CCH DEFB 078H DEFB 000H ; DEFB 0CCH ;V DEFB 0CCH DEFB 0CCH DEFB 078H DEFB 078H DEFB 030H DEFB 030H DEFB 000H ; DEFB 0C6H ;W DEFB 0C6H DEFB 0C6H DEFB 0D6H DEFB 0FEH DEFB 0EEH DEFB 0C6H DEFB 000H ; DEFB 0C6H ;X DEFB 0C6H DEFB 06CH DEFB 038H DEFB 06CH DEFB 0C6H DEFB 0C6H DEFB 000H ; DEFB 0CCH ;Y DEFB 0CCH DEFB 0CCH DEFB 078H DEFB 030H DEFB 030H DEFB 078H DEFB 000H ; DEFB 0FEH ;Z DEFB 0C6H DEFB 08CH DEFB 018H DEFB 032H DEFB 066H DEFB 0FEH DEFB 000H ; DEFB 0FFH ; DEFB 0FFH DEFB 0FFH DEFB 0FFH DEFB 0FFH DEFB 0FFH DEFB 0FFH DEFB 0FFH ; DEFB 018H ;| DEFB 018H DEFB 018H DEFB 018H DEFB 018H DEFB 018H DEFB 018H DEFB 000H ; DEFB 000H ; DEFB 0FEH DEFB 006H DEFB 006H DEFB 000H DEFB 000H DEFB 000H DEFB 000H ; DEFB 010H ;^ DEFB 038H DEFB 06CH DEFB 0C6H DEFB 000H DEFB 000H DEFB 000H DEFB 000H ; DEFB 000H DEFB 000H DEFB 000H DEFB 000H DEFB 000H DEFB 000H DEFB 000H DEFB 0FFH ; ;Ende Zeichengenerator 1 ; .LIST ;*************************************************************** ;*************************************************************** ; ; T E I L F ; ;*************************************************************** ;*************************************************************** ; ;Sprungverteiler ; RESET: JP START ;Einschalten SYS: JP SYS1 ;mit DEFB SYSC: JP SYS2 ;mit ARGC SYSE: JP SYS3 ;mit E SYSI: JP SYS4 ;IRM on/off RCALL: JP RCA ;relat. CALL CWARM: JP ST3 ;f}r JUMP SCVSP: JP VSC ;Sprungverteiler fuer BASIC ueber Reg. E BWSON: JP BWSN ;BWS on BWSOF: JP BWSF ;BWS off ;*************************************************************** SVSPR: PUSH BC ;Sprungverteiler fuer BASIC ueber ARGC CALL BWSN ;BWS EIN CALL SYS2 ;wie SCVSP aber ueber ARGC JR VSC1 ; VSC: PUSH BC CALL BWSN CALL SYS3 ;UEBER Reg.E VSC1: CALL BWSF ;BWS aus POP BC RET ; ;*************************************************************** ; ;Aufruf der Systemunterprogramme ; SYS4: PUSH AF IN A,(P1AD) ;INTT1 EQU $+1 SET 2,A OUT (P1AD),A ;BWS eingeschaltet POP AF CALL SYS3 ;Aufruf }ber E IRMOFF: PUSH AF IN A,(P1AD) RES 2,A OUT (P1AD),A ;BWS ausgeschaltet POP AF RET ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SYS1: DI PUSH HL POP HL POP HL ;TOS=TOS+1 INC HL PUSH HL ;Returnadresse um eins erhoehen DEC HL DEC SP DEC SP ;Korr. Stack EI PUSH AF PUSH DE LD E,M POINTA: LD D,0 SYSNR: LD HL,(STAB);E=Nr., HL,DE ADD HL,DE ADD HL,DE ;HL->Startadr. LD E,M INC HL LD D,M EX DE,HL ;HL=Startadr. POP DE POP AF PRS2: EX (SP),HL RET ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SYS2: AND A ;Verteiler II mit ARGC PUSH HL PUSH DE PUSH BC PUSH HL LD HL,RPOP EX (SP),HL PUSH HL PUSH AF PUSH DE JR C,POINTA LD A,(ARGC) LD E,A JR POINTA ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SYS3: SCF ;Verteiler III mit Reg. E JR SYS2+1 ;*************************************************************** ; BWS ein ; BWSN: POP BC PUSH IY LD IY,0 ADD IY,SP DI LD (IX+11),A IN A,(P1AD) SET 2,A SET 5,A OUT (P1AD),A LD SP,(SYSP) EI LD A,(IX+11) PUSH BC RET ;**************************************************************: ;BWS aus ; BWSF: POP BC LD (IX+11),A IN A,(P1AD) RES 2,A RES 5,A DI OUT (P1AD),A LD SP,IY EI LD A,(IX+11) POP IY PUSH BC RET ; ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;rel. CALL's ; RCA: EX (SP),HL ;CALL LD E,M ;Offset holen INC HL LD D,M INC HL EX DE,HL ADD HL,DE ;neue Adresse EX DE,HL EX (SP),HL PUSH DE RET ; RPOP: POP BC ;Register poppen +RET POP DE POP HL RET ; ;*************************************************************** ; START: LD SP,STACK XOR A LD B,A LD C,A CL1: LD (BC),A DEC C JR NZ,CL1 DJNZ CL1 LD C,80H CL2: OUT (C),A DJNZ CL2 CALL ALLINIT ;Fenstervektorsp. initialisieren XOR A FEN: LD (WINNR),A CALL WINS INC A CP 10 JR C,FEN ; zweites Bild loeschen CALL ESCC3 LD A,12 CALL CRT CALL ESCC1 ; CALL CAOSCE CALL UMLAD ;V24-Initialisierungstab. umladen CALL CAOSCA ;und evtl. M003 zuschalten ; JR ST4 ; ST3: LD SP,STACK ;CAOS-UP 0DH CALL ALLINIT ;alles Initial. ST4: LD A,(V24DT-1) ;V24-Modul vorhanden? DEC A JR NZ,ST5 ;kein V24-Modul im System CALL CAOSCE CALL V24 ;Druckertreiber init. CALL ST70 ;Duplex init. CALL CAOSCA ST5: LD BC,880H IN A,(C) DEC A JR NZ,MRET ;Test auf Pr}f- LD A,43H ;modul OUT (C),A LD (MPUF+8),A ;in Steuerwortspeicher eintr. LD A,(IX+4) AND 0FCH LD (IX+4),A OUT (D09A),A JP 4000H ; ;*************************************************************** ;Men} Display ; DEFW HEAD DEFM 'MENU' DEFB 1 POP HL ;Stack in Ordng. MRET: CALL PRS ;Kopfzeile aus- DEFB CLS ;geben DEFB CUD DEFM '* KC-CAOS 4.2 *' DEFB 0 ; ;Men}-Aufbau ; MENLO: LD HL,0C000H ;CAOS-UP 46H LD C,L LD B,L MN2: CALL CRLF MN3: CALL PRS DEFB ESC ;Zeile l|schen DEFM '%' DEFB 0 CALL BRKT JR C,PARS1 ;Ende Men} bei ;BRK LD A,(IX+9) MN1: CPIR JP PO,PARS1 CPI JR NZ,MN1 MENU4: LD A,M CP 2 JR C,MN2 CP '0' JR C,MN3 CP 60H JR NC,MN3 CALL ROUT ;Ausgabe Zeichen INC HL DEC BC JR MENU4 ; ;*************************************************************** ;Main Monitor Loop ; PERRP: POP HL PERR: CALL ERRM PARSE: CALL PRS ;CAOS-UP 12H DEFM '%' DEFB 0 PARS1: CALL INLN INC DE LD A,(DE) CP ' ' ;nur Leerzeichen JR Z,PARSE AND A ;nichts JR Z,PARSE CALL ZSUCH0 JR NC,PERR PUSH HL ;HL-> Epilog CALL RLIN JR C,PERRP ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;Call command Routine ; PEND: LD HL,PARSE EX (SP),HL LD A,M INC HL PUSH HL AND A ;Epilog=0 ? CALL ARGS RET NZ JP IRMOFF ; ;*************************************************************** ;Stringsuchprogramm ; ZSUCH0: LD HL,0C000H LD B,L LD C,L ZSUCH: LD A,(IX+9) ZSUC2: CPIR ;CAOS-UP 1DH SCF CCF RET PO CPI JR NZ,ZSUC2 PUSH AF PUSH DE ZSUC3: LD A,(DE) INC DE CP 21H JR C,ZSUC4 ;ZK im VRAM zu Ende CPI JR Z,ZSUC3 ZSUP: POP DE POP AF ;doch nicht JR ZSUC2 ; ZSUC4: LD A,M CP 2 JR C,ZSUR CP ' ' JR C,ZSUP INC HL JR ZSUC4 ; ZSUR: POP AF POP AF SCF RET ; ;*************************************************************** ;Zeitschleife 1 ; WAIT0: DEC A RET Z PUSH AF POP AF JR WAIT0 ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;Zeitschleife 2 T=A*6.05 ms ; WAIT: LD B,A ;CAOS-UP 14H XOR A WAIT1: CALL WAIT0 DJNZ WAIT1 RET ; ;*************************************************************** ;Ausdrucken der Blocknr. mit ;folgendem Text ; PBLNR: LD A,(IX+2) AHPS: CALL AHEX ; ;*************************************************************** ;Ausgabe einer Zeichenkette ; PRS: EX (SP),HL ;CAOS-UP 23H PRS1: LD A,M INC HL AND A JP Z,PRS2 CALL ROUT JR PRS1 ; ;*************************************************************** ;Ein/Ausgabe auf Kanal 0/4 ; NORM: CALL NNIM ;CAOS-UP 13H ;*************************************************************** ;Setzen eines neuen Output Kanals ; NNOM: LD HL,OUTT1 ;CAOS-UP 20H NOM: PUSH HL ;CAOS-UP 1EH LD HL,(OUTAB) EX (SP),HL LD (OUTAB),HL POP HL RET ; ;*************************************************************** ;Setzen eines neuen Input Kanals ; NNIM: LD HL,INTT1 ;CAOS-UP 21H NIM: PUSH HL ;CAOS-UP 1FH LD HL,(INTAB) EX (SP),HL LD (INTAB),HL POP HL RET ; ;*************************************************************** ;Eingabe eines Zeichens }ber def.Kanal ; ICHR: PUSH HL ;CAOS-UP 16H LD HL,(INTAB) JR ATE ;*************************************************************** ;Ausgabe eines Zeichens }ber def.Kanal ; ROUT: PUSH HL ;CAOS-UP 24H LD HL,(OUTAB) ;*************************************************************** ;Start eines UP ;HL zeigt auf UP-Nummer ; ATE: PUSH DE PUSH BC LD E,M LD D,0 LD HL,(STAB) PUSH AF ADD HL,DE ADD HL,DE POP AF LD E,M INC HL LD D,M EX DE,HL CALL CHL ;CALL (HL) REGPOP: POP BC POP DE POP HL RET ; ;*************************************************************** ;Eingabe eines Zeichens mit Cursor- ;einblendung ; BLINK: PUSH HL ;CAOS-UP 04H PUSH DE PUSH BC BL17: BIT 6,(IX+8);F-Taste? JR NZ,BL2 ; BL0: LD DE,(CRSR) CALL VADR XOR A CP M ;ASCII=0 im VRAM JR Z,BL14 LD E,A ;E=0 BL10: CALL CUCPL ;Cursor setzen INC E ;z{hlen LD B,15 BL11: CALL KBD JR C,BL12 ;Taste gedr. DEC BC LD A,B OR C JR NZ,BL11 ;1/4 sec. warten JR BL10 ;noch mal neg. ; BL14: CALL CUADR ;f}r blanks SET 1,L SET 2,L ;Adr. Pixel LD A,M ;holen LD B,A XOR 7FH LD M,A ;setzen BL15: CALL KBD JR NC,BL15 ;warten LD M,B ;CRSR weg JR BL13 ; BL12: BIT 0,E ;unger. Male CALL NZ,CUCPL;negiert ? ; BL13: LD D,A ;Tastaturbeeps BIT 5,(IX+8) LD BC,307H ;Tonlaenge ueber Interr. CALL NZ,ABEEP1 LD A,D ; LD HL,STBT BIT 4,M JR Z,BL18 LD DE,(CRSR) CALL EB13 LD (CRSR),DE JR BL0 BL18: CP 1BH JR NZ,BOFF SET 4,M JR BL0 ; BOFF: CP 0F1H ;F-Taste? JR C,REGPOP SET 6,(IX+8) AND 0FH ;A=Nr.der Ftaste LD B,A LD HL,FTASTE BL4: LD A,M AND A INC HL JR NZ,BL4 DJNZ BL4 JR BL3 ; BL2: CALL BRKT JR C,BL20 LD HL,(FCONT) BL3: LD A,M CP 1BH JR NZ,BL19 INC HL LD (FCONT),HL LD HL,STBT SET 4,M JP BL17 ; BL19: INC HL LD (FCONT),HL AND A JR NZ,BL16 BL20: RES 6,(IX+8) JP BL0 ; BL16: LD HL,STBT BIT 4,M JP Z,REGPOP LD DE,(CRSR) CALL EB13 LD (CRSR),DE JP BL17 ; ;*************************************************************** ;Arbeitsspeicher Initialisierung ; INITT: DEFW RET ;Hcopy DEFB 0 DEFW 0 DEFW 2028H ;Window DEFW 0 DEFB 0 DEFB 39H ;Farbe weisz auf blau DEFW SCR DEFW CAPITAL DEFW SMALL DEFW CAPITAL DEFW SMALL ; DEFW STACK DEFW STABA DEFW ACTAB ;CTAB ; OUT (P1AD),A JP 0F012H ; ;I/O Tables ; DEFW OUTT1 DEFW INTT1 ; ;USER Jumps ; JP DRET JP DRET JP DRET JP DRET ; DEFW 0DC82H ;ERROR-BASIC DEFW VRADR0 ;VIDEO-RAM-ANFANGSADRESSE INITX: DEFW ESCTAB DEFB ESCTABL DEFB 5 ;ZE 1. Autorepeat DEFB 0 ;Steuerbyte Drucker DEFW V24DT DEFB V24TAB2-V24TAB1 DEFW V24DT+V24TAB2-V24TAB1 DEFB V24TAB3-V24TAB2 DEFB 6 ;Steuerbyte Duplex INITY: ; ;*************************************************************** ;ZEILENEINGABE ; INLN: CALL ICHR ;CAOS-UP 17H CALL ROUT CP CR JR NZ,INLN CALL CRLF LD DE,(CRSR) CP D ;Zeile 0 ? JR NZ,INL1 LD A,(WINLG+1) LD D,A ;letzte Zeile INL1: DEC D PUSH HL CALL VADR EX DE,HL POP HL DRET: RET ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;AUSGABE HL ALS 4 HEX-ZEICHEN UND SPACE ; HLHX: LD A,H ;CAOS-UP 1AH CALL AHEX ;AUSGABE A ALS 2 LD A,L ;HEX-ZEICHEN AHSP: CALL AHEX SPAC: LD A,' ' ;AUSGABE SPACE/ CAOS-UP 2BH CRLF1: JP ROUT ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;FEHLER AUSGABE ; ERRM: CALL PRS ;CAOS-UP 19H DEFM 'ERROR' DEFB BEEP DEFB 0 ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;AUSGABE NEWLINE ; CRLF: CALL PRS ;CAOS-UP 2CH DEFB CR DEFB CUD DEFB 0 RET ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;Cursor at home ; SHOME: LD A,HOME ;CAOS-UP 2DH JR CRLF1 ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;AUSGABE A ALS 2 HEX-ZEICHEN ; AHEX: PUSH AF ;CAOS-UP 1CH RRA RRA RRA RRA CALL TETRAD POP AF ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;AUSGABE BIT 0-3 ALS EIN HEX-ZEICHEN ; TETRAD: AND 0FH ADD A,90H DAA ADC A,40H DAA JR CRLF1 ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;AUSGABE HL UND DE ALS HEXZAHLEN ; HLDE: CALL HLDE1 ;CAOS-UP 1BH HLDE1: CALL HLHX EX DE,HL RET ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;ERFASSEN EINER HEX-ZAHL IN EINER ZEILE ;DE=ADRESSE IM RAM (VRAM) ;NUMN=ANZAHL DER HEX-ZEICHEN (0-4) ;NUMV=WERT DER ZAHL ; NN0: INC DE NUM: LD A,(DE) ;CAOS-UP 18H CP ' ' JR Z,NN0 ;NUMV,NUMN=0 XOR A LD HL,NUMYX+1 LD M,A DEC HL LD M,A DEC HL LD M,A ;ERFASSEN DER ASCII-ZEICHEN NN1: LD A,(DE) OR A RET Z CP ' ' RET Z ;UMWANDLUNG DER ASCII-ZEICHEN SUB '0' RET C CP 10 JR C,NN2 SUB 7 AND 0FFH-20H CP 10 RET C CP 16 CCF RET C ; NN2: INC DE INC M INC HL RLD INC HL RLD DEC HL DEC HL JR Z,NN1 DEC DE SCF RET ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;ERFASSEN VON MAXIMAL 10 ARGUMENTEN ;DE ZEIGT AUF ANFANG DER ARGUMENTE IN ;DER ZEILE ; RLIN: CALL CAOSCE ;CAOS-UP 22H CALL RLIN0 JP CAOSCA ;*************************************************************** ; Monitor Initialisierung ;*************************************************************** ; ALLINIT: LD DE,HCADR ;Arbeitszellen LD HL,INITT ;in LD BC,INITX-INITT ;den LDIR ;BWS LD C,LOW(INITY-INITX) ;umladen LD E,LOW(L3TAB) LDIR LD HL,103H ;interne LD (MPUF),HL ;Speicher- LD HL,300H ;schaltzustaende LD (MPUF+2),HL ;in den LD A,3 ;Modulsteuerwortspeicher LD (MPUF+4),A ;eintragen DI IM 2 ;Interruptmode 2 LD D,7 ;Initialisierung LD HL,JTATA ;PIO-Port A CALL INITCS ;und Ports 84H, 86H LD IX,1F0H ; LD (IX+1),28H ;Merker fuer LD (IX+4),63H ;Ports 84H u. 86H SIXR: LD A,1 ;High Interruptt. u. IX ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;SET INTERRUPT-TABLE ; SIXD: LD HL,ITAB ;CAOS-UP 31H LD (MIXIT),A LD E,LOW(RAM) LD D,A LD BC,14 LDIR ;Umladen der In- ;terrupttabelle LD H,(IX+1) LD L,(IX+4) PUSH DE POP IX ;INIT IX OBER- ;HALB DER INTER- ;RUPTTABELLE LD (IX+8),88H ;TASTATUR LD (IX+1),H ;Merkzelle fuer D08A LD (IX+4),L ;Merkzelle fuer D09A LD (IX+14),LOW(KTAB) LD (IX+15),HIGH(KTAB) LD (IX+9),LOW(HEAD) ;Prologbyte 7fh ; JNITT: DI IM 2 ;INTERRUPTMODE 2 LD A,(MIXIT) LD I,A LD D,4 LD HL,JTATA2 CALL INITCS INIT56: LD (IX+5),0 LD (IX+6),0B7H RET ; ;*************************************************************** ;Universelles Initialisierungsprogramm ; ;HL= Init-Tabellen-anfang ;HL= " -ende ;VR= HL ; INITC: PUSH BC ;CAOS-UP 43H LD C,M ;1.B. E/A-Adr. INC HL LD B,M ;2*B. Tab.L{nge INC HL OTIR ; ... Bytes POP BC RET ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;Initialisierung mehrerer E/A-Kan{le ; INITCS: DI ;CAOS-UP 44H INIT1: CALL INITC DEC D JR NZ,INIT1 EI RET ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;Tabelle zur E/A-Initialisierung ;PIO und CTC ; JTATA: DEFB P1AC ;* Kassetten-INT DEFB 1 DEFB LOW(PIOINT) ; DEFB P1AD ;* Datenwort DEFB 1 DEFB 0FH ;ROM,RAM,IRM ; DEFB P1AC DEFB 2 DEFB 0FH ;BYTEAUSGABE DEFB 3 ;DI f}r Kassette ; DEFB P1BC ;Tastaturinter. DEFB 3 DEFB LOW(PIOINT)+2 DEFB 0FH ;BYTE-AUSGABE DEFB 83H ;Int. frei ; DEFB P1BD ;* DEFB 1 DEFB 0FFH ;Lautst{rke 0 +RAM 8 ; DEFB D08A ;*Bildsteuerung/RAM-Floppy DEFB 1 DEFB 28H ;Bild 0 /RAM-Block 0 ; DEFB D09A ;*RAM-Floppy/ROM-Floppy/CAOSC/RAM4 DEFB 1 DEFB 063H ;ROM-Segment '0' (BASIC) on/CAOSC/RAM4 on ; JTATA2: DEFB P1AC ;Ausgabe DEFB 1 ;Interrupt- DEFB LOW(PIOINT) ;vektor ; DEFB P1BC ;Ausgabe DEFB 1 ;Interrupt- DEFB LOW(PIOINT)+2 ;vektor ; DEFB CTC0 DEFB 1 DEFB LOW(CTCINT) ; DEFB CTC2 ;*BLINK ON DEFB 2 DEFB 47H DEFB BLZK ;Zeitkonstante ; ;*************************************************************** ;SAVE KOMMANDO ; DEFW HEAD DEFM 'SAVE' DEFB 1 CP 2 JP C,ERRM CALL PRS DEFM 'NAME :' DEFB 0 CALL INLN LD HL,6 ADD HL,DE SAVE: LD DE,IOPUF ;CAOS-UP 36H LD BC,11 LDIR ;UMLADEN NAME XOR A LD (DE),A ;COPY PRKT. LD HL,ARGN LD E,16 LD C,21 LDIR ;EINTRAG ARGUMENTE CALL INIT56 ;KASS.-PUFFERANFANGSADR. CALL ISRLX ;1. Block LD HL,(ARG1) ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - WR1: LD (IX+5),L LD (IX+6),H CALL PRS DEFB 2 DEFB 0 CALL PBLNR DEFB 0 LD BC,160 ;Vortonl{nge CALL BRKT ;BREAK ? JP C,RINIT ; LD DE,80H ;Blockl{nge ADD HL,DE LD DE,(ARG2) SBC HL,DE ;ENDE (ARG2) ER- JP NC,CSRLX;REICHT ? CALL SRLX JR WR1 ; ;*************************************************************** ;Laden der Argumente ; ARGS: LD BC,(ARG3) ;CAOS-UP 15H LD DE,(ARG2) LD HL,(ARG1) LD A,(ARGN) RET ; ;*************************************************************** ;Lesen eines Blockes mit Ausschrift ; ;(IX+3) zu lesender Block ;VR= AF,BC (Block<>1) ( >[[ ) ;VR= AF,BC,HL (Block=1) ( Name ) ;CY= BRK ; ; RDBLK: INC (IX+3) RD0: CALL SRLIN JR NC,RD1 CALL PRS DEFW 0909H DEFB 09H DEFM ' ' DEFB 0 CALL PBLNR ;Pr}fsumme false DEFM ' ?' DEFB NL DEFB 0 LD A,(IX+3) DEC A JR Z,RD0 CALL BLINK CP BRK SCF RET Z CP 0AH ;CURSOR DOWN gedrueckt --> fehlerhafter ;Block wird uebernommen JR NZ,RD0 ; RD1: LD A,(IX+2);gelesener Bl. LD B,(IX+3);zu lesender "" DEC B JR Z,RDB1 ;Block 1 soll INC B ;gelesen werden CP B JR Z,RD2 INC A ;FF ?? JR Z,RD2 RD3: CALL PBLNR ;falscher Block DEFM '*' DEFB 19H DEFB 0 JR RD0 ; RD2: CALL PBLNR DEFM '> ' ;richtig DEFB 19H DEFB 0 RET ; RDB1: DEC A JR NZ,RD3 ;gelesener Block ; <>1 CALL CRLF LD HL,IOPUF LD B,11 RD4: LD A,M INC HL CALL CRT ;Name+Typ DJNZ RD4 JP SPAC ;Name ; ; ; ERRM2: CALL PRS DEFM '???' DEFB 0 RINT: JP RINIT ; ;*************************************** ; ;Lesen von Band ; DEFW HEAD DEFM 'VERIFY' DEFB 1 VERIF: RES 0,(IX+7) ;CAOS-UP 11H JR READ1 ; DEFW HEAD DEFM 'LOAD' DEFB 1 READ: SET 0,(IX+7) ;CAOS-UP 10H READ1: CALL INITI CALL INIT56 ; LD (IX+3),0;1.Block lesen CALL RDBLK RINT2: JR C,RINT ; BIT 0,(IX+7) JR Z,VER LD L,10H LD A,(IX+7) AND 0E3H LD (IX+7),A LD A,M SLA A SLA A AND 1CH OR (IX+7) LD (IX+7),A ;Kennbyte LD A,M SUB 2 CP 9 JR NC,ERRM2 ;ARGN <> 2...10 LD BC,(IOPUF+21); Start LD DE,(IOPUF+19); Endadr. LD HL,(IOPUF+17); Anf.adr. LD A,(ARGN); Ladeoffset ? AND A JR Z,R5 ; PUSH BC LD BC,(ARG1);Offset ADD HL,BC ;Umrechnen Anf. EX DE,HL ADD HL,BC ;Umrechnen Ende EX DE,HL BIT 4,(IX+7);ARGN=4...7 JR NZ,RR5 ;Ja? Startoffset EX (SP),HL ADD HL,BC ;neue Startadr. EX (SP),HL RR5: POP BC ; R5: LD (ARG2),BC;Startadr. CALL HLDE ;Ausgabe Adresse VER: CALL CRLF ;Ausgabe CRLF EX DE,HL ;Anfangsadr.DE RF: CALL RDBLK JR C,RINT2 BIT 0,(IX+7) JR Z,NVER PUSH HL ;Endadr. retten SBC HL,DE ;Endadr. - akt. Abspeicheradr. LD BC,80H ;Blocklaenge SBC HL,BC ;noch ganzen Block? ADD HL,BC JR NC,RF1 LD C,L RF1: LD HL,IOPUF LDIR ;Umspeichern POP HL ;Endadr. holen NVER: INC (IX+2) ;gelesener Bl. JR NZ,RF ;=FF ? CSRLI: CALL RINIT ;Endblock/ CAOS-UP 0BH LD A,(IX+7) AND 3 DEC A RET NZ ;Verify oder ;Autostart off LD A,(IX+7) AND 01CH CP 0CH ;kein " LD (IX+7),0 RET C LD HL,(ARG2) JP (HL) ; ;*************************************************************** ;Color Kommando ;L= Vordergrundfarbe/Blinken ;E= Hintergrund ;A= <2 nur Vordergrund ; DEFW HEAD DEFM 'COLOR' DEFB 1 MCOLOR: CALL CAOSCE ;CAOS-UP 0FH CALL COL0 JP CAOSCA ; ;*************************************************************** ;Ausdrucken ohne Ausf}hrung von ;Steuerzeichen ; PCTRL: PUSH HL ;CAOS-UP 42H LD HL,STBT SET 3,M ;setzen CALL ROUT RES 3,M ;r}cksetzen POP HL RET ; ;*************************************************************** ;Display ; ;HL= Anfang ;E= Zeilen (bei ARGN>1), sonst 1 ;C= Bytes/Zeile(-""->2), sonst 8 ; DEFW HEAD DEFM 'DISPLAY' DEFB 1 DISPL: CALL CAOSCE ;CAOS-UP 3BH CALL DISPL0 DISPLX: JP CAOSCA ; LDAM: CALL CAOSCA ;Lesen aus Speicher LD A,M LDAMX: JP CAOSCE ; ;*************************************************************** ;Modify Kommando ; DEFW HEAD DEFM 'MODIFY' DEFB 1 MOD0: CALL CAOSCE ;CAOS-UP 2EH CALL MOD00 JR DISPLX ; LDMA: CALL CAOSCA ;Eintragen in Speicher LD M,A JR LDAMX ; ;*************************************************************** ;Windowverwaltung ;%WINDOW aa bb cc dd e ; | | | | |_ Fenster-Nr. ; | | | |____ Spaltenzahl ; | | |_______ Spaltenanfang ; | |__________ Zeilenanzahl ; |_____________ Zeilenanfang ; DEFW HEAD DEFM 'WINDOW' DEFB 1 AND A JR Z,SETW ;Fenster-Nr.0 DEC A JR Z,SET0 ; -""- L LD H,L ;Zeilenanfang LD L,C ;Spaltenanfang LD D,E ;Zeilenanzahl LD A,(ARG4) LD E,A ;Spaltenanzahl LD A,(ARGN) CP 4 JR NZ,WINDS0 ;Argumente>4 JR C,WINDS2 ;Argumente<4 XOR A ;Fenster 0 JR WINDS1 WINDS0: LD A,(ARG5) ;Fenster-Nr. WINDS1: CALL WINDS WINDS2: JP C,ERRM RET ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;Window eintragen ; ;PE: HL= Anfang ; DE= L{nge ; A= Nummer ;PA: CY=1 ->ERROR ;VR: F,BC ; WINDS: CALL CAOSCE ;CAOS-UP 3CH CALL WINDSC JP CAOSCA ; SET0: LD A,L ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;Window setzen ; ;A= Nummer ;VR= AF,BC,DE,HL ;BC= 0h ; SETW: CALL WINS ;CAOS-UP 3DH SET1: LD (WINNR),A CALL WINADR RET C EX DE,HL ;Adr. in HL LD DE,WINAN JR WINS1 ; ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;Window-adr. berechnen ; ;A= Nr. ;VR= AF,DE ;CY= Fehler ;DE= Adresse ; WINADR: ADD A,-10 RET C ADD A,A LD E,A ADD A,A ADD A,A ADD A,E LD E,A LD D,0B9H AND A RET ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;akt. WINDOW retten ; ;VR= F,BC,DE,HL ;BC=0 ; WINS: PUSH AF LD A,(WINNR) CALL WINADR JP C,PADR3 ;POP AF, RET POP AF LD HL,WINAN WINS1: LD BC,10 LDIR RET ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;Ausdrucken einer F-Taste ; ;HL= Anfang ;VR= AF,HL ;HL= Ende ; PKEY1: INC HL PKEY: LD A,M AND A RET Z CALL PCTRL JR PKEY1 ; ;*************************************************************** ;Unterprogramm zum Belegen der F-Tasten ; ;A= Nummer ;VR= AF,BC,DE,HL ; DEFW HEAD DEFM 'KEY' DEFB 1 CP 1 RET NZ LD A,L KEY: AND A ;CAOS-UP 39H RET Z CP 12+1 RET NC ;Nummer kontr. LD B,A LD HL,FTASTE KEY1: LD A,M INC HL AND A JR NZ,KEY1 DJNZ KEY1 ;suchen CALL PKEY ;ausdr. KEY11: PUSH AF KEY2: DEC HL KEY3: POP AF KEY4: CALL ICHR ;Taste CP STOP JP Z,CRLF ;STOP=Ende PUSH AF ;ASCII retten LD B,0 DEC A ;=1 ? JR NZ,NKEY LD A,M ;ja AND A JR Z,KEY3 ;Taste leer -> LD D,H LD E,L PUSH HL INC HL LD A,LOW(MWIND) SUB L LD C,A LDIR ;verschieben POP HL POP AF CALL ROUT ;ausdrucken JR KEY11 ; NKEY: LD A,(MWIND-2) AND A JR NZ,KEY3 ;voll -> PUSH HL LD A,LOW(MWIND)-1 SUB L LD C,A LD HL,MWIND-2 LD DE,MWIND-1 LDDR ;verschieben POP HL POP AF INC HL LD M,A ;eintragen CALL PCTRL ;ausdr. JR KEY4 ; ;Unterprogramm zum Ausdr. der F-Tasten ; ;VR= AF,BC,HL ; DEFW HEAD DEFM 'KEYLIST' DEFB 1 KEYL: CALL CAOSCE ;CAOS-UP 3AH CALL KEYLIST JP CAOSCA ; ;*************************************** ; CUCPL: PUSH DE ;CAOS-UP 25 PUSH AF ;Complement Crsr PUSH HL CALL CUADR ;ADR.IM VRAM JR C,ACC2 PUSH BC LD B,8 ;Zaehler fuer 8 Bytes ACC1: LD A,M CPL LD M,A INC L DJNZ ACC1 POP BC ACC2: POP HL POP AF POP DE RET ; ;*************************************** ; ;Punktsetzprogramm ;HOR= Horizontalkomp. ;VERT= Vertikal- " ;HL= Pixeladr. ;DE= Farbadr. ;A= Maske ;CY= Fehler ;VR= AF,BC,DE,HL ; ; PUSET: PUSH HL ;CAOS-UP 30H PUSH DE PUSH BC AND A PUSH AF LD HL,(HOR) LD DE,(VERT) LD D,0 JP PU2 ; ;Punkt r}cksetzen ; PURES: CALL CAOSCE ;CAOS-UP 2FH CALL PURES0 JP CAOSCA ;******************************************** ; ; CIRCLE-Programm ; ; PE: ARG1 = x-Wert ; ARG2 = y-Wert ; Low ARG3 = Radius ; VR: AF,BC,DE,HL,BC',DE',HL' ; CIRC: LD A,(ARG3) ;CAOS-UP 3FH LD C,A LD L,C XOR A LD B,8 RR L CR1: JR NC,CR2 ADD A,C CR2: RRA RR L DJNZ CR1 LD H,A LD D,H LD E,L LD A,C SLA C RL B DEC BC PUSH BC LD BC,1 EXX LD C,A LD B,0 ; CLOOP: CALL QUA CALL QUA EXX AND A SBC HL,BC INC BC INC BC SBC HL,DE ADD HL,DE EXX JR NC,INN EXX EX (SP),HL EX DE,HL AND A SBC HL,DE DEC DE DEC DE EX DE,HL EX (SP),HL EXX DEC C INN: INC B LD A,C CP B JR NC,CLOOP POP AF RET ; QUA: LD A,B LD B,C LD C,A XOR A LD D,A LD HL,(ARG2) PUSH HL LD E,C ADD HL,DE CALL UPP XOR A LD D,A POP HL LD E,C SBC HL,DE ; UPP: PUSH HL LD HL,(ARG1) LD E,B AND A SBC HL,DE POP DE CALL POINT PUSH DE LD D,A LD E,B ADD HL,DE ADD HL,DE POP DE ; ;*************************************************************** ; universelles Punkt(re)set-Programm ; PE: HL=x-Wert ; DE=y-Wert ; (FARB) Bit 3...7 : Farbe ; Bit 2 : nicht verwendet (0) ; Bit 1=1 : PRESET ; Bit 0=1 : PXOR ; VR: / ; POINT: PUSH HL PUSH DE PUSH BC PUSH AF PU2: LD A,L AND 7 ;Maske fuer Punkt ADD A,LOW(PTAB) LD C,A LD B,HIGH(PTAB) LD A,L SRL H RRA SRL H RRA SRL H RRA CP 40 JR NC,POEND OR 80H LD H,A LD A,0FFH ADD A,D JR C,POEND XOR E LD L,A LD A,(FARB) LD D,A LD A,(BC) BIT 3,(IX+1) JR Z,PIXH BIT 1,D JR NZ,PORES BIT 0,D JR NZ,POXOR OR M PU1: LD M,A LD A,(IX+1) LD E,A XOR 2 DI OUT (D08A),A ;Farbe ein LD A,M AND 7 OR D LD M,A ;Farbe setzen LD A,E OUT (D08A),A EI POEND: POP AF POP BC POP DE POP HL RET ; POXOR: XOR M RES 0,D JP PU1 ; PORES: CPL AND M LD M,A JP POEND ; PIXH: LD B,A OR M BIT 3,D JR NZ,PIXH0 XOR B PIXH0: LD M,A LD A,(IX+1) LD C,A XOR 2 DI OUT (D08A),A LD A,B OR M BIT 4,D JR NZ,PIXH1 XOR B PIXH1: LD M,A LD A,C OUT (D08A),A EI JR POEND ; ;*************************************************************** ; LINE -Programm ; PE: ARG1...4 xa,ya,xe,ye ; VR: AF,BC,DE,HL,AF',BC',DE',HL' ; LIN: CALL CAOSCE ;CAOS-UP 3EH CALL LX0 ;LINE im CAOSC-Teil JR ESCX ; ;*************************************************************** ;B Y T E - I N P U T / O U T P U T - ;R O U T I N E N ; MBOT: CALL CAOSCE ;CAOS-UP 38H/ Byteweise CALL MBOT0 ;Ausgabe auf Kassette JR ESCX ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - MBIN: CALL CAOSCE ;CAOS-UP 37H/ Byteweise Eing. v. CALL MBIN0 ;Kassette JR ESCX ; BRK2: CALL CAOSCA ;RUECKSPRUNG VON DER LADEROUTINE LD HL,(IOERR1) CALL BWSF JP (HL) ; ;*************************************************************** ;MODULKONTROLLE ; DEFW HEAD DEFM 'MODUL' DEFB 1 ESCC5: CALL CAOSCE ;CAOSC ein CALL MODCH ;Modulcheck ESCX: JP CAOSCA ;CAOSC aus ;*************************************************************** ; Systemabfrage ROM/RAM/BILD ; DEFW HEAD DEFM 'SYSTEM' DEFB 1 ESCC6: CALL CAOSCE CALL SYSCH JR ESCX ; ;*************************************************************** ; B A S I C S C H N I T T S T E L L E ;*************************************************************** ;INPUT: D -DATEN ; E -CONTROL ; HL-NAME DTFLG EQU 0035EH NEW EQU 0C641H ; IO: PUSH HL PUSH BC CALL BWSN BIT 5,E ;BYE? PUSH DE JR NZ,BYETS INC HL INC HL BIT 7,E JR NZ,STATU PUSH HL LD A,E AND 07H ;GERAETENUMMER UND RICHTUNG DER UEBERTRAGUNG AUSBLENDEN LD HL,CHNL ;CHNL MIT CONSTANTEM H ADRESSTEIL ADD A,L LD L,A LD A,D LD D,E LD E,M POP HL CALL SYS3 RSTR: POP DE LD D,A LD A,E AND 4FH XOR 43H JR NZ,RSTR1 VERY: CALL PRS DEFM 'VERIFY ?(Y):' DEFB 00 CALL BLINK CP 'Y' CALL Z,VERIF RSTR1: LD A,D RES 3,E CALL BWSF POP BC POP HL RET ;*************************************************************** ZINNN EQU 16H ZROUT EQU 24H ZMBIN EQU 37H ZMBOT EQU 38H ZUIN EQU 6 ZUOUT EQU 2 ZUIN2 EQU 7 ZUOT2 EQU 3 CHNL: DEFB ZINNN DEFB ZROUT DEFB ZMBIN ;MAGNETBAND DEFB ZMBOT DEFB ZUIN DEFB ZUOUT DEFB ZUIN2 DEFB ZUOT2 ;*************************************************************** STATU: CALL KBDS POP DE LD D,A JR NC,RSTR1 RES 7,E ;TASTE GEDRUECKT JR RSTR1 ; BYETS: LD A,(DTFLG) AND A JR Z,BYE1 CALL BWSF CALL NEW CALL BWSN BYE1: IN A,(P1AD) AND 5FH ;ROCB und LED off OUT (P1AD),A JP PARSE ; ;*************************************************************** ; AUSGABE EINER UEBER HL ADRESSIERTEN ZEICHENKETTE ZKOUT: LD A,M ;CAOS-UP 45H INC HL AND A RET Z ;KETTENENDE =0? CALL ROUT ;AUSGABE ZEICHEN AUS AKKU JR ZKOUT ; ;*************************************************************** ;Tonausgabeprogramm ; ;HL= Tonh|he 1.Kanal ;DE= " 2. " ;BC= L{nge/Lautst{rke ;VR= AF,BC,DE,HL ; TON: CALL ARGS ;CAOS-UP 35H TON0: BIT 1,(IX+8) JR NZ,TON0 TONB: PUSH BC LD C,CTC0 CALL TON2 ;1.Kanal INC C EX DE,HL ;2.Kanal CALL TON2 POP BC LD A,C XOR 01FH OR 81H LD C,A LD A,B AND A JR Z,TON1 ;Dauerton RES 7,C SET 1,(IX+8) ;Tonl{nge aktiv LD A,0C7H ;CTC2 Inter. freigeben OUT (CTC2),A LD A,B OUT (CTC2),A TON1: LD B,60H TON6: IN A,(P1BD) AND B OR C OUT (P1BD),A RET ; 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 ; ;*************************************************************** ; ESC'1' Bild 0 anzeigen und schreiben ; ESCC1: LD HL,VRADR0 LD (VRAM),HL LD A,(IX+1) AND 0F8H ;BILD 0 ZUSCHALTEN ES11: OUT (D08A),A LD (IX+1),A RET ; ;*************************************************************** ;ESC'2' Bild 1 anzeigen und schreiben ; ESCC2: LD HL,VRADR1 LD (VRAM),HL LD A,(IX+1) OR 5 ;Bild 1 zuschalten JR ES11 ; ;*************************************************************** ;ESC'3' Bild 0 anzeigen und auf Bild 1 schreiben ; ESCC3: LD HL,VRADR1 LD (VRAM),HL LD A,(IX+1) AND 0FEH OR 4 JR ES11 ; ;*************************************************************** ;ESC'4' Bild 1 anzeigen und Bild 0 schreiben ; ESCC4: LD HL,VRADR0 LD (VRAM),HL LD A,(IX+1) OR 1 AND 0F9H JR ES11 ; ;*************************************************************** ;ESC'7' Inversschreiben ein/aus ; ESCC7: LD HL,STBT LD A,M XOR 4 LD M,A RET ; ;*************************************************************** ;ESC'9' Farbe ein/aus ; ESCC9: LD A,(IX+1) XOR 2 JR ES11 ; ;*************************************************************** ;ESC'A' hohe Farbaufloesung ein/aus ; ESCCA: IN A,(P1BD) XOR 80H OUT (P1BD),A LD A,(IX+1) XOR 8 JR ES11 ; ;*************************************************************** ;allgemeine Treiberroutine V24 ;Parameteruebergabe: ;%V24OUT Modulschacht Kanal USER-OUT Protokoll Drucker/Baud ; 8, C usw. 1/2 2/3 0 kein Bit4=1 1200baud ; 1 Protok. =0 9600baud ; 2 Bitmode Bit0-3 Druckertyp ; DEFW HEAD DEFM 'V24OUT' DEFB 1 ST6: CALL CAOSCE ;CAOSC ein/ CAOS-UP 47H CALL V24 ;Aufruf Initialisierung LD A,CR CALL SDD LD A,0AH CALL SDD V24X: JP CAOSCA ;CAOSC aus ; ;*************************************************************** ;SHIFT-CLEAR-Einsprung fuer V24-Druckertr. ; (HARDCOPY, Protokoll) ; HCOP: CALL CAOSCE CALL HCOP0 JR V24X ; ;*************************************************************** ;interruptgest. V24-Duplexroutine ;Parameter: ;%V24DUP Modulsch. Kanal USERIN/OUT ; 8,C usw. 1/2 2/3 ; DEFW HEAD DEFM 'V24DUP' DEFB 1 V24DUP: CALL CAOSCE ;CAOS-UP 48H CALL VDUP ;Duplex init. JR V24X ST7: CALL CAOSCE CALL ST70 JR V24X ; ;*************************************************************** ; ZEICHENAUSGABE ZEICHEN IN A ; PROT: CALL CRT SDD: PUSH AF LD A,(HCPZ) BIT 7,A ;Schreibmaschine oder Drucker? JR Z,SD0 AND 0F0H CP 90H ;S6005? JR Z,SD9 CP 0A0H ;S6010? JR NZ,SD0 POP AF PUSH HL PUSH BC LD HL,S6010A LD BC,7 CPIR JR NZ,SD7 LD C,6 ADD HL,BC LD A,M JR SD7 SD9: POP AF CP 7EH JR NZ,SD8 LD A,83H JR SD8 SD7: POP BC POP HL PUSH AF SD0: POP AF SD8: CP 09H ;RIGHT? JR Z,SD4 PUSH AF LD A,(STBT) BIT 3,A ;INTERPRET? JR Z,SD6 ;YES POP AF CP 7FH JR NZ,SD3 SD4: LD A,20H SD3: CP 20H ;SPACE JR NC,SD1 LD A,5FH SD1: PUSH AF SD6: PUSH BC CALL CHANAL LD A,SIOV+2 ADD A,C LD C,A IN A,(C) BIT 2,A JR NZ,SD5 LD A,1 CALL WAIT POP BC JR SD6 SD5: POP BC POP AF PUSH BC PUSH AF CALL CHANAL SDD1: LD A,SIOV ADD A,C LD C,A POP AF OUT (C),A POP BC RET ; ;*************************************************************** ;Byteausgabe ueber Duplexschn.st. ; SDDUP: PUSH AF SD11: PUSH BC CALL CHANAL2 LD A,SIOV+2 ADD A,C LD C,A IN A,(C) BIT 2,A JR NZ,SD10 LD A,1 CALL WAIT POP BC JR SD11 SD10: POP BC POP AF PUSH BC PUSH AF CALL CHANAL2 JR SDD1 ; ;*************************************************************** ;Zeicheneingabe ueber Duplexroutine ;Zeichen in A SEDUP: PUSH BC PUSH HL PUSH DE CALL CHANAL2 PUSH BC LD A,SIOV+2 ADD A,C LD C,A IN A,(C) BIT 0,A JR NZ,SE1 LD A,5 ;WR5 OUT (C),A LD A,0EAH OUT (C),A ;Empfaengerfreigabe SE2: IN A,(C) BIT 0,A JR NZ,SE1 CALL BRKT JR C,SE4 JR SE2 SE1: LD A,5 OUT (C),A LD A,06AH OUT (C),A POP BC LD A,SIOV ADD A,C LD C,A IN A,(C) SE3: POP DE POP HL POP BC RET SE4: POP BC JR SE3 ; CHANAL: PUSH AF LD A,(HCPZ) ;Druckerinit-Byte CHAN1: BIT 2,A LD C,1 JR NZ,CHAN2 DEC C CHAN2: POP AF RET ; CHANAL2: PUSH AF LD A,(HCPZ2) ;Duplexinit-Byte JR CHAN1 ;*************************************************************** ;INTERRUPTROUTINE (V24DUPLEX) ;zugelassene Empfangswerte: ; 0DH fuer externe Tastatur(V24) ; ESC 'T' aaaa nnnn (nnn*A) =Empfang nnnn Bytes ; ESC 'U' ssss =Start Programm ab ssss ; ESC=1BH IDUP2: PUSH HL PUSH DE PUSH BC PUSH AF IN A,(SIOV+1) ;Zeichen holen PUSH AF LD A,18H OUT (SIOV+3),A ;Kanal-RESET LD A,5 OUT (SIOV+3),A ;WR5 LD A,6AH OUT (SIOV+3),A ;DTR off POP AF CALL IRET ;Inter.ende CP 0DH ;Tastatur? JR Z,VTASTE CP 1BH ;ESC? JR Z,VESC ENDE0: CALL ST7 ENDE1: JP DISPE ;auf Tastatureingabe stellen VTASTE: CALL ST7 LD HL,IDUP1 DI LD (01E2H),HL EI JR ENDE1 ;ESC-Routinen VESC: LD A,6 LD (HCPZ2),A CALL V24DUP ;POLLING INIT. CALL SEDUP ;Eingabe USERIN1 CP 'T' ;DUMP einlesen? JR Z,DUMP CP 'U' ;Programmstart? JR Z,PSTART JR ENDE0 ;Einlesen DUMP DUMP: CALL SEDUP LD L,A CALL SEDUP LD H,A CALL SEDUP LD C,A CALL SEDUP LD B,A DUMP0: CALL SEDUP LD M,A INC HL DEC BC LD A,C OR B JR NZ,DUMP0 JR ENDE0 ;Starten Programm PSTART: CALL SEDUP LD L,A CALL SEDUP LD H,A CALL CHL ;JUMP (HL) JR ENDE0 ; IRET: EI RETI ;TASTATURINTERRUPT V24 IDUP1: EI PUSH AF IN A,(SIOV+1) JP IT12 ;Sprung in normale Routine ; ;*************************************************************** ;Einschalten CAOS auf Adresse C000H ; CAOSCE: PUSH AF SET 7,(IX+4) LD A,(IX+4) OUT (D09A),A POP AF RET ; ;*************************************************************** ;Abschalten CAOS auf Adresse 0C000H ; CAOSCA: PUSH AF RES 7,(IX+4) LD A,(IX+4) OUT (D09A),A POP AF RET ; ;*************************************************************** ;8*8BIT MULTIPLIKATION ;PE: D,C ;PA: BA=Ergebnis ; MUL: CALL CAOSCE ;CAOS-UP 41H CALL MULT ;Multprog. im CAOSC JR CAOSCA ; ;*************************************************************** ;8BIT - WURZEL AUS 16BIT ;PE: HL ;PA: A ; SQR: CALL CAOSCE ;CAOS-UP 40H CALL WURZ ;Wurzelprogramm im CAOSC JR CAOSCA ; ;*************************************************************** ;Interruptroutine f}r Tondauer ; TONLG: CALL EIRETI PUSH AF CALL CTCSTOP ;Blink CTC-Init POP AF RET ; ;*************************************************************** ;Umcodierungstabelle S6010 S6010A: DEFB 7BH DEFB 7CH DEFB 7DH DEFB 7EH DEFB 5BH DEFB 5CH DEFB 5DH DEFB 84H DEFB 94H DEFB 81H DEFB 0E1H DEFB 8EH DEFB 99H DEFB 9AH ; ;IN/OUT-TABLE ; OUTT1: DEFB 0 DEFB 38H DEFB 2 DEFB 3 INTT1: DEFB 4 DEFB 37H DEFB 6 DEFB 7 ; ;*************************************************************** ;Subroutine Table ; STABA: DEFW CRT ;UP 0H DEFW SRLX DEFW UOUT1 DEFW UOUT2 DEFW BLINK DEFW SRLIN DEFW UIN1 DEFW UIN2 DEFW ISRLX DEFW CSRLX DEFW ISRLI DEFW CSRLI DEFW KBDS DEFW ST3 DEFW KBD DEFW MCOLOR ; DEFW READ ;UP 10H DEFW VERIF DEFW PARSE DEFW NORM DEFW WAIT DEFW ARGS DEFW ICHR DEFW INLN DEFW NUM DEFW ERRM DEFW HLHX DEFW HLDE DEFW AHEX DEFW ZSUC2 DEFW NOM DEFW NIM ; DEFW NNOM ;UP 20H DEFW NNIM DEFW RLIN DEFW PRS DEFW ROUT DEFW CUCPL DEFW MODUL DEFW JUMP DEFW LDHLA DEFW LDAHL DEFW BRKT DEFW SPAC DEFW CRLF DEFW SHOME DEFW MOD0 DEFW PURES ; DEFW PUSET ;UP 30H DEFW SIXD DEFW VADR DEFW TCIF DEFW PADR DEFW TON DEFW SAVE DEFW MBIN DEFW MBOT DEFW KEY DEFW KEYL DEFW DISPL DEFW WINDS DEFW SETW DEFW LIN DEFW CIRC ; DEFW SQR ;UP 40H DEFW MUL DEFW PCTRL DEFW INITC DEFW INITCS DEFW ZKOUT DEFW MENLO DEFW ST6 ;DRUCKERAUSGABEINIT. DEFW V24DUP ;DUPLEXINIT. ; EOP1 EQU $ ;******************************************************** ;Umcodierungstabelle f}r Tastatur ; KTAB: DEFM 'W' DEFM 'w' DEFM 'A' DEFM 'a' DEFM '2' DEFM '"' DEFB CUL DEFB CCR DEFB HOME DEFB CLS DEFM '-' DEFM '=' DEFB 0F2H DEFB 0F8H DEFM 'Y' DEFM 'y' DEFM 'E' DEFM 'e' DEFM 'S' DEFM 's' DEFM '3' DEFM '#' DEFM '^' DEFM ']' DEFB CLR DEFB HCOPY DEFM ':' DEFM '*' DEFB 0F3H DEFB 0F9H DEFM 'X' DEFM 'x' DEFM 'T' DEFM 't' DEFM 'F' DEFM 'f' DEFM '5' DEFM '%' DEFM 'P' DEFM 'p' DEFB DEL DEFB ESC DEFM '0' DEFM '@' DEFB 0F5H DEFB 0FBH DEFM 'V' DEFM 'v' DEFM 'U' DEFM 'u' DEFM 'H' DEFM 'h' DEFM '7' DEFB 27H ; Apostroph DEFM 'O' DEFM 'o' DEFB INS DEFB KBEEP DEFM '9' DEFM ')' DEFB BRK DEFB BRK DEFM 'N' DEFM 'n' DEFM 'I' DEFM 'i' DEFM 'J' DEFM 'j' DEFM '8' DEFM '(' DEFM ' ' DEFM '[' DEFM 'K' DEFM 'k' DEFM ',' DEFM '<' DEFB STOP DEFB LEVEL3 DEFM 'M' DEFM 'm' DEFM 'Z' DEFM 'z' DEFM 'G' DEFM 'g' DEFM '6' DEFM '&' DEFB 0 ;Fehlercode DEFB 0 ; " DEFM 'L' DEFM 'l' DEFM '.' DEFM '>' DEFB 0F6H DEFB 0FCH DEFM 'B' DEFM 'b' DEFM 'R' DEFM 'r' DEFM 'D' DEFM 'd' DEFM '4' DEFM '$' DEFB 5FH DEFM '\' DEFM '+' DEFM ';' DEFM '/' DEFM '?' DEFB 0F4H DEFB 0FAH DEFM 'C' DEFM 'c' DEFM 'Q' DEFM 'q' DEFB SHLK DEFB SHLK DEFM '1' DEFM '!' DEFB CUD DEFB SCROLL DEFB CUU DEFB PAGE DEFB CUR DEFB CEOLN DEFB 0F1H DEFB 0F7H DEFB CR DEFB CR KTABE: ; ; ;*************************************** ; ;Interrupttabelle: ; ;*************************************** ITAB: DEFW IDUP2 ;SIO Kanal2 V24 DEFW IKEP ;PIO A KASS.EING DEFW ITAST ;PIO B TAST.EING DEFW EIRETI ;CTC 0 DEFW IKACT ;CTC 1 KASS.OUT DEFW TONLG ;CTC 2 TONLAENGE DEFW ITAKT ;CTC 3 TAST. ITABE: ; ; ;*************************************** ; ;Startadressen fuer Steuercodes ; ;*************************************** ; ACTAB: DEFW RET DEFW ACLR DEFW AESC DEFW RET ;BRK DEFW RET DEFW RET DEFW RET DEFW ABEEP DEFW ACUL DEFW ACUR DEFW ACUD DEFW ACUU DEFW ACLS DEFW ACCR DEFW RET DEFW AHCOPY DEFW AHOME DEFW APAGE DEFW ASCROLL DEFW RET DEFW AKBEEP DEFW RET DEFW RET DEFW RET DEFW ACEOLN DEFW ACCR DEFW AINS DEFW LVL3 ;Einschalten ESC-Funktion DEFW RET DEFW RET DEFW ACR ;Newline !!! DEFW ADEL ; ;*************************************************************** TOTAB: DEFB 049H+80H ;D5 DEFM 'NKEY$' IKTOK EQU 0D5H ;INKEY$ DEFB 04AH+80H ;D6 DEFM 'OYST' JOTOK EQU 0D6H ;JOYST DEFB 053H+80H ;D7 DEFM 'TRING$' STROK EQU 0D7H ;STRING$ DEFB 049H+80H ;D8 DEFM 'NSTR' ISTOK EQU 0D8H ;INSTR ;------------------------------------------------------------- DEFB 052H+80H ;D9 DEFM 'ENUMBER' RETOK EQU 0D9H ;RENUMBER DEFB 044H+80H ;DA DEFM 'ELETE' DETOK EQU 0DAH ;DELETE DEFB 050H+80H ;DEFB DEFM 'AUSE' PATOK EQU 0DEFBH ;PAUSE DEFB 042H+80H ;DC DEFM 'EEP' BETOK EQU 0DCH ;BEEP DEFB 057H+80H ;DD DEFM 'INDOW' WITOK EQU 0DDH ;WINDOW ;------------------------------------------------------------ DEFB 042H+80H ;DE DEFM 'ORDER' BOTOK EQU 0DEH ;BORDER DEFB 049H+80H ;DF DEFM 'NK' INTOK EQU 0DFH ;INK DEFB 050H+80H ;E0 DEFM 'APER' PPTOK EQU 0E0H ;PAPER DEFB 041H+80H ;E1 DEFM 'T' ATTOK EQU 0E1H ;AT DEFB 043H+80H ;E2 DEFM 'OLOR' COTOK EQU 0E2H ;COLOR ;-------------------------------------------------------------- DEFB 053H+80H ;E3 DEFM 'OUND' SOTOK EQU 0E3H ;SOUND DEFB 050H+80H ;E4 DEFM 'SET' PSTOK EQU 0E4H ;PSET DEFB 050H+80H ;E5 DEFM 'RESET' PRTOK EQU 0E5H ;PRESET DEFB 042H+80H ;E6 DEFM 'LOAD' BLTOK EQU 0E6H ;BLOAD (LADEN MASCHINENPROGRAMM) DEFB 056H+80H ;E7 DEFM 'PEEK' VETOK EQU 0E7H ;VPEEK DEFB 056H+80H ;E8 DEFM 'POKE' VPTOK EQU 0E8H ;VPOKE DEFB 04CH+80H ;E9 DEFM 'OCATE' LOTOK EQU 0E9H ;LOCATE (CURSOR POSITIONIEREN) DEFB 04BH+80H ;EA DEFM 'EYLIST' KLTOK EQU 0EAH ;KEYLIST DEFB 04BH+80H ;EB DEFM 'EY' KYTOK EQU 0EBH ;KEY DEFB 053H+80H ;EC DEFM 'WITCH' SWTOK EQU 0ECH ;SWITCH DEFB 050H+80H ;ED DEFM 'TEST' PTTOK EQU 0EDH ;PTEST DEFB 043H+80H ;EF DEFM 'LOSE' CLTOK EQU 0EEH ;CLOSE# DEFB 04FH+80H ;EF DEFM 'PEN' OPTOK EQU 0EFH DEFB 0D2H DEFM 'ANDOMIZE' ;RANDOMIZE RZTOK EQU 0F0H DEFB 056H+80H DEFM 'GET$' ;GET$ VGTOK EQU 0F1H DEFB 0CCH DEFM 'INE' ;LINE LITOK EQU 0F2H DEFB 0C3H DEFM 'IRCLE' ;CIRCLE CRTOK EQU 0F3H DEFB 0C3H DEFM 'SRLIN' ;CSRLIN CITOK EQU 0F4H DEFB 80H ;--------------------------------------------------------------- ; ;*************************************************************** ADRT2: DEFW INKEY DEFW 2FDH DEFW STRIG DEFW INSTR ; ADRT1: DEFW RENUM DEFW DELET DEFW PAUSE DEFW BEEPP DEFW WINDO DEFW BORD DEFW INK DEFW PAPER DEFW SNER1 DEFW COLORP DEFW SOUND DEFW PSET DEFW PRES DEFW BLOAD DEFW SNER1 DEFW VPOKE DEFW LOKAT DEFW KEYLI1 DEFW KEYA DEFW SWIT DEFW SNER1 DEFW CLOSE DEFW OPEN DEFW RAND DEFW SNER1 DEFW LINE1 DEFW CIRCL1 ; WILLI2: ? ; DEFS 0FDF8H-$ ; PTAB: DEFB 80H DEFB 40H DEFB 20H DEFB 10H DEFB 8 DEFB 4 DEFB 2 DEFB 1 ; ; ZEICHENGENERATOR 2 ;**************************************** ;CODE 0 - 1FH CONTROLCODES ;CODE 60H - 7FH LITTLE LETTERS ;**************************************** .XLIST ; SMALL: DEFB 000H ;DUMMI DEFB 000H DEFB 000H DEFB 000H DEFB 000H DEFB 000H DEFB 081H DEFB 0FFH ; DEFB 000H ;BACKSPACE DEFB 000H DEFB 022H DEFB 072H DEFB 022H DEFB 03EH DEFB 000H DEFB 000H ; DEFB 000H ;Zeile loeschen DEFB 000H DEFB 012H DEFB 032H DEFB 07EH DEFB 032H DEFB 012H DEFB 000H ; DEFB 07EH ;BREAK DEFB 081H DEFB 0B9H DEFB 0A5H DEFB 0B9H DEFB 0A5H DEFB 0B9H DEFB 081H ; DEFB 055H ;n.b. DEFB 0FFH DEFB 055H DEFB 0FFH DEFB 055H DEFB 0FFH DEFB 055H DEFB 0FFH ; DEFB 0AAH ;n.b. DEFB 0AAH DEFB 0AAH DEFB 0AAH DEFB 0AAH DEFB 0AAH DEFB 0AAH DEFB 0AAH ; DEFB 0FFH ;n.b. DEFB 000H DEFB 0FFH DEFB 000H DEFB 0FFH DEFB 000H DEFB 0FFH DEFB 000H ; DEFB 000H ;BEEP DEFB 000H DEFB 03CH DEFB 042H DEFB 042H DEFB 07EH DEFB 000H DEFB 000H ; DEFB 000H ;Cursor links DEFB 010H DEFB 030H DEFB 07EH DEFB 030H DEFB 010H DEFB 000H DEFB 000H ; DEFB 000H ;Cursor rechts DEFB 008H DEFB 00CH DEFB 07EH DEFB 00CH DEFB 008H DEFB 000H DEFB 000H ; DEFB 000H ;Cursor unten DEFB 010H DEFB 010H DEFB 010H DEFB 07CH DEFB 038H DEFB 010H DEFB 000H ; DEFB 008H ;Cursor oben DEFB 01CH DEFB 03EH DEFB 008H DEFB 008H DEFB 008H DEFB 008H DEFB 000H ; DEFB 038H ;Bildschirm loeschen DEFB 030H DEFB 028H DEFB 008H DEFB 008H DEFB 008H DEFB 03EH DEFB 000H ; DEFB 000H ;ENTER DEFB 000H DEFB 012H DEFB 032H DEFB 07EH DEFB 030H DEFB 010H DEFB 000H ; DEFB 0AAH ;n.b. DEFB 055H DEFB 0AAH DEFB 055H DEFB 0AAH DEFB 055H DEFB 0AAH DEFB 055H ; DEFB 03EH ;Aufruf Sonderprogramm DEFB 07CH DEFB 07CH DEFB 03EH DEFB 03EH DEFB 07CH DEFB 0F8H DEFB 0F8H ; DEFB 038H ;Cursor Home DEFB 030H DEFB 028H DEFB 004H DEFB 004H DEFB 004H DEFB 004H DEFB 000H ; DEFB 07FH ;Page-Modus DEFB 008H DEFB 01CH DEFB 02AH DEFB 008H DEFB 008H DEFB 008H DEFB 000H ; DEFB 000H ;Scrolling-Modus DEFB 008H DEFB 008H DEFB 008H DEFB 02AH DEFB 01CH DEFB 008H DEFB 07FH ; DEFB 07EH ;STOP DEFB 081H DEFB 09DH DEFB 0A1H DEFB 0B9H DEFB 085H DEFB 085H DEFB 0B9H ; DEFB 000H ;Tastenclick ein/aus DEFB 03CH DEFB 042H DEFB 05AH DEFB 05AH DEFB 042H DEFB 03CH DEFB 000H ; DEFB 088H ;n.b. DEFB 044H DEFB 022H DEFB 011H DEFB 088H DEFB 044H DEFB 022H DEFB 011H ; DEFB 000H ;SHIFT LOCK DEFB 07FH DEFB 022H DEFB 072H DEFB 027H DEFB 022H DEFB 07FH DEFB 000H ; DEFB 011H ;n.b. DEFB 022H DEFB 044H DEFB 088H DEFB 011H DEFB 022H DEFB 044H DEFB 088H ; DEFB 000H ;Cursor an Zeilenende DEFB 001H DEFB 009H DEFB 00DH DEFB 07FH DEFB 00DH DEFB 009H DEFB 001H ; DEFB 000H ;Corsor an Zeilenanfang DEFB 090H DEFB 0B0H DEFB 0FEH DEFB 0B0H DEFB 090H DEFB 000H DEFB 000H ; DEFB 000H ;INS DEFB 008H DEFB 07CH DEFB 006H DEFB 07CH DEFB 008H DEFB 000H DEFB 000H ; DEFB 0CCH ;n.b. DEFB 0CCH DEFB 033H DEFB 033H DEFB 0CCH DEFB 0CCH DEFB 033H DEFB 033H ; DEFB 07EH ;LIST DEFB 081H DEFB 0A1H DEFB 0A1H DEFB 0A1H DEFB 0A1H DEFB 0BDH DEFB 081H ; DEFB 07EH ;RUN DEFB 081H DEFB 0B9H DEFB 0A5H DEFB 0B9H DEFB 0A5H DEFB 0A5H DEFB 081H ; DEFB 07EH ;CONT DEFB 081H DEFB 099H DEFB 0A1H DEFB 0A1H DEFB 0A1H DEFB 099H DEFB 081H ; DEFB 000H ;DEL DEFB 010H DEFB 03EH DEFB 060H DEFB 03EH DEFB 010H DEFB 000H DEFB 000H ; DEFB 03CH ; DEFB 042H DEFB 099H DEFB 0A1H DEFB 0A1H DEFB 099H DEFB 042H DEFB 03CH ; DEFB 000H ;a DEFB 000H DEFB 078H DEFB 00CH DEFB 07CH DEFB 0CCH DEFB 076H DEFB 000H ; DEFB 0E0H ;b DEFB 060H DEFB 07CH DEFB 066H DEFB 066H DEFB 066H DEFB 0DCH DEFB 000H ; DEFB 000H ;c DEFB 000H DEFB 078H DEFB 0CCH DEFB 0C0H DEFB 0CCH DEFB 078H DEFB 000H ; DEFB 01CH ;d DEFB 00CH DEFB 07CH DEFB 0CCH DEFB 0CCH DEFB 0CCH DEFB 076H DEFB 000H ; DEFB 000H ;e DEFB 000H DEFB 078H DEFB 0CCH DEFB 0FCH DEFB 0C0H DEFB 078H DEFB 000H ; DEFB 038H ;f DEFB 06CH DEFB 060H DEFB 0F0H DEFB 060H DEFB 060H DEFB 0F0H DEFB 000H ; DEFB 000H ;g DEFB 000H DEFB 076H DEFB 0CCH DEFB 0CCH DEFB 07CH DEFB 00CH DEFB 0F8H ; DEFB 0E0H ;h DEFB 060H DEFB 06CH DEFB 076H DEFB 066H DEFB 066H DEFB 0E6H DEFB 000H ; DEFB 030H ;i DEFB 000H DEFB 070H DEFB 030H DEFB 030H DEFB 030H DEFB 0FCH DEFB 000H ; DEFB 00CH ;j DEFB 000H DEFB 01CH DEFB 00CH DEFB 00CH DEFB 0CCH DEFB 0CCH DEFB 078H ; DEFB 0E0H ;k DEFB 060H DEFB 066H DEFB 06CH DEFB 078H DEFB 06CH DEFB 0E6H DEFB 000H ; DEFB 070H ;l DEFB 030H DEFB 030H DEFB 030H DEFB 030H DEFB 030H DEFB 0FCH DEFB 000H ; DEFB 000H ;m DEFB 000H DEFB 0CCH DEFB 0FEH DEFB 0FEH DEFB 0D6H DEFB 0C6H DEFB 000H ; DEFB 000H ;n DEFB 000H DEFB 0F8H DEFB 0CCH DEFB 0CCH DEFB 0CCH DEFB 0CCH DEFB 000H ; DEFB 000H ;o DEFB 000H DEFB 078H DEFB 0CCH DEFB 0CCH DEFB 0CCH DEFB 078H DEFB 000H ; DEFB 000H ;p DEFB 000H DEFB 0DCH DEFB 066H DEFB 066H DEFB 07CH DEFB 060H DEFB 0F0H ; DEFB 000H ;q DEFB 000H DEFB 076H DEFB 0CCH DEFB 0CCH DEFB 07CH DEFB 00CH DEFB 01EH ; DEFB 000H ;r DEFB 000H DEFB 0DCH DEFB 076H DEFB 066H DEFB 060H DEFB 0F0H DEFB 000H ; DEFB 000H ;s DEFB 000H DEFB 07CH DEFB 0C0H DEFB 078H DEFB 00CH DEFB 0F8H DEFB 000H ; DEFB 010H ;t DEFB 030H DEFB 07CH DEFB 030H DEFB 030H DEFB 034H DEFB 018H DEFB 000H ; DEFB 000H ;u DEFB 000H DEFB 0CCH DEFB 0CCH DEFB 0CCH DEFB 0CCH DEFB 076H DEFB 000H ; DEFB 000H ;v DEFB 000H DEFB 0CCH DEFB 0CCH DEFB 0CCH DEFB 078H DEFB 030H DEFB 000H ; DEFB 000H ;w DEFB 000H DEFB 0C6H DEFB 0D6H DEFB 0FEH DEFB 0FEH DEFB 06CH DEFB 000H ; DEFB 000H ;x DEFB 000H DEFB 0C6H DEFB 06CH DEFB 038H DEFB 06CH DEFB 0C6H DEFB 000H ; DEFB 000H ;y DEFB 000H DEFB 0CCH DEFB 0CCH DEFB 0CCH DEFB 07CH DEFB 00CH DEFB 0F8H ; DEFB 000H ;z DEFB 000H DEFB 0FCH DEFB 098H DEFB 030H DEFB 064H DEFB 0FCH DEFB 000H ; DEFB 06CH ;ae DEFB 000H DEFB 078H DEFB 00CH DEFB 07CH DEFB 0CCH DEFB 076H DEFB 000H ; DEFB 0CCH ;oe DEFB 000H DEFB 078H DEFB 0CCH DEFB 0CCH DEFB 0CCH DEFB 078H DEFB 000H ; DEFB 0CCH ;ue DEFB 000H DEFB 0CCH DEFB 0CCH DEFB 0CCH DEFB 0CCH DEFB 076H DEFB 000H ; DEFB 03CH ;sz DEFB 066H DEFB 066H DEFB 06CH DEFB 066H DEFB 066H DEFB 06CH DEFB 0F0H ; DEFB 0FFH ; DEFB 081H DEFB 081H DEFB 081H DEFB 081H DEFB 081H DEFB 081H DEFB 0FFH ; ;Ende Zeichengenerator2 END