home *** CD-ROM | disk | FTP | other *** search
- 10 open 1,8,1,"0:ganz neu.obj"
- 12 rem open 2,4
- 13 sys 32768; einsprung fuer neuen profiass
- 14 ;
- 15 ; ***************************
- 16 ; * universal-lader v6 *
- 17 ; * *
- 18 ; * von uwe gerlach *
- 19 ; * tel. 06151/316205 *
- 20 ; * bzw. 06622/3908 *
- 21 ; ***************************
- 22 ;
- 23 ;
- 24 ; zeigt den diskinhalt als menue und
- 25 ; startet das ausgewaehlte programm.
- 26 ; mit 'univ.lader.init' gekennzeich-
- 27 ; nete eintraege werden nicht bear-
- 28 ; beitet. byte 22 jedes eintrags
- 29 ; enthaelt dazu eine kennung.
- 30 ; bytes 23 und 24 enthalten die
- 31 ; startadresse fuer maschinencode.
- 32 ;
- 33 ;
- 100 .tit "universal-lader c64 & vc1541 "
- 110 .pag 69
- 120 .opt o1
- 130 ;
- 140 *=$0801; anfangsadresse
- 150 ;
- 200 puffer = $0300
- 210 ausgabe = $0400
- 220 zeiger = $3b
- 230 save = $05f0
- 240 fnam = $fb
- 250 pointer = $fd
- 260 print = $ffd2
- 270 chkout = $ffc9
- 280 clrch = $ffcc
- 290 setfls = $ffba
- 300 setnam = $ffbd
- 310 open = $ffc0
- 320 chkin = $ffc6
- 330 input = $ffcf
- 340 close = $ffc3
- 350 clear = $e544
- 360 end = $7000
- 370 bildmit = $0400+411+80
- 380 bildend = $0700+130
- 390 anf =end+2
- 400 ram = anf+2
- 410 oben = $0400+80+11
- 420 load = $ffd5
- 430 tpuf = $0277
- 500 ;
- 510 ;
- 520 ; basic - einsprung
- 530 ;
- 540 .byte $0b,$08,$0a,$00,$9e,$32
- 550 .byte $30,$36,$31,$00,$00,$00
- 560 ;
- 600 nop: nop: nop; platzhalter fuer sprungbefehl
- 1000 ;
- 1010 ; kanaele oeffnen
- 1020 ;
- 1050 strt lda #1
- 1060 ldx #8
- 1070 ldy #15
- 1080 jsr setfls; parameter 1,8,15
- 1082 lda #0
- 1085 jsr setnam; kein name
- 1090 jsr open; open 1,8,15
- 1250 ;
- 1260 ; floppyprogramm kopieren und anstossen
- 1270 ;
- 1300 ldy #0; offset zum lesen
- 1302 sty fnam; ziel-basisadresse beim kopieren
- 1350 on ldx #1
- 1360 jsr chkout; ausgabe auf befehlskanal
- 1400 lda #"m"
- 1410 jsr print
- 1420 lda #"-"
- 1430 jsr print
- 1440 lda #"w"
- 1450 jsr print
- 1460 lda fnam; adresse low
- 1470 jsr print
- 1480 lda #5; adresse high
- 1490 jsr print
- 1500 lda #34; anzahl der folgenden bytes
- 1510 jsr print
- 1520 ;
- 1590 ldx #0; zaeheler befehlslaenge
- 1600 fuellen lda proganf,y; byte holen und
- 1610 jsr print; als datum fuer m-w senden
- 1620 iny; offset erhoehen
- 1640 cpy #progend-proganf
- 1650 beq copyok; falls fertig uebertragen
- 1655 inx
- 1660 cpx #34; maximalinhalt befehlspuffer
- 1670 bne fuellen; falls noch platz
- 1691 jsr clrch; befehl ausfuehren
- 1692 lda fnam
- 1694 clc
- 1696 adc #34
- 1698 sta fnam; zieladresse erhoehen
- 1730 jmp on; und weiter uebertragen
- 1790 ;
- 1815 copyok jsr clrch; befehl ausfuehren
- 1816 ;
- 1817 ldx #1
- 1819 jsr chkout; ausgabe auf befehlskanal
- 1820 lda #"u"
- 1830 jsr print
- 1840 lda #"c"
- 1850 jsr print
- 1880 jsr clrch
- 2000 ;
- 2010 ; bildmaske aufbauen
- 2020 ;
- 2021 lda #0
- 2022 sta $d020; rahmenfarbe
- 2023 sta $d021; hintergrundfarbe
- 2025 lda #$0e
- 2030 sta $0286; schriftfarbe
- 2050 jsr clear; bildschirm loeschen
- 2060 ldy #0
- 2070 ausg lda progend,y
- 2080 jsr print
- 2085 iny
- 2090 cpy #text1-progend
- 2100 bne ausg
- 2150 clc
- 2200 ldx #24; zeile
- 2210 ldy #1; spalte
- 2220 jsr $e50a; cursor positionieren
- 2250 ldy #0
- 2260 aus lda text1,y
- 2270 jsr print
- 2280 iny
- 2290 cpy #text2-text1
- 2300 bne aus
- 2301 ;
- 2302 ;kopieren der lade- / startroutine
- 2303 ;
- 2310 ldy #0; offset
- 2311 lda #<text4
- 2312 sta fnam
- 2313 lda #>text4
- 2314 sta fnam+1; zeiger auf quelle
- 2315 lda #<$d000-(fin+2-text4)
- 2316 sta pointer
- 2317 lda #>$d000-(fin+2-text4)
- 2318 sta pointer+1; zeiger auf ziel
- 2319 copy lda (fnam),y
- 2320 sta (pointer),y; kopieren
- 2321 iny
- 2322 cpy #fin+3-text4
- 2324 bne copy
- 2325 ;
- 2326 ;vorbereiten des rams
- 2327 ;
- 2330 lda #>ram
- 2331 sta pointer+1
- 2332 lda #<ram
- 2334 sta pointer
- 2335 jsr raum; leereintraege erzeugen
- 2337 lda #>bildmit
- 2339 sta fnam+1
- 2340 lda #<bildmit
- 2341 sta fnam
- 2350 ldx #1
- 2360 jsr chkout; ausgabe in kommandokanal
- 2370 ldx #0
- 2380 kom lda text2,x
- 2390 jsr print; befehl "m-r"...
- 2395 inx
- 2400 cpx #text3-text2
- 2410 bne kom
- 2420 jsr clrch
- 2430 ;
- 2440 ;daten von floppy holen
- 2445 ;
- 2450 ldx #1
- 2460 jsr chkin; eingaben von floppy
- 2470 ldx #0
- 2480 fn jsr input
- 2490 jsr wandel
- 2500 sta $0400+13,x
- 2510 inx
- 2520 cpx #18; laenge des disknamens
- 2530 bne fn
- 2540 jsr input
- 2550 jsr wandel
- 2560 sta $0400+35
- 2570 jsr input
- 2580 jsr wandel
- 2590 sta $0400+36
- 2600 ;
- 2610 ; eintraege auf bildschirm und ins ram
- 2620 ;
- 2740 ;
- 2750 ldx #20; position im floppypuffer
- 2751 get ldy #0; zeiger speicher
- 2752 jsr input; markierung holen
- 2753 cmp #$ff; kennung letztes byte
- 2754 beq stop; falls ja
- 2755 sta (pointer),y; ins ram
- 2756 iny: inx
- 2758 jsr input; adressbyte holen
- 2759 sta (pointer),y; und ins ram
- 2760 iny: inx
- 2761 jsr input; adressbyte holen
- 2762 sta (pointer),y; auch ins ram
- 2763 iny: inx
- 2768 ;
- 2777 trans jsr input; filenamen holen
- 2778 sta (pointer),y; ins ram
- 2780 jsr wandel
- 2790 sta (fnam),y; auf den bildschirm
- 2830 inx
- 2860 iny
- 2870 cpy #19; laenge parameter + filename
- 2880 bne trans
- 2890 lda pointer; ram-zeiger
- 2900 clc
- 2910 adc #19; aktualisieren
- 2920 sta pointer
- 2930 bcc check
- 2940 inc pointer+1; ram-zeiger erhoehen
- 2950 check lda fnam
- 2960 clc
- 2970 adc #40; fuer naechste zeile
- 2980 sta fnam
- 2990 bcc look
- 3000 inc fnam+1
- 3005 look lda fnam+1
- 3010 cmp #>bildend; letzte directoryzeile
- 3020 bne get
- 3025 lda fnam
- 3030 cmp #<bildend; letzte directoryzeile
- 3040 bcc get; unbedingter sprung falls kleiner
- 3050 ;
- 3052 ; weitere eintraege ins ram
- 3054 ;
- 3060 get1 ldy #0
- 3070 trans1 jsr input
- 3080 cmp #$ff; letztes byte
- 3090 beq stop
- 3110 sta (pointer),y; ins ram
- 3120 inx
- 3130 bne (NULL)1
- 3140 jsr lies
- 3150 (NULL)1 iny
- 3160 cpy #19
- 3170 bne trans1
- 3180 lda pointer
- 3190 clc
- 3200 adc #19
- 3210 sta pointer
- 3220 bcc get1
- 3230 inc pointer+1; ram-zeiger erhoehen
- 3235 bcs get1; unbedingter sprung
- 3240 ;
- 3250 stop jsr raum; leereintraege
- 3260 jsr clrch; eingabe wieder von tastatur
- 3270 lda pointer
- 3272 sec
- 3274 sbc #<21*19
- 3280 sta end
- 3290 lda pointer+1
- 3300 sbc #>21*19
- 3305 sta end+1
- 3310 ;
- 3320 init lda #<ram
- 3330 sta anf
- 3340 lda #>ram
- 3350 sta anf+1
- 3355 ldx #17; <cursor down> vorbereiten
- 3360 ;
- 3362 ; anzeigen eines ramausschnitts
- 3364 ;
- 3400 bprnt lda anf
- 3410 sta pointer
- 3420 lda anf+1
- 3430 sta pointer+1; zeiger ins ram
- 3440 ;
- 3450 ldy #10*19
- 3460 lda (pointer),y; markierung holen
- 3470 cmp #"n"
- 3475 beq quest; zeile ueberspringen
- 3477 ;
- 3480 lda #>oben
- 3485 sta fnam+1
- 3490 lda #<oben
- 3495 sta fnam; zeiger ins bild
- 3499 ;
- 3500 zprnt ldy #3
- 3510 prnt lda (pointer),y; aus dem ram
- 3515 jsr wandel; ascii -> bildschirmcode
- 3520 sta (fnam),y;auf den bildschirm
- 3530 iny
- 3540 cpy #19
- 3550 bne prnt
- 3590 lda pointer
- 3600 clc
- 3610 adc #19
- 3620 sta pointer
- 3630 bcc check2
- 3640 inc pointer+1; ram-zeiger erhoehen
- 3650 check2 lda fnam
- 3660 clc
- 3670 adc #40; fuer naechste zeile
- 3680 sta fnam
- 3690 bcc look2
- 3700 inc fnam+1
- 3705 look2 lda fnam+1
- 3710 cmp #>bildend; letzte directoryzeile
- 3720 bne zprnt
- 3725 lda fnam
- 3730 cmp #<bildend; letzte directoryzeile
- 3740 bcc zprnt; unbedingter sprung
- 3745 ;
- 3750 ldx #3: lda #$21; farbe
- 3755 balk sta $d9eb,x; hintergrundfarbe
- 3757 inx
- 3760 cpx #19
- 3765 bne balk
- 3800 ;
- 3810 ; scrollen und laden
- 3820 ;
- 3825 jsr clrch
- 3830 sty $ba
- 3840 abfr jsr $ffe4; get von tastatur
- 3850 tax; ergebnis sichern
- 3860 quest cpx #145; <cursor up>
- 3870 beq upp
- 3880 cpx #17; <cursor down>
- 3890 beq down
- 3900 cpx #"q"; <taste q>
- 3910 beq quit
- 3912 cpx #3; <run/stop>
- 3914 beq quit
- 3915 cpx #" "; <space>
- 3916 bne cont
- 3917 jmp strt
- 3920 cont cpx #13; <return>
- 3930 bne abfr
- 4800 ;
- 4810 lda #2; filenummer
- 4815 ldx #8; geraeteadresse
- 4820 ldy #1; sekundaeradresse
- 4825 jsr setfls; parameter setzen
- 4827 ;
- 4830 lda anf
- 4832 clc
- 4835 adc #10*19; anfang markierte zeile
- 4836 sta pointer; lowbyte zeiger
- 4837 tax; nach x bringen
- 4838 bcc sname
- 4839 inc anf+1; falls uebertrag
- 4840 sname lda anf+1
- 4841 sta pointer+1; highbyte anfang filename: pha; sichern
- 4842 ldy #1: lda #$4c; befehl jmp: sta 2061
- 4843 lda (pointer),y: sta 2062: iny
- 4844 lda (pointer),y: sta 2063; jmp startadresse
- 4845 inx: inx: inx; x auf anfang filename stellen
- 4846 pla: tay; highbyte zeiger holen: lda #16; laenge filename
- 4847 jsr setnam
- 4848 jsr clear; bildschirm loeschen
- 4850 lda #0; flag fuer load
- 4855 ldx #$ff
- 4860 ldy #$ff
- 4865 jmp $d000-(fin+2-text4); zur kopierten routine
- 4870 ;
- 4890 quit lda #1: jsr close: jmp clear
- 4940 ;
- 4945 upp jmp up
- 4947 ;
- 4950 down lda anf+1; fensteranfang high
- 4960 cmp end+1; ablagespeicherende
- 4970 beq down1; falls anf=end
- 4975 bcs hilf; falls anf>=end
- 4990 down2 lda anf; fensteranfang low
- 5000 clc
- 5015 adc #19; naechste zeile
- 5020 sta anf
- 5025 bcc hilf1
- 5030 inc anf+1
- 5035 jmp bprnt; neuen ausschnitt anzeigen
- 5040 down1 lda anf
- 5050 cmp end
- 5060 bcs hilf
- 5065 bcc down2
- 5070 ;
- 5080 up lda anf+1
- 5090 cmp #>ram+19
- 5100 bcc hilf
- 5105 bne up1
- 5110 lda anf
- 5120 cmp #<ram+19
- 5130 bcc wtr
- 5140 up1 lda anf
- 5150 sec
- 5160 sbc #19; zeile hoch
- 5170 sta anf
- 5180 bcs hilf1
- 5190 dec anf+1
- 5200 hilf1 jmp bprnt
- 5210 wtr jmp abfr; keine reaktion
- 5220 ;
- 5230 hilf ldx #145; <cursor up> vorbereiten
- 5240 jmp bprnt; und ausschnitt angleichen
- 9200 ;
- 9210 ; wandlung ascii -> bildschirmcode
- 9220 ;
- 9250 wandel cmp #63
- 9260 bcs zahlen; falls >=63
- 9270 rts; ende wandlung, da <63
- 9280 zahlen cmp #96
- 9290 bcs gross; falls >=96
- 9300 sbc #63; (carry ist 0!)
- 9310 rts; ende wandlung
- 9320 gross sbc #32; (carry ist 1!)
- 9330 cmp #128
- 9340 bcs sonder; falls >=160
- 9350 rts; ende wandlung
- 9360 sonder sbc #96
- 9370 rts; ende wandlung
- 9400 ;
- 9410 ; leere eintraege erzeugen
- 9420 ;
- 9450 raum ldx #0
- 9460 ldy #0
- 9470 lda #" "
- 9480 jsr wandel
- 9490 fill sta (pointer),y; ins ram
- 9500 inc pointer
- 9510 bne jump
- 9520 inc pointer+1; highbyte erhoehen
- 9530 jump inx
- 9540 cpx #10*19; anzahl fuehrender leerzeichen
- 9550 bne fill
- 9560 rts; ende raum
- 9600 ;
- 9610 ; neue daten von disk holen
- 9620 ;
- 9630 lies tya
- 9640 pha; y retten
- 9645 jsr clrch
- 9650 ldx #1
- 9660 jsr chkout; zeichen auf kanal # 1
- 9670 ldx #0
- 9680 komm lda text3,x; "m-e"...
- 9690 jsr print
- 9700 inx
- 9710 cpx #text4-text3
- 9720 bne komm
- 9722 jsr clrch
- 9724 ldx #1
- 9726 jsr chkout
- 9728 ldx #0
- 9730 kmnd lda text2,x; "m-r"...
- 9732 jsr print
- 9734 inx
- 9736 cpx #text3-text2
- 9738 bne kmnd
- 9739 jsr clrch
- 9740 ldx #1
- 9750 jsr chkin; daten wieder von floppy
- 9755 ldx #0; wiederherstellen
- 9760 pla
- 9770 tay; y wiederholen
- 9790 rts; ende daten holen
- 10000 ;
- 10010 ;
- 10020 ; floppyprogramm
- 10030 ;
- 11000 proganf jsr $d042; floppy initialisieren
- 11005 start lda #18
- 11010 sta $06; track
- 11020 ldx #0
- 11030 stx $07; sektor
- 11032 lda #$80; jobcode "block lesen"
- 11034 sta $00; als auftrag fuer puffer 0
- 11036 warten lda $00; status puffer 0
- 11040 bmi warten; falls noch nicht fertig
- 11050 cmp #1; fehler abfragen
- 11060 bne ende; falls fehler aufgetreten
- 11100 ;
- 11110 dname lda puffer+144,x; disknamen holen
- 11120 sta ausgabe,x; in den ausgabepuffer
- 11130 inx
- 11140 cpx #20; name und id komplett
- 11150 bne dname; weiter falls nein
- 11500 ;
- 11510 next lda puffer; blockzeiger track
- 11520 beq ende; falls naechster track 0
- 11530 sta $06
- 11540 lda puffer+1; blockzeiger sektor
- 11550 sta $07
- 11560 lda #$80; jobcode "block lesen"
- 11570 sta $00; als auftrag fuer puffer 0
- 11580 warten1 lda $00; status puffer 0
- 11590 bmi warten1; falls noch nicht fertig
- 11700 lda #>puffer+2
- 11710 sta zeiger+1
- 11720 lda #<puffer+2; anfang 1. eintrag
- 11730 nochmal sta zeiger; zeiger in puffer herstellen
- 11750 ldy #0
- 11760 lda (zeiger),y; filetyp holen
- 11770 beq weiter; falls deleted
- 11800 ldy #22
- 11810 lda (zeiger),y; markierung holen
- 11820 bmi weiter; falls markiert
- 11830 sta ausgabe,x; sonst in den ausgabepuffer
- 11840 inx: iny
- 11842 lda (zeiger),y; reservierte bytes
- 11844 sta ausgabe,x; holen
- 11846 inx: iny
- 11847 lda (zeiger),y; (startadresse)
- 11848 sta ausgabe,x; und uebergeben
- 11849 inx
- 11850 ldy #3; anfang filename
- 11860 name lda (zeiger),y; zeichen holen
- 11870 sta ausgabe,x; und in den ausgabepuffer
- 11880 inx
- 11890 bne ok; falls puffer noch nicht voll
- 11950 sty save; y retten
- 11960 rts; rueckgabe der kontrolle ans dos
- 13000 ;
- 13010 einsprg ldx #0
- 13020 ldy save; register wieder herstellen
- 13050 ok iny
- 13060 cpy #19; letztes zeichen des namens
- 13070 bne name; falls noch nicht fertig
- 13100 weiter lda zeiger
- 13110 clc; addition vorbereiten
- 13120 adc #32; zeiger auf naechsten eintrag
- 13130 bcc nochmal; falls noch ein eintrag
- 13140 bcs next; sonst naechsten block
- 13190 ;
- 13200 ende lda #$ff; zeichen fuer ende
- 13210 sta ausgabe,x; in den ausgabepuffer
- 13220 rts; kontrolle zurueck ans dos
- 13250 ;
- 13395 progend .asc " disk-name: id: "
- 13400 text1 .asc "mit cursortasten auswaehlen und return[158]"
- 13410 text2 .asc "m-r": .byte <ausgabe, >ausgabe, 0
- 13420 text3 .asc "m-e": .byte <$0500+einsprg-proganf
- 13430 .byte >$0500+einsprg-proganf
- 14000 ;
- 14010 ; lade- / startroutine
- 14020 ;
- 14050 text4 jsr load
- 14060 stx $2d
- 14070 sty $2e; zeiger programmende
- 14868 jsr $a533
- 14870 lda #1: jsr close; ladekanal schliessen
- 14875 jsr clear; bildschirm loeschen
- 14877 pla: pla
- 14880 lda #$a7: pha
- 14882 lda #$ae: pha; stack aktualisieren
- 14884 fin jmp $a659; korrekter ruecksprung
- 14910 .end
-