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