solitaire-c64/piles.c65

119 lines
1.7 KiB
Text

#IFNDEF __lib_piles
#DEFINE __lib_piles 1
GOTO __skip_lib_piles
// Pile data structures
// byte 0 = count, bytes 1-52 = cards
// Cards use CARD_FACEDOWN bit for face-down flag
LABEL pile_stock
ASM
!fill 53, 0
ENDASM
LABEL pile_waste
ASM
!fill 53, 0
ENDASM
LABEL pile_tab0
ASM
!fill 53, 0
ENDASM
LABEL pile_tab1
ASM
!fill 53, 0
ENDASM
LABEL pile_tab2
ASM
!fill 53, 0
ENDASM
LABEL pile_tab3
ASM
!fill 53, 0
ENDASM
LABEL pile_tab4
ASM
!fill 53, 0
ENDASM
LABEL pile_tab5
ASM
!fill 53, 0
ENDASM
LABEL pile_tab6
ASM
!fill 53, 0
ENDASM
LABEL pile_found0
ASM
!fill 14, 0
ENDASM
LABEL pile_found1
ASM
!fill 14, 0
ENDASM
LABEL pile_found2
ASM
!fill 14, 0
ENDASM
LABEL pile_found3
ASM
!fill 14, 0
ENDASM
// ============================================================================
// FUNC clear_all_piles
// Clear all piles (waste, foundations, tableaus) by setting their counts to 0
// Stock is not cleared as it's managed by stock_init()
// ============================================================================
FUNC clear_all_piles
WORD ptr @ $f0
// Clear waste pile
POINTER ptr -> pile_waste
POKE ptr[0] , 0
// Clear all foundation piles
POINTER ptr -> pile_found0
POKE ptr[0] , 0
POINTER ptr -> pile_found1
POKE ptr[0] , 0
POINTER ptr -> pile_found2
POKE ptr[0] , 0
POINTER ptr -> pile_found3
POKE ptr[0] , 0
// Clear all tableau piles
POINTER ptr -> pile_tab0
POKE ptr[0] , 0
POINTER ptr -> pile_tab1
POKE ptr[0] , 0
POINTER ptr -> pile_tab2
POKE ptr[0] , 0
POINTER ptr -> pile_tab3
POKE ptr[0] , 0
POINTER ptr -> pile_tab4
POKE ptr[0] , 0
POINTER ptr -> pile_tab5
POKE ptr[0] , 0
POINTER ptr -> pile_tab6
POKE ptr[0] , 0
FEND
LABEL __skip_lib_piles
#IFEND