;Pulldown - Pull-Down-Windows
;31.3.1991
;
nolist
;
;WRITE"PULLDOWN.BIN"
;
BUFF1 EQU &9000
BUFF2 EQU &9800
;
FLYBACK EQU &BD19
;
org &9800
JP PULLINIT
JP WINSETST
JP PDSETST
JP PDRESST
JP PDFLUSHST
JP PMOVEST
JP TAUSST
;
;
HLVONIX LD L,(IX+0)
INC IX
LD H,(IX+0)
INC IX
RET

AVONIX LD A,(IX+0)
INC IX
INC IX
RET
;

WINSETST CP 4
RET NZ
CALL AVONIX;y-Ausd
LD E,A
CALL AVONIX;x-Ausd
LD D,A
CALL AVONIX;y-Pos
LD C,A
CALL AVONIX;x-Pos
LD B,A
PUSH DE
POP IY;Ausdehnung nach IY
JP WINSET

PDSETST CP 4
RET NZ
CALL AVONIX;y-Ausd
LD E,A
CALL AVONIX;x-Ausd
LD D,A
CALL AVONIX;y-Pos
LD C,A
CALL AVONIX;x-Pos
LD B,A
PUSH DE
POP IY;Ausdehnung nach IY
JP PDSET

PDRESST JP PDRES

PDFLUSHST JP PDFLUSH

PMOVEST CALL PMOVE
CALL NOCHAR
RET

TAUSST CP 1
RET NZ
CALL HLVONIX
LD B,(HL);Laenge
INC HL
LD A,(HL)
INC HL
LD H,(HL)
LD L,A;Stringadr nach HL
TAUSST1 LD A,(HL)
INC HL
CALL CAUS
DJNZ TAUSST1
RET

;
PULLINIT CALL VARCLS
LD HL,BUFF1
LD (PMBUFF),HL;als PointerMove-Datenbufferadr (28*3=84 Bytes)
LD DE,&0054;&54=84
ADD HL,DE;PMBufferende
LD (PDSTART),HL;als PD-WindowStartadr
LD HL,BUFF2-1
LD (PDENDE),HL

LD BC,#0000;POS
LD IY,#4EBB;AUSD.
LD HL,ADRINIT
CALL VARINIT;VAR INIT
RET
;
;vordefinierte Konstanten
ADRINIT
DEFB 85;WINDOW RAHMENBYTE
DEFB 0;INNENBYTE WINDOW
DEFB 3,1;NMOVE(NORMAL Y,X)
DEFB 1,1;MMOVE(MENUE  Y,X)
;

VARCLS
PUSH HL
PUSH DE
PUSH BC
LD HL,VARSTART
LD BC,VARENDE-VARSTART-1;LG
LD (HL),0
LD D,H
LD E,L
INC DE
LDIR
POP BC
POP DE
POP HL
RET

VARINIT
CALL PINIT
CALL PDINIT
CALL PMINIT
LD HL,POWIN
CALL WINIT;WINDOWINIT
CALL MINIT;MENUEF.INIT
JP CINIT

;
;** ROM - taugliche Prozeduren **

KEYBRD RET
UROMDI RET

NOCHAR PUSH HL;sich
NOCHAR1 CALL FLYBACK
LD A,78;max.Keynummer
NOCHAR2 PUSH AF
CALL &BB1E;Km Test Key
JR Z,NOCHAR3;nicht gedrueckt
POP AF
JR NOCHAR1;von vorne
NOCHAR3 POP AF
DEC A
JR NZ,NOCHAR2
POP HL;zurueck
RET

WAITJOY CALL &BB24;Km Get Joy
LD A,H;Joy 0
OR A
RET NZ
LD A,L;Joy 1
OR A
RET NZ
LD A,66;Esc
PUSH BC
PUSH DE
CALL &BB1E;Km Test Key
POP DE
POP BC
LD A,32;Esc-Bit
RET NZ;gedrueckt
JR WAITJOY;weiterwarten
;
;I. allgemeine Grundprozeduren


HLADDA ADD A,L
LD L,A
RET NC;ok
INC H
RET

