From 90caff73740e06b0c1c30da80b8a2f1cad2af726 Mon Sep 17 00:00:00 2001 From: Bobbi Webber-Manners Date: Thu, 22 Sep 2022 19:56:17 -0400 Subject: [PATCH] Added *DUMP (hexdump) command. --- applecorn.po | Bin 819200 -> 819200 bytes auxmem.init.s | 2 +- auxmem.oscli.s | 130 ++++++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 130 insertions(+), 2 deletions(-) diff --git a/applecorn.po b/applecorn.po index 212d9adbfa5714f12ddcb6a54adea7bbdd3b4207..eecc6afc0856f7e7f6c2c8a288cbe3570577713f 100644 GIT binary patch delta 2297 zcmZuy4Nw%<9p8`RfM?DeLL!w;d`S>Qi6YG?b&znvnLAiM1Wd6s>9q~*(Kz=qVJ)h9GAdxdX7uvxFn8C{+I(V8uj^|3N1v3E0%%R$!ENAp)*Vuw&{RDDOU>Rwjg(WkmI>N`GE`Cpx>6(=f*t6+YiaAdhk3br)~JUxJAe}U?v5H2 z`}hFX&bQgbr(Ks}I${DEq6J_h=1k4aI~sqoYxhpbx8?%_nLqq)K3Gjs6yiVo4j9bn ziDYVd-}0qO=^e%qH!)(oZ)JTcC=vEVhW9-WJ|L;%;o;o%;BA`1nvYHZgN|$({^S&B zrLvo30lIEL!H)*vE3){|(ix`qMJU)LA5*=)r#<&tVYv)n;dh({KUk5AM8Y;ml85TW ze&<Qsec366Y+<>lR#!27A<_z3PI-?7GD)MVzl?)Hw#-ny@C$c-5=-WsPQy30_wc+>V3|aTecx z28@$UJX;E$;#)?55#x_A9v&J2ZpzURsM%K8(hxA$|Gpt$t=v-8hBf9&Q-yh7Lx8C= zm1=k7TGLBrEh?9q8FQVPYn-kqFSXXRHcpo;e74lHZGo!ly7v8nt=p`1?6_<(Gu7HI zd9$h3TEhNjy4<{-eRJAeVyR*~r|Y&?o7wK^(rp#hEFE;j!eTENuHi)AL@<3yION^Y`ahnctpHgna{F< z)hp#d*W#R;K2z6i--{mI^m=c)4bBEU`8df$qMM|;DXN>M;4Ht#3Z5n3;=8S2O-7T9 zlTP@f%a8Z!*0XsAoLpkEi^Z|W-#Q1Ldj^~EjtFs5wo3nAuw%@CH^ih^o`y9h7xC-P zgN$@MQJpLqM6Kg4Wk>a*gZc5afQ`-D%K+4u$-)DSJIlb*v~n4x2zMdCM~e|;L^E&k zC(Z*{_H`bQ8vn(-8eqnx0{E#0&uN~i*g^-UvDL=EkL?7(6v}*aUMz;%H6MYV?}ryB zJO*FPRa088mbaD-^BEUFq2s^!jgR=h>VN-8@cpB~*eJ8beI%HZC}p^@d?JVi+~VU- zX+ok1yWPQ2X+C@;DAD1gK|2<4uN?25Op<8$We~5H&wh*n&OGg!jhI;YFK>jg0Or?T z0NM6O7l5Sx0_4GP33?w}9m zE%7;wi(@LhvVxr?5H@iQmf7&vX5nAH0CM#UN9Olm0Hux^rBbQGr3RPg(Epcvm&YTI zbbpWhBXTO@P_9Q>!aq}XD6ipi{EOGWu*OIJI^K>+Vd>F`Z${g%yrgu7f+01eCgbK# zC`&0<_y#X96|~Mc@1J^S#yQ^`i3PGJ0srez0c;QbeB~k+Pfl|lhrhA zQ3P$JJ-0o?-!BIy>THNFVnBA{Mn%ekgu?G&KrXdW;SVw3EYK zAjdGSg^1aJnC%GT^|Z<)N10ofnW8AOs0%TN5pz;uW)=SQB^*OnqjS;5=y3QFSVA5! QQcB+g9pqHdr!MOJ4>`JQfdBvi delta 2042 zcmZux4^SLe8Q(w00k1(X4OS9nl9x&#BqSlJB5Fu-^m zZk=+361d?)bkjO?mK|ZTjL?hNxuDoGCXhR5>}KeUHKl<-b9=|_?Y=`y3Z$&>4xNrp z_j})azy0?2cE5e!AC^79vIl%S4CE7CxrXmQzKu{15?|W$l!;*Hi6aRx^qOIe+OgeC z{Lf{4nn)pbq+)8JDTkORFxYPzYE5Mg23prq7fDrjeP_clQXd-J(0H~BjLcnhZROxY zYIbPNMN>oG^ExTG$v>PU$(P8M^JEK&mBLD6HDFD_YQ&m~H4SUJpKJkTCgV0wj24i; zVhebYeDaOtjYp-63w~C^WL{4@vqm=!UKqtgu&fh994G^s-uS@QnvRR{fh{#1UGahJ znvP3x?uY=Q#;JAM{yb2ap5~1Y6W&+6i~b)Jf^sq=*L_elyGul``;chn-r5hIaUs-A zP!pzyumHg^1zvd*nA=v)j zC0kqHGUgQ+S(6dcY(GlrTbeM%>hJVp>q?tb+|J*IDHO&sB8u*3e?2*@F+e9gbw(u*J$)9oCjpk&2_1@~YNTk<#_0tcHC_wpThX zw93a%lsnj|u+7R;>h`%_5o@W<&Yq7rYAdbmZz9!|c00p<re*qd+{ z-jjVI_Vyl^KL&R1yeD^lCVwVq?z|uTy3Y_P3S>EFY-05)u zjiq7X5yswe@cB$j7;O}mAdUYwK?oz7d4U_jtg`=<^MvVN%t@JL<4A>J7C|J)=yhXJZbfRyl>`k5eyB6(x5*mz*ahRr+Md zr=!~UN|j$k{~n!*&ZOgMHo8eER=9>BFc<%H!M!^C{DOO>S4)K4mx9{?DuzwbAMV^$ zf6aLZs!|^clJ%Wh&TJ(O&nkkxv%a7y%B>y+X6kB`JH&uIW1b@A!Weg&0eh%Cg?p6& zC%1I+%4{k!h_CPpjxf%pd`%RRnA=zZvbn5D05|AzfPx9y^F@NY>=~}YYV-~yfXg5qv>1IebcsS{r&TI zr_iSf6O))JgqtKYEHiXCf$_-Km>i8M(=aYVh (LPTR)=>params + ASC 'DUMP' + DB $80 + DW DUMP-1 ; DUMP -> (LPTR)=>params ASC 'SPOOL' DB $80 DW SPOOL-1 ; EXEC -> (LPTR)=>params @@ -538,8 +541,10 @@ TYPE JSR LPTRtoXY TAY ; File handle in Y :L1 JSR BGETHND ; Read a byte BCS :CLOSE ; EOF + CMP #$0A ; Don't print LF + BEQ :S1 JSR OSASCI ; Print the character - LDA ESCFLAG +:S1 LDA ESCFLAG BMI :ESC BRA :L1 :CLOSE LDA #$00 @@ -561,6 +566,129 @@ TYPE JSR LPTRtoXY BRK +* Handle *DUMP command +* LPTR=>parameters string +* +DUMP JSR LPTRtoXY + PHX + PHY + JSR XYtoLPTR + JSR PARSLPTR ; Just for error handling + BEQ :SYNTAX ; No filename + PLY + PLX + LDA #$40 ; Open for input + JSR FINDHND ; Try to open file + CMP #$00 ; Was file opened? + BEQ :NOTFOUND + TAY ; File handle in Y + STZ DUMPOFF + STZ DUMPOFF+1 +:L1 JSR BGETHND ; Read a byte + BCS :CLOSE ; EOF + PHA + LDA DUMPOFF+0 + AND #$07 + BNE :INC + LDA DUMPOFF+1 ; Print file offset + JSR PRHEXBYTE + LDA DUMPOFF+0 + JSR PRHEXBYTE + LDA #' ' + JSR OSASCI + LDX #$07 + LDA #' ' ; Clear ASCII buffer +:L2 STA DUMPASCI,X + DEX + BNE :L2 +:INC INC DUMPOFF+0 ; Increment file offset + BNE :S1 + INC DUMPOFF+1 +:S1 PLA + STA DUMPASCI,X + JSR PRHEXBYTE + INX + LDA #' ' + JSR OSASCI + CPX #$08 ; If EOL .. + BNE :S2 + JSR PRCHARS ; Print ASCII representation +:S2 LDA ESCFLAG + BMI :ESC + BRA :L1 +:CLOSE JSR PRCHARS ; Print ASCII representation + LDA #$00 + JSR FINDHND ; Close file +:DONE RTS +:SYNTAX BRK + DB $DC + ASC 'Syntax: DUMP <*objspec*>' + BRK +:NOTFOUND BRK + DB $D6 + ASC 'Not found' + BRK +:ESC LDA #$00 ; Close file + JSR FINDHND + BRK + DB $11 + ASC 'Escape' + BRK +DUMPOFF DW $0000 +DUMPASCI DS 8 + +* Print byte in A in hex format +PRHEXBYTE PHA + LSR A + LSR A + LSR A + LSR A + JSR PRHEXNIB + PLA + JSR PRHEXNIB + RTS + +* Print nibble in A in hex format +PRHEXNIB AND #$0F + CMP #10 + BPL :LETTER + CLC + ADC #'0' + BRA :PRINT +:LETTER CLC + ADC #'A'-10 +:PRINT JSR OSASCI + RTS + +* Print ASCII char buffer +* with non-printing chars shown as '.' +PRCHARS CPX #$00 + BEQ :DONE + CPX #$08 ; Pad final line + BEQ :S0 + LDA #' ' + JSR OSASCI + JSR OSASCI + JSR OSASCI + INX + BRA PRCHARS +:S0 LDX #$00 +:L2 LDA DUMPASCI,X + CMP #$20 + BMI :NOTPRINT + CMP #$7F + BPL :NOTPRINT + JSR OSASCI +:S1 INX + CPX #$08 + BNE :L2 + JSR OSNEWL + LDX #$00 +:DONE RTS +:NOTPRINT LDA #'.' + JSR OSASCI + BRA :S1 + * Handle *SPOOL command * LPTR=>parameters string *