home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
64'er Special 25
/
64er_Magazin_Sonderheft_25_19xx_Markt__Technik_de.d64
/
floppy-lader.src
(
.txt
)
< prev
next >
Wrap
Commodore BASIC
|
2022-10-26
|
4KB
|
153 lines
10 rem open 1,8,1,"0:floppy-lader.obj"
12 open 2,4
13 sys 32768
14 ;
15 ; **********************
16 ; * floppy-lader *
17 ; * *
18 ; * von uwe gerlach *
19 ; * tel. 06151/316205 *
20 ; * bzw 06622/3908 *
21 ; * *
22 ; * 06.04.86 *
23 ; **********************
40 ;
50 ; laedt ein file ins floppy-ram
60 ; ab der gespeicherten adresse.
70 ; filename steht ab name im floppy-
80 ; speicher.
90 ;
100 .tit "floppy-lader c64 & vc1541 "
120 .opt p2
125 ;
130 *=$0400; assemblieren fuer die floppy
150 ;
200 zeiger = $37
210 laenge = $35
220 name = $04f0;anfang des filenamens
230 led = $1c00;adresse fuer led (bit 3)
1000 ;
1010 ; led bedienung und programmaufruf
1020 ;
1050 lda led
1060 ora #$08
1070 sta led;rote led einschalten
1080 ;
1090 jsr suche;dienstprogramm aufrufen
1100 ;
1120 lda led
1130 and #%11110111
1140 sta led;rote led ausschalten
1150 txa;fehlernummer in den akku
1160 beq ok;falls kein fehler aufgetreten
1180 ;
1190 jsr $e6c7;fehlermeldung bereitstellen
1200 jsr $c12c;led blinken
1210 ok rts;ende
2800 ;
2900 ;
2910 ; anfangsblock des files suchen
2920 ;
3000 suche jsr lies;block 18,1 nach puffer 0
3010 ldy #2;anfang erster fileeintrag
3020 sty zeiger
3030 eintr ldx #0
3040 lda $0300,y;filetyp lesen
3050 beq nix;ueberspringen, falls del
3060 iny:iny
3070 iny;zeiger y auf filenamen
3080 pruef lda name,x;zeichen aus filename holen
3090 cmp #"*";auf joker pruefen
3100 beq found;aktuellen fileeintrag uebernehmen
3110 cmp #"?";auf wild card pruefen
3120 beq wild;weiter mit naechstem zeichen
3130 cmp $0300,y;mit directoryzeichen vergleichen
3140 bne nix;falls ungleich naechster fileeintrag
3150 wild iny
3160 inx
3170 cpx #16;laenge des filenamens
3180 bne pruef;falls noch zeichen uebrig
4000 ;
4010 ; filename gefunden
4020 ;
4050 found ldy zeiger
4070 iny;zeiger y auf track/sektor herstellen
4080 lda $0300,y;anfangstrack holen
4090 sta lies+1;und sichern
4100 iny
4110 lda $0300,y;anfangssektor holen
4120 sta sektor+1;und sichern
4130 jmp laden
5000 ;
5010 ; falls noch nicht gefunden
5020 ;
5050 nix lda zeiger
5060 clc;addition vorbereiten
5070 adc #32;anfang naechster eintrag berechnen
5080 tay;als zeiger sichern
5090 sty zeiger;und zwischenspeichern
5100 bcc eintr;naechster block, falls vorhanden
5110 lda $0300;trackangabe naechster block
5120 bne neubl;falls nicht 0 und damit dir-ende
5130 ldx #$39;fehlernummer "file not found"
5138 rts;ende, da file nicht vorhanden
5140 neubl sta lies+1;als track fuer lesebefehl
5150 lda $0301;sektorangabe naechster block
5160 sta sektor+1;als sektor fuer lesebefehl
5170 jmp suche;weiter mit naechstem block
6000 ;
6010 ; file in den floppy-speicher laden
6020 ;
6040 laden jsr lies;ersten fileblock in den puffer
6050 lda #0
6060 sta $a7;kopierzeiger lowbyte
6070 lda $0303;anfangsadresse high
6080 sta $a8;kopierzeiger highbyte
6090 ldy $0302;anfangsadresse low
6100 ldx #4;erstes gueltiges byte
6110 nextbl lda #0;gesamtlaenge eines vollen blocks + 1
6120 sta laenge;erstes unbelegtes byte
6140 lda $0300;erstes byte (folgetrack)
6150 bne next;falls noch weitere bloecke
6160 ende lda $0301;zweites byte (anzahl bytes)
6170 clc;addition vorbereiten
6179 adc #1
6180 sta laenge;erstes unbelegtes byte
6190 jsr trans;rest kopieren
6195 rueck rts;zurueck zur led-kontrolle
7000 next sta lies+1;track naechster block
7010 lda $0301;zweites byte (folgesektor)
7020 sta sektor+1;sektor naechster block
7030 jsr trans;block in speicher kopieren
7035 bne rueck;fehler beim kopieren
7040 jsr lies;naechsten block einlesen
7050 ldx #2;erstes gueltiges byte
7060 jmp nextbl;weiter mit naechstem block
8000 ;
8010 ; unterroutinen
8020 ;
8050 lies lda #18
8060 sta $06;als track fuer puffer 0
8070 sektor lda #1
8080 sta $07;als sektor fuer puffer 0
8090 lda #$80;jobcode fuer "block lesen"
8100 sta $00;als auftrag fuer puffer 0
8110 weiter lda $00;status puffer 0
8120 bmi weiter;falls noch nicht fertig
8130 rts
9000 ;
9050 trans lda $0300,x;byte aus puffer
9060 sta ($a7),y;in den floppy-speicher
9070 iny;ram-zeiger erhoehen
9080 bne cont;falls kein low-byte ueberlauf
9090 inc $a8;high-byte erhoehen
9095 beq over;zeropage schuetzen
9100 cont inx;pufferzeiger erhoehen
9110 cpx laenge;schon fertig
9120 bne trans;weitermachen, falls nicht
9130 ldx #0;fehlerfreier ablauf
9150 rts;falls puffer kopiert
9200 ;
9210 over ldx #$52;fehlernummer "file too large"
9220 rts