CompyShop Sector Copy Source Code #
Table of Contents
Disk Image#
SECTOR.ASM#
00010 .LI OFF 00020 .OR $2F00 00030 .OF "D1:SCOPY.COM" 00040 ------------------------------ 00050 ********************* 00060 ** SECTORCOPY MAIN ** 00070 ********************* 00080 ------------------------------ 00090 S SEI STARTROUTINE 00100 LDA #0 Schiebt Pro- 00110 TAY gramm unter 00120 STY $D40E das Betriebs 00130 STA $F0 System 00140 STA $F2 00150 LDA #$E0 00160 STA $F1 00170 LDA #$30 E000 -> 3000 00180 STA $F3 00190 .1 LDA ($F0),Y 00200 STA ($F2),Y 00210 INY 00220 BNE .1 Zeichensatz 00230 INC $F3 nach $3000 00240 INC $F1 00250 LDA $F1 00260 CMP #$E4 bis E400 00270 BNE .1 00280 LDA $D301 00290 AND #$FE OS aus 00300 ORA #2 Basic aus 00310 STA $D301 00320 LDY #0 00330 LDA #$F0 00340 STA $F1 00350 LDA #$30 3000 -> F000 00360 STA $F3 00370 .2 LDA ($F2),Y 00380 STA ($F0),Y 00390 INY 00400 BNE .2 00410 INC $F3 Programm 00420 INC $F1 unter OS 00430 LDA $F1 schieben 00440 BNE .2 00450 LDY #ENRES-RESET 00460 .3 LDA RESET,Y 00470 STA $100,Y 00480 DEY System-Reset 00490 BPL .3 Routine nach 00500 INY $100 kopieren 00510 STY $244 00520 STY $C 00530 INY 00540 STY $9 00550 STY $D 00560 JMP $100 Zum Programm 00570 ------------------------------ 00580 RESET SEI System-Reset 00590 STA $D40F 00600 LDA #0 00610 TAY 00620 .1 STA $D400,Y Hardware- 00630 STA $D000,Y Register 00640 STA $D200,Y loeschen 00650 INY 00660 BNE .1 00670 LDA $D301 00680 AND #$FE OS aus 00690 ORA #$FC 00700 STA $D301 00710 LDA #$22 Bildschirm 00720 STA $D400 normal 00730 LDA #$F0 $F000= 00740 STA $D409 CHRBASE 00750 LDA #2 00760 STA $D401 CHACTL 00770 LDA #3 00780 STA $D20F SIO-Status 00790 LDA #$40 00800 STA $D40E NMIEN 00810 JSR CLRTI Timeout- 00820 ; Vector loeschen 00830 JMP SCOPY START 00840 ENRES 00850 ------------------------------ 00860 .OR $F400 00870 .TA $3400 00880 * 00890 .IN "D:COPY1.ASM 00900 .IN "D:COPY2.ASM 00910 .IN "D:DSKSYS.ASM 00920 ------------------------------ 00930 DISPLY .BL $F0 00940 ; 00950 DSBUF .BL $50 00960 ------------------------------ 00970 END ; Ende des Sector-Copiers 00980 ------------------------------ 00990 .OR $FFFA 01000 .TA $3FFA 01010 * 01020 .DA PNMI NMI-Vector 01030 .HX 0000 Reset-Vector 01040 ; wird nicht benoetigt 01050 .DA RETIRQ IRQ-Vector 01060 ------------------------------ 01070 .OR $2E0 File Start 01080 .DA S 01090 ------------------------------
COPY1.ASM#
00010 ------------------------------ 00020 *********** 00030 ** COPY1 ** 00040 *********** 00050 ------------------------------ 00060 ; 00070 ; ZERO-PAGE VARIABLEN FESTLEGEN 00080 ; DA KEIN BETRIEBSSYSTEM MEHR 00090 ; VORHANDEN IST, KOENNEN FAST 00100 ; ALLE ADRESSEN BENUTZT WERDEN 00110 ; 00120 SOURC = $70 00130 SOUST = $72 00140 DESTN = $71 00150 DESST = $73 00160 FORMT = $74 00170 RETRY = $75 00180 RAMDSK = $76 00190 BYT1 = $7A / $7B 00200 EQUAL = $7C 00210 DENS = $7D 00220 CFIRST = $7E 00230 SPFLAG = $7F 00240 * 00250 SPTBL = $1C - $1F 00260 RSECA = $60 / $61 00270 RSECB = $62 / $63 00280 RSECC = $64 / $65 00290 * 00300 BANKS = $66 00310 BANKNR = $67 00320 MAXBANK = $68 00330 SPBYT = $69 00340 HIMEM = $6A 00350 * 00360 SLEFT = $37 00370 SROW = $38 00380 SSKIP = $39 00390 FBYT = $3A 00400 DLEFT = $3B 00410 DROW = $3C 00420 DSKIP = $3D 00430 FINC = $3E 00440 FFIRST = $3F 00450 * 00460 DUNIT = $21 00470 DCOMND = $22 00480 DSTATS = $23 00490 DBUFLO = $24 00500 DBUFHI = $25 00510 DTIM = $26 00520 DBYTLO = $28 00530 DBYTHI = $29 00540 DSECLO = $2A 00550 DSECHI = $2B 00560 ; 00570 PORTB = $D301 00580 TSTBYT = $4000 00590 ; 00600 ; AB LOMEM KOENNEN DATEN 00610 ; ABGELEGT WERDEN 00620 ; 00630 LOMEM = $400 00640 ------------------------------ 00650 ; 00660 ; DIE DISPLAY-LIST DES 00670 ; SECTOR-KOPIERERS 00680 ; 00690 DLIST .HX 70707046 00700 .DA LINE 00710 .HX 47 00720 .DA HTEX 00730 .HX 40061046 00740 .DA LINE 00750 .HX 7042 00760 .DA DISPLY 00770 .HX 30023070027050 00780 .HX 02702002702002702046 00790 .DA LINE 00800 .HX 46 00810 RWLINE .DA SETUP 00820 .HX 1046 00830 .DA LINE 00840 .HX 41 00850 .DA DLIST 00860 ------------------------------ 00870 ; 00880 ; TEXTE IM BILDSCHIRMFORMAT 00890 ; 00900 HTEX .AT " sectorcopy \^Q\^N\^T " 00910 .AT -" \^Hp \^P\^V\^O\^X\^W e\^Nreuss " 00920 LINE .AT "--------------------" 00930 SETUP .AT -" einstellen " 00940 FMATIN .AT -" formatieren " 00950 INSOUR .AT -" original diskette" 00960 INDEST .AT -" ziel diskette " 00970 INBOTH .AT -" disketten einlegen" 00980 DSKERR .AT -" disk fehler \^C " 00990 READIN .AT -" sector " 01000 ------------------------------ 01010 ; 01020 ; START DES SEKTOR-KOPIERERS 01030 ; 01040 SCOPY LDX #$FF 01050 TXS 01060 SEI 01070 LDA #DLIST DISPLAY- 01080 STA $D402 LIST SETZEN 01090 LDA /DLIST 01100 STA $D403 01110 LDY #4 01120 .1 LDA COLTB,Y FARBEN 01130 STA $D016,Y SETZEN 01140 DEY 01150 BPL .1 01160 STY RAMDSK 01170 LDA /SETUP 01180 STA RWLINE+1 01190 JSR CLRSCR BILDSCHIRM 01200 LDX #4 LOESCHEN 01210 STX RETRY 01220 LDA #$28 HIGH-SPEED 01230 .2 STA SPTBL-1,X TABELLE 01240 DEX AUF 01250 BNE .2 STANDARD 01260 STX FORMT 01270 ; 01280 ; TESTEN OB EINE RAMDISK VOR- 01290 ; HANDEN IST UND WIE GROSS 01300 ; DIESE IST 01310 ; 01320 LDX #$80 KLEINE 01330 .3 LDA $D40B VERZOEGERUNG 01340 BNE .3 01350 DEX 01360 BPL .3 01370 STX TSTBYT 01380 DEX 01390 STX PORTB 01400 LDY #$F 16 BANKS 01410 STY MAXBANK 01420 .4 LDY MAXBANK 01430 JSR SWITCH DATEN IN 01440 STY TSTBYT BANKS 01450 DEC MAXBANK SCHREIBEN 01460 BPL .4 01470 LDA #$FE 01480 STA PORTB 01490 * 01500 LDY #0 01510 STY BYT1 01520 STY MAXBANK 01530 * 01540 LDA TSTBYT RAMDISK 01550 CMP #$FF VORHANDEN? 01560 BNE MTEST 01570 * 01580 .5 LDY MAXBANK 01590 CPY #$10 01600 BCS .6 01610 JSR SWITCH DATEN AUS 01620 LDA TSTBYT RAMDISK 01630 CMP BYT1 AUSLESEN 01640 BMI .6 UND DABEI 01650 STA BYT1 MAXIMALE 01660 INC MAXBANK ANZAHL DER 01670 JMP .5 BANKS 01680 .6 LDA #$FE FESTSTELLEN 01690 STA PORTB 01700 BNE MTEST 01710 * 01720 SWITCH LDA PORTB BANK 01730 AND #$23 EINSCHALTEN 01740 ORA BANKTB,Y 01750 STA PORTB 01760 RTS 01770 ------------------------------ 01780 ; 01790 ; RAMDISK BANK-TABELLE 01800 ; FUER COMPY-SHOP RAMDISK UND 01810 ; 130 XE RAMDISK 01820 ; 01830 BANKTB .HX CCC8C4C08C888480 01840 .HX 4C4844400C080400 01850 ------------------------------ 01860 MTEST 01870 * 64K -> 00 01880 * 128K -> 04 01890 * 192K -> 08 01900 * 320K -> 10 01910 ------------------------------ 01920 ; 01930 ; TEST OB EINE CARTRIDGE IM 01940 ; RECHNER STECKT 01950 ; 01960 NO64K LDA #$80 01970 LDY $8000 01980 INC $8000 01990 CPY $8000 16K ? 02000 BEQ CHRAM 02010 LDA #$A0 02020 LDY $A000 02030 INC $A000 02040 CPY $A000 8K ? 02050 BEQ CHRAM 02060 LDA #$C0 02070 CHRAM STA HIMEM 02080 ------------------------------ 02090 ; 02100 ; TESTEN WIEVIELE LAUFWERKE 02110 ; ANGESCHLOSSEN SIND UND OB 02120 ; DIESE LAUFWERKE HIGH-SPEED 02130 ; FAEHIG SIND 02140 ; 02150 LDA #1 AB DRIVE 1 02160 JSR HSCHK TESTEN 02170 BCC .1 02180 JMP SCOPY KEINE DISK 02190 .1 STY SOUST STATUS 02200 LDA DUNIT 02210 STA SOURC ORIGINAL 02220 ORA #$10 IN ATASCII 02230 STA SDNR 02240 LDX #$40 KLEINE 02250 LDY #0 ZEIT- 02260 .2 DEY VEZOEGERUNG 02270 BNE .2 02280 DEX 02290 BNE .2 02300 LDX DUNIT DRIVE 02310 INX +1 02320 TXA 02330 JSR HSCHK TESTEN 02340 BCS .3 02350 LDA DUNIT 02360 BNE .4 02370 .3 LDA SOURC ORIG=ZIEL 02380 LDY SOUST 02390 .4 STA DESTN 02400 STY DESST 02410 ORA #$10 IN ATASCII 02420 STA DDNR 02430 ; 02440 ; MENU-BILDSCHIRM AUFBAUEN 02450 ; 02460 START JSR CLRSCR 02470 LDY #8 02480 JSR TXTOUT 02490 .AT "Original Laufwerk.... D" 02500 SDNR .AT "1" 02510 .HX EA 02520 LDY #48 02530 JSR TXTOUT 02540 .AT "Ziel Laufwerk........ D" 02550 DDNR .AT "1" 02560 .HX EA 02570 ; 02580 STA2 LDX #SETUP 02590 STX RWLINE 02600 LDY #120 02610 JSR CLRSC1 02620 ; 02630 LDY #94 02640 JSR TXTOUT 02650 .AT "Speicher: " 02660 .HX EA 02670 LDA HIMEM =C0/A0/80 02680 AND #$60 02690 LSR :8 02700 LSR 02710 LSR =18/14/10 02720 LDX MAXBANK 02730 CPX #4 4 BANKS 02740 BCC .1 02750 CLC 02760 ADC #12 02770 .1 CPX #8 8 BANKS 02780 BCC .2 02790 CLC 02800 ADC #12 02810 .2 CPX #$10 16 BANKS 02820 BCC .3 02830 CLC 02840 ADC #12 02850 .3 TAX 02860 LDA #4 SPEICHER- 02870 STA BYT1 GROESSE 02880 .4 LDA MEMTB,X ANZEIGEN 02890 STA DISPLY,Y 02900 INY 02910 INX 02920 DEC BYT1 02930 BNE .4 02940 * 02950 LDA RAMDSK DATEN IN 02960 BNE BEF0 RAMDISK ? 02970 LDY #125 02980 JSR TXTOUT 02990 .AT "\M^Yœ–‘…œŒ\^Y" 03000 .AT ".Von Ramdisk schreiben" 03010 .HX EA 03020 JMP BEF1 03030 BEF0 LDA SOURC ORIG=ZIEL? 03040 CMP DESTN 03050 BEQ BEF1 03060 LDY #125 03070 JSR TXTOUT 03080 .AT "\M^Yœ–‘…œŒ\^Y" 03090 .AT ".Laufwerke austauschen" 03100 .HX EA 03110 BEF1 LDY #165 03120 JSR TXTOUT 03130 .AT "\M^Y”≈Ã≈√‘\^Y" 03140 .AT ".....Formatieren: " 03150 .HX EA 03160 LDA FORMT FORMATFLAG 03170 BEQ BEF2 03180 JSR TXTOUT 03190 .AT "NEIN" 03200 .HX EA 03210 BEQ TXCOP 03220 BEF2 JSR TXTOUT 03230 .AT " JA " 03240 .HX EA 03250 TXCOP LDY #205 03260 JSR TXTOUT 03270 .AT "\M^Y”‘¡“‘\^Y" 03280 .AT "......Diskette kopieren" 03290 .HX EA 03300 ; 03310 GETBEF JSR GETKEY 03320 CMP #5 SELECT ? 03330 BEQ FORMAT 03340 CMP #6 START ? 03350 BEQ GOCOPY 03360 LDA RAMDSK DATEN IN 03370 BEQ WFRD RAMDISK ? 03380 ; 03390 EXCHAN LDY SOURC OPTION- 03400 LDX DESTN TASTE 03410 STY DESTN 03420 STX SOURC ORIGINAL 03430 TYA UND ZIEL 03440 ORA #$10 TAUSCHEN 03450 STA DDNR 03460 TXA 03470 ORA #$10 03480 STA SDNR 03490 LDY SOUST 03500 LDX DESST 03510 STY DESST 03520 STX SOUST 03530 JMP START 03540 ; 03550 WFRD LDY #203 VON RAMDISK 03560 STY DLEFT SCHREIBEN 03570 LDX #$FF 03580 STX CFIRST 03590 INX 03600 STX DROW 03610 STX DSKIP 03620 STX EQUAL 03630 STX FFIRST 03640 LDY #120 03650 JSR CLRSC1 03660 LDY #120 ALTE ANZEIGE 03670 WFR1 LDA DSBUF,X SETZEN 03680 STA DISPLY,Y 03690 INX 03700 INY 03710 CPY #200 03720 BNE WFR1 03730 LDA #$37 03740 STA DISPLY+201 03750 JMP WRITER ZUR 03760 ; SCHREIBROUTINE 03770 ; 03780 FORMAT LDA FORMT FORMATFLAG 03790 EOR #$FF INVERTIEREN 03800 STA FORMT 03810 JMP STA2 03820 ; 03830 GOCOPY LDA SOURC START COPY 03840 EOR DESTN 03850 STA EQUAL ORG=ZIEL 03860 * 03870 LDY #6 03880 LDA #0 03890 STA SPFLAG POINTER 03900 STA FFIRST LOESCHEN 03910 .1 STA SLEFT,Y 03920 DEY 03930 BPL .1 03940 STY CFIRST 03950 LDA #163 SCREEN- 03960 STA SLEFT POSITIONEN 03970 LDA #203 DER BALKEN 03980 STA DLEFT SETZEN 03990 LDY #120 04000 JSR CLRSC1 04010 LDA #$32 04020 STA DISPLY+161 04030 LDA #$37 04040 STA DISPLY+201 04050 STA RETRY 04060 LDX #1 SEKTOR 1 04070 STX RSECA 04080 DEX 04090 STX RSECA+1 04100 ; 04110 BEGIN LDA EQUAL ORG=ZIEL? 04120 BEQ .2 04130 LDX #INBOTH "BEIDE DSK 04140 LDA #$20 EINLEGEN" 04150 .1 STX RWLINE 04160 LDA #$20 AUF TASTE 04170 JSR HITRET WARTEN 04180 CMP #6 START ? 04190 BEQ .3 04200 JMP STA2 ZUM MENU 04210 .2 LDX #INSOUR "ORIGINAL 04220 BNE .1 EINLEGEN" 04230 .3 LDA CFIRST 1.DURCH- 04240 BMI .4 GANG ? 04250 JMP COP3 04260 .4 LDA #$53 STATUS... 04270 STA DCOMND 04280 LDA #4 4 BYTES 04290 STA DBYTLO 04300 LDA #$40 READ 04310 STA DSTATS 04320 JSR SETBUF 04330 LDY SOURC 04340 JSR MOVSLO SIO.... 04350 LDY #133 SCRPOS 04360 JSR TXTOUT 04370 .AT "Density: " 04380 .HX EA 04390 LDA LOMEM STATUSBYTE 04400 AND #$A0 04410 STA DENS MERKEN 04420 AND #$80 MEDIUM ? 04430 BNE MEDIUM 04440 LDA #5 INCREMENT 04450 STA FINC FUER BALKEN 04460 LDA LOMEM 04470 AND #$20 DOUBLE ? 04480 BNE DOUBLE 04490 STA DENS 04500 JSR TXTOUT 04510 .AT "SINGLE" 04520 .HX EA 04530 JMP COPZD 04540 ; 04550 MEDIUM LDX #8 04560 STX FINC 04570 JSR TXTOUT 04580 .AT "MEDIUM" 04590 .HX EA 04600 BEQ COPZD 04610 ; 04620 DOUBLE JSR TXTOUT 04630 .AT "DOUBLE" 04640 .HX EA 04650 ; 04660 ; BEI SPEEDY 1050 KANN MIT 04670 ; 2 LAUFWERKEN DIE ZIELDISK 04680 ; FORMATIERT WERDEN, WENN DAS 04690 ; ORIGINAL EINGELESEN WIRD 04700 ; 04710 COPZD LDA EQUAL 04720 BEQ COP3 ORG=ZIEL 04730 LDA FORMT 04740 BNE COP3 NO FORMAT 04750 BIT DESST 04760 BPL COP3 NO SPEEDY 04770 JSR SETDEN DENSITY 04780 SEC SETZEN 04790 JSR SETVER VERIFY AUS 04800 TYA 04810 BMI COP3 04820 JCOP LDA #$20 COMMAND 20 04830 STA DCOMND AUTO-FORMAT 04840 LDA #0 04850 STA DSTATS 04860 LDY DESTN 00518 JSR MOVSLO SIO... 04880 TYA 04890 BPL FFOK 04900 JSR ERROR FEHLER 04910 BCC JCOP VERSUCH? 04920 JMP STA2 NEUSTART 04930 ; 04940 FFOK INC FFIRST 1.DURCHG. 04950 COP3 LDA RSECA START- 04960 STA RSECC SEKTOR 04970 LDA RSECA+1 MERKEN 04980 STA RSECC+1 04990 LDY SOURC ORG-DRIVE 05000 STY DUNIT 05010 BIT SPFLAG HI-SPEED 05020 BPL .1 05030 LDA #$28 SLOW 05040 STA SPTBL-1,Y 05050 .1 JSR SETBUF BUFFER 05060 .2 LDX SLEFT SETZEN 05070 LDY SROW 05080 LDA SSKIP 05090 JSR DFUEL BALKEN 05100 STA SSKIP AKTUALI- 05110 STY SROW SIEREN 05120 STX SLEFT 05130 .3 LDX #READIN "LESE -" 05140 STX RWLINE 05150 LDA #$40 GETBYTES 05160 STA DSTATS 05170 LDA RSECA SEKTOR # 05180 STA DSECLO 05190 LDA RSECA+1 05200 STA DSECHI 05210 LDA #$52 READ 05220 STA DCOMND 05230 JSR SETLEN LAENGE 05240 JSR MASTER SIO... 05250 BCC .5 05260 BIT SPFLAG ERROR? 05270 BPL .4 05280 JSR ERROR 05290 CMP #6 START ? 05300 BEQ .3 05310 CMP #5 SELECT ? 05320 BEQ .5 05330 JMP STA2 NEUSTART 05340 ; 05350 .4 LDY DUNIT 05360 LDA SPTBL-1,Y 05370 STA SPBYT 05380 LDA #$28 05390 STA SPTBL-1,Y 05400 DEC SPFLAG 05410 BNE .3 05420 .5 JSR ENDCHK ENDE ? 05430 BCC .2 05440 ; 05450 ; DATEN SCHREIBEN 05460 ; 05470 WRITER LDA RSECA START- 05480 STA RSECB SEKTOR 05490 LDA RSECA+1 05500 STA RSECB+1 05510 LDA EQUAL ORG=ZIEL? 05520 BNE COPW1 05530 LDX #INDEST "ZIEL 05540 STX RWLINE EINLEGEN" 05550 LDA #$20 05560 JSR HITRET TASTE... 05570 CMP #5 OPTION ? 05580 BCC .1 VERIFY: 05590 LSR SELECT=EIN 05600 JSR SETVER START=AUS 05610 JMP COPW1 05620 .1 JMP STA2 NEUSTART 05630 ; 05640 COPW1 LDA RSECC START- 05650 STA RSECA SEKTOR 05660 LDA RSECC+1 05670 STA RSECA+1 05680 LDA DESTN ZIELDRIVE 05690 STA DUNIT 05700 BIT SPFLAG SLOW ? 05710 BPL .1 05720 LDY SOURC 05730 LDA SPBYT 05740 STA SPTBL-1,Y 05750 .1 LDA CFIRST 1.DURCHG.? 05760 BPL NOFORM 05770 LDA FFIRST FORMAT OK? 05780 BNE NOFORM 05790 LDA FORMT NO FORMAT 05800 BNE NOFORM 05810 .2 LDX #FMATIN "FORMAT.." 05820 STX RWLINE 05830 LDA DESST 05840 BPL .3 05850 JSR SETDEN DENSITY 05860 .3 LDA #$80 SETZEN 05870 STA DBYTLO $80 BYTES 05880 LDA #$22 COMMAND 22 05890 BIT DENS MEDIUM ? 05900 BMI .5 05910 LDA DENS DOUBLE ? 05920 BEQ .4 05930 ASL DBYTLO $100 BYTES 05940 .4 LDA #$21 COMMAND 21 05950 .5 STA DCOMND 05960 LDA #$D5 $D500 05970 STA DBUFHI BUFFER 05980 LDA #$40 05990 STA DSTATS STATUS 06000 LDY DESTN 06010 JSR MOVSLO SIO... 06020 TYA 06030 BPL NOFORM FORMAT OK 06040 JSR ERROR 06050 BCC .2 WEITER 06060 JMP STA2 NEUSTART 06070 ; 06080 NOFORM LDA #$50 PUTBYTE 06090 STA DCOMND 06100 INC CFIRST 1.DURCHG. 06110 JSR SETBUF BUFFER 06120 .1 LDX #READIN "LESE-" 06130 STX RWLINE 06140 LDA #$80 06150 STA DSTATS STATUS 06160 LDA RSECA 06170 STA DSECLO 06180 LDA RSECA+1 06190 STA DSECHI SEKTOR # 06200 JSR SETLEN LAENGE 06210 JSR EMPTY SEKTOR 06220 BCS .2 LEER ? 06230 JSR MASTER SIO... 06240 BCC .2 ERROR ? 06250 JSR ERROR 06260 BCC .1 WEITER 06270 JMP STA2 NEUSTART 06280 ; 06290 .2 LDX DLEFT 06300 LDY DROW 06310 LDA DSKIP 06320 JSR DFUEL BALKEN 06330 STA DSKIP AKTUALI- 06340 STY DROW SIEREN 06350 STX DLEFT 06360 JSR ENDCHK ENDE ? 06370 BCC .1 06380 PHP 06390 LDA DESST 06400 BPL .3 06410 LDA #$51 COMMAND 51 06420 STA DCOMND MOTOR STOP 06430 LDA #0 06440 STA DSTATS 06450 LDY DESTN 06460 JSR MOVSLO SIO... 06470 .3 PLP 06480 BEQ DONE DISK ENDE 06490 LDA RSECB 06500 STA RSECA ENDSEKTOR 06510 LDA RSECB+1 MERKEN 06520 STA RSECA+1 06530 LDA EQUAL ORG=ZIEL? 06540 BNE .4 06550 JMP BEGIN 06560 .4 JMP COP3 WEITER... 06570 ------------------------------
COPY2.ASM#
00010 ------------------------------ 00020 ** COPY2 ** 00030 ------------------------------ 00040 ; 00050 ; LAUFWERKS-DENSITY EINSTELLEN 00060 ; MEDIUM MUSS BEI AUTO-FORMAT 00070 ; GESETZT WERDEN. 00080 ; 00090 SETDEN LDA DENS 00100 BEQ .2 00110 BPL .1 00120 LDX #SETMD MEDIUM 00130 LDY /SETMD 00140 BNE .3 00150 .1 LDX #SETDD DOUBLE 00160 LDY /SETDD 00170 BNE .3 00180 .2 LDX #SETSD SINGLE 00190 LDY /SETSD 00200 .3 STX DBUFLO 00210 STY DBUFHI 00220 LDA #$4F COMMAND 4F 00230 STA DCOMND 00240 LDA #$C 12 BYTES 00250 STA DBYTLO 00260 LDA #$80 SENDEN 00270 STA DSTATS 00280 LDY DESTN DRIVE 00290 JMP MOVSLO SIO... 00300 ------------------------------ 00310 ; 00320 ; FORMAT-VERIFY EIN- ODER 00330 ; AUSSCHALTEN 00340 ; 00350 SETVER LDA #$10 00360 BCS .1 00370 ORA #$20 SEKTOR LOW 00380 .1 STA DSECLO 00390 LDA #0 00400 STA DSTATS STATUS 00410 LDA #$44 COMMAND 44 00420 STA DCOMND 00430 LDY DESTN DRIVE 00440 JMP MOVSLO SIO... 00450 ------------------------------ 00460 ; 00470 ; KOPIEREN BEENDET 00480 ; 00490 DONE LDY #120 00500 LDX #0 DISPLAY 00510 .1 LDA DISPLY,Y RETTEN 00520 STA DSBUF,X 00530 INX 00540 INY 00550 CPY #200 00560 BNE .1 00570 LDA CFIRST ANZ. 00580 STA RAMDSK DURCHG. 00590 ; 00600 ; ENDE-SOUND 00610 ; 00620 LDA #0 00630 STA $D208 AUDCTL 00640 LDY #$EF 00650 .2 STY $D201 AUDC1 00660 STY BYT1 00670 JSR LLL 00680 LDY BYT1 00690 DEY 00700 CPY #$DF 00710 BNE .2 00720 JMP STA2 NEUSTART 00730 ; 00740 LLL LDX #$8 00750 .1 STX $D200 AUDF1 00760 LDY #$0 00770 .2 DEY 00780 BNE .2 00790 INX 00800 CPX #$50 00810 BNE .1 00820 RTS 00830 ------------------------------ 00840 ; 00850 ; DATENLAENGE SETZEN 00860 ; SEKTORNUMMER AUSGEBEN 00870 ; 00880 SETLEN LDA #$80 00890 STA DBYTLO $80 BYTES 00900 LDA #0 00910 STA DBYTHI 00920 LDY #30 00930 LDA DSECHI 00940 JSR HXOUT SEKTOR HI 00950 LDA DSECLO 00960 JSR HEXOUT SEKTOR LO 00970 LDA DENS 00980 CMP #$20 DOUBLE ? 00990 BNE .2 01000 LDA DSECHI 01010 BNE .1 01020 LDA DSECLO 01030 CMP #4 SEKTOR <4 01040 BCC .2 01050 .1 ASL DBYTLO $100 BYTES 01060 ROL DBYTHI 01070 .2 RTS 01080 ------------------------------ 01090 ; 01100 ; SIO-AUFRUFEN / 2 VERSUCHE 01110 ; 01120 MASTER LDA #2 2 VERSUCHE 01130 STA BYT1 01140 LDA DSTATS STATUS 01150 STA BYT1+1 MERKEN 01160 .1 JSR US 01170 BPL .2 KEIN ERROR 01180 LDA BYT1+1 STATUS 01190 STA DSTATS ZURUECK 01200 DEC BYT1 LETZTER 01210 BNE .1 VERSUCH? 01220 STY DSTATS 01230 SEC 01240 RTS FEHLER 01250 .2 CLC 01260 RTS KEIN FEHLER 01270 ------------------------------ 01280 ; 01290 ; KOMMANDO IN NORMALER UEBER- 01300 ; TRAGUNGSRATE SENDEN 01310 ; 01320 MOVSLO STY DUNIT 01330 LDA SPTBL-1,Y 01340 PHA 01350 LDA #$28 01360 STA SPTBL-1,Y 01370 JSR MASTER 01380 LDX DUNIT 01390 PLA 01400 STA SPTBL-1,X 01410 RTS 01420 ------------------------------ 01430 ENDCHK BIT DENS MEDIUM? 01440 BPL .1 01450 LDA RSECA 01460 CMP #$10 01470 BNE .2 SEKTOR 01480 LDA RSECA+1 $410 01490 CMP #4 ERREICHT? 01500 BNE .2 01510 SEC 01520 RTS 01530 .1 LDA RSECA SEKTOR 01540 CMP #$D0 $2D0 01550 BNE .2 ERREICHT? 01560 LDA RSECA+1 01570 CMP #2 01580 BNE .2 01590 SEC 01600 RTS 01610 .2 INC RSECA SEKTOR+1 01620 BNE .3 01630 INC RSECA+1 01640 .3 LDA DBUFLO BUFFER 01650 CLC +LAENGE= 01660 ADC DBYTLO BUFFER 01670 STA DBUFLO 01680 LDA DBUFHI 01690 ADC DBYTHI 01700 STA DBUFHI 01710 BIT BANKS DATEN IN 01720 BMI SAVBNK RAMDISK? 01730 TAY 01740 INY $F000? 01750 CPY #$F1 01760 BEQ .6 01770 CPY #$D1 $D000? 01780 BEQ .5 01790 CPY HIMEM MEMTOP? 01800 BNE .4 01810 LDA #$C0 BUFFER= 01820 STA DBUFHI $C000 01830 LDA #0 01840 STA DBUFLO 01850 .4 CLC 01860 BCC ENDC3 01870 .5 LDA #0 BUFFER= 01880 STA DBUFLO $D800 01890 LDA #$D8 01900 STA DBUFHI 01910 CLC 01920 BCC ENDC3 01930 ; 01940 .6 LDA MAXBANK ENDE 01950 BNE SWBANK RAMDISK? 01960 ENDRAM SEC 01970 ENDC3 LDA #$FF 01980 RTS 01990 ------------------------------ 02000 ; 02010 ; BANK EINSCHALTEN/BUFFER=$4000 02020 ; 02030 SWBANK LDY #$FF 02040 STY BANKS 02050 INY 02060 STY BANKNR 02070 SWB0 LDA PORTB 02080 AND #$23 02090 ORA BANKTB,Y 02100 STA PORTB 02110 LDA #0 BUFFER= 02120 STA DBUFLO $4000 02130 LDA #$40 02140 STA DBUFHI 02150 CLC 02160 BCC ENDC3 02170 ------------------------------ 02180 SAVBNK CMP #$80 ENDE 02190 BCC ENDC3 RAMBANK? 02200 INC BANKNR BANK+1 02210 LDY BANKNR 02220 CPY MAXBANK ENDE 02230 BEQ ENDRAM RAMDISK? 02240 BNE SWB0 02250 ------------------------------ 02260 ; 02270 ; DISKBUFFER AUF LOMEM SETZEN 02280 ; RAMBANKS ABSCHALTEN 02290 ; 02300 SETBUF LDA #LOMEM 02310 STA DBUFLO 02320 LDA /LOMEM 02330 STA DBUFHI 02340 LDA #0 02350 STA BANKS 02360 LDA PORTB CPU 02370 ORA #$10 ZUGRIFF 02380 STA PORTB AUS 02390 RTS 02400 ------------------------------ 02410 ; 02420 ; FEHLERMELDUNG UND FEHLERNUM- 02430 ; MER AUSGEBEN/AUF TASTE WARTEN 02440 ; 02450 ERROR LDX #DSKERR "FEHLER.." 02460 STX RWLINE 02470 LDY #15 POS.15 02480 LDA DSTATS NUMMER 02490 JSR HEXOUT 02500 LDA #$80 02510 JSR HITRET TASTE ? 02520 BEQ .1 02530 SEC 02540 RTS 02550 .1 CLC 02560 RTS 02570 ------------------------------ 02580 ; 02590 ; HEXZAHL IM ACCU UMWANDELN 02600 ; UND IN TEXTZEILE EINSETZEN 02610 ; 02620 HEXOUT PHA HIGH 02630 LSR NIBBLE 02640 LSR 02650 LSR 02660 LSR 02670 JSR HXOUT 02680 PLA LOW 02690 AND #$F NIBBLE 02700 HXOUT CMP #$A 02710 BCC .1 02720 ADC #6 02730 .1 ADC #$D0 02740 STA DSKERR,Y 02750 INY 02760 RTS 02770 ------------------------------ 02780 ; 02790 ; BALKENPOSITION AKTUALISIEREN 02800 ; 02810 DFUEL STY FBYT 02820 TAY 02830 INY EIN SCHRITT 02840 CPY FINC WEITER? 02850 BCC .2 02860 LDY FBYT 02870 INY 02880 CPY #4 02890 BCC .1 02900 INX 02910 LDY #0 02920 .1 LDA FTAB,Y ZEICHEN 02930 STA DISPLY,X SETZEN 02940 LDA #0 02950 RTS 02960 .2 TYA 02970 LDY FBYT 02980 RTS 02990 ------------------------------ 03000 ; 03010 ; BALKEN SETZT SICH AUS GRAFIK- 03020 ; ZEICHEN ZUSAMMEN " \^V \^Y \M^B \240 " 03030 ; 03040 FTAB .HX 5659C280 03050 ; 03060 ; 03070 ; 03080 COLTB .HX FA8A10CA10 03090 ; 03100 ; TEXTE DER SPEICHERGROESSE 03110 ; 16K / 8K / OHNE CARTRIDGE 03120 ; 03130 MEMTB .AT "40k 48k 56k " 64K 03140 .AT "104k112k120k" 128K 03150 .AT "168k176k184k" 192K 03160 .AT "296k304k312k" 320K 03170 ------------------------------ 03180 ; 03190 ; LAUFWERK KONFIGURATIONSDATEN 03200 ; SINGLE/DOUBLE/MEDIUM-DENSITY 03210 ; 03220 SETSD .HX 2800001200000080 03230 .HX FF000000 03240 SETDD .HX 2800001200040100 03250 .HX FF000000 03260 SETMD .HX 2800001A00040080 03270 .HX FF000000 03280 ------------------------------ 03290 ; 03300 ; TESTEN OB ALLE BYTES IM 03310 ; BUFFER NULL SIND 03320 ; 03330 EMPTY LDA FORMT FORMATFLG 03340 BNE EMP2 03350 LDA DBUFLO ADRESSE 03360 STA EMPVEC+1 03370 LDA DBUFHI 03380 STA EMPVEC+2 03390 LDY #0 03400 EMPVEC LDA $AAAA,Y 03410 BNE EMP2 03420 INY 03430 CPY DBYTLO ALLE BYTES 03440 BNE EMPVEC GETESTET? 03450 SEC 03460 RTS 03470 EMP2 CLC 03480 RTS 03490 ------------------------------ 03500 ; 03510 ; TEXT AN POSITION IM Y-REG. 03520 ; AUSGEBEN / ENDKENNUNG = $EA 03530 ; 03540 TXTOUT PLA TEXTADRESSE 03550 STA $43 VOM STACK 03560 PLA 03570 STA $44 03580 .1 INC $43 ADRESSE+1 03590 BNE .2 03600 INC $44 03610 .2 LDX #0 03620 LDA ($43,X) 03630 CMP #$EA TEXT ENDE? 03640 BEQ .3 03650 STA DISPLY,Y 03660 INY 03670 BNE .1 03680 .3 JMP ($43) ZURUECK 03690 ------------------------------ 03700 ; 03710 ; BILSCHIRM LOESCHEN 03720 ; 03730 CLRSCR LDY #0 03740 CLRSC1 LDA #0 03750 .1 STA DISPLY,Y 03760 INY 03770 CPY #$F0 LAENGE $F0 03780 BNE .1 03790 RTS 03800 ------------------------------ 03810 ; 03820 ; TON AUSGEBEN UND AUF TASTE 03830 ; WARTEN 03840 ; 03850 HITRET STA $D200 AUDF1 03860 LDY #$EF 03870 .1 LDX #$FF 03880 .2 STX $D40A 03890 DEX 03900 BNE .2 03910 DEY 03920 STY $D201 AUDC1 03930 CPY #$E0 03940 BNE .1 03950 JSR GETKEY TASTE? 03960 RTS 03970 ------------------------------ 03980 ; 03990 ; AUF EINE FUNKTIONSTASTE 04000 ; WARTEN 04010 ; 04020 GETKEY LDA $D01F 04030 CMP #7 KEINE 04040 BNE GETKEY TASTE? 04050 LDX #0 04060 .1 DEX ZEITVERZ. 04070 STX $D40A 04080 BNE .1 04090 .2 LDA $D01F TASTE 04100 CMP #7 ENTPRELLEN 04110 BEQ .2 04120 LDY #$40 04130 .3 STA $D40A 04140 STY $D01F 04150 DEY 04160 BNE .3 04170 STY $4D 04180 RTS ACCU=TASTE 04190 ------------------------------
DSKSYS.ASM#
00010 ------------------------------ 00020 ************ 00030 ** DSKSYS ** 00040 ************ 00050 ------------------------------ 00060 ; 00070 ; LAUFWERK TESTEN OB HIGH-SPEED 00080 ; MOEGLICH IST 00090 ; 00100 HSCHK STA DUNIT DRIVE NR. 00110 LDA #$3F COMMAND 3F 00120 STA DCOMND 00130 LDX #0 00140 INX 00150 STX DBYTLO 1 BYTE 00160 LDA #$40 00170 STA DSTATS GETBYTE 00180 JSR SETBUF BUF.=LOMEM 00190 JSR US SIO... 00200 TYA OK 00210 BPL .2 00220 CMP #$8B NO DRIVE? 00230 BEQ .1 00240 INC DUNIT DRIVE+1 00250 LDA DUNIT 00260 CMP #5 DRIVE5? 00270 BCC HSCHK WEITER... 00280 SEC 00290 RTS 00300 .1 LDY #0 00310 CLC 00320 RTS 00330 ; 00340 .2 LDA LOMEM HIGH-SPEED 00350 LDY DUNIT 00360 STA SPTBL-1,Y MERKEN 00370 LDY #$FF 00380 CLC 00390 RTS 00400 ------------------------------ 00410 ; 00420 ; UNIVERSELLE SIO-ROUTINE 00430 ; 00440 US LDY DUNIT DRIVE NR. 00450 TYA 00460 ORA #$30 00470 STA $23A 00480 LDA DCOMND KOMMANDO 00490 STA $23B 00500 LDA DSECLO SEKTOR LO 00510 STA $23C 00520 LDA DSECHI SEKTOR HI 00530 STA $23D 00540 LDA SPTBL-1,Y SPEED IN 00550 STA $D204 AUDF3 00560 LDA #0 00570 STA $D206 AUDF6 00580 TSX STACK 00590 STX $318 RETTEN 00600 ; 00610 IO11 LDA RETRY VERSUCHE 00620 STA $36 SETZEN 00630 IO12 LDA #0 00640 STA $30 00650 STA $319 00660 LDA #$3A 00670 STA $32 BUFFER $23A 00680 LDA #2 00690 STA $33 00700 LDA #4 00710 STA $34 00720 LDA #$34 COMMAND= 00730 STA $D303 LOW 00740 JSR SEND1 COM. SENDEN 00750 LDA DBUFLO 00760 STA $32 BUFFER 00770 LDA DBUFHI SETZEN 00780 STA $33 00790 LDA DBYTLO LAENGE 00800 STA $34 00810 BIT DSTATS 00820 BPL IO2 SENDEN? 00830 JSR SEND1 00840 IO2 DEC $319 00850 JSR SETTI1 TIMEOUT 00860 BIT DSTATS SETZEN 00870 BVC IO3 EMPFANGEN? 00880 JSR GET1 00890 IO3 LDA #$A0 00900 STA $D207 SOUND AUS 00910 LDA $10 00920 STA $D20E 00930 JSR CLRTI TIMEOUT 00940 LDY $30 LOESCHEN 00950 STY DSTATS STATUS 00960 RTS 00970 ------------------------------ 00980 SEND1 LDX #$80 00990 .1 DEX 01000 BNE .1 01010 LDA #$23 FUNKTION= 01020 JSR POKEY SENDEN 01030 LDY #0 01040 LDA ($32),Y 01050 STA $31 01060 STA $D20D BYTE SENDEN 01070 .2 INY 01080 CPY $34 ENDE? 01090 BEQ SENOUT 01100 LDA ($32),Y BUFFER 01110 JSR PUTBYT SENDEN 01120 JSR CHKSUM 01130 JMP .2 WEITER... 01140 ; 01150 SENOUT LDA $31 CHECKSUMME 01160 JSR PUTBYT SENDEN 01170 .1 LDA $D20E 01180 AND #8 01190 BNE .1 01200 LDX #0 01210 LDY #3 TIMEOUT 01220 JSR STOUT SETZEN 01230 LDA #$C0 IRQ-STATUS 01240 STA $D20E SETZEN 01250 JMP RECEIV WARTEN... 01260 ------------------------------ 01270 GET1 LDA #0 CHECKSUMME 01280 STA $31 LOESCHEN 01290 LDY #0 01300 .1 JSR GETBYT DATENBLOCK 01310 STA ($32),Y EMPFANGEN 01320 JSR CHKSUM 01330 INY 01340 CPY $34 01350 BNE .1 01360 JSR GETBYT CHECKSUMME 01370 CMP $31 01380 BNE ERR8A ERROR 01390 RTS 01400 ; 01410 ERR8A LDA #$8A FEHLER 01420 ERRO1 STA $30 AUSGEBEN 01430 LDX $318 01440 TXS 01450 BIT $319 RETRY? 01460 BMI .1 01470 DEC $36 01480 BEQ .1 01490 JMP IO12 WEITER 01500 .1 JMP IO3 ENDE 01510 ------------------------------ 01520 ; 01530 ; TIME-OUT SETZEN UND AUF 01540 ; RUECKMELDUNG WARTEN 01550 ; 01560 SETTI1 LDX DCOMND COMMAND 01570 CPX #$50 =FORMAT 01580 BCS SETTI2 01590 LDX #10 CA.1 MIN. 01600 BNE SETTI3 01610 SETTI2 LDX #1 01620 SETTI3 LDY #$60 CA.7 MIN 01630 JSR STOUT TIMEOUT 01640 * SETZEN 01650 RECEIV LDA #$13 LESEN 01660 JSR POKEY 01670 LDA #$3C 01680 STA $D303 AUF BYTE 01690 JSR GETBYT WARTEN 01700 CMP #$41 "A" 01710 BEQ CLRTI 01720 CMP #$43 "C" 01730 BEQ CLRTI 01740 CMP #$45 "E" 01750 BEQ ERR90 01760 LDA #$8B "N" 01770 BNE ERRO1 FEHLER 139 01780 ERR90 LDA #$90 FEHLER 144 01790 STA $30 01800 * 01810 CLRTI LDY #0 TIME-OUT 01820 LDX #0 LOESCHEN 01830 STOUT LDA #ERR8A TIMER 1 01840 STA $226 VEKTOR 01850 LDA /ERR8A SETZEN 01860 STA $227 01870 * 01880 TXA 01890 LDX #3 01900 .1 STA $D40A 01910 DEX 01920 BNE .1 TIMER 1 01930 STA $219 WERT 01940 STY $218 SETZEN 01950 RTS 01960 ------------------------------ 01970 CHKSUM CLC CHECKSUMME 01980 ADC $31 ADDIEREN 01990 ADC #0 02000 STA $31 02010 RTS 02020 ------------------------------ 02030 ; 02040 ; BYTE VOM LAUFWERK EMPFANGEN 02050 ; 02060 GETBYT LDA $D20E BYTE DA? 02070 AND #$20 02080 BNE GETBYT 02090 LDA #$DF CLEAR 02100 STA $D20E IRQ-FLAG 02110 LDA #$F8 02120 STA $D20E 02130 LDA $D20F 02140 STA $D20A I/O-ERROR 02150 BPL JERR 02160 AND #$20 02170 BEQ JERR 02180 LDA $D20D BYTE IN A 02190 RTS 02200 JERR JMP ERR8A 02210 ------------------------------ 02220 ; 02230 ; BYTE AN LAUFWERK SENDEN 02240 ; 02250 PUTBYT PHA 02260 PUT1 LDA $D20E POKEY 02270 AND #$10 BEREIT? 02280 BNE PUT1 02290 LDA #$EF IRQ-FLAG 02300 STA $D20E SETZEN 02310 LDA #$F8 02320 STA $D20E 02330 PLA 02340 STA $D20D BYTE SENDEN 02350 RTS 02360 ------------------------------ 02370 ; 02380 ; POKEY FUER EIN- UND AUSGABE 02390 ; VORBEREITEN 02400 ; 02410 POKEY STA $D20F SKCTL 02420 STA $D20A 02430 LDA #$28 02440 STA $D208 AUDCTL 02450 LDA #$A8 02460 STA $D207 SOUNDREG. 02470 LDA #$F8 02480 STA $D20E IRQ-ENABLE 02490 RTS 02500 ------------------------------ 02510 ************ 02520 ** SYSTEM ** 02530 ************ 02540 ------------------------------ 02550 ; 02560 ; DA KEIN BETRIEBSSYSTEM VOR- 02570 ; HANDEN IST, MUESSEN DIE 02580 ; INTERRUPTS SELBST BEHANDELT 02590 ; WERDEN. 02600 ; NMI-ROUTINE: 02610 ; 02620 PNMI PHA 02630 LDA $D40F RESET 02640 AND #$20 (OLDRUNNER) 02650 BEQ .1 02660 JMP $100 ZUM COPY 02670 ; 02680 .1 TXA REGISTER 02690 PHA RETTEN 02700 TYA 02710 PHA 02720 STA $D40F NMI-STATUS 02730 ; 02740 ; TIMER 1 AUF NULL UEBERPRUEFEN 02750 ; WENN ABGELAUFEN IN TIMER- 02760 ; ROUTINE SPRINGEN 02770 ; 02780 NMIVEC LDY $218 02790 BNE .1 02800 LDY $219 02810 BEQ .2 TIMER 1=0 02820 DEC $219 02830 .1 DEC $218 TIMER -1 02840 BNE .2 02850 LDY $219 02860 BNE .2 02870 JSR NMIIND TIMEOUT... 02880 .2 LDA #8 02890 STA $D01F 02900 PLA REGISTER 02910 TAY ZURUECK 02920 PLA 02930 TAX 02940 PLA 02950 RTI NMI ENDE 02960 ------------------------------ 02970 NMIIND JMP ($226) TIMER1 VEC. 02980 ------------------------------ 02990 ; 03000 ; IRQ-VECTOR 03010 ; 03020 RETIRQ PHA 03030 LDA $D20E IRQ-FLAG 03040 EOR #$FF LOESCHEN 03050 STA $D20E 03060 LDA #0 03070 STA $D20E 03080 PLA 03090 RTI IRQ ENDE 03100 ------------------------------