From 706ee7cdbc512ed6e6af44eb72baf7a1647cdbe8 Mon Sep 17 00:00:00 2001 From: tomch Date: Sat, 20 Oct 2012 14:20:56 +0000 Subject: [PATCH] HDD firmware: Added support for SmartPort entrypoint . "Prince of Persia (Original 3.5 floppy for IIc+).2mg" now boots --- AppleWin/firmware/HDD/HDDRVR.BIN | Bin 256 -> 256 bytes AppleWin/firmware/HDD/hddrvr.a65 | 76 ++++++++++++++++++++++++++++--- AppleWin/resource/Hddrvr.bin | Bin 256 -> 256 bytes 3 files changed, 70 insertions(+), 6 deletions(-) diff --git a/AppleWin/firmware/HDD/HDDRVR.BIN b/AppleWin/firmware/HDD/HDDRVR.BIN index 74fe414f988304b52643bfdaa8dff24004fc10b7..02595eaa1da72dd75f46c48e3de252021d7e7069 100644 GIT binary patch delta 123 zcmZo*YG4vtsj!k^CG$#~3mg_37$r88PLQ1_C~0cp!*DF4)h(md-D9a+CbP!^#*J>R zPA4v~GB8+dI0|IDo&XYVKw;Nb=MzA}<-~=`i3yeJ8(lqsTo7(`2OHpe;=*(W6!5?P GIu`&c5G{%T delta 144 zcmZo*YG6uOsj!k^CG$#~3+xsf7$r88GOT3i{d8buLGR}SYd;+DSo`sS#7V{rj20Oa dEPWV`G2j3e8;;_TnV3+ijzbDr_<#L%E&w!E9CQEx diff --git a/AppleWin/firmware/HDD/hddrvr.a65 b/AppleWin/firmware/HDD/hddrvr.a65 index 4ca6ba5b..ab22bec7 100644 --- a/AppleWin/firmware/HDD/hddrvr.a65 +++ b/AppleWin/firmware/HDD/hddrvr.a65 @@ -29,7 +29,13 @@ ; . Fixed so it can be assembled by a65 v1.06 ; . Fixed so that ProDOS entrypoint is $c70a (26 Dev 2007) (Bug #12723) ; . Modified to support Apple Oasis' entrypoint: $c761 (8 Sept 2012) (Feature #5557) -; . TO DO: Make code relocatable +; . Added support for SmartPort entrypoint (20 Oct 2012) +; - EG. "Prince of Persia (Original 3.5 floppy for IIc+).2mg" +; TODO: +; . Make code relocatable (so HDD controller card can go into any slot) +; . Remove support for Entrypoint_C746 (old AppleWin) & Entrypoint_C761 (Apple Oasis) +; - provide a utility to convert these to use Entrypoint_ProDOS +; . Check SmartPort: Is it OK to trash Y and $42,..,$47 ? ; ; constants @@ -68,12 +74,12 @@ Entrypoint_ProDOS ; $c70a - ProDOS entrypoint sec bcs Entrypoint -Entrypoint_SmartPort ; $c70d - SmartPort entrypoint (not supported) +Entrypoint_SmartPort ; $c70d - SmartPort entrypoint clc Entrypoint ; $c70e - entrypoint? bcs cmdproc - brk + bcc SmartPort ;; @@ -104,7 +110,27 @@ noerr0 jmp slot6 ;====================================== -; 24 unused bytes + +; TODO: Is it OK to trash Y and $42,..,$47 ? +; Pre: C=0 +SmartPort + pla + sta $46 + pla + sta $47 ; ($47) = &cmd_hdr + pha + lda $46 + adc #3 ; Pre: C=0, Post: assume C=0 + pha ; (sp).w += 3 + + ldy #1 + lda ($46),y ; cmd + sta $42 + iny + bne SmartPort2 + +;====================================== +; 2 unused bytes *= $c746 ; org $c746 @@ -115,9 +141,27 @@ Entrypoint_C746 ; Old f/w 'cmdproc' entrypoint sec bcs Entrypoint +;====================================== + +; Pre: Y=2 +SmartPort2 + lda ($46),y ; param_l + sta $45 + iny + lda ($46),y ; param_h + sta $46 + + ldy #1 ; skip paramLength (assume it's #$03) + lda ($45),y ; unit + sta $43 + iny + lda ($45),y ; memblock_l + sta $44 + iny + bne SmartPort3 ;====================================== -; 23 unused bytes +; 1 unused byte *= $c761 ; org $c761 @@ -220,7 +264,27 @@ loop2 rts ;====================================== -; 35 unused bytes + +SmartPort3 + lda ($45),y ; memblock_h + pha + iny + lda ($45),y ; diskblock_l + pha + iny + lda ($45),y ; diskblock_h + sta $47 + + pla + sta $46 + pla + sta $45 + + iny + bne cmdproc + +;====================================== +; 15 unused bytes ; $CsFE = status bits (BAP p7-14) ; 7 = medium is removable diff --git a/AppleWin/resource/Hddrvr.bin b/AppleWin/resource/Hddrvr.bin index 74fe414f988304b52643bfdaa8dff24004fc10b7..02595eaa1da72dd75f46c48e3de252021d7e7069 100644 GIT binary patch delta 123 zcmZo*YG4vtsj!k^CG$#~3mg_37$r88PLQ1_C~0cp!*DF4)h(md-D9a+CbP!^#*J>R zPA4v~GB8+dI0|IDo&XYVKw;Nb=MzA}<-~=`i3yeJ8(lqsTo7(`2OHpe;=*(W6!5?P GIu`&c5G{%T delta 144 zcmZo*YG6uOsj!k^CG$#~3+xsf7$r88GOT3i{d8buLGR}SYd;+DSo`sS#7V{rj20Oa dEPWV`G2j3e8;;_TnV3+ijzbDr_<#L%E&w!E9CQEx