!!!Speedy 1050 Backup
[{TableOfContents }]


!!Disk Image
* [Speedy 1050 Backup/biboass3.atr]

!!Source

!BACKUP.ASM
{{{
00010          .LI ON
00020 ------------------------------
00030 ;  SPEEDY BACKUP V 1.1 
00040 ; (P) THOMAS NIEHAUS -TABS-
00050 ; (C) 1986/87 COMPY-SHOP
00060 ;     --BIBO-ASSEMBLER
00070 ;       TOOLDISK 2 - 1987
00080 ------------------------------
00090          .LI OFF
00100          .OR $400
00110          .OF "D:BACKUP.COM"
00120          .DF "D:HS.DAT
00130 ------------------------------
00140          .OR $2500
00150 ------------------------------
00160 ;VERSCH
00170 ;IST EINE EINFACHE VERSCHIE-
00180 ;ROUTINE. DA DAS HAUPTPROGRAMM
00190 ;IN EINEM SPEICHERBEREICH LIEGT
00200 ;WO SICH NORMALERWEISE DAS DOS
00210 ;BEFINDET, MUESSEN WIR DAS
00220 ;PROGRAMM VOR DEM START IM
00230 ;SPEICHER VERSCHIEBEN.
00240 ------------------------------
00250 VERSCH   LDA #$10
00260          STA $F0
00270          STA $F2
00280          LDA #$06
00290          STA $F1
00300          LDA #$26
00310          STA $F3
00320          LDX #$14
00330          LDY #$00
00340 .1       LDA ($F2),Y
00350          STA ($F0),Y
00360          INY
00370          BNE .1
00380          INC $F1
00390          INC $F3
00400          DEX
00410          BNE .1
00420          JMP $610
00430 ------------------------------
00440          .OR $610
00450          .TA $2610
00460 ------------------------------
00470          .IN "D:EQUATES.ASM
00480          .IN "D:MENU.ASM
00490          .IN "D:COPY.ASM
00500          .IN "D:INIT.ASM
00510          .IN "D:DRIVE.ASM
00520 ------------------------------
00530          .OR $2E0
00540          .DA $2500
00550 ------------------------------
00560 ;ERKLAERUNGEN:
00570 ;DAS PROGRAMM KANN NUR VON DER
00580 ;DISKETTE AUF DIE DISKETTE
00590 ;ASSEMBLIERT WERDEN. EIN
00600 ;ARBEITEN MIT DER RAMDISK IST
00610 ;EBENFALLS MOEGLICH. ALLE
00620 ;INCLUDE DATEIEN (ZEILEN 150-
00630 ;190) MUESSEN DANN VON D:
00640 ;AUF DIE RAMDISK NUMMER GE-
00650 ;AENDERT WERDEN (ZB. D8:)!
00660 ;AUCH DIE DATENDATEI US.DAT
00670 ;MUSS DANN AUF D8:US.DAT GE-
00680 ;AENDERT WERDEN!
00690 ------------------------------
00700 ;HS.DAT
00710 ;IST EINE REINE DATENDATEI.
00720 ;SIE ENTHAELLT DIE HIGH-SPEED
00730 ;ROUTINE.
00740 ------------------------------
00750 ;EQUATES.ASM
00760 ;ENTHAELLT ALLE VOM PROGRAMM
00770 ;BENOETIGTEN SYSTEM ADRESSEN
00780 ------------------------------
00790 ;MENU.ASM
00800 ;IST DAS HAUPTMENU DES BACKUP
00810 ;PROGRAMMES. ALLE EINSTELLUNGEN
00820 ;KOENNEN VON HIER AUS VORGE-
00830 ;NOMMEN WERDEN.
00840 ------------------------------
00850 ;COPY.ASM
00860 ;ENTHAELLT IST DAS EIGENTLICHE
00870 ;KOPIERPROGRAMM. HIER SIND ALLE
00880 ;WICHTIGEN PROGRAMMTEILE ENT-
00890 ;HALTEN.
00900 ------------------------------
00910 ;INIT.ASM
00920 ;INITIALISIERT DAS KOMPLETTE
00930 ;SYSTEM.
00940 ------------------------------
00950 ;DRIVE.ASM
00960 ;BEINHALTET DIE ROUTINE, DIE
00970 ;ZUM LAUFWERK GESCHICKT WIRD.
00980 ------------------------------
00990 ;DAS FERTIG ASSEMBLIERTE PRO-
01000 ;GRAMM KANN NUR VOM DOS AUS
01010 ;GESTARTET WERDEN!
01020 ;EIN PROGRAMMSTART VOM BIBO-
01030 ;ASSEMBLER HER IST NICHT
01040 ;MOEGLICH.
01050 ------------------------------
01060 ;AENDERN SIE DAS PROGRAMM NACH
01070 ;IHREN WUENSCHEN ODER BEDUERF-
01080 ;NISSEN! VIELLEICHT IST KOENNEN
01090 ;SIE ES SOGAR VERBESSERN!
01100 ;MELDEN SIE SICH DANN BEI UNS!
01110 ;
01120 ;COMPY-SHOP 0208-497169
01130 ;
01140 ;            VIEL SPASS
01150 ------------------------------
}}}

!EQUATES.ASM

{{{


00010 ------------------------------
00020              .LI ON
00030 ;"†≈—’¡‘≈”†"
00040              .LI OFF
00050 ------------------------------
00060 ; DATE :     18 / 09 / 1986
00070 ------------------------------
00080 ; ATARI  EQUATES :
00090 ------------------------------
00100 SAV1     = $C0   2 B.
00110 DRVSEL   = SAV1+2 1 B.
00120 SAV2     = SAV1+3 2 B.
00130 MAXSAV   = SAV1+5 2 B.
00140 CBUF     = $1000
00150 LOMEM    = $1A00
00160 HIMEM    = $2E6
00170 M1       = SAV1+7 1 B.
00180 M2       = SAV1+8 1 B.
00190 DLEN     = SAV1+9 2 B.
00200 TRACKNUM = SAV1+11 1 B.
00210 LTRACK   = SAV1+12 1 B.
00220 STRACK   = SAV1+13 1 B.
00230 HLEN     = SAV1+14 1 B.
00240 FORKEN   = SAV1+15 1 B.
00250 MAXDRV   = 2
00260 FDRV     = SAV1+16 1 B.
00270 BEGIN    = $8000
00280 FDCSTAT  = SAV1+17 1 B.
00290 DISPLAY  = SAV1+18 2 B.
00300 SLOC     = SAV1+20 2 B.
00310 DLOC     = SAV1+22 2 B.
00320 ------------------------------
00330 ;DRIVE ROUTINE POINTER
00340 ;DRIVE EQUATES :
00350 ------------------------------
00360 BUF      = $90
00370 XSAV     = BUF+2
00380 YSAV     = BUF+3
00390 HEADBUF  = $8800
00400 SECBUF   = $8C00 SECTOR BUFF
00410 RDHEAD   = $FF7E
00420 RDHD1    = $FF81
00430 X2WAIT   = $FF1B
00440 TRACK0   = $FF1E
00450 CSEC     = BUF+4
00460 TSEC     = BUF+5
00470 ------------------------------
00480 ;RDSEC1  = $FF66
00490 ;Y=0,(IND) = $19 BUFFER.
00500 ;(SECLEN)= $14 SEI $80
00510 ;SECTOR  = $0E
00520 ------------------------------
00530 SENDC    = $FF5A
00540 SENDA    = $FF57
00550 TRACKPO  = $FF21
00560 CONRES   = $FF2A
00570 MOTON    = $FF09
00580 CLRTRA   = $FFAE
00590 SDBTS    = $FF54
00600 SENDE    = $FF5D
00610 SDRDDP   = $FF15
00620 TSTWRP   = $FF6F
00630 MOTOFF   = $FF0F
00640 ------------------------------
}}}

!MENU.ASM