MULT8
LD HL,0
PUSH BC;SICH
LD C,D;D SICH
LD D,H;0
LD B,8;8 BITS
MULT81
ADD HL,HL;SHIFT LEFT 1 BIT
RLA;MULTIPLIKANT 1 BIT
JR NC,MULT82
ADD HL,DE
MULT82
DJNZ MULT81
LD D,C
POP BC
RET


;
;II. Screen-Pack
NLINE
LD BC,#800;NEXT LINE
ADD HL,BC
RET NC;OK
LD BC,#3FAF;KORRIGIEREN 
SBC HL,BC;-#3FB0
RET

BADR
PUSH DE;SICH
LD A,C;Y-KOORD.
AND #F8
LD L,A
LD H,0
LD D,H
LD E,L
ADD HL,HL
ADD HL,HL
ADD HL,DE
ADD HL,HL;*10 /8*80
LD A,C;Y-KOORD.
AND 7;MOD 8
ADD A,A
ADD A,A
ADD A,A;*8
ADD A,#C0;SCR-START
LD D,A
LD E,B;X-KOORD.
ADD HL,DE;HL=BILDADR
POP DE
RET

ADRB
PUSH HL
PUSH DE
LD A,H
AND 7
LD H,A
LD DE,80
LD C,D;0
OR A
ADRB1
SBC HL,DE
INC C
JR NC,ADRB1
ADD HL,DE
LD B,L;X-KOORD.
POP DE
POP HL
RET


PFAST0
CALL BADR;BILDADR BERECH.
PFAST
DEFB #FD
LD A,L;ANZ DER ZEILEN
PFAST1 EX DE,HL;HL=ADR DER DATEN
DEFB #FD
LD C,H;SPALTEN
LD B,0 ;HI-BYTE=0
PUSH DE;BILDADR SICHERN
LDIR;ZEILE KOPIEREN
POP DE;BILDADR
EX DE,HL;NACH HL
LD B,#08;BC SOWIESO 0
ADD HL,BC;NEXT LINE +#800
JR NC,PFAST2;KEIN UEBERLAUF (&FFFF)
LD BC,#3FAF;KORRIGIEREN
SBC HL,BC;-#3FB0
PFAST2
DEC A
JR NZ,PFAST1
RET

CFAST0
CALL BADR
CFAST
LD A,(CFASTB);FARBZAHL
DEFB #FD
LD B,H;YH=BREITE
LD D,H
LD E,L;LINE IN DE SICH
CFAST1
LD (HL),A ;FARBZAHL
INC HL
DJNZ CFAST1
EX DE,HL;LINEADR AUS DE NACH HL
JP LFAST;LINIE VERVIELFACHEN

CLRSCR
PUSH IY
PUSH HL
PUSH DE
PUSH BC
LD HL,#C000
LD IY,#50C8
CALL CFAST
POP BC
POP DE
POP HL
POP IY
RET

;
;III. Window-Pack
PDINIT
LD HL,(PDSTART);BUFFERANFANG
LD (PDZEIG),HL
RET

MINIT
LD HL,POWIN+4;MENUEFENSTER OBEN
WINIT
LD (HL),C;OBEN=YPOS
INC HL
LD A,C;YPOS
DEFB #FD
ADD A,L;YL=Y-AUSD. 
LD (HL),A;UNTEN
INC HL
LD (HL),B;LINKS=XPOS
INC HL
LD A,B;XPOS
DEFB #FD
ADD A,H;+XAUSD.
LD (HL),A
RET

PMINIT
LD A,(POWIN+6);MENUEW.LINKS
LD (PMPOS+1),A;ALS XPOS
LD A,(POWIN+4);MENUEW.OBEN
ADD A,8;AUF 1.MENUEPUNKT
LD (PMPOS),A
RET

WINDOW
CALL BADR;BILDADR AUS BC BER.
DEFB #FD
INC H
DEFB #FD
INC H;BREITE+2 WEGEN RAHMEN
CALL WINDWA;BALKEN WAAG.OBEN
CALL NLINE;NEXT LINE
LD DE,(WINDOWB);WINDOWBYTE+INNEN
PUSH HL;SICH
LD (HL),E;LINKS
INC HL
DEFB #FD
LD B,H;YH=BREITE
DEC B
DEC B;RAHMEN WEG
WIND1
LD (HL),D;INNEN
INC HL
DJNZ WIND1
LD (HL),E;RECHTS
POP HL;ZURUECK
CALL LFAST;LINE VERVIELFACHEN
CALL NLINE;NEXT LINE
WINDWA
LD A,(WINDOWB);WINDOWBYTE 
PUSH IY;AUSD.SICH
DEFB #FD
LD L,4;ANZ.ZEILEN=4
CALL CFAST+3;MIT A LOESCHEN
POP IY;ZURUECK
RET

