home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
64'er 1988 April
/
64er_Magazin_88-04_1988_Markt__Technik_de_Side_A.d64
/
quickjump.quell
(
.txt
)
< prev
next >
Wrap
Commodore BASIC
|
2022-10-26
|
3KB
|
99 lines
10 open4,4,7
20 sys9*4096
30 .opt oo,p4
40 vektor = $22
50 *= $c000
60 start jmp copy ; sprung zur initialisierung
70 flag .byt 0 ; flag fuer tabelleneintragung
80 tabend .byt $00,$d0 ; tabellenende
90 ; *******************
100 ; **initialisierung**
110 ; *******************
120 ; *** betriebssystem kopieren
130 copy ldy #0 : sty vektor : lda #$a0 : sta vektor+1
140 loop1 lda (vektor),y : sta (vektor),y
150 iny : bne loop1
160 inc vektor+1 : lda #$c0 : cmp vektor+1 : bne loop1
170 ; *** sprung in eigene zeilensuchroutine einbinden
180 lda #<tab : sta $a8c1
190 lda #>tab : sta $a8c2
200 ; *** tabelle loeschen bei 'run' einbinden
210 lda #<beg : sta $a020
220 lda #>beg : sta $a021
230 ; *** basic-rom ausblenden
240 lda $1 : and #254 : sta $1
250 ; *** tabelle loeschen
260 init lda #<tabanf : sta tabptr
270 lda #>tabanf : sta tabptr+1
280 rts
290 ; ****************************
300 ; **eigene zeilensuchroutine**
310 ; ****************************
320 tab sta $5f : stx $60 ; zn ab der zu suchen ist
330 ; ****************************
340 ; *** test ob tabelle leer ***
350 ; ****************************
360 lda #>tabanf : cmp tabptr+1 : bne noemp
370 lda #<tabanf : cmp tabptr : bne noemp
380 beq srch
390 ; ***************************
400 ; *** tabelle durchsuchen ***
410 ; ***************************
420 ; zeiger an tabellenanfang
430 noemp lda #<tabanf : sta vektor
440 lda #>tabanf : sta vektor+1
450 ; *** mit gesuchter nummer vergleichen
460 l01 ldy #0 : lda (vektor),y : cmp $14 : bne c01
470 iny : lda (vektor),y : cmp $15: beq found
480 ; *** zeiger auf naechsten eintrag
490 c01 lda vektor : clc : adc #4 : sta vektor
500 lda vektor+1 : adc #0 : sta vektor+1
510 ; *** wenn tabellenende noch nicht erreicht weitersuchen
520 cmp tabptr+1 : bne l01
530 lda vektor : cmp tabptr : bne l01
540 ; *** gesuchte nummer nicht in tabelle
550 : beq srch
560 ; *** zeilennummer gefunden - uebergeben
570 found iny : lda (vektor),y : sta $5f
580 iny : lda (vektor),y : sta $60
590 sec : rts
600 ; ****************************
610 ; *** programm durchsuchen ***
620 ; ****************************
630 srch ldy #1 : jsr $a61d : bcs fnd
640 ; *****************************
650 ; *** zeile existiert nicht ***
660 ; *****************************
670 nfnd clc : rts
680 ; **********************
690 ; *** zeile gefunden ***
700 ; **********************
710 ; *** eintragung nicht gewuenscht
720 fnd lda flag : bne c02
730 ; *** tabelle schon voll
740 lda tabptr+1 : cmp tabend+1 : bne apnd
750 lda tabptr : cmp tabend : bne apnd : sec : rts
760 ; ***********************************
770 ; *** nummer in tabelle eintragen ***
780 ; ***********************************
790 ; *** tabellenende-zeiger erhoehen
800 apnd ldy #0 : lda tabptr : sta vektor : clc : adc #4 : sta tabptr
810 lda tabptr+1 : sta vektor+1 : adc #0 : sta tabptr+1
820 ; *** adresse in tabelle eintragen
830 lda $14 : sta (vektor),y : iny
840 lda $15 : sta (vektor),y : iny
850 lda $5f : sta (vektor),y : iny
860 lda $60 : sta (vektor),y
870 c02 sec : rts
880 ; ******************************
890 ; **modifizierter 'run'-befehl**
900 ; ******************************
910 beg .byt 0
920 php : jsr init : jmp $a872
930 ; *************************************
940 ; **tabellenzeiger und tabellenanfang**
950 ; *************************************
960 tabptr .byt 0,0
970 tabanf .byt 0
980 .end