{{{


00010 ------------------------------
00020          .LION
00030 ;"†Õ≈Œ’†"
00040          .LIOFF
00050 ------------------------------
00060 ;    STAND: 18/11/86'
00070 ------------------------------
00080 BASE     = $58    DISPLAY START
00090 HSCROLL  = $D404
00100 MAXSCROL = 145
00110 ------------------------------
00120 MENUEST  JSR RAMDISKINIT
00130          JSR OEFFNE
00140          JSR RDCAP
00150          JMP COPYST
00160 OEFFNE   JSR TEXTOUT
00170          .HX 7D9B
00180          .AS '   SPEEDY 1050 BACKUP INITIALIZER'
00190          .HX 9B9BEA
00200          RTS
00210 ------------------------------
00220 RDCAP    JSR TEXTOUT
00230          .AS 'RAM - SIZE : '
00240          .HX EA
00250          LDA RAMDISKFLG
00260          BEQ .1   NO RAMDISK LOCATED
00270          CMP #$10
00280          BEQ .2
00290          CMP #8
00300          BEQ .3
00310          CMP #4
00320          BEQ .4
00330          LDA #0
00340          STA RAMDISKFLG
00350 .1       JSR TEXTOUT
00360          .DA "MAX. 64 K BYTES",#$9B,#$EA
00370          RTS
00380 .2       JSR TEXTOUT
00390          .DA "320 K BYTES",#$9B,#$EA
00400          RTS
00410 .3       JSR TEXTOUT
00420          .DA "192 K BYTES",#$9B,#$EA
00430          RTS
00440 .4       JSR TEXTOUT
00450          .DA "128 K BYTES",#$9B,#$EA
00460          RTS
00470 ------------------------------
00480 VPX      .HX 0F
00490 HSCNT    .HX 00
00500 NOSCROL  .HX 00
00510 DEFVBI   .DA $E462
00520 ------------------------------
00530 ;"Õ≈Œ’≈†ƒ…”–ំÅ”‘"
00540 ------------------------------
00550 MENUDL   LDA #DL
00560          STA $230
00570          LDA /DL
00580          STA $231
00590          LDA #14
00600          STA $2C5
00610          LDA #2
00620          STA $2C6
00630          LDA $D6AE
00640          CMP #$A9
00650          BNE .1
00660          JSR $D6AE
00670          LDA $224
00680          STA DEFVBI
00690          LDA $225
00700          STA DEFVBI+1
00710 ------------------------------
00720 ;"…Œ…‘†…ÕƆ÷¬…†§≤≤≤Ƨ≤≤≥"
00730 ------------------------------
00740 .1       LDA #0
00750          STA $D40E
00760          LDA #VBI
00770          STA $222
00780          LDA /VBI
00790          STA $223
00800          LDA #DVBI
00810          STA $224
00820          LDA /DVBI
00830          STA $225
00840          LDA #$40
00850          STA $D40E
00860          RTS
00870 ------------------------------
00880 DVBI     LDX #$18
00890 .1       LDA $3CF,X
00900          AND #$7F
00910          STA CLK,X
00920          DEX
00930          BPL .1
00940          JMP (DEFVBI)
00950 ------------------------------
00960 VBI      LDA HSCNT
00970          CMP #MAXSCROL
00980          BCC .0
00990          LDA NOSCROL
01000          BMI .2
01010          LDA #TXTSP
01020          STA HSLMS
01030          LDA /TXTSP
01040          STA HSLMS+1
01050          LDA #MAXSCROL-44
01060          STA HSCNT
01070          LDA #$FF
01080          STA NOSCROL
01090 ------------------------------
01100 .0       LDX VPX
01110          DEX
01120          CPX #$C
01130          BCC .1
01140          STX HSCROLL
01150          STX VPX
01160          JMP $E45F
01170 .1       LDA #$F
01180          STA HSCROLL
01190          STA VPX
01200          INC HSCNT
01210          INC HSLMS
01220          BNE .2
01230          INC HSLMS+1
01240 .2       JMP $E45F
01250 ------------------------------
01260 ;"¡†Ω†”‘¡‘’”"
01270 ;"ÿ†Ω†”≈√‘œ“"
01280 ;"Ÿ†Ω†‘“¡√À"
01290 ------------------------------
01300 CLRBASE  LDA #19
01310          STA VAL
01320 .1       LDY TRACKNUM
01330          LDX VAL
01340          JSR CALC
01350          LDA #0
01360          STA (DISPLAY),Y
01370          DEC VAL
01380          BNE .1
01390          RTS
01400 PUTBASE  CPX #20
01410          BCS RTN1
01420          CPY #40
01430          BCS RTN1
01440          PHA
01450          JSR CALC
01460          LDA (DISPLAY),Y
01470          BEQ D
01480          PLA
01490          ORA #$80
01500          STA (DISPLAY),Y
01510 RTN1     RTS
01520 ------------------------------
01530 D        PLA
01540          STA (DISPLAY),Y
01550          RTS
01560 ------------------------------
01570 CALC     LDA #0
01580          STA $1
01590          DEX
01600          TXA
01610          ASL
01620          ASL
01630          ASL
01640          STA $0
01650          ASL
01660          ROL $1
01670          ASL
01680          ROL $1
01690          ADC $0
01700          BCC .1
01710          INC $1
01720          CLC
01730 .1       ADC BASE
01740          STA DISPLAY
01750          LDA $1
01760          ADC BASE+1
01770          STA DISPLAY+1
01780          RTS
01790 ------------------------------
01800 DL       .HX 707046
01810          .DA TXT1
01820          .HX 1000020002021042
01830 LMS      .DA $9C40
01840          .HX 020202020202
01850          .HX 020202020202
01860          .HX 020202020202
01870 ZDL      .HX 00
01880          .HX 52      ;H SCROLL
01890 HSLMS    .DA TXT2
01900          .HX 0046
01910          .DA MESSAGE
01920          .HX 41
01930          .DA DL
01940 MESSAGE  .AT '               '
01950          .AT '        '
01960 TXT1     .AT ' SPEEDY BACKUP V1.1'
01970          .AT '    '
01980          .AT '       TRACK    '
01990          .AT '   STATUS            '
02000          .AT '          1         2         3         '
02010          .AT '0123456789012345678901234567890123456789'
02020 TXTSP    .AT '                    '
02030          .AT '                    '
02040 TXT2     .AT '     COPYRIGHT BY  COMPY'
02050          .AT ' - SHOP MH  10 / 86  '
02060          .AT ' ***  '
02070          .AT ' -SPEEDY BACKUP V1.1 -'
02080          .AT '     BY    '
02090          .AT -'  TAPS  '
02100          .AT ' ,THOMAS NIEHAUS '
02110          .AT '(p)      '
02120 CLK      .AT '                    '
02130          .AT '                             '
02140          .AT '                    '
02150 MSOURCE
02160          .AT 'INSERT SOURCE,PLEASE'
02170 MDEST
02180          .AT ' INSERT DESTINATION '
02190 ------------------------------
02200 RAMDISKINIT
02210          LDA $D301
02220          STA PB
02230          LDA #$23
02240          STA $D301
02250          LDA #0
02260          STA $4000
02270          LDA PB
02280          STA $D301
02290          LDA #$23
02300          STA $4000
02310          STA $D301
02320          LDA $4000
02330          CMP #$23
02340          BEQ .2      NO RAMD.!
02350          LDY #0
02360          LDX #0
02370 .1       LDA $D301
02380          AND #$23
02390          ORA RDTAB,Y
02400          STA $D301
02410          LDA RDTAB1,X
02420          STA $4000
02430          INX
02440          INY
02450          INY
02460          INY
02470          INY
02480          CPX #4
02490          BCC .1
02500          LDA $D301
02510          AND #$23
02520          ORA #$CC
02530          STA $D301
02540          LDA $4000
02550          BCS .3      =JMP
02560 .2       LDA #0
02570 .3       STA RAMDISKFLG
02580          LDA PB
02590          STA $D301
02600          RTS
02610 ------------------------------
02620 RAMDISKFLG .HX 00
02630 PB       .HX 00
02640 RDTAB    .HX CCC8C4C0
02650          .HX 8C888480
02660          .HX 4C484440
02670          .HX 0C080400
02680 RDTAB1   .HX 100C0804
02690 ------------------------------
02700 ;"“¡Õƒ…”À‘“≈…¬≈“†‘≈”‘≈Œ"
02710 ;  
02720 ;"–¡“¡Õ≈‘≈“Ã…”‘≈†ƒ≈“†“¡Õƒ…”À†∫"
02730 ;
02740 RDSKPAR0 .DA $140
02750          .DA $A000
02760 ------------------------------
02770 ;"≈…Œ”–“’Œ«†–¡“¡Õ≈‘≈“†∫"
02780 ;X= LO ,Y = HI
02790 ;ACCU BIT0=0 READ
02800 ;ACCU BIT0=1 WRITE
02810 ------------------------------
02820 ;"“≈…»≈Œ∆œÃ«≈†ƒ≈“†≈Ã≈Õ≈Œ‘≈†∫"
02830 ;1.Sector No. Lo
02840 ;2.Sector No. Hi
02850 ;3.Buffer Adr. Lo
02860 ;4.Buffer Adr. Hi
02870 ;"“’≈√ÀÀ≈»“†∫"
02880 ;Y=$01 ERFOLGREICH
02890 ;Y=$FF FEHLER
02900 ------------------------------
02910 LFLG     .HX 00
02920 BANK     .HX 00
02930 LSEC     .HX 00
02940 HSEC     .HX 00
02950 ------------------------------
02960 ;"Œœ‘≈†∫"
02970 ;"√Ω∞†Ω憓¡Õƒ…”À÷≈“◊¡Ã‘’Œ«†Õ…‘†ÕÔˆÂÚ†°"
02980 ;"√Ω±†Ω憒≈¬≈“«…¬‘†ÿ¨Ÿ†Ω†¬’∆∆≈“¨†¬¡ŒÀ†…”‘†¬≈“≈…‘”†¡À‘…÷…≈“‘"
02990 ------------------------------
03000 RDSKVER  PHP
03010          AND #$7F
03020          STA LFLG
03030 ------------------------------
03040 ;"¡’∆†”‘¡√À†Ã…≈«‘† ≈‘⁄‘†”≈√‘œ“†ŒœÆ†Ãœ†œ¬≈Œ"
03050 ;"∆’≈“†±≤∏†”≈√‘œ“≈Œ†Ã…≈«‘†ƒ≈“†¬≈“≈…√»†ƒ≈“†”≈√‘œ“Œ’ÕÕ≈“Œ†⁄◊…”√»≈Œ"
03060 ------------------------------
03070 ;"a) 0-2047 fuer 256 KB Bank"
03080 ;"b) 0-1023 fuer 128 KB Bank"
03090 ;"c) 0- 511 fuer  64 KB Bank"
03100 ;"d) 0- ... fuer den linearen Speicher"
03110 ------------------------------
03120          LDA RDSKPAR0
03130          STA LSEC
03140          LDA RDSKPAR0+1
03150          STA HSEC
03160 ------------------------------
03170 ;"‘≈”‘†…∆†”≈√‘œ“†æΩ†§±¥∞"
03180 ------------------------------
03190          LDA HSEC
03200          BEQ .1
03210          CMP #2
03220          BCS .2
03230          LDA LSEC
03240          CMP #$40
03250          BCS .2
03260 .1       LDA LFLG
03270          ORA #$80
03280          STA LFLG
03290          BNE .3
03300 .2       LDA LSEC
03310          SEC
03320          SBC #$40
03330          STA LSEC
03340          LDA HSEC
03350          SBC #1
03360          STA HSEC
03370 ------------------------------
03380 ;"¬≈Õ≈“À’Œ«†∫"
03390 ;ACCU =MINUS  HEISST RAMDISK IM LINEAREN SPEICHER
03400 ;ACCU =PLUS  RAMDISK IN BANK LOGIK
03410 ;"Œœ◊†√¡Ã√’á‘≈†Õ≈Õœ“Ÿ†–œ”…‘…œŒ†¡Œƒ†¬¡ŒÀ": BANK = SECTOR/128
03420 ------------------------------
03430 .3       LDA HSEC
03440          STA BANK
03450          LDA LSEC
03460          ASL
03470          ROL BANK
03480 ------------------------------
03490 ;"–œ”ÆΩ†”≈√‘œ“†™†±≤∏"
03500 ------------------------------
03510          LDA #0
03520          LSR HSEC
03530          ROR LSEC
03540          ROR
03550          STA DLOC
03560          LDA LSEC
03570          LDX LFLG  ;TEST OF BANKED RAMDISK,MINUS SET = LINEAR MEMORY
03580          BPL .5
03590          TAX       ;SAVE HIGH BYTE OF CALCULATE POSITION
03600          LDA DLOC  ;GET LO BYTE AND ADD BOUNDARY
03610          CLC
03620          ADC #LOMEM
03630          STA DLOC
03640          TXA
03650          ADC /LOMEM
03660          STA DLOC+1
03670          BNE .6      =JMP
03680 .5       AND #$3F  ;HIGHER BIT'S DO NOT BUILD THE ADRESS
03690          CLC
03700          ADC #$40  ;BANK BASIS= $4000
03710          STA DLOC+1
03720 ------------------------------
03730 ;"«≈‘†”‘œ“≈†¬’∆∆≈“†∆“œÕ†”‘¡√À"
03740 ------------------------------
03750 .6       LDA RDSKPAR0+2
03760          STA SLOC
03770          LDA RDSKPAR0+3
03780          STA SLOC+1
03790 ------------------------------
03800 ;NOW, BANK NO. AND LOC HAS TOC CHECKED, IF AN ERROR OCCURED,
03810 ;THE MINUS FLAG WILL BE SET AND THE OPERATION IS ABORTED.
03820 ------------------------------
03830          LDA LFLG
03840          BPL .7
03850          LDA DLOC+1
03860          CMP HIMEM
03870          BCS ERR
03880          BCC .8      =JMP
03890 .7       LDA BANK   ; CHECK,IF CALCULATED BANK IS
03900          CMP RAMDISKFLG ; IN COMPUTER'S RAMDISK-SIZE
03910          BCS ERR
03920          LDA DLOC+1  ; CHECK, IF THERE'S A BANK OVERFLOW ERROR
03930          CMP #$80    ; NORMALLY,THIS ERROR CANNOT
03940          BCS ERR  ; OCCUR,BUT PERHAPS THERE'S A MISTAKE IN THIS PROGRAMM
03950 ------------------------------
03960 ;ALL CALCULATED PARAMETER'S WERE OKAY.LET'S MOVE
03970 ;THE MEMORY BLOCK !
03980 ;CAUTION: NO INTERRUPT IS DISABLED DURING BANK OPERATION !
03990 ------------------------------
04000 .8       LDX BANK
04010          LDA $D301
04020          AND #$23
04030          ORA RDTAB,X
04040          STA BANK
04050          LDA LFLG  TEST FOR RDSK
04060          BPL .9
04070          LDX $D301
04080          STX BANK
04090 .9       PLP    ; GET CARRY BACK AND TEST, IF DATA SHOULD BE MOVED
04100          BCS NOMOV
04110          AND #1  ;ACCU=1 WRITE
04120          BEQ SVD301
04130          LDA $D301  ;SAVE $D301 's  VALUE TO SWITCH
04140          STA .21+1  ; THE BANKS
04150 ;
04160          LDY #$7F
04170 .20      LDA (SLOC),Y
04180          LDX BANK  ;ENABLE BANK
04190          STX $D301
04200          STA (DLOC),Y
04210 .21      LDX #$FF
04220          STX $D301
04230          DEY
04240          BPL .20
04250          LDY #1  ;OKAY, 128 BYTES TRANSFERRED.
04260          RTS
04270 ------------------------------
04280 ;THE ERROR,THAT HAS BEEN OCCURED, IS MARKED WITH Y=FF
04290 ;AND SET MINUS FLAG !
04300 ------------------------------
04310 ERR      PLP     ; REGET PH WITH CARRY
04320          LDY #$FF
04330          RTS
04340 ------------------------------
04350 ; THIS PART IS ADVANCED READ FOR RAMDISK !
04360 ------------------------------
04370 SVD301   LDA $D301  ;SAVE $D301 's  VALUE TO SWITCH
04380          STA .22+1  ; THE BANKS
04390          LDY #$7F
04400 .21      LDX BANK  ;ENABLE BANK
04410          STX $D301
04420          LDA (DLOC),Y
04430 .22      LDX #$FF
04440          STX $D301
04450          STA (SLOC),Y
04460          DEY
04470          BPL .21
04480          LDY #1   ;OKAY, 128 BYTES TRANSFERRED.
04490          RTS
04500 NOMOV    LDA BANK
04510          STA $D301
04520          LDX DLOC
04530          LDY DLOC+1
04540          LDA #1
04550          RTS
04560 ------------------------------
04570 ;HERE'S THE 'SPEEDY DRIVES' ROUTINE
04580 ------------------------------
04590 SPEEDYD  JSR TEXTOUT
04600          .AS '    SPEEDY  DRIVES :'
04610          .HX EA
04620          LDA #1
04630          STA DRVSEL
04640 TSTDRVL  LDA DRVSEL
04650          JSR SELDRV
04660          BCS .2
04670          PHA
04680          JSR TEXTOUT
04690          .DA " D",#$EA
04700          PLA
04710          CLC
04720          ADC #$30
04730          JSR EOUT
04740          INC DRVSEL
04750          JMP TSTDRVL
04760 .2       LDA #$9B
04770          JMP EOUT
04780 ------------------------------
04790 ;RAMDISK STATUS MESSAGE (IF R.D. PRESENT)
04800 ------------------------------
04810 RDSKSTAT .HX 00
04820 ------------------------------
04830 RDSTAT   LDA RAMDISKFLG
04840          BEQ .1
04850          JSR TEXTOUT
04860          .AS '    RAMDISK STATUS : '
04870          .HX EA
04880          LDA RDSKSTAT
04890          BEQ .2
04900          JSR TEXTOUT
04910          .DA "USED",#$9B,#$EA
04920 .1       RTS
04930 ------------------------------
04940 .2       JSR TEXTOUT
04950          .DA "FREE",#$9B,#$EA
04960          RTS
04970 ------------------------------
04980 ;"Õ≈Œ’≈†∆’Œ√‘…œŒ”†¡∆‘≈“†Õ¡…Œ†Õ≈Œ’≈"
04990 ------------------------------
05000 MAXPAR   = 6
05010 ------------------------------
05020 MENUE    JSR OPENSCR
05030          LDA $230
05040          STA DISPLAY
05050          LDA $231
05060          STA DISPLAY+1
05070          LDY #$1C
05080          LDA #$10
05090          STA (DISPLAY),Y
05100          INY
05110          LDA #1    ; DLIST JUMP
05120          STA (DISPLAY),Y
05130          INY
05140          LDA #ZDL
05150          STA (DISPLAY),Y
05160          INY
05170          LDA /ZDL
05180          STA (DISPLAY),Y
05190          LDA #0
05200          STA $52
05210          JSR TEXTOUT
05220          .HX 7D9B
05230          .AS '      *** SPEEDY PARAMETER MENUE ***'
05240          .HX 9B9B9B
05250 ------------------------------
05260          .DA "  1: VERIFY WRITES",#$9B
05270          .DA "  2: R/W RETRIES",#$9B
05280          .DA "  3: R/W BY DISK CHANGE",#$9B
05290          .DA "  4: TRACK ANALYZING MODE",#$9B
05300          .DA "  5: SOURCE DRIVE",#$9B
05310          .AS "  6: DESTINATION DRIVE"
05320          .HX 9B9B9B
05330 ------------------------------
05340          .DA "†√’““≈Œ‘†»¡“ƒ◊¡“≈†–¡“¡Õ≈‘≈“†∫†",#$9B,#$EA
05350 ------------------------------
05360          JSR RDCAP
05370          JSR RDSTAT
05380          JSR SPEEDYD
05390 ------------------------------
05400 ;"–¡“¡Õ≈‘≈“†¡’”«≈¬≈Œ"
05410 ------------------------------
05420          LDA #2
05430          STA $52
05440          LDA NOSCROL
05450          CMP #$FF
05460          BNE NOLAUF
05470          JSR SETSC   ; SETZE LAUFBAND IN BEWEGUNG !
05480 ------------------------------
05490 ;"Œ’Œ†–¡“¡Õ≈‘≈“†÷œŒ†À≈Ÿ¬œ¡“ƒ†”≈‘⁄≈Œ"
05500 ------------------------------
05510 NOLAUF   LDA #0
05520          STA VAL
05530 .2       LDA VAL    ; HOLE TABELLEN POSITION
05540          JSR PARSET
05550          INC VAL
05560          LDA VAL
05570          CMP #MAXPAR  ;6
05580          BCC .2
05590 MENUEKEY JSR GETKEY
05600          CMP #27     ESCAPE ?
05610          BEQ .27
05620          SEC
05630          SBC #$31
05640          BMI MENUEKEY
05650          CMP #MAXPAR  ;6
05660          BCS MENUEKEY
05670          TAY
05680          ASL
05690          TAX
05700          LDA VECTAB+1,X
05710          PHA
05720          LDA VECTAB,X
05730          PHA
05740          TYA
05750          RTS
05760 ------------------------------
05770 .27      JMP BIGST
05780 ------------------------------
05790 VECTAB   .DA FUNC1-1
05800          .DA FUNC2-1
05810          .DA FUNC3-1
05820          .DA FUNC4-1
05830          .DA FUNC5-1
05840          .DA FUNC6-1
05850 ------------------------------
05860 FUNC1    PHA
05870          LDA PVERIFY  ;VERIFY ON/OFF
05880          EOR #$80
05890          STA PVERIFY
05900          PLA
05910          JSR PARSET
05920          JMP MENUEKEY
05930 ------------------------------
05940 FUNC2    PHA
05950          INC PRETRY  ; RERIES
05960          LDA PRETRY
05970          CMP #5  ;MAX 5 RETRIES
05980          BCC .1
05990          LDA #0
06000          STA PRETRY
06010 .1       PLA
06020          JSR PARSET
06030          JMP MENUEKEY
06040 ------------------------------
06050 FUNC3    PHA
06060          LDA PCHANGE ; AUTOMATIC COPY
06070          EOR #$80
06080          STA PCHANGE
06090          PLA
06100          JSR PARSET
06110          JMP MENUEKEY
06120 ------------------------------
06130 FUNC4    JMP MENUEKEY  ; TRACK ANALYSING MODE SELECT :
06140 ------------------------------
06150 FUNC5    PHA     ; CHANGE SOURCE DRIVE
06160          INC PSOURCE
06170          LDA PSOURCE
06180          JSR SELDRV
06190          BCC .1
06200          LDA #1
06210          STA PSOURCE
06220 .1       PLA
06230          JSR PARSET
06240          JMP MENUEKEY
06250 ------------------------------
06260 FUNC6    PHA    ;CHANGE DESTINATION DRIVE
06270          INC PDEST
06280          LDA PDEST
06290          JSR SELDRV
06300          BCC .1
06310          LDA #1
06320          STA PDEST
06330 .1       PLA
06340          JSR PARSET
06350          JMP MENUEKEY
06360 ------------------------------
06370 ;"”≈‘⁄‘†ƒ≈Œ†–¡“¡Õ≈‘≈“†¡’∆†ƒ≈Œ†¬…Ô√»…“Õ"
06380 ------------------------------
06390 PARSET   STA VAL  ;TABELLEN POSITION
06400          TAX    ;  IN DEN INDEX
06410          LDY MTAB,X  ; NUN HOLE DIE VERTICAL POSITION AUS DER TABELLE
06420          LDA MTAB2,X  ; HOLE DAS FLAG
06430          LSR     ; SETZE ES IN CARRY
06440          LDX VAL  ; NUN LADE DEN PARAMETER IN DEN ACCU
06450          LDA PVERIFY,X
06460 ;        JMP HMENUE  ; AN SCHIRM AUSGEBEN
06470 ------------------------------
06480 ;"‘»…”†“œ’‘…Œ≈†–’‘”†‘»≈†–¡“¡Õ≈‘≈“”†”‘¡‘’”†œŒ‘œ†«“Æ∞†”√“≈≈Œ"
06490 ;CARRY = 0 AND :
06500 ; ACCU = 0  <=> "NOT AVIABLE"
06510 ; ACCU = 1-$7F  <=> "YES"
06520 ; ACCU = $80-$FF  <=> "NO"
06530 ;
06540 ; CARRY = 1 AND :
06550 ;  ACCU = HEXNUMBER
06560 ;
06570 ;Y REGISTER <=> VERTICAL POSITION
06580 ------------------------------
06590 HMENUE   STY $54  ; SET VERTICAL POSITION
06600          LDY #26  ; HORIZONTAL POSITION
06610          STY $55
06620          BCS .3
06630          TAY     ; REFRESH CPU FLAG'S
06640          BEQ .2
06650          BPL .1
06660          JSR TEXTOUT
06670          .AS 'NO           '
06680          .HX EA
06690          RTS
06700 .1       JSR TEXTOUT
06710          .AS 'YES          '
06720          .HX EA
06730          RTS
06740 .2       JSR TEXTOUT
06750          .DA "NOT AVAILABLE",#$EA
06760          RTS
06770 ------------------------------
06780 .3       JMP PHEXOUT
06790 ------------------------------
06800 ;"≈Ã≈Õ≈Œ‘”†œ∆†–¡“¡Õ≈‘≈“†Ã…”‘†∫"
06810 ------------------------------
06820 PVERIFY  .HX 01
06830 PRETRY   .HX 03
06840 PCHANGE  .HX 81
06850 PTRKAN   .HX 00
06860 PSOURCE  .HX 01
06870 PDEST    .HX 01
06880 VAL      .HX 00
06890 MTAB     .HX 040506070809
06900 MTAB2    .HX 000100000101
06910 ------------------------------
06920 SETSC    LDA #$F
06930          STA VPX
06940          LDA #0
06950          STA HSCNT
06960          STA NOSCROL
06970          LDA #TXT2
06980          STA HSLMS
06990          LDA /TXT2
07000          STA HSLMS+1
07010          RTS

}}}