WINSET
PUSH HL
PUSH DE
CALL CINIT;Charinit (WINDOWRAENDER SET)
CALL MINIT;MENUEFENSTER SET
CALL WINDOW;ZEIGEN
POP DE
POP HL
RET

PDSET
PUSH HL
PUSH DE

PUSH IY;AUSD
PUSH BC;POS
PUSH IY
POP DE
INC D
INC D;RAND LINKS+RECHTS DAZU
LD A,8;RAND OBEN+UNTEN
ADD A,E
LD E,A;SICH
PUSH DE
PUSH DE;AUSD
POP IY;NEUE AUSD.MIT RAHMEN
LD A,D
CALL MULT8;HL=A*E
LD DE,(PDZEIG);WINDOWZEIGER
PUSH DE;SICH
ADD HL,DE;DAZU
LD DE,POSLANG+1-CAUSP+6
ADD HL,DE;DAZU
EX DE,HL;NACH DE
LD HL,(PDENDE)
OR A
SBC HL,DE;PDENDE< ?
POP DE;PDZEIG
JR C,PDSET2;JA=ENDE
CALL BADR;BILDADR AUS BC BER.
PUSH HL;BADR SICH
PUSH DE;PDZEIG
CALL GFAST;WINDOW GET
EX DE,HL;ENDADR NACH HL
POP DE;PDDATENSTART
LD (HL),E
INC HL
LD (HL),D
INC HL
POP DE;BADR
LD (HL),E
INC HL
LD (HL),D
INC HL
POP DE;AUSD
LD (HL),E
INC HL
LD (HL),D
INC HL
EX DE,HL;DE=ZIEL
LD HL,CAUSP;DATENSTART
LD BC,POSLANG+1-CAUSP;LAENGE
LDIR
LD (PDZEIG),DE;AKT.SPEIADR(=ENDE+1)
POP BC;POS
POP IY;ALTE AUSD
CALL WINSET;WINDOW ZEIGEN
CALL PMINIT;POINTER SET
POP DE
POP HL
RET

PDSET2;KEIN PLATZ
POP DE
POP BC
POP IY
POP DE
POP HL
RET

PDRES
PUSH HL
PUSH DE
LD HL,(PDSTART);BUFFERSTART
LD DE,(PDZEIG);ZEIGER
OR A
SBC HL,DE;GLEICH? 
JR Z,PDRES2;JA NICHTS
PUSH IY
PUSH BC
EX DE,HL;HL=PDZEIG
LD DE,POSLANG;ENDE GES.DATEN
LD BC,POSLANG+1-CAUSP;LG
DEC HL;AUF LETZTES BYTE
LDDR;KOPIEREN
LD D,(HL)
DEC HL
LD E,(HL);AUSD
DEC HL
PUSH DE
POP IY;AUSD
LD B,(HL)
DEC HL
LD C,(HL);BADR
DEC HL
LD D,(HL)
DEC HL
LD E,(HL);PDDATENADR
LD (PDZEIG),DE;NEUES ENDE
LD H,B
LD L,C;BADR
CALL PFAST;ZURUECKKOP.
CALL BALKAUS;EVTL.BALKAUS
INC A;A=1 NZ WINDOW GEF.
POP BC
POP IY
PDRES2
POP DE
POP HL
RET

PDRES1
PUSH AF
CALL PDRES
POP AF
RET

PDFLUSH
CALL PDRES;WINDOW WEG
JR NZ,PDFLUSH;ALLE WEG
RET

;
;IV. Text-Pack
CINIT
LD A,B;XPOS/WINDOW SET (BC=POSIT/YH=X-AUSD.)
INC A
INC A;+2
LD H,A ;IN H FUER POSIT
LD (CAUSL),A;WIRD LINKER RAND
LD A,B;XPOS
DEFB #FD
ADD A,H;+YH(XAUS)
DEC A;-1
LD (CAUSR),A;WIRD RECHTER RAND
LD A,C ;YPOS
SRL A
SRL A
SRL A;/8 
INC A;WEGEN RAHMEN OBEN
LD L,A;NACH L
LD (CAUSP),HL;ZEICHENPOSIT SET
RET

