home *** CD-ROM | disk | FTP | other *** search
- 10 sys9*4096
- 20 .opt oo
- 30 *=$c000
- 40 ;
- 50 irqvek = $0314 ; vektor auf irq-routine
- 60 vicreg = $d011 ; vic-controllregister 1
- 70 raster = $d012 ; aktuelle rasterzeile
- 80 irqfrq = $dc04 ; register fuer irq-frequenz (lo/hi)
- 90 ciactl = $dc0e ; cia1-controllregister
- 100 nrmirq = $ea31 ; normale irq-routine
- 110 reset = $fce2 ; reset-routine
- 120 ;
- 130 line = 250 ; rasterzeile fuer interrupt
- 140 ;
- 150 lda #0 ; cia-interrupts
- 160 sta ciactl ; sperren
- 170 lda #<rout ; irq-vektor
- 180 ldx #>rout ; auf eigene
- 190 sta irqvek ; routine
- 200 stx irqvek+1 ; biegen
- 210 lda #199 ; cia-interrupt-frequenz
- 220 ldx #76 ; auf ungefaehr
- 230 sta irqfrq ; 50 hz stellen
- 240 stx irqfrq+1 ; (so wie bei raster-irq)
- 250 i1 lda vicreg ; warten, bis rasterzeile
- 260 bpl i1 ; >255
- 270 i1a lda vicreg ; warten, bis rasterzeile
- 280 bmi i1a ; wieder =0
- 290 lda #line-5 ; warten, bis rasterstrahl
- 300 i2 cmp raster ; 5 zeilen unter der
- 310 bne i2 ; gewuenschten zeile ist
- 320 lda #1 ; cia-interrupts
- 330 sta ciactl ; wieder freigeben
- 340 rts
- 1000 ;
- 1010 rout lda raster; momentane rasterzeile
- 1020 cmp #line-5 ; = startzeile?
- 1030 beq ok ; wenn ja, dann zu ok
- 1040 ldx #8 ; verzoegern, bis rasterstrahl
- 1050 c1 dex ; naechste zeile
- 1060 bne c1 ; erreicht hat
- 1070 lda raster ; momentane rasterzeile
- 1080 cmp #line-4 ; = startzeile-1? (zur sicherheit)
- 1090 beq ok ; wenn ja, dann zu ok
- 1100 jmp reset ; wenn nein, dann reset (=> freezeschutz)
- 1110 ok lda #line-3 ; dafuer sorgen,
- 1120 w1 cmp raster ; dass die ge-
- 1130 bne w1 ; wuenschte raster-
- 1140 ldx #10 ; zeile (line) ab-
- 1150 w2 dex ; solut flimmerfrei
- 1160 bne w2 ; angesprungen wird
- 1170 nop ; (nachzulesen in
- 1180 lda raster ; 64'er 06/89,
- 1190 cmp #line-2 ; seite 90 ff)
- 1200 beq w3 ;
- 1210 bit 2 ;
- 1220 nop ;
- 1230 w3 ldx #9 ;
- 1240 w4 dex ;
- 1250 bne w4 ;
- 1260 nop ;
- 1270 nop ;
- 1280 nop ;
- 1290 lda raster ;
- 1300 cmp #line-1 ;
- 1310 beq w5 ;
- 1320 bit 2 ;
- 1330 w5 ldx #10 ;
- 1340 w6 dex ;
- 1350 bne w6 ;
- 1360 nop ;
- 1370 lda raster ;
- 1380 cmp #line ;
- 1390 bne w7 ;
- 1400 w7 ldx #5 ;
- 1410 w8 dex ;
- 1420 bne w8 ;
- 1430 nop ; nochmals
- 1440 nop ; verzoegern
- 1450 nop ;
- 1460 nop ;
- 1470 nop ;
- 1480 nop ;
- 1490 ;
- 1500 ; ab hier folgt dann die haupt-
- 1510 ; raster-interrupt-routine, die so
- 1520 ; wie normal programmiert werden
- 1530 ; kann, nur braucht man das irq-
- 1540 ; request-register nicht mehr zu
- 1550 ; loeschen
- 2000 ;
- 2010 main lda #19 ; bildschirm auf 24
- 2020 sta vicreg ; zeilen schalten
- 2030 ldx #14 ; verzoegern
- 2040 l1 dex ;
- 2050 bne l1 ;
- 2060 lda #27 ; wieder auf 25 zeilen
- 2070 sta vicreg ; zurueckschalten
- 2080 jmp nrmirq ; zur normalen interrupt-routine
-