From 82d86548c313a4aeed9d906c9a3305bd659c3880 Mon Sep 17 00:00:00 2001 From: Terence Boldt Date: Sat, 27 Mar 2021 11:07:36 -0400 Subject: [PATCH] Remove relative code to free up x register --- Apple2/CommandFirmware.asm | 101 ++++++++++++++++++++++++++ Apple2/CommandFirmware.lst | 108 ++++++++++++++++++++++++++++ Apple2/DriveFirmware.asm | 34 ++++----- Apple2/DriveFirmware.lst | 34 ++++----- Apple2/FileAccessFirmware.asm | 101 ++++++++++++++++++++++++++ Apple2/FileAccessFirmware.lst | 108 ++++++++++++++++++++++++++++ Apple2/Firmware_27256_EPROM.bin | Bin 32768 -> 32768 bytes Apple2/Firmware_AT28C64B_EEPROM.bin | Bin 8192 -> 8192 bytes Apple2/MenuFirmware.asm | 15 ++-- Apple2/MenuFirmware.lst | 41 +++++------ Apple2/assemble.sh | 30 ++++++-- 11 files changed, 504 insertions(+), 68 deletions(-) create mode 100644 Apple2/CommandFirmware.asm create mode 100644 Apple2/CommandFirmware.lst create mode 100644 Apple2/FileAccessFirmware.asm create mode 100644 Apple2/FileAccessFirmware.lst diff --git a/Apple2/CommandFirmware.asm b/Apple2/CommandFirmware.asm new file mode 100644 index 0000000..50fe54a --- /dev/null +++ b/Apple2/CommandFirmware.asm @@ -0,0 +1,101 @@ +;ProDOS Zero Page +Command = $42 ;ProDOS Command +Unit = $43 ;ProDOS unit (SDDD0000) +BufferLo = $44 +BufferHi = $45 +BlockLo = $46 +BlockHi = $47 + +; ProDOS Error Codes +IOError = $27 +NoDevice = $28 +WriteProtect = $2B + +InputByte = $c08e+SLOT*$10 +OutputByte = $c08d+SLOT*$10 +InputFlags = $c08b+SLOT*$10 +OutputFlags = $c087+SLOT*$10 + +ReadBlockCommand = $01 +WriteBlockCommand = $02 +GetTimeCommand = $03 +ChangeDriveCommand = $04 +ExecCommand = $05 +LoadFileCommand = $06 +SaveFileCommand = $07 + + .org SLOT*$100 + $C000 +;ID bytes for booting and drive detection + cpx #$20 ;ID bytes for ProDOS and the + cpx #$00 ; Apple Autostart ROM + cpx #$03 ; + + ldx #SLOT*$10 + stx $2b + stx Unit + +;force EPROM to second page on boot + lda #$1f ;set all flags high and page 3 of EPROM for menu +PageJump: + sta OutputFlags + jmp Start ;this jump is only called if coming in from PageJump with A=$2f + +;entry points for ProDOS +DriverEntry: + lda #$0f ;set all flags high and page 0 of EPROM + sta OutputFlags + +Start: + +; Put command firmware here +; +; +; + + +SendByte: + pha +waitWrite: + lda InputFlags + rol + rol + bcs waitWrite + pla + sta OutputByte + lda #$0e ; set bit 0 low to indicate write started + sta OutputFlags +finishWrite: + lda InputFlags + rol + rol + bcc finishWrite + lda #$0f + sta OutputFlags + rts + +GetByte: + lda #$0d ;set read flag low + sta OutputFlags +waitRead: + lda InputFlags + rol + bcs waitRead + lda InputByte + pha + lda #$0f ;set all flags high + sta OutputFlags +finishRead: + lda InputFlags + rol + bcc finishRead + pla +end: + rts + +.repeat 251-!o;E&A;v;2f>TSl^STlHbT7$UeX-ON_q++ zN+^tBC|lZ75K({gKgCsY%R!W!3?h|)NNhFM_kQoUvorn8*ntl0GV^lS;rGi+Wa3zB*&Ix+`MgC1IV!ZBtki%hOhEd4Boa@~m}idCq8xg^6Qd z%$U>r&)uEapS*iyfBvlXR_DgU^@mpNh0c1-I%?b!Mqhlg`t6o@YWq)X0>_WcXpuCPwPyOiVA z`|=%ktmoCt?FYS&MO#i{!0Lkwom%SGGpBZme^T+U0ly7D2-~Ku^V>Q2ZKH3;`EBI4 zk>5ss8~N=4zdhtn#+evrsyO7giT_i@{~7YHi5`w6|C&I4ngRaLB|i;w@EeMM1Na@_ zhi%i*`JEj6j?s7G{0{Ov$nPM(gZ$2b-x=~J<4lY*RUGm=#D7!q_mF=>^l&WsHzYsJ z0RJt?Ps1GiXB7V?@Vmed+or4YyE*t>qwmJ~UF3I>-$i~G`P~7(JLFHsnHXoPIOKPU z|0~7+HS%wY9*!mdrsSs?;QvPQ(=Z4B>xw@Feh>Iz+w^pPF9*M8^u0L0hx{J$d&uu0 zzc=9bhWyDm6XQ%3hx{J#f2a7rNB&Usa4h*l$xk!D|AXYGVGjN`75@(K`@j#|rmyq+ zIrx2}@5lLlKScfz`9tIn2mIlX zKN)9YoT=iFKP3LY75^dfABY}~CI5lsry1b?SMt*^2S4e519iVn`d_rvrt0sgCm+%O z2I_vD^uH~o6)!c4k=jwCrtUxDC;e}r?$=5G+frJQzZj`a-T$a3BYx8V2I_vD^uH~o z75R&i+EJsX?myxu{coV|*Gd1|Qd*I}7^zL&|EMP;e$xL2>VBQ{zb&N|`HPX-QKP2r zKjJ6-Z=mkiN&nkYT9LmPsZHJgs3#+S(*FkPex3BcEu|Iti;>z;DSt zf2-p9->SI&w<@mxt%~b^tK$0Ks<{5QDz5+W^}q4C!uw-!&F4US8~W zQZGElWHP$`nUwc`;_H9KZ)fq_rQ+Au|BBzq;&)2Ludn|VznjJHmWp3r|0{kki{C31 zzrOxg{C*a{Un+im{jd0gEdHQW{QCM|@rPObVX63I>wotD!T$jtfc<~n|6>3D@%b<8 z|Fi!e_kWYVKKuXd|Fi!;Cd>cY|E&Mn|G%kHP1yg3RGZBwO|=`BQ$F!NqVr#0|Fi#J zY^q)2?>;Vr==kgFfA;^2O|=`BL!Nja(eaP1|JnbS>;Ee1Kl}gH&i`ZozuNhK?EhCg z|BwBDxbLs>|CRs4{(naP2mAkJ%74+<|LXi_|3BmWXaB!U=Rf=ZT>p>#4?zF9{vYmt zKpi00|Lge=T>t<0{0FZ8=lcJ6{zI~^pX>j*{y$+sjC2tBACp@Ce--clbN&A&-2dVF zf9(Im{y+Qw)M}0E|BGm~Gg6()+IggZ?ElmKkKz6QD(XM`|JBxi_WyU_`mehEf7t&& zsC54y_Wy_a&;Gyc|G@SC8U8QV|Ch=C<@$eI|HS+Msn0*I|IhgU=lXx{|DXE&1MdIN z{r}_sXR@z9_y0%#ll%Xx=bv!@|LFNI$vgq>|IhvZvs{bf<|F@u{eQat=l=if|8xI; zeEtvj|1b7YJH>ry7x1 Y&VTOzU#9b4@BhdCzs!Fsd;kCc0QKL~V*mgE literal 32768 zcmeI5y-QnB7{(JVt(I0hbZDs1Gh2{0?I4|6qtPKl!KGu04JcJp(6!Jdb|@)!>>vc; z6z)=V>>$10S0RIcLZ(88LZB3?RP23oPjb)o=8`N?b9pjE65n8ci_baF`&DDLL~U?8 zv2lMRqukqiuja;7Wt4uVRV7)PQWB+XX|^=243%bBTFoVgzGV1R{l-DEe(PYMo}EgUbx`|6d$KT6Vl&9n40>poQy?5+A^#(lD9=mT!#r|JE} zzjmc*|Kel5(eb-}N(swVSm#IF&*M*JG_YfXO5=MTnlisK@V__dz$ zGl^dp{Cb#Q?}A@vRbA%SiC-svo%nU)*PHyh&mWBA6vssz@#{V1e<1N2g5L=98(r`l ztZK;o2JsujZxFvh{6>@C@cDyroZ`5MBYvZ&{7)r*Q}CN%ezOaHlT}Tb-z0vM_)X$B ziQjDUn?8Rqj#C^Lal~)-l>fQJZwY=Y%x`tUZ?UQ+^IODk5x+(J7V%q6e#_?%#&L?{ zB98d2p7Q4v4!^5k zWxr1L4}Y_}CzC&Sue*=o(cFmoaDq)0i|gg|1e-6cv&?dF;dS}Z1j`gxR$i{YV!5T& zLizCo%PuV!*t3O&!rEFnLWbLF^Lf14PXAM${tJFBieHNrzoh>uPyYqK9>uT6ieJ+I zl&AlK--zNjV#P1%f6CK;!EZ+Ko3Y}T^gre4zu>o`_^nv+OZuPk^k4AXQT%qS_$B>M zdHOH-ohW`MR{WCwozFkW|0Dk|pMQdR zedPboBd_1>-$4Ff)ITEs->QE_{=aelMgG50|AhR1MEw`?|8c5+L;k<@|9=ei|6czG z{QuDX7yf_e`!D=|`2X_#7yf^L)&Il)hyM@%AO3$D{ePkJANv0~pa0PR*Wdkr(0}MZ z^dI^U{SWtlL;s=wo#x-5{~!JTeK-FA`Tth_2l;>G|K0O1`u`jC59t4osDD8JKj#0n zoqve=f0+L#=RbpU{V@NJ`kyfWPs~5X{J+-x*I=Ch=Ko#P{6F~r@c-fe!~ci>5C8w{ z{CCX%?VSJUcmE&y5B-P!L;s=w(0}NEaQ_YF|6~5Y*nfce|8eSn#r%K2{sHs+FAF{~z}M$@LGxy?)sLNA(Zb|0n7nu>Y@B{}7xLcyasx X;Qzz_hyM@%AO1i5fB64#_y7L`d5ap6 diff --git a/Apple2/Firmware_AT28C64B_EEPROM.bin b/Apple2/Firmware_AT28C64B_EEPROM.bin index 2769f1a2469da76a1c5cf4ff819a3681c4064e64..6e1e46f5731edf569e411d38c0cfe177534cd26f 100644 GIT binary patch literal 8192 zcmeI$J7^R^7zgl+iZ6T>79I*WwL;Lf5gRoxEm8QlMg9Ks&2e{G54RFM_KF?8x&Oias{hW+h?&C7(p!a# z+b;IHd#abz;1=bs$Lc7ztJ32ZDg%}Ml|FZ6rC&H|uxsV*UfDCZ=4sd5hNnyB26nlJ z%C~-w{d5bP%3}q0sko~|O5=r~2b8?pH#zmW z>@HcHlgLS%yWdA&BX_{NthR2w_vLuCs@!$-FU>si#r)&4yVma9`|4d$2h1h{BVUh~ z3%~uW*f_)f4c0$OexH6wtK+Breg?lUYJRidhu??ahu??aulxOmzcnY3lQsvx&;IMy ze*^we( zGWa7=i<>`9Byxj~V=Dtbd;Tn*6jnI_=jP{94p>vtPrn;n(nM_;uZ{8~)au zL{8cq{F?pWtbYOidF5d?{(0l)9rFJ$ejYRUx&KS({UZ0jIQ)IA@L;!EbzyF~c)u_? z^-*kI*!A}QYWl2NKe$fq=oUT0!{@3_w-`8aa!BkudUWXQ+3L=2(K~$V)REK2#Ndh3 zL)A9T``bGH>zj-Ezl7c|a{pVu-_GxMl%M;*gx)W5|6701&L4D?pZmXr-Y;_hTYuQj zA9j?V`@e+VFLM7|f7H$&b(Ej`zl7c|a{pU@+|D0&l%M;*gx)W5|6703&YyIYpZmXr z-Y;_hTfc7S*B#~O{?E_<)c^VUpWc7zJs>~-r{Dkc^Z%dk|MK&He*SMh|F)j%^Yi~d meE!e-Kkxti{y)F}&+q@~9w5K}Prv`>_y2!>|NX!2|9=4!Y!>YR literal 8192 zcmeI%ziZTB7zglNE82>-9UKe_zH@~`t3z?pUVH6ugV4qCq#m@`_Jnp7T&@msQb&iv zQFw(c(vA+r3EL{QrYxgXZOyi(t)bQony_o7p-&Y&)w_03>Wv)?^s1BA ze0}@0b7~nk>m9=yM4xTs*&jE*?%S6Re_18}8du>o>z_IXdToE3@lSjPe&8oROz$85 zu3H2D<}l>2%|0(;|n@9a8u3OjTot@*o_x4=>CImK* z7wg8E$CVr1z(1z=9qD(HekX(9L7t=f9q>Egcfjv}-wFLrX&%n>X&q6whr_VAnDW%T1@|L`Zebu#&V_o{ykkJd))`(-rMY_7K_ z%4oi^jw;K|g_rFIWmIXdtUOV-uk^ne^uP3zG(RbnU+I4{=zr;V)BJ9s{7V0uLH|oXP4m-2`IY`RgZ`I( zmgZ-L@+ Firmware_27256_EPROM.bin cat \ DriveFirmware.bin MenuFirmware.bin DriveFirmware.bin DriveFirmware.bin \ @@ -35,3 +55,5 @@ ld65 Rpi.Command.o -o Rpi.Command.bin -t none rm *.o rm DriveFirmware.bin rm MenuFirmware.bin +rm CommandFirmware.bin +rm FileAccessFirmware.bin