1 REM Ins{nd av Kristoffer Eriksson <5357> 1988-06-21 18.58.59 (KERMIT) ; Fil: WNDINIT.ASM ; Av: Kristoffer Eriksson, "SKE" <5357>. ; ;-Ver--/-Datum----/-Sign-/-Kommentar---------------------------------- ; 2.00 / 88-04-10 / SKE / WNDINIT utbruten ur WINDOW.ASM. Kommandoradshant. ; ; ; Hindrar dubbelladdning, hanterar kommandoraden, skriver meddelanden, ; initierar en del av programkoden i de andra modulerna. EXTERN Init ChkLU: = 43 IO: = 90 Iocm.Wra: = 4 LUS.WIN: = 7 ; --------- Initiering av inladdad kod ----- Init: EXX PUSH HL PUSH DE PUSH BC CALL Chain.Clr ; F|rbered Chain-data. CALL ClinePar ; Hitta kommandoraden. JR C Ini.X1 ; Inga parametrar alls (vilket {r ok). EXX LD HL,Itext5 LD BC,ItextEnd - Itext5 CP ";" JP NZ ExitWrite ; Tala om att inga parametrar accepteras. EXX CALL Chain.Load ; Lagra CHAIN-fil fr}n resten av raden. LD HL,Itext6 LD BC,ItextEnd - Itext6 JP C ExitWrite ; Klaga p} syntaxen. ; Kolla om det redan finns en enhet WND:. Ini.X1: LD DE,DevNamn CALL FindDev LD HL,IText1 LD BC,IText3n - IText1 JP NC ExitWrite ; WND finns redan - ladda ej. ; St{ll i ordning och skriv ut meddelande om inladdningen. LD HL,WndTop LD DE,(Y.Botm) XOR A ; Nolla carry, och signalera undertryckning SBC HL,DE ; av nollor till I2ASC. EX DE,HL LD HL,IText3n CALL I2ASC ; F|rbrukat minne. LD HL,(Y.Top) LD DE,WndTop XOR A ; Nolla carry osv. SBC HL,DE EX DE,HL LD HL,IText4n CALL I2ASC ; ]terst}ende minne. LD HL,IText3n LD BC,IText5 - IText3n CALL Write ; Meddela att laddning utf|rs, och hur ; mycket minne som g}r }t. ; Ta reda p} adressen till gamla CON:s drivrutin, och patcha kod. LD DE,Ini.CON CALL FindDev ; BC <- Adress till drivrutin f|r CON: LD ($$Entry.CRT + 1),BC ; (WNDMAIN) ; Ta reda p} adressen till ATTRIBUTE-v{rdet, och patcha koden. LD HL,(116) LD BC,6 ADD HL,BC LD ($$ATTR.1+1),HL ; (WNDMAIN) Adress till ATTRIBUTE-v{rde LD ($$ATTR.2+1),HL ; (WNDMAIN) LD ($$ATTR.3+1),HL ; (WNDMAIN) LD ($$ATTR.4+1),HL ; (WNDOPEN) ; Ta bort referenser till ATTRIBUTE-v{rdet om inte ABC 806. LD A,(BasicTyp) CP Typ.806 JR Z Ini.X2 LD HL,$$ATTR.1 LD BC,$$ATTR.2-$$ATTR.1+3 CALL Clear LD HL,$$ATTR.3-3 LD BC,6 CALL Clear LD HL,$$ATTR.4 LD BC,6 CALL Clear LD A,($$RET) ; Attribut beh|ver }terst{llas bara p} 806. LD (AttrWrap),A ; Ers{tt med RET-kod. ; Ta reda p} LU.DCB till gamla fil 0, och patcha koden. Ini.X2: LD HL,(CRT.LU+LU.DCB) LD ($$Dev.CRT+1),HL ; St{ll i ordning den rutin som i CONSI-vektorn ska f}nga upp ; anrop fr}n CONREAD i PROM. LD HL,(ConsI+1) ; L{nka om get-rutinen LD ($$ConsI+1),HL ; (WNDMAIN) LD HL,ConsI.Ny LD (ConsI+1),HL LD HL,(ConRead+1) ; Adress till den inbyggda CONREAD-rutinen LD DE,20 ADD HL,DE ; Adr efter CONSI-anropet i den rutinen LD ($$CRTInpRet+1),HL ; (WNDMAIN) ; Initiera LU.CSIZE som i 806, om den inte anv{nds (inneh}ller ; 255) p} den aktuella maskinen (802, 800). WINDOW:s rutiner ; anv{nder numera inte denna i n}gra tester (utom AttrWrap som ; bara anv{nds p} ABC806), men den kan lika g{rna initieras {nd}. LD A,(CRT.LU+LU.CSIZE) INC A JR NZ Ini.X4 ; Den anv{nds. LD A,(CRT.LU+LU.WID) CP 41 LD A,1100I ; Flagga f|r WIDTH < 41 och EL JR C Ini.X3 XOR A Ini.X3: LD (CRT.LU+LU.CSIZE),A ; Initiera andra variabler i CRT.LU, och kopiera CRT.LU till ; nya CON.LU. LU.ATTR beh|v ej init, g{ller ej f|r CON. Ini.X4: XOR A LD (CRT.LU+LU.WSTAT),A LD A,(CRT.LU+LU.STAT) ; Se till att flaggan f|r {kta RES LUS.WIN,A ; f|nster inte {r satt. LD (CRT.LU+LU.STAT),A LD HL,CRT.LU LD DE,CON.LU LD BC,23 ; Flytta CON: till nytt LU-block LDIR ; L{nka in nya CON.LU i LU.kedjan. ; Med den h{r enkla metoden blir visserligen det gamla kvar sist ; i kedjan, men det g|r inget, och det f|renklar dessutom {ven ; url{nkningen. LD HL,(LUCh) LD (CON.LU),HL LD HL,CON.LU LD (LUCh),HL LD HL,DevEntry ; Anv{nd f|nsterdrivrutinerna f|r CON: LD (CON.LU+LU.DCB),HL ; dock |ppnad som vanlig CON: ; L{nka in de nya enheterna i enhetslistan. LD HL,(DevTbA) LD (DevL{nk1),HL LD HL,DevL{nk2 LD (DevTbA),HL ; Skydda minnet som programmet ligger i. LD HL,WndTop LD (Y.Botm),HL LD (Y.ComTop),HL ; Avsluta initieringen. Exit: POP BC POP DE POP HL EXX $$RET: RET ExitWrite: CALL Write JR Exit ; Utskrift p} fil 0. Utskrift med CONWRITE fungerar ju inte bra om WINDOW ; redan {r laddat. Write: XOR A PUSH BC CALL ChkLU POP BC JP C ConWrite LD A,IOCM.WRA JP IO ; Nollst{ll adress HL, BC bytes, minst 2. Clear: LD (HL),0 LD E,L LD D,H INC DE DEC BC LDIR RET IText1: DEFM "WINDOW finns redan." IText3n: DEFM " bytes f|rbrukade. Det finns " IText4n: DEFM " bytes kvar." DEFB 10,13 DEFM"WINDOW Ver 2.00 laddat. Av Kristoffer Eriksson, 1985 & 1988." Itext5: DEFM "WINDOW tar inga parametrar ut|ver CHAIN-kommando." DEFB 10,13 Itext6: DEFM "Syntax: RUN WINDOW(,;CHAIN-fil (parametrar))" DEFB 10,13 ITextEnd: Ini.CON: DEFM "CON"