From a80939355b2b1d010a2a8338fd15ae064494c925 Mon Sep 17 00:00:00 2001 From: Terence Boldt Date: Tue, 28 Dec 2021 09:49:12 -0500 Subject: [PATCH 1/4] Initial attempt at adding command to basic --- Apple2/RPi.Command.asm | 173 +++++++++++++++++++++++++++++++++++++++ Apple2/RPi.Command.bin | Bin 0 -> 227 bytes Apple2/RPi.Command.lst | 179 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 352 insertions(+) create mode 100644 Apple2/RPi.Command.asm create mode 100644 Apple2/RPi.Command.bin create mode 100644 Apple2/RPi.Command.lst diff --git a/Apple2/RPi.Command.asm b/Apple2/RPi.Command.asm new file mode 100644 index 0000000..e69d9bf --- /dev/null +++ b/Apple2/RPi.Command.asm @@ -0,0 +1,173 @@ + .ORG $300 +INBUF = $200 ;GETLN input buffer. +WAIT = $FCA8 ;Monitor wait routine. +BELL = $FF3A ;Monitor bell routine. +EXTRNCMD = $BE06 ;External cmd JMP vector. +XTRNADDR = $BE50 ;Ext cmd implementation addr. +XLEN = $BE52 ;length of command string-1. +XCNUM = $BE53 ;CI cmd no. (ext cmd - 0). +PBITS = $BE54 ;Command parameter bits. +XRETURN = $BE9E ;Known RTS instruction. +InputByte = $c0fe +OutputByte = $c0fd +InputFlags = $c0fb +OutputFlags = $c0f7 + +ReadBlockCommand = $01 +WriteBlockCommand = $02 +GetTimeCommand = $03 +ChangeDriveCommand = $04 +ExecCommand = $05 +LoadFileCommand = $06 +SaveFileCommand = $07 +MenuCommand = $08 + +InputString = $fd67 +PrintChar = $fded +Keyboard = $c000 +ClearKeyboard = $c010 +Wait = $fca8 + + ; + ; FIRST SAVE THE EXTERNAL COMMAND ADDRESS SO YOU WON'T + ; DISCONNECT ANY PREVIOUSLY CONNECTED COMMAND. + ; + LDA EXTRNCMD+1 + STA NXTCMD + LDA EXTRNCMD+2 + STA NXTCMD+1 + ; + LDA #RPI ; external command JMP + STA EXTRNCMD+2 ; vector. + RTS + ; + RPI: LDX #0 ;Check for our command. + NXTCHR: LDA INBUF,X ;Get first character. + ora #$20 ;Make it lower case + CMP CMD,X ;Does it match? + BNE NOTOURS ;No, back to CI. + INX ;Next character + CPX #CMDLEN ;All characters yet? + BNE NXTCHR ;No, read next one. + ; + LDA #CMDLEN-1 ;Our cmd! Put cmd length-1 + STA XLEN ; in CI global XLEN. + LDA #>XRETURN ;Point XTRNADDR to a known + STA XTRNADDR ; RTS since we'll handle + LDA #zOVNo^IDF5y^okziubbbTglwZu`gi}!(Ij^PKCSom@lZmc))z&<4UI9pnWU% z^#<%)Ij=Wx-%5tw;C;Oz`+7t7t?X5J`&VKDi$%^uW*vb8D_Iq$F)v`=$-s27_XCG! zJ&<<-sGR{wD{Nujzn10G-|Nb!VU84?l+pFX@~ GU;qHH_H9@I literal 0 HcmV?d00001 diff --git a/Apple2/RPi.Command.lst b/Apple2/RPi.Command.lst new file mode 100644 index 0000000..0857ef0 --- /dev/null +++ b/Apple2/RPi.Command.lst @@ -0,0 +1,179 @@ +ca65 V2.17 - Raspbian 2.17-1 +Main file : RPi.Command.asm +Current file: RPi.Command.asm + +000000r 1 .ORG $300 +000300 1 INBUF = $200 ;GETLN input buffer. +000300 1 WAIT = $FCA8 ;Monitor wait routine. +000300 1 BELL = $FF3A ;Monitor bell routine. +000300 1 EXTRNCMD = $BE06 ;External cmd JMP vector. +000300 1 XTRNADDR = $BE50 ;Ext cmd implementation addr. +000300 1 XLEN = $BE52 ;length of command string-1. +000300 1 XCNUM = $BE53 ;CI cmd no. (ext cmd - 0). +000300 1 PBITS = $BE54 ;Command parameter bits. +000300 1 XRETURN = $BE9E ;Known RTS instruction. +000300 1 InputByte = $c0fe +000300 1 OutputByte = $c0fd +000300 1 InputFlags = $c0fb +000300 1 OutputFlags = $c0f7 +000300 1 +000300 1 ReadBlockCommand = $01 +000300 1 WriteBlockCommand = $02 +000300 1 GetTimeCommand = $03 +000300 1 ChangeDriveCommand = $04 +000300 1 ExecCommand = $05 +000300 1 LoadFileCommand = $06 +000300 1 SaveFileCommand = $07 +000300 1 MenuCommand = $08 +000300 1 +000300 1 InputString = $fd67 +000300 1 PrintChar = $fded +000300 1 Keyboard = $c000 +000300 1 ClearKeyboard = $c010 +000300 1 Wait = $fca8 +000300 1 +000300 1 ; +000300 1 ; FIRST SAVE THE EXTERNAL COMMAND ADDRESS SO YOU WON'T +000300 1 ; DISCONNECT ANY PREVIOUSLY CONNECTED COMMAND. +000300 1 ; +000300 1 AD 07 BE LDA EXTRNCMD+1 +000303 1 8D E1 03 STA NXTCMD +000306 1 AD 08 BE LDA EXTRNCMD+2 +000309 1 8D E2 03 STA NXTCMD+1 +00030C 1 ; +00030C 1 A9 17 LDA #RPI ; external command JMP +000313 1 8D 08 BE STA EXTRNCMD+2 ; vector. +000316 1 60 RTS +000317 1 ; +000317 1 A2 00 RPI: LDX #0 ;Check for our command. +000319 1 BD 00 02 NXTCHR: LDA INBUF,X ;Get first character. +00031C 1 09 20 ora #$20 ;Make it lower case +00031E 1 DD DE 03 CMP CMD,X ;Does it match? +000321 1 D0 27 BNE NOTOURS ;No, back to CI. +000323 1 E8 INX ;Next character +000324 1 E0 03 CPX #CMDLEN ;All characters yet? +000326 1 D0 F1 BNE NXTCHR ;No, read next one. +000328 1 ; +000328 1 A9 02 LDA #CMDLEN-1 ;Our cmd! Put cmd length-1 +00032A 1 8D 52 BE STA XLEN ; in CI global XLEN. +00032D 1 A9 BE LDA #>XRETURN ;Point XTRNADDR to a known +00032F 1 8D 50 BE STA XTRNADDR ; RTS since we'll handle +000332 1 A9 9E LDA # Date: Tue, 28 Dec 2021 16:23:27 -0500 Subject: [PATCH 2/4] Initial mostly working RPI command --- Apple2/RPi.Command.asm | 14 +- Apple2/RPi.Command.bin | Bin 227 -> 229 bytes Apple2/RPi.Command.lst | 162 +++++++++++----------- Apple2/assemble.sh | 4 + RaspberryPi/Apple2-IO-RPi.hdv | Bin 33553920 -> 33553920 bytes RaspberryPi/apple2driver/handlers/exec.go | 1 + 6 files changed, 95 insertions(+), 86 deletions(-) diff --git a/Apple2/RPi.Command.asm b/Apple2/RPi.Command.asm index e69d9bf..79d4afe 100644 --- a/Apple2/RPi.Command.asm +++ b/Apple2/RPi.Command.asm @@ -7,7 +7,7 @@ XTRNADDR = $BE50 ;Ext cmd implementation addr. XLEN = $BE52 ;length of command string-1. XCNUM = $BE53 ;CI cmd no. (ext cmd - 0). PBITS = $BE54 ;Command parameter bits. -XRETURN = $BE9E ;Known RTS instruction. +XRETURN = $FF58 ;Known RTS instruction. InputByte = $c0fe OutputByte = $c0fd InputFlags = $c0fb @@ -53,10 +53,13 @@ Wait = $fca8 BNE NXTCHR ;No, read next one. ; LDA #CMDLEN-1 ;Our cmd! Put cmd length-1 + ;lda #$8d + ;sta $02ff + ;lda #$fe STA XLEN ; in CI global XLEN. - LDA #>XRETURN ;Point XTRNADDR to a known + LDA #XRETURN ; at the time we intercept STA XTRNADDR+1 ; our command. LDA #0 ;Mark the cmd number as @@ -105,7 +108,8 @@ skipOutput: clc bcc DumpOutput endOutput: - rts + clc + jmp (NXTCMD) HelpCommand: .byte "a2help",$00 @@ -154,8 +158,6 @@ finishRead: bcc finishRead pla clc ;success -end: - clc rts diff --git a/Apple2/RPi.Command.bin b/Apple2/RPi.Command.bin index 1cb3280e2313091b20d624ba5369289676abde0e..af089fa25b92f3d7911e03ca2441394cccfaa2c4 100644 GIT binary patch delta 158 zcmaFN_>{4JE&IOS$INRv_VqqtUMb$ozHcRSFUP)wMGSixm^c;gK489}{sKsRT*=fM zv~OiZZ@|8l|9b=Xtz_s8-q#zluQznx%3g)HeNa+8Kbf!gl5j>?avMNCGwJFdPtgzm{QQJv+}#kT!`4_auM@Ozih%OZfER HB?AKhC4c?0`Nh7XcJ4LS@51m3S@m{`xwISr&uV#2+IiIaTUB@#Y; Ic*(#30GumCCjbBd diff --git a/Apple2/RPi.Command.lst b/Apple2/RPi.Command.lst index 0857ef0..758c978 100644 --- a/Apple2/RPi.Command.lst +++ b/Apple2/RPi.Command.lst @@ -11,7 +11,7 @@ Current file: RPi.Command.asm 000300 1 XLEN = $BE52 ;length of command string-1. 000300 1 XCNUM = $BE53 ;CI cmd no. (ext cmd - 0). 000300 1 PBITS = $BE54 ;Command parameter bits. -000300 1 XRETURN = $BE9E ;Known RTS instruction. +000300 1 XRETURN = $FF58 ;Known RTS instruction. 000300 1 InputByte = $c0fe 000300 1 OutputByte = $c0fd 000300 1 InputFlags = $c0fb @@ -37,9 +37,9 @@ Current file: RPi.Command.asm 000300 1 ; DISCONNECT ANY PREVIOUSLY CONNECTED COMMAND. 000300 1 ; 000300 1 AD 07 BE LDA EXTRNCMD+1 -000303 1 8D E1 03 STA NXTCMD +000303 1 8D E3 03 STA NXTCMD 000306 1 AD 08 BE LDA EXTRNCMD+2 -000309 1 8D E2 03 STA NXTCMD+1 +000309 1 8D E4 03 STA NXTCMD+1 00030C 1 ; 00030C 1 A9 17 LDA #XRETURN ;Point XTRNADDR to a known +00032D 1 A9 58 LDA #XRETURN ; at the time we intercept 000334 1 000334 1 8D 51 BE STA XTRNADDR+1 ; our command. 000337 1 A9 00 LDA #0 ;Mark the cmd number as @@ -73,27 +76,27 @@ Current file: RPi.Command.asm 000348 1 90 04 bcc SendCommand 00034A 1 ; 00034A 1 38 NOTOURS: SEC ; ALWAYS SET CARRY IF NOT YOUR -00034B 1 6C E1 03 JMP (NXTCMD) ; CMD AND LET NEXT COMMAND TRY +00034B 1 6C E3 03 JMP (NXTCMD) ; CMD AND LET NEXT COMMAND TRY 00034E 1 ; ; TO CLAIM IT. 00034E 1 00034E 1 SendCommand: 00034E 1 2C 10 C0 bit ClearKeyboard 000351 1 A9 05 lda #$05 ;send command 5 = exec -000353 1 20 96 03 jsr SendByte +000353 1 20 99 03 jsr SendByte 000356 1 A0 03 ldy #$03 ;skip over "RPI" 000358 1 getInput: 000358 1 B9 00 02 lda $0200,y 00035B 1 C9 8D cmp #$8d 00035D 1 F0 08 beq sendNullTerminator 00035F 1 29 7F and #$7f -000361 1 20 96 03 jsr SendByte +000361 1 20 99 03 jsr SendByte 000364 1 C8 iny 000365 1 D0 F1 bne getInput 000367 1 sendNullTerminator: 000367 1 A9 00 lda #$00 -000369 1 20 96 03 jsr SendByte +000369 1 20 99 03 jsr SendByte 00036C 1 DumpOutput: -00036C 1 20 B4 03 jsr GetByte +00036C 1 20 B7 03 jsr GetByte 00036F 1 B0 07 bcs skipOutput 000371 1 C9 00 cmp #$00 000373 1 F0 19 beq endOutput @@ -104,76 +107,75 @@ Current file: RPi.Command.asm 00037D 1 AD 00 C0 lda Keyboard ;send keypress to RPi 000380 1 20 ED FD jsr PrintChar 000383 1 29 7F and #$7f -000385 1 20 96 03 jsr SendByte +000385 1 20 99 03 jsr SendByte 000388 1 2C 10 C0 bit ClearKeyboard 00038B 1 18 clc 00038C 1 90 DE bcc DumpOutput 00038E 1 endOutput: -00038E 1 60 rts -00038F 1 -00038F 1 HelpCommand: -00038F 1 61 32 68 65 .byte "a2help",$00 -000393 1 6C 70 00 -000396 1 -000396 1 SendByte: -000396 1 48 pha -000397 1 waitWrite: -000397 1 AD FB C0 lda InputFlags -00039A 1 2A rol -00039B 1 2A rol -00039C 1 B0 F9 bcs waitWrite -00039E 1 68 pla -00039F 1 8D FD C0 sta OutputByte -0003A2 1 A9 1E lda #$1e ; set bit 0 low to indicate write started -0003A4 1 8D F7 C0 sta OutputFlags -0003A7 1 finishWrite: -0003A7 1 AD FB C0 lda InputFlags -0003AA 1 2A rol -0003AB 1 2A rol -0003AC 1 90 F9 bcc finishWrite -0003AE 1 A9 1F lda #$1f -0003B0 1 8D F7 C0 sta OutputFlags -0003B3 1 60 rts -0003B4 1 -0003B4 1 GetByte: -0003B4 1 A9 1D lda #$1d ;set read flag low -0003B6 1 8D F7 C0 sta OutputFlags -0003B9 1 waitRead: -0003B9 1 AD FB C0 lda InputFlags -0003BC 1 2A rol -0003BD 1 90 0C bcc readByte -0003BF 1 2C 00 C0 bit Keyboard ;keypress will abort waiting to read -0003C2 1 10 F5 bpl waitRead -0003C4 1 A9 1F lda #$1f ;set all flags high and exit -0003C6 1 8D F7 C0 sta OutputFlags -0003C9 1 38 sec ;failure -0003CA 1 60 rts -0003CB 1 readByte: -0003CB 1 AD FE C0 lda InputByte -0003CE 1 48 pha -0003CF 1 A9 1F lda #$1f ;set all flags high -0003D1 1 8D F7 C0 sta OutputFlags -0003D4 1 finishRead: -0003D4 1 AD FB C0 lda InputFlags -0003D7 1 2A rol -0003D8 1 90 FA bcc finishRead -0003DA 1 68 pla -0003DB 1 18 clc ;success -0003DC 1 end: -0003DC 1 18 clc -0003DD 1 60 rts -0003DE 1 -0003DE 1 -0003DE 1 ;macro for string with high-bit set -0003DE 1 .macro aschi str -0003DE 1 .repeat .strlen (str), c -0003DE 1 .byte .strat (str, c) | $80 -0003DE 1 .endrep -0003DE 1 .endmacro -0003DE 1 -0003DE 1 F2 F0 E9 CMD: aschi "rpi" -0003E1 1 CMDLEN = 3 ;Our command length -0003E1 1 ; -0003E1 1 00 00 NXTCMD: .byte 0,0 ; STORE THE NEXT EXT CMD'S -0003E3 1 ; ADDRESS HERE. -0003E3 1 +00038E 1 18 clc +00038F 1 6C E3 03 jmp (NXTCMD) +000392 1 +000392 1 HelpCommand: +000392 1 61 32 68 65 .byte "a2help",$00 +000396 1 6C 70 00 +000399 1 +000399 1 SendByte: +000399 1 48 pha +00039A 1 waitWrite: +00039A 1 AD FB C0 lda InputFlags +00039D 1 2A rol +00039E 1 2A rol +00039F 1 B0 F9 bcs waitWrite +0003A1 1 68 pla +0003A2 1 8D FD C0 sta OutputByte +0003A5 1 A9 1E lda #$1e ; set bit 0 low to indicate write started +0003A7 1 8D F7 C0 sta OutputFlags +0003AA 1 finishWrite: +0003AA 1 AD FB C0 lda InputFlags +0003AD 1 2A rol +0003AE 1 2A rol +0003AF 1 90 F9 bcc finishWrite +0003B1 1 A9 1F lda #$1f +0003B3 1 8D F7 C0 sta OutputFlags +0003B6 1 60 rts +0003B7 1 +0003B7 1 GetByte: +0003B7 1 A9 1D lda #$1d ;set read flag low +0003B9 1 8D F7 C0 sta OutputFlags +0003BC 1 waitRead: +0003BC 1 AD FB C0 lda InputFlags +0003BF 1 2A rol +0003C0 1 90 0C bcc readByte +0003C2 1 2C 00 C0 bit Keyboard ;keypress will abort waiting to read +0003C5 1 10 F5 bpl waitRead +0003C7 1 A9 1F lda #$1f ;set all flags high and exit +0003C9 1 8D F7 C0 sta OutputFlags +0003CC 1 38 sec ;failure +0003CD 1 60 rts +0003CE 1 readByte: +0003CE 1 AD FE C0 lda InputByte +0003D1 1 48 pha +0003D2 1 A9 1F lda #$1f ;set all flags high +0003D4 1 8D F7 C0 sta OutputFlags +0003D7 1 finishRead: +0003D7 1 AD FB C0 lda InputFlags +0003DA 1 2A rol +0003DB 1 90 FA bcc finishRead +0003DD 1 68 pla +0003DE 1 18 clc ;success +0003DF 1 60 rts +0003E0 1 +0003E0 1 +0003E0 1 ;macro for string with high-bit set +0003E0 1 .macro aschi str +0003E0 1 .repeat .strlen (str), c +0003E0 1 .byte .strat (str, c) | $80 +0003E0 1 .endrep +0003E0 1 .endmacro +0003E0 1 +0003E0 1 F2 F0 E9 CMD: aschi "rpi" +0003E3 1 CMDLEN = 3 ;Our command length +0003E3 1 ; +0003E3 1 00 00 NXTCMD: .byte 0,0 ; STORE THE NEXT EXT CMD'S +0003E5 1 ; ADDRESS HERE. +0003E5 1 diff --git a/Apple2/assemble.sh b/Apple2/assemble.sh index 41c1f19..296c5e0 100755 --- a/Apple2/assemble.sh +++ b/Apple2/assemble.sh @@ -46,6 +46,9 @@ DriveFirmware.bin CommandFirmware.bin FileAccessFirmware.bin MenuFirmware.bin \ ca65 Shell.asm -o Shell.o --listing Shell.lst || exit 1 ld65 Shell.o -o Shell.bin -C ../.cicd/none.cfg || exit 1 +ca65 RPi.Command.asm -o RPi.Command.o --listing RPi.Command.lst || exit 1 +ld65 RPi.Command.o -o RPi.Command.bin -C ../.cicd/none.cfg || exit 1 + rm ./*.o rm DriveFirmware.bin rm MenuFirmware.bin @@ -54,4 +57,5 @@ rm FileAccessFirmware.bin ProDOS-Utilities -d ../RaspberryPi/Apple2-IO-RPi.hdv -c put -i AT28C64B.bin -p /APPLE2.IO.RPI/AT28C64B.BIN || exit 1 ProDOS-Utilities -d ../RaspberryPi/Apple2-IO-RPi.hdv -c put -i Shell.bin -p /APPLE2.IO.RPI/SHELL || exit 1 +ProDOS-Utilities -d ../RaspberryPi/Apple2-IO-RPi.hdv -c put -i RPi.Command.bin -p /APPLE2.IO.RPI/RPI.COMMAND -a 0x0300 || exit 1 ProDOS-Utilities -d ../RaspberryPi/Apple2-IO-RPi.hdv -c ls diff --git a/RaspberryPi/Apple2-IO-RPi.hdv b/RaspberryPi/Apple2-IO-RPi.hdv index 7b4dd957c1e7d661b0b86e5649961bd2cb0cd64e..570e19d14eadb52a7305f70ab8f9093dcee67b57 100755 GIT binary patch delta 2078 zcmX}od6>;r9LMqBojV&wMp?!ZL$)zUs3e7akg|+5*-1#WiAve)Q{ke9WGhta#z>}Y z; z$P3ahHQ9|4%3huX|4;fQWK=8HF{^c*=Iz_IZPrc!D{)~E3XTN9f7$S*CN8^pa@LB( z5{aQExs_7(SIn-Pk}|O%b5%iRC{$`}PEstA7tTqJMGl9fr6WnPXgHD_>$@me7sM4x z-*+Iqqxw1bS}V=US&k`;>O% z>RQ)X^{o0<1M7P02J1$vp>>nh$hz5TY~5nrYBjN%TFtE6tmc-i7FJ8Em36z-+PcHK z(`sY2wc1(jtt_j9)zRu?b+)=#U9G#UZr0sacdLih)9PjQw)$9ot$tR2>mF->b+0wh z8e|Q&?z4ti_gh1)Vb%lIgVsaV!`36#aO+WPgf-H7%zE5ob|jl$(n3Uu_D$~YnnCPdck_p%C=@$Gp(1bS=P(eY-^4+*P3U| zw_dScwH8n$s4y=^VAmRdR1GV2{{x%IBK!pgPYv);E>TC1$p z)*5TA^?~)Fwa$uJ>#YseMr)Jxk@d0liM84K)Y@WgwYFKGS)W^9SYKM(tsT}^*4Nff zYnSznwcFZbeQSMZeQ*6>?X~t<`>h|X1J*(7kdlf=+>x6aE zI%VZsr>!&AZ`SYDAJ(7NU)JB&S?ip2-nw92wEnRQCMh&kA;ck!cqAYZNk~Q^6h;xG zpeU|DF{Gk6uEbR+fs!bN(nv!Yltnp|$JMBSibzK#RK_)^f~u&7>ZpMX)I=s~p*HH^ zTGYjLsE7J!fa`GsZbU=eghsd-jd2TZMH4hdGu(#exbz<_&=Re1J6huo+=(`5i*{&_ zEObCebV6rzL08;`ZnzuW(E~lv3%$_?ebEp7aSsOIUJS$_490yJg8MNP!|(te#6x%( zk6<_+#R!bVV|W}-U=*IjQy7gg7>jWjj|rHFr|}GoXYm}K$0SU~6htr;(=Z(`;6-F( z24>H_}& delta 1953 zcmX}od6*Ug5XbTNO~;l^mQ_TmtxZ`a3dxbpH=?lGa+BQUCRdK4`XS_4N99aWuB1ie zjNJEqM2---?<>|fkH?^wE|eO=Ge((w&d^Bby)#nzQ&B`pdImUZpjt)gZ~r(P9>P9^34_1$X+ z4j4SR!n2F&%Ssj(gV`vo5*mjlp=oFqN<#C{BCHxpL(8yQXcbluWnqo5W+)G9h1Q`> zSUao}+J<$*dZArdKeP`WLdQ@MI)%=mGIR+Wgs!1m*f3OujY9X(BWxUchE2kzp;zb~ zHVd1FEkd8LW#}8W3R{P5!nUDb*e+Cu{$cw-7!Y;{JBEQ_r?7Jv6b6S~!meSrP!o0! zLqcsB8is{E!k%HTuy@!e>>KtA`-cO<@Ni%l5e^CmheN`l;jnOcI3kP;qr#ElsBm;R zCL9}%3&)2O!iiyYI4PVQP6?-m)54f=dN?DT8O{o0!?zBnGs4VpQ@A=#7_lE`Hf$(5>C_Ee<36F+_;j!>| zSQMTJPll($)8U!$Yhb7^I z@L~8Ud>odBPr|3+v#>0D9=-_6!g(C--jQ&Z<-wZJ@5|rVUl4jnrK|w6S_>6K$$q>aESRxwcRrZK=N6N?U6i zZL5CTPSxtK?X~hB1GIy7)IjZ|oi#{%R!QeCDxU9Ky1rLNKxP1Q7At!s3xuG96p zLDO}kW@x5v(#@Ks*}6ry>Nef3J2XdkYOe0mJk{%N-J^RoU-#*LEzkpcP!H*0J)%do zP><v!oSxSUdQmUwWxb+T^_pJS8+uc3>21BEcePmW>3uEH2l`MS z>0>R`C;C*MX_-FP7h0|_^_9NXH~LoJ>3jX4AN7-d)-U>1zv*}Vp+B`kf9dby92$xX F{sDQ%#V`N> diff --git a/RaspberryPi/apple2driver/handlers/exec.go b/RaspberryPi/apple2driver/handlers/exec.go index 990f26f..b5839eb 100644 --- a/RaspberryPi/apple2driver/handlers/exec.go +++ b/RaspberryPi/apple2driver/handlers/exec.go @@ -31,6 +31,7 @@ func ExecCommand() { if forceLowercase { linuxCommand = strings.ToLower(linuxCommand) } + linuxCommand = strings.Trim(linuxCommand, " ") fmt.Printf("Command to run: %s\n", linuxCommand) if strings.HasPrefix(linuxCommand, "cd ") { workingDirectory = strings.Replace(linuxCommand, "cd ", "", 1) From cc2aa9954ecae0b90da69f97be02c2a68b6166ec Mon Sep 17 00:00:00 2001 From: Terence Boldt Date: Tue, 28 Dec 2021 16:26:59 -0500 Subject: [PATCH 3/4] Set default for RPI command to return help info --- RaspberryPi/apple2driver/handlers/exec.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/RaspberryPi/apple2driver/handlers/exec.go b/RaspberryPi/apple2driver/handlers/exec.go index b5839eb..66c1692 100644 --- a/RaspberryPi/apple2driver/handlers/exec.go +++ b/RaspberryPi/apple2driver/handlers/exec.go @@ -32,6 +32,9 @@ func ExecCommand() { linuxCommand = strings.ToLower(linuxCommand) } linuxCommand = strings.Trim(linuxCommand, " ") + if linuxCommand == "" { + linuxCommand = "a2help" + } fmt.Printf("Command to run: %s\n", linuxCommand) if strings.HasPrefix(linuxCommand, "cd ") { workingDirectory = strings.Replace(linuxCommand, "cd ", "", 1) From 4c36b99282c56baadd84e4f5d07967e90e1ea23a Mon Sep 17 00:00:00 2001 From: Terence Boldt Date: Tue, 28 Dec 2021 16:31:45 -0500 Subject: [PATCH 4/4] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 746050b..939a12b 100644 --- a/README.md +++ b/README.md @@ -16,10 +16,11 @@ So far, this is a project and not a finished product. The current prototype is o 4. Load binary files directly from the RPi to the II 5. Update Apple II firmware in place from image on RPi 6. Supports two drive images at the same time (Note: backward compatible with previous firmware but requires firmware update in order to work with two drives) +7. Supports "RPI" command from BASIC to execute Linux commands from the command prompt or inside BASIC programs: `10 PRINT CHR$(4);"RPI ls -al /"` ## Roadmap 1. Extend BASIC.SYSTEM commands - 1. RPI - Execute a single Linux command + 1. RPI - Execute a single Linux command (DONE) 2. SH - Open a Linux shell 3. WGET - Download and save to file 2. Shell improvements