Compare commits

...

44 Commits

Author SHA1 Message Date
Terence Boldt
4b7d990209 Fix security warnings in setup.sh 2022-04-27 22:50:04 -04:00
Terence Boldt
ed2acd9d5f Update boot image 2022-04-27 22:36:27 -04:00
Terence Boldt
da04931665 Add error handling 2022-04-27 22:36:27 -04:00
Terence Boldt
74702e2cb5 Fix setup script 2022-03-19 14:08:22 -04:00
Terence Boldt
9f85fba5ad Add setup script 2022-03-19 14:05:20 -04:00
Terence Boldt
55d94dd1f0 Update RPi.Command and driver for it 2022-03-03 22:34:45 -05:00
Terence Boldt
707c704119
Merge pull request #98 from tjboldt/binary-compare
Verify generated binaries
2022-03-02 21:58:45 -05:00
Terence Boldt
d33264edf5 Fix Codacy warning 2022-03-02 21:54:28 -05:00
Terence Boldt
d897149901 Verify generated binaries 2022-03-02 21:46:45 -05:00
Terence Boldt
087f5a299f
Merge pull request #97 from tjboldt/shell-version
Update version numbers
2022-03-02 08:35:43 -05:00
Terence Boldt
a751737bf1 Update version numbers 2022-03-01 22:46:03 -05:00
Terence Boldt
869eb25c11
Merge pull request #96 from tjboldt/fix-vi-arrows
Fixes #94 VT100 arrow keys for application mode
2022-03-01 08:31:30 -05:00
Terence Boldt
661c2fc8f6 Fixes #94 VT100 arrow keys for application mode 2022-03-01 08:26:54 -05:00
Terence Boldt
bd88d194d4 Fix #95 gerber render for PCBWay compatibility 2022-03-01 05:38:58 -05:00
Terence Boldt
9198e2ae6c
Update README.md 2022-02-28 20:59:47 -05:00
Terence Boldt
b9a2eacb5d
Merge pull request #92 from tjboldt/shell-kb-fix
Fix keyboard input glitch on read
2022-02-23 22:44:18 -05:00
Terence Boldt
049e8770d2 Fix keyboard input glitch on read 2022-02-23 22:42:19 -05:00
Terence Boldt
fd0f020364
Merge pull request #91 from tjboldt/shell-kb-fix
Fix #56 shell crash on key autorepeat
2022-02-22 15:49:19 -05:00
Terence Boldt
1f4c9ddf4d Fix #56 shell crash on key autorepeat 2022-02-22 15:43:54 -05:00
Terence Boldt
f9dab0aff3
Update README.md 2022-02-22 10:49:36 -05:00
Terence Boldt
141d5fc691
Merge pull request #90 from hanshuebner/main
Clean up buses for aesthetics
2022-02-21 05:19:48 -05:00
Hans Huebner
c280e7f829 Clean up buses for aesthetics 2022-02-21 11:02:59 +01:00
Terence Boldt
8d22144890 Update pdf to latest schematic 2022-02-20 21:53:06 -05:00
Terence Boldt
78d7b73793
Merge pull request #89 from hanshuebner/main
Name fix and contributor links
2022-02-20 16:31:49 -05:00
Hans Hübner
468dc6708b
Add contributor links 2022-02-20 22:27:21 +01:00
Hans Hübner
150177e3de
Fix name typo in README 2022-02-20 22:21:15 +01:00
Terence Boldt
00e412c552
Add contributions/thanks to README 2022-02-20 13:58:42 -05:00
Terence Boldt
c03235acea Clean up ERC warnings/errors 2022-02-20 13:26:37 -05:00
Terence Boldt
e1ac67974f Fix warnings and errors in PCB 2022-02-20 11:21:20 -05:00
Terence Boldt
261c523836
Merge pull request #88 from hanshuebner/main
Improve schematics
2022-02-20 09:29:20 -05:00
Hans Huebner
e2a2af197a Fix AT28C64D pins, add GPIO bus 2022-02-20 09:31:20 +01:00
Hans Huebner
b5bc96624f Reconnect EEPROM CE correctly, tweaks 2022-02-19 06:23:17 +01:00
Hans Huebner
ea7b4b5e08 Add power nets 2022-02-18 20:18:05 +01:00
Hans Huebner
95682eb6de Add data bus 2022-02-18 17:34:16 +01:00
Hans Huebner
c151b16107 Remove power wires, improve signal names 2022-02-18 12:34:56 +01:00
Hans Huebner
27c38fbff5 Apple II connector pin names and directions 2022-02-18 10:42:23 +01:00
Hans Huebner
e101638de8 Ignore KiCAD backups 2022-02-18 10:03:49 +01:00
Hans Huebner
a079ae3cd7 Make ERC pass 2022-02-18 10:03:15 +01:00
Hans Huebner
aaefdfcc8d Add no-connects to open pins 2022-02-18 09:22:28 +01:00
Terence Boldt
37dd7b1c3b
Merge pull request #87 from tjboldt/external-power
Add sixth prototype with external power jumper
2022-02-17 20:19:43 -05:00
Terence Boldt
8efc93a317
Update README.md 2022-02-17 20:12:41 -05:00
Terence Boldt
12cdc7ea44 Update to KiCAD 6 2022-02-17 20:00:32 -05:00
Terence Boldt
a1ef730dac Update README for sixth prototype 2022-02-16 21:50:16 -05:00
Terence Boldt
c29232b407 Add power jumper and instructions 2022-02-16 21:45:22 -05:00
49 changed files with 25160 additions and 100048 deletions

View File

