From 679debded41986e783bd1994642e4a9e55aaee71 Mon Sep 17 00:00:00 2001 From: Terence Boldt Date: Sun, 28 Mar 2021 10:36:12 -0400 Subject: [PATCH] Add command line to firmware --- Apple2/CommandFirmware.asm | 51 ++++++++++- Apple2/CommandFirmware.lst | 137 ++++++++++++++++++---------- Apple2/Firmware_27256_EPROM.bin | Bin 32768 -> 32768 bytes Apple2/Firmware_AT28C64B_EEPROM.bin | Bin 8192 -> 8192 bytes 4 files changed, 137 insertions(+), 51 deletions(-) diff --git a/Apple2/CommandFirmware.asm b/Apple2/CommandFirmware.asm index 7c01136..d5b6c0d 100644 --- a/Apple2/CommandFirmware.asm +++ b/Apple2/CommandFirmware.asm @@ -46,12 +46,50 @@ DriverEntry: sta OutputFlags Start: -; Put command firmware here -; -; -; + lda $33 + pha + lda #$a4 + sta $33 +GetCommand: + jsr $fd6a + lda $0200 + cmp #$8d ;stop when return found + beq ExitApp + jsr DumpOutput + clc + bcc GetCommand +ExitApp: + pla + sta $33 + lda #$00 + sty $34 rts +DumpOutput: + ldx #$50 + lda #$05 ;send command 5 = exec + jsr SendByte + ldy #$00 +getInput: + lda $0200,y + cmp #$8d + beq sendNullTerminator + and #$7f + jsr SendByte + iny + bne getInput +sendNullTerminator: + lda #$00 + jsr SendByte +getOutput: + jsr GetByte + cmp #$00 + beq endOutput + jsr $fded + clc + bcc getOutput +endOutput: + rts SendByte: pha @@ -99,3 +137,8 @@ end: .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 +;Translation of code written in mini-assembler on Apple //e +;Currently only works if card is in slot 5 + + .org $1000 + diff --git a/Apple2/CommandFirmware.lst b/Apple2/CommandFirmware.lst index 3665fe2..410237e 100644 --- a/Apple2/CommandFirmware.lst +++ b/Apple2/CommandFirmware.lst @@ -50,59 +50,102 @@ Current file: CommandFirmware.asm 00C516 1 8D D7 C0 sta OutputFlags 00C519 1 00C519 1 Start: -00C519 1 ; Put command firmware here -00C519 1 ; -00C519 1 ; -00C519 1 ; -00C519 1 60 rts -00C51A 1 -00C51A 1 -00C51A 1 SendByte: -00C51A 1 48 pha -00C51B 1 waitWrite: -00C51B 1 AD DB C0 lda InputFlags -00C51E 1 2A rol -00C51F 1 2A rol -00C520 1 B0 F9 bcs waitWrite -00C522 1 68 pla -00C523 1 8D DD C0 sta OutputByte -00C526 1 A9 0E lda #$0e ; set bit 0 low to indicate write started -00C528 1 8D D7 C0 sta OutputFlags -00C52B 1 finishWrite: -00C52B 1 AD DB C0 lda InputFlags -00C52E 1 2A rol -00C52F 1 2A rol -00C530 1 90 F9 bcc finishWrite -00C532 1 A9 0F lda #$0f -00C534 1 8D D7 C0 sta OutputFlags +00C519 1 A5 33 lda $33 +00C51B 1 48 pha +00C51C 1 A9 A4 lda #$a4 +00C51E 1 85 33 sta $33 +00C520 1 GetCommand: +00C520 1 20 6A FD jsr $fd6a +00C523 1 AD 00 02 lda $0200 +00C526 1 C9 8D cmp #$8d ;stop when return found +00C528 1 F0 06 beq ExitApp +00C52A 1 20 38 C5 jsr DumpOutput +00C52D 1 18 clc +00C52E 1 90 F0 bcc GetCommand +00C530 1 ExitApp: +00C530 1 68 pla +00C531 1 85 33 sta $33 +00C533 1 A9 00 lda #$00 +00C535 1 84 34 sty $34 00C537 1 60 rts 00C538 1 -00C538 1 GetByte: -00C538 1 A9 0D lda #$0d ;set read flag low -00C53A 1 8D D7 C0 sta OutputFlags -00C53D 1 waitRead: -00C53D 1 AD DB C0 lda InputFlags -00C540 1 2A rol -00C541 1 B0 FA bcs waitRead -00C543 1 AD DE C0 lda InputByte -00C546 1 48 pha -00C547 1 A9 0F lda #$0f ;set all flags high -00C549 1 8D D7 C0 sta OutputFlags -00C54C 1 finishRead: -00C54C 1 AD DB C0 lda InputFlags -00C54F 1 2A rol -00C550 1 90 FA bcc finishRead -00C552 1 68 pla -00C553 1 end: -00C553 1 60 rts -00C554 1 -00C554 1 00 00 00 00 .repeat 251-z`D#&A~$#J-nl>w4@u+-fYu0tr9S(2ahXhpq2g!wpY;ww>`*~ zcnVUKQXIojwzQ`pMVt6Ad% zgI^smMpvI+99SJ%+_XBj*L7lpJT^I75!Reh~f}#~o>ZV(r{{?e4Kw%QCmZ zcgfo`clmc*H=mI`*Y341SVwp#4w$)jtX@g|c=Fj5;UALzS@7F%AiUOW-Ea5cw^_$l z{Wkh-^xNpS(Qj|~?XEvQ&cJbo9EW~e_%BNT=jflc+Sum)SquH52mD`fzi9U0XVO0h zeh2*UT61*2(}Uk(9Y^&$=y%ZXpx;5iv*CBT{`fcp#~E@Q`W@lFBK>Xj&slA3bN?Lo ziyrV_<$lrZ!9Ohh^Wb;E53e;>_q#p#UDk0`zl(ks{Vw`l^t&5=x9g9OGjNAwa30Q~S;3v_?bgFj%MK=lXc56~Z=KR|!5;Sak0_&5W{8FC!@1L6No`fsEEmes~K z_ut}v(F6Y9xnDGU@J~zs8u&x-!)q;_3 zap(_)|8MDENB^4D#y0n_alhyR|G(TXnmzcH{I81qH%5+_Up7bBd+Y7Wrp4Ck6Kt=w zeP;DobHuEC{8Ih$g!wp|ghcknB+u8G zmj6|e|0#Z3^FyL5eu!x9w^_rE`7g?oR!nH;qoy7e`IY>yiu_OUJDML7UGYOibHBqH zPRxHr`ilweR7t+h$gkvoRpft)-_`t(=!zdAn)_YWaAW=((qBwy=cA?`75SC?uZsLn z@q3yd5?%2_M03B#8eYtgA&tMZ7Zcj4l6;+!U&;Tf$o~|-ulfC$A0nFjeb(?}{+rTY zOlaq$rXCgfmHe-Y{7>-*njaEfIsXvR+#j$;5c3xs+NqL!osnP3|EkFU6o07sA<-2- zL^St@tP#fi7}9wC7Zcj~sHsOqem(!o9NVduJe`q$NdEpeYmLkN2Y+c}I}bJWn8>f^ zKln=<+o_g3osnP9fAE(!w)0R^kBR(x{)4}?v7Ktk(;4~o{0Dz&V>=Hu^_a-7=Rf#M z8{4UtJe`qW&wucjHn#InQ;&)Kdj6ZM&6myf<}2)-f8dv#QEPQ@%SZ4B{ld~6_T2j3 zU#~v}A6vGKZ?*PMPoJ2o?RxEvU2jetZ@niYKQ~h79|HkY3RR5>?Kh^)C z9>OOroad7k&hu$}FlpfepR^#F*^?FuybJJvzyDL}KUDuu&i|nLzgqvJ`ajkGasCt4 z|Ec~@_5T86`jLI92joB0f2jU1rmd82+FoJTLv;T2`~PtMss3NmX?w+=fBpVHoPVnS zi}PR1T>HXKT7h3EdjIS9|Ec~@^?zml1J(aC=6_KAzaQqmQ2k%5e_n?9zheG>qW(+u z|BUxP)&Kk9{ZI9O@&1RpKdt|V`44k2|AE&3Yx`f&`u~T|f1vgMwEkb6{}5l-PwW3_ z{r~^mwC7RW{~6NO|55#4+y8;q|0m}^(E5LM{sXQ5r}h6h|AE&3)B67cL;4YZsi^*= z=Rei|Y5l+4wxe|0_7wJxh^~MA{y$v*wEkbzze~4mPx0r!-rfIC?*9YlpVt42^Iy7c zdx}5*%Kd-2|6ij1MeF}F>R+_}zaQ#f!}90fJk)>1{(p(rHGzaOrDJ^vHe zKdt}Ixc+JVKkfe?d;S6K|4;k>tM$+LzW%iTKh{5K|9|=X6Waejdj3m%o&fFtPy7GZ z3%k#e^@XDQpZfiOs{d2{Kk@tv+W$W}|AF@ZSLZ*_{{OW9KhA%k{r|J_wru?m$bYK; zQ~jUn|K)saPhmesqWAxVtp9Y^|H1p8*8kJ`|584-r}*oi>i^ODKl%KhME#4_|7X;{ yX#Iab)PMKM{DbHI%IE(ju7BG9KjZqR{r~&n`k$89{~BEX;`x7x>%U+3|NjqFCyUYK?JjS_ zL-|U+_G>(RYTEaDlanTamKA9pKimHD_ocYc9^>0=7Y{-x^HAoX3{eJ@{i9iNfa+0D z<(|qNm7~gma$Aj1Jr1hEQ-z}nR0U9Bt1VPdf~xdX>8KJ_2~^tZA*!cARe7p%RE4Sn ss%*85>RC|Lo~j*HqpE>wTkW8F9#oB|8b>v#8lc8jyLcM