!COPY.ASM

{{{

00010 ------------------------------
00020          .LION
00030 ;"†√œ–Ÿ†"
00040          .LIOFF
00050 ------------------------------
00060 ;  STAND :  05/11/86'
00070 ------------------------------
00080 ;DRIVE INITIALISATION: SCHICKE
00090 ;COPY ROUTINE NACH $8000
00100 ------------------------------
00110 COPYST   JSR LOCSPEEDY
00120          JSR DRVINIT
00130          JSR TEXTOUT
00140          .AS 'STATUS OK. PRESS <RETURN> '
00150          .HX EA
00160          JSR RETURN
00170 ------------------------------
00180 BIGST    LDA #BIGST
00190          STA $C
00200          LDA /BIGST
00210          STA $D
00220          LDX #$FF
00230          TXS
00240          LDX #20
00250          LDA #0
00260 .1       STA MESSAGE,X
00270          DEX
00280          BPL .1
00290          JSR OPENSCR
00300          JSR SETSC
00310          JSR MENUDL  LABEL "S"
00320          JSR TEXTOUT
00330          .BL 7,$9B
00340          .DA "          (C)  COPY DISK",#$9B
00350          .DA "          (M)    MENUE",#$9B,#$EA
00360 ------------------------------
00370          LDA RDSKSTAT ; IST DIE KOMPLETTE DISKETTE IN DIE RAMDISK GEGANGEN ?
00380          BEQ PH1
00390          JSR TEXTOUT
00400          .DA "          (W)  WRITE FROM",#$9B
00410          .DA "                RAMDISK",#$9B,#$EA
00420 ------------------------------
00430 PH1      JSR GETKEY
00440          CMP #'C
00450          BEQ PH2
00460          CMP #'M
00470          BNE .1
00480          JMP MENUE
00490 .1       CMP #'W
00500          BNE PH1
00510          LDA RDSKSTAT ; IST DIE KOMPLETTE DISKETTE IN DIE RAMDISK GEGANGEN ?
00520          BEQ PH1
00530 ------------------------------
00540 ;SCHREIBE AUS RAMDISK
00550 ------------------------------
00560          LDA #$7D
00570          STA TANDEM
00580          JSR EOUT    ; CLEAR SCREEN
00590          LDA #0
00600          STA RSEC
00610          STA RSEC+1
00620          STA STRACK
00630          LDA #40
00640          STA TRACKNUM
00650          JSR DEST
00660          LDA PDEST
00670          JSR BACKUP
00680          JMP COPYEND
00690 ------------------------------
00700 TANDEM   .HX 00
00710 ------------------------------
00720 ;COPY MIT 1 ODER 2 LAUFWERKEN
00730 ------------------------------
00740 PH2      LDA PSOURCE
00750          CMP PDEST
00760          BNE .1
00770          JMP PH3
00780 .1       LDA #0
00790          STA TANDEM  ; COPY MIT 2 LAUFWERKEN
00800          JSR TEXTOUT
00810          .HX 7D9B9B9B9B9B
00820          .DA "INSERT DISKS, PLEASE   AND HIT RETURN",#$9B,#$EA
00830          JSR RETURNG
00840          LDA #$7D
00850          JSR EOUT
00860          JMP SDRV
00870 ------------------------------
00880 PH3      LDA #1
00890          STA TANDEM
00900          JSR OPENSCR
00910          JSR MENUDL
00920          JSR SOURCE
00930 ------------------------------
00940 ;COPY TEIL 1: DATEN EINLESEN
00950 ;DAS TRACK 0 KOMMANDO WIRD
00960 ;BENUTZT, UM EINE KOPF-POSI-
00970 ;TIONIERUNG ZU VERMEIDEN
00980 ------------------------------
00990 SDRV     LDA PSOURCE ;SOURCE DRIVE
01000          LDX #TRK00  ;SPRUNG VECTOR AUF
01010          LDY /TRK00  ;TRACK 0 EINSPRUNG SETZEN
01020          CLC         ;CARRY = 1 BEDEUTET DIREKTE RUECKMELDUNG VOM LAUFWERK
01030          JSR DRVJMP
01040          LDA #0      ;TRACKREGISTER AUF 0
01050          STA TRACKNUM
01060          STA LTRACK
01070          STA STRACK
01080          STA RSEC
01090          STA RSEC+1
01100 ------------------------------
01110 ; NOTE: TRACKNUM IST DAS
01120 ; AKTUELLE TRACK REGISTER
01130 ; LTRACK UND STRACK MARKIEREN
01140 ; LOWER UND HIGHER TRACK
01150 ; RAMDISKFLG KENNZEICHNET DIE
01160 ; VERWENDETE RAMDISK.
01170 ; RAMDISKFLG=0 BEZEICHNET KEINE         RAMDISK
01180 ; IN DAS RAMDISKFLG SOLLTE KEIN         WERT GELADEN WERDEN, DA
01190 ; SONST DER RECHNER ABSTUERZEN          KOENNTE!
01200 ; UNTER 'RDSKPAR0' SIND DIE PARA        METER WIE FOLGT ABGELEGT:
01210 ;       
01220 ; RDSKPAR0+0/+1 =RAMDISKSECTOR
01230 ; RDSKPAR0+2/+3 =BUFFER.
01240 ------------------------------
01250 L991     JSR ESCCHECK
01260 L88      LDX #SIOT2
01270          LDY /SIOT2
01280          JSR SIOINIT0
01290          JSR ESCCHECK
01300 ------------------------------
01310 ; SIOT2=COM $54 => READ TRACK +         ANALYSIS FUNCTION.
01320 ; MIT:
01330 ; 30A=XSAV, 30B = TRACKNUM              CONSTAT= STATUS OF OPERATION
01340 ------------------------------
01350          LDA TRACKNUM ;XSAV= $30A IST NICHT NOETIG
01360          STA $30B     ;WEIL ES DURCH KOMMANDO $54 GESETZT WIRD
01370          LDA PSOURCE  ;SOURCE DRIVE
01380          STA $301
01390          JSR MAINSIO
01400          BPL .77     ;FEHLER BEI DER AUSFUEHRUNG?
01410          JSR OPENSCR
01420          JSR TEXTOUT
01430          .HX 9B9B9B9B
01440          .AS -' FATAL DRIVE ERROR, PLEASE REBOOT '
01450          .HX EA
01460          LDA #$FF
01470          STA $244
01480          .HX 02
01490 ------------------------------
01500 .77      LDA CONSTAT
01510          BEQ .78
01520          JSR TEXTOUT
01530          .HX 7D9B9B9B9B9B
01540          .DA " DRIVE DOOR NOT CLOSED, <RETURN>",#$9B,#$EA
01550          JSR RETURNG
01560          JMP BIGST
01570 ------------------------------
01580 .78      LDA #0      ;RAMDISK IST MIT DATEN GEFUELLT
01590          STA RDSKSTAT ;SO WIRD ES NICHT GEBRAUCHT
01600 ;
01610          LDX #SIO2TAB ;INIT SIO READ COMMAND
01620          LDY /SIO2TAB
01630          JSR SIOINIT0
01640          LDA PSOURCE  ;SOURCE DRIVE
01650          STA $301
01660          LDA #HEADERWA ;SETZE ARBEITS BUFFER AUF HEADER WORK AREA
01670          STA RDSKPAR0+2
01680          STA $304
01690          LDA /HEADERWA
01700          STA RDSKPAR0+3
01710          STA $305
01720 ------------------------------
01730          LDA #0
01740 .1       PHA
01750          JSR MAINSIO ;UEBERTRAGE DEN LAUFWERKS HEADER BUFFER
01760          LDA #$40    ;ZUM COMPUTER HEADER BUFFER WORK AREA
01770          STA $303    ;REINIT SIO READ STATUS
01780          JSR ADDBUF  ;INCREMENT BUFFER UND SECTOR MIT $80
01790          PLA
01800          TAX
01810          INX
01820          TXA
01830          CPX #3      ;3 PAGES EMPFANGEN?
01840          BCC .1      ;NEIN
01850 ------------------------------
01860 ; DER HEADERBUFFER DES LAUFWERKS        IST JETZT IM COMPUTER ZUR
01870 ; FREIEN AUSWERTUNG. ES SIND ALL        ERDINGS NOCH ALLE DATEN IN
01880 ; DIE RAMDISK ZU SICHERN.
01890 ------------------------------
01900          CLC         ;CARRY=0 - BILDSCHIRM NEU AUFBAUEN
01910          JSR SETPAR0
01920 ;
01930          JSR SPR     ;TEXT "READING"
01940 ------------------------------
01950 ; EINGELESENE HEADERINFO'S              WEITER IN RAMDISK UEBERTRAGEN
01960 ------------------------------
01970          LDA TRACKNUM
01980          ASL
01990          TAY
02000          LDA RSEC
02010          STA RDSKPAR0
02020          STA TRACKTAB,Y ;START SECTOR DER RAMDISK
02030          LDA RSEC+1  ;IN TABELLE EINTRAGEN
02040          STA RDSKPAR0+1
02050          STA TRACKTAB+1,Y
02060 ------------------------------
02070          LDA #3
02080 .2       PHA
02090          LDA #1      ;ACCU=1 - SCHREIBE DATEN IN RAMDISK
02100          CLC
02110          JSR RDSKVER ; RAMDISKVERWALTUNG.
02120          BMI RDERR
02130          JSR ADDBUFR ; INCREMENT PARAMETER
02140          PLA
02150          TAX
02160          DEX
02170          TXA
02180          BNE .2
02190 ------------------------------
02200          LDA FORKEN  ;FORMAT
02210          BEQ INCTRK  ;FORKEN = 0 BEDEUTET UNFORMATIERT
02220          LDA DLEN    ;DATENLAENGE
02230          ORA DLEN+1
02240          BEQ INCTRK
02250 ------------------------------
02260          LDA PSOURCE ;SOURCE DRIVE
02270          JSR LOADREC
02280          BCS RDERR
02290          JMP INCTRK
02300 RDERR    JSR CLRBASE
02310          LDA PSOURCE ;SOURCE DRIVE MOTOR STOPPEN
02320          JSR DEST
02330          LDA PDEST   ;DESTINATION DRIVE
02340          JSR BACKUP
02350          LDA #0
02360          STA RSEC
02370          STA RSEC+1
02380          INC TRACKNUM
02390          LDA TRACKNUM
02400          STA STRACK
02410          JSR SOURCE
02420          JMP L991
02430 INCTRK   INC TRACKNUM
02440          LDA TRACKNUM
02450          CMP #40
02460          BCS SHIT
02470          JMP L88
02480 ------------------------------
02490 SHIT     LDA #$FF    ;RAMDISK USED FLAG SETZEN
02500          STA RDSKSTAT
02510          JSR DEST
02520          LDA PDEST
02530          JSR BACKUP
02540 ------------------------------
02550 COPYEND  LDA PDEST
02560          LDX #MOTOFF
02570          LDY /MOTOFF
02580          SEC
02590          JSR DRVJMP
02600 ------------------------------
02610          LDX #20
02620 .1       LDA MCOPYTERM,X
02630          STA MESSAGE,X
02640          DEX
02650          BPL .1
02660          JSR RETURN
02670          JMP BIGST
02680 ------------------------------
02690 MCOPYTERM
02700      .AT '  COPY TERMINATED   '
02710 ------------------------------
02720 ; BUFFER ZURUECKSCHREIBEN !
02730 ------------------------------
02740 SRCDRV   .HX 00
02750 ------------------------------
02760 ; BACKUP FUNCTION:
02770 ; ---------------
02780 ; INCLUDES :
02790 ; DATA TRANSFER
02800 ; FORMATING / REFORMATING
02810 ; TRACK POSITIONING
02820 ; ERROR MESSAGES
02830 ------------------------------
02840 BACKUP   STA SRCDRV
02850          LDA TRACKNUM ;TRACK NUMMER
02860          STA LTRACK   ;IN VARIABLE SCHREIBEN
02870          LDA STRACK
02880          STA TRACKNUM
02890 .80      LDA TRACKNUM ;SETZE TRACK START SECTOR
02900          ASL          ;IM RAMDISK HANDLER
02910          TAY
02920          LDA TRACKTAB,Y
02930          STA RSEC
02940          LDA TRACKTAB+1,Y
02950          STA RSEC+1
02960 ------------------------------
02970 ; LESE 3 HEADER INFO SEKTOREN
02980 ; AUS DER RAMDISK IN DIE
02990 ; HEADER WORK AREA
03000 ------------------------------
03010          JSR SETSECR
03020          LDA #HEADERWA
03030          STA RDSKPAR0+2
03040          LDA /HEADERWA
03050          STA RDSKPAR0+3
03060          JSR ESCCHECK
03070          LDA #3
03080 .2       PHA
03090          LDA #0      ;ACCU=1 READ
03100          CLC
03110          JSR RDSKVER ;RAMDISKVERWALTUNG
03120 ------------------------------
03130 ;NOTE :
03140 ;NACH AUFRUF DER RDSVER FUNK-
03150 ;TION KANN EIN FEHLER AUFTRETEN
03160 ;DIESER FEHLER ENSTEHT DURCH
03170 ;DISK READ!
03180 ------------------------------
03190          JSR ADDBUFR ;INCREMENT PARAMETER
03200          PLA
03210          TAX
03220          DEX
03230          TXA
03240          BNE .2
03250          SEC         ;SETPAR0 OHNE BILDSCHIRM AUFBAU
03260          JSR SETPAR0
03270          JSR SPW     ;TEXT "WRITING"
03280 ------------------------------
03290          LDA FORKEN  ;TESTE FORMAT
03300          BNE .1      ;FORMATIERT!
03310 ------------------------------
03320 ;PROGRAMM NACHSCHREIBEN
03330 ------------------------------
03340          LDX #SIOT6  ;REFORMAT TRACK
03350          LDY /SIOT6
03360          JSR SIOINIT0
03370          LDA SRCDRV
03380          STA $301
03390          LDA TRACKNUM
03400          STA $30B
03410          JSR MAINSIO
03420          JMP .4
03430 ------------------------------
03440 ;TRACKNUMBER AT $30B
03450 ------------------------------
03460 .1       LDX #SIOT   ;SIO WRITE COMMAND
03470          LDY /SIOT
03480          JSR SIOINIT0
03490          LDA SRCDRV
03500          STA $301
03510          LDA #HEADERWA ;SETZE WORK AREA
03520          STA $304
03530          STA RDSKPAR0+2
03540          LDA /HEADERWA
03550          STA $305
03560          STA RDSKPAR0+3
03570          LDA #HEADBUF
03580          STA $30A
03590          LDA /HEADBUF
03600          STA $30B
03610          LDA #3
03620 .20      PHA
03630          JSR MAINSIO
03640          LDA #$80    ;REINIT
03650          STA $303    ;WRITE
03660          JSR ADDBUF  ;CALC. BUF
03670          PLA
03680          TAX
03690          DEX
03700          TXA         ;3 SECTOREN
03710          BNE .20     ;UEBERTRAGEN?
03720 ------------------------------
03730 ; HEADER INFO KOPIERT
03740 ; TEST, OB DATEN IM BUFF=0
03750 ------------------------------
03760          LDA DLEN    ;MIT Z=0
03770          ORA DLEN+1  ;=>DLEN=0
03780          BEQ .4
03790          LDA SRCDRV
03800          JSR SAVREC
03810 .55      LDX #SIOT5  ;SCHREIBE TRACK FUNKTION
03820          LDY /SIOT5
03830          JSR SIOINIT0
03840          LDA SRCDRV  ;SELECT DRIVE
03850          STA $301
03860          LDA FORKEN
03870          STA $30A
03880          LDA TRACKNUM
03890          STA $30B
03900          JSR MAINSIO  ;FROM BUF
03910          JSR ERRSYS
03920          BCC .5
03930          LDA #0
03940          STA CONSTAT
03950 ------------------------------
03960 .5       LDA CONSTAT
03970          BNE .55
03980 .4       INC TRACKNUM
03990          LDA TRACKNUM
04000          CMP LTRACK  ; STRACK IST UM EIN BYTE ZU GROSS !
04010          BCC .92     ; DARUM SPRINGE ICH AUF BCC !
04020          DEC TRACKNUM
04030          RTS
04040 .92      JMP .80
04050 ------------------------------
04060 MFORM1   .AT ' FATAL WRITE ERROR  '
04070 MFORM2   .AT 'ILLEGAL FORMAT ERROR'
04080 MFORM3   .AT 'ERROR DURING WRITING'
04090 MFORM4   .AT '   VERIFY  ERROR    '
04100 ;
04110 WTAB     .DA MFORM1,MFORM2,MFORM3,MFORM4
04120 ------------------------------
04130 ERRSYS   LDX CONSTAT
04140          CLC
04150          BEQ .2
04160          DEX
04170          TXA
04180          ASL
04190          TAX
04200          LDA WTAB,X
04210          STA DISPLAY
04220          LDA WTAB+1,X
04230          STA DISPLAY+1
04240          LDY #20
04250 .1       LDA (DISPLAY),Y
04260          STA MESSAGE,Y
04270          DEY
04280          BPL .1
04290          JSR RETURNG
04300          LDA CONSTAT
04310          CMP #1
04320          CLC
04330          BEQ .2
04340          SEC
04350 .2       RTS
04360 ------------------------------
04370 ESCCHECK LDA $2FC
04380          CMP #$1C
04390          BEQ .1
04400          CMP #$FF
04410          RTS
04420 .1       LDA #$FF
04430          STA $2FC
04440          LDX #$FF
04450          TXS
04460          JMP BIGST
04470 ------------------------------
04480 MREAD
04490      .AT '      READING       '
04500 MWRITE
04510      .AT '      WRITING       '
04520 ------------------------------
04530 SPR      LDX #20
04540 .1       LDA MREAD,X
04550          STA MESSAGE,X
04560          DEX
04570          BPL .1
04580          RTS
04590 ------------------------------
04600 SPW      LDX #20
04610 .1       LDA MWRITE,X
04620          STA MESSAGE,X
04630          DEX
04640          BPL .1
04650          RTS
04660 ------------------------------
04670 SOURCE   LDA PDEST
04680          LDX #MOTOFF
04690          LDY /MOTOFF
04700          SEC         ;QUIT
04710          JSR DRVJMP
04720          LDA TANDEM
04730          BNE .3
04740          RTS
04750 .3       LDX #20
04760 .1       LDA MSOURCE,X
04770          STA MESSAGE,X
04780          DEX
04790          BPL .1
04800          LDA PCHANGE
04810          BPL .2
04820          JMP RETURNG
04830 .2       LDA PDEST
04840          LDX #DISKWAIT
04850          LDY /DISKWAIT
04860          SEC
04870          JSR DRVJMP
04880          JMP AUTOM
04890 ------------------------------
04900 STAT     LDA #0
04910          STA $D20A
04920          LDA $D20F
04930          AND #$10
04940          RTS
04950 ------------------------------
04960 AUTOM    JSR STAT
04970          BNE .1
04980 ------------------------------
04990          LDA $2FC
05000          CMP #$1C    ; ESCAPE
05010          BNE AUTOM
05020          LDA #$FF
05030          STA $2FC
05040          LDA #$34
05050          STA $D303
05060 .2       JSR STAT
05070          BEQ .2
05080          LDA #$3C
05090          STA $D303
05100          JMP BIGST
05110 .1       LDA #0
05120          LDX #20
05130 .3       STA MESSAGE,X
05140          DEX
05150          BPL .3
05160          LDX #0
05170 .4       STA $D40A
05180          DEX
05190          BNE .4
05200          RTS
05210 ------------------------------
05220 DEST     LDA PSOURCE
05230          LDX #MOTOFF
05240          LDY /MOTOFF
05250          SEC         ;QUIT
05260          JSR DRVJMP
05270          LDA TANDEM
05280          BNE .3
05290          RTS
05300 .3       LDX #20
05310 .1       LDA MDEST,X
05320          STA MESSAGE,X
05330          DEX
05340          BPL .1
05350          LDA PCHANGE
05360          BMI RETURNG
05370          LDA PDEST
05380          LDX #DISKWAIT
05390          LDY /DISKWAIT
05400          SEC
05410          JSR DRVJMP
05420          JMP AUTOM
05430 ------------------------------
05440 RETURNG  LDA #$FF
05450          STA $2FC
05460 .2       JSR ESCCHECK
05470          BCS .2
05480          JSR GETKEY
05490          CMP #$9B
05500          BNE .2
05510          LDX #20
05520 .3       LDA #0
05530          STA MESSAGE,X
05540          DEX
05550          BPL .3
05560          LDA #$9B
05570          RTS
05580 RETURN   JSR RETURNG
05590          JMP EOUT
05600 ------------------------------
05610 SORTDRV  LDY #1
05620          LDA #0
05630 .1       ORA DRIVES-1,Y
05640          INY
05650          CPY #MAXDRV+1
05660          BCC .1
05670          CMP #0
05680          BNE .2
05690          SEC
05700          RTS
05710 .2       LDX #0
05720          LDY #1
05730 .4       LDA DRIVES-1,Y
05740          BEQ .3
05750          TYA
05760          STA DRIVES,X
05770          INX
05780 .3       INY
05790          CPY #MAXDRV+1
05800          BCC .4
05810          STX FDRV
05820          CLC
05830          RTS
05840 ------------------------------
05850 SIOT7    .HX 0A31014F80
05860          .DA CONFIG
05870          .HX FFFF0C00
05880 CONFIG   .HX 28010012000000
05890          .HX 80FF000000
05900 ------------------------------
05910 SELDRV   CMP FDRV
05920          BCC .1
05930          BEQ .1
05940          SEC
05950          RTS
05960 .1       TAY
05970          LDA DRIVES-1,Y
05980          STA $301
05990          CLC
06000          RTS
06010 ------------------------------
06020 GETKEY   LDA $E425
06030          PHA
06040          LDA $E424
06050          PHA
06060          RTS
06070 ------------------------------
06080 ; SAV2 + $80 = BUFFER !
06090 ------------------------------
06100 ADDSEC   INC RSEC
06110          BNE .1
06120          INC RSEC+1
06130 .1       RTS
06140 ------------------------------
06150 CALCS    LDA DLEN    ;ERRECHNE
06160          STA M1      ;DIE AN-
06170          LDA DLEN+1  ;ZAHL DER
06180          STA M2      ;SEKTOREN
06190 ------------------------------
06200 ;(M1,M2)=(DLEN+0,+1) *(1/128)
06210 ;BEMERKUNG:M2 IST SIGNIFICANT!
06220 ------------------------------
06230          ASL M1
06240          ROL M2
06250          RTS
06260 ------------------------------
06270 SETSECBUF LDA #SECBUF
06280          STA $30A
06290          LDA /SECBUF
06300          STA $30B
06310          RTS
06320 ------------------------------
06330 ; DER HEADER BUFFER IST JETZT IN        DIE RAMDISK KOPIERT WORDEN
06340 ; DER HEADER STEHT JETZT ALSO           ZUR WEITEREN VERFUEGUNG OFFEN
06350 ; -HIER WIRD ES JETZT ALS SECTOR         BUFFER GENUTZT.
06360 ------------------------------
06370 LOADREC  PHA
06380          LDX #SIO2TAB ; INIT SIO READ COMMAND.
06390          LDY /SIO2TAB
06400          JSR SIOINIT0
06410          PLA
06420          STA $301
06430 ------------------------------
06440          JSR SETSECBUF ;SETZE COMPUTER POINTER AUF LAUFWERKS BUFFER
06450 ------------------------------
06460          JSR SETSECR   ;IN RAMDISK PARAMETERLISTE UEBERTRAGEN !
06470 ------------------------------
06480          JSR CALCS   ;ERECHNE DATENLAENGE AUS DER ANZAHL DER SEKTOREN
06490 ------------------------------
06500          LDA $D301   ;WERT $D301 SICHERN
06510          PHA
06520 .3       LDA #1      ;SCHREIBE RAMDISK
06530          SEC         ;GET BANK & BUFFER DATA ONLY
06540          JSR RDSKVER
06550          BMI LRERR
06560          STX $304
06570          STY $305
06580          JSR MAINSIO
06590 ------------------------------
06600          LDA #$40    ;READ
06610          STA $303    ;STATUS
06620          JSR INCBUF  ;CALC $30A,$30B
06630          JSR ADDSEC
06640          JSR SETSECR
06650 ------------------------------
06660          DEC M2
06670          BNE .3
06680          PLA
06690          STA $D301
06700          CLC
06710          RTS
06720 ------------------------------
06730 LRERR    PLA
06740          STA $D301
06750          SEC
06760          RTS
06770 ------------------------------
06780 SAVREC   PHA
06790          LDX #SIOT
06800          LDY /SIOT
06810          JSR SIOINIT0
06820          PLA
06830          STA $301
06840          JSR SETSECBUF
06850          JSR SETSECR
06860          JSR CALCS
06870 ------------------------------
06880          LDA $D301
06890          PHA
06900 .30      LDA #0      ;LESE RAMDISK
06910          SEC
06920          JSR RDSKVER
06930          STX $304
06940          STY $305
06950 ------------------------------
06960          JSR MAINSIO
06970          LDA #$80    ;RESTORE SIO
06980          STA $303    ;SCHREIBE STATUS
06990          JSR INCBUF
07000          JSR ADDSEC
07010          JSR SETSECR ;UEBERTRAGE VON RSEC IN DIE PARAMETER LISTE
07020 ------------------------------
07030          DEC M2
07040          BNE .30
07050          PLA
07060          STA $D301
07070          CLC
07080          RTS
07090 ------------------------------
07100 ;BEMERKUNG:
07110 ;DIE SETPAR0 ROUTINE LEGT JETZT        AUCH DIE STATI-WERTE AUF DAS
07120 ;DAS DISPLAY.
07130 ------------------------------
07140 PAR      .HX 00
07150 YS0      .HX 00
07160 YS1      .HX 00
07170 SET      LDA #HEADERWA
07180          STA DISPLAY
07190          LDA /HEADERWA
07200          STA DISPLAY+1
07210          RTS
07220 ------------------------------
07230 PSET     ORA PAR
07240          STA PAR
07250          RTS
07260 ------------------------------
07270 OTAB     .HX 00000000
07280 ------------------------------
07290 ; AN DIESER STELLE MUESSEN DIE          LAUFWERKSPARAMETER IN DEN
07300 ; HEADERBUFFER EINGEBLENDET             WERDEN.
07310 ;
07320 ; HEADBUF+ $17B IST DANN DIE BEL        EGUNG DER EINZELNEN BIT'S :
07330 ; 
07340 ; VERIFY         =>  BIT 7
07350 ; TRACKANALYZING =>  BIT 6
07360 ; RETRIES        =>  BIT 0,1,2.
07370 ------------------------------
07380 SETPAR0  PHP
07390          LDA PRETRY
07400          AND #7
07410          STA PAR
07420          LDA PVERIFY
07430          AND #$80
07440          JSR PSET
07450          LDA PTRKAN
07460          LSR
07470          AND #$40
07480          JSR PSET
07490          LDA PAR
07500          EOR #$F8
07510          STA PAR
07520          JSR SET
07530          LDY #$FF    ;TESTE
07540          LDA (DISPLAY),Y ;FORMAT
07550          STA FORKEN
07560          BNE .1
07570 ------------------------------
07580          PLP
07590          BCS .2
07600          LDA #1      ;BEI UNFORMATIERTEM TRACK
07610 .0       PHA         ;WIRD DAS '!' AUF DEM BILDSCHIRM AUSGEGEBEN
07620          TAX
07630          LDA #1
07640          LDY TRACKNUM
07650          JSR PUTBASE
07660          PLA
07670          TAX
07680          INX
07690          TXA
07700          CMP #19     ;DIESER ZAEHLER LAEUFT BIS
07710          BCC .0      ;SEKTOR 18 ERREICHT IST
07720 ------------------------------
07730          JMP NS
07740 .1       PLP         ;WRITE COMMAND?
07750 .2       BCS NW
07760          LDA #0
07770          STA YS0
07780          STA YS1
07790 L3S      JSR SET
07800          LDY YS0
07810          LDA (DISPLAY),Y ; ID STATUS
07820          PHA
07830          INY
07840          LDA (DISPLAY),Y
07850          PHA         ;TRACK
07860          INY
07870          INY
07880          LDA (DISPLAY),Y ;SECTOR
07890          PHA
07900          INC DISPLAY+1 ;GET SECTOR
07910          LDY YS1     ;STATUS
07920          LDA (DISPLAY),Y
07930          PHA
07940          LDX #3
07950 .4       PLA
07960          STA OTAB,X
07970          DEX
07980          BPL .4
07990 ------------------------------
08000 ; ALLE WICHTIGEN DATEN FUER             EINEN SEKTOR SIND JETZT
08010 ; IM LABEL OTAB VORHANDEN.
08020 ; Y=TRACK , X=SECTOR , A=STATUS
08030 ------------------------------
08040          LDA OTAB
08050          ORA OTAB+3
08060          BNE OK
08070          LDA #$A
08080          LDX OTAB+2
08090          LDY OTAB+1
08100          JSR PUTBASE
08110          JMP OK1
08120 OK       LSR
08130          LSR
08140          CLC
08150          ADC #$10
08160          LDX OTAB+2
08170          LDY OTAB+1
08180          JSR PUTBASE
08190 OK1      INC YS1
08200          LDA YS0
08210          CLC
08220          ADC #7
08230          STA YS0
08240          CMP FORKEN
08250          BCC L3S
08260 NS       JSR SET
08270          INC DISPLAY+1
08280          LDY #$7E    ;GET DATEN
08290          LDA (DISPLAY),Y ;LAENGE
08300          STA DLEN
08310          INY
08320          LDA (DISPLAY),Y
08330          STA DLEN+1
08340          RTS
08350 ------------------------------
08360 NW       LDY TRACKNUM
08370          LDX #19
08380          LDA #$80
08390          JSR PUTBASE
08400          JMP NS
08410 ------------------------------
08420 TEXTOUT  PLA
08430          STA $0
08440          PLA
08450          STA $1
08460 .2       LDY #1
08470          LDA ($0),Y
08480          INC $0
08490          BNE .3
08500          INC $1
08510 .3       CMP #$EA
08520          BEQ .4
08530          JSR EOUT
08540          JMP .2
08550 .4       JMP ($0)
08560 ------------------------------
08570 COMT0    .DA #$54,SDRV0
08580 COMT1    .DA #$55,SDRV1
08590 COMT2    .DA #$56,REFORM
08600 ------------------------------
08610 SIOT     .HX 0C31015080  COM50
08620          .DA BEGIN
08630          .HX FFFF80000080
08640 ------------------------------
08650 SIOT1    .HX 0A31014C01  COM4C
08660          .DA $8000
08670          .HX FFFF0000
08680 ------------------------------
08690 SIOT2    .HX 0A31015440  COM54
08700          .DA CONSTAT
08710          .HX FFFF0100
08720 ------------------------------
08730 SIOT3    .HX 0A31014180  COM41
08740          .DA $3000
08750          .HX FFFF0300
08760 ------------------------------
08770 SIOT5    .HX 0A31015540  COM55
08780          .DA CONSTAT
08790          .HX FFFF0100
08800 ------------------------------
08810 SIOT6    .HX 0A31015600  COM56
08820          .DA $3000
08830          .HX FFFF0000
08840 ------------------------------
08850 SIO2TAB  .HX 0C31015240  COM52
08860          .DA CBUF
08870          .HX FFFF8000
08880          .DA HEADBUF
08890 ------------------------------
08900 CONSTAT  .HX 00
08910 ------------------------------
08920 SIOINIT0 STX SAV1
08930          STY SAV1+1
08940          LDY #0
08950          LDA (SAV1),Y
08960          TAY
08970 .1       LDA (SAV1),Y
08980          STA $300-1,Y
08990          DEY
09000          BNE .1
09010          RTS
09020 ------------------------------
09030 DRVJMP   PHA         ;SAV DRIVE No
09040          PHP
09050          STX $30A    ;SETZE SPRUNG
09060          STY $30B    ;ADRESSE
09070          LDX #SIOT1
09080          LDY /SIOT1
09090          JSR SIOINIT0 ;INIT SIO
09100          PLP
09110          BCC .1
09120          LDA #$4D
09130          STA $302
09140 .1       PLA         ;GET DRIVE
09150          STA $301    ;SET No.
09160 ------------------------------
09170 MAINSIO  LDA #$40
09180          STA $10
09190          STA $D20E
09200          JMP $400
09210 ------------------------------
09220 ; COMMAND INITILIZE ROUTINE
09230 ------------------------------
09240 COMINIT  PHA         ;RETTE A
09250          TXA         ; X
09260          PHA         ; UND
09270          TYA         ; Y
09280          PHA         ;AUF STACK
09290          LDX #SIOT3  ;INIT SIO
09300          LDY /SIOT3  ;MIT
09310          JSR SIOINIT0 ;CMD $41
09320 ------------------------------
09330          PLA
09340          STA $305
09350          PLA
09360          STA $304
09370          PLA
09380          STA $301   ;DRV NO
09390          JSR MAINSIO
09400          LDA $301
09410          RTS
09420 ------------------------------
09430 ; BILDSCHIRM AUSGABE
09440 ------------------------------
09450 EOUT     TAY
09460          LDA $E407
09470          PHA
09480          LDA $E406
09490          PHA
09500          TYA
09510          RTS
09520 ------------------------------
09530 ; HEXOUT GIBT ZWEI HEXADEZIMAL
09540 ; ZAHLEN AUS. DAS BYTE MUSS IM
09550 ; ACCU STEHEN
09560 ------------------------------
09570 PHEXOUT  PHA         ;RETTE BYTE
09580          LSR         ;MULTIPLIZIERE
09590          LSR         ;DEN
09600          LSR         ;WERT
09610          LSR         ;4 MAL
09620          JSR HEXOUT0
09630          PLA
09640          AND #$F
09650 HEXOUT0  CMP #10     ;0-9?
09660          BCC .1      ;JA
09670          ADC #6      ;MUSS A-F
09680 .1       CLC
09690          ADC #$30    ;LESE ASCII
09700          JMP EOUT    ;AUSGABE
09710 ------------------------------
09720 ; INITIAL FLAG TELLS NOT TO
09730 ; PROGRAMM THE DRIVE ANY MORE
09740 ------------------------------
09750 ADDBUF   LDA $304
09760          EOR #$80
09770          STA $304
09780          BMI INCBUF
09790          INC $305
09800 INCBUF   LDA $30A
09810          EOR #$80
09820          STA $30A
09830          BMI .2
09840          INC $30B
09850 .2       RTS
09860 ------------------------------
09870 OPENSCR  JSR OPENE
09880          LDA #1
09890          STA $2F0
09900          JSR TEXTOUT
09910          .HX 7DEA
09920          RTS
09930 ------------------------------
09940 OPENE    LDA $E401
09950          PHA
09960          LDA $E400
09970          PHA
09980          RTS
09990 ------------------------------
10000 ; ADDBUFFER ROUTINE :
10010 ------------------------------
10020 ADDBUFR  LDA RDSKPAR0+2
10030          CLC
10040          ADC #$80
10050          STA RDSKPAR0+2
10060          BCC .1
10070          INC RDSKPAR0+3
10080 ------------------------------
10090 .1       INC RSEC
10100          BNE SETSECR
10110          INC RSEC+1
10120 ------------------------------
10130 SETSECR  LDA RSEC
10140          STA RDSKPAR0
10150          LDA RSEC+1
10160          STA RDSKPAR0+1
10170          RTS
10180 ------------------------------
10190 TRACKTAB .BL 80,0
10200 RSEC     .HX 0000
10210 ------------------------------
10220 HEADERWA .BL $180,0  ; HEADER WORK AREA
10230 ------------------------------
10240 ; $180 BYTES FREIER ARBEITSSPEICHER FUER DEN TRACK
10250 ------------------------------
10260 DRIVES   .HX 00000000

}}}

