2 ! ********************************************************************** 3 ! Program CRTCDEMO.BAS Utg}va 1.0 1986-11-23 4 ! av Curt Rehnborg, <1121> 5 ! Ins{nd av Curt Rehnborg 6 ! OBS: Det saknas s{tt att avbryta den sk{rmmanipuleringsl{get som 7 ! kommer sist i programmet, annat {n CTRL-C. Du riskerar ocks} att 8 ! l{mna sk{rmen i oanv{ndbart skick. Resetta d} datorn. 10 ! ********************************************************************** 11 INTEGER : EXTEND 12 ; CHR$(12) 20 ; : ; " DETTA PROGRAM KOMMER ATT F\RKLARA CRTC-KRETSENS FUNKTION." 30 ; " ===========================================================" 60 FOR T=1 TO 5000 : NEXT T 70 ! 80 ; CHR$(12) : K=8 90 ; CUR(3,K) "CRTC {r den krets som styr video och synkgenerering." 100 ; CUR(4,K) "====================================================" 110 ; CUR(7,K) " Kretsen {r programmerbar f|r exempelvis :" 120 ; CUR(9,K) " * Antal tecken /rad" 130 ; CUR(10,K) " * Antal rader /bild" 140 ; CUR(11,K) " * Vertikal o horisentell frekvens" 150 ; CUR(12,K) " * Mark|radressering" 160 ; CUR(14,K) "Kretsen genererar ocks} adresser f|r avs|kning av" 170 ; CUR(15,K) "bildminne, linjeadresser f|r teckengenerator." 180 ; CUR(16,K) "Vidare finns en ing}ng f|r ljuspenna.(light pen)" 190 ; CUR(18,K) "Kretsen har beteckningen 6845 och finns i ABC 800/M,802,806." 200 ; CUR(19,K) "Programmeringen av kretsen g|rs vid uppstart eller reset av systemet." 210 ; CUR(20,K) "Antal register som programmeras {r 16 st (R0 - R15)." 220 ; CUR(21,K) "Programmeringen kan {ven utf|ras fr}n Basic." 230 ; CUR(23,54) "(G} vidare tryck tangent)"; : GET \$ 240 ! 250 ; CHR$(12) : K=15 260 ; CUR(4,22) "PROGRAMMERING FR]N BASIC." 270 ; CUR(5,22) "-------------------------" 280 ; CUR(7,K) "CRTC-kretsen behandlas som en intern I/O-enhet" 290 ; CUR(8,K) "och har adresserna 49, 56 och 57." 300 ; CUR(10,K) "Med instruktionen OUT 56,R adresserar man ett" 310 ; CUR(11,K) "av de 18 registren. (R = vilket register)" 320 ; CUR(13,K) "Med OUT 57,D skrivs sedan data till registret" 330 ; CUR(14,K) " (D = vilken data)" 340 ; CUR(16,K) "INP (49) l{ser adresserat register" 350 ; CUR(17,K-9) "_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ " 360 ; CUR(19,K-8) "Exempel: OUT 56,8 (Adresserar register 8)" 370 ; CUR(20,K) " OUT 57,3 (Data = 3 skrivs in i adresserat register)" 380 ; CUR(21,K) " (Vilket medf|r interlace-mode)" 390 ; CUR(23,5) "Vill du testa exemplet = (T), G} vidare = (CR)"; : GET T$ 400 IF T$="T" OR T$="t" GOTO 420 410 GOTO 440 420 OUT 56,8 : OUT 57,3 : FOR T=1 TO 7000 : NEXT T : OUT 57,0 : GOTO 390 430 ! 440 ; CHR$(12) 450 H$="HORISONTAL" : V$="VERTIKAL" : I$="INTERLACE mode" : M$="Max Line Adress" 460 C$="CURSOR" : A$="Adress" : T$="Total" : D$="Display" : S$="Sync" 470 R=3 : K=8 : R2=3 480 ; CUR(0,25) "CRTC-KRETSENS REGISTER:" 490 ; CUR(2,K) "Reg nr Reg namn Normalv{rde L{s Skriv" 500 ; CUR(R,K) A CUR(R,K+10) H$ CUR(R,K+21) T$ CUR(R,55) "127" 510 A=A+1 : R=R+1 520 ; CUR(R,K) A CUR(R,K+10) H$ CUR(R,K+21) D$ CUR(R,55) " 80" 530 A=A+1 : R=R+1 540 ; CUR(R,K) A CUR(R,K+10) H$ CUR(R,K+21) "Sync delay" CUR(R,55) "100" 550 A=A+1 : R=R+1 560 ; CUR(R,K) A CUR(R,K+10) H$ CUR(R,K+21) "Sync width" CUR(R,55) " 9" 570 A=A+1 : R=R+1 580 ; CUR(R,K) A CUR(R,K+10) V$ CUR(R,K+21) T$ CUR(R,55) " 30" 590 A=A+1 : R=R+1 600 ; CUR(R,K) A CUR(R,K+10) V$ CUR(R,K+21) "adjust" CUR(R,55) " 4" 610 A=A+1 : R=R+1 620 ; CUR(R,K) A CUR(R,K+10) V$ CUR(R,K+21) D$ CUR(R,55) " 24" 630 A=A+1 : R=R+1 640 ; CUR(R,K) A CUR(R,K+10) V$ CUR(R,K+21) "Synk pos" CUR(R,55) " 28" 650 A=A+1 : R=R+1 660 ; CUR(R,K) A CUR(R,K+10) "INTERLACE mode" CUR(R,55) " 0" 670 A=A+1 : R=R+1 680 ; CUR(R,K) A CUR(R,K+10) "Max Line Adress" CUR(R,55) " 9" 690 A=A+1 : R=R+1 700 ; CUR(R,K) A CUR(R,K+10) C$ CUR(R,K+18) "Start in line" CUR(R,55) " 40" 710 A=A+1 : R=R+1 720 ; CUR(R,K) A CUR(R,K+10) C$ CUR(R,K+18) "End in line" CUR(R,55) " 9" 730 A=A+1 : R=R+1 : R1=R 740 ; CUR(R,K) A CUR(R,K+10) "Start adress VDU mem (H)" CUR(R,55) "120" 750 A=A+1 : R=R+1 760 ; CUR(R,K) A CUR(R,K+10) "Start adress VDU mem (L)" CUR(R,55) " 0" 770 A=A+1 : R=R+1 780 ; CUR(R,K) A CUR(R,K+10) C$ CUR(R,K+18) "Adress (H)" CUR(R,55) "120" 790 A=A+1 : R=R+1 800 ; CUR(R,K) A CUR(R,K+10) C$ CUR(R,K+18) "Adress (L)" CUR(R,55) " 0" 810 A=A+1 : R=R+1 820 ; CUR(R,K) A CUR(R,K+10) "Light Pen reg (H) read only" CUR(R,55) "---" 830 A=A+1 : R=R+1 840 ; CUR(R,K) A CUR(R,K+10) "Light Pen reg (L) read only" CUR(R,55) "---" 850 R=5 : K=63 860 FOR L=1 TO 6 870 ; CUR(R1,K) "X" 880 R1=R1+1 : NEXT L 890 K=68 900 FOR L=1 TO 16 910 ; CUR(R2,K) "X" 920 R2=R2+1 : NEXT L 930 ON ERROR GOTO 1000 940 ; CUR(22,10);"Vilket register vill du skriva data i"; : INPUT R 950 ; CUR(22,10);" "; 960 ; CUR(22,10);"Data till register " R " = "; : INPUT D 970 ; CUR(22,10);" "; 980 OUT 56,R : OUT 57,D 990 GOTO 960 1000 IF R=0 THEN U=127 1001 IF R=1 THEN U=80 1002 IF R=2 THEN U=100 1003 IF R=3 THEN U=9 1004 IF R=4 THEN U=30 1005 IF R=5 THEN U=4 1006 IF R=6 THEN U=24 1007 IF R=7 THEN U=28 1008 IF R=8 THEN U=0 1009 IF R=9 THEN U=9 1010 IF R=10 THEN U=40 1011 IF R=11 THEN U=9 1012 IF R=12 THEN U=120 1013 IF R=13 THEN U=0 1014 IF R=14 THEN U=120 1015 IF R=15 THEN U=0 10000 OUT 56,R : OUT 57,U : GOTO 930