home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
64'er
/
64ER_CD.iso
/
sh2x
/
sh25.d64
/
univ.lader.asm
(
.txt
)
< prev
next >
Wrap
Commodore BASIC
|
1995-03-30
|
12KB
|
565 lines
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
2312 STA FNAM
2313 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 #<RAM
2334 STA POINTER
2335 JSR RAUM; LEEREINTRAEGE ERZEUGEN
2337 LDA #>BILDMIT
2339 STA FNAM+1
2340 LDA #<BILDMIT
2341 STA FNAM
2350 LDX #1
2360 JSR CHKOUT; AUSGABE IN KOMMANDOKANAL
2370 LDX #0
2380 KOM LDA TEXT2,X
2390 JSR PRINT; BEFEHL "M-R"...
2395 INX
2400 CPX #TEXT3-TEXT2
2410 BNE KOM
2420 JSR CLRCH
2430 ;
2440 ;DATEN VON FLOPPY HOLEN
2445 ;
2450 LDX #1
2460 JSR CHKIN; EINGABEN VON FLOPPY
2470 LDX #0
2480 FN JSR INPUT
2490 JSR WANDEL
2500 STA $0400+13,X
2510 INX
2520 CPX #18; LAENGE DES DISKNAMENS
2530 BNE FN
2540 JSR INPUT
2550 JSR WANDEL
2560 STA $0400+35
2570 JSR INPUT
2580 JSR WANDEL
2590 STA $0400+36
2600 ;
2610 ; EINTRAEGE AUF BILDSCHIRM UND INS RAM
2620 ;
2740 ;
2750 LDX #20; POSITION IM FLOPPYPUFFER
2751 GET LDY #0; ZEIGER SPEICHER
2752 JSR INPUT; MARKIERUNG HOLEN
2753 CMP #$FF; KENNUNG LETZTES BYTE
2754 BEQ STOP; FALLS JA
2755 STA (POINTER),Y; INS RAM
2756 INY: INX
2758 JSR INPUT; ADRESSBYTE HOLEN
2759 STA (POINTER),Y; UND INS RAM
2760 INY: INX
2761 JSR INPUT; ADRESSBYTE HOLEN
2762 STA (POINTER),Y; AUCH INS RAM
2763 INY: INX
2768 ;
2777 TRANS JSR INPUT; FILENAMEN HOLEN
2778 STA (POINTER),Y; INS RAM
2780 JSR WANDEL
2790 STA (FNAM),Y; AUF DEN BILDSCHIRM
2830 INX
2860 INY
2870 CPY #19; LAENGE PARAMETER + FILENAME
2880 BNE TRANS
2890 LDA POINTER; RAM-ZEIGER
2900 CLC
2910 ADC #19; AKTUALISIEREN
2920 STA POINTER
2930 BCC CHECK
2940 INC POINTER+1; RAM-ZEIGER ERHOEHEN
2950 CHECK LDA FNAM
2960 CLC
2970 ADC #40; FUER NAECHSTE ZEILE
2980 STA FNAM
2990 BCC LOOK
3000 INC FNAM+1
3005 LOOK LDA FNAM+1
3010 CMP #>BILDEND; LETZTE DIRECTORYZEILE
3020 BNE GET
3025 LDA FNAM
3030 CMP #<BILDEND; LETZTE DIRECTORYZEILE
3040 BCC GET; UNBEDINGTER SPRUNG FALLS KLEINER
3050 ;
3052 ; WEITERE EINTRAEGE INS RAM
3054 ;
3060 GET1 LDY #0
3070 TRANS1 JSR INPUT
3080 CMP #$FF; LETZTES BYTE
3090 BEQ STOP
3110 STA (POINTER),Y; INS RAM
3120 INX
3130 BNE (null)1
3140 JSR LIES
3150 (null)1 INY
3160 CPY #19
3170 BNE TRANS1
3180 LDA POINTER
3190 CLC
3200 ADC #19
3210 STA POINTER
3220 BCC GET1
3230 INC POINTER+1; RAM-ZEIGER ERHOEHEN
3235 BCS GET1; UNBEDINGTER SPRUNG
3240 ;
3250 STOP JSR RAUM; LEEREINTRAEGE
3260 JSR CLRCH; EINGABE WIEDER VON TASTATUR
3270 LDA POINTER
3272 SEC
3274 SBC #<21*19
3280 STA END
3290 LDA POINTER+1
3300 SBC #>21*19
3305 STA END+1
3310 ;
3320 INIT LDA #<RAM
3330 STA ANF
3340 LDA #>RAM
3350 STA ANF+1
3355 LDX #17; <CURSOR DOWN> 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 #<OBEN
3495 STA FNAM; ZEIGER INS BILD
3499 ;
3500 ZPRNT LDY #3
3510 PRNT LDA (POINTER),Y; AUS DEM RAM
3515 JSR WANDEL; ASCII -> 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 #<BILDEND; LETZTE DIRECTORYZEILE
3740 BCC ZPRNT; UNBEDINGTER SPRUNG
3745 ;
3750 LDX #3: LDA #$21; FARBE
3755 BALK STA $D9EB,X; HINTERGRUNDFARBE
3757 INX
3760 CPX #19
3765 BNE BALK
3800 ;
3810 ; SCROLLEN UND LADEN
3820 ;
3825 JSR CLRCH
3830 STY $BA
3840 ABFR JSR $FFE4; GET VON TASTATUR
3850 TAX; ERGEBNIS SICHERN
3860 QUEST CPX #145; <CURSOR UP>
3870 BEQ UPP
3880 CPX #17; <CURSOR DOWN>
3890 BEQ DOWN
3900 CPX #"Q"; <TASTE Q>
3910 BEQ QUIT
3912 CPX #3; <RUN/STOP>
3914 BEQ QUIT
3915 CPX #" "; <SPACE>
3916 BNE CONT
3917 JMP STRT
3920 CONT CPX #13; <RETURN>
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 #<RAM+19
5130 BCC WTR
5140 UP1 LDA ANF
5150 SEC
5160 SBC #19; ZEILE HOCH
5170 STA ANF
5180 BCS HILF1
5190 DEC ANF+1
5200 HILF1 JMP BPRNT
5210 WTR JMP ABFR; KEINE REAKTION
5220 ;
5230 HILF LDX #145; <CURSOR UP> 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 #<PUFFER+2; ANFANG 1. EINTRAG
11730 NOCHMAL STA ZEIGER; ZEIGER IN PUFFER HERSTELLEN
11750 LDY #0
11760 LDA (ZEIGER),Y; FILETYP HOLEN
11770 BEQ WEITER; FALLS DELETED
11800 LDY #22
11810 LDA (ZEIGER),Y; MARKIERUNG HOLEN
11820 BMI WEITER; FALLS MARKIERT
11830 STA AUSGABE,X; SONST IN DEN AUSGABEPUFFER
11840 INX: INY
11842 LDA (ZEIGER),Y; RESERVIERTE BYTES
11844 STA AUSGABE,X; HOLEN
11846 INX: INY
11847 LDA (ZEIGER),Y; (STARTADRESSE)
11848 STA AUSGABE,X; UND UEBERGEBEN
11849 INX
11850 LDY #3; ANFANG FILENAME
11860 NAME LDA (ZEIGER),Y; ZEICHEN HOLEN
11870 STA AUSGABE,X; UND IN DEN AUSGABEPUFFER
11880 INX
11890 BNE OK; FALLS PUFFER NOCH NICHT VOLL
11950 STY SAVE; Y RETTEN
11960 RTS; RUECKGABE DER KONTROLLE ANS DOS
13000 ;
13010 EINSPRG LDX #0
13020 LDY SAVE; REGISTER WIEDER HERSTELLEN
13050 OK INY
13060 CPY #19; LETZTES ZEICHEN DES NAMENS
13070 BNE NAME; FALLS NOCH NICHT FERTIG
13100 WEITER LDA ZEIGER
13110 CLC; ADDITION VORBEREITEN
13120 ADC #32; ZEIGER AUF NAECHSTEN EINTRAG
13130 BCC NOCHMAL; FALLS NOCH EIN EINTRAG
13140 BCS NEXT; SONST NAECHSTEN BLOCK
13190 ;
13200 ENDE LDA #$FF; ZEICHEN FUER ENDE
13210 STA AUSGABE,X; IN DEN AUSGABEPUFFER
13220 RTS; KONTROLLE ZURUECK ANS DOS
13250 ;
13395 PROGEND .ASC " DISK-NAME: ID: "
13400 TEXT1 .ASC "MIT CURSORTASTEN AUSWAEHLEN UND RETURN[158]"
13410 TEXT2 .ASC "M-R": .BYTE <AUSGABE, >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