!INIT.ASM

{{{

00010 ------------------------------
00020          .LION
00030 ;"†…Œ…‘†"
00040          .LIOFF
00050 ------------------------------
00060 ; STAND :  25/11/86
00070 ------------------------------
00080 DRVIX    RTS
00090 DRVINIT  LDA #1      ;DRIVE 1
00100          STA DRVSEL
00110 .2       LDA DRVSEL
00120          JSR SELDRV  ;CONVERT TO PHYSICAL DRIVE NUMBER
00130          BCS DRVIX   ;ERROR ?
00140          PHA         ;SAVE NO.
00150          LDX #0      ;KALTSTART
00160          LDY #$FF    ;AUF SELEKTIERTEM LAUFWERK
00170          SEC         ;X,Y CONTAINS JUMP ADR
00180          JSR DRVJMP  ;C=1 MEANS IMMIDEATE QUIT
00190 ------------------------------
00200          LDY #$57    ;JUST WAIT THAT DRIVE
00210          LDX #0      ;COMES UP
00220 .41      STA $D40A
00230          DEX
00240          BNE .41
00250          DEY
00260          BNE .41
00270          LDX #SIOT7  ;INITIALIZE SIO FOR COMMAND $4F.
00280          LDY /SIOT7  ;DRIVE CONFIGURATION TAB CONTAINS THE FOLLOWING
00290          JSR SIOINIT0 ;PARAMETER:
00300          PLA         ;SINGLE DENSITY / 40 TRACK
00310          PHA         ;18 SECTORS     / 128 BYTES PER SECTOR
00320          STA $301
00330          JSR MAINSIO ;EXECUTE COMMAND
00340 ------------------------------
00350 ;"‘“¡Œ”∆≈“≈†‘»≈†√œ–Ÿ†Õ¡√»…Œ≈†“œ’        ‘…Œ≈†‘œ†ƒ“…÷≈Æ"
00360 ------------------------------
00370          LDX #SIOT
00380          LDY /SIOT
00390          JSR SIOINIT0
00400          PLA
00410          PHA
00420          STA $301
00430          LDA #0
00440 .40      PHA
00450 .45      LDA #$80
00460          STA $303
00470          JSR MAINSIO
00480          BMI .45
00490          JSR ADDBUF
00500          PLA
00510          TAX
00520          INX
00530          TXA
00540          CMP #17  ; TEST IF 5 PAGES ARE SEND.
00550          BCC .40
00560 ------------------------------
00570 ; NOW WRITE THE COMMANDS INTO DRIVE'S COMMAND TABLE:
00580 ;
00590 ; COM. $54 DRIVE ANALYSIS READ
00600 ; COM. $55 DRIVE ANALYSIS WRITE
00610 ; COM. $56 REFORMAT TRACK
00620 ------------------------------
00630          PLA
00640          PHA
00650          LDX #COMT0
00660          LDY /COMT0  ; INIT :
00670          JSR COMINIT  ; SDRV0
00680          LDX #COMT1
00690          LDY /COMT1
00700          JSR COMINIT  ; SDRV1
00710          LDX #COMT2
00720          LDY /COMT2
00730          JSR COMINIT  ; REFORM
00740          PLA
00750          PHA
00760          LDX #ACTIVATE
00770          LDY /ACTIVATE
00780          SEC
00790          JSR DRVJMP
00800 ------------------------------
00810          JSR TEXTOUT
00820          .AS "DRIVE $"
00830          .HX EA
00840          PLA
00850          JSR PHEXOUT
00860          JSR TEXTOUT
00870          .DA " INITIALIZED",#$9B,#$9B,#$EA
00880          INC DRVSEL
00890          JMP .2
00900 ------------------------------
00910 LOCSPEEDY LDA #1
00920          STA DRVSEL  ;DRV = 1
00930          JSR TEXTOUT
00940          .HX 9B9BEA
00950 ------------------------------
00960 ;"Ãœ√¡‘≈†”–≈≈ƒŸ†ƒ“…÷≈"
00970 ------------------------------
00980          LDA BASE
00990          STA LMS
01000          LDA BASE+1
01010          STA LMS+1
01020 .1       LDX #SIOT1  ; INIT
01030          LDY /SIOT1  ; JMP COM.
01040          JSR SIOINIT0  ; TO SIO
01050          LDA #SENDC
01060          STA $30A
01070          LDA /SENDC
01080          STA $30B
01090          LDA #0      ; MIN.
01100          STA $306   ; TIMEOUT
01110          LDA DRVSEL
01120          STA $301
01130          JSR MAINSIO
01140          BPL .2
01160          LDA #0
01170          LDY DRVSEL
01180          STA DRIVES-1,Y
01190          BPL .3      =JMP
01200 ------------------------------
01210 .2       JSR TEXTOUT
01220          .AS "DRIVE $"
01230          .HX EA
01240          LDA DRVSEL
01250          JSR PHEXOUT
01260          JSR TEXTOUT
01270          .DA " IS SPEEDY ",#$9B,#$EA
01280          LDA #$10
01290          LDY DRVSEL
01300          STA DRIVES-1,Y
01310 ------------------------------
01320 .3       INC DRVSEL
01330          LDA DRVSEL
01340          CMP #MAXDRV+1  DRV=4
01350          BCC .1
01360 ------------------------------
01370          JSR SORTDRV
01380          BCC .5
01390          JSR TEXTOUT
01400          .DA "SORRY , NO SPEEDY LOCATED,",#$9B
01410          .DA "... CANNOUT CONTINUE",#$EA
01420 .99      JMP .99
01430 ------------------------------
01440 .5       JSR TEXTOUT
01450          .HX 9BEA
01460          RTS

}}}

