forked from Apple-2-HW/ProDOS-ROM-Drive
Fixed firmware for v3 board
This commit is contained in:
parent
62c7343258
commit
63f7ded969
Binary file not shown.
@ -32,7 +32,7 @@
|
||||
|
||||
;ID bytes for booting and drive detection
|
||||
cpx #$20 ;ID bytes for ProDOS and the
|
||||
cpx #$00 ; Apple Autostart ROM
|
||||
ldy #$00 ; Apple Autostart ROM
|
||||
cpx #$03 ;
|
||||
cpx #$3C ;this one for older II's
|
||||
|
||||
@ -55,7 +55,8 @@
|
||||
|
||||
;display copyright message
|
||||
ldy #<text
|
||||
drawtxt: lda (buflo),y
|
||||
drawtxt:
|
||||
lda (buflo),y
|
||||
sta $07D0,y ;put text on last line
|
||||
iny
|
||||
bne drawtxt
|
||||
@ -162,7 +163,7 @@ loop16:
|
||||
dec bufhi
|
||||
clc ;clear error code for success
|
||||
lda #$00
|
||||
rts ;return to ProDOS
|
||||
jmp (jumpAddressLo)
|
||||
|
||||
readnext256:
|
||||
inc bufhi
|
||||
@ -189,5 +190,5 @@ end:
|
||||
|
||||
.byte 0,0 ;0000 blocks = check status
|
||||
.byte 3 ;bit 0=read 1=status
|
||||
.byte entry&$00FF ;low byte of entry
|
||||
.byte <entry ;low byte of entry
|
||||
|
||||
|
Binary file not shown.
@ -36,7 +36,7 @@ Current file: Firmware.asm
|
||||
00C700 1
|
||||
00C700 1 ;ID bytes for booting and drive detection
|
||||
00C700 1 E0 20 cpx #$20 ;ID bytes for ProDOS and the
|
||||
00C702 1 E0 00 cpx #$00 ; Apple Autostart ROM
|
||||
00C702 1 A0 00 ldy #$00 ; Apple Autostart ROM
|
||||
00C704 1 E0 03 cpx #$03 ;
|
||||
00C706 1 E0 3C cpx #$3C ;this one for older II's
|
||||
00C708 1
|
||||
@ -58,8 +58,9 @@ Current file: Firmware.asm
|
||||
00C720 1 AA tax
|
||||
00C721 1
|
||||
00C721 1 ;display copyright message
|
||||
00C721 1 A0 C1 ldy #<text
|
||||
00C723 1 B1 44 drawtxt: lda (buflo),y
|
||||
00C721 1 A0 C3 ldy #<text
|
||||
00C723 1 drawtxt:
|
||||
00C723 1 B1 44 lda (buflo),y
|
||||
00C725 1 99 D0 07 sta $07D0,y ;put text on last line
|
||||
00C728 1 C8 iny
|
||||
00C729 1 D0 F8 bne drawtxt
|
||||
@ -162,41 +163,50 @@ Current file: Firmware.asm
|
||||
00C7AE 1 C0 00 cpy #$00
|
||||
00C7B0 1 D0 DD bne loop256
|
||||
00C7B2 1 C6 FF dec blockHalfCounter
|
||||
00C7B4 1 D0 06 bne readnext256
|
||||
00C7B4 1 D0 08 bne readnext256
|
||||
00C7B6 1 C6 45 dec bufhi
|
||||
00C7B8 1 18 clc ;clear error code for success
|
||||
00C7B9 1 A9 00 lda #$00
|
||||
00C7BB 1 60 rts ;return to ProDOS
|
||||
00C7BC 1
|
||||
00C7BC 1 readnext256:
|
||||
00C7BC 1 E6 45 inc bufhi
|
||||
00C7BE 1 18 clc
|
||||
00C7BF 1 90 C7 bcc read256
|
||||
00C7C1 1
|
||||
00C7C1 1 ;macro for string with high-bit set
|
||||
00C7C1 1 .macro aschi str
|
||||
00C7C1 1 .repeat .strlen (str), c
|
||||
00C7C1 1 .byte .strat (str, c) | $80
|
||||
00C7C1 1 .endrep
|
||||
00C7C1 1 .endmacro
|
||||
00C7C1 1
|
||||
00C7C1 1 D2 CF CD AD text: aschi "ROM-Drive (c)1998-2021 Terence J. Boldt"
|
||||
00C7C5 1 C4 F2 E9 F6
|
||||
00C7C9 1 E5 A0 A8 E3
|
||||
00C7E8 1 end:
|
||||
00C7E8 1 00 .byte 0
|
||||
00C7E9 1
|
||||
00C7E9 1 ; These bytes need to be at the top of the 256 byte firmware as ProDOS
|
||||
00C7E9 1 ; uses these to find the entry point and drive capabilities
|
||||
00C7E9 1
|
||||
00C7E9 1 00 00 00 00 .repeat 251-<end
|
||||
00C7ED 1 00 00 00 00
|
||||
00C7F1 1 00 00 00 00
|
||||
00C7BB 1 6C FA 00 jmp (jumpAddressLo)
|
||||
00C7BE 1
|
||||
00C7BE 1 readnext256:
|
||||
00C7BE 1 E6 45 inc bufhi
|
||||
00C7C0 1 18 clc
|
||||
00C7C1 1 90 C5 bcc read256
|
||||
00C7C3 1
|
||||
00C7C3 1 ;macro for string with high-bit set
|
||||
00C7C3 1 .macro aschi str
|
||||
00C7C3 1 .repeat .strlen (str), c
|
||||
00C7C3 1 .byte .strat (str, c) | $80
|
||||
00C7C3 1 .endrep
|
||||
00C7C3 1 .endmacro
|
||||
00C7C3 1
|
||||
00C7C3 1 D2 CF CD AD text: aschi "ROM-Drive (c)1998-2021 Terence J. Boldt"
|
||||
00C7C7 1 C4 F2 E9 F6
|
||||
00C7CB 1 E5 A0 A8 E3
|
||||
00C7CF 1 A9 B1 B9 B9
|
||||
00C7D3 1 B8 AD B2 B0
|
||||
00C7D7 1 B2 B1 A0 D4
|
||||
00C7DB 1 E5 F2 E5 EE
|
||||
00C7DF 1 E3 E5 A0 CA
|
||||
00C7E3 1 AE A0 C2 EF
|
||||
00C7E7 1 EC E4 F4
|
||||
00C7EA 1 end:
|
||||
00C7EA 1 00 .byte 0
|
||||
00C7EB 1
|
||||
00C7EB 1 ; These bytes need to be at the top of the 256 byte firmware as ProDOS
|
||||
00C7EB 1 ; uses these to find the entry point and drive capabilities
|
||||
00C7EB 1
|
||||
00C7EB 1 00 00 00 00 .repeat 251-<end
|
||||
00C7EF 1 00 00 00 00
|
||||
00C7F3 1 00 00 00 00
|
||||
00C7F7 1 00 00 00 00
|
||||
00C7FB 1 00
|
||||
00C7FC 1 .byte 0
|
||||
00C7FC 1 .endrepeat
|
||||
00C7FC 1
|
||||
00C7FC 1 00 00 .byte 0,0 ;0000 blocks = check status
|
||||
00C7FE 1 03 .byte 3 ;bit 0=read 1=status
|
||||
00C7FF 1 35 .byte entry&$00FF ;low byte of entry
|
||||
00C7FF 1 35 .byte <entry ;low byte of entry
|
||||
00C800 1
|
||||
00C800 1
|
||||
|
BIN
Firmware/GamesWithFirmware.po
Executable file
BIN
Firmware/GamesWithFirmware.po
Executable file
Binary file not shown.
@ -1 +1,46 @@
|
||||
.byte "Do not overwrite any of blocks after this point as it is used for the firmware. There are 7 copies of the 256 byte firmware, one for each slot due to 6502 code being non-relocatable. Have fun and feel free to improve on the hardware / sofware. --- Terence"
|
||||
printChar = $FDED
|
||||
home = $FC58
|
||||
|
||||
.org $2000
|
||||
|
||||
jsr home
|
||||
ldy #$0
|
||||
nextChar:
|
||||
lda text,y
|
||||
beq infiniteLoop
|
||||
jsr printChar
|
||||
iny
|
||||
clc
|
||||
bcc nextChar
|
||||
infiniteLoop:
|
||||
clc
|
||||
bcc infiniteLoop ;hang for eternity
|
||||
|
||||
.macro aschi str
|
||||
.repeat .strlen (str), c
|
||||
.byte .strat (str, c) | $80
|
||||
.endrep
|
||||
.endmacro
|
||||
|
||||
text:
|
||||
aschi "Block 0001 normally reserved for SOS"
|
||||
.byte $8D
|
||||
aschi "boot contains the firmware for the"
|
||||
.byte $8D
|
||||
aschi "ProDOS ROM-Drive."
|
||||
.byte $8D
|
||||
.byte $8D
|
||||
aschi "(c)1998 - 2021 Terence J. Boldt"
|
||||
.byte $8D
|
||||
.byte $8D
|
||||
aschi "github.com/tjboldt/ProDOS-ROMDrive"
|
||||
.byte $8D
|
||||
.byte $8D
|
||||
aschi "Do NOT overwrite Block 0001"
|
||||
|
||||
end:
|
||||
.byte 0
|
||||
|
||||
.repeat 255-<end
|
||||
.byte 0
|
||||
.endrepeat
|
||||
|
103
Firmware/Warning.lst
Normal file
103
Firmware/Warning.lst
Normal file
@ -0,0 +1,103 @@
|
||||
ca65 V2.18 - N/A
|
||||
Main file : Warning.asm
|
||||
Current file: Warning.asm
|
||||
|
||||
000000r 1 printChar = $FDED
|
||||
000000r 1 home = $FC58
|
||||
000000r 1
|
||||
000000r 1 .org $2000
|
||||
002000 1
|
||||
002000 1 20 58 FC jsr home
|
||||
002003 1 A0 00 ldy #$0
|
||||
002005 1 nextChar:
|
||||
002005 1 B9 14 20 lda text,y
|
||||
002008 1 F0 07 beq infiniteLoop
|
||||
00200A 1 20 ED FD jsr printChar
|
||||
00200D 1 C8 iny
|
||||
00200E 1 18 clc
|
||||
00200F 1 90 F4 bcc nextChar
|
||||
002011 1 infiniteLoop:
|
||||
002011 1 18 clc
|
||||
002012 1 90 FD bcc infiniteLoop ;hang for eternity
|
||||
002014 1
|
||||
002014 1 .macro aschi str
|
||||
002014 1 .repeat .strlen (str), c
|
||||
002014 1 .byte .strat (str, c) | $80
|
||||
002014 1 .endrep
|
||||
002014 1 .endmacro
|
||||
002014 1
|
||||
002014 1 text:
|
||||
002014 1 C2 EC EF E3 aschi "Block 0001 normally reserved for SOS"
|
||||
002018 1 EB A0 B0 B0
|
||||
00201C 1 B0 B1 A0 EE
|
||||
002020 1 EF F2 ED E1
|
||||
002024 1 EC EC F9 A0
|
||||
002028 1 F2 E5 F3 E5
|
||||
00202C 1 F2 F6 E5 E4
|
||||
002030 1 A0 E6 EF F2
|
||||
002034 1 A0 D3 CF D3
|
||||
002038 1 8D .byte $8D
|
||||
002039 1 E2 EF EF F4 aschi "boot contains the firmware for the"
|
||||
00203D 1 A0 E3 EF EE
|
||||
002041 1 F4 E1 E9 EE
|
||||
002045 1 F3 A0 F4 E8
|
||||
002049 1 E5 A0 E6 E9
|
||||
00204D 1 F2 ED F7 E1
|
||||
002051 1 F2 E5 A0 E6
|
||||
002055 1 EF F2 A0 F4
|
||||
002059 1 E8 E5
|
||||
00205B 1 8D .byte $8D
|
||||
00205C 1 D0 F2 EF C4 aschi "ProDOS ROM-Drive."
|
||||
002060 1 CF D3 A0 D2
|
||||
002064 1 CF CD AD C4
|
||||
002068 1 F2 E9 F6 E5
|
||||
00206C 1 AE
|
||||
00206D 1 8D .byte $8D
|
||||
00206E 1 8D .byte $8D
|
||||
00206F 1 A8 E3 A9 B1 aschi "(c)1998 - 2021 Terence J. Boldt"
|
||||
002073 1 B9 B9 B8 A0
|
||||
002077 1 AD A0 B2 B0
|
||||
00207B 1 B2 B1 A0 D4
|
||||
00207F 1 E5 F2 E5 EE
|
||||
002083 1 E3 E5 A0 CA
|
||||
002087 1 AE A0 C2 EF
|
||||
00208B 1 EC E4 F4
|
||||
00208E 1 8D .byte $8D
|
||||
00208F 1 8D .byte $8D
|
||||
002090 1 E7 E9 F4 E8 aschi "github.com/tjboldt/ProDOS-ROMDrive"
|
||||
002094 1 F5 E2 AE E3
|
||||
002098 1 EF ED AF F4
|
||||
00209C 1 EA E2 EF EC
|
||||
0020A0 1 E4 F4 AF D0
|
||||
0020A4 1 F2 EF C4 CF
|
||||
0020A8 1 D3 AD D2 CF
|
||||
0020AC 1 CD C4 F2 E9
|
||||
0020B0 1 F6 E5
|
||||
0020B2 1 8D .byte $8D
|
||||
0020B3 1 8D .byte $8D
|
||||
0020B4 1 C4 EF A0 CE aschi "Do NOT overwrite Block 0001"
|
||||
0020B8 1 CF D4 A0 EF
|
||||
0020BC 1 F6 E5 F2 F7
|
||||
0020C0 1 F2 E9 F4 E5
|
||||
0020C4 1 A0 C2 EC EF
|
||||
0020C8 1 E3 EB A0 B0
|
||||
0020CC 1 B0 B0 B1
|
||||
0020CF 1
|
||||
0020CF 1 end:
|
||||
0020CF 1 00 .byte 0
|
||||
0020D0 1
|
||||
0020D0 1 00 00 00 00 .repeat 255-<end
|
||||
0020D4 1 00 00 00 00
|
||||
0020D8 1 00 00 00 00
|
||||
0020DC 1 00 00 00 00
|
||||
0020E0 1 00 00 00 00
|
||||
0020E4 1 00 00 00 00
|
||||
0020E8 1 00 00 00 00
|
||||
0020EC 1 00 00 00 00
|
||||
0020F0 1 00 00 00 00
|
||||
0020F4 1 00 00 00 00
|
||||
0020F8 1 00 00 00 00
|
||||
0020FC 1 00 00 00 00
|
||||
0020D0 1 .byte 0
|
||||
0020D0 1 .endrepeat
|
||||
0020D0 1
|
@ -1,12 +1,13 @@
|
||||
#!/bin/sh
|
||||
ca65 Warning.asm -o warning.o
|
||||
ca65 Firmware.asm -o firmware.o --listing Firmware.lst
|
||||
ca65 Warning.asm -o warning.o --listing Warning.lst --list-bytes 255 || exit 1
|
||||
ca65 Firmware.asm -o firmware.o --listing Firmware.lst --list-bytes 255 || exit 1
|
||||
|
||||
ld65 -t none warning.o firmware.o -o Firmware.bin
|
||||
ld65 -t none warning.o firmware.o -o Firmware.bin || exit 1
|
||||
# assumes ProDOS-Utilities is in your path: https://github.com/tjboldt/ProDOS-Utilities
|
||||
rm BlankDriveWithFirmware.po
|
||||
ProDOS-Utilities -c create -d BlankDriveWithFirmware.po -v ROM -s 2048
|
||||
ProDOS-Utilities -b 0x0001 -c writeblock -d BlankDriveWithFirmware.po -i Firmware.bin
|
||||
ProDOS-Utilities -b 0x0001 -c readblock -d BlankDriveWithFirmware.po
|
||||
ProDOS-Utilities -c ls -d BlankDriveWithFirmware.po
|
||||
rm BlankDriveWithFirmware.po || exit 1
|
||||
ProDOS-Utilities -c create -d BlankDriveWithFirmware.po -v ROM -s 2048 || exit 1
|
||||
ProDOS-Utilities -b 0x0001 -c writeblock -d GamesWithFirmware.po -i Firmware.bin || exit 1
|
||||
ProDOS-Utilities -b 0x0001 -c writeblock -d BlankDriveWithFirmware.po -i Firmware.bin || exit 1
|
||||
ProDOS-Utilities -b 0x0001 -c readblock -d BlankDriveWithFirmware.po || exit 1
|
||||
ProDOS-Utilities -c ls -d BlankDriveWithFirmware.po || exit 1
|
||||
|
||||
|
13
README.md
13
README.md
@ -1,11 +1,13 @@
|
||||
# NOTE!
|
||||
This branch is untested and just here as a work in progress. Do NOT use. Use main branch instead.
|
||||
# v3
|
||||
This is a new revision of the hardware, incompatible with previous firmware and drive image. If you have a v2.5 board, see the v2.5 tag [here](https://github.com/tjboldt/ProDOS-ROM-Drive/tree/v2.5)
|
||||
|
||||
# ProDOS ROM-Drive
|
||||
This is a peripheral card for the Apple ][ series computers that acts as a read-only solid state disk drive (SSD) all in EPROM. Although it won't run DOS, it is fully ProDOS compatible and will appear as a read-only hard drive even when booting from another drive. It holds 1024 KB of disk data with the 256 byte firmware stored in block 0001 where the SOS boot loader normally resides. The drive boots ProDOS and into BASIC in under 1.5 seconds.
|
||||
|
||||
![Image of Board](/Hardware/ProDOS%20ROM-Drive%203.0%20Front.jpg)
|
||||
|
||||
You can order blank circuit boards from [PCBWay](https://www.pcbway.com/project/shareproject/ProDOS_ROM_Drive_v3_1903e388.html) or upload the provided gerber and drill files to any PCB manufacturer.
|
||||
|
||||
## History
|
||||
|
||||
My first Apple computer was an Apple //e that my brother bought in early 1984. Countless hours were spent playing games which developed my interest in building games. This also led to the creation of various utilities to help organize disks or just to see what could be done while programming.
|
||||
@ -22,14 +24,11 @@ To build actual circuit boards, I tried making some by hand with marker, etching
|
||||
|
||||
In 2019, I decided to revisit the original design as I was disappointed that the original didn't have a solder mask and was rather large for what it was. I got the board much smaller but in the process of translating my two decade old hand written notes, I made a mistake on one control line. To actually call this project finished, I had to make another revision. I also noticed the revised board was slightly larger than a credit card so I worked for a couple weeks to optimize the lines and squeeze the two-layer board down to 3.375" x 2.125". The board here is that final revision 2.5 (note that references to first, second and third design are all the solderless breadboard prototypes leading up to the 1.0 circuit board printed in 1999, 2.0 was never made, 2.1 is the board with the error patched with a jumper wire and 2.2 through 2.4 were never made).
|
||||
|
||||
In 2021, the first and only issue was opened on the project requesting that the firmware be relocatable. I let that issue sit for a few months and then Ralle Palaveev supplied some relocatable firmware as a patch. I quickly realized that this could be placed into the second block on the drive normally reserved for SOS bootloader for the Apple ///, essentially allowing the full EPROM to be used for the drive. I disassembed Ralle's patch, merged it into the existing source
|
||||
code and made a few updates to save a few bytes and add clarity.
|
||||
In 2021, the first and only issue was opened on the project requesting that the firmware be relocatable. I let that issue sit for a few months and then Ralle Palaveev supplied some relocatable firmware as a patch. I quickly realized that this could be placed into the second block on the drive normally reserved for SOS bootloader for the Apple ///, essentially allowing the full EPROM to be used for the drive. I disassembed Ralle's patch, merged it into the existing source code and made a few updates to save a few bytes and add clarity.
|
||||
|
||||
## Notes
|
||||
|
||||
The firmware code needs to be assembled 7 times with different parameters specifying which slot to assemble for. It is probably easier to work from the EPROM image as it is already a 1 MB disk image with the firmware in the top four ProDOS blocks.
|
||||
|
||||
I usually use Ciderpress to copy files onto the drive image and then burn the file to a 27C801 EPROM with a GQ-4x4 USB Programmer.
|
||||
I usually use Ciderpress to copy files onto the drive image and then burn the file to a 27C801 EPROM with a GQ-4x4 USB Programmer. Do NOT overwrite block 0001 as it contains the firmware for the card.
|
||||
|
||||
If you're planning on designing you own card, I highly recommend reading "Interfacing & Digital Experiments with your Apple" by Charles J. Engelisher and Apple's "Apple II Reference Manual" as well as "ProDOS Technical Reference Manual" if you want to build a drive. You also need an EPROM programmer, some chips and a prototyping board. My designs used simple logic gates to decode addresses but if you want to reduce chip count, you'll also need a PAL/GAL logic programmer (which some EPROM programmers can do).
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user