CADR
LD A,H;xpos in A sich
LD B,0
LD H,B;0
LD C,L;ypos
ADD HL,HL;*2
ADD HL,HL;*4
ADD HL,BC;*5
ADD HL,HL;*10
ADD HL,HL;*20
ADD HL,HL;*40
ADD HL,HL;*80
LD C,A;xpos
ADD HL,BC;1*Zeichenbreite add
LD A,H
AND 7
OR #C0;Scr-Base dazu
LD H,A
RET

;CAUS MUSS L ROM FREISCHALTEN KOENNEN !!
CAUS
DI
EXX;2.REG
PUSH BC;BC' SICHERN
RES 2,C;L ROM EI;U ROM EGAL
OUT (C),C;AUSGEBEN
LD E,A;ZEICHEN NACH E
LD HL,(CAUSP);H=X-POS/L=Y-POS
PUSH HL;SICH
INC H;xpos+1
LD A,(CAUSR);rechter Rand-1
CP H 
JR NC,CAUS1;MAX POS>=AKT.POS-OK
LD A,(CAUSL);linker Rand
LD H,A;set
INC L;ypos+1
CAUS1
LD (CAUSP),HL;neue Pos set
POP HL;alte Pos
CALL CADR;Charadr berechnen
EX DE,HL;Charadr nach DE,Zeichen in L
LD BC,#3800;Rom-Matrix-Adr
LD H,C;0
ADD HL,HL;Zeichen*2
ADD HL,HL;*4
ADD HL,HL;*8
ADD HL,BC;+Matrixadr
EX DE,HL;DE=ZeichenMatrixadr
LD B,#8;C=0/BC=#800
CAUS2
LD A,(DE);get Matrix
LD (HL),A;auf Screen
INC DE;Matrixadr+1
ADD HL,BC;NL
JR NC,CAUS2;bis Ueberlauf ueber #FFFF
POP BC;BC' zur.
OUT (C),C;alte Rom-Konfi
EXX;1.Reg
RET



;
;VI. Pointer-Pack
PINIT
PUSH DE
PUSH BC
LD DE,WINDOWB
LD BC,2
LDIR
LD DE,NMOVE
LD C,4
LDIR
POP BC
POP DE
RET

BALKAN
LD (POSELA),HL;BALKENADR
LD (POSLANG),A;BALKENLAENGE
JP INVER;INVERTIEREN

BALKAUS
LD A,(POSLANG);BALKEN AN?
OR A
RET Z;NEIN=ZURUECK
PUSH HL;SICH
LD HL,(POSELA);BALKADR
CALL INVER
POP HL
BALKAUS1
XOR A
LD (POSLANG),A;BALKENLAENGE=0
RET

