mirror of
https://github.com/Michaelangel007/6502_linux_logo.git
synced 2024-12-27 12:29:18 +00:00
Cleaned up comments, size 681 bytes
This commit is contained in:
parent
06f11ffc22
commit
99cd56e160
@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
Linux Logo in 6502 assembly language.
|
Linux Logo in 6502 assembly language.
|
||||||
|
|
||||||
Size: 682 ($2AA) bytes
|
Size: 681 ($2A9) bytes
|
||||||
|
|
||||||
|
|
||||||
# Screenshots
|
# Screenshots
|
||||||
@ -55,7 +55,7 @@ Note: Lowercase doesn't display properly on \]\[.
|
|||||||
|
|
||||||
![Apple \]\[+](pics/ll_6502_2plus.png)
|
![Apple \]\[+](pics/ll_6502_2plus.png)
|
||||||
![Apple //e ](pics/ll_6502_2e.png)
|
![Apple //e ](pics/ll_6502_2e.png)
|
||||||
|
![79x12 Logo ](pics/original_linux_logo_79x12.png)
|
||||||
|
|
||||||
# License
|
# License
|
||||||
|
|
||||||
@ -63,3 +63,6 @@ Note: Lowercase doesn't display properly on \]\[.
|
|||||||
|
|
||||||
If you use code, please provide a comment link so people can follow it for updates.
|
If you use code, please provide a comment link so people can follow it for updates.
|
||||||
|
|
||||||
|
# Tools used
|
||||||
|
|
||||||
|
* [Merlin32]()
|
||||||
|
69
linuxlogo.s
69
linuxlogo.s
@ -5,21 +5,21 @@
|
|||||||
; Zero Page ROM vars
|
; Zero Page ROM vars
|
||||||
zCursorX = $24 ; CH
|
zCursorX = $24 ; CH
|
||||||
zCursorY = $25 ; CH
|
zCursorY = $25 ; CH
|
||||||
zHgrPtr = $26 ; GBASL = Dst
|
zHgrPtr = $26 ; GBASL = Dst Pixel Addr
|
||||||
zTxtPtr = $28 ; BASL = Dst
|
zTxtPtr = $28 ; BASL = Dst
|
||||||
|
|
||||||
zDstOffset = $F9 ; unpack[ iDst ]
|
zDstOffset = $F9 ; dst
|
||||||
zSaveY = $FA
|
zSrcOffset = $FA ; src
|
||||||
zMask = $FB ; adjacent byte for next pixels
|
zMask = $FB ; adjacent byte to write next pixels
|
||||||
zSrcShift = $FC ; i mod 8
|
zSrcShift = $FC ; Input Bit Position = i mod 8
|
||||||
zDstShift = $FD ; i mod 7
|
zDstShift = $FD ; Output Bit Position = i mod 7
|
||||||
zUnpackBits = $FE ; 16-bit unpack
|
zUnpackBits = $FE ; 16-bit unpack
|
||||||
|
|
||||||
; ROM
|
; ROM
|
||||||
HOME = $FC58
|
HOME = $FC58
|
||||||
IB_HGR = $D000 ; Integer BASIC ][ only
|
IB_HGR = $D000 ; Integer BASIC ][ only
|
||||||
AS_HGR = $F3E2 ; Applesoft BASIC ][+ or newer
|
AS_HGR = $F3E2 ; Applesoft BASIC ][+ or newer
|
||||||
BASCALC = $FBC1 ; A=Row, Calculate BASL,BASH text address
|
BASCALC = $FBC1 ; A=Row, Calculate BASL,BASH text start-of-line address
|
||||||
|
|
||||||
;Bank Addr -- Addr Bank Read --- Write -------
|
;Bank Addr -- Addr Bank Read --- Write -------
|
||||||
; 2 $C080 == $C088 1 Read RAM Write protect
|
; 2 $C080 == $C088 1 Read RAM Write protect
|
||||||
@ -34,7 +34,7 @@ MACHINEID2 = $FBC0
|
|||||||
MACHINEID3 = $FBBF ; //c version
|
MACHINEID3 = $FBBF ; //c version
|
||||||
|
|
||||||
; Config
|
; Config
|
||||||
UnpackAddr = $3FD0 ; Y=191, $28 bytes
|
UnpackAddr = $3FD0 ; Y=191, Unpacked pixel buffer of $28 bytes
|
||||||
CONFIG_PROBE_CPUINFO = 1
|
CONFIG_PROBE_CPUINFO = 1
|
||||||
CONFIG_PRINT_CPUINFO = 1
|
CONFIG_PRINT_CPUINFO = 1
|
||||||
|
|
||||||
@ -188,7 +188,7 @@ UpdateSrcShift
|
|||||||
stx zSrcShift
|
stx zSrcShift
|
||||||
|
|
||||||
jsr Unpack2Bits ; hhggffee C=? ddccbbaa
|
jsr Unpack2Bits ; hhggffee C=? ddccbbaa
|
||||||
bcs UnpackDone
|
bcs UnpackDone ; inlining Unpack2Bits has BNE and BNE > 128 byte offset
|
||||||
|
|
||||||
lsr zUnpackBits+1 ; 0hhggffe C=e ddccbbaa
|
lsr zUnpackBits+1 ; 0hhggffe C=e ddccbbaa
|
||||||
ror zUnpackBits+0 ; 0hhggffe C=e eddccbba
|
ror zUnpackBits+0 ; 0hhggffe C=e eddccbba
|
||||||
@ -208,10 +208,9 @@ UnpackDone
|
|||||||
; ------------------------------------------------------------------------
|
; ------------------------------------------------------------------------
|
||||||
|
|
||||||
DO CONFIG_PRINT_CPUINFO
|
DO CONFIG_PRINT_CPUINFO
|
||||||
|
|
||||||
txa ; (2) X=$14 from (1) Unpack2Bits
|
txa ; (2) X=$14 from (1) Unpack2Bits
|
||||||
ldx #0
|
ldx #0 ; This means we have an extra "row" of HGR garbage at Y=160
|
||||||
PrintText
|
PrintText ; but we can't see it since we are in mixed mode
|
||||||
jsr BASCALC
|
jsr BASCALC
|
||||||
ldy #0
|
ldy #0
|
||||||
CopyTextLine
|
CopyTextLine
|
||||||
@ -239,17 +238,41 @@ ModelPlus
|
|||||||
sta ModType,x
|
sta ModType,x
|
||||||
FIN
|
FIN
|
||||||
|
|
||||||
rts
|
; ========================================================================
|
||||||
|
; NOTE: Normally there is
|
||||||
|
; rts
|
||||||
|
; but to save a byte we intentionally fall into Unpack2Bits in 2 locations:
|
||||||
|
;
|
||||||
|
; A) if we reach
|
||||||
|
; apple_iie_enhanced
|
||||||
|
; B) end of program
|
||||||
|
;
|
||||||
|
; This means there is an extremely rare bug of having extra garbage
|
||||||
|
; on the HGR screen for (A) under these conditions:
|
||||||
|
;
|
||||||
|
; F9:27 <- zDstOffset = column 39
|
||||||
|
; FE:0x <- non-zero value bottom 2 bits are set
|
||||||
|
;
|
||||||
|
; To trigger:
|
||||||
|
; CALL-151
|
||||||
|
; BLOAD LINUXLOGO
|
||||||
|
; F9:27
|
||||||
|
; FE:02
|
||||||
|
; 900G
|
||||||
|
; Or on two lines
|
||||||
|
; BLOAD LINUXLOGO
|
||||||
|
; F9:27 N FE:2 N 900G
|
||||||
|
; And a thin blue line will appear in the top right
|
||||||
|
; ========================================================================
|
||||||
|
|
||||||
; ------------------------------------------------------------------------
|
; ------------------------------------------------------------------------
|
||||||
; Expand 1 pixel (2 bits) via
|
; Expand 1 pixel (2 bits) via
|
||||||
; Output 2 pixels (4 bits)
|
; Output 2 pixels (4 bits)
|
||||||
Unpack2Bits
|
Unpack2Bits
|
||||||
|
|
||||||
; DoublePixel
|
sty zSrcOffset
|
||||||
sty zSaveY
|
|
||||||
|
|
||||||
lda zUnpackBits
|
lda zUnpackBits ; Double the pixel
|
||||||
asl ; A=?????ba0
|
asl ; A=?????ba0
|
||||||
asl ; A=????ba00
|
asl ; A=????ba00
|
||||||
eor zUnpackBits ; A=????xxyy
|
eor zUnpackBits ; A=????xxyy
|
||||||
@ -260,7 +283,7 @@ Unpack2Bits
|
|||||||
ldx #0
|
ldx #0
|
||||||
stx zMask
|
stx zMask
|
||||||
|
|
||||||
ldy zDstShift ;
|
ldy zDstShift ; which 280 px column is next pixel writing to?
|
||||||
beq NoShiftSherlock
|
beq NoShiftSherlock
|
||||||
MakeShiftMask
|
MakeShiftMask
|
||||||
asl
|
asl
|
||||||
@ -286,7 +309,7 @@ NoShiftSherlock
|
|||||||
; Update partial next byte of dest
|
; Update partial next byte of dest
|
||||||
; x = x + 4 - 7
|
; x = x + 4 - 7
|
||||||
; x = x - 3
|
; x = x - 3
|
||||||
sbc #7 ; C=1
|
sbc #7 ; C=1 from "BCC else" above
|
||||||
tay ; push zDstShift
|
tay ; push zDstShift
|
||||||
|
|
||||||
inx
|
inx
|
||||||
@ -299,14 +322,10 @@ NoShiftSherlock
|
|||||||
cpx #$28 ; C = x < 28
|
cpx #$28 ; C = x < 28
|
||||||
bcc FitSameByte ; C = x < 28
|
bcc FitSameByte ; C = x < 28
|
||||||
|
|
||||||
; ------------------------------------------------------------------------
|
|
||||||
; Copy unpacked buffer to 8 HGR scanlines
|
|
||||||
|
|
||||||
inc zCursorY
|
|
||||||
|
|
||||||
; ------------------------------------------------------------------------
|
; ------------------------------------------------------------------------
|
||||||
; Udpate the Text Address
|
; Udpate the Text Address
|
||||||
; Update the HGR scanline Address
|
; Update the HGR scanline Address
|
||||||
|
inc zCursorY
|
||||||
lda zCursorY
|
lda zCursorY
|
||||||
jsr BASCALC
|
jsr BASCALC
|
||||||
|
|
||||||
@ -317,7 +336,9 @@ NoShiftSherlock
|
|||||||
clc ; every 8 HGR scanline address
|
clc ; every 8 HGR scanline address
|
||||||
adc #$1c ; is Text Page $04 + $1C = HGR Page $20
|
adc #$1c ; is Text Page $04 + $1C = HGR Page $20
|
||||||
sta zHgrPtr+1
|
sta zHgrPtr+1
|
||||||
|
|
||||||
; ------------------------------------------------------------------------
|
; ------------------------------------------------------------------------
|
||||||
|
; Copy unpacked buffer to 8 HGR scanlines
|
||||||
|
|
||||||
ldx #7 ; Repeat each scanline 8 times
|
ldx #7 ; Repeat each scanline 8 times
|
||||||
Draw8Rows
|
Draw8Rows
|
||||||
@ -347,7 +368,7 @@ CopyNextByte
|
|||||||
cpx #$14 ; Y=$40 .. $A0, Rows $8..$13 (inclusive)
|
cpx #$14 ; Y=$40 .. $A0, Rows $8..$13 (inclusive)
|
||||||
FitSameByte
|
FitSameByte
|
||||||
sta zDstShift
|
sta zDstShift
|
||||||
ldy zSaveY ; NOTE: C=0 from CMPs above
|
ldy zSrcOffset ; NOTE: C=0 from CMPs above
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
|
||||||
|
BIN
ll_6502.dsk
BIN
ll_6502.dsk
Binary file not shown.
Loading…
Reference in New Issue
Block a user