From d8f3e88ddff81c0e02ee30a16afb5da8fbd00fa4 Mon Sep 17 00:00:00 2001 From: Michaelangel007 Date: Thu, 26 Oct 2017 16:33:56 -0700 Subject: [PATCH] Ver 27 --- README.md | 9 ++ bin/dhgr.byte | Bin 872 -> 1000 bytes hgrbyte.dsk | Bin 143360 -> 143360 bytes src/dhgr.byte.s | 289 ++++++++++++++++++++++++++++++++++++------------ 4 files changed, 228 insertions(+), 70 deletions(-) diff --git a/README.md b/README.md index e5a6f3c..2cc79d6 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,15 @@ 1. Start AppleWin 2. F3 to select Slot 6, Drive 1 3. Open: `hgrbyte.dsk` +4. Select BASIC.SYSTEM +5. `BLOAD TUT.DHGR` +6. `BRUN DHGR.BYTE` + +Ver 27. +- Ripped out ROM output routines and replaced with native code for speed +- Updated the status bar so that the saved bits and revers are displayed +- Added x/2 byte column output +- Shortened memory bank indicator "AUX/MAIN" to "A/M" # Keys: diff --git a/bin/dhgr.byte b/bin/dhgr.byte index 9432a11e40f2796dee7e0f88581ca48273a7039e..50638db9763bd010b68369cbe65d07fccbdddbda 100644 GIT binary patch delta 711 zcmYL_Ur1A77{-rhf7J6GjUaUz(MN()n6du45>W|cj$I@fg+-kkV|f#F5uz6^*rcKp z4sSX^a5!{epD~=Dk$=v*^Php8MAh`bTkz%t zQiUOMlJSD)ZwSb!S-U;PYj;!;*CHa~E>Y_PJyMJG99|cSNja@7m=9*H`GI947tFi0 zGChx5(T)7FktKP^1dt5_dF)v>b_uKIgBp_C0}pNn(~Kli%^DnF7bI2m!nGO(4gt^$ zO(sDQCe*UjkO<3L_gajs^ymnBSP%asRkyZdWz_gCHSH^RE}b3Yx6c5Ono4$fa<@C` zWnX0*2uDrhm3;MxCA2GBXsAIpQwanfM4*ToRyecbH!GY)@mmzms`#x6SE~3+7wMp} zDY;3C^)7aPj(l(`x->h+-?a9vO+g?+0&PL?F7Rr{Xj`B?@Mi`ixq|u+7s>x=ag$9&DqpAg7Lt4D z_*35Au{!s5VV0XoPAB5Asi=DF_=%IJPPe$YlF3)x+++opo|?+UVzEdp9gk-ciAW-m zo}SJmBgtekJu{PujMtg$_7^sr!`a)~zB`)8=pRYXrwO}7uQ~|zgbz` G{rMYA3@dQ} delta 600 zcmYL_+iMd+6vnqn8`GVr_+X4yVNgg24YaymQl(nahcx6tu-HD?eW`^06RD65A}kpC zB0^yZE_7Ogo7)Bpu@hR+rl>2mr8NYl-nIpy587z5**Keu4xHh9=l7lAoYD4awxiey zIp7;2z8l1MllX>-c$E;U`_vIQ{-=IJ(=S_Ch(k9PHk)PySyjHm-|&`a90z*>RYG~U~`W5IU^{VM?(Dhq7yL|db-m>> z-LHyEugj@aC7n*AbUBl$WV0xnE$4C-1u2SB&gUy=@{!f!dDhj{!wp{^x-@#dC&Zbt arG5MQ<@2Y_?u8f2%ayku-o06?>3;ww$T0N) diff --git a/hgrbyte.dsk b/hgrbyte.dsk index e27a8aa5eb08ea34040d730b7f54d56a603b1cbb..9e57e0c5c6d4161df7e909fb3e81d31eec86ebf1 100644 GIT binary patch delta 791 zcmYLHZAep57{2>--h2H5Kc-O~S~v$YX7;g?kwcI<79?4LMcqHf@=wr@5dGmTHnHf& zWPiFrbh&k7#~7R2oL~&DSfFCD5TcwTKPvP`;h(0PbGLJo?7)HNc@F1!-}gC(Ue?je zy6|(nd|icIHelFMYz-^!Hh_v~2=Dya>}k^j7YQn+nG%scJY@5n^R!u!!nMkHX#bQH znHwUwO)#CJ|5?`9x-j+W-6S>?6)M3}V`J$^Bod6I zqS16L7L3JGf$QGj!N9q~1NFf0F2!tRPU@yl(|o0y_ymqecV?umt1~f?s61x=&xq)QG4cIrTmDfFt0fEahb+ zUqDE}fg1-KxGRUlD%mn5>yq=Ii69L+!)pGHPs!iqNKi{a5rQ&x8UG)LIJc8Hw$yg3@ji|BxC|edE%T)Zb7*q!U?fO*2)C7LgY=8K~FipX3SnG%2PZV%B;c=O&JP=$j_{s+5;nx|xP j8x}hfQ=|h;cNP5#3ev85|Mad+<=f)qOz%stBt_F7%b89P delta 575 zcmXAlU1-x#6vvb9gEY5(p>}1{aot8sS)r4@Y)W;-J+x9`>Tsgq@}d;qeO{ENh>+sQ ziwMO~i7b`6^kW@9RPNYN=TIv+8I)piesqPx9(3#0WbvkbIB@>wcmC(zbJ#M)mMP^K zeK^!cTQeuuu|(r*((pO;3;8 zGkI>}?9`Y$=rLlm^5^%jpBq00m)@TR)>4>R6^_$kDb2#z%1bye`x9aJ)zoWqe6PDOjI zi)-smVH7_uu6!z{Ql)hIxsN2{4N@SZwm$h7dVjJff_A{ETm#x@XcZz_e^Hq)$ diff --git a/src/dhgr.byte.s b/src/dhgr.byte.s index f4ea6b1..4bb5eb8 100644 --- a/src/dhgr.byte.s +++ b/src/dhgr.byte.s @@ -1,12 +1,12 @@ ; Merlin32 CONFIG_DHGR = 1 +CONFIG_BIOS = 0 ; 1=Use slow ROM for text, 0=Use native code for COUT, HOME ; DHGR Byte Inspector -; https://github.com/Michaelangel007/apple2_hgrbyte/ -; ; Michael Pohoreski -; Version 22 +; https://github.com/Michaelangel007/apple2_hgrbyte/ +; Version 27 ; ; TL:DR; ; IJKL to move @@ -62,6 +62,8 @@ CONFIG_DHGR = 1 ; = Set cursor byte from temporary ; ; TODO: +; ? Help screen +; col/2 ; Z = clear aux mem ; X = swap aux/main mem ; M = mark begin/end -- show width,height,x,y @@ -73,6 +75,7 @@ CONFIG_DHGR = 1 CH = $24 ; 40-col text cursor column CV = $25 ; 40-col text cursor row CH80 = $57B ; 80-col text cursor column +BASL = $28 ; 16-bit pointer to start of TEXT row GBASL = $26 ; 16-bit pointer to start of D/HGR scanline GBASH = $27 @@ -96,13 +99,17 @@ SETTXT = $FB39 ;CR = $FC62 ;CROUT = $FD8E ; Output CR -COUT = $FDED ; Char Output aka putch() + DO CONFIG_BIOS PR_HEX = $FDD3 PRBYTE = $FDDA +COUT = $FDED ; Char Output aka putch() + ELSE + FIN +; When Store80 OFF aux mem determined by AUXRDON/AUXWRON ; When Store80 ON, Page 2=ON, read/writes touch aux mem -SW_STORE80 = $C000 ; STA $+0 OFF, $+1 ON -SW_STORE81 = $C001 ; $C055 = page 2 +SW_STORE80 = $C000 ; use $C002 .. $C005 for aux mem +SW_STORE81 = $C001 ; use page 2 = $C055 for aux mem SW_SET40COL = $C00C ; 40-col mode SW_SET80COL = $C00D ; 80-col mode @@ -123,6 +130,8 @@ SW_DHGR = $C05E ; Mode DHGR SW_SHGR = $C05F ; Mode SHGR cursor_row = $E2 ; used by Applesoft HGR.row + +tempByte = $F6 ; forward bits for pixel print aux_ptr = $F7 ; copy of GBAS but points to HGR2 $40xx..$5Fxx lastkey = $F9 cursor_org = $FA ; When cursor is saved @@ -133,7 +142,7 @@ FLAG_FULL = $01 ; == $1 -> $C052 MIXCLR ; ; == $0 -> $C053 MIXSET flags = $FD ; -temp = $FE +temp = $FE ; reverse bits for pixel print cursor_col = $FF ; x2 for DHGR HGRPAGE = $E6 ; used by Applesoft HGR.page ; $20=MAIN, $40=AUX @@ -149,7 +158,7 @@ __MAIN = $900 ORG __MAIN DhgrByte - LDA #22 ; Version - copy HGR1 to aux, HGR2 to HGR1 + LDA #27 ; 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 BIT PAGE1 ; Page 1 @@ -160,7 +169,6 @@ DhgrByte DO CONFIG_DHGR STA SW_DHGR ; $C05E DHGR, not HGR STA SW_SET80COL ; $C00D 80-col on - STA SW_STORE80 ; Turn off for app FIN BRA _Center @@ -206,8 +214,6 @@ _EdgeU LDA #00 STA cursor_row ADC #1 BNE GetByte ; always - - _Center LDA #WIDTH/2 STA cursor_col @@ -234,7 +240,9 @@ GetByte ; Cursor position changed PutByte STA cursor_val ; current value STA cursor_tmp ; flashing cursor + JSR DrawStatus +; STA SW_STORE80 FlashByte JSR FlashCursorByte GetKey @@ -367,32 +375,12 @@ Digit ; ------------------------------------------------------------------------ DrawStatus +; STA SW_STORE81 ; COUT uses LDA #20 ; Cursor.Y = Top of 4 line split TEXT/HGR window JSR VTAB_COL0 ; Cursor.X = 0 LDA #'X'+$80 ; X=## Y=## $=####:## JSR COUT - - DO CONFIG_DHGR - LDY #8 ; src = &char[1][8] - LDA cursor_col - CLC - ROR - BCS HaveMainMem -HaveAuxMem - LDY #0 ; src = &char[0][8] -HaveMainMem - - LDX #0 ; dst = 0 -CopyMemType - LDA sMemType,Y - STA sTextFooter,X - INY ; src++ - INX ; dst++ - CPX #8 - BNE CopyMemType - FIN - LDA cursor_col JSR PR_HEX LDA #' '+$80 @@ -416,15 +404,65 @@ CopyMemType JSR PRBYTE LDA #':'+$80 JSR COUT + LDA cursor_val JSR PRBYTE LDA #' '+$80 JSR COUT + LDA cursor_val + JSR ReverseByte + JSR PrintStatusLine2 + JSR PrintStatusLine3 + JMP PrintStatusLine4 + +; --- Status Line 2 --- +PrintStatusLine2 + LDA #21 ; Cursor.Y = 21 + JSR VTAB_COL0 + + DO CONFIG_DHGR + LDA #'/' + $80 + JSR COUT + LDA cursor_col + LSR + JSR PR_HEX + LDA #' '+$80 + JSR COUT + + LDA cursor_col + LSR + BCS HaveMainMem +HaveAuxMem + LDX #sMemTypeBeg + JSR PrintStringZ + FIN + + LDA #12 + JSR HTAB + + LDX #sTextFooter2 + JSR PrintStringZ + + LDA cursor_org + JSR PrintInverseByte +; JSR PRBYTE + LDA #' '+$80 + JSR COUT + LDA cursor_org +; intentional fall into ReverseByte + +; ---------- ReverseByte LDX #8 - LDA cursor_val STA temp + STA tempByte ReverseBit ASL temp ROR @@ -445,22 +483,24 @@ PrintBitsNormal LDA #'~'+$80 JSR COUT - LDX #8 - LDA cursor_val PrintBitsReverse + LDX #8 + LDA tempByte +PrintBitsReverse1 TAY JSR Bit2Asc TYA LSR DEX - BNE PrintBitsReverse + BNE PrintBitsReverse1 LDA #'$'+$80 JSR COUT PLA ; restore reverse byte JSR PRBYTE + RTS - LDA cursor_org ; X=0 +PrintInverseByte PHA LSR LSR @@ -469,22 +509,25 @@ PrintBitsReverse JSR NibToInvTxt PLA JSR NibToInvTxt + RTS - LDA #21 ; Cursor.Y = 21 - JSR VTAB_COL0 - LDX #0 -PrintFooter1 - LDA sTextFooter, X - BEQ _DoneStatus - JSR COUT ; 4 line text window, 2nd row - INX - BNE PrintFooter1 ; (almost) always -_DoneStatus - -; Draw pixel grouping +; --- Status Line 3 --- +PrintStatusLine3 LDA #22 JSR VTAB_COL0 + LDA #20 + JSR HTAB + + LDX #sTextFooter3 + JMP PrintStringZ + +; --- Status Line 4 --- +; Draw pixel grouping +PrintStatusLine4 + LDA #23 + JSR VTAB_COL0 LDA #29 JSR HTAB @@ -504,6 +547,22 @@ PrintFooter2 BNE PrintFooter2 RTS +; IN: +; X=Lo +; Y=Hi +PrintStringZ + STX PrintString2+1 + STY PrintString2+2 + LDX #0 +PrintString2 + LDA $DA1A, X + BEQ PrintString3 + JSR COUT ; 4 line text window, 2nd row + INX + BNE PrintString2 ; (almost) always +PrintString3 + RTS + ; Display nibble as inverse text ; 0 -> '0' $30 ; 9 -> '9' $39 @@ -516,8 +575,9 @@ NibToInvTxt BCC PrintSave SBC #$39 ; C=1, $3A ':' -> $01 'A', $3F '?' -> $06 PrintSave - STA sTextFooter+17,X ; VTAB 21:HTAB 17 and 18, Update Saved Byte - INX + JSR COUT +; STA sTextFooter+17,X ; VTAB 21:HTAB 17 and 18, Update Saved Byte +; INX RTS Bit2Asc @@ -545,7 +605,7 @@ GetCursorByte ; Main Aux TAY ; y = byte column BCS _get_main _get_aux - STA SW_STORE80 +; STA SW_STORE80 LDA (aux_ptr),Y DB $2C ; OPTIMIZAITON: BRA _get_val -> BIT $abs - BIT $26B1 _get_main @@ -579,7 +639,7 @@ SetCursorByte TXA ; pop byte BCS _set_main - STA SW_STORE80 +; STA SW_STORE80 STA (aux_ptr),Y ; Shadow copy to HGR2 STA SW_AUXWROFF+1 ; Write AUX _set_main @@ -590,20 +650,86 @@ _set_main STA SW_AUXWROFF ; Write MAIN RTS - +; ======================================================================== + DO CONFIG_BIOS + ELSE +ClearText80 + STA SW_AUXWROFF+1 + JSR ClearText40 + STA SW_AUXWROFF +ClearText40 + LDA #' '+$80 ; NORMAL SPC + TAY +ClearTextPage + STA $400,Y + STA $480,Y + STA $500,Y + STA $580,Y + STA $600,Y + STA $680,Y + STA $700,Y + STA $780,Y + INY + CPY #$78 + BNE ClearTextPage + RTS +PR_HEX + PHA + LDA #'=' + $80 ; normal + JSR COUT + PLA +PRBYTE + PHA + LSR + LSR + LSR + LSR + JSR PR_NIB + PLA + AND #$0F +PR_NIB + ORA #'0' + $80 + CMP #':' + $80 + BCC COUT + ADC #$06 +COUT + PHY + DO CONFIG_DHGR + PHX + TAX ; push char + LDA CH80 + LSR + TAY ; Y = col/2 + TXA ; pop char + BCS Main +Aux + STA SW_AUXWROFF+1 ; Write AUX +Main + ELSE + LDY CH + FIN + STA (BASL),Y + DO CONFIG_DHGR + STA SW_AUXWROFF ; Write MAIN + INC CH80 + PLX + ELSE + INC CH + FIN + PLY + RTS + FIN ; ======================================================================== ; Common code -- called by Init, Exit Init_Exit - STA SW_SET80COL - DO CONFIG_DHGR + STA SW_STORE80 ; Turn off for AUXMOVE + STA SW_ALTCHAR0 ; Turn off mouse-text + STA SW_AUXRDOFF STA SW_AUXWROFF - STA SW_STORE80 - STA SW_ALTCHAR0 ; Turn off mouse-text - LDX #$20 LDY #$40 @@ -648,6 +774,9 @@ OnInit CLC ; C=0 Aux to Main JSR SetDst00 ; C=0 don't do MOVE JSR AUXMOVE + + STA SW_SET80COL + BRA DoneCopy ; "Unlinearize" interleaved AUX/MAIN memory @@ -672,12 +801,17 @@ OnExit STA SW_SET40COL ; $C00C STA SW_DHGR+1 ; $C05F DHGR off - STA SW_STORE81 ; Enable Page 2 switching +; STA SW_STORE81 ; Enable Page 2 switching DoneCopy FIN + DO CONFIG_BIOS JSR SETTXT JSR HOME + ELSE + JSR ClearText80 + STA TXTCLR+1 + FIN LDX #$20 STX HGRPAGE @@ -718,11 +852,20 @@ DoneDst00 ; ======================================================================== -sTextFooter +sTextFooter2 ; 1 2 3 ; 0123456789012345678901234567890123456789 + ; 1 2 + ; 0123456789ABCDEF0123456789ABCDEF01234567 ; "X=## Y=## $=####:## %%%%%%%%~%%%%%%%%$00" - ASC "---/---- SAVE:?? 76543210 " + ; "/=## A/M SAVE:?? %%%%%%%%~%%%%%%%%$00 + ; " 76543210 12345678 + ; " [11]222- + ASC "SAVE:" + DB $00 + +sTextFooter3 + ASC "76543210 " INV "12345678" ;1-8 INVERSE ; DB '1' & $3F ; DB '2' & $3F @@ -734,10 +877,16 @@ sTextFooter ; DB '8' & $3F DB $00 -; char [2][8] -sMemType - ASC "AUX/----" - ASC "---/MAIN" +; char [2][3] +sMemTypeBeg + INV "A" + ASC "/M" + DB $00 +sMemTypeEnd + + ASC "A/" + INV "M" + DB $00 ; These alternative text groupings ; don't look as good in DHGR 80-col text mode @@ -751,10 +900,10 @@ sMemType ; 12345678123456781234567812345678 ; Show which pixel group the bits belong to sPixelFooter - ASC "[11]222 " - ASC "2[33]44 " - ASC "44[55]6 " - ASC "666[77] " + ASC "[11]222-" + ASC "2[33]44-" + ASC "44[55]6-" + ASC "666[77]-" ; ------------------------------------------------------------------------