From b1dc22c83879741380cf789fa53477245bb84fb6 Mon Sep 17 00:00:00 2001 From: Terence Boldt Date: Sun, 6 Feb 2022 21:06:22 -0500 Subject: [PATCH] Auto-detect slot number for RPI.COMMAND --- Apple2/CommandFirmware.lst | 9 +- Apple2/DriveFirmware.lst | 11 +- Apple2/FileAccessFirmware.lst | 10 +- Apple2/MenuFirmware.lst | 11 +- Apple2/RPi.Command.asm | 89 ++++++++-- Apple2/RPi.Command.bin | Bin 229 -> 489 bytes Apple2/RPi.Command.lst | 302 +++++++++++++++++++++------------- Apple2/Shell.lst | 10 +- Apple2/assemble.sh | 2 +- RaspberryPi/Apple2-IO-RPi.hdv | Bin 33553920 -> 33553920 bytes 10 files changed, 307 insertions(+), 137 deletions(-) diff --git a/Apple2/CommandFirmware.lst b/Apple2/CommandFirmware.lst index 519fd43..ded1c5d 100644 --- a/Apple2/CommandFirmware.lst +++ b/Apple2/CommandFirmware.lst @@ -1,7 +1,14 @@ -ca65 V2.17 - Raspbian 2.17-1 +ca65 V2.18 - N/A Main file : CommandFirmware.asm Current file: CommandFirmware.asm +000000r 1 ; Copyright Terence J. Boldt (c)2020-2022 +000000r 1 ; Use of this source code is governed by an MIT +000000r 1 ; license that can be found in the LICENSE file. +000000r 1 +000000r 1 ; This file contains the source for the firmware +000000r 1 ; that was formerly used to act as a pseudo-shell +000000r 1 000000r 1 ;ProDOS Zero Page 000000r 1 Command = $42 ;ProDOS Command 000000r 1 Unit = $43 ;ProDOS unit (SDDD0000) diff --git a/Apple2/DriveFirmware.lst b/Apple2/DriveFirmware.lst index 6991f1f..a734841 100644 --- a/Apple2/DriveFirmware.lst +++ b/Apple2/DriveFirmware.lst @@ -1,7 +1,16 @@ -ca65 V2.17 - Raspbian 2.17-1 +ca65 V2.18 - N/A Main file : DriveFirmware.asm Current file: DriveFirmware.asm +000000r 1 ; Copyright Terence J. Boldt (c)2020-2022 +000000r 1 ; Use of this source code is governed by an MIT +000000r 1 ; license that can be found in the LICENSE file. +000000r 1 +000000r 1 ; This file contains the source for the firmware +000000r 1 ; that allows the Apple II to boot from the card +000000r 1 ; and for ProDOS to recognize the card as two +000000r 1 ; hard drivers +000000r 1 000000r 1 ;ProDOS Zero Page 000000r 1 Command = $42 ;ProDOS Command 000000r 1 Unit = $43 ;ProDOS unit (SDDD0000) diff --git a/Apple2/FileAccessFirmware.lst b/Apple2/FileAccessFirmware.lst index 9b31632..79facb7 100644 --- a/Apple2/FileAccessFirmware.lst +++ b/Apple2/FileAccessFirmware.lst @@ -1,7 +1,15 @@ -ca65 V2.17 - Raspbian 2.17-1 +ca65 V2.18 - N/A Main file : FileAccessFirmware.asm Current file: FileAccessFirmware.asm +000000r 1 ; Copyright Terence J. Boldt (c)2020-2022 +000000r 1 ; Use of this source code is governed by an MIT +000000r 1 ; license that can be found in the LICENSE file. +000000r 1 +000000r 1 ; This file contains the source for the firmware +000000r 1 ; that was formerly used to copy files from RPi +000000r 1 ; to Apple II RAM +000000r 1 000000r 1 ;ProDOS Zero Page 000000r 1 Command = $42 ;ProDOS Command 000000r 1 Unit = $43 ;ProDOS unit (SDDD0000) diff --git a/Apple2/MenuFirmware.lst b/Apple2/MenuFirmware.lst index 77276fa..22ee23f 100644 --- a/Apple2/MenuFirmware.lst +++ b/Apple2/MenuFirmware.lst @@ -1,7 +1,16 @@ -ca65 V2.17 - Raspbian 2.17-1 +ca65 V2.18 - N/A Main file : MenuFirmware.asm Current file: MenuFirmware.asm +000000r 1 ; Copyright Terence J. Boldt (c)2020-2022 +000000r 1 ; Use of this source code is governed by an MIT +000000r 1 ; license that can be found in the LICENSE file. +000000r 1 +000000r 1 ; This file contains the source for the firmware +000000r 1 ; that displays the copyright message on boot +000000r 1 ; and checks for the RPi status to be ready before +000000r 1 ; attempting to boot +000000r 1 000000r 1 ;ProDOS Zero Page 000000r 1 Command = $42 ;ProDOS Command 000000r 1 Unit = $43 ;ProDOS unit (SDDD0000) diff --git a/Apple2/RPi.Command.asm b/Apple2/RPi.Command.asm index 47e4962..3be5270 100644 --- a/Apple2/RPi.Command.asm +++ b/Apple2/RPi.Command.asm @@ -17,10 +17,10 @@ XLEN = $BE52 ;length of command string-1. XCNUM = $BE53 ;CI cmd no. (ext cmd - 0). PBITS = $BE54 ;Command parameter bits. XRETURN = $FF58 ;Known RTS instruction. -InputByte = $c0fe -OutputByte = $c0fd -InputFlags = $c0fb -OutputFlags = $c0f7 +InputByte = $c08e +OutputByte = $c08d +InputFlags = $c08b +OutputFlags = $c087 ReadBlockCommand = $01 WriteBlockCommand = $02 @@ -37,6 +37,62 @@ Keyboard = $c000 ClearKeyboard = $c010 Wait = $fca8 +LastChar = $06 +SlotL = $fe +SlotH = $ff +ESC = $9b + + .org $2000 + ldx #$07 ; start at slot 7 +DetectSlot: + ldy #$00 + lda #$fc + sta SlotL + txa + ora #$c0 + sta SlotH + lda (SlotL),y + bne nextSlot + iny + lda (SlotL),y + bne nextSlot + iny + lda (SlotL),y + cmp #$17 + bne nextSlot + iny + lda (SlotL),y + cmp #$14 + bne nextSlot + txa + asl + asl + asl + asl + tax + clc + bcc Start +nextSlot: + dex + bne DetectSlot + rts +Start: + stx slotx + $1e01 ;set the slot for the driver + ldx #$00 +copyDriver: + lda $2100,x + sta $0300,x + inx + cpx #$e6 + bne copyDriver +end: + jmp $0300 + +.repeat 253-}61#%fS5N!LtireHfS-hBR2qzOVNw^IDF5z0a6eiubbbTglwZu`dDSNhVH(yN{SJ zXuf#BeBt9trrw}^Dr~nv17CBFubp#Hq zWL22WynuNp1JlXg4;-5HK;8+U0SrJ|VJGtj_LB@BB!OCV7!C-$U(0X+$ONka>Xevp zPXcI0qESX_P630*-tGfhS{r_5%$-s27_XCG!J&c*e;?4&+VC@@_wRv~a=qUVfcX=Cu9OF|6IRMX iMJDioOp^Z!7Pd%O`|p4UmrzI5GkSS??}ovs!c*?{qEZh>@glx@&u$5c zf%N@x!LsQ$;)1cE%NI|jEe*j7idEHm z(0a&v*s5k#w`y25tw*d!t;eidR&A?}^|)2ndcvw_)wklT23A9>ktM6K)x>(zYHBsJ znp-WbmR2k4DeGygwe^hktkuSP&U)T@!D?&0XuV{$v)Wr7td7>p)+<&gE8gmCb+Niy z-K_3b538ru%X-y%%}TIdw|ZM|Sc%q~Rv)Xc)z9j04X_4UZ&`z^!PeW>JJ!3_5NoKF zWW8q%vxZwEtdW+j_pJ}CQPyZ{j5XFuwooekDg^HQSnFWmsQYbFF#Sd~1QV&{||Iw!X5KSYKP;Sl?Pp zt!377YlXGaT4k-aGOh2dHP%{do%Ox7-r8Vow0^KQS(~jb)>dnqwcXlb?XjHw|=q?SO=}2tzWD|)?w>c>xlK6b<{d${cdGj$E_3AN$Zq#+B##Mwa!`R ztqayg>ymZZ`osFux?)|mu36WuzpNY9-_}j*mUY{@Gg`qE1rdf2av&TzkqZ&XjXcPU zdyo(LQ2+%Ii9#rhA}EStD2^zUKuMHBX_P@(+>2>$G(bZ%!rgr|MiV@Vrf7!dXn~e!g{SZ| zTH_f!i#B);&*KHO#fx|e?a&?_&=D`=6?8&8I-?7^q8qxS2YR9xUd3xj!0YIZH;{-o z(Fc9e5B)I!1MwCHVKCmtJ9rmEFce9655q7VBQO%i`}hE(FdAbp7RgA#he*XZj7J(K zU?L_V9h319KE@P$f~lB>>6n2}F%zHRb9{kWn2kBez?Ybdd6Rj9+jFhw&?p;5Qt_G5n5f9LEWq#3`J{8JxvAoW})R#3fwDANUhja23~Z9e?2l Q{>Dw*!tLM!-3hMv2X|rUU;qFB delta 1986 zcmX}od6X7n6vy%Rowun;r3Pta8!cLteMwU2YbV)v%DyD~zLfAoOd^b|2{9-UQZ%xc zwX!cIrjWI=6Zz&G&bgoa+Jg#xESNriz>T4QG<16ZG7L@AR)HJEDE7erg4;WjR zRw!#)J$HU-R;SvIeTyABSB-4cV^Bk>TdV1H<<+B0V@gvBWix9QS9BR-H)Gb4x`J=@ zu$|3XMW}XdIe^iqJHy z6q<$Rp+#6Zv<$66WmqMw8deLf!|I_;s0wR@wqeb%R#-c%6V?sYVZG2Uv=1FZ$FP3r z6gr14p=;P6bPL_XhGC3JM0to4f}=t!vW#Ia8Nin91;!kU;n;9oI6j;ZP7Ei7lf$5JN*EkY4X1_E!x`bsa8@`woDwSQ zQMfo<5{87K;nFZHTox`5SA>Ks!&TwxFg#ont_?L|M7S=D4A+Mn!l-a#xGCHmYQrsI zbhtI#7H$uBgge7sVNAF?j1BjMd&7NUT)00x5bDB%;i2$w7#}8tN5aJLXm~743Xg{; z!joZgcq&W@Q^V8YnJ_KXhiAj|@LYI4ybxXtFNK%GD`7^M8D0&qh1bIy;mzcGWPs9B1S@=9Ogau(?_#%86z6y)N*WsJ+ZTK#H zAASgn!;-Kx{1|=;KZjq!ui>}wd-x;#8J2~=!rx)}aEc=+s!Sy{Qn?zdi7M1oE2){9 ztA$opOSMv^R?(_jO|7-M+NervsIAu2T3TD{XkArnJ+)JNbx=pGuTJW$F6ycc)J@&B zp*GUS+C-abGi|Odw57IE4{fcU+D5&!t$M4Ew$t|7L4CF2KX%kk+F843SM8?VwTJdp zKkcRd+FSc*U+t&;b$|}kK{{B6=ujP|!*zs?)Bp|CQ94@3=vW=6<8^{g)JZy7gLH}p z>r|bl({+Z<)LA-P=jdFWr}K4zF4RT3SeIyshU!uc(`C9`S17ttSLtdE*EPCUH5#Go zG*Z{=2945hz!<(!(0B33@~m z^{5`xBt5Pt^rR;1DNWH-J*{UnP4#+K)AgL5*9&@4FX?5yq8Xa0SM{1+*Bg3MZ)uih zYmVO5J9<~|>3w~m5A~5g)+d^)dHPiI^_f0bgBEC^zR;KYN{jThzR|b(PT%VXE!Gk( e)sOl~KkFC$s^9dx{?MOVroZ%eaRSSWQ~v=>yV|M%