; ;Stand 05.07.1990 ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; ; 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 LEVEL3 EQU 1BH NL EQU 1EH DEL EQU 1FH TCUPO EQU 1FH BASIC EQU 0C00DH REBASIC EQU 0C08CH IOPUF EQU 0B700H FTASTE EQU 0B900H MWIND EQU 0BA00H-100 RTAB EQU 0BA00H ; Workspace-RAM STACK EQU 1C4H RAM EQU 1E4H 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 ; 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 WINNR EQU 0B79BH WINAN EQU 0B79CH WINLG EQU 0B79EH CRSR EQU 0B7A0H STBT EQU 0B7A2H 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 BSYSP EQU 0B7CBH NOMC EQU 0B7CDH RWEND EQU 0B7CFH FCONT EQU 0B7D1H HOR EQU 0B7D3H VERT EQU 0B7D5H FARB EQU 0B7D6H MIXIT EQU 0B7D7H COUNT EQU 0B7D8H ;frei (wird durch (ix-42) bedient) PUFAD EQU 0B7DAH BYTCT EQU 0B7DCH TONL EQU 0B7DEH WIN9 EQU 0B9F6H BLZK EQU 12 HEAD EQU 7F7FH ;Prolog PROMBT EQU '.' ;Prombtzeichen ;IX+0 Repeat-Counter ;IX+8 Kennbyte Tastatur ; Bit 0 g}ltiges Wort (IX+13) ; Bit 1 Ton l{uft ; Bit 2 3. Tastaturebene ; Bit 3 n.b. ; Bit 4 n.b. ; Bit 5 Tastaturbeep ; Bit 6 Code von F-Taste ; Bit 7 Shiftlock ;IX+9 Prologbyte ;IX+10 Tabulator ;IX+11 Prombtzeichen ;ix-42 Zeitverz\gerung bis zum Einsetzen der Autorepeatfunktion ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; .Z80 .PHASE 0E000H ;:::::::::::::::::::::::::::::::::::::: JP ST3 ;Warmstart JP ERW1 JP ERW2 JP ERW3 DEFW TOTAB IOCO: JP IO ;--------------------------------------- BASEIN: IN A,(P1AD) OR 80H ;SET 7,A OUT (P1AD),A RET ; DEFW HEAD DEFM 'BASIC' NOP CALL BASEIN JP BASIC ; DEFW HEAD DEFM 'REBASIC' NOP CALL BASEIN ;eventuell testen! JP REBASIC ; ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; 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 ;Spalten ? JR NC,PADR2 ;erster Teil ADD A,A ADD A,A ADD A,A ;Spalte * 8 LD L,H SRL H SRL H ;Zeile / 4 SCF RR H RRA SRL H RRA LD D,H SCF RR D SET 3,D LD E,A RR E RR L RRA RR L LD L,A RL H POP AF AND A RET PADR2: CP 40 JR NC,PADR3 ;au~erhalb PUSH BC AND 7 ADD A,A LD L,A LD A,H RLCA LD B,A AND 1 OR 0B0H LD D,A ;H-Teil Farbe LD A,B RLCA 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 einschieben RRA LD E,A POP BC POP AF AND A RET PADR3: POP AF ;au~erhalb SCF RET ;*__*__*__*__*__*__*__*__*__*__*__*__*__ TCIF: LD A,(WINLG) DEC A SUB E RET C ;Spaltenfehler LD A,(WINLG+1) DEC A SUB D RET ;bei Cy Zeilenfehler ;-------------------------------------- ; 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 ;Spalte im Fenster PUSH DE LD E,A ;merken akt. Pos. LD A,(WINAN+1) ADD A,D ;Zeile im Fenster ADD A,A ;*8 ADD A,A ADD A,A LD L,A ;in L merken LD H,0 ADD HL,HL ADD HL,HL ;*4 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 ;Farbe merken AND 0C0H ;Blinkbit + Farbverschiebung aus LD C,A ;nach C POP AF ;kompletter Farbwert PUSH AF ;merken AND 7 ;nur Hintergrund RLCA ;in Vordergrund wandeln RLCA RLCA OR C ; LD C,A ;merken POP AF ;kompletter Farbwert RRCA ;Vordergrund in Hintergrund RRCA RRCA AND 7 ;nur Hintergrundbits OR C ;+neuer Vordergrund RET ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; Ausdrucken eines Zeichens in A auf ; der rel. Pos. DE ; A: ASCII ; DE: rel. Cursor ; VR: / DISP: PUSH DE PUSH BC CALL CADR JR C,DISP5 ;au~erhalb LD BC,(STBT) ;B=Color,C=STBT EX DE,HL ;DE=Farb/HL=Pix BIT 1,C ;Farbe j/n? JR NZ,DISP1 LD M,B ;Farbe drucken SET 5,L LD M,B DISP1: LD HL,CCTL ;20h...5Fh ADD A,A ;A*2 JR NC,DISP2 ;kein Uebertrag 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 ;Berechnen Adr. INC HL ;f}r Zeichen LD H,M LD L,C ;HL:Anf.Adresse ADD A,A ;A*2 LD C,A LD B,0 ADD HL,BC ADD HL,BC ;Anfang Zeichen CALL DOCT ;in HL DISP5: POP BC POP DE 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 ;oberste Pixelzeile INC HL ;n[chste Pixelzeile LD (DE),A ;auf Bildschirm SET 7,E LD A,M INC HL LD (DE),A ;auf Bildschirm 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 ;L{nge der Zeile PUSH HL CALL PADR ;Adresse der Pixelzeile bestimmen JR C,LROLL1 ;ENDE EX (SP),HL ;HL=Pix PUSH DE ;DE=Farbe LD A,H ADD A,8 LD H,A CALL PADR EX (SP),HL ;HL=Pix 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 TLINE SET 5,L SET 5,E TLINE: 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 ;ASCII LD HL,STBT BIT 3,M ;Steuercode ausf]hren? JR NZ,PZEI ;nein! 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 ;Tabulator AND 0F8H ADD A,8 ;in 8er Schritten LD E,A JR ACUR+1 PZEI: CALL VADR ;ASCII ausgeben RET C ;geht nicht PZEI1: LD M,A ;Eintrag in Video-RAM PZEI2: CALL DISP ;Eintrag in Pixel-RAM 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 CALL ABEEP2 LD A,30H CALL WAIT LD A,3 OUT (CTC0),A LD A,16 JP WAIT ABEEP1: LD BC,20FH ;Tastenclick ABEEP2: LD HL,70H PUSH DE LD E,H CALL TONB POP DE RET ;--------------------------------------- AINVS: LD HL,COLOR LD A,M CALL COMPL LDHLA: LD M,A ;UP 28H RET ;--------------------------------------- LDAHL: LD A,M ;UP 29H RET ;--------------------------------------- AKBEEP: LD A,(IX+8) XOR 20H LD (IX+8),A RET: RET ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; Startadressen: ACTAB: DEFW RET DEFW ACLR DEFW AESC DEFW RET DEFW RET 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 AF EXX CALL CRT1 LD (CRSR),DE EXX POP AF 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 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 CP 20 JR C,ITEND ;neue Bet{tigung CP TGE0 JR NC,ITA ;Null erkannt ADD A,-TGE1 JR C ,ITA ;Eins erkannt LD A,(IX+12) RRA XOR 1 CP 61 ;I-Bus BREAK JR Z,IBREAK 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 POP DE POP HL 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 PUSH AF LD A,(ix-42) ;hier mu~ (ix-...)!!! CP (IX+10) ;dann auch bei ALLINIT!!! JR C,IT3 POP AF INC (IX+10) JR ITEND ;Taste okey ;_______________________________________ ITA: RR (IX+12) ;Bit einschieben ITEND: POP AF RETI IBREAK: CALL EIRETI JP ST3 ;_______________________________________ IT3: POP AF JR IT12 IT11: LD (IX+10),0 CP SHLK JR Z,IT20 IT12: LD (IX+13),A SET 0,(IX+8) JR ITEND IT20: LD A,(IX+8);Shiftlock XOR 80H LD (IX+8),A LD A,SHLK JR IT12 ; 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 '$' 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: ; ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; Interrupttabelle: 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 ;keine Taste gedr]ckt LD A,(IX+13) ;Code ]bernehmen SCF RET ; Keyboard-Routinen ; A: Code ; CY: gedr}ckt ; VR: AF KBD: CALL KBDS RET NC RES 0,(IX+8) 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,D ; "" 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 E,M ;Lesen LD D,E MODUL0: IN H,(C) RET MODUL1: LD M,D LD A,L CP 2 JR Z,MODUL6 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 MODUL6: IN A,(P1AD) BIT 0,D RES 7,A JR Z,MODUL3 SET 7,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 ;--------------------------------------- PTAB: DEFB 80H DEFB 40H DEFB 20H DEFB 10H DEFB 8 DEFB 4 DEFB 2 DEFB 1 ; ************************* ; * * ; * Tape-Input/Output * ; * * ; ************************* ; KASSETTENFORMAT ANALOG ZU ROBOTRON ; KOMPLETTE SCHWINGUNGEN !!! ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; ; 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 LD HL,IOPUF+80H XOR A RINIT1: DEC L LD M,A JR NZ,RINIT1 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) 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 IN A,(P1AD) OR 60H CALL INIT LD (IX+2),0;Block 1 LD BC,0A00H;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: CALL BRKT JR C,LED 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 DI LD A,3 ;PIO-Stop-INT OUT (P1AC),A EI 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: HALT ;CTC eingeles. LD A,(IX) LD C,A ; C=1.Halbschw. LS1: HALT ; 2.Halbschw. LD A,(IX) ADD A,C ; Summe bilden RET ; Eingabe eines Bytes IBYTE: LD DE,800H IB1: CALL LSTOP ;Bit Eingabe JR C,IB2 ;Nullbit ? CP IKEG1 ; Einsbit RET C ;Trennzeichen IB2: CCF RR E ;einschieben DEC D JR NZ,IB1 CALL LSTOP LD A,E ;Byte in A RET ;_______________________________________ ; Interruptroutine f}r Tondauer TONLG: PUSH AF CALL 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 ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ;B A S I C - S C H N I T T S T E L L E ;Adressen und Daten aus BASIC-Kern LDTOK EQU 0D0H SGTOK EQU 0B6H GBTOK EQU 08CH RTTOK EQU 08BH ELTOK EQU 0D4H TNTOK EQU 0A9H GTTOK EQU 088H DISTA EQU 354H DTFLG EQU 35EH PSBEG EQU 35FH ANF EQU 34EH NANF EQU 352H SVARP EQU 3D7H ENDE EQU 350H STRDA EQU 3C0H PRFLG EQU 3FDH COLRE EQU 37EH RNDV EQU 31DH ININD EQU 309H IOCHL EQU 307H INTPR EQU 3EAH NEW EQU 0C641H 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 ;*************************************** ;INPUT: D- DATEN ; E- CONROL ; HL- NAME 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 7 LD HL,CHNL 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 'VER. ?(Y):' NOP CALL BLINK CP 'Y' CALL Z,VERIF RSTR1: LD A,D RES 3,E CALL BWSF POP BC POP HL RET ;--------------------------------------- CHNL: DEFB ZINNN DEFB ZROUT DEFB ZMBIN DEFB ZMBOT DEFB ZUIN DEFB ZUOUT DEFB ZUIN2 DEFB ZUOT2 ;--------------------------------------- STATU: CALL KBDS POP DE LD D,A JR NC,RSTR1 RES 7,E JR RSTR1 BYETS: LD A,(DTFLG) AND A JR Z,BYE1 CALL BWSF CALL NEW CALL BWSN BYE1: IN A,(P1AD) RES 7,A OUT (P1AD),A JP PARSE ;-------------------- 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 ;-------------------- ERW2: LD A,M CP INTOK RET C CP COTOK+1 RET NC CP ATTOK JP Z,AT LD A,(PRFLG) AND A JR NZ,ERR1 INC A LD (PRFLG),A ERW21: PUSH HL LD HL,COLOR CALL VSAM POP HL LD (COLRE),A LD A,M CP INTOK JR Z,INPRT CP COTOK JP Z,PRTCL CALL TCHAR CALL PAPER PAP1: LD A,M CP ';' JR Z,CLRG1 JR ERR1 PRTCL: CALL TCHAR CALL UPCOL JR PAP1 ERR1: JP SNER1 INPRT: CALL TCHAR CALL INK LD A,M CP ';' JR Z,CLRG1 CALL CPSTX DEFB ',' CP PPTOK JR NZ,ERR1 CALL TCHAR CALL PAPER CALL CPSTX DEFB ';' CLREG: CALL PRT2 LD A,(COLRE) PUSH HL LD HL,COLOR CALL VSMA POP HL POP BC RET AT3: PUSH BC JR ERW21 CLRG1: CALL TCHAR JR CLREG ERW3: LD A,C 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 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 STRIG: CALL CPSTX DEFB '(' CALL ARGV1 PUSH AF CALL CPCOM CALL SNALY CALL CPRGT POP AF PUSH HL PUSH AF CALL LEN1 INC HL INC HL LD E,(HL) INC HL LD D,(HL) POP BC PUSH BC PUSH AF PUSH DE LD C,A 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 LD C,0 PUSH BC CALL STROP POP BC POP BC PUSH BC CALL SADB1 POP HL EX (SP),HL LD A,H POP HL EX (SP),HL LD L,A INC H STR4: DEC H PUSH HL PUSH BC JR Z,STR3 CALL STRV1 POP BC POP HL JR STR4 STR3: POP BC POP HL POP DE 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 LD (NANF),HL LD DE,(SVARP) DEC DE DEC DE RNUM1: POP HL PUSH HL LD A,(HL) INC HL LD H,(HL) LD L,A CALL CPREG EX (SP),HL JR NZ,RNUM1 POP DE INC HL INC HL LD A,M INC HL LD H,M LD L,A LD (ENDE),HL LD B,4 POP AF LD HL,ANF EX (SP),HL RNUM2: JR Z,RNUM5 CALL DCHEX PUSH AF LD A,D OR E RNUM3: JP Z,FCER POP AF EX (SP),HL LD (HL),E INC HL LD (HL),D INC HL JR Z,RNUM5 PUSH AF DEC B JR Z,RNUM4 POP AF EX (SP),HL CALL CPCOM JR RNUM2 RNUM4: POP AF JP NZ,SNER RNUM5: LD HL,(ENDE) LD DE,(ANF) CALL CPREG RNU5A: JP C,FCER LD HL,(PSBEG) RNUM6: CALL ZPOI1 JR C,RNUM7 JR Z,RNUM3 JR RNUM6 RNUM7: POP HL PUSH BC LD DE,(ENDE) LD HL,0 LD (ENDE),HL RNUM8: LD H,B LD L,C LD C,M INC HL LD B,M LD A,B OR C JR Z,RNUM3 INC HL LD A,M INC HL LD H,M LD L,A CALL CPREG LD HL,(ENDE) INC HL LD (ENDE),HL JR NZ,RNUM8 INC HL INC HL ADD HL,HL INC HL LD DE,(SVARP) ADD HL,DE JR C,RNU5A CALL TMEM1 LD (SVARP),HL XOR A DEC HL LD M,A DEC HL LD M,A DEC DE DEC DE EX DE,HL LD M,E INC HL LD M,D INC HL DEC A LD M,A INC HL LD M,A INC HL EX DE,HL LD HL,(NANF) LD (ANF),HL RNUM9: POP HL LD C,M INC HL LD B,M INC HL PUSH BC LD BC,ANF LD A,M LD (DE),A LD A,(BC) LD M,A INC HL INC DE INC BC LD A,M LD (DE),A LD A,(BC) LD M,A INC DE LD HL,(ANF) LD BC,(DISTA) ADD HL,BC LD (ANF),HL LD HL,(ENDE) DEC HL LD A,H OR L LD (ENDE),HL JR NZ,RNUM9 LD (DE),A POP HL LD HL,(PSBEG) PUSH HL RNU10: POP HL LD C,M INC HL LD B,M INC HL PUSH BC LD A,M INC HL AND M INC A JR Z,RNU13 RNU11: INC HL RNU12: LD A,M 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 CALL NZ,RNU18 JR RNU12 RNU13: DEC HL LD (SVARP),HL DEC HL LD M,A DEC HL LD M,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,M CP ',' JR NZ,RNU12 JR RNU24 RNU14: PUSH HL PUSH DE LD DE,65535 CALL ZPOIT POP DE INC BC INC BC INC BC INC BC LD H,B LD L,C LD BC,(NANF) RNU15: LD A,M INC HL PUSH HL OR M JR Z,RNU17 LD A,(HL) DEC HL LD L,M LD H,A CALL CPREG JR Z,RNU16 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 EX DE,HL LD HL,(SVARP) SBC HL,DE PUSH HL RNU19: POP BC LD H,D LD L,E DEC DE LD A,(DE) CP ',' JR Z,RNU20 CP 3AH JR NC,RNU20 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,M 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,M INC HL OR M JR NZ,RNU26 EX DE,HL LD M,E INC HL LD M,D INC DE INC DE LD (SVARP),DE POP HL LD D,H LD E,L RNU25: LD A,M 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 JR NZ,PAUS0 PAUS1: CALL KBDS JR NC,PAUS1 CP 3 RET Z CP 0AH ;Cursor down JR NZ,PAUS1 JP CI PAUS0: CALL ARGV1 LD C,A PAUS3: LD A,16 LD E,14H CALL VSCAL PUSH BC CALL KBDS POP BC JR NC,PAUS2 CP 3 RET Z CP 0AH JR NZ,PAUS2 JP CI PAUS2: DEC C JR NZ,PAUS3 RET BBEEP: LD B,1 CALL TCHA1 JR Z,BEE1 CALL ARGV1 LD B,A BEE1: LD A,7 LD E,0 BEE2: CALL VSCAL BEE3: BIT 1,(IX+8) JR NZ,BEE3 DJNZ BEE1 RET WINDO: CALL TCHA1 JR Z,WIND2 PUSH HL CALL ARGV1 EX (SP),HL LD HL,WIN9 CALL VSMA INC HL EX (SP),HL CALL CPCOM CALL ARGV1 EX (SP),HL CALL VSMA INC HL EX (SP),HL CALL CPCOM CALL ARGV1 EX (SP),HL CALL VSMA EX (SP),HL CALL CPCOM CALL ARGV1 EX (SP),HL LD D,A CALL BWSN CP 40 JR NC,ER5 LD A,(WIN9+2) LD E,A CP 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 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 CALL BWSN LD HL,100H LD (WINAN),HL LD HL,1E28H LD (WINLG),HL WIND3: LD HL,0 LD (CRSR),HL CALL BWSF POP HL RET ER5: CALL BWSF JR SNER BLOAD: PUSH HL LD HL,ARGN XOR A CALL VSMA POP HL LD E,10H JP VSCAL VPEEK: CALL SNL14 EX (SP),HL LD DE,SNL16 PUSH DE CALL EPRV3 PUSH HL LD HL,8000H ADD HL,DE JR C,VP1 LD A,0BFH CP H VP1: JR C,SNER CALL VSAM POP HL JP INP1 SNER: JP SNER1 VPOKE: CALL EPRV4 PUSH DE CALL CPCOM CALL ARGV1 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: RET AT: LD A,(PRFLG) BIT 1,A SET 1,A LD (PRFLG),A JR NZ,SNER PUSH DE PUSH HL CALL BWSN 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 CALL BWSF POP HL CALL LOKA1 CALL CPRGT CALL CPSTX DEFB ';' LD A,M CP INTOK JR C,AT1 CP COTOK+1 JR NC,AT1 CALL AT3 AT2: PUSH HL CALL BWSN LD HL,WIN9-10 LD DE,WINAN LD BC,6 LDIR CALL BWSF POP HL POP DE POP BC RET AT1: CALL PRT2 JR AT2 SNER2: JP SNER1 INK: CALL ARGV1 CP 32 JR NC,SNER2 SLA A SLA A SLA A LD D,A PUSH HL LD HL,COLOR CALL VSAM POP HL AND 7 JR PIP1 PAPER: CALL ARGV1 CP 8 JR NC,SNER2 LD D,A PUSH HL LD HL,COLOR CALL VSAM POP HL AND 0F8H PIP1: OR D PUSH HL LD HL,COLOR CALL VSMA POP HL PIP2: RET UPCOL: CALL TCHA1 JR Z,SNER2 CALL INK CALL TCHA1 RET Z CALL CPCOM JR PAPER LOKA1: CALL TCHAR CALL CPSTX DEFB '(' LOKAT: CALL ARGV1 LD D,A PUSH HL LD HL,WINLG+1 CALL VSAM POP HL DEC A CP D JR C,SNER2 CALL CPCOM PUSH DE CALL ARGV1 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 CALL VSMA LD A,D INC HL LOK1: CALL VSMA POP HL RET INKEY: PUSH HL CALL KBDS JR NC,INKE1 LD A,1 CALL STADB CALL CI INKE3: LD HL,(STRDA+2) LD M,A INKE2: JP SLEN3 INKE1: XOR A CALL STADB JR INKE2 SOUND: CALL ARGV1 PUSH HL LD HL,ARG1 LD B,4 SND2: CALL VSMA INC HL EX (SP),HL DEC B JR Z,SND1 PUSH BC CALL CPCOM CALL ARGV1 POP BC EX (SP),HL JR SND2 SND1: CALL TCHA1 JR Z,SND3 CALL CPCOM CALL ARGV1 EX (SP),HL CALL VSMA INC HL EX (SP),HL CALL TCHA1 JR Z,SND3 CALL CPCOM CALL ARGV1 EX (SP),HL CALL VSMA EX (SP),HL SND3: LD E,35H POP BC JP VSCAL PSET: LD B,1 PSET1: PUSH BC CALL EPRV4 PUSH HL LD A,E LD HL,HOR CALL VSMA LD A,D INC HL CALL VSMA EX (SP),HL CALL CPCOM CALL ARGV1 EX (SP),HL INC HL CALL VSMA POP HL CALL PFARB PS1: LD E,30H POP BC DEC B JR Z,PS2 DEC E PS2: CALL VSCAL JP C,SNER RET PERES: LD B,0 JR PSET1 PFARB: CALL TCHA1 RET Z CALL CPCOM CALL ARGV1 PUSH HL LD HL,HOR+3 RLA RLA RLA JP LOK1 INSTR: CALL SNAL6 CALL CPCOM PUSH HL CALL LEN1 JR Z,INST LD B,A INC HL INC HL LD E,M INC HL LD D,M POP HL PUSH DE PUSH BC CALL SNALY CALL CPRGT POP BC POP DE PUSH HL PUSH DE PUSH BC CALL LEN1 JR Z,INST INC HL INC HL LD C,M INC HL LD H,M LD L,C POP BC LD C,A POP DE PUSH HL INST1: PUSH BC PUSH DE LD A,(DE) INST2: CP M 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 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 M 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 BKEY: CALL ARGV1 AND A JP Z,SNER4 CP 13 JP NC,SNER4 LD E,39H VS1: JP VSCAL KEYLI: LD E,3AH JR VS1 SWIT: CALL ARGV1 PUSH AF CALL CPCOM CALL ARGV1 LD D,A POP AF PUSH HL LD L,A LD A,2 LD E,26H CALL VSCAL POP HL RET ;*************************************** ? ;......................................... DEFS 0EE00H-$ ; ;-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 ; ; Sprungverteiler ab Adresse F000H 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 VSCAL: JP VSC ;BASIC }ber E BWSON: JP BWSN BWSOF: JP BWSF ;*__*__*__*__*__*__*__*__*__*__*__*__*__ SVSPR: PUSH BC CALL BWSN CALL SYS2 JR VSC1 VSC: PUSH BC CALL BWSN CALL SYS3 VSC1: CALL BWSF POP BC RET ;--------------------------------------- ;Aufruf der Systemunterprogramme SYS4: PUSH AF IN A,(P1AD) INTT1 EQU $+1 OR 4 OUT (P1AD),A ;BWS ein POP AF CALL SYS3 ;Aufruf }ber E IRMOFF: PUSH AF IN A,(P1AD) AND 0FFH-4 OUT (P1AD),A ;BWS aus POP AF RET ;------------------------ SYS1: PUSH HL DI POP HL POP HL ;TOS=TOS+1 INC HL PUSH HL DEC HL DEC SP DEC SP ;Korr. Stack EI PUSH DE LD E,M POINTA: LD D,0 SYSNR: LD HL,(STAB) ADD HL,DE ADD HL,DE ;HL->Startadr. LD E,M INC HL LD D,M EX DE,HL ;HL=Startadr. POP DE PRS2: EX (SP),HL RET ;--------------------------------------- SYS2: AND A PUSH HL PUSH DE PUSH BC PUSH HL LD HL,RPOP EX (SP),HL PUSH HL PUSH DE JR C,POINTA LD DE,(ARGC) JR POINTA ;------------------------ SYS3: SCF JR SYS2+1 ;------------------------ BWSN: POP BC EX AF,AF' IN A,(P1AD) SET 2,A OUT (P1AD),A EX AF,AF' DI LD (BSYSP),SP LD SP,(SYSP) EI PUSH BC RET ;----------------------- BWSF: POP BC DI LD SP,(BSYSP) EI EX AF,AF' IN A,(P1AD) RES 2,A OUT (P1AD),A EX AF,AF' PUSH BC RET ;------------------------ RPOP: POP BC 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 (SP),HL PUSH DE RET ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ;Einstieg nach Kaltstart START: LD SP,STACK XOR A LD B,A LD C,A CL1: LD (BC),A DEC C JR NZ,CL1 DJNZ CL1 ;RAM l|schen LD C,80H CL2: OUT (C),A DJNZ CL2 CALL ALLINIT ;Fensterspeicher initialisieren XOR A FEN: LD (WINNR),A CALL WINS INC A CP 10 JR C,FEN ;--------------------------------------- LD BC,880H ;Anf.Schacht ST2: IN A,(C) CP 0F4H ;16K DRAM JR Z,ST02 INC B LD A,B CP 0F5H ;letzt. Schacht JR C,ST2 JR ST03 ST02: LD L,B LD D,43H CALL MODUL ;Einschalten RAM JR ST03 ;NICHT NOCH MAL INITIALISIEREN ;--------------------------------------- ;Einsprung nach RESET ST3: LD SP,STACK CALL ALLINIT ;alles Initial. ST03: RES 1,(IX+8) LD BC,880H ;Test Str.by. 1 IN A,(C) DEC A JR NZ,FLOP ;kein Modul mit Autostart LD A,43H OUT (C),A JP 4000H ;--------------------------------------- ;Test auf D004 FLOP: LD B,0FCH ;Floppy da IN A,(C) CP 0A7H JR NZ,MRET LD H,0B8H LD L,B LD A,M CP 0FDH JR Z,MRET ;3 Versuche f}r Floppy-Start LD A,3 ;Zahl Versuche RETF1: EX AF,AF' LD A,0FCH LD HL,RETF2 PUSH HL JP JUMP RETF2: EX AF,AF' DEC A JR NZ,RETF1 JR MRET ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; Men} Display DEFW HEAD DEFM 'MENU' DEFB 1 MRET1: POP HL ;Stack begradigen MRET: CALL PRS ;Kopfzeile ausgeben DEFB CLS DEFW 0A0DH DEFM '*OS* pi/90*' DEFW 0A0DH NOP ; Men}-Aufbau MENLO: LD HL,0BA00H ;Anf.Suchber. ld b,0c6h ;Suchbereich einschr[nken LD C,L MN2: CALL CRLF MN3: LD A,ESC CALL CRT LD A,(IX+11) ;Prombtzeich. CALL CRT CALL BRKT JR C,PARS1 ;Ende Men} bei BRK LD A,(IX+9) ;Prolog 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 ;Bytez{hler JR MENU4 ;------------------------ ; Main Monitor Loop PERRP: POP HL PERR: CALL ERRM PARSE: LD A,(IX+11) CALL CRT PARS1: CALL INLN INC DE ;DE =Zeilenanf. LD A,(DE) CP ' ' ;nur Leerzeichen JR Z,PARSE AND A ;nichts JR Z,PARSE CALL ZSUCH0 JR NC,PERR ;Cy=1: gefunden PUSH HL ;HL-> Epilog CALL RLIN JR C,PERRP ; Call command Routine PEND: LD HL,PARSE ;RET-Adresse EX (SP),HL LD A,M INC HL PUSH HL AND A ;Epilog=0 ? CALL ARGS RET NZ ;Start des Prog JP IRMOFF ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; Stringsuchprogramm ;HL Anfang Suchbereich ;BC L{nge ;A Prolog-Byte ZSUCH0: LD HL,0BA00H ;neuer Anf. LD B,L LD C,L ZSUCH: LD A,(IX+9) ZSUC2: CPIR ;Suche 7Fh SCF CCF RET PO CPI JR NZ,ZSUC2 SUCH: PUSH AF ;UP 1DH 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 ;Epilog 1 / 0 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 ;UP 23h PRS1: LD A,M INC HL AND A JP Z,PRS2 ;Ende erreicht CALL ROUT ;Zeichen ausgeben 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 ;UP 04h PUSH DE PUSH BC BIT 6,(IX+8) ;F-Taste? JR NZ,BL2 BL0: LD E,0 ;E=0 BL10: CALL CUCPL ;Cursor setzen INC E ;z{hlen BIT 7,(IX+8) ;Shift lock JR NZ,BL101 LD B,7 JR BL11 BL101: 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. 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: BIT 5,(IX+8) ;Beeps JR Z,BOFF LD D,A CALL NZ,ABEEP1 ;Tastaturclick 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 ;0B900H BL4: LD A,M AND A INC HL JR NZ,BL4 DJNZ BL4 ;suchen nach der B.ten JR BL3 BL2: LD HL,(FCONT) BL3: BIT 0,(IX+8) ;Taste gedrueckt! JR NZ,BLBRK LD A,M INC HL LD (FCONT),HL AND A ;letztes Zeichen d. F-Taste JR NZ,REGPOP BLBRK: RES 6,(IX+8) JR BL0 ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; Arbeitsspeicher Initialisierung INITT: DEFW DRET ;Hcopy DEFB 0 ;Win.Nr. DEFW 0 ;Win.Anf. DEFW 2028H ;Window DEFW 0 DEFB 0 DEFB 31h ;wei~ 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 ;IOERR1 INITX: ; ;------------------- ZEILENEINGABE ------------------- INLN: CALL ICHR ;Zeichen einlesen CALL ROUT ;anzeigen CP CR ;letztes Zeichen? JR NZ,INLN ;nein 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 ;UP 19h DEFM 'ERROR' DEFB BEEP NOP RES 6,(IX+8) ;F-Tastenabbruch ;------------------- AUSGABE NEWLINE --------------------- CRLF: CALL PRS DEFB CR DEFB CUD NOP 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) ;UP 18h CP ' ' ;Blanks ignor. 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 ;UP 22h XOR A LD (BC),A INC DE 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 ; Monitor Initialisierung ALLINIT: LD D,7 LD HL,JTATA CALL JNITT LD DE,HCADR LD HL,INITT LD BC,INITX-INITT LDIR ;Umladen LD A,4 LD (ix-42),A SUB 3 ;SET INTERRUPT-TABLE SIXD: LD HL,ITAB ;UP 31h LD (MIXIT),A LD E,LOW(RAM) 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+9),LOW(HEAD) LD (IX+10),8 ;Tabulator LD (IX+11),PROMBT LD HL,KTAB LD (IX+14),L LD (IX+15),H RET JNITT: DI IM 2 ;INTERRUPTMODE 2 LD A,(MIXIT) LD I,A 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 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 ;* Kassetten-INT DEFB 1 DEFB LOW(PIOINT) ;INT-VEKTOR DEFB P1AD DEFB 1 DEFB 01fH ;RAM,ROM JTATA1: DEFB P1AC DEFB 2 DEFB 0FH DEFB 3 DEFB P1BC ;* Tastatur-INT DEFB 3 DEFB LOW(PIOINT)+2 DEFB 0FH ;BYTE-AUSGABE DEFB 83H ;INT AKTIV DEFB P1BD ;* DEFB 1 DEFB 09FH ;Lautst{rke 0 DEFB CTC0 DEFB 1 DEFB LOW(CTCINT) DEFB CTC2 ;* BLINK ON DEFB 2 DEFB 47H ;Z{hler mit 50Hz DEFB BLZK ;Zeitkonst. ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; SAVE Kommando DEFW HEAD DEFM 'SAVE' DEFB 1 CP 2 JP C,ERRM HACK: CALL PRS ;zum Kopieren von gesch]tzten Dateien DEFM 'NAME :' NOP CALL INLN ;Namen einlesen LD HL,6 ;nur 6 Buchstaben ADD HL,DE SAVE: LD DE,IOPUF LD BC,11 LDIR ;Umladen Name XOR A LD (DE),A ;Copy Prot. LD HL,ARGN LD E,16 LD C,21 LDIR ;EINTRAG ARGUMENTE CALL ISRLX ;1. Block LD HL,(ARG1) ;----------------------- WR1: LD (IX+5),L LD (IX+6),H CALL PRS DEFB 2 NOP CALL PBLNR NOP LD BC,60 ;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 in Register ARGS: LD BC,(ARG3) ;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 ;NC = Daten ok CALL PRS DEFW 909H DEFB 9 DEFM ' ' NOP CALL PBLNR ;Pr}fsumme false DEFM ' ?' DEFB NL NOP CALL BLINK CP BRK SCF RET Z CP 0AH 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 NOP JR RD0 RD2: CALL PBLNR DEFM '> ' ;richtig DEFB 19H NOP 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 '???' NOP RINT: JP RINIT ; ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; Lesen von Band DEFW HEAD DEFM 'v' 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 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) ADD HL,BC EX DE,HL ADD HL,BC EX DE,HL BIT 2,(IX+4) JR NZ,RR5 EX (SP),HL ADD HL,BC EX (SP),HL RR5: POP BC R5: LD (ARG1),HL LD (ARG2),DE LD (ARG3),BC 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 CALL BUFCOP 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 FRAG: CALL PRS DEFW 0A0DH DEFM ' (C)opy, (B)rk or (S)tart !' NOP CALL BLINK CP 'B' JP Z,ST3 CP 'C' JR NZ,AUTOS CALL CRLF LD A,3 LD (ARGN),A CALL HACK JR FRAG AUTOS: LD HL,(ARG3) RES 0,(IX+7) ;AUTOSTARTBIT RUECKSETZEN! JP (HL) BUFCOP: PUSH HL SBC HL,DE LD BC,80H SBC HL,BC ADD HL,BC JR NC,BUFCO1 LD C,L BUFCO1: LD HL,IOPUF LDIR POP HL RET ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; 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 ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; 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 4 ; C: Bytes/Zeile(-""->2), sonst 8 DEFW HEAD DEFM 'DUMP' DEFB 1 DISPL: CP 3 JR NC,DIS1 LD C,8 CP 2 JR NC,DIS1 LD E,4 ;4 Zeilen 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 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 ;ohne Param. 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 ;DE=Anfang JP C,PADR3 ;POP AF, RET POP AF LD HL,WINAN WINS1: LD BC,10 LDIR ; CALL FCLS 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 ;Nummer Taste LD HL,FTASTE KEY1: LD A,M INC HL AND A ;Endekennung 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 'KLIST' DEFB 1 KEYL: LD HL,FTASTE LD BC,0CF0H;C=Name,B=Count. KEYL1: INC C LD A,C CALL AHPS DEFM ' :' ;Name NOP CALL PKEY1 ;Taste CALL CRLF ;Zeile DJNZ KEYL1 RET ;*__*__*__*__*__*__*__*__*__*__*__*__*__ CUCPL: ; ESCC1: 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,HIGH(PTAB) LD A,(VERT) CPL JP POIAD1 ; Punkt setzen PUSET: PUSH HL PUSH DE PUSH BC CALL PUNKT JR C,PSS1 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. PSS1: POP BC POP DE POP HL RET ; Punkt r}cksetzen PURES: PUSH HL PUSH DE PUSH BC CALL PUNKT JR C,PSS1 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 PSS1 ;....................................... LIN: LD HL,(ARG2) LD DE,(ARG4) EXX LD HL,(ARG1) LD DE,(ARG3) ;Argumente LX1: XOR A SBC HL,DE JR NC,LX2 ;(Xa-Xe)>=0 ADD HL,DE ;Xe OK EX DE,HL ;Anf=Ende EXX EX DE,HL EXX JR LX1 LX2: EXX PUSH DE ;Ye in Stack LX3: SBC HL,DE JR NC,LX4 ;(Ye-Ya)>=0 ? ADD HL,DE EX DE,HL ;Ye=Ya OR 1 ;Bit 0 von A=1 JR LX3 LX4: PUSH HL ;DY in Stack EXX POP BC ;DY aus Stack PUSH HL SBC HL,BC ;DX-DY POP HL PUSH BC JR NC,LX5 EX (SP),HL OR 2 LX5: PUSH HL 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 ;....................................... ;PE: ARG1 = x-Wert ; ARG2 = X-Wert ; Low ARG3 = Radius ;VR: AF,BC,DE,HL,BC',DE',HL' CIRC: LD A,(ARG3) 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 ;--------------------------------------- ;POINT-UP ;PE: HL=x-Wert ; DE=y-Wert ;(FARB) BIT 3...7 : Farbe ; BIT 2 : nicht verwendet ; BIT 1=1 : PRESET ; BIT 0=1 : PXOR ;--------------------------------------- POINT: PUSH HL PUSH DE PUSH BC PUSH AF CALL POIAD ;Adr.Rechnung ;DE=Farbe ;HL=Pixel JR C,POEND ;ausserhalb PUSH DE ;Farbadr. merken LD DE,(FARB) BIT 0,E JR NZ,POXOR BIT 1,E JR NZ,PORES POP DE OR (HL) PU1: LD (HL),A LD A,(FARB) AND 0F8H LD B,A LD A,(DE) AND 7 OR B LD (DE),A POEND: POP AF POP BC POP DE POP HL RET PORES: CPL AND (HL) LD (HL),A POP DE JR POEND POXOR: XOR (HL) RES 0,E POP DE JR PU1 ;********************** POIAD: 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,D ADD A,0FFH RET C XOR E POIAD1: LD H,A LD A,(BC) JP PADR ;*__*__*__*__*__*__*__*__*__*__*__*__*__ ; B Y T E - I N P U T / O U T P U T - ; R O U T I N E N ;Byteweise Ausgabe auf Kassette MBOT: LD E,D ;UP 38h LD D,A PUSH DE PUSH BC BIT 3,E ;INIT? JR Z,KINUT ;nein SET 1,(IX+7) ;OUT 1.Block LD A,0D5H ;CSAVE or LIST? CP M PUSH DE LD DE,0A0H ;Vortonl{nge CS JR NZ,KUTO LD DE,500H ;VT-L{nge LIST# KUTO: LD (TONL),DE ;merken LD DE,IOPUF LD BC,11 ;Typ+Name LDIR EX DE,HL POP DE LD M,D LD A,80H-0CH ;L{nge Pu 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,ENDEL LD A,(BYTCT) DEC A JR NZ,EE ;Puffer voll ? BIT 1,(IX+7) ;INIT ? JR NZ,INITO CALL NORMO ;Normal Output CALL AA1 ;BYTC+PUFAD lad. JR EE1 INITO: RES 1,(IX+7) CALL ISRLX CALL KENN CALL AA1 EE4: JR EE1 ENDEL: 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 ;--------------------------------------- MBIN: LD E,D LD D,A PUSH DE PUSH BC BIT 6,E ;Ende ? JR NZ,EE2 BIT 3,E ;INIT BIT ;}bernahme 1.By. JR Z,FOBLO FIRBL: LD A,1 ;1. Block LD (IX+3),A PUSH HL CALL ISRLI FIRBO: POP HL JP C,IBLNE LD A,(IX+2) CP 1 ;gelesene Bl.Nr. JP NZ,IBLNE RES 7,(IX+7) INC (IX+3) LD DE,IOPUF NVERG: LD B,11 ;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 4 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 ;Name ok SET 7,(IX+7) ;Name false RIGHT: INC HL INC DE DJNZ PRNAM CALL CRLF BIT 7,(IX+7) JP NZ,BRK2 EX DE,HL ;Pufferadr.>HL LD A,80H-11 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 ;Blocknummer falsch LD A,'*' CALL CRT CALL PBLNR DEFB 19H NOP NEX1: CALL BRK1 JR NEXTB ;--------------------------------------- FDAT: INC (IX+3) DEC A BIT 5,(IX+7) JR NZ,FDT3 CALL PBLNR DEFM '<' DEFB 19H NOP FDT3: CALL AA1 LD HL,(PUFAD) JR FOBYT FDT2: CALL PRS DEFW 909H DEFW 909H DEFM '?' NOP CALL PBLNR DEFW 0A0DH NOP JR NEX1 ;....................................... IBLNE: CALL PRS ;falsche Bl.Nr. DEFM '#' DEFB 8 NOP CALL BRK1 CALL SRLIN PUSH HL JP FIRBO NORMO: LD BC,(TONL) CALL SRLX KENN: CALL PBLNR DEFM '<' DEFB 19H NOP BRK1: CALL BRKT RET NC BRK2: LD HL,(IOERR1) CALL BWSF JP (HL) AA1: LD A,80H LD HL,IOPUF JR LDPU1 LDPUB: INC HL LDPU1: LD (PUFAD),HL LD (BYTCT),A RET ;--------------------------------------- ;Ausgabe einer }ber HL adr.Zeichenkette ZKOUT: LD A,M INC HL AND A RET Z CALL ROUT JR ZKOUT WURZ: XOR A LD A,-1 LD E,A LD D,A WURZ1: INC A INC DE INC DE SBC HL,DE JP P,WURZ1 RET ;-------------------------------------- MULT: LD B,0 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 RET ;-------------------------------------- DEFW HEAD DEFM 's' DEFB 1 MODCH: LD L,8 MOK1: LD A,1 CALL MODUL LD A,H INC A JR Z,MOK0 LD A,L CALL AHSP LD A,H CALL AHSP LD A,D CALL AHEX CALL CRLF MOK0: LD A,L ADD A,4 LD L,A JR NC,MOK1 RET ;----------------------------------------- PTEST: CALL SNL14 EX (SP),HL LD DE,SNL16 PUSH DE CALL EPRV3 PUSH HL LD A,E LD HL,HOR CALL VSMA LD A,D INC HL CALL VSMA LD E,2FH CALL VSCAL LD B,0 JR Z,PT1 INC HL INC HL CALL VSMA LD E,30H CALL VSCAL 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,CLO1 INC C CP 'O' JR NZ,SNER4 CLO1: PUSH BC INC HL LD A,M CP '#' SNER5: JR NZ,SNER4 INC HL CALL ARGV1 AND 3 POP BC RET Z PUSH HL RL A ADD A,C PUSH AF DEC A LD B,0 SCF CLO3: RL B DEC A JR NZ,CLO3 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 IO POP DE RET RAND: LD A,R LD (RNDV),A RET OPEN: LD A,M INC HL CP 'I' JR Z,IOPEN CP 'O' SNER6: 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 LINE: LD BC,43EH ;B=Zahl Para JR GRAPH CIRCL: LD BC,33FH GRAPH: PUSH BC CALL EPRV4 POP BC PUSH BC PUSH HL LD HL,ARG1 GRA1: LD A,E CALL VSMA ;M=:E INC HL LD A,D CALL VSMA ;M=:D 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 VSCAL CSRLN: CALL SNL14 EX (SP),HL LD DE,SNL16 PUSH DE CALL ARGV2 PUSH HL AND A LD A,0 JR NZ,CSRL1 LD HL,WINAN+1 CALL VSAM CSRL1: 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 BWSN LD DE,(CRSR) CALL VADR LD A,M CALL BWSF JP INKE3 ; TABELLE ;--------------------------------------- ZINNN EQU 16H ZROUT EQU 24H ZMBIN EQU 37H ZMBOT EQU 38H ZUIN EQU 6 ZUOUT EQU 2 ZUIN2 EQU 7 ZUOT2 EQU 3 ;*************************************** TOTAB: DEFB 49H+80H DEFM 'NKEY$' IKTOK EQU 0D5H DEFB 4AH+80H DEFM 'OYST' JOTOK EQU 0D6H DEFB 53H+80H DEFM 'TRING$' STROK EQU 0D7H DEFB 49H+80H DEFM 'NSTR' ISTOK EQU 0D8H DEFB 52H+80H DEFM 'ENUMBER' RETOK EQU 0D9H DEFB 44H+80H DEFM 'ELETE' DETOK EQU 0DAH DEFB 50H+80H DEFM 'AUSE' PATOK EQU 0DBH DEFB 42H+80H DEFM 'EEP' BETOK EQU 0DCH DEFB 57H+80H DEFM 'INDOW' WITOK EQU 0DDH DEFB 42H+80H DEFM 'ORDER' BOTOK EQU 0DEH DEFB 49H+80H DEFM 'NK' INTOK EQU 0DFH DEFB 50H+80H DEFM 'APER' PPTOK EQU 0E0H DEFB 41H+80H DEFM 'T' ATTOK EQU 0E1H DEFB 43H+80H DEFM 'OLOR' COTOK EQU 0E2H ;------------------- DEFB 53H+80H DEFM 'OUND' SOTOK EQU 0E3H DEFB 50H+80H DEFM 'SET' PSTOK EQU 0E4H DEFB 50H+80H DEFM 'RESET' PRTOK EQU 0E5H DEFB 42H+80H DEFM 'LOAD' BLTOK EQU 0E6H DEFB 56H+80H DEFM 'PEEK' VETOK EQU 0E7H DEFB 56H+80H DEFM 'POKE' VPTOK EQU 0E8H DEFB 4CH+80H DEFM 'OCATE' LOTOK EQU 0E9H DEFB 4BH+80H DEFM 'EYLIST' KLTOK EQU 0EAH DEFB 4BH+80H DEFM 'EY' KYTOK EQU 0EBH DEFB 53H+80H DEFM 'WITCH' SWTOK EQU 0ECH DEFB 50H+80H DEFM 'TEST' PTTOK EQU 0EDH DEFB 43H+80H DEFM 'LOSE' CLTOK EQU 0EEH DEFB 4FH+80H DEFM 'PEN' OPTOK EQU 0EFH DEFB 0D2H DEFM 'ANDOMIZE' RZTOK EQU 0F0H DEFB 56H+80H DEFM 'GET$' VGTOK EQU 0F1H DEFB 0CCH DEFM 'INE' LITOK EQU 0F2H DEFB 0C3H DEFM 'IRCLE' CRTOK EQU 0F3H DEFB 0C3H DEFM 'SRLIN' CITOK EQU 0F4H DEFB 80H ;--------------------------------------- ADRT2: DEFW INKEY DEFW 2FDH DEFW STRIG DEFW INSTR ADRT1: DEFW RENUM DEFW DELET DEFW PAUSE DEFW BBEEP DEFW WINDO DEFW BORD DEFW INK DEFW PAPER DEFW SNER1 DEFW UPCOL DEFW SOUND DEFW PSET DEFW PERES DEFW BLOAD DEFW SNER1 DEFW VPOKE DEFW LOKAT DEFW KEYLI DEFW BKEY DEFW SWIT DEFW SNER1 DEFW CLOSE DEFW OPEN DEFW RAND DEFW SNER1 DEFW LINE DEFW CIRCL TEIL1E: ;------------------------------------------------------------- ; 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 LIN DEFW CIRC DEFW WURZ DEFW MULT DEFW PCTRL DEFW INITC DEFW INITCS DEFW ZKOUT DEFW MENLO ? ;---------------------------------------------------------- DEFS 0FE00H-$ ;*************************************************************** 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