From 786617fb0334f0b88ab939561ba8fd5e2a5d33ae Mon Sep 17 00:00:00 2001 From: Terence Boldt Date: Sat, 27 Mar 2021 10:25:42 -0400 Subject: [PATCH 1/9] Update firmware to add menu --- Apple2/DriveFirmware.asm | 41 +++--- Apple2/DriveFirmware.lst | 195 ++++++++++++++++++++++++++++ Apple2/Firmware_27256_EPROM.bin | Bin 32768 -> 32768 bytes Apple2/Firmware_AT28C64B_EEPROM.bin | Bin 0 -> 8192 bytes Apple2/MenuFirmware.asm | 87 +++++++++++++ Apple2/MenuFirmware.lst | 101 ++++++++++++++ Apple2/assemble.sh | 47 ++++--- 7 files changed, 438 insertions(+), 33 deletions(-) create mode 100644 Apple2/DriveFirmware.lst create mode 100644 Apple2/Firmware_AT28C64B_EEPROM.bin create mode 100644 Apple2/MenuFirmware.asm create mode 100644 Apple2/MenuFirmware.lst diff --git a/Apple2/DriveFirmware.asm b/Apple2/DriveFirmware.asm index 873c8f8..1fd0892 100644 --- a/Apple2/DriveFirmware.asm +++ b/Apple2/DriveFirmware.asm @@ -15,34 +15,42 @@ InputByte = $c08e OutputByte = $c08d InputFlags = $c08b OutputFlags = $c087 + ReadBlockCommand = $01 WriteBlockCommand = $02 GetTimeCommand = $03 -NibbleStorage = $1d +ChangeDriveCommand = $04 +ExecCommand = $05 +LoadFileCommand = $06 +SaveFileCommand = $07 - .org STARTSLOT + .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 ; - cpx #$3C ;this one for older II's + + ldx #SLOT*$10 + stx $2b + stx Unit + +;force EPROM to second page on boot + lda #$1f ;set all flags high and page 1 of EPROM +PageJump: + sta OutputFlags,x + jmp Start ;this jump is only called if coming in from PageJump with A=$0f + +;entry points for ProDOS +DriverEntry: + lda #$0f ;set all flags high and page 0 of EPROM + sta OutputFlags,x + jmp Driver ;load first two blocks and execute to boot -Boot: +Start: lda #$01 ;set read command sta Command - jsr $ff58 - tsx - lda $0100,x - asl - asl - asl - asl - sta $2b - sta Unit - tax - lda #$00 ;block 0 sta BlockLo sta BlockHi @@ -53,7 +61,6 @@ Boot: jmp $801 ;execute the block -;; ; ProDOS Driver code ; First check that this is the right drive Driver: @@ -177,5 +184,5 @@ end: .endrepeat .byte 0,0 ;0000 blocks = check status .byte 7 ;bit set(0=status 1=read 2=write) unset(3=format, 4/5=number of volumes, 6=interruptable, 7=removable) -.byte Driver&$00FF ;low byte of entry +.byte DriverEntry&$00FF ;low byte of entry diff --git a/Apple2/DriveFirmware.lst b/Apple2/DriveFirmware.lst new file mode 100644 index 0000000..471f8b1 --- /dev/null +++ b/Apple2/DriveFirmware.lst @@ -0,0 +1,195 @@ +ca65 V2.18 - N/A +Main file : DriveFirmware.asm +Current file: DriveFirmware.asm + +000000r 1 ;ProDOS Zero Page +000000r 1 Command = $42 ;ProDOS Command +000000r 1 Unit = $43 ;ProDOS unit (SDDD0000) +000000r 1 BufferLo = $44 +000000r 1 BufferHi = $45 +000000r 1 BlockLo = $46 +000000r 1 BlockHi = $47 +000000r 1 +000000r 1 ; ProDOS Error Codes +000000r 1 IOError = $27 +000000r 1 NoDevice = $28 +000000r 1 WriteProtect = $2B +000000r 1 +000000r 1 InputByte = $c08e +000000r 1 OutputByte = $c08d +000000r 1 InputFlags = $c08b +000000r 1 OutputFlags = $c087 +000000r 1 +000000r 1 ReadBlockCommand = $01 +000000r 1 WriteBlockCommand = $02 +000000r 1 GetTimeCommand = $03 +000000r 1 ChangeDriveCommand = $04 +000000r 1 ExecCommand = $05 +000000r 1 LoadFileCommand = $06 +000000r 1 SaveFileCommand = $07 +000000r 1 +000000r 1 .org SLOT*$100 + $C000 +00C500 1 ;ID bytes for booting and drive detection +00C500 1 E0 20 cpx #$20 ;ID bytes for ProDOS and the +00C502 1 E0 00 cpx #$00 ; Apple Autostart ROM +00C504 1 E0 03 cpx #$03 ; +00C506 1 +00C506 1 A2 50 ldx #SLOT*$10 +00C508 1 86 2B stx $2b +00C50A 1 86 43 stx Unit +00C50C 1 +00C50C 1 ;force EPROM to second page on boot +00C50C 1 A9 1F lda #$1f ;set all flags high and page 1 of EPROM +00C50E 1 PageJump: +00C50E 1 9D 87 C0 sta OutputFlags,x +00C511 1 4C 1C C5 jmp Start ;this jump is only called if coming in from PageJump with A=$0f +00C514 1 +00C514 1 ;entry points for ProDOS +00C514 1 DriverEntry: +00C514 1 A9 0F lda #$0f ;set all flags high and page 0 of EPROM +00C516 1 9D 87 C0 sta OutputFlags,x +00C519 1 4C 32 C5 jmp Driver +00C51C 1 +00C51C 1 ;load first two blocks and execute to boot +00C51C 1 Start: +00C51C 1 A9 01 lda #$01 ;set read command +00C51E 1 85 42 sta Command +00C520 1 +00C520 1 A9 00 lda #$00 ;block 0 +00C522 1 85 46 sta BlockLo +00C524 1 85 47 sta BlockHi +00C526 1 85 44 sta BufferLo ;buffer at $800 +00C528 1 A9 08 lda #$08 +00C52A 1 85 45 sta BufferHi +00C52C 1 20 32 C5 jsr Driver ;get the block +00C52F 1 +00C52F 1 4C 01 08 jmp $801 ;execute the block +00C532 1 +00C532 1 ; ProDOS Driver code +00C532 1 ; First check that this is the right drive +00C532 1 Driver: +00C532 1 A6 43 ldx Unit +00C534 1 A5 42 lda Command; Check which command is being requested +00C536 1 F0 0C beq GetStatus ;0 = Status command +00C538 1 C9 01 cmp #ReadBlockCommand +00C53A 1 F0 10 beq ReadBlock +00C53C 1 C9 02 cmp #WriteBlockCommand +00C53E 1 F0 46 beq WriteBlock +00C540 1 38 sec ;set carry as we don't support any other commands +00C541 1 A9 53 lda #$53 ;Invalid parameter error +00C543 1 60 rts +00C544 1 +00C544 1 ; ProDOS Status Command Handler +00C544 1 GetStatus: +00C544 1 A2 FF ldx #$ff ;low byte number of blocks +00C546 1 A0 FF ldy #$ff ;high byte number of blocks +00C548 1 A9 00 lda #$0 ;zero accumulator and clear carry for success +00C54A 1 18 clc +00C54B 1 60 rts +00C54C 1 +00C54C 1 ; ProDOS Read Block Command +00C54C 1 ReadBlock: +00C54C 1 A0 00 ldy #$00 ;Get the current time on each block read for now +00C54E 1 A9 03 lda #GetTimeCommand +00C550 1 20 AE C5 jsr SendByte +00C553 1 getTimeByte: +00C553 1 20 CC C5 jsr GetByte +00C556 1 99 90 BF sta $bf90,y +00C559 1 C8 iny +00C55A 1 C0 04 cpy #$04 +00C55C 1 D0 F5 bne getTimeByte +00C55E 1 A9 01 lda #ReadBlockCommand ;read the block after setting the clock +00C560 1 20 AE C5 jsr SendByte +00C563 1 A5 46 lda BlockLo +00C565 1 20 AE C5 jsr SendByte +00C568 1 A5 47 lda BlockHi +00C56A 1 20 AE C5 jsr SendByte +00C56D 1 A0 00 ldy #$0 +00C56F 1 20 7D C5 jsr read256 +00C572 1 E6 45 inc BufferHi +00C574 1 20 7D C5 jsr read256 +00C577 1 C6 45 dec BufferHi +00C579 1 A9 00 lda #$0 ;zero accumulator and clear carry for success +00C57B 1 18 clc +00C57C 1 60 rts +00C57D 1 +00C57D 1 read256: +00C57D 1 20 CC C5 jsr GetByte +00C580 1 91 44 sta (BufferLo),y +00C582 1 C8 iny +00C583 1 D0 F8 bne read256 +00C585 1 60 rts +00C586 1 +00C586 1 ; ProDOS Write Block Command +00C586 1 WriteBlock: +00C586 1 A9 02 lda #WriteBlockCommand +00C588 1 20 AE C5 jsr SendByte +00C58B 1 A5 46 lda BlockLo +00C58D 1 20 AE C5 jsr SendByte +00C590 1 A5 47 lda BlockHi +00C592 1 20 AE C5 jsr SendByte +00C595 1 A0 00 ldy #$0 +00C597 1 20 A5 C5 jsr write256 +00C59A 1 E6 45 inc BufferHi +00C59C 1 20 A5 C5 jsr write256 +00C59F 1 C6 45 dec BufferHi +00C5A1 1 A9 00 lda #$0 ;zero accumulator and clear carry for success +00C5A3 1 18 clc +00C5A4 1 60 rts +00C5A5 1 +00C5A5 1 write256: +00C5A5 1 B1 44 lda (BufferLo),y +00C5A7 1 20 AE C5 jsr SendByte +00C5AA 1 C8 iny +00C5AB 1 D0 F8 bne write256 +00C5AD 1 60 rts +00C5AE 1 +00C5AE 1 SendByte: +00C5AE 1 48 pha +00C5AF 1 waitWrite: +00C5AF 1 BD 8B C0 lda InputFlags,x +00C5B2 1 2A rol +00C5B3 1 2A rol +00C5B4 1 B0 F9 bcs waitWrite +00C5B6 1 68 pla +00C5B7 1 9D 8D C0 sta OutputByte,x +00C5BA 1 A9 0E lda #$0e ; set bit 0 low to indicate write started +00C5BC 1 9D 87 C0 sta OutputFlags,x +00C5BF 1 finishWrite: +00C5BF 1 BD 8B C0 lda InputFlags,x +00C5C2 1 2A rol +00C5C3 1 2A rol +00C5C4 1 90 F9 bcc finishWrite +00C5C6 1 A9 0F lda #$0f +00C5C8 1 9D 87 C0 sta OutputFlags,x +00C5CB 1 60 rts +00C5CC 1 +00C5CC 1 GetByte: +00C5CC 1 A9 0D lda #$0d ;set read flag low +00C5CE 1 9D 87 C0 sta OutputFlags,x +00C5D1 1 waitRead: +00C5D1 1 BD 8B C0 lda InputFlags,x +00C5D4 1 2A rol +00C5D5 1 B0 FA bcs waitRead +00C5D7 1 BD 8E C0 lda InputByte,x +00C5DA 1 48 pha +00C5DB 1 A9 0F lda #$0f ;set all flags high +00C5DD 1 9D 87 C0 sta OutputFlags,x +00C5E0 1 finishRead: +00C5E0 1 BD 8B C0 lda InputFlags,x +00C5E3 1 2A rol +00C5E4 1 90 FA bcc finishRead +00C5E6 1 68 pla +00C5E7 1 end: +00C5E7 1 60 rts +00C5E8 1 +00C5E8 1 00 00 00 00 .repeat 251->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 literal 32768 zcmeI5J!=#}9Ea}`!63esmRm%6tVsz+oXuEG+^VA;PALtq|Pz-E{c~ zS6QbKOq#gAFgG_N$X+?ZbH$Ro{8KzdZl0O{%gmD5Xtp|gnU1HM$(!5n=cDn1{xy9* z-8xN2)7|ObbUR&}?j#%8tMS^`t&`2GhZp0krxz<%yD!q$lP|Z&x9RBFCZ}1_ zWuFg!blJVjU+K7if3mB`UjH~AC2zBzJN={C(I51YpSHWp-;;FZ?>M74W8=PU_rF%$ z{`vcCef{kE;OIk^K0bPv-Mv4&PM`EYPtr&Ble3%ikJbFT`JnzYu>h=Pwrg zVVqH%v2o%rV&E^A;4hP|^!ZEim*OwQUy8q+^Op<$FwQ8>*f{Z*G4NMQ@K;G!`TUjm zEAdz2uf$)?`Ktwg7-tk`Y@GP382IZY`0J#reg0bfwfJlC*W$0|{PluAj5CTeHctF? z4E)U!{7up|K7S+rM*NNV8}T=D{${}+#u>#K8z=rI2L5&l{x<1apT8AY|Bv;O=4|KYmM`mgUl)_=SIVf}aeKh}TW6IlP{KkWbS zz9-~=?EfP;|6%_>?7!^)+5h|g8?Ni@|Jna@{?GZp-T!d@@Ag08IRWSY@_)|%o&R(G zAA$dK{y*&hpJy+@?Yxztp8H~=lnP96EM{O_x?xyzwi>uRkNSV=|9$@p z>-wqxm;c$iKKlRY|8xEq<_YNk)A=9$f6o7^82X>+{~Pun`v2(v^Zh5>*VF$m|DpcR zo_|sQ=lqBIzdrx#<^<6HFaM+e-}xW?{}G)3(f>c}zx4mp|L^;6xUSRxFaM?g-}*28 z|IUBIK0)gLnF9QFg{%_d-sQ;t>&-Xv-|NOds`v2v>%>T3g%lu#Gzs&#b zzbD+BVDkU+fAas%|H=PH;Q!439rl0b|1$sI_y2HRXa2wZm-+wJf0_U9{FnLvz5lv< z0+|0V|7HHa^IzuwN8rEQ|1<2r-2cPpJ)U$bY&2$NDe#|2Y2*`vjT)FaKly zzwN(uKj!~4|KIn&u&$5%zx-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 -rm Slot*.o -rm DriveFirmware.bin +cat \ +DriveFirmware.bin MenuFirmware.bin DriveFirmware.bin DriveFirmware.bin \ +> Firmware_AT28C64B_EEPROM.bin ca65 Rpi.Command.asm -o Rpi.Command.o ld65 Rpi.Command.o -o Rpi.Command.bin -t none -rm Rpi.Command.o + +rm *.o +rm DriveFirmware.bin +rm MenuFirmware.bin From 82d86548c313a4aeed9d906c9a3305bd659c3880 Mon Sep 17 00:00:00 2001 From: Terence Boldt Date: Sat, 27 Mar 2021 11:07:36 -0400 Subject: [PATCH 2/9] 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 From 489927193e9d0d84170dbf2c7bcb31fbd2b5aa33 Mon Sep 17 00:00:00 2001 From: Terence Boldt Date: Sat, 27 Mar 2021 11:36:40 -0400 Subject: [PATCH 3/9] Fix order of pages in EEPROM --- Apple2/CommandFirmware.lst | 2 +- Apple2/DriveFirmware.lst | 2 +- Apple2/FileAccessFirmware.lst | 2 +- Apple2/Firmware_AT28C64B_EEPROM.bin | Bin 8192 -> 8192 bytes Apple2/MenuFirmware.lst | 2 +- Apple2/assemble.sh | 2 +- 6 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Apple2/CommandFirmware.lst b/Apple2/CommandFirmware.lst index 41b9cbe..4968b9c 100644 --- a/Apple2/CommandFirmware.lst +++ b/Apple2/CommandFirmware.lst @@ -1,4 +1,4 @@ -ca65 V2.18 - N/A +ca65 V2.19 - Git 59c58ac Main file : CommandFirmware.asm Current file: CommandFirmware.asm diff --git a/Apple2/DriveFirmware.lst b/Apple2/DriveFirmware.lst index f3d6851..f1635c1 100644 --- a/Apple2/DriveFirmware.lst +++ b/Apple2/DriveFirmware.lst @@ -1,4 +1,4 @@ -ca65 V2.18 - N/A +ca65 V2.19 - Git 59c58ac Main file : DriveFirmware.asm Current file: DriveFirmware.asm diff --git a/Apple2/FileAccessFirmware.lst b/Apple2/FileAccessFirmware.lst index 22c7b1b..fe3cc0f 100644 --- a/Apple2/FileAccessFirmware.lst +++ b/Apple2/FileAccessFirmware.lst @@ -1,4 +1,4 @@ -ca65 V2.18 - N/A +ca65 V2.19 - Git 59c58ac Main file : FileAccessFirmware.asm Current file: FileAccessFirmware.asm diff --git a/Apple2/Firmware_AT28C64B_EEPROM.bin b/Apple2/Firmware_AT28C64B_EEPROM.bin index 6e1e46f5731edf569e411d38c0cfe177534cd26f..5b51c04e804811210832efa3c578309cf66e2a88 100644 GIT binary patch delta 325 zcmY+;xedZV07OxFee7~NK|&VIxCAOf&WH%C4JZMTSe6J#m(wLs0ws{G_!&bm!GF;- zbyN41YrC~?+=eZEbSvK_(j(ePkLgr;LTA!bI+vc&h4h@Z(&fTd;aKjrL2k4Wy`cN> w|0cn&_yN~f2EXBFT;HYm9UpLgnc)xoh3nfKf8uXkUl;g*fAHV?Q?$l?0qvB4j{pDw delta 23 fcmZp0XmHpd$+1~d;yL>y0ilgTzu7nPer5*%VqyqY diff --git a/Apple2/MenuFirmware.lst b/Apple2/MenuFirmware.lst index 08d4405..e8a80f2 100644 --- a/Apple2/MenuFirmware.lst +++ b/Apple2/MenuFirmware.lst @@ -1,4 +1,4 @@ -ca65 V2.18 - N/A +ca65 V2.19 - Git 59c58ac Main file : MenuFirmware.asm Current file: MenuFirmware.asm diff --git a/Apple2/assemble.sh b/Apple2/assemble.sh index a16a46b..48e8715 100755 --- a/Apple2/assemble.sh +++ b/Apple2/assemble.sh @@ -46,7 +46,7 @@ DriveFirmware.bin CommandFirmware.bin FileAccessFirmware.bin MenuFirmware.bin \ DriveFirmware.bin CommandFirmware.bin FileAccessFirmware.bin MenuFirmware.bin \ > Firmware_27256_EPROM.bin cat \ -DriveFirmware.bin MenuFirmware.bin DriveFirmware.bin DriveFirmware.bin \ +DriveFirmware.bin CommandFirmware.bin FileAccessFirmware.bin MenuFirmware.bin \ > Firmware_AT28C64B_EEPROM.bin ca65 Rpi.Command.asm -o Rpi.Command.o From 0a89c6aab6478cda1423112d1a3831037951dcd2 Mon Sep 17 00:00:00 2001 From: Terence Boldt Date: Sun, 28 Mar 2021 08:12:58 -0400 Subject: [PATCH 4/9] Update firmware address page and menu --- Apple2/CommandFirmware.asm | 2 +- Apple2/CommandFirmware.lst | 2 +- Apple2/Firmware_27256_EPROM.bin | Bin 32768 -> 32768 bytes Apple2/Firmware_AT28C64B_EEPROM.bin | Bin 8192 -> 8192 bytes Apple2/MenuFirmware.asm | 8 ++++-- Apple2/MenuFirmware.lst | 42 ++++++++++++++++------------ 6 files changed, 31 insertions(+), 23 deletions(-) diff --git a/Apple2/CommandFirmware.asm b/Apple2/CommandFirmware.asm index 50fe54a..0c85463 100644 --- a/Apple2/CommandFirmware.asm +++ b/Apple2/CommandFirmware.asm @@ -35,7 +35,7 @@ SaveFileCommand = $07 stx Unit ;force EPROM to second page on boot - lda #$1f ;set all flags high and page 3 of EPROM for menu + lda #$3f ;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 diff --git a/Apple2/CommandFirmware.lst b/Apple2/CommandFirmware.lst index 4968b9c..9c89bfb 100644 --- a/Apple2/CommandFirmware.lst +++ b/Apple2/CommandFirmware.lst @@ -39,7 +39,7 @@ Current file: CommandFirmware.asm 00C50A 1 86 43 stx Unit 00C50C 1 00C50C 1 ;force EPROM to second page on boot -00C50C 1 A9 1F lda #$1f ;set all flags high and page 3 of EPROM for menu +00C50C 1 A9 3F lda #$3f ;set all flags high and page 3 of EPROM for menu 00C50E 1 PageJump: 00C50E 1 8D D7 C0 sta OutputFlags 00C511 1 4C 19 C5 jmp Start ;this jump is only called if coming in from PageJump with A=$2f diff --git a/Apple2/Firmware_27256_EPROM.bin b/Apple2/Firmware_27256_EPROM.bin index 3bfa412aaa95d01f1d7c3ebf81b90411aa425e92..0bb6f188322e7c93ebaa1f39b86918ae2df10275 100644 GIT binary patch literal 32768 zcmeI5PiP!f9LG1UU@F??;K4-?@2Hi8bi9;aZ1b-$CY%UfiwxWSHVl#gRI0; zkWvYSF$`r(dkRw2`9CRLCAS(s-|O{qgc+qwrE?xnLX?H%-wnzgYZk&3tD4Poodo`UJk5 zg_q@m_}Khq9A5l!`~iskd~9v~LB%-qWSow1I>p@{gSRoRRR7dGe*D(M^R=339EIOf zwih4D-?(DDKs~n})ju;!vJ(RqADyohI(|L-;-=ysApRxbx8Miis#$SSIrdsg7{Z} z-v)lTYIdC8PQh=Bh8^X%k>5ss8~JVIx10QSi@!Zi$2gthkl$APH;BKE{3~W1+me4p z@~a-;zbW}uGX?)J@vj2E1N?B+oH)Oeg5MDhC(7?2zk~b^@;k`yH2Iwte|wycaXQ5z zzoYo?5dSyGziQU8E%{d^zv==0ZzaEKrr%NyU6b% zzl;2ClizLex5w!ir&ApAyNdrF@qdr}fmz44H+>AB)@8=;GZP^4dC~HAFi4g z=l4?Zd!pe*`90+Kkl#ao5Ba?&zt`e#kJB+ur#R&I6#tLJ{}b|Wn00JR{td~mdVv3D z$*-Cz_$$P}1^hnn!&UR+{C*04Uo`wEzmNPr^83i|BfsC|_gnn!aXQB76o>r2;{T2K z?<4<~S;w~I-;(^Q2l#)N{HmFPf1dbvfIk3!xN1S1KS;qJh(-|Q50F1V{s8#{#I$e%75Ke?ElG2L& zy^-3E<7eF&@<;T)sPw-ir4{*mBehwhb{s$CXZ=_EA4_JL^&g&pS4`IbJM^f{`rnJC zcE|ZA>&|fgWBph2AFTUX|KDsGPuW7^D@F2XL5bsw%s?JVT#oI$-WNzl%rCRL-em8fi zrVWXS>6xlHGc{Gcc(L}zkQkl2aN)z*bD}&wTdfr;`#U3q_x}Lx|Fra<_^l*`jia);oCw@1H-^~?&T>pvROXBx(#UEe)6ThFt z@8^ntzP0~P>wn@8lK6vM@kiGG?Ek~_A3O)J{~!0i*#F=A{0sa4?Egpo-*#W0{eSlV z+5g|)Rethl|FQmO|NjQGr67hO=Dq(Bb?S-~VU*XZ=_6Kl}ge|95}XK6w(#@SSk}i|_yQ`M=&Cwa@UcoIG^+ z_mAxV)A@h$KiL0IIRC)@f1b{Nu>Y^le?i_Ko&Tr%pZ))Y`=9;)Jl+57|8xF7);|E> zpY#9a`G3y;=luUz{SVIn-~0Rr=l^s5fAsuEdtN{1|0nN8?EgFA{s-^>tLMKJSpRYU zKi2=@{QrC8e{=pn_#YeHmfG3>$t}f*;rz$@|7!l*f%%W~|FQlb*Z;Xn^WQZrwY1c2 zsl60;p!3W`8pPc`nC;#&_J^!)) zU#9whH2-n_f5QFG`Tu#k|0C!BIRBsX|GEA@)PG?ApZ)(QKL3R4|L=YNf$RTs{r~;n z$$q*K!~Jje|Jnb?^PjEyf4u+C`~STE&-?!eb^o9JfA;^?{Kxfw;QR;I|LO9h_MYwm z{eS+c@cDm|{ErPd|HYsGgP;G$`Tv~%&-MRLvHzdo|FQp{C;yNAf3^SB(tq~<<@qPB M|DQ1b<)r@qzup6sVE_OC literal 32768 zcmeI5PiP!<6vsEMXe-+0(1VM@&bdOU>!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 diff --git a/Apple2/Firmware_AT28C64B_EEPROM.bin b/Apple2/Firmware_AT28C64B_EEPROM.bin index 5b51c04e804811210832efa3c578309cf66e2a88..bf76fd34fb9364108e612cb0b1de730aa8bfd3f9 100644 GIT binary patch delta 762 zcmZp0XmHrT%dwbO0E{Q|3h?+TMEqI6u+!?m2M*2#g|~lCT==XY{nz58~3UklCw|tZ8ImWS|Qq3>89Bi&FEFQx&}Q6rA#NQc8MzCtFFVGcrt0 zl*pg_Pe2-G_(5ETA0*pwLAc?Ea2bAxY{P}%h9Aad_+hdQ7ls>t1ef7Q$TnOAZun7L hh94!{a8bD7$8Z^bjBLZj;D#T^W%zM24QFB(0RUS(2oC@N delta 534 zcmZ|Gy$-=p0L5|j*%s|$Acl4`*~R1mJb;nOYjiUiq=Us^6B{u!wtiou%_E3GA~9G{ z=icPTUG5qFXZkq6=y}%~07j6@oO+;Iw_6nQAUb#(WHWh7| S+7~Q=eQ`@ Date: Sun, 28 Mar 2021 10:25:30 -0400 Subject: [PATCH 5/9] Define load and save commands --- RaspberryPi/Driver.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/RaspberryPi/Driver.go b/RaspberryPi/Driver.go index 3b262c1..200b7d6 100644 --- a/RaspberryPi/Driver.go +++ b/RaspberryPi/Driver.go @@ -45,6 +45,8 @@ const WriteBlockCommand = 2 const GetTimeCommand = 3 const ChangeDriveCommand = 4 const ExecCommand = 5 +const LoadFileCommand = 6 +const SaveFileCommand = 7 var debug bool = false From ed62dd961e6eac872db304af015d06a803c82962 Mon Sep 17 00:00:00 2001 From: Terence Boldt Date: Sun, 28 Mar 2021 10:27:53 -0400 Subject: [PATCH 6/9] Fix firmware so menu works called by PR# --- Apple2/CommandFirmware.asm | 2 +- Apple2/CommandFirmware.lst | 88 +++++++++++++------------- Apple2/DriveFirmware.lst | 2 +- Apple2/FileAccessFirmware.asm | 2 +- Apple2/FileAccessFirmware.lst | 86 ++++++++++++------------- Apple2/Firmware_27256_EPROM.bin | Bin 32768 -> 32768 bytes Apple2/Firmware_AT28C64B_EEPROM.bin | Bin 8192 -> 8192 bytes Apple2/MenuFirmware.asm | 6 +- Apple2/MenuFirmware.lst | 94 +++++++++++++++------------- 9 files changed, 144 insertions(+), 136 deletions(-) diff --git a/Apple2/CommandFirmware.asm b/Apple2/CommandFirmware.asm index 0c85463..7c01136 100644 --- a/Apple2/CommandFirmware.asm +++ b/Apple2/CommandFirmware.asm @@ -46,11 +46,11 @@ DriverEntry: sta OutputFlags Start: - ; Put command firmware here ; ; ; + rts SendByte: diff --git a/Apple2/CommandFirmware.lst b/Apple2/CommandFirmware.lst index 9c89bfb..3665fe2 100644 --- a/Apple2/CommandFirmware.lst +++ b/Apple2/CommandFirmware.lst @@ -1,4 +1,4 @@ -ca65 V2.19 - Git 59c58ac +ca65 V2.18 - N/A Main file : CommandFirmware.asm Current file: CommandFirmware.asm @@ -50,55 +50,55 @@ Current file: CommandFirmware.asm 00C516 1 8D D7 C0 sta OutputFlags 00C519 1 00C519 1 Start: -00C519 1 00C519 1 ; Put command firmware here 00C519 1 ; 00C519 1 ; 00C519 1 ; -00C519 1 -00C519 1 -00C519 1 SendByte: -00C519 1 48 pha -00C51A 1 waitWrite: -00C51A 1 AD DB C0 lda InputFlags -00C51D 1 2A rol +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 B0 F9 bcs waitWrite -00C521 1 68 pla -00C522 1 8D DD C0 sta OutputByte -00C525 1 A9 0E lda #$0e ; set bit 0 low to indicate write started -00C527 1 8D D7 C0 sta OutputFlags -00C52A 1 finishWrite: -00C52A 1 AD DB C0 lda InputFlags -00C52D 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 90 F9 bcc finishWrite -00C531 1 A9 0F lda #$0f -00C533 1 8D D7 C0 sta OutputFlags -00C536 1 60 rts -00C537 1 -00C537 1 GetByte: -00C537 1 A9 0D lda #$0d ;set read flag low -00C539 1 8D D7 C0 sta OutputFlags -00C53C 1 waitRead: -00C53C 1 AD DB C0 lda InputFlags -00C53F 1 2A rol -00C540 1 B0 FA bcs waitRead -00C542 1 AD DE C0 lda InputByte -00C545 1 48 pha -00C546 1 A9 0F lda #$0f ;set all flags high -00C548 1 8D D7 C0 sta OutputFlags -00C54B 1 finishRead: -00C54B 1 AD DB C0 lda InputFlags -00C54E 1 2A rol -00C54F 1 90 FA bcc finishRead -00C551 1 68 pla -00C552 1 end: -00C552 1 60 rts -00C553 1 -00C553 1 00 00 00 00 .repeat 251-rd96Xr&h_YbEU{yQ#C5{>93-oBC5*548bkt5f)K4nEdO z>|_1sN%(Ll@ejcA^NG!^KPuXhsGW*-sRN&W`#8}Ns)Rg5^lk%8Y}EhETpAish9 z2J#!oZ?yT14u9BAMLSj6A-^H`S0(>7|GnwfU_Mf7nh%J5|~tza{wZ zNdCLXzo9p=&G|Ptzvuz}Z#chbX5c>~`90vbfgiSt9p|?*@Y}3q2l;K}w~^mQejEAi zHox8B58J6|r%F5Iw*~)qlK*?;_w**VIlssGMGx@*!1+Zp1OJTV-v)jM_+hI!aegNQ zzr$Kikl#Um2l*Z3caYy{^E(~>u$_u_srHHP{(a6bdVv3L&M%r7_yhW17W&_FtxXi*oI8{Bzby10 z_*dosx;I*zGiu`Qeg1&{mxcZV{|(9C8?8+|fSfyh{(%0Mh5iHo9m(Gtt<4!VarZud zK>y1^|A8O172macqqT_#kaMTcAJG4@(0|~+FZp|;wK=0E?%wAQ=zm%0Kk)ZfYZDJ3 z=T4tLp#No||GFXcqzd!#k$N$=1?RD*-_6GalueH+GWBT6Uu}|28gUzkq*^39Kf4Th({2V(m zeOy1gyu46VhTnQ;_}!WL`pdJgD5J{gFnpY1?^i#nF3wij+aqjjY2m`%bo4*MZ=~@Xh2W2m z|0Dcn8oyZx{!w}UH{ktGjQ=D2RvN!m2>$r^Kf-UP@!N&qpONQ(8_vHN|3~E3;h{_{UD{-^jqKK>{Dr}#gqe|PcyZ{x7B_TBHs{#*F>{~0;|4RQYz z{|EO!MAK9JAI1OukK_L${txp1r^G*y|GxA#r& zSqJ|w)&Ifze{la({y*jaQ~v)P>3>gZ?WLzMg70X^PlqnQ=b2n|4;S*L+c+<{eP-tmuf6V`;`u}qM6RQ93 zum3{z|AXrUQ2qaY%!>H)A2k0@^Z&U1Rj2+R&Hq#Ve;NNl`TvyvPx=4k|Hpbje66Jh zUu#KJ1cJ4evaPk(kN27Xx)1;ThwA@`_aD-K%KxYJe{lUjc>ksRf6D)-`u}461FHX@ n;{T%h|3!#@h}Zv#_-$CY%UfiwxWSHVl#gRI0; zkWvYSF$`r(dkRw2`9CRLCAS(s-|O{qgc+qwrE?xnLX?H%-wnzgYZk&3tD4Poodo`UJk5 zg_q@m_}Khq9A5l!`~iskd~9v~LB%-qWSow1I>p@{gSRoRRR7dGe*D(M^R=339EIOf zwih4D-?(DDKs~n})ju;!vJ(RqADyohI(|L-;-=ysApRxbx8Miis#$SSIrdsg7{Z} z-v)lTYIdC8PQh=Bh8^X%k>5ss8~JVIx10QSi@!Zi$2gthkl$APH;BKE{3~W1+me4p z@~a-;zbW}uGX?)J@vj2E1N?B+oH)Oeg5MDhC(7?2zk~b^@;k`yH2Iwte|wycaXQ5z zzoYo?5dSyGziQU8E%{d^zv==0ZzaEKrr%NyU6b% zzl;2ClizLex5w!ir&ApAyNdrF@qdr}fmz44H+>AB)@8=;GZP^4dC~HAFi4g z=l4?Zd!pe*`90+Kkl#ao5Ba?&zt`e#kJB+ur#R&I6#tLJ{}b|Wn00JR{td~mdVv3D z$*-Cz_$$P}1^hnn!&UR+{C*04Uo`wEzmNPr^83i|BfsC|_gnn!aXQB76o>r2;{T2K z?<4<~S;w~I-;(^Q2l#)N{HmFPf1dbvfIk3!xN1S1KS;qJh(-|Q50F1V{s8#{#I$e%75Ke?ElG2L& zy^-3E<7eF&@<;T)sPw-ir4{*mBehwhb{s$CXZ=_EA4_JL^&g&pS4`IbJM^f{`rnJC zcE|ZA>&|fgWBph2AFTUX|KDsGPuW7^D@F2XL5bsw%s?JVT#oI$-WNzl%rCRL-em8fi zrVWXS>6xlHGc{Gcc(L}zkQkl2aN)z*bD}&wTdfr;`#U3q_x}Lx|Fra<_^l*`jia);oCw@1H-^~?&T>pvROXBx(#UEe)6ThFt z@8^ntzP0~P>wn@8lK6vM@kiGG?Ek~_A3O)J{~!0i*#F=A{0sa4?Egpo-*#W0{eSlV z+5g|)Rethl|FQmO|NjQGr67hO=Dq(Bb?S-~VU*XZ=_6Kl}ge|95}XK6w(#@SSk}i|_yQ`M=&Cwa@UcoIG^+ z_mAxV)A@h$KiL0IIRC)@f1b{Nu>Y^le?i_Ko&Tr%pZ))Y`=9;)Jl+57|8xF7);|E> zpY#9a`G3y;=luUz{SVIn-~0Rr=l^s5fAsuEdtN{1|0nN8?EgFA{s-^>tLMKJSpRYU zKi2=@{QrC8e{=pn_#YeHmfG3>$t}f*;rz$@|7!l*f%%W~|FQlb*Z;Xn^WQZrwY1c2 zsl60;p!3W`8pPc`nC;#&_J^!)) zU#9whH2-n_f5QFG`Tu#k|0C!BIRBsX|GEA@)PG?ApZ)(QKL3R4|L=YNf$RTs{r~;n z$$q*K!~Jje|Jnb?^PjEyf4u+C`~STE&-?!eb^o9JfA;^?{Kxfw;QR;I|LO9h_MYwm z{eS+c@cDm|{ErPd|HYsGgP;G$`Tv~%&-MRLvHzdo|FQp{C;yNAf3^SB(tq~<<@qPB M|DQ1b<)r@qzup6sVE_OC diff --git a/Apple2/Firmware_AT28C64B_EEPROM.bin b/Apple2/Firmware_AT28C64B_EEPROM.bin index bf76fd34fb9364108e612cb0b1de730aa8bfd3f9..a4112738a905bb50c8bdd3df18d8eaae98dee106 100644 GIT binary patch delta 452 zcmZp0XmHpd$uV(l;N$|1J|JeB{EtI=@>)hDJ|~dRgv93p@|ltN+(14H5}yaiXGP-k z0{Lu6d_Ewb9f{8_J;2uUul&$zw(@VQxkALB1q?f#CM!r>0|f)7xFk@V6N|VMP@D^k ixHM3l8;iIMP@D&gxGYed7mK(YP@E5oxcoIHb`b!ZZMlE| delta 420 zcmZp0XmHpd$uV(Vz~lmsJ|JeF{EtI=@;XK&J|~dRgv93p@|ltN+(14H5}yaiXGP-k z0{Lu6d_Ewb9f{8_J;2tpD@6QRz_8P5vWCPpU=VPCf&d{V2^Hf+5|e_8aUqFGL&dm} d#AKjiJV;`)P%&O4F*&FhACj0nSd58X1OSdkoHzgg diff --git a/Apple2/MenuFirmware.asm b/Apple2/MenuFirmware.asm index ad69603..374b8df 100644 --- a/Apple2/MenuFirmware.asm +++ b/Apple2/MenuFirmware.asm @@ -47,7 +47,11 @@ DriverEntry: ;since the firmware page changes to 0, this falls through to the driver Start: - jsr $fc58 + lda #$f0 ;restore COUT after PR# called + sta $36 + lda #$fd + sta $37 + jsr $fc58 ;clear screen and show menu options ldy #$00 PrintString: lda Text,y diff --git a/Apple2/MenuFirmware.lst b/Apple2/MenuFirmware.lst index 076c8ab..35625db 100644 --- a/Apple2/MenuFirmware.lst +++ b/Apple2/MenuFirmware.lst @@ -1,4 +1,4 @@ -ca65 V2.19 - Git 59c58ac +ca65 V2.18 - N/A Main file : MenuFirmware.asm Current file: MenuFirmware.asm @@ -51,50 +51,54 @@ Current file: MenuFirmware.asm 00C519 1 ;since the firmware page changes to 0, this falls through to the driver 00C519 1 00C519 1 Start: -00C519 1 20 58 FC jsr $fc58 -00C51C 1 A0 00 ldy #$00 -00C51E 1 PrintString: -00C51E 1 B9 3A C5 lda Text,y -00C521 1 F0 08 beq GetChar -00C523 1 09 80 ora #$80 -00C525 1 20 ED FD jsr $fded -00C528 1 C8 iny -00C529 1 D0 F3 bne PrintString -00C52B 1 -00C52B 1 GetChar: -00C52B 1 20 1B FD jsr $fd1b -00C52E 1 38 sec ;subtract ascii "1" to get 0 - 3 from "1" to "4" -00C52F 1 E9 B1 sbc #$b1 -00C531 1 0A asl ;put in top nibble as EPROM page -00C532 1 0A asl -00C533 1 0A asl -00C534 1 0A asl -00C535 1 09 0F ora #$0f ;set all flags high -00C537 1 4C 0E C5 jmp PageJump -00C53A 1 -00C53A 1 Text: -00C53A 1 -00C53A 1 41 70 70 6C .byte "Apple2-IO-RPi",$8d -00C53E 1 65 32 2D 49 -00C542 1 4F 2D 52 50 -00C548 1 28 63 29 32 .byte "(c)2020-2021 Terence J. Boldt",$8d,$8d -00C54C 1 30 32 30 2D -00C550 1 32 30 32 31 -00C567 1 31 2E 20 42 .byte "1. Boot",$8d -00C56B 1 6F 6F 74 8D -00C56F 1 32 2E 20 46 .byte "2. File Access",$8d -00C573 1 69 6C 65 20 -00C577 1 41 63 63 65 -00C57E 1 33 2E 20 43 .byte "3. Command Line",$8d,$00 -00C582 1 6F 6D 6D 61 -00C586 1 6E 64 20 4C -00C58F 1 -00C58F 1 end: -00C58F 1 60 rts -00C590 1 -00C590 1 00 00 00 00 .repeat 251- Date: Sun, 28 Mar 2021 10:36:12 -0400 Subject: [PATCH 7/9] 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 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 Date: Sun, 28 Mar 2021 10:48:51 -0400 Subject: [PATCH 8/9] Update gitignore --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 31086e7..33f974f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ *-bak -node_modules +*.o +*.DS_Store From 2df8b6964a436043549859ea70e2033441716d42 Mon Sep 17 00:00:00 2001 From: Terence Boldt Date: Sun, 28 Mar 2021 10:52:56 -0400 Subject: [PATCH 9/9] Add warning for RPi startup --- Apple2/Firmware_27256_EPROM.bin | Bin 32768 -> 32768 bytes Apple2/Firmware_AT28C64B_EEPROM.bin | Bin 8192 -> 8192 bytes Apple2/MenuFirmware.asm | 4 +++- Apple2/MenuFirmware.lst | 22 ++++++++++++++-------- 4 files changed, 17 insertions(+), 9 deletions(-) diff --git a/Apple2/Firmware_27256_EPROM.bin b/Apple2/Firmware_27256_EPROM.bin index bd7ffa02281514bcd62faad43621640b0d51158f..27ac1a1f15b3ca2320ff442d66f26fb4d0e29049 100644 GIT binary patch literal 32768 zcmeI*Piz!b90%|%_@@}f9z4+K;T;9jrfgBU2?Yw88XNWCahtM)YH6Ex6XU^X6BiC< zNj)`&Xb5p^CS(bm8bj3iKW(h0Hx5M8lf)QI4KWq8;_vs~>+Hj!XIzvgh)h`dQ-`@5BLfcTScHiGLn_YEAgNq<gP54c= zVut-D`c3qk=r_@CZu!lIKRQmsahe>5epC3*N&jc)pEv5*=KgsD{h|l_pL4%xHsNQ| zzW{y<{P0?|RKL}P-(o9P*l(fVLcfK63;ouX-)i`y<1`$n$#Lkng#V)S*U`UV)UnO| z3*0Yyz<-JRMY9QipY$(+-v&Rt7H!pUH{rM0iXHab=(o{tqu)lqz2&zX{^&Rj$7ymL z`fcIAD*a!hf6=I8oBJ2JU-W?g8}1j)Cj1Aa-v_?~et0c9s^4kC@30jo?03-bpx;5i zgMMer?=<|;aT<=(d+7JJ{9eN!9jD-*3Y2vlTz=_tEd8-$%cXet*mFH~i6Y z8jjQCIQ09%|CjV{qJP7vW1IUoxL@>u{~zub%_jVz{O=a|uk|0(zo_=Jw>RsBZOgUw zN7#O2*WCKaYQJ9iXkY2Vu>LR`g+%{~f3|b?2hdtt{ar7>E1NZz3vk5E&0TZ1au4mq zB+u5Fl>gl#{}cSC;)g^J`5~gY-(<69#D7knw0uH48#VE$z#q#0Zjt{9eoOH~qKEtt z(cEvbSu5hdDE;|_cA_L(XW$Rzf49j01i!8LA<;vAh-mJ&*{mJ$UzPrRLOUBZ@uVE2AKLQ??LFA<;wUA0nFjJvQq_{P~7o?JU&9V*=5q z@tDA`=0EsbHntNjSvmv1n*ZQ$+1SoPO*|&>tNE|5S6|RKt1q&*{)QiN28{L29UsCk z^h>L^*wdT)f4TA){Mqs3&`#sv)YN#n*z@vhJ+BXs)t(*QUF<9N^}vU{?9K9Yd1AE8 zUg>26ljFxLwc1|%+hnCy>}7*v<7IYmbhJD(Q|s?#hbB**8ksoGhQ=n!wc4vA@3G3r zJ7u=-c{WoXot!v6!%j?2Gx#T1Ws=QQMy4yZkrS2jG#i_!jE#)5smXWC(>;?Dy}iAK zQX)2?Gw`eVAM=}OezPt7YW~OkR+`^x3%{EGF~6PWx7)(6=6}rZr1_n;@T>VB^Sfz& zw=Mi?{>S`Yn%`>+zncFszn|v!+rl5pf2#jO{Ri#?Q2k%6e^LGa{_|g`{!jJ)aQ!!0 z*QfeF)&Hsf5A_f}Y2gf?v~Y$`^PlSfwEkai+tG5{_T=`C2(Ewi{y$v*wEkbzzguqGp8U^$sj>f` z-2Vs8Kdt{4=fCB)?aBZAhwlH&{r_V1FIxYfQvag$|Lsu!>XZNfEkgZQ?Ee?L{%QSx z%Jom{|J&jESMxu1{nPsYl?-K{{OW9f4Ke`-PfP?|Ht|#?f);Ie?t5J z2hV?r&J&>h|7rjKQf~J-(!Nk||5LsHPxXJQ|HqzxLHqy5=ReT?|Ka%$wEsWt|Bv$@ zX#fATylu7qd*naW|Ec~@_5ap;L5Qe`577TK}I?|DyH(?NI+cAoCBN`zxRS7rXvx|NoThpZ5Q6hwFbzUjG|#{fp=S L#jgK$-T(hzN0%mv delta 372 zcmZo@U}|V!+AvLmi6LQfqF~zOe-bm`%t!=N3c;*KFl7+TS_D%L!DJWNDAXbWH*nPK IG$wWt0PJCju>b%7 diff --git a/Apple2/Firmware_AT28C64B_EEPROM.bin b/Apple2/Firmware_AT28C64B_EEPROM.bin index f766ceca9701f15ff0b78b6bf526fd6cf337cc4e..46040b8d46e625b6686e955a679ae2913431afdf 100644 GIT binary patch delta 590 zcmZp0XmHptO~RqqH?dNoBr!Wx!NgRdI5jyxFQr%^Ex$-1C?HdzBwwMpB(bQZH!-aw zwMZc|uOu@uN1-6UJhezSKTl6jk0D|5LJp0||0HHm$skE;86-t5gQTftkPNj9lBJeG La?~-1iCqK$4PMir delta 94 vcmZp0XmHptO@fIbVRE8C+T?!{GvG`~1XBvZltwUR5KLJFQx3*tViy4bT^b=c diff --git a/Apple2/MenuFirmware.asm b/Apple2/MenuFirmware.asm index 374b8df..40115d9 100644 --- a/Apple2/MenuFirmware.asm +++ b/Apple2/MenuFirmware.asm @@ -78,7 +78,9 @@ Text: .byte "(c)2020-2021 Terence J. Boldt",$8d,$8d .byte "1. Boot",$8d .byte "2. File Access",$8d -.byte "3. Command Line",$8d,$00 +.byte "3. Command Line",$8d,$8d +.byte "May take 45 seconds for RPi to start",$8d +.byte "after intial power-on...",$00 end: rts diff --git a/Apple2/MenuFirmware.lst b/Apple2/MenuFirmware.lst index 35625db..06628b1 100644 --- a/Apple2/MenuFirmware.lst +++ b/Apple2/MenuFirmware.lst @@ -89,16 +89,22 @@ Current file: MenuFirmware.asm 00C577 1 32 2E 20 46 .byte "2. File Access",$8d 00C57B 1 69 6C 65 20 00C57F 1 41 63 63 65 -00C586 1 33 2E 20 43 .byte "3. Command Line",$8d,$00 +00C586 1 33 2E 20 43 .byte "3. Command Line",$8d,$8d 00C58A 1 6F 6D 6D 61 00C58E 1 6E 64 20 4C -00C597 1 -00C597 1 end: -00C597 1 60 rts -00C598 1 -00C598 1 00 00 00 00 .repeat 251-