PMOVE
CALL KEYBRD;KEYBRD SELECT
PUSH IX
PUSH IY
PUSH HL
PUSH DE;SICH
CALL NOCHAR;BIS KEINE TASTE GEDR
LD HL,(PMBUFF);PointerMove-Buffer(fuer Hintergrund,Spritedaten im Ram)
LD A,&1C;Offset zu Sprintedaten
CALL HLADDA;HL=HL+A
EX DE,HL;als Zieladr in DE
LD HL,SPRADR;Spritedaten(evtl/im Rom)
LD BC,&0038;&1C*2 Bytes fuer And&Or-Maske
LDIR;ins Ram in Buffer kopieren
LD IX,POWIN;ADR POINTERWINDOWAUSD.
CALL BALKAUS1;KEIN BALKEN
LD BC,(PMPOS);AKT.POS
PMOVE2
CALL TESTWIN;BALKEN EVTL SET
LD BC,(PMPOS)
LD (PMPOS2),BC;ALS ALTE POS
CALL BADR;ADR AUS BC BERECH 
LD DE,(PMBUFF);Adr zum Hintergundsichern
PUSH HL;Pos sich
PUSH DE;PmBuff sich
LD IY,#020E ;X-AUSD./Y-AUSD.
CALL GFAST;Hintergrund get (gfast mit uromdi)
POP HL;PmBuff aus DE
LD A,&1C;Offset zur And-Maske
CALL HLADDA;HL=HL+A
EX DE,HL;And-Maskenadr in DE
POP HL;Pos zur.
PUSH HL;Pos sich
PUSH DE;Maskenadr auch sich
LD A,#A6;AND (HL)
LD (PSLOWB),A
CALL PSLOW;AND-MASKE
POP HL;Maskenadr aus DE
LD A,&1C;Offset zur Or-Maske
CALL HLADDA;HL=HL+A
EX DE,HL;Or-Maskenadr in DE
POP HL
LD A,#B6;OR (HL)
LD (PSLOWB),A
CALL PSLOW;OR-MASKE
LD DE,(NMOVE);D=XMOVE/E=YMOVE
LD A,(POSLANG);SELECTLAENGE
OR A
JR Z,PMOVE3;NORM.MOVE
LD DE,(MMOVE);MENUEMOVE
PMOVE3
LD BC,(PMPOS)
CALL WAITJOY
LD L,A;TASTENCODE
RR L;0.BIT
CALL C,HOCH
RR L
CALL C,RUNTER
RR L
CALL C,LINKS
RR L
CALL C,RECHTS
RR L
JR C,PMFEUER
RR L
JR C,PMESC
LD H,B
LD L,C;NEUE POS
LD (PMPOS),HL;SICH
LD BC,(PMPOS2);ALTE POS
OR A
SBC HL,BC
JR Z,PMOVE3;WEITER
CALL FLYBACK
CALL HIPUT
JP PMOVE2

PMFEUER
LD A,(POSLANG);LAENGE=0?
OR A
JR Z,PMOVE3;JA--WEITERMOVE
CALL HIPUT0;AN POS
LD HL,(POSELA);BILDPOS SELECT
CALL ADRB;IN KOORD.UMW.
INC B;XPO+1
LD (POSPOS),BC;SICH
SCF;OK
PMENDE
POP DE
POP HL
POP IY
POP IX
RET

PMESC
CALL HIPUT0;HINTERGR ZUR
XOR A;Z/NC
JR PMENDE

HOCH
LD A,C;YPOS
SUB E;-YMOV
RET C;UEBERL.
CP (IX+0);P.FENSTER OBEN
RET C;A<YMIN
LD C,A;SICH
RET
RUNTER
LD A,C;YPOS
ADD A,E;+YMOVE
RET C;UL.
CP (IX+1);UNTEN
JR Z,RUOK
RET NC;A>YMA
RUOK
LD C,A
RET
LINKS
LD A,B;XPOS
SUB D;-XMOV
RET C;UL.
CP (IX+2);LINKS
RET C;A<MI
LD B,A
RET
RECHTS
LD A,B;XPOS
ADD A,D;+XMOV
RET C;UL.
CP (IX+3);RECHTS
JR Z,REOK
RET NC;A>XMA
REOK
LD B,A
RET

TESTWIN
LD HL,BALKAUS;FORTSETZUNG
PUSH HL;BEI RET
CALL CTEST;IM MENUEWINDOW?
RET C;NEIN
CALL BADR;BILDADR NACH HL
LD A,(WINDOWB);WINDOWRAHMBYTE
LD E,A;NACH E
CALL AFIND;ANFANG VOM WINDOW FINDEN
RET NZ;NICHTS GEFUNDEN
INC HL;ADR+1
LD A,(WINDOWB+1);WINDOWINNEN
LD E,A;NACH E
CALL TESTBIL;AN POSIT VORHANDEN?
RET NZ;NEIN ENDE
INC HL
CALL TESTBIL;HIER NOCHMAL?
RET Z;JA AUCH ENDE
CALL EFIND;ENDE FINDEN,C=LG
LD A,(POSLANG);LAENGE AKT.SELECT
OR A;0?
LD A,C;LAENGE
JP Z,TESTWIN1;ALTE LG=0--NUR BALKAN
EX DE,HL;NEUE ADR IN DE 
LD HL,(POSELA);ALTE ADR
OR A
SBC HL,DE
EX DE,HL;HL=NEUE ADR
POP BC;BALKAUSADR
RET Z;GLEICH--BALKEN SCHON DA
PUSH BC;WIEDER AUF STACK
PUSH AF;LG
CALL BALKAUS;LOESCH
POP AF
TESTWIN1
POP BC;BALKAUSRUECKSPR
JP BALKAN

