home *** CD-ROM | disk | FTP | other *** search
- 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
-