|
Subject: [stella] Color Tweaker, v1.0 From: "B. Watson" <atari@xxxxxxxxxxxxxx> Date: Tue, 11 Sep 2001 02:10:55 -0400 (EDT) |
This is the final version of the color tweaker. The other version I posted
here wouldn't work on a real VCS, so this is the bug-fixed version that does
work (now that I have an EPROM cart).
This does exactly what I want it to, except one thing: the fire button still
acts wonky on the Atari. What's the normal way to debounce the fire button? I
had been trying to use latched input mode, but I found this was worse, not
better (apparently, when I clear the latch, then set latch mode, it latches the
bounce!). This version just checks the raw input line every 16 frames, no
latching going on at all.
Still, unless anybody has any ideas for features that would be amazingly cool,
I don't think I'll be changing this any more. I've already spent too much time
on what was meant to be a quick & dirty development tool, and my poor game is
calling me, saying `Why haven't you finished me yet?'
Brian
---
If a trainstation is the place where trains stop, what is a workstation?
---cut-here---
; colortwk.asm
; v1.0
; color tweaker - use to test various color combos
; fire button to move cursor, up & down to change chroma,
; left & right to change luma. game reset to reset.
; by B. Watson <atari@xxxxxxxxxxxxxx>
; Tested on a real Atari 2600, finally!
; Tested on z26 v1.46 on a windows machine
; Tested on xstella 1.1 on a linux machine
; build with: dasm colortwk.asm -ocolortwk.bin -f3 -v3
; (you need vcs.h in the current dir)
; if you get `undefined symbol' errors when assembling, your vcs.h
; is incomplete. Mine was missing SWACNT and SWBCNT for some reason.
processor 6502
include "vcs.h"
seg.u vars
org $80
framectr ds 1 ; increments once per frame, used for coloring title screen
; and generally keeping track of time
titleflag ds 1 ; 0 if we're showing the title, 1 otherwise
; color registers. These keep track of current color displayed, for each
; section of screen. due to the way check_stick works, bg0-4 must be located
; immediately after color0-4 (don't put any variables in between)
color0 ds 1
color1 ds 1
color2 ds 1
color3 ds 1
num_colors = [*-color0]-1
bg0 ds 1
bg1 ds 1
bg2 ds 1
bg3 ds 1
current_color ds 1 ; which of the 4 color regs the player is modifying
color_or_bg ds 1 ; (0=color, 1=bg) whether the color reg being modified is color or bg (color+4)
hexpointer ds 4 ; vectors for digit font data
ctemp ds 1 ; temp used in font calculations (could be used by other routines)
p0shape ds 6 ; final result of font calculations, 2 hex digits in one player
p1shape ds 6 ; same, for the other 2 digits
ptrcolor ds 1 ; the pointer color gets incremented once every 4 frames
echo *-$80,"bytes of zero page RAM used"
if *>$ff
echo "***ERROR: You're all out of zero page RAM!"
; error: we're all out of powdered toast
endif
seg code
org $F000
; generic 2600 init routine
sei
cld
ldx #$ff ; setup stack
txs
lda #0
iloop ; clear out TIA regs
sta 0,x
bne iloop
; tell joy & console switches to be inputs
sta SWACNT
sta SWBCNT
jsr game_reset
jmp main_loop ; skip over game_reset code. I suppose I should move it to the
; end of the ROM, but what the hell, I like spaghetti anyway :)
; now, set everything up to display the title screen
; (this routine also gets called whenever player hits `game reset')
game_reset
lda #0
sta titleflag ; 0 means `show the title', we check this in main_loop to decide which kernel to run
sta color_or_bg
ldy #num_colors*2+1 ; more fencepost error...
init_colors ; set default colors from ROM
lda default_colors,y
sta color0,y
dey
bpl init_colors
lda #>hexfont
sta hexpointer+1 ; set up hi bytes of pointers
sta hexpointer+3
lda #num_colors ; player starts in upper left, color 0 is at bottom of screen, so..
sta current_color
lda #5
sta NUSIZ0 ; doublewide p0
; (we will modify NUSIZ1 inside main_kernel, since the pointer is single
; width, but the 2nd set of digits is double width, and they're both player 1)
lda #12 ; p0 is always white
sta COLUP0
; (we modify COLUP1 inside main_kernel, see above)
rts
main_loop ; start of TV frame
lda #2
sta VSYNC ; start blanking
sta WSYNC
sta WSYNC
lda #44
sta TIM64T ; go ahead & set timer
lda #0
sta WSYNC
sta VSYNC ; 3 WSYNC's, then turn off VSYNC
game_calc
inc framectr
sta COLUBK ; initially, blank the background (a still 0 from above)
lda ptrcolor
sta COLUP1
check_switches
lda SWCHB ; did player hit game reset?
and #1
bne check_stick ; no, so check the joystick
jsr game_reset ; yes, so reset the game
check_stick
; we really only want to check the stick every so many frames...
lda framectr
and #$03
bne skip_stick ; skip over input routine unless current frame is multiple of 4
ldx current_color
lda color_or_bg ; decide which color reg to modify: color0 + color_or_bg*4
beq skipbg
inx
inx
inx
inx
; at this point, X holds the register we need to modify. Let's see what we should
; do with it. No, this isn't the most efficient joystick-checking code ever :)
skipbg
lda SWCHA
asl ; did player move right?
bcs skr ; if not, skip the increments
inc color0,x ; if so increment twice (since the low bit of the COLU* regs is ignored anyway)
inc color0,x
skr
asl
bcs skl
dec color0,x
dec color0,x
skl
asl
bcs skd
tay
lda color0,x
sbc #15 ; carry is always clear, this actually subtracts 16
sta color0,x
tya
skd
asl
bcs sku
lda color0,x
adc #16
sta color0,x
sku
check_fire
lda framectr
and #$0F ; only check fire button every 16 frames (FIXME: need debounce?)
bne skip_stick
inc ptrcolor ; while we're at it, change pointer color, whether fire pressed or not.
inc ptrcolor
lda INPT4
and #$80 ; did player press fire button?
bne skip_stick ; if not, skip the rest of this routine, otherwise...
lda titleflag
bne not_in_title
inc titleflag ; the first time the player hits fire, just set titleflag to 1...
bne skip_stick ; ...but don't move the pointer (since it isn't visible yet anyway)
not_in_title
lda color_or_bg
eor #$FF
sta color_or_bg ; toggle color_or_bg
bne skip_stick ; and if we did set it to zero, that's all we do (effect is move pointer to the right)
ldx current_color ; otherwise we need to move the pointer down
dex
bpl skip_zero
ldx #num_colors
skip_zero
stx current_color
skip_stick
;; position player 1 (the pointer)
sta WSYNC
lda color_or_bg
beq reset_p1 ; if color_or_bg == 0, pointer is on the left, so skip positioning
; I was hoping to get by without using HMOVE, but it looks like crap without it.
lda #$E0
sta HMP1
sta WSYNC
repeat 16
nop
repend
reset_p1
sta RESP1
sta WSYNC
sta HMOVE
repeat 13 ; TIA docs say wait at least 24 cycles after HMOVE before modifying HMP* (or HMCLR)
nop ; so we actually wait 26.
repend
sta HMCLR
; done with vblank calculations. Wait for the TV to get to first scan line.
wait_timer
lda INTIM
bne wait_timer ; busy-wait for timer to expire
;lda #0 ; not needed
sta WSYNC
sta VBLANK ; let there be graphics!
; decide which kernel to run, based on game mode
; unfortunately this wastes a good chunk of the first scanline...
; ...but we're not displaying anything there anyway.
lda titleflag
beq title_kernel
jmp main_kernel ; Main Kernel Turn On!
title_kernel
ldy #191-title_bytes ; single (high) resolution, 192 scanlines
t_blank_top
sta WSYNC
dey
bpl t_blank_top
ldy #title_bytes
; Asymmetrical playfield code. This is the bit I *really* want to
; test on a real Atari (it works ok on z26 and xstella)
; Addendum: I did test it on a real Atari, it almost worked.
; Now it works great
draw_t_pf
sta WSYNC
sta COLUPF ; 3
lda left_title0,y ; 4
sta PF0 ; 3
lda left_title1,y ; 4
sta PF1 ; 3
lda left_title2,y ; 4
sta PF2 ; 3 (so far, 24 cycles. the first 22.6 are during horiz. blank)
lda right_title0,y ; 4 = 28
ldx right_title1,y ; 4 = 32
nop ; 2 = 37
nop ; 2 = 37
sta PF0 ; 3 = 35
stx PF1 ; 3 = 41
lda right_title2,y ; 4 = 45
sta PF2 ; 3 (we're at 48 cycles past WSYNC, 26 past first visible color clock)
tya
adc framectr ; load A with next scanline's color
dey
bne draw_t_pf
; PF display goes like this:
;display: PF0.PF1.....PF2.....PF0.PF1.....PF2.....
;pixels: 0 4 12 20 24 32
;cycles: <23 <33 <39 <50 <55 <66
end_kernels ; common code (jmp'ed to by main_kernel)
sta WSYNC ; finish last scanline
lda #37 ; set overscan timer
sta TIM64T
lda #2
sta VBLANK
ldy #0
sty COLUPF ; blank playfield
sty PF0
sty PF1
sty PF2
; calculate offset to data for hi digit
ldx current_color
lda color0,x
; in C, a = (a >> 4) * 5;
and #$F0 ; hi nybble first
lsr
lsr ; now we have: 0, 4, 8...,60
sta ctemp ; in ctemp
lsr ; finish shifting
lsr ; now we have 0, 1, 2...,15 in A
clc
adc ctemp ; now we have 0, 5, 10...,75 in A
sta hexpointer ; stash it
lda color0,x ; now the low digit...
; in C, a = (a & 0x0F) * 5;
and #$0F
sta ctemp
asl
asl ; a = (a * 4) ...
clc
adc ctemp ; plus a, gives us a*5
sta hexpointer+2 ; *whew*
; now we've got hexpointer as a pointer to the 5 bytes worth of
; font data we are wanting to draw for this digit...
ldy #4
make_shape ; draw into RAM to simplify kernel (needs 5 bytes)
lda (hexpointer),y
; we're doing the high digit, so we need to shift the data up 4 bits
asl
asl
asl
asl
sta ctemp
lda (hexpointer+2),y ; now get the low digit, which doesn't need to be shifted
ora ctemp
sta p0shape,y
dey
bpl make_shape ; get the next byte, until we're done.
; #define LAME_CUT_AND_PASTE
ldx current_color
lda bg0,x
and #$F0 ; hi nybble first
lsr
lsr ; now we have: 0, 4, 8...,60
sta ctemp ; in ctemp
lsr ; finish shifting
lsr ; now we have 0, 1, 2...,15 in A
clc
adc ctemp ; now we have 0, 5, 10...,75 in A
sta hexpointer ; stash it
lda bg0,x ; now the low digit...
and #$0F
sta ctemp
asl
asl ; a = (a * 4) ...
clc
adc ctemp ; plus a, gives us a*5
;ora hexpointer ; grab top 4 bits from hi nybble calc
sta hexpointer+2 ; *whew*
ldy #4
make_shape2 ; draw into RAM to simplify kernel (needs 5 bytes)
lda (hexpointer),y
asl
asl
asl
asl
sta ctemp
lda (hexpointer+2),y
ora ctemp
sta p1shape,y
dey
bpl make_shape2
;ARGH what a waste. But it works.
; #undef LAME_CUT_AND_PASTE
; we're done with overscan calculations, so wait for the timer to run
; out and tell us it's time to start a new frame.
t_overscan
lda INTIM
bne t_overscan
jmp main_loop ; time's up, start new frame now.
org [>.+1]*256 ; align to next page, so branches don't cross page boundaries.
main_kernel
ldy #96-[main_bytes*4]-1 ; single (high) resolution, 192 scanlines
ldx #num_colors
m_blank_top
sta WSYNC
dey
bne m_blank_top
draw_one_section
sta WSYNC ; maybe not need this here
tya ; lda #0
lda color0,x
sta COLUPF
lda bg0,x
sta COLUBK
cpx current_color
bne no_player1
lda ptrcolor
no_player1
sta COLUP1
ldy #main_bytes
draw_m_pf
lda ptrshape,y
sta GRP1
sta WSYNC
lda left_main0,y ; 3
sta PF0 ; 5
lda left_main1,y ; 8
sta PF1 ; 10
lda left_main2,y ; 13
sta PF2 ; 15
sta WSYNC
dey
bne draw_m_pf
sty GRP1
dex
bpl draw_one_section
repeat 11
nop
repend
sta RESP1
lda #0 ; waste one scan line turning bottom background black
ldy #12 ; ...and player 1 white...
ldx #5 ; ...and player 1 double-wide
sty COLUP1
sta WSYNC
stx NUSIZ1
sta PF0
sta PF1
sta PF2
sta COLUBK
ldy #4 ; draw player for 5 scanlines
draw_digits
sta WSYNC
sta RESP0
lda p0shape,y ; we calculated this last overscan period
sta GRP0
lda p1shape,y
sta GRP1
sta WSYNC ; display it twice
sta WSYNC ; display it thrice
dey
bpl draw_digits
sta WSYNC
lda #0
sta GRP0 ; done drawing player
sta GRP1 ; done drawing player
sta NUSIZ1
; uncomment if I need to waste scanlines
; ldy #4
;t_blank_bottom
; sta WSYNC
; dey
; bne t_blank_bottom
jmp end_kernels ; our work is done here...
org $F800
; 4x5 hex font, upside-down, low nybble only
hexfont
hex0
byte %00000010
byte %00000101
byte %00000101
byte %00000101
byte %00000010
hex1
byte %00000111
byte %00000010
byte %00000010
byte %00000110
byte %00000010
hex2
byte %00000111
byte %00000100
byte %00000010
byte %00000001
byte %00000110
hex3
byte %00000110
byte %00000001
byte %00000110
byte %00000001
byte %00000110
hex4
byte %00000001
byte %00000001
byte %00000111
byte %00000101
byte %00000001
hex5
byte %00000110
byte %00000001
byte %00000111
byte %00000100
byte %00000111
hex6
byte %00000111
byte %00000101
byte %00000111
byte %00000100
byte %00000011
hex7
byte %00000010
byte %00000010
byte %00000001
byte %00000001
byte %00000111
hex8
byte %00000111
byte %00000101
byte %00000010
byte %00000101
byte %00000111
hex9
byte %00000110
byte %00000001
byte %00000111
byte %00000101
byte %00000111
hexA
byte %00000101
byte %00000101
byte %00000111
byte %00000101
byte %00000010
hexB
byte %00000111
byte %00000101
byte %00000110
byte %00000101
byte %00000110
hexC
byte %00000011
byte %00000100
byte %00000100
byte %00000100
byte %00000011
hexD
byte %00000110
byte %00000101
byte %00000101
byte %00000101
byte %00000110
hexE
byte %00000111
byte %00000100
byte %00000111
byte %00000100
byte %00000111
hexF
byte %00000100
byte %00000100
byte %00000111
byte %00000100
hexfont_end
byte %00000111
hexfont_size = hexfont_end - hexfont
echo "hexfont_size is",hexfont_size
default_colors byte $0a,$2a,$3a,$4a,$00,$10,$20,$30
ptrshape ; main_bytes bytes, which is 24 now I think
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %10000000
byte %11000000
byte %11100000
byte %11000000
byte %10000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
org $F900
; these tables were in include files generated by a script,
; but I put them in here so the source would be self-contained
left_title0
byte %00000000
byte %00000000
byte %01010000
byte %01010000
byte %01010000
byte %01010000
byte %01010000
byte %01010000
byte %01010000
byte %01010000
byte %01110000
byte %01110000
byte %01010000
byte %01010000
byte %01010000
byte %01010000
byte %01010000
byte %01010000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %01110000
byte %01110000
byte %01110000
byte %01110000
byte %01110000
byte %01110000
byte %00010000
byte %00010000
byte %00010000
byte %00010000
byte %00010000
byte %00010000
byte %00010000
byte %00010000
byte %00010000
byte %00010000
byte %00010000
byte %00010000
byte %00010000
byte %00010000
byte %00010000
byte %00010000
byte %00010000
byte %00010000
byte %01100000
byte %01100000
byte %01100000
byte %01100000
byte %01100000
byte %01100000
byte %00000000
byte %00000000
title_bytes = [.-left_title0]-1
org [>.]*256+256
left_title1
byte %00000000
byte %00000000
byte %10101010
byte %10101010
byte %10101010
byte %10101010
byte %10101010
byte %10101010
byte %10101010
byte %10101010
byte %11101100
byte %11101100
byte %10101010
byte %10101010
byte %10101010
byte %10101010
byte %01001100
byte %01001100
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00001111
byte %00001111
byte %00010000
byte %00010000
byte %00010110
byte %00010110
byte %00010100
byte %00010100
byte %00010100
byte %00010100
byte %00010110
byte %00010110
byte %00010000
byte %00010000
byte %00001111
byte %00001111
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %01001110
byte %01001110
byte %01001110
byte %01001110
byte %01001110
byte %01001110
byte %10101000
byte %10101000
byte %10101000
byte %10101000
byte %10101000
byte %10101000
byte %10101000
byte %10101000
byte %10101000
byte %10101000
byte %10101000
byte %10101000
byte %10101000
byte %10101000
byte %10101000
byte %10101000
byte %10101000
byte %10101000
byte %01001000
byte %01001000
byte %01001000
byte %01001000
byte %01001000
byte %01001000
byte %00000000
byte %00000000
org [>.]*256+256
left_title2
byte %00000000
byte %00000000
byte %01100011
byte %01100011
byte %00010101
byte %00010101
byte %00010101
byte %00010101
byte %00010101
byte %00010101
byte %00010101
byte %00010101
byte %00010101
byte %00010101
byte %00010101
byte %00010101
byte %01100011
byte %01100011
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %10011100
byte %10011100
byte %01000101
byte %01000101
byte %01000101
byte %01000101
byte %01000101
byte %01000101
byte %01001001
byte %01001001
byte %01010001
byte %01010001
byte %01010001
byte %01010001
byte %10001100
byte %10001100
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %01010010
byte %01010010
byte %01010010
byte %01010010
byte %01010010
byte %01010010
byte %01010101
byte %01010101
byte %01010101
byte %01010101
byte %01010101
byte %01010101
byte %00110101
byte %00110101
byte %00110101
byte %00110101
byte %00110101
byte %00110101
byte %01010101
byte %01010101
byte %01010101
byte %01010101
byte %01010101
byte %01010101
byte %00110010
byte %00110010
byte %00110010
byte %00110010
byte %00110010
byte %00110010
byte %00000000
byte %00000000
org [>.]*256+256
right_title0
byte %00000000
byte %00000000
byte %00100000
byte %00100000
byte %01010000
byte %01010000
byte %01010000
byte %01010000
byte %01010000
byte %01010000
byte %01010000
byte %01010000
byte %01010000
byte %01010000
byte %01010000
byte %01010000
byte %00100000
byte %00100000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %10000000
byte %10000000
byte %01010000
byte %01010000
byte %01010000
byte %01010000
byte %01010000
byte %01010000
byte %01010000
byte %01010000
byte %01010000
byte %01010000
byte %01010000
byte %01010000
byte %10000000
byte %10000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00100000
byte %00100000
byte %00100000
byte %00100000
byte %00100000
byte %00100000
byte %00100000
byte %00100000
byte %00100000
byte %00100000
byte %00100000
byte %00100000
byte %00100000
byte %00100000
byte %00100000
byte %00100000
byte %00100000
byte %00100000
byte %00100000
byte %00100000
byte %00100000
byte %00100000
byte %00100000
byte %00100000
byte %01110000
byte %01110000
byte %01110000
byte %01110000
byte %01110000
byte %01110000
byte %00000000
byte %00000000
org [>.]*256+256
right_title1
byte %00000000
byte %00000000
byte %11001110
byte %11001110
byte %10101000
byte %10101000
byte %10101000
byte %10101000
byte %10101000
byte %10101000
byte %10101100
byte %10101100
byte %10101000
byte %10101000
byte %10101000
byte %10101000
byte %11001110
byte %11001110
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00111000
byte %00111000
byte %10010000
byte %10010000
byte %10010000
byte %10010000
byte %10010000
byte %10010000
byte %10010000
byte %10010000
byte %10010000
byte %10010000
byte %10110000
byte %10110000
byte %00010000
byte %00010000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %10101110
byte %10101110
byte %10101110
byte %10101110
byte %10101110
byte %10101110
byte %11101000
byte %11101000
byte %11101000
byte %11101000
byte %11101000
byte %11101000
byte %11101100
byte %11101100
byte %11101100
byte %11101100
byte %11101100
byte %11101100
byte %10101000
byte %10101000
byte %10101000
byte %10101000
byte %10101000
byte %10101000
byte %10101110
byte %10101110
byte %10101110
byte %10101110
byte %10101110
byte %10101110
byte %00000000
byte %00000000
org [>.]*256+256
right_title2
byte %00000000
byte %00000000
byte %00110101
byte %00110101
byte %01000101
byte %01000101
byte %01000101
byte %01000101
byte %01000101
byte %01000101
byte %00100011
byte %00100011
byte %00010101
byte %00010101
byte %00010101
byte %00010101
byte %01100011
byte %01100011
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %01010101
byte %01010101
byte %01010101
byte %01010101
byte %01010101
byte %01010101
byte %01010101
byte %01010101
byte %01010101
byte %01010101
byte %01010101
byte %01010101
byte %00110111
byte %00110111
byte %00110111
byte %00110111
byte %00110111
byte %00110111
byte %01010101
byte %01010101
byte %01010101
byte %01010101
byte %01010101
byte %01010101
byte %01010010
byte %01010010
byte %01010010
byte %01010010
byte %01010010
byte %01010010
byte %00000000
byte %00000000
org [>.]*256+256
left_main0
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %11000000
byte %11000000
byte %11000000
byte %11000000
byte %11000000
byte %11000000
byte %11000000
byte %11000000
byte %11000000
byte %11000000
byte %11000000
byte %11000000
byte %11000000
byte %11000000
byte %11000000
byte %11000000
main_bytes = [.-left_main0]-1
left_main1
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %11111100
byte %11111100
byte %11111100
byte %11111100
byte %11111100
byte %11111100
byte %11111100
byte %11111100
byte %11111100
byte %11111100
byte %11111100
byte %11111100
byte %11111100
byte %11111100
byte %11111100
byte %11111100
left_main2
byte %00000000
byte %00000000
byte %00000000
byte %00000000
byte %11111111
byte %11111111
byte %11111111
byte %11111111
byte %10000001
byte %10000001
byte %10000001
byte %10000001
byte %10000001
byte %10000001
byte %10000001
byte %10000001
byte %11111111
byte %11111111
byte %11111111
byte %11111111
; echo *-$F900,"bytes of included data"
org $FFFC
word $F000
word $F000
Attachment:
colortwk.bin
Description: Binary data
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| [stella] My first Stella program --, Roger Williams | Thread | [stella] debounce, TwoHeaded Software |
| Re: [stella] Adventures in cart bui, Mark De Smet | Date | Re: [stella] TIA sound note table, , John Saeger |
| Month |