AFIND
LD A,(PMPOS+1);XPO
SUB (IX+6);MLINKS(FENSTER)
RET C;XPO<XLI NZ
INC A
LD C,A;NACH C
LD A,H
AND 7
OR #C0
LD H,A;OBERSTE ZEICHENZEILE
AFIN1 CALL TESTBIL;POSITION=E?
RET Z;JA
DEC HL;LINKS WEITERSUCHEN
DEC C;BYTEZAEHLER-1
JR NZ,AFIN1
INC C;NZ
RET

EFIND
LD C,0;START
PUSH HL;ADR SICH
EFIND1
INC HL;ADR+1
INC C;ZAEHLER+1
CALL TESTBIL;INNENBYTE GEFUNDEN?
JR NZ,EFIND1;NOCH NICHT
POP HL;ALTE ADR ZUR.
RET

CTEST LD A,C;YPOS
SUB (IX+4);-OBEN
RET C
LD A,(IX+5);UNTEN
SUB C;-YPOS
RET C
LD A,B;XPOS
SUB (IX+6);MLINKS 
RET C
LD A,(IX+7);MRECHTS
SUB B
RET

HIPUT0 LD BC,(PMPOS)
HIPUT LD DE,(PMBUFF);Adr gesicherter Hintergrund
LD IY,#020E ;X-AUSD./Y-AUSD.
CALL PFAST0;HINTERGR PUT
LD BC,(PMPOS);NEUE P.
RET
;
;IX. Tabellen
SPRADR
;Die And-Maske
DEFB #AF,#FF,#BB,#FF,#BE,#FF,#BF,#BF,#BF,#EF
DEFB #BF,#FB,#BF,#FE,#BF,#F7,#BF,#EF
DEFB #B5,#77,#D7,#BB,#FF,#DD,#FF,#EE,#FF,#F7
;Die Or-Maske
DEFB #A8,#00,#BA,#00,#BE,#80,#BF,#A0,#BF,#E8
DEFB #BF,#FA,#BF,#FE,#BF,#F4,#BF,#E8
DEFB #B5,#74,#00,#BA,#00,#5D,#00,#2E,#00,#17
;
;

;
;aus INCLUDE1
;** Die Prozeduren unbedingt im Ram *** (nicht Rom !!)
;
GFAST0
CALL BADR
GFAST
CALL UROMDI;Upper-Rom transparent di
DEFB #FD;ld a,yl
LD A,L;Zeilenanzahl
GFAST1
DEFB #FD
LD C,H;Breite
LD B,0;Hi-Byte=0
PUSH HL;Bildadr
LDIR
POP HL
LD B,#08;C sowieso 0
ADD HL,BC;nl+&800
JR NC,GFAST2;kein Ueberlauf ueber &FFFF
LD BC,#3FAF;Korrektur
SBC HL,BC;-#3FB0
GFAST2
DEC A;ZEILE-1
JR NZ,GFAST1
RET
;
LFAST0
CALL BADR
LFAST
CALL UROMDI;Upper Rom transparent di
DEFB #FD
LD A,L;yl=Zeilenanzahl
LD C,0
LFAST1
DEC A;A=0?
RET Z;Ja,Ende
LD D,H;ALTE LINE
LD E,L;AUCH NACH DE
LD B,#08;C SOWIESO 0
ADD HL,BC;NEXT LINE +#800
JR NC,LFAST2;KEIN UEBERLAUF (&FFFF)
LD BC,#3FAF;KORRIGIEREN
SBC HL,BC;-#3FB0
LFAST2
EX DE,HL;NEUE LINE NACH DE
DEFB #FD
LD C,H;BREITE
LD B,0;HI-BYTE=0
PUSH DE;NEUE LINE SICH
LDIR
POP HL;WIRD ALTE LINE
JR LFAST1
;
PSLOW0
CALL BADR;HL=BILDADR
PSLOW
CALL UROMDI;DA VERKNUEPFUNG MIT BILDSCH.
DEFB #FD
LD C,L;Y-LAENGE
PSLOW1
DEFB #FD
LD B,H;X-BREITE
PUSH HL;BADR
PSLOW2
LD A,(DE);VOM SHAPE 
PSLOWB
NOP;UMWANDLUNGSBYTE XOR/AND/OR/CLP
LD (HL),A;SICH
INC HL ;NBYTE
INC DE
DJNZ PSLOW2
POP HL
LD A,C;C SICH
LD C,B;0
LD B,8
ADD HL,BC;NEXT.LINE
JR NC,PSLOW3;KEIN UEBERLAUF
LD BC,#3FAF
SBC HL,BC;-#3FB0
PSLOW3
LD C,A;C ZUR. 
DEC C
JR NZ,PSLOW1
RET
;
INVER0
PUSH AF
PUSH BC
CALL CADR 
POP BC
POP AF
INVER
OR A;LG=0?
RET Z
CALL UROMDI
PUSH BC;SICH
PUSH DE
LD C,A;LAENGE IN C SICH
INVER1
LD D,H
LD E,L;SICH 
LD B,C
INVER2
LD A,(HL);BYTE VOM BILDSCHIRM GET
CPL;COMPLEMENT
LD (HL),A;ZURUECK AUF BILDSCHIRM
INC HL
DJNZ INVER2
LD H,D
LD L,E
LD A,H
ADD A,8
LD H,A
JR NC,INVER1;BIS UEBERLAUF
POP DE
POP BC
RET

