From ccab3e801f8936f469e636e3e1d52c04d7fd9bfc Mon Sep 17 00:00:00 2001 From: Terence Boldt Date: Wed, 6 Oct 2021 19:30:20 -0400 Subject: [PATCH] Update firmware to send ddrive unit --- Apple2/AT28C64B.bin | Bin 8192 -> 8192 bytes Apple2/CommandFirmware.asm | 7 +- Apple2/CommandFirmware.lst | 14 +- Apple2/DriveFirmware.asm | 11 +- Apple2/DriveFirmware.lst | 186 +++++++++--------- Apple2/FileAccessFirmware.asm | 7 +- Apple2/FileAccessFirmware.lst | 14 +- Apple2/MenuFirmware.asm | 7 +- Apple2/MenuFirmware.lst | 54 +++-- RaspberryPi/Apple2-IO-RPi.hdv | Bin 33553920 -> 33553920 bytes .../apple2driver/handlers/readBlock.go | 14 +- .../apple2driver/handlers/writeBlock.go | 12 +- 12 files changed, 155 insertions(+), 171 deletions(-) diff --git a/Apple2/AT28C64B.bin b/Apple2/AT28C64B.bin index b2e9f5f0993ac1b1473c1196520c07f6ef92e9e6..395270e10f9d2307c2b9444951edd871956be875 100644 GIT binary patch delta 1157 zcmZY3J5C!>6vlCn8Eiscyh02Ha?3<40wW-7APewPsFTLlRO!;Ba2ZkD6p=FbP3aX( znH@xmB4lyCnRA&drttlwqrdf=o5{^&c9wmbPsY=-6jk|k_WQ2Pmwy+TD9i63@m$mM znSS4T;!FAGiXMNp=#8dS&oA$m|E7yRvZt*?E4lq~Da!fn#e8+nmJ*dpErtIpSc)tK zOTkjnQmxf(C0fZXtl~DiC{|h2w5W8dX=oanCQU=r&~(&vt94t6R&v{DebV|-Gomu7 zW}q2phBO1sKr>M@t=4TNTFGsrt&z4CH7hEcY8IM>W=XTqEHoQ6+iKlbqLth>T25LX zH76>UY7Ux%=16nU95fd-*J|BXqLth>+B#|LQS+kmspg@1Xr43=%|r81^R3oxC0faC zqYX$KL@kIaq*{O$pas$bv;ZwcEwoy{s!AG^4M`i=U%OaX&i635*RNmav%Gt`x?HW_PCjf_%a2@;R(x6ix)J5=pY4Qj@% z-oxWtK|YD!=kRdn+hTD6%gx!%?ca;-^#2{h9ZS0(XM}IAPiIBZ3NAL`G*ObYa!5&} zBvKM7iImKg?5XjN;f|#pQuKNfEy*PflZ+|Ssv)KjQ-~?V6k;l4s>jAVhC7ya9X5@a z;);f8#x!a55Yvch#57_WF`Y5pW8)pe9ZS0o+liRwnueW>8Pb{|W)L%o8N>`?CS#_@ z#yf^PmUbOhM$B+SLzyv4T06unViqxrm_^KH%=XxL$8g8euETaCX1S$dH)D>pZiqR= z9AXYJhnUNl>#^~U;f|$Uhs`49xT9f~F;7}Q#5`giF^`x>%xBE^*m%cq$I`CD<`MJU z(=ZR^SJ4O>_8`ax{-1Xss0RK!cOmEoe%E^tOatHiJ_Osq_jmxoHSn$vA@~OFJPPG! zQNx|b5M&K^oGetByte -.byte SendByte - .byte 0,0 ;0000 blocks = check status .byte 7 ;bit set(0=status 1=read 2=write) unset(3=format, 4/5=number of volumes, 6=interruptable, 7=removable) .byte DriverEntry&$00FF ;low byte of entry diff --git a/Apple2/CommandFirmware.lst b/Apple2/CommandFirmware.lst index c01c287..acc44a8 100644 --- a/Apple2/CommandFirmware.lst +++ b/Apple2/CommandFirmware.lst @@ -150,7 +150,7 @@ Current file: CommandFirmware.asm 00C7B6 1 end: 00C7B6 1 60 rts 00C7B7 1 -00C7B7 1 00 00 00 00 .repeat 247-GetByte -00C7FA 1 7D .byte SendByte +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 07 .byte 7 ;bit set(0=status 1=read 2=write) unset(3=format, 4/5=number of volumes, 6=interruptable, 7=removable) diff --git a/Apple2/DriveFirmware.asm b/Apple2/DriveFirmware.asm index 9c0b884..9e1bbe7 100644 --- a/Apple2/DriveFirmware.asm +++ b/Apple2/DriveFirmware.asm @@ -107,6 +107,8 @@ readBlock: jsr SendByte lda BlockHi jsr SendByte + txa + jsr SendByte ldy #$0 jsr read256 inc BufferHi @@ -131,6 +133,8 @@ WriteBlock: jsr SendByte lda BlockHi jsr SendByte + txa + jsr SendByte ldy #$0 jsr write256 inc BufferHi @@ -186,15 +190,10 @@ finishRead: end: rts -.repeat 247-GetByte -.byte SendByte - .byte 0,0 ;0000 blocks = check status .byte 7 ;bit set(0=status 1=read 2=write) unset(3=format, 4/5=number of volumes, 6=interruptable, 7=removable) .byte DriverEntry&$00FF ;low byte of entry diff --git a/Apple2/DriveFirmware.lst b/Apple2/DriveFirmware.lst index 7bbb87d..580ed1a 100644 --- a/Apple2/DriveFirmware.lst +++ b/Apple2/DriveFirmware.lst @@ -75,7 +75,7 @@ Current file: DriveFirmware.asm 00C738 1 C9 01 cmp #ReadBlockCommand 00C73A 1 F0 10 beq ReadBlockAndSetTime 00C73C 1 C9 02 cmp #WriteBlockCommand -00C73E 1 F0 50 beq WriteBlock +00C73E 1 F0 54 beq WriteBlock 00C740 1 38 sec ;set carry as we don't support any other commands 00C741 1 A9 53 lda #$53 ;Invalid parameter error 00C743 1 60 rts @@ -97,108 +97,106 @@ Current file: DriveFirmware.asm 00C754 1 D0 12 bne readBlock 00C756 1 A0 00 ldy #$00 ;Get the current time on each block read for now 00C758 1 A9 03 lda #GetTimeCommand -00C75A 1 20 B8 C7 jsr SendByte +00C75A 1 20 C0 C7 jsr SendByte 00C75D 1 getTimeByte: -00C75D 1 20 D6 C7 jsr GetByte +00C75D 1 20 DE C7 jsr GetByte 00C760 1 99 90 BF sta $bf90,y 00C763 1 C8 iny 00C764 1 C0 04 cpy #$04 00C766 1 D0 F5 bne getTimeByte 00C768 1 readBlock: 00C768 1 A9 01 lda #ReadBlockCommand ;read the block after setting the clock -00C76A 1 20 B8 C7 jsr SendByte +00C76A 1 20 C0 C7 jsr SendByte 00C76D 1 A5 46 lda BlockLo -00C76F 1 20 B8 C7 jsr SendByte +00C76F 1 20 C0 C7 jsr SendByte 00C772 1 A5 47 lda BlockHi -00C774 1 20 B8 C7 jsr SendByte -00C777 1 A0 00 ldy #$0 -00C779 1 20 87 C7 jsr read256 -00C77C 1 E6 45 inc BufferHi -00C77E 1 20 87 C7 jsr read256 -00C781 1 C6 45 dec BufferHi -00C783 1 A9 00 lda #$0 ;zero accumulator and clear carry for success -00C785 1 18 clc -00C786 1 60 rts -00C787 1 -00C787 1 read256: -00C787 1 20 D6 C7 jsr GetByte -00C78A 1 91 44 sta (BufferLo),y -00C78C 1 C8 iny -00C78D 1 D0 F8 bne read256 -00C78F 1 60 rts -00C790 1 -00C790 1 ; ProDOS Write Block Command -00C790 1 WriteBlock: -00C790 1 A9 02 lda #WriteBlockCommand -00C792 1 20 B8 C7 jsr SendByte -00C795 1 A5 46 lda BlockLo -00C797 1 20 B8 C7 jsr SendByte -00C79A 1 A5 47 lda BlockHi -00C79C 1 20 B8 C7 jsr SendByte -00C79F 1 A0 00 ldy #$0 -00C7A1 1 20 AF C7 jsr write256 -00C7A4 1 E6 45 inc BufferHi -00C7A6 1 20 AF C7 jsr write256 -00C7A9 1 C6 45 dec BufferHi -00C7AB 1 A9 00 lda #$0 ;zero accumulator and clear carry for success -00C7AD 1 18 clc -00C7AE 1 60 rts -00C7AF 1 -00C7AF 1 write256: -00C7AF 1 B1 44 lda (BufferLo),y -00C7B1 1 20 B8 C7 jsr SendByte -00C7B4 1 C8 iny -00C7B5 1 D0 F8 bne write256 -00C7B7 1 60 rts -00C7B8 1 -00C7B8 1 SendByte: -00C7B8 1 48 pha -00C7B9 1 waitWrite: -00C7B9 1 AD FB C0 lda InputFlags -00C7BC 1 2A rol -00C7BD 1 2A rol -00C7BE 1 B0 F9 bcs waitWrite -00C7C0 1 68 pla -00C7C1 1 8D FD C0 sta OutputByte -00C7C4 1 A9 0E lda #$0e ; set bit 0 low to indicate write started -00C7C6 1 8D F7 C0 sta OutputFlags -00C7C9 1 finishWrite: -00C7C9 1 AD FB C0 lda InputFlags -00C7CC 1 2A rol -00C7CD 1 2A rol -00C7CE 1 90 F9 bcc finishWrite -00C7D0 1 A9 0F lda #$0f -00C7D2 1 8D F7 C0 sta OutputFlags -00C7D5 1 60 rts -00C7D6 1 -00C7D6 1 GetByte: -00C7D6 1 A9 0D lda #$0d ;set read flag low -00C7D8 1 8D F7 C0 sta OutputFlags -00C7DB 1 waitRead: -00C7DB 1 AD FB C0 lda InputFlags -00C7DE 1 2A rol -00C7DF 1 B0 FA bcs waitRead -00C7E1 1 AD FE C0 lda InputByte -00C7E4 1 48 pha -00C7E5 1 A9 0F lda #$0f ;set all flags high -00C7E7 1 8D F7 C0 sta OutputFlags -00C7EA 1 finishRead: -00C7EA 1 AD FB C0 lda InputFlags -00C7ED 1 2A rol -00C7EE 1 90 FA bcc finishRead -00C7F0 1 68 pla -00C7F1 1 end: -00C7F1 1 60 rts -00C7F2 1 -00C7F2 1 00 00 00 00 .repeat 247-GetByte -00C7FA 1 B8 .byte SendByte +00C774 1 20 C0 C7 jsr SendByte +00C777 1 8A txa +00C778 1 20 C0 C7 jsr SendByte +00C77B 1 A0 00 ldy #$0 +00C77D 1 20 8B C7 jsr read256 +00C780 1 E6 45 inc BufferHi +00C782 1 20 8B C7 jsr read256 +00C785 1 C6 45 dec BufferHi +00C787 1 A9 00 lda #$0 ;zero accumulator and clear carry for success +00C789 1 18 clc +00C78A 1 60 rts +00C78B 1 +00C78B 1 read256: +00C78B 1 20 DE C7 jsr GetByte +00C78E 1 91 44 sta (BufferLo),y +00C790 1 C8 iny +00C791 1 D0 F8 bne read256 +00C793 1 60 rts +00C794 1 +00C794 1 ; ProDOS Write Block Command +00C794 1 WriteBlock: +00C794 1 A9 02 lda #WriteBlockCommand +00C796 1 20 C0 C7 jsr SendByte +00C799 1 A5 46 lda BlockLo +00C79B 1 20 C0 C7 jsr SendByte +00C79E 1 A5 47 lda BlockHi +00C7A0 1 20 C0 C7 jsr SendByte +00C7A3 1 8A txa +00C7A4 1 20 C0 C7 jsr SendByte +00C7A7 1 A0 00 ldy #$0 +00C7A9 1 20 B7 C7 jsr write256 +00C7AC 1 E6 45 inc BufferHi +00C7AE 1 20 B7 C7 jsr write256 +00C7B1 1 C6 45 dec BufferHi +00C7B3 1 A9 00 lda #$0 ;zero accumulator and clear carry for success +00C7B5 1 18 clc +00C7B6 1 60 rts +00C7B7 1 +00C7B7 1 write256: +00C7B7 1 B1 44 lda (BufferLo),y +00C7B9 1 20 C0 C7 jsr SendByte +00C7BC 1 C8 iny +00C7BD 1 D0 F8 bne write256 +00C7BF 1 60 rts +00C7C0 1 +00C7C0 1 SendByte: +00C7C0 1 48 pha +00C7C1 1 waitWrite: +00C7C1 1 AD FB C0 lda InputFlags +00C7C4 1 2A rol +00C7C5 1 2A rol +00C7C6 1 B0 F9 bcs waitWrite +00C7C8 1 68 pla +00C7C9 1 8D FD C0 sta OutputByte +00C7CC 1 A9 0E lda #$0e ; set bit 0 low to indicate write started +00C7CE 1 8D F7 C0 sta OutputFlags +00C7D1 1 finishWrite: +00C7D1 1 AD FB C0 lda InputFlags +00C7D4 1 2A rol +00C7D5 1 2A rol +00C7D6 1 90 F9 bcc finishWrite +00C7D8 1 A9 0F lda #$0f +00C7DA 1 8D F7 C0 sta OutputFlags +00C7DD 1 60 rts +00C7DE 1 +00C7DE 1 GetByte: +00C7DE 1 A9 0D lda #$0d ;set read flag low +00C7E0 1 8D F7 C0 sta OutputFlags +00C7E3 1 waitRead: +00C7E3 1 AD FB C0 lda InputFlags +00C7E6 1 2A rol +00C7E7 1 B0 FA bcs waitRead +00C7E9 1 AD FE C0 lda InputByte +00C7EC 1 48 pha +00C7ED 1 A9 0F lda #$0f ;set all flags high +00C7EF 1 8D F7 C0 sta OutputFlags +00C7F2 1 finishRead: +00C7F2 1 AD FB C0 lda InputFlags +00C7F5 1 2A rol +00C7F6 1 90 FA bcc finishRead +00C7F8 1 68 pla +00C7F9 1 end: +00C7F9 1 60 rts +00C7FA 1 +00C7FA 1 00 00 .repeat 251-GetByte -.byte SendByte - .byte 0,0 ;0000 blocks = check status .byte 7 ;bit set(0=status 1=read 2=write) unset(3=format, 4/5=number of volumes, 6=interruptable, 7=removable) .byte DriverEntry&$00FF ;low byte of entry diff --git a/Apple2/FileAccessFirmware.lst b/Apple2/FileAccessFirmware.lst index 894bacd..454a42b 100644 --- a/Apple2/FileAccessFirmware.lst +++ b/Apple2/FileAccessFirmware.lst @@ -148,7 +148,7 @@ Current file: FileAccessFirmware.asm 00C7AD 1 end: 00C7AD 1 60 rts 00C7AE 1 -00C7AE 1 00 00 00 00 .repeat 247-GetByte -00C7FA 1 74 .byte SendByte +00C7F6 1 00 00 00 00 +00C7FA 1 00 00 +00C7FC 1 .byte 0 +00C7FC 1 .endrepeat 00C7FC 1 00C7FC 1 00 00 .byte 0,0 ;0000 blocks = check status 00C7FE 1 07 .byte 7 ;bit set(0=status 1=read 2=write) unset(3=format, 4/5=number of volumes, 6=interruptable, 7=removable) diff --git a/Apple2/MenuFirmware.asm b/Apple2/MenuFirmware.asm index e47afea..c9fd19b 100644 --- a/Apple2/MenuFirmware.asm +++ b/Apple2/MenuFirmware.asm @@ -141,7 +141,7 @@ finishRead: end: rts -.repeat 183-GetByte -.byte SendByte - .byte 0,0 ;0000 blocks = check status .byte 7 ;bit set(0=status 1=read 2=write) unset(3=format, 4/5=number of volumes, 6=interruptable, 7=removable) .byte DriverEntry&$00FF ;low byte of entry diff --git a/Apple2/MenuFirmware.lst b/Apple2/MenuFirmware.lst index 37c0868..a14f558 100644 --- a/Apple2/MenuFirmware.lst +++ b/Apple2/MenuFirmware.lst @@ -64,7 +64,7 @@ Current file: MenuFirmware.asm 00C721 1 20 58 FC jsr Home ;clear screen and show menu options 00C724 1 A0 00 ldy #$00 00C726 1 PrintString: -00C726 1 B9 B8 C7 lda Text,y +00C726 1 B9 BC C7 lda Text,y 00C729 1 F0 08 beq WaitForRPi 00C72B 1 09 80 ora #$80 00C72D 1 20 ED FD jsr PrintChar @@ -145,38 +145,34 @@ Current file: MenuFirmware.asm 00C7A3 1 end: 00C7A3 1 60 rts 00C7A4 1 -00C7A4 1 00 00 00 00 .repeat 183-GetByte -00C7FA 1 6A .byte SendByte +00C7B8 1 00 00 00 00 +00C7BC 1 .byte 0 +00C7BC 1 .endrepeat +00C7BC 1 +00C7BC 1 Text: +00C7BC 1 41 70 70 6C .byte "Apple2-IO-RPi",$8d +00C7C0 1 65 32 2D 49 +00C7C4 1 4F 2D 52 50 +00C7C8 1 69 8D +00C7CA 1 28 63 29 32 .byte "(c)2020-2021 Terence J. Boldt",$8d +00C7CE 1 30 32 30 2D +00C7D2 1 32 30 32 31 +00C7D6 1 20 54 65 72 +00C7DA 1 65 6E 63 65 +00C7DE 1 20 4A 2E 20 +00C7E2 1 42 6F 6C 64 +00C7E6 1 74 8D +00C7E8 1 8D .byte $8d +00C7E9 1 57 61 69 74 .byte "Waiting for RPi...",$00 +00C7ED 1 69 6E 67 20 +00C7F1 1 66 6F 72 20 +00C7F5 1 52 50 69 2E +00C7F9 1 2E 2E 00 00C7FC 1 00C7FC 1 00 00 .byte 0,0 ;0000 blocks = check status 00C7FE 1 07 .byte 7 ;bit set(0=status 1=read 2=write) unset(3=format, 4/5=number of volumes, 6=interruptable, 7=removable) diff --git a/RaspberryPi/Apple2-IO-RPi.hdv b/RaspberryPi/Apple2-IO-RPi.hdv index b7cdf91aab6c28f5848d56b401086b35b21a1636..8bf17c37146f2458288f0144b0129baee1c7cd73 100755 GIT binary patch delta 3636 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