!DRIVE.ASM

{{{

00010 ------------------------------
00020          .LI ON
00030 ;"†ƒ“…÷≈†"
00040          .LI OFF
00050 ------------------------------
00060 ------------------------------
00070 ;FOLGENDE LAUFWERKSFUNKTIONEN
00080 ;SIND ENTHALTEN:
00090 ;1.EINLESEN DER SECTOR ID'S
00100 ;  EINES TRACK'S
00110 ;2.EINLESEN DER DATENFELDER
00120 ;3.TABELLIERUNG DER STATI
00130 ;4.FORMATIERUNG MITTELS
00140 ;  INTERLEAVING
00150 ;5.SCHREIBEN DER DATENFELDER
00160 ;  UND IHRER STATI
00170 ;
00180 ; STAND:  26/11/86'
00190 ------------------------------
00200          .OR $8000
00210 SDRV0    JSR SEM0
00220          LDA XSAV
00230          STZ STBUF   ; CLEAR DRIVE STATUS
00240          JSR TSTWRP
00250          AND #$80    ; KLAPPE OFFEN ?
00260          BNE .1      ; FEHLER !
00270          LDX #2      ; ANZAHL RETRYS
00280 .13      PHX
00290 ------------------------------
00300          JSR READH
00310          JSR CONRES
00320          JSR MOVE
00330 ------------------------------
00340 ;TEST AUF 18 HEADER
00350 ------------------------------
00360          PLX
00370          DEX
00380          BEQ .12
00390          LDA XSAV
00400          CMP #$7F    =18*7+1
00410          BNE .13
00420 ------------------------------
00430 .12      JSR RDSEC
00440 ------------------------------
00450          JMP SEM1
00460 ------------------------------
00470 ;STBUF=STATUS,DER ZUM COMPUTER         GEHT.
00480 ------------------------------
00490 .1       LDA #1
00500          STA STBUF
00510          JMP SEM1
00520 ------------------------------
00530 ;CRC ERROR IM DATENFELD ENTD.
00540 ------------------------------
00550 .2       JSR SPECVERI
00560          LDA #$80
00570          STA HEADBUF+$17D
00580          JMP SEM1
00590 ------------------------------
00600 STBUF    .HX 00
00610 ------------------------------
00620 ; MODUL SCHREIBEN :
00630 ------------------------------
00640 SDRV1    JSR SEM0
00650          STZ STBUF   ; CLEAR DRIVE STATUS
00660          LDA #20     ; GAPLAENGE ZWISCHEN DATEN UND
00670          STA FGAP    ; ID FIELD (SECTOR/SECTOR)
00680 ------------------------------
00690          JSR MOTON
00700          JSR TSTWRP  ; TEST OB KLAPPE OFFEN ODER WRITE PROTECT
00710          BNE .1      ; FEHLER !
00720 ------------------------------
00730 ; ICH GEHE DAVON AUS,DAS ES             MOEGLICH IST ,
00740 ; 19 SEKTOREN (MIT DATEN) IN            EINEM TRACK ZU FORMATIEREN.
00750 ; DAZU WERDEN DIE GAPS AUF EIN          MINIMUM GEKUERZT.
00760 ; ES BLEIBT ZU TESTEN:
00770 ; 
00780 ; >KOENNEN DANN IN EINER UMDREHU         NG ALLE ERFORDERLICHEN
00790 ;  DATEN ZURUECK-GESCHRIEBEN             WERDEN ?
00800 ; >WIRD BEI JEDEM LAUFWERK RICHT         IG FORMATIERT
00810 ------------------------------
00820          LDA HEADBUF+$17F ;  HILEN
00830          CMP #9
00840          BCC .3
00850          BEQ .2
00860          BCS .4      ; AETZER FORMAT !
00870 .2       LDA HEADBUF+$17E ;  LOLEN
00880          BEQ .3
00890 ------------------------------
00900 ;BEQ ID.NORMALFORMAT $900 BYTES
00910 ------------------------------
00920          LDA #10     ;ENGERES FORMAT !
00930          STA FGAP
00940 .3       LDA HEADBUF+$17B ;  FORMAT RETRIES
00950          AND #7
00960 .31      PHA
00970          JSR WTRACK  ; FORMAT TRACK FUNCTION
00980          PLA
00990          BCC .32     ; ERROR DURING FORMAT ?
01000          DEA
01010          BNE .31     ; NO MORE RETRIES !
01020          BEQ .4      ; FORMAT ERROR
01030 .32      LDA HEADBUF+$17B ; WRITE RETRIES
01040          AND #7
01050 .33      PHA
01060          JSR WRSEC
01070          PLA
01080          BCC .34
01090          DEA
01100          BNE .33
01110          BEQ .44     ; WRITE ERROR (TIMEOUT)
01120          LDA HEADBUF+$17B ; VERIFY ON?
01130          BPL .34
01140          JSR VERIFY
01150          BCS .45
01160 .34      JMP SEM1
01170 ------------------------------
01180 .45      LDA #4  ;VERIFY ERRROR
01190          .HX 2C      =BIT ABS.
01200 .44      LDA #3   ; WRITE ERROR
01210          .HX 2C      =BIT ABS.
01220 .4       LDA #2   ; ILLEGAL FORMAT ERROR
01230          .HX 2C      =BIT ABS.
01240 .1       LDA #1   ; FATAL ERROR
01250          STA STBUF
01260          ORA #$F0
01270          JSR HEXOUT
01280          JMP SEM1    ; SEND ERROR ?!
01290 ------------------------------
01300 FGAP     .HX 14
01310 ------------------------------
01320 ;HIER BEGINNEN DIE DIENST              ROUTINEN
01330 ------------------------------
01340 RDSEC    LDY #0    ;SET PAR
01350          STY CSEC  ;TO ZERO
01360          STY YSAV
01370          LDA #SECBUF ;SET BUFFER
01380          STA $19     ;POINTER
01390          LDA /SECBUF
01400          STA $1A
01410          LDA XSAV
01420          BNE .2
01430          RTS
01440 ------------------------------
01450 .2       LDY YSAV
01460          LDA HEADBUF+3,Y ;SET
01470 ------------------------------
01480          JSR RDSEC1
01490 ------------------------------
01500          LDY CSEC
01510          STA HEADBUF+$100,Y
01520          INC CSEC
01530          AND #$10
01540          BNE .1
01550 ------------------------------
01560          LDA $19    ;INC BUFFER
01570          EOR #$80
01580          STA $19
01590          BMI .1
01600          INC $1A
01610 .1       LDA YSAV
01620          CLC
01630          ADC #7
01640          STA YSAV
01650          CMP XSAV
01660          BCC .2
01670          LDA $19
01680          STA HEADBUF+$17E
01690          LDA $1A
01700          SEC
01710          SBC /SECBUF
01720          STA HEADBUF+$17F
01730          LDA CSEC
01740          STA TSEC
01750          RTS
01760 ------------------------------
01770 ;DIE FUNKTION SORTIERT DEN
01780 ;HEADERBUFFER UM, DAMIT EINE
01790 ;ERHOEHTE GESCHWINDIGKEIT
01800 ;BEIM SEKTORLESEN ERZIEHLT WIRD
01810 ------------------------------
01820 VAL2     .HX 00
01830 ------------------------------
01840 MOVE     LDY HEADBUF+$FF ; ZUNAECHST
01850          CPY #21  ;TESTE , OB DREI HEADER (3*7) VORHANDEN
01860          BCC MVERR
01870          LDX #0
01880 ------------------------------
01890 .1       LDA HEADBUF,X ; MOVED 14 BYTES AUF DEN STACK !
01900          PHA
01910          INX
01920          CPX #14
01930          BCC .1      ; JETZT LIEGT HEADBUF+13 AUF DEM STACK OBEN
01940          TYA
01950          SEC
01960          SBC #14
01970          STA VAL2
01980 ------------------------------
01990          LDY #0
02000 .2       LDA HEADBUF+14,Y
02010          STA HEADBUF,Y
02020          INY
02030          CPY VAL2
02040          BCC .2
02050 ------------------------------
02060          LDY HEADBUF+$FF
02070          LDX #13
02080 .3       PLA
02090          STA HEADBUF-1,Y
02100          DEY
02110          DEX
02120          BPL .3
02130 MVERR    RTS
02140 ------------------------------
02150 WRBTSL   BVC FORTO
02160 WRBYTS   BIT $280
02170          BPL WRBTSL
02180          STA $403
02190          DEY
02200          BNE WRBYTS
02210          RTS
02220 FORTO    PLA
02230          PLA
02240          SEC
02250          RTS
02260 ------------------------------
02270 WRBTL    BVC FORTO
02280 WRBYTE   BIT $280
02290          BPL WRBTL
02300          STA $403
02310          RTS
02320 ------------------------------
02330 WTRST    LDA #5
02340          STA $29F
02350          LDA #$F8    ;WRITE
02360          STA $400    ;TRACK
02370          LDA #0
02380          LDX #2
02390 .1       BIT $280
02400          BPL .1
02410          STA $403
02420          DEX
02430          BNE .1
02440          LDY #$D0
02450          STY $29F
02460          CLC
02470          RTS
02480 ------------------------------
02490 ; FORMATIERFUNKTION 1.
02500 ------------------------------
02510 WTRACK   STZ CSEC
02520          STZ YSAV
02530 ------------------------------
02540          JSR WTRST
02550 ------------------------------
02560          LDY #80     ; ACCU=0
02570          JSR WRBYTS  ;WRITE 40x
02580          LDA #$FC  ; INDEX MARK
02590          JSR WRBYTE
02600 .1       LDA #$FF
02610          LDY FGAP    ;NORMAL:20
02620          JSR WRBYTS  ; ACCU=00
02630          LDA #0
02640          LDY #5
02650          JSR WRBYTS
02660 ------------------------------
02670          LDA #$FE    ;SECTOR ID
02680          JSR WRBYTE
02690          LDA $D      ; = TRACK
02700          JSR WRBYTE
02710          LDY YSAV
02720          LDA HEADBUF+2,Y ;=SIDE
02730          JSR WRBYTE
02740          LDA HEADBUF+3,Y ; SECTOR
02750          JSR WRBYTE
02760          LDA HEADBUF+4,Y ; SECLEN
02770          JSR WRBYTE
02780 ------------------------------
02790 ;JETZT FOLGEN 2 CRC BYTES !
02800 ------------------------------
02810          LDA HEADBUF,Y
02820          BEQ .2
02830          LDA #$20    ;SET DD
02840          TRB $280
02850 .2       LDA #$F7
02860          JSR WRBYTE
02870          LDA #$20  ;SET SD
02880          TSB $280
02890          LDY #17
02900          LDA #$FF
02910          JSR WRBYTS
02920          LDY CSEC
02930          LDA HEADBUF+$100,Y
02940          AND #$10  ;MASK OUT
02950          BNE .3      ; RNF
02960          LDA HEADBUF+$17D
02970          BNE .31
02980 ------------------------------
02990 ;RAUM FUER DATEN FELD
03000 ------------------------------
03010 .32      LDA #$FB    DATA AM
03020          JSR WRBYTE
03030          LDY #$82    DATA FIELD
03040          LDA #$FF
03050          JSR WRBYTS
03060 ------------------------------
03070 .3       INC CSEC
03080          LDA YSAV
03090          CLC
03100          ADC #7
03110          STA YSAV
03120          CMP XSAV
03130          BCC .1
03140          LDA #1
03150 .11      AND $400
03160          BEQ .12
03170          BIT $280
03180          BPL .11
03190          STZ $403
03200          JMP .11
03210 .12      CLC
03220          RTS
03230 ------------------------------
03240 .31      LDX CSEC
03250          LDA HEADBUF+$120,X
03260          BEQ .32
03270          PHA
03280          LDA #$FB    DATA AM
03290          JSR WRBYTE
03300          PLA
03310          PHA
03320          TAY
03330          LDA #$FF
03340          JSR WRBYTS
03350          LDA #$FB
03360          JSR WRBYTE
03370          PLA
03380          SEC
03390          SBC #$80
03400          EOR #$FF
03410          TAY
03420          INY
03430          LDA #$20
03440          LDX #$F0
03450 .40      BIT $280
03460          BVC .41
03470          BPL .40
03480          STX $403
03490          DEX
03500          DEY
03510          BEQ .42
03520          TRB $280
03530 ------------------------------
03540 .45      BIT $280
03550          BVC .41
03560          BPL .45
03570          STX $403
03580          TSB $280
03590          DEX
03600          DEY
03610          BNE .40
03620 .42      TSB $280
03630          JMP .3
03640 .41      PLA
03650          PLA
03660          SEC
03670          RTS
03680 ------------------------------
03690 ;DIE WRITE - SECTOR ROUTINE HAT        KEIN ABBRUCH-KRITERIUM BEI
03700 ;TIMEOUT ODER RECORD NOT FOUND.
03710 ;DAS HEISST:
03720 ;ABSTURZ BEI ENDLOSSCHLEIFE.
03730 ;KEIN RETRY FLAG.
03740 ------------------------------
03750 WRSEC    STZ CSEC
03760          STZ YSAV
03770          LDA #SECBUF ;SET BUFFER
03780          STA $19    ;POINTER LO
03790          LDA /SECBUF
03800          STA $1A    ;POINTER HI
03810 ------------------------------
03820 .15      LDY #$A8
03830          LDX CSEC    ; INDEX X
03840          LDA HEADBUF+$17D
03850          BEQ .50
03860          LDA HEADBUF+$120,X
03870          BNE .30
03880 .50      LDA HEADBUF+$100,X
03890          ASL      ;NOT READY->C
03900          ASL      ;WR. PROT.->C
03910          ASL      ;C=1 DEL. DAM
03920          BCC .19
03930          INY
03940 ;
03950 .19      ASL         ;RNF->C
03960          BCS .21
03970          ASL        ;CRC ERR->C
03980          PHP        ;SAV CARRY
03990          LDX YSAV
04000          LDA HEADBUF+3,X
04010          STA $402   ;SET SEC.
04020 ------------------------------
04030          STY $400
04040          LDY #0
04050          LDA #$E6    ;SET
04060          STA $29F    ;TIMEOUT
04070 .11      LDA ($19),Y
04080          EOR #$FF
04090 .10      BIT $280
04100          BVC .22     ;TIMEOUT ?
04110          BPL .10     ;DRQ ?
04120          STA $403
04130          INY
04140          BPL .11
04150 ------------------------------
04160 ;$80 BYTES GESCHRIEBEN
04170 ------------------------------
04180          LDA HEADBUF+4,X ;ID
04190          BEQ .12    ;SECLEN=0 ?
04200          JSR CONRES
04210 .12      PLP         ;GET CARRY
04220          BCC .13    ;CRC ERROR?
04230          LDA #$20
04240          TAY
04250          TRB $280
04260 .13      LDA $400
04270          LSR
04280          BCS .13
04290          TYA
04300          TSB $280
04310 ------------------------------
04320 .1       LDA $19
04330          EOR #$80
04340          STA $19
04350          BMI .21
04360          INC $1A
04370 .21      INC CSEC
04380          LDA YSAV
04390          CLC
04400          ADC #7
04410          STA YSAV
04420          CMP XSAV
04430          BCC .15
04440          CLC
04450          RTS
04460 .22      JSR CONRES
04470          PLP
04480          SEC
04490          RTS
04500 ------------------------------
04510 .30      STA ZSAV
04520          LDX YSAV
04530          LDA HEADBUF+3,X
04540          STA $402    ; SECTOR
04550 ------------------------------
04560          LDY #$A8  WRITE SECTOR
04570          STY $400
04580          LDY #0
04590          LDA #$E6   ; SET
04600          STA $29F   ; TIMEOUT
04610 .31      LDA ($19),Y
04620          EOR #$FF
04630 .40      BIT $280
04640          BPL .40     ;DRQ ?
04650          STA $403
04660          INY        ;Y IN RANGE
04670          CPY ZSAV   ;OF 0-$7F !
04680          BCC .31
04690          JSR CONRES
04700          JMP .1
04710 ZSAV     .HX 00
04720 ------------------------------
04730 TRK00    JSR MOTON
04740          JSR TRACK0
04750          STZ $D
04760          JMP SENDC
04770 ------------------------------
04780 ;READSECTOR, ACCU = SECTOR NO
04790 ------------------------------
04800 RDSEC1   STA $402   ; SET SECTOR REGISTER
04810          LDA #$88  ;READ SECTOR
04820          STA $400
04830 ------------------------------
04840          LDY #0
04850          LDA #$E6  ;TIMEOUT
04860          STA $29F
04870 .1       BIT $280
04880          BVC .2
04890          BPL .1
04900          LDA #$A
04910          STA $29F
04920          LDA $403
04930          EOR #$FF
04940          STA ($19),Y
04950          INY
04960 .3       BIT $280
04970          BVC .5
04980          BPL .3
04990          LDA $403
05000          EOR #$FF
05010          STA ($19),Y
05020          INY
05030          BPL .3      ;$80 BYTES
05040          LDA #1
05050 .4       AND $400
05060          BNE .4
05070          LDA $400
05080          AND #$3E
05090          RTS
05100 .2       JSR CONRES
05110          LDA #$10
05120          RTS
05130 .5       JSR CONRES
05140          LDA #4
05150          RTS
05160 ------------------------------
05170 REFORM   JSR SEM0
05180          JSR MOTON
05190          JSR CLRTRA
05200          JMP SENDC
05210 ------------------------------
05220 SEM0     LDA $82
05230          STA XSAV
05240          LDA $83
05250          STA $D
05260          JMP TRACKPO
05270 ------------------------------
05280 SEM1     JSR SENDC
05290          LDA #1
05300          LDX #STBUF
05310          LDY /STBUF
05320          JMP SDBTS
05330 ------------------------------
05340 VERIFYFLG .HX 00
05350 ------------------------------
05360 SPECVERI LDX #$20
05370 .1       STZ HEADBUF+$120,X
05380          DEX
05390          BPL .1
05400          LDA #0
05410          .HX 2C      =BIT ABS.
05420 ------------------------------
05430 VERIFY   LDA #1
05440          STA VERIFYFLG
05450          LDY #0      ;SET PAR
05460          STY CSEC    ;TO ZERO
05470          STY YSAV
05480          LDA #SECBUF ;SET BUFFER
05490          STA $19     ;POINTER
05500          LDA /SECBUF
05510          STA $1A
05520          LDA XSAV
05530          BNE .2
05540          CLC
05550          RTS
05560 .2       LDY CSEC
05570          LDA HEADBUF+$100,Y
05580          AND #$10
05590          BNE .1
05600          LDY YSAV
05610          LDA HEADBUF+3,Y ;  SET
05620          JSR RDSEC2    ; SECTOR
05630          LDA VERIFYFLG  ; CARRY
05640          BEQ .13       ; BLEIBT
05650          BCS .99  ;UNVERAENDERT
05660 ------------------------------
05670 .13      LDA $19    ;INC BUFFER
05680          EOR #$80
05690          STA $19
05700          BCC .1
05710          INC $1A
05720 .1       INC CSEC
05730          LDA YSAV
05740          CLC
05750          ADC #7
05760          STA YSAV
05770          CMP XSAV
05780          BCC .2
05790          CLC
05800          RTS
05810 ------------------------------
05820 .99      SEC
05830          RTS
05840 ------------------------------
05850 RDSEC2   STA $402
05860          LDA #1
05870 .11      AND $400
05880          BNE .11
05890 ------------------------------
05900          LDA #$88
05910          STA $400
05920 ------------------------------
05930          LDY #0
05940          LDA #$FF    ;TIMEOUT
05950          STA $29F
05960 .1       BIT $280
05970          BVC .2
05980          BPL .1
05990          LDA $403
06000          EOR #$FF
06010          CMP ($19),Y
06020          BNE .2
06030          LDA $296  ;STOP TIMER?
06040          INY
06050 .3       BIT $280
06060          BPL .3
06070          LDA $403
06080          EOR #$FF
06090          CMP ($19),Y
06100          BNE .2
06110          INY
06120          BPL .3      ;$80 BYTES
06130          LDA #0
06140          LDY CSEC
06150          STA HEADBUF+$120,Y
06160          JSR CONRES
06170          CLC
06180          RTS
06190 .2       LDX CSEC
06200          TYA
06210          STA HEADBUF+$120,X
06220          JSR CONRES
06230          SEC
06240          RTS
06250 ------------------------------
06260 CRCCHECK LDY #0
06270          STY YSAV
06280          TYA
06290 .1       ORA HEADBUF+$100,Y
06300          INY
06310          CPY TSEC
06320          BCC .1
06330          AND #8
06340          CMP #1    ;IF ZERO C=1
06350          RTS
06360 ------------------------------
06370 ;HEADER LESE FUNKTION:
06380 ------------------------------
06390 READH    LDX #0     ;LOCAL VEC
06400          STX HEADBUF+$17D
06410          STX YSAV   ;GLOBAL VEC
06420 ------------------------------
06430 .2       LDA #$D6
06440          STA $29F
06450 .3       JSR RDHD1 ;GET NEXT HD
06460          BCS .4
06470          TAX
06480          LDA $7A
06490          CMP $D
06500          BNE .3
06510          LDA $7C
06520          BEQ .3
06530          CMP #19
06540          BCS .3
06550          TXA
06560 ------------------------------
06570          JSR SHTAB   ;& COPY HD
06580          JMP .3
06590 ------------------------------
06600 .4       LDY YSAV
06610          BEQ .6
06620          LDA HEADBUF+3
06630          CMP HEADBUF-4,Y
06640          BNE .5
06650          TYA
06660          SEC
06670          SBC #7
06680          TAY
06690          BRA .6
06700 .5       CMP HEADBUF-11,Y
06710          BNE .6
06720          TYA
06730          SEC
06740          SBC #14
06750          TAY
06760 ;
06770 .6       STY XSAV
06780          STY HEADBUF+$FF
06790          RTS
06800 ------------------------------
06810 ;SETZE HEADER UND STATUS IM            HEADERBUFFER :
06820 ;AUFBAU DES PUFFERS:
06830 ;BYTE:0 IST DER STATUS DIESES               HEADERS
06840 ;   1 ENTSPRICHT DEM TRACK
06850 ;   2    "        "  SEITENBYTE
06860 ;   3    "        "  SECTOR
06870 ;   4    "       DER LAENGE                 (NACH IBM STANDARD)
06880 ;   6 1. CRC BYTE
06890 ;   7 2. CRC BYTE
06900 ------------------------------
06910 SHTAB    LDY YSAV  ; GET Y
06920          STA HEADBUF,Y
06930          INY
06940          LDX #$7A
06950 .1       LDA $0,X
06960          STA HEADBUF,Y
06970          INY
06980          INX
06990          BPL .1
07000          STY YSAV
07010          RTS
07020 ------------------------------
07030 ;DRIVE DISPLAY CONTROL
07040 ------------------------------
07050 MEMDOOR  .HX 00
07060 BELL     = $FF99
07070 CLRDSP   = $FF9C
07080 HEXOUT   = $FFA5
07090 DOORCHECK = $FF6F
07100 CNT      .HX 0000
07110 LOOP     = 7
07120 ------------------------------
07130 DISKWAIT STZ $1D     ; LAST DOOR POSITION IS CLOSED
07140          LDA #1
07150          TRB $282   ; DAMIT ERHAELT DER POKEY EIN SERIAL FRAME.
07160          STZ MEMDOOR
07170 ------------------------------
07180 START    JSR CLRDSP
07190          STZ CNT
07200          LDA #LOOP   ;7
07210          STA CNT+1
07220 ------------------------------
07230          LDA #$FF
07240          STA $4002
07250          LDA #$CD
07260          JSR HEXOUT
07270          JSR BELL
07280 ------------------------------
07290 .0       JSR DISKCHECK  ; IST DIE KLAPPE GESCHLOSSEN WORDEN ?
07300          BCS .3     ; C=1 => DISK CHANGE
07310 ------------------------------
07320          JSR ESCTEST  ; IST IM COMPUTER 'ESC' GEDRUECKT ?
07330          BCS .3     ; C=1 => ESCAPE
07340 ------------------------------
07350          DEC CNT
07360          BNE .0
07370          DEC CNT+1
07380          BNE .0
07390 ------------------------------
07400 ;2. SCHLEIFE.
07410 ------------------------------
07420          JSR CLRDSP
07430          STZ CNT
07440          LDA #LOOP   ;7
07450          STA CNT+1
07460 ------------------------------
07470 .1       JSR DISKCHECK  ; IST DIE KLAPPE GESCHLOSSEN WORDEN ?
07480          BCS .3     ; C=1 => DISK CHANGE
07490 ------------------------------
07500          JSR ESCTEST  ; IST IM COMPUTER 'ESC' GEDRUECKT ?
07510          BCS .3     ; C=1 => ESCAPE
07520 ------------------------------
07530          DEC CNT
07540          BNE .1
07550          DEC CNT+1
07560          BNE .1
07570          JMP START
07580 ------------------------------
07590 .3       LDA #1
07600          TSB $282
07610          JMP CLRDSP
07620 ------------------------------
07630 CARRYC   CLC
07640          RTS
07650 CARRYS   SEC
07660          RTS
07670 ------------------------------
07680 DISKCHECK LDA MEMDOOR
07690          BNE .1
07700 ------------------------------
07710 ;LAUFWERKKLAPPE GEOEFFNET?
07720 ------------------------------
07730          JSR DOORCHECK
07740          AND #$80
07750          BEQ CARRYC
07760          STA MEMDOOR
07770 ------------------------------
07780 ;KLAPPE GESCHLOSSEN?
07790 ------------------------------
07800 .1       JSR DOORCHECK
07810          AND #$80
07820          BEQ CARRYS
07830          BRA CARRYC
07840 ------------------------------
07850 ESCTEST  LDA $282
07860          TAX
07870          AND #2
07880          BEQ .1
07890          JMP ($FFFC)
07900 .1       TXA
07910          AND #$80
07920          CMP #$80
07930          RTS
07940 ------------------------------
07950 ACTIVATE LDA #$82    ;SET SD
07960          STA $9      ;FORKEN
07970          STA $A      ;FORKEN2
07980          JSR SDRDDP
07990          LDA #$2C
08000          STA $17     ;STEPTIM
08010          LDA $9F80
08020          STA BEREIT
08030          LDA $9F80+1
08040          STA BEREIT+1
08050          LDA #NORM
08060          STA $9F80
08070          LDA /NORM
08080          STA $9F80+1
08090 ------------------------------
08100 NORM     STZ $1D
08110          LDA $282
08120          AND #2
08130          BNE .1
08140          JMP (BEREIT)
08150 .1       JMP ($FFFC)
08160 ------------------------------
08170 BEREIT   .DA $E100
08180 DRVEND

}}}