From ba6b7d0d05a92e98b1f274c25353c8b06e4b99dc Mon Sep 17 00:00:00 2001 From: Michaelangel007 Date: Mon, 30 Oct 2017 09:17:23 -0700 Subject: [PATCH] Ver. 32 fix cursor location after sprite copy --- README.md | 9 +- bin/dhgr.byte | Bin 1858 -> 1864 bytes dhgr.symbols | 212 ++++++++++++++++++++++++++++++++++++++++++++++++ hgrbyte.dsk | Bin 143360 -> 143360 bytes src/dhgr.byte.s | 7 +- 5 files changed, 225 insertions(+), 3 deletions(-) create mode 100644 dhgr.symbols diff --git a/README.md b/README.md index 16dd3e5..a7eca87 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,7 @@ ![dhgr byte inspector screenshot](screenshots/dhgrbyte.png?raw=true) ![view screenshot](screenshots/viewdhgr.png?raw=true) + # Instructions 1. Start AppleWin @@ -11,7 +12,13 @@ 3. Open: `hgrbyte.dsk` 4. Select BASIC.SYSTEM 5. `BLOAD TUT.DHGR` -6. `BRUN DHGR.BYTE` +6. `-DHGR.BYTE` + + +# History + +Ver 32. +- Fixed bug: Restore cursor position after when using sprite copy Ver 31. - Added `:` to save a sprite to mem diff --git a/bin/dhgr.byte b/bin/dhgr.byte index 739454657bef07f0f0450ab622c1263207712ec5..ca8fa6e5eb1e40ce36f076bd0b51149ef4bc54ef 100644 GIT binary patch delta 1159 zcmYjQVQ3p=7*5ip?PZtmoziY`I{84Yq#$g6Br0XDW7vihHgtcA+QTv_MTOdSRr@0m zk|-e;GV-TCM2~YfdZpLIfq!I$Obcs^9VbQX)Q%C-rfr(^I@&tA=HmM$PCV}Jd!P4x zc;4r`@4cVM9C2!tE?sr@zIK|>^CWT@c|_mhlMS?kr*9M8mOc8AKFw#|QQ8+y6<2n_ zc&Kq*GtVCFQV(elQEZ|X5|*xh^Iq@@7zcMo!Pt|%@lhxbf<6d7yEF)fXL-eJxrhQXV>RR_-bCiA#H1oIa%OZ0iS)`U%_h9PVT z0r&I}+`o{yi7=bZ{D9SHHJlSfF4Ri@a!YxTRzcbVsRU}pw-c#^+BKWB22ue;wK6#{ zkUTPwJTVaKZjMwkPsTV$Fj8SVN#r5E3c`n6jC1~**@AcpV*XMdGLG)*$}(X66+A(fW#)mi{RIbupvrC&^KYjCT#-lQyAn> znG(K!&)dwBWPjtGq+A9J79W67EN^=rH~&qw zBDqx6aWU8f+A>WOwMxGxbeY%gGLWkSI!@FVF;uGo@8vd%v+yIU9%6)4T>tdo%2E}d z!#t+vL0Oi+r?WhM8Rc#*3N{c1 z)})1rs5KEixCV+W|IWw-7R_O#9cQeQ$Wp7m2DjTiDL2o|0$N-D%GlR@SkP`E!q20L z%)gDjrr4%_si*NIF@@*I3U4z0J{EL4huAA73{U)5501-;Kg@keU3(zRWke%gn0 zkPA|BAu}NLgL)jhvbXeV9O#E(OFI3~L^BR$Y!jCzv40Y?mJ^mby5{2VO;kK`d4Ip> z_wYQ=d-vY5a8q#6r%3LK>+GvX1kxwSyYgdll25dgmw57~U^voyACVqD^^SHp+grWA z1?D5l^)LAL_UpT3P|zF_ofLCdzIZo$0nD9S6JXXGj!A zD6uD$I2f85=#uNHeN&t>EZ5mi;(3UzfOwvp;#~hA>k!+3sla9)QqFA>bn zv%9t&E5f9yNvb1Si#(K!0(gsHy=S0#1&ksnRUj|!(HskTAWptqaG5ou0_2D=Ux2wh zOp{{*;>%exT-&O^ttuE*F!M7Huh!xvi2V-nRfw%Yz*vKdq^yCl3KfU43b;>kf25zA z9t3)qP(g2yPX+QbPw%m&)N05lg8n>~dL!sN_Z-1faDz>Eu|g`Yx4pPBsP1=K`;9zk zch#@SB9G5RyVtBHJGGBgAWL3yhZkS-%Jvk}r}1t{*-U-U$P41xN3^k}3na>7T3 el6=S0PyUNU83IUF__T61t(;Di;p7_~^}hjE@cF6$ diff --git a/dhgr.symbols b/dhgr.symbols new file mode 100644 index 0000000..50839a8 --- /dev/null +++ b/dhgr.symbols @@ -0,0 +1,212 @@ +sym CONFIG_DHGR = 0001 // # 6 +sym CH = 0024 // # 83 +sym CV = 0025 // # 84 +sym CH80 = 057B // # 85 +sym BASL = 0028 // # 86 +sym GBASL = 0026 // # 88 +sym GBASH = 0027 // # 89 +sym SCREEN_W = 0080 // # 93 +sym SCREEN_H = 0192 // # 96 +sym HPOSN = F411 // # 99 +sym TABV = FB5B // # 100 +sym HOME = FC58 // # 102 +sym SETTXT = FB39 // # 103 +sym SW_STORE80 = C000 // # 118 +sym SW_STORE81 = C001 // # 119 +sym SW_SET40COL = C00C // # 121 +sym SW_SET80COL = C00D // # 122 +sym SW_AUXRDOFF = C002 // # 124 +sym SW_AUXWROFF = C004 // # 125 +sym SW_ALTCHAR0 = C00E // # 127 +sym KEYBOARD = C000 // # 129 +sym KEYSTROBE = C010 // # 130 +sym SW_TXTCLR = C050 // # 132 +sym SW_TXTSET = C051 // # 133 +sym MIXCLR = C052 // # 134 +sym MIXSET = C053 // # 135 +sym PAGE1 = C054 // # 136 +sym HIRES = C057 // # 137 +sym SW_DHGR = C05E // # 138 +sym SW_SHGR = C05F // # 139 +sym SQUEEKER = C030 // # 141 +sym F8_Wait = FCA8 // # 142 +sym cursor_row = 00E2 // # 144 +sym SPRITE_BASE = 6000 // # 146 +sym zSpritePtr = 00F4 // # 147 +sym tempByte = 00F6 // # 148 +sym aux_ptr = 00F7 // # 149 +sym lastkey = 00F9 // # 150 +sym cursor_org = 00FA // # 151 +sym cursor_tmp = 00FB // # 152 +sym cursor_val = 00FC // # 153 +sym INPUT_X = 0002 // # 157 +sym INPUT_Y = 0007 // # 158 +sym SPRITE_Y = 0001 // # 162 +sym SPRITE_W = 0002 // # 163 +sym SPRITE_H = 0003 // # 164 +sym FLAG_FULL = 0001 // # 166 +sym FLAG_REGION_1 = 0002 // # 168 +sym FLAG_REGION_2 = 0004 // # 169 +sym FLAG_REG_EVEN = 0008 // # 170 +sym flags = 00FD // # 171 +sym temp = 00FE // # 173 +sym cursor_col = 00FF // # 174 +sym HGRPAGE = 00E6 // # 175 +sym MOV_SRC = 003C // # 178 +sym MOV_END = 003E // # 179 +sym MOV_DST = 0042 // # 180 +sym AUXMOVE = C311 // # 181 +sym MOVE = FE2C // # 182 +sym DhgrByte = 0900 // # 190 +sym GetByte = 0960 // # 247 +sym PutByte = 0968 // # 251 +sym Status = 096C // # 255 +sym BadInput = 0971 // # 258 +sym FlashByte = 0974 // # 260 +sym GetKey = 0977 // # 262 +sym LoadKeys = 0981 // # 267 +sym FindKey = 0983 // # 269 +sym GotKey = 098B // # 274 +sym TogBit = 09CA // # 337 +sym PutBits = 09D0 // # 343 +sym GotoPutByte = 09D4 // # 345 +sym ozunid_1 = 09D8 // # 358 +sym Nibble = 09DD // # 364 +sym NibbleInput = 09E7 // # 373 +sym Digit = 09F5 // # 384 +sym OldCursor = 09FA // # 388 +sym FLASH_TIME = 0018 // # 393 +sym UpdateInputCursor = 09FB // # 395 +sym NewCursor = 0A0A // # 402 +sym DisplayCursor = 0A17 // # 408 +sym DisplayInput = 0A24 // # 414 +sym OnGoto = 0A2F // # 423 +sym UpdateX = 0A47 // # 439 +sym ResetTimer = 0A4A // # 441 +sym GotoWaitKey = 0A52 // # 446 +sym GotoBadInput = 0A6E // # 464 +sym GotoInputNib = 0A74 // # 469 +sym GotoInputNextField = 0A89 // # 494 +sym GotoFieldY = 0A94 // # 502 +sym GotoInputAccept = 0AAB // # 515 +sym GotoInputCancel = 0AC3 // # 534 +sym OnResetRegion = 0AC5 // # 538 +sym RegionTrampoline1 = 0ADA // # 548 +sym ZeroRegion = 0ADC // # 551 +sym SetSprite1WH = 0ADE // # 553 +sym OnMarkRegion = 0AE5 // # 559 +sym NoRegion1 = 0AF7 // # 576 +sym DoneSprite = 0B06 // # 584 +sym NoRegion2 = 0B09 // # 587 +sym CalcWidth = 0B18 // # 596 +sym SaveWidth = 0B21 // # 602 +sym CalcHeight = 0B26 // # 607 +sym SaveHeight = 0B2F // # 613 +sym SetSpriteBase = 0B36 // # 619 +sym OnSaveSprite = 0B3F // # 627 +sym ValidDimensions = 0B47 // # 631 +sym CopySpriteMeta = 0B58 // # 642 +sym SaveRows = 0B63 // # 649 +sym SaveCols = 0B6F // # 656 +sym InvalidSprite = 0BA9 // # 691 +sym OnLoadSprite = 0BAC // # 698 +sym LoadRows = 0BD6 // # 721 +sym LoadCols = 0BE1 // # 728 +sym PutSpriteData = 0C08 // # 749 +sym GetSpriteData = 0C0E // # 754 +sym IncSpriteData = 0C13 // # 758 +sym SamePage = 0C19 // # 762 +sym IsHexInput = 0C1B // # 770 +sym NotHex = 0C3A // # 787 +sym HaveHex = 0C3B // # 789 +sym SoftBeep = 0C3D // # 794 +sym SoftCycle = 0C3F // # 796 +sym DrawStatus = 0C53 // # 811 +sym PrintNoRegion1 = 0CB7 // # 863 +sym DoneStatusLine1 = 0CBE // # 868 +sym PrintSpriteMeta = 0CC4 // # 878 +sym PrintSpace = 0CD8 // # 889 +sym PrintStatusLine2 = 0CDD // # 894 +sym HaveAuxMem = 0CF5 // # 909 +sym HaveMainMem = 0CFB // # 913 +sym HaveMemType = 0CFF // # 916 +sym PrintNoRegion2 = 0D3B // # 949 +sym DoneStatusLine3 = 0D42 // # 953 +sym PrintStatusLine3 = 0D42 // # 957 +sym PrintStatusLine4 = 0D67 // # 980 +sym PrintFooter2 = 0D7B // # 994 +sym PrintStringZ = 0DC7 // # 1043 +sym PrintString2 = 0DCF // # 1047 +sym PrintString3 = 0DDA // # 1053 +sym ReverseByte = 0DDB // # 1057 +sym ReverseBit = 0DE1 // # 1061 +sym PrintBitsNormal = 0DEC // # 1071 +sym PrintBitsReverse = 0DFB // # 1081 +sym PrintBitsReverse1 = 0DFF // # 1084 +sym PrintInverseByte = 0E0F // # 1096 +sym NibToInvTxt = 0E18 // # 1112 +sym PrintSave = 0E22 // # 1118 +sym Bit2Asc = 0E26 // # 1124 +sym FlipBit = 0E2C // # 1128 +sym GetHgrBaseAddr = 0E31 // # 1139 +sym GetCursorByte = 0E45 // # 1160 +sym GetCursorByteX = 0E47 // # 1169 +sym FlashCursorByte = 0E54 // # 1187 +sym SetCursorByte = 0E5A // # 1195 +sym PutCursorByteX = 0E5D // # 1205 +sym ClearText80 = 0E6E // # 1225 +sym ClearText40 = 0E77 // # 1229 +sym ClearTextPage = 0E7A // # 1232 +sym PrintDollar = 0E98 // # 1246 +sym PR_HEX = 0E9C // # 1249 +sym PRBYTE = 0EA3 // # 1254 +sym PR_NIB = 0EAC // # 1262 +sym COUT = 0EAF // # 1265 +sym Aux = 0EBA // # 1276 +sym Main = 0EBD // # 1278 +sym NibToAscTxt = 0EC8 // # 1294 +sym Init_Exit = 0ED3 // # 1305 +sym OnInit = 0EE7 // # 1331 +sym OnExit = 0F27 // # 1374 +sym DoneCopy = 0F49 // # 1396 +sym VTAB_COL0 = 0F5A // # 1418 +sym HTAB00 = 0F5D // # 1420 +sym HTAB = 0F5F // # 1422 +sym SetDst00 = 0F63 // # 1430 +sym DoneDst00 = 0F70 // # 1437 +sym gState = 0F71 // # 1443 +sym gCursor = 0F72 // # 1444 +sym gGotoNextX = 0F73 // # 1447 +sym gGotoNextY = 0F74 // # 1448 +sym gGotoField = 0F75 // # 1449 +sym gGotoTimer1 = 0F76 // # 1450 +sym gGotoTimer2 = 0F77 // # 1451 +sym gKeyGotoNextField = 0F78 // # 1453 +sym gKeyGotoCancel = 0F79 // # 1454 +sym gKeyGotoAccept = 0F7A // # 1455 +sym sTextSprite1 = 0F7B // # 1473 +sym sTextSprite2 = 0F87 // # 1476 +sym sTextSprite3 = 0F93 // # 1479 +sym sTextFooter2 = 0F9F // # 1483 +sym sTextFooter3 = 0FA5 // # 1487 +sym sMemTypeBeg = 0FBC // # 1498 +sym sMemTypeEnd = 0FC0 // # 1502 +sym sPixelFooter = 0FC4 // # 1519 +sym gSprite1X = 0FE4 // # 1533 +sym gSprite1Y = 0FE5 // # 1534 +sym gSprite1W = 0FE6 // # 1535 +sym gSprite1H = 0FE7 // # 1536 +sym gSprite1End = 0FE8 // # 1538 +sym gSprite1Len = 0FEA // # 1539 +sym gSprite2X = 0FEC // # 1541 +sym gSprite2Y = 0FED // # 1542 +sym gSpriteX = 0FEE // # 1544 +sym gSpriteY = 0FEF // # 1545 +sym gSpriteW = 0FF0 // # 1546 +sym gSpriteH = 0FF1 // # 1547 +sym gSpriteX2 = 0FF2 // # 1548 +sym gSpriteY2 = 0FF3 // # 1549 +sym aKeys = 0FF4 // # 1554 +sym eKeys = 101E // # 1607 +sym nKeys = 002E // # 1608 +sym aFuncLo = 101E // # 1612 diff --git a/hgrbyte.dsk b/hgrbyte.dsk index 12349fd511509470e2731ac24ef07e390dec77b1..b5be68756d0572f43a6deb14ea86812fe0de135a 100644 GIT binary patch delta 1237 zcmYjQZ%7+w7{5!SCh>BQ9olByA6~F?L@3xV#cfEZU72P#uyljzIt`N!aoxbFb( z{XOsdyzkGuWbrOpqBm?M^+n8;a)vq0{K;5b%6Z#&5!ats6{CoYo zZfynZNig2U#fjUXB|+Q);yG6=Gm{A*7H)OPtnX>tK+f{xD=?OTA@VAZ{^?nLZ)+QV z+5v3`^oPT{xAuao5LkoYIs`VLTHAm%x3~e?I;=6`ItXs7&}k*-iV4r<-xJ3+UP_rPkfuR!|ed}(i`%7`l{$~#T}tj9Rm#(Upo54fYp>c_=31f$o!x=-TKm5 zo?PU8k9|kvG8a0AOC@jc|L)|9Tsd2{vA7HRfoiRve72+>FKsg~Gj7!@%nyE(ZZTg6 z{gAd*&Ndakf33mwn()>&rz%l?}F^Zgebq%B<7#FjtZ_K(X?T|kciAaXIWH6~t) zkq^Tco7me`q=FxE&FX)lY}&Ew^)7sfgKu|&wQA(`>GQI>Rm**Q`Jos%+TK$dek5DZWIN&P!croI?dn5fW}%8 zJKRCt9{Aag!aMc5QAi?T{cZNi;}!gSnOS7dV4`eM_D2S5+3aBSfqC#1Ha*qX<6>yDEfQQLNx?-Zzai7Lb^&~D#hT-G*)KZx~npGANHxX>*I!#vb)XJlguqofl5V0yZt4UOz zbcZt#S_1JrH^y0m<%!DGTzCya>oC@`k%5Gzvoe_vXJNc$W2uU+ErgcAuPa`e87&1K zd9^G!m%(@+Ta*f*`IbQ{0(oh#!pvrXSonO_s+Y6^kfXwM7N#;VPTBs&>8 z2uLBmFTGfVc#bwwtr)LJdFq=K;s64TE&4E^dlA=0=<_o!6+TTBKo6X?SP|!h;~Qp$mX{ z$S$Wb$%bvx#3!24AA<30`Xeyf(-*;bhrG>J}O)s3&qsn3vf)LK6K+EIbD z3c<(0U2=kt?7>#a+rqzpa#}f(YA)X21btiOI%ZuB9e8w42@2y?{bD-$W%-Qt0_Zz* ztV*RjW_yp_iFUCzTWjD=7wL`h-Rz;KdO?0;^jM&Elu|&R_(9^6(%GbRGD-Sk$Gh1Z z%>(Bt+p$dbu+ps0B z5LBVB_Q8bEN4}3u_poigUTDEOsyA>fh-F)_Y_$bYKCfyazC*aG40rx7L#xrKtx*}y zP#LaM8P14vymDCvao(x!ry^@4-Jo2lCP6hQvV4ceE>mj(E%g8mdfJCk@rrwo!{L~e z?Xz=$?dLzyw^TPe)Okesr>d9gm!YpIWYnK)G>QQ!lmc~}pz&Mi&{z(!%NtHPLq9oD za0h=gY{=*Jl2@?@&ES^J>`&=CL9;`#$DcF_5k4?eSkc5FWVWs$Gww-6+t^Ap@w+wp L7F(V;!`}J_8Os+f diff --git a/src/dhgr.byte.s b/src/dhgr.byte.s index 3438213..d346f90 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 31 +; Version 32 ; ; TL:DR; ; IJKL to move @@ -189,7 +189,7 @@ __MAIN = $900 ORG __MAIN DhgrByte - LDA #31 ; Version - copy HGR1 to aux, HGR2 to HGR1 + LDA #32 ; 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 CLC BCC _Center @@ -716,6 +716,7 @@ OnLoadSprite LDA cursor_row STA gSpriteY + STA temp ; saved cursor_row since HPOSN updates it LoadRows ; Y -> Source Address @@ -740,6 +741,8 @@ LoadCols LDA gSpriteH BNE LoadRows + LDA temp ; move cursor back up to the original location + STA cursor_row ; before we were called JMP GetByte ; --- Sprite ---