home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
64'er 1990 May
/
64er_Magazin_90-05_1990_Markt__Technik_de_Side_A.d64
/
nofreeze.src
(
.txt
)
< prev
next >
Wrap
Commodore BASIC
|
2022-10-26
|
3KB
|
100 lines
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