!!!CompyShop Sector Copy Source Code 

[{TableOfContents }]

[{Image src='atari000.png' }]

!!Disk Image
* [Sector Copy/biboasm2.atr]

!!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 ------------------------------
}}}