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 >
Commodore BASIC  |  2022-10-26  |  4KB  |  153 lines

  1. 10 rem open 1,8,1,"0:floppy-lader.obj"
  2. 12 open 2,4
  3. 13 sys 32768
  4. 14 ;
  5. 15 ; **********************
  6. 16 ; *    floppy-lader    *
  7. 17 ; *                    *
  8. 18 ; *  von  uwe gerlach  *
  9. 19 ; * tel.  06151/316205 *
  10. 20 ; *   bzw 06622/3908   *
  11. 21 ; *                    *
  12. 22 ; *      06.04.86      *
  13. 23 ; **********************
  14. 40 ;
  15. 50 ; laedt ein file ins floppy-ram
  16. 60 ; ab der gespeicherten adresse.
  17. 70 ; filename steht ab name im floppy-
  18. 80 ; speicher.
  19. 90 ;
  20. 100 .tit "floppy-lader c64 & vc1541    "
  21. 120 .opt p2
  22. 125 ;
  23. 130 *=$0400; assemblieren fuer die floppy
  24. 150 ;
  25. 200 zeiger = $37
  26. 210 laenge = $35
  27. 220 name = $04f0;anfang des filenamens
  28. 230 led = $1c00;adresse fuer led (bit 3)
  29. 1000 ;
  30. 1010 ; led bedienung und programmaufruf
  31. 1020 ;
  32. 1050 lda led
  33. 1060 ora #$08
  34. 1070 sta led;rote led einschalten
  35. 1080 ;
  36. 1090 jsr suche;dienstprogramm aufrufen
  37. 1100 ;
  38. 1120 lda led
  39. 1130 and #%11110111
  40. 1140 sta led;rote led ausschalten
  41. 1150 txa;fehlernummer in den akku
  42. 1160 beq ok;falls kein fehler aufgetreten
  43. 1180 ;
  44. 1190 jsr $e6c7;fehlermeldung bereitstellen
  45. 1200 jsr $c12c;led blinken
  46. 1210 ok rts;ende
  47. 2800 ;
  48. 2900 ;
  49. 2910 ; anfangsblock des files suchen
  50. 2920 ;
  51. 3000 suche jsr lies;block 18,1 nach puffer 0
  52. 3010 ldy #2;anfang erster fileeintrag
  53. 3020 sty zeiger
  54. 3030 eintr ldx #0
  55. 3040 lda $0300,y;filetyp lesen
  56. 3050 beq nix;ueberspringen, falls del
  57. 3060 iny:iny
  58. 3070 iny;zeiger y auf filenamen
  59. 3080 pruef lda name,x;zeichen aus filename holen
  60. 3090 cmp #"*";auf joker pruefen
  61. 3100 beq found;aktuellen fileeintrag uebernehmen
  62. 3110 cmp #"?";auf wild card pruefen
  63. 3120 beq wild;weiter mit naechstem zeichen
  64. 3130 cmp $0300,y;mit directoryzeichen vergleichen
  65. 3140 bne nix;falls ungleich naechster fileeintrag
  66. 3150 wild iny
  67. 3160 inx
  68. 3170 cpx #16;laenge des filenamens
  69. 3180 bne pruef;falls noch zeichen uebrig
  70. 4000 ;
  71. 4010 ; filename gefunden
  72. 4020 ;
  73. 4050 found ldy zeiger
  74. 4070 iny;zeiger y auf track/sektor herstellen
  75. 4080 lda $0300,y;anfangstrack holen
  76. 4090 sta lies+1;und sichern
  77. 4100 iny
  78. 4110 lda $0300,y;anfangssektor holen
  79. 4120 sta sektor+1;und sichern
  80. 4130 jmp laden
  81. 5000 ;
  82. 5010 ; falls noch nicht gefunden
  83. 5020 ;
  84. 5050 nix lda zeiger
  85. 5060 clc;addition vorbereiten
  86. 5070 adc #32;anfang naechster eintrag berechnen
  87. 5080 tay;als zeiger sichern
  88. 5090 sty zeiger;und zwischenspeichern
  89. 5100 bcc eintr;naechster block, falls vorhanden
  90. 5110 lda $0300;trackangabe naechster block
  91. 5120 bne neubl;falls nicht 0 und damit dir-ende
  92. 5130 ldx #$39;fehlernummer "file not found"
  93. 5138 rts;ende, da file nicht vorhanden
  94. 5140 neubl sta lies+1;als track fuer lesebefehl
  95. 5150 lda $0301;sektorangabe naechster block
  96. 5160 sta sektor+1;als sektor fuer lesebefehl
  97. 5170 jmp suche;weiter mit naechstem block
  98. 6000 ;
  99. 6010 ; file in den floppy-speicher laden
  100. 6020 ;
  101. 6040 laden jsr lies;ersten fileblock in den puffer
  102. 6050 lda #0
  103. 6060 sta $a7;kopierzeiger lowbyte
  104. 6070 lda $0303;anfangsadresse high
  105. 6080 sta $a8;kopierzeiger highbyte
  106. 6090 ldy $0302;anfangsadresse low
  107. 6100 ldx #4;erstes gueltiges byte
  108. 6110 nextbl lda #0;gesamtlaenge eines vollen blocks + 1
  109. 6120 sta laenge;erstes unbelegtes byte
  110. 6140 lda $0300;erstes byte (folgetrack)
  111. 6150 bne next;falls noch weitere bloecke
  112. 6160 ende lda $0301;zweites byte (anzahl bytes)
  113. 6170 clc;addition vorbereiten
  114. 6179 adc #1
  115. 6180 sta laenge;erstes unbelegtes byte
  116. 6190 jsr trans;rest kopieren
  117. 6195 rueck rts;zurueck zur led-kontrolle
  118. 7000 next sta lies+1;track naechster block
  119. 7010 lda $0301;zweites byte (folgesektor)
  120. 7020 sta sektor+1;sektor naechster block
  121. 7030 jsr trans;block in speicher kopieren
  122. 7035 bne rueck;fehler beim kopieren
  123. 7040 jsr lies;naechsten block einlesen
  124. 7050 ldx #2;erstes gueltiges byte
  125. 7060 jmp nextbl;weiter mit naechstem block
  126. 8000 ;
  127. 8010 ; unterroutinen
  128. 8020 ;
  129. 8050 lies lda #18
  130. 8060 sta $06;als track fuer puffer 0
  131. 8070 sektor lda #1
  132. 8080 sta $07;als sektor fuer puffer 0
  133. 8090 lda #$80;jobcode fuer "block lesen"
  134. 8100 sta $00;als auftrag fuer puffer 0
  135. 8110 weiter lda $00;status puffer 0
  136. 8120 bmi weiter;falls noch nicht fertig
  137. 8130 rts
  138. 9000 ;
  139. 9050 trans lda $0300,x;byte aus puffer
  140. 9060 sta ($a7),y;in den floppy-speicher
  141. 9070 iny;ram-zeiger erhoehen
  142. 9080 bne cont;falls kein low-byte ueberlauf
  143. 9090 inc $a8;high-byte erhoehen
  144. 9095 beq over;zeropage schuetzen
  145. 9100 cont inx;pufferzeiger erhoehen
  146. 9110 cpx laenge;schon fertig
  147. 9120 bne trans;weitermachen, falls nicht
  148. 9130 ldx #0;fehlerfreier ablauf
  149. 9150 rts;falls puffer kopiert
  150. 9200 ;
  151. 9210 over ldx #$52;fehlernummer "file too large"
  152. 9220 rts
  153.