home *** CD-ROM | disk | FTP | other *** search
/ No Fragments Archive 10: Diskmags / nf_archive_10.iso / MAGS / STMAGAZIN / STMAGAZIN.MSA / HEXER_DE.MOS / DEMO_3 / VERT2_L4.S < prev    next >
Text File  |  1986-02-06  |  4KB  |  222 lines

  1. ; Listing 4: Verbesserte Version der Farbbalken (Listing 1)
  2. ; für K-SEKA ab 1.5  Programm von Gunter (6719)
  3. ; auch falls wir uns wiederholen: nur in Farbe lauffähig
  4.  
  5.  
  6. x:
  7.     clr.l    -(sp)
  8.     move.w    #$20,-(sp)
  9.     trap    #1
  10.     move.l    d0,savereg
  11.     move.l    #$70000,a7
  12.  
  13.     move.l    #moff,-(sp)
  14.     clr.w    -(sp)
  15.     move.w    #25,-(sp)
  16.     trap    #14
  17.     addq.l    #8,sp
  18.     line_a $a        ;mouse off
  19.  
  20.     move.w    $ffff8240.w,oldback
  21.     move.b    #$02,$ffff820a.w
  22.  
  23.     bsr    hblon
  24.  
  25.     move.l    #text,-(sp)
  26.     move.w    #9,-(sp)
  27.     trap    #1
  28.     addq.l    #6,sp
  29.  
  30.     move.w    #7,-(sp)
  31.     trap    #1
  32.     addq.l    #2,sp
  33.     cmp.b    #"j",d0
  34.     beq    resident
  35.  
  36.     bsr    hbloff
  37.  
  38.     move.l    #mon,-(sp)
  39.     clr.w    -(sp)
  40.     move.w    #25,-(sp)
  41.     trap    #14
  42.     addq.l    #8,sp
  43.     line_a    $9        ;mouse on
  44.     move.l    savereg,-(sp)
  45.     move.w    #$20,-(sp)
  46.     trap    #1
  47.     addq.l    #6,sp
  48.  
  49. ;    illegal
  50.     clr.w    -(sp)
  51.     trap    #1
  52.  
  53. resident:
  54.     line_a    $9        ;mouse on
  55.     move.l    #stack,-(sp)
  56.     move.w    #$20,-(sp)
  57.     trap    #1
  58.     addq.l    #6,sp
  59.  
  60.     move.l    #gpb,a0
  61.     sub.l    #x,a0
  62.     add.w    #$100,a0
  63.     clr.w    -(sp)
  64.     move.l    a0,-(sp)
  65.     move.w    #$31,-(sp)    ;keep
  66.     trap    #1
  67. blk.w $100,0
  68. stack:
  69. ;----------------------------------
  70. savereg: dc.l 0
  71. oldback: dc.w 0
  72. scandelay: dc.w 0
  73. plus: dc.w 1
  74. text: dc.b 27,"EProgramm resident halten ? (j)",0
  75. even
  76. mon:  dc.b $08
  77. moff: dc.b $12
  78. ;-----------------------------
  79. hblon:
  80.     move.l    $120.w,oldtb    ;Vektoren retten
  81.     move.l    $70.w,old4
  82.     move.l    $70.w,new4b+2
  83.     move.b    $fffffa07.w,old07
  84.     move.b    $fffffa09.w,old09
  85.     move.b    $fffffa0f.w,old0f
  86.     move.b    $fffffa11.w,old11
  87.     move.b    $fffffa1b.w,old1b
  88.     and.b    #$df,$fffa09    ;disable Timer C
  89.     and.b    #$fe,$fffa07    ;disable Timer B
  90.     move.l    #newtb,$120.w
  91.     move.l    #new4,$70.w
  92.     or.b    #1,$fffffa07.w    ;Timer B erlauben
  93.     or.b    #1,$fffffa13.w
  94.     rts
  95.  
  96. hbloff:
  97.     move.w    sr,-(sp)
  98.     move.w    #$2700,sr
  99.     move.b    old07(pc),$fffffa07.w    ;restore all registers
  100.     move.b    old09(pc),$fffffa09.w
  101.     move.b    old0f(pc),$fffffa0f.w
  102.     move.b    old11(pc),$fffffa11.w
  103.     move.b    old1b(pc),$fffffa1b.w
  104.     move.l    oldtb,$120.w             ;restore vectors
  105.     move.l    old4,$70.w
  106.     move.w    (sp)+,sr
  107.     rts
  108.  
  109. old4:  dc.l 0
  110. oldtb: dc.l 0
  111. old07: dc.b 0
  112. old09: dc.b 0
  113. old0f: dc.b 0
  114. old11: dc.b 0
  115. old1b: dc.b 0
  116. even
  117.  
  118. new4:
  119.     clr.b    $fffffa1b.w
  120.     move.b    #128-1,$fffffa21.w 
  121.     move.b    #8,$fffffa1b.w
  122.  
  123.     move.w    d0,-(sp)    ;Feinverschiebung hoch-runter
  124.     move.w    plus,d0
  125.     add.w    d0,scandelay
  126.     bne    weiter1
  127.     move.w    #1,plus
  128. weiter1:
  129.     cmp.w    #7,scandelay
  130.     bne    weiter2
  131.     move.w    #-1,plus
  132. weiter2:
  133.     move.w    (sp)+,d0
  134. new4b:
  135.     jmp    $000000
  136.  
  137. newtb:
  138.     clr.b    $fffffa1b.w    ;timer stop
  139.     movem.l    d0-d3/a0-a1,-(sp)
  140.     move.w    #$fa21,a1
  141.     move.b    #200,(a1)
  142.     move.b    #8,$fffffa1b.w
  143.  
  144.     move.b    (a1),d0
  145. wait:                ;auf Ende der Zeile warten
  146.     cmp.b    (a1),d0
  147.     beq    wait
  148.     move.w    scandelay,d3    ;anzahl der zeilen
  149.                 ;um die nach unten verschoben wird
  150.     move.w    #$2700,sr
  151.     moveq    #30,d2
  152.     move.w    #$8209,a0    ;Videoadresszaehler
  153. waitloop:            ;auf Beginn der nächsten Zeile warten
  154.     move.b    (a0),d0
  155.     beq    waitloop
  156.     sub.w    d0,d2
  157.     lsl.l    d2,d0        ;hier wird synchronisiert
  158.  
  159.     moveq    #19,d0        ;Hiermit kann die Streifen horizontal
  160.                 ;verschieben
  161. waitloop2:            ;Ende der Zeile abwarten
  162.     nop
  163.     dbf    d0,waitloop2
  164.  
  165. scandelayloop:            ;Warteschleife für 1-8 Zeilen
  166.     blk.w    125,$4e71    ;$4e71 = nop
  167.     dbra    d3,scandelayloop
  168.  
  169.     move.w    #$8240,a0    ; $ff8240 = Hintergrundfarbe
  170.     moveq    #100,d0        ; Schleifenzaehler
  171.  
  172. loop:            ; das ist die 512 Takzyklenschleife aus Listing 1
  173.     move.w    #$777,(a0)
  174.     move.w    #$766,(a0)
  175.     move.w    #$755,(a0)
  176.     move.w    #$744,(a0)
  177.     move.w    #$733,(a0)
  178.     move.w    #$722,(a0)
  179.     move.w    #$700,(a0)
  180.     move.w    #$710,(a0)
  181.     move.w    #$720,(a0)
  182.     move.w    #$730,(a0)
  183.     move.w    #$740,(a0)
  184.     move.w    #$750,(a0)
  185.     move.w    #$760,(a0)
  186.     move.w    #$770,(a0)
  187.     move.w    #$761,(a0)
  188.     move.w    #$752,(a0)
  189.     move.w    #$743,(a0)
  190.     move.w    #$734,(a0)
  191.     move.w    #$725,(a0)
  192.     move.w    #$716,(a0)
  193.     move.w    #$727,(a0)
  194.     move.w    #$737,(a0)
  195.     move.w    #$747,(a0)
  196.     move.w    #$757,(a0)
  197.     move.w    #$767,(a0)
  198.     move.w    #$577,(a0)
  199.     move.w    #$566,(a0)
  200.     move.w    #$555,(a0)
  201.     move.w    #$544,(a0)
  202.     move.w    #$533,(a0)
  203.     move.w    #$522,(a0)
  204.     move.w    #$500,(a0)
  205.     move.w    #$510,(a0)
  206.     move.w    #$520,(a0)
  207.     move.w    #$530,(a0)
  208.     move.w    #$540,(a0)
  209.     move.w    #$550,(a0)
  210.     move.w    #$560,(a0)
  211.     move.w    #$570,(a0)
  212.     move.w    #$561,(a0)
  213.     move.w    #$552,(a0)
  214.     nop
  215.     nop            ;zum Ausgleich für die 512 Taktzyklen
  216.     dbf    d0,loop        ; und von vorne
  217.     move.w    oldback(pc),(a0)
  218.     movem.l    (sp)+,d0-d3/a0-a1
  219.     bclr    #0,$fffffa0f.w    ;end of interrupt
  220.     rte
  221. gpb:
  222. ə