10 OPEN 1,8,1,"0:GANZ NEU.OBJ" 12 REM OPEN 2,4 13 SYS 32768; EINSPRUNG FUER NEUEN PROFIASS 14 ; 15 ; *************************** 16 ; * UNIVERSAL-LADER V6 * 17 ; * * 18 ; * VON UWE GERLACH * 19 ; * TEL. 06151/316205 * 20 ; * BZW. 06622/3908 * 21 ; *************************** 22 ; 23 ; 24 ; ZEIGT DEN DISKINHALT ALS MENUE UND 25 ; STARTET DAS AUSGEWAEHLTE PROGRAMM. 26 ; MIT 'UNIV.LADER.INIT' GEKENNZEICH- 27 ; NETE EINTRAEGE WERDEN NICHT BEAR- 28 ; BEITET. BYTE 22 JEDES EINTRAGS 29 ; ENTHAELT DAZU EINE KENNUNG. 30 ; BYTES 23 UND 24 ENTHALTEN DIE 31 ; STARTADRESSE FUER MASCHINENCODE. 32 ; 33 ; 100 .TIT "UNIVERSAL-LADER C64 & VC1541 " 110 .PAG 69 120 .OPT O1 130 ; 140 *=$0801; ANFANGSADRESSE 150 ; 200 PUFFER = $0300 210 AUSGABE = $0400 220 ZEIGER = $3B 230 SAVE = $05F0 240 FNAM = $FB 250 POINTER = $FD 260 PRINT = $FFD2 270 CHKOUT = $FFC9 280 CLRCH = $FFCC 290 SETFLS = $FFBA 300 SETNAM = $FFBD 310 OPEN = $FFC0 320 CHKIN = $FFC6 330 INPUT = $FFCF 340 CLOSE = $FFC3 350 CLEAR = $E544 360 END = $7000 370 BILDMIT = $0400+411+80 380 BILDEND = $0700+130 390 ANF =END+2 400 RAM = ANF+2 410 OBEN = $0400+80+11 420 LOAD = $FFD5 430 TPUF = $0277 500 ; 510 ; 520 ; BASIC - EINSPRUNG 530 ; 540 .BYTE $0B,$08,$0A,$00,$9E,$32 550 .BYTE $30,$36,$31,$00,$00,$00 560 ; 600 NOP: NOP: NOP; PLATZHALTER FUER SPRUNGBEFEHL 1000 ; 1010 ; KANAELE OEFFNEN 1020 ; 1050 STRT LDA #1 1060 LDX #8 1070 LDY #15 1080 JSR SETFLS; PARAMETER 1,8,15 1082 LDA #0 1085 JSR SETNAM; KEIN NAME 1090 JSR OPEN; OPEN 1,8,15 1250 ; 1260 ; FLOPPYPROGRAMM KOPIEREN UND ANSTOSSEN 1270 ; 1300 LDY #0; OFFSET ZUM LESEN 1302 STY FNAM; ZIEL-BASISADRESSE BEIM KOPIEREN 1350 ON LDX #1 1360 JSR CHKOUT; AUSGABE AUF BEFEHLSKANAL 1400 LDA #"M" 1410 JSR PRINT 1420 LDA #"-" 1430 JSR PRINT 1440 LDA #"W" 1450 JSR PRINT 1460 LDA FNAM; ADRESSE LOW 1470 JSR PRINT 1480 LDA #5; ADRESSE HIGH 1490 JSR PRINT 1500 LDA #34; ANZAHL DER FOLGENDEN BYTES 1510 JSR PRINT 1520 ; 1590 LDX #0; ZAEHELER BEFEHLSLAENGE 1600 FUELLEN LDA PROGANF,Y; BYTE HOLEN UND 1610 JSR PRINT; ALS DATUM FUER M-W SENDEN 1620 INY; OFFSET ERHOEHEN 1640 CPY #PROGEND-PROGANF 1650 BEQ COPYOK; FALLS FERTIG UEBERTRAGEN 1655 INX 1660 CPX #34; MAXIMALINHALT BEFEHLSPUFFER 1670 BNE FUELLEN; FALLS NOCH PLATZ 1691 JSR CLRCH; BEFEHL AUSFUEHREN 1692 LDA FNAM 1694 CLC 1696 ADC #34 1698 STA FNAM; ZIELADRESSE ERHOEHEN 1730 JMP ON; UND WEITER UEBERTRAGEN 1790 ; 1815 COPYOK JSR CLRCH; BEFEHL AUSFUEHREN 1816 ; 1817 LDX #1 1819 JSR CHKOUT; AUSGABE AUF BEFEHLSKANAL 1820 LDA #"U" 1830 JSR PRINT 1840 LDA #"C" 1850 JSR PRINT 1880 JSR CLRCH 2000 ; 2010 ; BILDMASKE AUFBAUEN 2020 ; 2021 LDA #0 2022 STA $D020; RAHMENFARBE 2023 STA $D021; HINTERGRUNDFARBE 2025 LDA #$0E 2030 STA $0286; SCHRIFTFARBE 2050 JSR CLEAR; BILDSCHIRM LOESCHEN 2060 LDY #0 2070 AUSG LDA PROGEND,Y 2080 JSR PRINT 2085 INY 2090 CPY #TEXT1-PROGEND 2100 BNE AUSG 2150 CLC 2200 LDX #24; ZEILE 2210 LDY #1; SPALTE 2220 JSR $E50A; CURSOR POSITIONIEREN 2250 LDY #0 2260 AUS LDA TEXT1,Y 2270 JSR PRINT 2280 INY 2290 CPY #TEXT2-TEXT1 2300 BNE AUS 2301 ; 2302 ;KOPIEREN DER LADE- / STARTROUTINE 2303 ; 2310 LDY #0; OFFSET 2311 LDA #TEXT4 2314 STA FNAM+1; ZEIGER AUF QUELLE 2315 LDA #<$D000-(FIN+2-TEXT4) 2316 STA POINTER 2317 LDA #>$D000-(FIN+2-TEXT4) 2318 STA POINTER+1; ZEIGER AUF ZIEL 2319 COPY LDA (FNAM),Y 2320 STA (POINTER),Y; KOPIEREN 2321 INY 2322 CPY #FIN+3-TEXT4 2324 BNE COPY 2325 ; 2326 ;VORBEREITEN DES RAMS 2327 ; 2330 LDA #>RAM 2331 STA POINTER+1 2332 LDA #BILDMIT 2339 STA FNAM+1 2340 LDA #BILDEND; LETZTE DIRECTORYZEILE 3020 BNE GET 3025 LDA FNAM 3030 CMP #21*19 3305 STA END+1 3310 ; 3320 INIT LDA #RAM 3350 STA ANF+1 3355 LDX #17; VORBEREITEN 3360 ; 3362 ; ANZEIGEN EINES RAMAUSSCHNITTS 3364 ; 3400 BPRNT LDA ANF 3410 STA POINTER 3420 LDA ANF+1 3430 STA POINTER+1; ZEIGER INS RAM 3440 ; 3450 LDY #10*19 3460 LDA (POINTER),Y; MARKIERUNG HOLEN 3470 CMP #"N" 3475 BEQ QUEST; ZEILE UEBERSPRINGEN 3477 ; 3480 LDA #>OBEN 3485 STA FNAM+1 3490 LDA # BILDSCHIRMCODE 3520 STA (FNAM),Y;AUF DEN BILDSCHIRM 3530 INY 3540 CPY #19 3550 BNE PRNT 3590 LDA POINTER 3600 CLC 3610 ADC #19 3620 STA POINTER 3630 BCC CHECK2 3640 INC POINTER+1; RAM-ZEIGER ERHOEHEN 3650 CHECK2 LDA FNAM 3660 CLC 3670 ADC #40; FUER NAECHSTE ZEILE 3680 STA FNAM 3690 BCC LOOK2 3700 INC FNAM+1 3705 LOOK2 LDA FNAM+1 3710 CMP #>BILDEND; LETZTE DIRECTORYZEILE 3720 BNE ZPRNT 3725 LDA FNAM 3730 CMP # 3870 BEQ UPP 3880 CPX #17; 3890 BEQ DOWN 3900 CPX #"Q"; 3910 BEQ QUIT 3912 CPX #3; 3914 BEQ QUIT 3915 CPX #" "; 3916 BNE CONT 3917 JMP STRT 3920 CONT CPX #13; 3930 BNE ABFR 4800 ; 4810 LDA #2; FILENUMMER 4815 LDX #8; GERAETEADRESSE 4820 LDY #1; SEKUNDAERADRESSE 4825 JSR SETFLS; PARAMETER SETZEN 4827 ; 4830 LDA ANF 4832 CLC 4835 ADC #10*19; ANFANG MARKIERTE ZEILE 4836 STA POINTER; LOWBYTE ZEIGER 4837 TAX; NACH X BRINGEN 4838 BCC SNAME 4839 INC ANF+1; FALLS UEBERTRAG 4840 SNAME LDA ANF+1 4841 STA POINTER+1; HIGHBYTE ANFANG FILENAME: PHA; SICHERN 4842 LDY #1: LDA #$4C; BEFEHL JMP: STA 2061 4843 LDA (POINTER),Y: STA 2062: INY 4844 LDA (POINTER),Y: STA 2063; JMP STARTADRESSE 4845 INX: INX: INX; X AUF ANFANG FILENAME STELLEN 4846 PLA: TAY; HIGHBYTE ZEIGER HOLEN: LDA #16; LAENGE FILENAME 4847 JSR SETNAM 4848 JSR CLEAR; BILDSCHIRM LOESCHEN 4850 LDA #0; FLAG FUER LOAD 4855 LDX #$FF 4860 LDY #$FF 4865 JMP $D000-(FIN+2-TEXT4); ZUR KOPIERTEN ROUTINE 4870 ; 4890 QUIT LDA #1: JSR CLOSE: JMP CLEAR 4940 ; 4945 UPP JMP UP 4947 ; 4950 DOWN LDA ANF+1; FENSTERANFANG HIGH 4960 CMP END+1; ABLAGESPEICHERENDE 4970 BEQ DOWN1; FALLS ANF=END 4975 BCS HILF; FALLS ANF>=END 4990 DOWN2 LDA ANF; FENSTERANFANG LOW 5000 CLC 5015 ADC #19; NAECHSTE ZEILE 5020 STA ANF 5025 BCC HILF1 5030 INC ANF+1 5035 JMP BPRNT; NEUEN AUSSCHNITT ANZEIGEN 5040 DOWN1 LDA ANF 5050 CMP END 5060 BCS HILF 5065 BCC DOWN2 5070 ; 5080 UP LDA ANF+1 5090 CMP #>RAM+19 5100 BCC HILF 5105 BNE UP1 5110 LDA ANF 5120 CMP # VORBEREITEN 5240 JMP BPRNT; UND AUSSCHNITT ANGLEICHEN 9200 ; 9210 ; WANDLUNG ASCII -> BILDSCHIRMCODE 9220 ; 9250 WANDEL CMP #63 9260 BCS ZAHLEN; FALLS >=63 9270 RTS; ENDE WANDLUNG, DA <63 9280 ZAHLEN CMP #96 9290 BCS GROSS; FALLS >=96 9300 SBC #63; (CARRY IST 0!) 9310 RTS; ENDE WANDLUNG 9320 GROSS SBC #32; (CARRY IST 1!) 9330 CMP #128 9340 BCS SONDER; FALLS >=160 9350 RTS; ENDE WANDLUNG 9360 SONDER SBC #96 9370 RTS; ENDE WANDLUNG 9400 ; 9410 ; LEERE EINTRAEGE ERZEUGEN 9420 ; 9450 RAUM LDX #0 9460 LDY #0 9470 LDA #" " 9480 JSR WANDEL 9490 FILL STA (POINTER),Y; INS RAM 9500 INC POINTER 9510 BNE JUMP 9520 INC POINTER+1; HIGHBYTE ERHOEHEN 9530 JUMP INX 9540 CPX #10*19; ANZAHL FUEHRENDER LEERZEICHEN 9550 BNE FILL 9560 RTS; ENDE RAUM 9600 ; 9610 ; NEUE DATEN VON DISK HOLEN 9620 ; 9630 LIES TYA 9640 PHA; Y RETTEN 9645 JSR CLRCH 9650 LDX #1 9660 JSR CHKOUT; ZEICHEN AUF KANAL # 1 9670 LDX #0 9680 KOMM LDA TEXT3,X; "M-E"... 9690 JSR PRINT 9700 INX 9710 CPX #TEXT4-TEXT3 9720 BNE KOMM 9722 JSR CLRCH 9724 LDX #1 9726 JSR CHKOUT 9728 LDX #0 9730 KMND LDA TEXT2,X; "M-R"... 9732 JSR PRINT 9734 INX 9736 CPX #TEXT3-TEXT2 9738 BNE KMND 9739 JSR CLRCH 9740 LDX #1 9750 JSR CHKIN; DATEN WIEDER VON FLOPPY 9755 LDX #0; WIEDERHERSTELLEN 9760 PLA 9770 TAY; Y WIEDERHOLEN 9790 RTS; ENDE DATEN HOLEN 10000 ; 10010 ; 10020 ; FLOPPYPROGRAMM 10030 ; 11000 PROGANF JSR $D042; FLOPPY INITIALISIEREN 11005 START LDA #18 11010 STA $06; TRACK 11020 LDX #0 11030 STX $07; SEKTOR 11032 LDA #$80; JOBCODE "BLOCK LESEN" 11034 STA $00; ALS AUFTRAG FUER PUFFER 0 11036 WARTEN LDA $00; STATUS PUFFER 0 11040 BMI WARTEN; FALLS NOCH NICHT FERTIG 11050 CMP #1; FEHLER ABFRAGEN 11060 BNE ENDE; FALLS FEHLER AUFGETRETEN 11100 ; 11110 DNAME LDA PUFFER+144,X; DISKNAMEN HOLEN 11120 STA AUSGABE,X; IN DEN AUSGABEPUFFER 11130 INX 11140 CPX #20; NAME UND ID KOMPLETT 11150 BNE DNAME; WEITER FALLS NEIN 11500 ; 11510 NEXT LDA PUFFER; BLOCKZEIGER TRACK 11520 BEQ ENDE; FALLS NAECHSTER TRACK 0 11530 STA $06 11540 LDA PUFFER+1; BLOCKZEIGER SEKTOR 11550 STA $07 11560 LDA #$80; JOBCODE "BLOCK LESEN" 11570 STA $00; ALS AUFTRAG FUER PUFFER 0 11580 WARTEN1 LDA $00; STATUS PUFFER 0 11590 BMI WARTEN1; FALLS NOCH NICHT FERTIG 11700 LDA #>PUFFER+2 11710 STA ZEIGER+1 11720 LDA #AUSGABE, 0 13420 TEXT3 .ASC "M-E": .BYTE <$0500+EINSPRG-PROGANF 13430 .BYTE >$0500+EINSPRG-PROGANF 14000 ; 14010 ; LADE- / STARTROUTINE 14020 ; 14050 TEXT4 JSR LOAD 14060 STX $2D 14070 STY $2E; ZEIGER PROGRAMMENDE 14868 JSR $A533 14870 LDA #1: JSR CLOSE; LADEKANAL SCHLIESSEN 14875 JSR CLEAR; BILDSCHIRM LOESCHEN 14877 PLA: PLA 14880 LDA #$A7: PHA 14882 LDA #$AE: PHA; STACK AKTUALISIEREN 14884 FIN JMP $A659; KORREKTER RUECKSPRUNG 14910 .END