1 REM Ins{nd av Kristoffer Eriksson <5357> 1988-06-21 19.07.05 (KERMIT) ; Fil: WNDSCRL.ASM ; Av: Kristoffer Eriksson, "SKE" <5357>. ; ;-Ver--/-Datum----/-Sign-/-Kommentar---------------------------------- ; X.00 / 84-12-03 / SKE / WNDSCRL ; 1.00 / 85-03-27 / SKE / ; 2.00 / 88-04-17 / SKE / Testar LU.SWID i st{llet f|r LU.CSIZE i CrtAdr. ; Scroll och CLS }terst{ller attribut till LU.OUT53 ; korrekt. ; ; Rutiner f|r scroll och formfeed i f|nster, i f|rsta hand f|r WNDWRITE. ; Fysisk access till bildminnet, med rutiner f|r adressber{kning {ven anv{nda ; av WNDSAVE. F|ruts{tts anropas inom CrtInit - CrtExit, s} CRT.LU.OUT53 {r ; korrekt. EXTERN Scroll, BackScroll, CLS, CrtAdr, LdKoor, RetOut53 ; Rensa hela f|nstret. "Form-Feed". CLS: CALL ScreenData RET Z ; ]terhopp om "en-dimensionellt" f|nster CLS.L1: PUSH BC PUSH HL EX DE,HL ; DE <- Bildadr CALL ClearLine POP HL POP BC LD DE,80 ADD HL,DE ; N{sta rad DJNZ CLS.L1 RET ; Scrolla en rad fram- resp bakl{nges i f|nster. BackScroll: CALL LdKoor ; D,E,B,C <- LINE0, COL0, HIGHT, WIDTH LD A,D ; LINE0 ADD B ; HIGHT LD D,A DEC D ; D <- H|gsta fysiska radnr. CALL ScreenData. RET Z ; ]terhopp om "en-dimensionellt" f|nster. LD DE,-80 ; Bak}tstegning. JR Scr.Loop Scroll: CALL ScreenData RET Z ; ]terhopp om "en-dimensionellt" f|nster. LD DE,80 ; (Fram}t-)stegning. JR Scr.Loop Scr.L1: PUSH BC PUSH HL LD B,A ; B <- 0 LDIR POP HL POP BC POP DE ; Stegv{rde. Scr.Loop: PUSH DE PUSH HL ADD HL,DE ; N{sta fr}n-rad. POP DE ; DE <- M}l-rad = F|rra fr}n-raden. DJNZ Scr.L1 POP HL ; Eliminera stegv{rdet. ; Rensa enskild rad. DE = Radens startadress, C = radl{ngd. ; ; N{r PROM-rutinerna rensar sk{rmen, nollst{ller den attributkoden f|r alla ; teckenpositioner. Nollst{llt attribut inneb{r att bildsk{rmsh}rdvaran ; forts{tter visa samma attribut som p} positionen innan, eller om positionen ; {r den f|rsta p} raden, s} visas vitt p} svart bakgrund. ; ; Ett f|nsters v{nstra kant sammanfaller ju inte med sk{rmens kant, s} om alla ; attribut i ett f|nster nollst{lls, kommer det att visas med de attribut som ; anv{nds till v{nster om f|nstret (oftast f|nstrets ram), vilket inte {r ; kompatibelt med vanliga CON:. D{rf|r s{tts h{r attribut f|r vit f|rgrund och ; svart bakgrund i f|rsta kolumnen, och noll i resten. ClearLine: LD L,E LD H,D LD A,7 ; Vit text/svart bakgrund i f|rsta kolumn. OUT (53),A LD (HL)," " INC DE DEC C JR Z RetOut53 XOR A OUT (53),A ; Attribut utan inverkan i resten. INC HL LD (HL)," " ; Lagra blanktecken. INC DE DEC C JR Z RetOut53 LD B,A LDIR RetOut53: LD A,(CRT.LU+LU.OUT53) ; Hopp hit {ven fr}n WNDSAVE. OUT (53),A ; ]terst{ll det gamla attributet. RET ; H{mta f|nstrets koordinater. Anropas {ven fr}n WNDSAVE. LdKoor: LD D,(IX+LU.LINE0) LD E,(IX+LU.COL0) LD B,(IX+LU.HIGHT) LD C,(IX+LU.WID) RET ; Ber{kna f|nstrets adress, kolla dess storlek. ScreenData: CALL LdKoor ScreenData.:CALL CrtAdr ; HL <- Adress i bildminnet f|r f|nstret. XOR A ; A <- 0 CP B RET Z ; ]terhopp om "en-dimensionellt" f|nster. CP C RET ; Z om "en-dimensionellt" f|nster. ; Ber{kna till HL fysisk bildminnesaress f|r fysisk rad D och kolumn E, med ; h{nsyn till 40/80-teckensmode. Justerar {ven ev bredd i C vid 40-teckens- ; mode. Anropas {ven fr}n WNDSAVE. CrtAdr: LD A,(IX+LU.SWID) ; D=Rad, E=Kolumn, HL <- bildminnesadress. CP 41 JR NC CrtA.X1 SLA E ; F|rdubbla kolumnen om WIDTH 40 anv{nds. SLA C ; [ven bredden (H|r egentligen inte till CrtA.X1: PUSH DE ; denna rutin, men {r praktisk). LD E,D LD L,D LD D,0 LD H,D ADD HL,HL ; 2* ADD HL,HL ; 4* ADD HL,DE ; 5* ADD HL,HL ; 10* ADD HL,HL ; 20* ADD HL,HL ; 40* ADD HL,HL ; 80* POP DE LD D, 30720 / 256 ADD HL,DE RET