home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
64'er Special 9
/
64er_Magazin_Sonderheft_09_86-09_1986_Markt__Technik_de_Side_A.d64
/
track40.source
(
.txt
)
< prev
next >
Wrap
Commodore BASIC
|
2022-10-26
|
23KB
|
850 lines
100 ; basic-erweiterung zur nuetzung der spuren 36-40 auf der diskette
110 ; :
120 ; germano caronni
130 ; greubstelstr.10
140 ; ch-5430 wettingen
150 ; tel.0041/56262574
160 ; :
900 ;
49152 ".ba 49152 ;zuerst drei floppy-routinen dann hauptprogramm
49152 " lda 7168 ;start 50000 einsprungpunkt vom interpret 50022
49155 " and #159 ;formatieren (36-40) --- dc-timer fuer spur 36 und hoeher
49157 " sta 7168 ;einrichten
49160 " ldy #4
49162 " sty 49
49164 " ldy #0
49166 " sty 48 ;zeiger auf 1024
49168 " sty 52
49170 " lda #14
49172 " sta 82 ;header-kennzeichen
49174 " lda 2046
49177 " sta 83 ;spur
49179 " sty 84 ;sektor
49181 " lda #0
49183 " sta 85 ;leer
49185 " tya
49186 " pha ;sektor retten
49187 " jsr 63184 ;diese fuenf bytes in gcr-code wandeln und ab $400 ablegen
49190 " pla ;(das gibt die einzelnen header fuer die sektoren einer spur)
49191 " tay ;sektor wieder holen
49192 " iny
49193 " cpy 2045 ;schauen ob letzter sektor
49196 " bne 49170 ;wenn nicht dann den naechsten umwandeln
49198 " lda 52 ;die adresse des letzten bytes des letzten sektors +1 holen
49200 " sta 2047 ;und retten
49203 " lda #13
49205 " sta 71 ;datenblockkennzeichen
49207 " ldy #0
49209 " tya
49210 " sta 768,y
49213 " iny
49214 " bne 49210 ;datenblock ab 768 mit lauter nullen fuellen
49216 " sta 48
49218 " sta 52
49220 " lda #3
49222 " sta 49 ;die zeiger auf $300 richten (768)
49224 " jsr 62953 ;pruefsumme berechnen
49227 " sta 58 ;und speichern
49229 " jsr 63375 ;datenblock in gcr-kode wandeln
49232 " jsr 65038 ;dc auf schreiben und die spur loeschen
49235 " ldx #0
49237 " ldy #5
49239 " lda #255
49241 " bvc 49241
49243 " clv
49244 " sta 7169 ;5*255 als header-sync(hronistationsmarkierung) auf diskette
49247 " dey
49248 " bne 49241
49250 " ldy #5
49252 " lda 1024,x
49255 " inx
49256 " bvc 49256
49258 " clv
49259 " sta 7169 ;dann die 5 header-bytes
49262 " dey
49263 " bne 49252
49265 " ldy #9
49267 " lda #85
49269 " bvc 49269
49271 " clv
49272 " sta 7169 ;9 leerbytes als luecke abspeichern
49275 " dey
49276 " bne 49269
49278 " ldy #5
49280 " lda #255
49282 " bvc 49282
49284 " clv
49285 " sta 7169 ;datenblock-sync
49288 " dey
49289 " bne 49282
49291 " ldy #187
49293 " lda 256,y ;den ersten teil des umgewandelten blockes auf diskette
49296 " bvc 49296
49298 " clv
49299 " sta 7169
49302 " iny
49303 " bne 49293
49305 " lda 768,y ;und dann den zweiten teil
49308 " bvc 49308
49310 " clv
49311 " sta 7169
49314 " iny
49315 " bne 49305
49317 " ldy #7
49319 " lda #85
49321 " bvc 49321
49323 " clv
49324 " sta 7169 ;wieder 7 bytes luecke
49327 " dey
49328 " bne 49321
49330 " cpx 2047 ;schauen ob alle sektoren eingerichtet
49333 " bne 49237 ;wenn nicht dann den naechsten
49335 " jsr 65024 ;dc auf lesen schalten
49338 " lda #7
49340 " sta 71 ;datenblock-kennzeichen wieder richten
49342 " jmp 64926 ;zurueck zur normalen floppy irq-routine
49345 " lda #16 ;eisprungspunkt mit m-e
49347 " sta 2045 ;pro spur 16 sektoren einrichten
49350 " ldx #36
49352 " stx 2046 ;spur 36
49355 " stx 10 ;dem irq-prg bekannt geben
49357 " lda #224
49359 " sta 2 ;irq-prg starten
49361 " lda 2
49363 " bmi 49361 ;warten auf fertig
49365 " inx
49366 " cpx #40 ;schauen ob schon bei spur 40
49368 " bcc 49352 ;wenn nicht naechste spur
49370 " dec 2045 ;pro spur 15 sektoren
49373 " cpx #41
49375 " bne 49352 ;und die spur 40 noch formatieren
49377 " rts ;ende
49378 " lda 7168 ;einen block ab $400 speichern (spur+sektor in 2046,2047)
49381 " and #159 ;dc-timer richten
49383 " sta 7168
49386 " lda #0
49388 " tay
49389 " clc
49390 " adc 1024,y ;erste (interne) pruefsumme berechnen
49393 " iny
49394 " cpy #255
49396 " bne 49389
49398 " sta 1279 ;und als letztes datenblock-byte speichern
49401 " lda #13
49403 " sta 71 ;datenblock kennzeichen richten
49405 " lda #4
49407 " sta 49
49409 " lda #0
49411 " sta 48 ;zeiger auf $400
49413 " sta 52
49415 " jsr 62953 ;pruefsumme berechnen
49418 " sta 58 ;speichern
49420 " jsr 63375 ;datenblock umwandeln in gcr-kode
49423 " lda #14 ;header aufbauen
49425 " sta 82 ;header-kennzeichen
49427 " lda 2046
49430 " sta 83 ;spur
49432 " lda 2047
49435 " sta 84 ;sektor
49437 " lda #0
49439 " sta 85 ;leer
49441 " sta 48
49443 " sta 52
49445 " lda #3 ;zeiger auf $300
49447 " sta 49
49449 " jsr 63184 ;header in gcr umwandeln (ab 768 im speicher)
49452 " jsr 1520 ;warten auf sync
49455 " bvc 49455
49457 " clv
49458 " lda 7169
49461 " cmp 768,y ;richtigen header suchen
49464 " bne 49452 ;wenn nicht dann naechsten
49466 " iny
49467 " cpy #5
49469 " bne 49455
49471 " lda #7
49473 " sta 71 ;datenblock-kennzeichen wieder richten (verzoegerung)
49475 " ldx #6
49477 " bvc 49477 ;6 bytes ueberlesen
49479 " clv
49480 " dex
49481 " bne 49477
49483 " lda #255
49485 " sta 7171
49488 " lda 7180
49491 " and #31
49493 " ora #192
49495 " sta 7180 ;dc auf schreiben umschalten
49498 " lda #255
49500 " ldx #5
49502 " sta 7169 ;5 bytes daten-sync schreiben
49505 " clv
49506 " bvc 49506
49508 " clv
49509 " dex
49510 " bne 49506
49512 " ldy #187
49514 " lda 256,y ;ersten teil des blockes
49517 " bvc 49517
49519 " clv
49520 " sta 7169
49523 " iny
49524 " bne 49514
49526 " lda 1024,y ;und dann den zweiten teil schreiben
49529 " bvc 49529
49531 " clv
49532 " sta 7169
49535 " iny
49536 " bne 49526
49538 " bvc 49538 ;warten das das letzte byte fertig geschrieben ist
49540 " jsr 65024 ;dc auf lesen
49543 " jsr 1520 ;warten auf sync
49546 " bvc 49546
49548 " clv
49549 " lda 7169
49552 " cmp 768,y ;den richtigen header suchen
49555 " bne 49543
49557 " iny
49558 " cpy #5
49560 " bne 49546
49562 " bne 49452
49564 " jsr 1520
49567 " ldy #187
49569 " lda 256,y ;und den soeben geschrieben block kontrollieren
49572 " bvc 49572
49574 " clv
49575 " eor 7169
49578 " bne 49562 ;wenn fehler dann alles von vorne
49580 " iny
49581 " bne 49569
49583 " lda 1024,y ;zweiten teil kontrollieren
49586 " bvc 49586
49588 " clv
49589 " eor 7169
49592 " bne 49562
49594 " iny
49595 " bne 49583
49597 " jmp 64926 ;zurueck zur floppy irq-routine
49600 " lda 2046
49603 " sta 10 ;spur festlegen
49605 " lda #224 ;irq-prg. starten
49607 " sta 2
49609 " lda 2
49611 " bmi 49609 ;warten auf fertig
49613 " .by 234 234 ;luecke
49615 " .by 234 234
49617 " rts ;ende
49618 " bit 7168 ;warten auf sync
49621 " bmi 49618 ;wenn noch keine dann nochmal
49623 " lda 7169
49626 " clv ;dc-port freimachen
49627 " ldy #0
49629 " rts
49630 " lda 7168 ;einen block lesen und in $300 speichern tr+se 2046,2047
49633 " and #159 ;dc-timer richten
49635 " sta 7168
49638 " lda #14
49640 " sta 82 ;header einrichten
49642 " lda 2046
49645 " sta 83 ;spur
49647 " lda 2047
49650 " sta 84 ;sektor
49652 " lda #0
49654 " sta 85 ;leer
49656 " sta 52
49658 " sta 48
49660 " lda #3 ;zeiger auf $300
49662 " sta 49
49664 " jsr 63184 ;header umwandeln
49667 " bit 7168 ;warten auf sync
49670 " bmi 49667
49672 " lda 7169
49675 " clv
49676 " ldy #0
49678 " bvc 49678
49680 " clv
49681 " lda 7169
49684 " cmp 768,y ;den richtigen header suchen
49687 " bne 49667
49689 " iny
49690 " cpy #5
49692 " bne 49678
49694 " ldy #0
49696 " bit 7168 ;warten auf sync
49699 " bmi 49696
49701 " lda 7169
49704 " clv
49705 " bvc 49705
49707 " clv
49708 " lda 7169
49711 " sta 768,y ;ersten teil des blockes
49714 " iny
49715 " bne 49705
49717 " ldy #186
49719 " bvc 49719
49721 " clv
49722 " lda 7169
49725 " sta 256,y ;und dann den zweiten teil lesen und speichern
49728 " iny
49729 " bne 49719
49731 " jsr 63712 ;in hex-bytes umwandeln
49734 " lda 56
49736 " cmp #13 ;schauen ob datenblock-kennzeichen stimmt
49738 " bne 49638 ;wenn nicht alles von vorne
49740 " lda #0
49742 " sta 48
49744 " lda #3
49746 " sta 49 ;zeiger wieder auf $300
49748 " jsr 62953 ;pruefsumme berechnen
49751 " cmp 58 ;kontrolle
49753 " bne 49638 ;wenn falsch nochmals
49755 " lda #0
49757 " tay
49758 " clc
49759 " adc 768,y ;interne pruefsumme berechnen
49762 " iny
49763 " cpy #255
49765 " bne 49758
49767 " cmp 1023 ;und kontrolle
49770 " bne 49753
49772 " jmp 64926 ;zurueck zum irq
49775 " lda 2046
49778 " sta 10
49780 " lda #224
49782 " sta 2
49784 " lda 2
49786 " bmi 49784
49788 " rts ;ende
49789 ".by 'i' '#2' 'b-p 2 0' 8 ;daten (die >8< ist die drivenummer)
49800 " lda #226 ;routine zum senden einer der drei floppy-prg.(formatieren)
49802 ".by 44 ;bit ...
49803 " lda #252 ;einsprung (schreiben)
49805 ".by 44 ;bit ...
49806 " lda #159 ;einsprung (lesen)
49808 " pha ;retten
49809 " jsr 65511 ;clall alle kanaele schliessen
49812 " lda #1 ;log. file nr.
49814 " ldx 49799 ;geraete-adresse (8)
49817 " ldy #15 ;sekundaeradr.
49819 " jsr 65466 ;setlfs
49822 " lda #1 ;laenge
49824 " ldx #125 ;adresse
49826 " ldy #194
49828 " jsr 65469 ;setnam
49831 " jsr 65472 ;open (das ganze entspricht open1,8,15,"i"
49834 " bcc 49839 ;wenn kein fehler
49836 " jmp 57593 ;fehlerauswertung
49839 " lda #2
49841 " ldx 49799
49844 " tay
49845 " jsr 65466 ;setlfs
49848 " lda #2
49850 " ldx #126
49852 " ldy #194
49854 " jsr 65469 ;setnam
49857 " jsr 65472 ;open (open2,8,2,"#2")
49860 " bcs 49836 ;fehler?
49862 " jsr 65484 ;clrchn (alle ausgabe- eingabekanaele ruecksetzen)
49865 " ldx #2
49867 " jsr 65478 ;chkin (kanal 2 auf eingabe richten)
49870 " jsr 65487 ;chrin (ein byte vom seriellen bus holen-puffernummer)
49873 " jsr 65484 ;chrchn
49876 " ldx #1
49878 " jsr 65481 ;chkout (kanal 1 als ausgabe definieren)
49881 " bcs 49836 ;fehler?
49883 " ldy #0
49885 " lda 49792,y ;'b-p 2 0'
49888 " jsr 65490 ;chrout (ein byte ausgeben)
49891 " iny
49892 " cpy #7 ;schauen ob alles
49894 " bne 49885
49896 " jsr 65484 ;clrchn
49899 " ldx #2
49901 " jsr 65481 ;chkout
49904 " bcs 49836
49906 " pla ;die am anfang gerette laenge des prg. wieder holen
49907 " sta 143 ;und abspeichern
49909 " ldy #0
49911 " lda 143 ;schauen welches
49913 " cmp #226
49915 " bne 49923
49917 " lda 49152,y ;formatieren
49920 " jmp 49940
49923 " cmp #252
49925 " bne 49933
49927 " lda 49378,y ;schreiben
49930 " jmp 49940
49933 " cmp #159
49935 " bne 49836
49937 " lda 49630,y ;lesen
49940 " jsr 65490 ;gesendet werden muss (chrout)
49943 " bcs 49836 ;fehler?
49945 " iny
49946 " cpy 143 ;schauen ob das ganze prg. gesendet wurde
49948 " bne 49911 ;wenn nicht naechstes byte
49950 " jsr 65484 ;clrchn
49953 " lda #2
49955 " jmp 65475 ;close (kanal 2 wird geschlossen)
49958 ".by 'm-e' 0 5
49963 ".by 'm-w' 254 7 2 36 0
49971 ".by '#0' '#1'
49975 " sta 49961 ;einspungpunkt abspeichern und m-e senden
49978 " jsr 65484 ;clrchn
49981 " ldx #1
49983 " jsr 65481 ;chkout
49986 " ldy #0
49988 " lda 49958,y ;'m-e' x 5
49991 " jsr 65490 ;chrout
49994 " iny
49995 " cpy #5
49997 " bne 49988
49999 " rts
50000 " lda #102 ;**startadresse**
50002 " sta 776
50005 " lda #195
50007 " sta 777 ;basic-befehl abarbeitungs-schlaufe auf die eigene routine
50010 " rts ;biegen
50011 " lda #228 ;**endadresse**
50013 " ldy #167
50015 " sta 776
50018 " sty 777 ;interpreter-zeiger wieder richten,um diese erweiterung
50021 " rts ;auszuschalten
50022 " jsr 115 ;**einspungpunkt** vom interpreter her (ein prg.byte holen)
50025 " cmp #91 ;schauen ob es das '['-zeichen ist
50027 " beq 50032 ;wenn ja dann weiter
50029 " jmp 50644 ;wenn nicht dann zur original-routine
50032 " jsr 115 ;naechstes basic-byte holen
50035 " cmp #162 ;schauen ob es der 'new'-code ist
50037 " bne 50084 ;wenn nicht dann weiter-kontrollieren
50039 " jsr 115 ;naechstes zeichen
50042 " cmp #93 ;und schauen ob ']'
50044 " beq 50049
50046 " jmp 44808 ;wenn nein syntax-error
50049 " jsr 49800 ;formatier-prg. senden
50052 " lda #193
50054 " jsr 49975 ;und starten
50057 " jsr 65484 ;clrchn (warten das die routine fertig ist)
50060 " ldx #1
50062 " jsr 65481 ;chkout
50065 " lda #73 ;und ein 'i' senden (initialisierung der floppy)
50067 " jsr 65490 ;chrout
50070 " jsr 65484 ;clrchn
50073 " lda #1
50075 " jsr 65475 ;close
50078 " jsr 115 ;naechstes byte holen
50081 " jmp 42926 ;und zurueck zur originalroutine
50084 " cmp #148 ;schauen ob es der 'save'-code ist
50086 " beq 50091
50088 " jmp 50455 ;wenn nicht weiterkontrollieren
50091 " jsr 115 ;naechstes zeichen nach dem 'save' holen
50094 " jsr 44426 ;die variable (zahl) auswerten
50097 " jsr 47095 ;in zweibyte-form wandeln
50100 " sty 251 ;und abspeichern
50102 " sta 252
50104 " jsr 44797 ;pruefen auf komma
50107 " jsr 44426
50110 " jsr 47095 ;zweibyte-zahl holen
50113 " sty 253
50115 " sta 254 ;und als endadresse speichern
50117 " jsr 44797 ;pruefen auf komma
50120 " lda 253
50122 " sec
50123 " sbc 251
50125 " sta 139 ;endadresse-anfangsadresse in (139)
50127 " lda 254
50129 " sbc 252
50131 " sta 140 ;abspeichern
50133 " bcs 50140
50135 " ldx #20 ;wenn endadresse < anfangsadresse dann division by zero
50137 " jmp 42042 ;error-ausgabe
50140 " ldx #0
50142 " lda 139
50144 " sec
50145 " sbc #254
50147 " sta 139
50149 " lda 140
50151 " sbc #0
50153 " sta 140 ;differenz durch 254 dividieren (blocklaenge)
50155 " bcc 50160 ;wenn fertig
50157 " inx
50158 " bne 50142 ;weiter dividieren
50160 " cpx #79 ;schauen ob das file laenger als 78 bloecke wird
50162 " bcc 50169
50164 " ldx #15 ;wenn ja dann overflow error
50166 " jmp 42042
50169 " txa
50170 " pha ;blockanzahl retten
50171 " jsr 47006 ;den anfangsblock vom basic ins x-register holen
50174 " txa
50175 " pha ;und retten
50176 " jsr 121 ;ein basic-zeichen holen
50179 " cmp #93 ;und schauen ob ']'
50181 " beq 50186
50183 " jmp 44808 ;wenn nein dann syntax error
50186 " jsr 115 ;naechstes zeichen holen (vorbereitung fuer den rueck-
50189 " pla ;-sprung zum interpreter) anfangsblock wieder holen
50190 " sta 139 ;und abspeichern
50192 " pla ;file-laenge holen
50193 " clc
50194 " adc 139 ;anfang dazuaddieren
50196 " cmp #79 ;und schauen ob der letzte block > 78 ist
50198 " bcc 50205
50200 " ldx #14 ;wenn ja dann illegal quantity error
50202 " jmp 42042 ;ausgeben
50205 " jsr 49803 ;das floppy-programm zum schreiben senden
50208 " lda #2
50210 " ldx 49799
50213 " tay
50214 " jsr 65466 ;setlfs
50217 " lda #2
50219 " ldx #53
50221 " ldy #195
50223 " jsr 65469 ;setnam
50226 " jsr 65472 ;open (open2,8,2,"#1")
50229 " bcc 50305 ;wenn kein fehler dann weiter
50231 " jmp 57593 ;fehler
50234 " jsr 65484 ;clrchn unterroutine zum senden von 'b-p 2 0'
50237 " ldx #1
50239 " jsr 65481 ;chkout
50242 " ldy #0
50244 " lda 49792,y ;'b-p 2 0'
50247 " jsr 65490 ;senden
50250 " bcs 50231
50252 " iny
50253 " cpy #7
50255 " bne 50244
50257 " jmp 65484 ;clrchn
50260 " lda 139 ;routine zum senden von spur und sektor('m-w' 254 7 2 x y)
50262 " lsr ;block laden
50263 " lsr ;und durch 16 teilen
50264 " lsr
50265 " lsr
50266 " clc
50267 " adc #36
50269 " sta 49969 ;+36=aktuelle spur
50272 " lda 139
50274 " and #15
50276 " sta 49970 ;block and 15 = aktueller sektor
50279 " jsr 65484 ;clrchn
50282 " ldx #1
50284 " jsr 65481 ;chkout
50287 " ldy #0
50289 " lda 49963,y ;'m-w' 254 7 2 x y
50292 " jsr 65490 ;senden
50295 " bcs 50231
50297 " iny
50298 " cpy #8
50300 " bne 50289
50302 " jmp 65484 ;clrchn und ende unterroutine
50305 " jsr 65484 ;clrchn
50308 " ldx #2
50310 " jsr 65478 ;chkin
50313 " jsr 65487 ;chrin
50316 " jsr 65463 ;status
50319 " beq 50324
50321 " jmp 42082 ;wenn <>0 dann 'error'
50324 " jsr 50260 ;aktuellen track und sektor senden
50327 " jsr 50234 ;'b-p 2 0' senden
50330 " ldx #2
50332 " jsr 65481 ;chrout
50335 " lda 253
50337 " sec
50338 " sbc 251
50340 " sta 140
50342 " lda 254
50344 " sbc 252 ;schauen ob das der letzte bolck des files ist
50346 " bne 50354 ;wenn nein
50348 " ldy 140
50350 " cpy #254
50352 " bcc 50399 ;wenn ja
50354 " lda #255 ;wenn etwas anderes als 255 gesendet wird so ist das das
50356 " jsr 65490 ;kennzeichen das der betreffende block der letzte ist.
50359 " ldy #0
50361 " lda (251),y
50363 " jsr 65490 ;chrout 254 datenbytes uebertragen
50366 " bcs 50295
50368 " iny
50369 " cpy #254
50371 " bne 50361
50373 " jsr 65484 ;clrchn
50376 " lda #222
50378 " jsr 49975 ;floppy-routine starten
50381 " nop
50382 " nop
50383 " inc 139 ;zeiger auf naechsten block
50385 " lda 251
50387 " clc
50388 " adc #254
50390 " sta 251 ;anfangsadresse erhoehen
50392 " bcc 50396
50394 " inc 252
50396 " jmp 50324 ;naechsten block senden
50399 " iny ;adresse des letzten gultigen bytes senden
50400 " tya
50401 " jsr 65490 ;chrout
50404 " sty 141 ;adresse retten
50406 " ldy #0
50408 " lda (251),y
50410 " jsr 65490 ;chrout gueltigen teil des blockes senden
50413 " iny
50414 " cpy 141
50416 " bne 50408
50418 " jsr 65484 ;clrchn
50421 " lda #222
50423 " jsr 49975 ;floppy-routine starten
50426 " jsr 65484 ;clrchn
50429 " lda #2
50431 " jsr 65475 ;close2
50434 " ldx #1
50436 " jsr 65481
50439 " lda #73
50441 " jsr 65490 ;print#1,"i"
50444 " jsr 65484
50447 " lda #1
50449 " jsr 65475 ;close1
50452 " jmp 42926 ;retour zur interpreter-schleife
50455 " cmp #147 ;schauen ob es der 'load'-code ist
50457 " beq 50462
50459 " jmp 50650 ;naechster befehl
50462 " jsr 115
50465 " jsr 44426
50468 " jsr 47095
50471 " sty 251
50473 " sta 252 ;anfangsadrese holen
50475 " jsr 44797
50478 " jsr 47006 ;anfangsblock holen
50481 " cpx #79 ;wenn blocknr. >78
50483 " bcc 50490
50485 " ldx #14 ;dann illegal quantity error ausgeben
50487 " jmp 42042
50490 " stx 139 ;anfangsblock retten
50492 " jsr 121
50495 " jsr 50703 ;kontrolle auf ']'
50498 " nop
50499 " jsr 115
50502 " jsr 49806 ;floppy-prg. zum lesen senden
50505 " lda #2
50507 " ldx 49799
50510 " tay
50511 " jsr 65466 ;setlfs
50514 " lda #2
50516 " ldx #51
50518 " ldy #195
50520 " jsr 65469 ;setnam
50523 " jsr 65472 ;open (open2,8,2,"#0")
50526 " bcc 50531
50528 " jmp 57593 ;fehler
50531 " jsr 65484 ;clrchn
50534 " ldx #2
50536 " jsr 65478 ;chkin
50539 " jsr 65487 ;chrin
50542 " jsr 65463 ;status
50545 " beq 50550
50547 " jmp 42082 ;wenn st <> 0 dann 'error'
50550 " jsr 50260 ;spur und sektor senden
50553 " lda #145
50555 " jsr 49975 ;block lesen (floppy-routine starten
50558 " jsr 50234 ;'b-p 2 0' senden
50561 " ldx #2
50563 " jsr 65478 ;chkin
50566 " jsr 65487 ;chrin
50569 " sta 141 ;1. byte als anzahl gueltiger bytes +1 retten
50571 " ldy #0
50573 " jsr 65487
50576 " bcs 50528 ;fehler?
50578 " sta (251),y ;alle bytes holen und speichern
50580 " iny
50581 " cpy 141 ;schauen ob alle gueltigen bytes
50583 " bne 50573 ;wenn nein naechstes
50585 " jsr 65484 ;clrchn
50588 " lda 141
50590 " cmp #255 ;schauen ob alle bytes gueltig waren
50592 " bne 50618 ;wenn nein dann war es der letzte block
50594 " lda 251 ;wenn ja
50596 " clc
50597 " adc #254
50599 " sta 251 ;adresse =adresse+254
50601 " bcc 50605
50603 " inc 252
50605 " inc 139 ;block-zeiger um eins erhoehen
50607 " lda 139
50609 " cmp #79 ;wenn block-zeiger zu hoch (>78)
50611 " bcc 50550 ;wenn nicht naechsten block holen
50613 " ldx #14 ;dann illegal quantity error
50615 " jmp 42042 ;ausgeben
50618 " lda #2
50620 " jsr 65475 ;close2
50623 " ldx #1
50625 " jsr 65481 ;chkout
50628 " lda #73
50630 " jsr 65490 ;print#1,"i"
50633 " jsr 65484 ;clrchn
50636 " lda #1
50638 " jsr 65475 ;close1
50641 " jmp 42926 ;zurueck zur interpreter-schlaufe
50644 " jsr 121
50647 " jmp 42983 ;einsprung fuer befehl-abarbeiten
50650 " cmp #161 ;schauen ob get
50652 " beq 50657
50654 " jmp 50839 ;wenn nicht weiter
50657 " jsr 115
50660 " jsr 45195 ;stringzeiger-adresse holen
50663 " sta 73
50665 " sty 74 ;und speichern
50667 " lda #255 ;laenge
50669 " jsr 46197 ;platz im string-bereich reservieren
50672 " ldy #2
50674 " lda 97,y ;neue adresse
50677 " sta (73),y ;beim stringzeiger richten
50679 " pha ;und retten
50680 " dey
50681 " bpl 50674
50683 " jsr 44797 ;pruefen auf komma
50686 " jsr 47006 ;block-nr. holen
50689 " cpx #79
50691 " bcc 50698
50693 " ldx #14 ;wenn zu gross dann illegal quantity
50695 " jmp 42042 ;ausgeben
50698 " stx 139 ;block speichern
50700 " jmp 50711
50703 " cmp #93 ;einschub von einer vorherigen routine
50705 " beq 50710 ;(pruefen auf ']')
50707 " jmp 44808 ;syntax-error
50710 " rts
50711 " jsr 121
50714 " jsr 50703 ;pruefen auf ']'
50717 " jsr 115 ;zaehler auf naechsten befehl richten
50720 " jsr 49806 ;floppy-routine 'lesen' senden
50723 " pla ;zeiger und laenge des neuen strings holen
50724 " sta 141
50726 " pla
50727 " sta 251
50729 " pla
50730 " sta 252 ;und speichern
50732 " lda #2
50734 " ldx 49799
50737 " tay
50738 " jsr 65466 ;setlfs
50741 " lda #2
50743 " ldx #51
50745 " ldy #195
50747 " jsr 65469 ;setnam
50750 " jsr 65472 ;open 2,8,2,"#0"
50753 " bcc 50758
50755 " jmp 57593 ;fehler
50758 " jsr 65484 ;clrchn
50761 " ldx #2
50763 " jsr 65478 ;chkin
50766 " jsr 65487 ;chrin
50769 " jsr 65463 ;status
50772 " beq 50777 ;kontrollieren
50774 " jmp 42082 ;'error' ausgeben
50777 " jsr 50260 ;spur + sektor senden
50780 " lda #145
50782 " jsr 49975 ;routine starten
50785 " jsr 50234 ;b-p 2 0
50788 " ldx #2
50790 " jsr 65478 ;chkin
50793 " nop
50794 " nop
50795 " nop
50796 " ldy #0
50798 " jsr 65487 ;255 bytes holen
50801 " bcs 50755 ;fehler ?
50803 " sta (251),y ;und als string speichern
50805 " iny
50806 " cpy 141
50808 " bne 50798
50810 " jsr 65484 ;clrchn
50813 " lda #2
50815 " jsr 65475 ;close2
50818 " ldx #1
50820 " jsr 65481 ;chkout
50823 " lda #73
50825 " jsr 65490 ;print#1,"i"
50828 " jsr 65484 ;clrchn
50831 " lda #1
50833 " jsr 65475 ;close1
50836 " jmp 42926 ;zum interpreter
50839 " cmp #153 ;schauen ob print-code
50841 " beq 50846
50843 " jmp 44808 ;wenn nein syntax-error
50846 " jsr 115
50849 " jsr 45195 ;adresse des string-zeigers holen
50852 " pha
50853 " tya
50854 " pha ;und retten
50855 " jsr 44797 ;komma
50858 " jsr 47006 ;blocknr. holen
50861 " cpx #79
50863 " bcc 50870 ;pruefen
50865 " ldx #14
50867 " jmp 42042 ;illeg. quantity
50870 " stx 139 ;und speichern
50872 " jsr 121
50875 " jsr 50703 ;pruefen auf ']'
50878 " jsr 115
50881 " pla
50882 " sta 98
50884 " pla
50885 " jsr 51008 ;laenge pruefen
50888 " iny
50889 " lda (97),y
50891 " sta 251
50893 " iny
50894 " lda (97),y ;adresse des eigentlichen strings vom string-zeiger her
50896 " sta 252 ;holen und speichern
50898 " jsr 49803 ;'schreiben' senden
50901 " lda #2
50903 " ldx 49799
50906 " tay
50907 " jsr 65466
50910 " lda #2
50912 " ldx #53
50914 " ldy #195
50916 " jsr 65469
50919 " jsr 65472 ;open2,8,2,"#1"
50922 " bcc 50927
50924 " jmp 57593 ;fehler
50927 " jsr 65484
50930 " ldx #2
50932 " jsr 65478
50935 " jsr 65487
50938 " jsr 65463
50941 " beq 50946
50943 " jmp 42082
50946 " jsr 50260 ;spur + sektor senden
50949 " jsr 50234 ;b-p 2 0 senden
50952 " ldx #2
50954 " jsr 65481 ;chkout
50957 " ldy #0
50959 " lda (251),y ;255 daten aus dem string lesen
50961 " jsr 65490 ;und senden
50964 " bcs 50924
50966 " iny
50967 " cpy #255
50969 " bne 50959
50971 " jsr 65484 ;clrchn
50974 " lda #222
50976 " jsr 49975 ;floppy-routine starten
50979 " jsr 65484
50982 " lda #2
50984 " jsr 65475 ;close2
50987 " ldx #1
50989 " jsr 65481
50992 " lda #73
50994 " jsr 65490 ;print#1,"i"
50997 " jsr 65484
51000 " lda #1
51002 " jsr 65475 ;close1
51005 " jmp 42926 ;zum interpret
51008 " sta 97 ;einschub (laenge bestimmen)
51010 " ldy #0
51012 " lda (97),y ;laenge holen
51014 " cmp #255
51016 " beq 51023
51018 " ldx #23 ;wenn falsch dann string too long ausgeben
51020 " jmp 42042
51023 " rts
51024 ".en