@ -22,6 +22,9 @@ body:
label: Hardware Version
description: What version of the hardware are you running?
options:
- Sixth Prototype (Purchased from Terence)
- Sixth Prototype (Self-assembled)
- Sixth Prototype (Purchased from third party)
- Fifth Prototype (Purchased from Terence)
- Fifth Prototype (Self-assembled)
- Fifth Prototype (Purchased from third party)
@ -46,11 +49,23 @@ body:
label: Driver Version
description: What version of the driver are you running? Check with `RPI a2version`
options:
- 0024 (fix VT100 arrow keys)
- 0023 (replaced periph.io with rpio)
- 0022 (added version info)
- Older (error calling RPI a2version, pre-2022-Feb-07)
validations:
required: true
- type: dropdown
id: shell-version
attributes:
label: Shell Version
description: What version of the shell are you running?`
options:
- 000D (added version info)
- Older (pre-2022-Mar-01)
- Not Applicable (bug not Shell related)
validations:
required: true
- type: dropdown
id: problem-area
attributes:

View File

@ -18,4 +18,9 @@ jobs:
export PATH=$PATH:$(pwd)/.cicd
cd Apple2
./assemble.sh
- name: Compare binaries
run: |
export PATH=$PATH:$(pwd)/.cicd
cd Apple2
./compare.sh

1
.gitignore vendored
View File

@ -3,3 +3,4 @@
*.DS_Store
RaspberryPi/apple2driver/apple2driver
RaspberryPi/Apple2-IO-RPi.log
Hardware/Apple2IORPi-backups/

View File

@ -1,4 +1,4 @@
ca65 V2.18 - N/A
ca65 V2.18 - Raspbian 2.19-1
Main file : CommandFirmware.asm
Current file: CommandFirmware.asm

View File

@ -1,4 +1,4 @@
ca65 V2.18 - N/A
ca65 V2.18 - Raspbian 2.19-1
Main file : DriveFirmware.asm
Current file: DriveFirmware.asm

View File

@ -1,4 +1,4 @@
ca65 V2.18 - N/A
ca65 V2.18 - Raspbian 2.19-1
Main file : FileAccessFirmware.asm
Current file: FileAccessFirmware.asm

View File

@ -1,4 +1,4 @@
ca65 V2.18 - N/A
ca65 V2.18 - Raspbian 2.19-1
Main file : MenuFirmware.asm
Current file: MenuFirmware.asm

View File

@ -42,6 +42,13 @@ SlotL = $fe
SlotH = $ff
ESC = $9b
;macro for string with high-bit set
.macro aschi str
.repeat .strlen (str), c
.byte .strat (str, c) | $80
.endrep
.endmacro
.org $2000
ldx #$07 ; start at slot 7
DetectSlot:
@ -78,21 +85,22 @@ nextSlot:
rts
Start:
stx slotx + $1e01 ;set the slot for the driver
ldx #$00
copyDriver:
lda $2100,x
sta $0300,x
inx
cpx #$e6
bne copyDriver
end:
jmp $0300
.repeat 253-<end
.byte 0
.endrepeat
.org $0300
ldy #$00
PrintString:
lda Text,y
beq copyDriver
ora #$80
jsr PrintChar
iny
bne PrintString
copyDriver:
ldy #$00
copyDriverByte:
lda $2100,y
sta $0300,y
iny
cpy #$e6
bne copyDriverByte
;
; FIRST SAVE THE EXTERNAL COMMAND ADDRESS SO YOU WON'T
; DISCONNECT ANY PREVIOUSLY CONNECTED COMMAND.
@ -106,8 +114,42 @@ end:
STA EXTRNCMD+1 ; command handler in the
LDA #>RPI ; external command JMP
STA EXTRNCMD+2 ; vector.
RTS
;
lda #ExecCommand
jsr SendByte
ldy #$00
nextCommandByte:
lda a2help, y
beq finishCommand
jsr SendByte
iny
jmp nextCommandByte
finishCommand:
lda #$00
jsr SendByte
showVersion:
jsr GetByte
cmp #$00
beq FinishDriver
jsr PrintChar
jmp showVersion
FinishDriver:
rts
a2help:
.byte "a2help", $00
Text:
aschi "RPI command version: 000E"
.byte $8d
end:
.byte $00
.repeat 255-<end
.byte 0
.endrepeat
.org $0300
RPI: LDX #0 ;Check for our command.
NXTCHR: LDA INBUF,X ;Get first character.
ora #$20 ;Make it lower case
@ -159,18 +201,9 @@ sendNullTerminator:
jsr SendByte
DumpOutput:
jsr GetByte
bcs skipOutput
cmp #$00
beq endOutput
jsr PrintChar
skipOutput:
bit Keyboard ;check for keypress
bpl DumpOutput ;keep dumping output if no keypress
lda Keyboard ;send keypress to RPi
jsr PrintChar
and #$7f
jsr SendByte
bit ClearKeyboard
clc
bcc DumpOutput
endOutput:
@ -206,13 +239,7 @@ GetByte:
waitRead:
lda InputFlags,x
rol
bcc readByte
bit Keyboard ;keypress will abort waiting to read
bpl waitRead
lda #$1f ;set all flags high and exit
sta OutputFlags,x
sec ;failure
rts
bcs waitRead
readByte:
lda InputByte,x
pha
@ -227,13 +254,6 @@ finishRead:
rts
;macro for string with high-bit set
.macro aschi str
.repeat .strlen (str), c
.byte .strat (str, c) | $80
.endrep
.endmacro
CMD: aschi "rpi"
CMDLEN = 3 ;Our command length
;

Binary file not shown.

View File

@ -1,4 +1,4 @@
ca65 V2.18 - N/A
ca65 V2.18 - Raspbian 2.19-1
Main file : RPi.Command.asm
Current file: RPi.Command.asm
@ -46,6 +46,13 @@ Current file: RPi.Command.asm
000300 1 SlotH = $ff
000300 1 ESC = $9b
000300 1
000300 1 ;macro for string with high-bit set
000300 1 .macro aschi str
000300 1 .repeat .strlen (str), c
000300 1 .byte .strat (str, c) | $80
000300 1 .endrep
000300 1 .endmacro
000300 1
000300 1 .org $2000
002000 1 A2 07 ldx #$07 ; start at slot 7
002002 1 DetectSlot:
@ -81,171 +88,187 @@ Current file: RPi.Command.asm
00202E 1 D0 D2 bne DetectSlot
002030 1 60 rts
002031 1 Start:
002031 1 8E 48 21 stx slotx + $1e01 ;set the slot for the driver
002034 1 A2 00 ldx #$00
002036 1 copyDriver:
002036 1 BD 00 21 lda $2100,x
002039 1 9D 00 03 sta $0300,x
00203C 1 E8 inx
00203D 1 E0 E6 cpx #$e6
00203F 1 D0 F5 bne copyDriver
002041 1 end:
002041 1 4C 00 03 jmp $0300
002044 1
002044 1 00 00 00 00 .repeat 253-<end
002048 1 00 00 00 00
00204C 1 00 00 00 00
002031 1 8E 31 21 stx slotx + $1e01 ;set the slot for the driver
002034 1 A0 00 ldy #$00
002036 1 PrintString:
002036 1 B9 93 20 lda Text,y
002039 1 F0 08 beq copyDriver
00203B 1 09 80 ora #$80
00203D 1 20 ED FD jsr PrintChar
002040 1 C8 iny
002041 1 D0 F3 bne PrintString
002043 1 copyDriver:
002043 1 A0 00 ldy #$00
002045 1 copyDriverByte:
002045 1 B9 00 21 lda $2100,y
002048 1 99 00 03 sta $0300,y
00204B 1 C8 iny
00204C 1 C0 E6 cpy #$e6
00204E 1 D0 F5 bne copyDriverByte
002050 1 ;
002050 1 ; FIRST SAVE THE EXTERNAL COMMAND ADDRESS SO YOU WON'T
002050 1 ; DISCONNECT ANY PREVIOUSLY CONNECTED COMMAND.
002050 1 ;
002050 1 AD 07 BE LDA EXTRNCMD+1
002053 1 8D AD 03 STA NXTCMD
002056 1 AD 08 BE LDA EXTRNCMD+2
002059 1 8D AE 03 STA NXTCMD+1
00205C 1 ;
00205C 1 A9 00 LDA #<RPI ;Install the address of our
00205E 1 8D 07 BE STA EXTRNCMD+1 ; command handler in the
002061 1 A9 03 LDA #>RPI ; external command JMP
002063 1 8D 08 BE STA EXTRNCMD+2 ; vector.
002066 1
002066 1 A9 05 lda #ExecCommand
002068 1 20 6F 03 jsr SendByte
00206B 1 A0 00 ldy #$00
00206D 1 nextCommandByte:
00206D 1 B9 8C 20 lda a2help, y
002070 1 F0 07 beq finishCommand
002072 1 20 6F 03 jsr SendByte
002075 1 C8 iny
002076 1 4C 6D 20 jmp nextCommandByte
002079 1 finishCommand:
002079 1 A9 00 lda #$00
00207B 1 20 6F 03 jsr SendByte
00207E 1 showVersion:
00207E 1 20 8D 03 jsr GetByte
002081 1 C9 00 cmp #$00
002083 1 F0 06 beq FinishDriver
002085 1 20 ED FD jsr PrintChar
002088 1 4C 7E 20 jmp showVersion
00208B 1 FinishDriver:
00208B 1 60 rts
00208C 1
00208C 1 a2help:
00208C 1 61 32 68 65 .byte "a2help", $00
002090 1 6C 70 00
002093 1
002093 1 Text:
002093 1 D2 D0 C9 A0 aschi "RPI command version: 000E"
002097 1 E3 EF ED ED
00209B 1 E1 EE E4 A0
0020AC 1 8D .byte $8d
0020AD 1 end:
0020AD 1 00 .byte $00
0020AE 1
0020AE 1 00 00 00 00 .repeat 255-<end
0020B2 1 00 00 00 00
0020B6 1 00 00 00 00
002100 1 .byte 0
002100 1 .endrepeat
002100 1
002100 1 .org $0300
000300 1 ;
000300 1 ; FIRST SAVE THE EXTERNAL COMMAND ADDRESS SO YOU WON'T
000300 1 ; DISCONNECT ANY PREVIOUSLY CONNECTED COMMAND.
000300 1 ;
000300 1 AD 07 BE LDA EXTRNCMD+1
000303 1 8D E5 03 STA NXTCMD
000306 1 AD 08 BE LDA EXTRNCMD+2
000309 1 8D E6 03 STA NXTCMD+1
00030C 1 ;
00030C 1 A9 17 LDA #<RPI ;Install the address of our
00030E 1 8D 07 BE STA EXTRNCMD+1 ; command handler in the
000311 1 A9 03 LDA #>RPI ; external command JMP
000313 1 8D 08 BE STA EXTRNCMD+2 ; vector.
000316 1 60 RTS
000317 1 ;
000317 1 A2 00 RPI: LDX #0 ;Check for our command.
000319 1 BD 00 02 NXTCHR: LDA INBUF,X ;Get first character.
00031C 1 09 20 ora #$20 ;Make it lower case
00031E 1 DD E2 03 CMP CMD,X ;Does it match?
000321 1 D0 29 BNE NOTOURS ;No, back to CI.
000323 1 E8 INX ;Next character
000324 1 E0 03 CPX #CMDLEN ;All characters yet?
000326 1 D0 F1 BNE NXTCHR ;No, read next one.
000328 1 ;
000328 1 A9 02 LDA #CMDLEN-1 ;Our cmd! Put cmd length-1
00032A 1 ;lda #$8d
00032A 1 ;sta $02ff
00032A 1 ;lda #$fe
00032A 1 8D 52 BE STA XLEN ; in CI global XLEN.
00032D 1 A9 58 LDA #<XRETURN ;Point XTRNADDR to a known
00032F 1 8D 50 BE STA XTRNADDR ; RTS since we'll handle
000332 1 A9 FF LDA #>XRETURN ; at the time we intercept
000334 1
000334 1 8D 51 BE STA XTRNADDR+1 ; our command.
000337 1 A9 00 LDA #0 ;Mark the cmd number as
000339 1 8D 53 BE STA XCNUM ; zero (external).
00033C 1 8D 54 BE STA PBITS ;And indicate no parameters
00033F 1 8D 55 BE STA PBITS+1 ; to be parsed.
000342 1 A9 8D lda #$8d
000344 1 20 ED FD jsr $fded
000347 1 A2 70 slotx: ldx #$70 ; set x to slot # in high nibble
000349 1 18 clc
00034A 1 90 04 bcc SendCommand
00034C 1 ;
00034C 1 38 NOTOURS: SEC ; ALWAYS SET CARRY IF NOT YOUR
00034D 1 6C E5 03 JMP (NXTCMD) ; CMD AND LET NEXT COMMAND TRY
000350 1 ; ; TO CLAIM IT.
000350 1
000350 1 SendCommand:
000350 1 2C 10 C0 bit ClearKeyboard
000353 1 A9 05 lda #$05 ;send command 5 = exec
000355 1 20 9B 03 jsr SendByte
000358 1 A0 03 ldy #$03 ;skip over "RPI"
00035A 1 getInput:
00035A 1 B9 00 02 lda $0200,y
00035D 1 C9 8D cmp #$8d
00035F 1 F0 08 beq sendNullTerminator
000361 1 29 7F and #$7f
000363 1 20 9B 03 jsr SendByte
000366 1 C8 iny
000367 1 D0 F1 bne getInput
000369 1 sendNullTerminator:
000369 1 A9 00 lda #$00
00036B 1 20 9B 03 jsr SendByte
00036E 1 DumpOutput:
00036E 1 20 B9 03 jsr GetByte
000371 1 B0 07 bcs skipOutput
000373 1 C9 00 cmp #$00
000375 1 F0 19 beq endOutput
000377 1 20 ED FD jsr PrintChar
00037A 1 skipOutput:
00037A 1 2C 00 C0 bit Keyboard ;check for keypress
00037D 1 10 EF bpl DumpOutput ;keep dumping output if no keypress
00037F 1 AD 00 C0 lda Keyboard ;send keypress to RPi
000382 1 20 ED FD jsr PrintChar
000385 1 29 7F and #$7f
000387 1 20 9B 03 jsr SendByte
00038A 1 2C 10 C0 bit ClearKeyboard
00038D 1 18 clc
00038E 1 90 DE bcc DumpOutput
000390 1 endOutput:
000390 1 18 clc
000391 1 6C E5 03 jmp (NXTCMD)
000394 1
000394 1 HelpCommand:
000394 1 61 32 68 65 .byte "a2help",$00
000398 1 6C 70 00
00039B 1
00039B 1 SendByte:
000300 1 A2 00 RPI: LDX #0 ;Check for our command.
000302 1 BD 00 02 NXTCHR: LDA INBUF,X ;Get first character.
000305 1 09 20 ora #$20 ;Make it lower case
000307 1 DD AA 03 CMP CMD,X ;Does it match?
00030A 1 D0 29 BNE NOTOURS ;No, back to CI.
00030C 1 E8 INX ;Next character
00030D 1 E0 03 CPX #CMDLEN ;All characters yet?
00030F 1 D0 F1 BNE NXTCHR ;No, read next one.
000311 1 ;
000311 1 A9 02 LDA #CMDLEN-1 ;Our cmd! Put cmd length-1
000313 1 ;lda #$8d
000313 1 ;sta $02ff
000313 1 ;lda #$fe
000313 1 8D 52 BE STA XLEN ; in CI global XLEN.
000316 1 A9 58 LDA #<XRETURN ;Point XTRNADDR to a known
000318 1 8D 50 BE STA XTRNADDR ; RTS since we'll handle
00031B 1 A9 FF LDA #>XRETURN ; at the time we intercept
00031D 1
00031D 1 8D 51 BE STA XTRNADDR+1 ; our command.
000320 1 A9 00 LDA #0 ;Mark the cmd number as
000322 1 8D 53 BE STA XCNUM ; zero (external).
000325 1 8D 54 BE STA PBITS ;And indicate no parameters
000328 1 8D 55 BE STA PBITS+1 ; to be parsed.
00032B 1 A9 8D lda #$8d
00032D 1 20 ED FD jsr $fded
000330 1 A2 70 slotx: ldx #$70 ; set x to slot # in high nibble
000332 1 18 clc
000333 1 90 04 bcc SendCommand
000335 1 ;
000335 1 38 NOTOURS: SEC ; ALWAYS SET CARRY IF NOT YOUR
000336 1 6C AD 03 JMP (NXTCMD) ; CMD AND LET NEXT COMMAND TRY
000339 1 ; ; TO CLAIM IT.
000339 1
000339 1 SendCommand:
000339 1 2C 10 C0 bit ClearKeyboard
00033C 1 A9 05 lda #$05 ;send command 5 = exec
00033E 1 20 6F 03 jsr SendByte
000341 1 A0 03 ldy #$03 ;skip over "RPI"
000343 1 getInput:
000343 1 B9 00 02 lda $0200,y
000346 1 C9 8D cmp #$8d
000348 1 F0 08 beq sendNullTerminator
00034A 1 29 7F and #$7f
00034C 1 20 6F 03 jsr SendByte
00034F 1 C8 iny
000350 1 D0 F1 bne getInput
000352 1 sendNullTerminator:
000352 1 A9 00 lda #$00
000354 1 20 6F 03 jsr SendByte
000357 1 DumpOutput:
000357 1 20 8D 03 jsr GetByte
00035A 1 C9 00 cmp #$00
00035C 1 F0 06 beq endOutput
00035E 1 20 ED FD jsr PrintChar
000361 1 18 clc
000362 1 90 F3 bcc DumpOutput
000364 1 endOutput:
000364 1 18 clc
000365 1 6C AD 03 jmp (NXTCMD)
000368 1
000368 1 HelpCommand:
000368 1 61 32 68 65 .byte "a2help",$00
00036C 1 6C 70 00
00036F 1
00036F 1 SendByte:
00036F 1 48 pha
000370 1 waitWrite:
000370 1 BD 8B C0 lda InputFlags,x
000373 1 2A rol
000374 1 2A rol
000375 1 B0 F9 bcs waitWrite
000377 1 68 pla
000378 1 9D 8D C0 sta OutputByte,x
00037B 1 A9 1E lda #$1e ; set bit 0 low to indicate write started
00037D 1 9D 87 C0 sta OutputFlags,x
000380 1 finishWrite:
000380 1 BD 8B C0 lda InputFlags,x
000383 1 2A rol
000384 1 2A rol
000385 1 90 F9 bcc finishWrite
000387 1 A9 1F lda #$1f
000389 1 9D 87 C0 sta OutputFlags,x
00038C 1 60 rts
00038D 1
00038D 1 GetByte:
00038D 1 A9 1D lda #$1d ;set read flag low
00038F 1 9D 87 C0 sta OutputFlags,x
000392 1 waitRead:
000392 1 BD 8B C0 lda InputFlags,x
000395 1 2A rol
000396 1 B0 FA bcs waitRead
000398 1 readByte:
000398 1 BD 8E C0 lda InputByte,x
00039B 1 48 pha
00039C 1 waitWrite:
00039C 1 BD 8B C0 lda InputFlags,x
00039F 1 2A rol
0003A0 1 2A rol
0003A1 1 B0 F9 bcs waitWrite
0003A3 1 68 pla
0003A4 1 9D 8D C0 sta OutputByte,x
0003A7 1 A9 1E lda #$1e ; set bit 0 low to indicate write started
0003A9 1 9D 87 C0 sta OutputFlags,x
0003AC 1 finishWrite:
0003AC 1 BD 8B C0 lda InputFlags,x
0003AF 1 2A rol
0003B0 1 2A rol
0003B1 1 90 F9 bcc finishWrite
0003B3 1 A9 1F lda #$1f
0003B5 1 9D 87 C0 sta OutputFlags,x
0003B8 1 60 rts
0003B9 1
0003B9 1 GetByte:
0003B9 1 A9 1D lda #$1d ;set read flag low
0003BB 1 9D 87 C0 sta OutputFlags,x
0003BE 1 waitRead:
0003BE 1 BD 8B C0 lda InputFlags,x
0003C1 1 2A rol
0003C2 1 90 0C bcc readByte
0003C4 1 2C 00 C0 bit Keyboard ;keypress will abort waiting to read
0003C7 1 10 F5 bpl waitRead
0003C9 1 A9 1F lda #$1f ;set all flags high and exit
0003CB 1 9D 87 C0 sta OutputFlags,x
0003CE 1 38 sec ;failure
0003CF 1 60 rts
0003D0 1 readByte:
0003D0 1 BD 8E C0 lda InputByte,x
0003D3 1 48 pha
0003D4 1 A9 1F lda #$1f ;set all flags high
0003D6 1 9D 87 C0 sta OutputFlags,x
0003D9 1 finishRead:
0003D9 1 BD 8B C0 lda InputFlags,x
0003DC 1 2A rol
0003DD 1 90 FA bcc finishRead
0003DF 1 68 pla
0003E0 1 18 clc ;success
0003E1 1 60 rts
0003E2 1
0003E2 1
0003E2 1 ;macro for string with high-bit set
0003E2 1 .macro aschi str
0003E2 1 .repeat .strlen (str), c
0003E2 1 .byte .strat (str, c) | $80
0003E2 1 .endrep
0003E2 1 .endmacro
0003E2 1
0003E2 1 F2 F0 E9 CMD: aschi "rpi"
0003E5 1 CMDLEN = 3 ;Our command length
0003E5 1 ;
0003E5 1 00 00 NXTCMD: .byte 0,0 ; STORE THE NEXT EXT CMD'S
0003E7 1 ; ADDRESS HERE.
0003E7 1
0003E7 1
0003E7 1
00039C 1 A9 1F lda #$1f ;set all flags high
00039E 1 9D 87 C0 sta OutputFlags,x
0003A1 1 finishRead:
0003A1 1 BD 8B C0 lda InputFlags,x
0003A4 1 2A rol
0003A5 1 90 FA bcc finishRead
0003A7 1 68 pla
0003A8 1 18 clc ;success
0003A9 1 60 rts
0003AA 1
0003AA 1
0003AA 1 F2 F0 E9 CMD: aschi "rpi"
0003AD 1 CMDLEN = 3 ;Our command length
0003AD 1 ;
0003AD 1 00 00 NXTCMD: .byte 0,0 ; STORE THE NEXT EXT CMD'S
0003AF 1 ; ADDRESS HERE.
0003AF 1
0003AF 1
0003AF 1

View File

@ -87,14 +87,26 @@ DetectSlot:
asl
tax
clc
bcc Start
bcc Init
nextSlot:
dex
bne DetectSlot
rts
Start:
Init:
lda #$8d
jsr $c300 ; force 80 columns
ldy #$00
PrintString:
lda Text,y
beq Start
ora #$80
jsr PrintChar
iny
bne PrintString
Start:
lda LastChar
pha
bit ClearKeyboard
@ -111,7 +123,6 @@ Start:
DumpOutput:
jsr GetByte
bcs checkInput
cmp #$00
beq endOutput
pha
@ -132,14 +143,6 @@ DumpOutput:
jsr PrintChar
jsr SetCursor
jmp DumpOutput
checkInput:
bit Keyboard ;check for keypress
bpl DumpOutput ;keep dumping output if no keypress
lda Keyboard ;send keypress to RPi
and #$7f
jsr SendByte
bit ClearKeyboard
jmp DumpOutput
endOutput:
rts
clearScreen:
@ -194,8 +197,6 @@ finishWrite:
rts
GetByte:
bit Keyboard ; skip byte read if key pressed
bcc keyPressed
lda #$1d ;set read flag low
sta OutputFlags,x
waitRead:
@ -205,10 +206,20 @@ waitRead:
bit Keyboard ;keypress will abort waiting to read
bpl waitRead
keyPressed:
lda #$1f ;set all flags high and exit
lda Keyboard ;send keypress to RPi
and #$7f
sta OutputByte,x
bit ClearKeyboard
lda #$1c ;set write flag low too
sta OutputFlags,x
sec ;failure
rts
finishKeyPress:
lda InputFlags,x
rol
rol
bcc finishKeyPress
lda #$1d ;set flags back for reading
sta OutputFlags,x
jmp waitRead
readByte:
lda InputByte,x
pha
@ -267,3 +278,9 @@ restoreChar:
sta (BasL),y
lda TextPage1
rts
Text:
.byte "Apple2-IO-RPi Shell Version 000D",$8d
.byte "(c)2020-2022 Terence J. Boldt",$8d
.byte $8d
.byte $00

Binary file not shown.

View File

@ -1,4 +1,4 @@
ca65 V2.18 - N/A
ca65 V2.18 - Raspbian 2.19-1
Main file : Shell.asm
Current file: Shell.asm
@ -91,184 +91,205 @@ Current file: Shell.asm
002028 1 0A asl
002029 1 AA tax
00202A 1 18 clc
00202B 1 90 04 bcc Start
00202B 1 90 04 bcc Init
00202D 1 nextSlot:
00202D 1 CA dex
00202E 1 D0 D2 bne DetectSlot
002030 1 60 rts
002031 1 Start:
002031 1
002031 1 Init:
002031 1 A9 8D lda #$8d
002033 1 20 00 C3 jsr $c300 ; force 80 columns
002036 1 A5 06 lda LastChar
002038 1 48 pha
002039 1 2C 10 C0 bit ClearKeyboard
00203C 1 A9 00 lda #ResetCommand
00203E 1 20 D7 20 jsr SendByte
002041 1 A9 09 lda #ShellCommand
002043 1 20 D7 20 jsr SendByte
002046 1 20 52 20 jsr DumpOutput
002049 1 A9 00 lda #ResetCommand
00204B 1 20 D7 20 jsr SendByte
00204E 1 68 pla
00204F 1 85 06 sta LastChar
002051 1 60 rts
002052 1
002052 1 DumpOutput:
002052 1 20 F5 20 jsr GetByte
002055 1 B0 2A bcs checkInput
002057 1 C9 00 cmp #$00
002059 1 F0 39 beq endOutput
00205B 1 48 pha
00205C 1 20 54 21 jsr ClearCursor
00205F 1 68 pla
002060 1 C9 48 cmp #'H'
002062 1 F0 3A beq setColumn
002064 1 C9 56 cmp #'V'
002066 1 F0 44 beq setRow
002068 1 C9 43 cmp #'C'
00206A 1 F0 29 beq clearScreen
00206C 1 C9 54 cmp #'T'
00206E 1 F0 4A beq setTop
002070 1 C9 42 cmp #'B'
002072 1 F0 4E beq setBottom
002074 1 C9 55 cmp #'U'
002076 1 F0 52 beq moveUp
002078 1 20 ED FD jsr PrintChar
00207B 1 20 23 21 jsr SetCursor
00207E 1 4C 52 20 jmp DumpOutput
002081 1 checkInput:
002081 1 2C 00 C0 bit Keyboard ;check for keypress
002084 1 10 CC bpl DumpOutput ;keep dumping output if no keypress
002086 1 AD 00 C0 lda Keyboard ;send keypress to RPi
002089 1 29 7F and #$7f
00208B 1 20 D7 20 jsr SendByte
00208E 1 2C 10 C0 bit ClearKeyboard
002091 1 4C 52 20 jmp DumpOutput
002094 1 endOutput:
002094 1 60 rts
002095 1 clearScreen:
002095 1 20 58 FC jsr Home
002098 1 20 23 21 jsr SetCursor
00209B 1 4C 52 20 jmp DumpOutput
00209E 1 setColumn:
00209E 1 20 F5 20 jsr GetByte
0020A1 1 85 24 sta htab
0020A3 1 8D 7B 05 sta htab80
0020A6 1 20 23 21 jsr SetCursor
0020A9 1 4C 52 20 jmp DumpOutput
0020AC 1 setRow:
0020AC 1 20 F5 20 jsr GetByte
0020AF 1 85 25 sta vtab
0020B1 1 20 C1 FB jsr BasCalc
0020B4 1 20 23 21 jsr SetCursor
0020B7 1 4C 52 20 jmp DumpOutput
0020BA 1 setTop:
0020BA 1 20 F5 20 jsr GetByte
0020BD 1 85 22 sta $22
0020BF 1 4C 52 20 jmp DumpOutput
0020C2 1 setBottom:
0020C2 1 20 F5 20 jsr GetByte
0020C5 1 85 23 sta $23
0020C7 1 4C 52 20 jmp DumpOutput
0020CA 1 moveUp:
0020CA 1 C6 25 dec vtab
0020CC 1 A5 25 lda vtab
0020CE 1 20 C1 FB jsr BasCalc
0020D1 1 20 23 21 jsr SetCursor
0020D4 1 4C 52 20 jmp DumpOutput
0020D7 1
0020D7 1 SendByte:
0020D7 1 48 pha
0020D8 1 waitWrite:
0020D8 1 BD 8B C0 lda InputFlags,x
0020DB 1 2A rol
0020DC 1 2A rol
0020DD 1 B0 F9 bcs waitWrite
0020DF 1 68 pla
0020E0 1 9D 8D C0 sta OutputByte,x
0020E3 1 A9 1E lda #$1e ; set bit 0 low to indicate write started
0020E5 1 9D 87 C0 sta OutputFlags,x
0020E8 1 finishWrite:
0020E8 1 BD 8B C0 lda InputFlags,x
0020EB 1 2A rol
0020EC 1 2A rol
0020ED 1 90 F9 bcc finishWrite
0020EF 1 A9 1F lda #$1f
002036 1
002036 1 A0 00 ldy #$00
002038 1 PrintString:
002038 1 B9 76 21 lda Text,y
00203B 1 F0 08 beq Start
00203D 1 09 80 ora #$80
00203F 1 20 ED FD jsr PrintChar
002042 1 C8 iny
002043 1 D0 F3 bne PrintString
002045 1
002045 1 Start:
002045 1 A5 06 lda LastChar
002047 1 48 pha
002048 1 2C 10 C0 bit ClearKeyboard
00204B 1 A9 00 lda #ResetCommand
00204D 1 20 D1 20 jsr SendByte
002050 1 A9 09 lda #ShellCommand
002052 1 20 D1 20 jsr SendByte
002055 1 20 61 20 jsr DumpOutput
002058 1 A9 00 lda #ResetCommand
00205A 1 20 D1 20 jsr SendByte
00205D 1 68 pla
00205E 1 85 06 sta LastChar
002060 1 60 rts
002061 1
002061 1 DumpOutput:
002061 1 20 EF 20 jsr GetByte
002064 1 C9 00 cmp #$00
002066 1 F0 26 beq endOutput
002068 1 48 pha
002069 1 20 61 21 jsr ClearCursor
00206C 1 68 pla
00206D 1 C9 48 cmp #'H'
00206F 1 F0 27 beq setColumn
002071 1 C9 56 cmp #'V'
002073 1 F0 31 beq setRow
002075 1 C9 43 cmp #'C'
002077 1 F0 16 beq clearScreen
002079 1 C9 54 cmp #'T'
00207B 1 F0 37 beq setTop
00207D 1 C9 42 cmp #'B'
00207F 1 F0 3B beq setBottom
002081 1 C9 55 cmp #'U'
002083 1 F0 3F beq moveUp
002085 1 20 ED FD jsr PrintChar
002088 1 20 30 21 jsr SetCursor
00208B 1 4C 61 20 jmp DumpOutput
00208E 1 endOutput:
00208E 1 60 rts
00208F 1 clearScreen:
00208F 1 20 58 FC jsr Home
002092 1 20 30 21 jsr SetCursor
002095 1 4C 61 20 jmp DumpOutput
002098 1 setColumn:
002098 1 20 EF 20 jsr GetByte
00209B 1 85 24 sta htab
00209D 1 8D 7B 05 sta htab80
0020A0 1 20 30 21 jsr SetCursor
0020A3 1 4C 61 20 jmp DumpOutput
0020A6 1 setRow:
0020A6 1 20 EF 20 jsr GetByte
0020A9 1 85 25 sta vtab
0020AB 1 20 C1 FB jsr BasCalc
0020AE 1 20 30 21 jsr SetCursor
0020B1 1 4C 61 20 jmp DumpOutput
0020B4 1 setTop:
0020B4 1 20 EF 20 jsr GetByte
0020B7 1 85 22 sta $22
0020B9 1 4C 61 20 jmp DumpOutput
0020BC 1 setBottom:
0020BC 1 20 EF 20 jsr GetByte
0020BF 1 85 23 sta $23
0020C1 1 4C 61 20 jmp DumpOutput
0020C4 1 moveUp:
0020C4 1 C6 25 dec vtab
0020C6 1 A5 25 lda vtab
0020C8 1 20 C1 FB jsr BasCalc
0020CB 1 20 30 21 jsr SetCursor
0020CE 1 4C 61 20 jmp DumpOutput
0020D1 1
0020D1 1 SendByte:
0020D1 1 48 pha
0020D2 1 waitWrite:
0020D2 1 BD 8B C0 lda InputFlags,x
0020D5 1 2A rol
0020D6 1 2A rol
0020D7 1 B0 F9 bcs waitWrite
0020D9 1 68 pla
0020DA 1 9D 8D C0 sta OutputByte,x
0020DD 1 A9 1E lda #$1e ; set bit 0 low to indicate write started
0020DF 1 9D 87 C0 sta OutputFlags,x
0020E2 1 finishWrite:
0020E2 1 BD 8B C0 lda InputFlags,x
0020E5 1 2A rol
0020E6 1 2A rol
0020E7 1 90 F9 bcc finishWrite
0020E9 1 A9 1F lda #$1f
0020EB 1 9D 87 C0 sta OutputFlags,x
0020EE 1 60 rts
0020EF 1
0020EF 1 GetByte:
0020EF 1 A9 1D lda #$1d ;set read flag low
0020F1 1 9D 87 C0 sta OutputFlags,x
0020F4 1 60 rts
0020F5 1
0020F5 1 GetByte:
0020F5 1 2C 00 C0 bit Keyboard ; skip byte read if key pressed
0020F8 1 90 10 bcc keyPressed
0020FA 1 A9 1D lda #$1d ;set read flag low
0020FC 1 9D 87 C0 sta OutputFlags,x
0020FF 1 waitRead:
0020FF 1 BD 8B C0 lda InputFlags,x
002102 1 2A rol
002103 1 90 0C bcc readByte
002105 1 2C 00 C0 bit Keyboard ;keypress will abort waiting to read
002108 1 10 F5 bpl waitRead
00210A 1 keyPressed:
00210A 1 A9 1F lda #$1f ;set all flags high and exit
0020F4 1 waitRead:
0020F4 1 BD 8B C0 lda InputFlags,x
0020F7 1 2A rol
0020F8 1 90 24 bcc readByte
0020FA 1 2C 00 C0 bit Keyboard ;keypress will abort waiting to read
0020FD 1 10 F5 bpl waitRead
0020FF 1 keyPressed:
0020FF 1 AD 00 C0 lda Keyboard ;send keypress to RPi
002102 1 29 7F and #$7f
002104 1 9D 8D C0 sta OutputByte,x
002107 1 2C 10 C0 bit ClearKeyboard
00210A 1 A9 1C lda #$1c ;set write flag low too
00210C 1 9D 87 C0 sta OutputFlags,x
00210F 1 38 sec ;failure
002110 1 60 rts
002111 1 readByte:
002111 1 BD 8E C0 lda InputByte,x
002114 1 48 pha
002115 1 A9 1F lda #$1f ;set all flags high
002117 1 9D 87 C0 sta OutputFlags,x
00211A 1 finishRead:
00211A 1 BD 8B C0 lda InputFlags,x
00211D 1 2A rol
00211E 1 90 FA bcc finishRead
002120 1 68 pla
002121 1 18 clc ;success
002122 1 end:
002122 1 60 rts
002123 1
002123 1 SetCursor:
002123 1 AD 7B 05 lda htab80 ;get horizontal location / 2
002126 1 4A lsr
002127 1 A8 tay
002128 1 AD 55 C0 lda TextPage2
00212B 1 90 03 bcc setChar
00212D 1 AD 54 C0 lda TextPage1
002130 1 setChar:
002130 1 B1 28 lda (BasL),y
002132 1 85 06 sta LastChar ; save so ClearCursor will pick it up
002134 1 C9 E0 cmp #$e0
002136 1 10 0C bpl lowerCase
002138 1 C9 C0 cmp #$c0
00213A 1 10 0D bpl upperCase
00213C 1 C9 A0 cmp #$a0
00213E 1 10 04 bpl symbol
002140 1 C9 80 cmp #$80
002142 1 10 0A bpl noop
002144 1 symbol:
002144 1 lowerCase:
002144 1 invert:
002144 1 49 80 eor #$80
002146 1 4C 4E 21 jmp storeChar
002149 1 upperCase:
002149 1 29 1F and #$1f
00214B 1 4C 4E 21 jmp storeChar
00214E 1 noop:
00214E 1 storeChar:
00214E 1 91 28 sta (BasL),y
002150 1 AD 54 C0 lda TextPage1
002153 1 60 rts
002154 1
002154 1 ClearCursor:
002154 1 AD 7B 05 lda htab80 ;get horizontal location / 2
002157 1 4A lsr
002158 1 A8 tay
002159 1 AD 55 C0 lda TextPage2
00215C 1 90 03 bcc restoreChar
00215E 1 AD 54 C0 lda TextPage1
002161 1 restoreChar:
002161 1 A5 06 lda LastChar
002163 1 91 28 sta (BasL),y
002165 1 AD 54 C0 lda TextPage1
002168 1 60 rts
002168 1
00210F 1 finishKeyPress:
00210F 1 BD 8B C0 lda InputFlags,x
002112 1 2A rol
002113 1 2A rol
002114 1 90 F9 bcc finishKeyPress
002116 1 A9 1D lda #$1d ;set flags back for reading
002118 1 9D 87 C0 sta OutputFlags,x
00211B 1 4C F4 20 jmp waitRead
00211E 1 readByte:
00211E 1 BD 8E C0 lda InputByte,x
002121 1 48 pha
002122 1 A9 1F lda #$1f ;set all flags high
002124 1 9D 87 C0 sta OutputFlags,x
002127 1 finishRead:
002127 1 BD 8B C0 lda InputFlags,x
00212A 1 2A rol
00212B 1 90 FA bcc finishRead
00212D 1 68 pla
00212E 1 18 clc ;success
00212F 1 end:
00212F 1 60 rts
002130 1
002130 1 SetCursor:
002130 1 AD 7B 05 lda htab80 ;get horizontal location / 2
002133 1 4A lsr
002134 1 A8 tay
002135 1 AD 55 C0 lda TextPage2
002138 1 90 03 bcc setChar
00213A 1 AD 54 C0 lda TextPage1
00213D 1 setChar:
00213D 1 B1 28 lda (BasL),y
00213F 1 85 06 sta LastChar ; save so ClearCursor will pick it up
002141 1 C9 E0 cmp #$e0
002143 1 10 0C bpl lowerCase
002145 1 C9 C0 cmp #$c0
002147 1 10 0D bpl upperCase
002149 1 C9 A0 cmp #$a0
00214B 1 10 04 bpl symbol
00214D 1 C9 80 cmp #$80
00214F 1 10 0A bpl noop
002151 1 symbol:
002151 1 lowerCase:
002151 1 invert:
002151 1 49 80 eor #$80
002153 1 4C 5B 21 jmp storeChar
002156 1 upperCase:
002156 1 29 1F and #$1f
002158 1 4C 5B 21 jmp storeChar
00215B 1 noop:
00215B 1 storeChar:
00215B 1 91 28 sta (BasL),y
00215D 1 AD 54 C0 lda TextPage1
002160 1 60 rts
002161 1
002161 1 ClearCursor:
002161 1 AD 7B 05 lda htab80 ;get horizontal location / 2
002164 1 4A lsr
002165 1 A8 tay
002166 1 AD 55 C0 lda TextPage2
002169 1 90 03 bcc restoreChar
00216B 1 AD 54 C0 lda TextPage1
00216E 1 restoreChar:
00216E 1 A5 06 lda LastChar
002170 1 91 28 sta (BasL),y
002172 1 AD 54 C0 lda TextPage1
002175 1 60 rts
002176 1
002176 1 Text:
002176 1 41 70 70 6C .byte "Apple2-IO-RPi Shell Version 000D",$8d
00217A 1 65 32 2D 49
00217E 1 4F 2D 52 50
002197 1 28 63 29 32 .byte "(c)2020-2022 Terence J. Boldt",$8d
00219B 1 30 32 30 2D
00219F 1 32 30 32 32
0021B5 1 8D .byte $8d
0021B6 1 00 .byte $00
0021B6 1

57
Apple2/compare.sh Executable file
View File

@ -0,0 +1,57 @@
#!/bin/sh
ca65 DriveFirmware.asm -D SLOT=0 -o DriveSlot0.o || exit 1
ca65 DriveFirmware.asm -D SLOT=1 -o DriveSlot1.o || exit 1
ca65 DriveFirmware.asm -D SLOT=2 -o DriveSlot2.o || exit 1
ca65 DriveFirmware.asm -D SLOT=3 -o DriveSlot3.o || exit 1
ca65 DriveFirmware.asm -D SLOT=4 -o DriveSlot4.o || exit 1
ca65 DriveFirmware.asm -D SLOT=5 -o DriveSlot5.o || exit 1
ca65 DriveFirmware.asm -D SLOT=6 -o DriveSlot6.o || exit 1
ca65 DriveFirmware.asm -D SLOT=7 -o DriveSlot7.o --listing DriveFirmware.lst.new --list-bytes 255 || exit 1
ld65 DriveSlot0.o DriveSlot1.o DriveSlot2.o DriveSlot3.o DriveSlot4.o DriveSlot5.o DriveSlot6.o DriveSlot7.o -o DriveFirmware.bin.new -C ../.cicd/none.cfg || exit 1
ca65 MenuFirmware.asm -D SLOT=0 -o MenuSlot0.o || exit 1
ca65 MenuFirmware.asm -D SLOT=1 -o MenuSlot1.o || exit 1
ca65 MenuFirmware.asm -D SLOT=2 -o MenuSlot2.o || exit 1
ca65 MenuFirmware.asm -D SLOT=3 -o MenuSlot3.o || exit 1
ca65 MenuFirmware.asm -D SLOT=4 -o MenuSlot4.o || exit 1
ca65 MenuFirmware.asm -D SLOT=5 -o MenuSlot5.o || exit 1
ca65 MenuFirmware.asm -D SLOT=6 -o MenuSlot6.o || exit 1
ca65 MenuFirmware.asm -D SLOT=7 -o MenuSlot7.o --listing MenuFirmware.lst.new --list-bytes 255 || exit 1
ld65 MenuSlot0.o MenuSlot1.o MenuSlot2.o MenuSlot3.o MenuSlot4.o MenuSlot5.o MenuSlot6.o MenuSlot7.o -o MenuFirmware.bin.new -C ../.cicd/none.cfg || exit 1
ca65 CommandFirmware.asm -D SLOT=0 -o CommandSlot0.o || exit 1
ca65 CommandFirmware.asm -D SLOT=1 -o CommandSlot1.o || exit 1
ca65 CommandFirmware.asm -D SLOT=2 -o CommandSlot2.o || exit 1
ca65 CommandFirmware.asm -D SLOT=3 -o CommandSlot3.o || exit 1
ca65 CommandFirmware.asm -D SLOT=4 -o CommandSlot4.o || exit 1
ca65 CommandFirmware.asm -D SLOT=5 -o CommandSlot5.o || exit 1
ca65 CommandFirmware.asm -D SLOT=6 -o CommandSlot6.o || exit 1
ca65 CommandFirmware.asm -D SLOT=7 -o CommandSlot7.o --listing CommandFirmware.lst.new --list-bytes 255 || exit 1
ld65 CommandSlot0.o CommandSlot1.o CommandSlot2.o CommandSlot3.o CommandSlot4.o CommandSlot5.o CommandSlot6.o CommandSlot7.o -o CommandFirmware.bin.new -C ../.cicd/none.cfg || exit 1
ca65 FileAccessFirmware.asm -D SLOT=0 -o FileAccessSlot0.o || exit 1
ca65 FileAccessFirmware.asm -D SLOT=1 -o FileAccessSlot1.o || exit 1
ca65 FileAccessFirmware.asm -D SLOT=2 -o FileAccessSlot2.o || exit 1
ca65 FileAccessFirmware.asm -D SLOT=3 -o FileAccessSlot3.o || exit 1
ca65 FileAccessFirmware.asm -D SLOT=4 -o FileAccessSlot4.o || exit 1
ca65 FileAccessFirmware.asm -D SLOT=5 -o FileAccessSlot5.o || exit 1
ca65 FileAccessFirmware.asm -D SLOT=6 -o FileAccessSlot6.o || exit 1
ca65 FileAccessFirmware.asm -D SLOT=7 -o FileAccessSlot7.o --listing FileAccessFirmware.lst.new --list-bytes 255 || exit 1
ld65 FileAccessSlot0.o FileAccessSlot1.o FileAccessSlot2.o FileAccessSlot3.o FileAccessSlot4.o FileAccessSlot5.o FileAccessSlot6.o FileAccessSlot7.o -o FileAccessFirmware.bin.new -C ../.cicd/none.cfg || exit 1
cat \
DriveFirmware.bin.new CommandFirmware.bin.new FileAccessFirmware.bin.new MenuFirmware.bin.new \
> AT28C64B.bin.new
ca65 Shell.asm -o Shell.o --listing Shell.lst.new || exit 1
ld65 Shell.o -o Shell.bin.new -C ../.cicd/none.cfg || exit 1
ca65 RPi.Command.asm -o RPi.Command.o --listing RPi.Command.lst.new || exit 1
ld65 RPi.Command.o -o RPi.Command.bin.new -C ../.cicd/none.cfg || exit 1
rm ./*.o
diff RPi.Command.bin RPi.Command.bin.new || exit 1
diff AT28C64B.bin AT28C64B.bin.new || exit 1
diff Shell.bin Shell.bin.new || exit 1
rm ./*.new

View File

@ -1,214 +1,275 @@
(module "Connector:Apple II Expansion Edge Connector" (layer F.Cu) (tedit 5CA41682)
(fp_text reference REF** (at 0 0.5) (layer F.SilkS)
(footprint "Apple II Expansion Edge Connector" (version 20211014) (generator pcbnew)
(layer "F.Cu")
(tedit 62126271)
(attr through_hole)
(fp_text reference "REF**" (at 0 0.5) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)))
(tstamp 2d345aa1-b8a7-433b-98bf-3fb90d3260bf)
)
(fp_text value "Apple II Expansion Edge Connector" (at 9.652 -5.08) (layer F.Fab)
(fp_text value "Apple II Expansion Edge Connector" (at 9.652 -5.08) (layer "F.Fab")
(effects (font (size 1 1) (thickness 0.15)))
(tstamp cb7c1e3e-a32d-43a8-bf93-cbb15668bf6c)
)
(fp_text user "26 GND" (at 45.974 10.922 45) (layer F.Fab)
(fp_text user "24 DMA OUT" (at 46.609 -1.524 45) (layer "F.Fab")
(effects (font (size 0.762 0.762) (thickness 0.127)))
(tstamp 0db76d9f-bfa1-4ba2-a00c-8635e5b902ca)
)
(fp_text user "27 DMA IN" (at 42.799 11.43 45) (layer F.Fab)
(fp_text user "20 _I/O STROBE" (at 37.084 -2.413 45) (layer "F.Fab")
(effects (font (size 0.762 0.762) (thickness 0.127)))
(tstamp 181378e8-7102-4a44-b001-45175260beb8)
)
(fp_text user "28 INT IN" (at 40.386 11.303 45) (layer F.Fab)
(fp_text user "33 -12V" (at 27.813 11.176 45) (layer "F.Fab")
(effects (font (size 0.762 0.762) (thickness 0.127)))
(tstamp 18fe078b-d967-4c6b-9117-28649814e048)
)
(fp_text user "29 _NMI" (at 38.1 10.922 45) (layer F.Fab)
(fp_text user "38 @1" (at 15.621 10.541 45) (layer "F.Fab")
(effects (font (size 0.762 0.762) (thickness 0.127)))
(tstamp 1ccc5f53-065b-44e2-aaf9-75fe664f1207)
)
(fp_text user "30 _IRQ" (at 35.687 10.922 45) (layer F.Fab)
(fp_text user "26 GND" (at 45.974 10.922 45) (layer "F.Fab")
(effects (font (size 0.762 0.762) (thickness 0.127)))
(tstamp 23a565f8-c512-42e3-b944-2b21cc7ef5bf)
)
(fp_text user "31 _RES" (at 33.02 10.922 45) (layer F.Fab)
(fp_text user "22 _DMA" (at 40.767 -0.762 45) (layer "F.Fab")
(effects (font (size 0.762 0.762) (thickness 0.127)))
(tstamp 28b810e6-86c9-4816-91ac-c7dd9aeeded4)
)
(fp_text user "32 _INH" (at 30.607 10.922 45) (layer F.Fab)
(fp_text user "41 _DEVICE SELECT" (at 5.334 13.335 45) (layer "F.Fab")
(effects (font (size 0.762 0.762) (thickness 0.127)))
(tstamp 2fe78e00-e5a1-4316-afef-41db388c5a0e)
)
(fp_text user "33 -12V" (at 27.813 11.176 45) (layer F.Fab)
(fp_text user "35 N.C." (at 23.368 10.541 45) (layer "F.Fab")
(effects (font (size 0.762 0.762) (thickness 0.127)))
(tstamp 421f3112-b7c7-4f4b-9121-a3cf0cf0597e)
)
(fp_text user "34 -5V" (at 25.527 10.922 45) (layer F.Fab)
(fp_text user "21 RDY" (at 37.973 -0.508 45) (layer "F.Fab")
(effects (font (size 0.762 0.762) (thickness 0.127)))
(tstamp 4b896d13-4f14-497d-8365-9269eb3a035e)
)
(fp_text user "35 N.C." (at 23.368 10.541 45) (layer F.Fab)
(fp_text user "4 A2" (at -5.588 0.127 45) (layer "F.Fab")
(effects (font (size 0.762 0.762) (thickness 0.127)))
(tstamp 4da3fa1f-77fd-49c6-99f5-f367e9469b24)
)
(fp_text user "36 7M" (at 20.701 10.541 45) (layer F.Fab)
(fp_text user "50 +12V" (at -15.494 11.43 45) (layer "F.Fab")
(effects (font (size 0.762 0.762) (thickness 0.127)))
(tstamp 52c67bfb-3c57-422e-8d95-2ce65bc81bcf)
)
(fp_text user "37 Q3" (at 18.161 10.541 45) (layer F.Fab)
(fp_text user "47 D2" (at -7.239 10.541 45) (layer "F.Fab")
(effects (font (size 0.762 0.762) (thickness 0.127)))
(tstamp 5bd3f15a-7f87-4a76-aa9b-753562cb7685)
)
(fp_text user "38 @1" (at 15.621 10.541 45) (layer F.Fab)
(fp_text user "9 A7" (at 6.985 0 45) (layer "F.Fab")
(effects (font (size 0.762 0.762) (thickness 0.127)))
(tstamp 5c74d6fb-45e5-4b04-a6d8-73b55ca609c6)
)
(fp_text user "39 USER 1" (at 12.192 11.43 45) (layer F.Fab)
(fp_text user "10 A8" (at 9.779 -0.254 45) (layer "F.Fab")
(effects (font (size 0.762 0.762) (thickness 0.127)))
(tstamp 5dad2f49-52bf-4323-96cd-ba936cc8db69)
)
(fp_text user "40 @0" (at 10.414 10.541 45) (layer F.Fab)
(fp_text user "30 _IRQ" (at 35.687 10.922 45) (layer "F.Fab")
(effects (font (size 0.762 0.762) (thickness 0.127)))
(tstamp 5f537d37-3073-4dfe-a1f3-999663d80c70)
)
(fp_text user "41 _DEVICE SELECT" (at 5.334 13.335 45) (layer F.Fab)
(fp_text user "5 A3" (at -3.048 0 45) (layer "F.Fab")
(effects (font (size 0.762 0.762) (thickness 0.127)))
(tstamp 682d5db4-e756-4510-9849-aca6de3105dd)
)
(fp_text user "42 D7" (at 5.461 10.541 45) (layer F.Fab)
(fp_text user "18 R/W" (at 30.48 -0.635 45) (layer "F.Fab")
(effects (font (size 0.762 0.762) (thickness 0.127)))
(tstamp 6a3ac14c-4a85-4667-966a-7d0148472c12)
)
(fp_text user "43 D6" (at 2.921 10.541 45) (layer F.Fab)
(fp_text user "14 A12" (at 20.193 -0.508 45) (layer "F.Fab")
(effects (font (size 0.762 0.762) (thickness 0.127)))
(tstamp 6bb2e188-fcfa-466e-af33-ec436d238245)
)
(fp_text user "44 D5" (at 0.508 10.541 45) (layer F.Fab)
(fp_text user "36 7M" (at 20.701 10.541 45) (layer "F.Fab")
(effects (font (size 0.762 0.762) (thickness 0.127)))
(tstamp 72616612-d502-4e5c-8d3c-0e1b715fac0b)
)
(fp_text user "45 D4" (at -2.159 10.541 45) (layer F.Fab)
(fp_text user "1 _I/O SELECT" (at -11.303 -2.032 45) (layer "F.Fab")
(effects (font (size 0.762 0.762) (thickness 0.127)))
(tstamp 72d6ed73-8d3e-437e-84b2-89005b784042)
)
(fp_text user "46 D3" (at -4.699 10.541 45) (layer F.Fab)
(fp_text user "17 A15" (at 27.813 -0.508 45) (layer "F.Fab")
(effects (font (size 0.762 0.762) (thickness 0.127)))
(tstamp 769f7a46-cfeb-4436-9562-bd91b8bb4f86)
)
(fp_text user "47 D2" (at -7.239 10.541 45) (layer F.Fab)
(fp_text user "37 Q3" (at 18.161 10.541 45) (layer "F.Fab")
(effects (font (size 0.762 0.762) (thickness 0.127)))
(tstamp 77435bfb-f684-4a28-b3ff-81961a6fba7b)
)
(fp_text user "48 D1" (at -9.906 10.541 45) (layer F.Fab)
(fp_text user "7 A5" (at 1.905 0 45) (layer "F.Fab")
(effects (font (size 0.762 0.762) (thickness 0.127)))
(tstamp 7842b5fe-f647-432a-8030-31226295c8c8)
)
(fp_text user "25 +5V" (at 48.26 -0.635 45) (layer F.Fab)
(fp_text user "3 A1" (at -8.128 -0.127 45) (layer "F.Fab")
(effects (font (size 0.762 0.762) (thickness 0.127)))
(tstamp 7e6bda94-f514-4d1a-bfa0-706ffa7f3689)
)
(fp_text user "24 DMA OUT" (at 46.609 -1.524 45) (layer F.Fab)
(fp_text user "2 A0" (at -10.668 -0.127 45) (layer "F.Fab")
(effects (font (size 0.762 0.762) (thickness 0.127)))
(tstamp 876538c4-9b2c-47e3-ba34-df230a80c897)
)
(fp_text user "23 INT OUT" (at 43.942 -1.397 45) (layer F.Fab)
(fp_text user "31 _RES" (at 33.02 10.922 45) (layer "F.Fab")
(effects (font (size 0.762 0.762) (thickness 0.127)))
(tstamp 92175624-00e7-4867-8c25-c34e7f6d0203)
)
(fp_text user "22 _DMA" (at 40.767 -0.762 45) (layer F.Fab)
(fp_text user "45 D4" (at -2.159 10.541 45) (layer "F.Fab")
(effects (font (size 0.762 0.762) (thickness 0.127)))
(tstamp 9bb71c85-174b-4e68-b9a7-85735fbf335e)
)
(fp_text user "21 RDY" (at 37.973 -0.508 45) (layer F.Fab)
(fp_text user "15 A13" (at 22.733 -0.508 45) (layer "F.Fab")
(effects (font (size 0.762 0.762) (thickness 0.127)))
(tstamp 9fbc9d84-4a3d-4b63-b1f4-b4dd3ec849e9)
)
(fp_text user "20 _I/O STROBE" (at 37.084 -2.413 45) (layer F.Fab)
(fp_text user "19 N.C." (at 32.893 -0.635 45) (layer "F.Fab")
(effects (font (size 0.762 0.762) (thickness 0.127)))
(tstamp a059b8ed-fc88-4fcf-86c9-17e17afdc401)
)
(fp_text user "19 N.C." (at 32.893 -0.635 45) (layer F.Fab)
(fp_text user "40 @0" (at 10.414 10.541 45) (layer "F.Fab")
(effects (font (size 0.762 0.762) (thickness 0.127)))
(tstamp a2c88edb-de77-4fcd-9cc0-119965935e0e)
)
(fp_text user "18 R/W" (at 30.48 -0.635 45) (layer F.Fab)
(fp_text user "43 D6" (at 2.921 10.541 45) (layer "F.Fab")
(effects (font (size 0.762 0.762) (thickness 0.127)))
(tstamp a9954503-95f3-4450-9100-fb8bf25630ac)
)
(fp_text user "16 A14" (at 25.273 -0.508 45) (layer F.Fab)
(fp_text user "13 A11" (at 17.653 -0.508 45) (layer "F.Fab")
(effects (font (size 0.762 0.762) (thickness 0.127)))
(tstamp abd5b1f8-417b-4e4b-bb91-50def48c6e7b)
)
(fp_text user "17 A15" (at 27.813 -0.508 45) (layer F.Fab)
(fp_text user "11 A9" (at 12.319 -0.254 45) (layer "F.Fab")
(effects (font (size 0.762 0.762) (thickness 0.127)))
(tstamp ac1aacfb-16d3-472f-b5b3-b171dfe254ac)
)
(fp_text user "14 A12" (at 20.193 -0.508 45) (layer F.Fab)
(fp_text user "29 _NMI" (at 38.1 10.922 45) (layer "F.Fab")
(effects (font (size 0.762 0.762) (thickness 0.127)))
(tstamp ad785633-1fa5-4259-9e5f-ec4546c55a2a)
)
(fp_text user "15 A13" (at 22.733 -0.508 45) (layer F.Fab)
(fp_text user "49 D0" (at -12.446 10.668 45) (layer "F.Fab")
(effects (font (size 0.762 0.762) (thickness 0.127)))
(tstamp ae91f302-2fb7-47ca-b2fd-7d2f7c21f30b)
)
(fp_text user "13 A11" (at 17.653 -0.508 45) (layer F.Fab)
(fp_text user "28 INT IN" (at 40.386 11.303 45) (layer "F.Fab")
(effects (font (size 0.762 0.762) (thickness 0.127)))
(tstamp aebbbda9-299a-49ff-9338-8f25d5336c0d)
)
(fp_text user "12 A10" (at 15.113 -0.508 45) (layer F.Fab)
(fp_text user "12 A10" (at 15.113 -0.508 45) (layer "F.Fab")
(effects (font (size 0.762 0.762) (thickness 0.127)))
(tstamp ba907e0d-2755-4208-ab9b-bc3b980814be)
)
(fp_text user "11 A9" (at 12.319 -0.254 45) (layer F.Fab)
(fp_text user "23 INT OUT" (at 43.942 -1.397 45) (layer "F.Fab")
(effects (font (size 0.762 0.762) (thickness 0.127)))
(tstamp cf64d670-6662-45b3-ae8c-a24f393e28a8)
)
(fp_text user "10 A8" (at 9.779 -0.254 45) (layer F.Fab)
(fp_text user "8 A6" (at 4.445 0 45) (layer "F.Fab")
(effects (font (size 0.762 0.762) (thickness 0.127)))
(tstamp d1f57772-5ce6-4b85-bd55-bf5b4526514f)
)
(fp_poly (pts (xy 48.895 8.89) (xy 48.895 1.27) (xy -15.875 1.27) (xy -15.875 8.89)) (layer B.Mask) (width 0.15))
(fp_poly (pts (xy 48.895 8.89) (xy 48.895 1.27) (xy -15.875 1.27) (xy -15.875 8.89)) (layer F.Mask) (width 0.15))
(fp_text user "50 +12V" (at -15.494 11.43 45) (layer F.Fab)
(fp_text user "25 +5V" (at 48.26 -0.635 45) (layer "F.Fab")
(effects (font (size 0.762 0.762) (thickness 0.127)))
(tstamp d2e4721d-0955-4b34-ac5d-27599b04c077)
)
(fp_text user "1 _I/O SELECT" (at -11.303 -2.032 45) (layer F.Fab)
(fp_text user "44 D5" (at 0.508 10.541 45) (layer "F.Fab")
(effects (font (size 0.762 0.762) (thickness 0.127)))
(tstamp d682aa65-e29a-46ce-8d4f-dd4934c5442a)
)
(fp_text user "3 A1" (at -8.128 -0.127 45) (layer F.Fab)
(fp_text user "48 D1" (at -9.906 10.541 45) (layer "F.Fab")
(effects (font (size 0.762 0.762) (thickness 0.127)))
(tstamp d9551730-80bd-48ee-bf3f-a3342890e676)
)
(fp_text user "5 A3" (at -3.048 0 45) (layer F.Fab)
(fp_text user "42 D7" (at 5.461 10.541 45) (layer "F.Fab")
(effects (font (size 0.762 0.762) (thickness 0.127)))
(tstamp e78e4c02-edf4-4274-aaca-5bceeb078844)
)
(fp_text user "4 A2" (at -5.588 0.127 45) (layer F.Fab)
(fp_text user "34 -5V" (at 25.527 10.922 45) (layer "F.Fab")
(effects (font (size 0.762 0.762) (thickness 0.127)))
(tstamp ea2e338d-b9c8-4965-a217-a9a6c3864d0b)
)
(fp_text user "49 D0" (at -12.446 10.668 45) (layer F.Fab)
(fp_text user "39 USER 1" (at 12.192 11.43 45) (layer "F.Fab")
(effects (font (size 0.762 0.762) (thickness 0.127)))
(tstamp eda8dd6b-776b-4c37-9caa-384399f3bf1f)
)
(fp_text user "2 A0" (at -10.668 -0.127 45) (layer F.Fab)
(fp_text user "32 _INH" (at 30.607 10.922 45) (layer "F.Fab")
(effects (font (size 0.762 0.762) (thickness 0.127)))
(tstamp ee84e57e-4161-403d-9a75-3302acb4f0d2)
)
(fp_text user "8 A6" (at 4.445 0 45) (layer F.Fab)
(fp_text user "46 D3" (at -4.699 10.541 45) (layer "F.Fab")
(effects (font (size 0.762 0.762) (thickness 0.127)))
(tstamp ef6d89e8-baea-4aba-9b87-0c0cc61deae7)
)
(fp_text user "6 A4" (at -0.635 0 45) (layer F.Fab)
(fp_text user "16 A14" (at 25.273 -0.508 45) (layer "F.Fab")
(effects (font (size 0.762 0.762) (thickness 0.127)))
(tstamp f7c813ff-d2fc-4492-8158-0c95f20233ed)
)
(fp_text user "9 A7" (at 6.985 0 45) (layer F.Fab)
(fp_text user "6 A4" (at -0.635 0 45) (layer "F.Fab")
(effects (font (size 0.762 0.762) (thickness 0.127)))
(tstamp f7de8750-f82b-4a0f-bf9b-94727646f22a)
)
(fp_text user "7 A5" (at 1.905 0 45) (layer F.Fab)
(fp_text user "27 DMA IN" (at 42.799 11.43 45) (layer "F.Fab")
(effects (font (size 0.762 0.762) (thickness 0.127)))
(tstamp fa924129-6767-4560-b59b-3a02d5fe5c1c)
)
(fp_line (start -15.875 1.27) (end -16.51 1.27) (layer F.SilkS) (width 0.15))
(fp_line (start -15.875 7.62) (end -15.875 1.27) (layer F.SilkS) (width 0.15))
(fp_line (start 48.895 1.27) (end 49.53 1.27) (layer F.SilkS) (width 0.15))
(fp_line (start 48.895 7.62) (end 48.895 1.27) (layer F.SilkS) (width 0.15))
(pad 50 connect roundrect (at -13.97 5.08) (size 1.27 7.62) (layers B.Cu B.Mask) (roundrect_rratio 0.25))
(pad 49 connect roundrect (at -11.43 5.08) (size 1.27 7.62) (layers B.Cu B.Mask) (roundrect_rratio 0.25))
(pad 48 connect roundrect (at -8.89 5.08) (size 1.27 7.62) (layers B.Cu B.Mask) (roundrect_rratio 0.25))
(pad 47 connect roundrect (at -6.35 5.08) (size 1.27 7.62) (layers B.Cu B.Mask) (roundrect_rratio 0.25))
(pad 46 connect roundrect (at -3.81 5.08) (size 1.27 7.62) (layers B.Cu B.Mask) (roundrect_rratio 0.25))
(pad 45 connect roundrect (at -1.27 5.08) (size 1.27 7.62) (layers B.Cu B.Mask) (roundrect_rratio 0.25))
(pad 44 connect roundrect (at 1.27 5.08) (size 1.27 7.62) (layers B.Cu B.Mask) (roundrect_rratio 0.25))
(pad 43 connect roundrect (at 3.81 5.08) (size 1.27 7.62) (layers B.Cu B.Mask) (roundrect_rratio 0.25))
(pad 42 connect roundrect (at 6.35 5.08) (size 1.27 7.62) (layers B.Cu B.Mask) (roundrect_rratio 0.25))
(pad 41 connect roundrect (at 8.89 5.08) (size 1.27 7.62) (layers B.Cu B.Mask) (roundrect_rratio 0.25))
(pad 40 connect roundrect (at 11.43 5.08) (size 1.27 7.62) (layers B.Cu B.Mask) (roundrect_rratio 0.25))
(pad 39 connect roundrect (at 13.97 5.08) (size 1.27 7.62) (layers B.Cu B.Mask) (roundrect_rratio 0.25))
(pad 37 connect roundrect (at 19.05 5.08) (size 1.27 7.62) (layers B.Cu B.Mask) (roundrect_rratio 0.25))
(pad 38 connect roundrect (at 16.51 5.08) (size 1.27 7.62) (layers B.Cu B.Mask) (roundrect_rratio 0.25))
(pad 36 connect roundrect (at 21.59 5.08) (size 1.27 7.62) (layers B.Cu B.Mask) (roundrect_rratio 0.25))
(pad 35 connect roundrect (at 24.13 5.08) (size 1.27 7.62) (layers B.Cu B.Mask) (roundrect_rratio 0.25))
(pad 34 connect roundrect (at 26.67 5.08) (size 1.27 7.62) (layers B.Cu B.Mask) (roundrect_rratio 0.25))
(pad 33 connect roundrect (at 29.21 5.08) (size 1.27 7.62) (layers B.Cu B.Mask) (roundrect_rratio 0.25))
(pad 32 connect roundrect (at 31.75 5.08) (size 1.27 7.62) (layers B.Cu B.Mask) (roundrect_rratio 0.25))
(pad 31 connect roundrect (at 34.29 5.08) (size 1.27 7.62) (layers B.Cu B.Mask) (roundrect_rratio 0.25))
(pad 30 connect roundrect (at 36.83 5.08) (size 1.27 7.62) (layers B.Cu B.Mask) (roundrect_rratio 0.25))
(pad 29 connect roundrect (at 39.37 5.08) (size 1.27 7.62) (layers B.Cu B.Mask) (roundrect_rratio 0.25))
(pad 28 connect roundrect (at 41.91 5.08) (size 1.27 7.62) (layers B.Cu B.Mask) (roundrect_rratio 0.25))
(pad 27 connect roundrect (at 44.45 5.08) (size 1.27 7.62) (layers B.Cu B.Mask) (roundrect_rratio 0.25))
(pad 26 connect roundrect (at 46.99 5.08) (size 1.27 7.62) (layers B.Cu B.Mask) (roundrect_rratio 0.25))
(pad 25 connect roundrect (at 46.99 5.08) (size 1.27 7.62) (layers F.Cu F.Mask) (roundrect_rratio 0.25))
(pad 24 connect roundrect (at 44.45 5.08) (size 1.27 7.62) (layers F.Cu F.Mask) (roundrect_rratio 0.25))
(pad 23 connect roundrect (at 41.91 5.08) (size 1.27 7.62) (layers F.Cu F.Mask) (roundrect_rratio 0.25))
(pad 22 connect roundrect (at 39.37 5.08) (size 1.27 7.62) (layers F.Cu F.Mask) (roundrect_rratio 0.25))
(pad 21 connect roundrect (at 36.83 5.08) (size 1.27 7.62) (layers F.Cu F.Mask) (roundrect_rratio 0.25))
(pad 20 connect roundrect (at 34.29 5.08) (size 1.27 7.62) (layers F.Cu F.Mask) (roundrect_rratio 0.25))
(pad 19 connect roundrect (at 31.75 5.08) (size 1.27 7.62) (layers F.Cu F.Mask) (roundrect_rratio 0.25))
(pad 18 connect roundrect (at 29.21 5.08) (size 1.27 7.62) (layers F.Cu F.Mask) (roundrect_rratio 0.25))
(pad 17 connect roundrect (at 26.67 5.08) (size 1.27 7.62) (layers F.Cu F.Mask) (roundrect_rratio 0.25))
(pad 16 connect roundrect (at 24.13 5.08) (size 1.27 7.62) (layers F.Cu F.Mask) (roundrect_rratio 0.25))
(pad 15 connect roundrect (at 21.59 5.08) (size 1.27 7.62) (layers F.Cu F.Mask) (roundrect_rratio 0.25))
(pad 14 connect roundrect (at 19.05 5.08) (size 1.27 7.62) (layers F.Cu F.Mask) (roundrect_rratio 0.25))
(pad 13 connect roundrect (at 16.51 5.08) (size 1.27 7.62) (layers F.Cu F.Mask) (roundrect_rratio 0.25))
(pad 12 connect roundrect (at 13.97 5.08) (size 1.27 7.62) (layers F.Cu F.Mask) (roundrect_rratio 0.25))
(pad 11 connect roundrect (at 11.43 5.08) (size 1.27 7.62) (layers F.Cu F.Mask) (roundrect_rratio 0.25))
(pad 10 connect roundrect (at 8.89 5.08) (size 1.27 7.62) (layers F.Cu F.Mask) (roundrect_rratio 0.25))
(pad 9 connect roundrect (at 6.35 5.08) (size 1.27 7.62) (layers F.Cu F.Mask) (roundrect_rratio 0.25))
(pad 8 connect roundrect (at 3.81 5.08) (size 1.27 7.62) (layers F.Cu F.Mask) (roundrect_rratio 0.25))
(pad 7 connect roundrect (at 1.27 5.08) (size 1.27 7.62) (layers F.Cu F.Mask) (roundrect_rratio 0.25))
(pad 6 connect roundrect (at -1.27 5.08) (size 1.27 7.62) (layers F.Cu F.Mask) (roundrect_rratio 0.25))
(pad 5 connect roundrect (at -3.81 5.08) (size 1.27 7.62) (layers F.Cu F.Mask) (roundrect_rratio 0.25))
(pad 4 connect roundrect (at -6.35 5.08) (size 1.27 7.62) (layers F.Cu F.Mask) (roundrect_rratio 0.25))
(pad 3 connect roundrect (at -8.89 5.08) (size 1.27 7.62) (layers F.Cu F.Mask) (roundrect_rratio 0.25))
(pad 2 connect roundrect (at -11.43 5.08) (size 1.27 7.62) (layers F.Cu F.Mask) (roundrect_rratio 0.25))
(pad 1 connect roundrect (at -13.97 5.08) (size 1.27 7.62) (layers F.Cu F.Mask) (roundrect_rratio 0.25))
(fp_poly (pts
(xy 48.895 8.89)
(xy 48.895 1.27)
(xy -15.875 1.27)
(xy -15.875 8.89)
) (layer "B.Mask") (width 0.15) (fill solid) (tstamp f55818e7-6952-4d1a-b769-53676d534ac7))
(fp_poly (pts
(xy 48.895 8.89)
(xy 48.895 1.27)
(xy -15.875 1.27)
(xy -15.875 8.89)
) (layer "F.Mask") (width 0.15) (fill solid) (tstamp 0a15b674-2ea1-4c80-87c9-48023e84e84a))
(pad "1" connect roundrect (at -13.97 4.953) (size 1.27 7.366) (layers "F.Cu" "F.Mask") (roundrect_rratio 0.25) (tstamp 70ad1139-50a2-4f62-960b-0274790f3382))
(pad "2" connect roundrect (at -11.43 4.953) (size 1.27 7.366) (layers "F.Cu" "F.Mask") (roundrect_rratio 0.25) (tstamp ac8ecb84-75c5-4603-8c9d-a73dd2fe55aa))
(pad "3" connect roundrect (at -8.89 4.953) (size 1.27 7.366) (layers "F.Cu" "F.Mask") (roundrect_rratio 0.25) (tstamp 4a44d03f-3ed6-4671-a81d-65f7bbf02c9c))
(pad "4" connect roundrect (at -6.35 4.953) (size 1.27 7.366) (layers "F.Cu" "F.Mask") (roundrect_rratio 0.25) (tstamp 9346ede7-230c-4692-b20f-a0ec78887e90))
(pad "5" connect roundrect (at -3.81 4.953) (size 1.27 7.366) (layers "F.Cu" "F.Mask") (roundrect_rratio 0.25) (tstamp 6c58bef7-a109-4acd-b484-5503636af5ac))
(pad "6" connect roundrect (at -1.27 4.953) (size 1.27 7.366) (layers "F.Cu" "F.Mask") (roundrect_rratio 0.25) (tstamp e7dee0a0-1bf5-4243-ac45-e9c9a7f48039))
(pad "7" connect roundrect (at 1.27 4.953) (size 1.27 7.366) (layers "F.Cu" "F.Mask") (roundrect_rratio 0.25) (tstamp 45047bb9-87a7-4ccc-955e-f309ddb6bb4f))
(pad "8" connect roundrect (at 3.81 4.953) (size 1.27 7.366) (layers "F.Cu" "F.Mask") (roundrect_rratio 0.25) (tstamp fb789d35-2164-4089-ab99-307afe88bcea))
(pad "9" connect roundrect (at 6.35 4.953) (size 1.27 7.366) (layers "F.Cu" "F.Mask") (roundrect_rratio 0.25) (tstamp ae48c831-8775-4671-a20d-037464c16f4d))
(pad "10" connect roundrect (at 8.89 4.953) (size 1.27 7.366) (layers "F.Cu" "F.Mask") (roundrect_rratio 0.25) (tstamp d3079292-60d9-4a27-b0d3-92875084e9f6))
(pad "11" connect roundrect (at 11.43 4.953) (size 1.27 7.366) (layers "F.Cu" "F.Mask") (roundrect_rratio 0.25) (tstamp 1aaba807-e811-49c9-9d19-feb0d07d9d41))
(pad "12" connect roundrect (at 13.97 4.953) (size 1.27 7.366) (layers "F.Cu" "F.Mask") (roundrect_rratio 0.25) (tstamp 291d2e41-69fa-4c50-ba6f-fb2342afae58))
(pad "13" connect roundrect (at 16.51 4.953) (size 1.27 7.366) (layers "F.Cu" "F.Mask") (roundrect_rratio 0.25) (tstamp 3fd0a841-351f-4dc1-b3c2-1686bffa07d5))
(pad "14" connect roundrect (at 19.05 4.953) (size 1.27 7.366) (layers "F.Cu" "F.Mask") (roundrect_rratio 0.25) (tstamp 63ac02d9-df52-49d6-bf40-d68ede45c647))
(pad "15" connect roundrect (at 21.59 4.953) (size 1.27 7.366) (layers "F.Cu" "F.Mask") (roundrect_rratio 0.25) (tstamp a35d1496-4f2a-4cec-b501-e084102ec217))
(pad "16" connect roundrect (at 24.13 4.953) (size 1.27 7.366) (layers "F.Cu" "F.Mask") (roundrect_rratio 0.25) (tstamp cd5d4a39-3bf6-4df0-ae30-52287f16b6b1))
(pad "17" connect roundrect (at 26.67 4.953) (size 1.27 7.366) (layers "F.Cu" "F.Mask") (roundrect_rratio 0.25) (tstamp 841dcfc1-05d2-482f-8100-5ec8c2f19947))
(pad "18" connect roundrect (at 29.21 4.953) (size 1.27 7.366) (layers "F.Cu" "F.Mask") (roundrect_rratio 0.25) (tstamp 7bc6a781-e476-46f0-9b85-c99483575955))
(pad "19" connect roundrect (at 31.75 4.953) (size 1.27 7.366) (layers "F.Cu" "F.Mask") (roundrect_rratio 0.25) (tstamp 65ca96f5-0030-4115-9542-307a17c83362))
(pad "20" connect roundrect (at 34.29 4.953) (size 1.27 7.366) (layers "F.Cu" "F.Mask") (roundrect_rratio 0.25) (tstamp be75b37b-9c0e-448c-a8a9-e9c9aa0a3d51))
(pad "21" connect roundrect (at 36.83 4.953) (size 1.27 7.366) (layers "F.Cu" "F.Mask") (roundrect_rratio 0.25) (tstamp 96f4b525-44cb-47ae-85ba-1452b6ebe244))
(pad "22" connect roundrect (at 39.37 4.953) (size 1.27 7.366) (layers "F.Cu" "F.Mask") (roundrect_rratio 0.25) (tstamp 46adbde6-4156-414c-a677-91a5d52c06f0))
(pad "23" connect roundrect (at 41.91 4.953) (size 1.27 7.366) (layers "F.Cu" "F.Mask") (roundrect_rratio 0.25) (tstamp 15c65522-24fa-4b4d-9b33-0ab7e606bd74))
(pad "24" connect roundrect (at 44.45 4.953) (size 1.27 7.366) (layers "F.Cu" "F.Mask") (roundrect_rratio 0.25) (tstamp 2614eab2-50de-46b0-9eda-9ba6f3213d6f))
(pad "25" connect roundrect (at 46.99 4.953) (size 1.27 7.366) (layers "F.Cu" "F.Mask") (roundrect_rratio 0.25) (tstamp 46087030-b1b4-416d-abb4-7e66dc5f5fa0))
(pad "26" connect roundrect (at 46.99 4.953) (size 1.27 7.366) (layers "B.Cu" "B.Mask") (roundrect_rratio 0.25) (tstamp a7df7acc-f6e9-4422-bcc5-4de0be2fc24b))
(pad "27" connect roundrect (at 44.45 4.953) (size 1.27 7.366) (layers "B.Cu" "B.Mask") (roundrect_rratio 0.25) (tstamp 1cb90ce4-cf2a-4f56-afc5-1a491c09cd7f))
(pad "28" connect roundrect (at 41.91 4.953) (size 1.27 7.366) (layers "B.Cu" "B.Mask") (roundrect_rratio 0.25) (tstamp 7114252f-4490-4dce-982e-4accb431f84f))
(pad "29" connect roundrect (at 39.37 4.953) (size 1.27 7.366) (layers "B.Cu" "B.Mask") (roundrect_rratio 0.25) (tstamp c31541b0-05b3-4f9a-a5ca-240448e17a33))
(pad "30" connect roundrect (at 36.83 4.953) (size 1.27 7.366) (layers "B.Cu" "B.Mask") (roundrect_rratio 0.25) (tstamp 66bc6277-2edc-41bc-8067-43e8d3ce64b9))
(pad "31" connect roundrect (at 34.29 4.953) (size 1.27 7.366) (layers "B.Cu" "B.Mask") (roundrect_rratio 0.25) (tstamp 299ed31b-8320-42e3-a997-78990b515eff))
(pad "32" connect roundrect (at 31.75 4.953) (size 1.27 7.366) (layers "B.Cu" "B.Mask") (roundrect_rratio 0.25) (tstamp a37318fa-8dc9-42f8-88a1-5023278e8589))
(pad "33" connect roundrect (at 29.21 4.953) (size 1.27 7.366) (layers "B.Cu" "B.Mask") (roundrect_rratio 0.25) (tstamp 46a60137-2053-422a-b5c5-c89257ba074c))
(pad "34" connect roundrect (at 26.67 4.953) (size 1.27 7.366) (layers "B.Cu" "B.Mask") (roundrect_rratio 0.25) (tstamp 550b4c3d-d7ae-47ac-897c-516108b07dc8))
(pad "35" connect roundrect (at 24.13 4.953) (size 1.27 7.366) (layers "B.Cu" "B.Mask") (roundrect_rratio 0.25) (tstamp 2de4b987-0841-4651-8ab8-607d0e4adada))
(pad "36" connect roundrect (at 21.59 4.953) (size 1.27 7.366) (layers "B.Cu" "B.Mask") (roundrect_rratio 0.25) (tstamp f69aac93-d3de-4f65-b6b0-69b31a1eeedd))
(pad "37" connect roundrect (at 19.05 4.953) (size 1.27 7.366) (layers "B.Cu" "B.Mask") (roundrect_rratio 0.25) (tstamp 2023edfa-31eb-4ce8-bbfb-1b3ee06a646a))
(pad "38" connect roundrect (at 16.51 4.953) (size 1.27 7.366) (layers "B.Cu" "B.Mask") (roundrect_rratio 0.25) (tstamp 3a86f6c2-5c5a-4a7c-bab3-4e0a21235fed))
(pad "39" connect roundrect (at 13.97 4.953) (size 1.27 7.366) (layers "B.Cu" "B.Mask") (roundrect_rratio 0.25) (tstamp edca2338-bb9e-4ddb-83b5-70fb952eb8e5))
(pad "40" connect roundrect (at 11.43 4.953) (size 1.27 7.366) (layers "B.Cu" "B.Mask") (roundrect_rratio 0.25) (tstamp 58ad9e6b-87fb-406b-9e91-c79663704b5d))
(pad "41" connect roundrect (at 8.89 4.953) (size 1.27 7.366) (layers "B.Cu" "B.Mask") (roundrect_rratio 0.25) (tstamp 2c3c7953-603d-4b95-b24a-60ee04407d91))
(pad "42" connect roundrect (at 6.35 4.953) (size 1.27 7.366) (layers "B.Cu" "B.Mask") (roundrect_rratio 0.25) (tstamp 98e85eeb-6efa-4e41-bb87-9aec27e50a64))
(pad "43" connect roundrect (at 3.81 4.953) (size 1.27 7.366) (layers "B.Cu" "B.Mask") (roundrect_rratio 0.25) (tstamp aba98e24-5e8c-466a-9a20-6fa6c73dbb88))
(pad "44" connect roundrect (at 1.27 4.953) (size 1.27 7.366) (layers "B.Cu" "B.Mask") (roundrect_rratio 0.25) (tstamp 313c8e97-968d-4155-bdc2-52451d165bb8))
(pad "45" connect roundrect (at -1.27 4.953) (size 1.27 7.366) (layers "B.Cu" "B.Mask") (roundrect_rratio 0.25) (tstamp e78af261-e770-4c72-a0c3-180fe00974d2))
(pad "46" connect roundrect (at -3.81 4.953) (size 1.27 7.366) (layers "B.Cu" "B.Mask") (roundrect_rratio 0.25) (tstamp 26fa0e55-ded5-4fdc-9c3a-463e0e15d145))
(pad "47" connect roundrect (at -6.35 4.953) (size 1.27 7.366) (layers "B.Cu" "B.Mask") (roundrect_rratio 0.25) (tstamp d204374d-427d-4184-8cac-34c3c45ae776))
(pad "48" connect roundrect (at -8.89 4.953) (size 1.27 7.366) (layers "B.Cu" "B.Mask") (roundrect_rratio 0.25) (tstamp 06b0de7a-8452-47e4-8156-099c9b3d0d4a))
(pad "49" connect roundrect (at -11.43 4.953) (size 1.27 7.366) (layers "B.Cu" "B.Mask") (roundrect_rratio 0.25) (tstamp 7076fdf9-3d9e-46dc-8021-cde9c82fa64e))
(pad "50" connect roundrect (at -13.97 4.953) (size 1.27 7.366) (layers "B.Cu" "B.Mask") (roundrect_rratio 0.25) (tstamp a35b849b-99f9-44ef-a71c-43032176d7da))
)

View File

@ -1,34 +1,30 @@
(module Capacitor (layer F.Cu) (tedit 5FEB5EFB)
(descr "C, Disc series, Radial, pin pitch=2.50mm, , diameter*width=3.8*2.6mm^2, Capacitor, http://www.vishay.com/docs/45233/krseries.pdf")
(tags "C Disc series Radial pin pitch 2.50mm diameter 3.8mm width 2.6mm Capacitor")
(fp_text reference C1 (at 1.25 2.54) (layer F.SilkS)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value C (at 1.25 2.55) (layer F.Fab)
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text user %R (at 1.25 0) (layer F.Fab)
(effects (font (size 0.76 0.76) (thickness 0.114)))
)
(fp_line (start 3.55 -1.55) (end -1.05 -1.55) (layer F.CrtYd) (width 0.05))
(fp_line (start 3.55 1.55) (end 3.55 -1.55) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.05 1.55) (end 3.55 1.55) (layer F.CrtYd) (width 0.05))
(fp_line (start -1.05 -1.55) (end -1.05 1.55) (layer F.CrtYd) (width 0.05))
(fp_line (start 3.27 0.795) (end 3.27 1.42) (layer F.Fab) (width 0.12))
(fp_line (start 3.27 -1.42) (end 3.27 -0.795) (layer F.Fab) (width 0.12))
(fp_line (start -0.77 0.795) (end -0.77 1.42) (layer F.Fab) (width 0.12))
(fp_line (start -0.77 -1.42) (end -0.77 -0.795) (layer F.Fab) (width 0.12))
(fp_line (start -0.77 1.42) (end 3.27 1.42) (layer F.Fab) (width 0.12))
(fp_line (start -0.77 -1.42) (end 3.27 -1.42) (layer F.Fab) (width 0.12))
(fp_line (start 3.15 -1.3) (end -0.65 -1.3) (layer F.Fab) (width 0.1))
(fp_line (start 3.15 1.3) (end 3.15 -1.3) (layer F.Fab) (width 0.1))
(fp_line (start -0.65 1.3) (end 3.15 1.3) (layer F.Fab) (width 0.1))
(fp_line (start -0.65 -1.3) (end -0.65 1.3) (layer F.Fab) (width 0.1))
(pad 2 thru_hole circle (at 2.5 0) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask))
(pad 1 thru_hole circle (at 0 0) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask))
(model ${KISYS3DMOD}/Capacitor_THT.3dshapes/C_Disc_D3.8mm_W2.6mm_P2.50mm.wrl
(at (xyz 0 0 0))
(scale (xyz 1 1 1))
(rotate (xyz 0 0 0))
)
)
(footprint "Capacitor" (version 20211014) (generator pcbnew)
(layer "F.Cu")
(tedit 621265E2)
(descr "C, Disc series, Radial, pin pitch=2.50mm, , diameter*width=3.8*2.6mm^2, Capacitor, http://www.vishay.com/docs/45233/krseries.pdf")
(tags "C Disc series Radial pin pitch 2.50mm diameter 3.8mm width 2.6mm Capacitor")
(attr through_hole)
(fp_text reference "C1" (at 1.25 2.54) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)))
(tstamp e8ef4bbd-32e2-4ac3-86d3-eb359b36bf42)
)
(fp_text value "C" (at 1.25 2.55) (layer "F.Fab")
(effects (font (size 1 1) (thickness 0.15)))
(tstamp ea4f7bd6-6821-448f-bbec-c40ded7426db)
)
(fp_text user "${REFERENCE}" (at 1.25 0) (layer "F.Fab")
(effects (font (size 0.76 0.76) (thickness 0.114)))
(tstamp e52d9220-36a6-4a8e-857e-59c3f9659ebc)
)
(fp_line (start 3.302 0.762) (end 3.302 -0.762) (layer "F.CrtYd") (width 0.12) (tstamp 40b5ab29-6809-46de-9d87-b01ea9af4068))
(fp_line (start 3.302 -0.762) (end -0.762 -0.762) (layer "F.CrtYd") (width 0.12) (tstamp 4b724a05-e8b8-4d3a-9ef8-416f22a37460))
(fp_line (start -0.762 0.762) (end 3.302 0.762) (layer "F.CrtYd") (width 0.12) (tstamp 81c671aa-d366-46b3-8f86-ff2263cc045a))
(fp_line (start -0.762 -0.762) (end -0.762 0.762) (layer "F.CrtYd") (width 0.12) (tstamp a4f1e7d6-84c2-4bf5-a525-5b5c5d3f8486))
(pad "1" thru_hole circle (at 0 0) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) (tstamp 3e8745f8-3055-487c-98b3-0d559c2ad40a))
(pad "2" thru_hole circle (at 2.5 0) (size 1.6 1.6) (drill 0.8) (layers *.Cu *.Mask) (tstamp 13b54699-28a1-4e4e-a982-18a5d294cbbd))
(model "${KISYS3DMOD}/Capacitor_THT.3dshapes/C_Disc_D3.8mm_W2.6mm_P2.50mm.wrl"
(offset (xyz 0 0 0))
(scale (xyz 1 1 1))
(rotate (xyz 0 0 0))
)
)

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,11 +1,11 @@
G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,(5.1.10-1-10_14)*
G04 #@! TF.CreationDate,2021-07-20T17:57:18-04:00*
G04 #@! TF.ProjectId,Apple2IORPi,4170706c-6532-4494-9f52-50692e6b6963,0.4*
G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,(6.0.2-0)*
G04 #@! TF.CreationDate,2022-03-01T05:34:48-05:00*
G04 #@! TF.ProjectId,Apple2IORPi,4170706c-6532-4494-9f52-50692e6b6963,0.6*
G04 #@! TF.SameCoordinates,Original*
G04 #@! TF.FileFunction,Profile,NP*
%FSLAX46Y46*%
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
G04 Created by KiCad (PCBNEW (5.1.10-1-10_14)) date 2021-07-20 17:57:18*
G04 Created by KiCad (PCBNEW (6.0.2-0)) date 2022-03-01 05:34:48*
%MOMM*%
%LPD*%
G01*
@ -15,34 +15,34 @@ G04 #@! TA.AperFunction,Profile*
G04 #@! TD*
G04 APERTURE END LIST*
D10*
X193675000Y-42545000D02*
X193040000Y-41910000D01*
X193675000Y-111125000D02*
X193675000Y-42545000D01*
X104775000Y-41910000D02*
X193040000Y-41910000D01*
X104140000Y-42545000D02*
X104775000Y-41910000D01*
X122555000Y-111760000D02*
X122555000Y-118745000D01*
X104140000Y-111125000D02*
X104140000Y-42545000D01*
X104775000Y-111760000D02*
X104140000Y-111125000D01*
X193040000Y-111760000D02*
X193675000Y-111125000D01*
X193675000Y-111125000D02*
X193675000Y-42545000D01*
X108585000Y-111760000D02*
X122555000Y-111760000D01*
X193675000Y-42545000D02*
X193040000Y-41910000D01*
X108585000Y-111760000D02*
X104775000Y-111760000D01*
X123190000Y-119380000D02*
X186690000Y-119380000D01*
X104775000Y-41910000D02*
X193040000Y-41910000D01*
X122555000Y-118745000D02*
X123190000Y-119380000D01*
X122555000Y-111760000D02*
X122555000Y-118745000D01*
X108585000Y-111760000D02*
X122555000Y-111760000D01*
X193040000Y-111760000D02*
X193675000Y-111125000D01*
X187325000Y-111760000D02*
X193040000Y-111760000D01*
X187325000Y-118745000D02*
X187325000Y-111760000D01*
X186690000Y-119380000D02*
X187325000Y-118745000D01*
X187325000Y-118745000D02*
X187325000Y-111760000D01*
X187325000Y-111760000D02*
X193040000Y-111760000D01*
X104140000Y-42545000D02*
X104775000Y-41910000D01*
X104775000Y-111760000D02*
X104140000Y-111125000D01*
M02*

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,8 +1,8 @@
M48
; DRILL file {KiCad (5.1.10-1-10_14)} date Tuesday, July 20, 2021 at 05:57:21 PM
; DRILL file {KiCad (6.0.2-0)} date Tuesday, March 01, 2022 at 05:32:59 am
; FORMAT={-:-/ absolute / inch / decimal}
; #@! TF.CreationDate,2021-07-20T17:57:21-04:00
; #@! TF.GenerationSoftware,Kicad,Pcbnew,(5.1.10-1-10_14)
; #@! TF.CreationDate,2022-03-01T05:32:59-05:00
; #@! TF.GenerationSoftware,Kicad,Pcbnew,(6.0.2-0)
; #@! TF.FileFunction,NonPlated,1,2,NPTH
FMAT,2
INCH

View File

@ -1,13 +1,16 @@
M48
; DRILL file {KiCad (5.1.10-1-10_14)} date Tuesday, July 20, 2021 at 05:57:21 PM
; DRILL file {KiCad (6.0.2-0)} date Tuesday, March 01, 2022 at 05:32:59 am
; FORMAT={-:-/ absolute / inch / decimal}
; #@! TF.CreationDate,2021-07-20T17:57:21-04:00
; #@! TF.GenerationSoftware,Kicad,Pcbnew,(5.1.10-1-10_14)
; #@! TF.CreationDate,2022-03-01T05:32:59-05:00
; #@! TF.GenerationSoftware,Kicad,Pcbnew,(6.0.2-0)
; #@! TF.FileFunction,Plated,1,2,PTH
FMAT,2
INCH
; #@! TA.AperFunction,Plated,PTH,ViaDrill
T1C0.0197
; #@! TA.AperFunction,Plated,PTH,ComponentDrill
T2C0.0315
; #@! TA.AperFunction,Plated,PTH,ComponentDrill
T3C0.0394
%
G90
@ -40,7 +43,6 @@ X4.9468Y-2.449
X4.962Y-2.938
X4.981Y-2.644
X5.06Y-2.4625
X5.075Y-1.9005
X5.096Y-2.1255
X5.129Y-3.458
X5.15Y-1.926
@ -338,5 +340,7 @@ X4.45Y-3.66
X4.45Y-3.76
X4.45Y-3.86
X4.45Y-3.96
X4.626Y-4.122
X4.626Y-4.222
T0
M30

View File

@ -454,6 +454,27 @@ X ~ 2 0 -150 110 U 50 50 1 1 P
ENDDRAW
ENDDEF
#
# Jumper_Jumper_2_Bridged
#
DEF Jumper_Jumper_2_Bridged JP 0 0 Y N 1 F N
F0 "JP" 0 75 50 H V C CNN
F1 "Jumper_Jumper_2_Bridged" 0 -100 50 H V C CNN
F2 "" 0 0 50 H I C CNN
F3 "" 0 0 50 H I C CNN
$FPLIST
Jumper*
TestPoint*2Pads*
TestPoint*Bridge*
$ENDFPLIST
DRAW
A 0 -70 100 1269 531 0 1 0 N -60 10 60 10
C -80 0 20 0 0 0 N
C 80 0 20 0 0 0 N
X A 1 -200 0 100 R 50 50 1 1 P
X B 2 200 0 100 L 50 50 1 1 P
ENDDRAW
ENDDEF
#
# Memory_EPROM_27C256
#
DEF Memory_EPROM_27C256 U 0 20 Y Y 1 F N

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,77 @@
{
"board": {
"active_layer": 0,
"active_layer_preset": "",
"auto_track_width": true,
"hidden_nets": [],
"high_contrast_mode": 1,
"net_color_mode": 1,
"opacity": {
"pads": 1.0,
"tracks": 1.0,
"vias": 1.0,
"zones": 0.6
},
"ratsnest_display_mode": 0,
"selection_filter": {
"dimensions": true,
"footprints": true,
"graphics": true,
"keepouts": true,
"lockedItems": true,
"otherItems": true,
"pads": true,
"text": true,
"tracks": true,
"vias": true,
"zones": true
},
"visible_items": [
0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26,
27,
28,
29,
30,
32,
33,
34,
35,
36
],
"visible_layers": "00010f0_80000001",
"zone_display_mode": 1
},
"meta": {
"filename": "Apple2IORPi.kicad_prl",
"version": 3
},
"project": {
"files": []
}
}

View File

@ -0,0 +1,477 @@
{
"board": {
"design_settings": {
"defaults": {
"board_outline_line_width": 0.049999999999999996,
"copper_line_width": 0.19999999999999998,
"copper_text_italic": false,
"copper_text_size_h": 1.5,
"copper_text_size_v": 1.5,
"copper_text_thickness": 0.3,
"copper_text_upright": false,
"courtyard_line_width": 0.049999999999999996,
"dimension_precision": 4,
"dimension_units": 3,
"dimensions": {
"arrow_length": 1270000,
"extension_offset": 500000,
"keep_text_aligned": true,
"suppress_zeroes": false,
"text_position": 0,
"units_format": 1
},
"fab_line_width": 0.09999999999999999,
"fab_text_italic": false,
"fab_text_size_h": 1.0,
"fab_text_size_v": 1.0,
"fab_text_thickness": 0.15,
"fab_text_upright": false,
"other_line_width": 0.09999999999999999,
"other_text_italic": false,
"other_text_size_h": 1.0,
"other_text_size_v": 1.0,
"other_text_thickness": 0.15,
"other_text_upright": false,
"pads": {
"drill": 0.762,
"height": 1.524,
"width": 1.524
},
"silk_line_width": 0.12,
"silk_text_italic": false,
"silk_text_size_h": 1.0,
"silk_text_size_v": 1.0,
"silk_text_thickness": 0.15,
"silk_text_upright": false,
"zones": {
"45_degree_only": false,
"min_clearance": 0.508
}
},
"diff_pair_dimensions": [],
"drc_exclusions": [],
"meta": {
"filename": "board_design_settings.json",
"version": 2
},
"rule_severities": {
"annular_width": "error",
"clearance": "error",
"copper_edge_clearance": "error",
"courtyards_overlap": "error",
"diff_pair_gap_out_of_range": "error",
"diff_pair_uncoupled_length_too_long": "error",
"drill_out_of_range": "error",
"duplicate_footprints": "warning",
"extra_footprint": "warning",
"footprint_type_mismatch": "error",
"hole_clearance": "error",
"hole_near_hole": "error",
"invalid_outline": "error",
"item_on_disabled_layer": "error",
"items_not_allowed": "error",
"length_out_of_range": "error",
"malformed_courtyard": "error",
"microvia_drill_out_of_range": "error",
"missing_courtyard": "ignore",
"missing_footprint": "warning",
"net_conflict": "warning",
"npth_inside_courtyard": "ignore",
"padstack": "error",
"pth_inside_courtyard": "ignore",
"shorting_items": "error",
"silk_over_copper": "warning",
"silk_overlap": "warning",
"skew_out_of_range": "error",
"through_hole_pad_without_hole": "error",
"too_many_vias": "error",
"track_dangling": "warning",
"track_width": "error",
"tracks_crossing": "error",
"unconnected_items": "error",
"unresolved_variable": "error",
"via_dangling": "warning",
"zone_has_empty_net": "error",
"zones_intersect": "error"
},
"rule_severitieslegacy_courtyards_overlap": false,
"rule_severitieslegacy_no_courtyard_defined": false,
"rules": {
"allow_blind_buried_vias": false,
"allow_microvias": false,
"max_error": 0.005,
"min_clearance": 0.0,
"min_copper_edge_clearance": 0.024999999999999998,
"min_hole_clearance": 0.25,
"min_hole_to_hole": 0.25,
"min_microvia_diameter": 0.19999999999999998,
"min_microvia_drill": 0.09999999999999999,
"min_silk_clearance": 0.0,
"min_through_hole_diameter": 0.3,
"min_track_width": 0.17779999999999999,
"min_via_annular_width": 0.049999999999999996,
"min_via_diameter": 0.39999999999999997,
"use_height_for_length_calcs": true
},
"track_widths": [],
"via_dimensions": [],
"zones_allow_external_fillets": false,
"zones_use_no_outline": true
},
"layer_presets": []
},
"boards": [],
"cvpcb": {
"equivalence_files": []
},
"erc": {
"erc_exclusions": [],
"meta": {
"version": 0
},
"pin_map": [
[
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
2,
0,
1,
0,
0,
1,
0,
2,
2,
2,
2
],
[
0,
0,
0,
0,
0,
0,
1,
0,
1,
0,
1,
2
],
[
0,
1,
0,
0,
0,
0,
1,
1,
2,
1,
1,
2
],
[
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
2
],
[
1,
1,
1,
1,
1,
0,
1,
1,
1,
1,
1,
2
],
[
0,
0,
0,
1,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
2,
1,
2,
0,
0,
1,
0,
2,
2,
2,
2
],
[
0,
2,
0,
1,
0,
0,
1,
0,
2,
0,
0,
2
],
[
0,
2,
1,
1,
0,
0,
1,
0,
2,
0,
0,
2
],
[
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2
]
],
"rule_severities": {
"bus_definition_conflict": "error",
"bus_entry_needed": "error",
"bus_label_syntax": "error",
"bus_to_bus_conflict": "error",
"bus_to_net_conflict": "error",
"different_unit_footprint": "error",
"different_unit_net": "error",
"duplicate_reference": "error",
"duplicate_sheet_names": "error",
"extra_units": "error",
"global_label_dangling": "warning",
"hier_label_mismatch": "error",
"label_dangling": "error",
"lib_symbol_issues": "warning",
"multiple_net_names": "warning",
"net_not_bus_member": "warning",
"no_connect_connected": "warning",
"no_connect_dangling": "warning",
"pin_not_connected": "error",
"pin_not_driven": "error",
"pin_to_pin": "warning",
"power_pin_not_driven": "error",
"similar_labels": "warning",
"unannotated": "error",
"unit_value_mismatch": "error",
"unresolved_variable": "error",
"wire_dangling": "error"
}
},
"libraries": {
"pinned_footprint_libs": [],
"pinned_symbol_libs": []
},
"meta": {
"filename": "Apple2IORPi.kicad_pro",
"version": 1
},
"net_settings": {
"classes": [
{
"bus_width": 12.0,
"clearance": 0.1778,
"diff_pair_gap": 0.25,
"diff_pair_via_gap": 0.25,
"diff_pair_width": 0.2,
"line_style": 0,
"microvia_diameter": 0.3,
"microvia_drill": 0.1,
"name": "Default",
"pcb_color": "rgba(0, 0, 0, 0.000)",
"schematic_color": "rgba(0, 0, 0, 0.000)",
"track_width": 0.1778,
"via_diameter": 0.762,
"via_drill": 0.50038,
"wire_width": 6.0
},
{
"bus_width": 12.0,
"clearance": 0.1778,
"diff_pair_gap": 0.25,
"diff_pair_via_gap": 0.25,
"diff_pair_width": 0.2,
"line_style": 0,
"microvia_diameter": 0.3,
"microvia_drill": 0.1,
"name": "3V3",
"nets": [],
"pcb_color": "rgba(0, 0, 0, 0.000)",
"schematic_color": "rgba(0, 0, 0, 0.000)",
"track_width": 0.3556,
"via_diameter": 0.762,
"via_drill": 0.50038,
"wire_width": 6.0
},
{
"bus_width": 12.0,
"clearance": 0.254,
"diff_pair_gap": 0.25,
"diff_pair_via_gap": 0.25,
"diff_pair_width": 0.2,
"line_style": 0,
"microvia_diameter": 0.3,
"microvia_drill": 0.1,
"name": "5V",
"nets": [
"Net-(J1-Pad2)"
],
"pcb_color": "rgba(0, 0, 0, 0.000)",
"schematic_color": "rgba(0, 0, 0, 0.000)",
"track_width": 0.8128,
"via_diameter": 0.762,
"via_drill": 0.7112,
"wire_width": 6.0
},
{
"bus_width": 12.0,
"clearance": 0.254,
"diff_pair_gap": 0.25,
"diff_pair_via_gap": 0.25,
"diff_pair_width": 0.2,
"line_style": 0,
"microvia_diameter": 0.3,
"microvia_drill": 0.1,
"name": "Ground",
"nets": [],
"pcb_color": "rgba(0, 0, 0, 0.000)",
"schematic_color": "rgba(0, 0, 0, 0.000)",
"track_width": 0.8128,
"via_diameter": 0.762,
"via_drill": 0.7112,
"wire_width": 6.0
}
],
"meta": {
"version": 2
},
"net_colors": null
},
"pcbnew": {
"last_paths": {
"gencad": "",
"idf": "",
"netlist": "Apple2IORPi.net",
"specctra_dsn": "",
"step": "",
"vrml": ""
},
"page_layout_descr_file": ""
},
"schematic": {
"annotate_start_num": 0,
"drawing": {
"default_line_thickness": 6.0,
"default_text_size": 50.0,
"field_names": [],
"intersheets_ref_own_page": false,
"intersheets_ref_prefix": "",
"intersheets_ref_short": false,
"intersheets_ref_show": false,
"intersheets_ref_suffix": "",
"junction_size_choice": 3,
"label_size_ratio": 0.25,
"pin_symbol_size": 0.0,
"text_offset_ratio": 0.08
},
"legacy_lib_dir": "",
"legacy_lib_list": [],
"meta": {
"version": 1
},
"net_format_name": "Pcbnew",
"ngspice": {
"fix_include_paths": true,
"fix_passive_vals": false,
"meta": {
"version": 0
},
"model_mode": 0,
"workbook_filename": ""
},
"page_layout_descr_file": "",
"plot_directory": "./",
"spice_adjust_passive_values": false,
"spice_external_command": "spice \"%I\"",
"subpart_first_id": 65,
"subpart_id_separator": 0
},
"sheets": [
[
"89e83c2e-e90a-4a50-b278-880bac0cfb49",
""
]
],
"text_variables": {}
}

File diff suppressed because it is too large Load Diff

View File

@ -1,18 +1,18 @@
(export (version D)
(design
(source /Users/terence/source/Apple2-IO-RPi/Hardware/Apple2IORPi.sch)
(date "Tuesday, July 20, 2021 at 05:16:50 pm")
(tool "Eeschema (5.1.10-1-10_14)")
(date "Wednesday, February 16, 2022 at 09:41:09 pm")
(tool "Eeschema (5.1.12-1-10_14)")
(sheet (number 1) (name /) (tstamps /)
(title_block
(title "Apple II I/O RPi")
(company "Terence J. Boldt")
(rev 1.0)
(date 2021-03-08)
(rev 6)
(date 2022-02-16)
(source Apple2IORPi.sch)
(comment (number 1) (value "Fourth Prototype"))
(comment (number 1) (value "Sixth Prototype"))
(comment (number 2) (value "Provides storage and network for the Apple ]["))
(comment (number 3) (value "Raspberry Pi Zero W as a daughter board"))
(comment (number 3) (value "Raspberry Pi Zero W 2 as a daughter board"))
(comment (number 4) (value "Expansion card for Apple ][ computers")))))
(components
(comp (ref J0)
@ -154,7 +154,14 @@
(datasheet ~)
(libsource (lib Device) (part C) (description "Unpolarized capacitor"))
(sheetpath (names /) (tstamps /))
(tstamp 60C3A67B)))
(tstamp 60C3A67B))
(comp (ref JPINTPWR1)
(value "Open for USB power, close for bus power")
(footprint Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical)
(datasheet ~)
(libsource (lib Jumper) (part Jumper_2_Bridged) (description "Jumper, 2-pole, closed/bridged"))
(sheetpath (names /) (tstamps /))
(tstamp 6215898B)))
(libparts
(libpart (lib 74xx) (part 74LS00)
(aliases
@ -395,6 +402,19 @@
(pins
(pin (num 1) (name ~) (type passive))
(pin (num 2) (name ~) (type passive))))
(libpart (lib Jumper) (part Jumper_2_Bridged)
(description "Jumper, 2-pole, closed/bridged")
(docs ~)
(footprints
(fp Jumper*)
(fp TestPoint*2Pads*)
(fp TestPoint*Bridge*))
(fields
(field (name Reference) JP)
(field (name Value) Jumper_2_Bridged))
(pins
(pin (num 1) (name A) (type passive))
(pin (num 2) (name B) (type passive))))
(libpart (lib Memory_EPROM) (part 27C256)
(aliases
(alias 27256))
@ -444,19 +464,21 @@
(uri "/Library/Application Support/kicad/library/Connector_Generic.lib"))
(library (logical Device)
(uri "/Library/Application Support/kicad/library/Device.lib"))
(library (logical Jumper)
(uri "/Library/Application Support/kicad/library/Jumper.lib"))
(library (logical Memory_EPROM)
(uri "/Library/Application Support/kicad/library/Memory_EPROM.lib")))
(nets
(net (code 1) (name "Net-(J0-Pad1)")
(node (ref J0) (pin 1))
(node (ref U1) (pin 20))
(node (ref U2) (pin 2)))
(node (ref U2) (pin 2))
(node (ref U1) (pin 20)))
(net (code 2) (name "Net-(J0-Pad10)")
(node (ref U1) (pin 25))
(node (ref J0) (pin 10)))
(node (ref J0) (pin 10))
(node (ref U1) (pin 25)))
(net (code 3) (name "Net-(J0-Pad12)")
(node (ref J0) (pin 12))
(node (ref U1) (pin 21)))
(node (ref U1) (pin 21))
(node (ref J0) (pin 12)))
(net (code 4) (name "Net-(J0-Pad13)")
(node (ref J0) (pin 13)))
(net (code 5) (name "Net-(J0-Pad14)")
@ -476,11 +498,11 @@
(net (code 12) (name "Net-(J0-Pad22)")
(node (ref J0) (pin 22)))
(net (code 13) (name "Net-(J0-Pad24)")
(node (ref J0) (pin 24))
(node (ref J0) (pin 27)))
(node (ref J0) (pin 27))
(node (ref J0) (pin 24)))
(net (code 14) (name "Net-(J0-Pad23)")
(node (ref J0) (pin 23))
(node (ref J0) (pin 28)))
(node (ref J0) (pin 28))
(node (ref J0) (pin 23)))
(net (code 15) (name "Net-(J0-Pad29)")
(node (ref J0) (pin 29)))
(net (code 16) (name "Net-(J0-Pad30)")
@ -508,8 +530,8 @@
(net (code 27) (name "Net-(J0-Pad50)")
(node (ref J0) (pin 50)))
(net (code 28) (name "Net-(J0-Pad6)")
(node (ref U1) (pin 6))
(node (ref J0) (pin 6)))
(node (ref J0) (pin 6))
(node (ref U1) (pin 6)))
(net (code 29) (name "Net-(J0-Pad7)")
(node (ref J0) (pin 7))
(node (ref U1) (pin 5)))
@ -523,14 +545,14 @@
(node (ref U0) (pin 2))
(node (ref J0) (pin 49)))
(net (code 33) (name "Net-(J0-Pad48)")
(node (ref U0) (pin 3))
(node (ref J0) (pin 48)))
(node (ref J0) (pin 48))
(node (ref U0) (pin 3)))
(net (code 34) (name "Net-(J0-Pad47)")
(node (ref J0) (pin 47))
(node (ref U0) (pin 4)))
(net (code 35) (name "Net-(J0-Pad46)")
(node (ref J0) (pin 46))
(node (ref U0) (pin 5)))
(node (ref U0) (pin 5))
(node (ref J0) (pin 46)))
(net (code 36) (name "Net-(J0-Pad45)")
(node (ref U0) (pin 6))
(node (ref J0) (pin 45)))
@ -544,39 +566,39 @@
(node (ref U0) (pin 9))
(node (ref J0) (pin 42)))
(net (code 40) (name "Net-(U3-Pad3)")
(node (ref U4) (pin 19))
(node (ref U3) (pin 3)))
(node (ref U3) (pin 3))
(node (ref U4) (pin 19)))
(net (code 41) (name "Net-(J1-Pad10)")
(node (ref U7) (pin 6))
(node (ref J1) (pin 10)))
(node (ref J1) (pin 10))
(node (ref U7) (pin 6)))
(net (code 42) (name "Net-(J1-Pad13)")
(node (ref J1) (pin 13))
(node (ref U4) (pin 16)))
(net (code 43) (name "Net-(J1-Pad15)")
(node (ref U4) (pin 15))
(node (ref J1) (pin 15)))
(node (ref J1) (pin 15))
(node (ref U4) (pin 15)))
(net (code 44) (name "Net-(J1-Pad19)")
(node (ref U4) (pin 14))
(node (ref J1) (pin 19)))
(node (ref J1) (pin 19))
(node (ref U4) (pin 14)))
(net (code 45) (name "Net-(J1-Pad21)")
(node (ref U4) (pin 13))
(node (ref J1) (pin 21)))
(node (ref J1) (pin 21))
(node (ref U4) (pin 13)))
(net (code 46) (name "Net-(J1-Pad23)")
(node (ref U4) (pin 12))
(node (ref J1) (pin 23)))
(net (code 47) (name "Net-(J1-Pad24)")
(node (ref J1) (pin 24))
(node (ref U6) (pin 13)))
(node (ref U6) (pin 13))
(node (ref J1) (pin 24)))
(net (code 48) (name "Net-(J1-Pad26)")
(node (ref J1) (pin 26))
(node (ref U6) (pin 14)))
(node (ref U6) (pin 14))
(node (ref J1) (pin 26)))
(net (code 49) (name "Net-(J1-Pad27)")
(node (ref J1) (pin 27)))
(net (code 50) (name "Net-(J1-Pad28)")
(node (ref J1) (pin 28)))
(net (code 51) (name "Net-(J1-Pad29)")
(node (ref J1) (pin 29))
(node (ref U4) (pin 11)))
(node (ref U4) (pin 11))
(node (ref J1) (pin 29)))
(net (code 52) (name "Net-(J1-Pad3)")
(node (ref J1) (pin 3)))
(net (code 53) (name "Net-(J1-Pad31)")
@ -586,17 +608,17 @@
(node (ref U5) (pin 19))
(node (ref J1) (pin 32)))
(net (code 55) (name "Net-(J1-Pad36)")
(node (ref J1) (pin 36))
(node (ref U5) (pin 16)))
(node (ref U5) (pin 16))
(node (ref J1) (pin 36)))
(net (code 56) (name "Net-(J1-Pad37)")
(node (ref J1) (pin 37))
(node (ref U5) (pin 9)))
(node (ref U5) (pin 9))
(node (ref J1) (pin 37)))
(net (code 57) (name "Net-(J1-Pad38)")
(node (ref J1) (pin 38))
(node (ref U5) (pin 15)))
(net (code 58) (name "Net-(J1-Pad40)")
(node (ref J1) (pin 40))
(node (ref U5) (pin 12)))
(node (ref U5) (pin 12))
(node (ref J1) (pin 40)))
(net (code 59) (name "Net-(J1-Pad5)")
(node (ref J1) (pin 5)))
(net (code 60) (name "Net-(J1-Pad7)")
@ -609,14 +631,14 @@
(node (ref U1) (pin 24))
(node (ref J0) (pin 11)))
(net (code 63) (name "Net-(J1-Pad11)")
(node (ref U4) (pin 17))
(node (ref J1) (pin 11)))
(node (ref J1) (pin 11))
(node (ref U4) (pin 17)))
(net (code 64) (name "Net-(J1-Pad33)")
(node (ref U5) (pin 5))
(node (ref J1) (pin 33)))
(node (ref J1) (pin 33))
(node (ref U5) (pin 5)))
(net (code 65) (name "Net-(J1-Pad35)")
(node (ref J1) (pin 35))
(node (ref U5) (pin 6)))
(node (ref U5) (pin 6))
(node (ref J1) (pin 35)))
(net (code 66) (name "Net-(J0-Pad2)")
(node (ref U3) (pin 5))
(node (ref J0) (pin 2))
@ -625,51 +647,51 @@
(node (ref U3) (pin 6))
(node (ref U3) (pin 1)))
(net (code 68) (name "Net-(U3-Pad10)")
(node (ref U3) (pin 10))
(node (ref U3) (pin 11)))
(node (ref U3) (pin 11))
(node (ref U3) (pin 10)))
(net (code 69) (name "Net-(U3-Pad8)")
(node (ref U5) (pin 11))
(node (ref U3) (pin 8)))
(net (code 70) (name "Net-(J0-Pad41)")
(node (ref U3) (pin 9))
(node (ref U2) (pin 1))
(node (ref U8) (pin 4))
(node (ref U3) (pin 2))
(node (ref U8) (pin 1))
(node (ref J0) (pin 41)))
(node (ref J0) (pin 41))
(node (ref U3) (pin 2))
(node (ref U2) (pin 1))
(node (ref U3) (pin 9)))
(net (code 71) (name "Net-(J0-Pad3)")
(node (ref J0) (pin 3))
(node (ref U1) (pin 9))
(node (ref J0) (pin 3))
(node (ref U3) (pin 13)))
(net (code 72) (name "Net-(U2-Pad3)")
(node (ref U2) (pin 3))
(node (ref U2) (pin 5))
(node (ref U2) (pin 4))
(node (ref U2) (pin 3)))
(node (ref U2) (pin 4)))
(net (code 73) (name "Net-(U0-Pad19)")
(node (ref U0) (pin 19))
(node (ref U2) (pin 6)))
(net (code 74) (name "Net-(U0-Pad1)")
(node (ref U8) (pin 9))
(node (ref U0) (pin 1))
(node (ref U2) (pin 10))
(node (ref U2) (pin 9))
(node (ref U1) (pin 22))
(node (ref U0) (pin 1))
(node (ref U2) (pin 11))
(node (ref U2) (pin 9))
(node (ref U2) (pin 10))
(node (ref U3) (pin 4)))
(net (code 75) (name "Net-(J0-Pad18)")
(node (ref U2) (pin 13))
(node (ref U2) (pin 12))
(node (ref J0) (pin 18)))
(node (ref J0) (pin 18))
(node (ref U2) (pin 12)))
(net (code 76) (name "Net-(U1-Pad1)")
(node (ref U1) (pin 1)))
(net (code 77) (name "Net-(U1-Pad26)")
(node (ref U1) (pin 26)))
(net (code 78) (name "Net-(J1-Pad18)")
(node (ref U6) (pin 11))
(node (ref J1) (pin 18)))
(node (ref J1) (pin 18))
(node (ref U6) (pin 11)))
(net (code 79) (name "Net-(J1-Pad22)")
(node (ref U6) (pin 12))
(node (ref J1) (pin 22)))
(node (ref J1) (pin 22))
(node (ref U6) (pin 12)))
(net (code 80) (name "Net-(U6-Pad15)")
(node (ref U6) (pin 15)))
(net (code 81) (name "Net-(U6-Pad16)")
@ -679,156 +701,159 @@
(net (code 83) (name "Net-(U6-Pad18)")
(node (ref U6) (pin 18)))
(net (code 84) (name "Net-(U0-Pad16)")
(node (ref U1) (pin 13))
(node (ref U4) (pin 4))
(node (ref U7) (pin 7))
(node (ref U6) (pin 4))
(node (ref U0) (pin 16))
(node (ref U1) (pin 13))
(node (ref U6) (pin 4))
(node (ref U7) (pin 7))
(node (ref U5) (pin 7)))
(net (code 85) (name "Net-(U0-Pad11)")
(node (ref U5) (pin 18))
(node (ref U0) (pin 11))
(node (ref U1) (pin 19))
(node (ref U0) (pin 11))
(node (ref U7) (pin 18))
(node (ref U6) (pin 9))
(node (ref U4) (pin 9)))
(node (ref U4) (pin 9))
(node (ref U6) (pin 9)))
(net (code 86) (name "Net-(U1-Pad23)")
(node (ref U7) (pin 12))
(node (ref U1) (pin 23)))
(node (ref U1) (pin 23))
(node (ref U7) (pin 12)))
(net (code 87) (name "Net-(U0-Pad14)")
(node (ref U4) (pin 6))
(node (ref U7) (pin 13))
(node (ref U0) (pin 14))
(node (ref U5) (pin 13))
(node (ref U1) (pin 16))
(node (ref U6) (pin 6)))
(node (ref U4) (pin 6))
(node (ref U5) (pin 13))
(node (ref U6) (pin 6))
(node (ref U0) (pin 14)))
(net (code 88) (name "Net-(U0-Pad13)")
(node (ref U0) (pin 13))
(node (ref U6) (pin 7))
(node (ref U7) (pin 14))
(node (ref U1) (pin 17))
(node (ref U4) (pin 7))
(node (ref U6) (pin 7))
(node (ref U5) (pin 14)))
(net (code 89) (name "Net-(U7-Pad16)")
(node (ref U7) (pin 16)))
(net (code 90) (name "Net-(U0-Pad12)")
(node (ref U6) (pin 8))
(node (ref U0) (pin 12))
(node (ref U4) (pin 8))
(node (ref U7) (pin 17))
(node (ref U1) (pin 18))
(node (ref U5) (pin 17)))
(node (ref U5) (pin 17))
(node (ref U6) (pin 8))
(node (ref U7) (pin 17))
(node (ref U4) (pin 8))
(node (ref U0) (pin 12)))
(net (code 91) (name "Net-(U7-Pad19)")
(node (ref U7) (pin 19)))
(net (code 92) (name "Net-(J1-Pad16)")
(node (ref U7) (pin 2))
(node (ref J1) (pin 16)))
(node (ref J1) (pin 16))
(node (ref U7) (pin 2)))
(net (code 93) (name "Net-(U0-Pad18)")
(node (ref U4) (pin 2))
(node (ref U6) (pin 2))
(node (ref U0) (pin 18))
(node (ref U1) (pin 11))
(node (ref U5) (pin 3))
(node (ref U7) (pin 3)))
(node (ref U7) (pin 3))
(node (ref U0) (pin 18))
(node (ref U6) (pin 2))
(node (ref U5) (pin 3)))
(net (code 94) (name "Net-(U0-Pad17)")
(node (ref U0) (pin 17))
(node (ref U4) (pin 3))
(node (ref U7) (pin 4))
(node (ref U5) (pin 4))
(node (ref U1) (pin 12))
(node (ref U0) (pin 17))
(node (ref U6) (pin 3))
(node (ref U4) (pin 3)))
(node (ref U1) (pin 12)))
(net (code 95) (name "Net-(J1-Pad12)")
(node (ref J1) (pin 12))
(node (ref U7) (pin 5)))
(net (code 96) (name "Net-(U0-Pad15)")
(node (ref U0) (pin 15))
(node (ref U4) (pin 5))
(node (ref U6) (pin 5))
(node (ref U1) (pin 15))
(node (ref U5) (pin 8))
(node (ref U7) (pin 8))
(node (ref U4) (pin 5)))
(node (ref U5) (pin 8)))
(net (code 97) (name "Net-(U1-Pad2)")
(node (ref U7) (pin 15))
(node (ref U1) (pin 2)))
(net (code 98) (name "Net-(C5-Pad1)")
(node (ref U4) (pin 20))
(node (ref C6) (pin 1))
(node (ref C5) (pin 1))
(node (ref J1) (pin 1))
(node (ref U6) (pin 20))
(node (ref J1) (pin 17))
(node (ref U5) (pin 20))
(node (ref U7) (pin 20))
(node (ref U6) (pin 20))
(node (ref U4) (pin 20))
(node (ref J1) (pin 1))
(node (ref J1) (pin 17))
(node (ref C5) (pin 1))
(node (ref C8) (pin 1))
(node (ref C7) (pin 1)))
(net (code 99) (name "Net-(C1-Pad1)")
(node (ref J0) (pin 25))
(node (ref U2) (pin 14))
(node (ref U3) (pin 14))
(node (ref U0) (pin 20))
(node (ref J1) (pin 2))
(node (ref U1) (pin 28))
(node (ref C3) (pin 1))
(node (ref U8) (pin 14))
(node (ref C9) (pin 1))
(node (ref C4) (pin 1))
(node (ref J1) (pin 4))
(node (ref C2) (pin 1))
(node (ref C1) (pin 1)))
(net (code 100) (name "Net-(U6-Pad19)")
(node (ref U6) (pin 19))
(node (ref U8) (pin 3)))
(net (code 101) (name "Net-(U7-Pad11)")
(node (ref C7) (pin 1))
(node (ref U5) (pin 20)))
(net (code 99) (name "Net-(U6-Pad19)")
(node (ref U8) (pin 3))
(node (ref U6) (pin 19)))
(net (code 100) (name "Net-(U7-Pad11)")
(node (ref U8) (pin 6))
(node (ref U7) (pin 11)))
(net (code 102) (name "Net-(J0-Pad4)")
(net (code 101) (name "Net-(J0-Pad4)")
(node (ref U8) (pin 10))
(node (ref J0) (pin 4))
(node (ref U1) (pin 8)))
(net (code 103) (name "Net-(U8-Pad2)")
(node (ref U8) (pin 2))
(node (ref U8) (pin 8)))
(net (code 104) (name "Net-(U8-Pad11)")
(node (ref U1) (pin 8))
(node (ref J0) (pin 4)))
(net (code 102) (name "Net-(U8-Pad2)")
(node (ref U8) (pin 8))
(node (ref U8) (pin 2)))
(net (code 103) (name "Net-(U8-Pad11)")
(node (ref U8) (pin 11))
(node (ref U8) (pin 5)))
(net (code 105) (name "Net-(J0-Pad5)")
(net (code 104) (name "Net-(J0-Pad5)")
(node (ref U8) (pin 13))
(node (ref U1) (pin 7))
(node (ref J0) (pin 5))
(node (ref U8) (pin 13)))
(net (code 106) (name "Net-(C1-Pad2)")
(node (ref U2) (pin 7))
(node (ref C2) (pin 2))
(node (ref J0) (pin 26))
(node (ref U3) (pin 7))
(node (ref C8) (pin 2))
(node (ref C7) (pin 2))
(node (ref U8) (pin 7))
(node (ref U7) (pin 10))
(node (ref U0) (pin 10))
(node (ref C9) (pin 2))
(node (ref C3) (pin 2))
(node (ref C4) (pin 2))
(node (ref C1) (pin 2))
(node (ref C5) (pin 2))
(node (ref J0) (pin 5)))
(net (code 105) (name "Net-(C1-Pad2)")
(node (ref C6) (pin 2))
(node (ref U5) (pin 10))
(node (ref U5) (pin 1))
(node (ref J1) (pin 9))
(node (ref J1) (pin 6))
(node (ref C5) (pin 2))
(node (ref J0) (pin 26))
(node (ref C1) (pin 2))
(node (ref U7) (pin 10))
(node (ref C2) (pin 2))
(node (ref U7) (pin 1))
(node (ref C4) (pin 2))
(node (ref U0) (pin 10))
(node (ref C3) (pin 2))
(node (ref U4) (pin 1))
(node (ref U4) (pin 10))
(node (ref U3) (pin 7))
(node (ref U2) (pin 7))
(node (ref J1) (pin 14))
(node (ref U6) (pin 10))
(node (ref U6) (pin 1))
(node (ref J1) (pin 20))
(node (ref J1) (pin 39))
(node (ref J1) (pin 34))
(node (ref J1) (pin 30))
(node (ref U1) (pin 14))
(node (ref J1) (pin 25))
(node (ref U6) (pin 1)))
(net (code 107) (name "Net-(U1-Pad27)")
(node (ref U1) (pin 27))
(node (ref U8) (pin 12))
(node (ref U1) (pin 14))
(node (ref J1) (pin 30))
(node (ref C8) (pin 2))
(node (ref C7) (pin 2))
(node (ref J1) (pin 34))
(node (ref J1) (pin 39))
(node (ref J1) (pin 6))
(node (ref U8) (pin 7))
(node (ref J1) (pin 9))
(node (ref U5) (pin 1))
(node (ref C9) (pin 2))
(node (ref U5) (pin 10)))
(net (code 106) (name "Net-(U1-Pad27)")
(node (ref U2) (pin 8))
(node (ref U3) (pin 12))
(node (ref U2) (pin 8)))))
(node (ref U1) (pin 27))
(node (ref U8) (pin 12)))
(net (code 107) (name "Net-(C1-Pad1)")
(node (ref JPINTPWR1) (pin 1))
(node (ref U8) (pin 14))
(node (ref C9) (pin 1))
(node (ref U1) (pin 28))
(node (ref U2) (pin 14))
(node (ref U3) (pin 14))
(node (ref C3) (pin 1))
(node (ref U0) (pin 20))
(node (ref C4) (pin 1))
(node (ref C2) (pin 1))
(node (ref C1) (pin 1))
(node (ref J0) (pin 25)))
(net (code 108) (name "Net-(J1-Pad2)")
(node (ref J1) (pin 2))
(node (ref J1) (pin 4))
(node (ref JPINTPWR1) (pin 2)))))

Binary file not shown.

View File

@ -1,281 +0,0 @@
update=Friday, March 12, 2021 at 10:10:03 am
version=1
last_client=kicad
[general]
version=1
RootSch=
BoardNm=
[cvpcb]
version=1
NetIExt=net
[eeschema]
version=1
LibDir=
[eeschema/libraries]
[schematic_editor]
version=1
PageLayoutDescrFile=
PlotDirectoryName=./
SubpartIdSeparator=0
SubpartFirstId=65
NetFmtName=Pcbnew
SpiceAjustPassiveValues=0
LabSize=50
ERC_TestSimilarLabels=1
[pcbnew]
version=1
PageLayoutDescrFile=
LastNetListRead=Apple2IORPi.net
CopperLayerCount=2
BoardThickness=1.6
AllowMicroVias=0
AllowBlindVias=0
RequireCourtyardDefinitions=0
ProhibitOverlappingCourtyards=0
MinTrackWidth=0.1778
MinViaDiameter=0.4
MinViaDrill=0.3
MinMicroViaDiameter=0.2
MinMicroViaDrill=0.09999999999999999
MinHoleToHole=0.25
TrackWidth1=0.1778
ViaDiameter1=0.762
ViaDrill1=0.50038
dPairWidth1=0.2
dPairGap1=0.25
dPairViaGap1=0.25
SilkLineWidth=0.12
SilkTextSizeV=1
SilkTextSizeH=1
SilkTextSizeThickness=0.15
SilkTextItalic=0
SilkTextUpright=1
CopperLineWidth=0.2
CopperTextSizeV=1.5
CopperTextSizeH=1.5
CopperTextThickness=0.3
CopperTextItalic=0
CopperTextUpright=1
EdgeCutLineWidth=0.05
CourtyardLineWidth=0.05
OthersLineWidth=0.15
OthersTextSizeV=1
OthersTextSizeH=1
OthersTextSizeThickness=0.15
OthersTextItalic=0
OthersTextUpright=1
SolderMaskClearance=0
SolderMaskMinWidth=0
SolderPasteClearance=0
SolderPasteRatio=-0
[pcbnew/Layer.F.Cu]
Name=F.Cu
Type=0
Enabled=1
[pcbnew/Layer.In1.Cu]
Name=In1.Cu
Type=0
Enabled=0
[pcbnew/Layer.In2.Cu]
Name=In2.Cu
Type=0
Enabled=0
[pcbnew/Layer.In3.Cu]
Name=In3.Cu
Type=0
Enabled=0
[pcbnew/Layer.In4.Cu]
Name=In4.Cu
Type=0
Enabled=0
[pcbnew/Layer.In5.Cu]
Name=In5.Cu
Type=0
Enabled=0
[pcbnew/Layer.In6.Cu]
Name=In6.Cu
Type=0
Enabled=0
[pcbnew/Layer.In7.Cu]
Name=In7.Cu
Type=0
Enabled=0
[pcbnew/Layer.In8.Cu]
Name=In8.Cu
Type=0
Enabled=0
[pcbnew/Layer.In9.Cu]
Name=In9.Cu
Type=0
Enabled=0
[pcbnew/Layer.In10.Cu]
Name=In10.Cu
Type=0
Enabled=0
[pcbnew/Layer.In11.Cu]
Name=In11.Cu
Type=0
Enabled=0
[pcbnew/Layer.In12.Cu]
Name=In12.Cu
Type=0
Enabled=0
[pcbnew/Layer.In13.Cu]
Name=In13.Cu
Type=0
Enabled=0
[pcbnew/Layer.In14.Cu]
Name=In14.Cu
Type=0
Enabled=0
[pcbnew/Layer.In15.Cu]
Name=In15.Cu
Type=0
Enabled=0
[pcbnew/Layer.In16.Cu]
Name=In16.Cu
Type=0
Enabled=0
[pcbnew/Layer.In17.Cu]
Name=In17.Cu
Type=0
Enabled=0
[pcbnew/Layer.In18.Cu]
Name=In18.Cu
Type=0
Enabled=0
[pcbnew/Layer.In19.Cu]
Name=In19.Cu
Type=0
Enabled=0
[pcbnew/Layer.In20.Cu]
Name=In20.Cu
Type=0
Enabled=0
[pcbnew/Layer.In21.Cu]
Name=In21.Cu
Type=0
Enabled=0
[pcbnew/Layer.In22.Cu]
Name=In22.Cu
Type=0
Enabled=0
[pcbnew/Layer.In23.Cu]
Name=In23.Cu
Type=0
Enabled=0
[pcbnew/Layer.In24.Cu]
Name=In24.Cu
Type=0
Enabled=0
[pcbnew/Layer.In25.Cu]
Name=In25.Cu
Type=0
Enabled=0
[pcbnew/Layer.In26.Cu]
Name=In26.Cu
Type=0
Enabled=0
[pcbnew/Layer.In27.Cu]
Name=In27.Cu
Type=0
Enabled=0
[pcbnew/Layer.In28.Cu]
Name=In28.Cu
Type=0
Enabled=0
[pcbnew/Layer.In29.Cu]
Name=In29.Cu
Type=0
Enabled=0
[pcbnew/Layer.In30.Cu]
Name=In30.Cu
Type=0
Enabled=0
[pcbnew/Layer.B.Cu]
Name=B.Cu
Type=0
Enabled=1
[pcbnew/Layer.B.Adhes]
Enabled=1
[pcbnew/Layer.F.Adhes]
Enabled=1
[pcbnew/Layer.B.Paste]
Enabled=1
[pcbnew/Layer.F.Paste]
Enabled=1
[pcbnew/Layer.B.SilkS]
Enabled=1
[pcbnew/Layer.F.SilkS]
Enabled=1
[pcbnew/Layer.B.Mask]
Enabled=1
[pcbnew/Layer.F.Mask]
Enabled=1
[pcbnew/Layer.Dwgs.User]
Enabled=1
[pcbnew/Layer.Cmts.User]
Enabled=1
[pcbnew/Layer.Eco1.User]
Enabled=1
[pcbnew/Layer.Eco2.User]
Enabled=1
[pcbnew/Layer.Edge.Cuts]
Enabled=1
[pcbnew/Layer.Margin]
Enabled=1
[pcbnew/Layer.B.CrtYd]
Enabled=1
[pcbnew/Layer.F.CrtYd]
Enabled=1
[pcbnew/Layer.B.Fab]
Enabled=1
[pcbnew/Layer.F.Fab]
Enabled=1
[pcbnew/Layer.Rescue]
Enabled=0
[pcbnew/Netclasses]
[pcbnew/Netclasses/Default]
Name=Default
Clearance=0.1778
TrackWidth=0.1778
ViaDiameter=0.762
ViaDrill=0.50038
uViaDiameter=0.3
uViaDrill=0.1
dPairWidth=0.2
dPairGap=0.25
dPairViaGap=0.25
[pcbnew/Netclasses/1]
Name=3V3
Clearance=0.1778
TrackWidth=0.3556
ViaDiameter=0.762
ViaDrill=0.50038
uViaDiameter=0.3
uViaDrill=0.1
dPairWidth=0.2
dPairGap=0.25
dPairViaGap=0.25
[pcbnew/Netclasses/2]
Name=5V
Clearance=0.254
TrackWidth=0.8128
ViaDiameter=0.762
ViaDrill=0.7112
uViaDiameter=0.3
uViaDrill=0.1
dPairWidth=0.2
dPairGap=0.25
dPairViaGap=0.25
[pcbnew/Netclasses/3]
Name=Ground
Clearance=0.254
TrackWidth=0.8128
ViaDiameter=0.762
ViaDrill=0.7112
uViaDiameter=0.3
uViaDrill=0.1
dPairWidth=0.2
dPairGap=0.25
dPairViaGap=0.25

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 195 KiB

After

Width:  |  Height:  |  Size: 254 KiB

File diff suppressed because it is too large Load Diff

View File

@ -16,7 +16,11 @@ The purpose of this project is to provide I/O for an Apple II series 8 bit compu
7. Supports "RPI" command from BASIC to execute Linux commands from the command prompt or inside BASIC programs: `10 PRINT CHR$(4);"RPI ls -al /"`
## Project Status
So far, this is a project and not a finished product. The current prototype is on the fifth revision and about 20 have been assembled and tested. It is now possible for the Apple II to boot from and write to virtual hard drive images stored on the RPi in any slot (except slot 3), execute Linux commands from Applesoft BASIC and run a bash shell with VT100 emulation. The code has very few tests and is incomplete. Note that currently the firmware assumes an 80 column card is in slot 3 and than you have lowercase support. Most development has been done with an enhanced Apple //e with the card in slot 7. If you have other drive controllers earlier in the boot cycle, you can still boot from the Apple2-IO-RPi. For example, if the card was in slot 4, you could type `PR#4` from the BASIC prompt to boot the card. Note that the Raspberry Pi Zero W (and W 2) consume about 1/4 of all available power to the expansion slots when idle and close to all available power when busy. It is not recommended to have a lot of other cards in the system at the same time. If you have a problem or idea for enhancement, log an issue [here](https://github.com/tjboldt/Apple2-IO-RPi/issues) or start a [discussion](https://github.com/tjboldt/Apple2-IO-RPi/discussions/categories/general). I recommend starring/watching the project for updates on GitHub. You are welcome to fork the project and submit pull requests which I will review.
So far, this is still a project and not a finished product. The current prototype is on the sixth revision and about 30 of the previous prototypes have been assembled and tested. The sixth prototype is functionally equivalent to the fifth, other than a new jumper to select internal/external power.
The card enables the Apple II to boot from and write to virtual hard drive images stored on the RPi in any slot (except slot 3), execute Linux commands from Applesoft BASIC and run a bash shell with VT100 emulation. The code has very few tests and is incomplete. Note that currently the firmware assumes an 80 column card is in slot 3 and than you have lowercase support. Most development has been done with an enhanced Apple //e with the card in slot 7. If you have other drive controllers earlier in the boot cycle, you can still boot from the Apple2-IO-RPi. For example, if the card was in slot 4, you could type `PR#4` from the BASIC prompt to boot the card. Note that the Raspberry Pi Zero W (and W 2) consume 170 - 250 mA and there is only 500 mA available to all expansion slots according to Apple. It is not recommended to have a lot of other cards in the system at the same time. With the sixth revision of the prototype, it is possible to remove the power jumper and run the RPi on an external USB power source. If configured for external power, note that the card's firmware will hang on boot without USB power on as the latch chips are powered by the 3.3V output of the RPi.
If you have a problem or idea for enhancement, log an issue [here](https://github.com/tjboldt/Apple2-IO-RPi/issues) or start a [discussion](https://github.com/tjboldt/Apple2-IO-RPi/discussions/categories/general). I recommend starring/watching the project for updates on GitHub. You are welcome to fork the project and submit pull requests which I will review.
## Roadmap
1. Allow more than two virtual hard drives at a time
@ -34,5 +38,15 @@ So far, this is a project and not a finished product. The current prototype is o
[Update to latest](https://github.com/tjboldt/Apple2-IO-RPi/discussions/65)
## Contributions/Thanks
- Hans Hübner ([@hanshuebner](https://github.com/hanshuebner)) for help cleaning up schematics
- Scott ([@figital](https://github.com/figital)) for assembling early prototypes and recommending the AT28C64B chip
- Brokencodez for help with 3.3V conversion
- David Schmenk ([@dschmenk](https://github.com/dschmenk)) for creating his Apple2Pi project, proving that Raspberry Pi can be powered by the Apple II expansion bus
- Wyatt Wong ([@wyatt-wong](https://github.com/wyatt-wong)) for testing with multiple cards
- ([@Abysmal](https://github.com/Abysmal)) for shell and rpi.command testing
- ([@bfranske](https://github.com/bfranske)) for suggesting adding the 5V jumper
- Tim Boldt ([@timboldt](https://github.com/timboldt)) for recommending removing sysfs based GPIO code
## Similar Project
If you prefer having Apple II peripherals control a Raspberry Pi rather than simply using the Raspberry Pi to provide storage, network access and processing to the Apple II, have a look at David Schmenk's excellent [Apple2Pi](https://github.com/dschmenk/apple2pi) project. I am often asked about differences between these two projects. They are similar in some ways but essentially opposite. The Apple2Pi is meant for the primary machine to be the RPi, using the Apple II for it's peripherals. The Apple2-IO-RPi is meant to have the Apple II as the primary machine and just use the RPi for its processing, storage and network.

BIN
RaspberryPi/Apple2-IO-RPi.hdv Executable file → Normal file

Binary file not shown.

View File

@ -14,6 +14,7 @@ var escapeSequence string
var operatingSystemSequence bool
var windowTop int
var windowBottom = 23
var applicationMode = false
func sendCharacter(comm A2Io, b byte) {
if b == 0x1b {
@ -63,11 +64,11 @@ func sendCharacter(comm A2Io, b byte) {
switch escapeSequence {
// Set/clear application mode for cursor
case "^[[?1h":
//applicationMode = true
applicationMode = true
escapeSequence = ""
return
case "^[[?1l":
//applicationMode = false
applicationMode = false
comm.WriteByte('T')
comm.WriteByte(0x00)
comm.WriteByte('B')
@ -222,17 +223,32 @@ func readCharacter(comm A2Io) (string, error) {
b, err := comm.ReadByte()
var s = string(b)
if err == nil {
switch b {
case 0x0b: // up
s = "\033[A"
case 0x0a: // down
s = "\033[B"
case 0x15: // right
s = "\033[C"
case 0x08: // left
s = "\033[D"
case 0x0d: // return
s = string(byte(0x0a))
if applicationMode {
switch b {
case 0x0b: // up
s = "\033OA"
case 0x0a: // down
s = "\033OB"
case 0x15: // right
s = "\033OC"
case 0x08: // left
s = "\033OD"
case 0x0d: // return
s = string(byte(0x0a))
}
} else {
switch b {
case 0x0b: // up
s = "\033[A"
case 0x0a: // down
s = "\033[B"
case 0x15: // right
s = "\033[C"
case 0x08: // left
s = "\033[D"
case 0x0d: // return
s = string(byte(0x0a))
}
}
}
return s, err

View File

@ -5,5 +5,5 @@ go 1.16
require (
github.com/creack/pty v1.1.17
github.com/stianeikeland/go-rpio/v4 v4.6.0
github.com/tjboldt/ProDOS-Utilities v0.0.0-20210607001541-fa0e76cf84c0
github.com/tjboldt/ProDOS-Utilities v0.3.0
)

View File

@ -2,5 +2,5 @@ github.com/creack/pty v1.1.17 h1:QeVUsEDNrLBW4tMgZHvxy18sKtr6VI492kBhUfhDJNI=
github.com/creack/pty v1.1.17/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4=
github.com/stianeikeland/go-rpio/v4 v4.6.0 h1:eAJgtw3jTtvn/CqwbC82ntcS+dtzUTgo5qlZKe677EY=
github.com/stianeikeland/go-rpio/v4 v4.6.0/go.mod h1:A3GvHxC1Om5zaId+HqB3HKqx4K/AqeckxB7qRjxMK7o=
github.com/tjboldt/ProDOS-Utilities v0.0.0-20210607001541-fa0e76cf84c0 h1:iH6+15jJQsUMv9yeC5m26qh8VdJeRmZiYGM1ZG4aLVI=
github.com/tjboldt/ProDOS-Utilities v0.0.0-20210607001541-fa0e76cf84c0/go.mod h1:eBQRf0U+goRbBOxzFCwRW+FZmALC8dfYaqCwcqwzi74=
github.com/tjboldt/ProDOS-Utilities v0.3.0 h1:nlBvrGtvAV7KBfxiSkXHdosmDLEYAXMq955P8NL0qiE=
github.com/tjboldt/ProDOS-Utilities v0.3.0/go.mod h1:eBQRf0U+goRbBOxzFCwRW+FZmALC8dfYaqCwcqwzi74=

View File

@ -13,8 +13,6 @@ import (
"github.com/tjboldt/ProDOS-Utilities/prodos"
)
var oldFirmware = false
// ReadBlockCommand handles requests to read ProDOS blocks
func ReadBlockCommand(drive1 *os.File, drive2 *os.File) {
blockLow, _ := comm.ReadByte()
@ -22,33 +20,38 @@ func ReadBlockCommand(drive1 *os.File, drive2 *os.File) {
var driveUnit byte
var err error
if !oldFirmware {
driveUnit, err = comm.ReadByte()
fmt.Printf("Drive unit: %0X\n", driveUnit)
driveUnit, err = comm.ReadByte()
if err != nil {
fmt.Printf("Drive unit not sent, assuming older firmware")
oldFirmware = true
}
if err != nil {
fmt.Printf("Failed to read block")
return
}
file := drive1
driveNumber := 1
if driveUnit >= 128 {
file = drive2
driveNumber = 2
}
slotNumber := driveUnit &0x7F >> 4
block := int(blockHigh)*256 + int(blockLow)
fmt.Printf("Read block %d\n", block)
fmt.Printf("Read block %04X in slot %d, drive %d...", block, slotNumber, driveNumber)
buffer := prodos.ReadBlock(file, block)
buffer,err := prodos.ReadBlock(file, block)
if err != nil {
fmt.Printf("failed %s\n",err)
return
}
err = comm.WriteBlock(buffer)
if err == nil {
fmt.Printf("Read block completed\n")
fmt.Printf("succeeded\n")
} else {
fmt.Printf("Failed to read block\n")
fmt.Printf("failed %s\n",err)
}
}
@ -60,27 +63,39 @@ func WriteBlockCommand(drive1 *os.File, drive2 *os.File) {
var driveUnit byte
var err error
if !oldFirmware {
driveUnit, err = comm.ReadByte()
if err != nil {
fmt.Printf("Drive unit not sent, assuming older firmware")
oldFirmware = true
}
driveUnit, err = comm.ReadByte()
if err != nil {
fmt.Printf("Failed to write block")
return
}
file := drive1
driveNumber := 1
if driveUnit >= 128 {
file = drive2
driveNumber = 2
}
buffer := make([]byte, 512)
block := int(blockHigh)*256 + int(blockLow)
fmt.Printf("Write block %d\n", block)
slotNumber := driveUnit &0x7F >> 4
comm.ReadBlock(buffer)
prodos.WriteBlock(file, block, buffer)
fmt.Printf("Write block completed\n")
fmt.Printf("Write block %04X in slot %d, drive %d...", block, slotNumber, driveNumber)
err = comm.ReadBlock(buffer)
if err != nil {
fmt.Printf("failed %s\n",err)
return
}
fmt.Printf("...")
err = prodos.WriteBlock(file, block, buffer)
if err == nil {
fmt.Printf("succeeded\n")
} else {
fmt.Printf("failed\n")
}
}

View File

@ -10,15 +10,17 @@ package handlers
import (
"errors"
"fmt"
"io"
"os"
"os/exec"
"strconv"
"strings"
"time"
"github.com/tjboldt/Apple2-IO-RPi/RaspberryPi/apple2driver/info"
)
var forceLowercase = false
var execTimeoutSeconds = int(10)
// ExecCommand handles requests for the Apple II executing Linux commands
func ExecCommand() {
@ -68,6 +70,10 @@ func ExecCommand() {
a2wifi()
return
}
if strings.HasPrefix(linuxCommand, "a2timeout") {
a2timeout(linuxCommand)
return
}
if linuxCommand == "a2prompt" {
prompt := fmt.Sprintf("A2IO:%s ", workingDirectory)
comm.WriteString(prompt)
@ -100,14 +106,7 @@ func execCommand(linuxCommand string, workingDirectory string) {
comm.WriteString("Failed to set stdout\r")
return
}
stdin, err := cmd.StdinPipe()
if err != nil {
fmt.Printf("Failed to set stdin\n")
comm.WriteString("Failed to set stdin\r")
return
}
fmt.Printf("Command output:\n")
err = cmd.Start()
if err != nil {
fmt.Printf("Failed to start command\n")
@ -115,94 +114,74 @@ func execCommand(linuxCommand string, workingDirectory string) {
return
}
outputComplete := make(chan bool)
inputComplete := make(chan bool)
userCancelled := make(chan bool)
go getStdin(stdin, outputComplete, inputComplete, userCancelled)
go getStdout(stdout, outputComplete, userCancelled)
timeout := time.After(time.Duration(execTimeoutSeconds) * time.Second)
for {
select {
case <-outputComplete:
outputComplete <- true
cmd.Wait()
comm.WriteByte(0)
return
case <-userCancelled:
userCancelled <- true
case <-timeout:
comm.WriteString("\rCancelled by apple2driver\r")
cmd.Process.Kill()
return
case <-inputComplete:
cmd.Wait()
comm.WriteByte(0)
return
}
}
}
func getStdout(stdout io.ReadCloser, outputComplete chan bool, userCancelled chan bool) {
for {
select {
case <-userCancelled:
fmt.Printf("User Cancelled stdout\n")
stdout.Close()
return
default:
bb := make([]byte, 1)
n, err := stdout.Read(bb)
if err != nil {
stdout.Close()
outputComplete <- true
return
}
if n > 0 {
b := bb[0]
comm.SendCharacter(b)
}
}
}
}
func getStdin(stdin io.WriteCloser, done chan bool, inputComplete chan bool, userCancelled chan bool) {
for {
select {
case <-done:
stdin.Close()
inputComplete <- true
return
default:
b, err := comm.ReadByte()
if err == nil {
if b == 0x00 || b == 0x03 {
stdin.Close()
userCancelled <- true
fmt.Printf("\nUser cancelled stdin\n")
return
n, stdOutErr := stdout.Read(bb)
if stdOutErr == nil {
if n > 0 {
b := bb[0]
comm.SendCharacter(b)
}
bb := make([]byte, 1)
stdin.Write(bb)
} else {
comm.WriteByte(0)
cmd.Wait()
return
}
}
}
}
func a2version() {
comm.WriteString("\rVersion: " + info.Version + "\r")
comm.WriteString("\rDriver version: " + info.Version + "\r")
}
func a2help() {
comm.WriteString("\r" +
"Built-in commands:\r" +
"------------------\r" +
"a2version - display version number\r" +
comm.WriteString("\rDriver version: " + info.Version + "\r" +
"\r" +
"Example from ] prompt:\r" +
"]RPI ls /home/pi\r" +
"\r" +
"Example from Applesoft BASIC:\r" +
"]10 PRINT CHR$(4)\"RPI ping apple.com\"\r" +
"]RUN\r" +
"\r" +
"Driver commands called with RPI:\r" +
"a2help - display this message\r" +
"a2version - display driver version\r" +
"a2wifi - set up wifi\r" +
"a2timeout - seconds to timeout commands\r" +
"A2LOWER - force lowercase for II+\r" +
"a2lower - disable force lowercase for II+\r" +
"a2lower - disable force lowercase\r" +
"\r")
}
func a2timeout(linuxCommand string) {
params := strings.Fields(linuxCommand)
switch len(params) {
case 1:
comm.WriteString("\rCommand timeout: " + strconv.FormatInt(int64(execTimeoutSeconds), 10) + "\r")
case 2:
timeoutSeconds, err := strconv.ParseInt(params[1], 10, 32)
if err != nil {
comm.WriteString("\rFailed to parse timeout\r")
} else {
execTimeoutSeconds = int(timeoutSeconds)
comm.WriteString("\rCommand timeout set to: " + strconv.FormatInt(int64(execTimeoutSeconds), 10) + "\r")
}
default:
comm.WriteString("\rToo many parameters\n")
}
}
func a2lower(enable bool) {
forceLowercase = enable
comm.WriteString(fmt.Sprintf("All commands will be converted to lowercase: %t\r", forceLowercase))

View File

@ -16,12 +16,12 @@ import (
// GetTimeCommand handles the request to get ProDOS time bytes
func GetTimeCommand() {
fmt.Printf("Sending date/time...\n")
fmt.Printf("Sending date/time...")
prodosTime := prodos.DateTimeToProDOS(time.Now())
for i := 0; i < len(prodosTime); i++ {
comm.WriteByte(prodosTime[i])
}
fmt.Printf("Send time complete\n")
fmt.Printf("%02X %02X %02X %02X\n", prodosTime[0], prodosTime[1], prodosTime[2], prodosTime[3])
}

View File

@ -8,4 +8,4 @@ package info
// Version is the hexadecimal version number that
// should be incremented with each driver update
const Version = "0023"
const Version = "0026"

43
RaspberryPi/setup.sh Normal file
View File

@ -0,0 +1,43 @@
#!/bin/sh
sudo apt install git -y
wget https://golang.org/dl/go1.17.3.linux-armv6l.tar.gz
sudo tar -C /usr/local -xzf go1.17.3.linux-armv6l.tar.gz
sudo ln -s /usr/local/go/bin/go /usr/bin/go
git clone https://github.com/tjboldt/ProDOS-Utilities.git
cd ProDOS-Utilities || exit
go build
cd ~ || exit
sudo ln -s /home/pi/ProDOS-Utilities/ProDOS-Utilities /usr/bin/ProDOS-Utilities
git clone https://github.com/tjboldt/Apple2-IO-RPi.git
cd Apple2-IO-RPi/RaspberryPi/apple2driver || exit
go build
sudo apt install cc65 vim -y
cd ~ || exit
sudo bash -c 'cat > /boot/config.txt << EOF
disable_splash=1
dtoverlay=disable-bt
boot_delay=0
EOF'
sudo bash -c 'echo " quiet" >> /boot/cmdline.txt'
sudo bash -c 'cat > /etc/systemd/system/apple2driver.service << EOF
[Unit]
Description=Apple2-IO-RPi Driver
[Service]
ExecStart=/home/pi/Apple2-IO-RPi/RaspberryPi/apple2driver/apple2driver
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=apple2driver
User=pi
Group=pi
WorkingDirectory=/home/pi/Apple2-IO-RPi/RaspberryPi/apple2driver
[Install]
WantedBy=basic.target
EOF'
sudo systemctl start apple2driver
sudo systemctl enable apple2driver
sudo systemctl disable avahi-daemon.service
sudo systemctl disable triggerhappy.service
sudo systemctl disable raspi-config.service

View File

@ -4,6 +4,7 @@
| Hardware Version | Supported |
| ---------------- | ------------------ |
| Prototype 6 | :white_check_mark: |
| Prototype 5 | :white_check_mark: |
| Prototype 4 | :white_check_mark: |
| Older prototypes | :x: |