;DATUM: 22.1.88 .Z80 TITLE KC85/3 klemm ; ;************************* ;* * ;* Systemprogramm * ;* Teil 1 * ;* * ;************************* ; ; ;(C) F.Klemm '87 Gera ; ;*************************************** ; ; ;D E F I N I T I O N S : ;========================== ; ;ASCII's for Controls ; CLR EQU 1 ESC EQU 2 BRK EQU 3 ;weitere ASCII's CCPL EQU 4 TAB EQU 5 INVS EQU 6 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 NL EQU 1EH DEL EQU 1FH KBE EQU 0FFH ;Keyboardbuffer ; empty ; ;SMALL EQU 0FA00H ;CAPITAL EQU 0F800H IOPUF EQU 0B700H FTASTE EQU 0B900H MWIND EQU 0BA00H-100 MWIND1 EQU 9CH RTAB EQU 0BA00H KBDBUF EQU 0BA20H VBLEN EQU 0E0H ; ;Workspace-RAM ; STACK EQU 1D4H RAM EQU 1E4H RAM1 EQU 0E4H PIOINT EQU 1E4H PIOINT1 EQU 0E4H CTCINT EQU 1E8H CTCINT1 EQU 0E8H ; ;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 ; ;IRM-Work-RAM ; ARGC EQU 0B780H ARGN EQU ARGC+ 1 ARGN1 EQU 81H 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 WINNR EQU 0B79BH WINAN EQU 0B79CH WINLG EQU 0B79EH CRSR EQU 0B7A0H STBT EQU 0B7A2H COLOR EQU 0B7A3H WEND EQU 0B7A4H CCTL EQU 0B7A6H CCTL1 EQU 0A6H 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 BUFLEN EQU 0B7C9H ;2 Bytes free NOMC EQU 0B7CDH RWEND EQU 0B7CFH FCONT EQU 0B7D1H HOR EQU 0B7D3H VERT EQU 0B7D5H FARB EQU 0B7D6H MIXIT EQU 0B7D7H COUNT EQU 0B7D8H ; BLZK EQU 12 HEAD EQU 0DFDFH ;Prolog HEAD1 EQU 0DFH ;Prologbyte ; ;*************************************** ; ; ;#### ### # # # ;# # # # ## ## ## ;# # # # # # # # ;#### # # # # # # ;# # # # # # # ;# # # # # # # ;# # ### # # ### ; ;TEIL1 ; .PHASE 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 ; ; ;************************* ;* * * * ;* Fast CRT-Routine * ;* for the KC 85/2 * ;* * * * ;************************* ; ; ;(C) F.Klemm '87 Gera ; ;*************************************** ; ;Bestimmen der Cursorpos. ; CUADR: LD DE,(CRSR) ; ;*************************************** ; ;Bestimmen der Pixel- und Coloradr. ;aus der rel. Cursorpos. ;DE= rel. Cursor ;DE= Color ;HL= Pixel ;CY= au~erhalb ;VR= F,DE,HL ; CADR: LD HL,(WINAN) ADD HL,DE NADR: SLA H SLA H SLA H ; ;*************************************** ; ;Bestimmen der Pixel- und Coloradr. ;aus der Zeile/Spalte ;H= Zeile ;L= Spalte ;VR= F,DE,HL ; PADR: PUSH AF LD A,L CP 32 JR NC,PADR2 ADD A,A ;erster Teil ADD A,A ADD A,A PUSH BC LD B,H SRL H SRL H SCF RR H RRA SRL H RRA LD D,H SCF RR D SET 3,D LD E,A RR E RR B RRA LD L,A RR B RL H POP BC POP AF AND A RET ; PADR2: CP 40 JR NC,PADR3 AND 7 ;zweiter Teil ADD A,A LD L,A LD A,H RLCA AND 1 OR 0B0H LD D,A ;H-Teil Farbe ; LD A,H RLCA RLCA PUSH BC LD C,A AND 3 OR 50H LD B,H LD H,A ;H-Teil Pixel ;ohne V1 LD A,B AND 30H OR L LD L,A LD A,C RLCA RLCA AND 0C0H OR L LD L,A ;L-Teil Pixel u. ;Farbe ohne V0 ;b.z.w. V6 RR B RR L RR B RL H RR C ;fehlende Bits RRA ;einschieben LD E,A POP BC POP AF AND A RET ; PADR3: POP AF ;au~erhalb SCF RET ; ;*************************************** ; ;Pr}fen ob Cursor im Window ;DE= rel. Cursor ;CY= au~erhalb ;VR= AF ; TCIF: LD A,(WINLG) DEC A SUB E RET C LD A,(WINLG+1) DEC A SUB D RET ; ;*************************************** ; ;Bestimmen der Video-RAM Adr. ;DE= rel. Cursor ;HL= Video-RAM Adr. ;CY= au~erhalb ;VR= F,HL ; VADR: PUSH AF 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 ADD HL,HL ADD HL,HL LD D,59H ADD HL,DE LD E,A ADD HL,DE POP DE POP AF AND A RET ; ;*************************************** ; ;Vorder- und Hintergrundfarbe ;vertauschen ;A= alte Farbe ;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 in A auf ;der rel. Pos. DE ;A= ASCII ;DE= rel. Cursor ;VR= / ; DISP: PUSH HL PUSH DE PUSH BC PUSH AF CALL CADR JR C,DISP5 LD BC,(STBT) ;B=Color,C=STBT EX DE,HL BIT 1,C JR NZ,DISP1 LD M,B ;Farbe drucken SET 5,L LD M,B DISP1: BIT 0,C JR NZ,DISP5 LD HL,CCTL ;Zeichen drucken ADD A,A JR NC,DISP2 LD L,CCTL1+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 HL LD H,M LD L,C ADD A,A LD C,A LD B,0 ADD HL,BC ADD HL,BC ;Anfang Zeichen CALL DOCT ;in HL DISP5: POP AF POP BC POP DE POP HL RET ; ; ; ;Pixelroutine f}r DISP ; ;HL= ZG ;DE= Pixeladr. ;VR= A,DE,HL ; DOCT: CALL DTETR SET 5,E DTETR: RES 0,D CALL DDOUB SET 0,D DDOUB: RES 7,E LD A,M INC HL LD (DE),A SET 7,E LD A,M INC HL LD (DE),A RET ; ;*************************************** ; ;Zerlegen des Windows in einen linken ;und rechten Teil ;B= Anfang Teil I ;C= L{nge Teil I ;D= Anfang Teil II ;E= L{nge Teil II oder 00h ;VR= AF,BC,DE ; WIND: LD DE,2000H LD A,(WINAN) LD B,A CP D LD A,(WINLG) LD C,A RET NC ADD A,B CP D RET C SUB D LD E,A LD A,D SUB B LD C,A RET ; ;*************************************** ; ;Scrollen einer Zeile (8 Pixelzeilen) ;H= Zeile (0,4 ... 255) ;L= Anfang Zeile ;A= L{nge ;VR= F ; LROLL: PUSH HL PUSH DE PUSH BC LD C,A PUSH HL CALL PADR JR C,LROLL1 EX (SP),HL PUSH DE LD A,H ADD A,8 LD H,A CALL PADR EX (SP),HL EX DE,HL LD B,0 LD A,C CALL LINES ;Farbe scrollen POP HL POP DE CALL TETR ;4 Pixel -""- INC H ;SET 0,H bzw D INC D CALL TETR ;4 Pixel -""- LROLL2: POP BC POP DE POP HL RET ; LROLL1: POP HL JR LROLL2 ; TETR: RES 7,L RES 7,E CALL LINES SET 7,L SET 7,E LINES: RES 5,L RES 5,E CALL LINE SET 5,L SET 5,E LINE: PUSH DE PUSH HL LD C,A LDIR POP HL POP DE RET ; ;*************************************** ; ;Ausdrucken eines Zeichen auf dem ;CRT mit Cursorsteuerung ;A= ASCII ;DE= neuer Cursor ;VR= AF,BC,DE,HL ; CRT1: LD DE,(CRSR) CP ' ' JR NC,PZEI LD HL,STBT BIT 3,M JR NZ,PZEI ADD A,A LD HL,(CTAB) ;Anfang Tabelle LD C,A ;Startadr. LD B,0 ADD HL,BC LD A,M INC HL LD H,M LD L,A CHL: JP (HL) ; ATAB: 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 ;Delete DEL1: CALL VADR LD A,M AND A JR Z,DEL3 PUSH DE PUSH HL CALL ACUR CALL VADR LD A,M POP HL POP DE AND A JR Z,DEL2 CALL PZEI1 JR DEL1 ; AINS: PUSH DE ;Insert LD A,' ' INS1: CALL VADR LD B,M CALL PZEI1 LD A,B AND A JR NZ,INS1 DEL2: CALL VADR LD M,A LD A,' ' CALL DISP DEL3: POP DE RET ; CLLN: LD L,B ;L|schen einer CALL PADR ;Zeile RET C ;B= Anfang LD A,(COLOR) ;C= L{nge CALL CLINES ;H= Zeile EX DE,HL ;VR=AF,BC,DE,HL XOR A ;A= 00h CALL CTETR SET 0,D CTETR: RES 7,E CALL CLINES SET 7,E CLINES: RES 5,E CALL CLINE SET 5,E CLINE: PUSH DE LD B,C CLN1: LD (DE),A INC E ;kein Seiten- DJNZ CLN1 ;}bertrag 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 ; SCR: LD A,(WINLG) ;Scroll-Routine 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 JR C,SCR4 EX DE,HL SCR1: LD HL,40 ADD HL,DE PUSH HL PUSH BC LDIR POP BC POP DE INC H BIT 3,H JR NZ,SCR9 ;illeg. Window DEC A JR NZ,SCR1 ;VRAM gescrollt SCR9: LD A,(WINAN+1) ADD A,A ADD A,A ADD A,A LD H,A CALL WIND SCR2: LD A,C LD L,B CALL LROLL ;1. Teil gescr. LD A,E AND A JR Z,SCR3 ;nur ein Teil LD L,D CALL LROLL ;2. Teil gescr. SCR3: LD A,H ADD A,8 LD H,A POP AF DEC A PUSH AF JR NZ,SCR2 SCR4: POP AF POP DE ONESC: DEC D ;letzte Zeile ;l|schen -> ; AESC: LD E,0 ;Escape PUSH DE CALL VADR LD A,(WINLG) LD B,A XOR A ESC1: LD M,A INC HL DJNZ ESC1 ;VADR gel|scht LD A,(WINAN+1) ADD A,D ADD A,A ADD A,A ADD A,A LD H,A ;Zeile in H CALL WIND PUSH DE PUSH HL CALL CLLN POP HL POP BC ;A=0 CP C ;Kontrolle,ob JR Z,ESC2 ;nur ein Teil CALL CLLN ESC2: POP DE RET ; ABEEP: LD BC,0A0FH ;langer Beeps ABEEP1: LD HL,30H ;f}r Error PUSH DE LD E,0 CALL TONB POP DE RET ; AINVS: LD HL,COLOR LD A,M CALL COMPL LDHLA: LD M,A RET ; LDAHL: LD A,M RET ; AKBEEP: LD A,(IX+8) XOR 20H LD (IX+8),A RET: RET ; ;*************************************** ; ;Startadressen: ; ACTAB: DEFW RET DEFW ACLR DEFW AESC DEFW RET ;BRK DEFW ACCPL ;Complement !!! DEFW ATAB ;Tabulator !!! DEFW AINVS ;Invers !!! 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 RET DEFW RET DEFW RET DEFW ACR ;Newline !!! DEFW ADEL ; ;*************************************** ; ;CRT-Routine ;A= ASCII ;VR= / ; CRT: PUSH HL 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 ; ;*************************************** ; ;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 SET 3,(IX+8) 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: EI ;PIO-Interrupt PUSH AF IN A,(CTC3) PUSH AF LD A,0A7H OUT (CTC3),A LD A,TCTZK OUT (CTC3),A POP AF ; BIT 3,(IX+8);neue Bet{tigung RES 3,(IX+8) JR NZ,ITEND ; CP TGE0 JR NC,ITA ;Null erkannt ADD A,-TGE1 JR C ,ITA ;Eins erkannt PUSH HL ;Taste fertig PUSH DE LD A,(IX+12) RRA XOR 1 LD L,(IX+14) LD H,(IX+15) LD D,0 LD E,A ADD HL,DE LD A,M ;A = Tastencode BIT 7,(IX+8);Shiftlock ? JR NZ,IT2 CP 40H JR C,IT2 CP 80H JR NC,IT2 XOR 20H IT2: CP (IX+13) ;gleicher Code ? JR NZ,IT11 BIT 7,(IX+10) JR Z,IT12 ;Autorepeat on INC (IX+10) IT3: POP DE POP HL JR ITEND ;Taste okey ; ; ITA: RR (IX+12) ;Bit einschieben ITEND: POP AF RETI ; ; IT11: LD (IX+13),A LD (IX+10),-8;Autorepeat ;Counter CP SHLK JR Z,IT20 IT12: SET 0,(IX+8) LD HL,KBDBUF CP KBE JR Z,IT14 ;empty ? LD D,A PUSH BC LD BC,(BUFLEN) XOR A CPIR POP BC JR NZ,IT3 ;voll ! LD M,A DEC HL IT13: LD M,D JR IT3 ; IT14: RES 6,(IX+8) JR IT13 ; ; IT20: LD A,(IX+8);Shiftlock XOR 80H LD (IX+8),A LD A,SHLK JR IT12 ; ; ;Umcodierungstabelle f}r Tastatur ; HKTAB EQU 0E3H ; 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 CCPL DEFM 'N' DEFM 'n' DEFM 'I' DEFM 'i' DEFM 'J' DEFM 'j' DEFM '8' DEFM '(' DEFM ' ' DEFM '[' DEFM 'K' DEFM 'k' DEFM ',' DEFM '<' DEFB KBE DEFB STOP 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 '$' DEFM ' ' 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: ; ; ;*************************************** ; ;Intarrupttabelle: ; ITAB: 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: ; ; ; ;*************************************** ; ;Keyboard-Routinen ;A= Code ;CY= gedr}ckt ;VR= AF ; KBDS: XOR A BIT 0,(IX+8) RET Z LD A,(KBDBUF) AND A SCF RET NZ RES 0,(IX+8) AND A RET ; ;Keyboard-Routinen ;A= Code ;CY= gedr}ckt ;VR= AF ; KBD: CALL KBDS RET NC PUSH AF PUSH HL LD HL,KBDBUF KBD1: INC HL LD A,M DEC HL LD M,A INC HL AND A JR NZ,KBD1 POP HL POP AF RET ; BRKT: CALL KBDS ;ohne Tastenqu. CP BRK SCF RET Z AND A RET ; ;*************************************** ; ;MODULCONTROL ; DEFW HEAD DEFM 'SWITCH' DEFB 1 ; ;ARGN=1: Lesen Modulschacht ;ARGN=2: Ausgabe des Steuerworts ; LD D,E CALL MODUL LD A,L ;Anzeige Schacht CALL AHSP LD A,H ; "" Typ CALL AHSP LD A,E ; "" Steuerw. AHCR: CALL AHEX JP CRLF ; ;*************************************** ; ;Modul schalten ;L= Schacht ;D= Steuerwort ;A= read/write ;H= Type ;L= Schacht ;D= Steuerwort ; MODUL: LD H,0B8H LD C,80H LD B,L CP 2 JR NC,MODUL1 LD D,M ;Lesen MODUL0: IN H,(C) RET ; MODUL1: LD M,D LD A,L CP 2 JR C,MODUL2 OUT (C),D ;echtes Modul JR MODUL0 ; MODUL2: CP 1 IN A,(P1AD) JR C,MODUL4 BIT 0,D ;IRM RES 2,A JR Z,MODUL3 SET 2,A MODUL3: OUT (P1AD),A LD H,0FFH RET ; MODUL4: AND 0F5H ;RAM BIT 0,D JR Z,MODUL5 SET 1,A MODUL5: BIT 1,D JR Z,MODUL3 SET 3,A JR MODUL3 ; ;*************************************** ; ;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 LD C,80H IN A,(C) INC A ;Test, ob Modul ;vorhanden JP Z,ERRM LD A,0FDH ;auf C mit RO 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 ; EOP2: ; ;******** E N D E T E I L 1 ******** ; ; ;TEIL2 ; ;************************* ;* * * * ;* Tape-Input/Output * ;* * * * ;************************* ; ; ;KASSETTENFORMAT ANALOG ZU ROBOTRON ;KOMPLETTE SCHWINGUNGEN !!! ; ;*************************************** ; ;ORG EOP2 ; ;Zeitkonstanten f}r Schreiben: ; ZKKAT EQU 93 ;Trennzeichen ZKKA0 EQU 23 ; "0" ZKKA1 EQU 47 ; "1" ; ;Init vor I/O ; INITI: DI IN A,(P1AD) OR 40H AND 0DFH INIT: OUT (P1AD),A EI LD HL,(WEND) LD (RWEND),HL CALL NNOM LD (NOMC),HL CALL INIT56 CALL APAGE CTCSTOP: LD A,3 ;event. CTC-Stop OUT (CTC0),A OUT (CTC1),A JR TON9 ; CSRLX: LD (IX+2),0FEH CALL SRLX ; ;Init nach I/O ; RINIT: LD HL,(NOMC) LD (OUTAB),HL LD HL,(RWEND) LD (WEND),HL IN A,(P1AD) AND 9FH OUT (P1AD),A CALL CRLF TON9: IN A,(P1BD) ;Init nach Ton- SET 7,A ;ausgabe OUT (P1BD),A ;Blink on RES 1,(IX+8) DI LD A,47H OUT (CTC2),A LD A,BLZK ;Blinkfrequenz OUT (CTC2),A EI RET ; ;*************************************** ; ;P R O G R A M M E Z U R A U S G A B E ; ISRLX: DI IN A,(P1AD) OR 60H CALL INIT LD (IX+2),0;Block 1 LD BC,1000H;langer Vorton ; ; SRLX: INC (IX+2) ;erh|hen Block DI LD A,87H OUT (CTC1),A ;INIT CTC LD A,ZKKA1 ;Vorton 1 OUT (CTC1),A EI PUSH DE LD D,A LD E,A KARA1: CALL AUS ;Vorton ausgeben CPI JP PE,KARA1 ; CALL AUST ;Trennzeichen LD A,(IX+2) CALL KAUBT ;Blocknr. ausg. LD L,(IX+5) LD H,(IX+6);Blockanfang LD B,80H ;Counter+Pr}fsm. ; KARA2: LD A,M CALL KAUBT ;128 Datenbytes ;ausgeben LD A,C ADD A,M LD C,A ;Bilden Pr}fsum. INC HL DJNZ KARA2 ; CALL KAUBT ;Ausgabe Pr}fsum LD A,D CALL DYNST ;Endimpuls POP DE LD A,3 OUT (CTC1),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 ; SRLIN: LD A,83H OUT (P1AC),A ;Int Freig. PIO PUSH HL PUSH DE MA1: LD B,22 LD (IX+1),0 MA2: CALL LSTOP ;Lesen einer ;Vollschwingung JR C,MA1 ;kein Einsbit ? CP IKEG1 ;Einsbit ? CALL LED2 ;LED ein ohne JR C,MA1 ;PIO-Stop DJNZ MA2 ;Z{hlen Einsbit MA5: LD B,2 MA3: XOR A LD C,A LD (IX),A CALL LS1 ;Lesen einer ;Halbschwingung CP IKEGN ;Nullbit ? JR NC,MA5 DJNZ MA3 ;Warten auf ein ;Komplettes Nullbit CALL IBYTE ;Lesen ein Byte JR C,LED ; Fehler LD (IX+2),A; Blocknr. LD 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+1) ADD A,M LD (IX+1),A; Pr}fsumme INC HL DJNZ MA4 CALL IBYTE ; -""- lesen JR C,LED ; Fehler ? SUB (IX+1) ; Vgl. Pr}fsumme ADD A,0FFH ;Pr}fsumme false ;=> CY=1 LED: POP DE ;Register holen POP HL LD A,3 ;PIO-Stop-INT OUT (P1AC),A LED2: IN A,(P1AD) SET 5,A ; LED ein JR NC,LED1 RES 5,A ; LED aus,CY=1 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: LD A,(IX) OR A JR Z,LS0 ;Warten bis CTC- ;stand eingeles. LD C,A ; C=1.Halbschw. LD (IX),0 LS1: LD A,(IX) OR A JR Z,LS1 ; Warten auf 2. ; Halbschw. ADD 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 ; ; ;Interruptroutine f}r Tondauer ; TONLG: PUSH AF CALL CTCSTOP ;Blink CTC-Init JR REI ; ;*************************************** ; ;Tonausgabeprogramm ;HL= Tonh|he 1.Kanal ;DE= " 2. " ;BC= L{nge/Lautst{rke ;VR= AF,BC,DE,HL ; TON: CALL ARGS TON0: BIT 1,(IX+8) JR NZ,TON0 TONB: LD A,C XOR 1FH LD C,A SET 7,C LD A,B AND A JR Z,TON1 ;Dauerton RES 7,C SET 1,(IX+8);Tonl{nge aktiv LD A,0C7H OUT (CTC2),A LD A,B ;Tonl{nge setzen OUT (CTC2),A TON1: LD A,C ;Lautst{rke OUT (P1BD),A ; LD C,CTC0 CALL TON2 ;1.Kanal INC C EX DE,HL ;2.Kanal ; TON2: LD A,L ;Kanal AND A LD L,3 JR Z,TON4 ;off LD L,A LD A,7 BIT 0,H JR Z,TON3 ;VT 16 OR 20H ;VT 256 TON3: OUT (C),A ;Steuerwort TON4: OUT (C),L ;ZK RET TON6: IN A,(P1BD) ;fuer BASIC , Lautstaerke einstellen AND B OR C OUT (P1BD),A RET ;*********************************** ;*********************************** ;*********************************** ;ADRESSEN UND DATEN AUS BASIC KERN /frueher. RE-TEIL 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 ; ;*************************************************************** 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 ; 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 LD A,C POP BC LD C,A 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 ;******************************* ;BASIC SCHNITTSTELLE ;******************************* ;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: JP PARSE ; ;#### ### # # ### ;# # # # ## ## # # ;# # # # # # # # ;#### # # # # # # ;# # # # # # # ;# # # # # # # # ;# # ### # # ##### ; ;TEIL3 ; DEFS 0F000H-$ ; ;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 POINT: 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,POINT LD A,(ARGC) LD E,A JR POINT ;------------------------ SYS3: SCF ;Verteiler III mit Reg. E JR SYS2+1 ;------------------------ RPOP: POP BC ;Register poppen +RET POP DE POP HL 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 ;************* BWS ein *************** BWSN: POP BC PUSH IY LD IY,0 ADD IY,SP DI LD (IX+11),A IN A,(P1AD) OR 2 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) AND 251 DI OUT (P1AD),A LD SP,IY EI LD A,(IX+11) POP BC RET ; ;*************************************** ; START: LD SP,STACK XOR A LD B,A LD C,A CL12: LD (BC),A DEC C JR NZ,CL12 DJNZ CL12 ;RAM l|schen LD C,80H CL2: OUT (C),A ;Module off DJNZ CL2 ; LD B,8 IN A,(C) CP 0F4H ;16K DRAM in 8 JR NZ,ST3 LD L,B LD D,43H CALL MODUL ;Einschalten RAM ; ST3: LD SP,STACK CALL ALLINIT ;alles Initial. LD (IX+9),HEAD1 ;Prolog setzen LD BC,880H IN A,(C) DEC A JR NZ,MRET ;Test auf Pr}f- LD A,43H ;modul OUT (C),A JP 4000H ; ;*************************************** ; ;Men} Display ; DEFW HEAD DEFM 'MENU' DEFB 1 POP HL ;Stack in Ordng. MRET: CALL PRS ;Kopfzeile aus- DEFB CLS ;geben DEFM '* HC-CAOS 2.4 *' DEFB 0 ; ;Men}-Aufbau ; MENLO: LD HL,0C000H 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 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 SCF CCF RET PO CPI JR NZ,ZSUC2 PUSH AF PUSH DE ZSUC3: LD A,(DE) CP 21H JR C,ZSUC4 ;ZK im VRAM zu INC DE ;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 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 PRS1: LD A,M INC HL AND A JP Z,PRS2 CALL ROUT JR PRS1 ; ; ;Ein/Ausgabe auf Kanal 0/4 ; NORM: CALL NNIM ;UP-Eingabe auf ;Kanal 4 ; ; ;Setzen eines neuen Output Kanals ; NNOM: LD HL,OUTT1 NOM: PUSH HL LD HL,(OUTAB) EX (SP),HL LD (OUTAB),HL POP HL RET ; ; ;Setzen eines neuen Input Kanals ; NNIM: LD HL,INTT1 NIM: PUSH HL LD HL,(INTAB) EX (SP),HL LD (INTAB),HL POP HL RET ; ;Eingabe eines Zeichens }ber def.Kanal ; ICHR: PUSH HL LD HL,(INTAB) JR ATE ; ;Ausgabe eines Zeichens }ber def.Kanal ; ROUT: PUSH HL LD HL,(OUTAB) ; ;Start eines UP ;HL zeigt auf UP-Nummer ; ATE: PUSH DE PUSH BC LD E,M OUTT1 EQU $+1 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 PUSH DE PUSH BC 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 5,L SET 0,H ;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 CALL NZ,ABEEP1 LD A,D ; 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: LD HL,(FCONT) BL3: LD A,M INC HL LD (FCONT),HL AND A JR NZ,REGPOP RES 6,(IX+8) JR BL0 ; ; ;*************************************** ; ;Arbeitsspeicher Initialisierung ; INITT: DEFW RET ;Hcopy DEFB 0 DEFW 100H DEFW 1E28H ;Window DEFW 0 DEFB 0 DEFB 7 ;Farbe 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 VBLEN-1 ;Pufferl{nge INITX: ; ; ;ZEILENEINGABE ; INLN: CALL ICHR 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 CALL AHEX ;AUSGABE A ALS 2 LD A,L ;HEX-ZEICHEN AHSP: CALL AHEX SPAC: LD A,' ' ;AUSGABE SPACE CRLF1: JP ROUT ; ;FEHLER AUSGABE ; ERRM: CALL PRS DEFM 'ERROR' DEFB BEEP DEFB 0 LD (KBDBUF),A RES 6,(IX+8);Buffer empty ;F-Tastenabbruch ; ;AUSGABE NEWLINE ; CRLF: CALL PRS DEFB CR DEFB CUD DEFB 0 RET ; ;Cursor at home ; SHOME: LD A,HOME JR CRLF1 ; ;AUSGABE A ALS 2 HEX-ZEICHEN ; AHEX: PUSH AF 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 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) 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: 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,ARGN1 INC M LD A,M ADD A,255-10 JR NC,RL2 RET ; ;Monitor Initialisierung ; ALLINIT: LD DE,HCADR LD HL,INITT LD BC,INITX-INITT LDIR ;Umladen SIXR: LD A,1 ; ;SET INTERRUPT-TABLE ; SIXD: LD HL,ITAB LD (MIXIT),A LD E,RAM1 LD D,A LD BC,12 LDIR ;Umladen der In- ;terrupttabelle PUSH DE POP IX ;INIT IX OBER- ;HALB DER INTER- ;RUPTTABELLE LD (IX+8),88H ;TASTATUR LD (IX+14),LOW KTAB LD (IX+15),HKTAB ; JNITT: PUSH AF PUSH DE PUSH HL DI IM 2 ;INTERRUPTMODE 2 LD A,(MIXIT) LD I,A LD D,6 LD HL,JTATA CALL INITCS POP HL POP DE POP AF INIT56: LD (IX+5),0 LD (IX+6),0B7H RET ; ;*************************************** ; ;Universelles Initialisierungsprogramm ; ;HL= Init-Tabellen-anfang ;HL= " -ende ;VR= HL ; INITC: PUSH BC 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 INIT1: CALL INITC DEC D JR NZ,INIT1 EI RET ; ;Tabelle zur E/A-Initialisierung ;PIO und CTC ; JTATA: DEFB P1AC ;* Kassetpen-INT DEFB 3 DEFB PIOINT1 ;INT-VEKTOR DEFB 0FH ;BYTE EINGABE DEFB 3 ;DI f}r Kassette ; DEFB P1AD ;* DEFB 1 DEFB 1EH ;ROM,RAM,IRM ; DEFB P1BC ;* Tastatur-INT DEFB 3 DEFB PIOINT1+2 DEFB 0FH ;BYTE-AUSGABE DEFB 83H ;INT AKTIV ; DEFB P1BD ;* DEFB 1 DEFB 0FFH ;Lautst{rke 0 ; DEFB CTC2 ;*BLINK ON DEFB 3 DEFB CTCINT1 DEFB 47H DEFB BLZK ;Zeitkonstante ; DEFB CTC0 ;* DEFB 1 DEFB LOW (CTCINT) ; ;*************************************** ; ;SAVE KOIMANDO ; 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 LD BC,11 LDIR ;UMLADEN NAME XOR A LD (DE),A ;COPY PRKT. LD HL,ARGN LD E,16 LD C,21 LDIR ;EINTRAG ARGU- ;MENTE CALL ISRLX ;1. Block LD HL,(ARG1) ;----------------------- WR1: LD (IX+5),L LD (IX+6),H CALL PBLNR DEFM ' ' DEFB 0 LD BC,160 ;Vortonl{nge CALL BRKT ;BREAK ? JR C,RINT ; 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) 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 BRKT RET C CALL SRLIN JR NC,RD1 CALL PBLNR ;Pr}fsumme false DEFM ' ?' DEFB NL DEFB 0 JR 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 0 JR RD0 ; RD2: CALL PBLNR DEFM '> ' ;richtig 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) JR READ1 ; DEFW HEAD DEFM 'LOAD' DEFB 1 READ: SET 0,(IX+7) READ1: CALL INITI ; ; 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,M LD (IX+4),A;Kennbyte 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 2,(IX+4);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 LD HL,IOPUF LD BC,80H LDIR ;Umspeichern NVER: INC (IX+2) ;gelesener Bl. JR NZ,RF ;=FF ? CSRLI: CALL RINIT ;Endblock LD A,(IX+7) AND 3 DEC A RET NZ ;Verify oder ;Autostart off LD A,(IX+4) CP 3 ;kein " 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: PUSH AF LD A,1FH AND L RLA RLA RLA LD L,A POP AF CP 2 ;Hintergrund ? LD A,E JR NC,COL1 LD A,(COLOR) COL1: AND 7 OR L LD (COLOR),A RET ; ;************************************** ; ;Subroutine Table ; STABA: DEFW CRT 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 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 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 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 DRET DEFW DRET ; DEFW DRET DEFW DRET DEFW PCTRL DEFW INITC DEFW INITCS DEFW DRET DEFW MENLO ; EOP1 EQU $ ; ; ;******** E N D E T E I L 3 ********** ; ; ;TEIL4 ; ;*************************************** ; ;ORG EOP1 ; ;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: LD A,M ;HEX-Dump INC HL CALL AHSP DJNZ DL1 POP HL LD B,C LD A,CUR CALL ROUT DL2: LD A,M ;ASCII's INC HL CALL PCTRL DJNZ DL2 RET ; ;*************************************** ; ;Ausdrucken ohne Ausf}hrung von ;Steuerzeichen ; PCTRL: PUSH HL 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: CP 3 JR NC,DIS1 LD C,8 CP 2 JR NC,DIS1 LD E,1 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 ; DEFW HEAD DEFM 'MODIFY' DEFB 1 MOD0: LD C,E CP 2 JR NC,MOD1 LD C,1 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: LD M,A 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 ; ;*************************************** ; ;Windowverwaltung ; DEFW HEAD DEFM 'WINDOW' DEFB 1 AND A JR Z,SETW ;Window Nr.0 DEC A JR Z,SET0 ; -""- L DEC A LD A,C JR NZ,WINDS;Eintragen in C XOR A ; -""- 0 ; ;Window eintragen ; ;HL= Anfang ;DE= L{nge ;A= Nummer ;VR= F,BC ;BC= 0h ; WINDS: PUSH DE PUSH HL CALL WINS ;retten POP HL POP DE LD (WINAN),HL LD (WINLG),DE LD (CRSR),BC LD (WINNR),A RET ; SET0: LD A,L ; ;Window setzen ; ;A= Nummer ;VR= AF,BC,DE,HL ;BC= 0h ; SETW: CALL WINS 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 LD A,L KEY: AND A 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,MWIND1 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,MWIND1-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: 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 ; ; ;*************************************** ; CUCPL: ; ACCPL: PUSH AF ;Complement Crsr PUSH HL PUSH DE CALL CUADR ;ADR.IM VRAM CALL COMPTS POP DE POP HL POP AF RET ; COMPTS: RET C ;Fehler ? COMP: CALL COMP1 ;Zeichen neg. SET 5,L COMP1: RES 0,H CALL COMP2 SET 0,H COMP2: RES 7,L LD A,M CPL LD M,A SET 7,L LD A,M CPL LD M,A RET ; ;*************************************** ; ;Punktsetzprogramm ;HOR= Horizontalkomp. ;VERT= Vertikal- " ;HL= Pixeladr. ;DE= Farbadr. ;A= Maske ;CY= Fehler ;VR= AF,BC,DE,HL ; 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,HPTAB LD A,(VERT) CPL LD H,A LD A,(BC) JP PADR ; ;Punkt setzen ; PUSET: PUSH HL PUSH DE PUSH BC CALL PUNKT JR C,PUS1 OR M LD M,A ;Pixel ges. LD A,(FARB) AND 0F8H LD B,A LD A,(DE) AND 7 OR B ;neue Farbe LD (DE),A ;Farbe ges. PUS1: POP BC POP DE POP HL RET ; ;Punkt r}cksetzen ; PURES: PUSH HL PUSH DE PUSH BC CALL PUNKT JR C,PUS1 LD B,A LD C,M CPL AND C LD M,A ;Pixel r}ckges. LD A,B AND C ;Z ges. LD A,(DE) ;Farbe geholt JR PUS1 ; HPTAB EQU 0F7H ; PTAB: DEFB 80H DEFB 40H DEFB 20H DEFB 10H DEFB 8 DEFB 4 DEFB 2 DEFB 1 ; ; ;*************************************** ; ; ;B Y T E - I N P U T / O U T P U T - ;R O U T I N E N ; ; MBOT: PUSH HL PUSH BC PUSH AF LD HL,COUNT LD C,M LD B,0B7H LD (BC),A INC C LD M,C BIT 7,C JR Z,BT1 LD M,0 LD BC,144 CALL SRLX CALL NNOM CALL PBLNR DEFM ' ' DEFB 0 LD (OUTAB),HL BT1: POP AF POP BC POP HL RET ; MBIN: PUSH BC LD A,(COUNT) BIT 7,A JR Z,BN1 ; LD A,(IX+2) INC A JR Z,BN2 PUSH HL CALL NNOM PUSH HL CALL RDBLK POP HL LD (OUTAB),HL POP HL JR C,BN2 XOR A ; BN1: LD B,0B7H LD C,A INC A LD (COUNT),A LD A,(BC) CP A POP BC ;CY=0,Z=1 RET ; BN2: POP BC AND A SCF ;CY=Fehler RET ;Z=1 FF-Block ; Z=0 BRK ; ;****** E N D E T E I L 4 ****** ; ;-ZEICHENBILDTABELLE 1 ;CODE 40-5FH - GROSSBUCHSTABEN ; 21-3FH - SONDERZEICHEN/ZIFFERN ; frueher. GB-Teil ;************************************************************ DEFB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH ; 10 BYTE FREI *** CAPITAL: DEFB 000H ;SPACE DEFB 000H DEFB 000H DEFB 000H DEFB 000H DEFB 000H DEFB 000H DEFB 000H DEFB 000H ;! DEFB 018H DEFB 018H DEFB 018H DEFB 018H DEFB 000H DEFB 018H DEFB 000H DEFB 000H ;" DEFB 066H DEFB 066H DEFB 0CCH DEFB 000H DEFB 000H DEFB 000H DEFB 000H DEFB 000H DEFB 036H ;# DEFB 07FH DEFB 036H DEFB 036H DEFB 07FH DEFB 036H DEFB 000H DEFB 018H DEFB 03EH DEFB 06CH DEFB 03EH DEFB 01BH DEFB 01BH DEFB 07EH DEFB 018H DEFB 000H ;% DEFB 063H DEFB 066H DEFB 00CH DEFB 018H DEFB 036H DEFB 066H DEFB 000H DEFB 018H ;& DEFB 024H DEFB 028H DEFB 011H DEFB 02AH DEFB 044H DEFB 04AH DEFB 031H DEFB 000H ;' DEFB 018H DEFB 018H DEFB 030H DEFB 000H DEFB 000H DEFB 000H DEFB 000H DEFB 000H ;( DEFB 018H DEFB 030H DEFB 030H DEFB 030H DEFB 030H DEFB 018H DEFB 000H DEFB 000H ;) DEFB 018H DEFB 00CH DEFB 00CH DEFB 00CH DEFB 00CH DEFB 018H DEFB 000H DEFB 000H ;* DEFB 000H DEFB 024H DEFB 018H DEFB 07EH DEFB 018H DEFB 024H DEFB 000H DEFB 000H ;+ DEFB 000H DEFB 018H DEFB 018H DEFB 07EH DEFB 018H DEFB 018H DEFB 000H DEFB 000H ;, DEFB 000H DEFB 000H DEFB 000H DEFB 018H DEFB 018H DEFB 030H DEFB 000H DEFB 000H ;- DEFB 000H DEFB 000H DEFB 000H DEFB 03EH DEFB 000H DEFB 000H DEFB 000H DEFB 000H ;. DEFB 000H DEFB 000H DEFB 000H DEFB 000H DEFB 018H DEFB 018H DEFB 000H DEFB 006H ;/ DEFB 00CH DEFB 018H DEFB 030H DEFB 060H DEFB 0C0H DEFB 000H DEFB 000H DEFB 000H ;0 DEFB 03CH DEFB 06EH DEFB 06EH DEFB 076H DEFB 076H DEFB 03CH DEFB 000H DEFB 000H ;1 DEFB 01CH DEFB 03CH DEFB 00CH DEFB 00CH DEFB 00CH DEFB 03EH DEFB 000H DEFB 000H ;2 DEFB 03CH DEFB 066H DEFB 006H DEFB 03CH DEFB 060H DEFB 07EH DEFB 000H DEFB 000H ;3 DEFB 03CH DEFB 066H DEFB 00CH DEFB 006H DEFB 066H DEFB 03CH DEFB 000H DEFB 000H ;4 DEFB 03CH DEFB 06CH DEFB 0CCH DEFB 0FEH DEFB 00CH DEFB 00CH DEFB 000H DEFB 000H ;5 DEFB 07EH DEFB 060H DEFB 07CH DEFB 006H DEFB 066H DEFB 03CH DEFB 000H DEFB 000H ;6 DEFB 03CH DEFB 060H DEFB 07CH DEFB 066H DEFB 066H DEFB 03CH DEFB 000H DEFB 000H ;7 DEFB 07EH DEFB 006H DEFB 00CH DEFB 018H DEFB 030H DEFB 060H DEFB 000H DEFB 000H ;8 DEFB 03CH DEFB 066H DEFB 03CH DEFB 066H DEFB 066H DEFB 03CH DEFB 000H DEFB 000H ;9 DEFB 03CH DEFB 066H DEFB 066H DEFB 03EH DEFB 006H DEFB 03CH DEFB 000H DEFB 000H ;: DEFB 000H DEFB 018H DEFB 018H DEFB 000H DEFB 018H DEFB 018H DEFB 000H DEFB 000H ;; DEFB 000H DEFB 018H DEFB 000H DEFB 018H DEFB 018H DEFB 030H DEFB 000H DEFB 000H ;< DEFB 000H DEFB 018H DEFB 030H DEFB 060H DEFB 030H DEFB 018H DEFB 000H DEFB 000H ;= DEFB 000H DEFB 000H DEFB 03EH DEFB 000H DEFB 03EH DEFB 000H DEFB 000H DEFB 000H ;> DEFB 000H DEFB 030H DEFB 018H DEFB 00CH DEFB 018H DEFB 030H DEFB 000H DEFB 000H ;? DEFB 03CH DEFB 066H DEFB 006H DEFB 01CH DEFB 018H DEFB 000H DEFB 018H DEFB 03CH ;@ DEFB 042H DEFB 081H DEFB 035H DEFB 049H DEFB 049H DEFB 049H DEFB 036H DEFB 000H ;A DEFB 03CH DEFB 066H DEFB 066H DEFB 07EH DEFB 066H DEFB 066H DEFB 000H DEFB 000H ;B DEFB 07CH DEFB 066H DEFB 07CH DEFB 066H DEFB 066H DEFB 07CH DEFB 000H DEFB 000H ;C DEFB 03CH DEFB 066H DEFB 060H DEFB 060H DEFB 066H DEFB 03CH DEFB 000H DEFB 000H ;D DEFB 07CH DEFB 066H DEFB 066H DEFB 066H DEFB 066H DEFB 07CH DEFB 000H DEFB 000H ;E DEFB 07EH DEFB 060H DEFB 07CH DEFB 060H DEFB 060H DEFB 07EH DEFB 000H DEFB 000H ;F DEFB 07EH DEFB 060H DEFB 07CH DEFB 060H DEFB 060H DEFB 060H DEFB 000H DEFB 000H ;G DEFB 03CH DEFB 066H DEFB 060H DEFB 06EH DEFB 066H DEFB 03CH DEFB 000H DEFB 000H ;H DEFB 066H DEFB 066H DEFB 07EH DEFB 066H DEFB 066H DEFB 066H DEFB 000H DEFB 000H ;I DEFB 03CH DEFB 018H DEFB 018H DEFB 018H DEFB 018H DEFB 03CH DEFB 000H DEFB 000H ;J DEFB 01EH DEFB 00CH DEFB 00CH DEFB 00CH DEFB 06CH DEFB 038H DEFB 000H DEFB 000H ;K DEFB 066H DEFB 06CH DEFB 078H DEFB 06CH DEFB 066H DEFB 063H DEFB 000H DEFB 000H ;L DEFB 060H DEFB 060H DEFB 060H DEFB 060H DEFB 060H DEFB 07EH DEFB 000H DEFB 000H ;M DEFB 063H DEFB 077H DEFB 06BH DEFB 063H DEFB 063H DEFB 063H DEFB 000H DEFB 000H ;N DEFB 063H DEFB 073H DEFB 06BH DEFB 067H DEFB 063H DEFB 063H DEFB 000H DEFB 000H ;O DEFB 03CH DEFB 066H DEFB 066H DEFB 066H DEFB 066H DEFB 03CH DEFB 000H DEFB 000H ;P DEFB 07CH DEFB 066H DEFB 07CH DEFB 060H DEFB 060H DEFB 060H DEFB 000H DEFB 000H ;Q DEFB 03CH DEFB 066H DEFB 066H DEFB 06EH DEFB 066H DEFB 03AH DEFB 001H DEFB 000H ;R DEFB 07CH DEFB 066H DEFB 07CH DEFB 06CH DEFB 066H DEFB 063H DEFB 000H DEFB 000H ;S DEFB 03CH DEFB 060H DEFB 03CH DEFB 006H DEFB 066H DEFB 03CH DEFB 000H DEFB 000H ;T DEFB 07EH DEFB 018H DEFB 018H DEFB 018H DEFB 018H DEFB 018H DEFB 000H DEFB 000H ;U DEFB 066H DEFB 066H DEFB 066H DEFB 066H DEFB 066H DEFB 03CH DEFB 000H DEFB 000H ;V DEFB 066H DEFB 066H DEFB 066H DEFB 066H DEFB 03CH DEFB 018H DEFB 000H DEFB 000H ;W DEFB 063H DEFB 063H DEFB 06BH DEFB 06BH DEFB 07FH DEFB 036H DEFB 000H DEFB 000H ;X DEFB 066H DEFB 03CH DEFB 018H DEFB 018H DEFB 03CH DEFB 066H DEFB 000H DEFB 000H ;Y DEFB 066H DEFB 03CH DEFB 018H DEFB 018H DEFB 018H DEFB 018H DEFB 000H DEFB 000H ;Z DEFB 07EH DEFB 00CH DEFB 018H DEFB 030H DEFB 060H DEFB 07EH DEFB 000H DEFB 0FFH ;VOLL DEFB 0FFH DEFB 0FFH DEFB 0FFH DEFB 0FFH DEFB 0FFH DEFB 0FFH DEFB 0FFH DEFB 000H ;SENK DEFB 018H DEFB 018H DEFB 018H DEFB 018H DEFB 018H DEFB 018H DEFB 000H DEFB 000H ;WINK DEFB 07EH DEFB 006H DEFB 006H DEFB 000H DEFB 000H DEFB 000H DEFB 000H DEFB 000H ;DACH DEFB 000H DEFB 000H DEFB 008H DEFB 01CH DEFB 036H DEFB 000H DEFB 000H DEFB 000H ;_ DEFB 000H DEFB 000H DEFB 000H DEFB 000H DEFB 000H DEFB 000H DEFB 0FFH ;*************************** ;Ende Zeichengenerator 1 ; ; ZEICHENGENERATOR 2 ;**************************************** ;CODE 0 - 1FH CONTROLCODES ;CODE 60H - 7FH LITTLE LETTERS ;**************************************** SMALL: DB 000H ;CODE 00 DB 000H DB 000H DB 000H DB 000H DB 000H DB 081H DB 0FFH DB 000H ;BS DB 000H DB 022H DB 072H DB 022H DB 03EH DB 000H DB 000H DB 000H ;CLN DB 000H DB 012H DB 032H DB 07EH DB 032H DB 012H DB 000H DB 07EH ;BREAK DB 081H DB 0B9H DB 0A5H DB 0B9H DB 0A5H DB 0B9H DB 081H DB 055H ;04 DB 0FFH DB 055H DB 0FFH DB 055H DB 0FFH DB 055H DB 0FFH DB 0AAH ;05 DB 0AAH DB 0AAH DB 0AAH DB 0AAH DB 0AAH DB 0AAH DB 0AAH DB 0FFH ;06 DB 000H DB 0FFH DB 000H DB 0FFH DB 000H DB 0FFH DB 000H DB 000H ;BELL DB 000H DB 03CH DB 042H DB 042H DB 07EH DB 000H DB 000H DB 000H ;CUL DB 010H DB 030H DB 07EH DB 030H DB 010H DB 000H DB 000H DB 000H ;CUR DB 008H DB 00CH DB 07EH DB 00CH DB 008H DB 000H DB 000H DB 000H ;CUD DB 010H DB 010H DB 010H DB 07CH DB 038H DB 010H DB 000H DB 008H ;CUU DB 01CH DB 03EH DB 008H DB 008H DB 008H DB 008H DB 000H DB 038H ;CR DB 030H DB 028H DB 008H DB 008H DB 008H DB 03EH DB 000H DB 000H DB 000H DB 012H DB 032H DB 07EH DB 030H DB 010H DB 000H DB 0AAH DB 055H DB 0AAH DB 055H DB 0AAH DB 055H DB 0AAH DB 055H DB 03EH ;HOME DB 07CH DB 07CH DB 03EH DB 03EH DB 07CH DB 0F8H DB 0F8H DB 038H DB 030H DB 028H DB 004H DB 004H DB 004H DB 004H DB 000H DB 07FH DB 008H DB 01CH DB 02AH DB 008H DB 008H DB 008H DB 000H DB 000H DB 008H DB 008H DB 008H DB 02AH DB 01CH DB 008H DB 07FH DB 07EH ;STOP DB 081H DB 09DH DB 0A1H DB 0B9H DB 085H DB 085H DB 0B9H DB 000H ;CLICK DB 03CH DB 042H DB 05AH DB 05AH DB 042H DB 03CH DB 000H DB 088H ;15H DB 044H DB 022H DB 011H DB 088H DB 044H DB 022H DB 011H DB 000H ;SHLOCK DB 07FH DB 022H DB 072H DB 027H DB 022H DB 07FH DB 000H DB 011H ;17H DB 022H DB 044H DB 088H DB 011H DB 022H DB 044H DB 088H DB 000H ;CEOL DB 001H DB 009H DB 00DH DB 07FH DB 00DH DB 009H DB 001H DB 000H ;CTBOL DB 090H DB 0B0H DB 0FEH DB 0B0H DB 090H DB 000H DB 000H DB 000H DB 008H DB 07CH DB 006H DB 07CH DB 008H DB 000H DB 000H DB 0CCH ;1BH DB 0CCH DB 033H DB 033H DB 0CCH DB 0CCH DB 033H DB 033H DB 07EH ;LIST DB 081H DB 0A1H DB 0A1H DB 0A1H DB 0A1H DB 0BDH DB 081H DB 07EH ;RUN DB 081H DB 0B9H DB 0A5H DB 0B9H DB 0A5H DB 0A5H DB 081H DB 07EH ;CONT DB 081H DB 099H DB 0A1H DB 0A1H DB 0A1H DB 099H DB 081H DB 000H ;DEL DB 010H DB 03EH DB 060H DB 03EH DB 010H DB 000H DB 000H DB 07EH ;COPYRIGHT DB 081H DB 099H DB 0A1H DB 0A1H DB 099H DB 081H DB 07EH DB 000H ;a DB 000H DB 03CH DB 066H DB 066H DB 066H DB 03BH DB 000H DB 000H ;b DB 060H DB 060H DB 078H DB 06CH DB 06CH DB 078H DB 000H DB 000H ;c DB 000H DB 03CH DB 066H DB 060H DB 066H DB 03CH DB 000H DB 000H ;d DB 006H DB 006H DB 01EH DB 036H DB 036H DB 01EH DB 000H DB 000H ;e DB 000H DB 038H DB 06CH DB 07CH DB 060H DB 038H DB 000H DB 000H ;f DB 01EH DB 018H DB 07EH DB 018H DB 018H DB 018H DB 000H DB 000H ;g DB 000H DB 03CH DB 066H DB 066H DB 03FH DB 006H DB 03CH DB 000H ;h DB 060H DB 060H DB 06CH DB 076H DB 066H DB 066H DB 000H DB 000H ;i DB 018H DB 000H DB 018H DB 018H DB 018H DB 018H DB 000H DB 000H ;j DB 018H DB 000H DB 038H DB 018H DB 018H DB 018H DB 030H DB 000H ;k DB 060H DB 066H DB 06CH DB 078H DB 06CH DB 066H DB 000H DB 000H ;L DB 030H DB 030H DB 030H DB 030H DB 030H DB 018H DB 000H DB 000H ;m DB 000H DB 036H DB 07FH DB 06BH DB 063H DB 063H DB 000H DB 000H ;n DB 000H DB 07CH DB 066H DB 066H DB 066H DB 066H DB 000H DB 000H ;o DB 000H DB 03CH DB 066H DB 066H DB 066H DB 03CH DB 000H DB 000H ;p DB 000H DB 07CH DB 066H DB 066H DB 07CH DB 060H DB 060H DB 000H ;q DB 000H DB 03CH DB 066H DB 066H DB 03EH DB 006H DB 006H DB 000H ;r DB 000H DB 036H DB 038H DB 030H DB 030H DB 030H DB 000H DB 000H ;s DB 000H DB 01CH DB 030H DB 01CH DB 006H DB 03CH DB 000H DB 000H ;t DB 018H DB 018H DB 03CH DB 018H DB 018H DB 00CH DB 000H DB 000H ;u DB 000H DB 066H DB 066H DB 066H DB 066H DB 03CH DB 000H DB 000H ;v DB 000H DB 066H DB 066H DB 03CH DB 03CH DB 018H DB 000H DB 000H ;w DB 000H DB 063H DB 063H DB 06BH DB 07FH DB 036H DB 000H DB 000H ;x DB 000H DB 066H DB 03CH DB 018H DB 03CH DB 066H DB 000H DB 000H ;y DB 000H DB 066H DB 03CH DB 018H DB 030H DB 060H DB 000H DB 000H ;z DB 000H DB 07EH DB 00CH DB 018H DB 030H DB 07EH DB 000H DB 066H ;ae DB 000H DB 03CH DB 066H DB 066H DB 066H DB 03BH DB 000H DB 066H ;oe DB 000H DB 03CH DB 066H DB 066H DB 066H DB 03CH DB 000H DB 066H ;ue DB 000H DB 066H DB 066H DB 066H DB 066H DB 03CH DB 000H DB 000H ;sz DB 038H DB 06CH DB 078H DB 06CH DB 078H DB 060H DB 060H DB 0FFH DB 081H DB 081H DB 081H DB 081H DB 081H DB 081H DB 0FFH ;****************** ;Ende Zeichengenerator2 END