From 1a91c374f077a7849d300f941b1b9a071fa11a29 Mon Sep 17 00:00:00 2001 From: Michaelangel007 Date: Mon, 17 Jul 2017 20:12:41 -0700 Subject: [PATCH] Optimized size to 682 --- README.md | 4 +-- linuxlogo | Bin 696 -> 682 bytes linuxlogo.s | 97 +++++++++++++++++++++++----------------------------- ll_6502.dsk | Bin 143360 -> 143360 bytes 4 files changed, 44 insertions(+), 57 deletions(-) diff --git a/README.md b/README.md index 1abd6dd..706282d 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ Linux Logo in 6502 assembly language. -Size: 692 ($2B4) bytes +Size: 682 ($2AA) bytes # Screenshots @@ -23,7 +23,7 @@ Size: 692 ($2B4) bytes * Cleaned up fugly logo by Albert Lai * Logo is 70 chars wide * Logo is bit packed 2 bits/char; expands 70 chars * 4 px = 280 px - * Logo takes up 70*12*2/8 = 210 bytes compared to 80*12 = 960 bytes + * Logo takes up 70*12*2/8 = 210 bytes compared to 79*12 = 948 bytes * X is now symmetrical * Fixed L,i,n kerning * Fixed x Penguin kerning diff --git a/linuxlogo b/linuxlogo index 6d1716f06ef580062fa0883925104c8b788de9f3..9df7d8a847eeab0c5dcb426d0ac23c68a401b919 100644 GIT binary patch delta 272 zcmdnNx{7szir6u(p5t7-C%9HF=$*>7XxoCVebcylrcbm|t6#>|x16hI1=j_cwFiEG zU_1HX!h;VyD-n- zwfPjMWN_)(WYhjiU;pwxG3+qza6skvb-SvXG6 z`|t+I;Lzak45{OdqzbLS`^g2+1)>2U*$It-z>R^xsRxB6sQ{>|h5fDO3Wff;=L&`Y zsQ`uiAm0hF6h{AM{zm_1{-yjFX#&Xz(CEm}-l6~?!TX>9y>1GTDCo$*DA4uhC8Z_F z7trX&C8?{O)(T*MhWUj0rTz*EMgA!aMgA!dq5y{brv2~+3MTu?(E17{`#5T({lEjJ z`5n+dozOp!Lg$SmB_Lf2q6eTSxzIn6CW_Dlnb1Fo z5b_wMCuszQCx-dT5ah_ECCL=943GrK$jHcq{igY(`e3CGB_P53r6`3ar70L`9EB&d HUja)2S_z%< diff --git a/linuxlogo.s b/linuxlogo.s index a27a822..b7eee78 100644 --- a/linuxlogo.s +++ b/linuxlogo.s @@ -8,9 +8,9 @@ zCursorY = $25 ; CH zHgrPtr = $26 ; GBASL = Dst zTxtPtr = $28 ; BASL = Dst -zSaveX = $F9 +zDstOffset = $F9 ; unpack[ iDst ] zSaveY = $FA -zMask = $FB ; 16-bit but Acc has low +zMask = $FB ; adjacent byte for next pixels zSrcShift = $FC ; i mod 8 zDstShift = $FD ; i mod 7 zUnpackBits = $FE ; 16-bit unpack @@ -34,7 +34,7 @@ MACHINEID2 = $FBC0 MACHINEID3 = $FBBF ; //c version ; Config -UnpackAddr = $3FD0 ; Y=191, $28 bytes at Keyboard buffer +UnpackAddr = $3FD0 ; Y=191, $28 bytes CONFIG_PROBE_CPUINFO = 1 CONFIG_PRINT_CPUINFO = 1 @@ -168,13 +168,13 @@ Unpack jsr AS_HGR ; *** DEBUG *** FIN - lda #7 ; will INC, $0428 (Text) + $1C00 => $2028 (HGR) - sta zCursorY ; Start Row=8 -DrawRow + lda #7 ; will INC, $0428 (Text) + $1C00 => $2028 (HGR) + sta zCursorY ; Start Row=8 lda #0 tay - tax ; DstOffset within page + tax ; SrcShift=0 sta zDstShift + sta zDstOffset lda PackedBits sta zUnpackBits+0 @@ -182,9 +182,9 @@ DrawRow NextSrcShift lda PackedBits+1,Y sta zUnpackBits+1 - lda #0 + ldx #0 UpdateSrcShift - sta zSrcShift + stx zSrcShift jsr Unpack2Bits ; hhggffee C=? ddccbbaa bcs UnpackDone @@ -194,13 +194,13 @@ UpdateSrcShift lsr zUnpackBits+1 ; 00hhggff C=e eddccbba ror zUnpackBits+0 ; 00hhggff c=e eeddccbb - lda zSrcShift - clc - adc #2 - cmp #8 ; have 8 input bits? + ldx zSrcShift + inx + inx + cpx #8 ; have 8 input bits? bne UpdateSrcShift iny ; src++ - bne NextSrcShift + bne NextSrcShift ; always, since packed data length < 256 UnpackDone @@ -208,9 +208,10 @@ UnpackDone DO CONFIG_PRINT_CPUINFO + txa ; (2) A=0 from (1) Unpack2Bits ldx #0 PrintText - jsr BASCALC ; + jsr BASCALC ldy #0 CopyTextLine lda TextLine,X @@ -245,7 +246,6 @@ ModelPlus Unpack2Bits ; DoublePixel - stx zSaveX sty zSaveY lda zUnpackBits @@ -259,46 +259,44 @@ Unpack2Bits ldx #0 stx zMask - ldx zDstShift + ldy zDstShift ; beq NoShiftSherlock MakeShiftMask asl rol zMask - dex + dey bne MakeShiftMask NoShiftSherlock asl ; msb of byte0 set? rol zMask ; shift in to lsb of byte1 - sec ; MSB=1 color=blue/orange ror - - ldy zDstShift ; x={0,1,2} + 4 < 7 - cpy #3 ; all bits fit into dest byte? - - ldx zSaveX + ldx zDstOffset ora UnpackAddr,X ; do all bits that fit sta UnpackAddr,X - bcc UpdateDestOffset + + lda zDstShift ; x={0,1,2} + 4 < 7 + clc + adc #4 + cmp #7 ; all bits fit into dest byte? + bcc FitSameByte ; Update partial next byte of dest - inx - stx zSaveX - cpx #$28 ; C = x < 28 + ; x = x + 4 - 7 + ; x = x - 3 + sbc #7 ; C=1 + tay ; push zDstShift + inx + stx zDstOffset lda zMask - ora #$80 ora UnpackAddr,X sta UnpackAddr,X - ; x = x + 4 - 7 - ; x = x - 3 - ldy zDstShift - dey - dey - dey - bcc LineNotDone ; C = x < 28 + tya ; pop zDstShift + cpx #$28 ; C = x < 28 + bcc FitSameByte ; C = x < 28 ; ------------------------------------------------------------------------ ; Copy Buffer to HGR @@ -339,27 +337,16 @@ CopyNextByte adc #$04 sta zHgrPtr+1 - stx zSaveX ; X=0 last loop iteration + stx zDstOffset ; X=0 last loop iteration + txa ; A=0 zDstShift dex bpl Draw8Rows - iny ; Y=0 -> zDstShift - - lda zCursorY - cmp #$14 ; Y=$40 .. $A0, Rows $8..$13 (inclusive) - bcs OuputDone - bcc LineNotDone ; Next Scan Line, start at dst bit 0 - -UpdateDestOffset ; C=0 from NoShiftSherlock - iny - iny - iny - iny -LineNotDone - sty zDstShift - ldx zSaveX ; NOTE: C=0 from CMPs above - ldy zSaveY -OuputDone + ldx zCursorY ; (3) X=13 + cpx #$14 ; Y=$40 .. $A0, Rows $8..$13 (inclusive) +FitSameByte + sta zDstShift + ldy zSaveY ; NOTE: C=0 from CMPs above rts @@ -400,7 +387,7 @@ TextLine ;0123456789012345678901234567890123456789 ; NOTE: Generated by ascii2hgr2bit ; ASCII: 70*12 = 840 chars -; Packed 2bits/2pixel: 70 chars * 2 bits/char / 8 bits/byte = 140 bits / 8 = 17.5 bytes +; Packed 2bits/2pixel: 70 chars * 2 bits/char / 8 bits/byte = 140 bits / 8 = 17.5 bytes/scanline ; 840 chars * 2 bits/color / 8 bits/byte = 210 bytes PUT packedlogo.s diff --git a/ll_6502.dsk b/ll_6502.dsk index fef23a40b53d3aba88f8d781f5be0d6a702a7929..f6e293b017d7b9c52147b89fde3d1202af8a6772 100644 GIT binary patch delta 287 zcmV+)0pR|C;0S==2!ON!0&15GY60|<5DE&GYXJr%ruiMvKb_D&rTrLb1jz@GNa+Wt z=!W^F`yJ3fozOp+;3$wamnv%kEeeXt5aXsL;1q@ZmuqVQm6r`%0SW^E396R^Yyl+} z#tMwb3XRALsi2LO3Zk~4wT_kwjF*=_UI8Y5rV5Uy3XG@<&>XG6`|t+I;Lzak45{Od zmI|%E`^g2+1)>2U+X;<R^xsRxB6sQ{>|h5d#3t=I~M{<+x-h5w=ehWsGm39u7J z|7QM1|7QNC{OIW52+--s(BF!p03gBppa8vK3Xv%2$iOJj_2wm|CCL}i=*A_ftDVRk l3Sfl#rTz*EMgA!aMgA!dq5y{br2X&)3MTuAxBqMb0mGs>j9~x( delta 233 zcmVJYXJr%r2W7HruiMvKb_D&kWc7_`QRv} z`w4&@&_A8fKcxMLh=`Cqmnv%kEfmTSy3aOxtp9-S3ptX*m3XGwbK3)MP8L$eDu?mc`3eX&_!29q9$>7l7 z@C>Qrji8r(UI88k;tGZSx#O3iUI8dJY6_7k=*Yk*(Dmjer6tK1(CEe`sjHpR3Sfr$ jg!-la3JOL3DGWvaDG#CmhWn=d@CFJd`^vZfYyknodc$wn