From c185b536815fec0cb74ae4d0797c5b7441106856 Mon Sep 17 00:00:00 2001 From: freitz85 Date: Wed, 12 Jul 2017 22:23:15 +0200 Subject: [PATCH] R and C changed to SMD --- AppleIISd.asm | 591 ---------------------------------- AppleIISd.s | 591 ++++++++++++++++++++++++++++++++++ Hardware/SD_A2.brd | 772 ++++++++++++++++++++++++++------------------- Hardware/SD_A2.sch | 323 ++++++++++++------- 4 files changed, 1240 insertions(+), 1037 deletions(-) delete mode 100644 AppleIISd.asm create mode 100644 AppleIISd.s diff --git a/AppleIISd.asm b/AppleIISd.asm deleted file mode 100644 index 999c37e..0000000 --- a/AppleIISd.asm +++ /dev/null @@ -1,591 +0,0 @@ -******************************** -* -* Initialize SD card -* -******************************** - - XC - ORG $C800 - -SLOT16 = $2B ; s0 -> slot * 16 -CURSLOT = $07F8 ; Cs -DATA = $C0C0 ; slot 4 -CTRL = DATA+1 -DIV = DATA+2 -SS = DATA+3 -R30 = $0478 -R31 = $04F8 -R32 = $0578 -R33 = $05F8 -CMDLO = $FA -CMDHI = $FB -WORK = $3C -* -FROM = $FA ; + $fb -TO = $FC ; + $fd -SIZE = $FE ; + $ff -* -SSNONE = $0F -SS0 = $0E -TC = $80 -DUMMY = $FF - - -******************************** -* -* Install SD card driver -* -******************************** - -* signature bytes - - LDX #$20 - LDY #$00 - LDX #$03 - STX WORK - -* find slot nr - - JSR $FF58 - TSX - LDA $0100,X - AND #$0F - ORA #$C0 - STA CURSLOT ; $Cs - ASL A - ASL A - ASL A - ASL A - STA SLOT16 ; $s0 - - BIT $CFFF - JSR INIT - -* -* TODO: check for init error -* - -* see if slot has a driver already - -INSTALL LDX $BF31 ; get devcnt -INSLP LDA $BF32,X ; get a devnum - AND #$70 ; isolate slot - CMP SLOT16 ; slot? - BEQ INSOUT ; yes, skip it - DEX - BPL INSLP ; keep up the search - -* restore the devnum to the list - - LDX $BF31 ; get devcnt again - CPX #$0D device table full? - BNE INSLP2 - -ERROR JMP INSOUT ; do something! - -INSLP2 LDA $BF32-1,X ; move all entries down - STA $BF32,X ; to make room at front - DEX ; for a new entry - BNE INSLP2 - LDA #$04 ; ProFile type device - ORA SLOT16 - STA $BF32 ; slot, drive 1 at top of list - INC $BF31 ; update devcnt - -* now insert the device driver vector - - LDA CURSLOT - AND #$0F - TXA - LDA #CMD0 - STA CMDHI - JSR CMD - JSR GETR1 ; get response - CMP #$01 - BNE ERROR1 ; error! - - LDA #CMD8 - STA CMDHI - JSR CMD - JSR GETR3 - CMP #$01 - BNE SDV1 ; may be SD Ver. 1 - -* check for $01aa match! - -SDV2 LDA #CMD55 - STA CMDHI - JSR CMD - JSR GETR1 - LDA #ACMD41_40 - STA CMDHI - JSR CMD - JSR GETR1 - CMP #$01 - BEQ SDV2 ; wait for ready - CMP #$00 - BNE ERROR1 ; error! -* send CMD58 -* SD Ver. 2 initialized! - JMP BLOCKSZ - -ERROR1 JMP IOERROR ; needed for far jump - -SDV1 LDA #CMD55 - STA CMDHI - JSR CMD ; ignore response - LDA #ACMD41_0 - STA CMDHI - JSR CMD - JSR GETR1 - CMP #$01 - BEQ SDV1 ; wait for ready - CMP #$00 - BNE MMC ; may be MMC card -* SD Ver. 1 initialized! - JMP BLOCKSZ - -MMC LDA #CMD1 - STA CMDHI -:LOOP JSR CMD - JSR GETR1 - CMP #$01 - BEQ :LOOP ; wait for ready - CMP #$00 - BNE IOERROR ; error! -* MMC Ver. 3 initialized! - -BLOCKSZ LDA #CMD16 - STA CMDHI - JSR CMD - JSR GETR1 - CMP #$00 - BNE IOERROR ; error! - -END CLC ; all ok - LDY #0 - BCC END1 -CDERROR SEC - LDY #$28 ; no card error - BCS END1 -IOERROR SEC - LDY #$27 ; init error -END1 LDA #SSNONE ; deselect card - STA SS - LDA #0 - STA DIV - TYA ; retval in A - RTS - - -******************************** -* -* Send SD command -* Call with command in CMDHI and CMDLO -* -******************************** - -CMD LDY #0 -:LOOP LDA (CMDLO),Y - STA DATA -:WAIT BIT CTRL ; TC is in N - BPL :WAIT - INY - CPY #6 - BCC :LOOP - RTS - - -******************************** -* -* Get R1 -* R1 is in A -* -******************************** - -GETR1 LDA #DUMMY - STA DATA -:WAIT BIT CTRL - BPL :WAIT - LDA DATA ; get response - STA R30+SLOT ; save R1 - AND #$80 - BNE GETR1 ; wait for MSB=0 - LDA #DUMMY - STA DATA ; send another dummy - LDA R30+SLOT ; restore R1 - RTS - - -******************************** -* -* Get R3 -* R1 is in A -* R3 is in scratchpad ram -* -******************************** - -GETR3 JSR GETR1 ; get R1 first - PHA ; save R1 - PHY ; save Y - LDY #04 -:LOOP LDA #DUMMY ; send dummy - STA DATA -:WAIT BIT CTRL - BPL :WAIT - LDA DATA - PHA - DEY - BNE :LOOP ; do 4 times - PLA - STA R33+SLOT ; save R3 - PLA - STA R32+SLOT - PLA - STA R31+SLOT - PLA - STA R30+SLOT - PLY ; restore Y - LDA #DUMMY - STA DATA ; send another dummy - PLA ; restore R1 - RTS - - -******************************** -* -* Status request -* $43 Unt number DSSS000 -* $44-45 Unused -* $46-47 Unused -* -* C Clear - No error -* Set - Error -* A $00 - No error -* $27 - I/O error -* $28 - No card inserted / no init -* $2B - Card write protected -* X - Blocks avail (low byte) -* Y - Blocks avail (high byte) -* -******************************** - -STATUS CLC ; no error - LDA #0 - LDX #$FF ; 32 MB partition - LDY #$FF - RTS - -* -* TODO: check for card detect and write protect! -* - - -******************************** -* -* Read 512 byte block -* $43 Unit number DSSS0000 -* $44-45 Address (LO/HI) of buffer -* $46-47 Block number (LO/HI) -* -* C Clear - No error -* Set - Error -* A $00 - No error -* $27 - Bad block number -* $28 - No card inserted -* -******************************** - -* -* TODO: check for card detect! -* - -READ LDA #SS0 ; enable /CS - STA SS - - LDA $46 ; store block num - STA R33+SLOT ; in R30-R33 - LDA $47 - STA R32+SLOT - STZ R31+SLOT - STZ R30+SLOT - LDY #9 -:LOOP ASL R33+SLOT ; mul block num - ROL R32+SLOT ; by 512 to get - ROL R31+SLOT ; real address - ROL R30+SLOT - DEY - BNE :LOOP - - LDA #$51 ; send CMD17 - STA DATA -:WAIT BIT CTRL - BPL :WAIT -:ARG LDA R30+SLOT ; get arg from R30 on - STA DATA -:WAIT1 BIT CTRL - BPL :WAIT1 - LDA R31+SLOT - STA DATA -:WAIT11 BIT CTRL - BPL :WAIT11 - LDA R32+SLOT - STA DATA -:WAIT12 BIT CTRL - BPL :WAIT12 - LDA R33+SLOT - STA DATA -:WAIT13 BIT CTRL - BPL :WAIT13 - LDA #DUMMY - STA DATA ; dummy crc -:WAIT2 BIT CTRL - BPL :WAIT2 -:GETR1 LDA #DUMMY - STA DATA ; get R1 -:WAIT3 BIT CTRL - BPL :WAIT3 - LDA DATA ; get response -* -* TODO: check for error! -* - CMP #$FE - BNE :GETR1 ; wait for $FE - - LDX #2 ; read data from card -:LOOPX LDY #0 -:LOOPY LDA #DUMMY - STA DATA -:WAIT4 BIT CTRL - BPL :WAIT4 - LDA DATA - STA ($44) - INC $44 - BNE :INY - INC $45 ; inc msb on page boundary -:INY INY - BNE :LOOPY - DEX - BNE :LOOPX - -:OK JSR GETR3 ; read 2 bytes crc - LDA #SSNONE - STA SS ; disable /CS - CLC ; no error - LDA #$00 - RTS - -:ERROR LDA #SSNONE - STA SS ; disable /CS - SEC ; an error occured - LDA #$27 - RTS - - -******************************** -* -* Write 512 byte block -* $43 Unit number DSSS000 -* $44-45 Address (LO/HI) of buffer -* $46-47 Block number (LO/HI) -* -* C Clear - No error -* Set - Error -* A $00 - No error -* $27 - Bad block number -* $28 - No card inserted -* -******************************** - -* -* TODO: check for card detect and write protect! -* - -WRITE LDA #SS0 ; enable /CS - STA SS - - LDA $46 ; store block num - STA R33+SLOT - LDA $47 - STA R32+SLOT - STZ R31+SLOT - STZ R30+SLOT - LDY #9 -:LOOP ASL R33+SLOT ; mul block num - ROL R32+SLOT ; by 512 to get - ROL R31+SLOT ; real address - ROL R30+SLOT - DEY - BNE :LOOP - - LDA #$58 ; send CMD24 - STA DATA -:WAIT BIT CTRL - BPL :WAIT -:ARG LDA R30+SLOT ; get arg from R30 on - STA DATA -:WAIT1 BIT CTRL - BPL :WAIT1 - LDA R31+SLOT - STA DATA -:WAIT11 BIT CTRL - BPL :WAIT11 - LDA R32+SLOT - STA DATA -:WAIT12 BIT CTRL - BPL :WAIT12 - LDA R33+SLOT - STA DATA -:WAIT13 BIT CTRL - BPL :WAIT13 - LDA #DUMMY - STA DATA ; dummy crc -:WAIT2 BIT CTRL - BPL :WAIT2 -:GETR1 LDA #DUMMY - STA DATA ; get R1 -:WAIT3 BIT CTRL - BPL :WAIT3 - LDA DATA : get response -* -* TODO: check for error! -* - CMP #$FE - BNE :GETR1 ; wait for $FE - LDX #2 ; send data to card -:LOOPX LDY #0 -:LOOPY LDA ($44) - STA DATA -:WAIT4 BIT CTRL - BPL :WAIT4 - INC $44 - BNE :INY - INC $45 ; inc msb on page boundary -:INY INY - BNE :LOOPY - DEX - BNE :LOOPX - - LDY #2 ; send 2 dummy crc bytes -:CRC STA DATA -:WAIT5 BIT CTRL - BPL :WAIT5 - DEY - BNE :CRC - -:OK LDA #SSNONE ; disable /CS - STA SS - CLC ; no error - LDA #0 - RTS - - -******************************** -* -* Format -* not supported! -* -******************************** - -FORMAT SEC - LDA #$01 ; invalid command - RTS - - - -CMD0 HEX 400000000095 -CMD1 HEX 4100000000F9 -CMD8 HEX 48000001AA87 -CMD16 HEX 5000000200FF -CMD55 HEX 770000000065 -ACMD41_40 HEX 694000000077 -ACMD41_0 HEX 6900000000FF - -DRIVEND = * diff --git a/AppleIISd.s b/AppleIISd.s new file mode 100644 index 0000000..dcc7e4a --- /dev/null +++ b/AppleIISd.s @@ -0,0 +1,591 @@ +;******************************* +; +; Initialize SD card +; +;******************************* + + .PC02 + ORG $C800 + +SLOT16 = $2B ; s0 -> slot * 16 +CURSLOT = $07F8 ; Cs +DATA = $C0C0 ; slot 4 +CTRL = DATA+1 +DIV = DATA+2 +SS = DATA+3 +R30 = $0478 +R31 = $04F8 +R32 = $0578 +R33 = $05F8 +CMDLO = $FA +CMDHI = $FB +WORK = $3C + +FROM = $FA ; + $fb +TO = $FC ; + $fd +SIZE = $FE ; + $ff + +SSNONE = $0F +SS0 = $0E +TC = $80 +DUMMY = $FF + + +;******************************* +; +; Install SD card driver +; +;******************************* + +; signature bytes + + ldx #$20 + ldy #$00 + ldx #$03 + stx WORK + +; find slot nr + + jsr $FF58 + tsx + lda $0100,X + and #$0F + ora #$C0 + sta CURSLOT ; $Cs + asl A + asl A + asl A + asl A + sta SLOT16 ; $s0 + + bit $CFFF + jsr INIT: + +; +; TODO: check for init error +; + +; see if slot has a driver already + +INSTALL: ldx $BF31 ; get devcnt +INSLP: lda $BF32,X ; get a devnum + and #$70 ; isolate slot + cmp SLOT16 ; slot? + beq INSOUT: ; yes, skip it + dex + bpl INSLP: ; keep up the search + +; restore the devnum to the list + + ldx $BF31 ; get devcnt again + cpx #$0D ; device table full? + bne INSLP2: + +ERROR: jmp INSOUT: ; do something! + +INSLP2: lda $BF32-1,X ; move all entries down + sta $BF32,X ; to make room at front + dex ; for a new entry + bne INSLP2: + lda #$04 ; ProFile type device + ora SLOT16 + sta $BF32 ; slot, drive 1 at top of list + inc $BF31 ; update devcnt + +; now insert the device driver vector + + lda CURSLOT + and #$0F + txa + lda #CMD0 + sta CMDHI + jsr CMD + jsr GETR1: ; get response + cmp #$01 + bne ERROR1: ; error! + + lda #CMD8 + sta CMDHI + jsr CMD + jsr GETR3: + cmp #$01 + bne SDV1: ; may be SD Ver. 1 + +; check for $01aa match! + +SDV2: lda #CMD55 + sta CMDHI + jsr CMD + jsr GETR1: + lda #ACMD41_40 + sta CMDHI + jsr CMD + jsr GETR1: + cmp #$01 + beq SDV2: ; wait for ready + cmp #$00 + bne ERROR1: ; error! +; send CMD58 +; SD Ver. 2 initialized! + jmp BLOCKSZ: + +ERROR1: jmp IOERROR: ; needed for far jump + +SDV1: lda #CMD55 + sta CMDHI + jsr CMD ; ignore response + lda #ACMD41_0 + sta CMDHI + jsr CMD + jsr GETR1: + cmp #$01 + beq SDV1: ; wait for ready + cmp #$00 + bne MMC: ; may be MMC card +; SD Ver. 1 initialized! + jmp BLOCKSZ: + +MMC: lda #CMD1 + sta CMDHI +@LOOP: jsr CMD + jsr GETR1: + cmp #$01 + beq @LOOP: ; wait for ready + cmp #$00 + bne IOERROR: ; error! +; MMC Ver. 3 initialized! + +BLOCKSZ: lda #CMD16 + sta CMDHI + jsr CMD + jsr GETR1: + cmp #$00 + bne IOERROR: ; error! + +END: clc ; all ok + ldy #0 + bcc END1: +CDERROR: sec + ldy #$28 ; no card error + bcs END1: +IOERROR: sec + ldy #$27 ; init error +END1: lda #SSNONE ; deselect card + sta SS + lda #0 + sta DIV + tya ; retval in A + rts + + +;******************************* +; +; Send SD command +; Call with command in CMDHI and CMDLO +; +;******************************* + +CMD: ldy #0 +@LOOP: lda (CMDLO),Y + sta DATA +@WAIT: bit CTRL ; TC is in N + bpl @WAIT: + iny + cpy #6 + bcc @LOOP: + rts + + +;******************************* +; +; Get R1 +; R1 is in A +; +;******************************* + +GETR1: lda #DUMMY + sta DATA +@WAIT: bit CTRL + bpl @WAIT: + lda DATA ; get response + sta R30+SLOT ; save R1 + and #$80 + bne GETR1: ; wait for MSB=0 + lda #DUMMY + sta DATA ; send another dummy + lda R30+SLOT ; restore R1 + rts + + +;******************************* +; +; Get R3 +; R1 is in A +; R3 is in scratchpad ram +; +;******************************* + +GETR3: jsr GETR1: ; get R1 first + pha ; save R1 + phy ; save Y + ldy #04 +@LOOP: lda #DUMMY ; send dummy + sta DATA +@WAIT: bit CTRL + bpl @WAIT: + lda DATA + pha + dey + bne @LOOP: ; do 4 times + pla + sta R33+SLOT ; save R3 + pla + sta R32+SLOT + pla + sta R31+SLOT + pla + sta R30+SLOT + ply ; restore Y + lda #DUMMY + sta DATA ; send another dummy + pla ; restore R1 + rts + + +;******************************* +; +; Status request +; $43 Unt number DSSS000 +; $44-45 Unused +; $46-47 Unused +; +; C Clear - No error +; Set - Error +; A $00 - No error +; $27 - I/O error +; $28 - No card inserted / no init +; $2B - Card write protected +; X - Blocks avail (low byte) +; Y - Blocks avail (high byte) +; +;******************************* + +STATUS: clc ; no error + lda #0 + ldx #$FF ; 32 MB partition + ldy #$FF + rts + +; +; TODO: check for card detect and write protect! +; + + +;******************************* +; +; Read 512 byte block +; $43 Unit number DSSS0000 +; $44-45 Address (LO/HI) of buffer +; $46-47 Block number (LO/HI) +; +; C Clear - No error +; Set - Error +; A $00 - No error +; $27 - Bad block number +; $28 - No card inserted +; +;******************************* + +; +; TODO: check for card detect! +; + +READ: lda #SS0 ; enable /CS + sta SS + + lda $46 ; store block num + sta R33+SLOT ; in R30-R33 + lda $47 + sta R32+SLOT + stz R31+SLOT + stz R30+SLOT + ldy #9 +@LOOP: asl R33+SLOT ; mul block num + rol R32+SLOT ; by 512 to get + rol R31+SLOT ; real address + rol R30+SLOT + dey + bne @LOOP: + + lda #$51 ; send CMD17 + sta DATA +@WAIT: bit CTRL + bpl @WAIT: +@ARG: lda R30+SLOT ; get arg from R30 on + sta DATA +@WAIT1: bit CTRL + bpl @WAIT1: + lda R31+SLOT + sta DATA +@WAIT11: bit CTRL + bpl @WAIT11: + lda R32+SLOT + sta DATA +@WAIT12: bit CTRL + bpl @WAIT12: + lda R33+SLOT + sta DATA +@WAIT13: bit CTRL + bpl @WAIT13: + lda #DUMMY + sta DATA ; dummy crc +@WAIT2: bit CTRL + bpl @WAIT2: +@GETR1: lda #DUMMY + sta DATA ; get R1 +@WAIT3: bit CTRL + bpl @WAIT3: + lda DATA ; get response +; +; TODO: check for error! +; + cmp #$FE + bne @GETR1: ; wait for $FE + + ldx #2 ; read data from card +@LOOPX: ldy #0 +@LOOPY: lda #DUMMY + sta DATA +@WAIT4: bit CTRL + bpl @WAIT4: + lda DATA + sta ($44) + inc $44 + bne @INCY: + inc $45 ; inc msb on page boundary +@INCY: iny + bne @LOOPY: + dex + bne @LOOPX: + +@OK: jsr GETR3: ; read 2 bytes crc + lda #SSNONE + sta SS ; disable /CS + clc ; no error + lda #$00 + rts + +:ERROR: lda #SSNONE + sta SS ; disable /CS + sec ; an error occured + lda #$27 + rts + + +;******************************* +; +; Write 512 byte block +; $43 Unit number DSSS000 +; $44-45 Address (LO/HI) of buffer +; $46-47 Block number (LO/HI) +; +; C Clear - No error +; Set - Error +; A $00 - No error +; $27 - Bad block number +; $28 - No card inserted +; +;******************************* + +; +; TODO: check for card detect and write protect! +; + +WRITE: lda #SS0 ; enable /CS + sta SS + + lda $46 ; store block num + sta R33+SLOT + lda $47 + sta R32+SLOT + stz R31+SLOT + stz R30+SLOT + ldy #9 +@LOOP: asl R33+SLOT ; mul block num + rol R32+SLOT ; by 512 to get + rol R31+SLOT ; real address + rol R30+SLOT + dey + bne @LOOP: + + lda #$58 ; send CMD24 + sta DATA +@WAIT: bit CTRL + bpl @WAIT: +@ARG: lda R30+SLOT ; get arg from R30 on + sta DATA +@WAIT1: bit CTRL + bpl @WAIT1: + lda R31+SLOT + sta DATA +@WAIT11: bit CTRL + bpl @WAIT11: + lda R32+SLOT + sta DATA +@WAIT12: bit CTRL + bpl @WAIT12: + lda R33+SLOT + sta DATA +@WAIT13: bit CTRL + bpl @WAIT13: + lda #DUMMY + sta DATA ; dummy crc +@WAIT2: bit CTRL + bpl @WAIT2: +@GETR1: lda #DUMMY + sta DATA ; get R1 +@WAIT3: bit CTRL + bpl @WAIT3: + lda DATA ; get response +; +; TODO: check for error! +; + cmp #$FE + bne @GETR1: ; wait for $FE + ldx #2 ; send data to card +@LOOPX: ldy #0 +@LOOPY: lda ($44) + sta DATA +@WAIT4: bit CTRL + bpl @WAIT4: + inc $44 + bne @INCY: + inc $45 ; inc msb on page boundary +@INCY: iny + bne @LOOPY: + dex + bne @LOOPX: + + ldy #2 ; send 2 dummy crc bytes +@CRC: sta DATA +@WAIT:5 bit CTRL + bpl @WAIT:5 + dey + bne @CRC: + +@OK: lda #SSNONE ; disable /CS + sta SS + clc ; no error + lda #0 + rts + + +;******************************* +; +; Format +; not supported! +; +;******************************* + +FORMAT: sec + lda #$01 ; invalid command + rts + + + +CMD0 .byte $400000000095 +CMD1 .byte $4100000000F9 +CMD8 .byte $48000001AA87 +CMD16 .byte $5000000200FF +CMD55 .byte $770000000065 +ACMD41_40 .byte $694000000077 +ACMD41_0 .byte $6900000000FF + +DRIVEND = * diff --git a/Hardware/SD_A2.brd b/Hardware/SD_A2.brd index cb44305..3c7de44 100644 --- a/Hardware/SD_A2.brd +++ b/Hardware/SD_A2.brd @@ -20,8 +20,8 @@ - - + + @@ -69,7 +69,7 @@ -Apple ][ SD V1.0 +Apple ][ SD V1.0 (C) Florian Reitz 2017 @@ -1757,30 +1757,6 @@ for trimmer refence see : <u>www.electrospec-inc.com/cross_references/trim </tr> </table> - -<b>CAPACITOR</b><p> -grid 2.5 mm, outline 2.5 x 5 mm - - - - - - - - - - - - - - - - - - ->NAME ->VALUE - <b>ELECTROLYTIC CAPACITOR</b><p> grid 2.54 mm, diameter 5 mm @@ -1802,33 +1778,33 @@ grid 2.54 mm, diameter 5 mm >VALUE - -<b>RESISTOR</b><p> -type 0204, grid 7.5 mm - - - - - - - - - - - - - - - - - - - - ->NAME ->VALUE - - + +<b>RESISTOR</b> + + + + + + + + +>NAME +>VALUE + + + + + +<b>Ceramic Chip Capacitor KEMET 0603 reflow solder</b><p> +Metric Code Size 1608 + + + + +>NAME +>VALUE + + @@ -2225,221 +2201,340 @@ Covered vias can be set in Masks (Limit). - + + + + - - + + + + - - - - + + + + + + + + + + + + + + + + - - - - - - - - - - - - - + + + - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - - + - - - - - - + - - - - + - - - - - - - - - - - - - + + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + + + - - + - + - - - - - + + + + + + + + + @@ -2447,7 +2542,7 @@ Covered vias can be set in Masks (Limit). - + @@ -2456,7 +2551,7 @@ Covered vias can be set in Masks (Limit). - + @@ -2466,11 +2561,11 @@ Covered vias can be set in Masks (Limit). - - + + - + @@ -2480,15 +2575,13 @@ Covered vias can be set in Masks (Limit). - - + + - - @@ -2497,60 +2590,75 @@ Covered vias can be set in Masks (Limit). - + + + - - - + + - + + + + + + + + + + - + - - + + + + + + + + - - - + + - - - - - - - - - - - - - + + + + + + + + + + + + + - + @@ -2560,7 +2668,7 @@ Covered vias can be set in Masks (Limit). - + @@ -2571,7 +2679,7 @@ Covered vias can be set in Masks (Limit). - + @@ -2664,11 +2772,12 @@ Covered vias can be set in Masks (Limit). - - - - - + + + + + + @@ -2677,7 +2786,7 @@ Covered vias can be set in Masks (Limit). - + @@ -2730,7 +2839,7 @@ Covered vias can be set in Masks (Limit). - + @@ -2741,7 +2850,7 @@ Covered vias can be set in Masks (Limit). - + @@ -2749,7 +2858,7 @@ Covered vias can be set in Masks (Limit). - + @@ -2770,7 +2879,7 @@ Covered vias can be set in Masks (Limit). - + @@ -2783,19 +2892,16 @@ Covered vias can be set in Masks (Limit). - - - - - - - - - - - - - + + + + + + + + + + @@ -2809,7 +2915,7 @@ Covered vias can be set in Masks (Limit). - + @@ -2824,7 +2930,7 @@ Covered vias can be set in Masks (Limit). - + @@ -2842,10 +2948,11 @@ Covered vias can be set in Masks (Limit). - - + + + @@ -2860,7 +2967,7 @@ Covered vias can be set in Masks (Limit). - + @@ -2877,7 +2984,7 @@ Covered vias can be set in Masks (Limit). - + @@ -2895,64 +3002,75 @@ Covered vias can be set in Masks (Limit). - - + - - - + + + + - + - - - - - + + + + + + + + + - + - + + + + + + - + - - - + + + + + - + - + - - + - + + - + - - + + @@ -2962,7 +3080,7 @@ Covered vias can be set in Masks (Limit). - + @@ -2972,7 +3090,7 @@ Covered vias can be set in Masks (Limit). - + @@ -2980,27 +3098,24 @@ Covered vias can be set in Masks (Limit). - + - - - - - - - - - - - - + - + + + + + + + + + - + @@ -3013,25 +3128,26 @@ Covered vias can be set in Masks (Limit). - - + + - - + + + - - - - - - - + + + + + + + @@ -3039,26 +3155,22 @@ Covered vias can be set in Masks (Limit). - + - + - - - - - - - - - - + + + + + + - + @@ -3068,7 +3180,7 @@ Covered vias can be set in Masks (Limit). - + diff --git a/Hardware/SD_A2.sch b/Hardware/SD_A2.sch index 49acab8..8c1a996 100644 --- a/Hardware/SD_A2.sch +++ b/Hardware/SD_A2.sch @@ -1,6 +1,6 @@ - + @@ -15605,14 +15605,13 @@ W = angled<p> - + - - - - + + + @@ -15624,30 +15623,38 @@ W = angled<p> - + - - - - - - - - + + + + + - + + + + + + + + + + + + @@ -15710,10 +15717,9 @@ Program CPLD - + - @@ -15725,22 +15731,19 @@ Program CPLD - - + + - + - - - - - - + + + @@ -15756,9 +15759,20 @@ Program CPLD + + + + + + + + + + + - + @@ -15791,36 +15805,56 @@ Program CPLD - + - + - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + - - - @@ -15846,16 +15880,21 @@ Program CPLD + + + + + - + @@ -15867,19 +15906,19 @@ Program CPLD - + - + + + + - - - @@ -15931,23 +15970,44 @@ Program CPLD + - + - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -15975,16 +16035,15 @@ Program CPLD @@ -15997,14 +16056,14 @@ Program CPLD - + - + @@ -16051,13 +16110,13 @@ Program CPLD - + @@ -16087,7 +16146,7 @@ Program CPLD