TESTBIL
CALL UROMDI
LD A,(HL);BILDSCHIRMBYTE
CP E;TESTBYTE?
RET NZ;NEIN ENDE
LD D,H;HI-BYTE SICH
LD B,7;NOCH 7 LINES
TESTBIL1
LD A,H
ADD A,8;NEXT LINE
LD H,A
LD A,(HL);BYTE
CP E;=WINDOWB?
JR NZ,TESTBIL2;<>ENDE
DJNZ TESTBIL1;BIS ALLE LINES
TESTBIL2
LD H,D;ALTES HI-BYTE
RET
;

HLCALL
JP (HL)

RAMCO3
JP 0;RAMCO4 ODER RAMCO5
;
;Ende Include1




;
;dynamische Variablen
;
VARSTART EQU $
CFASTB EQU VARSTART;DB 0 (Farbzahl zum Fuellen)
CAUSP2 EQU CFASTB+1;DW 0 (gemerkte Cursorposition)
PMPOS2 EQU CAUSP2+2;DW 0 (alte PmPos)
WINDOWB EQU PMPOS2+2;DB 0,0 (Farbzahl Rahmen/Innenraum d.Windows)
NMOVE EQU WINDOWB+2;DB 0,0 (Normalmove y,x)
MMOVE EQU NMOVE+2;DB 0,0 (Menuemove y,x)
;davon werden folgende Variablen bei PDSET gesichert
CAUSP EQU MMOVE+2;DW 0 (akt.Charausgabepos)
CAUSL EQU CAUSP+2;DB 0 (Charausgabewindow links)
CAUSR EQU CAUSL+1;DB 0 (...rechts)
PMPOS EQU CAUSR+1;DW 0 (PointerMovePOS y,x)
POWIN EQU PMPOS+2;DS 8 (Pointerwindow ob,un-187,li,re-78/Menuewindow ob...)
POSELA EQU POWIN+8;DW 0 (POSitionSELectAdr)
POSLANG EQU POSELA+2;DB 0 (POSitionsLAeNGe des Selects)
;
POSPOS EQU POSLANG+1;DW 0 (Position des Selects in Koordinatenform)
PDZEIG EQU POSPOS+2;DW 0 (PD-windowZEIGer)
PMBUFF EQU PDZEIG+2;DW 0 (Adr Hintergrundbuffer,And+Or-Maskenzwischenspeicher)

;TEBU EQU PMBUFF+2;DS 16 (TExtBUffer)/DB 0(Endemarkierung) 
;
;BUFFER EQU TEBU+17;DW 0 BUFFER IM ZENTR RAM,oder im L RAM(SBUFF) -#9FFF

PDSTART EQU PMBUFF+2;START PULLDOWN-WINDOWBUFFER (WIE BUFFER)
PDENDE EQU PDSTART+2;ENDE PULLDOWN-WINDOWBUFFER

VARENDE EQU PDENDE+2
;
;

;
list
end
;
