
00010 ;SAVE"D:SET.SYN
00020 ;        .LI OFF
00030 ; This program switches the
00040 ; density for one PERCOM
00050 ; compatible drive.  The
00060 ; allowed settings are:
00070 ; S=single, D=double, E=1050.
00080 ; Command format is:
00090 ; SET 1D
00091 ;
00092 ; NOTE: The 1050 format allows
00093 ; you to read or write 1050
00094 ; density disks, but does
00095 ; not allow you to format disks
00096 ; in that density.
00100 ;
00110 ******************************
00120 *  Daniel L. Moore 03/19/84  *
00130 ******************************
00140 ;
00150 DOSVEC   .EQ $A
00160 DOSINIT  .EQ $7E0   FMS v. 2
00170 DENSITY  .EQ $D4 FP register 0
00180 ;
00190 ; OS/A+ equates
00200 CPBUFP   .EQ $A   next char.
00210 CPCMDB   .EQ $3F  command buff.
00220 ; SIO equates
00230 DDEVIC   .EQ $300
00240 DUNIT    .EQ $301
00250 DCOMND   .EQ $302
00260 DSTATS   .EQ $303
00270 DBUFLO   .EQ $304
00280 DBYTLO   .EQ $308
00290 ; Data direction control
00300 IN       .EQ $40
00310 OUT      .EQ $80
00320 ; PERCOM drive table
00330 READ     .EQ $4E
00340 WRITE    .EQ $4F
00350 LENGTH   .EQ 12
00360 FM       .EQ 0  FM recording
00370 MFM      .EQ 4  MFM recording
00380 ;
00390 SIO      .EQ $E459
00400 ;
00410          .OR $4000
00420 ;
00430 START    CLC
00440          LDY #CPBUFP
00450          LDA (DOSVEC),Y
00460          ADC #CPCMDB+1
00470          TAY
00480          LDA (DOSVEC),Y drive #
00490 ; Test for drive 1 to 8.
00500          CMP #'1
00510          BCC DOS
00520          CMP #'9
00530          BCS DOS
00540          CLC
00550          SBC #'0-1
00560          STA DUNIT
00570          LDA #$31
00580          STA DDEVIC
00590 ; Test for S(0), D(1), E(2)
00600          LDX #0
00610          INY
00620          LDA (DOSVEC),Y
00630          CMP #'S
00640          BEQ SETIT
00650          INX
00660          CMP #'D
00670          BEQ SETIT
00680          INX
00690          CMP #'E
00700          BEQ SETIT
00710 DOS      RTS
00720 ;
00730 SETIT    STX DENSITY
00740 ; First read in the current
00750 ; control table.
00760          LDA #IN
00770          STA DSTATS
00780          LDA #READ
00790          STA DCOMND
00800          LDA #LENGTH
00810          STA DBYTLO
00820          LDA #0
00830          STA DBYTLO+1
00840          LDA #TABLE
00850          STA DBUFLO
00860          LDA /TABLE
00870          STA DBUFLO+1
00880          JSR SIO
00890          BMI DOS  exit if error
00900 ; Then modify the control bytes
00910 ; First recording technique
00920          LDA DENSITY
00930          BNE SET.MFM
00940          LDX #FM
00950          BEQ SET
00960 SET.MFM  LDX #MFM
00970 SET      STX TABLE+5
00980 ; Then set the sector length
00990          CMP #1
01000          BEQ S.256
01010          LDX #$80     128 bytes
01020          LDY #$00
01030          BEQ SETLEN
01040 S.256    LDX #$00     256 bytes
01050          LDY #$01
01060 SETLEN   STY TABLE+6  High byte
01070          STX TABLE+7  Low byte
01080 ; Then set the number of
01090 ; sectors per track.
01100          CMP #2
01110          BEQ S.26
01120          LDX #18     18 sectors
01130          BNE SETSECT
01140 S.26     LDX #26     26 sectors
01150 SETSECT  STX TABLE+3
01160 ; Then write the table out.
01170          LDA #OUT
01180          STA DSTATS
01190          LDA #WRITE
01200          STA DCOMND
01210          JSR SIO
01220 ; Init DOS for the current
01230 ; density.
01240          JSR DOSINIT
01250 ; Then return to DOS.
01260          RTS
01270 ;
01280 ; DRIVE table.
01290 TABLE    .EQ *
01300 ;
01310 END      .LI ON
