From 5bf58bc386442f86a7bf9daa800486fdae6254cc Mon Sep 17 00:00:00 2001 From: Michaelangel007 Date: Sat, 28 Oct 2017 22:22:01 -0700 Subject: [PATCH] Version 30, display ver num, print sprint size --- bin/dhgr.byte | Bin 1570 -> 1772 bytes hgrbyte.dsk | Bin 143360 -> 143360 bytes src/dhgr.byte.s | 285 ++++++++++++++++++++++++++++++++++++------------ 3 files changed, 215 insertions(+), 70 deletions(-) diff --git a/bin/dhgr.byte b/bin/dhgr.byte index ec49d83aa485842868f083410f6d8a968fa8d97d..edce408e7baf626ed713da04ab9c2e10b481c0d2 100644 GIT binary patch delta 1387 zcmYjQacmQ16u)*I+qJzuCSyAWj88LII!K%`!D1wUVBDHBg28CO#3K;AJseHVJXs?l%Ct>dh15{Ye#MRsO3TJFuPz#e z2)V~f1zw%=;*xCRQEr#&o~;Q2f7lkUuLW!Q`Z}-{G+tf@4;sL1fS^lh0E;`@1T%>f z)n+3I`vYbZC?~27Tj&VTdQu7um(EPbZ0c5;fI8vw8c6VUhQQ7Pi8m)2mC(KXOx z3t{hB9`5W-e~V@|oBjs9u~N^pAhOZb0OUc4hvs@A?d~k4W)gic6q<{d zt&yv;3{lJM15O638XJmEn3(t!m@+7*K^HY9w$L-LGnrn95Ysnvr`B39PXS(pvwbky z3q#~ShxpY=YvI8uxPBVU(_q~moFZj*H65Y%n4{%C)QYxfj(s9I-$5s><<_vvMWG7@zYz5FNX}hU*Ff+m2&)&u+s=G3d&>>8G7(JVK4p z8B#ZIY?2m@*5C$qr?ey*r2~BTNV;llam(1IQ5!)RiwV>^cZSUF9vztdfIp=w%{a+|nhA>+3XO(xe z%DyaF70^lSE@h;mRFbBpWpeN_Wsb2xGTpgEtF*a>NgqXu?P)%w-XpGfo(=e`;f7A|H)kbW3`R z94<|-yQN?FGIP1?2rt^Lu$ic_NpX?VGRQ595$2|bPb`YLnF$QrtIrio_9kzhKli)e z^Lw7>{gcz#MtXqU;-oi?g5aLK){{00-EO%cofk#F_|z}f1jNCB_|eto!(q*(yNnf5 z_0(vRH;iVX-q$H_5`mNR^1mb!AZ=X2m9E@WD$_z(ewJ-jJ=u2k{p?Y+udCp|(-DxRx9 zREK4G%h=-84gA;RH*7i2tAF_M$hPqe3o(z&h28w19a=mE=GNkAF#pl`=xO+?7ZSZ7 zxRqWoxf=tp8oS_4oCNU-mly!$g4eLc&p28`+F`tSePz_9j4}Y!fk*ox)(4t9dJ2#y zOnCqEJuaL9>y?FbVD&7V1#1vnX0c`1X}OGi9N^WvhK*WfdlE}!8EZP$54?JFJMd)7 zt-Xmp$eu{vCrACX9Ls*y4i*$KcZFO?z7X*-a>3~>HVe@Vh@bi*KF>}j z2hn+mw5`oTlIbo^uEyqItZgk*iYDfwS&+=c9B^4MybUcE&RnN9CiDtpeS*|+W5JxcL7f>6;bZLz;vtpXkg(g=if@j2d>Frk1h>V| zOWjEvfKlX!Cz89SHeQ@+lJoIRPd#&%i|_L`RCm#o!?H~g<%Y-v7eDFktUC^Er0Nb0 zjU16XMvt|TWo%3EpD!^NL?s~Nc=?kQ8^ zV`VKZx62xZH(n0D)K}Zy_?qC{-+q1c@RtY6OZA8L9r!jiGjl)lQ|`yR*5CgD=l|-7 diff --git a/hgrbyte.dsk b/hgrbyte.dsk index d2ebc49e7fba33d8579e34af114d90af6d67c116..5f03f2ed6dfd07834a9d21502ea12e655875ec42 100644 GIT binary patch delta 1493 zcmYjRZA=tr5Z*mcxI1odv?8qd^;%JKNK%?62AdkC+7vEpimiQlI-)JUYX}WNT&7g#q8esqmqIW|Qgw`OvT5B?!is z0ofhU%23qo5PN((sR`(p9P1)V=!(0*;O?lhL06{8Xa)6-GDw>IMikV$OOlYU5(UT! zhJ5Vj9{9yv6y3Y=Sq_zRf+}GS@mgXB^Z_TB9a>J0LMl%^rhx2Lk1qw${lpFG{v}zP zCto`0asOW#?o6T4;goUSDWlUV<2={oS1T0YPB40rlcdlI5?Tskw1KK9;oBtM3b81< zc%xponC-QD#^W6j>x5|4R4b%hwRUnM-Ui)OQ_&^VcRdyZ!NTKA46K!8yg;~umzK_g z5d$d!Dz8wHnU-ml8fpb%6ikeHtQq4hkXy{THt27KZt{>p{q+%R=F!<2l?GTfp%8+4_mt-*7VUm*Cf#bbgUO~M=bxbSx9-O{EZMp8xoZ_WbW-u&1 zNmt5+=@;eI>1x@ZepU9SkIC-zyE4sJ@e0vhq;FBGH1*Qu{fsrmV>fJfK)*x2sHSOk zfezo?0M?Ac#x}sCA~1>|NJ~XvG3QEPB7S!2mag?#5&7^_QtjnFhxU!gT(w~S+p zgtg>XpVSHxj-&&mPQVZJZ!s&B>y*?6QVe)4n`~~D3!3GU=4h=)%%+}+dR@-ogFWN= zCUP>s%5`{%PJa5jsbyQoJs3Cj+`|UDK(|uxeY|(n7g#(MyNq z3tk~L;8R0Fa^m0BSEWEhWCIr=KtXB)@FOYdg6Y4zn+n?cd=%SFc(0juks3NPc=zPm=aZhAl74d+wH?q5BPs=_QWi&~QS#ij$s52|xFe?t5(oqvN z!n4ah|M^Fr`uk1kZBsgEk~IO9MDFX9m=$etT%30p9&`A69VNZkq4vfmGh?M2M;@%Ne7 z2ROK)lAkkqsP7t`V^7>*-pP$%^c*TwkM_8a++eyxBi1ZtX+(A`_h*P{41%{3dFh(m zg`Rwn&baiCYEwuhg;FW9dRp5q&T3`B&ECD@9Ix5+Y;#{~#o%nk;Pz9zwoq$}3rQS= R-Ie;q-L;?2_8z5w_y;xqYB&G@ delta 1282 zcmYjPYfKzf6rR~GkDcAQ1xsPu^l?LZWC=fL)P$1Mg0(4ZMx{KciL;pjc_JTWs#UD)vBkLgj^%D3>5Gx$SV5gC97 zaUD`7tuxb$uh6*A1xC~^eJa=_Nklm2Qe5~9lCEZLIfe7GJ}La83w*72hR2>PiX@P< zEKXy?8CgKmia5;}PU#&HG4Q_FO7U8e73HIBl*l}iMDZ8PS+lHpu#^(Z>nJ$Mre_~T zQ4?Z*Yz#qy^=ta3FFfZ8#a$8+JA5yh3x^|DdPukb7=0;|&^MI~oJjfd<~Tk^k9rgO zmU4q%Kv3CVoWWKp1V4{>4f$kaVsKD!4hn|{gH8FI5q&P`uyMwid1Ea+heC10eBcN= z?0Y8(6k0&R+Ko9BwKbU&>*0AcTDuX?qVf5VhFHH2OlS@1Iru#%dz+mVv0}sHX}(5P z%69+P^bMa1VaJC5t0-mey0) zIO>eVEwRCLvU$=QS#fc(i+SJ0WrCkKkfgLj`qOUV573k1GV)WcL9ji}^Xzx`XM9T+ zk)B%WLi#_VJJf~#Y(q3aFi@C9#nNjiquBUP zq*(5u4is)jA{n}fAP#m@5kf84<_lDhpL@FK??%ZN7kg2%Ww8e(`?VUurPT=tDzR(l zg;9r^6k{EllnLyOx(MiL@iFIeHg2P)Z)8{jviEGR)i5&33ff z9Q_WUsz$$p+aWWs#`HPZgV^ch=MW!9d}RVDNAL{Iz7F$1PF!zMWuu9NxwynI6!U~) zikwWplX-Wz(m3T835kHd6h4tFxGlNTbKFtSZDSA3rMVp(bmCh2S#H3^4qV>a)C>ybNk^IPL7g=@wR&KfH)fc=cVL%6<`;A^$xPTt;?03`vaogilaO3lk zNt<%DDGH+^o9@B!=)S3~>ZuAY?UQ$!Om1i5lWwxa)L$w$G%7JG+-|H8J%GpQ zk+yEK{^U7S3*{-kz-bPu{lD_Sf0ff}b(>nD C#vdvG diff --git a/src/dhgr.byte.s b/src/dhgr.byte.s index cf9fa92..68607cd 100644 --- a/src/dhgr.byte.s +++ b/src/dhgr.byte.s @@ -6,7 +6,7 @@ CONFIG_BIOS = 0 ; 1=Use slow ROM for text, 0=Use native code for COUT, HOME ; DHGR Byte Inspector ; Michael Pohoreski ; https://github.com/Michaelangel007/apple2_hgrbyte/ -; Version 28 +; Version 30 ; ; TL:DR; ; IJKL to move @@ -144,6 +144,8 @@ F8_Wait = $FCA8 cursor_row = $E2 ; used by Applesoft HGR.row +SPRITE_BASE = $6000 +zSpritePtr = $F4 ; SPRITE: 16-bit poiter tempByte = $F6 ; forward bits for pixel print aux_ptr = $F7 ; copy of GBAS but points to HGR2 $40xx..$5Fxx lastkey = $F9 @@ -187,9 +189,10 @@ __MAIN = $900 ORG __MAIN DhgrByte - LDA #28 ; Version - copy HGR1 to aux, HGR2 to HGR1 + LDA #30 ; Version - copy HGR1 to aux, HGR2 to HGR1 JSR Init_Exit ; FEATURE: Set to 00 if you don't want to copy AUX $2000 to MAIN $4000 - BRA _Center + CLC + BCC _Center ; Funcs that JMP to GetByte before GotKey() ; Funcs that JMP to PutByte after GotKey() @@ -201,7 +204,8 @@ _Screen ; Toggle mixed/full screen LDA flags ; FULL MIX EOR #FLAG_FULL ; mode is based on old leading edge STA flags ; not new trailing edge - BRA FlashByte + CLC + BCC FlashByte ; -------------------- _GotoXY JMP OnGoto _ResetRegion JMP OnResetRegion @@ -242,50 +246,30 @@ _Center STA cursor_row ; intentional fall into GetByte GetByte ; Cursor position changed - LDY #0 ; Update pointer to screen - LDX #0 LDA cursor_row - JSR HPOSN ; A=row, Y,X=col X->E0 Y->E1 - - DO CONFIG_DHGR -; NOTE $4000 is our shadow copy of AUX ram - LDA GBASL - STA aux_ptr+0 - LDA GBASH - AND #$1F - ORA #$40 - STA aux_ptr+1 - FIN - + JSR GetHgrBaseAddr JSR GetCursorByte PutByte STA cursor_val ; current value STA cursor_tmp ; flashing cursor + Status JSR DrawStatus -; STA SW_STORE80 + BCC FlashByte ; always -- See Note: [A] +BadInput + JSR SoftBeep FlashByte JSR FlashCursorByte GetKey LDA KEYBOARD BPL FlashByte - STA KEYSTROBE - AND #$7F ; Force ASCII - STA lastkey - CMP #'0' ; key < '0' - BCC TestHex - CMP #'9'+1 ; key < '9'+1 - BCC Nibble -TestHex - CMP #'A' - BCC LoadKeys - CMP #'F'+1 - BCC Nibble + JSR IsHexInput + BCS Nibble LoadKeys LDX #nKeys FindKey DEX - BMI FlashByte + BMI BadInput CMP aKeys, X BNE FindKey GotKey @@ -380,7 +364,6 @@ _LoadByte Nibble LDA cursor_val JSR NibbleInput - LDA temp STA cursor_val CLC BCC GotoPutByte ; always @@ -462,12 +445,10 @@ ResetTimer GotoWaitKey JSR UpdateInputCursor - LDA KEYBOARD BPL GotoWaitKey - STA KEYSTROBE - AND #$7F - STA lastkey + JSR IsHexInput + BCS GotoInputNib ; SPC = Move to next field, or accept if at Y ; CR = Accept X or Accept X & Y @@ -479,15 +460,6 @@ GotoWaitKey CMP gKeyGotoCancel ; ESC BEQ GotoInputCancel - CMP #'0' - BCC GotoBadInput ; Bad - CMP #'9'+1 - BCC GotoInputNib ; Good - CMP #'A' - BCC GotoBadInput ; Bad - CMP #'F'+1 - BCC GotoInputNib ; Good - ; ---------- GotoBadInput JSR SoftBeep @@ -583,10 +555,6 @@ SetSprite1WH STA tSprite1 + SPRITE_H RTS -;SetSprite1XY -;SetSprite2XY -; RTS - ; --------- OnMarkRegion LDA flags @@ -648,6 +616,8 @@ SaveHeight STY tSprite1 + SPRITE_H BRA DoneSprite + +; --- Save Sprite --- OnSaveSprite LDA tSprite1 + SPRITE_W ORA tSprite1 + SPRITE_H @@ -656,8 +626,114 @@ OnSaveSprite BRA DoneSprite ValidDimensions +; Copy from interleaved memory to linear format + LDA gSprite1Y + STA gSpriteY + LDA gSprite1H + STA gSpriteH + + LDX #>SPRITE_BASE + LDY # Source Address + LDA gSpriteY + JSR GetHgrBaseAddr + + LDX gSprite1W + LDY gSprite1X ; src col +SaveCols + TYA + JSR GetCursorByteX + JSR PutSpriteData + INY + DEX + BNE SaveCols + + INC gSpriteY + DEC gSpriteH + LDA gSpriteH + BNE SaveRows + +; Update Status with End-of-Byte address + LDX zSpritePtr+0 + LDY zSpritePtr+1 + + STX gSprite1End+0 + STY gSprite1End+1 + + STX gSprite1Len+0 + STY gSprite1Len+1 + + SEC + LDA gSprite1Len+1 + SBC #>SPRITE_BASE + STA gSprite1Len+1 + LDA gSprite1Len+0 + SBC #sMemTypeBeg BCC HaveMemType ; always HaveMainMem LDX #sMemTypeEnd HaveMemType - LDY #>sMemTypeBeg JSR PrintStringZ FIN @@ -867,11 +943,46 @@ PrintFooter2 DEY ; len-- BNE PrintFooter2 -; --- TODO --- sprite A$6000,L$#### +; sprite A$6000,L$#### + LDA #41 + JSR HTAB + +; JSR PrintDollar +; LDA gSprite1End+1 +; JSR PRBYTE +; LDA gSprite1End+0 +; JSR PRBYTE +; JSR PrintSpace + + LDA #'A'+$80 + JSR COUT + JSR PrintDollar + LDA #>SPRITE_BASE + JSR PRBYTE + LDA #E0 Y->E1 + + DO CONFIG_DHGR +; NOTE $4000 is our shadow copy of AUX ram + LDA GBASL + STA aux_ptr+0 + LDA GBASH + AND #$1F + ORA #$40 + STA aux_ptr+1 + FIN + RTS + ; OUT: ; A = byte ; USES: @@ -976,6 +1107,10 @@ GetCursorByte ; Main Aux ; Odd = Read Main DO CONFIG_DHGR LDA cursor_col +; IN: +; Y = 80-column +GetCursorByteX + PHY ; 65c02 CLC ROR ; Aux/Main is interleaved TAY ; y = byte column @@ -987,10 +1122,11 @@ _get_aux _get_main ELSE LDY cursor_col +GetCursorByteX FIN LDA (GBASL),Y _get_val - STA cursor_val + PLY ; 65c02 RTS FlashCursorByte @@ -1049,6 +1185,10 @@ ClearTextPage CPY #$78 BNE ClearTextPage RTS + +PrintDollar + LDA #'$'+$80 + BNE COUT PR_HEX PHA LDA #'=' + $80 ; normal @@ -1227,9 +1367,8 @@ VTAB_COL0 HTAB00 LDA #0 HTAB - STA CH +; STA CH STA CH80 - RTS ; ------------------------------------------------------------------------ @@ -1270,14 +1409,14 @@ gKeyGotoAccept DB 'M' & $1F ; RET ; ======================================================================== ; === Status === - ; 1 2 3 - ; 0123456789012345678901234567890123456789 + ; 1 2 3 4 5 6 7 + ; 0123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 ; 1 2 ; 0123456789ABCDEF0123456789ABCDEF01234567 ; "X=## Y=## $=####:## %%%%%%%%~%%%%%%%%$00 X1:## Y1:## ; "/=## A/M SAVE:?? %%%%%%%%~%%%%%%%%$00 X2:## Y2:## ; " 76543210 12345678 W :## H :## - ; " [11]222- + ; " [11]222- A$####,L$#### v?? sTextSprite1 ASC "X1:?? Y1:??",00 sTextSprite2 ASC "X2:?? Y2:??",00 sTextSprite3 ASC " W:?? H:??",00 @@ -1324,13 +1463,19 @@ sPixelFooter ; X,Y ; W,H tSprite1 - DB 0, 0 - DB 0, 0 +gSprite1X DB 0 +gSprite1Y DB 0 +gSprite1W DB 0 +gSprite1H DB 0 +gSprite1End DW 0 +gSprite1Len DW 0 + tSprite2 - DB 0, 0 - DB 0, 0 - - + DB 0, 0 + DB 0, 0 +gSpriteY DB 0 +gSpriteW DB 0 ; temp - for copy +gSpriteH DB 0 ; temp - for copy ; ------------------------------------------------------------------------ ; Keys are searched in reverse order