|
Subject: [stella] Poker Solitaire From: "B. Watson" <urchlay@xxxxxxxxxxxxxxxx> Date: Fri, 16 Nov 2001 18:39:08 -0500 (EST) |
Been a while since I posted here... Work's keeping me busy, got a big backlog of list mail. I did manage to find some time to write some Stella code over the past week. I decided the birds/wizard thing wasn't going anywhere, maybe I'll do something with it later, but I wanted to get completely away from the `shooting stuff' type of game.. Just recently, somebody taught me to play a card game called Poker Solitaire... so naturally I had the idea to code it up for the 2600. The game is pretty simple: you shuffle the cards & turn them over one at a time, placing each card in a 5x5 grid of cards on the table. The goal is to get the best 10 poker hands you can get (5 horizontally, 5 vertically). Complete rules: http://www.solitairecentral.com/rules/psq_rules.html I use the English scoring system, except that I think a royal flush should be worth more than a non-royal straight flush, so I score 40 for the royal and 30 for the non-royal straight flush (though I have yet to actually get a royal flush in any hand!) The binary attached to this message is fully playable, but missing a few important features: There's no score calculation at all. At the end of the game, when the score should be displayed, I just show some junk pixels. No sound. There should at least be bloops & bleeps for audible feedback when you place a card (or a buzz if you try to place a card on top of an already placed card) Joystick movement is a little wonky (try it) I haven't tested it on real hardware yet. And maybe the worst problem of all: The entire game only takes up the right-hand side of the display. I'm drawing 5 cards, using interleaved players 0 and 1, like so: 0 1 0 1 0 using NUSIZ0=6, NUSIZ1=2, so each card is 8 clocks wide, with 8 blank clocks between columns.. I can move it over a few pixels to the left, but centering it will be rough (or impossible) since I don't have enough RAM left to buffer the sprite data & therefore must use the time-consuming LDA (zp),Y mode... The code is kind of rough... I waste a *lot* of ROM by storing 12 bytes of sprite data per card, rather than storing each suit symbol once and each number or letter once... and the kernel is bloated too... but I wanted to get the thing working before I killed myself trying to optimize it... When you first start up the game, the deck is being shuffled. I keep displaying the first 25 cards of the deck while it's happening, which I think might be the coolest effect I've ever achieved on the 2600 :) (well, I think it's cool anyway...) Press the fire button to stop shuffling & start the game. Move the cursor around with the stick, place cards with the fire button.. at any time, press Game Reset to reshuffle & start over... So as usual, asking everyone for their opinion... does it suck? if so, can it be made to suck less? Does the fact that the display only takes up half the screen really matter? (this is a matter of taste I guess). Hopefully I'll get a chance to sort thru the pile of incoming stuff this weekend, I really want to see Manuel's latest Gunfight build, if nothing else... Adios, Brian
Attachment:
pokersol_000a.bin
Description: Binary data
; pokersol.asm
; by B. Watson <atari@xxxxxxxxxxxxxx>
; Idea for a silly game...
; (not yet) Tested on a real Atari 2600
; Tested on z26 v1.46 on a windows machine
; Tested on xstella 1.1 on a linux machine
processor 6502
include "vcs.h"
seg.u data
org $80
card0ptr ds 50
end_ptrs
tableau ds 25 ; the cards that have been played
stock ds 27 ; the rest of the cards
deck = tableau ; the whole deck (which gets shuffled, then the
; first 25 cards get overwritten with the
; blank tableau)
current_card ds 1 ; index into stock, points at card being placed
tmp ds 1
tmp2 ds 1
playerpos ds 1 ; 5*y + x (or else $FF for `game not on'
framectr ds 1
card_count ds 1 ; 0 = new game, 25 = end of game
color0 ds 5
random ds 2
echo *-$80,"bytes of zero page used."
; constants:
RED = $32
seg code
org $F000
cartstart
sei
cld
ldx #$ff
txs
lda #0
iloop
sta 0,x
dex
bne iloop
initvcs
lda #55
sta random
lda #$AA
sta random+1
lda #$FF
sta playerpos
; initialize deck
jsr deal_deck
main_loop
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
; position players
sta WSYNC
repeat 23
nop
repend
sta RESP0
sta RESP1
lda #255
sta COLUP0
sta COLUP1
lda #$d0
sta HMP1
lda #$40
sta HMP0
sta WSYNC
sta HMOVE
repeat 12
nop
repend
sta HMCLR
; setup pointers to card sprite data (25 of them!)
; note to self: saved 50 cycles by swapping roles of X and Y here
; (I had 2 sta zp,y's, which are actually sta.w, since there's no sta zp,y)
; there is still an lda zp,y (same deal), but not much I can do about this
; put it in stelladoc as an example...
ldy #0
ldx #0
card_disp
sty tmp
lda tableau,y
tay
lda lo_bytes,y
sta card0ptr,x
inx
lda hi_bytes,y
sta card0ptr,x
inx
ldy tmp
iny
cpy #25
bne card_disp
; set up card color bytes (1 per row)
ldx #0
stx color0
stx color0+1
stx color0+2
stx color0+3
stx color0+4
cbyte_loop
lda tableau,x
cmp #26
rol color0
lda tableau+5,x
cmp #26
rol color0+1
lda tableau+10,x
cmp #26
rol color0+2
lda tableau+15,x
cmp #26
rol color0+3
lda tableau+20,x
cmp #26
rol color0+4
inx
cpx #5
bne cbyte_loop
; blink cursor
lda framectr
and #8 ; blink 8 frames, then don't blink 8 frames
beq no_blink
lda current_card
cmp #25
beq no_blink ; dont blink if game is over
lda playerpos
asl
tax
lda #<no_card
sta card0ptr,x
lda #>no_card
sta card0ptr+1,x
no_blink
lda framectr
and #15
bne no_stick
lda INPT4
bmi no_fire
lda playerpos ; check & see if games is already on ($FF = no)
bpl place_card
lda #0 ; player pressed fire during shuffling
sta playerpos ; so start the game
sta current_card
ldx #24
lda #52 ; blank card
blank_tableau
sta tableau,x
dex
bpl blank_tableau
bmi no_fire ; always branch
place_card ; player pressed fire while game is on
ldx current_card
ldy playerpos
lda tableau,y ; can't place a card where a card already is
cmp #52 ; 52 is `no card placed'
bne no_fire
lda stock,x
sta tableau,y
inc current_card
no_fire
lda playerpos
bmi no_stick
; read joystick
check_stick
lda SWCHA
asl
bcs no_right
inc playerpos
no_right
asl
bcs no_left
dec playerpos
no_left
asl
bcs no_down
tax
lda playerpos
adc #5
sta playerpos
txa
no_down
asl
bcs no_up
lda playerpos
sbc #4 ; subtract 5 (carry always clear)
sta playerpos
no_up
lda playerpos
bpl not_minus
clc
adc #25
sta playerpos
not_minus
cmp #25
bcc not_toohigh
sec
sbc #25
sta playerpos
not_toohigh
no_stick
lda SWCHB
and #$01
bne no_reset
jsr deal_deck ; player pressed game reset
lda #$FF ; $FF in playerpos means `game not on, so shuffle'
sta playerpos
no_reset
lda #0
sta COLUBK
sta COLUPF
sta PF0
sta PF1
sta PF2
wait_timer
lda INTIM
bne wait_timer ; busy-wait for timer to expire
sta WSYNC
sta VBLANK
sta WSYNC ; wby do I need these 2??
lda #6
sta NUSIZ0
lda #2
sta NUSIZ1
sta WSYNC
kernel
lda #$ff
sta COLUP0
ldx #192
mac cardloop
lda #0
sta COLUBK
lda #%01111110
sta GRP0
sta GRP1
sta WSYNC
lda #%11111111
sta GRP0
sta GRP1
sta PF0
sta PF1
sta PF2
ldx color0+{1} ; 3
lda colPF0,x ; +4 = 7
sta PF0 ; +3 = 11
lda colPF1,x ; +4 = 15
sta PF1 ; +3 = 18
lda colPF2,x ; +4 = 22
sta PF2 ; +3 = 25
ldy #11
.cardloop0
repeat 2
sta WSYNC ; 0
lda #0
sta.w COLUBK
lda (card0ptr+{1}*10+0),y ; 5
sta GRP0 ; 3 = 8
lda (card0ptr+{1}*10+2),y ; 5 = 13
sta GRP1 ; 3 = 16
lda (card0ptr+{1}*10+8),y ; 5 = 21
tax ; 2 = 23
txs ; 2 = 25
lda (card0ptr+{1}*10+6),y ; 5 = 30
tax ; 2 = 32
nop
nop
lda #RED
sta.w COLUBK ; 42
lda (card0ptr+{1}*10+4),y ; 5 = 47
sta GRP0 ; 3 = 50
stx GRP1 ; 3 = 53
tsx ; 2 = 55
stx GRP0 ; 3 = 58
repend
dey ; 2 = 60
bpl .cardloop0
sta WSYNC
lda #%11111111
sta GRP0
sta GRP1
sta PF0
sta PF1
sta PF2
sta WSYNC
lda #%01111110
sta GRP0
sta GRP1
sta WSYNC
lda #0
sta GRP0
sta GRP1
sta WSYNC
iny
sty GRP0
sty GRP1
sta WSYNC
endm ; end of mac cardloop
cardloop 0
cardloop 1
cardloop 2
cardloop 3
cardloop 4
sta WSYNC
ldy #40
lda playerpos
; bmi kill_rest ; this branch is too far!
bpl k_ok
jmp kill_rest
k_ok
lda current_card
cmp #25
; beq kill_rest ; this branch is too far!
bne k_ok2
jmp draw_score
k_ok2
sta WSYNC
lda #0
sta NUSIZ0
lda #%01111110
sta GRP0
sta WSYNC
lda #%11111111
sta GRP0
ldx current_card
lda stock,x
tax
lda lo_bytes,x
sta tmp
lda hi_bytes,x
sta tmp+1
lda #0
cpx #26
ldx #$F0
bcc last_card_black
ldx #$c0
last_card_black
ldy #11
draw_last_card
repeat 2
sta WSYNC
lda #0
sta COLUBK
lda (tmp),y
sta GRP0
stx PF0
repeat 10
nop
repend
lda #RED
sta COLUBK
repend
dey
bpl draw_last_card
nop
nop
nop
lda #0
sta COLUBK
sta WSYNC
lda #%11111111
sta GRP0
sta WSYNC
lda #%01111110
sta GRP0
sta WSYNC
lda #0
sta GRP0
ldy #11
kill_rest
sta WSYNC
dey
bne kill_rest
jmp end_kernel
draw_score
sta WSYNC
lda #12 ; white
sta COLUPF
lda #0
sta COLUBK
sta PF0
sta PF2
lda #<score_string
sta tmp
lda #>score_string
sta tmp+1
ldy #5
draw_score_loop
sta WSYNC
lda #0 ; 2
sta PF1 ; 3=5
repeat 13
nop
repend
lda (tmp),y ; 5
sta PF1
sta WSYNC
lda #0
sta PF1
repeat 13
nop
repend
lda (tmp),y
sta PF1
dey
bpl draw_score_loop
iny
sta WSYNC
sty COLUPF
sty COLUBK
ldy #26
jmp kill_rest
echo *-kernel,"bytes of kernel code"
end_kernel
lda #37
sta TIM64T
overscan
lda #2
sta VBLANK
ldx #$FF
txs
lda playerpos
bpl finish_overscan
jsr shuffle
finish_overscan
lda INTIM
bne finish_overscan
; sta WSYNC
jmp main_loop
deal_deck
ldx #0
ldy #0
deal_loop
stx deck,y
iny
inx
cpy #52
bne deal_loop
rts
getrandbit
lda random
lsr
lsr
sbc random
lsr
ror random+1
ror random
; lda random
rts
getrandbyte
ldx #8
grloop
jsr getrandbit
rol tmp
dex
bne grloop
lda tmp
rts
; shuffle deck
shuffle
ldy #50
shuffle_loop
lda random ; 3
lsr ; +2 = 5
lsr ; +2 = 7
sbc random ; +3 = 10
lsr ; +2 = 12
ror random+1 ; +5 = 17
ror random ; +5 = 17
bcs noswap ; +3 = 20
lda deck,y ; +4 = 24 ; if we got a 1 (carry), swap card with the one after it
ldx deck+1,y ; +4 = 28
stx deck,y ; +4 = 32
sta deck+1,y ; +4 = 38
noswap
dey ; +2 = 40
bpl shuffle_loop ; +3 = 43
rts
echo *-$f000,"bytes of code"
org $Fc00
cards
spades1
byte %11000111
byte %01101101
byte %00000001
byte %10000011
byte %11000111
byte %11101111
byte %11111111
byte %10111011
byte %10111011
byte %10000011
byte %11010111
byte %11101111
spades2
byte %11000111
byte %01101101
byte %00000001
byte %10000011
byte %11000111
byte %11101111
byte %11111111
byte %10000011
byte %11011111
byte %11100111
byte %10111011
byte %11000111
spades3
byte %11000111
byte %01101101
byte %00000001
byte %10000011
byte %11000111
byte %11101111
byte %11111111
byte %10000111
byte %11111011
byte %11100111
byte %10111011
byte %11000111
spades4
byte %11000111
byte %01101101
byte %00000001
byte %10000011
byte %11000111
byte %11101111
byte %11111111
byte %11111011
byte %10000011
byte %10111011
byte %11011011
byte %11101011
spades5
byte %11000111
byte %01101101
byte %00000001
byte %10000011
byte %11000111
byte %11101111
byte %11111111
byte %11000111
byte %10111011
byte %11100111
byte %11011111
byte %11000011
spades6
byte %11000111
byte %01101101
byte %00000001
byte %10000011
byte %11000111
byte %11101111
byte %11111111
byte %11000111
byte %10111011
byte %10000111
byte %10111111
byte %11000011
spades7
byte %11000111
byte %01101101
byte %00000001
byte %10000011
byte %11000111
byte %11101111
byte %11111111
byte %11011111
byte %11101111
byte %11110111
byte %11111011
byte %10000011
spades8
byte %11000111
byte %01101101
byte %00000001
byte %10000011
byte %11000111
byte %11101111
byte %11111111
byte %11000111
byte %10111011
byte %11000111
byte %10111011
byte %11000111
spades9
byte %11000111
byte %01101101
byte %00000001
byte %10000011
byte %11000111
byte %11101111
byte %11111111
byte %10000111
byte %11111011
byte %11000011
byte %10111011
byte %11000111
spades10
byte %11000111
byte %01101101
byte %00000001
byte %10000011
byte %11000111
byte %11101111
byte %11111111
byte %00010011
byte %10101101
byte %10101101
byte %00101101
byte %10110011
spadesj
byte %11000111
byte %01101101
byte %00000001
byte %10000011
byte %11000111
byte %11101111
byte %11111111
byte %11001111
byte %10110111
byte %11110111
byte %11110111
byte %11100011
spadesq
byte %11000111
byte %01101101
byte %00000001
byte %10000011
byte %11000111
byte %11101111
byte %11111111
byte %11111011
byte %11000111
byte %10111011
byte %10111011
byte %11000111
spadesk
byte %11000111
byte %01101101
byte %00000001
byte %10000011
byte %11000111
byte %11101111
byte %11111111
byte %10110111
byte %10101111
byte %10011111
byte %10101111
byte %10110111
clubs1
byte %11000111
byte %11101111
byte %00101001
byte %00111001
byte %11000111
byte %11000111
byte %11111111
byte %10111011
byte %10111011
byte %10000011
byte %11010111
byte %11101111
clubs2
byte %11000111
byte %11101111
byte %00101001
byte %00111001
byte %11000111
byte %11000111
byte %11111111
byte %10000011
byte %11011111
byte %11100111
byte %10111011
byte %11000111
clubs3
byte %11000111
byte %11101111
byte %00101001
byte %00111001
byte %11000111
byte %11000111
byte %11111111
byte %10000111
byte %11111011
byte %11100111
byte %10111011
byte %11000111
clubs4
byte %11000111
byte %11101111
byte %00101001
byte %00111001
byte %11000111
byte %11000111
byte %11111111
byte %11111011
byte %10000011
byte %10111011
byte %11011011
byte %11101011
clubs5
byte %11000111
byte %11101111
byte %00101001
byte %00111001
byte %11000111
byte %11000111
byte %11111111
byte %11000111
byte %10111011
byte %11100111
byte %11011111
byte %11000011
clubs6
byte %11000111
byte %11101111
byte %00101001
byte %00111001
byte %11000111
byte %11000111
byte %11111111
byte %11000111
byte %10111011
byte %10000111
byte %10111111
byte %11000011
clubs7
byte %11000111
byte %11101111
byte %00101001
byte %00111001
byte %11000111
byte %11000111
byte %11111111
byte %11011111
byte %11101111
byte %11110111
byte %11111011
byte %10000011
clubs8
byte %11000111
byte %11101111
byte %00101001
byte %00111001
byte %11000111
byte %11000111
byte %11111111
byte %11000111
byte %10111011
byte %11000111
byte %10111011
byte %11000111
clubs9
byte %11000111
byte %11101111
byte %00101001
byte %00111001
byte %11000111
byte %11000111
byte %11111111
byte %10000111
byte %11111011
byte %11000011
byte %10111011
byte %11000111
clubs10
byte %11000111
byte %11101111
byte %00101001
byte %00111001
byte %11000111
byte %11000111
byte %11111111
byte %00010011
byte %10101101
byte %10101101
byte %00101101
byte %10110011
clubsj
byte %11000111
byte %11101111
byte %00101001
byte %00111001
byte %11000111
byte %11000111
byte %11111111
byte %11001111
byte %10110111
byte %11110111
byte %11110111
byte %11100011
clubsq
byte %11000111
byte %11101111
byte %00101001
byte %00111001
byte %11000111
byte %11000111
byte %11111111
byte %11111011
byte %11000111
byte %10111011
byte %10111011
byte %11000111
clubsk
byte %11000111
byte %11101111
byte %00101001
byte %00111001
byte %11000111
byte %11000111
byte %11111111
byte %10110111
byte %10101111
byte %10011111
byte %10101111
byte %10110111
hearts1
byte %11101111
byte %11000111
byte %10000011
byte %00000001
byte %00010001
byte %10111011
byte %11111111
byte %10111011
byte %10111011
byte %10000011
byte %11010111
byte %11101111
hearts2
byte %11101111
byte %11000111
byte %10000011
byte %00000001
byte %00010001
byte %10111011
byte %11111111
byte %10000011
byte %11011111
byte %11100111
byte %10111011
byte %11000111
hearts3
byte %11101111
byte %11000111
byte %10000011
byte %00000001
byte %00010001
byte %10111011
byte %11111111
byte %10000111
byte %11111011
byte %11100111
byte %10111011
byte %11000111
hearts4
byte %11101111
byte %11000111
byte %10000011
byte %00000001
byte %00010001
byte %10111011
byte %11111111
byte %11111011
byte %10000011
byte %10111011
byte %11011011
byte %11101011
hearts5
byte %11101111
byte %11000111
byte %10000011
byte %00000001
byte %00010001
byte %10111011
byte %11111111
byte %11000111
byte %10111011
byte %11100111
byte %11011111
byte %11000011
hearts6
byte %11101111
byte %11000111
byte %10000011
byte %00000001
byte %00010001
byte %10111011
byte %11111111
byte %11000111
byte %10111011
byte %10000111
byte %10111111
byte %11000011
hearts7
byte %11101111
byte %11000111
byte %10000011
byte %00000001
byte %00010001
byte %10111011
byte %11111111
byte %11011111
byte %11101111
byte %11110111
byte %11111011
byte %10000011
hearts8
byte %11101111
byte %11000111
byte %10000011
byte %00000001
byte %00010001
byte %10111011
byte %11111111
byte %11000111
byte %10111011
byte %11000111
byte %10111011
byte %11000111
hearts9
byte %11101111
byte %11000111
byte %10000011
byte %00000001
byte %00010001
byte %10111011
byte %11111111
byte %10000111
byte %11111011
byte %11000011
byte %10111011
byte %11000111
hearts10
byte %11101111
byte %11000111
byte %10000011
byte %00000001
byte %00010001
byte %10111011
byte %11111111
byte %00010011
byte %10101101
byte %10101101
byte %00101101
byte %10110011
heartsj
byte %11101111
byte %11000111
byte %10000011
byte %00000001
byte %00010001
byte %10111011
byte %11111111
byte %11001111
byte %10110111
byte %11110111
byte %11110111
byte %11100011
heartsq
byte %11101111
byte %11000111
byte %10000011
byte %00000001
byte %00010001
byte %10111011
byte %11111111
byte %11111011
byte %11000111
byte %10111011
byte %10111011
byte %11000111
heartsk
byte %11101111
byte %11000111
byte %10000011
byte %00000001
byte %00010001
byte %10111011
byte %11111111
byte %10110111
byte %10101111
byte %10011111
byte %10101111
byte %10110111
byte %01111110
diam1
byte %11101111
byte %11000111
byte %10000011
byte %00000001
byte %10000011
byte %11000111
byte %11101111
byte %10111011
byte %10111011
byte %10000011
byte %11010111
byte %11101111
diam2
byte %11101111
byte %11000111
byte %10000011
byte %00000001
byte %10000011
byte %11000111
byte %11101111
byte %10000011
byte %11011111
byte %11100111
byte %10111011
byte %11000111
diam3
byte %11101111
byte %11000111
byte %10000011
byte %00000001
byte %10000011
byte %11000111
byte %11101111
byte %10000111
byte %11111011
byte %11100111
byte %10111011
byte %11000111
diam4
byte %11101111
byte %11000111
byte %10000011
byte %00000001
byte %10000011
byte %11000111
byte %11101111
byte %11111011
byte %10000011
byte %10111011
byte %11011011
byte %11101011
diam5
byte %11101111
byte %11000111
byte %10000011
byte %00000001
byte %10000011
byte %11000111
byte %11101111
byte %11000111
byte %10111011
byte %11100111
byte %11011111
byte %11000011
diam6
byte %11101111
byte %11000111
byte %10000011
byte %00000001
byte %10000011
byte %11000111
byte %11101111
byte %11000111
byte %10111011
byte %10000111
byte %10111111
byte %11000011
diam7
byte %11101111
byte %11000111
byte %10000011
byte %00000001
byte %10000011
byte %11000111
byte %11101111
byte %11011111
byte %11101111
byte %11110111
byte %11111011
byte %10000011
diam8
byte %11101111
byte %11000111
byte %10000011
byte %00000001
byte %10000011
byte %11000111
byte %11101111
byte %11000111
byte %10111011
byte %11000111
byte %10111011
byte %11000111
diam9
byte %11101111
byte %11000111
byte %10000011
byte %00000001
byte %10000011
byte %11000111
byte %11101111
byte %10000111
byte %11111011
byte %11000011
byte %10111011
byte %11000111
diam10
byte %11101111
byte %11000111
byte %10000011
byte %00000001
byte %10000011
byte %11000111
byte %11101111
byte %00010011
byte %10101101
byte %10101101
byte %00101101
byte %10110011
diamj
byte %11101111
byte %11000111
byte %10000011
byte %00000001
byte %10000011
byte %11000111
byte %11101111
byte %11001111
byte %10110111
byte %11110111
byte %11110111
byte %11100011
diamq
byte %11101111
byte %11000111
byte %10000011
byte %00000001
byte %10000011
byte %11000111
byte %11101111
byte %11111011
byte %11000111
byte %10111011
byte %10111011
byte %11000111
diamk
byte %11101111
byte %11000111
byte %10000011
byte %00000001
byte %10000011
byte %11000111
byte %11101111
byte %10110111
byte %10101111
byte %10011111
byte %10101111
byte %10110111
blank_card
byte %11111111
byte %11111111
byte %11111111
byte %11111111
byte %11111111
byte %11111111
byte %11111111
byte %11111111
byte %11111111
byte %11111111
byte %11111111
byte %11111111
no_card
repeat 14
byte 0
repend
lo_bytes
byte <spades1, <spades2, <spades3, <spades4, <spades5
byte <spades6, <spades7, <spades8, <spades9, <spades10
byte <spadesj, <spadesq, <spadesk
byte <clubs1, <clubs2, <clubs3, <clubs4, <clubs5
byte <clubs6, <clubs7, <clubs8, <clubs9, <clubs10
byte <clubsj, <clubsq, <clubsk
byte <hearts1, <hearts2, <hearts3, <hearts4, <hearts5
byte <hearts6, <hearts7, <hearts8, <hearts9, <hearts10
byte <heartsj, <heartsq, <heartsk
byte <diam1, <diam2, <diam3, <diam4, <diam5
byte <diam6, <diam7, <diam8, <diam9, <diam10
byte <diamj, <diamq, <diamk, <blank_card, <no_card
hi_bytes
byte >spades1, >spades2, >spades3, >spades4, >spades5
byte >spades6, >spades7, >spades8, >spades9, >spades10
byte >spadesj, >spadesq, >spadesk
byte >clubs1, >clubs2, >clubs3, >clubs4, >clubs5
byte >clubs6, >clubs7, >clubs8, >clubs9, >clubs10
byte >clubsj, >clubsq, >clubsk
byte >hearts1, >hearts2, >hearts3, >hearts4, >hearts5
byte >hearts6, >hearts7, >hearts8, >hearts9, >hearts10
byte >heartsj, >heartsq, >heartsk
byte >diam1, >diam2, >diam3, >diam4, >diam5
byte >diam6, >diam7, >diam8, >diam9, >diam10
byte >diamj, >diamq, >diamk, >blank_card, >no_card
; colors:
;
; PF0: %aaaaXXXX PF1: %bbbbcccc %PF2 %ddddeeee
; a = column 0 ($c = red, $f = black)
; b = column 1 ($3 = red, $f = black)
; c = column 2 ($3 = red, $f = black)
; d = column 4 ($c = red, $f = black)
; e = column 3 ($c = red, $f = black)
colPF0
repeat 16
byte $f0
repend
repeat 16
byte $c0
repend
colPF1
repeat 4
byte $ff,$ff,$ff,$ff,$f3,$f3,$f3,$f3,$3f,$3f,$3f,$3f,$33,$33,$33,$33
repend
colPF2
repeat 8
byte $ff,$cf,$fc,$cc
repend
score_string
byte %00000001
byte %00000010
byte %00000011
byte %00000100
byte %00000101
echo *-cards,"bytes of data"
org $FFFC
word $F000
word $F000
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Aw: Re: [stella] Midified VCS..., cybergoth | Thread | Re: [stella] Poker Solitaire, Roger Williams |
| Re: [stella] Midified VCS..., Oliver Achten | Date | Re: [stella] Midified VCS..., Glenn Saunders |
| Month |