home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
64'er Special 15
/
64er_Magazin_Sonderheft_15_19xx_Markt__Technik_de_Side_B.d64
/
directory.ass
(
.txt
)
< prev
next >
Wrap
Commodore BASIC
|
2022-10-26
|
14KB
|
607 lines
100 rem
110 rem written by udo woehler
120 rem
130 rem sys49152,na$,zh%,fi$,bl%
140 rem ,ty%,tr%,se%,"psrud"
150 rem p = programm files
160 rem s = sequentielle files
170 rem r = relative files
180 rem u = user files
190 rem d = deleted files
200 rem
210 open2,8,2,"@:directory-load,p,w"
220 sys9*4096
230 .opt p,o2
240 *= $c000
250 proz = $7a
260 nchr(NULL)t = $0073
270 lchr(NULL)t = $0079
280 let = $a9a5
290 frmevl = $ad9e
300 checkkomma = $aefd
310 synerr = $af08
320 pruebuch = $b113
330 frestr = $b6a3
340 intnafac = $bc49
350 facnastri = $bddf
360 iecout = $ffa8
370 open = $ffc0
380 close = $ffc3
390 chkin = $ffc6
400 ckout = $ffc9
410 clrch = $ffcc
420 get = $ffe4
430 ; --------------------------------
440 lda #$24 ;string variable
450 jsr suchvar ;suchen
460 lda ftest ;flag fuer vorhanden
470 sta fdiskname ;speichern
480 lda $45 ;variablenname
490 ldx $46
500 sta diskname ;speichern
510 stx diskname+1
520 lda #$25 ;integer variable
530 jsr suchvar ;suchen
540 lda ftest ;flag fuer vorhanden
550 sta fanzahl ;speichern
560 lda $45 ;variablenname
570 ldx $46
580 sta anzahl ;speichern
590 stx anzahl+1
600 lda #$24 ;string variable
610 jsr suchvar ;suchen
620 lda ftest ;flag fuer vorhanden
630 sta ffilename ;speichern
640 lda $45 ;variablenname
650 ldx $46
660 sta filename ;speichern
670 stx filename+1
680 lda #$25 ;integer variable
690 jsr suchvar ;suchen
700 lda ftest ;flag fuer vorhanden
710 sta fbloecke ;speichern
720 lda $45 ;variablenname
730 ldx $46
740 sta bloecke ;speichern
750 stx bloecke+1
760 lda #$25 ;integer variable
770 jsr suchvar ;suchen
780 lda ftest ;flag fuer vorhanden
790 sta ffiletypen ;speichern
800 lda $45 ;variablenname
810 ldx $46
820 sta filetypen ;speichern
830 stx filetypen+1
840 lda #$25 ;integer variable
850 jsr suchvar ;suchen
860 lda ftest ;flag fuer vorhanden
870 sta ffiletracks ;speichern
880 lda $45 ;variablenname
890 ldx $46
900 sta filetracks ;speichern
910 stx filetracks+1
920 lda #$25 ;integer variable
930 jsr suchvar ;suchen
940 lda ftest ;flag fuer vorhanden
950 sta ffilesectors ;speichern
960 lda $45 ;variablenname
970 ldx $46
980 sta filesectors ;speichern
990 stx filesectors+1
1000 jsr checkkomma ;prueft auf komma
1010 ldy #$05 ;typflags mit $ff
1020 lda #$ff ;fuellen
1030 initfind dey
1040 sta flatyp,y
1050 iny
1060 dey
1070 bne initfind
1080 jsr frmevl ;string holen und vom
1090 jsr frestr ;stringstack entfernen
1100 ldy #$00
1110 lda ($64),y ;stringlaenge
1120 sta tylan ;speichern
1130 iny
1140 lda ($64),y ;stringzeiger
1150 sta $22 ;speichern
1160 iny
1170 lda ($64),y
1180 sta $23
1190 ldy #$00 ;zeiger auf ersten bst.
1200 testtyp ldx #$05 ;auf code testen
1210 naetest dex
1220 lda ($22),y
1230 cmp typ,x
1240 beq findtyp ;gefunden
1250 dex ;nein naechsten code
1260 inx
1270 bne naetest ;schon letzter code
1280 jmp endfind ;ja,ende codesuche
1290 findtyp txa ;code gefunden
1300 sta flatyp,x ;speichern
1310 iny ;naechster bst.
1320 cpy tylan ;schon letzter
1330 bne testtyp ;nein,weiter suchen
1340 endfind lda #$02 ;fileparameter setzen
1350 sta $b8
1360 sta $b9
1370 lda #$08
1380 sta $ba
1390 lda #$01
1400 sta $b7
1410 lda #<direkt
1420 ldx #>direkt
1430 sta $bb
1440 stx $bc
1450 jsr open ;direktkanal oeffnen
1460 lda #$0f ;fileparameter setzen
1470 sta $b8
1480 sta $b9
1490 lda #$08
1500 sta $ba
1510 lda #$00
1520 sta $b7
1530 jsr open ;kommandokanal oeffnen
1540 lda #$12 ;erster block 18/0 setzen
1550 sta track
1560 lda #$00
1570 sta sector
1580 lda fdiskname ;diskname gesucht
1590 beq nodiskn ;nein,speichern uebergehen
1600 jsr readtrse ;block lesen
1610 ldx #$02
1620 jsr chkin ;eingabe auf direktkanal
1630 ldx #$90 ;ersten 90 byte ueberlesen
1640 dummy1 jsr get
1650 dex
1660 bne dummy1
1670 ldx #$00 ;diskname+id einlesen
1680 nolzbu1 jsr get
1690 bne nonullname
1700 lda #$20
1710 nonullname sta diskname+5,x
1720 inx
1730 cpx #$10
1740 beq dummy3
1750 cpx #$12
1760 bne nolzbu1
1770 jmp enddiskn
1780 dummy3 jsr get ;2 byte ueberlesen
1790 jsr get
1800 jmp nolzbu1
1810 enddiskn jsr clrch;bus freigeben
1820 lda proz ;zeiger auf diskname
1830 sta zeig
1840 lda proz+1
1850 sta zeig+1
1860 lda #<diskname
1870 sta proz
1880 lda #>diskname
1890 sta proz+1
1900 jsr let ;diskname uebernehmen
1910 lda zeig ;zeiger ruecksetzen
1920 sta proz
1930 lda zeig+1
1940 sta proz+1
1950 nodiskn lda #$01 ;block 18/1
1960 sta sector
1970 lda #$00 ;anzahl eingelesener
1980 sta zaehl ;files ruecksetzen
1990 naesec jsr readtrse;block lesen
2000 ldx #$02 ;eingabe auf direktkanal
2010 jsr chkin
2020 jsr get ;naechsten block
2030 sta track ;merken
2040 jsr get
2050 sta sector
2060 lda #$08 ;anzahl eintraege
2070 sta eintrag ;pro block setzen
2080 naetrag jsr get ;filetyp lesen
2090 sta tyfla
2100 jsr get ;anfangstrack lesen
2110 sta $63 ;und nach string
2120 lda ffiletracks ;anfangstrack gefragt
2130 beq notra ;nein,dann uebergehen
2140 lda #$00
2150 sta $62
2160 ldx #$90
2170 sec
2180 jsr intnafac ;wandeln
2190 jsr facnastri
2200 clc
2210 php
2220 ldx #$00 ;string speichern
2230 nolzzif1 lda $0100,x
2240 plp
2250 php
2260 bcs janull1
2270 cmp #$00
2280 bne letzzif1
2290 plp
2300 sec
2310 php
2320 janull1 lda #$20
2330 letzzif1 sta filetracks+9,x
2340 inx
2350 cpx #$03
2360 bne nolzzif1
2370 plp
2380 notra jsr get ;anfangssektor lesen
2390 sta $63 ;und nach string
2400 lda ffilesectors ;anfangssektorn gefragt
2410 beq nosec ;nein,dann ueberlesen
2420 lda #$00
2430 sta $62
2440 ldx #$90
2450 sec
2460 jsr intnafac ;wandeln
2470 jsr facnastri
2480 clc
2490 php
2500 ldx #$00 ;string speichern
2510 nolzzif2 lda $0100,x
2520 plp
2530 php
2540 bcs janull2
2550 cmp #$00
2560 bne letzzif2
2570 plp
2580 sec
2590 php
2600 janull2 lda #$20
2610 letzzif2 sta filesectors+9,x
2620 inx
2630 cpx #$03
2640 bne nolzzif2
2650 plp
2660 nosec ldx #$00
2670 nolzbu2 jsr get ;filename lesen
2680 bne letzzif3 ;und speichern
2690 lda #$20
2700 letzzif3 sta filename+10,x
2710 inx
2720 cpx #$10
2730 bne nolzbu2
2740 ldx #$09
2750 dummy2 jsr get ;9 bytes ueberlesen
2760 dex
2770 bne dummy2
2780 jsr get ;anzahl bloecke
2790 sta $63 ;des files lesen
2800 jsr get ;und in string
2810 sta $62
2820 lda fbloecke ;bloecke gefragt
2830 beq noblo ;nein,dann uebergehen
2840 ldx #$90
2850 sec
2860 jsr intnafac ;wandeln
2870 jsr facnastri
2880 clc
2890 php
2900 ldx #$00 ;string speichern
2910 nolzzif3 lda $0100,x
2920 plp
2930 php
2940 bcs janull3
2950 cmp #$00
2960 bne letzzif4
2970 plp
2980 sec
2990 php
3000 janull3 lda #$20
3010 letzzif4 sta bloecke+9,x
3020 inx
3030 cpx #$03
3040 bne nolzzif3
3050 plp
3060 noblo lda ffiletypen;filetyp gefragt
3070 beq notyp ;nein,dann uebergehen
3080 ldx tyfla ;filetyp holen
3090 lda #$00 ;und nach string
3100 sta $62
3110 stx $63
3120 ldx #$90
3130 sec
3140 jsr intnafac ;wandeln
3150 jsr facnastri
3160 clc
3170 php
3180 ldx #$00 ;string speichern
3190 nolzzif4 lda $0100,x
3200 plp
3210 php
3220 bcs janull4
3230 cmp #$00
3240 bne letzzif5
3250 plp
3260 sec
3270 php
3280 janull4 lda #$20
3290 letzzif5 sta filetypen+9,x
3300 inx
3310 cpx #$03
3320 bne nolzzif4
3330 plp
3340 notyp lda tyfla ;filetyp
3350 and #$07 ;auf code testen
3360 ldx #$00
3370 noletzty cmp flatyp,x
3380 beq tragein ;gefunden,dann eintragen
3390 inx
3400 cpx #$05
3410 bne noletzty ;schon letzter code
3420 naeeintr dec eintrag
3430 beq unaesec ;letzter eintrag gelesen
3440 jsr get ;nein,2 byte ueberlesen
3450 jsr get ;und naechsten
3460 jmp naetrag ;eintrag bearbeiten
3470 unaesec lda track ;schon letzter block
3480 cmp #$00
3490 beq ende ;ja,dann ende
3500 jmp naesec ;nein,naechster block
3510 tragein ldx zaehl ;zeiger auf
3520 lda #$00 ;naechstes feldelement
3530 sta $62 ;nach string
3540 stx $63
3550 ldx #$90
3560 sec
3570 jsr intnafac ;wandeln
3580 jsr facnastri
3590 clc
3600 php
3610 ldx #$00 ;und speichern
3620 nolzzif5 lda $0100,x
3630 plp
3640 php
3650 bcs janull5
3660 cmp #$00
3670 bne letzzif6
3680 plp
3690 sec
3700 php
3710 janull5 lda #$20
3720 letzzif6 sta filename+4,x
3730 sta bloecke+4,x
3740 sta filetypen+4,x
3750 sta filetracks+4,x
3760 sta filesectors+4,x
3770 inx
3780 cpx #$03
3790 bne nolzzif5
3800 plp
3810 inc zaehl ;zeiger erhoehen
3820 jsr dolet ;variablen uebernehmen
3830 jmp naeeintr ;weiter naechster eintrag
3840 ende lda fanzahl ;anzahl gefragt
3850 beq noanzahl ;nein,dann uebergehen
3860 lda zaehl ;anzahl elemente
3870 sta $63 ;nach string
3880 lda #$00
3890 sta $62
3900 ldx #$90
3910 sec
3920 jsr intnafac ;wandeln
3930 jsr facnastri
3940 clc
3950 php
3960 ldx #$00 ;und speichern
3970 nolzzif6 lda $0100,x
3980 plp
3990 php
4000 bcs janull6
4010 cmp #$00
4020 bne letzzif7
4030 plp
4040 sec
4050 php
4060 janull6 lda #$20
4070 letzzif7 sta anzahl+4,x
4080 inx
4090 cpx #$03
4100 bne nolzzif6
4110 plp
4120 lda proz ;zeiger auf anzahl
4130 sta zeig ;setzen
4140 lda proz+1
4150 sta zeig+1
4160 lda #<anzahl
4170 sta proz
4180 lda #>anzahl
4190 sta proz+1
4200 jsr let ;und uebernehmen
4210 lda zeig ;zeiger ruecksetzen
4220 sta proz
4230 lda zeig+1
4240 sta proz+1
4250 noanzahl jsr clrch;bus freigeben
4260 lda #$02 ;kanaele schliessen
4270 jsr close
4280 lda #$0f
4290 jsr close
4300 rts ;ende
4310 ; --------------------------------
4320 readtrse ldx track;tracknummer
4330 lda #$00 ;nach string
4340 sta $62
4350 stx $63
4360 jsr clrch
4370 ldx #$90
4380 sec
4390 jsr intnafac ;wandeln
4400 jsr facnastri
4410 lda $0100 ;und speichern
4420 sta bread+9
4430 lda $0101
4440 cmp #$00
4450 bne nonulltr
4460 lda #$20
4470 nonulltr sta bread+10
4480 ldx sector ;sektornummer
4490 lda #$00 ;nach string
4500 sta $62
4510 stx $63
4520 ldx #$90
4530 sec
4540 jsr intnafac ;wandeln
4550 jsr facnastri
4560 lda $0100 ;und speichern
4570 sta bread+12
4580 lda $0101
4590 cmp #$00
4600 bne nonullsec
4610 lda #$20
4620 nonullsec sta bread+13
4630 ldx #$0f ;ausgabe auf kommandok.
4640 jsr ckout
4650 ldy #$00 ;u1(b-r) und b-p senden
4660 sendzei lda bread,y
4670 beq endsend
4680 jsr iecout
4690 cmp #$0d
4700 bne noreturn
4710 jsr endbef
4720 noreturn iny
4730 bne sendzei
4740 endsend jsr clrch ;bus freigeben
4750 rts ;und zurueck
4760 endbef jsr clrch
4770 ldx #$0f
4780 jsr ckout
4790 rts
4800 ; --------------------------------
4810 suchvar pha ;gesuchten typ sichern
4820 jsr checkkomma ;auf komma testen
4830 jsr lchr(NULL)t ;1.bst. holen
4840 sta $45
4850 ldx #$00 ;flag auf vorhanden
4860 stx ftest ;ruecksetzen
4870 cmp #$2c ;nicht vorhanden
4880 beq fertig ;dann fertig
4890 jsr lchr(NULL)t
4900 jsr pruebuch ;auf bst. testen
4910 bcs buch ;ja,dann weiter
4920 error jmp synerr ;nein,dann error
4930 buch ldx #$20
4940 jsr nchr(NULL)t ;naechstes zeichen
4950 bcc ziffer1 ;ziffer,dann uebernehmen
4960 jsr pruebuch ;auf bst. testen
4970 bcc nobuch ;nein,dann weiter
4980 ziffer1 tax ;ja,dann uebernehmen
4990 ziffer2 jsr nchr(NULL)t;naechste zeichen
5000 bcc ziffer2 ;ueberlesen
5010 jsr pruebuch
5020 bcs ziffer2
5030 nobuch pla ;gesuchter typ
5040 sta $46 ;speichern
5050 jsr lchr(NULL)t ;gleich letztem
5060 cmp $46 ;zeichen
5070 bne error ;nein,dann error
5080 jsr nchr(NULL)t
5090 stx $46 ;2.bst speichern
5100 ldx #$ff ;flag fuer vorhanden
5110 stx ftest ;setzen
5120 rts ;und fertig
5130 fertig pla
5140 rts ;fertig
5150 ; --------------------------------
5160 dolet lda proz ;zeiger auf
5170 sta zeig
5180 lda proz+1
5190 sta zeig+1
5200 lda #<filename ;filename setzen
5210 sta proz
5220 lda #>filename
5230 sta proz+1
5240 lda ffilename ;filename gefragt
5250 beq nofilename ;nein,dann uebergehen
5260 jsr let ;ja,dann uebernehmen
5270 jsr nchr(NULL)t
5280 nofilename lda fbloecke;bloecke gefragt
5290 beq nobloecke ;nein,dann uebergehen
5300 lda #<bloecke ;ja,dann uebernehmen
5310 sta proz
5320 lda #>bloecke
5330 sta proz+1
5340 jsr let
5350 jsr nchr(NULL)t
5360 nobloecke lda ffiletypen;filetyp gefragt
5370 beq nofiletypen ;nein,dann uebergehen
5380 lda #<filetypen ;ja,dann uebernehmen
5390 sta proz
5400 lda #>filetypen
5410 sta proz+1
5420 jsr let
5430 jsr nchr(NULL)t
5440 nofiletypen lda ffiletracks;anfangstrack gefragt
5450 beq nofiletracks ;nein,dann uebergehen
5460 lda #<filetracks ;ja,dann uebernehmen
5470 sta proz
5480 lda #>filetracks
5490 sta proz+1
5500 jsr let
5510 jsr nchr(NULL)t
5520 nofiletracks lda ffilesectors;anfangssektorn gefragt
5530 beq nofilesectors ;nein,dann ueberlesen
5540 lda #<filesectors ;ja,dann uebernehmen
5550 sta proz
5560 lda #>filesectors
5570 sta proz+1
5580 jsr let
5590 nofilesectors lda zeig;zeiger ruecksetzen
5600 sta proz
5610 lda zeig+1
5620 sta proz+1
5630 rts
5640 ; --------------------------------
5650 zeig .byte 00,00 ;zwischenspeicher des programms
5660 filename .asc " $( )";feld fuer let-anweisungen
5670 .byte $b2,$22
5680 .asc " "
5690 .byte $22,$aa,$22,$22,$00
5700 anzahl .asc " %"
5710 .byte $b2
5720 .asc " "
5730 .byte $00
5740 bloecke .asc " %( )"
5750 .byte $b2
5760 .asc " "
5770 .byte $00
5780 filetypen .asc " %( )"
5790 .byte $b2
5800 .asc " "
5810 .byte $00
5820 filetracks .asc " %( )"
5830 .byte $b2
5840 .asc " "
5850 .byte $00
5860 filesectors .asc " %( )"
5870 .byte $b2
5880 .asc " "
5890 .byte $00
5900 diskname .asc " $"
5910 .byte $b2,$22
5920 .asc " "
5930 .byte $22,$aa,$22,$22
5940 .byte $00
5950 typ .asc "dspur" ;typ-codes
5960 direkt .asc "#" ;feld fuer disk-kommandos
5970 bread .asc "u1: 2 0 "
5980 .byte $0d
5990 .asc "b-p 2 0"
6000 .byte $0d,$00
6010 flatyp .byte $00,$00,$00,$00,$00;zwischenspeicher
6020 track .byte $00
6030 sector .byte $00
6040 zaehl .byte $00
6050 eintrag .byte $00
6060 tyfla .byte $00
6070 tylan .byte $00
6080 ftest .byte $00
6090 ffilename .byte $00
6100 fbloecke .byte $00
6110 ffiletypen .byte $00
6120 ffiletracks .byte $00
6130 ffilesectors .byte $00
6140 fdiskname .byte $00
6150 fanzahl .byte $00