forked from Apple-2-HW/AppleIISd
7MHz clock used, read/write improved
reverted to Merlin-8
This commit is contained in:
parent
6e37a8c482
commit
f3751b90fb
BIN
AppleIISd.bin
BIN
AppleIISd.bin
Binary file not shown.
1457
AppleIISd.lst
1457
AppleIISd.lst
File diff suppressed because it is too large
Load Diff
154
AppleIISd.s
154
AppleIISd.s
@ -1,7 +1,7 @@
|
||||
********************************
|
||||
*
|
||||
* Apple][Sd Firmware
|
||||
* Version 0.5
|
||||
* Version 0.6
|
||||
*
|
||||
* (c) Florian Reitz, 2017
|
||||
*
|
||||
@ -44,14 +44,10 @@ INITED = $0678
|
||||
SSNONE = $0F
|
||||
SS0 = $0E
|
||||
DUMMY = $FF
|
||||
FRXEN = $17
|
||||
FRXDIS = $07
|
||||
|
||||
|
||||
********************************
|
||||
*
|
||||
* Install SD card driver
|
||||
*
|
||||
********************************
|
||||
|
||||
* signature bytes
|
||||
|
||||
LDX #$20
|
||||
@ -72,9 +68,10 @@ DUMMY = $FF
|
||||
JSR $FF58
|
||||
TSX
|
||||
LDA $0100,X
|
||||
STA CURSLOT ; $Cs
|
||||
AND #$0F
|
||||
STA SLOT ; $0s
|
||||
ORA #$C0
|
||||
STA CURSLOT ; $Cs
|
||||
ASL A
|
||||
ASL A
|
||||
ASL A
|
||||
@ -86,34 +83,41 @@ DUMMY = $FF
|
||||
BIT $CFFF
|
||||
JSR INIT
|
||||
|
||||
DO DEBUG
|
||||
*
|
||||
* TODO: check for init error
|
||||
*
|
||||
|
||||
********************************
|
||||
*
|
||||
* Install SD card driver
|
||||
*
|
||||
********************************
|
||||
|
||||
DO DEBUG
|
||||
|
||||
* see if slot has a driver already
|
||||
|
||||
LDX $BF31 ; get devcnt
|
||||
INSLP LDA $BF32,X ; get a devnum
|
||||
INSTALL LDA $BF32,X ; get a devnum
|
||||
AND #$70 ; isolate slot
|
||||
CMP SLOT16 ; slot?
|
||||
BEQ INSOUT ; yes, skip it
|
||||
BEQ :INSOUT ; yes, skip it
|
||||
DEX
|
||||
BPL INSLP ; keep up the search
|
||||
BPL INSTALL ; keep up the search
|
||||
|
||||
* restore the devnum to the list
|
||||
|
||||
LDX $BF31 ; get devcnt again
|
||||
CPX #$0D ; device table full?
|
||||
BNE INSLP2
|
||||
BNE :INST2
|
||||
|
||||
JSR $FF3A ; bell
|
||||
JMP INSOUT ; do something!
|
||||
JMP :INSOUT ; do something!
|
||||
|
||||
INSLP2 LDA $BF32-1,X ; move all entries down
|
||||
:INST2 LDA $BF32-1,X ; move all entries down
|
||||
STA $BF32,X ; to make room at front
|
||||
DEX ; for a new entry
|
||||
BNE INSLP2
|
||||
BNE :INST2
|
||||
LDA #$04 ; ProFile type device
|
||||
ORA SLOT16
|
||||
STA $BF32 ; slot, drive 1 at top of list
|
||||
@ -128,9 +132,16 @@ INSLP2 LDA $BF32-1,X ; move all entries down
|
||||
STA $BF10,X ; write to driver table
|
||||
LDA #>DRIVER
|
||||
STA $BF11,X
|
||||
:INSOUT RTS
|
||||
|
||||
INSOUT RTS
|
||||
FIN
|
||||
|
||||
********************************
|
||||
*
|
||||
* Boot from SD card
|
||||
*
|
||||
********************************
|
||||
|
||||
ELSE
|
||||
|
||||
BOOT LDA #$01
|
||||
STA $42 ; load command
|
||||
@ -146,6 +157,8 @@ BOOT LDA #$01
|
||||
JSR READ ; call driver
|
||||
JMP $801 ; goto bootloader
|
||||
|
||||
FIN
|
||||
|
||||
|
||||
********************************
|
||||
*
|
||||
@ -165,9 +178,10 @@ DRIVER CLD
|
||||
JSR $FF58 ; find slot nr
|
||||
TSX
|
||||
LDA $0100,X
|
||||
STA CURSLOT ; $Cs
|
||||
AND #$0F
|
||||
STA SLOT ; $0s
|
||||
ORA #$C0
|
||||
STA CURSLOT ; $Cs
|
||||
ASL A
|
||||
ASL A
|
||||
ASL A
|
||||
@ -201,10 +215,11 @@ DRIVER CLD
|
||||
:INIT JSR INIT
|
||||
BRA :CMD
|
||||
|
||||
|
||||
* Signature bytes
|
||||
|
||||
DS \ ; fill with zeroes
|
||||
ORG *-4 ; locate to $C8FC
|
||||
DS -4 ; locate to $xxFC
|
||||
DW $FFFF ; 65535 blocks
|
||||
DB $47 ; Status bits
|
||||
DB #<DRIVER ; LSB of driver
|
||||
@ -320,10 +335,10 @@ INIT CLD
|
||||
CMP #$00
|
||||
BNE :IOERROR ; error!
|
||||
|
||||
:END LDY SLOT ; all ok
|
||||
:END LDY SLOT
|
||||
LDA #$01
|
||||
STA INITED,Y ; initialized
|
||||
CLC
|
||||
CLC ; all ok
|
||||
LDY #0
|
||||
BCC :END1
|
||||
:CDERROR SEC
|
||||
@ -333,6 +348,8 @@ INIT CLD
|
||||
LDY #$27 ; init error
|
||||
:END1 LDA #SSNONE ; deselect card
|
||||
STA SS,X
|
||||
LDA #7 ; enable 7MHz
|
||||
STA CTRL,X
|
||||
LDA #0 ; set div to 2
|
||||
STA DIV,X
|
||||
TYA ; retval in A
|
||||
@ -457,28 +474,16 @@ BLOCK PHX ; save X
|
||||
COMMAND PHY ; save Y
|
||||
LDY SLOT
|
||||
STA DATA,X ; send command
|
||||
:WAIT BIT CTRL,X
|
||||
BPL :WAIT
|
||||
:ARG LDA R30,Y ; get arg from R30 on
|
||||
LDA R30,Y ; get arg from R30 on
|
||||
STA DATA,X
|
||||
:WAIT1 BIT CTRL,X
|
||||
BPL :WAIT1
|
||||
LDA R31,Y
|
||||
STA DATA,X
|
||||
:WAIT11 BIT CTRL,X
|
||||
BPL :WAIT11
|
||||
LDA R32,Y
|
||||
STA DATA,X
|
||||
:WAIT12 BIT CTRL,X
|
||||
BPL :WAIT12
|
||||
LDA R33,Y
|
||||
STA DATA,X
|
||||
:WAIT13 BIT CTRL,X
|
||||
BPL :WAIT13
|
||||
LDA #DUMMY
|
||||
STA DATA,X ; dummy crc
|
||||
:WAIT2 BIT CTRL,X
|
||||
BPL :WAIT2
|
||||
JSR GETR1
|
||||
PLY ; restore Y
|
||||
RTS
|
||||
@ -535,24 +540,22 @@ READ JSR BLOCK ; calc block address
|
||||
LDA #$51 ; send CMD17
|
||||
JSR COMMAND ; send command
|
||||
|
||||
CMP #0 ; check for error
|
||||
BNE :ERROR
|
||||
|
||||
:GETTOK LDA #DUMMY ; get data token
|
||||
STA DATA,X
|
||||
:WAIT BIT CTRL,X
|
||||
BPL :WAIT
|
||||
LDA DATA,X ; get response
|
||||
*
|
||||
* TODO: check for error!
|
||||
*
|
||||
CMP #$FE
|
||||
BNE :GETTOK ; wait for $FE
|
||||
|
||||
LDY #2 ; read data from card
|
||||
:LOOPY STZ WORK
|
||||
:LOOPW LDA #DUMMY
|
||||
LDA #FRXEN ; enable FRX
|
||||
STA CTRL,X
|
||||
LDA #DUMMY
|
||||
STA DATA,X
|
||||
:WAIT1 BIT CTRL,X
|
||||
BPL :WAIT1
|
||||
LDA DATA,X
|
||||
:LOOPY STZ WORK
|
||||
:LOOPW LDA DATA,X
|
||||
STA ($44)
|
||||
INC $44
|
||||
BNE :INW
|
||||
@ -562,13 +565,11 @@ READ JSR BLOCK ; calc block address
|
||||
DEY
|
||||
BNE :LOOPY
|
||||
|
||||
LDY #2
|
||||
:CRC LDA #DUMMY ; read 2 bytes crc
|
||||
STA DATA,X ; and ignore
|
||||
:WAIT2 BIT CTRL,X
|
||||
BPL :WAIT2
|
||||
DEY
|
||||
BNE :CRC
|
||||
LDA #FRXDIS ; disable FRX
|
||||
STA CTRL,X
|
||||
|
||||
:CRC LDA #DUMMY ; first crc byte has
|
||||
STA DATA,X ; already been read
|
||||
|
||||
LDA #SSNONE
|
||||
STA SS,X ; disable /CS
|
||||
@ -576,6 +577,12 @@ READ JSR BLOCK ; calc block address
|
||||
LDA #$00
|
||||
RTS
|
||||
|
||||
:ERROR LDA #SSNONE
|
||||
STA SS,X ; disable /CS
|
||||
SEC ; an error occured
|
||||
LDA #$27
|
||||
RTS
|
||||
|
||||
|
||||
********************************
|
||||
*
|
||||
@ -602,21 +609,18 @@ WRITE JSR BLOCK ; calc block address
|
||||
LDA #$58 ; send CMD24
|
||||
JSR COMMAND ; send command
|
||||
|
||||
CMP #0 ; check for error
|
||||
BNE :ERROR
|
||||
|
||||
LDA #DUMMY
|
||||
STA DATA,X ; send dummy
|
||||
:WAIT1 BIT CTRL,X
|
||||
BPL :WAIT1
|
||||
LDA #$FE
|
||||
STA DATA,X ; send data token
|
||||
:WAIT2 BIT CTRL,X
|
||||
BPL :WAIT2
|
||||
|
||||
LDY #2 ; send data to card
|
||||
:LOOPY STZ WORK
|
||||
:LOOPW LDA ($44)
|
||||
STA DATA,X
|
||||
:WAIT3 BIT CTRL,X
|
||||
BPL :WAIT3
|
||||
INC $44
|
||||
BNE :INW
|
||||
INC $45 ; inc msb on page boundary
|
||||
@ -625,27 +629,18 @@ WRITE JSR BLOCK ; calc block address
|
||||
DEY
|
||||
BNE :LOOPY
|
||||
|
||||
LDY #2 ; send 2 dummy crc bytes
|
||||
:CRC STA DATA,X
|
||||
:WAIT4 BIT CTRL,X
|
||||
BPL :WAIT4
|
||||
DEY
|
||||
BNE :CRC
|
||||
|
||||
LDA #DUMMY ; get data response
|
||||
:CRC STA DATA,X ; send 2 dummy crc bytes
|
||||
STA DATA,X
|
||||
:WAIT5 BIT CTRL,X
|
||||
BPL :WAIT5
|
||||
|
||||
STA DATA,X ; get data response
|
||||
LDA DATA,X
|
||||
AND #$1F
|
||||
CMP #$05
|
||||
BNE :ERROR ; check for write error
|
||||
|
||||
:WAIT6 LDA #DUMMY ; wait for write cycle
|
||||
STA DATA,X ; to complete
|
||||
:WAIT61 BIT CTRL,X
|
||||
BPL :WAIT61
|
||||
LDA DATA,X
|
||||
:WAIT6 LDA #DUMMY
|
||||
STA DATA,X ; wait for write cycle
|
||||
LDA DATA,X ; to complete
|
||||
CMP #$00
|
||||
BEQ :WAIT6
|
||||
|
||||
@ -655,14 +650,12 @@ WRITE JSR BLOCK ; calc block address
|
||||
LDA #0
|
||||
RTS
|
||||
|
||||
:ERROR
|
||||
:WAIT7 LDA #DUMMY ; wait for write cycle
|
||||
STA DATA,X ; to complete
|
||||
:WAIT71 BIT CTRL,X
|
||||
BPL :WAIT71
|
||||
LDA DATA,X
|
||||
:ERROR LDA #DUMMY
|
||||
STA DATA,X ; wait for write cycle
|
||||
LDA DATA,X ; to complete
|
||||
CMP #$00
|
||||
BEQ :WAIT7
|
||||
BEQ :ERROR
|
||||
|
||||
LDA #SSNONE
|
||||
STA SS,X ; disable /CS
|
||||
SEC ; an error occured
|
||||
@ -696,3 +689,4 @@ ACMD4140 HEX 694000
|
||||
HEX 000077
|
||||
ACMD410 HEX 690000
|
||||
HEX 0000FF
|
||||
|
||||
|
101
AppleIISd.s19
101
AppleIISd.s19
@ -1,63 +1,60 @@
|
||||
S00600004844521B
|
||||
S1130000A220A000A203863C2058FFBABD00018DA7
|
||||
S1130010F807290F853D0A0A0A0A852BAA2CFFCF67
|
||||
S11300202000C9A9018542A52BAA85436444A908D7
|
||||
S11300308545644664472CFFCF20B7CA4C0108D8D5
|
||||
S11300402058FFBABD00018DF807290F853D0A0A23
|
||||
S11300500A0A852BAA2CFFCFA43DB97806C90190C2
|
||||
S113006022A542C900F010C901F00FC902F00EC95F
|
||||
S113007003F00D38A901604CAFCA4CB7CA4C0DCB84
|
||||
S11300804C9DCB2000C980D9000000000000000076
|
||||
S1130000A220A000A203863C2058FFBABD0001290B
|
||||
S11300100F853D09C08DF8070A0A0A0A852BAA2C08
|
||||
S1130020FFCF2000C9A9018542A52BAA85436444BA
|
||||
S1130030A9088545644664472CFFCF209ECA4C011D
|
||||
S113004008D82058FFBABD0001290F853D09C08D8D
|
||||
S1130050F8070A0A0A0A852BAA2CFFCFA43DB9780F
|
||||
S113006006C9019022A542C900F010C901F00FC9C8
|
||||
S113007002F00EC903F00D38A901604C96CA4C9EDB
|
||||
S1130080CA4CF7CA4C64CB2000C980D900000000D8
|
||||
S1130090000000000000000000000000000000005C
|
||||
S11300A0000000000000000000000000000000004C
|
||||
S11300B0000000000000000000000000000000003C
|
||||
S11300C0000000000000000000000000000000002C
|
||||
S11300D0000000000000000000000000000000001C
|
||||
S11300E0000000000000000000000000000000000C
|
||||
S11300F0000000000000000000000000FFFF473F78
|
||||
S11300F0000000000000000000000000FFFF474176
|
||||
S1130100D8A9039D81C0A90F9D83C0A9079D82C062
|
||||
S1130110A00AA9FF9D80C03C81C010FB88D0F5A92E
|
||||
S11301200E9D83C0A9A18540A9CB854120DEC920AD
|
||||
S1130130F2C9C901D039A9AD8540A9CB854120DEDA
|
||||
S1130140C9200DCAC901D02AA9B98540A9CB8541C6
|
||||
S113015020DEC920F2C9A9BF8540A9CB854120DE94
|
||||
S1130160C920F2C9C901F0E0C900D0034CACC94CA4
|
||||
S1130170CFC9A9B98540A9CB854120DEC9A9C585C8
|
||||
S113018040A9CB854120DEC920F2C9C901F0E3C9E9
|
||||
S113019000D0034CACC9A9A78540A9CB854120DE7A
|
||||
S11301A0C920F2C9C901F0F6C900D023A9B385401A
|
||||
S11301B0A9CB854120DEC920F2C9C900D011A43DD4
|
||||
S11301200E9D83C0A9688540A9CB854120E3C920E1
|
||||
S1130130F7C9C901D039A9748540A9CB854120E309
|
||||
S1130140C92012CAC901D02AA9808540A9CB8541FA
|
||||
S113015020E3C920F7C9A9868540A9CB854120E3BE
|
||||
S1130160C920F7C9C901F0E0C900D0034CACC94C9F
|
||||
S1130170CFC9A9808540A9CB854120E3C9A98C8535
|
||||
S113018040A9CB854120E3C920F7C9C901F0E3C9DF
|
||||
S113019000D0034CACC9A96E8540A9CB854120E3AE
|
||||
S11301A0C920F7C9C901F0F6C900D023A97A85404E
|
||||
S11301B0A9CB854120E3C920F7C9C900D011A43DCA
|
||||
S11301C0A90199780618A000900838A028B003382F
|
||||
S11301D0A027A90F9D83C0A9009D82C098605AA042
|
||||
S11301E000B1409D80C03C81C010FBC8C00690F1A6
|
||||
S11301F07A60A9FF9D80C03C81C010FBBD80C08592
|
||||
S11302003C2980D0EDA9FF9D80C0A53C6020F2C9A7
|
||||
S1130210485AA004A9FF9D80C03C81C010FBBD804A
|
||||
S1130220C04888D0EFA43D6899F8056899780568B6
|
||||
S113023099F804689978047AA9FF9D80C06860DA07
|
||||
S11302405AA63DA5469DF805A5479D7805A9009D9C
|
||||
S1130250F8049D7804A0091EF8053E78053EF804CC
|
||||
S11302603E780488D0F17AFA605AA43D9D80C03C5F
|
||||
S113027081C010FBB978049D80C03C81C010FBB9DB
|
||||
S1130280F8049D80C03C81C010FBB978059D80C0F6
|
||||
S11302903C81C010FBB9F8059D80C03C81C010FBB7
|
||||
S11302A0A9FF9D80C03C81C010FB20F2C97A601870
|
||||
S11302B0A900A2FFA0FF60203FCAA90E9D83C0A988
|
||||
S11302C0512069CAA9FF9D80C03C81C010FBBD803C
|
||||
S11302D0C0C9FED0EFA002643CA9FF9D80C03C8150
|
||||
S11302E0C010FBBD80C09244E644D002E645E63C23
|
||||
S11302F0D0E788D0E2A002A9FF9D80C03C81C01055
|
||||
S1130300FB88D0F3A90F9D83C018A90060203FCAC1
|
||||
S1130310A90E9D83C0A9582069CAA9FF9D80C03C2D
|
||||
S113032081C010FBA9FE9D80C03C81C010FBA002CF
|
||||
S1130330643CB2449D80C03C81C010FBE644D002C2
|
||||
S1130340E645E63CD0EC88D0E7A0029D80C03C8125
|
||||
S1130350C010FB88D0F5A9FF9D80C03C81C010FB74
|
||||
S1130360BD80C0291FC905D01AA9FF9D80C03C814A
|
||||
S1130370C010FBBD80C0C900F0EFA90F9D83C01859
|
||||
S1130380A90060A9FF9D80C03C81C010FBBD80C056
|
||||
S1130390C900F0EFA90F9D83C038A9276038A901CF
|
||||
S11303A0604000000000954100000000F948000092
|
||||
S11303B001AA875000000200FF7700000000656971
|
||||
S10E03C040000000776900000000FF0F
|
||||
S11301D0A027A90F9D83C0A9079D81C0A9009D8266
|
||||
S11301E0C098605AA000B1409D80C03C81C010FB03
|
||||
S11301F0C8C00690F17A60A9FF9D80C03C81C01000
|
||||
S1130200FBBD80C0853C2980D0EDA9FF9D80C0A5A1
|
||||
S11302103C6020F7C9485AA004A9FF9D80C03C81D6
|
||||
S1130220C010FBBD80C04888D0EFA43D6899F80594
|
||||
S1130230689978056899F804689978047AA9FF9D03
|
||||
S113024080C06860DA5AA63DA5469DF805A5479D7D
|
||||
S11302507805A9009DF8049D7804A0091EF8053EC0
|
||||
S113026078053EF8043E780488D0F17AFA605AA4FE
|
||||
S11302703D9D80C0B978049D80C0B9F8049D80C0BC
|
||||
S1130280B978059D80C0B9F8059D80C0A9FF9D80FF
|
||||
S1130290C020F7C97A6018A900A2FFA0FF6020441B
|
||||
S11302A0CAA90E9D83C0A951206ECAC900D03FA916
|
||||
S11302B0FF9D80C0BD80C0C9FED0F4A002A9179DD7
|
||||
S11302C081C0A9FF9D80C0643CBD80C09244E644C7
|
||||
S11302D0D002E645E63CD0F188D0ECA9079D81C068
|
||||
S11302E0A9FF9D80C0A90F9D83C018A90060A90F14
|
||||
S11302F09D83C038A927602044CAA90E9D83C0A944
|
||||
S113030058206ECAC900D047A9FF9D80C0A9FE9D90
|
||||
S113031080C0A002643CB2449D80C0E644D002E6A2
|
||||
S113032045E63CD0F188D0EC9D80C09D80C09D8086
|
||||
S1130330C0BD80C0291FC905D015A9FF9D80C0BDBF
|
||||
S113034080C0C900F0F4A90F9D83C018A90060A95A
|
||||
S1130350FF9D80C0BD80C0C900F0F4A90F9D83C07B
|
||||
S113036038A9276038A901604000000000954100C9
|
||||
S1130370000000F948000001AA875000000200FFB5
|
||||
S11303807700000000656940000000776900000004
|
||||
S105039000FF68
|
||||
S9030000FC
|
||||
|
@ -5,7 +5,7 @@ The **Apple][Sd** is a SD card based replaced for the ProFile harddrive. In cont
|
||||
|
||||
A Xilinx CPLD is used as a SPI controller and translates, together with the ROM driver, SD card data to/from the Apple IIe. The VHDL source is based on [SPI65/B](http://www.6502.org/users/andre/spi65b) by André Fachat.
|
||||
|
||||
The assembler sources were originally written in Merlin-8, but have been updated to Merlin-32. The [schematics](AppleIISd.pdf) are available as PDF.
|
||||
The assembler sources were written in Merlin-8. The [schematics](AppleIISd.pdf) are available as PDF.
|
||||
|
||||
## Features
|
||||
* up to 128MB storage space (4x 65535 blocks), currently 32MB
|
||||
|
5
make.bat
5
make.bat
@ -1,5 +0,0 @@
|
||||
|
||||
merlin32 -V "C:\Program Files (x86)\Merlin32\Library" AppleIISd.s
|
||||
move AppleIISd AppleIISd.bin
|
||||
move AppleIISd_Output.txt AppleIISd.lst
|
||||
del /AH _FileInformation.txt
|
Loading…
x
Reference in New Issue
Block a user